<?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>223148</bug_id>
          
          <creation_ts>2021-03-13 02:45:54 -0800</creation_ts>
          <short_desc>Improve coding style of CSSPropertyAnimation.cpp</short_desc>
          <delta_ts>2021-03-15 00:43:12 -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>Animations</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=223124</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=223173</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antoine Quint">graouts</reporter>
          <assigned_to name="Antoine Quint">graouts</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>graouts</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1739131</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-03-13 02:45:54 -0800</bug_when>
    <thetext>Darin provided review feedback in bug 223124 which would really apply to most of CSSPropertyAnimation.cpp. This bug is to ensure that we:

- use final instead of override where applicable
- put override methods in private sections
- don&apos;t abbreviate parameters

There may be more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739147</commentid>
    <comment_count>1</comment_count>
      <attachid>423102</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-03-13 07:43:25 -0800</bug_when>
    <thetext>Created attachment 423102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739148</commentid>
    <comment_count>2</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-03-13 07:47:43 -0800</bug_when>
    <thetext>The patch is failing to apply due to the GitHub mirror being way behind :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739150</commentid>
    <comment_count>3</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-03-13 08:09:14 -0800</bug_when>
    <thetext>(In reply to Antoine Quint from comment #2)
&gt; The patch is failing to apply due to the GitHub mirror being way behind :(
That has been fixed now. Your patch is being processed by EWS now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739175</commentid>
    <comment_count>4</comment_count>
      <attachid>423108</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-03-13 13:40:17 -0800</bug_when>
    <thetext>Created attachment 423108
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739261</commentid>
    <comment_count>5</comment_count>
      <attachid>423108</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-14 13:24:05 -0700</bug_when>
    <thetext>Comment on attachment 423108
Patch

A lot of this code also uses pointers that are required to be non-null rather than references. Like the RenderStyle and the clients.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739269</commentid>
    <comment_count>6</comment_count>
      <attachid>423108</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-14 14:19:13 -0700</bug_when>
    <thetext>Comment on attachment 423108
Patch

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

&gt; Source/WebCore/animation/CSSPropertyAnimation.cpp:2249
&gt;  // Returns true if we need to start animation timers
&gt; -void CSSPropertyAnimation::blendProperties(const CSSPropertyBlendingClient* anim, CSSPropertyID prop, RenderStyle* dst, const RenderStyle* a, const RenderStyle* b, double progress)
&gt; +void CSSPropertyAnimation::blendProperties(const CSSPropertyBlendingClient* client, CSSPropertyID property, RenderStyle* destination, const RenderStyle* from, const RenderStyle* to, double progress)

Can this comment be removed? The function returns void.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739315</commentid>
    <comment_count>7</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-03-15 00:38:06 -0700</bug_when>
    <thetext>Committed r274409 (235276@main): &lt;https://commits.webkit.org/235276@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739316</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-15 00:39:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/75420721&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739317</commentid>
    <comment_count>9</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-03-15 00:40:25 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #6)
&gt; Comment on attachment 423108 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=423108&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/animation/CSSPropertyAnimation.cpp:2249
&gt; &gt;  // Returns true if we need to start animation timers
&gt; &gt; -void CSSPropertyAnimation::blendProperties(const CSSPropertyBlendingClient* anim, CSSPropertyID prop, RenderStyle* dst, const RenderStyle* a, const RenderStyle* b, double progress)
&gt; &gt; +void CSSPropertyAnimation::blendProperties(const CSSPropertyBlendingClient* client, CSSPropertyID property, RenderStyle* destination, const RenderStyle* from, const RenderStyle* to, double progress)
&gt; 
&gt; Can this comment be removed? The function returns void.

Fixed in commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739320</commentid>
    <comment_count>10</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-03-15 00:43:12 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 423108 [details]
&gt; Patch
&gt; 
&gt; A lot of this code also uses pointers that are required to be non-null
&gt; rather than references. Like the RenderStyle and the clients.

I&apos;ll look into that in bug 223173.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423102</attachid>
            <date>2021-03-13 07:43:25 -0800</date>
            <delta_ts>2021-03-13 13:40:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223148-20210313164323.patch</filename>
            <type>text/plain</type>
            <size>90939</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0Mzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmQwYmJjNzU2OGM4NzEz
NjE2OTgxZjk1YThiOTNkNzQxNWZlOGMwZS4uYjQ3MzkxZWIxMGEzNTcxMmJmNDJkMjFlNWQ1NmRl
NmY2NTZiZThjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDIxLTAzLTEzICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIEltcHJvdmUgY29kaW5n
IHN0eWxlIG9mIENTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzMTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXMgbXVjaCBhcyBwb3NzaWJsZSwgZG8gdGhlIGZv
bGxvd2luZzoKKworICAgICAgICAxLiBtYXJrIGNsYXNzZXMgYXMgZmluYWwKKyAgICAgICAgMi4g
bWFyayBvdmVycmlkZGVuIG1ldGhvZHMgYXMgZmluYWwKKyAgICAgICAgMy4gbW92ZSBvdmVycmlk
ZGVuIG1ldGhvZHMgaW4gcHJpdmF0ZSBzZWN0aW9ucworICAgICAgICA0LiBmYWlsaW5nIHRoYXQs
IG1vdmUgdGhlbSB0byBwcm90ZWN0ZWQgc2VjdGlvbnMKKyAgICAgICAgNS4gc3RheSBjbGVhciBm
cm9tIGFiYnJldmlhdGVkIHRlcm1zCisgICAgICAgICAgICAtIHByb3AgPT4gcHJvcGVydHkKKyAg
ICAgICAgICAgIC0gYW5pbSA9PiBjbGllbnQKKyAgICAgICAgICAgIC0gZHN0ID0+IGRlc3RpbmF0
aW9uCisgICAgICAgIDYuIHVzZSBmcm9tL3RvIGFzIHBhcmFtZXRlciBuYW1lcyBpbnN0ZWFkIG9m
IGEvYiBmb3IgYW55IG1ldGhvZAorICAgICAgICAgICB3aGVyZSB0aGUgcm9sZSBvZiB0aGUgcGFy
YW1ldGVycyB3YXJyYW50IGl0IChlZy4gYmxlbmQsIGNhbkludGVycG9sYXRlKQorCisgICAgICAg
IFRoaXMgc2hvdWxkIGdyZWF0bHkgaW1wcm92ZSB0aGUgY29kaW5nIHN0eWxlIHVzZWQgdGhyb3Vn
aG91dCBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKyAgICAgICAgYW5kIG1ha2UgaXQgY29oZXNp
dmUuCisKKyAgICAgICAgKiBhbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRmlsdGVy
T3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpibGVuZEZpbHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlOjpBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2U6OnByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlckdl
dHRlcjo6UHJvcGVydHlXcmFwcGVyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5
V3JhcHBlckdldHRlcjo6dmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlX
cmFwcGVyOjpQcm9wZXJ0eVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVmQ291bnRlZFBy
b3BlcnR5V3JhcHBlcjo6UmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpjYW5JbnRlcnBvbGF0ZUxlbmd0aHMpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW50ZXJw
b2xhdGVMZW5ndGhWYXJpYW50cyk6CisgICAgICAgIChXZWJDb3JlOjpOb25OZWdhdGl2ZUZsb2F0
UHJvcGVydHlXcmFwcGVyOjpOb25OZWdhdGl2ZUZsb2F0UHJvcGVydHlXcmFwcGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlBbmltYXRpb246OmlzUHJvcGVydHlBbmltYXRhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlBy
b3BlcnR5SXNBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6cHJvcGVydGllc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5p
bWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c2NyZXRlUHJvcGVydHlXcmFwcGVyOjpEaXNjcmV0ZVByb3BlcnR5V3JhcHBlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGhQcm9wZXJ0eVdyYXBwZXI6Okxlbmd0aFByb3BlcnR5
V3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMZW5ndGhWYXJpYW50UHJvcGVy
dHlXcmFwcGVyOjpMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Okxlbmd0aEJveFByb3BlcnR5V3JhcHBlcjo6TGVuZ3RoQm94UHJvcGVydHlX
cmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlckNsaXBQ
YXRoOjpQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3M6OlByb3BlcnR5V3JhcHBlckZv
bnRWYXJpYXRpb25TZXR0aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eVdyYXBwZXJTaGFwZTo6UHJvcGVydHlXcmFwcGVyU2hhcGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcjo6U3R5bGVJbWFnZVByb3BlcnR5V3Jh
cHBlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2NlbGVyYXRlZFByb3BlcnR5V3Jh
cHBlcjo6QWNjZWxlcmF0ZWRQcm9wZXJ0eVdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UHJvcGVydHlXcmFwcGVyRmlsdGVyOjpQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyU2hhZG93OjpQcm9wZXJ0eVdy
YXBwZXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVy
U2hhZG93OjpibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlclNoYWRvdzo6YmxlbmRNaXNtYXRjaGVk
U2hhZG93TGlzdHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlX
cmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I6OlByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlck1heWJlSW52YWxp
ZENvbG9yOjp2YWx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcjo6UHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVj
dGVkQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVyUHJvcGVydHlX
cmFwcGVyOjpGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI6OkZpbGxMYXllclBvc2l0aW9u
UHJvcGVydHlXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGxMYXllclN0
eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXI6OkZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBw
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVyc1Byb3BlcnR5V3JhcHBl
cjo6RmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXI6OlNob3J0aGFuZFByb3BlcnR5V3JhcHBlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXI6OiBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJGbGV4OjpQcm9w
ZXJ0eVdyYXBwZXJGbGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3Jh
cHBlclNWR1BhaW50OjpQcm9wZXJ0eVdyYXBwZXJTVkdQYWludCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJGb250U3R5bGU6OlByb3BlcnR5V3JhcHBlckZvbnRT
dHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdXRvUHJvcGVydHlXcmFwcGVyOjpB
dXRvUHJvcGVydHlXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBlcnNwZWN0
aXZlV3JhcHBlcjo6UGVyc3BlY3RpdmVXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6d3JhcHBl
ckZvclByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5p
bWF0aW9uV3JhcHBlck1hcDo6d3JhcHBlckZvckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2l6ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OmluZGV4RnJv
bVByb3BlcnR5SUQpOiBEZWxldGVkLgorCiAyMDIxLTAzLTEyICBBbnRvaW5lIFF1aW50ICA8Z3Jh
b3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBpbnRlcnBvbGF0aW9uIG9mIG9ycGhhbnMg
YW5kIHdpZG93cyBDU1MgcHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggOTk3NjgwZmRlZTNkZjBiZDc2ZmE5NTc2
ODA5ODY1NjdjYTEzMWNkZS4uZDU2MTEyMGQ1MThmMTk2NzJjN2I3YTA0YTNhNGY5Y2IyMThlNmEw
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRp
b24uY3BwCkBAIC0xMDAsMjQgKzEwMCwyNCBAQCBzdGF0aWMgaW5saW5lIEdhcExlbmd0aCBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IEdhcExlbgogICAg
IHJldHVybiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgoKSwgcHJvZ3Jlc3MsIFZhbHVl
UmFuZ2VOb25OZWdhdGl2ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgTGVuZ3RoU2l6ZSBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgTGVuZ3RoU2l6
ZSYgZnJvbSwgY29uc3QgTGVuZ3RoU2l6ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBp
bmxpbmUgTGVuZ3RoU2l6ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogY2xpZW50LCBjb25zdCBMZW5ndGhTaXplJiBmcm9tLCBjb25zdCBMZW5ndGhTaXplJiB0bywg
ZG91YmxlIHByb2dyZXNzKQogewotICAgIHJldHVybiB7IGJsZW5kRnVuYyhhbmltLCBmcm9tLndp
ZHRoLCB0by53aWR0aCwgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSksCi0gICAgICAg
ICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20uaGVpZ2h0LCB0by5oZWlnaHQsIHByb2dyZXNzLCBW
YWx1ZVJhbmdlTm9uTmVnYXRpdmUpIH07CisgICAgcmV0dXJuIHsgYmxlbmRGdW5jKGNsaWVudCwg
ZnJvbS53aWR0aCwgdG8ud2lkdGgsIHByb2dyZXNzLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpLAor
ICAgICAgICAgICAgIGJsZW5kRnVuYyhjbGllbnQsIGZyb20uaGVpZ2h0LCB0by5oZWlnaHQsIHBy
b2dyZXNzLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpIH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgU2hh
ZG93U3R5bGUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFNoYWRvd1N0eWxlIGZyb20sIFNoYWRvd1N0eWxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0
aWMgaW5saW5lIFNoYWRvd1N0eWxlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBjbGllbnQsIFNoYWRvd1N0eWxlIGZyb20sIFNoYWRvd1N0eWxlIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCiB7CiAgICAgaWYgKGZyb20gPT0gdG8pCiAgICAgICAgIHJldHVybiB0bzsKIAog
ICAgIGRvdWJsZSBmcm9tVmFsID0gZnJvbSA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7
CiAgICAgZG91YmxlIHRvVmFsID0gdG8gPT0gU2hhZG93U3R5bGU6Ok5vcm1hbCA/IDEgOiAwOwot
ICAgIGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dy
ZXNzKTsKKyAgICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGNsaWVudCwgZnJvbVZhbCwgdG9W
YWwsIHByb2dyZXNzKTsKICAgICByZXR1cm4gcmVzdWx0ID4gMCA/IFNoYWRvd1N0eWxlOjpOb3Jt
YWwgOiBTaGFkb3dTdHlsZTo6SW5zZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RkOjp1bmlxdWVf
cHRyPFNoYWRvd0RhdGE+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBjb25zdCBTaGFkb3dEYXRhKiBmcm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91
YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4g
YmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3Qg
U2hhZG93RGF0YSogZnJvbSwgY29uc3QgU2hhZG93RGF0YSogdG8sIGRvdWJsZSBwcm9ncmVzcykK
IHsKICAgICBBU1NFUlQoZnJvbSAmJiB0byk7CiAgICAgaWYgKGZyb20tPnN0eWxlKCkgIT0gdG8t
PnN0eWxlKCkpCkBAIC0xMjYsMTYgKzEyNiwxNiBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6dW5pcXVl
X3B0cjxTaGFkb3dEYXRhPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaQog
ICAgIHJldHVybiBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KGJsZW5kKGZyb20tPmxvY2F0aW9uKCks
IHRvLT5sb2NhdGlvbigpLCBwcm9ncmVzcyksCiAgICAgICAgIGJsZW5kKGZyb20tPnJhZGl1cygp
LCB0by0+cmFkaXVzKCksIHByb2dyZXNzKSwKICAgICAgICAgYmxlbmQoZnJvbS0+c3ByZWFkKCks
IHRvLT5zcHJlYWQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS0+
c3R5bGUoKSwgdG8tPnN0eWxlKCksIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRGdW5jKGNsaWVu
dCwgZnJvbS0+c3R5bGUoKSwgdG8tPnN0eWxlKCksIHByb2dyZXNzKSwKICAgICAgICAgZnJvbS0+
aXNXZWJraXRCb3hTaGFkb3coKSwKICAgICAgICAgYmxlbmQoZnJvbS0+Y29sb3IoKSwgdG8tPmNv
bG9yKCksIHByb2dyZXNzKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9u
cyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbWF0aW9uLCBj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25z
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCiB7Ci0gICAgaWYgKGFuaW1hdGlvbi0+dHJhbnNmb3JtRnVuY3Rp
b25MaXN0c01hdGNoKCkpCisgICAgaWYgKGNsaWVudC0+dHJhbnNmb3JtRnVuY3Rpb25MaXN0c01h
dGNoKCkpCiAgICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGZyb20s
IHByb2dyZXNzKTsKLSAgICByZXR1cm4gdG8uYmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlv
bihmcm9tLCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PihhbmltYXRpb24tPnJlbmRlcmVyKCkpID8g
ZG93bmNhc3Q8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5kZXJlcigpKS5ib3JkZXJCb3hSZWN0
KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpKTsKKyAgICByZXR1cm4gdG8uYmxlbmRCeVVzaW5nTWF0
cml4SW50ZXJwb2xhdGlvbihmcm9tLCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PihjbGllbnQtPnJl
bmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqY2xpZW50LT5yZW5kZXJlcigpKS5ib3Jk
ZXJCb3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpKTsKIH0KIAogc3RhdGljIFJlZlB0cjxT
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGNsaWVudCwgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKiB0bywgZG91YmxlIHByb2dyZXNzKQpAQCAtMjg0LDEzICsyODQsMTMg
QEAgc3RhdGljIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTaGEKICAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRl
KHRvU2hhcGUuYmxlbmQoZnJvbVNoYXBlLCBwcm9ncmVzcyksIHRvLT5jc3NCb3goKSk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVy
T3BlcmF0aW9uKiB0b09wLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdo
ID0gZmFsc2UpCitzdGF0aWMgaW5saW5lIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kRnVu
Yyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgRmlsdGVyT3BlcmF0aW9uKiBmcm9t
LCBGaWx0ZXJPcGVyYXRpb24qIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0
aHJvdWdoID0gZmFsc2UpCiB7Ci0gICAgQVNTRVJUKHRvT3ApOwotICAgIHJldHVybiB0b09wLT5i
bGVuZChmcm9tT3AsIHByb2dyZXNzLCBibGVuZFRvUGFzc3Rocm91Z2gpOworICAgIEFTU0VSVCh0
byk7CisgICAgcmV0dXJuIHRvLT5ibGVuZChmcm9tLCBwcm9ncmVzcywgYmxlbmRUb1Bhc3N0aHJv
dWdoKTsKIH0KIAotc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRmlsdGVyT3Bl
cmF0aW9ucyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCAgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBibGVuZEZpbHRlck9wZXJh
dGlvbnMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCAgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKIHsKICAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKICAgICBzaXplX3QgZnJv
bVNpemUgPSBmcm9tLm9wZXJhdGlvbnMoKS5zaXplKCk7CkBAIC0yOTksNyArMjk5LDcgQEAgc3Rh
dGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2wKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkr
KykgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8IGZyb21T
aXplKSA/IGZyb20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsKICAgICAgICAgUmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9wZXJhdGlvbnMoKVtpXS5n
ZXQoKSA6IDA7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRv
T3AgPyBibGVuZEZ1bmMoYW5pbSwgZnJvbU9wLmdldCgpLCB0b09wLmdldCgpLCBwcm9ncmVzcykg
OiAoZnJvbU9wID8gYmxlbmRGdW5jKGFuaW0sIDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3MsIHRy
dWUpIDogMCk7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRv
T3AgPyBibGVuZEZ1bmMoY2xpZW50LCBmcm9tT3AuZ2V0KCksIHRvT3AuZ2V0KCksIHByb2dyZXNz
KSA6IChmcm9tT3AgPyBibGVuZEZ1bmMoY2xpZW50LCAwLCBmcm9tT3AuZ2V0KCksIHByb2dyZXNz
LCB0cnVlKSA6IDApOwogICAgICAgICBpZiAoYmxlbmRlZE9wKQogICAgICAgICAgICAgcmVzdWx0
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoYmxlbmRlZE9wKTsKICAgICAgICAgZWxzZSB7CkBAIC0zMTMs
NyArMzEzLDcgQEAgc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRmlsdGVyT3Bl
cmF0aW9ucyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2wKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20s
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCA9IENTU1Byb3BlcnR5RmlsdGVyKQorc3RhdGljIGlubGluZSBGaWx0ZXJP
cGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGll
bnQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IHRvLCBkb3VibGUgcHJvZ3Jlc3MsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IENTU1Byb3Bl
cnR5RmlsdGVyKQogewogICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0OwogCkBAIC0zMjIsMjIg
KzMyMiwyMiBAQCBzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sCiAgICAgYm9vbCBsaXN0c01hdGNoID0g
ZmFsc2U7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZp
bHRlcjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0tPmZpbHRlckZ1bmN0aW9uTGlzdHNNYXRj
aCgpOworICAgICAgICBsaXN0c01hdGNoID0gY2xpZW50LT5maWx0ZXJGdW5jdGlvbkxpc3RzTWF0
Y2goKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXI6Ci0gICAgICAgIGxpc3RzTWF0Y2gg
PSBhbmltLT5iYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBsaXN0
c01hdGNoID0gY2xpZW50LT5iYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOwogICAg
ICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmlsdGVy
OgotICAgICAgICBsaXN0c01hdGNoID0gYW5pbS0+Y29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0
Y2goKTsKKyAgICAgICAgbGlzdHNNYXRjaCA9IGNsaWVudC0+Y29sb3JGaWx0ZXJGdW5jdGlvbkxp
c3RzTWF0Y2goKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIAogICAgIGlmIChsaXN0c01hdGNoKQotICAgICAgICByZXN1bHQgPSBibGVu
ZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgcmVz
dWx0ID0gYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNsaWVudCwgZnJvbSwgdG8sIHByb2dyZXNzKTsK
ICAgICBlbHNlIHsKICAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBmdW5jdGlvbiBsaXN0cyBkb24n
dCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3NzLWZhZGUsIGJ1dCBkb24ndCB5ZXQgaGF2ZSBh
IHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1MuCiAgICAgICAgIC8vIEZvciBub3cgd2UnbGwg
anVzdCBmYWlsIHRvIGFuaW1hdGUuCkBAIC0zNDcsMjAgKzM0NywyMCBAQCBzdGF0aWMgaW5saW5l
IEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBSZWZQdHI8
U3R5bGVJbWFnZT4gYmxlbmRGaWx0ZXIoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbSwgQ2FjaGVkSW1hZ2UqIGltYWdlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGlu
ZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGaWx0ZXIoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogY2xpZW50LCBDYWNoZWRJbWFnZSogaW1hZ2UsIGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7
CiAgICAgQVNTRVJUKGltYWdlKTsKLSAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlclJlc3VsdCA9
IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhhbmltLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgIEZp
bHRlck9wZXJhdGlvbnMgZmlsdGVyUmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNsaWVu
dCwgZnJvbSwgdG8sIHByb2dyZXNzKTsKIAogICAgIGF1dG8gaW1hZ2VWYWx1ZSA9IENTU0ltYWdl
VmFsdWU6OmNyZWF0ZSgqaW1hZ2UpOwotICAgIGF1dG8gZmlsdGVyVmFsdWUgPSBDb21wdXRlZFN0
eWxlRXh0cmFjdG9yOjp2YWx1ZUZvckZpbHRlcihhbmltLT5jdXJyZW50U3R5bGUoKSwgZmlsdGVy
UmVzdWx0LCBEb05vdEFkanVzdFBpeGVsVmFsdWVzKTsKKyAgICBhdXRvIGZpbHRlclZhbHVlID0g
Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoY2xpZW50LT5jdXJyZW50U3R5
bGUoKSwgZmlsdGVyUmVzdWx0LCBEb05vdEFkanVzdFBpeGVsVmFsdWVzKTsKIAogICAgIGF1dG8g
cmVzdWx0ID0gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2VWYWx1ZSks
IFdURk1vdmUoZmlsdGVyVmFsdWUpKTsKICAgICByZXN1bHQuZ2V0KCkuc2V0RmlsdGVyT3BlcmF0
aW9ucyhmaWx0ZXJSZXN1bHQpOwogICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVh
dGUoV1RGTW92ZShyZXN1bHQpKTsKIH0KIAotc3RhdGljIGlubGluZSBWaXNpYmlsaXR5IGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBWaXNpYmlsaXR5IGZy
b20sIFZpc2liaWxpdHkgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgVmlzaWJp
bGl0eSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBW
aXNpYmlsaXR5IGZyb20sIFZpc2liaWxpdHkgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsKICAgICAv
LyBBbnkgbm9uLXplcm8gcmVzdWx0IG1lYW5zIHdlIGNvbnNpZGVyIHRoZSBvYmplY3QgdG8gYmUg
dmlzaWJsZS4gT25seSBhdCAwIGRvIHdlIGNvbnNpZGVyIHRoZSBvYmplY3QgdG8gYmUKICAgICAv
LyBpbnZpc2libGUuIFRoZSBpbnZpc2libGUgdmFsdWUgd2UgdXNlIChWaXNpYmlsaXR5OjpIaWRk
ZW4gdnMuIFZpc2liaWxpdHk6OkNvbGxhcHNlKSBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpZWQgZnJv
bS90byB2YWx1ZXMuCkBAIC0zNjgsMzAgKzM2OCwzMCBAQCBzdGF0aWMgaW5saW5lIFZpc2liaWxp
dHkgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFZpc2li
aQogICAgIGRvdWJsZSB0b1ZhbCA9IHRvID09IFZpc2liaWxpdHk6OlZpc2libGUgPyAxLiA6IDAu
OwogICAgIGlmIChmcm9tVmFsID09IHRvVmFsKQogICAgICAgICByZXR1cm4gdG87Ci0gICAgZG91
YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jlc3MpOwor
ICAgIGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1bmMoY2xpZW50LCBmcm9tVmFsLCB0b1ZhbCwgcHJv
Z3Jlc3MpOwogICAgIHJldHVybiByZXN1bHQgPiAwLiA/IFZpc2liaWxpdHk6OlZpc2libGUgOiAo
dG8gIT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IHRvIDogZnJvbSk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgVGV4dFVuZGVybGluZU9mZnNldCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgZnJvbSwgY29uc3QgVGV4
dFVuZGVybGluZU9mZnNldCYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgVGV4
dFVuZGVybGluZU9mZnNldCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogY2xpZW50LCBjb25zdCBUZXh0VW5kZXJsaW5lT2Zmc2V0JiBmcm9tLCBjb25zdCBUZXh0VW5k
ZXJsaW5lT2Zmc2V0JiB0bywgZG91YmxlIHByb2dyZXNzKQogewogICAgIGlmIChmcm9tLmlzTGVu
Z3RoKCkgJiYgdG8uaXNMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZz
ZXQ6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFsdWUoKSwg
dG8ubGVuZ3RoVmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxp
bmVPZmZzZXQ6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5sZW5ndGhW
YWx1ZSgpLCB0by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOwogICAgIHJldHVybiBUZXh0VW5k
ZXJsaW5lT2Zmc2V0OjpjcmVhdGVXaXRoQXV0bygpOwogfQogCi1zdGF0aWMgaW5saW5lIFRleHRE
ZWNvcmF0aW9uVGhpY2tuZXNzIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgZnJvbSwgY29uc3QgVGV4
dERlY29yYXRpb25UaGlja25lc3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5l
IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBjbGllbnQsIGNvbnN0IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzJiBmcm9tLCBj
b25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsKICAg
ICBpZiAoZnJvbS5pc0xlbmd0aCgpICYmIHRvLmlzTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBU
ZXh0RGVjb3JhdGlvblRoaWNrbmVzczo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoYW5pbSwg
ZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOworICAgICAg
ICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRG
dW5jKGNsaWVudCwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVz
cykpOwogICAgIHJldHVybiBUZXh0RGVjb3JhdGlvblRoaWNrbmVzczo6Y3JlYXRlV2l0aEF1dG8o
KTsKIH0KIAotc3RhdGljIGlubGluZSBMZW5ndGhCb3ggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aEJveCYgZnJvbSwgY29uc3QgTGVu
Z3RoQm94JiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBMZW5ndGhCb3ggYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgTGVu
Z3RoQm94JiBmcm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7Ci0g
ICAgTGVuZ3RoQm94IHJlc3VsdChibGVuZEZ1bmMoYW5pbSwgZnJvbS50b3AoKSwgdG8udG9wKCks
IHByb2dyZXNzLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpLAotICAgICAgICAgICAgICAgICAgICAg
YmxlbmRGdW5jKGFuaW0sIGZyb20ucmlnaHQoKSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MsIFZhbHVl
UmFuZ2VOb25OZWdhdGl2ZSksCi0gICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwg
ZnJvbS5ib3R0b20oKSwgdG8uYm90dG9tKCksIHByb2dyZXNzLCBWYWx1ZVJhbmdlTm9uTmVnYXRp
dmUpLAotICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVmdCgpLCB0
by5sZWZ0KCksIHByb2dyZXNzLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpKTsKKyAgICBMZW5ndGhC
b3ggcmVzdWx0KGJsZW5kRnVuYyhjbGllbnQsIGZyb20udG9wKCksIHRvLnRvcCgpLCBwcm9ncmVz
cywgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSwKKyAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVu
YyhjbGllbnQsIGZyb20ucmlnaHQoKSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2VO
b25OZWdhdGl2ZSksCisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoY2xpZW50LCBmcm9t
LmJvdHRvbSgpLCB0by5ib3R0b20oKSwgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSks
CisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoY2xpZW50LCBmcm9tLmxlZnQoKSwgdG8u
bGVmdCgpLCBwcm9ncmVzcywgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSk7CiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtNDQxLDcgKzQ0MSw3IEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxl
SW1hZ2U+IGNyb3NzZmFkZUJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqCiAg
ICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGNyb3NzZmFkZVZh
bHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBTdHlsZUltYWdlKiBmcm9tLCBT
dHlsZUltYWdlKiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBSZWZQdHI8U3R5
bGVJbWFnZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVu
dCwgU3R5bGVJbWFnZSogZnJvbSwgU3R5bGVJbWFnZSogdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsK
ICAgICBpZiAoIWZyb20gfHwgIXRvKQogICAgICAgICByZXR1cm4gdG87CkBAIC00NjMsNyArNDYz
LDcgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5jKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0KICAgICAgICAgICAgIENTU0ZpbHRlckltYWdl
VmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2Vu
ZXJhdGVkKTsKICAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIHRvRmlsdGVyID0gZG93
bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpOwogICAgICAgICAgICAgaWYg
KGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0ZpbHRlcikgJiYgZnJvbUZpbHRlci5jYWNo
ZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihhbmltLCBmcm9t
RmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCB0b0Zp
bHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gYmxlbmRGaWx0ZXIoY2xpZW50LCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0
ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dy
ZXNzKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpczxDU1NDcm9zc2ZhZGVWYWx1ZT4oZnJv
bUdlbmVyYXRlZCkgJiYgaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKSkgewpAQCAt
NDgyLDcgKzQ4Miw3IEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVu
Yyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltCiAgICAgICAgIGlmIChpczxD
U1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgewogICAgICAgICAgICAgQ1NTRmls
dGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+
KGZyb21HZW5lcmF0ZWQpOwogICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2Uo
KSAmJiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqdG8pLmNhY2hlZEltYWdlKCkgPT0gZnJv
bUZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRl
cihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmlsdGVyT3BlcmF0
aW9ucygpLCBGaWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYmxlbmRGaWx0ZXIoY2xpZW50LCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21G
aWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBGaWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsK
ICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogQWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBj
cm9zcy1mYWRlIGFuZCBpbWFnZSBzb3VyY2UuCiAgICAgfSBlbHNlIGlmIChpczxTdHlsZUNhY2hl
ZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKSkgewpAQCAtNDkw
LDcgKzQ5MCw3IEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltCiAgICAgICAgIGlmIChpczxDU1NG
aWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKICAgICAgICAgICAgIENTU0ZpbHRlcklt
YWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5l
cmF0ZWQpOwogICAgICAgICAgICAgaWYgKHRvRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgZG93bmNh
c3Q8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pLmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIuY2Fj
aGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgdG9G
aWx0ZXIuY2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJP
cGVyYXRpb25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0
ZXIoY2xpZW50LCB0b0ZpbHRlci5jYWNoZWRJbWFnZSgpLCBGaWx0ZXJPcGVyYXRpb25zKCksIHRv
RmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOwogICAgICAgICB9CiAgICAgICAg
IC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGltYWdlIHNvdXJjZSBhbmQgY3Jv
c3MtZmFkZS4KICAgICB9CkBAIC00OTgsMTIgKzQ5OCwxMiBAQCBzdGF0aWMgaW5saW5lIFJlZlB0
cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbQogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBjcm9zcyBmYWRlIGJldHdlZW4gY2FjaGVk
IGFuZCBnZW5lcmF0ZWQgaW1hZ2VzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03ODI5MwogICAgIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkg
JiYgaXM8U3R5bGVDYWNoZWRJbWFnZT4oKnRvKSkKLSAgICAgICAgcmV0dXJuIGNyb3NzZmFkZUJs
ZW5kKGFuaW0sIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxTdHls
ZUNhY2hlZEltYWdlPih0byksIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGNyb3NzZmFkZUJs
ZW5kKGNsaWVudCwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0
eWxlQ2FjaGVkSW1hZ2U+KHRvKSwgcHJvZ3Jlc3MpOwogCiAgICAgcmV0dXJuIHRvOwogfQogCi1z
dGF0aWMgaW5saW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgZnJvbSwgY29uc3QgTmlu
ZVBpZWNlSW1hZ2UmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIE5pbmVQaWVj
ZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQs
IGNvbnN0IE5pbmVQaWVjZUltYWdlJiBmcm9tLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgdG8sIGRv
dWJsZSBwcm9ncmVzcykKIHsKICAgICBpZiAoIWZyb20uaGFzSW1hZ2UoKSB8fCAhdG8uaGFzSW1h
Z2UoKSkKICAgICAgICAgcmV0dXJuIHRvOwpAQCAtNTEzLDE4ICs1MTMsMTggQEAgc3RhdGljIGlu
bGluZSBOaW5lUGllY2VJbWFnZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgY28KICAgICBpZiAoZnJvbS5pbWFnZVNsaWNlcygpICE9IHRvLmltYWdlU2xp
Y2VzKCkgfHwgZnJvbS5ib3JkZXJTbGljZXMoKSAhPSB0by5ib3JkZXJTbGljZXMoKSB8fCBmcm9t
Lm91dHNldCgpICE9IHRvLm91dHNldCgpIHx8IGZyb20uZmlsbCgpICE9IHRvLmZpbGwoKSB8fCBm
cm9tLmhvcml6b250YWxSdWxlKCkgIT0gdG8uaG9yaXpvbnRhbFJ1bGUoKSB8fCBmcm9tLnZlcnRp
Y2FsUnVsZSgpICE9IHRvLnZlcnRpY2FsUnVsZSgpKQogICAgICAgICByZXR1cm4gdG87CiAKLSAg
ICBpZiAoYXV0byogcmVuZGVyZXIgPSBhbmltLT5yZW5kZXJlcigpKSB7CisgICAgaWYgKGF1dG8q
IHJlbmRlcmVyID0gY2xpZW50LT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGlmIChmcm9tLmltYWdl
KCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSAhPSB0by5pbWFnZSgpLT5pbWFnZVNpemUocmVu
ZGVyZXIsIDEuMCkpCiAgICAgICAgICAgICByZXR1cm4gdG87CiAgICAgfQogCi0gICAgcmV0dXJu
IE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhhbmltLCBmcm9tLmltYWdlKCksIHRvLmltYWdlKCks
IHByb2dyZXNzKSwKKyAgICByZXR1cm4gTmluZVBpZWNlSW1hZ2UoYmxlbmRGdW5jKGNsaWVudCwg
ZnJvbS5pbWFnZSgpLCB0by5pbWFnZSgpLCBwcm9ncmVzcyksCiAgICAgICAgIGZyb20uaW1hZ2VT
bGljZXMoKSwgZnJvbS5maWxsKCksIGZyb20uYm9yZGVyU2xpY2VzKCksIGZyb20ub3V0c2V0KCks
IGZyb20uaG9yaXpvbnRhbFJ1bGUoKSwgZnJvbS52ZXJ0aWNhbFJ1bGUoKSk7CiB9CiAKICNpZiBF
TkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQogCi1zdGF0aWMgaW5saW5lIEZvbnRWYXJpYXRpb25TZXR0
aW5ncyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29u
c3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiBmcm9tLCBjb25zdCBGb250VmFyaWF0aW9uU2V0dGlu
Z3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIEZvbnRWYXJpYXRpb25TZXR0
aW5ncyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBj
b25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIGZyb20sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0
aW5ncyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsKICAgICBpZiAoIXByb2dyZXNzKQogICAgICAg
ICByZXR1cm4gZnJvbTsKQEAgLTUzOSw3ICs1MzksNyBAQCBzdGF0aWMgaW5saW5lIEZvbnRWYXJp
YXRpb25TZXR0aW5ncyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YQogICAgICAgICBhdXRvJiBmcm9tSXRlbSA9IGZyb20uYXQoaSk7CiAgICAgICAgIGF1dG8mIHRv
SXRlbSA9IHRvLmF0KGkpOwogICAgICAgICBBU1NFUlQoZnJvbUl0ZW0udGFnKCkgPT0gdG9JdGVt
LnRhZygpKTsKLSAgICAgICAgZmxvYXQgaW50ZXJwb2xhdGVkID0gYmxlbmRGdW5jKGFuaW0sIGZy
b21JdGVtLnZhbHVlKCksIHRvSXRlbS52YWx1ZSgpLCBwcm9ncmVzcyk7CisgICAgICAgIGZsb2F0
IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhjbGllbnQsIGZyb21JdGVtLnZhbHVlKCksIHRvSXRl
bS52YWx1ZSgpLCBwcm9ncmVzcyk7CiAgICAgICAgIHJlc3VsdC5pbnNlcnQoeyBmcm9tSXRlbS50
YWcoKSwgaW50ZXJwb2xhdGVkIH0pOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNTQ3
LDc1ICs1NDcsNzUgQEAgc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGEKIAogI2VuZGlmCiAKLXN0YXRp
YyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBhbmltLCBGb250U2VsZWN0aW9uVmFsdWUgZnJvbSwgRm9udFNlbGVjdGlv
blZhbHVlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIEZvbnRTZWxlY3Rpb25W
YWx1ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBG
b250U2VsZWN0aW9uVmFsdWUgZnJvbSwgRm9udFNlbGVjdGlvblZhbHVlIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCiB7Ci0gICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZShibGVuZEZ1bmMoYW5pbSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20pLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8pLCBwcm9ncmVz
cykpOworICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoYmxlbmRGdW5jKGNsaWVudCwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGZyb20pLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8pLCBwcm9ncmVzcykp
OwogfQogCi1zdGF0aWMgaW5saW5lIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIE9wdGlvbmFsPEZvbnRT
ZWxlY3Rpb25WYWx1ZT4gZnJvbSwgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgZG91
YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIE9wdGlv
bmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJvbSwgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVl
PiB0bywgZG91YmxlIHByb2dyZXNzKQogewotICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUo
YmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tLnZhbHVlKCkpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4odG8udmFsdWUoKSksIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIEZvbnRTZWxl
Y3Rpb25WYWx1ZShibGVuZEZ1bmMoY2xpZW50LCBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbS52YWx1
ZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvLnZhbHVlKCkpLCBwcm9ncmVzcykpOwogfQogCiBj
bGFzcyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKENTU1Byb3BlcnR5SUQgcHJvcCkKLSAgICAgICAgOiBtX3Byb3AocHJvcCkKKyAgICBleHBs
aWNpdCBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKENTU1Byb3BlcnR5SUQgcHJvcGVydHkp
CisgICAgICAgIDogbV9wcm9wZXJ0eShwcm9wZXJ0eSkKICAgICB7CiAgICAgfQogICAgIHZpcnR1
YWwgfkFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9IGRlZmF1bHQ7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVy
U3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
Y2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSopIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCosIFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSkgY29uc3QgPSAwOwogICAgIAogI2lmICFMT0dfRElT
QUJMRUQKLSAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlKSBjb25zdCA9IDA7
CiAjZW5kaWYKIAotICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBt
X3Byb3A7IH0KKyAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9w
cm9wZXJ0eTsgfQogCiAgICAgdmlydHVhbCBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRlOgotICAgIENTU1Byb3BlcnR5SUQgbV9w
cm9wOworICAgIENTU1Byb3BlcnR5SUQgbV9wcm9wZXJ0eTsKIH07CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgogY2xhc3MgUHJvcGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIFByb3BlcnR5V3JhcHBlckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRl
clN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0KQotICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UocHJvcCkKKyAgICBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QpCisgICAgICAgIDogQW5p
bWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKICAgICAgICAgLCBtX2dldHRlcihn
ZXR0ZXIpCiAgICAgewogICAgIH0KIAorICAgIFQgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChzdHlsZS0+Km1fZ2V0dGVyKSgpOwor
ICAgIH0KKworcHJpdmF0ZToKICAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAo
YSA9PSBiKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmICghYSB8fCAhYikK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRoaXMtPnZhbHVlKGEp
ID09IHRoaXMtPnZhbHVlKGIpOwotICAgIH0KLQotICAgIFQgdmFsdWUoY29uc3QgUmVuZGVyU3R5
bGUqIGEpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKTsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlKGEpID09IHZhbHVlKGIpOwogICAgIH0KIAogI2lmICFMT0dfRElT
QUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBmaW5hbAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlKiB0bywgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1h
dGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0
eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBh
dCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVz
cykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
QW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHBy
b3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGZyb20pIDw8ICIgdG8gIiA8PCB2YWx1ZSh0
bykgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vy
cyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwogICAgIH0KICNlbmRpZgog
Ci1wcm90ZWN0ZWQ6CiAgICAgVCAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKIH07
CiAKQEAgLTYyMywxNSArNjIzLDE1IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY2xhc3MgUHJv
cGVydHlXcmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxUPiB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5SUQgcHJvcCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqc2V0dGVyKShUKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
VD4ocHJvcCwgZ2V0dGVyKQorICAgIFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5LCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6
OipzZXR0ZXIpKFQpKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUPihwcm9wZXJ0
eSwgZ2V0dGVyKQogICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKICAgICB7CiAgICAgfQogCi0g
ICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5k
ZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9u
LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIp
KGJsZW5kRnVuYyhhbmltLCB0aGlzLT52YWx1ZShhKSwgdGhpcy0+dmFsdWUoYiksIHByb2dyZXNz
KSk7CisgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50LCB0
aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+dmFsdWUodG8pLCBwcm9ncmVzcykpOwogICAgIH0KIAog
cHJvdGVjdGVkOgpAQCAtNjQ4LDcgKzY0OCw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6
Ci0KICAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVu
dCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewog
ICAgICAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9IGJsZW5kRnVuYyhjbGllbnQsIHRoaXMtPnZhbHVl
KGZyb20pLCB0aGlzLT52YWx1ZSh0byksIHByb2dyZXNzKTsKQEAgLTY1NywyNCArNjU2LDI0IEBA
IHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIERpc2NyZXRlUHJv
cGVydHlXcmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxUPiB7CitjbGFzcyBE
aXNjcmV0ZVByb3BlcnR5V3JhcHBlciBmaW5hbCA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8VD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIERpc2Ny
ZXRlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCAoUmVuZGVyU3R5bGU6Oipn
ZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUKSkKLSAgICAgICAg
OiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4ocHJvcCwgZ2V0dGVyKQorICAgIERpc2NyZXRlUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFQgKFJlbmRlclN0eWxlOjoqZ2V0
dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCisgICAgICAgIDog
UHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+KHByb3BlcnR5LCBnZXR0ZXIpCiAgICAgICAgICwgbV9z
ZXR0ZXIoc2V0dGVyKQogICAgIHsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgYm9vbCBjYW5JbnRl
cnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgZmlu
YWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCosIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAg
IHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIFJlbmRlclN0eWxl
KiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxl
KiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgQVNTRVJU
KCFwcm9ncmVzcyB8fCBwcm9ncmVzcyA9PSAxLjApOwotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIp
KHRoaXMtPnZhbHVlKHByb2dyZXNzID8gYiA6IGEpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLT4q
dGhpcy0+bV9zZXR0ZXIpKHRoaXMtPnZhbHVlKHByb2dyZXNzID8gdG8gOiBmcm9tKSk7CiAgICAg
fQogCi1wcm90ZWN0ZWQ6CiAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCk7CiB9
OwogCkBAIC02ODIsMjQgKzY4MSwyNCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNsYXNzIFJl
ZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQq
PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUmVmQ291bnRl
ZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQqIChSZW5kZXJTdHlsZTo6Kmdl
dHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkK
LSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3AsIGdldHRlcikKKyAgICBS
ZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFQqIChSZW5k
ZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJl
ZlB0cjxUPiYmKSkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3BlcnR5
LCBnZXR0ZXIpCiAgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQogICAgIHsKICAgICB9CiAKLSAg
ICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRl
clN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwg
ZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorcHJpdmF0ZToKKyAgICB2b2lkIGJsZW5k
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRl
c3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICAoZHN0LT4qbV9z
ZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCB0aGlzLT52YWx1ZShhKSwgdGhpcy0+dmFsdWUoYiksIHBy
b2dyZXNzKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi0+KnRoaXMtPm1fc2V0dGVyKShibGVuZEZ1
bmMoY2xpZW50LCB0aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+dmFsdWUodG8pLCBwcm9ncmVzcykp
OwogICAgIH0KIAotcHJvdGVjdGVkOgogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIp
KFJlZlB0cjxUPiYmKTsKIH07CiAKLXN0YXRpYyBib29sIGNhbkludGVycG9sYXRlTGVuZ3Rocyhj
b25zdCBMZW5ndGgmIGEsIGNvbnN0IExlbmd0aCYgYiwgYm9vbCBpc0xlbmd0aFBlcmNlbnRhZ2Up
CitzdGF0aWMgYm9vbCBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoY29uc3QgTGVuZ3RoJiBmcm9tLCBj
b25zdCBMZW5ndGgmIHRvLCBib29sIGlzTGVuZ3RoUGVyY2VudGFnZSkKIHsKLSAgICBpZiAoYS50
eXBlKCkgPT0gYi50eXBlKCkpCisgICAgaWYgKGZyb20udHlwZSgpID09IHRvLnR5cGUoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBTb21lIHByb3BlcnRpZXMgYWxsb3cgZm9yIDxs
ZW5ndGgtcGVyY2VudGFnZT4gYW5kIDxudW1iZXI+IHZhbHVlcy4gV2UgbXVzdCBhbGxvdyBhbmlt
YXRpbmcKQEAgLTcwNywxMzYgKzcwNiwxMzMgQEAgc3RhdGljIGJvb2wgY2FuSW50ZXJwb2xhdGVM
ZW5ndGhzKGNvbnN0IExlbmd0aCYgYSwgY29uc3QgTGVuZ3RoJiBiLCBib29sIGlzTGVuZ3QKICAg
ICAvLyBhIDxsZW5ndGg+IG9yIDxwZXJjZW50YWdlPi4gV2UgY2FuIHVzZSBMZW5ndGg6OmlzUmVs
YXRpdmUoKSB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBhcmUKICAgICAvLyBkZWFsaW5nIHdpdGgg
YSA8bnVtYmVyPiBhcyBvcHBvc2VkIHRvIGEgPGxlbmd0aD4gb3IgPHBlcmNlbnRhZ2U+LgogICAg
IGlmIChpc0xlbmd0aFBlcmNlbnRhZ2UpIHsKLSAgICAgICAgcmV0dXJuIChhLmlzRml4ZWQoKSB8
fCBhLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpIHx8IGEuaXNSZWxhdGl2ZSgpKQotICAgICAgICAg
ICAgJiYgKGIuaXNGaXhlZCgpIHx8IGIuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkgfHwgYi5pc1Jl
bGF0aXZlKCkpCi0gICAgICAgICAgICAmJiBhLmlzUmVsYXRpdmUoKSA9PSBiLmlzUmVsYXRpdmUo
KTsKKyAgICAgICAgcmV0dXJuIChmcm9tLmlzRml4ZWQoKSB8fCBmcm9tLmlzUGVyY2VudE9yQ2Fs
Y3VsYXRlZCgpIHx8IGZyb20uaXNSZWxhdGl2ZSgpKQorICAgICAgICAgICAgJiYgKHRvLmlzRml4
ZWQoKSB8fCB0by5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKSB8fCB0by5pc1JlbGF0aXZlKCkpCisg
ICAgICAgICAgICAmJiBmcm9tLmlzUmVsYXRpdmUoKSA9PSB0by5pc1JlbGF0aXZlKCk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1jbGFzcyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIg
OiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+IHsKK2NsYXNzIExl
bmd0aFByb3BlcnR5V3JhcHBlciBmaW5hbCA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgTGVuZ3RoJj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIGVudW0gY2xhc3MgRmxhZ3MgewogICAgICAgICBJc0xlbmd0aFBlcmNlbnRhZ2UgICAgICAg
ICAgPSAxIDw8IDAsCiAgICAgICAgIE5lZ2F0aXZlTGVuZ3Roc0FyZUludmFsaWQgICA9IDEgPDwg
MSwKICAgICB9OwotICAgIExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3As
IGNvbnN0IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoTGVuZ3RoJiYpLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzID0geyB9
KQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPihwcm9wLCBn
ZXR0ZXIpCisgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IGNvbnN0IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoTGVuZ3RoJiYpLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzID0geyB9
KQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPihwcm9wZXJ0
eSwgZ2V0dGVyKQogICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKICAgICAgICAgLCBtX2ZsYWdz
KGZsYWdzKQogICAgIHsKICAgICB9CiAKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKK3ByaXZh
dGU6CisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgcmV0dXJuIGNh
bkludGVycG9sYXRlTGVuZ3Rocyh0aGlzLT52YWx1ZShhKSwgdGhpcy0+dmFsdWUoYiksIG1fZmxh
Z3MuY29udGFpbnMoRmxhZ3M6OklzTGVuZ3RoUGVyY2VudGFnZSkpOworICAgICAgICByZXR1cm4g
Y2FuSW50ZXJwb2xhdGVMZW5ndGhzKHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIG1fZmxhZ3MuY29u
dGFpbnMoRmxhZ3M6OklzTGVuZ3RoUGVyY2VudGFnZSkpOwogICAgIH0KIAotICAgIHZvaWQgYmxl
bmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRz
dCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVu
ZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBmaW5hbAogICAgIHsKICAgICAgICAgYXV0byB2YWx1ZVJhbmdlID0gbV9mbGFncy5jb250
YWlucyhGbGFnczo6TmVnYXRpdmVMZW5ndGhzQXJlSW52YWxpZCkgPyBWYWx1ZVJhbmdlTm9uTmVn
YXRpdmUgOiBWYWx1ZVJhbmdlQWxsOwotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVu
YyhhbmltLCB0aGlzLT52YWx1ZShhKSwgdGhpcy0+dmFsdWUoYiksIHByb2dyZXNzLCB2YWx1ZVJh
bmdlKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50
LCB2YWx1ZShmcm9tKSwgdmFsdWUodG8pLCBwcm9ncmVzcywgdmFsdWVSYW5nZSkpOwogICAgIH0K
IAotcHJvdGVjdGVkOgogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKExlbmd0aCYm
KTsKLQotcHJpdmF0ZToKICAgICBPcHRpb25TZXQ8RmxhZ3M+IG1fZmxhZ3M7CiB9OwogCi1zdGF0
aWMgYm9vbCBjYW5JbnRlcnBvbGF0ZUxlbmd0aFZhcmlhbnRzKGNvbnN0IExlbmd0aFNpemUmIGEs
IGNvbnN0IExlbmd0aFNpemUmIGIpCitzdGF0aWMgYm9vbCBjYW5JbnRlcnBvbGF0ZUxlbmd0aFZh
cmlhbnRzKGNvbnN0IExlbmd0aFNpemUmIGZyb20sIGNvbnN0IExlbmd0aFNpemUmIHRvKQogewog
ICAgIGJvb2wgaXNMZW5ndGhQZXJjZW50YWdlID0gdHJ1ZTsKLSAgICByZXR1cm4gY2FuSW50ZXJw
b2xhdGVMZW5ndGhzKGEud2lkdGgsIGIud2lkdGgsIGlzTGVuZ3RoUGVyY2VudGFnZSkKLSAgICAg
ICAgJiYgY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGEuaGVpZ2h0LCBiLmhlaWdodCwgaXNMZW5ndGhQ
ZXJjZW50YWdlKTsKKyAgICByZXR1cm4gY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGZyb20ud2lkdGgs
IHRvLndpZHRoLCBpc0xlbmd0aFBlcmNlbnRhZ2UpCisgICAgICAgICYmIGNhbkludGVycG9sYXRl
TGVuZ3Rocyhmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBpc0xlbmd0aFBlcmNlbnRhZ2UpOwogfQog
Ci1zdGF0aWMgYm9vbCBjYW5JbnRlcnBvbGF0ZUxlbmd0aFZhcmlhbnRzKGNvbnN0IEdhcExlbmd0
aCYgYSwgY29uc3QgR2FwTGVuZ3RoJiBiKQorc3RhdGljIGJvb2wgY2FuSW50ZXJwb2xhdGVMZW5n
dGhWYXJpYW50cyhjb25zdCBHYXBMZW5ndGgmIGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8pCiB7
Ci0gICAgaWYgKGEuaXNOb3JtYWwoKSB8fCBiLmlzTm9ybWFsKCkpCisgICAgaWYgKGZyb20uaXNO
b3JtYWwoKSB8fCB0by5pc05vcm1hbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9v
bCBpc0xlbmd0aFBlcmNlbnRhZ2UgPSB0cnVlOwotICAgIHJldHVybiBjYW5JbnRlcnBvbGF0ZUxl
bmd0aHMoYS5sZW5ndGgoKSwgYi5sZW5ndGgoKSwgaXNMZW5ndGhQZXJjZW50YWdlKTsKKyAgICBy
ZXR1cm4gY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGZyb20ubGVuZ3RoKCksIHRvLmxlbmd0aCgpLCBp
c0xlbmd0aFBlcmNlbnRhZ2UpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIExl
bmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVy
PGNvbnN0IFQmPiB7CitjbGFzcyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyIGZpbmFsIDog
cHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4gewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBUJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUJiYpKQotICAgICAgICA6IFByb3BlcnR5
V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcCwgZ2V0dGVyKQorICAgIExlbmd0aFZhcmlhbnRQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgVCYgKFJlbmRlclN0
eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCYmKSkK
KyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+KHByb3BlcnR5LCBnZXR0
ZXIpCiAgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQogICAgIHsKICAgICB9CiAKLSAgICBib29s
IGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YikgY29uc3Qgb3ZlcnJpZGUKK3ByaXZhdGU6CisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25z
dCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbkludGVycG9sYXRlTGVuZ3RoVmFyaWFudHModGhpcy0+
dmFsdWUoYSksIHRoaXMtPnZhbHVlKGIpKTsKKyAgICAgICAgcmV0dXJuIGNhbkludGVycG9sYXRl
TGVuZ3RoVmFyaWFudHModGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSk7CiAgICAg
fQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB2b2lkIGJsZW5kKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3Rp
bmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0
ZXIpKGJsZW5kRnVuYyhhbmltLCB0aGlzLT52YWx1ZShhKSwgdGhpcy0+dmFsdWUoYiksIHByb2dy
ZXNzKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50
LCB0aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+dmFsdWUodG8pLCBwcm9ncmVzcykpOwogICAgIH0K
IAotcHJvdGVjdGVkOgogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQmJik7CiB9
OwogCi1jbGFzcyBMZW5ndGhCb3hQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IExlbmd0aEJveCY+IHsKK2NsYXNzIExlbmd0aEJveFByb3BlcnR5V3Jh
cHBlciBmaW5hbCA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoQm94
Jj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGVudW0gY2xh
c3MgRmxhZ3MgewogICAgICAgICBJc0xlbmd0aFBlcmNlbnRhZ2UgID0gMSA8PCAwLAogICAgICAg
ICBVc2VzRmlsbEtleXdvcmQgICAgID0gMSA8PCAxLAogICAgIH07Ci0gICAgTGVuZ3RoQm94UHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgTGVuZ3RoQm94JiAoUmVuZGVy
U3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShMZW5n
dGhCb3gmJiksIE9wdGlvblNldDxGbGFncz4gZmxhZ3MgPSB7IH0pCi0gICAgICAgIDogUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aEJveCY+KHByb3AsIGdldHRlcikKKyAgICBMZW5n
dGhCb3hQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgTGVuZ3Ro
Qm94JiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoq
c2V0dGVyKShMZW5ndGhCb3gmJiksIE9wdGlvblNldDxGbGFncz4gZmxhZ3MgPSB7IH0pCisgICAg
ICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aEJveCY+KHByb3BlcnR5LCBn
ZXR0ZXIpCiAgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQogICAgICAgICAsIG1fZmxhZ3MoZmxh
Z3MpCiAgICAgewogICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorcHJpdmF0ZToK
KyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAobV9mbGFncy5j
b250YWlucyhGbGFnczo6VXNlc0ZpbGxLZXl3b3JkKSAmJiBhLT5ib3JkZXJJbWFnZSgpLmZpbGwo
KSAhPSBiLT5ib3JkZXJJbWFnZSgpLmZpbGwoKSkKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFp
bnMoRmxhZ3M6OlVzZXNGaWxsS2V5d29yZCkgJiYgZnJvbS0+Ym9yZGVySW1hZ2UoKS5maWxsKCkg
IT0gdG8tPmJvcmRlckltYWdlKCkuZmlsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIGF1dG8mIGFMZW5ndGhCb3ggPSB0aGlzLT52YWx1ZShhKTsKLSAgICAgICAgYXV0
byYgYkxlbmd0aEJveCA9IHRoaXMtPnZhbHVlKGIpOworICAgICAgICBhdXRvJiBmcm9tTGVuZ3Ro
Qm94ID0gdmFsdWUoZnJvbSk7CisgICAgICAgIGF1dG8mIHRvTGVuZ3RoQm94ID0gdmFsdWUodG8p
OwogICAgICAgICBib29sIGlzTGVuZ3RoUGVyY2VudGFnZSA9IG1fZmxhZ3MuY29udGFpbnMoRmxh
Z3M6OklzTGVuZ3RoUGVyY2VudGFnZSk7Ci0gICAgICAgIHJldHVybiBjYW5JbnRlcnBvbGF0ZUxl
bmd0aHMoYUxlbmd0aEJveC50b3AoKSwgYkxlbmd0aEJveC50b3AoKSwgaXNMZW5ndGhQZXJjZW50
YWdlKQotICAgICAgICAgICAgJiYgY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGFMZW5ndGhCb3gucmln
aHQoKSwgYkxlbmd0aEJveC5yaWdodCgpLCBpc0xlbmd0aFBlcmNlbnRhZ2UpCi0gICAgICAgICAg
ICAmJiBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoYUxlbmd0aEJveC5ib3R0b20oKSwgYkxlbmd0aEJv
eC5ib3R0b20oKSwgaXNMZW5ndGhQZXJjZW50YWdlKQotICAgICAgICAgICAgJiYgY2FuSW50ZXJw
b2xhdGVMZW5ndGhzKGFMZW5ndGhCb3gubGVmdCgpLCBiTGVuZ3RoQm94LmxlZnQoKSwgaXNMZW5n
dGhQZXJjZW50YWdlKTsKKyAgICAgICAgcmV0dXJuIGNhbkludGVycG9sYXRlTGVuZ3Rocyhmcm9t
TGVuZ3RoQm94LnRvcCgpLCB0b0xlbmd0aEJveC50b3AoKSwgaXNMZW5ndGhQZXJjZW50YWdlKQor
ICAgICAgICAgICAgJiYgY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGZyb21MZW5ndGhCb3gucmlnaHQo
KSwgdG9MZW5ndGhCb3gucmlnaHQoKSwgaXNMZW5ndGhQZXJjZW50YWdlKQorICAgICAgICAgICAg
JiYgY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGZyb21MZW5ndGhCb3guYm90dG9tKCksIHRvTGVuZ3Ro
Qm94LmJvdHRvbSgpLCBpc0xlbmd0aFBlcmNlbnRhZ2UpCisgICAgICAgICAgICAmJiBjYW5JbnRl
cnBvbGF0ZUxlbmd0aHMoZnJvbUxlbmd0aEJveC5sZWZ0KCksIHRvTGVuZ3RoQm94LmxlZnQoKSwg
aXNMZW5ndGhQZXJjZW50YWdlKTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBv
dmVycmlkZQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
Y2xpZW50LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9t
LCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAg
ICB7CiAgICAgICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpVc2VzRmlsbEtleXdvcmQp
KQotICAgICAgICAgICAgZHN0LT5zZXRCb3JkZXJJbWFnZVNsaWNlRmlsbCgoIXByb2dyZXNzIHx8
IGNhbkludGVycG9sYXRlKGEsIGIpID8gYSA6IGIpLT5ib3JkZXJJbWFnZSgpLmZpbGwoKSk7Ci0g
ICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIHRoaXMtPnZhbHVlKGEpLCB0
aGlzLT52YWx1ZShiKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLT5zZXRC
b3JkZXJJbWFnZVNsaWNlRmlsbCgoIXByb2dyZXNzIHx8IGNhbkludGVycG9sYXRlKGZyb20sIHRv
KSA/IGZyb20gOiB0byktPmJvcmRlckltYWdlKCkuZmlsbCgpKTsKKyAgICAgICAgKGRlc3RpbmF0
aW9uLT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhjbGllbnQsIHZhbHVlKGZyb20pLCB2YWx1ZSh0byks
IHByb2dyZXNzKSk7CiAgICAgfQogCi1wcm90ZWN0ZWQ6CiAgICAgdm9pZCAoUmVuZGVyU3R5bGU6
OiptX3NldHRlcikoTGVuZ3RoQm94JiYpOwotCi1wcml2YXRlOgogICAgIE9wdGlvblNldDxGbGFn
cz4gbV9mbGFnczsKIH07CiAKLWNsYXNzIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoIDogcHVibGlj
IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+IHsKK2NsYXNzIFBy
b3BlcnR5V3JhcHBlckNsaXBQYXRoIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdy
YXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9wZXJ0eUlEIHByb3As
IENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+JiYpKQotICAg
ICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+KHByb3As
IGdldHRlciwgc2V0dGVyKQorICAgIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8Q2xpcFBhdGhPcGVyYXRp
b24+JiYpKQorICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVy
YXRpb24+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikKICAgICB7CiAgICAgfQogCi0gICAgYm9v
bCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25z
dCBvdmVycmlkZQorcHJpdmF0ZToKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICAvLyBJ
ZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhl
IHRlc3QuCiAgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJv
dGggYXJlIG51bGwsIHJldHVybiB0cnVlLgpAQCAtODQ1LDggKzg0MSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKCFhIHx8ICFiKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
IGF1dG8qIGNsaXBQYXRoQSA9IHRoaXMtPnZhbHVlKGEpOwotICAgICAgICBhdXRvKiBjbGlwUGF0
aEIgPSB0aGlzLT52YWx1ZShiKTsKKyAgICAgICAgYXV0byogY2xpcFBhdGhBID0gdmFsdWUoYSk7
CisgICAgICAgIGF1dG8qIGNsaXBQYXRoQiA9IHZhbHVlKGIpOwogICAgICAgICBpZiAoY2xpcFBh
dGhBID09IGNsaXBQYXRoQikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAo
IWNsaXBQYXRoQSB8fCAhY2xpcFBhdGhCKQpAQCAtODU2LDE1ICs4NTIsMTYgQEAgcHVibGljOgog
fTsKIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJG
b250VmFyaWF0aW9uU2V0dGluZ3MgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJpYXRp
b25TZXR0aW5ncz4geworY2xhc3MgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdz
IGZpbmFsIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBw
ZXJGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlJRCBwcm9wLCBGb250VmFyaWF0aW9u
U2V0dGluZ3MgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnNldHRlcikoRm9udFZhcmlhdGlvblNldHRpbmdzKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdy
YXBwZXI8Rm9udFZhcmlhdGlvblNldHRpbmdzPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKKyAgICBQ
cm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgRm9udFZhcmlhdGlvblNldHRpbmdzIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwg
dm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKEZvbnRWYXJpYXRpb25TZXR0aW5ncykpCisgICAg
ICAgIDogUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJpYXRpb25TZXR0aW5ncz4ocHJvcGVydHksIGdl
dHRlciwgc2V0dGVyKQogICAgIHsKICAgICB9CiAKLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCitwcml2YXRl
OgorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVy
cyBhcmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KICAgICAgICAgLy8g
SWYgZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJu
IHRydWUuCkBAIC04NzIsMjAgKzg2OSwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgaWYgKCFhIHx8ICFiKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICByZXR1cm4gdGhpcy0+dmFsdWUoYSkgPT0gdGhpcy0+dmFsdWUoYik7CisgICAgICAg
IHJldHVybiB2YWx1ZShhKSA9PSB2YWx1ZShiKTsKICAgICB9CiAKLSAgICBib29sIGNhbkludGVy
cG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qg
b3ZlcnJpZGUKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9t
LCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBhdXRv
IGFWYXJpYXRpb25TZXR0aW5ncyA9IHZhbHVlKGEpOwotICAgICAgICBhdXRvIGJWYXJpYXRpb25T
ZXR0aW5ncyA9IHZhbHVlKGIpOworICAgICAgICBhdXRvIGZyb21WYXJpYXRpb25TZXR0aW5ncyA9
IHZhbHVlKGZyb20pOworICAgICAgICBhdXRvIHRvVmFyaWF0aW9uU2V0dGluZ3MgPSB2YWx1ZSh0
byk7CiAKLSAgICAgICAgaWYgKGFWYXJpYXRpb25TZXR0aW5ncy5zaXplKCkgIT0gYlZhcmlhdGlv
blNldHRpbmdzLnNpemUoKSkKKyAgICAgICAgaWYgKGZyb21WYXJpYXRpb25TZXR0aW5ncy5zaXpl
KCkgIT0gdG9WYXJpYXRpb25TZXR0aW5ncy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgYXV0byBzaXplID0gYVZhcmlhdGlvblNldHRpbmdzLnNpemUoKTsKKyAg
ICAgICAgYXV0byBzaXplID0gZnJvbVZhcmlhdGlvblNldHRpbmdzLnNpemUoKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKGFW
YXJpYXRpb25TZXR0aW5ncy5hdChpKS50YWcoKSAhPSBiVmFyaWF0aW9uU2V0dGluZ3MuYXQoaSku
dGFnKCkpCisgICAgICAgICAgICBpZiAoZnJvbVZhcmlhdGlvblNldHRpbmdzLmF0KGkpLnRhZygp
ICE9IHRvVmFyaWF0aW9uU2V0dGluZ3MuYXQoaSkudGFnKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTg5NCwxNSArODkxLDE2IEBAIHB1YmxpYzoKIH07
CiAjZW5kaWYKIAotY2xhc3MgUHJvcGVydHlXcmFwcGVyU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRl
ZFByb3BlcnR5V3JhcHBlcjxTaGFwZVZhbHVlPiB7CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFw
ZSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBw
ZXJTaGFwZShDU1NQcm9wZXJ0eUlEIHByb3AsIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6Kmdl
dHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxTaGFwZVZh
bHVlPiYmKSkKLSAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+
KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIFByb3BlcnR5V3JhcHBlclNoYXBlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxTaGFwZVZhbHVlPiYmKSkKKyAg
ICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+KHByb3BlcnR5LCBn
ZXR0ZXIsIHNldHRlcikKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorcHJpdmF0
ZToKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRl
cnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCiAgICAgICAgIC8v
IElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVy
biB0cnVlLgpAQCAtOTExLDggKzkwOSw4IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFhIHx8ICFi
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGF1dG8qIHNoYXBlQSA9IHRo
aXMtPnZhbHVlKGEpOwotICAgICAgICBhdXRvKiBzaGFwZUIgPSB0aGlzLT52YWx1ZShiKTsKKyAg
ICAgICAgYXV0byogc2hhcGVBID0gdmFsdWUoYSk7CisgICAgICAgIGF1dG8qIHNoYXBlQiA9IHZh
bHVlKGIpOwogICAgICAgICBpZiAoc2hhcGVBID09IHNoYXBlQikKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBpZiAoIXNoYXBlQSB8fCAhc2hhcGVCKQpAQCAtOTIxLDQ2ICs5MTks
NDcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLWNsYXNzIFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBw
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPiB7CitjbGFz
cyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWRQcm9w
ZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9w
LCBTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqc2V0dGVyKShSZWZQdHI8U3R5bGVJbWFnZT4mJikpCi0gICAgICAgIDogUmVmQ291
bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKKyAg
ICBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxl
SW1hZ2UqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6
OipzZXR0ZXIpKFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJv
cGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikKICAgICB7
CiAgICAgfQogCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorcHJpdmF0ZToKKyAgICBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCiAg
ICAgewogICAgICAgICBpZiAoYSA9PSBiKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIGlmICghYSB8fCAhYikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBh
dXRvKiBpbWFnZUEgPSB0aGlzLT52YWx1ZShhKTsKLSAgICAgICAgYXV0byogaW1hZ2VCID0gdGhp
cy0+dmFsdWUoYik7CisgICAgICAgIGF1dG8qIGltYWdlQSA9IHZhbHVlKGEpOworICAgICAgICBh
dXRvKiBpbWFnZUIgPSB2YWx1ZShiKTsKICAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVh
bERhdGEoaW1hZ2VBLCBpbWFnZUIpOwogICAgIH0KIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotY2xhc3MgQWNjZWxlcmF0ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFw
cGVyPFQ+IHsKK2NsYXNzIEFjY2VsZXJhdGVkUHJvcGVydHlXcmFwcGVyIGZpbmFsIDogcHVibGlj
IFByb3BlcnR5V3JhcHBlcjxUPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgQWNjZWxlcmF0ZWRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBU
IChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXIpKFQpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxUPihwcm9wLCBnZXR0ZXIsIHNldHRl
cikKKyAgICBBY2NlbGVyYXRlZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
LCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXIpKFQpKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxUPihwcm9wZXJ0eSwgZ2V0dGVy
LCBzZXR0ZXIpCiAgICAgewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGFuaW1hdGlvbklz
QWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBh
bmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogfTsK
IAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjbGFzcyBBY2NlbGVyYXRlZEluZGl2aWR1YWxUcmFu
c2Zvcm1Qcm9wZXJ0eVdyYXBwZXIgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3Jh
cHBlcjxUPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgQWNj
ZWxlcmF0ZWRJbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQg
cHJvcCwgVCogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnNldHRlcikoUmVmUHRyPFQ+JiYpKQotICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdy
YXBwZXI8VD4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgQWNjZWxlcmF0ZWRJbmRpdmlkdWFs
VHJhbnNmb3JtUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFQqIChSZW5k
ZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJl
ZlB0cjxUPiYmKSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFQ+KHByb3Bl
cnR5LCBnZXR0ZXIsIHNldHRlcikKICAgICB7CiAgICAgfQogCkBAIC05NzMsNyArOTcyLDcgQEAg
cHJpdmF0ZToKICAgICB9CiB9OwogCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIgOiBwdWJs
aWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPiB7CitjbGFzcyBQcm9w
ZXJ0eVdyYXBwZXJGaWx0ZXIgZmluYWwgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpKQpAQCAtOTgx
LDcgKzk4MCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBhbmltYXRpb25J
c0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUKK3ByaXZhdGU6CisgICAgYm9vbCBhbmltYXRp
b25Jc0FjY2VsZXJhdGVkKCkgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBwcm9w
ZXJ0eSgpID09IENTU1Byb3BlcnR5RmlsdGVyCiAjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikK
QEAgLTk5MCw5ICs5OTAsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICA7CiAgICAgfQogCi0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJT
dHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRv
dWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBj
b25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5k
RnVuYyhhbmltLCB0aGlzLT52YWx1ZShhKSwgdGhpcy0+dmFsdWUoYiksIHByb2dyZXNzLCBwcm9w
ZXJ0eSgpKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZEZ1bmMoY2xp
ZW50LCB2YWx1ZShmcm9tKSwgdmFsdWUodG8pLCBwcm9ncmVzcywgcHJvcGVydHkoKSkpOwogICAg
IH0KIH07CiAKQEAgLTEwMjAsMTcgKzEwMjAsMTggQEAgc3RhdGljIGlubGluZSBjb25zdCBTaGFk
b3dEYXRhKiBzaGFkb3dGb3JCbGVuZGluZyhjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3csIGMK
ICAgICByZXR1cm4gb3RoZXJTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdFdl
YktpdEJveFNoYWRvd0RhdGEuZ2V0KCkgOiAmZGVmYXVsdFNoYWRvd0RhdGEuZ2V0KCk7CiB9CiAK
LWNsYXNzIFByb3BlcnR5V3JhcHBlclNoYWRvdyA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlIHsKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNoYWRvdyBmaW5hbCA6IHB1YmxpYyBB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlJRCBwcm9w
LCBjb25zdCBTaGFkb3dEYXRhKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqc2V0dGVyKShzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4sIGJvb2wp
KQotICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKKyAgICBQcm9w
ZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgU2hhZG93RGF0
YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlcikoc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKSkKKyAgICAgICAgOiBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQogICAgICAgICAsIG1fZ2V0dGVyKGdl
dHRlcikKICAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCiAgICAgewogICAgIH0KIAotICAgIGJv
b2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29u
c3Qgb3ZlcnJpZGUKK3ByaXZhdGU6CisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgaWYg
KGEgPT0gYikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTA1OSwyMCArMTA2MCwyMCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVy
U3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBmaW5hbAogICAgIHsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4q
bV9nZXR0ZXIpKCk7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1f
Z2V0dGVyKSgpOworICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBmcm9tU2hhZG93ID0gKGZyb20t
PiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogdG9TaGFkb3cgPSAodG8t
PiptX2dldHRlcikoKTsKIAotICAgICAgICBpbnQgZnJvbUxlbmd0aCA9IHNoYWRvd0xpc3RMZW5n
dGgoc2hhZG93QSk7Ci0gICAgICAgIGludCB0b0xlbmd0aCA9IHNoYWRvd0xpc3RMZW5ndGgoc2hh
ZG93Qik7CisgICAgICAgIGludCBmcm9tTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChmcm9tU2hh
ZG93KTsKKyAgICAgICAgaW50IHRvTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aCh0b1NoYWRvdyk7
CiAKICAgICAgICAgaWYgKGZyb21MZW5ndGggPT0gdG9MZW5ndGggfHwgKGZyb21MZW5ndGggPD0g
MSAmJiB0b0xlbmd0aCA8PSAxKSkgewotICAgICAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVu
ZFNpbXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGFuaW0sIHByb2dyZXNzLCBzaGFkb3dBLCBzaGFk
b3dCKSwgZmFsc2UpOworICAgICAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5k
U2ltcGxlT3JNYXRjaGVkU2hhZG93TGlzdHMoY2xpZW50LCBwcm9ncmVzcywgZnJvbVNoYWRvdywg
dG9TaGFkb3cpLCBmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGFuaW0sIHBy
b2dyZXNzLCBzaGFkb3dBLCBzaGFkb3dCLCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIGZhbHNlKTsK
KyAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xp
c3RzKGNsaWVudCwgcHJvZ3Jlc3MsIGZyb21TaGFkb3csIHRvU2hhZG93LCBmcm9tTGVuZ3RoLCB0
b0xlbmd0aCksIGZhbHNlKTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECkBAIC0xMDgzLDgg
KzEwODQsNyBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKLXByaXZhdGU6Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRjaGVkU2hhZG93TGlzdHMoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91YmxlIHByb2dyZXNzLCBjb25z
dCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dCKSBjb25zdAor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRv
d0xpc3RzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgZG91YmxlIHBy
b2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dCKSBjb25zdAogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IG5l
d1NoYWRvd0RhdGE7CiAgICAgICAgIFNoYWRvd0RhdGEqIGxhc3RTaGFkb3cgPSAwOwpAQCAtMTA5
Myw3ICsxMDkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNy
Y1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0EsIHNoYWRvd0IpOwogICAgICAgICAg
ICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9yQmxlbmRpbmcoc2hhZG93
Qiwgc2hhZG93QSk7CiAKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBi
bGVuZGVkU2hhZG93ID0gYmxlbmRGdW5jKGFuaW0sIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9n
cmVzcyk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNo
YWRvdyA9IGJsZW5kRnVuYyhjbGllbnQsIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7
CiAgICAgICAgICAgICBTaGFkb3dEYXRhKiBibGVuZGVkU2hhZG93UHRyID0gYmxlbmRlZFNoYWRv
dy5nZXQoKTsKIAogICAgICAgICAgICAgaWYgKCFsYXN0U2hhZG93KQpAQCAtMTExMCw3ICsxMTEw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7CiAgICAgfQogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3Rz
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywg
Y29uc3QgU2hhZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiwgaW50
IGZyb21MZW5ndGgsIGludCB0b0xlbmd0aCkgY29uc3QKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hh
ZG93RGF0YT4gYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogY2xpZW50LCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IFNoYWRvd0RhdGEqIHNo
YWRvd0EsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IsIGludCBmcm9tTGVuZ3RoLCBpbnQgdG9M
ZW5ndGgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBUaGUgc2hhZG93cyBpbiBTaGFkb3dEYXRh
IGFyZSBzdG9yZWQgaW4gcmV2ZXJzZSBvcmRlciwgc28gd2hlbiBhbmltYXRpbmcgbWlzbWF0Y2hl
ZCBsaXN0cywKICAgICAgICAgLy8gcmV2ZXJzZSB0aGVtIGFuZCBtYXRjaCBmcm9tIHRoZSBlbmQu
CkBAIC0xMTM2LDcgKzExMzYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY29uc3QgU2hhZG93
RGF0YSogc3JjU2hhZG93ID0gc2hhZG93Rm9yQmxlbmRpbmcoZnJvbVNoYWRvdywgdG9TaGFkb3cp
OwogICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9yQmxl
bmRpbmcodG9TaGFkb3csIGZyb21TaGFkb3cpOwogCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9IGJsZW5kRnVuYyhhbmltLCBzcmNTaGFkb3cs
IGRzdFNoYWRvdywgcHJvZ3Jlc3MpOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRv
d0RhdGE+IGJsZW5kZWRTaGFkb3cgPSBibGVuZEZ1bmMoY2xpZW50LCBzcmNTaGFkb3csIGRzdFNo
YWRvdywgcHJvZ3Jlc3MpOwogICAgICAgICAgICAgLy8gSW5zZXJ0IGF0IHRoZSBzdGFydCBvZiB0
aGUgbGlzdCB0byBwcmVzZXJ2ZSB0aGUgb3JkZXIuCiAgICAgICAgICAgICBibGVuZGVkU2hhZG93
LT5zZXROZXh0KFdURk1vdmUobmV3U2hhZG93RGF0YSkpOwogICAgICAgICAgICAgbmV3U2hhZG93
RGF0YSA9IFdURk1vdmUoYmxlbmRlZFNoYWRvdyk7CkBAIC0xMTQ5LDE3ICsxMTQ5LDE4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoc3RkOjp1bmlxdWVfcHRy
PFNoYWRvd0RhdGE+LCBib29sKTsKIH07CiAKLWNsYXNzIFByb3BlcnR5V3JhcHBlck1heWJlSW52
YWxpZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworY2xhc3Mg
UHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IgZmluYWwgOiBwdWJsaWMgQW5pbWF0aW9u
UHJvcGVydHlXcmFwcGVyQmFzZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlJRCBw
cm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChS
ZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSkKLSAgICAgICAgOiBBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlk
Q29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6
KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9y
JikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKICAg
ICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCiAgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQogICAg
IHsKICAgICB9CiAKLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCitwcml2YXRlOgorICAgIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwK
ICAgICB7CiAgICAgICAgIGlmIChhID09IGIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTExODAsNzUgKzExODEsNzYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09
IHRvQ29sb3I7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVu
ZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAg
ICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAgICAgQ29sb3IgdG9Db2xvciA9IHZh
bHVlKGIpOworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShmcm9tKTsKKyAgICAgICAg
Q29sb3IgdG9Db2xvciA9IHZhbHVlKHRvKTsKIAogICAgICAgICBpZiAoIWZyb21Db2xvci5pc1Zh
bGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGZyb21Db2xvciA9IGEt
PmNvbG9yKCk7CisgICAgICAgICAgICBmcm9tQ29sb3IgPSBmcm9tLT5jb2xvcigpOwogICAgICAg
ICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgdG9Db2xvciA9IGItPmNvbG9y
KCk7Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIGZyb21Db2xvciwg
dG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgICAgIHRvQ29sb3IgPSB0by0+Y29sb3IoKTsK
KyAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhjbGllbnQsIGZyb21D
b2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKICAgICB9CiAKLSAgICBDb2xvciB2YWx1ZShjb25z
dCBSZW5kZXJTdHlsZSogYSkgY29uc3QKKyAgICBDb2xvciB2YWx1ZShjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKTsK
KyAgICAgICAgcmV0dXJuIChzdHlsZS0+Km1fZ2V0dGVyKSgpOwogICAgIH0KIAogI2lmICFMT0df
RElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNz
KSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20s
IGNvbnN0IFJlbmRlclN0eWxlKiB0bywgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgLy8gRklYTUU6IGJldHRlciBs
b2dnaW5nLgotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIg
IGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8
IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6
Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFs
dWUocmVzdWx0KSk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0g
PDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9t
ICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0byAiIDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4
dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+
ICIgPDwgdmFsdWUocmVzdWx0KSk7CiAgICAgfQogI2VuZGlmCiAKLXByaXZhdGU6CiAgICAgY29u
c3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OwogICAgIHZvaWQgKFJl
bmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENvbG9yJik7CiB9OwogCiAKIGVudW0gTWF5YmVJ
bnZhbGlkQ29sb3JUYWcgeyBNYXliZUludmFsaWRDb2xvciB9OwotY2xhc3MgUHJvcGVydHlXcmFw
cGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSB7CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvciBmaW5hbCA6
IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRD
b2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpLCBj
b25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqdmlzaXRlZEdldHRlcikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6Oip2aXNpdGVkU2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAgICA6IEFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX3dyYXBwZXIobWFr
ZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgQ29sb3ImPj4ocHJvcCwgZ2V0dGVyLCBzZXR0
ZXIpKQotICAgICAgICAsIG1fdmlzaXRlZFdyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBw
ZXI8Y29uc3QgQ29sb3ImPj4ocHJvcCwgdmlzaXRlZEdldHRlciwgdmlzaXRlZFNldHRlcikpCisg
ICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksIGNvbnN0IENvbG9yJiAoUmVuZGVy
U3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnZpc2l0
ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZShwcm9wZXJ0eSkKKyAgICAgICAgLCBtX3dyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0
eVdyYXBwZXI8Y29uc3QgQ29sb3ImPj4ocHJvcGVydHksIGdldHRlciwgc2V0dGVyKSkKKyAgICAg
ICAgLCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyPGNvbnN0IENv
bG9yJj4+KHByb3BlcnR5LCB2aXNpdGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKICAgICB7CiAg
ICAgfQotICAgIFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5
SUQgcHJvcCwgTWF5YmVJbnZhbGlkQ29sb3JUYWcsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6
OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xv
ciYpLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqdmlzaXRlZEdldHRlcikoKSBjb25zdCwg
dm9pZCAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkU2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAg
ICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX3dyYXBw
ZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcj4ocHJvcCwgZ2V0
dGVyLCBzZXR0ZXIpKQotICAgICAgICAsIG1fdmlzaXRlZFdyYXBwZXIobWFrZVVuaXF1ZTxQcm9w
ZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcj4ocHJvcCwgdmlzaXRlZEdldHRlciwgdmlzaXRl
ZFNldHRlcikpCisgICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSwgTWF5YmVJbnZhbGlkQ29sb3JUYWcsIGNvbnN0IENvbG9yJiAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShj
b25zdCBDb2xvciYpLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqdmlzaXRlZEdldHRlciko
KSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkU2V0dGVyKShjb25zdCBDb2xvciYp
KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCisgICAg
ICAgICwgbV93cmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29s
b3I+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikpCisgICAgICAgICwgbV92aXNpdGVkV3JhcHBl
cihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihwcm9wZXJ0eSwg
dmlzaXRlZEdldHRlciwgdmlzaXRlZFNldHRlcikpCiAgICAgewogICAgIH0KLSAgICBib29sIGVx
dWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92
ZXJyaWRlCisKK3ByaXZhdGU6CisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fd3JhcHBlci0+ZXF1YWxzKGEsIGIpICYmIG1fdmlzaXRlZFdyYXBwZXItPmVxdWFscyhhLCBi
KTsKICAgICB9Ci0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKworICAgIHZvaWQg
YmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBSZW5kZXJTdHls
ZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHls
ZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIG1fd3Jh
cHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0gICAgICAgIG1fdmlzaXRl
ZFdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworICAgICAgICBtX3dy
YXBwZXItPmJsZW5kKGNsaWVudCwgZGVzdGluYXRpb24sIGZyb20sIHRvLCBwcm9ncmVzcyk7Cisg
ICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmJsZW5kKGNsaWVudCwgZGVzdGluYXRpb24sIGZyb20s
IHRvLCBwcm9ncmVzcyk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBS
ZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9p
ZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRv
LCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFs
CiAgICAgewotICAgICAgICBtX3dyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIHJlc3VsdCwgcHJvZ3Jl
c3MpOwotICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5sb2dCbGVuZChhLCBiLCByZXN1bHQsIHBy
b2dyZXNzKTsKKyAgICAgICAgbV93cmFwcGVyLT5sb2dCbGVuZChmcm9tLCB0bywgcmVzdWx0LCBw
cm9ncmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxvZ0JsZW5kKGZyb20sIHRvLCBy
ZXN1bHQsIHByb2dyZXNzKTsKICAgICB9CiAjZW5kaWYKIAotcHJpdmF0ZToKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV93cmFwcGVyOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3Zpc2l0ZWRXcmFw
cGVyOwogfTsKQEAgLTEyNzIsNiArMTI3NCw3IEBAIHB1YmxpYzoKICNpZiAhTE9HX0RJU0FCTEVE
CiAgICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25z
dCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKICNlbmRp
ZgorCiBwcml2YXRlOgogICAgIENTU1Byb3BlcnR5SUQgbV9wcm9wZXJ0eTsKIH07CkBAIC0xMjg3
LDEzICsxMjkwLDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCitwcm90ZWN0ZWQ6CiAgICAg
Ym9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0
IG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoYSA9PSBiKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGlmICghYSB8fCAhYikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgcmV0dXJuIHRoaXMtPnZhbHVlKGEpID09IHRoaXMtPnZhbHVlKGIpOworICAgICAg
ICByZXR1cm4gdmFsdWUoYSkgPT0gdmFsdWUoYik7CiAgICAgfQogCiAgICAgVCB2YWx1ZShjb25z
dCBGaWxsTGF5ZXIqIGxheWVyKSBjb25zdApAQCAtMTMwMiwxOCArMTMwNiwxOCBAQCBwdWJsaWM6
CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmls
bExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBG
aWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIq
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJv
cGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8
PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGlu
Z0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgICAg
IExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBn
ZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwg
IiB0byAiIDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVy
UmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7
CiAgICAgfQogI2VuZGlmCiAKLXByb3RlY3RlZDoKK3ByaXZhdGU6CiAgICAgVCAoRmlsbExheWVy
OjoqbV9nZXR0ZXIpKCkgY29uc3Q7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNz
IEZpbGxMYXllclByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8Y29uc3QgVCY+IHsKK2NsYXNzIEZpbGxMYXllclByb3BlcnR5V3JhcHBlciBmaW5h
bCA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+IHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgVCYgKEZpbGxMYXllcjo6Kmdl
dHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqc2V0dGVyKShUKSkKQEAgLTEzMjIsMzEg
KzEzMjYsMzEgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBG
aWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBv
dmVycmlkZQorcHJpdmF0ZToKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGNsaWVudCwgRmlsbExheWVyKiBkZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVy
KiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFs
CiAgICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCB0aGlzLT52
YWx1ZShhKSwgdGhpcy0+dmFsdWUoYiksIHByb2dyZXNzKSk7CisgICAgICAgIChkZXN0aW5hdGlv
bi0+KnRoaXMtPm1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50LCB0aGlzLT52YWx1ZShmcm9tKSwg
dGhpcy0+dmFsdWUodG8pLCBwcm9ncmVzcykpOwogICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJw
b2xhdGUoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0IG92ZXJy
aWRlCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0
IEZpbGxMYXllciogdG8pIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICByZXR1cm4gY2FuSW50
ZXJwb2xhdGVMZW5ndGhWYXJpYW50cyh0aGlzLT52YWx1ZShhKSwgdGhpcy0+dmFsdWUoYikpOwor
ICAgICAgICByZXR1cm4gY2FuSW50ZXJwb2xhdGVMZW5ndGhWYXJpYW50cyh0aGlzLT52YWx1ZShm
cm9tKSwgdGhpcy0+dmFsdWUodG8pKTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAg
dm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBh
LCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIq
IGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwK
ICAgICB7CiAgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAg
YmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUoRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IFQmPjo6cHJvcGVydHkoKSkKLSAgICAgICAgICAgIDw8ICIgZnJvbSAiIDw8IEZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGEpCi0gICAgICAg
ICAgICA8PCAiIHRvICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQm
Pjo6dmFsdWUoYikKKyAgICAgICAgICAgIDw8ICIgZnJvbSAiIDw8IEZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGZyb20pCisgICAgICAgICAgICA8PCAiIHRv
ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUodG8p
CiAgICAgICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVj
dGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUocmVzdWx0KSk7CiAgICAgfQogI2VuZGlmCiAKLXBy
b3RlY3RlZDoKICAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoVCk7CiB9OwogCi1jbGFz
cyBGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4geworY2xhc3MgRmlsbExheWVyUG9zaXRp
b25Qcm9wZXJ0eVdyYXBwZXIgZmluYWwgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IExlbmd0aCY+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICBGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBjb25zdCBMZW5ndGgmIChGaWxsTGF5ZXI6OipsZW5ndGhHZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKEZpbGxMYXllcjo6Kmxlbmd0aFNldHRlcikoTGVuZ3RoKSwgRWRnZSAoRmlsbExh
eWVyOjoqb3JpZ2luR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipvcmlnaW5TZXR0
ZXIpKEVkZ2UpLCBFZGdlIGZhckVkZ2UpCkBAIC0xMzU4LDE1ICsxMzYyLDE2IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25z
dCBGaWxsTGF5ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCitwcml2YXRlOgorICAgIGJvb2wgZXF1YWxz
KGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25zdCBmaW5hbAogICAg
IHsKICAgICAgICAgaWYgKGEgPT0gYikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICBpZiAoIWEgfHwgIWIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgYXV0
byBmcm9tTGVuZ3RoID0gdGhpcy0+dmFsdWUoYSk7Ci0gICAgICAgIGF1dG8gdG9MZW5ndGggPSB0
aGlzLT52YWx1ZShiKTsKKyAgICAgICAgYXV0byBmcm9tTGVuZ3RoID0gdmFsdWUoYSk7CisgICAg
ICAgIGF1dG8gdG9MZW5ndGggPSB2YWx1ZShiKTsKICAgICAgICAgCiAgICAgICAgIEVkZ2UgZnJv
bUVkZ2UgPSAoYS0+Km1fb3JpZ2luR2V0dGVyKSgpOwogICAgICAgICBFZGdlIHRvRWRnZSA9IChi
LT4qbV9vcmlnaW5HZXR0ZXIpKCk7CkBAIC0xMzc0LDEzICsxMzc5LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGZyb21MZW5ndGggPT0gdG9MZW5ndGggJiYgZnJvbUVkZ2UgPT0gdG9FZGdl
OwogICAgIH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExh
eWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBibGVuZChj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIEZpbGxMYXllciogZGVzdGlu
YXRpb24sIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91Ymxl
IHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgYXV0byBmcm9tTGVuZ3RoID0g
dGhpcy0+dmFsdWUoYSk7Ci0gICAgICAgIGF1dG8gdG9MZW5ndGggPSB0aGlzLT52YWx1ZShiKTsK
KyAgICAgICAgYXV0byBmcm9tTGVuZ3RoID0gdmFsdWUoZnJvbSk7CisgICAgICAgIGF1dG8gdG9M
ZW5ndGggPSB2YWx1ZSh0byk7CiAgICAgICAgIAotICAgICAgICBFZGdlIGZyb21FZGdlID0gKGEt
PiptX29yaWdpbkdldHRlcikoKTsKLSAgICAgICAgRWRnZSB0b0VkZ2UgPSAoYi0+Km1fb3JpZ2lu
R2V0dGVyKSgpOworICAgICAgICBFZGdlIGZyb21FZGdlID0gKGZyb20tPiptX29yaWdpbkdldHRl
cikoKTsKKyAgICAgICAgRWRnZSB0b0VkZ2UgPSAodG8tPiptX29yaWdpbkdldHRlcikoKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChmcm9tRWRnZSAhPSB0b0VkZ2UpIHsKICAgICAgICAgICAgIC8v
IENvbnZlcnQgdGhlIHJpZ2h0L2JvdHRvbSBpbnRvIGEgY2FsYyBleHByZXNzaW9uLApAQCAtMTM4
OCwyMSArMTM5MywyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZnJvbUxlbmd0aCA9IGNv
bnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aChmcm9tTGVuZ3RoKTsKICAgICAgICAgICAgIGVs
c2UgaWYgKHRvRWRnZSA9PSBtX2ZhckVkZ2UpIHsKICAgICAgICAgICAgICAgICB0b0xlbmd0aCA9
IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aCh0b0xlbmd0aCk7Ci0gICAgICAgICAgICAg
ICAgKGRzdC0+Km1fb3JpZ2luU2V0dGVyKShmcm9tRWRnZSk7IC8vIE5vdyB3ZSBoYXZlIGEgY2Fs
YygxMDAlIC0gbCksIGl0J3MgcmVsYXRpdmUgdG8gdGhlIGxlZnQvdG9wIGVkZ2UuCisgICAgICAg
ICAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9vcmlnaW5TZXR0ZXIpKGZyb21FZGdlKTsgLy8gTm93
IHdlIGhhdmUgYSBjYWxjKDEwMCUgLSBsKSwgaXQncyByZWxhdGl2ZSB0byB0aGUgbGVmdC90b3Ag
ZWRnZS4KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIChkc3QtPiptX2xlbmd0
aFNldHRlcikoYmxlbmRGdW5jKGFuaW0sIGZyb21MZW5ndGgsIHRvTGVuZ3RoLCBwcm9ncmVzcykp
OworICAgICAgICAoZGVzdGluYXRpb24tPiptX2xlbmd0aFNldHRlcikoYmxlbmRGdW5jKGNsaWVu
dCwgZnJvbUxlbmd0aCwgdG9MZW5ndGgsIHByb2dyZXNzKSk7CiAgICAgfQogCiAjaWYgIUxPR19E
SVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0
IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IG92ZXJyaWRlCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29u
c3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywg
c3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8
ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwg
VGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAi
IC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRp
b25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHko
KSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0byAiIDw8IHZhbHVlKHRvKSA8PCAi
IGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dy
ZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CiAgICAgfQogI2VuZGlmCiAKLXByb3Rl
Y3RlZDoKICAgICB2b2lkIChGaWxsTGF5ZXI6OiptX2xlbmd0aFNldHRlcikoTGVuZ3RoKTsKICAg
ICBFZGdlIChGaWxsTGF5ZXI6OiptX29yaWdpbkdldHRlcikoKSBjb25zdDsKICAgICB2b2lkIChG
aWxsTGF5ZXI6OiptX29yaWdpblNldHRlcikoRWRnZSk7CkBAIC0xNDE5LDI2ICsxNDIzLDI2IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVyKiBh
LCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKK3By
aXZhdGU6CisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBj
bGllbnQsIEZpbGxMYXllciogZGVzdGluYXRpb24sIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29u
c3QgRmlsbExheWVyKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKLSAg
ICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgdGhpcy0+dmFsdWUoYSksIHRo
aXMtPnZhbHVlKGIpLCBwcm9ncmVzcykpOworICAgICAgICAoZGVzdGluYXRpb24tPip0aGlzLT5t
X3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVl
KHRvKSwgcHJvZ3Jlc3MpKTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBs
b2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25z
dCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB2b2lk
IGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGZyb20s
IGNvbnN0IEZpbGxMYXllciogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxl
bmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUoRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVy
PFQqPjo6cHJvcGVydHkoKSkKLSAgICAgICAgICAgIDw8ICIgZnJvbSAiIDw8IEZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKGEpCi0gICAgICAgICAgICA8PCAiIHRvICIg
PDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUoYikKKyAgICAgICAg
ICAgIDw8ICIgZnJvbSAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZh
bHVlKGZyb20pCisgICAgICAgICAgICA8PCAiIHRvICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPFQqPjo6dmFsdWUodG8pCiAgICAgICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0
cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIg
PDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUocmVzdWx0KSk7CiAg
ICAgfQogI2VuZGlmCiAKLXByb3RlY3RlZDoKICAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRl
cikoUmVmUHRyPFQ+JiYpOwogfTsKIAotY2xhc3MgRmlsbExheWVyU3R5bGVJbWFnZVByb3BlcnR5
V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFN0eWxl
SW1hZ2U+IHsKK2NsYXNzIEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIgZmluYWwg
OiBwdWJsaWMgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPiB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRmlsbExheWVyU3R5
bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZUltYWdl
KiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIp
KFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKQEAgLTE0NDYsMjQgKzE0NTAsMjUgQEAgcHVibGljOgog
ICAgIHsKICAgICB9CiAKLSAgICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0
IEZpbGxMYXllciogYikgY29uc3Qgb3ZlcnJpZGUKK3ByaXZhdGU6CisgICAgYm9vbCBlcXVhbHMo
Y29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0IGZpbmFsCiAgICAg
ewogICAgICAgICBpZiAoYSA9PSBiKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IGlmICghYSB8fCAhYikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJu
IGFyZVBvaW50aW5nVG9FcXVhbERhdGEodGhpcy0+dmFsdWUoYSksIHRoaXMtPnZhbHVlKGIpKTsK
KyAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEodmFsdWUoYSksIHZhbHVlKGIp
KTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBG
aWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIs
IGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0
IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXll
ciogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIExPR19X
SVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9w
ZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8
IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5n
SW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdl
dFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShmcm9tKSA8PCAi
IHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJS
ZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsK
ICAgICB9CiAjZW5kaWYKIH07CiAKLWNsYXNzIEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIgOiBw
dWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CitjbGFzcyBGaWxsTGF5ZXJzUHJv
cGVydHlXcmFwcGVyIGZpbmFsIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ug
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgY29u
c3QgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNHZXR0ZXIpKCkgY29uc3Q7CkBAIC0x
NDk2LDcgKzE1MDEsOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIGVx
dWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92
ZXJyaWRlCitwcml2YXRlOgorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIGlmIChhID09
IGIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE1MTcsMTAgKzE1MjMsMTAgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIGNhbkludGVycG9s
YXRlKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3Zl
cnJpZGUKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBj
b25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBhdXRvKiBm
cm9tTGF5ZXIgPSAmKGEtPiptX2xheWVyc0dldHRlcikoKTsKLSAgICAgICAgYXV0byogdG9MYXll
ciA9ICYoYi0+Km1fbGF5ZXJzR2V0dGVyKSgpOworICAgICAgICBhdXRvKiBmcm9tTGF5ZXIgPSAm
KGZyb20tPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0byogdG9MYXllciA9ICYodG8t
PiptX2xheWVyc0dldHRlcikoKTsKIAogICAgICAgICB3aGlsZSAoZnJvbUxheWVyICYmIHRvTGF5
ZXIpIHsKICAgICAgICAgICAgIGlmICghbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXItPmNhbklu
dGVycG9sYXRlKGZyb21MYXllciwgdG9MYXllcikpCkBAIC0xNTMzLDE2ICsxNTM5LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHls
ZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZp
bmFsCiAgICAgewotICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGEtPiptX2xheWVyc0dldHRlciko
KTsKLSAgICAgICAgYXV0byogYkxheWVyID0gJihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAg
ICAgIGF1dG8qIGRzdExheWVyID0gJihkc3QtPiptX2xheWVyc0FjY2Vzc29yKSgpOworICAgICAg
ICBhdXRvKiBmcm9tTGF5ZXIgPSAmKGZyb20tPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAg
YXV0byogdG9MYXllciA9ICYodG8tPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0byog
ZHN0TGF5ZXIgPSAmKGRlc3RpbmF0aW9uLT4qbV9sYXllcnNBY2Nlc3NvcikoKTsKIAotICAgICAg
ICB3aGlsZSAoYUxheWVyICYmIGJMYXllciAmJiBkc3RMYXllcikgewotICAgICAgICAgICAgbV9m
aWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdExheWVyLCBhTGF5ZXIsIGJM
YXllciwgcHJvZ3Jlc3MpOwotICAgICAgICAgICAgYUxheWVyID0gYUxheWVyLT5uZXh0KCk7Ci0g
ICAgICAgICAgICBiTGF5ZXIgPSBiTGF5ZXItPm5leHQoKTsKKyAgICAgICAgd2hpbGUgKGZyb21M
YXllciAmJiB0b0xheWVyICYmIGRzdExheWVyKSB7CisgICAgICAgICAgICBtX2ZpbGxMYXllclBy
b3BlcnR5V3JhcHBlci0+YmxlbmQoY2xpZW50LCBkc3RMYXllciwgZnJvbUxheWVyLCB0b0xheWVy
LCBwcm9ncmVzcyk7CisgICAgICAgICAgICBmcm9tTGF5ZXIgPSBmcm9tTGF5ZXItPm5leHQoKTsK
KyAgICAgICAgICAgIHRvTGF5ZXIgPSB0b0xheWVyLT5uZXh0KCk7CiAgICAgICAgICAgICBkc3RM
YXllciA9IGRzdExheWVyLT5uZXh0KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTUwLDI3ICsx
NTU2LDI1IEBAIHB1YmxpYzoKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgdm9pZCBsb2dCbGVuZChj
b25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5k
ZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewotICAg
ICAgICBhdXRvKiBhTGF5ZXIgPSAmKGZyb20tPiptX2xheWVyc0dldHRlcikoKTsKLSAgICAgICAg
YXV0byogYkxheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0dGVyKSgpOworICAgICAgICBhdXRvKiBm
cm9tTGF5ZXIgPSAmKGZyb20tPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0byogdG9M
YXllciA9ICYodG8tPiptX2xheWVyc0dldHRlcikoKTsKICAgICAgICAgYXV0byogZHN0TGF5ZXIg
PSAmKHJlc3VsdC0+Km1fbGF5ZXJzR2V0dGVyKSgpOwogCi0gICAgICAgIHdoaWxlIChhTGF5ZXIg
JiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0gICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5
V3JhcHBlci0+bG9nQmxlbmQoZHN0TGF5ZXIsIGFMYXllciwgYkxheWVyLCBwcm9ncmVzcyk7Ci0g
ICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXItPm5leHQoKTsKLSAgICAgICAgICAgIGJMYXllciA9
IGJMYXllci0+bmV4dCgpOworICAgICAgICB3aGlsZSAoZnJvbUxheWVyICYmIHRvTGF5ZXIgJiYg
ZHN0TGF5ZXIpIHsKKyAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dC
bGVuZChkc3RMYXllciwgZnJvbUxheWVyLCB0b0xheWVyLCBwcm9ncmVzcyk7CisgICAgICAgICAg
ICBmcm9tTGF5ZXIgPSBmcm9tTGF5ZXItPm5leHQoKTsKKyAgICAgICAgICAgIHRvTGF5ZXIgPSB0
b0xheWVyLT5uZXh0KCk7CiAgICAgICAgICAgICBkc3RMYXllciA9IGRzdExheWVyLT5uZXh0KCk7
CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAotcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV9maWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXI7Ci0KICAgICBMYXllcnNHZXR0ZXIgbV9sYXllcnNHZXR0ZXI7CiAgICAgTGF5
ZXJzQWNjZXNzb3IgbV9sYXllcnNBY2Nlc3NvcjsKIH07CiAKLWNsYXNzIFNob3J0aGFuZFByb3Bl
cnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKK2NsYXNz
IFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciBmaW5hbCA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVmVjdG9y
PEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBsb25naGFuZFdyYXBwZXJzKQpAQCAtMTU3
OSw5ICsxNTgzLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBpc1Nob3J0
aGFuZFdyYXBwZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBp
c1Nob3J0aGFuZFdyYXBwZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBi
b29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNv
bnN0IG92ZXJyaWRlCisgICAgY29uc3QgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UqPiYgcHJvcGVydHlXcmFwcGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVy
czsgfQorCitwcml2YXRlOgorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIGlmIChhID09
IGIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE1OTUsMjcgKzE2MDIsMjQgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogY2xpZW50LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxl
KiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKICAgICB7CiAgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVy
cykKLSAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3Mp
OworICAgICAgICAgICAgd3JhcHBlci0+YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwg
dG8sIHByb2dyZXNzKTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dC
bGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJl
bmRlclN0eWxlKiBkc3QsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGxv
Z0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGNv
bnN0IFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5h
bAogICAgIHsKICAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJz
KQotICAgICAgICAgICAgd3JhcHBlci0+bG9nQmxlbmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7Cisg
ICAgICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChmcm9tLCB0bywgZGVzdGluYXRpb24sIHByb2dy
ZXNzKTsKICAgICB9CiAjZW5kaWYKIAotICAgIGNvbnN0IFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlKj4mIHByb3BlcnR5V3JhcHBlcnMoKSBjb25zdCB7IHJldHVybiBtX3Byb3Bl
cnR5V3JhcHBlcnM7IH0KLQotcHJpdmF0ZToKICAgICBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSo+IG1fcHJvcGVydHlXcmFwcGVyczsKIH07CiAKLWNsYXNzIFByb3BlcnR5V3Jh
cHBlckZsZXggOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CitjbGFzcyBQ
cm9wZXJ0eVdyYXBwZXJGbGV4IGZpbmFsIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFByb3Bl
cnR5V3JhcHBlckZsZXgoKQpAQCAtMTYyMyw3ICsxNjI3LDggQEAgcHVibGljOgogICAgIHsKICAg
ICB9CiAKLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVy
U3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCitwcml2YXRlOgorICAgIGJvb2wgZXF1YWxzKGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwKICAgICB7
CiAgICAgICAgIGlmIChhID09IGIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE2MzMs
MTYgKzE2MzgsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0g
Yi0+ZmxleEJhc2lzKCkgJiYgYS0+ZmxleEdyb3coKSA9PSBiLT5mbGV4R3JvdygpICYmIGEtPmZs
ZXhTaHJpbmsoKSA9PSBiLT5mbGV4U2hyaW5rKCk7CiAgICAgfQogCi0gICAgYm9vbCBjYW5JbnRl
cnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0
IG92ZXJyaWRlCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJv
bSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgcmV0
dXJuIGEtPmZsZXhHcm93KCkgIT0gYi0+ZmxleEdyb3coKSAmJiBhLT5mbGV4U2hyaW5rKCkgIT0g
Yi0+ZmxleFNocmluaygpICYmIGNhbkludGVycG9sYXRlTGVuZ3RocyhhLT5mbGV4QmFzaXMoKSwg
Yi0+ZmxleEJhc2lzKCksIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGZyb20tPmZsZXhHcm93KCkg
IT0gdG8tPmZsZXhHcm93KCkgJiYgZnJvbS0+ZmxleFNocmluaygpICE9IHRvLT5mbGV4U2hyaW5r
KCkgJiYgY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGZyb20tPmZsZXhCYXNpcygpLCB0by0+ZmxleEJh
c2lzKCksIGZhbHNlKTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50
LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25z
dCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0g
ICAgICAgIGRzdC0+c2V0RmxleEJhc2lzKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4QmFzaXMoKSwg
Yi0+ZmxleEJhc2lzKCksIHByb2dyZXNzKSk7Ci0gICAgICAgIGRzdC0+c2V0RmxleEdyb3coYmxl
bmRGdW5jKGFuaW0sIGEtPmZsZXhHcm93KCksIGItPmZsZXhHcm93KCksIHByb2dyZXNzKSk7Ci0g
ICAgICAgIGRzdC0+c2V0RmxleFNocmluayhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleFNocmluaygp
LCBiLT5mbGV4U2hyaW5rKCksIHByb2dyZXNzKSk7CisgICAgICAgIGRlc3RpbmF0aW9uLT5zZXRG
bGV4QmFzaXMoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS0+ZmxleEJhc2lzKCksIHRvLT5mbGV4QmFz
aXMoKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgZGVzdGluYXRpb24tPnNldEZsZXhHcm93KGJsZW5k
RnVuYyhjbGllbnQsIGZyb20tPmZsZXhHcm93KCksIHRvLT5mbGV4R3JvdygpLCBwcm9ncmVzcykp
OworICAgICAgICBkZXN0aW5hdGlvbi0+c2V0RmxleFNocmluayhibGVuZEZ1bmMoY2xpZW50LCBm
cm9tLT5mbGV4U2hyaW5rKCksIHRvLT5mbGV4U2hyaW5rKCksIHByb2dyZXNzKSk7CiAgICAgfQog
CiAjaWYgIUxPR19ESVNBQkxFRApAQCAtMTY1NCwxOCArMTY1OSwxOSBAQCBwdWJsaWM6CiAjZW5k
aWYKIH07CiAKLWNsYXNzIFByb3BlcnR5V3JhcHBlclNWR1BhaW50IDogcHVibGljIEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UgeworY2xhc3MgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQgZmlu
YWwgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQoQ1NT
UHJvcGVydHlJRCBwcm9wLCBTVkdQYWludFR5cGUgKFJlbmRlclN0eWxlOjoqcGFpbnRUeXBlR2V0
dGVyKSgpIGNvbnN0LCBDb2xvciAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAgICA6IEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKKyAgICBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTVkdQYWludFR5cGUgKFJlbmRlclN0eWxlOjoqcGFpbnRU
eXBlR2V0dGVyKSgpIGNvbnN0LCBDb2xvciAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3Qs
IHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQorICAgICAgICA6IEFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCiAgICAgICAgICwgbV9wYWludFR5
cGVHZXR0ZXIocGFpbnRUeXBlR2V0dGVyKQogICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKICAg
ICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCiAgICAgewogICAgIH0KIAotICAgIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJp
ZGUKK3ByaXZhdGU6CisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgaWYgKGEgPT0gYikK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTY5NSwxNCArMTcwMSwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IG92ZXJyaWRlCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZy
b20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAog
ICAgIHsKLSAgICAgICAgaWYgKChhLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRU
eXBlOjpSR0JDb2xvcgotICAgICAgICAgICAgfHwgKGItPiptX3BhaW50VHlwZUdldHRlcikoKSAh
PSBTVkdQYWludFR5cGU6OlJHQkNvbG9yKQorICAgICAgICBpZiAoKGZyb20tPiptX3BhaW50VHlw
ZUdldHRlcikoKSAhPSBTVkdQYWludFR5cGU6OlJHQkNvbG9yCisgICAgICAgICAgICB8fCAodG8t
PiptX3BhaW50VHlwZUdldHRlcikoKSAhPSBTVkdQYWludFR5cGU6OlJHQkNvbG9yKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIp
KCk7Ci0gICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBD
b2xvciBmcm9tQ29sb3IgPSAoZnJvbS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBDb2xvciB0b0Nv
bG9yID0gKHRvLT4qbV9nZXR0ZXIpKCk7CiAKICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxp
ZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3MTEs
NyArMTcxNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7CiAg
ICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICB0b0NvbG9yID0gQ29s
b3IoKTsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9y
LCB0b0NvbG9yLCBwcm9ncmVzcykpOworICAgICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlciko
YmxlbmRGdW5jKGNsaWVudCwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOwogICAgIH0K
IAogI2lmICFMT0dfRElTQUJMRUQKQEAgLTE3MjIsMTMgKzE3MjgsMTIgQEAgcHVibGljOgogICAg
IH0KICNlbmRpZgogCi1wcml2YXRlOgogICAgIFNWR1BhaW50VHlwZSAoUmVuZGVyU3R5bGU6Oipt
X3BhaW50VHlwZUdldHRlcikoKSBjb25zdDsKICAgICBDb2xvciAoUmVuZGVyU3R5bGU6OiptX2dl
dHRlcikoKSBjb25zdDsKICAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBD
b2xvciYpOwogfTsKIAotY2xhc3MgUHJvcGVydHlXcmFwcGVyRm9udFN0eWxlIDogcHVibGljIFBy
b3BlcnR5V3JhcHBlcjxPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+PiB7CitjbGFzcyBQcm9w
ZXJ0eVdyYXBwZXJGb250U3R5bGUgZmluYWwgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPE9wdGlv
bmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBQcm9wZXJ0eVdyYXBwZXJGb250U3R5bGUoKQpAQCAtMTczNiwxMiArMTc0
MSwxMyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUo
Y29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3Qgb3Zl
cnJpZGUKK3ByaXZhdGU6CisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHls
ZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAg
ICAgcmV0dXJuIGZyb20tPmZvbnRJdGFsaWMoKSAmJiB0by0+Zm9udEl0YWxpYygpICYmIGZyb20t
PmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50
ICYmIHRvLT5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhp
czo6c2xudDsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9t
LCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
KyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwg
UmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewogICAg
ICAgICBhdXRvIGRpc2NyZXRlID0gIWNhbkludGVycG9sYXRlKGZyb20sIHRvKTsKIApAQCAtMTc1
Myw0MCArMTc1OSw0MSBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8gdG9Gb250SXRhbGljID0gdG8t
PmZvbnRJdGFsaWMoKTsKICAgICAgICAgYXV0byBibGVuZGVkRm9udEl0YWxpYyA9IHByb2dyZXNz
IDwgMC41ID8gZnJvbUZvbnRJdGFsaWMgOiB0b0ZvbnRJdGFsaWM7CiAgICAgICAgIGlmICghZGlz
Y3JldGUpCi0gICAgICAgICAgICBibGVuZGVkRm9udEl0YWxpYyA9IGJsZW5kRnVuYyhhbmltLCBm
cm9tRm9udEl0YWxpYywgdG9Gb250SXRhbGljLCBwcm9ncmVzcyk7CisgICAgICAgICAgICBibGVu
ZGVkRm9udEl0YWxpYyA9IGJsZW5kRnVuYyhjbGllbnQsIGZyb21Gb250SXRhbGljLCB0b0ZvbnRJ
dGFsaWMsIHByb2dyZXNzKTsKIAotICAgICAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2Vs
ZWN0b3IgPSBkc3QtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7Ci0gICAgICAgIGF1dG8g
ZGVzY3JpcHRpb24gPSBkc3QtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250U2VsZWN0
b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBkZXN0aW5hdGlvbi0+Zm9udENhc2NhZGUoKS5mb250
U2VsZWN0b3IoKTsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9IGRlc3RpbmF0aW9uLT5mb250
RGVzY3JpcHRpb24oKTsKICAgICAgICAgZGVzY3JpcHRpb24uc2V0SXRhbGljKGJsZW5kZWRGb250
SXRhbGljKTsKICAgICAgICAgZGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhibGVuZGVkU3R5
bGVBeGlzKTsKLSAgICAgICAgZHN0LT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShkZXNjcmlw
dGlvbikpOwotICAgICAgICBkc3QtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGN1cnJlbnRGb250U2Vs
ZWN0b3IpOworICAgICAgICBkZXN0aW5hdGlvbi0+c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUo
ZGVzY3JpcHRpb24pKTsKKyAgICAgICAgZGVzdGluYXRpb24tPmZvbnRDYXNjYWRlKCkudXBkYXRl
KGN1cnJlbnRGb250U2VsZWN0b3IpOwogICAgIH0KIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotY2xhc3MgQXV0b1Byb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8VD4g
eworY2xhc3MgQXV0b1Byb3BlcnR5V3JhcHBlciBmaW5hbCA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBw
ZXI8VD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEF1dG9Q
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRl
cikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFQpLCBib29sIChSZW5kZXJT
dHlsZTo6KmF1dG9HZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqYXV0b1NldHRl
cikoKSwgT3B0aW9uYWw8VD4gbWluVmFsdWUgPSBXVEY6Om51bGxvcHQpCi0gICAgICAgIDogUHJv
cGVydHlXcmFwcGVyPFQ+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIEF1dG9Qcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUKSwgYm9vbCAoUmVuZGVyU3R5bGU6
OiphdXRvR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KmF1dG9TZXR0ZXIpKCks
IE9wdGlvbmFsPFQ+IG1pblZhbHVlID0gV1RGOjpudWxsb3B0KQorICAgICAgICA6IFByb3BlcnR5
V3JhcHBlcjxUPihwcm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIpCiAgICAgICAgICwgbV9hdXRvR2V0
dGVyKGF1dG9HZXR0ZXIpCiAgICAgICAgICwgbV9hdXRvU2V0dGVyKGF1dG9TZXR0ZXIpCiAgICAg
ICAgICwgbV9taW5WYWx1ZShtaW5WYWx1ZSkKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBjYW5J
bnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRv
KSBjb25zdCBvdmVycmlkZQorcHJpdmF0ZToKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0
IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCiAg
ICAgewogICAgICAgICByZXR1cm4gIShmcm9tLT4qbV9hdXRvR2V0dGVyKSgpICYmICEodG8tPipt
X2F1dG9HZXR0ZXIpKCk7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHls
ZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92
ZXJyaWRlCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBj
bGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20s
IGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAg
IHsKLSAgICAgICAgYXV0byBibGVuZGVkVmFsdWUgPSBibGVuZEZ1bmMoYW5pbSwgdGhpcy0+dmFs
dWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3MpOwotICAgICAgICBpZiAodGhpcy0+
bV9taW5WYWx1ZSkKLSAgICAgICAgICAgIGJsZW5kZWRWYWx1ZSA9IGJsZW5kZWRWYWx1ZSA+ICp0
aGlzLT5tX21pblZhbHVlID8gYmxlbmRlZFZhbHVlIDogKnRoaXMtPm1fbWluVmFsdWU7Ci0gICAg
ICAgIChkc3QtPip0aGlzLT5tX3NldHRlcikoYmxlbmRlZFZhbHVlKTsKKyAgICAgICAgYXV0byBi
bGVuZGVkVmFsdWUgPSBibGVuZEZ1bmMoY2xpZW50LCB0aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+
dmFsdWUodG8pLCBwcm9ncmVzcyk7CisgICAgICAgIGlmIChtX21pblZhbHVlKQorICAgICAgICAg
ICAgYmxlbmRlZFZhbHVlID0gYmxlbmRlZFZhbHVlID4gKm1fbWluVmFsdWUgPyBibGVuZGVkVmFs
dWUgOiAqbV9taW5WYWx1ZTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9zZXR0ZXIp
KGJsZW5kZWRWYWx1ZSk7CiAKICAgICAgICAgaWYgKGNhbkludGVycG9sYXRlKGZyb20sIHRvKSkK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3OTQsMTQgKzE4MDEsMTMgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQoIXByb2dyZXNzIHx8IHByb2dyZXNzID09IDEuMCk7CiAgICAgICAgIGlmICgh
cHJvZ3Jlc3MpIHsKICAgICAgICAgICAgIGlmICgoZnJvbS0+Km1fYXV0b0dldHRlcikoKSkKLSAg
ICAgICAgICAgICAgICAoZHN0LT4qbV9hdXRvU2V0dGVyKSgpOworICAgICAgICAgICAgICAgIChk
ZXN0aW5hdGlvbi0+Km1fYXV0b1NldHRlcikoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmICgodG8tPiptX2F1dG9HZXR0ZXIpKCkpCi0gICAgICAgICAgICAgICAgKGRzdC0+Km1f
YXV0b1NldHRlcikoKTsKKyAgICAgICAgICAgICAgICAoZGVzdGluYXRpb24tPiptX2F1dG9TZXR0
ZXIpKCk7CiAgICAgICAgIH0KICAgICB9CiAKLXByaXZhdGU6CiAgICAgYm9vbCAoUmVuZGVyU3R5
bGU6OiptX2F1dG9HZXR0ZXIpKCkgY29uc3Q7CiAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX2F1
dG9TZXR0ZXIpKCk7CiAgICAgT3B0aW9uYWw8VD4gbV9taW5WYWx1ZTsKQEAgLTE4MTAsMTkgKzE4
MTYsMjAgQEAgcHJpdmF0ZToKIGNsYXNzIE5vbk5lZ2F0aXZlRmxvYXRQcm9wZXJ0eVdyYXBwZXIg
OiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGZsb2F0PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgTm9uTmVnYXRpdmVGbG9hdFByb3BlcnR5V3JhcHBlcihDU1NQ
cm9wZXJ0eUlEIHByb3AsIGZsb2F0IChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9p
ZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGZsb2F0KSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIE5vbk5lZ2F0aXZlRmxvYXRQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgZmxvYXQgKFJlbmRlclN0eWxlOjoq
Z2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoZmxvYXQpKQorICAg
ICAgICA6IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4ocHJvcGVydHksIGdldHRlciwgc2V0dGVyKQog
ICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBj
b25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJv
bSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewotICAgICAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9IGJsZW5kRnVuYyhhbmltLCB2YWx1
ZShmcm9tKSwgdmFsdWUodG8pLCBwcm9ncmVzcyk7Ci0gICAgICAgIChkc3QtPiptX3NldHRlciko
YmxlbmRlZFZhbHVlID4gMCA/IGJsZW5kZWRWYWx1ZSA6IDApOworICAgICAgICBhdXRvIGJsZW5k
ZWRWYWx1ZSA9IGJsZW5kRnVuYyhjbGllbnQsIHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIHByb2dy
ZXNzKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kZWRWYWx1ZSA+IDAg
PyBibGVuZGVkVmFsdWUgOiAwKTsKICAgICB9CiB9OwogCi1jbGFzcyBQZXJzcGVjdGl2ZVdyYXBw
ZXIgOiBwdWJsaWMgTm9uTmVnYXRpdmVGbG9hdFByb3BlcnR5V3JhcHBlciB7CitjbGFzcyBQZXJz
cGVjdGl2ZVdyYXBwZXIgZmluYWwgOiBwdWJsaWMgTm9uTmVnYXRpdmVGbG9hdFByb3BlcnR5V3Jh
cHBlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGVyc3Bl
Y3RpdmVXcmFwcGVyKCkKQEAgLTE4MzAsMjMgKzE4MzcsMjQgQEAgcHVibGljOgogICAgIHsKICAg
ICB9CiAKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBj
b25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRlCitwcml2YXRlOgorICAgIGJvb2wg
Y2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxl
KiB0bykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIGlmICghZnJvbS0+aGFzUGVyc3BlY3Rp
dmUoKSB8fCAhdG8tPmhhc1BlcnNwZWN0aXZlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIHJldHVybiBOb25OZWdhdGl2ZUZsb2F0UHJvcGVydHlXcmFwcGVyOjpjYW5JbnRl
cnBvbGF0ZShmcm9tLCB0byk7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJT
dHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IG92ZXJyaWRlCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZy
b20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAog
ICAgIHsKICAgICAgICAgaWYgKCFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykpCi0gICAgICAgICAg
ICAoZHN0LT4qbV9zZXR0ZXIpKHByb2dyZXNzID8gdmFsdWUodG8pIDogdmFsdWUoZnJvbSkpOwor
ICAgICAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKHByb2dyZXNzID8gdmFsdWUodG8p
IDogdmFsdWUoZnJvbSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBOb25OZWdhdGl2ZUZs
b2F0UHJvcGVydHlXcmFwcGVyOjpibGVuZChhbmltLCBkc3QsIGZyb20sIHRvLCBwcm9ncmVzcyk7
CisgICAgICAgICAgICBOb25OZWdhdGl2ZUZsb2F0UHJvcGVydHlXcmFwcGVyOjpibGVuZChjbGll
bnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwogICAgIH0KIH07CiAKLWNsYXNz
IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCB7CitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1h
dGlvbldyYXBwZXJNYXAgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIHN0YXRpYyBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIHNpbmdsZXRv
bigpCkBAIC0yMjM3LDMyICsyMjQ1LDMyIEBAIHN0YXRpYyBib29sIGdhdGhlckVuY2xvc2luZ1No
b3J0aGFuZFByb3BlcnRpZXMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQW5pbWF0aW9uCiB9CiAK
IC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IGFuaW1hdGlvbiB0aW1lcnMKLXZv
aWQgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDU1NQcm9wZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBk
c3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHBy
b2dyZXNzKQordm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7Ci0gICAgQVNTRVJUKHByb3Ag
IT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKKyAgICBBU1NFUlQocHJvcGVydHkgIT0gQ1NTUHJvcGVy
dHlJbnZhbGlkKTsKIAotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIg
PSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQ
cm9wZXJ0eShwcm9wKTsKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVy
ID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9y
UHJvcGVydHkocHJvcGVydHkpOwogICAgIGlmICh3cmFwcGVyKSB7CiAgICAgICAgIC8vIGh0dHBz
Oi8vZHJhZnRzLmNzc3dnLm9yZy93ZWItYW5pbWF0aW9ucy0xLyNkaXNjcmV0ZQogICAgICAgICAv
LyBUaGUgcHJvcGVydHnigJlzIHZhbHVlcyBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGNvbWJpbmVk
LCB0aHVzIGl0IGlzIG5vdCBhZGRpdGl2ZSBhbmQKICAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiBz
d2FwcyBmcm9tIFZhIHRvIFZiIGF0IDUwJSAocD0wLjUpLgotICAgICAgICBpZiAoIXdyYXBwZXIt
PmNhbkludGVycG9sYXRlKGEsIGIpKQorICAgICAgICBpZiAoIXdyYXBwZXItPmNhbkludGVycG9s
YXRlKGZyb20sIHRvKSkKICAgICAgICAgICAgIHByb2dyZXNzID0gcHJvZ3Jlc3MgPCAwLjUgPyAw
IDogMTsKLSAgICAgICAgd3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7
CisgICAgICAgIHdyYXBwZXItPmJsZW5kKGNsaWVudCwgZGVzdGluYXRpb24sIGZyb20sIHRvLCBw
cm9ncmVzcyk7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChh
LCBiLCBkc3QsIHByb2dyZXNzKTsKKyAgICAgICAgd3JhcHBlci0+bG9nQmxlbmQoZnJvbSwgdG8s
IGRlc3RpbmF0aW9uLCBwcm9ncmVzcyk7CiAjZW5kaWYKICAgICB9CiB9CiAKLWJvb2wgQ1NTUHJv
cGVydHlBbmltYXRpb246OmlzUHJvcGVydHlBbmltYXRhYmxlKENTU1Byb3BlcnR5SUQgcHJvcCkK
K2Jvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmlzUHJvcGVydHlBbmltYXRhYmxlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHkpCiB7Ci0gICAgcmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBl
ck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIHJldHVybiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9w
ZXJ0eShwcm9wZXJ0eSk7CiB9CiAKLWJvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlv
bk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKENTU1Byb3BlcnR5SUQgcHJvcCkKK2Jvb2wgQ1NTUHJv
cGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHkpCiB7Ci0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3Jh
cHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBl
ckZvclByb3BlcnR5KHByb3ApOworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdy
YXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBw
ZXJGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7CiAgICAgcmV0dXJuIHdyYXBwZXIgPyB3cmFwcGVyLT5h
bmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgOiBmYWxzZTsKIH0KIApAQCAtMjI3OCwxOSArMjI4Niwx
OSBAQCBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRh
YmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3BlcgogICAgIHJldHVybiBmb3VuZFByb3BlcnRpZXM7
CiB9CiAKLWJvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChDU1NQcm9w
ZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikK
K2Jvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCiB7
Ci0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5
QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3Ap
OworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0
eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9w
ZXJ0eSk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyLT5lcXVhbHMo
YSwgYik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246
OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCitib29sIENTU1Byb3BlcnR5QW5pbWF0
aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pCiB7Ci0gICAgQW5p
bWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9u
V3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIEFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlv
bldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7CiAg
ICAgaWYgKHdyYXBwZXIpCi0gICAgICAgIHJldHVybiB3cmFwcGVyLT5jYW5JbnRlcnBvbGF0ZShh
LCBiKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXItPmNhbkludGVycG9sYXRlKGZyb20sIHRvKTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423108</attachid>
            <date>2021-03-13 13:40:17 -0800</date>
            <delta_ts>2021-03-14 13:24:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223148-20210313224016.patch</filename>
            <type>text/plain</type>
            <size>91105</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjlmNzk4YzRhMzYwMjM1
Nzk0OTg3ODEyM2Y2OTdmMTEzYzdmNTA1NC4uNTcwZDVmNjBmMjkxOTRkMjFmMGFiZmUxYmZiZGY4
ZGU2NWZkYzZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDIxLTAzLTEzICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIEltcHJvdmUgY29kaW5n
IHN0eWxlIG9mIENTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzMTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXMgbXVjaCBhcyBwb3NzaWJsZSwgZG8gdGhlIGZv
bGxvd2luZzoKKworICAgICAgICAxLiBtYXJrIGNsYXNzZXMgYXMgZmluYWwKKyAgICAgICAgMi4g
bWFyayBvdmVycmlkZGVuIG1ldGhvZHMgYXMgZmluYWwKKyAgICAgICAgMy4gbW92ZSBvdmVycmlk
ZGVuIG1ldGhvZHMgaW4gcHJpdmF0ZSBzZWN0aW9ucworICAgICAgICA0LiBmYWlsaW5nIHRoYXQs
IG1vdmUgdGhlbSB0byBwcm90ZWN0ZWQgc2VjdGlvbnMKKyAgICAgICAgNS4gc3RheSBjbGVhciBm
cm9tIGFiYnJldmlhdGVkIHRlcm1zCisgICAgICAgICAgICAtIHByb3AgPT4gcHJvcGVydHkKKyAg
ICAgICAgICAgIC0gYW5pbSA9PiBjbGllbnQKKyAgICAgICAgICAgIC0gZHN0ID0+IGRlc3RpbmF0
aW9uCisgICAgICAgIDYuIHVzZSBmcm9tL3RvIGFzIHBhcmFtZXRlciBuYW1lcyBpbnN0ZWFkIG9m
IGEvYiBmb3IgYW55IG1ldGhvZAorICAgICAgICAgICB3aGVyZSB0aGUgcm9sZSBvZiB0aGUgcGFy
YW1ldGVycyB3YXJyYW50IGl0IChlZy4gYmxlbmQsIGNhbkludGVycG9sYXRlKQorCisgICAgICAg
IFRoaXMgc2hvdWxkIGdyZWF0bHkgaW1wcm92ZSB0aGUgY29kaW5nIHN0eWxlIHVzZWQgdGhyb3Vn
aG91dCBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKyAgICAgICAgYW5kIG1ha2UgaXQgY29oZXNp
dmUuCisKKyAgICAgICAgKiBhbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRmlsdGVy
T3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpibGVuZEZpbHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlOjpBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2U6OnByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlckdl
dHRlcjo6UHJvcGVydHlXcmFwcGVyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5
V3JhcHBlckdldHRlcjo6dmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlX
cmFwcGVyOjpQcm9wZXJ0eVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVmQ291bnRlZFBy
b3BlcnR5V3JhcHBlcjo6UmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpjYW5JbnRlcnBvbGF0ZUxlbmd0aHMpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW50ZXJw
b2xhdGVMZW5ndGhWYXJpYW50cyk6CisgICAgICAgIChXZWJDb3JlOjpOb25OZWdhdGl2ZUZsb2F0
UHJvcGVydHlXcmFwcGVyOjpOb25OZWdhdGl2ZUZsb2F0UHJvcGVydHlXcmFwcGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlBbmltYXRpb246OmlzUHJvcGVydHlBbmltYXRhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlBy
b3BlcnR5SXNBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6cHJvcGVydGllc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5p
bWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c2NyZXRlUHJvcGVydHlXcmFwcGVyOjpEaXNjcmV0ZVByb3BlcnR5V3JhcHBlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGhQcm9wZXJ0eVdyYXBwZXI6Okxlbmd0aFByb3BlcnR5
V3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMZW5ndGhWYXJpYW50UHJvcGVy
dHlXcmFwcGVyOjpMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Okxlbmd0aEJveFByb3BlcnR5V3JhcHBlcjo6TGVuZ3RoQm94UHJvcGVydHlX
cmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlckNsaXBQ
YXRoOjpQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3M6OlByb3BlcnR5V3JhcHBlckZv
bnRWYXJpYXRpb25TZXR0aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eVdyYXBwZXJTaGFwZTo6UHJvcGVydHlXcmFwcGVyU2hhcGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcjo6U3R5bGVJbWFnZVByb3BlcnR5V3Jh
cHBlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2NlbGVyYXRlZFByb3BlcnR5V3Jh
cHBlcjo6QWNjZWxlcmF0ZWRQcm9wZXJ0eVdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UHJvcGVydHlXcmFwcGVyRmlsdGVyOjpQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyU2hhZG93OjpQcm9wZXJ0eVdy
YXBwZXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVy
U2hhZG93OjpibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlclNoYWRvdzo6YmxlbmRNaXNtYXRjaGVk
U2hhZG93TGlzdHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlX
cmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I6OlByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlck1heWJlSW52YWxp
ZENvbG9yOjp2YWx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcjo6UHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVj
dGVkQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVyUHJvcGVydHlX
cmFwcGVyOjpGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI6OkZpbGxMYXllclBvc2l0aW9u
UHJvcGVydHlXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGxMYXllclN0
eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXI6OkZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBw
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVyc1Byb3BlcnR5V3JhcHBl
cjo6RmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXI6OlNob3J0aGFuZFByb3BlcnR5V3JhcHBlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXI6OiBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJGbGV4OjpQcm9w
ZXJ0eVdyYXBwZXJGbGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3Jh
cHBlclNWR1BhaW50OjpQcm9wZXJ0eVdyYXBwZXJTVkdQYWludCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJGb250U3R5bGU6OlByb3BlcnR5V3JhcHBlckZvbnRT
dHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdXRvUHJvcGVydHlXcmFwcGVyOjpB
dXRvUHJvcGVydHlXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBlcnNwZWN0
aXZlV3JhcHBlcjo6UGVyc3BlY3RpdmVXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6d3JhcHBl
ckZvclByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5p
bWF0aW9uV3JhcHBlck1hcDo6d3JhcHBlckZvckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2l6ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OmluZGV4RnJv
bVByb3BlcnR5SUQpOiBEZWxldGVkLgorCiAyMDIxLTAzLTEzICBBbnRvaW5lIFF1aW50ICA8Z3Jh
b3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBpbnRlcnBvbGF0aW9uIG9mIGNsaXAgQ1NT
IHByb3BlcnR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5p
bWF0aW9uLmNwcAppbmRleCBkMzZiMDkyY2VkOTFmOTI3M2E2NmU3NjJiNzZhY2E4MzFhMmE0Mzli
Li43YjQzNTIxYWIwNWZjOGVjY2E5NTQ2NzE0NTEwOGQxNWNlOWI4OTk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKQEAgLTEwMCwy
NCArMTAwLDI0IEBAIHN0YXRpYyBpbmxpbmUgR2FwTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgR2FwTGVuCiAgICAgcmV0dXJuIGJsZW5kKGZy
b20ubGVuZ3RoKCksIHRvLmxlbmd0aCgpLCBwcm9ncmVzcywgVmFsdWVSYW5nZU5vbk5lZ2F0aXZl
KTsKIH0KIAotc3RhdGljIGlubGluZSBMZW5ndGhTaXplIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBMZW5ndGhTaXplJiBmcm9tLCBjb25zdCBM
ZW5ndGhTaXplJiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBMZW5ndGhTaXpl
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGNvbnN0
IExlbmd0aFNpemUmIGZyb20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
CiB7Ci0gICAgcmV0dXJuIHsgYmxlbmRGdW5jKGFuaW0sIGZyb20ud2lkdGgsIHRvLndpZHRoLCBw
cm9ncmVzcywgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSwKLSAgICAgICAgICAgICBibGVuZEZ1bmMo
YW5pbSwgZnJvbS5oZWlnaHQsIHRvLmhlaWdodCwgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2VOb25OZWdh
dGl2ZSkgfTsKKyAgICByZXR1cm4geyBibGVuZEZ1bmMoY2xpZW50LCBmcm9tLndpZHRoLCB0by53
aWR0aCwgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSksCisgICAgICAgICAgICAgYmxl
bmRGdW5jKGNsaWVudCwgZnJvbS5oZWlnaHQsIHRvLmhlaWdodCwgcHJvZ3Jlc3MsIFZhbHVlUmFu
Z2VOb25OZWdhdGl2ZSkgfTsKIH0KIAotc3RhdGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgU2hhZG93U3R5bGUgZnJv
bSwgU2hhZG93U3R5bGUgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgU2hhZG93
U3R5bGUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwg
U2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsKICAg
ICBpZiAoZnJvbSA9PSB0bykKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgZG91YmxlIGZyb21W
YWwgPSBmcm9tID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDogMDsKICAgICBkb3VibGUgdG9W
YWwgPSB0byA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Ci0gICAgZG91YmxlIHJlc3Vs
dCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jlc3MpOworICAgIGRvdWJs
ZSByZXN1bHQgPSBibGVuZEZ1bmMoY2xpZW50LCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jlc3MpOwog
ICAgIHJldHVybiByZXN1bHQgPiAwID8gU2hhZG93U3R5bGU6Ok5vcm1hbCA6IFNoYWRvd1N0eWxl
OjpJbnNldDsKIH0KIAotc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4g
YmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IFNo
YWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitz
dGF0aWMgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZEZ1bmMoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBjb25zdCBTaGFkb3dEYXRhKiBmcm9t
LCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dyZXNzKQogewogICAgIEFTU0VSVChm
cm9tICYmIHRvKTsKICAgICBpZiAoZnJvbS0+c3R5bGUoKSAhPSB0by0+c3R5bGUoKSkKQEAgLTEy
NiwxNiArMTI2LDE2IEBAIHN0YXRpYyBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpCiAgICAgcmV0dXJuIG1ha2VV
bmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9jYXRpb24oKSwgdG8tPmxvY2F0aW9uKCks
IHByb2dyZXNzKSwKICAgICAgICAgYmxlbmQoZnJvbS0+cmFkaXVzKCksIHRvLT5yYWRpdXMoKSwg
cHJvZ3Jlc3MpLAogICAgICAgICBibGVuZChmcm9tLT5zcHJlYWQoKSwgdG8tPnNwcmVhZCgpLCBw
cm9ncmVzcyksCi0gICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLT5zdHlsZSgpLCB0by0+c3R5
bGUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVuZEZ1bmMoY2xpZW50LCBmcm9tLT5zdHlsZSgp
LCB0by0+c3R5bGUoKSwgcHJvZ3Jlc3MpLAogICAgICAgICBmcm9tLT5pc1dlYmtpdEJveFNoYWRv
dygpLAogICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29sb3IoKSwgcHJvZ3Jlc3Mp
KTsKIH0KIAotc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltYXRpb24sIGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9ucyYgZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVz
cykKIHsKLSAgICBpZiAoYW5pbWF0aW9uLT50cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2goKSkK
KyAgICBpZiAoY2xpZW50LT50cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2goKSkKICAgICAgICAg
cmV0dXJuIHRvLmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoZnJvbSwgcHJvZ3Jlc3MpOwotICAg
IHJldHVybiB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIHByb2dyZXNz
LCBpczxSZW5kZXJCb3g+KGFuaW1hdGlvbi0+cmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJC
b3g+KCphbmltYXRpb24tPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5zaXplKCkgOiBMYXlv
dXRTaXplKCkpOworICAgIHJldHVybiB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9u
KGZyb20sIHByb2dyZXNzLCBpczxSZW5kZXJCb3g+KGNsaWVudC0+cmVuZGVyZXIoKSkgPyBkb3du
Y2FzdDxSZW5kZXJCb3g+KCpjbGllbnQtPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5zaXpl
KCkgOiBMYXlvdXRTaXplKCkpOwogfQogCiBzdGF0aWMgUmVmUHRyPFNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50
LCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24q
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkBAIC0yODQsMTMgKzI4NCwxMyBAQCBzdGF0aWMgaW5saW5l
IFJlZlB0cjxTaGFwZVZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCosIFNoYQogICAgIHJldHVybiBTaGFwZVZhbHVlOjpjcmVhdGUodG9TaGFwZS5ibGVuZChm
cm9tU2hhcGUsIHByb2dyZXNzKSwgdG8tPmNzc0JveCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCosIEZpbHRlck9wZXJhdGlvbiogZnJvbU9wLCBGaWx0ZXJPcGVyYXRpb24qIHRvT3As
IGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkKK3N0YXRp
YyBpbmxpbmUgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqLCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIEZpbHRlck9wZXJhdGlv
biogdG8sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkK
IHsKLSAgICBBU1NFUlQodG9PcCk7Ci0gICAgcmV0dXJuIHRvT3AtPmJsZW5kKGZyb21PcCwgcHJv
Z3Jlc3MsIGJsZW5kVG9QYXNzdGhyb3VnaCk7CisgICAgQVNTRVJUKHRvKTsKKyAgICByZXR1cm4g
dG8tPmJsZW5kKGZyb20sIHByb2dyZXNzLCBibGVuZFRvUGFzc3Rocm91Z2gpOwogfQogCi1zdGF0
aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBm
cm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGlj
IGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBm
cm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dyZXNzKQogewogICAg
IEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0OwogICAgIHNpemVfdCBmcm9tU2l6ZSA9IGZyb20ub3Bl
cmF0aW9ucygpLnNpemUoKTsKQEAgLTI5OSw3ICsyOTksNyBAQCBzdGF0aWMgaW5saW5lIEZpbHRl
ck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgIFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJvbVNpemUpID8gZnJvbS5vcGVy
YXRpb25zKClbaV0uZ2V0KCkgOiAwOwogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiB0
b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsKLSAgICAg
ICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9wID0gdG9PcCA/IGJsZW5kRnVuYyhh
bmltLCBmcm9tT3AuZ2V0KCksIHRvT3AuZ2V0KCksIHByb2dyZXNzKSA6IChmcm9tT3AgPyBibGVu
ZEZ1bmMoYW5pbSwgMCwgZnJvbU9wLmdldCgpLCBwcm9ncmVzcywgdHJ1ZSkgOiAwKTsKKyAgICAg
ICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9wID0gdG9PcCA/IGJsZW5kRnVuYyhj
bGllbnQsIGZyb21PcC5nZXQoKSwgdG9PcC5nZXQoKSwgcHJvZ3Jlc3MpIDogKGZyb21PcCA/IGJs
ZW5kRnVuYyhjbGllbnQsIDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3MsIHRydWUpIDogMCk7CiAg
ICAgICAgIGlmIChibGVuZGVkT3ApCiAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFw
cGVuZChibGVuZGVkT3ApOwogICAgICAgICBlbHNlIHsKQEAgLTMxMyw3ICszMTMsNyBAQCBzdGF0
aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgRmlsdGVyT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0g
Q1NTUHJvcGVydHlGaWx0ZXIpCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9n
cmVzcywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlGaWx0ZXIpCiB7CiAg
ICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7CiAKQEAgLTMyMiwyMiArMzIyLDIyIEBAIHN0YXRp
YyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwKICAgICBib29sIGxpc3RzTWF0Y2ggPSBmYWxzZTsKICAgICBzd2l0
Y2ggKHByb3BlcnR5SUQpIHsKICAgICBjYXNlIENTU1Byb3BlcnR5RmlsdGVyOgotICAgICAgICBs
aXN0c01hdGNoID0gYW5pbS0+ZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7CisgICAgICAgIGxp
c3RzTWF0Y2ggPSBjbGllbnQtPmZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOwogICAgICAgICBi
cmVhazsKICNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCYWNrZHJvcEZpbHRlcjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0tPmJhY2tkcm9w
RmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7CisgICAgICAgIGxpc3RzTWF0Y2ggPSBjbGllbnQt
PmJhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7CiAgICAgICAgIGJyZWFrOwogI2Vu
ZGlmCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUFwcGxlQ29sb3JGaWx0ZXI6Ci0gICAgICAgIGxpc3Rz
TWF0Y2ggPSBhbmltLT5jb2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBs
aXN0c01hdGNoID0gY2xpZW50LT5jb2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOwogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAg
ICAgaWYgKGxpc3RzTWF0Y2gpCi0gICAgICAgIHJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9u
cyhhbmltLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAgICByZXN1bHQgPSBibGVuZEZpbHRl
ck9wZXJhdGlvbnMoY2xpZW50LCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwogICAgIGVsc2UgewogICAg
ICAgICAvLyBJZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIGxpc3RzIGRvbid0IG1hdGNoLCB3ZSBjb3Vs
ZCB0cnkgdG8gY3Jvc3MtZmFkZSwgYnV0IGRvbid0IHlldCBoYXZlIGEgd2F5IHRvIHJlcHJlc2Vu
dCB0aGF0IGluIENTUy4KICAgICAgICAgLy8gRm9yIG5vdyB3ZSdsbCBqdXN0IGZhaWwgdG8gYW5p
bWF0ZS4KQEAgLTM0NywyMCArMzQ3LDIwIEBAIHN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9u
cyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVu
ZEZpbHRlcihjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDYWNoZWRJbWFn
ZSogaW1hZ2UsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUlt
YWdlPiBibGVuZEZpbHRlcihjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQs
IENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsKICAgICBBU1NFUlQoaW1h
Z2UpOwotICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyUmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVy
YXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgRmlsdGVyT3BlcmF0aW9ucyBm
aWx0ZXJSZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoY2xpZW50LCBmcm9tLCB0bywgcHJv
Z3Jlc3MpOwogCiAgICAgYXV0byBpbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCpp
bWFnZSk7Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZh
bHVlRm9yRmlsdGVyKGFuaW0tPmN1cnJlbnRTdHlsZSgpLCBmaWx0ZXJSZXN1bHQsIERvTm90QWRq
dXN0UGl4ZWxWYWx1ZXMpOworICAgIGF1dG8gZmlsdGVyVmFsdWUgPSBDb21wdXRlZFN0eWxlRXh0
cmFjdG9yOjp2YWx1ZUZvckZpbHRlcihjbGllbnQtPmN1cnJlbnRTdHlsZSgpLCBmaWx0ZXJSZXN1
bHQsIERvTm90QWRqdXN0UGl4ZWxWYWx1ZXMpOwogCiAgICAgYXV0byByZXN1bHQgPSBDU1NGaWx0
ZXJJbWFnZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShpbWFnZVZhbHVlKSwgV1RGTW92ZShmaWx0ZXJW
YWx1ZSkpOwogICAgIHJlc3VsdC5nZXQoKS5zZXRGaWx0ZXJPcGVyYXRpb25zKGZpbHRlclJlc3Vs
dCk7CiAgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKHJlc3Vs
dCkpOwogfQogCi1zdGF0aWMgaW5saW5lIFZpc2liaWxpdHkgYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFZpc2liaWxpdHkgZnJvbSwgVmlzaWJpbGl0eSB0
bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBWaXNpYmlsaXR5IGJsZW5kRnVuYyhj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFZpc2liaWxpdHkgZnJvbSwg
VmlzaWJpbGl0eSB0bywgZG91YmxlIHByb2dyZXNzKQogewogICAgIC8vIEFueSBub24temVybyBy
ZXN1bHQgbWVhbnMgd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZSB2aXNpYmxlLiBPbmx5IGF0
IDAgZG8gd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZQogICAgIC8vIGludmlzaWJsZS4gVGhl
IGludmlzaWJsZSB2YWx1ZSB3ZSB1c2UgKFZpc2liaWxpdHk6OkhpZGRlbiB2cy4gVmlzaWJpbGl0
eTo6Q29sbGFwc2UpIGRlcGVuZHMgb24gdGhlIHNwZWNpZmllZCBmcm9tL3RvIHZhbHVlcy4KQEAg
LTM2OCwzMSArMzY4LDMwIEBAIHN0YXRpYyBpbmxpbmUgVmlzaWJpbGl0eSBibGVuZEZ1bmMoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgVmlzaWJpCiAgICAgZG91YmxlIHRv
VmFsID0gdG8gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47CiAgICAgaWYgKGZyb21W
YWwgPT0gdG9WYWwpCiAgICAgICAgIHJldHVybiB0bzsKLSAgICBkb3VibGUgcmVzdWx0ID0gYmxl
bmRGdW5jKGFuaW0sIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7CisgICAgZG91YmxlIHJlc3Vs
dCA9IGJsZW5kRnVuYyhjbGllbnQsIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7CiAgICAgcmV0
dXJuIHJlc3VsdCA+IDAuID8gVmlzaWJpbGl0eTo6VmlzaWJsZSA6ICh0byAhPSBWaXNpYmlsaXR5
OjpWaXNpYmxlID8gdG8gOiBmcm9tKTsKIH0KIAotc3RhdGljIGlubGluZSBUZXh0VW5kZXJsaW5l
T2Zmc2V0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBj
b25zdCBUZXh0VW5kZXJsaW5lT2Zmc2V0JiBmcm9tLCBjb25zdCBUZXh0VW5kZXJsaW5lT2Zmc2V0
JiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBUZXh0VW5kZXJsaW5lT2Zmc2V0
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGNvbnN0
IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCiB7CiAgICAgaWYgKGZyb20uaXNMZW5ndGgoKSAmJiB0by5pc0xl
bmd0aCgpKQotICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3JlYXRlV2l0aExl
bmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1ZSgp
LCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3JlYXRl
V2l0aExlbmd0aChibGVuZEZ1bmMoY2xpZW50LCBmcm9tLmxlbmd0aFZhbHVlKCksIHRvLmxlbmd0
aFZhbHVlKCksIHByb2dyZXNzKSk7CiAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNy
ZWF0ZVdpdGhBdXRvKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgVGV4dERlY29yYXRpb25UaGlja25l
c3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0
IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzJiBmcm9tLCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNr
bmVzcyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgVGV4dERlY29yYXRpb25U
aGlja25lc3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVu
dCwgY29uc3QgVGV4dERlY29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0IFRleHREZWNvcmF0
aW9uVGhpY2tuZXNzJiB0bywgZG91YmxlIHByb2dyZXNzKQogewogICAgIGlmIChmcm9tLmlzTGVu
Z3RoKCkgJiYgdG8uaXNMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhp
Y2tuZXNzOjpjcmVhdGVXaXRoTGVuZ3RoKGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlbmd0aFZhbHVl
KCksIHRvLmxlbmd0aFZhbHVlKCksIHByb2dyZXNzKSk7CisgICAgICAgIHJldHVybiBUZXh0RGVj
b3JhdGlvblRoaWNrbmVzczo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoY2xpZW50LCBmcm9t
Lmxlbmd0aFZhbHVlKCksIHRvLmxlbmd0aFZhbHVlKCksIHByb2dyZXNzKSk7CiAgICAgcmV0dXJu
IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpjcmVhdGVXaXRoQXV0bygpOwogfQogCi1zdGF0aWMg
aW5saW5lIExlbmd0aEJveCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogYW5pbSwgY29uc3QgTGVuZ3RoQm94JiBmcm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VOb25OZWdhdGl2
ZSkKK3N0YXRpYyBpbmxpbmUgTGVuZ3RoQm94IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBjbGllbnQsIGNvbnN0IExlbmd0aEJveCYgZnJvbSwgY29uc3QgTGVuZ3Ro
Qm94JiB0bywgZG91YmxlIHByb2dyZXNzLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJh
bmdlTm9uTmVnYXRpdmUpCiB7Ci0gICAgTGVuZ3RoQm94IHJlc3VsdChibGVuZEZ1bmMoYW5pbSwg
ZnJvbS50b3AoKSwgdG8udG9wKCksIHByb2dyZXNzLCB2YWx1ZVJhbmdlKSwKLSAgICAgICAgICAg
ICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLnJpZ2h0KCksIHRvLnJpZ2h0KCksIHByb2dy
ZXNzLCB2YWx1ZVJhbmdlKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBm
cm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgcHJvZ3Jlc3MsIHZhbHVlUmFuZ2UpLAotICAgICAg
ICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVmdCgpLCB0by5sZWZ0KCksIHBy
b2dyZXNzLCB2YWx1ZVJhbmdlKSk7Ci0KKyAgICBMZW5ndGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhj
bGllbnQsIGZyb20udG9wKCksIHRvLnRvcCgpLCBwcm9ncmVzcywgdmFsdWVSYW5nZSksCisgICAg
ICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoY2xpZW50LCBmcm9tLnJpZ2h0KCksIHRvLnJpZ2h0
KCksIHByb2dyZXNzLCB2YWx1ZVJhbmdlKSwKKyAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVu
YyhjbGllbnQsIGZyb20uYm90dG9tKCksIHRvLmJvdHRvbSgpLCBwcm9ncmVzcywgdmFsdWVSYW5n
ZSksCisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoY2xpZW50LCBmcm9tLmxlZnQoKSwg
dG8ubGVmdCgpLCBwcm9ncmVzcywgdmFsdWVSYW5nZSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTQ0MSw3ICs0NDAsNyBAQCBzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBj
cm9zc2ZhZGVCbGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KgogICAgIHJldHVy
biBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShjcm9zc2ZhZGVWYWx1ZSkpOwog
fQogCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgU3R5bGVJbWFnZSogZnJvbSwgU3R5bGVJbWFn
ZSogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFN0eWxl
SW1hZ2UqIGZyb20sIFN0eWxlSW1hZ2UqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7CiAgICAgaWYg
KCFmcm9tIHx8ICF0bykKICAgICAgICAgcmV0dXJuIHRvOwpAQCAtNDYzLDcgKzQ2Miw3IEBAIHN0
YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltCiAgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBm
cm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7
CiAgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRlciA9IGRvd25jYXN0PENT
U0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKICAgICAgICAgICAgIGlmIChmcm9tRmls
dGVyLmVxdWFsSW5wdXRJbWFnZXModG9GaWx0ZXIpICYmIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2Uo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgZnJvbUZpbHRlci5j
YWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmls
dGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5k
RmlsdGVyKGNsaWVudCwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRl
ck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0
ZWQpICYmIGlzPENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKQEAgLTQ4Miw3ICs0
ODEsNyBAQCBzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbQogICAgICAgICBpZiAoaXM8Q1NTRmlsdGVy
SW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCkpIHsKICAgICAgICAgICAgIENTU0ZpbHRlckltYWdl
VmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2Vu
ZXJhdGVkKTsKICAgICAgICAgICAgIGlmIChmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgZG93
bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oKnRvKS5jYWNoZWRJbWFnZSgpID09IGZyb21GaWx0ZXIu
Y2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwg
ZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwg
RmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJs
ZW5kRmlsdGVyKGNsaWVudCwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZp
bHRlck9wZXJhdGlvbnMoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CiAgICAgICAg
IH0KICAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9uIGJldHdlZW4gY3Jvc3MtZmFk
ZSBhbmQgaW1hZ2Ugc291cmNlLgogICAgIH0gZWxzZSBpZiAoaXM8U3R5bGVDYWNoZWRJbWFnZT4o
KmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0bykpIHsKQEAgLTQ5MCw3ICs0ODks
NyBAQCBzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbQogICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1h
Z2VWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7CiAgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVl
JiB0b0ZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsK
ICAgICAgICAgICAgIGlmICh0b0ZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxl
Q2FjaGVkSW1hZ2U+KCpmcm9tKS5jYWNoZWRJbWFnZSgpID09IHRvRmlsdGVyLmNhY2hlZEltYWdl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIHRvRmlsdGVyLmNh
Y2hlZEltYWdlKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9u
cygpLCBwcm9ncmVzcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGNsaWVu
dCwgdG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5m
aWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhN
RTogQWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNyb3NzLWZhZGUu
CiAgICAgfQpAQCAtNDk4LDEyICs0OTcsMTIgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJ
bWFnZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0KICAg
ICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgY3Jvc3MgZmFkZSBiZXR3ZWVuIGNhY2hlZCBhbmQgZ2Vu
ZXJhdGVkIGltYWdlcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzgyOTMKICAgICBpZiAoaXM8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0
eWxlQ2FjaGVkSW1hZ2U+KCp0bykpCi0gICAgICAgIHJldHVybiBjcm9zc2ZhZGVCbGVuZChhbmlt
LCBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPihmcm9tKSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJ
bWFnZT4odG8pLCBwcm9ncmVzcyk7CisgICAgICAgIHJldHVybiBjcm9zc2ZhZGVCbGVuZChjbGll
bnQsIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxTdHlsZUNhY2hl
ZEltYWdlPih0byksIHByb2dyZXNzKTsKIAogICAgIHJldHVybiB0bzsKIH0KIAotc3RhdGljIGlu
bGluZSBOaW5lUGllY2VJbWFnZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGZyb20sIGNvbnN0IE5pbmVQaWVjZUlt
YWdlJiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBOaW5lUGllY2VJbWFnZSBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBjb25zdCBO
aW5lUGllY2VJbWFnZSYgZnJvbSwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCiB7CiAgICAgaWYgKCFmcm9tLmhhc0ltYWdlKCkgfHwgIXRvLmhhc0ltYWdlKCkpCiAg
ICAgICAgIHJldHVybiB0bzsKQEAgLTUxMywxOCArNTEyLDE4IEBAIHN0YXRpYyBpbmxpbmUgTmlu
ZVBpZWNlSW1hZ2UgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIGNvCiAgICAgaWYgKGZyb20uaW1hZ2VTbGljZXMoKSAhPSB0by5pbWFnZVNsaWNlcygpIHx8
IGZyb20uYm9yZGVyU2xpY2VzKCkgIT0gdG8uYm9yZGVyU2xpY2VzKCkgfHwgZnJvbS5vdXRzZXQo
KSAhPSB0by5vdXRzZXQoKSB8fCBmcm9tLmZpbGwoKSAhPSB0by5maWxsKCkgfHwgZnJvbS5ob3Jp
em9udGFsUnVsZSgpICE9IHRvLmhvcml6b250YWxSdWxlKCkgfHwgZnJvbS52ZXJ0aWNhbFJ1bGUo
KSAhPSB0by52ZXJ0aWNhbFJ1bGUoKSkKICAgICAgICAgcmV0dXJuIHRvOwogCi0gICAgaWYgKGF1
dG8qIHJlbmRlcmVyID0gYW5pbS0+cmVuZGVyZXIoKSkgeworICAgIGlmIChhdXRvKiByZW5kZXJl
ciA9IGNsaWVudC0+cmVuZGVyZXIoKSkgewogICAgICAgICBpZiAoZnJvbS5pbWFnZSgpLT5pbWFn
ZVNpemUocmVuZGVyZXIsIDEuMCkgIT0gdG8uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyLCAx
LjApKQogICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgIH0KIAotICAgIHJldHVybiBOaW5lUGll
Y2VJbWFnZShibGVuZEZ1bmMoYW5pbSwgZnJvbS5pbWFnZSgpLCB0by5pbWFnZSgpLCBwcm9ncmVz
cyksCisgICAgcmV0dXJuIE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhjbGllbnQsIGZyb20uaW1h
Z2UoKSwgdG8uaW1hZ2UoKSwgcHJvZ3Jlc3MpLAogICAgICAgICBmcm9tLmltYWdlU2xpY2VzKCks
IGZyb20uZmlsbCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9tLm91dHNldCgpLCBmcm9tLmhv
cml6b250YWxSdWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOwogfQogCiAjaWYgRU5BQkxFKFZB
UklBVElPTl9GT05UUykKIAotc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IEZvbnRW
YXJpYXRpb25TZXR0aW5ncyYgZnJvbSwgY29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB0bywg
ZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgRm9u
dFZhcmlhdGlvblNldHRpbmdzJiBmcm9tLCBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCiB7CiAgICAgaWYgKCFwcm9ncmVzcykKICAgICAgICAgcmV0dXJu
IGZyb207CkBAIC01MzksNyArNTM4LDcgQEAgc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9uU2V0
dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGEKICAgICAg
ICAgYXV0byYgZnJvbUl0ZW0gPSBmcm9tLmF0KGkpOwogICAgICAgICBhdXRvJiB0b0l0ZW0gPSB0
by5hdChpKTsKICAgICAgICAgQVNTRVJUKGZyb21JdGVtLnRhZygpID09IHRvSXRlbS50YWcoKSk7
Ci0gICAgICAgIGZsb2F0IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tSXRlbS52
YWx1ZSgpLCB0b0l0ZW0udmFsdWUoKSwgcHJvZ3Jlc3MpOworICAgICAgICBmbG9hdCBpbnRlcnBv
bGF0ZWQgPSBibGVuZEZ1bmMoY2xpZW50LCBmcm9tSXRlbS52YWx1ZSgpLCB0b0l0ZW0udmFsdWUo
KSwgcHJvZ3Jlc3MpOwogICAgICAgICByZXN1bHQuaW5zZXJ0KHsgZnJvbUl0ZW0udGFnKCksIGlu
dGVycG9sYXRlZCB9KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTU0Nyw3NSArNTQ2
LDc1IEBAIHN0YXRpYyBpbmxpbmUgRm9udFZhcmlhdGlvblNldHRpbmdzIGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhCiAKICNlbmRpZgogCi1zdGF0aWMgaW5saW5l
IEZvbnRTZWxlY3Rpb25WYWx1ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgRm9udFNlbGVjdGlvblZhbHVlIGZyb20sIEZvbnRTZWxlY3Rpb25WYWx1ZSB0
bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBGb250U2VsZWN0aW9uVmFsdWUgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgRm9udFNlbGVj
dGlvblZhbHVlIGZyb20sIEZvbnRTZWxlY3Rpb25WYWx1ZSB0bywgZG91YmxlIHByb2dyZXNzKQog
ewotICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19j
YXN0PGZsb2F0Pihmcm9tKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvKSwgcHJvZ3Jlc3MpKTsKKyAg
ICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKGJsZW5kRnVuYyhjbGllbnQsIHN0YXRpY19jYXN0
PGZsb2F0Pihmcm9tKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvKSwgcHJvZ3Jlc3MpKTsKIH0KIAot
c3RhdGljIGlubGluZSBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBPcHRpb25hbDxGb250U2VsZWN0aW9u
VmFsdWU+IGZyb20sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3N0YXRpYyBpbmxpbmUgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBPcHRpb25hbDxGb250
U2VsZWN0aW9uVmFsdWU+IGZyb20sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gdG8sIGRv
dWJsZSBwcm9ncmVzcykKIHsKLSAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKGJsZW5kRnVu
YyhhbmltLCBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbS52YWx1ZSgpKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHRvLnZhbHVlKCkpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFs
dWUoYmxlbmRGdW5jKGNsaWVudCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20udmFsdWUoKSksIHN0
YXRpY19jYXN0PGZsb2F0Pih0by52YWx1ZSgpKSwgcHJvZ3Jlc3MpKTsKIH0KIAogY2xhc3MgQW5p
bWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQW5p
bWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShDU1NQ
cm9wZXJ0eUlEIHByb3ApCi0gICAgICAgIDogbV9wcm9wKHByb3ApCisgICAgZXhwbGljaXQgQW5p
bWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQorICAgICAg
ICA6IG1fcHJvcGVydHkocHJvcGVydHkpCiAgICAgewogICAgIH0KICAgICB2aXJ0dWFsIH5Bbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCBib29s
IGlzU2hvcnRoYW5kV3JhcHBlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiwg
Y29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhbkludGVy
cG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVu
ZGVyU3R5bGUqLCBkb3VibGUpIGNvbnN0ID0gMDsKICAgICAKICNpZiAhTE9HX0RJU0FCTEVECi0g
ICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVu
ZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSkgY29uc3QgPSAwOwogI2VuZGlm
CiAKLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wOyB9
CisgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHk7
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBhbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KIAogcHJpdmF0ZToKLSAgICBDU1NQcm9wZXJ0eUlEIG1fcHJvcDsKKyAg
ICBDU1NQcm9wZXJ0eUlEIG1fcHJvcGVydHk7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
IGNsYXNzIFByb3BlcnR5V3JhcHBlckdldHRlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6
KmdldHRlcikoKSBjb25zdCkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KHByb3ApCisgICAgUHJvcGVydHlXcmFwcGVyR2V0dGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0KQorICAgICAgICA6IEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCiAgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQog
ICAgIHsKICAgICB9CiAKKyAgICBUIHZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAoc3R5bGUtPiptX2dldHRlcikoKTsKKyAgICB9CisK
K3ByaXZhdGU6CiAgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKGEgPT0gYikK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoIWEgfHwgIWIpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0aGlzLT52YWx1ZShhKSA9PSB0aGlz
LT52YWx1ZShiKTsKLSAgICB9Ci0KLSAgICBUIHZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBhKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIHJl
dHVybiB2YWx1ZShhKSA9PSB2YWx1ZShiKTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0g
ICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSogdG8sIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBz
dHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwg
IiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBU
ZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIg
LT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlv
bnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgp
KSA8PCAiIGZyb20gIiA8PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIg
YXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jl
c3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKICAgICB9CiAjZW5kaWYKIAotcHJvdGVj
dGVkOgogICAgIFQgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7CiB9OwogCkBAIC02
MjMsMTUgKzYyMiwxNSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNsYXNzIFByb3BlcnR5V3Jh
cHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4gewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlE
IHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnNldHRlcikoVCkpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+KHByb3As
IGdldHRlcikKKyAgICBQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVCAo
UmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVy
KShUKSkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4ocHJvcGVydHksIGdldHRl
cikKICAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCiAgICAgewogICAgIH0KIAotICAgIHZvaWQg
YmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUq
IGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNz
KSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1
bmMoYW5pbSwgdGhpcy0+dmFsdWUoYSksIHRoaXMtPnZhbHVlKGIpLCBwcm9ncmVzcykpOworICAg
ICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdGhpcy0+dmFs
dWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3MpKTsKICAgICB9CiAKIHByb3RlY3Rl
ZDoKQEAgLTY0OCw3ICs2NDcsNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotCiAgICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRl
clN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAg
YXV0byBibGVuZGVkVmFsdWUgPSBibGVuZEZ1bmMoY2xpZW50LCB0aGlzLT52YWx1ZShmcm9tKSwg
dGhpcy0+dmFsdWUodG8pLCBwcm9ncmVzcyk7CkBAIC02NTcsMjQgKzY1NSwyNCBAQCBwcml2YXRl
OgogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBEaXNjcmV0ZVByb3BlcnR5V3Jh
cHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4geworY2xhc3MgRGlzY3JldGVQ
cm9wZXJ0eVdyYXBwZXIgZmluYWwgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBEaXNjcmV0ZVByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgp
IGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCi0gICAgICAgIDogUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICBEaXNjcmV0ZVByb3BlcnR5V3Jh
cHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBj
b25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFQpKQorICAgICAgICA6IFByb3BlcnR5
V3JhcHBlckdldHRlcjxUPihwcm9wZXJ0eSwgZ2V0dGVyKQogICAgICAgICAsIG1fc2V0dGVyKHNl
dHRlcikKICAgICB7CiAgICAgfQogCitwcml2YXRlOgogICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUo
Y29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB2b2lkIGJs
ZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBSZW5kZXJTdHlsZSogZGVzdGlu
YXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGRv
dWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIEFTU0VSVCghcHJvZ3Jl
c3MgfHwgcHJvZ3Jlc3MgPT0gMS4wKTsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKSh0aGlzLT52
YWx1ZShwcm9ncmVzcyA/IGIgOiBhKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi0+KnRoaXMtPm1f
c2V0dGVyKSh0aGlzLT52YWx1ZShwcm9ncmVzcyA/IHRvIDogZnJvbSkpOwogICAgIH0KIAotcHJv
dGVjdGVkOgogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQpOwogfTsKIApAQCAt
NjgyLDI0ICs2ODAsMjQgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjbGFzcyBSZWZDb3VudGVk
UHJvcGVydHlXcmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4gewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFJlZkNvdW50ZWRQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBUKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8VD4mJikpCi0gICAgICAg
IDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPihwcm9wLCBnZXR0ZXIpCisgICAgUmVmQ291bnRl
ZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBUKiAoUmVuZGVyU3R5bGU6
OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8VD4m
JikpCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPihwcm9wZXJ0eSwgZ2V0dGVy
KQogICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBi
bGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSog
ZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKK3ByaXZhdGU6CisgICAgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlv
biwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91Ymxl
IHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShi
bGVuZEZ1bmMoYW5pbSwgdGhpcy0+dmFsdWUoYSksIHRoaXMtPnZhbHVlKGIpLCBwcm9ncmVzcykp
OworICAgICAgICAoZGVzdGluYXRpb24tPip0aGlzLT5tX3NldHRlcikoYmxlbmRGdW5jKGNsaWVu
dCwgdGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3MpKTsKICAgICB9
CiAKLXByb3RlY3RlZDoKICAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShSZWZQdHI8
VD4mJik7CiB9OwogCi1zdGF0aWMgYm9vbCBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoY29uc3QgTGVu
Z3RoJiBhLCBjb25zdCBMZW5ndGgmIGIsIGJvb2wgaXNMZW5ndGhQZXJjZW50YWdlKQorc3RhdGlj
IGJvb2wgY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVu
Z3RoJiB0bywgYm9vbCBpc0xlbmd0aFBlcmNlbnRhZ2UpCiB7Ci0gICAgaWYgKGEudHlwZSgpID09
IGIudHlwZSgpKQorICAgIGlmIChmcm9tLnR5cGUoKSA9PSB0by50eXBlKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgLy8gU29tZSBwcm9wZXJ0aWVzIGFsbG93IGZvciA8bGVuZ3RoLXBl
cmNlbnRhZ2U+IGFuZCA8bnVtYmVyPiB2YWx1ZXMuIFdlIG11c3QgYWxsb3cgYW5pbWF0aW5nCkBA
IC03MDcsODYgKzcwNSw4NCBAQCBzdGF0aWMgYm9vbCBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoY29u
c3QgTGVuZ3RoJiBhLCBjb25zdCBMZW5ndGgmIGIsIGJvb2wgaXNMZW5ndAogICAgIC8vIGEgPGxl
bmd0aD4gb3IgPHBlcmNlbnRhZ2U+LiBXZSBjYW4gdXNlIExlbmd0aDo6aXNSZWxhdGl2ZSgpIHRv
IGRldGVybWluZSB3aGV0aGVyIHdlIGFyZQogICAgIC8vIGRlYWxpbmcgd2l0aCBhIDxudW1iZXI+
IGFzIG9wcG9zZWQgdG8gYSA8bGVuZ3RoPiBvciA8cGVyY2VudGFnZT4uCiAgICAgaWYgKGlzTGVu
Z3RoUGVyY2VudGFnZSkgewotICAgICAgICByZXR1cm4gKGEuaXNGaXhlZCgpIHx8IGEuaXNQZXJj
ZW50T3JDYWxjdWxhdGVkKCkgfHwgYS5pc1JlbGF0aXZlKCkpCi0gICAgICAgICAgICAmJiAoYi5p
c0ZpeGVkKCkgfHwgYi5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKSB8fCBiLmlzUmVsYXRpdmUoKSkK
LSAgICAgICAgICAgICYmIGEuaXNSZWxhdGl2ZSgpID09IGIuaXNSZWxhdGl2ZSgpOworICAgICAg
ICByZXR1cm4gKGZyb20uaXNGaXhlZCgpIHx8IGZyb20uaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkg
fHwgZnJvbS5pc1JlbGF0aXZlKCkpCisgICAgICAgICAgICAmJiAodG8uaXNGaXhlZCgpIHx8IHRv
LmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpIHx8IHRvLmlzUmVsYXRpdmUoKSkKKyAgICAgICAgICAg
ICYmIGZyb20uaXNSZWxhdGl2ZSgpID09IHRvLmlzUmVsYXRpdmUoKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWNsYXNzIExlbmd0aFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4geworY2xhc3MgTGVuZ3RoUHJvcGVy
dHlXcmFwcGVyIGZpbmFsIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5n
dGgmPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZW51bSBj
bGFzcyBGbGFncyB7CiAgICAgICAgIElzTGVuZ3RoUGVyY2VudGFnZSAgICAgICAgICA9IDEgPDwg
MCwKICAgICAgICAgTmVnYXRpdmVMZW5ndGhzQXJlSW52YWxpZCAgID0gMSA8PCAxLAogICAgIH07
Ci0gICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgTGVu
Z3RoJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoq
c2V0dGVyKShMZW5ndGgmJiksIE9wdGlvblNldDxGbGFncz4gZmxhZ3MgPSB7IH0pCi0gICAgICAg
IDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3AsIGdldHRlcikKKyAg
ICBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgTGVu
Z3RoJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoq
c2V0dGVyKShMZW5ndGgmJiksIE9wdGlvblNldDxGbGFncz4gZmxhZ3MgPSB7IH0pCisgICAgICAg
IDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3BlcnR5LCBnZXR0ZXIp
CiAgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQogICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCiAg
ICAgewogICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorcHJpdmF0ZToKKyAgICBi
b29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJT
dHlsZSogdG8pIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICByZXR1cm4gY2FuSW50ZXJwb2xh
dGVMZW5ndGhzKHRoaXMtPnZhbHVlKGEpLCB0aGlzLT52YWx1ZShiKSwgbV9mbGFncy5jb250YWlu
cyhGbGFnczo6SXNMZW5ndGhQZXJjZW50YWdlKSk7CisgICAgICAgIHJldHVybiBjYW5JbnRlcnBv
bGF0ZUxlbmd0aHModmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgbV9mbGFncy5jb250YWlucyhGbGFn
czo6SXNMZW5ndGhQZXJjZW50YWdlKSk7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3Qgb3ZlcnJpZGUKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFs
CiAgICAgewogICAgICAgICBhdXRvIHZhbHVlUmFuZ2UgPSBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdz
OjpOZWdhdGl2ZUxlbmd0aHNBcmVJbnZhbGlkKSA/IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSA6IFZh
bHVlUmFuZ2VBbGw7Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIHRo
aXMtPnZhbHVlKGEpLCB0aGlzLT52YWx1ZShiKSwgcHJvZ3Jlc3MsIHZhbHVlUmFuZ2UpKTsKKyAg
ICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhjbGllbnQsIHZhbHVlKGZy
b20pLCB2YWx1ZSh0byksIHByb2dyZXNzLCB2YWx1ZVJhbmdlKSk7CiAgICAgfQogCi1wcm90ZWN0
ZWQ6CiAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoTGVuZ3RoJiYpOwotCi1wcml2
YXRlOgogICAgIE9wdGlvblNldDxGbGFncz4gbV9mbGFnczsKIH07CiAKLXN0YXRpYyBib29sIGNh
bkludGVycG9sYXRlTGVuZ3RoVmFyaWFudHMoY29uc3QgTGVuZ3RoU2l6ZSYgYSwgY29uc3QgTGVu
Z3RoU2l6ZSYgYikKK3N0YXRpYyBib29sIGNhbkludGVycG9sYXRlTGVuZ3RoVmFyaWFudHMoY29u
c3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29uc3QgTGVuZ3RoU2l6ZSYgdG8pCiB7CiAgICAgYm9vbCBp
c0xlbmd0aFBlcmNlbnRhZ2UgPSB0cnVlOwotICAgIHJldHVybiBjYW5JbnRlcnBvbGF0ZUxlbmd0
aHMoYS53aWR0aCwgYi53aWR0aCwgaXNMZW5ndGhQZXJjZW50YWdlKQotICAgICAgICAmJiBjYW5J
bnRlcnBvbGF0ZUxlbmd0aHMoYS5oZWlnaHQsIGIuaGVpZ2h0LCBpc0xlbmd0aFBlcmNlbnRhZ2Up
OworICAgIHJldHVybiBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoZnJvbS53aWR0aCwgdG8ud2lkdGgs
IGlzTGVuZ3RoUGVyY2VudGFnZSkKKyAgICAgICAgJiYgY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGZy
b20uaGVpZ2h0LCB0by5oZWlnaHQsIGlzTGVuZ3RoUGVyY2VudGFnZSk7CiB9CiAKLXN0YXRpYyBi
b29sIGNhbkludGVycG9sYXRlTGVuZ3RoVmFyaWFudHMoY29uc3QgR2FwTGVuZ3RoJiBhLCBjb25z
dCBHYXBMZW5ndGgmIGIpCitzdGF0aWMgYm9vbCBjYW5JbnRlcnBvbGF0ZUxlbmd0aFZhcmlhbnRz
KGNvbnN0IEdhcExlbmd0aCYgZnJvbSwgY29uc3QgR2FwTGVuZ3RoJiB0bykKIHsKLSAgICBpZiAo
YS5pc05vcm1hbCgpIHx8IGIuaXNOb3JtYWwoKSkKKyAgICBpZiAoZnJvbS5pc05vcm1hbCgpIHx8
IHRvLmlzTm9ybWFsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBib29sIGlzTGVuZ3Ro
UGVyY2VudGFnZSA9IHRydWU7Ci0gICAgcmV0dXJuIGNhbkludGVycG9sYXRlTGVuZ3RocyhhLmxl
bmd0aCgpLCBiLmxlbmd0aCgpLCBpc0xlbmd0aFBlcmNlbnRhZ2UpOworICAgIHJldHVybiBjYW5J
bnRlcnBvbGF0ZUxlbmd0aHMoZnJvbS5sZW5ndGgoKSwgdG8ubGVuZ3RoKCksIGlzTGVuZ3RoUGVy
Y2VudGFnZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgTGVuZ3RoVmFyaWFu
dFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+
IHsKK2NsYXNzIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXIgZmluYWwgOiBwdWJsaWMgUHJv
cGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUlEIHByb3AsIGNvbnN0IFQmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6OipzZXR0ZXIpKFQmJikpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IFQmPihwcm9wLCBnZXR0ZXIpCisgICAgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3Jh
cHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBUJiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUJiYpKQorICAgICAgICA6
IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcGVydHksIGdldHRlcikKICAgICAg
ICAgLCBtX3NldHRlcihzZXR0ZXIpCiAgICAgewogICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJw
b2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBv
dmVycmlkZQorcHJpdmF0ZToKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0
eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCiAgICAgewotICAg
ICAgICByZXR1cm4gY2FuSW50ZXJwb2xhdGVMZW5ndGhWYXJpYW50cyh0aGlzLT52YWx1ZShhKSwg
dGhpcy0+dmFsdWUoYikpOworICAgICAgICByZXR1cm4gY2FuSW50ZXJwb2xhdGVMZW5ndGhWYXJp
YW50cyh0aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+dmFsdWUodG8pKTsKICAgICB9CiAKLSAgICB2
b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0
eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9n
cmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRG
dW5jKGFuaW0sIHRoaXMtPnZhbHVlKGEpLCB0aGlzLT52YWx1ZShiKSwgcHJvZ3Jlc3MpKTsKKyAg
ICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhjbGllbnQsIHRoaXMtPnZh
bHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byksIHByb2dyZXNzKSk7CiAgICAgfQogCi1wcm90ZWN0
ZWQ6CiAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCYmKTsKIH07CiAKLWNsYXNz
IExlbmd0aEJveFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgTGVuZ3RoQm94Jj4geworY2xhc3MgTGVuZ3RoQm94UHJvcGVydHlXcmFwcGVyIGZpbmFs
IDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGhCb3gmPiB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBGbGFncyB7
CkBAIC03OTQsNTEgKzc5MCw1MCBAQCBwdWJsaWM6CiAgICAgICAgIFVzZXNGaWxsS2V5d29yZCAg
ICAgICAgID0gMSA8PCAxLAogICAgICAgICBBbGxvd3NOZWdhdGl2ZVZhbHVlcyAgICA9IDEgPDwg
MiwKICAgICB9OwotICAgIExlbmd0aEJveFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHBy
b3AsIGNvbnN0IExlbmd0aEJveCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChSZW5kZXJTdHlsZTo6KnNldHRlcikoTGVuZ3RoQm94JiYpLCBPcHRpb25TZXQ8RmxhZ3M+IGZs
YWdzID0geyB9KQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGhC
b3gmPihwcm9wLCBnZXR0ZXIpCisgICAgTGVuZ3RoQm94UHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IExlbmd0aEJveCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgp
IGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoTGVuZ3RoQm94JiYpLCBPcHRpb25T
ZXQ8RmxhZ3M+IGZsYWdzID0geyB9KQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBMZW5ndGhCb3gmPihwcm9wZXJ0eSwgZ2V0dGVyKQogICAgICAgICAsIG1fc2V0dGVyKHNl
dHRlcikKICAgICAgICAgLCBtX2ZsYWdzKGZsYWdzKQogICAgIHsKICAgICB9CiAKLSAgICBib29s
IGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YikgY29uc3Qgb3ZlcnJpZGUKK3ByaXZhdGU6CisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25z
dCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAog
ICAgIHsKLSAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6OlVzZXNGaWxsS2V5d29y
ZCkgJiYgYS0+Ym9yZGVySW1hZ2UoKS5maWxsKCkgIT0gYi0+Ym9yZGVySW1hZ2UoKS5maWxsKCkp
CisgICAgICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpVc2VzRmlsbEtleXdvcmQpICYm
IGZyb20tPmJvcmRlckltYWdlKCkuZmlsbCgpICE9IHRvLT5ib3JkZXJJbWFnZSgpLmZpbGwoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBhdXRvJiBhTGVuZ3RoQm94ID0g
dGhpcy0+dmFsdWUoYSk7Ci0gICAgICAgIGF1dG8mIGJMZW5ndGhCb3ggPSB0aGlzLT52YWx1ZShi
KTsKKyAgICAgICAgYXV0byYgZnJvbUxlbmd0aEJveCA9IHZhbHVlKGZyb20pOworICAgICAgICBh
dXRvJiB0b0xlbmd0aEJveCA9IHZhbHVlKHRvKTsKICAgICAgICAgYm9vbCBpc0xlbmd0aFBlcmNl
bnRhZ2UgPSBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpJc0xlbmd0aFBlcmNlbnRhZ2UpOwotICAg
ICAgICByZXR1cm4gY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGFMZW5ndGhCb3gudG9wKCksIGJMZW5n
dGhCb3gudG9wKCksIGlzTGVuZ3RoUGVyY2VudGFnZSkKLSAgICAgICAgICAgICYmIGNhbkludGVy
cG9sYXRlTGVuZ3RocyhhTGVuZ3RoQm94LnJpZ2h0KCksIGJMZW5ndGhCb3gucmlnaHQoKSwgaXNM
ZW5ndGhQZXJjZW50YWdlKQotICAgICAgICAgICAgJiYgY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGFM
ZW5ndGhCb3guYm90dG9tKCksIGJMZW5ndGhCb3guYm90dG9tKCksIGlzTGVuZ3RoUGVyY2VudGFn
ZSkKLSAgICAgICAgICAgICYmIGNhbkludGVycG9sYXRlTGVuZ3RocyhhTGVuZ3RoQm94LmxlZnQo
KSwgYkxlbmd0aEJveC5sZWZ0KCksIGlzTGVuZ3RoUGVyY2VudGFnZSk7CisgICAgICAgIHJldHVy
biBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoZnJvbUxlbmd0aEJveC50b3AoKSwgdG9MZW5ndGhCb3gu
dG9wKCksIGlzTGVuZ3RoUGVyY2VudGFnZSkKKyAgICAgICAgICAgICYmIGNhbkludGVycG9sYXRl
TGVuZ3Rocyhmcm9tTGVuZ3RoQm94LnJpZ2h0KCksIHRvTGVuZ3RoQm94LnJpZ2h0KCksIGlzTGVu
Z3RoUGVyY2VudGFnZSkKKyAgICAgICAgICAgICYmIGNhbkludGVycG9sYXRlTGVuZ3Rocyhmcm9t
TGVuZ3RoQm94LmJvdHRvbSgpLCB0b0xlbmd0aEJveC5ib3R0b20oKSwgaXNMZW5ndGhQZXJjZW50
YWdlKQorICAgICAgICAgICAgJiYgY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGZyb21MZW5ndGhCb3gu
bGVmdCgpLCB0b0xlbmd0aEJveC5sZWZ0KCksIGlzTGVuZ3RoUGVyY2VudGFnZSk7CiAgICAgfQog
Ci0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBS
ZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBpZiAobV9mbGFncy5jb250
YWlucyhGbGFnczo6VXNlc0ZpbGxLZXl3b3JkKSkKLSAgICAgICAgICAgIGRzdC0+c2V0Qm9yZGVy
SW1hZ2VTbGljZUZpbGwoKCFwcm9ncmVzcyB8fCBjYW5JbnRlcnBvbGF0ZShhLCBiKSA/IGEgOiBi
KS0+Ym9yZGVySW1hZ2UoKS5maWxsKCkpOworICAgICAgICAgICAgZGVzdGluYXRpb24tPnNldEJv
cmRlckltYWdlU2xpY2VGaWxsKCghcHJvZ3Jlc3MgfHwgY2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8p
ID8gZnJvbSA6IHRvKS0+Ym9yZGVySW1hZ2UoKS5maWxsKCkpOwogICAgICAgICBhdXRvIHZhbHVl
UmFuZ2UgPSBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpBbGxvd3NOZWdhdGl2ZVZhbHVlcykgPyBW
YWx1ZVJhbmdlQWxsIDogVmFsdWVSYW5nZU5vbk5lZ2F0aXZlOwotICAgICAgICAoZHN0LT4qbV9z
ZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCB0aGlzLT52YWx1ZShhKSwgdGhpcy0+dmFsdWUoYiksIHBy
b2dyZXNzLCB2YWx1ZVJhbmdlKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShi
bGVuZEZ1bmMoY2xpZW50LCB2YWx1ZShmcm9tKSwgdmFsdWUodG8pLCBwcm9ncmVzcywgdmFsdWVS
YW5nZSkpOwogICAgIH0KIAotcHJvdGVjdGVkOgogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9z
ZXR0ZXIpKExlbmd0aEJveCYmKTsKLQotcHJpdmF0ZToKICAgICBPcHRpb25TZXQ8RmxhZ3M+IG1f
ZmxhZ3M7CiB9OwogCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aCA6IHB1YmxpYyBSZWZD
b3VudGVkUHJvcGVydHlXcmFwcGVyPENsaXBQYXRoT3BlcmF0aW9uPiB7CitjbGFzcyBQcm9wZXJ0
eVdyYXBwZXJDbGlwUGF0aCBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVy
PENsaXBQYXRoT3BlcmF0aW9uPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NTUHJvcGVydHlJRCBwcm9wLCBDbGlw
UGF0aE9wZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiYmKSkKLSAgICAgICAg
OiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPENsaXBQYXRoT3BlcmF0aW9uPihwcm9wLCBnZXR0
ZXIsIHNldHRlcikKKyAgICBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBDbGlwUGF0aE9wZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiYm
KSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPENsaXBQYXRoT3BlcmF0aW9u
Pihwcm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIpCiAgICAgewogICAgIH0KIAotICAgIGJvb2wgZXF1
YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3Zl
cnJpZGUKK3ByaXZhdGU6CisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgLy8gSWYgdGhl
IHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0
LgogICAgICAgICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFy
ZSBudWxsLCByZXR1cm4gdHJ1ZS4KQEAgLTg0Nyw4ICs4NDIsOCBAQCBwdWJsaWM6CiAgICAgICAg
IGlmICghYSB8fCAhYikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBhdXRv
KiBjbGlwUGF0aEEgPSB0aGlzLT52YWx1ZShhKTsKLSAgICAgICAgYXV0byogY2xpcFBhdGhCID0g
dGhpcy0+dmFsdWUoYik7CisgICAgICAgIGF1dG8qIGNsaXBQYXRoQSA9IHZhbHVlKGEpOworICAg
ICAgICBhdXRvKiBjbGlwUGF0aEIgPSB2YWx1ZShiKTsKICAgICAgICAgaWYgKGNsaXBQYXRoQSA9
PSBjbGlwUGF0aEIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKCFjbGlw
UGF0aEEgfHwgIWNsaXBQYXRoQikKQEAgLTg1OCwxNSArODUzLDE2IEBAIHB1YmxpYzoKIH07CiAK
ICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRm9udFZh
cmlhdGlvblNldHRpbmdzIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0
dGluZ3M+IHsKK2NsYXNzIFByb3BlcnR5V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyBmaW5h
bCA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Rm9udFZhcmlhdGlvblNldHRpbmdzPiB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyRm9u
dFZhcmlhdGlvblNldHRpbmdzKENTU1Byb3BlcnR5SUQgcHJvcCwgRm9udFZhcmlhdGlvblNldHRp
bmdzIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXIpKEZvbnRWYXJpYXRpb25TZXR0aW5ncykpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVy
PEZvbnRWYXJpYXRpb25TZXR0aW5ncz4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgUHJvcGVy
dHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdzKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEZv
bnRWYXJpYXRpb25TZXR0aW5ncyAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqc2V0dGVyKShGb250VmFyaWF0aW9uU2V0dGluZ3MpKQorICAgICAgICA6
IFByb3BlcnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+KHByb3BlcnR5LCBnZXR0ZXIs
IHNldHRlcikKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorcHJpdmF0ZToKKyAg
ICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
IGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJl
IHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCiAgICAgICAgIC8vIElmIGVp
dGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVl
LgpAQCAtODc0LDIwICs4NzAsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIGlmICghYSB8fCAhYikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuIHRoaXMtPnZhbHVlKGEpID09IHRoaXMtPnZhbHVlKGIpOworICAgICAgICByZXR1
cm4gdmFsdWUoYSkgPT0gdmFsdWUoYik7CiAgICAgfQogCi0gICAgYm9vbCBjYW5JbnRlcnBvbGF0
ZShjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJy
aWRlCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgYXV0byBhVmFy
aWF0aW9uU2V0dGluZ3MgPSB2YWx1ZShhKTsKLSAgICAgICAgYXV0byBiVmFyaWF0aW9uU2V0dGlu
Z3MgPSB2YWx1ZShiKTsKKyAgICAgICAgYXV0byBmcm9tVmFyaWF0aW9uU2V0dGluZ3MgPSB2YWx1
ZShmcm9tKTsKKyAgICAgICAgYXV0byB0b1ZhcmlhdGlvblNldHRpbmdzID0gdmFsdWUodG8pOwog
Ci0gICAgICAgIGlmIChhVmFyaWF0aW9uU2V0dGluZ3Muc2l6ZSgpICE9IGJWYXJpYXRpb25TZXR0
aW5ncy5zaXplKCkpCisgICAgICAgIGlmIChmcm9tVmFyaWF0aW9uU2V0dGluZ3Muc2l6ZSgpICE9
IHRvVmFyaWF0aW9uU2V0dGluZ3Muc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIGF1dG8gc2l6ZSA9IGFWYXJpYXRpb25TZXR0aW5ncy5zaXplKCk7CisgICAgICAg
IGF1dG8gc2l6ZSA9IGZyb21WYXJpYXRpb25TZXR0aW5ncy5zaXplKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChhVmFyaWF0
aW9uU2V0dGluZ3MuYXQoaSkudGFnKCkgIT0gYlZhcmlhdGlvblNldHRpbmdzLmF0KGkpLnRhZygp
KQorICAgICAgICAgICAgaWYgKGZyb21WYXJpYXRpb25TZXR0aW5ncy5hdChpKS50YWcoKSAhPSB0
b1ZhcmlhdGlvblNldHRpbmdzLmF0KGkpLnRhZygpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogCkBAIC04OTYsMTUgKzg5MiwxNiBAQCBwdWJsaWM6CiB9OwogI2Vu
ZGlmCiAKLWNsYXNzIFByb3BlcnR5V3JhcHBlclNoYXBlIDogcHVibGljIFJlZkNvdW50ZWRQcm9w
ZXJ0eVdyYXBwZXI8U2hhcGVWYWx1ZT4geworY2xhc3MgUHJvcGVydHlXcmFwcGVyU2hhcGUgZmlu
YWwgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTaGFwZVZhbHVlPiB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyU2hh
cGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBTaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8U2hhcGVWYWx1ZT4m
JikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTaGFwZVZhbHVlPihwcm9w
LCBnZXR0ZXIsIHNldHRlcikKKyAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBTaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8U2hhcGVWYWx1ZT4mJikpCisgICAgICAg
IDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTaGFwZVZhbHVlPihwcm9wZXJ0eSwgZ2V0dGVy
LCBzZXR0ZXIpCiAgICAgewogICAgIH0KIAotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKK3ByaXZhdGU6Cisg
ICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFy
ZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgogICAgICAgICAvLyBJZiBl
aXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1
ZS4KQEAgLTkxMyw4ICs5MTAsOCBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghYSB8fCAhYikKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBhdXRvKiBzaGFwZUEgPSB0aGlzLT52
YWx1ZShhKTsKLSAgICAgICAgYXV0byogc2hhcGVCID0gdGhpcy0+dmFsdWUoYik7CisgICAgICAg
IGF1dG8qIHNoYXBlQSA9IHZhbHVlKGEpOworICAgICAgICBhdXRvKiBzaGFwZUIgPSB2YWx1ZShi
KTsKICAgICAgICAgaWYgKHNoYXBlQSA9PSBzaGFwZUIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgaWYgKCFzaGFwZUEgfHwgIXNoYXBlQikKQEAgLTkyMyw0NiArOTIwLDQ3IEBA
IHB1YmxpYzoKICAgICB9CiB9OwogCi1jbGFzcyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyIDog
cHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4geworY2xhc3MgU3R5
bGVJbWFnZVByb3BlcnR5V3JhcHBlciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlX
cmFwcGVyPFN0eWxlSW1hZ2U+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgU3R5
bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnNldHRlcikoUmVmUHRyPFN0eWxlSW1hZ2U+JiYpKQotICAgICAgICA6IFJlZkNvdW50ZWRQ
cm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgU3R5
bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZUltYWdl
KiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0
dGVyKShSZWZQdHI8U3R5bGVJbWFnZT4mJikpCisgICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5
V3JhcHBlcjxTdHlsZUltYWdlPihwcm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIpCiAgICAgewogICAg
IH0KIAotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKK3ByaXZhdGU6CisgICAgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAogICAgIHsK
ICAgICAgICAgaWYgKGEgPT0gYikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBp
ZiAoIWEgfHwgIWIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgYXV0byog
aW1hZ2VBID0gdGhpcy0+dmFsdWUoYSk7Ci0gICAgICAgIGF1dG8qIGltYWdlQiA9IHRoaXMtPnZh
bHVlKGIpOworICAgICAgICBhdXRvKiBpbWFnZUEgPSB2YWx1ZShhKTsKKyAgICAgICAgYXV0byog
aW1hZ2VCID0gdmFsdWUoYik7CiAgICAgICAgIHJldHVybiBhcmVQb2ludGluZ1RvRXF1YWxEYXRh
KGltYWdlQSwgaW1hZ2VCKTsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNs
YXNzIEFjY2VsZXJhdGVkUHJvcGVydHlXcmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxU
PiB7CitjbGFzcyBBY2NlbGVyYXRlZFByb3BlcnR5V3JhcHBlciBmaW5hbCA6IHB1YmxpYyBQcm9w
ZXJ0eVdyYXBwZXI8VD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIEFjY2VsZXJhdGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShU
KSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8VD4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCisg
ICAgQWNjZWxlcmF0ZWRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVCAo
UmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVy
KShUKSkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8VD4ocHJvcGVydHksIGdldHRlciwgc2V0
dGVyKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBhbmltYXRpb25Jc0FjY2Vs
ZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgYW5pbWF0
aW9uSXNBY2NlbGVyYXRlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIH07CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgogY2xhc3MgQWNjZWxlcmF0ZWRJbmRpdmlkdWFsVHJhbnNmb3Jt
UHJvcGVydHlXcmFwcGVyIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8
VD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEFjY2VsZXJh
dGVkSW5kaXZpZHVhbFRyYW5zZm9ybVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3As
IFQqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXIpKFJlZlB0cjxUPiYmKSkKLSAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVy
PFQ+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIEFjY2VsZXJhdGVkSW5kaXZpZHVhbFRyYW5z
Zm9ybVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBUKiAoUmVuZGVyU3R5
bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8
VD4mJikpCisgICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxUPihwcm9wZXJ0eSwg
Z2V0dGVyLCBzZXR0ZXIpCiAgICAgewogICAgIH0KIApAQCAtOTc1LDcgKzk3Myw3IEBAIHByaXZh
dGU6CiAgICAgfQogfTsKIAotY2xhc3MgUHJvcGVydHlXcmFwcGVyRmlsdGVyIDogcHVibGljIFBy
b3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4geworY2xhc3MgUHJvcGVydHlX
cmFwcGVyRmlsdGVyIGZpbmFsIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAg
IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVu
ZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSkKQEAgLTk4Myw3ICs5
ODEsOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgYW5pbWF0aW9uSXNBY2Nl
bGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlCitwcml2YXRlOgorICAgIGJvb2wgYW5pbWF0aW9uSXNB
Y2NlbGVyYXRlZCgpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gcHJvcGVydHko
KSA9PSBDU1NQcm9wZXJ0eUZpbHRlcgogI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCkBAIC05
OTIsOSArOTkxLDkgQEAgcHVibGljOgogICAgICAgICAgICAgOwogICAgIH0KIAotICAgIHZvaWQg
YmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUq
IGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNz
KSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMo
YW5pbSwgdGhpcy0+dmFsdWUoYSksIHRoaXMtPnZhbHVlKGIpLCBwcm9ncmVzcywgcHJvcGVydHko
KSkpOworICAgICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwg
dmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgcHJvZ3Jlc3MsIHByb3BlcnR5KCkpKTsKICAgICB9CiB9
OwogCkBAIC0xMDIyLDE3ICsxMDIxLDE4IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgU2hhZG93RGF0
YSogc2hhZG93Rm9yQmxlbmRpbmcoY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93LCBjCiAgICAg
cmV0dXJuIG90aGVyU2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRXZWJLaXRC
b3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRTaGFkb3dEYXRhLmdldCgpOwogfQogCi1jbGFz
cyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3cgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSB7CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3cgZmluYWwgOiBwdWJsaWMgQW5pbWF0
aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5SUQgcHJvcCwgY29u
c3QgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKSkKLSAg
ICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgUHJvcGVydHlX
cmFwcGVyU2hhZG93KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFNoYWRvd0RhdGEqIChS
ZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIp
KHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiwgYm9vbCkpCisgICAgICAgIDogQW5pbWF0aW9u
UHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKICAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIp
CiAgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQogICAgIHsKICAgICB9CiAKLSAgICBib29sIGVx
dWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92
ZXJyaWRlCitwcml2YXRlOgorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIGlmIChhID09
IGIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwNjEsMjAgKzEwNjEsMjAgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogY2xpZW50LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxl
KiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKICAgICB7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0EgPSAoYS0+Km1fZ2V0
dGVyKSgpOwotICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dCID0gKGItPiptX2dldHRl
cikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZnJvbVNoYWRvdyA9IChmcm9tLT4qbV9n
ZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHRvU2hhZG93ID0gKHRvLT4qbV9n
ZXR0ZXIpKCk7CiAKLSAgICAgICAgaW50IGZyb21MZW5ndGggPSBzaGFkb3dMaXN0TGVuZ3RoKHNo
YWRvd0EpOwotICAgICAgICBpbnQgdG9MZW5ndGggPSBzaGFkb3dMaXN0TGVuZ3RoKHNoYWRvd0Ip
OworICAgICAgICBpbnQgZnJvbUxlbmd0aCA9IHNoYWRvd0xpc3RMZW5ndGgoZnJvbVNoYWRvdyk7
CisgICAgICAgIGludCB0b0xlbmd0aCA9IHNoYWRvd0xpc3RMZW5ndGgodG9TaGFkb3cpOwogCiAg
ICAgICAgIGlmIChmcm9tTGVuZ3RoID09IHRvTGVuZ3RoIHx8IChmcm9tTGVuZ3RoIDw9IDEgJiYg
dG9MZW5ndGggPD0gMSkpIHsKLSAgICAgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRTaW1w
bGVPck1hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVzcywgc2hhZG93QSwgc2hhZG93Qiks
IGZhbHNlKTsKKyAgICAgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZFNpbXBs
ZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGNsaWVudCwgcHJvZ3Jlc3MsIGZyb21TaGFkb3csIHRvU2hh
ZG93KSwgZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
KGRzdC0+Km1fc2V0dGVyKShibGVuZE1pc21hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVz
cywgc2hhZG93QSwgc2hhZG93QiwgZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBmYWxzZSk7CisgICAg
ICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZE1pc21hdGNoZWRTaGFkb3dMaXN0cyhj
bGllbnQsIHByb2dyZXNzLCBmcm9tU2hhZG93LCB0b1NoYWRvdywgZnJvbUxlbmd0aCwgdG9MZW5n
dGgpLCBmYWxzZSk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRApAQCAtMTA4NSw4ICsxMDg1
LDcgQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxTaGFkb3dEYXRhPiBibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QikgY29uc3QKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0
cyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGRvdWJsZSBwcm9ncmVz
cywgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93Qikg
Y29uc3QKICAgICB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdTaGFk
b3dEYXRhOwogICAgICAgICBTaGFkb3dEYXRhKiBsYXN0U2hhZG93ID0gMDsKQEAgLTEwOTUsNyAr
MTA5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFk
b3cgPSBzaGFkb3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKICAgICAgICAgICAgIGNv
bnN0IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0IsIHNo
YWRvd0EpOwogCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRl
ZFNoYWRvdyA9IGJsZW5kRnVuYyhhbmltLCBzcmNTaGFkb3csIGRzdFNoYWRvdywgcHJvZ3Jlc3Mp
OworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kZWRTaGFkb3cg
PSBibGVuZEZ1bmMoY2xpZW50LCBzcmNTaGFkb3csIGRzdFNoYWRvdywgcHJvZ3Jlc3MpOwogICAg
ICAgICAgICAgU2hhZG93RGF0YSogYmxlbmRlZFNoYWRvd1B0ciA9IGJsZW5kZWRTaGFkb3cuZ2V0
KCk7CiAKICAgICAgICAgICAgIGlmICghbGFzdFNoYWRvdykKQEAgLTExMTIsNyArMTExMSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiBuZXdTaGFkb3dEYXRhOwogICAgIH0KIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZE1pc21hdGNoZWRTaGFkb3dMaXN0cyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0
IFNoYWRvd0RhdGEqIHNoYWRvd0EsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IsIGludCBmcm9t
TGVuZ3RoLCBpbnQgdG9MZW5ndGgpIGNvbnN0CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0Rh
dGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGNsaWVudCwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dB
LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3Ro
KSBjb25zdAogICAgIHsKICAgICAgICAgLy8gVGhlIHNoYWRvd3MgaW4gU2hhZG93RGF0YSBhcmUg
c3RvcmVkIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdoZW4gYW5pbWF0aW5nIG1pc21hdGNoZWQgbGlz
dHMsCiAgICAgICAgIC8vIHJldmVyc2UgdGhlbSBhbmQgbWF0Y2ggZnJvbSB0aGUgZW5kLgpAQCAt
MTEzOCw3ICsxMTM3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEq
IHNyY1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKGZyb21TaGFkb3csIHRvU2hhZG93KTsKICAg
ICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5n
KHRvU2hhZG93LCBmcm9tU2hhZG93KTsKIAotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNo
YWRvd0RhdGE+IGJsZW5kZWRTaGFkb3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RT
aGFkb3csIHByb2dyZXNzKTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRh
PiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5jKGNsaWVudCwgc3JjU2hhZG93LCBkc3RTaGFkb3cs
IHByb2dyZXNzKTsKICAgICAgICAgICAgIC8vIEluc2VydCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxp
c3QgdG8gcHJlc2VydmUgdGhlIG9yZGVyLgogICAgICAgICAgICAgYmxlbmRlZFNoYWRvdy0+c2V0
TmV4dChXVEZNb3ZlKG5ld1NoYWRvd0RhdGEpKTsKICAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEg
PSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cpOwpAQCAtMTE1MSwxNyArMTE1MCwxOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKHN0ZDo6dW5pcXVlX3B0cjxTaGFk
b3dEYXRhPiwgYm9vbCk7CiB9OwogCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRD
b2xvciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKK2NsYXNzIFByb3Bl
cnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yIGZpbmFsIDogcHVibGljIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwg
Y29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZShwcm9wKQorICAgIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9y
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQor
ICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCiAgICAgICAg
ICwgbV9nZXR0ZXIoZ2V0dGVyKQogICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKICAgICB7CiAg
ICAgfQogCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorcHJpdmF0ZToKKyAgICBib29sIGVxdWFscyhjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCiAgICAg
ewogICAgICAgICBpZiAoYSA9PSBiKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTgy
LDc1ICsxMTgyLDc2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0Nv
bG9yOwogICAgIH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9p
ZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0
eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0
eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgQ29s
b3IgZnJvbUNvbG9yID0gdmFsdWUoYSk7Ci0gICAgICAgIENvbG9yIHRvQ29sb3IgPSB2YWx1ZShi
KTsKKyAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gdmFsdWUoZnJvbSk7CisgICAgICAgIENvbG9y
IHRvQ29sb3IgPSB2YWx1ZSh0byk7CiAKICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgp
ICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBp
ZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29sb3IgPSBhLT5jb2xv
cigpOworICAgICAgICAgICAgZnJvbUNvbG9yID0gZnJvbS0+Y29sb3IoKTsKICAgICAgICAgaWYg
KCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHRvQ29sb3IgPSBiLT5jb2xvcigpOwot
ICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tQ29sb3IsIHRvQ29s
b3IsIHByb2dyZXNzKSk7CisgICAgICAgICAgICB0b0NvbG9yID0gdG8tPmNvbG9yKCk7CisgICAg
ICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50LCBmcm9tQ29sb3Is
IHRvQ29sb3IsIHByb2dyZXNzKSk7CiAgICAgfQogCi0gICAgQ29sb3IgdmFsdWUoY29uc3QgUmVu
ZGVyU3R5bGUqIGEpIGNvbnN0CisgICAgQ29sb3IgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCk7CisgICAg
ICAgIHJldHVybiAoc3R5bGUtPiptX2dldHRlcikoKTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FC
TEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVy
U3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3QgZmluYWwKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25z
dCBSZW5kZXJTdHlsZSogdG8sIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2lu
Zy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVu
ZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1
ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1h
dE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJl
c3VsdCkpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIg
IGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8
IHZhbHVlKGZyb20pIDw8ICIgdG8gIiA8PCB2YWx1ZSh0bykgPDwgIiBhdCAiIDw8IFRleHRTdHJl
YW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8
IHZhbHVlKHJlc3VsdCkpOwogICAgIH0KICNlbmRpZgogCi1wcml2YXRlOgogICAgIGNvbnN0IENv
bG9yJiAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKICAgICB2b2lkIChSZW5kZXJT
dHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOwogfTsKIAogCiBlbnVtIE1heWJlSW52YWxp
ZENvbG9yVGFnIHsgTWF5YmVJbnZhbGlkQ29sb3IgfTsKLWNsYXNzIFByb3BlcnR5V3JhcHBlclZp
c2l0ZWRBZmZlY3RlZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ug
eworY2xhc3MgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IgZmluYWwgOiBwdWJs
aWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3Io
Q1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgp
IGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwgY29uc3Qg
Q29sb3ImIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKLSAgICAgICAgOiBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlx
dWU8UHJvcGVydHlXcmFwcGVyPGNvbnN0IENvbG9yJj4+KHByb3AsIGdldHRlciwgc2V0dGVyKSkK
LSAgICAgICAgLCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyPGNv
bnN0IENvbG9yJj4+KHByb3AsIHZpc2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQorICAgIFBy
b3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxl
OjoqdmlzaXRlZEdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkU2V0
dGVyKShjb25zdCBDb2xvciYpKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UocHJvcGVydHkpCisgICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFw
cGVyPGNvbnN0IENvbG9yJj4+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikpCisgICAgICAgICwg
bV92aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlcjxjb25zdCBDb2xvciY+
Pihwcm9wZXJ0eSwgdmlzaXRlZEdldHRlciwgdmlzaXRlZFNldHRlcikpCiAgICAgewogICAgIH0K
LSAgICBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUlEIHBy
b3AsIE1heWJlSW52YWxpZENvbG9yVGFnLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0
dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwg
Y29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKLSAgICAgICAgOiBB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV93cmFwcGVyKG1h
a2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I+KHByb3AsIGdldHRlciwg
c2V0dGVyKSkKLSAgICAgICAgLCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlX
cmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I+KHByb3AsIHZpc2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0
ZXIpKQorICAgIFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIE1heWJlSW52YWxpZENvbG9yVGFnLCBjb25zdCBDb2xvciYgKFJlbmRlclN0
eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3Qg
Q29sb3ImKSwgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAg
ICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQorICAgICAgICAs
IG1fd3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihw
cm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIpKQorICAgICAgICAsIG1fdmlzaXRlZFdyYXBwZXIobWFr
ZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcj4ocHJvcGVydHksIHZpc2l0
ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQogICAgIHsKICAgICB9Ci0gICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlk
ZQorCitwcml2YXRlOgorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBtX3dy
YXBwZXItPmVxdWFscyhhLCBiKSAmJiBtX3Zpc2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7CiAg
ICAgfQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisKKyAgICB2b2lkIGJsZW5k
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRl
c3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBtX3dyYXBwZXIt
PmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOwotICAgICAgICBtX3Zpc2l0ZWRXcmFw
cGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyAgICAgICAgbV93cmFwcGVy
LT5ibGVuZChjbGllbnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAg
ICBtX3Zpc2l0ZWRXcmFwcGVyLT5ibGVuZChjbGllbnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywg
cHJvZ3Jlc3MpOwogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5k
KGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVy
U3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgY29u
c3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAg
IHsKLSAgICAgICAgbV93cmFwcGVyLT5sb2dCbGVuZChhLCBiLCByZXN1bHQsIHByb2dyZXNzKTsK
LSAgICAgICAgbV92aXNpdGVkV3JhcHBlci0+bG9nQmxlbmQoYSwgYiwgcmVzdWx0LCBwcm9ncmVz
cyk7CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQoZnJvbSwgdG8sIHJlc3VsdCwgcHJvZ3Jl
c3MpOworICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5sb2dCbGVuZChmcm9tLCB0bywgcmVzdWx0
LCBwcm9ncmVzcyk7CiAgICAgfQogI2VuZGlmCiAKLXByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1fd3JhcHBlcjsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV92aXNpdGVkV3JhcHBlcjsK
IH07CkBAIC0xMjc0LDYgKzEyNzUsNyBAQCBwdWJsaWM6CiAjaWYgIUxPR19ESVNBQkxFRAogICAg
IHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmls
bExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7CiAjZW5kaWYKKwog
cHJpdmF0ZToKICAgICBDU1NQcm9wZXJ0eUlEIG1fcHJvcGVydHk7CiB9OwpAQCAtMTI4OSwxMyAr
MTI5MSwxNCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorcHJvdGVjdGVkOgogICAgIGJvb2wg
ZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25zdCBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgaWYgKGEgPT0gYikKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICBpZiAoIWEgfHwgIWIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJldHVybiB0aGlzLT52YWx1ZShhKSA9PSB0aGlzLT52YWx1ZShiKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlKGEpID09IHZhbHVlKGIpOwogICAgIH0KIAogICAgIFQgdmFsdWUoY29uc3QgRmls
bExheWVyKiBsYXllcikgY29uc3QKQEAgLTEzMDQsMTggKzEzMDcsMTggQEAgcHVibGljOgogICAg
IH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXll
ciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExh
eWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywg
ZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgTE9HX1dJVEhf
U1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5
TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFs
dWUoYikgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOworICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJv
cGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGZyb20pIDw8ICIgdG8g
IiA8PCB2YWx1ZSh0bykgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3Bl
Y3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwogICAg
IH0KICNlbmRpZgogCi1wcm90ZWN0ZWQ6Citwcml2YXRlOgogICAgIFQgKEZpbGxMYXllcjo6Km1f
Z2V0dGVyKSgpIGNvbnN0OwogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IFQmPiB7CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgZmluYWwgOiBw
dWJsaWMgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFQmIChGaWxsTGF5ZXI6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6KnNldHRlcikoVCkpCkBAIC0xMzI0LDMxICsxMzI3
LDMxIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExh
eWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKK3ByaXZhdGU6CisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBjbGllbnQsIEZpbGxMYXllciogZGVzdGluYXRpb24sIGNvbnN0IEZpbGxMYXllciogZnJv
bSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAg
IHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgdGhpcy0+dmFsdWUo
YSksIHRoaXMtPnZhbHVlKGIpLCBwcm9ncmVzcykpOworICAgICAgICAoZGVzdGluYXRpb24tPip0
aGlzLT5tX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdGhpcy0+dmFsdWUoZnJvbSksIHRoaXMt
PnZhbHVlKHRvKSwgcHJvZ3Jlc3MpKTsKICAgICB9CiAKLSAgICBib29sIGNhbkludGVycG9sYXRl
KGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25zdCBvdmVycmlkZQor
ICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxs
TGF5ZXIqIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbkludGVycG9s
YXRlTGVuZ3RoVmFyaWFudHModGhpcy0+dmFsdWUoYSksIHRoaXMtPnZhbHVlKGIpKTsKKyAgICAg
ICAgcmV0dXJuIGNhbkludGVycG9sYXRlTGVuZ3RoVmFyaWFudHModGhpcy0+dmFsdWUoZnJvbSks
IHRoaXMtPnZhbHVlKHRvKSk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQg
bG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29u
c3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9p
ZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBmcm9t
LCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAg
ewogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5k
aW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBUJj46OnByb3BlcnR5KCkpCi0gICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShhKQotICAgICAgICAgICAg
PDwgIiB0byAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZh
bHVlKGIpCisgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShmcm9tKQorICAgICAgICAgICAgPDwgIiB0byAiIDw8
IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKHRvKQogICAg
ICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJ
bnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBUJj46OnZhbHVlKHJlc3VsdCkpOwogICAgIH0KICNlbmRpZgogCi1wcm90ZWN0
ZWQ6CiAgICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFQpOwogfTsKIAotY2xhc3MgRmls
bExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+IHsKK2NsYXNzIEZpbGxMYXllclBvc2l0aW9uUHJv
cGVydHlXcmFwcGVyIGZpbmFsIDogcHVibGljIEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBMZW5ndGgmPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgRmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgY29uc3QgTGVuZ3RoJiAoRmlsbExheWVyOjoqbGVuZ3RoR2V0dGVyKSgpIGNvbnN0LCB2
b2lkIChGaWxsTGF5ZXI6OipsZW5ndGhTZXR0ZXIpKExlbmd0aCksIEVkZ2UgKEZpbGxMYXllcjo6
Km9yaWdpbkdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqb3JpZ2luU2V0dGVyKShF
ZGdlKSwgRWRnZSBmYXJFZGdlKQpAQCAtMTM2MCwxNSArMTM2MywxNiBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KIAotICAgIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmls
bExheWVyKiBiKSBjb25zdCBvdmVycmlkZQorcHJpdmF0ZToKKyAgICBib29sIGVxdWFscyhjb25z
dCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYikgY29uc3QgZmluYWwKICAgICB7CiAg
ICAgICAgIGlmIChhID09IGIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYg
KCFhIHx8ICFiKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGF1dG8gZnJv
bUxlbmd0aCA9IHRoaXMtPnZhbHVlKGEpOwotICAgICAgICBhdXRvIHRvTGVuZ3RoID0gdGhpcy0+
dmFsdWUoYik7CisgICAgICAgIGF1dG8gZnJvbUxlbmd0aCA9IHZhbHVlKGEpOworICAgICAgICBh
dXRvIHRvTGVuZ3RoID0gdmFsdWUoYik7CiAgICAgICAgIAogICAgICAgICBFZGdlIGZyb21FZGdl
ID0gKGEtPiptX29yaWdpbkdldHRlcikoKTsKICAgICAgICAgRWRnZSB0b0VkZ2UgPSAoYi0+Km1f
b3JpZ2luR2V0dGVyKSgpOwpAQCAtMTM3NiwxMyArMTM4MCwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3RoICYmIGZyb21FZGdlID09IHRvRWRnZTsKICAg
ICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciog
YiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxlbmQoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBGaWxsTGF5ZXIqIGRlc3RpbmF0aW9u
LCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8sIGRvdWJsZSBwcm9n
cmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGF1dG8gZnJvbUxlbmd0aCA9IHRoaXMt
PnZhbHVlKGEpOwotICAgICAgICBhdXRvIHRvTGVuZ3RoID0gdGhpcy0+dmFsdWUoYik7CisgICAg
ICAgIGF1dG8gZnJvbUxlbmd0aCA9IHZhbHVlKGZyb20pOworICAgICAgICBhdXRvIHRvTGVuZ3Ro
ID0gdmFsdWUodG8pOwogICAgICAgICAKLSAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChhLT4qbV9v
cmlnaW5HZXR0ZXIpKCk7Ci0gICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdpbkdldHRl
cikoKTsKKyAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChmcm9tLT4qbV9vcmlnaW5HZXR0ZXIpKCk7
CisgICAgICAgIEVkZ2UgdG9FZGdlID0gKHRvLT4qbV9vcmlnaW5HZXR0ZXIpKCk7CiAgICAgICAg
IAogICAgICAgICBpZiAoZnJvbUVkZ2UgIT0gdG9FZGdlKSB7CiAgICAgICAgICAgICAvLyBDb252
ZXJ0IHRoZSByaWdodC9ib3R0b20gaW50byBhIGNhbGMgZXhwcmVzc2lvbiwKQEAgLTEzOTAsMjEg
KzEzOTQsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZyb21MZW5ndGggPSBjb252ZXJ0
VG8xMDBQZXJjZW50TWludXNMZW5ndGgoZnJvbUxlbmd0aCk7CiAgICAgICAgICAgICBlbHNlIGlm
ICh0b0VkZ2UgPT0gbV9mYXJFZGdlKSB7CiAgICAgICAgICAgICAgICAgdG9MZW5ndGggPSBjb252
ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgodG9MZW5ndGgpOwotICAgICAgICAgICAgICAgIChk
c3QtPiptX29yaWdpblNldHRlcikoZnJvbUVkZ2UpOyAvLyBOb3cgd2UgaGF2ZSBhIGNhbGMoMTAw
JSAtIGwpLCBpdCdzIHJlbGF0aXZlIHRvIHRoZSBsZWZ0L3RvcCBlZGdlLgorICAgICAgICAgICAg
ICAgIChkZXN0aW5hdGlvbi0+Km1fb3JpZ2luU2V0dGVyKShmcm9tRWRnZSk7IC8vIE5vdyB3ZSBo
YXZlIGEgY2FsYygxMDAlIC0gbCksIGl0J3MgcmVsYXRpdmUgdG8gdGhlIGxlZnQvdG9wIGVkZ2Uu
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAoZHN0LT4qbV9sZW5ndGhTZXR0
ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCwgcHJvZ3Jlc3MpKTsKKyAg
ICAgICAgKGRlc3RpbmF0aW9uLT4qbV9sZW5ndGhTZXR0ZXIpKGJsZW5kRnVuYyhjbGllbnQsIGZy
b21MZW5ndGgsIHRvTGVuZ3RoLCBwcm9ncmVzcykpOwogICAgIH0KIAogI2lmICFMT0dfRElTQUJM
RUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxs
TGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVy
cmlkZQorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZp
bGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBmaW5hbAogICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVh
bSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZy
b20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRleHRT
dHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAi
IDw8IHZhbHVlKHJlc3VsdCkpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywg
c3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8
ICIgZnJvbSAiIDw8IHZhbHVlKGZyb20pIDw8ICIgdG8gIiA8PCB2YWx1ZSh0bykgPDwgIiBhdCAi
IDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykg
PDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwogICAgIH0KICNlbmRpZgogCi1wcm90ZWN0ZWQ6
CiAgICAgdm9pZCAoRmlsbExheWVyOjoqbV9sZW5ndGhTZXR0ZXIpKExlbmd0aCk7CiAgICAgRWRn
ZSAoRmlsbExheWVyOjoqbV9vcmlnaW5HZXR0ZXIpKCkgY29uc3Q7CiAgICAgdm9pZCAoRmlsbExh
eWVyOjoqbV9vcmlnaW5TZXR0ZXIpKEVkZ2UpOwpAQCAtMTQyMSwyNiArMTQyNCwyNiBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciogYSwgY29u
c3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCitwcml2YXRl
OgorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50
LCBGaWxsTGF5ZXIqIGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZp
bGxMYXllciogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAg
IChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIHRoaXMtPnZhbHVlKGEpLCB0aGlzLT52
YWx1ZShiKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9zZXR0
ZXIpKGJsZW5kRnVuYyhjbGllbnQsIHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byks
IHByb2dyZXNzKSk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxl
bmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmls
bExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBsb2dC
bGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25z
dCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5n
ICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46
OnByb3BlcnR5KCkpCi0gICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShhKQotICAgICAgICAgICAgPDwgIiB0byAiIDw8IEZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKGIpCisgICAgICAgICAgICA8
PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShm
cm9tKQorICAgICAgICAgICAgPDwgIiB0byAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdl
dHRlcjxUKj46OnZhbHVlKHRvKQogICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06
OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHJlc3VsdCkpOwogICAgIH0K
ICNlbmRpZgogCi1wcm90ZWN0ZWQ6CiAgICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFJl
ZlB0cjxUPiYmKTsKIH07CiAKLWNsYXNzIEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBw
ZXIgOiBwdWJsaWMgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdl
PiB7CitjbGFzcyBGaWxsTGF5ZXJTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyIGZpbmFsIDogcHVi
bGljIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4gewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEZpbGxMYXllclN0eWxlSW1h
Z2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVJbWFnZSogKEZp
bGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqc2V0dGVyKShSZWZQ
dHI8U3R5bGVJbWFnZT4mJikpCkBAIC0xNDQ4LDI0ICsxNDUxLDI1IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxs
TGF5ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCitwcml2YXRlOgorICAgIGJvb2wgZXF1YWxzKGNvbnN0
IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25zdCBmaW5hbAogICAgIHsKICAg
ICAgICAgaWYgKGEgPT0gYikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAo
IWEgfHwgIWIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBhcmVQ
b2ludGluZ1RvRXF1YWxEYXRhKHRoaXMtPnZhbHVlKGEpLCB0aGlzLT52YWx1ZShiKSk7CisgICAg
ICAgIHJldHVybiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKHZhbHVlKGEpLCB2YWx1ZShiKSk7CiAg
ICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExh
eWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxs
TGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBMT0dfV0lUSF9T
VFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlO
YW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1
ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVn
ZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgICAgIExPR19X
SVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9w
ZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0byAi
IDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVj
dGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CiAgICAg
fQogI2VuZGlmCiB9OwogCi1jbGFzcyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyIDogcHVibGlj
IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworY2xhc3MgRmlsbExheWVyc1Byb3BlcnR5
V3JhcHBlciBmaW5hbCA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB0eXBlZGVmIGNvbnN0IEZp
bGxMYXllciYgKFJlbmRlclN0eWxlOjoqTGF5ZXJzR2V0dGVyKSgpIGNvbnN0OwpAQCAtMTQ5OCw3
ICsxNTAyLDggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlk
ZQorcHJpdmF0ZToKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBpZiAoYSA9PSBiKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTE5LDEwICsxNTI0LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRl
CisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgYXV0byogZnJvbUxh
eWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAm
KGItPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0byogZnJvbUxheWVyID0gJihmcm9t
LT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKHRvLT4qbV9s
YXllcnNHZXR0ZXIpKCk7CiAKICAgICAgICAgd2hpbGUgKGZyb21MYXllciAmJiB0b0xheWVyKSB7
CiAgICAgICAgICAgICBpZiAoIW1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5jYW5JbnRlcnBv
bGF0ZShmcm9tTGF5ZXIsIHRvTGF5ZXIpKQpAQCAtMTUzNSwxNiArMTU0MCwxNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IG92ZXJyaWRlCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZy
b20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAog
ICAgIHsKLSAgICAgICAgYXV0byogYUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0g
ICAgICAgIGF1dG8qIGJMYXllciA9ICYoYi0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBh
dXRvKiBkc3RMYXllciA9ICYoZHN0LT4qbV9sYXllcnNBY2Nlc3NvcikoKTsKKyAgICAgICAgYXV0
byogZnJvbUxheWVyID0gJihmcm9tLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8q
IHRvTGF5ZXIgPSAmKHRvLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIGRzdExh
eWVyID0gJihkZXN0aW5hdGlvbi0+Km1fbGF5ZXJzQWNjZXNzb3IpKCk7CiAKLSAgICAgICAgd2hp
bGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKLSAgICAgICAgICAgIG1fZmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChhbmltLCBkc3RMYXllciwgYUxheWVyLCBiTGF5ZXIs
IHByb2dyZXNzKTsKLSAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4dCgpOwotICAgICAg
ICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgIHdoaWxlIChmcm9tTGF5ZXIg
JiYgdG9MYXllciAmJiBkc3RMYXllcikgeworICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXItPmJsZW5kKGNsaWVudCwgZHN0TGF5ZXIsIGZyb21MYXllciwgdG9MYXllciwgcHJv
Z3Jlc3MpOworICAgICAgICAgICAgZnJvbUxheWVyID0gZnJvbUxheWVyLT5uZXh0KCk7CisgICAg
ICAgICAgICB0b0xheWVyID0gdG9MYXllci0+bmV4dCgpOwogICAgICAgICAgICAgZHN0TGF5ZXIg
PSBkc3RMYXllci0+bmV4dCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTU1MiwyNyArMTU1Nywy
NSBAQCBwdWJsaWM6CiAjaWYgIUxPR19ESVNBQkxFRAogICAgIHZvaWQgbG9nQmxlbmQoY29uc3Qg
UmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgY29uc3QgUmVuZGVyU3R5
bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAg
YXV0byogYUxheWVyID0gJihmcm9tLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8q
IGJMYXllciA9ICYodG8tPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0byogZnJvbUxh
eWVyID0gJihmcm9tLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRvTGF5ZXIg
PSAmKHRvLT4qbV9sYXllcnNHZXR0ZXIpKCk7CiAgICAgICAgIGF1dG8qIGRzdExheWVyID0gJihy
ZXN1bHQtPiptX2xheWVyc0dldHRlcikoKTsKIAotICAgICAgICB3aGlsZSAoYUxheWVyICYmIGJM
YXllciAmJiBkc3RMYXllcikgewotICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXItPmxvZ0JsZW5kKGRzdExheWVyLCBhTGF5ZXIsIGJMYXllciwgcHJvZ3Jlc3MpOwotICAgICAg
ICAgICAgYUxheWVyID0gYUxheWVyLT5uZXh0KCk7Ci0gICAgICAgICAgICBiTGF5ZXIgPSBiTGF5
ZXItPm5leHQoKTsKKyAgICAgICAgd2hpbGUgKGZyb21MYXllciAmJiB0b0xheWVyICYmIGRzdExh
eWVyKSB7CisgICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+bG9nQmxlbmQo
ZHN0TGF5ZXIsIGZyb21MYXllciwgdG9MYXllciwgcHJvZ3Jlc3MpOworICAgICAgICAgICAgZnJv
bUxheWVyID0gZnJvbUxheWVyLT5uZXh0KCk7CisgICAgICAgICAgICB0b0xheWVyID0gdG9MYXll
ci0+bmV4dCgpOwogICAgICAgICAgICAgZHN0TGF5ZXIgPSBkc3RMYXllci0+bmV4dCgpOwogICAg
ICAgICB9CiAgICAgfQogI2VuZGlmCiAKLXByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZp
bGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1fZmlsbExheWVyUHJvcGVydHlX
cmFwcGVyOwotCiAgICAgTGF5ZXJzR2V0dGVyIG1fbGF5ZXJzR2V0dGVyOwogICAgIExheWVyc0Fj
Y2Vzc29yIG1fbGF5ZXJzQWNjZXNzb3I7CiB9OwogCi1jbGFzcyBTaG9ydGhhbmRQcm9wZXJ0eVdy
YXBwZXIgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CitjbGFzcyBTaG9y
dGhhbmRQcm9wZXJ0eVdyYXBwZXIgZmluYWwgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgU2hv
cnRoYW5kUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFZlY3RvcjxBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbG9uZ2hhbmRXcmFwcGVycykKQEAgLTE1ODEsOSAr
MTU4NCwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgaXNTaG9ydGhhbmRX
cmFwcGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgaXNTaG9y
dGhhbmRXcmFwcGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgYm9vbCBl
cXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBv
dmVycmlkZQorICAgIGNvbnN0IFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4m
IHByb3BlcnR5V3JhcHBlcnMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnM7IH0K
KworcHJpdmF0ZToKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBpZiAoYSA9PSBiKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTk3LDI3ICsxNjAzLDI0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
b3ZlcnJpZGUKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJv
bSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAg
ICAgewogICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3Byb3BlcnR5V3JhcHBlcnMpCi0g
ICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyAg
ICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGNsaWVudCwgZGVzdGluYXRpb24sIGZyb20sIHRvLCBw
cm9ncmVzcyk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJT
dHlsZSogZHN0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVu
ZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBS
ZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAg
ICB7CiAgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykKLSAg
ICAgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOworICAgICAg
ICAgICAgd3JhcHBlci0+bG9nQmxlbmQoZnJvbSwgdG8sIGRlc3RpbmF0aW9uLCBwcm9ncmVzcyk7
CiAgICAgfQogI2VuZGlmCiAKLSAgICBjb25zdCBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSo+JiBwcm9wZXJ0eVdyYXBwZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdy
YXBwZXJzOyB9Ci0KLXByaXZhdGU6CiAgICAgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqPiBtX3Byb3BlcnR5V3JhcHBlcnM7CiB9OwogCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJG
bGV4IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworY2xhc3MgUHJvcGVy
dHlXcmFwcGVyRmxleCBmaW5hbCA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQcm9wZXJ0eVdy
YXBwZXJGbGV4KCkKQEAgLTE2MjUsNyArMTYyOCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiKSBjb25zdCBvdmVycmlkZQorcHJpdmF0ZToKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCiAgICAgewogICAg
ICAgICBpZiAoYSA9PSBiKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjM1LDE2ICsx
NjM5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGEtPmZsZXhCYXNpcygpID09IGItPmZs
ZXhCYXNpcygpICYmIGEtPmZsZXhHcm93KCkgPT0gYi0+ZmxleEdyb3coKSAmJiBhLT5mbGV4U2hy
aW5rKCkgPT0gYi0+ZmxleFNocmluaygpOwogICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xh
dGUoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVy
cmlkZQorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiBh
LT5mbGV4R3JvdygpICE9IGItPmZsZXhHcm93KCkgJiYgYS0+ZmxleFNocmluaygpICE9IGItPmZs
ZXhTaHJpbmsoKSAmJiBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoYS0+ZmxleEJhc2lzKCksIGItPmZs
ZXhCYXNpcygpLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBmcm9tLT5mbGV4R3JvdygpICE9IHRv
LT5mbGV4R3JvdygpICYmIGZyb20tPmZsZXhTaHJpbmsoKSAhPSB0by0+ZmxleFNocmluaygpICYm
IGNhbkludGVycG9sYXRlTGVuZ3Rocyhmcm9tLT5mbGV4QmFzaXMoKSwgdG8tPmZsZXhCYXNpcygp
LCBmYWxzZSk7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVu
ZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAg
ICBkc3QtPnNldEZsZXhCYXNpcyhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleEJhc2lzKCksIGItPmZs
ZXhCYXNpcygpLCBwcm9ncmVzcykpOwotICAgICAgICBkc3QtPnNldEZsZXhHcm93KGJsZW5kRnVu
YyhhbmltLCBhLT5mbGV4R3JvdygpLCBiLT5mbGV4R3JvdygpLCBwcm9ncmVzcykpOwotICAgICAg
ICBkc3QtPnNldEZsZXhTaHJpbmsoYmxlbmRGdW5jKGFuaW0sIGEtPmZsZXhTaHJpbmsoKSwgYi0+
ZmxleFNocmluaygpLCBwcm9ncmVzcykpOworICAgICAgICBkZXN0aW5hdGlvbi0+c2V0RmxleEJh
c2lzKGJsZW5kRnVuYyhjbGllbnQsIGZyb20tPmZsZXhCYXNpcygpLCB0by0+ZmxleEJhc2lzKCks
IHByb2dyZXNzKSk7CisgICAgICAgIGRlc3RpbmF0aW9uLT5zZXRGbGV4R3JvdyhibGVuZEZ1bmMo
Y2xpZW50LCBmcm9tLT5mbGV4R3JvdygpLCB0by0+ZmxleEdyb3coKSwgcHJvZ3Jlc3MpKTsKKyAg
ICAgICAgZGVzdGluYXRpb24tPnNldEZsZXhTaHJpbmsoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS0+
ZmxleFNocmluaygpLCB0by0+ZmxleFNocmluaygpLCBwcm9ncmVzcykpOwogICAgIH0KIAogI2lm
ICFMT0dfRElTQUJMRUQKQEAgLTE2NTYsMTggKzE2NjAsMTkgQEAgcHVibGljOgogI2VuZGlmCiB9
OwogCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludCA6IHB1YmxpYyBBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlIHsKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNWR1BhaW50IGZpbmFsIDog
cHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3Bl
cnR5SUQgcHJvcCwgU1ZHUGFpbnRUeXBlIChSZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdldHRlciko
KSBjb25zdCwgQ29sb3IgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSwgU1ZHUGFpbnRUeXBlIChSZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdl
dHRlcikoKSBjb25zdCwgQ29sb3IgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQogICAgICAgICAsIG1fcGFpbnRUeXBlR2V0
dGVyKHBhaW50VHlwZUdldHRlcikKICAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCiAgICAgICAg
ICwgbV9zZXR0ZXIoc2V0dGVyKQogICAgIHsKICAgICB9CiAKLSAgICBib29sIGVxdWFscyhjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCitw
cml2YXRlOgorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIGlmIChhID09IGIpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE2OTcsMTQgKzE3MDIsMTQgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVy
cmlkZQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xp
ZW50LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBj
b25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7
Ci0gICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6
UkdCQ29sb3IKLSAgICAgICAgICAgIHx8IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZH
UGFpbnRUeXBlOjpSR0JDb2xvcikKKyAgICAgICAgaWYgKChmcm9tLT4qbV9wYWludFR5cGVHZXR0
ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcgorICAgICAgICAgICAgfHwgKHRvLT4qbV9w
YWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOwot
ICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgQ29sb3Ig
ZnJvbUNvbG9yID0gKGZyb20tPiptX2dldHRlcikoKTsKKyAgICAgICAgQ29sb3IgdG9Db2xvciA9
ICh0by0+Km1fZ2V0dGVyKSgpOwogCiAgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAm
JiAhdG9Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNzEzLDcgKzE3
MTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmcm9tQ29sb3IgPSBDb2xvcigpOwogICAgICAg
ICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgdG9Db2xvciA9IENvbG9yKCk7
Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9D
b2xvciwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5k
RnVuYyhjbGllbnQsIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKICAgICB9CiAKICNp
ZiAhTE9HX0RJU0FCTEVECkBAIC0xNzI0LDEzICsxNzI5LDEyIEBAIHB1YmxpYzoKICAgICB9CiAj
ZW5kaWYKIAotcHJpdmF0ZToKICAgICBTVkdQYWludFR5cGUgKFJlbmRlclN0eWxlOjoqbV9wYWlu
dFR5cGVHZXR0ZXIpKCkgY29uc3Q7CiAgICAgQ29sb3IgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIp
KCkgY29uc3Q7CiAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3Im
KTsKIH07CiAKLWNsYXNzIFByb3BlcnR5V3JhcHBlckZvbnRTdHlsZSA6IHB1YmxpYyBQcm9wZXJ0
eVdyYXBwZXI8T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPj4geworY2xhc3MgUHJvcGVydHlX
cmFwcGVyRm9udFN0eWxlIGZpbmFsIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxG
b250U2VsZWN0aW9uVmFsdWU+PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgUHJvcGVydHlXcmFwcGVyRm9udFN0eWxlKCkKQEAgLTE3MzgsMTIgKzE3NDIsMTMg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0
IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRl
Citwcml2YXRlOgorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZy
b20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJl
dHVybiBmcm9tLT5mb250SXRhbGljKCkgJiYgdG8tPmZvbnRJdGFsaWMoKSAmJiBmcm9tLT5mb250
RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudCAmJiB0
by0+Zm9udERlc2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNs
bnQ7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRl
clN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAg
YXV0byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CiAKQEAgLTE3NTUsNDAg
KzE3NjAsNDEgQEAgcHVibGljOgogICAgICAgICBhdXRvIHRvRm9udEl0YWxpYyA9IHRvLT5mb250
SXRhbGljKCk7CiAgICAgICAgIGF1dG8gYmxlbmRlZEZvbnRJdGFsaWMgPSBwcm9ncmVzcyA8IDAu
NSA/IGZyb21Gb250SXRhbGljIDogdG9Gb250SXRhbGljOwogICAgICAgICBpZiAoIWRpc2NyZXRl
KQotICAgICAgICAgICAgYmxlbmRlZEZvbnRJdGFsaWMgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUZv
bnRJdGFsaWMsIHRvRm9udEl0YWxpYywgcHJvZ3Jlc3MpOworICAgICAgICAgICAgYmxlbmRlZEZv
bnRJdGFsaWMgPSBibGVuZEZ1bmMoY2xpZW50LCBmcm9tRm9udEl0YWxpYywgdG9Gb250SXRhbGlj
LCBwcm9ncmVzcyk7CiAKLSAgICAgICAgRm9udFNlbGVjdG9yKiBjdXJyZW50Rm9udFNlbGVjdG9y
ID0gZHN0LT5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOwotICAgICAgICBhdXRvIGRlc2Ny
aXB0aW9uID0gZHN0LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udFNlbGVjdG9yKiBj
dXJyZW50Rm9udFNlbGVjdG9yID0gZGVzdGluYXRpb24tPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVj
dG9yKCk7CisgICAgICAgIGF1dG8gZGVzY3JpcHRpb24gPSBkZXN0aW5hdGlvbi0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgIGRlc2NyaXB0aW9uLnNldEl0YWxpYyhibGVuZGVkRm9udEl0YWxp
Yyk7CiAgICAgICAgIGRlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoYmxlbmRlZFN0eWxlQXhp
cyk7Ci0gICAgICAgIGRzdC0+c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZGVzY3JpcHRpb24p
KTsKLSAgICAgICAgZHN0LT5mb250Q2FzY2FkZSgpLnVwZGF0ZShjdXJyZW50Rm9udFNlbGVjdG9y
KTsKKyAgICAgICAgZGVzdGluYXRpb24tPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGRlc2Ny
aXB0aW9uKSk7CisgICAgICAgIGRlc3RpbmF0aW9uLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShjdXJy
ZW50Rm9udFNlbGVjdG9yKTsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNs
YXNzIEF1dG9Qcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPFQ+IHsKK2Ns
YXNzIEF1dG9Qcm9wZXJ0eVdyYXBwZXIgZmluYWwgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPFQ+
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBBdXRvUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUKSwgYm9vbCAoUmVuZGVyU3R5bGU6
OiphdXRvR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KmF1dG9TZXR0ZXIpKCks
IE9wdGlvbmFsPFQ+IG1pblZhbHVlID0gV1RGOjpudWxsb3B0KQotICAgICAgICA6IFByb3BlcnR5
V3JhcHBlcjxUPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKKyAgICBBdXRvUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCksIGJvb2wgKFJlbmRlclN0eWxlOjoqYXV0
b0dldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OiphdXRvU2V0dGVyKSgpLCBPcHRp
b25hbDxUPiBtaW5WYWx1ZSA9IFdURjo6bnVsbG9wdCkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBw
ZXI8VD4ocHJvcGVydHksIGdldHRlciwgc2V0dGVyKQogICAgICAgICAsIG1fYXV0b0dldHRlcihh
dXRvR2V0dGVyKQogICAgICAgICAsIG1fYXV0b1NldHRlcihhdXRvU2V0dGVyKQogICAgICAgICAs
IG1fbWluVmFsdWUobWluVmFsdWUpCiAgICAgewogICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJw
b2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29u
c3Qgb3ZlcnJpZGUKK3ByaXZhdGU6CisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5k
ZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAogICAgIHsK
ICAgICAgICAgcmV0dXJuICEoZnJvbS0+Km1fYXV0b0dldHRlcikoKSAmJiAhKHRvLT4qbV9hdXRv
R2V0dGVyKSgpOwogICAgIH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGZy
b20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50
LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25z
dCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0g
ICAgICAgIGF1dG8gYmxlbmRlZFZhbHVlID0gYmxlbmRGdW5jKGFuaW0sIHRoaXMtPnZhbHVlKGZy
b20pLCB0aGlzLT52YWx1ZSh0byksIHByb2dyZXNzKTsKLSAgICAgICAgaWYgKHRoaXMtPm1fbWlu
VmFsdWUpCi0gICAgICAgICAgICBibGVuZGVkVmFsdWUgPSBibGVuZGVkVmFsdWUgPiAqdGhpcy0+
bV9taW5WYWx1ZSA/IGJsZW5kZWRWYWx1ZSA6ICp0aGlzLT5tX21pblZhbHVlOwotICAgICAgICAo
ZHN0LT4qdGhpcy0+bV9zZXR0ZXIpKGJsZW5kZWRWYWx1ZSk7CisgICAgICAgIGF1dG8gYmxlbmRl
ZFZhbHVlID0gYmxlbmRGdW5jKGNsaWVudCwgdGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVl
KHRvKSwgcHJvZ3Jlc3MpOworICAgICAgICBpZiAobV9taW5WYWx1ZSkKKyAgICAgICAgICAgIGJs
ZW5kZWRWYWx1ZSA9IGJsZW5kZWRWYWx1ZSA+ICptX21pblZhbHVlID8gYmxlbmRlZFZhbHVlIDog
Km1fbWluVmFsdWU7CisgICAgICAgIChkZXN0aW5hdGlvbi0+KnRoaXMtPm1fc2V0dGVyKShibGVu
ZGVkVmFsdWUpOwogCiAgICAgICAgIGlmIChjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xNzk2LDE0ICsxODAyLDEzIEBAIHB1YmxpYzoKICAgICAgICAg
QVNTRVJUKCFwcm9ncmVzcyB8fCBwcm9ncmVzcyA9PSAxLjApOwogICAgICAgICBpZiAoIXByb2dy
ZXNzKSB7CiAgICAgICAgICAgICBpZiAoKGZyb20tPiptX2F1dG9HZXR0ZXIpKCkpCi0gICAgICAg
ICAgICAgICAgKGRzdC0+Km1fYXV0b1NldHRlcikoKTsKKyAgICAgICAgICAgICAgICAoZGVzdGlu
YXRpb24tPiptX2F1dG9TZXR0ZXIpKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBp
ZiAoKHRvLT4qbV9hdXRvR2V0dGVyKSgpKQotICAgICAgICAgICAgICAgIChkc3QtPiptX2F1dG9T
ZXR0ZXIpKCk7CisgICAgICAgICAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9hdXRvU2V0dGVyKSgp
OwogICAgICAgICB9CiAgICAgfQogCi1wcml2YXRlOgogICAgIGJvb2wgKFJlbmRlclN0eWxlOjoq
bV9hdXRvR2V0dGVyKSgpIGNvbnN0OwogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9hdXRvU2V0
dGVyKSgpOwogICAgIE9wdGlvbmFsPFQ+IG1fbWluVmFsdWU7CkBAIC0xODEyLDE5ICsxODE3LDIw
IEBAIHByaXZhdGU6CiBjbGFzcyBOb25OZWdhdGl2ZUZsb2F0UHJvcGVydHlXcmFwcGVyIDogcHVi
bGljIFByb3BlcnR5V3JhcHBlcjxmbG9hdD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIE5vbk5lZ2F0aXZlRmxvYXRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlJRCBwcm9wLCBmbG9hdCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqc2V0dGVyKShmbG9hdCkpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyPGZs
b2F0Pihwcm9wLCBnZXR0ZXIsIHNldHRlcikKKyAgICBOb25OZWdhdGl2ZUZsb2F0UHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGZsb2F0IChSZW5kZXJTdHlsZTo6KmdldHRl
cikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGZsb2F0KSkKKyAgICAgICAg
OiBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikKICAgICB7
CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGll
bnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQogICAg
IHsKLSAgICAgICAgYXV0byBibGVuZGVkVmFsdWUgPSBibGVuZEZ1bmMoYW5pbSwgdmFsdWUoZnJv
bSksIHZhbHVlKHRvKSwgcHJvZ3Jlc3MpOwotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5k
ZWRWYWx1ZSA+IDAgPyBibGVuZGVkVmFsdWUgOiAwKTsKKyAgICAgICAgYXV0byBibGVuZGVkVmFs
dWUgPSBibGVuZEZ1bmMoY2xpZW50LCB2YWx1ZShmcm9tKSwgdmFsdWUodG8pLCBwcm9ncmVzcyk7
CisgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZGVkVmFsdWUgPiAwID8gYmxl
bmRlZFZhbHVlIDogMCk7CiAgICAgfQogfTsKIAotY2xhc3MgUGVyc3BlY3RpdmVXcmFwcGVyIDog
cHVibGljIE5vbk5lZ2F0aXZlRmxvYXRQcm9wZXJ0eVdyYXBwZXIgeworY2xhc3MgUGVyc3BlY3Rp
dmVXcmFwcGVyIGZpbmFsIDogcHVibGljIE5vbk5lZ2F0aXZlRmxvYXRQcm9wZXJ0eVdyYXBwZXIg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFBlcnNwZWN0aXZl
V3JhcHBlcigpCkBAIC0xODMyLDIzICsxODM4LDI0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHRvKSBjb25zdCBvdmVycmlkZQorcHJpdmF0ZToKKyAgICBib29sIGNhbklu
dGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8p
IGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBpZiAoIWZyb20tPmhhc1BlcnNwZWN0aXZlKCkg
fHwgIXRvLT5oYXNQZXJzcGVjdGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICByZXR1cm4gTm9uTmVnYXRpdmVGbG9hdFByb3BlcnR5V3JhcHBlcjo6Y2FuSW50ZXJwb2xh
dGUoZnJvbSwgdG8pOwogICAgIH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVy
cmlkZQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xp
ZW50LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBj
b25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7
CiAgICAgICAgIGlmICghY2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pKQotICAgICAgICAgICAgKGRz
dC0+Km1fc2V0dGVyKShwcm9ncmVzcyA/IHZhbHVlKHRvKSA6IHZhbHVlKGZyb20pKTsKKyAgICAg
ICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShwcm9ncmVzcyA/IHZhbHVlKHRvKSA6IHZh
bHVlKGZyb20pKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgTm9uTmVnYXRpdmVGbG9hdFBy
b3BlcnR5V3JhcHBlcjo6YmxlbmQoYW5pbSwgZHN0LCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAg
ICAgICAgICAgTm9uTmVnYXRpdmVGbG9hdFByb3BlcnR5V3JhcHBlcjo6YmxlbmQoY2xpZW50LCBk
ZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKICAgICB9CiB9OwogCi1jbGFzcyBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAgeworY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb25X
cmFwcGVyTWFwIGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBzaW5nbGV0b24oKQpA
QCAtMjIzOSwzMiArMjI0NiwzMiBAQCBzdGF0aWMgYm9vbCBnYXRoZXJFbmNsb3NpbmdTaG9ydGhh
bmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEFuaW1hdGlvbgogfQogCiAvLyBS
ZXR1cm5zIHRydWUgaWYgd2UgbmVlZCB0byBzdGFydCBhbmltYXRpb24gdGltZXJzCi12b2lkIENT
U1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgQ1NTUHJvcGVydHlJRCBwcm9wLCBSZW5kZXJTdHlsZSogZHN0LCBj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVz
cykKK3ZvaWQgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFJl
bmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKQogewotICAgIEFTU0VSVChwcm9wICE9IENT
U1Byb3BlcnR5SW52YWxpZCk7CisgICAgQVNTRVJUKHByb3BlcnR5ICE9IENTU1Byb3BlcnR5SW52
YWxpZCk7CiAKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NT
UHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVy
dHkocHJvcCk7CisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENT
U1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3Bl
cnR5KHByb3BlcnR5KTsKICAgICBpZiAod3JhcHBlcikgewogICAgICAgICAvLyBodHRwczovL2Ry
YWZ0cy5jc3N3Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jZGlzY3JldGUKICAgICAgICAgLy8gVGhl
IHByb3BlcnR54oCZcyB2YWx1ZXMgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBjb21iaW5lZCwgdGh1
cyBpdCBpcyBub3QgYWRkaXRpdmUgYW5kCiAgICAgICAgIC8vIGludGVycG9sYXRpb24gc3dhcHMg
ZnJvbSBWYSB0byBWYiBhdCA1MCUgKHA9MC41KS4KLSAgICAgICAgaWYgKCF3cmFwcGVyLT5jYW5J
bnRlcnBvbGF0ZShhLCBiKSkKKyAgICAgICAgaWYgKCF3cmFwcGVyLT5jYW5JbnRlcnBvbGF0ZShm
cm9tLCB0bykpCiAgICAgICAgICAgICBwcm9ncmVzcyA9IHByb2dyZXNzIDwgMC41ID8gMCA6IDE7
Ci0gICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworICAg
ICAgICB3cmFwcGVyLT5ibGVuZChjbGllbnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jl
c3MpOwogI2lmICFMT0dfRElTQUJMRUQKLSAgICAgICAgd3JhcHBlci0+bG9nQmxlbmQoYSwgYiwg
ZHN0LCBwcm9ncmVzcyk7CisgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGZyb20sIHRvLCBkZXN0
aW5hdGlvbiwgcHJvZ3Jlc3MpOwogI2VuZGlmCiAgICAgfQogfQogCi1ib29sIENTU1Byb3BlcnR5
QW5pbWF0aW9uOjppc1Byb3BlcnR5QW5pbWF0YWJsZShDU1NQcm9wZXJ0eUlEIHByb3ApCitib29s
IENTU1Byb3BlcnR5QW5pbWF0aW9uOjppc1Byb3BlcnR5QW5pbWF0YWJsZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5KQogewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6
OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICByZXR1cm4gQ1NTUHJv
cGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHko
cHJvcGVydHkpOwogfQogCi1ib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlBy
b3BlcnR5SXNBY2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEIHByb3ApCitib29sIENTU1Byb3BlcnR5
QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5KQogewotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIg
PSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQ
cm9wZXJ0eShwcm9wKTsKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVy
ID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9y
UHJvcGVydHkocHJvcGVydHkpOwogICAgIHJldHVybiB3cmFwcGVyID8gd3JhcHBlci0+YW5pbWF0
aW9uSXNBY2NlbGVyYXRlZCgpIDogZmFsc2U7CiB9CiAKQEAgLTIyODAsMTkgKzIyODcsMTkgQEAg
SGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0YWJsZVNo
b3J0aGFuZHNBZmZlY3RpbmdQcm9wZXIKICAgICByZXR1cm4gZm91bmRQcm9wZXJ0aWVzOwogfQog
Ci1ib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwoQ1NTUHJvcGVydHlJ
RCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCitib29s
IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQogewotICAg
IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1h
dGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAg
ICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmlt
YXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcGVydHkp
OwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlci0+ZXF1YWxzKGEsIGIp
OwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpjYW5Q
cm9wZXJ0eUJlSW50ZXJwb2xhdGVkKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQorYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6
Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBS
ZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKQogewotICAgIEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBw
ZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFw
cGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcGVydHkpOwogICAgIGlm
ICh3cmFwcGVyKQotICAgICAgICByZXR1cm4gd3JhcHBlci0+Y2FuSW50ZXJwb2xhdGUoYSwgYik7
CisgICAgICAgIHJldHVybiB3cmFwcGVyLT5jYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCg==
</data>
<flag name="review"
          id="442407"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="442411"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>