<?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>164206</bug_id>
          
          <creation_ts>2016-10-30 09:09:14 -0700</creation_ts>
          <short_desc>Move Element, NamedNodeMap, and DOMStringMap from ExceptionCode to Exception</short_desc>
          <delta_ts>2017-11-01 15:53:10 -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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=179141</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1246216</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-30 09:09:14 -0700</bug_when>
    <thetext>Move Element, NamedNodeMap, and DOMStringMap from ExceptionCode to Exception</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246225</commentid>
    <comment_count>1</comment_count>
      <attachid>293351</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-30 10:02:31 -0700</bug_when>
    <thetext>Created attachment 293351
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246254</commentid>
    <comment_count>2</comment_count>
      <attachid>293351</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-30 11:54:11 -0700</bug_when>
    <thetext>Comment on attachment 293351
Patch

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

r=me but looks like GTK / Win are possibly broken.

&gt; Source/WebCore/ChangeLog:12
&gt; +        true any time an exception is raised. Since true tealls the caller to return

&quot;tells&quot;

&gt; Source/WebCore/ChangeLog:26
&gt; +        removeAttributeNode. Changed to use is&lt;Document&gt; and is&lt;Attr&gt; instead of

Why is this better for performance? The common case is likely an Element. For an Element, we used to do a single virtual function call (nodeType()), and now we have 2 branches:
- isDocumentNode() which is non-virtual
- isAttributeNode() which is virtual

It looks to me that only adopting a Document became a bit faster but this is likely not a common case.

&gt; Source/WebCore/dom/DatasetDOMStringMap.cpp:196
&gt; +ExceptionOr&lt;void&gt; DatasetDOMStringMap::setItem(const String&amp; name, const String&amp; value) const

I don&apos;t feel strongly but I personally feel making such setters const is a bit confusing. I read your explanation in the Changelog but even so.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:669
&gt; +    auto result = parsedElement.get().setInnerHTML(&quot;&lt;span &quot; + text + &quot;&gt;&lt;/span&gt;&quot;);

don&apos;t we usually use parsedElement-&gt;setInnerHTML() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246256</commentid>
    <comment_count>3</comment_count>
      <attachid>293351</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-30 12:21:08 -0700</bug_when>
    <thetext>Comment on attachment 293351
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:26
&gt;&gt; +        removeAttributeNode. Changed to use is&lt;Document&gt; and is&lt;Attr&gt; instead of
&gt; 
&gt; Why is this better for performance? The common case is likely an Element. For an Element, we used to do a single virtual function call (nodeType()), and now we have 2 branches:
&gt; - isDocumentNode() which is non-virtual
&gt; - isAttributeNode() which is virtual
&gt; 
&gt; It looks to me that only adopting a Document became a bit faster but this is likely not a common case.

Good point, I will change it back. I did not realize that isAttributeNode was virtual.

&gt;&gt; Source/WebCore/dom/DatasetDOMStringMap.cpp:196
&gt;&gt; +ExceptionOr&lt;void&gt; DatasetDOMStringMap::setItem(const String&amp; name, const String&amp; value) const
&gt; 
&gt; I don&apos;t feel strongly but I personally feel making such setters const is a bit confusing. I read your explanation in the Changelog but even so.

I’m going to leave it this way. I agree there are arguments both ways. I think it’s better for these wrappers to be more true to their status as wrappers and not pretend they actually contain the data, but we could go the other direction too I suppose and try to do &quot;transitive const-ness&quot;.

&gt;&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:669
&gt;&gt; +    auto result = parsedElement.get().setInnerHTML(&quot;&lt;span &quot; + text + &quot;&gt;&lt;/span&gt;&quot;);
&gt; 
&gt; don&apos;t we usually use parsedElement-&gt;setInnerHTML() ?

The advantage of .get(). over -&gt; is that it doesn’t look like a pointer dereference. I’m not sure we have standardized either way. Kling suggested that we prefer .get(). but we didn’t really firm this up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246257</commentid>
    <comment_count>4</comment_count>
      <attachid>293351</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-30 12:29:03 -0700</bug_when>
    <thetext>Comment on attachment 293351
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/DatasetDOMStringMap.cpp:196
&gt;&gt;&gt; +ExceptionOr&lt;void&gt; DatasetDOMStringMap::setItem(const String&amp; name, const String&amp; value) const
&gt;&gt; 
&gt;&gt; I don&apos;t feel strongly but I personally feel making such setters const is a bit confusing. I read your explanation in the Changelog but even so.
&gt; 
&gt; I’m going to leave it this way. I agree there are arguments both ways. I think it’s better for these wrappers to be more true to their status as wrappers and not pretend they actually contain the data, but we could go the other direction too I suppose and try to do &quot;transitive const-ness&quot;.

No, changed my mind. I’ll do it the other way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246260</commentid>
    <comment_count>5</comment_count>
      <attachid>293363</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-30 12:33:03 -0700</bug_when>
    <thetext>Created attachment 293363
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246272</commentid>
    <comment_count>6</comment_count>
      <attachid>293368</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-30 15:13:19 -0700</bug_when>
    <thetext>Created attachment 293368
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246274</commentid>
    <comment_count>7</comment_count>
      <attachid>293369</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-30 15:21:28 -0700</bug_when>
    <thetext>Created attachment 293369
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246277</commentid>
    <comment_count>8</comment_count>
      <attachid>293370</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-30 15:28:27 -0700</bug_when>
    <thetext>Created attachment 293370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246286</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-30 15:39:02 -0700</bug_when>
    <thetext>Committed r208135: &lt;http://trac.webkit.org/changeset/208135&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293351</attachid>
            <date>2016-10-30 10:02:31 -0700</date>
            <delta_ts>2016-10-30 12:32:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164206-20161030095837.patch</filename>
            <type>text/plain</type>
            <size>104717</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODlhOGNiMzM4YzlkZjRk
NWY0OWZlMDcwYjdkNjc2YTE3YmY0MjE1Yi4uY2M4NmUxM2FkNzEyZjVlOWU2MTdkY2ZmMjEyMDg4
YjA0MmRlYjFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE2LTEwLTMwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIEVsZW1lbnQsIE5hbWVk
Tm9kZU1hcCwgYW5kIERPTVN0cmluZ01hcCBmcm9tIEV4Y2VwdGlvbkNvZGUgdG8gRXhjZXB0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyMDYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
U3RyaW5nTWFwOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKTogVXNlIG1vZGVybiBmb3IgbG9vcCwgYW5k
CisgICAgICAgIHVwZGF0ZXMgc2luY2UgdGhlIG5hbWVzIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGEg
dmVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6SlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKTog
VXNlIHByb3BhZ2F0ZUV4Y2VwdGlvbi4gQWxzbyByZXR1cm4KKyAgICAgICAgdHJ1ZSBhbnkgdGlt
ZSBhbiBleGNlcHRpb24gaXMgcmFpc2VkLiBTaW5jZSB0cnVlIHRlYWxscyB0aGUgY2FsbGVyIHRv
IHJldHVybgorICAgICAgICB3aXRob3V0IGRvaW5nIGFueSB3b3JrLCB3ZSBhbHdheXMgd2FudCB0
byByZXR1cm4gdGhhdCBvbiBhbiBleGNlcHRpb24uCisgICAgICAgICogZG9tL0RhdGFzZXRET01T
dHJpbmdNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YXNldERPTVN0cmluZ01hcDo6bmFt
ZXMpOiBSZW5hbWVkIGZyb20gZ2V0TmFtZXMgYW5kIG1hZGUgdGhpcworICAgICAgICByZXR1cm4g
YSBWZWN0b3IgaW5zdGVhZCBvZiBwb3B1bGF0aW5nIGEgcGFzc2VkLWluIHZlY3Rvci4KKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFzZXRET01TdHJpbmdNYXA6OnNldEl0ZW0pOiBVc2UgRXhjZXB0aW9u
T3IuCisgICAgICAgICogZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuaDogVXBkYXRlZCBmb3IgYWJv
dmUuIEFsc28gbWFkZSBhbGwgdGhlIG1lbWJlcgorICAgICAgICBmdW5jdGlvbnMgY29uc3QsIHdo
aWNoIG1vcmUgY29ycmVjdGx5IGV4cHJlc3NlcyB0aGUgZmFjdCB0aGF0IHRoaXMgb2JqZWN0Cisg
ICAgICAgIGlzIGEgdmlldyBvZiB0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCwgYnV0IGl0c2VsZiBo
YXMgbm8gc3RhdGUuIFRoYXQgd2lsbAorICAgICAgICBjb21lIGluIGhhbmR5IGlmIHdlIGV2ZXIg
ZGVjaWRlIG5vdCB0byBhbGxvY2F0ZSB0aGlzIGl0IGl0cyBvd24gYmxvY2sKKyAgICAgICAgb24g
dGhlIGhlYXAuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmFkb3B0Tm9kZSk6IFVwZGF0ZWQgdG8gdXNlIEV4Y2VwdGlvbk9yIGZvcgor
ICAgICAgICByZW1vdmVBdHRyaWJ1dGVOb2RlLiBDaGFuZ2VkIHRvIHVzZSBpczxEb2N1bWVudD4g
YW5kIGlzPEF0dHI+IGluc3RlYWQgb2YKKyAgICAgICAgbm9kZVR5cGUgZm9yIGJldHRlciBwZXJm
b3JtYW5jZS4gQ2hhbmdlZCB0byB1c2UgcmVtb3ZlIHJhdGhlciB0aGFuCisgICAgICAgIHJlbW92
ZUNoaWxkIGZvciBiZXR0ZXIgY2xhcml0eS4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6IFVzZSBFeGNlcHRpb25P
ci4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNyZWF0ZVNoYWRvd1Jvb3QpOiBEZWxldGVk
LiBVbnVzZWQuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRhY2hTaGFkb3cpOiBVc2Ug
RXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzaGFkb3dSb290Rm9yQmlu
ZGluZ3MpOiBUd2Vha2VkIGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6dXNlckFn
ZW50U2hhZG93Um9vdCk6IFJlbW92ZWQgdW5uZWVkZWQgaWYgc3RhdGVtbWVudC4KKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QpOiBUd2Vha2VkIGEg
Yml0LgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZSk6IFVzZSBF
eGNlcHRpb25Pci4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVO
Uyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTm9k
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGVOYW1l
KTogRGl0dG8uIEFsc28gY2hhbmdlZCByZXR1cm4gcmVzdWx0CisgICAgICAgIHRvIGJlIGEgUXVh
bGlmaWVkTmFtZSBpbnN0ZWFkIG9mIHVzaW5nIGFuIG91dCBhcmd1bWVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjptZXJnZVdpdGhOZXh0VGV4dE5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OnNldE91dGVySFRNTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6c2V0SW5uZXJIVE1MKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpt
YXRjaGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbG9zZXN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnNlcnRBZGphY2VudCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0QWRqYWNlbnRFbGVtZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0Tm9kZUZvckluc2VydGlvbik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6Y29udGV4dEVsZW1lbnRGb3JJbnNlcnRpb24pOiBBZGRlZC4gSGVscGVy
IGZvciB0aGUKKyAgICAgICAgaW5zZXJ0QWRqYWNlbnRIVE1MIGZ1bmN0aW9uIHRvIGVsaW1pbmF0
ZSBhIGxvY2FsIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0QWRq
YWNlbnRIVE1MKTogVXNlIEV4Y2VwdGlvbk9yLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
aW5zZXJ0QWRqYWNlbnRUZXh0KTogRGl0dG8uCisgICAgICAgICogZG9tL0VsZW1lbnQuaDogVXBk
YXRlZCBmb3IgYWJvdmUuCisgICAgICAgICogZG9tL0VsZW1lbnQuaWRsOiBVc2Ugbm9uLWxlZ2Fj
eSBleGNlcHRpb25zLgorCisgICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbSk6IFVzZSBFeGNlcHRpb25P
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c3VwcG9ydGVkUHJvcGVydHlOYW1l
cyk6IFVwZGF0ZWQgdG8gY2hlY2sKKyAgICAgICAgd2hpY2ggc3RyaW5ncyBzaG91bGQgYmUgcmVt
b3ZlZCB3aXRob3V0IGNvcHlpbmcgdGhlIHN0cmluZ3MuCisgICAgICAgIChXZWJDb3JlOjpOYW1l
ZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbU5TKTogVXNlIEV4Y2VwdGlvbk9yLgorICAgICAgICAo
V2ViQ29yZTo6TmFtZWROb2RlTWFwOjpzZXROYW1lZEl0ZW0pOiBEaXR0by4gUmVtb3ZlZCBvdmVy
bG9hZCBmb3IKKyAgICAgICAgbGVnYWN5IGJpbmRpbmdzOyBtb3ZlIHRoYXQgdG8gdGhlIGJpbmRp
bmdzIHRoZW1zZWx2ZXMuCisgICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5oOiBVcGRhdGVkIGZv
ciBhYm92ZS4gQWxzbyBtYWRlIGFsbCBtZW1iZXIgZnVuY3Rpb25zCisgICAgICAgIGNvbnN0IChz
ZWUgcmF0aW9uYWxlIGluIERhdGFzZXRET01TdHJpbmdNYXAgYWJvdmUpLgorICAgICAgICAqIGRv
bS9OYW1lZE5vZGVNYXAuaWRsOiBVc2Ugbm9uLWxlZ2FjeSBleGNlcHRpb25zLgorCisgICAgICAg
ICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6
c2V0T3V0ZXJUZXh0KTogVXBkYXRlZCBzaW5jZSBtZXJnZVdpdGhOZXh0VGV4dE5vZGUKKyAgICAg
ICAgbm93IHVzZXMgRXhjZXB0aW9uT3IuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NRWRpdG9y
LmNwcDogVXBkYXRlZCB0byB1c2UgRXhjZXB0aW9uT3IuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnRvRXJyb3JTdHJpbmcpOiBBZGRlZCBhbiBvdmVybG9hZCBmb3IKKyAgICAgICAgRXhjZXB0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNB
c1RleHQpOiBVcGRhdGVkIHRvIHVzZSBFeGNlcHRpb25Pci4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnNldFN0eWxlVGV4dCk6IFVwZGF0ZWQgdG8KKyAg
ICAgICAgdXNlIHRoZSBjb3JyZWN0IHZlcnNpb24gb2Ygc2V0QXR0cmlidXRlOyB0aGVyZSB3YXMg
bmV2ZXIgYSByaXNrIHRoYXQgdGhlcmUKKyAgICAgICAgd291bGQgYmUgYW4gZXhjZXB0aW9uLCBi
dXQgbm93IHRoYXQncyBjbGVhcmVyLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KTogRGVsZXRl
ZC4gV2FzIHVudXNlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6Y3JlYXRlU2hhZG93
Um9vdCk6IERpdHRvLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDogVXBkYXRlZCBm
b3IgYWJvdmUuCisKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1s
Mi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVOYW1lc3BhY2VBdHRyaWJ1dGVzKTogVXNl
IHVwZGF0ZWQgcGFyc2VBdHRyaWJ1dGVOYW1lLAorICAgICAgICB3aGljaCB1c2VzIEV4Y2VwdGlv
bk9yIGFuZCBhIHJldHVybiB2YWx1ZSBpbnN0ZWFkIG9mIGFuIG91dCBhcmd1bWVudC4KKyAgICAg
ICAgKFdlYkNvcmU6OmhhbmRsZUVsZW1lbnRBdHRyaWJ1dGVzKTogRGl0dG8uCisKIDIwMTYtMTAt
MzAgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgZ2FyZGVuaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggOWMxZmY1MDliNDI1OGIyMzQxNDEwM2U4
MzcwNjBlZTJkMGEyNjg3Ni4uNzE5NTEyYmU0MzUxMmEzY2I0ZTkzNTA3NTM2ODA3NmE3YTBlZWMz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE2LTEwLTMwICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIEVsZW1lbnQsIE5hbWVkTm9k
ZU1hcCwgYW5kIERPTVN0cmluZ01hcCBmcm9tIEV4Y2VwdGlvbkNvZGUgdG8gRXhjZXB0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyMDYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9ET01F
bGVtZW50Lm1tOgorICAgICAgICAoLVtET01FbGVtZW50IHNldElubmVySFRNTDpdKTogVXBkYXRl
ZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0T3V0ZXJIVE1M
Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bRE9NRWxlbWVudCBzZXRBdHRyaWJ1dGU6dmFsdWU6XSk6
IERpdHRvLgorICAgICAgICAoLVtET01FbGVtZW50IHNldEF0dHJpYnV0ZU5vZGU6XSk6IERpdHRv
LgorICAgICAgICAoLVtET01FbGVtZW50IHJlbW92ZUF0dHJpYnV0ZU5vZGU6XSk6IERpdHRvLgor
ICAgICAgICAoLVtET01FbGVtZW50IHNldEF0dHJpYnV0ZU5TOnF1YWxpZmllZE5hbWU6dmFsdWU6
XSk6IERpdHRvLgorICAgICAgICAoLVtET01FbGVtZW50IHNldEF0dHJpYnV0ZU5vZGVOUzpdKTog
RGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgbWF0Y2hlczpdKTogRGl0dG8uCisgICAgICAg
ICgtW0RPTUVsZW1lbnQgY2xvc2VzdDpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQg
d2Via2l0TWF0Y2hlc1NlbGVjdG9yOl0pOiBEaXR0by4KKyAgICAgICAgKiBET00vRE9NSFRNTEVs
ZW1lbnQubW06CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IGluc2VydEFkamFjZW50RWxlbWVu
dDplbGVtZW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgaW5zZXJ0QWRq
YWNlbnRIVE1MOmh0bWw6XSk6IERpdHRvLgorICAgICAgICAoLVtET01IVE1MRWxlbWVudCBpbnNl
cnRBZGphY2VudFRleHQ6dGV4dDpdKTogRGl0dG8uCisgICAgICAgICogRE9NL0RPTU5hbWVkTm9k
ZU1hcC5tbToKKyAgICAgICAgKC1bRE9NTmFtZWROb2RlTWFwIHNldE5hbWVkSXRlbTpdKTogRGl0
dG8uCisgICAgICAgICgtW0RPTU5hbWVkTm9kZU1hcCByZW1vdmVOYW1lZEl0ZW06XSk6IERpdHRv
LgorICAgICAgICAoLVtET01OYW1lZE5vZGVNYXAgc2V0TmFtZWRJdGVtTlM6XSk6IERpdHRvLgor
ICAgICAgICAoLVtET01OYW1lZE5vZGVNYXAgcmVtb3ZlTmFtZWRJdGVtTlM6bG9jYWxOYW1lOl0p
OiBEaXR0by4KKwogMjAxNi0xMC0yOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgQ29udmVydCBtb3JlIG9mIERPTSBmcm9tIEV4Y2VwdGlvbkNvZGUgdG8gRXhjZXB0
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggNGYzOTI1MTg3NDYxZDNiMjU3NWExNjYwMmI5ZWJiNWIxODNkMTI0
Ni4uMWQwN2ZmODY2YzYzOGY4YmI0YjU0ZGE5ZDk3OTJmOGEyNDc3ZmVmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMyIEBACisyMDE2LTEwLTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBNb3ZlIEVsZW1lbnQsIE5hbWVkTm9kZU1hcCwgYW5kIERPTVN0cmluZ01h
cCBmcm9tIEV4Y2VwdGlvbkNvZGUgdG8gRXhjZXB0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyMDYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb21f
bmFtZWRfbm9kZV9tYXBfc2V0X25hbWVkX2l0ZW0pOiBVcGRhdGVkIGV4Y2VwdGlvbiBoYW5kbGlu
Zy4KKyAgICAgICAgKHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcmVtb3ZlX25hbWVkX2l0ZW0p
OiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfc2V0X25hbWVkX2l0
ZW1fbnMpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcmVtb3Zl
X25hbWVkX2l0ZW1fbnMpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnQuY3BwOgorICAgICAgICAod2Via2l0X2Rv
bV9lbGVtZW50X3NldF9hdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9kb21fZWxl
bWVudF9zZXRfYXR0cmlidXRlX25vZGUpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9kb21fZWxl
bWVudF9yZW1vdmVfYXR0cmlidXRlX25vZGUpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9kb21f
ZWxlbWVudF9zZXRfYXR0cmlidXRlX25zKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfZG9tX2Vs
ZW1lbnRfc2V0X2F0dHJpYnV0ZV9ub2RlX25zKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfZG9t
X2VsZW1lbnRfbWF0Y2hlcyk6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9lbGVtZW50X2Ns
b3Nlc3QpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9kb21fZWxlbWVudF93ZWJraXRfbWF0Y2hl
c19zZWxlY3Rvcik6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9lbGVtZW50X2luc2VydF9h
ZGphY2VudF9lbGVtZW50KTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfZG9tX2VsZW1lbnRfaW5z
ZXJ0X2FkamFjZW50X2h0bWwpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9kb21fZWxlbWVudF9p
bnNlcnRfYWRqYWNlbnRfdGV4dCk6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9lbGVtZW50
X3NldF9pbm5lcl9odG1sKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfZG9tX2VsZW1lbnRfc2V0
X291dGVyX2h0bWwpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9tYWMvV0tET01FbGVtZW50Lm1tOgorICAgICAgICAoLVtXS0RPTUVsZW1lbnQgc2V0QXR0
cmlidXRlOnZhbHVlOl0pOiBEaXR0by4KKwogMjAxNi0xMC0zMCAgWXVzdWtlIFN1enVraSAgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbRE9NXSBJbnRyb2R1Y2UgV2ViQ29yZTo6
anNEeW5hbWljRG93bmNhc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCmluZGV4IDM2MTQ4ZjI0OTkxMDJk
ZWI3ODU1OTMzYzkxODdjN2E1MjI3ZmM2NDcuLmMxNGMxOTc5ODIyMzRjMzE1ZGQzY2FjODdmZjZi
NDE0Y2VjYjJhMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NT
U3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcApAQCAtMzQyLDcgKzM0Miw3IEBAIGJv
b2wgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIHN0YXRlLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOCiAgICAgYXV0byBzZXRQcm9wZXJ0eUludGVybmFsUmVzdWx0
ID0gd3JhcHBlZCgpLnNldFByb3BlcnR5SW50ZXJuYWwocHJvcGVydHlJbmZvLnByb3BlcnR5SUQs
IHByb3BlcnR5VmFsdWUsIGltcG9ydGFudCk7CiAgICAgaWYgKHNldFByb3BlcnR5SW50ZXJuYWxS
ZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0
ZSwgc2V0UHJvcGVydHlJbnRlcm5hbFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBwdXRSZXN1
bHQgPSBzZXRQcm9wZXJ0eUludGVybmFsUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAg
IHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01TdHJpbmdNYXBDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01T
dHJpbmdNYXBDdXN0b20uY3BwCmluZGV4IDJlYTkyN2E1YmE1NjcwMjliNTZkNTZjOWMwOTI1YWRm
YjMwZWRkZTguLjc4M2ZkZDNkODk2OWFlNzg0YTM1NTBjMWEwOTUxMmY1MmZjZTkzMjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5j
cHAKQEAgLTM3LDUxICszNyw0NSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWJvb2wgSlNET01TdHJpbmdNYXA6OmdldE93blByb3BlcnR5U2xvdERlbGVn
YXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQorYm9vbCBKU0RPTVN0cmluZ01hcDo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWdh
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGJvb2wgbmFtZUlzVmFsaWQ7CiAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBpdGVtID0gd3JhcHBlZCgpLml0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlO
YW1lKSwgbmFtZUlzVmFsaWQpOwogICAgIGlmIChuYW1lSXNWYWxpZCkgewotICAgICAgICBzbG90
LnNldFZhbHVlKHRoaXMsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqZXhlYywgaXRlbSkpOworICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXMsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGl0
ZW0pKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBKU0RPTVN0cmluZ01hcDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNET01TdHJpbmdNYXA6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIEpTRE9NU3Ry
aW5nTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NU3RyaW5nTWFwKj4ob2JqZWN0KTsKLSAg
ICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKLSAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZ2V0TmFt
ZXMobmFtZXMpOwotICAgIHNpemVfdCBsZW5ndGggPSBuYW1lcy5zaXplKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBuYW1lc1tpXSkpOwotCi0gICAgQmFzZTo6Z2V0
T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
KyAgICBmb3IgKGF1dG8mIG5hbWUgOiBqc0Nhc3Q8SlNET01TdHJpbmdNYXAqPihvYmplY3QpLT53
cmFwcGVkKCkubmFtZXMoKSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhzdGF0ZSwgbmFtZSkpOworICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJvb2wgSlNET01TdHJp
bmdNYXA6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJvcGVy
dHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQogewogI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCiAgICAgQ3VzdG9tRWxlbWVudFJl
YWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s7CiAjZW5kaWYKIAotICAgIEpT
RE9NU3RyaW5nTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NU3RyaW5nTWFwKj4oY2VsbCk7
CiAgICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQotICAgICAgICByZXR1cm4gQmFzZTo6
ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1
cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRlbGV0ZUl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmco
cHJvcGVydHlOYW1lKSk7CisgICAgICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxs
LCBzdGF0ZSwgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4ganNDYXN0PEpTRE9NU3RyaW5nTWFw
Kj4oY2VsbCktPndyYXBwZWQoKS5kZWxldGVJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3Bl
cnR5TmFtZSkpOwogfQogCi1ib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KQorYm9vbCBK
U0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgcmV0dXJuIGRlbGV0ZVByb3BlcnR5
KGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpKTsKKyAgICByZXR1cm4g
ZGVsZXRlUHJvcGVydHkoY2VsbCwgc3RhdGUsIElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4
KSk7CiB9CiAKLWJvb2wgSlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiwgYm9vbCYgcHV0UmVzdWx0KQorYm9vbCBKU0RPTVN0cmluZ01hcDo6cHV0RGVsZWdhdGUo
RXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiwgYm9vbCYgcHV0UmVzdWx0KQogewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgp
KQpAQCAtOTEsMTQgKzg1LDE3IEBAIGJvb2wgSlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWCiAgICAgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s7CiAjZW5kaWYK
IAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisgICAgU3RyaW5n
IHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHRydWUpOwogCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
d3JhcHBlZCgpLnNldEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgc3Ry
aW5nVmFsdWUsIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIHB1dFJl
c3VsdCA9ICFlYzsKLSAgICByZXR1cm4gIWVjOworICAgIGF1dG8gcmVzdWx0ID0gd3JhcHBlZCgp
LnNldEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShzdHJp
bmdWYWx1ZSkpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgcHJv
cGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgc2NvcGUsIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwdXRSZXN1bHQgPSB0cnVlOwor
ICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAppbmRleCA4MmUzYzI4MDRm
YzFhZDg1ZjFlNmQwZGM0YTVkOGM4MDZjMjg4ZWNkLi4yMWJlNGQwNmU3ZjRmN2RkMzdlMDE3OGU4
ZjM2ZWUxYzhhNDVjNzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1N0b3JhZ2VDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3Rv
cmFnZUN1c3RvbS5jcHAKQEAgLTEyMSwxNCArMTIxLDggQEAgYm9vbCBKU1N0b3JhZ2U6OnB1dERl
bGVnYXRlKEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFs
dWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkgewotICAgICAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB3
aGV0aGVyIHB1dERlbGVnYXRlKCkgc2hvdWxkIGhhbmRsZSB0aGUgcHV0IG9wZXJhdGlvbiAod2hp
Y2gKLSAgICAgICAgLy8gaWYgdHJ1ZSwgdGVsbHMgdGhlIGNhbGxlciBub3QgdG8gZXhlY3V0ZSB0
aGUgZ2VuZXJpYyBwdXQpLiBJdCBkb2VzIG5vdCBpbmRpY2F0ZSB3aGV0aGVyCi0gICAgICAgIC8v
IHB1dERlbGVnYXRlKCkgZGlkIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZSB0aGUgb3BlcmF0aW9uIG9y
IG5vdCAod2hpY2ggaXQgZGlkbid0IGluIHRoaXMKLSAgICAgICAgLy8gY2FzZSBkdWUgdG8gdGhl
IGV4Y2VwdGlvbikuCi0gICAgICAgIHB1dFJlc3VsdCA9IGZhbHNlOworICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KIAogICAg
IGF1dG8gc2V0SXRlbVJlc3VsdCA9IHdyYXBwZWQoKS5zZXRJdGVtKHByb3BlcnR5TmFtZVRvU3Ry
aW5nKHByb3BlcnR5TmFtZSksIHN0cmluZ1ZhbHVlKTsKICAgICBwdXRSZXN1bHQgPSAhc2V0SXRl
bVJlc3VsdC5oYXNFeGNlcHRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
YXRhc2V0RE9NU3RyaW5nTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3Ry
aW5nTWFwLmNwcAppbmRleCBkZjMxZDkwMDY1MjkyODY2MGY3ZmZiN2RiNTFkNDNkOGYyNTM0MjBk
Li4xYjY2NDY5ZTg2ZGVlYjMxYjc0ZDM3N2JkODhhNDE4ZmVjMjkwMmI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5j
bHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTQyLDI4ICsxNDEs
MzEgQEAgc3RhdGljIEF0b21pY1N0cmluZyBjb252ZXJ0UHJvcGVydHlOYW1lVG9BdHRyaWJ1dGVO
YW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICByZXR1cm4gY29udmVydFByb3BlcnR5TmFtZVRv
QXR0cmlidXRlTmFtZTxVQ2hhcj4oKm5hbWVJbXBsKTsKIH0KIAotdm9pZCBEYXRhc2V0RE9NU3Ry
aW5nTWFwOjpyZWYoKQordm9pZCBEYXRhc2V0RE9NU3RyaW5nTWFwOjpyZWYoKSBjb25zdAogewog
ICAgIG1fZWxlbWVudC5yZWYoKTsKIH0KIAotdm9pZCBEYXRhc2V0RE9NU3RyaW5nTWFwOjpkZXJl
ZigpCit2b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OmRlcmVmKCkgY29uc3QKIHsKICAgICBtX2Vs
ZW1lbnQuZGVyZWYoKTsKIH0KIAotdm9pZCBEYXRhc2V0RE9NU3RyaW5nTWFwOjpnZXROYW1lcyhW
ZWN0b3I8U3RyaW5nPiYgbmFtZXMpCitWZWN0b3I8U3RyaW5nPiBEYXRhc2V0RE9NU3RyaW5nTWFw
OjpuYW1lcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygpKQot
ICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CiAKLSAgICBmb3IgKGNv
bnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogbV9lbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigp
KSB7Ci0gICAgICAgIGlmIChpc1ZhbGlkQXR0cmlidXRlTmFtZShhdHRyaWJ1dGUubG9jYWxOYW1l
KCkpKQotICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGNvbnZlcnRBdHRyaWJ1dGVOYW1lVG9Qcm9w
ZXJ0eU5hbWUoYXR0cmlidXRlLmxvY2FsTmFtZSgpKSk7CisgICAgaWYgKG1fZWxlbWVudC5oYXNB
dHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBtX2VsZW1lbnQu
YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkQXR0cmlidXRl
TmFtZShhdHRyaWJ1dGUubG9jYWxOYW1lKCkpKQorICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVu
ZChjb252ZXJ0QXR0cmlidXRlTmFtZVRvUHJvcGVydHlOYW1lKGF0dHJpYnV0ZS5sb2NhbE5hbWUo
KSkpOworICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIG5hbWVzOwogfQogCi1jb25zdCBB
dG9taWNTdHJpbmcmIERhdGFzZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUsIGJvb2wmIGlzVmFsaWQpCitjb25zdCBBdG9taWNTdHJpbmcmIERhdGFzZXRET01T
dHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wmIGlzVmFsaWQp
IGNvbnN0CiB7CiAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgIGlmIChtX2VsZW1lbnQuaGFzQXR0
cmlidXRlcygpKSB7CkBAIC0xOTEsMTcgKzE5MywxNCBAQCBjb25zdCBBdG9taWNTdHJpbmcmIERh
dGFzZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wm
CiAgICAgcmV0dXJuIG51bGxBdG9tOwogfQogCi12b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OnNl
dEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+IERhdGFzZXRET01TdHJpbmdNYXA6OnNldEl0ZW0o
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIGlm
ICghaXNWYWxpZFByb3BlcnR5TmFtZShuYW1lKSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2VsZW1lbnQuc2V0QXR0cmlidXRlKGNv
bnZlcnRQcm9wZXJ0eU5hbWVUb0F0dHJpYnV0ZU5hbWUobmFtZSksIHZhbHVlLCBlYyk7CisgICAg
aWYgKCFpc1ZhbGlkUHJvcGVydHlOYW1lKG5hbWUpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU1lOVEFYX0VSUiB9OworICAgIHJldHVybiBtX2VsZW1lbnQuc2V0QXR0cmlidXRlKGNvbnZl
cnRQcm9wZXJ0eU5hbWVUb0F0dHJpYnV0ZU5hbWUobmFtZSksIHZhbHVlKTsKIH0KIAotYm9vbCBE
YXRhc2V0RE9NU3RyaW5nTWFwOjpkZWxldGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkKK2Jvb2wg
RGF0YXNldERPTVN0cmluZ01hcDo6ZGVsZXRlSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoY29udmVydFByb3BlcnR5
TmFtZVRvQXR0cmlidXRlTmFtZShuYW1lKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRE
T01TdHJpbmdNYXAuaAppbmRleCBmMTlhMDUwMmVjMWM3ZWNkOWExM2M1NDc4OGVlZjNlYzMzNzVh
ZjIxLi4yZTFhYTIyYTlmNWIxODhmYWJmNzMxZTJlYjZhZWM0NzZmZDE4NzE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmgKQEAgLTIzLDQxICsyMywzNSBAQAogICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRGF0YXNldERP
TVN0cmluZ01hcF9oCi0jZGVmaW5lIERhdGFzZXRET01TdHJpbmdNYXBfaAorI3ByYWdtYSBvbmNl
CiAKKyNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5o
IgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEVsZW1lbnQ7Ci10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBEYXRhc2V0RE9N
U3RyaW5nTWFwIGZpbmFsIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRGF0YXNldERPTVN0cmluZ01hcCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGV4cGxpY2l0IERh
dGFzZXRET01TdHJpbmdNYXAoRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgOiBtX2VsZW1lbnQo
ZWxlbWVudCkKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCByZWYoKTsKLSAgICB2b2lkIGRlcmVm
KCk7CisgICAgdm9pZCByZWYoKSBjb25zdDsKKyAgICB2b2lkIGRlcmVmKCkgY29uc3Q7CiAKLSAg
ICB2b2lkIGdldE5hbWVzKFZlY3RvcjxTdHJpbmc+Jik7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5n
JiBpdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCYgaXNWYWxpZCk7Ci0gICAgdm9pZCBzZXRJ
dGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIGJvb2wgZGVsZXRlSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIFZlY3Rv
cjxTdHJpbmc+IG5hbWVzKCkgY29uc3Q7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpdGVtKGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCYgaXNWYWxpZCkgY29uc3Q7CisgICAgRXhjZXB0aW9uT3I8
dm9pZD4gc2V0SXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNv
bnN0OworICAgIGJvb2wgZGVsZXRlSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogCi0g
ICAgRWxlbWVudCYgZWxlbWVudCgpIHsgcmV0dXJuIG1fZWxlbWVudDsgfQorICAgIEVsZW1lbnQm
IGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KIAogcHJpdmF0ZToKICAgICBF
bGVtZW50JiBtX2VsZW1lbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBEYXRhc2V0RE9NU3RyaW5nTWFwX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGIz
OWQ2ZjNhYTNhNGExNzY1ZTRiMWQ3MjA1YmIxZjEzYjk3ODljZjkuLjYxZjBmMjUwMzRkOWZiMDI1
NmUxNTQzYWI2Y2Q0YzAyN2FlZTE0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMTAw
OSwxNyArMTAwOSwxOCBAQCBSZWZQdHI8Tm9kZT4gRG9jdW1lbnQ6OmFkb3B0Tm9kZShOb2RlJiBz
b3VyY2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEV2ZW50UXVldWVTY29wZSBzY29wZTsK
IAotICAgIHN3aXRjaCAoc291cmNlLm5vZGVUeXBlKCkpIHsKLSAgICBjYXNlIERPQ1VNRU5UX05P
REU6CisgICAgaWYgKGlzPERvY3VtZW50Pihzb3VyY2UpKSB7CiAgICAgICAgIGVjID0gTk9UX1NV
UFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNhc2UgQVRUUklCVVRF
X05PREU6IHsgICAgICAgICAgICAgICAgICAgCisgICAgfQorICAgIGlmIChpczxBdHRyPihzb3Vy
Y2UpKSB7CiAgICAgICAgIGF1dG8mIGF0dHIgPSBkb3duY2FzdDxBdHRyPihzb3VyY2UpOwotICAg
ICAgICBpZiAoYXR0ci5vd25lckVsZW1lbnQoKSkKLSAgICAgICAgICAgIGF0dHIub3duZXJFbGVt
ZW50KCktPnJlbW92ZUF0dHJpYnV0ZU5vZGUoYXR0ciwgZWMpOwotICAgICAgICBicmVhazsKLSAg
ICB9ICAgICAgIAotICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gYXR0
ci5vd25lckVsZW1lbnQoKSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBlbGVtZW50LT5y
ZW1vdmVBdHRyaWJ1dGVOb2RlKGF0dHIpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgICAgICBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCku
Y29kZSgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHNvdXJjZS5pc1No
YWRvd1Jvb3QoKSkgewogICAgICAgICAgICAgLy8gU2hhZG93Um9vdCBjYW5ub3QgZGlzY29ubmVj
dCBpdHNlbGYgZnJvbSB0aGUgaG9zdCBub2RlLgogICAgICAgICAgICAgZWMgPSBISUVSQVJDSFlf
UkVRVUVTVF9FUlI7CkBAIC0xMDMyLDEwICsxMDMzLDEwIEBAIFJlZlB0cjxOb2RlPiBEb2N1bWVu
dDo6YWRvcHROb2RlKE5vZGUmIHNvdXJjZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKHNvdXJjZS5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIHNvdXJjZS5wYXJlbnROb2Rl
KCktPnJlbW92ZUNoaWxkKHNvdXJjZSwgZWMpOwotICAgICAgICAgICAgaWYgKGVjKQotICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJjZS5y
ZW1vdmUoKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICAg
ICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5k
ZXggYjFiMWVlZjFlNDRhODg1Y2NlYTc2YTdkMTdiODYzNzBmMWI4ZWJjYy4uM2M3YzhkMTViNGQx
M2Q1MThjYjM4ZGZiOWNlYjQxNTJjZTY2ZTc2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAt
MTIxNywxOSArMTIxNywxOCBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmdldEF0dHJp
YnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjbwogICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VV
UkkpKTsKIH0KIAotdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICgh
RG9jdW1lbnQ6OmlzVmFsaWROYW1lKGxvY2FsTmFtZSkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElE
X0NIQVJBQ1RFUl9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFEb2N1bWVu
dDo6aXNWYWxpZE5hbWUobG9jYWxOYW1lKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQ0hBUkFDVEVSX0VSUiB9OwogCiAgICAgc3luY2hyb25pemVBdHRyaWJ1dGUobG9jYWxO
YW1lKTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNhc2VBZGp1c3RlZExvY2FsTmFtZSA9IHNo
b3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UoKnRoaXMpID8gbG9jYWxOYW1lLmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlKCkgOiBsb2NhbE5hbWU7Ci0KKyAgICBhdXRvIGNhc2VBZGp1c3RlZExvY2FsTmFt
ZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UoKnRoaXMpID8gbG9jYWxOYW1lLmNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlKCkgOiBsb2NhbE5hbWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBlbGVt
ZW50RGF0YSgpID8gZWxlbWVudERhdGEoKS0+ZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKGNhc2VB
ZGp1c3RlZExvY2FsTmFtZSwgZmFsc2UpIDogRWxlbWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5k
OwotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lID0gaW5kZXggIT0gRWxlbWVudERhdGE6
OmF0dHJpYnV0ZU5vdEZvdW5kID8gYXR0cmlidXRlQXQoaW5kZXgpLm5hbWUoKSA6IFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sIGNhc2VBZGp1c3RlZExvY2FsTmFtZSwgbnVsbEF0b20pOwotICAgIHNl
dEF0dHJpYnV0ZUludGVybmFsKGluZGV4LCBxTmFtZSwgdmFsdWUsIE5vdEluU3luY2hyb25pemF0
aW9uT2ZMYXp5QXR0cmlidXRlKTsKKyAgICBhdXRvIG5hbWUgPSBpbmRleCAhPSBFbGVtZW50RGF0
YTo6YXR0cmlidXRlTm90Rm91bmQgPyBhdHRyaWJ1dGVBdChpbmRleCkubmFtZSgpIDogUXVhbGlm
aWVkTmFtZSB7IG51bGxBdG9tLCBjYXNlQWRqdXN0ZWRMb2NhbE5hbWUsIG51bGxBdG9tIH07Cisg
ICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoaW5kZXgsIG5hbWUsIHZhbHVlLCBOb3RJblN5bmNocm9u
aXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEVs
ZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlKQpAQCAtMTc1NiwxMiArMTc1NSwxMSBAQCBTaGFkb3dSb290KiBFbGVt
ZW50OjpzaGFkb3dSb290KCkgY29uc3QKICAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IGVsZW1l
bnRSYXJlRGF0YSgpLT5zaGFkb3dSb290KCkgOiBudWxscHRyOwogfQogCi0KIHZvaWQgRWxlbWVu
dDo6YWRkU2hhZG93Um9vdChSZWY8U2hhZG93Um9vdD4mJiBuZXdTaGFkb3dSb290KQogewogICAg
IEFTU0VSVCghc2hhZG93Um9vdCgpKTsKIAotICAgIFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3QgPSBu
ZXdTaGFkb3dSb290LmdldCgpOworICAgIFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3QgPSBuZXdTaGFk
b3dSb290OwogICAgIGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgpLnNldFNoYWRvd1Jvb3QoV1RGTW92
ZShuZXdTaGFkb3dSb290KSk7CiAKICAgICBzaGFkb3dSb290LnNldEhvc3QodGhpcyk7CkBAIC0x
Nzg1LDYgKzE3ODMsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZVNoYWRvd1Jvb3QoKQogICAgIFJl
ZlB0cjxTaGFkb3dSb290PiBvbGRSb290ID0gc2hhZG93Um9vdCgpOwogICAgIGlmICghb2xkUm9v
dCkKICAgICAgICAgcmV0dXJuOworCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
UG9wU2hhZG93Um9vdCgqdGhpcywgKm9sZFJvb3QpOwogICAgIGRvY3VtZW50KCkucmVtb3ZlRm9j
dXNlZE5vZGVPZlN1YnRyZWUob2xkUm9vdC5nZXQoKSk7CiAKQEAgLTE3OTgsMTYgKzE3OTcsNiBA
QCB2b2lkIEVsZW1lbnQ6OnJlbW92ZVNoYWRvd1Jvb3QoKQogICAgIG5vdGlmeUNoaWxkTm9kZVJl
bW92ZWQoKnRoaXMsICpvbGRSb290KTsKIH0KIAotU2hhZG93Um9vdCogRWxlbWVudDo6Y3JlYXRl
U2hhZG93Um9vdChFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoYWx3YXlzQ3JlYXRlVXNl
ckFnZW50U2hhZG93Um9vdCgpKQotICAgICAgICByZXR1cm4gJmVuc3VyZVVzZXJBZ2VudFNoYWRv
d1Jvb3QoKTsKLQotICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi0KIHN0YXRpYyBib29sIGNhbkF0dGFjaEF1dGhvclNoYWRvd1Jvb3QoY29u
c3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNl
dDxBdG9taWNTdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKQEAgLTE4NDMsMjMgKzE4MzIsMTQgQEAg
c3RhdGljIGJvb2wgY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVt
ZW50KQogICAgIHJldHVybiB0YWdOYW1lcy5nZXQoKS5jb250YWlucyhsb2NhbE5hbWUpIHx8IERv
Y3VtZW50Ojp2YWxpZGF0ZUN1c3RvbUVsZW1lbnROYW1lKGxvY2FsTmFtZSkgPT0gQ3VzdG9tRWxl
bWVudE5hbWVWYWxpZGF0aW9uU3RhdHVzOjpWYWxpZDsKIH0KIAotUmVmUHRyPFNoYWRvd1Jvb3Q+
IEVsZW1lbnQ6OmF0dGFjaFNoYWRvdyhjb25zdCBTaGFkb3dSb290SW5pdCYgaW5pdCwgRXhjZXB0
aW9uQ29kZSYgZWMpCitFeGNlcHRpb25PcjxSZWY8U2hhZG93Um9vdD4+IEVsZW1lbnQ6OmF0dGFj
aFNoYWRvdyhjb25zdCBTaGFkb3dSb290SW5pdCYgaW5pdCkKIHsKLSAgICBpZiAoIWNhbkF0dGFj
aEF1dGhvclNoYWRvd1Jvb3QoKnRoaXMpKSB7Ci0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9F
UlI7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChzaGFkb3dSb290
KCkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKGluaXQubW9kZSA9PSBTaGFkb3dSb290TW9kZTo6VXNl
ckFnZW50KSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KKyAgICBpZiAoIWNhbkF0dGFjaEF1dGhvclNoYWRvd1Jvb3QoKnRoaXMpKQor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICBpZiAo
c2hhZG93Um9vdCgpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9F
UlIgfTsKKyAgICBpZiAoaW5pdC5tb2RlID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKICAgICBhdXRvIHNoYWRvdyA9
IFNoYWRvd1Jvb3Q6OmNyZWF0ZShkb2N1bWVudCgpLCBpbml0Lm1vZGUpOwogICAgIGFkZFNoYWRv
d1Jvb3Qoc2hhZG93LmNvcHlSZWYoKSk7CiAgICAgcmV0dXJuIFdURk1vdmUoc2hhZG93KTsKQEAg
LTE4NjcsMzggKzE4NDcsMzIgQEAgUmVmUHRyPFNoYWRvd1Jvb3Q+IEVsZW1lbnQ6OmF0dGFjaFNo
YWRvdyhjb25zdCBTaGFkb3dSb290SW5pdCYgaW5pdCwgRXhjZXB0aW9uQ28KIAogU2hhZG93Um9v
dCogRWxlbWVudDo6c2hhZG93Um9vdEZvckJpbmRpbmdzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkg
Y29uc3QKIHsKLSAgICBTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpOwotICAgIGlmICgh
cm9vdCkKKyAgICBhdXRvKiBzaGFkb3cgPSBzaGFkb3dSb290KCk7CisgICAgaWYgKCFzaGFkb3cp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHJvb3QtPm1vZGUoKSAhPSBTaGFk
b3dSb290TW9kZTo6T3BlbikgewotICAgICAgICBpZiAoIUpTQzo6anNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+d29ybGQoKS5zaGFkb3dSb290
SXNBbHdheXNPcGVuKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAg
cmV0dXJuIHJvb3Q7CisgICAgaWYgKHNoYWRvdy0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpP
cGVuKQorICAgICAgICByZXR1cm4gc2hhZG93OworICAgIGlmIChKU0M6OmpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPndvcmxkKCkuc2hhZG93
Um9vdElzQWx3YXlzT3BlbigpKQorICAgICAgICByZXR1cm4gc2hhZG93OworICAgIHJldHVybiBu
dWxscHRyOwogfQogCi0KIFNoYWRvd1Jvb3QqIEVsZW1lbnQ6OnVzZXJBZ2VudFNoYWRvd1Jvb3Qo
KSBjb25zdAogewotICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gdGhpcy0+c2hhZG93
Um9vdCgpKSB7Ci0gICAgICAgIEFTU0VSVChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9v
dE1vZGU6OlVzZXJBZ2VudCk7Ci0gICAgICAgIHJldHVybiBzaGFkb3dSb290OwotICAgIH0KLSAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBBU1NFUlQoIXNoYWRvd1Jvb3QoKSB8fCBzaGFkb3dSb290
KCktPm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KTsKKyAgICByZXR1cm4gc2hh
ZG93Um9vdCgpOwogfQogCiBTaGFkb3dSb290JiBFbGVtZW50OjplbnN1cmVVc2VyQWdlbnRTaGFk
b3dSb290KCkKIHsKLSAgICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gdXNlckFnZW50U2hhZG93
Um9vdCgpOwotICAgIGlmICghc2hhZG93Um9vdCkgewotICAgICAgICBhZGRTaGFkb3dSb290KFNo
YWRvd1Jvb3Q6OmNyZWF0ZShkb2N1bWVudCgpLCBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KSk7
Ci0gICAgICAgIHNoYWRvd1Jvb3QgPSB1c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgfQotICAg
IHJldHVybiAqc2hhZG93Um9vdDsKKyAgICBpZiAoYXV0byogc2hhZG93ID0gdXNlckFnZW50U2hh
ZG93Um9vdCgpKQorICAgICAgICByZXR1cm4gKnNoYWRvdzsKKyAgICBhdXRvIG5ld1NoYWRvdyA9
IFNoYWRvd1Jvb3Q6OmNyZWF0ZShkb2N1bWVudCgpLCBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50
KTsKKyAgICBTaGFkb3dSb290JiBzaGFkb3cgPSBuZXdTaGFkb3c7CisgICAgYWRkU2hhZG93Um9v
dChXVEZNb3ZlKG5ld1NoYWRvdykpOworICAgIHJldHVybiBzaGFkb3c7CiB9CiAKLSAgICAKICNp
ZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQogCiB2b2lkIEVsZW1lbnQ6OnNldElzRGVmaW5lZEN1
c3RvbUVsZW1lbnQoSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlJiBlbGVtZW50SW50ZXJmYWNlKQpA
QCAtMTk1Myw3ICsxOTI3LDYgQEAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUqIEVsZW1lbnQ6
OnJlYWN0aW9uUXVldWUoKSBjb25zdAogCiAjZW5kaWYKIAotCiBjb25zdCBBdG9taWNTdHJpbmcm
IEVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsKICAgICByZXR1cm4gcHNldWRvKCk7
CkBAIC0yMTU5LDI0ICsyMTMyLDI0IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8QXR0cj4+JiBFbGVt
ZW50OjphdHRyTm9kZUxpc3QoKQogICAgIHJldHVybiAqYXR0ck5vZGVMaXN0Rm9yRWxlbWVudCgq
dGhpcyk7CiB9CiAKLVJlZlB0cjxBdHRyPiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKEF0dHIm
IGF0dHJOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPFJlZlB0cjxBdHRyPj4g
RWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZShBdHRyJiBhdHRyTm9kZSkKIHsKICAgICBSZWZQdHI8
QXR0cj4gb2xkQXR0ck5vZGUgPSBhdHRySWZFeGlzdHMoYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgp
LmxvY2FsTmFtZSgpLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKCp0aGlzKSk7CiAgICAgaWYg
KG9sZEF0dHJOb2RlLmdldCgpID09ICZhdHRyTm9kZSkKLSAgICAgICAgcmV0dXJuICZhdHRyTm9k
ZTsgLy8gVGhpcyBBdHRyIGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhlIGVsZW1lbnQuCisgICAg
ICAgIHJldHVybiBXVEZNb3ZlKG9sZEF0dHJOb2RlKTsKIAogICAgIC8vIElOVVNFX0FUVFJJQlVU
RV9FUlI6IFJhaXNlZCBpZiBub2RlIGlzIGFuIEF0dHIgdGhhdCBpcyBhbHJlYWR5IGFuIGF0dHJp
YnV0ZSBvZiBhbm90aGVyIEVsZW1lbnQgb2JqZWN0LgogICAgIC8vIFRoZSBET00gdXNlciBtdXN0
IGV4cGxpY2l0bHkgY2xvbmUgQXR0ciBub2RlcyB0byByZS11c2UgdGhlbSBpbiBvdGhlciBlbGVt
ZW50cy4KLSAgICBpZiAoYXR0ck5vZGUub3duZXJFbGVtZW50KCkgJiYgYXR0ck5vZGUub3duZXJF
bGVtZW50KCkgIT0gdGhpcykgewotICAgICAgICBlYyA9IElOVVNFX0FUVFJJQlVURV9FUlI7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBpZiAoYXR0ck5vZGUub3duZXJFbGVt
ZW50KCkgJiYgYXR0ck5vZGUub3duZXJFbGVtZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IElOVVNFX0FUVFJJQlVURV9FUlIgfTsKIAogICAgIHN5bmNocm9uaXplQWxs
QXR0cmlidXRlcygpOwotICAgIFVuaXF1ZUVsZW1lbnREYXRhJiBlbGVtZW50RGF0YSA9IGVuc3Vy
ZVVuaXF1ZUVsZW1lbnREYXRhKCk7CisgICAgYXV0byYgZWxlbWVudERhdGEgPSBlbnN1cmVVbmlx
dWVFbGVtZW50RGF0YSgpOwogCi0gICAgdW5zaWduZWQgZXhpc3RpbmdBdHRyaWJ1dGVJbmRleCA9
IGVsZW1lbnREYXRhLmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFsaWZpZWRO
YW1lKCkubG9jYWxOYW1lKCksIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UoKnRoaXMpKTsKLSAg
ICBpZiAoZXhpc3RpbmdBdHRyaWJ1dGVJbmRleCAhPSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90
Rm91bmQpIHsKKyAgICBhdXRvIGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPSBlbGVtZW50RGF0YS5m
aW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpLmxvY2FsTmFt
ZSgpLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKCp0aGlzKSk7CisgICAgaWYgKGV4aXN0aW5n
QXR0cmlidXRlSW5kZXggPT0gRWxlbWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5kKQorICAgICAg
ICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChlbGVtZW50RGF0YS5maW5kQXR0cmlidXRlSW5kZXhCeU5h
bWUoYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpKSwgYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpLCBh
dHRyTm9kZS52YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7Cisg
ICAgZWxzZSB7CiAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gYXR0cmlidXRl
QXQoZXhpc3RpbmdBdHRyaWJ1dGVJbmRleCk7CiAgICAgICAgIGlmIChvbGRBdHRyTm9kZSkKICAg
ICAgICAgICAgIGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFsdWUob2xkQXR0ck5vZGUu
Z2V0KCksIGF0dHJpYnV0ZS52YWx1ZSgpKTsKQEAgLTIxODcsMzggKzIxNjAsMzIgQEAgUmVmUHRy
PEF0dHI+IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUoQXR0ciYgYXR0ck5vZGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogICAgICAgICAgICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoZXhpc3RpbmdBdHRy
aWJ1dGVJbmRleCwgYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpLCBhdHRyTm9kZS52YWx1ZSgpLCBO
b3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgcmVtb3ZlQXR0cmlidXRlSW50ZXJuYWwoZXhpc3RpbmdBdHRyaWJ1dGVJbmRleCwg
Tm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgZXhpc3RpbmdBdHRyaWJ1dGVJbmRleEZvckZ1bGxRdWFsaWZpZWROYW1lID0gZWxlbWVudERh
dGEuZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKGF0dHJOb2RlLnF1YWxpZmllZE5hbWUoKSk7Ci0g
ICAgICAgICAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChleGlzdGluZ0F0dHJpYnV0ZUluZGV4Rm9y
RnVsbFF1YWxpZmllZE5hbWUsIGF0dHJOb2RlLnF1YWxpZmllZE5hbWUoKSwgYXR0ck5vZGUudmFs
dWUoKSwgTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOworICAgICAgICAgICAg
c2V0QXR0cmlidXRlSW50ZXJuYWwoZWxlbWVudERhdGEuZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1l
KGF0dHJOb2RlLnF1YWxpZmllZE5hbWUoKSksIGF0dHJOb2RlLnF1YWxpZmllZE5hbWUoKSwgYXR0
ck5vZGUudmFsdWUoKSwgTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdW5zaWduZWQgZXhpc3RpbmdBdHRyaWJ1dGVJ
bmRleEZvckZ1bGxRdWFsaWZpZWROYW1lID0gZWxlbWVudERhdGEuZmluZEF0dHJpYnV0ZUluZGV4
QnlOYW1lKGF0dHJOb2RlLnF1YWxpZmllZE5hbWUoKSk7Ci0gICAgICAgIHNldEF0dHJpYnV0ZUlu
dGVybmFsKGV4aXN0aW5nQXR0cmlidXRlSW5kZXhGb3JGdWxsUXVhbGlmaWVkTmFtZSwgYXR0ck5v
ZGUucXVhbGlmaWVkTmFtZSgpLCBhdHRyTm9kZS52YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlv
bk9mTGF6eUF0dHJpYnV0ZSk7CiAgICAgfQogICAgIGlmIChhdHRyTm9kZS5vd25lckVsZW1lbnQo
KSAhPSB0aGlzKSB7CiAgICAgICAgIGF0dHJOb2RlLmF0dGFjaFRvRWxlbWVudCh0aGlzKTsKICAg
ICAgICAgdHJlZVNjb3BlKCkuYWRvcHRJZk5lZWRlZCgmYXR0ck5vZGUpOwogICAgICAgICBlbnN1
cmVBdHRyTm9kZUxpc3RGb3JFbGVtZW50KCp0aGlzKS5hcHBlbmQoJmF0dHJOb2RlKTsKICAgICB9
Ci0gICAgcmV0dXJuIG9sZEF0dHJOb2RlOworICAgIHJldHVybiBXVEZNb3ZlKG9sZEF0dHJOb2Rl
KTsKIH0KIAotUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVOUyhBdHRyJiBh
dHRyTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25PcjxSZWZQdHI8QXR0cj4+IEVs
ZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVOUyhBdHRyJiBhdHRyTm9kZSkKIHsKICAgICBSZWZQdHI8
QXR0cj4gb2xkQXR0ck5vZGUgPSBhdHRySWZFeGlzdHMoYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgp
KTsKICAgICBpZiAob2xkQXR0ck5vZGUuZ2V0KCkgPT0gJmF0dHJOb2RlKQotICAgICAgICByZXR1
cm4gJmF0dHJOb2RlOyAvLyBUaGlzIEF0dHIgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byB0aGUgZWxl
bWVudC4KKyAgICAgICAgcmV0dXJuIFdURk1vdmUob2xkQXR0ck5vZGUpOwogCiAgICAgLy8gSU5V
U0VfQVRUUklCVVRFX0VSUjogUmFpc2VkIGlmIG5vZGUgaXMgYW4gQXR0ciB0aGF0IGlzIGFscmVh
ZHkgYW4gYXR0cmlidXRlIG9mIGFub3RoZXIgRWxlbWVudCBvYmplY3QuCiAgICAgLy8gVGhlIERP
TSB1c2VyIG11c3QgZXhwbGljaXRseSBjbG9uZSBBdHRyIG5vZGVzIHRvIHJlLXVzZSB0aGVtIGlu
IG90aGVyIGVsZW1lbnRzLgotICAgIGlmIChhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAmJiBhdHRy
Tm9kZS5vd25lckVsZW1lbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVjID0gSU5VU0VfQVRUUklC
VVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlmIChhdHRyTm9k
ZS5vd25lckVsZW1lbnQoKSAmJiBhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAhPSB0aGlzKQorICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5VU0VfQVRUUklCVVRFX0VSUiB9OwogCiAgICAgc3lu
Y2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7Ci0gICAgVW5pcXVlRWxlbWVudERhdGEmIGVsZW1lbnRE
YXRhID0gZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKTsKKyAgICBhdXRvJiBlbGVtZW50RGF0YSA9
IGVuc3VyZVVuaXF1ZUVsZW1lbnREYXRhKCk7CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IGVsZW1l
bnREYXRhLmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCkp
OworICAgIGF1dG8gaW5kZXggPSBlbGVtZW50RGF0YS5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUo
YXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpKTsKICAgICBpZiAoaW5kZXggIT0gRWxlbWVudERhdGE6
OmF0dHJpYnV0ZU5vdEZvdW5kKSB7CiAgICAgICAgIGlmIChvbGRBdHRyTm9kZSkKICAgICAgICAg
ICAgIGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFsdWUob2xkQXR0ck5vZGUuZ2V0KCks
IGVsZW1lbnREYXRhLmF0dHJpYnV0ZUF0KGluZGV4KS52YWx1ZSgpKTsKQEAgLTIyMzIsNjIgKzIx
OTksNTYgQEAgUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVOUyhBdHRyJiBh
dHRyTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgdHJlZVNjb3BlKCkuYWRvcHRJZk5lZWRl
ZCgmYXR0ck5vZGUpOwogICAgIGVuc3VyZUF0dHJOb2RlTGlzdEZvckVsZW1lbnQoKnRoaXMpLmFw
cGVuZCgmYXR0ck5vZGUpOwogCi0gICAgcmV0dXJuIG9sZEF0dHJOb2RlOworICAgIHJldHVybiBX
VEZNb3ZlKG9sZEF0dHJOb2RlKTsKIH0KIAotUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OnJlbW92ZUF0
dHJpYnV0ZU5vZGUoQXR0ciYgYXR0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25PcjxS
ZWY8QXR0cj4+IEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ciYgYXR0cikKIHsKLSAg
ICBpZiAoYXR0ci5vd25lckVsZW1lbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZP
VU5EX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlmIChhdHRyLm93
bmVyRWxlbWVudCgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9V
TkRfRVJSIH07CiAKICAgICBBU1NFUlQoJmRvY3VtZW50KCkgPT0gJmF0dHIuZG9jdW1lbnQoKSk7
CiAKICAgICBzeW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKIAotICAgIGlmICghbV9lbGVtZW50
RGF0YSkgewotICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KKyAgICBpZiAoIW1fZWxlbWVudERhdGEpCisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOT1RfRk9VTkRfRVJSIH07CiAKLSAgICB1bnNpZ25lZCBleGlzdGluZ0F0dHJpYnV0
ZUluZGV4ID0gbV9lbGVtZW50RGF0YS0+ZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKGF0dHIucXVh
bGlmaWVkTmFtZSgpKTsKKyAgICBhdXRvIGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPSBtX2VsZW1l
bnREYXRhLT5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ci5xdWFsaWZpZWROYW1lKCkpOwor
ICAgIGlmIChleGlzdGluZ0F0dHJpYnV0ZUluZGV4ID09IEVsZW1lbnREYXRhOjphdHRyaWJ1dGVO
b3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKIAot
ICAgIGlmIChleGlzdGluZ0F0dHJpYnV0ZUluZGV4ID09IEVsZW1lbnREYXRhOjphdHRyaWJ1dGVO
b3RGb3VuZCkgewotICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KKyAgICBSZWY8QXR0cj4gb2xkQXR0ck5vZGUgeyBhdHRyIH07CiAKLSAg
ICBSZWZQdHI8QXR0cj4gYXR0ck5vZGUgPSAmYXR0cjsKICAgICBkZXRhY2hBdHRyTm9kZUZyb21F
bGVtZW50V2l0aFZhbHVlKCZhdHRyLCBtX2VsZW1lbnREYXRhLT5hdHRyaWJ1dGVBdChleGlzdGlu
Z0F0dHJpYnV0ZUluZGV4KS52YWx1ZSgpKTsKICAgICByZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChl
eGlzdGluZ0F0dHJpYnV0ZUluZGV4LCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0
ZSk7Ci0gICAgcmV0dXJuIGF0dHJOb2RlOworCisgICAgcmV0dXJuIFdURk1vdmUob2xkQXR0ck5v
ZGUpOwogfQogCi1ib29sIEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlTmFtZShRdWFsaWZpZWROYW1l
JiBvdXQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJp
bmcmIHF1YWxpZmllZE5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8UXVhbGlm
aWVkTmFtZT4gRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGVOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxpZmllZE5hbWUpCiB7CisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU3RyaW5nIHByZWZpeCwgbG9jYWxOYW1lOwogICAg
IGlmICghRG9jdW1lbnQ6OnBhcnNlUXVhbGlmaWVkTmFtZShxdWFsaWZpZWROYW1lLCBwcmVmaXgs
IGxvY2FsTmFtZSwgZWMpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBlYyB9OwogICAgIEFTU0VSVCghZWMpOwogCi0gICAgUXVhbGlmaWVkTmFtZSBx
TmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKTsKKyAgICBRdWFsaWZpZWROYW1l
IHJlc3VsdCB7IHByZWZpeCwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkgfTsKIAotICAgIGlmICgh
RG9jdW1lbnQ6Omhhc1ZhbGlkTmFtZXNwYWNlRm9yQXR0cmlidXRlcyhxTmFtZSkpIHsKLSAgICAg
ICAgZWMgPSBOQU1FU1BBQ0VfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAg
IGlmICghRG9jdW1lbnQ6Omhhc1ZhbGlkTmFtZXNwYWNlRm9yQXR0cmlidXRlcyhyZXN1bHQpKQor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTkFNRVNQQUNFX0VSUiB9OwogCi0gICAgb3V0ID0g
cU5hbWU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0K
IAotdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVz
cGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBxdWFsaWZpZWROYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+IEVsZW1l
bnQ6OnNldEF0dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25z
dCBBdG9taWNTdHJpbmcmIHF1YWxpZmllZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
CiB7Ci0gICAgUXVhbGlmaWVkTmFtZSBwYXJzZWROYW1lID0gYW55TmFtZTsKLSAgICBpZiAoIXBh
cnNlQXR0cmlidXRlTmFtZShwYXJzZWROYW1lLCBuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUs
IGVjKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHNldEF0dHJpYnV0ZShwYXJzZWROYW1lLCB2YWx1
ZSk7CisgICAgYXV0byByZXN1bHQgPSBwYXJzZUF0dHJpYnV0ZU5hbWUobmFtZXNwYWNlVVJJLCBx
dWFsaWZpZWROYW1lKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICBzZXRBdHRyaWJ1dGUocmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9p
ZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbCh1bnNpZ25lZCBpbmRleCwgU3luY2hy
b25pemF0aW9uT2ZMYXp5QXR0cmlidXRlIGluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRl
KQpAQCAtMjU1NSwxNyArMjUxNiwxNCBAQCBib29sIEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3Jj
ZVdpbGxCZWdpbigpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEVsZW1lbnQ6Om1lcmdl
V2l0aE5leHRUZXh0Tm9kZShUZXh0JiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlv
bk9yPHZvaWQ+IEVsZW1lbnQ6Om1lcmdlV2l0aE5leHRUZXh0Tm9kZShUZXh0JiBub2RlKQogewog
ICAgIGF1dG8qIG5leHQgPSBub2RlLm5leHRTaWJsaW5nKCk7CiAgICAgaWYgKCFpczxUZXh0Pihu
ZXh0KSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIFJlZjxUZXh0
PiB0ZXh0TmV4dCB7IGRvd25jYXN0PFRleHQ+KCpuZXh0KSB9OwotCiAgICAgbm9kZS5hcHBlbmRE
YXRhKHRleHROZXh0LT5kYXRhKCkpOwotICAgIGF1dG8gcmVzdWx0ID0gdGV4dE5leHQtPnJlbW92
ZSgpOwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVjID0gcmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7CisgICAgcmV0dXJuIHRleHROZXh0LT5yZW1vdmUo
KTsKIH0KIAogU3RyaW5nIEVsZW1lbnQ6OmlubmVySFRNTCgpIGNvbnN0CkBAIC0yNTc4LDM5ICsy
NTM2LDQ1IEBAIFN0cmluZyBFbGVtZW50OjpvdXRlckhUTUwoKSBjb25zdAogICAgIHJldHVybiBj
cmVhdGVNYXJrdXAoKnRoaXMpOwogfQogCi12b2lkIEVsZW1lbnQ6OnNldE91dGVySFRNTChjb25z
dCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gRWxl
bWVudDo6c2V0T3V0ZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCkKIHsKLSAgICBFbGVtZW50KiBw
ID0gcGFyZW50RWxlbWVudCgpOwotICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KHApKSB7Ci0gICAg
ICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gcGFyZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1l
bnQ+KHApOworICAgIGF1dG8qIHBhcmVudEVsZW1lbnQgPSB0aGlzLT5wYXJlbnRFbGVtZW50KCk7
CisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4ocGFyZW50RWxlbWVudCkpCisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKworICAgIFJlZjxI
VE1MRWxlbWVudD4gcGFyZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpwYXJlbnRFbGVtZW50
KTsKICAgICBSZWZQdHI8Tm9kZT4gcHJldiA9IHByZXZpb3VzU2libGluZygpOwogICAgIFJlZlB0
cjxOb2RlPiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsKIAotICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKCpwYXJlbnQsIGh0bWwsIEFsbG93U2NyaXB0aW5n
Q29udGVudCk7Ci0gICAgaWYgKGZyYWdtZW50Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGVj
ID0gZnJhZ21lbnQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKKyAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGb3JJbm5lck91
dGVySFRNTChwYXJlbnQsIGh0bWwsIEFsbG93U2NyaXB0aW5nQ29udGVudCk7CisgICAgaWYgKGZy
YWdtZW50Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZUV4
Y2VwdGlvbigpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgcGFyZW50LT5yZXBs
YWNlQ2hpbGQoZnJhZ21lbnQucmVsZWFzZVJldHVyblZhbHVlKCkuZ2V0KCksICp0aGlzLCBlYyk7
CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKwogICAgIFJl
ZlB0cjxOb2RlPiBub2RlID0gbmV4dCA/IG5leHQtPnByZXZpb3VzU2libGluZygpIDogbnVsbHB0
cjsKLSAgICBpZiAoIWVjICYmIGlzPFRleHQ+KG5vZGUuZ2V0KCkpKQotICAgICAgICBtZXJnZVdp
dGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKm5vZGUpLCBlYyk7Ci0gICAgaWYgKCFlYyAm
JiBpczxUZXh0PihwcmV2LmdldCgpKSkKLSAgICAgICAgbWVyZ2VXaXRoTmV4dFRleHROb2RlKGRv
d25jYXN0PFRleHQ+KCpwcmV2KSwgZWMpOworICAgIGlmIChpczxUZXh0Pihub2RlLmdldCgpKSkg
eworICAgICAgICBhdXRvIHJlc3VsdCA9IG1lcmdlV2l0aE5leHRUZXh0Tm9kZShkb3duY2FzdDxU
ZXh0Pigqbm9kZSkpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgfQorICAgIGlmIChp
czxUZXh0PihwcmV2LmdldCgpKSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1lcmdlV2l0aE5l
eHRUZXh0Tm9kZShkb3duY2FzdDxUZXh0PigqcHJldikpOworICAgICAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9u
KCk7CisgICAgfQorICAgIHJldHVybiB7IH07CiB9CiAKIAotdm9pZCBFbGVtZW50OjpzZXRJbm5l
ckhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9y
PHZvaWQ+IEVsZW1lbnQ6OnNldElubmVySFRNTChjb25zdCBTdHJpbmcmIGh0bWwpCiB7CiAgICAg
YXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoKnRoaXMsIGh0
bWwsIEFsbG93U2NyaXB0aW5nQ29udGVudCk7Ci0gICAgaWYgKGZyYWdtZW50Lmhhc0V4Y2VwdGlv
bigpKSB7Ci0gICAgICAgIGVjID0gZnJhZ21lbnQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZnJhZ21lbnQuaGFzRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKICAgICBDb250
YWluZXJOb2RlKiBjb250YWluZXI7CiAgICAgaWYgKCFpczxIVE1MVGVtcGxhdGVFbGVtZW50Pigq
dGhpcykpCkBAIC0yNjE4LDkgKzI1ODIsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldElubmVySFRNTChj
b25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGVsc2UKICAgICAgICAg
Y29udGFpbmVyID0gJmRvd25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KCp0aGlzKS5jb250ZW50
KCk7CiAKLSAgICBhdXRvIHJlc3VsdCA9IHJlcGxhY2VDaGlsZHJlbldpdGhGcmFnbWVudCgqY29u
dGFpbmVyLCBmcmFnbWVudC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci0gICAgaWYgKHJlc3VsdC5o
YXNFeGNlcHRpb24oKSkKLSAgICAgICAgZWMgPSBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCku
Y29kZSgpOworICAgIHJldHVybiByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQoKmNvbnRhaW5l
ciwgZnJhZ21lbnQucmVsZWFzZVJldHVyblZhbHVlKCkpOwogfQogCiBTdHJpbmcgRWxlbWVudDo6
aW5uZXJUZXh0KCkKQEAgLTI5OTMsMTggKzI5NTUsMjQgQEAgYm9vbCBFbGVtZW50OjptYXRjaGVz
RGVmYXVsdFBzZXVkb0NsYXNzKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
RWxlbWVudDo6bWF0Y2hlcyhjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBFeGNlcHRpb25Db2RlJiBl
YykKK0V4Y2VwdGlvbk9yPGJvb2w+IEVsZW1lbnQ6Om1hdGNoZXMoY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKLSAgICBTZWxlY3RvclF1ZXJ5KiBzZWxlY3RvclF1ZXJ5ID0gZG9jdW1lbnQoKS5z
ZWxlY3RvclF1ZXJ5Rm9yU3RyaW5nKHNlbGVjdG9yLCBlYyk7Ci0gICAgcmV0dXJuIHNlbGVjdG9y
UXVlcnkgJiYgc2VsZWN0b3JRdWVyeS0+bWF0Y2hlcygqdGhpcyk7CisgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgYXV0byogcXVlcnkgPSBkb2N1bWVudCgpLnNlbGVjdG9yUXVlcnlGb3JT
dHJpbmcoc2VsZWN0b3IsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBlYyB9OworICAgIHJldHVybiBxdWVyeSAmJiBxdWVyeS0+bWF0Y2hlcygqdGhpcyk7CiB9
CiAKLUVsZW1lbnQqIEVsZW1lbnQ6OmNsb3Nlc3QoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25PcjxFbGVtZW50Kj4gRWxlbWVudDo6Y2xvc2VzdChj
b25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgIFNlbGVjdG9yUXVlcnkqIHNlbGVjdG9yUXVl
cnkgPSBkb2N1bWVudCgpLnNlbGVjdG9yUXVlcnlGb3JTdHJpbmcoc2VsZWN0b3IsIGVjKTsKLSAg
ICBpZiAoc2VsZWN0b3JRdWVyeSkKLSAgICAgICAgcmV0dXJuIHNlbGVjdG9yUXVlcnktPmNsb3Nl
c3QoKnRoaXMpOwotICAgIHJldHVybiBudWxscHRyOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGF1dG8qIHF1ZXJ5ID0gZG9jdW1lbnQoKS5zZWxlY3RvclF1ZXJ5Rm9yU3RyaW5nKHNl
bGVjdG9yLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMg
fTsKKyAgICBpZiAoIXF1ZXJ5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
cXVlcnktPmNsb3Nlc3QoKnRoaXMpOwogfQogCiBib29sIEVsZW1lbnQ6OnNob3VsZEFwcGVhcklu
ZGV0ZXJtaW5hdGUoKSBjb25zdApAQCAtMzA3OSw2ICszMDQ3LDcgQEAgdm9pZCBFbGVtZW50Ojpz
ZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUsIHUKIH0KIAogI2lmIEVOQUJMRShJTkRJRV9VSSkKKwogdm9pZCBFbGVtZW50OjpzZXRV
SUFjdGlvbnMoY29uc3QgQXRvbWljU3RyaW5nJiBhY3Rpb25zKQogewogICAgIHNldEF0dHJpYnV0
ZSh1aWFjdGlvbnNBdHRyLCBhY3Rpb25zKTsKQEAgLTMwODgsNiArMzA1Nyw3IEBAIGNvbnN0IEF0
b21pY1N0cmluZyYgRWxlbWVudDo6VUlBY3Rpb25zKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKHVpYWN0aW9uc0F0dHIpOwogfQorCiAjZW5kaWYKIAogYm9vbCBFbGVtZW50Ojpj
aGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNvbnN0IE5vZGUmIGNoaWxkKSBjb25zdApAQCAtMzY4
Myw3ICszNjUzLDcgQEAgYm9vbCBFbGVtZW50OjppZUZvcmJpZHNJbnNlcnRIVE1MKCkgY29uc3QK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEVsZW1lbnQ6Omluc2VydEFkamFjZW50KGNv
bnN0IFN0cmluZyYgd2hlcmUsIFJlZjxOb2RlPiYmIG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBl
YykKK0V4Y2VwdGlvbk9yPE5vZGUqPiBFbGVtZW50OjppbnNlcnRBZGphY2VudChjb25zdCBTdHJp
bmcmIHdoZXJlLCBSZWY8Tm9kZT4mJiBuZXdDaGlsZCkKIHsKICAgICAvLyBJbiBJbnRlcm5ldCBF
eHBsb3JlciBpZiB0aGUgZWxlbWVudCBoYXMgbm8gcGFyZW50IGFuZCB3aGVyZSBpcyAiYmVmb3Jl
QmVnaW4iIG9yICJhZnRlckVuZCIsCiAgICAgLy8gYSBkb2N1bWVudCBmcmFnbWVudCBpcyBjcmVh
dGVkIGFuZCB0aGUgZWxlbWVudHMgYXBwZW5kZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIFRoaXMg
ZG9jdW1lbnQKQEAgLTM2OTMsNzYgKzM2NjMsMTA0IEBAIE5vZGUqIEVsZW1lbnQ6Omluc2VydEFk
amFjZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIFJlZjxOb2RlPiYmIG5ld0NoaWxkLCBFeGNlcHRp
CiAgICAgLy8gT3BlcmEgYWxzbyBhcHBlYXJzIHRvIGRpc2FsbG93IHN1Y2ggdXNhZ2UuCiAKICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uod2hlcmUsICJiZWZvcmViZWdpbiIp
KSB7Ci0gICAgICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHRoaXMtPnBhcmVudE5vZGUoKTsK
LSAgICAgICAgcmV0dXJuIChwYXJlbnQgJiYgcGFyZW50LT5pbnNlcnRCZWZvcmUobmV3Q2hpbGQs
IHRoaXMsIGVjKSkgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7CisgICAgICAgIGF1dG8qIHBh
cmVudCA9IHRoaXMtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgaWYgKCFwYXJlbnQpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
ICAgIGJvb2wgc3VjY2VzcyA9IHBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCB0aGlzLCBl
Yyk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBlYyB9
OworICAgICAgICByZXR1cm4gc3VjY2VzcyA/IG5ld0NoaWxkLnB0cigpIDogbnVsbHB0cjsKICAg
ICB9CiAKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uod2hlcmUsICJhZnRl
cmJlZ2luIikpCi0gICAgICAgIHJldHVybiBpbnNlcnRCZWZvcmUobmV3Q2hpbGQsIGZpcnN0Q2hp
bGQoKSwgZWMpID8gbmV3Q2hpbGQucHRyKCkgOiBudWxscHRyOworICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZSh3aGVyZSwgImFmdGVyYmVnaW4iKSkgeworICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gaW5zZXJ0QmVmb3JlKG5l
d0NoaWxkLCBmaXJzdENoaWxkKCksIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgICAgIHJldHVybiBzdWNjZXNzID8gbmV3Q2hp
bGQucHRyKCkgOiBudWxscHRyOworICAgIH0KIAotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZSh3aGVyZSwgImJlZm9yZWVuZCIpKQotICAgICAgICByZXR1cm4gYXBwZW5kQ2hp
bGQobmV3Q2hpbGQsIGVjKSA/IG5ld0NoaWxkLnB0cigpIDogbnVsbHB0cjsKKyAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uod2hlcmUsICJiZWZvcmVlbmQiKSkgeworICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gYXBwZW5kQ2hp
bGQobmV3Q2hpbGQsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IGVjIH07CisgICAgICAgIHJldHVybiBzdWNjZXNzID8gbmV3Q2hpbGQucHRyKCkg
OiBudWxscHRyOworICAgIH0KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZSh3aGVyZSwgImFmdGVyZW5kIikpIHsKLSAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
dGhpcy0+cGFyZW50Tm9kZSgpOwotICAgICAgICByZXR1cm4gKHBhcmVudCAmJiBwYXJlbnQtPmlu
c2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcoKSwgZWMpKSA/IG5ld0NoaWxkLnB0cigp
IDogbnVsbHB0cjsKKyAgICAgICAgYXV0byogcGFyZW50ID0gdGhpcy0+cGFyZW50Tm9kZSgpOwor
ICAgICAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gcGFyZW50LT5p
bnNlcnRCZWZvcmUobmV3Q2hpbGQsIG5leHRTaWJsaW5nKCksIGVjKTsKKyAgICAgICAgaWYgKGVj
KQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgICAgIHJldHVybiBz
dWNjZXNzID8gbmV3Q2hpbGQucHRyKCkgOiBudWxscHRyOwogICAgIH0KIAotICAgIGVjID0gU1lO
VEFYX0VSUjsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lO
VEFYX0VSUiB9OwogfQogCi1FbGVtZW50KiBFbGVtZW50OjppbnNlcnRBZGphY2VudEVsZW1lbnQo
Y29uc3QgU3RyaW5nJiB3aGVyZSwgRWxlbWVudCYgbmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorRXhjZXB0aW9uT3I8RWxlbWVudCo+IEVsZW1lbnQ6Omluc2VydEFkamFjZW50RWxlbWVudChj
b25zdCBTdHJpbmcmIHdoZXJlLCBFbGVtZW50JiBuZXdDaGlsZCkKIHsKLSAgICBOb2RlKiByZXR1
cm5WYWx1ZSA9IGluc2VydEFkamFjZW50KHdoZXJlLCBuZXdDaGlsZCwgZWMpOwotICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFyZXR1cm5WYWx1ZSB8fCBpczxFbGVtZW50Pigq
cmV0dXJuVmFsdWUpKTsKLSAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4ocmV0dXJuVmFsdWUp
OworICAgIGF1dG8gcmVzdWx0ID0gaW5zZXJ0QWRqYWNlbnQod2hlcmUsIG5ld0NoaWxkKTsKKyAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4ocmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAogLy8gU3RlcCAxIG9mIGh0dHBzOi8vdzNjLmdpdGh1Yi5p
by9ET00tUGFyc2luZy8jZG9tLWVsZW1lbnQtaW5zZXJ0YWRqYWNlbnRodG1sLgotc3RhdGljIENv
bnRhaW5lck5vZGUqIGNvbnRleHROb2RlRm9ySW5zZXJ0aW9uKGNvbnN0IFN0cmluZyYgd2hlcmUs
IEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorc3RhdGljIEV4Y2VwdGlvbk9y
PENvbnRhaW5lck5vZGUqPiBjb250ZXh0Tm9kZUZvckluc2VydGlvbihjb25zdCBTdHJpbmcmIHdo
ZXJlLCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZSh3aGVyZSwgImJlZm9yZWJlZ2luIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2Uod2hlcmUsICJhZnRlcmVuZCIpKSB7Ci0gICAgICAgIGF1dG8qIHBhcmVudCA9IGVsZW1l
bnQtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgaWYgKCFwYXJlbnQgfHwgaXM8RG9jdW1lbnQ+KCpw
YXJlbnQpKSB7Ci0gICAgICAgICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9CisgICAgICAgIGF1dG8qIHBh
cmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSgpOworICAgICAgICBpZiAoIXBhcmVudCB8fCBpczxE
b2N1bWVudD4oKnBhcmVudCkpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CiAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAgICAgfQog
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3aGVyZSwgImFmdGVyYmVnaW4i
KSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3aGVyZSwgImJlZm9yZWVuZCIpKQot
ICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICBlYyA9ICBTWU5UQVhfRVJSOwotICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gJmVsZW1lbnQ7CisgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFNZTlRBWF9FUlIgfTsKK30KKworLy8gU3RlcCAyIG9mIGh0dHBzOi8vdzNjLmdpdGh1Yi5p
by9ET00tUGFyc2luZy8jZG9tLWVsZW1lbnQtaW5zZXJ0YWRqYWNlbnRodG1sLgorc3RhdGljIEV4
Y2VwdGlvbk9yPFJlZjxFbGVtZW50Pj4gY29udGV4dEVsZW1lbnRGb3JJbnNlcnRpb24oY29uc3Qg
U3RyaW5nJiB3aGVyZSwgRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBhdXRvIGNvbnRleHROb2Rl
UmVzdWx0ID0gY29udGV4dE5vZGVGb3JJbnNlcnRpb24od2hlcmUsIGVsZW1lbnQpOworICAgIGlm
IChjb250ZXh0Tm9kZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGNvbnRl
eHROb2RlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICBhdXRvJiBjb250ZXh0Tm9kZSA9
ICpjb250ZXh0Tm9kZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICBpZiAoIWlzPEVs
ZW1lbnQ+KGNvbnRleHROb2RlKSB8fCAoY29udGV4dE5vZGUuZG9jdW1lbnQoKS5pc0hUTUxEb2N1
bWVudCgpICYmIGlzPEhUTUxIdG1sRWxlbWVudD4oY29udGV4dE5vZGUpKSkKKyAgICAgICAgcmV0
dXJuIFJlZjxFbGVtZW50PiB7IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKGNvbnRleHROb2RlLmRv
Y3VtZW50KCkpIH07CisgICAgcmV0dXJuIFJlZjxFbGVtZW50PiB7IGRvd25jYXN0PEVsZW1lbnQ+
KGNvbnRleHROb2RlKSB9OwogfQogCiAvLyBodHRwczovL3czYy5naXRodWIuaW8vRE9NLVBhcnNp
bmcvI2RvbS1lbGVtZW50LWluc2VydGFkamFjZW50aHRtbAotdm9pZCBFbGVtZW50OjppbnNlcnRB
ZGphY2VudEhUTUwoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIEV4
Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6aW5zZXJ0QWRqYWNl
bnRIVE1MKGNvbnN0IFN0cmluZyYgd2hlcmUsIGNvbnN0IFN0cmluZyYgbWFya3VwKQogewotICAg
IC8vIFN0ZXAgMS4KLSAgICBhdXRvKiBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlRm9ySW5zZXJ0
aW9uKHdoZXJlLCB0aGlzLCBlYyk7Ci0gICAgaWYgKCFjb250ZXh0Tm9kZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIFJlZlB0cjxFbGVtZW50PiBjb250ZXh0RWxlbWVudDsKLSAgICAvLyBTdGVwIDIu
Ci0gICAgaWYgKCFpczxFbGVtZW50PigqY29udGV4dE5vZGUpCi0gICAgICAgIHx8IChjb250ZXh0
Tm9kZS0+ZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpICYmIGlzPEhUTUxIdG1sRWxlbWVudD4o
KmNvbnRleHROb2RlKSkpIHsKLSAgICAgICAgY29udGV4dEVsZW1lbnQgPSBIVE1MQm9keUVsZW1l
bnQ6OmNyZWF0ZShjb250ZXh0Tm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGNvbnRleHRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oY29udGV4dE5vZGUpOworICAgIC8v
IFN0ZXBzIDEgYW5kIDIuCisgICAgYXV0byBjb250ZXh0RWxlbWVudCA9IGNvbnRleHRFbGVtZW50
Rm9ySW5zZXJ0aW9uKHdoZXJlLCAqdGhpcyk7CisgICAgaWYgKGNvbnRleHRFbGVtZW50Lmhhc0V4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gY29udGV4dEVsZW1lbnQucmVsZWFzZUV4Y2VwdGlv
bigpOwogICAgIC8vIFN0ZXAgMy4KLSAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRG
b3JJbm5lck91dGVySFRNTCgqY29udGV4dEVsZW1lbnQsIG1hcmt1cCwgQWxsb3dTY3JpcHRpbmdD
b250ZW50KTsKLSAgICBpZiAoZnJhZ21lbnQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZWMg
PSBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1M
KGNvbnRleHRFbGVtZW50LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBtYXJrdXAsIEFsbG93U2NyaXB0
aW5nQ29udGVudCk7CisgICAgaWYgKGZyYWdtZW50Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIC8vIFN0ZXAgNC4KLSAgICBp
bnNlcnRBZGphY2VudCh3aGVyZSwgZnJhZ21lbnQucmVsZWFzZVJldHVyblZhbHVlKCksIGVjKTsK
KyAgICBhdXRvIHJlc3VsdCA9IGluc2VydEFkamFjZW50KHdoZXJlLCBmcmFnbWVudC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBFbGVtZW50OjppbnNlcnRBZGphY2VudFRleHQoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+IEVs
ZW1lbnQ6Omluc2VydEFkamFjZW50VGV4dChjb25zdCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJp
bmcmIHRleHQpCiB7Ci0gICAgaW5zZXJ0QWRqYWNlbnQod2hlcmUsIGRvY3VtZW50KCkuY3JlYXRl
VGV4dE5vZGUodGV4dCksIGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGluc2VydEFkamFjZW50KHdo
ZXJlLCBkb2N1bWVudCgpLmNyZWF0ZVRleHROb2RlKHRleHQpKTsKKyAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsK
KyAgICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaAppbmRleCAwMzU3ZDcxYTVkOTU0Yjg2ODAwZDgzODc3ZmNkMjYyYjVkNjJlNzI5Li43ZGNi
MmY4NzExYjhlNWY3NmU2MmVmZGFlZjM5N2Q4MGYwNDgzZjY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgK
QEAgLTIyLDggKzIyLDcgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBFbGVtZW50X2gKLSNkZWZpbmUg
RWxlbWVudF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFYVGV4dFN0YXRlQ2hhbmdlSW50
ZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTExMiw5ICsxMTEsOSBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRBdHRyaWJ1dGUoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBB
dG9taWNTdHJpbmcmIGdldEF0dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
VVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3Q7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBzdGF0aWMgYm9vbCBw
YXJzZUF0dHJpYnV0ZU5hbWUoUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxpZmllZE5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEF0dHJpYnV0ZU5TKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxpZmllZE5hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9u
T3I8UXVhbGlmaWVkTmFtZT4gcGFyc2VBdHRyaWJ1dGVOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxpZmllZE5hbWUpOworICAgIFdF
QkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEF0dHJpYnV0ZU5TKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxpZmllZE5hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBn
ZXRJZEF0dHJpYnV0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0SWRBdHRyaWJ1dGUoY29uc3QgQXRv
bWljU3RyaW5nJik7CkBAIC0xOTAsOSArMTg5LDkgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9F
WFBPUlQgUmVmUHRyPEF0dHI+IGdldEF0dHJpYnV0ZU5vZGUoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0cj4gZ2V0QXR0cmlidXRlTm9kZU5T
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEF0dHI+IHNldEF0dHJpYnV0ZU5v
ZGUoQXR0ciYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0
cj4gc2V0QXR0cmlidXRlTm9kZU5TKEF0dHImLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPEF0dHI+IHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ciYsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxSZWZQdHI8QXR0cj4+IHNl
dEF0dHJpYnV0ZU5vZGUoQXR0ciYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJl
ZlB0cjxBdHRyPj4gc2V0QXR0cmlidXRlTm9kZU5TKEF0dHImKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBFeGNlcHRpb25PcjxSZWY8QXR0cj4+IHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ciYpOwogCiAg
ICAgUmVmUHRyPEF0dHI+IGF0dHJJZkV4aXN0cyhjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAg
UmVmUHRyPEF0dHI+IGF0dHJJZkV4aXN0cyhjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwg
Ym9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKQEAgLTI2OSwxNCArMjY4LDEyIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHls
ZSYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU2hhZG93Um9vdCogc2hhZG93Um9vdCgpIGNvbnN0
OwotICAgIFdFQkNPUkVfRVhQT1JUIFNoYWRvd1Jvb3QqIGNyZWF0ZVNoYWRvd1Jvb3QoRXhjZXB0
aW9uQ29kZSYpOworICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3RGb3JCaW5kaW5ncyhKU0M6OkV4
ZWNTdGF0ZSYpIGNvbnN0OwogCiAgICAgc3RydWN0IFNoYWRvd1Jvb3RJbml0IHsKICAgICAgICAg
U2hhZG93Um9vdE1vZGUgbW9kZTsKICAgICB9OwotCi0gICAgU2hhZG93Um9vdCogc2hhZG93Um9v
dEZvckJpbmRpbmdzKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7Ci0gICAgUmVmUHRyPFNoYWRvd1Jv
b3Q+IGF0dGFjaFNoYWRvdyhjb25zdCBTaGFkb3dSb290SW5pdCYsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBFeGNlcHRpb25PcjxSZWY8U2hhZG93Um9vdD4+IGF0dGFjaFNoYWRvdyhjb25zdCBTaGFk
b3dSb290SW5pdCYpOwogCiAgICAgU2hhZG93Um9vdCogdXNlckFnZW50U2hhZG93Um9vdCgpIGNv
bnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFNoYWRvd1Jvb3QmIGVuc3VyZVVzZXJBZ2VudFNoYWRv
d1Jvb3QoKTsKQEAgLTMxNSw5ICszMTIsOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRUYWJJbmRleChpbnQpOwogICAgIHZpcnR1YWwgRWxlbWVudCogZm9jdXNEZWxlZ2F0
ZSgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogaW5zZXJ0QWRqYWNlbnRFbGVtZW50
KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnNlcnRBZGphY2VudEhUTUwoY29uc3QgU3RyaW5n
JiB3aGVyZSwgY29uc3QgU3RyaW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBpbnNlcnRBZGphY2VudFRleHQoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhj
ZXB0aW9uT3I8RWxlbWVudCo+IGluc2VydEFkamFjZW50RWxlbWVudChjb25zdCBTdHJpbmcmIHdo
ZXJlLCBFbGVtZW50JiBuZXdDaGlsZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8
dm9pZD4gaW5zZXJ0QWRqYWNlbnRIVE1MKGNvbnN0IFN0cmluZyYgd2hlcmUsIGNvbnN0IFN0cmlu
ZyYgaHRtbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gaW5zZXJ0QWRq
YWNlbnRUZXh0KGNvbnN0IFN0cmluZyYgd2hlcmUsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKICAg
ICBib29sIGllRm9yYmlkc0luc2VydEhUTUwoKSBjb25zdDsKIApAQCAtMzgwLDggKzM3Nyw4IEBA
IHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBpbm5lckhUTUwoKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgb3V0ZXJIVE1MKCkgY29uc3Q7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRJbm5lckhUTUwoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0T3V0ZXJIVE1MKGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRJ
bm5lckhUTUwoY29uc3QgU3RyaW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8
dm9pZD4gc2V0T3V0ZXJIVE1MKGNvbnN0IFN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBpbm5lclRleHQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgb3V0ZXJUZXh0KCk7
CiAgCkBAIC00MjksOCArNDI2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBtYXRjaGVz
UmVhZFdyaXRlUHNldWRvQ2xhc3MoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgbWF0Y2hlc0lu
ZGV0ZXJtaW5hdGVQc2V1ZG9DbGFzcygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBtYXRjaGVz
RGVmYXVsdFBzZXVkb0NsYXNzKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBtYXRj
aGVzKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgRWxlbWVudCogY2xvc2VzdChjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0
aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPGJvb2w+IG1hdGNoZXMo
Y29uc3QgU3RyaW5nJiBzZWxlY3RvcnMpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9y
PEVsZW1lbnQqPiBjbG9zZXN0KGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzKTsKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgRE9NVG9rZW5MaXN0JiBjbGFzc0xpc3QoKTsKQEAgLTYwMSw3ICs1OTgsNyBAQCBwcm90
ZWN0ZWQ6CiAKICAgICB2b2lkIGFkZFNoYWRvd1Jvb3QoUmVmPFNoYWRvd1Jvb3Q+JiYpOwogCi0g
ICAgc3RhdGljIHZvaWQgbWVyZ2VXaXRoTmV4dFRleHROb2RlKFRleHQmIG5vZGUsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gbWVyZ2VXaXRoTmV4dFRleHRO
b2RlKFRleHQmKTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzVGV4dE5vZGUoKSBjb25zdDsKQEAg
LTYzOSw3ICs2MzYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlSWRGb3JEb2N1bWVudChI
VE1MRG9jdW1lbnQmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJp
bmcmIG5ld0lkLCBIVE1MRG9jdW1lbnROYW1lZEl0ZW1NYXBzVXBkYXRpbmdDb25kaXRpb24pOwog
ICAgIHZvaWQgdXBkYXRlTGFiZWwoVHJlZVNjb3BlJiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRG
b3JBdHRyaWJ1dGVWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdGb3JBdHRyaWJ1dGVWYWx1
ZSk7CiAKLSAgICBOb2RlKiBpbnNlcnRBZGphY2VudChjb25zdCBTdHJpbmcmIHdoZXJlLCBSZWY8
Tm9kZT4mJiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYpOworICAgIEV4Y2VwdGlvbk9yPE5vZGUq
PiBpbnNlcnRBZGphY2VudChjb25zdCBTdHJpbmcmIHdoZXJlLCBSZWY8Tm9kZT4mJiBuZXdDaGls
ZCk7CiAKICAgICB2b2lkIHNjcm9sbEJ5VW5pdHMoaW50IHVuaXRzLCBTY3JvbGxHcmFudWxhcml0
eSk7CiAKQEAgLTgzOCw1ICs4MzUsMyBAQCBpbmxpbmUgdm9pZCBFbGVtZW50OjpzZXRIYXNGb2N1
c1dpdGhpbihib29sIGZsYWcpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OkVsZW1lbnQpCiAgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6Ok5vZGUmIG5v
ZGUpIHsgcmV0dXJuIG5vZGUuaXNFbGVtZW50Tm9kZSgpOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCmluZGV4IDM4YjYwNmE0MDFl
ZmUyZmI0YjIyZjRkMzhiYWRjMTNjZTRlNjhkZTQuLmU0MmQyZDRkODFmMmNiYzI1YmI2MTdhOGY2
ZDMwMjZhZjViYzg0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50Lmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwKQEAgLTI4LDEzICsyOCwxMyBA
QAogCiAgICAgRE9NU3RyaW5nPyBnZXRBdHRyaWJ1dGUoRE9NU3RyaW5nIG5hbWUpOwogCi0gICAg
W0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gdm9pZCBzZXRBdHRyaWJ1dGUo
RE9NU3RyaW5nIG5hbWUsIERPTVN0cmluZyB2YWx1ZSk7CisgICAgW0NFUmVhY3Rpb25zLCBNYXlU
aHJvd0V4Y2VwdGlvbl0gdm9pZCBzZXRBdHRyaWJ1dGUoRE9NU3RyaW5nIG5hbWUsIERPTVN0cmlu
ZyB2YWx1ZSk7CiAKICAgICBbQ0VSZWFjdGlvbnNdIHZvaWQgcmVtb3ZlQXR0cmlidXRlKERPTVN0
cmluZyBuYW1lKTsKICAgICBBdHRyPyBnZXRBdHRyaWJ1dGVOb2RlKERPTVN0cmluZyBuYW1lKTsK
IAotICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEF0dHI/IHNldEF0
dHJpYnV0ZU5vZGUoQXR0ciBuZXdBdHRyKTsKLSAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93TGVn
YWN5RXhjZXB0aW9uXSBBdHRyIHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ciBvbGRBdHRyKTsKKyAg
ICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSBBdHRyPyBzZXRBdHRyaWJ1dGVOb2Rl
KEF0dHIgbmV3QXR0cik7CisgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gQXR0
ciByZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHIgb2xkQXR0cik7CiAKICAgICBIVE1MQ29sbGVjdGlv
biBnZXRFbGVtZW50c0J5VGFnTmFtZShET01TdHJpbmcgbmFtZSk7CiAKQEAgLTQzLDEzICs0Mywx
MyBAQAogCiAgICAgRE9NU3RyaW5nPyBnZXRBdHRyaWJ1dGVOUyhET01TdHJpbmc/IG5hbWVzcGFj
ZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7CiAKLSAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93
TGVnYWN5RXhjZXB0aW9uXSB2b2lkIHNldEF0dHJpYnV0ZU5TKERPTVN0cmluZz8gbmFtZXNwYWNl
VVJJLCBET01TdHJpbmcgcXVhbGlmaWVkTmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKKyAgICBbQ0VS
ZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIHNldEF0dHJpYnV0ZU5TKERPTVN0cmlu
Zz8gbmFtZXNwYWNlVVJJLCBET01TdHJpbmcgcXVhbGlmaWVkTmFtZSwgRE9NU3RyaW5nIHZhbHVl
KTsKICAgICBbQ0VSZWFjdGlvbnNdIHZvaWQgcmVtb3ZlQXR0cmlidXRlTlMoRE9NU3RyaW5nPyBu
YW1lc3BhY2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwogCiAgICAgSFRNTENvbGxlY3Rpb24g
Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5n
IGxvY2FsTmFtZSk7CiAKICAgICBBdHRyPyBnZXRBdHRyaWJ1dGVOb2RlTlMoRE9NU3RyaW5nPyBu
YW1lc3BhY2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwotICAgIFtDRVJlYWN0aW9ucywgTWF5
VGhyb3dMZWdhY3lFeGNlcHRpb25dIEF0dHI/IHNldEF0dHJpYnV0ZU5vZGVOUyhBdHRyIG5ld0F0
dHIpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIEF0dHI/IHNldEF0dHJp
YnV0ZU5vZGVOUyhBdHRyIG5ld0F0dHIpOwogICAgIGJvb2xlYW4gaGFzQXR0cmlidXRlKERPTVN0
cmluZyBuYW1lKTsKIAogICAgIGJvb2xlYW4gaGFzQXR0cmlidXRlTlMoRE9NU3RyaW5nPyBuYW1l
c3BhY2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwpAQCAtOTcsMTUgKzk3LDE1IEBACiAgICAg
c2VxdWVuY2U8RE9NU3RyaW5nPiBnZXRBdHRyaWJ1dGVOYW1lcygpOwogCiAgICAgSFRNTENvbGxl
Y3Rpb24gZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShET01TdHJpbmcgbmFtZSk7Ci0gICAgW0NFUmVh
Y3Rpb25zLCBUcmVhdE51bGxBcz1FbXB0eVN0cmluZywgU2V0dGVyTWF5VGhyb3dMZWdhY3lFeGNl
cHRpb25dIGF0dHJpYnV0ZSBET01TdHJpbmcgaW5uZXJIVE1MOwotICAgIFtDRVJlYWN0aW9ucywg
VHJlYXROdWxsQXM9RW1wdHlTdHJpbmcsIFNldHRlck1heVRocm93TGVnYWN5RXhjZXB0aW9uXSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIG91dGVySFRNTDsKKyAgICBbQ0VSZWFjdGlvbnMsIFRyZWF0TnVs
bEFzPUVtcHR5U3RyaW5nLCBTZXR0ZXJNYXlUaHJvd0V4Y2VwdGlvbl0gYXR0cmlidXRlIERPTVN0
cmluZyBpbm5lckhUTUw7CisgICAgW0NFUmVhY3Rpb25zLCBUcmVhdE51bGxBcz1FbXB0eVN0cmlu
ZywgU2V0dGVyTWF5VGhyb3dFeGNlcHRpb25dIGF0dHJpYnV0ZSBET01TdHJpbmcgb3V0ZXJIVE1M
OwogCiAgICAgW0NFUmVhY3Rpb25zLCBSZWZsZWN0PWNsYXNzXSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IGNsYXNzTmFtZTsKICAgICBbUHV0Rm9yd2FyZHM9dmFsdWVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01Ub2tlbkxpc3QgY2xhc3NMaXN0OwogCi0gICAgW01heVRocm93TGVnYWN5RXhjZXB0aW9uXSBi
b29sZWFuIG1hdGNoZXMoRE9NU3RyaW5nIHNlbGVjdG9ycyk7Ci0gICAgW01heVRocm93TGVnYWN5
RXhjZXB0aW9uXSBFbGVtZW50IGNsb3Nlc3QoRE9NU3RyaW5nIHNlbGVjdG9ycyk7ICAgIAotICAg
IFtJbXBsZW1lbnRlZEFzPW1hdGNoZXMsIE1heVRocm93TGVnYWN5RXhjZXB0aW9uXSBib29sZWFu
IHdlYmtpdE1hdGNoZXNTZWxlY3RvcihET01TdHJpbmcgc2VsZWN0b3JzKTsKKyAgICBbTWF5VGhy
b3dFeGNlcHRpb25dIGJvb2xlYW4gbWF0Y2hlcyhET01TdHJpbmcgc2VsZWN0b3JzKTsKKyAgICBb
TWF5VGhyb3dFeGNlcHRpb25dIEVsZW1lbnQgY2xvc2VzdChET01TdHJpbmcgc2VsZWN0b3JzKTsK
KyAgICBbSW1wbGVtZW50ZWRBcz1tYXRjaGVzLCBNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiB3
ZWJraXRNYXRjaGVzU2VsZWN0b3IoRE9NU3RyaW5nIHNlbGVjdG9ycyk7CiAKICAgICAvLyBDU1NP
TSBWaWV3IE1vZHVsZSBBUEkKICAgICBDbGllbnRSZWN0TGlzdCBnZXRDbGllbnRSZWN0cygpOwpA
QCAtMTI0LDkgKzEyNCw5IEBACiAgICAgW0NFUmVhY3Rpb25zLCBSZWZsZWN0XSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHVpYWN0aW9uczsKICNlbmRpZgogCi0gICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJv
d0xlZ2FjeUV4Y2VwdGlvbl0gRWxlbWVudCBpbnNlcnRBZGphY2VudEVsZW1lbnQoRE9NU3RyaW5n
IHdoZXJlLCBFbGVtZW50IGVsZW1lbnQpOwotICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dMZWdh
Y3lFeGNlcHRpb25dIHZvaWQgaW5zZXJ0QWRqYWNlbnRIVE1MKERPTVN0cmluZyB3aGVyZSwgRE9N
U3RyaW5nIGh0bWwpOwotICAgIFtNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gdm9pZCBpbnNlcnRB
ZGphY2VudFRleHQoRE9NU3RyaW5nIHdoZXJlLCBET01TdHJpbmcgdGV4dCk7CisgICAgW0NFUmVh
Y3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gRWxlbWVudCBpbnNlcnRBZGphY2VudEVsZW1lbnQo
RE9NU3RyaW5nIHdoZXJlLCBFbGVtZW50IGVsZW1lbnQpOworICAgIFtDRVJlYWN0aW9ucywgTWF5
VGhyb3dFeGNlcHRpb25dIHZvaWQgaW5zZXJ0QWRqYWNlbnRIVE1MKERPTVN0cmluZyB3aGVyZSwg
RE9NU3RyaW5nIGh0bWwpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBpbnNlcnRBZGph
Y2VudFRleHQoRE9NU3RyaW5nIHdoZXJlLCBET01TdHJpbmcgdGV4dCk7CiAKICAgICBbQ29uZGl0
aW9uYWw9UE9JTlRFUl9MT0NLXSB2b2lkIHJlcXVlc3RQb2ludGVyTG9jaygpOwogCkBAIC0xMzUs
NyArMTM1LDcgQEAKICAgICBbQ29uZGl0aW9uYWw9Q1NTX1JFR0lPTlNdIHNlcXVlbmNlPFJhbmdl
PiB3ZWJraXRHZXRSZWdpb25GbG93UmFuZ2VzKCk7CiAKICAgICAvLyBTaGFkb3cgRE9NIEFQSQot
ICAgIFtFbmFibGVkQXRSdW50aW1lPVNoYWRvd0RPTSwgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25d
IFNoYWRvd1Jvb3QgYXR0YWNoU2hhZG93KFNoYWRvd1Jvb3RJbml0IGluaXQpOworICAgIFtFbmFi
bGVkQXRSdW50aW1lPVNoYWRvd0RPTSwgTWF5VGhyb3dFeGNlcHRpb25dIFNoYWRvd1Jvb3QgYXR0
YWNoU2hhZG93KFNoYWRvd1Jvb3RJbml0IGluaXQpOwogICAgIFtFbmFibGVkQXRSdW50aW1lPVNo
YWRvd0RPTSwgSW1wbGVtZW50ZWRBcz1zaGFkb3dSb290Rm9yQmluZGluZ3MsIENhbGxXaXRoPVNj
cmlwdFN0YXRlXSByZWFkb25seSBhdHRyaWJ1dGUgU2hhZG93Um9vdCBzaGFkb3dSb290OwogICAg
IFtDRVJlYWN0aW9ucywgRW5hYmxlZEF0UnVudGltZT1TaGFkb3dET00sIFJlZmxlY3RdIGF0dHJp
YnV0ZSBET01TdHJpbmcgc2xvdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05h
bWVkTm9kZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAppbmRl
eCBkZmQxMDk5OTQyYzA4OGY0ZDBlNzY3Y2E0OGZiY2Y4ZDE5NDhhMzVmLi5mZWVjMGEzZDY2MDQ1
OWZmZGI0NWNkOThhYzk4OGVmYjNhN2Y1NTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTmFtZWROb2RlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFw
LmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogCiAjaW5j
bHVkZSAiQXR0ci5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKQEAgLTM1LDEyICszNCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLXZvaWQgTmFtZWROb2RlTWFwOjpyZWYoKQordm9pZCBOYW1lZE5v
ZGVNYXA6OnJlZigpIGNvbnN0CiB7CiAgICAgbV9lbGVtZW50LnJlZigpOwogfQogCi12b2lkIE5h
bWVkTm9kZU1hcDo6ZGVyZWYoKQordm9pZCBOYW1lZE5vZGVNYXA6OmRlcmVmKCkgY29uc3QKIHsK
ICAgICBtX2VsZW1lbnQuZGVyZWYoKTsKIH0KQEAgLTU1LDU1ICs1NCw1MCBAQCBSZWZQdHI8QXR0
cj4gTmFtZWROb2RlTWFwOjpnZXROYW1lZEl0ZW1OUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVz
cGFjZVVSSSwgY29ucwogICAgIHJldHVybiBtX2VsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZU5TKG5h
bWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKIH0KIAotUmVmUHRyPEF0dHI+IE5hbWVkTm9kZU1hcDo6
cmVtb3ZlTmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCitFeGNlcHRpb25PcjxSZWY8QXR0cj4+IE5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVt
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBpbmRleCA9
IG1fZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkgPyBtX2VsZW1lbnQuZmluZEF0dHJpYnV0ZUluZGV4
QnlOYW1lKG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UobV9lbGVtZW50KSkgOiBFbGVt
ZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQ7Ci0gICAgaWYgKGluZGV4ID09IEVsZW1lbnREYXRh
OjphdHRyaWJ1dGVOb3RGb3VuZCkgewotICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBpZiAoIW1fZWxlbWVudC5oYXNBdHRyaWJ1
dGVzKCkpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAg
YXV0byBpbmRleCA9IG1fZWxlbWVudC5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUobmFtZSwgc2hv
dWxkSWdub3JlQXR0cmlidXRlQ2FzZShtX2VsZW1lbnQpKTsKKyAgICBpZiAoaW5kZXggPT0gRWxl
bWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5kKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tk9UX0ZPVU5EX0VSUiB9OwogICAgIHJldHVybiBtX2VsZW1lbnQuZGV0YWNoQXR0cmlidXRlKGlu
ZGV4KTsKIH0KIAotVmVjdG9yPFN0cmluZz4gTmFtZWROb2RlTWFwOjpzdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCkKK1ZlY3RvcjxTdHJpbmc+IE5hbWVkTm9kZU1hcDo6c3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpIGNvbnN0CiB7CiAgICAgVmVjdG9yPFN0cmluZz4gbmFtZXMgPSBtX2VsZW1lbnQuZ2V0
QXR0cmlidXRlTmFtZXMoKTsKICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkgJiYg
aXM8SFRNTERvY3VtZW50PihtX2VsZW1lbnQuZG9jdW1lbnQoKSkpIHsKICAgICAgICAgbmFtZXMu
cmVtb3ZlQWxsTWF0Y2hpbmcoW10oU3RyaW5nJiBuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4g
bmFtZS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpICE9IG5hbWU7CisgICAgICAgICAgICBmb3Ig
KGF1dG8gY2hhcmFjdGVyIDogU3RyaW5nVmlldyB7IG5hbWUgfS5jb2RlVW5pdHMoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChpc0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0pOwogICAgIH0KICAgICByZXR1cm4gbmFtZXM7CiB9CiAKLVJlZlB0cjxB
dHRyPiBOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbU5TKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCitFeGNlcHRpb25PcjxSZWY8QXR0cj4+IE5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJ
dGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxOYW1lKSBjb25zdAogewotICAgIHVuc2lnbmVkIGluZGV4ID0gbV9lbGVtZW50Lmhh
c0F0dHJpYnV0ZXMoKSA/IG1fZWxlbWVudC5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpKSA6IEVsZW1lbnREYXRh
OjphdHRyaWJ1dGVOb3RGb3VuZDsKLSAgICBpZiAoaW5kZXggPT0gRWxlbWVudERhdGE6OmF0dHJp
YnV0ZU5vdEZvdW5kKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlmICghbV9lbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICBhdXRvIGlu
ZGV4ID0gbV9lbGVtZW50LmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShRdWFsaWZpZWROYW1lIHsg
bnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJIH0pOworICAgIGlmIChpbmRleCA9PSBF
bGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOT1RfRk9VTkRfRVJSIH07CiAgICAgcmV0dXJuIG1fZWxlbWVudC5kZXRhY2hBdHRyaWJ1dGUo
aW5kZXgpOwogfQogCi1SZWZQdHI8QXR0cj4gTmFtZWROb2RlTWFwOjpzZXROYW1lZEl0ZW0oQXR0
ciYgYXR0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25PcjxSZWZQdHI8QXR0cj4+IE5h
bWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKEF0dHImIGF0dHIpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fZWxlbWVudC5zZXRBdHRyaWJ1dGVOb2RlKGF0dHIsIGVjKTsKLX0KLQotUmVmUHRyPEF0dHI+
IE5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKE5vZGUmIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIGlmICghaXM8QXR0cj4obm9kZSkpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gc2V0TmFtZWRJdGVt
KGRvd25jYXN0PEF0dHI+KG5vZGUpLCBlYyk7CisgICAgcmV0dXJuIG1fZWxlbWVudC5zZXRBdHRy
aWJ1dGVOb2RlKGF0dHIpOwogfQogCiBSZWZQdHI8QXR0cj4gTmFtZWROb2RlTWFwOjppdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIGlmIChpbmRleCA+PSBsZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBtX2VsZW1l
bnQuZW5zdXJlQXR0cihtX2VsZW1lbnQuYXR0cmlidXRlQXQoaW5kZXgpLm5hbWUoKSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAppbmRleCAwYjU2N2U4ODdkZWQwMDMyYTBiZjUwZmU3
OGZmZTgwODUzZjIxMGIyLi44ODEwZWE2ODNmZTM4OGNlOWI0NGUxOTQ3YjE5MDYzMjQ5NGEyZmFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oCkBAIC0yNCwzNyArMjQsMzQgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBdHRyLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIK
KyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBBdHRyOworY2xhc3MgRWxlbWVudDsKKwogY2xhc3MgTmFtZWROb2RlTWFwIDogcHVibGlj
IFNjcmlwdFdyYXBwYWJsZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJp
ZW5kIGNsYXNzIEVsZW1lbnQ7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgTmFtZWROb2RlTWFwKEVs
ZW1lbnQmIGVsZW1lbnQpCiAgICAgICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCiAgICAgewotICAg
ICAgICAvLyBPbmx5IHN1cHBvcnRzIE5hbWVkTm9kZU1hcHMgd2l0aCBFbGVtZW50IGFzc29jaWF0
ZWQsIERvY3VtZW50VHlwZS5lbnRpdGllcyBhbmQgRG9jdW1lbnRUeXBlLm5vdGF0aW9ucyBhcmUg
bm90IHN1cHBvcnRlZCB5ZXQuCiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZWYo
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRlcmVmKCk7Ci0KLSAgICAvLyBQdWJsaWMgRE9N
IGludGVyZmFjZS4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZigpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZGVyZWYoKSBjb25zdDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxBdHRyPiBp
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0
cj4gZ2V0TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotICAgIFdFQkNPUkVf
RVhQT1JUIFJlZlB0cjxBdHRyPiByZW1vdmVOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkUHJvcGVy
dHlOYW1lcygpOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEF0dHI+IGdldE5hbWVkSXRl
bU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsTmFtZSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEF0dHI+IHJlbW92
ZU5hbWVkSXRlbU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsTmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgUmVmUHRyPEF0dHI+
IHNldE5hbWVkSXRlbShBdHRyJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JU
IFJlZlB0cjxBdHRyPiBzZXROYW1lZEl0ZW0oTm9kZSYsIEV4Y2VwdGlvbkNvZGUmKTsgLy8gZm9y
IGxlZ2FjeSBiaW5kaW5ncy4KKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxSZWZQdHI8
QXR0cj4+IHNldE5hbWVkSXRlbShBdHRyJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhj
ZXB0aW9uT3I8UmVmPEF0dHI+PiByZW1vdmVOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxSZWY8QXR0cj4+IHJl
bW92ZU5hbWVkSXRlbU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQ
dHI8QXR0cj4gaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkUHJv
cGVydHlOYW1lcygpIGNvbnN0OwogCiAgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZWxlbWVudDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWRO
b2RlTWFwLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaWRsCmluZGV4IGZk
ZDA1OTk2ZTU0M2JjNjgzNzA2ZTNhYzNiODQ2MGQ4YThjZDc1MDUuLjgzZDI4ZTdhMTI2MjcyMmZm
MGUxYjJhYjE2ODMzMmQ3NWRhZDMzOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
YW1lZE5vZGVNYXAuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaWRs
CkBAIC0yNCwxMiArMjQsMTEgQEAKICAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlLAogXSBp
bnRlcmZhY2UgTmFtZWROb2RlTWFwIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBsZW5ndGg7Ci0KLSAgICBnZXR0ZXIgQXR0cj8gZ2V0TmFtZWRJdGVtKERPTVN0cmluZyBu
YW1lKTsKLSAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93TGVnYWN5RXhjZXB0aW9uXSBBdHRyPyBz
ZXROYW1lZEl0ZW0oQXR0ciBhdHRyKTsKLSAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93TGVnYWN5
RXhjZXB0aW9uXSBBdHRyIHJlbW92ZU5hbWVkSXRlbShET01TdHJpbmcgbmFtZSk7CiAgICAgZ2V0
dGVyIEF0dHI/IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgZ2V0dGVyIEF0dHI/IGdl
dE5hbWVkSXRlbShET01TdHJpbmcgbmFtZSk7CiAgICAgQXR0cj8gZ2V0TmFtZWRJdGVtTlMoRE9N
U3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwotICAgIFtDRVJlYWN0
aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb24sIEltcGxlbWVudGVkQXM9c2V0TmFtZWRJdGVt
XSBBdHRyPyBzZXROYW1lZEl0ZW1OUyhBdHRyIGF0dHIpOwotICAgIFtDRVJlYWN0aW9ucywgTWF5
VGhyb3dMZWdhY3lFeGNlcHRpb25dIEF0dHIgcmVtb3ZlTmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBu
YW1lc3BhY2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOworICAgIFtDRVJlYWN0aW9ucywgTWF5
VGhyb3dFeGNlcHRpb25dIEF0dHI/IHNldE5hbWVkSXRlbShBdHRyIGF0dHIpOworICAgIFtDRVJl
YWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb24sIEltcGxlbWVudGVkQXM9c2V0TmFtZWRJdGVtXSBB
dHRyPyBzZXROYW1lZEl0ZW1OUyhBdHRyIGF0dHIpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhy
b3dFeGNlcHRpb25dIEF0dHIgcmVtb3ZlTmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKKyAgICBb
Q0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSBBdHRyIHJlbW92ZU5hbWVkSXRlbU5TKERP
TVN0cmluZz8gbmFtZXNwYWNlVVJJLCBET01TdHJpbmcgbG9jYWxOYW1lKTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IGE4ZWMwZmUxYTg3YjUyYTUzY2M0MTlhMzZmMTZi
ZmY3YTVmZDc4ODYuLmIzMGQ3NmFkZmYyM2MyOGU5NzgwYjcxNjgwOTg4M2U1ZTI0Yjg1MzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBAIC01ODQsMTYgKzU4NCwxNCBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBIVE1MRWxlbWVudDo6c2V0T3V0ZXJUZXh0KGNvbnN0IFN0cmluZyYgdGV4
dCkKIAogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbmV4dCA/IG5leHQtPnByZXZpb3VzU2libGlu
ZygpIDogbnVsbHB0cjsKICAgICBpZiAoaXM8VGV4dD4obm9kZS5nZXQoKSkpIHsKLSAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIG1lcmdlV2l0aE5leHRUZXh0Tm9kZShkb3du
Y2FzdDxUZXh0Pigqbm9kZSksIGVjKTsKLSAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbWVyZ2VXaXRoTmV4
dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpub2RlKSk7CisgICAgICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KTsKICAgICB9CiAgICAgaWYgKGlzPFRleHQ+KHByZXYuZ2V0KCkpKSB7Ci0gICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8
VGV4dD4oKnByZXYpLCBlYyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBlYyB9OworICAgICAgICBhdXRvIHJlc3VsdCA9IG1lcmdlV2l0aE5leHRUZXh0
Tm9kZShkb3duY2FzdDxUZXh0PigqcHJldikpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAg
ICAgfQogICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvRE9NRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3Iu
Y3BwCmluZGV4IGU5Yjg1YTlkZTNmZjYyMzY5MjJmMWE4YjU5OTMxZGU2NjNhOGNjZjEuLjJjMGNm
M2I1MzdkYTYxNjYxNGNmOTg2YjFmNmU3OGMwMTk2ZTYwMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01FZGl0b3IuY3BwCkBAIC0xMzgsNyArMTM4LDkgQEAgcHVibGljOgogCiAgICAgYm9v
bCB1bmRvKEV4Y2VwdGlvbkNvZGUmIGVjKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV9lbGVt
ZW50LT5zZXRBdHRyaWJ1dGUobV9uYW1lLCBtX3ZhbHVlLCBlYyk7CisgICAgICAgIGF1dG8gcmVz
dWx0ID0gbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUobV9uYW1lLCBtX3ZhbHVlKTsKKyAgICAgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGVjID0gcmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKS5jb2RlKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
MTc2LDE2ICsxNzgsMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCB1bmRvKEV4Y2VwdGlvbkNvZGUm
IGVjKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKG1faGFkQXR0cmlidXRlKQotICAgICAg
ICAgICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUobV9uYW1lLCBtX29sZFZhbHVlLCBlYyk7Ci0g
ICAgICAgIGVsc2UKKyAgICAgICAgaWYgKG1faGFkQXR0cmlidXRlKSB7CisgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IG1fZWxlbWVudC0+c2V0QXR0cmlidXRlKG1fbmFtZSwgbV9vbGRWYWx1ZSk7
CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAg
IGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7CisgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgbV9lbGVtZW50LT5yZW1vdmVBdHRyaWJ1dGUobV9uYW1lKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgYm9vbCByZWRvKEV4Y2VwdGlvbkNvZGUmIGVjKSBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUobV9uYW1lLCBt
X3ZhbHVlLCBlYyk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbGVtZW50LT5zZXRBdHRyaWJ1
dGUobV9uYW1lLCBtX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggY2U1NmJlY2UzY2I2Zjc1NDJkYzUyMGZkM2ZjMzRm
NDZjMjM5YjgxNS4uNWUxNWNjNTEwMmNjNjFiNzkzNmQ2ZDUxZWMxOWY2ZTMyMTU4NTE0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0x
OTgsNyArMTk4LDcgQEAgdm9pZCBSZXZhbGlkYXRlU3R5bGVBdHRyaWJ1dGVUYXNrOjp0aW1lckZp
cmVkKCkKICAgICBtX2VsZW1lbnRzLmNsZWFyKCk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JET01B
Z2VudDo6dG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJiBlYykKK1N0cmluZyBJbnNw
ZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhFeGNlcHRpb25Db2RlIGVjKQogewogICAgIGlm
IChlYykgewogICAgICAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMp
OwpAQCAtMjA3LDYgKzIwNywxMSBAQCBTdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JT
dHJpbmcoY29uc3QgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
CiB9CiAKK1N0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhFeGNlcHRpb24m
JiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiB7IGV4
Y2VwdGlvbi5jb2RlKCkgfS5uYW1lOworfQorCiBJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9y
RE9NQWdlbnQoV2ViQWdlbnRDb250ZXh0JiBjb250ZXh0LCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBh
Z2VBZ2VudCwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICA6IEluc3BlY3RvckFnZW50
QmFzZShBU0NJSUxpdGVyYWwoIkRPTSIpLCBjb250ZXh0KQogICAgICwgbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIoY29udGV4dC5pbmplY3RlZFNjcmlwdE1hbmFnZXIpCkBAIC02NjAsMTEgKzY2NSwx
MCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVzQXNUZXh0KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgaW50IGVsZW1lbgogICAgIGlmICghZWxlbWVudCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBwYXJzZWRFbGVtZW50ID0gY3JlYXRl
SFRNTEVsZW1lbnQoZWxlbWVudC0+ZG9jdW1lbnQoKSwgc3BhblRhZyk7Ci0gICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgcGFyc2VkRWxlbWVudC5nZXQoKS0+c2V0SW5uZXJIVE1MKCI8c3Bh
biAiICsgdGV4dCArICI+PC9zcGFuPiIsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSB0b0Vycm9yU3RyaW5nKGVjKTsKKyAgICBhdXRvIHBhcnNlZEVsZW1lbnQgPSBj
cmVhdGVIVE1MRWxlbWVudChlbGVtZW50LT5kb2N1bWVudCgpLCBzcGFuVGFnKTsKKyAgICBhdXRv
IHJlc3VsdCA9IHBhcnNlZEVsZW1lbnQuZ2V0KCkuc2V0SW5uZXJIVE1MKCI8c3BhbiAiICsgdGV4
dCArICI+PC9zcGFuPiIpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAg
ICAgZXJyb3JTdHJpbmcgPSB0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGQ3YjZkMTUzOGE0YmNlYzA2MTJkMmMzMjAwZDk1YWRl
ZTdkYjM1MzkuLmEyNDhkZWMxZDNhZTE4YzY3NmYzODFjZWM2ZjkyZjk2ZWE0Zjg2NWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC02MCw2ICs2
MCw3IEBAIGNsYXNzIERPTUVkaXRvcjsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsK
IGNsYXNzIEV2ZW50OworY2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgRmxvYXRRdWFkOwogY2xhc3Mg
RnJhbWU7CiBjbGFzcyBJbnNwZWN0b3JIaXN0b3J5OwpAQCAtMTA3LDcgKzEwOCw4IEBAIHB1Ymxp
YzoKICAgICBJbnNwZWN0b3JET01BZ2VudChXZWJBZ2VudENvbnRleHQmLCBJbnNwZWN0b3JQYWdl
QWdlbnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yRE9NQWdl
bnQoKTsKIAotICAgIHN0YXRpYyBTdHJpbmcgdG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25D
b2RlJik7CisgICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5nKEV4Y2VwdGlvbkNvZGUpOwor
ICAgIHN0YXRpYyBTdHJpbmcgdG9FcnJvclN0cmluZyhFeGNlcHRpb24mJik7CiAKICAgICB2b2lk
IGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwogICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVy
cmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcAppbmRleCA4ODM4YzkzOTRiMjU3ZjY4YjdhNDRmMDczNzU0ZjYxY2E1NGZlNmY0Li5jMmE5
NTNmNGQzZmU2MDMxNmYwNWQ0MTM5NzA2NTg1NDNkMmEyMzZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0xMzAxLDEzICsxMzAx
LDE1IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpzZXRTdHlsZVRl
eHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsCiAKICAgICB7CiAgICAgICAgIEluc3BlY3Rv
ckNTU0FnZW50OjpJbmxpbmVTdHlsZU92ZXJyaWRlU2NvcGUgb3ZlcnJpZGVTY29wZShtX2VsZW1l
bnQtPmRvY3VtZW50KCkpOwotICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZSgic3R5bGUi
LCB0ZXh0LCBlYyk7CisgICAgICAgIG1fZWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
c3R5bGVBdHRyLCB0ZXh0KTsKICAgICB9CiAKICAgICBtX3N0eWxlVGV4dCA9IHRleHQ7CiAgICAg
bV9pc1N0eWxlVGV4dFZhbGlkID0gdHJ1ZTsKICAgICBtX3J1bGVTb3VyY2VEYXRhID0gbnVsbHB0
cjsKLSAgICByZXR1cm4gIWVjOworCisgICAgZWMgPSAwOworICAgIHJldHVybiB0cnVlOwogfQog
CiBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHNpemVfdD4+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6bGluZUVuZGluZ3MoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCmluZGV4IDhiYzkxYjUzZDlhZjhkN2ZhMmFkYTMwMmNmYzZmNzhhMTA5Y2NmNWEuLmM1
ZTRmZDQ4ODViNzViYmMxZGMzNDI4YzBjNWFmYzYxOWU1ZTI5NzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKQEAgLTc4MCwzMiArNzgwLDExIEBAIFJlZlB0cjxDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24+IEludGVybmFsczo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0
ZWRJbmZvCiAgICAgcmV0dXJuIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKGVs
ZW1lbnQsIGFsbG93VmlzaXRlZFN0eWxlKTsKIH0KIAotRXhjZXB0aW9uT3I8Tm9kZSo+IEludGVy
bmFsczo6ZW5zdXJlU2hhZG93Um9vdChFbGVtZW50JiBob3N0KQotewotICAgIGlmIChTaGFkb3dS
b290KiBzaGFkb3dSb290ID0gaG9zdC5zaGFkb3dSb290KCkpCi0gICAgICAgIHJldHVybiBzaGFk
b3dSb290OwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byByZXN1bHQgPSBo
b3N0LmNyZWF0ZVNoYWRvd1Jvb3QoZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IGVjIH07Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogTm9kZSogSW50ZXJuYWxz
OjplbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KEVsZW1lbnQmIGhvc3QpCiB7CiAgICAgcmV0dXJu
ICZob3N0LmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKIH0KIAotRXhjZXB0aW9uT3I8Tm9k
ZSo+IEludGVybmFsczo6Y3JlYXRlU2hhZG93Um9vdChFbGVtZW50JiBob3N0KQotewotICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8gcmVzdWx0ID0gaG9zdC5jcmVhdGVTaGFkb3dS
b290KGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBlYyB9Owot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIE5vZGUqIEludGVybmFsczo6c2hhZG93Um9vdChFbGVt
ZW50JiBob3N0KQogewogICAgIHJldHVybiBob3N0LnNoYWRvd1Jvb3QoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCA0YTY2YzQ2OTVmNjgxZGFjOThlZTYwOWMzOTZmZGRi
N2VmMmQ4NGM4Li5hNmZlMzRjYzY5MTFjMWFlY2Q5NGQwOTA0Y2NmZGEzY2JiMTJhNjQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC0xMDAsOSArMTAwLDcgQEAgZW51bSBV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHsKIAogICAgIENTU1N0eWxlRGVjbGFyYXRpb24g
Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEVsZW1lbnQgZWxlbWVudCk7CiAKLSAg
ICBbTWF5VGhyb3dFeGNlcHRpb25dIE5vZGUgZW5zdXJlU2hhZG93Um9vdChFbGVtZW50IGhvc3Qp
OwogICAgIE5vZGUgZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdChFbGVtZW50IGhvc3QpOwotICAg
IFtNYXlUaHJvd0V4Y2VwdGlvbl0gTm9kZSBjcmVhdGVTaGFkb3dSb290KEVsZW1lbnQgaG9zdCk7
CiAgICAgTm9kZSBzaGFkb3dSb290KEVsZW1lbnQgaG9zdCk7CiAKICAgICBbTWF5VGhyb3dFeGNl
cHRpb25dIERPTVN0cmluZyBzaGFkb3dSb290VHlwZShOb2RlIHJvb3QpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCmlu
ZGV4IDU1NDI1ZDk1MjRlY2QwZTgwZGUwN2JhOWRkMzQ3Y2U3NGRjMjBhMzMuLmE4Zjk1Y2U1NTQy
NGM1MjZjYzU1ODQ0MDU1NWNkNmNmMGRkZGM2OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKQEAgLTczOSwxMSAr
NzM5LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVOYW1lc3BhY2VBdHRyaWJ1dGVzKFZl
Y3RvcjxBdHRyaWJ1dGU+JiBwcmVmaXhlZEF0dHJpYnV0CiAgICAgICAgIGlmIChuYW1lc3BhY2Vz
W2ldLnByZWZpeCkKICAgICAgICAgICAgIG5hbWVzcGFjZVFOYW1lID0gInhtbG5zOiIgKyB0b1N0
cmluZyhuYW1lc3BhY2VzW2ldLnByZWZpeCk7CiAKLSAgICAgICAgUXVhbGlmaWVkTmFtZSBwYXJz
ZWROYW1lID0gYW55TmFtZTsKLSAgICAgICAgaWYgKCFFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZU5h
bWUocGFyc2VkTmFtZSwgWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkksIG5hbWVzcGFjZVFO
YW1lLCBlYykpCisgICAgICAgIGF1dG8gcmVzdWx0ID0gRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGVO
YW1lKFhNTE5TTmFtZXM6OnhtbG5zTmFtZXNwYWNlVVJJLCBuYW1lc3BhY2VRTmFtZSk7CisgICAg
ICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIGVjID0gcmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IAotICAgICAgICBwcmVmaXhlZEF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShwYXJzZWROYW1l
LCBuYW1lc3BhY2VVUkkpKTsKKyAgICAgICAgfQorCisgICAgICAgIHByZWZpeGVkQXR0cmlidXRl
cy5hcHBlbmQoQXR0cmlidXRlKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgbmFtZXNwYWNl
VVJJKSk7CiAgICAgfQogfQogCkBAIC03NjYsMTEgKzc2OCwxMyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgaGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMoVmVjdG9yPEF0dHJpYnV0ZT4mIHByZWZpeGVkQXR0
cmlidXRlcwogICAgICAgICBBdG9taWNTdHJpbmcgYXR0clVSSSA9IGF0dHJQcmVmaXguaXNFbXB0
eSgpID8gbnVsbEF0b20gOiB0b0F0b21pY1N0cmluZyhhdHRyaWJ1dGVzW2ldLnVyaSk7CiAgICAg
ICAgIEF0b21pY1N0cmluZyBhdHRyUU5hbWUgPSBhdHRyUHJlZml4LmlzRW1wdHkoKSA/IHRvQXRv
bWljU3RyaW5nKGF0dHJpYnV0ZXNbaV0ubG9jYWxuYW1lKSA6IGF0dHJQcmVmaXggKyAiOiIgKyB0
b1N0cmluZyhhdHRyaWJ1dGVzW2ldLmxvY2FsbmFtZSk7CiAKLSAgICAgICAgUXVhbGlmaWVkTmFt
ZSBwYXJzZWROYW1lID0gYW55TmFtZTsKLSAgICAgICAgaWYgKCFFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZU5hbWUocGFyc2VkTmFtZSwgYXR0clVSSSwgYXR0clFOYW1lLCBlYykpCisgICAgICAgIGF1
dG8gcmVzdWx0ID0gRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGVOYW1lKGF0dHJVUkksIGF0dHJRTmFt
ZSk7CisgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIGVj
ID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7CiAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KIAotICAgICAgICBwcmVmaXhlZEF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0
ZShwYXJzZWROYW1lLCBhdHRyVmFsdWUpKTsKKyAgICAgICAgcHJlZml4ZWRBdHRyaWJ1dGVzLmFw
cGVuZChBdHRyaWJ1dGUocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBhdHRyVmFsdWUpKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01FbGVtZW50
Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvRE9NL0RPTUVsZW1lbnQubW0KaW5kZXggMjJiNGY5ZTNi
YTAxZTdlZmFhYjY1NjY5MzBlOGI4YzQwODhlZTM1NC4uMzNhOGMyNWVhNDRlYjNkMWVmNmI0Y2Fl
YWNjMmU2Mzg2M2UyNjcxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvRE9NL0RPTUVs
ZW1lbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvRE9NL0RPTUVsZW1lbnQubW0KQEAgLTE3
Nyw5ICsxNzcsNyBAQCAtIChOU1N0cmluZyAqKWlubmVySFRNTAogLSAodm9pZClzZXRJbm5lckhU
TUw6KE5TU3RyaW5nICopbmV3SW5uZXJIVE1MCiB7CiAgICAgSlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHVud3JhcCgqc2VsZikuc2V0
SW5uZXJIVE1MKG5ld0lubmVySFRNTCwgZWMpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Cisg
ICAgcmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZikuc2V0SW5uZXJIVE1MKG5ld0lubmVySFRN
TCkpOwogfQogCiAtIChOU1N0cmluZyAqKW91dGVySFRNTApAQCAtMTkxLDkgKzE4OSw3IEBAIC0g
KE5TU3RyaW5nICopb3V0ZXJIVE1MCiAtICh2b2lkKXNldE91dGVySFRNTDooTlNTdHJpbmcgKilu
ZXdPdXRlckhUTUwKIHsKICAgICBKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgdW53cmFwKCpzZWxmKS5zZXRPdXRlckhUTUwobmV3T3V0
ZXJIVE1MLCBlYyk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9NRXJy
b3IodW53cmFwKCpzZWxmKS5zZXRPdXRlckhUTUwobmV3T3V0ZXJIVE1MKSk7CiB9CiAKIC0gKE5T
U3RyaW5nICopY2xhc3NOYW1lCkBAIC0yODUsOSArMjgxLDcgQEAgLSAoTlNTdHJpbmcgKilnZXRB
dHRyaWJ1dGU6KE5TU3RyaW5nICopbmFtZQogLSAodm9pZClzZXRBdHRyaWJ1dGU6KE5TU3RyaW5n
ICopbmFtZSB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZQogewogICAgIEpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICB1bndyYXAoKnNlbGYp
LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgZWMpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7
CisgICAgcmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZikuc2V0QXR0cmlidXRlKG5hbWUsIHZh
bHVlKSk7CiB9CiAKIC0gKHZvaWQpcmVtb3ZlQXR0cmlidXRlOihOU1N0cmluZyAqKW5hbWUKQEAg
LTMwNywxMCArMzAxLDcgQEAgLSAoRE9NQXR0ciAqKXNldEF0dHJpYnV0ZU5vZGU6KERPTUF0dHIg
KiluZXdBdHRyCiAgICAgSlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGlmICghbmV3
QXR0cikKICAgICAgICAgcmFpc2VUeXBlRXJyb3JFeGNlcHRpb24oKTsKLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBET01BdHRyICpyZXN1bHQgPSBraXQodW53cmFwKCpzZWxmKS5zZXRB
dHRyaWJ1dGVOb2RlKCpjb3JlKG5ld0F0dHIpLCBlYykuZ2V0KCkpOwotICAgIHJhaXNlT25ET01F
cnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4ga2l0KHJhaXNlT25ET01F
cnJvcih1bndyYXAoKnNlbGYpLnNldEF0dHJpYnV0ZU5vZGUoKmNvcmUobmV3QXR0cikpKS5nZXQo
KSk7CiB9CiAKIC0gKERPTUF0dHIgKilyZW1vdmVBdHRyaWJ1dGVOb2RlOihET01BdHRyICopb2xk
QXR0cgpAQCAtMzE4LDEwICszMDksNyBAQCAtIChET01BdHRyICopcmVtb3ZlQXR0cmlidXRlTm9k
ZTooRE9NQXR0ciAqKW9sZEF0dHIKICAgICBKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAg
ICAgaWYgKCFvbGRBdHRyKQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigpOwotICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIERPTUF0dHIgKnJlc3VsdCA9IGtpdCh1bndyYXAo
KnNlbGYpLnJlbW92ZUF0dHJpYnV0ZU5vZGUoKmNvcmUob2xkQXR0ciksIGVjKS5nZXQoKSk7Ci0g
ICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBr
aXQocmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZikucmVtb3ZlQXR0cmlidXRlTm9kZSgqY29y
ZShvbGRBdHRyKSkpLnB0cigpKTsKIH0KIAogLSAoRE9NTm9kZUxpc3QgKilnZXRFbGVtZW50c0J5
VGFnTmFtZTooTlNTdHJpbmcgKiluYW1lCkBAIC0zNDMsOSArMzMxLDcgQEAgLSAoTlNTdHJpbmcg
KilnZXRBdHRyaWJ1dGVOUzooTlNTdHJpbmcgKiluYW1lc3BhY2VVUkkgbG9jYWxOYW1lOihOU1N0
cmluZyAqKWxvY2EKIC0gKHZvaWQpc2V0QXR0cmlidXRlTlM6KE5TU3RyaW5nICopbmFtZXNwYWNl
VVJJIHF1YWxpZmllZE5hbWU6KE5TU3RyaW5nICopcXVhbGlmaWVkTmFtZSB2YWx1ZTooTlNTdHJp
bmcgKil2YWx1ZQogewogICAgIEpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICB1bndyYXAoKnNlbGYpLnNldEF0dHJpYnV0ZU5TKG5hbWVz
cGFjZVVSSSwgcXVhbGlmaWVkTmFtZSwgdmFsdWUsIGVjKTsKLSAgICByYWlzZU9uRE9NRXJyb3Io
ZWMpOworICAgIHJhaXNlT25ET01FcnJvcih1bndyYXAoKnNlbGYpLnNldEF0dHJpYnV0ZU5TKG5h
bWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSwgdmFsdWUpKTsKIH0KIAogLSAodm9pZClyZW1vdmVB
dHRyaWJ1dGVOUzooTlNTdHJpbmcgKiluYW1lc3BhY2VVUkkgbG9jYWxOYW1lOihOU1N0cmluZyAq
KWxvY2FsTmFtZQpAQCAtMzc1LDEwICszNjEsNyBAQCAtIChET01BdHRyICopc2V0QXR0cmlidXRl
Tm9kZU5TOihET01BdHRyICopbmV3QXR0cgogICAgIEpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBpZiAoIW5ld0F0dHIpCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9uKCk7
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NQXR0ciAqcmVzdWx0ID0ga2l0KHVu
d3JhcCgqc2VsZikuc2V0QXR0cmlidXRlTm9kZU5TKCpjb3JlKG5ld0F0dHIpLCBlYykuZ2V0KCkp
OwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4ga2l0KHJhaXNlT25ET01FcnJvcih1bndyYXAoKnNlbGYpLnNldEF0dHJpYnV0ZU5vZGVOUygq
Y29yZShuZXdBdHRyKSkpLmdldCgpKTsKIH0KIAogLSAoQk9PTCloYXNBdHRyaWJ1dGU6KE5TU3Ry
aW5nICopbmFtZQpAQCAtNDM5LDI4ICs0MjIsMTkgQEAgLSAoRE9NTm9kZUxpc3QgKilnZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lOihOU1N0cmluZyAqKW5hbWUKIC0gKEJPT0wpbWF0Y2hlczooTlNTdHJp
bmcgKilzZWxlY3RvcnMKIHsKICAgICBKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgQk9PTCByZXN1bHQgPSB1bndyYXAoKnNlbGYpLm1h
dGNoZXMoc2VsZWN0b3JzLCBlYyk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiByYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5tYXRj
aGVzKHNlbGVjdG9ycykpOwogfQogCiAtIChET01FbGVtZW50ICopY2xvc2VzdDooTlNTdHJpbmcg
KilzZWxlY3RvcnMKIHsKICAgICBKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NRWxlbWVudCAqcmVzdWx0ID0ga2l0KHVud3JhcCgq
c2VsZikuY2xvc2VzdChzZWxlY3RvcnMsIGVjKSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBraXQocmFpc2VPbkRPTUVycm9yKHVud3Jh
cCgqc2VsZikuY2xvc2VzdChzZWxlY3RvcnMpKSk7CiB9CiAKIC0gKEJPT0wpd2Via2l0TWF0Y2hl
c1NlbGVjdG9yOihOU1N0cmluZyAqKXNlbGVjdG9ycwogewogICAgIEpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBCT09MIHJlc3VsdCA9
IHVud3JhcCgqc2VsZikubWF0Y2hlcyhzZWxlY3RvcnMsIGVjKTsKLSAgICByYWlzZU9uRE9NRXJy
b3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJhaXNlT25ET01FcnJvcih1
bndyYXAoKnNlbGYpLm1hdGNoZXMoc2VsZWN0b3JzKSk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NSFRNTEVsZW1l
bnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NSFRNTEVsZW1lbnQubW0KaW5kZXggYzI2
NWQyNTdhYTM5ZmY0YzhiZGRjOGVhZDQ3ZTk4MzY5ZGRlMjMwZi4uYTQ3Njk0YzI4NzI0MTFhMWI1
Mjc1OTUwYzg0YzMzNDRkMzYwNmNmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvRE9N
L0RPTUhUTUxFbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01IVE1MRWxl
bWVudC5tbQpAQCAtMjM1LDI2ICsyMzUsMTkgQEAgLSAoRE9NRWxlbWVudCAqKWluc2VydEFkamFj
ZW50RWxlbWVudDooTlNTdHJpbmcgKil3aGVyZSBlbGVtZW50OihET01FbGVtZW50ICopZWwKICAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgaWYgKCFlbGVtZW50
KQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigpOwotICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIERPTUVsZW1lbnQgKnJlc3VsdCA9IGtpdChXVEY6OmdldFB0
cihJTVBMLT5pbnNlcnRBZGphY2VudEVsZW1lbnQod2hlcmUsICpjb3JlKGVsZW1lbnQpLCBlYykp
KTsKLSAgICByYWlzZU9uRE9NRXJyb3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIGtpdChyYWlzZU9uRE9NRXJyb3IoSU1QTC0+aW5zZXJ0QWRqYWNlbnRFbGVtZW50KHdoZXJl
LCAqY29yZShlbGVtZW50KSkpKTsKIH0KIAogLSAodm9pZClpbnNlcnRBZGphY2VudEhUTUw6KE5T
U3RyaW5nICopd2hlcmUgaHRtbDooTlNTdHJpbmcgKilodG1sCiB7CiAgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIElNUEwtPmluc2VydEFkamFjZW50SFRNTCh3aGVyZSwgaHRtbCwgZWMpOwotICAg
IHJhaXNlT25ET01FcnJvcihlYyk7CisgICAgcmFpc2VPbkRPTUVycm9yKElNUEwtPmluc2VydEFk
amFjZW50SFRNTCh3aGVyZSwgaHRtbCkpOwogfQogCiAtICh2b2lkKWluc2VydEFkamFjZW50VGV4
dDooTlNTdHJpbmcgKil3aGVyZSB0ZXh0OihOU1N0cmluZyAqKXRleHQKIHsKICAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgSU1QTC0+aW5zZXJ0QWRqYWNlbnRUZXh0KHdoZXJlLCB0ZXh0LCBlYyk7
Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9NRXJyb3IoSU1QTC0+aW5z
ZXJ0QWRqYWNlbnRUZXh0KHdoZXJlLCB0ZXh0KSk7CiB9CiAKIC0gKHZvaWQpY2xpY2sKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01OYW1lZE5vZGVNYXAubW0gYi9Tb3VyY2Uv
V2ViS2l0L21hYy9ET00vRE9NTmFtZWROb2RlTWFwLm1tCmluZGV4IDhmOTE4NGVkOGVmMzUwMzcx
ZTQxYzI1OGFmZDlmZTc5MDg0ZmIwMWQuLjVkZDM5NTY0ZGQ0ZjRmMjM5NmYzNmI3Mjc5MzZkODNj
NWE4NTY1YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01OYW1lZE5vZGVN
YXAubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvRE9NL0RPTU5hbWVkTm9kZU1hcC5tbQpAQCAt
NjgsMTkgKzY4LDE2IEBAIC0gKERPTU5vZGUgKilzZXROYW1lZEl0ZW06KERPTU5vZGUgKilub2Rl
CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmFpc2VUeXBlRXJyb3JFeGNlcHRpb24oKTsKLSAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBET01Ob2RlICpyZXN1bHQgPSBraXQoV1RGOjpnZXRQdHIo
SU1QTC0+c2V0TmFtZWRJdGVtKCpjb3JlKG5vZGUpLCBlYykpKTsKLSAgICByYWlzZU9uRE9NRXJy
b3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byYgY29yZU5vZGUgPSAqY29yZShu
b2RlKTsKKyAgICBpZiAoIWlzPFdlYkNvcmU6OkF0dHI+KGNvcmVOb2RlKSkKKyAgICAgICAgcmFp
c2VUeXBlRXJyb3JFeGNlcHRpb24oKTsKKyAgICByZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJ
TVBMLT5zZXROYW1lZEl0ZW0oZG93bmNhc3Q8V2ViQ29yZTo6QXR0cj4oY29yZU5vZGUpKSkuZ2V0
KCkpOwogfQogCiAtIChET01Ob2RlICopcmVtb3ZlTmFtZWRJdGVtOihOU1N0cmluZyAqKW5hbWUK
IHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NTm9kZSAqcmVzdWx0ID0ga2l0KFdURjo6
Z2V0UHRyKElNUEwtPnJlbW92ZU5hbWVkSXRlbShuYW1lLCBlYykpKTsKLSAgICByYWlzZU9uRE9N
RXJyb3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGtpdChyYWlzZU9uRE9N
RXJyb3IoSU1QTC0+cmVtb3ZlTmFtZWRJdGVtKG5hbWUpKS5wdHIoKSk7CiB9CiAKIC0gKERPTU5v
ZGUgKilpdGVtOih1bnNpZ25lZClpbmRleApAQCAtOTcsMjIgKzk0LDEzIEBAIC0gKERPTU5vZGUg
KilnZXROYW1lZEl0ZW1OUzooTlNTdHJpbmcgKiluYW1lc3BhY2VVUkkgbG9jYWxOYW1lOihOU1N0
cmluZyAqKWxvY2FsCiAKIC0gKERPTU5vZGUgKilzZXROYW1lZEl0ZW1OUzooRE9NTm9kZSAqKW5v
ZGUKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgaWYg
KCFub2RlKQotICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigpOwotICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIERPTU5vZGUgKnJlc3VsdCA9IGtpdChXVEY6Omdl
dFB0cihJTVBMLT5zZXROYW1lZEl0ZW0oKmNvcmUobm9kZSksIGVjKSkpOwotICAgIHJhaXNlT25E
T01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gW3NlbGYgc2V0TmFt
ZWRJdGVtOm5vZGVdOwogfQogCiAtIChET01Ob2RlICopcmVtb3ZlTmFtZWRJdGVtTlM6KE5TU3Ry
aW5nICopbmFtZXNwYWNlVVJJIGxvY2FsTmFtZTooTlNTdHJpbmcgKilsb2NhbE5hbWUKIHsKICAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NTm9kZSAqcmVzdWx0ID0ga2l0KFdURjo6Z2V0UHRy
KElNUEwtPnJlbW92ZU5hbWVkSXRlbU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lLCBlYykpKTsK
LSAgICByYWlzZU9uRE9NRXJyb3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IGtpdChyYWlzZU9uRE9NRXJyb3IoSU1QTC0+cmVtb3ZlTmFtZWRJdGVtTlMobmFtZXNwYWNlVVJJ
LCBsb2NhbE5hbWUpKS5wdHIoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUVsZW1lbnQuY3BwCmluZGV4IDUyNmQwNTc4NzEyYzRhZTI0OWExYzdjNzli
MWU1ZDIwN2M1OWMwZjYuLjA0YjBjODcxZjg2MGUyNDVlOGNjYzFkZGQ0ZDI4OTYxYzVkNGJjODYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50LmNwcApAQCAt
NjEzLDEwICs2MTMsOSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKFdl
YktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lLAogICAgIFdlYkNvcmU6OkVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKICAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0QXR0cmlidXRlKGNvbnZlcnRl
ZE5hbWUsIGNvbnZlcnRlZFZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0
ID0gaXRlbS0+c2V0QXR0cmlidXRlKGNvbnZlcnRlZE5hbWUsIGNvbnZlcnRlZFZhbHVlKTsKKyAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0cy5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgp
KTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAg
LTY1MCwxMyArNjQ5LDEzIEBAIFdlYktpdERPTUF0dHIqIHdlYmtpdF9kb21fZWxlbWVudF9zZXRf
YXR0cmlidXRlX25vZGUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgV2ViCiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwogICAgIFdlYkNvcmU6OkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV2ViQ29yZTo6QXR0ciogY29udmVydGVk
TmV3QXR0ciA9IFdlYktpdDo6Y29yZShuZXdBdHRyKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6QXR0cj4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnNldEF0dHJpYnV0ZU5vZGUoKmNvbnZlcnRlZE5ld0F0dHIsIGVjKSk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0QXR0cmlidXRlTm9kZSgq
Y29udmVydGVkTmV3QXR0cik7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdHMucmVs
ZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7CiAgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVz
Yy5uYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQocmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLmdldCgpKTsKIH0KIAogV2ViS2l0RE9NQXR0ciogd2Vi
a2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGVfbm9kZShXZWJLaXRET01FbGVtZW50KiBz
ZWxmLCBXZWJLaXRET01BdHRyKiBvbGRBdHRyLCBHRXJyb3IqKiBlcnJvcikKQEAgLTY2NywxMyAr
NjY2LDEzIEBAIFdlYktpdERPTUF0dHIqIHdlYmtpdF9kb21fZWxlbWVudF9yZW1vdmVfYXR0cmli
dXRlX25vZGUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwKICAgICBnX3JldHVybl92YWxfaWZfZmFp
bCghZXJyb3IgfHwgISplcnJvciwgMCk7CiAgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKICAgICBXZWJDb3JlOjpBdHRyKiBjb252ZXJ0ZWRPbGRBdHRyID0g
V2ViS2l0Ojpjb3JlKG9sZEF0dHIpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIFJlZlB0cjxXZWJDb3JlOjpBdHRyPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+cmVtb3ZlQXR0cmlidXRlTm9kZSgqY29udmVydGVkT2xkQXR0ciwgZWMpKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgYXV0byByZXN1bHQgPSBpdGVtLT5yZW1vdmVBdHRyaWJ1dGVOb2RlKCpjb252
ZXJ0ZWRPbGRBdHRyKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0cy5yZWxlYXNl
RXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1bHQu
cmVsZWFzZVJldHVyblZhbHVlKCkucHRyKCkpOwogfQogCiBXZWJLaXRET01IVE1MQ29sbGVjdGlv
biogd2Via2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9hc19odG1sX2Nv
bGxlY3Rpb24oV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCkBAIC03
MjAsMTAgKzcxOSw5IEBAIHZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbnMo
V2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hCiAgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkTmFtZXNwYWNlVVJJID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFjZVVS
SSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkUXVhbGlmaWVkTmFtZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChxdWFsaWZpZWROYW1lKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0QXR0cmlidXRlTlMoY29udmVydGVkTmFtZXNwYWNl
VVJJLCBjb252ZXJ0ZWRRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZWRWYWx1ZSwgZWMpOwotICAgIGlm
IChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPnNldEF0dHJpYnV0ZU5TKGNvbnZlcnRlZE5h
bWVzcGFjZVVSSSwgY29udmVydGVkUXVhbGlmaWVkTmFtZSwgY29udmVydGVkVmFsdWUpOworICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhyZXN1bHRzLnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkp
OwogICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CiAgICAgfQogfQpAQCAt
Nzc0LDEzICs3NzIsMTIgQEAgV2ViS2l0RE9NQXR0ciogd2Via2l0X2RvbV9lbGVtZW50X3NldF9h
dHRyaWJ1dGVfbm9kZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxmLAogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKICAgICBXZWJDb3JlOjpFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkF0dHIqIGNvbnZlcnRlZE5l
d0F0dHIgPSBXZWJLaXQ6OmNvcmUobmV3QXR0cik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5zZXRBdHRyaWJ1dGVOb2RlTlMoKmNvbnZlcnRlZE5ld0F0dHIsIGVjKSk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0QXR0cmlidXRlTm9kZU5T
KCpjb252ZXJ0ZWROZXdBdHRyKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0cy5y
ZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNk
ZXNjLm5hbWUpOwogICAgIH0KLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KS5nZXQoKSk7CiB9CiAKIGdib29sZWFuIHdlYmtpdF9kb21fZWxlbWVudF9oYXNfYXR0cmlidXRl
KFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQpAQCAtODc0LDEzICs4
NzEsMTMgQEAgZ2Jvb2xlYW4gd2Via2l0X2RvbV9lbGVtZW50X21hdGNoZXMoV2ViS2l0RE9NRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG8KICAgICBnX3JldHVybl92YWxfaWZfZmFp
bCghZXJyb3IgfHwgISplcnJvciwgRkFMU0UpOwogICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2VsZWN0b3Jz
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+bWF0Y2hlcyhjb252
ZXJ0ZWRTZWxlY3RvcnMsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgYXV0byByZXN1bHQgPSBpdGVt
LT5tYXRjaGVzKGNvbnZlcnRlZFNlbGVjdG9ycyk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRp
b24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KHJlc3VsdHMucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7CiAgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiB9
CiAKIFdlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZWxlbWVudF9jbG9zZXN0KFdlYktpdERP
TUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKQpA
QCAtODkxLDMwICs4ODgsMTggQEAgV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVtZW50
X2Nsb3Nlc3QoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIKICAgICBnX3JldHVy
bl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CiAgICAgV2ViQ29yZTo6RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRT
ZWxlY3RvcnMgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2VsZWN0b3JzKTsKLSAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNsb3Nlc3QoY29udmVydGVkU2VsZWN0b3Jz
LCBlYykpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPmNsb3Nlc3QoY29u
dmVydGVkU2VsZWN0b3JzKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0cy5yZWxl
YXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwogfQogCiBnYm9vbGVhbiB3ZWJraXRfZG9tX2VsZW1l
bnRfd2Via2l0X21hdGNoZXNfc2VsZWN0b3IoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHNlbGVjdG9ycywgR0Vycm9yKiogZXJyb3IpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRUxFTUVOVChzZWxmKSwgRkFMU0UpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGVjdG9ycywgRkFMU0UpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yLCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTZWxlY3RvcnMgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoc2VsZWN0b3JzKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5tYXRjaGVzKGNvbnZlcnRlZFNlbGVjdG9ycywg
ZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUp
OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB3ZWJraXRfZG9tX2VsZW1l
bnRfbWF0Y2hlcyhzZWxmLCBzZWxlY3RvcnMsIGVycm9yKTsKIH0KIAogdm9pZCB3ZWJraXRfZG9t
X2VsZW1lbnRfd2Via2l0X3JlcXVlc3RfZnVsbHNjcmVlbihXZWJLaXRET01FbGVtZW50KiBzZWxm
KQpAQCAtOTM1LDEzICs5MjAsMTMgQEAgV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVt
ZW50X2luc2VydF9hZGphY2VudF9lbGVtZW50KFdlYktpdERPTUVsZW1lbnQqIHMKICAgICBXZWJD
b3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFdoZXJlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHdoZXJlKTsKICAgICBXZWJD
b3JlOjpFbGVtZW50KiBjb252ZXJ0ZWRFbGVtZW50ID0gV2ViS2l0Ojpjb3JlKGVsZW1lbnQpOwot
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxXZWJDb3JlOjpF
bGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW5zZXJ0QWRqYWNlbnRF
bGVtZW50KGNvbnZlcnRlZFdoZXJlLCAqY29udmVydGVkRWxlbWVudCwgZWMpKTsKLSAgICBpZiAo
ZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgYXV0byByZXN1bHQgPSBpdGVtLT5pbnNlcnRBZGphY2VudEVsZW1lbnQoY29udmVy
dGVkV2hlcmUsICpjb252ZXJ0ZWRFbGVtZW50KTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
cmVzdWx0cy5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwogfQogCiB2b2lkIHdlYmtpdF9k
b21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfaHRtbChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogd2hlcmUsIGNvbnN0IGdjaGFyKiBodG1sLCBHRXJyb3IqKiBlcnJvcikKQEAg
LTk1NCwxMCArOTM5LDkgQEAgdm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfaW5zZXJ0X2FkamFjZW50
X2h0bWwoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIKICAgICBXZWJDb3JlOjpF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFdoZXJlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHdoZXJlKTsKICAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRIdG1sID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGh0bWwpOwotICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPmluc2VydEFkamFjZW50SFRNTChj
b252ZXJ0ZWRXaGVyZSwgY29udmVydGVkSHRtbCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRv
IHJlc3VsdCA9IGl0ZW0tPmluc2VydEFkamFjZW50SFRNTChjb252ZXJ0ZWRXaGVyZSwgY29udmVy
dGVkSHRtbCk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdHMucmVsZWFzZUV4Y2Vw
dGlvbigpLmNvZGUoKSk7CiAgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
ICAgICB9CiB9CkBAIC05NzIsMTAgKzk1Niw5IEBAIHZvaWQgd2Via2l0X2RvbV9lbGVtZW50X2lu
c2VydF9hZGphY2VudF90ZXh0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyCiAg
ICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRXaGVyZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh3aGVyZSk7CiAg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVGV4dCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0ZXh0
KTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpdGVtLT5pbnNlcnRB
ZGphY2VudFRleHQoY29udmVydGVkV2hlcmUsIGNvbnZlcnRlZFRleHQsIGVjKTsKLSAgICBpZiAo
ZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgYXV0byByZXN1bHQgPSBpdGVtLT5pbnNlcnRBZGphY2VudFRleHQoY29udmVydGVk
V2hlcmUsIGNvbnZlcnRlZFRleHQpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhyZXN1bHRz
LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7CiAgICAgfQogfQpAQCAtMTI2MywxMCArMTI0Niw5IEBAIHZvaWQgd2Via2l0
X2RvbV9lbGVtZW50X3NldF9pbm5lcl9odG1sKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1CiAgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CiAg
ICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0g
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0SW5uZXJIVE1M
KGNvbnZlcnRlZFZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRl
bS0+c2V0SW5uZXJIVE1MKGNvbnZlcnRlZFZhbHVlKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MocmVzdWx0cy5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAgLTEyODgsMTAgKzEyNzAsOSBAQCB2
b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfb3V0ZXJfaHRtbChXZWJLaXRET01FbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEq
ZXJyb3IpOwogICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNl
dE91dGVySFRNTChjb252ZXJ0ZWRWYWx1ZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGl0ZW0tPnNldE91dGVySFRNTChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgaWYgKHJlc3Vs
dC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24gZWNkZXNjKHJlc3VsdHMucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7CiAgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTU5hbWVkTm9kZU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hbWVkTm9kZU1hcC5jcHAKaW5kZXggMzVjMTdm
ZTJmZDZmY2U2ZDVhNWNiMzVjOWZlZGI1MzU3Njk0NWJiOS4uNzdlZjkyYWI3NDU0MDk5ZTlkOWIy
NzNhYWY1Y2M1NmI3ZDM2Mjg5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NTmFtZWROb2RlTWFwLmNwcApAQCAtMTUyLDEzICsxNTIsMTIgQEAgV2ViS2l0RE9N
Tm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbShXZWJLaXRET01O
YW1lZE5vZGVNYXAqIHMKICAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJv
ciwgMCk7CiAgICAgV2ViQ29yZTo6TmFtZWROb2RlTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwogICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE5vZGUgPSBXZWJLaXQ6OmNvcmUobm9k
ZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNv
cmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zZXROYW1lZEl0ZW0o
KmNvbnZlcnRlZE5vZGUsIGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRl
bS0+c2V0TmFtZWRJdGVtKCpjb252ZXJ0ZWROb2RlKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVz
Yy5jb2RlLCBlY2Rlc2MubmFtZSk7CiAgICAgfQotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQocmVzdWx0LnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpLmdldCgpKTsKIH0KIAogV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1l
ZF9ub2RlX21hcF9yZW1vdmVfbmFtZWRfaXRlbShXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYs
IGNvbnN0IGdjaGFyKiBuYW1lLCBHRXJyb3IqKiBlcnJvcikKQEAgLTE2OSwxMyArMTY4LDEyIEBA
IFdlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcmVtb3ZlX25hbWVkX2l0
ZW0oV2ViS2l0RE9NTmFtZWROb2RlTWFwCiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9y
IHx8ICEqZXJyb3IsIDApOwogICAgIFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KG5hbWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+cmVtb3ZlTmFtZWRJdGVtKGNvbnZlcnRlZE5hbWUsIGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAg
IGF1dG8gcmVzdWx0ID0gaXRlbS0+cmVtb3ZlTmFtZWRJdGVtKGNvbnZlcnRlZE5hbWUpOworICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7
CiAgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKICAgICB9Ci0gICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6
OmtpdChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkucHRyKCkpOwogfQogCiBXZWJLaXRET01O
b2RlKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2l0ZW0oV2ViS2l0RE9NTmFtZWROb2RlTWFw
KiBzZWxmLCBndWxvbmcgaW5kZXgpCkBAIC0yMDIsMTkgKzIwMCw3IEBAIFdlYktpdERPTU5vZGUq
IHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X25hbWVkX2l0ZW1fbnMoV2ViS2l0RE9NTmFt
ZWROb2RlTWFwCiAKIFdlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfc2V0
X25hbWVkX2l0ZW1fbnMoV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBXZWJLaXRET01Ob2Rl
KiBub2RlLCBHRXJyb3IqKiBlcnJvcikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQU1F
RF9OT0RFX01BUChzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19OT0RFKG5vZGUpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwg
ISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6TmFtZWROb2RlTWFwKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE5vZGUgPSBXZWJLaXQ6OmNv
cmUobm9kZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRy
PFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zZXROYW1l
ZEl0ZW0oKmNvbnZlcnRlZE5vZGUsIGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gd2Via2l0X2RvbV9uYW1lZF9ub2RlX21h
cF9zZXRfbmFtZWRfaXRlbShzZWxmLCBub2RlLCBlcnJvcik7CiB9CiAKIFdlYktpdERPTU5vZGUq
IHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcmVtb3ZlX25hbWVkX2l0ZW1fbnMoV2ViS2l0RE9N
TmFtZWROb2RlTWFwKiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hh
ciogbG9jYWxOYW1lLCBHRXJyb3IqKiBlcnJvcikKQEAgLTIyNywxMyArMjEzLDEyIEBAIFdlYktp
dERPTU5vZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcmVtb3ZlX25hbWVkX2l0ZW1fbnMo
V2ViS2l0RE9NTmFtZWROb2RlCiAgICAgV2ViQ29yZTo6TmFtZWROb2RlTWFwKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwogICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWVzcGFjZVVSSSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VVUkkpOwogICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZExvY2FsTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChsb2NhbE5hbWUpOwotICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxXZWJDb3JlOjpOb2Rl
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVtb3ZlTmFtZWRJdGVtTlMoY29u
dmVydGVkTmFtZXNwYWNlVVJJLCBjb252ZXJ0ZWRMb2NhbE5hbWUsIGVjKSk7Ci0gICAgaWYgKGVj
KSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+cmVtb3ZlTmFtZWRJdGVtTlMoY29udmVydGVkTmFt
ZXNwYWNlVVJJLCBjb252ZXJ0ZWRMb2NhbE5hbWUpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7CiAgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCkucHRyKCkpOwogfQogCiBndWxvbmcgd2Via2l0X2RvbV9uYW1lZF9ub2RlX21h
cF9nZXRfbGVuZ3RoKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1l
bnQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMv
V0tET01FbGVtZW50Lm1tCmluZGV4IGE1MzQ1MGZkMjc3ZWNjNTdiYmJmMDA5M2JjY2I1ZTI4MTE3
YWU4MmUuLjJjMDZjZWM2YTUwM2M3NTYzNjZjMWQ2ZGJmMmU2Njc5NTYzNDk0MGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RP
TUVsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvbWFjL1dLRE9NRWxlbWVudC5tbQpAQCAtNDUsOSArNDUsNyBAQCAtIChOU1N0cmluZyAq
KWdldEF0dHJpYnV0ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUKIAogLSAodm9pZClzZXRBdHRyaWJ1
dGU6KE5TU3RyaW5nICopbmFtZSB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZQogewotICAgIC8vIEZJ
WE1FOiBEbyBzb21ldGhpbmcgYWJvdXQgdGhlIGV4Y2VwdGlvbi4KLSAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjOwotICAgIGRvd25jYXN0PFdlYkNvcmU6OkVsZW1lbnQ+KCpfaW1wbCkuc2V0
QXR0cmlidXRlKG5hbWUsIHZhbHVlLCBlYyk7CisgICAgZG93bmNhc3Q8V2ViQ29yZTo6RWxlbWVu
dD4oKl9pbXBsKS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCiAtIChOU1N0cmluZyAq
KXRhZ05hbWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCA2NDliMGI2MTgwNzA3NWIyZWE2MzJlOTE3MDE1ZjBkZmYxNzExMWY0
Li42OTQxNWRlNmIzZWM2YzA0MjZjMGY2MjU0NTQ2OTJlM2VhODFhMWZlIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTAgQEAKKzIwMTYtMTAtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIE1vdmUgRWxlbWVudCwgTmFtZWROb2RlTWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20g
RXhjZXB0aW9uQ29kZSB0byBFeGNlcHRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDIwNgorCisgICAgICAgICogZmFzdC9kb20vcmVzb3VyY2Vz
L3NoYWRvdy10ZXN0LWRyaXZlci5qczogRGVsZXRlZC4gVW51c2VkLgorCiAyMDE2LTEwLTMwICBG
cmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KIAogICAgICAgICBVc2UgSGFyZkJ1enog
b3QtbWF0aCBBUEkgdG8gcGFyc2UgdGhlIE9wZW5UeXBlIE1BVEggdGFibGUKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9zaGFkb3ctdGVzdC1kcml2ZXIuanMgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvc2hhZG93LXRlc3QtZHJpdmVyLmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWVlYjdmOWZhMWM4MTg2YjA1NTRjNmY0MGI5ZWFk
NjVmZDNhNWVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9zaGFkb3ctdGVzdC1kcml2ZXIuanMKKysr
IC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotLy8KLS8vIHNoYWRvdy10ZXN0LWRyaXZlci5q
cwotLy8KLS8vIFRvIHVzZSBzaGFkb3ctdGVzdC1kcml2ZXIuanMsIHlvdSBzaG91bGQgaGF2ZQot
Ly8gICA8ZGl2IGlkPSJhY3R1YWwtY29udGFpbmVyIj48L2Rpdj4KLS8vICAgPGRpdiBpZD0iZXhw
ZWN0LWNvbnRhaW5lciI+PC9kaXY+Ci0vLyAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgotLy8g
aW4geW91ciBib2R5LgotLy8KLS8vIFRoZW4sIGRlZmluZSB0ZXN0IGZ1bmN0aW9ucyBoYXZpbmcg
b25lIGFyZ3VtZW50ICdjYWxsSWZEb25lJy4KLS8vIGNhbGxJZkRvbmUgc2hvdWxkIGJlIGNhbGxl
ZCB3aGVuIHlvdXIgdGVzdCBmdW5jdGlvbiBmaW5pc2hlZC4KLS8vCi0vLyBJbiBib2R5Lm9ubG9h
ZCwgY2FsbCBkb1Rlc3QodGVzdEZ1bmNzKSB3aGVyZSB0ZXN0RnVuY3MgaXMgYW4gYXJyYXkgb2Yg
dGVzdCBmdW5jdGlvbnMuCi0vLwotLy8gU2VlIGNvbnRlbnQtZWxlbWVudC1tb3ZlLmh0bWwgYXMg
YW4gZXhhbXBsZS4KLS8vCi0KLWZ1bmN0aW9uIGxvZyhtZXNzYWdlKSB7Ci0gICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwgKz0gKG1lc3NhZ2UgKyAiXG4iKTsK
LX0KLQotZnVuY3Rpb24gcmVtb3ZlQWxsQ2hpbGRyZW4oZWxlbSkgewotICAgIHdoaWxlIChlbGVt
LmZpcnN0Q2hpbGQpCi0gICAgICAgIGVsZW0ucmVtb3ZlQ2hpbGQoZWxlbS5maXJzdENoaWxkKTsK
LX0KLQotZnVuY3Rpb24gY2xlYW5VcCgpIHsKLSAgICByZW1vdmVBbGxDaGlsZHJlbihkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpKTsKLSAgICByZW1vdmVBbGxDaGls
ZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpKTsKLX0KLQot
ZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVyTGluZXModGV4dCkgewotICAgIHZhciBsaW5lcyA9IHRl
eHQuc3BsaXQoJ1xuJyk7Ci0gICAgbGluZXMuc3BsaWNlKDAsIDIpOwotICAgIHJldHVybiBsaW5l
cy5qb2luKCdcbicpOwotfQotCi1mdW5jdGlvbiBjaGVjaygpIHsKLSAgICB2YXIgZXhwZWN0Q29u
dGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKTsKLSAg
ICB2YXIgYWN0dWFsQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1j
b250YWluZXInKTsKLSAgICB2YXIgb3JpZ2luYWxEaXNwbGF5VmFsdWUgPSBhY3R1YWxDb250YWlu
ZXIuc3R5bGUuZGlzcGxheTsKLSAgICBhY3R1YWxDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdu
b25lJzsKLSAgICBleHBlY3RDb250YWluZXIub2Zmc2V0TGVmdDsKLSAgICB2YXIgcmVmQ29udGFp
bmVyUmVuZGVyVHJlZSA9IGludGVybmFscy5lbGVtZW50UmVuZGVyVHJlZUFzVGV4dChleHBlY3RD
b250YWluZXIpOwotICAgIHZhciByZWZSZW5kZXJUcmVlID0gcmVtb3ZlQ29udGFpbmVyTGluZXMo
cmVmQ29udGFpbmVyUmVuZGVyVHJlZSk7Ci0gICAgYWN0dWFsQ29udGFpbmVyLnN0eWxlLmRpc3Bs
YXkgPSBvcmlnaW5hbERpc3BsYXlWYWx1ZTsKLQotICAgIG9yaWdpbmFsRGlzcGxheVZhbHVlID0g
ZXhwZWN0Q29udGFpbmVyLnN0eWxlLmRpc3BsYXk7Ci0gICAgZXhwZWN0Q29udGFpbmVyLnN0eWxl
LmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgYWN0dWFsQ29udGFpbmVyLm9mZnNldExlZnQ7Ci0gICAg
dmFyIHRhcmdldENvbnRhaW5lclJlbmRlclRyZWUgPSBpbnRlcm5hbHMuZWxlbWVudFJlbmRlclRy
ZWVBc1RleHQoYWN0dWFsQ29udGFpbmVyKTsKLSAgICB2YXIgdGFyZ2V0UmVuZGVyVHJlZSA9IHJl
bW92ZUNvbnRhaW5lckxpbmVzKHRhcmdldENvbnRhaW5lclJlbmRlclRyZWUpOwotICAgIGV4cGVj
dENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gb3JpZ2luYWxEaXNwbGF5VmFsdWU7Ci0KLSAgICBp
ZiAodGFyZ2V0UmVuZGVyVHJlZSA9PSByZWZSZW5kZXJUcmVlKQotICAgICAgICBsb2coIlBBU1Mi
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgbG9nKCJGQUlMIik7Ci0gICAgICAgIGxvZygiRXhwZWN0
ZWQ6ICIpOwotICAgICAgICBsb2cocmVmUmVuZGVyVHJlZSk7Ci0gICAgICAgIGxvZygiQWN0dWFs
OiAiKTsKLSAgICAgICAgbG9nKHRhcmdldFJlbmRlclRyZWUpOwotICAgIH0KLX0KLQotZnVuY3Rp
b24gY3JlYXRlU3BhbldpdGhUZXh0KHRleHQsIGNsYXNzTmFtZSkgewotICAgIHZhciBzcGFuID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwotICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpOwotICAgIGlmIChjbGFzc05hbWUpCi0gICAgICAg
IHNwYW4uY2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAgIHJldHVybiBzcGFuOwotfQotCi1mdW5j
dGlvbiBjcmVhdGVDb250ZW50V2l0aFNlbGVjdChzZWxlY3QsIGZhbGxiYWNrVGV4dCkgewotICAg
IHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNyZWF0ZUNvbnRlbnRFbGVtZW50KCk7Ci0gICAgY29u
dGVudC5zZXRBdHRyaWJ1dGUoJ3NlbGVjdCcsIHNlbGVjdCk7Ci0gICAgaWYgKGZhbGxiYWNrVGV4
dCkKLSAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoZmFsbGJh
Y2tUZXh0KSk7Ci0KLSAgICByZXR1cm4gY29udGVudDsKLX0KLQotZnVuY3Rpb24gY3JlYXRlQ29u
dGVudFdpdGhUZXh0KGZhbGxiYWNrVGV4dCkgewotICAgIHZhciBjb250ZW50ID0gaW50ZXJuYWxz
LmNyZWF0ZUNvbnRlbnRFbGVtZW50KCk7Ci0gICAgaWYgKGZhbGxiYWNrVGV4dCkKLSAgICAgICAg
Y29udGVudC5pbm5lckhUTUwgPSBmYWxsYmFja1RleHQ7Ci0KLSAgICByZXR1cm4gY29udGVudDsK
LX0KLQotZnVuY3Rpb24gYXBwZW5kU2hhZG93KHRhcmdldCwgc2VsZWN0KSB7Ci0gICAgdmFyIHJv
b3QgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdCh0YXJnZXQpOwotCi0gICAgdmFyIGNvbnRl
bnQgPSBpbnRlcm5hbHMuY3JlYXRlQ29udGVudEVsZW1lbnQoKTsKLSAgICBjb250ZW50LnNldEF0
dHJpYnV0ZSgnc2VsZWN0Jywgc2VsZWN0KTsKLSAgICBjb250ZW50LmFwcGVuZENoaWxkKGNyZWF0
ZVNwYW5XaXRoVGV4dCgiRkFMTEJBQ0siKSk7Ci0KLSAgICByb290LmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKCJ7U0hBRE9XOiAiKSk7Ci0gICAgcm9vdC5hcHBlbmRDaGlsZChj
b250ZW50KTsKLSAgICByb290LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ9
IikpOwotfQotCi1mdW5jdGlvbiBhcHBlbmRTaGFkb3dEZWVwKHRhcmdldCwgc2VsZWN0KSB7Ci0g
ICAgdmFyIHJvb3QgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdCh0YXJnZXQpOwotCi0gICAg
dmFyIGNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgIHsKLSAgICAg
ICAgdmFyIGNvbnRlbnQgPSBpbnRlcm5hbHMuY3JlYXRlQ29udGVudEVsZW1lbnQoKTsKLSAgICAg
ICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3NlbGVjdCcsIHNlbGVjdCk7Ci0gICAgICAgIGNvbnRl
bnQuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJGQUxMQkFDSyIpKTsKLQotICAgICAg
ICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgie0lOTkVSOiAiKSk7
Ci0gICAgICAgIGNoaWxkLmFwcGVuZENoaWxkKGNvbnRlbnQpOwotICAgICAgICBjaGlsZC5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgifSIpKTsKLSAgICB9Ci0KLSAgICByb290
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ7U0hBRE9XOiAiKSk7Ci0gICAg
cm9vdC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgifSIpKTsKLX0KLQotZnVuY3Rpb24gZG9UZXN0SWZMZWZ0KHJlc3RUZXN0
cykgewotICAgIHZhciB0ZXN0ID0gcmVzdFRlc3RzLnNoaWZ0KCk7Ci0gICAgaWYgKHRlc3QgPT0g
bnVsbCkKLSAgICAgICAgcmV0dXJuIGRvbmVUZXN0KCk7Ci0KLSAgICB2YXIgY2FsbElmRG9uZSA9
IGZ1bmN0aW9uKCkgewotICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgY2hlY2soKTsKLSAgICAgICAgICAgIGNsZWFuVXAoKTsKLSAgICAgICAgICAgIGRvVGVzdElm
TGVmdChyZXN0VGVzdHMpOwotICAgICAgICB9LCAwKTsKLSAgICB9OwotCi0gICAgbG9nKHRlc3Qu
bmFtZSk7Ci0gICAgdGVzdChjYWxsSWZEb25lKTsKLX0KLQotZnVuY3Rpb24gZG9uZVRlc3QoKSB7
Ci0gICAgbG9nKCJURVNUIENPTVBMRVRFRCIpOwotICAgIGlmICh3aW5kb3cudGVhckRvd25PbmNl
KQotICAgICAgICB3aW5kb3cudGVhckRvd25PbmNlKCk7Ci0gICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Ci19Ci0KLS8vIEEgdGVzdCBkcml2ZXIuIENhbGwgdGhpcyBib2R5Lm9ubG9hZC4KLWZ1
bmN0aW9uIGRvVGVzdCh0ZXN0cykgewotICAgIGlmICh3aW5kb3cuc2V0VXBPbmNlKQotICAgICAg
ICB3aW5kb3cuc2V0VXBPbmNlKCk7Ci0KLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKLSAg
ICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci0gICAgICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOwotICAgIH0KLQotICAgIGNsZWFuVXAoKTsKLSAgICBkb1Rlc3RJZkxlZnQodGVz
dHMpOwotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293363</attachid>
            <date>2016-10-30 12:33:03 -0700</date>
            <delta_ts>2016-10-30 15:13:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164206-20161030122909.patch</filename>
            <type>text/plain</type>
            <size>106683</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODlhOGNiMzM4YzlkZjRk
NWY0OWZlMDcwYjdkNjc2YTE3YmY0MjE1Yi4uZDYwNjUxZTc2NDdlNGVjMmQ1ODk1Zjc3NzQ1MDg4
NTYwYjE5ZTE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDE2LTEwLTMwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIEVsZW1lbnQsIE5hbWVk
Tm9kZU1hcCwgYW5kIERPTVN0cmluZ01hcCBmcm9tIEV4Y2VwdGlvbkNvZGUgdG8gRXhjZXB0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyMDYK
KworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NU3Ry
aW5nTWFwOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKTogVXNlIG1vZGVybiBmb3IgbG9vcCwgYW5kCisg
ICAgICAgIHVwZGF0ZXMgc2luY2UgdGhlIG5hbWVzIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGEgdmVj
dG9yLgorICAgICAgICAoV2ViQ29yZTo6SlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKTogVXNl
IHByb3BhZ2F0ZUV4Y2VwdGlvbi4gQWxzbyByZXR1cm4KKyAgICAgICAgdHJ1ZSBhbnkgdGltZSBh
biBleGNlcHRpb24gaXMgcmFpc2VkLiBTaW5jZSB0cnVlIHRlbGxzIHRoZSBjYWxsZXIgdG8gcmV0
dXJuCisgICAgICAgIHdpdGhvdXQgZG9pbmcgYW55IHdvcmssIHdlIGFsd2F5cyB3YW50IHRvIHJl
dHVybiB0aGF0IG9uIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgKiBkb20vRGF0YXNldERPTVN0cmlu
Z01hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhc2V0RE9NU3RyaW5nTWFwOjpuYW1lcyk6
IFJlbmFtZWQgZnJvbSBnZXROYW1lcyBhbmQgbWFkZSB0aGlzCisgICAgICAgIHJldHVybiBhIFZl
Y3RvciBpbnN0ZWFkIG9mIHBvcHVsYXRpbmcgYSBwYXNzZWQtaW4gdmVjdG9yLgorICAgICAgICAo
V2ViQ29yZTo6RGF0YXNldERPTVN0cmluZ01hcDo6c2V0SXRlbSk6IFVzZSBFeGNlcHRpb25Pci4K
KyAgICAgICAgKiBkb20vRGF0YXNldERPTVN0cmluZ01hcC5oOiBVcGRhdGVkIGZvciBhYm92ZS4K
KworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6YWRvcHROb2RlKTogVXBkYXRlZCB0byB1c2UgRXhjZXB0aW9uT3IgZm9yCisgICAgICAgIHJl
bW92ZUF0dHJpYnV0ZU5vZGUuIENoYW5nZWQgdG8gdXNlIHJlbW92ZSByYXRoZXIgdGhhbiByZW1v
dmVDaGlsZCBmb3IKKyAgICAgICAgYmV0dGVyIGNsYXJpdHkuCisKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGUpOiBVc2Ug
RXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjcmVhdGVTaGFkb3dSb290
KTogRGVsZXRlZC4gVW51c2VkLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0YWNoU2hh
ZG93KTogVXNlIEV4Y2VwdGlvbk9yLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2hhZG93
Um9vdEZvckJpbmRpbmdzKTogVHdlYWtlZCBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OnVzZXJBZ2VudFNoYWRvd1Jvb3QpOiBSZW1vdmVkIHVubmVlZGVkIGlmIHN0YXRlbW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjplbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KTog
VHdlYWtlZCBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5v
ZGUpOiBVc2UgRXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRy
aWJ1dGVOb2RlTlMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0
dHJpYnV0ZU5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlTmFtZSk6IERpdHRvLiBBbHNvIGNoYW5nZWQgcmV0dXJuIHJlc3VsdAorICAgICAgICB0
byBiZSBhIFF1YWxpZmllZE5hbWUgaW5zdGVhZCBvZiB1c2luZyBhbiBvdXQgYXJndW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6bWVyZ2VXaXRoTmV4dFRleHROb2RlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRPdXRlckhUTUwpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnNldElubmVySFRNTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6bWF0Y2hlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xv
c2VzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0QWRqYWNlbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydEFkamFjZW50RWxlbWVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE5vZGVGb3JJbnNlcnRpb24pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRFbGVtZW50Rm9ySW5zZXJ0aW9uKTogQWRk
ZWQuIEhlbHBlciBmb3IgdGhlCisgICAgICAgIGluc2VydEFkamFjZW50SFRNTCBmdW5jdGlvbiB0
byBlbGltaW5hdGUgYSBsb2NhbCB2YXJpYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
Omluc2VydEFkamFjZW50SFRNTCk6IFVzZSBFeGNlcHRpb25Pci4KKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6Omluc2VydEFkamFjZW50VGV4dCk6IERpdHRvLgorICAgICAgICAqIGRvbS9FbGVt
ZW50Lmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorICAgICAgICAqIGRvbS9FbGVtZW50LmlkbDogVXNl
IG5vbi1sZWdhY3kgZXhjZXB0aW9ucy4KKworICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0pOiBVc2Ug
RXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnN1cHBvcnRlZFBy
b3BlcnR5TmFtZXMpOiBVcGRhdGVkIHRvIGNoZWNrCisgICAgICAgIHdoaWNoIHN0cmluZ3Mgc2hv
dWxkIGJlIHJlbW92ZWQgd2l0aG91dCBjb3B5aW5nIHRoZSBzdHJpbmdzLgorICAgICAgICAoV2Vi
Q29yZTo6TmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW1OUyk6IFVzZSBFeGNlcHRpb25Pci4K
KyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKTogRGl0dG8uIFJl
bW92ZWQgb3ZlcmxvYWQgZm9yCisgICAgICAgIGxlZ2FjeSBiaW5kaW5nczsgbW92ZSB0aGF0IHRv
IHRoZSBiaW5kaW5ncyB0aGVtc2VsdmVzLgorICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuaDog
VXBkYXRlZCBmb3IgYWJvdmUuCisgICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5pZGw6IFVzZSBu
b24tbGVnYWN5IGV4Y2VwdGlvbnMuCisKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQpOiBVcGRhdGVkIHNp
bmNlIG1lcmdlV2l0aE5leHRUZXh0Tm9kZQorICAgICAgICBub3cgdXNlcyBFeGNlcHRpb25Pci4K
KworICAgICAgICAqIGluc3BlY3Rvci9ET01FZGl0b3IuY3BwOiBVcGRhdGVkIHRvIHVzZSBFeGNl
cHRpb25Pci4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyk6IEFkZGVk
IGFuIG92ZXJsb2FkIGZvcgorICAgICAgICBFeGNlcHRpb24uCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dCk6IFVwZGF0ZWQgdG8gdXNlIEV4
Y2VwdGlvbk9yLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOiBVcGRh
dGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6c2V0U3R5bGVUZXh0KTogVXBkYXRlZCB0bworICAgICAgICB1c2UgdGhlIGNvcnJlY3QgdmVy
c2lvbiBvZiBzZXRBdHRyaWJ1dGU7IHRoZXJlIHdhcyBuZXZlciBhIHJpc2sgdGhhdCB0aGVyZQor
ICAgICAgICB3b3VsZCBiZSBhbiBleGNlcHRpb24sIGJ1dCBub3cgdGhhdCdzIGNsZWFyZXIuCisK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRl
cm5hbHM6OmVuc3VyZVNoYWRvd1Jvb3QpOiBEZWxldGVkLiBXYXMgdW51c2VkLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpjcmVhdGVTaGFkb3dSb290KTogRGl0dG8uCisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbHMuaWRsOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIHht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmhhbmRsZU5hbWVzcGFjZUF0dHJpYnV0ZXMpOiBVc2UgdXBkYXRlZCBwYXJzZUF0dHJpYnV0ZU5h
bWUsCisgICAgICAgIHdoaWNoIHVzZXMgRXhjZXB0aW9uT3IgYW5kIGEgcmV0dXJuIHZhbHVlIGlu
c3RlYWQgb2YgYW4gb3V0IGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVu
dEF0dHJpYnV0ZXMpOiBEaXR0by4KKwogMjAxNi0xMC0zMCAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5n
QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBnYXJkZW5pbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwppbmRleCA5YzFmZjUwOWI0MjU4YjIzNDE0MTAzZTgzNzA2MGVlMmQwYTI2ODc2Li5jZjZhZTYx
ZDk5NDU0YmMwYjk5MDE4MWViNDRiMmIzMzM0MjVkYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzEgQEAKKzIwMTYtMTAtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIE1vdmUgRWxlbWVudCwgTmFtZWROb2RlTWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZy
b20gRXhjZXB0aW9uQ29kZSB0byBFeGNlcHRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDIwNgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlz
IER1bWV6LgorCisgICAgICAgICogRE9NL0RPTUVsZW1lbnQubW06CisgICAgICAgICgtW0RPTUVs
ZW1lbnQgc2V0SW5uZXJIVE1MOl0pOiBVcGRhdGVkIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAg
ICAgKC1bRE9NRWxlbWVudCBzZXRPdXRlckhUTUw6XSk6IERpdHRvLgorICAgICAgICAoLVtET01F
bGVtZW50IHNldEF0dHJpYnV0ZTp2YWx1ZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1l
bnQgc2V0QXR0cmlidXRlTm9kZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgcmVt
b3ZlQXR0cmlidXRlTm9kZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0QXR0
cmlidXRlTlM6cXVhbGlmaWVkTmFtZTp2YWx1ZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVs
ZW1lbnQgc2V0QXR0cmlidXRlTm9kZU5TOl0pOiBEaXR0by4KKyAgICAgICAgKC1bRE9NRWxlbWVu
dCBtYXRjaGVzOl0pOiBEaXR0by4KKyAgICAgICAgKC1bRE9NRWxlbWVudCBjbG9zZXN0Ol0pOiBE
aXR0by4KKyAgICAgICAgKC1bRE9NRWxlbWVudCB3ZWJraXRNYXRjaGVzU2VsZWN0b3I6XSk6IERp
dHRvLgorICAgICAgICAqIERPTS9ET01IVE1MRWxlbWVudC5tbToKKyAgICAgICAgKC1bRE9NSFRN
TEVsZW1lbnQgaW5zZXJ0QWRqYWNlbnRFbGVtZW50OmVsZW1lbnQ6XSk6IERpdHRvLgorICAgICAg
ICAoLVtET01IVE1MRWxlbWVudCBpbnNlcnRBZGphY2VudEhUTUw6aHRtbDpdKTogRGl0dG8uCisg
ICAgICAgICgtW0RPTUhUTUxFbGVtZW50IGluc2VydEFkamFjZW50VGV4dDp0ZXh0Ol0pOiBEaXR0
by4KKyAgICAgICAgKiBET00vRE9NTmFtZWROb2RlTWFwLm1tOgorICAgICAgICAoLVtET01OYW1l
ZE5vZGVNYXAgc2V0TmFtZWRJdGVtOl0pOiBEaXR0by4KKyAgICAgICAgKC1bRE9NTmFtZWROb2Rl
TWFwIHJlbW92ZU5hbWVkSXRlbTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTU5hbWVkTm9kZU1h
cCBzZXROYW1lZEl0ZW1OUzpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTU5hbWVkTm9kZU1hcCBy
ZW1vdmVOYW1lZEl0ZW1OUzpsb2NhbE5hbWU6XSk6IERpdHRvLgorCiAyMDE2LTEwLTI5ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IG1vcmUgb2YgRE9N
IGZyb20gRXhjZXB0aW9uQ29kZSB0byBFeGNlcHRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCAzOTQy
OTcxYzdiZjRjMzFiM2Y2MTU0NWMzNmZmNTVhMWM2MzU0MDg1Li41YTQyYjNhNTIxZDIxOWExOGY0
MDI2MWNlMTk1MGEzM2JkYjljOWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTYtMTAtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1v
dmUgRWxlbWVudCwgTmFtZWROb2RlTWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0aW9u
Q29kZSB0byBFeGNlcHRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NDIwNgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisg
ICAgICAgICogRE9NQ29yZUNsYXNzZXMuY3BwOgorICAgICAgICAoRE9NRWxlbWVudDo6c2V0QXR0
cmlidXRlKTogVXBkYXRlZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAgICogRE9NSFRNTENs
YXNzZXMuY3BwOgorICAgICAgICAoRE9NSFRNTEVsZW1lbnQ6OnNldElubmVySFRNTCk6IERpdHRv
LgorCiAyMDE2LTEwLTI4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBNb3ZlIGFsbCBjbGFzc2VzIGluIHRoZSBIVE1MIGRpcmVjdG9yeSBmcm9tIEV4Y2VwdGlvbkNv
ZGUgdG8gRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNGYzOTI1MTg3NDYxZDNiMjU3NWExNjYwMmI5
ZWJiNWIxODNkMTI0Ni4uMTY3NmVhOTQxNTIxOWE1NjUwOGIwMTQ3MGU4YmU5NTYwZGZkZGExZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE2LTEwLTMwICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIEVsZW1lbnQsIE5hbWVkTm9kZU1hcCwgYW5k
IERPTVN0cmluZ01hcCBmcm9tIEV4Y2VwdGlvbkNvZGUgdG8gRXhjZXB0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyMDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmNwcDoKKyAgICAgICAgKHdl
YmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfc2V0X25hbWVkX2l0ZW0pOiBVcGRhdGVkIGV4Y2VwdGlv
biBoYW5kbGluZy4KKyAgICAgICAgKHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcmVtb3ZlX25h
bWVkX2l0ZW0pOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfc2V0
X25hbWVkX2l0ZW1fbnMpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9kb21fbmFtZWRfbm9kZV9t
YXBfcmVtb3ZlX25hbWVkX2l0ZW1fbnMpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnQuY3BwOgorICAgICAgICAo
d2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGUpOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dF9kb21fZWxlbWVudF9yZW1vdmVfYXR0cmlidXRlX25vZGUpOiBEaXR0by4KKyAgICAgICAgKHdl
YmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25zKTogRGl0dG8uCisgICAgICAgICh3ZWJr
aXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ub2RlX25zKTogRGl0dG8uCisgICAgICAgICh3
ZWJraXRfZG9tX2VsZW1lbnRfbWF0Y2hlcyk6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9l
bGVtZW50X2Nsb3Nlc3QpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9kb21fZWxlbWVudF93ZWJr
aXRfbWF0Y2hlc19zZWxlY3Rvcik6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9lbGVtZW50
X2luc2VydF9hZGphY2VudF9lbGVtZW50KTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfZG9tX2Vs
ZW1lbnRfaW5zZXJ0X2FkamFjZW50X2h0bWwpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9kb21f
ZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfdGV4dCk6IERpdHRvLgorICAgICAgICAod2Via2l0X2Rv
bV9lbGVtZW50X3NldF9pbm5lcl9odG1sKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfZG9tX2Vs
ZW1lbnRfc2V0X291dGVyX2h0bWwpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9tYWMvV0tET01FbGVtZW50Lm1tOgorICAgICAgICAoLVtXS0RPTUVsZW1l
bnQgc2V0QXR0cmlidXRlOnZhbHVlOl0pOiBEaXR0by4KKwogMjAxNi0xMC0zMCAgWXVzdWtlIFN1
enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbRE9NXSBJbnRyb2R1Y2Ug
V2ViQ29yZTo6anNEeW5hbWljRG93bmNhc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCmluZGV4IDM2MTQ4
ZjI0OTkxMDJkZWI3ODU1OTMzYzkxODdjN2E1MjI3ZmM2NDcuLmMxNGMxOTc5ODIyMzRjMzE1ZGQz
Y2FjODdmZjZiNDE0Y2VjYjJhMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcApAQCAtMzQyLDcgKzM0
Miw3IEBAIGJvb2wgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUq
IHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOCiAgICAgYXV0byBzZXRQcm9wZXJ0eUludGVy
bmFsUmVzdWx0ID0gd3JhcHBlZCgpLnNldFByb3BlcnR5SW50ZXJuYWwocHJvcGVydHlJbmZvLnBy
b3BlcnR5SUQsIHByb3BlcnR5VmFsdWUsIGltcG9ydGFudCk7CiAgICAgaWYgKHNldFByb3BlcnR5
SW50ZXJuYWxSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgcHJvcGFnYXRlRXhjZXB0
aW9uKCpzdGF0ZSwgc2V0UHJvcGVydHlJbnRlcm5hbFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkp
OwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICBwdXRSZXN1bHQgPSBzZXRQcm9wZXJ0eUludGVybmFsUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCmluZGV4IDJlYTkyN2E1YmE1NjcwMjliNTZkNTZj
OWMwOTI1YWRmYjMwZWRkZTguLjc4M2ZkZDNkODk2OWFlNzg0YTM1NTBjMWEwOTUxMmY1MmZjZTkz
MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFw
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01h
cEN1c3RvbS5jcHAKQEAgLTM3LDUxICszNyw0NSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSlNET01TdHJpbmdNYXA6OmdldE93blByb3BlcnR5
U2xvdERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU0RPTVN0cmluZ01hcDo6Z2V0T3duUHJvcGVydHlT
bG90RGVsZWdhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgbmFtZUlzVmFsaWQ7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBpdGVtID0gd3JhcHBlZCgpLml0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmco
cHJvcGVydHlOYW1lKSwgbmFtZUlzVmFsaWQpOwogICAgIGlmIChuYW1lSXNWYWxpZCkgewotICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXMsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqZXhlYywgaXRl
bSkpOworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigq
c3RhdGUsIGl0ZW0pKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBKU0RPTVN0cmluZ01hcDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNET01TdHJpbmdNYXA6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAg
IEpTRE9NU3RyaW5nTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NU3RyaW5nTWFwKj4ob2Jq
ZWN0KTsKLSAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKLSAgICB0aGlzT2JqZWN0LT53cmFwcGVk
KCkuZ2V0TmFtZXMobmFtZXMpOwotICAgIHNpemVfdCBsZW5ndGggPSBuYW1lcy5zaXplKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBuYW1lc1tpXSkpOwotCi0gICAg
QmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBqc0Nhc3Q8SlNET01TdHJpbmdNYXAqPihv
YmplY3QpLT53cmFwcGVkKCkubmFtZXMoKSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgbmFtZSkpOworICAgIEJhc2U6OmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJvb2wg
SlNET01TdHJpbmdNYXA6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQogewogI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCiAgICAgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s7CiAjZW5kaWYK
IAotICAgIEpTRE9NU3RyaW5nTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NU3RyaW5nTWFw
Kj4oY2VsbCk7CiAgICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQotICAgICAgICByZXR1
cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsK
LSAgICByZXR1cm4gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRlbGV0ZUl0ZW0ocHJvcGVydHlOYW1l
VG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CisgICAgICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9w
ZXJ0eShjZWxsLCBzdGF0ZSwgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4ganNDYXN0PEpTRE9N
U3RyaW5nTWFwKj4oY2VsbCktPndyYXBwZWQoKS5kZWxldGVJdGVtKHByb3BlcnR5TmFtZVRvU3Ry
aW5nKHByb3BlcnR5TmFtZSkpOwogfQogCi1ib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4
KQorYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgcmV0dXJuIGRlbGV0
ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpKTsKKyAg
ICByZXR1cm4gZGVsZXRlUHJvcGVydHkoY2VsbCwgc3RhdGUsIElkZW50aWZpZXI6OmZyb20oc3Rh
dGUsIGluZGV4KSk7CiB9CiAKLWJvb2wgSlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiwgYm9vbCYgcHV0UmVzdWx0KQorYm9vbCBKU0RPTVN0cmluZ01hcDo6cHV0
RGVsZWdhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiwgYm9vbCYgcHV0UmVzdWx0KQogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZS5p
c1N5bWJvbCgpKQpAQCAtOTEsMTQgKzg1LDE3IEBAIGJvb2wgSlNET01TdHJpbmdNYXA6OnB1dERl
bGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWCiAg
ICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s7
CiAjZW5kaWYKIAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Cisg
ICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHRydWUpOwogCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgd3JhcHBlZCgpLnNldEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlO
YW1lKSwgc3RyaW5nVmFsdWUsIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgIHB1dFJlc3VsdCA9ICFlYzsKLSAgICByZXR1cm4gIWVjOworICAgIGF1dG8gcmVzdWx0ID0g
d3JhcHBlZCgpLnNldEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RG
TW92ZShzdHJpbmdWYWx1ZSkpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAg
ICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgc2NvcGUsIHJlc3VsdC5yZWxlYXNlRXhj
ZXB0aW9uKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwdXRSZXN1bHQg
PSB0cnVlOworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAppbmRleCA4
MmUzYzI4MDRmYzFhZDg1ZjFlNmQwZGM0YTVkOGM4MDZjMjg4ZWNkLi5iZGZiMDZiMzNiMTc5ZWEw
OWZiMDg5ZGVhNzg1NTNhZTc0NjAzNDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBib29sIEpTU3RvcmFn
ZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZQogICAgIC8vIE9ubHkgcGVyZm9ybSB0aGUgY3VzdG9tIHB1dCBpZiB0aGUgb2Jq
ZWN0IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBwcm9wZXJ0eSBieSB0aGlzIG5hbWUuCiAgICAgLy8g
U2luY2UgaGFzUHJvcGVydHkoKSB3b3VsZCBlbmQgdXAgY2FsbGluZyBjYW5HZXRJdGVtc0Zvck5h
bWUoKSBhbmQgYmUgZm9vbGVkLCB3ZSBuZWVkIHRvIGNoZWNrCiAgICAgLy8gdGhlIG5hdGl2ZSBw
cm9wZXJ0eSBzbG90cyBtYW51YWxseS4KLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOworICAgIFByb3Bl
cnR5U2xvdCBzbG90IHsgdGhpcywgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6Okdl
dE93blByb3BlcnR5IH07CiAKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXMtPmdldFByb3Rv
dHlwZURpcmVjdCgpOwogICAgIGlmIChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChw
cm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCkBA
IC0xMjAsMTkgKzEyMCwxNiBAQCBib29sIEpTU3RvcmFnZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRl
KiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZQogICAgIGlmIChwcm9w
ZXJ0eU5hbWUuaXNTeW1ib2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5n
IHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICAvLyBUaGUgcmV0dXJu
IHZhbHVlIGluZGljYXRlcyB3aGV0aGVyIHB1dERlbGVnYXRlKCkgc2hvdWxkIGhhbmRsZSB0aGUg
cHV0IG9wZXJhdGlvbiAod2hpY2gKLSAgICAgICAgLy8gaWYgdHJ1ZSwgdGVsbHMgdGhlIGNhbGxl
ciBub3QgdG8gZXhlY3V0ZSB0aGUgZ2VuZXJpYyBwdXQpLiBJdCBkb2VzIG5vdCBpbmRpY2F0ZSB3
aGV0aGVyCi0gICAgICAgIC8vIHB1dERlbGVnYXRlKCkgZGlkIHN1Y2Nlc3NmdWxseSBjb21wbGV0
ZSB0aGUgb3BlcmF0aW9uIG9yIG5vdCAod2hpY2ggaXQgZGlkbid0IGluIHRoaXMKLSAgICAgICAg
Ly8gY2FzZSBkdWUgdG8gdGhlIGV4Y2VwdGlvbikuCi0gICAgICAgIHB1dFJlc3VsdCA9IGZhbHNl
OworICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB0cnVlKTsKKworICAgIGF1dG8gc2V0SXRlbVJl
c3VsdCA9IHdyYXBwZWQoKS5zZXRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFt
ZSksIHN0cmluZ1ZhbHVlKTsKKyAgICBpZiAoc2V0SXRlbVJlc3VsdC5oYXNFeGNlcHRpb24oKSkg
eworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCBzY29wZSwgc2V0SXRlbVJlc3Vs
dC5yZWxlYXNlRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICBhdXRvIHNldEl0ZW1SZXN1bHQgPSB3cmFwcGVkKCkuc2V0SXRlbShwcm9wZXJ0eU5hbWVUb1N0
cmluZyhwcm9wZXJ0eU5hbWUpLCBzdHJpbmdWYWx1ZSk7Ci0gICAgcHV0UmVzdWx0ID0gIXNldEl0
ZW1SZXN1bHQuaGFzRXhjZXB0aW9uKCk7Ci0gICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwg
c2NvcGUsIFdURk1vdmUoc2V0SXRlbVJlc3VsdCkpOworICAgIHB1dFJlc3VsdCA9IHRydWU7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRh
c2V0RE9NU3RyaW5nTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5n
TWFwLmNwcAppbmRleCBkZjMxZDkwMDY1MjkyODY2MGY3ZmZiN2RiNTFkNDNkOGYyNTM0MjBkLi41
M2Y1MjBlZmE1Mzk0Y2M2ZDgwM2MzOWI4NWFmNGU3YzNjMzFmOGI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTUyLDE4ICsxNTEsMjEg
QEAgdm9pZCBEYXRhc2V0RE9NU3RyaW5nTWFwOjpkZXJlZigpCiAgICAgbV9lbGVtZW50LmRlcmVm
KCk7CiB9CiAKLXZvaWQgRGF0YXNldERPTVN0cmluZ01hcDo6Z2V0TmFtZXMoVmVjdG9yPFN0cmlu
Zz4mIG5hbWVzKQorVmVjdG9yPFN0cmluZz4gRGF0YXNldERPTVN0cmluZ01hcDo6bmFtZXMoKSBj
b25zdAogewotICAgIGlmICghbV9lbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKLSAgICAgICAgcmV0
dXJuOworICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwogCi0gICAgZm9yIChjb25zdCBBdHRyaWJ1
dGUmIGF0dHJpYnV0ZSA6IG1fZWxlbWVudC5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewotICAgICAg
ICBpZiAoaXNWYWxpZEF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlLmxvY2FsTmFtZSgpKSkKLSAgICAg
ICAgICAgIG5hbWVzLmFwcGVuZChjb252ZXJ0QXR0cmlidXRlTmFtZVRvUHJvcGVydHlOYW1lKGF0
dHJpYnV0ZS5sb2NhbE5hbWUoKSkpOworICAgIGlmIChtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygp
KSB7CisgICAgICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogbV9lbGVtZW50LmF0dHJpYnV0ZXNJ
dGVyYXRvcigpKSB7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEF0dHJpYnV0ZU5hbWUoYXR0cmli
dXRlLmxvY2FsTmFtZSgpKSkKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoY29udmVydEF0
dHJpYnV0ZU5hbWVUb1Byb3BlcnR5TmFtZShhdHRyaWJ1dGUubG9jYWxOYW1lKCkpKTsKKyAgICAg
ICAgfQogICAgIH0KKworICAgIHJldHVybiBuYW1lczsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5n
JiBEYXRhc2V0RE9NU3RyaW5nTWFwOjppdGVtKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBi
b29sJiBpc1ZhbGlkKQorY29uc3QgQXRvbWljU3RyaW5nJiBEYXRhc2V0RE9NU3RyaW5nTWFwOjpp
dGVtKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBib29sJiBpc1ZhbGlkKSBjb25zdAogewog
ICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICBpZiAobV9lbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkg
ewpAQCAtMTkxLDE0ICsxOTMsMTEgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBEYXRhc2V0RE9NU3Ry
aW5nTWFwOjppdGVtKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBib29sJgogICAgIHJldHVy
biBudWxsQXRvbTsKIH0KIAotdm9pZCBEYXRhc2V0RE9NU3RyaW5nTWFwOjpzZXRJdGVtKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitF
eGNlcHRpb25Pcjx2b2lkPiBEYXRhc2V0RE9NU3RyaW5nTWFwOjpzZXRJdGVtKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoIWlzVmFsaWRQcm9wZXJ0
eU5hbWUobmFtZSkpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9lbGVtZW50LnNldEF0dHJpYnV0ZShjb252ZXJ0UHJvcGVydHlOYW1l
VG9BdHRyaWJ1dGVOYW1lKG5hbWUpLCB2YWx1ZSwgZWMpOworICAgIGlmICghaXNWYWxpZFByb3Bl
cnR5TmFtZShuYW1lKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsK
KyAgICByZXR1cm4gbV9lbGVtZW50LnNldEF0dHJpYnV0ZShjb252ZXJ0UHJvcGVydHlOYW1lVG9B
dHRyaWJ1dGVOYW1lKG5hbWUpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgRGF0YXNldERPTVN0cmluZ01h
cDo6ZGVsZXRlSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFz
ZXRET01TdHJpbmdNYXAuaAppbmRleCBmMTlhMDUwMmVjMWM3ZWNkOWExM2M1NDc4OGVlZjNlYzMz
NzVhZjIxLi4xYTliYzQ1MjMxNTJhY2QyZmU2NjYyMmUyOTViYTRiYjlhNmFjNTEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmgKQEAgLTIzLDIxICsyMywxNyBAQAog
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRGF0YXNl
dERPTVN0cmluZ01hcF9oCi0jZGVmaW5lIERhdGFzZXRET01TdHJpbmdNYXBfaAorI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJs
ZS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEVsZW1lbnQ7Ci10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBEYXRhc2V0
RE9NU3RyaW5nTWFwIGZpbmFsIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRGF0YXNldERPTVN0cmluZ01hcCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGV4cGxpY2l0
IERhdGFzZXRET01TdHJpbmdNYXAoRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgOiBtX2VsZW1l
bnQoZWxlbWVudCkKQEAgLTQ3LDkgKzQzLDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVmKCk7CiAg
ICAgdm9pZCBkZXJlZigpOwogCi0gICAgdm9pZCBnZXROYW1lcyhWZWN0b3I8U3RyaW5nPiYpOwot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wmIGlz
VmFsaWQpOwotICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcygpIGNv
bnN0OworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wmIGlzVmFsaWQpIGNvbnN0OworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEl0ZW0oY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICBib29sIGRlbGV0ZUl0ZW0o
Y29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIEVsZW1lbnQmIGVsZW1lbnQoKSB7IHJldHVybiBt
X2VsZW1lbnQ7IH0KQEAgLTU5LDUgKzU1LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERhdGFzZXRET01TdHJpbmdNYXBfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKaW5kZXggYjM5ZDZmM2FhM2E0YTE3NjVlNGIxZDcyMDViYjFmMTNiOTc4OWNm
OS4uNjkxYjZhNDJiZGE0Njk3ZWM3ZDgyZjdmNWE2NzNkYTY2MDBkZjcyZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCkBAIC0xMDEzLDEwICsxMDEzLDE1IEBAIFJlZlB0cjxOb2RlPiBEb2N1bWVu
dDo6YWRvcHROb2RlKE5vZGUmIHNvdXJjZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgY2FzZSBE
T0NVTUVOVF9OT0RFOgogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBjYXNlIEFUVFJJQlVURV9OT0RFOiB7ICAgICAgICAgICAgICAg
ICAgIAorICAgIGNhc2UgQVRUUklCVVRFX05PREU6IHsKICAgICAgICAgYXV0byYgYXR0ciA9IGRv
d25jYXN0PEF0dHI+KHNvdXJjZSk7Ci0gICAgICAgIGlmIChhdHRyLm93bmVyRWxlbWVudCgpKQot
ICAgICAgICAgICAgYXR0ci5vd25lckVsZW1lbnQoKS0+cmVtb3ZlQXR0cmlidXRlTm9kZShhdHRy
LCBlYyk7CisgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gYXR0ci5vd25lckVsZW1lbnQoKSkg
eworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBlbGVtZW50LT5yZW1vdmVBdHRyaWJ1dGVOb2Rl
KGF0dHIpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAg
ICAgICAgICAgIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBmYWxsIHRocm91Z2ggaGVyZSBpbnN0ZWFkIG9m
IGp1c3QgcmV0dXJuaW5nIGVhcmx5PworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0gICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTEwMzIsMTAgKzEwMzcsMTAg
QEAgUmVmUHRyPE5vZGU+IERvY3VtZW50OjphZG9wdE5vZGUoTm9kZSYgc291cmNlLCBFeGNlcHRp
b25Db2RlJiBlYykKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgICAgICBpZiAoc291cmNlLnBhcmVudE5vZGUoKSkgewotICAgICAg
ICAgICAgc291cmNlLnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQoc291cmNlLCBlYyk7Ci0gICAg
ICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IGF1dG8gcmVzdWx0ID0gc291cmNlLnJlbW92ZSgpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCku
Y29kZSgpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBiMWIxZWVmMWU0NGE4ODVjY2VhNzZhN2QxN2I4NjM3
MGYxYjhlYmNjLi4zYzdjOGQxNWI0ZDEzZDUxOGNiMzhkZmI5Y2ViNDE1MmNlNjZlNzZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMjE3LDE5ICsxMjE3LDE4IEBAIGNvbnN0IEF0b21pY1N0
cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvCiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpOwogfQogCi12b2lkIEVsZW1lbnQ6OnNldEF0dHJp
YnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lkPiBFbGVtZW50OjpzZXRB
dHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCiB7Ci0gICAgaWYgKCFEb2N1bWVudDo6aXNWYWxpZE5hbWUobG9jYWxOYW1lKSkg
ewotICAgICAgICBlYyA9IElOVkFMSURfQ0hBUkFDVEVSX0VSUjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAoIURvY3VtZW50Ojppc1ZhbGlkTmFtZShsb2NhbE5hbWUpKQorICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9DSEFSQUNURVJfRVJSIH07CiAKICAgICBzeW5j
aHJvbml6ZUF0dHJpYnV0ZShsb2NhbE5hbWUpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2Fz
ZUFkanVzdGVkTG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSgqdGhpcykgPyBs
b2NhbE5hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IGxvY2FsTmFtZTsKLQorICAgIGF1
dG8gY2FzZUFkanVzdGVkTG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSgqdGhp
cykgPyBsb2NhbE5hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IGxvY2FsTmFtZTsKICAg
ICB1bnNpZ25lZCBpbmRleCA9IGVsZW1lbnREYXRhKCkgPyBlbGVtZW50RGF0YSgpLT5maW5kQXR0
cmlidXRlSW5kZXhCeU5hbWUoY2FzZUFkanVzdGVkTG9jYWxOYW1lLCBmYWxzZSkgOiBFbGVtZW50
RGF0YTo6YXR0cmlidXRlTm90Rm91bmQ7Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUg
PSBpbmRleCAhPSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQgPyBhdHRyaWJ1dGVBdChp
bmRleCkubmFtZSgpIDogUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgY2FzZUFkanVzdGVkTG9jYWxO
YW1lLCBudWxsQXRvbSk7Ci0gICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoaW5kZXgsIHFOYW1lLCB2
YWx1ZSwgTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOworICAgIGF1dG8gbmFt
ZSA9IGluZGV4ICE9IEVsZW1lbnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCA/IGF0dHJpYnV0ZUF0
KGluZGV4KS5uYW1lKCkgOiBRdWFsaWZpZWROYW1lIHsgbnVsbEF0b20sIGNhc2VBZGp1c3RlZExv
Y2FsTmFtZSwgbnVsbEF0b20gfTsKKyAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChpbmRleCwgbmFt
ZSwgdmFsdWUsIE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC0xNzU2LDEyICsxNzU1
LDExIEBAIFNoYWRvd1Jvb3QqIEVsZW1lbnQ6OnNoYWRvd1Jvb3QoKSBjb25zdAogICAgIHJldHVy
biBoYXNSYXJlRGF0YSgpID8gZWxlbWVudFJhcmVEYXRhKCktPnNoYWRvd1Jvb3QoKSA6IG51bGxw
dHI7CiB9CiAKLQogdm9pZCBFbGVtZW50OjphZGRTaGFkb3dSb290KFJlZjxTaGFkb3dSb290PiYm
IG5ld1NoYWRvd1Jvb3QpCiB7CiAgICAgQVNTRVJUKCFzaGFkb3dSb290KCkpOwogCi0gICAgU2hh
ZG93Um9vdCYgc2hhZG93Um9vdCA9IG5ld1NoYWRvd1Jvb3QuZ2V0KCk7CisgICAgU2hhZG93Um9v
dCYgc2hhZG93Um9vdCA9IG5ld1NoYWRvd1Jvb3Q7CiAgICAgZW5zdXJlRWxlbWVudFJhcmVEYXRh
KCkuc2V0U2hhZG93Um9vdChXVEZNb3ZlKG5ld1NoYWRvd1Jvb3QpKTsKIAogICAgIHNoYWRvd1Jv
b3Quc2V0SG9zdCh0aGlzKTsKQEAgLTE3ODUsNiArMTc4Myw3IEBAIHZvaWQgRWxlbWVudDo6cmVt
b3ZlU2hhZG93Um9vdCgpCiAgICAgUmVmUHRyPFNoYWRvd1Jvb3Q+IG9sZFJvb3QgPSBzaGFkb3dS
b290KCk7CiAgICAgaWYgKCFvbGRSb290KQogICAgICAgICByZXR1cm47CisKICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxQb3BTaGFkb3dSb290KCp0aGlzLCAqb2xkUm9vdCk7CiAg
ICAgZG9jdW1lbnQoKS5yZW1vdmVGb2N1c2VkTm9kZU9mU3VidHJlZShvbGRSb290LmdldCgpKTsK
IApAQCAtMTc5OCwxNiArMTc5Nyw2IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlU2hhZG93Um9vdCgp
CiAgICAgbm90aWZ5Q2hpbGROb2RlUmVtb3ZlZCgqdGhpcywgKm9sZFJvb3QpOwogfQogCi1TaGFk
b3dSb290KiBFbGVtZW50OjpjcmVhdGVTaGFkb3dSb290KEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIGlmIChhbHdheXNDcmVhdGVVc2VyQWdlbnRTaGFkb3dSb290KCkpCi0gICAgICAgIHJldHVy
biAmZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotCi0gICAgZWMgPSBISUVSQVJDSFlfUkVR
VUVTVF9FUlI7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLQogc3RhdGljIGJvb2wgY2FuQXR0
YWNoQXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21pY1N0cmluZz4+IHRhZ05hbWVzID0gW10gewpA
QCAtMTg0MywyMyArMTgzMiwxNCBAQCBzdGF0aWMgYm9vbCBjYW5BdHRhY2hBdXRob3JTaGFkb3dS
b290KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJuIHRhZ05hbWVzLmdldCgpLmNv
bnRhaW5zKGxvY2FsTmFtZSkgfHwgRG9jdW1lbnQ6OnZhbGlkYXRlQ3VzdG9tRWxlbWVudE5hbWUo
bG9jYWxOYW1lKSA9PSBDdXN0b21FbGVtZW50TmFtZVZhbGlkYXRpb25TdGF0dXM6OlZhbGlkOwog
fQogCi1SZWZQdHI8U2hhZG93Um9vdD4gRWxlbWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRv
d1Jvb3RJbml0JiBpbml0LCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPFJlZjxTaGFk
b3dSb290Pj4gRWxlbWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0JiBpbml0
KQogewotICAgIGlmICghY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdCgqdGhpcykpIHsKLSAgICAg
ICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgaWYgKHNoYWRvd1Jvb3QoKSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVf
RVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoaW5pdC5tb2Rl
ID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQorICAgIGlmICghY2FuQXR0YWNoQXV0
aG9yU2hhZG93Um9vdCgqdGhpcykpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQ
UE9SVEVEX0VSUiB9OworICAgIGlmIChzaGFkb3dSb290KCkpCisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgIGlmIChpbml0Lm1vZGUgPT0gU2hhZG93
Um9vdE1vZGU6OlVzZXJBZ2VudCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJv
ciB9OwogICAgIGF1dG8gc2hhZG93ID0gU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIGlu
aXQubW9kZSk7CiAgICAgYWRkU2hhZG93Um9vdChzaGFkb3cuY29weVJlZigpKTsKICAgICByZXR1
cm4gV1RGTW92ZShzaGFkb3cpOwpAQCAtMTg2NywzOCArMTg0NywzMiBAQCBSZWZQdHI8U2hhZG93
Um9vdD4gRWxlbWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0JiBpbml0LCBF
eGNlcHRpb25DbwogCiBTaGFkb3dSb290KiBFbGVtZW50OjpzaGFkb3dSb290Rm9yQmluZGluZ3Mo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSBz
aGFkb3dSb290KCk7Ci0gICAgaWYgKCFyb290KQorICAgIGF1dG8qIHNoYWRvdyA9IHNoYWRvd1Jv
b3QoKTsKKyAgICBpZiAoIXNoYWRvdykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBp
ZiAocm9vdC0+bW9kZSgpICE9IFNoYWRvd1Jvb3RNb2RlOjpPcGVuKSB7Ci0gICAgICAgIGlmICgh
SlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLT53b3JsZCgpLnNoYWRvd1Jvb3RJc0Fsd2F5c09wZW4oKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gcm9vdDsKKyAgICBpZiAoc2hhZG93LT5tb2Rl
KCkgPT0gU2hhZG93Um9vdE1vZGU6Ok9wZW4pCisgICAgICAgIHJldHVybiBzaGFkb3c7CisgICAg
aWYgKEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9i
amVjdCgpKS0+d29ybGQoKS5zaGFkb3dSb290SXNBbHdheXNPcGVuKCkpCisgICAgICAgIHJldHVy
biBzaGFkb3c7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLQogU2hhZG93Um9vdCogRWxlbWVu
dDo6dXNlckFnZW50U2hhZG93Um9vdCgpIGNvbnN0CiB7Ci0gICAgaWYgKFNoYWRvd1Jvb3QqIHNo
YWRvd1Jvb3QgPSB0aGlzLT5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgQVNTRVJUKHNoYWRvd1Jv
b3QtPm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KTsKLSAgICAgICAgcmV0dXJu
IHNoYWRvd1Jvb3Q7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOworICAgIEFTU0VSVCghc2hh
ZG93Um9vdCgpIHx8IHNoYWRvd1Jvb3QoKS0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2Vy
QWdlbnQpOworICAgIHJldHVybiBzaGFkb3dSb290KCk7CiB9CiAKIFNoYWRvd1Jvb3QmIEVsZW1l
bnQ6OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKQogewotICAgIFNoYWRvd1Jvb3QqIHNoYWRv
d1Jvb3QgPSB1c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgaWYgKCFzaGFkb3dSb290KSB7Ci0g
ICAgICAgIGFkZFNoYWRvd1Jvb3QoU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIFNoYWRv
d1Jvb3RNb2RlOjpVc2VyQWdlbnQpKTsKLSAgICAgICAgc2hhZG93Um9vdCA9IHVzZXJBZ2VudFNo
YWRvd1Jvb3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuICpzaGFkb3dSb290OworICAgIGlmIChhdXRv
KiBzaGFkb3cgPSB1c2VyQWdlbnRTaGFkb3dSb290KCkpCisgICAgICAgIHJldHVybiAqc2hhZG93
OworICAgIGF1dG8gbmV3U2hhZG93ID0gU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIFNo
YWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpOworICAgIFNoYWRvd1Jvb3QmIHNoYWRvdyA9IG5ld1No
YWRvdzsKKyAgICBhZGRTaGFkb3dSb290KFdURk1vdmUobmV3U2hhZG93KSk7CisgICAgcmV0dXJu
IHNoYWRvdzsKIH0KIAotICAgIAogI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCiAKIHZvaWQg
RWxlbWVudDo6c2V0SXNEZWZpbmVkQ3VzdG9tRWxlbWVudChKU0N1c3RvbUVsZW1lbnRJbnRlcmZh
Y2UmIGVsZW1lbnRJbnRlcmZhY2UpCkBAIC0xOTUzLDcgKzE5MjcsNiBAQCBDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZSogRWxlbWVudDo6cmVhY3Rpb25RdWV1ZSgpIGNvbnN0CiAKICNlbmRpZgog
Ci0KIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAog
ewogICAgIHJldHVybiBwc2V1ZG8oKTsKQEAgLTIxNTksMjQgKzIxMzIsMjQgQEAgY29uc3QgVmVj
dG9yPFJlZlB0cjxBdHRyPj4mIEVsZW1lbnQ6OmF0dHJOb2RlTGlzdCgpCiAgICAgcmV0dXJuICph
dHRyTm9kZUxpc3RGb3JFbGVtZW50KCp0aGlzKTsKIH0KIAotUmVmUHRyPEF0dHI+IEVsZW1lbnQ6
OnNldEF0dHJpYnV0ZU5vZGUoQXR0ciYgYXR0ck5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhj
ZXB0aW9uT3I8UmVmUHRyPEF0dHI+PiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKEF0dHImIGF0
dHJOb2RlKQogewogICAgIFJlZlB0cjxBdHRyPiBvbGRBdHRyTm9kZSA9IGF0dHJJZkV4aXN0cyhh
dHRyTm9kZS5xdWFsaWZpZWROYW1lKCkubG9jYWxOYW1lKCksIHNob3VsZElnbm9yZUF0dHJpYnV0
ZUNhc2UoKnRoaXMpKTsKICAgICBpZiAob2xkQXR0ck5vZGUuZ2V0KCkgPT0gJmF0dHJOb2RlKQot
ICAgICAgICByZXR1cm4gJmF0dHJOb2RlOyAvLyBUaGlzIEF0dHIgaXMgYWxyZWFkeSBhdHRhY2hl
ZCB0byB0aGUgZWxlbWVudC4KKyAgICAgICAgcmV0dXJuIFdURk1vdmUob2xkQXR0ck5vZGUpOwog
CiAgICAgLy8gSU5VU0VfQVRUUklCVVRFX0VSUjogUmFpc2VkIGlmIG5vZGUgaXMgYW4gQXR0ciB0
aGF0IGlzIGFscmVhZHkgYW4gYXR0cmlidXRlIG9mIGFub3RoZXIgRWxlbWVudCBvYmplY3QuCiAg
ICAgLy8gVGhlIERPTSB1c2VyIG11c3QgZXhwbGljaXRseSBjbG9uZSBBdHRyIG5vZGVzIHRvIHJl
LXVzZSB0aGVtIGluIG90aGVyIGVsZW1lbnRzLgotICAgIGlmIChhdHRyTm9kZS5vd25lckVsZW1l
bnQoKSAmJiBhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVjID0g
SU5VU0VfQVRUUklCVVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAg
IGlmIChhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAmJiBhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAh
PSB0aGlzKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5VU0VfQVRUUklCVVRFX0VSUiB9
OwogCiAgICAgc3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7Ci0gICAgVW5pcXVlRWxlbWVudERh
dGEmIGVsZW1lbnREYXRhID0gZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKTsKKyAgICBhdXRvJiBl
bGVtZW50RGF0YSA9IGVuc3VyZVVuaXF1ZUVsZW1lbnREYXRhKCk7CiAKLSAgICB1bnNpZ25lZCBl
eGlzdGluZ0F0dHJpYnV0ZUluZGV4ID0gZWxlbWVudERhdGEuZmluZEF0dHJpYnV0ZUluZGV4QnlO
YW1lKGF0dHJOb2RlLnF1YWxpZmllZE5hbWUoKS5sb2NhbE5hbWUoKSwgc2hvdWxkSWdub3JlQXR0
cmlidXRlQ2FzZSgqdGhpcykpOwotICAgIGlmIChleGlzdGluZ0F0dHJpYnV0ZUluZGV4ICE9IEVs
ZW1lbnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCkgeworICAgIGF1dG8gZXhpc3RpbmdBdHRyaWJ1
dGVJbmRleCA9IGVsZW1lbnREYXRhLmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5x
dWFsaWZpZWROYW1lKCkubG9jYWxOYW1lKCksIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UoKnRo
aXMpKTsKKyAgICBpZiAoZXhpc3RpbmdBdHRyaWJ1dGVJbmRleCA9PSBFbGVtZW50RGF0YTo6YXR0
cmlidXRlTm90Rm91bmQpCisgICAgICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGVsZW1lbnREYXRh
LmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCkpLCBhdHRy
Tm9kZS5xdWFsaWZpZWROYW1lKCksIGF0dHJOb2RlLnZhbHVlKCksIE5vdEluU3luY2hyb25pemF0
aW9uT2ZMYXp5QXR0cmlidXRlKTsKKyAgICBlbHNlIHsKICAgICAgICAgY29uc3QgQXR0cmlidXRl
JiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVBdChleGlzdGluZ0F0dHJpYnV0ZUluZGV4KTsKICAgICAg
ICAgaWYgKG9sZEF0dHJOb2RlKQogICAgICAgICAgICAgZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVu
dFdpdGhWYWx1ZShvbGRBdHRyTm9kZS5nZXQoKSwgYXR0cmlidXRlLnZhbHVlKCkpOwpAQCAtMjE4
NywzOCArMjE2MCwzMiBAQCBSZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZShB
dHRyJiBhdHRyTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgICAgICBzZXRBdHRyaWJ1
dGVJbnRlcm5hbChleGlzdGluZ0F0dHJpYnV0ZUluZGV4LCBhdHRyTm9kZS5xdWFsaWZpZWROYW1l
KCksIGF0dHJOb2RlLnZhbHVlKCksIE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRl
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChl
eGlzdGluZ0F0dHJpYnV0ZUluZGV4LCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0
ZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBleGlzdGluZ0F0dHJpYnV0ZUluZGV4Rm9yRnVsbFF1
YWxpZmllZE5hbWUgPSBlbGVtZW50RGF0YS5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5v
ZGUucXVhbGlmaWVkTmFtZSgpKTsKLSAgICAgICAgICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGV4
aXN0aW5nQXR0cmlidXRlSW5kZXhGb3JGdWxsUXVhbGlmaWVkTmFtZSwgYXR0ck5vZGUucXVhbGlm
aWVkTmFtZSgpLCBhdHRyTm9kZS52YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0
dHJpYnV0ZSk7CisgICAgICAgICAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChlbGVtZW50RGF0YS5m
aW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpKSwgYXR0ck5v
ZGUucXVhbGlmaWVkTmFtZSgpLCBhdHRyTm9kZS52YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlv
bk9mTGF6eUF0dHJpYnV0ZSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICB1bnNp
Z25lZCBleGlzdGluZ0F0dHJpYnV0ZUluZGV4Rm9yRnVsbFF1YWxpZmllZE5hbWUgPSBlbGVtZW50
RGF0YS5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpKTsK
LSAgICAgICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoZXhpc3RpbmdBdHRyaWJ1dGVJbmRleEZvckZ1
bGxRdWFsaWZpZWROYW1lLCBhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCksIGF0dHJOb2RlLnZhbHVl
KCksIE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKICAgICB9CiAgICAgaWYg
KGF0dHJOb2RlLm93bmVyRWxlbWVudCgpICE9IHRoaXMpIHsKICAgICAgICAgYXR0ck5vZGUuYXR0
YWNoVG9FbGVtZW50KHRoaXMpOwogICAgICAgICB0cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKCZh
dHRyTm9kZSk7CiAgICAgICAgIGVuc3VyZUF0dHJOb2RlTGlzdEZvckVsZW1lbnQoKnRoaXMpLmFw
cGVuZCgmYXR0ck5vZGUpOwogICAgIH0KLSAgICByZXR1cm4gb2xkQXR0ck5vZGU7CisgICAgcmV0
dXJuIFdURk1vdmUob2xkQXR0ck5vZGUpOwogfQogCi1SZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0
QXR0cmlidXRlTm9kZU5TKEF0dHImIGF0dHJOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2Vw
dGlvbk9yPFJlZlB0cjxBdHRyPj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZU5TKEF0dHImIGF0
dHJOb2RlKQogewogICAgIFJlZlB0cjxBdHRyPiBvbGRBdHRyTm9kZSA9IGF0dHJJZkV4aXN0cyhh
dHRyTm9kZS5xdWFsaWZpZWROYW1lKCkpOwogICAgIGlmIChvbGRBdHRyTm9kZS5nZXQoKSA9PSAm
YXR0ck5vZGUpCi0gICAgICAgIHJldHVybiAmYXR0ck5vZGU7IC8vIFRoaXMgQXR0ciBpcyBhbHJl
YWR5IGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50LgorICAgICAgICByZXR1cm4gV1RGTW92ZShvbGRB
dHRyTm9kZSk7CiAKICAgICAvLyBJTlVTRV9BVFRSSUJVVEVfRVJSOiBSYWlzZWQgaWYgbm9kZSBp
cyBhbiBBdHRyIHRoYXQgaXMgYWxyZWFkeSBhbiBhdHRyaWJ1dGUgb2YgYW5vdGhlciBFbGVtZW50
IG9iamVjdC4KICAgICAvLyBUaGUgRE9NIHVzZXIgbXVzdCBleHBsaWNpdGx5IGNsb25lIEF0dHIg
bm9kZXMgdG8gcmUtdXNlIHRoZW0gaW4gb3RoZXIgZWxlbWVudHMuCi0gICAgaWYgKGF0dHJOb2Rl
Lm93bmVyRWxlbWVudCgpICYmIGF0dHJOb2RlLm93bmVyRWxlbWVudCgpICE9IHRoaXMpIHsKLSAg
ICAgICAgZWMgPSBJTlVTRV9BVFRSSUJVVEVfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9CisgICAgaWYgKGF0dHJOb2RlLm93bmVyRWxlbWVudCgpICYmIGF0dHJOb2RlLm93bmVy
RWxlbWVudCgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlVTRV9BVFRS
SUJVVEVfRVJSIH07CiAKICAgICBzeW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKLSAgICBVbmlx
dWVFbGVtZW50RGF0YSYgZWxlbWVudERhdGEgPSBlbnN1cmVVbmlxdWVFbGVtZW50RGF0YSgpOwor
ICAgIGF1dG8mIGVsZW1lbnREYXRhID0gZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKTsKIAotICAg
IHVuc2lnbmVkIGluZGV4ID0gZWxlbWVudERhdGEuZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKGF0
dHJOb2RlLnF1YWxpZmllZE5hbWUoKSk7CisgICAgYXV0byBpbmRleCA9IGVsZW1lbnREYXRhLmZp
bmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCkpOwogICAgIGlm
IChpbmRleCAhPSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQpIHsKICAgICAgICAgaWYg
KG9sZEF0dHJOb2RlKQogICAgICAgICAgICAgZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVudFdpdGhW
YWx1ZShvbGRBdHRyTm9kZS5nZXQoKSwgZWxlbWVudERhdGEuYXR0cmlidXRlQXQoaW5kZXgpLnZh
bHVlKCkpOwpAQCAtMjIzMiw2MiArMjE5OSw1NiBAQCBSZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0
QXR0cmlidXRlTm9kZU5TKEF0dHImIGF0dHJOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB0
cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKCZhdHRyTm9kZSk7CiAgICAgZW5zdXJlQXR0ck5vZGVM
aXN0Rm9yRWxlbWVudCgqdGhpcykuYXBwZW5kKCZhdHRyTm9kZSk7CiAKLSAgICByZXR1cm4gb2xk
QXR0ck5vZGU7CisgICAgcmV0dXJuIFdURk1vdmUob2xkQXR0ck5vZGUpOwogfQogCi1SZWZQdHI8
QXR0cj4gRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTm9kZShBdHRyJiBhdHRyLCBFeGNlcHRpb25D
b2RlJiBlYykKK0V4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRl
Tm9kZShBdHRyJiBhdHRyKQogewotICAgIGlmIChhdHRyLm93bmVyRWxlbWVudCgpICE9IHRoaXMp
IHsKLSAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9CisgICAgaWYgKGF0dHIub3duZXJFbGVtZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKIAogICAgIEFTU0VSVCgmZG9jdW1lbnQo
KSA9PSAmYXR0ci5kb2N1bWVudCgpKTsKIAogICAgIHN5bmNocm9uaXplQWxsQXR0cmlidXRlcygp
OwogCi0gICAgaWYgKCFtX2VsZW1lbnREYXRhKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VS
UjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlmICghbV9lbGVtZW50RGF0
YSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKIAotICAgIHVu
c2lnbmVkIGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPSBtX2VsZW1lbnREYXRhLT5maW5kQXR0cmli
dXRlSW5kZXhCeU5hbWUoYXR0ci5xdWFsaWZpZWROYW1lKCkpOworICAgIGF1dG8gZXhpc3RpbmdB
dHRyaWJ1dGVJbmRleCA9IG1fZWxlbWVudERhdGEtPmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShh
dHRyLnF1YWxpZmllZE5hbWUoKSk7CisgICAgaWYgKGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPT0g
RWxlbWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5kKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTk9UX0ZPVU5EX0VSUiB9OwogCi0gICAgaWYgKGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPT0g
RWxlbWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5kKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5E
X0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIFJlZjxBdHRyPiBvbGRB
dHRyTm9kZSB7IGF0dHIgfTsKIAotICAgIFJlZlB0cjxBdHRyPiBhdHRyTm9kZSA9ICZhdHRyOwog
ICAgIGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFsdWUoJmF0dHIsIG1fZWxlbWVudERh
dGEtPmF0dHJpYnV0ZUF0KGV4aXN0aW5nQXR0cmlidXRlSW5kZXgpLnZhbHVlKCkpOwogICAgIHJl
bW92ZUF0dHJpYnV0ZUludGVybmFsKGV4aXN0aW5nQXR0cmlidXRlSW5kZXgsIE5vdEluU3luY2hy
b25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKLSAgICByZXR1cm4gYXR0ck5vZGU7CisKKyAgICBy
ZXR1cm4gV1RGTW92ZShvbGRBdHRyTm9kZSk7CiB9CiAKLWJvb2wgRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGVOYW1lKFF1YWxpZmllZE5hbWUmIG91dCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCitFeGNlcHRpb25PcjxRdWFsaWZpZWROYW1lPiBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZU5h
bWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYg
cXVhbGlmaWVkTmFtZSkKIHsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTdHJpbmcg
cHJlZml4LCBsb2NhbE5hbWU7CiAgICAgaWYgKCFEb2N1bWVudDo6cGFyc2VRdWFsaWZpZWROYW1l
KHF1YWxpZmllZE5hbWUsIHByZWZpeCwgbG9jYWxOYW1lLCBlYykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CiAgICAgQVNTRVJUKCFlYyk7
CiAKLSAgICBRdWFsaWZpZWROYW1lIHFOYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBuYW1lc3BhY2VV
UkkpOworICAgIFF1YWxpZmllZE5hbWUgcmVzdWx0IHsgcHJlZml4LCBsb2NhbE5hbWUsIG5hbWVz
cGFjZVVSSSB9OwogCi0gICAgaWYgKCFEb2N1bWVudDo6aGFzVmFsaWROYW1lc3BhY2VGb3JBdHRy
aWJ1dGVzKHFOYW1lKSkgewotICAgICAgICBlYyA9IE5BTUVTUEFDRV9FUlI7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKCFEb2N1bWVudDo6aGFzVmFsaWROYW1lc3BhY2VG
b3JBdHRyaWJ1dGVzKHJlc3VsdCkpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOQU1FU1BB
Q0VfRVJSIH07CiAKLSAgICBvdXQgPSBxTmFtZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi12b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxp
ZmllZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
RXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6c2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBRdWFsaWZpZWROYW1lIHBhcnNlZE5hbWUg
PSBhbnlOYW1lOwotICAgIGlmICghcGFyc2VBdHRyaWJ1dGVOYW1lKHBhcnNlZE5hbWUsIG5hbWVz
cGFjZVVSSSwgcXVhbGlmaWVkTmFtZSwgZWMpKQotICAgICAgICByZXR1cm47Ci0gICAgc2V0QXR0
cmlidXRlKHBhcnNlZE5hbWUsIHZhbHVlKTsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlQXR0cmli
dXRlTmFtZShuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpOworICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwor
ICAgIHNldEF0dHJpYnV0ZShyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCksIHZhbHVlKTsKKyAg
ICByZXR1cm4geyB9OwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZUludGVybmFs
KHVuc2lnbmVkIGluZGV4LCBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgaW5TeW5jaHJv
bml6YXRpb25PZkxhenlBdHRyaWJ1dGUpCkBAIC0yNTU1LDE3ICsyNTE2LDE0IEBAIGJvb2wgRWxl
bWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJlZ2luKCkKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgRWxlbWVudDo6bWVyZ2VXaXRoTmV4dFRleHROb2RlKFRleHQmIG5vZGUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6bWVyZ2VXaXRoTmV4dFRl
eHROb2RlKFRleHQmIG5vZGUpCiB7CiAgICAgYXV0byogbmV4dCA9IG5vZGUubmV4dFNpYmxpbmco
KTsKICAgICBpZiAoIWlzPFRleHQ+KG5leHQpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgUmVmPFRleHQ+IHRleHROZXh0IHsgZG93bmNhc3Q8VGV4dD4oKm5leHQp
IH07Ci0KICAgICBub2RlLmFwcGVuZERhdGEodGV4dE5leHQtPmRhdGEoKSk7Ci0gICAgYXV0byBy
ZXN1bHQgPSB0ZXh0TmV4dC0+cmVtb3ZlKCk7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkKLSAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKKyAgICBy
ZXR1cm4gdGV4dE5leHQtPnJlbW92ZSgpOwogfQogCiBTdHJpbmcgRWxlbWVudDo6aW5uZXJIVE1M
KCkgY29uc3QKQEAgLTI1NzgsMzkgKzI1MzYsNDUgQEAgU3RyaW5nIEVsZW1lbnQ6Om91dGVySFRN
TCgpIGNvbnN0CiAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCgqdGhpcyk7CiB9CiAKLXZvaWQgRWxl
bWVudDo6c2V0T3V0ZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYgZWMp
CitFeGNlcHRpb25Pcjx2b2lkPiBFbGVtZW50OjpzZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJiBo
dG1sKQogewotICAgIEVsZW1lbnQqIHAgPSBwYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYgKCFpczxI
VE1MRWxlbWVudD4ocCkpIHsKLSAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBwYXJl
bnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4ocCk7CisgICAgYXV0byogcGFyZW50RWxlbWVudCA9
IHRoaXMtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihwYXJlbnRF
bGVtZW50KSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUiB9OworCisgICAgUmVmPEhUTUxFbGVtZW50PiBwYXJlbnQgPSBkb3duY2FzdDxIVE1M
RWxlbWVudD4oKnBhcmVudEVsZW1lbnQpOwogICAgIFJlZlB0cjxOb2RlPiBwcmV2ID0gcHJldmlv
dXNTaWJsaW5nKCk7CiAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBuZXh0U2libGluZygpOwogCi0g
ICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoKnBhcmVu
dCwgaHRtbCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKLSAgICBpZiAoZnJhZ21lbnQuaGFzRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgZWMgPSBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCkuY29k
ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAorICAgIGF1dG8gZnJhZ21lbnQgPSBj
cmVhdGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKHBhcmVudCwgaHRtbCwgQWxsb3dTY3JpcHRp
bmdDb250ZW50KTsKKyAgICBpZiAoZnJhZ21lbnQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBwYXJlbnQtPnJlcGxhY2VDaGlsZChmcmFnbWVudC5yZWxlYXNlUmV0dXJuVmFs
dWUoKS5nZXQoKSwgKnRoaXMsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBlYyB9OworCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0ID8gbmV4dC0+cHJl
dmlvdXNTaWJsaW5nKCkgOiBudWxscHRyOwotICAgIGlmICghZWMgJiYgaXM8VGV4dD4obm9kZS5n
ZXQoKSkpCi0gICAgICAgIG1lcmdlV2l0aE5leHRUZXh0Tm9kZShkb3duY2FzdDxUZXh0Pigqbm9k
ZSksIGVjKTsKLSAgICBpZiAoIWVjICYmIGlzPFRleHQ+KHByZXYuZ2V0KCkpKQotICAgICAgICBt
ZXJnZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKnByZXYpLCBlYyk7CisgICAgaWYg
KGlzPFRleHQ+KG5vZGUuZ2V0KCkpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbWVyZ2VXaXRo
TmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpub2RlKSk7CisgICAgICAgIGlmIChyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRp
b24oKTsKKyAgICB9CisgICAgaWYgKGlzPFRleHQ+KHByZXYuZ2V0KCkpKSB7CisgICAgICAgIGF1
dG8gcmVzdWx0ID0gbWVyZ2VXaXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpwcmV2KSk7
CisgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKIH0KIAog
Ci12b2lkIEVsZW1lbnQ6OnNldElubmVySFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlv
bkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0
IFN0cmluZyYgaHRtbCkKIHsKICAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGb3JJ
bm5lck91dGVySFRNTCgqdGhpcywgaHRtbCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKLSAgICBp
ZiAoZnJhZ21lbnQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZWMgPSBmcmFnbWVudC5yZWxl
YXNlRXhjZXB0aW9uKCkuY29kZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChm
cmFnbWVudC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2VF
eGNlcHRpb24oKTsKIAogICAgIENvbnRhaW5lck5vZGUqIGNvbnRhaW5lcjsKICAgICBpZiAoIWlz
PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KCp0aGlzKSkKQEAgLTI2MTgsOSArMjU4Miw3IEBAIHZvaWQg
RWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAgICAgZWxzZQogICAgICAgICBjb250YWluZXIgPSAmZG93bmNhc3Q8SFRNTFRlbXBsYXRl
RWxlbWVudD4oKnRoaXMpLmNvbnRlbnQoKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gcmVwbGFjZUNo
aWxkcmVuV2l0aEZyYWdtZW50KCpjb250YWluZXIsIGZyYWdtZW50LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBlYyA9IGZyYWdt
ZW50LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7CisgICAgcmV0dXJuIHJlcGxhY2VDaGlsZHJl
bldpdGhGcmFnbWVudCgqY29udGFpbmVyLCBmcmFnbWVudC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7
CiB9CiAKIFN0cmluZyBFbGVtZW50Ojppbm5lclRleHQoKQpAQCAtMjk5MywxOCArMjk1NSwyNCBA
QCBib29sIEVsZW1lbnQ6Om1hdGNoZXNEZWZhdWx0UHNldWRvQ2xhc3MoKSBjb25zdAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBFbGVtZW50OjptYXRjaGVzKGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8Ym9vbD4gRWxlbWVudDo6bWF0
Y2hlcyhjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgIFNlbGVjdG9yUXVlcnkqIHNlbGVj
dG9yUXVlcnkgPSBkb2N1bWVudCgpLnNlbGVjdG9yUXVlcnlGb3JTdHJpbmcoc2VsZWN0b3IsIGVj
KTsKLSAgICByZXR1cm4gc2VsZWN0b3JRdWVyeSAmJiBzZWxlY3RvclF1ZXJ5LT5tYXRjaGVzKCp0
aGlzKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBhdXRvKiBxdWVyeSA9IGRvY3Vt
ZW50KCkuc2VsZWN0b3JRdWVyeUZvclN0cmluZyhzZWxlY3RvciwgZWMpOworICAgIGlmIChlYykK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgcmV0dXJuIHF1ZXJ5ICYmIHF1
ZXJ5LT5tYXRjaGVzKCp0aGlzKTsKIH0KIAotRWxlbWVudCogRWxlbWVudDo6Y2xvc2VzdChjb25z
dCBTdHJpbmcmIHNlbGVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPEVsZW1l
bnQqPiBFbGVtZW50OjpjbG9zZXN0KGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiB7Ci0gICAgU2Vs
ZWN0b3JRdWVyeSogc2VsZWN0b3JRdWVyeSA9IGRvY3VtZW50KCkuc2VsZWN0b3JRdWVyeUZvclN0
cmluZyhzZWxlY3RvciwgZWMpOwotICAgIGlmIChzZWxlY3RvclF1ZXJ5KQotICAgICAgICByZXR1
cm4gc2VsZWN0b3JRdWVyeS0+Y2xvc2VzdCgqdGhpcyk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYXV0byogcXVlcnkgPSBkb2N1bWVudCgpLnNl
bGVjdG9yUXVlcnlGb3JTdHJpbmcoc2VsZWN0b3IsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBlYyB9OworICAgIGlmICghcXVlcnkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBxdWVyeS0+Y2xvc2VzdCgqdGhpcyk7CiB9CiAKIGJvb2wg
RWxlbWVudDo6c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpIGNvbnN0CkBAIC0zMDc5LDYgKzMw
NDcsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgdQogfQogCiAjaWYgRU5BQkxFKElORElFX1VJ
KQorCiB2b2lkIEVsZW1lbnQ6OnNldFVJQWN0aW9ucyhjb25zdCBBdG9taWNTdHJpbmcmIGFjdGlv
bnMpCiB7CiAgICAgc2V0QXR0cmlidXRlKHVpYWN0aW9uc0F0dHIsIGFjdGlvbnMpOwpAQCAtMzA4
OCw2ICszMDU3LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpVSUFjdGlvbnMoKSBj
b25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodWlhY3Rpb25zQXR0cik7CiB9CisKICNl
bmRpZgogCiBib29sIEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9k
ZSYgY2hpbGQpIGNvbnN0CkBAIC0zNjgzLDcgKzM2NTMsNyBAQCBib29sIEVsZW1lbnQ6OmllRm9y
Ymlkc0luc2VydEhUTUwoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogRWxl
bWVudDo6aW5zZXJ0QWRqYWNlbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgUmVmPE5vZGU+JiYgbmV3
Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8Tm9kZSo+IEVsZW1lbnQ6Omlu
c2VydEFkamFjZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIFJlZjxOb2RlPiYmIG5ld0NoaWxkKQog
ewogICAgIC8vIEluIEludGVybmV0IEV4cGxvcmVyIGlmIHRoZSBlbGVtZW50IGhhcyBubyBwYXJl
bnQgYW5kIHdoZXJlIGlzICJiZWZvcmVCZWdpbiIgb3IgImFmdGVyRW5kIiwKICAgICAvLyBhIGRv
Y3VtZW50IGZyYWdtZW50IGlzIGNyZWF0ZWQgYW5kIHRoZSBlbGVtZW50cyBhcHBlbmRlZCBpbiB0
aGUgY29ycmVjdCBvcmRlci4gVGhpcyBkb2N1bWVudApAQCAtMzY5Myw3NiArMzY2MywxMDQgQEAg
Tm9kZSogRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgUmVmPE5v
ZGU+JiYgbmV3Q2hpbGQsIEV4Y2VwdGkKICAgICAvLyBPcGVyYSBhbHNvIGFwcGVhcnMgdG8gZGlz
YWxsb3cgc3VjaCB1c2FnZS4KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZSh3aGVyZSwgImJlZm9yZWJlZ2luIikpIHsKLSAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50
ID0gdGhpcy0+cGFyZW50Tm9kZSgpOwotICAgICAgICByZXR1cm4gKHBhcmVudCAmJiBwYXJlbnQt
Pmluc2VydEJlZm9yZShuZXdDaGlsZCwgdGhpcywgZWMpKSA/IG5ld0NoaWxkLnB0cigpIDogbnVs
bHB0cjsKKyAgICAgICAgYXV0byogcGFyZW50ID0gdGhpcy0+cGFyZW50Tm9kZSgpOworICAgICAg
ICBpZiAoIXBhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gcGFyZW50LT5pbnNlcnRC
ZWZvcmUobmV3Q2hpbGQsIHRoaXMsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgICAgIHJldHVybiBzdWNjZXNzID8gbmV3Q2hp
bGQucHRyKCkgOiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZSh3aGVyZSwgImFmdGVyYmVnaW4iKSkKLSAgICAgICAgcmV0dXJuIGluc2VydEJl
Zm9yZShuZXdDaGlsZCwgZmlyc3RDaGlsZCgpLCBlYykgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxw
dHI7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYWZ0ZXJi
ZWdpbiIpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBib29sIHN1
Y2Nlc3MgPSBpbnNlcnRCZWZvcmUobmV3Q2hpbGQsIGZpcnN0Q2hpbGQoKSwgZWMpOworICAgICAg
ICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKyAgICAgICAg
cmV0dXJuIHN1Y2Nlc3MgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7CisgICAgfQogCi0gICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYmVmb3JlZW5kIikpCi0g
ICAgICAgIHJldHVybiBhcHBlbmRDaGlsZChuZXdDaGlsZCwgZWMpID8gbmV3Q2hpbGQucHRyKCkg
OiBudWxscHRyOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3aGVyZSwg
ImJlZm9yZWVuZCIpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBi
b29sIHN1Y2Nlc3MgPSBhcHBlbmRDaGlsZChuZXdDaGlsZCwgZWMpOworICAgICAgICBpZiAoZWMp
CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKyAgICAgICAgcmV0dXJuIHN1
Y2Nlc3MgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7CisgICAgfQogCiAgICAgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYWZ0ZXJlbmQiKSkgewotICAgICAgICBD
b250YWluZXJOb2RlKiBwYXJlbnQgPSB0aGlzLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIHJldHVy
biAocGFyZW50ICYmIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBuZXh0U2libGluZygp
LCBlYykpID8gbmV3Q2hpbGQucHRyKCkgOiBudWxscHRyOworICAgICAgICBhdXRvKiBwYXJlbnQg
PSB0aGlzLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBi
b29sIHN1Y2Nlc3MgPSBwYXJlbnQtPmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmco
KSwgZWMpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
ZWMgfTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7
CiAgICAgfQogCi0gICAgZWMgPSBTWU5UQVhfRVJSOwotICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CiB9CiAKLUVsZW1lbnQqIEVsZW1lbnQ6
Omluc2VydEFkamFjZW50RWxlbWVudChjb25zdCBTdHJpbmcmIHdoZXJlLCBFbGVtZW50JiBuZXdD
aGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25PcjxFbGVtZW50Kj4gRWxlbWVudDo6
aW5zZXJ0QWRqYWNlbnRFbGVtZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIG5ld0No
aWxkKQogewotICAgIE5vZGUqIHJldHVyblZhbHVlID0gaW5zZXJ0QWRqYWNlbnQod2hlcmUsIG5l
d0NoaWxkLCBlYyk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXJldHVy
blZhbHVlIHx8IGlzPEVsZW1lbnQ+KCpyZXR1cm5WYWx1ZSkpOwotICAgIHJldHVybiBkb3duY2Fz
dDxFbGVtZW50PihyZXR1cm5WYWx1ZSk7CisgICAgYXV0byByZXN1bHQgPSBpbnNlcnRBZGphY2Vu
dCh3aGVyZSwgbmV3Q2hpbGQpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiBkb3duY2Fz
dDxFbGVtZW50PihyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwogfQogCiAvLyBTdGVwIDEg
b2YgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyNkb20tZWxlbWVudC1pbnNlcnRh
ZGphY2VudGh0bWwuCi1zdGF0aWMgQ29udGFpbmVyTm9kZSogY29udGV4dE5vZGVGb3JJbnNlcnRp
b24oY29uc3QgU3RyaW5nJiB3aGVyZSwgRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCitzdGF0aWMgRXhjZXB0aW9uT3I8Q29udGFpbmVyTm9kZSo+IGNvbnRleHROb2RlRm9ySW5z
ZXJ0aW9uKGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYmVmb3JlYmVnaW4iKSB8fCBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3aGVyZSwgImFmdGVyZW5kIikpIHsKLSAgICAg
ICAgYXV0byogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAoIXBh
cmVudCB8fCBpczxEb2N1bWVudD4oKnBhcmVudCkpIHsKLSAgICAgICAgICAgIGVjID0gTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIH0KKyAgICAgICAgYXV0byogcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKCk7CisgICAg
ICAgIGlmICghcGFyZW50IHx8IGlzPERvY3VtZW50PigqcGFyZW50KSkKKyAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKICAgICAgICAg
cmV0dXJuIHBhcmVudDsKICAgICB9CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHdoZXJlLCAiYWZ0ZXJiZWdpbiIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHdoZXJlLCAiYmVmb3JlZW5kIikpCi0gICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIGVjID0g
IFNZTlRBWF9FUlI7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmZWxlbWVu
dDsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworfQorCisvLyBTdGVwIDIg
b2YgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyNkb20tZWxlbWVudC1pbnNlcnRh
ZGphY2VudGh0bWwuCitzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPEVsZW1lbnQ+PiBjb250ZXh0RWxl
bWVudEZvckluc2VydGlvbihjb25zdCBTdHJpbmcmIHdoZXJlLCBFbGVtZW50JiBlbGVtZW50KQor
eworICAgIGF1dG8gY29udGV4dE5vZGVSZXN1bHQgPSBjb250ZXh0Tm9kZUZvckluc2VydGlvbih3
aGVyZSwgZWxlbWVudCk7CisgICAgaWYgKGNvbnRleHROb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gY29udGV4dE5vZGVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwor
ICAgIGF1dG8mIGNvbnRleHROb2RlID0gKmNvbnRleHROb2RlUmVzdWx0LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpOworICAgIGlmICghaXM8RWxlbWVudD4oY29udGV4dE5vZGUpIHx8IChjb250ZXh0Tm9k
ZS5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgaXM8SFRNTEh0bWxFbGVtZW50Pihjb250
ZXh0Tm9kZSkpKQorICAgICAgICByZXR1cm4gUmVmPEVsZW1lbnQ+IHsgSFRNTEJvZHlFbGVtZW50
OjpjcmVhdGUoY29udGV4dE5vZGUuZG9jdW1lbnQoKSkgfTsKKyAgICByZXR1cm4gUmVmPEVsZW1l
bnQ+IHsgZG93bmNhc3Q8RWxlbWVudD4oY29udGV4dE5vZGUpIH07CiB9CiAKIC8vIGh0dHBzOi8v
dzNjLmdpdGh1Yi5pby9ET00tUGFyc2luZy8jZG9tLWVsZW1lbnQtaW5zZXJ0YWRqYWNlbnRodG1s
Ci12b2lkIEVsZW1lbnQ6Omluc2VydEFkamFjZW50SFRNTChjb25zdCBTdHJpbmcmIHdoZXJlLCBj
b25zdCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lk
PiBFbGVtZW50OjppbnNlcnRBZGphY2VudEhUTUwoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3Qg
U3RyaW5nJiBtYXJrdXApCiB7Ci0gICAgLy8gU3RlcCAxLgotICAgIGF1dG8qIGNvbnRleHROb2Rl
ID0gY29udGV4dE5vZGVGb3JJbnNlcnRpb24od2hlcmUsIHRoaXMsIGVjKTsKLSAgICBpZiAoIWNv
bnRleHROb2RlKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGNvbnRleHRF
bGVtZW50OwotICAgIC8vIFN0ZXAgMi4KLSAgICBpZiAoIWlzPEVsZW1lbnQ+KCpjb250ZXh0Tm9k
ZSkKLSAgICAgICAgfHwgKGNvbnRleHROb2RlLT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkg
JiYgaXM8SFRNTEh0bWxFbGVtZW50PigqY29udGV4dE5vZGUpKSkgewotICAgICAgICBjb250ZXh0
RWxlbWVudCA9IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKGNvbnRleHROb2RlLT5kb2N1bWVudCgp
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29udGV4dEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
Pihjb250ZXh0Tm9kZSk7CisgICAgLy8gU3RlcHMgMSBhbmQgMi4KKyAgICBhdXRvIGNvbnRleHRF
bGVtZW50ID0gY29udGV4dEVsZW1lbnRGb3JJbnNlcnRpb24od2hlcmUsICp0aGlzKTsKKyAgICBp
ZiAoY29udGV4dEVsZW1lbnQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBjb250ZXh0
RWxlbWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgLy8gU3RlcCAzLgotICAgIGF1dG8gZnJh
Z21lbnQgPSBjcmVhdGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKCpjb250ZXh0RWxlbWVudCwg
bWFya3VwLCBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwotICAgIGlmIChmcmFnbWVudC5oYXNFeGNl
cHRpb24oKSkgewotICAgICAgICBlYyA9IGZyYWdtZW50LnJlbGVhc2VFeGNlcHRpb24oKS5jb2Rl
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZy
YWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoY29udGV4dEVsZW1lbnQucmVsZWFzZVJldHVyblZhbHVl
KCksIG1hcmt1cCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKKyAgICBpZiAoZnJhZ21lbnQuaGFz
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7
CiAgICAgLy8gU3RlcCA0LgotICAgIGluc2VydEFkamFjZW50KHdoZXJlLCBmcmFnbWVudC5yZWxl
YXNlUmV0dXJuVmFsdWUoKSwgZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaW5zZXJ0QWRqYWNlbnQo
d2hlcmUsIGZyYWdtZW50LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEVsZW1lbnQ6Omluc2VydEFkamFjZW50VGV4dChj
b25zdCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnRUZXh0KGNvbnN0IFN0
cmluZyYgd2hlcmUsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBpbnNlcnRBZGphY2VudCh3
aGVyZSwgZG9jdW1lbnQoKS5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSwgZWMpOworICAgIGF1dG8gcmVz
dWx0ID0gaW5zZXJ0QWRqYWNlbnQod2hlcmUsIGRvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUodGV4
dCkpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiByZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDAzNTdkNzFhNWQ5NTRiODY4MDBkODM4
NzdmY2QyNjJiNWQ2MmU3MjkuLjdkY2IyZjg3MTFiOGU1Zjc2ZTYyZWZkYWVmMzk3ZDgwZjA0ODNm
NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjIsOCArMjIsNyBAQAogICoKICAqLwogCi0jaWZu
ZGVmIEVsZW1lbnRfaAotI2RlZmluZSBFbGVtZW50X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAt
MTEyLDkgKzExMSw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNT
dHJpbmcmIGdldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0QXR0cmlidXRlTlMoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
KSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHN0YXRpYyBib29sIHBhcnNlQXR0cmlidXRlTmFtZShRdWFsaWZpZWROYW1lJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVh
bGlmaWVkTmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21p
Y1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEF0dHJp
YnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
OworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxRdWFsaWZpZWROYW1lPiBwYXJzZUF0dHJpYnV0ZU5h
bWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYg
cXVhbGlmaWVkTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0
QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21p
Y1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAKICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGdldElkQXR0cmlidXRlKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRJZEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKQEAgLTE5MCw5ICsxODksOSBAQCBw
dWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0cj4gZ2V0QXR0cmlidXRlTm9k
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxB
dHRyPiBnZXRBdHRyaWJ1dGVOb2RlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkks
IGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQ
dHI8QXR0cj4gc2V0QXR0cmlidXRlTm9kZShBdHRyJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdF
QkNPUkVfRVhQT1JUIFJlZlB0cjxBdHRyPiBzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ciYsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0cj4gcmVtb3ZlQXR0cmli
dXRlTm9kZShBdHRyJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2Vw
dGlvbk9yPFJlZlB0cjxBdHRyPj4gc2V0QXR0cmlidXRlTm9kZShBdHRyJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgRXhjZXB0aW9uT3I8UmVmUHRyPEF0dHI+PiBzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0
ciYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gcmVtb3ZlQXR0
cmlidXRlTm9kZShBdHRyJik7CiAKICAgICBSZWZQdHI8QXR0cj4gYXR0cklmRXhpc3RzKGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKICAgICBSZWZQdHI8QXR0cj4gYXR0cklmRXhpc3RzKGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOwpA
QCAtMjY5LDE0ICsyNjgsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklz
TmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTaGFkb3dS
b290KiBzaGFkb3dSb290KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2hhZG93Um9vdCog
Y3JlYXRlU2hhZG93Um9vdChFeGNlcHRpb25Db2RlJik7CisgICAgU2hhZG93Um9vdCogc2hhZG93
Um9vdEZvckJpbmRpbmdzKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7CiAKICAgICBzdHJ1Y3QgU2hh
ZG93Um9vdEluaXQgewogICAgICAgICBTaGFkb3dSb290TW9kZSBtb2RlOwogICAgIH07Ci0KLSAg
ICBTaGFkb3dSb290KiBzaGFkb3dSb290Rm9yQmluZGluZ3MoSlNDOjpFeGVjU3RhdGUmKSBjb25z
dDsKLSAgICBSZWZQdHI8U2hhZG93Um9vdD4gYXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJ
bml0JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxTaGFkb3dSb290Pj4g
YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0Jik7CiAKICAgICBTaGFkb3dSb290KiB1
c2VyQWdlbnRTaGFkb3dSb290KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2hhZG93Um9v
dCYgZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwpAQCAtMzE1LDkgKzMxMiw5IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRhYkluZGV4KGludCk7CiAgICAgdmlydHVh
bCBFbGVtZW50KiBmb2N1c0RlbGVnYXRlKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50
KiBpbnNlcnRBZGphY2VudEVsZW1lbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgRWxlbWVudCYgbmV3
Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydEFk
amFjZW50SFRNTChjb25zdCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydEFkamFjZW50VGV4dChj
b25zdCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxFbGVtZW50Kj4gaW5zZXJ0QWRqYWNlbnRF
bGVtZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIG5ld0NoaWxkKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBpbnNlcnRBZGphY2VudEhUTUwoY29uc3QgU3Ry
aW5nJiB3aGVyZSwgY29uc3QgU3RyaW5nJiBodG1sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNl
cHRpb25Pcjx2b2lkPiBpbnNlcnRBZGphY2VudFRleHQoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29u
c3QgU3RyaW5nJiB0ZXh0KTsKIAogICAgIGJvb2wgaWVGb3JiaWRzSW5zZXJ0SFRNTCgpIGNvbnN0
OwogCkBAIC0zODAsOCArMzc3LDggQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIGlubmVySFRNTCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBvdXRlckhU
TUwoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElubmVySFRNTChjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRPdXRl
ckhUTUwoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JU
IEV4Y2VwdGlvbk9yPHZvaWQ+IHNldElubmVySFRNTChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlubmVyVGV4dCgpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIFN0cmluZyBvdXRlclRleHQoKTsKICAKQEAgLTQyOSw4ICs0MjYsOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIG1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcygpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBtYXRjaGVzSW5kZXRlcm1pbmF0ZVBzZXVkb0NsYXNzKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIG1hdGNoZXNEZWZhdWx0UHNldWRvQ2xhc3MoKSBjb25zdDsKLSAgICBX
RUJDT1JFX0VYUE9SVCBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBjbG9zZXN0KGNvbnN0IFN0
cmluZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhj
ZXB0aW9uT3I8Ym9vbD4gbWF0Y2hlcyhjb25zdCBTdHJpbmcmIHNlbGVjdG9ycyk7CisgICAgV0VC
Q09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8RWxlbWVudCo+IGNsb3Nlc3QoY29uc3QgU3RyaW5nJiBz
ZWxlY3RvcnMpOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkg
Y29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBET01Ub2tlbkxpc3QmIGNsYXNzTGlzdCgpOwpA
QCAtNjAxLDcgKzU5OCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgYWRkU2hhZG93Um9vdChS
ZWY8U2hhZG93Um9vdD4mJik7CiAKLSAgICBzdGF0aWMgdm9pZCBtZXJnZVdpdGhOZXh0VGV4dE5v
ZGUoVGV4dCYgbm9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHN0YXRpYyBFeGNlcHRpb25Pcjx2
b2lkPiBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoVGV4dCYpOwogCiBwcml2YXRlOgogICAgIGJvb2wg
aXNUZXh0Tm9kZSgpIGNvbnN0OwpAQCAtNjM5LDcgKzYzNiw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCB1cGRhdGVJZEZvckRvY3VtZW50KEhUTUxEb2N1bWVudCYsIGNvbnN0IEF0b21pY1N0cmluZyYg
b2xkSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQsIEhUTUxEb2N1bWVudE5hbWVkSXRlbU1h
cHNVcGRhdGluZ0NvbmRpdGlvbik7CiAgICAgdm9pZCB1cGRhdGVMYWJlbChUcmVlU2NvcGUmLCBj
b25zdCBBdG9taWNTdHJpbmcmIG9sZEZvckF0dHJpYnV0ZVZhbHVlLCBjb25zdCBBdG9taWNTdHJp
bmcmIG5ld0ZvckF0dHJpYnV0ZVZhbHVlKTsKIAotICAgIE5vZGUqIGluc2VydEFkamFjZW50KGNv
bnN0IFN0cmluZyYgd2hlcmUsIFJlZjxOb2RlPiYmIG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJik7
CisgICAgRXhjZXB0aW9uT3I8Tm9kZSo+IGluc2VydEFkamFjZW50KGNvbnN0IFN0cmluZyYgd2hl
cmUsIFJlZjxOb2RlPiYmIG5ld0NoaWxkKTsKIAogICAgIHZvaWQgc2Nyb2xsQnlVbml0cyhpbnQg
dW5pdHMsIFNjcm9sbEdyYW51bGFyaXR5KTsKIApAQCAtODM4LDUgKzgzNSwzIEBAIGlubGluZSB2
b2lkIEVsZW1lbnQ6OnNldEhhc0ZvY3VzV2l0aGluKGJvb2wgZmxhZykKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RWxlbWVudCkKICAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6Tm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCk7
IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5pZGwKaW5kZXggMzhiNjA2YTQwMWVmZTJmYjRiMjJmNGQzOGJhZGMxM2NlNGU2OGRlNC4uZTQy
ZDJkNGQ4MWYyY2JjMjViYjYxN2E4ZjZkMzAyNmFmNWJjODRlOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmlkbApAQCAtMjgsMTMgKzI4LDEzIEBACiAKICAgICBET01TdHJpbmc/IGdldEF0dHJpYnV0ZShE
T01TdHJpbmcgbmFtZSk7CiAKLSAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93TGVnYWN5RXhjZXB0
aW9uXSB2b2lkIHNldEF0dHJpYnV0ZShET01TdHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsK
KyAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIHNldEF0dHJpYnV0ZShE
T01TdHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKIAogICAgIFtDRVJlYWN0aW9uc10gdm9p
ZCByZW1vdmVBdHRyaWJ1dGUoRE9NU3RyaW5nIG5hbWUpOwogICAgIEF0dHI/IGdldEF0dHJpYnV0
ZU5vZGUoRE9NU3RyaW5nIG5hbWUpOwogCi0gICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2Fj
eUV4Y2VwdGlvbl0gQXR0cj8gc2V0QXR0cmlidXRlTm9kZShBdHRyIG5ld0F0dHIpOwotICAgIFtD
RVJlYWN0aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEF0dHIgcmVtb3ZlQXR0cmlidXRl
Tm9kZShBdHRyIG9sZEF0dHIpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25d
IEF0dHI/IHNldEF0dHJpYnV0ZU5vZGUoQXR0ciBuZXdBdHRyKTsKKyAgICBbQ0VSZWFjdGlvbnMs
IE1heVRocm93RXhjZXB0aW9uXSBBdHRyIHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ciBvbGRBdHRy
KTsKIAogICAgIEhUTUxDb2xsZWN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lKERPTVN0cmluZyBu
YW1lKTsKIApAQCAtNDMsMTMgKzQzLDEzIEBACiAKICAgICBET01TdHJpbmc/IGdldEF0dHJpYnV0
ZU5TKERPTVN0cmluZz8gbmFtZXNwYWNlVVJJLCBET01TdHJpbmcgbG9jYWxOYW1lKTsKIAotICAg
IFtDRVJlYWN0aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIHZvaWQgc2V0QXR0cmlidXRl
TlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBxdWFsaWZpZWROYW1lLCBET01T
dHJpbmcgdmFsdWUpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQg
c2V0QXR0cmlidXRlTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBxdWFsaWZp
ZWROYW1lLCBET01TdHJpbmcgdmFsdWUpOwogICAgIFtDRVJlYWN0aW9uc10gdm9pZCByZW1vdmVB
dHRyaWJ1dGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7
CiAKICAgICBIVE1MQ29sbGVjdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKERPTVN0cmluZz8g
bmFtZXNwYWNlVVJJLCBET01TdHJpbmcgbG9jYWxOYW1lKTsKIAogICAgIEF0dHI/IGdldEF0dHJp
YnV0ZU5vZGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7
Ci0gICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gQXR0cj8gc2V0QXR0
cmlidXRlTm9kZU5TKEF0dHIgbmV3QXR0cik7CisgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4
Y2VwdGlvbl0gQXR0cj8gc2V0QXR0cmlidXRlTm9kZU5TKEF0dHIgbmV3QXR0cik7CiAgICAgYm9v
bGVhbiBoYXNBdHRyaWJ1dGUoRE9NU3RyaW5nIG5hbWUpOwogCiAgICAgYm9vbGVhbiBoYXNBdHRy
aWJ1dGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7CkBA
IC05NywxNSArOTcsMTUgQEAKICAgICBzZXF1ZW5jZTxET01TdHJpbmc+IGdldEF0dHJpYnV0ZU5h
bWVzKCk7CiAKICAgICBIVE1MQ29sbGVjdGlvbiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKERPTVN0
cmluZyBuYW1lKTsKLSAgICBbQ0VSZWFjdGlvbnMsIFRyZWF0TnVsbEFzPUVtcHR5U3RyaW5nLCBT
ZXR0ZXJNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gYXR0cmlidXRlIERPTVN0cmluZyBpbm5lckhU
TUw7Ci0gICAgW0NFUmVhY3Rpb25zLCBUcmVhdE51bGxBcz1FbXB0eVN0cmluZywgU2V0dGVyTWF5
VGhyb3dMZWdhY3lFeGNlcHRpb25dIGF0dHJpYnV0ZSBET01TdHJpbmcgb3V0ZXJIVE1MOworICAg
IFtDRVJlYWN0aW9ucywgVHJlYXROdWxsQXM9RW1wdHlTdHJpbmcsIFNldHRlck1heVRocm93RXhj
ZXB0aW9uXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGlubmVySFRNTDsKKyAgICBbQ0VSZWFjdGlvbnMs
IFRyZWF0TnVsbEFzPUVtcHR5U3RyaW5nLCBTZXR0ZXJNYXlUaHJvd0V4Y2VwdGlvbl0gYXR0cmli
dXRlIERPTVN0cmluZyBvdXRlckhUTUw7CiAKICAgICBbQ0VSZWFjdGlvbnMsIFJlZmxlY3Q9Y2xh
c3NdIGF0dHJpYnV0ZSBET01TdHJpbmcgY2xhc3NOYW1lOwogICAgIFtQdXRGb3J3YXJkcz12YWx1
ZV0gcmVhZG9ubHkgYXR0cmlidXRlIERPTVRva2VuTGlzdCBjbGFzc0xpc3Q7CiAKLSAgICBbTWF5
VGhyb3dMZWdhY3lFeGNlcHRpb25dIGJvb2xlYW4gbWF0Y2hlcyhET01TdHJpbmcgc2VsZWN0b3Jz
KTsKLSAgICBbTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEVsZW1lbnQgY2xvc2VzdChET01TdHJp
bmcgc2VsZWN0b3JzKTsgICAgCi0gICAgW0ltcGxlbWVudGVkQXM9bWF0Y2hlcywgTWF5VGhyb3dM
ZWdhY3lFeGNlcHRpb25dIGJvb2xlYW4gd2Via2l0TWF0Y2hlc1NlbGVjdG9yKERPTVN0cmluZyBz
ZWxlY3RvcnMpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBtYXRjaGVzKERPTVN0
cmluZyBzZWxlY3RvcnMpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRWxlbWVudCBjbG9zZXN0
KERPTVN0cmluZyBzZWxlY3RvcnMpOworICAgIFtJbXBsZW1lbnRlZEFzPW1hdGNoZXMsIE1heVRo
cm93RXhjZXB0aW9uXSBib29sZWFuIHdlYmtpdE1hdGNoZXNTZWxlY3RvcihET01TdHJpbmcgc2Vs
ZWN0b3JzKTsKIAogICAgIC8vIENTU09NIFZpZXcgTW9kdWxlIEFQSQogICAgIENsaWVudFJlY3RM
aXN0IGdldENsaWVudFJlY3RzKCk7CkBAIC0xMjQsOSArMTI0LDkgQEAKICAgICBbQ0VSZWFjdGlv
bnMsIFJlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgdWlhY3Rpb25zOwogI2VuZGlmCiAKLSAg
ICBbQ0VSZWFjdGlvbnMsIE1heVRocm93TGVnYWN5RXhjZXB0aW9uXSBFbGVtZW50IGluc2VydEFk
amFjZW50RWxlbWVudChET01TdHJpbmcgd2hlcmUsIEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW0NF
UmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gdm9pZCBpbnNlcnRBZGphY2VudEhU
TUwoRE9NU3RyaW5nIHdoZXJlLCBET01TdHJpbmcgaHRtbCk7Ci0gICAgW01heVRocm93TGVnYWN5
RXhjZXB0aW9uXSB2b2lkIGluc2VydEFkamFjZW50VGV4dChET01TdHJpbmcgd2hlcmUsIERPTVN0
cmluZyB0ZXh0KTsKKyAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSBFbGVtZW50
IGluc2VydEFkamFjZW50RWxlbWVudChET01TdHJpbmcgd2hlcmUsIEVsZW1lbnQgZWxlbWVudCk7
CisgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBpbnNlcnRBZGphY2Vu
dEhUTUwoRE9NU3RyaW5nIHdoZXJlLCBET01TdHJpbmcgaHRtbCk7CisgICAgW01heVRocm93RXhj
ZXB0aW9uXSB2b2lkIGluc2VydEFkamFjZW50VGV4dChET01TdHJpbmcgd2hlcmUsIERPTVN0cmlu
ZyB0ZXh0KTsKIAogICAgIFtDb25kaXRpb25hbD1QT0lOVEVSX0xPQ0tdIHZvaWQgcmVxdWVzdFBv
aW50ZXJMb2NrKCk7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgIFtDb25kaXRpb25hbD1DU1Nf
UkVHSU9OU10gc2VxdWVuY2U8UmFuZ2U+IHdlYmtpdEdldFJlZ2lvbkZsb3dSYW5nZXMoKTsKIAog
ICAgIC8vIFNoYWRvdyBET00gQVBJCi0gICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBN
YXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gU2hhZG93Um9vdCBhdHRhY2hTaGFkb3coU2hhZG93Um9v
dEluaXQgaW5pdCk7CisgICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBNYXlUaHJvd0V4
Y2VwdGlvbl0gU2hhZG93Um9vdCBhdHRhY2hTaGFkb3coU2hhZG93Um9vdEluaXQgaW5pdCk7CiAg
ICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBJbXBsZW1lbnRlZEFzPXNoYWRvd1Jvb3RG
b3JCaW5kaW5ncywgQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTaGFk
b3dSb290IHNoYWRvd1Jvb3Q7CiAgICAgW0NFUmVhY3Rpb25zLCBFbmFibGVkQXRSdW50aW1lPVNo
YWRvd0RPTSwgUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBzbG90OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9OYW1lZE5vZGVNYXAuY3BwCmluZGV4IGRmZDEwOTk5NDJjMDg4ZjRkMGU3NjdjYTQ4ZmJjZjhk
MTk0OGEzNWYuLmJjZmEyMjdhNzIxMWM5ZjA3ZDQ4N2MzYjYxYzBhYjZhOTU5OWQyOGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAi
TmFtZWROb2RlTWFwLmgiCiAKICNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgpAQCAtNTUsNTUgKzU0LDUwIEBAIFJlZlB0cjxBdHRy
PiBOYW1lZE5vZGVNYXA6OmdldE5hbWVkSXRlbU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNw
YWNlVVJJLCBjb25zCiAgICAgcmV0dXJuIG1fZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlTlMobmFt
ZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwogfQogCi1SZWZQdHI8QXR0cj4gTmFtZWROb2RlTWFwOjpy
ZW1vdmVOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKK0V4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0o
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewotICAgIHVuc2lnbmVkIGluZGV4ID0gbV9lbGVt
ZW50Lmhhc0F0dHJpYnV0ZXMoKSA/IG1fZWxlbWVudC5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUo
bmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZShtX2VsZW1lbnQpKSA6IEVsZW1lbnREYXRh
OjphdHRyaWJ1dGVOb3RGb3VuZDsKLSAgICBpZiAoaW5kZXggPT0gRWxlbWVudERhdGE6OmF0dHJp
YnV0ZU5vdEZvdW5kKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlmICghbV9lbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICBhdXRvIGlu
ZGV4ID0gbV9lbGVtZW50LmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShuYW1lLCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKG1fZWxlbWVudCkpOworICAgIGlmIChpbmRleCA9PSBFbGVtZW50RGF0
YTo6YXR0cmlidXRlTm90Rm91bmQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9V
TkRfRVJSIH07CiAgICAgcmV0dXJuIG1fZWxlbWVudC5kZXRhY2hBdHRyaWJ1dGUoaW5kZXgpOwog
fQogCi1WZWN0b3I8U3RyaW5nPiBOYW1lZE5vZGVNYXA6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KQorVmVjdG9yPFN0cmluZz4gTmFtZWROb2RlTWFwOjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkg
Y29uc3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IG1fZWxlbWVudC5nZXRBdHRyaWJ1
dGVOYW1lcygpOwogICAgIGlmIChpczxIVE1MRWxlbWVudD4obV9lbGVtZW50KSAmJiBpczxIVE1M
RG9jdW1lbnQ+KG1fZWxlbWVudC5kb2N1bWVudCgpKSkgewogICAgICAgICBuYW1lcy5yZW1vdmVB
bGxNYXRjaGluZyhbXShTdHJpbmcmIG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBuYW1lLmNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgIT0gbmFtZTsKKyAgICAgICAgICAgIGZvciAoYXV0byBj
aGFyYWN0ZXIgOiBTdHJpbmdWaWV3IHsgbmFtZSB9LmNvZGVVbml0cygpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXIpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfSk7CiAgICAgfQogICAgIHJldHVybiBuYW1lczsKIH0KIAotUmVmUHRyPEF0dHI+IE5h
bWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
K0V4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW1OUyhj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bE5hbWUpCiB7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygp
ID8gbV9lbGVtZW50LmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpIDogRWxlbWVudERhdGE6OmF0dHJpYnV0ZU5v
dEZvdW5kOwotICAgIGlmIChpbmRleCA9PSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQp
IHsKLSAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9CisgICAgaWYgKCFtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygpKQorICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgIGF1dG8gaW5kZXggPSBtX2VsZW1l
bnQuZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKFF1YWxpZmllZE5hbWUgeyBudWxsQXRvbSwgbG9j
YWxOYW1lLCBuYW1lc3BhY2VVUkkgfSk7CisgICAgaWYgKGluZGV4ID09IEVsZW1lbnREYXRhOjph
dHRyaWJ1dGVOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9F
UlIgfTsKICAgICByZXR1cm4gbV9lbGVtZW50LmRldGFjaEF0dHJpYnV0ZShpbmRleCk7CiB9CiAK
LVJlZlB0cjxBdHRyPiBOYW1lZE5vZGVNYXA6OnNldE5hbWVkSXRlbShBdHRyJiBhdHRyLCBFeGNl
cHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPFJlZlB0cjxBdHRyPj4gTmFtZWROb2RlTWFwOjpz
ZXROYW1lZEl0ZW0oQXR0ciYgYXR0cikKIHsKLSAgICByZXR1cm4gbV9lbGVtZW50LnNldEF0dHJp
YnV0ZU5vZGUoYXR0ciwgZWMpOwotfQotCi1SZWZQdHI8QXR0cj4gTmFtZWROb2RlTWFwOjpzZXRO
YW1lZEl0ZW0oTm9kZSYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFpczxB
dHRyPihub2RlKSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBzZXROYW1lZEl0ZW0oZG93bmNhc3Q8QXR0cj4obm9k
ZSksIGVjKTsKKyAgICByZXR1cm4gbV9lbGVtZW50LnNldEF0dHJpYnV0ZU5vZGUoYXR0cik7CiB9
CiAKIFJlZlB0cjxBdHRyPiBOYW1lZE5vZGVNYXA6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0
CiB7CiAgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIG1fZWxlbWVudC5lbnN1cmVBdHRyKG1fZWxl
bWVudC5hdHRyaWJ1dGVBdChpbmRleCkubmFtZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9k
ZU1hcC5oCmluZGV4IDBiNTY3ZTg4N2RlZDAwMzJhMGJmNTBmZTc4ZmZlODA4NTNmMjEwYjIuLjJj
YjU5NjQ0OTk4MDY3Mzc5Mzg4NGEzYjBhODQ0YjU5ZDNjOGMxYjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFt
ZWROb2RlTWFwLmgKQEAgLTI0LDM5ICsyNCwzNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUgIlNjcmlwdFdy
YXBwYWJsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEF0dHI7CitjbGFzcyBF
bGVtZW50OworCiBjbGFzcyBOYW1lZE5vZGVNYXAgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBmcmllbmQgY2xhc3MgRWxlbWVudDsK
IHB1YmxpYzoKICAgICBleHBsaWNpdCBOYW1lZE5vZGVNYXAoRWxlbWVudCYgZWxlbWVudCkKICAg
ICAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICB7Ci0gICAgICAgIC8vIE9ubHkgc3VwcG9y
dHMgTmFtZWROb2RlTWFwcyB3aXRoIEVsZW1lbnQgYXNzb2NpYXRlZCwgRG9jdW1lbnRUeXBlLmVu
dGl0aWVzIGFuZCBEb2N1bWVudFR5cGUubm90YXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4K
ICAgICB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZigpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZGVyZWYoKTsKIAotICAgIC8vIFB1YmxpYyBET00gaW50ZXJmYWNlLgotCisgICAg
V0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgUmVmUHRyPEF0dHI+IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIFdFQkNPUkVf
RVhQT1JUIFJlZlB0cjxBdHRyPiBnZXROYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJikgY29u
c3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEF0dHI+IHJlbW92ZU5hbWVkSXRlbShjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBWZWN0b3I8U3RyaW5n
PiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
QXR0cj4gZ2V0TmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBS
ZWZQdHI8QXR0cj4gcmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0K
LSAgICBSZWZQdHI8QXR0cj4gc2V0TmFtZWRJdGVtKEF0dHImLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEF0dHI+IHNldE5hbWVkSXRlbShOb2RlJiwgRXhjZXB0
aW9uQ29kZSYpOyAvLyBmb3IgbGVnYWN5IGJpbmRpbmdzLgorICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPFJlZlB0cjxBdHRyPj4gc2V0TmFtZWRJdGVtKEF0dHImKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBFeGNlcHRpb25PcjxSZWY8QXR0cj4+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxBdHRy
Pj4gcmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0
cjxBdHRyPiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRQcm9w
ZXJ0eU5hbWVzKCkgY29uc3Q7CiAKLSAgICBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9lbGVtZW50OyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIHsgcmV0dXJuIG1fZWxlbWVu
dDsgfQogCiBwcml2YXRlOgogICAgIEVsZW1lbnQmIG1fZWxlbWVudDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL05h
bWVkTm9kZU1hcC5pZGwKaW5kZXggZmRkMDU5OTZlNTQzYmM2ODM3MDZlM2FjM2I4NDYwZDhhOGNk
NzUwNS4uODNkMjhlN2ExMjYyNzIyZmYwZTFiMmFiMTY4MzMyZDc1ZGFkMzM5MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL05hbWVkTm9kZU1hcC5pZGwKQEAgLTI0LDEyICsyNCwxMSBAQAogICAgIEltcGxlbWVu
dGF0aW9uTGFja3NWVGFibGUsCiBdIGludGVyZmFjZSBOYW1lZE5vZGVNYXAgewogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLQotICAgIGdldHRlciBBdHRyPyBn
ZXROYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwotICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dM
ZWdhY3lFeGNlcHRpb25dIEF0dHI/IHNldE5hbWVkSXRlbShBdHRyIGF0dHIpOwotICAgIFtDRVJl
YWN0aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEF0dHIgcmVtb3ZlTmFtZWRJdGVtKERP
TVN0cmluZyBuYW1lKTsKICAgICBnZXR0ZXIgQXR0cj8gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4
KTsKKyAgICBnZXR0ZXIgQXR0cj8gZ2V0TmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKICAgICBB
dHRyPyBnZXROYW1lZEl0ZW1OUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxv
Y2FsTmFtZSk7Ci0gICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbiwgSW1w
bGVtZW50ZWRBcz1zZXROYW1lZEl0ZW1dIEF0dHI/IHNldE5hbWVkSXRlbU5TKEF0dHIgYXR0cik7
Ci0gICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gQXR0ciByZW1vdmVO
YW1lZEl0ZW1OUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7
CisgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gQXR0cj8gc2V0TmFtZWRJdGVt
KEF0dHIgYXR0cik7CisgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbiwgSW1wbGVt
ZW50ZWRBcz1zZXROYW1lZEl0ZW1dIEF0dHI/IHNldE5hbWVkSXRlbU5TKEF0dHIgYXR0cik7Cisg
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gQXR0ciByZW1vdmVOYW1lZEl0ZW0o
RE9NU3RyaW5nIG5hbWUpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIEF0
dHIgcmVtb3ZlTmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBs
b2NhbE5hbWUpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggYThlYzBm
ZTFhODdiNTJhNTNjYzQxOWEzNmYxNmJmZjdhNWZkNzg4Ni4uYjMwZDc2YWRmZjIzYzI4ZTk3ODBi
NzE2ODA5ODgzZTVlMjRiODUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAg
LTU4NCwxNiArNTg0LDE0IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxFbGVtZW50OjpzZXRPdXRl
clRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0
ID8gbmV4dC0+cHJldmlvdXNTaWJsaW5nKCkgOiBudWxscHRyOwogICAgIGlmIChpczxUZXh0Pihu
b2RlLmdldCgpKSkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgbWVy
Z2VXaXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpub2RlKSwgZWMpOwotICAgICAgICBp
ZiAoZWMpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKm5vZGUpKTsK
KyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KICAgICBpZiAoaXM8VGV4dD4ocHJldi5n
ZXQoKSkpIHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIG1lcmdlV2l0
aE5leHRUZXh0Tm9kZShkb3duY2FzdDxUZXh0PigqcHJldiksIGVjKTsKLSAgICAgICAgaWYgKGVj
KQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgICAgIGF1dG8gcmVz
dWx0ID0gbWVyZ2VXaXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpwcmV2KSk7CisgICAg
ICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKaW5kZXggZTliODVhOWRlM2ZmNjIzNjkyMmYxYThi
NTk5MzFkZTY2M2E4Y2NmMS4uMmMwY2YzYjUzN2RhNjE2NjE0Y2Y5ODZiMWY2ZTc4YzAxOTZlNjAw
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKQEAgLTEzOCw3ICsxMzgs
OSBAQCBwdWJsaWM6CiAKICAgICBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRl
CiAgICAgewotICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUs
IGVjKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25h
bWUsIG1fdmFsdWUpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNzYsMTYgKzE3OCwyMCBAQCBwdWJsaWM6CiAKICAgICBi
b29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAo
bV9oYWRBdHRyaWJ1dGUpCi0gICAgICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25h
bWUsIG1fb2xkVmFsdWUsIGVjKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9oYWRBdHRy
aWJ1dGUpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbGVtZW50LT5zZXRBdHRyaWJ1
dGUobV9uYW1lLCBtX29sZFZhbHVlKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNv
ZGUoKTsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2VsZW1lbnQtPnJlbW92ZUF0dHJp
YnV0ZShtX25hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBib29sIHJl
ZG8oRXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX2VsZW1lbnQt
PnNldEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUsIGVjKTsKKyAgICAgICAgYXV0byByZXN1bHQg
PSBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUpOworICAgICAgICBpZiAo
cmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4
Y2VwdGlvbigpLmNvZGUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBjZTU2YmVj
ZTNjYjZmNzU0MmRjNTIwZmQzZmMzNGY0NmMyMzliODE1Li41ZTE1Y2M1MTAyY2M2MWI3OTM2ZDZk
NTFlYzE5ZjZlMzIxNTg1MTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHAKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIFJldmFsaWRhdGVTdHls
ZUF0dHJpYnV0ZVRhc2s6OnRpbWVyRmlyZWQoKQogICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKIH0K
IAotU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGNvbnN0IEV4Y2VwdGlv
bkNvZGUmIGVjKQorU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKEV4Y2Vw
dGlvbkNvZGUgZWMpCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CkBAIC0yMDcsNiArMjA3LDExIEBAIFN0cmluZyBJbnNw
ZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAorU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0
b0Vycm9yU3RyaW5nKEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIHsgZXhjZXB0aW9uLmNvZGUoKSB9Lm5hbWU7Cit9CisKIEluc3Bl
Y3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChXZWJBZ2VudENvbnRleHQmIGNvbnRleHQs
IEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5
KQogICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiRE9NIiksIGNvbnRleHQp
CiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihjb250ZXh0LmluamVjdGVkU2NyaXB0TWFu
YWdlcikKQEAgLTY2MCwxMSArNjY1LDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0
dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVuCiAgICAg
aWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+
IHBhcnNlZEVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudChlbGVtZW50LT5kb2N1bWVudCgpLCBz
cGFuVGFnKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBwYXJzZWRFbGVtZW50Lmdl
dCgpLT5zZXRJbm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+IiwgZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcoZWMpOworICAg
IGF1dG8gcGFyc2VkRWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KGVsZW1lbnQtPmRvY3VtZW50
KCksIHNwYW5UYWcpOworICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VkRWxlbWVudC5nZXQoKS5zZXRJ
bm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+Iik7CisgICAgaWYgKHJlc3VsdC5o
YXNFeGNlcHRpb24oKSkgeworICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggZDdiNmQxNTM4
YTRiY2VjMDYxMmQyYzMyMDBkOTVhZGVlN2RiMzUzOS4uYTI0OGRlYzFkM2FlMThjNjc2ZjM4MWNl
YzZmOTJmOTZlYTRmODY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmgKQEAgLTYwLDYgKzYwLDcgQEAgY2xhc3MgRE9NRWRpdG9yOwogY2xhc3MgRG9j
dW1lbnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7CitjbGFzcyBFeGNlcHRpb247CiBj
bGFzcyBGbG9hdFF1YWQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3Rvckhpc3Rvcnk7CkBA
IC0xMDcsNyArMTA4LDggQEAgcHVibGljOgogICAgIEluc3BlY3RvckRPTUFnZW50KFdlYkFnZW50
Q29udGV4dCYsIEluc3BlY3RvclBhZ2VBZ2VudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICB2
aXJ0dWFsIH5JbnNwZWN0b3JET01BZ2VudCgpOwogCi0gICAgc3RhdGljIFN0cmluZyB0b0Vycm9y
U3RyaW5nKGNvbnN0IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgU3RyaW5nIHRvRXJyb3JT
dHJpbmcoRXhjZXB0aW9uQ29kZSk7CisgICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5nKEV4
Y2VwdGlvbiYmKTsKIAogICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3Zl
cnJpZGU7CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDg4MzhjOTM5NGIyNTdmNjhiN2E0NGYw
NzM3NTRmNjFjYTU0ZmU2ZjQuLmMyYTk1M2Y0ZDNmZTYwMzE2ZjA1ZDQxMzk3MDY1ODU0M2QyYTIz
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5jcHAKQEAgLTEzMDEsMTMgKzEzMDEsMTUgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGU6OnNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwKIAog
ICAgIHsKICAgICAgICAgSW5zcGVjdG9yQ1NTQWdlbnQ6OklubGluZVN0eWxlT3ZlcnJpZGVTY29w
ZSBvdmVycmlkZVNjb3BlKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIG1fZWxlbWVu
dC0+c2V0QXR0cmlidXRlKCJzdHlsZSIsIHRleHQsIGVjKTsKKyAgICAgICAgbV9lbGVtZW50LT5z
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzdHlsZUF0dHIsIHRleHQpOwogICAgIH0KIAogICAgIG1f
c3R5bGVUZXh0ID0gdGV4dDsKICAgICBtX2lzU3R5bGVUZXh0VmFsaWQgPSB0cnVlOwogICAgIG1f
cnVsZVNvdXJjZURhdGEgPSBudWxscHRyOwotICAgIHJldHVybiAhZWM7CisKKyAgICBlYyA9IDA7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c2l6ZV90Pj4g
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpsaW5lRW5kaW5ncygpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggOGJjOTFiNTNkOWFmOGQ3ZmEyYWRh
MzAyY2ZjNmY3OGExMDljY2Y1YS4uYzVlNGZkNDg4NWI3NWJiYzFkYzM0MjhjMGM1YWZjNjE5ZTVl
Mjk3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNzgwLDMyICs3ODAs
MTEgQEAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gSW50ZXJuYWxzOjpjb21w
dXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8KICAgICByZXR1cm4gQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uOjpjcmVhdGUoZWxlbWVudCwgYWxsb3dWaXNpdGVkU3R5bGUpOwogfQogCi1F
eGNlcHRpb25PcjxOb2RlKj4gSW50ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KEVsZW1lbnQmIGhv
c3QpCi17Ci0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBob3N0LnNoYWRvd1Jvb3Qo
KSkKLSAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBhdXRvIHJlc3VsdCA9IGhvc3QuY3JlYXRlU2hhZG93Um9vdChlYyk7Ci0gICAgaWYg
KGVjKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCiBOb2RlKiBJbnRlcm5hbHM6OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoRWxlbWVu
dCYgaG9zdCkKIHsKICAgICByZXR1cm4gJmhvc3QuZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgp
OwogfQogCi1FeGNlcHRpb25PcjxOb2RlKj4gSW50ZXJuYWxzOjpjcmVhdGVTaGFkb3dSb290KEVs
ZW1lbnQmIGhvc3QpCi17Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byByZXN1
bHQgPSBob3N0LmNyZWF0ZVNoYWRvd1Jvb3QoZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IGVjIH07Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogTm9kZSogSW50
ZXJuYWxzOjpzaGFkb3dSb290KEVsZW1lbnQmIGhvc3QpCiB7CiAgICAgcmV0dXJuIGhvc3Quc2hh
ZG93Um9vdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDRhNjZjNDY5
NWY2ODFkYWM5OGVlNjA5YzM5NmZkZGI3ZWYyZDg0YzguLmE2ZmUzNGNjNjkxMWMxYWVjZDk0ZDA5
MDRjY2ZkYTNjYmIxMmE2NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAg
LTEwMCw5ICsxMDAsNyBAQCBlbnVtIFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gewogCiAg
ICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8o
RWxlbWVudCBlbGVtZW50KTsKIAotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gTm9kZSBlbnN1cmVT
aGFkb3dSb290KEVsZW1lbnQgaG9zdCk7CiAgICAgTm9kZSBlbnN1cmVVc2VyQWdlbnRTaGFkb3dS
b290KEVsZW1lbnQgaG9zdCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBOb2RlIGNyZWF0ZVNo
YWRvd1Jvb3QoRWxlbWVudCBob3N0KTsKICAgICBOb2RlIHNoYWRvd1Jvb3QoRWxlbWVudCBob3N0
KTsKIAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRE9NU3RyaW5nIHNoYWRvd1Jvb3RUeXBlKE5v
ZGUgcm9vdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3Vt
ZW50UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3Vt
ZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggNTU0MjVkOTUyNGVjZDBlODBkZTA3YmE5ZGQzNDdj
ZTc0ZGMyMGEzMy4uYThmOTVjZTU1NDI0YzUyNmNjNTU4NDQwNTU1Y2Q2Y2YwZGRkYzY5YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnht
bDIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJM
aWJ4bWwyLmNwcApAQCAtNzM5LDExICs3MzksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGhhbmRs
ZU5hbWVzcGFjZUF0dHJpYnV0ZXMoVmVjdG9yPEF0dHJpYnV0ZT4mIHByZWZpeGVkQXR0cmlidXQK
ICAgICAgICAgaWYgKG5hbWVzcGFjZXNbaV0ucHJlZml4KQogICAgICAgICAgICAgbmFtZXNwYWNl
UU5hbWUgPSAieG1sbnM6IiArIHRvU3RyaW5nKG5hbWVzcGFjZXNbaV0ucHJlZml4KTsKIAotICAg
ICAgICBRdWFsaWZpZWROYW1lIHBhcnNlZE5hbWUgPSBhbnlOYW1lOwotICAgICAgICBpZiAoIUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlTmFtZShwYXJzZWROYW1lLCBYTUxOU05hbWVzOjp4bWxuc05h
bWVzcGFjZVVSSSwgbmFtZXNwYWNlUU5hbWUsIGVjKSkKKyAgICAgICAgYXV0byByZXN1bHQgPSBF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZU5hbWUoWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkks
IG5hbWVzcGFjZVFOYW1lKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewor
ICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHByZWZpeGVkQXR0cmlidXRlcy5hcHBl
bmQoQXR0cmlidXRlKHBhcnNlZE5hbWUsIG5hbWVzcGFjZVVSSSkpOworICAgICAgICB9CisKKyAg
ICAgICAgcHJlZml4ZWRBdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUocmVzdWx0LnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpLCBuYW1lc3BhY2VVUkkpKTsKICAgICB9CiB9CiAKQEAgLTc2NiwxMSArNzY4
LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhWZWN0b3I8
QXR0cmlidXRlPiYgcHJlZml4ZWRBdHRyaWJ1dGVzCiAgICAgICAgIEF0b21pY1N0cmluZyBhdHRy
VVJJID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyBudWxsQXRvbSA6IHRvQXRvbWljU3RyaW5nKGF0
dHJpYnV0ZXNbaV0udXJpKTsKICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJRTmFtZSA9IGF0dHJQ
cmVmaXguaXNFbXB0eSgpID8gdG9BdG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS5sb2NhbG5hbWUp
IDogYXR0clByZWZpeCArICI6IiArIHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ubG9jYWxuYW1lKTsK
IAotICAgICAgICBRdWFsaWZpZWROYW1lIHBhcnNlZE5hbWUgPSBhbnlOYW1lOwotICAgICAgICBp
ZiAoIUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlTmFtZShwYXJzZWROYW1lLCBhdHRyVVJJLCBhdHRy
UU5hbWUsIGVjKSkKKyAgICAgICAgYXV0byByZXN1bHQgPSBFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZU5hbWUoYXR0clVSSSwgYXR0clFOYW1lKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRp
b24oKSkgeworICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUo
KTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIHByZWZpeGVkQXR0
cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKHBhcnNlZE5hbWUsIGF0dHJWYWx1ZSkpOworICAgICAg
ICBwcmVmaXhlZEF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShyZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCksIGF0dHJWYWx1ZSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvRE9NL0RPTUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NRWxl
bWVudC5tbQppbmRleCAyMmI0ZjllM2JhMDFlN2VmYWFiNjU2NjkzMGU4YjhjNDA4OGVlMzU0Li4z
M2E4YzI1ZWE0NGViM2QxZWY2YjRjYWVhY2MyZTYzODYzZTI2NzE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9ET00vRE9NRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9E
T00vRE9NRWxlbWVudC5tbQpAQCAtMTc3LDkgKzE3Nyw3IEBAIC0gKE5TU3RyaW5nICopaW5uZXJI
VE1MCiAtICh2b2lkKXNldElubmVySFRNTDooTlNTdHJpbmcgKiluZXdJbm5lckhUTUwKIHsKICAg
ICBKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgdW53cmFwKCpzZWxmKS5zZXRJbm5lckhUTUwobmV3SW5uZXJIVE1MLCBlYyk7Ci0gICAg
cmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5z
ZXRJbm5lckhUTUwobmV3SW5uZXJIVE1MKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopb3V0ZXJIVE1M
CkBAIC0xOTEsOSArMTg5LDcgQEAgLSAoTlNTdHJpbmcgKilvdXRlckhUTUwKIC0gKHZvaWQpc2V0
T3V0ZXJIVE1MOihOU1N0cmluZyAqKW5ld091dGVySFRNTAogewogICAgIEpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICB1bndyYXAoKnNl
bGYpLnNldE91dGVySFRNTChuZXdPdXRlckhUTUwsIGVjKTsKLSAgICByYWlzZU9uRE9NRXJyb3Io
ZWMpOworICAgIHJhaXNlT25ET01FcnJvcih1bndyYXAoKnNlbGYpLnNldE91dGVySFRNTChuZXdP
dXRlckhUTUwpKTsKIH0KIAogLSAoTlNTdHJpbmcgKiljbGFzc05hbWUKQEAgLTI4NSw5ICsyODEs
NyBAQCAtIChOU1N0cmluZyAqKWdldEF0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lCiAtICh2b2lk
KXNldEF0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlCiB7
CiAgICAgSlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIHVud3JhcCgqc2VsZikuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlLCBlYyk7Ci0g
ICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxm
KS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpKTsKIH0KIAogLSAodm9pZClyZW1vdmVBdHRyaWJ1
dGU6KE5TU3RyaW5nICopbmFtZQpAQCAtMzA3LDEwICszMDEsNyBAQCAtIChET01BdHRyICopc2V0
QXR0cmlidXRlTm9kZTooRE9NQXR0ciAqKW5ld0F0dHIKICAgICBKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgaWYgKCFuZXdBdHRyKQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2Vw
dGlvbigpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIERPTUF0dHIgKnJlc3VsdCA9
IGtpdCh1bndyYXAoKnNlbGYpLnNldEF0dHJpYnV0ZU5vZGUoKmNvcmUobmV3QXR0ciksIGVjKS5n
ZXQoKSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBraXQocmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZikuc2V0QXR0cmlidXRlTm9k
ZSgqY29yZShuZXdBdHRyKSkpLmdldCgpKTsKIH0KIAogLSAoRE9NQXR0ciAqKXJlbW92ZUF0dHJp
YnV0ZU5vZGU6KERPTUF0dHIgKilvbGRBdHRyCkBAIC0zMTgsMTAgKzMwOSw3IEBAIC0gKERPTUF0
dHIgKilyZW1vdmVBdHRyaWJ1dGVOb2RlOihET01BdHRyICopb2xkQXR0cgogICAgIEpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBpZiAoIW9sZEF0dHIpCiAgICAgICAgIHJhaXNlVHlw
ZUVycm9yRXhjZXB0aW9uKCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NQXR0
ciAqcmVzdWx0ID0ga2l0KHVud3JhcCgqc2VsZikucmVtb3ZlQXR0cmlidXRlTm9kZSgqY29yZShv
bGRBdHRyKSwgZWMpLmdldCgpKTsKLSAgICByYWlzZU9uRE9NRXJyb3IoZWMpOwotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIGtpdChyYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5y
ZW1vdmVBdHRyaWJ1dGVOb2RlKCpjb3JlKG9sZEF0dHIpKSkucHRyKCkpOwogfQogCiAtIChET01O
b2RlTGlzdCAqKWdldEVsZW1lbnRzQnlUYWdOYW1lOihOU1N0cmluZyAqKW5hbWUKQEAgLTM0Myw5
ICszMzEsNyBAQCAtIChOU1N0cmluZyAqKWdldEF0dHJpYnV0ZU5TOihOU1N0cmluZyAqKW5hbWVz
cGFjZVVSSSBsb2NhbE5hbWU6KE5TU3RyaW5nICopbG9jYQogLSAodm9pZClzZXRBdHRyaWJ1dGVO
UzooTlNTdHJpbmcgKiluYW1lc3BhY2VVUkkgcXVhbGlmaWVkTmFtZTooTlNTdHJpbmcgKilxdWFs
aWZpZWROYW1lIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlCiB7CiAgICAgSlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHVud3JhcCgqc2Vs
Zikuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSwgZWMp
OwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7CisgICAgcmFpc2VPbkRPTUVycm9yKHVud3JhcCgq
c2VsZikuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSkp
OwogfQogCiAtICh2b2lkKXJlbW92ZUF0dHJpYnV0ZU5TOihOU1N0cmluZyAqKW5hbWVzcGFjZVVS
SSBsb2NhbE5hbWU6KE5TU3RyaW5nICopbG9jYWxOYW1lCkBAIC0zNzUsMTAgKzM2MSw3IEBAIC0g
KERPTUF0dHIgKilzZXRBdHRyaWJ1dGVOb2RlTlM6KERPTUF0dHIgKiluZXdBdHRyCiAgICAgSlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGlmICghbmV3QXR0cikKICAgICAgICAgcmFp
c2VUeXBlRXJyb3JFeGNlcHRpb24oKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBE
T01BdHRyICpyZXN1bHQgPSBraXQodW53cmFwKCpzZWxmKS5zZXRBdHRyaWJ1dGVOb2RlTlMoKmNv
cmUobmV3QXR0ciksIGVjKS5nZXQoKSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBraXQocmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2Vs
Zikuc2V0QXR0cmlidXRlTm9kZU5TKCpjb3JlKG5ld0F0dHIpKSkuZ2V0KCkpOwogfQogCiAtIChC
T09MKWhhc0F0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lCkBAIC00MzksMjggKzQyMiwxOSBAQCAt
IChET01Ob2RlTGlzdCAqKWdldEVsZW1lbnRzQnlDbGFzc05hbWU6KE5TU3RyaW5nICopbmFtZQog
LSAoQk9PTCltYXRjaGVzOihOU1N0cmluZyAqKXNlbGVjdG9ycwogewogICAgIEpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBCT09MIHJl
c3VsdCA9IHVud3JhcCgqc2VsZikubWF0Y2hlcyhzZWxlY3RvcnMsIGVjKTsKLSAgICByYWlzZU9u
RE9NRXJyb3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJhaXNlT25ET01F
cnJvcih1bndyYXAoKnNlbGYpLm1hdGNoZXMoc2VsZWN0b3JzKSk7CiB9CiAKIC0gKERPTUVsZW1l
bnQgKiljbG9zZXN0OihOU1N0cmluZyAqKXNlbGVjdG9ycwogewogICAgIEpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01FbGVtZW50
ICpyZXN1bHQgPSBraXQodW53cmFwKCpzZWxmKS5jbG9zZXN0KHNlbGVjdG9ycywgZWMpKTsKLSAg
ICByYWlzZU9uRE9NRXJyb3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGtp
dChyYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5jbG9zZXN0KHNlbGVjdG9ycykpKTsKIH0K
IAogLSAoQk9PTCl3ZWJraXRNYXRjaGVzU2VsZWN0b3I6KE5TU3RyaW5nICopc2VsZWN0b3JzCiB7
CiAgICAgSlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIEJPT0wgcmVzdWx0ID0gdW53cmFwKCpzZWxmKS5tYXRjaGVzKHNlbGVjdG9ycywg
ZWMpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4gcmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZikubWF0Y2hlcyhzZWxlY3RvcnMpKTsK
IH0KIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL0RPTS9ET01IVE1MRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01I
VE1MRWxlbWVudC5tbQppbmRleCBjMjY1ZDI1N2FhMzlmZjRjOGJkZGM4ZWFkNDdlOTgzNjlkZGUy
MzBmLi5hNDc2OTRjMjg3MjQxMWExYjUyNzU5NTBjODRjMzM0NGQzNjA2Y2YxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NSFRNTEVsZW1lbnQubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvRE9NL0RPTUhUTUxFbGVtZW50Lm1tCkBAIC0yMzUsMjYgKzIzNSwxOSBAQCAtIChE
T01FbGVtZW50ICopaW5zZXJ0QWRqYWNlbnRFbGVtZW50OihOU1N0cmluZyAqKXdoZXJlIGVsZW1l
bnQ6KERPTUVsZW1lbnQgKillbAogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9u
KCk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NRWxlbWVudCAq
cmVzdWx0ID0ga2l0KFdURjo6Z2V0UHRyKElNUEwtPmluc2VydEFkamFjZW50RWxlbWVudCh3aGVy
ZSwgKmNvcmUoZWxlbWVudCksIGVjKSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJTVBMLT5pbnNl
cnRBZGphY2VudEVsZW1lbnQod2hlcmUsICpjb3JlKGVsZW1lbnQpKSkpOwogfQogCiAtICh2b2lk
KWluc2VydEFkamFjZW50SFRNTDooTlNTdHJpbmcgKil3aGVyZSBodG1sOihOU1N0cmluZyAqKWh0
bWwKIHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSU1QTC0+aW5zZXJ0QWRqYWNlbnRIVE1M
KHdoZXJlLCBodG1sLCBlYyk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9u
RE9NRXJyb3IoSU1QTC0+aW5zZXJ0QWRqYWNlbnRIVE1MKHdoZXJlLCBodG1sKSk7CiB9CiAKIC0g
KHZvaWQpaW5zZXJ0QWRqYWNlbnRUZXh0OihOU1N0cmluZyAqKXdoZXJlIHRleHQ6KE5TU3RyaW5n
ICopdGV4dAogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBJTVBMLT5pbnNlcnRBZGphY2Vu
dFRleHQod2hlcmUsIHRleHQsIGVjKTsKLSAgICByYWlzZU9uRE9NRXJyb3IoZWMpOworICAgIHJh
aXNlT25ET01FcnJvcihJTVBMLT5pbnNlcnRBZGphY2VudFRleHQod2hlcmUsIHRleHQpKTsKIH0K
IAogLSAodm9pZCljbGljawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvRE9NL0RPTU5h
bWVkTm9kZU1hcC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01OYW1lZE5vZGVNYXAubW0K
aW5kZXggOGY5MTg0ZWQ4ZWYzNTAzNzFlNDFjMjU4YWZkOWZlNzkwODRmYjAxZC4uNWRkMzk1NjRk
ZDRmNGYyMzk2ZjM2YjcyNzkzNmQ4M2M1YTg1NjViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvRE9NL0RPTU5hbWVkTm9kZU1hcC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00v
RE9NTmFtZWROb2RlTWFwLm1tCkBAIC02OCwxOSArNjgsMTYgQEAgLSAoRE9NTm9kZSAqKXNldE5h
bWVkSXRlbTooRE9NTm9kZSAqKW5vZGUKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlv
bigpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIERPTU5vZGUgKnJl
c3VsdCA9IGtpdChXVEY6OmdldFB0cihJTVBMLT5zZXROYW1lZEl0ZW0oKmNvcmUobm9kZSksIGVj
KSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBh
dXRvJiBjb3JlTm9kZSA9ICpjb3JlKG5vZGUpOworICAgIGlmICghaXM8V2ViQ29yZTo6QXR0cj4o
Y29yZU5vZGUpKQorICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigpOworICAgIHJldHVy
biBraXQocmFpc2VPbkRPTUVycm9yKElNUEwtPnNldE5hbWVkSXRlbShkb3duY2FzdDxXZWJDb3Jl
OjpBdHRyPihjb3JlTm9kZSkpKS5nZXQoKSk7CiB9CiAKIC0gKERPTU5vZGUgKilyZW1vdmVOYW1l
ZEl0ZW06KE5TU3RyaW5nICopbmFtZQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01O
b2RlICpyZXN1bHQgPSBraXQoV1RGOjpnZXRQdHIoSU1QTC0+cmVtb3ZlTmFtZWRJdGVtKG5hbWUs
IGVjKSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJTVBMLT5yZW1vdmVOYW1lZEl0ZW0obmFtZSkp
LnB0cigpKTsKIH0KIAogLSAoRE9NTm9kZSAqKWl0ZW06KHVuc2lnbmVkKWluZGV4CkBAIC05Nywy
MiArOTQsMTMgQEAgLSAoRE9NTm9kZSAqKWdldE5hbWVkSXRlbU5TOihOU1N0cmluZyAqKW5hbWVz
cGFjZVVSSSBsb2NhbE5hbWU6KE5TU3RyaW5nICopbG9jYWwKIAogLSAoRE9NTm9kZSAqKXNldE5h
bWVkSXRlbU5TOihET01Ob2RlICopbm9kZQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJhaXNlVHlwZUVycm9yRXhj
ZXB0aW9uKCk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NTm9k
ZSAqcmVzdWx0ID0ga2l0KFdURjo6Z2V0UHRyKElNUEwtPnNldE5hbWVkSXRlbSgqY29yZShub2Rl
KSwgZWMpKSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBbc2VsZiBzZXROYW1lZEl0ZW06bm9kZV07CiB9CiAKIC0gKERPTU5vZGUgKily
ZW1vdmVOYW1lZEl0ZW1OUzooTlNTdHJpbmcgKiluYW1lc3BhY2VVUkkgbG9jYWxOYW1lOihOU1N0
cmluZyAqKWxvY2FsTmFtZQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01Ob2RlICpy
ZXN1bHQgPSBraXQoV1RGOjpnZXRQdHIoSU1QTC0+cmVtb3ZlTmFtZWRJdGVtTlMobmFtZXNwYWNl
VVJJLCBsb2NhbE5hbWUsIGVjKSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJTVBMLT5yZW1vdmVO
YW1lZEl0ZW1OUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkpLnB0cigpKTsKIH0KIAogQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwIGIvU291cmNl
L1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCmluZGV4IGRiMTBmMGJiNTI5MGFkNTdlYzM2
ZGY1MjgyYjc0YzM2Y2NmMjRlNWEuLjAzOTg2NWYwZTJhNmNiZjExYmM1MDIwYzY0ODY5MWUwYTY0
MmFjYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJET01IVE1MQ2xhc3Nlcy5oIgogI2luY2x1ZGUgIldlYktpdEdyYXBoaWNz
LmgiCiAKKyNpbmNsdWRlIDxXZWJDb3JlL0F0dHIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0JTdHJp
bmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE9N
V2luZG93Lmg+CkBAIC0xMDcwLDkgKzEwNzEsOCBAQCBIUkVTVUxUIERPTUVsZW1lbnQ6OnNldEF0
dHJpYnV0ZShfSW5fIEJTVFIgbmFtZSwgX0luXyBCU1RSIHZhbHVlKQogCiAgICAgV1RGOjpTdHJp
bmcgbmFtZVN0cmluZyhuYW1lLCBTeXNTdHJpbmdMZW4obmFtZSkpOwogICAgIFdURjo6U3RyaW5n
IHZhbHVlU3RyaW5nKHZhbHVlLCBTeXNTdHJpbmdMZW4odmFsdWUpKTsKLSAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lU3Ry
aW5nLCB2YWx1ZVN0cmluZywgZWMpOwotICAgIHJldHVybiBlYyA/IEVfRkFJTCA6IFNfT0s7Cisg
ICAgYXV0byByZXN1bHQgPSBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lU3RyaW5nLCB2YWx1
ZVN0cmluZyk7CisgICAgcmV0dXJuIHJlc3VsdC5oYXNFeGNlcHRpb24oKSA/IEVfRkFJTCA6IFNf
T0s7CiB9CiAgICAgCiBIUkVTVUxUIERPTUVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZShfSW5fIEJT
VFIgLypuYW1lKi8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nl
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAKaW5kZXggNDA4ZmE4
YTFlNGZjZDYxZDQyNGIzNTY0MWEzOGY2MGY5YWVlMTNhYi4uZDFmZWEzNWMyMzdkYWYzNjdkMDQ5
OGE4NDA2ODA1YjZkYzZkNDE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vRE9NSFRN
TENsYXNzZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcApA
QCAtNTE0LDggKzUxNCw3IEBAIEhSRVNVTFQgRE9NSFRNTEVsZW1lbnQ6OnNldElubmVySFRNTChf
SW5fIEJTVFIgaHRtbCkKICAgICBBU1NFUlQoaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkpOwog
ICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihtX2Vs
ZW1lbnQpOwogICAgIFN0cmluZyBodG1sU3RyaW5nKGh0bWwsIFN5c1N0cmluZ0xlbihodG1sKSk7
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaHRtbEVsZW1lbnQtPnNldElubmVySFRN
TChodG1sU3RyaW5nLCBlYyk7CisgICAgaHRtbEVsZW1lbnQtPnNldElubmVySFRNTChodG1sU3Ry
aW5nKTsKICAgICByZXR1cm4gU19PSzsKIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01FbGVtZW50LmNwcAppbmRleCA1MjZkMDU3ODcxMmM0YWUyNDlhMWM3
Yzc5YjFlNWQyMDdjNTljMGY2Li45NzEwYjA3ODBiMzNmYjA2OTEwZDQyNjYwMGMxODliODcxMWYz
MmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudC5jcHAK
QEAgLTYxMywxMCArNjEzLDkgQEAgdm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0
ZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSwKICAgICBXZWJDb3Jl
OjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CiAgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShjb252
ZXJ0ZWROYW1lLCBjb252ZXJ0ZWRWYWx1ZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGl0ZW0tPnNldEF0dHJpYnV0ZShjb252ZXJ0ZWROYW1lLCBjb252ZXJ0ZWRWYWx1ZSk7
CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29k
ZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0K
QEAgLTY1MCwxMyArNjQ5LDEzIEBAIFdlYktpdERPTUF0dHIqIHdlYmtpdF9kb21fZWxlbWVudF9z
ZXRfYXR0cmlidXRlX25vZGUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgV2ViCiAgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwogICAgIFdlYkNvcmU6OkVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV2ViQ29yZTo6QXR0ciogY29udmVy
dGVkTmV3QXR0ciA9IFdlYktpdDo6Y29yZShuZXdBdHRyKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6QXR0cj4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPnNldEF0dHJpYnV0ZU5vZGUoKmNvbnZlcnRlZE5ld0F0dHIsIGVj
KSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0QXR0cmlidXRlTm9k
ZSgqY29udmVydGVkTmV3QXR0cik7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5y
ZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNk
ZXNjLm5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChy
ZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkuZ2V0KCkpOwogfQogCiBXZWJLaXRET01BdHRyKiB3
ZWJraXRfZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZV9ub2RlKFdlYktpdERPTUVsZW1lbnQq
IHNlbGYsIFdlYktpdERPTUF0dHIqIG9sZEF0dHIsIEdFcnJvcioqIGVycm9yKQpAQCAtNjY3LDEz
ICs2NjYsMTMgQEAgV2ViS2l0RE9NQXR0ciogd2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRy
aWJ1dGVfbm9kZShXZWJLaXRET01FbGVtZW50KiBzZWxmLAogICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkF0dHIqIGNvbnZlcnRlZE9sZEF0dHIg
PSBXZWJLaXQ6OmNvcmUob2xkQXR0cik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5yZW1vdmVBdHRyaWJ1dGVOb2RlKCpjb252ZXJ0ZWRPbGRBdHRyLCBlYykpOwotICAg
IGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPnJlbW92ZUF0dHJpYnV0ZU5vZGUoKmNv
bnZlcnRlZE9sZEF0dHIpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhyZXN1bHQucmVsZWFz
ZUV4Y2VwdGlvbigpLmNvZGUoKSk7CiAgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQocmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLnB0cigpKTsKIH0KIAogV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24qIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfYXNfaHRtbF9j
b2xsZWN0aW9uKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQpAQCAt
NzIwLDEwICs3MTksOSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25z
KFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYQogICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VV
UkkpOwogICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFF1YWxpZmllZE5hbWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgocXVhbGlmaWVkTmFtZSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZU5TKGNvbnZlcnRlZE5hbWVzcGFj
ZVVSSSwgY29udmVydGVkUXVhbGlmaWVkTmFtZSwgY29udmVydGVkVmFsdWUsIGVjKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgYXV0byByZXN1bHQgPSBpdGVtLT5zZXRBdHRyaWJ1dGVOUyhjb252ZXJ0ZWRO
YW1lc3BhY2VVUkksIGNvbnZlcnRlZFF1YWxpZmllZE5hbWUsIGNvbnZlcnRlZFZhbHVlKTsKKyAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkp
OwogICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CiAgICAgfQogfQpAQCAt
Nzc0LDEzICs3NzIsMTIgQEAgV2ViS2l0RE9NQXR0ciogd2Via2l0X2RvbV9lbGVtZW50X3NldF9h
dHRyaWJ1dGVfbm9kZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxmLAogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKICAgICBXZWJDb3JlOjpFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkF0dHIqIGNvbnZlcnRlZE5l
d0F0dHIgPSBXZWJLaXQ6OmNvcmUobmV3QXR0cik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5zZXRBdHRyaWJ1dGVOb2RlTlMoKmNvbnZlcnRlZE5ld0F0dHIsIGVjKSk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0QXR0cmlidXRlTm9kZU5T
KCpjb252ZXJ0ZWROZXdBdHRyKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rl
c2MubmFtZSk7CiAgICAgfQotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
LmdldCgpKTsKIH0KIAogZ2Jvb2xlYW4gd2Via2l0X2RvbV9lbGVtZW50X2hhc19hdHRyaWJ1dGUo
V2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCkBAIC04NzQsMTMgKzg3
MSwxMyBAQCBnYm9vbGVhbiB3ZWJraXRfZG9tX2VsZW1lbnRfbWF0Y2hlcyhXZWJLaXRET01FbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0bwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KCFlcnJvciB8fCAhKmVycm9yLCBGQUxTRSk7CiAgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTZWxlY3RvcnMg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2VsZWN0b3JzKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5tYXRjaGVzKGNvbnZl
cnRlZFNlbGVjdG9ycywgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0t
Pm1hdGNoZXMoY29udmVydGVkU2VsZWN0b3JzKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
cmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5j
b2RlLCBlY2Rlc2MubmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogfQog
CiBXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2VsZW1lbnRfY2xvc2VzdChXZWJLaXRET01F
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcikKQEAg
LTg5MSwzMCArODg4LDE4IEBAIFdlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZWxlbWVudF9j
bG9zZXN0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyCiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwogICAgIFdlYkNvcmU6OkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2Vs
ZWN0b3JzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7Ci0gICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jbG9zZXN0KGNvbnZlcnRlZFNlbGVjdG9ycywg
ZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgYXV0byByZXN1bHQgPSBpdGVtLT5jbG9zZXN0KGNvbnZl
cnRlZFNlbGVjdG9ycyk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1bHQu
cmVsZWFzZVJldHVyblZhbHVlKCkpOwogfQogCiBnYm9vbGVhbiB3ZWJraXRfZG9tX2VsZW1lbnRf
d2Via2l0X21hdGNoZXNfc2VsZWN0b3IoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHNlbGVjdG9ycywgR0Vycm9yKiogZXJyb3IpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRUxFTUVOVChzZWxmKSwgRkFMU0UpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGVj
dG9ycywgRkFMU0UpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9y
LCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTZWxlY3RvcnMgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgoc2VsZWN0b3JzKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5tYXRjaGVzKGNvbnZlcnRlZFNlbGVjdG9ycywgZWMp
OwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwot
ICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB3ZWJraXRfZG9tX2VsZW1lbnRf
bWF0Y2hlcyhzZWxmLCBzZWxlY3RvcnMsIGVycm9yKTsKIH0KIAogdm9pZCB3ZWJraXRfZG9tX2Vs
ZW1lbnRfd2Via2l0X3JlcXVlc3RfZnVsbHNjcmVlbihXZWJLaXRET01FbGVtZW50KiBzZWxmKQpA
QCAtOTM1LDEzICs5MjAsMTMgQEAgV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVtZW50
X2luc2VydF9hZGphY2VudF9lbGVtZW50KFdlYktpdERPTUVsZW1lbnQqIHMKICAgICBXZWJDb3Jl
OjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFdoZXJlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHdoZXJlKTsKICAgICBXZWJDb3Jl
OjpFbGVtZW50KiBjb252ZXJ0ZWRFbGVtZW50ID0gV2ViS2l0Ojpjb3JlKGVsZW1lbnQpOwotICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVt
ZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW5zZXJ0QWRqYWNlbnRFbGVt
ZW50KGNvbnZlcnRlZFdoZXJlLCAqY29udmVydGVkRWxlbWVudCwgZWMpKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7
CisgICAgYXV0byByZXN1bHQgPSBpdGVtLT5pbnNlcnRBZGphY2VudEVsZW1lbnQoY29udmVydGVk
V2hlcmUsICpjb252ZXJ0ZWRFbGVtZW50KTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigp
KSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
a2l0KHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CiB9CiAKIHZvaWQgd2Via2l0X2RvbV9l
bGVtZW50X2luc2VydF9hZGphY2VudF9odG1sKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB3aGVyZSwgY29uc3QgZ2NoYXIqIGh0bWwsIEdFcnJvcioqIGVycm9yKQpAQCAtOTU0
LDEwICs5MzksOSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfaHRt
bChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhcgogICAgIFdlYkNvcmU6OkVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
V2hlcmUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgod2hlcmUpOwogICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZEh0bWwgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoaHRtbCk7Ci0gICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+aW5zZXJ0QWRqYWNlbnRIVE1MKGNvbnZl
cnRlZFdoZXJlLCBjb252ZXJ0ZWRIdG1sLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVz
dWx0ID0gaXRlbS0+aW5zZXJ0QWRqYWNlbnRIVE1MKGNvbnZlcnRlZFdoZXJlLCBjb252ZXJ0ZWRI
dG1sKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CiAgICAg
fQogfQpAQCAtOTcyLDEwICs5NTYsOSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRf
YWRqYWNlbnRfdGV4dChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhcgogICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkV2hlcmUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgod2hlcmUpOwogICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFRleHQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodGV4dCk7Ci0g
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+aW5zZXJ0QWRqYWNl
bnRUZXh0KGNvbnZlcnRlZFdoZXJlLCBjb252ZXJ0ZWRUZXh0LCBlYyk7Ci0gICAgaWYgKGVjKSB7
Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwor
ICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+aW5zZXJ0QWRqYWNlbnRUZXh0KGNvbnZlcnRlZFdoZXJl
LCBjb252ZXJ0ZWRUZXh0KTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7CiAgICAgfQogfQpAQCAtMTI2MywxMCArMTI0Niw5IEBAIHZvaWQgd2Via2l0X2RvbV9l
bGVtZW50X3NldF9pbm5lcl9odG1sKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1CiAgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CiAgICAgV2Vi
Q29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0SW5uZXJIVE1MKGNvbnZl
cnRlZFZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0
SW5uZXJIVE1MKGNvbnZlcnRlZFZhbHVlKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigp
KSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7CiAgICAgfQogfQpAQCAtMTI4OCwxMCArMTI3MCw5IEBAIHZvaWQgd2Vi
a2l0X2RvbV9lbGVtZW50X3NldF9vdXRlcl9odG1sKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1CiAgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7
CiAgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0T3V0ZXJI
VE1MKGNvbnZlcnRlZFZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0g
aXRlbS0+c2V0T3V0ZXJIVE1MKGNvbnZlcnRlZFZhbHVlKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1l
ZE5vZGVNYXAuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXAuY3BwCmluZGV4IDM1YzE3ZmUyZmQ2ZmNl
NmQ1YTVjYjM1YzlmZWRiNTM1NzY5NDViYjkuLjc3ZWY5MmFiNzQ1NDA5OWU5ZDliMjczYWFmNWNj
NTZiN2QzNjI4OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TU5hbWVkTm9kZU1hcC5jcHAKQEAgLTE1MiwxMyArMTUyLDEyIEBAIFdlYktpdERPTU5vZGUqIHdl
YmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfc2V0X25hbWVkX2l0ZW0oV2ViS2l0RE9NTmFtZWROb2Rl
TWFwKiBzCiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwog
ICAgIFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAg
ICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROb2RlID0gV2ViS2l0Ojpjb3JlKG5vZGUpOwotICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxXZWJDb3JlOjpOb2Rl
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2V0TmFtZWRJdGVtKCpjb252ZXJ0
ZWROb2RlLCBlYykpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPnNldE5h
bWVkSXRlbSgqY29udmVydGVkTm9kZSk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3Vs
dC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOwogICAgIH0KLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3Vs
dC5nZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFs
dWUoKS5nZXQoKSk7CiB9CiAKIFdlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9t
YXBfcmVtb3ZlX25hbWVkX2l0ZW0oV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBjb25zdCBn
Y2hhciogbmFtZSwgR0Vycm9yKiogZXJyb3IpCkBAIC0xNjksMTMgKzE2OCwxMiBAQCBXZWJLaXRE
T01Ob2RlKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3JlbW92ZV9uYW1lZF9pdGVtKFdlYktp
dERPTU5hbWVkTm9kZU1hcAogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yLCAwKTsKICAgICBXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOChuYW1lKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJlbW92
ZU5hbWVkSXRlbShjb252ZXJ0ZWROYW1lLCBlYykpOwotICAgIGlmIChlYykgewotICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGl0ZW0tPnJlbW92ZU5hbWVkSXRlbShjb252ZXJ0ZWROYW1lKTsKKyAgICBpZiAocmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CiAgICAgfQotICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQocmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLnB0cigpKTsKIH0KIAogV2ViS2l0RE9NTm9kZSogd2Vi
a2l0X2RvbV9uYW1lZF9ub2RlX21hcF9pdGVtKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZiwg
Z3Vsb25nIGluZGV4KQpAQCAtMjAyLDE5ICsyMDAsNyBAQCBXZWJLaXRET01Ob2RlKiB3ZWJraXRf
ZG9tX25hbWVkX25vZGVfbWFwX2dldF9uYW1lZF9pdGVtX25zKFdlYktpdERPTU5hbWVkTm9kZU1h
cAogCiBXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3NldF9uYW1lZF9p
dGVtX25zKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSwg
R0Vycm9yKiogZXJyb3IpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFNRURfTk9ERV9N
QVAoc2VsZiksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9E
RShub2RlKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3Is
IDApOwotICAgIFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROb2RlID0gV2ViS2l0Ojpjb3JlKG5vZGUp
OwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxXZWJDb3Jl
OjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2V0TmFtZWRJdGVtKCpj
b252ZXJ0ZWROb2RlLCBlYykpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfc2V0X25h
bWVkX2l0ZW0oc2VsZiwgbm9kZSwgZXJyb3IpOwogfQogCiBXZWJLaXRET01Ob2RlKiB3ZWJraXRf
ZG9tX25hbWVkX25vZGVfbWFwX3JlbW92ZV9uYW1lZF9pdGVtX25zKFdlYktpdERPTU5hbWVkTm9k
ZU1hcCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIGxvY2Fs
TmFtZSwgR0Vycm9yKiogZXJyb3IpCkBAIC0yMjcsMTMgKzIxMywxMiBAQCBXZWJLaXRET01Ob2Rl
KiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3JlbW92ZV9uYW1lZF9pdGVtX25zKFdlYktpdERP
TU5hbWVkTm9kZQogICAgIFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lc3BhY2VVUkkgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgobmFtZXNwYWNlVVJJKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRM
b2NhbE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobG9jYWxOYW1lKTsKLSAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJlbW92ZU5hbWVkSXRlbU5TKGNvbnZlcnRlZE5h
bWVzcGFjZVVSSSwgY29udmVydGVkTG9jYWxOYW1lLCBlYykpOwotICAgIGlmIChlYykgewotICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGl0ZW0tPnJlbW92ZU5hbWVkSXRlbU5TKGNvbnZlcnRlZE5hbWVzcGFjZVVS
SSwgY29udmVydGVkTG9jYWxOYW1lKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7CiAgICAgfQotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpLnB0cigpKTsKIH0KIAogZ3Vsb25nIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X2xl
bmd0aChXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01FbGVtZW50Lm1tIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NRWxl
bWVudC5tbQppbmRleCBhNTM0NTBmZDI3N2VjYzU3YmJiZjAwOTNiY2NiNWUyODExN2FlODJlLi4y
YzA2Y2VjNmE1MDNjNzU2MzY2YzFkNmRiZjJlNjY3OTU2MzQ5NDBiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01FbGVtZW50
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21h
Yy9XS0RPTUVsZW1lbnQubW0KQEAgLTQ1LDkgKzQ1LDcgQEAgLSAoTlNTdHJpbmcgKilnZXRBdHRy
aWJ1dGU6KE5TU3RyaW5nICopYXR0cmlidXRlCiAKIC0gKHZvaWQpc2V0QXR0cmlidXRlOihOU1N0
cmluZyAqKW5hbWUgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUKIHsKLSAgICAvLyBGSVhNRTogRG8g
c29tZXRoaW5nIGFib3V0IHRoZSBleGNlcHRpb24uCi0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYzsKLSAgICBkb3duY2FzdDxXZWJDb3JlOjpFbGVtZW50PigqX2ltcGwpLnNldEF0dHJpYnV0
ZShuYW1lLCB2YWx1ZSwgZWMpOworICAgIGRvd25jYXN0PFdlYkNvcmU6OkVsZW1lbnQ+KCpfaW1w
bCkuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAogLSAoTlNTdHJpbmcgKil0YWdOYW1l
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggNjQ5YjBiNjE4MDcwNzViMmVhNjMyZTkxNzAxNWYwZGZmMTcxMTFmNC4uZjZkMWY5
YjJkMWUwYzk1YWQ0MGFkODk2OTdhNTRkNGYwYmUzNTczNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBA
CisyMDE2LTEwLTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBN
b3ZlIEVsZW1lbnQsIE5hbWVkTm9kZU1hcCwgYW5kIERPTVN0cmluZ01hcCBmcm9tIEV4Y2VwdGlv
bkNvZGUgdG8gRXhjZXB0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjQyMDYKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKwor
ICAgICAgICAqIGZhc3QvZG9tL3Jlc291cmNlcy9zaGFkb3ctdGVzdC1kcml2ZXIuanM6IERlbGV0
ZWQuIFVudXNlZC4KKwogMjAxNi0xMC0zMCAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5j
b20+CiAKICAgICAgICAgVXNlIEhhcmZCdXp6IG90LW1hdGggQVBJIHRvIHBhcnNlIHRoZSBPcGVu
VHlwZSBNQVRIIHRhYmxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJj
ZXMvc2hhZG93LXRlc3QtZHJpdmVyLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2Vz
L3NoYWRvdy10ZXN0LWRyaXZlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFl
ZWI3ZjlmYTFjODE4NmIwNTU0YzZmNDBiOWVhZDY1ZmQzYTVlYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJj
ZXMvc2hhZG93LXRlc3QtZHJpdmVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAK
LS8vCi0vLyBzaGFkb3ctdGVzdC1kcml2ZXIuanMKLS8vCi0vLyBUbyB1c2Ugc2hhZG93LXRlc3Qt
ZHJpdmVyLmpzLCB5b3Ugc2hvdWxkIGhhdmUKLS8vICAgPGRpdiBpZD0iYWN0dWFsLWNvbnRhaW5l
ciI+PC9kaXY+Ci0vLyAgIDxkaXYgaWQ9ImV4cGVjdC1jb250YWluZXIiPjwvZGl2PgotLy8gICA8
cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KLS8vIGluIHlvdXIgYm9keS4KLS8vCi0vLyBUaGVuLCBk
ZWZpbmUgdGVzdCBmdW5jdGlvbnMgaGF2aW5nIG9uZSBhcmd1bWVudCAnY2FsbElmRG9uZScuCi0v
LyBjYWxsSWZEb25lIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB5b3VyIHRlc3QgZnVuY3Rpb24gZmlu
aXNoZWQuCi0vLwotLy8gSW4gYm9keS5vbmxvYWQsIGNhbGwgZG9UZXN0KHRlc3RGdW5jcykgd2hl
cmUgdGVzdEZ1bmNzIGlzIGFuIGFycmF5IG9mIHRlc3QgZnVuY3Rpb25zLgotLy8KLS8vIFNlZSBj
b250ZW50LWVsZW1lbnQtbW92ZS5odG1sIGFzIGFuIGV4YW1wbGUuCi0vLwotCi1mdW5jdGlvbiBs
b2cobWVzc2FnZSkgewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5u
ZXJIVE1MICs9IChtZXNzYWdlICsgIlxuIik7Ci19Ci0KLWZ1bmN0aW9uIHJlbW92ZUFsbENoaWxk
cmVuKGVsZW0pIHsKLSAgICB3aGlsZSAoZWxlbS5maXJzdENoaWxkKQotICAgICAgICBlbGVtLnJl
bW92ZUNoaWxkKGVsZW0uZmlyc3RDaGlsZCk7Ci19Ci0KLWZ1bmN0aW9uIGNsZWFuVXAoKSB7Ci0g
ICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250
YWluZXInKSk7Ci0gICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2V4cGVjdC1jb250YWluZXInKSk7Ci19Ci0KLWZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lckxpbmVz
KHRleHQpIHsKLSAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcbicpOwotICAgIGxpbmVzLnNw
bGljZSgwLCAyKTsKLSAgICByZXR1cm4gbGluZXMuam9pbignXG4nKTsKLX0KLQotZnVuY3Rpb24g
Y2hlY2soKSB7Ci0gICAgdmFyIGV4cGVjdENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdleHBlY3QtY29udGFpbmVyJyk7Ci0gICAgdmFyIGFjdHVhbENvbnRhaW5lciA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJyk7Ci0gICAgdmFyIG9yaWdpbmFs
RGlzcGxheVZhbHVlID0gYWN0dWFsQ29udGFpbmVyLnN0eWxlLmRpc3BsYXk7Ci0gICAgYWN0dWFs
Q29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgZXhwZWN0Q29udGFpbmVyLm9m
ZnNldExlZnQ7Ci0gICAgdmFyIHJlZkNvbnRhaW5lclJlbmRlclRyZWUgPSBpbnRlcm5hbHMuZWxl
bWVudFJlbmRlclRyZWVBc1RleHQoZXhwZWN0Q29udGFpbmVyKTsKLSAgICB2YXIgcmVmUmVuZGVy
VHJlZSA9IHJlbW92ZUNvbnRhaW5lckxpbmVzKHJlZkNvbnRhaW5lclJlbmRlclRyZWUpOwotICAg
IGFjdHVhbENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gb3JpZ2luYWxEaXNwbGF5VmFsdWU7Ci0K
LSAgICBvcmlnaW5hbERpc3BsYXlWYWx1ZSA9IGV4cGVjdENvbnRhaW5lci5zdHlsZS5kaXNwbGF5
OwotICAgIGV4cGVjdENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgIGFjdHVh
bENvbnRhaW5lci5vZmZzZXRMZWZ0OwotICAgIHZhciB0YXJnZXRDb250YWluZXJSZW5kZXJUcmVl
ID0gaW50ZXJuYWxzLmVsZW1lbnRSZW5kZXJUcmVlQXNUZXh0KGFjdHVhbENvbnRhaW5lcik7Ci0g
ICAgdmFyIHRhcmdldFJlbmRlclRyZWUgPSByZW1vdmVDb250YWluZXJMaW5lcyh0YXJnZXRDb250
YWluZXJSZW5kZXJUcmVlKTsKLSAgICBleHBlY3RDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IG9y
aWdpbmFsRGlzcGxheVZhbHVlOwotCi0gICAgaWYgKHRhcmdldFJlbmRlclRyZWUgPT0gcmVmUmVu
ZGVyVHJlZSkKLSAgICAgICAgbG9nKCJQQVNTIik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGxvZygi
RkFJTCIpOwotICAgICAgICBsb2coIkV4cGVjdGVkOiAiKTsKLSAgICAgICAgbG9nKHJlZlJlbmRl
clRyZWUpOwotICAgICAgICBsb2coIkFjdHVhbDogIik7Ci0gICAgICAgIGxvZyh0YXJnZXRSZW5k
ZXJUcmVlKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZVNwYW5XaXRoVGV4dCh0ZXh0LCBj
bGFzc05hbWUpIHsKLSAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4n
KTsKLSAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTsK
LSAgICBpZiAoY2xhc3NOYW1lKQotICAgICAgICBzcGFuLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsK
LSAgICByZXR1cm4gc3BhbjsKLX0KLQotZnVuY3Rpb24gY3JlYXRlQ29udGVudFdpdGhTZWxlY3Qo
c2VsZWN0LCBmYWxsYmFja1RleHQpIHsKLSAgICB2YXIgY29udGVudCA9IGludGVybmFscy5jcmVh
dGVDb250ZW50RWxlbWVudCgpOwotICAgIGNvbnRlbnQuc2V0QXR0cmlidXRlKCdzZWxlY3QnLCBz
ZWxlY3QpOwotICAgIGlmIChmYWxsYmFja1RleHQpCi0gICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hp
bGQoY3JlYXRlU3BhbldpdGhUZXh0KGZhbGxiYWNrVGV4dCkpOwotCi0gICAgcmV0dXJuIGNvbnRl
bnQ7Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZUNvbnRlbnRXaXRoVGV4dChmYWxsYmFja1RleHQpIHsK
LSAgICB2YXIgY29udGVudCA9IGludGVybmFscy5jcmVhdGVDb250ZW50RWxlbWVudCgpOwotICAg
IGlmIChmYWxsYmFja1RleHQpCi0gICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gZmFsbGJhY2tU
ZXh0OwotCi0gICAgcmV0dXJuIGNvbnRlbnQ7Ci19Ci0KLWZ1bmN0aW9uIGFwcGVuZFNoYWRvdyh0
YXJnZXQsIHNlbGVjdCkgewotICAgIHZhciByb290ID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jv
b3QodGFyZ2V0KTsKLQotICAgIHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNyZWF0ZUNvbnRlbnRF
bGVtZW50KCk7Ci0gICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3NlbGVjdCcsIHNlbGVjdCk7Ci0g
ICAgY29udGVudC5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkZBTExCQUNLIikpOwot
Ci0gICAgcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgie1NIQURPVzog
IikpOwotICAgIHJvb3QuYXBwZW5kQ2hpbGQoY29udGVudCk7Ci0gICAgcm9vdC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgifSIpKTsKLX0KLQotZnVuY3Rpb24gYXBwZW5kU2hh
ZG93RGVlcCh0YXJnZXQsIHNlbGVjdCkgewotICAgIHZhciByb290ID0gaW50ZXJuYWxzLmVuc3Vy
ZVNoYWRvd1Jvb3QodGFyZ2V0KTsKLQotICAgIHZhciBjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInNwYW4iKTsKLSAgICB7Ci0gICAgICAgIHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNy
ZWF0ZUNvbnRlbnRFbGVtZW50KCk7Ci0gICAgICAgIGNvbnRlbnQuc2V0QXR0cmlidXRlKCdzZWxl
Y3QnLCBzZWxlY3QpOwotICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRo
VGV4dCgiRkFMTEJBQ0siKSk7Ci0KLSAgICAgICAgY2hpbGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoIntJTk5FUjogIikpOwotICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChj
b250ZW50KTsKLSAgICAgICAgY2hpbGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoIn0iKSk7Ci0gICAgfQotCi0gICAgcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgie1NIQURPVzogIikpOwotICAgIHJvb3QuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAg
IHJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIn0iKSk7Ci19Ci0KLWZ1
bmN0aW9uIGRvVGVzdElmTGVmdChyZXN0VGVzdHMpIHsKLSAgICB2YXIgdGVzdCA9IHJlc3RUZXN0
cy5zaGlmdCgpOwotICAgIGlmICh0ZXN0ID09IG51bGwpCi0gICAgICAgIHJldHVybiBkb25lVGVz
dCgpOwotCi0gICAgdmFyIGNhbGxJZkRvbmUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGNoZWNrKCk7Ci0gICAgICAgICAgICBjbGVh
blVwKCk7Ci0gICAgICAgICAgICBkb1Rlc3RJZkxlZnQocmVzdFRlc3RzKTsKLSAgICAgICAgfSwg
MCk7Ci0gICAgfTsKLQotICAgIGxvZyh0ZXN0Lm5hbWUpOwotICAgIHRlc3QoY2FsbElmRG9uZSk7
Ci19Ci0KLWZ1bmN0aW9uIGRvbmVUZXN0KCkgewotICAgIGxvZygiVEVTVCBDT01QTEVURUQiKTsK
LSAgICBpZiAod2luZG93LnRlYXJEb3duT25jZSkKLSAgICAgICAgd2luZG93LnRlYXJEb3duT25j
ZSgpOwotICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotfQotCi0vLyBBIHRlc3QgZHJpdmVy
LiBDYWxsIHRoaXMgYm9keS5vbmxvYWQuCi1mdW5jdGlvbiBkb1Rlc3QodGVzdHMpIHsKLSAgICBp
ZiAod2luZG93LnNldFVwT25jZSkKLSAgICAgICAgd2luZG93LnNldFVwT25jZSgpOwotCi0gICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Ci0gICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOwotICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLSAgICB9Ci0KLSAgICBjbGVh
blVwKCk7Ci0gICAgZG9UZXN0SWZMZWZ0KHRlc3RzKTsKLX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293368</attachid>
            <date>2016-10-30 15:13:19 -0700</date>
            <delta_ts>2016-10-30 15:21:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164206-20161030150925.patch</filename>
            <type>text/plain</type>
            <size>107483</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzMyYmNkN2QwN2VhNmRh
Njk5MDE3NTE3MWY3NzlhOTZhNzQyNjNlNS4uODQzN2IyN2E2OGEyZDQ1OTFiZmI3ZDFhOWIzMDZh
Y2NhOTM0ZTQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDE2LTEwLTMwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIEVsZW1lbnQsIE5hbWVk
Tm9kZU1hcCwgYW5kIERPTVN0cmluZ01hcCBmcm9tIEV4Y2VwdGlvbkNvZGUgdG8gRXhjZXB0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyMDYK
KworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NU3Ry
aW5nTWFwOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKTogVXNlIG1vZGVybiBmb3IgbG9vcCwgYW5kCisg
ICAgICAgIHVwZGF0ZXMgc2luY2UgdGhlIG5hbWVzIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGEgdmVj
dG9yLgorICAgICAgICAoV2ViQ29yZTo6SlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKTogVXNl
IHByb3BhZ2F0ZUV4Y2VwdGlvbi4gQWxzbyByZXR1cm4KKyAgICAgICAgdHJ1ZSBhbnkgdGltZSBh
biBleGNlcHRpb24gaXMgcmFpc2VkLiBTaW5jZSB0cnVlIHRlbGxzIHRoZSBjYWxsZXIgdG8gcmV0
dXJuCisgICAgICAgIHdpdGhvdXQgZG9pbmcgYW55IHdvcmssIHdlIGFsd2F5cyB3YW50IHRvIHJl
dHVybiB0aGF0IG9uIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgKiBkb20vRGF0YXNldERPTVN0cmlu
Z01hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhc2V0RE9NU3RyaW5nTWFwOjpuYW1lcyk6
IFJlbmFtZWQgZnJvbSBnZXROYW1lcyBhbmQgbWFkZSB0aGlzCisgICAgICAgIHJldHVybiBhIFZl
Y3RvciBpbnN0ZWFkIG9mIHBvcHVsYXRpbmcgYSBwYXNzZWQtaW4gdmVjdG9yLgorICAgICAgICAo
V2ViQ29yZTo6RGF0YXNldERPTVN0cmluZ01hcDo6c2V0SXRlbSk6IFVzZSBFeGNlcHRpb25Pci4K
KyAgICAgICAgKiBkb20vRGF0YXNldERPTVN0cmluZ01hcC5oOiBVcGRhdGVkIGZvciBhYm92ZS4K
KworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6YWRvcHROb2RlKTogVXBkYXRlZCB0byB1c2UgRXhjZXB0aW9uT3IgZm9yCisgICAgICAgIHJl
bW92ZUF0dHJpYnV0ZU5vZGUuIENoYW5nZWQgdG8gdXNlIHJlbW92ZSByYXRoZXIgdGhhbiByZW1v
dmVDaGlsZCBmb3IKKyAgICAgICAgYmV0dGVyIGNsYXJpdHkuCisKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGUpOiBVc2Ug
RXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjcmVhdGVTaGFkb3dSb290
KTogRGVsZXRlZC4gVW51c2VkLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0YWNoU2hh
ZG93KTogVXNlIEV4Y2VwdGlvbk9yLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2hhZG93
Um9vdEZvckJpbmRpbmdzKTogVHdlYWtlZCBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OnVzZXJBZ2VudFNoYWRvd1Jvb3QpOiBSZW1vdmVkIHVubmVlZGVkIGlmIHN0YXRlbW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjplbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KTog
VHdlYWtlZCBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5v
ZGUpOiBVc2UgRXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRy
aWJ1dGVOb2RlTlMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0
dHJpYnV0ZU5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlTmFtZSk6IERpdHRvLiBBbHNvIGNoYW5nZWQgcmV0dXJuIHJlc3VsdAorICAgICAgICB0
byBiZSBhIFF1YWxpZmllZE5hbWUgaW5zdGVhZCBvZiB1c2luZyBhbiBvdXQgYXJndW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6bWVyZ2VXaXRoTmV4dFRleHROb2RlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRPdXRlckhUTUwpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnNldElubmVySFRNTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6bWF0Y2hlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xv
c2VzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0QWRqYWNlbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydEFkamFjZW50RWxlbWVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE5vZGVGb3JJbnNlcnRpb24pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRFbGVtZW50Rm9ySW5zZXJ0aW9uKTogQWRk
ZWQuIEhlbHBlciBmb3IgdGhlCisgICAgICAgIGluc2VydEFkamFjZW50SFRNTCBmdW5jdGlvbiB0
byBlbGltaW5hdGUgYSBsb2NhbCB2YXJpYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
Omluc2VydEFkamFjZW50SFRNTCk6IFVzZSBFeGNlcHRpb25Pci4KKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6Omluc2VydEFkamFjZW50VGV4dCk6IERpdHRvLgorICAgICAgICAqIGRvbS9FbGVt
ZW50Lmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorICAgICAgICAqIGRvbS9FbGVtZW50LmlkbDogVXNl
IG5vbi1sZWdhY3kgZXhjZXB0aW9ucy4KKworICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0pOiBVc2Ug
RXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnN1cHBvcnRlZFBy
b3BlcnR5TmFtZXMpOiBVcGRhdGVkIHRvIGNoZWNrCisgICAgICAgIHdoaWNoIHN0cmluZ3Mgc2hv
dWxkIGJlIHJlbW92ZWQgd2l0aG91dCBjb3B5aW5nIHRoZSBzdHJpbmdzLgorICAgICAgICAoV2Vi
Q29yZTo6TmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW1OUyk6IFVzZSBFeGNlcHRpb25Pci4K
KyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKTogRGl0dG8uIFJl
bW92ZWQgb3ZlcmxvYWQgZm9yCisgICAgICAgIGxlZ2FjeSBiaW5kaW5nczsgbW92ZSB0aGF0IHRv
IHRoZSBiaW5kaW5ncyB0aGVtc2VsdmVzLgorICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuaDog
VXBkYXRlZCBmb3IgYWJvdmUuCisgICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5pZGw6IFVzZSBu
b24tbGVnYWN5IGV4Y2VwdGlvbnMuCisKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQpOiBVcGRhdGVkIHNp
bmNlIG1lcmdlV2l0aE5leHRUZXh0Tm9kZQorICAgICAgICBub3cgdXNlcyBFeGNlcHRpb25Pci4K
KworICAgICAgICAqIGluc3BlY3Rvci9ET01FZGl0b3IuY3BwOiBVcGRhdGVkIHRvIHVzZSBFeGNl
cHRpb25Pci4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyk6IEFkZGVk
IGFuIG92ZXJsb2FkIGZvcgorICAgICAgICBFeGNlcHRpb24uCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dCk6IFVwZGF0ZWQgdG8gdXNlIEV4
Y2VwdGlvbk9yLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOiBVcGRh
dGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6c2V0U3R5bGVUZXh0KTogVXBkYXRlZCB0bworICAgICAgICB1c2UgdGhlIGNvcnJlY3QgdmVy
c2lvbiBvZiBzZXRBdHRyaWJ1dGU7IHRoZXJlIHdhcyBuZXZlciBhIHJpc2sgdGhhdCB0aGVyZQor
ICAgICAgICB3b3VsZCBiZSBhbiBleGNlcHRpb24sIGJ1dCBub3cgdGhhdCdzIGNsZWFyZXIuCisK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRl
cm5hbHM6OmVuc3VyZVNoYWRvd1Jvb3QpOiBEZWxldGVkLiBXYXMgdW51c2VkLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpjcmVhdGVTaGFkb3dSb290KTogRGl0dG8uCisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbHMuaWRsOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIHht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmhhbmRsZU5hbWVzcGFjZUF0dHJpYnV0ZXMpOiBVc2UgdXBkYXRlZCBwYXJzZUF0dHJpYnV0ZU5h
bWUsCisgICAgICAgIHdoaWNoIHVzZXMgRXhjZXB0aW9uT3IgYW5kIGEgcmV0dXJuIHZhbHVlIGlu
c3RlYWQgb2YgYW4gb3V0IGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVu
dEF0dHJpYnV0ZXMpOiBEaXR0by4KKwogMjAxNi0xMC0yOCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxn
aGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXVtEaXJlY3QyRF0gQ29ycmVjdCBib29ra2Vl
cGluZyBmb3IgYmVnaW4vZW5kIGRyYXcgcGFpcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA5YzFmZjUw
OWI0MjU4YjIzNDE0MTAzZTgzNzA2MGVlMmQwYTI2ODc2Li5jZjZhZTYxZDk5NDU0YmMwYjk5MDE4
MWViNDRiMmIzMzM0MjVkYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIw
MTYtMTAtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUg
RWxlbWVudCwgTmFtZWROb2RlTWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0aW9uQ29k
ZSB0byBFeGNlcHRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDIwNgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAg
ICAgICogRE9NL0RPTUVsZW1lbnQubW06CisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0SW5uZXJI
VE1MOl0pOiBVcGRhdGVkIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICAgKC1bRE9NRWxlbWVu
dCBzZXRPdXRlckhUTUw6XSk6IERpdHRvLgorICAgICAgICAoLVtET01FbGVtZW50IHNldEF0dHJp
YnV0ZTp2YWx1ZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0QXR0cmlidXRl
Tm9kZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgcmVtb3ZlQXR0cmlidXRlTm9k
ZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0QXR0cmlidXRlTlM6cXVhbGlm
aWVkTmFtZTp2YWx1ZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0QXR0cmli
dXRlTm9kZU5TOl0pOiBEaXR0by4KKyAgICAgICAgKC1bRE9NRWxlbWVudCBtYXRjaGVzOl0pOiBE
aXR0by4KKyAgICAgICAgKC1bRE9NRWxlbWVudCBjbG9zZXN0Ol0pOiBEaXR0by4KKyAgICAgICAg
KC1bRE9NRWxlbWVudCB3ZWJraXRNYXRjaGVzU2VsZWN0b3I6XSk6IERpdHRvLgorICAgICAgICAq
IERPTS9ET01IVE1MRWxlbWVudC5tbToKKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgaW5zZXJ0
QWRqYWNlbnRFbGVtZW50OmVsZW1lbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtET01IVE1MRWxl
bWVudCBpbnNlcnRBZGphY2VudEhUTUw6aHRtbDpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUhU
TUxFbGVtZW50IGluc2VydEFkamFjZW50VGV4dDp0ZXh0Ol0pOiBEaXR0by4KKyAgICAgICAgKiBE
T00vRE9NTmFtZWROb2RlTWFwLm1tOgorICAgICAgICAoLVtET01OYW1lZE5vZGVNYXAgc2V0TmFt
ZWRJdGVtOl0pOiBEaXR0by4KKyAgICAgICAgKC1bRE9NTmFtZWROb2RlTWFwIHJlbW92ZU5hbWVk
SXRlbTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTU5hbWVkTm9kZU1hcCBzZXROYW1lZEl0ZW1O
UzpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTU5hbWVkTm9kZU1hcCByZW1vdmVOYW1lZEl0ZW1O
Uzpsb2NhbE5hbWU6XSk6IERpdHRvLgorCiAyMDE2LTEwLTI5ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IG1vcmUgb2YgRE9NIGZyb20gRXhjZXB0aW9u
Q29kZSB0byBFeGNlcHRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCAzNjkyMDU2ZWUzYTc3ZWJlOGY4
NGUyNGVkMzg0MTAxMzUyMjUwMDc5Li4xYTY2YWY3MDVmMGY2ZTA4MjdjN2QwODdhNmE5ZGI1Nzg2
M2VmMjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMTAtMzAgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgRWxlbWVudCwgTmFt
ZWROb2RlTWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0aW9uQ29kZSB0byBFeGNlcHRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDIw
NgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgICogRE9NQ29y
ZUNsYXNzZXMuY3BwOgorICAgICAgICAoRE9NRWxlbWVudDo6c2V0QXR0cmlidXRlKTogVXBkYXRl
ZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAgICogRE9NSFRNTENsYXNzZXMuY3BwOgorICAg
ICAgICAoRE9NSFRNTEVsZW1lbnQ6OnNldElubmVySFRNTCk6IERpdHRvLgorCiAyMDE2LTEwLTMw
ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgYnVpbGQgZml4IChEaXJlY3QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0ZjM5MjUxODc0NjFkM2IyNTc1
YTE2NjAyYjllYmI1YjE4M2QxMjQ2Li4xNjc2ZWE5NDE1MjE5YTU2NTA4YjAxNDcwZThiZTk1NjBk
ZmRkYTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTYtMTAtMzAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgRWxlbWVudCwgTmFtZWROb2Rl
TWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0aW9uQ29kZSB0byBFeGNlcHRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDIwNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXAuY3BwOgorICAg
ICAgICAod2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbSk6IFVwZGF0ZWQg
ZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAgICAod2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9y
ZW1vdmVfbmFtZWRfaXRlbSk6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9uYW1lZF9ub2Rl
X21hcF9zZXRfbmFtZWRfaXRlbV9ucyk6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9uYW1l
ZF9ub2RlX21hcF9yZW1vdmVfbmFtZWRfaXRlbV9ucyk6IERpdHRvLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudC5jcHA6Cisg
ICAgICAgICh3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZSk6IERpdHRvLgorICAgICAg
ICAod2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbm9kZSk6IERpdHRvLgorICAgICAg
ICAod2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGVfbm9kZSk6IERpdHRvLgorICAg
ICAgICAod2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbnMpOiBEaXR0by4KKyAgICAg
ICAgKHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGVfbnMpOiBEaXR0by4KKyAg
ICAgICAgKHdlYmtpdF9kb21fZWxlbWVudF9tYXRjaGVzKTogRGl0dG8uCisgICAgICAgICh3ZWJr
aXRfZG9tX2VsZW1lbnRfY2xvc2VzdCk6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9lbGVt
ZW50X3dlYmtpdF9tYXRjaGVzX3NlbGVjdG9yKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfZG9t
X2VsZW1lbnRfaW5zZXJ0X2FkamFjZW50X2VsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfaHRtbCk6IERpdHRvLgorICAgICAgICAod2Vi
a2l0X2RvbV9lbGVtZW50X2luc2VydF9hZGphY2VudF90ZXh0KTogRGl0dG8uCisgICAgICAgICh3
ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2lubmVyX2h0bWwpOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dF9kb21fZWxlbWVudF9zZXRfb3V0ZXJfaHRtbCk6IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQubW06CisgICAgICAgICgtW1dL
RE9NRWxlbWVudCBzZXRBdHRyaWJ1dGU6dmFsdWU6XSk6IERpdHRvLgorCiAyMDE2LTEwLTMwICBZ
dXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtET01dIElu
dHJvZHVjZSBXZWJDb3JlOjpqc0R5bmFtaWNEb3duY2FzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKaW5k
ZXggMzYxNDhmMjQ5OTEwMmRlYjc4NTU5MzNjOTE4N2M3YTUyMjdmYzY0Ny4uYzE0YzE5Nzk4MjIz
NGMzMTVkZDNjYWM4N2ZmNmI0MTRjZWNiMmEwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCkBAIC0z
NDIsNyArMzQyLDcgQEAgYm9vbCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnB1dERlbGVnYXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU4KICAgICBhdXRvIHNldFByb3Bl
cnR5SW50ZXJuYWxSZXN1bHQgPSB3cmFwcGVkKCkuc2V0UHJvcGVydHlJbnRlcm5hbChwcm9wZXJ0
eUluZm8ucHJvcGVydHlJRCwgcHJvcGVydHlWYWx1ZSwgaW1wb3J0YW50KTsKICAgICBpZiAoc2V0
UHJvcGVydHlJbnRlcm5hbFJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oKnN0YXRlLCBzZXRQcm9wZXJ0eUludGVybmFsUmVzdWx0LnJlbGVhc2VFeGNl
cHRpb24oKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHB1dFJlc3VsdCA9IHNldFByb3BlcnR5SW50ZXJuYWxSZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAKaW5kZXggMmVhOTI3YTViYTU2NzAy
OWI1NmQ1NmM5YzA5MjVhZGZiMzBlZGRlOC4uNzgzZmRkM2Q4OTY5YWU3ODRhMzU1MGMxYTA5NTEy
ZjUyZmNlOTMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01T
dHJpbmdNYXBDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
U3RyaW5nTWFwQ3VzdG9tLmNwcApAQCAtMzcsNTEgKzM3LDQ1IEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0RPTVN0cmluZ01hcDo6Z2V0T3du
UHJvcGVydHlTbG90RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTRE9NU3RyaW5nTWFwOjpnZXRPd25Q
cm9wZXJ0eVNsb3REZWxlZ2F0ZShFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5
bWJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCBuYW1lSXNWYWxpZDsKICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGl0ZW0gPSB3cmFwcGVkKCkuaXRlbShwcm9wZXJ0eU5hbWVU
b1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBuYW1lSXNWYWxpZCk7CiAgICAgaWYgKG5hbWVJc1ZhbGlk
KSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgMCwgdG9KUzxJRExET01TdHJpbmc+KCpl
eGVjLCBpdGVtKSk7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgMCwgdG9KUzxJRExET01T
dHJpbmc+KCpzdGF0ZSwgaXRlbSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEpTRE9NU3RyaW5nTWFwOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0RPTVN0cmluZ01h
cDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRl
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
CiB7Ci0gICAgSlNET01TdHJpbmdNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01TdHJpbmdN
YXAqPihvYmplY3QpOwotICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwotICAgIHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5nZXROYW1lcyhuYW1lcyk7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IG5hbWVzLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIG5hbWVzW2ldKSk7
Ci0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOworICAgIGZvciAoYXV0byYgbmFtZSA6IGpzQ2FzdDxKU0RPTVN0cmlu
Z01hcCo+KG9iamVjdCktPndyYXBwZWQoKS5uYW1lcygpKQorICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBuYW1lKSk7CisgICAgQmFzZTo6Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0K
IAotYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIEpTRE9NU3RyaW5n
TWFwOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKICAg
ICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazsK
ICNlbmRpZgogCi0gICAgSlNET01TdHJpbmdNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01T
dHJpbmdNYXAqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpCi0gICAg
ICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZGVsZXRlSXRlbShwcm9w
ZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KGNlbGwsIHN0YXRlLCBwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBqc0Nh
c3Q8SlNET01TdHJpbmdNYXAqPihjZWxsKS0+d3JhcHBlZCgpLmRlbGV0ZUl0ZW0ocHJvcGVydHlO
YW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CiB9CiAKLWJvb2wgSlNET01TdHJpbmdNYXA6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaW5kZXgpCitib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCkKIHsKLSAgICByZXR1
cm4gZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRl
eCkpOworICAgIHJldHVybiBkZWxldGVQcm9wZXJ0eShjZWxsLCBzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbShzdGF0ZSwgaW5kZXgpKTsKIH0KIAotYm9vbCBKU0RPTVN0cmluZ01hcDo6cHV0RGVsZWdh
dGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmLCBib29sJiBwdXRSZXN1bHQpCitib29sIEpTRE9NU3RyaW5n
TWFwOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmLCBib29sJiBwdXRSZXN1bHQpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAocHJvcGVy
dHlOYW1lLmlzU3ltYm9sKCkpCkBAIC05MSwxNCArODUsMTcgQEAgYm9vbCBKU0RPTVN0cmluZ01h
cDo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1YKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rp
b25TdGFjazsKICNlbmRpZgogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdHJ1ZSk7CiAKLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICB3cmFwcGVkKCkuc2V0SXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhw
cm9wZXJ0eU5hbWUpLCBzdHJpbmdWYWx1ZSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7Ci0gICAgcHV0UmVzdWx0ID0gIWVjOwotICAgIHJldHVybiAhZWM7CisgICAgYXV0byBy
ZXN1bHQgPSB3cmFwcGVkKCkuc2V0SXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5h
bWUpLCBXVEZNb3ZlKHN0cmluZ1ZhbHVlKSk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCBzY29wZSwgcmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1
dFJlc3VsdCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3Bw
CmluZGV4IDgyZTNjMjgwNGZjMWFkODVmMWU2ZDBkYzRhNWQ4YzgwNmMyODhlY2QuLmJkZmIwNmIz
M2IxNzllYTA5ZmIwODlkZWE3ODU1M2FlNzQ2MDM0ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIGJvb2wg
SlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlCiAgICAgLy8gT25seSBwZXJmb3JtIHRoZSBjdXN0b20gcHV0IGlm
IHRoZSBvYmplY3QgZG9lc24ndCBoYXZlIGEgbmF0aXZlIHByb3BlcnR5IGJ5IHRoaXMgbmFtZS4K
ICAgICAvLyBTaW5jZSBoYXNQcm9wZXJ0eSgpIHdvdWxkIGVuZCB1cCBjYWxsaW5nIGNhbkdldEl0
ZW1zRm9yTmFtZSgpIGFuZCBiZSBmb29sZWQsIHdlIG5lZWQgdG8gY2hlY2sKICAgICAvLyB0aGUg
bmF0aXZlIHByb3BlcnR5IHNsb3RzIG1hbnVhbGx5LgotICAgIFByb3BlcnR5U2xvdCBzbG90KHRo
aXMsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7Cisg
ICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6R2V0T3duUHJvcGVydHkgfTsKIAogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpcy0+
Z2V0UHJvdG90eXBlRGlyZWN0KCk7CiAgICAgaWYgKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFz
T2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBz
bG90KSkKQEAgLTEyMCwxOSArMTIwLDE2IEBAIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShF
eGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlCiAgICAg
aWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIC8vIFRo
ZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgcHV0RGVsZWdhdGUoKSBzaG91bGQgaGFu
ZGxlIHRoZSBwdXQgb3BlcmF0aW9uICh3aGljaAotICAgICAgICAvLyBpZiB0cnVlLCB0ZWxscyB0
aGUgY2FsbGVyIG5vdCB0byBleGVjdXRlIHRoZSBnZW5lcmljIHB1dCkuIEl0IGRvZXMgbm90IGlu
ZGljYXRlIHdoZXRoZXIKLSAgICAgICAgLy8gcHV0RGVsZWdhdGUoKSBkaWQgc3VjY2Vzc2Z1bGx5
IGNvbXBsZXRlIHRoZSBvcGVyYXRpb24gb3Igbm90ICh3aGljaCBpdCBkaWRuJ3QgaW4gdGhpcwot
ICAgICAgICAvLyBjYXNlIGR1ZSB0byB0aGUgZXhjZXB0aW9uKS4KLSAgICAgICAgcHV0UmVzdWx0
ID0gZmFsc2U7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3Rh
dGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHRydWUpOworCisgICAgYXV0byBz
ZXRJdGVtUmVzdWx0ID0gd3JhcHBlZCgpLnNldEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJv
cGVydHlOYW1lKSwgc3RyaW5nVmFsdWUpOworICAgIGlmIChzZXRJdGVtUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHNjb3BlLCBzZXRJ
dGVtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIGF1dG8gc2V0SXRlbVJlc3VsdCA9IHdyYXBwZWQoKS5zZXRJdGVtKHByb3BlcnR5
TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIHN0cmluZ1ZhbHVlKTsKLSAgICBwdXRSZXN1bHQg
PSAhc2V0SXRlbVJlc3VsdC5oYXNFeGNlcHRpb24oKTsKLSAgICBwcm9wYWdhdGVFeGNlcHRpb24o
KnN0YXRlLCBzY29wZSwgV1RGTW92ZShzZXRJdGVtUmVzdWx0KSk7CisgICAgcHV0UmVzdWx0ID0g
dHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRE
T01TdHJpbmdNYXAuY3BwCmluZGV4IGRmMzFkOTAwNjUyOTI4NjYwZjdmZmI3ZGI1MWQ0M2Q4ZjI1
MzQyMGQuLjUzZjUyMGVmYTUzOTRjYzZkODAzYzM5Yjg1YWY0ZTdjM2MzMWY4YjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAK
ICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNTIsMTgg
KzE1MSwyMSBAQCB2b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OmRlcmVmKCkKICAgICBtX2VsZW1l
bnQuZGVyZWYoKTsKIH0KIAotdm9pZCBEYXRhc2V0RE9NU3RyaW5nTWFwOjpnZXROYW1lcyhWZWN0
b3I8U3RyaW5nPiYgbmFtZXMpCitWZWN0b3I8U3RyaW5nPiBEYXRhc2V0RE9NU3RyaW5nTWFwOjpu
YW1lcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygpKQotICAg
ICAgICByZXR1cm47CisgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CiAKLSAgICBmb3IgKGNvbnN0
IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogbV9lbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7
Ci0gICAgICAgIGlmIChpc1ZhbGlkQXR0cmlidXRlTmFtZShhdHRyaWJ1dGUubG9jYWxOYW1lKCkp
KQotICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGNvbnZlcnRBdHRyaWJ1dGVOYW1lVG9Qcm9wZXJ0
eU5hbWUoYXR0cmlidXRlLmxvY2FsTmFtZSgpKSk7CisgICAgaWYgKG1fZWxlbWVudC5oYXNBdHRy
aWJ1dGVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBtX2VsZW1lbnQuYXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkQXR0cmlidXRlTmFt
ZShhdHRyaWJ1dGUubG9jYWxOYW1lKCkpKQorICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChj
b252ZXJ0QXR0cmlidXRlTmFtZVRvUHJvcGVydHlOYW1lKGF0dHJpYnV0ZS5sb2NhbE5hbWUoKSkp
OworICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIG5hbWVzOwogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIERhdGFzZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIGJvb2wmIGlzVmFsaWQpCitjb25zdCBBdG9taWNTdHJpbmcmIERhdGFzZXRET01TdHJp
bmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wmIGlzVmFsaWQpIGNv
bnN0CiB7CiAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgIGlmIChtX2VsZW1lbnQuaGFzQXR0cmli
dXRlcygpKSB7CkBAIC0xOTEsMTQgKzE5MywxMSBAQCBjb25zdCBBdG9taWNTdHJpbmcmIERhdGFz
ZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wmCiAg
ICAgcmV0dXJuIG51bGxBdG9tOwogfQogCi12b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OnNldEl0
ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+IERhdGFzZXRET01TdHJpbmdNYXA6OnNldEl0ZW0oY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICghaXNWYWxp
ZFByb3BlcnR5TmFtZShuYW1lKSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2VsZW1lbnQuc2V0QXR0cmlidXRlKGNvbnZlcnRQcm9w
ZXJ0eU5hbWVUb0F0dHJpYnV0ZU5hbWUobmFtZSksIHZhbHVlLCBlYyk7CisgICAgaWYgKCFpc1Zh
bGlkUHJvcGVydHlOYW1lKG5hbWUpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFY
X0VSUiB9OworICAgIHJldHVybiBtX2VsZW1lbnQuc2V0QXR0cmlidXRlKGNvbnZlcnRQcm9wZXJ0
eU5hbWVUb0F0dHJpYnV0ZU5hbWUobmFtZSksIHZhbHVlKTsKIH0KIAogYm9vbCBEYXRhc2V0RE9N
U3RyaW5nTWFwOjpkZWxldGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRGF0YXNldERPTVN0cmluZ01hcC5oCmluZGV4IGYxOWEwNTAyZWMxYzdlY2Q5YTEzYzU0Nzg4
ZWVmM2VjMzM3NWFmMjEuLjFhOWJjNDUyMzE1MmFjZDJmZTY2NjIyZTI5NWJhNGJiOWE2YWM1MTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuaApAQCAtMjMsMjEgKzIz
LDE3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRl
ZiBEYXRhc2V0RE9NU3RyaW5nTWFwX2gKLSNkZWZpbmUgRGF0YXNldERPTVN0cmluZ01hcF9oCisj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiU2NyaXB0
V3JhcHBhYmxlLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRWxlbWVudDsKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNz
IERhdGFzZXRET01TdHJpbmdNYXAgZmluYWwgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRhc2V0RE9NU3RyaW5nTWFwKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAg
ZXhwbGljaXQgRGF0YXNldERPTVN0cmluZ01hcChFbGVtZW50JiBlbGVtZW50KQogICAgICAgICA6
IG1fZWxlbWVudChlbGVtZW50KQpAQCAtNDcsOSArNDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZWYoKTsKICAgICB2b2lkIGRlcmVmKCk7CiAKLSAgICB2b2lkIGdldE5hbWVzKFZlY3RvcjxTdHJp
bmc+Jik7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBpdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCYgaXNWYWxpZCk7Ci0gICAgdm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFZlY3RvcjxTdHJpbmc+IG5h
bWVzKCkgY29uc3Q7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpdGVtKGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCYgaXNWYWxpZCkgY29uc3Q7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0SXRl
bShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIGJvb2wgZGVs
ZXRlSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgRWxlbWVudCYgZWxlbWVudCgpIHsg
cmV0dXJuIG1fZWxlbWVudDsgfQpAQCAtNTksNSArNTUsMyBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRGF0YXNldERPTVN0cmluZ01hcF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBiMzlkNmYzYWEzYTRhMTc2NWU0YjFkNzIwNWJiMWYx
M2I5Nzg5Y2Y5Li5hZjM4MjkwYWUzYTU3YzQ0NWI3NjNhMGFlNTdhY2IzMzc5MWRkMWY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTEwMTMsMTAgKzEwMTMsMTUgQEAgUmVmUHRyPE5vZGU+
IERvY3VtZW50OjphZG9wdE5vZGUoTm9kZSYgc291cmNlLCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICBjYXNlIERPQ1VNRU5UX05PREU6CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNhc2UgQVRUUklCVVRFX05PREU6IHsgICAgICAg
ICAgICAgICAgICAgCisgICAgY2FzZSBBVFRSSUJVVEVfTk9ERTogewogICAgICAgICBhdXRvJiBh
dHRyID0gZG93bmNhc3Q8QXR0cj4oc291cmNlKTsKLSAgICAgICAgaWYgKGF0dHIub3duZXJFbGVt
ZW50KCkpCi0gICAgICAgICAgICBhdHRyLm93bmVyRWxlbWVudCgpLT5yZW1vdmVBdHRyaWJ1dGVO
b2RlKGF0dHIsIGVjKTsKKyAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBhdHRyLm93bmVyRWxl
bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGVsZW1lbnQtPnJlbW92ZUF0dHJp
YnV0ZU5vZGUoYXR0cik7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
CisgICAgICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGZhbGwgdGhyb3VnaCBoZXJlIGluc3RlYWQg
b2YgcmV0dXJuaW5nIGVhcmx5PworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0gICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTEwMzIsMTAgKzEwMzcsMTAgQEAg
UmVmUHRyPE5vZGU+IERvY3VtZW50OjphZG9wdE5vZGUoTm9kZSYgc291cmNlLCBFeGNlcHRpb25D
b2RlJiBlYykKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBpZiAoc291cmNlLnBhcmVudE5vZGUoKSkgewotICAgICAgICAg
ICAgc291cmNlLnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQoc291cmNlLCBlYyk7Ci0gICAgICAg
ICAgICBpZiAoZWMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1
dG8gcmVzdWx0ID0gc291cmNlLnJlbW92ZSgpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgICBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29k
ZSgpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAppbmRleCBiMWIxZWVmMWU0NGE4ODVjY2VhNzZhN2QxN2I4NjM3MGYx
YjhlYmNjLi4zYzdjOGQxNWI0ZDEzZDUxOGNiMzhkZmI5Y2ViNDE1MmNlNjZlNzZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCkBAIC0xMjE3LDE5ICsxMjE3LDE4IEBAIGNvbnN0IEF0b21pY1N0cmlu
ZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvCiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBs
b2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpOwogfQogCi12b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lkPiBFbGVtZW50OjpzZXRBdHRy
aWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUpCiB7Ci0gICAgaWYgKCFEb2N1bWVudDo6aXNWYWxpZE5hbWUobG9jYWxOYW1lKSkgewot
ICAgICAgICBlYyA9IElOVkFMSURfQ0hBUkFDVEVSX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoIURvY3VtZW50Ojppc1ZhbGlkTmFtZShsb2NhbE5hbWUpKQorICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9DSEFSQUNURVJfRVJSIH07CiAKICAgICBzeW5jaHJv
bml6ZUF0dHJpYnV0ZShsb2NhbE5hbWUpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2FzZUFk
anVzdGVkTG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSgqdGhpcykgPyBsb2Nh
bE5hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IGxvY2FsTmFtZTsKLQorICAgIGF1dG8g
Y2FzZUFkanVzdGVkTG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSgqdGhpcykg
PyBsb2NhbE5hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IGxvY2FsTmFtZTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IGVsZW1lbnREYXRhKCkgPyBlbGVtZW50RGF0YSgpLT5maW5kQXR0cmli
dXRlSW5kZXhCeU5hbWUoY2FzZUFkanVzdGVkTG9jYWxOYW1lLCBmYWxzZSkgOiBFbGVtZW50RGF0
YTo6YXR0cmlidXRlTm90Rm91bmQ7Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUgPSBp
bmRleCAhPSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQgPyBhdHRyaWJ1dGVBdChpbmRl
eCkubmFtZSgpIDogUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgY2FzZUFkanVzdGVkTG9jYWxOYW1l
LCBudWxsQXRvbSk7Ci0gICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoaW5kZXgsIHFOYW1lLCB2YWx1
ZSwgTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOworICAgIGF1dG8gbmFtZSA9
IGluZGV4ICE9IEVsZW1lbnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCA/IGF0dHJpYnV0ZUF0KGlu
ZGV4KS5uYW1lKCkgOiBRdWFsaWZpZWROYW1lIHsgbnVsbEF0b20sIGNhc2VBZGp1c3RlZExvY2Fs
TmFtZSwgbnVsbEF0b20gfTsKKyAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChpbmRleCwgbmFtZSwg
dmFsdWUsIE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC0xNzU2LDEyICsxNzU1LDEx
IEBAIFNoYWRvd1Jvb3QqIEVsZW1lbnQ6OnNoYWRvd1Jvb3QoKSBjb25zdAogICAgIHJldHVybiBo
YXNSYXJlRGF0YSgpID8gZWxlbWVudFJhcmVEYXRhKCktPnNoYWRvd1Jvb3QoKSA6IG51bGxwdHI7
CiB9CiAKLQogdm9pZCBFbGVtZW50OjphZGRTaGFkb3dSb290KFJlZjxTaGFkb3dSb290PiYmIG5l
d1NoYWRvd1Jvb3QpCiB7CiAgICAgQVNTRVJUKCFzaGFkb3dSb290KCkpOwogCi0gICAgU2hhZG93
Um9vdCYgc2hhZG93Um9vdCA9IG5ld1NoYWRvd1Jvb3QuZ2V0KCk7CisgICAgU2hhZG93Um9vdCYg
c2hhZG93Um9vdCA9IG5ld1NoYWRvd1Jvb3Q7CiAgICAgZW5zdXJlRWxlbWVudFJhcmVEYXRhKCku
c2V0U2hhZG93Um9vdChXVEZNb3ZlKG5ld1NoYWRvd1Jvb3QpKTsKIAogICAgIHNoYWRvd1Jvb3Qu
c2V0SG9zdCh0aGlzKTsKQEAgLTE3ODUsNiArMTc4Myw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3Zl
U2hhZG93Um9vdCgpCiAgICAgUmVmUHRyPFNoYWRvd1Jvb3Q+IG9sZFJvb3QgPSBzaGFkb3dSb290
KCk7CiAgICAgaWYgKCFvbGRSb290KQogICAgICAgICByZXR1cm47CisKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxQb3BTaGFkb3dSb290KCp0aGlzLCAqb2xkUm9vdCk7CiAgICAg
ZG9jdW1lbnQoKS5yZW1vdmVGb2N1c2VkTm9kZU9mU3VidHJlZShvbGRSb290LmdldCgpKTsKIApA
QCAtMTc5OCwxNiArMTc5Nyw2IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlU2hhZG93Um9vdCgpCiAg
ICAgbm90aWZ5Q2hpbGROb2RlUmVtb3ZlZCgqdGhpcywgKm9sZFJvb3QpOwogfQogCi1TaGFkb3dS
b290KiBFbGVtZW50OjpjcmVhdGVTaGFkb3dSb290KEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGlmIChhbHdheXNDcmVhdGVVc2VyQWdlbnRTaGFkb3dSb290KCkpCi0gICAgICAgIHJldHVybiAm
ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotCi0gICAgZWMgPSBISUVSQVJDSFlfUkVRVUVT
VF9FUlI7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLQogc3RhdGljIGJvb2wgY2FuQXR0YWNo
QXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21pY1N0cmluZz4+IHRhZ05hbWVzID0gW10gewpAQCAt
MTg0MywyMyArMTgzMiwxNCBAQCBzdGF0aWMgYm9vbCBjYW5BdHRhY2hBdXRob3JTaGFkb3dSb290
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJuIHRhZ05hbWVzLmdldCgpLmNvbnRh
aW5zKGxvY2FsTmFtZSkgfHwgRG9jdW1lbnQ6OnZhbGlkYXRlQ3VzdG9tRWxlbWVudE5hbWUobG9j
YWxOYW1lKSA9PSBDdXN0b21FbGVtZW50TmFtZVZhbGlkYXRpb25TdGF0dXM6OlZhbGlkOwogfQog
Ci1SZWZQdHI8U2hhZG93Um9vdD4gRWxlbWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jv
b3RJbml0JiBpbml0LCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPFJlZjxTaGFkb3dS
b290Pj4gRWxlbWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0JiBpbml0KQog
ewotICAgIGlmICghY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdCgqdGhpcykpIHsKLSAgICAgICAg
ZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgaWYgKHNoYWRvd1Jvb3QoKSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoaW5pdC5tb2RlID09
IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQorICAgIGlmICghY2FuQXR0YWNoQXV0aG9y
U2hhZG93Um9vdCgqdGhpcykpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9S
VEVEX0VSUiB9OworICAgIGlmIChzaGFkb3dSb290KCkpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgIGlmIChpbml0Lm1vZGUgPT0gU2hhZG93Um9v
dE1vZGU6OlVzZXJBZ2VudCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9
OwogICAgIGF1dG8gc2hhZG93ID0gU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIGluaXQu
bW9kZSk7CiAgICAgYWRkU2hhZG93Um9vdChzaGFkb3cuY29weVJlZigpKTsKICAgICByZXR1cm4g
V1RGTW92ZShzaGFkb3cpOwpAQCAtMTg2NywzOCArMTg0NywzMiBAQCBSZWZQdHI8U2hhZG93Um9v
dD4gRWxlbWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0JiBpbml0LCBFeGNl
cHRpb25DbwogCiBTaGFkb3dSb290KiBFbGVtZW50OjpzaGFkb3dSb290Rm9yQmluZGluZ3MoSlND
OjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFk
b3dSb290KCk7Ci0gICAgaWYgKCFyb290KQorICAgIGF1dG8qIHNoYWRvdyA9IHNoYWRvd1Jvb3Qo
KTsKKyAgICBpZiAoIXNoYWRvdykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAo
cm9vdC0+bW9kZSgpICE9IFNoYWRvd1Jvb3RNb2RlOjpPcGVuKSB7Ci0gICAgICAgIGlmICghSlND
Ojpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LT53b3JsZCgpLnNoYWRvd1Jvb3RJc0Fsd2F5c09wZW4oKSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gcm9vdDsKKyAgICBpZiAoc2hhZG93LT5tb2RlKCkg
PT0gU2hhZG93Um9vdE1vZGU6Ok9wZW4pCisgICAgICAgIHJldHVybiBzaGFkb3c7CisgICAgaWYg
KEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+d29ybGQoKS5zaGFkb3dSb290SXNBbHdheXNPcGVuKCkpCisgICAgICAgIHJldHVybiBz
aGFkb3c7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLQogU2hhZG93Um9vdCogRWxlbWVudDo6
dXNlckFnZW50U2hhZG93Um9vdCgpIGNvbnN0CiB7Ci0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRv
d1Jvb3QgPSB0aGlzLT5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgQVNTRVJUKHNoYWRvd1Jvb3Qt
Pm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KTsKLSAgICAgICAgcmV0dXJuIHNo
YWRvd1Jvb3Q7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOworICAgIEFTU0VSVCghc2hhZG93
Um9vdCgpIHx8IHNoYWRvd1Jvb3QoKS0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdl
bnQpOworICAgIHJldHVybiBzaGFkb3dSb290KCk7CiB9CiAKIFNoYWRvd1Jvb3QmIEVsZW1lbnQ6
OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKQogewotICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jv
b3QgPSB1c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgaWYgKCFzaGFkb3dSb290KSB7Ci0gICAg
ICAgIGFkZFNoYWRvd1Jvb3QoU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIFNoYWRvd1Jv
b3RNb2RlOjpVc2VyQWdlbnQpKTsKLSAgICAgICAgc2hhZG93Um9vdCA9IHVzZXJBZ2VudFNoYWRv
d1Jvb3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuICpzaGFkb3dSb290OworICAgIGlmIChhdXRvKiBz
aGFkb3cgPSB1c2VyQWdlbnRTaGFkb3dSb290KCkpCisgICAgICAgIHJldHVybiAqc2hhZG93Owor
ICAgIGF1dG8gbmV3U2hhZG93ID0gU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIFNoYWRv
d1Jvb3RNb2RlOjpVc2VyQWdlbnQpOworICAgIFNoYWRvd1Jvb3QmIHNoYWRvdyA9IG5ld1NoYWRv
dzsKKyAgICBhZGRTaGFkb3dSb290KFdURk1vdmUobmV3U2hhZG93KSk7CisgICAgcmV0dXJuIHNo
YWRvdzsKIH0KIAotICAgIAogI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCiAKIHZvaWQgRWxl
bWVudDo6c2V0SXNEZWZpbmVkQ3VzdG9tRWxlbWVudChKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2Um
IGVsZW1lbnRJbnRlcmZhY2UpCkBAIC0xOTUzLDcgKzE5MjcsNiBAQCBDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZSogRWxlbWVudDo6cmVhY3Rpb25RdWV1ZSgpIGNvbnN0CiAKICNlbmRpZgogCi0K
IGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewog
ICAgIHJldHVybiBwc2V1ZG8oKTsKQEAgLTIxNTksMjQgKzIxMzIsMjQgQEAgY29uc3QgVmVjdG9y
PFJlZlB0cjxBdHRyPj4mIEVsZW1lbnQ6OmF0dHJOb2RlTGlzdCgpCiAgICAgcmV0dXJuICphdHRy
Tm9kZUxpc3RGb3JFbGVtZW50KCp0aGlzKTsKIH0KIAotUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OnNl
dEF0dHJpYnV0ZU5vZGUoQXR0ciYgYXR0ck5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0
aW9uT3I8UmVmUHRyPEF0dHI+PiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKEF0dHImIGF0dHJO
b2RlKQogewogICAgIFJlZlB0cjxBdHRyPiBvbGRBdHRyTm9kZSA9IGF0dHJJZkV4aXN0cyhhdHRy
Tm9kZS5xdWFsaWZpZWROYW1lKCkubG9jYWxOYW1lKCksIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNh
c2UoKnRoaXMpKTsKICAgICBpZiAob2xkQXR0ck5vZGUuZ2V0KCkgPT0gJmF0dHJOb2RlKQotICAg
ICAgICByZXR1cm4gJmF0dHJOb2RlOyAvLyBUaGlzIEF0dHIgaXMgYWxyZWFkeSBhdHRhY2hlZCB0
byB0aGUgZWxlbWVudC4KKyAgICAgICAgcmV0dXJuIFdURk1vdmUob2xkQXR0ck5vZGUpOwogCiAg
ICAgLy8gSU5VU0VfQVRUUklCVVRFX0VSUjogUmFpc2VkIGlmIG5vZGUgaXMgYW4gQXR0ciB0aGF0
IGlzIGFscmVhZHkgYW4gYXR0cmlidXRlIG9mIGFub3RoZXIgRWxlbWVudCBvYmplY3QuCiAgICAg
Ly8gVGhlIERPTSB1c2VyIG11c3QgZXhwbGljaXRseSBjbG9uZSBBdHRyIG5vZGVzIHRvIHJlLXVz
ZSB0aGVtIGluIG90aGVyIGVsZW1lbnRzLgotICAgIGlmIChhdHRyTm9kZS5vd25lckVsZW1lbnQo
KSAmJiBhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVjID0gSU5V
U0VfQVRUUklCVVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlm
IChhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAmJiBhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAhPSB0
aGlzKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5VU0VfQVRUUklCVVRFX0VSUiB9Owog
CiAgICAgc3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7Ci0gICAgVW5pcXVlRWxlbWVudERhdGEm
IGVsZW1lbnREYXRhID0gZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKTsKKyAgICBhdXRvJiBlbGVt
ZW50RGF0YSA9IGVuc3VyZVVuaXF1ZUVsZW1lbnREYXRhKCk7CiAKLSAgICB1bnNpZ25lZCBleGlz
dGluZ0F0dHJpYnV0ZUluZGV4ID0gZWxlbWVudERhdGEuZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1l
KGF0dHJOb2RlLnF1YWxpZmllZE5hbWUoKS5sb2NhbE5hbWUoKSwgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSgqdGhpcykpOwotICAgIGlmIChleGlzdGluZ0F0dHJpYnV0ZUluZGV4ICE9IEVsZW1l
bnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCkgeworICAgIGF1dG8gZXhpc3RpbmdBdHRyaWJ1dGVJ
bmRleCA9IGVsZW1lbnREYXRhLmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFs
aWZpZWROYW1lKCkubG9jYWxOYW1lKCksIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UoKnRoaXMp
KTsKKyAgICBpZiAoZXhpc3RpbmdBdHRyaWJ1dGVJbmRleCA9PSBFbGVtZW50RGF0YTo6YXR0cmli
dXRlTm90Rm91bmQpCisgICAgICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGVsZW1lbnREYXRhLmZp
bmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCkpLCBhdHRyTm9k
ZS5xdWFsaWZpZWROYW1lKCksIGF0dHJOb2RlLnZhbHVlKCksIE5vdEluU3luY2hyb25pemF0aW9u
T2ZMYXp5QXR0cmlidXRlKTsKKyAgICBlbHNlIHsKICAgICAgICAgY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUgPSBhdHRyaWJ1dGVBdChleGlzdGluZ0F0dHJpYnV0ZUluZGV4KTsKICAgICAgICAg
aWYgKG9sZEF0dHJOb2RlKQogICAgICAgICAgICAgZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVudFdp
dGhWYWx1ZShvbGRBdHRyTm9kZS5nZXQoKSwgYXR0cmlidXRlLnZhbHVlKCkpOwpAQCAtMjE4Nywz
OCArMjE2MCwzMiBAQCBSZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZShBdHRy
JiBhdHRyTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgICAgICBzZXRBdHRyaWJ1dGVJ
bnRlcm5hbChleGlzdGluZ0F0dHJpYnV0ZUluZGV4LCBhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCks
IGF0dHJOb2RlLnZhbHVlKCksIE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChleGlz
dGluZ0F0dHJpYnV0ZUluZGV4LCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBleGlzdGluZ0F0dHJpYnV0ZUluZGV4Rm9yRnVsbFF1YWxp
ZmllZE5hbWUgPSBlbGVtZW50RGF0YS5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5vZGUu
cXVhbGlmaWVkTmFtZSgpKTsKLSAgICAgICAgICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGV4aXN0
aW5nQXR0cmlidXRlSW5kZXhGb3JGdWxsUXVhbGlmaWVkTmFtZSwgYXR0ck5vZGUucXVhbGlmaWVk
TmFtZSgpLCBhdHRyTm9kZS52YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJp
YnV0ZSk7CisgICAgICAgICAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChlbGVtZW50RGF0YS5maW5k
QXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpKSwgYXR0ck5vZGUu
cXVhbGlmaWVkTmFtZSgpLCBhdHRyTm9kZS52YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlvbk9m
TGF6eUF0dHJpYnV0ZSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICB1bnNpZ25l
ZCBleGlzdGluZ0F0dHJpYnV0ZUluZGV4Rm9yRnVsbFF1YWxpZmllZE5hbWUgPSBlbGVtZW50RGF0
YS5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpKTsKLSAg
ICAgICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoZXhpc3RpbmdBdHRyaWJ1dGVJbmRleEZvckZ1bGxR
dWFsaWZpZWROYW1lLCBhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCksIGF0dHJOb2RlLnZhbHVlKCks
IE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKICAgICB9CiAgICAgaWYgKGF0
dHJOb2RlLm93bmVyRWxlbWVudCgpICE9IHRoaXMpIHsKICAgICAgICAgYXR0ck5vZGUuYXR0YWNo
VG9FbGVtZW50KHRoaXMpOwogICAgICAgICB0cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKCZhdHRy
Tm9kZSk7CiAgICAgICAgIGVuc3VyZUF0dHJOb2RlTGlzdEZvckVsZW1lbnQoKnRoaXMpLmFwcGVu
ZCgmYXR0ck5vZGUpOwogICAgIH0KLSAgICByZXR1cm4gb2xkQXR0ck5vZGU7CisgICAgcmV0dXJu
IFdURk1vdmUob2xkQXR0ck5vZGUpOwogfQogCi1SZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0
cmlidXRlTm9kZU5TKEF0dHImIGF0dHJOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlv
bk9yPFJlZlB0cjxBdHRyPj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZU5TKEF0dHImIGF0dHJO
b2RlKQogewogICAgIFJlZlB0cjxBdHRyPiBvbGRBdHRyTm9kZSA9IGF0dHJJZkV4aXN0cyhhdHRy
Tm9kZS5xdWFsaWZpZWROYW1lKCkpOwogICAgIGlmIChvbGRBdHRyTm9kZS5nZXQoKSA9PSAmYXR0
ck5vZGUpCi0gICAgICAgIHJldHVybiAmYXR0ck5vZGU7IC8vIFRoaXMgQXR0ciBpcyBhbHJlYWR5
IGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50LgorICAgICAgICByZXR1cm4gV1RGTW92ZShvbGRBdHRy
Tm9kZSk7CiAKICAgICAvLyBJTlVTRV9BVFRSSUJVVEVfRVJSOiBSYWlzZWQgaWYgbm9kZSBpcyBh
biBBdHRyIHRoYXQgaXMgYWxyZWFkeSBhbiBhdHRyaWJ1dGUgb2YgYW5vdGhlciBFbGVtZW50IG9i
amVjdC4KICAgICAvLyBUaGUgRE9NIHVzZXIgbXVzdCBleHBsaWNpdGx5IGNsb25lIEF0dHIgbm9k
ZXMgdG8gcmUtdXNlIHRoZW0gaW4gb3RoZXIgZWxlbWVudHMuCi0gICAgaWYgKGF0dHJOb2RlLm93
bmVyRWxlbWVudCgpICYmIGF0dHJOb2RlLm93bmVyRWxlbWVudCgpICE9IHRoaXMpIHsKLSAgICAg
ICAgZWMgPSBJTlVTRV9BVFRSSUJVVEVfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9CisgICAgaWYgKGF0dHJOb2RlLm93bmVyRWxlbWVudCgpICYmIGF0dHJOb2RlLm93bmVyRWxl
bWVudCgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlVTRV9BVFRSSUJV
VEVfRVJSIH07CiAKICAgICBzeW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKLSAgICBVbmlxdWVF
bGVtZW50RGF0YSYgZWxlbWVudERhdGEgPSBlbnN1cmVVbmlxdWVFbGVtZW50RGF0YSgpOworICAg
IGF1dG8mIGVsZW1lbnREYXRhID0gZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKTsKIAotICAgIHVu
c2lnbmVkIGluZGV4ID0gZWxlbWVudERhdGEuZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKGF0dHJO
b2RlLnF1YWxpZmllZE5hbWUoKSk7CisgICAgYXV0byBpbmRleCA9IGVsZW1lbnREYXRhLmZpbmRB
dHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCkpOwogICAgIGlmIChp
bmRleCAhPSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQpIHsKICAgICAgICAgaWYgKG9s
ZEF0dHJOb2RlKQogICAgICAgICAgICAgZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVudFdpdGhWYWx1
ZShvbGRBdHRyTm9kZS5nZXQoKSwgZWxlbWVudERhdGEuYXR0cmlidXRlQXQoaW5kZXgpLnZhbHVl
KCkpOwpAQCAtMjIzMiw2MiArMjE5OSw1NiBAQCBSZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0
cmlidXRlTm9kZU5TKEF0dHImIGF0dHJOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB0cmVl
U2NvcGUoKS5hZG9wdElmTmVlZGVkKCZhdHRyTm9kZSk7CiAgICAgZW5zdXJlQXR0ck5vZGVMaXN0
Rm9yRWxlbWVudCgqdGhpcykuYXBwZW5kKCZhdHRyTm9kZSk7CiAKLSAgICByZXR1cm4gb2xkQXR0
ck5vZGU7CisgICAgcmV0dXJuIFdURk1vdmUob2xkQXR0ck5vZGUpOwogfQogCi1SZWZQdHI8QXR0
cj4gRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTm9kZShBdHRyJiBhdHRyLCBFeGNlcHRpb25Db2Rl
JiBlYykKK0V4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTm9k
ZShBdHRyJiBhdHRyKQogewotICAgIGlmIChhdHRyLm93bmVyRWxlbWVudCgpICE9IHRoaXMpIHsK
LSAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9CisgICAgaWYgKGF0dHIub3duZXJFbGVtZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKIAogICAgIEFTU0VSVCgmZG9jdW1lbnQoKSA9
PSAmYXR0ci5kb2N1bWVudCgpKTsKIAogICAgIHN5bmNocm9uaXplQWxsQXR0cmlidXRlcygpOwog
Ci0gICAgaWYgKCFtX2VsZW1lbnREYXRhKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlmICghbV9lbGVtZW50RGF0YSkK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKIAotICAgIHVuc2ln
bmVkIGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPSBtX2VsZW1lbnREYXRhLT5maW5kQXR0cmlidXRl
SW5kZXhCeU5hbWUoYXR0ci5xdWFsaWZpZWROYW1lKCkpOworICAgIGF1dG8gZXhpc3RpbmdBdHRy
aWJ1dGVJbmRleCA9IG1fZWxlbWVudERhdGEtPmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRy
LnF1YWxpZmllZE5hbWUoKSk7CisgICAgaWYgKGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPT0gRWxl
bWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5kKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tk9UX0ZPVU5EX0VSUiB9OwogCi0gICAgaWYgKGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPT0gRWxl
bWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5kKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VS
UjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIFJlZjxBdHRyPiBvbGRBdHRy
Tm9kZSB7IGF0dHIgfTsKIAotICAgIFJlZlB0cjxBdHRyPiBhdHRyTm9kZSA9ICZhdHRyOwogICAg
IGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFsdWUoJmF0dHIsIG1fZWxlbWVudERhdGEt
PmF0dHJpYnV0ZUF0KGV4aXN0aW5nQXR0cmlidXRlSW5kZXgpLnZhbHVlKCkpOwogICAgIHJlbW92
ZUF0dHJpYnV0ZUludGVybmFsKGV4aXN0aW5nQXR0cmlidXRlSW5kZXgsIE5vdEluU3luY2hyb25p
emF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKLSAgICByZXR1cm4gYXR0ck5vZGU7CisKKyAgICByZXR1
cm4gV1RGTW92ZShvbGRBdHRyTm9kZSk7CiB9CiAKLWJvb2wgRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGVOYW1lKFF1YWxpZmllZE5hbWUmIG91dCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CitFeGNlcHRpb25PcjxRdWFsaWZpZWROYW1lPiBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZU5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVh
bGlmaWVkTmFtZSkKIHsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTdHJpbmcgcHJl
Zml4LCBsb2NhbE5hbWU7CiAgICAgaWYgKCFEb2N1bWVudDo6cGFyc2VRdWFsaWZpZWROYW1lKHF1
YWxpZmllZE5hbWUsIHByZWZpeCwgbG9jYWxOYW1lLCBlYykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CiAgICAgQVNTRVJUKCFlYyk7CiAK
LSAgICBRdWFsaWZpZWROYW1lIHFOYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkp
OworICAgIFF1YWxpZmllZE5hbWUgcmVzdWx0IHsgcHJlZml4LCBsb2NhbE5hbWUsIG5hbWVzcGFj
ZVVSSSB9OwogCi0gICAgaWYgKCFEb2N1bWVudDo6aGFzVmFsaWROYW1lc3BhY2VGb3JBdHRyaWJ1
dGVzKHFOYW1lKSkgewotICAgICAgICBlYyA9IE5BTUVTUEFDRV9FUlI7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgaWYgKCFEb2N1bWVudDo6aGFzVmFsaWROYW1lc3BhY2VGb3JB
dHRyaWJ1dGVzKHJlc3VsdCkpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOQU1FU1BBQ0Vf
RVJSIH07CiAKLSAgICBvdXQgPSBxTmFtZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
V1RGTW92ZShyZXN1bHQpOwogfQogCi12b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxpZmll
ZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhj
ZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6c2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBRdWFsaWZpZWROYW1lIHBhcnNlZE5hbWUgPSBh
bnlOYW1lOwotICAgIGlmICghcGFyc2VBdHRyaWJ1dGVOYW1lKHBhcnNlZE5hbWUsIG5hbWVzcGFj
ZVVSSSwgcXVhbGlmaWVkTmFtZSwgZWMpKQotICAgICAgICByZXR1cm47Ci0gICAgc2V0QXR0cmli
dXRlKHBhcnNlZE5hbWUsIHZhbHVlKTsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlQXR0cmlidXRl
TmFtZShuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpOworICAgIGlmIChyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAg
IHNldEF0dHJpYnV0ZShyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCksIHZhbHVlKTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZUludGVybmFsKHVu
c2lnbmVkIGluZGV4LCBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgaW5TeW5jaHJvbml6
YXRpb25PZkxhenlBdHRyaWJ1dGUpCkBAIC0yNTU1LDE3ICsyNTE2LDE0IEBAIGJvb2wgRWxlbWVu
dDo6ZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJlZ2luKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgRWxlbWVudDo6bWVyZ2VXaXRoTmV4dFRleHROb2RlKFRleHQmIG5vZGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6bWVyZ2VXaXRoTmV4dFRleHRO
b2RlKFRleHQmIG5vZGUpCiB7CiAgICAgYXV0byogbmV4dCA9IG5vZGUubmV4dFNpYmxpbmcoKTsK
ICAgICBpZiAoIWlzPFRleHQ+KG5leHQpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgUmVmPFRleHQ+IHRleHROZXh0IHsgZG93bmNhc3Q8VGV4dD4oKm5leHQpIH07
Ci0KICAgICBub2RlLmFwcGVuZERhdGEodGV4dE5leHQtPmRhdGEoKSk7Ci0gICAgYXV0byByZXN1
bHQgPSB0ZXh0TmV4dC0+cmVtb3ZlKCk7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
LSAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKKyAgICByZXR1
cm4gdGV4dE5leHQtPnJlbW92ZSgpOwogfQogCiBTdHJpbmcgRWxlbWVudDo6aW5uZXJIVE1MKCkg
Y29uc3QKQEAgLTI1NzgsMzkgKzI1MzYsNDUgQEAgU3RyaW5nIEVsZW1lbnQ6Om91dGVySFRNTCgp
IGNvbnN0CiAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCgqdGhpcyk7CiB9CiAKLXZvaWQgRWxlbWVu
dDo6c2V0T3V0ZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYgZWMpCitF
eGNlcHRpb25Pcjx2b2lkPiBFbGVtZW50OjpzZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJiBodG1s
KQogewotICAgIEVsZW1lbnQqIHAgPSBwYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYgKCFpczxIVE1M
RWxlbWVudD4ocCkpIHsKLSAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBwYXJlbnQg
PSBkb3duY2FzdDxIVE1MRWxlbWVudD4ocCk7CisgICAgYXV0byogcGFyZW50RWxlbWVudCA9IHRo
aXMtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihwYXJlbnRFbGVt
ZW50KSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUiB9OworCisgICAgUmVmPEhUTUxFbGVtZW50PiBwYXJlbnQgPSBkb3duY2FzdDxIVE1MRWxl
bWVudD4oKnBhcmVudEVsZW1lbnQpOwogICAgIFJlZlB0cjxOb2RlPiBwcmV2ID0gcHJldmlvdXNT
aWJsaW5nKCk7CiAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBuZXh0U2libGluZygpOwogCi0gICAg
YXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoKnBhcmVudCwg
aHRtbCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKLSAgICBpZiAoZnJhZ21lbnQuaGFzRXhjZXB0
aW9uKCkpIHsKLSAgICAgICAgZWMgPSBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAorICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKHBhcmVudCwgaHRtbCwgQWxsb3dTY3JpcHRpbmdD
b250ZW50KTsKKyAgICBpZiAoZnJhZ21lbnQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBwYXJlbnQtPnJlcGxhY2VDaGlsZChmcmFnbWVudC5yZWxlYXNlUmV0dXJuVmFsdWUo
KS5nZXQoKSwgKnRoaXMsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBlYyB9OworCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0ID8gbmV4dC0+cHJldmlv
dXNTaWJsaW5nKCkgOiBudWxscHRyOwotICAgIGlmICghZWMgJiYgaXM8VGV4dD4obm9kZS5nZXQo
KSkpCi0gICAgICAgIG1lcmdlV2l0aE5leHRUZXh0Tm9kZShkb3duY2FzdDxUZXh0Pigqbm9kZSks
IGVjKTsKLSAgICBpZiAoIWVjICYmIGlzPFRleHQ+KHByZXYuZ2V0KCkpKQotICAgICAgICBtZXJn
ZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKnByZXYpLCBlYyk7CisgICAgaWYgKGlz
PFRleHQ+KG5vZGUuZ2V0KCkpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbWVyZ2VXaXRoTmV4
dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpub2RlKSk7CisgICAgICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KTsKKyAgICB9CisgICAgaWYgKGlzPFRleHQ+KHByZXYuZ2V0KCkpKSB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gbWVyZ2VXaXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpwcmV2KSk7Cisg
ICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKIH0KIAogCi12
b2lkIEVsZW1lbnQ6OnNldElubmVySFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0
cmluZyYgaHRtbCkKIHsKICAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGb3JJbm5l
ck91dGVySFRNTCgqdGhpcywgaHRtbCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKLSAgICBpZiAo
ZnJhZ21lbnQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZWMgPSBmcmFnbWVudC5yZWxlYXNl
RXhjZXB0aW9uKCkuY29kZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChmcmFn
bWVudC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2VFeGNl
cHRpb24oKTsKIAogICAgIENvbnRhaW5lck5vZGUqIGNvbnRhaW5lcjsKICAgICBpZiAoIWlzPEhU
TUxUZW1wbGF0ZUVsZW1lbnQ+KCp0aGlzKSkKQEAgLTI2MTgsOSArMjU4Miw3IEBAIHZvaWQgRWxl
bWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgZWxzZQogICAgICAgICBjb250YWluZXIgPSAmZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxl
bWVudD4oKnRoaXMpLmNvbnRlbnQoKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gcmVwbGFjZUNoaWxk
cmVuV2l0aEZyYWdtZW50KCpjb250YWluZXIsIGZyYWdtZW50LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
KTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBlYyA9IGZyYWdtZW50
LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7CisgICAgcmV0dXJuIHJlcGxhY2VDaGlsZHJlbldp
dGhGcmFnbWVudCgqY29udGFpbmVyLCBmcmFnbWVudC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CiB9
CiAKIFN0cmluZyBFbGVtZW50Ojppbm5lclRleHQoKQpAQCAtMjk5MywxOCArMjk1NSwyNCBAQCBi
b29sIEVsZW1lbnQ6Om1hdGNoZXNEZWZhdWx0UHNldWRvQ2xhc3MoKSBjb25zdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBFbGVtZW50OjptYXRjaGVzKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8Ym9vbD4gRWxlbWVudDo6bWF0Y2hl
cyhjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgIFNlbGVjdG9yUXVlcnkqIHNlbGVjdG9y
UXVlcnkgPSBkb2N1bWVudCgpLnNlbGVjdG9yUXVlcnlGb3JTdHJpbmcoc2VsZWN0b3IsIGVjKTsK
LSAgICByZXR1cm4gc2VsZWN0b3JRdWVyeSAmJiBzZWxlY3RvclF1ZXJ5LT5tYXRjaGVzKCp0aGlz
KTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBhdXRvKiBxdWVyeSA9IGRvY3VtZW50
KCkuc2VsZWN0b3JRdWVyeUZvclN0cmluZyhzZWxlY3RvciwgZWMpOworICAgIGlmIChlYykKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgcmV0dXJuIHF1ZXJ5ICYmIHF1ZXJ5
LT5tYXRjaGVzKCp0aGlzKTsKIH0KIAotRWxlbWVudCogRWxlbWVudDo6Y2xvc2VzdChjb25zdCBT
dHJpbmcmIHNlbGVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPEVsZW1lbnQq
PiBFbGVtZW50OjpjbG9zZXN0KGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiB7Ci0gICAgU2VsZWN0
b3JRdWVyeSogc2VsZWN0b3JRdWVyeSA9IGRvY3VtZW50KCkuc2VsZWN0b3JRdWVyeUZvclN0cmlu
ZyhzZWxlY3RvciwgZWMpOwotICAgIGlmIChzZWxlY3RvclF1ZXJ5KQotICAgICAgICByZXR1cm4g
c2VsZWN0b3JRdWVyeS0+Y2xvc2VzdCgqdGhpcyk7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYXV0byogcXVlcnkgPSBkb2N1bWVudCgpLnNlbGVj
dG9yUXVlcnlGb3JTdHJpbmcoc2VsZWN0b3IsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBlYyB9OworICAgIGlmICghcXVlcnkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBxdWVyeS0+Y2xvc2VzdCgqdGhpcyk7CiB9CiAKIGJvb2wgRWxl
bWVudDo6c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpIGNvbnN0CkBAIC0zMDc5LDYgKzMwNDcs
NyBAQCB2b2lkIEVsZW1lbnQ6OnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgdQogfQogCiAjaWYgRU5BQkxFKElORElFX1VJKQor
CiB2b2lkIEVsZW1lbnQ6OnNldFVJQWN0aW9ucyhjb25zdCBBdG9taWNTdHJpbmcmIGFjdGlvbnMp
CiB7CiAgICAgc2V0QXR0cmlidXRlKHVpYWN0aW9uc0F0dHIsIGFjdGlvbnMpOwpAQCAtMzA4OCw2
ICszMDU3LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpVSUFjdGlvbnMoKSBjb25z
dAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodWlhY3Rpb25zQXR0cik7CiB9CisKICNlbmRp
ZgogCiBib29sIEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9kZSYg
Y2hpbGQpIGNvbnN0CkBAIC0zNjgzLDcgKzM2NTMsNyBAQCBib29sIEVsZW1lbnQ6OmllRm9yYmlk
c0luc2VydEhUTUwoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogRWxlbWVu
dDo6aW5zZXJ0QWRqYWNlbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgUmVmPE5vZGU+JiYgbmV3Q2hp
bGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8Tm9kZSo+IEVsZW1lbnQ6Omluc2Vy
dEFkamFjZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIFJlZjxOb2RlPiYmIG5ld0NoaWxkKQogewog
ICAgIC8vIEluIEludGVybmV0IEV4cGxvcmVyIGlmIHRoZSBlbGVtZW50IGhhcyBubyBwYXJlbnQg
YW5kIHdoZXJlIGlzICJiZWZvcmVCZWdpbiIgb3IgImFmdGVyRW5kIiwKICAgICAvLyBhIGRvY3Vt
ZW50IGZyYWdtZW50IGlzIGNyZWF0ZWQgYW5kIHRoZSBlbGVtZW50cyBhcHBlbmRlZCBpbiB0aGUg
Y29ycmVjdCBvcmRlci4gVGhpcyBkb2N1bWVudApAQCAtMzY5Myw3NiArMzY2MywxMDQgQEAgTm9k
ZSogRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgUmVmPE5vZGU+
JiYgbmV3Q2hpbGQsIEV4Y2VwdGkKICAgICAvLyBPcGVyYSBhbHNvIGFwcGVhcnMgdG8gZGlzYWxs
b3cgc3VjaCB1c2FnZS4KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3
aGVyZSwgImJlZm9yZWJlZ2luIikpIHsKLSAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
dGhpcy0+cGFyZW50Tm9kZSgpOwotICAgICAgICByZXR1cm4gKHBhcmVudCAmJiBwYXJlbnQtPmlu
c2VydEJlZm9yZShuZXdDaGlsZCwgdGhpcywgZWMpKSA/IG5ld0NoaWxkLnB0cigpIDogbnVsbHB0
cjsKKyAgICAgICAgYXV0byogcGFyZW50ID0gdGhpcy0+cGFyZW50Tm9kZSgpOworICAgICAgICBp
ZiAoIXBhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gcGFyZW50LT5pbnNlcnRCZWZv
cmUobmV3Q2hpbGQsIHRoaXMsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgICAgIHJldHVybiBzdWNjZXNzID8gbmV3Q2hpbGQu
cHRyKCkgOiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZSh3aGVyZSwgImFmdGVyYmVnaW4iKSkKLSAgICAgICAgcmV0dXJuIGluc2VydEJlZm9y
ZShuZXdDaGlsZCwgZmlyc3RDaGlsZCgpLCBlYykgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYWZ0ZXJiZWdp
biIpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBib29sIHN1Y2Nl
c3MgPSBpbnNlcnRCZWZvcmUobmV3Q2hpbGQsIGZpcnN0Q2hpbGQoKSwgZWMpOworICAgICAgICBp
ZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3MgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7CisgICAgfQogCi0gICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYmVmb3JlZW5kIikpCi0gICAg
ICAgIHJldHVybiBhcHBlbmRDaGlsZChuZXdDaGlsZCwgZWMpID8gbmV3Q2hpbGQucHRyKCkgOiBu
dWxscHRyOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3aGVyZSwgImJl
Zm9yZWVuZCIpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBib29s
IHN1Y2Nlc3MgPSBhcHBlbmRDaGlsZChuZXdDaGlsZCwgZWMpOworICAgICAgICBpZiAoZWMpCisg
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nl
c3MgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7CisgICAgfQogCiAgICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYWZ0ZXJlbmQiKSkgewotICAgICAgICBDb250
YWluZXJOb2RlKiBwYXJlbnQgPSB0aGlzLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIHJldHVybiAo
cGFyZW50ICYmIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBuZXh0U2libGluZygpLCBl
YykpID8gbmV3Q2hpbGQucHRyKCkgOiBudWxscHRyOworICAgICAgICBhdXRvKiBwYXJlbnQgPSB0
aGlzLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBib29s
IHN1Y2Nlc3MgPSBwYXJlbnQtPmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcoKSwg
ZWMpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMg
fTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7CiAg
ICAgfQogCi0gICAgZWMgPSBTWU5UQVhfRVJSOwotICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CiB9CiAKLUVsZW1lbnQqIEVsZW1lbnQ6Omlu
c2VydEFkamFjZW50RWxlbWVudChjb25zdCBTdHJpbmcmIHdoZXJlLCBFbGVtZW50JiBuZXdDaGls
ZCwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25PcjxFbGVtZW50Kj4gRWxlbWVudDo6aW5z
ZXJ0QWRqYWNlbnRFbGVtZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIG5ld0NoaWxk
KQogewotICAgIE5vZGUqIHJldHVyblZhbHVlID0gaW5zZXJ0QWRqYWNlbnQod2hlcmUsIG5ld0No
aWxkLCBlYyk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXJldHVyblZh
bHVlIHx8IGlzPEVsZW1lbnQ+KCpyZXR1cm5WYWx1ZSkpOwotICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50PihyZXR1cm5WYWx1ZSk7CisgICAgYXV0byByZXN1bHQgPSBpbnNlcnRBZGphY2VudCh3
aGVyZSwgbmV3Q2hpbGQpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50PihyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwogfQogCiAvLyBTdGVwIDEgb2Yg
aHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyNkb20tZWxlbWVudC1pbnNlcnRhZGph
Y2VudGh0bWwuCi1zdGF0aWMgQ29udGFpbmVyTm9kZSogY29udGV4dE5vZGVGb3JJbnNlcnRpb24o
Y29uc3QgU3RyaW5nJiB3aGVyZSwgRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMp
CitzdGF0aWMgRXhjZXB0aW9uT3I8Q29udGFpbmVyTm9kZSo+IGNvbnRleHROb2RlRm9ySW5zZXJ0
aW9uKGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYmVmb3JlYmVnaW4iKSB8fCBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3aGVyZSwgImFmdGVyZW5kIikpIHsKLSAgICAgICAg
YXV0byogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAoIXBhcmVu
dCB8fCBpczxEb2N1bWVudD4oKnBhcmVudCkpIHsKLSAgICAgICAgICAgIGVjID0gTk9fTU9ESUZJ
Q0FUSU9OX0FMTE9XRURfRVJSOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KKyAgICAgICAgYXV0byogcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKCk7CisgICAgICAg
IGlmICghcGFyZW50IHx8IGlzPERvY3VtZW50PigqcGFyZW50KSkKKyAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKICAgICAgICAgcmV0
dXJuIHBhcmVudDsKICAgICB9CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHdoZXJlLCAiYWZ0ZXJiZWdpbiIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdo
ZXJlLCAiYmVmb3JlZW5kIikpCi0gICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIGVjID0gIFNZ
TlRBWF9FUlI7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmZWxlbWVudDsK
KyAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworfQorCisvLyBTdGVwIDIgb2Yg
aHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyNkb20tZWxlbWVudC1pbnNlcnRhZGph
Y2VudGh0bWwuCitzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPEVsZW1lbnQ+PiBjb250ZXh0RWxlbWVu
dEZvckluc2VydGlvbihjb25zdCBTdHJpbmcmIHdoZXJlLCBFbGVtZW50JiBlbGVtZW50KQorewor
ICAgIGF1dG8gY29udGV4dE5vZGVSZXN1bHQgPSBjb250ZXh0Tm9kZUZvckluc2VydGlvbih3aGVy
ZSwgZWxlbWVudCk7CisgICAgaWYgKGNvbnRleHROb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gY29udGV4dE5vZGVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAg
IGF1dG8mIGNvbnRleHROb2RlID0gKmNvbnRleHROb2RlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpOworICAgIGlmICghaXM8RWxlbWVudD4oY29udGV4dE5vZGUpIHx8IChjb250ZXh0Tm9kZS5k
b2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgaXM8SFRNTEh0bWxFbGVtZW50Pihjb250ZXh0
Tm9kZSkpKQorICAgICAgICByZXR1cm4gUmVmPEVsZW1lbnQ+IHsgSFRNTEJvZHlFbGVtZW50Ojpj
cmVhdGUoY29udGV4dE5vZGUuZG9jdW1lbnQoKSkgfTsKKyAgICByZXR1cm4gUmVmPEVsZW1lbnQ+
IHsgZG93bmNhc3Q8RWxlbWVudD4oY29udGV4dE5vZGUpIH07CiB9CiAKIC8vIGh0dHBzOi8vdzNj
LmdpdGh1Yi5pby9ET00tUGFyc2luZy8jZG9tLWVsZW1lbnQtaW5zZXJ0YWRqYWNlbnRodG1sCi12
b2lkIEVsZW1lbnQ6Omluc2VydEFkamFjZW50SFRNTChjb25zdCBTdHJpbmcmIHdoZXJlLCBjb25z
dCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lkPiBF
bGVtZW50OjppbnNlcnRBZGphY2VudEhUTUwoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3QgU3Ry
aW5nJiBtYXJrdXApCiB7Ci0gICAgLy8gU3RlcCAxLgotICAgIGF1dG8qIGNvbnRleHROb2RlID0g
Y29udGV4dE5vZGVGb3JJbnNlcnRpb24od2hlcmUsIHRoaXMsIGVjKTsKLSAgICBpZiAoIWNvbnRl
eHROb2RlKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGNvbnRleHRFbGVt
ZW50OwotICAgIC8vIFN0ZXAgMi4KLSAgICBpZiAoIWlzPEVsZW1lbnQ+KCpjb250ZXh0Tm9kZSkK
LSAgICAgICAgfHwgKGNvbnRleHROb2RlLT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYg
aXM8SFRNTEh0bWxFbGVtZW50PigqY29udGV4dE5vZGUpKSkgewotICAgICAgICBjb250ZXh0RWxl
bWVudCA9IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKGNvbnRleHROb2RlLT5kb2N1bWVudCgpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgY29udGV4dEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pihj
b250ZXh0Tm9kZSk7CisgICAgLy8gU3RlcHMgMSBhbmQgMi4KKyAgICBhdXRvIGNvbnRleHRFbGVt
ZW50ID0gY29udGV4dEVsZW1lbnRGb3JJbnNlcnRpb24od2hlcmUsICp0aGlzKTsKKyAgICBpZiAo
Y29udGV4dEVsZW1lbnQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBjb250ZXh0RWxl
bWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgLy8gU3RlcCAzLgotICAgIGF1dG8gZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKCpjb250ZXh0RWxlbWVudCwgbWFy
a3VwLCBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwotICAgIGlmIChmcmFnbWVudC5oYXNFeGNlcHRp
b24oKSkgewotICAgICAgICBlYyA9IGZyYWdtZW50LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50Rm9ySW5uZXJPdXRlckhUTUwoY29udGV4dEVsZW1lbnQucmVsZWFzZVJldHVyblZhbHVlKCks
IG1hcmt1cCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKKyAgICBpZiAoZnJhZ21lbnQuaGFzRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAg
ICAgLy8gU3RlcCA0LgotICAgIGluc2VydEFkamFjZW50KHdoZXJlLCBmcmFnbWVudC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSwgZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaW5zZXJ0QWRqYWNlbnQod2hl
cmUsIGZyYWdtZW50LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEVsZW1lbnQ6Omluc2VydEFkamFjZW50VGV4dChjb25z
dCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
RXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnRUZXh0KGNvbnN0IFN0cmlu
ZyYgd2hlcmUsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBpbnNlcnRBZGphY2VudCh3aGVy
ZSwgZG9jdW1lbnQoKS5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSwgZWMpOworICAgIGF1dG8gcmVzdWx0
ID0gaW5zZXJ0QWRqYWNlbnQod2hlcmUsIGRvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUodGV4dCkp
OworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDAzNTdkNzFhNWQ5NTRiODY4MDBkODM4Nzdm
Y2QyNjJiNWQ2MmU3MjkuLjdkY2IyZjg3MTFiOGU1Zjc2ZTYyZWZkYWVmMzk3ZDgwZjA0ODNmNjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjIsOCArMjIsNyBAQAogICoKICAqLwogCi0jaWZuZGVm
IEVsZW1lbnRfaAotI2RlZmluZSBFbGVtZW50X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
QVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMTEy
LDkgKzExMSw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNTdHJp
bmcmIGdldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0QXR0cmlidXRlTlMoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKSBj
b25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHN0YXRpYyBib29sIHBhcnNlQXR0cmlidXRlTmFtZShRdWFsaWZpZWROYW1lJiwgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVhbGlm
aWVkTmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QXR0
cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwor
ICAgIHN0YXRpYyBFeGNlcHRpb25PcjxRdWFsaWZpZWROYW1lPiBwYXJzZUF0dHJpYnV0ZU5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVh
bGlmaWVkTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0QXR0
cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAKICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGdldElkQXR0cmlidXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRJ
ZEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKQEAgLTE5MCw5ICsxODksOSBAQCBwdWJs
aWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0cj4gZ2V0QXR0cmlidXRlTm9kZShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxBdHRy
PiBnZXRBdHRyaWJ1dGVOb2RlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
QXR0cj4gc2V0QXR0cmlidXRlTm9kZShBdHRyJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxBdHRyPiBzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ciYsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0cj4gcmVtb3ZlQXR0cmlidXRl
Tm9kZShBdHRyJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlv
bk9yPFJlZlB0cjxBdHRyPj4gc2V0QXR0cmlidXRlTm9kZShBdHRyJik7CisgICAgV0VCQ09SRV9F
WFBPUlQgRXhjZXB0aW9uT3I8UmVmUHRyPEF0dHI+PiBzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ciYp
OworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gcmVtb3ZlQXR0cmli
dXRlTm9kZShBdHRyJik7CiAKICAgICBSZWZQdHI8QXR0cj4gYXR0cklmRXhpc3RzKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICBSZWZQdHI8QXR0cj4gYXR0cklmRXhpc3RzKGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOwpAQCAt
MjY5LDE0ICsyNjgsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVl
ZGVkKGNvbnN0IFJlbmRlclN0eWxlJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTaGFkb3dSb290
KiBzaGFkb3dSb290KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2hhZG93Um9vdCogY3Jl
YXRlU2hhZG93Um9vdChFeGNlcHRpb25Db2RlJik7CisgICAgU2hhZG93Um9vdCogc2hhZG93Um9v
dEZvckJpbmRpbmdzKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7CiAKICAgICBzdHJ1Y3QgU2hhZG93
Um9vdEluaXQgewogICAgICAgICBTaGFkb3dSb290TW9kZSBtb2RlOwogICAgIH07Ci0KLSAgICBT
aGFkb3dSb290KiBzaGFkb3dSb290Rm9yQmluZGluZ3MoSlNDOjpFeGVjU3RhdGUmKSBjb25zdDsK
LSAgICBSZWZQdHI8U2hhZG93Um9vdD4gYXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0
JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxTaGFkb3dSb290Pj4gYXR0
YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0Jik7CiAKICAgICBTaGFkb3dSb290KiB1c2Vy
QWdlbnRTaGFkb3dSb290KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2hhZG93Um9vdCYg
ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwpAQCAtMzE1LDkgKzMxMiw5IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRhYkluZGV4KGludCk7CiAgICAgdmlydHVhbCBF
bGVtZW50KiBmb2N1c0RlbGVnYXRlKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBp
bnNlcnRBZGphY2VudEVsZW1lbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgRWxlbWVudCYgbmV3Q2hp
bGQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydEFkamFj
ZW50SFRNTChjb25zdCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydEFkamFjZW50VGV4dChjb25z
dCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxFbGVtZW50Kj4gaW5zZXJ0QWRqYWNlbnRFbGVt
ZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIG5ld0NoaWxkKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBpbnNlcnRBZGphY2VudEhUTUwoY29uc3QgU3RyaW5n
JiB3aGVyZSwgY29uc3QgU3RyaW5nJiBodG1sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRp
b25Pcjx2b2lkPiBpbnNlcnRBZGphY2VudFRleHQoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3Qg
U3RyaW5nJiB0ZXh0KTsKIAogICAgIGJvb2wgaWVGb3JiaWRzSW5zZXJ0SFRNTCgpIGNvbnN0Owog
CkBAIC0zODAsOCArMzc3LDggQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IGlubmVySFRNTCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBvdXRlckhUTUwo
KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElubmVySFRNTChjb25zdCBTdHJp
bmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRPdXRlckhU
TUwoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHZvaWQ+IHNldElubmVySFRNTChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlubmVyVGV4dCgpOwogICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBvdXRlclRleHQoKTsKICAKQEAgLTQyOSw4ICs0MjYsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIG1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcygpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBtYXRjaGVzSW5kZXRlcm1pbmF0ZVBzZXVkb0NsYXNzKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIG1hdGNoZXNEZWZhdWx0UHNldWRvQ2xhc3MoKSBjb25zdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBjbG9zZXN0KGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8Ym9vbD4gbWF0Y2hlcyhjb25zdCBTdHJpbmcmIHNlbGVjdG9ycyk7CisgICAgV0VCQ09S
RV9FWFBPUlQgRXhjZXB0aW9uT3I8RWxlbWVudCo+IGNsb3Nlc3QoY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcnMpOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkgY29u
c3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBET01Ub2tlbkxpc3QmIGNsYXNzTGlzdCgpOwpAQCAt
NjAxLDcgKzU5OCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgYWRkU2hhZG93Um9vdChSZWY8
U2hhZG93Um9vdD4mJik7CiAKLSAgICBzdGF0aWMgdm9pZCBtZXJnZVdpdGhOZXh0VGV4dE5vZGUo
VGV4dCYgbm9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lk
PiBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoVGV4dCYpOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNU
ZXh0Tm9kZSgpIGNvbnN0OwpAQCAtNjM5LDcgKzYzNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1
cGRhdGVJZEZvckRvY3VtZW50KEhUTUxEb2N1bWVudCYsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xk
SWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQsIEhUTUxEb2N1bWVudE5hbWVkSXRlbU1hcHNV
cGRhdGluZ0NvbmRpdGlvbik7CiAgICAgdm9pZCB1cGRhdGVMYWJlbChUcmVlU2NvcGUmLCBjb25z
dCBBdG9taWNTdHJpbmcmIG9sZEZvckF0dHJpYnV0ZVZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld0ZvckF0dHJpYnV0ZVZhbHVlKTsKIAotICAgIE5vZGUqIGluc2VydEFkamFjZW50KGNvbnN0
IFN0cmluZyYgd2hlcmUsIFJlZjxOb2RlPiYmIG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgRXhjZXB0aW9uT3I8Tm9kZSo+IGluc2VydEFkamFjZW50KGNvbnN0IFN0cmluZyYgd2hlcmUs
IFJlZjxOb2RlPiYmIG5ld0NoaWxkKTsKIAogICAgIHZvaWQgc2Nyb2xsQnlVbml0cyhpbnQgdW5p
dHMsIFNjcm9sbEdyYW51bGFyaXR5KTsKIApAQCAtODM4LDUgKzgzNSwzIEBAIGlubGluZSB2b2lk
IEVsZW1lbnQ6OnNldEhhc0ZvY3VzV2l0aGluKGJvb2wgZmxhZykKIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6RWxlbWVudCkKICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6Tm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCk7IH0K
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5p
ZGwKaW5kZXggMzhiNjA2YTQwMWVmZTJmYjRiMjJmNGQzOGJhZGMxM2NlNGU2OGRlNC4uZTQyZDJk
NGQ4MWYyY2JjMjViYjYxN2E4ZjZkMzAyNmFmNWJjODRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50Lmlk
bApAQCAtMjgsMTMgKzI4LDEzIEBACiAKICAgICBET01TdHJpbmc/IGdldEF0dHJpYnV0ZShET01T
dHJpbmcgbmFtZSk7CiAKLSAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93TGVnYWN5RXhjZXB0aW9u
XSB2b2lkIHNldEF0dHJpYnV0ZShET01TdHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKKyAg
ICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIHNldEF0dHJpYnV0ZShET01T
dHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKIAogICAgIFtDRVJlYWN0aW9uc10gdm9pZCBy
ZW1vdmVBdHRyaWJ1dGUoRE9NU3RyaW5nIG5hbWUpOwogICAgIEF0dHI/IGdldEF0dHJpYnV0ZU5v
ZGUoRE9NU3RyaW5nIG5hbWUpOwogCi0gICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4
Y2VwdGlvbl0gQXR0cj8gc2V0QXR0cmlidXRlTm9kZShBdHRyIG5ld0F0dHIpOwotICAgIFtDRVJl
YWN0aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEF0dHIgcmVtb3ZlQXR0cmlidXRlTm9k
ZShBdHRyIG9sZEF0dHIpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIEF0
dHI/IHNldEF0dHJpYnV0ZU5vZGUoQXR0ciBuZXdBdHRyKTsKKyAgICBbQ0VSZWFjdGlvbnMsIE1h
eVRocm93RXhjZXB0aW9uXSBBdHRyIHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ciBvbGRBdHRyKTsK
IAogICAgIEhUTUxDb2xsZWN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lKERPTVN0cmluZyBuYW1l
KTsKIApAQCAtNDMsMTMgKzQzLDEzIEBACiAKICAgICBET01TdHJpbmc/IGdldEF0dHJpYnV0ZU5T
KERPTVN0cmluZz8gbmFtZXNwYWNlVVJJLCBET01TdHJpbmcgbG9jYWxOYW1lKTsKIAotICAgIFtD
RVJlYWN0aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIHZvaWQgc2V0QXR0cmlidXRlTlMo
RE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBxdWFsaWZpZWROYW1lLCBET01TdHJp
bmcgdmFsdWUpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgc2V0
QXR0cmlidXRlTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBxdWFsaWZpZWRO
YW1lLCBET01TdHJpbmcgdmFsdWUpOwogICAgIFtDRVJlYWN0aW9uc10gdm9pZCByZW1vdmVBdHRy
aWJ1dGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7CiAK
ICAgICBIVE1MQ29sbGVjdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKERPTVN0cmluZz8gbmFt
ZXNwYWNlVVJJLCBET01TdHJpbmcgbG9jYWxOYW1lKTsKIAogICAgIEF0dHI/IGdldEF0dHJpYnV0
ZU5vZGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7Ci0g
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gQXR0cj8gc2V0QXR0cmli
dXRlTm9kZU5TKEF0dHIgbmV3QXR0cik7CisgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2Vw
dGlvbl0gQXR0cj8gc2V0QXR0cmlidXRlTm9kZU5TKEF0dHIgbmV3QXR0cik7CiAgICAgYm9vbGVh
biBoYXNBdHRyaWJ1dGUoRE9NU3RyaW5nIG5hbWUpOwogCiAgICAgYm9vbGVhbiBoYXNBdHRyaWJ1
dGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7CkBAIC05
NywxNSArOTcsMTUgQEAKICAgICBzZXF1ZW5jZTxET01TdHJpbmc+IGdldEF0dHJpYnV0ZU5hbWVz
KCk7CiAKICAgICBIVE1MQ29sbGVjdGlvbiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKERPTVN0cmlu
ZyBuYW1lKTsKLSAgICBbQ0VSZWFjdGlvbnMsIFRyZWF0TnVsbEFzPUVtcHR5U3RyaW5nLCBTZXR0
ZXJNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gYXR0cmlidXRlIERPTVN0cmluZyBpbm5lckhUTUw7
Ci0gICAgW0NFUmVhY3Rpb25zLCBUcmVhdE51bGxBcz1FbXB0eVN0cmluZywgU2V0dGVyTWF5VGhy
b3dMZWdhY3lFeGNlcHRpb25dIGF0dHJpYnV0ZSBET01TdHJpbmcgb3V0ZXJIVE1MOworICAgIFtD
RVJlYWN0aW9ucywgVHJlYXROdWxsQXM9RW1wdHlTdHJpbmcsIFNldHRlck1heVRocm93RXhjZXB0
aW9uXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGlubmVySFRNTDsKKyAgICBbQ0VSZWFjdGlvbnMsIFRy
ZWF0TnVsbEFzPUVtcHR5U3RyaW5nLCBTZXR0ZXJNYXlUaHJvd0V4Y2VwdGlvbl0gYXR0cmlidXRl
IERPTVN0cmluZyBvdXRlckhUTUw7CiAKICAgICBbQ0VSZWFjdGlvbnMsIFJlZmxlY3Q9Y2xhc3Nd
IGF0dHJpYnV0ZSBET01TdHJpbmcgY2xhc3NOYW1lOwogICAgIFtQdXRGb3J3YXJkcz12YWx1ZV0g
cmVhZG9ubHkgYXR0cmlidXRlIERPTVRva2VuTGlzdCBjbGFzc0xpc3Q7CiAKLSAgICBbTWF5VGhy
b3dMZWdhY3lFeGNlcHRpb25dIGJvb2xlYW4gbWF0Y2hlcyhET01TdHJpbmcgc2VsZWN0b3JzKTsK
LSAgICBbTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEVsZW1lbnQgY2xvc2VzdChET01TdHJpbmcg
c2VsZWN0b3JzKTsgICAgCi0gICAgW0ltcGxlbWVudGVkQXM9bWF0Y2hlcywgTWF5VGhyb3dMZWdh
Y3lFeGNlcHRpb25dIGJvb2xlYW4gd2Via2l0TWF0Y2hlc1NlbGVjdG9yKERPTVN0cmluZyBzZWxl
Y3RvcnMpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBtYXRjaGVzKERPTVN0cmlu
ZyBzZWxlY3RvcnMpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRWxlbWVudCBjbG9zZXN0KERP
TVN0cmluZyBzZWxlY3RvcnMpOworICAgIFtJbXBsZW1lbnRlZEFzPW1hdGNoZXMsIE1heVRocm93
RXhjZXB0aW9uXSBib29sZWFuIHdlYmtpdE1hdGNoZXNTZWxlY3RvcihET01TdHJpbmcgc2VsZWN0
b3JzKTsKIAogICAgIC8vIENTU09NIFZpZXcgTW9kdWxlIEFQSQogICAgIENsaWVudFJlY3RMaXN0
IGdldENsaWVudFJlY3RzKCk7CkBAIC0xMjQsOSArMTI0LDkgQEAKICAgICBbQ0VSZWFjdGlvbnMs
IFJlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgdWlhY3Rpb25zOwogI2VuZGlmCiAKLSAgICBb
Q0VSZWFjdGlvbnMsIE1heVRocm93TGVnYWN5RXhjZXB0aW9uXSBFbGVtZW50IGluc2VydEFkamFj
ZW50RWxlbWVudChET01TdHJpbmcgd2hlcmUsIEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW0NFUmVh
Y3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gdm9pZCBpbnNlcnRBZGphY2VudEhUTUwo
RE9NU3RyaW5nIHdoZXJlLCBET01TdHJpbmcgaHRtbCk7Ci0gICAgW01heVRocm93TGVnYWN5RXhj
ZXB0aW9uXSB2b2lkIGluc2VydEFkamFjZW50VGV4dChET01TdHJpbmcgd2hlcmUsIERPTVN0cmlu
ZyB0ZXh0KTsKKyAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSBFbGVtZW50IGlu
c2VydEFkamFjZW50RWxlbWVudChET01TdHJpbmcgd2hlcmUsIEVsZW1lbnQgZWxlbWVudCk7Cisg
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBpbnNlcnRBZGphY2VudEhU
TUwoRE9NU3RyaW5nIHdoZXJlLCBET01TdHJpbmcgaHRtbCk7CisgICAgW01heVRocm93RXhjZXB0
aW9uXSB2b2lkIGluc2VydEFkamFjZW50VGV4dChET01TdHJpbmcgd2hlcmUsIERPTVN0cmluZyB0
ZXh0KTsKIAogICAgIFtDb25kaXRpb25hbD1QT0lOVEVSX0xPQ0tdIHZvaWQgcmVxdWVzdFBvaW50
ZXJMb2NrKCk7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgIFtDb25kaXRpb25hbD1DU1NfUkVH
SU9OU10gc2VxdWVuY2U8UmFuZ2U+IHdlYmtpdEdldFJlZ2lvbkZsb3dSYW5nZXMoKTsKIAogICAg
IC8vIFNoYWRvdyBET00gQVBJCi0gICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBNYXlU
aHJvd0xlZ2FjeUV4Y2VwdGlvbl0gU2hhZG93Um9vdCBhdHRhY2hTaGFkb3coU2hhZG93Um9vdElu
aXQgaW5pdCk7CisgICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBNYXlUaHJvd0V4Y2Vw
dGlvbl0gU2hhZG93Um9vdCBhdHRhY2hTaGFkb3coU2hhZG93Um9vdEluaXQgaW5pdCk7CiAgICAg
W0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBJbXBsZW1lbnRlZEFzPXNoYWRvd1Jvb3RGb3JC
aW5kaW5ncywgQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTaGFkb3dS
b290IHNoYWRvd1Jvb3Q7CiAgICAgW0NFUmVhY3Rpb25zLCBFbmFibGVkQXRSdW50aW1lPVNoYWRv
d0RPTSwgUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBzbG90OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
YW1lZE5vZGVNYXAuY3BwCmluZGV4IGRmZDEwOTk5NDJjMDg4ZjRkMGU3NjdjYTQ4ZmJjZjhkMTk0
OGEzNWYuLmJjZmEyMjdhNzIxMWM5ZjA3ZDQ4N2MzYjYxYzBhYjZhOTU5OWQyOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiTmFt
ZWROb2RlTWFwLmgiCiAKICNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgpAQCAtNTUsNTUgKzU0LDUwIEBAIFJlZlB0cjxBdHRyPiBO
YW1lZE5vZGVNYXA6OmdldE5hbWVkSXRlbU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
VVJJLCBjb25zCiAgICAgcmV0dXJuIG1fZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlTlMobmFtZXNw
YWNlVVJJLCBsb2NhbE5hbWUpOwogfQogCi1SZWZQdHI8QXR0cj4gTmFtZWROb2RlTWFwOjpyZW1v
dmVOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
K0V4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0oY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewotICAgIHVuc2lnbmVkIGluZGV4ID0gbV9lbGVtZW50
Lmhhc0F0dHJpYnV0ZXMoKSA/IG1fZWxlbWVudC5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUobmFt
ZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZShtX2VsZW1lbnQpKSA6IEVsZW1lbnREYXRhOjph
dHRyaWJ1dGVOb3RGb3VuZDsKLSAgICBpZiAoaW5kZXggPT0gRWxlbWVudERhdGE6OmF0dHJpYnV0
ZU5vdEZvdW5kKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQorICAgIGlmICghbV9lbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICBhdXRvIGluZGV4
ID0gbV9lbGVtZW50LmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShuYW1lLCBzaG91bGRJZ25vcmVB
dHRyaWJ1dGVDYXNlKG1fZWxlbWVudCkpOworICAgIGlmIChpbmRleCA9PSBFbGVtZW50RGF0YTo6
YXR0cmlidXRlTm90Rm91bmQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRf
RVJSIH07CiAgICAgcmV0dXJuIG1fZWxlbWVudC5kZXRhY2hBdHRyaWJ1dGUoaW5kZXgpOwogfQog
Ci1WZWN0b3I8U3RyaW5nPiBOYW1lZE5vZGVNYXA6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQor
VmVjdG9yPFN0cmluZz4gTmFtZWROb2RlTWFwOjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29u
c3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IG1fZWxlbWVudC5nZXRBdHRyaWJ1dGVO
YW1lcygpOwogICAgIGlmIChpczxIVE1MRWxlbWVudD4obV9lbGVtZW50KSAmJiBpczxIVE1MRG9j
dW1lbnQ+KG1fZWxlbWVudC5kb2N1bWVudCgpKSkgewogICAgICAgICBuYW1lcy5yZW1vdmVBbGxN
YXRjaGluZyhbXShTdHJpbmcmIG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBuYW1lLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCkgIT0gbmFtZTsKKyAgICAgICAgICAgIGZvciAoYXV0byBjaGFy
YWN0ZXIgOiBTdHJpbmdWaWV3IHsgbmFtZSB9LmNvZGVVbml0cygpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXIpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfSk7CiAgICAgfQogICAgIHJldHVybiBuYW1lczsKIH0KIAotUmVmUHRyPEF0dHI+IE5hbWVk
Tm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4
Y2VwdGlvbk9yPFJlZjxBdHRyPj4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW1OUyhjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUpCiB7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygpID8g
bV9lbGVtZW50LmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpIDogRWxlbWVudERhdGE6OmF0dHJpYnV0ZU5vdEZv
dW5kOwotICAgIGlmIChpbmRleCA9PSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQpIHsK
LSAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9CisgICAgaWYgKCFtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygpKQorICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgIGF1dG8gaW5kZXggPSBtX2VsZW1lbnQu
ZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKFF1YWxpZmllZE5hbWUgeyBudWxsQXRvbSwgbG9jYWxO
YW1lLCBuYW1lc3BhY2VVUkkgfSk7CisgICAgaWYgKGluZGV4ID09IEVsZW1lbnREYXRhOjphdHRy
aWJ1dGVOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIg
fTsKICAgICByZXR1cm4gbV9lbGVtZW50LmRldGFjaEF0dHJpYnV0ZShpbmRleCk7CiB9CiAKLVJl
ZlB0cjxBdHRyPiBOYW1lZE5vZGVNYXA6OnNldE5hbWVkSXRlbShBdHRyJiBhdHRyLCBFeGNlcHRp
b25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPFJlZlB0cjxBdHRyPj4gTmFtZWROb2RlTWFwOjpzZXRO
YW1lZEl0ZW0oQXR0ciYgYXR0cikKIHsKLSAgICByZXR1cm4gbV9lbGVtZW50LnNldEF0dHJpYnV0
ZU5vZGUoYXR0ciwgZWMpOwotfQotCi1SZWZQdHI8QXR0cj4gTmFtZWROb2RlTWFwOjpzZXROYW1l
ZEl0ZW0oTm9kZSYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFpczxBdHRy
Pihub2RlKSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotICAgIHJldHVybiBzZXROYW1lZEl0ZW0oZG93bmNhc3Q8QXR0cj4obm9kZSks
IGVjKTsKKyAgICByZXR1cm4gbV9lbGVtZW50LnNldEF0dHJpYnV0ZU5vZGUoYXR0cik7CiB9CiAK
IFJlZlB0cjxBdHRyPiBOYW1lZE5vZGVNYXA6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7
CiAgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIG1fZWxlbWVudC5lbnN1cmVBdHRyKG1fZWxlbWVu
dC5hdHRyaWJ1dGVBdChpbmRleCkubmFtZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1h
cC5oCmluZGV4IDBiNTY3ZTg4N2RlZDAwMzJhMGJmNTBmZTc4ZmZlODA4NTNmMjEwYjIuLjJjYjU5
NjQ0OTk4MDY3Mzc5Mzg4NGEzYjBhODQ0YjU5ZDNjOGMxYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWRO
b2RlTWFwLmgKQEAgLTI0LDM5ICsyNCwzNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkF0dHIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBw
YWJsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEF0dHI7CitjbGFzcyBFbGVt
ZW50OworCiBjbGFzcyBOYW1lZE5vZGVNYXAgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBmcmllbmQgY2xhc3MgRWxlbWVudDsKIHB1
YmxpYzoKICAgICBleHBsaWNpdCBOYW1lZE5vZGVNYXAoRWxlbWVudCYgZWxlbWVudCkKICAgICAg
ICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICB7Ci0gICAgICAgIC8vIE9ubHkgc3VwcG9ydHMg
TmFtZWROb2RlTWFwcyB3aXRoIEVsZW1lbnQgYXNzb2NpYXRlZCwgRG9jdW1lbnRUeXBlLmVudGl0
aWVzIGFuZCBEb2N1bWVudFR5cGUubm90YXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4KICAg
ICB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZigpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZGVyZWYoKTsKIAotICAgIC8vIFB1YmxpYyBET00gaW50ZXJmYWNlLgotCisgICAgV0VC
Q09SRV9FWFBPUlQgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPEF0dHI+IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZlB0cjxBdHRyPiBnZXROYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEF0dHI+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBz
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0
cj4gZ2V0TmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQ
dHI8QXR0cj4gcmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAg
ICBSZWZQdHI8QXR0cj4gc2V0TmFtZWRJdGVtKEF0dHImLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPEF0dHI+IHNldE5hbWVkSXRlbShOb2RlJiwgRXhjZXB0aW9u
Q29kZSYpOyAvLyBmb3IgbGVnYWN5IGJpbmRpbmdzLgorICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2Vw
dGlvbk9yPFJlZlB0cjxBdHRyPj4gc2V0TmFtZWRJdGVtKEF0dHImKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBFeGNlcHRpb25PcjxSZWY8QXR0cj4+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxBdHRyPj4g
cmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxB
dHRyPiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCkgY29uc3Q7CiAKLSAgICBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50OyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIHsgcmV0dXJuIG1fZWxlbWVudDsg
fQogCiBwcml2YXRlOgogICAgIEVsZW1lbnQmIG1fZWxlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVk
Tm9kZU1hcC5pZGwKaW5kZXggZmRkMDU5OTZlNTQzYmM2ODM3MDZlM2FjM2I4NDYwZDhhOGNkNzUw
NS4uODNkMjhlN2ExMjYyNzIyZmYwZTFiMmFiMTY4MzMyZDc1ZGFkMzM5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05hbWVkTm9kZU1hcC5pZGwKQEAgLTI0LDEyICsyNCwxMSBAQAogICAgIEltcGxlbWVudGF0
aW9uTGFja3NWVGFibGUsCiBdIGludGVyZmFjZSBOYW1lZE5vZGVNYXAgewogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLQotICAgIGdldHRlciBBdHRyPyBnZXRO
YW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwotICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dMZWdh
Y3lFeGNlcHRpb25dIEF0dHI/IHNldE5hbWVkSXRlbShBdHRyIGF0dHIpOwotICAgIFtDRVJlYWN0
aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEF0dHIgcmVtb3ZlTmFtZWRJdGVtKERPTVN0
cmluZyBuYW1lKTsKICAgICBnZXR0ZXIgQXR0cj8gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KTsK
KyAgICBnZXR0ZXIgQXR0cj8gZ2V0TmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKICAgICBBdHRy
PyBnZXROYW1lZEl0ZW1OUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2Fs
TmFtZSk7Ci0gICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbiwgSW1wbGVt
ZW50ZWRBcz1zZXROYW1lZEl0ZW1dIEF0dHI/IHNldE5hbWVkSXRlbU5TKEF0dHIgYXR0cik7Ci0g
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gQXR0ciByZW1vdmVOYW1l
ZEl0ZW1OUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7Cisg
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gQXR0cj8gc2V0TmFtZWRJdGVtKEF0
dHIgYXR0cik7CisgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbiwgSW1wbGVtZW50
ZWRBcz1zZXROYW1lZEl0ZW1dIEF0dHI/IHNldE5hbWVkSXRlbU5TKEF0dHIgYXR0cik7CisgICAg
W0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gQXR0ciByZW1vdmVOYW1lZEl0ZW0oRE9N
U3RyaW5nIG5hbWUpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIEF0dHIg
cmVtb3ZlTmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBsb2Nh
bE5hbWUpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggYThlYzBmZTFh
ODdiNTJhNTNjYzQxOWEzNmYxNmJmZjdhNWZkNzg4Ni4uYjMwZDc2YWRmZjIzYzI4ZTk3ODBiNzE2
ODA5ODgzZTVlMjRiODUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTU4
NCwxNiArNTg0LDE0IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxFbGVtZW50OjpzZXRPdXRlclRl
eHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0ID8g
bmV4dC0+cHJldmlvdXNTaWJsaW5nKCkgOiBudWxscHRyOwogICAgIGlmIChpczxUZXh0Pihub2Rl
LmdldCgpKSkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgbWVyZ2VX
aXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpub2RlKSwgZWMpOwotICAgICAgICBpZiAo
ZWMpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKm5vZGUpKTsKKyAg
ICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KICAgICBpZiAoaXM8VGV4dD4ocHJldi5nZXQo
KSkpIHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIG1lcmdlV2l0aE5l
eHRUZXh0Tm9kZShkb3duY2FzdDxUZXh0PigqcHJldiksIGVjKTsKLSAgICAgICAgaWYgKGVjKQot
ICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gbWVyZ2VXaXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpwcmV2KSk7CisgICAgICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKaW5kZXggZTliODVhOWRlM2ZmNjIzNjkyMmYxYThiNTk5
MzFkZTY2M2E4Y2NmMS4uMmMwY2YzYjUzN2RhNjE2NjE0Y2Y5ODZiMWY2ZTc4YzAxOTZlNjAwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKQEAgLTEzOCw3ICsxMzgsOSBA
QCBwdWJsaWM6CiAKICAgICBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlCiAg
ICAgewotICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUsIGVj
KTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUs
IG1fdmFsdWUpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkBAIC0xNzYsMTYgKzE3OCwyMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAobV9o
YWRBdHRyaWJ1dGUpCi0gICAgICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUs
IG1fb2xkVmFsdWUsIGVjKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9oYWRBdHRyaWJ1
dGUpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUo
bV9uYW1lLCBtX29sZFZhbHVlKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUo
KTsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2VsZW1lbnQtPnJlbW92ZUF0dHJpYnV0
ZShtX25hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBib29sIHJlZG8o
RXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX2VsZW1lbnQtPnNl
dEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUsIGVjKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBt
X2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUpOworICAgICAgICBpZiAocmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2Vw
dGlvbigpLmNvZGUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBjZTU2YmVjZTNj
YjZmNzU0MmRjNTIwZmQzZmMzNGY0NmMyMzliODE1Li41ZTE1Y2M1MTAyY2M2MWI3OTM2ZDZkNTFl
YzE5ZjZlMzIxNTg1MTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIFJldmFsaWRhdGVTdHlsZUF0
dHJpYnV0ZVRhc2s6OnRpbWVyRmlyZWQoKQogICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKIH0KIAot
U3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGNvbnN0IEV4Y2VwdGlvbkNv
ZGUmIGVjKQorU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKEV4Y2VwdGlv
bkNvZGUgZWMpCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbihlYyk7CkBAIC0yMDcsNiArMjA3LDExIEBAIFN0cmluZyBJbnNwZWN0
b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAorU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vy
cm9yU3RyaW5nKEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gRXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIHsgZXhjZXB0aW9uLmNvZGUoKSB9Lm5hbWU7Cit9CisKIEluc3BlY3Rv
ckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChXZWJBZ2VudENvbnRleHQmIGNvbnRleHQsIElu
c3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQog
ICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiRE9NIiksIGNvbnRleHQpCiAg
ICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihjb250ZXh0LmluamVjdGVkU2NyaXB0TWFuYWdl
cikKQEAgLTY2MCwxMSArNjY1LDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJp
YnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVuCiAgICAgaWYg
KCFlbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHBh
cnNlZEVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudChlbGVtZW50LT5kb2N1bWVudCgpLCBzcGFu
VGFnKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBwYXJzZWRFbGVtZW50LmdldCgp
LT5zZXRJbm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+IiwgZWMpOwotICAgIGlm
IChlYykgewotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcoZWMpOworICAgIGF1
dG8gcGFyc2VkRWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KGVsZW1lbnQtPmRvY3VtZW50KCks
IHNwYW5UYWcpOworICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VkRWxlbWVudC5nZXQoKS5zZXRJbm5l
ckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+Iik7CisgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkgeworICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggZDdiNmQxNTM4YTRi
Y2VjMDYxMmQyYzMyMDBkOTVhZGVlN2RiMzUzOS4uYTI0OGRlYzFkM2FlMThjNjc2ZjM4MWNlYzZm
OTJmOTZlYTRmODY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmgKQEAgLTYwLDYgKzYwLDcgQEAgY2xhc3MgRE9NRWRpdG9yOwogY2xhc3MgRG9jdW1l
bnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7CitjbGFzcyBFeGNlcHRpb247CiBjbGFz
cyBGbG9hdFF1YWQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3Rvckhpc3Rvcnk7CkBAIC0x
MDcsNyArMTA4LDggQEAgcHVibGljOgogICAgIEluc3BlY3RvckRPTUFnZW50KFdlYkFnZW50Q29u
dGV4dCYsIEluc3BlY3RvclBhZ2VBZ2VudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICB2aXJ0
dWFsIH5JbnNwZWN0b3JET01BZ2VudCgpOwogCi0gICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3Ry
aW5nKGNvbnN0IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgU3RyaW5nIHRvRXJyb3JTdHJp
bmcoRXhjZXB0aW9uQ29kZSk7CisgICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5nKEV4Y2Vw
dGlvbiYmKTsKIAogICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDg4MzhjOTM5NGIyNTdmNjhiN2E0NGYwNzM3
NTRmNjFjYTU0ZmU2ZjQuLmMyYTk1M2Y0ZDNmZTYwMzE2ZjA1ZDQxMzk3MDY1ODU0M2QyYTIzNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAKQEAgLTEzMDEsMTMgKzEzMDEsMTUgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGU6OnNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwKIAogICAg
IHsKICAgICAgICAgSW5zcGVjdG9yQ1NTQWdlbnQ6OklubGluZVN0eWxlT3ZlcnJpZGVTY29wZSBv
dmVycmlkZVNjb3BlKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIG1fZWxlbWVudC0+
c2V0QXR0cmlidXRlKCJzdHlsZSIsIHRleHQsIGVjKTsKKyAgICAgICAgbV9lbGVtZW50LT5zZXRB
dHRyaWJ1dGUoSFRNTE5hbWVzOjpzdHlsZUF0dHIsIHRleHQpOwogICAgIH0KIAogICAgIG1fc3R5
bGVUZXh0ID0gdGV4dDsKICAgICBtX2lzU3R5bGVUZXh0VmFsaWQgPSB0cnVlOwogICAgIG1fcnVs
ZVNvdXJjZURhdGEgPSBudWxscHRyOwotICAgIHJldHVybiAhZWM7CisKKyAgICBlYyA9IDA7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c2l6ZV90Pj4gSW5z
cGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpsaW5lRW5kaW5ncygpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggOGJjOTFiNTNkOWFmOGQ3ZmEyYWRhMzAy
Y2ZjNmY3OGExMDljY2Y1YS4uYzVlNGZkNDg4NWI3NWJiYzFkYzM0MjhjMGM1YWZjNjE5ZTVlMjk3
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNzgwLDMyICs3ODAsMTEg
QEAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gSW50ZXJuYWxzOjpjb21wdXRl
ZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8KICAgICByZXR1cm4gQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpjcmVhdGUoZWxlbWVudCwgYWxsb3dWaXNpdGVkU3R5bGUpOwogfQogCi1FeGNl
cHRpb25PcjxOb2RlKj4gSW50ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KEVsZW1lbnQmIGhvc3Qp
Ci17Ci0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBob3N0LnNoYWRvd1Jvb3QoKSkK
LSAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBhdXRvIHJlc3VsdCA9IGhvc3QuY3JlYXRlU2hhZG93Um9vdChlYyk7Ci0gICAgaWYgKGVj
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCiBOb2RlKiBJbnRlcm5hbHM6OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoRWxlbWVudCYg
aG9zdCkKIHsKICAgICByZXR1cm4gJmhvc3QuZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwog
fQogCi1FeGNlcHRpb25PcjxOb2RlKj4gSW50ZXJuYWxzOjpjcmVhdGVTaGFkb3dSb290KEVsZW1l
bnQmIGhvc3QpCi17Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byByZXN1bHQg
PSBob3N0LmNyZWF0ZVNoYWRvd1Jvb3QoZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IGVjIH07Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogTm9kZSogSW50ZXJu
YWxzOjpzaGFkb3dSb290KEVsZW1lbnQmIGhvc3QpCiB7CiAgICAgcmV0dXJuIGhvc3Quc2hhZG93
Um9vdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRs
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDRhNjZjNDY5NWY2
ODFkYWM5OGVlNjA5YzM5NmZkZGI3ZWYyZDg0YzguLmE2ZmUzNGNjNjkxMWMxYWVjZDk0ZDA5MDRj
Y2ZkYTNjYmIxMmE2NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTEw
MCw5ICsxMDAsNyBAQCBlbnVtIFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gewogCiAgICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oRWxl
bWVudCBlbGVtZW50KTsKIAotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gTm9kZSBlbnN1cmVTaGFk
b3dSb290KEVsZW1lbnQgaG9zdCk7CiAgICAgTm9kZSBlbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290
KEVsZW1lbnQgaG9zdCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBOb2RlIGNyZWF0ZVNoYWRv
d1Jvb3QoRWxlbWVudCBob3N0KTsKICAgICBOb2RlIHNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KTsK
IAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRE9NU3RyaW5nIHNoYWRvd1Jvb3RUeXBlKE5vZGUg
cm9vdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggNTU0MjVkOTUyNGVjZDBlODBkZTA3YmE5ZGQzNDdjZTc0
ZGMyMGEzMy4uYThmOTVjZTU1NDI0YzUyNmNjNTU4NDQwNTU1Y2Q2Y2YwZGRkYzY5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcApAQCAtNzM5LDExICs3MzksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZU5h
bWVzcGFjZUF0dHJpYnV0ZXMoVmVjdG9yPEF0dHJpYnV0ZT4mIHByZWZpeGVkQXR0cmlidXQKICAg
ICAgICAgaWYgKG5hbWVzcGFjZXNbaV0ucHJlZml4KQogICAgICAgICAgICAgbmFtZXNwYWNlUU5h
bWUgPSAieG1sbnM6IiArIHRvU3RyaW5nKG5hbWVzcGFjZXNbaV0ucHJlZml4KTsKIAotICAgICAg
ICBRdWFsaWZpZWROYW1lIHBhcnNlZE5hbWUgPSBhbnlOYW1lOwotICAgICAgICBpZiAoIUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlTmFtZShwYXJzZWROYW1lLCBYTUxOU05hbWVzOjp4bWxuc05hbWVz
cGFjZVVSSSwgbmFtZXNwYWNlUU5hbWUsIGVjKSkKKyAgICAgICAgYXV0byByZXN1bHQgPSBFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZU5hbWUoWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkksIG5h
bWVzcGFjZVFOYW1lKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAg
ICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHByZWZpeGVkQXR0cmlidXRlcy5hcHBlbmQo
QXR0cmlidXRlKHBhcnNlZE5hbWUsIG5hbWVzcGFjZVVSSSkpOworICAgICAgICB9CisKKyAgICAg
ICAgcHJlZml4ZWRBdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUocmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpLCBuYW1lc3BhY2VVUkkpKTsKICAgICB9CiB9CiAKQEAgLTc2NiwxMSArNzY4LDEz
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhWZWN0b3I8QXR0
cmlidXRlPiYgcHJlZml4ZWRBdHRyaWJ1dGVzCiAgICAgICAgIEF0b21pY1N0cmluZyBhdHRyVVJJ
ID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyBudWxsQXRvbSA6IHRvQXRvbWljU3RyaW5nKGF0dHJp
YnV0ZXNbaV0udXJpKTsKICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJRTmFtZSA9IGF0dHJQcmVm
aXguaXNFbXB0eSgpID8gdG9BdG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS5sb2NhbG5hbWUpIDog
YXR0clByZWZpeCArICI6IiArIHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ubG9jYWxuYW1lKTsKIAot
ICAgICAgICBRdWFsaWZpZWROYW1lIHBhcnNlZE5hbWUgPSBhbnlOYW1lOwotICAgICAgICBpZiAo
IUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlTmFtZShwYXJzZWROYW1lLCBhdHRyVVJJLCBhdHRyUU5h
bWUsIGVjKSkKKyAgICAgICAgYXV0byByZXN1bHQgPSBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZU5h
bWUoYXR0clVSSSwgYXR0clFOYW1lKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgeworICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsK
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIHByZWZpeGVkQXR0cmli
dXRlcy5hcHBlbmQoQXR0cmlidXRlKHBhcnNlZE5hbWUsIGF0dHJWYWx1ZSkpOworICAgICAgICBw
cmVmaXhlZEF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShyZXN1bHQucmVsZWFzZVJldHVyblZh
bHVlKCksIGF0dHJWYWx1ZSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvRE9NL0RPTUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NRWxlbWVu
dC5tbQppbmRleCAyMmI0ZjllM2JhMDFlN2VmYWFiNjU2NjkzMGU4YjhjNDA4OGVlMzU0Li4zM2E4
YzI1ZWE0NGViM2QxZWY2YjRjYWVhY2MyZTYzODYzZTI2NzE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9ET00vRE9NRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00v
RE9NRWxlbWVudC5tbQpAQCAtMTc3LDkgKzE3Nyw3IEBAIC0gKE5TU3RyaW5nICopaW5uZXJIVE1M
CiAtICh2b2lkKXNldElubmVySFRNTDooTlNTdHJpbmcgKiluZXdJbm5lckhUTUwKIHsKICAgICBK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgdW53cmFwKCpzZWxmKS5zZXRJbm5lckhUTUwobmV3SW5uZXJIVE1MLCBlYyk7Ci0gICAgcmFp
c2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5zZXRJ
bm5lckhUTUwobmV3SW5uZXJIVE1MKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopb3V0ZXJIVE1MCkBA
IC0xOTEsOSArMTg5LDcgQEAgLSAoTlNTdHJpbmcgKilvdXRlckhUTUwKIC0gKHZvaWQpc2V0T3V0
ZXJIVE1MOihOU1N0cmluZyAqKW5ld091dGVySFRNTAogewogICAgIEpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICB1bndyYXAoKnNlbGYp
LnNldE91dGVySFRNTChuZXdPdXRlckhUTUwsIGVjKTsKLSAgICByYWlzZU9uRE9NRXJyb3IoZWMp
OworICAgIHJhaXNlT25ET01FcnJvcih1bndyYXAoKnNlbGYpLnNldE91dGVySFRNTChuZXdPdXRl
ckhUTUwpKTsKIH0KIAogLSAoTlNTdHJpbmcgKiljbGFzc05hbWUKQEAgLTI4NSw5ICsyODEsNyBA
QCAtIChOU1N0cmluZyAqKWdldEF0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lCiAtICh2b2lkKXNl
dEF0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlCiB7CiAg
ICAgSlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIHVud3JhcCgqc2VsZikuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlLCBlYyk7Ci0gICAg
cmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5z
ZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpKTsKIH0KIAogLSAodm9pZClyZW1vdmVBdHRyaWJ1dGU6
KE5TU3RyaW5nICopbmFtZQpAQCAtMzA3LDEwICszMDEsNyBAQCAtIChET01BdHRyICopc2V0QXR0
cmlidXRlTm9kZTooRE9NQXR0ciAqKW5ld0F0dHIKICAgICBKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgaWYgKCFuZXdBdHRyKQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlv
bigpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIERPTUF0dHIgKnJlc3VsdCA9IGtp
dCh1bndyYXAoKnNlbGYpLnNldEF0dHJpYnV0ZU5vZGUoKmNvcmUobmV3QXR0ciksIGVjKS5nZXQo
KSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBraXQocmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZikuc2V0QXR0cmlidXRlTm9kZSgq
Y29yZShuZXdBdHRyKSkpLmdldCgpKTsKIH0KIAogLSAoRE9NQXR0ciAqKXJlbW92ZUF0dHJpYnV0
ZU5vZGU6KERPTUF0dHIgKilvbGRBdHRyCkBAIC0zMTgsMTAgKzMwOSw3IEBAIC0gKERPTUF0dHIg
KilyZW1vdmVBdHRyaWJ1dGVOb2RlOihET01BdHRyICopb2xkQXR0cgogICAgIEpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBpZiAoIW9sZEF0dHIpCiAgICAgICAgIHJhaXNlVHlwZUVy
cm9yRXhjZXB0aW9uKCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NQXR0ciAq
cmVzdWx0ID0ga2l0KHVud3JhcCgqc2VsZikucmVtb3ZlQXR0cmlidXRlTm9kZSgqY29yZShvbGRB
dHRyKSwgZWMpLmdldCgpKTsKLSAgICByYWlzZU9uRE9NRXJyb3IoZWMpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIGtpdChyYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5yZW1v
dmVBdHRyaWJ1dGVOb2RlKCpjb3JlKG9sZEF0dHIpKSkucHRyKCkpOwogfQogCiAtIChET01Ob2Rl
TGlzdCAqKWdldEVsZW1lbnRzQnlUYWdOYW1lOihOU1N0cmluZyAqKW5hbWUKQEAgLTM0Myw5ICsz
MzEsNyBAQCAtIChOU1N0cmluZyAqKWdldEF0dHJpYnV0ZU5TOihOU1N0cmluZyAqKW5hbWVzcGFj
ZVVSSSBsb2NhbE5hbWU6KE5TU3RyaW5nICopbG9jYQogLSAodm9pZClzZXRBdHRyaWJ1dGVOUzoo
TlNTdHJpbmcgKiluYW1lc3BhY2VVUkkgcXVhbGlmaWVkTmFtZTooTlNTdHJpbmcgKilxdWFsaWZp
ZWROYW1lIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlCiB7CiAgICAgSlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHVud3JhcCgqc2VsZiku
c2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSwgZWMpOwot
ICAgIHJhaXNlT25ET01FcnJvcihlYyk7CisgICAgcmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2Vs
Zikuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSkpOwog
fQogCiAtICh2b2lkKXJlbW92ZUF0dHJpYnV0ZU5TOihOU1N0cmluZyAqKW5hbWVzcGFjZVVSSSBs
b2NhbE5hbWU6KE5TU3RyaW5nICopbG9jYWxOYW1lCkBAIC0zNzUsMTAgKzM2MSw3IEBAIC0gKERP
TUF0dHIgKilzZXRBdHRyaWJ1dGVOb2RlTlM6KERPTUF0dHIgKiluZXdBdHRyCiAgICAgSlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGlmICghbmV3QXR0cikKICAgICAgICAgcmFpc2VU
eXBlRXJyb3JFeGNlcHRpb24oKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01B
dHRyICpyZXN1bHQgPSBraXQodW53cmFwKCpzZWxmKS5zZXRBdHRyaWJ1dGVOb2RlTlMoKmNvcmUo
bmV3QXR0ciksIGVjKS5nZXQoKSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBraXQocmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZiku
c2V0QXR0cmlidXRlTm9kZU5TKCpjb3JlKG5ld0F0dHIpKSkuZ2V0KCkpOwogfQogCiAtIChCT09M
KWhhc0F0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lCkBAIC00MzksMjggKzQyMiwxOSBAQCAtIChE
T01Ob2RlTGlzdCAqKWdldEVsZW1lbnRzQnlDbGFzc05hbWU6KE5TU3RyaW5nICopbmFtZQogLSAo
Qk9PTCltYXRjaGVzOihOU1N0cmluZyAqKXNlbGVjdG9ycwogewogICAgIEpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBCT09MIHJlc3Vs
dCA9IHVud3JhcCgqc2VsZikubWF0Y2hlcyhzZWxlY3RvcnMsIGVjKTsKLSAgICByYWlzZU9uRE9N
RXJyb3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJhaXNlT25ET01FcnJv
cih1bndyYXAoKnNlbGYpLm1hdGNoZXMoc2VsZWN0b3JzKSk7CiB9CiAKIC0gKERPTUVsZW1lbnQg
KiljbG9zZXN0OihOU1N0cmluZyAqKXNlbGVjdG9ycwogewogICAgIEpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01FbGVtZW50ICpy
ZXN1bHQgPSBraXQodW53cmFwKCpzZWxmKS5jbG9zZXN0KHNlbGVjdG9ycywgZWMpKTsKLSAgICBy
YWlzZU9uRE9NRXJyb3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGtpdChy
YWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5jbG9zZXN0KHNlbGVjdG9ycykpKTsKIH0KIAog
LSAoQk9PTCl3ZWJraXRNYXRjaGVzU2VsZWN0b3I6KE5TU3RyaW5nICopc2VsZWN0b3JzCiB7CiAg
ICAgSlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIEJPT0wgcmVzdWx0ID0gdW53cmFwKCpzZWxmKS5tYXRjaGVzKHNlbGVjdG9ycywgZWMp
OwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gcmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZikubWF0Y2hlcyhzZWxlY3RvcnMpKTsKIH0K
IAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL0RPTS9ET01IVE1MRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01IVE1M
RWxlbWVudC5tbQppbmRleCBjMjY1ZDI1N2FhMzlmZjRjOGJkZGM4ZWFkNDdlOTgzNjlkZGUyMzBm
Li5hNDc2OTRjMjg3MjQxMWExYjUyNzU5NTBjODRjMzM0NGQzNjA2Y2YxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9ET00vRE9NSFRNTEVsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYktp
dC9tYWMvRE9NL0RPTUhUTUxFbGVtZW50Lm1tCkBAIC0yMzUsMjYgKzIzNSwxOSBAQCAtIChET01F
bGVtZW50ICopaW5zZXJ0QWRqYWNlbnRFbGVtZW50OihOU1N0cmluZyAqKXdoZXJlIGVsZW1lbnQ6
KERPTUVsZW1lbnQgKillbAogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9uKCk7
Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NRWxlbWVudCAqcmVz
dWx0ID0ga2l0KFdURjo6Z2V0UHRyKElNUEwtPmluc2VydEFkamFjZW50RWxlbWVudCh3aGVyZSwg
KmNvcmUoZWxlbWVudCksIGVjKSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJTVBMLT5pbnNlcnRB
ZGphY2VudEVsZW1lbnQod2hlcmUsICpjb3JlKGVsZW1lbnQpKSkpOwogfQogCiAtICh2b2lkKWlu
c2VydEFkamFjZW50SFRNTDooTlNTdHJpbmcgKil3aGVyZSBodG1sOihOU1N0cmluZyAqKWh0bWwK
IHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSU1QTC0+aW5zZXJ0QWRqYWNlbnRIVE1MKHdo
ZXJlLCBodG1sLCBlYyk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9N
RXJyb3IoSU1QTC0+aW5zZXJ0QWRqYWNlbnRIVE1MKHdoZXJlLCBodG1sKSk7CiB9CiAKIC0gKHZv
aWQpaW5zZXJ0QWRqYWNlbnRUZXh0OihOU1N0cmluZyAqKXdoZXJlIHRleHQ6KE5TU3RyaW5nICop
dGV4dAogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBJTVBMLT5pbnNlcnRBZGphY2VudFRl
eHQod2hlcmUsIHRleHQsIGVjKTsKLSAgICByYWlzZU9uRE9NRXJyb3IoZWMpOworICAgIHJhaXNl
T25ET01FcnJvcihJTVBMLT5pbnNlcnRBZGphY2VudFRleHQod2hlcmUsIHRleHQpKTsKIH0KIAog
LSAodm9pZCljbGljawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvRE9NL0RPTU5hbWVk
Tm9kZU1hcC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01OYW1lZE5vZGVNYXAubW0KaW5k
ZXggOGY5MTg0ZWQ4ZWYzNTAzNzFlNDFjMjU4YWZkOWZlNzkwODRmYjAxZC4uNWRkMzk1NjRkZDRm
NGYyMzk2ZjM2YjcyNzkzNmQ4M2M1YTg1NjViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvRE9NL0RPTU5hbWVkTm9kZU1hcC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vRE9N
TmFtZWROb2RlTWFwLm1tCkBAIC02OCwxOSArNjgsMTYgQEAgLSAoRE9NTm9kZSAqKXNldE5hbWVk
SXRlbTooRE9NTm9kZSAqKW5vZGUKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigp
OwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIERPTU5vZGUgKnJlc3Vs
dCA9IGtpdChXVEY6OmdldFB0cihJTVBMLT5zZXROYW1lZEl0ZW0oKmNvcmUobm9kZSksIGVjKSkp
OwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRv
JiBjb3JlTm9kZSA9ICpjb3JlKG5vZGUpOworICAgIGlmICghaXM8V2ViQ29yZTo6QXR0cj4oY29y
ZU5vZGUpKQorICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigpOworICAgIHJldHVybiBr
aXQocmFpc2VPbkRPTUVycm9yKElNUEwtPnNldE5hbWVkSXRlbShkb3duY2FzdDxXZWJDb3JlOjpB
dHRyPihjb3JlTm9kZSkpKS5nZXQoKSk7CiB9CiAKIC0gKERPTU5vZGUgKilyZW1vdmVOYW1lZEl0
ZW06KE5TU3RyaW5nICopbmFtZQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01Ob2Rl
ICpyZXN1bHQgPSBraXQoV1RGOjpnZXRQdHIoSU1QTC0+cmVtb3ZlTmFtZWRJdGVtKG5hbWUsIGVj
KSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJTVBMLT5yZW1vdmVOYW1lZEl0ZW0obmFtZSkpLnB0
cigpKTsKIH0KIAogLSAoRE9NTm9kZSAqKWl0ZW06KHVuc2lnbmVkKWluZGV4CkBAIC05NywyMiAr
OTQsMTMgQEAgLSAoRE9NTm9kZSAqKWdldE5hbWVkSXRlbU5TOihOU1N0cmluZyAqKW5hbWVzcGFj
ZVVSSSBsb2NhbE5hbWU6KE5TU3RyaW5nICopbG9jYWwKIAogLSAoRE9NTm9kZSAqKXNldE5hbWVk
SXRlbU5TOihET01Ob2RlICopbm9kZQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0
aW9uKCk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NTm9kZSAq
cmVzdWx0ID0ga2l0KFdURjo6Z2V0UHRyKElNUEwtPnNldE5hbWVkSXRlbSgqY29yZShub2RlKSwg
ZWMpKSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBbc2VsZiBzZXROYW1lZEl0ZW06bm9kZV07CiB9CiAKIC0gKERPTU5vZGUgKilyZW1v
dmVOYW1lZEl0ZW1OUzooTlNTdHJpbmcgKiluYW1lc3BhY2VVUkkgbG9jYWxOYW1lOihOU1N0cmlu
ZyAqKWxvY2FsTmFtZQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01Ob2RlICpyZXN1
bHQgPSBraXQoV1RGOjpnZXRQdHIoSU1QTC0+cmVtb3ZlTmFtZWRJdGVtTlMobmFtZXNwYWNlVVJJ
LCBsb2NhbE5hbWUsIGVjKSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJTVBMLT5yZW1vdmVOYW1l
ZEl0ZW1OUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkpLnB0cigpKTsKIH0KIAogQGVuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwIGIvU291cmNlL1dl
YktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCmluZGV4IGRiMTBmMGJiNTI5MGFkNTdlYzM2ZGY1
MjgyYjc0YzM2Y2NmMjRlNWEuLjAzOTg2NWYwZTJhNmNiZjExYmM1MDIwYzY0ODY5MWUwYTY0MmFj
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJET01IVE1MQ2xhc3Nlcy5oIgogI2luY2x1ZGUgIldlYktpdEdyYXBoaWNzLmgi
CiAKKyNpbmNsdWRlIDxXZWJDb3JlL0F0dHIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0JTdHJpbmcu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NV2lu
ZG93Lmg+CkBAIC0xMDcwLDkgKzEwNzEsOCBAQCBIUkVTVUxUIERPTUVsZW1lbnQ6OnNldEF0dHJp
YnV0ZShfSW5fIEJTVFIgbmFtZSwgX0luXyBCU1RSIHZhbHVlKQogCiAgICAgV1RGOjpTdHJpbmcg
bmFtZVN0cmluZyhuYW1lLCBTeXNTdHJpbmdMZW4obmFtZSkpOwogICAgIFdURjo6U3RyaW5nIHZh
bHVlU3RyaW5nKHZhbHVlLCBTeXNTdHJpbmdMZW4odmFsdWUpKTsKLSAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lU3RyaW5n
LCB2YWx1ZVN0cmluZywgZWMpOwotICAgIHJldHVybiBlYyA/IEVfRkFJTCA6IFNfT0s7CisgICAg
YXV0byByZXN1bHQgPSBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lU3RyaW5nLCB2YWx1ZVN0
cmluZyk7CisgICAgcmV0dXJuIHJlc3VsdC5oYXNFeGNlcHRpb24oKSA/IEVfRkFJTCA6IFNfT0s7
CiB9CiAgICAgCiBIUkVTVUxUIERPTUVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZShfSW5fIEJTVFIg
LypuYW1lKi8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAKaW5kZXggNDA4ZmE4YTFl
NGZjZDYxZDQyNGIzNTY0MWEzOGY2MGY5YWVlMTNhYi4uZDFmZWEzNWMyMzdkYWYzNjdkMDQ5OGE4
NDA2ODA1YjZkYzZkNDE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENs
YXNzZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcApAQCAt
NTE0LDggKzUxNCw3IEBAIEhSRVNVTFQgRE9NSFRNTEVsZW1lbnQ6OnNldElubmVySFRNTChfSW5f
IEJTVFIgaHRtbCkKICAgICBBU1NFUlQoaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAg
IEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihtX2VsZW1l
bnQpOwogICAgIFN0cmluZyBodG1sU3RyaW5nKGh0bWwsIFN5c1N0cmluZ0xlbihodG1sKSk7Ci0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaHRtbEVsZW1lbnQtPnNldElubmVySFRNTCho
dG1sU3RyaW5nLCBlYyk7CisgICAgaHRtbEVsZW1lbnQtPnNldElubmVySFRNTChodG1sU3RyaW5n
KTsKICAgICByZXR1cm4gU19PSzsKIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01FbGVtZW50LmNwcAppbmRleCA1MjZkMDU3ODcxMmM0YWUyNDlhMWM3Yzc5
YjFlNWQyMDdjNTljMGY2Li4zZTNkNjZiOGQzYjBhY2QzNzgwY2E3ODU5MGVhNmY5NWYyZWY4MTNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudC5jcHAKQEAg
LTYxMywxMCArNjEzLDkgQEAgdm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZShX
ZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSwKICAgICBXZWJDb3JlOjpF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CiAgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShjb252ZXJ0
ZWROYW1lLCBjb252ZXJ0ZWRWYWx1ZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGl0ZW0tPnNldEF0dHJpYnV0ZShjb252ZXJ0ZWROYW1lLCBjb252ZXJ0ZWRWYWx1ZSk7Cisg
ICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgp
KTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAg
LTY1MCwxMyArNjQ5LDEzIEBAIFdlYktpdERPTUF0dHIqIHdlYmtpdF9kb21fZWxlbWVudF9zZXRf
YXR0cmlidXRlX25vZGUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgV2ViCiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwogICAgIFdlYkNvcmU6OkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV2ViQ29yZTo6QXR0ciogY29udmVydGVk
TmV3QXR0ciA9IFdlYktpdDo6Y29yZShuZXdBdHRyKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6QXR0cj4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnNldEF0dHJpYnV0ZU5vZGUoKmNvbnZlcnRlZE5ld0F0dHIsIGVjKSk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0QXR0cmlidXRlTm9kZSgq
Y29udmVydGVkTmV3QXR0cik7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCkuZ2V0KCkpOwogfQogCiBXZWJLaXRET01BdHRyKiB3ZWJr
aXRfZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZV9ub2RlKFdlYktpdERPTUVsZW1lbnQqIHNl
bGYsIFdlYktpdERPTUF0dHIqIG9sZEF0dHIsIEdFcnJvcioqIGVycm9yKQpAQCAtNjY3LDEzICs2
NjYsMTMgQEAgV2ViS2l0RE9NQXR0ciogd2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1
dGVfbm9kZShXZWJLaXRET01FbGVtZW50KiBzZWxmLAogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KCFlcnJvciB8fCAhKmVycm9yLCAwKTsKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkF0dHIqIGNvbnZlcnRlZE9sZEF0dHIgPSBX
ZWJLaXQ6OmNvcmUob2xkQXR0cik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5yZW1vdmVBdHRyaWJ1dGVOb2RlKCpjb252ZXJ0ZWRPbGRBdHRyLCBlYykpOwotICAgIGlm
IChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPnJlbW92ZUF0dHJpYnV0ZU5vZGUoKmNvbnZl
cnRlZE9sZEF0dHIpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhyZXN1bHQucmVsZWFzZUV4
Y2VwdGlvbigpLmNvZGUoKSk7CiAgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQocmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpLnB0cigpKTsKIH0KIAogV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24q
IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfYXNfaHRtbF9jb2xs
ZWN0aW9uKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQpAQCAtNzIw
LDEwICs3MTksOSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25zKFdl
YktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYQogICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VVUkkp
OwogICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFF1YWxpZmllZE5hbWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgocXVhbGlmaWVkTmFtZSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZU5TKGNvbnZlcnRlZE5hbWVzcGFjZVVS
SSwgY29udmVydGVkUXVhbGlmaWVkTmFtZSwgY29udmVydGVkVmFsdWUsIGVjKTsKLSAgICBpZiAo
ZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgYXV0byByZXN1bHQgPSBpdGVtLT5zZXRBdHRyaWJ1dGVOUyhjb252ZXJ0ZWROYW1l
c3BhY2VVUkksIGNvbnZlcnRlZFF1YWxpZmllZE5hbWUsIGNvbnZlcnRlZFZhbHVlKTsKKyAgICBp
ZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwog
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CiAgICAgfQogfQpAQCAtNzc0
LDEzICs3NzIsMTMgQEAgV2ViS2l0RE9NQXR0ciogd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRy
aWJ1dGVfbm9kZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxmLAogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkF0dHIqIGNvbnZlcnRlZE5ld0F0
dHIgPSBXZWJLaXQ6OmNvcmUobmV3QXR0cik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5zZXRBdHRyaWJ1dGVOb2RlTlMoKmNvbnZlcnRlZE5ld0F0dHIsIGVjKSk7Ci0g
ICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0QXR0cmlidXRlTm9kZU5TKCpj
b252ZXJ0ZWROZXdBdHRyKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KHJlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKS5nZXQoKSk7CiB9CiAKIGdib29sZWFuIHdlYmtpdF9kb21f
ZWxlbWVudF9oYXNfYXR0cmlidXRlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiBuYW1lKQpAQCAtODc0LDEzICs4NzIsMTMgQEAgZ2Jvb2xlYW4gd2Via2l0X2RvbV9lbGVtZW50
X21hdGNoZXMoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG8KICAg
ICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgRkFMU0UpOwogICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkU2VsZWN0b3JzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7
Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gaXRlbS0+bWF0Y2hlcyhjb252ZXJ0ZWRTZWxlY3RvcnMsIGVjKTsKLSAgICBpZiAoZWMpIHsK
LSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Cisg
ICAgYXV0byByZXN1bHQgPSBpdGVtLT5tYXRjaGVzKGNvbnZlcnRlZFNlbGVjdG9ycyk7CisgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsK
ICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKTsKIH0KIAogV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVt
ZW50X2Nsb3Nlc3QoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9y
cywgR0Vycm9yKiogZXJyb3IpCkBAIC04OTEsMzAgKzg4OSwxOCBAQCBXZWJLaXRET01FbGVtZW50
KiB3ZWJraXRfZG9tX2VsZW1lbnRfY2xvc2VzdChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhcgogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsK
ICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVjdG9ycyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzZWxl
Y3RvcnMpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2xvc2Vz
dChjb252ZXJ0ZWRTZWxlY3RvcnMsIGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0
ID0gaXRlbS0+Y2xvc2VzdChjb252ZXJ0ZWRTZWxlY3RvcnMpOworICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7CiAgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAogZ2Jvb2xl
YW4gd2Via2l0X2RvbV9lbGVtZW50X3dlYmtpdF9tYXRjaGVzX3NlbGVjdG9yKFdlYktpdERPTUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKQogewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxlY3RvcnMsIEZBTFNFKTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCghZXJyb3IgfHwgISplcnJvciwgRkFMU0UpOwotICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2VsZWN0
b3JzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7Ci0gICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+bWF0Y2hlcyhj
b252ZXJ0ZWRTZWxlY3RvcnMsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gd2Via2l0X2RvbV9lbGVtZW50X21hdGNoZXMoc2VsZiwgc2VsZWN0b3JzLCBlcnJvcik7CiB9
CiAKIHZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3dlYmtpdF9yZXF1ZXN0X2Z1bGxzY3JlZW4oV2Vi
S2l0RE9NRWxlbWVudCogc2VsZikKQEAgLTkzNSwxMyArOTIxLDEzIEBAIFdlYktpdERPTUVsZW1l
bnQqIHdlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfZWxlbWVudChXZWJLaXRET01F
bGVtZW50KiBzCiAgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRXaGVyZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh3aGVyZSk7CiAgICAgV2ViQ29yZTo6RWxlbWVudCogY29udmVydGVkRWxlbWVudCA9IFdlYktp
dDo6Y29yZShlbGVtZW50KTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPmluc2VydEFkamFjZW50RWxlbWVudChjb252ZXJ0ZWRXaGVyZSwgKmNvbnZlcnRlZEVsZW1l
bnQsIGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+aW5zZXJ0QWRq
YWNlbnRFbGVtZW50KGNvbnZlcnRlZFdoZXJlLCAqY29udmVydGVkRWxlbWVudCk7CisgICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwog
fQogCiB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfaHRtbChXZWJLaXRE
T01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogd2hlcmUsIGNvbnN0IGdjaGFyKiBodG1sLCBH
RXJyb3IqKiBlcnJvcikKQEAgLTk1NCwxMCArOTQwLDkgQEAgdm9pZCB3ZWJraXRfZG9tX2VsZW1l
bnRfaW5zZXJ0X2FkamFjZW50X2h0bWwoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFdoZXJlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHdoZXJl
KTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRIdG1sID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KGh0bWwpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPmlu
c2VydEFkamFjZW50SFRNTChjb252ZXJ0ZWRXaGVyZSwgY29udmVydGVkSHRtbCwgZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPmluc2VydEFkamFjZW50SFRNTChjb252
ZXJ0ZWRXaGVyZSwgY29udmVydGVkSHRtbCk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJl
c3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAgLTk3MiwxMCArOTU3LDkgQEAgdm9pZCB3ZWJr
aXRfZG9tX2VsZW1lbnRfaW5zZXJ0X2FkamFjZW50X3RleHQoV2ViS2l0RE9NRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwogICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFdoZXJlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHdoZXJlKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUZXh0ID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHRleHQpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGl0ZW0tPmluc2VydEFkamFjZW50VGV4dChjb252ZXJ0ZWRXaGVyZSwgY29udmVydGVkVGV4
dCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPmluc2VydEFkamFj
ZW50VGV4dChjb252ZXJ0ZWRXaGVyZSwgY29udmVydGVkVGV4dCk7CisgICAgaWYgKHJlc3VsdC5o
YXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAgLTEyNjMsMTAgKzEyNDcs
OSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfaW5uZXJfaHRtbChXZWJLaXRET01FbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9y
IHx8ICEqZXJyb3IpOwogICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0
ZW0tPnNldElubmVySFRNTChjb252ZXJ0ZWRWYWx1ZSwgZWMpOwotICAgIGlmIChlYykgewotICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGl0ZW0tPnNldElubmVySFRNTChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAgLTEyODgs
MTAgKzEyNzEsOSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfb3V0ZXJfaHRtbChXZWJL
aXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdQogICAgIGdfcmV0dXJuX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IpOwogICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGl0ZW0tPnNldE91dGVySFRNTChjb252ZXJ0ZWRWYWx1ZSwgZWMpOwotICAgIGlmIChl
YykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVj
KTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPnNldE91dGVySFRNTChjb252ZXJ0ZWRWYWx1ZSk7
CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29k
ZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmNw
cAppbmRleCAzNWMxN2ZlMmZkNmZjZTZkNWE1Y2IzNWM5ZmVkYjUzNTc2OTQ1YmI5Li41NzYzYWZh
OTZjNDMzYzY4MzEwYmJiNGI5MzlhYTYxZjljOTJjYWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hbWVk
Tm9kZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXAuY3BwCkBAIC0yMCwxNiArMjAsMTcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRET01OYW1lZE5vZGVNYXAu
aCIKIAotI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKICNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTU5hbWVkTm9kZU1hcFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2Rl
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0F0dHIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgotI2luY2x1ZGUgIldlYktpdERPTU5h
bWVkTm9kZU1hcFByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgot
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IApAQCAtMTUyLDEzICsxNTMsMTMgQEAgV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9u
b2RlX21hcF9zZXRfbmFtZWRfaXRlbShXZWJLaXRET01OYW1lZE5vZGVNYXAqIHMKICAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CiAgICAgV2ViQ29yZTo6TmFt
ZWROb2RlTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6Ok5vZGUq
IGNvbnZlcnRlZE5vZGUgPSBXZWJLaXQ6OmNvcmUobm9kZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5zZXROYW1lZEl0ZW0oKmNvbnZlcnRlZE5vZGUsIGVjKSk7Ci0g
ICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0TmFtZWRJdGVtKCpjb252ZXJ0
ZWROb2RlKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVhc2VFeGNlcHRp
b24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KHJlc3VsdC5yZWxlYXNl
UmV0dXJuVmFsdWUoKS5nZXQoKSk7CiB9CiAKIFdlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFt
ZWRfbm9kZV9tYXBfcmVtb3ZlX25hbWVkX2l0ZW0oV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxm
LCBjb25zdCBnY2hhciogbmFtZSwgR0Vycm9yKiogZXJyb3IpCkBAIC0xNjksMTMgKzE3MCwxMyBA
QCBXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3JlbW92ZV9uYW1lZF9p
dGVtKFdlYktpdERPTU5hbWVkTm9kZU1hcAogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJv
ciB8fCAhKmVycm9yLCAwKTsKICAgICBXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChuYW1lKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPnJlbW92ZU5hbWVkSXRlbShjb252ZXJ0ZWROYW1lLCBlYykpOwotICAgIGlmIChlYykgewot
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IGl0ZW0tPnJlbW92ZU5hbWVkSXRlbShjb252ZXJ0ZWROYW1lKTsKKyAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkp
OwogICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KS5wdHIoKSk7CiB9CiAKIFdlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBf
aXRlbShXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGd1bG9uZyBpbmRleCkKQEAgLTIwMiwx
OSArMjAzLDcgQEAgV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRf
bmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5vZGVNYXAKIAogV2ViS2l0RE9NTm9kZSogd2Vi
a2l0X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5v
ZGVNYXAqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIEdFcnJvcioqIGVycm9yKQogewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX05BTUVEX05PREVfTUFQKHNlbGYpLCAwKTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUobm9kZSksIDApOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJDb3JlOjpOYW1l
ZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6Tm9kZSog
Y29udmVydGVkTm9kZSA9IFdlYktpdDo6Y29yZShub2RlKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPnNldE5hbWVkSXRlbSgqY29udmVydGVkTm9kZSwgZWMpKTsKLSAg
ICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVj
ZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9
Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVy
biB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3NldF9uYW1lZF9pdGVtKHNlbGYsIG5vZGUsIGVy
cm9yKTsKIH0KIAogV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9yZW1v
dmVfbmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGNvbnN0IGdjaGFy
KiBuYW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUsIEdFcnJvcioqIGVycm9yKQpA
QCAtMjI3LDEzICsyMTYsMTMgQEAgV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2Rl
X21hcF9yZW1vdmVfbmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5vZGUKICAgICBXZWJDb3Jl
OjpOYW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkTmFtZXNwYWNlVVJJID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFj
ZVVSSSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTG9jYWxOYW1lID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KGxvY2FsTmFtZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5yZW1vdmVOYW1lZEl0ZW1OUyhjb252ZXJ0ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZExv
Y2FsTmFtZSwgZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgYXV0byByZXN1bHQgPSBpdGVtLT5yZW1v
dmVOYW1lZEl0ZW1OUyhjb252ZXJ0ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZExvY2FsTmFtZSk7
CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29k
ZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1bHQucmVsZWFzZVJldHVyblZh
bHVlKCkucHRyKCkpOwogfQogCiBndWxvbmcgd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRf
bGVuZ3RoKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01F
bGVtZW50Lm1tCmluZGV4IGE1MzQ1MGZkMjc3ZWNjNTdiYmJmMDA5M2JjY2I1ZTI4MTE3YWU4MmUu
LjJjMDZjZWM2YTUwM2M3NTYzNjZjMWQ2ZGJmMmU2Njc5NTYzNDk0MGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1l
bnQubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
bWFjL1dLRE9NRWxlbWVudC5tbQpAQCAtNDUsOSArNDUsNyBAQCAtIChOU1N0cmluZyAqKWdldEF0
dHJpYnV0ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUKIAogLSAodm9pZClzZXRBdHRyaWJ1dGU6KE5T
U3RyaW5nICopbmFtZSB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZQogewotICAgIC8vIEZJWE1FOiBE
byBzb21ldGhpbmcgYWJvdXQgdGhlIGV4Y2VwdGlvbi4KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjOwotICAgIGRvd25jYXN0PFdlYkNvcmU6OkVsZW1lbnQ+KCpfaW1wbCkuc2V0QXR0cmli
dXRlKG5hbWUsIHZhbHVlLCBlYyk7CisgICAgZG93bmNhc3Q8V2ViQ29yZTo6RWxlbWVudD4oKl9p
bXBsKS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCiAtIChOU1N0cmluZyAqKXRhZ05h
bWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCA2NDliMGI2MTgwNzA3NWIyZWE2MzJlOTE3MDE1ZjBkZmYxNzExMWY0Li5mNmQx
ZjliMmQxZTBjOTVhZDQwYWQ4OTY5N2E1NGQ0ZjBiZTM1NzM0IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTYtMTAtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IE1vdmUgRWxlbWVudCwgTmFtZWROb2RlTWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0
aW9uQ29kZSB0byBFeGNlcHRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NDIwNgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6Lgor
CisgICAgICAgICogZmFzdC9kb20vcmVzb3VyY2VzL3NoYWRvdy10ZXN0LWRyaXZlci5qczogRGVs
ZXRlZC4gVW51c2VkLgorCiAyMDE2LTEwLTMwICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlh
LmNvbT4KIAogICAgICAgICBVc2UgSGFyZkJ1enogb3QtbWF0aCBBUEkgdG8gcGFyc2UgdGhlIE9w
ZW5UeXBlIE1BVEggdGFibGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291
cmNlcy9zaGFkb3ctdGVzdC1kcml2ZXIuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJj
ZXMvc2hhZG93LXRlc3QtZHJpdmVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
MWVlYjdmOWZhMWM4MTg2YjA1NTRjNmY0MGI5ZWFkNjVmZDNhNWVjLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291
cmNlcy9zaGFkb3ctdGVzdC1kcml2ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBA
QAotLy8KLS8vIHNoYWRvdy10ZXN0LWRyaXZlci5qcwotLy8KLS8vIFRvIHVzZSBzaGFkb3ctdGVz
dC1kcml2ZXIuanMsIHlvdSBzaG91bGQgaGF2ZQotLy8gICA8ZGl2IGlkPSJhY3R1YWwtY29udGFp
bmVyIj48L2Rpdj4KLS8vICAgPGRpdiBpZD0iZXhwZWN0LWNvbnRhaW5lciI+PC9kaXY+Ci0vLyAg
IDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgotLy8gaW4geW91ciBib2R5LgotLy8KLS8vIFRoZW4s
IGRlZmluZSB0ZXN0IGZ1bmN0aW9ucyBoYXZpbmcgb25lIGFyZ3VtZW50ICdjYWxsSWZEb25lJy4K
LS8vIGNhbGxJZkRvbmUgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHlvdXIgdGVzdCBmdW5jdGlvbiBm
aW5pc2hlZC4KLS8vCi0vLyBJbiBib2R5Lm9ubG9hZCwgY2FsbCBkb1Rlc3QodGVzdEZ1bmNzKSB3
aGVyZSB0ZXN0RnVuY3MgaXMgYW4gYXJyYXkgb2YgdGVzdCBmdW5jdGlvbnMuCi0vLwotLy8gU2Vl
IGNvbnRlbnQtZWxlbWVudC1tb3ZlLmh0bWwgYXMgYW4gZXhhbXBsZS4KLS8vCi0KLWZ1bmN0aW9u
IGxvZyhtZXNzYWdlKSB7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5p
bm5lckhUTUwgKz0gKG1lc3NhZ2UgKyAiXG4iKTsKLX0KLQotZnVuY3Rpb24gcmVtb3ZlQWxsQ2hp
bGRyZW4oZWxlbSkgewotICAgIHdoaWxlIChlbGVtLmZpcnN0Q2hpbGQpCi0gICAgICAgIGVsZW0u
cmVtb3ZlQ2hpbGQoZWxlbS5maXJzdENoaWxkKTsKLX0KLQotZnVuY3Rpb24gY2xlYW5VcCgpIHsK
LSAgICByZW1vdmVBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNv
bnRhaW5lcicpKTsKLSAgICByZW1vdmVBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZXhwZWN0LWNvbnRhaW5lcicpKTsKLX0KLQotZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVyTGlu
ZXModGV4dCkgewotICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJyk7Ci0gICAgbGluZXMu
c3BsaWNlKDAsIDIpOwotICAgIHJldHVybiBsaW5lcy5qb2luKCdcbicpOwotfQotCi1mdW5jdGlv
biBjaGVjaygpIHsKLSAgICB2YXIgZXhwZWN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKTsKLSAgICB2YXIgYWN0dWFsQ29udGFpbmVyID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKTsKLSAgICB2YXIgb3JpZ2lu
YWxEaXNwbGF5VmFsdWUgPSBhY3R1YWxDb250YWluZXIuc3R5bGUuZGlzcGxheTsKLSAgICBhY3R1
YWxDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICBleHBlY3RDb250YWluZXIu
b2Zmc2V0TGVmdDsKLSAgICB2YXIgcmVmQ29udGFpbmVyUmVuZGVyVHJlZSA9IGludGVybmFscy5l
bGVtZW50UmVuZGVyVHJlZUFzVGV4dChleHBlY3RDb250YWluZXIpOwotICAgIHZhciByZWZSZW5k
ZXJUcmVlID0gcmVtb3ZlQ29udGFpbmVyTGluZXMocmVmQ29udGFpbmVyUmVuZGVyVHJlZSk7Ci0g
ICAgYWN0dWFsQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBvcmlnaW5hbERpc3BsYXlWYWx1ZTsK
LQotICAgIG9yaWdpbmFsRGlzcGxheVZhbHVlID0gZXhwZWN0Q29udGFpbmVyLnN0eWxlLmRpc3Bs
YXk7Ci0gICAgZXhwZWN0Q29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgYWN0
dWFsQ29udGFpbmVyLm9mZnNldExlZnQ7Ci0gICAgdmFyIHRhcmdldENvbnRhaW5lclJlbmRlclRy
ZWUgPSBpbnRlcm5hbHMuZWxlbWVudFJlbmRlclRyZWVBc1RleHQoYWN0dWFsQ29udGFpbmVyKTsK
LSAgICB2YXIgdGFyZ2V0UmVuZGVyVHJlZSA9IHJlbW92ZUNvbnRhaW5lckxpbmVzKHRhcmdldENv
bnRhaW5lclJlbmRlclRyZWUpOwotICAgIGV4cGVjdENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0g
b3JpZ2luYWxEaXNwbGF5VmFsdWU7Ci0KLSAgICBpZiAodGFyZ2V0UmVuZGVyVHJlZSA9PSByZWZS
ZW5kZXJUcmVlKQotICAgICAgICBsb2coIlBBU1MiKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbG9n
KCJGQUlMIik7Ci0gICAgICAgIGxvZygiRXhwZWN0ZWQ6ICIpOwotICAgICAgICBsb2cocmVmUmVu
ZGVyVHJlZSk7Ci0gICAgICAgIGxvZygiQWN0dWFsOiAiKTsKLSAgICAgICAgbG9nKHRhcmdldFJl
bmRlclRyZWUpOwotICAgIH0KLX0KLQotZnVuY3Rpb24gY3JlYXRlU3BhbldpdGhUZXh0KHRleHQs
IGNsYXNzTmFtZSkgewotICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3Bh
bicpOwotICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkp
OwotICAgIGlmIChjbGFzc05hbWUpCi0gICAgICAgIHNwYW4uY2xhc3NOYW1lID0gY2xhc3NOYW1l
OwotICAgIHJldHVybiBzcGFuOwotfQotCi1mdW5jdGlvbiBjcmVhdGVDb250ZW50V2l0aFNlbGVj
dChzZWxlY3QsIGZhbGxiYWNrVGV4dCkgewotICAgIHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNy
ZWF0ZUNvbnRlbnRFbGVtZW50KCk7Ci0gICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3NlbGVjdCcs
IHNlbGVjdCk7Ci0gICAgaWYgKGZhbGxiYWNrVGV4dCkKLSAgICAgICAgY29udGVudC5hcHBlbmRD
aGlsZChjcmVhdGVTcGFuV2l0aFRleHQoZmFsbGJhY2tUZXh0KSk7Ci0KLSAgICByZXR1cm4gY29u
dGVudDsKLX0KLQotZnVuY3Rpb24gY3JlYXRlQ29udGVudFdpdGhUZXh0KGZhbGxiYWNrVGV4dCkg
ewotICAgIHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNyZWF0ZUNvbnRlbnRFbGVtZW50KCk7Ci0g
ICAgaWYgKGZhbGxiYWNrVGV4dCkKLSAgICAgICAgY29udGVudC5pbm5lckhUTUwgPSBmYWxsYmFj
a1RleHQ7Ci0KLSAgICByZXR1cm4gY29udGVudDsKLX0KLQotZnVuY3Rpb24gYXBwZW5kU2hhZG93
KHRhcmdldCwgc2VsZWN0KSB7Ci0gICAgdmFyIHJvb3QgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93
Um9vdCh0YXJnZXQpOwotCi0gICAgdmFyIGNvbnRlbnQgPSBpbnRlcm5hbHMuY3JlYXRlQ29udGVu
dEVsZW1lbnQoKTsKLSAgICBjb250ZW50LnNldEF0dHJpYnV0ZSgnc2VsZWN0Jywgc2VsZWN0KTsK
LSAgICBjb250ZW50LmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiRkFMTEJBQ0siKSk7
Ci0KLSAgICByb290LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ7U0hBRE9X
OiAiKSk7Ci0gICAgcm9vdC5hcHBlbmRDaGlsZChjb250ZW50KTsKLSAgICByb290LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ9IikpOwotfQotCi1mdW5jdGlvbiBhcHBlbmRT
aGFkb3dEZWVwKHRhcmdldCwgc2VsZWN0KSB7Ci0gICAgdmFyIHJvb3QgPSBpbnRlcm5hbHMuZW5z
dXJlU2hhZG93Um9vdCh0YXJnZXQpOwotCi0gICAgdmFyIGNoaWxkID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOwotICAgIHsKLSAgICAgICAgdmFyIGNvbnRlbnQgPSBpbnRlcm5hbHMu
Y3JlYXRlQ29udGVudEVsZW1lbnQoKTsKLSAgICAgICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3Nl
bGVjdCcsIHNlbGVjdCk7Ci0gICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoY3JlYXRlU3Bhbldp
dGhUZXh0KCJGQUxMQkFDSyIpKTsKLQotICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgie0lOTkVSOiAiKSk7Ci0gICAgICAgIGNoaWxkLmFwcGVuZENoaWxk
KGNvbnRlbnQpOwotICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgifSIpKTsKLSAgICB9Ci0KLSAgICByb290LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCJ7U0hBRE9XOiAiKSk7Ci0gICAgcm9vdC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0g
ICAgcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgifSIpKTsKLX0KLQot
ZnVuY3Rpb24gZG9UZXN0SWZMZWZ0KHJlc3RUZXN0cykgewotICAgIHZhciB0ZXN0ID0gcmVzdFRl
c3RzLnNoaWZ0KCk7Ci0gICAgaWYgKHRlc3QgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIGRvbmVU
ZXN0KCk7Ci0KLSAgICB2YXIgY2FsbElmRG9uZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgY2hlY2soKTsKLSAgICAgICAgICAgIGNs
ZWFuVXAoKTsKLSAgICAgICAgICAgIGRvVGVzdElmTGVmdChyZXN0VGVzdHMpOwotICAgICAgICB9
LCAwKTsKLSAgICB9OwotCi0gICAgbG9nKHRlc3QubmFtZSk7Ci0gICAgdGVzdChjYWxsSWZEb25l
KTsKLX0KLQotZnVuY3Rpb24gZG9uZVRlc3QoKSB7Ci0gICAgbG9nKCJURVNUIENPTVBMRVRFRCIp
OwotICAgIGlmICh3aW5kb3cudGVhckRvd25PbmNlKQotICAgICAgICB3aW5kb3cudGVhckRvd25P
bmNlKCk7Ci0gICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19Ci0KLS8vIEEgdGVzdCBkcml2
ZXIuIENhbGwgdGhpcyBib2R5Lm9ubG9hZC4KLWZ1bmN0aW9uIGRvVGVzdCh0ZXN0cykgewotICAg
IGlmICh3aW5kb3cuc2V0VXBPbmNlKQotICAgICAgICB3aW5kb3cuc2V0VXBPbmNlKCk7Ci0KLSAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKLSAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7Ci0gICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwotICAgIH0KLQotICAgIGNs
ZWFuVXAoKTsKLSAgICBkb1Rlc3RJZkxlZnQodGVzdHMpOwotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293369</attachid>
            <date>2016-10-30 15:21:28 -0700</date>
            <delta_ts>2016-10-30 15:28:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164206-20161030151733.patch</filename>
            <type>text/plain</type>
            <size>107765</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzMyYmNkN2QwN2VhNmRh
Njk5MDE3NTE3MWY3NzlhOTZhNzQyNjNlNS4uODQzN2IyN2E2OGEyZDQ1OTFiZmI3ZDFhOWIzMDZh
Y2NhOTM0ZTQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDE2LTEwLTMwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIEVsZW1lbnQsIE5hbWVk
Tm9kZU1hcCwgYW5kIERPTVN0cmluZ01hcCBmcm9tIEV4Y2VwdGlvbkNvZGUgdG8gRXhjZXB0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyMDYK
KworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NU3Ry
aW5nTWFwOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKTogVXNlIG1vZGVybiBmb3IgbG9vcCwgYW5kCisg
ICAgICAgIHVwZGF0ZXMgc2luY2UgdGhlIG5hbWVzIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGEgdmVj
dG9yLgorICAgICAgICAoV2ViQ29yZTo6SlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKTogVXNl
IHByb3BhZ2F0ZUV4Y2VwdGlvbi4gQWxzbyByZXR1cm4KKyAgICAgICAgdHJ1ZSBhbnkgdGltZSBh
biBleGNlcHRpb24gaXMgcmFpc2VkLiBTaW5jZSB0cnVlIHRlbGxzIHRoZSBjYWxsZXIgdG8gcmV0
dXJuCisgICAgICAgIHdpdGhvdXQgZG9pbmcgYW55IHdvcmssIHdlIGFsd2F5cyB3YW50IHRvIHJl
dHVybiB0aGF0IG9uIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgKiBkb20vRGF0YXNldERPTVN0cmlu
Z01hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhc2V0RE9NU3RyaW5nTWFwOjpuYW1lcyk6
IFJlbmFtZWQgZnJvbSBnZXROYW1lcyBhbmQgbWFkZSB0aGlzCisgICAgICAgIHJldHVybiBhIFZl
Y3RvciBpbnN0ZWFkIG9mIHBvcHVsYXRpbmcgYSBwYXNzZWQtaW4gdmVjdG9yLgorICAgICAgICAo
V2ViQ29yZTo6RGF0YXNldERPTVN0cmluZ01hcDo6c2V0SXRlbSk6IFVzZSBFeGNlcHRpb25Pci4K
KyAgICAgICAgKiBkb20vRGF0YXNldERPTVN0cmluZ01hcC5oOiBVcGRhdGVkIGZvciBhYm92ZS4K
KworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6YWRvcHROb2RlKTogVXBkYXRlZCB0byB1c2UgRXhjZXB0aW9uT3IgZm9yCisgICAgICAgIHJl
bW92ZUF0dHJpYnV0ZU5vZGUuIENoYW5nZWQgdG8gdXNlIHJlbW92ZSByYXRoZXIgdGhhbiByZW1v
dmVDaGlsZCBmb3IKKyAgICAgICAgYmV0dGVyIGNsYXJpdHkuCisKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGUpOiBVc2Ug
RXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjcmVhdGVTaGFkb3dSb290
KTogRGVsZXRlZC4gVW51c2VkLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0YWNoU2hh
ZG93KTogVXNlIEV4Y2VwdGlvbk9yLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2hhZG93
Um9vdEZvckJpbmRpbmdzKTogVHdlYWtlZCBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OnVzZXJBZ2VudFNoYWRvd1Jvb3QpOiBSZW1vdmVkIHVubmVlZGVkIGlmIHN0YXRlbW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjplbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KTog
VHdlYWtlZCBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5v
ZGUpOiBVc2UgRXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRy
aWJ1dGVOb2RlTlMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0
dHJpYnV0ZU5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlTmFtZSk6IERpdHRvLiBBbHNvIGNoYW5nZWQgcmV0dXJuIHJlc3VsdAorICAgICAgICB0
byBiZSBhIFF1YWxpZmllZE5hbWUgaW5zdGVhZCBvZiB1c2luZyBhbiBvdXQgYXJndW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6bWVyZ2VXaXRoTmV4dFRleHROb2RlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRPdXRlckhUTUwpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnNldElubmVySFRNTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6bWF0Y2hlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xv
c2VzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0QWRqYWNlbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydEFkamFjZW50RWxlbWVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE5vZGVGb3JJbnNlcnRpb24pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRFbGVtZW50Rm9ySW5zZXJ0aW9uKTogQWRk
ZWQuIEhlbHBlciBmb3IgdGhlCisgICAgICAgIGluc2VydEFkamFjZW50SFRNTCBmdW5jdGlvbiB0
byBlbGltaW5hdGUgYSBsb2NhbCB2YXJpYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
Omluc2VydEFkamFjZW50SFRNTCk6IFVzZSBFeGNlcHRpb25Pci4KKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6Omluc2VydEFkamFjZW50VGV4dCk6IERpdHRvLgorICAgICAgICAqIGRvbS9FbGVt
ZW50Lmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorICAgICAgICAqIGRvbS9FbGVtZW50LmlkbDogVXNl
IG5vbi1sZWdhY3kgZXhjZXB0aW9ucy4KKworICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0pOiBVc2Ug
RXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnN1cHBvcnRlZFBy
b3BlcnR5TmFtZXMpOiBVcGRhdGVkIHRvIGNoZWNrCisgICAgICAgIHdoaWNoIHN0cmluZ3Mgc2hv
dWxkIGJlIHJlbW92ZWQgd2l0aG91dCBjb3B5aW5nIHRoZSBzdHJpbmdzLgorICAgICAgICAoV2Vi
Q29yZTo6TmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW1OUyk6IFVzZSBFeGNlcHRpb25Pci4K
KyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKTogRGl0dG8uIFJl
bW92ZWQgb3ZlcmxvYWQgZm9yCisgICAgICAgIGxlZ2FjeSBiaW5kaW5nczsgbW92ZSB0aGF0IHRv
IHRoZSBiaW5kaW5ncyB0aGVtc2VsdmVzLgorICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuaDog
VXBkYXRlZCBmb3IgYWJvdmUuCisgICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5pZGw6IFVzZSBu
b24tbGVnYWN5IGV4Y2VwdGlvbnMuCisKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQpOiBVcGRhdGVkIHNp
bmNlIG1lcmdlV2l0aE5leHRUZXh0Tm9kZQorICAgICAgICBub3cgdXNlcyBFeGNlcHRpb25Pci4K
KworICAgICAgICAqIGluc3BlY3Rvci9ET01FZGl0b3IuY3BwOiBVcGRhdGVkIHRvIHVzZSBFeGNl
cHRpb25Pci4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyk6IEFkZGVk
IGFuIG92ZXJsb2FkIGZvcgorICAgICAgICBFeGNlcHRpb24uCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dCk6IFVwZGF0ZWQgdG8gdXNlIEV4
Y2VwdGlvbk9yLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOiBVcGRh
dGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6c2V0U3R5bGVUZXh0KTogVXBkYXRlZCB0bworICAgICAgICB1c2UgdGhlIGNvcnJlY3QgdmVy
c2lvbiBvZiBzZXRBdHRyaWJ1dGU7IHRoZXJlIHdhcyBuZXZlciBhIHJpc2sgdGhhdCB0aGVyZQor
ICAgICAgICB3b3VsZCBiZSBhbiBleGNlcHRpb24sIGJ1dCBub3cgdGhhdCdzIGNsZWFyZXIuCisK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRl
cm5hbHM6OmVuc3VyZVNoYWRvd1Jvb3QpOiBEZWxldGVkLiBXYXMgdW51c2VkLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpjcmVhdGVTaGFkb3dSb290KTogRGl0dG8uCisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbHMuaWRsOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIHht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmhhbmRsZU5hbWVzcGFjZUF0dHJpYnV0ZXMpOiBVc2UgdXBkYXRlZCBwYXJzZUF0dHJpYnV0ZU5h
bWUsCisgICAgICAgIHdoaWNoIHVzZXMgRXhjZXB0aW9uT3IgYW5kIGEgcmV0dXJuIHZhbHVlIGlu
c3RlYWQgb2YgYW4gb3V0IGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVu
dEF0dHJpYnV0ZXMpOiBEaXR0by4KKwogMjAxNi0xMC0yOCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxn
aGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXVtEaXJlY3QyRF0gQ29ycmVjdCBib29ra2Vl
cGluZyBmb3IgYmVnaW4vZW5kIGRyYXcgcGFpcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA5YzFmZjUw
OWI0MjU4YjIzNDE0MTAzZTgzNzA2MGVlMmQwYTI2ODc2Li5jZjZhZTYxZDk5NDU0YmMwYjk5MDE4
MWViNDRiMmIzMzM0MjVkYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIw
MTYtMTAtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUg
RWxlbWVudCwgTmFtZWROb2RlTWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0aW9uQ29k
ZSB0byBFeGNlcHRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDIwNgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAg
ICAgICogRE9NL0RPTUVsZW1lbnQubW06CisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0SW5uZXJI
VE1MOl0pOiBVcGRhdGVkIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICAgKC1bRE9NRWxlbWVu
dCBzZXRPdXRlckhUTUw6XSk6IERpdHRvLgorICAgICAgICAoLVtET01FbGVtZW50IHNldEF0dHJp
YnV0ZTp2YWx1ZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0QXR0cmlidXRl
Tm9kZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgcmVtb3ZlQXR0cmlidXRlTm9k
ZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0QXR0cmlidXRlTlM6cXVhbGlm
aWVkTmFtZTp2YWx1ZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0QXR0cmli
dXRlTm9kZU5TOl0pOiBEaXR0by4KKyAgICAgICAgKC1bRE9NRWxlbWVudCBtYXRjaGVzOl0pOiBE
aXR0by4KKyAgICAgICAgKC1bRE9NRWxlbWVudCBjbG9zZXN0Ol0pOiBEaXR0by4KKyAgICAgICAg
KC1bRE9NRWxlbWVudCB3ZWJraXRNYXRjaGVzU2VsZWN0b3I6XSk6IERpdHRvLgorICAgICAgICAq
IERPTS9ET01IVE1MRWxlbWVudC5tbToKKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgaW5zZXJ0
QWRqYWNlbnRFbGVtZW50OmVsZW1lbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtET01IVE1MRWxl
bWVudCBpbnNlcnRBZGphY2VudEhUTUw6aHRtbDpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUhU
TUxFbGVtZW50IGluc2VydEFkamFjZW50VGV4dDp0ZXh0Ol0pOiBEaXR0by4KKyAgICAgICAgKiBE
T00vRE9NTmFtZWROb2RlTWFwLm1tOgorICAgICAgICAoLVtET01OYW1lZE5vZGVNYXAgc2V0TmFt
ZWRJdGVtOl0pOiBEaXR0by4KKyAgICAgICAgKC1bRE9NTmFtZWROb2RlTWFwIHJlbW92ZU5hbWVk
SXRlbTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTU5hbWVkTm9kZU1hcCBzZXROYW1lZEl0ZW1O
UzpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTU5hbWVkTm9kZU1hcCByZW1vdmVOYW1lZEl0ZW1O
Uzpsb2NhbE5hbWU6XSk6IERpdHRvLgorCiAyMDE2LTEwLTI5ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IG1vcmUgb2YgRE9NIGZyb20gRXhjZXB0aW9u
Q29kZSB0byBFeGNlcHRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCAzNjkyMDU2ZWUzYTc3ZWJlOGY4
NGUyNGVkMzg0MTAxMzUyMjUwMDc5Li4xYTY2YWY3MDVmMGY2ZTA4MjdjN2QwODdhNmE5ZGI1Nzg2
M2VmMjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMTAtMzAgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgRWxlbWVudCwgTmFt
ZWROb2RlTWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0aW9uQ29kZSB0byBFeGNlcHRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDIw
NgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgICogRE9NQ29y
ZUNsYXNzZXMuY3BwOgorICAgICAgICAoRE9NRWxlbWVudDo6c2V0QXR0cmlidXRlKTogVXBkYXRl
ZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAgICogRE9NSFRNTENsYXNzZXMuY3BwOgorICAg
ICAgICAoRE9NSFRNTEVsZW1lbnQ6OnNldElubmVySFRNTCk6IERpdHRvLgorCiAyMDE2LTEwLTMw
ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgYnVpbGQgZml4IChEaXJlY3QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0ZjM5MjUxODc0NjFkM2IyNTc1
YTE2NjAyYjllYmI1YjE4M2QxMjQ2Li4xNjc2ZWE5NDE1MjE5YTU2NTA4YjAxNDcwZThiZTk1NjBk
ZmRkYTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTYtMTAtMzAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgRWxlbWVudCwgTmFtZWROb2Rl
TWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0aW9uQ29kZSB0byBFeGNlcHRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDIwNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXAuY3BwOgorICAg
ICAgICAod2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbSk6IFVwZGF0ZWQg
ZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAgICAod2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9y
ZW1vdmVfbmFtZWRfaXRlbSk6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9uYW1lZF9ub2Rl
X21hcF9zZXRfbmFtZWRfaXRlbV9ucyk6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9uYW1l
ZF9ub2RlX21hcF9yZW1vdmVfbmFtZWRfaXRlbV9ucyk6IERpdHRvLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudC5jcHA6Cisg
ICAgICAgICh3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZSk6IERpdHRvLgorICAgICAg
ICAod2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbm9kZSk6IERpdHRvLgorICAgICAg
ICAod2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGVfbm9kZSk6IERpdHRvLgorICAg
ICAgICAod2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbnMpOiBEaXR0by4KKyAgICAg
ICAgKHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGVfbnMpOiBEaXR0by4KKyAg
ICAgICAgKHdlYmtpdF9kb21fZWxlbWVudF9tYXRjaGVzKTogRGl0dG8uCisgICAgICAgICh3ZWJr
aXRfZG9tX2VsZW1lbnRfY2xvc2VzdCk6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9lbGVt
ZW50X3dlYmtpdF9tYXRjaGVzX3NlbGVjdG9yKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfZG9t
X2VsZW1lbnRfaW5zZXJ0X2FkamFjZW50X2VsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfaHRtbCk6IERpdHRvLgorICAgICAgICAod2Vi
a2l0X2RvbV9lbGVtZW50X2luc2VydF9hZGphY2VudF90ZXh0KTogRGl0dG8uCisgICAgICAgICh3
ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2lubmVyX2h0bWwpOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dF9kb21fZWxlbWVudF9zZXRfb3V0ZXJfaHRtbCk6IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQubW06CisgICAgICAgICgtW1dL
RE9NRWxlbWVudCBzZXRBdHRyaWJ1dGU6dmFsdWU6XSk6IERpdHRvLgorCiAyMDE2LTEwLTMwICBZ
dXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtET01dIElu
dHJvZHVjZSBXZWJDb3JlOjpqc0R5bmFtaWNEb3duY2FzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKaW5k
ZXggMzYxNDhmMjQ5OTEwMmRlYjc4NTU5MzNjOTE4N2M3YTUyMjdmYzY0Ny4uYzE0YzE5Nzk4MjIz
NGMzMTVkZDNjYWM4N2ZmNmI0MTRjZWNiMmEwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCkBAIC0z
NDIsNyArMzQyLDcgQEAgYm9vbCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnB1dERlbGVnYXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU4KICAgICBhdXRvIHNldFByb3Bl
cnR5SW50ZXJuYWxSZXN1bHQgPSB3cmFwcGVkKCkuc2V0UHJvcGVydHlJbnRlcm5hbChwcm9wZXJ0
eUluZm8ucHJvcGVydHlJRCwgcHJvcGVydHlWYWx1ZSwgaW1wb3J0YW50KTsKICAgICBpZiAoc2V0
UHJvcGVydHlJbnRlcm5hbFJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oKnN0YXRlLCBzZXRQcm9wZXJ0eUludGVybmFsUmVzdWx0LnJlbGVhc2VFeGNl
cHRpb24oKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHB1dFJlc3VsdCA9IHNldFByb3BlcnR5SW50ZXJuYWxSZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAKaW5kZXggMmVhOTI3YTViYTU2NzAy
OWI1NmQ1NmM5YzA5MjVhZGZiMzBlZGRlOC4uNzgzZmRkM2Q4OTY5YWU3ODRhMzU1MGMxYTA5NTEy
ZjUyZmNlOTMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01T
dHJpbmdNYXBDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
U3RyaW5nTWFwQ3VzdG9tLmNwcApAQCAtMzcsNTEgKzM3LDQ1IEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0RPTVN0cmluZ01hcDo6Z2V0T3du
UHJvcGVydHlTbG90RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTRE9NU3RyaW5nTWFwOjpnZXRPd25Q
cm9wZXJ0eVNsb3REZWxlZ2F0ZShFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5
bWJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCBuYW1lSXNWYWxpZDsKICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGl0ZW0gPSB3cmFwcGVkKCkuaXRlbShwcm9wZXJ0eU5hbWVU
b1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBuYW1lSXNWYWxpZCk7CiAgICAgaWYgKG5hbWVJc1ZhbGlk
KSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgMCwgdG9KUzxJRExET01TdHJpbmc+KCpl
eGVjLCBpdGVtKSk7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgMCwgdG9KUzxJRExET01T
dHJpbmc+KCpzdGF0ZSwgaXRlbSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEpTRE9NU3RyaW5nTWFwOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0RPTVN0cmluZ01h
cDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRl
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
CiB7Ci0gICAgSlNET01TdHJpbmdNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01TdHJpbmdN
YXAqPihvYmplY3QpOwotICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwotICAgIHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5nZXROYW1lcyhuYW1lcyk7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IG5hbWVzLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIG5hbWVzW2ldKSk7
Ci0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOworICAgIGZvciAoYXV0byYgbmFtZSA6IGpzQ2FzdDxKU0RPTVN0cmlu
Z01hcCo+KG9iamVjdCktPndyYXBwZWQoKS5uYW1lcygpKQorICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBuYW1lKSk7CisgICAgQmFzZTo6Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0K
IAotYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIEpTRE9NU3RyaW5n
TWFwOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKICAg
ICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazsK
ICNlbmRpZgogCi0gICAgSlNET01TdHJpbmdNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01T
dHJpbmdNYXAqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpCi0gICAg
ICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZGVsZXRlSXRlbShwcm9w
ZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KGNlbGwsIHN0YXRlLCBwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBqc0Nh
c3Q8SlNET01TdHJpbmdNYXAqPihjZWxsKS0+d3JhcHBlZCgpLmRlbGV0ZUl0ZW0ocHJvcGVydHlO
YW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CiB9CiAKLWJvb2wgSlNET01TdHJpbmdNYXA6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaW5kZXgpCitib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCkKIHsKLSAgICByZXR1
cm4gZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRl
eCkpOworICAgIHJldHVybiBkZWxldGVQcm9wZXJ0eShjZWxsLCBzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbShzdGF0ZSwgaW5kZXgpKTsKIH0KIAotYm9vbCBKU0RPTVN0cmluZ01hcDo6cHV0RGVsZWdh
dGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmLCBib29sJiBwdXRSZXN1bHQpCitib29sIEpTRE9NU3RyaW5n
TWFwOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmLCBib29sJiBwdXRSZXN1bHQpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAocHJvcGVy
dHlOYW1lLmlzU3ltYm9sKCkpCkBAIC05MSwxNCArODUsMTcgQEAgYm9vbCBKU0RPTVN0cmluZ01h
cDo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1YKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rp
b25TdGFjazsKICNlbmRpZgogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdHJ1ZSk7CiAKLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICB3cmFwcGVkKCkuc2V0SXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhw
cm9wZXJ0eU5hbWUpLCBzdHJpbmdWYWx1ZSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7Ci0gICAgcHV0UmVzdWx0ID0gIWVjOwotICAgIHJldHVybiAhZWM7CisgICAgYXV0byBy
ZXN1bHQgPSB3cmFwcGVkKCkuc2V0SXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5h
bWUpLCBXVEZNb3ZlKHN0cmluZ1ZhbHVlKSk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCBzY29wZSwgcmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1
dFJlc3VsdCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3Bw
CmluZGV4IDgyZTNjMjgwNGZjMWFkODVmMWU2ZDBkYzRhNWQ4YzgwNmMyODhlY2QuLmJkZmIwNmIz
M2IxNzllYTA5ZmIwODlkZWE3ODU1M2FlNzQ2MDM0ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIGJvb2wg
SlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlCiAgICAgLy8gT25seSBwZXJmb3JtIHRoZSBjdXN0b20gcHV0IGlm
IHRoZSBvYmplY3QgZG9lc24ndCBoYXZlIGEgbmF0aXZlIHByb3BlcnR5IGJ5IHRoaXMgbmFtZS4K
ICAgICAvLyBTaW5jZSBoYXNQcm9wZXJ0eSgpIHdvdWxkIGVuZCB1cCBjYWxsaW5nIGNhbkdldEl0
ZW1zRm9yTmFtZSgpIGFuZCBiZSBmb29sZWQsIHdlIG5lZWQgdG8gY2hlY2sKICAgICAvLyB0aGUg
bmF0aXZlIHByb3BlcnR5IHNsb3RzIG1hbnVhbGx5LgotICAgIFByb3BlcnR5U2xvdCBzbG90KHRo
aXMsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7Cisg
ICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6R2V0T3duUHJvcGVydHkgfTsKIAogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpcy0+
Z2V0UHJvdG90eXBlRGlyZWN0KCk7CiAgICAgaWYgKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFz
T2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBz
bG90KSkKQEAgLTEyMCwxOSArMTIwLDE2IEBAIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShF
eGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlCiAgICAg
aWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIC8vIFRo
ZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgcHV0RGVsZWdhdGUoKSBzaG91bGQgaGFu
ZGxlIHRoZSBwdXQgb3BlcmF0aW9uICh3aGljaAotICAgICAgICAvLyBpZiB0cnVlLCB0ZWxscyB0
aGUgY2FsbGVyIG5vdCB0byBleGVjdXRlIHRoZSBnZW5lcmljIHB1dCkuIEl0IGRvZXMgbm90IGlu
ZGljYXRlIHdoZXRoZXIKLSAgICAgICAgLy8gcHV0RGVsZWdhdGUoKSBkaWQgc3VjY2Vzc2Z1bGx5
IGNvbXBsZXRlIHRoZSBvcGVyYXRpb24gb3Igbm90ICh3aGljaCBpdCBkaWRuJ3QgaW4gdGhpcwot
ICAgICAgICAvLyBjYXNlIGR1ZSB0byB0aGUgZXhjZXB0aW9uKS4KLSAgICAgICAgcHV0UmVzdWx0
ID0gZmFsc2U7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3Rh
dGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHRydWUpOworCisgICAgYXV0byBz
ZXRJdGVtUmVzdWx0ID0gd3JhcHBlZCgpLnNldEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJv
cGVydHlOYW1lKSwgc3RyaW5nVmFsdWUpOworICAgIGlmIChzZXRJdGVtUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHNjb3BlLCBzZXRJ
dGVtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIGF1dG8gc2V0SXRlbVJlc3VsdCA9IHdyYXBwZWQoKS5zZXRJdGVtKHByb3BlcnR5
TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIHN0cmluZ1ZhbHVlKTsKLSAgICBwdXRSZXN1bHQg
PSAhc2V0SXRlbVJlc3VsdC5oYXNFeGNlcHRpb24oKTsKLSAgICBwcm9wYWdhdGVFeGNlcHRpb24o
KnN0YXRlLCBzY29wZSwgV1RGTW92ZShzZXRJdGVtUmVzdWx0KSk7CisgICAgcHV0UmVzdWx0ID0g
dHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRE
T01TdHJpbmdNYXAuY3BwCmluZGV4IGRmMzFkOTAwNjUyOTI4NjYwZjdmZmI3ZGI1MWQ0M2Q4ZjI1
MzQyMGQuLjUzZjUyMGVmYTUzOTRjYzZkODAzYzM5Yjg1YWY0ZTdjM2MzMWY4YjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAK
ICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNTIsMTgg
KzE1MSwyMSBAQCB2b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OmRlcmVmKCkKICAgICBtX2VsZW1l
bnQuZGVyZWYoKTsKIH0KIAotdm9pZCBEYXRhc2V0RE9NU3RyaW5nTWFwOjpnZXROYW1lcyhWZWN0
b3I8U3RyaW5nPiYgbmFtZXMpCitWZWN0b3I8U3RyaW5nPiBEYXRhc2V0RE9NU3RyaW5nTWFwOjpu
YW1lcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygpKQotICAg
ICAgICByZXR1cm47CisgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CiAKLSAgICBmb3IgKGNvbnN0
IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogbV9lbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7
Ci0gICAgICAgIGlmIChpc1ZhbGlkQXR0cmlidXRlTmFtZShhdHRyaWJ1dGUubG9jYWxOYW1lKCkp
KQotICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGNvbnZlcnRBdHRyaWJ1dGVOYW1lVG9Qcm9wZXJ0
eU5hbWUoYXR0cmlidXRlLmxvY2FsTmFtZSgpKSk7CisgICAgaWYgKG1fZWxlbWVudC5oYXNBdHRy
aWJ1dGVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBtX2VsZW1lbnQuYXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkQXR0cmlidXRlTmFt
ZShhdHRyaWJ1dGUubG9jYWxOYW1lKCkpKQorICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChj
b252ZXJ0QXR0cmlidXRlTmFtZVRvUHJvcGVydHlOYW1lKGF0dHJpYnV0ZS5sb2NhbE5hbWUoKSkp
OworICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIG5hbWVzOwogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIERhdGFzZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIGJvb2wmIGlzVmFsaWQpCitjb25zdCBBdG9taWNTdHJpbmcmIERhdGFzZXRET01TdHJp
bmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wmIGlzVmFsaWQpIGNv
bnN0CiB7CiAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgIGlmIChtX2VsZW1lbnQuaGFzQXR0cmli
dXRlcygpKSB7CkBAIC0xOTEsMTQgKzE5MywxMSBAQCBjb25zdCBBdG9taWNTdHJpbmcmIERhdGFz
ZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wmCiAg
ICAgcmV0dXJuIG51bGxBdG9tOwogfQogCi12b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OnNldEl0
ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+IERhdGFzZXRET01TdHJpbmdNYXA6OnNldEl0ZW0oY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICghaXNWYWxp
ZFByb3BlcnR5TmFtZShuYW1lKSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2VsZW1lbnQuc2V0QXR0cmlidXRlKGNvbnZlcnRQcm9w
ZXJ0eU5hbWVUb0F0dHJpYnV0ZU5hbWUobmFtZSksIHZhbHVlLCBlYyk7CisgICAgaWYgKCFpc1Zh
bGlkUHJvcGVydHlOYW1lKG5hbWUpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFY
X0VSUiB9OworICAgIHJldHVybiBtX2VsZW1lbnQuc2V0QXR0cmlidXRlKGNvbnZlcnRQcm9wZXJ0
eU5hbWVUb0F0dHJpYnV0ZU5hbWUobmFtZSksIHZhbHVlKTsKIH0KIAogYm9vbCBEYXRhc2V0RE9N
U3RyaW5nTWFwOjpkZWxldGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRGF0YXNldERPTVN0cmluZ01hcC5oCmluZGV4IGYxOWEwNTAyZWMxYzdlY2Q5YTEzYzU0Nzg4
ZWVmM2VjMzM3NWFmMjEuLjFhOWJjNDUyMzE1MmFjZDJmZTY2NjIyZTI5NWJhNGJiOWE2YWM1MTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuaApAQCAtMjMsMjEgKzIz
LDE3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRl
ZiBEYXRhc2V0RE9NU3RyaW5nTWFwX2gKLSNkZWZpbmUgRGF0YXNldERPTVN0cmluZ01hcF9oCisj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiU2NyaXB0
V3JhcHBhYmxlLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRWxlbWVudDsKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNz
IERhdGFzZXRET01TdHJpbmdNYXAgZmluYWwgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRhc2V0RE9NU3RyaW5nTWFwKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAg
ZXhwbGljaXQgRGF0YXNldERPTVN0cmluZ01hcChFbGVtZW50JiBlbGVtZW50KQogICAgICAgICA6
IG1fZWxlbWVudChlbGVtZW50KQpAQCAtNDcsOSArNDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZWYoKTsKICAgICB2b2lkIGRlcmVmKCk7CiAKLSAgICB2b2lkIGdldE5hbWVzKFZlY3RvcjxTdHJp
bmc+Jik7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBpdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCYgaXNWYWxpZCk7Ci0gICAgdm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFZlY3RvcjxTdHJpbmc+IG5h
bWVzKCkgY29uc3Q7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpdGVtKGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCYgaXNWYWxpZCkgY29uc3Q7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0SXRl
bShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIGJvb2wgZGVs
ZXRlSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgRWxlbWVudCYgZWxlbWVudCgpIHsg
cmV0dXJuIG1fZWxlbWVudDsgfQpAQCAtNTksNSArNTUsMyBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRGF0YXNldERPTVN0cmluZ01hcF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBiMzlkNmYzYWEzYTRhMTc2NWU0YjFkNzIwNWJiMWYx
M2I5Nzg5Y2Y5Li5hZjM4MjkwYWUzYTU3YzQ0NWI3NjNhMGFlNTdhY2IzMzc5MWRkMWY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTEwMTMsMTAgKzEwMTMsMTUgQEAgUmVmUHRyPE5vZGU+
IERvY3VtZW50OjphZG9wdE5vZGUoTm9kZSYgc291cmNlLCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICBjYXNlIERPQ1VNRU5UX05PREU6CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNhc2UgQVRUUklCVVRFX05PREU6IHsgICAgICAg
ICAgICAgICAgICAgCisgICAgY2FzZSBBVFRSSUJVVEVfTk9ERTogewogICAgICAgICBhdXRvJiBh
dHRyID0gZG93bmNhc3Q8QXR0cj4oc291cmNlKTsKLSAgICAgICAgaWYgKGF0dHIub3duZXJFbGVt
ZW50KCkpCi0gICAgICAgICAgICBhdHRyLm93bmVyRWxlbWVudCgpLT5yZW1vdmVBdHRyaWJ1dGVO
b2RlKGF0dHIsIGVjKTsKKyAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBhdHRyLm93bmVyRWxl
bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGVsZW1lbnQtPnJlbW92ZUF0dHJp
YnV0ZU5vZGUoYXR0cik7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
CisgICAgICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGZhbGwgdGhyb3VnaCBoZXJlIGluc3RlYWQg
b2YgcmV0dXJuaW5nIGVhcmx5PworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0gICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTEwMzIsMTAgKzEwMzcsMTAgQEAg
UmVmUHRyPE5vZGU+IERvY3VtZW50OjphZG9wdE5vZGUoTm9kZSYgc291cmNlLCBFeGNlcHRpb25D
b2RlJiBlYykKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBpZiAoc291cmNlLnBhcmVudE5vZGUoKSkgewotICAgICAgICAg
ICAgc291cmNlLnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQoc291cmNlLCBlYyk7Ci0gICAgICAg
ICAgICBpZiAoZWMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1
dG8gcmVzdWx0ID0gc291cmNlLnJlbW92ZSgpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgICBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29k
ZSgpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAppbmRleCBiMWIxZWVmMWU0NGE4ODVjY2VhNzZhN2QxN2I4NjM3MGYx
YjhlYmNjLi4zYzdjOGQxNWI0ZDEzZDUxOGNiMzhkZmI5Y2ViNDE1MmNlNjZlNzZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCkBAIC0xMjE3LDE5ICsxMjE3LDE4IEBAIGNvbnN0IEF0b21pY1N0cmlu
ZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvCiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBs
b2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpOwogfQogCi12b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lkPiBFbGVtZW50OjpzZXRBdHRy
aWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUpCiB7Ci0gICAgaWYgKCFEb2N1bWVudDo6aXNWYWxpZE5hbWUobG9jYWxOYW1lKSkgewot
ICAgICAgICBlYyA9IElOVkFMSURfQ0hBUkFDVEVSX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoIURvY3VtZW50Ojppc1ZhbGlkTmFtZShsb2NhbE5hbWUpKQorICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9DSEFSQUNURVJfRVJSIH07CiAKICAgICBzeW5jaHJv
bml6ZUF0dHJpYnV0ZShsb2NhbE5hbWUpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2FzZUFk
anVzdGVkTG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSgqdGhpcykgPyBsb2Nh
bE5hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IGxvY2FsTmFtZTsKLQorICAgIGF1dG8g
Y2FzZUFkanVzdGVkTG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSgqdGhpcykg
PyBsb2NhbE5hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IGxvY2FsTmFtZTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IGVsZW1lbnREYXRhKCkgPyBlbGVtZW50RGF0YSgpLT5maW5kQXR0cmli
dXRlSW5kZXhCeU5hbWUoY2FzZUFkanVzdGVkTG9jYWxOYW1lLCBmYWxzZSkgOiBFbGVtZW50RGF0
YTo6YXR0cmlidXRlTm90Rm91bmQ7Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUgPSBp
bmRleCAhPSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQgPyBhdHRyaWJ1dGVBdChpbmRl
eCkubmFtZSgpIDogUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgY2FzZUFkanVzdGVkTG9jYWxOYW1l
LCBudWxsQXRvbSk7Ci0gICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoaW5kZXgsIHFOYW1lLCB2YWx1
ZSwgTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOworICAgIGF1dG8gbmFtZSA9
IGluZGV4ICE9IEVsZW1lbnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCA/IGF0dHJpYnV0ZUF0KGlu
ZGV4KS5uYW1lKCkgOiBRdWFsaWZpZWROYW1lIHsgbnVsbEF0b20sIGNhc2VBZGp1c3RlZExvY2Fs
TmFtZSwgbnVsbEF0b20gfTsKKyAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChpbmRleCwgbmFtZSwg
dmFsdWUsIE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC0xNzU2LDEyICsxNzU1LDEx
IEBAIFNoYWRvd1Jvb3QqIEVsZW1lbnQ6OnNoYWRvd1Jvb3QoKSBjb25zdAogICAgIHJldHVybiBo
YXNSYXJlRGF0YSgpID8gZWxlbWVudFJhcmVEYXRhKCktPnNoYWRvd1Jvb3QoKSA6IG51bGxwdHI7
CiB9CiAKLQogdm9pZCBFbGVtZW50OjphZGRTaGFkb3dSb290KFJlZjxTaGFkb3dSb290PiYmIG5l
d1NoYWRvd1Jvb3QpCiB7CiAgICAgQVNTRVJUKCFzaGFkb3dSb290KCkpOwogCi0gICAgU2hhZG93
Um9vdCYgc2hhZG93Um9vdCA9IG5ld1NoYWRvd1Jvb3QuZ2V0KCk7CisgICAgU2hhZG93Um9vdCYg
c2hhZG93Um9vdCA9IG5ld1NoYWRvd1Jvb3Q7CiAgICAgZW5zdXJlRWxlbWVudFJhcmVEYXRhKCku
c2V0U2hhZG93Um9vdChXVEZNb3ZlKG5ld1NoYWRvd1Jvb3QpKTsKIAogICAgIHNoYWRvd1Jvb3Qu
c2V0SG9zdCh0aGlzKTsKQEAgLTE3ODUsNiArMTc4Myw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3Zl
U2hhZG93Um9vdCgpCiAgICAgUmVmUHRyPFNoYWRvd1Jvb3Q+IG9sZFJvb3QgPSBzaGFkb3dSb290
KCk7CiAgICAgaWYgKCFvbGRSb290KQogICAgICAgICByZXR1cm47CisKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxQb3BTaGFkb3dSb290KCp0aGlzLCAqb2xkUm9vdCk7CiAgICAg
ZG9jdW1lbnQoKS5yZW1vdmVGb2N1c2VkTm9kZU9mU3VidHJlZShvbGRSb290LmdldCgpKTsKIApA
QCAtMTc5OCwxNiArMTc5Nyw2IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlU2hhZG93Um9vdCgpCiAg
ICAgbm90aWZ5Q2hpbGROb2RlUmVtb3ZlZCgqdGhpcywgKm9sZFJvb3QpOwogfQogCi1TaGFkb3dS
b290KiBFbGVtZW50OjpjcmVhdGVTaGFkb3dSb290KEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGlmIChhbHdheXNDcmVhdGVVc2VyQWdlbnRTaGFkb3dSb290KCkpCi0gICAgICAgIHJldHVybiAm
ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotCi0gICAgZWMgPSBISUVSQVJDSFlfUkVRVUVT
VF9FUlI7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLQogc3RhdGljIGJvb2wgY2FuQXR0YWNo
QXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21pY1N0cmluZz4+IHRhZ05hbWVzID0gW10gewpAQCAt
MTg0MywyMyArMTgzMiwxNCBAQCBzdGF0aWMgYm9vbCBjYW5BdHRhY2hBdXRob3JTaGFkb3dSb290
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJuIHRhZ05hbWVzLmdldCgpLmNvbnRh
aW5zKGxvY2FsTmFtZSkgfHwgRG9jdW1lbnQ6OnZhbGlkYXRlQ3VzdG9tRWxlbWVudE5hbWUobG9j
YWxOYW1lKSA9PSBDdXN0b21FbGVtZW50TmFtZVZhbGlkYXRpb25TdGF0dXM6OlZhbGlkOwogfQog
Ci1SZWZQdHI8U2hhZG93Um9vdD4gRWxlbWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jv
b3RJbml0JiBpbml0LCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPFJlZjxTaGFkb3dS
b290Pj4gRWxlbWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0JiBpbml0KQog
ewotICAgIGlmICghY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdCgqdGhpcykpIHsKLSAgICAgICAg
ZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgaWYgKHNoYWRvd1Jvb3QoKSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoaW5pdC5tb2RlID09
IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQorICAgIGlmICghY2FuQXR0YWNoQXV0aG9y
U2hhZG93Um9vdCgqdGhpcykpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9S
VEVEX0VSUiB9OworICAgIGlmIChzaGFkb3dSb290KCkpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgIGlmIChpbml0Lm1vZGUgPT0gU2hhZG93Um9v
dE1vZGU6OlVzZXJBZ2VudCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9
OwogICAgIGF1dG8gc2hhZG93ID0gU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIGluaXQu
bW9kZSk7CiAgICAgYWRkU2hhZG93Um9vdChzaGFkb3cuY29weVJlZigpKTsKICAgICByZXR1cm4g
V1RGTW92ZShzaGFkb3cpOwpAQCAtMTg2NywzOCArMTg0NywzMiBAQCBSZWZQdHI8U2hhZG93Um9v
dD4gRWxlbWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0JiBpbml0LCBFeGNl
cHRpb25DbwogCiBTaGFkb3dSb290KiBFbGVtZW50OjpzaGFkb3dSb290Rm9yQmluZGluZ3MoSlND
OjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFk
b3dSb290KCk7Ci0gICAgaWYgKCFyb290KQorICAgIGF1dG8qIHNoYWRvdyA9IHNoYWRvd1Jvb3Qo
KTsKKyAgICBpZiAoIXNoYWRvdykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAo
cm9vdC0+bW9kZSgpICE9IFNoYWRvd1Jvb3RNb2RlOjpPcGVuKSB7Ci0gICAgICAgIGlmICghSlND
Ojpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LT53b3JsZCgpLnNoYWRvd1Jvb3RJc0Fsd2F5c09wZW4oKSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gcm9vdDsKKyAgICBpZiAoc2hhZG93LT5tb2RlKCkg
PT0gU2hhZG93Um9vdE1vZGU6Ok9wZW4pCisgICAgICAgIHJldHVybiBzaGFkb3c7CisgICAgaWYg
KEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+d29ybGQoKS5zaGFkb3dSb290SXNBbHdheXNPcGVuKCkpCisgICAgICAgIHJldHVybiBz
aGFkb3c7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLQogU2hhZG93Um9vdCogRWxlbWVudDo6
dXNlckFnZW50U2hhZG93Um9vdCgpIGNvbnN0CiB7Ci0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRv
d1Jvb3QgPSB0aGlzLT5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgQVNTRVJUKHNoYWRvd1Jvb3Qt
Pm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KTsKLSAgICAgICAgcmV0dXJuIHNo
YWRvd1Jvb3Q7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOworICAgIEFTU0VSVCghc2hhZG93
Um9vdCgpIHx8IHNoYWRvd1Jvb3QoKS0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdl
bnQpOworICAgIHJldHVybiBzaGFkb3dSb290KCk7CiB9CiAKIFNoYWRvd1Jvb3QmIEVsZW1lbnQ6
OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKQogewotICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jv
b3QgPSB1c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgaWYgKCFzaGFkb3dSb290KSB7Ci0gICAg
ICAgIGFkZFNoYWRvd1Jvb3QoU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIFNoYWRvd1Jv
b3RNb2RlOjpVc2VyQWdlbnQpKTsKLSAgICAgICAgc2hhZG93Um9vdCA9IHVzZXJBZ2VudFNoYWRv
d1Jvb3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuICpzaGFkb3dSb290OworICAgIGlmIChhdXRvKiBz
aGFkb3cgPSB1c2VyQWdlbnRTaGFkb3dSb290KCkpCisgICAgICAgIHJldHVybiAqc2hhZG93Owor
ICAgIGF1dG8gbmV3U2hhZG93ID0gU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIFNoYWRv
d1Jvb3RNb2RlOjpVc2VyQWdlbnQpOworICAgIFNoYWRvd1Jvb3QmIHNoYWRvdyA9IG5ld1NoYWRv
dzsKKyAgICBhZGRTaGFkb3dSb290KFdURk1vdmUobmV3U2hhZG93KSk7CisgICAgcmV0dXJuIHNo
YWRvdzsKIH0KIAotICAgIAogI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCiAKIHZvaWQgRWxl
bWVudDo6c2V0SXNEZWZpbmVkQ3VzdG9tRWxlbWVudChKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2Um
IGVsZW1lbnRJbnRlcmZhY2UpCkBAIC0xOTUzLDcgKzE5MjcsNiBAQCBDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZSogRWxlbWVudDo6cmVhY3Rpb25RdWV1ZSgpIGNvbnN0CiAKICNlbmRpZgogCi0K
IGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewog
ICAgIHJldHVybiBwc2V1ZG8oKTsKQEAgLTIxNTksMjQgKzIxMzIsMjQgQEAgY29uc3QgVmVjdG9y
PFJlZlB0cjxBdHRyPj4mIEVsZW1lbnQ6OmF0dHJOb2RlTGlzdCgpCiAgICAgcmV0dXJuICphdHRy
Tm9kZUxpc3RGb3JFbGVtZW50KCp0aGlzKTsKIH0KIAotUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OnNl
dEF0dHJpYnV0ZU5vZGUoQXR0ciYgYXR0ck5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0
aW9uT3I8UmVmUHRyPEF0dHI+PiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKEF0dHImIGF0dHJO
b2RlKQogewogICAgIFJlZlB0cjxBdHRyPiBvbGRBdHRyTm9kZSA9IGF0dHJJZkV4aXN0cyhhdHRy
Tm9kZS5xdWFsaWZpZWROYW1lKCkubG9jYWxOYW1lKCksIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNh
c2UoKnRoaXMpKTsKICAgICBpZiAob2xkQXR0ck5vZGUuZ2V0KCkgPT0gJmF0dHJOb2RlKQotICAg
ICAgICByZXR1cm4gJmF0dHJOb2RlOyAvLyBUaGlzIEF0dHIgaXMgYWxyZWFkeSBhdHRhY2hlZCB0
byB0aGUgZWxlbWVudC4KKyAgICAgICAgcmV0dXJuIFdURk1vdmUob2xkQXR0ck5vZGUpOwogCiAg
ICAgLy8gSU5VU0VfQVRUUklCVVRFX0VSUjogUmFpc2VkIGlmIG5vZGUgaXMgYW4gQXR0ciB0aGF0
IGlzIGFscmVhZHkgYW4gYXR0cmlidXRlIG9mIGFub3RoZXIgRWxlbWVudCBvYmplY3QuCiAgICAg
Ly8gVGhlIERPTSB1c2VyIG11c3QgZXhwbGljaXRseSBjbG9uZSBBdHRyIG5vZGVzIHRvIHJlLXVz
ZSB0aGVtIGluIG90aGVyIGVsZW1lbnRzLgotICAgIGlmIChhdHRyTm9kZS5vd25lckVsZW1lbnQo
KSAmJiBhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVjID0gSU5V
U0VfQVRUUklCVVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlm
IChhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAmJiBhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAhPSB0
aGlzKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5VU0VfQVRUUklCVVRFX0VSUiB9Owog
CiAgICAgc3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7Ci0gICAgVW5pcXVlRWxlbWVudERhdGEm
IGVsZW1lbnREYXRhID0gZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKTsKKyAgICBhdXRvJiBlbGVt
ZW50RGF0YSA9IGVuc3VyZVVuaXF1ZUVsZW1lbnREYXRhKCk7CiAKLSAgICB1bnNpZ25lZCBleGlz
dGluZ0F0dHJpYnV0ZUluZGV4ID0gZWxlbWVudERhdGEuZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1l
KGF0dHJOb2RlLnF1YWxpZmllZE5hbWUoKS5sb2NhbE5hbWUoKSwgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSgqdGhpcykpOwotICAgIGlmIChleGlzdGluZ0F0dHJpYnV0ZUluZGV4ICE9IEVsZW1l
bnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCkgeworICAgIGF1dG8gZXhpc3RpbmdBdHRyaWJ1dGVJ
bmRleCA9IGVsZW1lbnREYXRhLmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFs
aWZpZWROYW1lKCkubG9jYWxOYW1lKCksIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UoKnRoaXMp
KTsKKyAgICBpZiAoZXhpc3RpbmdBdHRyaWJ1dGVJbmRleCA9PSBFbGVtZW50RGF0YTo6YXR0cmli
dXRlTm90Rm91bmQpCisgICAgICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGVsZW1lbnREYXRhLmZp
bmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCkpLCBhdHRyTm9k
ZS5xdWFsaWZpZWROYW1lKCksIGF0dHJOb2RlLnZhbHVlKCksIE5vdEluU3luY2hyb25pemF0aW9u
T2ZMYXp5QXR0cmlidXRlKTsKKyAgICBlbHNlIHsKICAgICAgICAgY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUgPSBhdHRyaWJ1dGVBdChleGlzdGluZ0F0dHJpYnV0ZUluZGV4KTsKICAgICAgICAg
aWYgKG9sZEF0dHJOb2RlKQogICAgICAgICAgICAgZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVudFdp
dGhWYWx1ZShvbGRBdHRyTm9kZS5nZXQoKSwgYXR0cmlidXRlLnZhbHVlKCkpOwpAQCAtMjE4Nywz
OCArMjE2MCwzMiBAQCBSZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZShBdHRy
JiBhdHRyTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgICAgICBzZXRBdHRyaWJ1dGVJ
bnRlcm5hbChleGlzdGluZ0F0dHJpYnV0ZUluZGV4LCBhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCks
IGF0dHJOb2RlLnZhbHVlKCksIE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChleGlz
dGluZ0F0dHJpYnV0ZUluZGV4LCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBleGlzdGluZ0F0dHJpYnV0ZUluZGV4Rm9yRnVsbFF1YWxp
ZmllZE5hbWUgPSBlbGVtZW50RGF0YS5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5vZGUu
cXVhbGlmaWVkTmFtZSgpKTsKLSAgICAgICAgICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGV4aXN0
aW5nQXR0cmlidXRlSW5kZXhGb3JGdWxsUXVhbGlmaWVkTmFtZSwgYXR0ck5vZGUucXVhbGlmaWVk
TmFtZSgpLCBhdHRyTm9kZS52YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJp
YnV0ZSk7CisgICAgICAgICAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChlbGVtZW50RGF0YS5maW5k
QXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpKSwgYXR0ck5vZGUu
cXVhbGlmaWVkTmFtZSgpLCBhdHRyTm9kZS52YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlvbk9m
TGF6eUF0dHJpYnV0ZSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICB1bnNpZ25l
ZCBleGlzdGluZ0F0dHJpYnV0ZUluZGV4Rm9yRnVsbFF1YWxpZmllZE5hbWUgPSBlbGVtZW50RGF0
YS5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpKTsKLSAg
ICAgICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoZXhpc3RpbmdBdHRyaWJ1dGVJbmRleEZvckZ1bGxR
dWFsaWZpZWROYW1lLCBhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCksIGF0dHJOb2RlLnZhbHVlKCks
IE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKICAgICB9CiAgICAgaWYgKGF0
dHJOb2RlLm93bmVyRWxlbWVudCgpICE9IHRoaXMpIHsKICAgICAgICAgYXR0ck5vZGUuYXR0YWNo
VG9FbGVtZW50KHRoaXMpOwogICAgICAgICB0cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKCZhdHRy
Tm9kZSk7CiAgICAgICAgIGVuc3VyZUF0dHJOb2RlTGlzdEZvckVsZW1lbnQoKnRoaXMpLmFwcGVu
ZCgmYXR0ck5vZGUpOwogICAgIH0KLSAgICByZXR1cm4gb2xkQXR0ck5vZGU7CisgICAgcmV0dXJu
IFdURk1vdmUob2xkQXR0ck5vZGUpOwogfQogCi1SZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0
cmlidXRlTm9kZU5TKEF0dHImIGF0dHJOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlv
bk9yPFJlZlB0cjxBdHRyPj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZU5TKEF0dHImIGF0dHJO
b2RlKQogewogICAgIFJlZlB0cjxBdHRyPiBvbGRBdHRyTm9kZSA9IGF0dHJJZkV4aXN0cyhhdHRy
Tm9kZS5xdWFsaWZpZWROYW1lKCkpOwogICAgIGlmIChvbGRBdHRyTm9kZS5nZXQoKSA9PSAmYXR0
ck5vZGUpCi0gICAgICAgIHJldHVybiAmYXR0ck5vZGU7IC8vIFRoaXMgQXR0ciBpcyBhbHJlYWR5
IGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50LgorICAgICAgICByZXR1cm4gV1RGTW92ZShvbGRBdHRy
Tm9kZSk7CiAKICAgICAvLyBJTlVTRV9BVFRSSUJVVEVfRVJSOiBSYWlzZWQgaWYgbm9kZSBpcyBh
biBBdHRyIHRoYXQgaXMgYWxyZWFkeSBhbiBhdHRyaWJ1dGUgb2YgYW5vdGhlciBFbGVtZW50IG9i
amVjdC4KICAgICAvLyBUaGUgRE9NIHVzZXIgbXVzdCBleHBsaWNpdGx5IGNsb25lIEF0dHIgbm9k
ZXMgdG8gcmUtdXNlIHRoZW0gaW4gb3RoZXIgZWxlbWVudHMuCi0gICAgaWYgKGF0dHJOb2RlLm93
bmVyRWxlbWVudCgpICYmIGF0dHJOb2RlLm93bmVyRWxlbWVudCgpICE9IHRoaXMpIHsKLSAgICAg
ICAgZWMgPSBJTlVTRV9BVFRSSUJVVEVfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9CisgICAgaWYgKGF0dHJOb2RlLm93bmVyRWxlbWVudCgpICYmIGF0dHJOb2RlLm93bmVyRWxl
bWVudCgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlVTRV9BVFRSSUJV
VEVfRVJSIH07CiAKICAgICBzeW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKLSAgICBVbmlxdWVF
bGVtZW50RGF0YSYgZWxlbWVudERhdGEgPSBlbnN1cmVVbmlxdWVFbGVtZW50RGF0YSgpOworICAg
IGF1dG8mIGVsZW1lbnREYXRhID0gZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKTsKIAotICAgIHVu
c2lnbmVkIGluZGV4ID0gZWxlbWVudERhdGEuZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKGF0dHJO
b2RlLnF1YWxpZmllZE5hbWUoKSk7CisgICAgYXV0byBpbmRleCA9IGVsZW1lbnREYXRhLmZpbmRB
dHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCkpOwogICAgIGlmIChp
bmRleCAhPSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQpIHsKICAgICAgICAgaWYgKG9s
ZEF0dHJOb2RlKQogICAgICAgICAgICAgZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVudFdpdGhWYWx1
ZShvbGRBdHRyTm9kZS5nZXQoKSwgZWxlbWVudERhdGEuYXR0cmlidXRlQXQoaW5kZXgpLnZhbHVl
KCkpOwpAQCAtMjIzMiw2MiArMjE5OSw1NiBAQCBSZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0
cmlidXRlTm9kZU5TKEF0dHImIGF0dHJOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB0cmVl
U2NvcGUoKS5hZG9wdElmTmVlZGVkKCZhdHRyTm9kZSk7CiAgICAgZW5zdXJlQXR0ck5vZGVMaXN0
Rm9yRWxlbWVudCgqdGhpcykuYXBwZW5kKCZhdHRyTm9kZSk7CiAKLSAgICByZXR1cm4gb2xkQXR0
ck5vZGU7CisgICAgcmV0dXJuIFdURk1vdmUob2xkQXR0ck5vZGUpOwogfQogCi1SZWZQdHI8QXR0
cj4gRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTm9kZShBdHRyJiBhdHRyLCBFeGNlcHRpb25Db2Rl
JiBlYykKK0V4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTm9k
ZShBdHRyJiBhdHRyKQogewotICAgIGlmIChhdHRyLm93bmVyRWxlbWVudCgpICE9IHRoaXMpIHsK
LSAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9CisgICAgaWYgKGF0dHIub3duZXJFbGVtZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKIAogICAgIEFTU0VSVCgmZG9jdW1lbnQoKSA9
PSAmYXR0ci5kb2N1bWVudCgpKTsKIAogICAgIHN5bmNocm9uaXplQWxsQXR0cmlidXRlcygpOwog
Ci0gICAgaWYgKCFtX2VsZW1lbnREYXRhKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlmICghbV9lbGVtZW50RGF0YSkK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKIAotICAgIHVuc2ln
bmVkIGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPSBtX2VsZW1lbnREYXRhLT5maW5kQXR0cmlidXRl
SW5kZXhCeU5hbWUoYXR0ci5xdWFsaWZpZWROYW1lKCkpOworICAgIGF1dG8gZXhpc3RpbmdBdHRy
aWJ1dGVJbmRleCA9IG1fZWxlbWVudERhdGEtPmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRy
LnF1YWxpZmllZE5hbWUoKSk7CisgICAgaWYgKGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPT0gRWxl
bWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5kKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tk9UX0ZPVU5EX0VSUiB9OwogCi0gICAgaWYgKGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPT0gRWxl
bWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5kKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VS
UjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIFJlZjxBdHRyPiBvbGRBdHRy
Tm9kZSB7IGF0dHIgfTsKIAotICAgIFJlZlB0cjxBdHRyPiBhdHRyTm9kZSA9ICZhdHRyOwogICAg
IGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFsdWUoJmF0dHIsIG1fZWxlbWVudERhdGEt
PmF0dHJpYnV0ZUF0KGV4aXN0aW5nQXR0cmlidXRlSW5kZXgpLnZhbHVlKCkpOwogICAgIHJlbW92
ZUF0dHJpYnV0ZUludGVybmFsKGV4aXN0aW5nQXR0cmlidXRlSW5kZXgsIE5vdEluU3luY2hyb25p
emF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKLSAgICByZXR1cm4gYXR0ck5vZGU7CisKKyAgICByZXR1
cm4gV1RGTW92ZShvbGRBdHRyTm9kZSk7CiB9CiAKLWJvb2wgRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGVOYW1lKFF1YWxpZmllZE5hbWUmIG91dCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CitFeGNlcHRpb25PcjxRdWFsaWZpZWROYW1lPiBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZU5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVh
bGlmaWVkTmFtZSkKIHsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTdHJpbmcgcHJl
Zml4LCBsb2NhbE5hbWU7CiAgICAgaWYgKCFEb2N1bWVudDo6cGFyc2VRdWFsaWZpZWROYW1lKHF1
YWxpZmllZE5hbWUsIHByZWZpeCwgbG9jYWxOYW1lLCBlYykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CiAgICAgQVNTRVJUKCFlYyk7CiAK
LSAgICBRdWFsaWZpZWROYW1lIHFOYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkp
OworICAgIFF1YWxpZmllZE5hbWUgcmVzdWx0IHsgcHJlZml4LCBsb2NhbE5hbWUsIG5hbWVzcGFj
ZVVSSSB9OwogCi0gICAgaWYgKCFEb2N1bWVudDo6aGFzVmFsaWROYW1lc3BhY2VGb3JBdHRyaWJ1
dGVzKHFOYW1lKSkgewotICAgICAgICBlYyA9IE5BTUVTUEFDRV9FUlI7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgaWYgKCFEb2N1bWVudDo6aGFzVmFsaWROYW1lc3BhY2VGb3JB
dHRyaWJ1dGVzKHJlc3VsdCkpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOQU1FU1BBQ0Vf
RVJSIH07CiAKLSAgICBvdXQgPSBxTmFtZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
V1RGTW92ZShyZXN1bHQpOwogfQogCi12b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxpZmll
ZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhj
ZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6c2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBRdWFsaWZpZWROYW1lIHBhcnNlZE5hbWUgPSBh
bnlOYW1lOwotICAgIGlmICghcGFyc2VBdHRyaWJ1dGVOYW1lKHBhcnNlZE5hbWUsIG5hbWVzcGFj
ZVVSSSwgcXVhbGlmaWVkTmFtZSwgZWMpKQotICAgICAgICByZXR1cm47Ci0gICAgc2V0QXR0cmli
dXRlKHBhcnNlZE5hbWUsIHZhbHVlKTsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlQXR0cmlidXRl
TmFtZShuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpOworICAgIGlmIChyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAg
IHNldEF0dHJpYnV0ZShyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCksIHZhbHVlKTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZUludGVybmFsKHVu
c2lnbmVkIGluZGV4LCBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgaW5TeW5jaHJvbml6
YXRpb25PZkxhenlBdHRyaWJ1dGUpCkBAIC0yNTU1LDE3ICsyNTE2LDE0IEBAIGJvb2wgRWxlbWVu
dDo6ZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJlZ2luKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgRWxlbWVudDo6bWVyZ2VXaXRoTmV4dFRleHROb2RlKFRleHQmIG5vZGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6bWVyZ2VXaXRoTmV4dFRleHRO
b2RlKFRleHQmIG5vZGUpCiB7CiAgICAgYXV0byogbmV4dCA9IG5vZGUubmV4dFNpYmxpbmcoKTsK
ICAgICBpZiAoIWlzPFRleHQ+KG5leHQpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgUmVmPFRleHQ+IHRleHROZXh0IHsgZG93bmNhc3Q8VGV4dD4oKm5leHQpIH07
Ci0KICAgICBub2RlLmFwcGVuZERhdGEodGV4dE5leHQtPmRhdGEoKSk7Ci0gICAgYXV0byByZXN1
bHQgPSB0ZXh0TmV4dC0+cmVtb3ZlKCk7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
LSAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKKyAgICByZXR1
cm4gdGV4dE5leHQtPnJlbW92ZSgpOwogfQogCiBTdHJpbmcgRWxlbWVudDo6aW5uZXJIVE1MKCkg
Y29uc3QKQEAgLTI1NzgsMzkgKzI1MzYsNDUgQEAgU3RyaW5nIEVsZW1lbnQ6Om91dGVySFRNTCgp
IGNvbnN0CiAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCgqdGhpcyk7CiB9CiAKLXZvaWQgRWxlbWVu
dDo6c2V0T3V0ZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYgZWMpCitF
eGNlcHRpb25Pcjx2b2lkPiBFbGVtZW50OjpzZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJiBodG1s
KQogewotICAgIEVsZW1lbnQqIHAgPSBwYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYgKCFpczxIVE1M
RWxlbWVudD4ocCkpIHsKLSAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBwYXJlbnQg
PSBkb3duY2FzdDxIVE1MRWxlbWVudD4ocCk7CisgICAgYXV0byogcGFyZW50RWxlbWVudCA9IHRo
aXMtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihwYXJlbnRFbGVt
ZW50KSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUiB9OworCisgICAgUmVmPEhUTUxFbGVtZW50PiBwYXJlbnQgPSBkb3duY2FzdDxIVE1MRWxl
bWVudD4oKnBhcmVudEVsZW1lbnQpOwogICAgIFJlZlB0cjxOb2RlPiBwcmV2ID0gcHJldmlvdXNT
aWJsaW5nKCk7CiAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBuZXh0U2libGluZygpOwogCi0gICAg
YXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoKnBhcmVudCwg
aHRtbCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKLSAgICBpZiAoZnJhZ21lbnQuaGFzRXhjZXB0
aW9uKCkpIHsKLSAgICAgICAgZWMgPSBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAorICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKHBhcmVudCwgaHRtbCwgQWxsb3dTY3JpcHRpbmdD
b250ZW50KTsKKyAgICBpZiAoZnJhZ21lbnQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBwYXJlbnQtPnJlcGxhY2VDaGlsZChmcmFnbWVudC5yZWxlYXNlUmV0dXJuVmFsdWUo
KS5nZXQoKSwgKnRoaXMsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBlYyB9OworCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0ID8gbmV4dC0+cHJldmlv
dXNTaWJsaW5nKCkgOiBudWxscHRyOwotICAgIGlmICghZWMgJiYgaXM8VGV4dD4obm9kZS5nZXQo
KSkpCi0gICAgICAgIG1lcmdlV2l0aE5leHRUZXh0Tm9kZShkb3duY2FzdDxUZXh0Pigqbm9kZSks
IGVjKTsKLSAgICBpZiAoIWVjICYmIGlzPFRleHQ+KHByZXYuZ2V0KCkpKQotICAgICAgICBtZXJn
ZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKnByZXYpLCBlYyk7CisgICAgaWYgKGlz
PFRleHQ+KG5vZGUuZ2V0KCkpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbWVyZ2VXaXRoTmV4
dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpub2RlKSk7CisgICAgICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KTsKKyAgICB9CisgICAgaWYgKGlzPFRleHQ+KHByZXYuZ2V0KCkpKSB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gbWVyZ2VXaXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpwcmV2KSk7Cisg
ICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKIH0KIAogCi12
b2lkIEVsZW1lbnQ6OnNldElubmVySFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0
cmluZyYgaHRtbCkKIHsKICAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGb3JJbm5l
ck91dGVySFRNTCgqdGhpcywgaHRtbCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKLSAgICBpZiAo
ZnJhZ21lbnQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZWMgPSBmcmFnbWVudC5yZWxlYXNl
RXhjZXB0aW9uKCkuY29kZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChmcmFn
bWVudC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2VFeGNl
cHRpb24oKTsKIAogICAgIENvbnRhaW5lck5vZGUqIGNvbnRhaW5lcjsKICAgICBpZiAoIWlzPEhU
TUxUZW1wbGF0ZUVsZW1lbnQ+KCp0aGlzKSkKQEAgLTI2MTgsOSArMjU4Miw3IEBAIHZvaWQgRWxl
bWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgZWxzZQogICAgICAgICBjb250YWluZXIgPSAmZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxl
bWVudD4oKnRoaXMpLmNvbnRlbnQoKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gcmVwbGFjZUNoaWxk
cmVuV2l0aEZyYWdtZW50KCpjb250YWluZXIsIGZyYWdtZW50LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
KTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBlYyA9IGZyYWdtZW50
LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7CisgICAgcmV0dXJuIHJlcGxhY2VDaGlsZHJlbldp
dGhGcmFnbWVudCgqY29udGFpbmVyLCBmcmFnbWVudC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CiB9
CiAKIFN0cmluZyBFbGVtZW50Ojppbm5lclRleHQoKQpAQCAtMjk5MywxOCArMjk1NSwyNCBAQCBi
b29sIEVsZW1lbnQ6Om1hdGNoZXNEZWZhdWx0UHNldWRvQ2xhc3MoKSBjb25zdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBFbGVtZW50OjptYXRjaGVzKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8Ym9vbD4gRWxlbWVudDo6bWF0Y2hl
cyhjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgIFNlbGVjdG9yUXVlcnkqIHNlbGVjdG9y
UXVlcnkgPSBkb2N1bWVudCgpLnNlbGVjdG9yUXVlcnlGb3JTdHJpbmcoc2VsZWN0b3IsIGVjKTsK
LSAgICByZXR1cm4gc2VsZWN0b3JRdWVyeSAmJiBzZWxlY3RvclF1ZXJ5LT5tYXRjaGVzKCp0aGlz
KTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBhdXRvKiBxdWVyeSA9IGRvY3VtZW50
KCkuc2VsZWN0b3JRdWVyeUZvclN0cmluZyhzZWxlY3RvciwgZWMpOworICAgIGlmIChlYykKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgcmV0dXJuIHF1ZXJ5ICYmIHF1ZXJ5
LT5tYXRjaGVzKCp0aGlzKTsKIH0KIAotRWxlbWVudCogRWxlbWVudDo6Y2xvc2VzdChjb25zdCBT
dHJpbmcmIHNlbGVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPEVsZW1lbnQq
PiBFbGVtZW50OjpjbG9zZXN0KGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiB7Ci0gICAgU2VsZWN0
b3JRdWVyeSogc2VsZWN0b3JRdWVyeSA9IGRvY3VtZW50KCkuc2VsZWN0b3JRdWVyeUZvclN0cmlu
ZyhzZWxlY3RvciwgZWMpOwotICAgIGlmIChzZWxlY3RvclF1ZXJ5KQotICAgICAgICByZXR1cm4g
c2VsZWN0b3JRdWVyeS0+Y2xvc2VzdCgqdGhpcyk7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYXV0byogcXVlcnkgPSBkb2N1bWVudCgpLnNlbGVj
dG9yUXVlcnlGb3JTdHJpbmcoc2VsZWN0b3IsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBlYyB9OworICAgIGlmICghcXVlcnkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBxdWVyeS0+Y2xvc2VzdCgqdGhpcyk7CiB9CiAKIGJvb2wgRWxl
bWVudDo6c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpIGNvbnN0CkBAIC0zMDc5LDYgKzMwNDcs
NyBAQCB2b2lkIEVsZW1lbnQ6OnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgdQogfQogCiAjaWYgRU5BQkxFKElORElFX1VJKQor
CiB2b2lkIEVsZW1lbnQ6OnNldFVJQWN0aW9ucyhjb25zdCBBdG9taWNTdHJpbmcmIGFjdGlvbnMp
CiB7CiAgICAgc2V0QXR0cmlidXRlKHVpYWN0aW9uc0F0dHIsIGFjdGlvbnMpOwpAQCAtMzA4OCw2
ICszMDU3LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpVSUFjdGlvbnMoKSBjb25z
dAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodWlhY3Rpb25zQXR0cik7CiB9CisKICNlbmRp
ZgogCiBib29sIEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9kZSYg
Y2hpbGQpIGNvbnN0CkBAIC0zNjgzLDcgKzM2NTMsNyBAQCBib29sIEVsZW1lbnQ6OmllRm9yYmlk
c0luc2VydEhUTUwoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogRWxlbWVu
dDo6aW5zZXJ0QWRqYWNlbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgUmVmPE5vZGU+JiYgbmV3Q2hp
bGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8Tm9kZSo+IEVsZW1lbnQ6Omluc2Vy
dEFkamFjZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIFJlZjxOb2RlPiYmIG5ld0NoaWxkKQogewog
ICAgIC8vIEluIEludGVybmV0IEV4cGxvcmVyIGlmIHRoZSBlbGVtZW50IGhhcyBubyBwYXJlbnQg
YW5kIHdoZXJlIGlzICJiZWZvcmVCZWdpbiIgb3IgImFmdGVyRW5kIiwKICAgICAvLyBhIGRvY3Vt
ZW50IGZyYWdtZW50IGlzIGNyZWF0ZWQgYW5kIHRoZSBlbGVtZW50cyBhcHBlbmRlZCBpbiB0aGUg
Y29ycmVjdCBvcmRlci4gVGhpcyBkb2N1bWVudApAQCAtMzY5Myw3NiArMzY2MywxMDQgQEAgTm9k
ZSogRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgUmVmPE5vZGU+
JiYgbmV3Q2hpbGQsIEV4Y2VwdGkKICAgICAvLyBPcGVyYSBhbHNvIGFwcGVhcnMgdG8gZGlzYWxs
b3cgc3VjaCB1c2FnZS4KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3
aGVyZSwgImJlZm9yZWJlZ2luIikpIHsKLSAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
dGhpcy0+cGFyZW50Tm9kZSgpOwotICAgICAgICByZXR1cm4gKHBhcmVudCAmJiBwYXJlbnQtPmlu
c2VydEJlZm9yZShuZXdDaGlsZCwgdGhpcywgZWMpKSA/IG5ld0NoaWxkLnB0cigpIDogbnVsbHB0
cjsKKyAgICAgICAgYXV0byogcGFyZW50ID0gdGhpcy0+cGFyZW50Tm9kZSgpOworICAgICAgICBp
ZiAoIXBhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gcGFyZW50LT5pbnNlcnRCZWZv
cmUobmV3Q2hpbGQsIHRoaXMsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgICAgIHJldHVybiBzdWNjZXNzID8gbmV3Q2hpbGQu
cHRyKCkgOiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZSh3aGVyZSwgImFmdGVyYmVnaW4iKSkKLSAgICAgICAgcmV0dXJuIGluc2VydEJlZm9y
ZShuZXdDaGlsZCwgZmlyc3RDaGlsZCgpLCBlYykgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYWZ0ZXJiZWdp
biIpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBib29sIHN1Y2Nl
c3MgPSBpbnNlcnRCZWZvcmUobmV3Q2hpbGQsIGZpcnN0Q2hpbGQoKSwgZWMpOworICAgICAgICBp
ZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3MgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7CisgICAgfQogCi0gICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYmVmb3JlZW5kIikpCi0gICAg
ICAgIHJldHVybiBhcHBlbmRDaGlsZChuZXdDaGlsZCwgZWMpID8gbmV3Q2hpbGQucHRyKCkgOiBu
dWxscHRyOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3aGVyZSwgImJl
Zm9yZWVuZCIpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBib29s
IHN1Y2Nlc3MgPSBhcHBlbmRDaGlsZChuZXdDaGlsZCwgZWMpOworICAgICAgICBpZiAoZWMpCisg
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nl
c3MgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7CisgICAgfQogCiAgICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYWZ0ZXJlbmQiKSkgewotICAgICAgICBDb250
YWluZXJOb2RlKiBwYXJlbnQgPSB0aGlzLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIHJldHVybiAo
cGFyZW50ICYmIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBuZXh0U2libGluZygpLCBl
YykpID8gbmV3Q2hpbGQucHRyKCkgOiBudWxscHRyOworICAgICAgICBhdXRvKiBwYXJlbnQgPSB0
aGlzLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBib29s
IHN1Y2Nlc3MgPSBwYXJlbnQtPmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcoKSwg
ZWMpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMg
fTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7CiAg
ICAgfQogCi0gICAgZWMgPSBTWU5UQVhfRVJSOwotICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CiB9CiAKLUVsZW1lbnQqIEVsZW1lbnQ6Omlu
c2VydEFkamFjZW50RWxlbWVudChjb25zdCBTdHJpbmcmIHdoZXJlLCBFbGVtZW50JiBuZXdDaGls
ZCwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25PcjxFbGVtZW50Kj4gRWxlbWVudDo6aW5z
ZXJ0QWRqYWNlbnRFbGVtZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIG5ld0NoaWxk
KQogewotICAgIE5vZGUqIHJldHVyblZhbHVlID0gaW5zZXJ0QWRqYWNlbnQod2hlcmUsIG5ld0No
aWxkLCBlYyk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXJldHVyblZh
bHVlIHx8IGlzPEVsZW1lbnQ+KCpyZXR1cm5WYWx1ZSkpOwotICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50PihyZXR1cm5WYWx1ZSk7CisgICAgYXV0byByZXN1bHQgPSBpbnNlcnRBZGphY2VudCh3
aGVyZSwgbmV3Q2hpbGQpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50PihyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwogfQogCiAvLyBTdGVwIDEgb2Yg
aHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyNkb20tZWxlbWVudC1pbnNlcnRhZGph
Y2VudGh0bWwuCi1zdGF0aWMgQ29udGFpbmVyTm9kZSogY29udGV4dE5vZGVGb3JJbnNlcnRpb24o
Y29uc3QgU3RyaW5nJiB3aGVyZSwgRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMp
CitzdGF0aWMgRXhjZXB0aW9uT3I8Q29udGFpbmVyTm9kZSo+IGNvbnRleHROb2RlRm9ySW5zZXJ0
aW9uKGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYmVmb3JlYmVnaW4iKSB8fCBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3aGVyZSwgImFmdGVyZW5kIikpIHsKLSAgICAgICAg
YXV0byogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAoIXBhcmVu
dCB8fCBpczxEb2N1bWVudD4oKnBhcmVudCkpIHsKLSAgICAgICAgICAgIGVjID0gTk9fTU9ESUZJ
Q0FUSU9OX0FMTE9XRURfRVJSOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KKyAgICAgICAgYXV0byogcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKCk7CisgICAgICAg
IGlmICghcGFyZW50IHx8IGlzPERvY3VtZW50PigqcGFyZW50KSkKKyAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKICAgICAgICAgcmV0
dXJuIHBhcmVudDsKICAgICB9CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHdoZXJlLCAiYWZ0ZXJiZWdpbiIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdo
ZXJlLCAiYmVmb3JlZW5kIikpCi0gICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIGVjID0gIFNZ
TlRBWF9FUlI7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmZWxlbWVudDsK
KyAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworfQorCisvLyBTdGVwIDIgb2Yg
aHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyNkb20tZWxlbWVudC1pbnNlcnRhZGph
Y2VudGh0bWwuCitzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPEVsZW1lbnQ+PiBjb250ZXh0RWxlbWVu
dEZvckluc2VydGlvbihjb25zdCBTdHJpbmcmIHdoZXJlLCBFbGVtZW50JiBlbGVtZW50KQorewor
ICAgIGF1dG8gY29udGV4dE5vZGVSZXN1bHQgPSBjb250ZXh0Tm9kZUZvckluc2VydGlvbih3aGVy
ZSwgZWxlbWVudCk7CisgICAgaWYgKGNvbnRleHROb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gY29udGV4dE5vZGVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAg
IGF1dG8mIGNvbnRleHROb2RlID0gKmNvbnRleHROb2RlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpOworICAgIGlmICghaXM8RWxlbWVudD4oY29udGV4dE5vZGUpIHx8IChjb250ZXh0Tm9kZS5k
b2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgaXM8SFRNTEh0bWxFbGVtZW50Pihjb250ZXh0
Tm9kZSkpKQorICAgICAgICByZXR1cm4gUmVmPEVsZW1lbnQ+IHsgSFRNTEJvZHlFbGVtZW50Ojpj
cmVhdGUoY29udGV4dE5vZGUuZG9jdW1lbnQoKSkgfTsKKyAgICByZXR1cm4gUmVmPEVsZW1lbnQ+
IHsgZG93bmNhc3Q8RWxlbWVudD4oY29udGV4dE5vZGUpIH07CiB9CiAKIC8vIGh0dHBzOi8vdzNj
LmdpdGh1Yi5pby9ET00tUGFyc2luZy8jZG9tLWVsZW1lbnQtaW5zZXJ0YWRqYWNlbnRodG1sCi12
b2lkIEVsZW1lbnQ6Omluc2VydEFkamFjZW50SFRNTChjb25zdCBTdHJpbmcmIHdoZXJlLCBjb25z
dCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lkPiBF
bGVtZW50OjppbnNlcnRBZGphY2VudEhUTUwoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3QgU3Ry
aW5nJiBtYXJrdXApCiB7Ci0gICAgLy8gU3RlcCAxLgotICAgIGF1dG8qIGNvbnRleHROb2RlID0g
Y29udGV4dE5vZGVGb3JJbnNlcnRpb24od2hlcmUsIHRoaXMsIGVjKTsKLSAgICBpZiAoIWNvbnRl
eHROb2RlKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGNvbnRleHRFbGVt
ZW50OwotICAgIC8vIFN0ZXAgMi4KLSAgICBpZiAoIWlzPEVsZW1lbnQ+KCpjb250ZXh0Tm9kZSkK
LSAgICAgICAgfHwgKGNvbnRleHROb2RlLT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYg
aXM8SFRNTEh0bWxFbGVtZW50PigqY29udGV4dE5vZGUpKSkgewotICAgICAgICBjb250ZXh0RWxl
bWVudCA9IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKGNvbnRleHROb2RlLT5kb2N1bWVudCgpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgY29udGV4dEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pihj
b250ZXh0Tm9kZSk7CisgICAgLy8gU3RlcHMgMSBhbmQgMi4KKyAgICBhdXRvIGNvbnRleHRFbGVt
ZW50ID0gY29udGV4dEVsZW1lbnRGb3JJbnNlcnRpb24od2hlcmUsICp0aGlzKTsKKyAgICBpZiAo
Y29udGV4dEVsZW1lbnQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBjb250ZXh0RWxl
bWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgLy8gU3RlcCAzLgotICAgIGF1dG8gZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKCpjb250ZXh0RWxlbWVudCwgbWFy
a3VwLCBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwotICAgIGlmIChmcmFnbWVudC5oYXNFeGNlcHRp
b24oKSkgewotICAgICAgICBlYyA9IGZyYWdtZW50LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50Rm9ySW5uZXJPdXRlckhUTUwoY29udGV4dEVsZW1lbnQucmVsZWFzZVJldHVyblZhbHVlKCks
IG1hcmt1cCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKKyAgICBpZiAoZnJhZ21lbnQuaGFzRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAg
ICAgLy8gU3RlcCA0LgotICAgIGluc2VydEFkamFjZW50KHdoZXJlLCBmcmFnbWVudC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSwgZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaW5zZXJ0QWRqYWNlbnQod2hl
cmUsIGZyYWdtZW50LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEVsZW1lbnQ6Omluc2VydEFkamFjZW50VGV4dChjb25z
dCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
RXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnRUZXh0KGNvbnN0IFN0cmlu
ZyYgd2hlcmUsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBpbnNlcnRBZGphY2VudCh3aGVy
ZSwgZG9jdW1lbnQoKS5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSwgZWMpOworICAgIGF1dG8gcmVzdWx0
ID0gaW5zZXJ0QWRqYWNlbnQod2hlcmUsIGRvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUodGV4dCkp
OworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDAzNTdkNzFhNWQ5NTRiODY4MDBkODM4Nzdm
Y2QyNjJiNWQ2MmU3MjkuLjdkY2IyZjg3MTFiOGU1Zjc2ZTYyZWZkYWVmMzk3ZDgwZjA0ODNmNjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjIsOCArMjIsNyBAQAogICoKICAqLwogCi0jaWZuZGVm
IEVsZW1lbnRfaAotI2RlZmluZSBFbGVtZW50X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
QVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMTEy
LDkgKzExMSw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNTdHJp
bmcmIGdldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0QXR0cmlidXRlTlMoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKSBj
b25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHN0YXRpYyBib29sIHBhcnNlQXR0cmlidXRlTmFtZShRdWFsaWZpZWROYW1lJiwgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVhbGlm
aWVkTmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QXR0
cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwor
ICAgIHN0YXRpYyBFeGNlcHRpb25PcjxRdWFsaWZpZWROYW1lPiBwYXJzZUF0dHJpYnV0ZU5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVh
bGlmaWVkTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0QXR0
cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAKICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGdldElkQXR0cmlidXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRJ
ZEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKQEAgLTE5MCw5ICsxODksOSBAQCBwdWJs
aWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0cj4gZ2V0QXR0cmlidXRlTm9kZShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxBdHRy
PiBnZXRBdHRyaWJ1dGVOb2RlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
QXR0cj4gc2V0QXR0cmlidXRlTm9kZShBdHRyJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxBdHRyPiBzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ciYsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0cj4gcmVtb3ZlQXR0cmlidXRl
Tm9kZShBdHRyJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlv
bk9yPFJlZlB0cjxBdHRyPj4gc2V0QXR0cmlidXRlTm9kZShBdHRyJik7CisgICAgV0VCQ09SRV9F
WFBPUlQgRXhjZXB0aW9uT3I8UmVmUHRyPEF0dHI+PiBzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ciYp
OworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gcmVtb3ZlQXR0cmli
dXRlTm9kZShBdHRyJik7CiAKICAgICBSZWZQdHI8QXR0cj4gYXR0cklmRXhpc3RzKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICBSZWZQdHI8QXR0cj4gYXR0cklmRXhpc3RzKGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOwpAQCAt
MjY5LDE0ICsyNjgsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVl
ZGVkKGNvbnN0IFJlbmRlclN0eWxlJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTaGFkb3dSb290
KiBzaGFkb3dSb290KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2hhZG93Um9vdCogY3Jl
YXRlU2hhZG93Um9vdChFeGNlcHRpb25Db2RlJik7CisgICAgU2hhZG93Um9vdCogc2hhZG93Um9v
dEZvckJpbmRpbmdzKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7CiAKICAgICBzdHJ1Y3QgU2hhZG93
Um9vdEluaXQgewogICAgICAgICBTaGFkb3dSb290TW9kZSBtb2RlOwogICAgIH07Ci0KLSAgICBT
aGFkb3dSb290KiBzaGFkb3dSb290Rm9yQmluZGluZ3MoSlNDOjpFeGVjU3RhdGUmKSBjb25zdDsK
LSAgICBSZWZQdHI8U2hhZG93Um9vdD4gYXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0
JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxTaGFkb3dSb290Pj4gYXR0
YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0Jik7CiAKICAgICBTaGFkb3dSb290KiB1c2Vy
QWdlbnRTaGFkb3dSb290KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2hhZG93Um9vdCYg
ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwpAQCAtMzE1LDkgKzMxMiw5IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRhYkluZGV4KGludCk7CiAgICAgdmlydHVhbCBF
bGVtZW50KiBmb2N1c0RlbGVnYXRlKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBp
bnNlcnRBZGphY2VudEVsZW1lbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgRWxlbWVudCYgbmV3Q2hp
bGQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydEFkamFj
ZW50SFRNTChjb25zdCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydEFkamFjZW50VGV4dChjb25z
dCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxFbGVtZW50Kj4gaW5zZXJ0QWRqYWNlbnRFbGVt
ZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIG5ld0NoaWxkKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBpbnNlcnRBZGphY2VudEhUTUwoY29uc3QgU3RyaW5n
JiB3aGVyZSwgY29uc3QgU3RyaW5nJiBodG1sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRp
b25Pcjx2b2lkPiBpbnNlcnRBZGphY2VudFRleHQoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3Qg
U3RyaW5nJiB0ZXh0KTsKIAogICAgIGJvb2wgaWVGb3JiaWRzSW5zZXJ0SFRNTCgpIGNvbnN0Owog
CkBAIC0zODAsOCArMzc3LDggQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IGlubmVySFRNTCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBvdXRlckhUTUwo
KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElubmVySFRNTChjb25zdCBTdHJp
bmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRPdXRlckhU
TUwoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHZvaWQ+IHNldElubmVySFRNTChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlubmVyVGV4dCgpOwogICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBvdXRlclRleHQoKTsKICAKQEAgLTQyOSw4ICs0MjYsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIG1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcygpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBtYXRjaGVzSW5kZXRlcm1pbmF0ZVBzZXVkb0NsYXNzKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIG1hdGNoZXNEZWZhdWx0UHNldWRvQ2xhc3MoKSBjb25zdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBjbG9zZXN0KGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8Ym9vbD4gbWF0Y2hlcyhjb25zdCBTdHJpbmcmIHNlbGVjdG9ycyk7CisgICAgV0VCQ09S
RV9FWFBPUlQgRXhjZXB0aW9uT3I8RWxlbWVudCo+IGNsb3Nlc3QoY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcnMpOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkgY29u
c3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBET01Ub2tlbkxpc3QmIGNsYXNzTGlzdCgpOwpAQCAt
NjAxLDcgKzU5OCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgYWRkU2hhZG93Um9vdChSZWY8
U2hhZG93Um9vdD4mJik7CiAKLSAgICBzdGF0aWMgdm9pZCBtZXJnZVdpdGhOZXh0VGV4dE5vZGUo
VGV4dCYgbm9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lk
PiBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoVGV4dCYpOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNU
ZXh0Tm9kZSgpIGNvbnN0OwpAQCAtNjM5LDcgKzYzNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1
cGRhdGVJZEZvckRvY3VtZW50KEhUTUxEb2N1bWVudCYsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xk
SWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQsIEhUTUxEb2N1bWVudE5hbWVkSXRlbU1hcHNV
cGRhdGluZ0NvbmRpdGlvbik7CiAgICAgdm9pZCB1cGRhdGVMYWJlbChUcmVlU2NvcGUmLCBjb25z
dCBBdG9taWNTdHJpbmcmIG9sZEZvckF0dHJpYnV0ZVZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld0ZvckF0dHJpYnV0ZVZhbHVlKTsKIAotICAgIE5vZGUqIGluc2VydEFkamFjZW50KGNvbnN0
IFN0cmluZyYgd2hlcmUsIFJlZjxOb2RlPiYmIG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgRXhjZXB0aW9uT3I8Tm9kZSo+IGluc2VydEFkamFjZW50KGNvbnN0IFN0cmluZyYgd2hlcmUs
IFJlZjxOb2RlPiYmIG5ld0NoaWxkKTsKIAogICAgIHZvaWQgc2Nyb2xsQnlVbml0cyhpbnQgdW5p
dHMsIFNjcm9sbEdyYW51bGFyaXR5KTsKIApAQCAtODM4LDUgKzgzNSwzIEBAIGlubGluZSB2b2lk
IEVsZW1lbnQ6OnNldEhhc0ZvY3VzV2l0aGluKGJvb2wgZmxhZykKIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6RWxlbWVudCkKICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6Tm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCk7IH0K
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5p
ZGwKaW5kZXggMzhiNjA2YTQwMWVmZTJmYjRiMjJmNGQzOGJhZGMxM2NlNGU2OGRlNC4uZTQyZDJk
NGQ4MWYyY2JjMjViYjYxN2E4ZjZkMzAyNmFmNWJjODRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50Lmlk
bApAQCAtMjgsMTMgKzI4LDEzIEBACiAKICAgICBET01TdHJpbmc/IGdldEF0dHJpYnV0ZShET01T
dHJpbmcgbmFtZSk7CiAKLSAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93TGVnYWN5RXhjZXB0aW9u
XSB2b2lkIHNldEF0dHJpYnV0ZShET01TdHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKKyAg
ICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIHNldEF0dHJpYnV0ZShET01T
dHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKIAogICAgIFtDRVJlYWN0aW9uc10gdm9pZCBy
ZW1vdmVBdHRyaWJ1dGUoRE9NU3RyaW5nIG5hbWUpOwogICAgIEF0dHI/IGdldEF0dHJpYnV0ZU5v
ZGUoRE9NU3RyaW5nIG5hbWUpOwogCi0gICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4
Y2VwdGlvbl0gQXR0cj8gc2V0QXR0cmlidXRlTm9kZShBdHRyIG5ld0F0dHIpOwotICAgIFtDRVJl
YWN0aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEF0dHIgcmVtb3ZlQXR0cmlidXRlTm9k
ZShBdHRyIG9sZEF0dHIpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIEF0
dHI/IHNldEF0dHJpYnV0ZU5vZGUoQXR0ciBuZXdBdHRyKTsKKyAgICBbQ0VSZWFjdGlvbnMsIE1h
eVRocm93RXhjZXB0aW9uXSBBdHRyIHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ciBvbGRBdHRyKTsK
IAogICAgIEhUTUxDb2xsZWN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lKERPTVN0cmluZyBuYW1l
KTsKIApAQCAtNDMsMTMgKzQzLDEzIEBACiAKICAgICBET01TdHJpbmc/IGdldEF0dHJpYnV0ZU5T
KERPTVN0cmluZz8gbmFtZXNwYWNlVVJJLCBET01TdHJpbmcgbG9jYWxOYW1lKTsKIAotICAgIFtD
RVJlYWN0aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIHZvaWQgc2V0QXR0cmlidXRlTlMo
RE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBxdWFsaWZpZWROYW1lLCBET01TdHJp
bmcgdmFsdWUpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgc2V0
QXR0cmlidXRlTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBxdWFsaWZpZWRO
YW1lLCBET01TdHJpbmcgdmFsdWUpOwogICAgIFtDRVJlYWN0aW9uc10gdm9pZCByZW1vdmVBdHRy
aWJ1dGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7CiAK
ICAgICBIVE1MQ29sbGVjdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKERPTVN0cmluZz8gbmFt
ZXNwYWNlVVJJLCBET01TdHJpbmcgbG9jYWxOYW1lKTsKIAogICAgIEF0dHI/IGdldEF0dHJpYnV0
ZU5vZGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7Ci0g
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gQXR0cj8gc2V0QXR0cmli
dXRlTm9kZU5TKEF0dHIgbmV3QXR0cik7CisgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2Vw
dGlvbl0gQXR0cj8gc2V0QXR0cmlidXRlTm9kZU5TKEF0dHIgbmV3QXR0cik7CiAgICAgYm9vbGVh
biBoYXNBdHRyaWJ1dGUoRE9NU3RyaW5nIG5hbWUpOwogCiAgICAgYm9vbGVhbiBoYXNBdHRyaWJ1
dGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7CkBAIC05
NywxNSArOTcsMTUgQEAKICAgICBzZXF1ZW5jZTxET01TdHJpbmc+IGdldEF0dHJpYnV0ZU5hbWVz
KCk7CiAKICAgICBIVE1MQ29sbGVjdGlvbiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKERPTVN0cmlu
ZyBuYW1lKTsKLSAgICBbQ0VSZWFjdGlvbnMsIFRyZWF0TnVsbEFzPUVtcHR5U3RyaW5nLCBTZXR0
ZXJNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gYXR0cmlidXRlIERPTVN0cmluZyBpbm5lckhUTUw7
Ci0gICAgW0NFUmVhY3Rpb25zLCBUcmVhdE51bGxBcz1FbXB0eVN0cmluZywgU2V0dGVyTWF5VGhy
b3dMZWdhY3lFeGNlcHRpb25dIGF0dHJpYnV0ZSBET01TdHJpbmcgb3V0ZXJIVE1MOworICAgIFtD
RVJlYWN0aW9ucywgVHJlYXROdWxsQXM9RW1wdHlTdHJpbmcsIFNldHRlck1heVRocm93RXhjZXB0
aW9uXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGlubmVySFRNTDsKKyAgICBbQ0VSZWFjdGlvbnMsIFRy
ZWF0TnVsbEFzPUVtcHR5U3RyaW5nLCBTZXR0ZXJNYXlUaHJvd0V4Y2VwdGlvbl0gYXR0cmlidXRl
IERPTVN0cmluZyBvdXRlckhUTUw7CiAKICAgICBbQ0VSZWFjdGlvbnMsIFJlZmxlY3Q9Y2xhc3Nd
IGF0dHJpYnV0ZSBET01TdHJpbmcgY2xhc3NOYW1lOwogICAgIFtQdXRGb3J3YXJkcz12YWx1ZV0g
cmVhZG9ubHkgYXR0cmlidXRlIERPTVRva2VuTGlzdCBjbGFzc0xpc3Q7CiAKLSAgICBbTWF5VGhy
b3dMZWdhY3lFeGNlcHRpb25dIGJvb2xlYW4gbWF0Y2hlcyhET01TdHJpbmcgc2VsZWN0b3JzKTsK
LSAgICBbTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEVsZW1lbnQgY2xvc2VzdChET01TdHJpbmcg
c2VsZWN0b3JzKTsgICAgCi0gICAgW0ltcGxlbWVudGVkQXM9bWF0Y2hlcywgTWF5VGhyb3dMZWdh
Y3lFeGNlcHRpb25dIGJvb2xlYW4gd2Via2l0TWF0Y2hlc1NlbGVjdG9yKERPTVN0cmluZyBzZWxl
Y3RvcnMpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBtYXRjaGVzKERPTVN0cmlu
ZyBzZWxlY3RvcnMpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRWxlbWVudCBjbG9zZXN0KERP
TVN0cmluZyBzZWxlY3RvcnMpOworICAgIFtJbXBsZW1lbnRlZEFzPW1hdGNoZXMsIE1heVRocm93
RXhjZXB0aW9uXSBib29sZWFuIHdlYmtpdE1hdGNoZXNTZWxlY3RvcihET01TdHJpbmcgc2VsZWN0
b3JzKTsKIAogICAgIC8vIENTU09NIFZpZXcgTW9kdWxlIEFQSQogICAgIENsaWVudFJlY3RMaXN0
IGdldENsaWVudFJlY3RzKCk7CkBAIC0xMjQsOSArMTI0LDkgQEAKICAgICBbQ0VSZWFjdGlvbnMs
IFJlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgdWlhY3Rpb25zOwogI2VuZGlmCiAKLSAgICBb
Q0VSZWFjdGlvbnMsIE1heVRocm93TGVnYWN5RXhjZXB0aW9uXSBFbGVtZW50IGluc2VydEFkamFj
ZW50RWxlbWVudChET01TdHJpbmcgd2hlcmUsIEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW0NFUmVh
Y3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gdm9pZCBpbnNlcnRBZGphY2VudEhUTUwo
RE9NU3RyaW5nIHdoZXJlLCBET01TdHJpbmcgaHRtbCk7Ci0gICAgW01heVRocm93TGVnYWN5RXhj
ZXB0aW9uXSB2b2lkIGluc2VydEFkamFjZW50VGV4dChET01TdHJpbmcgd2hlcmUsIERPTVN0cmlu
ZyB0ZXh0KTsKKyAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSBFbGVtZW50IGlu
c2VydEFkamFjZW50RWxlbWVudChET01TdHJpbmcgd2hlcmUsIEVsZW1lbnQgZWxlbWVudCk7Cisg
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBpbnNlcnRBZGphY2VudEhU
TUwoRE9NU3RyaW5nIHdoZXJlLCBET01TdHJpbmcgaHRtbCk7CisgICAgW01heVRocm93RXhjZXB0
aW9uXSB2b2lkIGluc2VydEFkamFjZW50VGV4dChET01TdHJpbmcgd2hlcmUsIERPTVN0cmluZyB0
ZXh0KTsKIAogICAgIFtDb25kaXRpb25hbD1QT0lOVEVSX0xPQ0tdIHZvaWQgcmVxdWVzdFBvaW50
ZXJMb2NrKCk7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgIFtDb25kaXRpb25hbD1DU1NfUkVH
SU9OU10gc2VxdWVuY2U8UmFuZ2U+IHdlYmtpdEdldFJlZ2lvbkZsb3dSYW5nZXMoKTsKIAogICAg
IC8vIFNoYWRvdyBET00gQVBJCi0gICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBNYXlU
aHJvd0xlZ2FjeUV4Y2VwdGlvbl0gU2hhZG93Um9vdCBhdHRhY2hTaGFkb3coU2hhZG93Um9vdElu
aXQgaW5pdCk7CisgICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBNYXlUaHJvd0V4Y2Vw
dGlvbl0gU2hhZG93Um9vdCBhdHRhY2hTaGFkb3coU2hhZG93Um9vdEluaXQgaW5pdCk7CiAgICAg
W0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBJbXBsZW1lbnRlZEFzPXNoYWRvd1Jvb3RGb3JC
aW5kaW5ncywgQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTaGFkb3dS
b290IHNoYWRvd1Jvb3Q7CiAgICAgW0NFUmVhY3Rpb25zLCBFbmFibGVkQXRSdW50aW1lPVNoYWRv
d0RPTSwgUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBzbG90OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
YW1lZE5vZGVNYXAuY3BwCmluZGV4IGRmZDEwOTk5NDJjMDg4ZjRkMGU3NjdjYTQ4ZmJjZjhkMTk0
OGEzNWYuLmJjZmEyMjdhNzIxMWM5ZjA3ZDQ4N2MzYjYxYzBhYjZhOTU5OWQyOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiTmFt
ZWROb2RlTWFwLmgiCiAKICNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgpAQCAtNTUsNTUgKzU0LDUwIEBAIFJlZlB0cjxBdHRyPiBO
YW1lZE5vZGVNYXA6OmdldE5hbWVkSXRlbU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
VVJJLCBjb25zCiAgICAgcmV0dXJuIG1fZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlTlMobmFtZXNw
YWNlVVJJLCBsb2NhbE5hbWUpOwogfQogCi1SZWZQdHI8QXR0cj4gTmFtZWROb2RlTWFwOjpyZW1v
dmVOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
K0V4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0oY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewotICAgIHVuc2lnbmVkIGluZGV4ID0gbV9lbGVtZW50
Lmhhc0F0dHJpYnV0ZXMoKSA/IG1fZWxlbWVudC5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUobmFt
ZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZShtX2VsZW1lbnQpKSA6IEVsZW1lbnREYXRhOjph
dHRyaWJ1dGVOb3RGb3VuZDsKLSAgICBpZiAoaW5kZXggPT0gRWxlbWVudERhdGE6OmF0dHJpYnV0
ZU5vdEZvdW5kKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQorICAgIGlmICghbV9lbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICBhdXRvIGluZGV4
ID0gbV9lbGVtZW50LmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShuYW1lLCBzaG91bGRJZ25vcmVB
dHRyaWJ1dGVDYXNlKG1fZWxlbWVudCkpOworICAgIGlmIChpbmRleCA9PSBFbGVtZW50RGF0YTo6
YXR0cmlidXRlTm90Rm91bmQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRf
RVJSIH07CiAgICAgcmV0dXJuIG1fZWxlbWVudC5kZXRhY2hBdHRyaWJ1dGUoaW5kZXgpOwogfQog
Ci1WZWN0b3I8U3RyaW5nPiBOYW1lZE5vZGVNYXA6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQor
VmVjdG9yPFN0cmluZz4gTmFtZWROb2RlTWFwOjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29u
c3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IG1fZWxlbWVudC5nZXRBdHRyaWJ1dGVO
YW1lcygpOwogICAgIGlmIChpczxIVE1MRWxlbWVudD4obV9lbGVtZW50KSAmJiBpczxIVE1MRG9j
dW1lbnQ+KG1fZWxlbWVudC5kb2N1bWVudCgpKSkgewogICAgICAgICBuYW1lcy5yZW1vdmVBbGxN
YXRjaGluZyhbXShTdHJpbmcmIG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBuYW1lLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCkgIT0gbmFtZTsKKyAgICAgICAgICAgIGZvciAoYXV0byBjaGFy
YWN0ZXIgOiBTdHJpbmdWaWV3IHsgbmFtZSB9LmNvZGVVbml0cygpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXIpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfSk7CiAgICAgfQogICAgIHJldHVybiBuYW1lczsKIH0KIAotUmVmUHRyPEF0dHI+IE5hbWVk
Tm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4
Y2VwdGlvbk9yPFJlZjxBdHRyPj4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW1OUyhjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUpCiB7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygpID8g
bV9lbGVtZW50LmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpIDogRWxlbWVudERhdGE6OmF0dHJpYnV0ZU5vdEZv
dW5kOwotICAgIGlmIChpbmRleCA9PSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQpIHsK
LSAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9CisgICAgaWYgKCFtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygpKQorICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgIGF1dG8gaW5kZXggPSBtX2VsZW1lbnQu
ZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKFF1YWxpZmllZE5hbWUgeyBudWxsQXRvbSwgbG9jYWxO
YW1lLCBuYW1lc3BhY2VVUkkgfSk7CisgICAgaWYgKGluZGV4ID09IEVsZW1lbnREYXRhOjphdHRy
aWJ1dGVOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIg
fTsKICAgICByZXR1cm4gbV9lbGVtZW50LmRldGFjaEF0dHJpYnV0ZShpbmRleCk7CiB9CiAKLVJl
ZlB0cjxBdHRyPiBOYW1lZE5vZGVNYXA6OnNldE5hbWVkSXRlbShBdHRyJiBhdHRyLCBFeGNlcHRp
b25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPFJlZlB0cjxBdHRyPj4gTmFtZWROb2RlTWFwOjpzZXRO
YW1lZEl0ZW0oQXR0ciYgYXR0cikKIHsKLSAgICByZXR1cm4gbV9lbGVtZW50LnNldEF0dHJpYnV0
ZU5vZGUoYXR0ciwgZWMpOwotfQotCi1SZWZQdHI8QXR0cj4gTmFtZWROb2RlTWFwOjpzZXROYW1l
ZEl0ZW0oTm9kZSYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFpczxBdHRy
Pihub2RlKSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotICAgIHJldHVybiBzZXROYW1lZEl0ZW0oZG93bmNhc3Q8QXR0cj4obm9kZSks
IGVjKTsKKyAgICByZXR1cm4gbV9lbGVtZW50LnNldEF0dHJpYnV0ZU5vZGUoYXR0cik7CiB9CiAK
IFJlZlB0cjxBdHRyPiBOYW1lZE5vZGVNYXA6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7
CiAgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIG1fZWxlbWVudC5lbnN1cmVBdHRyKG1fZWxlbWVu
dC5hdHRyaWJ1dGVBdChpbmRleCkubmFtZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1h
cC5oCmluZGV4IDBiNTY3ZTg4N2RlZDAwMzJhMGJmNTBmZTc4ZmZlODA4NTNmMjEwYjIuLjJjYjU5
NjQ0OTk4MDY3Mzc5Mzg4NGEzYjBhODQ0YjU5ZDNjOGMxYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWRO
b2RlTWFwLmgKQEAgLTI0LDM5ICsyNCwzNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkF0dHIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBw
YWJsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEF0dHI7CitjbGFzcyBFbGVt
ZW50OworCiBjbGFzcyBOYW1lZE5vZGVNYXAgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBmcmllbmQgY2xhc3MgRWxlbWVudDsKIHB1
YmxpYzoKICAgICBleHBsaWNpdCBOYW1lZE5vZGVNYXAoRWxlbWVudCYgZWxlbWVudCkKICAgICAg
ICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICB7Ci0gICAgICAgIC8vIE9ubHkgc3VwcG9ydHMg
TmFtZWROb2RlTWFwcyB3aXRoIEVsZW1lbnQgYXNzb2NpYXRlZCwgRG9jdW1lbnRUeXBlLmVudGl0
aWVzIGFuZCBEb2N1bWVudFR5cGUubm90YXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4KICAg
ICB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZigpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZGVyZWYoKTsKIAotICAgIC8vIFB1YmxpYyBET00gaW50ZXJmYWNlLgotCisgICAgV0VC
Q09SRV9FWFBPUlQgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPEF0dHI+IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZlB0cjxBdHRyPiBnZXROYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEF0dHI+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBz
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0
cj4gZ2V0TmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQ
dHI8QXR0cj4gcmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAg
ICBSZWZQdHI8QXR0cj4gc2V0TmFtZWRJdGVtKEF0dHImLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPEF0dHI+IHNldE5hbWVkSXRlbShOb2RlJiwgRXhjZXB0aW9u
Q29kZSYpOyAvLyBmb3IgbGVnYWN5IGJpbmRpbmdzLgorICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2Vw
dGlvbk9yPFJlZlB0cjxBdHRyPj4gc2V0TmFtZWRJdGVtKEF0dHImKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBFeGNlcHRpb25PcjxSZWY8QXR0cj4+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxBdHRyPj4g
cmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxB
dHRyPiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCkgY29uc3Q7CiAKLSAgICBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50OyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIHsgcmV0dXJuIG1fZWxlbWVudDsg
fQogCiBwcml2YXRlOgogICAgIEVsZW1lbnQmIG1fZWxlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVk
Tm9kZU1hcC5pZGwKaW5kZXggZmRkMDU5OTZlNTQzYmM2ODM3MDZlM2FjM2I4NDYwZDhhOGNkNzUw
NS4uODNkMjhlN2ExMjYyNzIyZmYwZTFiMmFiMTY4MzMyZDc1ZGFkMzM5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05hbWVkTm9kZU1hcC5pZGwKQEAgLTI0LDEyICsyNCwxMSBAQAogICAgIEltcGxlbWVudGF0
aW9uTGFja3NWVGFibGUsCiBdIGludGVyZmFjZSBOYW1lZE5vZGVNYXAgewogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLQotICAgIGdldHRlciBBdHRyPyBnZXRO
YW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwotICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dMZWdh
Y3lFeGNlcHRpb25dIEF0dHI/IHNldE5hbWVkSXRlbShBdHRyIGF0dHIpOwotICAgIFtDRVJlYWN0
aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEF0dHIgcmVtb3ZlTmFtZWRJdGVtKERPTVN0
cmluZyBuYW1lKTsKICAgICBnZXR0ZXIgQXR0cj8gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KTsK
KyAgICBnZXR0ZXIgQXR0cj8gZ2V0TmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKICAgICBBdHRy
PyBnZXROYW1lZEl0ZW1OUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2Fs
TmFtZSk7Ci0gICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbiwgSW1wbGVt
ZW50ZWRBcz1zZXROYW1lZEl0ZW1dIEF0dHI/IHNldE5hbWVkSXRlbU5TKEF0dHIgYXR0cik7Ci0g
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gQXR0ciByZW1vdmVOYW1l
ZEl0ZW1OUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7Cisg
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gQXR0cj8gc2V0TmFtZWRJdGVtKEF0
dHIgYXR0cik7CisgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbiwgSW1wbGVtZW50
ZWRBcz1zZXROYW1lZEl0ZW1dIEF0dHI/IHNldE5hbWVkSXRlbU5TKEF0dHIgYXR0cik7CisgICAg
W0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gQXR0ciByZW1vdmVOYW1lZEl0ZW0oRE9N
U3RyaW5nIG5hbWUpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIEF0dHIg
cmVtb3ZlTmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBsb2Nh
bE5hbWUpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggYThlYzBmZTFh
ODdiNTJhNTNjYzQxOWEzNmYxNmJmZjdhNWZkNzg4Ni4uYjMwZDc2YWRmZjIzYzI4ZTk3ODBiNzE2
ODA5ODgzZTVlMjRiODUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTU4
NCwxNiArNTg0LDE0IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxFbGVtZW50OjpzZXRPdXRlclRl
eHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0ID8g
bmV4dC0+cHJldmlvdXNTaWJsaW5nKCkgOiBudWxscHRyOwogICAgIGlmIChpczxUZXh0Pihub2Rl
LmdldCgpKSkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgbWVyZ2VX
aXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpub2RlKSwgZWMpOwotICAgICAgICBpZiAo
ZWMpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKm5vZGUpKTsKKyAg
ICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KICAgICBpZiAoaXM8VGV4dD4ocHJldi5nZXQo
KSkpIHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIG1lcmdlV2l0aE5l
eHRUZXh0Tm9kZShkb3duY2FzdDxUZXh0PigqcHJldiksIGVjKTsKLSAgICAgICAgaWYgKGVjKQot
ICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gbWVyZ2VXaXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpwcmV2KSk7CisgICAgICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKaW5kZXggZTliODVhOWRlM2ZmNjIzNjkyMmYxYThiNTk5
MzFkZTY2M2E4Y2NmMS4uMmMwY2YzYjUzN2RhNjE2NjE0Y2Y5ODZiMWY2ZTc4YzAxOTZlNjAwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKQEAgLTEzOCw3ICsxMzgsOSBA
QCBwdWJsaWM6CiAKICAgICBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlCiAg
ICAgewotICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUsIGVj
KTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUs
IG1fdmFsdWUpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkBAIC0xNzYsMTYgKzE3OCwyMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAobV9o
YWRBdHRyaWJ1dGUpCi0gICAgICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUs
IG1fb2xkVmFsdWUsIGVjKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9oYWRBdHRyaWJ1
dGUpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUo
bV9uYW1lLCBtX29sZFZhbHVlKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUo
KTsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2VsZW1lbnQtPnJlbW92ZUF0dHJpYnV0
ZShtX25hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBib29sIHJlZG8o
RXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX2VsZW1lbnQtPnNl
dEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUsIGVjKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBt
X2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUpOworICAgICAgICBpZiAocmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2Vw
dGlvbigpLmNvZGUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBjZTU2YmVjZTNj
YjZmNzU0MmRjNTIwZmQzZmMzNGY0NmMyMzliODE1Li41ZTE1Y2M1MTAyY2M2MWI3OTM2ZDZkNTFl
YzE5ZjZlMzIxNTg1MTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIFJldmFsaWRhdGVTdHlsZUF0
dHJpYnV0ZVRhc2s6OnRpbWVyRmlyZWQoKQogICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKIH0KIAot
U3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGNvbnN0IEV4Y2VwdGlvbkNv
ZGUmIGVjKQorU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKEV4Y2VwdGlv
bkNvZGUgZWMpCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbihlYyk7CkBAIC0yMDcsNiArMjA3LDExIEBAIFN0cmluZyBJbnNwZWN0
b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAorU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vy
cm9yU3RyaW5nKEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gRXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIHsgZXhjZXB0aW9uLmNvZGUoKSB9Lm5hbWU7Cit9CisKIEluc3BlY3Rv
ckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChXZWJBZ2VudENvbnRleHQmIGNvbnRleHQsIElu
c3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQog
ICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiRE9NIiksIGNvbnRleHQpCiAg
ICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihjb250ZXh0LmluamVjdGVkU2NyaXB0TWFuYWdl
cikKQEAgLTY2MCwxMSArNjY1LDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJp
YnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVuCiAgICAgaWYg
KCFlbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHBh
cnNlZEVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudChlbGVtZW50LT5kb2N1bWVudCgpLCBzcGFu
VGFnKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBwYXJzZWRFbGVtZW50LmdldCgp
LT5zZXRJbm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+IiwgZWMpOwotICAgIGlm
IChlYykgewotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcoZWMpOworICAgIGF1
dG8gcGFyc2VkRWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KGVsZW1lbnQtPmRvY3VtZW50KCks
IHNwYW5UYWcpOworICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VkRWxlbWVudC5nZXQoKS5zZXRJbm5l
ckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+Iik7CisgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkgeworICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggZDdiNmQxNTM4YTRi
Y2VjMDYxMmQyYzMyMDBkOTVhZGVlN2RiMzUzOS4uYTI0OGRlYzFkM2FlMThjNjc2ZjM4MWNlYzZm
OTJmOTZlYTRmODY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmgKQEAgLTYwLDYgKzYwLDcgQEAgY2xhc3MgRE9NRWRpdG9yOwogY2xhc3MgRG9jdW1l
bnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7CitjbGFzcyBFeGNlcHRpb247CiBjbGFz
cyBGbG9hdFF1YWQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3Rvckhpc3Rvcnk7CkBAIC0x
MDcsNyArMTA4LDggQEAgcHVibGljOgogICAgIEluc3BlY3RvckRPTUFnZW50KFdlYkFnZW50Q29u
dGV4dCYsIEluc3BlY3RvclBhZ2VBZ2VudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICB2aXJ0
dWFsIH5JbnNwZWN0b3JET01BZ2VudCgpOwogCi0gICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3Ry
aW5nKGNvbnN0IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgU3RyaW5nIHRvRXJyb3JTdHJp
bmcoRXhjZXB0aW9uQ29kZSk7CisgICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5nKEV4Y2Vw
dGlvbiYmKTsKIAogICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDg4MzhjOTM5NGIyNTdmNjhiN2E0NGYwNzM3
NTRmNjFjYTU0ZmU2ZjQuLmMyYTk1M2Y0ZDNmZTYwMzE2ZjA1ZDQxMzk3MDY1ODU0M2QyYTIzNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAKQEAgLTEzMDEsMTMgKzEzMDEsMTUgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGU6OnNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwKIAogICAg
IHsKICAgICAgICAgSW5zcGVjdG9yQ1NTQWdlbnQ6OklubGluZVN0eWxlT3ZlcnJpZGVTY29wZSBv
dmVycmlkZVNjb3BlKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIG1fZWxlbWVudC0+
c2V0QXR0cmlidXRlKCJzdHlsZSIsIHRleHQsIGVjKTsKKyAgICAgICAgbV9lbGVtZW50LT5zZXRB
dHRyaWJ1dGUoSFRNTE5hbWVzOjpzdHlsZUF0dHIsIHRleHQpOwogICAgIH0KIAogICAgIG1fc3R5
bGVUZXh0ID0gdGV4dDsKICAgICBtX2lzU3R5bGVUZXh0VmFsaWQgPSB0cnVlOwogICAgIG1fcnVs
ZVNvdXJjZURhdGEgPSBudWxscHRyOwotICAgIHJldHVybiAhZWM7CisKKyAgICBlYyA9IDA7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c2l6ZV90Pj4gSW5z
cGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpsaW5lRW5kaW5ncygpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggOGJjOTFiNTNkOWFmOGQ3ZmEyYWRhMzAy
Y2ZjNmY3OGExMDljY2Y1YS4uYzVlNGZkNDg4NWI3NWJiYzFkYzM0MjhjMGM1YWZjNjE5ZTVlMjk3
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNzgwLDMyICs3ODAsMTEg
QEAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gSW50ZXJuYWxzOjpjb21wdXRl
ZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8KICAgICByZXR1cm4gQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpjcmVhdGUoZWxlbWVudCwgYWxsb3dWaXNpdGVkU3R5bGUpOwogfQogCi1FeGNl
cHRpb25PcjxOb2RlKj4gSW50ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KEVsZW1lbnQmIGhvc3Qp
Ci17Ci0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBob3N0LnNoYWRvd1Jvb3QoKSkK
LSAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBhdXRvIHJlc3VsdCA9IGhvc3QuY3JlYXRlU2hhZG93Um9vdChlYyk7Ci0gICAgaWYgKGVj
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCiBOb2RlKiBJbnRlcm5hbHM6OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoRWxlbWVudCYg
aG9zdCkKIHsKICAgICByZXR1cm4gJmhvc3QuZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwog
fQogCi1FeGNlcHRpb25PcjxOb2RlKj4gSW50ZXJuYWxzOjpjcmVhdGVTaGFkb3dSb290KEVsZW1l
bnQmIGhvc3QpCi17Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byByZXN1bHQg
PSBob3N0LmNyZWF0ZVNoYWRvd1Jvb3QoZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IGVjIH07Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogTm9kZSogSW50ZXJu
YWxzOjpzaGFkb3dSb290KEVsZW1lbnQmIGhvc3QpCiB7CiAgICAgcmV0dXJuIGhvc3Quc2hhZG93
Um9vdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRs
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDRhNjZjNDY5NWY2
ODFkYWM5OGVlNjA5YzM5NmZkZGI3ZWYyZDg0YzguLmE2ZmUzNGNjNjkxMWMxYWVjZDk0ZDA5MDRj
Y2ZkYTNjYmIxMmE2NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTEw
MCw5ICsxMDAsNyBAQCBlbnVtIFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gewogCiAgICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oRWxl
bWVudCBlbGVtZW50KTsKIAotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gTm9kZSBlbnN1cmVTaGFk
b3dSb290KEVsZW1lbnQgaG9zdCk7CiAgICAgTm9kZSBlbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290
KEVsZW1lbnQgaG9zdCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBOb2RlIGNyZWF0ZVNoYWRv
d1Jvb3QoRWxlbWVudCBob3N0KTsKICAgICBOb2RlIHNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KTsK
IAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRE9NU3RyaW5nIHNoYWRvd1Jvb3RUeXBlKE5vZGUg
cm9vdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggNTU0MjVkOTUyNGVjZDBlODBkZTA3YmE5ZGQzNDdjZTc0
ZGMyMGEzMy4uYThmOTVjZTU1NDI0YzUyNmNjNTU4NDQwNTU1Y2Q2Y2YwZGRkYzY5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcApAQCAtNzM5LDExICs3MzksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZU5h
bWVzcGFjZUF0dHJpYnV0ZXMoVmVjdG9yPEF0dHJpYnV0ZT4mIHByZWZpeGVkQXR0cmlidXQKICAg
ICAgICAgaWYgKG5hbWVzcGFjZXNbaV0ucHJlZml4KQogICAgICAgICAgICAgbmFtZXNwYWNlUU5h
bWUgPSAieG1sbnM6IiArIHRvU3RyaW5nKG5hbWVzcGFjZXNbaV0ucHJlZml4KTsKIAotICAgICAg
ICBRdWFsaWZpZWROYW1lIHBhcnNlZE5hbWUgPSBhbnlOYW1lOwotICAgICAgICBpZiAoIUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlTmFtZShwYXJzZWROYW1lLCBYTUxOU05hbWVzOjp4bWxuc05hbWVz
cGFjZVVSSSwgbmFtZXNwYWNlUU5hbWUsIGVjKSkKKyAgICAgICAgYXV0byByZXN1bHQgPSBFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZU5hbWUoWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkksIG5h
bWVzcGFjZVFOYW1lKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAg
ICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHByZWZpeGVkQXR0cmlidXRlcy5hcHBlbmQo
QXR0cmlidXRlKHBhcnNlZE5hbWUsIG5hbWVzcGFjZVVSSSkpOworICAgICAgICB9CisKKyAgICAg
ICAgcHJlZml4ZWRBdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUocmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpLCBuYW1lc3BhY2VVUkkpKTsKICAgICB9CiB9CiAKQEAgLTc2NiwxMSArNzY4LDEz
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhWZWN0b3I8QXR0
cmlidXRlPiYgcHJlZml4ZWRBdHRyaWJ1dGVzCiAgICAgICAgIEF0b21pY1N0cmluZyBhdHRyVVJJ
ID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyBudWxsQXRvbSA6IHRvQXRvbWljU3RyaW5nKGF0dHJp
YnV0ZXNbaV0udXJpKTsKICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJRTmFtZSA9IGF0dHJQcmVm
aXguaXNFbXB0eSgpID8gdG9BdG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS5sb2NhbG5hbWUpIDog
YXR0clByZWZpeCArICI6IiArIHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ubG9jYWxuYW1lKTsKIAot
ICAgICAgICBRdWFsaWZpZWROYW1lIHBhcnNlZE5hbWUgPSBhbnlOYW1lOwotICAgICAgICBpZiAo
IUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlTmFtZShwYXJzZWROYW1lLCBhdHRyVVJJLCBhdHRyUU5h
bWUsIGVjKSkKKyAgICAgICAgYXV0byByZXN1bHQgPSBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZU5h
bWUoYXR0clVSSSwgYXR0clFOYW1lKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgeworICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsK
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIHByZWZpeGVkQXR0cmli
dXRlcy5hcHBlbmQoQXR0cmlidXRlKHBhcnNlZE5hbWUsIGF0dHJWYWx1ZSkpOworICAgICAgICBw
cmVmaXhlZEF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShyZXN1bHQucmVsZWFzZVJldHVyblZh
bHVlKCksIGF0dHJWYWx1ZSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvRE9NL0RPTUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NRWxlbWVu
dC5tbQppbmRleCAyMmI0ZjllM2JhMDFlN2VmYWFiNjU2NjkzMGU4YjhjNDA4OGVlMzU0Li4zM2E4
YzI1ZWE0NGViM2QxZWY2YjRjYWVhY2MyZTYzODYzZTI2NzE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9ET00vRE9NRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00v
RE9NRWxlbWVudC5tbQpAQCAtMTc3LDkgKzE3Nyw3IEBAIC0gKE5TU3RyaW5nICopaW5uZXJIVE1M
CiAtICh2b2lkKXNldElubmVySFRNTDooTlNTdHJpbmcgKiluZXdJbm5lckhUTUwKIHsKICAgICBK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgdW53cmFwKCpzZWxmKS5zZXRJbm5lckhUTUwobmV3SW5uZXJIVE1MLCBlYyk7Ci0gICAgcmFp
c2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5zZXRJ
bm5lckhUTUwobmV3SW5uZXJIVE1MKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopb3V0ZXJIVE1MCkBA
IC0xOTEsOSArMTg5LDcgQEAgLSAoTlNTdHJpbmcgKilvdXRlckhUTUwKIC0gKHZvaWQpc2V0T3V0
ZXJIVE1MOihOU1N0cmluZyAqKW5ld091dGVySFRNTAogewogICAgIEpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICB1bndyYXAoKnNlbGYp
LnNldE91dGVySFRNTChuZXdPdXRlckhUTUwsIGVjKTsKLSAgICByYWlzZU9uRE9NRXJyb3IoZWMp
OworICAgIHJhaXNlT25ET01FcnJvcih1bndyYXAoKnNlbGYpLnNldE91dGVySFRNTChuZXdPdXRl
ckhUTUwpKTsKIH0KIAogLSAoTlNTdHJpbmcgKiljbGFzc05hbWUKQEAgLTI4NSw5ICsyODEsNyBA
QCAtIChOU1N0cmluZyAqKWdldEF0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lCiAtICh2b2lkKXNl
dEF0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlCiB7CiAg
ICAgSlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIHVud3JhcCgqc2VsZikuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlLCBlYyk7Ci0gICAg
cmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5z
ZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpKTsKIH0KIAogLSAodm9pZClyZW1vdmVBdHRyaWJ1dGU6
KE5TU3RyaW5nICopbmFtZQpAQCAtMzA3LDEwICszMDEsNyBAQCAtIChET01BdHRyICopc2V0QXR0
cmlidXRlTm9kZTooRE9NQXR0ciAqKW5ld0F0dHIKICAgICBKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgaWYgKCFuZXdBdHRyKQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlv
bigpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIERPTUF0dHIgKnJlc3VsdCA9IGtp
dCh1bndyYXAoKnNlbGYpLnNldEF0dHJpYnV0ZU5vZGUoKmNvcmUobmV3QXR0ciksIGVjKS5nZXQo
KSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBraXQocmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZikuc2V0QXR0cmlidXRlTm9kZSgq
Y29yZShuZXdBdHRyKSkpLmdldCgpKTsKIH0KIAogLSAoRE9NQXR0ciAqKXJlbW92ZUF0dHJpYnV0
ZU5vZGU6KERPTUF0dHIgKilvbGRBdHRyCkBAIC0zMTgsMTAgKzMwOSw3IEBAIC0gKERPTUF0dHIg
KilyZW1vdmVBdHRyaWJ1dGVOb2RlOihET01BdHRyICopb2xkQXR0cgogICAgIEpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBpZiAoIW9sZEF0dHIpCiAgICAgICAgIHJhaXNlVHlwZUVy
cm9yRXhjZXB0aW9uKCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NQXR0ciAq
cmVzdWx0ID0ga2l0KHVud3JhcCgqc2VsZikucmVtb3ZlQXR0cmlidXRlTm9kZSgqY29yZShvbGRB
dHRyKSwgZWMpLmdldCgpKTsKLSAgICByYWlzZU9uRE9NRXJyb3IoZWMpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIGtpdChyYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5yZW1v
dmVBdHRyaWJ1dGVOb2RlKCpjb3JlKG9sZEF0dHIpKSkucHRyKCkpOwogfQogCiAtIChET01Ob2Rl
TGlzdCAqKWdldEVsZW1lbnRzQnlUYWdOYW1lOihOU1N0cmluZyAqKW5hbWUKQEAgLTM0Myw5ICsz
MzEsNyBAQCAtIChOU1N0cmluZyAqKWdldEF0dHJpYnV0ZU5TOihOU1N0cmluZyAqKW5hbWVzcGFj
ZVVSSSBsb2NhbE5hbWU6KE5TU3RyaW5nICopbG9jYQogLSAodm9pZClzZXRBdHRyaWJ1dGVOUzoo
TlNTdHJpbmcgKiluYW1lc3BhY2VVUkkgcXVhbGlmaWVkTmFtZTooTlNTdHJpbmcgKilxdWFsaWZp
ZWROYW1lIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlCiB7CiAgICAgSlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHVud3JhcCgqc2VsZiku
c2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSwgZWMpOwot
ICAgIHJhaXNlT25ET01FcnJvcihlYyk7CisgICAgcmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2Vs
Zikuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSkpOwog
fQogCiAtICh2b2lkKXJlbW92ZUF0dHJpYnV0ZU5TOihOU1N0cmluZyAqKW5hbWVzcGFjZVVSSSBs
b2NhbE5hbWU6KE5TU3RyaW5nICopbG9jYWxOYW1lCkBAIC0zNzUsMTAgKzM2MSw3IEBAIC0gKERP
TUF0dHIgKilzZXRBdHRyaWJ1dGVOb2RlTlM6KERPTUF0dHIgKiluZXdBdHRyCiAgICAgSlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGlmICghbmV3QXR0cikKICAgICAgICAgcmFpc2VU
eXBlRXJyb3JFeGNlcHRpb24oKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01B
dHRyICpyZXN1bHQgPSBraXQodW53cmFwKCpzZWxmKS5zZXRBdHRyaWJ1dGVOb2RlTlMoKmNvcmUo
bmV3QXR0ciksIGVjKS5nZXQoKSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBraXQocmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZiku
c2V0QXR0cmlidXRlTm9kZU5TKCpjb3JlKG5ld0F0dHIpKSkuZ2V0KCkpOwogfQogCiAtIChCT09M
KWhhc0F0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lCkBAIC00MzksMjggKzQyMiwxOSBAQCAtIChE
T01Ob2RlTGlzdCAqKWdldEVsZW1lbnRzQnlDbGFzc05hbWU6KE5TU3RyaW5nICopbmFtZQogLSAo
Qk9PTCltYXRjaGVzOihOU1N0cmluZyAqKXNlbGVjdG9ycwogewogICAgIEpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBCT09MIHJlc3Vs
dCA9IHVud3JhcCgqc2VsZikubWF0Y2hlcyhzZWxlY3RvcnMsIGVjKTsKLSAgICByYWlzZU9uRE9N
RXJyb3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJhaXNlT25ET01FcnJv
cih1bndyYXAoKnNlbGYpLm1hdGNoZXMoc2VsZWN0b3JzKSk7CiB9CiAKIC0gKERPTUVsZW1lbnQg
KiljbG9zZXN0OihOU1N0cmluZyAqKXNlbGVjdG9ycwogewogICAgIEpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01FbGVtZW50ICpy
ZXN1bHQgPSBraXQodW53cmFwKCpzZWxmKS5jbG9zZXN0KHNlbGVjdG9ycywgZWMpKTsKLSAgICBy
YWlzZU9uRE9NRXJyb3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGtpdChy
YWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5jbG9zZXN0KHNlbGVjdG9ycykpKTsKIH0KIAog
LSAoQk9PTCl3ZWJraXRNYXRjaGVzU2VsZWN0b3I6KE5TU3RyaW5nICopc2VsZWN0b3JzCiB7CiAg
ICAgSlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIEJPT0wgcmVzdWx0ID0gdW53cmFwKCpzZWxmKS5tYXRjaGVzKHNlbGVjdG9ycywgZWMp
OwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gcmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZikubWF0Y2hlcyhzZWxlY3RvcnMpKTsKIH0K
IAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL0RPTS9ET01IVE1MRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01IVE1M
RWxlbWVudC5tbQppbmRleCBjMjY1ZDI1N2FhMzlmZjRjOGJkZGM4ZWFkNDdlOTgzNjlkZGUyMzBm
Li5hNDc2OTRjMjg3MjQxMWExYjUyNzU5NTBjODRjMzM0NGQzNjA2Y2YxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9ET00vRE9NSFRNTEVsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYktp
dC9tYWMvRE9NL0RPTUhUTUxFbGVtZW50Lm1tCkBAIC0yMzUsMjYgKzIzNSwxOSBAQCAtIChET01F
bGVtZW50ICopaW5zZXJ0QWRqYWNlbnRFbGVtZW50OihOU1N0cmluZyAqKXdoZXJlIGVsZW1lbnQ6
KERPTUVsZW1lbnQgKillbAogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9uKCk7
Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NRWxlbWVudCAqcmVz
dWx0ID0ga2l0KFdURjo6Z2V0UHRyKElNUEwtPmluc2VydEFkamFjZW50RWxlbWVudCh3aGVyZSwg
KmNvcmUoZWxlbWVudCksIGVjKSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJTVBMLT5pbnNlcnRB
ZGphY2VudEVsZW1lbnQod2hlcmUsICpjb3JlKGVsZW1lbnQpKSkpOwogfQogCiAtICh2b2lkKWlu
c2VydEFkamFjZW50SFRNTDooTlNTdHJpbmcgKil3aGVyZSBodG1sOihOU1N0cmluZyAqKWh0bWwK
IHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSU1QTC0+aW5zZXJ0QWRqYWNlbnRIVE1MKHdo
ZXJlLCBodG1sLCBlYyk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9N
RXJyb3IoSU1QTC0+aW5zZXJ0QWRqYWNlbnRIVE1MKHdoZXJlLCBodG1sKSk7CiB9CiAKIC0gKHZv
aWQpaW5zZXJ0QWRqYWNlbnRUZXh0OihOU1N0cmluZyAqKXdoZXJlIHRleHQ6KE5TU3RyaW5nICop
dGV4dAogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBJTVBMLT5pbnNlcnRBZGphY2VudFRl
eHQod2hlcmUsIHRleHQsIGVjKTsKLSAgICByYWlzZU9uRE9NRXJyb3IoZWMpOworICAgIHJhaXNl
T25ET01FcnJvcihJTVBMLT5pbnNlcnRBZGphY2VudFRleHQod2hlcmUsIHRleHQpKTsKIH0KIAog
LSAodm9pZCljbGljawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvRE9NL0RPTU5hbWVk
Tm9kZU1hcC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01OYW1lZE5vZGVNYXAubW0KaW5k
ZXggOGY5MTg0ZWQ4ZWYzNTAzNzFlNDFjMjU4YWZkOWZlNzkwODRmYjAxZC4uNWRkMzk1NjRkZDRm
NGYyMzk2ZjM2YjcyNzkzNmQ4M2M1YTg1NjViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvRE9NL0RPTU5hbWVkTm9kZU1hcC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vRE9N
TmFtZWROb2RlTWFwLm1tCkBAIC02OCwxOSArNjgsMTYgQEAgLSAoRE9NTm9kZSAqKXNldE5hbWVk
SXRlbTooRE9NTm9kZSAqKW5vZGUKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigp
OwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIERPTU5vZGUgKnJlc3Vs
dCA9IGtpdChXVEY6OmdldFB0cihJTVBMLT5zZXROYW1lZEl0ZW0oKmNvcmUobm9kZSksIGVjKSkp
OwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRv
JiBjb3JlTm9kZSA9ICpjb3JlKG5vZGUpOworICAgIGlmICghaXM8V2ViQ29yZTo6QXR0cj4oY29y
ZU5vZGUpKQorICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigpOworICAgIHJldHVybiBr
aXQocmFpc2VPbkRPTUVycm9yKElNUEwtPnNldE5hbWVkSXRlbShkb3duY2FzdDxXZWJDb3JlOjpB
dHRyPihjb3JlTm9kZSkpKS5nZXQoKSk7CiB9CiAKIC0gKERPTU5vZGUgKilyZW1vdmVOYW1lZEl0
ZW06KE5TU3RyaW5nICopbmFtZQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01Ob2Rl
ICpyZXN1bHQgPSBraXQoV1RGOjpnZXRQdHIoSU1QTC0+cmVtb3ZlTmFtZWRJdGVtKG5hbWUsIGVj
KSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJTVBMLT5yZW1vdmVOYW1lZEl0ZW0obmFtZSkpLnB0
cigpKTsKIH0KIAogLSAoRE9NTm9kZSAqKWl0ZW06KHVuc2lnbmVkKWluZGV4CkBAIC05NywyMiAr
OTQsMTMgQEAgLSAoRE9NTm9kZSAqKWdldE5hbWVkSXRlbU5TOihOU1N0cmluZyAqKW5hbWVzcGFj
ZVVSSSBsb2NhbE5hbWU6KE5TU3RyaW5nICopbG9jYWwKIAogLSAoRE9NTm9kZSAqKXNldE5hbWVk
SXRlbU5TOihET01Ob2RlICopbm9kZQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0
aW9uKCk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NTm9kZSAq
cmVzdWx0ID0ga2l0KFdURjo6Z2V0UHRyKElNUEwtPnNldE5hbWVkSXRlbSgqY29yZShub2RlKSwg
ZWMpKSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBbc2VsZiBzZXROYW1lZEl0ZW06bm9kZV07CiB9CiAKIC0gKERPTU5vZGUgKilyZW1v
dmVOYW1lZEl0ZW1OUzooTlNTdHJpbmcgKiluYW1lc3BhY2VVUkkgbG9jYWxOYW1lOihOU1N0cmlu
ZyAqKWxvY2FsTmFtZQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01Ob2RlICpyZXN1
bHQgPSBraXQoV1RGOjpnZXRQdHIoSU1QTC0+cmVtb3ZlTmFtZWRJdGVtTlMobmFtZXNwYWNlVVJJ
LCBsb2NhbE5hbWUsIGVjKSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJTVBMLT5yZW1vdmVOYW1l
ZEl0ZW1OUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkpLnB0cigpKTsKIH0KIAogQGVuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwIGIvU291cmNlL1dl
YktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCmluZGV4IGRiMTBmMGJiNTI5MGFkNTdlYzM2ZGY1
MjgyYjc0YzM2Y2NmMjRlNWEuLjAzOTg2NWYwZTJhNmNiZjExYmM1MDIwYzY0ODY5MWUwYTY0MmFj
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJET01IVE1MQ2xhc3Nlcy5oIgogI2luY2x1ZGUgIldlYktpdEdyYXBoaWNzLmgi
CiAKKyNpbmNsdWRlIDxXZWJDb3JlL0F0dHIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0JTdHJpbmcu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NV2lu
ZG93Lmg+CkBAIC0xMDcwLDkgKzEwNzEsOCBAQCBIUkVTVUxUIERPTUVsZW1lbnQ6OnNldEF0dHJp
YnV0ZShfSW5fIEJTVFIgbmFtZSwgX0luXyBCU1RSIHZhbHVlKQogCiAgICAgV1RGOjpTdHJpbmcg
bmFtZVN0cmluZyhuYW1lLCBTeXNTdHJpbmdMZW4obmFtZSkpOwogICAgIFdURjo6U3RyaW5nIHZh
bHVlU3RyaW5nKHZhbHVlLCBTeXNTdHJpbmdMZW4odmFsdWUpKTsKLSAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lU3RyaW5n
LCB2YWx1ZVN0cmluZywgZWMpOwotICAgIHJldHVybiBlYyA/IEVfRkFJTCA6IFNfT0s7CisgICAg
YXV0byByZXN1bHQgPSBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lU3RyaW5nLCB2YWx1ZVN0
cmluZyk7CisgICAgcmV0dXJuIHJlc3VsdC5oYXNFeGNlcHRpb24oKSA/IEVfRkFJTCA6IFNfT0s7
CiB9CiAgICAgCiBIUkVTVUxUIERPTUVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZShfSW5fIEJTVFIg
LypuYW1lKi8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAKaW5kZXggNDA4ZmE4YTFl
NGZjZDYxZDQyNGIzNTY0MWEzOGY2MGY5YWVlMTNhYi4uZDFmZWEzNWMyMzdkYWYzNjdkMDQ5OGE4
NDA2ODA1YjZkYzZkNDE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENs
YXNzZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcApAQCAt
NTE0LDggKzUxNCw3IEBAIEhSRVNVTFQgRE9NSFRNTEVsZW1lbnQ6OnNldElubmVySFRNTChfSW5f
IEJTVFIgaHRtbCkKICAgICBBU1NFUlQoaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAg
IEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihtX2VsZW1l
bnQpOwogICAgIFN0cmluZyBodG1sU3RyaW5nKGh0bWwsIFN5c1N0cmluZ0xlbihodG1sKSk7Ci0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaHRtbEVsZW1lbnQtPnNldElubmVySFRNTCho
dG1sU3RyaW5nLCBlYyk7CisgICAgaHRtbEVsZW1lbnQtPnNldElubmVySFRNTChodG1sU3RyaW5n
KTsKICAgICByZXR1cm4gU19PSzsKIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01FbGVtZW50LmNwcAppbmRleCA1MjZkMDU3ODcxMmM0YWUyNDlhMWM3Yzc5
YjFlNWQyMDdjNTljMGY2Li4zZTNkNjZiOGQzYjBhY2QzNzgwY2E3ODU5MGVhNmY5NWYyZWY4MTNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudC5jcHAKQEAg
LTYxMywxMCArNjEzLDkgQEAgdm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZShX
ZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSwKICAgICBXZWJDb3JlOjpF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CiAgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShjb252ZXJ0
ZWROYW1lLCBjb252ZXJ0ZWRWYWx1ZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGl0ZW0tPnNldEF0dHJpYnV0ZShjb252ZXJ0ZWROYW1lLCBjb252ZXJ0ZWRWYWx1ZSk7Cisg
ICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgp
KTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAg
LTY1MCwxMyArNjQ5LDEzIEBAIFdlYktpdERPTUF0dHIqIHdlYmtpdF9kb21fZWxlbWVudF9zZXRf
YXR0cmlidXRlX25vZGUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgV2ViCiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwogICAgIFdlYkNvcmU6OkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV2ViQ29yZTo6QXR0ciogY29udmVydGVk
TmV3QXR0ciA9IFdlYktpdDo6Y29yZShuZXdBdHRyKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6QXR0cj4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnNldEF0dHJpYnV0ZU5vZGUoKmNvbnZlcnRlZE5ld0F0dHIsIGVjKSk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0QXR0cmlidXRlTm9kZSgq
Y29udmVydGVkTmV3QXR0cik7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCkuZ2V0KCkpOwogfQogCiBXZWJLaXRET01BdHRyKiB3ZWJr
aXRfZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZV9ub2RlKFdlYktpdERPTUVsZW1lbnQqIHNl
bGYsIFdlYktpdERPTUF0dHIqIG9sZEF0dHIsIEdFcnJvcioqIGVycm9yKQpAQCAtNjY3LDEzICs2
NjYsMTMgQEAgV2ViS2l0RE9NQXR0ciogd2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1
dGVfbm9kZShXZWJLaXRET01FbGVtZW50KiBzZWxmLAogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KCFlcnJvciB8fCAhKmVycm9yLCAwKTsKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkF0dHIqIGNvbnZlcnRlZE9sZEF0dHIgPSBX
ZWJLaXQ6OmNvcmUob2xkQXR0cik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5yZW1vdmVBdHRyaWJ1dGVOb2RlKCpjb252ZXJ0ZWRPbGRBdHRyLCBlYykpOwotICAgIGlm
IChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPnJlbW92ZUF0dHJpYnV0ZU5vZGUoKmNvbnZl
cnRlZE9sZEF0dHIpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhyZXN1bHQucmVsZWFzZUV4
Y2VwdGlvbigpLmNvZGUoKSk7CiAgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQocmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpLnB0cigpKTsKIH0KIAogV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24q
IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfYXNfaHRtbF9jb2xs
ZWN0aW9uKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQpAQCAtNzIw
LDEwICs3MTksOSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25zKFdl
YktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYQogICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VVUkkp
OwogICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFF1YWxpZmllZE5hbWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgocXVhbGlmaWVkTmFtZSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZU5TKGNvbnZlcnRlZE5hbWVzcGFjZVVS
SSwgY29udmVydGVkUXVhbGlmaWVkTmFtZSwgY29udmVydGVkVmFsdWUsIGVjKTsKLSAgICBpZiAo
ZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgYXV0byByZXN1bHQgPSBpdGVtLT5zZXRBdHRyaWJ1dGVOUyhjb252ZXJ0ZWROYW1l
c3BhY2VVUkksIGNvbnZlcnRlZFF1YWxpZmllZE5hbWUsIGNvbnZlcnRlZFZhbHVlKTsKKyAgICBp
ZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwog
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CiAgICAgfQogfQpAQCAtNzc0
LDEzICs3NzIsMTMgQEAgV2ViS2l0RE9NQXR0ciogd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRy
aWJ1dGVfbm9kZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxmLAogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkF0dHIqIGNvbnZlcnRlZE5ld0F0
dHIgPSBXZWJLaXQ6OmNvcmUobmV3QXR0cik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5zZXRBdHRyaWJ1dGVOb2RlTlMoKmNvbnZlcnRlZE5ld0F0dHIsIGVjKSk7Ci0g
ICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0QXR0cmlidXRlTm9kZU5TKCpj
b252ZXJ0ZWROZXdBdHRyKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KHJlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKS5nZXQoKSk7CiB9CiAKIGdib29sZWFuIHdlYmtpdF9kb21f
ZWxlbWVudF9oYXNfYXR0cmlidXRlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiBuYW1lKQpAQCAtODc0LDEzICs4NzIsMTMgQEAgZ2Jvb2xlYW4gd2Via2l0X2RvbV9lbGVtZW50
X21hdGNoZXMoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG8KICAg
ICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgRkFMU0UpOwogICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkU2VsZWN0b3JzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7
Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gaXRlbS0+bWF0Y2hlcyhjb252ZXJ0ZWRTZWxlY3RvcnMsIGVjKTsKLSAgICBpZiAoZWMpIHsK
LSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Cisg
ICAgYXV0byByZXN1bHQgPSBpdGVtLT5tYXRjaGVzKGNvbnZlcnRlZFNlbGVjdG9ycyk7CisgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsK
ICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKTsKIH0KIAogV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVt
ZW50X2Nsb3Nlc3QoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9y
cywgR0Vycm9yKiogZXJyb3IpCkBAIC04OTEsMzAgKzg4OSwxOCBAQCBXZWJLaXRET01FbGVtZW50
KiB3ZWJraXRfZG9tX2VsZW1lbnRfY2xvc2VzdChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhcgogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsK
ICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVjdG9ycyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzZWxl
Y3RvcnMpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2xvc2Vz
dChjb252ZXJ0ZWRTZWxlY3RvcnMsIGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0
ID0gaXRlbS0+Y2xvc2VzdChjb252ZXJ0ZWRTZWxlY3RvcnMpOworICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7CiAgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAogZ2Jvb2xl
YW4gd2Via2l0X2RvbV9lbGVtZW50X3dlYmtpdF9tYXRjaGVzX3NlbGVjdG9yKFdlYktpdERPTUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKQogewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxlY3RvcnMsIEZBTFNFKTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCghZXJyb3IgfHwgISplcnJvciwgRkFMU0UpOwotICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2VsZWN0
b3JzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7Ci0gICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+bWF0Y2hlcyhj
b252ZXJ0ZWRTZWxlY3RvcnMsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gd2Via2l0X2RvbV9lbGVtZW50X21hdGNoZXMoc2VsZiwgc2VsZWN0b3JzLCBlcnJvcik7CiB9
CiAKIHZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3dlYmtpdF9yZXF1ZXN0X2Z1bGxzY3JlZW4oV2Vi
S2l0RE9NRWxlbWVudCogc2VsZikKQEAgLTkzNSwxMyArOTIxLDEzIEBAIFdlYktpdERPTUVsZW1l
bnQqIHdlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfZWxlbWVudChXZWJLaXRET01F
bGVtZW50KiBzCiAgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRXaGVyZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh3aGVyZSk7CiAgICAgV2ViQ29yZTo6RWxlbWVudCogY29udmVydGVkRWxlbWVudCA9IFdlYktp
dDo6Y29yZShlbGVtZW50KTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPmluc2VydEFkamFjZW50RWxlbWVudChjb252ZXJ0ZWRXaGVyZSwgKmNvbnZlcnRlZEVsZW1l
bnQsIGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+aW5zZXJ0QWRq
YWNlbnRFbGVtZW50KGNvbnZlcnRlZFdoZXJlLCAqY29udmVydGVkRWxlbWVudCk7CisgICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwog
fQogCiB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfaHRtbChXZWJLaXRE
T01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogd2hlcmUsIGNvbnN0IGdjaGFyKiBodG1sLCBH
RXJyb3IqKiBlcnJvcikKQEAgLTk1NCwxMCArOTQwLDkgQEAgdm9pZCB3ZWJraXRfZG9tX2VsZW1l
bnRfaW5zZXJ0X2FkamFjZW50X2h0bWwoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFdoZXJlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHdoZXJl
KTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRIdG1sID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KGh0bWwpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPmlu
c2VydEFkamFjZW50SFRNTChjb252ZXJ0ZWRXaGVyZSwgY29udmVydGVkSHRtbCwgZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPmluc2VydEFkamFjZW50SFRNTChjb252
ZXJ0ZWRXaGVyZSwgY29udmVydGVkSHRtbCk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJl
c3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAgLTk3MiwxMCArOTU3LDkgQEAgdm9pZCB3ZWJr
aXRfZG9tX2VsZW1lbnRfaW5zZXJ0X2FkamFjZW50X3RleHQoV2ViS2l0RE9NRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwogICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFdoZXJlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHdoZXJlKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUZXh0ID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHRleHQpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGl0ZW0tPmluc2VydEFkamFjZW50VGV4dChjb252ZXJ0ZWRXaGVyZSwgY29udmVydGVkVGV4
dCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPmluc2VydEFkamFj
ZW50VGV4dChjb252ZXJ0ZWRXaGVyZSwgY29udmVydGVkVGV4dCk7CisgICAgaWYgKHJlc3VsdC5o
YXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAgLTEyNjMsMTAgKzEyNDcs
OSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfaW5uZXJfaHRtbChXZWJLaXRET01FbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9y
IHx8ICEqZXJyb3IpOwogICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0
ZW0tPnNldElubmVySFRNTChjb252ZXJ0ZWRWYWx1ZSwgZWMpOwotICAgIGlmIChlYykgewotICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGl0ZW0tPnNldElubmVySFRNTChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAgLTEyODgs
MTAgKzEyNzEsOSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfb3V0ZXJfaHRtbChXZWJL
aXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdQogICAgIGdfcmV0dXJuX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IpOwogICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGl0ZW0tPnNldE91dGVySFRNTChjb252ZXJ0ZWRWYWx1ZSwgZWMpOwotICAgIGlmIChl
YykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVj
KTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPnNldE91dGVySFRNTChjb252ZXJ0ZWRWYWx1ZSk7
CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29k
ZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmNw
cAppbmRleCAzNWMxN2ZlMmZkNmZjZTZkNWE1Y2IzNWM5ZmVkYjUzNTc2OTQ1YmI5Li42YTBlZDRh
MDRlMzcxZWZkNGZjZjdiN2NlNmFiMzkzMzU4NDAxMjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hbWVk
Tm9kZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXAuY3BwCkBAIC0yMCwxNiArMjAsMTcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRET01OYW1lZE5vZGVNYXAu
aCIKIAotI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKICNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTU5hbWVkTm9kZU1hcFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2Rl
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0F0dHIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgotI2luY2x1ZGUgIldlYktpdERPTU5h
bWVkTm9kZU1hcFByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgot
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IApAQCAtMTUyLDEzICsxNTMsMTggQEAgV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9u
b2RlX21hcF9zZXRfbmFtZWRfaXRlbShXZWJLaXRET01OYW1lZE5vZGVNYXAqIHMKICAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CiAgICAgV2ViQ29yZTo6TmFt
ZWROb2RlTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6Ok5vZGUq
IGNvbnZlcnRlZE5vZGUgPSBXZWJLaXQ6OmNvcmUobm9kZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5zZXROYW1lZEl0ZW0oKmNvbnZlcnRlZE5vZGUsIGVjKSk7Ci0g
ICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgIGlmICghV2ViQ29yZTo6aXM8V2ViQ29yZTo6QXR0cj4oKmNvbnZlcnRl
ZE5vZGUpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoV2ViQ29yZTo6VHlwZUVycm9yKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0
TmFtZWRJdGVtKGRvd25jYXN0PFdlYkNvcmU6OkF0dHI+KCpjb252ZXJ0ZWROb2RlKSk7CisgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KHJlc3VsdC5yZWxlYXNlUmV0
dXJuVmFsdWUoKS5nZXQoKSk7CiB9CiAKIFdlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFtZWRf
bm9kZV9tYXBfcmVtb3ZlX25hbWVkX2l0ZW0oV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBj
b25zdCBnY2hhciogbmFtZSwgR0Vycm9yKiogZXJyb3IpCkBAIC0xNjksMTMgKzE3NSwxMyBAQCBX
ZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3JlbW92ZV9uYW1lZF9pdGVt
KFdlYktpdERPTU5hbWVkTm9kZU1hcAogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8
fCAhKmVycm9yLCAwKTsKICAgICBXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChuYW1lKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PnJlbW92ZU5hbWVkSXRlbShjb252ZXJ0ZWROYW1lLCBlYykpOwotICAgIGlmIChlYykgewotICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGl0ZW0tPnJlbW92ZU5hbWVkSXRlbShjb252ZXJ0ZWROYW1lKTsKKyAgICBp
ZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwog
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKS5w
dHIoKSk7CiB9CiAKIFdlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfaXRl
bShXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGd1bG9uZyBpbmRleCkKQEAgLTIwMiwxOSAr
MjA4LDcgQEAgV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfbmFt
ZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5vZGVNYXAKIAogV2ViS2l0RE9NTm9kZSogd2Via2l0
X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5vZGVN
YXAqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIEdFcnJvcioqIGVycm9yKQogewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX05BTUVEX05PREVfTUFQKHNlbGYpLCAwKTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUobm9kZSksIDApOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJDb3JlOjpOYW1lZE5v
ZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6Tm9kZSogY29u
dmVydGVkTm9kZSA9IFdlYktpdDo6Y29yZShub2RlKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnNldE5hbWVkSXRlbSgqY29udmVydGVkTm9kZSwgZWMpKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiB3
ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3NldF9uYW1lZF9pdGVtKHNlbGYsIG5vZGUsIGVycm9y
KTsKIH0KIAogV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9yZW1vdmVf
bmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGNvbnN0IGdjaGFyKiBu
YW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUsIEdFcnJvcioqIGVycm9yKQpAQCAt
MjI3LDEzICsyMjEsMTMgQEAgV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21h
cF9yZW1vdmVfbmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5vZGUKICAgICBXZWJDb3JlOjpO
YW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkTmFtZXNwYWNlVVJJID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFjZVVS
SSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTG9jYWxOYW1lID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KGxvY2FsTmFtZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5yZW1vdmVOYW1lZEl0ZW1OUyhjb252ZXJ0ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZExvY2Fs
TmFtZSwgZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgYXV0byByZXN1bHQgPSBpdGVtLT5yZW1vdmVO
YW1lZEl0ZW1OUyhjb252ZXJ0ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZExvY2FsTmFtZSk7Cisg
ICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgp
KTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVl
KCkucHRyKCkpOwogfQogCiBndWxvbmcgd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfbGVu
Z3RoKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQubW0gYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01FbGVt
ZW50Lm1tCmluZGV4IGE1MzQ1MGZkMjc3ZWNjNTdiYmJmMDA5M2JjY2I1ZTI4MTE3YWU4MmUuLjJj
MDZjZWM2YTUwM2M3NTYzNjZjMWQ2ZGJmMmU2Njc5NTYzNDk0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFj
L1dLRE9NRWxlbWVudC5tbQpAQCAtNDUsOSArNDUsNyBAQCAtIChOU1N0cmluZyAqKWdldEF0dHJp
YnV0ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUKIAogLSAodm9pZClzZXRBdHRyaWJ1dGU6KE5TU3Ry
aW5nICopbmFtZSB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZQogewotICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgYWJvdXQgdGhlIGV4Y2VwdGlvbi4KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjOwotICAgIGRvd25jYXN0PFdlYkNvcmU6OkVsZW1lbnQ+KCpfaW1wbCkuc2V0QXR0cmlidXRl
KG5hbWUsIHZhbHVlLCBlYyk7CisgICAgZG93bmNhc3Q8V2ViQ29yZTo6RWxlbWVudD4oKl9pbXBs
KS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCiAtIChOU1N0cmluZyAqKXRhZ05hbWUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NDliMGI2MTgwNzA3NWIyZWE2MzJlOTE3MDE1ZjBkZmYxNzExMWY0Li5mNmQxZjli
MmQxZTBjOTVhZDQwYWQ4OTY5N2E1NGQ0ZjBiZTM1NzM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTYtMTAtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1v
dmUgRWxlbWVudCwgTmFtZWROb2RlTWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0aW9u
Q29kZSB0byBFeGNlcHRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NDIwNgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisg
ICAgICAgICogZmFzdC9kb20vcmVzb3VyY2VzL3NoYWRvdy10ZXN0LWRyaXZlci5qczogRGVsZXRl
ZC4gVW51c2VkLgorCiAyMDE2LTEwLTMwICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNv
bT4KIAogICAgICAgICBVc2UgSGFyZkJ1enogb3QtbWF0aCBBUEkgdG8gcGFyc2UgdGhlIE9wZW5U
eXBlIE1BVEggdGFibGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNl
cy9zaGFkb3ctdGVzdC1kcml2ZXIuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMv
c2hhZG93LXRlc3QtZHJpdmVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWVl
YjdmOWZhMWM4MTg2YjA1NTRjNmY0MGI5ZWFkNjVmZDNhNWVjLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNl
cy9zaGFkb3ctdGVzdC1kcml2ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAot
Ly8KLS8vIHNoYWRvdy10ZXN0LWRyaXZlci5qcwotLy8KLS8vIFRvIHVzZSBzaGFkb3ctdGVzdC1k
cml2ZXIuanMsIHlvdSBzaG91bGQgaGF2ZQotLy8gICA8ZGl2IGlkPSJhY3R1YWwtY29udGFpbmVy
Ij48L2Rpdj4KLS8vICAgPGRpdiBpZD0iZXhwZWN0LWNvbnRhaW5lciI+PC9kaXY+Ci0vLyAgIDxw
cmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgotLy8gaW4geW91ciBib2R5LgotLy8KLS8vIFRoZW4sIGRl
ZmluZSB0ZXN0IGZ1bmN0aW9ucyBoYXZpbmcgb25lIGFyZ3VtZW50ICdjYWxsSWZEb25lJy4KLS8v
IGNhbGxJZkRvbmUgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHlvdXIgdGVzdCBmdW5jdGlvbiBmaW5p
c2hlZC4KLS8vCi0vLyBJbiBib2R5Lm9ubG9hZCwgY2FsbCBkb1Rlc3QodGVzdEZ1bmNzKSB3aGVy
ZSB0ZXN0RnVuY3MgaXMgYW4gYXJyYXkgb2YgdGVzdCBmdW5jdGlvbnMuCi0vLwotLy8gU2VlIGNv
bnRlbnQtZWxlbWVudC1tb3ZlLmh0bWwgYXMgYW4gZXhhbXBsZS4KLS8vCi0KLWZ1bmN0aW9uIGxv
ZyhtZXNzYWdlKSB7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5l
ckhUTUwgKz0gKG1lc3NhZ2UgKyAiXG4iKTsKLX0KLQotZnVuY3Rpb24gcmVtb3ZlQWxsQ2hpbGRy
ZW4oZWxlbSkgewotICAgIHdoaWxlIChlbGVtLmZpcnN0Q2hpbGQpCi0gICAgICAgIGVsZW0ucmVt
b3ZlQ2hpbGQoZWxlbS5maXJzdENoaWxkKTsKLX0KLQotZnVuY3Rpb24gY2xlYW5VcCgpIHsKLSAg
ICByZW1vdmVBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRh
aW5lcicpKTsKLSAgICByZW1vdmVBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
ZXhwZWN0LWNvbnRhaW5lcicpKTsKLX0KLQotZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVyTGluZXMo
dGV4dCkgewotICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJyk7Ci0gICAgbGluZXMuc3Bs
aWNlKDAsIDIpOwotICAgIHJldHVybiBsaW5lcy5qb2luKCdcbicpOwotfQotCi1mdW5jdGlvbiBj
aGVjaygpIHsKLSAgICB2YXIgZXhwZWN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2V4cGVjdC1jb250YWluZXInKTsKLSAgICB2YXIgYWN0dWFsQ29udGFpbmVyID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKTsKLSAgICB2YXIgb3JpZ2luYWxE
aXNwbGF5VmFsdWUgPSBhY3R1YWxDb250YWluZXIuc3R5bGUuZGlzcGxheTsKLSAgICBhY3R1YWxD
b250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICBleHBlY3RDb250YWluZXIub2Zm
c2V0TGVmdDsKLSAgICB2YXIgcmVmQ29udGFpbmVyUmVuZGVyVHJlZSA9IGludGVybmFscy5lbGVt
ZW50UmVuZGVyVHJlZUFzVGV4dChleHBlY3RDb250YWluZXIpOwotICAgIHZhciByZWZSZW5kZXJU
cmVlID0gcmVtb3ZlQ29udGFpbmVyTGluZXMocmVmQ29udGFpbmVyUmVuZGVyVHJlZSk7Ci0gICAg
YWN0dWFsQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBvcmlnaW5hbERpc3BsYXlWYWx1ZTsKLQot
ICAgIG9yaWdpbmFsRGlzcGxheVZhbHVlID0gZXhwZWN0Q29udGFpbmVyLnN0eWxlLmRpc3BsYXk7
Ci0gICAgZXhwZWN0Q29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgYWN0dWFs
Q29udGFpbmVyLm9mZnNldExlZnQ7Ci0gICAgdmFyIHRhcmdldENvbnRhaW5lclJlbmRlclRyZWUg
PSBpbnRlcm5hbHMuZWxlbWVudFJlbmRlclRyZWVBc1RleHQoYWN0dWFsQ29udGFpbmVyKTsKLSAg
ICB2YXIgdGFyZ2V0UmVuZGVyVHJlZSA9IHJlbW92ZUNvbnRhaW5lckxpbmVzKHRhcmdldENvbnRh
aW5lclJlbmRlclRyZWUpOwotICAgIGV4cGVjdENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gb3Jp
Z2luYWxEaXNwbGF5VmFsdWU7Ci0KLSAgICBpZiAodGFyZ2V0UmVuZGVyVHJlZSA9PSByZWZSZW5k
ZXJUcmVlKQotICAgICAgICBsb2coIlBBU1MiKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbG9nKCJG
QUlMIik7Ci0gICAgICAgIGxvZygiRXhwZWN0ZWQ6ICIpOwotICAgICAgICBsb2cocmVmUmVuZGVy
VHJlZSk7Ci0gICAgICAgIGxvZygiQWN0dWFsOiAiKTsKLSAgICAgICAgbG9nKHRhcmdldFJlbmRl
clRyZWUpOwotICAgIH0KLX0KLQotZnVuY3Rpb24gY3JlYXRlU3BhbldpdGhUZXh0KHRleHQsIGNs
YXNzTmFtZSkgewotICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3Bhbicp
OwotICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpOwot
ICAgIGlmIChjbGFzc05hbWUpCi0gICAgICAgIHNwYW4uY2xhc3NOYW1lID0gY2xhc3NOYW1lOwot
ICAgIHJldHVybiBzcGFuOwotfQotCi1mdW5jdGlvbiBjcmVhdGVDb250ZW50V2l0aFNlbGVjdChz
ZWxlY3QsIGZhbGxiYWNrVGV4dCkgewotICAgIHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNyZWF0
ZUNvbnRlbnRFbGVtZW50KCk7Ci0gICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3NlbGVjdCcsIHNl
bGVjdCk7Ci0gICAgaWYgKGZhbGxiYWNrVGV4dCkKLSAgICAgICAgY29udGVudC5hcHBlbmRDaGls
ZChjcmVhdGVTcGFuV2l0aFRleHQoZmFsbGJhY2tUZXh0KSk7Ci0KLSAgICByZXR1cm4gY29udGVu
dDsKLX0KLQotZnVuY3Rpb24gY3JlYXRlQ29udGVudFdpdGhUZXh0KGZhbGxiYWNrVGV4dCkgewot
ICAgIHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNyZWF0ZUNvbnRlbnRFbGVtZW50KCk7Ci0gICAg
aWYgKGZhbGxiYWNrVGV4dCkKLSAgICAgICAgY29udGVudC5pbm5lckhUTUwgPSBmYWxsYmFja1Rl
eHQ7Ci0KLSAgICByZXR1cm4gY29udGVudDsKLX0KLQotZnVuY3Rpb24gYXBwZW5kU2hhZG93KHRh
cmdldCwgc2VsZWN0KSB7Ci0gICAgdmFyIHJvb3QgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9v
dCh0YXJnZXQpOwotCi0gICAgdmFyIGNvbnRlbnQgPSBpbnRlcm5hbHMuY3JlYXRlQ29udGVudEVs
ZW1lbnQoKTsKLSAgICBjb250ZW50LnNldEF0dHJpYnV0ZSgnc2VsZWN0Jywgc2VsZWN0KTsKLSAg
ICBjb250ZW50LmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiRkFMTEJBQ0siKSk7Ci0K
LSAgICByb290LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ7U0hBRE9XOiAi
KSk7Ci0gICAgcm9vdC5hcHBlbmRDaGlsZChjb250ZW50KTsKLSAgICByb290LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ9IikpOwotfQotCi1mdW5jdGlvbiBhcHBlbmRTaGFk
b3dEZWVwKHRhcmdldCwgc2VsZWN0KSB7Ci0gICAgdmFyIHJvb3QgPSBpbnRlcm5hbHMuZW5zdXJl
U2hhZG93Um9vdCh0YXJnZXQpOwotCi0gICAgdmFyIGNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic3BhbiIpOwotICAgIHsKLSAgICAgICAgdmFyIGNvbnRlbnQgPSBpbnRlcm5hbHMuY3Jl
YXRlQ29udGVudEVsZW1lbnQoKTsKLSAgICAgICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3NlbGVj
dCcsIHNlbGVjdCk7Ci0gICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhU
ZXh0KCJGQUxMQkFDSyIpKTsKLQotICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgie0lOTkVSOiAiKSk7Ci0gICAgICAgIGNoaWxkLmFwcGVuZENoaWxkKGNv
bnRlbnQpOwotICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgifSIpKTsKLSAgICB9Ci0KLSAgICByb290LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCJ7U0hBRE9XOiAiKSk7Ci0gICAgcm9vdC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAg
cm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgifSIpKTsKLX0KLQotZnVu
Y3Rpb24gZG9UZXN0SWZMZWZ0KHJlc3RUZXN0cykgewotICAgIHZhciB0ZXN0ID0gcmVzdFRlc3Rz
LnNoaWZ0KCk7Ci0gICAgaWYgKHRlc3QgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIGRvbmVUZXN0
KCk7Ci0KLSAgICB2YXIgY2FsbElmRG9uZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgY2hlY2soKTsKLSAgICAgICAgICAgIGNsZWFu
VXAoKTsKLSAgICAgICAgICAgIGRvVGVzdElmTGVmdChyZXN0VGVzdHMpOwotICAgICAgICB9LCAw
KTsKLSAgICB9OwotCi0gICAgbG9nKHRlc3QubmFtZSk7Ci0gICAgdGVzdChjYWxsSWZEb25lKTsK
LX0KLQotZnVuY3Rpb24gZG9uZVRlc3QoKSB7Ci0gICAgbG9nKCJURVNUIENPTVBMRVRFRCIpOwot
ICAgIGlmICh3aW5kb3cudGVhckRvd25PbmNlKQotICAgICAgICB3aW5kb3cudGVhckRvd25PbmNl
KCk7Ci0gICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19Ci0KLS8vIEEgdGVzdCBkcml2ZXIu
IENhbGwgdGhpcyBib2R5Lm9ubG9hZC4KLWZ1bmN0aW9uIGRvVGVzdCh0ZXN0cykgewotICAgIGlm
ICh3aW5kb3cuc2V0VXBPbmNlKQotICAgICAgICB3aW5kb3cuc2V0VXBPbmNlKCk7Ci0KLSAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKLSAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25l
KCk7Ci0gICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwotICAgIH0KLQotICAgIGNsZWFu
VXAoKTsKLSAgICBkb1Rlc3RJZkxlZnQodGVzdHMpOwotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293370</attachid>
            <date>2016-10-30 15:28:27 -0700</date>
            <delta_ts>2016-10-30 15:28:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164206-20161030152432.patch</filename>
            <type>text/plain</type>
            <size>107756</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzMyYmNkN2QwN2VhNmRh
Njk5MDE3NTE3MWY3NzlhOTZhNzQyNjNlNS4uODQzN2IyN2E2OGEyZDQ1OTFiZmI3ZDFhOWIzMDZh
Y2NhOTM0ZTQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDE2LTEwLTMwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIEVsZW1lbnQsIE5hbWVk
Tm9kZU1hcCwgYW5kIERPTVN0cmluZ01hcCBmcm9tIEV4Y2VwdGlvbkNvZGUgdG8gRXhjZXB0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyMDYK
KworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NU3Ry
aW5nTWFwOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKTogVXNlIG1vZGVybiBmb3IgbG9vcCwgYW5kCisg
ICAgICAgIHVwZGF0ZXMgc2luY2UgdGhlIG5hbWVzIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGEgdmVj
dG9yLgorICAgICAgICAoV2ViQ29yZTo6SlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKTogVXNl
IHByb3BhZ2F0ZUV4Y2VwdGlvbi4gQWxzbyByZXR1cm4KKyAgICAgICAgdHJ1ZSBhbnkgdGltZSBh
biBleGNlcHRpb24gaXMgcmFpc2VkLiBTaW5jZSB0cnVlIHRlbGxzIHRoZSBjYWxsZXIgdG8gcmV0
dXJuCisgICAgICAgIHdpdGhvdXQgZG9pbmcgYW55IHdvcmssIHdlIGFsd2F5cyB3YW50IHRvIHJl
dHVybiB0aGF0IG9uIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgKiBkb20vRGF0YXNldERPTVN0cmlu
Z01hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhc2V0RE9NU3RyaW5nTWFwOjpuYW1lcyk6
IFJlbmFtZWQgZnJvbSBnZXROYW1lcyBhbmQgbWFkZSB0aGlzCisgICAgICAgIHJldHVybiBhIFZl
Y3RvciBpbnN0ZWFkIG9mIHBvcHVsYXRpbmcgYSBwYXNzZWQtaW4gdmVjdG9yLgorICAgICAgICAo
V2ViQ29yZTo6RGF0YXNldERPTVN0cmluZ01hcDo6c2V0SXRlbSk6IFVzZSBFeGNlcHRpb25Pci4K
KyAgICAgICAgKiBkb20vRGF0YXNldERPTVN0cmluZ01hcC5oOiBVcGRhdGVkIGZvciBhYm92ZS4K
KworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6YWRvcHROb2RlKTogVXBkYXRlZCB0byB1c2UgRXhjZXB0aW9uT3IgZm9yCisgICAgICAgIHJl
bW92ZUF0dHJpYnV0ZU5vZGUuIENoYW5nZWQgdG8gdXNlIHJlbW92ZSByYXRoZXIgdGhhbiByZW1v
dmVDaGlsZCBmb3IKKyAgICAgICAgYmV0dGVyIGNsYXJpdHkuCisKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGUpOiBVc2Ug
RXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjcmVhdGVTaGFkb3dSb290
KTogRGVsZXRlZC4gVW51c2VkLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0YWNoU2hh
ZG93KTogVXNlIEV4Y2VwdGlvbk9yLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2hhZG93
Um9vdEZvckJpbmRpbmdzKTogVHdlYWtlZCBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OnVzZXJBZ2VudFNoYWRvd1Jvb3QpOiBSZW1vdmVkIHVubmVlZGVkIGlmIHN0YXRlbW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjplbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KTog
VHdlYWtlZCBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5v
ZGUpOiBVc2UgRXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRy
aWJ1dGVOb2RlTlMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0
dHJpYnV0ZU5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlTmFtZSk6IERpdHRvLiBBbHNvIGNoYW5nZWQgcmV0dXJuIHJlc3VsdAorICAgICAgICB0
byBiZSBhIFF1YWxpZmllZE5hbWUgaW5zdGVhZCBvZiB1c2luZyBhbiBvdXQgYXJndW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6bWVyZ2VXaXRoTmV4dFRleHROb2RlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRPdXRlckhUTUwpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnNldElubmVySFRNTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6bWF0Y2hlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xv
c2VzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0QWRqYWNlbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydEFkamFjZW50RWxlbWVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE5vZGVGb3JJbnNlcnRpb24pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRFbGVtZW50Rm9ySW5zZXJ0aW9uKTogQWRk
ZWQuIEhlbHBlciBmb3IgdGhlCisgICAgICAgIGluc2VydEFkamFjZW50SFRNTCBmdW5jdGlvbiB0
byBlbGltaW5hdGUgYSBsb2NhbCB2YXJpYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
Omluc2VydEFkamFjZW50SFRNTCk6IFVzZSBFeGNlcHRpb25Pci4KKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6Omluc2VydEFkamFjZW50VGV4dCk6IERpdHRvLgorICAgICAgICAqIGRvbS9FbGVt
ZW50Lmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorICAgICAgICAqIGRvbS9FbGVtZW50LmlkbDogVXNl
IG5vbi1sZWdhY3kgZXhjZXB0aW9ucy4KKworICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0pOiBVc2Ug
RXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnN1cHBvcnRlZFBy
b3BlcnR5TmFtZXMpOiBVcGRhdGVkIHRvIGNoZWNrCisgICAgICAgIHdoaWNoIHN0cmluZ3Mgc2hv
dWxkIGJlIHJlbW92ZWQgd2l0aG91dCBjb3B5aW5nIHRoZSBzdHJpbmdzLgorICAgICAgICAoV2Vi
Q29yZTo6TmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW1OUyk6IFVzZSBFeGNlcHRpb25Pci4K
KyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKTogRGl0dG8uIFJl
bW92ZWQgb3ZlcmxvYWQgZm9yCisgICAgICAgIGxlZ2FjeSBiaW5kaW5nczsgbW92ZSB0aGF0IHRv
IHRoZSBiaW5kaW5ncyB0aGVtc2VsdmVzLgorICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuaDog
VXBkYXRlZCBmb3IgYWJvdmUuCisgICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5pZGw6IFVzZSBu
b24tbGVnYWN5IGV4Y2VwdGlvbnMuCisKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQpOiBVcGRhdGVkIHNp
bmNlIG1lcmdlV2l0aE5leHRUZXh0Tm9kZQorICAgICAgICBub3cgdXNlcyBFeGNlcHRpb25Pci4K
KworICAgICAgICAqIGluc3BlY3Rvci9ET01FZGl0b3IuY3BwOiBVcGRhdGVkIHRvIHVzZSBFeGNl
cHRpb25Pci4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyk6IEFkZGVk
IGFuIG92ZXJsb2FkIGZvcgorICAgICAgICBFeGNlcHRpb24uCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dCk6IFVwZGF0ZWQgdG8gdXNlIEV4
Y2VwdGlvbk9yLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOiBVcGRh
dGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6c2V0U3R5bGVUZXh0KTogVXBkYXRlZCB0bworICAgICAgICB1c2UgdGhlIGNvcnJlY3QgdmVy
c2lvbiBvZiBzZXRBdHRyaWJ1dGU7IHRoZXJlIHdhcyBuZXZlciBhIHJpc2sgdGhhdCB0aGVyZQor
ICAgICAgICB3b3VsZCBiZSBhbiBleGNlcHRpb24sIGJ1dCBub3cgdGhhdCdzIGNsZWFyZXIuCisK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRl
cm5hbHM6OmVuc3VyZVNoYWRvd1Jvb3QpOiBEZWxldGVkLiBXYXMgdW51c2VkLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpjcmVhdGVTaGFkb3dSb290KTogRGl0dG8uCisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbHMuaWRsOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIHht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmhhbmRsZU5hbWVzcGFjZUF0dHJpYnV0ZXMpOiBVc2UgdXBkYXRlZCBwYXJzZUF0dHJpYnV0ZU5h
bWUsCisgICAgICAgIHdoaWNoIHVzZXMgRXhjZXB0aW9uT3IgYW5kIGEgcmV0dXJuIHZhbHVlIGlu
c3RlYWQgb2YgYW4gb3V0IGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVu
dEF0dHJpYnV0ZXMpOiBEaXR0by4KKwogMjAxNi0xMC0yOCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxn
aGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXVtEaXJlY3QyRF0gQ29ycmVjdCBib29ra2Vl
cGluZyBmb3IgYmVnaW4vZW5kIGRyYXcgcGFpcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA5YzFmZjUw
OWI0MjU4YjIzNDE0MTAzZTgzNzA2MGVlMmQwYTI2ODc2Li5jZjZhZTYxZDk5NDU0YmMwYjk5MDE4
MWViNDRiMmIzMzM0MjVkYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIw
MTYtMTAtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUg
RWxlbWVudCwgTmFtZWROb2RlTWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0aW9uQ29k
ZSB0byBFeGNlcHRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDIwNgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAg
ICAgICogRE9NL0RPTUVsZW1lbnQubW06CisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0SW5uZXJI
VE1MOl0pOiBVcGRhdGVkIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICAgKC1bRE9NRWxlbWVu
dCBzZXRPdXRlckhUTUw6XSk6IERpdHRvLgorICAgICAgICAoLVtET01FbGVtZW50IHNldEF0dHJp
YnV0ZTp2YWx1ZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0QXR0cmlidXRl
Tm9kZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgcmVtb3ZlQXR0cmlidXRlTm9k
ZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0QXR0cmlidXRlTlM6cXVhbGlm
aWVkTmFtZTp2YWx1ZTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUVsZW1lbnQgc2V0QXR0cmli
dXRlTm9kZU5TOl0pOiBEaXR0by4KKyAgICAgICAgKC1bRE9NRWxlbWVudCBtYXRjaGVzOl0pOiBE
aXR0by4KKyAgICAgICAgKC1bRE9NRWxlbWVudCBjbG9zZXN0Ol0pOiBEaXR0by4KKyAgICAgICAg
KC1bRE9NRWxlbWVudCB3ZWJraXRNYXRjaGVzU2VsZWN0b3I6XSk6IERpdHRvLgorICAgICAgICAq
IERPTS9ET01IVE1MRWxlbWVudC5tbToKKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgaW5zZXJ0
QWRqYWNlbnRFbGVtZW50OmVsZW1lbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtET01IVE1MRWxl
bWVudCBpbnNlcnRBZGphY2VudEhUTUw6aHRtbDpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTUhU
TUxFbGVtZW50IGluc2VydEFkamFjZW50VGV4dDp0ZXh0Ol0pOiBEaXR0by4KKyAgICAgICAgKiBE
T00vRE9NTmFtZWROb2RlTWFwLm1tOgorICAgICAgICAoLVtET01OYW1lZE5vZGVNYXAgc2V0TmFt
ZWRJdGVtOl0pOiBEaXR0by4KKyAgICAgICAgKC1bRE9NTmFtZWROb2RlTWFwIHJlbW92ZU5hbWVk
SXRlbTpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTU5hbWVkTm9kZU1hcCBzZXROYW1lZEl0ZW1O
UzpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTU5hbWVkTm9kZU1hcCByZW1vdmVOYW1lZEl0ZW1O
Uzpsb2NhbE5hbWU6XSk6IERpdHRvLgorCiAyMDE2LTEwLTI5ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IG1vcmUgb2YgRE9NIGZyb20gRXhjZXB0aW9u
Q29kZSB0byBFeGNlcHRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCAzNjkyMDU2ZWUzYTc3ZWJlOGY4
NGUyNGVkMzg0MTAxMzUyMjUwMDc5Li4xYTY2YWY3MDVmMGY2ZTA4MjdjN2QwODdhNmE5ZGI1Nzg2
M2VmMjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMTAtMzAgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgRWxlbWVudCwgTmFt
ZWROb2RlTWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0aW9uQ29kZSB0byBFeGNlcHRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDIw
NgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgICogRE9NQ29y
ZUNsYXNzZXMuY3BwOgorICAgICAgICAoRE9NRWxlbWVudDo6c2V0QXR0cmlidXRlKTogVXBkYXRl
ZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAgICogRE9NSFRNTENsYXNzZXMuY3BwOgorICAg
ICAgICAoRE9NSFRNTEVsZW1lbnQ6OnNldElubmVySFRNTCk6IERpdHRvLgorCiAyMDE2LTEwLTMw
ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgYnVpbGQgZml4IChEaXJlY3QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0ZjM5MjUxODc0NjFkM2IyNTc1
YTE2NjAyYjllYmI1YjE4M2QxMjQ2Li4xNjc2ZWE5NDE1MjE5YTU2NTA4YjAxNDcwZThiZTk1NjBk
ZmRkYTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTYtMTAtMzAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgRWxlbWVudCwgTmFtZWROb2Rl
TWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0aW9uQ29kZSB0byBFeGNlcHRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDIwNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXAuY3BwOgorICAg
ICAgICAod2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbSk6IFVwZGF0ZWQg
ZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAgICAod2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9y
ZW1vdmVfbmFtZWRfaXRlbSk6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9uYW1lZF9ub2Rl
X21hcF9zZXRfbmFtZWRfaXRlbV9ucyk6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9uYW1l
ZF9ub2RlX21hcF9yZW1vdmVfbmFtZWRfaXRlbV9ucyk6IERpdHRvLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudC5jcHA6Cisg
ICAgICAgICh3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZSk6IERpdHRvLgorICAgICAg
ICAod2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbm9kZSk6IERpdHRvLgorICAgICAg
ICAod2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGVfbm9kZSk6IERpdHRvLgorICAg
ICAgICAod2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbnMpOiBEaXR0by4KKyAgICAg
ICAgKHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGVfbnMpOiBEaXR0by4KKyAg
ICAgICAgKHdlYmtpdF9kb21fZWxlbWVudF9tYXRjaGVzKTogRGl0dG8uCisgICAgICAgICh3ZWJr
aXRfZG9tX2VsZW1lbnRfY2xvc2VzdCk6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV9lbGVt
ZW50X3dlYmtpdF9tYXRjaGVzX3NlbGVjdG9yKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfZG9t
X2VsZW1lbnRfaW5zZXJ0X2FkamFjZW50X2VsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfaHRtbCk6IERpdHRvLgorICAgICAgICAod2Vi
a2l0X2RvbV9lbGVtZW50X2luc2VydF9hZGphY2VudF90ZXh0KTogRGl0dG8uCisgICAgICAgICh3
ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2lubmVyX2h0bWwpOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dF9kb21fZWxlbWVudF9zZXRfb3V0ZXJfaHRtbCk6IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQubW06CisgICAgICAgICgtW1dL
RE9NRWxlbWVudCBzZXRBdHRyaWJ1dGU6dmFsdWU6XSk6IERpdHRvLgorCiAyMDE2LTEwLTMwICBZ
dXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtET01dIElu
dHJvZHVjZSBXZWJDb3JlOjpqc0R5bmFtaWNEb3duY2FzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKaW5k
ZXggMzYxNDhmMjQ5OTEwMmRlYjc4NTU5MzNjOTE4N2M3YTUyMjdmYzY0Ny4uYzE0YzE5Nzk4MjIz
NGMzMTVkZDNjYWM4N2ZmNmI0MTRjZWNiMmEwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCkBAIC0z
NDIsNyArMzQyLDcgQEAgYm9vbCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnB1dERlbGVnYXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU4KICAgICBhdXRvIHNldFByb3Bl
cnR5SW50ZXJuYWxSZXN1bHQgPSB3cmFwcGVkKCkuc2V0UHJvcGVydHlJbnRlcm5hbChwcm9wZXJ0
eUluZm8ucHJvcGVydHlJRCwgcHJvcGVydHlWYWx1ZSwgaW1wb3J0YW50KTsKICAgICBpZiAoc2V0
UHJvcGVydHlJbnRlcm5hbFJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oKnN0YXRlLCBzZXRQcm9wZXJ0eUludGVybmFsUmVzdWx0LnJlbGVhc2VFeGNl
cHRpb24oKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHB1dFJlc3VsdCA9IHNldFByb3BlcnR5SW50ZXJuYWxSZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAKaW5kZXggMmVhOTI3YTViYTU2NzAy
OWI1NmQ1NmM5YzA5MjVhZGZiMzBlZGRlOC4uNzgzZmRkM2Q4OTY5YWU3ODRhMzU1MGMxYTA5NTEy
ZjUyZmNlOTMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01T
dHJpbmdNYXBDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
U3RyaW5nTWFwQ3VzdG9tLmNwcApAQCAtMzcsNTEgKzM3LDQ1IEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBKU0RPTVN0cmluZ01hcDo6Z2V0T3du
UHJvcGVydHlTbG90RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTRE9NU3RyaW5nTWFwOjpnZXRPd25Q
cm9wZXJ0eVNsb3REZWxlZ2F0ZShFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5
bWJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCBuYW1lSXNWYWxpZDsKICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGl0ZW0gPSB3cmFwcGVkKCkuaXRlbShwcm9wZXJ0eU5hbWVU
b1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBuYW1lSXNWYWxpZCk7CiAgICAgaWYgKG5hbWVJc1ZhbGlk
KSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgMCwgdG9KUzxJRExET01TdHJpbmc+KCpl
eGVjLCBpdGVtKSk7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgMCwgdG9KUzxJRExET01T
dHJpbmc+KCpzdGF0ZSwgaXRlbSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEpTRE9NU3RyaW5nTWFwOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0RPTVN0cmluZ01h
cDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRl
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
CiB7Ci0gICAgSlNET01TdHJpbmdNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01TdHJpbmdN
YXAqPihvYmplY3QpOwotICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwotICAgIHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5nZXROYW1lcyhuYW1lcyk7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IG5hbWVzLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIG5hbWVzW2ldKSk7
Ci0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOworICAgIGZvciAoYXV0byYgbmFtZSA6IGpzQ2FzdDxKU0RPTVN0cmlu
Z01hcCo+KG9iamVjdCktPndyYXBwZWQoKS5uYW1lcygpKQorICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBuYW1lKSk7CisgICAgQmFzZTo6Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0K
IAotYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIEpTRE9NU3RyaW5n
TWFwOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKICAg
ICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazsK
ICNlbmRpZgogCi0gICAgSlNET01TdHJpbmdNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01T
dHJpbmdNYXAqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpCi0gICAg
ICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZGVsZXRlSXRlbShwcm9w
ZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KGNlbGwsIHN0YXRlLCBwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBqc0Nh
c3Q8SlNET01TdHJpbmdNYXAqPihjZWxsKS0+d3JhcHBlZCgpLmRlbGV0ZUl0ZW0ocHJvcGVydHlO
YW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CiB9CiAKLWJvb2wgSlNET01TdHJpbmdNYXA6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaW5kZXgpCitib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCkKIHsKLSAgICByZXR1
cm4gZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRl
eCkpOworICAgIHJldHVybiBkZWxldGVQcm9wZXJ0eShjZWxsLCBzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbShzdGF0ZSwgaW5kZXgpKTsKIH0KIAotYm9vbCBKU0RPTVN0cmluZ01hcDo6cHV0RGVsZWdh
dGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmLCBib29sJiBwdXRSZXN1bHQpCitib29sIEpTRE9NU3RyaW5n
TWFwOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmLCBib29sJiBwdXRSZXN1bHQpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAocHJvcGVy
dHlOYW1lLmlzU3ltYm9sKCkpCkBAIC05MSwxNCArODUsMTcgQEAgYm9vbCBKU0RPTVN0cmluZ01h
cDo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1YKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rp
b25TdGFjazsKICNlbmRpZgogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdHJ1ZSk7CiAKLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICB3cmFwcGVkKCkuc2V0SXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhw
cm9wZXJ0eU5hbWUpLCBzdHJpbmdWYWx1ZSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7Ci0gICAgcHV0UmVzdWx0ID0gIWVjOwotICAgIHJldHVybiAhZWM7CisgICAgYXV0byBy
ZXN1bHQgPSB3cmFwcGVkKCkuc2V0SXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5h
bWUpLCBXVEZNb3ZlKHN0cmluZ1ZhbHVlKSk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCBzY29wZSwgcmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1
dFJlc3VsdCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3Bw
CmluZGV4IDgyZTNjMjgwNGZjMWFkODVmMWU2ZDBkYzRhNWQ4YzgwNmMyODhlY2QuLmJkZmIwNmIz
M2IxNzllYTA5ZmIwODlkZWE3ODU1M2FlNzQ2MDM0ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIGJvb2wg
SlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlCiAgICAgLy8gT25seSBwZXJmb3JtIHRoZSBjdXN0b20gcHV0IGlm
IHRoZSBvYmplY3QgZG9lc24ndCBoYXZlIGEgbmF0aXZlIHByb3BlcnR5IGJ5IHRoaXMgbmFtZS4K
ICAgICAvLyBTaW5jZSBoYXNQcm9wZXJ0eSgpIHdvdWxkIGVuZCB1cCBjYWxsaW5nIGNhbkdldEl0
ZW1zRm9yTmFtZSgpIGFuZCBiZSBmb29sZWQsIHdlIG5lZWQgdG8gY2hlY2sKICAgICAvLyB0aGUg
bmF0aXZlIHByb3BlcnR5IHNsb3RzIG1hbnVhbGx5LgotICAgIFByb3BlcnR5U2xvdCBzbG90KHRo
aXMsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7Cisg
ICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6R2V0T3duUHJvcGVydHkgfTsKIAogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpcy0+
Z2V0UHJvdG90eXBlRGlyZWN0KCk7CiAgICAgaWYgKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFz
T2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBz
bG90KSkKQEAgLTEyMCwxOSArMTIwLDE2IEBAIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShF
eGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlCiAgICAg
aWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIC8vIFRo
ZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgcHV0RGVsZWdhdGUoKSBzaG91bGQgaGFu
ZGxlIHRoZSBwdXQgb3BlcmF0aW9uICh3aGljaAotICAgICAgICAvLyBpZiB0cnVlLCB0ZWxscyB0
aGUgY2FsbGVyIG5vdCB0byBleGVjdXRlIHRoZSBnZW5lcmljIHB1dCkuIEl0IGRvZXMgbm90IGlu
ZGljYXRlIHdoZXRoZXIKLSAgICAgICAgLy8gcHV0RGVsZWdhdGUoKSBkaWQgc3VjY2Vzc2Z1bGx5
IGNvbXBsZXRlIHRoZSBvcGVyYXRpb24gb3Igbm90ICh3aGljaCBpdCBkaWRuJ3QgaW4gdGhpcwot
ICAgICAgICAvLyBjYXNlIGR1ZSB0byB0aGUgZXhjZXB0aW9uKS4KLSAgICAgICAgcHV0UmVzdWx0
ID0gZmFsc2U7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3Rh
dGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHRydWUpOworCisgICAgYXV0byBz
ZXRJdGVtUmVzdWx0ID0gd3JhcHBlZCgpLnNldEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJv
cGVydHlOYW1lKSwgc3RyaW5nVmFsdWUpOworICAgIGlmIChzZXRJdGVtUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHNjb3BlLCBzZXRJ
dGVtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIGF1dG8gc2V0SXRlbVJlc3VsdCA9IHdyYXBwZWQoKS5zZXRJdGVtKHByb3BlcnR5
TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIHN0cmluZ1ZhbHVlKTsKLSAgICBwdXRSZXN1bHQg
PSAhc2V0SXRlbVJlc3VsdC5oYXNFeGNlcHRpb24oKTsKLSAgICBwcm9wYWdhdGVFeGNlcHRpb24o
KnN0YXRlLCBzY29wZSwgV1RGTW92ZShzZXRJdGVtUmVzdWx0KSk7CisgICAgcHV0UmVzdWx0ID0g
dHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRE
T01TdHJpbmdNYXAuY3BwCmluZGV4IGRmMzFkOTAwNjUyOTI4NjYwZjdmZmI3ZGI1MWQ0M2Q4ZjI1
MzQyMGQuLjUzZjUyMGVmYTUzOTRjYzZkODAzYzM5Yjg1YWY0ZTdjM2MzMWY4YjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAK
ICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNTIsMTgg
KzE1MSwyMSBAQCB2b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OmRlcmVmKCkKICAgICBtX2VsZW1l
bnQuZGVyZWYoKTsKIH0KIAotdm9pZCBEYXRhc2V0RE9NU3RyaW5nTWFwOjpnZXROYW1lcyhWZWN0
b3I8U3RyaW5nPiYgbmFtZXMpCitWZWN0b3I8U3RyaW5nPiBEYXRhc2V0RE9NU3RyaW5nTWFwOjpu
YW1lcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygpKQotICAg
ICAgICByZXR1cm47CisgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CiAKLSAgICBmb3IgKGNvbnN0
IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogbV9lbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7
Ci0gICAgICAgIGlmIChpc1ZhbGlkQXR0cmlidXRlTmFtZShhdHRyaWJ1dGUubG9jYWxOYW1lKCkp
KQotICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGNvbnZlcnRBdHRyaWJ1dGVOYW1lVG9Qcm9wZXJ0
eU5hbWUoYXR0cmlidXRlLmxvY2FsTmFtZSgpKSk7CisgICAgaWYgKG1fZWxlbWVudC5oYXNBdHRy
aWJ1dGVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBtX2VsZW1lbnQuYXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkQXR0cmlidXRlTmFt
ZShhdHRyaWJ1dGUubG9jYWxOYW1lKCkpKQorICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChj
b252ZXJ0QXR0cmlidXRlTmFtZVRvUHJvcGVydHlOYW1lKGF0dHJpYnV0ZS5sb2NhbE5hbWUoKSkp
OworICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIG5hbWVzOwogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIERhdGFzZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIGJvb2wmIGlzVmFsaWQpCitjb25zdCBBdG9taWNTdHJpbmcmIERhdGFzZXRET01TdHJp
bmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wmIGlzVmFsaWQpIGNv
bnN0CiB7CiAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgIGlmIChtX2VsZW1lbnQuaGFzQXR0cmli
dXRlcygpKSB7CkBAIC0xOTEsMTQgKzE5MywxMSBAQCBjb25zdCBBdG9taWNTdHJpbmcmIERhdGFz
ZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wmCiAg
ICAgcmV0dXJuIG51bGxBdG9tOwogfQogCi12b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OnNldEl0
ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+IERhdGFzZXRET01TdHJpbmdNYXA6OnNldEl0ZW0oY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICghaXNWYWxp
ZFByb3BlcnR5TmFtZShuYW1lKSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2VsZW1lbnQuc2V0QXR0cmlidXRlKGNvbnZlcnRQcm9w
ZXJ0eU5hbWVUb0F0dHJpYnV0ZU5hbWUobmFtZSksIHZhbHVlLCBlYyk7CisgICAgaWYgKCFpc1Zh
bGlkUHJvcGVydHlOYW1lKG5hbWUpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFY
X0VSUiB9OworICAgIHJldHVybiBtX2VsZW1lbnQuc2V0QXR0cmlidXRlKGNvbnZlcnRQcm9wZXJ0
eU5hbWVUb0F0dHJpYnV0ZU5hbWUobmFtZSksIHZhbHVlKTsKIH0KIAogYm9vbCBEYXRhc2V0RE9N
U3RyaW5nTWFwOjpkZWxldGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRGF0YXNldERPTVN0cmluZ01hcC5oCmluZGV4IGYxOWEwNTAyZWMxYzdlY2Q5YTEzYzU0Nzg4
ZWVmM2VjMzM3NWFmMjEuLjFhOWJjNDUyMzE1MmFjZDJmZTY2NjIyZTI5NWJhNGJiOWE2YWM1MTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuaApAQCAtMjMsMjEgKzIz
LDE3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRl
ZiBEYXRhc2V0RE9NU3RyaW5nTWFwX2gKLSNkZWZpbmUgRGF0YXNldERPTVN0cmluZ01hcF9oCisj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiU2NyaXB0
V3JhcHBhYmxlLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRWxlbWVudDsKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNz
IERhdGFzZXRET01TdHJpbmdNYXAgZmluYWwgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRhc2V0RE9NU3RyaW5nTWFwKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAg
ZXhwbGljaXQgRGF0YXNldERPTVN0cmluZ01hcChFbGVtZW50JiBlbGVtZW50KQogICAgICAgICA6
IG1fZWxlbWVudChlbGVtZW50KQpAQCAtNDcsOSArNDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZWYoKTsKICAgICB2b2lkIGRlcmVmKCk7CiAKLSAgICB2b2lkIGdldE5hbWVzKFZlY3RvcjxTdHJp
bmc+Jik7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBpdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCYgaXNWYWxpZCk7Ci0gICAgdm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFZlY3RvcjxTdHJpbmc+IG5h
bWVzKCkgY29uc3Q7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpdGVtKGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCYgaXNWYWxpZCkgY29uc3Q7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0SXRl
bShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIGJvb2wgZGVs
ZXRlSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgRWxlbWVudCYgZWxlbWVudCgpIHsg
cmV0dXJuIG1fZWxlbWVudDsgfQpAQCAtNTksNSArNTUsMyBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRGF0YXNldERPTVN0cmluZ01hcF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBiMzlkNmYzYWEzYTRhMTc2NWU0YjFkNzIwNWJiMWYx
M2I5Nzg5Y2Y5Li5hZjM4MjkwYWUzYTU3YzQ0NWI3NjNhMGFlNTdhY2IzMzc5MWRkMWY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTEwMTMsMTAgKzEwMTMsMTUgQEAgUmVmUHRyPE5vZGU+
IERvY3VtZW50OjphZG9wdE5vZGUoTm9kZSYgc291cmNlLCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICBjYXNlIERPQ1VNRU5UX05PREU6CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNhc2UgQVRUUklCVVRFX05PREU6IHsgICAgICAg
ICAgICAgICAgICAgCisgICAgY2FzZSBBVFRSSUJVVEVfTk9ERTogewogICAgICAgICBhdXRvJiBh
dHRyID0gZG93bmNhc3Q8QXR0cj4oc291cmNlKTsKLSAgICAgICAgaWYgKGF0dHIub3duZXJFbGVt
ZW50KCkpCi0gICAgICAgICAgICBhdHRyLm93bmVyRWxlbWVudCgpLT5yZW1vdmVBdHRyaWJ1dGVO
b2RlKGF0dHIsIGVjKTsKKyAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBhdHRyLm93bmVyRWxl
bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGVsZW1lbnQtPnJlbW92ZUF0dHJp
YnV0ZU5vZGUoYXR0cik7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
CisgICAgICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGZhbGwgdGhyb3VnaCBoZXJlIGluc3RlYWQg
b2YgcmV0dXJuaW5nIGVhcmx5PworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0gICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTEwMzIsMTAgKzEwMzcsMTAgQEAg
UmVmUHRyPE5vZGU+IERvY3VtZW50OjphZG9wdE5vZGUoTm9kZSYgc291cmNlLCBFeGNlcHRpb25D
b2RlJiBlYykKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBpZiAoc291cmNlLnBhcmVudE5vZGUoKSkgewotICAgICAgICAg
ICAgc291cmNlLnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQoc291cmNlLCBlYyk7Ci0gICAgICAg
ICAgICBpZiAoZWMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1
dG8gcmVzdWx0ID0gc291cmNlLnJlbW92ZSgpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgICBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29k
ZSgpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAppbmRleCBiMWIxZWVmMWU0NGE4ODVjY2VhNzZhN2QxN2I4NjM3MGYx
YjhlYmNjLi4zYzdjOGQxNWI0ZDEzZDUxOGNiMzhkZmI5Y2ViNDE1MmNlNjZlNzZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCkBAIC0xMjE3LDE5ICsxMjE3LDE4IEBAIGNvbnN0IEF0b21pY1N0cmlu
ZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvCiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBs
b2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpOwogfQogCi12b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lkPiBFbGVtZW50OjpzZXRBdHRy
aWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUpCiB7Ci0gICAgaWYgKCFEb2N1bWVudDo6aXNWYWxpZE5hbWUobG9jYWxOYW1lKSkgewot
ICAgICAgICBlYyA9IElOVkFMSURfQ0hBUkFDVEVSX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoIURvY3VtZW50Ojppc1ZhbGlkTmFtZShsb2NhbE5hbWUpKQorICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9DSEFSQUNURVJfRVJSIH07CiAKICAgICBzeW5jaHJv
bml6ZUF0dHJpYnV0ZShsb2NhbE5hbWUpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2FzZUFk
anVzdGVkTG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSgqdGhpcykgPyBsb2Nh
bE5hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IGxvY2FsTmFtZTsKLQorICAgIGF1dG8g
Y2FzZUFkanVzdGVkTG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSgqdGhpcykg
PyBsb2NhbE5hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IGxvY2FsTmFtZTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IGVsZW1lbnREYXRhKCkgPyBlbGVtZW50RGF0YSgpLT5maW5kQXR0cmli
dXRlSW5kZXhCeU5hbWUoY2FzZUFkanVzdGVkTG9jYWxOYW1lLCBmYWxzZSkgOiBFbGVtZW50RGF0
YTo6YXR0cmlidXRlTm90Rm91bmQ7Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUgPSBp
bmRleCAhPSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQgPyBhdHRyaWJ1dGVBdChpbmRl
eCkubmFtZSgpIDogUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgY2FzZUFkanVzdGVkTG9jYWxOYW1l
LCBudWxsQXRvbSk7Ci0gICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoaW5kZXgsIHFOYW1lLCB2YWx1
ZSwgTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOworICAgIGF1dG8gbmFtZSA9
IGluZGV4ICE9IEVsZW1lbnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCA/IGF0dHJpYnV0ZUF0KGlu
ZGV4KS5uYW1lKCkgOiBRdWFsaWZpZWROYW1lIHsgbnVsbEF0b20sIGNhc2VBZGp1c3RlZExvY2Fs
TmFtZSwgbnVsbEF0b20gfTsKKyAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChpbmRleCwgbmFtZSwg
dmFsdWUsIE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC0xNzU2LDEyICsxNzU1LDEx
IEBAIFNoYWRvd1Jvb3QqIEVsZW1lbnQ6OnNoYWRvd1Jvb3QoKSBjb25zdAogICAgIHJldHVybiBo
YXNSYXJlRGF0YSgpID8gZWxlbWVudFJhcmVEYXRhKCktPnNoYWRvd1Jvb3QoKSA6IG51bGxwdHI7
CiB9CiAKLQogdm9pZCBFbGVtZW50OjphZGRTaGFkb3dSb290KFJlZjxTaGFkb3dSb290PiYmIG5l
d1NoYWRvd1Jvb3QpCiB7CiAgICAgQVNTRVJUKCFzaGFkb3dSb290KCkpOwogCi0gICAgU2hhZG93
Um9vdCYgc2hhZG93Um9vdCA9IG5ld1NoYWRvd1Jvb3QuZ2V0KCk7CisgICAgU2hhZG93Um9vdCYg
c2hhZG93Um9vdCA9IG5ld1NoYWRvd1Jvb3Q7CiAgICAgZW5zdXJlRWxlbWVudFJhcmVEYXRhKCku
c2V0U2hhZG93Um9vdChXVEZNb3ZlKG5ld1NoYWRvd1Jvb3QpKTsKIAogICAgIHNoYWRvd1Jvb3Qu
c2V0SG9zdCh0aGlzKTsKQEAgLTE3ODUsNiArMTc4Myw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3Zl
U2hhZG93Um9vdCgpCiAgICAgUmVmUHRyPFNoYWRvd1Jvb3Q+IG9sZFJvb3QgPSBzaGFkb3dSb290
KCk7CiAgICAgaWYgKCFvbGRSb290KQogICAgICAgICByZXR1cm47CisKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxQb3BTaGFkb3dSb290KCp0aGlzLCAqb2xkUm9vdCk7CiAgICAg
ZG9jdW1lbnQoKS5yZW1vdmVGb2N1c2VkTm9kZU9mU3VidHJlZShvbGRSb290LmdldCgpKTsKIApA
QCAtMTc5OCwxNiArMTc5Nyw2IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlU2hhZG93Um9vdCgpCiAg
ICAgbm90aWZ5Q2hpbGROb2RlUmVtb3ZlZCgqdGhpcywgKm9sZFJvb3QpOwogfQogCi1TaGFkb3dS
b290KiBFbGVtZW50OjpjcmVhdGVTaGFkb3dSb290KEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGlmIChhbHdheXNDcmVhdGVVc2VyQWdlbnRTaGFkb3dSb290KCkpCi0gICAgICAgIHJldHVybiAm
ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotCi0gICAgZWMgPSBISUVSQVJDSFlfUkVRVUVT
VF9FUlI7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLQogc3RhdGljIGJvb2wgY2FuQXR0YWNo
QXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21pY1N0cmluZz4+IHRhZ05hbWVzID0gW10gewpAQCAt
MTg0MywyMyArMTgzMiwxNCBAQCBzdGF0aWMgYm9vbCBjYW5BdHRhY2hBdXRob3JTaGFkb3dSb290
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJuIHRhZ05hbWVzLmdldCgpLmNvbnRh
aW5zKGxvY2FsTmFtZSkgfHwgRG9jdW1lbnQ6OnZhbGlkYXRlQ3VzdG9tRWxlbWVudE5hbWUobG9j
YWxOYW1lKSA9PSBDdXN0b21FbGVtZW50TmFtZVZhbGlkYXRpb25TdGF0dXM6OlZhbGlkOwogfQog
Ci1SZWZQdHI8U2hhZG93Um9vdD4gRWxlbWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jv
b3RJbml0JiBpbml0LCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPFJlZjxTaGFkb3dS
b290Pj4gRWxlbWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0JiBpbml0KQog
ewotICAgIGlmICghY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdCgqdGhpcykpIHsKLSAgICAgICAg
ZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgaWYgKHNoYWRvd1Jvb3QoKSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoaW5pdC5tb2RlID09
IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQorICAgIGlmICghY2FuQXR0YWNoQXV0aG9y
U2hhZG93Um9vdCgqdGhpcykpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9S
VEVEX0VSUiB9OworICAgIGlmIChzaGFkb3dSb290KCkpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgIGlmIChpbml0Lm1vZGUgPT0gU2hhZG93Um9v
dE1vZGU6OlVzZXJBZ2VudCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9
OwogICAgIGF1dG8gc2hhZG93ID0gU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIGluaXQu
bW9kZSk7CiAgICAgYWRkU2hhZG93Um9vdChzaGFkb3cuY29weVJlZigpKTsKICAgICByZXR1cm4g
V1RGTW92ZShzaGFkb3cpOwpAQCAtMTg2NywzOCArMTg0NywzMiBAQCBSZWZQdHI8U2hhZG93Um9v
dD4gRWxlbWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0JiBpbml0LCBFeGNl
cHRpb25DbwogCiBTaGFkb3dSb290KiBFbGVtZW50OjpzaGFkb3dSb290Rm9yQmluZGluZ3MoSlND
OjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFk
b3dSb290KCk7Ci0gICAgaWYgKCFyb290KQorICAgIGF1dG8qIHNoYWRvdyA9IHNoYWRvd1Jvb3Qo
KTsKKyAgICBpZiAoIXNoYWRvdykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAo
cm9vdC0+bW9kZSgpICE9IFNoYWRvd1Jvb3RNb2RlOjpPcGVuKSB7Ci0gICAgICAgIGlmICghSlND
Ojpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LT53b3JsZCgpLnNoYWRvd1Jvb3RJc0Fsd2F5c09wZW4oKSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gcm9vdDsKKyAgICBpZiAoc2hhZG93LT5tb2RlKCkg
PT0gU2hhZG93Um9vdE1vZGU6Ok9wZW4pCisgICAgICAgIHJldHVybiBzaGFkb3c7CisgICAgaWYg
KEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+d29ybGQoKS5zaGFkb3dSb290SXNBbHdheXNPcGVuKCkpCisgICAgICAgIHJldHVybiBz
aGFkb3c7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLQogU2hhZG93Um9vdCogRWxlbWVudDo6
dXNlckFnZW50U2hhZG93Um9vdCgpIGNvbnN0CiB7Ci0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRv
d1Jvb3QgPSB0aGlzLT5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgQVNTRVJUKHNoYWRvd1Jvb3Qt
Pm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KTsKLSAgICAgICAgcmV0dXJuIHNo
YWRvd1Jvb3Q7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOworICAgIEFTU0VSVCghc2hhZG93
Um9vdCgpIHx8IHNoYWRvd1Jvb3QoKS0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdl
bnQpOworICAgIHJldHVybiBzaGFkb3dSb290KCk7CiB9CiAKIFNoYWRvd1Jvb3QmIEVsZW1lbnQ6
OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKQogewotICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jv
b3QgPSB1c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgaWYgKCFzaGFkb3dSb290KSB7Ci0gICAg
ICAgIGFkZFNoYWRvd1Jvb3QoU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIFNoYWRvd1Jv
b3RNb2RlOjpVc2VyQWdlbnQpKTsKLSAgICAgICAgc2hhZG93Um9vdCA9IHVzZXJBZ2VudFNoYWRv
d1Jvb3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuICpzaGFkb3dSb290OworICAgIGlmIChhdXRvKiBz
aGFkb3cgPSB1c2VyQWdlbnRTaGFkb3dSb290KCkpCisgICAgICAgIHJldHVybiAqc2hhZG93Owor
ICAgIGF1dG8gbmV3U2hhZG93ID0gU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIFNoYWRv
d1Jvb3RNb2RlOjpVc2VyQWdlbnQpOworICAgIFNoYWRvd1Jvb3QmIHNoYWRvdyA9IG5ld1NoYWRv
dzsKKyAgICBhZGRTaGFkb3dSb290KFdURk1vdmUobmV3U2hhZG93KSk7CisgICAgcmV0dXJuIHNo
YWRvdzsKIH0KIAotICAgIAogI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCiAKIHZvaWQgRWxl
bWVudDo6c2V0SXNEZWZpbmVkQ3VzdG9tRWxlbWVudChKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2Um
IGVsZW1lbnRJbnRlcmZhY2UpCkBAIC0xOTUzLDcgKzE5MjcsNiBAQCBDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZSogRWxlbWVudDo6cmVhY3Rpb25RdWV1ZSgpIGNvbnN0CiAKICNlbmRpZgogCi0K
IGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewog
ICAgIHJldHVybiBwc2V1ZG8oKTsKQEAgLTIxNTksMjQgKzIxMzIsMjQgQEAgY29uc3QgVmVjdG9y
PFJlZlB0cjxBdHRyPj4mIEVsZW1lbnQ6OmF0dHJOb2RlTGlzdCgpCiAgICAgcmV0dXJuICphdHRy
Tm9kZUxpc3RGb3JFbGVtZW50KCp0aGlzKTsKIH0KIAotUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OnNl
dEF0dHJpYnV0ZU5vZGUoQXR0ciYgYXR0ck5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0
aW9uT3I8UmVmUHRyPEF0dHI+PiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKEF0dHImIGF0dHJO
b2RlKQogewogICAgIFJlZlB0cjxBdHRyPiBvbGRBdHRyTm9kZSA9IGF0dHJJZkV4aXN0cyhhdHRy
Tm9kZS5xdWFsaWZpZWROYW1lKCkubG9jYWxOYW1lKCksIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNh
c2UoKnRoaXMpKTsKICAgICBpZiAob2xkQXR0ck5vZGUuZ2V0KCkgPT0gJmF0dHJOb2RlKQotICAg
ICAgICByZXR1cm4gJmF0dHJOb2RlOyAvLyBUaGlzIEF0dHIgaXMgYWxyZWFkeSBhdHRhY2hlZCB0
byB0aGUgZWxlbWVudC4KKyAgICAgICAgcmV0dXJuIFdURk1vdmUob2xkQXR0ck5vZGUpOwogCiAg
ICAgLy8gSU5VU0VfQVRUUklCVVRFX0VSUjogUmFpc2VkIGlmIG5vZGUgaXMgYW4gQXR0ciB0aGF0
IGlzIGFscmVhZHkgYW4gYXR0cmlidXRlIG9mIGFub3RoZXIgRWxlbWVudCBvYmplY3QuCiAgICAg
Ly8gVGhlIERPTSB1c2VyIG11c3QgZXhwbGljaXRseSBjbG9uZSBBdHRyIG5vZGVzIHRvIHJlLXVz
ZSB0aGVtIGluIG90aGVyIGVsZW1lbnRzLgotICAgIGlmIChhdHRyTm9kZS5vd25lckVsZW1lbnQo
KSAmJiBhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVjID0gSU5V
U0VfQVRUUklCVVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlm
IChhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAmJiBhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAhPSB0
aGlzKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5VU0VfQVRUUklCVVRFX0VSUiB9Owog
CiAgICAgc3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7Ci0gICAgVW5pcXVlRWxlbWVudERhdGEm
IGVsZW1lbnREYXRhID0gZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKTsKKyAgICBhdXRvJiBlbGVt
ZW50RGF0YSA9IGVuc3VyZVVuaXF1ZUVsZW1lbnREYXRhKCk7CiAKLSAgICB1bnNpZ25lZCBleGlz
dGluZ0F0dHJpYnV0ZUluZGV4ID0gZWxlbWVudERhdGEuZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1l
KGF0dHJOb2RlLnF1YWxpZmllZE5hbWUoKS5sb2NhbE5hbWUoKSwgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSgqdGhpcykpOwotICAgIGlmIChleGlzdGluZ0F0dHJpYnV0ZUluZGV4ICE9IEVsZW1l
bnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCkgeworICAgIGF1dG8gZXhpc3RpbmdBdHRyaWJ1dGVJ
bmRleCA9IGVsZW1lbnREYXRhLmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFs
aWZpZWROYW1lKCkubG9jYWxOYW1lKCksIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UoKnRoaXMp
KTsKKyAgICBpZiAoZXhpc3RpbmdBdHRyaWJ1dGVJbmRleCA9PSBFbGVtZW50RGF0YTo6YXR0cmli
dXRlTm90Rm91bmQpCisgICAgICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGVsZW1lbnREYXRhLmZp
bmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCkpLCBhdHRyTm9k
ZS5xdWFsaWZpZWROYW1lKCksIGF0dHJOb2RlLnZhbHVlKCksIE5vdEluU3luY2hyb25pemF0aW9u
T2ZMYXp5QXR0cmlidXRlKTsKKyAgICBlbHNlIHsKICAgICAgICAgY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUgPSBhdHRyaWJ1dGVBdChleGlzdGluZ0F0dHJpYnV0ZUluZGV4KTsKICAgICAgICAg
aWYgKG9sZEF0dHJOb2RlKQogICAgICAgICAgICAgZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVudFdp
dGhWYWx1ZShvbGRBdHRyTm9kZS5nZXQoKSwgYXR0cmlidXRlLnZhbHVlKCkpOwpAQCAtMjE4Nywz
OCArMjE2MCwzMiBAQCBSZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZShBdHRy
JiBhdHRyTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgICAgICBzZXRBdHRyaWJ1dGVJ
bnRlcm5hbChleGlzdGluZ0F0dHJpYnV0ZUluZGV4LCBhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCks
IGF0dHJOb2RlLnZhbHVlKCksIE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChleGlz
dGluZ0F0dHJpYnV0ZUluZGV4LCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBleGlzdGluZ0F0dHJpYnV0ZUluZGV4Rm9yRnVsbFF1YWxp
ZmllZE5hbWUgPSBlbGVtZW50RGF0YS5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5vZGUu
cXVhbGlmaWVkTmFtZSgpKTsKLSAgICAgICAgICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGV4aXN0
aW5nQXR0cmlidXRlSW5kZXhGb3JGdWxsUXVhbGlmaWVkTmFtZSwgYXR0ck5vZGUucXVhbGlmaWVk
TmFtZSgpLCBhdHRyTm9kZS52YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJp
YnV0ZSk7CisgICAgICAgICAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChlbGVtZW50RGF0YS5maW5k
QXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpKSwgYXR0ck5vZGUu
cXVhbGlmaWVkTmFtZSgpLCBhdHRyTm9kZS52YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlvbk9m
TGF6eUF0dHJpYnV0ZSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICB1bnNpZ25l
ZCBleGlzdGluZ0F0dHJpYnV0ZUluZGV4Rm9yRnVsbFF1YWxpZmllZE5hbWUgPSBlbGVtZW50RGF0
YS5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoYXR0ck5vZGUucXVhbGlmaWVkTmFtZSgpKTsKLSAg
ICAgICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoZXhpc3RpbmdBdHRyaWJ1dGVJbmRleEZvckZ1bGxR
dWFsaWZpZWROYW1lLCBhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCksIGF0dHJOb2RlLnZhbHVlKCks
IE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKICAgICB9CiAgICAgaWYgKGF0
dHJOb2RlLm93bmVyRWxlbWVudCgpICE9IHRoaXMpIHsKICAgICAgICAgYXR0ck5vZGUuYXR0YWNo
VG9FbGVtZW50KHRoaXMpOwogICAgICAgICB0cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKCZhdHRy
Tm9kZSk7CiAgICAgICAgIGVuc3VyZUF0dHJOb2RlTGlzdEZvckVsZW1lbnQoKnRoaXMpLmFwcGVu
ZCgmYXR0ck5vZGUpOwogICAgIH0KLSAgICByZXR1cm4gb2xkQXR0ck5vZGU7CisgICAgcmV0dXJu
IFdURk1vdmUob2xkQXR0ck5vZGUpOwogfQogCi1SZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0
cmlidXRlTm9kZU5TKEF0dHImIGF0dHJOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlv
bk9yPFJlZlB0cjxBdHRyPj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZU5TKEF0dHImIGF0dHJO
b2RlKQogewogICAgIFJlZlB0cjxBdHRyPiBvbGRBdHRyTm9kZSA9IGF0dHJJZkV4aXN0cyhhdHRy
Tm9kZS5xdWFsaWZpZWROYW1lKCkpOwogICAgIGlmIChvbGRBdHRyTm9kZS5nZXQoKSA9PSAmYXR0
ck5vZGUpCi0gICAgICAgIHJldHVybiAmYXR0ck5vZGU7IC8vIFRoaXMgQXR0ciBpcyBhbHJlYWR5
IGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50LgorICAgICAgICByZXR1cm4gV1RGTW92ZShvbGRBdHRy
Tm9kZSk7CiAKICAgICAvLyBJTlVTRV9BVFRSSUJVVEVfRVJSOiBSYWlzZWQgaWYgbm9kZSBpcyBh
biBBdHRyIHRoYXQgaXMgYWxyZWFkeSBhbiBhdHRyaWJ1dGUgb2YgYW5vdGhlciBFbGVtZW50IG9i
amVjdC4KICAgICAvLyBUaGUgRE9NIHVzZXIgbXVzdCBleHBsaWNpdGx5IGNsb25lIEF0dHIgbm9k
ZXMgdG8gcmUtdXNlIHRoZW0gaW4gb3RoZXIgZWxlbWVudHMuCi0gICAgaWYgKGF0dHJOb2RlLm93
bmVyRWxlbWVudCgpICYmIGF0dHJOb2RlLm93bmVyRWxlbWVudCgpICE9IHRoaXMpIHsKLSAgICAg
ICAgZWMgPSBJTlVTRV9BVFRSSUJVVEVfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9CisgICAgaWYgKGF0dHJOb2RlLm93bmVyRWxlbWVudCgpICYmIGF0dHJOb2RlLm93bmVyRWxl
bWVudCgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlVTRV9BVFRSSUJV
VEVfRVJSIH07CiAKICAgICBzeW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKLSAgICBVbmlxdWVF
bGVtZW50RGF0YSYgZWxlbWVudERhdGEgPSBlbnN1cmVVbmlxdWVFbGVtZW50RGF0YSgpOworICAg
IGF1dG8mIGVsZW1lbnREYXRhID0gZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKTsKIAotICAgIHVu
c2lnbmVkIGluZGV4ID0gZWxlbWVudERhdGEuZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKGF0dHJO
b2RlLnF1YWxpZmllZE5hbWUoKSk7CisgICAgYXV0byBpbmRleCA9IGVsZW1lbnREYXRhLmZpbmRB
dHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCkpOwogICAgIGlmIChp
bmRleCAhPSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQpIHsKICAgICAgICAgaWYgKG9s
ZEF0dHJOb2RlKQogICAgICAgICAgICAgZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVudFdpdGhWYWx1
ZShvbGRBdHRyTm9kZS5nZXQoKSwgZWxlbWVudERhdGEuYXR0cmlidXRlQXQoaW5kZXgpLnZhbHVl
KCkpOwpAQCAtMjIzMiw2MiArMjE5OSw1NiBAQCBSZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0
cmlidXRlTm9kZU5TKEF0dHImIGF0dHJOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB0cmVl
U2NvcGUoKS5hZG9wdElmTmVlZGVkKCZhdHRyTm9kZSk7CiAgICAgZW5zdXJlQXR0ck5vZGVMaXN0
Rm9yRWxlbWVudCgqdGhpcykuYXBwZW5kKCZhdHRyTm9kZSk7CiAKLSAgICByZXR1cm4gb2xkQXR0
ck5vZGU7CisgICAgcmV0dXJuIFdURk1vdmUob2xkQXR0ck5vZGUpOwogfQogCi1SZWZQdHI8QXR0
cj4gRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTm9kZShBdHRyJiBhdHRyLCBFeGNlcHRpb25Db2Rl
JiBlYykKK0V4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTm9k
ZShBdHRyJiBhdHRyKQogewotICAgIGlmIChhdHRyLm93bmVyRWxlbWVudCgpICE9IHRoaXMpIHsK
LSAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9CisgICAgaWYgKGF0dHIub3duZXJFbGVtZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKIAogICAgIEFTU0VSVCgmZG9jdW1lbnQoKSA9
PSAmYXR0ci5kb2N1bWVudCgpKTsKIAogICAgIHN5bmNocm9uaXplQWxsQXR0cmlidXRlcygpOwog
Ci0gICAgaWYgKCFtX2VsZW1lbnREYXRhKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlmICghbV9lbGVtZW50RGF0YSkK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKIAotICAgIHVuc2ln
bmVkIGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPSBtX2VsZW1lbnREYXRhLT5maW5kQXR0cmlidXRl
SW5kZXhCeU5hbWUoYXR0ci5xdWFsaWZpZWROYW1lKCkpOworICAgIGF1dG8gZXhpc3RpbmdBdHRy
aWJ1dGVJbmRleCA9IG1fZWxlbWVudERhdGEtPmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShhdHRy
LnF1YWxpZmllZE5hbWUoKSk7CisgICAgaWYgKGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPT0gRWxl
bWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5kKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tk9UX0ZPVU5EX0VSUiB9OwogCi0gICAgaWYgKGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPT0gRWxl
bWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5kKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VS
UjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIFJlZjxBdHRyPiBvbGRBdHRy
Tm9kZSB7IGF0dHIgfTsKIAotICAgIFJlZlB0cjxBdHRyPiBhdHRyTm9kZSA9ICZhdHRyOwogICAg
IGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFsdWUoJmF0dHIsIG1fZWxlbWVudERhdGEt
PmF0dHJpYnV0ZUF0KGV4aXN0aW5nQXR0cmlidXRlSW5kZXgpLnZhbHVlKCkpOwogICAgIHJlbW92
ZUF0dHJpYnV0ZUludGVybmFsKGV4aXN0aW5nQXR0cmlidXRlSW5kZXgsIE5vdEluU3luY2hyb25p
emF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKLSAgICByZXR1cm4gYXR0ck5vZGU7CisKKyAgICByZXR1
cm4gV1RGTW92ZShvbGRBdHRyTm9kZSk7CiB9CiAKLWJvb2wgRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGVOYW1lKFF1YWxpZmllZE5hbWUmIG91dCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CitFeGNlcHRpb25PcjxRdWFsaWZpZWROYW1lPiBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZU5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVh
bGlmaWVkTmFtZSkKIHsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTdHJpbmcgcHJl
Zml4LCBsb2NhbE5hbWU7CiAgICAgaWYgKCFEb2N1bWVudDo6cGFyc2VRdWFsaWZpZWROYW1lKHF1
YWxpZmllZE5hbWUsIHByZWZpeCwgbG9jYWxOYW1lLCBlYykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CiAgICAgQVNTRVJUKCFlYyk7CiAK
LSAgICBRdWFsaWZpZWROYW1lIHFOYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkp
OworICAgIFF1YWxpZmllZE5hbWUgcmVzdWx0IHsgcHJlZml4LCBsb2NhbE5hbWUsIG5hbWVzcGFj
ZVVSSSB9OwogCi0gICAgaWYgKCFEb2N1bWVudDo6aGFzVmFsaWROYW1lc3BhY2VGb3JBdHRyaWJ1
dGVzKHFOYW1lKSkgewotICAgICAgICBlYyA9IE5BTUVTUEFDRV9FUlI7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgaWYgKCFEb2N1bWVudDo6aGFzVmFsaWROYW1lc3BhY2VGb3JB
dHRyaWJ1dGVzKHJlc3VsdCkpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOQU1FU1BBQ0Vf
RVJSIH07CiAKLSAgICBvdXQgPSBxTmFtZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
V1RGTW92ZShyZXN1bHQpOwogfQogCi12b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxpZmll
ZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhj
ZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6c2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBRdWFsaWZpZWROYW1lIHBhcnNlZE5hbWUgPSBh
bnlOYW1lOwotICAgIGlmICghcGFyc2VBdHRyaWJ1dGVOYW1lKHBhcnNlZE5hbWUsIG5hbWVzcGFj
ZVVSSSwgcXVhbGlmaWVkTmFtZSwgZWMpKQotICAgICAgICByZXR1cm47Ci0gICAgc2V0QXR0cmli
dXRlKHBhcnNlZE5hbWUsIHZhbHVlKTsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlQXR0cmlidXRl
TmFtZShuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpOworICAgIGlmIChyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAg
IHNldEF0dHJpYnV0ZShyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCksIHZhbHVlKTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZUludGVybmFsKHVu
c2lnbmVkIGluZGV4LCBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgaW5TeW5jaHJvbml6
YXRpb25PZkxhenlBdHRyaWJ1dGUpCkBAIC0yNTU1LDE3ICsyNTE2LDE0IEBAIGJvb2wgRWxlbWVu
dDo6ZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJlZ2luKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgRWxlbWVudDo6bWVyZ2VXaXRoTmV4dFRleHROb2RlKFRleHQmIG5vZGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6bWVyZ2VXaXRoTmV4dFRleHRO
b2RlKFRleHQmIG5vZGUpCiB7CiAgICAgYXV0byogbmV4dCA9IG5vZGUubmV4dFNpYmxpbmcoKTsK
ICAgICBpZiAoIWlzPFRleHQ+KG5leHQpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgUmVmPFRleHQ+IHRleHROZXh0IHsgZG93bmNhc3Q8VGV4dD4oKm5leHQpIH07
Ci0KICAgICBub2RlLmFwcGVuZERhdGEodGV4dE5leHQtPmRhdGEoKSk7Ci0gICAgYXV0byByZXN1
bHQgPSB0ZXh0TmV4dC0+cmVtb3ZlKCk7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
LSAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKKyAgICByZXR1
cm4gdGV4dE5leHQtPnJlbW92ZSgpOwogfQogCiBTdHJpbmcgRWxlbWVudDo6aW5uZXJIVE1MKCkg
Y29uc3QKQEAgLTI1NzgsMzkgKzI1MzYsNDUgQEAgU3RyaW5nIEVsZW1lbnQ6Om91dGVySFRNTCgp
IGNvbnN0CiAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCgqdGhpcyk7CiB9CiAKLXZvaWQgRWxlbWVu
dDo6c2V0T3V0ZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYgZWMpCitF
eGNlcHRpb25Pcjx2b2lkPiBFbGVtZW50OjpzZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJiBodG1s
KQogewotICAgIEVsZW1lbnQqIHAgPSBwYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYgKCFpczxIVE1M
RWxlbWVudD4ocCkpIHsKLSAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBwYXJlbnQg
PSBkb3duY2FzdDxIVE1MRWxlbWVudD4ocCk7CisgICAgYXV0byogcGFyZW50RWxlbWVudCA9IHRo
aXMtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihwYXJlbnRFbGVt
ZW50KSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUiB9OworCisgICAgUmVmPEhUTUxFbGVtZW50PiBwYXJlbnQgPSBkb3duY2FzdDxIVE1MRWxl
bWVudD4oKnBhcmVudEVsZW1lbnQpOwogICAgIFJlZlB0cjxOb2RlPiBwcmV2ID0gcHJldmlvdXNT
aWJsaW5nKCk7CiAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBuZXh0U2libGluZygpOwogCi0gICAg
YXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoKnBhcmVudCwg
aHRtbCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKLSAgICBpZiAoZnJhZ21lbnQuaGFzRXhjZXB0
aW9uKCkpIHsKLSAgICAgICAgZWMgPSBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAorICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKHBhcmVudCwgaHRtbCwgQWxsb3dTY3JpcHRpbmdD
b250ZW50KTsKKyAgICBpZiAoZnJhZ21lbnQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBwYXJlbnQtPnJlcGxhY2VDaGlsZChmcmFnbWVudC5yZWxlYXNlUmV0dXJuVmFsdWUo
KS5nZXQoKSwgKnRoaXMsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBlYyB9OworCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0ID8gbmV4dC0+cHJldmlv
dXNTaWJsaW5nKCkgOiBudWxscHRyOwotICAgIGlmICghZWMgJiYgaXM8VGV4dD4obm9kZS5nZXQo
KSkpCi0gICAgICAgIG1lcmdlV2l0aE5leHRUZXh0Tm9kZShkb3duY2FzdDxUZXh0Pigqbm9kZSks
IGVjKTsKLSAgICBpZiAoIWVjICYmIGlzPFRleHQ+KHByZXYuZ2V0KCkpKQotICAgICAgICBtZXJn
ZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKnByZXYpLCBlYyk7CisgICAgaWYgKGlz
PFRleHQ+KG5vZGUuZ2V0KCkpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbWVyZ2VXaXRoTmV4
dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpub2RlKSk7CisgICAgICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KTsKKyAgICB9CisgICAgaWYgKGlzPFRleHQ+KHByZXYuZ2V0KCkpKSB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gbWVyZ2VXaXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpwcmV2KSk7Cisg
ICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKIH0KIAogCi12
b2lkIEVsZW1lbnQ6OnNldElubmVySFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0
cmluZyYgaHRtbCkKIHsKICAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGb3JJbm5l
ck91dGVySFRNTCgqdGhpcywgaHRtbCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKLSAgICBpZiAo
ZnJhZ21lbnQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZWMgPSBmcmFnbWVudC5yZWxlYXNl
RXhjZXB0aW9uKCkuY29kZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChmcmFn
bWVudC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2VFeGNl
cHRpb24oKTsKIAogICAgIENvbnRhaW5lck5vZGUqIGNvbnRhaW5lcjsKICAgICBpZiAoIWlzPEhU
TUxUZW1wbGF0ZUVsZW1lbnQ+KCp0aGlzKSkKQEAgLTI2MTgsOSArMjU4Miw3IEBAIHZvaWQgRWxl
bWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgZWxzZQogICAgICAgICBjb250YWluZXIgPSAmZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxl
bWVudD4oKnRoaXMpLmNvbnRlbnQoKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gcmVwbGFjZUNoaWxk
cmVuV2l0aEZyYWdtZW50KCpjb250YWluZXIsIGZyYWdtZW50LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
KTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBlYyA9IGZyYWdtZW50
LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7CisgICAgcmV0dXJuIHJlcGxhY2VDaGlsZHJlbldp
dGhGcmFnbWVudCgqY29udGFpbmVyLCBmcmFnbWVudC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CiB9
CiAKIFN0cmluZyBFbGVtZW50Ojppbm5lclRleHQoKQpAQCAtMjk5MywxOCArMjk1NSwyNCBAQCBi
b29sIEVsZW1lbnQ6Om1hdGNoZXNEZWZhdWx0UHNldWRvQ2xhc3MoKSBjb25zdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBFbGVtZW50OjptYXRjaGVzKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8Ym9vbD4gRWxlbWVudDo6bWF0Y2hl
cyhjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgIFNlbGVjdG9yUXVlcnkqIHNlbGVjdG9y
UXVlcnkgPSBkb2N1bWVudCgpLnNlbGVjdG9yUXVlcnlGb3JTdHJpbmcoc2VsZWN0b3IsIGVjKTsK
LSAgICByZXR1cm4gc2VsZWN0b3JRdWVyeSAmJiBzZWxlY3RvclF1ZXJ5LT5tYXRjaGVzKCp0aGlz
KTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBhdXRvKiBxdWVyeSA9IGRvY3VtZW50
KCkuc2VsZWN0b3JRdWVyeUZvclN0cmluZyhzZWxlY3RvciwgZWMpOworICAgIGlmIChlYykKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgcmV0dXJuIHF1ZXJ5ICYmIHF1ZXJ5
LT5tYXRjaGVzKCp0aGlzKTsKIH0KIAotRWxlbWVudCogRWxlbWVudDo6Y2xvc2VzdChjb25zdCBT
dHJpbmcmIHNlbGVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPEVsZW1lbnQq
PiBFbGVtZW50OjpjbG9zZXN0KGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiB7Ci0gICAgU2VsZWN0
b3JRdWVyeSogc2VsZWN0b3JRdWVyeSA9IGRvY3VtZW50KCkuc2VsZWN0b3JRdWVyeUZvclN0cmlu
ZyhzZWxlY3RvciwgZWMpOwotICAgIGlmIChzZWxlY3RvclF1ZXJ5KQotICAgICAgICByZXR1cm4g
c2VsZWN0b3JRdWVyeS0+Y2xvc2VzdCgqdGhpcyk7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYXV0byogcXVlcnkgPSBkb2N1bWVudCgpLnNlbGVj
dG9yUXVlcnlGb3JTdHJpbmcoc2VsZWN0b3IsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBlYyB9OworICAgIGlmICghcXVlcnkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBxdWVyeS0+Y2xvc2VzdCgqdGhpcyk7CiB9CiAKIGJvb2wgRWxl
bWVudDo6c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpIGNvbnN0CkBAIC0zMDc5LDYgKzMwNDcs
NyBAQCB2b2lkIEVsZW1lbnQ6OnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgdQogfQogCiAjaWYgRU5BQkxFKElORElFX1VJKQor
CiB2b2lkIEVsZW1lbnQ6OnNldFVJQWN0aW9ucyhjb25zdCBBdG9taWNTdHJpbmcmIGFjdGlvbnMp
CiB7CiAgICAgc2V0QXR0cmlidXRlKHVpYWN0aW9uc0F0dHIsIGFjdGlvbnMpOwpAQCAtMzA4OCw2
ICszMDU3LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpVSUFjdGlvbnMoKSBjb25z
dAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodWlhY3Rpb25zQXR0cik7CiB9CisKICNlbmRp
ZgogCiBib29sIEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9kZSYg
Y2hpbGQpIGNvbnN0CkBAIC0zNjgzLDcgKzM2NTMsNyBAQCBib29sIEVsZW1lbnQ6OmllRm9yYmlk
c0luc2VydEhUTUwoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogRWxlbWVu
dDo6aW5zZXJ0QWRqYWNlbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgUmVmPE5vZGU+JiYgbmV3Q2hp
bGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8Tm9kZSo+IEVsZW1lbnQ6Omluc2Vy
dEFkamFjZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIFJlZjxOb2RlPiYmIG5ld0NoaWxkKQogewog
ICAgIC8vIEluIEludGVybmV0IEV4cGxvcmVyIGlmIHRoZSBlbGVtZW50IGhhcyBubyBwYXJlbnQg
YW5kIHdoZXJlIGlzICJiZWZvcmVCZWdpbiIgb3IgImFmdGVyRW5kIiwKICAgICAvLyBhIGRvY3Vt
ZW50IGZyYWdtZW50IGlzIGNyZWF0ZWQgYW5kIHRoZSBlbGVtZW50cyBhcHBlbmRlZCBpbiB0aGUg
Y29ycmVjdCBvcmRlci4gVGhpcyBkb2N1bWVudApAQCAtMzY5Myw3NiArMzY2MywxMDQgQEAgTm9k
ZSogRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgUmVmPE5vZGU+
JiYgbmV3Q2hpbGQsIEV4Y2VwdGkKICAgICAvLyBPcGVyYSBhbHNvIGFwcGVhcnMgdG8gZGlzYWxs
b3cgc3VjaCB1c2FnZS4KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3
aGVyZSwgImJlZm9yZWJlZ2luIikpIHsKLSAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
dGhpcy0+cGFyZW50Tm9kZSgpOwotICAgICAgICByZXR1cm4gKHBhcmVudCAmJiBwYXJlbnQtPmlu
c2VydEJlZm9yZShuZXdDaGlsZCwgdGhpcywgZWMpKSA/IG5ld0NoaWxkLnB0cigpIDogbnVsbHB0
cjsKKyAgICAgICAgYXV0byogcGFyZW50ID0gdGhpcy0+cGFyZW50Tm9kZSgpOworICAgICAgICBp
ZiAoIXBhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gcGFyZW50LT5pbnNlcnRCZWZv
cmUobmV3Q2hpbGQsIHRoaXMsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgICAgIHJldHVybiBzdWNjZXNzID8gbmV3Q2hpbGQu
cHRyKCkgOiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZSh3aGVyZSwgImFmdGVyYmVnaW4iKSkKLSAgICAgICAgcmV0dXJuIGluc2VydEJlZm9y
ZShuZXdDaGlsZCwgZmlyc3RDaGlsZCgpLCBlYykgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYWZ0ZXJiZWdp
biIpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBib29sIHN1Y2Nl
c3MgPSBpbnNlcnRCZWZvcmUobmV3Q2hpbGQsIGZpcnN0Q2hpbGQoKSwgZWMpOworICAgICAgICBp
ZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3MgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7CisgICAgfQogCi0gICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYmVmb3JlZW5kIikpCi0gICAg
ICAgIHJldHVybiBhcHBlbmRDaGlsZChuZXdDaGlsZCwgZWMpID8gbmV3Q2hpbGQucHRyKCkgOiBu
dWxscHRyOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3aGVyZSwgImJl
Zm9yZWVuZCIpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBib29s
IHN1Y2Nlc3MgPSBhcHBlbmRDaGlsZChuZXdDaGlsZCwgZWMpOworICAgICAgICBpZiAoZWMpCisg
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nl
c3MgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7CisgICAgfQogCiAgICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYWZ0ZXJlbmQiKSkgewotICAgICAgICBDb250
YWluZXJOb2RlKiBwYXJlbnQgPSB0aGlzLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIHJldHVybiAo
cGFyZW50ICYmIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBuZXh0U2libGluZygpLCBl
YykpID8gbmV3Q2hpbGQucHRyKCkgOiBudWxscHRyOworICAgICAgICBhdXRvKiBwYXJlbnQgPSB0
aGlzLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBib29s
IHN1Y2Nlc3MgPSBwYXJlbnQtPmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcoKSwg
ZWMpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMg
fTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MgPyBuZXdDaGlsZC5wdHIoKSA6IG51bGxwdHI7CiAg
ICAgfQogCi0gICAgZWMgPSBTWU5UQVhfRVJSOwotICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CiB9CiAKLUVsZW1lbnQqIEVsZW1lbnQ6Omlu
c2VydEFkamFjZW50RWxlbWVudChjb25zdCBTdHJpbmcmIHdoZXJlLCBFbGVtZW50JiBuZXdDaGls
ZCwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25PcjxFbGVtZW50Kj4gRWxlbWVudDo6aW5z
ZXJ0QWRqYWNlbnRFbGVtZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIG5ld0NoaWxk
KQogewotICAgIE5vZGUqIHJldHVyblZhbHVlID0gaW5zZXJ0QWRqYWNlbnQod2hlcmUsIG5ld0No
aWxkLCBlYyk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXJldHVyblZh
bHVlIHx8IGlzPEVsZW1lbnQ+KCpyZXR1cm5WYWx1ZSkpOwotICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50PihyZXR1cm5WYWx1ZSk7CisgICAgYXV0byByZXN1bHQgPSBpbnNlcnRBZGphY2VudCh3
aGVyZSwgbmV3Q2hpbGQpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50PihyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwogfQogCiAvLyBTdGVwIDEgb2Yg
aHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyNkb20tZWxlbWVudC1pbnNlcnRhZGph
Y2VudGh0bWwuCi1zdGF0aWMgQ29udGFpbmVyTm9kZSogY29udGV4dE5vZGVGb3JJbnNlcnRpb24o
Y29uc3QgU3RyaW5nJiB3aGVyZSwgRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMp
CitzdGF0aWMgRXhjZXB0aW9uT3I8Q29udGFpbmVyTm9kZSo+IGNvbnRleHROb2RlRm9ySW5zZXJ0
aW9uKGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYmVmb3JlYmVnaW4iKSB8fCBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3aGVyZSwgImFmdGVyZW5kIikpIHsKLSAgICAgICAg
YXV0byogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAoIXBhcmVu
dCB8fCBpczxEb2N1bWVudD4oKnBhcmVudCkpIHsKLSAgICAgICAgICAgIGVjID0gTk9fTU9ESUZJ
Q0FUSU9OX0FMTE9XRURfRVJSOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KKyAgICAgICAgYXV0byogcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKCk7CisgICAgICAg
IGlmICghcGFyZW50IHx8IGlzPERvY3VtZW50PigqcGFyZW50KSkKKyAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKICAgICAgICAgcmV0
dXJuIHBhcmVudDsKICAgICB9CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHdoZXJlLCAiYWZ0ZXJiZWdpbiIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdo
ZXJlLCAiYmVmb3JlZW5kIikpCi0gICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIGVjID0gIFNZ
TlRBWF9FUlI7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmZWxlbWVudDsK
KyAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworfQorCisvLyBTdGVwIDIgb2Yg
aHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyNkb20tZWxlbWVudC1pbnNlcnRhZGph
Y2VudGh0bWwuCitzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPEVsZW1lbnQ+PiBjb250ZXh0RWxlbWVu
dEZvckluc2VydGlvbihjb25zdCBTdHJpbmcmIHdoZXJlLCBFbGVtZW50JiBlbGVtZW50KQorewor
ICAgIGF1dG8gY29udGV4dE5vZGVSZXN1bHQgPSBjb250ZXh0Tm9kZUZvckluc2VydGlvbih3aGVy
ZSwgZWxlbWVudCk7CisgICAgaWYgKGNvbnRleHROb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gY29udGV4dE5vZGVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAg
IGF1dG8mIGNvbnRleHROb2RlID0gKmNvbnRleHROb2RlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpOworICAgIGlmICghaXM8RWxlbWVudD4oY29udGV4dE5vZGUpIHx8IChjb250ZXh0Tm9kZS5k
b2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgaXM8SFRNTEh0bWxFbGVtZW50Pihjb250ZXh0
Tm9kZSkpKQorICAgICAgICByZXR1cm4gUmVmPEVsZW1lbnQ+IHsgSFRNTEJvZHlFbGVtZW50Ojpj
cmVhdGUoY29udGV4dE5vZGUuZG9jdW1lbnQoKSkgfTsKKyAgICByZXR1cm4gUmVmPEVsZW1lbnQ+
IHsgZG93bmNhc3Q8RWxlbWVudD4oY29udGV4dE5vZGUpIH07CiB9CiAKIC8vIGh0dHBzOi8vdzNj
LmdpdGh1Yi5pby9ET00tUGFyc2luZy8jZG9tLWVsZW1lbnQtaW5zZXJ0YWRqYWNlbnRodG1sCi12
b2lkIEVsZW1lbnQ6Omluc2VydEFkamFjZW50SFRNTChjb25zdCBTdHJpbmcmIHdoZXJlLCBjb25z
dCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lkPiBF
bGVtZW50OjppbnNlcnRBZGphY2VudEhUTUwoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3QgU3Ry
aW5nJiBtYXJrdXApCiB7Ci0gICAgLy8gU3RlcCAxLgotICAgIGF1dG8qIGNvbnRleHROb2RlID0g
Y29udGV4dE5vZGVGb3JJbnNlcnRpb24od2hlcmUsIHRoaXMsIGVjKTsKLSAgICBpZiAoIWNvbnRl
eHROb2RlKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGNvbnRleHRFbGVt
ZW50OwotICAgIC8vIFN0ZXAgMi4KLSAgICBpZiAoIWlzPEVsZW1lbnQ+KCpjb250ZXh0Tm9kZSkK
LSAgICAgICAgfHwgKGNvbnRleHROb2RlLT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYg
aXM8SFRNTEh0bWxFbGVtZW50PigqY29udGV4dE5vZGUpKSkgewotICAgICAgICBjb250ZXh0RWxl
bWVudCA9IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKGNvbnRleHROb2RlLT5kb2N1bWVudCgpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgY29udGV4dEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pihj
b250ZXh0Tm9kZSk7CisgICAgLy8gU3RlcHMgMSBhbmQgMi4KKyAgICBhdXRvIGNvbnRleHRFbGVt
ZW50ID0gY29udGV4dEVsZW1lbnRGb3JJbnNlcnRpb24od2hlcmUsICp0aGlzKTsKKyAgICBpZiAo
Y29udGV4dEVsZW1lbnQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBjb250ZXh0RWxl
bWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgLy8gU3RlcCAzLgotICAgIGF1dG8gZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKCpjb250ZXh0RWxlbWVudCwgbWFy
a3VwLCBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwotICAgIGlmIChmcmFnbWVudC5oYXNFeGNlcHRp
b24oKSkgewotICAgICAgICBlYyA9IGZyYWdtZW50LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50Rm9ySW5uZXJPdXRlckhUTUwoY29udGV4dEVsZW1lbnQucmVsZWFzZVJldHVyblZhbHVlKCks
IG1hcmt1cCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKKyAgICBpZiAoZnJhZ21lbnQuaGFzRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAg
ICAgLy8gU3RlcCA0LgotICAgIGluc2VydEFkamFjZW50KHdoZXJlLCBmcmFnbWVudC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSwgZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaW5zZXJ0QWRqYWNlbnQod2hl
cmUsIGZyYWdtZW50LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEVsZW1lbnQ6Omluc2VydEFkamFjZW50VGV4dChjb25z
dCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
RXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnRUZXh0KGNvbnN0IFN0cmlu
ZyYgd2hlcmUsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBpbnNlcnRBZGphY2VudCh3aGVy
ZSwgZG9jdW1lbnQoKS5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSwgZWMpOworICAgIGF1dG8gcmVzdWx0
ID0gaW5zZXJ0QWRqYWNlbnQod2hlcmUsIGRvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUodGV4dCkp
OworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDAzNTdkNzFhNWQ5NTRiODY4MDBkODM4Nzdm
Y2QyNjJiNWQ2MmU3MjkuLjdkY2IyZjg3MTFiOGU1Zjc2ZTYyZWZkYWVmMzk3ZDgwZjA0ODNmNjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjIsOCArMjIsNyBAQAogICoKICAqLwogCi0jaWZuZGVm
IEVsZW1lbnRfaAotI2RlZmluZSBFbGVtZW50X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
QVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMTEy
LDkgKzExMSw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNTdHJp
bmcmIGdldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0QXR0cmlidXRlTlMoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKSBj
b25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHN0YXRpYyBib29sIHBhcnNlQXR0cmlidXRlTmFtZShRdWFsaWZpZWROYW1lJiwgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVhbGlm
aWVkTmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QXR0
cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwor
ICAgIHN0YXRpYyBFeGNlcHRpb25PcjxRdWFsaWZpZWROYW1lPiBwYXJzZUF0dHJpYnV0ZU5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVh
bGlmaWVkTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0QXR0
cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAKICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGdldElkQXR0cmlidXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRJ
ZEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKQEAgLTE5MCw5ICsxODksOSBAQCBwdWJs
aWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0cj4gZ2V0QXR0cmlidXRlTm9kZShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxBdHRy
PiBnZXRBdHRyaWJ1dGVOb2RlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
QXR0cj4gc2V0QXR0cmlidXRlTm9kZShBdHRyJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxBdHRyPiBzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ciYsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0cj4gcmVtb3ZlQXR0cmlidXRl
Tm9kZShBdHRyJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlv
bk9yPFJlZlB0cjxBdHRyPj4gc2V0QXR0cmlidXRlTm9kZShBdHRyJik7CisgICAgV0VCQ09SRV9F
WFBPUlQgRXhjZXB0aW9uT3I8UmVmUHRyPEF0dHI+PiBzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ciYp
OworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gcmVtb3ZlQXR0cmli
dXRlTm9kZShBdHRyJik7CiAKICAgICBSZWZQdHI8QXR0cj4gYXR0cklmRXhpc3RzKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICBSZWZQdHI8QXR0cj4gYXR0cklmRXhpc3RzKGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOwpAQCAt
MjY5LDE0ICsyNjgsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVl
ZGVkKGNvbnN0IFJlbmRlclN0eWxlJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTaGFkb3dSb290
KiBzaGFkb3dSb290KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2hhZG93Um9vdCogY3Jl
YXRlU2hhZG93Um9vdChFeGNlcHRpb25Db2RlJik7CisgICAgU2hhZG93Um9vdCogc2hhZG93Um9v
dEZvckJpbmRpbmdzKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7CiAKICAgICBzdHJ1Y3QgU2hhZG93
Um9vdEluaXQgewogICAgICAgICBTaGFkb3dSb290TW9kZSBtb2RlOwogICAgIH07Ci0KLSAgICBT
aGFkb3dSb290KiBzaGFkb3dSb290Rm9yQmluZGluZ3MoSlNDOjpFeGVjU3RhdGUmKSBjb25zdDsK
LSAgICBSZWZQdHI8U2hhZG93Um9vdD4gYXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0
JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxTaGFkb3dSb290Pj4gYXR0
YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0Jik7CiAKICAgICBTaGFkb3dSb290KiB1c2Vy
QWdlbnRTaGFkb3dSb290KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2hhZG93Um9vdCYg
ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwpAQCAtMzE1LDkgKzMxMiw5IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRhYkluZGV4KGludCk7CiAgICAgdmlydHVhbCBF
bGVtZW50KiBmb2N1c0RlbGVnYXRlKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBp
bnNlcnRBZGphY2VudEVsZW1lbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgRWxlbWVudCYgbmV3Q2hp
bGQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydEFkamFj
ZW50SFRNTChjb25zdCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydEFkamFjZW50VGV4dChjb25z
dCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxFbGVtZW50Kj4gaW5zZXJ0QWRqYWNlbnRFbGVt
ZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIG5ld0NoaWxkKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBpbnNlcnRBZGphY2VudEhUTUwoY29uc3QgU3RyaW5n
JiB3aGVyZSwgY29uc3QgU3RyaW5nJiBodG1sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRp
b25Pcjx2b2lkPiBpbnNlcnRBZGphY2VudFRleHQoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3Qg
U3RyaW5nJiB0ZXh0KTsKIAogICAgIGJvb2wgaWVGb3JiaWRzSW5zZXJ0SFRNTCgpIGNvbnN0Owog
CkBAIC0zODAsOCArMzc3LDggQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IGlubmVySFRNTCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBvdXRlckhUTUwo
KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElubmVySFRNTChjb25zdCBTdHJp
bmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRPdXRlckhU
TUwoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHZvaWQ+IHNldElubmVySFRNTChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlubmVyVGV4dCgpOwogICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBvdXRlclRleHQoKTsKICAKQEAgLTQyOSw4ICs0MjYsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIG1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcygpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBtYXRjaGVzSW5kZXRlcm1pbmF0ZVBzZXVkb0NsYXNzKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIG1hdGNoZXNEZWZhdWx0UHNldWRvQ2xhc3MoKSBjb25zdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBjbG9zZXN0KGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8Ym9vbD4gbWF0Y2hlcyhjb25zdCBTdHJpbmcmIHNlbGVjdG9ycyk7CisgICAgV0VCQ09S
RV9FWFBPUlQgRXhjZXB0aW9uT3I8RWxlbWVudCo+IGNsb3Nlc3QoY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcnMpOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkgY29u
c3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBET01Ub2tlbkxpc3QmIGNsYXNzTGlzdCgpOwpAQCAt
NjAxLDcgKzU5OCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgYWRkU2hhZG93Um9vdChSZWY8
U2hhZG93Um9vdD4mJik7CiAKLSAgICBzdGF0aWMgdm9pZCBtZXJnZVdpdGhOZXh0VGV4dE5vZGUo
VGV4dCYgbm9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lk
PiBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoVGV4dCYpOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNU
ZXh0Tm9kZSgpIGNvbnN0OwpAQCAtNjM5LDcgKzYzNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1
cGRhdGVJZEZvckRvY3VtZW50KEhUTUxEb2N1bWVudCYsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xk
SWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQsIEhUTUxEb2N1bWVudE5hbWVkSXRlbU1hcHNV
cGRhdGluZ0NvbmRpdGlvbik7CiAgICAgdm9pZCB1cGRhdGVMYWJlbChUcmVlU2NvcGUmLCBjb25z
dCBBdG9taWNTdHJpbmcmIG9sZEZvckF0dHJpYnV0ZVZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld0ZvckF0dHJpYnV0ZVZhbHVlKTsKIAotICAgIE5vZGUqIGluc2VydEFkamFjZW50KGNvbnN0
IFN0cmluZyYgd2hlcmUsIFJlZjxOb2RlPiYmIG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgRXhjZXB0aW9uT3I8Tm9kZSo+IGluc2VydEFkamFjZW50KGNvbnN0IFN0cmluZyYgd2hlcmUs
IFJlZjxOb2RlPiYmIG5ld0NoaWxkKTsKIAogICAgIHZvaWQgc2Nyb2xsQnlVbml0cyhpbnQgdW5p
dHMsIFNjcm9sbEdyYW51bGFyaXR5KTsKIApAQCAtODM4LDUgKzgzNSwzIEBAIGlubGluZSB2b2lk
IEVsZW1lbnQ6OnNldEhhc0ZvY3VzV2l0aGluKGJvb2wgZmxhZykKIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6RWxlbWVudCkKICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6Tm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCk7IH0K
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5p
ZGwKaW5kZXggMzhiNjA2YTQwMWVmZTJmYjRiMjJmNGQzOGJhZGMxM2NlNGU2OGRlNC4uZTQyZDJk
NGQ4MWYyY2JjMjViYjYxN2E4ZjZkMzAyNmFmNWJjODRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50Lmlk
bApAQCAtMjgsMTMgKzI4LDEzIEBACiAKICAgICBET01TdHJpbmc/IGdldEF0dHJpYnV0ZShET01T
dHJpbmcgbmFtZSk7CiAKLSAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93TGVnYWN5RXhjZXB0aW9u
XSB2b2lkIHNldEF0dHJpYnV0ZShET01TdHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKKyAg
ICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIHNldEF0dHJpYnV0ZShET01T
dHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKIAogICAgIFtDRVJlYWN0aW9uc10gdm9pZCBy
ZW1vdmVBdHRyaWJ1dGUoRE9NU3RyaW5nIG5hbWUpOwogICAgIEF0dHI/IGdldEF0dHJpYnV0ZU5v
ZGUoRE9NU3RyaW5nIG5hbWUpOwogCi0gICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4
Y2VwdGlvbl0gQXR0cj8gc2V0QXR0cmlidXRlTm9kZShBdHRyIG5ld0F0dHIpOwotICAgIFtDRVJl
YWN0aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEF0dHIgcmVtb3ZlQXR0cmlidXRlTm9k
ZShBdHRyIG9sZEF0dHIpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIEF0
dHI/IHNldEF0dHJpYnV0ZU5vZGUoQXR0ciBuZXdBdHRyKTsKKyAgICBbQ0VSZWFjdGlvbnMsIE1h
eVRocm93RXhjZXB0aW9uXSBBdHRyIHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ciBvbGRBdHRyKTsK
IAogICAgIEhUTUxDb2xsZWN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lKERPTVN0cmluZyBuYW1l
KTsKIApAQCAtNDMsMTMgKzQzLDEzIEBACiAKICAgICBET01TdHJpbmc/IGdldEF0dHJpYnV0ZU5T
KERPTVN0cmluZz8gbmFtZXNwYWNlVVJJLCBET01TdHJpbmcgbG9jYWxOYW1lKTsKIAotICAgIFtD
RVJlYWN0aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIHZvaWQgc2V0QXR0cmlidXRlTlMo
RE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBxdWFsaWZpZWROYW1lLCBET01TdHJp
bmcgdmFsdWUpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgc2V0
QXR0cmlidXRlTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBxdWFsaWZpZWRO
YW1lLCBET01TdHJpbmcgdmFsdWUpOwogICAgIFtDRVJlYWN0aW9uc10gdm9pZCByZW1vdmVBdHRy
aWJ1dGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7CiAK
ICAgICBIVE1MQ29sbGVjdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKERPTVN0cmluZz8gbmFt
ZXNwYWNlVVJJLCBET01TdHJpbmcgbG9jYWxOYW1lKTsKIAogICAgIEF0dHI/IGdldEF0dHJpYnV0
ZU5vZGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7Ci0g
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gQXR0cj8gc2V0QXR0cmli
dXRlTm9kZU5TKEF0dHIgbmV3QXR0cik7CisgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2Vw
dGlvbl0gQXR0cj8gc2V0QXR0cmlidXRlTm9kZU5TKEF0dHIgbmV3QXR0cik7CiAgICAgYm9vbGVh
biBoYXNBdHRyaWJ1dGUoRE9NU3RyaW5nIG5hbWUpOwogCiAgICAgYm9vbGVhbiBoYXNBdHRyaWJ1
dGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7CkBAIC05
NywxNSArOTcsMTUgQEAKICAgICBzZXF1ZW5jZTxET01TdHJpbmc+IGdldEF0dHJpYnV0ZU5hbWVz
KCk7CiAKICAgICBIVE1MQ29sbGVjdGlvbiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKERPTVN0cmlu
ZyBuYW1lKTsKLSAgICBbQ0VSZWFjdGlvbnMsIFRyZWF0TnVsbEFzPUVtcHR5U3RyaW5nLCBTZXR0
ZXJNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gYXR0cmlidXRlIERPTVN0cmluZyBpbm5lckhUTUw7
Ci0gICAgW0NFUmVhY3Rpb25zLCBUcmVhdE51bGxBcz1FbXB0eVN0cmluZywgU2V0dGVyTWF5VGhy
b3dMZWdhY3lFeGNlcHRpb25dIGF0dHJpYnV0ZSBET01TdHJpbmcgb3V0ZXJIVE1MOworICAgIFtD
RVJlYWN0aW9ucywgVHJlYXROdWxsQXM9RW1wdHlTdHJpbmcsIFNldHRlck1heVRocm93RXhjZXB0
aW9uXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGlubmVySFRNTDsKKyAgICBbQ0VSZWFjdGlvbnMsIFRy
ZWF0TnVsbEFzPUVtcHR5U3RyaW5nLCBTZXR0ZXJNYXlUaHJvd0V4Y2VwdGlvbl0gYXR0cmlidXRl
IERPTVN0cmluZyBvdXRlckhUTUw7CiAKICAgICBbQ0VSZWFjdGlvbnMsIFJlZmxlY3Q9Y2xhc3Nd
IGF0dHJpYnV0ZSBET01TdHJpbmcgY2xhc3NOYW1lOwogICAgIFtQdXRGb3J3YXJkcz12YWx1ZV0g
cmVhZG9ubHkgYXR0cmlidXRlIERPTVRva2VuTGlzdCBjbGFzc0xpc3Q7CiAKLSAgICBbTWF5VGhy
b3dMZWdhY3lFeGNlcHRpb25dIGJvb2xlYW4gbWF0Y2hlcyhET01TdHJpbmcgc2VsZWN0b3JzKTsK
LSAgICBbTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEVsZW1lbnQgY2xvc2VzdChET01TdHJpbmcg
c2VsZWN0b3JzKTsgICAgCi0gICAgW0ltcGxlbWVudGVkQXM9bWF0Y2hlcywgTWF5VGhyb3dMZWdh
Y3lFeGNlcHRpb25dIGJvb2xlYW4gd2Via2l0TWF0Y2hlc1NlbGVjdG9yKERPTVN0cmluZyBzZWxl
Y3RvcnMpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBtYXRjaGVzKERPTVN0cmlu
ZyBzZWxlY3RvcnMpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRWxlbWVudCBjbG9zZXN0KERP
TVN0cmluZyBzZWxlY3RvcnMpOworICAgIFtJbXBsZW1lbnRlZEFzPW1hdGNoZXMsIE1heVRocm93
RXhjZXB0aW9uXSBib29sZWFuIHdlYmtpdE1hdGNoZXNTZWxlY3RvcihET01TdHJpbmcgc2VsZWN0
b3JzKTsKIAogICAgIC8vIENTU09NIFZpZXcgTW9kdWxlIEFQSQogICAgIENsaWVudFJlY3RMaXN0
IGdldENsaWVudFJlY3RzKCk7CkBAIC0xMjQsOSArMTI0LDkgQEAKICAgICBbQ0VSZWFjdGlvbnMs
IFJlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgdWlhY3Rpb25zOwogI2VuZGlmCiAKLSAgICBb
Q0VSZWFjdGlvbnMsIE1heVRocm93TGVnYWN5RXhjZXB0aW9uXSBFbGVtZW50IGluc2VydEFkamFj
ZW50RWxlbWVudChET01TdHJpbmcgd2hlcmUsIEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW0NFUmVh
Y3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gdm9pZCBpbnNlcnRBZGphY2VudEhUTUwo
RE9NU3RyaW5nIHdoZXJlLCBET01TdHJpbmcgaHRtbCk7Ci0gICAgW01heVRocm93TGVnYWN5RXhj
ZXB0aW9uXSB2b2lkIGluc2VydEFkamFjZW50VGV4dChET01TdHJpbmcgd2hlcmUsIERPTVN0cmlu
ZyB0ZXh0KTsKKyAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSBFbGVtZW50IGlu
c2VydEFkamFjZW50RWxlbWVudChET01TdHJpbmcgd2hlcmUsIEVsZW1lbnQgZWxlbWVudCk7Cisg
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBpbnNlcnRBZGphY2VudEhU
TUwoRE9NU3RyaW5nIHdoZXJlLCBET01TdHJpbmcgaHRtbCk7CisgICAgW01heVRocm93RXhjZXB0
aW9uXSB2b2lkIGluc2VydEFkamFjZW50VGV4dChET01TdHJpbmcgd2hlcmUsIERPTVN0cmluZyB0
ZXh0KTsKIAogICAgIFtDb25kaXRpb25hbD1QT0lOVEVSX0xPQ0tdIHZvaWQgcmVxdWVzdFBvaW50
ZXJMb2NrKCk7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgIFtDb25kaXRpb25hbD1DU1NfUkVH
SU9OU10gc2VxdWVuY2U8UmFuZ2U+IHdlYmtpdEdldFJlZ2lvbkZsb3dSYW5nZXMoKTsKIAogICAg
IC8vIFNoYWRvdyBET00gQVBJCi0gICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBNYXlU
aHJvd0xlZ2FjeUV4Y2VwdGlvbl0gU2hhZG93Um9vdCBhdHRhY2hTaGFkb3coU2hhZG93Um9vdElu
aXQgaW5pdCk7CisgICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBNYXlUaHJvd0V4Y2Vw
dGlvbl0gU2hhZG93Um9vdCBhdHRhY2hTaGFkb3coU2hhZG93Um9vdEluaXQgaW5pdCk7CiAgICAg
W0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBJbXBsZW1lbnRlZEFzPXNoYWRvd1Jvb3RGb3JC
aW5kaW5ncywgQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTaGFkb3dS
b290IHNoYWRvd1Jvb3Q7CiAgICAgW0NFUmVhY3Rpb25zLCBFbmFibGVkQXRSdW50aW1lPVNoYWRv
d0RPTSwgUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBzbG90OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
YW1lZE5vZGVNYXAuY3BwCmluZGV4IGRmZDEwOTk5NDJjMDg4ZjRkMGU3NjdjYTQ4ZmJjZjhkMTk0
OGEzNWYuLmJjZmEyMjdhNzIxMWM5ZjA3ZDQ4N2MzYjYxYzBhYjZhOTU5OWQyOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiTmFt
ZWROb2RlTWFwLmgiCiAKICNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgpAQCAtNTUsNTUgKzU0LDUwIEBAIFJlZlB0cjxBdHRyPiBO
YW1lZE5vZGVNYXA6OmdldE5hbWVkSXRlbU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
VVJJLCBjb25zCiAgICAgcmV0dXJuIG1fZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlTlMobmFtZXNw
YWNlVVJJLCBsb2NhbE5hbWUpOwogfQogCi1SZWZQdHI8QXR0cj4gTmFtZWROb2RlTWFwOjpyZW1v
dmVOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
K0V4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0oY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewotICAgIHVuc2lnbmVkIGluZGV4ID0gbV9lbGVtZW50
Lmhhc0F0dHJpYnV0ZXMoKSA/IG1fZWxlbWVudC5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUobmFt
ZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZShtX2VsZW1lbnQpKSA6IEVsZW1lbnREYXRhOjph
dHRyaWJ1dGVOb3RGb3VuZDsKLSAgICBpZiAoaW5kZXggPT0gRWxlbWVudERhdGE6OmF0dHJpYnV0
ZU5vdEZvdW5kKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQorICAgIGlmICghbV9lbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICBhdXRvIGluZGV4
ID0gbV9lbGVtZW50LmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShuYW1lLCBzaG91bGRJZ25vcmVB
dHRyaWJ1dGVDYXNlKG1fZWxlbWVudCkpOworICAgIGlmIChpbmRleCA9PSBFbGVtZW50RGF0YTo6
YXR0cmlidXRlTm90Rm91bmQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRf
RVJSIH07CiAgICAgcmV0dXJuIG1fZWxlbWVudC5kZXRhY2hBdHRyaWJ1dGUoaW5kZXgpOwogfQog
Ci1WZWN0b3I8U3RyaW5nPiBOYW1lZE5vZGVNYXA6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQor
VmVjdG9yPFN0cmluZz4gTmFtZWROb2RlTWFwOjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29u
c3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IG1fZWxlbWVudC5nZXRBdHRyaWJ1dGVO
YW1lcygpOwogICAgIGlmIChpczxIVE1MRWxlbWVudD4obV9lbGVtZW50KSAmJiBpczxIVE1MRG9j
dW1lbnQ+KG1fZWxlbWVudC5kb2N1bWVudCgpKSkgewogICAgICAgICBuYW1lcy5yZW1vdmVBbGxN
YXRjaGluZyhbXShTdHJpbmcmIG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBuYW1lLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCkgIT0gbmFtZTsKKyAgICAgICAgICAgIGZvciAoYXV0byBjaGFy
YWN0ZXIgOiBTdHJpbmdWaWV3IHsgbmFtZSB9LmNvZGVVbml0cygpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXIpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfSk7CiAgICAgfQogICAgIHJldHVybiBuYW1lczsKIH0KIAotUmVmUHRyPEF0dHI+IE5hbWVk
Tm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4
Y2VwdGlvbk9yPFJlZjxBdHRyPj4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW1OUyhjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUpCiB7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygpID8g
bV9lbGVtZW50LmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpIDogRWxlbWVudERhdGE6OmF0dHJpYnV0ZU5vdEZv
dW5kOwotICAgIGlmIChpbmRleCA9PSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQpIHsK
LSAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9CisgICAgaWYgKCFtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygpKQorICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgIGF1dG8gaW5kZXggPSBtX2VsZW1lbnQu
ZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKFF1YWxpZmllZE5hbWUgeyBudWxsQXRvbSwgbG9jYWxO
YW1lLCBuYW1lc3BhY2VVUkkgfSk7CisgICAgaWYgKGluZGV4ID09IEVsZW1lbnREYXRhOjphdHRy
aWJ1dGVOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIg
fTsKICAgICByZXR1cm4gbV9lbGVtZW50LmRldGFjaEF0dHJpYnV0ZShpbmRleCk7CiB9CiAKLVJl
ZlB0cjxBdHRyPiBOYW1lZE5vZGVNYXA6OnNldE5hbWVkSXRlbShBdHRyJiBhdHRyLCBFeGNlcHRp
b25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPFJlZlB0cjxBdHRyPj4gTmFtZWROb2RlTWFwOjpzZXRO
YW1lZEl0ZW0oQXR0ciYgYXR0cikKIHsKLSAgICByZXR1cm4gbV9lbGVtZW50LnNldEF0dHJpYnV0
ZU5vZGUoYXR0ciwgZWMpOwotfQotCi1SZWZQdHI8QXR0cj4gTmFtZWROb2RlTWFwOjpzZXROYW1l
ZEl0ZW0oTm9kZSYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFpczxBdHRy
Pihub2RlKSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotICAgIHJldHVybiBzZXROYW1lZEl0ZW0oZG93bmNhc3Q8QXR0cj4obm9kZSks
IGVjKTsKKyAgICByZXR1cm4gbV9lbGVtZW50LnNldEF0dHJpYnV0ZU5vZGUoYXR0cik7CiB9CiAK
IFJlZlB0cjxBdHRyPiBOYW1lZE5vZGVNYXA6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7
CiAgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIG1fZWxlbWVudC5lbnN1cmVBdHRyKG1fZWxlbWVu
dC5hdHRyaWJ1dGVBdChpbmRleCkubmFtZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1h
cC5oCmluZGV4IDBiNTY3ZTg4N2RlZDAwMzJhMGJmNTBmZTc4ZmZlODA4NTNmMjEwYjIuLjJjYjU5
NjQ0OTk4MDY3Mzc5Mzg4NGEzYjBhODQ0YjU5ZDNjOGMxYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWRO
b2RlTWFwLmgKQEAgLTI0LDM5ICsyNCwzNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkF0dHIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBw
YWJsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEF0dHI7CitjbGFzcyBFbGVt
ZW50OworCiBjbGFzcyBOYW1lZE5vZGVNYXAgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBmcmllbmQgY2xhc3MgRWxlbWVudDsKIHB1
YmxpYzoKICAgICBleHBsaWNpdCBOYW1lZE5vZGVNYXAoRWxlbWVudCYgZWxlbWVudCkKICAgICAg
ICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICB7Ci0gICAgICAgIC8vIE9ubHkgc3VwcG9ydHMg
TmFtZWROb2RlTWFwcyB3aXRoIEVsZW1lbnQgYXNzb2NpYXRlZCwgRG9jdW1lbnRUeXBlLmVudGl0
aWVzIGFuZCBEb2N1bWVudFR5cGUubm90YXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4KICAg
ICB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZigpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZGVyZWYoKTsKIAotICAgIC8vIFB1YmxpYyBET00gaW50ZXJmYWNlLgotCisgICAgV0VC
Q09SRV9FWFBPUlQgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPEF0dHI+IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZlB0cjxBdHRyPiBnZXROYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEF0dHI+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBz
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QXR0
cj4gZ2V0TmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQ
dHI8QXR0cj4gcmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAg
ICBSZWZQdHI8QXR0cj4gc2V0TmFtZWRJdGVtKEF0dHImLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPEF0dHI+IHNldE5hbWVkSXRlbShOb2RlJiwgRXhjZXB0aW9u
Q29kZSYpOyAvLyBmb3IgbGVnYWN5IGJpbmRpbmdzLgorICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2Vw
dGlvbk9yPFJlZlB0cjxBdHRyPj4gc2V0TmFtZWRJdGVtKEF0dHImKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBFeGNlcHRpb25PcjxSZWY8QXR0cj4+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxBdHRyPj4g
cmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxB
dHRyPiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCkgY29uc3Q7CiAKLSAgICBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50OyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIHsgcmV0dXJuIG1fZWxlbWVudDsg
fQogCiBwcml2YXRlOgogICAgIEVsZW1lbnQmIG1fZWxlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVk
Tm9kZU1hcC5pZGwKaW5kZXggZmRkMDU5OTZlNTQzYmM2ODM3MDZlM2FjM2I4NDYwZDhhOGNkNzUw
NS4uODNkMjhlN2ExMjYyNzIyZmYwZTFiMmFiMTY4MzMyZDc1ZGFkMzM5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05hbWVkTm9kZU1hcC5pZGwKQEAgLTI0LDEyICsyNCwxMSBAQAogICAgIEltcGxlbWVudGF0
aW9uTGFja3NWVGFibGUsCiBdIGludGVyZmFjZSBOYW1lZE5vZGVNYXAgewogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLQotICAgIGdldHRlciBBdHRyPyBnZXRO
YW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwotICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dMZWdh
Y3lFeGNlcHRpb25dIEF0dHI/IHNldE5hbWVkSXRlbShBdHRyIGF0dHIpOwotICAgIFtDRVJlYWN0
aW9ucywgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIEF0dHIgcmVtb3ZlTmFtZWRJdGVtKERPTVN0
cmluZyBuYW1lKTsKICAgICBnZXR0ZXIgQXR0cj8gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KTsK
KyAgICBnZXR0ZXIgQXR0cj8gZ2V0TmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKICAgICBBdHRy
PyBnZXROYW1lZEl0ZW1OUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2Fs
TmFtZSk7Ci0gICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbiwgSW1wbGVt
ZW50ZWRBcz1zZXROYW1lZEl0ZW1dIEF0dHI/IHNldE5hbWVkSXRlbU5TKEF0dHIgYXR0cik7Ci0g
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gQXR0ciByZW1vdmVOYW1l
ZEl0ZW1OUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIGxvY2FsTmFtZSk7Cisg
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gQXR0cj8gc2V0TmFtZWRJdGVtKEF0
dHIgYXR0cik7CisgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbiwgSW1wbGVtZW50
ZWRBcz1zZXROYW1lZEl0ZW1dIEF0dHI/IHNldE5hbWVkSXRlbU5TKEF0dHIgYXR0cik7CisgICAg
W0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gQXR0ciByZW1vdmVOYW1lZEl0ZW0oRE9N
U3RyaW5nIG5hbWUpOworICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIEF0dHIg
cmVtb3ZlTmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBsb2Nh
bE5hbWUpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggYThlYzBmZTFh
ODdiNTJhNTNjYzQxOWEzNmYxNmJmZjdhNWZkNzg4Ni4uYjMwZDc2YWRmZjIzYzI4ZTk3ODBiNzE2
ODA5ODgzZTVlMjRiODUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTU4
NCwxNiArNTg0LDE0IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxFbGVtZW50OjpzZXRPdXRlclRl
eHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0ID8g
bmV4dC0+cHJldmlvdXNTaWJsaW5nKCkgOiBudWxscHRyOwogICAgIGlmIChpczxUZXh0Pihub2Rl
LmdldCgpKSkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgbWVyZ2VX
aXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpub2RlKSwgZWMpOwotICAgICAgICBpZiAo
ZWMpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKm5vZGUpKTsKKyAg
ICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KICAgICBpZiAoaXM8VGV4dD4ocHJldi5nZXQo
KSkpIHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIG1lcmdlV2l0aE5l
eHRUZXh0Tm9kZShkb3duY2FzdDxUZXh0PigqcHJldiksIGVjKTsKLSAgICAgICAgaWYgKGVjKQot
ICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IGVjIH07CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gbWVyZ2VXaXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpwcmV2KSk7CisgICAgICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKaW5kZXggZTliODVhOWRlM2ZmNjIzNjkyMmYxYThiNTk5
MzFkZTY2M2E4Y2NmMS4uMmMwY2YzYjUzN2RhNjE2NjE0Y2Y5ODZiMWY2ZTc4YzAxOTZlNjAwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKQEAgLTEzOCw3ICsxMzgsOSBA
QCBwdWJsaWM6CiAKICAgICBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlCiAg
ICAgewotICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUsIGVj
KTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUs
IG1fdmFsdWUpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkBAIC0xNzYsMTYgKzE3OCwyMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAobV9o
YWRBdHRyaWJ1dGUpCi0gICAgICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUs
IG1fb2xkVmFsdWUsIGVjKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9oYWRBdHRyaWJ1
dGUpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUo
bV9uYW1lLCBtX29sZFZhbHVlKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUo
KTsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2VsZW1lbnQtPnJlbW92ZUF0dHJpYnV0
ZShtX25hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBib29sIHJlZG8o
RXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX2VsZW1lbnQtPnNl
dEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUsIGVjKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBt
X2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUpOworICAgICAgICBpZiAocmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2Vw
dGlvbigpLmNvZGUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBjZTU2YmVjZTNj
YjZmNzU0MmRjNTIwZmQzZmMzNGY0NmMyMzliODE1Li41ZTE1Y2M1MTAyY2M2MWI3OTM2ZDZkNTFl
YzE5ZjZlMzIxNTg1MTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIFJldmFsaWRhdGVTdHlsZUF0
dHJpYnV0ZVRhc2s6OnRpbWVyRmlyZWQoKQogICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKIH0KIAot
U3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGNvbnN0IEV4Y2VwdGlvbkNv
ZGUmIGVjKQorU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKEV4Y2VwdGlv
bkNvZGUgZWMpCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbihlYyk7CkBAIC0yMDcsNiArMjA3LDExIEBAIFN0cmluZyBJbnNwZWN0
b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAorU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vy
cm9yU3RyaW5nKEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gRXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIHsgZXhjZXB0aW9uLmNvZGUoKSB9Lm5hbWU7Cit9CisKIEluc3BlY3Rv
ckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChXZWJBZ2VudENvbnRleHQmIGNvbnRleHQsIElu
c3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQog
ICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiRE9NIiksIGNvbnRleHQpCiAg
ICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihjb250ZXh0LmluamVjdGVkU2NyaXB0TWFuYWdl
cikKQEAgLTY2MCwxMSArNjY1LDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJp
YnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVuCiAgICAgaWYg
KCFlbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHBh
cnNlZEVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudChlbGVtZW50LT5kb2N1bWVudCgpLCBzcGFu
VGFnKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBwYXJzZWRFbGVtZW50LmdldCgp
LT5zZXRJbm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+IiwgZWMpOwotICAgIGlm
IChlYykgewotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcoZWMpOworICAgIGF1
dG8gcGFyc2VkRWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KGVsZW1lbnQtPmRvY3VtZW50KCks
IHNwYW5UYWcpOworICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VkRWxlbWVudC5nZXQoKS5zZXRJbm5l
ckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+Iik7CisgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkgeworICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggZDdiNmQxNTM4YTRi
Y2VjMDYxMmQyYzMyMDBkOTVhZGVlN2RiMzUzOS4uYTI0OGRlYzFkM2FlMThjNjc2ZjM4MWNlYzZm
OTJmOTZlYTRmODY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmgKQEAgLTYwLDYgKzYwLDcgQEAgY2xhc3MgRE9NRWRpdG9yOwogY2xhc3MgRG9jdW1l
bnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7CitjbGFzcyBFeGNlcHRpb247CiBjbGFz
cyBGbG9hdFF1YWQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3Rvckhpc3Rvcnk7CkBAIC0x
MDcsNyArMTA4LDggQEAgcHVibGljOgogICAgIEluc3BlY3RvckRPTUFnZW50KFdlYkFnZW50Q29u
dGV4dCYsIEluc3BlY3RvclBhZ2VBZ2VudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICB2aXJ0
dWFsIH5JbnNwZWN0b3JET01BZ2VudCgpOwogCi0gICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3Ry
aW5nKGNvbnN0IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgU3RyaW5nIHRvRXJyb3JTdHJp
bmcoRXhjZXB0aW9uQ29kZSk7CisgICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5nKEV4Y2Vw
dGlvbiYmKTsKIAogICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDg4MzhjOTM5NGIyNTdmNjhiN2E0NGYwNzM3
NTRmNjFjYTU0ZmU2ZjQuLmMyYTk1M2Y0ZDNmZTYwMzE2ZjA1ZDQxMzk3MDY1ODU0M2QyYTIzNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAKQEAgLTEzMDEsMTMgKzEzMDEsMTUgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGU6OnNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwKIAogICAg
IHsKICAgICAgICAgSW5zcGVjdG9yQ1NTQWdlbnQ6OklubGluZVN0eWxlT3ZlcnJpZGVTY29wZSBv
dmVycmlkZVNjb3BlKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIG1fZWxlbWVudC0+
c2V0QXR0cmlidXRlKCJzdHlsZSIsIHRleHQsIGVjKTsKKyAgICAgICAgbV9lbGVtZW50LT5zZXRB
dHRyaWJ1dGUoSFRNTE5hbWVzOjpzdHlsZUF0dHIsIHRleHQpOwogICAgIH0KIAogICAgIG1fc3R5
bGVUZXh0ID0gdGV4dDsKICAgICBtX2lzU3R5bGVUZXh0VmFsaWQgPSB0cnVlOwogICAgIG1fcnVs
ZVNvdXJjZURhdGEgPSBudWxscHRyOwotICAgIHJldHVybiAhZWM7CisKKyAgICBlYyA9IDA7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c2l6ZV90Pj4gSW5z
cGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpsaW5lRW5kaW5ncygpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggOGJjOTFiNTNkOWFmOGQ3ZmEyYWRhMzAy
Y2ZjNmY3OGExMDljY2Y1YS4uYzVlNGZkNDg4NWI3NWJiYzFkYzM0MjhjMGM1YWZjNjE5ZTVlMjk3
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNzgwLDMyICs3ODAsMTEg
QEAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gSW50ZXJuYWxzOjpjb21wdXRl
ZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8KICAgICByZXR1cm4gQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpjcmVhdGUoZWxlbWVudCwgYWxsb3dWaXNpdGVkU3R5bGUpOwogfQogCi1FeGNl
cHRpb25PcjxOb2RlKj4gSW50ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KEVsZW1lbnQmIGhvc3Qp
Ci17Ci0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBob3N0LnNoYWRvd1Jvb3QoKSkK
LSAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBhdXRvIHJlc3VsdCA9IGhvc3QuY3JlYXRlU2hhZG93Um9vdChlYyk7Ci0gICAgaWYgKGVj
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZWMgfTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCiBOb2RlKiBJbnRlcm5hbHM6OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoRWxlbWVudCYg
aG9zdCkKIHsKICAgICByZXR1cm4gJmhvc3QuZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwog
fQogCi1FeGNlcHRpb25PcjxOb2RlKj4gSW50ZXJuYWxzOjpjcmVhdGVTaGFkb3dSb290KEVsZW1l
bnQmIGhvc3QpCi17Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byByZXN1bHQg
PSBob3N0LmNyZWF0ZVNoYWRvd1Jvb3QoZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IGVjIH07Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogTm9kZSogSW50ZXJu
YWxzOjpzaGFkb3dSb290KEVsZW1lbnQmIGhvc3QpCiB7CiAgICAgcmV0dXJuIGhvc3Quc2hhZG93
Um9vdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRs
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDRhNjZjNDY5NWY2
ODFkYWM5OGVlNjA5YzM5NmZkZGI3ZWYyZDg0YzguLmE2ZmUzNGNjNjkxMWMxYWVjZDk0ZDA5MDRj
Y2ZkYTNjYmIxMmE2NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTEw
MCw5ICsxMDAsNyBAQCBlbnVtIFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gewogCiAgICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oRWxl
bWVudCBlbGVtZW50KTsKIAotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gTm9kZSBlbnN1cmVTaGFk
b3dSb290KEVsZW1lbnQgaG9zdCk7CiAgICAgTm9kZSBlbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290
KEVsZW1lbnQgaG9zdCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBOb2RlIGNyZWF0ZVNoYWRv
d1Jvb3QoRWxlbWVudCBob3N0KTsKICAgICBOb2RlIHNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KTsK
IAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRE9NU3RyaW5nIHNoYWRvd1Jvb3RUeXBlKE5vZGUg
cm9vdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggNTU0MjVkOTUyNGVjZDBlODBkZTA3YmE5ZGQzNDdjZTc0
ZGMyMGEzMy4uYThmOTVjZTU1NDI0YzUyNmNjNTU4NDQwNTU1Y2Q2Y2YwZGRkYzY5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcApAQCAtNzM5LDExICs3MzksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZU5h
bWVzcGFjZUF0dHJpYnV0ZXMoVmVjdG9yPEF0dHJpYnV0ZT4mIHByZWZpeGVkQXR0cmlidXQKICAg
ICAgICAgaWYgKG5hbWVzcGFjZXNbaV0ucHJlZml4KQogICAgICAgICAgICAgbmFtZXNwYWNlUU5h
bWUgPSAieG1sbnM6IiArIHRvU3RyaW5nKG5hbWVzcGFjZXNbaV0ucHJlZml4KTsKIAotICAgICAg
ICBRdWFsaWZpZWROYW1lIHBhcnNlZE5hbWUgPSBhbnlOYW1lOwotICAgICAgICBpZiAoIUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlTmFtZShwYXJzZWROYW1lLCBYTUxOU05hbWVzOjp4bWxuc05hbWVz
cGFjZVVSSSwgbmFtZXNwYWNlUU5hbWUsIGVjKSkKKyAgICAgICAgYXV0byByZXN1bHQgPSBFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZU5hbWUoWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkksIG5h
bWVzcGFjZVFOYW1lKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAg
ICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHByZWZpeGVkQXR0cmlidXRlcy5hcHBlbmQo
QXR0cmlidXRlKHBhcnNlZE5hbWUsIG5hbWVzcGFjZVVSSSkpOworICAgICAgICB9CisKKyAgICAg
ICAgcHJlZml4ZWRBdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUocmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpLCBuYW1lc3BhY2VVUkkpKTsKICAgICB9CiB9CiAKQEAgLTc2NiwxMSArNzY4LDEz
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhWZWN0b3I8QXR0
cmlidXRlPiYgcHJlZml4ZWRBdHRyaWJ1dGVzCiAgICAgICAgIEF0b21pY1N0cmluZyBhdHRyVVJJ
ID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyBudWxsQXRvbSA6IHRvQXRvbWljU3RyaW5nKGF0dHJp
YnV0ZXNbaV0udXJpKTsKICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJRTmFtZSA9IGF0dHJQcmVm
aXguaXNFbXB0eSgpID8gdG9BdG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS5sb2NhbG5hbWUpIDog
YXR0clByZWZpeCArICI6IiArIHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ubG9jYWxuYW1lKTsKIAot
ICAgICAgICBRdWFsaWZpZWROYW1lIHBhcnNlZE5hbWUgPSBhbnlOYW1lOwotICAgICAgICBpZiAo
IUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlTmFtZShwYXJzZWROYW1lLCBhdHRyVVJJLCBhdHRyUU5h
bWUsIGVjKSkKKyAgICAgICAgYXV0byByZXN1bHQgPSBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZU5h
bWUoYXR0clVSSSwgYXR0clFOYW1lKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgeworICAgICAgICAgICAgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKTsK
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIHByZWZpeGVkQXR0cmli
dXRlcy5hcHBlbmQoQXR0cmlidXRlKHBhcnNlZE5hbWUsIGF0dHJWYWx1ZSkpOworICAgICAgICBw
cmVmaXhlZEF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShyZXN1bHQucmVsZWFzZVJldHVyblZh
bHVlKCksIGF0dHJWYWx1ZSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvRE9NL0RPTUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NRWxlbWVu
dC5tbQppbmRleCAyMmI0ZjllM2JhMDFlN2VmYWFiNjU2NjkzMGU4YjhjNDA4OGVlMzU0Li4zM2E4
YzI1ZWE0NGViM2QxZWY2YjRjYWVhY2MyZTYzODYzZTI2NzE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9ET00vRE9NRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00v
RE9NRWxlbWVudC5tbQpAQCAtMTc3LDkgKzE3Nyw3IEBAIC0gKE5TU3RyaW5nICopaW5uZXJIVE1M
CiAtICh2b2lkKXNldElubmVySFRNTDooTlNTdHJpbmcgKiluZXdJbm5lckhUTUwKIHsKICAgICBK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgdW53cmFwKCpzZWxmKS5zZXRJbm5lckhUTUwobmV3SW5uZXJIVE1MLCBlYyk7Ci0gICAgcmFp
c2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5zZXRJ
bm5lckhUTUwobmV3SW5uZXJIVE1MKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopb3V0ZXJIVE1MCkBA
IC0xOTEsOSArMTg5LDcgQEAgLSAoTlNTdHJpbmcgKilvdXRlckhUTUwKIC0gKHZvaWQpc2V0T3V0
ZXJIVE1MOihOU1N0cmluZyAqKW5ld091dGVySFRNTAogewogICAgIEpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICB1bndyYXAoKnNlbGYp
LnNldE91dGVySFRNTChuZXdPdXRlckhUTUwsIGVjKTsKLSAgICByYWlzZU9uRE9NRXJyb3IoZWMp
OworICAgIHJhaXNlT25ET01FcnJvcih1bndyYXAoKnNlbGYpLnNldE91dGVySFRNTChuZXdPdXRl
ckhUTUwpKTsKIH0KIAogLSAoTlNTdHJpbmcgKiljbGFzc05hbWUKQEAgLTI4NSw5ICsyODEsNyBA
QCAtIChOU1N0cmluZyAqKWdldEF0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lCiAtICh2b2lkKXNl
dEF0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlCiB7CiAg
ICAgSlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIHVud3JhcCgqc2VsZikuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlLCBlYyk7Ci0gICAg
cmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5z
ZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpKTsKIH0KIAogLSAodm9pZClyZW1vdmVBdHRyaWJ1dGU6
KE5TU3RyaW5nICopbmFtZQpAQCAtMzA3LDEwICszMDEsNyBAQCAtIChET01BdHRyICopc2V0QXR0
cmlidXRlTm9kZTooRE9NQXR0ciAqKW5ld0F0dHIKICAgICBKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgaWYgKCFuZXdBdHRyKQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlv
bigpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIERPTUF0dHIgKnJlc3VsdCA9IGtp
dCh1bndyYXAoKnNlbGYpLnNldEF0dHJpYnV0ZU5vZGUoKmNvcmUobmV3QXR0ciksIGVjKS5nZXQo
KSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBraXQocmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZikuc2V0QXR0cmlidXRlTm9kZSgq
Y29yZShuZXdBdHRyKSkpLmdldCgpKTsKIH0KIAogLSAoRE9NQXR0ciAqKXJlbW92ZUF0dHJpYnV0
ZU5vZGU6KERPTUF0dHIgKilvbGRBdHRyCkBAIC0zMTgsMTAgKzMwOSw3IEBAIC0gKERPTUF0dHIg
KilyZW1vdmVBdHRyaWJ1dGVOb2RlOihET01BdHRyICopb2xkQXR0cgogICAgIEpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBpZiAoIW9sZEF0dHIpCiAgICAgICAgIHJhaXNlVHlwZUVy
cm9yRXhjZXB0aW9uKCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NQXR0ciAq
cmVzdWx0ID0ga2l0KHVud3JhcCgqc2VsZikucmVtb3ZlQXR0cmlidXRlTm9kZSgqY29yZShvbGRB
dHRyKSwgZWMpLmdldCgpKTsKLSAgICByYWlzZU9uRE9NRXJyb3IoZWMpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIGtpdChyYWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5yZW1v
dmVBdHRyaWJ1dGVOb2RlKCpjb3JlKG9sZEF0dHIpKSkucHRyKCkpOwogfQogCiAtIChET01Ob2Rl
TGlzdCAqKWdldEVsZW1lbnRzQnlUYWdOYW1lOihOU1N0cmluZyAqKW5hbWUKQEAgLTM0Myw5ICsz
MzEsNyBAQCAtIChOU1N0cmluZyAqKWdldEF0dHJpYnV0ZU5TOihOU1N0cmluZyAqKW5hbWVzcGFj
ZVVSSSBsb2NhbE5hbWU6KE5TU3RyaW5nICopbG9jYQogLSAodm9pZClzZXRBdHRyaWJ1dGVOUzoo
TlNTdHJpbmcgKiluYW1lc3BhY2VVUkkgcXVhbGlmaWVkTmFtZTooTlNTdHJpbmcgKilxdWFsaWZp
ZWROYW1lIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlCiB7CiAgICAgSlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHVud3JhcCgqc2VsZiku
c2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSwgZWMpOwot
ICAgIHJhaXNlT25ET01FcnJvcihlYyk7CisgICAgcmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2Vs
Zikuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSkpOwog
fQogCiAtICh2b2lkKXJlbW92ZUF0dHJpYnV0ZU5TOihOU1N0cmluZyAqKW5hbWVzcGFjZVVSSSBs
b2NhbE5hbWU6KE5TU3RyaW5nICopbG9jYWxOYW1lCkBAIC0zNzUsMTAgKzM2MSw3IEBAIC0gKERP
TUF0dHIgKilzZXRBdHRyaWJ1dGVOb2RlTlM6KERPTUF0dHIgKiluZXdBdHRyCiAgICAgSlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGlmICghbmV3QXR0cikKICAgICAgICAgcmFpc2VU
eXBlRXJyb3JFeGNlcHRpb24oKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01B
dHRyICpyZXN1bHQgPSBraXQodW53cmFwKCpzZWxmKS5zZXRBdHRyaWJ1dGVOb2RlTlMoKmNvcmUo
bmV3QXR0ciksIGVjKS5nZXQoKSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBraXQocmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZiku
c2V0QXR0cmlidXRlTm9kZU5TKCpjb3JlKG5ld0F0dHIpKSkuZ2V0KCkpOwogfQogCiAtIChCT09M
KWhhc0F0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lCkBAIC00MzksMjggKzQyMiwxOSBAQCAtIChE
T01Ob2RlTGlzdCAqKWdldEVsZW1lbnRzQnlDbGFzc05hbWU6KE5TU3RyaW5nICopbmFtZQogLSAo
Qk9PTCltYXRjaGVzOihOU1N0cmluZyAqKXNlbGVjdG9ycwogewogICAgIEpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBCT09MIHJlc3Vs
dCA9IHVud3JhcCgqc2VsZikubWF0Y2hlcyhzZWxlY3RvcnMsIGVjKTsKLSAgICByYWlzZU9uRE9N
RXJyb3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJhaXNlT25ET01FcnJv
cih1bndyYXAoKnNlbGYpLm1hdGNoZXMoc2VsZWN0b3JzKSk7CiB9CiAKIC0gKERPTUVsZW1lbnQg
KiljbG9zZXN0OihOU1N0cmluZyAqKXNlbGVjdG9ycwogewogICAgIEpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01FbGVtZW50ICpy
ZXN1bHQgPSBraXQodW53cmFwKCpzZWxmKS5jbG9zZXN0KHNlbGVjdG9ycywgZWMpKTsKLSAgICBy
YWlzZU9uRE9NRXJyb3IoZWMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGtpdChy
YWlzZU9uRE9NRXJyb3IodW53cmFwKCpzZWxmKS5jbG9zZXN0KHNlbGVjdG9ycykpKTsKIH0KIAog
LSAoQk9PTCl3ZWJraXRNYXRjaGVzU2VsZWN0b3I6KE5TU3RyaW5nICopc2VsZWN0b3JzCiB7CiAg
ICAgSlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIEJPT0wgcmVzdWx0ID0gdW53cmFwKCpzZWxmKS5tYXRjaGVzKHNlbGVjdG9ycywgZWMp
OwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gcmFpc2VPbkRPTUVycm9yKHVud3JhcCgqc2VsZikubWF0Y2hlcyhzZWxlY3RvcnMpKTsKIH0K
IAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL0RPTS9ET01IVE1MRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01IVE1M
RWxlbWVudC5tbQppbmRleCBjMjY1ZDI1N2FhMzlmZjRjOGJkZGM4ZWFkNDdlOTgzNjlkZGUyMzBm
Li5hNDc2OTRjMjg3MjQxMWExYjUyNzU5NTBjODRjMzM0NGQzNjA2Y2YxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9ET00vRE9NSFRNTEVsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYktp
dC9tYWMvRE9NL0RPTUhUTUxFbGVtZW50Lm1tCkBAIC0yMzUsMjYgKzIzNSwxOSBAQCAtIChET01F
bGVtZW50ICopaW5zZXJ0QWRqYWNlbnRFbGVtZW50OihOU1N0cmluZyAqKXdoZXJlIGVsZW1lbnQ6
KERPTUVsZW1lbnQgKillbAogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9uKCk7
Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NRWxlbWVudCAqcmVz
dWx0ID0ga2l0KFdURjo6Z2V0UHRyKElNUEwtPmluc2VydEFkamFjZW50RWxlbWVudCh3aGVyZSwg
KmNvcmUoZWxlbWVudCksIGVjKSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJTVBMLT5pbnNlcnRB
ZGphY2VudEVsZW1lbnQod2hlcmUsICpjb3JlKGVsZW1lbnQpKSkpOwogfQogCiAtICh2b2lkKWlu
c2VydEFkamFjZW50SFRNTDooTlNTdHJpbmcgKil3aGVyZSBodG1sOihOU1N0cmluZyAqKWh0bWwK
IHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSU1QTC0+aW5zZXJ0QWRqYWNlbnRIVE1MKHdo
ZXJlLCBodG1sLCBlYyk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByYWlzZU9uRE9N
RXJyb3IoSU1QTC0+aW5zZXJ0QWRqYWNlbnRIVE1MKHdoZXJlLCBodG1sKSk7CiB9CiAKIC0gKHZv
aWQpaW5zZXJ0QWRqYWNlbnRUZXh0OihOU1N0cmluZyAqKXdoZXJlIHRleHQ6KE5TU3RyaW5nICop
dGV4dAogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBJTVBMLT5pbnNlcnRBZGphY2VudFRl
eHQod2hlcmUsIHRleHQsIGVjKTsKLSAgICByYWlzZU9uRE9NRXJyb3IoZWMpOworICAgIHJhaXNl
T25ET01FcnJvcihJTVBMLT5pbnNlcnRBZGphY2VudFRleHQod2hlcmUsIHRleHQpKTsKIH0KIAog
LSAodm9pZCljbGljawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvRE9NL0RPTU5hbWVk
Tm9kZU1hcC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01OYW1lZE5vZGVNYXAubW0KaW5k
ZXggOGY5MTg0ZWQ4ZWYzNTAzNzFlNDFjMjU4YWZkOWZlNzkwODRmYjAxZC4uNWRkMzk1NjRkZDRm
NGYyMzk2ZjM2YjcyNzkzNmQ4M2M1YTg1NjViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvRE9NL0RPTU5hbWVkTm9kZU1hcC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vRE9N
TmFtZWROb2RlTWFwLm1tCkBAIC02OCwxOSArNjgsMTYgQEAgLSAoRE9NTm9kZSAqKXNldE5hbWVk
SXRlbTooRE9NTm9kZSAqKW5vZGUKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigp
OwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIERPTU5vZGUgKnJlc3Vs
dCA9IGtpdChXVEY6OmdldFB0cihJTVBMLT5zZXROYW1lZEl0ZW0oKmNvcmUobm9kZSksIGVjKSkp
OwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRv
JiBjb3JlTm9kZSA9ICpjb3JlKG5vZGUpOworICAgIGlmICghaXM8V2ViQ29yZTo6QXR0cj4oY29y
ZU5vZGUpKQorICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigpOworICAgIHJldHVybiBr
aXQocmFpc2VPbkRPTUVycm9yKElNUEwtPnNldE5hbWVkSXRlbShkb3duY2FzdDxXZWJDb3JlOjpB
dHRyPihjb3JlTm9kZSkpKS5nZXQoKSk7CiB9CiAKIC0gKERPTU5vZGUgKilyZW1vdmVOYW1lZEl0
ZW06KE5TU3RyaW5nICopbmFtZQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01Ob2Rl
ICpyZXN1bHQgPSBraXQoV1RGOjpnZXRQdHIoSU1QTC0+cmVtb3ZlTmFtZWRJdGVtKG5hbWUsIGVj
KSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJTVBMLT5yZW1vdmVOYW1lZEl0ZW0obmFtZSkpLnB0
cigpKTsKIH0KIAogLSAoRE9NTm9kZSAqKWl0ZW06KHVuc2lnbmVkKWluZGV4CkBAIC05NywyMiAr
OTQsMTMgQEAgLSAoRE9NTm9kZSAqKWdldE5hbWVkSXRlbU5TOihOU1N0cmluZyAqKW5hbWVzcGFj
ZVVSSSBsb2NhbE5hbWU6KE5TU3RyaW5nICopbG9jYWwKIAogLSAoRE9NTm9kZSAqKXNldE5hbWVk
SXRlbU5TOihET01Ob2RlICopbm9kZQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0
aW9uKCk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NTm9kZSAq
cmVzdWx0ID0ga2l0KFdURjo6Z2V0UHRyKElNUEwtPnNldE5hbWVkSXRlbSgqY29yZShub2RlKSwg
ZWMpKSk7Ci0gICAgcmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBbc2VsZiBzZXROYW1lZEl0ZW06bm9kZV07CiB9CiAKIC0gKERPTU5vZGUgKilyZW1v
dmVOYW1lZEl0ZW1OUzooTlNTdHJpbmcgKiluYW1lc3BhY2VVUkkgbG9jYWxOYW1lOihOU1N0cmlu
ZyAqKWxvY2FsTmFtZQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBET01Ob2RlICpyZXN1
bHQgPSBraXQoV1RGOjpnZXRQdHIoSU1QTC0+cmVtb3ZlTmFtZWRJdGVtTlMobmFtZXNwYWNlVVJJ
LCBsb2NhbE5hbWUsIGVjKSkpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4ga2l0KHJhaXNlT25ET01FcnJvcihJTVBMLT5yZW1vdmVOYW1l
ZEl0ZW1OUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkpLnB0cigpKTsKIH0KIAogQGVuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwIGIvU291cmNlL1dl
YktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCmluZGV4IGRiMTBmMGJiNTI5MGFkNTdlYzM2ZGY1
MjgyYjc0YzM2Y2NmMjRlNWEuLjAzOTg2NWYwZTJhNmNiZjExYmM1MDIwYzY0ODY5MWUwYTY0MmFj
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJET01IVE1MQ2xhc3Nlcy5oIgogI2luY2x1ZGUgIldlYktpdEdyYXBoaWNzLmgi
CiAKKyNpbmNsdWRlIDxXZWJDb3JlL0F0dHIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0JTdHJpbmcu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NV2lu
ZG93Lmg+CkBAIC0xMDcwLDkgKzEwNzEsOCBAQCBIUkVTVUxUIERPTUVsZW1lbnQ6OnNldEF0dHJp
YnV0ZShfSW5fIEJTVFIgbmFtZSwgX0luXyBCU1RSIHZhbHVlKQogCiAgICAgV1RGOjpTdHJpbmcg
bmFtZVN0cmluZyhuYW1lLCBTeXNTdHJpbmdMZW4obmFtZSkpOwogICAgIFdURjo6U3RyaW5nIHZh
bHVlU3RyaW5nKHZhbHVlLCBTeXNTdHJpbmdMZW4odmFsdWUpKTsKLSAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lU3RyaW5n
LCB2YWx1ZVN0cmluZywgZWMpOwotICAgIHJldHVybiBlYyA/IEVfRkFJTCA6IFNfT0s7CisgICAg
YXV0byByZXN1bHQgPSBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lU3RyaW5nLCB2YWx1ZVN0
cmluZyk7CisgICAgcmV0dXJuIHJlc3VsdC5oYXNFeGNlcHRpb24oKSA/IEVfRkFJTCA6IFNfT0s7
CiB9CiAgICAgCiBIUkVTVUxUIERPTUVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZShfSW5fIEJTVFIg
LypuYW1lKi8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAKaW5kZXggNDA4ZmE4YTFl
NGZjZDYxZDQyNGIzNTY0MWEzOGY2MGY5YWVlMTNhYi4uZDFmZWEzNWMyMzdkYWYzNjdkMDQ5OGE4
NDA2ODA1YjZkYzZkNDE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENs
YXNzZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcApAQCAt
NTE0LDggKzUxNCw3IEBAIEhSRVNVTFQgRE9NSFRNTEVsZW1lbnQ6OnNldElubmVySFRNTChfSW5f
IEJTVFIgaHRtbCkKICAgICBBU1NFUlQoaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAg
IEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihtX2VsZW1l
bnQpOwogICAgIFN0cmluZyBodG1sU3RyaW5nKGh0bWwsIFN5c1N0cmluZ0xlbihodG1sKSk7Ci0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaHRtbEVsZW1lbnQtPnNldElubmVySFRNTCho
dG1sU3RyaW5nLCBlYyk7CisgICAgaHRtbEVsZW1lbnQtPnNldElubmVySFRNTChodG1sU3RyaW5n
KTsKICAgICByZXR1cm4gU19PSzsKIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01FbGVtZW50LmNwcAppbmRleCA1MjZkMDU3ODcxMmM0YWUyNDlhMWM3Yzc5
YjFlNWQyMDdjNTljMGY2Li4zZTNkNjZiOGQzYjBhY2QzNzgwY2E3ODU5MGVhNmY5NWYyZWY4MTNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudC5jcHAKQEAg
LTYxMywxMCArNjEzLDkgQEAgdm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZShX
ZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSwKICAgICBXZWJDb3JlOjpF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CiAgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShjb252ZXJ0
ZWROYW1lLCBjb252ZXJ0ZWRWYWx1ZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGl0ZW0tPnNldEF0dHJpYnV0ZShjb252ZXJ0ZWROYW1lLCBjb252ZXJ0ZWRWYWx1ZSk7Cisg
ICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgp
KTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAg
LTY1MCwxMyArNjQ5LDEzIEBAIFdlYktpdERPTUF0dHIqIHdlYmtpdF9kb21fZWxlbWVudF9zZXRf
YXR0cmlidXRlX25vZGUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgV2ViCiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwogICAgIFdlYkNvcmU6OkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV2ViQ29yZTo6QXR0ciogY29udmVydGVk
TmV3QXR0ciA9IFdlYktpdDo6Y29yZShuZXdBdHRyKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6QXR0cj4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnNldEF0dHJpYnV0ZU5vZGUoKmNvbnZlcnRlZE5ld0F0dHIsIGVjKSk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0QXR0cmlidXRlTm9kZSgq
Y29udmVydGVkTmV3QXR0cik7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCkuZ2V0KCkpOwogfQogCiBXZWJLaXRET01BdHRyKiB3ZWJr
aXRfZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZV9ub2RlKFdlYktpdERPTUVsZW1lbnQqIHNl
bGYsIFdlYktpdERPTUF0dHIqIG9sZEF0dHIsIEdFcnJvcioqIGVycm9yKQpAQCAtNjY3LDEzICs2
NjYsMTMgQEAgV2ViS2l0RE9NQXR0ciogd2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1
dGVfbm9kZShXZWJLaXRET01FbGVtZW50KiBzZWxmLAogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KCFlcnJvciB8fCAhKmVycm9yLCAwKTsKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkF0dHIqIGNvbnZlcnRlZE9sZEF0dHIgPSBX
ZWJLaXQ6OmNvcmUob2xkQXR0cik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5yZW1vdmVBdHRyaWJ1dGVOb2RlKCpjb252ZXJ0ZWRPbGRBdHRyLCBlYykpOwotICAgIGlm
IChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPnJlbW92ZUF0dHJpYnV0ZU5vZGUoKmNvbnZl
cnRlZE9sZEF0dHIpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhyZXN1bHQucmVsZWFzZUV4
Y2VwdGlvbigpLmNvZGUoKSk7CiAgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQocmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpLnB0cigpKTsKIH0KIAogV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24q
IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfYXNfaHRtbF9jb2xs
ZWN0aW9uKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQpAQCAtNzIw
LDEwICs3MTksOSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25zKFdl
YktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYQogICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VVUkkp
OwogICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFF1YWxpZmllZE5hbWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgocXVhbGlmaWVkTmFtZSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZU5TKGNvbnZlcnRlZE5hbWVzcGFjZVVS
SSwgY29udmVydGVkUXVhbGlmaWVkTmFtZSwgY29udmVydGVkVmFsdWUsIGVjKTsKLSAgICBpZiAo
ZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgYXV0byByZXN1bHQgPSBpdGVtLT5zZXRBdHRyaWJ1dGVOUyhjb252ZXJ0ZWROYW1l
c3BhY2VVUkksIGNvbnZlcnRlZFF1YWxpZmllZE5hbWUsIGNvbnZlcnRlZFZhbHVlKTsKKyAgICBp
ZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwog
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CiAgICAgfQogfQpAQCAtNzc0
LDEzICs3NzIsMTMgQEAgV2ViS2l0RE9NQXR0ciogd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRy
aWJ1dGVfbm9kZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxmLAogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkF0dHIqIGNvbnZlcnRlZE5ld0F0
dHIgPSBXZWJLaXQ6OmNvcmUobmV3QXR0cik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5zZXRBdHRyaWJ1dGVOb2RlTlMoKmNvbnZlcnRlZE5ld0F0dHIsIGVjKSk7Ci0g
ICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0QXR0cmlidXRlTm9kZU5TKCpj
b252ZXJ0ZWROZXdBdHRyKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KHJlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKS5nZXQoKSk7CiB9CiAKIGdib29sZWFuIHdlYmtpdF9kb21f
ZWxlbWVudF9oYXNfYXR0cmlidXRlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiBuYW1lKQpAQCAtODc0LDEzICs4NzIsMTMgQEAgZ2Jvb2xlYW4gd2Via2l0X2RvbV9lbGVtZW50
X21hdGNoZXMoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG8KICAg
ICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgRkFMU0UpOwogICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkU2VsZWN0b3JzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7
Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gaXRlbS0+bWF0Y2hlcyhjb252ZXJ0ZWRTZWxlY3RvcnMsIGVjKTsKLSAgICBpZiAoZWMpIHsK
LSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Cisg
ICAgYXV0byByZXN1bHQgPSBpdGVtLT5tYXRjaGVzKGNvbnZlcnRlZFNlbGVjdG9ycyk7CisgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsK
ICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKTsKIH0KIAogV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVt
ZW50X2Nsb3Nlc3QoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9y
cywgR0Vycm9yKiogZXJyb3IpCkBAIC04OTEsMzAgKzg4OSwxOCBAQCBXZWJLaXRET01FbGVtZW50
KiB3ZWJraXRfZG9tX2VsZW1lbnRfY2xvc2VzdChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhcgogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsK
ICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVjdG9ycyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzZWxl
Y3RvcnMpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2xvc2Vz
dChjb252ZXJ0ZWRTZWxlY3RvcnMsIGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0
ID0gaXRlbS0+Y2xvc2VzdChjb252ZXJ0ZWRTZWxlY3RvcnMpOworICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7CiAgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAogZ2Jvb2xl
YW4gd2Via2l0X2RvbV9lbGVtZW50X3dlYmtpdF9tYXRjaGVzX3NlbGVjdG9yKFdlYktpdERPTUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKQogewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxlY3RvcnMsIEZBTFNFKTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCghZXJyb3IgfHwgISplcnJvciwgRkFMU0UpOwotICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2VsZWN0
b3JzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7Ci0gICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+bWF0Y2hlcyhj
b252ZXJ0ZWRTZWxlY3RvcnMsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gd2Via2l0X2RvbV9lbGVtZW50X21hdGNoZXMoc2VsZiwgc2VsZWN0b3JzLCBlcnJvcik7CiB9
CiAKIHZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3dlYmtpdF9yZXF1ZXN0X2Z1bGxzY3JlZW4oV2Vi
S2l0RE9NRWxlbWVudCogc2VsZikKQEAgLTkzNSwxMyArOTIxLDEzIEBAIFdlYktpdERPTUVsZW1l
bnQqIHdlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfZWxlbWVudChXZWJLaXRET01F
bGVtZW50KiBzCiAgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRXaGVyZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh3aGVyZSk7CiAgICAgV2ViQ29yZTo6RWxlbWVudCogY29udmVydGVkRWxlbWVudCA9IFdlYktp
dDo6Y29yZShlbGVtZW50KTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPmluc2VydEFkamFjZW50RWxlbWVudChjb252ZXJ0ZWRXaGVyZSwgKmNvbnZlcnRlZEVsZW1l
bnQsIGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+aW5zZXJ0QWRq
YWNlbnRFbGVtZW50KGNvbnZlcnRlZFdoZXJlLCAqY29udmVydGVkRWxlbWVudCk7CisgICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwog
fQogCiB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfaHRtbChXZWJLaXRE
T01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogd2hlcmUsIGNvbnN0IGdjaGFyKiBodG1sLCBH
RXJyb3IqKiBlcnJvcikKQEAgLTk1NCwxMCArOTQwLDkgQEAgdm9pZCB3ZWJraXRfZG9tX2VsZW1l
bnRfaW5zZXJ0X2FkamFjZW50X2h0bWwoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFdoZXJlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHdoZXJl
KTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRIdG1sID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KGh0bWwpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPmlu
c2VydEFkamFjZW50SFRNTChjb252ZXJ0ZWRXaGVyZSwgY29udmVydGVkSHRtbCwgZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPmluc2VydEFkamFjZW50SFRNTChjb252
ZXJ0ZWRXaGVyZSwgY29udmVydGVkSHRtbCk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJl
c3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAgLTk3MiwxMCArOTU3LDkgQEAgdm9pZCB3ZWJr
aXRfZG9tX2VsZW1lbnRfaW5zZXJ0X2FkamFjZW50X3RleHQoV2ViS2l0RE9NRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIKICAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwogICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFdoZXJlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHdoZXJlKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUZXh0ID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHRleHQpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGl0ZW0tPmluc2VydEFkamFjZW50VGV4dChjb252ZXJ0ZWRXaGVyZSwgY29udmVydGVkVGV4
dCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPmluc2VydEFkamFj
ZW50VGV4dChjb252ZXJ0ZWRXaGVyZSwgY29udmVydGVkVGV4dCk7CisgICAgaWYgKHJlc3VsdC5o
YXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAgLTEyNjMsMTAgKzEyNDcs
OSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfaW5uZXJfaHRtbChXZWJLaXRET01FbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9y
IHx8ICEqZXJyb3IpOwogICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0
ZW0tPnNldElubmVySFRNTChjb252ZXJ0ZWRWYWx1ZSwgZWMpOwotICAgIGlmIChlYykgewotICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGl0ZW0tPnNldElubmVySFRNTChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0KQEAgLTEyODgs
MTAgKzEyNzEsOSBAQCB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfb3V0ZXJfaHRtbChXZWJL
aXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdQogICAgIGdfcmV0dXJuX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IpOwogICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGl0ZW0tPnNldE91dGVySFRNTChjb252ZXJ0ZWRWYWx1ZSwgZWMpOwotICAgIGlmIChl
YykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVj
KTsKKyAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPnNldE91dGVySFRNTChjb252ZXJ0ZWRWYWx1ZSk7
CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29k
ZSgpKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmNw
cAppbmRleCAzNWMxN2ZlMmZkNmZjZTZkNWE1Y2IzNWM5ZmVkYjUzNTc2OTQ1YmI5Li5hODJmMWVm
YTEyMDU2MjM2ODI0NDU1MjU5NzNhM2U0MzcwZDlmNjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hbWVk
Tm9kZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXAuY3BwCkBAIC0yMCwxNiArMjAsMTcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRET01OYW1lZE5vZGVNYXAu
aCIKIAotI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKICNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTU5hbWVkTm9kZU1hcFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2Rl
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0F0dHIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgotI2luY2x1ZGUgIldlYktpdERPTU5h
bWVkTm9kZU1hcFByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgot
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IApAQCAtMTUyLDEzICsxNTMsMTggQEAgV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9u
b2RlX21hcF9zZXRfbmFtZWRfaXRlbShXZWJLaXRET01OYW1lZE5vZGVNYXAqIHMKICAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CiAgICAgV2ViQ29yZTo6TmFt
ZWROb2RlTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6Ok5vZGUq
IGNvbnZlcnRlZE5vZGUgPSBXZWJLaXQ6OmNvcmUobm9kZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5zZXROYW1lZEl0ZW0oKmNvbnZlcnRlZE5vZGUsIGVjKSk7Ci0g
ICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgIGlmICghaXM8V2ViQ29yZTo6QXR0cj4oKmNvbnZlcnRlZE5vZGUpKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoV2ViQ29y
ZTo6VHlwZUVycm9yKTsKICAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+c2V0TmFtZWRJdGVt
KGRvd25jYXN0PFdlYkNvcmU6OkF0dHI+KCpjb252ZXJ0ZWROb2RlKSk7CisgICAgaWYgKHJlc3Vs
dC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KS5nZXQoKSk7CiB9CiAKIFdlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBf
cmVtb3ZlX25hbWVkX2l0ZW0oV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBjb25zdCBnY2hh
ciogbmFtZSwgR0Vycm9yKiogZXJyb3IpCkBAIC0xNjksMTMgKzE3NSwxMyBAQCBXZWJLaXRET01O
b2RlKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3JlbW92ZV9uYW1lZF9pdGVtKFdlYktpdERP
TU5hbWVkTm9kZU1hcAogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9y
LCAwKTsKICAgICBXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OChuYW1lKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8
V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJlbW92ZU5h
bWVkSXRlbShjb252ZXJ0ZWROYW1lLCBlYykpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGl0ZW0tPnJlbW92ZU5hbWVkSXRlbShjb252ZXJ0ZWROYW1lKTsKKyAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBlY2Rlc2MocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKS5wdHIoKSk7CiB9
CiAKIFdlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfaXRlbShXZWJLaXRE
T01OYW1lZE5vZGVNYXAqIHNlbGYsIGd1bG9uZyBpbmRleCkKQEAgLTIwMiwxOSArMjA4LDcgQEAg
V2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfbmFtZWRfaXRlbV9u
cyhXZWJLaXRET01OYW1lZE5vZGVNYXAKIAogV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1l
ZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYs
IFdlYktpdERPTU5vZGUqIG5vZGUsIEdFcnJvcioqIGVycm9yKQogewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX05BTUVEX05PREVfTUFQKHNlbGYpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX05PREUobm9kZSksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkTm9k
ZSA9IFdlYktpdDo6Y29yZShub2RlKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPnNldE5hbWVkSXRlbSgqY29udmVydGVkTm9kZSwgZWMpKTsKLSAgICBpZiAoZWMpIHsK
LSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0g
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiB3ZWJraXRfZG9t
X25hbWVkX25vZGVfbWFwX3NldF9uYW1lZF9pdGVtKHNlbGYsIG5vZGUsIGVycm9yKTsKIH0KIAog
V2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9yZW1vdmVfbmFtZWRfaXRl
bV9ucyhXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VV
UkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUsIEdFcnJvcioqIGVycm9yKQpAQCAtMjI3LDEzICsy
MjEsMTMgQEAgV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9yZW1vdmVf
bmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5vZGUKICAgICBXZWJDb3JlOjpOYW1lZE5vZGVN
YXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
TmFtZXNwYWNlVVJJID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFjZVVSSSk7CiAgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkTG9jYWxOYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGxv
Y2FsTmFtZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRy
PFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5yZW1vdmVO
YW1lZEl0ZW1OUyhjb252ZXJ0ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZExvY2FsTmFtZSwgZWMp
KTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgYXV0byByZXN1bHQgPSBpdGVtLT5yZW1vdmVOYW1lZEl0ZW1O
Uyhjb252ZXJ0ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZExvY2FsTmFtZSk7CisgICAgaWYgKHJl
c3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkucHRyKCkp
OwogfQogCiBndWxvbmcgd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfbGVuZ3RoKFdlYktp
dERPTU5hbWVkTm9kZU1hcCogc2VsZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01FbGVtZW50Lm1tCmlu
ZGV4IGE1MzQ1MGZkMjc3ZWNjNTdiYmJmMDA5M2JjY2I1ZTI4MTE3YWU4MmUuLjJjMDZjZWM2YTUw
M2M3NTYzNjZjMWQ2ZGJmMmU2Njc5NTYzNDk0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQubW0KKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NRWxl
bWVudC5tbQpAQCAtNDUsOSArNDUsNyBAQCAtIChOU1N0cmluZyAqKWdldEF0dHJpYnV0ZTooTlNT
dHJpbmcgKilhdHRyaWJ1dGUKIAogLSAodm9pZClzZXRBdHRyaWJ1dGU6KE5TU3RyaW5nICopbmFt
ZSB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZQogewotICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcg
YWJvdXQgdGhlIGV4Y2VwdGlvbi4KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjOwotICAg
IGRvd25jYXN0PFdlYkNvcmU6OkVsZW1lbnQ+KCpfaW1wbCkuc2V0QXR0cmlidXRlKG5hbWUsIHZh
bHVlLCBlYyk7CisgICAgZG93bmNhc3Q8V2ViQ29yZTo6RWxlbWVudD4oKl9pbXBsKS5zZXRBdHRy
aWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCiAtIChOU1N0cmluZyAqKXRhZ05hbWUKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2
NDliMGI2MTgwNzA3NWIyZWE2MzJlOTE3MDE1ZjBkZmYxNzExMWY0Li5mNmQxZjliMmQxZTBjOTVh
ZDQwYWQ4OTY5N2E1NGQ0ZjBiZTM1NzM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTYtMTAt
MzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgRWxlbWVu
dCwgTmFtZWROb2RlTWFwLCBhbmQgRE9NU3RyaW5nTWFwIGZyb20gRXhjZXB0aW9uQ29kZSB0byBF
eGNlcHRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDIwNgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgICog
ZmFzdC9kb20vcmVzb3VyY2VzL3NoYWRvdy10ZXN0LWRyaXZlci5qczogRGVsZXRlZC4gVW51c2Vk
LgorCiAyMDE2LTEwLTMwICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBVc2UgSGFyZkJ1enogb3QtbWF0aCBBUEkgdG8gcGFyc2UgdGhlIE9wZW5UeXBlIE1BVEgg
dGFibGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9zaGFkb3ct
dGVzdC1kcml2ZXIuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvc2hhZG93LXRl
c3QtZHJpdmVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWVlYjdmOWZhMWM4
MTg2YjA1NTRjNmY0MGI5ZWFkNjVmZDNhNWVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9zaGFkb3ct
dGVzdC1kcml2ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotLy8KLS8vIHNo
YWRvdy10ZXN0LWRyaXZlci5qcwotLy8KLS8vIFRvIHVzZSBzaGFkb3ctdGVzdC1kcml2ZXIuanMs
IHlvdSBzaG91bGQgaGF2ZQotLy8gICA8ZGl2IGlkPSJhY3R1YWwtY29udGFpbmVyIj48L2Rpdj4K
LS8vICAgPGRpdiBpZD0iZXhwZWN0LWNvbnRhaW5lciI+PC9kaXY+Ci0vLyAgIDxwcmUgaWQ9ImNv
bnNvbGUiPjwvcHJlPgotLy8gaW4geW91ciBib2R5LgotLy8KLS8vIFRoZW4sIGRlZmluZSB0ZXN0
IGZ1bmN0aW9ucyBoYXZpbmcgb25lIGFyZ3VtZW50ICdjYWxsSWZEb25lJy4KLS8vIGNhbGxJZkRv
bmUgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHlvdXIgdGVzdCBmdW5jdGlvbiBmaW5pc2hlZC4KLS8v
Ci0vLyBJbiBib2R5Lm9ubG9hZCwgY2FsbCBkb1Rlc3QodGVzdEZ1bmNzKSB3aGVyZSB0ZXN0RnVu
Y3MgaXMgYW4gYXJyYXkgb2YgdGVzdCBmdW5jdGlvbnMuCi0vLwotLy8gU2VlIGNvbnRlbnQtZWxl
bWVudC1tb3ZlLmh0bWwgYXMgYW4gZXhhbXBsZS4KLS8vCi0KLWZ1bmN0aW9uIGxvZyhtZXNzYWdl
KSB7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwgKz0g
KG1lc3NhZ2UgKyAiXG4iKTsKLX0KLQotZnVuY3Rpb24gcmVtb3ZlQWxsQ2hpbGRyZW4oZWxlbSkg
ewotICAgIHdoaWxlIChlbGVtLmZpcnN0Q2hpbGQpCi0gICAgICAgIGVsZW0ucmVtb3ZlQ2hpbGQo
ZWxlbS5maXJzdENoaWxkKTsKLX0KLQotZnVuY3Rpb24gY2xlYW5VcCgpIHsKLSAgICByZW1vdmVB
bGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpKTsK
LSAgICByZW1vdmVBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNv
bnRhaW5lcicpKTsKLX0KLQotZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVyTGluZXModGV4dCkgewot
ICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJyk7Ci0gICAgbGluZXMuc3BsaWNlKDAsIDIp
OwotICAgIHJldHVybiBsaW5lcy5qb2luKCdcbicpOwotfQotCi1mdW5jdGlvbiBjaGVjaygpIHsK
LSAgICB2YXIgZXhwZWN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVj
dC1jb250YWluZXInKTsKLSAgICB2YXIgYWN0dWFsQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKTsKLSAgICB2YXIgb3JpZ2luYWxEaXNwbGF5VmFs
dWUgPSBhY3R1YWxDb250YWluZXIuc3R5bGUuZGlzcGxheTsKLSAgICBhY3R1YWxDb250YWluZXIu
c3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICBleHBlY3RDb250YWluZXIub2Zmc2V0TGVmdDsK
LSAgICB2YXIgcmVmQ29udGFpbmVyUmVuZGVyVHJlZSA9IGludGVybmFscy5lbGVtZW50UmVuZGVy
VHJlZUFzVGV4dChleHBlY3RDb250YWluZXIpOwotICAgIHZhciByZWZSZW5kZXJUcmVlID0gcmVt
b3ZlQ29udGFpbmVyTGluZXMocmVmQ29udGFpbmVyUmVuZGVyVHJlZSk7Ci0gICAgYWN0dWFsQ29u
dGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBvcmlnaW5hbERpc3BsYXlWYWx1ZTsKLQotICAgIG9yaWdp
bmFsRGlzcGxheVZhbHVlID0gZXhwZWN0Q29udGFpbmVyLnN0eWxlLmRpc3BsYXk7Ci0gICAgZXhw
ZWN0Q29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgYWN0dWFsQ29udGFpbmVy
Lm9mZnNldExlZnQ7Ci0gICAgdmFyIHRhcmdldENvbnRhaW5lclJlbmRlclRyZWUgPSBpbnRlcm5h
bHMuZWxlbWVudFJlbmRlclRyZWVBc1RleHQoYWN0dWFsQ29udGFpbmVyKTsKLSAgICB2YXIgdGFy
Z2V0UmVuZGVyVHJlZSA9IHJlbW92ZUNvbnRhaW5lckxpbmVzKHRhcmdldENvbnRhaW5lclJlbmRl
clRyZWUpOwotICAgIGV4cGVjdENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gb3JpZ2luYWxEaXNw
bGF5VmFsdWU7Ci0KLSAgICBpZiAodGFyZ2V0UmVuZGVyVHJlZSA9PSByZWZSZW5kZXJUcmVlKQot
ICAgICAgICBsb2coIlBBU1MiKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbG9nKCJGQUlMIik7Ci0g
ICAgICAgIGxvZygiRXhwZWN0ZWQ6ICIpOwotICAgICAgICBsb2cocmVmUmVuZGVyVHJlZSk7Ci0g
ICAgICAgIGxvZygiQWN0dWFsOiAiKTsKLSAgICAgICAgbG9nKHRhcmdldFJlbmRlclRyZWUpOwot
ICAgIH0KLX0KLQotZnVuY3Rpb24gY3JlYXRlU3BhbldpdGhUZXh0KHRleHQsIGNsYXNzTmFtZSkg
ewotICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwotICAgIHNw
YW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpOwotICAgIGlmIChj
bGFzc05hbWUpCi0gICAgICAgIHNwYW4uY2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAgIHJldHVy
biBzcGFuOwotfQotCi1mdW5jdGlvbiBjcmVhdGVDb250ZW50V2l0aFNlbGVjdChzZWxlY3QsIGZh
bGxiYWNrVGV4dCkgewotICAgIHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNyZWF0ZUNvbnRlbnRF
bGVtZW50KCk7Ci0gICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3NlbGVjdCcsIHNlbGVjdCk7Ci0g
ICAgaWYgKGZhbGxiYWNrVGV4dCkKLSAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChjcmVhdGVT
cGFuV2l0aFRleHQoZmFsbGJhY2tUZXh0KSk7Ci0KLSAgICByZXR1cm4gY29udGVudDsKLX0KLQot
ZnVuY3Rpb24gY3JlYXRlQ29udGVudFdpdGhUZXh0KGZhbGxiYWNrVGV4dCkgewotICAgIHZhciBj
b250ZW50ID0gaW50ZXJuYWxzLmNyZWF0ZUNvbnRlbnRFbGVtZW50KCk7Ci0gICAgaWYgKGZhbGxi
YWNrVGV4dCkKLSAgICAgICAgY29udGVudC5pbm5lckhUTUwgPSBmYWxsYmFja1RleHQ7Ci0KLSAg
ICByZXR1cm4gY29udGVudDsKLX0KLQotZnVuY3Rpb24gYXBwZW5kU2hhZG93KHRhcmdldCwgc2Vs
ZWN0KSB7Ci0gICAgdmFyIHJvb3QgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdCh0YXJnZXQp
OwotCi0gICAgdmFyIGNvbnRlbnQgPSBpbnRlcm5hbHMuY3JlYXRlQ29udGVudEVsZW1lbnQoKTsK
LSAgICBjb250ZW50LnNldEF0dHJpYnV0ZSgnc2VsZWN0Jywgc2VsZWN0KTsKLSAgICBjb250ZW50
LmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiRkFMTEJBQ0siKSk7Ci0KLSAgICByb290
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ7U0hBRE9XOiAiKSk7Ci0gICAg
cm9vdC5hcHBlbmRDaGlsZChjb250ZW50KTsKLSAgICByb290LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCJ9IikpOwotfQotCi1mdW5jdGlvbiBhcHBlbmRTaGFkb3dEZWVwKHRh
cmdldCwgc2VsZWN0KSB7Ci0gICAgdmFyIHJvb3QgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9v
dCh0YXJnZXQpOwotCi0gICAgdmFyIGNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOwotICAgIHsKLSAgICAgICAgdmFyIGNvbnRlbnQgPSBpbnRlcm5hbHMuY3JlYXRlQ29udGVu
dEVsZW1lbnQoKTsKLSAgICAgICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3NlbGVjdCcsIHNlbGVj
dCk7Ci0gICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJGQUxM
QkFDSyIpKTsKLQotICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgie0lOTkVSOiAiKSk7Ci0gICAgICAgIGNoaWxkLmFwcGVuZENoaWxkKGNvbnRlbnQpOwot
ICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgifSIpKTsK
LSAgICB9Ci0KLSAgICByb290LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ7
U0hBRE9XOiAiKSk7Ci0gICAgcm9vdC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgcm9vdC5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgifSIpKTsKLX0KLQotZnVuY3Rpb24gZG9U
ZXN0SWZMZWZ0KHJlc3RUZXN0cykgewotICAgIHZhciB0ZXN0ID0gcmVzdFRlc3RzLnNoaWZ0KCk7
Ci0gICAgaWYgKHRlc3QgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIGRvbmVUZXN0KCk7Ci0KLSAg
ICB2YXIgY2FsbElmRG9uZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgY2hlY2soKTsKLSAgICAgICAgICAgIGNsZWFuVXAoKTsKLSAg
ICAgICAgICAgIGRvVGVzdElmTGVmdChyZXN0VGVzdHMpOwotICAgICAgICB9LCAwKTsKLSAgICB9
OwotCi0gICAgbG9nKHRlc3QubmFtZSk7Ci0gICAgdGVzdChjYWxsSWZEb25lKTsKLX0KLQotZnVu
Y3Rpb24gZG9uZVRlc3QoKSB7Ci0gICAgbG9nKCJURVNUIENPTVBMRVRFRCIpOwotICAgIGlmICh3
aW5kb3cudGVhckRvd25PbmNlKQotICAgICAgICB3aW5kb3cudGVhckRvd25PbmNlKCk7Ci0gICAg
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19Ci0KLS8vIEEgdGVzdCBkcml2ZXIuIENhbGwgdGhp
cyBib2R5Lm9ubG9hZC4KLWZ1bmN0aW9uIGRvVGVzdCh0ZXN0cykgewotICAgIGlmICh3aW5kb3cu
c2V0VXBPbmNlKQotICAgICAgICB3aW5kb3cuc2V0VXBPbmNlKCk7Ci0KLSAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpIHsKLSAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci0gICAg
ICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwotICAgIH0KLQotICAgIGNsZWFuVXAoKTsKLSAg
ICBkb1Rlc3RJZkxlZnQodGVzdHMpOwotfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>