<?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>29825</bug_id>
          
          <creation_ts>2009-09-28 14:09:26 -0700</creation_ts>
          <short_desc>[V8] Refactored V8 event listeners.</short_desc>
          <delta_ts>2009-10-02 06:43:14 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Vitaly Repeshko">vitalyr</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>150645</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2009-09-28 14:09:26 -0700</bug_when>
    <thetext>[V8] Refactored V8 event listeners.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150659</commentid>
    <comment_count>1</comment_count>
      <attachid>40260</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2009-09-28 14:29:18 -0700</bug_when>
    <thetext>Created attachment 40260
patch: WIP

Dimitri, please have a look. This is still WIP (testing lazy listeners) and depends on http://code.google.com/p/v8/source/detail?r=2980 (should be in V8 trunk this week), but I think it&apos;s almost done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150664</commentid>
    <comment_count>2</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-09-28 14:36:52 -0700</bug_when>
    <thetext>drive-by comment: Is there any way to test for leaks so this doesn&apos;t regress?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150665</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-09-28 14:38:06 -0700</bug_when>
    <thetext>If this is still a WIP, this should not be marked for review.  One question though, why are the attribute event listeners marked as OnProto?  This does not match the JSC bindings.  Are there tests that indicate it should be this way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150667</commentid>
    <comment_count>4</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2009-09-28 14:40:03 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; drive-by comment: Is there any way to test for leaks so this doesn&apos;t regress?

Yes, for fixed leaks I&apos;ll extend src/webkit/tools/test_shell/listener_leak_test.cc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150669</commentid>
    <comment_count>5</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2009-09-28 14:46:37 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; If this is still a WIP, this should not be marked for review.  One question
&gt; though, why are the attribute event listeners marked as OnProto?  This does not
&gt; match the JSC bindings.  Are there tests that indicate it should be this way?

They are marked with v8onproto attribute because old custom V8 code used to look up the holder of the property in prototype chain. I tried to copy the old behavior. I&apos;ll double-check if this is in fact needed. If JSC doesn&apos;t need this, chances are V8 doesn&apos;t need either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150786</commentid>
    <comment_count>6</comment_count>
      <attachid>40260</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-28 20:00:13 -0700</bug_when>
    <thetext>Comment on attachment 40260
patch: WIP

+1 on investigating v8onproto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151218</commentid>
    <comment_count>7</comment_count>
      <attachid>40360</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2009-09-30 04:43:11 -0700</bug_when>
    <thetext>Created attachment 40360
updated patch

Notification does not require v8onproto. Removed.

Remaining memory leaks in lazy listeners are unrelated to handles and are caused by Function cache for functions created by FunctionTemplate. I&apos;m going to fix usages of FunctionTemplate in V8 bindings in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151293</commentid>
    <comment_count>8</comment_count>
      <attachid>40360</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-30 10:26:50 -0700</bug_when>
    <thetext>Comment on attachment 40360
updated patch

This is super-awesome. I only have style nits.

I would really like to use enums for isAttribute params in getEventListener. That should clarify the call sites.

&gt; +    V8Proxy* proxy = V8Proxy::retrieve(worker-&gt;scriptExecutionContext());
&gt; +    if (proxy) {
&gt; +        return findOnly ? V8EventListenerList::findWrapper(value, isAttribute) : V8EventListenerList::findOrCreateWrapper&lt;V8EventListener&gt;(proxy-&gt;frame(), value, isAttribute);
&gt; +    }

Don&apos;t need braces here.

&gt; +    if (proxy) {
&gt; +        return findOnly ? V8EventListenerList::findWrapper(value, isAttribute) : V8EventListenerList::findOrCreateWrapper&lt;V8EventListener&gt;(proxy-&gt;frame(), value, isAttribute);
&gt; +    }

Ditto.

&gt; +v8::Handle&lt;v8::String&gt; V8HiddenPropertyName::listener()
&gt; +{
&gt; +    static v8::Persistent&lt;v8::String&gt;* string = createString(&quot;WebCore::V8HiddenPropertyName::listener&quot;);
&gt; +

no line break here.

&gt; +    return *string;
&gt; +}
&gt; +
&gt; +v8::Handle&lt;v8::String&gt; V8HiddenPropertyName::attributeListener()
&gt; +{
&gt; +    static v8::Persistent&lt;v8::String&gt;* string = createString(&quot;WebCore::V8HiddenPropertyName::attributeListener&quot;);

Ditto.

&gt; +void V8Proxy::disconnectEventListeners()
&gt; +{
&gt; +}
&gt; +

Why is this here? Can we just get rid of it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151308</commentid>
    <comment_count>9</comment_count>
      <attachid>40386</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2009-09-30 11:41:54 -0700</bug_when>
    <thetext>Created attachment 40386
updated patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151582</commentid>
    <comment_count>10</comment_count>
      <attachid>40386</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-10-01 09:44:25 -0700</bug_when>
    <thetext>Comment on attachment 40386
updated patch v2

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151588</commentid>
    <comment_count>11</comment_count>
      <attachid>40386</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-01 10:02:02 -0700</bug_when>
    <thetext>Comment on attachment 40386
updated patch v2

Clearing flags on attachment: 40386

Committed r48978: &lt;http://trac.webkit.org/changeset/48978&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151589</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-01 10:02:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151744</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-01 18:01:49 -0700</bug_when>
    <thetext>See http://code.google.com/p/chromium/issues/detail?id=23597 I guess this caused some sort of regression.  I&apos;m happy to roll this out if that&apos;s what&apos;s desired.

bugzilla-tool rollout 48978

will prepare the rollout.

bugzilla-tool rollout 48978 --complete-rollout --force-clean

would do the full rollout including testing to make sure it builds/passes tests and updating the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151758</commentid>
    <comment_count>14</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-10-01 20:28:24 -0700</bug_when>
    <thetext>Let&apos;s give vitalyr a chance to fix this. Sadness that it broke.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151836</commentid>
    <comment_count>15</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2009-10-02 06:43:14 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Let&apos;s give vitalyr a chance to fix this. Sadness that it broke.

Reverting this patch doesn&apos;t fix the breakage. Please see discussion in http://code.google.com/p/chromium/issues/detail?id=23597.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40260</attachid>
            <date>2009-09-28 14:29:18 -0700</date>
            <delta_ts>2009-09-30 04:43:11 -0700</delta_ts>
            <desc>patch: WIP</desc>
            <filename>listeners.patch</filename>
            <type>text/plain</type>
            <size>149150</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTA3NzFiYy4uZGQ0M2MyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjUgQEAKKzIwMDktMDktMjggIFZpdGFseSBSZXBl
c2hrbyAgPHZpdGFseXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gUmVmYWN0b3JlZCBWOCBldmVudCBsaXN0ZW5lcnM6
CisgICAgICAgIChUaGlzIGNoYW5nZSBzaG91bGQgZml4IGh0dHA6Ly9jcmJ1Zy5jb20vMjEwNzkg
YW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA5
My4pCisgICAgICAgICBvIEFsbCBsaXN0ZW5lcnMgdXNlIHdlYWsgaGFuZGxlcyB0byBKUyBvYmpl
Y3RzIHRvIGF2b2lkIGNyZWF0aW5nCisgICAgICAgICAgIGN5Y2xlcyBhbmQgbGVha2luZyBtZW1v
cnkuCisgICAgICAgICBvICJPYmplY3QiIHZhcmlhbnRzIG9mIGxpc3RlbmVycyByZW1vdmVkLgor
ICAgICAgICAgbyBBbGwgZXZlbnQgYWNjZXNzb3IgY2FsbGJhY2tzIGFyZSBnZW5lcmF0ZWQuCisg
ICAgICAgICBvIEN1c3RvbSBldmVudCBhY2Nlc3NvcnMgcmVtb3ZlZC4KKyAgICAgICAgIG8gQWxs
IHdyYXBwZXJzIGhhdmUgaGlkZGVuIGRlcGVuZGVuY2llcyBvbiB0aGVpciBsaXN0ZW5lcnMgdG8K
KyAgICAgICAgICAgcHJldmVudCBsaXN0ZW5lcnMgZnJvbSBiZWluZyBjb2xsZWN0ZWQuCisgICAg
ICAgICBvIEFsbCB2YXJpYXRzIG9mIGdldEV2ZW50TGlzdGVuZXIgZnVuY3Rpb24gZ3JvdXBlZCBp
biBWOERPTVdyYXBwZXIuCisgICAgICAgICBvIFBvaW50ZXJzIHRvIEMrKyBFdmVudExpc3RlbmVy
IHdyYXBwZXJzIGFyZSBzdG9yZWQgaW4gSlMgb2JqZWN0cworICAgICAgICAgICBpbnN0ZWFkIG9m
IGV2ZW50IGxpc3RlbmVyIGxpc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjk4MjUKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaTogUmVtb3ZlZCAi
T2JqZWN0IiBsaXN0ZW5lcnMuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG06IE5vdyBoYW5kbGVzIGV2ZW50IGFjY2Vzc29ycy4KKyAgICAgICAgKiBiaW5kaW5n
cy92OC9ET01PYmplY3RzSW5jbHVkZS5oOgorCisgICAgICAgIFY4QWJzdHJhY3RFdmVudExpc3Rl
bmVyIG1hbmFnZXMgd2VhayBKUyBoYW5kbGU6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2Vha0V2ZW50TGlzdGVu
ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6
VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFjdEV2
ZW50TGlzdGVuZXI6On5WOEFic3RyYWN0RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmRpc3Bvc2VMaXN0ZW5lck9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6c2V0TGlzdGVuZXJPYmplY3Qp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Y2FzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aXNMYXp5KToKKyAgICAgICAgKFdlYkNv
cmU6OlY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpnZXRMaXN0ZW5lck9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Z2V0RXhpc3RpbmdMaXN0ZW5lck9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFzRXhp
c3RpbmdMaXN0ZW5lck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRM
aXN0ZW5lcjo6ZGlzY29ubmVjdEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWJzdHJhY3RF
dmVudExpc3RlbmVyOjpkaXNjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFj
dEV2ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6bGluZU51bWJlcik6CisgICAgICAgIChXZWJDb3Jl
OjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6dmlydHVhbGlzQXR0cmlidXRlKToKKworICAgICAg
ICBHcm91cGVkIGdldEV2ZW50TGlzdGVuZXIgZnVuY3Rpb25zOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6Omdl
dFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0
ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmg6CisKKyAgICAgICAg
UmVtb3ZlZCBtb3N0IGV2ZW50IGxpc3RlbmVyIG9iamVjdHMgYm9va2tlZXBpbmc6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExp
c3RlbmVyTGlzdDo6ZmluZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3Rl
bmVyTGlzdDo6Y2xlYXJXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5l
ckxpc3Q6OmRvRmluZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVy
TGlzdDo6Z2V0SGlkZGVuUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3Rl
bmVyTGlzdDo6ZmluZE9yQ3JlYXRlV3JhcHBlcik6CisKKyAgICAgICAgQWRkZWQgaGlkZGVuIHBy
b3BlcnRpZXMgZm9yIHN0b3JpbmcgRXZlbnRMaXN0ZW5lciB3cmFwcGVyczoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OEhpZGRlblByb3BlcnR5TmFtZTo6bGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhIaWRk
ZW5Qcm9wZXJ0eU5hbWU6OmF0dHJpYnV0ZUxpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oOgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5
RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVy
OjpWOExhenlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2ZW50TGlz
dGVuZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2
ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRM
aXN0ZW5lcjo6aXNMYXp5KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlz
dGVuZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRM
aXN0ZW5lci5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZGlzY29ubmVjdEZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4UHJveHk6OmRpc2Nvbm5lY3RFdmVudExpc3RlbmVycyk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhQcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4
dEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXZl
bnRMaXN0ZW5lcjo6cmVwb3J0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250
ZXh0RXZlbnRMaXN0ZW5lcjo6Z2V0UmVjZWl2ZXJPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmg6IFJl
bW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZGlz
cG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6Omlu
aXRDb250ZXh0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
QUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bUJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudExp
c3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lcjo6VjhFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lcjo6Z2V0TGlzdGVuZXJG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOEV2ZW50TGlzdGVuZXI6OmNhbGxMaXN0ZW5l
ckZ1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudExp
c3RlbmVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRpb25D
YWNoZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdldEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19E
RUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNL
X0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFhNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcDoKKworICAgICAgICAoV2ViQ29y
ZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBub3RpZmljYXRpb25zL05vdGlmaWNh
dGlvbi5pZGw6IEFkZGVkIHY4T25Qcm90byBhdHRyaWJ1dGVzIHRvCisgICAgICAgIG1pbWljIG9s
ZCBiZWhhdmlvci4KKwogMjAwOS0wOS0yOCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2ODM2
Yjc1Li4zZGNmMTA0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtNzk0LDggKzc5NCw2IEBACiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhOUFV0aWxzLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Tm9kZUZpbHRl
ckNvbmRpdGlvbi5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Tm9kZUZpbHRlckNv
bmRpdGlvbi5oJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVu
ZXIuY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIu
aCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhQcm94eS5jcHAnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L1Y4UHJveHkuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhTVkdQ
T0RUeXBlV3JhcHBlci5oJywKQEAgLTgwMyw4ICs4MDEsNiBAQAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1Y4VXRpbGl0aWVzLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4V29ya2Vy
Q29udGV4dEV2ZW50TGlzdGVuZXIuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOFdv
cmtlckNvbnRleHRFdmVudExpc3RlbmVyLmgnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwJywKLSAgICAgICAgICAgICdiaW5k
aW5ncy92OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmgnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgnLApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggN2YxNTA4Yi4uMzZiN2Vl
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0z
MjYsMTAgKzMyNiwyNiBAQCBzdWIgSXNOb2RlU3ViVHlwZQogICAgIHJldHVybiAwOwogfQogCi1z
dWIgUmVxdWlyZXNDdXN0b21FdmVudExpc3RlbmVyQWNjZXNzb3JzCitzdWIgR2V0SGlkZGVuRGVw
ZW5kZW5jeUluZGV4CiB7CiAgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7Ci0gICAgcmV0dXJuICFJ
c05vZGVTdWJUeXBlKCRkYXRhTm9kZSkgJiYgJGRhdGFOb2RlLT5uYW1lIG5lICJTVkdFbGVtZW50
SW5zdGFuY2UiOworICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsKKyAgICBteSAkbmFtZSA9ICRk
YXRhTm9kZS0+bmFtZTsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjprTm9kZUV2ZW50TGlzdGVuZXJD
YWNoZUluZGV4IiBpZiBJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSk7CisgICAgcmV0dXJuICJWOEN1
c3RvbTo6a1NWR0VsZW1lbnRJbnN0YW5jZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4IiBpZiAkbmFt
ZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIjsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjprQWJzdHJh
Y3RXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCIgaWYgJG5hbWUgZXEgIkFic3RyYWN0V29ya2VyIjsK
KyAgICByZXR1cm4gIlY4Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgiIGlmICRuYW1l
IGVxICJXb3JrZXIiOworICAgIHJldHVybiAiVjhDdXN0b206OmtEZWRpY2F0ZWRXb3JrZXJDb250
ZXh0UmVxdWVzdENhY2hlSW5kZXgiIGlmICRuYW1lIGVxICJEZWRpY2F0ZWRXb3JrZXJDb250ZXh0
IjsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjprV29ya2VyQ29udGV4dFJlcXVlc3RDYWNoZUluZGV4
IiBpZiAkbmFtZSBlcSAiV29ya2VyQ29udGV4dCI7CisgICAgcmV0dXJuICJWOEN1c3RvbTo6a1dv
cmtlckNvbnRleHRSZXF1ZXN0Q2FjaGVJbmRleCIgaWYgJG5hbWUgZXEgIlNoYXJlZFdvcmtlckNv
bnRleHQiOworICAgIHJldHVybiAiVjhDdXN0b206OmtNZXNzYWdlUG9ydFJlcXVlc3RDYWNoZUlu
ZGV4IiBpZiAkbmFtZSBlcSAiTWVzc2FnZVBvcnQiOworICAgIHJldHVybiAiVjhDdXN0b206OmtX
ZWJTb2NrZXRDYWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiV2ViU29ja2V0IjsKKyAgICByZXR1cm4g
IlY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiWE1MSHR0
cFJlcXVlc3QiOworICAgIHJldHVybiAiVjhDdXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5k
ZXgiIGlmICRuYW1lIGVxICJYTUxIdHRwUmVxdWVzdFVwbG9hZCI7CisgICAgcmV0dXJuICJWOEN1
c3RvbTo6a0RPTUFwcGxpY2F0aW9uQ2FjaGVDYWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiRE9NQXBw
bGljYXRpb25DYWNoZSI7CisgICAgcmV0dXJuICJWOEN1c3RvbTo6a05vdGlmaWNhdGlvblJlcXVl
c3RDYWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiTm90aWZpY2F0aW9uIjsKKyAgICByZXR1cm4gIlY4
Q3VzdG9tOjprRE9NV2luZG93RXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgiIGlmICRuYW1lIGVxICJE
T01XaW5kb3ciOworICAgIGRpZSAiVW5leHBlY3RlZCBuYW1lICIgLiAkbmFtZSAuICIgd2hlbiBn
ZW5lcmF0aW5nICIgLiAkYXR0cmlidXRlOwogfQogCiBzdWIgSG9sZGVyVG9OYXRpdmUKQEAgLTU5
NCw2ICs2MTAsMTAgQEAgRU5ECiAgICAgICAgIH0KIAogICAgIH0gZWxzZSB7CisgICAgICAgIGlm
ICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiICYmICRkYXRh
Tm9kZS0+bmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIiAgICBpZiAoIWltcC0+ZG9jdW1lbnQoKSlcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7XG4iKTsK
KyAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVU
eXBlIHYgPSAiKTsKIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiJGdldHRlclN0
cmluZztcbiIpOwpAQCAtNjc1LDcgKzY5NSw3IEBAIHN1YiBHZW5lcmF0ZU5vcm1hbEF0dHJTZXR0
ZXIKICAgICAgICAgIyBwZXJmb3JtIGxvb2t1cCBmaXJzdAogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCA8PEVORCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBW
OERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwg
aW5mby5UaGlzKCkpOwotICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOworICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSByZXR1cm47CiBFTkQKICAgICAgICAg
SG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOwog
ICAgIH0gZWxzZSB7CkBAIC02ODcsNiArNzA3LDEwIEBAIEVORAogCiAgICAgbXkgJG5hdGl2ZVR5
cGUgPSBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAp
OwogICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIkV2ZW50TGlzdGVuZXIi
KSB7CisgICAgICAgIGlmICgkZGF0YU5vZGUtPm5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCFpbXAtPmRvY3VtZW50KCkp
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICByZXR1cm47
XG4iKTsKKyAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRu
YXRpdmVUeXBlIHYgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoaW1wLCB2YWx1ZSwg
dHJ1ZSwgZmFsc2UpO1xuIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIiAgICAkbmF0aXZlVHlwZSB2ID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpIC4gIjtcbiIpOwpAQCAtNzI1LDE0ICs3NDksMTcgQEAg
RU5ECiAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBlcSAiRXZl
bnRMaXN0ZW5lciIpIHsKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4QWJzdHJhY3RFdmVu
dExpc3RlbmVyLmgifSA9IDE7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEN1c3RvbUJp
bmRpbmcuaCJ9ID0gMTsKKyAgICAgICAgICAgICRjYWNoZUluZGV4ID0gR2V0SGlkZGVuRGVwZW5k
ZW5jeUluZGV4KCRkYXRhTm9kZSwgJGF0dHJOYW1lKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgb2xkID0gaW1wLT4kYXR0ck5hbWUoKTtcbiIp
OwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAob2xkICYmIHN0
YXRpY19jYXN0PFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKj4ob2xkLmdldCgpKS0+aXNPYmplY3RM
aXN0ZW5lcigpKSB7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2xkTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOEFi
c3RyYWN0RXZlbnRMaXN0ZW5lcio+KG9sZC5nZXQoKSktPmdldExpc3RlbmVyT2JqZWN0KCk7XG4i
KTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICByZW1vdmVIaWRk
ZW5EZXBlbmRlbmN5KGhvbGRlciwgb2xkTGlzdGVuZXIsIFY4Q3VzdG9tOjprTm9kZUV2ZW50TGlz
dGVuZXJDYWNoZUluZGV4KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciogb2xkTGlzdGVuZXIgPSBvbGQgPyBWOEFi
c3RyYWN0RXZlbnRMaXN0ZW5lcjo6Y2FzdChvbGQuZ2V0KCkpIDogMDtcbiIpOworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAob2xkTGlzdGVuZXIpIHtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBvbGRMaXN0ZW5lck9iamVjdCA9IG9sZExpc3RlbmVyLT5nZXRFeGlzdGluZ0xpc3Rl
bmVyT2JqZWN0KCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgICBpZiAoIW9sZExpc3RlbmVyT2JqZWN0LklzRW1wdHkoKSlcbiIpOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeSho
b2xkZXIsIG9sZExpc3RlbmVyT2JqZWN0LCAkY2FjaGVJbmRleCk7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgIGltcC0+c2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoJHJl
c3VsdCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYg
KCRyZXN1bHQpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
ICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGhvbGRlciwgdmFsdWUsIFY4Q3VzdG9tOjprTm9kZUV2
ZW50TGlzdGVuZXJDYWNoZUluZGV4Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShob2xkZXIsIHZhbHVlLCAkY2FjaGVJ
bmRleCIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICBpbXAtPnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAkcmVzdWx0KTsK
ICAgICAgICAgfQpAQCAtOTYzLDI2ICs5OTAsNiBAQCBzdWIgR2VuZXJhdGVCYXRjaGVkQXR0cmli
dXRlRGF0YQogICAgICAgICAgICAgJHNldHRlciA9ICIwIjsKICAgICAgICAgICAgICRwcm9wQXR0
ciA9ICJ2ODo6UmVhZE9ubHkiOwogCi0gICAgICAgICMgRXZlbnRMaXN0ZW5lcnMKLSAgICAgICAg
fSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJFdmVudExpc3RlbmVyIiAm
JiBSZXF1aXJlc0N1c3RvbUV2ZW50TGlzdGVuZXJBY2Nlc3NvcnMoJGRhdGFOb2RlKSkgewotICAg
ICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7Ci0gICAgICAgICAg
ICAgICAgJGdldHRlciA9ICJWOEN1c3RvbTo6djhET01XaW5kb3dFdmVudEhhbmRsZXJBY2Nlc3Nv
ckdldHRlciI7Ci0gICAgICAgICAgICAgICAgJHNldHRlciA9ICJWOEN1c3RvbTo6djhET01XaW5k
b3dFdmVudEhhbmRsZXJBY2Nlc3NvclNldHRlciI7Ci0gICAgICAgICAgICB9IGVsc2lmICgkaW50
ZXJmYWNlTmFtZSBlcSAiRE9NQXBwbGljYXRpb25DYWNoZSIpIHsKLSAgICAgICAgICAgICAgICAk
Z2V0dGVyID0gIlY4Q3VzdG9tOjp2OERPTUFwcGxpY2F0aW9uQ2FjaGVFdmVudEhhbmRsZXJBY2Nl
c3NvckdldHRlciI7Ci0gICAgICAgICAgICAgICAgJHNldHRlciA9ICJWOEN1c3RvbTo6djhET01B
cHBsaWNhdGlvbkNhY2hlRXZlbnRIYW5kbGVyQWNjZXNzb3JTZXR0ZXIiOwotICAgICAgICAgICAg
fSBlbHNpZiAoJGludGVyZmFjZU5hbWUgZXEgIk5vdGlmaWNhdGlvbiIpIHsKLSAgICAgICAgICAg
ICAgICAkZ2V0dGVyID0gIlY4Q3VzdG9tOjp2OE5vdGlmaWNhdGlvbkV2ZW50SGFuZGxlckFjY2Vz
c29yR2V0dGVyIjsKLSAgICAgICAgICAgICAgICAkc2V0dGVyID0gIlY4Q3VzdG9tOjp2OE5vdGlm
aWNhdGlvbkV2ZW50SGFuZGxlckFjY2Vzc29yU2V0dGVyIjsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgJGdldHRlciA9ICJWOEN1c3RvbTo6djgke2N1c3RvbUFjY2Vzc29y
fUFjY2Vzc29yR2V0dGVyIjsKLSAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEg
IldvcmtlckNvbnRleHQiIGFuZCAkYXR0ck5hbWUgZXEgInNlbGYiKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICRzZXR0ZXIgPSAiMCI7Ci0gICAgICAgICAgICAgICAgICAgICRwcm9wQXR0ciA9ICJ2
ODo6UmVhZE9ubHkiOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICRzZXR0ZXIgPSAiVjhDdXN0b206OnY4JHtjdXN0b21BY2Nlc3Nvcn1BY2Nlc3NvclNldHRl
ciI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgIyBEZWZhdWx0IEdldHRlciBhbmQgU2V0dGVyCiAgICAgICAgICAgICAkZ2V0
dGVyID0gIiR7aW50ZXJmYWNlTmFtZX1JbnRlcm5hbDo6JHthdHRyTmFtZX1BdHRyR2V0dGVyIjsK
QEAgLTEwOTIsMTYgKzEwOTksOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICAgICAgbmV4dDsKICAgICAgICAgfQogCi0gICAgICAgICMgTWFrZSBFdmVudExpc3RlbmVycyBj
dXN0b20gZm9yIHNvbWUgdHlwZXMuCi0gICAgICAgICMgRklYTUU6IG1ha2UgdGhlIHBlcmwgY29k
ZSBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgdGhlCi0gICAgICAgICMgICBldmVudCBzZXR0ZXJzL2dl
dHRlcnMuICBGb3Igbm93LCBXZWJLaXQgaGFzIHN0YXJ0ZWQgcmVtb3ZpbmcgdGhlCi0gICAgICAg
ICMgICBbQ3VzdG9tXSBhdHRyaWJ1dGUsIHNvIGp1c3QgYXV0b21hdGljYWxseSBpbnNlcnQgaXQg
dG8gYXZvaWQgZm9ya2luZwotICAgICAgICAjICAgb3RoZXIgZmlsZXMuICBUaGlzIHNob3VsZCBi
ZSBva2F5IGJlY2F1c2Ugd2UgY2FuJ3QgZ2VuZXJhdGUgc3R1YnMKLSAgICAgICAgIyAgIGZvciBh
bnkgZXZlbnQgZ2V0dGVyL3NldHRlcnMgYW55d2F5LgotICAgICAgICBpZiAoJGF0dHJUeXBlIGVx
ICJFdmVudExpc3RlbmVyIiAmJiBSZXF1aXJlc0N1c3RvbUV2ZW50TGlzdGVuZXJBY2Nlc3NvcnMo
JGRhdGFOb2RlKSkgewotICAgICAgICAgICAgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0gPSAxOwotICAgICAgICAgICAgJGltcGxJbmNsdWRlc3si
VjhDdXN0b21CaW5kaW5nLmgifSA9IDE7Ci0gICAgICAgICAgICBuZXh0OworICAgICAgICBpZiAo
JGF0dHJUeXBlIGVxICJFdmVudExpc3RlbmVyIiAmJiAkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2lu
ZG93IikgeworICAgICAgICAgICAgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsidjhPblByb3RvIn0gPSAxOwogICAgICAgICB9CiAKICAgICAgICAgIyBEbyBub3Qg
Z2VuZXJhdGUgYWNjZXNzb3IgaWYgdGhpcyBpcyBhIGN1c3RvbSBhdHRyaWJ1dGUuICBUaGUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0c0luY2x1ZGUuaCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0c0luY2x1ZGUuaAppbmRleCBlNTc5NmU3Li4wMTI0MTY1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9iamVjdHNJbmNsdWRlLmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oCkBAIC0xNTcsNyArMTU3
LDYgQEAKICNpbmNsdWRlICJWOEhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhMYXp5RXZlbnRM
aXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4Tm9kZUZpbHRlckNvbmRpdGlvbi5oIgotI2luY2x1ZGUg
IlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlZhbGlkaXR5U3RhdGUuaCIKICNp
bmNsdWRlICJXZWJLaXRBbmltYXRpb25FdmVudC5oIgogI2luY2x1ZGUgIldlYktpdENTU0tleWZy
YW1lUnVsZS5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZl
bnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3Rl
bmVyLmNwcAppbmRleCAxODI5ZTI5Li41M2QyZjU4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcApAQCAtMzcsMTIgKzM3LDIwIEBACiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOEV2ZW50TGlzdGVuZXJMaXN0LmgiCiAjaW5jbHVkZSAiVjhVdGls
aXRpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgdm9pZCB3ZWFrRXZlbnRM
aXN0ZW5lckNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIHZvaWQqIHBhcmFtZXRl
cikKK3sKKyAgICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2Fz
dDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KHBhcmFtZXRlcik7CisgICAgbGlzdGVuZXItPmRp
c3Bvc2VMaXN0ZW5lck9iamVjdCgpOworfQorCiBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6VjhB
YnN0cmFjdEV2ZW50TGlzdGVuZXIoRnJhbWUqIGZyYW1lLCBib29sIGlzQXR0cmlidXRlKQogICAg
IDogRXZlbnRMaXN0ZW5lcihKU0V2ZW50TGlzdGVuZXJUeXBlKQorICAgICwgbV9pc1dlYWsodHJ1
ZSkKICAgICAsIG1faXNBdHRyaWJ1dGUoaXNBdHRyaWJ1dGUpCiAgICAgLCBtX2ZyYW1lKGZyYW1l
KQogICAgICwgbV9saW5lTnVtYmVyKDApCkBAIC02Myw2ICs3MSw3MCBAQCBWOEFic3RyYWN0RXZl
bnRMaXN0ZW5lcjo6VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoRnJhbWUqIGZyYW1lLCBib29sIGlz
QXR0cmlidXRlKQogICAgIH0KIH0KIAorVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6On5WOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lcigpCit7CisgICAgaWYgKCFtX2xpc3RlbmVyLklzRW1wdHkoKSkKKyAg
ICAgICAgVjhFdmVudExpc3RlbmVyTGlzdDo6Y2xlYXJXcmFwcGVyKG1fbGlzdGVuZXIsIG1faXNB
dHRyaWJ1dGUpOworICAgIGRpc3Bvc2VMaXN0ZW5lck9iamVjdCgpOworfQorCit2b2lkIFY4QWJz
dHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgLy8g
RXZlbnRMaXN0ZW5lciBjb3VsZCBiZSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgZnJhbWUuCisgICAg
aWYgKGRpc2Nvbm5lY3RlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgY2FsbGJh
Y2sgZnVuY3Rpb24gb24gWE1MSHR0cFJlcXVlc3QgY2FuIGNsZWFyIHRoZSBldmVudCBsaXN0ZW5l
ciBhbmQgZGVzdHJveXMgJ3RoaXMnIG9iamVjdC4gS2VlcCBhIGxvY2FsIHJlZmVyZW5jZSB0byBp
dC4KKyAgICAvLyBTZWUgaXNzdWUgODg5ODI5LgorICAgIFJlZlB0cjxWOEFic3RyYWN0RXZlbnRM
aXN0ZW5lcj4gcHJvdGVjdCh0aGlzKTsKKworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKKworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDcmVh
dGUgYSBuZXcgbG9jYWwgaGFuZGxlIHNpbmNlIHRoZSBwZXJzaXN0ZW50IGhhbmRsZSBzdG9yZWQg
aW4KKyAgICAvLyBtX2NvbnRleHQgbWF5IGJlIGRpc3Bvc2VkIGJlZm9yZSB3ZSdyZSBkb25lLgor
ICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29u
dGV4dD46Ok5ldyhtX2NvbnRleHQtPmdldCgpKTsKKyAgICBpZiAodjhDb250ZXh0LklzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gbV9mcmFtZSBjYW4gcmVtb3ZlZCBieSB0aGUg
Y2FsbGJhY2sgZnVuY3Rpb24sIHByb3RlY3QgaXQgdW50aWwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9u
IHJldHVybnMuCisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0RnJhbWUobV9mcmFtZSk7CisKKyAg
ICAvLyBFbnRlciB0aGUgVjggY29udGV4dCBpbiB3aGljaCB0byBwZXJmb3JtIHRoZSBldmVudCBo
YW5kbGluZy4KKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0KTsKKworICAg
IC8vIEdldCB0aGUgVjggd3JhcHBlciBmb3IgdGhlIGV2ZW50IG9iamVjdC4KKyAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4ganNFdmVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VG9WOE9i
amVjdChldmVudCk7CisKKyAgICBpbnZva2VFdmVudEhhbmRsZXIodjhDb250ZXh0LCBldmVudCwg
anNFdmVudCk7CisKKyAgICBEb2N1bWVudDo6dXBkYXRlU3R5bGVGb3JBbGxEb2N1bWVudHMoKTsK
K30KKwordm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6ZGlzcG9zZUxpc3RlbmVyT2JqZWN0
KCkKK3sKKyAgICBpZiAoIW1fbGlzdGVuZXIuSXNFbXB0eSgpKSB7CisjaWZuZGVmIE5ERUJVRwor
ICAgICAgICBWOEdDQ29udHJvbGxlcjo6dW5yZWdpc3Rlckdsb2JhbEhhbmRsZSh0aGlzLCBtX2xp
c3RlbmVyKTsKKyNlbmRpZgorICAgICAgICBtX2xpc3RlbmVyLkRpc3Bvc2UoKTsKKyAgICAgICAg
bV9saXN0ZW5lci5DbGVhcigpOworICAgIH0KK30KKwordm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0
ZW5lcjo6c2V0TGlzdGVuZXJPYmplY3Qodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBsaXN0ZW5lcikK
K3sKKyAgICBkaXNwb3NlTGlzdGVuZXJPYmplY3QoKTsKKyAgICBtX2xpc3RlbmVyID0gdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhsaXN0ZW5lcik7CisjaWZuZGVmIE5ERUJVRworICAg
IFY4R0NDb250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZShFVkVOVF9MSVNURU5FUiwgdGhp
cywgbV9saXN0ZW5lcik7CisjZW5kaWYKKyAgICBpZiAobV9pc1dlYWspCisgICAgICAgIG1fbGlz
dGVuZXIuTWFrZVdlYWsodGhpcywgJndlYWtFdmVudExpc3RlbmVyQ2FsbGJhY2spOworfQorCiB2
b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjppbnZva2VFdmVudEhhbmRsZXIodjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0LCBFdmVudCogZXZlbnQsIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqc0V2ZW50KQogewogICAgIC8vIFdlIHB1c2ggdGhlIGV2ZW50IGJlaW5nIHByb2Nlc3Nl
ZCBpbnRvIHRoZSBnbG9iYWwgb2JqZWN0LCBzbyB0aGF0IGl0IGNhbiBiZSBleHBvc2VkIGJ5IERP
TVdpbmRvdydzIGJpbmRpbmdzLgpAQCAtMTI0LDUyICsxOTYsNiBAQCB2b2lkIFY4QWJzdHJhY3RF
dmVudExpc3RlbmVyOjppbnZva2VFdmVudEhhbmRsZXIodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
djhDb250ZQogICAgICAgICBldmVudC0+cHJldmVudERlZmF1bHQoKTsKIH0KIAotdm9pZCBWOEFi
c3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQotewotICAgIC8v
IEV2ZW50TGlzdGVuZXIgY291bGQgYmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIGZyYW1lLgotICAg
IGlmIChkaXNjb25uZWN0ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGNhbGxi
YWNrIGZ1bmN0aW9uIG9uIFhNTEh0dHBSZXF1ZXN0IGNhbiBjbGVhciB0aGUgZXZlbnQgbGlzdGVu
ZXIgYW5kIGRlc3Ryb3lzICd0aGlzJyBvYmplY3QuIEtlZXAgYSBsb2NhbCByZWZlcmVuY2UgdG8g
aXQuCi0gICAgLy8gU2VlIGlzc3VlIDg4OTgyOS4KLSAgICBSZWZQdHI8VjhBYnN0cmFjdEV2ZW50
TGlzdGVuZXI+IHByb3RlY3QodGhpcyk7Ci0KLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7Ci0KLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ3Jl
YXRlIGEgbmV3IGxvY2FsIGhhbmRsZSBzaW5jZSB0aGUgcGVyc2lzdGVudCBoYW5kbGUgc3RvcmVk
IGluCi0gICAgLy8gbV9jb250ZXh0IG1heSBiZSBkaXNwb3NlZCBiZWZvcmUgd2UncmUgZG9uZS4K
LSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNv
bnRleHQ+OjpOZXcobV9jb250ZXh0LT5nZXQoKSk7Ci0gICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIG1fZnJhbWUgY2FuIHJlbW92ZWQgYnkgdGhl
IGNhbGxiYWNrIGZ1bmN0aW9uLCBwcm90ZWN0IGl0IHVudGlsIHRoZSBjYWxsYmFjayBmdW5jdGlv
biByZXR1cm5zLgotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdEZyYW1lKG1fZnJhbWUpOwotCi0g
ICAgLy8gRW50ZXIgdGhlIFY4IGNvbnRleHQgaW4gd2hpY2ggdG8gcGVyZm9ybSB0aGUgZXZlbnQg
aGFuZGxpbmcuCi0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7Ci0KLSAg
ICAvLyBHZXQgdGhlIFY4IHdyYXBwZXIgZm9yIHRoZSBldmVudCBvYmplY3QuCi0gICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRvVjhP
YmplY3QoZXZlbnQpOwotCi0gICAgaW52b2tlRXZlbnRIYW5kbGVyKHY4Q29udGV4dCwgZXZlbnQs
IGpzRXZlbnQpOwotCi0gICAgRG9jdW1lbnQ6OnVwZGF0ZVN0eWxlRm9yQWxsRG9jdW1lbnRzKCk7
Ci19Ci0KLXZvaWQgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmRpc3Bvc2VMaXN0ZW5lck9iamVj
dCgpCi17Ci0gICAgaWYgKCFtX2xpc3RlbmVyLklzRW1wdHkoKSkgewotI2lmbmRlZiBOREVCVUcK
LSAgICAgICAgVjhHQ0NvbnRyb2xsZXI6OnVucmVnaXN0ZXJHbG9iYWxIYW5kbGUodGhpcywgbV9s
aXN0ZW5lcik7Ci0jZW5kaWYKLSAgICAgICAgbV9saXN0ZW5lci5EaXNwb3NlKCk7Ci0gICAgICAg
IG1fbGlzdGVuZXIuQ2xlYXIoKTsKLSAgICB9Ci19Ci0KIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBW
OEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Z2V0UmVjZWl2ZXJPYmplY3QoRXZlbnQqIGV2ZW50KQog
ewogICAgIGlmICghbV9saXN0ZW5lci5Jc0VtcHR5KCkgJiYgIW1fbGlzdGVuZXItPklzRnVuY3Rp
b24oKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlz
dGVuZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaApp
bmRleCA3ODljZjA0Li40YjlmNzczIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QWJzdHJhY3RFdmVudExpc3RlbmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lci5oCkBAIC01MSw0MyArNTEsODQgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIC8vIGJ1dCBBTExPV3MgZHVwbGljYXRlZCBub24tSFRNTCBldmVudCBoYW5kbGVycy4K
ICAgICBjbGFzcyBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVy
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflY4QWJzdHJhY3RFdmVudExpc3RlbmVy
KCkgeyB9CisgICAgICAgIHZpcnR1YWwgflY4QWJzdHJhY3RFdmVudExpc3RlbmVyKCk7CisKKyAg
ICAgICAgc3RhdGljIGNvbnN0IFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKiBjYXN0KGNvbnN0IEV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbGlz
dGVuZXItPnR5cGUoKSA9PSBKU0V2ZW50TGlzdGVuZXJUeXBlCisgICAgICAgICAgICAgICAgPyBz
dGF0aWNfY2FzdDxjb25zdCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKQorICAg
ICAgICAgICAgICAgIDogMDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBWOEFic3RyYWN0
RXZlbnRMaXN0ZW5lciogY2FzdChFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIqPihj
YXN0KGNvbnN0X2Nhc3Q8Y29uc3QgRXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKSkpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gSW1wbGVtZW50YXRpb24gb2YgRXZlbnRMaXN0ZW5lciBpbnRlcmZh
Y2UuCiAKICAgICAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5l
ciYgb3RoZXIpIHsgcmV0dXJuIHRoaXMgPT0gJm90aGVyOyB9CiAKKyAgICAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7CisKICAgICAgICAgLy8gUmV0dXJucyB0aGUgb3duZXIg
ZnJhbWUgb2YgdGhlIGxpc3RlbmVyLgogICAgICAgICBGcmFtZSogZnJhbWUoKSB7IHJldHVybiBt
X2ZyYW1lOyB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7Ci0g
ICAgICAgIHZvaWQgaW52b2tlRXZlbnRIYW5kbGVyKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+LCBF
dmVudCosIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50KTsKKyAgICAgICAgdmlydHVhbCBi
b29sIGlzTGF6eSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgLy8gUmV0dXJu
cyB0aGUgbGlzdGVuZXIgb2JqZWN0LCBlaXRoZXIgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QuCi0g
ICAgICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGdldExpc3RlbmVyT2JqZWN0KCkK
KyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGdldExpc3RlbmVyT2JqZWN0KCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcHJlcGFyZUxpc3RlbmVyT2JqZWN0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gdjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpOZXcobV9saXN0ZW5lcik7CisgICAgICAgIH0K
KworICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZ2V0RXhpc3RpbmdMaXN0ZW5lck9iamVj
dCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46
Ok5ldyhtX2xpc3RlbmVyKTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgaGFzRXhpc3RpbmdM
aXN0ZW5lck9iamVjdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhbV9saXN0ZW5l
ci5Jc0VtcHR5KCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBEaXNwb3NlIGxpc3RlbmVyIG9i
amVjdCBhbmQgY2xlYXIgdGhlIGhhbmRsZS4KICAgICAgICAgdm9pZCBkaXNwb3NlTGlzdGVuZXJP
YmplY3QoKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzY29ubmVjdGVkKCkgY29uc3QgeyBy
ZXR1cm4gIW1fZnJhbWU7IH0KKyAgICAgICAgLy8gRGV0YWNoIHRoZSBsaXN0ZW5lciBmcm9tIGl0
cyBvd25lciBmcmFtZS4KKyAgICAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKSB7IG1fZnJhbWUg
PSAwOyB9CiAKLSAgICAgICAgdmlydHVhbCBib29sIGlzT2JqZWN0TGlzdGVuZXIoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzY29ubmVjdGVkKCkgY29u
c3QgeyByZXR1cm4gIW1fZnJhbWU7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9saXN0ZW5lcjsKKyAgICAgICAgVjhBYnN0cmFjdEV2ZW50
TGlzdGVuZXIoRnJhbWUqLCBib29sIGlzQXR0cmlidXRlKTsKIAotICAgICAgICAvLyBJbmRpY2F0
ZXMgaWYgdGhpcyBpcyBhbiBIVE1MIHR5cGUgbGlzdGVuZXIuCi0gICAgICAgIGJvb2wgbV9pc0F0
dHJpYnV0ZTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVMaXN0ZW5lck9iamVjdCgpIHsg
fQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoRnJhbWUq
LCBib29sIGlzSW5saW5lKTsKKyAgICAgICAgdm9pZCBzZXRMaXN0ZW5lck9iamVjdCh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGxpc3RlbmVyKTsKIAotICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc2V2
ZW50LCBFdmVudCopID0gMDsKKyAgICAgICAgdm9pZCBpbnZva2VFdmVudEhhbmRsZXIodjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4sIEV2ZW50Kiwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQp
OwogCiAgICAgICAgIC8vIEdldCB0aGUgcmVjZWl2ZXIgb2JqZWN0IHRvIHVzZSBmb3IgZXZlbnQg
bGlzdGVuZXIgY2FsbC4KICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGdldFJlY2VpdmVy
T2JqZWN0KEV2ZW50Kik7CiAKKyAgICAgICAgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVy
biBtX2xpbmVOdW1iZXI7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIC8vIEltcGxlbWVudGF0
aW9uIG9mIEV2ZW50TGlzdGVuZXIgZnVuY3Rpb24uCisgICAgICAgIHZpcnR1YWwgYm9vbCB2aXJ0
dWFsaXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX2lzQXR0cmlidXRlOyB9CisKKyAgICAg
ICAgdmlydHVhbCB2ODo6TG9jYWw8djg6OlZhbHVlPiBjYWxsTGlzdGVuZXJGdW5jdGlvbih2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4ganNldmVudCwgRXZlbnQqKSA9IDA7CisKKyAgICAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9saXN0ZW5lcjsKKworICAgICAgICAvLyBJbmRpY2F0ZXMg
aWYgdGhlIGFib3ZlIGhhbmRsZSBpcyB3ZWFrLgorICAgICAgICBib29sIG1faXNXZWFrOworCisg
ICAgICAgIC8vIEluZGljYXRlcyBpZiB0aGlzIGlzIGFuIEhUTUwgdHlwZSBsaXN0ZW5lci4KKyAg
ICAgICAgYm9vbCBtX2lzQXR0cmlidXRlOworCiAgICAgICAgIC8vIEZyYW1lIHRvIHdoaWNoIHRo
ZSBldmVudCBsaXN0ZW5lciBpcyBhdHRhY2hlZCB0by4gQW4gZXZlbnQgbGlzdGVuZXIgbXVzdCBi
ZSBkZXN0cm95ZWQgYmVmb3JlIGl0cyBvd25lciBmcmFtZSBpcwogICAgICAgICAvLyBkZWxldGVk
LiBTZWUgZmFzdC9kb20vcmVwbGFjZUNoaWxkLmh0bWwKICAgICAgICAgLy8gRklYTUU6IHRoaXMg
Y291bGQgaG9sZCBtX2ZyYW1lIGxpdmUgdW50aWwgdGhlIGV2ZW50IGxpc3RlbmVyIGlzIGRlbGV0
ZWQuCkBAIC05NywxMCArMTM4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBQ
b3NpdGlvbiBpbiB0aGUgSFRNTCBzb3VyY2UgZm9yIEhUTUwgZXZlbnQgbGlzdGVuZXJzLgogICAg
ICAgICBpbnQgbV9saW5lTnVtYmVyOwogICAgICAgICBpbnQgbV9jb2x1bW5OdW1iZXI7Ci0KLSAg
ICAgICAgZnJpZW5kIGNsYXNzIFY4RXZlbnRMaXN0ZW5lcjsKLSAgICAgICAgZnJpZW5kIGNsYXNz
IFY4T2JqZWN0RXZlbnRMaXN0ZW5lcjsKLSAgICAgICAgZnJpZW5kIGNsYXNzIFY4TGF6eUV2ZW50
TGlzdGVuZXI7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTVdyYXBwZXIuY3BwCmluZGV4IDEwZGY4NWMuLjM2ZWExOTkgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHAKQEAgLTM2LDE4ICszNiwxOSBAQAogI2luY2x1ZGUgIkRPTU9i
amVjdHNJbmNsdWRlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvbi5oIgogI2luY2x1ZGUg
IlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJWOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5o
IgogI2luY2x1ZGUgIlY4Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5o
IgorI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4RE9NTWFw
LmgiCiAjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKICNpbmNsdWRlICJWOEV2ZW50TGlzdGVuZXJM
aXN0LmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgogI2luY2x1ZGUgIlY4SXNvbGF0ZWRXb3JsZC5o
IgotI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4UHJveHku
aCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKIApAQCAtMzkzLDYg
KzM5NCwxNSBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhET01XcmFw
cGVyOjpnZXRUZW1wbGF0ZShWOENsYXNzSW5kZXg6OlY4VwogICAgIH0KICNlbmRpZiAvLyBOT1RJ
RklDQVRJT05TCiAKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGNhc2UgVjhDbGFzc0luZGV4OjpTVkdF
TEVNRU5USU5TVEFOQ0U6IHsKKyAgICAgICAgLy8gUmVzZXJ2ZSBvbmUgbW9yZSBpbnRlcm5hbCBm
aWVsZCBmb3Iga2VlcGluZyBldmVudCBsaXN0ZW5lcnMuCisgICAgICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlVGVtcGxhdGUgPSBkZXNjcmlwdG9yLT5JbnN0YW5jZVRl
bXBsYXRlKCk7CisgICAgICAgIGluc3RhbmNlVGVtcGxhdGUtPlNldEludGVybmFsRmllbGRDb3Vu
dChWOEN1c3RvbTo6a1NWR0VsZW1lbnRJbnN0YW5jZUludGVybmFsRmllbGRDb3VudCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgY2Fz
ZSBWOENsYXNzSW5kZXg6OkFCU1RSQUNUV09SS0VSOiB7CiAgICAgICAgIC8vIFJlc2VydmUgb25l
IG1vcmUgaW50ZXJuYWwgZmllbGQgZm9yIGtlZXBpbmcgZXZlbnQgbGlzdGVuZXJzLgpAQCAtMTM4
OCwxMCArMTM5OCw4IEBAIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gVjhET01XcmFwcGVyOjpn
ZXRFdmVudExpc3RlbmVyKE5vZGUqIG5vZGUsIHY4OjpMb2NhbDx2CiAgICAgaWYgKCFwcm94eSkK
ICAgICAgICAgcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShWOFByb3h5OjpyZXRyaWV2ZUZyYW1l
Rm9yRW50ZXJlZENvbnRleHQoKSk7CiAKLSAgICBpZiAocHJveHkpIHsKLSAgICAgICAgVjhFdmVu
dExpc3RlbmVyTGlzdCogbGlzdCA9IHByb3h5LT5vYmplY3RMaXN0ZW5lcnMoKTsKLSAgICAgICAg
cmV0dXJuIGZpbmRPbmx5ID8gbGlzdC0+ZmluZFdyYXBwZXIodmFsdWUsIGlzQXR0cmlidXRlKSA6
IGxpc3QtPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhPYmplY3RFdmVudExpc3RlbmVyPihwcm94eS0+
ZnJhbWUoKSwgdmFsdWUsIGlzQXR0cmlidXRlKTsKLSAgICB9CisgICAgaWYgKHByb3h5KQorICAg
ICAgICByZXR1cm4gZmluZE9ubHkgPyBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kV3JhcHBlcih2
YWx1ZSwgaXNBdHRyaWJ1dGUpIDogVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZE9yQ3JlYXRlV3Jh
cHBlcjxWOEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwgaXNBdHRyaWJ1dGUp
OwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xNDAxLDYgKzE0MDksNzYgQEAgUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoU1ZHRWxlbWVudElu
c3RhbmNlKiBlbGUKICAgICByZXR1cm4gZ2V0RXZlbnRMaXN0ZW5lcihlbGVtZW50LT5jb3JyZXNw
b25kaW5nRWxlbWVudCgpLCB2YWx1ZSwgaXNBdHRyaWJ1dGUsIGZpbmRPbmx5KTsKIH0KIAorUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoQWJz
dHJhY3RXb3JrZXIqIHdvcmtlciwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNB
dHRyaWJ1dGUsIGJvb2wgZmluZE9ubHkpCit7CisgICAgaWYgKHdvcmtlci0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5pc1dvcmtlckNvbnRleHQoKSkgeworICAgICAgICBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkqIHdvcmtlckNvbnRleHRQcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eTo6cmV0cmlldmUoKTsKKyAgICAgICAgQVNTRVJUKHdvcmtlckNvbnRleHRQcm94eSk7
CisgICAgICAgIHJldHVybiB3b3JrZXJDb250ZXh0UHJveHktPmZpbmRPckNyZWF0ZUV2ZW50TGlz
dGVuZXIodmFsdWUsIGlzQXR0cmlidXRlLCBmaW5kT25seSk7CisgICAgfQorCisgICAgVjhQcm94
eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSk7CisgICAgaWYgKHByb3h5KSB7CisgICAgICAgIHJldHVybiBmaW5kT25seSA/IFY4RXZl
bnRMaXN0ZW5lckxpc3Q6OmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkgOiBWOEV2ZW50
TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRMaXN0ZW5lcj4ocHJveHkt
PmZyYW1lKCksIHZhbHVlLCBpc0F0dHJpYnV0ZSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9
CisKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKK1Bhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
VjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9u
LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgYm9vbCBmaW5k
T25seSkKK3sKKyAgICBpZiAobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmlzV29ya2VyQ29udGV4dCgpKSB7CisgICAgICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eSogd29ya2VyQ29udGV4dFByb3h5ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRy
aWV2ZSgpOworICAgICAgICBBU1NFUlQod29ya2VyQ29udGV4dFByb3h5KTsKKyAgICAgICAgcmV0
dXJuIHdvcmtlckNvbnRleHRQcm94eS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2YWx1ZSwg
aXNBdHRyaWJ1dGUsIGZpbmRPbmx5KTsKKyAgICB9CisKKyAgICBWOFByb3h5KiBwcm94eSA9IFY4
UHJveHk6OnJldHJpZXZlKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
KyAgICBpZiAocHJveHkpIHsKKyAgICAgICAgcmV0dXJuIGZpbmRPbmx5ID8gVjhFdmVudExpc3Rl
bmVyTGlzdDo6ZmluZFdyYXBwZXIodmFsdWUsIGlzQXR0cmlidXRlKSA6IFY4RXZlbnRMaXN0ZW5l
ckxpc3Q6OmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUo
KSwgdmFsdWUsIGlzQXR0cmlidXRlKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRp
ZgorCitQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0
ZW5lcihXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgYm9vbCBmaW5kT25seSkKK3sKKyAgICBXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHkqIHdvcmtlckNvbnRleHRQcm94eSA9IHdvcmtlckNvbnRleHQtPnNj
cmlwdCgpLT5wcm94eSgpOworICAgIGlmICh3b3JrZXJDb250ZXh0UHJveHkpCisgICAgICAgIHJl
dHVybiB3b3JrZXJDb250ZXh0UHJveHktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodmFsdWUs
IGlzQXR0cmlidXRlLCBmaW5kT25seSk7CisKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoWE1MSHR0cFJl
cXVlc3RVcGxvYWQqIHVwbG9hZCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNB
dHRyaWJ1dGUsIGJvb2wgZmluZE9ubHkpCit7CisgICAgcmV0dXJuIGdldEV2ZW50TGlzdGVuZXIo
dXBsb2FkLT5hc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKSwgdmFsdWUsIGlzQXR0cmlidXRlLCBm
aW5kT25seSk7Cit9CisKK1Bhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gVjhET01XcmFwcGVyOjpn
ZXRFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldCwgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIGJvb2wgZmluZE9ubHkpCit7CisgICAgVjhQ
cm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShldmVudFRhcmdldC0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKKyAgICBpZiAocHJveHkpCisgICAgICAgIHJldHVybiBmaW5kT25seSA/
IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkgOiBW
OEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRMaXN0ZW5lcj4o
cHJveHktPmZyYW1lKCksIHZhbHVlLCBpc0F0dHJpYnV0ZSk7CisKKyNpZiBFTkFCTEUoV09SS0VS
UykKKyAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHdvcmtlckNvbnRleHRQcm94eSA9
IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsKKyAgICBpZiAod29ya2Vy
Q29udGV4dFByb3h5KQorICAgICAgICByZXR1cm4gd29ya2VyQ29udGV4dFByb3h5LT5maW5kT3JD
cmVhdGVFdmVudExpc3RlbmVyKHZhbHVlLCBpc0F0dHJpYnV0ZSwgZmluZE9ubHkpOworI2VuZGlm
CisKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBWOERPTVdy
YXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoVjhQcm94eSogcHJveHksIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBib29sIGZpbmRPbmx5KQoreworICAgIGlmIChw
cm94eSkKKyAgICAgICAgcmV0dXJuIGZpbmRPbmx5ID8gVjhFdmVudExpc3RlbmVyTGlzdDo6Zmlu
ZFdyYXBwZXIodmFsdWUsIGlzQXR0cmlidXRlKSA6IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRP
ckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFsdWUsIGlz
QXR0cmlidXRlKTsKKworICAgIHJldHVybiAwOworfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhET01XcmFwcGVyOjpjb252ZXJ0RE9NSW1wbGVtZW50YXRpb25Ub1Y4T2JqZWN0KERPTUltcGxl
bWVudGF0aW9uKiBpbXBsKQogewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggYWUx
ZmI5MS4uZWVjNGEzYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCkBAIC0yMTksNiAr
MjE5LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBnZXRFdmVudExpc3RlbmVyKFNWR0VsZW1lbnRJbnN0YW5jZSogZWxl
bWVudCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIGJvb2wg
ZmluZE9ubHkpOwogCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGdl
dEV2ZW50TGlzdGVuZXIoQWJzdHJhY3RXb3JrZXIqIHdvcmtlciwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIGJvb2wgZmluZE9ubHkpOworCisjaWYgRU5BQkxF
KE5PVElGSUNBVElPTlMpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGdldEV2ZW50TGlzdGVuZXIoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBib29sIGZpbmRPbmx5KTsKKyNlbmRp
ZgorCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGdldEV2ZW50TGlz
dGVuZXIoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIGJvb2wgZmluZE9ubHkpOworCisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoWE1MSHR0cFJlcXVl
c3RVcGxvYWQqIHVwbG9hZCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRy
aWJ1dGUsIGJvb2wgZmluZE9ubHkpOworCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0LCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgYm9vbCBmaW5kT25seSk7
CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0
ZW5lcihWOFByb3h5KiBwcm94eSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNB
dHRyaWJ1dGUsIGJvb2wgZmluZE9ubHkpOworCisKICAgICAgICAgLy8gRE9NSW1wbGVtZW50YXRp
b24gaXMgYSBzaW5nbGV0b24gYW5kIGl0IGlzIGhhbmRsZWQgaW4gYSBzcGVjaWFsCiAgICAgICAg
IC8vIHdheS4gQSB3cmFwcGVyIGlzIGdlbmVyYXRlZCBwZXIgZG9jdW1lbnQgYW5kIHN0b3JlZCBp
biBhbgogICAgICAgICAvLyBpbnRlcm5hbCBmaWVsZCBvZiB0aGUgZG9jdW1lbnQuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3QuY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmNwcAppbmRleCBjOWFhYTEyLi5lMzdk
NjMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3Qu
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5jcHAKQEAg
LTMxLDE2NSArMzEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4RXZlbnRM
aXN0ZW5lckxpc3QuaCIKIAotI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcjo6VjhFdmVu
dExpc3RlbmVyTGlzdEl0ZXJhdG9yKFY4RXZlbnRMaXN0ZW5lckxpc3QqIGxpc3QpCi0gICAgOiBt
X2xpc3QobGlzdCkKLSAgICAsIG1fdmVjdG9ySW5kZXgoMCkKLSAgICAsIG1faXRlcihsaXN0LT5t
X3RhYmxlLmJlZ2luKCkpCi17Ci19Ci0KLVY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcjo6VjhF
dmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yKFY4RXZlbnRMaXN0ZW5lckxpc3QqIGxpc3QsIGJvb2wg
c2hvdWxkU2Vla1RvRW5kKQotICAgIDogbV9saXN0KGxpc3QpCi0gICAgLCBtX3ZlY3RvckluZGV4
KDApCi0gICAgLCBtX2l0ZXIobGlzdC0+bV90YWJsZS5iZWdpbigpKQotewotICAgIGlmIChzaG91
bGRTZWVrVG9FbmQpCi0gICAgICAgIHNlZWtUb0VuZCgpOwotfQotCi1WOEV2ZW50TGlzdGVuZXJM
aXN0SXRlcmF0b3I6On5WOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3IoKSB7IH0KLQotdm9pZCBW
OEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3I6Om9wZXJhdG9yKysoKQotewotICAgIGlmIChtX2l0
ZXIgIT0gbV9saXN0LT5tX3RhYmxlLmVuZCgpKSB7Ci0gICAgICAgIFZlY3RvcjxWOEV2ZW50TGlz
dGVuZXIqPiogdmVjdG9yID0gbV9pdGVyLT5zZWNvbmQ7Ci0gICAgICAgIGlmIChtX3ZlY3Rvcklu
ZGV4ICsgMSA8IHZlY3Rvci0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICBtX3ZlY3RvckluZGV4Kys7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbV92ZWN0b3JJbmRleCA9
IDA7Ci0gICAgICAgICsrbV9pdGVyOwotICAgIH0KLX0KLQotYm9vbCBWOEV2ZW50TGlzdGVuZXJM
aXN0SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9y
JiBvdGhlcikKLXsKLSAgICByZXR1cm4gb3RoZXIubV9pdGVyID09IG1faXRlciAmJiBvdGhlci5t
X3ZlY3RvckluZGV4ID09IG1fdmVjdG9ySW5kZXggJiYgb3RoZXIubV9saXN0ID09IG1fbGlzdDsK
LX0KLQotYm9vbCBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3Qg
VjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yJiBvdGhlcikKLXsKLSAgICByZXR1cm4gIW9wZXJh
dG9yPT0ob3RoZXIpOwotfQotCi1WOEV2ZW50TGlzdGVuZXIqIFY4RXZlbnRMaXN0ZW5lckxpc3RJ
dGVyYXRvcjo6b3BlcmF0b3IqKCkKLXsKLSAgICBpZiAobV9pdGVyICE9IG1fbGlzdC0+bV90YWJs
ZS5lbmQoKSkgewotICAgICAgICBWZWN0b3I8VjhFdmVudExpc3RlbmVyKj4qIHZlY3RvciA9IG1f
aXRlci0+c2Vjb25kOwotICAgICAgICBpZiAobV92ZWN0b3JJbmRleCA8IHZlY3Rvci0+c2l6ZSgp
KQotICAgICAgICAgICAgcmV0dXJuIHZlY3Rvci0+YXQobV92ZWN0b3JJbmRleCk7Ci0gICAgfQot
ICAgIHJldHVybiAwOwotfQotCi12b2lkIFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcjo6c2Vl
a1RvRW5kKCkKLXsKLSAgICBtX2l0ZXIgPSBtX2xpc3QtPm1fdGFibGUuZW5kKCk7Ci0gICAgbV92
ZWN0b3JJbmRleCA9IDA7Ci19Ci0KLQotVjhFdmVudExpc3RlbmVyTGlzdDo6VjhFdmVudExpc3Rl
bmVyTGlzdCgpCi17Ci19Ci0KLVY4RXZlbnRMaXN0ZW5lckxpc3Q6On5WOEV2ZW50TGlzdGVuZXJM
aXN0KCkKLXsKLX0KLQotVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yIFY4RXZlbnRMaXN0ZW5l
ckxpc3Q6OmJlZ2luKCkKLXsKLSAgICByZXR1cm4gaXRlcmF0b3IodGhpcyk7Ci19Ci0KLVY4RXZl
bnRMaXN0ZW5lckxpc3RJdGVyYXRvciBWOEV2ZW50TGlzdGVuZXJMaXN0OjplbmQoKQotewotICAg
IHJldHVybiBpdGVyYXRvcih0aGlzLCB0cnVlKTsKLX0KLQotCi1zdGF0aWMgaW50IGdldEtleSh2
ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0KQotewotICAgIC8vIDAgaXMgYSBzZW50aW5lbCB2
YWx1ZSBmb3IgdGhlIEhhc2hNYXAga2V5LCBzbyB3ZSBtYXAgaXQgdG8gMS4KLSAgICBpbnQgaGFz
aCA9IG9iamVjdC0+R2V0SWRlbnRpdHlIYXNoKCk7Ci0gICAgaWYgKCFoYXNoKQotICAgICAgICBy
ZXR1cm4gMTsKLSAgICByZXR1cm4gaGFzaDsKLX0KLQotdm9pZCBWOEV2ZW50TGlzdGVuZXJMaXN0
OjphZGQoVjhFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKLXsKLSAgICBBU1NFUlQodjg6OkNvbnRl
eHQ6OkluQ29udGV4dCgpKTsKLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0KLSAg
ICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0ID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2Jq
ZWN0KCk7Ci0gICAgaW50IGtleSA9IGdldEtleShvYmplY3QpOwotICAgIFZlY3RvcjxWOEV2ZW50
TGlzdGVuZXIqPiogdmVjdG9yID0gbV90YWJsZS5nZXQoa2V5KTsKLSAgICBpZiAoIXZlY3Rvcikg
ewotICAgICAgICB2ZWN0b3IgPSBuZXcgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+KCk7Ci0gICAg
ICAgIG1fdGFibGUuc2V0KGtleSwgdmVjdG9yKTsKLSAgICB9Ci0gICAgdmVjdG9yLT5hcHBlbmQo
bGlzdGVuZXIpOwotICAgIG1fcmV2ZXJzZVRhYmxlLnNldChsaXN0ZW5lciwga2V5KTsKLX0KLQot
dm9pZCBWOEV2ZW50TGlzdGVuZXJMaXN0OjpyZW1vdmUoVjhFdmVudExpc3RlbmVyKiBsaXN0ZW5l
cikKLXsKLSAgICBpZiAobV9yZXZlcnNlVGFibGUuY29udGFpbnMobGlzdGVuZXIpKSB7Ci0gICAg
ICAgIGludCBrZXkgPSBtX3JldmVyc2VUYWJsZS5nZXQobGlzdGVuZXIpOwotICAgICAgICBWZWN0
b3I8VjhFdmVudExpc3RlbmVyKj4qIHZlY3RvciA9IG1fdGFibGUuZ2V0KGtleSk7Ci0gICAgICAg
IGlmICghdmVjdG9yKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IHZlY3Rvci0+c2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgIGlmICh2ZWN0b3It
PmF0KGopID09IGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICAgICAgdmVjdG9yLT5yZW1vdmUoaik7
Ci0gICAgICAgICAgICAgICAgaWYgKCF2ZWN0b3ItPnNpemUoKSkgewotICAgICAgICAgICAgICAg
ICAgICBtX3RhYmxlLnJlbW92ZShrZXkpOwotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmVj
dG9yOwotICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgPSAwOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBtX3JldmVyc2VUYWJsZS5yZW1vdmUobGlzdGVuZXIpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQot
dm9pZCBWOEV2ZW50TGlzdGVuZXJMaXN0OjpjbGVhcigpCi17Ci0gICAgbV90YWJsZS5jbGVhcigp
OwotICAgIG1fcmV2ZXJzZVRhYmxlLmNsZWFyKCk7Ci19Ci0KLVY4RXZlbnRMaXN0ZW5lciogVjhF
dmVudExpc3RlbmVyTGlzdDo6ZmluZCh2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0LCBib29s
IGlzQXR0cmlidXRlKQotewotICAgIEFTU0VSVCh2ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpOwot
ICAgIGludCBrZXkgPSBnZXRLZXkob2JqZWN0KTsKLQotICAgIFZlY3RvcjxWOEV2ZW50TGlzdGVu
ZXIqPiogdmVjdG9yID0gbV90YWJsZS5nZXQoa2V5KTsKLSAgICBpZiAoIXZlY3RvcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci0+c2l6ZSgp
OyBpKyspIHsKLSAgICAgICAgVjhFdmVudExpc3RlbmVyKiBlbGVtZW50ID0gdmVjdG9yLT5hdChp
KTsKLSAgICAgICAgaWYgKGlzQXR0cmlidXRlID09IGVsZW1lbnQtPmlzQXR0cmlidXRlKCkgJiYg
b2JqZWN0ID09IGVsZW1lbnQtPmdldExpc3RlbmVyT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1
cm4gZWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBhc3NSZWZQdHI8VjhFdmVu
dExpc3RlbmVyPiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kV3JhcHBlcih2ODo6TG9jYWw8djg6
OlZhbHVlPiBvYmplY3QsIGJvb2wgaXNBdHRyaWJ1dGUpCi17Ci0gICAgQVNTRVJUKHY4OjpDb250
ZXh0OjpJbkNvbnRleHQoKSk7Ci0gICAgaWYgKCFvYmplY3QtPklzT2JqZWN0KCkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIHY4OjpMb2NhbDx2ODo6
T2JqZWN0Pjo6Q2FzdCBpbnN0ZWFkPwotICAgIHJldHVybiBmaW5kKG9iamVjdC0+VG9PYmplY3Qo
KSwgaXNBdHRyaWJ1dGUpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3QuaCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oCmluZGV4IDQyNTUwNTAuLmE4NjNlZDkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oCkBAIC0zMiw5MiArMzIs
NzQgQEAKICNkZWZpbmUgVjhFdmVudExpc3RlbmVyTGlzdF9oCiAKICNpbmNsdWRlIDx2OC5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiAjaW5j
bHVkZSAiUGFzc1JlZlB0ci5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgor
I2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBWOEV2ZW50TGlzdGVuZXI7Ci0gICAgY2xhc3Mg
VjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yOwogCi0gICAgLy8gVGhpcyBpcyBhIGNvbnRhaW5l
ciBmb3IgVjhFdmVudExpc3RlbmVyIG9iamVjdHMgdGhhdCB1c2VzIHRoZSBpZGVudGl0eSBoYXNo
IG9mIHRoZSB2ODo6T2JqZWN0IHRvCi0gICAgLy8gc3BlZWQgdXAgbG9va3VwcworICAgIC8vIFRo
aXMgaXMgYSBjb250YWluZXIgZm9yIFY4RXZlbnRMaXN0ZW5lciBvYmplY3RzIHRoYXQgdXNlcyBo
aWRkZW4gcHJvcGVydGllcyBvZiB2ODo6T2JqZWN0IHRvIHNwZWVkIHVwIGxvb2t1cHMuCiAgICAg
Y2xhc3MgVjhFdmVudExpc3RlbmVyTGlzdCB7CiAgICAgcHVibGljOgotICAgICAgICAvLyBCZWNh
dXNlIHY4OjpPYmplY3QgaWRlbnRpdHkgaGFzaGVzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSB1
bmlxdWUsIHdlIHVuZm9ydHVuYXRlbHkgY2FuJ3QganVzdCBtYXAKLSAgICAgICAgLy8gYW4gaW50
IHRvIFY4RXZlbnRMaXN0ZW5lci4gSW5zdGVhZCB3ZSBkZWZpbmUgYSBIYXNoTWFwIG9mIGludCB0
byBWZWN0b3Igb2YgVjhFdmVudExpc3RlbmVyCi0gICAgICAgIC8vIGNhbGxlZCBhIExpc3RlbmVy
TXVsdGlNYXAuCi0gICAgICAgIHR5cGVkZWYgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+KiBWYWx1
ZXM7Ci0gICAgICAgIHN0cnVjdCBWYWx1ZXNUcmFpdHMgOiBIYXNoVHJhaXRzPFZhbHVlcz4gewot
ICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0g
ICAgICAgIH07Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFZhbHVlcywgRGVmYXVsdEhh
c2g8aW50Pjo6SGFzaCwgSGFzaFRyYWl0czxpbnQ+LCBWYWx1ZXNUcmFpdHM+IExpc3RlbmVyTXVs
dGlNYXA7Ci0KLSAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdCgpOwotICAgICAgICB+VjhFdmVu
dExpc3RlbmVyTGlzdCgpOwotCi0gICAgICAgIGZyaWVuZCBjbGFzcyBWOEV2ZW50TGlzdGVuZXJM
aXN0SXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9y
IGl0ZXJhdG9yOyAgICAgICAgCi0KLSAgICAgICAgaXRlcmF0b3IgYmVnaW4oKTsKLSAgICAgICAg
aXRlcmF0b3IgZW5kKCk7Ci0KLSAgICAgICAgdm9pZCBhZGQoVjhFdmVudExpc3RlbmVyKik7Ci0g
ICAgICAgIHZvaWQgcmVtb3ZlKFY4RXZlbnRMaXN0ZW5lciopOwotICAgICAgICBWOEV2ZW50TGlz
dGVuZXIqIGZpbmQodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBib29sIGlzQXR0cmlidXRlKTsKLSAg
ICAgICAgdm9pZCBjbGVhcigpOwotICAgICAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fdGFi
bGUuc2l6ZSgpOyB9Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGZpbmRX
cmFwcGVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+LCBib29sIGlzQXR0cmlidXRlKTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlclR5cGU+Ci0gICAgICAgIFBhc3NSZWZQdHI8VjhFdmVu
dExpc3RlbmVyPiBmaW5kT3JDcmVhdGVXcmFwcGVyKEZyYW1lKiwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4sIGJvb2wgaXNBdHRyaWJ1dGUpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOEV2ZW50
TGlzdGVuZXI+IGZpbmRXcmFwcGVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGlz
QXR0cmlidXRlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodjg6OkNvbnRleHQ6Oklu
Q29udGV4dCgpKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBwcml2YXRlOgotICAgICAgICBMaXN0ZW5lck11bHRp
TWFwIG1fdGFibGU7CisgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHdyYXBwZXJQ
cm9wZXJ0eSA9IGdldEhpZGRlblByb3BlcnR5KGlzQXR0cmlidXRlKTsKKyAgICAgICAgICAgIHJl
dHVybiBkb0ZpbmRXcmFwcGVyKHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSksIHdy
YXBwZXJQcm9wZXJ0eSk7CisgICAgICAgIH0KIAotICAgICAgICAvLyB3ZSBhbHNvIGtlZXAgYSBy
ZXZlcnNlIG1hcHBpbmcgb2YgVjhFdmVudExpc3RlbmVyIHRvIHY4OjpPYmplY3QgaWRlbnRpdHkg
aGFzaCwKLSAgICAgICAgLy8gaW4gb3JkZXIgdG8gc3BlZWQgdXAgcmVtb3ZhbCBieSBWOEV2ZW50
TGlzdGVuZXIKLSAgICAgICAgSGFzaE1hcDxWOEV2ZW50TGlzdGVuZXIqLCBpbnQ+IG1fcmV2ZXJz
ZVRhYmxlOwotICAgIH07CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJUeXBlLCB0
eXBlbmFtZSBDb250ZXh0VHlwZT4KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhFdmVudExp
c3RlbmVyPiBmaW5kT3JDcmVhdGVXcmFwcGVyKENvbnRleHRUeXBlKiwgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4sIGJvb2wgaXNBdHRyaWJ1dGUpOworCisgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyV3Jh
cHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGxpc3RlbmVyT2JqZWN0LCBib29sIGlzQXR0cmli
dXRlKQorICAgICAgICB7CisgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHdyYXBw
ZXJQcm9wZXJ0eSA9IGdldEhpZGRlblByb3BlcnR5KGlzQXR0cmlidXRlKTsKKyAgICAgICAgICAg
IGxpc3RlbmVyT2JqZWN0LT5EZWxldGVIaWRkZW5WYWx1ZSh3cmFwcGVyUHJvcGVydHkpOworICAg
ICAgICB9CiAKLSAgICBjbGFzcyBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3IgewotICAgIHB1
YmxpYzoKLSAgICAgICAgflY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcigpOwotICAgICAgICB2
b2lkIG9wZXJhdG9yKysoKTsKLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFY4RXZlbnRM
aXN0ZW5lckxpc3RJdGVyYXRvciYpOwotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVjhF
dmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yJik7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lciogb3Bl
cmF0b3IqKCk7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIFY4RXZlbnRMaXN0
ZW5lckxpc3Q7Ci0gICAgICAgIGV4cGxpY2l0IFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcihW
OEV2ZW50TGlzdGVuZXJMaXN0Kik7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRv
cihWOEV2ZW50TGlzdGVuZXJMaXN0KiwgYm9vbCBzaG91bGRTZWVrVG9FbmQpOwotICAgICAgICB2
b2lkIHNlZWtUb0VuZCgpOwotCi0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QqIG1fbGlzdDsK
LSAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdDo6TGlzdGVuZXJNdWx0aU1hcDo6aXRlcmF0b3Ig
bV9pdGVyOwotICAgICAgICBzaXplX3QgbV92ZWN0b3JJbmRleDsKKyAgICAgICAgc3RhdGljIFY4
RXZlbnRMaXN0ZW5lciogZG9GaW5kV3JhcHBlcih2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0
LCB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHdyYXBwZXJQcm9wZXJ0eSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7CisgICAgICAgICAgICB2
ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBs
aXN0ZW5lciA9IG9iamVjdC0+R2V0SGlkZGVuVmFsdWUod3JhcHBlclByb3BlcnR5KTsKKyAgICAg
ICAgICAgIGlmIChsaXN0ZW5lci5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VjhFdmVudExpc3RlbmVyKj4odjg6OkV4
dGVybmFsOjpVbndyYXAobGlzdGVuZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBp
bmxpbmUgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBnZXRIaWRkZW5Qcm9wZXJ0eShib29sIGlzQXR0
cmlidXRlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNBdHRyaWJ1dGUgPyBWOEhp
ZGRlblByb3BlcnR5TmFtZTo6YXR0cmlidXRlTGlzdGVuZXIoKSA6IFY4SGlkZGVuUHJvcGVydHlO
YW1lOjpsaXN0ZW5lcigpOworICAgICAgICB9CiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJUeXBlPgotICAgIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBWOEV2ZW50
TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyKEZyYW1lKiBmcmFtZSwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sIGlzQXR0cmlidXRlKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJUeXBlLCB0eXBlbmFtZSBDb250ZXh0VHlwZT4KKyAgICBQYXNzUmVmUHRyPFY4
RXZlbnRMaXN0ZW5lcj4gVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZE9yQ3JlYXRlV3JhcHBlcihD
b250ZXh0VHlwZSogY29udGV4dCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNB
dHRyaWJ1dGUpCiAgICAgewogICAgICAgICBBU1NFUlQodjg6OkNvbnRleHQ6OkluQ29udGV4dCgp
KTsKLSAgICAgICAgaWYgKCFvYmplY3QtPklzT2JqZWN0KCkpCisgICAgICAgIGlmICghdmFsdWUt
PklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAvLyBGSVhNRTog
U2hvdWxkIHRoaXMgYmUgdjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0IGluc3RlYWQ/Ci0gICAg
ICAgIFY4RXZlbnRMaXN0ZW5lciogd3JhcHBlciA9IGZpbmQob2JqZWN0LT5Ub09iamVjdCgpLCBp
c0F0dHJpYnV0ZSk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6
TG9jYWw8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpT
dHJpbmc+IHdyYXBwZXJQcm9wZXJ0eSA9IGdldEhpZGRlblByb3BlcnR5KGlzQXR0cmlidXRlKTsK
KworICAgICAgICBWOEV2ZW50TGlzdGVuZXIqIHdyYXBwZXIgPSBkb0ZpbmRXcmFwcGVyKG9iamVj
dCwgd3JhcHBlclByb3BlcnR5KTsKICAgICAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKIAotICAgICAgICAvLyBDcmVhdGUgYSBuZXcgb25lLCBhbmQgYWRkIHRv
IGNhY2hlLgotICAgICAgICBSZWZQdHI8V3JhcHBlclR5cGU+IG5ld0xpc3RlbmVyID0gV3JhcHBl
clR5cGU6OmNyZWF0ZShmcmFtZSwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCks
IGlzQXR0cmlidXRlKTsKLSAgICAgICAgYWRkKG5ld0xpc3RlbmVyLmdldCgpKTsKKyAgICAgICAg
UGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IHdyYXBwZXJQdHIgPSBXcmFwcGVyVHlwZTo6Y3Jl
YXRlKGNvbnRleHQsIG9iamVjdCwgaXNBdHRyaWJ1dGUpOworICAgICAgICBpZiAod3JhcHBlclB0
cikKKyAgICAgICAgICAgIG9iamVjdC0+U2V0SGlkZGVuVmFsdWUod3JhcHBlclByb3BlcnR5LCB2
ODo6RXh0ZXJuYWw6OldyYXAod3JhcHBlclB0ci5nZXQoKSkpOwogCi0gICAgICAgIHJldHVybiBu
ZXdMaXN0ZW5lcjsKLSAgICB9OworICAgICAgICByZXR1cm4gd3JhcHBlclB0cjsKKyAgICB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVu
UHJvcGVydHlOYW1lLmNwcAppbmRleCAxNmFjMjMyLi4wYzUwMTk5IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmNwcApAQCAtNDcsNiArNDcsMjAgQEAgdjg6
OkhhbmRsZTx2ODo6U3RyaW5nPiBWOEhpZGRlblByb3BlcnR5TmFtZTo6aXNvbGF0ZWRXb3JsZCgp
CiAgICAgcmV0dXJuICpzdHJpbmc7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlN0cmluZz4gVjhIaWRk
ZW5Qcm9wZXJ0eU5hbWU6Omxpc3RlbmVyKCkKK3sKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8
djg6OlN0cmluZz4qIHN0cmluZyA9IGNyZWF0ZVN0cmluZygiV2ViQ29yZTo6VjhIaWRkZW5Qcm9w
ZXJ0eU5hbWU6Omxpc3RlbmVyIik7CisKKyAgICByZXR1cm4gKnN0cmluZzsKK30KKwordjg6Okhh
bmRsZTx2ODo6U3RyaW5nPiBWOEhpZGRlblByb3BlcnR5TmFtZTo6YXR0cmlidXRlTGlzdGVuZXIo
KQoreworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPiogc3RyaW5nID0gY3Jl
YXRlU3RyaW5nKCJXZWJDb3JlOjpWOEhpZGRlblByb3BlcnR5TmFtZTo6YXR0cmlidXRlTGlzdGVu
ZXIiKTsKKworICAgIHJldHVybiAqc3RyaW5nOworfQorCiB2ODo6UGVyc2lzdGVudDx2ODo6U3Ry
aW5nPiogVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmNyZWF0ZVN0cmluZyhjb25zdCBjaGFyKiBrZXkp
CiB7CiAgICAgcmV0dXJuIG5ldyB2ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPih2ODo6UGVyc2lz
dGVudDx2ODo6U3RyaW5nPjo6TmV3KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbChrZXkpKSk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmggYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgKaW5kZXggODc0YjUyNS4uZGJl
OTkyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFt
ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaApAQCAt
MzksNiArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBvYmplY3RQcm90b3R5cGUoKTsKICAgICAgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gaXNvbGF0ZWRXb3JsZCgpOworICAgICAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBsaXN0ZW5lcigpOworICAgICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6U3RyaW5nPiBhdHRyaWJ1dGVMaXN0ZW5lcigpOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+KiBjcmVhdGVTdHJp
bmcoY29uc3QgY2hhcioga2V5KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhM
YXp5RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlz
dGVuZXIuY3BwCmluZGV4IGNjZjMyYTcuLjQ2ZjU2NDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOExhenlFdmVudExpc3RlbmVyLmNwcApAQCAtMzcsMTk1ICszNywxMDUgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1WOExhenlFdmVudExpc3RlbmVyOjpWOExhenlFdmVudExpc3RlbmVy
KEZyYW1lICpmcmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9u
TmFtZSwgYm9vbCBpc1NWR0V2ZW50KQorVjhMYXp5RXZlbnRMaXN0ZW5lcjo6VjhMYXp5RXZlbnRM
aXN0ZW5lcihGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBm
dW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCkKICAgICA6IFY4QWJzdHJhY3RFdmVudExpc3Rl
bmVyKGZyYW1lLCB0cnVlKQogICAgICwgbV9jb2RlKGNvZGUpCiAgICAgLCBtX2Z1bmN0aW9uTmFt
ZShmdW5jdGlvbk5hbWUpCiAgICAgLCBtX2lzU1ZHRXZlbnQoaXNTVkdFdmVudCkKLSAgICAsIG1f
Y29tcGlsZWQoZmFsc2UpCi0gICAgLCBtX3dyYXBwZWRGdW5jdGlvbkNvbXBpbGVkKGZhbHNlKQog
ewogfQogCi1WOExhenlFdmVudExpc3RlbmVyOjp+VjhMYXp5RXZlbnRMaXN0ZW5lcigpCi17Ci0g
ICAgZGlzcG9zZUxpc3RlbmVyT2JqZWN0KCk7Ci0KLSAgICAvLyBEaXNwb3NlIHdyYXBwZWQgZnVu
Y3Rpb24KLSAgICBpZiAoIW1fd3JhcHBlZEZ1bmN0aW9uLklzRW1wdHkoKSkgewotI2lmbmRlZiBO
REVCVUcKLSAgICAgICAgVjhHQ0NvbnRyb2xsZXI6OnVucmVnaXN0ZXJHbG9iYWxIYW5kbGUodGhp
cywgbV93cmFwcGVkRnVuY3Rpb24pOwotI2VuZGlmCi0gICAgICAgIG1fd3JhcHBlZEZ1bmN0aW9u
LkRpc3Bvc2UoKTsKLSAgICAgICAgbV93cmFwcGVkRnVuY3Rpb24uQ2xlYXIoKTsKLSAgICB9Ci19
Ci0KLXY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4TGF6eUV2ZW50TGlzdGVuZXI6OmdldExpc3Rl
bmVyRnVuY3Rpb24oKQotewotICAgIGlmIChtX2NvbXBpbGVkKSB7Ci0gICAgICAgIEFTU0VSVCht
X2xpc3RlbmVyLklzRW1wdHkoKSB8fCBtX2xpc3RlbmVyLT5Jc0Z1bmN0aW9uKCkpOwotICAgICAg
ICByZXR1cm4gbV9saXN0ZW5lci5Jc0VtcHR5KCkgPyB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigp
IDogdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46Ok5ldyh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b24+OjpDYXN0KG1fbGlzdGVuZXIpKTsKLSAgICB9Ci0KLSAgICBtX2NvbXBpbGVkID0gdHJ1ZTsK
LQotICAgIEFTU0VSVChtX2ZyYW1lKTsKLQotICAgIHsKLSAgICAgICAgLy8gU3dpdGNoIHRvIHRo
ZSBjb250ZXh0IG9mIG1fZnJhbWUuCi0gICAgICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKLQotICAgICAgICAvLyBVc2UgdGhlIG91dGVyIHNjb3BlIHRvIGhvbGQgY29udGV4dC4KLSAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gVjhQcm94eTo6bWFpbldv
cmxkQ29udGV4dChtX2ZyYW1lKTsKLSAgICAgICAgLy8gQmFpbCBvdXQgaWYgd2UgY291bGQgbm90
IGdldCB0aGUgY29udGV4dC4KLSAgICAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4oKTsKLQotICAgICAgICB2ODo6
Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0KTsKLQotICAgICAgICAvLyBXcmFwIGZ1bmN0
aW9uIGFyb3VuZCB0aGUgZXZlbnQgY29kZS4gIFRoZSBwYXJlbnRoZXNpcyBhcm91bmQgdGhlIGZ1
bmN0aW9uIGFyZSBuZWVkZWQgc28gdGhhdCBldmFsdWF0aW5nIHRoZSBjb2RlIHlpZWxkcwotICAg
ICAgICAvLyB0aGUgZnVuY3Rpb24gdmFsdWUuICBXaXRob3V0IHRoZSBwYXJlbnRoZXNpcyB0aGUg
ZnVuY3Rpb24gdmFsdWUgaXMgdGhyb3duIGF3YXkuCi0KLSAgICAgICAgLy8gTWFrZSBpdCBhbiBh
bm9ueW1vdXMgZnVuY3Rpb24gdG8gYXZvaWQgbmFtZSBjb25mbGljdCBmb3IgY2FzZXMgbGlrZQot
ICAgICAgICAvLyA8Ym9keSBvbmxvYWQ9J29ubG9hZCgpJz4KLSAgICAgICAgLy8gPHNjcmlwdD4g
ZnVuY3Rpb24gb25sb2FkKCkgeyBhbGVydCgnaGknKTsgfSA8L3NjcmlwdD4uCi0gICAgICAgIC8v
IFNldCBmdW5jdGlvbiBuYW1lIHRvIGZ1bmN0aW9uIG9iamVjdCBpbnN0ZWFkLgotICAgICAgICAv
LyBTZWUgaXNzdWUgOTQ0NjkwLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgRUNNQVNjcmlw
dCBzcGVjIHNheXMgKHZlcnkgb2JsaXF1ZWx5KSB0aGF0IHRoZSBwYXJhbWV0ZXIgdG8gYW4gZXZl
bnQgaGFuZGxlciBpcyBuYW1lZCAiZXZ0Ii4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRG9uJ3Qg
dXNlIG5ldyBsaW5lcyBzbyB0aGF0IGxpbmVzIGluIHRoZSBtb2RpZmllZCBoYW5kbGVyCi0gICAg
ICAgIC8vIGhhdmUgdGhlIHNhbWUgbnVtYmVycyBhcyBpbiB0aGUgb3JpZ2luYWwgY29kZS4KLSAg
ICAgICAgU3RyaW5nIGNvZGUgPSAiKGZ1bmN0aW9uIChldnQpIHsiOwotICAgICAgICBjb2RlLmFw
cGVuZChtX2NvZGUpOwotICAgICAgICBjb2RlLmFwcGVuZCgiXG59KSIpOwotCi0gICAgICAgIHY4
OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZUV4dGVybmFsU3RyaW5nID0gdjhFeHRlcm5hbFN0cmlu
Zyhjb2RlKTsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBWOFByb3h5
Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRlcm5hbFN0cmluZywgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXJsKCksIG1fbGluZU51bWJlciAtIDEpOwotICAgICAgICBpZiAoIXNjcmlwdC5Jc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUobV9mcmFt
ZSk7Ci0gICAgICAgICAgICBBU1NFUlQocHJveHkpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUgPSBwcm94eS0+cnVuU2NyaXB0KHNjcmlwdCwgZmFsc2UpOwotICAgICAg
ICAgICAgaWYgKCF2YWx1ZS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFs
dWUtPklzRnVuY3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlv
bj4gbGlzdGVuZXJGdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KHZhbHVl
KTsKLSAgICAgICAgICAgICAgICBsaXN0ZW5lckZ1bmN0aW9uLT5TZXROYW1lKHY4OjpTdHJpbmc6
Ok5ldyhmcm9tV2ViQ29yZVN0cmluZyhtX2Z1bmN0aW9uTmFtZSksIG1fZnVuY3Rpb25OYW1lLmxl
bmd0aCgpKSk7Ci0KLSAgICAgICAgICAgICAgICBtX2xpc3RlbmVyID0gdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uPjo6TmV3KGxpc3RlbmVyRnVuY3Rpb24pOwotI2lmbmRlZiBOREVCVUcKLSAg
ICAgICAgICAgICAgICBWOEdDQ29udHJvbGxlcjo6cmVnaXN0ZXJHbG9iYWxIYW5kbGUoRVZFTlRf
TElTVEVORVIsIHRoaXMsIG1fbGlzdGVuZXIpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlQobV9saXN0ZW5lci5Jc0VtcHR5KCkgfHwgbV9saXN0
ZW5lci0+SXNGdW5jdGlvbigpKTsKLSAgICByZXR1cm4gbV9saXN0ZW5lci5Jc0VtcHR5KCkgPyB2
ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigpIDogdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46Ok5ldyh2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fbGlzdGVuZXIpKTsKLX0KLQogdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gVjhMYXp5RXZlbnRMaXN0ZW5lcjo6Y2FsbExpc3RlbmVyRnVuY3Rp
b24odjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQsIEV2ZW50KiBldmVudCkKIHsKLSAgICB2
ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBoYW5kbGVyRnVuY3Rpb24gPSBnZXRXcmFwcGVkTGlzdGVu
ZXJGdW5jdGlvbigpOworICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGhhbmRsZXJGdW5jdGlv
biA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KGdldExpc3RlbmVyT2JqZWN0KCkpOwog
ICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiByZWNlaXZlciA9IGdldFJlY2VpdmVyT2JqZWN0KGV2
ZW50KTsKICAgICBpZiAoaGFuZGxlckZ1bmN0aW9uLklzRW1wdHkoKSB8fCByZWNlaXZlci5Jc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OlZhbHVlPigpOwogCiAgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmFtZXRlcnNbMV0gPSB7IGpzRXZlbnQgfTsKIAotICAgIFY4
UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUobV9mcmFtZSk7CisgICAgVjhQcm94eSog
cHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShmcmFtZSgpKTsKICAgICByZXR1cm4gcHJveHktPmNh
bGxGdW5jdGlvbihoYW5kbGVyRnVuY3Rpb24sIHJlY2VpdmVyLCAxLCBwYXJhbWV0ZXJzKTsKIH0K
IAotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TGF6eUV2ZW50TGlzdGVuZXJUb1N0
cmluZyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIHJldHVybiBhcmdzLkNhbGxl
ZSgpLT5HZXRIaWRkZW5WYWx1ZSh2ODo6U3RyaW5nOjpOZXcoInRvU3RyaW5nU3RyaW5nIikpOwog
fQogCi0KLXY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4TGF6eUV2ZW50TGlzdGVuZXI6OmdldFdy
YXBwZWRMaXN0ZW5lckZ1bmN0aW9uKCkKK3ZvaWQgVjhMYXp5RXZlbnRMaXN0ZW5lcjo6cHJlcGFy
ZUxpc3RlbmVyT2JqZWN0KCkKIHsKLSAgICBpZiAobV93cmFwcGVkRnVuY3Rpb25Db21waWxlZCkg
ewotICAgICAgICBBU1NFUlQobV93cmFwcGVkRnVuY3Rpb24uSXNFbXB0eSgpIHx8IG1fd3JhcHBl
ZEZ1bmN0aW9uLT5Jc0Z1bmN0aW9uKCkpOwotICAgICAgICByZXR1cm4gbV93cmFwcGVkRnVuY3Rp
b24uSXNFbXB0eSgpID8gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4oKSA6IHY4OjpMb2NhbDx2ODo6
RnVuY3Rpb24+OjpOZXcobV93cmFwcGVkRnVuY3Rpb24pOwotICAgIH0KLQotICAgIG1fd3JhcHBl
ZEZ1bmN0aW9uQ29tcGlsZWQgPSB0cnVlOwotCi0gICAgewotICAgICAgICAvLyBTd2l0Y2ggdG8g
dGhlIGNvbnRleHQgb2YgbV9mcmFtZS4KLSAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOwotCi0gICAgICAgIC8vIFVzZSB0aGUgb3V0ZXIgc2NvcGUgdG8gaG9sZCBjb250ZXh0Lgot
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBWOFByb3h5OjptYWlu
V29ybGRDb250ZXh0KG1fZnJhbWUpOwotICAgICAgICAvLyBCYWlsIG91dCBpZiB3ZSBjYW5ub3Qg
Z2V0IHRoZSBjb250ZXh0LgotICAgICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKLSAgICAg
ICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigpOwotCi0gICAgICAgIHY4OjpD
b250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwotCi0gICAgICAgIC8vIEZJWE1FOiBjYWNo
ZSB0aGUgd3JhcHBlciBmdW5jdGlvbi4KLQotICAgICAgICAvLyBOb2RlcyBvdGhlciB0aGFuIHRo
ZSBkb2N1bWVudCBvYmplY3QsIHdoZW4gZXhlY3V0aW5nIGlubGluZSBldmVudCBoYW5kbGVycyBw
dXNoIGRvY3VtZW50LCBmb3JtLCBhbmQgdGhlIHRhcmdldCBub2RlIG9uIHRoZSBzY29wZSBjaGFp
bi4KLSAgICAgICAgLy8gV2UgZG8gdGhpcyBieSB1c2luZyAnd2l0aCcgc3RhdGVtZW50LgotICAg
ICAgICAvLyBTZWUgY2hyb21lL2Zhc3QvZm9ybXMvZm9ybS1hY3Rpb24uaHRtbAotICAgICAgICAv
LyAgICAgY2hyb21lL2Zhc3QvZm9ybXMvc2VsZWN0ZWQtaW5kZXgtdmFsdWUuaHRtbAotICAgICAg
ICAvLyAgICAgYmFzZS9mYXN0L292ZXJmbG93L29uc2Nyb2xsLWxheWVyLXNlbGYtZGVzdHJ1Y3Qu
aHRtbAotICAgICAgICAvLwotICAgICAgICAvLyBEb24ndCB1c2UgbmV3IGxpbmVzIHNvIHRoYXQg
bGluZXMgaW4gdGhlIG1vZGlmaWVkIGhhbmRsZXIKLSAgICAgICAgLy8gaGF2ZSB0aGUgc2FtZSBu
dW1iZXJzIGFzIGluIHRoZSBvcmlnaW5hbCBjb2RlLgotICAgICAgICBTdHJpbmcgY29kZSA9ICIo
ZnVuY3Rpb24gKGV2dCkgeyIgXAotICAgICAgICAgICAgICAgICAgICAgICJ3aXRoICh0aGlzLm93
bmVyRG9jdW1lbnQgPyB0aGlzLm93bmVyRG9jdW1lbnQgOiB7fSkgeyIgXAotICAgICAgICAgICAg
ICAgICAgICAgICJ3aXRoICh0aGlzLmZvcm0gPyB0aGlzLmZvcm0gOiB7fSkgeyIgXAotICAgICAg
ICAgICAgICAgICAgICAgICJ3aXRoICh0aGlzKSB7IiBcCi0gICAgICAgICAgICAgICAgICAgICAg
InJldHVybiAoZnVuY3Rpb24oZXZ0KXsiOwotICAgICAgICBjb2RlLmFwcGVuZChtX2NvZGUpOwot
ICAgICAgICAvLyBJbnNlcnQgJ1xuJyBvdGhlcndpc2UgLy8tc3R5bGUgY29tbWVudHMgY291bGQg
YnJlYWsgdGhlIGhhbmRsZXIuCi0gICAgICAgIGNvZGUuYXBwZW5kKCAgIlxufSkuY2FsbCh0aGlz
LCBldnQpO319fX0pIik7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZUV4dGVy
bmFsU3RyaW5nID0gdjhFeHRlcm5hbFN0cmluZyhjb2RlKTsKLSAgICAgICAgdjg6OkhhbmRsZTx2
ODo6U2NyaXB0PiBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRlcm5hbFN0
cmluZywgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCksIG1fbGluZU51bWJlcik7Ci0gICAgICAg
IGlmICghc2NyaXB0LklzRW1wdHkoKSkgewotICAgICAgICAgICAgVjhQcm94eSogcHJveHkgPSBW
OFByb3h5OjpyZXRyaWV2ZShtX2ZyYW1lKTsKLSAgICAgICAgICAgIEFTU0VSVChwcm94eSk7Ci0g
ICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IHByb3h5LT5ydW5TY3JpcHQo
c2NyaXB0LCBmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNGdW5jdGlvbigpKTsKLQotICAgICAgICAgICAg
ICAgIG1fd3JhcHBlZEZ1bmN0aW9uID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uPjo6TmV3
KHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KHZhbHVlKSk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBDaGFuZ2UgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIG9uIHRoZSB3cmFwcGVyIGZ1bmN0aW9u
IHRvIGF2b2lkIGl0IHJldHVybmluZyB0aGUgc291cmNlIGZvciB0aGUgYWN0dWFsIHdyYXBwZXIg
ZnVuY3Rpb24uIEluc3RlYWQKLSAgICAgICAgICAgICAgICAvLyBpdCByZXR1cm5zIHNvdXJjZSBm
b3IgYSBjbGVhbiB3cmFwcGVyIGZ1bmN0aW9uIHdpdGggdGhlIGV2ZW50IGFyZ3VtZW50IHdyYXBw
aW5nIHRoZSBldmVudCBzb3VyY2UgY29kZS4gVGhlIHJlYXNvbiBmb3IgdGhpcwotICAgICAgICAg
ICAgICAgIC8vIGlzIHRoYXQgc29tZSB3ZWIgc2l0ZXMgdXNlcyB0b1N0cmluZyBvbiBldmVudCBm
dW5jdGlvbnMgYW5kIHRoZSBldmFscyB0aGUgc291cmNlIHJldHVybmVkIChzb21lIHRpbWVzIGEg
UmVnRXhwIGlzIGFwcGxpZWQgYXMKLSAgICAgICAgICAgICAgICAvLyB3ZWxsKSBmb3Igc29tZSBv
dGhlciB1c2UuIFRoYXQgZmFpbHMgbWlzZXJhYmx5IGlmIHRoZSBhY3R1YWwgd3JhcHBlciBzb3Vy
Y2UgaXMgcmV0dXJuZWQuCi0gICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvblRl
bXBsYXRlPiB0b1N0cmluZ1RlbXBsYXRlID0gdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhWOExh
enlFdmVudExpc3RlbmVyVG9TdHJpbmcpOwotICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
RnVuY3Rpb24+IHRvU3RyaW5nRnVuY3Rpb247Ci0gICAgICAgICAgICAgICAgaWYgKCF0b1N0cmlu
Z1RlbXBsYXRlLklzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdGdW5jdGlv
biA9IHRvU3RyaW5nVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCF0b1N0cmluZ0Z1bmN0aW9uLklzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJp
bmcgdG9TdHJpbmdSZXN1bHQgPSAiZnVuY3Rpb24gIjsKLSAgICAgICAgICAgICAgICAgICAgdG9T
dHJpbmdSZXN1bHQuYXBwZW5kKG1fZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgICAgICAgICAgICAg
dG9TdHJpbmdSZXN1bHQuYXBwZW5kKCIoIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2lz
U1ZHRXZlbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICB0b1N0cmluZ1Jlc3VsdC5hcHBlbmQo
ImV2dCIpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0b1N0cmluZ1Jlc3VsdC5hcHBlbmQoImV2ZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIHRv
U3RyaW5nUmVzdWx0LmFwcGVuZCgiKSB7XG4gICIpOwotICAgICAgICAgICAgICAgICAgICB0b1N0
cmluZ1Jlc3VsdC5hcHBlbmQobV9jb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdS
ZXN1bHQuYXBwZW5kKCJcbn0iKTsKLSAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdGdW5jdGlv
bi0+U2V0SGlkZGVuVmFsdWUodjg6OlN0cmluZzo6TmV3KCJ0b1N0cmluZ1N0cmluZyIpLCB2OEV4
dGVybmFsU3RyaW5nKHRvU3RyaW5nUmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fd3Jh
cHBlZEZ1bmN0aW9uLT5TZXQodjg6OlN0cmluZzo6TmV3KCJ0b1N0cmluZyIpLCB0b1N0cmluZ0Z1
bmN0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAg
ICAgICAgVjhHQ0NvbnRyb2xsZXI6OnJlZ2lzdGVyR2xvYmFsSGFuZGxlKEVWRU5UX0xJU1RFTkVS
LCB0aGlzLCBtX3dyYXBwZWRGdW5jdGlvbik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBtX3dy
YXBwZWRGdW5jdGlvbi0+U2V0TmFtZSh2ODo6U3RyaW5nOjpOZXcoZnJvbVdlYkNvcmVTdHJpbmco
bV9mdW5jdGlvbk5hbWUpLCBtX2Z1bmN0aW9uTmFtZS5sZW5ndGgoKSkpOworICAgIGlmIChoYXNF
eGlzdGluZ0xpc3RlbmVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFN3aXRj
aCB0byB0aGUgY29udGV4dCBvZiBtX2ZyYW1lLgorICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVT
Y29wZTsKKworICAgIC8vIFVzZSB0aGUgb3V0ZXIgc2NvcGUgdG8gaG9sZCBjb250ZXh0LgorICAg
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IFY4UHJveHk6Om1haW5Xb3JsZENv
bnRleHQoZnJhbWUoKSk7CisgICAgLy8gQmFpbCBvdXQgaWYgd2UgY2Fubm90IGdldCB0aGUgY29u
dGV4dC4KKyAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CisKKyAgICAvLyBGSVhNRTog
Y2FjaGUgdGhlIHdyYXBwZXIgZnVuY3Rpb24uCisKKyAgICAvLyBOb2RlcyBvdGhlciB0aGFuIHRo
ZSBkb2N1bWVudCBvYmplY3QsIHdoZW4gZXhlY3V0aW5nIGlubGluZSBldmVudCBoYW5kbGVycyBw
dXNoIGRvY3VtZW50LCBmb3JtLCBhbmQgdGhlIHRhcmdldCBub2RlIG9uIHRoZSBzY29wZSBjaGFp
bi4KKyAgICAvLyBXZSBkbyB0aGlzIGJ5IHVzaW5nICd3aXRoJyBzdGF0ZW1lbnQuCisgICAgLy8g
U2VlIGNocm9tZS9mYXN0L2Zvcm1zL2Zvcm0tYWN0aW9uLmh0bWwKKyAgICAvLyAgICAgY2hyb21l
L2Zhc3QvZm9ybXMvc2VsZWN0ZWQtaW5kZXgtdmFsdWUuaHRtbAorICAgIC8vICAgICBiYXNlL2Zh
c3Qvb3ZlcmZsb3cvb25zY3JvbGwtbGF5ZXItc2VsZi1kZXN0cnVjdC5odG1sCisgICAgLy8KKyAg
ICAvLyBEb24ndCB1c2UgbmV3IGxpbmVzIHNvIHRoYXQgbGluZXMgaW4gdGhlIG1vZGlmaWVkIGhh
bmRsZXIKKyAgICAvLyBoYXZlIHRoZSBzYW1lIG51bWJlcnMgYXMgaW4gdGhlIG9yaWdpbmFsIGNv
ZGUuCisgICAgU3RyaW5nIGNvZGUgPSAiKGZ1bmN0aW9uIChldnQpIHsiIFwKKyAgICAgICAgICAg
ICJ3aXRoICh0aGlzLm93bmVyRG9jdW1lbnQgPyB0aGlzLm93bmVyRG9jdW1lbnQgOiB7fSkgeyIg
XAorICAgICAgICAgICAgIndpdGggKHRoaXMuZm9ybSA/IHRoaXMuZm9ybSA6IHt9KSB7IiBcCisg
ICAgICAgICAgICAid2l0aCAodGhpcykgeyIgXAorICAgICAgICAgICAgInJldHVybiAoZnVuY3Rp
b24oZXZ0KXsiOworICAgIGNvZGUuYXBwZW5kKG1fY29kZSk7CisgICAgLy8gSW5zZXJ0ICdcbicg
b3RoZXJ3aXNlIC8vLXN0eWxlIGNvbW1lbnRzIGNvdWxkIGJyZWFrIHRoZSBoYW5kbGVyLgorICAg
IGNvZGUuYXBwZW5kKCAgIlxufSkuY2FsbCh0aGlzLCBldnQpO319fX0pIik7CisgICAgdjg6Okhh
bmRsZTx2ODo6U3RyaW5nPiBjb2RlRXh0ZXJuYWxTdHJpbmcgPSB2OEV4dGVybmFsU3RyaW5nKGNv
ZGUpOworICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gVjhQcm94eTo6Y29tcGls
ZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJpbmcsIGZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLCBs
aW5lTnVtYmVyKCkpOworICAgIGlmICghc2NyaXB0LklzRW1wdHkoKSkgeworICAgICAgICBWOFBy
b3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGZyYW1lKCkpOworICAgICAgICBBU1NFUlQo
cHJveHkpOworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IHByb3h5LT5ydW5T
Y3JpcHQoc2NyaXB0LCBmYWxzZSk7CisgICAgICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQodmFsdWUtPklzRnVuY3Rpb24oKSk7CisKKyAgICAgICAgICAgIHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+IHdyYXBwZWRGdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+OjpDYXN0KHZhbHVlKTsKKworICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSB0b1N0cmlu
ZyBmdW5jdGlvbiBvbiB0aGUgd3JhcHBlciBmdW5jdGlvbiB0byBhdm9pZCBpdCByZXR1cm5pbmcg
dGhlIHNvdXJjZSBmb3IgdGhlIGFjdHVhbCB3cmFwcGVyIGZ1bmN0aW9uLiBJbnN0ZWFkCisgICAg
ICAgICAgICAvLyBpdCByZXR1cm5zIHNvdXJjZSBmb3IgYSBjbGVhbiB3cmFwcGVyIGZ1bmN0aW9u
IHdpdGggdGhlIGV2ZW50IGFyZ3VtZW50IHdyYXBwaW5nIHRoZSBldmVudCBzb3VyY2UgY29kZS4g
VGhlIHJlYXNvbiBmb3IgdGhpcworICAgICAgICAgICAgLy8gaXMgdGhhdCBzb21lIHdlYiBzaXRl
cyB1c2VzIHRvU3RyaW5nIG9uIGV2ZW50IGZ1bmN0aW9ucyBhbmQgdGhlIGV2YWxzIHRoZSBzb3Vy
Y2UgcmV0dXJuZWQgKHNvbWUgdGltZXMgYSBSZWdFeHAgaXMgYXBwbGllZCBhcworICAgICAgICAg
ICAgLy8gd2VsbCkgZm9yIHNvbWUgb3RoZXIgdXNlLiBUaGF0IGZhaWxzIG1pc2VyYWJseSBpZiB0
aGUgYWN0dWFsIHdyYXBwZXIgc291cmNlIGlzIHJldHVybmVkLgorICAgICAgICAgICAgdjg6Okxv
Y2FsPHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0b1N0cmluZ1RlbXBsYXRlID0gdjg6OkZ1bmN0aW9u
VGVtcGxhdGU6Ok5ldyhWOExhenlFdmVudExpc3RlbmVyVG9TdHJpbmcpOworICAgICAgICAgICAg
djg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gdG9TdHJpbmdGdW5jdGlvbjsKKyAgICAgICAgICAgIGlm
ICghdG9TdHJpbmdUZW1wbGF0ZS5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgdG9TdHJpbmdG
dW5jdGlvbiA9IHRvU3RyaW5nVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICBp
ZiAoIXRvU3RyaW5nRnVuY3Rpb24uSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5n
IHRvU3RyaW5nUmVzdWx0ID0gImZ1bmN0aW9uICI7CisgICAgICAgICAgICAgICAgdG9TdHJpbmdS
ZXN1bHQuYXBwZW5kKG1fZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAgICAgICB0b1N0cmluZ1Jl
c3VsdC5hcHBlbmQoIigiKTsKKyAgICAgICAgICAgICAgICBpZiAobV9pc1NWR0V2ZW50KQorICAg
ICAgICAgICAgICAgICAgICB0b1N0cmluZ1Jlc3VsdC5hcHBlbmQoImV2dCIpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdSZXN1bHQuYXBwZW5kKCJl
dmVudCIpOworICAgICAgICAgICAgICAgIHRvU3RyaW5nUmVzdWx0LmFwcGVuZCgiKSB7XG4gICIp
OworICAgICAgICAgICAgICAgIHRvU3RyaW5nUmVzdWx0LmFwcGVuZChtX2NvZGUpOworICAgICAg
ICAgICAgICAgIHRvU3RyaW5nUmVzdWx0LmFwcGVuZCgiXG59Iik7CisgICAgICAgICAgICAgICAg
dG9TdHJpbmdGdW5jdGlvbi0+U2V0SGlkZGVuVmFsdWUodjg6OlN0cmluZzo6TmV3KCJ0b1N0cmlu
Z1N0cmluZyIpLCB2OEV4dGVybmFsU3RyaW5nKHRvU3RyaW5nUmVzdWx0KSk7CisgICAgICAgICAg
ICAgICAgd3JhcHBlZEZ1bmN0aW9uLT5TZXQodjg6OlN0cmluZzo6TmV3KCJ0b1N0cmluZyIpLCB0
b1N0cmluZ0Z1bmN0aW9uKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd3JhcHBlZEZ1
bmN0aW9uLT5TZXROYW1lKHY4OjpTdHJpbmc6Ok5ldyhmcm9tV2ViQ29yZVN0cmluZyhtX2Z1bmN0
aW9uTmFtZSksIG1fZnVuY3Rpb25OYW1lLmxlbmd0aCgpKSk7CisKKyAgICAgICAgICAgIHNldExp
c3RlbmVyT2JqZWN0KHdyYXBwZWRGdW5jdGlvbik7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBy
ZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46Ok5ldyhtX3dyYXBwZWRGdW5jdGlvbik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVu
dExpc3RlbmVyLmgKaW5kZXggYzlmNmE4NC4uYmE0NjBlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOExhenlFdmVudExpc3RlbmVyLmgKQEAgLTUwLDMwICs1MCwxOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4TGF6eUV2ZW50TGlzdGVu
ZXIoZnJhbWUsIGNvZGUsIGZ1bmN0aW9uTmFtZSwgaXNTVkdFdmVudCkpOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gRm9yIGxhenkgZXZlbnQgbGlzdGVuZXIsIHRoZSBsaXN0ZW5lciBvYmplY3Qg
aXMgdGhlIHNhbWUgYXMgaXRzIGxpc3RlbmVyCi0gICAgICAgIC8vIGZ1bmN0aW9uIHdpdGhvdXQg
YWRkaXRpb25hbCBzY29wZSBjaGFpbnMuCi0gICAgICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGdldExpc3RlbmVyT2JqZWN0KCkgeyByZXR1cm4gZ2V0V3JhcHBlZExpc3RlbmVyRnVu
Y3Rpb24oKTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMYXp5KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUxp
c3RlbmVyT2JqZWN0KCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBWOExhenlFdmVudExpc3Rl
bmVyKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFt
ZSwgYm9vbCBpc1NWR0V2ZW50KTsKLSAgICAgICAgdmlydHVhbCB+VjhMYXp5RXZlbnRMaXN0ZW5l
cigpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCB2aXJ0dWFsaXNBdHRyaWJ1dGUoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gY2Fs
bExpc3RlbmVyRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQsIEV2ZW50Kik7
CiAKICAgICAgICAgU3RyaW5nIG1fY29kZTsKICAgICAgICAgU3RyaW5nIG1fZnVuY3Rpb25OYW1l
OwogICAgICAgICBib29sIG1faXNTVkdFdmVudDsKLSAgICAgICAgYm9vbCBtX2NvbXBpbGVkOwot
Ci0gICAgICAgIC8vIElmIHRoZSBldmVudCBsaXN0ZW5lciBpcyBvbiBhIG5vbi1kb2N1bWVudCBk
b20gbm9kZSwgd2UgY29tcGlsZSB0aGUgZnVuY3Rpb24gd2l0aCBzb21lIGltcGxpY2l0IHNjb3Bl
IGNoYWlucyBiZWZvcmUgaXQuCi0gICAgICAgIGJvb2wgbV93cmFwcGVkRnVuY3Rpb25Db21waWxl
ZDsKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uPiBtX3dyYXBwZWRGdW5jdGlv
bjsKLQotICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBnZXRXcmFwcGVkTGlzdGVuZXJG
dW5jdGlvbigpOwotCi0gICAgICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gY2FsbExp
c3RlbmVyRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQsIEV2ZW50Kik7Ci0K
LSAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZ2V0TGlzdGVuZXJGdW5jdGlvbigpOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhPYmplY3RFdmVudExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhPYmplY3RFdmVudExpc3RlbmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZjEwNzY2Yy4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRM
aXN0ZW5lci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5o
IgotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RhdGljIHZvaWQgd2Vha09iamVjdEV2ZW50TGlzdGVuZXJDYWxsYmFj
ayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+LCB2b2lkKiBwYXJhbWV0ZXIpCi17Ci0gICAgVjhP
YmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRM
aXN0ZW5lcio+KHBhcmFtZXRlcik7Ci0KLSAgICAvLyBSZW1vdmUgdGhlIHdyYXBwZXIKLSAgICBG
cmFtZSogZnJhbWUgPSBsaXN0ZW5lci0+ZnJhbWUoKTsKLSAgICBpZiAoZnJhbWUpIHsKLSAgICAg
ICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShmcmFtZSk7Ci0gICAgICAgIGlm
IChwcm94eSkKLSAgICAgICAgICAgIHByb3h5LT5vYmplY3RMaXN0ZW5lcnMoKS0+cmVtb3ZlKGxp
c3RlbmVyKTsKLQotICAgICAgICAvLyBCZWNhdXNlIHRoZSBsaXN0ZW5lciBpcyBubyBsb25nZXIg
aW4gdGhlIGxpc3QsIGl0IG11c3QgYmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIGZyYW1lIHRvIGF2
b2lkIGRhbmdsaW5nIGZyYW1lIHBvaW50ZXIKLSAgICAgICAgLy8gaW4gdGhlIGRlc3RydWN0b3Iu
Ci0gICAgICAgIGxpc3RlbmVyLT5kaXNjb25uZWN0RnJhbWUoKTsKLSAgICB9Ci0gICAgbGlzdGVu
ZXItPmRpc3Bvc2VMaXN0ZW5lck9iamVjdCgpOwotfQotCi0vLyBBbiBvYmplY3QgZXZlbnQgbGlz
dGVuZXIgd3JhcHBlciBvbmx5IGhvbGRzIGEgd2VhayByZWZlcmVuY2UgdG8gdGhlCi0vLyBKUyBm
dW5jdGlvbi4gQSBzdHJvbmcgcmVmZXJlbmNlIGNhbiBjcmVhdGUgYSBjeWNsZS4KLS8vCi0vLyBU
aGUgbGlmZXRpbWUgb2YgdGhlc2Ugb2JqZWN0cyBpcyBib3VuZGVkIGJ5IHRoZSBsaWZlIHRpbWUg
b2YgdGhlIEpTCi0vLyB3cmFwcGVyIG9mIFhIUiBvciBOb2RlLiBTbyB3ZSBjYW4gY3JlYXRlIGEg
aGlkZGVuIHJlZmVyZW5jZSBmcm9tCi0vLyB0aGUgSlMgd3JhcHBlciB0byB0byBpdHMgSlMgZnVu
Y3Rpb24uCi0vLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgIChtYXApCi0vLyAgICAgICAg
ICBYSFIgb3IgTm9kZSAgPC0tLS0tLS0tLS0gIEpTX3dyYXBwZXIKLS8vICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAoaGlkZGVuKSA6ICBeCi0vLyAgICAgICAgICAgICAgIFYgICAgICAgICAg
ICAgICAgICAgICAgViAgOiAobWF5IGJlIHJlYWNoYWJsZSBieSBjbG9zdXJlKQotLy8gICAgICAg
ICAgIFY4X2xpc3RlbmVyICAtLS0tLS0tLT4gSlNfZnVuY3Rpb24KLS8vICAgICAgICAgICAgICAg
ICAgICAgICAgICh3ZWFrKSAgPC0tIG1heSBjcmVhdGUgYSBjeWNsZSBpZiBpdCBpcyBzdHJvbmcK
LS8vCi0vLyBUaGUgcGVyc2lzdGVudCByZWZlcmVuY2UgaXMgbWFkZSB3ZWFrIGluIHRoZSBjb25z
dHJ1Y3RvciBvZgotLy8gVjhPYmplY3RFdmVudExpc3RlbmVyLgotCi1WOE9iamVjdEV2ZW50TGlz
dGVuZXI6OlY4T2JqZWN0RXZlbnRMaXN0ZW5lcihGcmFtZSogZnJhbWUsIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBpc0lubGluZSkKLSAgICA6IFY4RXZlbnRMaXN0ZW5lcihm
cmFtZSwgbGlzdGVuZXIsIGlzSW5saW5lKQotewotICAgIG1fbGlzdGVuZXIuTWFrZVdlYWsodGhp
cywgd2Vha09iamVjdEV2ZW50TGlzdGVuZXJDYWxsYmFjayk7Ci19Ci0KLVY4T2JqZWN0RXZlbnRM
aXN0ZW5lcjo6flY4T2JqZWN0RXZlbnRMaXN0ZW5lcigpCi17Ci0gICAgaWYgKG1fZnJhbWUpIHsK
LSAgICAgICAgQVNTRVJUKCFtX2xpc3RlbmVyLklzRW1wdHkoKSk7Ci0gICAgICAgIFY4UHJveHkq
IHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUobV9mcmFtZSk7Ci0gICAgICAgIGlmIChwcm94eSkK
LSAgICAgICAgICAgIHByb3h5LT5vYmplY3RMaXN0ZW5lcnMoKS0+cmVtb3ZlKHRoaXMpOwotICAg
IH0KLQotICAgIGRpc3Bvc2VMaXN0ZW5lck9iamVjdCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRMaXN0
ZW5lci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M1YWUxMC4uMDAwMDAwMAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRMaXN0ZW5lci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVjhPYmplY3RFdmVudExpc3RlbmVy
X2gKLSNkZWZpbmUgVjhPYmplY3RFdmVudExpc3RlbmVyX2gKLQotI2luY2x1ZGUgIlY4Q3VzdG9t
RXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgPHY4Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgRnJhbWU7Ci0KLSAgICAv
LyBWOE9iamVjdEV2ZW50TGlzdGVuZXIgaXMgYSBzcGVjaWFsIGxpc3RlbmVyIHdyYXBwZXIgZm9y
IG9iamVjdHMgbm90IGluIHRoZSBET00uICBJdCBrZWVwcyB0aGUgSlMgbGlzdGVuZXIgYXMgYSB3
ZWFrIHBvaW50ZXIuCi0gICAgY2xhc3MgVjhPYmplY3RFdmVudExpc3RlbmVyIDogcHVibGljIFY4
RXZlbnRMaXN0ZW5lciB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxW
OE9iamVjdEV2ZW50TGlzdGVuZXI+IGNyZWF0ZShGcmFtZSogZnJhbWUsIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBpc0lubGluZSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBWOE9iamVjdEV2ZW50TGlzdGVuZXIoZnJhbWUsIGxpc3RlbmVy
LCBpc0lubGluZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGlzT2JqZWN0
TGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICBWOE9iamVjdEV2ZW50TGlzdGVuZXIoRnJhbWUqLCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlz
dGVuZXIsIGJvb2wgaXNJbmxpbmUpOwotICAgICAgICB2aXJ0dWFsIH5WOE9iamVjdEV2ZW50TGlz
dGVuZXIoKTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBW
OE9iamVjdEV2ZW50TGlzdGVuZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFByb3h5LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggNGZiMGY2
OC4uNmQzMjEwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCkBAIC0yMjgsMjIgKzIyOCw2IEBA
IHZvaWQgVjhQcm94eTo6ZGVzdHJveUdsb2JhbCgpCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBk
aXNjb25uZWN0RXZlbnRMaXN0ZW5lcnNJbkxpc3QoVjhFdmVudExpc3RlbmVyTGlzdCYgbGlzdCkK
LXsKLSAgICBWOEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvciBpdCA9IGxpc3QuYmVnaW4oKTsK
LSAgICB3aGlsZSAoaXQgIT0gbGlzdC5lbmQoKSkgewotICAgICAgICAoKml0KS0+ZGlzY29ubmVj
dEZyYW1lKCk7Ci0gICAgICAgICsraXQ7Ci0gICAgfQotICAgIGxpc3QuY2xlYXIoKTsKLX0KLQot
dm9pZCBWOFByb3h5OjpkaXNjb25uZWN0RXZlbnRMaXN0ZW5lcnMoKQotewotICAgIGRpc2Nvbm5l
Y3RFdmVudExpc3RlbmVyc0luTGlzdChtX2V2ZW50TGlzdGVuZXJzKTsKLSAgICBkaXNjb25uZWN0
RXZlbnRMaXN0ZW5lcnNJbkxpc3QobV9vYmplY3RMaXN0ZW5lcnMpOwotfQotCiB2ODo6SGFuZGxl
PHY4OjpTY3JpcHQ+IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5n
PiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUpCiB7CiAgICAgY29u
c3QgdWludDE2X3QqIGZpbGVOYW1lU3RyaW5nID0gZnJvbVdlYkNvcmVTdHJpbmcoZmlsZU5hbWUp
OwpAQCAtNTY2LDcgKzU1MCw2IEBAIFY4UHJveHkqIFY4UHJveHk6OnJldHJpZXZlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAKIHZvaWQgVjhQcm94eTo6ZGlzY29ubmVjdEZyYW1l
KCkKIHsKLSAgICBkaXNjb25uZWN0RXZlbnRMaXN0ZW5lcnMoKTsKIH0KIAogYm9vbCBWOFByb3h5
Ojppc0VuYWJsZWQoKQpAQCAtNzM3LDYgKzcyMCwxMCBAQCB2b2lkIFY4UHJveHk6OmNsZWFyRm9y
TmF2aWdhdGlvbigpCiAgICAgfQogfQogCit2b2lkIFY4UHJveHk6OmRpc2Nvbm5lY3RFdmVudExp
c3RlbmVycygpCit7Cit9CisKIHZvaWQgVjhQcm94eTo6c2V0U2VjdXJpdHlUb2tlbigpCiB7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmgKaW5kZXggOGNhOTUyMC4uM2MwYTQwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFByb3h5LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKQEAgLTM2
LDcgKzM2LDYgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIiAvLyBmb3IgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4KICNpbmNsdWRlICJTaGFyZWRQZXJzaXN0ZW50LmgiCiAjaW5jbHVkZSAi
VjhET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVjhFdmVudExpc3RlbmVyTGlzdC5oIgogI2luY2x1
ZGUgIlY4R0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgogI2luY2x1ZGUgPHY4
Lmg+CkBAIC0xNjAsOSArMTU5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJv
b2wgaXNFbmFibGVkKCk7CiAKLSAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdCogZXZlbnRMaXN0
ZW5lcnMoKSB7IHJldHVybiAmbV9ldmVudExpc3RlbmVyczsgfQotICAgICAgICBWOEV2ZW50TGlz
dGVuZXJMaXN0KiBvYmplY3RMaXN0ZW5lcnMoKSB7IHJldHVybiAmbV9vYmplY3RMaXN0ZW5lcnM7
IH0KLQogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIHN0YXRpYyB2b2lkIHNldFNWR0NvbnRleHQo
dm9pZCosIFNWR0VsZW1lbnQqKTsKICAgICAgICAgc3RhdGljIFNWR0VsZW1lbnQqIHN2Z0NvbnRl
eHQodm9pZCopOwpAQCAtNDAwLDE0ICszOTYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgaW50IG1faGFuZGxlckxpbmVOdW1iZXI7CiAKLSAgICAgICAgLy8gQSBsaXN0IG9mIGV2
ZW50IGxpc3RlbmVycyBjcmVhdGVkIGZvciB0aGlzIGZyYW1lLAotICAgICAgICAvLyB0aGUgbGlz
dCBnZXRzIGNsZWFyZWQgd2hlbiByZW1vdmluZyBhbGwgdGltZW91dHMuCi0gICAgICAgIFY4RXZl
bnRMaXN0ZW5lckxpc3QgbV9ldmVudExpc3RlbmVyczsKLQotICAgICAgICAvLyBBIGxpc3Qgb2Yg
ZXZlbnQgbGlzdGVuZXJzIGNyZWF0ZSBmb3IgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IGZvciB0aGlz
IGZyYW1lLAotICAgICAgICAvLyB0aGUgbGlzdCBnZXRzIGNsZWFyZWQgd2hlbiByZW1vdmluZyBh
bGwgdGltZW91dHMuCi0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QgbV9vYmplY3RMaXN0ZW5l
cnM7Ci0KICAgICAgICAgLy8gVHJ1ZSBmb3IgPGEgaHJlZj0iamF2YXNjcmlwdDpmb28oKSI+IGFu
ZCBmYWxzZSBmb3IgPHNjcmlwdD5mb28oKTwvc2NyaXB0Pi4KICAgICAgICAgLy8gT25seSB2YWxp
ZCBkdXJpbmcgZXhlY3V0aW9uLgogICAgICAgICBib29sIG1faW5saW5lQ29kZTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuY3BwCmlu
ZGV4IGJkZTYwYTEuLjg1NWIwMDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhX
b3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmNwcApAQCAtNDYsMTMgKzQ2LDYgQEAgVjhXb3Jr
ZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcihXb3Jr
ZXJDb250ZXh0RXhlY3V0aW8KIHsKIH0KIAotVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6
flY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIoKQotewotICAgIGlmIChtX3Byb3h5KQotICAg
ICAgICBtX3Byb3h5LT5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMpOwotICAgIGRpc3Bvc2VMaXN0
ZW5lck9iamVjdCgpOwotfQotCiB2b2lkIFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6Omhh
bmRsZUV2ZW50KEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBJcyB0aGUgRXZlbnRMaXN0ZW5lciBk
aXNjb25uZWN0ZWQ/CkBAIC05Niw2ICs4OSw3IEBAIGJvb2wgVjhXb3JrZXJDb250ZXh0RXZlbnRM
aXN0ZW5lcjo6cmVwb3J0RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpCiAg
ICAgLy8gRW50ZXIgdGhlIFY4IGNvbnRleHQgaW4gd2hpY2ggdG8gcGVyZm9ybSB0aGUgZXZlbnQg
aGFuZGxpbmcuCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwogCisgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyID0gZ2V0TGlzdGVuZXJPYmplY3QoKTsKICAg
ICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXR1cm5WYWx1ZTsKICAgICB7CiAgICAgICAgIC8vIENh
dGNoIGV4Y2VwdGlvbnMgdGhyb3duIGluIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHNvIHRoZXkgZG8g
bm90IHByb3BhZ2F0ZSB0byBqYXZhc2NyaXB0IGNvZGUgdGhhdCBjYXVzZWQgdGhlIGV2ZW50IHRv
IGZpcmUuCkBAIC0xMDMsOCArOTcsOCBAQCBib29sIFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVu
ZXI6OnJlcG9ydEVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaQogICAgICAg
ICB0cnlDYXRjaC5TZXRWZXJib3NlKHRydWUpOwogCiAgICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0
aW9uLgotICAgICAgICBpZiAoIW1fbGlzdGVuZXIuSXNFbXB0eSgpICYmIG1fbGlzdGVuZXItPklz
RnVuY3Rpb24oKSkgewotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gY2FsbEZ1
bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46Ok5ldyh2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb24+OjpDYXN0KG1fbGlzdGVuZXIpKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lci5Jc0Vt
cHR5KCkgJiYgbGlzdGVuZXItPklzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4gY2FsbEZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNh
c3QobGlzdGVuZXIpOwogICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHRoaXNWYWx1
ZSA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCktPkdsb2JhbCgpOwogCiAgICAgICAgICAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcGFyYW1ldGVyc1szXSA9IHsgdjhTdHJpbmcobWVzc2FnZSks
IHY4U3RyaW5nKHVybCksIHY4OjpJbnRlZ2VyOjpOZXcobGluZU51bWJlcikgfTsKQEAgLTE0MSw4
ICsxMzUsMTAgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0
ZW5lcjo6Y2FsbExpc3RlbmVyRnVuY3Rpb24odjg6OkhhbmQKIAogdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OmdldFJlY2VpdmVyT2JqZWN0KEV2ZW50
KiBldmVudCkKIHsKLSAgICBpZiAoIW1fbGlzdGVuZXIuSXNFbXB0eSgpICYmICFtX2xpc3RlbmVy
LT5Jc0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5l
dyhtX2xpc3RlbmVyKTsKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIgPSBnZXRM
aXN0ZW5lck9iamVjdCgpOworCisgICAgaWYgKCFsaXN0ZW5lci5Jc0VtcHR5KCkgJiYgIWxpc3Rl
bmVyLT5Jc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBsaXN0ZW5lcjsKIAogICAgIEV2ZW50
VGFyZ2V0KiB0YXJnZXQgPSBldmVudC0+Y3VycmVudFRhcmdldCgpOwogICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydEV2
ZW50VGFyZ2V0VG9WOE9iamVjdCh0YXJnZXQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaAppbmRleCA5NDNhZTc2Li4zZTUwY2FlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVu
ZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVu
ZXIuaApAQCAtNTAsNyArNTAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KICAg
ICAgICAgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcihXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkqLCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUpOwog
Ci0gICAgICAgIHZpcnR1YWwgflY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIoKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCByZXBvcnRFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsLCBp
bnQgbGluZU51bWJlcik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNjb25uZWN0ZWQoKSBjb25z
dCB7IHJldHVybiAhbV9wcm94eTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGNlNTY1NjMuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV09SS0VSUykK
LQotI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKLQotI2lu
Y2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0YXRpYyB2b2lkIHdlYWtPYmplY3RFdmVudExpc3RlbmVyQ2FsbGJhY2sodjg6OlBl
cnNpc3RlbnQ8djg6OlZhbHVlPiwgdm9pZCogcGFyYW1ldGVyKQotewotICAgIFY4V29ya2VyQ29u
dGV4dE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhXb3JrZXJD
b250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHBhcmFtZXRlcik7Ci0KLSAgICAvLyBSZW1vdmUg
dGhlIHdyYXBwZXIKLSAgICBsaXN0ZW5lci0+cHJveHkoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihs
aXN0ZW5lcik7Ci0KLSAgICBsaXN0ZW5lci0+ZGlzcG9zZUxpc3RlbmVyT2JqZWN0KCk7Ci19Ci0K
LVY4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXI6OlY4V29ya2VyQ29udGV4dE9iamVj
dEV2ZW50TGlzdGVuZXIoV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSwgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyLCBib29sIGlzSW5saW5lKQotICAgIDogVjhXb3JrZXJD
b250ZXh0RXZlbnRMaXN0ZW5lcihwcm94eSwgbGlzdGVuZXIsIGlzSW5saW5lKQotewotICAgIG1f
bGlzdGVuZXIuTWFrZVdlYWsodGhpcywgd2Vha09iamVjdEV2ZW50TGlzdGVuZXJDYWxsYmFjayk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFdPUktFUlMKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0
ZW5lci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExp
c3RlbmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NzE2MzcuLjAwMDAwMDAK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3Rl
bmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBWOFdvcmtlckNvbnRl
eHRPYmplY3RFdmVudExpc3RlbmVyX2gKLSNkZWZpbmUgVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZl
bnRMaXN0ZW5lcl9oCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIlY4V29ya2Vy
Q29udGV4dEV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlIDx2OC5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eTsKLQotICAgIGNsYXNzIFY4V29ya2VyQ29udGV4dE9iamVjdEV2
ZW50TGlzdGVuZXIgOiBwdWJsaWMgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lciB7Ci0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOFdvcmtlckNvbnRleHRPYmplY3RF
dmVudExpc3RlbmVyPiBjcmVhdGUoV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSwg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyLCBib29sIGlzSW5saW5lKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4V29ya2VyQ29udGV4dE9iamVjdEV2
ZW50TGlzdGVuZXIocHJveHksIGxpc3RlbmVyLCBpc0lubGluZSkpOwotICAgICAgICB9Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBWOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyKFdv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSosIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5l
ciwgYm9vbCBpc0lubGluZSk7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gV09SS0VSUwotCi0jZW5kaWYgLy8gVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRM
aXN0ZW5lcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5jcHAKaW5kZXggMTQxMTA5Ny4uNjhkOTM4ZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcApAQCAtNDgsNyAr
NDgsNiBAQAogI2luY2x1ZGUgIlY4SW5kZXguaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5j
bHVkZSAiVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIlY4V29ya2Vy
Q29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAj
aW5jbHVkZSAiV2ViU29ja2V0LmgiCiAjZW5kaWYKQEAgLTgyLDE0ICs4MSw2IEBAIFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eTo6fldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSgpCiAKIHZv
aWQgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpkaXNwb3NlKCkKIHsKLSAgICAvLyBEaXNj
b25uZWN0IGFsbCBldmVudCBsaXN0ZW5lcnMuCi0gICAgaWYgKG1fbGlzdGVuZXJzLmdldCgpKSB7
Ci0gICAgICAgIGZvciAoVjhFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3IgaXRlcmF0b3IobV9s
aXN0ZW5lcnMtPmJlZ2luKCkpOyBpdGVyYXRvciAhPSBtX2xpc3RlbmVycy0+ZW5kKCk7ICsraXRl
cmF0b3IpCi0gICAgICAgICAgIHN0YXRpY19jYXN0PFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVu
ZXIqPigqaXRlcmF0b3IpLT5kaXNjb25uZWN0KCk7Ci0KLSAgICAgICAgbV9saXN0ZW5lcnMtPmNs
ZWFyKCk7Ci0gICAgfQotCiAgICAgLy8gRGV0YWNoIGFsbCBldmVudHMgZnJvbSB0aGVpciBKUyB3
cmFwcGVycy4KICAgICBmb3IgKHNpemVfdCBldmVudEluZGV4ID0gMDsgZXZlbnRJbmRleCA8IG1f
ZXZlbnRzLnNpemUoKTsgKytldmVudEluZGV4KSB7CiAgICAgICAgIEV2ZW50KiBldmVudCA9IG1f
ZXZlbnRzW2V2ZW50SW5kZXhdOwpAQCAtMTY5LDggKzE2MCw2IEBAIHZvaWQgV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkKICAgICAvLyBJbnNlcnQgdGhl
IG9iamVjdCBpbnN0YW5jZSBhcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBzaGFkb3cgb2JqZWN0Lgog
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsT2JqZWN0ID0gbV9jb250ZXh0LT5HbG9i
YWwoKTsKICAgICBnbG9iYWxPYmplY3QtPlNldChpbXBsaWNpdFByb3RvU3RyaW5nLCBqc1dvcmtl
ckNvbnRleHQpOwotCi0gICAgbV9saXN0ZW5lcnMuc2V0KG5ldyBWOEV2ZW50TGlzdGVuZXJMaXN0
KCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwg
dm9pZCogaW1wbCkKQEAgLTQwNSwzOSArMzk0LDkgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpydW5TY3JpcHQodjg6OkhhbmRsZTx2ODo6U2NyaXAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVySGVscGVy
KHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCwgYm9vbCBpc0lubGluZSwgYm9vbCBmaW5kT25s
eSwgYm9vbCBjcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKQotewotICAgIGlmICghb2JqZWN0LT5J
c09iamVjdCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFY4RXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSBtX2xpc3RlbmVycy0+ZmluZChvYmplY3QtPlRvT2JqZWN0KCksIGlzSW5saW5lKTsK
LSAgICBpZiAoZmluZE9ubHkpCi0gICAgICAgIHJldHVybiBsaXN0ZW5lcjsKLQotICAgIC8vIENy
ZWF0ZSBhIG5ldyBvbmUsIGFuZCBhZGQgdG8gY2FjaGUuCi0gICAgUmVmUHRyPFY4RXZlbnRMaXN0
ZW5lcj4gbmV3TGlzdGVuZXI7Ci0gICAgaWYgKGNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIpCi0g
ICAgICAgIG5ld0xpc3RlbmVyID0gVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lcjo6
Y3JlYXRlKHRoaXMsIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdChvYmplY3QpLCBpc0lubGlu
ZSk7Ci0gICAgZWxzZQotICAgICAgICBuZXdMaXN0ZW5lciA9IFY4V29ya2VyQ29udGV4dEV2ZW50
TGlzdGVuZXI6OmNyZWF0ZSh0aGlzLCB2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3Qob2JqZWN0
KSwgaXNJbmxpbmUpOwotICAgIG1fbGlzdGVuZXJzLT5hZGQobmV3TGlzdGVuZXIuZ2V0KCkpOwot
Ci0gICAgcmV0dXJuIG5ld0xpc3RlbmVyLnJlbGVhc2UoKTsKLX0KLQogUGFzc1JlZlB0cjxWOEV2
ZW50TGlzdGVuZXI+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZmluZE9yQ3JlYXRlRXZl
bnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QsIGJvb2wgaXNJbmxpbmUsIGJv
b2wgZmluZE9ubHkpCiB7Ci0gICAgcmV0dXJuIGZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXJIZWxw
ZXIob2JqZWN0LCBpc0lubGluZSwgZmluZE9ubHksIGZhbHNlKTsKLX0KLQotUGFzc1JlZlB0cjxW
OEV2ZW50TGlzdGVuZXI+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZmluZE9yQ3JlYXRl
T2JqZWN0RXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QsIGJvb2wgaXNJ
bmxpbmUsIGJvb2wgZmluZE9ubHkpCi17Ci0gICAgcmV0dXJuIGZpbmRPckNyZWF0ZUV2ZW50TGlz
dGVuZXJIZWxwZXIob2JqZWN0LCBpc0lubGluZSwgZmluZE9ubHksIHRydWUpOwotfQotCi12b2lk
IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihWOEV2ZW50
TGlzdGVuZXIqIGxpc3RlbmVyKQotewotICAgIG1fbGlzdGVuZXJzLT5yZW1vdmUobGlzdGVuZXIp
OworICAgIHJldHVybiBmaW5kT25seSA/IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRXcmFwcGVy
KG9iamVjdCwgaXNJbmxpbmUpIDogVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZE9yQ3JlYXRlV3Jh
cHBlcjxWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyPih0aGlzLCBvYmplY3QsIGlzSW5saW5l
KTsKIH0KIAogdm9pZCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnRyYWNrRXZlbnQoRXZl
bnQqIGV2ZW50KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5LmgKaW5kZXggNzUwMjRkZi4uMTFmMTVkNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCkBAIC02NCwxMiArNjQsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eShXb3JrZXJDb250ZXh0Kik7CiAgICAgICAgIH5Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHko
KTsKIAotICAgICAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoVjhFdmVudExpc3RlbmVyKik7
Ci0KICAgICAgICAgLy8gRmluZHMvY3JlYXRlcyBldmVudCBsaXN0ZW5lciB3cmFwcGVycy4KICAg
ICAgICAgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGZpbmRPckNyZWF0ZUV2ZW50TGlzdGVu
ZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUsIGJvb2wgZmlu
ZE9ubHkpOwotICAgICAgICBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gZmluZE9yQ3JlYXRl
T2JqZWN0RXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QsIGJvb2wgaXNJ
bmxpbmUsIGJvb2wgZmluZE9ubHkpOwotICAgICAgICBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5l
cj4gZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lckhlbHBlcih2ODo6TG9jYWw8djg6OlZhbHVlPiBv
YmplY3QsIGJvb2wgaXNJbmxpbmUsIGJvb2wgZmluZE9ubHksIGJvb2wgY3JlYXRlT2JqZWN0RXZl
bnRMaXN0ZW5lcik7CiAKICAgICAgICAgLy8gVHJhY2sgdGhlIGV2ZW50IHNvIHRoYXQgd2UgY2Fu
IGRldGFjaCBpdCBmcm9tIHRoZSBKUyB3cmFwcGVyIHdoZW4gYSB3b3JrZXIKICAgICAgICAgLy8g
dGVybWluYXRlcy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8g
ZGlzcG9zZSB0aGVzZQpAQCAtMTE1LDcgKzExMSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IG1fY29udGV4dDsKICAgICAgICAgaW50
IG1fcmVjdXJzaW9uOwogCi0gICAgICAgIE93blB0cjxWOEV2ZW50TGlzdGVuZXJMaXN0PiBtX2xp
c3RlbmVyczsKICAgICAgICAgVmVjdG9yPEV2ZW50Kj4gbV9ldmVudHM7CiAgICAgfTsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3Rv
bS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFic3RyYWN0V29ya2VyQ3VzdG9t
LmNwcAppbmRleCBjZTc1OWViLi4yZDljNGQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEFic3RyYWN0V29ya2VyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEFic3RyYWN0V29ya2VyQ3VzdG9tLmNwcApAQCAtMzgsNzUgKzM4LDE4
IEBACiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgotI2luY2x1ZGUgIlY4T2JqZWN0
RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0
ZW5lcihBYnN0cmFjdFdvcmtlciogd29ya2VyLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwg
Ym9vbCBpc0F0dHJpYnV0ZSwgYm9vbCBmaW5kT25seSkKLXsKLSAgICBpZiAod29ya2VyLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmlzV29ya2VyQ29udGV4dCgpKSB7Ci0gICAgICAgIFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eSogd29ya2VyQ29udGV4dFByb3h5ID0gV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpOwotICAgICAgICBBU1NFUlQod29ya2VyQ29udGV4
dFByb3h5KTsKLSAgICAgICAgcmV0dXJuIHdvcmtlckNvbnRleHRQcm94eS0+ZmluZE9yQ3JlYXRl
T2JqZWN0RXZlbnRMaXN0ZW5lcih2YWx1ZSwgaXNBdHRyaWJ1dGUsIGZpbmRPbmx5KTsKLSAgICB9
Ci0KLSAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHdvcmtlci0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAocHJveHkpIHsKLSAgICAgICAgVjhFdmVudExp
c3RlbmVyTGlzdCogbGlzdCA9IHByb3h5LT5vYmplY3RMaXN0ZW5lcnMoKTsKLSAgICAgICAgcmV0
dXJuIGZpbmRPbmx5ID8gbGlzdC0+ZmluZFdyYXBwZXIodmFsdWUsIGlzQXR0cmlidXRlKSA6IGxp
c3QtPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhPYmplY3RFdmVudExpc3RlbmVyPihwcm94eS0+ZnJh
bWUoKSwgdmFsdWUsIGlzQXR0cmlidXRlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
QUNDRVNTT1JfR0VUVEVSKEFic3RyYWN0V29ya2VyT25lcnJvcikKLXsKLSAgICBJTkNfU1RBVFMo
TCJET00uQWJzdHJhY3RXb3JrZXIub25lcnJvci5fZ2V0Iik7Ci0gICAgQWJzdHJhY3RXb3JrZXIq
IHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEFic3RyYWN0V29y
a2VyPihWOENsYXNzSW5kZXg6OkFCU1RSQUNUV09SS0VSLCBpbmZvLkhvbGRlcigpKTsKLSAgICBp
ZiAod29ya2VyLT5vbmVycm9yKCkpIHsKLSAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBs
aXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHdvcmtlci0+b25l
cnJvcigpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0
ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0g
ICAgfQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihB
YnN0cmFjdFdvcmtlck9uZXJyb3IpCi17Ci0gICAgSU5DX1NUQVRTKEwiRE9NLkFic3RyYWN0V29y
a2VyLm9uZXJyb3IuX3NldCIpOwotICAgIEFic3RyYWN0V29ya2VyKiB3b3JrZXIgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxBYnN0cmFjdFdvcmtlcj4oVjhDbGFzc0luZGV4
OjpBQlNUUkFDVFdPUktFUiwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgVjhPYmplY3RFdmVudExpc3Rl
bmVyKiBvbGRMaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHdv
cmtlci0+b25lcnJvcigpKTsKLSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlm
IChvbGRMaXN0ZW5lcikgewotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9sZFY4
TGlzdGVuZXIgPSBvbGRMaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAg
IHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgb2xkVjhMaXN0ZW5lciwgVjhD
dXN0b206OmtBYnN0cmFjdFdvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgd29ya2VyLT5zZXRPbmVycm9y
KDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
ciA9IGdldEV2ZW50TGlzdGVuZXIod29ya2VyLCB2YWx1ZSwgdHJ1ZSwgZmFsc2UpOwotICAgICAg
ICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGlmIChvbGRMaXN0ZW5lcikgewotICAgICAg
ICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvbGRWOExpc3RlbmVyID0gb2xkTGlzdGVu
ZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVw
ZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvbGRWOExpc3RlbmVyLCBWOEN1c3RvbTo6a0Fic3RyYWN0
V29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3
b3JrZXItPnNldE9uZXJyb3IobGlzdGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlkZGVuRGVw
ZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtBYnN0cmFjdFdvcmtlclJl
cXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogQ0FMTEJBQ0tfRlVOQ19E
RUNMKEFic3RyYWN0V29ya2VyQWRkRXZlbnRMaXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoTCJE
T00uQWJzdHJhY3RXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgQWJzdHJhY3RXb3Jr
ZXIqIHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEFic3RyYWN0
V29ya2VyPihWOENsYXNzSW5kZXg6OkFCU1RSQUNUV09SS0VSLCBhcmdzLkhvbGRlcigpKTsKIAot
ICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIod29y
a2VyLCBhcmdzWzFdLCBmYWxzZSwgZmFsc2UpOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIGFyZ3NbMV0s
IGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIFN0cmluZyB0eXBl
ID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBh
cmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKQEAgLTEyMiw3ICs2NSw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChBYnN0cmFjdFdvcmtlclJlbW92ZUV2ZW50TGlzdGVuZXIpCiAgICAgSU5DX1NUQVRTKEwi
RE9NLkFic3RyYWN0V29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwogICAgIEFic3RyYWN0
V29ya2VyKiB3b3JrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxBYnN0
cmFjdFdvcmtlcj4oVjhDbGFzc0luZGV4OjpBQlNUUkFDVFdPUktFUiwgYXJncy5Ib2xkZXIoKSk7
CiAKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVy
KHdvcmtlciwgYXJnc1sxXSwgZmFsc2UsIHRydWUpOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVy
PiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIGFyZ3Nb
MV0sIGZhbHNlLCB0cnVlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5
cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9
IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbUJpbmRpbmcuaAppbmRleCAyODE0MTIxLi43MGVjNWJhIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaApAQCAtMTQwLDYgKzE0MCwxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga05vdGlmaWNhdGlv
bkludGVybmFsRmllbGRDb3VudCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCAr
IDE7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTVkcpCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
a1NWR0VsZW1lbnRJbnN0YW5jZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4ID0ga0RlZmF1bHRXcmFw
cGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrU1ZH
RWxlbWVudEluc3RhbmNlSW50ZXJuYWxGaWVsZENvdW50ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJu
YWxGaWVsZENvdW50ICsgMTsKKyNlbmRpZgorCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0RP
TVdpbmRvd0NvbnNvbGVJbmRleCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCAr
IDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0RPTVdpbmRvd0hpc3RvcnlJbmRleCA9IGtE
ZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDE7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQga0RPTVdpbmRvd0xvY2F0aW9uYmFySW5kZXggPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5h
bEZpZWxkQ291bnQgKyAyOwpAQCAtMTUzLDcgKzE1OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRE9NV2luZG93VG9vbGJhckluZGV4ID0ga0RlZmF1
bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMTA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQga0RPTVdpbmRvd0xvY2F0aW9uSW5kZXggPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxk
Q291bnQgKyAxMTsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRE9NV2luZG93RE9NU2VsZWN0
aW9uSW5kZXggPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxMjsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBrRE9NV2luZG93SW50ZXJuYWxGaWVsZENvdW50ID0ga0RlZmF1
bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMTM7CisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQga0RPTVdpbmRvd0V2ZW50TGlzdGVuZXJDYWNoZUluZGV4ID0ga0RlZmF1bHRXcmFwcGVySW50
ZXJuYWxGaWVsZENvdW50ICsgMTM7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0RPTVdpbmRv
d0ludGVybmFsRmllbGRDb3VudCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCAr
IDE0OwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga1N0eWxlU2hlZXRPd25lck5vZGVJbmRl
eCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDA7CiAgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQga1N0eWxlU2hlZXRJbnRlcm5hbEZpZWxkQ291bnQgPSBrRGVmYXVsdFdyYXBw
ZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDdXN0b21FdmVudExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tRXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggYjExYzQ5Ni4uNmE0ZWRlMiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudExpc3Rl
bmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50TGlz
dGVuZXIuY3BwCkBAIC0zOCwzNCArMzgsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogVjhFdmVu
dExpc3RlbmVyOjpWOEV2ZW50TGlzdGVuZXIoRnJhbWUqIGZyYW1lLCB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gbGlzdGVuZXIsIGJvb2wgaXNBdHRyaWJ1dGUpCiAgICAgOiBWOEFic3RyYWN0RXZlbnRM
aXN0ZW5lcihmcmFtZSwgaXNBdHRyaWJ1dGUpCiB7Ci0gICAgbV9saXN0ZW5lciA9IHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcobGlzdGVuZXIpOwotI2lmbmRlZiBOREVCVUcKLSAgICBW
OEdDQ29udHJvbGxlcjo6cmVnaXN0ZXJHbG9iYWxIYW5kbGUoRVZFTlRfTElTVEVORVIsIHRoaXMs
IG1fbGlzdGVuZXIpOwotI2VuZGlmCi19Ci0KLVY4RXZlbnRMaXN0ZW5lcjo6flY4RXZlbnRMaXN0
ZW5lcigpCi17Ci0gICAgaWYgKG1fZnJhbWUpIHsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBW
OFByb3h5OjpyZXRyaWV2ZShtX2ZyYW1lKTsKLSAgICAgICAgaWYgKHByb3h5KQotICAgICAgICAg
ICAgcHJveHktPmV2ZW50TGlzdGVuZXJzKCktPnJlbW92ZSh0aGlzKTsKLSAgICB9Ci0KLSAgICBk
aXNwb3NlTGlzdGVuZXJPYmplY3QoKTsKKyAgICBzZXRMaXN0ZW5lck9iamVjdChsaXN0ZW5lcik7
CiB9CiAKIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RXZlbnRMaXN0ZW5lcjo6Z2V0TGlzdGVu
ZXJGdW5jdGlvbigpCiB7CisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyID0gZ2V0
TGlzdGVuZXJPYmplY3QoKTsKKwogICAgIC8vIEhhcyB0aGUgbGlzdGVuZXIgYmVlbiBkaXNwb3Nl
ZD8KLSAgICBpZiAobV9saXN0ZW5lci5Jc0VtcHR5KCkpCisgICAgaWYgKGxpc3RlbmVyLklzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCk7CiAKLSAgICBp
ZiAobV9saXN0ZW5lci0+SXNGdW5jdGlvbigpKQotICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj46Ok5ldyh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fbGlz
dGVuZXIpKTsKKyAgICBpZiAobGlzdGVuZXItPklzRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJu
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KGxpc3RlbmVyKTsKIAotICAgIGlmIChtX2xp
c3RlbmVyLT5Jc09iamVjdCgpKSB7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHByb3Bl
cnR5ID0gbV9saXN0ZW5lci0+R2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiaGFuZGxlRXZlbnQi
KSk7CisgICAgaWYgKGxpc3RlbmVyLT5Jc09iamVjdCgpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHByb3BlcnR5ID0gbGlzdGVuZXItPkdldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2wo
ImhhbmRsZUV2ZW50IikpOwogICAgICAgICBpZiAocHJvcGVydHktPklzRnVuY3Rpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChwcm9wZXJ0eSk7
CiAgICAgfQpAQCAtODIsNyArNzAsNyBAQCB2ODo6TG9jYWw8djg6OlZhbHVlPiBWOEV2ZW50TGlz
dGVuZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPgogCiAgICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmFtZXRlcnNbMV0gPSB7IGpzRXZlbnQgfTsKIAotICAg
IFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUobV9mcmFtZSk7CisgICAgVjhQcm94
eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShmcmFtZSgpKTsKICAgICBpZiAoIXByb3h5KQog
ICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpWYWx1ZT4oKTsKICAgICByZXR1cm4gcHJveHkt
PmNhbGxGdW5jdGlvbihoYW5kbGVyRnVuY3Rpb24sIHJlY2VpdmVyLCAxLCBwYXJhbWV0ZXJzKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRMaXN0
ZW5lci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudExpc3RlbmVy
LmgKaW5kZXggOTNhZDhmYi4uM2Y5NzkwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDdXN0b21FdmVudExpc3RlbmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDdXN0b21FdmVudExpc3RlbmVyLmgKQEAgLTQ5LDE4ICs0OSwxNCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4RXZlbnRM
aXN0ZW5lcihmcmFtZSwgbGlzdGVuZXIsIGlzQXR0cmlidXRlKSk7CiAgICAgICAgIH0KIAotICAg
ICAgICAvLyBEZXRhY2ggdGhlIGxpc3RlbmVyIGZyb20gaXRzIG93bmVyIGZyYW1lLgotICAgICAg
ICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpIHsgbV9mcmFtZSA9IDA7IH0KLQogICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgVjhFdmVudExpc3RlbmVyKEZyYW1lKiwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IGxpc3RlbmVyLCBib29sIGlzQXR0cmlidXRlKTsKLSAgICAgICAgdmlydHVhbCB+VjhFdmVudExp
c3RlbmVyKCk7CisKICAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZ2V0TGlzdGVuZXJG
dW5jdGlvbigpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCB2ODo6TG9jYWw8djg6
OlZhbHVlPiBjYWxsTGlzdGVuZXJGdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVu
dCwgRXZlbnQqKTsKLSAgICAgICAgdmlydHVhbCBib29sIHZpcnR1YWxpc0F0dHJpYnV0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNBdHRyaWJ1dGU7IH0KLSAgICB9OworICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCmluZGV4IDYzZmM2OTguLmEzNWY1
OGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRp
b25DYWNoZUN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01B
cHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcApAQCAtMzcsNzYgKzM3LDE5IEBACiAjaW5jbHVkZSAi
VjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhE
b2N1bWVudC5oIgotI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUg
IlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIldvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBj
b25zdCBib29sIGtGaW5kT25seSA9IHRydWU7Ci1zdGF0aWMgY29uc3QgYm9vbCBrRmluZE9yQ3Jl
YXRlID0gZmFsc2U7Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGFyZ3VtZW50
VG9FdmVudExpc3RlbmVyKERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGNhY2hlLCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBmaW5kT25seSkKLXsKLSAgICBWOFByb3h5KiBwcm94eSA9
IFY4UHJveHk6OnJldHJpZXZlKGFwcGNhY2hlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwot
ICAgIGlmIChwcm94eSkKLSAgICAgICAgcmV0dXJuIGZpbmRPbmx5ID8gcHJveHktPm9iamVjdExp
c3RlbmVycygpLT5maW5kV3JhcHBlcih2YWx1ZSwgZmFsc2UpCi0gICAgICAgICAgICAgICAgICAg
ICAgICA6IHByb3h5LT5vYmplY3RMaXN0ZW5lcnMoKS0+ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOE9i
amVjdEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwgZmFsc2UpOwotICAgIHJl
dHVybiAwOwotfQotCi1zdGF0aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGV2ZW50TGlzdGVuZXJU
b1Y4T2JqZWN0KEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQotewotICAgIHJldHVybiAoc3RhdGlj
X2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4obGlzdGVuZXIpKS0+Z2V0TGlzdGVuZXJPYmpl
Y3QoKTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgdG9FdmVudElEKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiB2YWx1ZSkKLXsKLSAgICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVl
KTsKLSAgICBBU1NFUlQoa2V5LnN0YXJ0c1dpdGgoIm9uIikpOwotICAgIHJldHVybiBrZXkuc3Vi
c3RyaW5nKDIpOwotfQotCi0vLyBIYW5kbGVzIGFwcGNhY2hlLm9uZm9vZXZlbnQgYXR0cmlidXRl
IGdldHRpbmcKLUFDQ0VTU09SX0dFVFRFUihET01BcHBsaWNhdGlvbkNhY2hlRXZlbnRIYW5kbGVy
KQotewotICAgIElOQ19TVEFUUygiRE9NQXBwbGljYXRpb25DYWNoZS5vbmV2ZW50X2dldHRlciIp
OwotICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGNhY2hlID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NQXBwbGljYXRpb25DYWNoZT4oVjhDbGFzc0luZGV4OjpET01B
UFBMSUNBVElPTkNBQ0hFLCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAoRXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIgPSBhcHBjYWNoZS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0b0V2ZW50SUQo
bmFtZSkpKQotICAgICAgICByZXR1cm4gZXZlbnRMaXN0ZW5lclRvVjhPYmplY3QobGlzdGVuZXIp
OwotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQotCi0vLyBIYW5kbGVzIGFwcGNhY2hlLm9uZm9v
ZXZlbnQgYXR0cmlidXRlIHNldHRpbmcKLUFDQ0VTU09SX1NFVFRFUihET01BcHBsaWNhdGlvbkNh
Y2hlRXZlbnRIYW5kbGVyKQotewotICAgIElOQ19TVEFUUygiRE9NQXBwbGljYXRpb25DYWNoZS5v
bmV2ZW50X3NldHRlciIpOwotICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGNhY2hlID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NQXBwbGljYXRpb25DYWNoZT4oVjhD
bGFzc0luZGV4OjpET01BUFBMSUNBVElPTkNBQ0hFLCBpbmZvLkhvbGRlcigpKTsKLSAgICBTdHJp
bmcgZXZlbnRUeXBlID0gdG9FdmVudElEKG5hbWUpOwotCi0gICAgaWYgKEV2ZW50TGlzdGVuZXIq
IG9sZExpc3RlbmVyID0gYXBwY2FjaGUtPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRU
eXBlKSkgewotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0ID0gZXZlbnRMaXN0
ZW5lclRvVjhPYmplY3Qob2xkTGlzdGVuZXIpOwotICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRl
bmN5KGluZm8uSG9sZGVyKCksIG9iamVjdCwgVjhDdXN0b206OmtET01BcHBsaWNhdGlvbkNhY2hl
Q2FjaGVJbmRleCk7Ci0gICAgICAgIGFwcGNhY2hlLT5jbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoZXZlbnRUeXBlKTsKLSAgICB9Ci0KLSAgICBpZiAodmFsdWUtPklzRnVuY3Rpb24oKSkgewot
ICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbmV3TGlzdGVuZXIgPSBhcmd1bWVudFRvRXZl
bnRMaXN0ZW5lcihhcHBjYWNoZSwgdmFsdWUsIGtGaW5kT3JDcmVhdGUpOwotICAgICAgICBpZiAo
bmV3TGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5I
b2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprRE9NQXBwbGljYXRpb25DYWNoZUNhY2hlSW5kZXgp
OwotICAgICAgICAgICAgYXBwY2FjaGUtPnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRU
eXBlLCBuZXdMaXN0ZW5lcik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIC8vIEhhbmRsZXMgYXBw
Y2FjaGUuYWRkRXZlbnRMaXN0bmVyKG5hbWUsIGZ1bmMsIGNhcHR1cmUpIG1ldGhvZCBjYWxscwog
Q0FMTEJBQ0tfRlVOQ19ERUNMKERPTUFwcGxpY2F0aW9uQ2FjaGVBZGRFdmVudExpc3RlbmVyKQog
ewogICAgIElOQ19TVEFUUygiRE9NQXBwbGljYXRpb25DYWNoZS5hZGRFdmVudExpc3RlbmVyKCki
KTsKICAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBjYWNoZSA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PERPTUFwcGxpY2F0aW9uQ2FjaGU+KFY4Q2xhc3NJbmRleDo6RE9N
QVBQTElDQVRJT05DQUNIRSwgYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIgPSBhcmd1bWVudFRvRXZlbnRMaXN0ZW5lcihhcHBjYWNoZSwgYXJnc1sx
XSwga0ZpbmRPckNyZWF0ZSk7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0g
VjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKGFwcGNhY2hlLCBhcmdzWzFdLCBmYWxzZSwg
ZmFsc2UpOwogICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRl
bmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjprRE9NQXBwbGljYXRpb25DYWNo
ZUNhY2hlSW5kZXgpOwogICAgICAgICBTdHJpbmcgZXZlbnRUeXBlID0gdG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMF0pOwpAQCAtMTIyLDcgKzY1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTUFwcGxp
Y2F0aW9uQ2FjaGVSZW1vdmVFdmVudExpc3RlbmVyKQogICAgIElOQ19TVEFUUygiRE9NQXBwbGlj
YXRpb25DYWNoZS5yZW1vdmVFdmVudExpc3RlbmVyKCkiKTsKICAgICBET01BcHBsaWNhdGlvbkNh
Y2hlKiBhcHBjYWNoZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTUFw
cGxpY2F0aW9uQ2FjaGU+KFY4Q2xhc3NJbmRleDo6RE9NQVBQTElDQVRJT05DQUNIRSwgYXJncy5I
b2xkZXIoKSk7CiAKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBhcmd1bWVu
dFRvRXZlbnRMaXN0ZW5lcihhcHBjYWNoZSwgYXJnc1sxXSwga0ZpbmRPbmx5KTsKKyAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVu
ZXIoYXBwY2FjaGUsIGFyZ3NbMV0sIGZhbHNlLCB0cnVlKTsKICAgICBpZiAobGlzdGVuZXIpIHsK
ICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBW
OEN1c3RvbTo6a0RPTUFwcGxpY2F0aW9uQ2FjaGVDYWNoZUluZGV4KTsKICAgICAgICAgU3RyaW5n
IGV2ZW50VHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCBmZjQ1ZDZlLi41M2Rk
MWJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1
c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0
b20uY3BwCkBAIC0yNTIsMTAgKzI1MiwxMiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93
QWRkRXZlbnRMaXN0ZW5lcikKICAgICBpZiAoIXByb3h5KQogICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwogCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHkt
PmV2ZW50TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihw
cm94eS0+ZnJhbWUoKSwgYXJnc1sxXSwgZmFsc2UpOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVy
PiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihwcm94eSwgYXJnc1sx
XSwgZmFsc2UsIGZhbHNlKTsKIAotICAgIGlmIChsaXN0ZW5lcikKKyAgICBpZiAobGlzdGVuZXIp
IHsKICAgICAgICAgaW1wLT5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVz
ZUNhcHR1cmUpOworICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCks
IGFyZ3NbMV0sIFY4Q3VzdG9tOjprRE9NV2luZG93RXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgpOwor
ICAgIH0KIAogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CkBAIC0yODIsMTAgKzI4NCwx
MiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93UmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAg
ICBpZiAoIXByb3h5KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPmV2ZW50TGlzdGVuZXJzKCktPmZp
bmRXcmFwcGVyKGFyZ3NbMV0sIGZhbHNlKTsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlz
dGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIocHJveHksIGFyZ3NbMV0sIGZh
bHNlLCB0cnVlKTsKIAotICAgIGlmIChsaXN0ZW5lcikKKyAgICBpZiAobGlzdGVuZXIpIHsKICAg
ICAgICAgaW1wLT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIuZ2V0KCks
IHVzZUNhcHR1cmUpOworICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVy
KCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjprRE9NV2luZG93RXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgp
OworICAgIH0KIAogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CkBAIC0zNzcsODIgKzM4
MSw2IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dOT1ApCiAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKIH0KIAotc3RhdGljIFN0cmluZyBldmVudE5hbWVGcm9tQXR0cmlidXRlTmFt
ZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKG5hbWUuc3RhcnRzV2l0aCgib24i
KSk7Ci0gICAgU3RyaW5nIGV2ZW50VHlwZSA9IG5hbWUuc3Vic3RyaW5nKDIpOwotCi0gICAgaWYg
KGV2ZW50VHlwZS5zdGFydHNXaXRoKCJ3IikpIHsKLSAgICAgICAgc3dpdGNoKGV2ZW50VHlwZVtl
dmVudFR5cGUubGVuZ3RoKCkgLSAxXSkgewotICAgICAgICBjYXNlICd0JzoKLSAgICAgICAgICAg
IGV2ZW50VHlwZSA9ICJ3ZWJraXRBbmltYXRpb25TdGFydCI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSAnbic6Ci0gICAgICAgICAgICBldmVudFR5cGUgPSAid2Via2l0QW5pbWF0
aW9uSXRlcmF0aW9uIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdkJzoKLSAg
ICAgICAgICAgIEFTU0VSVChldmVudFR5cGUubGVuZ3RoKCkgPiA3KTsKLSAgICAgICAgICAgIGlm
IChldmVudFR5cGVbN10gPT0gJ2EnKQotICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9ICJ3ZWJr
aXRBbmltYXRpb25FbmQiOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGV2ZW50
VHlwZSA9ICJ3ZWJraXRUcmFuc2l0aW9uRW5kIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGV2ZW50VHlwZTsKLX0KLQotQUNDRVNTT1JfU0VUVEVS
KERPTVdpbmRvd0V2ZW50SGFuZGxlcikKLXsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhv
bGRlciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJ
TkRPVywgaW5mby5UaGlzKCkpOwotICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvbGRlcik7Ci0K
LSAgICBEb2N1bWVudCogZG9jID0gaW1wLT5kb2N1bWVudCgpOwotCi0gICAgaWYgKCFkb2MpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmcobmFtZSk7
Ci0gICAgU3RyaW5nIGV2ZW50VHlwZSA9IGV2ZW50TmFtZUZyb21BdHRyaWJ1dGVOYW1lKGtleSk7
Ci0KLSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIC8vIENsZWFyIHRoZSBldmVu
dCBsaXN0ZW5lcgotICAgICAgICBpbXAtPmNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dFR5cGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6
cmV0cmlldmUoaW1wLT5mcmFtZSgpKTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94
eS0+ZXZlbnRMaXN0ZW5lcnMoKS0+ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+
KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikKLSAg
ICAgICAgICAgIGltcC0+c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3Rl
bmVyKTsKLSAgICB9Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihET01XaW5kb3dFdmVudEhhbmRsZXIp
Ci17Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOERPTVdyYXBwZXI6Omxv
b2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGluZm8uVGhpcygpKTsKLSAg
ICBpZiAoaG9sZGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
LQotICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKTsKLQotICAgIERv
Y3VtZW50KiBkb2MgPSBpbXAtPmRvY3VtZW50KCk7Ci0KLSAgICBpZiAoIWRvYykKLSAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIFN0cmluZyBrZXkgPSB0b1dlYkNvcmVTdHJp
bmcobmFtZSk7Ci0gICAgU3RyaW5nIGV2ZW50VHlwZSA9IGV2ZW50TmFtZUZyb21BdHRyaWJ1dGVO
YW1lKGtleSk7Ci0KLSAgICBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGltcC0+Z2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNv
bnZlcnRFdmVudExpc3RlbmVyVG9WOE9iamVjdChsaXN0ZW5lcik7Ci19Ci0KIHN0YXRpYyBib29s
IGNhblNob3dNb2RhbERpYWxvZ05vdyhjb25zdCBGcmFtZSogZnJhbWUpCiB7CiAgICAgLy8gQSBm
cmFtZSBjYW4gb3V0IGxpdmUgaXRzIHBhZ2UuIFNlZSBidWcgMTIxOTYxMy4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3Rv
bS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNvbnRl
eHRDdXN0b20uY3BwCmluZGV4IDc3ZTJmYTQuLjU2Nzk0YWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcApAQCAtNDIsNDUgKzQyLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1BQ0NF
U1NPUl9HRVRURVIoRGVkaWNhdGVkV29ya2VyQ29udGV4dE9ubWVzc2FnZSkKLXsKLSAgICBJTkNf
U1RBVFMoTCJET00uRGVkaWNhdGVkV29ya2VyQ29udGV4dC5vbm1lc3NhZ2UuX2dldCIpOwotICAg
IERlZGljYXRlZFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxEZWRpY2F0ZWRXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6
OkRFRElDQVRFRFdPUktFUkNPTlRFWFQsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh3b3JrZXJD
b250ZXh0LT5vbm1lc3NhZ2UoKSkgewotICAgICAgICBWOFdvcmtlckNvbnRleHRFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIq
Pih3b3JrZXJDb250ZXh0LT5vbm1lc3NhZ2UoKSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAg
IHJldHVybiB2OExpc3RlbmVyOwotICAgIH0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwot
fQotCi1BQ0NFU1NPUl9TRVRURVIoRGVkaWNhdGVkV29ya2VyQ29udGV4dE9ubWVzc2FnZSkKLXsK
LSAgICBJTkNfU1RBVFMoTCJET00uRGVkaWNhdGVkV29ya2VyQ29udGV4dC5vbm1lc3NhZ2UuX3Nl
dCIpOwotICAgIERlZGljYXRlZFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxEZWRpY2F0ZWRXb3JrZXJDb250ZXh0PihWOENs
YXNzSW5kZXg6OkRFRElDQVRFRFdPUktFUkNPTlRFWFQsIGluZm8uSG9sZGVyKCkpOwotICAgIFY4
V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIqIG9sZExpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhX
b3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcio+KHdvcmtlckNvbnRleHQtPm9ubWVzc2FnZSgpKTsK
LSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlmICh3b3JrZXJDb250ZXh0LT5v
bm1lc3NhZ2UoKSkgewotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9sZFY4TGlz
dGVuZXIgPSBvbGRMaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgIHJl
bW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgb2xkVjhMaXN0ZW5lciwgVjhDdXN0
b206OmtEZWRpY2F0ZWRXb3JrZXJDb250ZXh0UmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgotICAgICAgICB3b3JrZXJDb250ZXh0
LT5zZXRPbm1lc3NhZ2UoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPFY4RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIgPSB3b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+cHJveHkoKS0+Zmlu
ZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QodmFsdWUp
LCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGlm
IChvbGRMaXN0ZW5lcikgewotICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBv
bGRWOExpc3RlbmVyID0gb2xkTGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAg
ICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvbGRWOExpc3Rl
bmVyLCBWOEN1c3RvbTo6a0RlZGljYXRlZFdvcmtlckNvbnRleHRSZXF1ZXN0Q2FjaGVJbmRleCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdvcmtlckNvbnRleHQtPnNldE9ubWVzc2Fn
ZShsaXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9s
ZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a0RlZGljYXRlZFdvcmtlckNvbnRleHRSZXF1ZXN0Q2Fj
aGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIENBTExCQUNLX0ZVTkNfREVDTChEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0UG9zdE1lc3NhZ2UpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLkRl
ZGljYXRlZFdvcmtlckNvbnRleHQucG9zdE1lc3NhZ2UiKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5jcHAKaW5kZXggMDYxNmNjOC4uNjkz
MzY1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9y
dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9y
dEN1c3RvbS5jcHAKQEAgLTM2LDY0ICszNiwyMiBAQAogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGlu
Zy5oIgogI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJWOE1lc3Nh
Z2VQb3J0LmgiCi0jaW5jbHVkZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAi
VjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBnZXRFdmVudExpc3RlbmVyKE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9y
dCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgZmluZE9ubHksIGJvb2wgY3JlYXRl
T2JqZWN0RXZlbnRMaXN0ZW5lcikKK3N0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGdl
dEV2ZW50TGlzdGVuZXIoTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0LCB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2YWx1ZSwgYm9vbCBmaW5kT25seSkKIHsKLSAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJv
eHk6OnJldHJpZXZlKG1lc3NhZ2VQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAg
IGlmIChwcm94eSkgewotICAgICAgICBWOEV2ZW50TGlzdGVuZXJMaXN0KiBsaXN0ID0gcHJveHkt
Pm9iamVjdExpc3RlbmVycygpOwotICAgICAgICByZXR1cm4gZmluZE9ubHkgPyBsaXN0LT5maW5k
V3JhcHBlcih2YWx1ZSwgZmFsc2UpIDogbGlzdC0+ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOE9iamVj
dEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwgZmFsc2UpOwotICAgIH0KLQot
I2lmIEVOQUJMRShXT1JLRVJTKQotICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogd29y
a2VyQ29udGV4dFByb3h5ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgp
OwotICAgIGlmICh3b3JrZXJDb250ZXh0UHJveHkpCi0gICAgICAgIHJldHVybiB3b3JrZXJDb250
ZXh0UHJveHktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXJIZWxwZXIodmFsdWUsIGZhbHNlLCBm
aW5kT25seSwgY3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcik7Ci0jZW5kaWYKLQotICAgIHJldHVy
biBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KCk7Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihNZXNz
YWdlUG9ydE9ubWVzc2FnZSkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5NZXNzYWdlUG9ydC5vbm1l
c3NhZ2UuX2dldCIpOwotICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NB
R0VQT1JULCBpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0
RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QobWVzc2FnZVBvcnQtPm9ubWVzc2FnZSgpKTsKLX0KLQot
QUNDRVNTT1JfU0VUVEVSKE1lc3NhZ2VQb3J0T25tZXNzYWdlKQotewotICAgIElOQ19TVEFUUygi
RE9NLk1lc3NhZ2VQb3J0Lm9ubWVzc2FnZS5fc2V0Iik7Ci0gICAgTWVzc2FnZVBvcnQqIG1lc3Nh
Z2VQb3J0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+
KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh2YWx1
ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKG1lc3NhZ2VQb3J0LT5vbm1lc3NhZ2UoKSkgewot
ICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0
PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KG1lc3NhZ2VQb3J0LT5vbm1lc3NhZ2UoKSk7Ci0gICAg
ICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIGxpc3RlbmVyLT5n
ZXRMaXN0ZW5lck9iamVjdCgpLCBWOEN1c3RvbTo6a01lc3NhZ2VQb3J0UmVxdWVzdENhY2hlSW5k
ZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgotICAgICAg
ICBtZXNzYWdlUG9ydC0+c2V0T25tZXNzYWdlKDApOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcihtZXNzYWdl
UG9ydCwgdmFsdWUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAg
ICAgICAgICAgbWVzc2FnZVBvcnQtPnNldE9ubWVzc2FnZShsaXN0ZW5lcik7Ci0gICAgICAgICAg
ICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6
a01lc3NhZ2VQb3J0UmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgfQorICAgIHJl
dHVybiBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIobWVzc2FnZVBvcnQsIHZhbHVlLCBm
YWxzZSwgZmluZE9ubHkpOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0woTWVzc2FnZVBvcnRBZGRF
dmVudExpc3RlbmVyKQogewogICAgIElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0LmFkZEV2ZW50
TGlzdGVuZXIoKSIpOwogICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NB
R0VQT1JULCBhcmdzLkhvbGRlcigpKTsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIgPSBnZXRFdmVudExpc3RlbmVyKG1lc3NhZ2VQb3J0LCBhcmdzWzFdLCBmYWxzZSwgdHJ1ZSk7
CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lciht
ZXNzYWdlUG9ydCwgYXJnc1sxXSwgZmFsc2UpOwogICAgIGlmIChsaXN0ZW5lcikgewogICAgICAg
ICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICAgICAgYm9vbCB1
c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CkBAIC0xMDgsNyArNjYsNyBAQCBD
QUxMQkFDS19GVU5DX0RFQ0woTWVzc2FnZVBvcnRSZW1vdmVFdmVudExpc3RlbmVyKQogewogICAg
IElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwogICAg
IE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBhcmdzLkhvbGRl
cigpKTsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3Rl
bmVyKG1lc3NhZ2VQb3J0LCBhcmdzWzFdLCB0cnVlLCB0cnVlKTsKKyAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKG1lc3NhZ2VQb3J0LCBhcmdzWzFd
LCB0cnVlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dl
YkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0t
PkJvb2xlYW5WYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhOb2RlQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3Rv
bS5jcHAKaW5kZXggNjFhYjg2Ny4uYTM0NTBlMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOE5vZGVDdXN0b20uY3BwCkBAIC0zOSwyMCArMzksMTIgQEAKICNpbmNsdWRlICJWOEN1
c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUV2ZW50TGlzdGVuZXIuaCIKICNpbmNs
dWRlICJWOE5vZGUuaCIKLSNpbmNsdWRlICJWOE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNs
dWRlICJWOFByb3h5LmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBTdHJpbmcgdG9FdmVudFR5cGUodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IHZhbHVlKQotewotICAgIFN0cmluZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmcodmFs
dWUpOwotICAgIEFTU0VSVChrZXkuc3RhcnRzV2l0aCgib24iKSk7Ci0gICAgcmV0dXJuIGtleS5z
dWJzdHJpbmcoMik7Ci19Ci0KIENBTExCQUNLX0ZVTkNfREVDTChOb2RlQWRkRXZlbnRMaXN0ZW5l
cikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoKSIpOwpAQCAt
NzgsNyArNzAsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTm9kZVJlbW92ZUV2ZW50TGlzdGVuZXIp
CiAgICAgLy8gU2VlIGlzc3VlIGh0dHA6Ly9iLzg3ODkwOQogICAgIFJlZlB0cjxFdmVudExpc3Rl
bmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihub2RlLCBhcmdz
WzFdLCBmYWxzZSwgdHJ1ZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgIFN0cmluZyB0
eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgICAgICBBdG9taWNTdHJpbmcgdHlw
ZSA9IHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wg
dXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBub2RlLT5yZW1v
dmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKICAgICAg
ICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3Rv
bTo6a05vZGVFdmVudExpc3RlbmVyQ2FjaGVJbmRleCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAKaW5kZXgg
ZTFkZjA2ZC4uYWQyMzliNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcApAQCAtNTEsMjEgKzUxLDEyIEBA
IENBTExCQUNLX0ZVTkNfREVDTChOb3RpZmljYXRpb25BZGRFdmVudExpc3RlbmVyKQogICAgIElO
Q19TVEFUUygiRE9NLk5vdGlmaWNhdGlvbi5hZGRFdmVudExpc3RlbmVyKCkiKTsKICAgICBOb3Rp
ZmljYXRpb24qIG5vdGlmaWNhdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PE5vdGlmaWNhdGlvbj4oVjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT04sIGFyZ3MuSG9sZGVy
KCkpOwogCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyOwotICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKLSAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCi0gICAgICAgIGxp
c3RlbmVyID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLT5zY3JpcHQoKS0+
cHJveHkoKS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46
OkNhc3QoYXJnc1sxXSksIGZhbHNlLCBmYWxzZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFY4UHJv
eHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoY29udGV4dCk7Ci0gICAgICAgIGlmICghcHJv
eHkpCi0gICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgICAgICBsaXN0ZW5l
ciA9IHByb3h5LT5ldmVudExpc3RlbmVycygpLT5maW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRM
aXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIGFyZ3NbMV0sIHRydWUpOwotICAgIH0KLQorICAgIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0
ZW5lcihub3RpZmljYXRpb24sIGFyZ3NbMV0sIGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKGxpc3Rl
bmVyKSB7CiAgICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwog
ICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKICAgICAg
ICAgbm90aWZpY2F0aW9uLT5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0
dXJlKTsKKyAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdz
WzFdLCBWOEN1c3RvbTo6a05vdGlmaWNhdGlvblJlcXVlc3RDYWNoZUluZGV4KTsKICAgICB9CiAK
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtNzYsNzcgKzY3LDE3IEBAIENBTExCQUNL
X0ZVTkNfREVDTChOb3RpZmljYXRpb25SZW1vdmVFdmVudExpc3RlbmVyKQogICAgIElOQ19TVEFU
UygiRE9NLk5vdGlmaWNhdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCkiKTsKICAgICBOb3RpZmlj
YXRpb24qIG5vdGlmaWNhdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PE5vdGlmaWNhdGlvbj4oVjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT04sIGFyZ3MuSG9sZGVyKCkp
OwogCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyOwotICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQgPSBub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKLSAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCi0gICAgICAgIGxpc3Rl
bmVyID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLT5zY3JpcHQoKS0+cHJv
eHkoKS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNh
c3QoYXJnc1sxXSksIGZhbHNlLCB0cnVlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgVjhQcm94eSog
cHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShjb250ZXh0KTsKLSAgICAgICAgaWYgKCFwcm94eSkK
LSAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgICAgIFJlZlB0cjxFdmVu
dExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5ldmVudExpc3RlbmVycygpLT5maW5kV3JhcHBl
cihhcmdzWzFdLCBmYWxzZSk7Ci0gICAgfQotCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxp
c3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKG5vdGlmaWNhdGlvbiwgYXJn
c1sxXSwgZmFsc2UsIHRydWUpOwogICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgICBTdHJpbmcg
dHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICAgICAgYm9vbCB1c2VDYXB0dXJl
ID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CiAgICAgICAgIG5vdGlmaWNhdGlvbi0+cmVtb3Zl
RXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSk7CisgICAgICAg
IHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206
OmtOb3RpZmljYXRpb25SZXF1ZXN0Q2FjaGVJbmRleCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKIH0KIAotQUNDRVNTT1JfU0VUVEVSKE5vdGlmaWNhdGlvbkV2ZW50SGFu
ZGxlcikKLXsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4RE9NV3JhcHBl
cjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTiwgaW5mby5UaGlz
KCkpOwotICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBO
b3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PE5vdGlmaWNhdGlvbj4oVjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT04sIGhvbGRlcik7
Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IG5vdGlmaWNhdGlvbi0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwotCi0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5nKG5hbWUpOwotICAgIEFTU0VS
VChrZXkuc3RhcnRzV2l0aCgib24iKSk7Ci0gICAgU3RyaW5nIGV2ZW50VHlwZSA9IGtleS5zdWJz
dHJpbmcoMik7Ci0KLSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIC8vIENsZWFy
IHRoZSBldmVudCBsaXN0ZW5lcgotICAgICAgICBub3RpZmljYXRpb24tPmNsZWFyQXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihldmVudFR5cGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxF
dmVudExpc3RlbmVyPiBsaXN0ZW5lcjsKLSAgICAgICAgaWYgKGNvbnRleHQtPmlzV29ya2VyQ29u
dGV4dCgpKQotICAgICAgICAgICAgbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0
Kj4oY29udGV4dCktPnNjcmlwdCgpLT5wcm94eSgpLT5maW5kT3JDcmVhdGVFdmVudExpc3RlbmVy
KHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSksIGZhbHNlLCBmYWxzZSk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2
ZShjb250ZXh0KTsKLSAgICAgICAgICAgIGlmICghcHJveHkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgbGlzdGVuZXIgPSBwcm94eS0+ZXZlbnRMaXN0ZW5lcnMoKS0+Zmlu
ZE9yQ3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwg
dHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGlzdGVuZXIpCi0gICAgICAgICAgICBu
b3RpZmljYXRpb24tPnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5l
cik7Ci0gICAgfQotfQotCi1BQ0NFU1NPUl9HRVRURVIoTm90aWZpY2F0aW9uRXZlbnRIYW5kbGVy
KQotewotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhET01XcmFwcGVyOjps
b29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbmZvLlRoaXMoKSk7Ci0g
ICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
Ci0KLSAgICBOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PE5vdGlmaWNhdGlvbj4oVjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT04s
IGhvbGRlcik7Ci0KLSAgICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5nKG5hbWUpOwotICAg
IEFTU0VSVChrZXkuc3RhcnRzV2l0aCgib24iKSk7Ci0gICAgU3RyaW5nIGV2ZW50VHlwZSA9IGtl
eS5zdWJzdHJpbmcoMik7Ci0KLSAgICBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IG5vdGlmaWNh
dGlvbi0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUpOwotICAgIHJldHVybiBW
OERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudExpc3RlbmVyVG9WOE9iamVjdChsaXN0ZW5lcik7Ci19
Ci0KIENBTExCQUNLX0ZVTkNfREVDTChOb3RpZmljYXRpb25DZW50ZXJDcmVhdGVIVE1MTm90aWZp
Y2F0aW9uKQogewogICAgIElOQ19TVEFUUyhMIkRPTS5Ob3RpZmljYXRpb25DZW50ZXIuQ3JlYXRl
SFRNTE5vdGlmaWNhdGlvbigpIik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFNWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAKaW5kZXggY2U5YzM0NS4uOWMx
MzQxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50
SW5zdGFuY2VDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZH
RWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcApAQCAtNDksMTUgKzQ5LDEyIEBAIENBTExCQUNLX0ZV
TkNfREVDTChTVkdFbGVtZW50SW5zdGFuY2VBZGRFdmVudExpc3RlbmVyKQogICAgIElOQ19TVEFU
UygiRE9NLlNWR0VsZW1lbnRJbnN0YW5jZS5BZGRFdmVudExpc3RlbmVyKCkiKTsKICAgICBTVkdF
bGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTmF0aXZlPFNWR0VsZW1lbnRJbnN0YW5jZT4oYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBWOFBy
b3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGluc3RhbmNlLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwotICAgIGlmICghcHJveHkpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Ci0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+ZXZlbnRM
aXN0ZW5lcnMoKS0+ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+KHByb3h5LT5m
cmFtZSgpLCBhcmdzWzFdLCBmYWxzZSk7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKGluc3RhbmNlLCBhcmdzWzFdLCBm
YWxzZSwgZmFsc2UpOwogICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgICBTdHJpbmcgdHlwZSA9
IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJn
c1syXS0+Qm9vbGVhblZhbHVlKCk7CiAgICAgICAgIGluc3RhbmNlLT5hZGRFdmVudExpc3RlbmVy
KHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5k
ZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3RvbTo6a05vZGVFdmVudExpc3RlbmVy
Q2FjaGVJbmRleCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTY4
LDE1ICs2NSwxMiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woU1ZHRWxlbWVudEluc3RhbmNlUmVtb3Zl
RXZlbnRMaXN0ZW5lcikKICAgICBJTkNfU1RBVFMoIkRPTS5TVkdFbGVtZW50SW5zdGFuY2UuUmVt
b3ZlRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxTVkdFbGVtZW50SW5zdGFu
Y2U+KGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRy
aWV2ZShpbnN0YW5jZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAoIXByb3h5
KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyID0gcHJveHktPmV2ZW50TGlzdGVuZXJzKCktPmZpbmRXcmFwcGVyKGFy
Z3NbMV0sIGZhbHNlKTsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERP
TVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoaW5zdGFuY2UsIGFyZ3NbMV0sIGZhbHNlLCB0cnVl
KTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVT
dHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xl
YW5WYWx1ZSgpOwogICAgICAgICBpbnN0YW5jZS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBs
aXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSk7CisgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVu
Y3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206OmtOb2RlRXZlbnRMaXN0ZW5lckNh
Y2hlSW5kZXgpOwogICAgIH0KIAogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAKaW5kZXggYmFm
NmUwZS4uNjBhY2I4NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhX
ZWJTb2NrZXRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
U29ja2V0Q3VzdG9tLmNwcApAQCAtNDQsMTIyICs0NCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihX
ZWJTb2NrZXQqIHdlYlNvY2tldCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgZmlu
ZE9ubHkpCi17Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5KiB3b3JrZXJDb250ZXh0UHJveHkgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OnJldHJpZXZlKCk7Ci0gICAgaWYgKHdvcmtlckNvbnRleHRQcm94eSkKLSAgICAgICAgcmV0dXJu
IHdvcmtlckNvbnRleHRQcm94eS0+ZmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcih2YWx1
ZSwgZmFsc2UsIGZpbmRPbmx5KTsKLSNlbmRpZgotCi0gICAgVjhQcm94eSogcHJveHkgPSBWOFBy
b3h5OjpyZXRyaWV2ZSh3ZWJTb2NrZXQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAg
aWYgKHByb3h5KSB7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QqIGxpc3QgPSBwcm94eS0+
b2JqZWN0TGlzdGVuZXJzKCk7Ci0gICAgICAgIHJldHVybiBmaW5kT25seSA/IGxpc3QtPmZpbmRX
cmFwcGVyKHZhbHVlLCBmYWxzZSkgOiBsaXN0LT5maW5kT3JDcmVhdGVXcmFwcGVyPFY4T2JqZWN0
RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBmYWxzZSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4oKTsKLX0KLQotQUNDRVNTT1JfR0VU
VEVSKFdlYlNvY2tldE9ub3BlbikKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5XZWJTb2NrZXQub25v
cGVuLl9nZXQiKTsKLSAgICBXZWJTb2NrZXQqIHdlYlNvY2tldCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PFdlYlNvY2tldD4oVjhDbGFzc0luZGV4OjpXRUJTT0NLRVQsIGlu
Zm8uSG9sZGVyKCkpOwotICAgIGlmICh3ZWJTb2NrZXQtPm9ub3BlbigpKSB7Ci0gICAgICAgIFY4
T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50
TGlzdGVuZXIqPih3ZWJTb2NrZXQtPm9ub3BlbigpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAg
ICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQot
Ci1BQ0NFU1NPUl9TRVRURVIoV2ViU29ja2V0T25vcGVuKQotewotICAgIElOQ19TVEFUUygiRE9N
LldlYlNvY2tldC5vbm9wZW4uX3NldCIpOwotICAgIFdlYlNvY2tldCogd2ViU29ja2V0ID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViU29ja2V0PihWOENsYXNzSW5kZXg6
OldFQlNPQ0tFVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewot
ICAgICAgICBpZiAod2ViU29ja2V0LT5vbm9wZW4oKSkgewotICAgICAgICAgICAgVjhPYmplY3RF
dmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5l
cio+KHdlYlNvY2tldC0+b25vcGVuKCkpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAg
ICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lciwgVjhD
dXN0b206OmtXZWJTb2NrZXRDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgICAgICAvLyBDbGVh
ciB0aGUgbGlzdGVuZXIuCi0gICAgICAgIHdlYlNvY2tldC0+c2V0T25vcGVuKDApOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50
TGlzdGVuZXIod2ViU29ja2V0LCB2YWx1ZSwgZmFsc2UpOwotICAgICAgICBpZiAobGlzdGVuZXIp
IHsKLSAgICAgICAgICAgIHdlYlNvY2tldC0+c2V0T25vcGVuKGxpc3RlbmVyKTsKLSAgICAgICAg
ICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9t
OjprV2ViU29ja2V0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUFDQ0VTU09S
X0dFVFRFUihXZWJTb2NrZXRPbm1lc3NhZ2UpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uV2ViU29j
a2V0Lm9ubWVzc2FnZS5fZ2V0Iik7Ci0gICAgV2ViU29ja2V0KiB3ZWJTb2NrZXQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJTb2NrZXQ+KFY4Q2xhc3NJbmRleDo6V0VC
U09DS0VULCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAod2ViU29ja2V0LT5vbm1lc3NhZ2UoKSkg
ewotICAgICAgICBSZWZQdHI8VjhPYmplY3RFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHN0YXRp
Y19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHdlYlNvY2tldC0+b25tZXNzYWdlKCkpOwot
ICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRM
aXN0ZW5lck9iamVjdCgpOwotICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAg
cmV0dXJuIHY4OjpOdWxsKCk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihXZWJTb2NrZXRPbm1lc3Nh
Z2UpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uV2ViU29ja2V0Lm9ubWVzc2FnZS5fc2V0Iik7Ci0g
ICAgV2ViU29ja2V0KiB3ZWJTb2NrZXQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxXZWJTb2NrZXQ+KFY4Q2xhc3NJbmRleDo6V0VCU09DS0VULCBpbmZvLkhvbGRlcigpKTsK
LSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlmICh3ZWJTb2NrZXQtPm9ubWVz
c2FnZSgpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0g
c3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4od2ViU29ja2V0LT5vbm1lc3NhZ2Uo
KSk7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3Rl
bmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5k
ZW5jeShpbmZvLkhvbGRlcigpLCB2OExpc3RlbmVyLCBWOEN1c3RvbTo6a1dlYlNvY2tldENhY2hl
SW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAg
ICAgd2ViU29ja2V0LT5zZXRPbm1lc3NhZ2UoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih3ZWJTb2NrZXQs
IHZhbHVlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICAgICAgd2Vi
U29ja2V0LT5zZXRPbm1lc3NhZ2UobGlzdGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlkZGVu
RGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtXZWJTb2NrZXRDYWNo
ZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotQUNDRVNTT1JfR0VUVEVSKFdlYlNvY2tl
dE9uY2xvc2UpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uV2ViU29ja2V0Lm9uY2xvc2UuX2dldCIp
OwotICAgIFdlYlNvY2tldCogd2ViU29ja2V0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8V2ViU29ja2V0PihWOENsYXNzSW5kZXg6OldFQlNPQ0tFVCwgaW5mby5Ib2xkZXIo
KSk7Ci0gICAgaWYgKHdlYlNvY2tldC0+b25jbG9zZSgpKSB7Ci0gICAgICAgIFY4T2JqZWN0RXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIq
Pih3ZWJTb2NrZXQtPm9uY2xvc2UoKSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2
OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgIHJldHVy
biB2OExpc3RlbmVyOwotICAgIH0KLSAgICByZXR1cm4gdjg6Ok51bGwoKTsKLX0KLQotQUNDRVNT
T1JfU0VUVEVSKFdlYlNvY2tldE9uY2xvc2UpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uV2ViU29j
a2V0Lm9uY2xvc2UuX3NldCIpOwotICAgIFdlYlNvY2tldCogd2ViU29ja2V0ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViU29ja2V0PihWOENsYXNzSW5kZXg6OldFQlNP
Q0tFVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAg
ICBpZiAod2ViU29ja2V0LT5vbmNsb3NlKCkpIHsKLSAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih3
ZWJTb2NrZXQtPm9uY2xvc2UoKSk7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4g
djhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAg
cmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2OExpc3RlbmVyLCBWOEN1c3Rv
bTo6a1dlYlNvY2tldENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIENsZWFyIHRo
ZSBsaXN0ZW5lci4KLSAgICAgICAgd2ViU29ja2V0LT5zZXRPbmNsb3NlKDApOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlz
dGVuZXIod2ViU29ja2V0LCB2YWx1ZSwgZmFsc2UpOwotICAgICAgICBpZiAobGlzdGVuZXIpIHsK
LSAgICAgICAgICAgIHdlYlNvY2tldC0+c2V0T25jbG9zZShsaXN0ZW5lcik7Ci0gICAgICAgICAg
ICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6
a1dlYlNvY2tldENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCiAvLyA/Pz8gQWRk
RXZlbnRMaXN0ZW5lciwgUmVtb3ZlRXZlbnRMaXN0ZW5lcgogCiBDQUxMQkFDS19GVU5DX0RFQ0wo
V2ViU29ja2V0Q29uc3RydWN0b3IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAppbmRleCA0OTM0ZjBkLi4xYmJkYmIzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20u
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3Rv
bS5jcHAKQEAgLTUyLDQ1ICs1Miw2IEBAIEFDQ0VTU09SX0dFVFRFUihXb3JrZXJDb250ZXh0U2Vs
ZikKICAgICByZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0V29ya2Vy
Q29udGV4dFRvVjhPYmplY3Qod29ya2VyQ29udGV4dCk7CiB9CiAKLUFDQ0VTU09SX0dFVFRFUihX
b3JrZXJDb250ZXh0T25lcnJvcikKLXsKLSAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyQ29udGV4
dC5vbmVycm9yLl9nZXQiKTsKLSAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFzc0lu
ZGV4OjpXT1JLRVJDT05URVhULCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAod29ya2VyQ29udGV4
dC0+b25lcnJvcigpKSB7Ci0gICAgICAgIFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIqIGxp
c3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcio+KHdvcmtl
ckNvbnRleHQtPm9uZXJyb3IoKSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExp
c3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiB2
OExpc3RlbmVyOwotICAgIH0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi1BQ0NF
U1NPUl9TRVRURVIoV29ya2VyQ29udGV4dE9uZXJyb3IpCi17Ci0gICAgSU5DX1NUQVRTKEwiRE9N
LldvcmtlckNvbnRleHQub25lcnJvci5fc2V0Iik7Ci0gICAgV29ya2VyQ29udGV4dCogd29ya2Vy
Q29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlckNvbnRl
eHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgVjhX
b3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lciogb2xkTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOFdv
cmtlckNvbnRleHRFdmVudExpc3RlbmVyKj4od29ya2VyQ29udGV4dC0+b25lcnJvcigpKTsKLSAg
ICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlmICh3b3JrZXJDb250ZXh0LT5vbmVy
cm9yKCkpIHsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvbGRWOExpc3RlbmVy
ID0gb2xkTGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAgICByZW1vdmVI
aWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9sZFY4TGlzdGVuZXIsIFY4Q3VzdG9tOjpr
V29ya2VyQ29udGV4dFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgd29ya2VyQ29udGV4dC0+c2V0T25lcnJvcigw
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBsaXN0ZW5l
ciA9IHdvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5wcm94eSgpLT5maW5kT3JDcmVhdGVFdmVudExp
c3RlbmVyKHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSksIHRydWUsIGZhbHNlKTsK
LSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICBpZiAob2xkTGlzdGVuZXIpIHsK
LSAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2xkVjhMaXN0ZW5lciA9IG9s
ZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAgICAgIHJlbW92ZUhp
ZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgb2xkVjhMaXN0ZW5lciwgVjhDdXN0b206OmtX
b3JrZXJDb250ZXh0UmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB3b3JrZXJDb250ZXh0LT5zZXRPbmVycm9yKGxpc3RlbmVyKTsKLSAgICAgICAgICAgIGNy
ZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprV29y
a2VyQ29udGV4dFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFNldFRpbWVvdXRPckludGVydmFsKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MsIGJvb2wgc2luZ2xlU2hvdCkKIHsKICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJD
b250ZXh0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdvcmtlckNv
bnRleHQ+KGFyZ3MuSG9sZGVyKCkpOwpAQCAtMTcxLDggKzEzMiw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChXb3JrZXJDb250ZXh0QWRkRXZlbnRMaXN0ZW5lcikKICAgICBJTkNfU1RBVFMoTCJET00u
V29ya2VyQ29udGV4dC5hZGRFdmVudExpc3RlbmVyKCkiKTsKICAgICBXb3JrZXJDb250ZXh0KiB3
b3JrZXJDb250ZXh0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdv
cmtlckNvbnRleHQ+KGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgUmVmUHRyPFY4RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIgPSB3b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+cHJveHkoKS0+ZmluZE9yQ3Jl
YXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSksIGZh
bHNlLCBmYWxzZSk7Ci0KKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERP
TVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIod29ya2VyQ29udGV4dCwgYXJnc1sxXSwgZmFsc2Us
IGZhbHNlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dl
YkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0t
PkJvb2xlYW5WYWx1ZSgpOwpAQCAtMTg3LDEwICsxNDcsOCBAQCBDQUxMQkFDS19GVU5DX0RFQ0wo
V29ya2VyQ29udGV4dFJlbW92ZUV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9N
LldvcmtlckNvbnRleHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgV29ya2VyQ29udGV4
dCogd29ya2VyQ29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2
ZTxXb3JrZXJDb250ZXh0PihhcmdzLkhvbGRlcigpKTsKLSAgICBXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHkqIHByb3h5ID0gd29ya2VyQ29udGV4dC0+c2NyaXB0KCktPnByb3h5KCk7Ci0KLSAg
ICBSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5maW5kT3JDcmVhdGVF
dmVudExpc3RlbmVyKHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzFdKSwgZmFsc2Us
IHRydWUpOwogCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFw
cGVyOjpnZXRFdmVudExpc3RlbmVyKHdvcmtlckNvbnRleHQsIGFyZ3NbMV0sIGZhbHNlLCB0cnVl
KTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVT
dHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xl
YW5WYWx1ZSgpOwpAQCAtMTk4LDcgKzE1Niw2IEBAIENBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJD
b250ZXh0UmVtb3ZlRXZlbnRMaXN0ZW5lcikKIAogICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRl
bmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjprV29ya2VyQ29udGV4dFJlcXVl
c3RDYWNoZUluZGV4KTsKICAgICB9Ci0KICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKaW5kZXgg
MWNlY2RlMC4uMzUyYzdhNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhXb3JrZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29y
a2VyQ3VzdG9tLmNwcApAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgog
I2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnRDdXN0
b20uaCIKLSNpbmNsdWRlICJWOE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOFBy
b3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0
LmgiCkBAIC04Nyw2MiArODYsNiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29uc3RydWN0
b3IpCiAgICAgcmV0dXJuIHdyYXBwZXJPYmplY3Q7CiB9CiAKLVBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihXb3JrZXIqIHdvcmtlciwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIGJvb2wgZmluZE9ubHkpCi17Ci0gICAgaWYgKHdv
cmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1dvcmtlckNvbnRleHQoKSkgewotICAg
ICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHdvcmtlckNvbnRleHRQcm94eSA9IFdv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsKLSAgICAgICAgQVNTRVJUKHdv
cmtlckNvbnRleHRQcm94eSk7Ci0gICAgICAgIHJldHVybiB3b3JrZXJDb250ZXh0UHJveHktPmZp
bmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGlzQXR0cmlidXRlLCBmaW5kT25s
eSk7Ci0gICAgfQotCi0gICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh3b3Jr
ZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKHByb3h5KSB7Ci0gICAgICAg
IFY4RXZlbnRMaXN0ZW5lckxpc3QqIGxpc3QgPSBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCk7Ci0g
ICAgICAgIHJldHVybiBmaW5kT25seSA/IGxpc3QtPmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJp
YnV0ZSkgOiBsaXN0LT5maW5kT3JDcmVhdGVXcmFwcGVyPFY4T2JqZWN0RXZlbnRMaXN0ZW5lcj4o
cHJveHktPmZyYW1lKCksIHZhbHVlLCBpc0F0dHJpYnV0ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihXb3JrZXJPbm1lc3NhZ2UpCi17Ci0gICAgSU5DX1NU
QVRTKEwiRE9NLldvcmtlci5vbm1lc3NhZ2UuX2dldCIpOwotICAgIFdvcmtlciogd29ya2VyID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6
OldPUktFUiwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHdvcmtlci0+b25tZXNzYWdlKCkpIHsK
LSAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4
T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHdvcmtlci0+b25tZXNzYWdlKCkpOwotICAgICAgICB2ODo6
TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVj
dCgpOwotICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVSKFdvcmtlck9ubWVzc2FnZSkKLXsKLSAg
ICBJTkNfU1RBVFMoTCJET00uV29ya2VyLm9ubWVzc2FnZS5fc2V0Iik7Ci0gICAgV29ya2VyKiB3
b3JrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXI+KFY4Q2xh
c3NJbmRleDo6V09SS0VSLCBpbmZvLkhvbGRlcigpKTsKLSAgICBWOE9iamVjdEV2ZW50TGlzdGVu
ZXIqIG9sZExpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4od29y
a2VyLT5vbm1lc3NhZ2UoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAgICBp
ZiAob2xkTGlzdGVuZXIpIHsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvbGRW
OExpc3RlbmVyID0gb2xkTGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAg
ICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9sZFY4TGlzdGVuZXIsIFY4
Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gQ2xlYXIgdGhlIGxpc3RlbmVyLgotICAgICAgICB3b3JrZXItPnNldE9ubWVzc2FnZSgwKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBn
ZXRFdmVudExpc3RlbmVyKHdvcmtlciwgdmFsdWUsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgaWYg
KGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICBpZiAob2xkTGlzdGVuZXIpIHsKLSAgICAgICAgICAg
ICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2xkVjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5n
ZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVu
Y3koaW5mby5Ib2xkZXIoKSwgb2xkVjhMaXN0ZW5lciwgVjhDdXN0b206OmtXb3JrZXJSZXF1ZXN0
Q2FjaGVJbmRleCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdvcmtlci0+c2V0T25t
ZXNzYWdlKGxpc3RlbmVyKTsKLSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5m
by5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCiBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyUG9zdE1lc3Nh
Z2UpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uV29ya2VyLnBvc3RNZXNzYWdlIik7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0
b3IuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0
cnVjdG9yLmNwcAppbmRleCA2MmU5MjNmLi5hZjY0N2NkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAK
QEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlY4QmluZGlu
Zy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgotI2luY2x1ZGUgIlY4T2JqZWN0RXZl
bnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGll
cy5oIgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCmluZGV4IDhmMjM2NmIu
Ljc0YTZhYTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0
cFJlcXVlc3RDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1M
SHR0cFJlcXVlc3RDdXN0b20uY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiVjhEb2N1
bWVudC5oIgogI2luY2x1ZGUgIlY4RmlsZS5oIgogI2luY2x1ZGUgIlY4SFRNTERvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5o
IgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgpA
QCAtNDUsMjI3ICs0NCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihYTUxIdHRwUmVxdWVzdCogeG1s
SHR0cFJlcXVlc3QsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGZpbmRPbmx5KQot
ewotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSog
d29ya2VyQ29udGV4dFByb3h5ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2
ZSgpOwotICAgIGlmICh3b3JrZXJDb250ZXh0UHJveHkpCi0gICAgICAgIHJldHVybiB3b3JrZXJD
b250ZXh0UHJveHktPmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNl
LCBmaW5kT25seSk7Ci0jZW5kaWYKLQotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0
cmlldmUoeG1sSHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYg
KHByb3h5KSB7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QqIGxpc3QgPSBwcm94eS0+b2Jq
ZWN0TGlzdGVuZXJzKCk7Ci0gICAgICAgIHJldHVybiBmaW5kT25seSA/IGxpc3QtPmZpbmRXcmFw
cGVyKHZhbHVlLCBmYWxzZSkgOiBsaXN0LT5maW5kT3JDcmVhdGVXcmFwcGVyPFY4T2JqZWN0RXZl
bnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4oKTsKLX0KLQotQUNDRVNTT1JfR0VUVEVS
KFhNTEh0dHBSZXF1ZXN0T25hYm9ydCkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVx
dWVzdC5vbmFib3J0Ll9nZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3Qg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhD
bGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHhtbEh0
dHBSZXF1ZXN0LT5vbmFib3J0KCkpIHsKLSAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBs
aXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1
ZXN0LT5vbmFib3J0KCkpOwotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5l
ciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICByZXR1cm4gdjhMaXN0
ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRF
UihYTUxIdHRwUmVxdWVzdE9uYWJvcnQpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJl
cXVlc3Qub25hYm9ydC5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4
Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh2YWx1
ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbmFib3J0KCkpIHsK
LSAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2Fz
dDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdC0+b25hYm9ydCgpKTsKLSAg
ICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdl
dExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGlu
Zm8uSG9sZGVyKCksIHY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUlu
ZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAg
ICAgeG1sSHR0cFJlcXVlc3QtPnNldE9uYWJvcnQoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRw
UmVxdWVzdCwgdmFsdWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAg
ICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25hYm9ydChsaXN0ZW5lcik7Ci0gICAgICAgICAgICBj
cmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a1hN
TEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUFDQ0VTU09S
X0dFVFRFUihYTUxIdHRwUmVxdWVzdE9uZXJyb3IpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1M
SHR0cFJlcXVlc3Qub25lcnJvci5fZ2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBS
ZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVl
c3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwotICAgIGlm
ICh4bWxIdHRwUmVxdWVzdC0+b25lcnJvcigpKSB7Ci0gICAgICAgIFJlZlB0cjxWOE9iamVjdEV2
ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVy
Kj4oeG1sSHR0cFJlcXVlc3QtPm9uZXJyb3IoKSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAg
IHJldHVybiB2OExpc3RlbmVyOwotICAgIH0KLSAgICByZXR1cm4gdjg6Ok51bGwoKTsKLX0KLQot
QUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25lcnJvcikKLXsKLSAgICBJTkNfU1RBVFMo
IkRPTS5YTUxIdHRwUmVxdWVzdC5vbmVycm9yLl9zZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdCog
eG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxI
dHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7
Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3Qt
Pm9uZXJyb3IoKSkgewotICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5l
ciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5v
bmVycm9yKCkpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIg
PSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgIHJlbW92ZUhpZGRl
bkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lciwgVjhDdXN0b206OmtYTUxIdHRw
UmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxp
c3RlbmVyLgotICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25lcnJvcigwKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExp
c3RlbmVyKHhtbEh0dHBSZXF1ZXN0LCB2YWx1ZSwgZmFsc2UpOwotICAgICAgICBpZiAobGlzdGVu
ZXIpIHsKLSAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbmVycm9yKGxpc3RlbmVyKTsK
LSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUs
IFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25sb2FkKQotewotICAgIElOQ19T
VEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0Lm9ubG9hZC5fZ2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVl
c3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVy
KCkpOwotICAgIGlmICh4bWxIdHRwUmVxdWVzdC0+b25sb2FkKCkpIHsKLSAgICAgICAgVjhPYmpl
Y3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0
ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbmxvYWQoKSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAg
ICAgIHJldHVybiB2OExpc3RlbmVyOwotICAgIH0KLSAgICByZXR1cm4gdjg6Ok51bGwoKTsKLX0K
LQotQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25sb2FkKQotewotICAgIElOQ19TVEFU
UygiRE9NLlhNTEh0dHBSZXF1ZXN0Lm9ubG9hZC5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3Qq
IHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1M
SHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkp
OwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0
LT5vbmxvYWQoKSkgewotICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5l
ciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5v
bmxvYWQoKSk7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9
IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVu
RGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2OExpc3RlbmVyLCBWOEN1c3RvbTo6a1hNTEh0dHBS
ZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICB4bWxIdHRwUmVxdWVzdC0+
c2V0T25sb2FkKDApOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgdmFsdWUsIGZh
bHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB4bWxIdHRwUmVxdWVz
dC0+c2V0T25sb2FkKGxpc3RlbmVyLmdldCgpKTsKLSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRl
cGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RD
YWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotQUNDRVNTT1JfR0VUVEVSKFhNTEh0
dHBSZXF1ZXN0T25sb2Fkc3RhcnQpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVl
c3Qub25sb2Fkc3RhcnQuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVz
dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihW
OENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAoeG1s
SHR0cFJlcXVlc3QtPm9ubG9hZHN0YXJ0KCkpIHsKLSAgICAgICAgVjhPYmplY3RFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0
dHBSZXF1ZXN0LT5vbmxvYWRzdGFydCgpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0
dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQotCi1BQ0NF
U1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RPbmxvYWRzdGFydCkKLXsKLSAgICBJTkNfU1RBVFMo
IkRPTS5YTUxIdHRwUmVxdWVzdC5vbmxvYWRzdGFydC5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVl
c3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVy
KCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHhtbEh0dHBSZXF1
ZXN0LT5vbmxvYWRzdGFydCgpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIq
IGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJl
cXVlc3QtPm9ubG9hZHN0YXJ0KCkpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAg
IHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lciwgVjhDdXN0
b206OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
Q2xlYXIgdGhlIGxpc3RlbmVyLgotICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25sb2Fkc3Rh
cnQoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgdmFsdWUsIGZhbHNlKTsKLSAg
ICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25s
b2Fkc3RhcnQobGlzdGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShp
bmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1BQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RP
bnByb2dyZXNzKQotewotICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0Lm9ucHJvZ3Jl
c3MuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6
OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAoeG1sSHR0cFJlcXVlc3Qt
Pm9ucHJvZ3Jlc3MoKSkgewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVy
ID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3QtPm9u
cHJvZ3Jlc3MoKSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0g
bGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiB2OExpc3RlbmVy
OwotICAgIH0KLSAgICByZXR1cm4gdjg6Ok51bGwoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVSKFhN
TEh0dHBSZXF1ZXN0T25wcm9ncmVzcykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVx
dWVzdC5vbnByb2dyZXNzLl9zZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVl
c3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4o
VjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHZh
bHVlLT5Jc051bGwoKSkgewotICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3QtPm9ucHJvZ3Jlc3Mo
KSkgewotICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRp
Y19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbnByb2dyZXNz
KCkpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0
ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVu
ZGVuY3koaW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lciwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVz
dENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVy
LgotICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25wcm9ncmVzcygwKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3Rl
bmVyKHhtbEh0dHBSZXF1ZXN0LCB2YWx1ZSwgZmFsc2UpOwotICAgICAgICBpZiAobGlzdGVuZXIp
IHsKLSAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbnByb2dyZXNzKGxpc3RlbmVyKTsK
LSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUs
IFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25yZWFkeXN0YXRlY2hhbmdlKQot
ewotICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZS5f
Z2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1M
SFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh4bWxIdHRwUmVxdWVzdC0+b25y
ZWFkeXN0YXRlY2hhbmdlKCkpIHsKLSAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0
ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0
LT5vbnJlYWR5c3RhdGVjaGFuZ2UoKSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2
OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgIHJldHVy
biB2OExpc3RlbmVyOwotICAgIH0KLSAgICByZXR1cm4gdjg6Ok51bGwoKTsKLX0KLQotQUNDRVNT
T1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25yZWFkeXN0YXRlY2hhbmdlKQotewotICAgIElOQ19T
VEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZS5fc2V0Iik7Ci0gICAg
WE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1Qs
IGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYg
KHhtbEh0dHBSZXF1ZXN0LT5vbnJlYWR5c3RhdGVjaGFuZ2UoKSkgewotICAgICAgICAgICAgVjhP
YmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRM
aXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbnJlYWR5c3RhdGVjaGFuZ2UoKSk7Ci0gICAgICAg
ICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0
ZW5lck9iamVjdCgpOwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhv
bGRlcigpLCB2OExpc3RlbmVyLCBWOEN1c3RvbTo6a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCi0gICAgICAgIHht
bEh0dHBSZXF1ZXN0LT5zZXRPbnJlYWR5c3RhdGVjaGFuZ2UoMCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4
bWxIdHRwUmVxdWVzdCwgdmFsdWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0g
ICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25yZWFkeXN0YXRlY2hhbmdlKGxpc3RlbmVy
LmdldCgpKTsKLSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIo
KSwgdmFsdWUsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQogQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0UmVzcG9uc2VUZXh0
KQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgbmVlZGVkIGJlY2F1c2Ugd2Via2l0IHNl
dCB0aGlzIGdldHRlciBhcyBjdXN0b20uCkBAIC0yODAsNyArNTgsNyBAQCBDQUxMQkFDS19GVU5D
X0RFQ0woWE1MSHR0cFJlcXVlc3RBZGRFdmVudExpc3RlbmVyKQogICAgIElOQ19TVEFUUygiRE9N
LlhNTEh0dHBSZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoKSIpOwogICAgIFhNTEh0dHBSZXF1ZXN0
KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhN
TEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigp
KTsKIAotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVu
ZXIoeG1sSHR0cFJlcXVlc3QsIGFyZ3NbMV0sIGZhbHNlKTsKKyAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJl
cXVlc3QsIGFyZ3NbMV0sIGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAg
ICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgICAgICBib29s
IHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKQEAgLTI5Niw3ICs3NCw3IEBA
IENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVzdFJlbW92ZUV2ZW50TGlzdGVuZXIpCiAg
ICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7
CiAgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJF
UVVFU1QsIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgYXJnc1sxXSwgdHJ1ZSk7Cisg
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVu
dExpc3RlbmVyKHhtbEh0dHBSZXF1ZXN0LCBhcmdzWzFdLCBmYWxzZSwgdHJ1ZSk7CiAgICAgaWYg
KGxpc3RlbmVyKSB7CiAgICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3Nb
MF0pOwogICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RV
cGxvYWRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVx
dWVzdFVwbG9hZEN1c3RvbS5jcHAKaW5kZXggYmJjNjlkZC4uOWUyNWYzMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdFVwbG9h
ZEN1c3RvbS5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCi0j
aW5jbHVkZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgog
I2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3QuaCIKQEAg
LTQzLDIxMiArNDIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1BQ0NFU1NPUl9HRVRU
RVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmFib3J0KQotewotICAgIElOQ19TVEFUUygiRE9NLlhN
TEh0dHBSZXF1ZXN0VXBsb2FkLm9uYWJvcnQuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0VXBs
b2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNU
VVBMT0FELCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9u
YWJvcnQoKSkgewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3Rh
dGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9u
YWJvcnQoKSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlz
dGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiB2OExpc3RlbmVyOwot
ICAgIH0KLSAgICByZXR1cm4gdjg6Ok51bGwoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVSKFhNTEh0
dHBSZXF1ZXN0VXBsb2FkT25hYm9ydCkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVx
dWVzdFVwbG9hZC5vbmFib3J0Ll9zZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1s
SHR0cFJlcXVlc3RVcGxvYWQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxY
TUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwg
aW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAgICBpZiAo
eG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uYWJvcnQoKSkgewotICAgICAgICAgICAgVjhPYmplY3RF
dmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5l
cio+KHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmFib3J0KCkpOwotICAgICAgICAgICAgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3Qo
KTsKLSAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdjhM
aXN0ZW5lciwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgotICAgICAgICB4bWxIdHRwUmVxdWVz
dFVwbG9hZC0+c2V0T25hYm9ydCgwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBYTUxIdHRwUmVx
dWVzdCogeG1sSHR0cFJlcXVlc3QgPSB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+YXNzb2NpYXRlZFhN
TEh0dHBSZXF1ZXN0KCk7Ci0gICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmll
dmUoeG1sSHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgICAgIGlm
ICghcHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyID0gcHJveHktPm9iamVjdExpc3RlbmVycygpLT5maW5kT3JDcmVhdGVX
cmFwcGVyPFY4T2JqZWN0RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBmYWxz
ZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3RV
cGxvYWQtPnNldE9uYWJvcnQobGlzdGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlkZGVuRGVw
ZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVzdENh
Y2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1BQ0NFU1NPUl9HRVRURVIoWE1MSHR0
cFJlcXVlc3RVcGxvYWRPbmVycm9yKQotewotICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1
ZXN0VXBsb2FkLm9uZXJyb3IuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxI
dHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhN
TEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBp
bmZvLkhvbGRlcigpKTsKLSAgICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uZXJyb3IoKSkg
ewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8
VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uZXJyb3IoKSk7
Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdl
dExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiB2OExpc3RlbmVyOwotICAgIH0KLSAg
ICByZXR1cm4gdjg6Ok51bGwoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0
VXBsb2FkT25lcnJvcikKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9h
ZC5vbmVycm9yLl9zZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVl
c3RVcGxvYWQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVx
dWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAgICBpZiAoeG1sSHR0cFJl
cXVlc3RVcGxvYWQtPm9uZXJyb3IoKSkgewotICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0
dHBSZXF1ZXN0VXBsb2FkLT5vbmVycm9yKCkpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAg
ICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lciwg
VjhDdXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgotICAgICAgICB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+
c2V0T25lcnJvcigwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBYTUxIdHRwUmVxdWVzdCogeG1s
SHR0cFJlcXVlc3QgPSB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+YXNzb2NpYXRlZFhNTEh0dHBSZXF1
ZXN0KCk7Ci0gICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0
cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgICAgIGlmICghcHJveHkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxp
c3RlbmVyID0gcHJveHktPm9iamVjdExpc3RlbmVycygpLT5maW5kT3JDcmVhdGVXcmFwcGVyPFY4
T2JqZWN0RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBmYWxzZSk7Ci0gICAg
ICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3RVcGxvYWQtPnNl
dE9uZXJyb3IobGlzdGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShp
bmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1BQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RV
cGxvYWRPbmxvYWQpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQu
b25sb2FkLl9nZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RV
cGxvYWQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVz
dFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIo
KSk7Ci0gICAgaWYgKHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmxvYWQoKSkgewotICAgICAgICBW
OE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVu
dExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ubG9hZCgpKTsKLSAgICAgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmpl
Y3QoKTsKLSAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6
TnVsbCgpOwotfQotCi1BQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmxvYWQp
Ci17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25sb2FkLl9zZXQi
KTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhD
bGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYg
KHZhbHVlLT5Jc051bGwoKSkgewotICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9u
bG9hZCgpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0g
c3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQt
Pm9ubG9hZCgpKTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVy
ID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAgICByZW1vdmVIaWRk
ZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprWE1MSHR0
cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENsZWFyIHRoZSBs
aXN0ZW5lci4KLSAgICAgICAgeG1sSHR0cFJlcXVlc3RVcGxvYWQtPnNldE9ubG9hZCgwKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSB4bWxI
dHRwUmVxdWVzdFVwbG9hZC0+YXNzb2NpYXRlZFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgICAgIFY4
UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVlc3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgICAgIGlmICghcHJveHkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPm9i
amVjdExpc3RlbmVycygpLT5maW5kT3JDcmVhdGVXcmFwcGVyPFY4T2JqZWN0RXZlbnRMaXN0ZW5l
cj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikg
ewotICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3RVcGxvYWQtPnNldE9ubG9hZChsaXN0ZW5lcik7
Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVl
LCBWOEN1c3RvbTo6a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9ubG9hZHN0YXJ0KQot
ewotICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9ubG9hZHN0YXJ0Ll9n
ZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4o
VjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAg
aWYgKHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmxvYWRzdGFydCgpKSB7Ci0gICAgICAgIFY4T2Jq
ZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlz
dGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25sb2Fkc3RhcnQoKSk7Ci0gICAgICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2Jq
ZWN0KCk7Ci0gICAgICAgIHJldHVybiB2OExpc3RlbmVyOwotICAgIH0KLSAgICByZXR1cm4gdjg6
Ok51bGwoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0VXBsb2FkT25sb2Fk
c3RhcnQpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25sb2Fk
c3RhcnQuX3NldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVw
bG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0
VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigp
KTsKLSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlmICh4bWxIdHRwUmVxdWVz
dFVwbG9hZC0+b25sb2Fkc3RhcnQoKSkgewotICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0
dHBSZXF1ZXN0VXBsb2FkLT5vbmxvYWRzdGFydCgpKTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0g
ICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVu
ZXIsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgeG1sSHR0cFJlcXVlc3RVcGxv
YWQtPnNldE9ubG9hZHN0YXJ0KDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFhNTEh0dHBSZXF1
ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5hc3NvY2lhdGVkWE1M
SHR0cFJlcXVlc3QoKTsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2
ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgaWYg
KCFwcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdy
YXBwZXI8VjhPYmplY3RFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFsdWUsIGZhbHNl
KTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB4bWxIdHRwUmVxdWVzdFVw
bG9hZC0+c2V0T25sb2Fkc3RhcnQobGlzdGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlkZGVu
RGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVz
dENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1BQ0NFU1NPUl9HRVRURVIoWE1M
SHR0cFJlcXVlc3RVcGxvYWRPbnByb2dyZXNzKQotewotICAgIElOQ19TVEFUUygiRE9NLlhNTEh0
dHBSZXF1ZXN0VXBsb2FkLm9ucHJvZ3Jlc3MuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0VXBs
b2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNU
VVBMT0FELCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9u
cHJvZ3Jlc3MoKSkgewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0g
c3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQt
Pm9ucHJvZ3Jlc3MoKSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVy
ID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiB2OExpc3Rl
bmVyOwotICAgIH0KLSAgICByZXR1cm4gdjg6Ok51bGwoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVS
KFhNTEh0dHBSZXF1ZXN0VXBsb2FkT25wcm9ncmVzcykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5Y
TUxIdHRwUmVxdWVzdFVwbG9hZC5vbnByb2dyZXNzLl9zZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVz
dFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVR
VUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewot
ICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ucHJvZ3Jlc3MoKSkgewotICAgICAg
ICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2Jq
ZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbnByb2dyZXNzKCkpOwot
ICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+
Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3ko
aW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lciwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hl
SW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgotICAg
ICAgICB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25wcm9ncmVzcygwKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSB4bWxIdHRwUmVxdWVz
dFVwbG9hZC0+YXNzb2NpYXRlZFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgICAgIFY4UHJveHkqIHBy
b3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7Ci0gICAgICAgIGlmICghcHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPm9iamVjdExpc3Rl
bmVycygpLT5maW5kT3JDcmVhdGVXcmFwcGVyPFY4T2JqZWN0RXZlbnRMaXN0ZW5lcj4ocHJveHkt
PmZyYW1lKCksIHZhbHVlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAgICAg
ICAgICAgeG1sSHR0cFJlcXVlc3RVcGxvYWQtPnNldE9ucHJvZ3Jlc3MobGlzdGVuZXIpOwotICAg
ICAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhD
dXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQot
CiBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RVcGxvYWRBZGRFdmVudExpc3RlbmVy
KQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLmFkZEV2ZW50TGlz
dGVuZXIoKSIpOwogICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9h
ZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBs
b2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBhcmdzLkhvbGRlcigpKTsK
IAogICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IHhtbEh0dHBSZXF1ZXN0VXBs
b2FkLT5hc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKTsKLSAgICBWOFByb3h5KiBwcm94eSA9IFY4
UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwotICAgIGlmICghcHJveHkpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+b2JqZWN0TGlzdGVuZXJz
KCktPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhPYmplY3RFdmVudExpc3RlbmVyPihwcm94eS0+ZnJh
bWUoKSwgYXJnc1sxXSwgZmFsc2UpOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
ciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgYXJnc1sx
XSwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5
cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9
IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwpAQCAtMjY1LDEyICs2Niw4IEBAIENBTExCQUNLX0ZV
TkNfREVDTChYTUxIdHRwUmVxdWVzdFVwbG9hZFJlbW92ZUV2ZW50TGlzdGVuZXIpCiAgICAgWE1M
SHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6
WE1MSFRUUFJFUVVFU1RVUExPQUQsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgWE1MSHR0cFJlcXVl
c3QqIHhtbEh0dHBSZXF1ZXN0ID0geG1sSHR0cFJlcXVlc3RVcGxvYWQtPmFzc29jaWF0ZWRYTUxI
dHRwUmVxdWVzdCgpOwotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1s
SHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKCFwcm94eSkK
LSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsgLy8gUHJvYmFibHkgbGVha2VkLgotCi0g
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPm9iamVjdExpc3RlbmVy
cygpLT5maW5kV3JhcHBlcihhcmdzWzFdLCBmYWxzZSk7CiAKKyAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJl
cXVlc3QsIGFyZ3NbMV0sIGZhbHNlLCB0cnVlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAg
ICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wg
dXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5pZGwgYi9XZWJDb3JlL25vdGlmaWNhdGlvbnMv
Tm90aWZpY2F0aW9uLmlkbAppbmRleCBlYzZhOWM4Li43NWM1MDgyIDEwMDY0NAotLS0gYS9XZWJD
b3JlL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmlkbAorKysgYi9XZWJDb3JlL25vdGlmaWNh
dGlvbnMvTm90aWZpY2F0aW9uLmlkbApAQCAtMzcsOSArMzcsOSBAQCBtb2R1bGUgdGhyZWFkcyB7
CiAgICAgICAgIHZvaWQgc2hvdygpOwogICAgICAgICB2b2lkIGNhbmNlbCgpOwogCi0gICAgICAg
IGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZGlzcGxheTsKLSAgICAgICAgYXR0cmlidXRlIEV2
ZW50TGlzdGVuZXIgb25lcnJvcjsKLSAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25j
bG9zZTsKKyAgICAgICAgYXR0cmlidXRlIFt2OE9uUHJvdG9dIEV2ZW50TGlzdGVuZXIgb25kaXNw
bGF5OworICAgICAgICBhdHRyaWJ1dGUgW3Y4T25Qcm90b10gRXZlbnRMaXN0ZW5lciBvbmVycm9y
OworICAgICAgICBhdHRyaWJ1dGUgW3Y4T25Qcm90b10gRXZlbnRMaXN0ZW5lciBvbmNsb3NlOwog
CiAgICAgICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQogICAgICAgICBbQ3VzdG9tXSB2b2lk
IGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40360</attachid>
            <date>2009-09-30 04:43:11 -0700</date>
            <delta_ts>2009-09-30 11:41:54 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>listeners.patch</filename>
            <type>text/plain</type>
            <size>148945</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWFjYzNkYy4uYjNkMWVkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjEgQEAKKzIwMDktMDktMzAgIFZpdGFseSBSZXBl
c2hrbyAgPHZpdGFseXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gUmVmYWN0b3JlZCBWOCBldmVudCBsaXN0ZW5lcnM6
CisgICAgICAgIChUaGlzIGNoYW5nZSBzaG91bGQgZml4IGh0dHA6Ly9jcmJ1Zy5jb20vMjEwNzkg
YW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA5
My4pCisgICAgICAgICBvIEFsbCBsaXN0ZW5lcnMgdXNlIHdlYWsgaGFuZGxlcyB0byBKUyBvYmpl
Y3RzIHRvIGF2b2lkIGNyZWF0aW5nCisgICAgICAgICAgIGN5Y2xlcyBhbmQgbGVha2luZyBtZW1v
cnkuCisgICAgICAgICBvICJPYmplY3QiIHZhcmlhbnRzIG9mIGxpc3RlbmVycyByZW1vdmVkLgor
ICAgICAgICAgbyBBbGwgZXZlbnQgYWNjZXNzb3IgY2FsbGJhY2tzIGFyZSBnZW5lcmF0ZWQuCisg
ICAgICAgICBvIEN1c3RvbSBldmVudCBhY2Nlc3NvcnMgcmVtb3ZlZC4KKyAgICAgICAgIG8gQWxs
IHdyYXBwZXJzIGhhdmUgaGlkZGVuIGRlcGVuZGVuY2llcyBvbiB0aGVpciBsaXN0ZW5lcnMgdG8K
KyAgICAgICAgICAgcHJldmVudCBsaXN0ZW5lcnMgZnJvbSBiZWluZyBjb2xsZWN0ZWQuCisgICAg
ICAgICBvIEFsbCB2YXJpYXRzIG9mIGdldEV2ZW50TGlzdGVuZXIgZnVuY3Rpb24gZ3JvdXBlZCBp
biBWOERPTVdyYXBwZXIuCisgICAgICAgICBvIFBvaW50ZXJzIHRvIEMrKyBFdmVudExpc3RlbmVy
IHdyYXBwZXJzIGFyZSBzdG9yZWQgaW4gSlMgb2JqZWN0cworICAgICAgICAgICBpbnN0ZWFkIG9m
IGV2ZW50IGxpc3RlbmVyIGxpc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjk4MjUKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaTogUmVtb3ZlZCAi
T2JqZWN0IiBsaXN0ZW5lcnMuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG06IE5vdyBoYW5kbGVzIGV2ZW50IGFjY2Vzc29ycy4KKyAgICAgICAgKiBiaW5kaW5n
cy92OC9ET01PYmplY3RzSW5jbHVkZS5oOgorCisgICAgICAgIFY4QWJzdHJhY3RFdmVudExpc3Rl
bmVyIG1hbmFnZXMgd2VhayBKUyBoYW5kbGU6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2Vha0V2ZW50TGlzdGVu
ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6
VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFjdEV2
ZW50TGlzdGVuZXI6On5WOEFic3RyYWN0RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmRpc3Bvc2VMaXN0ZW5lck9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6c2V0TGlzdGVuZXJPYmplY3Qp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Y2FzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aXNMYXp5KToKKyAgICAgICAgKFdlYkNv
cmU6OlY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpnZXRMaXN0ZW5lck9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Z2V0RXhpc3RpbmdMaXN0ZW5lck9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFzRXhp
c3RpbmdMaXN0ZW5lck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRM
aXN0ZW5lcjo6ZGlzY29ubmVjdEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWJzdHJhY3RF
dmVudExpc3RlbmVyOjpkaXNjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFj
dEV2ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6bGluZU51bWJlcik6CisgICAgICAgIChXZWJDb3Jl
OjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6dmlydHVhbGlzQXR0cmlidXRlKToKKworICAgICAg
ICBHcm91cGVkIGdldEV2ZW50TGlzdGVuZXIgZnVuY3Rpb25zOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6Omdl
dFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0
ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmg6CisKKyAgICAgICAg
UmVtb3ZlZCBtb3N0IGV2ZW50IGxpc3RlbmVyIG9iamVjdHMgYm9va2tlZXBpbmc6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExp
c3RlbmVyTGlzdDo6ZmluZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3Rl
bmVyTGlzdDo6Y2xlYXJXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5l
ckxpc3Q6OmRvRmluZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVy
TGlzdDo6Z2V0SGlkZGVuUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3Rl
bmVyTGlzdDo6ZmluZE9yQ3JlYXRlV3JhcHBlcik6CisKKyAgICAgICAgQWRkZWQgaGlkZGVuIHBy
b3BlcnRpZXMgZm9yIHN0b3JpbmcgRXZlbnRMaXN0ZW5lciB3cmFwcGVyczoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OEhpZGRlblByb3BlcnR5TmFtZTo6bGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhIaWRk
ZW5Qcm9wZXJ0eU5hbWU6OmF0dHJpYnV0ZUxpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oOgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5
RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVy
OjpWOExhenlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2ZW50TGlz
dGVuZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2
ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRM
aXN0ZW5lcjo6aXNMYXp5KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlz
dGVuZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRM
aXN0ZW5lci5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZGlzY29ubmVjdEZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4UHJveHk6OmRpc2Nvbm5lY3RFdmVudExpc3RlbmVycyk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhQcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4
dEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXZl
bnRMaXN0ZW5lcjo6cmVwb3J0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250
ZXh0RXZlbnRMaXN0ZW5lcjo6Z2V0UmVjZWl2ZXJPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmg6IFJl
bW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZGlz
cG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6Omlu
aXRDb250ZXh0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
QUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bUJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudExp
c3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lcjo6VjhFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lcjo6Z2V0TGlzdGVuZXJG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOEV2ZW50TGlzdGVuZXI6OmNhbGxMaXN0ZW5l
ckZ1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudExp
c3RlbmVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRpb25D
YWNoZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdldEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19E
RUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNL
X0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFhNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcDoKKwogMjAwOS0wOS0yOSAgRGF2
ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb24gSG9u
ZXljdXR0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA0M2U3MzljLi4wNDEwZDE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNzk5LDggKzc5OSw2IEBACiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhOUFV0aWxzLmgnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5oJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9W
OE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOE9i
amVjdEV2ZW50TGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhQcm94eS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4UHJveHkuaCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBlci5oJywKQEAgLTgwOCw4ICs4MDYsNiBAQAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmgnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuY3BwJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmgnLAotICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwJywK
LSAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3Rl
bmVyLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9s
bGVyLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5k
ZXggN2YxNTA4Yi4uMzZiN2VlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCkBAIC0zMjYsMTAgKzMyNiwyNiBAQCBzdWIgSXNOb2RlU3ViVHlwZQogICAg
IHJldHVybiAwOwogfQogCi1zdWIgUmVxdWlyZXNDdXN0b21FdmVudExpc3RlbmVyQWNjZXNzb3Jz
CitzdWIgR2V0SGlkZGVuRGVwZW5kZW5jeUluZGV4CiB7CiAgICAgbXkgJGRhdGFOb2RlID0gc2hp
ZnQ7Ci0gICAgcmV0dXJuICFJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkgJiYgJGRhdGFOb2RlLT5u
YW1lIG5lICJTVkdFbGVtZW50SW5zdGFuY2UiOworICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsK
KyAgICBteSAkbmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjpr
Tm9kZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4IiBpZiBJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSk7
CisgICAgcmV0dXJuICJWOEN1c3RvbTo6a1NWR0VsZW1lbnRJbnN0YW5jZUV2ZW50TGlzdGVuZXJD
YWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIjsKKyAgICByZXR1cm4g
IlY4Q3VzdG9tOjprQWJzdHJhY3RXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCIgaWYgJG5hbWUgZXEg
IkFic3RyYWN0V29ya2VyIjsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjprV29ya2VyUmVxdWVzdENh
Y2hlSW5kZXgiIGlmICRuYW1lIGVxICJXb3JrZXIiOworICAgIHJldHVybiAiVjhDdXN0b206OmtE
ZWRpY2F0ZWRXb3JrZXJDb250ZXh0UmVxdWVzdENhY2hlSW5kZXgiIGlmICRuYW1lIGVxICJEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0IjsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjprV29ya2VyQ29udGV4
dFJlcXVlc3RDYWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiV29ya2VyQ29udGV4dCI7CisgICAgcmV0
dXJuICJWOEN1c3RvbTo6a1dvcmtlckNvbnRleHRSZXF1ZXN0Q2FjaGVJbmRleCIgaWYgJG5hbWUg
ZXEgIlNoYXJlZFdvcmtlckNvbnRleHQiOworICAgIHJldHVybiAiVjhDdXN0b206OmtNZXNzYWdl
UG9ydFJlcXVlc3RDYWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiTWVzc2FnZVBvcnQiOworICAgIHJl
dHVybiAiVjhDdXN0b206OmtXZWJTb2NrZXRDYWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiV2ViU29j
a2V0IjsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4IiBp
ZiAkbmFtZSBlcSAiWE1MSHR0cFJlcXVlc3QiOworICAgIHJldHVybiAiVjhDdXN0b206OmtYTUxI
dHRwUmVxdWVzdENhY2hlSW5kZXgiIGlmICRuYW1lIGVxICJYTUxIdHRwUmVxdWVzdFVwbG9hZCI7
CisgICAgcmV0dXJuICJWOEN1c3RvbTo6a0RPTUFwcGxpY2F0aW9uQ2FjaGVDYWNoZUluZGV4IiBp
ZiAkbmFtZSBlcSAiRE9NQXBwbGljYXRpb25DYWNoZSI7CisgICAgcmV0dXJuICJWOEN1c3RvbTo6
a05vdGlmaWNhdGlvblJlcXVlc3RDYWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiTm90aWZpY2F0aW9u
IjsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjprRE9NV2luZG93RXZlbnRMaXN0ZW5lckNhY2hlSW5k
ZXgiIGlmICRuYW1lIGVxICJET01XaW5kb3ciOworICAgIGRpZSAiVW5leHBlY3RlZCBuYW1lICIg
LiAkbmFtZSAuICIgd2hlbiBnZW5lcmF0aW5nICIgLiAkYXR0cmlidXRlOwogfQogCiBzdWIgSG9s
ZGVyVG9OYXRpdmUKQEAgLTU5NCw2ICs2MTAsMTAgQEAgRU5ECiAgICAgICAgIH0KIAogICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIkV2ZW50
TGlzdGVuZXIiICYmICRkYXRhTm9kZS0+bmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIWltcC0+ZG9jdW1lbnQoKSlcbiIp
OworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7XG4iKTsKKyAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICAgICRuYXRpdmVUeXBlIHYgPSAiKTsKIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiJGdldHRlclN0cmluZztcbiIpOwpAQCAtNjc1LDcgKzY5NSw3IEBAIHN1YiBHZW5l
cmF0ZU5vcm1hbEF0dHJTZXR0ZXIKICAgICAgICAgIyBwZXJmb3JtIGxvb2t1cCBmaXJzdAogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBob2xkZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0lu
ZGV4OjokY2xhc3NJbmRleCwgaW5mby5UaGlzKCkpOwotICAgIGlmIChob2xkZXIuSXNFbXB0eSgp
KSByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSByZXR1
cm47CiBFTkQKICAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFt
ZSwgJGNsYXNzSW5kZXgpOwogICAgIH0gZWxzZSB7CkBAIC02ODcsNiArNzA3LDEwIEBAIEVORAog
CiAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUsIDApOwogICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUg
ZXEgIkV2ZW50TGlzdGVuZXIiKSB7CisgICAgICAgIGlmICgkZGF0YU5vZGUtPm5hbWUgZXEgIkRP
TVdpbmRvdyIpIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYg
KCFpbXAtPmRvY3VtZW50KCkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgICByZXR1cm47XG4iKTsKKyAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgICRuYXRpdmVUeXBlIHYgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlz
dGVuZXIoaW1wLCB2YWx1ZSwgdHJ1ZSwgZmFsc2UpO1xuIik7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAkbmF0aXZlVHlwZSB2ID0gIiAuIEpTVmFs
dWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpIC4gIjtcbiIpOwpAQCAt
NzI1LDE0ICs3NDksMTcgQEAgRU5ECiAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+dHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IlY4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgifSA9IDE7CiAgICAgICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJWOEN1c3RvbUJpbmRpbmcuaCJ9ID0gMTsKKyAgICAgICAgICAgICRjYWNoZUluZGV4
ID0gR2V0SGlkZGVuRGVwZW5kZW5jeUluZGV4KCRkYXRhTm9kZSwgJGF0dHJOYW1lKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgb2xkID0gaW1w
LT4kYXR0ck5hbWUoKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICBpZiAob2xkICYmIHN0YXRpY19jYXN0PFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKj4ob2xk
LmdldCgpKS0+aXNPYmplY3RMaXN0ZW5lcigpKSB7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2xkTGlzdGVuZXIg
PSBzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KG9sZC5nZXQoKSktPmdldExp
c3RlbmVyT2JqZWN0KCk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICIgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGhvbGRlciwgb2xkTGlzdGVuZXIsIFY4Q3Vz
dG9tOjprTm9kZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTtcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciogb2xkTGlz
dGVuZXIgPSBvbGQgPyBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Y2FzdChvbGQuZ2V0KCkpIDog
MDtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAob2xk
TGlzdGVuZXIpIHtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
ICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvbGRMaXN0ZW5lck9iamVjdCA9IG9sZExpc3RlbmVy
LT5nZXRFeGlzdGluZ0xpc3RlbmVyT2JqZWN0KCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgICBpZiAoIW9sZExpc3RlbmVyT2JqZWN0LklzRW1wdHkoKSlc
biIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgcmVtb3Zl
SGlkZGVuRGVwZW5kZW5jeShob2xkZXIsIG9sZExpc3RlbmVyT2JqZWN0LCAkY2FjaGVJbmRleCk7
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGltcC0+c2V0JGltcGxTZXR0
ZXJGdW5jdGlvbk5hbWUoJHJlc3VsdCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgaWYgKCRyZXN1bHQpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGhvbGRlciwgdmFsdWUs
IFY4Q3VzdG9tOjprTm9kZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4Iik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShob2xk
ZXIsIHZhbHVlLCAkY2FjaGVJbmRleCIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpbXAtPnNldCRpbXBsU2V0dGVyRnVuY3Rpb25O
YW1lKCIgLiAkcmVzdWx0KTsKICAgICAgICAgfQpAQCAtOTYzLDI2ICs5OTAsNiBAQCBzdWIgR2Vu
ZXJhdGVCYXRjaGVkQXR0cmlidXRlRGF0YQogICAgICAgICAgICAgJHNldHRlciA9ICIwIjsKICAg
ICAgICAgICAgICRwcm9wQXR0ciA9ICJ2ODo6UmVhZE9ubHkiOwogCi0gICAgICAgICMgRXZlbnRM
aXN0ZW5lcnMKLSAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVx
ICJFdmVudExpc3RlbmVyIiAmJiBSZXF1aXJlc0N1c3RvbUV2ZW50TGlzdGVuZXJBY2Nlc3NvcnMo
JGRhdGFOb2RlKSkgewotICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5k
b3ciKSB7Ci0gICAgICAgICAgICAgICAgJGdldHRlciA9ICJWOEN1c3RvbTo6djhET01XaW5kb3dF
dmVudEhhbmRsZXJBY2Nlc3NvckdldHRlciI7Ci0gICAgICAgICAgICAgICAgJHNldHRlciA9ICJW
OEN1c3RvbTo6djhET01XaW5kb3dFdmVudEhhbmRsZXJBY2Nlc3NvclNldHRlciI7Ci0gICAgICAg
ICAgICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NQXBwbGljYXRpb25DYWNoZSIpIHsK
LSAgICAgICAgICAgICAgICAkZ2V0dGVyID0gIlY4Q3VzdG9tOjp2OERPTUFwcGxpY2F0aW9uQ2Fj
aGVFdmVudEhhbmRsZXJBY2Nlc3NvckdldHRlciI7Ci0gICAgICAgICAgICAgICAgJHNldHRlciA9
ICJWOEN1c3RvbTo6djhET01BcHBsaWNhdGlvbkNhY2hlRXZlbnRIYW5kbGVyQWNjZXNzb3JTZXR0
ZXIiOwotICAgICAgICAgICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUgZXEgIk5vdGlmaWNhdGlv
biIpIHsKLSAgICAgICAgICAgICAgICAkZ2V0dGVyID0gIlY4Q3VzdG9tOjp2OE5vdGlmaWNhdGlv
bkV2ZW50SGFuZGxlckFjY2Vzc29yR2V0dGVyIjsKLSAgICAgICAgICAgICAgICAkc2V0dGVyID0g
IlY4Q3VzdG9tOjp2OE5vdGlmaWNhdGlvbkV2ZW50SGFuZGxlckFjY2Vzc29yU2V0dGVyIjsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgJGdldHRlciA9ICJWOEN1c3RvbTo6
djgke2N1c3RvbUFjY2Vzc29yfUFjY2Vzc29yR2V0dGVyIjsKLSAgICAgICAgICAgICAgICBpZiAo
JGludGVyZmFjZU5hbWUgZXEgIldvcmtlckNvbnRleHQiIGFuZCAkYXR0ck5hbWUgZXEgInNlbGYi
KSB7Ci0gICAgICAgICAgICAgICAgICAgICRzZXR0ZXIgPSAiMCI7Ci0gICAgICAgICAgICAgICAg
ICAgICRwcm9wQXR0ciA9ICJ2ODo6UmVhZE9ubHkiOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICRzZXR0ZXIgPSAiVjhDdXN0b206OnY4JHtjdXN0b21BY2Nl
c3Nvcn1BY2Nlc3NvclNldHRlciI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIyBEZWZhdWx0IEdldHRlciBhbmQgU2V0dGVy
CiAgICAgICAgICAgICAkZ2V0dGVyID0gIiR7aW50ZXJmYWNlTmFtZX1JbnRlcm5hbDo6JHthdHRy
TmFtZX1BdHRyR2V0dGVyIjsKQEAgLTEwOTIsMTYgKzEwOTksOCBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgbmV4dDsKICAgICAgICAgfQogCi0gICAgICAgICMgTWFr
ZSBFdmVudExpc3RlbmVycyBjdXN0b20gZm9yIHNvbWUgdHlwZXMuCi0gICAgICAgICMgRklYTUU6
IG1ha2UgdGhlIHBlcmwgY29kZSBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgdGhlCi0gICAgICAgICMg
ICBldmVudCBzZXR0ZXJzL2dldHRlcnMuICBGb3Igbm93LCBXZWJLaXQgaGFzIHN0YXJ0ZWQgcmVt
b3ZpbmcgdGhlCi0gICAgICAgICMgICBbQ3VzdG9tXSBhdHRyaWJ1dGUsIHNvIGp1c3QgYXV0b21h
dGljYWxseSBpbnNlcnQgaXQgdG8gYXZvaWQgZm9ya2luZwotICAgICAgICAjICAgb3RoZXIgZmls
ZXMuICBUaGlzIHNob3VsZCBiZSBva2F5IGJlY2F1c2Ugd2UgY2FuJ3QgZ2VuZXJhdGUgc3R1YnMK
LSAgICAgICAgIyAgIGZvciBhbnkgZXZlbnQgZ2V0dGVyL3NldHRlcnMgYW55d2F5LgotICAgICAg
ICBpZiAoJGF0dHJUeXBlIGVxICJFdmVudExpc3RlbmVyIiAmJiBSZXF1aXJlc0N1c3RvbUV2ZW50
TGlzdGVuZXJBY2Nlc3NvcnMoJGRhdGFOb2RlKSkgewotICAgICAgICAgICAgJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0gPSAxOwotICAgICAgICAg
ICAgJGltcGxJbmNsdWRlc3siVjhDdXN0b21CaW5kaW5nLmgifSA9IDE7Ci0gICAgICAgICAgICBu
ZXh0OworICAgICAgICBpZiAoJGF0dHJUeXBlIGVxICJFdmVudExpc3RlbmVyIiAmJiAkaW50ZXJm
YWNlTmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICAgICAgJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsidjhPblByb3RvIn0gPSAxOwogICAgICAgICB9CiAK
ICAgICAgICAgIyBEbyBub3QgZ2VuZXJhdGUgYWNjZXNzb3IgaWYgdGhpcyBpcyBhIGN1c3RvbSBh
dHRyaWJ1dGUuICBUaGUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0
c0luY2x1ZGUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0c0luY2x1ZGUuaAppbmRl
eCBlNTc5NmU3Li4wMTI0MTY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9i
amVjdHNJbmNsdWRlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVk
ZS5oCkBAIC0xNTcsNyArMTU3LDYgQEAKICNpbmNsdWRlICJWOEhUTUxFbGVtZW50LmgiCiAjaW5j
bHVkZSAiVjhMYXp5RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4Tm9kZUZpbHRlckNvbmRp
dGlvbi5oIgotI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlZh
bGlkaXR5U3RhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRBbmltYXRpb25FdmVudC5oIgogI2luY2x1
ZGUgIldlYktpdENTU0tleWZyYW1lUnVsZS5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcAppbmRleCBkMWVlNzMwLi4zMzg1NzkxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcApAQCAtMzcs
MTIgKzM3LDIwIEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJUb2tlbml6ZXIuaCIK
ICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEV2ZW50TGlzdGVuZXJMaXN0Lmgi
CiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0
aWMgdm9pZCB3ZWFrRXZlbnRMaXN0ZW5lckNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1
ZT4sIHZvaWQqIHBhcmFtZXRlcikKK3sKKyAgICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSBzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KHBhcmFtZXRlcik7
CisgICAgbGlzdGVuZXItPmRpc3Bvc2VMaXN0ZW5lck9iamVjdCgpOworfQorCiBWOEFic3RyYWN0
RXZlbnRMaXN0ZW5lcjo6VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoRnJhbWUqIGZyYW1lLCBib29s
IGlzQXR0cmlidXRlKQogICAgIDogRXZlbnRMaXN0ZW5lcihKU0V2ZW50TGlzdGVuZXJUeXBlKQor
ICAgICwgbV9pc1dlYWsodHJ1ZSkKICAgICAsIG1faXNBdHRyaWJ1dGUoaXNBdHRyaWJ1dGUpCiAg
ICAgLCBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9saW5lTnVtYmVyKDApCkBAIC02Myw2ICs3MSw3
MCBAQCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoRnJh
bWUqIGZyYW1lLCBib29sIGlzQXR0cmlidXRlKQogICAgIH0KIH0KIAorVjhBYnN0cmFjdEV2ZW50
TGlzdGVuZXI6On5WOEFic3RyYWN0RXZlbnRMaXN0ZW5lcigpCit7CisgICAgaWYgKCFtX2xpc3Rl
bmVyLklzRW1wdHkoKSkKKyAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdDo6Y2xlYXJXcmFwcGVy
KG1fbGlzdGVuZXIsIG1faXNBdHRyaWJ1dGUpOworICAgIGRpc3Bvc2VMaXN0ZW5lck9iamVjdCgp
OworfQorCit2b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBFdmVudCogZXZlbnQpCit7
CisgICAgLy8gRXZlbnRMaXN0ZW5lciBjb3VsZCBiZSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgZnJh
bWUuCisgICAgaWYgKGRpc2Nvbm5lY3RlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBU
aGUgY2FsbGJhY2sgZnVuY3Rpb24gb24gWE1MSHR0cFJlcXVlc3QgY2FuIGNsZWFyIHRoZSBldmVu
dCBsaXN0ZW5lciBhbmQgZGVzdHJveXMgJ3RoaXMnIG9iamVjdC4gS2VlcCBhIGxvY2FsIHJlZmVy
ZW5jZSB0byBpdC4KKyAgICAvLyBTZWUgaXNzdWUgODg5ODI5LgorICAgIFJlZlB0cjxWOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lcj4gcHJvdGVjdCh0aGlzKTsKKworICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKKworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBDcmVhdGUgYSBuZXcgbG9jYWwgaGFuZGxlIHNpbmNlIHRoZSBwZXJzaXN0ZW50IGhhbmRs
ZSBzdG9yZWQgaW4KKyAgICAvLyBtX2NvbnRleHQgbWF5IGJlIGRpc3Bvc2VkIGJlZm9yZSB3ZSdy
ZSBkb25lLgorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHY4OjpMb2Nh
bDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQtPmdldCgpKTsKKyAgICBpZiAodjhDb250ZXh0
LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gbV9mcmFtZSBjYW4gcmVtb3Zl
ZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIHByb3RlY3QgaXQgdW50aWwgdGhlIGNhbGxiYWNr
IGZ1bmN0aW9uIHJldHVybnMuCisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0RnJhbWUobV9mcmFt
ZSk7CisKKyAgICAvLyBFbnRlciB0aGUgVjggY29udGV4dCBpbiB3aGljaCB0byBwZXJmb3JtIHRo
ZSBldmVudCBoYW5kbGluZy4KKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0
KTsKKworICAgIC8vIEdldCB0aGUgVjggd3JhcHBlciBmb3IgdGhlIGV2ZW50IG9iamVjdC4KKyAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydEV2
ZW50VG9WOE9iamVjdChldmVudCk7CisKKyAgICBpbnZva2VFdmVudEhhbmRsZXIodjhDb250ZXh0
LCBldmVudCwganNFdmVudCk7CisKKyAgICBEb2N1bWVudDo6dXBkYXRlU3R5bGVGb3JBbGxEb2N1
bWVudHMoKTsKK30KKwordm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6ZGlzcG9zZUxpc3Rl
bmVyT2JqZWN0KCkKK3sKKyAgICBpZiAoIW1fbGlzdGVuZXIuSXNFbXB0eSgpKSB7CisjaWZuZGVm
IE5ERUJVRworICAgICAgICBWOEdDQ29udHJvbGxlcjo6dW5yZWdpc3Rlckdsb2JhbEhhbmRsZSh0
aGlzLCBtX2xpc3RlbmVyKTsKKyNlbmRpZgorICAgICAgICBtX2xpc3RlbmVyLkRpc3Bvc2UoKTsK
KyAgICAgICAgbV9saXN0ZW5lci5DbGVhcigpOworICAgIH0KK30KKwordm9pZCBWOEFic3RyYWN0
RXZlbnRMaXN0ZW5lcjo6c2V0TGlzdGVuZXJPYmplY3Qodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBs
aXN0ZW5lcikKK3sKKyAgICBkaXNwb3NlTGlzdGVuZXJPYmplY3QoKTsKKyAgICBtX2xpc3RlbmVy
ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhsaXN0ZW5lcik7CisjaWZuZGVmIE5E
RUJVRworICAgIFY4R0NDb250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZShFVkVOVF9MSVNU
RU5FUiwgdGhpcywgbV9saXN0ZW5lcik7CisjZW5kaWYKKyAgICBpZiAobV9pc1dlYWspCisgICAg
ICAgIG1fbGlzdGVuZXIuTWFrZVdlYWsodGhpcywgJndlYWtFdmVudExpc3RlbmVyQ2FsbGJhY2sp
OworfQorCiB2b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjppbnZva2VFdmVudEhhbmRsZXIo
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0LCBFdmVudCogZXZlbnQsIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBqc0V2ZW50KQogewogICAgIC8vIFdlIHB1c2ggdGhlIGV2ZW50IGJlaW5n
IHByb2Nlc3NlZCBpbnRvIHRoZSBnbG9iYWwgb2JqZWN0LCBzbyB0aGF0IGl0IGNhbiBiZSBleHBv
c2VkIGJ5IERPTVdpbmRvdydzIGJpbmRpbmdzLgpAQCAtMTI0LDUyICsxOTYsNiBAQCB2b2lkIFY4
QWJzdHJhY3RFdmVudExpc3RlbmVyOjppbnZva2VFdmVudEhhbmRsZXIodjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gdjhDb250ZQogICAgICAgICBldmVudC0+cHJldmVudERlZmF1bHQoKTsKIH0KIAot
dm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRXZlbnQqIGV2ZW50KQotewotICAgIC8v
IEV2ZW50TGlzdGVuZXIgY291bGQgYmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIGZyYW1lLgotICAg
IGlmIChkaXNjb25uZWN0ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGNhbGxi
YWNrIGZ1bmN0aW9uIG9uIFhNTEh0dHBSZXF1ZXN0IGNhbiBjbGVhciB0aGUgZXZlbnQgbGlzdGVu
ZXIgYW5kIGRlc3Ryb3lzICd0aGlzJyBvYmplY3QuIEtlZXAgYSBsb2NhbCByZWZlcmVuY2UgdG8g
aXQuCi0gICAgLy8gU2VlIGlzc3VlIDg4OTgyOS4KLSAgICBSZWZQdHI8VjhBYnN0cmFjdEV2ZW50
TGlzdGVuZXI+IHByb3RlY3QodGhpcyk7Ci0KLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7Ci0KLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ3Jl
YXRlIGEgbmV3IGxvY2FsIGhhbmRsZSBzaW5jZSB0aGUgcGVyc2lzdGVudCBoYW5kbGUgc3RvcmVk
IGluCi0gICAgLy8gbV9jb250ZXh0IG1heSBiZSBkaXNwb3NlZCBiZWZvcmUgd2UncmUgZG9uZS4K
LSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNv
bnRleHQ+OjpOZXcobV9jb250ZXh0LT5nZXQoKSk7Ci0gICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIG1fZnJhbWUgY2FuIHJlbW92ZWQgYnkgdGhl
IGNhbGxiYWNrIGZ1bmN0aW9uLCBwcm90ZWN0IGl0IHVudGlsIHRoZSBjYWxsYmFjayBmdW5jdGlv
biByZXR1cm5zLgotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdEZyYW1lKG1fZnJhbWUpOwotCi0g
ICAgLy8gRW50ZXIgdGhlIFY4IGNvbnRleHQgaW4gd2hpY2ggdG8gcGVyZm9ybSB0aGUgZXZlbnQg
aGFuZGxpbmcuCi0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7Ci0KLSAg
ICAvLyBHZXQgdGhlIFY4IHdyYXBwZXIgZm9yIHRoZSBldmVudCBvYmplY3QuCi0gICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRvVjhP
YmplY3QoZXZlbnQpOwotCi0gICAgaW52b2tlRXZlbnRIYW5kbGVyKHY4Q29udGV4dCwgZXZlbnQs
IGpzRXZlbnQpOwotCi0gICAgRG9jdW1lbnQ6OnVwZGF0ZVN0eWxlRm9yQWxsRG9jdW1lbnRzKCk7
Ci19Ci0KLXZvaWQgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmRpc3Bvc2VMaXN0ZW5lck9iamVj
dCgpCi17Ci0gICAgaWYgKCFtX2xpc3RlbmVyLklzRW1wdHkoKSkgewotI2lmbmRlZiBOREVCVUcK
LSAgICAgICAgVjhHQ0NvbnRyb2xsZXI6OnVucmVnaXN0ZXJHbG9iYWxIYW5kbGUodGhpcywgbV9s
aXN0ZW5lcik7Ci0jZW5kaWYKLSAgICAgICAgbV9saXN0ZW5lci5EaXNwb3NlKCk7Ci0gICAgICAg
IG1fbGlzdGVuZXIuQ2xlYXIoKTsKLSAgICB9Ci19Ci0KIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBW
OEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Z2V0UmVjZWl2ZXJPYmplY3QoRXZlbnQqIGV2ZW50KQog
ewogICAgIGlmICghbV9saXN0ZW5lci5Jc0VtcHR5KCkgJiYgIW1fbGlzdGVuZXItPklzRnVuY3Rp
b24oKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlz
dGVuZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaApp
bmRleCA4ZjEwNjFiLi5mNmU1OGUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QWJzdHJhY3RFdmVudExpc3RlbmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lci5oCkBAIC01MSw0MyArNTEsODQgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIC8vIGJ1dCBBTExPV3MgZHVwbGljYXRlZCBub24tSFRNTCBldmVudCBoYW5kbGVycy4K
ICAgICBjbGFzcyBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVy
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflY4QWJzdHJhY3RFdmVudExpc3RlbmVy
KCkgeyB9CisgICAgICAgIHZpcnR1YWwgflY4QWJzdHJhY3RFdmVudExpc3RlbmVyKCk7CisKKyAg
ICAgICAgc3RhdGljIGNvbnN0IFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKiBjYXN0KGNvbnN0IEV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbGlz
dGVuZXItPnR5cGUoKSA9PSBKU0V2ZW50TGlzdGVuZXJUeXBlCisgICAgICAgICAgICAgICAgPyBz
dGF0aWNfY2FzdDxjb25zdCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKQorICAg
ICAgICAgICAgICAgIDogMDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBWOEFic3RyYWN0
RXZlbnRMaXN0ZW5lciogY2FzdChFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIqPihj
YXN0KGNvbnN0X2Nhc3Q8Y29uc3QgRXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKSkpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gSW1wbGVtZW50YXRpb24gb2YgRXZlbnRMaXN0ZW5lciBpbnRlcmZh
Y2UuCiAKICAgICAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5l
ciYgb3RoZXIpIHsgcmV0dXJuIHRoaXMgPT0gJm90aGVyOyB9CiAKKyAgICAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCopOworCiAgICAg
ICAgIC8vIFJldHVybnMgdGhlIG93bmVyIGZyYW1lIG9mIHRoZSBsaXN0ZW5lci4KICAgICAgICAg
RnJhbWUqIGZyYW1lKCkgeyByZXR1cm4gbV9mcmFtZTsgfQogCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqKTsKLSAgICAgICAg
dm9pZCBpbnZva2VFdmVudEhhbmRsZXIodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4sIEV2ZW50Kiwg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQpOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNM
YXp5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIHRoZSBs
aXN0ZW5lciBvYmplY3QsIGVpdGhlciBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdC4KLSAgICAgICAg
dmlydHVhbCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZ2V0TGlzdGVuZXJPYmplY3QoKQorICAgICAg
ICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZ2V0TGlzdGVuZXJPYmplY3QoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBwcmVwYXJlTGlzdGVuZXJPYmplY3QoKTsKKyAgICAgICAgICAgIHJldHVybiB2
ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyhtX2xpc3RlbmVyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBnZXRFeGlzdGluZ0xpc3RlbmVyT2JqZWN0KCkKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6TmV3KG1f
bGlzdGVuZXIpOwogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBoYXNFeGlzdGluZ0xpc3RlbmVy
T2JqZWN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICFtX2xpc3RlbmVyLklzRW1w
dHkoKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIERpc3Bvc2UgbGlzdGVuZXIgb2JqZWN0IGFu
ZCBjbGVhciB0aGUgaGFuZGxlLgogICAgICAgICB2b2lkIGRpc3Bvc2VMaXN0ZW5lck9iamVjdCgp
OwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBkaXNjb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAh
bV9mcmFtZTsgfQorICAgICAgICAvLyBEZXRhY2ggdGhlIGxpc3RlbmVyIGZyb20gaXRzIG93bmVy
IGZyYW1lLgorICAgICAgICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpIHsgbV9mcmFtZSA9IDA7IH0K
IAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNPYmplY3RMaXN0ZW5lcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNjb25uZWN0ZWQoKSBjb25zdCB7IHJl
dHVybiAhbV9mcmFtZTsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiBtX2xpc3RlbmVyOworICAgICAgICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5l
cihGcmFtZSosIGJvb2wgaXNBdHRyaWJ1dGUpOwogCi0gICAgICAgIC8vIEluZGljYXRlcyBpZiB0
aGlzIGlzIGFuIEhUTUwgdHlwZSBsaXN0ZW5lci4KLSAgICAgICAgYm9vbCBtX2lzQXR0cmlidXRl
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUxpc3RlbmVyT2JqZWN0KCkgeyB9CiAKLSAg
ICBwcml2YXRlOgotICAgICAgICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcihGcmFtZSosIGJvb2wg
aXNJbmxpbmUpOworICAgICAgICB2b2lkIHNldExpc3RlbmVyT2JqZWN0KHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gbGlzdGVuZXIpOwogCi0gICAgICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gY2FsbExpc3RlbmVyRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzZXZlbnQsIEV2
ZW50KikgPSAwOworICAgICAgICB2b2lkIGludm9rZUV2ZW50SGFuZGxlcih2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiwgRXZlbnQqLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCk7CiAKICAg
ICAgICAgLy8gR2V0IHRoZSByZWNlaXZlciBvYmplY3QgdG8gdXNlIGZvciBldmVudCBsaXN0ZW5l
ciBjYWxsLgogICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZ2V0UmVjZWl2ZXJPYmplY3Qo
RXZlbnQqKTsKIAorICAgICAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZU51bWJlcjsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gSW1wbGVtZW50YXRpb24gb2Yg
RXZlbnRMaXN0ZW5lciBmdW5jdGlvbi4KKyAgICAgICAgdmlydHVhbCBib29sIHZpcnR1YWxpc0F0
dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBdHRyaWJ1dGU7IH0KKworICAgICAgICB2aXJ0
dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBqc2V2ZW50LCBFdmVudCopID0gMDsKKworICAgICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiBtX2xpc3RlbmVyOworCisgICAgICAgIC8vIEluZGljYXRlcyBpZiB0aGUg
YWJvdmUgaGFuZGxlIGlzIHdlYWsuCisgICAgICAgIGJvb2wgbV9pc1dlYWs7CisKKyAgICAgICAg
Ly8gSW5kaWNhdGVzIGlmIHRoaXMgaXMgYW4gSFRNTCB0eXBlIGxpc3RlbmVyLgorICAgICAgICBi
b29sIG1faXNBdHRyaWJ1dGU7CisKICAgICAgICAgLy8gRnJhbWUgdG8gd2hpY2ggdGhlIGV2ZW50
IGxpc3RlbmVyIGlzIGF0dGFjaGVkIHRvLiBBbiBldmVudCBsaXN0ZW5lciBtdXN0IGJlIGRlc3Ry
b3llZCBiZWZvcmUgaXRzIG93bmVyIGZyYW1lIGlzCiAgICAgICAgIC8vIGRlbGV0ZWQuIFNlZSBm
YXN0L2RvbS9yZXBsYWNlQ2hpbGQuaHRtbAogICAgICAgICAvLyBGSVhNRTogdGhpcyBjb3VsZCBo
b2xkIG1fZnJhbWUgbGl2ZSB1bnRpbCB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgZGVsZXRlZC4KQEAg
LTk3LDEwICsxMzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFBvc2l0aW9u
IGluIHRoZSBIVE1MIHNvdXJjZSBmb3IgSFRNTCBldmVudCBsaXN0ZW5lcnMuCiAgICAgICAgIGlu
dCBtX2xpbmVOdW1iZXI7CiAgICAgICAgIGludCBtX2NvbHVtbk51bWJlcjsKLQotICAgICAgICBm
cmllbmQgY2xhc3MgVjhFdmVudExpc3RlbmVyOwotICAgICAgICBmcmllbmQgY2xhc3MgVjhPYmpl
Y3RFdmVudExpc3RlbmVyOwotICAgICAgICBmcmllbmQgY2xhc3MgVjhMYXp5RXZlbnRMaXN0ZW5l
cjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
V3JhcHBlci5jcHAKaW5kZXggYWVhODRjMS4uZDdmYzJjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01XcmFwcGVyLmNwcApAQCAtMzYsMTggKzM2LDE5IEBACiAjaW5jbHVkZSAiRE9NT2JqZWN0c0lu
Y2x1ZGUuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uLmgiCiAjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlY4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5j
bHVkZSAiVjhDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNp
bmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5lckxpc3QuaCIK
ICNpbmNsdWRlICJWOEluZGV4LmgiCiAjaW5jbHVkZSAiVjhJc29sYXRlZFdvcmxkLmgiCi0jaW5j
bHVkZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2lu
Y2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgogCkBAIC0zOTMsNiArMzk0LDE1
IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOERPTVdyYXBwZXI6Omdl
dFRlbXBsYXRlKFY4Q2xhc3NJbmRleDo6VjhXCiAgICAgfQogI2VuZGlmIC8vIE5PVElGSUNBVElP
TlMKIAorI2lmIEVOQUJMRShTVkcpCisgICAgY2FzZSBWOENsYXNzSW5kZXg6OlNWR0VMRU1FTlRJ
TlNUQU5DRTogeworICAgICAgICAvLyBSZXNlcnZlIG9uZSBtb3JlIGludGVybmFsIGZpZWxkIGZv
ciBrZWVwaW5nIGV2ZW50IGxpc3RlbmVycy4KKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RU
ZW1wbGF0ZT4gaW5zdGFuY2VUZW1wbGF0ZSA9IGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUo
KTsKKyAgICAgICAgaW5zdGFuY2VUZW1wbGF0ZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KFY4Q3Vz
dG9tOjprU1ZHRWxlbWVudEluc3RhbmNlSW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBjYXNlIFY4Q2xh
c3NJbmRleDo6QUJTVFJBQ1RXT1JLRVI6IHsKICAgICAgICAgLy8gUmVzZXJ2ZSBvbmUgbW9yZSBp
bnRlcm5hbCBmaWVsZCBmb3Iga2VlcGluZyBldmVudCBsaXN0ZW5lcnMuCkBAIC0xMzk4LDEwICsx
NDA4LDggQEAgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBWOERPTVdyYXBwZXI6OmdldEV2ZW50
TGlzdGVuZXIoTm9kZSogbm9kZSwgdjg6OkxvY2FsPHYKICAgICBpZiAoIXByb3h5KQogICAgICAg
ICBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRl
cmVkQ29udGV4dCgpKTsKIAotICAgIGlmIChwcm94eSkgewotICAgICAgICBWOEV2ZW50TGlzdGVu
ZXJMaXN0KiBsaXN0ID0gcHJveHktPm9iamVjdExpc3RlbmVycygpOwotICAgICAgICByZXR1cm4g
ZmluZE9ubHkgPyBsaXN0LT5maW5kV3JhcHBlcih2YWx1ZSwgaXNBdHRyaWJ1dGUpIDogbGlzdC0+
ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOE9iamVjdEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgp
LCB2YWx1ZSwgaXNBdHRyaWJ1dGUpOwotICAgIH0KKyAgICBpZiAocHJveHkpCisgICAgICAgIHJl
dHVybiBmaW5kT25seSA/IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRXcmFwcGVyKHZhbHVlLCBp
c0F0dHJpYnV0ZSkgOiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4
RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBpc0F0dHJpYnV0ZSk7CiAKICAg
ICByZXR1cm4gMDsKIH0KQEAgLTE0MTEsNiArMTQxOSw3NiBAQCBQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihTVkdFbGVtZW50SW5zdGFuY2Uq
IGVsZQogICAgIHJldHVybiBnZXRFdmVudExpc3RlbmVyKGVsZW1lbnQtPmNvcnJlc3BvbmRpbmdF
bGVtZW50KCksIHZhbHVlLCBpc0F0dHJpYnV0ZSwgZmluZE9ubHkpOwogfQogCitQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihBYnN0cmFjdFdv
cmtlciogd29ya2VyLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0
ZSwgYm9vbCBmaW5kT25seSkKK3sKKyAgICBpZiAod29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmlzV29ya2VyQ29udGV4dCgpKSB7CisgICAgICAgIFdvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eSogd29ya2VyQ29udGV4dFByb3h5ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
OjpyZXRyaWV2ZSgpOworICAgICAgICBBU1NFUlQod29ya2VyQ29udGV4dFByb3h5KTsKKyAgICAg
ICAgcmV0dXJuIHdvcmtlckNvbnRleHRQcm94eS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2
YWx1ZSwgaXNBdHRyaWJ1dGUsIGZpbmRPbmx5KTsKKyAgICB9CisKKyAgICBWOFByb3h5KiBwcm94
eSA9IFY4UHJveHk6OnJldHJpZXZlKHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
KyAgICBpZiAocHJveHkpIHsKKyAgICAgICAgcmV0dXJuIGZpbmRPbmx5ID8gVjhFdmVudExpc3Rl
bmVyTGlzdDo6ZmluZFdyYXBwZXIodmFsdWUsIGlzQXR0cmlidXRlKSA6IFY4RXZlbnRMaXN0ZW5l
ckxpc3Q6OmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUo
KSwgdmFsdWUsIGlzQXR0cmlidXRlKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworI2lm
IEVOQUJMRShOT1RJRklDQVRJT05TKQorUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBWOERPTVdy
YXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBib29sIGZpbmRPbmx5KQor
eworICAgIGlmIChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNXb3Jr
ZXJDb250ZXh0KCkpIHsKKyAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiB3b3Jr
ZXJDb250ZXh0UHJveHkgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCk7
CisgICAgICAgIEFTU0VSVCh3b3JrZXJDb250ZXh0UHJveHkpOworICAgICAgICByZXR1cm4gd29y
a2VyQ29udGV4dFByb3h5LT5maW5kT3JDcmVhdGVFdmVudExpc3RlbmVyKHZhbHVlLCBpc0F0dHJp
YnV0ZSwgZmluZE9ubHkpOworICAgIH0KKworICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6
cmV0cmlldmUobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlm
IChwcm94eSkgeworICAgICAgICByZXR1cm4gZmluZE9ubHkgPyBWOEV2ZW50TGlzdGVuZXJMaXN0
OjpmaW5kV3JhcHBlcih2YWx1ZSwgaXNBdHRyaWJ1dGUpIDogVjhFdmVudExpc3RlbmVyTGlzdDo6
ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1
ZSwgaXNBdHRyaWJ1dGUpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKK1Bh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKFdv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBi
b29sIGlzQXR0cmlidXRlLCBib29sIGZpbmRPbmx5KQoreworICAgIFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eSogd29ya2VyQ29udGV4dFByb3h5ID0gd29ya2VyQ29udGV4dC0+c2NyaXB0KCkt
PnByb3h5KCk7CisgICAgaWYgKHdvcmtlckNvbnRleHRQcm94eSkKKyAgICAgICAgcmV0dXJuIHdv
cmtlckNvbnRleHRQcm94eS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2YWx1ZSwgaXNBdHRy
aWJ1dGUsIGZpbmRPbmx5KTsKKworICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihYTUxIdHRwUmVxdWVzdFVw
bG9hZCogdXBsb2FkLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0
ZSwgYm9vbCBmaW5kT25seSkKK3sKKyAgICByZXR1cm4gZ2V0RXZlbnRMaXN0ZW5lcih1cGxvYWQt
PmFzc29jaWF0ZWRYTUxIdHRwUmVxdWVzdCgpLCB2YWx1ZSwgaXNBdHRyaWJ1dGUsIGZpbmRPbmx5
KTsKK30KKworUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBWOERPTVdyYXBwZXI6OmdldEV2ZW50
TGlzdGVuZXIoRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgYm9vbCBmaW5kT25seSkKK3sKKyAgICBWOFByb3h5KiBw
cm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGV2ZW50VGFyZ2V0LT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOworICAgIGlmIChwcm94eSkKKyAgICAgICAgcmV0dXJuIGZpbmRPbmx5ID8gVjhFdmVu
dExpc3RlbmVyTGlzdDo6ZmluZFdyYXBwZXIodmFsdWUsIGlzQXR0cmlidXRlKSA6IFY4RXZlbnRM
aXN0ZW5lckxpc3Q6OmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94eS0+
ZnJhbWUoKSwgdmFsdWUsIGlzQXR0cmlidXRlKTsKKworI2lmIEVOQUJMRShXT1JLRVJTKQorICAg
IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogd29ya2VyQ29udGV4dFByb3h5ID0gV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpOworICAgIGlmICh3b3JrZXJDb250ZXh0
UHJveHkpCisgICAgICAgIHJldHVybiB3b3JrZXJDb250ZXh0UHJveHktPmZpbmRPckNyZWF0ZUV2
ZW50TGlzdGVuZXIodmFsdWUsIGlzQXR0cmlidXRlLCBmaW5kT25seSk7CisjZW5kaWYKKworICAg
IHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6
Z2V0RXZlbnRMaXN0ZW5lcihWOFByb3h5KiBwcm94eSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsIGJvb2wgaXNBdHRyaWJ1dGUsIGJvb2wgZmluZE9ubHkpCit7CisgICAgaWYgKHByb3h5KQor
ICAgICAgICByZXR1cm4gZmluZE9ubHkgPyBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kV3JhcHBl
cih2YWx1ZSwgaXNBdHRyaWJ1dGUpIDogVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZE9yQ3JlYXRl
V3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwgaXNBdHRyaWJ1
dGUpOworCisgICAgcmV0dXJuIDA7Cit9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdy
YXBwZXI6OmNvbnZlcnRET01JbXBsZW1lbnRhdGlvblRvVjhPYmplY3QoRE9NSW1wbGVtZW50YXRp
b24qIGltcGwpCiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBl
ci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAppbmRleCBhZTFmYjkxLi5l
ZWM0YTNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTIxOSw2ICsyMTksMjEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoU1ZHRWxlbWVudEluc3RhbmNlKiBlbGVtZW50LCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgYm9vbCBmaW5kT25s
eSk7CiAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRM
aXN0ZW5lcihBYnN0cmFjdFdvcmtlciogd29ya2VyLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgYm9vbCBmaW5kT25seSk7CisKKyNpZiBFTkFCTEUoTk9USUZJ
Q0FUSU9OUykKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZl
bnRMaXN0ZW5lcihOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIGJvb2wgZmluZE9ubHkpOworI2VuZGlmCisKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihX
b3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwg
Ym9vbCBpc0F0dHJpYnV0ZSwgYm9vbCBmaW5kT25seSk7CisKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihYTUxIdHRwUmVxdWVzdFVwbG9h
ZCogdXBsb2FkLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwg
Ym9vbCBmaW5kT25seSk7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gZ2V0RXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCogZXZlbnRUYXJnZXQsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBib29sIGZpbmRPbmx5KTsKKworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBnZXRFdmVudExpc3RlbmVyKFY4
UHJveHkqIHByb3h5LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0
ZSwgYm9vbCBmaW5kT25seSk7CisKKwogICAgICAgICAvLyBET01JbXBsZW1lbnRhdGlvbiBpcyBh
IHNpbmdsZXRvbiBhbmQgaXQgaXMgaGFuZGxlZCBpbiBhIHNwZWNpYWwKICAgICAgICAgLy8gd2F5
LiBBIHdyYXBwZXIgaXMgZ2VuZXJhdGVkIHBlciBkb2N1bWVudCBhbmQgc3RvcmVkIGluIGFuCiAg
ICAgICAgIC8vIGludGVybmFsIGZpZWxkIG9mIHRoZSBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3QuY3BwCmluZGV4IGM5YWFhMTIuLmUzN2Q2MzAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmNwcApAQCAtMzEsMTY1
ICszMSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVjhFdmVudExpc3RlbmVy
TGlzdC5oIgogCi0jaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yOjpWOEV2ZW50TGlzdGVu
ZXJMaXN0SXRlcmF0b3IoVjhFdmVudExpc3RlbmVyTGlzdCogbGlzdCkKLSAgICA6IG1fbGlzdChs
aXN0KQotICAgICwgbV92ZWN0b3JJbmRleCgwKQotICAgICwgbV9pdGVyKGxpc3QtPm1fdGFibGUu
YmVnaW4oKSkKLXsKLX0KLQotVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yOjpWOEV2ZW50TGlz
dGVuZXJMaXN0SXRlcmF0b3IoVjhFdmVudExpc3RlbmVyTGlzdCogbGlzdCwgYm9vbCBzaG91bGRT
ZWVrVG9FbmQpCi0gICAgOiBtX2xpc3QobGlzdCkKLSAgICAsIG1fdmVjdG9ySW5kZXgoMCkKLSAg
ICAsIG1faXRlcihsaXN0LT5tX3RhYmxlLmJlZ2luKCkpCi17Ci0gICAgaWYgKHNob3VsZFNlZWtU
b0VuZCkKLSAgICAgICAgc2Vla1RvRW5kKCk7Ci19Ci0KLVY4RXZlbnRMaXN0ZW5lckxpc3RJdGVy
YXRvcjo6flY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcigpIHsgfQotCi12b2lkIFY4RXZlbnRM
aXN0ZW5lckxpc3RJdGVyYXRvcjo6b3BlcmF0b3IrKygpCi17Ci0gICAgaWYgKG1faXRlciAhPSBt
X2xpc3QtPm1fdGFibGUuZW5kKCkpIHsKLSAgICAgICAgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+
KiB2ZWN0b3IgPSBtX2l0ZXItPnNlY29uZDsKLSAgICAgICAgaWYgKG1fdmVjdG9ySW5kZXggKyAx
IDwgdmVjdG9yLT5zaXplKCkpIHsKLSAgICAgICAgICAgIG1fdmVjdG9ySW5kZXgrKzsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX3ZlY3RvckluZGV4ID0gMDsKLSAg
ICAgICAgKyttX2l0ZXI7Ci0gICAgfQotfQotCi1ib29sIFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVy
YXRvcjo6b3BlcmF0b3I9PShjb25zdCBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3ImIG90aGVy
KQotewotICAgIHJldHVybiBvdGhlci5tX2l0ZXIgPT0gbV9pdGVyICYmIG90aGVyLm1fdmVjdG9y
SW5kZXggPT0gbV92ZWN0b3JJbmRleCAmJiBvdGhlci5tX2xpc3QgPT0gbV9saXN0OwotfQotCi1i
b29sIFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBWOEV2ZW50
TGlzdGVuZXJMaXN0SXRlcmF0b3ImIG90aGVyKQotewotICAgIHJldHVybiAhb3BlcmF0b3I9PShv
dGhlcik7Ci19Ci0KLVY4RXZlbnRMaXN0ZW5lciogVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9y
OjpvcGVyYXRvciooKQotewotICAgIGlmIChtX2l0ZXIgIT0gbV9saXN0LT5tX3RhYmxlLmVuZCgp
KSB7Ci0gICAgICAgIFZlY3RvcjxWOEV2ZW50TGlzdGVuZXIqPiogdmVjdG9yID0gbV9pdGVyLT5z
ZWNvbmQ7Ci0gICAgICAgIGlmIChtX3ZlY3RvckluZGV4IDwgdmVjdG9yLT5zaXplKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdmVjdG9yLT5hdChtX3ZlY3RvckluZGV4KTsKLSAgICB9Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLXZvaWQgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yOjpzZWVrVG9FbmQo
KQotewotICAgIG1faXRlciA9IG1fbGlzdC0+bV90YWJsZS5lbmQoKTsKLSAgICBtX3ZlY3Rvcklu
ZGV4ID0gMDsKLX0KLQotCi1WOEV2ZW50TGlzdGVuZXJMaXN0OjpWOEV2ZW50TGlzdGVuZXJMaXN0
KCkKLXsKLX0KLQotVjhFdmVudExpc3RlbmVyTGlzdDo6flY4RXZlbnRMaXN0ZW5lckxpc3QoKQot
ewotfQotCi1WOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3IgVjhFdmVudExpc3RlbmVyTGlzdDo6
YmVnaW4oKQotewotICAgIHJldHVybiBpdGVyYXRvcih0aGlzKTsKLX0KLQotVjhFdmVudExpc3Rl
bmVyTGlzdEl0ZXJhdG9yIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmVuZCgpCi17Ci0gICAgcmV0dXJu
IGl0ZXJhdG9yKHRoaXMsIHRydWUpOwotfQotCi0KLXN0YXRpYyBpbnQgZ2V0S2V5KHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBvYmplY3QpCi17Ci0gICAgLy8gMCBpcyBhIHNlbnRpbmVsIHZhbHVlIGZv
ciB0aGUgSGFzaE1hcCBrZXksIHNvIHdlIG1hcCBpdCB0byAxLgotICAgIGludCBoYXNoID0gb2Jq
ZWN0LT5HZXRJZGVudGl0eUhhc2goKTsKLSAgICBpZiAoIWhhc2gpCi0gICAgICAgIHJldHVybiAx
OwotICAgIHJldHVybiBoYXNoOwotfQotCi12b2lkIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmFkZChW
OEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQotewotICAgIEFTU0VSVCh2ODo6Q29udGV4dDo6SW5D
b250ZXh0KCkpOwotICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLQotICAgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBvYmplY3QgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsK
LSAgICBpbnQga2V5ID0gZ2V0S2V5KG9iamVjdCk7Ci0gICAgVmVjdG9yPFY4RXZlbnRMaXN0ZW5l
cio+KiB2ZWN0b3IgPSBtX3RhYmxlLmdldChrZXkpOwotICAgIGlmICghdmVjdG9yKSB7Ci0gICAg
ICAgIHZlY3RvciA9IG5ldyBWZWN0b3I8VjhFdmVudExpc3RlbmVyKj4oKTsKLSAgICAgICAgbV90
YWJsZS5zZXQoa2V5LCB2ZWN0b3IpOwotICAgIH0KLSAgICB2ZWN0b3ItPmFwcGVuZChsaXN0ZW5l
cik7Ci0gICAgbV9yZXZlcnNlVGFibGUuc2V0KGxpc3RlbmVyLCBrZXkpOwotfQotCi12b2lkIFY4
RXZlbnRMaXN0ZW5lckxpc3Q6OnJlbW92ZShWOEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQotewot
ICAgIGlmIChtX3JldmVyc2VUYWJsZS5jb250YWlucyhsaXN0ZW5lcikpIHsKLSAgICAgICAgaW50
IGtleSA9IG1fcmV2ZXJzZVRhYmxlLmdldChsaXN0ZW5lcik7Ci0gICAgICAgIFZlY3RvcjxWOEV2
ZW50TGlzdGVuZXIqPiogdmVjdG9yID0gbV90YWJsZS5nZXQoa2V5KTsKLSAgICAgICAgaWYgKCF2
ZWN0b3IpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwgdmVjdG9yLT5zaXplKCk7IGorKykgewotICAgICAgICAgICAgaWYgKHZlY3Rvci0+YXQoaikg
PT0gbGlzdGVuZXIpIHsKLSAgICAgICAgICAgICAgICB2ZWN0b3ItPnJlbW92ZShqKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIXZlY3Rvci0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
dGFibGUucmVtb3ZlKGtleSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2ZWN0b3I7Ci0g
ICAgICAgICAgICAgICAgICAgIHZlY3RvciA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIG1fcmV2ZXJzZVRhYmxlLnJlbW92ZShsaXN0ZW5lcik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFY4
RXZlbnRMaXN0ZW5lckxpc3Q6OmNsZWFyKCkKLXsKLSAgICBtX3RhYmxlLmNsZWFyKCk7Ci0gICAg
bV9yZXZlcnNlVGFibGUuY2xlYXIoKTsKLX0KLQotVjhFdmVudExpc3RlbmVyKiBWOEV2ZW50TGlz
dGVuZXJMaXN0OjpmaW5kKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QsIGJvb2wgaXNBdHRy
aWJ1dGUpCi17Ci0gICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7Ci0gICAgaW50
IGtleSA9IGdldEtleShvYmplY3QpOwotCi0gICAgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+KiB2
ZWN0b3IgPSBtX3RhYmxlLmdldChrZXkpOwotICAgIGlmICghdmVjdG9yKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yLT5zaXplKCk7IGkrKykg
ewotICAgICAgICBWOEV2ZW50TGlzdGVuZXIqIGVsZW1lbnQgPSB2ZWN0b3ItPmF0KGkpOwotICAg
ICAgICBpZiAoaXNBdHRyaWJ1dGUgPT0gZWxlbWVudC0+aXNBdHRyaWJ1dGUoKSAmJiBvYmplY3Qg
PT0gZWxlbWVudC0+Z2V0TGlzdGVuZXJPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVu
ZXI+IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRXcmFwcGVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+
IG9iamVjdCwgYm9vbCBpc0F0dHJpYnV0ZSkKLXsKLSAgICBBU1NFUlQodjg6OkNvbnRleHQ6Oklu
Q29udGV4dCgpKTsKLSAgICBpZiAoIW9iamVjdC0+SXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
OjpDYXN0IGluc3RlYWQ/Ci0gICAgcmV0dXJuIGZpbmQob2JqZWN0LT5Ub09iamVjdCgpLCBpc0F0
dHJpYnV0ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmgKaW5kZXggNDI1NTA1MC4uYTg2M2VkOSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmgKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmgKQEAgLTMyLDkyICszMiw3NCBAQAog
I2RlZmluZSBWOEV2ZW50TGlzdGVuZXJMaXN0X2gKIAogI2luY2x1ZGUgPHY4Lmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKICNpbmNsdWRlICJQ
YXNzUmVmUHRyLmgiCisjaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIEZyYW1lOwogICAgIGNsYXNzIFY4RXZlbnRMaXN0ZW5lcjsKLSAgICBjbGFzcyBWOEV2ZW50
TGlzdGVuZXJMaXN0SXRlcmF0b3I7CiAKLSAgICAvLyBUaGlzIGlzIGEgY29udGFpbmVyIGZvciBW
OEV2ZW50TGlzdGVuZXIgb2JqZWN0cyB0aGF0IHVzZXMgdGhlIGlkZW50aXR5IGhhc2ggb2YgdGhl
IHY4OjpPYmplY3QgdG8KLSAgICAvLyBzcGVlZCB1cCBsb29rdXBzCisgICAgLy8gVGhpcyBpcyBh
IGNvbnRhaW5lciBmb3IgVjhFdmVudExpc3RlbmVyIG9iamVjdHMgdGhhdCB1c2VzIGhpZGRlbiBw
cm9wZXJ0aWVzIG9mIHY4OjpPYmplY3QgdG8gc3BlZWQgdXAgbG9va3Vwcy4KICAgICBjbGFzcyBW
OEV2ZW50TGlzdGVuZXJMaXN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIC8vIEJlY2F1c2Ugdjg6
Ok9iamVjdCBpZGVudGl0eSBoYXNoZXMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSwg
d2UgdW5mb3J0dW5hdGVseSBjYW4ndCBqdXN0IG1hcAotICAgICAgICAvLyBhbiBpbnQgdG8gVjhF
dmVudExpc3RlbmVyLiBJbnN0ZWFkIHdlIGRlZmluZSBhIEhhc2hNYXAgb2YgaW50IHRvIFZlY3Rv
ciBvZiBWOEV2ZW50TGlzdGVuZXIKLSAgICAgICAgLy8gY2FsbGVkIGEgTGlzdGVuZXJNdWx0aU1h
cC4KLSAgICAgICAgdHlwZWRlZiBWZWN0b3I8VjhFdmVudExpc3RlbmVyKj4qIFZhbHVlczsKLSAg
ICAgICAgc3RydWN0IFZhbHVlc1RyYWl0cyA6IEhhc2hUcmFpdHM8VmFsdWVzPiB7Ci0gICAgICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKLSAgICAgICAg
fTsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVmFsdWVzLCBEZWZhdWx0SGFzaDxpbnQ+
OjpIYXNoLCBIYXNoVHJhaXRzPGludD4sIFZhbHVlc1RyYWl0cz4gTGlzdGVuZXJNdWx0aU1hcDsK
LQotICAgICAgICBWOEV2ZW50TGlzdGVuZXJMaXN0KCk7Ci0gICAgICAgIH5WOEV2ZW50TGlzdGVu
ZXJMaXN0KCk7Ci0KLSAgICAgICAgZnJpZW5kIGNsYXNzIFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVy
YXRvcjsKLSAgICAgICAgdHlwZWRlZiBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3IgaXRlcmF0
b3I7ICAgICAgICAKLQotICAgICAgICBpdGVyYXRvciBiZWdpbigpOwotICAgICAgICBpdGVyYXRv
ciBlbmQoKTsKLQotICAgICAgICB2b2lkIGFkZChWOEV2ZW50TGlzdGVuZXIqKTsKLSAgICAgICAg
dm9pZCByZW1vdmUoVjhFdmVudExpc3RlbmVyKik7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lciog
ZmluZCh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIGJvb2wgaXNBdHRyaWJ1dGUpOwotICAgICAgICB2
b2lkIGNsZWFyKCk7Ci0gICAgICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV90YWJsZS5zaXpl
KCk7IH0KLQotICAgICAgICBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gZmluZFdyYXBwZXIo
djg6OkxvY2FsPHY4OjpWYWx1ZT4sIGJvb2wgaXNBdHRyaWJ1dGUpOwotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBXcmFwcGVyVHlwZT4KLSAgICAgICAgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVu
ZXI+IGZpbmRPckNyZWF0ZVdyYXBwZXIoRnJhbWUqLCB2ODo6TG9jYWw8djg6OlZhbHVlPiwgYm9v
bCBpc0F0dHJpYnV0ZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5l
cj4gZmluZFdyYXBwZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1
dGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh2ODo6Q29udGV4dDo6SW5Db250ZXh0
KCkpOworICAgICAgICAgICAgaWYgKCF2YWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKIAotICAgIHByaXZhdGU6Ci0gICAgICAgIExpc3RlbmVyTXVsdGlNYXAgbV90
YWJsZTsKKyAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gd3JhcHBlclByb3BlcnR5
ID0gZ2V0SGlkZGVuUHJvcGVydHkoaXNBdHRyaWJ1dGUpOworICAgICAgICAgICAgcmV0dXJuIGRv
RmluZFdyYXBwZXIodjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSwgd3JhcHBlclBy
b3BlcnR5KTsKKyAgICAgICAgfQogCi0gICAgICAgIC8vIHdlIGFsc28ga2VlcCBhIHJldmVyc2Ug
bWFwcGluZyBvZiBWOEV2ZW50TGlzdGVuZXIgdG8gdjg6Ok9iamVjdCBpZGVudGl0eSBoYXNoLAot
ICAgICAgICAvLyBpbiBvcmRlciB0byBzcGVlZCB1cCByZW1vdmFsIGJ5IFY4RXZlbnRMaXN0ZW5l
cgotICAgICAgICBIYXNoTWFwPFY4RXZlbnRMaXN0ZW5lciosIGludD4gbV9yZXZlcnNlVGFibGU7
Ci0gICAgfTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlclR5cGUsIHR5cGVuYW1l
IENvbnRleHRUeXBlPgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+
IGZpbmRPckNyZWF0ZVdyYXBwZXIoQ29udGV4dFR5cGUqLCB2ODo6TG9jYWw8djg6OlZhbHVlPiwg
Ym9vbCBpc0F0dHJpYnV0ZSk7CisKKyAgICAgICAgc3RhdGljIHZvaWQgY2xlYXJXcmFwcGVyKHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gbGlzdGVuZXJPYmplY3QsIGJvb2wgaXNBdHRyaWJ1dGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gd3JhcHBlclByb3Bl
cnR5ID0gZ2V0SGlkZGVuUHJvcGVydHkoaXNBdHRyaWJ1dGUpOworICAgICAgICAgICAgbGlzdGVu
ZXJPYmplY3QtPkRlbGV0ZUhpZGRlblZhbHVlKHdyYXBwZXJQcm9wZXJ0eSk7CisgICAgICAgIH0K
IAotICAgIGNsYXNzIFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvciB7Ci0gICAgcHVibGljOgot
ICAgICAgICB+VjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yKCk7Ci0gICAgICAgIHZvaWQgb3Bl
cmF0b3IrKygpOwotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVjhFdmVudExpc3RlbmVy
TGlzdEl0ZXJhdG9yJik7Ci0gICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWOEV2ZW50TGlz
dGVuZXJMaXN0SXRlcmF0b3ImKTsKLSAgICAgICAgVjhFdmVudExpc3RlbmVyKiBvcGVyYXRvcioo
KTsKICAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgVjhFdmVudExpc3RlbmVyTGlz
dDsKLSAgICAgICAgZXhwbGljaXQgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yKFY4RXZlbnRM
aXN0ZW5lckxpc3QqKTsKLSAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yKFY4RXZl
bnRMaXN0ZW5lckxpc3QqLCBib29sIHNob3VsZFNlZWtUb0VuZCk7Ci0gICAgICAgIHZvaWQgc2Vl
a1RvRW5kKCk7Ci0KLSAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdCogbV9saXN0OwotICAgICAg
ICBWOEV2ZW50TGlzdGVuZXJMaXN0OjpMaXN0ZW5lck11bHRpTWFwOjppdGVyYXRvciBtX2l0ZXI7
Ci0gICAgICAgIHNpemVfdCBtX3ZlY3RvckluZGV4OworICAgICAgICBzdGF0aWMgVjhFdmVudExp
c3RlbmVyKiBkb0ZpbmRXcmFwcGVyKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QsIHY4OjpI
YW5kbGU8djg6OlN0cmluZz4gd3JhcHBlclByb3BlcnR5KQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQodjg6OkNvbnRleHQ6OkluQ29udGV4dCgpKTsKKyAgICAgICAgICAgIHY4OjpIYW5k
bGVTY29wZSBzY29wZTsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGxpc3RlbmVy
ID0gb2JqZWN0LT5HZXRIaWRkZW5WYWx1ZSh3cmFwcGVyUHJvcGVydHkpOworICAgICAgICAgICAg
aWYgKGxpc3RlbmVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWOEV2ZW50TGlzdGVuZXIqPih2ODo6RXh0ZXJuYWw6
OlVud3JhcChsaXN0ZW5lcikpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGlubGluZSB2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGdldEhpZGRlblByb3BlcnR5KGJvb2wgaXNBdHRyaWJ1dGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0F0dHJpYnV0ZSA/IFY4SGlkZGVuUHJv
cGVydHlOYW1lOjphdHRyaWJ1dGVMaXN0ZW5lcigpIDogVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6Omxp
c3RlbmVyKCk7CisgICAgICAgIH0KICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgV3Jh
cHBlclR5cGU+Ci0gICAgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IFY4RXZlbnRMaXN0ZW5l
ckxpc3Q6OmZpbmRPckNyZWF0ZVdyYXBwZXIoRnJhbWUqIGZyYW1lLCB2ODo6TG9jYWw8djg6OlZh
bHVlPiBvYmplY3QsIGJvb2wgaXNBdHRyaWJ1dGUpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgV3Jh
cHBlclR5cGUsIHR5cGVuYW1lIENvbnRleHRUeXBlPgorICAgIFBhc3NSZWZQdHI8VjhFdmVudExp
c3RlbmVyPiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyKENvbnRleHRU
eXBlKiBjb250ZXh0LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpOwotICAg
ICAgICBpZiAoIW9iamVjdC0+SXNPYmplY3QoKSkKKyAgICAgICAgaWYgKCF2YWx1ZS0+SXNPYmpl
Y3QoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
dGhpcyBiZSB2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QgaW5zdGVhZD8KLSAgICAgICAgVjhF
dmVudExpc3RlbmVyKiB3cmFwcGVyID0gZmluZChvYmplY3QtPlRvT2JqZWN0KCksIGlzQXR0cmli
dXRlKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpMb2NhbDx2
ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4g
d3JhcHBlclByb3BlcnR5ID0gZ2V0SGlkZGVuUHJvcGVydHkoaXNBdHRyaWJ1dGUpOworCisgICAg
ICAgIFY4RXZlbnRMaXN0ZW5lciogd3JhcHBlciA9IGRvRmluZFdyYXBwZXIob2JqZWN0LCB3cmFw
cGVyUHJvcGVydHkpOwogICAgICAgICBpZiAod3JhcHBlcikKICAgICAgICAgICAgIHJldHVybiB3
cmFwcGVyOwogCi0gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBvbmUsIGFuZCBhZGQgdG8gY2FjaGUu
Ci0gICAgICAgIFJlZlB0cjxXcmFwcGVyVHlwZT4gbmV3TGlzdGVuZXIgPSBXcmFwcGVyVHlwZTo6
Y3JlYXRlKGZyYW1lLCB2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3Qob2JqZWN0KSwgaXNBdHRy
aWJ1dGUpOwotICAgICAgICBhZGQobmV3TGlzdGVuZXIuZ2V0KCkpOworICAgICAgICBQYXNzUmVm
UHRyPFY4RXZlbnRMaXN0ZW5lcj4gd3JhcHBlclB0ciA9IFdyYXBwZXJUeXBlOjpjcmVhdGUoY29u
dGV4dCwgb2JqZWN0LCBpc0F0dHJpYnV0ZSk7CisgICAgICAgIGlmICh3cmFwcGVyUHRyKQorICAg
ICAgICAgICAgb2JqZWN0LT5TZXRIaWRkZW5WYWx1ZSh3cmFwcGVyUHJvcGVydHksIHY4OjpFeHRl
cm5hbDo6V3JhcCh3cmFwcGVyUHRyLmdldCgpKSk7CiAKLSAgICAgICAgcmV0dXJuIG5ld0xpc3Rl
bmVyOwotICAgIH07CisgICAgICAgIHJldHVybiB3cmFwcGVyUHRyOworICAgIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlk
ZGVuUHJvcGVydHlOYW1lLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0
eU5hbWUuY3BwCmluZGV4IDE2YWMyMzIuLjVhMmU4NjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuY3BwCkBAIC00Nyw4ICs0NywyMyBAQCB2ODo6SGFuZGxl
PHY4OjpTdHJpbmc+IFY4SGlkZGVuUHJvcGVydHlOYW1lOjppc29sYXRlZFdvcmxkKCkKICAgICBy
ZXR1cm4gKnN0cmluZzsKIH0KIAordjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBWOEhpZGRlblByb3Bl
cnR5TmFtZTo6bGlzdGVuZXIoKQoreworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6U3Ry
aW5nPiogc3RyaW5nID0gY3JlYXRlU3RyaW5nKCJXZWJDb3JlOjpWOEhpZGRlblByb3BlcnR5TmFt
ZTo6bGlzdGVuZXIiKTsKKworICAgIHJldHVybiAqc3RyaW5nOworfQorCit2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IFY4SGlkZGVuUHJvcGVydHlOYW1lOjphdHRyaWJ1dGVMaXN0ZW5lcigpCit7Cisg
ICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+KiBzdHJpbmcgPSBjcmVhdGVTdHJp
bmcoIldlYkNvcmU6OlY4SGlkZGVuUHJvcGVydHlOYW1lOjphdHRyaWJ1dGVMaXN0ZW5lciIpOwor
CisgICAgcmV0dXJuICpzdHJpbmc7Cit9CisKIHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+KiBW
OEhpZGRlblByb3BlcnR5TmFtZTo6Y3JlYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGtleSkKIHsKKyAg
ICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAgICAgcmV0dXJuIG5ldyB2ODo6UGVyc2lzdGVudDx2
ODo6U3RyaW5nPih2ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPjo6TmV3KHY4OjpTdHJpbmc6Ok5l
d1N5bWJvbChrZXkpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhI
aWRkZW5Qcm9wZXJ0eU5hbWUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0
eU5hbWUuaAppbmRleCA4NzRiNTI1Li5kYmU5OTJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEhpZGRlblByb3BlcnR5TmFtZS5oCkBAIC0zOSw2ICszOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IG9i
amVjdFByb3RvdHlwZSgpOwogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBp
c29sYXRlZFdvcmxkKCk7CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGxp
c3RlbmVyKCk7CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGF0dHJpYnV0
ZUxpc3RlbmVyKCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3Rl
bnQ8djg6OlN0cmluZz4qIGNyZWF0ZVN0cmluZyhjb25zdCBjaGFyKiBrZXkpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggY2NmMzJhNy4uNDZmNTY0
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCkBAIC0z
NywxOTUgKzM3LDEwNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVY4TGF6eUV2ZW50TGlz
dGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIoRnJhbWUgKmZyYW1lLCBjb25zdCBTdHJpbmcmIGNv
ZGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQpCitWOExhenlF
dmVudExpc3RlbmVyOjpWOExhenlFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50KQog
ICAgIDogVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoZnJhbWUsIHRydWUpCiAgICAgLCBtX2NvZGUo
Y29kZSkKICAgICAsIG1fZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSkKICAgICAsIG1faXNTVkdF
dmVudChpc1NWR0V2ZW50KQotICAgICwgbV9jb21waWxlZChmYWxzZSkKLSAgICAsIG1fd3JhcHBl
ZEZ1bmN0aW9uQ29tcGlsZWQoZmFsc2UpCiB7CiB9CiAKLVY4TGF6eUV2ZW50TGlzdGVuZXI6On5W
OExhenlFdmVudExpc3RlbmVyKCkKLXsKLSAgICBkaXNwb3NlTGlzdGVuZXJPYmplY3QoKTsKLQot
ICAgIC8vIERpc3Bvc2Ugd3JhcHBlZCBmdW5jdGlvbgotICAgIGlmICghbV93cmFwcGVkRnVuY3Rp
b24uSXNFbXB0eSgpKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBWOEdDQ29udHJvbGxlcjo6
dW5yZWdpc3Rlckdsb2JhbEhhbmRsZSh0aGlzLCBtX3dyYXBwZWRGdW5jdGlvbik7Ci0jZW5kaWYK
LSAgICAgICAgbV93cmFwcGVkRnVuY3Rpb24uRGlzcG9zZSgpOwotICAgICAgICBtX3dyYXBwZWRG
dW5jdGlvbi5DbGVhcigpOwotICAgIH0KLX0KLQotdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhM
YXp5RXZlbnRMaXN0ZW5lcjo6Z2V0TGlzdGVuZXJGdW5jdGlvbigpCi17Ci0gICAgaWYgKG1fY29t
cGlsZWQpIHsKLSAgICAgICAgQVNTRVJUKG1fbGlzdGVuZXIuSXNFbXB0eSgpIHx8IG1fbGlzdGVu
ZXItPklzRnVuY3Rpb24oKSk7Ci0gICAgICAgIHJldHVybiBtX2xpc3RlbmVyLklzRW1wdHkoKSA/
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCkgOiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6TmV3
KHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46OkNhc3QobV9saXN0ZW5lcikpOwotICAgIH0K
LQotICAgIG1fY29tcGlsZWQgPSB0cnVlOwotCi0gICAgQVNTRVJUKG1fZnJhbWUpOwotCi0gICAg
ewotICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIGNvbnRleHQgb2YgbV9mcmFtZS4KLSAgICAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotCi0gICAgICAgIC8vIFVzZSB0aGUgb3V0ZXIg
c2NvcGUgdG8gaG9sZCBjb250ZXh0LgotICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2
OENvbnRleHQgPSBWOFByb3h5OjptYWluV29ybGRDb250ZXh0KG1fZnJhbWUpOwotICAgICAgICAv
LyBCYWlsIG91dCBpZiB3ZSBjb3VsZCBub3QgZ2V0IHRoZSBjb250ZXh0LgotICAgICAgICBpZiAo
djhDb250ZXh0LklzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1
bmN0aW9uPigpOwotCi0gICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQp
OwotCi0gICAgICAgIC8vIFdyYXAgZnVuY3Rpb24gYXJvdW5kIHRoZSBldmVudCBjb2RlLiAgVGhl
IHBhcmVudGhlc2lzIGFyb3VuZCB0aGUgZnVuY3Rpb24gYXJlIG5lZWRlZCBzbyB0aGF0IGV2YWx1
YXRpbmcgdGhlIGNvZGUgeWllbGRzCi0gICAgICAgIC8vIHRoZSBmdW5jdGlvbiB2YWx1ZS4gIFdp
dGhvdXQgdGhlIHBhcmVudGhlc2lzIHRoZSBmdW5jdGlvbiB2YWx1ZSBpcyB0aHJvd24gYXdheS4K
LQotICAgICAgICAvLyBNYWtlIGl0IGFuIGFub255bW91cyBmdW5jdGlvbiB0byBhdm9pZCBuYW1l
IGNvbmZsaWN0IGZvciBjYXNlcyBsaWtlCi0gICAgICAgIC8vIDxib2R5IG9ubG9hZD0nb25sb2Fk
KCknPgotICAgICAgICAvLyA8c2NyaXB0PiBmdW5jdGlvbiBvbmxvYWQoKSB7IGFsZXJ0KCdoaScp
OyB9IDwvc2NyaXB0Pi4KLSAgICAgICAgLy8gU2V0IGZ1bmN0aW9uIG5hbWUgdG8gZnVuY3Rpb24g
b2JqZWN0IGluc3RlYWQuCi0gICAgICAgIC8vIFNlZSBpc3N1ZSA5NDQ2OTAuCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIFRoZSBFQ01BU2NyaXB0IHNwZWMgc2F5cyAodmVyeSBvYmxpcXVlbHkpIHRo
YXQgdGhlIHBhcmFtZXRlciB0byBhbiBldmVudCBoYW5kbGVyIGlzIG5hbWVkICJldnQiLgotICAg
ICAgICAvLwotICAgICAgICAvLyBEb24ndCB1c2UgbmV3IGxpbmVzIHNvIHRoYXQgbGluZXMgaW4g
dGhlIG1vZGlmaWVkIGhhbmRsZXIKLSAgICAgICAgLy8gaGF2ZSB0aGUgc2FtZSBudW1iZXJzIGFz
IGluIHRoZSBvcmlnaW5hbCBjb2RlLgotICAgICAgICBTdHJpbmcgY29kZSA9ICIoZnVuY3Rpb24g
KGV2dCkgeyI7Ci0gICAgICAgIGNvZGUuYXBwZW5kKG1fY29kZSk7Ci0gICAgICAgIGNvZGUuYXBw
ZW5kKCJcbn0pIik7Ci0KLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlRXh0ZXJu
YWxTdHJpbmcgPSB2OEV4dGVybmFsU3RyaW5nKGNvZGUpOwotICAgICAgICB2ODo6SGFuZGxlPHY4
OjpTY3JpcHQ+IHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZUV4dGVybmFsU3Ry
aW5nLCBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSwgbV9saW5lTnVtYmVyIC0gMSk7Ci0gICAg
ICAgIGlmICghc2NyaXB0LklzRW1wdHkoKSkgewotICAgICAgICAgICAgVjhQcm94eSogcHJveHkg
PSBWOFByb3h5OjpyZXRyaWV2ZShtX2ZyYW1lKTsKLSAgICAgICAgICAgIEFTU0VSVChwcm94eSk7
Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IHByb3h5LT5ydW5TY3Jp
cHQoc2NyaXB0LCBmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkgewot
ICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNGdW5jdGlvbigpKTsKLSAgICAgICAgICAg
ICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBsaXN0ZW5lckZ1bmN0aW9uID0gdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj46OkNhc3QodmFsdWUpOwotICAgICAgICAgICAgICAgIGxpc3RlbmVyRnVu
Y3Rpb24tPlNldE5hbWUodjg6OlN0cmluZzo6TmV3KGZyb21XZWJDb3JlU3RyaW5nKG1fZnVuY3Rp
b25OYW1lKSwgbV9mdW5jdGlvbk5hbWUubGVuZ3RoKCkpKTsKLQotICAgICAgICAgICAgICAgIG1f
bGlzdGVuZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+OjpOZXcobGlzdGVuZXJGdW5j
dGlvbik7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgICAgIFY4R0NDb250cm9sbGVyOjpy
ZWdpc3Rlckdsb2JhbEhhbmRsZShFVkVOVF9MSVNURU5FUiwgdGhpcywgbV9saXN0ZW5lcik7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEFTU0VSVChtX2xp
c3RlbmVyLklzRW1wdHkoKSB8fCBtX2xpc3RlbmVyLT5Jc0Z1bmN0aW9uKCkpOwotICAgIHJldHVy
biBtX2xpc3RlbmVyLklzRW1wdHkoKSA/IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCkgOiB2ODo6
TG9jYWw8djg6OkZ1bmN0aW9uPjo6TmV3KHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46OkNh
c3QobV9saXN0ZW5lcikpOwotfQotCiB2ODo6TG9jYWw8djg6OlZhbHVlPiBWOExhenlFdmVudExp
c3RlbmVyOjpjYWxsTGlzdGVuZXJGdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVu
dCwgRXZlbnQqIGV2ZW50KQogewotICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGhhbmRsZXJG
dW5jdGlvbiA9IGdldFdyYXBwZWRMaXN0ZW5lckZ1bmN0aW9uKCk7CisgICAgdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj4gaGFuZGxlckZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNh
c3QoZ2V0TGlzdGVuZXJPYmplY3QoKSk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHJlY2Vp
dmVyID0gZ2V0UmVjZWl2ZXJPYmplY3QoZXZlbnQpOwogICAgIGlmIChoYW5kbGVyRnVuY3Rpb24u
SXNFbXB0eSgpIHx8IHJlY2VpdmVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+KCk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcGFyYW1ldGVyc1sx
XSA9IHsganNFdmVudCB9OwogCi0gICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2
ZShtX2ZyYW1lKTsKKyAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGZyYW1l
KCkpOwogICAgIHJldHVybiBwcm94eS0+Y2FsbEZ1bmN0aW9uKGhhbmRsZXJGdW5jdGlvbiwgcmVj
ZWl2ZXIsIDEsIHBhcmFtZXRlcnMpOwogfQogCi0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhMYXp5RXZlbnRMaXN0ZW5lclRvU3RyaW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CiB7CiAgICAgcmV0dXJuIGFyZ3MuQ2FsbGVlKCktPkdldEhpZGRlblZhbHVlKHY4OjpTdHJpbmc6
Ok5ldygidG9TdHJpbmdTdHJpbmciKSk7CiB9CiAKLQotdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4g
VjhMYXp5RXZlbnRMaXN0ZW5lcjo6Z2V0V3JhcHBlZExpc3RlbmVyRnVuY3Rpb24oKQordm9pZCBW
OExhenlFdmVudExpc3RlbmVyOjpwcmVwYXJlTGlzdGVuZXJPYmplY3QoKQogewotICAgIGlmICht
X3dyYXBwZWRGdW5jdGlvbkNvbXBpbGVkKSB7Ci0gICAgICAgIEFTU0VSVChtX3dyYXBwZWRGdW5j
dGlvbi5Jc0VtcHR5KCkgfHwgbV93cmFwcGVkRnVuY3Rpb24tPklzRnVuY3Rpb24oKSk7Ci0gICAg
ICAgIHJldHVybiBtX3dyYXBwZWRGdW5jdGlvbi5Jc0VtcHR5KCkgPyB2ODo6TG9jYWw8djg6OkZ1
bmN0aW9uPigpIDogdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46Ok5ldyhtX3dyYXBwZWRGdW5jdGlv
bik7Ci0gICAgfQotCi0gICAgbV93cmFwcGVkRnVuY3Rpb25Db21waWxlZCA9IHRydWU7Ci0KLSAg
ICB7Ci0gICAgICAgIC8vIFN3aXRjaCB0byB0aGUgY29udGV4dCBvZiBtX2ZyYW1lLgotICAgICAg
ICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0KLSAgICAgICAgLy8gVXNlIHRoZSBvdXRl
ciBzY29wZSB0byBob2xkIGNvbnRleHQuCi0gICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IHY4Q29udGV4dCA9IFY4UHJveHk6Om1haW5Xb3JsZENvbnRleHQobV9mcmFtZSk7Ci0gICAgICAg
IC8vIEJhaWwgb3V0IGlmIHdlIGNhbm5vdCBnZXQgdGhlIGNvbnRleHQuCi0gICAgICAgIGlmICh2
OENvbnRleHQuSXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+KCk7Ci0KLSAgICAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7
Ci0KLSAgICAgICAgLy8gRklYTUU6IGNhY2hlIHRoZSB3cmFwcGVyIGZ1bmN0aW9uLgotCi0gICAg
ICAgIC8vIE5vZGVzIG90aGVyIHRoYW4gdGhlIGRvY3VtZW50IG9iamVjdCwgd2hlbiBleGVjdXRp
bmcgaW5saW5lIGV2ZW50IGhhbmRsZXJzIHB1c2ggZG9jdW1lbnQsIGZvcm0sIGFuZCB0aGUgdGFy
Z2V0IG5vZGUgb24gdGhlIHNjb3BlIGNoYWluLgotICAgICAgICAvLyBXZSBkbyB0aGlzIGJ5IHVz
aW5nICd3aXRoJyBzdGF0ZW1lbnQuCi0gICAgICAgIC8vIFNlZSBjaHJvbWUvZmFzdC9mb3Jtcy9m
b3JtLWFjdGlvbi5odG1sCi0gICAgICAgIC8vICAgICBjaHJvbWUvZmFzdC9mb3Jtcy9zZWxlY3Rl
ZC1pbmRleC12YWx1ZS5odG1sCi0gICAgICAgIC8vICAgICBiYXNlL2Zhc3Qvb3ZlcmZsb3cvb25z
Y3JvbGwtbGF5ZXItc2VsZi1kZXN0cnVjdC5odG1sCi0gICAgICAgIC8vCi0gICAgICAgIC8vIERv
bid0IHVzZSBuZXcgbGluZXMgc28gdGhhdCBsaW5lcyBpbiB0aGUgbW9kaWZpZWQgaGFuZGxlcgot
ICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIG51bWJlcnMgYXMgaW4gdGhlIG9yaWdpbmFsIGNvZGUu
Ci0gICAgICAgIFN0cmluZyBjb2RlID0gIihmdW5jdGlvbiAoZXZ0KSB7IiBcCi0gICAgICAgICAg
ICAgICAgICAgICAgIndpdGggKHRoaXMub3duZXJEb2N1bWVudCA/IHRoaXMub3duZXJEb2N1bWVu
dCA6IHt9KSB7IiBcCi0gICAgICAgICAgICAgICAgICAgICAgIndpdGggKHRoaXMuZm9ybSA/IHRo
aXMuZm9ybSA6IHt9KSB7IiBcCi0gICAgICAgICAgICAgICAgICAgICAgIndpdGggKHRoaXMpIHsi
IFwKLSAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIChmdW5jdGlvbihldnQpeyI7Ci0gICAg
ICAgIGNvZGUuYXBwZW5kKG1fY29kZSk7Ci0gICAgICAgIC8vIEluc2VydCAnXG4nIG90aGVyd2lz
ZSAvLy1zdHlsZSBjb21tZW50cyBjb3VsZCBicmVhayB0aGUgaGFuZGxlci4KLSAgICAgICAgY29k
ZS5hcHBlbmQoICAiXG59KS5jYWxsKHRoaXMsIGV2dCk7fX19fSkiKTsKLSAgICAgICAgdjg6Okhh
bmRsZTx2ODo6U3RyaW5nPiBjb2RlRXh0ZXJuYWxTdHJpbmcgPSB2OEV4dGVybmFsU3RyaW5nKGNv
ZGUpOwotICAgICAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCA9IFY4UHJveHk6OmNv
bXBpbGVTY3JpcHQoY29kZUV4dGVybmFsU3RyaW5nLCBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwo
KSwgbV9saW5lTnVtYmVyKTsKLSAgICAgICAgaWYgKCFzY3JpcHQuSXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG1fZnJhbWUpOwotICAg
ICAgICAgICAgQVNTRVJUKHByb3h5KTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHZhbHVlID0gcHJveHktPnJ1blNjcmlwdChzY3JpcHQsIGZhbHNlKTsKLSAgICAgICAgICAgIGlm
ICghdmFsdWUuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc0Z1
bmN0aW9uKCkpOwotCi0gICAgICAgICAgICAgICAgbV93cmFwcGVkRnVuY3Rpb24gPSB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb24+OjpOZXcodjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3Qo
dmFsdWUpKTsKLQotICAgICAgICAgICAgICAgIC8vIENoYW5nZSB0aGUgdG9TdHJpbmcgZnVuY3Rp
b24gb24gdGhlIHdyYXBwZXIgZnVuY3Rpb24gdG8gYXZvaWQgaXQgcmV0dXJuaW5nIHRoZSBzb3Vy
Y2UgZm9yIHRoZSBhY3R1YWwgd3JhcHBlciBmdW5jdGlvbi4gSW5zdGVhZAotICAgICAgICAgICAg
ICAgIC8vIGl0IHJldHVybnMgc291cmNlIGZvciBhIGNsZWFuIHdyYXBwZXIgZnVuY3Rpb24gd2l0
aCB0aGUgZXZlbnQgYXJndW1lbnQgd3JhcHBpbmcgdGhlIGV2ZW50IHNvdXJjZSBjb2RlLiBUaGUg
cmVhc29uIGZvciB0aGlzCi0gICAgICAgICAgICAgICAgLy8gaXMgdGhhdCBzb21lIHdlYiBzaXRl
cyB1c2VzIHRvU3RyaW5nIG9uIGV2ZW50IGZ1bmN0aW9ucyBhbmQgdGhlIGV2YWxzIHRoZSBzb3Vy
Y2UgcmV0dXJuZWQgKHNvbWUgdGltZXMgYSBSZWdFeHAgaXMgYXBwbGllZCBhcwotICAgICAgICAg
ICAgICAgIC8vIHdlbGwpIGZvciBzb21lIG90aGVyIHVzZS4gVGhhdCBmYWlscyBtaXNlcmFibHkg
aWYgdGhlIGFjdHVhbCB3cmFwcGVyIHNvdXJjZSBpcyByZXR1cm5lZC4KLSAgICAgICAgICAgICAg
ICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRvU3RyaW5nVGVtcGxhdGUgPSB2ODo6
RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFY4TGF6eUV2ZW50TGlzdGVuZXJUb1N0cmluZyk7Ci0gICAg
ICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gdG9TdHJpbmdGdW5jdGlvbjsKLSAg
ICAgICAgICAgICAgICBpZiAoIXRvU3RyaW5nVGVtcGxhdGUuSXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgICAgICB0b1N0cmluZ0Z1bmN0aW9uID0gdG9TdHJpbmdUZW1wbGF0ZS0+R2V0RnVuY3Rp
b24oKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRvU3RyaW5nRnVuY3Rpb24uSXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyB0b1N0cmluZ1Jlc3VsdCA9ICJmdW5jdGlvbiAi
OwotICAgICAgICAgICAgICAgICAgICB0b1N0cmluZ1Jlc3VsdC5hcHBlbmQobV9mdW5jdGlvbk5h
bWUpOwotICAgICAgICAgICAgICAgICAgICB0b1N0cmluZ1Jlc3VsdC5hcHBlbmQoIigiKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1faXNTVkdFdmVudCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRvU3RyaW5nUmVzdWx0LmFwcGVuZCgiZXZ0Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nUmVzdWx0LmFwcGVuZCgiZXZlbnQi
KTsKLSAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdSZXN1bHQuYXBwZW5kKCIpIHtcbiAgIik7
Ci0gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nUmVzdWx0LmFwcGVuZChtX2NvZGUpOwotICAg
ICAgICAgICAgICAgICAgICB0b1N0cmluZ1Jlc3VsdC5hcHBlbmQoIlxufSIpOwotICAgICAgICAg
ICAgICAgICAgICB0b1N0cmluZ0Z1bmN0aW9uLT5TZXRIaWRkZW5WYWx1ZSh2ODo6U3RyaW5nOjpO
ZXcoInRvU3RyaW5nU3RyaW5nIiksIHY4RXh0ZXJuYWxTdHJpbmcodG9TdHJpbmdSZXN1bHQpKTsK
LSAgICAgICAgICAgICAgICAgICAgbV93cmFwcGVkRnVuY3Rpb24tPlNldCh2ODo6U3RyaW5nOjpO
ZXcoInRvU3RyaW5nIiksIHRvU3RyaW5nRnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIH0KLQot
I2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgICAgICBWOEdDQ29udHJvbGxlcjo6cmVnaXN0ZXJH
bG9iYWxIYW5kbGUoRVZFTlRfTElTVEVORVIsIHRoaXMsIG1fd3JhcHBlZEZ1bmN0aW9uKTsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIG1fd3JhcHBlZEZ1bmN0aW9uLT5TZXROYW1lKHY4OjpTdHJp
bmc6Ok5ldyhmcm9tV2ViQ29yZVN0cmluZyhtX2Z1bmN0aW9uTmFtZSksIG1fZnVuY3Rpb25OYW1l
Lmxlbmd0aCgpKSk7CisgICAgaWYgKGhhc0V4aXN0aW5nTGlzdGVuZXJPYmplY3QoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gU3dpdGNoIHRvIHRoZSBjb250ZXh0IG9mIG1fZnJhbWUuCisg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisgICAgLy8gVXNlIHRoZSBvdXRlciBz
Y29wZSB0byBob2xkIGNvbnRleHQuCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250
ZXh0ID0gVjhQcm94eTo6bWFpbldvcmxkQ29udGV4dChmcmFtZSgpKTsKKyAgICAvLyBCYWlsIG91
dCBpZiB3ZSBjYW5ub3QgZ2V0IHRoZSBjb250ZXh0LgorICAgIGlmICh2OENvbnRleHQuSXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUodjhD
b250ZXh0KTsKKworICAgIC8vIEZJWE1FOiBjYWNoZSB0aGUgd3JhcHBlciBmdW5jdGlvbi4KKwor
ICAgIC8vIE5vZGVzIG90aGVyIHRoYW4gdGhlIGRvY3VtZW50IG9iamVjdCwgd2hlbiBleGVjdXRp
bmcgaW5saW5lIGV2ZW50IGhhbmRsZXJzIHB1c2ggZG9jdW1lbnQsIGZvcm0sIGFuZCB0aGUgdGFy
Z2V0IG5vZGUgb24gdGhlIHNjb3BlIGNoYWluLgorICAgIC8vIFdlIGRvIHRoaXMgYnkgdXNpbmcg
J3dpdGgnIHN0YXRlbWVudC4KKyAgICAvLyBTZWUgY2hyb21lL2Zhc3QvZm9ybXMvZm9ybS1hY3Rp
b24uaHRtbAorICAgIC8vICAgICBjaHJvbWUvZmFzdC9mb3Jtcy9zZWxlY3RlZC1pbmRleC12YWx1
ZS5odG1sCisgICAgLy8gICAgIGJhc2UvZmFzdC9vdmVyZmxvdy9vbnNjcm9sbC1sYXllci1zZWxm
LWRlc3RydWN0Lmh0bWwKKyAgICAvLworICAgIC8vIERvbid0IHVzZSBuZXcgbGluZXMgc28gdGhh
dCBsaW5lcyBpbiB0aGUgbW9kaWZpZWQgaGFuZGxlcgorICAgIC8vIGhhdmUgdGhlIHNhbWUgbnVt
YmVycyBhcyBpbiB0aGUgb3JpZ2luYWwgY29kZS4KKyAgICBTdHJpbmcgY29kZSA9ICIoZnVuY3Rp
b24gKGV2dCkgeyIgXAorICAgICAgICAgICAgIndpdGggKHRoaXMub3duZXJEb2N1bWVudCA/IHRo
aXMub3duZXJEb2N1bWVudCA6IHt9KSB7IiBcCisgICAgICAgICAgICAid2l0aCAodGhpcy5mb3Jt
ID8gdGhpcy5mb3JtIDoge30pIHsiIFwKKyAgICAgICAgICAgICJ3aXRoICh0aGlzKSB7IiBcCisg
ICAgICAgICAgICAicmV0dXJuIChmdW5jdGlvbihldnQpeyI7CisgICAgY29kZS5hcHBlbmQobV9j
b2RlKTsKKyAgICAvLyBJbnNlcnQgJ1xuJyBvdGhlcndpc2UgLy8tc3R5bGUgY29tbWVudHMgY291
bGQgYnJlYWsgdGhlIGhhbmRsZXIuCisgICAgY29kZS5hcHBlbmQoICAiXG59KS5jYWxsKHRoaXMs
IGV2dCk7fX19fSkiKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGVFeHRlcm5hbFN0
cmluZyA9IHY4RXh0ZXJuYWxTdHJpbmcoY29kZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0
PiBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRlcm5hbFN0cmluZywgZnJh
bWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCksIGxpbmVOdW1iZXIoKSk7CisgICAgaWYgKCFzY3JpcHQu
SXNFbXB0eSgpKSB7CisgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUo
ZnJhbWUoKSk7CisgICAgICAgIEFTU0VSVChwcm94eSk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlID0gcHJveHktPnJ1blNjcmlwdChzY3JpcHQsIGZhbHNlKTsKKyAgICAgICAg
aWYgKCF2YWx1ZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNGdW5j
dGlvbigpKTsKKworICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gd3JhcHBlZEZ1
bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QodmFsdWUpOworCisgICAgICAg
ICAgICAvLyBDaGFuZ2UgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIG9uIHRoZSB3cmFwcGVyIGZ1bmN0
aW9uIHRvIGF2b2lkIGl0IHJldHVybmluZyB0aGUgc291cmNlIGZvciB0aGUgYWN0dWFsIHdyYXBw
ZXIgZnVuY3Rpb24uIEluc3RlYWQKKyAgICAgICAgICAgIC8vIGl0IHJldHVybnMgc291cmNlIGZv
ciBhIGNsZWFuIHdyYXBwZXIgZnVuY3Rpb24gd2l0aCB0aGUgZXZlbnQgYXJndW1lbnQgd3JhcHBp
bmcgdGhlIGV2ZW50IHNvdXJjZSBjb2RlLiBUaGUgcmVhc29uIGZvciB0aGlzCisgICAgICAgICAg
ICAvLyBpcyB0aGF0IHNvbWUgd2ViIHNpdGVzIHVzZXMgdG9TdHJpbmcgb24gZXZlbnQgZnVuY3Rp
b25zIGFuZCB0aGUgZXZhbHMgdGhlIHNvdXJjZSByZXR1cm5lZCAoc29tZSB0aW1lcyBhIFJlZ0V4
cCBpcyBhcHBsaWVkIGFzCisgICAgICAgICAgICAvLyB3ZWxsKSBmb3Igc29tZSBvdGhlciB1c2Uu
IFRoYXQgZmFpbHMgbWlzZXJhYmx5IGlmIHRoZSBhY3R1YWwgd3JhcHBlciBzb3VyY2UgaXMgcmV0
dXJuZWQuCisgICAgICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRvU3Ry
aW5nVGVtcGxhdGUgPSB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFY4TGF6eUV2ZW50TGlzdGVu
ZXJUb1N0cmluZyk7CisgICAgICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiB0b1N0cmlu
Z0Z1bmN0aW9uOworICAgICAgICAgICAgaWYgKCF0b1N0cmluZ1RlbXBsYXRlLklzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICB0b1N0cmluZ0Z1bmN0aW9uID0gdG9TdHJpbmdUZW1wbGF0ZS0+R2V0
RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmICghdG9TdHJpbmdGdW5jdGlvbi5Jc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdG9TdHJpbmdSZXN1bHQgPSAiZnVuY3Rpb24gIjsK
KyAgICAgICAgICAgICAgICB0b1N0cmluZ1Jlc3VsdC5hcHBlbmQobV9mdW5jdGlvbk5hbWUpOwor
ICAgICAgICAgICAgICAgIHRvU3RyaW5nUmVzdWx0LmFwcGVuZCgiKCIpOworICAgICAgICAgICAg
ICAgIGlmIChtX2lzU1ZHRXZlbnQpCisgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nUmVzdWx0
LmFwcGVuZCgiZXZ0Iik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICB0b1N0cmluZ1Jlc3VsdC5hcHBlbmQoImV2ZW50Iik7CisgICAgICAgICAgICAgICAgdG9TdHJp
bmdSZXN1bHQuYXBwZW5kKCIpIHtcbiAgIik7CisgICAgICAgICAgICAgICAgdG9TdHJpbmdSZXN1
bHQuYXBwZW5kKG1fY29kZSk7CisgICAgICAgICAgICAgICAgdG9TdHJpbmdSZXN1bHQuYXBwZW5k
KCJcbn0iKTsKKyAgICAgICAgICAgICAgICB0b1N0cmluZ0Z1bmN0aW9uLT5TZXRIaWRkZW5WYWx1
ZSh2ODo6U3RyaW5nOjpOZXcoInRvU3RyaW5nU3RyaW5nIiksIHY4RXh0ZXJuYWxTdHJpbmcodG9T
dHJpbmdSZXN1bHQpKTsKKyAgICAgICAgICAgICAgICB3cmFwcGVkRnVuY3Rpb24tPlNldCh2ODo6
U3RyaW5nOjpOZXcoInRvU3RyaW5nIiksIHRvU3RyaW5nRnVuY3Rpb24pOwogICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB3cmFwcGVkRnVuY3Rpb24tPlNldE5hbWUodjg6OlN0cmluZzo6TmV3
KGZyb21XZWJDb3JlU3RyaW5nKG1fZnVuY3Rpb25OYW1lKSwgbV9mdW5jdGlvbk5hbWUubGVuZ3Ro
KCkpKTsKKworICAgICAgICAgICAgc2V0TGlzdGVuZXJPYmplY3Qod3JhcHBlZEZ1bmN0aW9uKTsK
ICAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6
TmV3KG1fd3JhcHBlZEZ1bmN0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmggYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaAppbmRleCBjOWY2YTg0Li5iYTQ2
MGU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIu
aAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaApAQCAtNTAs
MzAgKzUwLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVjhMYXp5RXZlbnRMaXN0ZW5lcihmcmFtZSwgY29kZSwgZnVuY3Rpb25OYW1lLCBp
c1NWR0V2ZW50KSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBGb3IgbGF6eSBldmVudCBsaXN0
ZW5lciwgdGhlIGxpc3RlbmVyIG9iamVjdCBpcyB0aGUgc2FtZSBhcyBpdHMgbGlzdGVuZXIKLSAg
ICAgICAgLy8gZnVuY3Rpb24gd2l0aG91dCBhZGRpdGlvbmFsIHNjb3BlIGNoYWlucy4KLSAgICAg
ICAgdmlydHVhbCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZ2V0TGlzdGVuZXJPYmplY3QoKSB7IHJl
dHVybiBnZXRXcmFwcGVkTGlzdGVuZXJGdW5jdGlvbigpOyB9CisgICAgICAgIHZpcnR1YWwgYm9v
bCBpc0xhenkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlTGlzdGVuZXJPYmplY3QoKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIFY4TGF6eUV2ZW50TGlzdGVuZXIoRnJhbWUqLCBjb25zdCBTdHJpbmcmIGNvZGUs
IGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQpOwotICAgICAgICB2
aXJ0dWFsIH5WOExhenlFdmVudExpc3RlbmVyKCk7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHZp
cnR1YWxpc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVh
bCB2ODo6TG9jYWw8djg6OlZhbHVlPiBjYWxsTGlzdGVuZXJGdW5jdGlvbih2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4ganNFdmVudCwgRXZlbnQqKTsKIAogICAgICAgICBTdHJpbmcgbV9jb2RlOwogICAg
ICAgICBTdHJpbmcgbV9mdW5jdGlvbk5hbWU7CiAgICAgICAgIGJvb2wgbV9pc1NWR0V2ZW50Owot
ICAgICAgICBib29sIG1fY29tcGlsZWQ7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGV2ZW50IGxpc3Rl
bmVyIGlzIG9uIGEgbm9uLWRvY3VtZW50IGRvbSBub2RlLCB3ZSBjb21waWxlIHRoZSBmdW5jdGlv
biB3aXRoIHNvbWUgaW1wbGljaXQgc2NvcGUgY2hhaW5zIGJlZm9yZSBpdC4KLSAgICAgICAgYm9v
bCBtX3dyYXBwZWRGdW5jdGlvbkNvbXBpbGVkOwotICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb24+IG1fd3JhcHBlZEZ1bmN0aW9uOwotCi0gICAgICAgIHY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+IGdldFdyYXBwZWRMaXN0ZW5lckZ1bmN0aW9uKCk7Ci0KLSAgICAgICAgdmlydHVhbCB2
ODo6TG9jYWw8djg6OlZhbHVlPiBjYWxsTGlzdGVuZXJGdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4ganNFdmVudCwgRXZlbnQqKTsKLQotICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9u
PiBnZXRMaXN0ZW5lckZ1bmN0aW9uKCk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTA3NjZjLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhPYmplY3RFdmVudExpc3RlbmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgiCi0KLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIlY4UHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCB3ZWFr
T2JqZWN0RXZlbnRMaXN0ZW5lckNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIHZv
aWQqIHBhcmFtZXRlcikKLXsKLSAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0g
c3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4ocGFyYW1ldGVyKTsKLQotICAgIC8v
IFJlbW92ZSB0aGUgd3JhcHBlcgotICAgIEZyYW1lKiBmcmFtZSA9IGxpc3RlbmVyLT5mcmFtZSgp
OwotICAgIGlmIChmcmFtZSkgewotICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJl
dHJpZXZlKGZyYW1lKTsKLSAgICAgICAgaWYgKHByb3h5KQotICAgICAgICAgICAgcHJveHktPm9i
amVjdExpc3RlbmVycygpLT5yZW1vdmUobGlzdGVuZXIpOwotCi0gICAgICAgIC8vIEJlY2F1c2Ug
dGhlIGxpc3RlbmVyIGlzIG5vIGxvbmdlciBpbiB0aGUgbGlzdCwgaXQgbXVzdCBiZSBkaXNjb25u
ZWN0ZWQgZnJvbSB0aGUgZnJhbWUgdG8gYXZvaWQgZGFuZ2xpbmcgZnJhbWUgcG9pbnRlcgotICAg
ICAgICAvLyBpbiB0aGUgZGVzdHJ1Y3Rvci4KLSAgICAgICAgbGlzdGVuZXItPmRpc2Nvbm5lY3RG
cmFtZSgpOwotICAgIH0KLSAgICBsaXN0ZW5lci0+ZGlzcG9zZUxpc3RlbmVyT2JqZWN0KCk7Ci19
Ci0KLS8vIEFuIG9iamVjdCBldmVudCBsaXN0ZW5lciB3cmFwcGVyIG9ubHkgaG9sZHMgYSB3ZWFr
IHJlZmVyZW5jZSB0byB0aGUKLS8vIEpTIGZ1bmN0aW9uLiBBIHN0cm9uZyByZWZlcmVuY2UgY2Fu
IGNyZWF0ZSBhIGN5Y2xlLgotLy8KLS8vIFRoZSBsaWZldGltZSBvZiB0aGVzZSBvYmplY3RzIGlz
IGJvdW5kZWQgYnkgdGhlIGxpZmUgdGltZSBvZiB0aGUgSlMKLS8vIHdyYXBwZXIgb2YgWEhSIG9y
IE5vZGUuIFNvIHdlIGNhbiBjcmVhdGUgYSBoaWRkZW4gcmVmZXJlbmNlIGZyb20KLS8vIHRoZSBK
UyB3cmFwcGVyIHRvIHRvIGl0cyBKUyBmdW5jdGlvbi4KLS8vCi0vLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgKG1hcCkKLS8vICAgICAgICAgIFhIUiBvciBOb2RlICA8LS0tLS0tLS0tLSAgSlNf
d3JhcHBlcgotLy8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgIChoaWRkZW4pIDogIF4KLS8v
ICAgICAgICAgICAgICAgViAgICAgICAgICAgICAgICAgICAgICBWICA6IChtYXkgYmUgcmVhY2hh
YmxlIGJ5IGNsb3N1cmUpCi0vLyAgICAgICAgICAgVjhfbGlzdGVuZXIgIC0tLS0tLS0tPiBKU19m
dW5jdGlvbgotLy8gICAgICAgICAgICAgICAgICAgICAgICAgKHdlYWspICA8LS0gbWF5IGNyZWF0
ZSBhIGN5Y2xlIGlmIGl0IGlzIHN0cm9uZwotLy8KLS8vIFRoZSBwZXJzaXN0ZW50IHJlZmVyZW5j
ZSBpcyBtYWRlIHdlYWsgaW4gdGhlIGNvbnN0cnVjdG9yIG9mCi0vLyBWOE9iamVjdEV2ZW50TGlz
dGVuZXIuCi0KLVY4T2JqZWN0RXZlbnRMaXN0ZW5lcjo6VjhPYmplY3RFdmVudExpc3RlbmVyKEZy
YW1lKiBmcmFtZSwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyLCBib29sIGlzSW5saW5l
KQotICAgIDogVjhFdmVudExpc3RlbmVyKGZyYW1lLCBsaXN0ZW5lciwgaXNJbmxpbmUpCi17Ci0g
ICAgbV9saXN0ZW5lci5NYWtlV2Vhayh0aGlzLCB3ZWFrT2JqZWN0RXZlbnRMaXN0ZW5lckNhbGxi
YWNrKTsKLX0KLQotVjhPYmplY3RFdmVudExpc3RlbmVyOjp+VjhPYmplY3RFdmVudExpc3RlbmVy
KCkKLXsKLSAgICBpZiAobV9mcmFtZSkgewotICAgICAgICBBU1NFUlQoIW1fbGlzdGVuZXIuSXNF
bXB0eSgpKTsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShtX2Zy
YW1lKTsKLSAgICAgICAgaWYgKHByb3h5KQotICAgICAgICAgICAgcHJveHktPm9iamVjdExpc3Rl
bmVycygpLT5yZW1vdmUodGhpcyk7Ci0gICAgfQotCi0gICAgZGlzcG9zZUxpc3RlbmVyT2JqZWN0
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhPYmplY3RFdmVudExpc3RlbmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
T2JqZWN0RXZlbnRMaXN0ZW5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzVh
ZTEwLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhPYmplY3RFdmVudExpc3Rl
bmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBWOE9iamVjdEV2ZW50TGlzdGVuZXJfaAotI2RlZmluZSBWOE9iamVjdEV2ZW50TGlzdGVu
ZXJfaAotCi0jaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSA8djgu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSAgICBjbGFzcyBGcmFtZTsKLQotICAgIC8vIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciBpcyBhIHNw
ZWNpYWwgbGlzdGVuZXIgd3JhcHBlciBmb3Igb2JqZWN0cyBub3QgaW4gdGhlIERPTS4gIEl0IGtl
ZXBzIHRoZSBKUyBsaXN0ZW5lciBhcyBhIHdlYWsgcG9pbnRlci4KLSAgICBjbGFzcyBWOE9iamVj
dEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgVjhFdmVudExpc3RlbmVyIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4T2JqZWN0RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKEZy
YW1lKiBmcmFtZSwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyLCBib29sIGlzSW5saW5l
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4T2JqZWN0RXZl
bnRMaXN0ZW5lcihmcmFtZSwgbGlzdGVuZXIsIGlzSW5saW5lKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNPYmplY3RMaXN0ZW5lcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lcihGcmFtZSos
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBpc0lubGluZSk7Ci0gICAgICAg
IHZpcnR1YWwgflY4T2JqZWN0RXZlbnRMaXN0ZW5lcigpOwotICAgIH07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFY4T2JqZWN0RXZlbnRMaXN0ZW5lcl9oCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFByb3h5LmNwcAppbmRleCA0ZmIwZjY4Li42ZDMyMTBhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94
eS5jcHAKQEAgLTIyOCwyMiArMjI4LDYgQEAgdm9pZCBWOFByb3h5OjpkZXN0cm95R2xvYmFsKCkK
ICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGRpc2Nvbm5lY3RFdmVudExpc3RlbmVyc0luTGlzdChW
OEV2ZW50TGlzdGVuZXJMaXN0JiBsaXN0KQotewotICAgIFY4RXZlbnRMaXN0ZW5lckxpc3Q6Oml0
ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOwotICAgIHdoaWxlIChpdCAhPSBsaXN0LmVuZCgpKSB7
Ci0gICAgICAgICgqaXQpLT5kaXNjb25uZWN0RnJhbWUoKTsKLSAgICAgICAgKytpdDsKLSAgICB9
Ci0gICAgbGlzdC5jbGVhcigpOwotfQotCi12b2lkIFY4UHJveHk6OmRpc2Nvbm5lY3RFdmVudExp
c3RlbmVycygpCi17Ci0gICAgZGlzY29ubmVjdEV2ZW50TGlzdGVuZXJzSW5MaXN0KG1fZXZlbnRM
aXN0ZW5lcnMpOwotICAgIGRpc2Nvbm5lY3RFdmVudExpc3RlbmVyc0luTGlzdChtX29iamVjdExp
c3RlbmVycyk7Ci19Ci0KIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gVjhQcm94eTo6Y29tcGlsZVNj
cmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUs
IGludCBiYXNlTGluZSkKIHsKICAgICBjb25zdCB1aW50MTZfdCogZmlsZU5hbWVTdHJpbmcgPSBm
cm9tV2ViQ29yZVN0cmluZyhmaWxlTmFtZSk7CkBAIC01NjYsNyArNTUwLDYgQEAgVjhQcm94eSog
VjhQcm94eTo6cmV0cmlldmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIAogdm9p
ZCBWOFByb3h5OjpkaXNjb25uZWN0RnJhbWUoKQogewotICAgIGRpc2Nvbm5lY3RFdmVudExpc3Rl
bmVycygpOwogfQogCiBib29sIFY4UHJveHk6OmlzRW5hYmxlZCgpCkBAIC03MzcsNiArNzIwLDEw
IEBAIHZvaWQgVjhQcm94eTo6Y2xlYXJGb3JOYXZpZ2F0aW9uKCkKICAgICB9CiB9CiAKK3ZvaWQg
VjhQcm94eTo6ZGlzY29ubmVjdEV2ZW50TGlzdGVuZXJzKCkKK3sKK30KKwogdm9pZCBWOFByb3h5
OjpzZXRTZWN1cml0eVRva2VuKCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5Lmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAppbmRleCA4Y2E5NTIwLi4zYzBhNDA1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UHJveHkuaApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiIC8vIGZvciBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbgogI2luY2x1ZGUgIlNoYXJl
ZFBlcnNpc3RlbnQuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJWOEV2
ZW50TGlzdGVuZXJMaXN0LmgiCiAjaW5jbHVkZSAiVjhHQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJWOEluZGV4LmgiCiAjaW5jbHVkZSA8djguaD4KQEAgLTE2MCw5ICsxNTksNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9vbCBpc0VuYWJsZWQoKTsKIAotICAgICAgICBWOEV2
ZW50TGlzdGVuZXJMaXN0KiBldmVudExpc3RlbmVycygpIHsgcmV0dXJuICZtX2V2ZW50TGlzdGVu
ZXJzOyB9Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QqIG9iamVjdExpc3RlbmVycygpIHsg
cmV0dXJuICZtX29iamVjdExpc3RlbmVyczsgfQotCiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAg
c3RhdGljIHZvaWQgc2V0U1ZHQ29udGV4dCh2b2lkKiwgU1ZHRWxlbWVudCopOwogICAgICAgICBz
dGF0aWMgU1ZHRWxlbWVudCogc3ZnQ29udGV4dCh2b2lkKik7CkBAIC00MDAsMTQgKzM5Niw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBpbnQgbV9oYW5kbGVyTGluZU51bWJlcjsK
IAotICAgICAgICAvLyBBIGxpc3Qgb2YgZXZlbnQgbGlzdGVuZXJzIGNyZWF0ZWQgZm9yIHRoaXMg
ZnJhbWUsCi0gICAgICAgIC8vIHRoZSBsaXN0IGdldHMgY2xlYXJlZCB3aGVuIHJlbW92aW5nIGFs
bCB0aW1lb3V0cy4KLSAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdCBtX2V2ZW50TGlzdGVuZXJz
OwotCi0gICAgICAgIC8vIEEgbGlzdCBvZiBldmVudCBsaXN0ZW5lcnMgY3JlYXRlIGZvciBYTUxI
dHRwUmVxdWVzdCBvYmplY3QgZm9yIHRoaXMgZnJhbWUsCi0gICAgICAgIC8vIHRoZSBsaXN0IGdl
dHMgY2xlYXJlZCB3aGVuIHJlbW92aW5nIGFsbCB0aW1lb3V0cy4KLSAgICAgICAgVjhFdmVudExp
c3RlbmVyTGlzdCBtX29iamVjdExpc3RlbmVyczsKLQogICAgICAgICAvLyBUcnVlIGZvciA8YSBo
cmVmPSJqYXZhc2NyaXB0OmZvbygpIj4gYW5kIGZhbHNlIGZvciA8c2NyaXB0PmZvbygpPC9zY3Jp
cHQ+LgogICAgICAgICAvLyBPbmx5IHZhbGlkIGR1cmluZyBleGVjdXRpb24uCiAgICAgICAgIGJv
b2wgbV9pbmxpbmVDb2RlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtl
ckNvbnRleHRFdmVudExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJD
b250ZXh0RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggMjQzNzQ1OC4uNmZhNzg2OSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuY3Bw
CkBAIC00NiwxMyArNDYsNiBAQCBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpWOFdvcmtl
ckNvbnRleHRFdmVudExpc3RlbmVyKFdvcmtlckNvbnRleHRFeGVjdXRpbwogewogfQogCi1WOFdv
cmtlckNvbnRleHRFdmVudExpc3RlbmVyOjp+VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcigp
Ci17Ci0gICAgaWYgKG1fcHJveHkpCi0gICAgICAgIG1fcHJveHktPnJlbW92ZUV2ZW50TGlzdGVu
ZXIodGhpcyk7Ci0gICAgZGlzcG9zZUxpc3RlbmVyT2JqZWN0KCk7Ci19Ci0KIHZvaWQgVjhXb3Jr
ZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBJcyB0aGUgRXZlbnRMaXN0ZW5lciBkaXNjb25u
ZWN0ZWQ/CkBAIC05Niw2ICs4OSw3IEBAIGJvb2wgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5l
cjo6cmVwb3J0RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpCiAgICAgLy8g
RW50ZXIgdGhlIFY4IGNvbnRleHQgaW4gd2hpY2ggdG8gcGVyZm9ybSB0aGUgZXZlbnQgaGFuZGxp
bmcuCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwogCisgICAgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyID0gZ2V0TGlzdGVuZXJPYmplY3QoKTsKICAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiByZXR1cm5WYWx1ZTsKICAgICB7CiAgICAgICAgIC8vIENhdGNoIGV4
Y2VwdGlvbnMgdGhyb3duIGluIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHNvIHRoZXkgZG8gbm90IHBy
b3BhZ2F0ZSB0byBqYXZhc2NyaXB0IGNvZGUgdGhhdCBjYXVzZWQgdGhlIGV2ZW50IHRvIGZpcmUu
CkBAIC0xMDMsOCArOTcsOCBAQCBib29sIFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OnJl
cG9ydEVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaQogICAgICAgICB0cnlD
YXRjaC5TZXRWZXJib3NlKHRydWUpOwogCiAgICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uLgot
ICAgICAgICBpZiAoIW1fbGlzdGVuZXIuSXNFbXB0eSgpICYmIG1fbGlzdGVuZXItPklzRnVuY3Rp
b24oKSkgewotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gY2FsbEZ1bmN0aW9u
ID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46Ok5ldyh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b24+OjpDYXN0KG1fbGlzdGVuZXIpKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lci5Jc0VtcHR5KCkg
JiYgbGlzdGVuZXItPklzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpG
dW5jdGlvbj4gY2FsbEZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobGlz
dGVuZXIpOwogICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHRoaXNWYWx1ZSA9IHY4
OjpDb250ZXh0OjpHZXRDdXJyZW50KCktPkdsb2JhbCgpOwogCiAgICAgICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gcGFyYW1ldGVyc1szXSA9IHsgdjhTdHJpbmcobWVzc2FnZSksIHY4U3Ry
aW5nKHVybCksIHY4OjpJbnRlZ2VyOjpOZXcobGluZU51bWJlcikgfTsKQEAgLTE0MSw4ICsxMzUs
MTAgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6
Y2FsbExpc3RlbmVyRnVuY3Rpb24odjg6OkhhbmQKIAogdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4
V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OmdldFJlY2VpdmVyT2JqZWN0KEV2ZW50KiBldmVu
dCkKIHsKLSAgICBpZiAoIW1fbGlzdGVuZXIuSXNFbXB0eSgpICYmICFtX2xpc3RlbmVyLT5Jc0Z1
bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyhtX2xp
c3RlbmVyKTsKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIgPSBnZXRMaXN0ZW5l
ck9iamVjdCgpOworCisgICAgaWYgKCFsaXN0ZW5lci5Jc0VtcHR5KCkgJiYgIWxpc3RlbmVyLT5J
c0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBsaXN0ZW5lcjsKIAogICAgIEV2ZW50VGFyZ2V0
KiB0YXJnZXQgPSBldmVudC0+Y3VycmVudFRhcmdldCgpOwogICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB2YWx1ZSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydEV2ZW50VGFy
Z2V0VG9WOE9iamVjdCh0YXJnZXQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29y
a2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaAppbmRleCA0NjA5NTMzLi5kNDQ4NjAxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaApA
QCAtNTAsNyArNTAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KICAgICAgICAg
VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcihXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkq
LCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUpOwogCi0gICAg
ICAgIHZpcnR1YWwgflY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIoKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCopOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgcmVwb3J0RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBj
b25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIpOwogICAgICAgICB2aXJ0dWFsIGJvb2wg
ZGlzY29ubmVjdGVkKCkgY29uc3QgeyByZXR1cm4gIW1fcHJveHk7IH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTU2NTYzLi4wMDAwMDAwCi0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRPYmplY3RFdmVu
dExpc3RlbmVyLmgiCi0KLSNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCB3ZWFrT2JqZWN0RXZlbnRMaXN0
ZW5lckNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIHZvaWQqIHBhcmFtZXRlcikK
LXsKLSAgICBWOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0
YXRpY19jYXN0PFY4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIqPihwYXJhbWV0ZXIp
OwotCi0gICAgLy8gUmVtb3ZlIHRoZSB3cmFwcGVyCi0gICAgbGlzdGVuZXItPnByb3h5KCktPnJl
bW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXIpOwotCi0gICAgbGlzdGVuZXItPmRpc3Bvc2VMaXN0
ZW5lck9iamVjdCgpOwotfQotCi1WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyOjpW
OFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyKFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eSogcHJveHksIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBpc0lubGlu
ZSkKLSAgICA6IFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIocHJveHksIGxpc3RlbmVyLCBp
c0lubGluZSkKLXsKLSAgICBtX2xpc3RlbmVyLk1ha2VXZWFrKHRoaXMsIHdlYWtPYmplY3RFdmVu
dExpc3RlbmVyQ2FsbGJhY2spOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBXT1JLRVJTCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29u
dGV4dE9iamVjdEV2ZW50TGlzdGVuZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJD
b250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2NDcxNjM3Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250
ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lcl9oCi0jZGVmaW5lIFY4V29y
a2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXJfaAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0K
LSNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSA8djgu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSAgICBjbGFzcyBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk7Ci0KLSAgICBjbGFzcyBWOFdv
cmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyIDogcHVibGljIFY4V29ya2VyQ29udGV4dEV2
ZW50TGlzdGVuZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhX
b3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eSogcHJveHksIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBp
c0lubGluZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOFdv
cmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyKHByb3h5LCBsaXN0ZW5lciwgaXNJbmxpbmUp
KTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgVjhXb3JrZXJDb250ZXh0T2Jq
ZWN0RXZlbnRMaXN0ZW5lcihXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqLCB2ODo6TG9jYWw8
djg6Ok9iamVjdD4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUpOwotICAgIH07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFdPUktFUlMKLQotI2VuZGlmIC8vIFY4V29ya2Vy
Q29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCmluZGV4IDE0MTEwOTcuLjY4ZDkzOGUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eS5jcHAKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJWOEluZGV4LmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaCIK
LSNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmgiCiAjaWYgRU5B
QkxFKFdFQl9TT0NLRVRTKQogI2luY2x1ZGUgIldlYlNvY2tldC5oIgogI2VuZGlmCkBAIC04Miwx
NCArODEsNiBAQCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6On5Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkoKQogCiB2b2lkIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZGlzcG9z
ZSgpCiB7Ci0gICAgLy8gRGlzY29ubmVjdCBhbGwgZXZlbnQgbGlzdGVuZXJzLgotICAgIGlmICht
X2xpc3RlbmVycy5nZXQoKSkgewotICAgICAgICBmb3IgKFY4RXZlbnRMaXN0ZW5lckxpc3Q6Oml0
ZXJhdG9yIGl0ZXJhdG9yKG1fbGlzdGVuZXJzLT5iZWdpbigpKTsgaXRlcmF0b3IgIT0gbV9saXN0
ZW5lcnMtPmVuZCgpOyArK2l0ZXJhdG9yKQotICAgICAgICAgICBzdGF0aWNfY2FzdDxWOFdvcmtl
ckNvbnRleHRFdmVudExpc3RlbmVyKj4oKml0ZXJhdG9yKS0+ZGlzY29ubmVjdCgpOwotCi0gICAg
ICAgIG1fbGlzdGVuZXJzLT5jbGVhcigpOwotICAgIH0KLQogICAgIC8vIERldGFjaCBhbGwgZXZl
bnRzIGZyb20gdGhlaXIgSlMgd3JhcHBlcnMuCiAgICAgZm9yIChzaXplX3QgZXZlbnRJbmRleCA9
IDA7IGV2ZW50SW5kZXggPCBtX2V2ZW50cy5zaXplKCk7ICsrZXZlbnRJbmRleCkgewogICAgICAg
ICBFdmVudCogZXZlbnQgPSBtX2V2ZW50c1tldmVudEluZGV4XTsKQEAgLTE2OSw4ICsxNjAsNiBA
QCB2b2lkIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCgp
CiAgICAgLy8gSW5zZXJ0IHRoZSBvYmplY3QgaW5zdGFuY2UgYXMgdGhlIHByb3RvdHlwZSBvZiB0
aGUgc2hhZG93IG9iamVjdC4KICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbE9iamVj
dCA9IG1fY29udGV4dC0+R2xvYmFsKCk7CiAgICAgZ2xvYmFsT2JqZWN0LT5TZXQoaW1wbGljaXRQ
cm90b1N0cmluZywganNXb3JrZXJDb250ZXh0KTsKLQotICAgIG1fbGlzdGVuZXJzLnNldChuZXcg
VjhFdmVudExpc3RlbmVyTGlzdCgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpW
OFdyYXBwZXJUeXBlIHR5cGUsIHZvaWQqIGltcGwpCkBAIC00MDUsMzkgKzM5NCw5IEBAIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cnVuU2NyaXB0KHY4
OjpIYW5kbGU8djg6OlNjcmlwCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxW
OEV2ZW50TGlzdGVuZXI+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZmluZE9yQ3JlYXRl
RXZlbnRMaXN0ZW5lckhlbHBlcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QsIGJvb2wgaXNJ
bmxpbmUsIGJvb2wgZmluZE9ubHksIGJvb2wgY3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcikKLXsK
LSAgICBpZiAoIW9iamVjdC0+SXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBW
OEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gbV9saXN0ZW5lcnMtPmZpbmQob2JqZWN0LT5Ub09i
amVjdCgpLCBpc0lubGluZSk7Ci0gICAgaWYgKGZpbmRPbmx5KQotICAgICAgICByZXR1cm4gbGlz
dGVuZXI7Ci0KLSAgICAvLyBDcmVhdGUgYSBuZXcgb25lLCBhbmQgYWRkIHRvIGNhY2hlLgotICAg
IFJlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IG5ld0xpc3RlbmVyOwotICAgIGlmIChjcmVhdGVPYmpl
Y3RFdmVudExpc3RlbmVyKQotICAgICAgICBuZXdMaXN0ZW5lciA9IFY4V29ya2VyQ29udGV4dE9i
amVjdEV2ZW50TGlzdGVuZXI6OmNyZWF0ZSh0aGlzLCB2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNh
c3Qob2JqZWN0KSwgaXNJbmxpbmUpOwotICAgIGVsc2UKLSAgICAgICAgbmV3TGlzdGVuZXIgPSBW
OFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpjcmVhdGUodGhpcywgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+OjpDYXN0KG9iamVjdCksIGlzSW5saW5lKTsKLSAgICBtX2xpc3RlbmVycy0+YWRkKG5l
d0xpc3RlbmVyLmdldCgpKTsKLQotICAgIHJldHVybiBuZXdMaXN0ZW5lci5yZWxlYXNlKCk7Ci19
Ci0KIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHk6OmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0
LCBib29sIGlzSW5saW5lLCBib29sIGZpbmRPbmx5KQogewotICAgIHJldHVybiBmaW5kT3JDcmVh
dGVFdmVudExpc3RlbmVySGVscGVyKG9iamVjdCwgaXNJbmxpbmUsIGZpbmRPbmx5LCBmYWxzZSk7
Ci19Ci0KLVBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1
ZT4gb2JqZWN0LCBib29sIGlzSW5saW5lLCBib29sIGZpbmRPbmx5KQotewotICAgIHJldHVybiBm
aW5kT3JDcmVhdGVFdmVudExpc3RlbmVySGVscGVyKG9iamVjdCwgaXNJbmxpbmUsIGZpbmRPbmx5
LCB0cnVlKTsKLX0KLQotdm9pZCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJlbW92ZUV2
ZW50TGlzdGVuZXIoVjhFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKLXsKLSAgICBtX2xpc3RlbmVy
cy0+cmVtb3ZlKGxpc3RlbmVyKTsKKyAgICByZXR1cm4gZmluZE9ubHkgPyBWOEV2ZW50TGlzdGVu
ZXJMaXN0OjpmaW5kV3JhcHBlcihvYmplY3QsIGlzSW5saW5lKSA6IFY4RXZlbnRMaXN0ZW5lckxp
c3Q6OmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcj4odGhp
cywgb2JqZWN0LCBpc0lubGluZSk7CiB9CiAKIHZvaWQgV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5Ojp0cmFja0V2ZW50KEV2ZW50KiBldmVudCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCmluZGV4IDc1MDI0ZGYuLjExZjE1ZDYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
aApAQCAtNjQsMTIgKzY0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkoV29ya2VyQ29udGV4dCopOwogICAgICAgICB+V29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5KCk7CiAKLSAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVy
KFY4RXZlbnRMaXN0ZW5lciopOwotCiAgICAgICAgIC8vIEZpbmRzL2NyZWF0ZXMgZXZlbnQgbGlz
dGVuZXIgd3JhcHBlcnMuCiAgICAgICAgIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBmaW5k
T3JDcmVhdGVFdmVudExpc3RlbmVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IGxpc3RlbmVyLCBib29s
IGlzSW5saW5lLCBib29sIGZpbmRPbmx5KTsKLSAgICAgICAgUGFzc1JlZlB0cjxWOEV2ZW50TGlz
dGVuZXI+IGZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1
ZT4gb2JqZWN0LCBib29sIGlzSW5saW5lLCBib29sIGZpbmRPbmx5KTsKLSAgICAgICAgUGFzc1Jl
ZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXJIZWxwZXIodjg6
OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sIGlzSW5saW5lLCBib29sIGZpbmRPbmx5LCBi
b29sIGNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIpOwogCiAgICAgICAgIC8vIFRyYWNrIHRoZSBl
dmVudCBzbyB0aGF0IHdlIGNhbiBkZXRhY2ggaXQgZnJvbSB0aGUgSlMgd3JhcHBlciB3aGVuIGEg
d29ya2VyCiAgICAgICAgIC8vIHRlcm1pbmF0ZXMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugd2Ug
bmVlZCB0byBiZSBhYmxlIHRvIGRpc3Bvc2UgdGhlc2UKQEAgLTExNSw3ICsxMTEsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX2Nv
bnRleHQ7CiAgICAgICAgIGludCBtX3JlY3Vyc2lvbjsKIAotICAgICAgICBPd25QdHI8VjhFdmVu
dExpc3RlbmVyTGlzdD4gbV9saXN0ZW5lcnM7CiAgICAgICAgIFZlY3RvcjxFdmVudCo+IG1fZXZl
bnRzOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
QWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhB
YnN0cmFjdFdvcmtlckN1c3RvbS5jcHAKaW5kZXggY2U3NTllYi4uMmQ5YzRkNyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5j
cHAKQEAgLTM4LDc1ICszOCwxOCBAQAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIK
LSNpbmNsdWRlICJWOE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOFByb3h5Lmgi
CiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoQWJzdHJhY3RXb3JrZXIqIHdvcmtlciwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIGJvb2wgZmluZE9ubHkpCi17Ci0g
ICAgaWYgKHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1dvcmtlckNvbnRleHQo
KSkgewotICAgICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHdvcmtlckNvbnRleHRQ
cm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsKLSAgICAgICAg
QVNTRVJUKHdvcmtlckNvbnRleHRQcm94eSk7Ci0gICAgICAgIHJldHVybiB3b3JrZXJDb250ZXh0
UHJveHktPmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGlzQXR0cmlidXRl
LCBmaW5kT25seSk7Ci0gICAgfQotCi0gICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRy
aWV2ZSh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKHByb3h5KSB7
Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QqIGxpc3QgPSBwcm94eS0+b2JqZWN0TGlzdGVu
ZXJzKCk7Ci0gICAgICAgIHJldHVybiBmaW5kT25seSA/IGxpc3QtPmZpbmRXcmFwcGVyKHZhbHVl
LCBpc0F0dHJpYnV0ZSkgOiBsaXN0LT5maW5kT3JDcmVhdGVXcmFwcGVyPFY4T2JqZWN0RXZlbnRM
aXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBpc0F0dHJpYnV0ZSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihBYnN0cmFjdFdvcmtlck9uZXJyb3Ip
Ci17Ci0gICAgSU5DX1NUQVRTKEwiRE9NLkFic3RyYWN0V29ya2VyLm9uZXJyb3IuX2dldCIpOwot
ICAgIEFic3RyYWN0V29ya2VyKiB3b3JrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxBYnN0cmFjdFdvcmtlcj4oVjhDbGFzc0luZGV4OjpBQlNUUkFDVFdPUktFUiwgaW5m
by5Ib2xkZXIoKSk7Ci0gICAgaWYgKHdvcmtlci0+b25lcnJvcigpKSB7Ci0gICAgICAgIFY4T2Jq
ZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlz
dGVuZXIqPih3b3JrZXItPm9uZXJyb3IoKSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgIHJl
dHVybiB2OExpc3RlbmVyOwotICAgIH0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQot
Ci1BQ0NFU1NPUl9TRVRURVIoQWJzdHJhY3RXb3JrZXJPbmVycm9yKQotewotICAgIElOQ19TVEFU
UyhMIkRPTS5BYnN0cmFjdFdvcmtlci5vbmVycm9yLl9zZXQiKTsKLSAgICBBYnN0cmFjdFdvcmtl
ciogd29ya2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8QWJzdHJhY3RX
b3JrZXI+KFY4Q2xhc3NJbmRleDo6QUJTVFJBQ1RXT1JLRVIsIGluZm8uSG9sZGVyKCkpOwotICAg
IFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogb2xkTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVj
dEV2ZW50TGlzdGVuZXIqPih3b3JrZXItPm9uZXJyb3IoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051
bGwoKSkgewotICAgICAgICBpZiAob2xkTGlzdGVuZXIpIHsKLSAgICAgICAgICAgIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBvbGRWOExpc3RlbmVyID0gb2xkTGlzdGVuZXItPmdldExpc3RlbmVyT2Jq
ZWN0KCk7Ci0gICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCks
IG9sZFY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprQWJzdHJhY3RXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRl
eCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCi0gICAgICAg
IHdvcmtlci0+c2V0T25lcnJvcigwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHdvcmtlciwgdmFsdWUsIHRy
dWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICBpZiAob2xk
TGlzdGVuZXIpIHsKLSAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2xkVjhM
aXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAg
ICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgb2xkVjhMaXN0ZW5lciwg
VjhDdXN0b206OmtBYnN0cmFjdFdvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgd29ya2VyLT5zZXRPbmVycm9yKGxpc3RlbmVyKTsKLSAgICAgICAg
ICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9t
OjprQWJzdHJhY3RXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KIENBTExCQUNLX0ZVTkNfREVDTChBYnN0cmFjdFdvcmtlckFkZEV2ZW50TGlzdGVuZXIpCiB7
CiAgICAgSU5DX1NUQVRTKEwiRE9NLkFic3RyYWN0V29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoKSIp
OwogICAgIEFic3RyYWN0V29ya2VyKiB3b3JrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxBYnN0cmFjdFdvcmtlcj4oVjhDbGFzc0luZGV4OjpBQlNUUkFDVFdPUktFUiwg
YXJncy5Ib2xkZXIoKSk7CiAKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBn
ZXRFdmVudExpc3RlbmVyKHdvcmtlciwgYXJnc1sxXSwgZmFsc2UsIGZhbHNlKTsKKyAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVu
ZXIod29ya2VyLCBhcmdzWzFdLCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChsaXN0ZW5lcikgewog
ICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICAgICAg
Ym9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CkBAIC0xMjIsNyArNjUs
NyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQWJzdHJhY3RXb3JrZXJSZW1vdmVFdmVudExpc3RlbmVy
KQogICAgIElOQ19TVEFUUyhMIkRPTS5BYnN0cmFjdFdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVy
KCkiKTsKICAgICBBYnN0cmFjdFdvcmtlciogd29ya2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8QWJzdHJhY3RXb3JrZXI+KFY4Q2xhc3NJbmRleDo6QUJTVFJBQ1RXT1JL
RVIsIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
ID0gZ2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIGFyZ3NbMV0sIGZhbHNlLCB0cnVlKTsKKyAgICBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlz
dGVuZXIod29ya2VyLCBhcmdzWzFdLCBmYWxzZSwgdHJ1ZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7
CiAgICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgICAg
ICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKaW5kZXggMjgxNDEyMS4uNzBlYzVi
YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5n
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKQEAg
LTE0MCw2ICsxNDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgY29u
c3QgaW50IGtOb3RpZmljYXRpb25JbnRlcm5hbEZpZWxkQ291bnQgPSBrRGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQgKyAxOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGtTVkdFbGVtZW50SW5zdGFuY2VFdmVudExpc3RlbmVyQ2FjaGVJ
bmRleCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDA7CisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQga1NWR0VsZW1lbnRJbnN0YW5jZUludGVybmFsRmllbGRDb3VudCA9IGtE
ZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDE7CisjZW5kaWYKKwogICAgICAgICBz
dGF0aWMgY29uc3QgaW50IGtET01XaW5kb3dDb25zb2xlSW5kZXggPSBrRGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQgKyAwOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtET01XaW5k
b3dIaXN0b3J5SW5kZXggPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxOwog
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtET01XaW5kb3dMb2NhdGlvbmJhckluZGV4ID0ga0Rl
ZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMjsKQEAgLTE1Myw3ICsxNTgsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0RPTVdpbmRvd1Rv
b2xiYXJJbmRleCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDEwOwogICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGtET01XaW5kb3dMb2NhdGlvbkluZGV4ID0ga0RlZmF1bHRX
cmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMTE7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
a0RPTVdpbmRvd0RPTVNlbGVjdGlvbkluZGV4ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVs
ZENvdW50ICsgMTI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0RPTVdpbmRvd0ludGVybmFs
RmllbGRDb3VudCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDEzOworICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGtET01XaW5kb3dFdmVudExpc3RlbmVyQ2FjaGVJbmRleCA9
IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDEzOworICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGtET01XaW5kb3dJbnRlcm5hbEZpZWxkQ291bnQgPSBrRGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQgKyAxNDsKIAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtTdHls
ZVNoZWV0T3duZXJOb2RlSW5kZXggPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQg
KyAwOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtTdHlsZVNoZWV0SW50ZXJuYWxGaWVsZENv
dW50ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRMaXN0ZW5lci5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50TGlzdGVuZXIuY3BwCmluZGV4
IGIxMWM0OTYuLjZhNGVkZTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tRXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhDdXN0b21FdmVudExpc3RlbmVyLmNwcApAQCAtMzgsMzQgKzM4LDIyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIFY4RXZlbnRMaXN0ZW5lcjo6VjhFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFt
ZSwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyLCBib29sIGlzQXR0cmlidXRlKQogICAg
IDogVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoZnJhbWUsIGlzQXR0cmlidXRlKQogewotICAgIG1f
bGlzdGVuZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGxpc3RlbmVyKTsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgVjhHQ0NvbnRyb2xsZXI6OnJlZ2lzdGVyR2xvYmFsSGFuZGxlKEVW
RU5UX0xJU1RFTkVSLCB0aGlzLCBtX2xpc3RlbmVyKTsKLSNlbmRpZgotfQotCi1WOEV2ZW50TGlz
dGVuZXI6On5WOEV2ZW50TGlzdGVuZXIoKQotewotICAgIGlmIChtX2ZyYW1lKSB7Ci0gICAgICAg
IFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUobV9mcmFtZSk7Ci0gICAgICAgIGlm
IChwcm94eSkKLSAgICAgICAgICAgIHByb3h5LT5ldmVudExpc3RlbmVycygpLT5yZW1vdmUodGhp
cyk7Ci0gICAgfQotCi0gICAgZGlzcG9zZUxpc3RlbmVyT2JqZWN0KCk7CisgICAgc2V0TGlzdGVu
ZXJPYmplY3QobGlzdGVuZXIpOwogfQogCiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOEV2ZW50
TGlzdGVuZXI6OmdldExpc3RlbmVyRnVuY3Rpb24oKQogeworICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiBsaXN0ZW5lciA9IGdldExpc3RlbmVyT2JqZWN0KCk7CisKICAgICAvLyBIYXMgdGhlIGxp
c3RlbmVyIGJlZW4gZGlzcG9zZWQ/Ci0gICAgaWYgKG1fbGlzdGVuZXIuSXNFbXB0eSgpKQorICAg
IGlmIChsaXN0ZW5lci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1
bmN0aW9uPigpOwogCi0gICAgaWYgKG1fbGlzdGVuZXItPklzRnVuY3Rpb24oKSkKLSAgICAgICAg
cmV0dXJuIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpOZXcodjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uPjo6Q2FzdChtX2xpc3RlbmVyKSk7CisgICAgaWYgKGxpc3RlbmVyLT5Jc0Z1bmN0aW9u
KCkpCisgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChsaXN0ZW5l
cik7CiAKLSAgICBpZiAobV9saXN0ZW5lci0+SXNPYmplY3QoKSkgewotICAgICAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiBwcm9wZXJ0eSA9IG1fbGlzdGVuZXItPkdldCh2ODo6U3RyaW5nOjpOZXdT
eW1ib2woImhhbmRsZUV2ZW50IikpOworICAgIGlmIChsaXN0ZW5lci0+SXNPYmplY3QoKSkgewor
ICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBwcm9wZXJ0eSA9IGxpc3RlbmVyLT5HZXQodjg6
OlN0cmluZzo6TmV3U3ltYm9sKCJoYW5kbGVFdmVudCIpKTsKICAgICAgICAgaWYgKHByb3BlcnR5
LT5Jc0Z1bmN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlv
bj46OkNhc3QocHJvcGVydHkpOwogICAgIH0KQEAgLTgyLDcgKzcwLDcgQEAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gVjhFdmVudExpc3RlbmVyOjpjYWxsTGlzdGVuZXJGdW5jdGlvbih2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4KIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwYXJhbWV0ZXJzWzFdID0g
eyBqc0V2ZW50IH07CiAKLSAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG1f
ZnJhbWUpOworICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoZnJhbWUoKSk7
CiAgICAgaWYgKCFwcm94eSkKICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6VmFsdWU+KCk7
CiAgICAgcmV0dXJuIHByb3h5LT5jYWxsRnVuY3Rpb24oaGFuZGxlckZ1bmN0aW9uLCByZWNlaXZl
ciwgMSwgcGFyYW1ldGVycyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbUV2ZW50TGlzdGVuZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tRXZlbnRMaXN0ZW5lci5oCmluZGV4IDkzYWQ4ZmIuLjNmOTc5MGMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oCkBAIC00
OSwxOCArNDksMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBWOEV2ZW50TGlzdGVuZXIoZnJhbWUsIGxpc3RlbmVyLCBpc0F0dHJpYnV0ZSkp
OwogICAgICAgICB9CiAKLSAgICAgICAgLy8gRGV0YWNoIHRoZSBsaXN0ZW5lciBmcm9tIGl0cyBv
d25lciBmcmFtZS4KLSAgICAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKSB7IG1fZnJhbWUgPSAw
OyB9Ci0KICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFY4RXZlbnRMaXN0ZW5lcihGcmFtZSosIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBpc0F0dHJpYnV0ZSk7Ci0gICAgICAg
IHZpcnR1YWwgflY4RXZlbnRMaXN0ZW5lcigpOworCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+IGdldExpc3RlbmVyRnVuY3Rpb24oKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZp
cnR1YWwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gY2FsbExpc3RlbmVyRnVuY3Rpb24odjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGpzRXZlbnQsIEV2ZW50Kik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCB2aXJ0
dWFsaXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX2lzQXR0cmlidXRlOyB9Ci0gICAgfTsK
KyAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcApp
bmRleCA2M2ZjNjk4Li5hMzVmNThhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAKQEAgLTM3LDc2ICsz
NywxOSBAQAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGlu
Zy5oIgogI2luY2x1ZGUgIlY4RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJWOE9iamVjdEV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgY29uc3QgYm9vbCBrRmluZE9ubHkgPSB0cnVlOwotc3RhdGljIGNv
bnN0IGJvb2wga0ZpbmRPckNyZWF0ZSA9IGZhbHNlOwotCi1zdGF0aWMgUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBhcmd1bWVudFRvRXZlbnRMaXN0ZW5lcihET01BcHBsaWNhdGlvbkNhY2hlKiBh
cHBjYWNoZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgZmluZE9ubHkpCi17Ci0g
ICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShhcHBjYWNoZS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAocHJveHkpCi0gICAgICAgIHJldHVybiBmaW5kT25s
eSA/IHByb3h5LT5vYmplY3RMaXN0ZW5lcnMoKS0+ZmluZFdyYXBwZXIodmFsdWUsIGZhbHNlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgOiBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCktPmZpbmRP
ckNyZWF0ZVdyYXBwZXI8VjhPYmplY3RFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFs
dWUsIGZhbHNlKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiBldmVudExpc3RlbmVyVG9WOE9iamVjdChFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKLXsK
LSAgICByZXR1cm4gKHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVy
KSktPmdldExpc3RlbmVyT2JqZWN0KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHRvRXZl
bnRJRCh2ODo6TG9jYWw8djg6OlN0cmluZz4gdmFsdWUpCi17Ci0gICAgU3RyaW5nIGtleSA9IHRv
V2ViQ29yZVN0cmluZyh2YWx1ZSk7Ci0gICAgQVNTRVJUKGtleS5zdGFydHNXaXRoKCJvbiIpKTsK
LSAgICByZXR1cm4ga2V5LnN1YnN0cmluZygyKTsKLX0KLQotLy8gSGFuZGxlcyBhcHBjYWNoZS5v
bmZvb2V2ZW50IGF0dHJpYnV0ZSBnZXR0aW5nCi1BQ0NFU1NPUl9HRVRURVIoRE9NQXBwbGljYXRp
b25DYWNoZUV2ZW50SGFuZGxlcikKLXsKLSAgICBJTkNfU1RBVFMoIkRPTUFwcGxpY2F0aW9uQ2Fj
aGUub25ldmVudF9nZXR0ZXIiKTsKLSAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBjYWNoZSA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTUFwcGxpY2F0aW9uQ2FjaGU+
KFY4Q2xhc3NJbmRleDo6RE9NQVBQTElDQVRJT05DQUNIRSwgaW5mby5Ib2xkZXIoKSk7Ci0gICAg
aWYgKEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gYXBwY2FjaGUtPmdldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIodG9FdmVudElEKG5hbWUpKSkKLSAgICAgICAgcmV0dXJuIGV2ZW50TGlzdGVuZXJU
b1Y4T2JqZWN0KGxpc3RlbmVyKTsKLSAgICByZXR1cm4gdjg6Ok51bGwoKTsKLX0KLQotLy8gSGFu
ZGxlcyBhcHBjYWNoZS5vbmZvb2V2ZW50IGF0dHJpYnV0ZSBzZXR0aW5nCi1BQ0NFU1NPUl9TRVRU
RVIoRE9NQXBwbGljYXRpb25DYWNoZUV2ZW50SGFuZGxlcikKLXsKLSAgICBJTkNfU1RBVFMoIkRP
TUFwcGxpY2F0aW9uQ2FjaGUub25ldmVudF9zZXR0ZXIiKTsKLSAgICBET01BcHBsaWNhdGlvbkNh
Y2hlKiBhcHBjYWNoZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTUFw
cGxpY2F0aW9uQ2FjaGU+KFY4Q2xhc3NJbmRleDo6RE9NQVBQTElDQVRJT05DQUNIRSwgaW5mby5I
b2xkZXIoKSk7Ci0gICAgU3RyaW5nIGV2ZW50VHlwZSA9IHRvRXZlbnRJRChuYW1lKTsKLQotICAg
IGlmIChFdmVudExpc3RlbmVyKiBvbGRMaXN0ZW5lciA9IGFwcGNhY2hlLT5nZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50VHlwZSkpIHsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IG9iamVjdCA9IGV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KG9sZExpc3RlbmVyKTsKLSAgICAgICAg
cmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvYmplY3QsIFY4Q3VzdG9tOjpr
RE9NQXBwbGljYXRpb25DYWNoZUNhY2hlSW5kZXgpOwotICAgICAgICBhcHBjYWNoZS0+Y2xlYXJB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSk7Ci0gICAgfQotCi0gICAgaWYgKHZhbHVl
LT5Jc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG5ld0xpc3Rl
bmVyID0gYXJndW1lbnRUb0V2ZW50TGlzdGVuZXIoYXBwY2FjaGUsIHZhbHVlLCBrRmluZE9yQ3Jl
YXRlKTsKLSAgICAgICAgaWYgKG5ld0xpc3RlbmVyKSB7Ci0gICAgICAgICAgICBjcmVhdGVIaWRk
ZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a0RPTUFwcGxpY2F0
aW9uQ2FjaGVDYWNoZUluZGV4KTsKLSAgICAgICAgICAgIGFwcGNhY2hlLT5zZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbmV3TGlzdGVuZXIpOwotICAgICAgICB9Ci0gICAgfQot
fQotCiAvLyBIYW5kbGVzIGFwcGNhY2hlLmFkZEV2ZW50TGlzdG5lcihuYW1lLCBmdW5jLCBjYXB0
dXJlKSBtZXRob2QgY2FsbHMKIENBTExCQUNLX0ZVTkNfREVDTChET01BcHBsaWNhdGlvbkNhY2hl
QWRkRXZlbnRMaXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTUFwcGxpY2F0aW9uQ2FjaGUu
YWRkRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgRE9NQXBwbGljYXRpb25DYWNoZSogYXBwY2FjaGUg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01BcHBsaWNhdGlvbkNhY2hl
PihWOENsYXNzSW5kZXg6OkRPTUFQUExJQ0FUSU9OQ0FDSEUsIGFyZ3MuSG9sZGVyKCkpOwogCi0g
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gYXJndW1lbnRUb0V2ZW50TGlzdGVu
ZXIoYXBwY2FjaGUsIGFyZ3NbMV0sIGtGaW5kT3JDcmVhdGUpOworICAgIFJlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihhcHBjYWNo
ZSwgYXJnc1sxXSwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAg
Y3JlYXRlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3RvbTo6
a0RPTUFwcGxpY2F0aW9uQ2FjaGVDYWNoZUluZGV4KTsKICAgICAgICAgU3RyaW5nIGV2ZW50VHlw
ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKQEAgLTEyMiw3ICs2NSw3IEBAIENBTExCQUNL
X0ZVTkNfREVDTChET01BcHBsaWNhdGlvbkNhY2hlUmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICBJ
TkNfU1RBVFMoIkRPTUFwcGxpY2F0aW9uQ2FjaGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7CiAg
ICAgRE9NQXBwbGljYXRpb25DYWNoZSogYXBwY2FjaGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxET01BcHBsaWNhdGlvbkNhY2hlPihWOENsYXNzSW5kZXg6OkRPTUFQUExJ
Q0FUSU9OQ0FDSEUsIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGxpc3RlbmVyID0gYXJndW1lbnRUb0V2ZW50TGlzdGVuZXIoYXBwY2FjaGUsIGFyZ3NbMV0sIGtG
aW5kT25seSk7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFw
cGVyOjpnZXRFdmVudExpc3RlbmVyKGFwcGNhY2hlLCBhcmdzWzFdLCBmYWxzZSwgdHJ1ZSk7CiAg
ICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5I
b2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206OmtET01BcHBsaWNhdGlvbkNhY2hlQ2FjaGVJbmRl
eCk7CiAgICAgICAgIFN0cmluZyBldmVudFR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3Rv
bS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAK
aW5kZXggOTUyYTVhMC4uYWNjYTFjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcApAQCAtMjUyLDEwICsyNTIsMTIgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKERPTVdpbmRvd0FkZEV2ZW50TGlzdGVuZXIpCiAgICAgaWYgKCFwcm94eSkKICAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAgIFJlZlB0cjxFdmVudExpc3RlbmVy
PiBsaXN0ZW5lciA9IHByb3h5LT5ldmVudExpc3RlbmVycygpLT5maW5kT3JDcmVhdGVXcmFwcGVy
PFY4RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIGFyZ3NbMV0sIGZhbHNlKTsKKyAgICBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlz
dGVuZXIocHJveHksIGFyZ3NbMV0sIGZhbHNlLCBmYWxzZSk7CiAKLSAgICBpZiAobGlzdGVuZXIp
CisgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIGltcC0+YWRkRXZlbnRMaXN0ZW5lcihldmVu
dFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5k
ZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3RvbTo6a0RPTVdpbmRvd0V2ZW50TGlz
dGVuZXJDYWNoZUluZGV4KTsKKyAgICB9CiAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
fQpAQCAtMjgyLDEwICsyODQsMTIgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd1JlbW92
ZUV2ZW50TGlzdGVuZXIpCiAgICAgaWYgKCFwcm94eSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKIAotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5l
dmVudExpc3RlbmVycygpLT5maW5kV3JhcHBlcihhcmdzWzFdLCBmYWxzZSk7CisgICAgUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVy
KHByb3h5LCBhcmdzWzFdLCBmYWxzZSwgdHJ1ZSk7CiAKLSAgICBpZiAobGlzdGVuZXIpCisgICAg
aWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIGltcC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5
cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKKyAgICAgICAgcmVtb3ZlSGlkZGVuRGVw
ZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3RvbTo6a0RPTVdpbmRvd0V2ZW50
TGlzdGVuZXJDYWNoZUluZGV4KTsKKyAgICB9CiAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OwogfQpAQCAtMzgwLDgyICszODQsNiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93Tk9Q
KQogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZXZlbnRO
YW1lRnJvbUF0dHJpYnV0ZU5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChu
YW1lLnN0YXJ0c1dpdGgoIm9uIikpOwotICAgIFN0cmluZyBldmVudFR5cGUgPSBuYW1lLnN1YnN0
cmluZygyKTsKLQotICAgIGlmIChldmVudFR5cGUuc3RhcnRzV2l0aCgidyIpKSB7Ci0gICAgICAg
IHN3aXRjaChldmVudFR5cGVbZXZlbnRUeXBlLmxlbmd0aCgpIC0gMV0pIHsKLSAgICAgICAgY2Fz
ZSAndCc6Ci0gICAgICAgICAgICBldmVudFR5cGUgPSAid2Via2l0QW5pbWF0aW9uU3RhcnQiOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ24nOgotICAgICAgICAgICAgZXZlbnRU
eXBlID0gIndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbiI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICBBU1NFUlQoZXZlbnRUeXBlLmxlbmd0aCgpID4g
Nyk7Ci0gICAgICAgICAgICBpZiAoZXZlbnRUeXBlWzddID09ICdhJykKLSAgICAgICAgICAgICAg
ICBldmVudFR5cGUgPSAid2Via2l0QW5pbWF0aW9uRW5kIjsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBldmVudFR5cGUgPSAid2Via2l0VHJhbnNpdGlvbkVuZCI7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBldmVudFR5cGU7Ci19
Ci0KLUFDQ0VTU09SX1NFVFRFUihET01XaW5kb3dFdmVudEhhbmRsZXIpCi17Ci0gICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIo
VjhDbGFzc0luZGV4OjpET01XSU5ET1csIGluZm8uVGhpcygpKTsKLSAgICBpZiAoaG9sZGVyLklz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRE9NV2luZG93KiBpbXAgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9N
V0lORE9XLCBob2xkZXIpOwotCi0gICAgRG9jdW1lbnQqIGRvYyA9IGltcC0+ZG9jdW1lbnQoKTsK
LQotICAgIGlmICghZG9jKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcga2V5ID0gdG9X
ZWJDb3JlU3RyaW5nKG5hbWUpOwotICAgIFN0cmluZyBldmVudFR5cGUgPSBldmVudE5hbWVGcm9t
QXR0cmlidXRlTmFtZShrZXkpOwotCi0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAg
ICAvLyBDbGVhciB0aGUgZXZlbnQgbGlzdGVuZXIKLSAgICAgICAgaW1wLT5jbGVhckF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBWOFByb3h5
KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGltcC0+ZnJhbWUoKSk7Ci0gICAgICAgIGlmICgh
cHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyID0gcHJveHktPmV2ZW50TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBw
ZXI8VjhFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFsdWUsIHRydWUpOwotICAgICAg
ICBpZiAobGlzdGVuZXIpCi0gICAgICAgICAgICBpbXAtPnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoZXZlbnRUeXBlLCBsaXN0ZW5lcik7Ci0gICAgfQotfQotCi1BQ0NFU1NPUl9HRVRURVIoRE9N
V2luZG93RXZlbnRIYW5kbGVyKQotewotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVy
ID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9X
LCBpbmZvLlRoaXMoKSk7Ci0gICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1cs
IGhvbGRlcik7Ci0KLSAgICBEb2N1bWVudCogZG9jID0gaW1wLT5kb2N1bWVudCgpOwotCi0gICAg
aWYgKCFkb2MpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcg
a2V5ID0gdG9XZWJDb3JlU3RyaW5nKG5hbWUpOwotICAgIFN0cmluZyBldmVudFR5cGUgPSBldmVu
dE5hbWVGcm9tQXR0cmlidXRlTmFtZShrZXkpOwotCi0gICAgRXZlbnRMaXN0ZW5lciogbGlzdGVu
ZXIgPSBpbXAtPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKLSAgICByZXR1
cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QobGlzdGVuZXIp
OwotfQotCiBzdGF0aWMgYm9vbCBjYW5TaG93TW9kYWxEaWFsb2dOb3coY29uc3QgRnJhbWUqIGZy
YW1lKQogewogICAgIC8vIEEgZnJhbWUgY2FuIG91dCBsaXZlIGl0cyBwYWdlLiBTZWUgYnVnIDEy
MTk2MTMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERlZGljYXRl
ZFdvcmtlckNvbnRleHRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhE
ZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAppbmRleCA3N2UyZmE0Li41Njc5NGFiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNv
bnRleHRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGVkaWNh
dGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKQEAgLTQyLDQ1ICs0Miw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQUNDRVNTT1JfR0VUVEVSKERlZGljYXRlZFdvcmtlckNvbnRleHRPbm1l
c3NhZ2UpCi17Ci0gICAgSU5DX1NUQVRTKEwiRE9NLkRlZGljYXRlZFdvcmtlckNvbnRleHQub25t
ZXNzYWdlLl9nZXQiKTsKLSAgICBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RGVkaWNhdGVkV29ya2VyQ29u
dGV4dD4oVjhDbGFzc0luZGV4OjpERURJQ0FURURXT1JLRVJDT05URVhULCBpbmZvLkhvbGRlcigp
KTsKLSAgICBpZiAod29ya2VyQ29udGV4dC0+b25tZXNzYWdlKCkpIHsKLSAgICAgICAgVjhXb3Jr
ZXJDb250ZXh0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOFdvcmtlckNv
bnRleHRFdmVudExpc3RlbmVyKj4od29ya2VyQ29udGV4dC0+b25tZXNzYWdlKCkpOwotICAgICAg
ICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5l
ck9iamVjdCgpOwotICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVSKERlZGljYXRlZFdvcmtlckNv
bnRleHRPbm1lc3NhZ2UpCi17Ci0gICAgSU5DX1NUQVRTKEwiRE9NLkRlZGljYXRlZFdvcmtlckNv
bnRleHQub25tZXNzYWdlLl9zZXQiKTsKLSAgICBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0KiB3b3Jr
ZXJDb250ZXh0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RGVkaWNhdGVk
V29ya2VyQ29udGV4dD4oVjhDbGFzc0luZGV4OjpERURJQ0FURURXT1JLRVJDT05URVhULCBpbmZv
LkhvbGRlcigpKTsKLSAgICBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyKiBvbGRMaXN0ZW5l
ciA9IHN0YXRpY19jYXN0PFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIqPih3b3JrZXJDb250
ZXh0LT5vbm1lc3NhZ2UoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAgICBp
ZiAod29ya2VyQ29udGV4dC0+b25tZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiBvbGRWOExpc3RlbmVyID0gb2xkTGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0
KCk7Ci0gICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9s
ZFY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprRGVkaWNhdGVkV29ya2VyQ29udGV4dFJlcXVlc3RDYWNo
ZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAg
ICAgICAgd29ya2VyQ29udGV4dC0+c2V0T25tZXNzYWdlKDApOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIFJlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gd29ya2VyQ29udGV4dC0+c2Ny
aXB0KCktPnByb3h5KCktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpP
YmplY3Q+OjpDYXN0KHZhbHVlKSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVy
KSB7Ci0gICAgICAgICAgICBpZiAob2xkTGlzdGVuZXIpIHsKLSAgICAgICAgICAgICAgICB2ODo6
TG9jYWw8djg6Ok9iamVjdD4gb2xkVjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5l
ck9iamVjdCgpOwotICAgICAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5I
b2xkZXIoKSwgb2xkVjhMaXN0ZW5lciwgVjhDdXN0b206OmtEZWRpY2F0ZWRXb3JrZXJDb250ZXh0
UmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3b3JrZXJD
b250ZXh0LT5zZXRPbm1lc3NhZ2UobGlzdGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlkZGVu
RGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtEZWRpY2F0ZWRXb3Jr
ZXJDb250ZXh0UmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCiBDQUxM
QkFDS19GVU5DX0RFQ0woRGVkaWNhdGVkV29ya2VyQ29udGV4dFBvc3RNZXNzYWdlKQogewogICAg
IElOQ19TVEFUUyhMIkRPTS5EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LnBvc3RNZXNzYWdlIik7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9t
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3Bw
CmluZGV4IDA2MTZjYzguLjY5MzM2NWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwCkBAIC0zNiw2NCArMzYsMjIgQEAKICNpbmNs
dWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0Q3VzdG9tLmgi
CiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgotI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgog
I2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihNZXNz
YWdlUG9ydCogbWVzc2FnZVBvcnQsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGZp
bmRPbmx5LCBib29sIGNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIpCitzdGF0aWMgUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBnZXRFdmVudExpc3RlbmVyKE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9y
dCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgZmluZE9ubHkpCiB7Ci0gICAgVjhQ
cm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShtZXNzYWdlUG9ydC0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKLSAgICBpZiAocHJveHkpIHsKLSAgICAgICAgVjhFdmVudExpc3RlbmVy
TGlzdCogbGlzdCA9IHByb3h5LT5vYmplY3RMaXN0ZW5lcnMoKTsKLSAgICAgICAgcmV0dXJuIGZp
bmRPbmx5ID8gbGlzdC0+ZmluZFdyYXBwZXIodmFsdWUsIGZhbHNlKSA6IGxpc3QtPmZpbmRPckNy
ZWF0ZVdyYXBwZXI8VjhPYmplY3RFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFsdWUs
IGZhbHNlKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkqIHdvcmtlckNvbnRleHRQcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eTo6cmV0cmlldmUoKTsKLSAgICBpZiAod29ya2VyQ29udGV4dFByb3h5KQotICAgICAg
ICByZXR1cm4gd29ya2VyQ29udGV4dFByb3h5LT5maW5kT3JDcmVhdGVFdmVudExpc3RlbmVySGVs
cGVyKHZhbHVlLCBmYWxzZSwgZmluZE9ubHksIGNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIpOwot
I2VuZGlmCi0KLSAgICByZXR1cm4gUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPigpOwotfQotCi1B
Q0NFU1NPUl9HRVRURVIoTWVzc2FnZVBvcnRPbm1lc3NhZ2UpCi17Ci0gICAgSU5DX1NUQVRTKCJE
T00uTWVzc2FnZVBvcnQub25tZXNzYWdlLl9nZXQiKTsKLSAgICBNZXNzYWdlUG9ydCogbWVzc2Fn
ZVBvcnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxNZXNzYWdlUG9ydD4o
VjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIFY4
RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KG1lc3NhZ2VQb3J0LT5v
bm1lc3NhZ2UoKSk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihNZXNzYWdlUG9ydE9ubWVzc2FnZSkK
LXsKLSAgICBJTkNfU1RBVFMoIkRPTS5NZXNzYWdlUG9ydC5vbm1lc3NhZ2UuX3NldCIpOwotICAg
IE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBpbmZvLkhvbGRl
cigpKTsKLSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlmIChtZXNzYWdlUG9y
dC0+b25tZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPihtZXNzYWdlUG9ydC0+
b25tZXNzYWdlKCkpOwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhv
bGRlcigpLCBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKSwgVjhDdXN0b206OmtNZXNzYWdl
UG9ydFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENsZWFyIHRo
ZSBsaXN0ZW5lci4KLSAgICAgICAgbWVzc2FnZVBvcnQtPnNldE9ubWVzc2FnZSgwKTsKLQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2
ZW50TGlzdGVuZXIobWVzc2FnZVBvcnQsIHZhbHVlLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBp
ZiAobGlzdGVuZXIpIHsKLSAgICAgICAgICAgIG1lc3NhZ2VQb3J0LT5zZXRPbm1lc3NhZ2UobGlz
dGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigp
LCB2YWx1ZSwgVjhDdXN0b206OmtNZXNzYWdlUG9ydFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKG1l
c3NhZ2VQb3J0LCB2YWx1ZSwgZmFsc2UsIGZpbmRPbmx5KTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19E
RUNMKE1lc3NhZ2VQb3J0QWRkRXZlbnRMaXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5N
ZXNzYWdlUG9ydC5hZGRFdmVudExpc3RlbmVyKCkiKTsKICAgICBNZXNzYWdlUG9ydCogbWVzc2Fn
ZVBvcnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxNZXNzYWdlUG9ydD4o
VjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgYXJncy5Ib2xkZXIoKSk7Ci0gICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcihtZXNzYWdlUG9ydCwgYXJn
c1sxXSwgZmFsc2UsIHRydWUpOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9
IGdldEV2ZW50TGlzdGVuZXIobWVzc2FnZVBvcnQsIGFyZ3NbMV0sIGZhbHNlKTsKICAgICBpZiAo
bGlzdGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1sw
XSk7CiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwpA
QCAtMTA4LDcgKzY2LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKE1lc3NhZ2VQb3J0UmVtb3ZlRXZl
bnRMaXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5NZXNzYWdlUG9ydC5yZW1vdmVFdmVu
dExpc3RlbmVyKCkiKTsKICAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxNZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4OjpNRVNT
QUdFUE9SVCwgYXJncy5Ib2xkZXIoKSk7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyID0gZ2V0RXZlbnRMaXN0ZW5lcihtZXNzYWdlUG9ydCwgYXJnc1sxXSwgdHJ1ZSwgdHJ1ZSk7
CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lciht
ZXNzYWdlUG9ydCwgYXJnc1sxXSwgdHJ1ZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAg
IFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgICAgICBib29sIHVz
ZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwCmluZGV4IDYxYWI4NjcuLmEzNDUwZTMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcApAQCAtMzksMjAgKzM5LDEy
IEBACiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21FdmVu
dExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhOb2RlLmgiCi0jaW5jbHVkZSAiVjhPYmplY3RFdmVu
dExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHRvRXZl
bnRUeXBlKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2YWx1ZSkKLXsKLSAgICBTdHJpbmcga2V5ID0g
dG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKLSAgICBBU1NFUlQoa2V5LnN0YXJ0c1dpdGgoIm9uIikp
OwotICAgIHJldHVybiBrZXkuc3Vic3RyaW5nKDIpOwotfQotCiBDQUxMQkFDS19GVU5DX0RFQ0wo
Tm9kZUFkZEV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTm9kZS5hZGRFdmVu
dExpc3RlbmVyKCkiKTsKQEAgLTc4LDcgKzcwLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKE5vZGVS
ZW1vdmVFdmVudExpc3RlbmVyKQogICAgIC8vIFNlZSBpc3N1ZSBodHRwOi8vYi84Nzg5MDkKICAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50
TGlzdGVuZXIobm9kZSwgYXJnc1sxXSwgZmFsc2UsIHRydWUpOwogICAgIGlmIChsaXN0ZW5lcikg
ewotICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICAg
ICAgQXRvbWljU3RyaW5nIHR5cGUgPSB2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKGFyZ3Nb
MF0pOwogICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsK
ICAgICAgICAgbm9kZS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lci5nZXQoKSwg
dXNlQ2FwdHVyZSk7CiAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIo
KSwgYXJnc1sxXSwgVjhDdXN0b206OmtOb2RlRXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJD
dXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50
ZXJDdXN0b20uY3BwCmluZGV4IGUxZGYwNmQuLmFkMjM5YjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAK
QEAgLTUxLDIxICs1MSwxMiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTm90aWZpY2F0aW9uQWRkRXZl
bnRMaXN0ZW5lcikKICAgICBJTkNfU1RBVFMoIkRPTS5Ob3RpZmljYXRpb24uYWRkRXZlbnRMaXN0
ZW5lcigpIik7CiAgICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb24+KFY4Q2xhc3NJbmRleDo6Tk9USUZJ
Q0FUSU9OLCBhcmdzLkhvbGRlcigpKTsKIAotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0
ZW5lcjsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gbm90aWZpY2F0aW9u
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKGNvbnRleHQtPmlzV29ya2VyQ29u
dGV4dCgpKQotICAgICAgICBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihj
b250ZXh0KS0+c2NyaXB0KCktPnByb3h5KCktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodjg6
OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0pLCBmYWxzZSwgZmFsc2UpOwotICAgIGVs
c2UgewotICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGNvbnRleHQp
OwotICAgICAgICBpZiAoIXByb3h5KQotICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKLSAgICAgICAgbGlzdGVuZXIgPSBwcm94eS0+ZXZlbnRMaXN0ZW5lcnMoKS0+ZmluZE9yQ3Jl
YXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCBhcmdzWzFdLCB0cnVl
KTsKLSAgICB9Ci0KKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdy
YXBwZXI6OmdldEV2ZW50TGlzdGVuZXIobm90aWZpY2F0aW9uLCBhcmdzWzFdLCBmYWxzZSwgZmFs
c2UpOwogICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29y
ZVN0cmluZyhhcmdzWzBdKTsKICAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9v
bGVhblZhbHVlKCk7CiAgICAgICAgIG5vdGlmaWNhdGlvbi0+YWRkRXZlbnRMaXN0ZW5lcih0eXBl
LCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CisgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3ko
YXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206OmtOb3RpZmljYXRpb25SZXF1ZXN0Q2Fj
aGVJbmRleCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTc2LDc3
ICs2NywxNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTm90aWZpY2F0aW9uUmVtb3ZlRXZlbnRMaXN0
ZW5lcikKICAgICBJTkNfU1RBVFMoIkRPTS5Ob3RpZmljYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5l
cigpIik7CiAgICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb24+KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FU
SU9OLCBhcmdzLkhvbGRlcigpKTsKIAotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
cjsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gbm90aWZpY2F0aW9uLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKGNvbnRleHQtPmlzV29ya2VyQ29udGV4
dCgpKQotICAgICAgICBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250
ZXh0KS0+c2NyaXB0KCktPnByb3h5KCktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodjg6Okxv
Y2FsPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0pLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoY29udGV4dCk7Ci0g
ICAgICAgIGlmICghcHJveHkpCi0gICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwot
ICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+ZXZlbnRMaXN0
ZW5lcnMoKS0+ZmluZFdyYXBwZXIoYXJnc1sxXSwgZmFsc2UpOwotICAgIH0KLQorICAgIFJlZlB0
cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5l
cihub3RpZmljYXRpb24sIGFyZ3NbMV0sIGZhbHNlLCB0cnVlKTsKICAgICBpZiAobGlzdGVuZXIp
IHsKICAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAg
ICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBu
b3RpZmljYXRpb24tPnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVz
ZUNhcHR1cmUpOworICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCks
IGFyZ3NbMV0sIFY4Q3VzdG9tOjprTm90aWZpY2F0aW9uUmVxdWVzdENhY2hlSW5kZXgpOwogICAg
IH0KIAogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLUFDQ0VTU09SX1NFVFRFUihO
b3RpZmljYXRpb25FdmVudEhhbmRsZXIpCi17Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBo
b2xkZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpOT1RJ
RklDQVRJT04sIGluZm8uVGhpcygpKTsKLSAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb24+KFY4Q2xhc3NJbmRleDo6Tk9U
SUZJQ0FUSU9OLCBob2xkZXIpOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQg
PSBub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLQotICAgIGlmICghY29u
dGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmlu
ZyhuYW1lKTsKLSAgICBBU1NFUlQoa2V5LnN0YXJ0c1dpdGgoIm9uIikpOwotICAgIFN0cmluZyBl
dmVudFR5cGUgPSBrZXkuc3Vic3RyaW5nKDIpOwotCi0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkg
ewotICAgICAgICAvLyBDbGVhciB0aGUgZXZlbnQgbGlzdGVuZXIKLSAgICAgICAgbm90aWZpY2F0
aW9uLT5jbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXI7Ci0gICAgICAgIGlmIChj
b250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKLSAgICAgICAgICAgIGxpc3RlbmVyID0gc3RhdGlj
X2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLT5zY3JpcHQoKS0+cHJveHkoKS0+ZmluZE9y
Q3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpLCBm
YWxzZSwgZmFsc2UpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFY4UHJveHkqIHByb3h5
ID0gVjhQcm94eTo6cmV0cmlldmUoY29udGV4dCk7Ci0gICAgICAgICAgICBpZiAoIXByb3h5KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGxpc3RlbmVyID0gcHJveHktPmV2
ZW50TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94
eS0+ZnJhbWUoKSwgdmFsdWUsIHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxpc3Rl
bmVyKQotICAgICAgICAgICAgbm90aWZpY2F0aW9uLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSwgbGlzdGVuZXIpOwotICAgIH0KLX0KLQotQUNDRVNTT1JfR0VUVEVSKE5vdGlm
aWNhdGlvbkV2ZW50SGFuZGxlcikKLXsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRl
ciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRP
VywgaW5mby5UaGlzKCkpOwotICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb24+KFY4Q2xhc3NJ
bmRleDo6Tk9USUZJQ0FUSU9OLCBob2xkZXIpOwotCi0gICAgU3RyaW5nIGtleSA9IHRvV2ViQ29y
ZVN0cmluZyhuYW1lKTsKLSAgICBBU1NFUlQoa2V5LnN0YXJ0c1dpdGgoIm9uIikpOwotICAgIFN0
cmluZyBldmVudFR5cGUgPSBrZXkuc3Vic3RyaW5nKDIpOwotCi0gICAgRXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIgPSBub3RpZmljYXRpb24tPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRU
eXBlKTsKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhP
YmplY3QobGlzdGVuZXIpOwotfQotCiBDQUxMQkFDS19GVU5DX0RFQ0woTm90aWZpY2F0aW9uQ2Vu
dGVyQ3JlYXRlSFRNTE5vdGlmaWNhdGlvbikKIHsKICAgICBJTkNfU1RBVFMoTCJET00uTm90aWZp
Y2F0aW9uQ2VudGVyLkNyZWF0ZUhUTUxOb3RpZmljYXRpb24oKSIpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3Bw
CmluZGV4IGNlOWMzNDUuLjljMTM0MTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAKQEAgLTQ5LDE1ICs0
OSwxMiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woU1ZHRWxlbWVudEluc3RhbmNlQWRkRXZlbnRMaXN0
ZW5lcikKICAgICBJTkNfU1RBVFMoIkRPTS5TVkdFbGVtZW50SW5zdGFuY2UuQWRkRXZlbnRMaXN0
ZW5lcigpIik7CiAgICAgU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxTVkdFbGVtZW50SW5zdGFuY2U+KGFyZ3MuSG9s
ZGVyKCkpOwogCi0gICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShpbnN0YW5j
ZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAoIXByb3h5KQotICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyID0gcHJveHktPmV2ZW50TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVu
dExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgYXJnc1sxXSwgZmFsc2UpOworICAgIFJlZlB0cjxF
dmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihp
bnN0YW5jZSwgYXJnc1sxXSwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAg
ICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJv
b2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBpbnN0YW5j
ZS0+YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CisgICAgICAg
IGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206
OmtOb2RlRXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgpOwogICAgIH0KIAogICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CkBAIC02OCwxNSArNjUsMTIgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFNWR0Vs
ZW1lbnRJbnN0YW5jZVJlbW92ZUV2ZW50TGlzdGVuZXIpCiAgICAgSU5DX1NUQVRTKCJET00uU1ZH
RWxlbWVudEluc3RhbmNlLlJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwogICAgIFNWR0VsZW1lbnRJ
bnN0YW5jZSogaW5zdGFuY2UgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRp
dmU8U1ZHRWxlbWVudEluc3RhbmNlPihhcmdzLkhvbGRlcigpKTsKIAotICAgIFY4UHJveHkqIHBy
b3h5ID0gVjhQcm94eTo6cmV0cmlldmUoaW5zdGFuY2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7Ci0gICAgaWYgKCFwcm94eSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQot
ICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5ldmVudExpc3RlbmVy
cygpLT5maW5kV3JhcHBlcihhcmdzWzFdLCBmYWxzZSk7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKGluc3RhbmNlLCBh
cmdzWzFdLCBmYWxzZSwgdHJ1ZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIFN0cmlu
ZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgICAgICBib29sIHVzZUNhcHR1
cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKICAgICAgICAgaW5zdGFuY2UtPnJlbW92ZUV2
ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1cmUpOworICAgICAgICBy
ZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjpr
Tm9kZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKICAgICB9CiAKICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJT
b2NrZXRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRD
dXN0b20uY3BwCmluZGV4IDAyNDQxOWQuLmE4ZmRmODQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAKQEAgLTQ1LDEyMiArNDUsNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGdldEV2ZW50TGlzdGVuZXIoV2ViU29ja2V0KiB3ZWJTb2NrZXQsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBib29sIGZpbmRPbmx5KQotewotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIFdv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogd29ya2VyQ29udGV4dFByb3h5ID0gV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpOwotICAgIGlmICh3b3JrZXJDb250ZXh0UHJv
eHkpCi0gICAgICAgIHJldHVybiB3b3JrZXJDb250ZXh0UHJveHktPmZpbmRPckNyZWF0ZU9iamVj
dEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNlLCBmaW5kT25seSk7Ci0jZW5kaWYKLQotICAgIFY4
UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUod2ViU29ja2V0LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwotICAgIGlmIChwcm94eSkgewotICAgICAgICBWOEV2ZW50TGlzdGVuZXJM
aXN0KiBsaXN0ID0gcHJveHktPm9iamVjdExpc3RlbmVycygpOwotICAgICAgICByZXR1cm4gZmlu
ZE9ubHkgPyBsaXN0LT5maW5kV3JhcHBlcih2YWx1ZSwgZmFsc2UpIDogbGlzdC0+ZmluZE9yQ3Jl
YXRlV3JhcHBlcjxWOE9iamVjdEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwg
ZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KCk7
Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihXZWJTb2NrZXRPbm9wZW4pCi17Ci0gICAgSU5DX1NUQVRT
KCJET00uV2ViU29ja2V0Lm9ub3Blbi5fZ2V0Iik7Ci0gICAgV2ViU29ja2V0KiB3ZWJTb2NrZXQg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJTb2NrZXQ+KFY4Q2xhc3NJ
bmRleDo6V0VCU09DS0VULCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAod2ViU29ja2V0LT5vbm9w
ZW4oKSkgewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGlj
X2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4od2ViU29ja2V0LT5vbm9wZW4oKSk7Ci0gICAg
ICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3Rl
bmVyT2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiB2OExpc3RlbmVyOwotICAgIH0KLSAgICByZXR1
cm4gdjg6Ok51bGwoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVSKFdlYlNvY2tldE9ub3BlbikKLXsK
LSAgICBJTkNfU1RBVFMoIkRPTS5XZWJTb2NrZXQub25vcGVuLl9zZXQiKTsKLSAgICBXZWJTb2Nr
ZXQqIHdlYlNvY2tldCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYlNv
Y2tldD4oVjhDbGFzc0luZGV4OjpXRUJTT0NLRVQsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh2
YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHdlYlNvY2tldC0+b25vcGVuKCkpIHsKLSAg
ICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxW
OE9iamVjdEV2ZW50TGlzdGVuZXIqPih3ZWJTb2NrZXQtPm9ub3BlbigpKTsKLSAgICAgICAgICAg
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVy
T2JqZWN0KCk7Ci0gICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVy
KCksIHY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprV2ViU29ja2V0Q2FjaGVJbmRleCk7Ci0gICAgICAg
IH0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgotICAgICAgICB3ZWJTb2NrZXQtPnNl
dE9ub3BlbigwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
bGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHdlYlNvY2tldCwgdmFsdWUsIGZhbHNlKTsKLSAg
ICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB3ZWJTb2NrZXQtPnNldE9ub3Blbihs
aXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVy
KCksIHZhbHVlLCBWOEN1c3RvbTo6a1dlYlNvY2tldENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi1BQ0NFU1NPUl9HRVRURVIoV2ViU29ja2V0T25tZXNzYWdlKQotewotICAgIElO
Q19TVEFUUygiRE9NLldlYlNvY2tldC5vbm1lc3NhZ2UuX2dldCIpOwotICAgIFdlYlNvY2tldCog
d2ViU29ja2V0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViU29ja2V0
PihWOENsYXNzSW5kZXg6OldFQlNPQ0tFVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHdlYlNv
Y2tldC0+b25tZXNzYWdlKCkpIHsKLSAgICAgICAgUmVmUHRyPFY4T2JqZWN0RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih3ZWJTb2Nr
ZXQtPm9ubWVzc2FnZSgpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVu
ZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHY4TGlz
dGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQotCi1BQ0NFU1NPUl9TRVRU
RVIoV2ViU29ja2V0T25tZXNzYWdlKQotewotICAgIElOQ19TVEFUUygiRE9NLldlYlNvY2tldC5v
bm1lc3NhZ2UuX3NldCIpOwotICAgIFdlYlNvY2tldCogd2ViU29ja2V0ID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViU29ja2V0PihWOENsYXNzSW5kZXg6OldFQlNPQ0tF
VCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAgICBp
ZiAod2ViU29ja2V0LT5vbm1lc3NhZ2UoKSkgewotICAgICAgICAgICAgVjhPYmplY3RFdmVudExp
c3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHdl
YlNvY2tldC0+b25tZXNzYWdlKCkpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAg
IHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lciwgVjhDdXN0
b206OmtXZWJTb2NrZXRDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgICAgICAvLyBDbGVhciB0
aGUgbGlzdGVuZXIuCi0gICAgICAgIHdlYlNvY2tldC0+c2V0T25tZXNzYWdlKDApOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50
TGlzdGVuZXIod2ViU29ja2V0LCB2YWx1ZSwgZmFsc2UpOwotICAgICAgICBpZiAobGlzdGVuZXIp
IHsKLSAgICAgICAgICAgIHdlYlNvY2tldC0+c2V0T25tZXNzYWdlKGxpc3RlbmVyKTsKLSAgICAg
ICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3Vz
dG9tOjprV2ViU29ja2V0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUFDQ0VT
U09SX0dFVFRFUihXZWJTb2NrZXRPbmNsb3NlKQotewotICAgIElOQ19TVEFUUygiRE9NLldlYlNv
Y2tldC5vbmNsb3NlLl9nZXQiKTsKLSAgICBXZWJTb2NrZXQqIHdlYlNvY2tldCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYlNvY2tldD4oVjhDbGFzc0luZGV4OjpXRUJT
T0NLRVQsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh3ZWJTb2NrZXQtPm9uY2xvc2UoKSkgewot
ICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhP
YmplY3RFdmVudExpc3RlbmVyKj4od2ViU29ja2V0LT5vbmNsb3NlKCkpOwotICAgICAgICB2ODo6
TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVj
dCgpOwotICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJuIHY4OjpO
dWxsKCk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihXZWJTb2NrZXRPbmNsb3NlKQotewotICAgIElO
Q19TVEFUUygiRE9NLldlYlNvY2tldC5vbmNsb3NlLl9zZXQiKTsKLSAgICBXZWJTb2NrZXQqIHdl
YlNvY2tldCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYlNvY2tldD4o
VjhDbGFzc0luZGV4OjpXRUJTT0NLRVQsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh2YWx1ZS0+
SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHdlYlNvY2tldC0+b25jbG9zZSgpKSB7Ci0gICAgICAg
ICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmpl
Y3RFdmVudExpc3RlbmVyKj4od2ViU29ja2V0LT5vbmNsb3NlKCkpOwotICAgICAgICAgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmpl
Y3QoKTsKLSAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwg
djhMaXN0ZW5lciwgVjhDdXN0b206OmtXZWJTb2NrZXRDYWNoZUluZGV4KTsKLSAgICAgICAgfQot
ICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCi0gICAgICAgIHdlYlNvY2tldC0+c2V0T25j
bG9zZSgwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlz
dGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHdlYlNvY2tldCwgdmFsdWUsIGZhbHNlKTsKLSAgICAg
ICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB3ZWJTb2NrZXQtPnNldE9uY2xvc2UobGlz
dGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigp
LCB2YWx1ZSwgVjhDdXN0b206OmtXZWJTb2NrZXRDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQogLy8gPz8/IEFkZEV2ZW50TGlzdGVuZXIsIFJlbW92ZUV2ZW50TGlzdGVuZXIKIAog
Q0FMTEJBQ0tfRlVOQ19ERUNMKFdlYlNvY2tldENvbnN0cnVjdG9yKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKaW5kZXggNDkz
NGYwZC4uMWJiZGJiMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhX
b3JrZXJDb250ZXh0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdvcmtlckNvbnRleHRDdXN0b20uY3BwCkBAIC01Miw0NSArNTIsNiBAQCBBQ0NFU1NPUl9HRVRU
RVIoV29ya2VyQ29udGV4dFNlbGYpCiAgICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6Y29udmVydFdvcmtlckNvbnRleHRUb1Y4T2JqZWN0KHdvcmtlckNvbnRleHQpOwogfQog
Ci1BQ0NFU1NPUl9HRVRURVIoV29ya2VyQ29udGV4dE9uZXJyb3IpCi17Ci0gICAgSU5DX1NUQVRT
KEwiRE9NLldvcmtlckNvbnRleHQub25lcnJvci5fZ2V0Iik7Ci0gICAgV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtl
ckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwgaW5mby5Ib2xkZXIoKSk7Ci0g
ICAgaWYgKHdvcmtlckNvbnRleHQtPm9uZXJyb3IoKSkgewotICAgICAgICBWOFdvcmtlckNvbnRl
eHRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4V29ya2VyQ29udGV4dEV2
ZW50TGlzdGVuZXIqPih3b3JrZXJDb250ZXh0LT5vbmVycm9yKCkpOwotICAgICAgICB2ODo6TG9j
YWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgp
OwotICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVSKFdvcmtlckNvbnRleHRPbmVycm9yKQotewot
ICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXJDb250ZXh0Lm9uZXJyb3IuX3NldCIpOwotICAgIFdv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGluZm8u
SG9sZGVyKCkpOwotICAgIFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIqIG9sZExpc3RlbmVy
ID0gc3RhdGljX2Nhc3Q8VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcio+KHdvcmtlckNvbnRl
eHQtPm9uZXJyb3IoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAgICBpZiAo
d29ya2VyQ29udGV4dC0+b25lcnJvcigpKSB7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gb2xkVjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwot
ICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvbGRWOExp
c3RlbmVyLCBWOEN1c3RvbTo6a1dvcmtlckNvbnRleHRSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCi0gICAgICAgIHdvcmtlckNv
bnRleHQtPnNldE9uZXJyb3IoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPFY4RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSB3b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+cHJveHkoKS0+
ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QodmFs
dWUpLCB0cnVlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICAgICAg
aWYgKG9sZExpc3RlbmVyKSB7Ci0gICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IG9sZFY4TGlzdGVuZXIgPSBvbGRMaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAg
ICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9sZFY4TGlz
dGVuZXIsIFY4Q3VzdG9tOjprV29ya2VyQ29udGV4dFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgd29ya2VyQ29udGV4dC0+c2V0T25lcnJvcihsaXN0ZW5l
cik7Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZh
bHVlLCBWOEN1c3RvbTo6a1dvcmtlckNvbnRleHRSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBTZXRUaW1lb3V0T3JJbnRlcnZh
bChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBib29sIHNpbmdsZVNob3QpCiB7CiAgICAgV29y
a2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxXb3JrZXJDb250ZXh0PihhcmdzLkhvbGRlcigpKTsKQEAgLTE3MSw4ICsxMzIs
NyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4dEFkZEV2ZW50TGlzdGVuZXIpCiAg
ICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcigpIik7CiAg
ICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERP
TVdyYXBwZXJUb05hdGl2ZTxXb3JrZXJDb250ZXh0PihhcmdzLkhvbGRlcigpKTsKIAotICAgIFJl
ZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gd29ya2VyQ29udGV4dC0+c2NyaXB0KCkt
PnByb3h5KCktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpPYmplY3Q+
OjpDYXN0KGFyZ3NbMV0pLCBmYWxzZSwgZmFsc2UpOwotCisgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKHdvcmtlckNvbnRl
eHQsIGFyZ3NbMV0sIGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAg
IFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgICAgICBib29sIHVz
ZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKQEAgLTE4NywxMCArMTQ3LDggQEAg
Q0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckNvbnRleHRSZW1vdmVFdmVudExpc3RlbmVyKQogewog
ICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXJDb250ZXh0LnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIp
OwogICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRET01XcmFwcGVyVG9OYXRpdmU8V29ya2VyQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0gICAg
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSA9IHdvcmtlckNvbnRleHQtPnNjcmlw
dCgpLT5wcm94eSgpOwotCi0gICAgUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBw
cm94eS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNh
c3QoYXJnc1sxXSksIGZhbHNlLCB0cnVlKTsKIAorICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcih3b3JrZXJDb250ZXh0LCBh
cmdzWzFdLCBmYWxzZSwgdHJ1ZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIFN0cmlu
ZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgICAgICBib29sIHVzZUNhcHR1
cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKQEAgLTE5OCw3ICsxNTYsNiBAQCBDQUxMQkFD
S19GVU5DX0RFQ0woV29ya2VyQ29udGV4dFJlbW92ZUV2ZW50TGlzdGVuZXIpCiAKICAgICAgICAg
cmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3RvbTo6
a1dvcmtlckNvbnRleHRSZXF1ZXN0Q2FjaGVJbmRleCk7CiAgICAgfQotCiAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXb3JrZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3Jr
ZXJDdXN0b20uY3BwCmluZGV4IDFjZWNkZTAuLjM1MmM3YTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNs
dWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJWOE1lc3NhZ2VQb3J0Q3VzdG9tLmgiCi0jaW5jbHVkZSAiVjhPYmplY3RFdmVudExpc3RlbmVy
LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiV29ya2VyQ29udGV4dC5oIgpAQCAtODcsNjIgKzg2LDYgQEAgQ0FMTEJBQ0tfRlVOQ19E
RUNMKFdvcmtlckNvbnN0cnVjdG9yKQogICAgIHJldHVybiB3cmFwcGVyT2JqZWN0OwogfQogCi1Q
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoV29ya2VyKiB3b3JrZXIs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBib29sIGZpbmRP
bmx5KQotewotICAgIGlmICh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNXb3Jr
ZXJDb250ZXh0KCkpIHsKLSAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiB3b3Jr
ZXJDb250ZXh0UHJveHkgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCk7
Ci0gICAgICAgIEFTU0VSVCh3b3JrZXJDb250ZXh0UHJveHkpOwotICAgICAgICByZXR1cm4gd29y
a2VyQ29udGV4dFByb3h5LT5maW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBp
c0F0dHJpYnV0ZSwgZmluZE9ubHkpOwotICAgIH0KLQotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQ
cm94eTo6cmV0cmlldmUod29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIGlm
IChwcm94eSkgewotICAgICAgICBWOEV2ZW50TGlzdGVuZXJMaXN0KiBsaXN0ID0gcHJveHktPm9i
amVjdExpc3RlbmVycygpOwotICAgICAgICByZXR1cm4gZmluZE9ubHkgPyBsaXN0LT5maW5kV3Jh
cHBlcih2YWx1ZSwgaXNBdHRyaWJ1dGUpIDogbGlzdC0+ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOE9i
amVjdEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwgaXNBdHRyaWJ1dGUpOwot
ICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1BQ0NFU1NPUl9HRVRURVIoV29ya2VyT25tZXNz
YWdlKQotewotICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXIub25tZXNzYWdlLl9nZXQiKTsKLSAg
ICBXb3JrZXIqIHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdv
cmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh3b3Jr
ZXItPm9ubWVzc2FnZSgpKSB7Ci0gICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVu
ZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih3b3JrZXItPm9ubWVzc2Fn
ZSgpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5l
ci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAg
fQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihXb3Jr
ZXJPbm1lc3NhZ2UpCi17Ci0gICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlci5vbm1lc3NhZ2UuX3Nl
dCIpOwotICAgIFdvcmtlciogd29ya2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgaW5mby5Ib2xkZXIoKSk7Ci0gICAg
VjhPYmplY3RFdmVudExpc3RlbmVyKiBvbGRMaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0
RXZlbnRMaXN0ZW5lcio+KHdvcmtlci0+b25tZXNzYWdlKCkpOwotICAgIGlmICh2YWx1ZS0+SXNO
dWxsKCkpIHsKLSAgICAgICAgaWYgKG9sZExpc3RlbmVyKSB7Ci0gICAgICAgICAgICB2ODo6TG9j
YWw8djg6Ok9iamVjdD4gb2xkVjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9i
amVjdCgpOwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigp
LCBvbGRWOExpc3RlbmVyLCBWOEN1c3RvbTo6a1dvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgd29ya2Vy
LT5zZXRPbm1lc3NhZ2UoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIHZhbHVlLCB0cnVlLCBm
YWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICAgICAgaWYgKG9sZExpc3Rl
bmVyKSB7Ci0gICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9sZFY4TGlzdGVu
ZXIgPSBvbGRMaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgICAgICBy
ZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9sZFY4TGlzdGVuZXIsIFY4Q3Vz
dG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB3b3JrZXItPnNldE9ubWVzc2FnZShsaXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVhdGVI
aWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a1dvcmtlclJl
cXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogQ0FMTEJBQ0tfRlVOQ19E
RUNMKFdvcmtlclBvc3RNZXNzYWdlKQogewogICAgIElOQ19TVEFUUygiRE9NLldvcmtlci5wb3N0
TWVzc2FnZSIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxI
dHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNjJlOTIzZi4uYWY2NDdjZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0
cnVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1
ZXN0Q29uc3RydWN0b3IuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKLSNp
bmNsdWRlICJWOE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAj
aW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3Rv
bS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9t
LmNwcAppbmRleCA0NmM3YTdmLi43NGE2YWE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtMzcsNyArMzcsNiBA
QAogI2luY2x1ZGUgIlY4RG9jdW1lbnQuaCIKICNpbmNsdWRlICJWOEZpbGUuaCIKICNpbmNsdWRl
ICJWOEhUTUxEb2N1bWVudC5oIgotI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUg
IldvcmtlckNvbnRleHQuaCIKQEAgLTQ1LDIzMCArNDQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWVudW0gRXZlbnRMaXN0ZW5lclR5cGUgeyBBdHRyaWJ1dGVFdmVudExpc3RlbmVyVHlw
ZSwgT2JqZWN0RXZlbnRMaXN0ZW5lclR5cGUgfTsKLQotc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3Qs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBFdmVudExpc3RlbmVyVHlwZSB0eXBlLCBib29s
IGZpbmRPbmx5KQotewotICAgIGJvb2wgaXNBdHRyaWJ1dGUgPSB0eXBlID09IEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXJUeXBlOwotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIFdvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eSogd29ya2VyQ29udGV4dFByb3h5ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5OjpyZXRyaWV2ZSgpOwotICAgIGlmICh3b3JrZXJDb250ZXh0UHJveHkpCi0gICAgICAg
IHJldHVybiB3b3JrZXJDb250ZXh0UHJveHktPmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVu
ZXIodmFsdWUsIGlzQXR0cmlidXRlLCBmaW5kT25seSk7Ci0jZW5kaWYKLQotICAgIFY4UHJveHkq
IHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7Ci0gICAgaWYgKHByb3h5KSB7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxp
c3QqIGxpc3QgPSBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCk7Ci0gICAgICAgIHJldHVybiBmaW5k
T25seSA/IGxpc3QtPmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkgOiBsaXN0LT5maW5k
T3JDcmVhdGVXcmFwcGVyPFY4T2JqZWN0RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZh
bHVlLCBpc0F0dHJpYnV0ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4oKTsKLX0KLQotQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25hYm9ydCkK
LXsKLSAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5vbmFib3J0Ll9nZXQiKTsKLSAg
ICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVT
VCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbmFib3J0KCkpIHsK
LSAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4
T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbmFib3J0KCkpOwotICAgICAg
ICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5l
ck9iamVjdCgpOwotICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJu
IHY4OjpOdWxsKCk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdE9uYWJvcnQp
Ci17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25hYm9ydC5fc2V0Iik7Ci0g
ICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVF
U1QsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAg
aWYgKHhtbEh0dHBSZXF1ZXN0LT5vbmFib3J0KCkpIHsKLSAgICAgICAgICAgIFY4T2JqZWN0RXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIq
Pih4bWxIdHRwUmVxdWVzdC0+b25hYm9ydCgpKTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAg
ICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVuZXIs
IFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9u
YWJvcnQoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxp
c3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgdmFsdWUsIEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXJUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAg
ICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9uYWJvcnQobGlzdGVuZXIpOwotICAgICAgICAg
ICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206
OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1BQ0NF
U1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RPbmVycm9yKQotewotICAgIElOQ19TVEFUUygiRE9N
LlhNTEh0dHBSZXF1ZXN0Lm9uZXJyb3IuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxI
dHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBS
ZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKLSAg
ICBpZiAoeG1sSHR0cFJlcXVlc3QtPm9uZXJyb3IoKSkgewotICAgICAgICBSZWZQdHI8VjhPYmpl
Y3RFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0
ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbmVycm9yKCkpOwotICAgICAgICB2ODo6TG9jYWw8djg6
Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAg
ICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci19
Ci0KLUFDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdE9uZXJyb3IpCi17Ci0gICAgSU5DX1NU
QVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25lcnJvci5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVl
c3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVy
KCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHhtbEh0dHBSZXF1
ZXN0LT5vbmVycm9yKCkpIHsKLSAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVz
dC0+b25lcnJvcigpKTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3Rl
bmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAgICByZW1vdmVI
aWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprWE1M
SHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENsZWFyIHRo
ZSBsaXN0ZW5lci4KLSAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9uZXJyb3IoMCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZl
bnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgdmFsdWUsIEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJU
eXBlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICAgICAgeG1sSHR0
cFJlcXVlc3QtPnNldE9uZXJyb3IobGlzdGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlkZGVu
RGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVz
dENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1BQ0NFU1NPUl9HRVRURVIoWE1M
SHR0cFJlcXVlc3RPbmxvYWQpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qu
b25sb2FkLl9nZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0lu
ZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHhtbEh0dHBSZXF1
ZXN0LT5vbmxvYWQoKSkgewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVy
ID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3QtPm9u
bG9hZCgpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0
ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0g
ICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQotCi1BQ0NFU1NPUl9TRVRURVIoWE1MSHR0
cFJlcXVlc3RPbmxvYWQpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25s
b2FkLl9zZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4
OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwo
KSkgewotICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3QtPm9ubG9hZCgpKSB7Ci0gICAgICAgICAg
ICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RF
dmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3QtPm9ubG9hZCgpKTsKLSAgICAgICAgICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2Jq
ZWN0KCk7Ci0gICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCks
IHY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbmxvYWQoMCk7Ci0KLSAgICB9IGVs
c2UgewotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExp
c3RlbmVyKHhtbEh0dHBSZXF1ZXN0LCB2YWx1ZSwgQXR0cmlidXRlRXZlbnRMaXN0ZW5lclR5cGUs
IGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB4bWxIdHRwUmVx
dWVzdC0+c2V0T25sb2FkKGxpc3RlbmVyLmdldCgpKTsKLSAgICAgICAgICAgIGNyZWF0ZUhpZGRl
bkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVl
c3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotQUNDRVNTT1JfR0VUVEVSKFhN
TEh0dHBSZXF1ZXN0T25sb2Fkc3RhcnQpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJl
cXVlc3Qub25sb2Fkc3RhcnQuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVx
dWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0
PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAo
eG1sSHR0cFJlcXVlc3QtPm9ubG9hZHN0YXJ0KCkpIHsKLSAgICAgICAgVjhPYmplY3RFdmVudExp
c3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHht
bEh0dHBSZXF1ZXN0LT5vbmxvYWRzdGFydCgpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAg
cmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQotCi1B
Q0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RPbmxvYWRzdGFydCkKLXsKLSAgICBJTkNfU1RB
VFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5vbmxvYWRzdGFydC5fc2V0Iik7Ci0gICAgWE1MSHR0cFJl
cXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9s
ZGVyKCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHhtbEh0dHBS
ZXF1ZXN0LT5vbmxvYWRzdGFydCgpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVu
ZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0
cFJlcXVlc3QtPm9ubG9hZHN0YXJ0KCkpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAg
ICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lciwgVjhD
dXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gQ2xlYXIgdGhlIGxpc3RlbmVyLgotICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25sb2Fk
c3RhcnQoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxp
c3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgdmFsdWUsIEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXJUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAg
ICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ubG9hZHN0YXJ0KGxpc3RlbmVyKTsKLSAgICAg
ICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3Vz
dG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
QUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25wcm9ncmVzcykKLXsKLSAgICBJTkNfU1RB
VFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5vbnByb2dyZXNzLl9nZXQiKTsKLSAgICBYTUxIdHRwUmVx
dWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbnByb2dyZXNzKCkpIHsKLSAgICAgICAg
VjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZl
bnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbnByb2dyZXNzKCkpOwotICAgICAgICB2ODo6
TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVj
dCgpOwotICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJuIHY4OjpO
dWxsKCk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdE9ucHJvZ3Jlc3MpCi17
Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25wcm9ncmVzcy5fc2V0Iik7Ci0g
ICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVF
U1QsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAg
aWYgKHhtbEh0dHBSZXF1ZXN0LT5vbnByb2dyZXNzKCkpIHsKLSAgICAgICAgICAgIFY4T2JqZWN0
RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVu
ZXIqPih4bWxIdHRwUmVxdWVzdC0+b25wcm9ncmVzcygpKTsKLSAgICAgICAgICAgIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7
Ci0gICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHY4TGlz
dGVuZXIsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgeG1sSHR0cFJlcXVlc3Qt
PnNldE9ucHJvZ3Jlc3MoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgdmFsdWUs
IEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5l
cikgewotICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ucHJvZ3Jlc3MobGlzdGVuZXIp
OwotICAgICAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1
ZSwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi1BQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RPbnJlYWR5c3RhdGVjaGFuZ2Up
Ci17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdl
Ll9nZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpY
TUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5v
bnJlYWR5c3RhdGVjaGFuZ2UoKSkgewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxp
c3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVl
c3QtPm9ucmVhZHlzdGF0ZWNoYW5nZSgpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0
dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQotCi1BQ0NF
U1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RPbnJlYWR5c3RhdGVjaGFuZ2UpCi17Ci0gICAgSU5D
X1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlLl9zZXQiKTsKLSAg
ICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVT
VCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAgICBp
ZiAoeG1sSHR0cFJlcXVlc3QtPm9ucmVhZHlzdGF0ZWNoYW5nZSgpKSB7Ci0gICAgICAgICAgICBW
OE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVu
dExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3QtPm9ucmVhZHlzdGF0ZWNoYW5nZSgpKTsKLSAgICAg
ICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExp
c3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8u
SG9sZGVyKCksIHY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAgICAg
eG1sSHR0cFJlcXVlc3QtPnNldE9ucmVhZHlzdGF0ZWNoYW5nZSgwKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVy
KHhtbEh0dHBSZXF1ZXN0LCB2YWx1ZSwgQXR0cmlidXRlRXZlbnRMaXN0ZW5lclR5cGUsIGZhbHNl
KTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+
c2V0T25yZWFkeXN0YXRlY2hhbmdlKGxpc3RlbmVyLmdldCgpKTsKLSAgICAgICAgICAgIGNyZWF0
ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprWE1MSHR0
cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogQUNDRVNTT1JfR0VU
VEVSKFhNTEh0dHBSZXF1ZXN0UmVzcG9uc2VUZXh0KQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlz
IG9ubHkgbmVlZGVkIGJlY2F1c2Ugd2Via2l0IHNldCB0aGlzIGdldHRlciBhcyBjdXN0b20uCkBA
IC0yODMsNyArNTgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RBZGRFdmVu
dExpc3RlbmVyKQogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0LmFkZEV2ZW50TGlz
dGVuZXIoKSIpOwogICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6
OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigpKTsKIAotICAgIFJlZlB0cjxFdmVudExpc3Rl
bmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIGFyZ3NbMV0s
IE9iamVjdEV2ZW50TGlzdGVuZXJUeXBlLCBmYWxzZSk7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKHhtbEh0dHBSZXF1
ZXN0LCBhcmdzWzFdLCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChsaXN0ZW5lcikgewogICAgICAg
ICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICAgICAgYm9vbCB1
c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CkBAIC0yOTksNyArNzQsNyBAQCBD
QUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RSZW1vdmVFdmVudExpc3RlbmVyKQogICAg
IElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwog
ICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFV
RVNULCBhcmdzLkhvbGRlcigpKTsKIAotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
ciA9IGdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIGFyZ3NbMV0sIE9iamVjdEV2ZW50
TGlzdGVuZXJUeXBlLCB0cnVlKTsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIg
PSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIGFyZ3NbMV0s
IGZhbHNlLCB0cnVlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5cGUg
PSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFy
Z3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAppbmRleCBiYmM2OWRk
Li45ZTI1ZjMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0
dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFhNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRl
ICJWOEN1c3RvbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOE9iamVjdEV2ZW50TGlzdGVuZXIuaCIK
ICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJYTUxIdHRwUmVxdWVzdC5oIgpAQCAtNDMsMjEyICs0MiwxNCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9uYWJvcnQpCi17
Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25hYm9ydC5fZ2V0Iik7
Ci0gICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xh
c3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh4
bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25hYm9ydCgpKSB7Ci0gICAgICAgIFY4T2JqZWN0RXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4
bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25hYm9ydCgpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAg
ICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQot
Ci1BQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmFib3J0KQotewotICAgIElO
Q19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9uYWJvcnQuX3NldCIpOwotICAgIFhN
TEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6
OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAodmFsdWUtPklz
TnVsbCgpKSB7Ci0gICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25hYm9ydCgpKSB7
Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nh
c3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uYWJvcnQo
KSk7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3Rl
bmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5k
ZW5jeShpbmZvLkhvbGRlcigpLCB2OExpc3RlbmVyLCBWOEN1c3RvbTo6a1hNTEh0dHBSZXF1ZXN0
Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIu
Ci0gICAgICAgIHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5zZXRPbmFib3J0KDApOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IHhtbEh0dHBSZXF1
ZXN0VXBsb2FkLT5hc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKTsKLSAgICAgICAgVjhQcm94eSog
cHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+b2JqZWN0TGlz
dGVuZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhPYmplY3RFdmVudExpc3RlbmVyPihwcm94
eS0+ZnJhbWUoKSwgdmFsdWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAg
ICAgICAgICB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25hYm9ydChsaXN0ZW5lcik7Ci0gICAg
ICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1
c3RvbTo6a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LUFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9uZXJyb3IpCi17Ci0gICAgSU5D
X1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25lcnJvci5fZ2V0Iik7Ci0gICAgWE1M
SHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6
WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh4bWxIdHRwUmVx
dWVzdFVwbG9hZC0+b25lcnJvcigpKSB7Ci0gICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVx
dWVzdFVwbG9hZC0+b25lcnJvcigpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4
TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0dXJu
IHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQotCi1BQ0NFU1NP
Ul9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmVycm9yKQotewotICAgIElOQ19TVEFUUygi
RE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9uZXJyb3IuX3NldCIpOwotICAgIFhNTEh0dHBSZXF1
ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBS
RVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7
Ci0gICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25lcnJvcigpKSB7Ci0gICAgICAg
ICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmpl
Y3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uZXJyb3IoKSk7Ci0gICAg
ICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRM
aXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZv
LkhvbGRlcigpLCB2OExpc3RlbmVyLCBWOEN1c3RvbTo6a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRl
eCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCi0gICAgICAg
IHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5zZXRPbmVycm9yKDApOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IHhtbEh0dHBSZXF1ZXN0VXBsb2Fk
LT5hc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKTsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBW
OFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCkt
PmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhPYmplY3RFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUo
KSwgdmFsdWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB4
bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25lcnJvcihsaXN0ZW5lcik7Ci0gICAgICAgICAgICBj
cmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a1hN
TEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUFDQ0VTU09S
X0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9ubG9hZCkKLXsKLSAgICBJTkNfU1RBVFMoIkRP
TS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5vbmxvYWQuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0
VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFV
RVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQt
Pm9ubG9hZCgpKSB7Ci0gICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBz
dGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+
b25sb2FkKCkpOwotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxp
c3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsK
LSAgICB9Ci0gICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihYTUxI
dHRwUmVxdWVzdFVwbG9hZE9ubG9hZCkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVx
dWVzdFVwbG9hZC5vbmxvYWQuX3NldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxI
dHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhN
TEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBp
bmZvLkhvbGRlcigpKTsKLSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlmICh4
bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25sb2FkKCkpIHsKLSAgICAgICAgICAgIFY4T2JqZWN0RXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIq
Pih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25sb2FkKCkpOwotICAgICAgICAgICAgdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsK
LSAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdjhMaXN0
ZW5lciwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgotICAgICAgICB4bWxIdHRwUmVxdWVzdFVw
bG9hZC0+c2V0T25sb2FkKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFhNTEh0dHBSZXF1ZXN0
KiB4bWxIdHRwUmVxdWVzdCA9IHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5hc3NvY2lhdGVkWE1MSHR0
cFJlcXVlc3QoKTsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4
bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFw
cm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIgPSBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBw
ZXI8VjhPYmplY3RFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFsdWUsIGZhbHNlKTsK
LSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB4bWxIdHRwUmVxdWVzdFVwbG9h
ZC0+c2V0T25sb2FkKGxpc3RlbmVyKTsKLSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVu
Y3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUlu
ZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1
ZXN0VXBsb2FkT25sb2Fkc3RhcnQpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVl
c3RVcGxvYWQub25sb2Fkc3RhcnQuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4
bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FE
LCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ubG9hZHN0
YXJ0KCkpIHsKLSAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRp
Y19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmxv
YWRzdGFydCgpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBs
aXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7
Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQotCi1BQ0NFU1NPUl9TRVRURVIoWE1M
SHR0cFJlcXVlc3RVcGxvYWRPbmxvYWRzdGFydCkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5YTUxI
dHRwUmVxdWVzdFVwbG9hZC5vbmxvYWRzdGFydC5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3RV
cGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVF
U1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAg
ICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmxvYWRzdGFydCgpKSB7Ci0gICAgICAg
ICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmpl
Y3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ubG9hZHN0YXJ0KCkpOwot
ICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+
Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3ko
aW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lciwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hl
SW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgotICAg
ICAgICB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25sb2Fkc3RhcnQoMCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0geG1sSHR0cFJlcXVl
c3RVcGxvYWQtPmFzc29jaWF0ZWRYTUxIdHRwUmVxdWVzdCgpOwotICAgICAgICBWOFByb3h5KiBw
cm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwotICAgICAgICBpZiAoIXByb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5vYmplY3RMaXN0
ZW5lcnMoKS0+ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOE9iamVjdEV2ZW50TGlzdGVuZXI+KHByb3h5
LT5mcmFtZSgpLCB2YWx1ZSwgZmFsc2UpOwotICAgICAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAg
ICAgICAgIHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5zZXRPbmxvYWRzdGFydChsaXN0ZW5lcik7Ci0g
ICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBW
OEN1c3RvbTo6a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLUFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9ucHJvZ3Jlc3MpCi17Ci0g
ICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25wcm9ncmVzcy5fZ2V0Iik7
Ci0gICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xh
c3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh4
bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25wcm9ncmVzcygpKSB7Ci0gICAgICAgIFY4T2JqZWN0RXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIq
Pih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25wcm9ncmVzcygpKTsKLSAgICAgICAgdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsK
LSAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgp
OwotfQotCi1BQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbnByb2dyZXNzKQot
ewotICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9ucHJvZ3Jlc3MuX3Nl
dCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihW
OENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKLSAgICBp
ZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+
b25wcm9ncmVzcygpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3Rl
bmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RV
cGxvYWQtPm9ucHJvZ3Jlc3MoKSk7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4g
djhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAg
cmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2OExpc3RlbmVyLCBWOEN1c3Rv
bTo6a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBD
bGVhciB0aGUgbGlzdGVuZXIuCi0gICAgICAgIHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5zZXRPbnBy
b2dyZXNzKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRw
UmVxdWVzdCA9IHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5hc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3Qo
KTsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVx
dWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIgPSBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhPYmpl
Y3RFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFsdWUsIGZhbHNlKTsKLSAgICAgICAg
aWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25w
cm9ncmVzcyhsaXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGlu
Zm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVz
dFVwbG9hZEFkZEV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJl
cXVlc3RVcGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgWE1MSHR0cFJlcXVlc3RVcGxv
YWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RV
UExPQUQsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1
ZXN0ID0geG1sSHR0cFJlcXVlc3RVcGxvYWQtPmFzc29jaWF0ZWRYTUxIdHRwUmVxdWVzdCgpOwot
ICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVlc3QtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKCFwcm94eSkKLSAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKIAotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9
IHByb3h5LT5vYmplY3RMaXN0ZW5lcnMoKS0+ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOE9iamVjdEV2
ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCBhcmdzWzFdLCBmYWxzZSk7CisgICAgUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVy
KHhtbEh0dHBSZXF1ZXN0LCBhcmdzWzFdLCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChsaXN0ZW5l
cikgewogICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAg
ICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CkBAIC0yNjUs
MTIgKzY2LDggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0VXBsb2FkUmVtb3Zl
RXZlbnRMaXN0ZW5lcikKICAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RV
cGxvYWQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVz
dFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgYXJncy5Ib2xkZXIo
KSk7CiAKICAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSB4bWxIdHRwUmVxdWVz
dFVwbG9hZC0+YXNzb2NpYXRlZFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgVjhQcm94eSogcHJveHkg
PSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTsKLSAgICBpZiAoIXByb3h5KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOyAv
LyBQcm9iYWJseSBsZWFrZWQuCi0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIg
PSBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCktPmZpbmRXcmFwcGVyKGFyZ3NbMV0sIGZhbHNlKTsK
IAorICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0
RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgYXJnc1sxXSwgZmFsc2UsIHRydWUpOwogICAg
IGlmIChsaXN0ZW5lcikgewogICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhh
cmdzWzBdKTsKICAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVl
KCk7Cg==
</data>
<flag name="review"
          id="21573"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40386</attachid>
            <date>2009-09-30 11:41:54 -0700</date>
            <delta_ts>2009-10-01 10:02:02 -0700</delta_ts>
            <desc>updated patch v2</desc>
            <filename>listeners.patch</filename>
            <type>text/plain</type>
            <size>152236</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWFjYzNkYy4uYjNkMWVkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjEgQEAKKzIwMDktMDktMzAgIFZpdGFseSBSZXBl
c2hrbyAgPHZpdGFseXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gUmVmYWN0b3JlZCBWOCBldmVudCBsaXN0ZW5lcnM6
CisgICAgICAgIChUaGlzIGNoYW5nZSBzaG91bGQgZml4IGh0dHA6Ly9jcmJ1Zy5jb20vMjEwNzkg
YW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA5
My4pCisgICAgICAgICBvIEFsbCBsaXN0ZW5lcnMgdXNlIHdlYWsgaGFuZGxlcyB0byBKUyBvYmpl
Y3RzIHRvIGF2b2lkIGNyZWF0aW5nCisgICAgICAgICAgIGN5Y2xlcyBhbmQgbGVha2luZyBtZW1v
cnkuCisgICAgICAgICBvICJPYmplY3QiIHZhcmlhbnRzIG9mIGxpc3RlbmVycyByZW1vdmVkLgor
ICAgICAgICAgbyBBbGwgZXZlbnQgYWNjZXNzb3IgY2FsbGJhY2tzIGFyZSBnZW5lcmF0ZWQuCisg
ICAgICAgICBvIEN1c3RvbSBldmVudCBhY2Nlc3NvcnMgcmVtb3ZlZC4KKyAgICAgICAgIG8gQWxs
IHdyYXBwZXJzIGhhdmUgaGlkZGVuIGRlcGVuZGVuY2llcyBvbiB0aGVpciBsaXN0ZW5lcnMgdG8K
KyAgICAgICAgICAgcHJldmVudCBsaXN0ZW5lcnMgZnJvbSBiZWluZyBjb2xsZWN0ZWQuCisgICAg
ICAgICBvIEFsbCB2YXJpYXRzIG9mIGdldEV2ZW50TGlzdGVuZXIgZnVuY3Rpb24gZ3JvdXBlZCBp
biBWOERPTVdyYXBwZXIuCisgICAgICAgICBvIFBvaW50ZXJzIHRvIEMrKyBFdmVudExpc3RlbmVy
IHdyYXBwZXJzIGFyZSBzdG9yZWQgaW4gSlMgb2JqZWN0cworICAgICAgICAgICBpbnN0ZWFkIG9m
IGV2ZW50IGxpc3RlbmVyIGxpc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjk4MjUKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaTogUmVtb3ZlZCAi
T2JqZWN0IiBsaXN0ZW5lcnMuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG06IE5vdyBoYW5kbGVzIGV2ZW50IGFjY2Vzc29ycy4KKyAgICAgICAgKiBiaW5kaW5n
cy92OC9ET01PYmplY3RzSW5jbHVkZS5oOgorCisgICAgICAgIFY4QWJzdHJhY3RFdmVudExpc3Rl
bmVyIG1hbmFnZXMgd2VhayBKUyBoYW5kbGU6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2Vha0V2ZW50TGlzdGVu
ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6
VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFjdEV2
ZW50TGlzdGVuZXI6On5WOEFic3RyYWN0RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmRpc3Bvc2VMaXN0ZW5lck9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6c2V0TGlzdGVuZXJPYmplY3Qp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Y2FzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aXNMYXp5KToKKyAgICAgICAgKFdlYkNv
cmU6OlY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpnZXRMaXN0ZW5lck9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Z2V0RXhpc3RpbmdMaXN0ZW5lck9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFzRXhp
c3RpbmdMaXN0ZW5lck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRM
aXN0ZW5lcjo6ZGlzY29ubmVjdEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWJzdHJhY3RF
dmVudExpc3RlbmVyOjpkaXNjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFj
dEV2ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6bGluZU51bWJlcik6CisgICAgICAgIChXZWJDb3Jl
OjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6dmlydHVhbGlzQXR0cmlidXRlKToKKworICAgICAg
ICBHcm91cGVkIGdldEV2ZW50TGlzdGVuZXIgZnVuY3Rpb25zOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6Omdl
dFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0
ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmg6CisKKyAgICAgICAg
UmVtb3ZlZCBtb3N0IGV2ZW50IGxpc3RlbmVyIG9iamVjdHMgYm9va2tlZXBpbmc6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExp
c3RlbmVyTGlzdDo6ZmluZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3Rl
bmVyTGlzdDo6Y2xlYXJXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5l
ckxpc3Q6OmRvRmluZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVy
TGlzdDo6Z2V0SGlkZGVuUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3Rl
bmVyTGlzdDo6ZmluZE9yQ3JlYXRlV3JhcHBlcik6CisKKyAgICAgICAgQWRkZWQgaGlkZGVuIHBy
b3BlcnRpZXMgZm9yIHN0b3JpbmcgRXZlbnRMaXN0ZW5lciB3cmFwcGVyczoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OEhpZGRlblByb3BlcnR5TmFtZTo6bGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhIaWRk
ZW5Qcm9wZXJ0eU5hbWU6OmF0dHJpYnV0ZUxpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oOgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5
RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVy
OjpWOExhenlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2ZW50TGlz
dGVuZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2
ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRM
aXN0ZW5lcjo6aXNMYXp5KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlz
dGVuZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRM
aXN0ZW5lci5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZGlzY29ubmVjdEZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4UHJveHk6OmRpc2Nvbm5lY3RFdmVudExpc3RlbmVycyk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhQcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4
dEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXZl
bnRMaXN0ZW5lcjo6cmVwb3J0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250
ZXh0RXZlbnRMaXN0ZW5lcjo6Z2V0UmVjZWl2ZXJPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmg6IFJl
bW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZGlz
cG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6Omlu
aXRDb250ZXh0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
QUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bUJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudExp
c3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lcjo6VjhFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lcjo6Z2V0TGlzdGVuZXJG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOEV2ZW50TGlzdGVuZXI6OmNhbGxMaXN0ZW5l
ckZ1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudExp
c3RlbmVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRpb25D
YWNoZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdldEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19E
RUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNL
X0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFhNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcDoKKwogMjAwOS0wOS0yOSAgRGF2
ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb24gSG9u
ZXljdXR0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA0M2U3MzljLi4wNDEwZDE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNzk5LDggKzc5OSw2IEBACiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhOUFV0aWxzLmgnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5oJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9W
OE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOE9i
amVjdEV2ZW50TGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhQcm94eS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4UHJveHkuaCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBlci5oJywKQEAgLTgwOCw4ICs4MDYsNiBAQAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmgnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuY3BwJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmgnLAotICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwJywK
LSAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3Rl
bmVyLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9s
bGVyLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5k
ZXggN2YxNTA4Yi4uMTk0MDU4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCkBAIC0zMjYsMTAgKzMyNiwyNiBAQCBzdWIgSXNOb2RlU3ViVHlwZQogICAg
IHJldHVybiAwOwogfQogCi1zdWIgUmVxdWlyZXNDdXN0b21FdmVudExpc3RlbmVyQWNjZXNzb3Jz
CitzdWIgR2V0SGlkZGVuRGVwZW5kZW5jeUluZGV4CiB7CiAgICAgbXkgJGRhdGFOb2RlID0gc2hp
ZnQ7Ci0gICAgcmV0dXJuICFJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkgJiYgJGRhdGFOb2RlLT5u
YW1lIG5lICJTVkdFbGVtZW50SW5zdGFuY2UiOworICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsK
KyAgICBteSAkbmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjpr
Tm9kZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4IiBpZiBJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSk7
CisgICAgcmV0dXJuICJWOEN1c3RvbTo6a1NWR0VsZW1lbnRJbnN0YW5jZUV2ZW50TGlzdGVuZXJD
YWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIjsKKyAgICByZXR1cm4g
IlY4Q3VzdG9tOjprQWJzdHJhY3RXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCIgaWYgJG5hbWUgZXEg
IkFic3RyYWN0V29ya2VyIjsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjprV29ya2VyUmVxdWVzdENh
Y2hlSW5kZXgiIGlmICRuYW1lIGVxICJXb3JrZXIiOworICAgIHJldHVybiAiVjhDdXN0b206OmtE
ZWRpY2F0ZWRXb3JrZXJDb250ZXh0UmVxdWVzdENhY2hlSW5kZXgiIGlmICRuYW1lIGVxICJEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0IjsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjprV29ya2VyQ29udGV4
dFJlcXVlc3RDYWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiV29ya2VyQ29udGV4dCI7CisgICAgcmV0
dXJuICJWOEN1c3RvbTo6a1dvcmtlckNvbnRleHRSZXF1ZXN0Q2FjaGVJbmRleCIgaWYgJG5hbWUg
ZXEgIlNoYXJlZFdvcmtlckNvbnRleHQiOworICAgIHJldHVybiAiVjhDdXN0b206OmtNZXNzYWdl
UG9ydFJlcXVlc3RDYWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiTWVzc2FnZVBvcnQiOworICAgIHJl
dHVybiAiVjhDdXN0b206OmtXZWJTb2NrZXRDYWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiV2ViU29j
a2V0IjsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4IiBp
ZiAkbmFtZSBlcSAiWE1MSHR0cFJlcXVlc3QiOworICAgIHJldHVybiAiVjhDdXN0b206OmtYTUxI
dHRwUmVxdWVzdENhY2hlSW5kZXgiIGlmICRuYW1lIGVxICJYTUxIdHRwUmVxdWVzdFVwbG9hZCI7
CisgICAgcmV0dXJuICJWOEN1c3RvbTo6a0RPTUFwcGxpY2F0aW9uQ2FjaGVDYWNoZUluZGV4IiBp
ZiAkbmFtZSBlcSAiRE9NQXBwbGljYXRpb25DYWNoZSI7CisgICAgcmV0dXJuICJWOEN1c3RvbTo6
a05vdGlmaWNhdGlvblJlcXVlc3RDYWNoZUluZGV4IiBpZiAkbmFtZSBlcSAiTm90aWZpY2F0aW9u
IjsKKyAgICByZXR1cm4gIlY4Q3VzdG9tOjprRE9NV2luZG93RXZlbnRMaXN0ZW5lckNhY2hlSW5k
ZXgiIGlmICRuYW1lIGVxICJET01XaW5kb3ciOworICAgIGRpZSAiVW5leHBlY3RlZCBuYW1lICIg
LiAkbmFtZSAuICIgd2hlbiBnZW5lcmF0aW5nICIgLiAkYXR0cmlidXRlOwogfQogCiBzdWIgSG9s
ZGVyVG9OYXRpdmUKQEAgLTU5NCw2ICs2MTAsMTAgQEAgRU5ECiAgICAgICAgIH0KIAogICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIkV2ZW50
TGlzdGVuZXIiICYmICRkYXRhTm9kZS0+bmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIWltcC0+ZG9jdW1lbnQoKSlcbiIp
OworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7XG4iKTsKKyAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICAgICRuYXRpdmVUeXBlIHYgPSAiKTsKIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiJGdldHRlclN0cmluZztcbiIpOwpAQCAtNjc1LDcgKzY5NSw3IEBAIHN1YiBHZW5l
cmF0ZU5vcm1hbEF0dHJTZXR0ZXIKICAgICAgICAgIyBwZXJmb3JtIGxvb2t1cCBmaXJzdAogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBob2xkZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0lu
ZGV4OjokY2xhc3NJbmRleCwgaW5mby5UaGlzKCkpOwotICAgIGlmIChob2xkZXIuSXNFbXB0eSgp
KSByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSByZXR1
cm47CiBFTkQKICAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFt
ZSwgJGNsYXNzSW5kZXgpOwogICAgIH0gZWxzZSB7CkBAIC02ODcsNyArNzA3LDExIEBAIEVORAog
CiAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUsIDApOwogICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUg
ZXEgIkV2ZW50TGlzdGVuZXIiKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgJG5hdGl2ZVR5cGUgdiA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihpbXAsIHZh
bHVlLCB0cnVlLCBmYWxzZSk7XG4iKTsKKyAgICAgICAgaWYgKCRkYXRhTm9kZS0+bmFtZSBlcSAi
RE9NV2luZG93IikgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBp
ZiAoIWltcC0+ZG9jdW1lbnQoKSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICAgIHJldHVybjtcbiIpOworICAgICAgICB9CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgdiA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRM
aXN0ZW5lcihpbXAsIHZhbHVlLCB0cnVlLCBMaXN0ZW5lckZpbmRPckNyZWF0ZSk7XG4iKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVU
eXBlIHYgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVl
IikgLiAiO1xuIik7CiAgICAgfQpAQCAtNzI1LDE0ICs3NDksMTcgQEAgRU5ECiAgICAgICAgIH0g
ZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsK
ICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgifSA9
IDE7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEN1c3RvbUJpbmRpbmcuaCJ9ID0gMTsK
KyAgICAgICAgICAgICRjYWNoZUluZGV4ID0gR2V0SGlkZGVuRGVwZW5kZW5jeUluZGV4KCRkYXRh
Tm9kZSwgJGF0dHJOYW1lKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgJG5hdGl2ZVR5cGUgb2xkID0gaW1wLT4kYXR0ck5hbWUoKTtcbiIpOwotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAob2xkICYmIHN0YXRpY19jYXN0PFY4QWJz
dHJhY3RFdmVudExpc3RlbmVyKj4ob2xkLmdldCgpKS0+aXNPYmplY3RMaXN0ZW5lcigpKSB7XG4i
KTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICB2ODo6TG9jYWw8
djg6Ok9iamVjdD4gb2xkTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0
ZW5lcio+KG9sZC5nZXQoKSktPmdldExpc3RlbmVyT2JqZWN0KCk7XG4iKTsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGhv
bGRlciwgb2xkTGlzdGVuZXIsIFY4Q3VzdG9tOjprTm9kZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4
KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBWOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lciogb2xkTGlzdGVuZXIgPSBvbGQgPyBWOEFic3RyYWN0RXZlbnRMaXN0
ZW5lcjo6Y2FzdChvbGQuZ2V0KCkpIDogMDtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICBpZiAob2xkTGlzdGVuZXIpIHtcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvbGRMaXN0
ZW5lck9iamVjdCA9IG9sZExpc3RlbmVyLT5nZXRFeGlzdGluZ0xpc3RlbmVyT2JqZWN0KCk7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICBpZiAoIW9sZExp
c3RlbmVyT2JqZWN0LklzRW1wdHkoKSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIiAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShob2xkZXIsIG9sZExpc3Rl
bmVyT2JqZWN0LCAkY2FjaGVJbmRleCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgfVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIGltcC0+c2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoJHJlc3VsdCk7XG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCRyZXN1bHQpXG4iKTsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICBjcmVhdGVIaWRkZW5E
ZXBlbmRlbmN5KGhvbGRlciwgdmFsdWUsIFY4Q3VzdG9tOjprTm9kZUV2ZW50TGlzdGVuZXJDYWNo
ZUluZGV4Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgY3Jl
YXRlSGlkZGVuRGVwZW5kZW5jeShob2xkZXIsIHZhbHVlLCAkY2FjaGVJbmRleCIpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpbXAt
PnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAkcmVzdWx0KTsKICAgICAgICAgfQpAQCAt
OTYzLDI2ICs5OTAsNiBAQCBzdWIgR2VuZXJhdGVCYXRjaGVkQXR0cmlidXRlRGF0YQogICAgICAg
ICAgICAgJHNldHRlciA9ICIwIjsKICAgICAgICAgICAgICRwcm9wQXR0ciA9ICJ2ODo6UmVhZE9u
bHkiOwogCi0gICAgICAgICMgRXZlbnRMaXN0ZW5lcnMKLSAgICAgICAgfSBlbHNpZiAoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJFdmVudExpc3RlbmVyIiAmJiBSZXF1aXJlc0N1c3Rv
bUV2ZW50TGlzdGVuZXJBY2Nlc3NvcnMoJGRhdGFOb2RlKSkgewotICAgICAgICAgICAgaWYgKCRp
bnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7Ci0gICAgICAgICAgICAgICAgJGdldHRlciA9
ICJWOEN1c3RvbTo6djhET01XaW5kb3dFdmVudEhhbmRsZXJBY2Nlc3NvckdldHRlciI7Ci0gICAg
ICAgICAgICAgICAgJHNldHRlciA9ICJWOEN1c3RvbTo6djhET01XaW5kb3dFdmVudEhhbmRsZXJB
Y2Nlc3NvclNldHRlciI7Ci0gICAgICAgICAgICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAi
RE9NQXBwbGljYXRpb25DYWNoZSIpIHsKLSAgICAgICAgICAgICAgICAkZ2V0dGVyID0gIlY4Q3Vz
dG9tOjp2OERPTUFwcGxpY2F0aW9uQ2FjaGVFdmVudEhhbmRsZXJBY2Nlc3NvckdldHRlciI7Ci0g
ICAgICAgICAgICAgICAgJHNldHRlciA9ICJWOEN1c3RvbTo6djhET01BcHBsaWNhdGlvbkNhY2hl
RXZlbnRIYW5kbGVyQWNjZXNzb3JTZXR0ZXIiOwotICAgICAgICAgICAgfSBlbHNpZiAoJGludGVy
ZmFjZU5hbWUgZXEgIk5vdGlmaWNhdGlvbiIpIHsKLSAgICAgICAgICAgICAgICAkZ2V0dGVyID0g
IlY4Q3VzdG9tOjp2OE5vdGlmaWNhdGlvbkV2ZW50SGFuZGxlckFjY2Vzc29yR2V0dGVyIjsKLSAg
ICAgICAgICAgICAgICAkc2V0dGVyID0gIlY4Q3VzdG9tOjp2OE5vdGlmaWNhdGlvbkV2ZW50SGFu
ZGxlckFjY2Vzc29yU2V0dGVyIjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgJGdldHRlciA9ICJWOEN1c3RvbTo6djgke2N1c3RvbUFjY2Vzc29yfUFjY2Vzc29yR2V0dGVy
IjsKLSAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIldvcmtlckNvbnRleHQi
IGFuZCAkYXR0ck5hbWUgZXEgInNlbGYiKSB7Ci0gICAgICAgICAgICAgICAgICAgICRzZXR0ZXIg
PSAiMCI7Ci0gICAgICAgICAgICAgICAgICAgICRwcm9wQXR0ciA9ICJ2ODo6UmVhZE9ubHkiOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICRzZXR0ZXIgPSAi
VjhDdXN0b206OnY4JHtjdXN0b21BY2Nlc3Nvcn1BY2Nlc3NvclNldHRlciI7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIyBE
ZWZhdWx0IEdldHRlciBhbmQgU2V0dGVyCiAgICAgICAgICAgICAkZ2V0dGVyID0gIiR7aW50ZXJm
YWNlTmFtZX1JbnRlcm5hbDo6JHthdHRyTmFtZX1BdHRyR2V0dGVyIjsKQEAgLTEwOTIsMTYgKzEw
OTksOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgbmV4dDsKICAg
ICAgICAgfQogCi0gICAgICAgICMgTWFrZSBFdmVudExpc3RlbmVycyBjdXN0b20gZm9yIHNvbWUg
dHlwZXMuCi0gICAgICAgICMgRklYTUU6IG1ha2UgdGhlIHBlcmwgY29kZSBjYXBhYmxlIG9mIGdl
bmVyYXRpbmcgdGhlCi0gICAgICAgICMgICBldmVudCBzZXR0ZXJzL2dldHRlcnMuICBGb3Igbm93
LCBXZWJLaXQgaGFzIHN0YXJ0ZWQgcmVtb3ZpbmcgdGhlCi0gICAgICAgICMgICBbQ3VzdG9tXSBh
dHRyaWJ1dGUsIHNvIGp1c3QgYXV0b21hdGljYWxseSBpbnNlcnQgaXQgdG8gYXZvaWQgZm9ya2lu
ZwotICAgICAgICAjICAgb3RoZXIgZmlsZXMuICBUaGlzIHNob3VsZCBiZSBva2F5IGJlY2F1c2Ug
d2UgY2FuJ3QgZ2VuZXJhdGUgc3R1YnMKLSAgICAgICAgIyAgIGZvciBhbnkgZXZlbnQgZ2V0dGVy
L3NldHRlcnMgYW55d2F5LgotICAgICAgICBpZiAoJGF0dHJUeXBlIGVxICJFdmVudExpc3RlbmVy
IiAmJiBSZXF1aXJlc0N1c3RvbUV2ZW50TGlzdGVuZXJBY2Nlc3NvcnMoJGRhdGFOb2RlKSkgewot
ICAgICAgICAgICAgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q3VzdG9tIn0gPSAxOwotICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhDdXN0b21CaW5kaW5n
LmgifSA9IDE7Ci0gICAgICAgICAgICBuZXh0OworICAgICAgICBpZiAoJGF0dHJUeXBlIGVxICJF
dmVudExpc3RlbmVyIiAmJiAkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAg
ICAgICAgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsidjhPblBy
b3RvIn0gPSAxOwogICAgICAgICB9CiAKICAgICAgICAgIyBEbyBub3QgZ2VuZXJhdGUgYWNjZXNz
b3IgaWYgdGhpcyBpcyBhIGN1c3RvbSBhdHRyaWJ1dGUuICBUaGUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0c0luY2x1ZGUuaCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
RE9NT2JqZWN0c0luY2x1ZGUuaAppbmRleCBlNTc5NmU3Li4wMTI0MTY1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9iamVjdHNJbmNsdWRlLmgKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oCkBAIC0xNTcsNyArMTU3LDYgQEAKICNpbmNsdWRl
ICJWOEhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhMYXp5RXZlbnRMaXN0ZW5lci5oIgogI2lu
Y2x1ZGUgIlY4Tm9kZUZpbHRlckNvbmRpdGlvbi5oIgotI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRM
aXN0ZW5lci5oIgogI2luY2x1ZGUgIlZhbGlkaXR5U3RhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRB
bmltYXRpb25FdmVudC5oIgogI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lUnVsZS5oIgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcAppbmRleCBk
MWVlNzMwLi4zMzg1NzkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJh
Y3RFdmVudExpc3RlbmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RF
dmVudExpc3RlbmVyLmNwcApAQCAtMzcsMTIgKzM3LDIwIEBACiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJWOEV2ZW50TGlzdGVuZXJMaXN0LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgdm9pZCB3ZWFrRXZlbnRMaXN0ZW5lckNhbGxiYWNr
KHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIHZvaWQqIHBhcmFtZXRlcikKK3sKKyAgICBWOEFi
c3RyYWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZl
bnRMaXN0ZW5lcio+KHBhcmFtZXRlcik7CisgICAgbGlzdGVuZXItPmRpc3Bvc2VMaXN0ZW5lck9i
amVjdCgpOworfQorCiBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6VjhBYnN0cmFjdEV2ZW50TGlz
dGVuZXIoRnJhbWUqIGZyYW1lLCBib29sIGlzQXR0cmlidXRlKQogICAgIDogRXZlbnRMaXN0ZW5l
cihKU0V2ZW50TGlzdGVuZXJUeXBlKQorICAgICwgbV9pc1dlYWsodHJ1ZSkKICAgICAsIG1faXNB
dHRyaWJ1dGUoaXNBdHRyaWJ1dGUpCiAgICAgLCBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9saW5l
TnVtYmVyKDApCkBAIC02Myw2ICs3MSw3MCBAQCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6VjhB
YnN0cmFjdEV2ZW50TGlzdGVuZXIoRnJhbWUqIGZyYW1lLCBib29sIGlzQXR0cmlidXRlKQogICAg
IH0KIH0KIAorVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6On5WOEFic3RyYWN0RXZlbnRMaXN0ZW5l
cigpCit7CisgICAgaWYgKCFtX2xpc3RlbmVyLklzRW1wdHkoKSkKKyAgICAgICAgVjhFdmVudExp
c3RlbmVyTGlzdDo6Y2xlYXJXcmFwcGVyKG1fbGlzdGVuZXIsIG1faXNBdHRyaWJ1dGUpOworICAg
IGRpc3Bvc2VMaXN0ZW5lck9iamVjdCgpOworfQorCit2b2lkIFY4QWJzdHJhY3RFdmVudExpc3Rl
bmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBFdmVudCogZXZlbnQpCit7CisgICAgLy8gRXZlbnRMaXN0ZW5lciBjb3VsZCBiZSBk
aXNjb25uZWN0ZWQgZnJvbSB0aGUgZnJhbWUuCisgICAgaWYgKGRpc2Nvbm5lY3RlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gb24gWE1MSHR0cFJl
cXVlc3QgY2FuIGNsZWFyIHRoZSBldmVudCBsaXN0ZW5lciBhbmQgZGVzdHJveXMgJ3RoaXMnIG9i
amVjdC4gS2VlcCBhIGxvY2FsIHJlZmVyZW5jZSB0byBpdC4KKyAgICAvLyBTZWUgaXNzdWUgODg5
ODI5LgorICAgIFJlZlB0cjxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcj4gcHJvdGVjdCh0aGlzKTsK
KworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKworICAgIGlmICghbV9jb250ZXh0
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgbG9jYWwgaGFuZGxlIHNp
bmNlIHRoZSBwZXJzaXN0ZW50IGhhbmRsZSBzdG9yZWQgaW4KKyAgICAvLyBtX2NvbnRleHQgbWF5
IGJlIGRpc3Bvc2VkIGJlZm9yZSB3ZSdyZSBkb25lLgorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IHY4Q29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQtPmdl
dCgpKTsKKyAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gbV9mcmFtZSBjYW4gcmVtb3ZlZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIHByb3Rl
Y3QgaXQgdW50aWwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHJldHVybnMuCisgICAgUmVmUHRyPEZy
YW1lPiBwcm90ZWN0RnJhbWUobV9mcmFtZSk7CisKKyAgICAvLyBFbnRlciB0aGUgVjggY29udGV4
dCBpbiB3aGljaCB0byBwZXJmb3JtIHRoZSBldmVudCBoYW5kbGluZy4KKyAgICB2ODo6Q29udGV4
dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0KTsKKworICAgIC8vIEdldCB0aGUgVjggd3JhcHBlciBm
b3IgdGhlIGV2ZW50IG9iamVjdC4KKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VG9WOE9iamVjdChldmVudCk7CisKKyAgICBpbnZv
a2VFdmVudEhhbmRsZXIodjhDb250ZXh0LCBldmVudCwganNFdmVudCk7CisKKyAgICBEb2N1bWVu
dDo6dXBkYXRlU3R5bGVGb3JBbGxEb2N1bWVudHMoKTsKK30KKwordm9pZCBWOEFic3RyYWN0RXZl
bnRMaXN0ZW5lcjo6ZGlzcG9zZUxpc3RlbmVyT2JqZWN0KCkKK3sKKyAgICBpZiAoIW1fbGlzdGVu
ZXIuSXNFbXB0eSgpKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBWOEdDQ29udHJvbGxlcjo6
dW5yZWdpc3Rlckdsb2JhbEhhbmRsZSh0aGlzLCBtX2xpc3RlbmVyKTsKKyNlbmRpZgorICAgICAg
ICBtX2xpc3RlbmVyLkRpc3Bvc2UoKTsKKyAgICAgICAgbV9saXN0ZW5lci5DbGVhcigpOworICAg
IH0KK30KKwordm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6c2V0TGlzdGVuZXJPYmplY3Qo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBsaXN0ZW5lcikKK3sKKyAgICBkaXNwb3NlTGlzdGVuZXJP
YmplY3QoKTsKKyAgICBtX2xpc3RlbmVyID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5l
dyhsaXN0ZW5lcik7CisjaWZuZGVmIE5ERUJVRworICAgIFY4R0NDb250cm9sbGVyOjpyZWdpc3Rl
ckdsb2JhbEhhbmRsZShFVkVOVF9MSVNURU5FUiwgdGhpcywgbV9saXN0ZW5lcik7CisjZW5kaWYK
KyAgICBpZiAobV9pc1dlYWspCisgICAgICAgIG1fbGlzdGVuZXIuTWFrZVdlYWsodGhpcywgJndl
YWtFdmVudExpc3RlbmVyQ2FsbGJhY2spOworfQorCiB2b2lkIFY4QWJzdHJhY3RFdmVudExpc3Rl
bmVyOjppbnZva2VFdmVudEhhbmRsZXIodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0
LCBFdmVudCogZXZlbnQsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50KQogewogICAgIC8v
IFdlIHB1c2ggdGhlIGV2ZW50IGJlaW5nIHByb2Nlc3NlZCBpbnRvIHRoZSBnbG9iYWwgb2JqZWN0
LCBzbyB0aGF0IGl0IGNhbiBiZSBleHBvc2VkIGJ5IERPTVdpbmRvdydzIGJpbmRpbmdzLgpAQCAt
MTI0LDUyICsxOTYsNiBAQCB2b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjppbnZva2VFdmVu
dEhhbmRsZXIodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZQogICAgICAgICBldmVudC0+
cHJldmVudERlZmF1bHQoKTsKIH0KIAotdm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFu
ZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
RXZlbnQqIGV2ZW50KQotewotICAgIC8vIEV2ZW50TGlzdGVuZXIgY291bGQgYmUgZGlzY29ubmVj
dGVkIGZyb20gdGhlIGZyYW1lLgotICAgIGlmIChkaXNjb25uZWN0ZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIFhNTEh0dHBSZXF1ZXN0IGNh
biBjbGVhciB0aGUgZXZlbnQgbGlzdGVuZXIgYW5kIGRlc3Ryb3lzICd0aGlzJyBvYmplY3QuIEtl
ZXAgYSBsb2NhbCByZWZlcmVuY2UgdG8gaXQuCi0gICAgLy8gU2VlIGlzc3VlIDg4OTgyOS4KLSAg
ICBSZWZQdHI8VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI+IHByb3RlY3QodGhpcyk7Ci0KLSAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0KLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IGxvY2FsIGhhbmRsZSBzaW5jZSB0aGUg
cGVyc2lzdGVudCBoYW5kbGUgc3RvcmVkIGluCi0gICAgLy8gbV9jb250ZXh0IG1heSBiZSBkaXNw
b3NlZCBiZWZvcmUgd2UncmUgZG9uZS4KLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENv
bnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0LT5nZXQoKSk7Ci0g
ICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIG1f
ZnJhbWUgY2FuIHJlbW92ZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCBwcm90ZWN0IGl0IHVu
dGlsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5zLgotICAgIFJlZlB0cjxGcmFtZT4gcHJv
dGVjdEZyYW1lKG1fZnJhbWUpOwotCi0gICAgLy8gRW50ZXIgdGhlIFY4IGNvbnRleHQgaW4gd2hp
Y2ggdG8gcGVyZm9ybSB0aGUgZXZlbnQgaGFuZGxpbmcuCi0gICAgdjg6OkNvbnRleHQ6OlNjb3Bl
IHNjb3BlKHY4Q29udGV4dCk7Ci0KLSAgICAvLyBHZXQgdGhlIFY4IHdyYXBwZXIgZm9yIHRoZSBl
dmVudCBvYmplY3QuCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRFdmVudFRvVjhPYmplY3QoZXZlbnQpOwotCi0gICAgaW52b2tlRXZlbnRI
YW5kbGVyKHY4Q29udGV4dCwgZXZlbnQsIGpzRXZlbnQpOwotCi0gICAgRG9jdW1lbnQ6OnVwZGF0
ZVN0eWxlRm9yQWxsRG9jdW1lbnRzKCk7Ci19Ci0KLXZvaWQgVjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXI6OmRpc3Bvc2VMaXN0ZW5lck9iamVjdCgpCi17Ci0gICAgaWYgKCFtX2xpc3RlbmVyLklzRW1w
dHkoKSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgVjhHQ0NvbnRyb2xsZXI6OnVucmVnaXN0
ZXJHbG9iYWxIYW5kbGUodGhpcywgbV9saXN0ZW5lcik7Ci0jZW5kaWYKLSAgICAgICAgbV9saXN0
ZW5lci5EaXNwb3NlKCk7Ci0gICAgICAgIG1fbGlzdGVuZXIuQ2xlYXIoKTsKLSAgICB9Ci19Ci0K
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Z2V0UmVjZWl2
ZXJPYmplY3QoRXZlbnQqIGV2ZW50KQogewogICAgIGlmICghbV9saXN0ZW5lci5Jc0VtcHR5KCkg
JiYgIW1fbGlzdGVuZXItPklzRnVuY3Rpb24oKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhB
YnN0cmFjdEV2ZW50TGlzdGVuZXIuaAppbmRleCA4ZjEwNjFiLi5mNmU1OGUyIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oCkBAIC01MSw0MyArNTEs
ODQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIGJ1dCBBTExPV3MgZHVwbGljYXRlZCBu
b24tSFRNTCBldmVudCBoYW5kbGVycy4KICAgICBjbGFzcyBWOEFic3RyYWN0RXZlbnRMaXN0ZW5l
ciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwg
flY4QWJzdHJhY3RFdmVudExpc3RlbmVyKCkgeyB9CisgICAgICAgIHZpcnR1YWwgflY4QWJzdHJh
Y3RFdmVudExpc3RlbmVyKCk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFY4QWJzdHJhY3RFdmVu
dExpc3RlbmVyKiBjYXN0KGNvbnN0IEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXItPnR5cGUoKSA9PSBKU0V2ZW50TGlzdGVuZXJU
eXBlCisgICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxjb25zdCBWOEFic3RyYWN0RXZlbnRM
aXN0ZW5lcio+KGxpc3RlbmVyKQorICAgICAgICAgICAgICAgIDogMDsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0YXRpYyBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciogY2FzdChFdmVudExpc3RlbmVy
KiBsaXN0ZW5lcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VjhB
YnN0cmFjdEV2ZW50TGlzdGVuZXIqPihjYXN0KGNvbnN0X2Nhc3Q8Y29uc3QgRXZlbnRMaXN0ZW5l
cio+KGxpc3RlbmVyKSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSW1wbGVtZW50YXRpb24g
b2YgRXZlbnRMaXN0ZW5lciBpbnRlcmZhY2UuCiAKICAgICAgICAgdmlydHVhbCBib29sIG9wZXJh
dG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgb3RoZXIpIHsgcmV0dXJuIHRoaXMgPT0gJm90aGVy
OyB9CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBFdmVudCopOworCiAgICAgICAgIC8vIFJldHVybnMgdGhlIG93bmVyIGZyYW1lIG9m
IHRoZSBsaXN0ZW5lci4KICAgICAgICAgRnJhbWUqIGZyYW1lKCkgeyByZXR1cm4gbV9mcmFtZTsg
fQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgRXZlbnQqKTsKLSAgICAgICAgdm9pZCBpbnZva2VFdmVudEhhbmRsZXIodjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4sIEV2ZW50Kiwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQpOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMYXp5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAog
ICAgICAgICAvLyBSZXR1cm5zIHRoZSBsaXN0ZW5lciBvYmplY3QsIGVpdGhlciBhIGZ1bmN0aW9u
IG9yIGFuIG9iamVjdC4KLSAgICAgICAgdmlydHVhbCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZ2V0
TGlzdGVuZXJPYmplY3QoKQorICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZ2V0TGlzdGVu
ZXJPYmplY3QoKQorICAgICAgICB7CisgICAgICAgICAgICBwcmVwYXJlTGlzdGVuZXJPYmplY3Qo
KTsKKyAgICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyhtX2xpc3Rl
bmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBnZXRFeGlz
dGluZ0xpc3RlbmVyT2JqZWN0KCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHY4OjpM
b2NhbDx2ODo6T2JqZWN0Pjo6TmV3KG1fbGlzdGVuZXIpOwogICAgICAgICB9CiAKKyAgICAgICAg
Ym9vbCBoYXNFeGlzdGluZ0xpc3RlbmVyT2JqZWN0KCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICFtX2xpc3RlbmVyLklzRW1wdHkoKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIERp
c3Bvc2UgbGlzdGVuZXIgb2JqZWN0IGFuZCBjbGVhciB0aGUgaGFuZGxlLgogICAgICAgICB2b2lk
IGRpc3Bvc2VMaXN0ZW5lck9iamVjdCgpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBkaXNjb25u
ZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhbV9mcmFtZTsgfQorICAgICAgICAvLyBEZXRhY2ggdGhl
IGxpc3RlbmVyIGZyb20gaXRzIG93bmVyIGZyYW1lLgorICAgICAgICB2b2lkIGRpc2Nvbm5lY3RG
cmFtZSgpIHsgbV9mcmFtZSA9IDA7IH0KIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNPYmplY3RM
aXN0ZW5lcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBk
aXNjb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhbV9mcmFtZTsgfQogCiAgICAgcHJvdGVjdGVk
OgotICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2xpc3RlbmVyOworICAgICAg
ICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcihGcmFtZSosIGJvb2wgaXNBdHRyaWJ1dGUpOwogCi0g
ICAgICAgIC8vIEluZGljYXRlcyBpZiB0aGlzIGlzIGFuIEhUTUwgdHlwZSBsaXN0ZW5lci4KLSAg
ICAgICAgYm9vbCBtX2lzQXR0cmlidXRlOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUxp
c3RlbmVyT2JqZWN0KCkgeyB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBWOEFic3RyYWN0RXZl
bnRMaXN0ZW5lcihGcmFtZSosIGJvb2wgaXNJbmxpbmUpOworICAgICAgICB2b2lkIHNldExpc3Rl
bmVyT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gbGlzdGVuZXIpOwogCi0gICAgICAgIHZp
cnR1YWwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gY2FsbExpc3RlbmVyRnVuY3Rpb24odjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGpzZXZlbnQsIEV2ZW50KikgPSAwOworICAgICAgICB2b2lkIGludm9rZUV2
ZW50SGFuZGxlcih2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiwgRXZlbnQqLCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4ganNFdmVudCk7CiAKICAgICAgICAgLy8gR2V0IHRoZSByZWNlaXZlciBvYmplY3Qg
dG8gdXNlIGZvciBldmVudCBsaXN0ZW5lciBjYWxsLgogICAgICAgICB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gZ2V0UmVjZWl2ZXJPYmplY3QoRXZlbnQqKTsKIAorICAgICAgICBpbnQgbGluZU51bWJl
cigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgLy8gSW1wbGVtZW50YXRpb24gb2YgRXZlbnRMaXN0ZW5lciBmdW5jdGlvbi4KKyAgICAgICAg
dmlydHVhbCBib29sIHZpcnR1YWxpc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBdHRy
aWJ1dGU7IH0KKworICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0
ZW5lckZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc2V2ZW50LCBFdmVudCopID0gMDsK
KworICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2xpc3RlbmVyOworCisgICAg
ICAgIC8vIEluZGljYXRlcyBpZiB0aGUgYWJvdmUgaGFuZGxlIGlzIHdlYWsuCisgICAgICAgIGJv
b2wgbV9pc1dlYWs7CisKKyAgICAgICAgLy8gSW5kaWNhdGVzIGlmIHRoaXMgaXMgYW4gSFRNTCB0
eXBlIGxpc3RlbmVyLgorICAgICAgICBib29sIG1faXNBdHRyaWJ1dGU7CisKICAgICAgICAgLy8g
RnJhbWUgdG8gd2hpY2ggdGhlIGV2ZW50IGxpc3RlbmVyIGlzIGF0dGFjaGVkIHRvLiBBbiBldmVu
dCBsaXN0ZW5lciBtdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgaXRzIG93bmVyIGZyYW1lIGlzCiAg
ICAgICAgIC8vIGRlbGV0ZWQuIFNlZSBmYXN0L2RvbS9yZXBsYWNlQ2hpbGQuaHRtbAogICAgICAg
ICAvLyBGSVhNRTogdGhpcyBjb3VsZCBob2xkIG1fZnJhbWUgbGl2ZSB1bnRpbCB0aGUgZXZlbnQg
bGlzdGVuZXIgaXMgZGVsZXRlZC4KQEAgLTk3LDEwICsxMzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIC8vIFBvc2l0aW9uIGluIHRoZSBIVE1MIHNvdXJjZSBmb3IgSFRNTCBldmVu
dCBsaXN0ZW5lcnMuCiAgICAgICAgIGludCBtX2xpbmVOdW1iZXI7CiAgICAgICAgIGludCBtX2Nv
bHVtbk51bWJlcjsKLQotICAgICAgICBmcmllbmQgY2xhc3MgVjhFdmVudExpc3RlbmVyOwotICAg
ICAgICBmcmllbmQgY2xhc3MgVjhPYmplY3RFdmVudExpc3RlbmVyOwotICAgICAgICBmcmllbmQg
Y2xhc3MgVjhMYXp5RXZlbnRMaXN0ZW5lcjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKaW5kZXggYWVhODRjMS4uNWJlNTdi
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcApAQCAtMzYsMTggKzM2LDE5IEBA
CiAjaW5jbHVkZSAiRE9NT2JqZWN0c0luY2x1ZGUuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiTm90aWZpY2F0
aW9uLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlY4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgiCiAjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAi
VjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUg
IlY4RXZlbnRMaXN0ZW5lckxpc3QuaCIKICNpbmNsdWRlICJWOEluZGV4LmgiCiAjaW5jbHVkZSAi
VjhJc29sYXRlZFdvcmxkLmgiCi0jaW5jbHVkZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5oIgogCkBAIC0zOTMsNiArMzk0LDE1IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKFY4Q2xhc3NJbmRleDo6VjhXCiAgICAg
fQogI2VuZGlmIC8vIE5PVElGSUNBVElPTlMKIAorI2lmIEVOQUJMRShTVkcpCisgICAgY2FzZSBW
OENsYXNzSW5kZXg6OlNWR0VMRU1FTlRJTlNUQU5DRTogeworICAgICAgICAvLyBSZXNlcnZlIG9u
ZSBtb3JlIGludGVybmFsIGZpZWxkIGZvciBrZWVwaW5nIGV2ZW50IGxpc3RlbmVycy4KKyAgICAg
ICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2VUZW1wbGF0ZSA9IGRlc2Ny
aXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKTsKKyAgICAgICAgaW5zdGFuY2VUZW1wbGF0ZS0+U2V0
SW50ZXJuYWxGaWVsZENvdW50KFY4Q3VzdG9tOjprU1ZHRWxlbWVudEluc3RhbmNlSW50ZXJuYWxG
aWVsZENvdW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisKICNpZiBFTkFCTEUo
V09SS0VSUykKICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6QUJTVFJBQ1RXT1JLRVI6IHsKICAgICAg
ICAgLy8gUmVzZXJ2ZSBvbmUgbW9yZSBpbnRlcm5hbCBmaWVsZCBmb3Iga2VlcGluZyBldmVudCBs
aXN0ZW5lcnMuCkBAIC0xMzg2LDcgKzEzOTYsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoRXZlbnRMaXN0ZW5lcgog
ICAgIHJldHVybiB2OGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwogfQogCi1QYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihOb2RlKiBu
b2RlLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgYm9vbCBm
aW5kT25seSkKK1Bhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gVjhET01XcmFwcGVyOjpnZXRFdmVu
dExpc3RlbmVyKE5vZGUqIG5vZGUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGlz
QXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5cGUgbG9va3VwKQogewogICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQgPSBub2RlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgaWYgKCFjb250ZXh0KQpAQCAtMTM5OCwxOSArMTQwOCw4NSBAQCBQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihOb2RlKiBub2RlLCB2ODo6
TG9jYWw8dgogICAgIGlmICghcHJveHkpCiAgICAgICAgIHByb3h5ID0gVjhQcm94eTo6cmV0cmll
dmUoVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCkpOwogCi0gICAgaWYg
KHByb3h5KSB7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QqIGxpc3QgPSBwcm94eS0+b2Jq
ZWN0TGlzdGVuZXJzKCk7Ci0gICAgICAgIHJldHVybiBmaW5kT25seSA/IGxpc3QtPmZpbmRXcmFw
cGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkgOiBsaXN0LT5maW5kT3JDcmVhdGVXcmFwcGVyPFY4T2Jq
ZWN0RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBpc0F0dHJpYnV0ZSk7Cisg
ICAgaWYgKHByb3h5KQorICAgICAgICByZXR1cm4gKGxvb2t1cCA9PSBMaXN0ZW5lckZpbmRPbmx5
KSA/IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkg
OiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRMaXN0ZW5l
cj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBpc0F0dHJpYnV0ZSk7CisKKyAgICByZXR1cm4gMDsK
K30KKworUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlz
dGVuZXIoU1ZHRWxlbWVudEluc3RhbmNlKiBlbGVtZW50LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJMb29rdXBUeXBlIGxvb2t1cCkKK3sKKyAg
ICByZXR1cm4gZ2V0RXZlbnRMaXN0ZW5lcihlbGVtZW50LT5jb3JyZXNwb25kaW5nRWxlbWVudCgp
LCB2YWx1ZSwgaXNBdHRyaWJ1dGUsIGxvb2t1cCk7Cit9CisKK1Bhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKEFic3RyYWN0V29ya2VyKiB3b3Jr
ZXIsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5l
ckxvb2t1cFR5cGUgbG9va3VwKQoreworICAgIGlmICh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aXNXb3JrZXJDb250ZXh0KCkpIHsKKyAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5KiB3b3JrZXJDb250ZXh0UHJveHkgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHk6OnJldHJpZXZlKCk7CisgICAgICAgIEFTU0VSVCh3b3JrZXJDb250ZXh0UHJveHkpOworICAg
ICAgICByZXR1cm4gd29ya2VyQ29udGV4dFByb3h5LT5maW5kT3JDcmVhdGVFdmVudExpc3RlbmVy
KHZhbHVlLCBpc0F0dHJpYnV0ZSwgbG9va3VwID09IExpc3RlbmVyRmluZE9ubHkpOwogICAgIH0K
IAorICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUod29ya2VyLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmIChwcm94eSkKKyAgICAgICAgcmV0dXJuIChsb29r
dXAgPT0gTGlzdGVuZXJGaW5kT25seSkgPyBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kV3JhcHBl
cih2YWx1ZSwgaXNBdHRyaWJ1dGUpIDogVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZE9yQ3JlYXRl
V3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwgaXNBdHRyaWJ1
dGUpOworCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gVjhE
T01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKFNWR0VsZW1lbnRJbnN0YW5jZSogZWxlbWVudCwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIGJvb2wgZmluZE9u
bHkpCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCitQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlv
biwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIExpc3RlbmVy
TG9va3VwVHlwZSBsb29rdXApCiB7Ci0gICAgcmV0dXJuIGdldEV2ZW50TGlzdGVuZXIoZWxlbWVu
dC0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSwgdmFsdWUsIGlzQXR0cmlidXRlLCBmaW5kT25seSk7
CisgICAgaWYgKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1dvcmtl
ckNvbnRleHQoKSkgeworICAgICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHdvcmtl
ckNvbnRleHRQcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsK
KyAgICAgICAgQVNTRVJUKHdvcmtlckNvbnRleHRQcm94eSk7CisgICAgICAgIHJldHVybiB3b3Jr
ZXJDb250ZXh0UHJveHktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodmFsdWUsIGlzQXR0cmli
dXRlLCBsb29rdXAgPT0gTGlzdGVuZXJGaW5kT25seSk7CisgICAgfQorCisgICAgVjhQcm94eSog
cHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7CisgICAgaWYgKHByb3h5KQorICAgICAgICByZXR1cm4gKGxvb2t1cCA9PSBMaXN0
ZW5lckZpbmRPbmx5KSA/IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRXcmFwcGVyKHZhbHVlLCBp
c0F0dHJpYnV0ZSkgOiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4
RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBpc0F0dHJpYnV0ZSk7CisKKyAg
ICByZXR1cm4gMDsKIH0KKyNlbmRpZgorCitQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFY4RE9N
V3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJMb29r
dXBUeXBlIGxvb2t1cCkKK3sKKyAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHdvcmtl
ckNvbnRleHRQcm94eSA9IHdvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5wcm94eSgpOworICAgIGlm
ICh3b3JrZXJDb250ZXh0UHJveHkpCisgICAgICAgIHJldHVybiB3b3JrZXJDb250ZXh0UHJveHkt
PmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodmFsdWUsIGlzQXR0cmlidXRlLCBsb29rdXAgPT0g
TGlzdGVuZXJGaW5kT25seSk7CisKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoWE1MSHR0cFJlcXVlc3RV
cGxvYWQqIHVwbG9hZCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1
dGUsIExpc3RlbmVyTG9va3VwVHlwZSBsb29rdXApCit7CisgICAgcmV0dXJuIGdldEV2ZW50TGlz
dGVuZXIodXBsb2FkLT5hc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKSwgdmFsdWUsIGlzQXR0cmli
dXRlLCBsb29rdXApOworfQorCitQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFY4RE9NV3JhcHBl
cjo6Z2V0RXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCogZXZlbnRUYXJnZXQsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5cGUgbG9v
a3VwKQoreworICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoZXZlbnRUYXJn
ZXQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKHByb3h5KQorICAgICAgICBy
ZXR1cm4gKGxvb2t1cCA9PSBMaXN0ZW5lckZpbmRPbmx5KSA/IFY4RXZlbnRMaXN0ZW5lckxpc3Q6
OmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkgOiBWOEV2ZW50TGlzdGVuZXJMaXN0Ojpm
aW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVl
LCBpc0F0dHJpYnV0ZSk7CiAKKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkqIHdvcmtlckNvbnRleHRQcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eTo6cmV0cmlldmUoKTsKKyAgICBpZiAod29ya2VyQ29udGV4dFByb3h5KQorICAgICAg
ICByZXR1cm4gd29ya2VyQ29udGV4dFByb3h5LT5maW5kT3JDcmVhdGVFdmVudExpc3RlbmVyKHZh
bHVlLCBpc0F0dHJpYnV0ZSwgbG9va3VwID09IExpc3RlbmVyRmluZE9ubHkpOworI2VuZGlmCisK
KyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBWOERPTVdyYXBw
ZXI6OmdldEV2ZW50TGlzdGVuZXIoVjhQcm94eSogcHJveHksIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5cGUgbG9va3VwKQorewor
ICAgIGlmIChwcm94eSkKKyAgICAgICAgcmV0dXJuIChsb29rdXAgPT0gTGlzdGVuZXJGaW5kT25s
eSkgPyBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kV3JhcHBlcih2YWx1ZSwgaXNBdHRyaWJ1dGUp
IDogVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVu
ZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwgaXNBdHRyaWJ1dGUpOworCisgICAgcmV0dXJuIDA7
Cit9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01JbXBs
ZW1lbnRhdGlvblRvVjhPYmplY3QoRE9NSW1wbGVtZW50YXRpb24qIGltcGwpCiB7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuaAppbmRleCBhZTFmYjkxLi40M2I3MDcwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmgKQEAgLTkzLDYgKzkzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICNlbmRpZgogICAgIGNsYXNzIFdvcmtlckNvbnRleHQ7CiAKKyAgICBlbnVtIExpc3RlbmVyTG9v
a3VwVHlwZSB7CisgICAgICAgIExpc3RlbmVyRmluZE9ubHksCisgICAgICAgIExpc3RlbmVyRmlu
ZE9yQ3JlYXRlLAorICAgIH07CisKICAgICBjbGFzcyBWOERPTVdyYXBwZXIgewogICAgIHB1Ymxp
YzoKICNpZm5kZWYgTkRFQlVHCkBAIC0yMTUsOSArMjIwLDI0IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudExp
c3RlbmVyVG9WOE9iamVjdChFdmVudExpc3RlbmVyKik7CiAKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihOb2RlKiBub2RlLCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgYm9vbCBmaW5kT25seSk7Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVuZXIo
Tm9kZSogbm9kZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUs
IExpc3RlbmVyTG9va3VwVHlwZSBsb29rdXApOworCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoU1ZHRWxlbWVudEluc3RhbmNlKiBlbGVt
ZW50LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVu
ZXJMb29rdXBUeXBlIGxvb2t1cCk7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihBYnN0cmFjdFdvcmtlciogd29ya2VyLCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJMb29rdXBUeXBl
IGxvb2t1cCk7CisKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihOb3RpZmljYXRpb24qIG5v
dGlmaWNhdGlvbiwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUs
IExpc3RlbmVyTG9va3VwVHlwZSBsb29rdXApOworI2VuZGlmCisKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihXb3JrZXJDb250ZXh0KiB3
b3JrZXJDb250ZXh0LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0
ZSwgTGlzdGVuZXJMb29rdXBUeXBlIGxvb2t1cCk7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihYTUxIdHRwUmVxdWVzdFVwbG9hZCog
dXBsb2FkLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlz
dGVuZXJMb29rdXBUeXBlIGxvb2t1cCk7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCogZXZlbnRUYXJnZXQsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1
cFR5cGUgbG9va3VwKTsKKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBnZXRFdmVudExpc3RlbmVyKFY4UHJveHkqIHByb3h5LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJMb29rdXBUeXBlIGxvb2t1cCk7CiAKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihT
VkdFbGVtZW50SW5zdGFuY2UqIGVsZW1lbnQsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBi
b29sIGlzQXR0cmlidXRlLCBib29sIGZpbmRPbmx5KTsKIAogICAgICAgICAvLyBET01JbXBsZW1l
bnRhdGlvbiBpcyBhIHNpbmdsZXRvbiBhbmQgaXQgaXMgaGFuZGxlZCBpbiBhIHNwZWNpYWwKICAg
ICAgICAgLy8gd2F5LiBBIHdyYXBwZXIgaXMgZ2VuZXJhdGVkIHBlciBkb2N1bWVudCBhbmQgc3Rv
cmVkIGluIGFuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5l
ckxpc3QuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmNwcApp
bmRleCBjOWFhYTEyLi5lMzdkNjMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RXZlbnRMaXN0ZW5lckxpc3QuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhFdmVudExp
c3RlbmVyTGlzdC5jcHAKQEAgLTMxLDE2NSArMzEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5lckxpc3QuaCIKIAotI2luY2x1ZGUgIlY4Q3VzdG9tRXZl
bnRMaXN0ZW5lci5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVY4RXZlbnRMaXN0ZW5lckxp
c3RJdGVyYXRvcjo6VjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yKFY4RXZlbnRMaXN0ZW5lckxp
c3QqIGxpc3QpCi0gICAgOiBtX2xpc3QobGlzdCkKLSAgICAsIG1fdmVjdG9ySW5kZXgoMCkKLSAg
ICAsIG1faXRlcihsaXN0LT5tX3RhYmxlLmJlZ2luKCkpCi17Ci19Ci0KLVY4RXZlbnRMaXN0ZW5l
ckxpc3RJdGVyYXRvcjo6VjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yKFY4RXZlbnRMaXN0ZW5l
ckxpc3QqIGxpc3QsIGJvb2wgc2hvdWxkU2Vla1RvRW5kKQotICAgIDogbV9saXN0KGxpc3QpCi0g
ICAgLCBtX3ZlY3RvckluZGV4KDApCi0gICAgLCBtX2l0ZXIobGlzdC0+bV90YWJsZS5iZWdpbigp
KQotewotICAgIGlmIChzaG91bGRTZWVrVG9FbmQpCi0gICAgICAgIHNlZWtUb0VuZCgpOwotfQot
Ci1WOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3I6On5WOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0
b3IoKSB7IH0KLQotdm9pZCBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3I6Om9wZXJhdG9yKyso
KQotewotICAgIGlmIChtX2l0ZXIgIT0gbV9saXN0LT5tX3RhYmxlLmVuZCgpKSB7Ci0gICAgICAg
IFZlY3RvcjxWOEV2ZW50TGlzdGVuZXIqPiogdmVjdG9yID0gbV9pdGVyLT5zZWNvbmQ7Ci0gICAg
ICAgIGlmIChtX3ZlY3RvckluZGV4ICsgMSA8IHZlY3Rvci0+c2l6ZSgpKSB7Ci0gICAgICAgICAg
ICBtX3ZlY3RvckluZGV4Kys7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgbV92ZWN0b3JJbmRleCA9IDA7Ci0gICAgICAgICsrbV9pdGVyOwotICAgIH0KLX0KLQotYm9v
bCBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgVjhFdmVudExp
c3RlbmVyTGlzdEl0ZXJhdG9yJiBvdGhlcikKLXsKLSAgICByZXR1cm4gb3RoZXIubV9pdGVyID09
IG1faXRlciAmJiBvdGhlci5tX3ZlY3RvckluZGV4ID09IG1fdmVjdG9ySW5kZXggJiYgb3RoZXIu
bV9saXN0ID09IG1fbGlzdDsKLX0KLQotYm9vbCBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3I6
Om9wZXJhdG9yIT0oY29uc3QgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yJiBvdGhlcikKLXsK
LSAgICByZXR1cm4gIW9wZXJhdG9yPT0ob3RoZXIpOwotfQotCi1WOEV2ZW50TGlzdGVuZXIqIFY4
RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcjo6b3BlcmF0b3IqKCkKLXsKLSAgICBpZiAobV9pdGVy
ICE9IG1fbGlzdC0+bV90YWJsZS5lbmQoKSkgewotICAgICAgICBWZWN0b3I8VjhFdmVudExpc3Rl
bmVyKj4qIHZlY3RvciA9IG1faXRlci0+c2Vjb25kOwotICAgICAgICBpZiAobV92ZWN0b3JJbmRl
eCA8IHZlY3Rvci0+c2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHZlY3Rvci0+YXQobV92ZWN0
b3JJbmRleCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi12b2lkIFY4RXZlbnRMaXN0ZW5l
ckxpc3RJdGVyYXRvcjo6c2Vla1RvRW5kKCkKLXsKLSAgICBtX2l0ZXIgPSBtX2xpc3QtPm1fdGFi
bGUuZW5kKCk7Ci0gICAgbV92ZWN0b3JJbmRleCA9IDA7Ci19Ci0KLQotVjhFdmVudExpc3RlbmVy
TGlzdDo6VjhFdmVudExpc3RlbmVyTGlzdCgpCi17Ci19Ci0KLVY4RXZlbnRMaXN0ZW5lckxpc3Q6
On5WOEV2ZW50TGlzdGVuZXJMaXN0KCkKLXsKLX0KLQotVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJh
dG9yIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmJlZ2luKCkKLXsKLSAgICByZXR1cm4gaXRlcmF0b3Io
dGhpcyk7Ci19Ci0KLVY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvciBWOEV2ZW50TGlzdGVuZXJM
aXN0OjplbmQoKQotewotICAgIHJldHVybiBpdGVyYXRvcih0aGlzLCB0cnVlKTsKLX0KLQotCi1z
dGF0aWMgaW50IGdldEtleSh2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0KQotewotICAgIC8v
IDAgaXMgYSBzZW50aW5lbCB2YWx1ZSBmb3IgdGhlIEhhc2hNYXAga2V5LCBzbyB3ZSBtYXAgaXQg
dG8gMS4KLSAgICBpbnQgaGFzaCA9IG9iamVjdC0+R2V0SWRlbnRpdHlIYXNoKCk7Ci0gICAgaWYg
KCFoYXNoKQotICAgICAgICByZXR1cm4gMTsKLSAgICByZXR1cm4gaGFzaDsKLX0KLQotdm9pZCBW
OEV2ZW50TGlzdGVuZXJMaXN0OjphZGQoVjhFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKLXsKLSAg
ICBBU1NFUlQodjg6OkNvbnRleHQ6OkluQ29udGV4dCgpKTsKLSAgICB2ODo6SGFuZGxlU2NvcGUg
aGFuZGxlU2NvcGU7Ci0KLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0ID0gbGlzdGVu
ZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgaW50IGtleSA9IGdldEtleShvYmplY3QpOwot
ICAgIFZlY3RvcjxWOEV2ZW50TGlzdGVuZXIqPiogdmVjdG9yID0gbV90YWJsZS5nZXQoa2V5KTsK
LSAgICBpZiAoIXZlY3RvcikgewotICAgICAgICB2ZWN0b3IgPSBuZXcgVmVjdG9yPFY4RXZlbnRM
aXN0ZW5lcio+KCk7Ci0gICAgICAgIG1fdGFibGUuc2V0KGtleSwgdmVjdG9yKTsKLSAgICB9Ci0g
ICAgdmVjdG9yLT5hcHBlbmQobGlzdGVuZXIpOwotICAgIG1fcmV2ZXJzZVRhYmxlLnNldChsaXN0
ZW5lciwga2V5KTsKLX0KLQotdm9pZCBWOEV2ZW50TGlzdGVuZXJMaXN0OjpyZW1vdmUoVjhFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lcikKLXsKLSAgICBpZiAobV9yZXZlcnNlVGFibGUuY29udGFpbnMo
bGlzdGVuZXIpKSB7Ci0gICAgICAgIGludCBrZXkgPSBtX3JldmVyc2VUYWJsZS5nZXQobGlzdGVu
ZXIpOwotICAgICAgICBWZWN0b3I8VjhFdmVudExpc3RlbmVyKj4qIHZlY3RvciA9IG1fdGFibGUu
Z2V0KGtleSk7Ci0gICAgICAgIGlmICghdmVjdG9yKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHZlY3Rvci0+c2l6ZSgpOyBqKyspIHsKLSAgICAg
ICAgICAgIGlmICh2ZWN0b3ItPmF0KGopID09IGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICAgICAg
dmVjdG9yLT5yZW1vdmUoaik7Ci0gICAgICAgICAgICAgICAgaWYgKCF2ZWN0b3ItPnNpemUoKSkg
ewotICAgICAgICAgICAgICAgICAgICBtX3RhYmxlLnJlbW92ZShrZXkpOwotICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgdmVjdG9yOwotICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgPSAwOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3JldmVyc2VUYWJsZS5yZW1vdmUo
bGlzdGVuZXIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBWOEV2ZW50TGlzdGVuZXJMaXN0OjpjbGVhcigpCi17Ci0g
ICAgbV90YWJsZS5jbGVhcigpOwotICAgIG1fcmV2ZXJzZVRhYmxlLmNsZWFyKCk7Ci19Ci0KLVY4
RXZlbnRMaXN0ZW5lciogVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZCh2ODo6TG9jYWw8djg6Ok9i
amVjdD4gb2JqZWN0LCBib29sIGlzQXR0cmlidXRlKQotewotICAgIEFTU0VSVCh2ODo6Q29udGV4
dDo6SW5Db250ZXh0KCkpOwotICAgIGludCBrZXkgPSBnZXRLZXkob2JqZWN0KTsKLQotICAgIFZl
Y3RvcjxWOEV2ZW50TGlzdGVuZXIqPiogdmVjdG9yID0gbV90YWJsZS5nZXQoa2V5KTsKLSAgICBp
ZiAoIXZlY3RvcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZlY3Rvci0+c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgVjhFdmVudExpc3RlbmVyKiBlbGVt
ZW50ID0gdmVjdG9yLT5hdChpKTsKLSAgICAgICAgaWYgKGlzQXR0cmlidXRlID09IGVsZW1lbnQt
PmlzQXR0cmlidXRlKCkgJiYgb2JqZWN0ID09IGVsZW1lbnQtPmdldExpc3RlbmVyT2JqZWN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LVBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kV3Jh
cHBlcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QsIGJvb2wgaXNBdHRyaWJ1dGUpCi17Ci0g
ICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7Ci0gICAgaWYgKCFvYmplY3QtPklz
T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB0aGlz
IGJlIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdCBpbnN0ZWFkPwotICAgIHJldHVybiBmaW5k
KG9iamVjdC0+VG9PYmplY3QoKSwgaXNBdHRyaWJ1dGUpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxp
c3QuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oCmluZGV4IDQy
NTUwNTAuLmE4NjNlZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhFdmVudExp
c3RlbmVyTGlzdC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlz
dC5oCkBAIC0zMiw5MiArMzIsNzQgQEAKICNkZWZpbmUgVjhFdmVudExpc3RlbmVyTGlzdF9oCiAK
ICNpbmNsdWRlIDx2OC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogCiAjaW5jbHVkZSAiUGFzc1JlZlB0ci5oIgorI2luY2x1ZGUgIlY4Q3VzdG9t
RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBWOEV2ZW50TGlz
dGVuZXI7Ci0gICAgY2xhc3MgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yOwogCi0gICAgLy8g
VGhpcyBpcyBhIGNvbnRhaW5lciBmb3IgVjhFdmVudExpc3RlbmVyIG9iamVjdHMgdGhhdCB1c2Vz
IHRoZSBpZGVudGl0eSBoYXNoIG9mIHRoZSB2ODo6T2JqZWN0IHRvCi0gICAgLy8gc3BlZWQgdXAg
bG9va3VwcworICAgIC8vIFRoaXMgaXMgYSBjb250YWluZXIgZm9yIFY4RXZlbnRMaXN0ZW5lciBv
YmplY3RzIHRoYXQgdXNlcyBoaWRkZW4gcHJvcGVydGllcyBvZiB2ODo6T2JqZWN0IHRvIHNwZWVk
IHVwIGxvb2t1cHMuCiAgICAgY2xhc3MgVjhFdmVudExpc3RlbmVyTGlzdCB7CiAgICAgcHVibGlj
OgotICAgICAgICAvLyBCZWNhdXNlIHY4OjpPYmplY3QgaWRlbnRpdHkgaGFzaGVzIGFyZSBub3Qg
Z3VhcmFudGVlZCB0byBiZSB1bmlxdWUsIHdlIHVuZm9ydHVuYXRlbHkgY2FuJ3QganVzdCBtYXAK
LSAgICAgICAgLy8gYW4gaW50IHRvIFY4RXZlbnRMaXN0ZW5lci4gSW5zdGVhZCB3ZSBkZWZpbmUg
YSBIYXNoTWFwIG9mIGludCB0byBWZWN0b3Igb2YgVjhFdmVudExpc3RlbmVyCi0gICAgICAgIC8v
IGNhbGxlZCBhIExpc3RlbmVyTXVsdGlNYXAuCi0gICAgICAgIHR5cGVkZWYgVmVjdG9yPFY4RXZl
bnRMaXN0ZW5lcio+KiBWYWx1ZXM7Ci0gICAgICAgIHN0cnVjdCBWYWx1ZXNUcmFpdHMgOiBIYXNo
VHJhaXRzPFZhbHVlcz4gewotICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7Ci0gICAgICAgIH07Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQs
IFZhbHVlcywgRGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwgSGFzaFRyYWl0czxpbnQ+LCBWYWx1ZXNU
cmFpdHM+IExpc3RlbmVyTXVsdGlNYXA7Ci0KLSAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdCgp
OwotICAgICAgICB+VjhFdmVudExpc3RlbmVyTGlzdCgpOwotCi0gICAgICAgIGZyaWVuZCBjbGFz
cyBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgVjhFdmVudExp
c3RlbmVyTGlzdEl0ZXJhdG9yIGl0ZXJhdG9yOyAgICAgICAgCi0KLSAgICAgICAgaXRlcmF0b3Ig
YmVnaW4oKTsKLSAgICAgICAgaXRlcmF0b3IgZW5kKCk7Ci0KLSAgICAgICAgdm9pZCBhZGQoVjhF
dmVudExpc3RlbmVyKik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKFY4RXZlbnRMaXN0ZW5lciopOwot
ICAgICAgICBWOEV2ZW50TGlzdGVuZXIqIGZpbmQodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBib29s
IGlzQXR0cmlidXRlKTsKLSAgICAgICAgdm9pZCBjbGVhcigpOwotICAgICAgICBzaXplX3Qgc2l6
ZSgpIHsgcmV0dXJuIG1fdGFibGUuc2l6ZSgpOyB9Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxWOEV2
ZW50TGlzdGVuZXI+IGZpbmRXcmFwcGVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+LCBib29sIGlzQXR0
cmlidXRlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlclR5cGU+Ci0gICAgICAg
IFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVXcmFwcGVyKEZyYW1lKiwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4sIGJvb2wgaXNBdHRyaWJ1dGUpOworICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGZpbmRXcmFwcGVyKHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQodjg6OkNvbnRleHQ6OkluQ29udGV4dCgpKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUtPklz
T2JqZWN0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBwcml2YXRlOgotICAg
ICAgICBMaXN0ZW5lck11bHRpTWFwIG1fdGFibGU7CisgICAgICAgICAgICB2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IHdyYXBwZXJQcm9wZXJ0eSA9IGdldEhpZGRlblByb3BlcnR5KGlzQXR0cmlidXRl
KTsKKyAgICAgICAgICAgIHJldHVybiBkb0ZpbmRXcmFwcGVyKHY4OjpMb2NhbDx2ODo6T2JqZWN0
Pjo6Q2FzdCh2YWx1ZSksIHdyYXBwZXJQcm9wZXJ0eSk7CisgICAgICAgIH0KIAotICAgICAgICAv
LyB3ZSBhbHNvIGtlZXAgYSByZXZlcnNlIG1hcHBpbmcgb2YgVjhFdmVudExpc3RlbmVyIHRvIHY4
OjpPYmplY3QgaWRlbnRpdHkgaGFzaCwKLSAgICAgICAgLy8gaW4gb3JkZXIgdG8gc3BlZWQgdXAg
cmVtb3ZhbCBieSBWOEV2ZW50TGlzdGVuZXIKLSAgICAgICAgSGFzaE1hcDxWOEV2ZW50TGlzdGVu
ZXIqLCBpbnQ+IG1fcmV2ZXJzZVRhYmxlOwotICAgIH07CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJUeXBlLCB0eXBlbmFtZSBDb250ZXh0VHlwZT4KKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVXcmFwcGVyKENvbnRleHRUeXBl
Kiwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4sIGJvb2wgaXNBdHRyaWJ1dGUpOworCisgICAgICAgIHN0
YXRpYyB2b2lkIGNsZWFyV3JhcHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGxpc3RlbmVyT2Jq
ZWN0LCBib29sIGlzQXR0cmlidXRlKQorICAgICAgICB7CisgICAgICAgICAgICB2ODo6SGFuZGxl
PHY4OjpTdHJpbmc+IHdyYXBwZXJQcm9wZXJ0eSA9IGdldEhpZGRlblByb3BlcnR5KGlzQXR0cmli
dXRlKTsKKyAgICAgICAgICAgIGxpc3RlbmVyT2JqZWN0LT5EZWxldGVIaWRkZW5WYWx1ZSh3cmFw
cGVyUHJvcGVydHkpOworICAgICAgICB9CiAKLSAgICBjbGFzcyBWOEV2ZW50TGlzdGVuZXJMaXN0
SXRlcmF0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgflY4RXZlbnRMaXN0ZW5lckxpc3RJdGVy
YXRvcigpOwotICAgICAgICB2b2lkIG9wZXJhdG9yKysoKTsKLSAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvciYpOwotICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yJik7Ci0gICAgICAgIFY4
RXZlbnRMaXN0ZW5lciogb3BlcmF0b3IqKCk7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5k
IGNsYXNzIFY4RXZlbnRMaXN0ZW5lckxpc3Q7Ci0gICAgICAgIGV4cGxpY2l0IFY4RXZlbnRMaXN0
ZW5lckxpc3RJdGVyYXRvcihWOEV2ZW50TGlzdGVuZXJMaXN0Kik7Ci0gICAgICAgIFY4RXZlbnRM
aXN0ZW5lckxpc3RJdGVyYXRvcihWOEV2ZW50TGlzdGVuZXJMaXN0KiwgYm9vbCBzaG91bGRTZWVr
VG9FbmQpOwotICAgICAgICB2b2lkIHNlZWtUb0VuZCgpOwotCi0gICAgICAgIFY4RXZlbnRMaXN0
ZW5lckxpc3QqIG1fbGlzdDsKLSAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdDo6TGlzdGVuZXJN
dWx0aU1hcDo6aXRlcmF0b3IgbV9pdGVyOwotICAgICAgICBzaXplX3QgbV92ZWN0b3JJbmRleDsK
KyAgICAgICAgc3RhdGljIFY4RXZlbnRMaXN0ZW5lciogZG9GaW5kV3JhcHBlcih2ODo6TG9jYWw8
djg6Ok9iamVjdD4gb2JqZWN0LCB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHdyYXBwZXJQcm9wZXJ0
eSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQo
KSk7CisgICAgICAgICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgICAgICAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiBsaXN0ZW5lciA9IG9iamVjdC0+R2V0SGlkZGVuVmFsdWUod3JhcHBl
clByb3BlcnR5KTsKKyAgICAgICAgICAgIGlmIChsaXN0ZW5lci5Jc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VjhFdmVu
dExpc3RlbmVyKj4odjg6OkV4dGVybmFsOjpVbndyYXAobGlzdGVuZXIpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHN0YXRpYyBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBnZXRIaWRkZW5Q
cm9wZXJ0eShib29sIGlzQXR0cmlidXRlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNBdHRyaWJ1dGUgPyBWOEhpZGRlblByb3BlcnR5TmFtZTo6YXR0cmlidXRlTGlzdGVuZXIoKSA6
IFY4SGlkZGVuUHJvcGVydHlOYW1lOjpsaXN0ZW5lcigpOworICAgICAgICB9CiAgICAgfTsKIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJUeXBlPgotICAgIFBhc3NSZWZQdHI8VjhFdmVu
dExpc3RlbmVyPiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyKEZyYW1l
KiBmcmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sIGlzQXR0cmlidXRlKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJUeXBlLCB0eXBlbmFtZSBDb250ZXh0VHlwZT4K
KyAgICBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gVjhFdmVudExpc3RlbmVyTGlzdDo6Zmlu
ZE9yQ3JlYXRlV3JhcHBlcihDb250ZXh0VHlwZSogY29udGV4dCwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUpCiAgICAgewogICAgICAgICBBU1NFUlQodjg6OkNv
bnRleHQ6OkluQ29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFvYmplY3QtPklzT2JqZWN0KCkpCisg
ICAgICAgIGlmICghdmFsdWUtPklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAot
ICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgdjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpD
YXN0IGluc3RlYWQ/Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lciogd3JhcHBlciA9IGZpbmQob2Jq
ZWN0LT5Ub09iamVjdCgpLCBpc0F0dHJpYnV0ZSk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiBvYmplY3QgPSB2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOworICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHdyYXBwZXJQcm9wZXJ0eSA9IGdldEhpZGRlblByb3Bl
cnR5KGlzQXR0cmlidXRlKTsKKworICAgICAgICBWOEV2ZW50TGlzdGVuZXIqIHdyYXBwZXIgPSBk
b0ZpbmRXcmFwcGVyKG9iamVjdCwgd3JhcHBlclByb3BlcnR5KTsKICAgICAgICAgaWYgKHdyYXBw
ZXIpCiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKIAotICAgICAgICAvLyBDcmVhdGUgYSBu
ZXcgb25lLCBhbmQgYWRkIHRvIGNhY2hlLgotICAgICAgICBSZWZQdHI8V3JhcHBlclR5cGU+IG5l
d0xpc3RlbmVyID0gV3JhcHBlclR5cGU6OmNyZWF0ZShmcmFtZSwgdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+OjpDYXN0KG9iamVjdCksIGlzQXR0cmlidXRlKTsKLSAgICAgICAgYWRkKG5ld0xpc3RlbmVy
LmdldCgpKTsKKyAgICAgICAgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IHdyYXBwZXJQdHIg
PSBXcmFwcGVyVHlwZTo6Y3JlYXRlKGNvbnRleHQsIG9iamVjdCwgaXNBdHRyaWJ1dGUpOworICAg
ICAgICBpZiAod3JhcHBlclB0cikKKyAgICAgICAgICAgIG9iamVjdC0+U2V0SGlkZGVuVmFsdWUo
d3JhcHBlclByb3BlcnR5LCB2ODo6RXh0ZXJuYWw6OldyYXAod3JhcHBlclB0ci5nZXQoKSkpOwog
Ci0gICAgICAgIHJldHVybiBuZXdMaXN0ZW5lcjsKLSAgICB9OworICAgICAgICByZXR1cm4gd3Jh
cHBlclB0cjsKKyAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmNwcAppbmRleCAxNmFjMjMyLi43ZWEyYTRj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmNwcApAQCAt
MzYsMTkgKzM2LDMwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6Om9iamVjdFByb3RvdHlwZSgpCiB7CiAgICAgc3RhdGlj
IHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+KiBzdHJpbmcgPSBjcmVhdGVTdHJpbmcoIldlYkNv
cmU6OlY4SGlkZGVuUHJvcGVydHlOYW1lOjpvYmplY3RQcm90b3R5cGUiKTsKLQogICAgIHJldHVy
biAqc3RyaW5nOwogfQogCiB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IFY4SGlkZGVuUHJvcGVydHlO
YW1lOjppc29sYXRlZFdvcmxkKCkKIHsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OlN0
cmluZz4qIHN0cmluZyA9IGNyZWF0ZVN0cmluZygiV2ViQ29yZTo6VjhIaWRkZW5Qcm9wZXJ0eU5h
bWU6Omlzb2xhdGVkV29ybGQiKTsKKyAgICByZXR1cm4gKnN0cmluZzsKK30KKwordjg6OkhhbmRs
ZTx2ODo6U3RyaW5nPiBWOEhpZGRlblByb3BlcnR5TmFtZTo6bGlzdGVuZXIoKQoreworICAgIHN0
YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPiogc3RyaW5nID0gY3JlYXRlU3RyaW5nKCJX
ZWJDb3JlOjpWOEhpZGRlblByb3BlcnR5TmFtZTo6bGlzdGVuZXIiKTsKKyAgICByZXR1cm4gKnN0
cmluZzsKK30KIAordjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBWOEhpZGRlblByb3BlcnR5TmFtZTo6
YXR0cmlidXRlTGlzdGVuZXIoKQoreworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6U3Ry
aW5nPiogc3RyaW5nID0gY3JlYXRlU3RyaW5nKCJXZWJDb3JlOjpWOEhpZGRlblByb3BlcnR5TmFt
ZTo6YXR0cmlidXRlTGlzdGVuZXIiKTsKICAgICByZXR1cm4gKnN0cmluZzsKIH0KIAogdjg6OlBl
cnNpc3RlbnQ8djg6OlN0cmluZz4qIFY4SGlkZGVuUHJvcGVydHlOYW1lOjpjcmVhdGVTdHJpbmco
Y29uc3QgY2hhcioga2V5KQogeworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICByZXR1
cm4gbmV3IHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+KHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJp
bmc+OjpOZXcodjg6OlN0cmluZzo6TmV3U3ltYm9sKGtleSkpKTsKIH0KIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oCmluZGV4IDg3NGI1MjUuLmRiZTk5MmYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgKQEAgLTM5LDYgKzM5
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlN0cmluZz4gb2JqZWN0UHJvdG90eXBlKCk7CiAgICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGlzb2xhdGVkV29ybGQoKTsKKyAgICAgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlN0cmluZz4gbGlzdGVuZXIoKTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlN0cmluZz4gYXR0cmlidXRlTGlzdGVuZXIoKTsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPiogY3JlYXRlU3RyaW5nKGNvbnN0
IGNoYXIqIGtleSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50
TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNw
cAppbmRleCBjY2YzMmE3Li40NmY1NjQ5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5
RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTM3LDE5NSArMzcsMTA1IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotVjhMYXp5RXZlbnRMaXN0ZW5lcjo6VjhMYXp5RXZlbnRMaXN0ZW5lcihGcmFtZSAq
ZnJhbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJv
b2wgaXNTVkdFdmVudCkKK1Y4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIo
RnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25O
YW1lLCBib29sIGlzU1ZHRXZlbnQpCiAgICAgOiBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcihmcmFt
ZSwgdHJ1ZSkKICAgICAsIG1fY29kZShjb2RlKQogICAgICwgbV9mdW5jdGlvbk5hbWUoZnVuY3Rp
b25OYW1lKQogICAgICwgbV9pc1NWR0V2ZW50KGlzU1ZHRXZlbnQpCi0gICAgLCBtX2NvbXBpbGVk
KGZhbHNlKQotICAgICwgbV93cmFwcGVkRnVuY3Rpb25Db21waWxlZChmYWxzZSkKIHsKIH0KIAot
VjhMYXp5RXZlbnRMaXN0ZW5lcjo6flY4TGF6eUV2ZW50TGlzdGVuZXIoKQotewotICAgIGRpc3Bv
c2VMaXN0ZW5lck9iamVjdCgpOwotCi0gICAgLy8gRGlzcG9zZSB3cmFwcGVkIGZ1bmN0aW9uCi0g
ICAgaWYgKCFtX3dyYXBwZWRGdW5jdGlvbi5Jc0VtcHR5KCkpIHsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgIFY4R0NDb250cm9sbGVyOjp1bnJlZ2lzdGVyR2xvYmFsSGFuZGxlKHRoaXMsIG1fd3Jh
cHBlZEZ1bmN0aW9uKTsKLSNlbmRpZgotICAgICAgICBtX3dyYXBwZWRGdW5jdGlvbi5EaXNwb3Nl
KCk7Ci0gICAgICAgIG1fd3JhcHBlZEZ1bmN0aW9uLkNsZWFyKCk7Ci0gICAgfQotfQotCi12ODo6
TG9jYWw8djg6OkZ1bmN0aW9uPiBWOExhenlFdmVudExpc3RlbmVyOjpnZXRMaXN0ZW5lckZ1bmN0
aW9uKCkKLXsKLSAgICBpZiAobV9jb21waWxlZCkgewotICAgICAgICBBU1NFUlQobV9saXN0ZW5l
ci5Jc0VtcHR5KCkgfHwgbV9saXN0ZW5lci0+SXNGdW5jdGlvbigpKTsKLSAgICAgICAgcmV0dXJu
IG1fbGlzdGVuZXIuSXNFbXB0eSgpID8gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4oKSA6IHY4OjpM
b2NhbDx2ODo6RnVuY3Rpb24+OjpOZXcodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uPjo6Q2Fz
dChtX2xpc3RlbmVyKSk7Ci0gICAgfQotCi0gICAgbV9jb21waWxlZCA9IHRydWU7Ci0KLSAgICBB
U1NFUlQobV9mcmFtZSk7Ci0KLSAgICB7Ci0gICAgICAgIC8vIFN3aXRjaCB0byB0aGUgY29udGV4
dCBvZiBtX2ZyYW1lLgotICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0KLSAg
ICAgICAgLy8gVXNlIHRoZSBvdXRlciBzY29wZSB0byBob2xkIGNvbnRleHQuCi0gICAgICAgIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IFY4UHJveHk6Om1haW5Xb3JsZENvbnRl
eHQobV9mcmFtZSk7Ci0gICAgICAgIC8vIEJhaWwgb3V0IGlmIHdlIGNvdWxkIG5vdCBnZXQgdGhl
IGNvbnRleHQuCi0gICAgICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQotICAgICAgICAgICAg
cmV0dXJuIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCk7Ci0KLSAgICAgICAgdjg6OkNvbnRleHQ6
OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7Ci0KLSAgICAgICAgLy8gV3JhcCBmdW5jdGlvbiBhcm91
bmQgdGhlIGV2ZW50IGNvZGUuICBUaGUgcGFyZW50aGVzaXMgYXJvdW5kIHRoZSBmdW5jdGlvbiBh
cmUgbmVlZGVkIHNvIHRoYXQgZXZhbHVhdGluZyB0aGUgY29kZSB5aWVsZHMKLSAgICAgICAgLy8g
dGhlIGZ1bmN0aW9uIHZhbHVlLiAgV2l0aG91dCB0aGUgcGFyZW50aGVzaXMgdGhlIGZ1bmN0aW9u
IHZhbHVlIGlzIHRocm93biBhd2F5LgotCi0gICAgICAgIC8vIE1ha2UgaXQgYW4gYW5vbnltb3Vz
IGZ1bmN0aW9uIHRvIGF2b2lkIG5hbWUgY29uZmxpY3QgZm9yIGNhc2VzIGxpa2UKLSAgICAgICAg
Ly8gPGJvZHkgb25sb2FkPSdvbmxvYWQoKSc+Ci0gICAgICAgIC8vIDxzY3JpcHQ+IGZ1bmN0aW9u
IG9ubG9hZCgpIHsgYWxlcnQoJ2hpJyk7IH0gPC9zY3JpcHQ+LgotICAgICAgICAvLyBTZXQgZnVu
Y3Rpb24gbmFtZSB0byBmdW5jdGlvbiBvYmplY3QgaW5zdGVhZC4KLSAgICAgICAgLy8gU2VlIGlz
c3VlIDk0NDY5MC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIEVDTUFTY3JpcHQgc3BlYyBz
YXlzICh2ZXJ5IG9ibGlxdWVseSkgdGhhdCB0aGUgcGFyYW1ldGVyIHRvIGFuIGV2ZW50IGhhbmRs
ZXIgaXMgbmFtZWQgImV2dCIuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIERvbid0IHVzZSBuZXcg
bGluZXMgc28gdGhhdCBsaW5lcyBpbiB0aGUgbW9kaWZpZWQgaGFuZGxlcgotICAgICAgICAvLyBo
YXZlIHRoZSBzYW1lIG51bWJlcnMgYXMgaW4gdGhlIG9yaWdpbmFsIGNvZGUuCi0gICAgICAgIFN0
cmluZyBjb2RlID0gIihmdW5jdGlvbiAoZXZ0KSB7IjsKLSAgICAgICAgY29kZS5hcHBlbmQobV9j
b2RlKTsKLSAgICAgICAgY29kZS5hcHBlbmQoIlxufSkiKTsKLQotICAgICAgICB2ODo6SGFuZGxl
PHY4OjpTdHJpbmc+IGNvZGVFeHRlcm5hbFN0cmluZyA9IHY4RXh0ZXJuYWxTdHJpbmcoY29kZSk7
Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gVjhQcm94eTo6Y29tcGls
ZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJpbmcsIG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCBt
X2xpbmVOdW1iZXIgLSAxKTsKLSAgICAgICAgaWYgKCFzY3JpcHQuSXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG1fZnJhbWUpOwotICAg
ICAgICAgICAgQVNTRVJUKHByb3h5KTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHZhbHVlID0gcHJveHktPnJ1blNjcmlwdChzY3JpcHQsIGZhbHNlKTsKLSAgICAgICAgICAgIGlm
ICghdmFsdWUuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc0Z1
bmN0aW9uKCkpOwotICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGxpc3Rl
bmVyRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdCh2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgbGlzdGVuZXJGdW5jdGlvbi0+U2V0TmFtZSh2ODo6U3RyaW5nOjpOZXcoZnJv
bVdlYkNvcmVTdHJpbmcobV9mdW5jdGlvbk5hbWUpLCBtX2Z1bmN0aW9uTmFtZS5sZW5ndGgoKSkp
OwotCi0gICAgICAgICAgICAgICAgbV9saXN0ZW5lciA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvbj46Ok5ldyhsaXN0ZW5lckZ1bmN0aW9uKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAg
ICAgICAgVjhHQ0NvbnRyb2xsZXI6OnJlZ2lzdGVyR2xvYmFsSGFuZGxlKEVWRU5UX0xJU1RFTkVS
LCB0aGlzLCBtX2xpc3RlbmVyKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgQVNTRVJUKG1fbGlzdGVuZXIuSXNFbXB0eSgpIHx8IG1fbGlzdGVuZXItPklz
RnVuY3Rpb24oKSk7Ci0gICAgcmV0dXJuIG1fbGlzdGVuZXIuSXNFbXB0eSgpID8gdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4oKSA6IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpOZXcodjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2xpc3RlbmVyKSk7Ci19Ci0KIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IFY4TGF6eUV2ZW50TGlzdGVuZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50LCBFdmVudCogZXZlbnQpCiB7Ci0gICAgdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4gaGFuZGxlckZ1bmN0aW9uID0gZ2V0V3JhcHBlZExpc3RlbmVyRnVuY3Rp
b24oKTsKKyAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBoYW5kbGVyRnVuY3Rpb24gPSB2ODo6
TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChnZXRMaXN0ZW5lck9iamVjdCgpKTsKICAgICB2ODo6
TG9jYWw8djg6Ok9iamVjdD4gcmVjZWl2ZXIgPSBnZXRSZWNlaXZlck9iamVjdChldmVudCk7CiAg
ICAgaWYgKGhhbmRsZXJGdW5jdGlvbi5Jc0VtcHR5KCkgfHwgcmVjZWl2ZXIuSXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpWYWx1ZT4oKTsKIAogICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBwYXJhbWV0ZXJzWzFdID0geyBqc0V2ZW50IH07CiAKLSAgICBWOFByb3h5KiBw
cm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG1fZnJhbWUpOworICAgIFY4UHJveHkqIHByb3h5ID0g
VjhQcm94eTo6cmV0cmlldmUoZnJhbWUoKSk7CiAgICAgcmV0dXJuIHByb3h5LT5jYWxsRnVuY3Rp
b24oaGFuZGxlckZ1bmN0aW9uLCByZWNlaXZlciwgMSwgcGFyYW1ldGVycyk7CiB9CiAKLQogc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOExhenlFdmVudExpc3RlbmVyVG9TdHJpbmcoY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICByZXR1cm4gYXJncy5DYWxsZWUoKS0+R2V0
SGlkZGVuVmFsdWUodjg6OlN0cmluZzo6TmV3KCJ0b1N0cmluZ1N0cmluZyIpKTsKIH0KIAotCi12
ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOExhenlFdmVudExpc3RlbmVyOjpnZXRXcmFwcGVkTGlz
dGVuZXJGdW5jdGlvbigpCit2b2lkIFY4TGF6eUV2ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5l
ck9iamVjdCgpCiB7Ci0gICAgaWYgKG1fd3JhcHBlZEZ1bmN0aW9uQ29tcGlsZWQpIHsKLSAgICAg
ICAgQVNTRVJUKG1fd3JhcHBlZEZ1bmN0aW9uLklzRW1wdHkoKSB8fCBtX3dyYXBwZWRGdW5jdGlv
bi0+SXNGdW5jdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIG1fd3JhcHBlZEZ1bmN0aW9uLklzRW1w
dHkoKSA/IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCkgOiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9u
Pjo6TmV3KG1fd3JhcHBlZEZ1bmN0aW9uKTsKLSAgICB9Ci0KLSAgICBtX3dyYXBwZWRGdW5jdGlv
bkNvbXBpbGVkID0gdHJ1ZTsKLQotICAgIHsKLSAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBjb250
ZXh0IG9mIG1fZnJhbWUuCi0gICAgICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLQot
ICAgICAgICAvLyBVc2UgdGhlIG91dGVyIHNjb3BlIHRvIGhvbGQgY29udGV4dC4KLSAgICAgICAg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gVjhQcm94eTo6bWFpbldvcmxkQ29u
dGV4dChtX2ZyYW1lKTsKLSAgICAgICAgLy8gQmFpbCBvdXQgaWYgd2UgY2Fubm90IGdldCB0aGUg
Y29udGV4dC4KLSAgICAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4oKTsKLQotICAgICAgICB2ODo6Q29udGV4dDo6
U2NvcGUgc2NvcGUodjhDb250ZXh0KTsKLQotICAgICAgICAvLyBGSVhNRTogY2FjaGUgdGhlIHdy
YXBwZXIgZnVuY3Rpb24uCi0KLSAgICAgICAgLy8gTm9kZXMgb3RoZXIgdGhhbiB0aGUgZG9jdW1l
bnQgb2JqZWN0LCB3aGVuIGV4ZWN1dGluZyBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgcHVzaCBkb2N1
bWVudCwgZm9ybSwgYW5kIHRoZSB0YXJnZXQgbm9kZSBvbiB0aGUgc2NvcGUgY2hhaW4uCi0gICAg
ICAgIC8vIFdlIGRvIHRoaXMgYnkgdXNpbmcgJ3dpdGgnIHN0YXRlbWVudC4KLSAgICAgICAgLy8g
U2VlIGNocm9tZS9mYXN0L2Zvcm1zL2Zvcm0tYWN0aW9uLmh0bWwKLSAgICAgICAgLy8gICAgIGNo
cm9tZS9mYXN0L2Zvcm1zL3NlbGVjdGVkLWluZGV4LXZhbHVlLmh0bWwKLSAgICAgICAgLy8gICAg
IGJhc2UvZmFzdC9vdmVyZmxvdy9vbnNjcm9sbC1sYXllci1zZWxmLWRlc3RydWN0Lmh0bWwKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gRG9uJ3QgdXNlIG5ldyBsaW5lcyBzbyB0aGF0IGxpbmVzIGlu
IHRoZSBtb2RpZmllZCBoYW5kbGVyCi0gICAgICAgIC8vIGhhdmUgdGhlIHNhbWUgbnVtYmVycyBh
cyBpbiB0aGUgb3JpZ2luYWwgY29kZS4KLSAgICAgICAgU3RyaW5nIGNvZGUgPSAiKGZ1bmN0aW9u
IChldnQpIHsiIFwKLSAgICAgICAgICAgICAgICAgICAgICAid2l0aCAodGhpcy5vd25lckRvY3Vt
ZW50ID8gdGhpcy5vd25lckRvY3VtZW50IDoge30pIHsiIFwKLSAgICAgICAgICAgICAgICAgICAg
ICAid2l0aCAodGhpcy5mb3JtID8gdGhpcy5mb3JtIDoge30pIHsiIFwKLSAgICAgICAgICAgICAg
ICAgICAgICAid2l0aCAodGhpcykgeyIgXAotICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4g
KGZ1bmN0aW9uKGV2dCl7IjsKLSAgICAgICAgY29kZS5hcHBlbmQobV9jb2RlKTsKLSAgICAgICAg
Ly8gSW5zZXJ0ICdcbicgb3RoZXJ3aXNlIC8vLXN0eWxlIGNvbW1lbnRzIGNvdWxkIGJyZWFrIHRo
ZSBoYW5kbGVyLgotICAgICAgICBjb2RlLmFwcGVuZCggICJcbn0pLmNhbGwodGhpcywgZXZ0KTt9
fX19KSIpOwotICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGVFeHRlcm5hbFN0cmlu
ZyA9IHY4RXh0ZXJuYWxTdHJpbmcoY29kZSk7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OlNjcmlw
dD4gc2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJpbmcsIG1f
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCBtX2xpbmVOdW1iZXIpOwotICAgICAgICBpZiAoIXNj
cmlwdC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6
cmV0cmlldmUobV9mcmFtZSk7Ci0gICAgICAgICAgICBBU1NFUlQocHJveHkpOwotICAgICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUgPSBwcm94eS0+cnVuU2NyaXB0KHNjcmlwdCwg
ZmFsc2UpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQodmFsdWUtPklzRnVuY3Rpb24oKSk7Ci0KLSAgICAgICAgICAgICAgICBtX3dy
YXBwZWRGdW5jdGlvbiA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46Ok5ldyh2ODo6TG9j
YWw8djg6OkZ1bmN0aW9uPjo6Q2FzdCh2YWx1ZSkpOwotCi0gICAgICAgICAgICAgICAgLy8gQ2hh
bmdlIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBvbiB0aGUgd3JhcHBlciBmdW5jdGlvbiB0byBhdm9p
ZCBpdCByZXR1cm5pbmcgdGhlIHNvdXJjZSBmb3IgdGhlIGFjdHVhbCB3cmFwcGVyIGZ1bmN0aW9u
LiBJbnN0ZWFkCi0gICAgICAgICAgICAgICAgLy8gaXQgcmV0dXJucyBzb3VyY2UgZm9yIGEgY2xl
YW4gd3JhcHBlciBmdW5jdGlvbiB3aXRoIHRoZSBldmVudCBhcmd1bWVudCB3cmFwcGluZyB0aGUg
ZXZlbnQgc291cmNlIGNvZGUuIFRoZSByZWFzb24gZm9yIHRoaXMKLSAgICAgICAgICAgICAgICAv
LyBpcyB0aGF0IHNvbWUgd2ViIHNpdGVzIHVzZXMgdG9TdHJpbmcgb24gZXZlbnQgZnVuY3Rpb25z
IGFuZCB0aGUgZXZhbHMgdGhlIHNvdXJjZSByZXR1cm5lZCAoc29tZSB0aW1lcyBhIFJlZ0V4cCBp
cyBhcHBsaWVkIGFzCi0gICAgICAgICAgICAgICAgLy8gd2VsbCkgZm9yIHNvbWUgb3RoZXIgdXNl
LiBUaGF0IGZhaWxzIG1pc2VyYWJseSBpZiB0aGUgYWN0dWFsIHdyYXBwZXIgc291cmNlIGlzIHJl
dHVybmVkLgotICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
dG9TdHJpbmdUZW1wbGF0ZSA9IHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhMYXp5RXZlbnRM
aXN0ZW5lclRvU3RyaW5nKTsKLSAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9u
PiB0b1N0cmluZ0Z1bmN0aW9uOwotICAgICAgICAgICAgICAgIGlmICghdG9TdHJpbmdUZW1wbGF0
ZS5Jc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nRnVuY3Rpb24gPSB0b1N0
cmluZ1RlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwotICAgICAgICAgICAgICAgIGlmICghdG9TdHJp
bmdGdW5jdGlvbi5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRvU3Ry
aW5nUmVzdWx0ID0gImZ1bmN0aW9uICI7Ci0gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nUmVz
dWx0LmFwcGVuZChtX2Z1bmN0aW9uTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5n
UmVzdWx0LmFwcGVuZCgiKCIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9pc1NWR0V2ZW50
KQotICAgICAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdSZXN1bHQuYXBwZW5kKCJldnQiKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdG9TdHJp
bmdSZXN1bHQuYXBwZW5kKCJldmVudCIpOwotICAgICAgICAgICAgICAgICAgICB0b1N0cmluZ1Jl
c3VsdC5hcHBlbmQoIikge1xuICAiKTsKLSAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdSZXN1
bHQuYXBwZW5kKG1fY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nUmVzdWx0LmFw
cGVuZCgiXG59Iik7Ci0gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nRnVuY3Rpb24tPlNldEhp
ZGRlblZhbHVlKHY4OjpTdHJpbmc6Ok5ldygidG9TdHJpbmdTdHJpbmciKSwgdjhFeHRlcm5hbFN0
cmluZyh0b1N0cmluZ1Jlc3VsdCkpOwotICAgICAgICAgICAgICAgICAgICBtX3dyYXBwZWRGdW5j
dGlvbi0+U2V0KHY4OjpTdHJpbmc6Ok5ldygidG9TdHJpbmciKSwgdG9TdHJpbmdGdW5jdGlvbik7
Ci0gICAgICAgICAgICAgICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgICAgIFY4
R0NDb250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZShFVkVOVF9MSVNURU5FUiwgdGhpcywg
bV93cmFwcGVkRnVuY3Rpb24pOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgbV93cmFwcGVkRnVu
Y3Rpb24tPlNldE5hbWUodjg6OlN0cmluZzo6TmV3KGZyb21XZWJDb3JlU3RyaW5nKG1fZnVuY3Rp
b25OYW1lKSwgbV9mdW5jdGlvbk5hbWUubGVuZ3RoKCkpKTsKKyAgICBpZiAoaGFzRXhpc3RpbmdM
aXN0ZW5lck9iamVjdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTd2l0Y2ggdG8gdGhl
IGNvbnRleHQgb2YgbV9mcmFtZS4KKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisK
KyAgICAvLyBVc2UgdGhlIG91dGVyIHNjb3BlIHRvIGhvbGQgY29udGV4dC4KKyAgICB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBWOFByb3h5OjptYWluV29ybGRDb250ZXh0KGZy
YW1lKCkpOworICAgIC8vIEJhaWwgb3V0IGlmIHdlIGNhbm5vdCBnZXQgdGhlIGNvbnRleHQuCisg
ICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHY4OjpD
b250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOworCisgICAgLy8gRklYTUU6IGNhY2hlIHRo
ZSB3cmFwcGVyIGZ1bmN0aW9uLgorCisgICAgLy8gTm9kZXMgb3RoZXIgdGhhbiB0aGUgZG9jdW1l
bnQgb2JqZWN0LCB3aGVuIGV4ZWN1dGluZyBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgcHVzaCBkb2N1
bWVudCwgZm9ybSwgYW5kIHRoZSB0YXJnZXQgbm9kZSBvbiB0aGUgc2NvcGUgY2hhaW4uCisgICAg
Ly8gV2UgZG8gdGhpcyBieSB1c2luZyAnd2l0aCcgc3RhdGVtZW50LgorICAgIC8vIFNlZSBjaHJv
bWUvZmFzdC9mb3Jtcy9mb3JtLWFjdGlvbi5odG1sCisgICAgLy8gICAgIGNocm9tZS9mYXN0L2Zv
cm1zL3NlbGVjdGVkLWluZGV4LXZhbHVlLmh0bWwKKyAgICAvLyAgICAgYmFzZS9mYXN0L292ZXJm
bG93L29uc2Nyb2xsLWxheWVyLXNlbGYtZGVzdHJ1Y3QuaHRtbAorICAgIC8vCisgICAgLy8gRG9u
J3QgdXNlIG5ldyBsaW5lcyBzbyB0aGF0IGxpbmVzIGluIHRoZSBtb2RpZmllZCBoYW5kbGVyCisg
ICAgLy8gaGF2ZSB0aGUgc2FtZSBudW1iZXJzIGFzIGluIHRoZSBvcmlnaW5hbCBjb2RlLgorICAg
IFN0cmluZyBjb2RlID0gIihmdW5jdGlvbiAoZXZ0KSB7IiBcCisgICAgICAgICAgICAid2l0aCAo
dGhpcy5vd25lckRvY3VtZW50ID8gdGhpcy5vd25lckRvY3VtZW50IDoge30pIHsiIFwKKyAgICAg
ICAgICAgICJ3aXRoICh0aGlzLmZvcm0gPyB0aGlzLmZvcm0gOiB7fSkgeyIgXAorICAgICAgICAg
ICAgIndpdGggKHRoaXMpIHsiIFwKKyAgICAgICAgICAgICJyZXR1cm4gKGZ1bmN0aW9uKGV2dCl7
IjsKKyAgICBjb2RlLmFwcGVuZChtX2NvZGUpOworICAgIC8vIEluc2VydCAnXG4nIG90aGVyd2lz
ZSAvLy1zdHlsZSBjb21tZW50cyBjb3VsZCBicmVhayB0aGUgaGFuZGxlci4KKyAgICBjb2RlLmFw
cGVuZCggICJcbn0pLmNhbGwodGhpcywgZXZ0KTt9fX19KSIpOworICAgIHY4OjpIYW5kbGU8djg6
OlN0cmluZz4gY29kZUV4dGVybmFsU3RyaW5nID0gdjhFeHRlcm5hbFN0cmluZyhjb2RlKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQo
Y29kZUV4dGVybmFsU3RyaW5nLCBmcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKSwgbGluZU51bWJl
cigpKTsKKyAgICBpZiAoIXNjcmlwdC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgVjhQcm94eSogcHJv
eHkgPSBWOFByb3h5OjpyZXRyaWV2ZShmcmFtZSgpKTsKKyAgICAgICAgQVNTRVJUKHByb3h5KTsK
KyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUgPSBwcm94eS0+cnVuU2NyaXB0KHNj
cmlwdCwgZmFsc2UpOworICAgICAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkgeworICAgICAgICAg
ICAgQVNTRVJUKHZhbHVlLT5Jc0Z1bmN0aW9uKCkpOworCisgICAgICAgICAgICB2ODo6TG9jYWw8
djg6OkZ1bmN0aW9uPiB3cmFwcGVkRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6
Q2FzdCh2YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIENoYW5nZSB0aGUgdG9TdHJpbmcgZnVuY3Rp
b24gb24gdGhlIHdyYXBwZXIgZnVuY3Rpb24gdG8gYXZvaWQgaXQgcmV0dXJuaW5nIHRoZSBzb3Vy
Y2UgZm9yIHRoZSBhY3R1YWwgd3JhcHBlciBmdW5jdGlvbi4gSW5zdGVhZAorICAgICAgICAgICAg
Ly8gaXQgcmV0dXJucyBzb3VyY2UgZm9yIGEgY2xlYW4gd3JhcHBlciBmdW5jdGlvbiB3aXRoIHRo
ZSBldmVudCBhcmd1bWVudCB3cmFwcGluZyB0aGUgZXZlbnQgc291cmNlIGNvZGUuIFRoZSByZWFz
b24gZm9yIHRoaXMKKyAgICAgICAgICAgIC8vIGlzIHRoYXQgc29tZSB3ZWIgc2l0ZXMgdXNlcyB0
b1N0cmluZyBvbiBldmVudCBmdW5jdGlvbnMgYW5kIHRoZSBldmFscyB0aGUgc291cmNlIHJldHVy
bmVkIChzb21lIHRpbWVzIGEgUmVnRXhwIGlzIGFwcGxpZWQgYXMKKyAgICAgICAgICAgIC8vIHdl
bGwpIGZvciBzb21lIG90aGVyIHVzZS4gVGhhdCBmYWlscyBtaXNlcmFibHkgaWYgdGhlIGFjdHVh
bCB3cmFwcGVyIHNvdXJjZSBpcyByZXR1cm5lZC4KKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gdG9TdHJpbmdUZW1wbGF0ZSA9IHY4OjpGdW5jdGlvblRlbXBsYXRl
OjpOZXcoVjhMYXp5RXZlbnRMaXN0ZW5lclRvU3RyaW5nKTsKKyAgICAgICAgICAgIHY4OjpMb2Nh
bDx2ODo6RnVuY3Rpb24+IHRvU3RyaW5nRnVuY3Rpb247CisgICAgICAgICAgICBpZiAoIXRvU3Ry
aW5nVGVtcGxhdGUuSXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHRvU3RyaW5nRnVuY3Rpb24g
PSB0b1N0cmluZ1RlbXBsYXRlLT5HZXRGdW5jdGlvbigpOworICAgICAgICAgICAgaWYgKCF0b1N0
cmluZ0Z1bmN0aW9uLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyB0b1N0cmlu
Z1Jlc3VsdCA9ICJmdW5jdGlvbiAiOworICAgICAgICAgICAgICAgIHRvU3RyaW5nUmVzdWx0LmFw
cGVuZChtX2Z1bmN0aW9uTmFtZSk7CisgICAgICAgICAgICAgICAgdG9TdHJpbmdSZXN1bHQuYXBw
ZW5kKCIoIik7CisgICAgICAgICAgICAgICAgaWYgKG1faXNTVkdFdmVudCkKKyAgICAgICAgICAg
ICAgICAgICAgdG9TdHJpbmdSZXN1bHQuYXBwZW5kKCJldnQiKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nUmVzdWx0LmFwcGVuZCgiZXZlbnQiKTsK
KyAgICAgICAgICAgICAgICB0b1N0cmluZ1Jlc3VsdC5hcHBlbmQoIikge1xuICAiKTsKKyAgICAg
ICAgICAgICAgICB0b1N0cmluZ1Jlc3VsdC5hcHBlbmQobV9jb2RlKTsKKyAgICAgICAgICAgICAg
ICB0b1N0cmluZ1Jlc3VsdC5hcHBlbmQoIlxufSIpOworICAgICAgICAgICAgICAgIHRvU3RyaW5n
RnVuY3Rpb24tPlNldEhpZGRlblZhbHVlKHY4OjpTdHJpbmc6Ok5ldygidG9TdHJpbmdTdHJpbmci
KSwgdjhFeHRlcm5hbFN0cmluZyh0b1N0cmluZ1Jlc3VsdCkpOworICAgICAgICAgICAgICAgIHdy
YXBwZWRGdW5jdGlvbi0+U2V0KHY4OjpTdHJpbmc6Ok5ldygidG9TdHJpbmciKSwgdG9TdHJpbmdG
dW5jdGlvbik7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdyYXBwZWRGdW5jdGlvbi0+
U2V0TmFtZSh2ODo6U3RyaW5nOjpOZXcoZnJvbVdlYkNvcmVTdHJpbmcobV9mdW5jdGlvbk5hbWUp
LCBtX2Z1bmN0aW9uTmFtZS5sZW5ndGgoKSkpOworCisgICAgICAgICAgICBzZXRMaXN0ZW5lck9i
amVjdCh3cmFwcGVkRnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpOZXcobV93cmFwcGVkRnVuY3Rpb24pOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6
eUV2ZW50TGlzdGVuZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5l
ci5oCmluZGV4IGM5ZjZhODQuLmJhNDYwZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5
RXZlbnRMaXN0ZW5lci5oCkBAIC01MCwzMCArNTAsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOExhenlFdmVudExpc3RlbmVyKGZyYW1l
LCBjb2RlLCBmdW5jdGlvbk5hbWUsIGlzU1ZHRXZlbnQpKTsKICAgICAgICAgfQogCi0gICAgICAg
IC8vIEZvciBsYXp5IGV2ZW50IGxpc3RlbmVyLCB0aGUgbGlzdGVuZXIgb2JqZWN0IGlzIHRoZSBz
YW1lIGFzIGl0cyBsaXN0ZW5lcgotICAgICAgICAvLyBmdW5jdGlvbiB3aXRob3V0IGFkZGl0aW9u
YWwgc2NvcGUgY2hhaW5zLgotICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBn
ZXRMaXN0ZW5lck9iamVjdCgpIHsgcmV0dXJuIGdldFdyYXBwZWRMaXN0ZW5lckZ1bmN0aW9uKCk7
IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzTGF6eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVMaXN0ZW5lck9i
amVjdCgpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgVjhMYXp5RXZlbnRMaXN0ZW5lcihGcmFt
ZSosIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wg
aXNTVkdFdmVudCk7Ci0gICAgICAgIHZpcnR1YWwgflY4TGF6eUV2ZW50TGlzdGVuZXIoKTsKIAot
ICAgICAgICB2aXJ0dWFsIGJvb2wgdmlydHVhbGlzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5l
ckZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50LCBFdmVudCopOwogCiAgICAg
ICAgIFN0cmluZyBtX2NvZGU7CiAgICAgICAgIFN0cmluZyBtX2Z1bmN0aW9uTmFtZTsKICAgICAg
ICAgYm9vbCBtX2lzU1ZHRXZlbnQ7Ci0gICAgICAgIGJvb2wgbV9jb21waWxlZDsKLQotICAgICAg
ICAvLyBJZiB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgb24gYSBub24tZG9jdW1lbnQgZG9tIG5vZGUs
IHdlIGNvbXBpbGUgdGhlIGZ1bmN0aW9uIHdpdGggc29tZSBpbXBsaWNpdCBzY29wZSBjaGFpbnMg
YmVmb3JlIGl0LgotICAgICAgICBib29sIG1fd3JhcHBlZEZ1bmN0aW9uQ29tcGlsZWQ7Ci0gICAg
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj4gbV93cmFwcGVkRnVuY3Rpb247Ci0KLSAg
ICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZ2V0V3JhcHBlZExpc3RlbmVyRnVuY3Rpb24o
KTsKLQotICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1
bmN0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50LCBFdmVudCopOwotCi0gICAgICAg
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGdldExpc3RlbmVyRnVuY3Rpb24oKTsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4T2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4T2JqZWN0
RXZlbnRMaXN0ZW5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMDc2NmMu
LjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJWOE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKLQotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiVjhQcm94eS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0YXRpYyB2b2lkIHdlYWtPYmplY3RFdmVudExpc3RlbmVyQ2FsbGJhY2sodjg6OlBl
cnNpc3RlbnQ8djg6OlZhbHVlPiwgdm9pZCogcGFyYW1ldGVyKQotewotICAgIFY4T2JqZWN0RXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIq
PihwYXJhbWV0ZXIpOwotCi0gICAgLy8gUmVtb3ZlIHRoZSB3cmFwcGVyCi0gICAgRnJhbWUqIGZy
YW1lID0gbGlzdGVuZXItPmZyYW1lKCk7Ci0gICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIFY4UHJv
eHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoZnJhbWUpOwotICAgICAgICBpZiAocHJveHkp
Ci0gICAgICAgICAgICBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCktPnJlbW92ZShsaXN0ZW5lcik7
Ci0KLSAgICAgICAgLy8gQmVjYXVzZSB0aGUgbGlzdGVuZXIgaXMgbm8gbG9uZ2VyIGluIHRoZSBs
aXN0LCBpdCBtdXN0IGJlIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBmcmFtZSB0byBhdm9pZCBkYW5n
bGluZyBmcmFtZSBwb2ludGVyCi0gICAgICAgIC8vIGluIHRoZSBkZXN0cnVjdG9yLgotICAgICAg
ICBsaXN0ZW5lci0+ZGlzY29ubmVjdEZyYW1lKCk7Ci0gICAgfQotICAgIGxpc3RlbmVyLT5kaXNw
b3NlTGlzdGVuZXJPYmplY3QoKTsKLX0KLQotLy8gQW4gb2JqZWN0IGV2ZW50IGxpc3RlbmVyIHdy
YXBwZXIgb25seSBob2xkcyBhIHdlYWsgcmVmZXJlbmNlIHRvIHRoZQotLy8gSlMgZnVuY3Rpb24u
IEEgc3Ryb25nIHJlZmVyZW5jZSBjYW4gY3JlYXRlIGEgY3ljbGUuCi0vLwotLy8gVGhlIGxpZmV0
aW1lIG9mIHRoZXNlIG9iamVjdHMgaXMgYm91bmRlZCBieSB0aGUgbGlmZSB0aW1lIG9mIHRoZSBK
UwotLy8gd3JhcHBlciBvZiBYSFIgb3IgTm9kZS4gU28gd2UgY2FuIGNyZWF0ZSBhIGhpZGRlbiBy
ZWZlcmVuY2UgZnJvbQotLy8gdGhlIEpTIHdyYXBwZXIgdG8gdG8gaXRzIEpTIGZ1bmN0aW9uLgot
Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwKQotLy8gICAgICAgICAgWEhSIG9y
IE5vZGUgIDwtLS0tLS0tLS0tICBKU193cmFwcGVyCi0vLyAgICAgICAgICAgICAgIHwgICAgICAg
ICAgICAgKGhpZGRlbikgOiAgXgotLy8gICAgICAgICAgICAgICBWICAgICAgICAgICAgICAgICAg
ICAgIFYgIDogKG1heSBiZSByZWFjaGFibGUgYnkgY2xvc3VyZSkKLS8vICAgICAgICAgICBWOF9s
aXN0ZW5lciAgLS0tLS0tLS0+IEpTX2Z1bmN0aW9uCi0vLyAgICAgICAgICAgICAgICAgICAgICAg
ICAod2VhaykgIDwtLSBtYXkgY3JlYXRlIGEgY3ljbGUgaWYgaXQgaXMgc3Ryb25nCi0vLwotLy8g
VGhlIHBlcnNpc3RlbnQgcmVmZXJlbmNlIGlzIG1hZGUgd2VhayBpbiB0aGUgY29uc3RydWN0b3Ig
b2YKLS8vIFY4T2JqZWN0RXZlbnRMaXN0ZW5lci4KLQotVjhPYmplY3RFdmVudExpc3RlbmVyOjpW
OE9iamVjdEV2ZW50TGlzdGVuZXIoRnJhbWUqIGZyYW1lLCB2ODo6TG9jYWw8djg6Ok9iamVjdD4g
bGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUpCi0gICAgOiBWOEV2ZW50TGlzdGVuZXIoZnJhbWUsIGxp
c3RlbmVyLCBpc0lubGluZSkKLXsKLSAgICBtX2xpc3RlbmVyLk1ha2VXZWFrKHRoaXMsIHdlYWtP
YmplY3RFdmVudExpc3RlbmVyQ2FsbGJhY2spOwotfQotCi1WOE9iamVjdEV2ZW50TGlzdGVuZXI6
On5WOE9iamVjdEV2ZW50TGlzdGVuZXIoKQotewotICAgIGlmIChtX2ZyYW1lKSB7Ci0gICAgICAg
IEFTU0VSVCghbV9saXN0ZW5lci5Jc0VtcHR5KCkpOwotICAgICAgICBWOFByb3h5KiBwcm94eSA9
IFY4UHJveHk6OnJldHJpZXZlKG1fZnJhbWUpOwotICAgICAgICBpZiAocHJveHkpCi0gICAgICAg
ICAgICBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCktPnJlbW92ZSh0aGlzKTsKLSAgICB9Ci0KLSAg
ICBkaXNwb3NlTGlzdGVuZXJPYmplY3QoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIuaCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhPYmplY3RFdmVudExpc3RlbmVyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDNjNWFlMTAuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFY4T2JqZWN0RXZlbnRMaXN0ZW5lcl9oCi0jZGVm
aW5lIFY4T2JqZWN0RXZlbnRMaXN0ZW5lcl9oCi0KLSNpbmNsdWRlICJWOEN1c3RvbUV2ZW50TGlz
dGVuZXIuaCIKLSNpbmNsdWRlIDx2OC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEZyYW1lOwotCi0gICAgLy8gVjhPYmpl
Y3RFdmVudExpc3RlbmVyIGlzIGEgc3BlY2lhbCBsaXN0ZW5lciB3cmFwcGVyIGZvciBvYmplY3Rz
IG5vdCBpbiB0aGUgRE9NLiAgSXQga2VlcHMgdGhlIEpTIGxpc3RlbmVyIGFzIGEgd2VhayBwb2lu
dGVyLgotICAgIGNsYXNzIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBWOEV2ZW50TGlz
dGVuZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhPYmplY3RF
dmVudExpc3RlbmVyPiBjcmVhdGUoRnJhbWUqIGZyYW1lLCB2ODo6TG9jYWw8djg6Ok9iamVjdD4g
bGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVjhPYmplY3RFdmVudExpc3RlbmVyKGZyYW1lLCBsaXN0ZW5lciwgaXNJbmxp
bmUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc09iamVjdExpc3RlbmVy
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgVjhPYmpl
Y3RFdmVudExpc3RlbmVyKEZyYW1lKiwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyLCBi
b29sIGlzSW5saW5lKTsKLSAgICAgICAgdmlydHVhbCB+VjhPYmplY3RFdmVudExpc3RlbmVyKCk7
Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVjhPYmplY3RF
dmVudExpc3RlbmVyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCmluZGV4IDRmYjBmNjguLjJhNmRk
NjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcApAQCAtMjI4LDIyICsyMjgsNiBAQCB2b2lkIFY4
UHJveHk6OmRlc3Ryb3lHbG9iYWwoKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgZGlzY29ubmVj
dEV2ZW50TGlzdGVuZXJzSW5MaXN0KFY4RXZlbnRMaXN0ZW5lckxpc3QmIGxpc3QpCi17Ci0gICAg
VjhFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7Ci0gICAgd2hp
bGUgKGl0ICE9IGxpc3QuZW5kKCkpIHsKLSAgICAgICAgKCppdCktPmRpc2Nvbm5lY3RGcmFtZSgp
OwotICAgICAgICArK2l0OwotICAgIH0KLSAgICBsaXN0LmNsZWFyKCk7Ci19Ci0KLXZvaWQgVjhQ
cm94eTo6ZGlzY29ubmVjdEV2ZW50TGlzdGVuZXJzKCkKLXsKLSAgICBkaXNjb25uZWN0RXZlbnRM
aXN0ZW5lcnNJbkxpc3QobV9ldmVudExpc3RlbmVycyk7Ci0gICAgZGlzY29ubmVjdEV2ZW50TGlz
dGVuZXJzSW5MaXN0KG1fb2JqZWN0TGlzdGVuZXJzKTsKLX0KLQogdjg6OkhhbmRsZTx2ODo6U2Ny
aXB0PiBWOFByb3h5Ojpjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwg
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJhc2VMaW5lKQogewogICAgIGNvbnN0IHVpbnQx
Nl90KiBmaWxlTmFtZVN0cmluZyA9IGZyb21XZWJDb3JlU3RyaW5nKGZpbGVOYW1lKTsKQEAgLTU2
Niw3ICs1NTAsNiBAQCBWOFByb3h5KiBWOFByb3h5OjpyZXRyaWV2ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQogCiB2b2lkIFY4UHJveHk6OmRpc2Nvbm5lY3RGcmFtZSgpCiB7Ci0g
ICAgZGlzY29ubmVjdEV2ZW50TGlzdGVuZXJzKCk7CiB9CiAKIGJvb2wgVjhQcm94eTo6aXNFbmFi
bGVkKCkKQEAgLTcxMiw4ICs2OTUsNiBAQCB2b2lkIFY4UHJveHk6OmNsZWFyRm9yQ2xvc2UoKQog
CiB2b2lkIFY4UHJveHk6OmNsZWFyRm9yTmF2aWdhdGlvbigpCiB7Ci0gICAgZGlzY29ubmVjdEV2
ZW50TGlzdGVuZXJzKCk7Ci0KICAgICBpZiAoIWNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKICAgICAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZTsKICAgICAgICAgY2xlYXJEb2N1bWVudFdyYXBwZXIo
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFByb3h5LmgKaW5kZXggOGNhOTUyMC4uZjE0YTkwMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFByb3h5LmgKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIiAv
LyBmb3IgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4KICNpbmNsdWRlICJTaGFyZWRQZXJzaXN0ZW50
LmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVjhFdmVudExpc3RlbmVy
TGlzdC5oIgogI2luY2x1ZGUgIlY4R0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVjhJbmRleC5o
IgogI2luY2x1ZGUgPHY4Lmg+CkBAIC0xNjAsOSArMTU5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIGJvb2wgaXNFbmFibGVkKCk7CiAKLSAgICAgICAgVjhFdmVudExpc3RlbmVy
TGlzdCogZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiAmbV9ldmVudExpc3RlbmVyczsgfQotICAg
ICAgICBWOEV2ZW50TGlzdGVuZXJMaXN0KiBvYmplY3RMaXN0ZW5lcnMoKSB7IHJldHVybiAmbV9v
YmplY3RMaXN0ZW5lcnM7IH0KLQogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIHN0YXRpYyB2b2lk
IHNldFNWR0NvbnRleHQodm9pZCosIFNWR0VsZW1lbnQqKTsKICAgICAgICAgc3RhdGljIFNWR0Vs
ZW1lbnQqIHN2Z0NvbnRleHQodm9pZCopOwpAQCAtMzM0LDcgKzMzMCw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGtDb250ZXh0RGVidWdEYXRhVHlw
ZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGtDb250ZXh0RGVidWdEYXRhVmFsdWU7CiAK
LSAgICAgICAgdm9pZCBkaXNjb25uZWN0RXZlbnRMaXN0ZW5lcnMoKTsKICAgICAgICAgdm9pZCBz
ZXRTZWN1cml0eVRva2VuKCk7CiAgICAgICAgIHZvaWQgY2xlYXJEb2N1bWVudFdyYXBwZXIoKTsK
IApAQCAtNDAwLDE0ICszOTUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgaW50
IG1faGFuZGxlckxpbmVOdW1iZXI7CiAKLSAgICAgICAgLy8gQSBsaXN0IG9mIGV2ZW50IGxpc3Rl
bmVycyBjcmVhdGVkIGZvciB0aGlzIGZyYW1lLAotICAgICAgICAvLyB0aGUgbGlzdCBnZXRzIGNs
ZWFyZWQgd2hlbiByZW1vdmluZyBhbGwgdGltZW91dHMuCi0gICAgICAgIFY4RXZlbnRMaXN0ZW5l
ckxpc3QgbV9ldmVudExpc3RlbmVyczsKLQotICAgICAgICAvLyBBIGxpc3Qgb2YgZXZlbnQgbGlz
dGVuZXJzIGNyZWF0ZSBmb3IgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IGZvciB0aGlzIGZyYW1lLAot
ICAgICAgICAvLyB0aGUgbGlzdCBnZXRzIGNsZWFyZWQgd2hlbiByZW1vdmluZyBhbGwgdGltZW91
dHMuCi0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QgbV9vYmplY3RMaXN0ZW5lcnM7Ci0KICAg
ICAgICAgLy8gVHJ1ZSBmb3IgPGEgaHJlZj0iamF2YXNjcmlwdDpmb28oKSI+IGFuZCBmYWxzZSBm
b3IgPHNjcmlwdD5mb28oKTwvc2NyaXB0Pi4KICAgICAgICAgLy8gT25seSB2YWxpZCBkdXJpbmcg
ZXhlY3V0aW9uLgogICAgICAgICBib29sIG1faW5saW5lQ29kZTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDI0Mzc0
NTguLjZmYTc4NjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250
ZXh0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNv
bnRleHRFdmVudExpc3RlbmVyLmNwcApAQCAtNDYsMTMgKzQ2LDYgQEAgVjhXb3JrZXJDb250ZXh0
RXZlbnRMaXN0ZW5lcjo6VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcihXb3JrZXJDb250ZXh0
RXhlY3V0aW8KIHsKIH0KIAotVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6flY4V29ya2Vy
Q29udGV4dEV2ZW50TGlzdGVuZXIoKQotewotICAgIGlmIChtX3Byb3h5KQotICAgICAgICBtX3By
b3h5LT5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMpOwotICAgIGRpc3Bvc2VMaXN0ZW5lck9iamVj
dCgpOwotfQotCiB2b2lkIFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gSXMgdGhl
IEV2ZW50TGlzdGVuZXIgZGlzY29ubmVjdGVkPwpAQCAtOTYsNiArODksNyBAQCBib29sIFY4V29y
a2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OnJlcG9ydEVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgY29uc3QgU3RyaQogICAgIC8vIEVudGVyIHRoZSBWOCBjb250ZXh0IGluIHdoaWNoIHRvIHBl
cmZvcm0gdGhlIGV2ZW50IGhhbmRsaW5nLgogICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShj
b250ZXh0KTsKIAorICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciA9IGdldExpc3Rl
bmVyT2JqZWN0KCk7CiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmV0dXJuVmFsdWU7CiAgICAg
ewogICAgICAgICAvLyBDYXRjaCBleGNlcHRpb25zIHRocm93biBpbiBjYWxsaW5nIHRoZSBmdW5j
dGlvbiBzbyB0aGV5IGRvIG5vdCBwcm9wYWdhdGUgdG8gamF2YXNjcmlwdCBjb2RlIHRoYXQgY2F1
c2VkIHRoZSBldmVudCB0byBmaXJlLgpAQCAtMTAzLDggKzk3LDggQEAgYm9vbCBWOFdvcmtlckNv
bnRleHRFdmVudExpc3RlbmVyOjpyZXBvcnRFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmkKICAgICAgICAgdHJ5Q2F0Y2guU2V0VmVyYm9zZSh0cnVlKTsKIAogICAgICAgICAv
LyBDYWxsIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgaWYgKCFtX2xpc3RlbmVyLklzRW1wdHkoKSAm
JiBtX2xpc3RlbmVyLT5Jc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
RnVuY3Rpb24+IGNhbGxGdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpOZXcodjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2xpc3RlbmVyKSk7CisgICAgICAgIGlm
ICghbGlzdGVuZXIuSXNFbXB0eSgpICYmIGxpc3RlbmVyLT5Jc0Z1bmN0aW9uKCkpIHsKKyAgICAg
ICAgICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGNhbGxGdW5jdGlvbiA9IHY4OjpMb2NhbDx2
ODo6RnVuY3Rpb24+OjpDYXN0KGxpc3RlbmVyKTsKICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiB0aGlzVmFsdWUgPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpLT5HbG9iYWwoKTsK
IAogICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmFtZXRlcnNbM10gPSB7IHY4
U3RyaW5nKG1lc3NhZ2UpLCB2OFN0cmluZyh1cmwpLCB2ODo6SW50ZWdlcjo6TmV3KGxpbmVOdW1i
ZXIpIH07CkBAIC0xNDEsOCArMTM1LDEwIEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4V29ya2Vy
Q29udGV4dEV2ZW50TGlzdGVuZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKHY4OjpIYW5kCiAKIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpnZXRSZWNl
aXZlck9iamVjdChFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKCFtX2xpc3RlbmVyLklzRW1wdHko
KSAmJiAhbV9saXN0ZW5lci0+SXNGdW5jdGlvbigpKQotICAgICAgICByZXR1cm4gdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+OjpOZXcobV9saXN0ZW5lcik7CisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IGxpc3RlbmVyID0gZ2V0TGlzdGVuZXJPYmplY3QoKTsKKworICAgIGlmICghbGlzdGVuZXIuSXNF
bXB0eSgpICYmICFsaXN0ZW5lci0+SXNGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gbGlzdGVu
ZXI7CiAKICAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnQtPmN1cnJlbnRUYXJnZXQoKTsK
ICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QodGFyZ2V0KTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmgKaW5kZXggNDYw
OTUzMy4uZDQ0ODYwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNv
bnRleHRFdmVudExpc3RlbmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNv
bnRleHRFdmVudExpc3RlbmVyLmgKQEAgLTUwLDcgKzUwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB9CiAgICAgICAgIFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIoV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5Kiwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyLCBi
b29sIGlzSW5saW5lKTsKIAotICAgICAgICB2aXJ0dWFsIH5WOFdvcmtlckNvbnRleHRFdmVudExp
c3RlbmVyKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgRXZlbnQqKTsKICAgICAgICAgdmlydHVhbCBib29sIHJlcG9ydEVycm9yKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyKTsK
ICAgICAgICAgdmlydHVhbCBib29sIGRpc2Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuICFtX3By
b3h5OyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dE9i
amVjdEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRl
eHRPYmplY3RFdmVudExpc3RlbmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Y2U1NjU2My4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4
dE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSAiVjhX
b3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgotCi0jaW5jbHVkZSAiV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHZv
aWQgd2Vha09iamVjdEV2ZW50TGlzdGVuZXJDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFs
dWU+LCB2b2lkKiBwYXJhbWV0ZXIpCi17Ci0gICAgVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOFdvcmtlckNvbnRleHRPYmplY3RFdmVu
dExpc3RlbmVyKj4ocGFyYW1ldGVyKTsKLQotICAgIC8vIFJlbW92ZSB0aGUgd3JhcHBlcgotICAg
IGxpc3RlbmVyLT5wcm94eSgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGxpc3RlbmVyKTsKLQotICAg
IGxpc3RlbmVyLT5kaXNwb3NlTGlzdGVuZXJPYmplY3QoKTsKLX0KLQotVjhXb3JrZXJDb250ZXh0
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6VjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lcihX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5LCB2ODo6TG9jYWw8djg6Ok9iamVjdD4g
bGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUpCi0gICAgOiBWOFdvcmtlckNvbnRleHRFdmVudExpc3Rl
bmVyKHByb3h5LCBsaXN0ZW5lciwgaXNJbmxpbmUpCi17Ci0gICAgbV9saXN0ZW5lci5NYWtlV2Vh
ayh0aGlzLCB3ZWFrT2JqZWN0RXZlbnRMaXN0ZW5lckNhbGxiYWNrKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gV09SS0VSUwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ3MTYzNy4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFY4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlz
dGVuZXJfaAotI2RlZmluZSBWOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyX2gKLQot
I2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSAiVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0
ZW5lci5oIgotI2luY2x1ZGUgPHY4Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5OwotCi0gICAgY2xhc3MgVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lciA6IHB1
YmxpYyBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFY4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXI+IGNy
ZWF0ZShXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5LCB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lcihwcm94
eSwgbGlzdGVuZXIsIGlzSW5saW5lKSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFY4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIoV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5Kiwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyLCBib29sIGlzSW5saW5l
KTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBXT1JLRVJT
Ci0KLSNlbmRpZiAvLyBWOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyX2gKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcApp
bmRleCAxNDExMDk3Li42OGQ5MzhlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVk
ZSAiVjhJbmRleC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFdvcmtlckNv
bnRleHRFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZl
bnRMaXN0ZW5lci5oIgogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKICNpbmNsdWRlICJXZWJTb2Nr
ZXQuaCIKICNlbmRpZgpAQCAtODIsMTQgKzgxLDYgQEAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5Ojp+V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KCkKIAogdm9pZCBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHk6OmRpc3Bvc2UoKQogewotICAgIC8vIERpc2Nvbm5lY3QgYWxsIGV2ZW50
IGxpc3RlbmVycy4KLSAgICBpZiAobV9saXN0ZW5lcnMuZ2V0KCkpIHsKLSAgICAgICAgZm9yIChW
OEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvciBpdGVyYXRvcihtX2xpc3RlbmVycy0+YmVnaW4o
KSk7IGl0ZXJhdG9yICE9IG1fbGlzdGVuZXJzLT5lbmQoKTsgKytpdGVyYXRvcikKLSAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcio+KCppdGVyYXRvcikt
PmRpc2Nvbm5lY3QoKTsKLQotICAgICAgICBtX2xpc3RlbmVycy0+Y2xlYXIoKTsKLSAgICB9Ci0K
ICAgICAvLyBEZXRhY2ggYWxsIGV2ZW50cyBmcm9tIHRoZWlyIEpTIHdyYXBwZXJzLgogICAgIGZv
ciAoc2l6ZV90IGV2ZW50SW5kZXggPSAwOyBldmVudEluZGV4IDwgbV9ldmVudHMuc2l6ZSgpOyAr
K2V2ZW50SW5kZXgpIHsKICAgICAgICAgRXZlbnQqIGV2ZW50ID0gbV9ldmVudHNbZXZlbnRJbmRl
eF07CkBAIC0xNjksOCArMTYwLDYgQEAgdm9pZCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OmluaXRDb250ZXh0SWZOZWVkZWQoKQogICAgIC8vIEluc2VydCB0aGUgb2JqZWN0IGluc3RhbmNl
IGFzIHRoZSBwcm90b3R5cGUgb2YgdGhlIHNoYWRvdyBvYmplY3QuCiAgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBnbG9iYWxPYmplY3QgPSBtX2NvbnRleHQtPkdsb2JhbCgpOwogICAgIGdsb2Jh
bE9iamVjdC0+U2V0KGltcGxpY2l0UHJvdG9TdHJpbmcsIGpzV29ya2VyQ29udGV4dCk7Ci0KLSAg
ICBtX2xpc3RlbmVycy5zZXQobmV3IFY4RXZlbnRMaXN0ZW5lckxpc3QoKSk7CiB9CiAKIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBsKQpAQCAt
NDA1LDM5ICszOTQsOSBAQCB2ODo6TG9jYWw8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHk6OnJ1blNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTY3JpcAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLVBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHk6OmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXJIZWxwZXIodjg6OkxvY2FsPHY4OjpW
YWx1ZT4gb2JqZWN0LCBib29sIGlzSW5saW5lLCBib29sIGZpbmRPbmx5LCBib29sIGNyZWF0ZU9i
amVjdEV2ZW50TGlzdGVuZXIpCi17Ci0gICAgaWYgKCFvYmplY3QtPklzT2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgVjhFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IG1fbGlzdGVu
ZXJzLT5maW5kKG9iamVjdC0+VG9PYmplY3QoKSwgaXNJbmxpbmUpOwotICAgIGlmIChmaW5kT25s
eSkKLSAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IG9uZSwg
YW5kIGFkZCB0byBjYWNoZS4KLSAgICBSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBuZXdMaXN0ZW5l
cjsKLSAgICBpZiAoY3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcikKLSAgICAgICAgbmV3TGlzdGVu
ZXIgPSBWOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyOjpjcmVhdGUodGhpcywgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCksIGlzSW5saW5lKTsKLSAgICBlbHNlCi0g
ICAgICAgIG5ld0xpc3RlbmVyID0gVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KHRoaXMsIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdChvYmplY3QpLCBpc0lubGluZSk7Ci0g
ICAgbV9saXN0ZW5lcnMtPmFkZChuZXdMaXN0ZW5lci5nZXQoKSk7Ci0KLSAgICByZXR1cm4gbmV3
TGlzdGVuZXIucmVsZWFzZSgpOwotfQotCiBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVyKHY4OjpM
b2NhbDx2ODo6VmFsdWU+IG9iamVjdCwgYm9vbCBpc0lubGluZSwgYm9vbCBmaW5kT25seSkKIHsK
LSAgICByZXR1cm4gZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lckhlbHBlcihvYmplY3QsIGlzSW5s
aW5lLCBmaW5kT25seSwgZmFsc2UpOwotfQotCi1QYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4g
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpmaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3Rl
bmVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCwgYm9vbCBpc0lubGluZSwgYm9vbCBmaW5k
T25seSkKLXsKLSAgICByZXR1cm4gZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lckhlbHBlcihvYmpl
Y3QsIGlzSW5saW5lLCBmaW5kT25seSwgdHJ1ZSk7Ci19Ci0KLXZvaWQgV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5OjpyZW1vdmVFdmVudExpc3RlbmVyKFY4RXZlbnRMaXN0ZW5lciogbGlzdGVu
ZXIpCi17Ci0gICAgbV9saXN0ZW5lcnMtPnJlbW92ZShsaXN0ZW5lcik7CisgICAgcmV0dXJuIGZp
bmRPbmx5ID8gVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZFdyYXBwZXIob2JqZWN0LCBpc0lubGlu
ZSkgOiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4V29ya2VyQ29u
dGV4dEV2ZW50TGlzdGVuZXI+KHRoaXMsIG9iamVjdCwgaXNJbmxpbmUpOwogfQogCiB2b2lkIFdv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6dHJhY2tFdmVudChFdmVudCogZXZlbnQpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5o
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAppbmRl
eCA3NTAyNGRmLi4xMWYxNWQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5LmgKQEAgLTY0LDEyICs2NCw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KFdvcmtlckNvbnRleHQq
KTsKICAgICAgICAgfldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSgpOwogCi0gICAgICAgIHZv
aWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihWOEV2ZW50TGlzdGVuZXIqKTsKLQogICAgICAgICAvLyBG
aW5kcy9jcmVhdGVzIGV2ZW50IGxpc3RlbmVyIHdyYXBwZXJzLgogICAgICAgICBQYXNzUmVmUHRy
PFY4RXZlbnRMaXN0ZW5lcj4gZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6
OlZhbHVlPiBsaXN0ZW5lciwgYm9vbCBpc0lubGluZSwgYm9vbCBmaW5kT25seSk7Ci0gICAgICAg
IFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3Rl
bmVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCwgYm9vbCBpc0lubGluZSwgYm9vbCBmaW5k
T25seSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVF
dmVudExpc3RlbmVySGVscGVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCwgYm9vbCBpc0lu
bGluZSwgYm9vbCBmaW5kT25seSwgYm9vbCBjcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKTsKIAog
ICAgICAgICAvLyBUcmFjayB0aGUgZXZlbnQgc28gdGhhdCB3ZSBjYW4gZGV0YWNoIGl0IGZyb20g
dGhlIEpTIHdyYXBwZXIgd2hlbiBhIHdvcmtlcgogICAgICAgICAvLyB0ZXJtaW5hdGVzLiBUaGlz
IGlzIG5lZWRlZCBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkaXNwb3NlIHRoZXNlCkBA
IC0xMTUsNyArMTExLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6Q29udGV4dD4gbV9jb250ZXh0OwogICAgICAgICBpbnQgbV9yZWN1cnNpb247CiAK
LSAgICAgICAgT3duUHRyPFY4RXZlbnRMaXN0ZW5lckxpc3Q+IG1fbGlzdGVuZXJzOwogICAgICAg
ICBWZWN0b3I8RXZlbnQqPiBtX2V2ZW50czsKICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFic3RyYWN0V29ya2VyQ3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4QWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwCmluZGV4IGNlNzU5
ZWIuLjAyNDA4OTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QWJz
dHJhY3RXb3JrZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
QWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwCkBAIC0zOCw3NSArMzgsMTggQEAKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiVjhDdXN0b21CaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBnZXRFdmVudExpc3RlbmVyKEFic3RyYWN0V29y
a2VyKiB3b3JrZXIsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRl
LCBib29sIGZpbmRPbmx5KQotewotICAgIGlmICh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+aXNXb3JrZXJDb250ZXh0KCkpIHsKLSAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5KiB3b3JrZXJDb250ZXh0UHJveHkgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OnJldHJpZXZlKCk7Ci0gICAgICAgIEFTU0VSVCh3b3JrZXJDb250ZXh0UHJveHkpOwotICAgICAg
ICByZXR1cm4gd29ya2VyQ29udGV4dFByb3h5LT5maW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3Rl
bmVyKHZhbHVlLCBpc0F0dHJpYnV0ZSwgZmluZE9ubHkpOwotICAgIH0KLQotICAgIFY4UHJveHkq
IHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUod29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOwotICAgIGlmIChwcm94eSkgewotICAgICAgICBWOEV2ZW50TGlzdGVuZXJMaXN0KiBsaXN0
ID0gcHJveHktPm9iamVjdExpc3RlbmVycygpOwotICAgICAgICByZXR1cm4gZmluZE9ubHkgPyBs
aXN0LT5maW5kV3JhcHBlcih2YWx1ZSwgaXNBdHRyaWJ1dGUpIDogbGlzdC0+ZmluZE9yQ3JlYXRl
V3JhcHBlcjxWOE9iamVjdEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwgaXNB
dHRyaWJ1dGUpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1BQ0NFU1NPUl9HRVRURVIo
QWJzdHJhY3RXb3JrZXJPbmVycm9yKQotewotICAgIElOQ19TVEFUUyhMIkRPTS5BYnN0cmFjdFdv
cmtlci5vbmVycm9yLl9nZXQiKTsKLSAgICBBYnN0cmFjdFdvcmtlciogd29ya2VyID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8QWJzdHJhY3RXb3JrZXI+KFY4Q2xhc3NJbmRl
eDo6QUJTVFJBQ1RXT1JLRVIsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh3b3JrZXItPm9uZXJy
b3IoKSkgewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGlj
X2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4od29ya2VyLT5vbmVycm9yKCkpOwotICAgICAg
ICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5l
ck9iamVjdCgpOwotICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVSKEFic3RyYWN0V29ya2VyT25l
cnJvcikKLXsKLSAgICBJTkNfU1RBVFMoTCJET00uQWJzdHJhY3RXb3JrZXIub25lcnJvci5fc2V0
Iik7Ci0gICAgQWJzdHJhY3RXb3JrZXIqIHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PEFic3RyYWN0V29ya2VyPihWOENsYXNzSW5kZXg6OkFCU1RSQUNUV09SS0VS
LCBpbmZvLkhvbGRlcigpKTsKLSAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIG9sZExpc3RlbmVy
ID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4od29ya2VyLT5vbmVycm9yKCkp
OwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKG9sZExpc3RlbmVyKSB7
Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2xkVjhMaXN0ZW5lciA9IG9sZExp
c3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVw
ZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvbGRWOExpc3RlbmVyLCBWOEN1c3RvbTo6a0Fic3RyYWN0
V29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2xlYXIg
dGhlIGxpc3RlbmVyLgotICAgICAgICB3b3JrZXItPnNldE9uZXJyb3IoMCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0
ZW5lcih3b3JrZXIsIHZhbHVlLCB0cnVlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikg
ewotICAgICAgICAgICAgaWYgKG9sZExpc3RlbmVyKSB7Ci0gICAgICAgICAgICAgICAgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IG9sZFY4TGlzdGVuZXIgPSBvbGRMaXN0ZW5lci0+Z2V0TGlzdGVuZXJP
YmplY3QoKTsKLSAgICAgICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9s
ZGVyKCksIG9sZFY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprQWJzdHJhY3RXb3JrZXJSZXF1ZXN0Q2Fj
aGVJbmRleCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdvcmtlci0+c2V0T25lcnJv
cihsaXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9s
ZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a0Fic3RyYWN0V29ya2VyUmVxdWVzdENhY2hlSW5kZXgp
OwotICAgICAgICB9Ci0gICAgfQotfQotCiBDQUxMQkFDS19GVU5DX0RFQ0woQWJzdHJhY3RXb3Jr
ZXJBZGRFdmVudExpc3RlbmVyKQogewogICAgIElOQ19TVEFUUyhMIkRPTS5BYnN0cmFjdFdvcmtl
ci5hZGRFdmVudExpc3RlbmVyKCkiKTsKICAgICBBYnN0cmFjdFdvcmtlciogd29ya2VyID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8QWJzdHJhY3RXb3JrZXI+KFY4Q2xhc3NJ
bmRleDo6QUJTVFJBQ1RXT1JLRVIsIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIGFyZ3NbMV0sIGZh
bHNlLCBmYWxzZSk7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01X
cmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKHdvcmtlciwgYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVy
RmluZE9yQ3JlYXRlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5cGUg
PSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFy
Z3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwpAQCAtMTIyLDcgKzY1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19E
RUNMKEFic3RyYWN0V29ya2VyUmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICBJTkNfU1RBVFMoTCJE
T00uQWJzdHJhY3RXb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgQWJzdHJhY3RX
b3JrZXIqIHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEFic3Ry
YWN0V29ya2VyPihWOENsYXNzSW5kZXg6OkFCU1RSQUNUV09SS0VSLCBhcmdzLkhvbGRlcigpKTsK
IAotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIo
d29ya2VyLCBhcmdzWzFdLCBmYWxzZSwgdHJ1ZSk7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKHdvcmtlciwgYXJnc1sx
XSwgZmFsc2UsIExpc3RlbmVyRmluZE9ubHkpOwogICAgIGlmIChsaXN0ZW5lcikgewogICAgICAg
ICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICAgICAgYm9vbCB1
c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCmluZGV4IDI4MTQxMjEuLjcwZWM1YmEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCkBAIC0xNDAsNiAr
MTQwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBr
Tm90aWZpY2F0aW9uSW50ZXJuYWxGaWVsZENvdW50ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxG
aWVsZENvdW50ICsgMTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBrU1ZHRWxlbWVudEluc3RhbmNlRXZlbnRMaXN0ZW5lckNhY2hlSW5kZXggPSBr
RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOworICAgICAgICBzdGF0aWMgY29u
c3QgaW50IGtTVkdFbGVtZW50SW5zdGFuY2VJbnRlcm5hbEZpZWxkQ291bnQgPSBrRGVmYXVsdFdy
YXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxOworI2VuZGlmCisKICAgICAgICAgc3RhdGljIGNv
bnN0IGludCBrRE9NV2luZG93Q29uc29sZUluZGV4ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxG
aWVsZENvdW50ICsgMDsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRE9NV2luZG93SGlzdG9y
eUluZGV4ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMTsKICAgICAgICAg
c3RhdGljIGNvbnN0IGludCBrRE9NV2luZG93TG9jYXRpb25iYXJJbmRleCA9IGtEZWZhdWx0V3Jh
cHBlckludGVybmFsRmllbGRDb3VudCArIDI7CkBAIC0xNTMsNyArMTU4LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtET01XaW5kb3dUb29sYmFySW5k
ZXggPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxMDsKICAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBrRE9NV2luZG93TG9jYXRpb25JbmRleCA9IGtEZWZhdWx0V3JhcHBlcklu
dGVybmFsRmllbGRDb3VudCArIDExOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtET01XaW5k
b3dET01TZWxlY3Rpb25JbmRleCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCAr
IDEyOwotICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtET01XaW5kb3dJbnRlcm5hbEZpZWxkQ291
bnQgPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxMzsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBrRE9NV2luZG93RXZlbnRMaXN0ZW5lckNhY2hlSW5kZXggPSBrRGVmYXVs
dFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxMzsKKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBrRE9NV2luZG93SW50ZXJuYWxGaWVsZENvdW50ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxG
aWVsZENvdW50ICsgMTQ7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrU3R5bGVTaGVldE93
bmVyTm9kZUluZGV4ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKICAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBrU3R5bGVTaGVldEludGVybmFsRmllbGRDb3VudCA9IGtE
ZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDE7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudExpc3RlbmVyLmNwcAppbmRleCBiMTFjNDk2
Li42YTRlZGUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bUV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tRXZlbnRMaXN0ZW5lci5jcHAKQEAgLTM4LDM0ICszOCwyMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBWOEV2ZW50TGlzdGVuZXI6OlY4RXZlbnRMaXN0ZW5lcihGcmFtZSogZnJhbWUsIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBpc0F0dHJpYnV0ZSkKICAgICA6IFY4QWJz
dHJhY3RFdmVudExpc3RlbmVyKGZyYW1lLCBpc0F0dHJpYnV0ZSkKIHsKLSAgICBtX2xpc3RlbmVy
ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhsaXN0ZW5lcik7Ci0jaWZuZGVmIE5E
RUJVRwotICAgIFY4R0NDb250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZShFVkVOVF9MSVNU
RU5FUiwgdGhpcywgbV9saXN0ZW5lcik7Ci0jZW5kaWYKLX0KLQotVjhFdmVudExpc3RlbmVyOjp+
VjhFdmVudExpc3RlbmVyKCkKLXsKLSAgICBpZiAobV9mcmFtZSkgewotICAgICAgICBWOFByb3h5
KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG1fZnJhbWUpOwotICAgICAgICBpZiAocHJveHkp
Ci0gICAgICAgICAgICBwcm94eS0+ZXZlbnRMaXN0ZW5lcnMoKS0+cmVtb3ZlKHRoaXMpOwotICAg
IH0KLQotICAgIGRpc3Bvc2VMaXN0ZW5lck9iamVjdCgpOworICAgIHNldExpc3RlbmVyT2JqZWN0
KGxpc3RlbmVyKTsKIH0KIAogdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhFdmVudExpc3RlbmVy
OjpnZXRMaXN0ZW5lckZ1bmN0aW9uKCkKIHsKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlz
dGVuZXIgPSBnZXRMaXN0ZW5lck9iamVjdCgpOworCiAgICAgLy8gSGFzIHRoZSBsaXN0ZW5lciBi
ZWVuIGRpc3Bvc2VkPwotICAgIGlmIChtX2xpc3RlbmVyLklzRW1wdHkoKSkKKyAgICBpZiAobGlz
dGVuZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4o
KTsKIAotICAgIGlmIChtX2xpc3RlbmVyLT5Jc0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiB2
ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6TmV3KHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46
OkNhc3QobV9saXN0ZW5lcikpOworICAgIGlmIChsaXN0ZW5lci0+SXNGdW5jdGlvbigpKQorICAg
ICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobGlzdGVuZXIpOwogCi0g
ICAgaWYgKG1fbGlzdGVuZXItPklzT2JqZWN0KCkpIHsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4gcHJvcGVydHkgPSBtX2xpc3RlbmVyLT5HZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJo
YW5kbGVFdmVudCIpKTsKKyAgICBpZiAobGlzdGVuZXItPklzT2JqZWN0KCkpIHsKKyAgICAgICAg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gcHJvcGVydHkgPSBsaXN0ZW5lci0+R2V0KHY4OjpTdHJpbmc6
Ok5ld1N5bWJvbCgiaGFuZGxlRXZlbnQiKSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eS0+SXNGdW5j
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0
KHByb3BlcnR5KTsKICAgICB9CkBAIC04Miw3ICs3MCw3IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IFY4RXZlbnRMaXN0ZW5lcjo6Y2FsbExpc3RlbmVyRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFs
dWU+CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcGFyYW1ldGVyc1sxXSA9IHsganNFdmVu
dCB9OwogCi0gICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShtX2ZyYW1lKTsK
KyAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGZyYW1lKCkpOwogICAgIGlm
ICghcHJveHkpCiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OlZhbHVlPigpOwogICAgIHJl
dHVybiBwcm94eS0+Y2FsbEZ1bmN0aW9uKGhhbmRsZXJGdW5jdGlvbiwgcmVjZWl2ZXIsIDEsIHBh
cmFtZXRlcnMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0
b21FdmVudExpc3RlbmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2
ZW50TGlzdGVuZXIuaAppbmRleCA5M2FkOGZiLi4zZjk3OTBjIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50TGlzdGVuZXIuaAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50TGlzdGVuZXIuaApAQCAtNDksMTggKzQ5
LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVjhFdmVudExpc3RlbmVyKGZyYW1lLCBsaXN0ZW5lciwgaXNBdHRyaWJ1dGUpKTsKICAgICAg
ICAgfQogCi0gICAgICAgIC8vIERldGFjaCB0aGUgbGlzdGVuZXIgZnJvbSBpdHMgb3duZXIgZnJh
bWUuCi0gICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCkgeyBtX2ZyYW1lID0gMDsgfQotCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBWOEV2ZW50TGlzdGVuZXIoRnJhbWUqLCB2ODo6TG9jYWw8
djg6Ok9iamVjdD4gbGlzdGVuZXIsIGJvb2wgaXNBdHRyaWJ1dGUpOwotICAgICAgICB2aXJ0dWFs
IH5WOEV2ZW50TGlzdGVuZXIoKTsKKwogICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBn
ZXRMaXN0ZW5lckZ1bmN0aW9uKCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqc0V2ZW50LCBFdmVudCopOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdmlydHVhbGlzQXR0
cmlidXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0F0dHJpYnV0ZTsgfQotICAgIH07CisgICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAKaW5kZXggNjNm
YzY5OC4uMTM0ZGU5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhE
T01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCkBAIC0zNyw3NiArMzcsMTkgQEAK
ICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNp
bmNsdWRlICJWOERvY3VtZW50LmgiCi0jaW5jbHVkZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIGNvbnN0IGJvb2wga0ZpbmRPbmx5ID0gdHJ1ZTsKLXN0YXRpYyBjb25zdCBib29s
IGtGaW5kT3JDcmVhdGUgPSBmYWxzZTsKLQotc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gYXJndW1lbnRUb0V2ZW50TGlzdGVuZXIoRE9NQXBwbGljYXRpb25DYWNoZSogYXBwY2FjaGUs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGZpbmRPbmx5KQotewotICAgIFY4UHJv
eHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoYXBwY2FjaGUtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7Ci0gICAgaWYgKHByb3h5KQotICAgICAgICByZXR1cm4gZmluZE9ubHkgPyBwcm94
eS0+b2JqZWN0TGlzdGVuZXJzKCktPmZpbmRXcmFwcGVyKHZhbHVlLCBmYWxzZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIDogcHJveHktPm9iamVjdExpc3RlbmVycygpLT5maW5kT3JDcmVhdGVX
cmFwcGVyPFY4T2JqZWN0RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBmYWxz
ZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZXZl
bnRMaXN0ZW5lclRvVjhPYmplY3QoRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpCi17Ci0gICAgcmV0
dXJuIChzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPihsaXN0ZW5lcikpLT5nZXRM
aXN0ZW5lck9iamVjdCgpOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyB0b0V2ZW50SUQodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IHZhbHVlKQotewotICAgIFN0cmluZyBrZXkgPSB0b1dlYkNvcmVT
dHJpbmcodmFsdWUpOwotICAgIEFTU0VSVChrZXkuc3RhcnRzV2l0aCgib24iKSk7Ci0gICAgcmV0
dXJuIGtleS5zdWJzdHJpbmcoMik7Ci19Ci0KLS8vIEhhbmRsZXMgYXBwY2FjaGUub25mb29ldmVu
dCBhdHRyaWJ1dGUgZ2V0dGluZwotQUNDRVNTT1JfR0VUVEVSKERPTUFwcGxpY2F0aW9uQ2FjaGVF
dmVudEhhbmRsZXIpCi17Ci0gICAgSU5DX1NUQVRTKCJET01BcHBsaWNhdGlvbkNhY2hlLm9uZXZl
bnRfZ2V0dGVyIik7Ci0gICAgRE9NQXBwbGljYXRpb25DYWNoZSogYXBwY2FjaGUgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01BcHBsaWNhdGlvbkNhY2hlPihWOENsYXNz
SW5kZXg6OkRPTUFQUExJQ0FUSU9OQ0FDSEUsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmIChFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lciA9IGFwcGNhY2hlLT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KHRvRXZlbnRJRChuYW1lKSkpCi0gICAgICAgIHJldHVybiBldmVudExpc3RlbmVyVG9WOE9iamVj
dChsaXN0ZW5lcik7Ci0gICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci19Ci0KLS8vIEhhbmRsZXMgYXBw
Y2FjaGUub25mb29ldmVudCBhdHRyaWJ1dGUgc2V0dGluZwotQUNDRVNTT1JfU0VUVEVSKERPTUFw
cGxpY2F0aW9uQ2FjaGVFdmVudEhhbmRsZXIpCi17Ci0gICAgSU5DX1NUQVRTKCJET01BcHBsaWNh
dGlvbkNhY2hlLm9uZXZlbnRfc2V0dGVyIik7Ci0gICAgRE9NQXBwbGljYXRpb25DYWNoZSogYXBw
Y2FjaGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01BcHBsaWNhdGlv
bkNhY2hlPihWOENsYXNzSW5kZXg6OkRPTUFQUExJQ0FUSU9OQ0FDSEUsIGluZm8uSG9sZGVyKCkp
OwotICAgIFN0cmluZyBldmVudFR5cGUgPSB0b0V2ZW50SUQobmFtZSk7Ci0KLSAgICBpZiAoRXZl
bnRMaXN0ZW5lciogb2xkTGlzdGVuZXIgPSBhcHBjYWNoZS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihldmVudFR5cGUpKSB7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3Qg
PSBldmVudExpc3RlbmVyVG9WOE9iamVjdChvbGRMaXN0ZW5lcik7Ci0gICAgICAgIHJlbW92ZUhp
ZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgb2JqZWN0LCBWOEN1c3RvbTo6a0RPTUFwcGxp
Y2F0aW9uQ2FjaGVDYWNoZUluZGV4KTsKLSAgICAgICAgYXBwY2FjaGUtPmNsZWFyQXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihldmVudFR5cGUpOwotICAgIH0KLQotICAgIGlmICh2YWx1ZS0+SXNGdW5j
dGlvbigpKSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBuZXdMaXN0ZW5lciA9IGFy
Z3VtZW50VG9FdmVudExpc3RlbmVyKGFwcGNhY2hlLCB2YWx1ZSwga0ZpbmRPckNyZWF0ZSk7Ci0g
ICAgICAgIGlmIChuZXdMaXN0ZW5lcikgewotICAgICAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5k
ZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtET01BcHBsaWNhdGlvbkNhY2hl
Q2FjaGVJbmRleCk7Ci0gICAgICAgICAgICBhcHBjYWNoZS0+c2V0QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihldmVudFR5cGUsIG5ld0xpc3RlbmVyKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogLy8g
SGFuZGxlcyBhcHBjYWNoZS5hZGRFdmVudExpc3RuZXIobmFtZSwgZnVuYywgY2FwdHVyZSkgbWV0
aG9kIGNhbGxzCiBDQUxMQkFDS19GVU5DX0RFQ0woRE9NQXBwbGljYXRpb25DYWNoZUFkZEV2ZW50
TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKCJET01BcHBsaWNhdGlvbkNhY2hlLmFkZEV2ZW50
TGlzdGVuZXIoKSIpOwogICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGNhY2hlID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NQXBwbGljYXRpb25DYWNoZT4oVjhDbGFz
c0luZGV4OjpET01BUFBMSUNBVElPTkNBQ0hFLCBhcmdzLkhvbGRlcigpKTsKIAotICAgIFJlZlB0
cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGFyZ3VtZW50VG9FdmVudExpc3RlbmVyKGFwcGNh
Y2hlLCBhcmdzWzFdLCBrRmluZE9yQ3JlYXRlKTsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
bGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoYXBwY2FjaGUsIGFyZ3Nb
MV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPckNyZWF0ZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAg
ICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhD
dXN0b206OmtET01BcHBsaWNhdGlvbkNhY2hlQ2FjaGVJbmRleCk7CiAgICAgICAgIFN0cmluZyBl
dmVudFR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CkBAIC0xMjIsNyArNjUsNyBAQCBD
QUxMQkFDS19GVU5DX0RFQ0woRE9NQXBwbGljYXRpb25DYWNoZVJlbW92ZUV2ZW50TGlzdGVuZXIp
CiAgICAgSU5DX1NUQVRTKCJET01BcHBsaWNhdGlvbkNhY2hlLnJlbW92ZUV2ZW50TGlzdGVuZXIo
KSIpOwogICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGNhY2hlID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NQXBwbGljYXRpb25DYWNoZT4oVjhDbGFzc0luZGV4OjpE
T01BUFBMSUNBVElPTkNBQ0hFLCBhcmdzLkhvbGRlcigpKTsKIAotICAgIFJlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lciA9IGFyZ3VtZW50VG9FdmVudExpc3RlbmVyKGFwcGNhY2hlLCBhcmdz
WzFdLCBrRmluZE9ubHkpOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4
RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihhcHBjYWNoZSwgYXJnc1sxXSwgZmFsc2UsIExp
c3RlbmVyRmluZE9ubHkpOwogICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgICByZW1vdmVIaWRk
ZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjprRE9NQXBwbGlj
YXRpb25DYWNoZUNhY2hlSW5kZXgpOwogICAgICAgICBTdHJpbmcgZXZlbnRUeXBlID0gdG9XZWJD
b3JlU3RyaW5nKGFyZ3NbMF0pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhET01XaW5kb3dDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhE
T01XaW5kb3dDdXN0b20uY3BwCmluZGV4IDk1MmE1YTAuLjNlM2NmNjQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTI1MiwxMCAr
MjUyLDEyIEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dBZGRFdmVudExpc3RlbmVyKQog
ICAgIGlmICghcHJveHkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+ZXZlbnRMaXN0ZW5lcnMoKS0+
ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCBhcmdz
WzFdLCBmYWxzZSk7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01X
cmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKHByb3h5LCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJG
aW5kT3JDcmVhdGUpOwogCi0gICAgaWYgKGxpc3RlbmVyKQorICAgIGlmIChsaXN0ZW5lcikgewog
ICAgICAgICBpbXAtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2Fw
dHVyZSk7CisgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJn
c1sxXSwgVjhDdXN0b206OmtET01XaW5kb3dFdmVudExpc3RlbmVyQ2FjaGVJbmRleCk7CisgICAg
fQogCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KQEAgLTI4MiwxMCArMjg0LDEyIEBA
IENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dSZW1vdmVFdmVudExpc3RlbmVyKQogICAgIGlm
ICghcHJveHkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+ZXZlbnRMaXN0ZW5lcnMoKS0+ZmluZFdy
YXBwZXIoYXJnc1sxXSwgZmFsc2UpOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
ciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihwcm94eSwgYXJnc1sxXSwgZmFsc2Us
IExpc3RlbmVyRmluZE9ubHkpOwogCi0gICAgaWYgKGxpc3RlbmVyKQorICAgIGlmIChsaXN0ZW5l
cikgewogICAgICAgICBpbXAtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5l
ci5nZXQoKSwgdXNlQ2FwdHVyZSk7CisgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koYXJn
cy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206OmtET01XaW5kb3dFdmVudExpc3RlbmVyQ2Fj
aGVJbmRleCk7CisgICAgfQogCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KQEAgLTM4
MCw4MiArMzg0LDYgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd05PUCkKICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgU3RyaW5nIGV2ZW50TmFtZUZyb21BdHRy
aWJ1dGVOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQobmFtZS5zdGFydHNX
aXRoKCJvbiIpKTsKLSAgICBTdHJpbmcgZXZlbnRUeXBlID0gbmFtZS5zdWJzdHJpbmcoMik7Ci0K
LSAgICBpZiAoZXZlbnRUeXBlLnN0YXJ0c1dpdGgoInciKSkgewotICAgICAgICBzd2l0Y2goZXZl
bnRUeXBlW2V2ZW50VHlwZS5sZW5ndGgoKSAtIDFdKSB7Ci0gICAgICAgIGNhc2UgJ3QnOgotICAg
ICAgICAgICAgZXZlbnRUeXBlID0gIndlYmtpdEFuaW1hdGlvblN0YXJ0IjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlICduJzoKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9ICJ3ZWJr
aXRBbmltYXRpb25JdGVyYXRpb24iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
J2QnOgotICAgICAgICAgICAgQVNTRVJUKGV2ZW50VHlwZS5sZW5ndGgoKSA+IDcpOwotICAgICAg
ICAgICAgaWYgKGV2ZW50VHlwZVs3XSA9PSAnYScpCi0gICAgICAgICAgICAgICAgZXZlbnRUeXBl
ID0gIndlYmtpdEFuaW1hdGlvbkVuZCI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZXZlbnRUeXBlID0gIndlYmtpdFRyYW5zaXRpb25FbmQiOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXZlbnRUeXBlOwotfQotCi1BQ0NFU1NP
Ul9TRVRURVIoRE9NV2luZG93RXZlbnRIYW5kbGVyKQotewotICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gaG9sZGVyID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRl
eDo6RE9NV0lORE9XLCBpbmZvLlRoaXMoKSk7Ci0gICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9s
ZGVyKTsKLQotICAgIERvY3VtZW50KiBkb2MgPSBpbXAtPmRvY3VtZW50KCk7Ci0KLSAgICBpZiAo
IWRvYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmlu
ZyhuYW1lKTsKLSAgICBTdHJpbmcgZXZlbnRUeXBlID0gZXZlbnROYW1lRnJvbUF0dHJpYnV0ZU5h
bWUoa2V5KTsKLQotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgLy8gQ2xlYXIg
dGhlIGV2ZW50IGxpc3RlbmVyCi0gICAgICAgIGltcC0+Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKGV2ZW50VHlwZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBW
OFByb3h5OjpyZXRyaWV2ZShpbXAtPmZyYW1lKCkpOwotICAgICAgICBpZiAoIXByb3h5KQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
ciA9IHByb3h5LT5ldmVudExpc3RlbmVycygpLT5maW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRM
aXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCB0cnVlKTsKLSAgICAgICAgaWYgKGxpc3Rl
bmVyKQotICAgICAgICAgICAgaW1wLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlw
ZSwgbGlzdGVuZXIpOwotICAgIH0KLX0KLQotQUNDRVNTT1JfR0VUVEVSKERPTVdpbmRvd0V2ZW50
SGFuZGxlcikKLXsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4RE9NV3Jh
cHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5UaGlz
KCkpOwotICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotCi0gICAgRE9NV2luZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpOwot
Ci0gICAgRG9jdW1lbnQqIGRvYyA9IGltcC0+ZG9jdW1lbnQoKTsKLQotICAgIGlmICghZG9jKQot
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgU3RyaW5nIGtleSA9IHRvV2Vi
Q29yZVN0cmluZyhuYW1lKTsKLSAgICBTdHJpbmcgZXZlbnRUeXBlID0gZXZlbnROYW1lRnJvbUF0
dHJpYnV0ZU5hbWUoa2V5KTsKLQotICAgIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gaW1wLT5n
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSk7Ci0gICAgcmV0dXJuIFY4RE9NV3Jh
cHBlcjo6Y29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KGxpc3RlbmVyKTsKLX0KLQogc3Rh
dGljIGJvb2wgY2FuU2hvd01vZGFsRGlhbG9nTm93KGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKICAg
ICAvLyBBIGZyYW1lIGNhbiBvdXQgbGl2ZSBpdHMgcGFnZS4gU2VlIGJ1ZyAxMjE5NjEzLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250
ZXh0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGVkaWNhdGVkV29y
a2VyQ29udGV4dEN1c3RvbS5jcHAKaW5kZXggNzdlMmZhNC4uNTY3OTRhYiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9t
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNv
bnRleHRDdXN0b20uY3BwCkBAIC00Miw0NSArNDIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUFDQ0VTU09SX0dFVFRFUihEZWRpY2F0ZWRXb3JrZXJDb250ZXh0T25tZXNzYWdlKQotewot
ICAgIElOQ19TVEFUUyhMIkRPTS5EZWRpY2F0ZWRXb3JrZXJDb250ZXh0Lm9ubWVzc2FnZS5fZ2V0
Iik7Ci0gICAgRGVkaWNhdGVkV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERlZGljYXRlZFdvcmtlckNvbnRleHQ+KFY4Q2xh
c3NJbmRleDo6REVESUNBVEVEV09SS0VSQ09OVEVYVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYg
KHdvcmtlckNvbnRleHQtPm9ubWVzc2FnZSgpKSB7Ci0gICAgICAgIFY4V29ya2VyQ29udGV4dEV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhXb3JrZXJDb250ZXh0RXZlbnRM
aXN0ZW5lcio+KHdvcmtlckNvbnRleHQtPm9ubWVzc2FnZSgpKTsKLSAgICAgICAgdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsK
LSAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihEZWRpY2F0ZWRXb3JrZXJDb250ZXh0T25tZXNz
YWdlKQotewotICAgIElOQ19TVEFUUyhMIkRPTS5EZWRpY2F0ZWRXb3JrZXJDb250ZXh0Lm9ubWVz
c2FnZS5fc2V0Iik7Ci0gICAgRGVkaWNhdGVkV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERlZGljYXRlZFdvcmtlckNvbnRl
eHQ+KFY4Q2xhc3NJbmRleDo6REVESUNBVEVEV09SS0VSQ09OVEVYVCwgaW5mby5Ib2xkZXIoKSk7
Ci0gICAgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lciogb2xkTGlzdGVuZXIgPSBzdGF0aWNf
Y2FzdDxWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyKj4od29ya2VyQ29udGV4dC0+b25tZXNz
YWdlKCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHdvcmtlckNv
bnRleHQtPm9ubWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4g
b2xkVjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAg
ICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvbGRWOExpc3RlbmVy
LCBWOEN1c3RvbTo6a0RlZGljYXRlZFdvcmtlckNvbnRleHRSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCi0gICAgICAgIHdvcmtl
ckNvbnRleHQtPnNldE9ubWVzc2FnZSgwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8
VjhFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHdvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5wcm94
eSgpLT5maW5kT3JDcmVhdGVFdmVudExpc3RlbmVyKHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2Fz
dCh2YWx1ZSksIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAgICAg
ICAgICAgaWYgKG9sZExpc3RlbmVyKSB7Ci0gICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IG9sZFY4TGlzdGVuZXIgPSBvbGRMaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsK
LSAgICAgICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9s
ZFY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprRGVkaWNhdGVkV29ya2VyQ29udGV4dFJlcXVlc3RDYWNo
ZUluZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgd29ya2VyQ29udGV4dC0+c2V0
T25tZXNzYWdlKGxpc3RlbmVyKTsKLSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3ko
aW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprRGVkaWNhdGVkV29ya2VyQ29udGV4dFJl
cXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogQ0FMTEJBQ0tfRlVOQ19E
RUNMKERlZGljYXRlZFdvcmtlckNvbnRleHRQb3N0TWVzc2FnZSkKIHsKICAgICBJTkNfU1RBVFMo
TCJET00uRGVkaWNhdGVkV29ya2VyQ29udGV4dC5wb3N0TWVzc2FnZSIpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcAppbmRleCAwNjE2
Y2M4Li4yMDBlNGQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1l
c3NhZ2VQb3J0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1l
c3NhZ2VQb3J0Q3VzdG9tLmNwcApAQCAtMzYsNjQgKzM2LDE3IEBACiAjaW5jbHVkZSAiVjhDdXN0
b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydEN1c3RvbS5oIgogI2luY2x1ZGUg
IlY4TWVzc2FnZVBvcnQuaCIKLSNpbmNsdWRlICJWOE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKICNp
bmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoTWVzc2FnZVBvcnQqIG1l
c3NhZ2VQb3J0LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBmaW5kT25seSwgYm9v
bCBjcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKQotewotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQ
cm94eTo6cmV0cmlldmUobWVzc2FnZVBvcnQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0g
ICAgaWYgKHByb3h5KSB7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QqIGxpc3QgPSBwcm94
eS0+b2JqZWN0TGlzdGVuZXJzKCk7Ci0gICAgICAgIHJldHVybiBmaW5kT25seSA/IGxpc3QtPmZp
bmRXcmFwcGVyKHZhbHVlLCBmYWxzZSkgOiBsaXN0LT5maW5kT3JDcmVhdGVXcmFwcGVyPFY4T2Jq
ZWN0RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBmYWxzZSk7Ci0gICAgfQot
Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiB3
b3JrZXJDb250ZXh0UHJveHkgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZl
KCk7Ci0gICAgaWYgKHdvcmtlckNvbnRleHRQcm94eSkKLSAgICAgICAgcmV0dXJuIHdvcmtlckNv
bnRleHRQcm94eS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lckhlbHBlcih2YWx1ZSwgZmFsc2Us
IGZpbmRPbmx5LCBjcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKTsKLSNlbmRpZgotCi0gICAgcmV0
dXJuIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4oKTsKLX0KLQotQUNDRVNTT1JfR0VUVEVSKE1l
c3NhZ2VQb3J0T25tZXNzYWdlKQotewotICAgIElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0Lm9u
bWVzc2FnZS5fZ2V0Iik7Ci0gICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVT
U0FHRVBPUlQsIGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZl
cnRFdmVudExpc3RlbmVyVG9WOE9iamVjdChtZXNzYWdlUG9ydC0+b25tZXNzYWdlKCkpOwotfQot
Ci1BQ0NFU1NPUl9TRVRURVIoTWVzc2FnZVBvcnRPbm1lc3NhZ2UpCi17Ci0gICAgSU5DX1NUQVRT
KCJET00uTWVzc2FnZVBvcnQub25tZXNzYWdlLl9zZXQiKTsKLSAgICBNZXNzYWdlUG9ydCogbWVz
c2FnZVBvcnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxNZXNzYWdlUG9y
dD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHZh
bHVlLT5Jc051bGwoKSkgewotICAgICAgICBpZiAobWVzc2FnZVBvcnQtPm9ubWVzc2FnZSgpKSB7
Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nh
c3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4obWVzc2FnZVBvcnQtPm9ubWVzc2FnZSgpKTsKLSAg
ICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgbGlzdGVuZXIt
PmdldExpc3RlbmVyT2JqZWN0KCksIFY4Q3VzdG9tOjprTWVzc2FnZVBvcnRSZXF1ZXN0Q2FjaGVJ
bmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCi0gICAg
ICAgIG1lc3NhZ2VQb3J0LT5zZXRPbm1lc3NhZ2UoMCk7Ci0KLSAgICB9IGVsc2UgewotICAgICAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKG1lc3Nh
Z2VQb3J0LCB2YWx1ZSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0g
ICAgICAgICAgICBtZXNzYWdlUG9ydC0+c2V0T25tZXNzYWdlKGxpc3RlbmVyKTsKLSAgICAgICAg
ICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9t
OjprTWVzc2FnZVBvcnRSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
IENBTExCQUNLX0ZVTkNfREVDTChNZXNzYWdlUG9ydEFkZEV2ZW50TGlzdGVuZXIpCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uTWVzc2FnZVBvcnQuYWRkRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgTWVz
c2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIGFyZ3MuSG9sZGVyKCkp
OwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIo
bWVzc2FnZVBvcnQsIGFyZ3NbMV0sIGZhbHNlLCB0cnVlKTsKKyAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIobWVzc2FnZVBv
cnQsIGFyZ3NbMV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPckNyZWF0ZSk7CiAgICAgaWYgKGxpc3Rl
bmVyKSB7CiAgICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwog
ICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKQEAgLTEw
OCw3ICs2MSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChNZXNzYWdlUG9ydFJlbW92ZUV2ZW50TGlz
dGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTWVzc2FnZVBvcnQucmVtb3ZlRXZlbnRMaXN0
ZW5lcigpIik7CiAgICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBP
UlQsIGFyZ3MuSG9sZGVyKCkpOwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9
IGdldEV2ZW50TGlzdGVuZXIobWVzc2FnZVBvcnQsIGFyZ3NbMV0sIHRydWUsIHRydWUpOworICAg
IFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRM
aXN0ZW5lcihtZXNzYWdlUG9ydCwgYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9ubHkpOwog
ICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmlu
ZyhhcmdzWzBdKTsKICAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZh
bHVlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0
b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcAppbmRl
eCA2MWFiODY3Li45YjRiOWFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE5vZGVDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9k
ZUN1c3RvbS5jcHAKQEAgLTM5LDI2ICszOSwxOCBAQAogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGlu
Zy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4Tm9k
ZS5oIgotI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4UHJv
eHkuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgaW5saW5lIFN0cmluZyB0b0V2ZW50VHlwZSh2ODo6TG9jYWw8djg6OlN0cmluZz4g
dmFsdWUpCi17Ci0gICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7Ci0gICAg
QVNTRVJUKGtleS5zdGFydHNXaXRoKCJvbiIpKTsKLSAgICByZXR1cm4ga2V5LnN1YnN0cmluZygy
KTsKLX0KLQogQ0FMTEJBQ0tfRlVOQ19ERUNMKE5vZGVBZGRFdmVudExpc3RlbmVyKQogewogICAg
IElOQ19TVEFUUygiRE9NLk5vZGUuYWRkRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgTm9kZSogbm9k
ZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJncy5Ib2xk
ZXIoKSk7CiAKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBw
ZXI6OmdldEV2ZW50TGlzdGVuZXIobm9kZSwgYXJnc1sxXSwgZmFsc2UsIGZhbHNlKTsKKyAgICBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlz
dGVuZXIobm9kZSwgYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9yQ3JlYXRlKTsKICAgICBp
ZiAobGlzdGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJn
c1swXSk7CiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgp
OwpAQCAtNzYsOSArNjgsOSBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTm9kZVJlbW92ZUV2ZW50TGlz
dGVuZXIpCiAgICAgLy8gSXQgaXMgcG9zc2JpbGUgdGhhdCB0aGUgb3duZXIgZG9jdW1lbnQgb2Yg
dGhlIG5vZGUgaXMgZGV0YWNoZWQKICAgICAvLyBmcm9tIHRoZSBmcmFtZS4KICAgICAvLyBTZWUg
aXNzdWUgaHR0cDovL2IvODc4OTA5Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
ID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKG5vZGUsIGFyZ3NbMV0sIGZhbHNlLCB0
cnVlKTsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6
OmdldEV2ZW50TGlzdGVuZXIobm9kZSwgYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9ubHkp
OwogICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0
cmluZyhhcmdzWzBdKTsKKyAgICAgICAgQXRvbWljU3RyaW5nIHR5cGUgPSB2OFZhbHVlVG9BdG9t
aWNXZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdz
WzJdLT5Cb29sZWFuVmFsdWUoKTsKICAgICAgICAgbm9kZS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0
eXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSk7CiAgICAgICAgIHJlbW92ZUhpZGRlbkRl
cGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206OmtOb2RlRXZlbnRMaXN0
ZW5lckNhY2hlSW5kZXgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20uY3BwCmluZGV4IGUxZGYwNmQuLmJkNWZiNGEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2Vu
dGVyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNh
dGlvbkNlbnRlckN1c3RvbS5jcHAKQEAgLTUxLDIxICs1MSwxMiBAQCBDQUxMQkFDS19GVU5DX0RF
Q0woTm90aWZpY2F0aW9uQWRkRXZlbnRMaXN0ZW5lcikKICAgICBJTkNfU1RBVFMoIkRPTS5Ob3Rp
ZmljYXRpb24uYWRkRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgTm90aWZpY2F0aW9uKiBub3RpZmlj
YXRpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb24+
KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9OLCBhcmdzLkhvbGRlcigpKTsKIAotICAgIFJlZlB0
cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcjsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0ID0gbm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYg
KGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQotICAgICAgICBsaXN0ZW5lciA9IHN0YXRpY19j
YXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KS0+c2NyaXB0KCktPnByb3h5KCktPmZpbmRPckNy
ZWF0ZUV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0pLCBm
YWxzZSwgZmFsc2UpOwotICAgIGVsc2UgewotICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJv
eHk6OnJldHJpZXZlKGNvbnRleHQpOwotICAgICAgICBpZiAoIXByb3h5KQotICAgICAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICAgICAgbGlzdGVuZXIgPSBwcm94eS0+ZXZlbnRM
aXN0ZW5lcnMoKS0+ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+KHByb3h5LT5m
cmFtZSgpLCBhcmdzWzFdLCB0cnVlKTsKLSAgICB9Ci0KKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIobm90aWZpY2F0aW9u
LCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUpOwogICAgIGlmIChsaXN0ZW5l
cikgewogICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAg
ICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CiAgICAgICAg
IG5vdGlmaWNhdGlvbi0+YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVy
ZSk7CisgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sx
XSwgVjhDdXN0b206OmtOb3RpZmljYXRpb25SZXF1ZXN0Q2FjaGVJbmRleCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTc2LDc3ICs2NywxNyBAQCBDQUxMQkFDS19G
VU5DX0RFQ0woTm90aWZpY2F0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICBJTkNfU1RBVFMo
IkRPTS5Ob3RpZmljYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgTm90aWZpY2F0
aW9uKiBub3RpZmljYXRpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxO
b3RpZmljYXRpb24+KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9OLCBhcmdzLkhvbGRlcigpKTsK
IAotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcjsKLSAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0ID0gbm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7Ci0gICAgaWYgKGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQotICAgICAgICBsaXN0ZW5l
ciA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KS0+c2NyaXB0KCktPnByb3h5
KCktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0
KGFyZ3NbMV0pLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFY4UHJveHkqIHBy
b3h5ID0gVjhQcm94eTo6cmV0cmlldmUoY29udGV4dCk7Ci0gICAgICAgIGlmICghcHJveHkpCi0g
ICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgICAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+ZXZlbnRMaXN0ZW5lcnMoKS0+ZmluZFdyYXBwZXIo
YXJnc1sxXSwgZmFsc2UpOwotICAgIH0KLQorICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0
ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihub3RpZmljYXRpb24sIGFyZ3Nb
MV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPbmx5KTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAg
ICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wg
dXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBub3RpZmljYXRp
b24tPnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1cmUp
OworICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0s
IFY4Q3VzdG9tOjprTm90aWZpY2F0aW9uUmVxdWVzdENhY2hlSW5kZXgpOwogICAgIH0KIAogICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLUFDQ0VTU09SX1NFVFRFUihOb3RpZmljYXRp
b25FdmVudEhhbmRsZXIpCi17Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBW
OERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT04s
IGluZm8uVGhpcygpKTsKLSAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb24+KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9O
LCBob2xkZXIpOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBub3RpZmlj
YXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLQotICAgIGlmICghY29udGV4dCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmluZyhuYW1lKTsK
LSAgICBBU1NFUlQoa2V5LnN0YXJ0c1dpdGgoIm9uIikpOwotICAgIFN0cmluZyBldmVudFR5cGUg
PSBrZXkuc3Vic3RyaW5nKDIpOwotCi0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAg
ICAvLyBDbGVhciB0aGUgZXZlbnQgbGlzdGVuZXIKLSAgICAgICAgbm90aWZpY2F0aW9uLT5jbGVh
ckF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXI7Ci0gICAgICAgIGlmIChjb250ZXh0LT5p
c1dvcmtlckNvbnRleHQoKSkKLSAgICAgICAgICAgIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8V29y
a2VyQ29udGV4dCo+KGNvbnRleHQpLT5zY3JpcHQoKS0+cHJveHkoKS0+ZmluZE9yQ3JlYXRlRXZl
bnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpLCBmYWxzZSwgZmFs
c2UpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94
eTo6cmV0cmlldmUoY29udGV4dCk7Ci0gICAgICAgICAgICBpZiAoIXByb3h5KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGxpc3RlbmVyID0gcHJveHktPmV2ZW50TGlzdGVu
ZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUo
KSwgdmFsdWUsIHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxpc3RlbmVyKQotICAg
ICAgICAgICAgbm90aWZpY2F0aW9uLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlw
ZSwgbGlzdGVuZXIpOwotICAgIH0KLX0KLQotQUNDRVNTT1JfR0VUVEVSKE5vdGlmaWNhdGlvbkV2
ZW50SGFuZGxlcikKLXsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4RE9N
V3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5U
aGlzKCkpOwotICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwotCi0gICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb24+KFY4Q2xhc3NJbmRleDo6Tk9U
SUZJQ0FUSU9OLCBob2xkZXIpOwotCi0gICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmluZyhu
YW1lKTsKLSAgICBBU1NFUlQoa2V5LnN0YXJ0c1dpdGgoIm9uIikpOwotICAgIFN0cmluZyBldmVu
dFR5cGUgPSBrZXkuc3Vic3RyaW5nKDIpOwotCi0gICAgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBub3RpZmljYXRpb24tPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKLSAg
ICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QobGlz
dGVuZXIpOwotfQotCiBDQUxMQkFDS19GVU5DX0RFQ0woTm90aWZpY2F0aW9uQ2VudGVyQ3JlYXRl
SFRNTE5vdGlmaWNhdGlvbikKIHsKICAgICBJTkNfU1RBVFMoTCJET00uTm90aWZpY2F0aW9uQ2Vu
dGVyLkNyZWF0ZUhUTUxOb3RpZmljYXRpb24oKSIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwCmluZGV4IGNl
OWMzNDUuLmRmZjRmZjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAKQEAgLTQ5LDE1ICs0OSwxMiBAQCBD
QUxMQkFDS19GVU5DX0RFQ0woU1ZHRWxlbWVudEluc3RhbmNlQWRkRXZlbnRMaXN0ZW5lcikKICAg
ICBJTkNfU1RBVFMoIkRPTS5TVkdFbGVtZW50SW5zdGFuY2UuQWRkRXZlbnRMaXN0ZW5lcigpIik7
CiAgICAgU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dERPTVdyYXBwZXJUb05hdGl2ZTxTVkdFbGVtZW50SW5zdGFuY2U+KGFyZ3MuSG9sZGVyKCkpOwog
Ci0gICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShpbnN0YW5jZS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAoIXByb3h5KQotICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJv
eHktPmV2ZW50TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVy
Pihwcm94eS0+ZnJhbWUoKSwgYXJnc1sxXSwgZmFsc2UpOworICAgIFJlZlB0cjxFdmVudExpc3Rl
bmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihpbnN0YW5jZSwg
YXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9yQ3JlYXRlKTsKICAgICBpZiAobGlzdGVuZXIp
IHsKICAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAg
ICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBp
bnN0YW5jZS0+YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7Cisg
ICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhD
dXN0b206OmtOb2RlRXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgpOwogICAgIH0KIAogICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7CkBAIC02OCwxNSArNjUsMTIgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KFNWR0VsZW1lbnRJbnN0YW5jZVJlbW92ZUV2ZW50TGlzdGVuZXIpCiAgICAgSU5DX1NUQVRTKCJE
T00uU1ZHRWxlbWVudEluc3RhbmNlLlJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwogICAgIFNWR0Vs
ZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVy
VG9OYXRpdmU8U1ZHRWxlbWVudEluc3RhbmNlPihhcmdzLkhvbGRlcigpKTsKIAotICAgIFY4UHJv
eHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoaW5zdGFuY2UtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7Ci0gICAgaWYgKCFwcm94eSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKLQotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5ldmVudExp
c3RlbmVycygpLT5maW5kV3JhcHBlcihhcmdzWzFdLCBmYWxzZSk7CisgICAgUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKGluc3Rh
bmNlLCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT25seSk7CiAgICAgaWYgKGxpc3RlbmVy
KSB7CiAgICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAg
ICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKICAgICAgICAg
aW5zdGFuY2UtPnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNh
cHR1cmUpOworICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFy
Z3NbMV0sIFY4Q3VzdG9tOjprTm9kZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKICAgICB9CiAK
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwCmluZGV4IDAyNDQxOWQuLmE4ZmRmODQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAKQEAg
LTQ1LDEyMiArNDUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoV2ViU29ja2V0KiB3ZWJTb2NrZXQs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGZpbmRPbmx5KQotewotI2lmIEVOQUJM
RShXT1JLRVJTKQotICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogd29ya2VyQ29udGV4
dFByb3h5ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpOwotICAgIGlm
ICh3b3JrZXJDb250ZXh0UHJveHkpCi0gICAgICAgIHJldHVybiB3b3JrZXJDb250ZXh0UHJveHkt
PmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNlLCBmaW5kT25seSk7
Ci0jZW5kaWYKLQotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUod2ViU29j
a2V0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIGlmIChwcm94eSkgewotICAgICAg
ICBWOEV2ZW50TGlzdGVuZXJMaXN0KiBsaXN0ID0gcHJveHktPm9iamVjdExpc3RlbmVycygpOwot
ICAgICAgICByZXR1cm4gZmluZE9ubHkgPyBsaXN0LT5maW5kV3JhcHBlcih2YWx1ZSwgZmFsc2Up
IDogbGlzdC0+ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOE9iamVjdEV2ZW50TGlzdGVuZXI+KHByb3h5
LT5mcmFtZSgpLCB2YWx1ZSwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiBQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+KCk7Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihXZWJTb2NrZXRPbm9wZW4p
Ci17Ci0gICAgSU5DX1NUQVRTKCJET00uV2ViU29ja2V0Lm9ub3Blbi5fZ2V0Iik7Ci0gICAgV2Vi
U29ja2V0KiB3ZWJTb2NrZXQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxX
ZWJTb2NrZXQ+KFY4Q2xhc3NJbmRleDo6V0VCU09DS0VULCBpbmZvLkhvbGRlcigpKTsKLSAgICBp
ZiAod2ViU29ja2V0LT5vbm9wZW4oKSkgewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIq
IGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4od2ViU29ja2V0
LT5vbm9wZW4oKSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0g
bGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiB2OExpc3RlbmVy
OwotICAgIH0KLSAgICByZXR1cm4gdjg6Ok51bGwoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVSKFdl
YlNvY2tldE9ub3BlbikKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5XZWJTb2NrZXQub25vcGVuLl9z
ZXQiKTsKLSAgICBXZWJTb2NrZXQqIHdlYlNvY2tldCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PFdlYlNvY2tldD4oVjhDbGFzc0luZGV4OjpXRUJTT0NLRVQsIGluZm8uSG9s
ZGVyKCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHdlYlNvY2tl
dC0+b25vcGVuKCkpIHsKLSAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVu
ZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih3ZWJTb2NrZXQtPm9ub3Bl
bigpKTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlz
dGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBl
bmRlbmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprV2ViU29ja2V0Q2Fj
aGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgotICAg
ICAgICB3ZWJTb2NrZXQtPnNldE9ub3BlbigwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHdlYlNvY2tldCwg
dmFsdWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB3ZWJT
b2NrZXQtPnNldE9ub3BlbihsaXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBl
bmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a1dlYlNvY2tldENhY2hlSW5k
ZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1BQ0NFU1NPUl9HRVRURVIoV2ViU29ja2V0T25t
ZXNzYWdlKQotewotICAgIElOQ19TVEFUUygiRE9NLldlYlNvY2tldC5vbm1lc3NhZ2UuX2dldCIp
OwotICAgIFdlYlNvY2tldCogd2ViU29ja2V0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8V2ViU29ja2V0PihWOENsYXNzSW5kZXg6OldFQlNPQ0tFVCwgaW5mby5Ib2xkZXIo
KSk7Ci0gICAgaWYgKHdlYlNvY2tldC0+b25tZXNzYWdlKCkpIHsKLSAgICAgICAgUmVmUHRyPFY4
T2JqZWN0RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50
TGlzdGVuZXIqPih3ZWJTb2NrZXQtPm9ubWVzc2FnZSgpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAg
ICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwot
fQotCi1BQ0NFU1NPUl9TRVRURVIoV2ViU29ja2V0T25tZXNzYWdlKQotewotICAgIElOQ19TVEFU
UygiRE9NLldlYlNvY2tldC5vbm1lc3NhZ2UuX3NldCIpOwotICAgIFdlYlNvY2tldCogd2ViU29j
a2V0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViU29ja2V0PihWOENs
YXNzSW5kZXg6OldFQlNPQ0tFVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051
bGwoKSkgewotICAgICAgICBpZiAod2ViU29ja2V0LT5vbm1lc3NhZ2UoKSkgewotICAgICAgICAg
ICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0
RXZlbnRMaXN0ZW5lcio+KHdlYlNvY2tldC0+b25tZXNzYWdlKCkpOwotICAgICAgICAgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmpl
Y3QoKTsKLSAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwg
djhMaXN0ZW5lciwgVjhDdXN0b206OmtXZWJTb2NrZXRDYWNoZUluZGV4KTsKLSAgICAgICAgfQot
ICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCi0gICAgICAgIHdlYlNvY2tldC0+c2V0T25t
ZXNzYWdlKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIod2ViU29ja2V0LCB2YWx1ZSwgZmFsc2UpOwotICAg
ICAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgICAgIHdlYlNvY2tldC0+c2V0T25tZXNzYWdl
KGxpc3RlbmVyKTsKLSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xk
ZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprV2ViU29ja2V0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihXZWJTb2NrZXRPbmNsb3NlKQotewotICAgIElO
Q19TVEFUUygiRE9NLldlYlNvY2tldC5vbmNsb3NlLl9nZXQiKTsKLSAgICBXZWJTb2NrZXQqIHdl
YlNvY2tldCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYlNvY2tldD4o
VjhDbGFzc0luZGV4OjpXRUJTT0NLRVQsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh3ZWJTb2Nr
ZXQtPm9uY2xvc2UoKSkgewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVy
ID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4od2ViU29ja2V0LT5vbmNsb3Nl
KCkpOwotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVy
LT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9
Ci0gICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihXZWJTb2NrZXRP
bmNsb3NlKQotewotICAgIElOQ19TVEFUUygiRE9NLldlYlNvY2tldC5vbmNsb3NlLl9zZXQiKTsK
LSAgICBXZWJTb2NrZXQqIHdlYlNvY2tldCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PFdlYlNvY2tldD4oVjhDbGFzc0luZGV4OjpXRUJTT0NLRVQsIGluZm8uSG9sZGVyKCkp
OwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHdlYlNvY2tldC0+b25j
bG9zZSgpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0g
c3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4od2ViU29ja2V0LT5vbmNsb3NlKCkp
OwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5l
ci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVu
Y3koaW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lciwgVjhDdXN0b206OmtXZWJTb2NrZXRDYWNoZUlu
ZGV4KTsKLSAgICAgICAgfQotICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCi0gICAgICAg
IHdlYlNvY2tldC0+c2V0T25jbG9zZSgwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHdlYlNvY2tldCwgdmFs
dWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB3ZWJTb2Nr
ZXQtPnNldE9uY2xvc2UobGlzdGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5k
ZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtXZWJTb2NrZXRDYWNoZUluZGV4
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogLy8gPz8/IEFkZEV2ZW50TGlzdGVuZXIsIFJlbW92
ZUV2ZW50TGlzdGVuZXIKIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYlNvY2tldENvbnN0cnVjdG9y
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1
c3RvbS5jcHAKaW5kZXggNDkzNGYwZC4uMjFiM2MzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCkBAIC01Miw0NSArNTIs
NiBAQCBBQ0NFU1NPUl9HRVRURVIoV29ya2VyQ29udGV4dFNlbGYpCiAgICAgcmV0dXJuIFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFdvcmtlckNvbnRleHRUb1Y4T2JqZWN0KHdv
cmtlckNvbnRleHQpOwogfQogCi1BQ0NFU1NPUl9HRVRURVIoV29ya2VyQ29udGV4dE9uZXJyb3Ip
Ci17Ci0gICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRleHQub25lcnJvci5fZ2V0Iik7Ci0g
ICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwg
aW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHdvcmtlckNvbnRleHQtPm9uZXJyb3IoKSkgewotICAg
ICAgICBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0
PFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIqPih3b3JrZXJDb250ZXh0LT5vbmVycm9yKCkp
OwotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5n
ZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0g
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVSKFdvcmtlckNv
bnRleHRPbmVycm9yKQotewotICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXJDb250ZXh0Lm9uZXJy
b3IuX3NldCIpOwotICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldP
UktFUkNPTlRFWFQsIGluZm8uSG9sZGVyKCkpOwotICAgIFY4V29ya2VyQ29udGV4dEV2ZW50TGlz
dGVuZXIqIG9sZExpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0
ZW5lcio+KHdvcmtlckNvbnRleHQtPm9uZXJyb3IoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwo
KSkgewotICAgICAgICBpZiAod29ya2VyQ29udGV4dC0+b25lcnJvcigpKSB7Ci0gICAgICAgICAg
ICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2xkVjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRM
aXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZv
LkhvbGRlcigpLCBvbGRWOExpc3RlbmVyLCBWOEN1c3RvbTo6a1dvcmtlckNvbnRleHRSZXF1ZXN0
Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIu
Ci0gICAgICAgIHdvcmtlckNvbnRleHQtPnNldE9uZXJyb3IoMCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSB3b3JrZXJDb250ZXh0LT5z
Y3JpcHQoKS0+cHJveHkoKS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6
Ok9iamVjdD46OkNhc3QodmFsdWUpLCB0cnVlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5l
cikgewotICAgICAgICAgICAgaWYgKG9sZExpc3RlbmVyKSB7Ci0gICAgICAgICAgICAgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IG9sZFY4TGlzdGVuZXIgPSBvbGRMaXN0ZW5lci0+Z2V0TGlzdGVu
ZXJPYmplY3QoKTsKLSAgICAgICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8u
SG9sZGVyKCksIG9sZFY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprV29ya2VyQ29udGV4dFJlcXVlc3RD
YWNoZUluZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgd29ya2VyQ29udGV4dC0+
c2V0T25lcnJvcihsaXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5
KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a1dvcmtlckNvbnRleHRSZXF1ZXN0Q2Fj
aGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBT
ZXRUaW1lb3V0T3JJbnRlcnZhbChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBib29sIHNpbmds
ZVNob3QpCiB7CiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxXb3JrZXJDb250ZXh0PihhcmdzLkhvbGRlcigp
KTsKQEAgLTE3MSw4ICsxMzIsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4dEFk
ZEV2ZW50TGlzdGVuZXIpCiAgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRleHQuYWRkRXZl
bnRMaXN0ZW5lcigpIik7CiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxXb3JrZXJDb250ZXh0PihhcmdzLkhv
bGRlcigpKTsKIAotICAgIFJlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gd29ya2Vy
Q29udGV4dC0+c2NyaXB0KCktPnByb3h5KCktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodjg6
OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0pLCBmYWxzZSwgZmFsc2UpOwotCisgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExp
c3RlbmVyKHdvcmtlckNvbnRleHQsIGFyZ3NbMV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPckNyZWF0
ZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbMF0pOwogICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29s
ZWFuVmFsdWUoKTsKQEAgLTE4NywxMCArMTQ3LDggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtl
ckNvbnRleHRSZW1vdmVFdmVudExpc3RlbmVyKQogewogICAgIElOQ19TVEFUUyhMIkRPTS5Xb3Jr
ZXJDb250ZXh0LnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwogICAgIFdvcmtlckNvbnRleHQqIHdv
cmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8V29y
a2VyQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0gICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5KiBwcm94eSA9IHdvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5wcm94eSgpOwotCi0gICAgUmVm
UHRyPFY4RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+ZmluZE9yQ3JlYXRlRXZlbnRM
aXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSksIGZhbHNlLCB0cnVl
KTsKIAorICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6
Z2V0RXZlbnRMaXN0ZW5lcih3b3JrZXJDb250ZXh0LCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJG
aW5kT25seSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIFN0cmluZyB0eXBlID0gdG9X
ZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJd
LT5Cb29sZWFuVmFsdWUoKTsKQEAgLTE5OCw3ICsxNTYsNiBAQCBDQUxMQkFDS19GVU5DX0RFQ0wo
V29ya2VyQ29udGV4dFJlbW92ZUV2ZW50TGlzdGVuZXIpCiAKICAgICAgICAgcmVtb3ZlSGlkZGVu
RGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3RvbTo6a1dvcmtlckNvbnRl
eHRSZXF1ZXN0Q2FjaGVJbmRleCk7CiAgICAgfQotCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
dXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3Bw
CmluZGV4IDFjZWNkZTAuLjM1MmM3YTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdvcmtlckN1c3RvbS5jcHAKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOE1lc3NhZ2VQ
b3J0Q3VzdG9tLmgiCi0jaW5jbHVkZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiV29ya2Vy
Q29udGV4dC5oIgpAQCAtODcsNjIgKzg2LDYgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckNv
bnN0cnVjdG9yKQogICAgIHJldHVybiB3cmFwcGVyT2JqZWN0OwogfQogCi1QYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoV29ya2VyKiB3b3JrZXIsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBib29sIGZpbmRPbmx5KQotewotICAg
IGlmICh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNXb3JrZXJDb250ZXh0KCkp
IHsKLSAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiB3b3JrZXJDb250ZXh0UHJv
eHkgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCk7Ci0gICAgICAgIEFT
U0VSVCh3b3JrZXJDb250ZXh0UHJveHkpOwotICAgICAgICByZXR1cm4gd29ya2VyQ29udGV4dFBy
b3h5LT5maW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBpc0F0dHJpYnV0ZSwg
ZmluZE9ubHkpOwotICAgIH0KLQotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmll
dmUod29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIGlmIChwcm94eSkgewot
ICAgICAgICBWOEV2ZW50TGlzdGVuZXJMaXN0KiBsaXN0ID0gcHJveHktPm9iamVjdExpc3RlbmVy
cygpOwotICAgICAgICByZXR1cm4gZmluZE9ubHkgPyBsaXN0LT5maW5kV3JhcHBlcih2YWx1ZSwg
aXNBdHRyaWJ1dGUpIDogbGlzdC0+ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOE9iamVjdEV2ZW50TGlz
dGVuZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwgaXNBdHRyaWJ1dGUpOwotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQotCi1BQ0NFU1NPUl9HRVRURVIoV29ya2VyT25tZXNzYWdlKQotewotICAg
IElOQ19TVEFUUyhMIkRPTS5Xb3JrZXIub25tZXNzYWdlLl9nZXQiKTsKLSAgICBXb3JrZXIqIHdv
cmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFz
c0luZGV4OjpXT1JLRVIsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh3b3JrZXItPm9ubWVzc2Fn
ZSgpKSB7Ci0gICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNf
Y2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih3b3JrZXItPm9ubWVzc2FnZSgpKTsKLSAgICAg
ICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVu
ZXJPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihXb3JrZXJPbm1lc3NhZ2Up
Ci17Ci0gICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlci5vbm1lc3NhZ2UuX3NldCIpOwotICAgIFdv
cmtlciogd29ya2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2Vy
PihWOENsYXNzSW5kZXg6OldPUktFUiwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgVjhPYmplY3RFdmVu
dExpc3RlbmVyKiBvbGRMaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5l
cio+KHdvcmtlci0+b25tZXNzYWdlKCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAg
ICAgICAgaWYgKG9sZExpc3RlbmVyKSB7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gb2xkVjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAg
ICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvbGRWOExpc3Rl
bmVyLCBWOEN1c3RvbTo6a1dvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgd29ya2VyLT5zZXRPbm1lc3Nh
Z2UoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIHZhbHVlLCB0cnVlLCBmYWxzZSk7Ci0gICAg
ICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICAgICAgaWYgKG9sZExpc3RlbmVyKSB7Ci0gICAg
ICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9sZFY4TGlzdGVuZXIgPSBvbGRMaXN0
ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgICAgICByZW1vdmVIaWRkZW5E
ZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9sZFY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprV29ya2Vy
UmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3b3JrZXIt
PnNldE9ubWVzc2FnZShsaXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRl
bmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a1dvcmtlclJlcXVlc3RDYWNoZUlu
ZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlclBv
c3RNZXNzYWdlKQogewogICAgIElOQ19TVEFUUygiRE9NLldvcmtlci5wb3N0TWVzc2FnZSIpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENv
bnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVl
c3RDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNjJlOTIzZi4uYWY2NDdjZCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0
b3IuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOE9i
amVjdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhV
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAppbmRleCA0
NmM3YTdmLi4zOTEwNWRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUg
IlY4RG9jdW1lbnQuaCIKICNpbmNsdWRlICJWOEZpbGUuaCIKICNpbmNsdWRlICJWOEhUTUxEb2N1
bWVudC5oIgotI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4
UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRl
eHQuaCIKQEAgLTQ1LDIzMCArNDQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0g
RXZlbnRMaXN0ZW5lclR5cGUgeyBBdHRyaWJ1dGVFdmVudExpc3RlbmVyVHlwZSwgT2JqZWN0RXZl
bnRMaXN0ZW5lclR5cGUgfTsKLQotc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0
RXZlbnRMaXN0ZW5lcihYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlLCBFdmVudExpc3RlbmVyVHlwZSB0eXBlLCBib29sIGZpbmRPbmx5KQot
ewotICAgIGJvb2wgaXNBdHRyaWJ1dGUgPSB0eXBlID09IEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJU
eXBlOwotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eSogd29ya2VyQ29udGV4dFByb3h5ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRy
aWV2ZSgpOwotICAgIGlmICh3b3JrZXJDb250ZXh0UHJveHkpCi0gICAgICAgIHJldHVybiB3b3Jr
ZXJDb250ZXh0UHJveHktPmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGlz
QXR0cmlidXRlLCBmaW5kT25seSk7Ci0jZW5kaWYKLQotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQ
cm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7
Ci0gICAgaWYgKHByb3h5KSB7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QqIGxpc3QgPSBw
cm94eS0+b2JqZWN0TGlzdGVuZXJzKCk7Ci0gICAgICAgIHJldHVybiBmaW5kT25seSA/IGxpc3Qt
PmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkgOiBsaXN0LT5maW5kT3JDcmVhdGVXcmFw
cGVyPFY4T2JqZWN0RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHZhbHVlLCBpc0F0dHJp
YnV0ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4oKTsK
LX0KLQotQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25hYm9ydCkKLXsKLSAgICBJTkNf
U1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5vbmFib3J0Ll9nZXQiKTsKLSAgICBYTUxIdHRwUmVx
dWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbmFib3J0KCkpIHsKLSAgICAgICAgVjhP
YmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRM
aXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbmFib3J0KCkpOwotICAgICAgICB2ODo6TG9jYWw8
djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwot
ICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJuIHY4OjpOdWxsKCk7
Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdE9uYWJvcnQpCi17Ci0gICAgSU5D
X1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25hYm9ydC5fc2V0Iik7Ci0gICAgWE1MSHR0cFJl
cXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9s
ZGVyKCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHhtbEh0dHBS
ZXF1ZXN0LT5vbmFib3J0KCkpIHsKLSAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVx
dWVzdC0+b25hYm9ydCgpKTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExp
c3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAgICByZW1v
dmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVuZXIsIFY4Q3VzdG9tOjpr
WE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENsZWFy
IHRoZSBsaXN0ZW5lci4KLSAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9uYWJvcnQoMCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0
RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgdmFsdWUsIEF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXJUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICAgICAgeG1s
SHR0cFJlcXVlc3QtPnNldE9uYWJvcnQobGlzdGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlk
ZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtYTUxIdHRwUmVx
dWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1BQ0NFU1NPUl9HRVRURVIo
WE1MSHR0cFJlcXVlc3RPbmVycm9yKQotewotICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1
ZXN0Lm9uZXJyb3IuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENs
YXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAoeG1sSHR0
cFJlcXVlc3QtPm9uZXJyb3IoKSkgewotICAgICAgICBSZWZQdHI8VjhPYmplY3RFdmVudExpc3Rl
bmVyPiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0
dHBSZXF1ZXN0LT5vbmVycm9yKCkpOwotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhM
aXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICByZXR1cm4g
djhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci19Ci0KLUFDQ0VTU09S
X1NFVFRFUihYTUxIdHRwUmVxdWVzdE9uZXJyb3IpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1M
SHR0cFJlcXVlc3Qub25lcnJvci5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBS
ZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVl
c3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwotICAgIGlm
ICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbmVycm9y
KCkpIHsKLSAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0
aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdC0+b25lcnJvcigp
KTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVu
ZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRl
bmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RD
YWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4K
LSAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9uZXJyb3IoMCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4
bWxIdHRwUmVxdWVzdCwgdmFsdWUsIEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNl
dE9uZXJyb3IobGlzdGVuZXIpOwotICAgICAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShp
bmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1BQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RP
bmxvYWQpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25sb2FkLl9nZXQi
KTsKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQ
UkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbmxvYWQo
KSkgewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nh
c3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3QtPm9ubG9hZCgpKTsKLSAg
ICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlz
dGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJl
dHVybiB2ODo6TnVsbCgpOwotfQotCi1BQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RPbmxv
YWQpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25sb2FkLl9zZXQiKTsK
LSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVR
VUVTVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAg
ICBpZiAoeG1sSHR0cFJlcXVlc3QtPm9ubG9hZCgpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVy
Kj4oeG1sSHR0cFJlcXVlc3QtPm9ubG9hZCgpKTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAg
ICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVuZXIs
IFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbmxvYWQoMCk7Ci0KLSAgICB9IGVsc2UgewotICAgICAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHhtbEh0
dHBSZXF1ZXN0LCB2YWx1ZSwgQXR0cmlidXRlRXZlbnRMaXN0ZW5lclR5cGUsIGZhbHNlKTsKLSAg
ICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25s
b2FkKGxpc3RlbmVyLmdldCgpKTsKLSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3ko
aW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0
T25sb2Fkc3RhcnQpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25sb2Fk
c3RhcnQuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5k
ZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAoeG1sSHR0cFJlcXVl
c3QtPm9ubG9hZHN0YXJ0KCkpIHsKLSAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0
ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0
LT5vbmxvYWRzdGFydCgpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVu
ZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHY4TGlz
dGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQotCi1BQ0NFU1NPUl9TRVRU
RVIoWE1MSHR0cFJlcXVlc3RPbmxvYWRzdGFydCkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5YTUxI
dHRwUmVxdWVzdC5vbmxvYWRzdGFydC5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0
dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJl
cXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwotICAg
IGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbmxv
YWRzdGFydCgpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVy
ID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3QtPm9u
bG9hZHN0YXJ0KCkpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVu
ZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgIHJlbW92ZUhp
ZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lciwgVjhDdXN0b206OmtYTUxI
dHRwUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2xlYXIgdGhl
IGxpc3RlbmVyLgotICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25sb2Fkc3RhcnQoMCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0
RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgdmFsdWUsIEF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXJUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICAgICAgeG1s
SHR0cFJlcXVlc3QtPnNldE9ubG9hZHN0YXJ0KGxpc3RlbmVyKTsKLSAgICAgICAgICAgIGNyZWF0
ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprWE1MSHR0
cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotQUNDRVNTT1JfR0VU
VEVSKFhNTEh0dHBSZXF1ZXN0T25wcm9ncmVzcykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5YTUxI
dHRwUmVxdWVzdC5vbnByb2dyZXNzLl9nZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0
cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVx
dWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAg
aWYgKHhtbEh0dHBSZXF1ZXN0LT5vbnByb2dyZXNzKCkpIHsKLSAgICAgICAgVjhPYmplY3RFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+
KHhtbEh0dHBSZXF1ZXN0LT5vbnByb2dyZXNzKCkpOwotICAgICAgICB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAg
ICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci19Ci0K
LUFDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdE9ucHJvZ3Jlc3MpCi17Ci0gICAgSU5DX1NU
QVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25wcm9ncmVzcy5fc2V0Iik7Ci0gICAgWE1MSHR0cFJl
cXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9s
ZGVyKCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHhtbEh0dHBS
ZXF1ZXN0LT5vbnByb2dyZXNzKCkpIHsKLSAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRw
UmVxdWVzdC0+b25wcm9ncmVzcygpKTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAg
ICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVuZXIsIFY4Q3Vz
dG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ucHJvZ3Jl
c3MoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgdmFsdWUsIEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXJUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAgICAg
ICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ucHJvZ3Jlc3MobGlzdGVuZXIpOwotICAgICAgICAg
ICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206
OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1BQ0NF
U1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RPbnJlYWR5c3RhdGVjaGFuZ2UpCi17Ci0gICAgSU5D
X1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlLl9nZXQiKTsKLSAg
ICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVT
VCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbnJlYWR5c3RhdGVj
aGFuZ2UoKSkgewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3Rh
dGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3QtPm9ucmVhZHlz
dGF0ZWNoYW5nZSgpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIg
PSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHY4TGlzdGVu
ZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQotCi1BQ0NFU1NPUl9TRVRURVIo
WE1MSHR0cFJlcXVlc3RPbnJlYWR5c3RhdGVjaGFuZ2UpCi17Ci0gICAgSU5DX1NUQVRTKCJET00u
WE1MSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlLl9zZXQiKTsKLSAgICBYTUxIdHRwUmVx
dWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAgICBpZiAoeG1sSHR0cFJl
cXVlc3QtPm9ucmVhZHlzdGF0ZWNoYW5nZSgpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50
TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4o
eG1sSHR0cFJlcXVlc3QtPm9ucmVhZHlzdGF0ZWNoYW5nZSgpKTsKLSAgICAgICAgICAgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0
KCk7Ci0gICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHY4
TGlzdGVuZXIsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgeG1sSHR0cFJlcXVl
c3QtPnNldE9ucmVhZHlzdGF0ZWNoYW5nZSgwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHhtbEh0dHBSZXF1
ZXN0LCB2YWx1ZSwgQXR0cmlidXRlRXZlbnRMaXN0ZW5lclR5cGUsIGZhbHNlKTsKLSAgICAgICAg
aWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25yZWFkeXN0
YXRlY2hhbmdlKGxpc3RlbmVyLmdldCgpKTsKLSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVu
ZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNo
ZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBS
ZXF1ZXN0UmVzcG9uc2VUZXh0KQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgbmVlZGVk
IGJlY2F1c2Ugd2Via2l0IHNldCB0aGlzIGdldHRlciBhcyBjdXN0b20uCkBAIC0yODMsNyArNTgs
NyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RBZGRFdmVudExpc3RlbmVyKQog
ICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoKSIpOwog
ICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFV
RVNULCBhcmdzLkhvbGRlcigpKTsKIAotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
ciA9IGdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIGFyZ3NbMV0sIE9iamVjdEV2ZW50
TGlzdGVuZXJUeXBlLCBmYWxzZSk7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
ID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKHhtbEh0dHBSZXF1ZXN0LCBhcmdzWzFd
LCBmYWxzZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUpOwogICAgIGlmIChsaXN0ZW5lcikgewogICAg
ICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICAgICAgYm9v
bCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CkBAIC0yOTksNyArNzQsNyBA
QCBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RSZW1vdmVFdmVudExpc3RlbmVyKQog
ICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIp
OwogICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBS
RVFVRVNULCBhcmdzLkhvbGRlcigpKTsKIAotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0
ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIGFyZ3NbMV0sIE9iamVjdEV2
ZW50TGlzdGVuZXJUeXBlLCB0cnVlKTsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIGFyZ3Nb
MV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPbmx5KTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAg
ICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wg
dXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNw
cAppbmRleCBiYmM2OWRkLi45MzIzZjcxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcApAQCAtMzQs
NyArMzQsNiBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOE9iamVjdEV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgpAQCAtNDMsMjEyICs0MiwxNCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVw
bG9hZE9uYWJvcnQpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQu
b25hYm9ydC5fZ2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0
VXBsb2FkID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVl
c3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVy
KCkpOwotICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25hYm9ydCgpKSB7Ci0gICAgICAg
IFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2
ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25hYm9ydCgpKTsKLSAgICAgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJP
YmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2
ODo6TnVsbCgpOwotfQotCi1BQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmFi
b3J0KQotewotICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9uYWJvcnQu
X3NldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2Fk
PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKLSAg
ICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9h
ZC0+b25hYm9ydCgpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3Rl
bmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RV
cGxvYWQtPm9uYWJvcnQoKSk7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhM
aXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAgcmVt
b3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2OExpc3RlbmVyLCBWOEN1c3RvbTo6
a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVh
ciB0aGUgbGlzdGVuZXIuCi0gICAgICAgIHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5zZXRPbmFib3J0
KDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVz
dCA9IHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5hc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKTsKLSAg
ICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBw
cm94eS0+b2JqZWN0TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhPYmplY3RFdmVu
dExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFsdWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxp
c3RlbmVyKSB7Ci0gICAgICAgICAgICB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25hYm9ydChs
aXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVy
KCksIHZhbHVlLCBWOEN1c3RvbTo6a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9uZXJy
b3IpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25lcnJvci5f
Z2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+
KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOwotICAg
IGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25lcnJvcigpKSB7Ci0gICAgICAgIFY4T2JqZWN0
RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVu
ZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25lcnJvcigpKTsKLSAgICAgICAgdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsK
LSAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgp
OwotfQotCi1BQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmVycm9yKQotewot
ICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9uZXJyb3IuX3NldCIpOwot
ICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNz
SW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAodmFs
dWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25lcnJv
cigpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3Rh
dGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9u
ZXJyb3IoKSk7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9
IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVu
RGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2OExpc3RlbmVyLCBWOEN1c3RvbTo6a1hNTEh0dHBS
ZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0aGUgbGlz
dGVuZXIuCi0gICAgICAgIHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5zZXRPbmVycm9yKDApOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IHhtbEh0
dHBSZXF1ZXN0VXBsb2FkLT5hc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKTsKLSAgICAgICAgVjhQ
cm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+b2Jq
ZWN0TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhPYmplY3RFdmVudExpc3RlbmVy
Pihwcm94eS0+ZnJhbWUoKSwgdmFsdWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7
Ci0gICAgICAgICAgICB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25lcnJvcihsaXN0ZW5lcik7
Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVl
LCBWOEN1c3RvbTo6a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9ubG9hZCkKLXsKLSAg
ICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5vbmxvYWQuX2dldCIpOwotICAg
IFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5k
ZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAoeG1sSHR0
cFJlcXVlc3RVcGxvYWQtPm9ubG9hZCgpKSB7Ci0gICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRw
UmVxdWVzdFVwbG9hZC0+b25sb2FkKCkpOwotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4g
djhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICByZXR1
cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci19Ci0KLUFDQ0VT
U09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9ubG9hZCkKLXsKLSAgICBJTkNfU1RBVFMo
IkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5vbmxvYWQuX3NldCIpOwotICAgIFhNTEh0dHBSZXF1
ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBS
RVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7
Ci0gICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25sb2FkKCkpIHsKLSAgICAgICAg
ICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVj
dEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25sb2FkKCkpOwotICAgICAg
ICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlz
dGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5I
b2xkZXIoKSwgdjhMaXN0ZW5lciwgVjhDdXN0b206OmtYTUxIdHRwUmVxdWVzdENhY2hlSW5kZXgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgotICAgICAgICB4
bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25sb2FkKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5h
c3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKTsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFBy
b3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
LSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCktPmZp
bmRPckNyZWF0ZVdyYXBwZXI8VjhPYmplY3RFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwg
dmFsdWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB4bWxI
dHRwUmVxdWVzdFVwbG9hZC0+c2V0T25sb2FkKGxpc3RlbmVyKTsKLSAgICAgICAgICAgIGNyZWF0
ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprWE1MSHR0
cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotQUNDRVNTT1JfR0VU
VEVSKFhNTEh0dHBSZXF1ZXN0VXBsb2FkT25sb2Fkc3RhcnQpCi17Ci0gICAgSU5DX1NUQVRTKCJE
T00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25sb2Fkc3RhcnQuX2dldCIpOwotICAgIFhNTEh0dHBS
ZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhU
VFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAoeG1sSHR0cFJlcXVlc3RV
cGxvYWQtPm9ubG9hZHN0YXJ0KCkpIHsKLSAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBs
aXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1
ZXN0VXBsb2FkLT5vbmxvYWRzdGFydCgpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0
dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6TnVsbCgpOwotfQotCi1BQ0NF
U1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmxvYWRzdGFydCkKLXsKLSAgICBJTkNf
U1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5vbmxvYWRzdGFydC5fc2V0Iik7Ci0gICAg
WE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRl
eDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh2YWx1ZS0+
SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmxvYWRzdGFy
dCgpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3Rh
dGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9u
bG9hZHN0YXJ0KCkpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVu
ZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgIHJlbW92ZUhp
ZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lciwgVjhDdXN0b206OmtYTUxI
dHRwUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2xlYXIgdGhl
IGxpc3RlbmVyLgotICAgICAgICB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25sb2Fkc3RhcnQo
MCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0
ID0geG1sSHR0cFJlcXVlc3RVcGxvYWQtPmFzc29jaWF0ZWRYTUxIdHRwUmVxdWVzdCgpOwotICAg
ICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgICAgICBpZiAoIXByb3h5KQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHBy
b3h5LT5vYmplY3RMaXN0ZW5lcnMoKS0+ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOE9iamVjdEV2ZW50
TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCB2YWx1ZSwgZmFsc2UpOwotICAgICAgICBpZiAobGlz
dGVuZXIpIHsKLSAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5zZXRPbmxvYWRzdGFy
dChsaXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9s
ZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9u
cHJvZ3Jlc3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25w
cm9ncmVzcy5fZ2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0
VXBsb2FkID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVl
c3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVy
KCkpOwotICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25wcm9ncmVzcygpKSB7Ci0gICAg
ICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVj
dEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25wcm9ncmVzcygpKTsKLSAg
ICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlz
dGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJl
dHVybiB2ODo6TnVsbCgpOwotfQotCi1BQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxv
YWRPbnByb2dyZXNzKQotewotICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2Fk
Lm9ucHJvZ3Jlc3MuX3NldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVx
dWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBS
ZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhv
bGRlcigpKTsKLSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlmICh4bWxIdHRw
UmVxdWVzdFVwbG9hZC0+b25wcm9ncmVzcygpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50
TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4o
eG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ucHJvZ3Jlc3MoKSk7Ci0gICAgICAgICAgICB2ODo6TG9j
YWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgp
OwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2OExp
c3RlbmVyLCBWOEN1c3RvbTo6a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCi0gICAgICAgIHhtbEh0dHBSZXF1ZXN0
VXBsb2FkLT5zZXRPbnByb2dyZXNzKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFhNTEh0dHBS
ZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5hc3NvY2lhdGVk
WE1MSHR0cFJlcXVlc3QoKTsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRy
aWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAg
aWYgKCFwcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0
ZVdyYXBwZXI8VjhPYmplY3RFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFsdWUsIGZh
bHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB4bWxIdHRwUmVxdWVz
dFVwbG9hZC0+c2V0T25wcm9ncmVzcyhsaXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVhdGVIaWRk
ZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a1hNTEh0dHBSZXF1
ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIENBTExCQUNLX0ZVTkNfREVD
TChYTUxIdHRwUmVxdWVzdFVwbG9hZEFkZEV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRT
KCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgWE1M
SHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6
WE1MSFRUUFJFUVVFU1RVUExPQUQsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgWE1MSHR0cFJlcXVl
c3QqIHhtbEh0dHBSZXF1ZXN0ID0geG1sSHR0cFJlcXVlc3RVcGxvYWQtPmFzc29jaWF0ZWRYTUxI
dHRwUmVxdWVzdCgpOwotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1s
SHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKCFwcm94eSkK
LSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAgIFJlZlB0cjxFdmVudExpc3Rl
bmVyPiBsaXN0ZW5lciA9IHByb3h5LT5vYmplY3RMaXN0ZW5lcnMoKS0+ZmluZE9yQ3JlYXRlV3Jh
cHBlcjxWOE9iamVjdEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCBhcmdzWzFdLCBmYWxz
ZSk7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpn
ZXRFdmVudExpc3RlbmVyKHhtbEh0dHBSZXF1ZXN0LCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJG
aW5kT3JDcmVhdGUpOwogICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgICBTdHJpbmcgdHlwZSA9
IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJn
c1syXS0+Qm9vbGVhblZhbHVlKCk7CkBAIC0yNjUsMTIgKzY2LDggQEAgQ0FMTEJBQ0tfRlVOQ19E
RUNMKFhNTEh0dHBSZXF1ZXN0VXBsb2FkUmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICBYTUxIdHRw
UmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxI
VFRQUkVRVUVTVFVQTE9BRCwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBYTUxIdHRwUmVxdWVzdCog
eG1sSHR0cFJlcXVlc3QgPSB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+YXNzb2NpYXRlZFhNTEh0dHBS
ZXF1ZXN0KCk7Ci0gICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRw
UmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAoIXByb3h5KQotICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOyAvLyBQcm9iYWJseSBsZWFrZWQuCi0KLSAgICBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+b2JqZWN0TGlzdGVuZXJzKCkt
PmZpbmRXcmFwcGVyKGFyZ3NbMV0sIGZhbHNlKTsKIAorICAgIFJlZlB0cjxFdmVudExpc3RlbmVy
PiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVz
dCwgYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9ubHkpOwogICAgIGlmIChsaXN0ZW5lcikg
ewogICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICAg
ICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>