<?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>106264</bug_id>
          
          <creation_ts>2013-01-07 15:29:00 -0800</creation_ts>
          <short_desc>Remove Windows files from WebKit2</short_desc>
          <delta_ts>2013-01-08 22:56:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>noam</cc>
    
    <cc>ossy</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>sam</cc>
    
    <cc>tmpsantos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>801721</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-01-07 15:29:00 -0800</bug_when>
    <thetext>Remove Windows files from WebKit2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801727</commentid>
    <comment_count>1</comment_count>
      <attachid>181576</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-01-07 15:30:42 -0800</bug_when>
    <thetext>Created attachment 181576
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801728</commentid>
    <comment_count>2</comment_count>
      <attachid>181576</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-07 15:31:18 -0800</bug_when>
    <thetext>Comment on attachment 181576
Patch

r is me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801734</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-01-07 15:37:24 -0800</bug_when>
    <thetext>Committed r139003: &lt;http://trac.webkit.org/changeset/139003&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802128</commentid>
    <comment_count>4</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-01-08 01:21:05 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Committed r139003: &lt;http://trac.webkit.org/changeset/139003&gt;

and Qt-Windows buildfix landed in https://trac.webkit.org/changeset/139041 ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802154</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-01-08 02:10:56 -0800</bug_when>
    <thetext>I would have been nice to see an announcement or discussion about this!

In the Qt port we are using and shipping Qt 5.0 with WebKit2 on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802380</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-08 10:54:45 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I would have been nice to see an announcement or discussion about this!
&gt; 
&gt; In the Qt port we are using and shipping Qt 5.0 with WebKit2 on Windows.
(In reply to comment #5)
&gt; I would have been nice to see an announcement or discussion about this!
&gt; 
&gt; In the Qt port we are using and shipping Qt 5.0 with WebKit2 on Windows.

We don&apos;t plan on support WebKit2 for Windows in general, so if you have Windows specific functionality, you should probably make it Qt specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802570</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-01-08 13:25:31 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; I would have been nice to see an announcement or discussion about this!
&gt; &gt; 
&gt; &gt; In the Qt port we are using and shipping Qt 5.0 with WebKit2 on Windows.
&gt; (In reply to comment #5)
&gt; &gt; I would have been nice to see an announcement or discussion about this!
&gt; &gt; 
&gt; &gt; In the Qt port we are using and shipping Qt 5.0 with WebKit2 on Windows.
&gt; 
&gt; We don&apos;t plan on support WebKit2 for Windows in general, so if you have Windows specific functionality, you should probably make it Qt specific.

Would you be okay if we re-added the Windows specific files we need to keep the Qt port of WebKit2 running on Windows and maintain them?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803040</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-01-08 22:43:23 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Would you be okay if we re-added the Windows specific files we need to keep the Qt port of WebKit2 running on Windows and maintain them?

I exactly  did it, simple readded these files - https://trac.webkit.org/changeset/139041.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803051</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-01-08 22:56:56 -0800</bug_when>
    <thetext>Thank you, Ossy!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181576</attachid>
            <date>2013-01-07 15:30:42 -0800</date>
            <delta_ts>2013-01-07 15:31:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106264-20130107152904.patch</filename>
            <type>text/plain</type>
            <size>446568</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4OTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzFhZDNjZDQ3NDI0NjY5
MjcwMDA2NmZmNzhjYmY2MGM0MjQ5ODk5Mi4uZmVmMGNhMjY1ZDRmNWEwY2VlYzk5NWIwMDFjMjJh
MDdhZDQzZmRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDEzLTAxLTA3ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdpbmRv
d3MgZmlsZXMgZnJvbSBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDYyNjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvd2luL0JpbmFyeVNlbWFwaG9yZVdpbi5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy93aW4vQ29ubmVjdGlvbldp
bi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogUGxhdGZvcm0vd2luL01vZHVsZVdpbi5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogUGxhdGZvcm0vd2luL1NoYXJlZE1lbW9yeVdpbi5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogU2hhcmVkL0FQSS9jL3dpbi9XS0Jhc2VXaW4uaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBTaGFyZWQvQVBJL2Mvd2luL1dLQ2VydGlmaWNhdGVJbmZvV2luLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTaGFyZWQvQVBJL2Mvd2luL1dLQ2VydGlmaWNhdGVJbmZvV2luLmg6IFJlbW92ZWQu
CisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvd2luL05ldHNjYXBlUGx1Z2luTW9k
dWxlV2luLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvY2cvd2luL1NoYXJlYWJsZUJp
dG1hcENHV2luLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvd2luL0NvYWxlc2NlZFdp
bmRvd0dlb21ldHJpZXNVcGRhdGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvd2lu
L0NvYWxlc2NlZFdpbmRvd0dlb21ldHJpZXNVcGRhdGVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
U2hhcmVkL3dpbi9Db21tYW5kTGluZVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVk
L3dpbi9MYXllclRyZWVDb250ZXh0V2luLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQv
d2luL05hdGl2ZVdlYktleWJvYXJkRXZlbnRXaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNo
YXJlZC93aW4vTmF0aXZlV2ViTW91c2VFdmVudFdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
U2hhcmVkL3dpbi9OYXRpdmVXZWJXaGVlbEV2ZW50V2luLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBTaGFyZWQvd2luL1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTaGFyZWQvd2luL1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmg6IFJlbW92ZWQuCisgICAg
ICAgICogU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBXaW4uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIFNoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogU2hhcmVkL3dpbi9XZWJFdmVudEZhY3RvcnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFy
ZWQvd2luL1dlYktpdEJ1bmRsZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL3dpbi9X
ZWJLaXRCdW5kbGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvd2luL1dlYlVSTFJlcXVl
c3RXaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC93aW4vV2ViVVJMUmVzcG9uc2VX
aW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC93aW4vV2luZG93R2VvbWV0cnkuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC93aW4vV2luZG93R2VvbWV0cnkuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mvd2luL1dLQVBJQ2FzdFdpbi5oOiBSZW1vdmVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tDb250ZXh0UHJpdmF0ZVdpbi5oOiBS
ZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tDb250ZXh0V2luLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mvd2luL1dLVmlldy5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXcuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mvd2luL1dLVmlld1ByaXZhdGUuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tWaWV3UHJpdmF0ZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci93aW4vUHJvY2Vzc0xhdW5jaGVyV2luLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy93aW4vUGx1Z2luSW5mb1N0b3Jl
V2luLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZVdp
bi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJDb250ZXh0TWVudVByb3h5
V2luLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYkNvbnRleHRNZW51
UHJveHlXaW4uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYkNvbnRleHRX
aW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViRnVsbFNjcmVlbk1h
bmFnZXJQcm94eVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJJ
bnNwZWN0b3JQcm94eVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9X
ZWJQYWdlUHJveHlXaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2Vi
UG9wdXBNZW51UHJveHlXaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4v
V2ViUG9wdXBNZW51UHJveHlXaW4uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2lu
L1dlYlByb2Nlc3NQcm94eVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dp
bi9XZWJVbmRvQ2xpZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dl
YlVuZG9DbGllbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOiBSZW1vdmVk
LgorICAgICAgICAqIFdlYlByb2Nlc3MvRG93bmxvYWRzL2NmL3dpbi9Eb3dubG9hZENGV2luLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL3dp
bi9XS0J1bmRsZVByaXZhdGVXaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2Mvd2luL1dLQnVuZGxlUHJpdmF0ZVdpbi5oOiBSZW1vdmVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvd2luL0luamVjdGVkQnVuZGxlV2lu
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvd2lu
L05ldHNjYXBlUGx1Z2luV2luLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L3dpbi9XZWJDb250ZXh0TWVudUNsaWVudFdpbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViRHJhZ0NsaWVudFdpbi5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2Vi
RHJhZ1NvdXJjZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC93aW4vV2ViRHJhZ1NvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvd2luL1dlYkVycm9yc1dpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvd2luL1dlYlBvcHVwTWVudVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL3dpbi9MYXllclRyZWVIb3N0Q0FXaW4uY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9jYS93aW4vTGF5ZXJUcmVlSG9zdENB
V2luLmg6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL3dpbi9XS0NB
Q0ZWaWV3V2luZG93LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Y2Evd2luL1dLQ0FDRlZpZXdXaW5kb3cuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2Uvd2luL0RyYXdpbmdBcmVhSW1wbFdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9MYXllclRyZWVIb3N0V2luLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYkluc3BlY3Rvcldpbi5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzTWFpbldpbi5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHA6IFJlbW92
ZWQuCisKIDIwMTMtMDEtMDcgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBBZGQgd2luZG93LmludGVybmFscy5ub25GYXN0U2Nyb2xsYWJsZVJlY3Rz
IGZvciB0ZXN0aW5nIHNjcm9sbGFibGUgYXJlYXMgaW4gZmFzdC9zbG93IHBhdGhzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3dpbi9CaW5hcnlTZW1hcGhvcmVX
aW4uY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy93aW4vQmluYXJ5U2VtYXBo
b3JlV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIyNmE5YWU4ZjMwOWY5
OTJiMWI2OTdkMWJkM2Y0MmZiZTUzNzgyNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3dpbi9CaW5h
cnlTZW1hcGhvcmVXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaW5hcnlTZW1hcGhvcmUuaCIK
LQotbmFtZXNwYWNlIENvcmVJUEMgewotCi1CaW5hcnlTZW1hcGhvcmU6OkJpbmFyeVNlbWFwaG9y
ZSgpCi0gICAgOiBtX2V2ZW50KDo6Q3JlYXRlRXZlbnRXKDAsIEZBTFNFLCBGQUxTRSwgMCkpCi17
Ci19Ci0KLUJpbmFyeVNlbWFwaG9yZTo6fkJpbmFyeVNlbWFwaG9yZSgpCi17Ci0gICAgOjpDbG9z
ZUhhbmRsZShtX2V2ZW50KTsKLX0KLQotdm9pZCBCaW5hcnlTZW1hcGhvcmU6OnNpZ25hbCgpCi17
Ci0gICAgOjpTZXRFdmVudChtX2V2ZW50KTsKLX0KLQotYm9vbCBCaW5hcnlTZW1hcGhvcmU6Ondh
aXQoZG91YmxlIGFic29sdXRlVGltZSkKLXsKLSAgICBEV09SRCBpbnRlcnZhbCA9IGFic29sdXRl
VGltZVRvV2FpdFRpbWVvdXRJbnRlcnZhbChhYnNvbHV0ZVRpbWUpOwotICAgIGlmICghaW50ZXJ2
YWwpIHsKLSAgICAgICAgLy8gQ29uc2lkZXIgdGhlIHdhaXQgdG8gaGF2ZSB0aW1lZCBvdXQsIGV2
ZW4gaWYgdGhlIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gc2lnbmFsZWQsIHRvCi0gICAgICAgIC8v
IG1hdGNoIHRoZSBXVEY6OlRocmVhZENvbmRpdGlvbiBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIERXT1JEIHJlc3VsdCA9IDo6V2FpdEZvclNpbmds
ZU9iamVjdEV4KG1fZXZlbnQsIGludGVydmFsLCBGQUxTRSk7Ci0gICAgc3dpdGNoIChyZXN1bHQp
IHsKLSAgICBjYXNlIFdBSVRfT0JKRUNUXzA6Ci0gICAgICAgIC8vIFRoZSBldmVudCB3YXMgc2ln
bmFsZWQuCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBXQUlUX1RJTUVPVVQ6Ci0g
ICAgICAgIC8vIFRoZSB3YWl0IHRpbWVkIG91dC4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgY2FzZSBXQUlUX0ZBSUxFRDoKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmYWxzZSwg
Ijo6V2FpdEZvclNpbmdsZU9iamVjdEV4IGZhaWxlZCB3aXRoIGVycm9yICVsdSIsIDo6R2V0TGFz
dEVycm9yKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShmYWxzZSwgIjo6V2FpdEZvclNpbmdsZU9iamVjdEV4IHJldHVy
bmVkIHVuZXhwZWN0ZWQgcmVzdWx0ICVsdSIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIENvcmVJUEMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvd2luL0Nvbm5lY3Rpb25XaW4uY3BwIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy93aW4vQ29ubmVjdGlvbldpbi5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlY2ZjMTdjMGE4OTdkMDU4ODI0ZTY5OWUzYjFhYmEyM2Qx
ZjFmYjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy93aW4vQ29ubmVjdGlvbldpbi5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0KLSNpbmNsdWRlICJCaW5hcnlTZW1hcGhvcmUu
aCIKLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwu
aD4KLSNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0gCi1uYW1lc3BhY2UgQ29yZUlQQyB7
Ci0KLS8vIEZJWE1FOiBSZW5hbWUgdGhpcyBvciB1c2UgYSBkaWZmZXJlbnQgY29uc3RhbnQgb24g
d2luZG93cy4KLXN0YXRpYyBjb25zdCBzaXplX3QgaW5saW5lTWVzc2FnZU1heFNpemUgPSA0MDk2
OwotCi1ib29sIENvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckFuZENsaWVudElkZW50aWZpZXJzKEhB
TkRMRSYgc2VydmVySWRlbnRpZmllciwgSEFORExFJiBjbGllbnRJZGVudGlmaWVyKQotewotICAg
IFN0cmluZyBwaXBlTmFtZTsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHVuc2lnbmVk
IHVuaXF1ZUlEID0gcmFuZG9tTnVtYmVyKCkgKiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCk7Ci0gICAgICAgIHBpcGVOYW1lID0gU3RyaW5nOjpmb3JtYXQoIlxcXFwuXFxwaXBl
XFxjb20uYXBwbGUuV2ViS2l0LiV4IiwgdW5pcXVlSUQpOwotCi0gICAgICAgIHNlcnZlcklkZW50
aWZpZXIgPSA6OkNyZWF0ZU5hbWVkUGlwZShwaXBlTmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UElQRV9BQ0NFU1NfRFVQTEVYIHwgRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0UgfCBGSUxF
X0ZMQUdfT1ZFUkxBUFBFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBJUEVfVFlQRV9NRVNTQUdFIHwgUElQRV9SRUFETU9ERV9NRVNTQUdFLCAxLCBpbmxp
bmVNZXNzYWdlTWF4U2l6ZSwgaW5saW5lTWVzc2FnZU1heFNpemUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKLSAgICAgICAgaWYgKCFzZXJ2ZXJJ
ZGVudGlmaWVyICYmIDo6R2V0TGFzdEVycm9yKCkgPT0gRVJST1JfUElQRV9CVVNZKSB7Ci0gICAg
ICAgICAgICAvLyBUaGVyZSB3YXMgYWxyZWFkeSBhIHBpcGUgd2l0aCB0aGlzIG5hbWUsIHRyeSBh
Z2Fpbi4KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgaWYgKCFzZXJ2ZXJJZGVudGlmaWVyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBjbGllbnRJZGVudGlmaWVyID0gOjpDcmVhdGVGaWxlVyhwaXBlTmFtZS5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRF
LCAwLCAwLCBPUEVOX0VYSVNUSU5HLCBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCwgMCk7Ci0gICAgaWYg
KCFjbGllbnRJZGVudGlmaWVyKSB7Ci0gICAgICAgIDo6Q2xvc2VIYW5kbGUoc2VydmVySWRlbnRp
Zmllcik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBEV09SRCBtb2RlID0g
UElQRV9SRUFETU9ERV9NRVNTQUdFOwotICAgIGlmICghOjpTZXROYW1lZFBpcGVIYW5kbGVTdGF0
ZShjbGllbnRJZGVudGlmaWVyLCAmbW9kZSwgMCwgMCkpIHsKLSAgICAgICAgOjpDbG9zZUhhbmRs
ZShzZXJ2ZXJJZGVudGlmaWVyKTsKLSAgICAgICAgOjpDbG9zZUhhbmRsZShjbGllbnRJZGVudGlm
aWVyKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50
aWZpZXIpCi17Ci0gICAgbWVtc2V0KCZtX3JlYWRTdGF0ZSwgMCwgc2l6ZW9mKG1fcmVhZFN0YXRl
KSk7Ci0gICAgbV9yZWFkU3RhdGUuaEV2ZW50ID0gOjpDcmVhdGVFdmVudFcoMCwgRkFMU0UsIEZB
TFNFLCAwKTsKLQotICAgIG1lbXNldCgmbV93cml0ZVN0YXRlLCAwLCBzaXplb2YobV93cml0ZVN0
YXRlKSk7Ci0gICAgbV93cml0ZVN0YXRlLmhFdmVudCA9IDo6Q3JlYXRlRXZlbnRXKDAsIEZBTFNF
LCBGQUxTRSwgMCk7Ci0KLSAgICBtX2Nvbm5lY3Rpb25QaXBlID0gaWRlbnRpZmllcjsKLX0KLQot
dm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIGlmIChtX2Nvbm5l
Y3Rpb25QaXBlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2lzQ29ubmVjdGVkID0gZmFsc2U7Ci0KLSAgICBtX2Nvbm5lY3Rpb25RdWV1ZS51bnJlZ2lz
dGVyQW5kQ2xvc2VIYW5kbGUobV9yZWFkU3RhdGUuaEV2ZW50KTsKLSAgICBtX3JlYWRTdGF0ZS5o
RXZlbnQgPSAwOwotCi0gICAgbV9jb25uZWN0aW9uUXVldWUudW5yZWdpc3RlckFuZENsb3NlSGFu
ZGxlKG1fd3JpdGVTdGF0ZS5oRXZlbnQpOwotICAgIG1fd3JpdGVTdGF0ZS5oRXZlbnQgPSAwOwot
Ci0gICAgOjpDbG9zZUhhbmRsZShtX2Nvbm5lY3Rpb25QaXBlKTsKLSAgICBtX2Nvbm5lY3Rpb25Q
aXBlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6cmVhZEV2
ZW50SGFuZGxlcigpCi17Ci0gICAgaWYgKG1fY29ubmVjdGlvblBpcGUgPT0gSU5WQUxJRF9IQU5E
TEVfVkFMVUUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
IC8vIENoZWNrIGlmIHdlIGdvdCBzb21lIGRhdGEuCi0gICAgICAgIERXT1JEIG51bWJlck9mQnl0
ZXNSZWFkID0gMDsKLSAgICAgICAgaWYgKCE6OkdldE92ZXJsYXBwZWRSZXN1bHQobV9jb25uZWN0
aW9uUGlwZSwgJm1fcmVhZFN0YXRlLCAmbnVtYmVyT2ZCeXRlc1JlYWQsIEZBTFNFKSkgewotICAg
ICAgICAgICAgRFdPUkQgZXJyb3IgPSA6OkdldExhc3RFcnJvcigpOwotCi0gICAgICAgICAgICBz
d2l0Y2ggKGVycm9yKSB7Ci0gICAgICAgICAgICBjYXNlIEVSUk9SX0JST0tFTl9QSVBFOgotICAg
ICAgICAgICAgICAgIGNvbm5lY3Rpb25EaWRDbG9zZSgpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGNhc2UgRVJST1JfTU9SRV9EQVRBOiB7Ci0gICAgICAgICAgICAgICAg
Ly8gUmVhZCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZSBvdXQgb2YgdGhlIHBpcGUuCi0KLSAgICAg
ICAgICAgICAgICBEV09SRCBieXRlc1RvUmVhZCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCE6
OlBlZWtOYW1lZFBpcGUobV9jb25uZWN0aW9uUGlwZSwgMCwgMCwgMCwgMCwgJmJ5dGVzVG9SZWFk
KSkgewotICAgICAgICAgICAgICAgICAgICBEV09SRCBlcnJvciA9IDo6R2V0TGFzdEVycm9yKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciA9PSBFUlJPUl9CUk9LRU5fUElQRSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbkRpZENsb3NlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyA6OkdldE92ZXJsYXBw
ZWRSZXN1bHQgdG9sZCB1cyB0aGVyZSdzIG1vcmUgZGF0YS4gOjpQZWVrTmFtZWRQaXBlIHNob3Vs
ZG4ndAotICAgICAgICAgICAgICAgIC8vIGNvbnRyYWRpY3QgaXQhCi0gICAgICAgICAgICAgICAg
QVNTRVJUKGJ5dGVzVG9SZWFkKTsKLSAgICAgICAgICAgICAgICBpZiAoIWJ5dGVzVG9SZWFkKQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIG1fcmVhZEJ1ZmZl
ci5ncm93KG1fcmVhZEJ1ZmZlci5zaXplKCkgKyBieXRlc1RvUmVhZCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCE6OlJlYWRGaWxlKG1fY29ubmVjdGlvblBpcGUsIG1fcmVhZEJ1ZmZlci5kYXRhKCkg
KyBudW1iZXJPZkJ5dGVzUmVhZCwgYnl0ZXNUb1JlYWQsIDAsICZtX3JlYWRTdGF0ZSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgRFdPUkQgZXJyb3IgPSA6OkdldExhc3RFcnJvcigpOwotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBmaWd1cmUgb3V0
IHdoeSB3ZSdyZSBnZXR0aW5nIHRoaXMgZXJyb3IuCi0gICAgICAgICAgICBjYXNlIEVSUk9SX0lP
X0lOQ09NUExFVEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV9yZWFkQnVmZmVyLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgLy8gV2UgaGF2ZSBhIG1lc3NhZ2UsIGxldCdzIGRpc3BhdGNoIGl0LgotCi0gICAg
ICAgICAgICAvLyBUaGUgbWVzc2FnZUlEIGlzIGVuY29kZWQgYXQgdGhlIGVuZCBvZiB0aGUgYnVm
ZmVyLgotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGFzc3VtZSBoZXJlIHRoYXQgdGhlIG1l
c3NhZ2UgaXMgdGhlIHNhbWUgc2l6ZSBhcyBtX3JlYWRCdWZmZXIuIFdlIGNhbgotICAgICAgICAg
ICAgLy8gYXNzdW1lIHRoaXMgYmVjYXVzZSB3ZSBhbHdheXMgc2l6ZSBtX3JlYWRCdWZmZXIgdG8g
ZXhhY3RseSBtYXRjaCB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZSwKLSAgICAgICAgICAgIC8vIGVp
dGhlciB3aGVuIHJlY2VpdmluZyBFUlJPUl9NT1JFX0RBVEEgZnJvbSA6OkdldE92ZXJsYXBwZWRS
ZXN1bHQgYWJvdmUgb3Igd2hlbgotICAgICAgICAgICAgLy8gOjpQZWVrTmFtZWRQaXBlIHRlbGxz
IHVzIHRoZSBzaXplIGJlbG93LiBXZSBuZXZlciBzZXQgbV9yZWFkQnVmZmVyIHRvIGEgc2l6ZSBs
YXJnZXIKLSAgICAgICAgICAgIC8vIHRoYW4gdGhlIG1lc3NhZ2UuCi0gICAgICAgICAgICBBU1NF
UlQobV9yZWFkQnVmZmVyLnNpemUoKSA+PSBzaXplb2YoTWVzc2FnZUlEKSk7Ci0gICAgICAgICAg
ICBzaXplX3QgcmVhbEJ1ZmZlclNpemUgPSBtX3JlYWRCdWZmZXIuc2l6ZSgpIC0gc2l6ZW9mKE1l
c3NhZ2VJRCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIG1lc3NhZ2VJRCA9ICpyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkKj4obV9yZWFkQnVmZmVyLmRhdGEoKSArIHJlYWxCdWZmZXJTaXplKTsK
LQotICAgICAgICAgICAgT3duUHRyPE1lc3NhZ2VEZWNvZGVyPiBkZWNvZGVyID0gTWVzc2FnZURl
Y29kZXI6OmNyZWF0ZShEYXRhUmVmZXJlbmNlKG1fcmVhZEJ1ZmZlci5kYXRhKCksIHJlYWxCdWZm
ZXJTaXplKSk7Ci0gICAgICAgICAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKE1lc3NhZ2VJRDo6
ZnJvbUludChtZXNzYWdlSUQpLCBkZWNvZGVyLnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBGaW5kIG91dCB0aGUgc2l6ZSBvZiB0aGUgbmV4dCBtZXNzYWdlIGluIHRoZSBwaXBl
IChpZiB0aGVyZSBpcyBvbmUpIHNvIHRoYXQgd2UgY2FuIHJlYWQKLSAgICAgICAgLy8gaXQgYWxs
IGluIG9uZSBvcGVyYXRpb24uIChUaGlzIGlzIGp1c3QgYW4gb3B0aW1pemF0aW9uIHRvIGF2b2lk
IGFuIGV4dHJhIHBhc3MgdGhyb3VnaCB0aGUKLSAgICAgICAgLy8gbG9vcCAoaWYgd2UgY2hvc2Ug
YSBidWZmZXIgc2l6ZSB0aGF0IHdhcyB0b28gc21hbGwpIG9yIGFsbG9jYXRpbmcgZXh0cmEgbWVt
b3J5IChpZiB3ZQotICAgICAgICAvLyBjaG9zZSBhIGJ1ZmZlciBzaXplIHRoYXQgd2FzIHRvbyBs
YXJnZSkuKQotICAgICAgICBEV09SRCBieXRlc1RvUmVhZCA9IDA7Ci0gICAgICAgIGlmICghOjpQ
ZWVrTmFtZWRQaXBlKG1fY29ubmVjdGlvblBpcGUsIDAsIDAsIDAsIDAsICZieXRlc1RvUmVhZCkp
IHsKLSAgICAgICAgICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAg
ICAgIGlmIChlcnJvciA9PSBFUlJPUl9CUk9LRU5fUElQRSkgewotICAgICAgICAgICAgICAgIGNv
bm5lY3Rpb25EaWRDbG9zZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAg
IGlmICghYnl0ZXNUb1JlYWQpIHsKLSAgICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gbWVzc2FnZSB3
YWl0aW5nIGluIHRoZSBwaXBlLiBTY2hlZHVsZSBhIHJlYWQgb2YgdGhlIGZpcnN0IGJ5dGUgb2Yg
dGhlCi0gICAgICAgICAgICAvLyBuZXh0IG1lc3NhZ2UuIFdlJ2xsIGZpbmQgb3V0IHRoZSBtZXNz
YWdlJ3MgYWN0dWFsIHNpemUgd2hlbiBpdCBhcnJpdmVzLiAoSWYgd2UKLSAgICAgICAgICAgIC8v
IGNoYW5nZSB0aGlzIHRvIHJlYWQgbW9yZSB0aGFuIGEgc2luZ2xlIGJ5dGUgZm9yIHBlcmZvcm1h
bmNlIHJlYXNvbnMsIHdlJ2xsIGhhdmUgdG8KLSAgICAgICAgICAgIC8vIGRlYWwgd2l0aCBtX3Jl
YWRCdWZmZXIgcG90ZW50aWFsbHkgYmVpbmcgbGFyZ2VyIHRoYW4gdGhlIG1lc3NhZ2Ugd2UgcmVh
ZCBhZnRlcgotICAgICAgICAgICAgLy8gY2FsbGluZyA6OkdldE92ZXJsYXBwZWRSZXN1bHQgYWJv
dmUuKQotICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAg
bV9yZWFkQnVmZmVyLnJlc2l6ZShieXRlc1RvUmVhZCk7Ci0KLSAgICAgICAgLy8gRWl0aGVyIHJl
YWQgdGhlIG5leHQgYXZhaWxhYmxlIG1lc3NhZ2UgKHdoaWNoIHNob3VsZCBvY2N1ciBzeW5jaHJv
bm91c2x5KSwgb3Igc3RhcnQgYW4KLSAgICAgICAgLy8gYXN5bmNocm9ub3VzIHJlYWQgb2YgdGhl
IG5leHQgbWVzc2FnZSB0aGF0IGJlY29tZXMgYXZhaWxhYmxlLgotICAgICAgICBCT09MIHJlc3Vs
dCA9IDo6UmVhZEZpbGUobV9jb25uZWN0aW9uUGlwZSwgbV9yZWFkQnVmZmVyLmRhdGEoKSwgbV9y
ZWFkQnVmZmVyLnNpemUoKSwgMCwgJm1fcmVhZFN0YXRlKTsKLSAgICAgICAgaWYgKHJlc3VsdCkg
ewotICAgICAgICAgICAgLy8gVGhlcmUgd2FzIGFscmVhZHkgYSBtZXNzYWdlIHdhaXRpbmcgaW4g
dGhlIHBpcGUsIGFuZCB3ZSByZWFkIGl0IHN5bmNocm9ub3VzbHkuCi0gICAgICAgICAgICAvLyBQ
cm9jZXNzIGl0LgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBE
V09SRCBlcnJvciA9IDo6R2V0TGFzdEVycm9yKCk7Ci0KLSAgICAgICAgaWYgKGVycm9yID09IEVS
Uk9SX0lPX1BFTkRJTkcpIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBubyBtZXNzYWdlcyBp
biB0aGUgcGlwZSBjdXJyZW50bHkuIHJlYWRFdmVudEhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgYWdh
aW4gb25jZSB0aGVyZSBpcyBhIG1lc3NhZ2UuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZXJyb3IgPT0gRVJST1JfTU9SRV9EQVRBKSB7Ci0gICAgICAgICAg
ICAvLyBFaXRoZXIgYSBtZXNzYWdlIGlzIGF2YWlsYWJsZSB3aGVuIHdlIGRpZG4ndCB0aGluayBv
bmUgd2FzLCBvciB0aGUgbWVzc2FnZSBpcyBsYXJnZXIKLSAgICAgICAgICAgIC8vIHRoYW4gOjpQ
ZWVrTmFtZWRQaXBlIHRvbGQgdXMuIFRoZSBmb3JtZXIgc2VlbXMgZmFyIG1vcmUgbGlrZWx5LiBQ
cm9iYWJseSB0aGUgbWVzc2FnZQotICAgICAgICAgICAgLy8gYmVjYW1lIGF2YWlsYWJsZSBiZXR3
ZWVuIG91ciBjYWxscyB0byA6OlBlZWtOYW1lZFBpcGUgYW5kIDo6UmVhZEZpbGUgYWJvdmUuIEdv
IGJhY2sKLSAgICAgICAgICAgIC8vIHRvIHRoZSB0b3Agb2YgdGhlIGxvb3AgdG8gdXNlIDo6R2V0
T3ZlcmxhcHBlZFJlc3VsdCB0byByZXRyaWV2ZSB0aGUgYXZhaWxhYmxlIGRhdGEuCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRv
IGhhbmRsZSBvdGhlciBlcnJvcnMgaGVyZS4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgfQotfQotCi12b2lkIENvbm5lY3Rpb246OndyaXRlRXZlbnRIYW5kbGVyKCkKLXsKLSAg
ICBpZiAobV9jb25uZWN0aW9uUGlwZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRFdPUkQgbnVtYmVyT2ZCeXRlc1dyaXR0ZW4gPSAwOwotICAgIGlmICgh
OjpHZXRPdmVybGFwcGVkUmVzdWx0KG1fY29ubmVjdGlvblBpcGUsICZtX3dyaXRlU3RhdGUsICZu
dW1iZXJPZkJ5dGVzV3JpdHRlbiwgRkFMU0UpKSB7Ci0gICAgICAgIERXT1JEIGVycm9yID0gOjpH
ZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgaWYgKGVycm9yID09IEVSUk9SX0lPX0lOQ09NUExFVEUp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZmlndXJlIG91dCB3aHkgd2UncmUg
Z2V0dGluZyB0aGlzIGVycm9yLgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChlcnJvciA9PSBFUlJPUl9CUk9LRU5fUElQRSkgewotICAgICAgICAgICAgY29ubmVj
dGlvbkRpZENsb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgLy8gVGhlIHBlbmRpbmcgd3JpdGUg
aGFzIGZpbmlzaGVkLCBzbyB3ZSBhcmUgbm93IGRvbmUgd2l0aCBpdHMgZW5jb2Rlci4gQ2xlYXJp
bmcgdGhpcyBtZW1iZXIKLSAgICAvLyB3aWxsIGFsbG93IHVzIHRvIHNlbmQgbWVzc2FnZXMgYWdh
aW4uCi0gICAgbV9wZW5kaW5nV3JpdGVFbmNvZGVyID0gbnVsbHB0cjsKLQotICAgIC8vIE5vdyB0
aGF0IHRoZSBwZW5kaW5nIHdyaXRlIGhhcyBmaW5pc2hlZCwgd2UgY2FuIHRyeSB0byBzZW5kIGEg
bmV3IG1lc3NhZ2UuCi0gICAgc2VuZE91dGdvaW5nTWVzc2FnZXMoKTsKLX0KLQotYm9vbCBDb25u
ZWN0aW9uOjpvcGVuKCkKLXsKLSAgICAvLyBXZSBjb25uZWN0ZWQgdGhlIHR3byBlbmRzIG9mIHRo
ZSBwaXBlIGluIGNyZWF0ZVNlcnZlckFuZENsaWVudElkZW50aWZpZXJzLgotICAgIG1faXNDb25u
ZWN0ZWQgPSB0cnVlOwotCi0gICAgLy8gU3RhcnQgbGlzdGVuaW5nIGZvciByZWFkIGFuZCB3cml0
ZSBzdGF0ZSBldmVudHMuCi0gICAgbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJIYW5kbGUobV9y
ZWFkU3RhdGUuaEV2ZW50LCBiaW5kKCZDb25uZWN0aW9uOjpyZWFkRXZlbnRIYW5kbGVyLCB0aGlz
KSk7Ci0gICAgbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJIYW5kbGUobV93cml0ZVN0YXRlLmhF
dmVudCwgYmluZCgmQ29ubmVjdGlvbjo6d3JpdGVFdmVudEhhbmRsZXIsIHRoaXMpKTsKLQotICAg
IC8vIFNjaGVkdWxlIGEgcmVhZC4KLSAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5kaXNwYXRjaChiaW5k
KCZDb25uZWN0aW9uOjpyZWFkRXZlbnRIYW5kbGVyLCB0aGlzKSk7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2Vz
KCkgY29uc3QKLXsKLSAgICAvLyBXZSBvbmx5IGFsbG93IHNlbmRpbmcgb25lIGFzeW5jaHJvbm91
cyBtZXNzYWdlIGF0IGEgdGltZS4gSWYgd2Ugd2FudGVkIHRvIHNlbmQgbW9yZSB0aGFuIG9uZQot
ICAgIC8vIGF0IG9uY2UsIHdlJ2QgaGF2ZSB0byB1c2UgbXVsdGlwbGUgT1ZFUkxBUFBFRCBzdHJ1
Y3R1cmVzIGFuZCBob2xkIG9udG8gbXVsdGlwbGUgcGVuZGluZwotICAgIC8vIE1lc3NhZ2VFbmNv
ZGVycyAob25lIG9mIGVhY2ggZm9yIGVhY2ggc2ltdWx0YW5lb3VzIGFzeW5jaHJvbm91cyBtZXNz
YWdlKS4KLSAgICByZXR1cm4gIW1fcGVuZGluZ1dyaXRlRW5jb2RlcjsKLX0KLQotYm9vbCBDb25u
ZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBhc3NPd25Q
dHI8TWVzc2FnZUVuY29kZXI+IGVuY29kZXIpCi17Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdXcml0
ZUVuY29kZXIpOwotCi0gICAgLy8gSnVzdCBiYWlsIGlmIHRoZSBoYW5kbGUgaGFzIGJlZW4gY2xv
c2VkLgotICAgIGlmIChtX2Nvbm5lY3Rpb25QaXBlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSBwdXQgdGhlIG1lc3NhZ2UgSUQgbGFz
dC4KLSAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1lc3NhZ2VJRC50
b0ludCgpKSk7Ci0KLSAgICAvLyBXcml0ZSB0aGUgb3V0Z29pbmcgbWVzc2FnZS4KLQotICAgIGlm
ICg6OldyaXRlRmlsZShtX2Nvbm5lY3Rpb25QaXBlLCBlbmNvZGVyLT5idWZmZXIoKSwgZW5jb2Rl
ci0+YnVmZmVyU2l6ZSgpLCAwLCAmbV93cml0ZVN0YXRlKSkgewotICAgICAgICAvLyBXZSBzdWNj
ZXNzZnVsbHkgc2VudCB0aGlzIG1lc3NhZ2UuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKLQotICAgIGlmIChlcnJvciA9
PSBFUlJPUl9OT19EQVRBKSB7Ci0gICAgICAgIC8vIFRoZSBwaXBlIGlzIGJlaW5nIGNsb3NlZC4K
LSAgICAgICAgY29ubmVjdGlvbkRpZENsb3NlKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAoZXJyb3IgIT0gRVJST1JfSU9fUEVORElORykgewotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFRoZSBtZXNzYWdlIHdpbGwgYmUgc2VudCBzb29uLiBIb2xkIG9udG8gdGhlIGVuY29kZXIgc28g
dGhhdCBpdCB3b24ndCBiZSBkZXN0cm95ZWQKLSAgICAvLyBiZWZvcmUgdGhlIHdyaXRlIGNvbXBs
ZXRlcy4KLSAgICBtX3BlbmRpbmdXcml0ZUVuY29kZXIgPSBlbmNvZGVyOwotCi0gICAgLy8gV2Ug
Y2FuIG9ubHkgc2VuZCBvbmUgYXN5bmNocm9ub3VzIG1lc3NhZ2UgYXQgYSB0aW1lIChzZWUgY29t
bWVudCBpbiBwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKS4KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTZW50TWVzc2FnZXNVbnRpbChjb25z
dCBWZWN0b3I8SFdORD4mIHdpbmRvd3MsIENvcmVJUEM6OkJpbmFyeVNlbWFwaG9yZSYgc2VtYXBo
b3JlLCBkb3VibGUgYWJzb2x1dGVUaW1lKQotewotICAgIGlmICh3aW5kb3dzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIHNlbWFwaG9yZS53YWl0KGFic29sdXRlVGltZSk7Ci0KLSAgICBIQU5E
TEUgaGFuZGxlID0gc2VtYXBob3JlLmV2ZW50KCk7Ci0gICAgRFdPUkQgaGFuZGxlQ291bnQgPSAx
OwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgRFdPUkQgaW50ZXJ2YWwgPSBhYnNvbHV0
ZVRpbWVUb1dhaXRUaW1lb3V0SW50ZXJ2YWwoYWJzb2x1dGVUaW1lKTsKLSAgICAgICAgaWYgKCFp
bnRlcnZhbCkgewotICAgICAgICAgICAgLy8gQ29uc2lkZXIgdGhlIHdhaXQgdG8gaGF2ZSB0aW1l
ZCBvdXQsIGV2ZW4gaWYgdGhlIHNlbWFwaG9yZSBpcyBjdXJyZW50bHkgc2lnbmFsZWQuCi0gICAg
ICAgICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIFdURjo6VGhyZWFkQ29uZGl0aW9uIGltcGxlbWVu
dGF0aW9uIG9mIEJpbmFyeVNlbWFwaG9yZTo6d2FpdC4KLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIERXT1JEIHJlc3VsdCA9IDo6TXNnV2FpdEZvck11bHRp
cGxlT2JqZWN0c0V4KGhhbmRsZUNvdW50LCAmaGFuZGxlLCBpbnRlcnZhbCwgUVNfU0VORE1FU1NB
R0UsIDApOwotICAgICAgICBpZiAocmVzdWx0ID09IFdBSVRfT0JKRUNUXzApIHsKLSAgICAgICAg
ICAgIC8vIFRoZSBzZW1hcGhvcmUgd2FzIHNpZ25hbGVkLgotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBXQUlUX1RJTUVPVVQpIHsKLSAg
ICAgICAgICAgIC8vIGFic29sdXRlVGltZSB3YXMgcmVhY2hlZC4KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzdWx0ID09IFdBSVRfT0JKRUNUXzAg
KyBoYW5kbGVDb3VudCkgewotICAgICAgICAgICAgLy8gT25lIG9yIG1vcmUgc2VudCBtZXNzYWdl
cyBhcmUgYXZhaWxhYmxlLiBQcm9jZXNzIHNlbnQgbWVzc2FnZXMgZm9yIGFsbCB0aGUgd2luZG93
cwotICAgICAgICAgICAgLy8gd2Ugd2VyZSBnaXZlbiwgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIHdh
eSBvZiBrbm93aW5nIHdoaWNoIHdpbmRvdyBoYXMgYXZhaWxhYmxlIHNlbnQKLSAgICAgICAgICAg
IC8vIG1lc3NhZ2VzLgotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3aW5kb3dz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgTVNHIG1lc3NhZ2U7Ci0gICAgICAgICAg
ICAgICAgOjpQZWVrTWVzc2FnZVcoJm1lc3NhZ2UsIHdpbmRvd3NbaV0sIDAsIDAsIFBNX05PUkVN
T1ZFIHwgUE1fUVNfU0VORE1FU1NBR0UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShyZXN1bHQgIT0g
V0FJVF9GQUlMRUQsICI6Ok1zZ1dhaXRGb3JNdWx0aXBsZU9iamVjdHNFeCBmYWlsZWQgd2l0aCBl
cnJvciAlbHUiLCA6OkdldExhc3RFcnJvcigpKTsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShmYWxzZSwgIjo6TXNnV2FpdEZvck11bHRpcGxlT2JqZWN0c0V4IHJldHVybmVkIHVuZXhwZWN0
ZWQgcmVzdWx0ICVsdSIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIENvcmVJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL3dpbi9Nb2R1bGVXaW4uY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL01v
ZHVsZVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZDhlZjYyYzcyNjE2
Mjc4ZTdiMTZkMzI4N2VhYmZlYWZkYjk2NmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL01vZHVsZVdpbi5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJNb2R1bGUuaCIKLQotI2luY2x1ZGUgPFdlYkNvcmUvRGVs
YXlMb2FkZWRNb2R1bGVzRW51bWVyYXRvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW1wb3J0ZWRG
dW5jdGlvbnNFbnVtZXJhdG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbXBvcnRlZE1vZHVsZXNF
bnVtZXJhdG9yLmg+Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWJvb2wgTW9kdWxlOjpsb2FkKCkKLXsKLSAg
ICBBU1NFUlQoITo6UGF0aElzUmVsYXRpdmVXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpKSk7Ci0gICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5RXhXKG1fcGF0aC5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCBMT0FEX1dJVEhfQUxURVJFRF9TRUFSQ0hf
UEFUSCk7Ci0gICAgcmV0dXJuIG1fbW9kdWxlOwotfQotCi12b2lkIE1vZHVsZTo6dW5sb2FkKCkK
LXsKLSAgICBpZiAoIW1fbW9kdWxlKQotICAgICAgICByZXR1cm47Ci0gICAgOjpGcmVlTGlicmFy
eShtX21vZHVsZSk7Ci0gICAgbV9tb2R1bGUgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBtZW1jcHlU
b1JlYWRPbmx5TWVtb3J5KHZvaWQqIGRlc3RpbmF0aW9uLCBjb25zdCB2b2lkKiBzb3VyY2UsIHNp
emVfdCBzaXplKQotewotICAgIERXT1JEIG9yaWdpbmFsUHJvdGVjdGlvbjsKLSAgICBpZiAoITo6
VmlydHVhbFByb3RlY3QoZGVzdGluYXRpb24sIHNpemUsIFBBR0VfUkVBRFdSSVRFLCAmb3JpZ2lu
YWxQcm90ZWN0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVtY3B5KGRlc3RpbmF0aW9u
LCBzb3VyY2UsIHNpemUpOwotCi0gICAgOjpWaXJ0dWFsUHJvdGVjdChkZXN0aW5hdGlvbiwgc2l6
ZSwgb3JpZ2luYWxQcm90ZWN0aW9uLCAmb3JpZ2luYWxQcm90ZWN0aW9uKTsKLX0KLQotc3RhdGlj
IGNvbnN0IHZvaWQqIGNvbnN0KiBmaW5kRnVuY3Rpb25Qb2ludGVyQWRkcmVzcyhJbXBvcnRlZE1v
ZHVsZXNFbnVtZXJhdG9yQmFzZSYgbW9kdWxlcywgY29uc3QgY2hhciogaW1wb3J0RExMTmFtZSwg
Y29uc3QgY2hhciogaW1wb3J0RnVuY3Rpb25OYW1lKQotewotICAgIGZvciAoOyAhbW9kdWxlcy5p
c0F0RW5kKCk7IG1vZHVsZXMubmV4dCgpKSB7Ci0gICAgICAgIGlmIChfc3RyaWNtcChpbXBvcnRE
TExOYW1lLCBtb2R1bGVzLmN1cnJlbnRNb2R1bGVOYW1lKCkpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgZm9yIChJbXBvcnRlZEZ1bmN0aW9uc0VudW1lcmF0b3IgZnVuY3Rpb25z
ID0gbW9kdWxlcy5mdW5jdGlvbnNFbnVtZXJhdG9yKCk7ICFmdW5jdGlvbnMuaXNBdEVuZCgpOyBm
dW5jdGlvbnMubmV4dCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjdXJyZW50RnVuY3Rp
b25OYW1lID0gZnVuY3Rpb25zLmN1cnJlbnRGdW5jdGlvbk5hbWUoKTsKLSAgICAgICAgICAgIGlm
ICghY3VycmVudEZ1bmN0aW9uTmFtZSB8fCBzdHJjbXAoaW1wb3J0RnVuY3Rpb25OYW1lLCBjdXJy
ZW50RnVuY3Rpb25OYW1lKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9ucy5hZGRyZXNzT2ZDdXJyZW50RnVuY3Rpb25Qb2ludGVyKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIGNvbnN0IHZvaWQqIGNvbnN0KiBmaW5kRnVuY3Rpb25Qb2ludGVyQWRkcmVzcyhITU9E
VUxFIG1vZHVsZSwgY29uc3QgY2hhciogaW1wb3J0RExMTmFtZSwgY29uc3QgY2hhciogaW1wb3J0
RnVuY3Rpb25OYW1lKQotewotICAgIFBFSW1hZ2UgaW1hZ2UobW9kdWxlKTsKLQotICAgIEltcG9y
dGVkTW9kdWxlc0VudW1lcmF0b3IgaW1wb3J0ZWRNb2R1bGVzKGltYWdlKTsKLSAgICBpZiAoY29u
c3Qgdm9pZCogY29uc3QqIGZ1bmN0aW9uUG9pbnRlckFkZHJlc3MgPSBmaW5kRnVuY3Rpb25Qb2lu
dGVyQWRkcmVzcyhpbXBvcnRlZE1vZHVsZXMsIGltcG9ydERMTE5hbWUsIGltcG9ydEZ1bmN0aW9u
TmFtZSkpCi0gICAgICAgIHJldHVybiBmdW5jdGlvblBvaW50ZXJBZGRyZXNzOwotCi0gICAgRGVs
YXlMb2FkZWRNb2R1bGVzRW51bWVyYXRvciBkZWxheUxvYWRlZE1vZHVsZXMoaW1hZ2UpOwotICAg
IHJldHVybiBmaW5kRnVuY3Rpb25Qb2ludGVyQWRkcmVzcyhkZWxheUxvYWRlZE1vZHVsZXMsIGlt
cG9ydERMTE5hbWUsIGltcG9ydEZ1bmN0aW9uTmFtZSk7Ci19Ci0KLXZvaWQgTW9kdWxlOjppbnN0
YWxsSUFUSG9vayhjb25zdCBjaGFyKiBpbXBvcnRETExOYW1lLCBjb25zdCBjaGFyKiBpbXBvcnRG
dW5jdGlvbk5hbWUsIGNvbnN0IHZvaWQqIGhvb2tGdW5jdGlvbikKLXsKLSAgICBpZiAoIW1fbW9k
dWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgSW1wb3J0IEFkZHJlc3MgVGFibGUg
KElBVCkgY29udGFpbnMgb25lIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIGVhY2ggZnVuY3Rpb24gaW1w
b3J0ZWQgYnkKLSAgICAvLyB0aGlzIG1vZHVsZS4gV2hlbiBjb2RlIGluIHRoaXMgbW9kdWxlIGNh
bGxzIHRoYXQgZnVuY3Rpb24sIHRoZSBmdW5jdGlvbiBwb2ludGVyIGZyb20gdGhlIElBVAotICAg
IC8vIGlzIHVzZWQuIFdlIGZpbmQgdGhhdCBmdW5jdGlvbiBwb2ludGVyIGFuZCBvdmVyd3JpdGUg
aXQgd2l0aCBob29rRnVuY3Rpb24gc28gdGhhdAotICAgIC8vIGhvb2tGdW5jdGlvbiB3aWxsIGJl
IGNhbGxlZCBpbnN0ZWFkLgotCi0gICAgY29uc3Qgdm9pZCogY29uc3QqIGZ1bmN0aW9uUG9pbnRl
ckFkZHJlc3MgPSBmaW5kRnVuY3Rpb25Qb2ludGVyQWRkcmVzcyhtX21vZHVsZSwgaW1wb3J0RExM
TmFtZSwgaW1wb3J0RnVuY3Rpb25OYW1lKTsKLSAgICBpZiAoIWZ1bmN0aW9uUG9pbnRlckFkZHJl
c3MgfHwgKmZ1bmN0aW9uUG9pbnRlckFkZHJlc3MgPT0gaG9va0Z1bmN0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtZW1jcHlUb1JlYWRPbmx5TWVtb3J5KGNvbnN0X2Nhc3Q8Y29uc3Qgdm9p
ZCoqPihmdW5jdGlvblBvaW50ZXJBZGRyZXNzKSwgJmhvb2tGdW5jdGlvbiwgc2l6ZW9mKGhvb2tG
dW5jdGlvbikpOwotfQotCi12b2lkKiBNb2R1bGU6OnBsYXRmb3JtRnVuY3Rpb25Qb2ludGVyKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fbW9kdWxlKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiA6OkdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCBm
dW5jdGlvbk5hbWUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9TaGFyZWRNZW1vcnlXaW4uY3BwIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vd2luL1NoYXJlZE1lbW9yeVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY1OWRiYTUwNGM2MGJkMzBlOWU4OGJkOTYzNmUyZGEwYzI2NTYyMzEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vd2luL1NoYXJlZE1lbW9yeVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
NDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
aGFyZWRNZW1vcnkuaCIKLQotI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgotI2luY2x1ZGUg
IkFyZ3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLVNoYXJlZE1lbW9yeTo6SGFuZGxlOjpIYW5kbGUoKQotICAgIDogbV9oYW5k
bGUoMCkKLSAgICAsIG1fc2l6ZSgwKQotewotfQotCi1TaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhh
bmRsZSgpCi17Ci0gICAgaWYgKCFtX2hhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpD
bG9zZUhhbmRsZShtX2hhbmRsZSk7Ci19Ci0KLWJvb2wgU2hhcmVkTWVtb3J5OjpIYW5kbGU6Omlz
TnVsbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX2hhbmRsZTsKLX0KLQotdm9pZCBTaGFyZWRN
ZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKLXsKLSAgICBlbmNvZGVyLmVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9zaXpl
KSk7Ci0KLSAgICAvLyBIYW5kIG9mZiBvd25lcnNoaXAgb2Ygb3VyIEhBTkRMRSB0byB0aGUgcmVj
ZWl2aW5nIHByb2Nlc3MuIEl0IHdpbGwgY2xvc2UgaXQgZm9yIHVzLgotICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgcmVjZWl2aW5nIHByb2Nlc3MgY3Jhc2hlcyBiZWZvcmUgaXQgcmVjZWl2ZXMgdGhlIG1l
bW9yeSwgdGhlIG1lbW9yeSB3aWxsIGJlCi0gICAgLy8gbGVha2VkLiBTZWUgPGh0dHA6Ly93ZWJr
aXQub3JnL2IvNDc1MDI+LgotICAgIGVuY29kZXIuZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDY0X3Q+KG1faGFuZGxlKSk7Ci0gICAgbV9oYW5kbGUgPSAwOwotCi0gICAgLy8gU2VuZCBhbG9u
ZyBvdXIgUElEIHNvIHRoYXQgdGhlIHJlY2VpdmluZyBwcm9jZXNzIGNhbiBkdXBsaWNhdGUgdGhl
IEhBTkRMRSBmb3IgaXRzIG93biB1c2UuCi0gICAgZW5jb2Rlci5lbmNvZGUoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KDo6R2V0Q3VycmVudFByb2Nlc3NJZCgpKSk7Ci19Ci0KLXN0YXRpYyBib29sIGdl
dER1cGxpY2F0ZWRIYW5kbGUoSEFORExFIHNvdXJjZUhhbmRsZSwgRFdPUkQgc291cmNlUElELCBI
QU5ETEUmIGR1cGxpY2F0ZWRIYW5kbGUpCi17Ci0gICAgZHVwbGljYXRlZEhhbmRsZSA9IDA7Ci0g
ICAgaWYgKCFzb3VyY2VIYW5kbGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgSEFORExF
IHNvdXJjZVByb2Nlc3MgPSA6Ok9wZW5Qcm9jZXNzKFBST0NFU1NfRFVQX0hBTkRMRSwgRkFMU0Us
IHNvdXJjZVBJRCk7Ci0gICAgaWYgKCFzb3VyY2VQcm9jZXNzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBDb3B5IHRoZSBoYW5kbGUgaW50byBvdXIgcHJvY2VzcyBhbmQgY2xvc2Ug
dGhlIGhhbmRsZSB0aGF0IHRoZSBzZW5kaW5nIHByb2Nlc3MgY3JlYXRlZCBmb3IgdXMuCi0gICAg
Qk9PTCBzdWNjZXNzID0gOjpEdXBsaWNhdGVIYW5kbGUoc291cmNlUHJvY2Vzcywgc291cmNlSGFu
ZGxlLCA6OkdldEN1cnJlbnRQcm9jZXNzKCksICZkdXBsaWNhdGVkSGFuZGxlLCAwLCBGQUxTRSwg
RFVQTElDQVRFX1NBTUVfQUNDRVNTIHwgRFVQTElDQVRFX0NMT1NFX1NPVVJDRSk7Ci0gICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShzdWNjZXNzLCAiOjpEdXBsaWNhdGVIYW5kbGUgZmFpbGVkIHdpdGgg
ZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci0KLSAgICA6OkNsb3NlSGFuZGxlKHNvdXJj
ZVByb2Nlc3MpOwotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgU2hhcmVkTWVtb3J5
OjpIYW5kbGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEhhbmRs
ZSYgaGFuZGxlKQotewotICAgIEFTU0VSVF9BUkcoaGFuZGxlLCAhaGFuZGxlLm1faGFuZGxlKTsK
LSAgICBBU1NFUlRfQVJHKGhhbmRsZSwgIWhhbmRsZS5tX3NpemUpOwotCi0gICAgdWludDY0X3Qg
c2l6ZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQ2NChzaXplKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgdWludDY0X3Qgc291cmNlSGFuZGxlOwotICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlVUludDY0KHNvdXJjZUhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHVpbnQzMl90IHNvdXJjZVBJRDsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQzMihz
b3VyY2VQSUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBIQU5ETEUgZHVwbGljYXRl
ZEhhbmRsZTsKLSAgICBpZiAoIWdldER1cGxpY2F0ZWRIYW5kbGUocmVpbnRlcnByZXRfY2FzdDxI
QU5ETEU+KHNvdXJjZUhhbmRsZSksIHNvdXJjZVBJRCwgZHVwbGljYXRlZEhhbmRsZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGhhbmRsZS5tX2hhbmRsZSA9IGR1cGxpY2F0ZWRIYW5k
bGU7Ci0gICAgaGFuZGxlLm1fc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBh
c3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzaXplX3Qgc2l6ZSkK
LXsKLSAgICBIQU5ETEUgaGFuZGxlID0gOjpDcmVhdGVGaWxlTWFwcGluZ1coSU5WQUxJRF9IQU5E
TEVfVkFMVUUsIDAsIFBBR0VfUkVBRFdSSVRFLCAwLCBzaXplLCAwKTsKLSAgICBpZiAoIWhhbmRs
ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB2b2lkKiBiYXNlQWRkcmVzcyA9IDo6TWFwVmll
d09mRmlsZShoYW5kbGUsIEZJTEVfTUFQX0FMTF9BQ0NFU1MsIDAsIDAsIHNpemUpOwotICAgIGlm
ICghYmFzZUFkZHJlc3MpIHsKLSAgICAgICAgOjpDbG9zZUhhbmRsZShoYW5kbGUpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtZW1vcnkgPSBh
ZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KTsKLSAgICBtZW1vcnktPm1fc2l6ZSA9IHNpemU7Ci0g
ICAgbWVtb3J5LT5tX2RhdGEgPSBiYXNlQWRkcmVzczsKLSAgICBtZW1vcnktPm1faGFuZGxlID0g
aGFuZGxlOwotCi0gICAgcmV0dXJuIG1lbW9yeS5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBEV09S
RCBhY2Nlc3NSaWdodHMoU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uIHByb3RlY3Rpb24pCi17Ci0g
ICAgc3dpdGNoIChwcm90ZWN0aW9uKSB7Ci0gICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5
OgotICAgICAgICByZXR1cm4gRklMRV9NQVBfUkVBRDsKLSAgICBjYXNlIFNoYXJlZE1lbW9yeTo6
UmVhZFdyaXRlOgotICAgICAgICByZXR1cm4gRklMRV9NQVBfUkVBRCB8IEZJTEVfTUFQX1dSSVRF
OwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1QYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3QgSGFu
ZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKLXsKLSAgICBSZWZQdHI8U2hhcmVk
TWVtb3J5PiBtZW1vcnkgPSBhZG9wdChoYW5kbGUubV9oYW5kbGUsIGhhbmRsZS5tX3NpemUsIHBy
b3RlY3Rpb24pOwotICAgIGlmICghbWVtb3J5KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8v
IFRoZSBTaGFyZWRNZW1vcnkgb2JqZWN0IG5vdyBvd25zIHRoZSBIQU5ETEUuCi0gICAgaGFuZGxl
Lm1faGFuZGxlID0gMDsKLQotICAgIHJldHVybiBtZW1vcnkucmVsZWFzZSgpOwotfQotCi1QYXNz
UmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjphZG9wdChIQU5ETEUgaGFuZGxlLCBz
aXplX3Qgc2l6ZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQotewotICAgIGlmICghaGFuZGxlKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIERXT1JEIGRlc2lyZWRBY2Nlc3MgPSBhY2Nlc3NSaWdo
dHMocHJvdGVjdGlvbik7Ci0KLSAgICB2b2lkKiBiYXNlQWRkcmVzcyA9IDo6TWFwVmlld09mRmls
ZShoYW5kbGUsIGRlc2lyZWRBY2Nlc3MsIDAsIDAsIHNpemUpOwotICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoYmFzZUFkZHJlc3MsICI6Ok1hcFZpZXdPZkZpbGUgZmFpbGVkIHdpdGggZXJyb3IgJWx1
IiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci0gICAgaWYgKCFiYXNlQWRkcmVzcykKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtZW1vcnkgPSBhZG9wdFJlZihuZXcg
U2hhcmVkTWVtb3J5KTsKLSAgICBtZW1vcnktPm1fc2l6ZSA9IHNpemU7Ci0gICAgbWVtb3J5LT5t
X2RhdGEgPSBiYXNlQWRkcmVzczsKLSAgICBtZW1vcnktPm1faGFuZGxlID0gaGFuZGxlOwotCi0g
ICAgcmV0dXJuIG1lbW9yeS5yZWxlYXNlKCk7Ci19Ci0KLVNoYXJlZE1lbW9yeTo6flNoYXJlZE1l
bW9yeSgpCi17Ci0gICAgQVNTRVJUKG1fZGF0YSk7Ci0gICAgQVNTRVJUKG1faGFuZGxlKTsKLQot
ICAgIDo6VW5tYXBWaWV3T2ZGaWxlKG1fZGF0YSk7Ci0gICAgOjpDbG9zZUhhbmRsZShtX2hhbmRs
ZSk7Ci19Ci0gICAgCi1ib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKEhhbmRsZSYgaGFu
ZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCi17Ci0gICAgQVNTRVJUX0FSRyhoYW5kbGUsICFo
YW5kbGUubV9oYW5kbGUpOwotICAgIEFTU0VSVF9BUkcoaGFuZGxlLCAhaGFuZGxlLm1fc2l6ZSk7
Ci0KLSAgICBIQU5ETEUgcHJvY2Vzc0hhbmRsZSA9IDo6R2V0Q3VycmVudFByb2Nlc3MoKTsKLQot
ICAgIEhBTkRMRSBkdXBsaWNhdGVkSGFuZGxlOwotICAgIGlmICghOjpEdXBsaWNhdGVIYW5kbGUo
cHJvY2Vzc0hhbmRsZSwgbV9oYW5kbGUsIHByb2Nlc3NIYW5kbGUsICZkdXBsaWNhdGVkSGFuZGxl
LCBhY2Nlc3NSaWdodHMocHJvdGVjdGlvbiksIEZBTFNFLCAwKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaGFuZGxlLm1faGFuZGxlID0gZHVwbGljYXRlZEhhbmRsZTsKLSAgICBoYW5k
bGUubV9zaXplID0gbV9zaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1QYXNzUmVmUHRyPFNo
YXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGVDb3B5T25Xcml0ZUNvcHkoc2l6ZV90IHNp
emUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX0FSRyhzaXplLCBzaXplIDw9IHRoaXMtPnNpemUoKSk7
Ci0KLSAgICBIQU5ETEUgZHVwbGljYXRlZEhhbmRsZTsKLSAgICBCT09MIHJlc3VsdCA9IDo6RHVw
bGljYXRlSGFuZGxlKDo6R2V0Q3VycmVudFByb2Nlc3MoKSwgbV9oYW5kbGUsIDo6R2V0Q3VycmVu
dFByb2Nlc3MoKSwgJmR1cGxpY2F0ZWRIYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9B
Q0NFU1MpOwotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocmVzdWx0LCAiOjpEdXBsaWNhdGVIYW5k
bGUgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci0gICAgaWYgKCFy
ZXN1bHQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdm9pZCogbmV3TWFwcGluZyA9IDo6TWFw
Vmlld09mRmlsZShkdXBsaWNhdGVkSGFuZGxlLCBGSUxFX01BUF9DT1BZLCAwLCAwLCBzaXplKTsK
LSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5ld01hcHBpbmcsICI6Ok1hcFZpZXdPZkZpbGUgZmFp
bGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci0gICAgaWYgKCFuZXdNYXBw
aW5nKSB7Ci0gICAgICAgIDo6Q2xvc2VIYW5kbGUoZHVwbGljYXRlZEhhbmRsZSk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1lbW9yeSA9IGFk
b3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkpOwotICAgIG1lbW9yeS0+bV9zaXplID0gc2l6ZTsKLSAg
ICBtZW1vcnktPm1fZGF0YSA9IG5ld01hcHBpbmc7Ci0gICAgbWVtb3J5LT5tX2hhbmRsZSA9IGR1
cGxpY2F0ZWRIYW5kbGU7Ci0KLSAgICByZXR1cm4gbWVtb3J5LnJlbGVhc2UoKTsKLX0KLQotdW5z
aWduZWQgU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCi17Ci0gICAgc3RhdGljIHVuc2ln
bmVkIHBhZ2VTaXplID0gMDsKLQotICAgIGlmICghcGFnZVNpemUpIHsKLSAgICAgICAgU1lTVEVN
X0lORk8gc3lzdGVtSW5mbzsKLSAgICAgICAgOjpHZXRTeXN0ZW1JbmZvKCZzeXN0ZW1JbmZvKTsK
LSAgICAgICAgcGFnZVNpemUgPSBzeXN0ZW1JbmZvLmR3UGFnZVNpemU7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHBhZ2VTaXplOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4uY3BwIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGMzYTQ3NmNlNWE3YjJmMjgyOTkxOGFhZGRhYTIyNDUzOWQzNjA1MWYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVl
dWUuaCIKLQotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotaW5saW5lIFdvcmtRdWV1ZTo6
V29ya0l0ZW1XaW46OldvcmtJdGVtV2luKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
LCBXb3JrUXVldWUqIHF1ZXVlKQotICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAsIG1f
cXVldWUocXVldWUpCi17Ci19Ci0KLVBhc3NSZWZQdHI8V29ya1F1ZXVlOjpXb3JrSXRlbVdpbj4g
V29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6Y3JlYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29y
a0l0ZW1XaW4oZnVuY3Rpb24sIHF1ZXVlKSk7Ci19Ci0KLVdvcmtRdWV1ZTo6V29ya0l0ZW1XaW46
On5Xb3JrSXRlbVdpbigpCi17Ci19Ci0KLWlubGluZSBXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVt
OjpIYW5kbGVXb3JrSXRlbShIQU5ETEUgaGFuZGxlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBm
dW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKLSAgICA6IFdvcmtJdGVtV2luKGZ1bmN0aW9uLCBx
dWV1ZSkKLSAgICAsIG1faGFuZGxlKGhhbmRsZSkKLSAgICAsIG1fd2FpdEhhbmRsZSgwKQotewot
ICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUpOwotfQotCi1QYXNzUmVmUHRyPFdvcmtRdWV1
ZTo6SGFuZGxlV29ya0l0ZW0+IFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OmNyZWF0ZUJ5QWRv
cHRpbmdIYW5kbGUoSEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rp
b24sIFdvcmtRdWV1ZSogcXVldWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIYW5kbGVX
b3JrSXRlbShoYW5kbGUsIGZ1bmN0aW9uLCBxdWV1ZSkpOwotfQotCi1Xb3JrUXVldWU6OkhhbmRs
ZVdvcmtJdGVtOjp+SGFuZGxlV29ya0l0ZW0oKQotewotICAgIDo6Q2xvc2VIYW5kbGUobV9oYW5k
bGUpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6aGFuZGxlQ2FsbGJhY2sodm9pZCogY29udGV4dCwg
Qk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKQotewotICAgIEFTU0VSVF9BUkcoY29udGV4dCwgY29u
dGV4dCk7Ci0gICAgQVNTRVJUX0FSRyh0aW1lck9yV2FpdEZpcmVkLCAhdGltZXJPcldhaXRGaXJl
ZCk7Ci0KLSAgICBXb3JrSXRlbVdpbiogaXRlbSA9IHN0YXRpY19jYXN0PFdvcmtJdGVtV2luKj4o
Y29udGV4dCk7Ci0gICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGl0ZW0tPnF1ZXVlKCk7Ci0KLSAgICB7
Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2socXVldWUtPm1fd29ya0l0ZW1RdWV1ZUxvY2spOwot
ICAgICAgICBxdWV1ZS0+bV93b3JrSXRlbVF1ZXVlLmFwcGVuZChpdGVtKTsKLQotICAgICAgICAv
LyBJZiBubyBvdGhlciB0aHJlYWQgaXMgcGVyZm9ybWluZyB3b3JrLCB3ZSBjYW4gZG8gaXQgb24g
dGhpcyB0aHJlYWQuCi0gICAgICAgIGlmICghcXVldWUtPnRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFk
KCkpIHsKLSAgICAgICAgICAgIC8vIFNvbWUgb3RoZXIgdGhyZWFkIGlzIHBlcmZvcm1pbmcgd29y
ay4gU2luY2Ugd2UgaG9sZCB0aGUgcXVldWUgbG9jaywgd2UgY2FuIGJlIHN1cmUKLSAgICAgICAg
ICAgIC8vIHRoYXQgdGhlIHdvcmsgdGhyZWFkIGlzIG5vdCBleGl0aW5nIGR1ZSB0byBhbiBlbXB0
eSBxdWV1ZSBhbmQgd2lsbCBwcm9jZXNzIHRoZSB3b3JrCi0gICAgICAgICAgICAvLyBpdGVtIHdl
IGp1c3QgYWRkZWQgdG8gaXQuIElmIHdlIHdlcmVuJ3QgaG9sZGluZyB0aGUgbG9jayB3ZSdkIGhh
dmUgdG8gc2lnbmFsCi0gICAgICAgICAgICAvLyBtX3BlcmZvcm1Xb3JrRXZlbnQgdG8gbWFrZSBz
dXJlIHRoZSB3b3JrIGl0ZW0gZ290IHBpY2tlZCB1cC4KLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHF1ZXVlLT5wZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtU
aHJlYWQoKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVySGFuZGxlKEhBTkRMRSBoYW5k
bGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIFJlZlB0cjxIYW5k
bGVXb3JrSXRlbT4gaGFuZGxlSXRlbSA9IEhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5n
SGFuZGxlKGhhbmRsZSwgZnVuY3Rpb24sIHRoaXMpOwotCi0gICAgewotICAgICAgICBNdXRleExv
Y2tlciBsb2NrKG1faGFuZGxlc0xvY2spOwotICAgICAgICBBU1NFUlRfQVJHKGhhbmRsZSwgIW1f
aGFuZGxlcy5jb250YWlucyhoYW5kbGUpKTsKLSAgICAgICAgbV9oYW5kbGVzLnNldChoYW5kbGUs
IGhhbmRsZUl0ZW0pOwotICAgIH0KLQotICAgIEhBTkRMRSB3YWl0SGFuZGxlOwotICAgIGlmICgh
OjpSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3QoJndhaXRIYW5kbGUsIGhhbmRsZSwgaGFuZGxl
Q2FsbGJhY2ssIGhhbmRsZUl0ZW0uZ2V0KCksIElORklOSVRFLCBXVF9FWEVDVVRFREVGQVVMVCkp
IHsKLSAgICAgICAgRFdPUkQgZXJyb3IgPSA6OkdldExhc3RFcnJvcigpOwotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgaGFuZGxlSXRlbS0+c2V0V2FpdEhhbmRsZSh3
YWl0SGFuZGxlKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJBbmRDbG9zZUhhbmRs
ZShIQU5ETEUgaGFuZGxlKQotewotICAgIFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4gaXRlbTsKLSAg
ICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2hhbmRsZXNMb2NrKTsKLSAgICAgICAg
QVNTRVJUX0FSRyhoYW5kbGUsIG1faGFuZGxlcy5jb250YWlucyhoYW5kbGUpKTsKLSAgICAgICAg
aXRlbSA9IG1faGFuZGxlcy50YWtlKGhhbmRsZSk7Ci0gICAgfQotCi0gICAgdW5yZWdpc3Rlcldh
aXRBbmREZXN0cm95SXRlbVNvb24oaXRlbS5yZWxlYXNlKCkpOwotfQotCi1EV09SRCBXb3JrUXVl
dWU6OndvcmtUaHJlYWRDYWxsYmFjayh2b2lkKiBjb250ZXh0KQotewotICAgIEFTU0VSVF9BUkco
Y29udGV4dCwgY29udGV4dCk7Ci0KLSAgICBXb3JrUXVldWUqIHF1ZXVlID0gc3RhdGljX2Nhc3Q8
V29ya1F1ZXVlKj4oY29udGV4dCk7Ci0KLSAgICBpZiAoIXF1ZXVlLT50cnlSZWdpc3RlckFzV29y
a1RocmVhZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHF1ZXVlLT5wZXJmb3JtV29ya09u
UmVnaXN0ZXJlZFdvcmtUaHJlYWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXb3JrUXVl
dWU6OnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVkV29ya1RocmVhZCgpCi17Ci0gICAgQVNTRVJUKG1f
aXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCk7Ci0KLSAgICBib29sIGlzVmFsaWQgPSB0cnVlOwotCi0g
ICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7Ci0KLSAgICB3aGlsZSAoaXNWYWxpZCAmJiAh
bV93b3JrSXRlbVF1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBWZWN0b3I8UmVmUHRyPFdvcmtJ
dGVtV2luPiA+IHdvcmtJdGVtUXVldWU7Ci0gICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5zd2FwKHdv
cmtJdGVtUXVldWUpOwotCi0gICAgICAgIC8vIEFsbG93IG1vcmUgd29yayB0byBiZSBzY2hlZHVs
ZWQgd2hpbGUgd2UncmUgbm90IHVzaW5nIHRoZSBxdWV1ZSBkaXJlY3RseS4KLSAgICAgICAgbV93
b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB3b3JrSXRlbVF1ZXVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9pc1ZhbGlkTXV0ZXgpOwotICAgICAgICAgICAgaXNWYWxpZCA9IG1faXNWYWxpZDsK
LSAgICAgICAgICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIHdvcmtJdGVtUXVldWVbaV0tPmZ1bmN0aW9uKCkoKTsKLSAgICAgICAgfQotICAgICAg
ICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKLSAgICB9Ci0KLSAgICAvLyBPbmUgaW52YXJp
YW50IHdlIG1haW50YWluIGlzIHRoYXQgYW55IHdvcmsgc2NoZWR1bGVkIHdoaWxlIGEgd29yayB0
aHJlYWQgaXMgcmVnaXN0ZXJlZCB3aWxsCi0gICAgLy8gYmUgaGFuZGxlZCBieSB0aGF0IHdvcmsg
dGhyZWFkLiBVbnJlZ2lzdGVyIGFzIHRoZSB3b3JrIHRocmVhZCB3aGlsZSB0aGUgcXVldWUgbG9j
ayBpcyBzdGlsbAotICAgIC8vIGhlbGQgc28gdGhhdCBubyB3b3JrIGNhbiBiZSBzY2hlZHVsZWQg
d2hpbGUgd2UncmUgc3RpbGwgcmVnaXN0ZXJlZC4KLSAgICB1bnJlZ2lzdGVyQXNXb3JrVGhyZWFk
KCk7Ci0KLSAgICBtX3dvcmtJdGVtUXVldWVMb2NrLnVubG9jaygpOwotfQotCi12b2lkIFdvcmtR
dWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgbV9pc1dv
cmtUaHJlYWRSZWdpc3RlcmVkID0gMDsKLSAgICBtX3RpbWVyUXVldWUgPSA6OkNyZWF0ZVRpbWVy
UXVldWUoKTsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fdGltZXJRdWV1ZSwgIjo6Q3JlYXRl
VGltZXJRdWV1ZSBmYWlsZWQgd2l0aCBlcnJvciAlbHUiLCA6OkdldExhc3RFcnJvcigpKTsKLX0K
LQotYm9vbCBXb3JrUXVldWU6OnRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCkKLXsKLSAgICBMT05H
IHJlc3VsdCA9IDo6SW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoJm1faXNXb3JrVGhyZWFkUmVn
aXN0ZXJlZCwgMSwgMCk7Ci0gICAgQVNTRVJUKCFyZXN1bHQgfHwgcmVzdWx0ID09IDEpOwotICAg
IHJldHVybiAhcmVzdWx0OwotfQotCi12b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlckFzV29ya1Ro
cmVhZCgpCi17Ci0gICAgTE9ORyByZXN1bHQgPSA6OkludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdl
KCZtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQsIDAsIDEpOwotICAgIEFTU0VSVF9VTlVTRUQocmVz
dWx0LCByZXN1bHQgPT0gMSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRh
dGUoKQotewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBNdXRleExvY2tlciBsb2NrKG1faGFu
ZGxlc0xvY2spOwotICAgIEFTU0VSVChtX2hhbmRsZXMuaXNFbXB0eSgpKTsKLSNlbmRpZgotCi0g
ICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYW55IHRpbWVyLXF1ZXVlIHRpbWVy
cyB0aGF0IGZpcmUgYWZ0ZXIgdGhpcyBwb2ludCBkb24ndCB0cnkgdG8KLSAgICAvLyBhY2Nlc3Mg
dGhpcyBXb3JrUXVldWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNDQ2OTA+LgotICAgIDo6RGVsZXRl
VGltZXJRdWV1ZUV4KG1fdGltZXJRdWV1ZSwgMCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNw
YXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBNdXRleExvY2tl
ciBsb2NrZXIobV93b3JrSXRlbVF1ZXVlTG9jayk7Ci0KLSAgICBtX3dvcmtJdGVtUXVldWUuYXBw
ZW5kKFdvcmtJdGVtV2luOjpjcmVhdGUoZnVuY3Rpb24sIHRoaXMpKTsKLQotICAgIC8vIFNwYXdu
IGEgd29yayB0aHJlYWQgdG8gcGVyZm9ybSB0aGUgd29yayB3ZSBqdXN0IGFkZGVkLiBBcyBhbiBv
cHRpbWl6YXRpb24sIHdlIGF2b2lkCi0gICAgLy8gc3Bhd25pbmcgdGhlIHRocmVhZCBpZiBhIHdv
cmsgdGhyZWFkIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4gVGhpcyBwcmV2ZW50cyBtdWx0aXBsZSB3
b3JrCi0gICAgLy8gdGhyZWFkcyBmcm9tIGJlaW5nIHNwYXduZWQgaW4gbW9zdCBjYXNlcy4gKE5v
dGUgdGhhdCB3aGVuIGEgd29yayB0aHJlYWQgaGFzIGJlZW4gc3Bhd25lZCBidXQKLSAgICAvLyBo
YXNuJ3QgcmVnaXN0ZXJlZCBpdHNlbGYgeWV0LCBtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQgd2ls
bCBiZSBmYWxzZSBhbmQgd2UnbGwgZW5kIHVwCi0gICAgLy8gc3Bhd25pbmcgYSBzZWNvbmQgd29y
ayB0aHJlYWQgaGVyZS4gQnV0IHdvcmsgdGhyZWFkIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpbGwg
ZW5zdXJlIHRoYXQKLSAgICAvLyBvbmx5IG9uZSB0aHJlYWQgYWN0dWFsbHkgZW5kcyB1cCBwZXJm
b3JtaW5nIHdvcmsuKQotICAgIGlmICghbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkKQotICAgICAg
ICA6OlF1ZXVlVXNlcldvcmtJdGVtKHdvcmtUaHJlYWRDYWxsYmFjaywgdGhpcywgV1RfRVhFQ1VU
RURFRkFVTFQpOwotfQotCi1zdHJ1Y3QgVGltZXJDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFRpbWVyQ29udGV4dD4gewotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRpbWVyQ29u
dGV4dD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFRpbWVyQ29udGV4dCk7IH0KLQot
ICAgIFdvcmtRdWV1ZSogcXVldWU7Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbjsKLSAg
ICBNdXRleCB0aW1lck11dGV4OwotICAgIEhBTkRMRSB0aW1lcjsKLQotcHJpdmF0ZToKLSAgICBU
aW1lckNvbnRleHQoKSA6IHF1ZXVlKDApLCB0aW1lcigwKSB7IH0KLX07Ci0KLXZvaWQgV29ya1F1
ZXVlOjp0aW1lckNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJPcldhaXRGaXJl
ZCkKLXsKLSAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOwotICAgIEFTU0VSVF9VTlVT
RUQodGltZXJPcldhaXRGaXJlZCwgdGltZXJPcldhaXRGaXJlZCk7Ci0KLSAgICAvLyBCYWxhbmNl
ZCBieSBsZWFrUmVmIGluIHNjaGVkdWxlV29ya0FmdGVyRGVsYXkuCi0gICAgUmVmUHRyPFRpbWVy
Q29udGV4dD4gdGltZXJDb250ZXh0ID0gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8VGltZXJDb250ZXh0
Kj4oY29udGV4dCkpOwotCi0gICAgdGltZXJDb250ZXh0LT5xdWV1ZS0+ZGlzcGF0Y2godGltZXJD
b250ZXh0LT5mdW5jdGlvbik7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrKHRpbWVyQ29udGV4dC0+
dGltZXJNdXRleCk7Ci0gICAgQVNTRVJUKHRpbWVyQ29udGV4dC0+dGltZXIpOwotICAgIEFTU0VS
VCh0aW1lckNvbnRleHQtPnF1ZXVlLT5tX3RpbWVyUXVldWUpOwotICAgIGlmICghOjpEZWxldGVU
aW1lclF1ZXVlVGltZXIodGltZXJDb250ZXh0LT5xdWV1ZS0+bV90aW1lclF1ZXVlLCB0aW1lckNv
bnRleHQtPnRpbWVyLCAwKSkKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmYWxzZSwgIjo6
RGVsZXRlVGltZXJRdWV1ZVRpbWVyIGZhaWxlZCB3aXRoIGVycm9yICVsdSIsIDo6R2V0TGFzdEVy
cm9yKCkpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCi17Ci0gICAgQVNTRVJUKG1f
dGltZXJRdWV1ZSk7Ci0KLSAgICBSZWZQdHI8VGltZXJDb250ZXh0PiBjb250ZXh0ID0gVGltZXJD
b250ZXh0OjpjcmVhdGUoKTsKLSAgICBjb250ZXh0LT5xdWV1ZSA9IHRoaXM7Ci0gICAgY29udGV4
dC0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKLQotICAgIHsKLSAgICAgICAgLy8gVGhlIHRpbWVyIGNh
bGxiYWNrIGNvdWxkIGZpcmUgYmVmb3JlIDo6Q3JlYXRlVGltZXJRdWV1ZVRpbWVyIGV2ZW4gcmV0
dXJucywgc28gd2UgcHJvdGVjdAotICAgICAgICAvLyBjb250ZXh0LT50aW1lciB3aXRoIGEgbXV0
ZXggdG8gZW5zdXJlIHRoZSB0aW1lciBjYWxsYmFjayBkb2Vzbid0IGFjY2VzcyBpdCBiZWZvcmUg
dGhlCi0gICAgICAgIC8vIHRpbWVyIGhhbmRsZSBoYXMgYmVlbiBzdG9yZWQgaW4gaXQuCi0gICAg
ICAgIE11dGV4TG9ja2VyIGxvY2soY29udGV4dC0+dGltZXJNdXRleCk7Ci0KLSAgICAgICAgLy8g
U2luY2Ugb3VyIHRpbWVyIGNhbGxiYWNrIGlzIHF1aWNrLCB3ZSBjYW4gZXhlY3V0ZSBpbiB0aGUg
dGltZXIgdGhyZWFkIGl0c2VsZiBhbmQgYXZvaWQKLSAgICAgICAgLy8gYW4gZXh0cmEgdGhyZWFk
IHN3aXRjaCBvdmVyIHRvIGEgd29ya2VyIHRocmVhZC4KLSAgICAgICAgaWYgKCE6OkNyZWF0ZVRp
bWVyUXVldWVUaW1lcigmY29udGV4dC0+dGltZXIsIG1fdGltZXJRdWV1ZSwgdGltZXJDYWxsYmFj
aywgY29udGV4dC5nZXQoKSwgZGVsYXkgKiAxMDAwLCAwLCBXVF9FWEVDVVRFSU5USU1FUlRIUkVB
RCkpIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICI6OkNyZWF0ZVRp
bWVyUXVldWVUaW1lciBmYWlsZWQgd2l0aCBlcnJvciAlbHUiLCA6OkdldExhc3RFcnJvcigpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSB0aW1l
ciBjYWxsYmFjayB3aWxsIGhhbmRsZSBkZXN0cm95aW5nIGNvbnRleHQuCi0gICAgY29udGV4dC5y
ZWxlYXNlKCkubGVha1JlZigpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlcldhaXRB
bmREZXN0cm95SXRlbVNvb24oUGFzc1JlZlB0cjxIYW5kbGVXb3JrSXRlbT4gaXRlbSkKLXsKLSAg
ICAvLyBXZSdyZSBnb2luZyB0byBtYWtlIGEgYmxvY2tpbmcgY2FsbCB0byA6OlVucmVnaXN0ZXJX
YWl0RXggYmVmb3JlIGNsb3NpbmcgdGhlIGhhbmRsZS4gKFRoZQotICAgIC8vIGJsb2NraW5nIHZl
cnNpb24gb2YgOjpVbnJlZ2lzdGVyV2FpdEV4IGlzIG11Y2ggc2ltcGxlciB0aGFuIHRoZSBub24t
YmxvY2tpbmcgdmVyc2lvbi4pIElmIHdlCi0gICAgLy8gZG8gdGhpcyBvbiB0aGUgY3VycmVudCB0
aHJlYWQsIHdlJ2xsIGRlYWRsb2NrIGlmIHdlJ3JlIGN1cnJlbnRseSBpbiBhIGNhbGxiYWNrIGZ1
bmN0aW9uIGZvcgotICAgIC8vIHRoZSB3YWl0IHdlJ3JlIHVucmVnaXN0ZXJpbmcuIFNvIGluc3Rl
YWQgd2UgZG8gaXQgYXN5bmNocm9ub3VzbHkgb24gc29tZSBvdGhlciB3b3JrZXIgdGhyZWFkLgot
Ci0gICAgOjpRdWV1ZVVzZXJXb3JrSXRlbSh1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtQ2Fs
bGJhY2ssIGl0ZW0ubGVha1JlZigpLCBXVF9FWEVDVVRFREVGQVVMVCk7Ci19Ci0KLURXT1JEIFdJ
TkFQSSBXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjayh2b2lk
KiBjb250ZXh0KQotewotICAgIEFTU0VSVF9BUkcoY29udGV4dCwgY29udGV4dCk7Ci0gICAgUmVm
UHRyPEhhbmRsZVdvcmtJdGVtPiBpdGVtID0gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8SGFuZGxlV29y
a0l0ZW0qPihjb250ZXh0KSk7Ci0KLSAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHdlJ3JlIG5vdCBp
biBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgd2FpdCB3ZSdyZSB1bnJlZ2lzdGVyaW5nLCB3
ZSBjYW4KLSAgICAvLyBtYWtlIGEgYmxvY2tpbmcgY2FsbCB0byA6OlVucmVnaXN0ZXJXYWl0RXgu
Ci0gICAgaWYgKCE6OlVucmVnaXN0ZXJXYWl0RXgoaXRlbS0+d2FpdEhhbmRsZSgpLCBJTlZBTElE
X0hBTkRMRV9WQUxVRSkpIHsKLSAgICAgICAgRFdPUkQgZXJyb3IgPSA6OkdldExhc3RFcnJvcigp
OwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy93aW4vV0tCYXNlV2lu
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2Mvd2luL1dLQmFzZVdpbi5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGQ0NjA3ZTM2MTUxMTI4ZGNjZDY5YTdiYzNiNDU4M2Ux
YTVlNmZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy93aW4vV0tCYXNlV2luLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXS0Jhc2VXaW5faAotI2RlZmlu
ZSBXS0Jhc2VXaW5faAotCi0jaWZuZGVmIFdLQmFzZV9oCi0jZXJyb3IgIlBsZWFzZSAjaW5jbHVk
ZSBcIldLQmFzZS5oXCIgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZGlyZWN0bHkuIgotI2VuZGlmCi0K
LXR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLVmlldyogV0tWaWV3UmVmOwotdHlwZWRlZiBj
b25zdCBzdHJ1Y3QgT3BhcXVlV0tFZGl0Q29tbWFuZCogV0tFZGl0Q29tbWFuZFJlZjsKLQotI2Vu
ZGlmIC8qIFdLQmFzZVdpbl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
QVBJL2Mvd2luL1dLQ2VydGlmaWNhdGVJbmZvV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9BUEkvYy93aW4vV0tDZXJ0aWZpY2F0ZUluZm9XaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2NzRmOTRlNmQ1M2ZjMzIyYzBjNTY3OTEwZGUwNmMzNGQxZmYyYTA2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvYy93aW4vV0tDZXJ0aWZpY2F0ZUluZm9XaW4uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJXS0NlcnRpZmljYXRlSW5mb1dpbi5oIgotCi0jaW5jbHVkZSAiV0tBUElDYXN0LmgiCi0j
aW5jbHVkZSAiV2ViQ2VydGlmaWNhdGVJbmZvLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
Ci0KLVdLQ2VydGlmaWNhdGVJbmZvUmVmIFdLQ2VydGlmaWNhdGVJbmZvQ3JlYXRlV2l0aENlcnRp
ZmljYXRlKFBDQ0VSVF9DT05URVhUIGNlcnRpZmljYXRlKQotewotICAgIHJldHVybiB0b0FQSShX
ZWJDZXJ0aWZpY2F0ZUluZm86OmNyZWF0ZShQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhjZXJ0aWZp
Y2F0ZSkpLmxlYWtSZWYoKSk7Ci19Ci0KLXNpemVfdCBXS0NlcnRpZmljYXRlSW5mb0dldENlcnRp
ZmljYXRlQ2hhaW5MZW5ndGgoV0tDZXJ0aWZpY2F0ZUluZm9SZWYgY2VydGlmaWNhdGVJbmZvUmVm
KQotewotICAgIHJldHVybiB0b0ltcGwoY2VydGlmaWNhdGVJbmZvUmVmKS0+cGxhdGZvcm1DZXJ0
aWZpY2F0ZUluZm8oKS5jZXJ0aWZpY2F0ZUNoYWluKCkuc2l6ZSgpOwotfQotCi1QQ0NFUlRfQ09O
VEVYVCBXS0NlcnRpZmljYXRlSW5mb0dldENlcnRpZmljYXRlQ29udGV4dEF0SW5kZXgoV0tDZXJ0
aWZpY2F0ZUluZm9SZWYgY2VydGlmaWNhdGVJbmZvUmVmLCBzaXplX3QgaW5kZXgpCi17Ci0gICAg
Y29uc3QgVmVjdG9yPFBDQ0VSVF9DT05URVhUPiYgY2VydGlmaWNhdGVDaGFpbiA9IHRvSW1wbChj
ZXJ0aWZpY2F0ZUluZm9SZWYpLT5wbGF0Zm9ybUNlcnRpZmljYXRlSW5mbygpLmNlcnRpZmljYXRl
Q2hhaW4oKTsKLSAgICBpZiAoaW5kZXggPj0gY2VydGlmaWNhdGVDaGFpbi5zaXplKCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBjZXJ0aWZpY2F0ZUNoYWluW2luZGV4XTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy93aW4vV0tDZXJ0aWZpY2F0ZUlu
Zm9XaW4uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy93aW4vV0tDZXJ0aWZpY2F0ZUlu
Zm9XaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNlZTllNThlNzFmNzcyYmVi
MzRjYTE2YWFhN2E1Y2I0YTAzNzIxYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2Mvd2luL1dLQ2VydGlmaWNh
dGVJbmZvV2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBXS0NlcnRpZmljYXRlSW5mb1dpbl9oCi0jZGVmaW5lIFdLQ2VydGlmaWNhdGVJbmZv
V2luX2gKLQotI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+Ci0jaW5jbHVkZSA8V2luY3J5cHQu
aD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1XS19FWFBP
UlQgV0tDZXJ0aWZpY2F0ZUluZm9SZWYgV0tDZXJ0aWZpY2F0ZUluZm9DcmVhdGVXaXRoQ2VydGlm
aWNhdGUoUENDRVJUX0NPTlRFWFQgY2VydGlmaWNhdGUpOwotV0tfRVhQT1JUIHNpemVfdCBXS0Nl
cnRpZmljYXRlSW5mb0dldENlcnRpZmljYXRlQ2hhaW5MZW5ndGgoV0tDZXJ0aWZpY2F0ZUluZm9S
ZWYgY2VydGlmaWNhdGVJbmZvKTsKLVdLX0VYUE9SVCBQQ0NFUlRfQ09OVEVYVCBXS0NlcnRpZmlj
YXRlSW5mb0dldENlcnRpZmljYXRlQ29udGV4dEF0SW5kZXgoV0tDZXJ0aWZpY2F0ZUluZm9SZWYg
Y2VydGlmaWNhdGVJbmZvLCBzaXplX3QgaW5kZXgpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0K
LSNlbmRpZgotCi0jZW5kaWYgLyogV0tDZXJ0aWZpY2F0ZUluZm9XaW5faCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvd2luL05ldHNjYXBlUGx1
Z2luTW9kdWxlV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L3dpbi9OZXRzY2FwZVBsdWdpbk1vZHVsZVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGJmZmRkZTJhNzk1MWY2MTNjYzdmMjBjZjZiMzkyYjllOTk2N2E3N2EuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1BsdWdpbnMvTmV0c2NhcGUvd2luL05ldHNjYXBlUGx1Z2luTW9kdWxlV2luLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z2luTW9kdWxlLmgiCi0KLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2lu
Y2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBTdHJpbmcgZ2V0VmVyc2lvbkluZm8oY29uc3Qg
TFBWT0lEIHZlcnNpb25JbmZvRGF0YSwgY29uc3QgU3RyaW5nJiBpbmZvKQotewotICAgIExQVk9J
RCBidWZmZXI7Ci0gICAgVUlOVCBidWZmZXJMZW5ndGg7Ci0gICAgU3RyaW5nIHN1YkluZm8gPSAi
XFxTdHJpbmdmaWxlSW5mb1xcMDQwOTA0RTRcXCIgKyBpbmZvOwotICAgIGlmICghOjpWZXJRdWVy
eVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEsIGNvbnN0X2Nhc3Q8VUNoYXIqPihzdWJJbmZvLmNoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpLCAmYnVmZmVyLCAmYnVmZmVyTGVuZ3RoKSB8fCAh
YnVmZmVyTGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAvLyBTdWJ0cmFj
dCAxIGZyb20gdGhlIGxlbmd0aDsgd2UgZG9uJ3Qgd2FudCB0aGUgdHJhaWxpbmcgbnVsbCBjaGFy
YWN0ZXIuCi0gICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFyKj4oYnVmZmVy
KSwgYnVmZmVyTGVuZ3RoIC0gMSk7Ci19Ci0KLXN0YXRpYyB1aW50NjRfdCBmaWxlVmVyc2lvbihE
V09SRCBsZWFzdFNpZ25pZmljYW50LCBEV09SRCBtb3N0U2lnbmlmaWNhbnQpCi17Ci0gICAgVUxB
UkdFX0lOVEVHRVIgdmVyc2lvbjsKLSAgICB2ZXJzaW9uLkxvd1BhcnQgPSBsZWFzdFNpZ25pZmlj
YW50OwotICAgIHZlcnNpb24uSGlnaFBhcnQgPSBtb3N0U2lnbmlmaWNhbnQ7Ci0gICAgcmV0dXJu
IHZlcnNpb24uUXVhZFBhcnQ7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBs
dWdpbkluZm8oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVn
aW4pCi17Ci0gICAgICAgIFN0cmluZyBwYXRoQ29weSA9IHBsdWdpblBhdGg7Ci0gICAgRFdPUkQg
dmVyc2lvbkluZm9TaXplID0gOjpHZXRGaWxlVmVyc2lvbkluZm9TaXplVyhwYXRoQ29weS5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwKTsKLSAgICBpZiAoIXZlcnNpb25JbmZvU2l6
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4gdmVyc2lv
bkluZm9EYXRhID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclt2ZXJzaW9uSW5mb1NpemVdKTsKLSAg
ICBpZiAoITo6R2V0RmlsZVZlcnNpb25JbmZvVyhwYXRoQ29weS5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLCAwLCB2ZXJzaW9uSW5mb1NpemUsIHZlcnNpb25JbmZvRGF0YS5nZXQoKSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZyBuYW1lID0gZ2V0VmVyc2lvbklu
Zm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiUHJvZHVjdE5hbWUiKTsKLSAgICBTdHJpbmcgZGVz
Y3JpcHRpb24gPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJGaWxlRGVz
Y3JpcHRpb24iKTsKLSAgICBpZiAobmFtZS5pc051bGwoKSB8fCBkZXNjcmlwdGlvbi5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVlNfRklYRURGSUxFSU5GTyogaW5mbzsK
LSAgICBVSU5UIGluZm9TaXplOwotICAgIGlmICghOjpWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5m
b0RhdGEuZ2V0KCksIEwiXFwiLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmluZm8pLCAmaW5m
b1NpemUpIHx8IGluZm9TaXplIDwgc2l6ZW9mKFZTX0ZJWEVERklMRUlORk8pKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICBnZXRWZXJzaW9u
SW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJNSU1FVHlwZSIpLnNwbGl0KCd8JywgdHlwZXMp
OwotICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbkxpc3RzOwotICAgIGdldFZlcnNpb25JbmZv
KHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIkZpbGVFeHRlbnRzIikuc3BsaXQoJ3wnLCBleHRlbnNp
b25MaXN0cyk7Ci0gICAgVmVjdG9yPFN0cmluZz4gZGVzY3JpcHRpb25zOwotICAgIGdldFZlcnNp
b25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIkZpbGVPcGVuTmFtZSIpLnNwbGl0KCd8Jywg
ZGVzY3JpcHRpb25zKTsKLQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lcyh0eXBlcy5z
aXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgU3RyaW5nIHR5cGUgPSB0eXBlc1tpXS5sb3dlcigpOwotICAgICAgICBTdHJpbmcg
ZGVzY3JpcHRpb24gPSBpIDwgZGVzY3JpcHRpb25zLnNpemUoKSA/IGRlc2NyaXB0aW9uc1tpXSA6
ICIiOwotICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uTGlzdCA9IGkgPCBleHRlbnNpb25MaXN0cy5z
aXplKCkgPyBleHRlbnNpb25MaXN0c1tpXSA6ICIiOwotCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+
IGV4dGVuc2lvbnNWZWN0b3I7Ci0gICAgICAgIGV4dGVuc2lvbkxpc3Quc3BsaXQoJywnLCBleHRl
bnNpb25zVmVjdG9yKTsKLQotICAgICAgICAvLyBHZXQgcmlkIG9mIHRoZSBleHRlbnNpb24gbGlz
dCB0aGF0IG1heSBiZSBhdCB0aGUgZW5kIG9mIHRoZSBkZXNjcmlwdGlvbiBzdHJpbmcuCi0gICAg
ICAgIGludCBwb3MgPSBkZXNjcmlwdGlvbi5maW5kKCIoKiIpOwotICAgICAgICBpZiAocG9zICE9
IC0xKSB7Ci0gICAgICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBhIHNwYWNlIHRoYXQgd2UgbmVl
ZCB0byBnZXQgcmlkIG9mLgotICAgICAgICAgICAgaWYgKHBvcyA+IDEgJiYgZGVzY3JpcHRpb25b
cG9zIC0gMV0gPT0gJyAnKQotICAgICAgICAgICAgICAgIHBvcy0tOwotICAgICAgICAgICAgZGVz
Y3JpcHRpb24gPSBkZXNjcmlwdGlvbi5sZWZ0KHBvcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBt
aW1lc1tpXS50eXBlID0gdHlwZTsKLSAgICAgICAgbWltZXNbaV0uZGVzYyA9IGRlc2NyaXB0aW9u
OwotICAgICAgICBtaW1lc1tpXS5leHRlbnNpb25zLnN3YXAoZXh0ZW5zaW9uc1ZlY3Rvcik7Ci0g
ICAgfQotCi0gICAgcGx1Z2luLnBhdGggPSBwbHVnaW5QYXRoOwotICAgIHBsdWdpbi5pbmZvLmRl
c2MgPSBkZXNjcmlwdGlvbjsKLSAgICBwbHVnaW4uaW5mby5uYW1lID0gbmFtZTsKLSAgICBwbHVn
aW4uaW5mby5maWxlID0gcGF0aEdldEZpbGVOYW1lKHBsdWdpblBhdGgpOwotICAgIHBsdWdpbi5p
bmZvLm1pbWVzLnN3YXAobWltZXMpOwotICAgIHBsdWdpbi5maWxlVmVyc2lvbiA9IGZpbGVWZXJz
aW9uKGluZm8tPmR3RmlsZVZlcnNpb25MUywgaW5mby0+ZHdGaWxlVmVyc2lvbk1TKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpkZXRlcm1pbmVR
dWlya3MoKQotewotICAgIFBsdWdpbk1vZHVsZUluZm8gcGx1Z2luOwotICAgIGdldFBsdWdpbklu
Zm8obV9wbHVnaW5QYXRoLCBwbHVnaW4pOwotCi0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1p
bWVUeXBlcyA9IHBsdWdpbi5pbmZvLm1pbWVzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bWltZVR5cGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCBzZWVtcyBzdHJh
bmdlIHRvIGFzc3VtZSB0aGF0IGFueSBwbHVnaW4gdGhhdCBoYW5kbGVzIHRoaXMgTUlNRSB0eXBl
IG5lZWRzIHRoaXMgcXVpcmsuIFNob3VsZAotICAgICAgICAvLyB3ZSBiZSBiZSBjaGVja2luZyB0
aGUgcGx1Z2luJ3MgbmFtZSBpbnN0ZWFkPwotICAgICAgICBpZiAobWltZVR5cGVzW2ldLnR5cGUg
PT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgewotICAgICAgICAgICAgdWludDY0
X3QgZmxhc2hUZW5WZXJzaW9uID0gZmlsZVZlcnNpb24oMHgwMDAwMDAwMCwgMHgwMDBhMDAwMCk7
Ci0gICAgICAgICAgICB1aW50NjRfdCB2ZXJzaW9uID0gcGx1Z2luLmZpbGVWZXJzaW9uOwotCi0g
ICAgICAgICAgICAvLyBQcmUgRmxhc2ggdjEwIG9ubHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVn
aW5zIGlmIHdlIHVzZSBhIE1vemlsbGEgdXNlciBhZ2VudC4KLSAgICAgICAgICAgIC8vIEZvciB0
ZXN0aW5nIGluZm9ybWF0aW9uLCBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MDcyNi4KLSAgICAgICAgICAgIGlmICh2ZXJzaW9uIDwgZmxhc2hUZW5WZXJzaW9u
KQotICAgICAgICAgICAgICAgIG1fcGx1Z2luUXVpcmtzLmFkZChQbHVnaW5RdWlya3M6OldhbnRz
TW96aWxsYVVzZXJBZ2VudCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2NnL3dpbi9T
aGFyZWFibGVCaXRtYXBDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2cvd2luL1No
YXJlYWJsZUJpdG1hcENHV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkw
M2I5NTUwZDIxZjYwNTc1NzU2ZjJhNTc0MzM5NGZjMmRiOWEzMC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2cvd2lu
L1NoYXJlYWJsZUJpdG1hcENHV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0
bWFwLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdm9pZCBkZXJlZlNoYXJlZE1l
bW9yeSh2b2lkKiB0eXBlbGVzc1NoYXJlZE1lbW9yeSwgY29uc3Qgdm9pZCosIHNpemVfdCkKLXsK
LSAgICBBU1NFUlRfQVJHKHR5cGVsZXNzU2hhcmVkTWVtb3J5LCB0eXBlbGVzc1NoYXJlZE1lbW9y
eSk7Ci0KLSAgICAvLyBCYWxhbmNlZCBieSBsZWFrUmVmIGluIG1ha2VDR0ltYWdlQ29weS4KLSAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtZW1vcnkgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxTaGFy
ZWRNZW1vcnkqPih0eXBlbGVzc1NoYXJlZE1lbW9yeSkpOwotfQotCi1SZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gU2hhcmVhYmxlQml0bWFwOjptYWtlQ0dJbWFnZUNvcHkoKQotewotICAgIFJldGFpblB0
cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOwotICAgIGlmIChpc0JhY2tlZEJ5U2hh
cmVkTWVtb3J5KCkpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxTaGFyZWRNZW1vcnk+IGNvcHlPbldy
aXRlTWVtb3J5ID0gbV9zaGFyZWRNZW1vcnktPmNyZWF0ZUNvcHlPbldyaXRlQ29weShzaXplSW5C
eXRlcygpKSkgewotICAgICAgICAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gb3JpZ2luYWxNZW1v
cnkgPSBtX3NoYXJlZE1lbW9yeS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAvLyBXcml0ZXMgdG8g
b3JpZ2luYWxNZW1vcnkgd2lsbCBhZmZlY3QgY29weU9uV3JpdGVNZW1vcnkgKHVudGlsIGNvcHlP
bldyaXRlTWVtb3J5IGlzCi0gICAgICAgICAgICAvLyB3cml0dGVuIHRvIGZvciB0aGUgZmlyc3Qg
dGltZSksIGJ1dCB3cml0ZXMgdG8gY29weU9uV3JpdGVNZW1vcnkgd2lsbCBub3QgYWZmZWN0Ci0g
ICAgICAgICAgICAvLyBvcmlnaW5hbE1lbW9yeS4gU28gd2Ugd3JhcCBvcmlnaW5hbE1lbW9yeSBp
biBhIENHSW1hZ2UgKHdoaWNoIHdpbGwgbmV2ZXIgd3JpdGUgdG8KLSAgICAgICAgICAgIC8vIGl0
KSBhbmQgdXNlIGNvcHlPbldyaXRlTWVtb3J5IHRvIGJhY2sgdGhpcyBTaGFyZWFibGVCaXRtYXAg
ZnJvbSBoZXJlIG9uIG91dC4gVGhhdAotICAgICAgICAgICAgLy8gd2F5LCB3cml0ZXMgdG8gdGhp
cyBTaGFyZWFibGVCaXRtYXAgd2lsbCBub3QgYWZmZWN0IHRoZSBDR0ltYWdlLgotICAgICAgICAg
ICAgbV9zaGFyZWRNZW1vcnkgPSBjb3B5T25Xcml0ZU1lbW9yeS5yZWxlYXNlKCk7Ci0gICAgICAg
ICAgICBkYXRhUHJvdmlkZXIuYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG9y
aWdpbmFsTWVtb3J5LmdldCgpLCBvcmlnaW5hbE1lbW9yeS0+ZGF0YSgpLCBzaXplSW5CeXRlcygp
LCBkZXJlZlNoYXJlZE1lbW9yeSkpOwotICAgICAgICAgICAgLy8gQmFsYW5jZWQgYnkgYWRvcHRS
ZWYgaW4gZGVyZWZTaGFyZWRNZW1vcnkuCi0gICAgICAgICAgICBvcmlnaW5hbE1lbW9yeS5yZWxl
YXNlKCkubGVha1JlZigpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghZGF0YVByb3ZpZGVy
KSB7Ci0gICAgICAgIC8vIFdlIHdlcmVuJ3QgYWJsZSB0byBtYWtlIGEgY29weS1vbi13cml0ZSBj
b3B5LCBzbyB3ZSdsbCBqdXN0IGhhdmUgdG8gZmFsbCBiYWNrIHRvIGEKLSAgICAgICAgLy8gbm9y
bWFsIGNvcHkgKHdoaWNoIGlzIG1vcmUgZXhwZW5zaXZlLCBidXQgdGhlIGJlc3Qgd2UgY2FuIGRv
KS4KLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKEFkb3B0Q0YsIENGRGF0YUNy
ZWF0ZSgwLCBzdGF0aWNfY2FzdDxVSW50OCo+KGRhdGEoKSksIHNpemVJbkJ5dGVzKCkpKTsKLSAg
ICAgICAgZGF0YVByb3ZpZGVyLmFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRh
KGNmRGF0YS5nZXQoKSkpOwotICAgIH0KLSAgICBBU1NFUlQoZGF0YVByb3ZpZGVyKTsKLSAgICBy
ZXR1cm4gY3JlYXRlQ0dJbWFnZShkYXRhUHJvdmlkZXIuZ2V0KCkpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vQ29hbGVz
Y2VkV2luZG93R2VvbWV0cmllc1VwZGF0ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3dp
bi9Db2FsZXNjZWRXaW5kb3dHZW9tZXRyaWVzVXBkYXRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGVlZDJkNmVjODhlNTBiYjhjMzZiNjVmNTU0YWMwMjQzYWJiOTU4YzkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL3dpbi9Db2FsZXNjZWRXaW5kb3dHZW9tZXRyaWVzVXBkYXRlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkNvYWxlc2NlZFdpbmRvd0dlb21ldHJpZXNVcGRhdGVyLmgiCi0KLSNpbmNs
dWRlICJXaW5kb3dHZW9tZXRyeS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1Db2FsZXNjZWRXaW5kb3dHZW9tZXRyaWVzVXBkYXRlcjo6Q29h
bGVzY2VkV2luZG93R2VvbWV0cmllc1VwZGF0ZXIoKQotewotfQotCi1Db2FsZXNjZWRXaW5kb3dH
ZW9tZXRyaWVzVXBkYXRlcjo6fkNvYWxlc2NlZFdpbmRvd0dlb21ldHJpZXNVcGRhdGVyKCkKLXsK
LX0KLQotdm9pZCBDb2FsZXNjZWRXaW5kb3dHZW9tZXRyaWVzVXBkYXRlcjo6YWRkUGVuZGluZ1Vw
ZGF0ZShjb25zdCBXaW5kb3dHZW9tZXRyeSYgZ2VvbWV0cnkpCi17Ci0gICAgbV9nZW9tZXRyaWVz
LnNldChnZW9tZXRyeS53aW5kb3csIGdlb21ldHJ5KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0V2lu
ZG93UmVnaW9uKEhXTkQgd2luZG93LCBQYXNzT3duUHRyPEhSR04+IHBvcFJlZ2lvbikKLXsKLSAg
ICBPd25QdHI8SFJHTj4gcmVnaW9uID0gcG9wUmVnaW9uOwotCi0gICAgaWYgKCE6OlNldFdpbmRv
d1Jnbih3aW5kb3csIHJlZ2lvbi5nZXQoKSwgVFJVRSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIFdpbmRvd3Mgb3ducyB0aGUgcmVnaW9uIG5vdy4KLSAgICByZWdpb24ubGVha1B0cigpOwot
fQotCi12b2lkIENvYWxlc2NlZFdpbmRvd0dlb21ldHJpZXNVcGRhdGVyOjp1cGRhdGVHZW9tZXRy
aWVzKEJyaW5nVG9Ub3BPck5vdCBicmluZ1RvVG9wT3JOb3QpCi17Ci0gICAgSGFzaE1hcDxIV05E
LCBXaW5kb3dHZW9tZXRyeT4gZ2VvbWV0cmllczsKLSAgICBnZW9tZXRyaWVzLnN3YXAobV9nZW9t
ZXRyaWVzKTsKLQotICAgIEhEV1AgZGVmZXJXaW5kb3dQb3MgPSA6OkJlZ2luRGVmZXJXaW5kb3dQ
b3MoZ2VvbWV0cmllcy5zaXplKCkpOwotCi0gICAgZm9yIChIYXNoTWFwPEhXTkQsIFdpbmRvd0dl
b21ldHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OlZhbHVlcyBpdCA9IGdlb21ldHJpZXMuYmVnaW4oKS52
YWx1ZXMoKSwgZW5kID0gZ2VvbWV0cmllcy5lbmQoKS52YWx1ZXMoKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGNvbnN0IFdpbmRvd0dlb21ldHJ5JiBnZW9tZXRyeSA9ICppdDsKLQotICAg
ICAgICBpZiAoITo6SXNXaW5kb3coZ2VvbWV0cnkud2luZG93KSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIFVJTlQgZmxhZ3MgPSBTV1BfTk9BQ1RJVkFURTsKLSAgICAgICAgaWYg
KGdlb21ldHJ5LnZpc2libGUpCi0gICAgICAgICAgICBmbGFncyB8PSBTV1BfU0hPV1dJTkRPVzsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmxhZ3MgfD0gU1dQX0hJREVXSU5ET1c7Ci0KLSAg
ICAgICAgSFdORCBod25kSW5zZXJ0QWZ0ZXI7Ci0gICAgICAgIGlmIChicmluZ1RvVG9wT3JOb3Qg
PT0gQnJpbmdUb1RvcCkKLSAgICAgICAgICAgIGh3bmRJbnNlcnRBZnRlciA9IEhXTkRfVE9QOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGh3bmRJbnNlcnRBZnRlciA9IDA7Ci0gICAgICAg
ICAgICBmbGFncyB8PSBTV1BfTk9PV05FUlpPUkRFUiB8IFNXUF9OT1pPUkRFUjsKLSAgICAgICAg
fQotCi0gICAgICAgIGRlZmVyV2luZG93UG9zID0gOjpEZWZlcldpbmRvd1BvcyhkZWZlcldpbmRv
d1BvcywgZ2VvbWV0cnkud2luZG93LCBod25kSW5zZXJ0QWZ0ZXIsIGdlb21ldHJ5LmZyYW1lLngo
KSwgZ2VvbWV0cnkuZnJhbWUueSgpLCBnZW9tZXRyeS5mcmFtZS53aWR0aCgpLCBnZW9tZXRyeS5m
cmFtZS5oZWlnaHQoKSwgZmxhZ3MpOwotCi0gICAgICAgIHNldFdpbmRvd1JlZ2lvbihnZW9tZXRy
eS53aW5kb3csIGFkb3B0UHRyKDo6Q3JlYXRlUmVjdFJnbihnZW9tZXRyeS5jbGlwUmVjdC54KCks
IGdlb21ldHJ5LmNsaXBSZWN0LnkoKSwgZ2VvbWV0cnkuY2xpcFJlY3QubWF4WCgpLCBnZW9tZXRy
eS5jbGlwUmVjdC5tYXhZKCkpKSk7Ci0gICAgfQotCi0gICAgOjpFbmREZWZlcldpbmRvd1Bvcyhk
ZWZlcldpbmRvd1Bvcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9Db2FsZXNjZWRXaW5kb3dHZW9tZXRyaWVzVXBkYXRl
ci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9Db2FsZXNjZWRXaW5kb3dHZW9tZXRyaWVz
VXBkYXRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmM5NDQ1NzcyZjY2OTUy
ZjBkZjA4OGNkYzYwOTU0MTQwNmQ5OGM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vQ29hbGVzY2VkV2luZG93
R2VvbWV0cmllc1VwZGF0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIENvYWxlc2NlZFdpbmRvd0dlb21ldHJpZXNVcGRhdGVyX2gKLSNkZWZp
bmUgQ29hbGVzY2VkV2luZG93R2VvbWV0cmllc1VwZGF0ZXJfaAotCi0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLXN0cnVjdCBXaW5kb3dHZW9tZXRyeTsKLQotZW51bSBCcmluZ1RvVG9wT3JOb3QgeyBC
cmluZ1RvVG9wLCBEb05vdEJyaW5nVG9Ub3AgfTsKLQotY2xhc3MgQ29hbGVzY2VkV2luZG93R2Vv
bWV0cmllc1VwZGF0ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvYWxlc2NlZFdpbmRv
d0dlb21ldHJpZXNVcGRhdGVyKTsKLXB1YmxpYzoKLSAgICBDb2FsZXNjZWRXaW5kb3dHZW9tZXRy
aWVzVXBkYXRlcigpOwotICAgIH5Db2FsZXNjZWRXaW5kb3dHZW9tZXRyaWVzVXBkYXRlcigpOwot
Ci0gICAgdm9pZCBhZGRQZW5kaW5nVXBkYXRlKGNvbnN0IFdpbmRvd0dlb21ldHJ5Jik7Ci0gICAg
dm9pZCB1cGRhdGVHZW9tZXRyaWVzKEJyaW5nVG9Ub3BPck5vdCk7Ci0KLXByaXZhdGU6Ci0gICAg
SGFzaE1hcDxIV05ELCBXaW5kb3dHZW9tZXRyeT4gbV9nZW9tZXRyaWVzOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBDb2FsZXNjZWRXaW5kb3dHZW9tZXRyaWVzVXBk
YXRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2luL0NvbW1hbmRMaW5l
V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vQ29tbWFuZExpbmVXaW4uY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTI3OThmNTFhNGM0YzE4Y2M1MGM0OTI0YTk4
ODcxYzJhODU5Y2M2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vQ29tbWFuZExpbmVXaW4uY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDb21tYW5kTGluZS5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBD
b21tYW5kTGluZTo6cGFyc2UoTFBUU1RSIGNvbW1hbmRMaW5lU3RyaW5nKQotewotICAgIG1fYXJn
cy5jbGVhcigpOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBlbXB0eSBjb21tYW5kIGxp
bmUuCi0gICAgaWYgKCFjb21tYW5kTGluZVN0cmluZyB8fCAhY29tbWFuZExpbmVTdHJpbmdbMF0p
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaW50IGFyZ3VtZW50Q291bnQ7Ci0gICAgTFBX
U1RSKiBjb21tYW5kTGluZUFyZ3MgPSA6OkNvbW1hbmRMaW5lVG9Bcmd2Vyhjb21tYW5kTGluZVN0
cmluZywgJmFyZ3VtZW50Q291bnQpOwotICAgIGlmICghY29tbWFuZExpbmVBcmdzKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudCAlIDIpIHsKLSAgICAgICAg
OjpMb2NhbEZyZWUoY29tbWFuZExpbmVBcmdzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudCA7IGkgKz0gMikgewot
ICAgICAgICBMUFdTVFIga2V5ID0gY29tbWFuZExpbmVBcmdzW2ldOwotCi0gICAgICAgIGlmIChr
ZXlbMF0gIT0gJy0nKSB7Ci0gICAgICAgICAgICA6OkxvY2FsRnJlZShjb21tYW5kTGluZUFyZ3Mp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9hcmdz
LnNldCgma2V5WzFdLCBjb21tYW5kTGluZUFyZ3NbaSArIDFdKTsKLSAgICB9Ci0KLSAgICA6Okxv
Y2FsRnJlZShjb21tYW5kTGluZUFyZ3MpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vTGF5
ZXJUcmVlQ29udGV4dFdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2luL0xheWVyVHJl
ZUNvbnRleHRXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGQ3YzY2N2Vm
OGYyMTdmYThiMWExZGViMDg1MTQ0N2U1YjBhMmUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vTGF5ZXJUcmVl
Q29udGV4dFdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKLQot
I2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1MYXll
clRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0KCkKLSAgICA6IHdpbmRvdygwKQotewotfQot
Ci1MYXllclRyZWVDb250ZXh0Ojp+TGF5ZXJUcmVlQ29udGV4dCgpCi17Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlQ29udGV4dDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKLXsKLSAgICBlbmNvZGVyLmVuY29kZShyZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih3
aW5kb3cpKTsKLX0KLQotYm9vbCBMYXllclRyZWVDb250ZXh0OjpkZWNvZGUoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyKiBkZWNvZGVyLCBMYXllclRyZWVDb250ZXh0JiBjb250ZXh0KQotewotICAg
IHVpbnQ2NF90IHdpbmRvdzsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZSh3aW5kb3cpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb250ZXh0LndpbmRvdyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SFdORD4od2luZG93KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMYXllclRyZWVD
b250ZXh0Ojppc0VtcHR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIXdpbmRvdzsKLX0KLQotYm9v
bCBvcGVyYXRvcj09KGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGEsIGNvbnN0IExheWVyVHJlZUNv
bnRleHQmIGIpCi17Ci0gICAgcmV0dXJuIGEud2luZG93ID09IGIud2luZG93OwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4v
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudFdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2lu
L05hdGl2ZVdlYktleWJvYXJkRXZlbnRXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzN2FhZjVkNTA3ZTQzNjM3MWE1N2JhYTE3YTcyYjQ0YzI1NDg5OThhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC93aW4vTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5h
dGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKLQotI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudChIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSkKLSAgICA6IFdlYktleWJvYXJkRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVh
dGVXZWJLZXlib2FyZEV2ZW50KGh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKSkKLSAgICAs
IG1fbmF0aXZlRXZlbnQoKQotewotICAgIG1fbmF0aXZlRXZlbnQuaHduZCA9IGh3bmQ7Ci0gICAg
bV9uYXRpdmVFdmVudC5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBtX25hdGl2ZUV2ZW50LndQYXJh
bSA9IHdQYXJhbTsKLSAgICBtX25hdGl2ZUV2ZW50LmxQYXJhbSA9IGxQYXJhbTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2lu
L05hdGl2ZVdlYk1vdXNlRXZlbnRXaW4uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9O
YXRpdmVXZWJNb3VzZUV2ZW50V2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NWI4M2RjNmQ5NzI5Y2MxYmM1NjFkNTg5MjMxNzQxZjQyMzlkODI2Mi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2lu
L05hdGl2ZVdlYk1vdXNlRXZlbnRXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOYXRpdmVXZWJN
b3VzZUV2ZW50LmgiCi0KLSNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLU5hdGl2ZVdlYk1vdXNlRXZlbnQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQoSFdO
RCBod25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wg
ZGlkQWN0aXZhdGVXZWJWaWV3KQotICAgIDogV2ViTW91c2VFdmVudChXZWJFdmVudEZhY3Rvcnk6
OmNyZWF0ZVdlYk1vdXNlRXZlbnQoaHduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGRpZEFj
dGl2YXRlV2ViVmlldykpCi0gICAgLCBtX25hdGl2ZUV2ZW50KCkKLXsKLSAgICBtX25hdGl2ZUV2
ZW50Lmh3bmQgPSBod25kOwotICAgIG1fbmF0aXZlRXZlbnQubWVzc2FnZSA9IG1lc3NhZ2U7Ci0g
ICAgbV9uYXRpdmVFdmVudC53UGFyYW0gPSB3UGFyYW07Ci0gICAgbV9uYXRpdmVFdmVudC5sUGFy
YW0gPSBsUGFyYW07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9OYXRpdmVXZWJXaGVlbEV2ZW50V2luLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC93aW4vTmF0aXZlV2ViV2hlZWxFdmVudFdpbi5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZWVhNzA5YWFkZGJiMGQ0M2FiZmU5NTg5OGRmYzExMjY5
MjAxMGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9OYXRpdmVXZWJXaGVlbEV2ZW50V2luLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgotCi0jaW5jbHVkZSAiV2ViRXZlbnRG
YWN0b3J5LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1OYXRpdmVXZWJXaGVlbEV2ZW50OjpO
YXRpdmVXZWJXaGVlbEV2ZW50KEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFt
LCBMUEFSQU0gbFBhcmFtKQotICAgIDogV2ViV2hlZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNy
ZWF0ZVdlYldoZWVsRXZlbnQoaHduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pKQotICAgICwg
bV9uYXRpdmVFdmVudCgpCi17Ci0gICAgbV9uYXRpdmVFdmVudC5od25kID0gaHduZDsKLSAgICBt
X25hdGl2ZUV2ZW50Lm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIG1fbmF0aXZlRXZlbnQud1BhcmFt
ID0gd1BhcmFtOwotICAgIG1fbmF0aXZlRXZlbnQubFBhcmFtID0gbFBhcmFtOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4v
UGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9Q
bGF0Zm9ybUNlcnRpZmljYXRlSW5mby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDViMGQyMGE4NGNlM2MxZjgzZDk4YjgzNmQ3YWRkMjZmYTkzMTg4ODEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3dp
bi9QbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bUNlcnRpZmljYXRlSW5mby5oIgotCi0jaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCi0jaW5j
bHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgotCi0jaWYgVVNFKENHKQotI2luY2x1
ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNlbmRp
ZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBs
YXRmb3JtQ2VydGlmaWNhdGVJbmZvOjpQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbygpCi17Ci19Ci0K
LVBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvOjpQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBDRlVSTFJlc3BvbnNlUmVmIGNmUmVz
cG9uc2UgPSByZXNwb25zZS5jZlVSTFJlc3BvbnNlKCk7Ci0gICAgaWYgKCFjZlJlc3BvbnNlKQot
ICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoQ0cpCi0gICAgQ0ZEaWN0aW9uYXJ5UmVmIGNlcnRp
ZmljYXRlSW5mbyA9IHdrR2V0U1NMQ2VydGlmaWNhdGVJbmZvKGNmUmVzcG9uc2UpOwotICAgIGlm
ICghY2VydGlmaWNhdGVJbmZvKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2b2lkKiBkYXRhID0g
d2tHZXRTU0xDZXJ0aWZpY2F0ZUNoYWluQ29udGV4dChjZXJ0aWZpY2F0ZUluZm8pOwotICAgIGlm
ICghZGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUENDRVJUX0NIQUlOX0NPTlRFWFQgY2hh
aW5Db250ZXh0ID0gc3RhdGljX2Nhc3Q8UENDRVJUX0NIQUlOX0NPTlRFWFQ+KGRhdGEpOwotICAg
IGlmIChjaGFpbkNvbnRleHQtPmNDaGFpbiA8IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFRoZSBmaXJzdCBzaW1wbGUgY2hhaW4gc3RhcnRzIHdpdGggdGhlIGxlYWYgY2VydGlmaWNhdGUg
YW5kIGVuZHMgd2l0aCBhIHRydXN0ZWQgcm9vdCBvciBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZS4K
LSAgICBQQ0VSVF9TSU1QTEVfQ0hBSU4gZmlyc3RTaW1wbGVDaGFpbiA9IGNoYWluQ29udGV4dC0+
cmdwQ2hhaW5bMF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpcnN0U2ltcGxlQ2hh
aW4tPmNFbGVtZW50OyArK2kpIHsKLSAgICAgICAgUENDRVJUX0NPTlRFWFQgY2VydGlmaWNhdGVD
b250ZXh0ID0gZmlyc3RTaW1wbGVDaGFpbi0+cmdwRWxlbWVudFtpXS0+cENlcnRDb250ZXh0Owot
ICAgICAgICBQQ0NFUlRfQ09OVEVYVCBjZXJ0aWZpY2F0ZUNvbnRleHRDb3B5ID0gOjpDZXJ0RHVw
bGljYXRlQ2VydGlmaWNhdGVDb250ZXh0KGNlcnRpZmljYXRlQ29udGV4dCk7Ci0gICAgICAgIG1f
Y2VydGlmaWNhdGVDaGFpbi5hcHBlbmQoY2VydGlmaWNhdGVDb250ZXh0Q29weSk7Ci0gICAgfQot
I2Vsc2UKLSAgICAvLyBGSVhNRTogV2luQ2Fpcm8gaW1wbGVtZW50YXRpb24KLSNlbmRpZgotfQot
Ci1QbGF0Zm9ybUNlcnRpZmljYXRlSW5mbzo6UGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8oUENDRVJU
X0NPTlRFWFQgY2VydGlmaWNhdGVDb250ZXh0KQotewotICAgIGlmICghY2VydGlmaWNhdGVDb250
ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUENDRVJUX0NPTlRFWFQgY2VydGlmaWNh
dGVDb250ZXh0Q29weSA9IDo6Q2VydER1cGxpY2F0ZUNlcnRpZmljYXRlQ29udGV4dChjZXJ0aWZp
Y2F0ZUNvbnRleHQpOwotICAgIG1fY2VydGlmaWNhdGVDaGFpbi5hcHBlbmQoY2VydGlmaWNhdGVD
b250ZXh0Q29weSk7ICAgIAotfQotCi1QbGF0Zm9ybUNlcnRpZmljYXRlSW5mbzo6flBsYXRmb3Jt
Q2VydGlmaWNhdGVJbmZvKCkKLXsKLSAgICBjbGVhckNlcnRpZmljYXRlQ2hhaW4oKTsKLX0KLQot
UGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm86OlBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvKGNvbnN0IFBs
YXRmb3JtQ2VydGlmaWNhdGVJbmZvJiBvdGhlcikKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG90aGVyLm1fY2VydGlmaWNhdGVDaGFpbi5zaXplKCk7ICsraSkgewotICAgICAgICBQQ0NF
UlRfQ09OVEVYVCBjZXJ0aWZpY2F0ZUNvbnRleHRDb3B5ID0gOjpDZXJ0RHVwbGljYXRlQ2VydGlm
aWNhdGVDb250ZXh0KG90aGVyLm1fY2VydGlmaWNhdGVDaGFpbltpXSk7Ci0gICAgICAgIG1fY2Vy
dGlmaWNhdGVDaGFpbi5hcHBlbmQoY2VydGlmaWNhdGVDb250ZXh0Q29weSk7Ci0gICAgfQotfQot
Ci1QbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyYgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm86Om9wZXJh
dG9yPShjb25zdCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyYgb3RoZXIpCi17Ci0gICAgY2xlYXJD
ZXJ0aWZpY2F0ZUNoYWluKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdGhlci5tX2Nl
cnRpZmljYXRlQ2hhaW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUENDRVJUX0NPTlRFWFQgY2Vy
dGlmaWNhdGVDb250ZXh0Q29weSA9IDo6Q2VydER1cGxpY2F0ZUNlcnRpZmljYXRlQ29udGV4dChv
dGhlci5tX2NlcnRpZmljYXRlQ2hhaW5baV0pOwotICAgICAgICBtX2NlcnRpZmljYXRlQ2hhaW4u
YXBwZW5kKGNlcnRpZmljYXRlQ29udGV4dENvcHkpOwotICAgIH0KLSAgICByZXR1cm4gKnRoaXM7
Ci19Ci0KLXZvaWQgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1
bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgLy8gU3BlY2lhbCBjYXNlIG5vIGNl
cnRpZmljYXRlcwotICAgIGlmIChtX2NlcnRpZmljYXRlQ2hhaW4uaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGVuY29kZXIuZW5jb2RlKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB1aW50NjRfdCBsZW5ndGggPSBtX2NlcnRp
ZmljYXRlQ2hhaW4uc2l6ZSgpOwotICAgIGVuY29kZXIuZW5jb2RlKGxlbmd0aCk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBlbmNvZGVyLmVuY29k
ZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KENvcmVJUEM6OkRhdGFSZWZlcmVuY2Uoc3RhdGljX2Nh
c3Q8dWludDhfdCo+KG1fY2VydGlmaWNhdGVDaGFpbltpXS0+cGJDZXJ0RW5jb2RlZCksIG1fY2Vy
dGlmaWNhdGVDaGFpbltpXS0+Y2JDZXJ0RW5jb2RlZCkpOwotfQotCi1ib29sIFBsYXRmb3JtQ2Vy
dGlmaWNhdGVJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBQ
bGF0Zm9ybUNlcnRpZmljYXRlSW5mbyYgYykKLXsKLSAgICB1aW50NjRfdCBsZW5ndGg7Ci0gICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUobGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKGxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpIHsK
LSAgICAgICAgLy8gVGhpcyBpcyB0aGUgbm8gY2VydGlmaWNhdGVzIGNhc2UuCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlOwotICAg
ICAgICBpZiAoIWRlY29kZXItPmRlY29kZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KGRhdGFSZWZl
cmVuY2UpKSB7Ci0gICAgICAgICAgICBjLmNsZWFyQ2VydGlmaWNhdGVDaGFpbigpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgUENDRVJUX0NPTlRFWFQg
Y2VydGlmaWNhdGVDb250ZXh0ID0gOjpDZXJ0Q3JlYXRlQ2VydGlmaWNhdGVDb250ZXh0KFBLQ1Nf
N19BU05fRU5DT0RJTkcgfCBYNTA5X0FTTl9FTkNPRElORywgZGF0YVJlZmVyZW5jZS5kYXRhKCks
IGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKTsKLSAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZUNvbnRleHQp
IHsKLSAgICAgICAgICAgIGMuY2xlYXJDZXJ0aWZpY2F0ZUNoYWluKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGMubV9jZXJ0aWZpY2F0
ZUNoYWluLmFwcGVuZChjZXJ0aWZpY2F0ZUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvOjpjbGVhckNlcnRpZmljYXRl
Q2hhaW4oKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jZXJ0aWZpY2F0ZUNoYWlu
LnNpemUoKTsgKytpKQotICAgICAgICA6OkNlcnRGcmVlQ2VydGlmaWNhdGVDb250ZXh0KG1fY2Vy
dGlmaWNhdGVDaGFpbltpXSk7Ci0gICAgbV9jZXJ0aWZpY2F0ZUNoYWluLmNsZWFyKCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L3dpbi9QbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3dp
bi9QbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3NjM3YmJiYzUyMTJlMTQ5ZGM3OTZhZDg4ZmMyZDE5MDNjYWRjYzFiLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93
aW4vUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvX2gKLSNkZWZp
bmUgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm9faAotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
Ci1uYW1lc3BhY2UgQ29yZUlQQyB7Ci0gICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwotICAgIGNs
YXNzIEFyZ3VtZW50RW5jb2RlcjsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNz
IFJlc291cmNlUmVzcG9uc2U7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBQbGF0
Zm9ybUNlcnRpZmljYXRlSW5mbyB7Ci1wdWJsaWM6Ci0gICAgUGxhdGZvcm1DZXJ0aWZpY2F0ZUlu
Zm8oKTsKLSAgICBleHBsaWNpdCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJik7ICAgIAotICAgIGV4cGxpY2l0IFBsYXRmb3JtQ2VydGlmaWNh
dGVJbmZvKFBDQ0VSVF9DT05URVhUKTsgICAgCi0gICAgflBsYXRmb3JtQ2VydGlmaWNhdGVJbmZv
KCk7Ci0KLSAgICBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhjb25zdCBQbGF0Zm9ybUNlcnRpZmlj
YXRlSW5mbyYpOwotICAgIFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvJiBvcGVyYXRvcj0oY29uc3Qg
UGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8mKTsKLQotICAgIGNvbnN0IFZlY3RvcjxQQ0NFUlRfQ09O
VEVYVD4mIGNlcnRpZmljYXRlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NlcnRpZmljYXRlQ2hh
aW47IH0KLQotICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0
OwotICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29k
ZXIsIFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvJiB0KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNs
ZWFyQ2VydGlmaWNhdGVDaGFpbigpOwotCi0gICAgVmVjdG9yPFBDQ0VSVF9DT05URVhUPiBtX2Nl
cnRpZmljYXRlQ2hhaW47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC93aW4vU2hhcmVhYmxlQml0bWFwV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93
aW4vU2hhcmVhYmxlQml0bWFwV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MmVkODQyOGIwNmM1NDljNjllMmJiZGIwNGIwNmRmZGM4Y2NlOWM1OS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2lu
L1NoYXJlYWJsZUJpdG1hcFdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1h
cC5oIgotCi0jaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hXbmREQy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUhEQyBTaGFyZWFi
bGVCaXRtYXA6OndpbmRvd3NDb250ZXh0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNCYWNrZWRC
eVNoYXJlZE1lbW9yeSgpKTsKLSAgICBpZiAobV93aW5kb3dzQ29udGV4dCkKLSAgICAgICAgcmV0
dXJuIG1fd2luZG93c0NvbnRleHQuZ2V0KCk7Ci0KLSAgICBIV25kREMgc2NyZWVuREMoMCk7Ci0g
ICAgQml0bWFwSW5mbyBibUluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChtX3NpemUp
OwotCi0gICAgbV93aW5kb3dzQ29udGV4dCA9IGFkb3B0UHRyKDo6Q3JlYXRlQ29tcGF0aWJsZURD
KHNjcmVlbkRDKSk7Ci0gICAgbV93aW5kb3dzQml0bWFwID0gYWRvcHRQdHIoQ3JlYXRlRElCU2Vj
dGlvbihtX3dpbmRvd3NDb250ZXh0LmdldCgpLCAmYm1JbmZvLCBESUJfUkdCX0NPTE9SUywgMCwg
bV9zaGFyZWRNZW1vcnktPmhhbmRsZSgpLCAwKSk7Ci0gICAgOjpTZWxlY3RPYmplY3QobV93aW5k
b3dzQ29udGV4dC5nZXQoKSwgbV93aW5kb3dzQml0bWFwLmdldCgpKTsKLQotICAgIHJldHVybiBt
X3dpbmRvd3NDb250ZXh0LmdldCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2lu
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2lu
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwNGRiMDhmZWIzZWY5MGExODFm
NDQ4ZDQ1NDZlMDAyZTkzNDU0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVy
c1dpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLQot
I2lmIFVTRShDRk5FVFdPUkspCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNDRi5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmgiCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJM
UmVxdWVzdFByaXYuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlQ0ZXaW4uaD4KLSNl
bmRpZgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgotI2lmIFVTRShDRk5FVFdP
UkspCi0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotI2lmIFVTRShDRk5FVFdP
UkspCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotI2VuZGlmCi0KLW5hbWVzcGFjZSBDb3JlSVBD
IHsKLQotLy8gRklYTUU6IFRoZXNlIGNvZGVycyBzaG91bGQgcmVhbGx5IGdvIGluIGEgV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzQ0ZOZXR3b3JrIGZpbGUuCi0KLXZvaWQgQXJndW1lbnRDb2RlcjxSZXNv
dXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKLXsKLSNpZiBVU0UoQ0ZO
RVRXT1JLKQotICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9IHJlc291cmNlUmVxdWVzdC5jZlVS
TFJlcXVlc3QoKTsKLSAgICBlbmNvZGVyIDw8IHJlcXVlc3RJc1ByZXNlbnQ7Ci0KLSAgICBpZiAo
IXJlcXVlc3RJc1ByZXNlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IGRpY3Rpb25hcnkoQWRvcHRDRiwgd2tDRlVSTFJlcXVlc3RDcmVhdGVTZXJp
YWxpemFibGVSZXByZXNlbnRhdGlvbihyZXNvdXJjZVJlcXVlc3QuY2ZVUkxSZXF1ZXN0KCksIENv
cmVJUEM6OnRva2VuTnVsbFR5cGVSZWYoKSkpOwotICAgIENvcmVJUEM6OmVuY29kZShlbmNvZGVy
LCBkaWN0aW9uYXJ5LmdldCgpKTsKLSNlbmRpZgotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8UmVz
b3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rl
ciwgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCi17Ci0jaWYgVVNFKENGTkVUV09S
SykKLSAgICBib29sIHJlcXVlc3RJc1ByZXNlbnQ7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
cmVxdWVzdElzUHJlc2VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghcmVx
dWVzdElzUHJlc2VudCkgewotICAgICAgICByZXNvdXJjZVJlcXVlc3QgPSBSZXNvdXJjZVJlcXVl
c3QoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4gZGljdGlvbmFyeTsKLSAgICBpZiAoIUNvcmVJUEM6OmRlY29kZShkZWNvZGVy
LCBkaWN0aW9uYXJ5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENG
VVJMUmVxdWVzdFJlZj4gY2ZVUkxSZXF1ZXN0KEFkb3B0Q0YsIHdrQ0ZVUkxSZXF1ZXN0Q3JlYXRl
RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKGRpY3Rpb25hcnkuZ2V0KCksIENvcmVJUEM6
OnRva2VuTnVsbFR5cGVSZWYoKSkpOwotICAgIGlmICghY2ZVUkxSZXF1ZXN0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZVVSTFJlcXVlc3RSZWY+IG11dGFi
bGVDRlVSTFJlcXVlc3QoQWRvcHRDRiwgQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZUNvcHkoMCwg
Y2ZVUkxSZXF1ZXN0LmdldCgpKSk7Ci0jaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotICAg
IHdrU2V0UmVxdWVzdFN0b3JhZ2VTZXNzaW9uKFJlc291cmNlSGFuZGxlOjpjdXJyZW50U3RvcmFn
ZVNlc3Npb24oKSwgbXV0YWJsZUNGVVJMUmVxdWVzdC5nZXQoKSk7Ci0jZW5kaWYKLQotICAgIHJl
c291cmNlUmVxdWVzdCA9IFJlc291cmNlUmVxdWVzdChtdXRhYmxlQ0ZVUkxSZXF1ZXN0LmdldCgp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19
Ci0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9uc2U+OjplbmNvZGVQbGF0Zm9y
bURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNvdXJjZVJlc3BvbnNlKQotewotI2lmIFVTRShDRk5FVFdPUkspCi0gICAgYm9vbCByZXNwb25z
ZUlzUHJlc2VudCA9IHJlc291cmNlUmVzcG9uc2UuY2ZVUkxSZXNwb25zZSgpOwotICAgIGVuY29k
ZXIgPDwgcmVzcG9uc2VJc1ByZXNlbnQ7Ci0KLSAgICBpZiAoIXJlc3BvbnNlSXNQcmVzZW50KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBkaWN0aW9u
YXJ5KEFkb3B0Q0YsIHdrQ0ZVUkxSZXNwb25zZUNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0
aW9uKHJlc291cmNlUmVzcG9uc2UuY2ZVUkxSZXNwb25zZSgpLCBDb3JlSVBDOjp0b2tlbk51bGxU
eXBlUmVmKCkpKTsKLSAgICBDb3JlSVBDOjplbmNvZGUoZW5jb2RlciwgZGljdGlvbmFyeS5nZXQo
KSk7Ci0jZW5kaWYKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9uc2U+Ojpk
ZWNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNvdXJjZVJlc3BvbnNlKQotewotI2lmIFVTRShDRk5FVFdPUkspCi0gICAgYm9vbCBy
ZXNwb25zZUlzUHJlc2VudDsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShyZXNwb25zZUlzUHJl
c2VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghcmVzcG9uc2VJc1ByZXNl
bnQpIHsKLSAgICAgICAgcmVzb3VyY2VSZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UoKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gZGljdGlvbmFyeTsKLSAgICBpZiAoIUNvcmVJUEM6OmRlY29kZShkZWNvZGVyLCBkaWN0aW9u
YXJ5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVzcG9u
c2VSZWY+IGNmVVJMUmVzcG9uc2UoQWRvcHRDRiwgd2tDRlVSTFJlc3BvbnNlQ3JlYXRlRnJvbVNl
cmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKGRpY3Rpb25hcnkuZ2V0KCksIENvcmVJUEM6OnRva2Vu
TnVsbFR5cGVSZWYoKSkpOwotICAgIGlmICghY2ZVUkxSZXNwb25zZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmVzb3VyY2VSZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UoY2ZVUkxS
ZXNwb25zZS5nZXQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxz
ZTsKLSNlbmRpZgotfQotCi0KLXZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUVycm9yPjo6ZW5j
b2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVzb3VyY2VF
cnJvciYgcmVzb3VyY2VFcnJvcikKLXsKLSNpZiBVU0UoQ0ZORVRXT1JLKQotICAgIGVuY29kZXIg
PDwgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8ocmVzb3VyY2VFcnJvci5jZXJ0aWZpY2F0ZSgpKTsK
LSNlbmRpZgotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VFcnJvcj46OmRlY29kZVBs
YXRmb3JtRGF0YShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlc291cmNlRXJyb3ImIHJlc291
cmNlRXJyb3IpCi17Ci0jaWYgVVNFKENGTkVUV09SSykKLSAgICBQbGF0Zm9ybUNlcnRpZmljYXRl
SW5mbyBjZXJ0aWZpY2F0ZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShjZXJ0aWZpY2F0ZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBjb25zdCBWZWN0b3I8UENDRVJUX0NP
TlRFWFQ+IGNlcnRpZmljYXRlQ2hhaW4gPSBjZXJ0aWZpY2F0ZS5jZXJ0aWZpY2F0ZUNoYWluKCk7
Ci0gICAgaWYgKCFjZXJ0aWZpY2F0ZUNoYWluLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzb3VyY2VF
cnJvci5zZXRDZXJ0aWZpY2F0ZShjb3B5Q2VydGlmaWNhdGVUb0RhdGEoY2VydGlmaWNhdGVDaGFp
bi5maXJzdCgpKS5nZXQoKSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8v
IG5hbWVzcGFjZSBDb3JlSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2lu
L1dlYkV2ZW50RmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2luL1dlYkV2ZW50
RmFjdG9yeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0YTY3ZmMwZWJkMDE1
NWU4NmQ1ZTU1YjBiMjJhMGZiMWZiODJmZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9XZWJFdmVudEZhY3Rv
cnkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA2LTIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgotCi0jaW5j
bHVkZSA8d2luZG93c3guaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzaG9ydCBISUdIX0JJVF9NQVNLX1NIT1JUID0gMHg4MDAwOwotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNob3J0IFNQSV9HRVRXSEVFTFNDUk9MTENIQVJTID0gMHgwMDZDOwotCi1zdGF0
aWMgY29uc3QgdW5zaWduZWQgV01fVklTVEFfTU9VU0VIV0hFRUwgPSAweDIwRTsKLQotc3RhdGlj
IGlubGluZSBMUEFSQU0gcmVsYXRpdmVDdXJzb3JQb3NpdGlvbihIV05EIGh3bmQpCi17Ci0gICAg
UE9JTlQgcG9pbnQgPSB7IC0xLCAtMSB9OwotICAgIDo6R2V0Q3Vyc29yUG9zKCZwb2ludCk7Ci0g
ICAgOjpTY3JlZW5Ub0NsaWVudChod25kLCAmcG9pbnQpOwotICAgIHJldHVybiBNQUtFTFBBUkFN
KHBvaW50LngsIHBvaW50LnkpOwotfQotCi1zdGF0aWMgaW5saW5lIFBPSU5UIHBvaW50KExQQVJB
TSBsUGFyYW0pCi17Ci0gICAgUE9JTlQgcG9pbnQgPSB7IEdFVF9YX0xQQVJBTShsUGFyYW0pLCBH
RVRfWV9MUEFSQU0obFBhcmFtKSB9OwotICAgIHJldHVybiBwb2ludDsKLX0KLQotc3RhdGljIGlu
dCBob3Jpem9udGFsU2Nyb2xsQ2hhcnMoKQotewotICAgIHN0YXRpYyBVTE9ORyBzY3JvbGxDaGFy
czsKLSAgICBpZiAoIXNjcm9sbENoYXJzICYmICE6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9H
RVRXSEVFTFNDUk9MTENIQVJTLCAwLCAmc2Nyb2xsQ2hhcnMsIDApKQotICAgICAgICBzY3JvbGxD
aGFycyA9IDE7Ci0gICAgcmV0dXJuIHNjcm9sbENoYXJzOwotfQotCi1zdGF0aWMgaW50IHZlcnRp
Y2FsU2Nyb2xsTGluZXMoKQotewotICAgIHN0YXRpYyBVTE9ORyBzY3JvbGxMaW5lczsKLSAgICBp
ZiAoIXNjcm9sbExpbmVzICYmICE6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRXSEVFTFND
Uk9MTExJTkVTLCAwLCAmc2Nyb2xsTGluZXMsIDApKQotICAgICAgICBzY3JvbGxMaW5lcyA9IDM7
Ci0gICAgcmV0dXJuIHNjcm9sbExpbmVzOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjbGlja0Nv
dW50KFdlYkV2ZW50OjpUeXBlIHR5cGUsIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBidXR0b24sIGNv
bnN0IFBPSU5UJiBwb3NpdGlvbiwgZG91YmxlIHRpbWVTdGFtcFNlY29uZHMpCi17Ci0gICAgc3Rh
dGljIGludCBnTGFzdENsaWNrQ291bnQ7Ci0gICAgc3RhdGljIGRvdWJsZSBnTGFzdENsaWNrVGlt
ZTsKLSAgICBzdGF0aWMgUE9JTlQgbGFzdENsaWNrUG9zaXRpb247Ci0gICAgc3RhdGljIFdlYk1v
dXNlRXZlbnQ6OkJ1dHRvbiBsYXN0Q2xpY2tCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0
dG9uOwotCi0gICAgYm9vbCBjYW5jZWxQcmV2aW91c0NsaWNrID0gKGFicyhsYXN0Q2xpY2tQb3Np
dGlvbi54IC0gcG9zaXRpb24ueCkgPiAoOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYRE9VQkxFQ0xL
KSAvIDIpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChhYnMobGFzdENsaWNrUG9z
aXRpb24ueSAtIHBvc2l0aW9uLnkpID4gKDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWURPVUJMRUNM
SykgLyAyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKHRpbWVTdGFtcFNlY29u
ZHMgLSBnTGFzdENsaWNrVGltZSkgKiAxMDAwLjAgPiA6OkdldERvdWJsZUNsaWNrVGltZSgpKTsK
LQotICAgIGlmICh0eXBlID09IFdlYkV2ZW50OjpNb3VzZURvd24pIHsKLSAgICAgICAgaWYgKCFj
YW5jZWxQcmV2aW91c0NsaWNrICYmIChidXR0b24gPT0gbGFzdENsaWNrQnV0dG9uKSkKLSAgICAg
ICAgICAgICsrZ0xhc3RDbGlja0NvdW50OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGdM
YXN0Q2xpY2tDb3VudCA9IDE7Ci0gICAgICAgICAgICBsYXN0Q2xpY2tQb3NpdGlvbiA9IHBvc2l0
aW9uOwotICAgICAgICB9Ci0gICAgICAgIGdMYXN0Q2xpY2tUaW1lID0gdGltZVN0YW1wU2Vjb25k
czsKLSAgICAgICAgbGFzdENsaWNrQnV0dG9uID0gYnV0dG9uOwotICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBXZWJFdmVudDo6TW91c2VNb3ZlKSB7Ci0gICAgICAgIGlmIChjYW5jZWxQcmV2aW91c0Ns
aWNrKSB7Ci0gICAgICAgICAgICBnTGFzdENsaWNrQ291bnQgPSAwOwotICAgICAgICAgICAgbGFz
dENsaWNrUG9zaXRpb24ueCA9IDA7Ci0gICAgICAgICAgICBsYXN0Q2xpY2tQb3NpdGlvbi55ID0g
MDsKLSAgICAgICAgICAgIGdMYXN0Q2xpY2tUaW1lID0gMDsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBnTGFzdENsaWNrQ291bnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgV2ViRXZlbnQ6
Ok1vZGlmaWVycyBtb2RpZmllcnNGb3JFdmVudChXUEFSQU0gd3BhcmFtKQotewotICAgIHVuc2ln
bmVkIG1vZGlmaWVycyA9IDA7Ci0gICAgaWYgKHdwYXJhbSAmIE1LX0NPTlRST0wpCi0gICAgICAg
IG1vZGlmaWVycyB8PSBXZWJFdmVudDo6Q29udHJvbEtleTsKLSAgICBpZiAod3BhcmFtICYgTUtf
U0hJRlQpCi0gICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6U2hpZnRLZXk7Ci0gICAgaWYg
KDo6R2V0S2V5U3RhdGUoVktfTUVOVSkgJiBISUdIX0JJVF9NQVNLX1NIT1JUKQotICAgICAgICBt
b2RpZmllcnMgfD0gV2ViRXZlbnQ6OkFsdEtleTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vi
RXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJzKTsKLX0KLQotc3RhdGljIGlubGluZSBXZWJFdmVu
dDo6TW9kaWZpZXJzIG1vZGlmaWVyc0ZvckN1cnJlbnRLZXlTdGF0ZSgpCi17Ci0gICAgdW5zaWdu
ZWQgbW9kaWZpZXJzID0gMDsKLSAgICBpZiAoOjpHZXRLZXlTdGF0ZShWS19DT05UUk9MKSAmIEhJ
R0hfQklUX01BU0tfU0hPUlQpCi0gICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6Q29udHJv
bEtleTsKLSAgICBpZiAoOjpHZXRLZXlTdGF0ZShWS19TSElGVCkgJiBISUdIX0JJVF9NQVNLX1NI
T1JUKQotICAgICAgICBtb2RpZmllcnMgfD0gV2ViRXZlbnQ6OlNoaWZ0S2V5OwotICAgIGlmICg6
OkdldEtleVN0YXRlKFZLX01FTlUpICYgSElHSF9CSVRfTUFTS19TSE9SVCkKLSAgICAgICAgbW9k
aWZpZXJzIHw9IFdlYkV2ZW50OjpBbHRLZXk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkV2
ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVycyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgV2ViRXZlbnQ6
OlR5cGUga2V5Ym9hcmRFdmVudFR5cGVGb3JFdmVudChVSU5UIG1lc3NhZ2UpCi17Ci0gICAgc3dp
dGNoIChtZXNzYWdlKSB7Ci0gICAgY2FzZSBXTV9TWVNLRVlET1dOOgotICAgIGNhc2UgV01fS0VZ
RE9XTjoKLSAgICAgICAgcmV0dXJuIFdlYkV2ZW50OjpSYXdLZXlEb3duOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFdNX1NZU0tFWVVQOgotICAgIGNhc2UgV01fS0VZVVA6Ci0gICAgICAgIHJl
dHVybiBXZWJFdmVudDo6S2V5VXA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV01fSU1FX0NI
QVI6Ci0gICAgY2FzZSBXTV9TWVNDSEFSOgotICAgIGNhc2UgV01fQ0hBUjoKLSAgICAgICAgcmV0
dXJuIFdlYkV2ZW50OjpDaGFyOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFdlYkV2ZW50OjpDaGFyOwot
ICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzU3lzdGVtS2V5RXZlbnQoVUlOVCBtZXNz
YWdlKQotewotICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAgIGNhc2UgV01fU1lTS0VZRE9XTjoK
LSAgICBjYXNlIFdNX1NZU0tFWVVQOgotICAgIGNhc2UgV01fU1lTQ0hBUjoKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0K
LQotc3RhdGljIGJvb2wgaXNLZXlwYWRFdmVudChXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFt
LCBXZWJFdmVudDo6VHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlICE9IFdlYkV2ZW50OjpSYXdL
ZXlEb3duICYmIHR5cGUgIT0gV2ViRXZlbnQ6OktleVVwKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBzd2l0Y2ggKHdQYXJhbSkgewotICAgIGNhc2UgVktfTlVNTE9DSzoKLSAgICBjYXNl
IFZLX05VTVBBRDA6Ci0gICAgY2FzZSBWS19OVU1QQUQxOgotICAgIGNhc2UgVktfTlVNUEFEMjoK
LSAgICBjYXNlIFZLX05VTVBBRDM6Ci0gICAgY2FzZSBWS19OVU1QQUQ0OgotICAgIGNhc2UgVktf
TlVNUEFENToKLSAgICBjYXNlIFZLX05VTVBBRDY6Ci0gICAgY2FzZSBWS19OVU1QQUQ3OgotICAg
IGNhc2UgVktfTlVNUEFEODoKLSAgICBjYXNlIFZLX05VTVBBRDk6Ci0gICAgY2FzZSBWS19NVUxU
SVBMWToKLSAgICBjYXNlIFZLX0FERDoKLSAgICBjYXNlIFZLX1NFUEFSQVRPUjoKLSAgICBjYXNl
IFZLX1NVQlRSQUNUOgotICAgIGNhc2UgVktfREVDSU1BTDoKLSAgICBjYXNlIFZLX0RJVklERToK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBWS19SRVRVUk46Ci0gICAgICAgIHJldHVy
biBISVdPUkQobFBhcmFtKSAmIEtGX0VYVEVOREVEOwotICAgIGNhc2UgVktfSU5TRVJUOgotICAg
IGNhc2UgVktfREVMRVRFOgotICAgIGNhc2UgVktfUFJJT1I6Ci0gICAgY2FzZSBWS19ORVhUOgot
ICAgIGNhc2UgVktfRU5EOgotICAgIGNhc2UgVktfSE9NRToKLSAgICBjYXNlIFZLX0xFRlQ6Ci0g
ICAgY2FzZSBWS19VUDoKLSAgICBjYXNlIFZLX1JJR0hUOgotICAgIGNhc2UgVktfRE9XTjoKLSAg
ICAgICAgcmV0dXJuICEoSElXT1JEKGxQYXJhbSkgJiBLRl9FWFRFTkRFRCk7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc3RhdGljIFN0cmluZyB0ZXh0
RnJvbUV2ZW50KFdQQVJBTSB3cGFyYW0sIFdlYkV2ZW50OjpUeXBlIHR5cGUpCi17Ci0gICAgaWYg
KHR5cGUgIT0gV2ViRXZlbnQ6OkNoYXIpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAg
IFVDaGFyIGMgPSBzdGF0aWNfY2FzdDxVQ2hhcj4od3BhcmFtKTsKLSAgICByZXR1cm4gU3RyaW5n
KCZjLCAxKTsKLX0KLQotc3RhdGljIFN0cmluZyB1bm1vZGlmaWVkVGV4dEZyb21FdmVudChXUEFS
QU0gd3BhcmFtLCBXZWJFdmVudDo6VHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlICE9IFdlYkV2
ZW50OjpDaGFyKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBVQ2hhciBjID0gc3Rh
dGljX2Nhc3Q8VUNoYXI+KHdwYXJhbSk7Ci0gICAgcmV0dXJuIFN0cmluZygmYywgMSk7Ci19Ci0K
LXN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZyb21FdmVudChXUEFSQU0gd3BhcmFtLCBXZWJF
dmVudDo6VHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlID09IFdlYkV2ZW50OjpDaGFyKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgCi0gICAgdW5zaWduZWQgc2hvcnQga2V5Q29kZSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih3cGFyYW0pOwotICAgIHN3aXRjaCAoa2V5Q29k
ZSkgewotICAgIGNhc2UgVktfTUVOVToKLSAgICAgICAgcmV0dXJuIFN0cmluZygiQWx0Iik7Ci0g
ICAgY2FzZSBWS19DT05UUk9MOgotICAgICAgICByZXR1cm4gU3RyaW5nKCJDb250cm9sIik7Ci0g
ICAgY2FzZSBWS19TSElGVDoKLSAgICAgICAgcmV0dXJuIFN0cmluZygiU2hpZnQiKTsKLSAgICBj
YXNlIFZLX0NBUElUQUw6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoIkNhcHNMb2NrIik7Ci0gICAg
Y2FzZSBWS19MV0lOOgotICAgIGNhc2UgVktfUldJTjoKLSAgICAgICAgcmV0dXJuIFN0cmluZygi
V2luIik7Ci0gICAgY2FzZSBWS19DTEVBUjoKLSAgICAgICAgcmV0dXJuIFN0cmluZygiQ2xlYXIi
KTsKLSAgICBjYXNlIFZLX0RPV046Ci0gICAgICAgIHJldHVybiBTdHJpbmcoIkRvd24iKTsKLSAg
ICBjYXNlIFZLX0VORDoKLSAgICAgICAgcmV0dXJuIFN0cmluZygiRW5kIik7Ci0gICAgY2FzZSBW
S19SRVRVUk46Ci0gICAgICAgIHJldHVybiBTdHJpbmcoIkVudGVyIik7Ci0gICAgY2FzZSBWS19F
WEVDVVRFOgotICAgICAgICByZXR1cm4gU3RyaW5nKCJFeGVjdXRlIik7Ci0gICAgY2FzZSBWS19G
MToKLSAgICAgICAgcmV0dXJuIFN0cmluZygiRjEiKTsKLSAgICBjYXNlIFZLX0YyOgotICAgICAg
ICByZXR1cm4gU3RyaW5nKCJGMiIpOwotICAgIGNhc2UgVktfRjM6Ci0gICAgICAgIHJldHVybiBT
dHJpbmcoIkYzIik7Ci0gICAgY2FzZSBWS19GNDoKLSAgICAgICAgcmV0dXJuIFN0cmluZygiRjQi
KTsKLSAgICBjYXNlIFZLX0Y1OgotICAgICAgICByZXR1cm4gU3RyaW5nKCJGNSIpOwotICAgIGNh
c2UgVktfRjY6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoIkY2Iik7Ci0gICAgY2FzZSBWS19GNzoK
LSAgICAgICAgcmV0dXJuIFN0cmluZygiRjciKTsKLSAgICBjYXNlIFZLX0Y4OgotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCJGOCIpOwotICAgIGNhc2UgVktfRjk6Ci0gICAgICAgIHJldHVybiBTdHJp
bmcoIkY5Iik7Ci0gICAgY2FzZSBWS19GMTA6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoIkYxMSIp
OwotICAgIGNhc2UgVktfRjEyOgotICAgICAgICByZXR1cm4gU3RyaW5nKCJGMTIiKTsKLSAgICBj
YXNlIFZLX0YxMzoKLSAgICAgICAgcmV0dXJuIFN0cmluZygiRjEzIik7Ci0gICAgY2FzZSBWS19G
MTQ6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoIkYxNCIpOwotICAgIGNhc2UgVktfRjE1OgotICAg
ICAgICByZXR1cm4gU3RyaW5nKCJGMTUiKTsKLSAgICBjYXNlIFZLX0YxNjoKLSAgICAgICAgcmV0
dXJuIFN0cmluZygiRjE2Iik7Ci0gICAgY2FzZSBWS19GMTc6Ci0gICAgICAgIHJldHVybiBTdHJp
bmcoIkYxNyIpOwotICAgIGNhc2UgVktfRjE4OgotICAgICAgICByZXR1cm4gU3RyaW5nKCJGMTgi
KTsKLSAgICBjYXNlIFZLX0YxOToKLSAgICAgICAgcmV0dXJuIFN0cmluZygiRjE5Iik7Ci0gICAg
Y2FzZSBWS19GMjA6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoIkYyMCIpOwotICAgIGNhc2UgVktf
RjIxOgotICAgICAgICByZXR1cm4gU3RyaW5nKCJGMjEiKTsKLSAgICBjYXNlIFZLX0YyMjoKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygiRjIyIik7Ci0gICAgY2FzZSBWS19GMjM6Ci0gICAgICAgIHJl
dHVybiBTdHJpbmcoIkYyMyIpOwotICAgIGNhc2UgVktfRjI0OgotICAgICAgICByZXR1cm4gU3Ry
aW5nKCJGMjQiKTsKLSAgICBjYXNlIFZLX0hFTFA6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoIkhl
bHAiKTsKLSAgICBjYXNlIFZLX0hPTUU6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoIkhvbWUiKTsK
LSAgICBjYXNlIFZLX0lOU0VSVDoKLSAgICAgICAgcmV0dXJuIFN0cmluZygiSW5zZXJ0Iik7Ci0g
ICAgY2FzZSBWS19MRUZUOgotICAgICAgICByZXR1cm4gU3RyaW5nKCJMZWZ0Iik7Ci0gICAgY2Fz
ZSBWS19ORVhUOgotICAgICAgICByZXR1cm4gU3RyaW5nKCJQYWdlRG93biIpOwotICAgIGNhc2Ug
VktfUFJJT1I6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoIlBhZ2VVcCIpOwotICAgIGNhc2UgVktf
UEFVU0U6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoIlBhdXNlIik7Ci0gICAgY2FzZSBWS19TTkFQ
U0hPVDoKLSAgICAgICAgcmV0dXJuIFN0cmluZygiUHJpbnRTY3JlZW4iKTsKLSAgICBjYXNlIFZL
X1JJR0hUOgotICAgICAgICByZXR1cm4gU3RyaW5nKCJSaWdodCIpOwotICAgIGNhc2UgVktfU0NS
T0xMOgotICAgICAgICByZXR1cm4gU3RyaW5nKCJTY3JvbGwiKTsKLSAgICBjYXNlIFZLX1NFTEVD
VDoKLSAgICAgICAgcmV0dXJuIFN0cmluZygiU2VsZWN0Iik7Ci0gICAgY2FzZSBWS19VUDoKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygiVXAiKTsKLSAgICBjYXNlIFZLX0RFTEVURToKLSAgICAgICAg
cmV0dXJuIFN0cmluZygiVSswMDdGIik7IC8vIFN0YW5kYXJkIHNheXMgdGhhdCBERUwgYmVjb21l
cyBVKzAwN0YuCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJV
KyUwNFgiLCB0b0FTQ0lJVXBwZXIoa2V5Q29kZSkpOwotICAgIH0KLX0KLQotV2ViTW91c2VFdmVu
dCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wgZGlkQWN0aXZhdGVXZWJW
aWV3KQotewotICAgIFdlYkV2ZW50OjpUeXBlIHR5cGU7Ci0gICAgV2ViTW91c2VFdmVudDo6QnV0
dG9uIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOwotICAgIHN3aXRjaCAobWVzc2Fn
ZSkgewotICAgIGNhc2UgV01fTU9VU0VNT1ZFOgotICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1v
dXNlTW92ZTsKLSAgICAgICAgaWYgKHdQYXJhbSAmIE1LX0xCVVRUT04pCi0gICAgICAgICAgICBi
dXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOwotICAgICAgICBlbHNlIGlmICh3UGFy
YW0gJiBNS19NQlVUVE9OKQotICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6TWlk
ZGxlQnV0dG9uOwotICAgICAgICBlbHNlIGlmICh3UGFyYW0gJiBNS19SQlVUVE9OKQotICAgICAg
ICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b247Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgV01fTU9VU0VMRUFWRToKLSAgICAgICAgdHlwZSA9IFdlYkV2ZW50OjpNb3Vz
ZU1vdmU7Ci0gICAgICAgIGlmICh3UGFyYW0gJiBNS19MQlVUVE9OKQotICAgICAgICAgICAgYnV0
dG9uID0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjsKLSAgICAgICAgZWxzZSBpZiAod1BhcmFt
ICYgTUtfTUJVVFRPTikKLSAgICAgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1pZGRs
ZUJ1dHRvbjsKLSAgICAgICAgZWxzZSBpZiAod1BhcmFtICYgTUtfUkJVVFRPTikKLSAgICAgICAg
ICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOwotCi0gICAgICAgIC8vIFNl
dCB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlvbiAocmVsYXRpdmUgdG8gdGhlIGNsaWVudCBhcmVh
IG9mIHRoZQotICAgICAgICAvLyBjdXJyZW50IHdpbmRvdykgc2luY2Ugbm9uZSBpcyBzcGVjaWZp
ZWQgZm9yIHRoaXMgZXZlbnQuCi0gICAgICAgIGxQYXJhbSA9IHJlbGF0aXZlQ3Vyc29yUG9zaXRp
b24oaFduZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV01fTEJVVFRPTkRPV046Ci0gICAg
Y2FzZSBXTV9MQlVUVE9OREJMQ0xLOgotICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlRG93
bjsKLSAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBXTV9NQlVUVE9ORE9XTjoKLSAgICBjYXNlIFdNX01CVVRUT05EQkxD
TEs6Ci0gICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VEb3duOwotICAgICAgICBidXR0b24g
PSBXZWJNb3VzZUV2ZW50OjpNaWRkbGVCdXR0b247Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V01fUkJVVFRPTkRPV046Ci0gICAgY2FzZSBXTV9SQlVUVE9OREJMQ0xLOgotICAgICAgICB0eXBl
ID0gV2ViRXZlbnQ6Ok1vdXNlRG93bjsKLSAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6
UmlnaHRCdXR0b247Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV01fTEJVVFRPTlVQOgotICAg
ICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlVXA7Ci0gICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNl
RXZlbnQ6OkxlZnRCdXR0b247Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV01fTUJVVFRPTlVQ
OgotICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlVXA7Ci0gICAgICAgIGJ1dHRvbiA9IFdl
Yk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9S
QlVUVE9OVVA6Ci0gICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VVcDsKLSAgICAgICAgYnV0
dG9uID0gV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b247Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0eXBlID0gV2Vi
RXZlbnQ6OktleURvd247Ci0gICAgfQotCi0gICAgUE9JTlQgcG9zaXRpb24gPSBwb2ludChsUGFy
YW0pOwotICAgIFBPSU5UIGdsb2JhbFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgOjpDbGllbnRU
b1NjcmVlbihoV25kLCAmZ2xvYmFsUG9zaXRpb24pOwotCi0gICAgZG91YmxlIHRpbWVzdGFtcCA9
IDo6R2V0VGlja0NvdW50KCkgKiAwLjAwMTsgLy8gOjpHZXRUaWNrQ291bnQgcmV0dXJucyBtaWxs
aXNlY29uZHMgKENocm9tZSB1c2VzIEdldE1lc3NhZ2VUaW1lKCkgLyAxMDAwLjApCi0KLSAgICBp
bnQgY2xpY2tDb3VudCA9IFdlYktpdDo6Y2xpY2tDb3VudCh0eXBlLCBidXR0b24sIHBvc2l0aW9u
LCB0aW1lc3RhbXApOwotICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzID0gbW9kaWZp
ZXJzRm9yRXZlbnQod1BhcmFtKTsKLQotICAgIHJldHVybiBXZWJNb3VzZUV2ZW50KHR5cGUsIGJ1
dHRvbiwgcG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCAwLCAwLCAwLCBjbGlja0NvdW50LCBtb2Rp
ZmllcnMsIHRpbWVzdGFtcCwgZGlkQWN0aXZhdGVXZWJWaWV3KTsKLX0KLQotV2ViV2hlZWxFdmVu
dCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgLy8gVGFrZW4gZnJv
bSBXZWJDb3JlCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5l
ID0gMTAwLjBmIC8gMy4wZjsKLQotICAgIFBPSU5UIGdsb2JhbFBvc2l0aW9uID0gcG9pbnQobFBh
cmFtKTsKLSAgICBQT0lOVCBwb3NpdGlvbiA9IGdsb2JhbFBvc2l0aW9uOwotICAgIDo6U2NyZWVu
VG9DbGllbnQoaFduZCwgJnBvc2l0aW9uKTsKLQotICAgIFdlYldoZWVsRXZlbnQ6OkdyYW51bGFy
aXR5IGdyYW51bGFyaXR5ICA9IFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50
OwotCi0gICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVu
dCh3UGFyYW0pOwotICAgIGRvdWJsZSB0aW1lc3RhbXAgPSA6OkdldFRpY2tDb3VudCgpICogMC4w
MDE7IC8vIDo6R2V0VGlja0NvdW50IHJldHVybnMgbWlsbGlzZWNvbmRzIChDaHJvbWUgdXNlcyBH
ZXRNZXNzYWdlVGltZSgpIC8gMTAwMC4wKQotCi0gICAgaW50IGRlbHRhWCA9IDA7Ci0gICAgaW50
IGRlbHRhWSA9IDA7Ci0gICAgaW50IHdoZWVsVGlja3NYID0gMDsKLSAgICBpbnQgd2hlZWxUaWNr
c1kgPSAwOwotCi0gICAgZmxvYXQgZGVsdGEgPSBHRVRfV0hFRUxfREVMVEFfV1BBUkFNKHdQYXJh
bSkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oV0hFRUxfREVMVEEpOwotICAgIGJvb2wgaXNNb3VzZUhX
aGVlbCA9IChtZXNzYWdlID09IFdNX1ZJU1RBX01PVVNFSFdIRUVMKTsKLSAgICBpZiAoaXNNb3Vz
ZUhXaGVlbCkgewotICAgICAgICB3aGVlbFRpY2tzWCA9IGRlbHRhOwotICAgICAgICB3aGVlbFRp
Y2tzWSA9IDA7Ci0gICAgICAgIGRlbHRhID0gLWRlbHRhOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHdoZWVsVGlja3NYID0gMDsKLSAgICAgICAgd2hlZWxUaWNrc1kgPSBkZWx0YTsKLSAgICB9Ci0g
ICAgaWYgKGlzTW91c2VIV2hlZWwgfHwgKG1vZGlmaWVycyAmIFdlYkV2ZW50OjpTaGlmdEtleSkp
IHsKLSAgICAgICAgZGVsdGFYID0gZGVsdGEgKiBzdGF0aWNfY2FzdDxmbG9hdD4oaG9yaXpvbnRh
bFNjcm9sbENoYXJzKCkpICogY1Njcm9sbGJhclBpeGVsc1BlckxpbmU7Ci0gICAgICAgIGRlbHRh
WSA9IDA7Ci0gICAgICAgIGdyYW51bGFyaXR5ID0gV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhl
bFdoZWVsRXZlbnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVsdGFYID0gMDsKLSAgICAgICAg
ZGVsdGFZID0gZGVsdGE7Ci0gICAgICAgIGludCB2ZXJ0aWNhbE11bHRpcGxpZXIgPSB2ZXJ0aWNh
bFNjcm9sbExpbmVzKCk7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbE11bHRpcGxpZXIgPT0gV0hFRUxf
UEFHRVNDUk9MTCkKLSAgICAgICAgICAgIGdyYW51bGFyaXR5ID0gV2ViV2hlZWxFdmVudDo6U2Ny
b2xsQnlQYWdlV2hlZWxFdmVudDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBncmFudWxh
cml0eSA9IFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OwotICAgICAgICAg
ICAgZGVsdGFZICo9IHN0YXRpY19jYXN0PGZsb2F0Pih2ZXJ0aWNhbE11bHRpcGxpZXIpICogY1Nj
cm9sbGJhclBpeGVsc1BlckxpbmU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gV2Vi
V2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIHBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgRmxv
YXRTaXplKGRlbHRhWCwgZGVsdGFZKSwgRmxvYXRTaXplKHdoZWVsVGlja3NYLCB3aGVlbFRpY2tz
WSksIGdyYW51bGFyaXR5LCBtb2RpZmllcnMsIHRpbWVzdGFtcCk7Ci19Ci0KLVdlYktleWJvYXJk
RXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KEhXTkQgaHduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBhcmFtKQotewotICAgIFdlYkV2
ZW50OjpUeXBlIHR5cGUgICAgICAgICAgICAgPSBrZXlib2FyZEV2ZW50VHlwZUZvckV2ZW50KG1l
c3NhZ2UpOwotICAgIFN0cmluZyB0ZXh0ICAgICAgICAgICAgICAgICAgICAgPSB0ZXh0RnJvbUV2
ZW50KHdwYXJhbSwgdHlwZSk7Ci0gICAgU3RyaW5nIHVubW9kaWZpZWRUZXh0ICAgICAgICAgICA9
IHVubW9kaWZpZWRUZXh0RnJvbUV2ZW50KHdwYXJhbSwgdHlwZSk7Ci0gICAgU3RyaW5nIGtleUlk
ZW50aWZpZXIgICAgICAgICAgICA9IGtleUlkZW50aWZpZXJGcm9tRXZlbnQod3BhcmFtLCB0eXBl
KTsKLSAgICBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlICAgICAgID0gc3RhdGljX2Nhc3Q8aW50
Pih3cGFyYW0pOwotICAgIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSAgICAgICAgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHdwYXJhbSk7Ci0gICAgaW50IG1hY0NoYXJDb2RlICAgICAgICAgICAgICAgICA9
IDA7Ci0gICAgYm9vbCBhdXRvUmVwZWF0ICAgICAgICAgICAgICAgICA9IEhJV09SRChscGFyYW0p
ICYgS0ZfUkVQRUFUOwotICAgIGJvb2wgaXNLZXlwYWQgICAgICAgICAgICAgICAgICAgPSBpc0tl
eXBhZEV2ZW50KHdwYXJhbSwgbHBhcmFtLCB0eXBlKTsKLSAgICBib29sIGlzU3lzdGVtS2V5ICAg
ICAgICAgICAgICAgID0gaXNTeXN0ZW1LZXlFdmVudChtZXNzYWdlKTsKLSAgICBXZWJFdmVudDo6
TW9kaWZpZXJzIG1vZGlmaWVycyAgID0gbW9kaWZpZXJzRm9yQ3VycmVudEtleVN0YXRlKCk7Ci0g
ICAgZG91YmxlIHRpbWVzdGFtcCAgICAgICAgICAgICAgICA9IDo6R2V0VGlja0NvdW50KCkgKiAw
LjAwMTsgLy8gOjpHZXRUaWNrQ291bnQgcmV0dXJucyBtaWxsaXNlY29uZHMgKENocm9tZSB1c2Vz
IEdldE1lc3NhZ2VUaW1lKCkgLyAxMDAwLjApCi0KLSAgICByZXR1cm4gV2ViS2V5Ym9hcmRFdmVu
dCh0eXBlLCB0ZXh0LCB1bm1vZGlmaWVkVGV4dCwga2V5SWRlbnRpZmllciwgd2luZG93c1ZpcnR1
YWxLZXlDb2RlLCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgbWFjQ2hhckNvZGUsIGF1dG9SZXBlYXQs
IGlzS2V5cGFkLCBpc1N5c3RlbUtleSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4v
V2ViRXZlbnRGYWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2luL1dlYkV2ZW50RmFj
dG9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTc1Y2RmNjAxOWM2ZTJjY2Fi
NDEyZThhZTQwNmJmY2E1ZGYxNWVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5LmgK
KysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJF
dmVudEZhY3RvcnlfaAotI2RlZmluZSBXZWJFdmVudEZhY3RvcnlfaAotCi0jaW5jbHVkZSAiV2Vi
RXZlbnQuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIEZJWE1FOiBUaGlzIGlzIG5vdCBu
ZWVkZWQgaW4gdGhlIFdlYlByb2Nlc3MgYW5kIHNob3VsZCBiZSBtb3ZlZCB0byBiZSBhIHBlZXIK
LS8vIG9mIFdLVmlldyBvciByZW1vdmVkIGFsdG9nZXRoZXIgaW4gZmF2b3Igb2YgdXNpbmcgUGxh
dGZvcm1FdmVudHMgZXZlcnl3aGVyZS4KLQotY2xhc3MgV2ViRXZlbnRGYWN0b3J5IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgV2ViTW91c2VFdmVudCBjcmVhdGVXZWJNb3VzZUV2ZW50KEhXTkQsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wgZGlkQWN0aXZhdGVXZWJWaWV3KTsKLSAg
ICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVhdGVXZWJXaGVlbEV2ZW50KEhXTkQsIFVJTlQgbWVz
c2FnZSwgV1BBUkFNLCBMUEFSQU0pOwotICAgIHN0YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0
ZVdlYktleWJvYXJkRXZlbnQoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYkV2ZW50RmFjdG9yeV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2luL1dlYktpdEJ1bmRsZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2luL1dlYktpdEJ1bmRsZS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGI5MGYzZDRjNDBmNDkzMmYzYzFmM2YzZDM4ODNmYTZhZWUzZTg0
YjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL3dpbi9XZWJLaXRCdW5kbGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJX
ZWJLaXRCdW5kbGUuaCIKLQotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGQnVuZGxlLmg+Ci0j
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
LQotZXh0ZXJuICJDIiBISU5TVEFOQ0UgZ0luc3RhbmNlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotc3RhdGljIENGQnVuZGxlUmVmIGNyZWF0ZVdlYktpdEJ1bmRsZSgpCi17Ci0gICAgaWYgKENG
QnVuZGxlUmVmIGV4aXN0aW5nQnVuZGxlID0gQ0ZCdW5kbGVHZXRCdW5kbGVXaXRoSWRlbnRpZmll
cihDRlNUUigiY29tLmFwcGxlLldlYktpdCIpKSkgewotICAgICAgICBDRlJldGFpbihleGlzdGlu
Z0J1bmRsZSk7Ci0gICAgICAgIHJldHVybiBleGlzdGluZ0J1bmRsZTsKLSAgICB9Ci0KLSAgICB3
Y2hhcl90IGRsbFBhdGhCdWZmZXJbTUFYX1BBVEhdOwotICAgIERXT1JEIGxlbmd0aCA9IDo6R2V0
TW9kdWxlRmlsZU5hbWVXKGdJbnN0YW5jZSwgZGxsUGF0aEJ1ZmZlciwgV1RGX0FSUkFZX0xFTkdU
SChkbGxQYXRoQnVmZmVyKSk7Ci0gICAgQVNTRVJUKGxlbmd0aCAmJiBsZW5ndGggPCBXVEZfQVJS
QVlfTEVOR1RIKGRsbFBhdGhCdWZmZXIpKTsKLQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
ZGxsUGF0aChBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzTm9Db3B5KDAsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGRsbFBhdGhCdWZmZXIpLCBsZW5ndGgsIGtD
RkFsbG9jYXRvck51bGwpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGRsbFVSTChBZG9wdENG
LCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBkbGxQYXRoLmdldCgpLCBrQ0ZVUkxX
aW5kb3dzUGF0aFN0eWxlLCBmYWxzZSkpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZGxsRGly
ZWN0b3J5VVJMKEFkb3B0Q0YsIENGVVJMQ3JlYXRlQ29weURlbGV0aW5nTGFzdFBhdGhDb21wb25l
bnQoMCwgZGxsVVJMLmdldCgpKSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiByZXNvdXJjZXNE
aXJlY3RvcnlVUkwoQWRvcHRDRiwgQ0ZVUkxDcmVhdGVDb3B5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dCgwLCBkbGxEaXJlY3RvcnlVUkwuZ2V0KCksIENGU1RSKCJXZWJLaXQucmVzb3VyY2VzIiksIHRy
dWUpKTsKLQotICAgIHJldHVybiBDRkJ1bmRsZUNyZWF0ZSgwLCByZXNvdXJjZXNEaXJlY3RvcnlV
UkwuZ2V0KCkpOwotfQotCi1DRkJ1bmRsZVJlZiB3ZWJLaXRCdW5kbGUoKQotewotICAgIHN0YXRp
YyBDRkJ1bmRsZVJlZiBidW5kbGUgPSBjcmVhdGVXZWJLaXRCdW5kbGUoKTsKLSAgICBBU1NFUlQo
YnVuZGxlKTsKLSAgICByZXR1cm4gYnVuZGxlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vV2ViS2l0QnVuZGxlLmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2luL1dlYktpdEJ1bmRsZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxNDBjZjIxNGE4NTUxOTIxYzk2OWZjNDlkMDY5OGZmMTYyMWFmZTA4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC93aW4vV2ViS2l0QnVuZGxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRCdW5kbGVfaAotI2RlZmluZSBXZWJLaXRC
dW5kbGVfaAotCi10eXBlZGVmIHN0cnVjdCBfX0NGQnVuZGxlKiBDRkJ1bmRsZVJlZjsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLUNGQnVuZGxlUmVmIHdlYktpdEJ1bmRsZSgpOwotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYktpdEJ1bmRsZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2luL1dlYlVSTFJlcXVlc3RXaW4uY3BwIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL3dpbi9XZWJVUkxSZXF1ZXN0V2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNGJiYzEwYzllMmU1ZDBlYjY2ZGU1ZmExYmExMjIyNzJiNjE1ZWM4Ni4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvd2luL1dlYlVSTFJlcXVlc3RXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJV
UkxSZXF1ZXN0LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJVUkxSZXF1ZXN0OjpXZWJV
UkxSZXF1ZXN0KFBsYXRmb3JtUmVxdWVzdCBwbGF0Zm9ybVJlcXVlc3QpCi0gICAgOiBtX3JlcXVl
c3QocGxhdGZvcm1SZXF1ZXN0KQotewotfQotCi1QbGF0Zm9ybVJlcXVlc3QgV2ViVVJMUmVxdWVz
dDo6cGxhdGZvcm1SZXF1ZXN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXF1ZXN0LmNmVVJM
UmVxdWVzdCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC93aW4vV2ViVVJMUmVzcG9uc2VXaW4uY3BwIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL3dpbi9XZWJVUkxSZXNwb25zZVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGU0MWMwZjM2NzI2YjBiY2ZhMTM1NGRiMzMzYzlhYTExNTA1NGFiZTUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL3dpbi9XZWJVUkxSZXNwb25zZVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlVS
TFJlc3BvbnNlLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJVUkxSZXNwb25zZTo6V2Vi
VVJMUmVzcG9uc2UoUGxhdGZvcm1SZXNwb25zZSBwbGF0Zm9ybVJlc3BvbnNlKQotICAgIDogbV9y
ZXNwb25zZShwbGF0Zm9ybVJlc3BvbnNlKQotewotfQotCi1QbGF0Zm9ybVJlc3BvbnNlIFdlYlVS
TFJlc3BvbnNlOjpwbGF0Zm9ybVJlc3BvbnNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXNw
b25zZS5jZlVSTFJlc3BvbnNlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9XaW5kb3dHZW9tZXRyeS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvd2luL1dpbmRvd0dlb21ldHJ5LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZGE0MGQyNDZmNzA5NmZmYWYxOTBiNWU2MzMzNTYyMGQxYzc5MWJkYS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvd2luL1dpbmRvd0dlb21ldHJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2lu
ZG93R2VvbWV0cnkuaCIKLQotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotV2luZG93R2VvbWV0cnk6OldpbmRvd0dlb21ldHJ5KCkKLSAg
ICA6IHdpbmRvdygwKQotICAgICwgdmlzaWJsZShmYWxzZSkKLXsKLX0KLQotdm9pZCBXaW5kb3dH
ZW9tZXRyeTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
LXsKLSAgICBlbmNvZGVyLmVuY29kZShyZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih3aW5kb3cp
KTsKLSAgICBlbmNvZGVyLmVuY29kZSh2aXNpYmxlKTsKLSAgICBlbmNvZGVyLmVuY29kZShmcmFt
ZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGUoY2xpcFJlY3QpOwotfQotCi1ib29sIFdpbmRvd0dlb21l
dHJ5OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXaW5kb3dHZW9t
ZXRyeSYgZ2VvbWV0cnkpCi17Ci0gICAgdWludDY0X3Qgd2luZG93OwotICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKHdpbmRvdykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdlb21ldHJ5
LndpbmRvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SFdORD4od2luZG93KTsKLQotICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKGdlb21ldHJ5LnZpc2libGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIWRlY29kZXItPmRlY29kZShnZW9tZXRyeS5mcmFtZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGdlb21ldHJ5LmNsaXBSZWN0KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9XaW5k
b3dHZW9tZXRyeS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9XaW5kb3dHZW9tZXRyeS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTk0ZTUzMWYzYjNiZWM2ZDU0NjlhNDM2
MDJmODU2NTUwMTQ3NjMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vV2luZG93R2VvbWV0cnkuaAorKysgL2Rl
di9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdpbmRvd0dlb21l
dHJ5X2gKLSNkZWZpbmUgV2luZG93R2VvbWV0cnlfaAotCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+Ci0KLW5hbWVzcGFjZSBDb3JlSVBDIHsKLSAgICBjbGFzcyBBcmd1bWVudERlY29kZXI7
Ci0gICAgY2xhc3MgQXJndW1lbnRFbmNvZGVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
c3RydWN0IFdpbmRvd0dlb21ldHJ5IHsKLSAgICBXaW5kb3dHZW9tZXRyeSgpOwotCi0gICAgdm9p
ZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIGJv
b2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIFdpbmRvd0dlb21ldHJ5Jik7Ci0K
LSAgICBIV05EIHdpbmRvdzsKLQotICAgIC8vIFdoZXRoZXIgdGhlIHdpbmRvdyBpcyB2aXNpYmxl
LgotICAgIGJvb2wgdmlzaWJsZTsKLQotICAgIC8vIFRoZSBwb3NpdGlvbiBhbmQgc2l6ZSBvZiB0
aGUgd2luZG93IGluIGl0cyBwYXJlbnQncyBjbGllbnQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICBX
ZWJDb3JlOjpJbnRSZWN0IGZyYW1lOwotCi0gICAgLy8gVGhlIHJlY3QgdG8gd2hpY2ggdGhlIHdp
bmRvdyBzaG91bGQgYmUgY2xpcHBlZCBpbiBpdHMgb3duIGNsaWVudCBjb29yZGluYXRlIHNwYWNl
LgotICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcFJlY3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIFdpbmRvd0dlb21ldHJ5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tBUElDYXN0V2luLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLQVBJQ2FzdFdpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1YjcxY2YzMDM4Yzc5ZjBhOTNlMWVmYzA2MGIyYzE3MmRhMGU5Njg5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tBUElDYXN0V2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXS0FQSUNhc3RXaW5faAotI2RlZmluZSBX
S0FQSUNhc3RXaW5faAotCi0jaWZuZGVmIFdLQVBJQ2FzdF9oCi0jZXJyb3IgIlBsZWFzZSAjaW5j
bHVkZSBcIldLQVBJQ2FzdC5oXCIgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZGlyZWN0bHkuIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJWaWV3OwotY2xhc3MgV2ViRWRp
dENvbW1hbmRQcm94eTsKLQotV0tfQUREX0FQSV9NQVBQSU5HKFdLVmlld1JlZiwgV2ViVmlldykK
LVdLX0FERF9BUElfTUFQUElORyhXS0VkaXRDb21tYW5kUmVmLCBXZWJFZGl0Q29tbWFuZFByb3h5
KQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdLQVBJQ2FzdFdpbl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLQ29udGV4dFBy
aXZhdGVXaW4uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tDb250ZXh0
UHJpdmF0ZVdpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDQ5YWM5OWFlMmMw
N2NhMzc0NDZmZWYzZmJiNWU2YzNjNDg5NmVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tD
b250ZXh0UHJpdmF0ZVdpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgV0tDb250ZXh0UHJpdmF0ZVdpbl9oCi0jZGVmaW5lIFdLQ29udGV4dFBy
aXZhdGVXaW5faAotCi0jaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KLSNpbmNsdWRlIDxXZWJL
aXQyL1dLQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tDb29raWVNYW5hZ2VyLmg+Ci0K
LSNpZm5kZWYgX19jcGx1c3BsdXMKLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jZW5kaWYKLQotI2lm
ZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vLyBEZWZhdWx0cyB0byB0
cnVlLgotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0U2hvdWxkUGFpbnROYXRpdmVDb250cm9s
cyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCi0vLyBEZWZhdWx0cyB0byBXS0hUVFBDb29raWVBY2Nl
cHRQb2xpY3lBbHdheXMuCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbml0aWFsSFRUUENv
b2tpZUFjY2VwdFBvbGljeShXS0NvbnRleHRSZWYsIFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSk7
Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBXS0NvbnRleHRQ
cml2YXRlV2luX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy93aW4vV0tDb250ZXh0V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93
aW4vV0tDb250ZXh0V2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3MTU0
MGU0ZDQ3NTQxMWZkZDNlMzU5MzIwMWMyMWUwMzkyNWQwNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
d2luL1dLQ29udGV4dFdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldLQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIldLQ29udGV4dFByaXZhdGVXaW4uaCIKLQotI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgot
I2luY2x1ZGUgIldlYkNvbnRleHQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotdm9p
ZCBXS0NvbnRleHRTZXRTaG91bGRQYWludE5hdGl2ZUNvbnRyb2xzKFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmLCBib29sIGIpCi17Ci0gICAgdG9JbXBsKGNvbnRleHRSZWYpLT5zZXRTaG91bGRQYWlu
dE5hdGl2ZUNvbnRyb2xzKGIpOwotfQotCi12b2lkIFdLQ29udGV4dFNldEluaXRpYWxIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS0hUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KQotewotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c2V0SW5pdGlhbEhU
VFBDb29raWVBY2NlcHRQb2xpY3kodG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXcuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmIxYzE5ODBmZmI5NTA4YTZhNWExZTU1NTEwMDdh
ZTE3OGU3Y2NhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tWaWV3LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldLVmlldy5oIgotCi0jaW5jbHVkZSAiV0tBUElDYXN0LmgiCi0jaW5jbHVkZSAi
V2ViVmlldy5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1XS1R5cGVJRCBXS1ZpZXdH
ZXRUeXBlSUQoKQotewotICAgIHJldHVybiB0b0FQSShBUElPYmplY3Q6OlR5cGVWaWV3KTsKLX0K
LQotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShSRUNUIHJlY3QsIFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEhXTkQgcGFyZW50V2luZG93KQotewot
ICAgIFJlZlB0cjxXZWJWaWV3PiB2aWV3ID0gV2ViVmlldzo6Y3JlYXRlKHJlY3QsIHRvSW1wbChj
b250ZXh0UmVmKSwgdG9JbXBsKHBhZ2VHcm91cFJlZiksIHBhcmVudFdpbmRvdyk7Ci0gICAgcmV0
dXJuIHRvQVBJKHZpZXcucmVsZWFzZSgpLmxlYWtSZWYoKSk7Ci19Ci0KLUhXTkQgV0tWaWV3R2V0
V2luZG93KFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0b0ltcGwodmlld1JlZikt
PndpbmRvdygpOwotfQotCi1XS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlld1Jl
ZikKLXsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKHZpZXdSZWYpLT5wYWdlKCkpOwotfQotCi12
b2lkIFdLVmlld1NldFBhcmVudFdpbmRvdyhXS1ZpZXdSZWYgdmlld1JlZiwgSFdORCBob3N0V2lu
ZG93KQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0UGFyZW50V2luZG93KGhvc3RXaW5kb3cp
OwotfQotCi12b2lkIFdLVmlld1dpbmRvd0FuY2VzdHJ5RGlkQ2hhbmdlKFdLVmlld1JlZiB2aWV3
UmVmKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+d2luZG93QW5jZXN0cnlEaWRDaGFuZ2UoKTsK
LX0KLQotdm9pZCBXS1ZpZXdTZXRJc0luV2luZG93KFdLVmlld1JlZiB2aWV3UmVmLCBib29sIGlz
SW5XaW5kb3cpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRJc0luV2luZG93KGlzSW5XaW5k
b3cpOwotfQotCi12b2lkIFdLVmlld1NldEluaXRpYWxGb2N1cyhXS1ZpZXdSZWYgdmlld1JlZiwg
Ym9vbCBmb3J3YXJkKQotewotICAgIGJvb2wgaXNLZXlib2FyZEV2ZW50VmFsaWQgPSBmYWxzZTsK
LSAgICB0b0ltcGwodmlld1JlZiktPnNldEluaXRpYWxGb2N1cyhmb3J3YXJkLCBpc0tleWJvYXJk
RXZlbnRWYWxpZCwgV2ViS2V5Ym9hcmRFdmVudCgpKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRTY3Jv
bGxPZmZzZXRPbk5leHRSZXNpemUoV0tWaWV3UmVmIHZpZXdSZWYsIFdLU2l6ZSBzY3JvbGxPZmZz
ZXQpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRTY3JvbGxPZmZzZXRPbk5leHRSZXNpemUo
dG9JbnRTaXplKHNjcm9sbE9mZnNldCkpOwotfQotCi12b2lkIFdLVmlld1NldEZpbmRJbmRpY2F0
b3JDYWxsYmFjayhXS1ZpZXdSZWYgdmlld1JlZiwgV0tWaWV3RmluZEluZGljYXRvckNhbGxiYWNr
IGNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0Rmlu
ZEluZGljYXRvckNhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KTsKLX0KLQotV0tWaWV3RmluZElu
ZGljYXRvckNhbGxiYWNrIFdLVmlld0dldEZpbmRJbmRpY2F0b3JDYWxsYmFjayhXS1ZpZXdSZWYg
dmlld1JlZiwgdm9pZCoqIGNvbnRleHQpCi17ICAgIAotICAgIHJldHVybiB0b0ltcGwodmlld1Jl
ZiktPmdldEZpbmRJbmRpY2F0b3JDYWxsYmFjayhjb250ZXh0KTsKLX0KLQotYm9vbCBXS1ZpZXdJ
c1BhZ2VPdmVybGF5SW5zdGFsbGVkKFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0
b0ltcGwodmlld1JlZiktPnBhZ2VPdmVybGF5SW5zdGFsbGVkKCk7Ci19Ci0KLXZvaWQgV0tWaWV3
U2V0Vmlld1VuZG9DbGllbnQoV0tWaWV3UmVmIHZpZXdSZWYsIGNvbnN0IFdLVmlld1VuZG9DbGll
bnQqIHdrQ2xpZW50KQotewotICAgIGlmICh3a0NsaWVudCAmJiB3a0NsaWVudC0+dmVyc2lvbikK
LSAgICAgICAgcmV0dXJuOwotICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlhbGl6ZVVuZG9DbGll
bnQod2tDbGllbnQpOwotfQotCi12b2lkIFdLVmlld1JlYXBwbHlFZGl0Q29tbWFuZChXS1ZpZXdS
ZWYgdmlld1JlZiwgV0tFZGl0Q29tbWFuZFJlZiBjb21tYW5kKQotewotICAgIHRvSW1wbCh2aWV3
UmVmKS0+cmVhcHBseUVkaXRDb21tYW5kKHRvSW1wbChjb21tYW5kKSk7Ci19Ci0KLXZvaWQgV0tW
aWV3VW5hcHBseUVkaXRDb21tYW5kKFdLVmlld1JlZiB2aWV3UmVmLCBXS0VkaXRDb21tYW5kUmVm
IGNvbW1hbmQpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT51bmFwcGx5RWRpdENvbW1hbmQodG9J
bXBsKGNvbW1hbmQpKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXREcmF3c1RyYW5zcGFyZW50QmFja2dy
b3VuZChXS1ZpZXdSZWYgdmlld1JlZiwgYm9vbCBkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCkK
LXsKLSAgICB0b0ltcGwodmlld1JlZiktPnBhZ2UoKS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tn
cm91bmQoZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpOwotfQotCi1ib29sIFdLVmlld0RyYXdz
VHJhbnNwYXJlbnRCYWNrZ3JvdW5kKFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0
b0ltcGwodmlld1JlZiktPnBhZ2UoKS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKTsKLX0K
LQotdm9pZCBXS1ZpZXdTZXRDdXN0b21Ecm9wVGFyZ2V0KFdLVmlld1JlZiB2aWV3UmVmLCBJRHJv
cFRhcmdldCogZHJvcFRhcmdldCkKLXsKLSAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5zZXRD
dXN0b21Ecm9wVGFyZ2V0KGRyb3BUYXJnZXQpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL3dpbi9XS1ZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU0
MDkzZjYzMjNiYzIwYWM1MTcxNTFkOWJiNjA4YzBjYWNkYWI2OC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0Mvd2luL1dLVmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgV0tWaWV3X2gKLSNkZWZpbmUgV0tWaWV3X2gKLQotI2luY2x1ZGUgPFdlYktp
dDIvV0tCYXNlLmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS0dlb21ldHJ5Lmg+Ci0jaW5jbHVkZSA8
d2luZG93cy5oPgotCi1zdHJ1Y3QgSURyb3BUYXJnZXQ7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwot
ZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotLy8gVW5kbyBDbGllbnQuCi1lbnVtIHsKLSAgICBrV0tW
aWV3VW5kbyA9IDAsCi0gICAga1dLVmlld1JlZG8gPSAxCi19OwotdHlwZWRlZiB1aW50MzJfdCBX
S1ZpZXdVbmRvVHlwZTsKLQotdHlwZWRlZiB2b2lkICgqV0tWaWV3UmVnaXN0ZXJFZGl0Q29tbWFu
ZENhbGxiYWNrKShXS1ZpZXdSZWYsIFdLRWRpdENvbW1hbmRSZWYsIFdLVmlld1VuZG9UeXBlIHVu
ZG9PclJlZG8sIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tWaWV3
Q2xlYXJBbGxFZGl0Q29tbWFuZHNDYWxsYmFjaykoV0tWaWV3UmVmLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKTsKLXR5cGVkZWYgYm9vbCAoKldLVmlld0NhblVuZG9SZWRvQ2FsbGJhY2spKFdLVmll
d1JlZiwgV0tWaWV3VW5kb1R5cGUgdW5kb09yUmVkbywgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7
Ci10eXBlZGVmIHZvaWQgKCpXS1ZpZXdFeGVjdXRlVW5kb1JlZG9DYWxsYmFjaykoV0tWaWV3UmVm
LCBXS1ZpZXdVbmRvVHlwZSB1bmRvT3JSZWRvLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKLQot
c3RydWN0IFdLVmlld1VuZG9DbGllbnQgewotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjsKLSAgICBj
b25zdCB2b2lkICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsaWVudEluZm87Ci0gICAgV0tWaWV3UmVnaXN0ZXJFZGl0Q29tbWFuZENhbGxi
YWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckVkaXRDb21tYW5k
OwotICAgIFdLVmlld0NsZWFyQWxsRWRpdENvbW1hbmRzQ2FsbGJhY2sgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xlYXJBbGxFZGl0Q29tbWFuZHM7Ci0gICAgV0tWaWV3Q2FuVW5k
b1JlZG9DYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YW5VbmRvUmVkbzsKLSAgICBXS1ZpZXdFeGVjdXRlVW5kb1JlZG9DYWxsYmFjayAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVVbmRvUmVkbzsKLX07Ci10eXBlZGVm
IHN0cnVjdCBXS1ZpZXdVbmRvQ2xpZW50IFdLVmlld1VuZG9DbGllbnQ7Ci0KLWVudW0geyBrV0tW
aWV3VW5kb0NsaWVudEN1cnJlbnRWZXJzaW9uID0gMCB9OwotCi1XS19FWFBPUlQgV0tUeXBlSUQg
V0tWaWV3R2V0VHlwZUlEKCk7Ci0KLVdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFJF
Q1QgcmVjdCwgV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwg
SFdORCBwYXJlbnRXaW5kb3cpOwotCi1XS19FWFBPUlQgSFdORCBXS1ZpZXdHZXRXaW5kb3coV0tW
aWV3UmVmIHZpZXcpOwotCi1XS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3
UmVmIHZpZXcpOwotCi1XS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRWaWV3VW5kb0NsaWVudChXS1Zp
ZXdSZWYgdmlldywgY29uc3QgV0tWaWV3VW5kb0NsaWVudCogY2xpZW50KTsKLVdLX0VYUE9SVCB2
b2lkIFdLVmlld1JlYXBwbHlFZGl0Q29tbWFuZChXS1ZpZXdSZWYgdmlldywgV0tFZGl0Q29tbWFu
ZFJlZiBjb21tYW5kKTsKLVdLX0VYUE9SVCB2b2lkIFdLVmlld1VuYXBwbHlFZGl0Q29tbWFuZChX
S1ZpZXdSZWYgdmlldywgV0tFZGl0Q29tbWFuZFJlZiBjb21tYW5kKTsKLQotV0tfRVhQT1JUIHZv
aWQgV0tWaWV3U2V0UGFyZW50V2luZG93KFdLVmlld1JlZiB2aWV3LCBIV05EIHBhcmVudFdpbmRv
dyk7Ci1XS19FWFBPUlQgdm9pZCBXS1ZpZXdXaW5kb3dBbmNlc3RyeURpZENoYW5nZShXS1ZpZXdS
ZWYgdmlldyk7Ci1XS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRJc0luV2luZG93KFdLVmlld1JlZiB2
aWV3LCBib29sIGlzSW5XaW5kb3cpOwotV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0SW5pdGlhbEZv
Y3VzKFdLVmlld1JlZiB2aWV3LCBib29sIGZvcndhcmQpOwotV0tfRVhQT1JUIHZvaWQgV0tWaWV3
U2V0U2Nyb2xsT2Zmc2V0T25OZXh0UmVzaXplKFdLVmlld1JlZiB2aWV3LCBXS1NpemUgc2Nyb2xs
T2Zmc2V0KTsKLQotdHlwZWRlZiB2b2lkICgqV0tWaWV3RmluZEluZGljYXRvckNhbGxiYWNrKShX
S1ZpZXdSZWYsIEhCSVRNQVAgc2VsZWN0aW9uQml0bWFwLCBSRUNUIHNlbGVjdGlvblJlY3RJbldp
bmRvd0Nvb3JkaW5hdGVzLCBib29sIGZhZGVvdXQsIHZvaWQqKTsKLVdLX0VYUE9SVCB2b2lkIFdL
Vmlld1NldEZpbmRJbmRpY2F0b3JDYWxsYmFjayhXS1ZpZXdSZWYgdmlldywgV0tWaWV3RmluZElu
ZGljYXRvckNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KTsKLVdLX0VYUE9SVCBXS1Zp
ZXdGaW5kSW5kaWNhdG9yQ2FsbGJhY2sgV0tWaWV3R2V0RmluZEluZGljYXRvckNhbGxiYWNrKFdL
Vmlld1JlZiB2aWV3LCB2b2lkKiogY29udGV4dCk7Ci0KLVdLX0VYUE9SVCBib29sIFdLVmlld0lz
UGFnZU92ZXJsYXlJbnN0YWxsZWQoV0tWaWV3UmVmIHZpZXcpOwotCi1XS19FWFBPUlQgdm9pZCBX
S1ZpZXdTZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChXS1ZpZXdSZWYgdmlldywgYm9vbCBk
cmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCk7Ci1XS19FWFBPUlQgYm9vbCBXS1ZpZXdEcmF3c1Ry
YW5zcGFyZW50QmFja2dyb3VuZChXS1ZpZXdSZWYgdmlldyk7Ci0KLVdLX0VYUE9SVCB2b2lkIFdL
Vmlld1NldEN1c3RvbURyb3BUYXJnZXQoV0tWaWV3UmVmIHZpZXcsIElEcm9wVGFyZ2V0Kik7Ci0K
LSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBXS1ZpZXdfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXdQcml2
YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tWaWV3UHJpdmF0
ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiM2NmNmU4MmNiN2ZlZmQzYmIx
ZGVlZWZmNjQzOGU4MjYyZDk1NWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXdQcml2
YXRlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV0tWaWV3UHJpdmF0ZS5oIgotCi0jaW5jbHVkZSAi
V0tBUElDYXN0LmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwotCi12b2lkIFdLVmlld1NldE92ZXJyaWRlQ3Vyc29yKFdLVmlld1JlZiB2aWV3UmVmLCBI
Q1VSU09SIG92ZXJyaWRlQ3Vyc29yKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0T3ZlcnJp
ZGVDdXJzb3Iob3ZlcnJpZGVDdXJzb3IpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0Mvd2luL1dLVmlld1ByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNWY4OWZkNGUxZDVjMzhmOTI0NGM5NTA3YzIyNjQxYzA4Yjg5NjM4Yi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0Mvd2luL1dLVmlld1ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdLVmlld1ByaXZhdGVfaAotI2RlZmluZSBXS1Zp
ZXdQcml2YXRlX2gKLQotI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+Ci0jaW5jbHVkZSA8d2lu
ZG93cy5oPgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLVdL
X0VYUE9SVCB2b2lkIFdLVmlld1NldE92ZXJyaWRlQ3Vyc29yKFdLVmlld1JlZiB2aWV3UmVmLCBI
Q1VSU09SIG92ZXJyaWRlQ3Vyc29yKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYK
LQotI2VuZGlmIC8qIFdLVmlld1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xhdW5jaGVyL3dpbi9Qcm9jZXNzTGF1bmNoZXJXaW4uY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3dpbi9Qcm9jZXNzTGF1bmNoZXJXaW4uY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGU3ODJmNjhlZGUyNjRjMDlkYWM1Y2E2NTli
Yzc4Y2YzYzE0Mjg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci93aW4vUHJvY2Vzc0xhdW5jaGVy
V2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgotCi0jaW5jbHVk
ZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgotI2luY2x1ZGUg
PHNobHdhcGkuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmZGVmIERF
QlVHX0FMTAotY29uc3QgTFBDV1NUUiB3ZWJQcm9jZXNzTmFtZSA9IEwiV2ViS2l0MldlYlByb2Nl
c3NfZGVidWcuZXhlIjsKLSNlbHNlCi1jb25zdCBMUENXU1RSIHdlYlByb2Nlc3NOYW1lID0gTCJX
ZWJLaXQyV2ViUHJvY2Vzcy5leGUiOwotI2VuZGlmCi0KLSNpZmRlZiBERUJVR19BTEwKLWNvbnN0
IExQQ1dTVFIgd2ViS2l0RExMTmFtZSA9IEwiV2ViS2l0X2RlYnVnLmRsbCI7Ci0jZWxzZQotY29u
c3QgTFBDV1NUUiB3ZWJLaXRETExOYW1lID0gTCJXZWJLaXQuZGxsIjsKLSNlbmRpZgotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgUHJvY2Vz
c0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKLXsKLSAgICAvLyBGaXJzdCwgY3JlYXRlIHRoZSBz
ZXJ2ZXIgYW5kIGNsaWVudCBpZGVudGlmaWVycy4KLSAgICBIQU5ETEUgc2VydmVySWRlbnRpZmll
ciwgY2xpZW50SWRlbnRpZmllcjsKLSAgICBpZiAoIUNvcmVJUEM6OkNvbm5lY3Rpb246OmNyZWF0
ZVNlcnZlckFuZENsaWVudElkZW50aWZpZXJzKHNlcnZlcklkZW50aWZpZXIsIGNsaWVudElkZW50
aWZpZXIpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlPwotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB0
aGUgY2hpbGQgcHJvY2VzcyBpbmhlcml0cyB0aGUgY2xpZW50IGlkZW50aWZpZXIuCi0gICAgOjpT
ZXRIYW5kbGVJbmZvcm1hdGlvbihjbGllbnRJZGVudGlmaWVyLCBIQU5ETEVfRkxBR19JTkhFUklU
LCBIQU5ETEVfRkxBR19JTkhFUklUKTsKLQotICAgIC8vIFRvIGdldCB0aGUgZnVsbCBmaWxlIHBh
dGggdG8gV2ViS2l0MldlYlByb2Nlc3MuZXhlLCB3ZSBmaWxkIHRoZSBsb2NhdGlvbiBvZiBXZWJL
aXQuZGxsLAotICAgIC8vIHJlbW92ZSB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudCwgYW5kIHRoZW4g
YXBwZW5kIFdlYktpdDJXZWJQcm9jZXNzKF9kZWJ1ZykuZXhlLgotICAgIEhNT0RVTEUgd2ViS2l0
TW9kdWxlID0gOjpHZXRNb2R1bGVIYW5kbGVXKHdlYktpdERMTE5hbWUpOwotICAgIEFTU0VSVCh3
ZWJLaXRNb2R1bGUpOwotICAgIGlmICghd2ViS2l0TW9kdWxlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBXQ0hBUiBwYXRoU3RyW01BWF9QQVRIXTsKLSAgICBpZiAoITo6R2V0TW9kdWxlRmlsZU5h
bWVXKHdlYktpdE1vZHVsZSwgcGF0aFN0ciwgV1RGX0FSUkFZX0xFTkdUSChwYXRoU3RyKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6UGF0aFJlbW92ZUZpbGVTcGVjVyhwYXRoU3RyKTsKLSAg
ICBpZiAoITo6UGF0aEFwcGVuZFcocGF0aFN0ciwgd2ViUHJvY2Vzc05hbWUpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBTdHJpbmcgY29tbWFuZExpbmUocGF0aFN0cik7Ci0KLSAgICAvLyBGSVhN
RTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBqdXN0IGNyZWF0ZSBhIENvbW1hbmRMaW5l
IG9iamVjdCBhbmQgb3V0cHV0IGEgY29tbWFuZCBsaW5lIHZlY3RvciBmcm9tIGl0LgotICAgIFZl
Y3RvcjxVQ2hhcj4gY29tbWFuZExpbmVWZWN0b3I7Ci0gICAgYXBwZW5kKGNvbW1hbmRMaW5lVmVj
dG9yLCAiXCIiKTsKLSAgICBhcHBlbmQoY29tbWFuZExpbmVWZWN0b3IsIGNvbW1hbmRMaW5lKTsK
LSAgICBhcHBlbmQoY29tbWFuZExpbmVWZWN0b3IsICJcIiIpOwotICAgIGFwcGVuZChjb21tYW5k
TGluZVZlY3RvciwgIiAtdHlwZSB3ZWJwcm9jZXNzIik7Ci0gICAgYXBwZW5kKGNvbW1hbmRMaW5l
VmVjdG9yLCAiIC1jbGllbnRJZGVudGlmaWVyICIpOwotICAgIGFwcGVuZChjb21tYW5kTGluZVZl
Y3RvciwgU3RyaW5nOjpudW1iZXIocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNsaWVudElk
ZW50aWZpZXIpKSk7Ci0gICAgY29tbWFuZExpbmVWZWN0b3IuYXBwZW5kKCdcMCcpOwotCi0gICAg
U1RBUlRVUElORk8gc3RhcnR1cEluZm8gPSB7IDAgfTsKLSAgICBzdGFydHVwSW5mby5jYiA9IHNp
emVvZihzdGFydHVwSW5mbyk7Ci0gICAgUFJPQ0VTU19JTkZPUk1BVElPTiBwcm9jZXNzSW5mb3Jt
YXRpb24gPSB7IDAgfTsKLSAgICBCT09MIHJlc3VsdCA9IDo6Q3JlYXRlUHJvY2Vzc1coMCwgY29t
bWFuZExpbmVWZWN0b3IuZGF0YSgpLCAwLCAwLCB0cnVlLCAwLCAwLCAwLCAmc3RhcnR1cEluZm8s
ICZwcm9jZXNzSW5mb3JtYXRpb24pOwotCi0gICAgLy8gV2UgY2FuIG5vdyBjbG9zZSB0aGUgY2xp
ZW50IGlkZW50aWZpZXIgaGFuZGxlLgotICAgIDo6Q2xvc2VIYW5kbGUoY2xpZW50SWRlbnRpZmll
cik7Ci0KLSAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAvLyBGSVhNRTogV2hhdCBzaG91bGQg
d2UgZG8gaGVyZT8KLSAgICAgICAgRFdPUkQgZXJyb3IgPSA6OkdldExhc3RFcnJvcigpOwotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBsZWFrIHRo
ZSB0aHJlYWQgaGFuZGxlLgotICAgIDo6Q2xvc2VIYW5kbGUocHJvY2Vzc0luZm9ybWF0aW9uLmhU
aHJlYWQpOwotCi0gICAgLy8gV2UndmUgZmluaXNoZWQgbGF1bmNoaW5nIHRoZSBwcm9jZXNzLCBt
ZXNzYWdlIGJhY2sgdG8gdGhlIHJ1biBsb29wLgotICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0
Y2goYmluZCgmUHJvY2Vzc0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzLCB0aGlz
LCBwcm9jZXNzSW5mb3JtYXRpb24uaFByb2Nlc3MsIHNlcnZlcklkZW50aWZpZXIpKTsKLX0KLQot
dm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MoKQotewotICAgIGlmICghbV9w
cm9jZXNzSWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpUZXJtaW5hdGVQcm9j
ZXNzKG1fcHJvY2Vzc0lkZW50aWZpZXIsIDApOwotfQotCi12b2lkIFByb2Nlc3NMYXVuY2hlcjo6
cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBpZiAoIW1fcHJvY2Vzc0lkZW50aWZpZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIDo6Q2xvc2VIYW5kbGUobV9wcm9jZXNzSWRlbnRpZmllcik7
Ci0gICAgbV9wcm9jZXNzSWRlbnRpZmllciA9IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvd2luL1BsdWdp
bkluZm9TdG9yZVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy93aW4v
UGx1Z2luSW5mb1N0b3JlV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM0
MjI1ZWFmYWE0MjBjNDk1MGVjMTY4YmZjOThiOWU1ZDEyODgyOC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1
Z2lucy93aW4vUGx1Z2luSW5mb1N0b3JlV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQxNCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdp
bkluZm9TdG9yZS5oIgotCi0jaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhdGhXYWxrZXIu
aD4KLSNpbmNsdWRlIDxzaGx3YXBpLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBwYXJzZVZlcnNp
b25TdHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQotewotICAgIFZlY3RvcjxpbnQ+
IHZlcnNpb247Ci0KLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7Ci0gICAgdW5zaWduZWQgZW5k
UG9zOwotICAgIAotICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCkp
IHsKLSAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVyc2lvblN0cmlu
Zy5sZW5ndGgoKTsgKytlbmRQb3MpCi0gICAgICAgICAgICBpZiAodmVyc2lvblN0cmluZ1tlbmRQ
b3NdID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVyc2lvblN0cmlu
Zy5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgpOwotICAgICAg
ICB2ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKLQotICAgICAgICBzdGFydFBvcyA9
IGVuZFBvcyArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZlcnNpb247Ci19Ci0KLS8vIFRoaXMg
cmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25CCi1zdGF0aWMg
aW5saW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQSwg
Y29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaSA+PSB2ZXJzaW9uQi5z
aXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAodmVyc2lvbkFb
aV0gPiB2ZXJzaW9uQltpXSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBlbHNl
IGlmICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25zIGFyZSBlaXRo
ZXIgdGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwganVzdCByZXR1
cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHNh
ZmFyaVBsdWdpbnNEaXJlY3RvcnkoKQotewotICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc0RpcmVj
dG9yeTsKLSAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSBmYWxzZTsKLQot
ICAgIGlmICghY2FjaGVkUGx1Z2luRGlyZWN0b3J5KSB7Ci0gICAgICAgIGNhY2hlZFBsdWdpbkRp
cmVjdG9yeSA9IHRydWU7Ci0KLSAgICAgICAgV0NIQVIgbW9kdWxlRmlsZU5hbWVTdHJbTUFYX1BB
VEhdOwotICAgICAgICBpbnQgbW9kdWxlRmlsZU5hbWVMZW4gPSA6OkdldE1vZHVsZUZpbGVOYW1l
VygwLCBtb2R1bGVGaWxlTmFtZVN0ciwgV1RGX0FSUkFZX0xFTkdUSChtb2R1bGVGaWxlTmFtZVN0
cikpOwotCi0gICAgICAgIGlmICghbW9kdWxlRmlsZU5hbWVMZW4gfHwgbW9kdWxlRmlsZU5hbWVM
ZW4gPT0gV1RGX0FSUkFZX0xFTkdUSChtb2R1bGVGaWxlTmFtZVN0cikpCi0gICAgICAgICAgICBy
ZXR1cm4gcGx1Z2luc0RpcmVjdG9yeTsKLQotICAgICAgICBpZiAoITo6UGF0aFJlbW92ZUZpbGVT
cGVjVyhtb2R1bGVGaWxlTmFtZVN0cikpCi0gICAgICAgICAgICByZXR1cm4gcGx1Z2luc0RpcmVj
dG9yeTsKLQotICAgICAgICBwbHVnaW5zRGlyZWN0b3J5ID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1l
U3RyKSArICJcXFBsdWdpbnMiOwotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW5zRGlyZWN0b3J5
OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkTW96aWxsYVBsdWdpbkRpcmVjdG9yaWVzKFZl
Y3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKLXsKLSAgICAvLyBFbnVtZXJhdGUgYWxsIE1vemls
bGEgcGx1Z2luIGRpcmVjdG9yaWVzIGluIHRoZSByZWdpc3RyeQotICAgIEhLRVkga2V5OwotICAg
IExPTkcgcmVzdWx0ID0gOjpSZWdPcGVuS2V5RXhXKEhLRVlfTE9DQUxfTUFDSElORSwgTCJTb2Z0
d2FyZVxcTW96aWxsYSIsIDAsIEtFWV9SRUFELCAma2V5KTsKLSAgICBpZiAocmVzdWx0ICE9IEVS
Uk9SX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFSIG5hbWVbMTI4XTsKLSAg
ICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAg
IGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgIERXT1JEIG5hbWVMZW4gPSBXVEZfQVJS
QVlfTEVOR1RIKG5hbWUpOwotICAgICAgICByZXN1bHQgPSA6OlJlZ0VudW1LZXlFeFcoa2V5LCBp
LCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgaWYg
KHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
U3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pICsgIlxcRXh0ZW5z
aW9ucyI7Ci0gICAgICAgIEhLRVkgZXh0ZW5zaW9uc0tleTsKLQotICAgICAgICAvLyBUcnkgb3Bl
bmluZyB0aGUga2V5Ci0gICAgICAgIHJlc3VsdCA9IDo6UmVnT3BlbktleUV4VyhrZXksIGV4dGVu
c2lvbnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIEtFWV9SRUFELCAm
ZXh0ZW5zaW9uc0tleSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7
Ci0gICAgICAgICAgICAvLyBOb3cgZ2V0IHRoZSBwbHVnaW5zIGRpcmVjdG9yeQotICAgICAgICAg
ICAgV0NIQVIgcGx1Z2luc0RpcmVjdG9yeVN0cltNQVhfUEFUSF07Ci0gICAgICAgICAgICBEV09S
RCBwbHVnaW5zRGlyZWN0b3J5U2l6ZSA9IHNpemVvZihwbHVnaW5zRGlyZWN0b3J5U3RyKTsKLSAg
ICAgICAgICAgIERXT1JEIHR5cGU7Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IDo6UmVnUXVlcnlW
YWx1ZUV4VyhleHRlbnNpb25zS2V5LCBMIlBsdWdpbnMiLCAwLCAmdHlwZSwgcmVpbnRlcnByZXRf
Y2FzdDxMUEJZVEU+KCZwbHVnaW5zRGlyZWN0b3J5U3RyKSwgJnBsdWdpbnNEaXJlY3RvcnlTaXpl
KTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0g
UkVHX1NaKQotICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChTdHJpbmcocGx1Z2lu
c0RpcmVjdG9yeVN0ciwgcGx1Z2luc0RpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkp
OwotCi0gICAgICAgICAgICA6OlJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgOjpSZWdDbG9zZUtleShrZXkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZv
aWQgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KFZlY3RvcjxTdHJpbmc+JiBk
aXJlY3RvcmllcykKLXsKLSAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBsdWdpbiBpcyBpbnN0
YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55IEZpcmVmb3ggaW5z
dGFsbHMKLSAgICBXQ0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbTUFYX1BBVEggKyAxXTsKLSAgICBE
V09SRCBwbHVnaW5EaXJlY3RvcnlTaXplID0gOjpFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKEwi
JVNZU1RFTURSSVZFJVxcUEZpbGVzXFxQbHVnaW5zIiwgcGx1Z2luRGlyZWN0b3J5U3RyLCBXVEZf
QVJSQVlfTEVOR1RIKHBsdWdpbkRpcmVjdG9yeVN0cikpOwotCi0gICAgaWYgKHBsdWdpbkRpcmVj
dG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0gV1RGX0FSUkFZX0xFTkdUSChw
bHVnaW5EaXJlY3RvcnlTdHIpKQotICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKHBs
dWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAtIDEpKTsKLQotICAgIERXT1JE
IHR5cGU7Ci0gICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKLSAg
ICBEV09SRCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRp
cmVjdG9yeVN0cik7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IDo6U0hHZXRWYWx1ZVcoSEtFWV9M
T0NBTF9NQUNISU5FLCBMIlNvZnR3YXJlXFxNaWNyb3NvZnRcXE1lZGlhUGxheWVyIiwgTCJJbnN0
YWxsYXRpb24gRGlyZWN0b3J5IiwgJnR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBCWVRFPigmaW5z
dGFsbGF0aW9uRGlyZWN0b3J5U3RyKSwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwotCi0g
ICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAgICAg
ICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5z
dGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgdm9pZCBhZGRRdWlja1RpbWVQbHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0cmluZz4m
IGRpcmVjdG9yaWVzKQotewotICAgIERXT1JEIHR5cGU7Ci0gICAgV0NIQVIgaW5zdGFsbGF0aW9u
RGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKLSAgICBEV09SRCBpbnN0YWxsYXRpb25EaXJlY3RvcnlT
aXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cik7Ci0KLSAgICBIUkVTVUxUIHJl
c3VsdCA9IDo6U0hHZXRWYWx1ZVcoSEtFWV9MT0NBTF9NQUNISU5FLCBMIlNvZnR3YXJlXFxBcHBs
ZSBDb21wdXRlciwgSW5jLlxcUXVpY2tUaW1lIiwgTCJJbnN0YWxsRGlyIiwgJnR5cGUsIHJlaW50
ZXJwcmV0X2Nhc3Q8TFBCWVRFPigmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKSwgJmluc3RhbGxh
dGlvbkRpcmVjdG9yeVNpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYm
IHR5cGUgPT0gUkVHX1NaKSB7Ci0gICAgICAgIFN0cmluZyBwbHVnaW5EaXIgPSBTdHJpbmcoaW5z
dGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9m
KFdDSEFSKSAtIDEpICsgIlxccGx1Z2lucyI7Ci0gICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChw
bHVnaW5EaXIpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZEFkb2JlQWNyb2Jh
dFBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCi17Ci0gICAgSEtF
WSBrZXk7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSA6OlJlZ09wZW5LZXlFeFcoSEtFWV9MT0NBTF9N
QUNISU5FLCBMIlNvZnR3YXJlXFxBZG9iZVxcQWNyb2JhdCBSZWFkZXIiLCAwLCBLRVlfUkVBRCwg
JmtleSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0g
ICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247Ci0gICAgU3RyaW5nIGxhdGVzdEFj
cm9iYXRWZXJzaW9uU3RyaW5nOwotCi0gICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBmb3Ig
KGludCBpID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBuYW1lTGVuID0gV1RGX0FSUkFZX0xF
TkdUSChuYW1lKTsKLSAgICAgICAgcmVzdWx0ID0gOjpSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFt
ZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgIGlmIChyZXN1
bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFZlY3Rv
cjxpbnQ+IGFjcm9iYXRWZXJzaW9uID0gcGFyc2VWZXJzaW9uU3RyaW5nKFN0cmluZyhuYW1lLCBu
YW1lTGVuKSk7Ci0gICAgICAgIGlmIChjb21wYXJlVmVyc2lvbnMoYWNyb2JhdFZlcnNpb24sIGxh
dGVzdEFjcm9iYXRWZXJzaW9uKSkgewotICAgICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb24g
PSBhY3JvYmF0VmVyc2lvbjsKLSAgICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5n
ID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFs
YXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZy5pc051bGwoKSkgewotICAgICAgICBEV09SRCB0eXBl
OwotICAgICAgICBXQ0hBUiBhY3JvYmF0SW5zdGFsbFBhdGhTdHJbTUFYX1BBVEhdOwotICAgICAg
ICBEV09SRCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGFjcm9iYXRJbnN0YWxsUGF0
aFN0cik7Ci0KLSAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5LZXlQYXRoID0gIlNvZnR3YXJl
XFxBZG9iZVxcQWNyb2JhdCBSZWFkZXJcXCIgKyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyAr
ICJcXEluc3RhbGxQYXRoIjsKLSAgICAgICAgcmVzdWx0ID0gOjpTSEdldFZhbHVlVyhIS0VZX0xP
Q0FMX01BQ0hJTkUsIGFjcm9iYXRQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIDAsICZ0eXBlLCByZWludGVycHJldF9jYXN0PExQQllURT4oYWNyb2JhdEluc3Rh
bGxQYXRoU3RyKSwgJmFjcm9iYXRJbnN0YWxsUGF0aFNpemUpOwotCi0gICAgICAgIGlmIChyZXN1
bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5E
aXJlY3RvcnkgPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0SW5zdGFsbFBh
dGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7Ci0gICAgICAgICAgICBk
aXJlY3Rvcmllcy5hcHBlbmQoYWNyb2JhdFBsdWdpbkRpcmVjdG9yeSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICA6OlJlZ0Nsb3NlS2V5KGtleSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVz
KQotewotI2lmICFPUyhXSU5DRSkKLSAgICBXQ0hBUiBzeXN0ZW1EaXJlY3RvcnlTdHJbTUFYX1BB
VEhdOwotCi0gICAgaWYgKCE6OkdldFN5c3RlbURpcmVjdG9yeVcoc3lzdGVtRGlyZWN0b3J5U3Ry
LCBXVEZfQVJSQVlfTEVOR1RIKHN5c3RlbURpcmVjdG9yeVN0cikpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBXQ0hBUiBtYWNyb21lZGlhRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKLQotICAgIGlm
ICghOjpQYXRoQ29tYmluZVcobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5
U3RyLCBMIm1hY3JvbWVkXFxGbGFzaCIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkaXJlY3Rv
cmllcy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7Ci0KLSAgICBpZiAoITo6UGF0aENv
bWJpbmVXKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0ciwgTCJtYWNy
b21lZFxcU2hvY2t3YXZlIDEwIikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRpcmVjdG9yaWVz
LmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKLSNlbmRpZgotfQotCi1WZWN0b3I8U3Ry
aW5nPiBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbnNEaXJlY3RvcmllcygpCi17Ci0gICAgVmVjdG9y
PFN0cmluZz4gZGlyZWN0b3JpZXM7Ci0KLSAgICBTdHJpbmcgb3VyRGlyZWN0b3J5ID0gc2FmYXJp
UGx1Z2luc0RpcmVjdG9yeSgpOwotICAgIGlmICghb3VyRGlyZWN0b3J5LmlzTnVsbCgpKQotICAg
ICAgICBkaXJlY3Rvcmllcy5hcHBlbmQob3VyRGlyZWN0b3J5KTsKLQotICAgIGFkZFF1aWNrVGlt
ZVBsdWdpbkRpcmVjdG9yeShkaXJlY3Rvcmllcyk7Ci0gICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2lu
RGlyZWN0b3J5KGRpcmVjdG9yaWVzKTsKLSAgICBhZGRNb3ppbGxhUGx1Z2luRGlyZWN0b3JpZXMo
ZGlyZWN0b3JpZXMpOwotICAgIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeShk
aXJlY3Rvcmllcyk7Ci0gICAgYWRkTWFjcm9tZWRpYVBsdWdpbkRpcmVjdG9yaWVzKGRpcmVjdG9y
aWVzKTsKLQotICAgIHJldHVybiBkaXJlY3RvcmllczsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGx1
Z2luSW5mb1N0b3JlOjpwbHVnaW5QYXRoc0luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0
b3J5KQotewotICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwotCi0gICAgUGF0aFdhbGtlciB3YWxr
ZXIoZGlyZWN0b3J5LCAiKiIpOwotICAgIGlmICghd2Fsa2VyLmlzVmFsaWQoKSkKLSAgICAgICAg
cmV0dXJuIHBhdGhzOwotCi0gICAgZG8gewotICAgICAgICBpZiAod2Fsa2VyLmRhdGEoKS5kd0Zp
bGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gd2Fsa2VyLmRhdGEoKS5jRmlsZU5h
bWU7Ci0gICAgICAgIGlmICgoIWZpbGVuYW1lLnN0YXJ0c1dpdGgoIm5wIiwgZmFsc2UpIHx8ICFm
aWxlbmFtZS5lbmRzV2l0aCgiZGxsIiwgZmFsc2UpKSAmJiAoIWVxdWFsSWdub3JpbmdDYXNlKGZp
bGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFkaXJlY3RvcnkuZW5kc1dpdGgoIlNob2Nrd2F2ZSAx
MCIsIGZhbHNlKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBwYXRocy5hcHBl
bmQoZGlyZWN0b3J5ICsgIlxcIiArIGZpbGVuYW1lKTsKLSAgICB9IHdoaWxlICh3YWxrZXIuc3Rl
cCgpKTsKLQotICAgIHJldHVybiBwYXRoczsKLX0KLQotc3RhdGljIHZvaWQgYWRkUGx1Z2luUGF0
aHNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0g
ICAgSEtFWSBrZXk7Ci0gICAgaWYgKDo6UmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNvZnR3YXJl
XFxNb3ppbGxhUGx1Z2lucyIsIDAsIEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkpICE9IEVS
Uk9SX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyA7
ICsraSkgewotICAgICAgICAvLyBNU0ROIHNheXMgdGhhdCBrZXkgbmFtZXMgaGF2ZSBhIG1heGlt
dW0gbGVuZ3RoIG9mIDI1NSBjaGFyYWN0ZXJzLgotICAgICAgICB3Y2hhcl90IG5hbWVbMjU2XTsK
LSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IFdURl9BUlJBWV9MRU5HVEgobmFtZSk7Ci0gICAgICAg
IGlmICg6OlJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgMCkg
IT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHdjaGFyX3Qg
cGF0aFtNQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIHBhdGhTaXplSW5CeXRlcyA9IHNpemVvZihw
YXRoKTsKLSAgICAgICAgRFdPUkQgdHlwZTsKLSAgICAgICAgaWYgKDo6U0hHZXRWYWx1ZVcoa2V5
LCBuYW1lLCBMIlBhdGgiLCAmdHlwZSwgcGF0aCwgJnBhdGhTaXplSW5CeXRlcykgIT0gRVJST1Jf
U1VDQ0VTUykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAodHlwZSAhPSBSRUdf
U1opCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBwYXRocy5hcHBlbmQocGF0aCk7
Ci0gICAgfQotCi0gICAgOjpSZWdDbG9zZUtleShrZXkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBQ
bHVnaW5JbmZvU3RvcmU6OmluZGl2aWR1YWxQbHVnaW5QYXRocygpCi17Ci0gICAgVmVjdG9yPFN0
cmluZz4gcGF0aHM7Ci0KLSAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZX0xPQ0FM
X01BQ0hJTkUsIHBhdGhzKTsKLSAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZX0NV
UlJFTlRfVVNFUiwgcGF0aHMpOwotCi0gICAgcmV0dXJuIHBhdGhzOwotfQotCi1zdGF0aWMgdWlu
dDY0X3QgZmlsZVZlcnNpb24oRFdPUkQgbGVhc3RTaWduaWZpY2FudCwgRFdPUkQgbW9zdFNpZ25p
ZmljYW50KQotewotICAgIFVMQVJHRV9JTlRFR0VSIHZlcnNpb247Ci0gICAgdmVyc2lvbi5Mb3dQ
YXJ0ID0gbGVhc3RTaWduaWZpY2FudDsKLSAgICB2ZXJzaW9uLkhpZ2hQYXJ0ID0gbW9zdFNpZ25p
ZmljYW50OwotICAgIHJldHVybiB2ZXJzaW9uLlF1YWRQYXJ0OwotfQotCi1ib29sIFBsdWdpbklu
Zm9TdG9yZTo6Z2V0UGx1Z2luSW5mbyhjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIFBsdWdpbk1v
ZHVsZUluZm8mIHBsdWdpbikKLXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICByZXR1cm4gTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBsdWdpbkluZm8ocGx1Z2luUGF0aCwg
cGx1Z2luKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBsdWdpblBhdGgpOwotICAgIFVOVVNF
RF9QQVJBTShwbHVnaW4pOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1zdGF0aWMg
Ym9vbCBpc09sZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbihjb25zdCBQbHVnaW5Nb2R1bGVJbmZv
JiBwbHVnaW4pCi17Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHBsdWdpbi5pbmZvLmZp
bGUsICJucGRzcGxheS5kbGwiKTsKLX0KLQotc3RhdGljIGJvb2wgaXNOZXdXaW5kb3dzTWVkaWFQ
bGF5ZXJQbHVnaW4oY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luKQotewotICAgIHJldHVy
biBlcXVhbElnbm9yaW5nQ2FzZShwbHVnaW4uaW5mby5maWxlLCAibnAtbXN3bXAuZGxsIik7Ci19
Ci0KLWJvb2wgUGx1Z2luSW5mb1N0b3JlOjpzaG91bGRVc2VQbHVnaW4oVmVjdG9yPFBsdWdpbk1v
ZHVsZUluZm8+JiBhbHJlYWR5TG9hZGVkUGx1Z2lucywgY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYg
cGx1Z2luKQotewotICAgIGlmIChwbHVnaW4uaW5mby5uYW1lID09ICJDaXRyaXggSUNBIENsaWVu
dCIpIHsKLSAgICAgICAgLy8gVGhlIENpdHJpeCBJQ0EgQ2xpZW50IHBsdWctaW4gcmVxdWlyZXMg
YSBNb3ppbGxhLWJhc2VkIGJyb3dzZXI7IHNlZSA8cmRhcjovLzY0MTg2ODE+LgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHBsdWdpbi5pbmZvLm5hbWUgPT0gIlNpbHZl
cmxpZ2h0IFBsdWctSW4iKSB7Ci0gICAgICAgIC8vIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vNTU1
NzM3OT4gQ3Jhc2ggaW4gU2lsdmVybGlnaHQgd2hlbiBvcGVuaW5nIG1pY3Jvc29mdC5jb20uCi0g
ICAgICAgIC8vIHRoZSBsYXRlc3QgMS4wIHZlcnNpb24gb2YgU2lsdmVybGlnaHQgZG9lcyBub3Qg
cmVwcm9kdWNlIHRoaXMgY3Jhc2gsIHNvIGFsbG93IGl0Ci0gICAgICAgIC8vIGFuZCBhbnkgbmV3
ZXIgdmVyc2lvbnMKLSAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IG1pbmltdW1SZXF1aXJl
ZFZlcnNpb24gPSBmaWxlVmVyc2lvbigweDUxQkUwMDAwLCAweDAwMDEwMDAwKTsKLSAgICAgICAg
cmV0dXJuIHBsdWdpbi5maWxlVmVyc2lvbiA+PSBtaW5pbXVtUmVxdWlyZWRWZXJzaW9uOwotICAg
IH0KLQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShwbHVnaW4uaW5mby5maWxlLCAibnBtb3ph
eC5kbGwiKSkgewotICAgICAgICAvLyBCdWcgMTUyMTc6IE1vemlsbGEgQWN0aXZlWCBjb250cm9s
IGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHhwY29tX2NvcmUuZGxsCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocGx1Z2luLmluZm8uZmls
ZSwgIm5wd3BmLmRsbCIpKSB7Ci0gICAgICAgIC8vIEJ1ZyA1NzExOTogTWljcm9zb2Z0IFdpbmRv
d3MgUHJlc2VudGF0aW9uIEZvdW5kYXRpb24gKFdQRikgcGx1Zy1pbiBjb21wbGFpbnMgYWJvdXQg
bWlzc2luZyB4cGNvbS5kbGwKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlm
IChwbHVnaW4uaW5mby5uYW1lID09ICJZYWhvbyBBcHBsaWNhdGlvbiBTdGF0ZSBQbHVnaW4iKSB7
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg2
MAotICAgICAgICAvLyBCdWcgaW4gWWFob28gQXBwbGljYXRpb24gU3RhdGUgcGx1Zy1pbiBlYXJs
aWVyIHRoYW4gMS4wLjAuNiBsZWFkcyB0byBoZWFwIGNvcnJ1cHRpb24uCi0gICAgICAgIHN0YXRp
YyBjb25zdCB1aW50NjRfdCBtaW5pbXVtUmVxdWlyZWRWZXJzaW9uID0gZmlsZVZlcnNpb24oMHgw
MDAwMDAwNiwgMHgwMDAxMDAwMCk7Ci0gICAgICAgIHJldHVybiBwbHVnaW4uZmlsZVZlcnNpb24g
Pj0gbWluaW11bVJlcXVpcmVkVmVyc2lvbjsKLSAgICB9Ci0KLSAgICBpZiAoaXNPbGRXaW5kb3dz
TWVkaWFQbGF5ZXJQbHVnaW4ocGx1Z2luKSkgewotICAgICAgICAvLyBEb24ndCBsb2FkIHRoZSBv
bGQgV2luZG93cyBNZWRpYSBQbGF5ZXIgcGx1Z2luIGlmIHdlJ3ZlIGFscmVhZHkgbG9hZGVkIHRo
ZSBuZXcgV2luZG93cwotICAgICAgICAvLyBNZWRpYSBQbGF5ZXIgcGx1Z2luLgotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFscmVhZHlMb2FkZWRQbHVnaW5zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzTmV3V2luZG93c01lZGlhUGxheWVyUGx1Z2luKGFscmVhZHlM
b2FkZWRQbHVnaW5zW2ldKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBpZiAoaXNOZXdXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW4ocGx1Z2luKSkgewotICAgICAg
ICAvLyBSZW1vdmUgdGhlIG9sZCBXaW5kb3dzIE1lZGlhIFBsYXllciBwbHVnaW4gaWYgd2UndmUg
YWxyZWFkeSBhZGRlZCBpdC4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbHJlYWR5
TG9hZGVkUGx1Z2lucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFpc09sZFdpbmRv
d3NNZWRpYVBsYXllclBsdWdpbihhbHJlYWR5TG9hZGVkUGx1Z2luc1tpXSkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhbHJlYWR5TG9hZGVkUGx1Z2lucy5yZW1vdmUo
aSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gRklY
TUU6IFdlIHNob3VsZCBwcmVmZXIgYSBuZXdlciB2ZXJzaW9uIG9mIGEgcGx1Z2luIHRvIGFuIG9s
ZGVyIHZlcnNpb24sIHJhdGhlciB0aGFuIGxvYWRpbmcKLSAgICAvLyBvbmx5IHRoZSBmaXJzdC4g
PGh0dHA6Ly93ZWJraXQub3JnL2IvNTg0Njk+Ci0gICAgU3RyaW5nIHBsdWdpbkZpbGVOYW1lID0g
cGF0aEdldEZpbGVOYW1lKHBsdWdpbi5wYXRoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFscmVhZHlMb2FkZWRQbHVnaW5zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFBsdWdp
bk1vZHVsZUluZm8mIGxvYWRlZFBsdWdpbiA9IGFscmVhZHlMb2FkZWRQbHVnaW5zW2ldOwotCi0g
ICAgICAgIC8vIElmIGEgcGx1Zy1pbiB3aXRoIHRoZSBzYW1lIGZpbGVuYW1lIGFscmVhZHkgZXhp
c3RzLCB3ZSBkb24ndCB3YW50IHRvIGxvYWQgaXQuCi0gICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShwbHVnaW5GaWxlTmFtZSwgcGF0aEdldEZpbGVOYW1lKGxvYWRlZFBsdWdpbi5wYXRoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3dpbi9CYWNraW5nU3RvcmVXaW4uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3dpbi9CYWNraW5nU3RvcmVXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
MGJiYTc1YmY2MWMwZDc2ZmE3ODQ0OTgwODkyOTlhNTUyOTlkOTk4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93
aW4vQmFja2luZ1N0b3JlV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5o
IgotCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQml0bWFwREMg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJpdG1hcERDKTsKLQotcHVibGljOgotICAgIEJp
dG1hcERDKEhCSVRNQVAsIEhEQyBkZXN0aW5hdGlvbkRDKTsKLSAgICB+Qml0bWFwREMoKTsKLQot
ICAgIG9wZXJhdG9yIEhEQygpIGNvbnN0IHsgcmV0dXJuIG1fZGMuZ2V0KCk7IH0KLQotcHJpdmF0
ZToKLSAgICBPd25QdHI8SERDPiBtX2RjOwotICAgIEhCSVRNQVAgbV9vcmlnaW5hbEJpdG1hcDsK
LX07Ci0KLUJpdG1hcERDOjpCaXRtYXBEQyhIQklUTUFQIGJpdG1hcCwgSERDIGRlc3RpbmF0aW9u
REMpCi0gICAgOiBtX2RjKGFkb3B0UHRyKDo6Q3JlYXRlQ29tcGF0aWJsZURDKGRlc3RpbmF0aW9u
REMpKSkKLSAgICAsIG1fb3JpZ2luYWxCaXRtYXAoc3RhdGljX2Nhc3Q8SEJJVE1BUD4oOjpTZWxl
Y3RPYmplY3QobV9kYy5nZXQoKSwgYml0bWFwKSkpCi17Ci19Ci0KLUJpdG1hcERDOjp+Qml0bWFw
REMoKQotewotICAgIDo6U2VsZWN0T2JqZWN0KG1fZGMuZ2V0KCksIG1fb3JpZ2luYWxCaXRtYXAp
OwotfQotCi12b2lkIEJhY2tpbmdTdG9yZTo6cGFpbnQoSERDIGRjLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIEFTU0VSVChtX2JpdG1hcCk7Ci0gICAgOjpCaXRCbHQoZGMsIHJlY3QueCgp
LCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBCaXRtYXBEQyhtX2JpdG1h
cC5nZXQoKSwgZGMpLCByZWN0LngoKSwgcmVjdC55KCksIFNSQ0NPUFkpOwotfQotCi1zdGF0aWMg
UGFzc093blB0cjxIQklUTUFQPiBjcmVhdGVCaXRtYXAoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsK
LSAgICAvLyBGSVhNRTogTWF5YmUgaXQgd291bGQgYmUgYmV0dGVyIGZvciBwZXJmb3JtYW5jZSB0
byBjcmVhdGUgYSBkZXZpY2UtZGVwZW5kZW50IGJpdG1hcCBoZXJlPwotICAgIEJpdG1hcEluZm8g
aW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKHNpemUpOwotICAgIHZvaWQqIGJpdHM7
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmaW5mbywgRElCX1JH
Ql9DT0xPUlMsICZiaXRzLCAwLCAwKSk7Ci19Ci0KLXZvaWQgQmFja2luZ1N0b3JlOjppbmNvcnBv
cmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29uc3QgVXBkYXRlSW5mbyYgdXBk
YXRlSW5mbykKLXsKLSAgICBpZiAoIW1fYml0bWFwKQotICAgICAgICBtX2JpdG1hcCA9IGNyZWF0
ZUJpdG1hcChtX3NpemUpOwotCi0gICAgc2Nyb2xsKHVwZGF0ZUluZm8uc2Nyb2xsUmVjdCwgdXBk
YXRlSW5mby5zY3JvbGxPZmZzZXQpOwotCi0gICAgSW50UG9pbnQgdXBkYXRlUmVjdExvY2F0aW9u
ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzLmxvY2F0aW9uKCk7Ci0KLSAgICBCaXRtYXBE
QyBiYWNraW5nU3RvcmVEQyhtX2JpdG1hcC5nZXQoKSwgMCk7Ci0gICAgSERDIGJpdG1hcERDID0g
Yml0bWFwLT53aW5kb3dzQ29udGV4dCgpOwotCi0gICAgLy8gUGFpbnQgYWxsIHVwZGF0ZSByZWN0
cy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVwZGF0ZUluZm8udXBkYXRlUmVjdHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgSW50UmVjdCB1cGRhdGVSZWN0ID0gdXBkYXRlSW5mby51cGRh
dGVSZWN0c1tpXTsKLSAgICAgICAgSW50UmVjdCBzcmNSZWN0ID0gdXBkYXRlUmVjdDsKLSAgICAg
ICAgc3JjUmVjdC5tb3ZlKC11cGRhdGVSZWN0TG9jYXRpb24ueCgpLCAtdXBkYXRlUmVjdExvY2F0
aW9uLnkoKSk7Ci0KLSAgICAgICAgOjpCaXRCbHQoYmFja2luZ1N0b3JlREMsIHVwZGF0ZVJlY3Qu
bG9jYXRpb24oKS54KCksIHVwZGF0ZVJlY3QubG9jYXRpb24oKS55KCksIHVwZGF0ZVJlY3Quc2l6
ZSgpLndpZHRoKCksIHVwZGF0ZVJlY3Quc2l6ZSgpLmhlaWdodCgpLAotICAgICAgICAgICAgYml0
bWFwREMsIHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSwgU1JDQ09QWSk7Ci0gICAgfQotfQotCi12
b2lkIEJhY2tpbmdTdG9yZTo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0
IEludFNpemUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LmlzWmVybygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSRUNUIHdpblNjcm9sbFJlY3QgPSBzY3JvbGxSZWN0
OwotICAgIDo6U2Nyb2xsREMoQml0bWFwREMobV9iaXRtYXAuZ2V0KCksIDApLCBzY3JvbGxPZmZz
ZXQud2lkdGgoKSwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgpLCAmd2luU2Nyb2xsUmVjdCwgJndpblNj
cm9sbFJlY3QsIDAsIDApOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJXaW4uY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDc3MTRiMzRkZDE5Njk2NTBjMjM2NmM0OWQ0Yjc4YjFiODkzYzg3NjQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXh0Q2hlY2tlci5oIgotCi0jaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgotI2luY2x1
ZGUgIldlYlRleHRDaGVja2VyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIFRleHRDaGVja2VyU3RhdGUgdGV4dENoZWNrZXJTdGF0
ZTsKLQotY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKLXsKLSAg
ICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplU3RhdGU7Ci0gICAgaWYgKGRpZEluaXRpYWxpemVT
dGF0ZSkKLSAgICAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7Ci0KLSAgICBXZWJUZXh0Q2hl
Y2tlckNsaWVudCYgY2xpZW50ID0gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKTsK
LSAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0g
Y2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwotICAgIHRleHRDaGVja2Vy
U3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gIGNsaWVudC5ncmFtbWFyQ2hlY2tpbmdF
bmFibGVkKCk7Ci0KLSAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOwotCi0gICAgcmV0dXJu
IHRleHRDaGVja2VyU3RhdGU7Ci19Ci0gIAotYm9vbCBUZXh0Q2hlY2tlcjo6aXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0FsbG93ZWQoKQotewotICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hh
cmVkKCktPmNsaWVudCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOwotfQotCi12
b2lkIFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKLXsKLSAgICBpZiAoc3RhdGUoKS5pc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZDsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldENvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Ci19
Ci0KLXZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQpCi17Ci0gICAgaWYgKHN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkID09IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkOwotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCku
c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOwotfQot
Ci12b2lkIFRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNo
YW5nZWQoYm9vbCBlbmFibGVkKQotewotICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOwotfQotCi12b2lkIFRleHRDaGVja2VyOjpn
cmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICB0
ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7Ci19Ci0K
LWludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5
KiBwYWdlKQotewotICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgp
LnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmNs
b3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCi17Ci0gICAgV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7Ci19
Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90IHNwZWxs
RG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIGludDMyX3Qm
IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQotewotICAg
IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5n
KHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBtaXNzcGVsbGluZ0xvY2F0
aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3Jh
bW1hck9mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQs
IHVpbnQzMl90IGxlbmd0aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFy
RGV0YWlscywgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFy
TGVuZ3RoKQotewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tH
cmFtbWFyT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRleHQsIGxlbmd0aCksIGdy
YW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5ndGgpOwotfQot
Ci1ib29sIFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKLXsKLSAgICByZXR1cm4g
V2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zcGVsbGluZ1VJSXNTaG93aW5nKCk7
Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQotewot
ICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlz
U2hvd2luZygpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBtaXNz
cGVsbGVkV29yZCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRhZywgbWlzc3Bl
bGxlZFdvcmQpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdy
YW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdy
YW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCi17Ci0gICAg
V2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aEdy
YW1tYXJTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRl
dGFpbCk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRl
eHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQotewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCwgZ3Vl
c3Nlcyk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90IHNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hh
cmVkKCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKLX0KLQot
dm9pZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgd29yZCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLmlnbm9yZVdvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJD
b250ZXh0TWVudVByb3h5V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
Q29udGV4dE1lbnVQcm94eVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdl
N2IwNWMxYWE2Mzg2NjM5ODVjODE1NTM1MjFjYTZkZjlmZTdkNTAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJDb250ZXh0TWVudVByb3h5V2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNvbnRl
eHRNZW51UHJveHlXaW4uaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1XZWJDb250ZXh0TWVudVByb3h5V2luOjpXZWJDb250ZXh0TWVudVByb3h5
V2luKEhXTkQgcGFyZW50V2luZG93LCBXZWJQYWdlUHJveHkqIHBhZ2UpCi0gICAgOiBtX3dpbmRv
dyhwYXJlbnRXaW5kb3cpCi0gICAgLCBtX3BhZ2UocGFnZSkKLSAgICAsIG1fbWVudSgwKQotewot
fQotCi12b2lkIFdlYkNvbnRleHRNZW51UHJveHlXaW46OnBvcHVsYXRlTWVudShITUVOVSBtZW51
LCBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQotewotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3Qg
V2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgaXRlbURhdGEgPSBpdGVtc1tpXTsKLSAgICAgICAgc3dp
dGNoIChpdGVtRGF0YS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBY3Rpb25UeXBlOgotICAgICAg
ICBjYXNlIENoZWNrYWJsZUFjdGlvblR5cGU6IHsKLSAgICAgICAgICAgIFVJTlQgZmxhZ3MgPSBp
dGVtRGF0YS5lbmFibGVkKCkgPyBNRl9FTkFCTEVEIDogTUZfRElTQUJMRUQ7Ci0gICAgICAgICAg
ICBpZiAoaXRlbURhdGEuY2hlY2tlZCgpKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IE1GX0NI
RUNLRUQ7Ci0gICAgICAgICAgICBTdHJpbmcgdGl0bGUgPSBpdGVtRGF0YS50aXRsZSgpOwotICAg
ICAgICAgICAgOjpBcHBlbmRNZW51KG1lbnUsIGZsYWdzLCBpdGVtRGF0YS5hY3Rpb24oKSwgdGl0
bGUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7Ci0KLSAgICAgICAgICAgIG1fYWN0
aW9uTWFwLmFkZChpdGVtRGF0YS5hY3Rpb24oKSwgaXRlbURhdGEpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTZXBhcmF0b3JUeXBlOgotICAgICAgICAgICAg
OjpBcHBlbmRNZW51KG1lbnUsIE1GX1NFUEFSQVRPUiwgMCwgMCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBTdWJtZW51VHlwZTogewotICAgICAgICAgICAgSE1FTlUgc3ViTWVu
dSA9IDo6Q3JlYXRlUG9wdXBNZW51KCk7Ci0gICAgICAgICAgICBwb3B1bGF0ZU1lbnUoc3ViTWVu
dSwgaXRlbURhdGEuc3VibWVudSgpKTsKLSAgICAgICAgICAgIFN0cmluZyB0aXRsZSA9IGl0ZW1E
YXRhLnRpdGxlKCk7Ci0gICAgICAgICAgICA6OkFwcGVuZE1lbnUobWVudSwgTUZfUE9QVVAsIHJl
aW50ZXJwcmV0X2Nhc3Q8VUlOVD4oc3ViTWVudSksIHRpdGxlLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIFdlYkNvbnRleHRNZW51UHJveHlXaW46OnNob3dDb250ZXh0TWVudShjb25z
dCBJbnRQb2ludCYgb3JpZ2luLCBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4m
IGl0ZW1zKQotewotICAgIGlmIChpdGVtcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEhpZGUgYW55IGNvbnRleHQgbWVudSB3ZSBoYXZlIHNob3dpbmcgKHRoaXMgYWxzbyBk
ZXN0cm95cyB0aGUgbWVudSkuCi0gICAgaGlkZUNvbnRleHRNZW51KCk7Ci0KLSAgICBtX21lbnUg
PSA6OkNyZWF0ZVBvcHVwTWVudSgpOwotICAgIHBvcHVsYXRlTWVudShtX21lbnUsIGl0ZW1zKTsK
LQotICAgIFBPSU5UIHBvaW50ID0gUE9JTlQob3JpZ2luKTsKLSAgICBpZiAoITo6Q2xpZW50VG9T
Y3JlZW4obV93aW5kb3csICZwb2ludCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFVJTlQgZmxh
Z3MgPSBUUE1fUklHSFRCVVRUT04gfCBUUE1fVE9QQUxJR04gfCBUUE1fVkVSUE9TQU5JTUFUSU9O
IHwgVFBNX0hPUklaT05UQUwgfCBUUE1fTEVGVEFMSUdOIHwgVFBNX0hPUlBPU0FOSU1BVElPTiB8
IFRQTV9SRVRVUk5DTUQgfCBUUE1fTk9OT1RJRlk7Ci0gICAgaW50IHNlbGVjdGVkQ29tbWFuZCA9
IDo6VHJhY2tQb3B1cE1lbnVFeChtX21lbnUsIGZsYWdzLCBwb2ludC54LCBwb2ludC55LCBtX3dp
bmRvdywgMCk7Ci0gICAgaWYgKCFzZWxlY3RlZENvbW1hbmQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcGFnZS0+Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQobV9hY3Rpb25NYXAuZ2V0KHNlbGVj
dGVkQ29tbWFuZCkpOwotfQotCi12b2lkIFdlYkNvbnRleHRNZW51UHJveHlXaW46OmhpZGVDb250
ZXh0TWVudSgpCi17Ci0gICAgaWYgKG1fbWVudSkgewotICAgICAgICA6OkRlc3Ryb3lNZW51KG1f
bWVudSk7Ci0gICAgICAgIG1fbWVudSA9IDA7Ci0gICAgfQotCi0gICAgbV9hY3Rpb25NYXAuY2xl
YXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkNvbnRleHRNZW51UHJveHlXaW4uaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy93aW4vV2ViQ29udGV4dE1lbnVQcm94eVdpbi5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhODQzYjI2MjU4ZDUxYmFjZWI3NzliOTY0ZTBlZTgzZWI5YzQ0NGU0
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViQ29udGV4dE1lbnVQcm94eVdpbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViQ29udGV4dE1lbnVQ
cm94eVdpbl9oCi0jZGVmaW5lIFdlYkNvbnRleHRNZW51UHJveHlXaW5faAotCi0jaW5jbHVkZSAi
V2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgotI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHku
aCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQ29udGV4dE1lbnVQcm94eVdpbiA6IHB1
YmxpYyBXZWJDb250ZXh0TWVudVByb3h5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxXZWJDb250ZXh0TWVudVByb3h5V2luPiBjcmVhdGUoSFdORCBwYXJlbnRXaW5kb3csIFdlYlBh
Z2VQcm94eSogcGFnZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ29u
dGV4dE1lbnVQcm94eVdpbihwYXJlbnRXaW5kb3csIHBhZ2UpKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgV2ViQ29udGV4dE1lbnVQcm94eVdpbihIV05EIHBhcmVudFdpbmRvdywgV2ViUGFnZVBy
b3h5KiBwYWdlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mKTsK
LSAgICB2aXJ0dWFsIHZvaWQgaGlkZUNvbnRleHRNZW51KCk7Ci0KLSAgICB2b2lkIHBvcHVsYXRl
TWVudShITUVOVSwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+Jik7Ci0KLSAg
ICBITUVOVSBtX21lbnU7Ci0gICAgSFdORCBtX3dpbmRvdzsKLSAgICBXZWJQYWdlUHJveHkqIG1f
cGFnZTsKLQotICAgIC8vIENyZWF0ZXMgYSBtYXAgZnJvbSB0aGUgY29udGV4dCBtZW51IGl0ZW0n
cyBhY3Rpb24gdG8gdGhlIGNvbnRleHQgbWVudSBpdGVtIGl0c2VsZi4KLSAgICBIYXNoTWFwPGlu
dCwgV2ViQ29udGV4dE1lbnVJdGVtRGF0YT4gbV9hY3Rpb25NYXA7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYkNvbnRleHRNZW51UHJveHlXaW5faApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJDb250ZXh0V2luLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViQ29udGV4dFdpbi5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDBkMmU5NTQyZTg4ZTE3OWI4NmJmOGEzNDc1ZGJkMmY4ZTZmNzU0
ZmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJDb250ZXh0V2luLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIldlYkNvbnRleHQuaCIKLQotI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0KLSNp
ZiBVU0UoQ0ZORVRXT1JLKQotI2luY2x1ZGUgPENGTmV0d29yay9DRlVSTENhY2hlUHJpdi5oPgot
I2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4g
Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1TdHJpbmcgV2ViQ29udGV4dDo6YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpCi17Ci0g
ICAgcmV0dXJuIGxvY2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpOwotfQotCi12b2lk
IFdlYkNvbnRleHQ6OnNldFNob3VsZFBhaW50TmF0aXZlQ29udHJvbHMoYm9vbCBiKQotewotICAg
IG1fc2hvdWxkUGFpbnROYXRpdmVDb250cm9scyA9IGI7Ci0KLSAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFNob3VsZFBhaW50TmF0aXZlQ29udHJvbHMobV9z
aG91bGRQYWludE5hdGl2ZUNvbnRyb2xzKSk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6cGxhdGZv
cm1Jbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzKQotewotICAgIHBhcmFtZXRlcnMuc2hvdWxkUGFpbnROYXRpdmVDb250cm9scyA9IG1f
c2hvdWxkUGFpbnROYXRpdmVDb250cm9sczsKLQotI2lmIFVTRShDRk5FVFdPUkspCi0gICAgUmV0
YWluUHRyPENGVVJMQ2FjaGVSZWY+IGNmdXJsQ2FjaGUoQWRvcHRDRiwgQ0ZVUkxDYWNoZUNvcHlT
aGFyZWRVUkxDYWNoZSgpKTsKLSAgICBwYXJhbWV0ZXJzLmNmVVJMQ2FjaGVEaXNrQ2FwYWNpdHkg
PSBDRlVSTENhY2hlRGlza0NhcGFjaXR5KGNmdXJsQ2FjaGUuZ2V0KCkpOwotICAgIHBhcmFtZXRl
cnMuY2ZVUkxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gQ0ZVUkxDYWNoZU1lbW9yeUNhcGFjaXR5KGNm
dXJsQ2FjaGUuZ2V0KCkpOwotCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZlVSTENhY2hl
UGF0aChBZG9wdENGLCB3a0NvcHlGb3VuZGF0aW9uQ2FjaGVEaXJlY3RvcnkoMCkpOwotICAgIHBh
cmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5ID0gU3RyaW5nKGNmVVJMQ2FjaGVQYXRoLmdldCgp
KTsKLSAgICAvLyBSZW1vdmUgdGhlIGVuZGluZyAnXCcgKG5lY2Vzc2FyeSB0byBoYXZlIENGTmV0
d29yayBmaW5kIHRoZSBDYWNoZSBmaWxlKS4KLSAgICBBU1NFUlQocGFyYW1ldGVycy5kaXNrQ2Fj
aGVEaXJlY3RvcnkubGVuZ3RoKCkpOwotICAgIGlmIChwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVj
dG9yeS5lbmRzV2l0aChVQ2hhcignXFwnKSkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGlza0NhY2hl
RGlyZWN0b3J5LnJlbW92ZShwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeS5sZW5ndGgoKSAt
IDEpOwotCi0gICAgcGFyYW1ldGVycy51aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyID0gU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGlj
dGlvbmFyeUtleShDRkJ1bmRsZUdldE1haW5CdW5kbGUoKSwga0NGQnVuZGxlSWRlbnRpZmllcktl
eSkpKTsKLSAgICBwYXJhbWV0ZXJzLnNlcmlhbGl6ZWREZWZhdWx0U3RvcmFnZVNlc3Npb24uYWRv
cHRDRih3a0NvcHlTZXJpYWxpemVkRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwotCi0gICAgcGFy
YW1ldGVycy5pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29r
aWVBY2NlcHRQb2xpY3k7Ci0KLSNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKQotfQotCi12b2lkIFdl
YkNvbnRleHQ6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQotewotfQotCi1TdHJpbmcgV2Vi
Q29udGV4dDo6cGxhdGZvcm1EZWZhdWx0RGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdAotewotICAg
IHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoV2ViQ29yZTo6bG9jYWxV
c2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCksICJEYXRhYmFzZXMiKTsKLX0KLQotU3RyaW5n
IFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBjb25zdAotewot
ICAgIC8vIEljb25EYXRhYmFzZSBzaG91bGQgYmUgZGlzYWJsZWQgYnkgZGVmYXVsdCBvbiBXaW5k
b3dzLCBhbmQgc2hvdWxkIHRoZXJlZm9yZSBoYXZlIG5vIGRlZmF1bHQgcGF0aC4KLSAgICByZXR1
cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRMb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdAotewotICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQoV2ViQ29yZTo6bG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0
b3J5KCksICJMb2NhbFN0b3JhZ2UiKTsKLX0KLQotU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3Jt
RGVmYXVsdERpc2tDYWNoZURpcmVjdG9yeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdlYkNvcmU6
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChXZWJDb3JlOjpsb2NhbFVzZXJTcGVjaWZpY1N0b3Jh
Z2VEaXJlY3RvcnkoKSwgImNhY2hlIik7Ci19Ci0KLVN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9y
bURlZmF1bHRDb29raWVTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViRnVsbFNjcmVl
bk1hbmFnZXJQcm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkZ1
bGxTY3JlZW5NYW5hZ2VyUHJveHlXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiNTNlMmJkNDgzOTgxMmJhNTBlMzNhMTNiNmY0YTNhMWEwNjkwOTE0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKLQotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Z1bGxTY3JlZW5D
b250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBXZWJGdWxsU2NyZWVu
TWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKLXsKLSAgICBpZiAoIW1fd2ViVmlldykKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIG1fd2ViVmlldy0+ZnVsbFNjcmVlbkNvbnRyb2xsZXIoKS0+
Y2xvc2UoKTsKLSAgICBtX3dlYlZpZXcgPSAwOwotfQotCi12b2lkIFdlYkZ1bGxTY3JlZW5NYW5h
Z2VyUHJveHk6OmNsb3NlKCkKLXsKLSAgICBpZiAoIW1fd2ViVmlldykKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fd2ViVmlldy0+ZnVsbFNjcmVlbkNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsKLX0KLQot
Ym9vbCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Ojppc0Z1bGxTY3JlZW4oKQotewotICAgIHJl
dHVybiBtX3dlYlZpZXctPmZ1bGxTY3JlZW5Db250cm9sbGVyKCktPmlzRnVsbFNjcmVlbigpOwot
fQotCi12b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmVudGVyRnVsbFNjcmVlbigpCi17
Ci0gICAgaWYgKCFtX3dlYlZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dlYlZpZXctPmZ1
bGxTY3JlZW5Db250cm9sbGVyKCktPmVudGVyRnVsbFNjcmVlbigpOwotfQotCi12b2lkIFdlYkZ1
bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsU2NyZWVuKCkKLXsKLSAgICBpZiAoIW1fd2Vi
VmlldykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd2ViVmlldy0+ZnVsbFNjcmVlbkNvbnRyb2xs
ZXIoKS0+ZXhpdEZ1bGxTY3JlZW4oKTsKLX0KLQotdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5OjpiZWdhbkVudGVyRnVsbFNjcmVlbihjb25zdCBJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNv
bnN0IEludFJlY3QmIGZpbmFsRnJhbWUpCi17Ci0gICAgLy8gTm8tb3AuCi19Ci0KLXZvaWQgV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6YmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBJbnRSZWN0
JiBpbml0aWFsRnJhbWUsIGNvbnN0IEludFJlY3QmIGZpbmFsRnJhbWUpCi17Ci0gICAgLy8gTm8t
b3AuCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNjdmZWI2YzY3ZTFiNDUzMjVkMGFkZTNkMzQ3ZjZk
YmIyYzQzYjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwzNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUikKLQotI2luY2x1ZGUgIldlYktpdEJ1bmRsZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3Jl
SW5zdGFuY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd01lc3NhZ2VCcm9hZGNh
c3Rlci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IExQQ1dTVFIga1dlYktpdDJJbnNwZWN0
b3JXaW5kb3dDbGFzc05hbWUgPSBMIldlYktpdDJJbnNwZWN0b3JXaW5kb3dDbGFzcyI7Ci0KLWJv
b2wgV2ViSW5zcGVjdG9yUHJveHk6OnJlZ2lzdGVySW5zcGVjdG9yVmlld1dpbmRvd0NsYXNzKCkK
LXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7Ci0g
ICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOwotCi0gICAgV05EQ0xBU1NFWCB3
Y2V4OwotCi0gICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Ci0gICAgd2NleC5z
dHlsZSAgICAgICAgICA9IENTX0RCTENMS1M7Ci0gICAgd2NleC5scGZuV25kUHJvYyAgICA9IFdl
Ykluc3BlY3RvclByb3h5OjpJbnNwZWN0b3JWaWV3V25kUHJvYzsKLSAgICB3Y2V4LmNiQ2xzRXh0
cmEgICAgID0gMDsKLSAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gc2l6ZW9mKFdlYkluc3BlY3Rv
clByb3h5Kik7Ci0gICAgd2NleC5oSW5zdGFuY2UgICAgICA9IGluc3RhbmNlSGFuZGxlKCk7Ci0g
ICAgd2NleC5oSWNvbiAgICAgICAgICA9IDA7Ci0gICAgd2NleC5oQ3Vyc29yICAgICAgICA9IDo6
TG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAwOwot
ICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSAwOwotICAgIHdjZXgubHBzekNsYXNzTmFtZSAgPSBr
V2ViS2l0Mkluc3BlY3RvcldpbmRvd0NsYXNzTmFtZTsKLSAgICB3Y2V4LmhJY29uU20gICAgICAg
ID0gMDsKLQotICAgIHJldHVybiAhITo6UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKLX0KLQotTFJF
U1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JQcm94eTo6SW5zcGVjdG9yVmlld1duZFByb2MoSFdO
RCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0g
ICAgTE9OR19QVFIgbG9uZ1B0ciA9IDo6R2V0V2luZG93TG9uZ1B0cihoV25kLCAwKTsKLSAgICAK
LSAgICBpZiAoV2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvclZpZXcgPSByZWludGVycHJldF9j
YXN0PFdlYkluc3BlY3RvclByb3h5Kj4obG9uZ1B0cikpCi0gICAgICAgIHJldHVybiBpbnNwZWN0
b3JWaWV3LT53bmRQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIGlm
IChtZXNzYWdlID09IFdNX0NSRUFURSkgewotICAgICAgICBMUENSRUFURVNUUlVDVCBjcmVhdGVT
dHJ1Y3QgPSByZWludGVycHJldF9jYXN0PExQQ1JFQVRFU1RSVUNUPihsUGFyYW0pOwotCi0gICAg
ICAgIC8vIEFzc29jaWF0ZSB0aGUgV2ViSW5zcGVjdG9yUHJveHkgd2l0aCB0aGUgd2luZG93Lgot
ICAgICAgICA6OlNldFdpbmRvd0xvbmdQdHIoaFduZCwgMCwgKExPTkdfUFRSKWNyZWF0ZVN0cnVj
dC0+bHBDcmVhdGVQYXJhbXMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gOjpEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6d2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQg
bXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIEFTU0VSVChtX2lzQXR0
YWNoZWQpOwotCi0gICAgc3dpdGNoIChtc2cpIHsKLSAgICBjYXNlIFdNX1dJTkRPV1BPU0NIQU5H
SU5HOgotICAgICAgICBvbldlYlZpZXdXaW5kb3dQb3NDaGFuZ2luZ0V2ZW50KHdQYXJhbSwgbFBh
cmFtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi1MUkVTVUxUIFdlYkluc3BlY3RvclByb3h5Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIExSRVNVTFQg
bFJlc3VsdCA9IDA7Ci0gICAgYm9vbCBoYW5kbGVkID0gdHJ1ZTsKLQotICAgIHN3aXRjaCAobWVz
c2FnZSkgewotICAgIGNhc2UgV01fU0laRToKLSAgICAgICAgbFJlc3VsdCA9IG9uU2l6ZUV2ZW50
KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBXTV9HRVRNSU5NQVhJTkZPOgotICAgICAgICBsUmVzdWx0ID0gb25NaW5NYXhJ
bmZvRXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFdNX1NFVEZPQ1VTOgotICAgICAgICBsUmVzdWx0ID0gb25TZXRG
b2N1c0V2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9DTE9TRToKLSAgICAgICAgbFJlc3VsdCA9IG9uQ2xvc2VF
dmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgaWYgKCFoYW5kbGVkKQotICAgICAgICBsUmVzdWx0ID0gOjpEZWZX
aW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIHJldHVybiBs
UmVzdWx0OwotfQotCi1MUkVTVUxUIFdlYkluc3BlY3RvclByb3h5OjpvblNpemVFdmVudChIV05E
LCBVSU5ULCBXUEFSQU0sIExQQVJBTSwgYm9vbCYpCi17Ci0gICAgUkVDVCByZWN0OwotICAgIDo6
R2V0Q2xpZW50UmVjdChtX2luc3BlY3RvcldpbmRvdywgJnJlY3QpOwotCi0gICAgOjpTZXRXaW5k
b3dQb3MobV9pbnNwZWN0b3JWaWV3LT53aW5kb3coKSwgMCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwg
cmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9S
REVSKTsKLQotICAgIHJldHVybiAwOwotfQotCi1MUkVTVUxUIFdlYkluc3BlY3RvclByb3h5Ojpv
blNldEZvY3VzRXZlbnQoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0gbFBhcmFtLCBib29sJikK
LXsgICAgCi0gICAgOjpTZXRGb2N1cyhtX2luc3BlY3RvclZpZXctPndpbmRvdygpKTsKLQotICAg
IHJldHVybiAwOwotfQotCi1MUkVTVUxUIFdlYkluc3BlY3RvclByb3h5Ojpvbk1pbk1heEluZm9F
dmVudChIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSBsUGFyYW0sIGJvb2wmKQotewotICAgIE1J
Tk1BWElORk8qIGluZm8gPSByZWludGVycHJldF9jYXN0PE1JTk1BWElORk8qPihsUGFyYW0pOwot
ICAgIFBPSU5UIHNpemUgPSB7bWluaW11bVdpbmRvd1dpZHRoLCBtaW5pbXVtV2luZG93SGVpZ2h0
fTsKLSAgICBpbmZvLT5wdE1pblRyYWNrU2l6ZSA9IHNpemU7Ci0KLSAgICByZXR1cm4gMDsKLX0K
LQotTFJFU1VMVCBXZWJJbnNwZWN0b3JQcm94eTo6b25DbG9zZUV2ZW50KEhXTkQsIFVJTlQsIFdQ
QVJBTSwgTFBBUkFNLCBib29sJikKLXsKLSAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JXaW5k
b3csIFNXX0hJREUpOwotICAgIGNsb3NlKCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6b25XZWJWaWV3V2luZG93UG9zQ2hhbmdpbmdFdmVudChXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFdJTkRPV1BPUyogd2luZG93UG9zID0gcmVp
bnRlcnByZXRfY2FzdDxXSU5ET1dQT1MqPihsUGFyYW0pOwotCi0gICAgaWYgKHdpbmRvd1Bvcy0+
ZmxhZ3MgJiBTV1BfTk9TSVpFKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIV05EIGluc3BlY3Rv
cldpbmRvdyA9IG1faW5zcGVjdG9yVmlldy0+d2luZG93KCk7Ci0KLSAgICBSRUNUIGluc3BlY3Rv
clJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KGluc3BlY3RvcldpbmRvdywgJmluc3BlY3RvclJl
Y3QpOwotICAgIHVuc2lnbmVkIGluc3BlY3RvckhlaWdodCA9IGluc3BlY3RvclJlY3QuYm90dG9t
IC0gaW5zcGVjdG9yUmVjdC50b3A7Ci0KLSAgICBSRUNUIHBhcmVudFJlY3Q7Ci0gICAgOjpHZXRD
bGllbnRSZWN0KDo6R2V0UGFyZW50KGluc3BlY3RvcldpbmRvdyksICZwYXJlbnRSZWN0KTsKLSAg
ICBpbnNwZWN0b3JIZWlnaHQgPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJh
aW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGluc3BlY3RvckhlaWdodCwgcGFyZW50UmVjdC5ib3R0
b20gLSBwYXJlbnRSZWN0LnRvcCk7Ci0KLSAgICB3aW5kb3dQb3MtPmN5IC09IGluc3BlY3Rvckhl
aWdodDsKLQotICAgIDo6U2V0V2luZG93UG9zKGluc3BlY3RvcldpbmRvdywgMCwgd2luZG93UG9z
LT54LCB3aW5kb3dQb3MtPnkgKyB3aW5kb3dQb3MtPmN5LCB3aW5kb3dQb3MtPmN4LCBpbnNwZWN0
b3JIZWlnaHQsIFNXUF9OT1pPUkRFUik7Ci19Ci0KLVdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSgpCi17Ci0gICAgQVNTRVJUKCFtX2lu
c3BlY3RvclZpZXcpOwotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JXaW5kb3cpOwotCi0gICAgUkVD
VCBpbml0aWFsUmVjdCA9IHsgMCwgMCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93
SGVpZ2h0IH07Ci0gICAgbV9pbnNwZWN0b3JWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKGluaXRpYWxS
ZWN0LCBtX3BhZ2UtPnByb2Nlc3MoKS0+Y29udGV4dCgpLCBpbnNwZWN0b3JQYWdlR3JvdXAoKSwg
MCk7Ci0KLSAgICByZXR1cm4gbV9pbnNwZWN0b3JWaWV3LT5wYWdlKCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbigpCi17Ci0gICAgcmVnaXN0ZXJJbnNwZWN0b3JW
aWV3V2luZG93Q2xhc3MoKTsKLQotICAgIG1faW5zcGVjdG9yV2luZG93ID0gOjpDcmVhdGVXaW5k
b3dFeCgwLCBrV2ViS2l0Mkluc3BlY3RvcldpbmRvd0NsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBF
RFdJTkRPVyB8IFdTX0NMSVBTSUJMSU5HUyB8IFdTX0NMSVBDSElMRFJFTiwKLSAgICAgICAgMCwg
MCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0LCAwLCAwLCBpbnN0YW5j
ZUhhbmRsZSgpLCB0aGlzKTsKLSAgICBBU1NFUlQoOjpJc1dpbmRvdyhtX2luc3BlY3RvcldpbmRv
dykpOwotCi0gICAgbV9pbnNwZWN0b3JWaWV3LT5zZXRQYXJlbnRXaW5kb3cobV9pbnNwZWN0b3JX
aW5kb3cpOwotCi0gICAgaWYgKG1faXNBdHRhY2hlZCkKLSAgICAgICAgcGxhdGZvcm1BdHRhY2go
KTsKLSAgICBlbHNlCi0gICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvcldpbmRvdywgU1df
U0hPVyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2UoKQot
ewotICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkKTsKLSAgICBBU1NFUlQoIW1faXNWaXNpYmxlIHx8
IG1faW5zcGVjdG9yV2luZG93KTsKLSAgICBBU1NFUlQoIW1faXNWaXNpYmxlIHx8IG1faW5zcGVj
dG9yVmlldyk7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAgICAgQVNTRVJU
KDo6SXNXaW5kb3cobV9pbnNwZWN0b3JXaW5kb3cpKTsKLSAgICAgICAgOjpEZXN0cm95V2luZG93
KG1faW5zcGVjdG9yV2luZG93KTsKLSAgICB9Ci0KLSAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7
Ci0gICAgbV9pbnNwZWN0b3JWaWV3ID0gMDsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQotewotICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgbm90IGJy
aW5nIGEgYmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpIHRvIHRoZSBmcm9udCwgb25seSBpdHMgd2lu
ZG93LgotICAgIEhXTkQgcGFyZW50V2luZG93ID0gbV9pc0F0dGFjaGVkID8gOjpHZXRBbmNlc3Rv
cihtX3BhZ2UtPm5hdGl2ZVdpbmRvdygpLCBHQV9ST09UKSA6IG1faW5zcGVjdG9yV2luZG93Owot
ICAgIGlmICghcGFyZW50V2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoOjpJ
c1dpbmRvdyhwYXJlbnRXaW5kb3cpKTsKLSAgICA6OlNldFdpbmRvd1BvcyhwYXJlbnRXaW5kb3cs
IEhXTkRfVE9QLCAwLCAwLCAwLCAwLCBTV1BfU0hPV1dJTkRPVyB8IFNXUF9OT01PVkUgfCBTV1Bf
Tk9TSVpFKTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewot
ICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBtYWRlIGxvY2FsaXphYmxlIG9uY2UgV2ViS2l0
MiBzdXBwb3J0cyBpdC4gPHJkYXI6Ly9wcm9ibGVtLzg3Mjg4NjA+Ci0gICAgU3RyaW5nIHRpdGxl
ID0gbWFrZVN0cmluZygiV2ViIEluc3BlY3RvciAiLCBzdGF0aWNfY2FzdDxVQ2hhcj4oMHgyMDE0
KSwgJyAnLCB1cmxTdHJpbmcpOwotICAgIDo6U2V0V2luZG93VGV4dFcobV9pbnNwZWN0b3JXaW5k
b3csIHRpdGxlLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwotfQotCi11bnNpZ25l
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewot
ICAgIEhXTkQgaW5zcGVjdGVkV2luZG93ID0gbV9wYWdlLT5uYXRpdmVXaW5kb3coKTsKLQotICAg
IFJFQ1QgaW5zcGVjdGVkV2luZG93UmVjdDsKLSAgICA6OkdldFdpbmRvd1JlY3QoaW5zcGVjdGVk
V2luZG93LCAmaW5zcGVjdGVkV2luZG93UmVjdCk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGluc3BlY3RlZFdpbmRvd1JlY3QuYm90dG9tIC0gaW5zcGVjdGVkV2luZG93UmVj
dC50b3ApOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCi17
Ci0gICAgSFdORCB3ZWJWaWV3V2luZG93ID0gbV9wYWdlLT5uYXRpdmVXaW5kb3coKTsKLSAgICBI
V05EIHBhcmVudFdpbmRvdyA9IDo6R2V0UGFyZW50KHdlYlZpZXdXaW5kb3cpOwotCi0gICAgV2lu
ZG93TWVzc2FnZUJyb2FkY2FzdGVyOjphZGRMaXN0ZW5lcih3ZWJWaWV3V2luZG93LCB0aGlzKTsK
LSAgICBtX2luc3BlY3RvclZpZXctPnNldFBhcmVudFdpbmRvdyhwYXJlbnRXaW5kb3cpOwotICAg
IDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvcldpbmRvdywgU1dfSElERSk7Ci0KLSAgICA6OlBvc3RN
ZXNzYWdlKHBhcmVudFdpbmRvdywgV01fU0laRSwgMCwgMCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBIV05EIHdlYlZpZXdXaW5kb3cgPSBt
X3BhZ2UtPm5hdGl2ZVdpbmRvdygpOwotICAgIFdpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVt
b3ZlTGlzdGVuZXIod2ViVmlld1dpbmRvdywgdGhpcyk7Ci0KLSAgICBtX2luc3BlY3RvclZpZXct
PnNldFBhcmVudFdpbmRvdyhtX2luc3BlY3RvcldpbmRvdyk7Ci0KLSAgICBpZiAobV9pc1Zpc2li
bGUpCi0gICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvcldpbmRvdywgU1dfU0hPVyk7Ci0K
LSAgICAvLyBTZW5kIHRoZSBkZXRhY2hlZCBpbnNwZWN0b3Igd2luZG93IGFuZCB0aGUgV2ViVmll
dydzIHBhcmVudCB3aW5kb3cgV01fU0laRSBtZXNzYWdlcwotICAgIC8vIHRvIGhhdmUgdGhlbSBy
ZS1sYXlvdXQgY29ycmVjdGx5LgotICAgIDo6UG9zdE1lc3NhZ2UobV9pbnNwZWN0b3JXaW5kb3cs
IFdNX1NJWkUsIDAsIDApOwotICAgIDo6UG9zdE1lc3NhZ2UoOjpHZXRQYXJlbnQod2ViVmlld1dp
bmRvdyksIFdNX1NJWkUsIDAsIDApOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBpZiAo
IW1faXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSFdORCBpbnNwZWN0ZWRXaW5k
b3cgPSBtX3BhZ2UtPm5hdGl2ZVdpbmRvdygpOwotICAgIEhXTkQgcGFyZW50V2luZG93ID0gOjpH
ZXRQYXJlbnQoaW5zcGVjdGVkV2luZG93KTsKLQotICAgIFJFQ1QgcGFyZW50V2luZG93UmVjdDsK
LSAgICA6OkdldFdpbmRvd1JlY3QocGFyZW50V2luZG93LCAmcGFyZW50V2luZG93UmVjdCk7Ci0K
LSAgICBSRUNUIGluc3BlY3RlZFdpbmRvd1JlY3Q7Ci0gICAgOjpHZXRXaW5kb3dSZWN0KGluc3Bl
Y3RlZFdpbmRvdywgJmluc3BlY3RlZFdpbmRvd1JlY3QpOwotCi0gICAgaW50IHRvdGFsSGVpZ2h0
ID0gcGFyZW50V2luZG93UmVjdC5ib3R0b20gLSBwYXJlbnRXaW5kb3dSZWN0LnRvcDsKLSAgICBp
bnQgd2ViVmlld1dpZHRoID0gaW5zcGVjdGVkV2luZG93UmVjdC5yaWdodCAtIGluc3BlY3RlZFdp
bmRvd1JlY3QubGVmdDsKLQotICAgIFBPSU5UIGluc3BlY3RlZFdpbmRvd09yaWdpbiA9IHsgaW5z
cGVjdGVkV2luZG93UmVjdC5sZWZ0LCBpbnNwZWN0ZWRXaW5kb3dSZWN0LnRvcCB9OwotICAgIDo6
U2NyZWVuVG9DbGllbnQocGFyZW50V2luZG93LCAmaW5zcGVjdGVkV2luZG93T3JpZ2luKTsKLQot
ICAgIEhXTkQgaW5zcGVjdG9yV2luZG93ID0gbV9pbnNwZWN0b3JWaWV3LT53aW5kb3coKTsKLSAg
ICA6OlNldFdpbmRvd1BvcyhpbnNwZWN0b3JXaW5kb3csIDAsIGluc3BlY3RlZFdpbmRvd09yaWdp
bi54LCB0b3RhbEhlaWdodCAtIGhlaWdodCwgd2ViVmlld1dpZHRoLCBoZWlnaHQsIFNXUF9OT1pP
UkRFUik7Ci0KLSAgICAvLyBXZSB3YW50IHRvIHNldCB0aGUgaW5zcGVjdGVkIHdlYiB2aWV3IGhl
aWdodCB0byB0aGUgdG90YWxIZWlnaHQsIGJlY2F1c2UgdGhlIGhlaWdodCBhZGp1c3RtZW50Ci0g
ICAgLy8gb2YgdGhlIGluc3BlY3RlZCBXZWJWaWV3IGhhcHBlbnMgaW4gb25XaW5kb3dQb3NDaGFu
Z2luZywgbm90IGhlcmUuCi0gICAgOjpTZXRXaW5kb3dQb3MoaW5zcGVjdGVkV2luZG93LCAwLCBp
bnNwZWN0ZWRXaW5kb3dPcmlnaW4ueCwgaW5zcGVjdGVkV2luZG93T3JpZ2luLnksIHdlYlZpZXdX
aWR0aCwgdG90YWxIZWlnaHQsIFNXUF9OT1pPUkRFUik7Ci0KLSAgICA6OlJlZHJhd1dpbmRvdyhp
bnNwZWN0b3JXaW5kb3csIDAsIDAsIFJEV19JTlZBTElEQVRFIHwgUkRXX0FMTENISUxEUkVOIHwg
UkRXX1VQREFURU5PVyk7IAotICAgIDo6UmVkcmF3V2luZG93KGluc3BlY3RlZFdpbmRvdywgMCwg
MCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfVVBEQVRFTk9XKTsKLX0K
LQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkgY29uc3QKLXsK
LSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYoQWRvcHRDRiwgQ0ZCdW5kbGVDb3B5
UmVzb3VyY2VVUkwod2ViS2l0QnVuZGxlKCksIENGU1RSKCJpbnNwZWN0b3IiKSwgQ0ZTVFIoImh0
bWwiKSwgQ0ZTVFIoImluc3BlY3RvciIpKSk7Ci0gICAgaWYgKCFodG1sVVJMUmVmKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nKENGVVJMR2V0U3RyaW5nKGh0
bWxVUkxSZWYuZ2V0KCkpKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
b3JCYXNlVVJMKCkgY29uc3QKLXsKLSAgICAvLyBXZWIgSW5zcGVjdG9yIHVzZXMgbG9jYWxpemVk
IHN0cmluZ3MsIHNvIGl0J3Mgbm90IGNvbnRhaW5lZCB3aXRoaW4gaW5zcGVjdG9yIGRpcmVjdG9y
eS4KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYoQWRvcHRDRiwgQ0ZCdW5kbGVD
b3B5UmVzb3VyY2VzRGlyZWN0b3J5VVJMKHdlYktpdEJ1bmRsZSgpKSk7Ci0gICAgaWYgKCFodG1s
VVJMUmVmKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nKENG
VVJMR2V0U3RyaW5nKGh0bWxVUkxSZWYuZ2V0KCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiYzFmYTU3YzhlMmVlNDQ4ZjQ3MjFhNTkwZTJkMzI0NTZkOWFiNTZkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwMSAr
MCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0qIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0qIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0q
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0qIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLQotI2luY2x1ZGUg
IlBhZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJEcmFnU291cmNlLmgiCi0jaW5jbHVkZSAiV2Vi
UGFnZU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlXaW4uaCIKLSNpbmNs
dWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLQotI2luY2x1ZGUgInJlc291cmNlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9CaXRtYXBJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0NsaXBib2FyZFV0aWxpdGllc1dpbi5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvU3lzdGVtSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV0NEYXRhT2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDx0Y2hhci5o
PgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdDb25jYXRlbmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXN0YXRpYyBTdHJpbmcgdXNlclZpc2libGVXZWJLaXRWZXJzaW9uU3RyaW5n
KCkKLXsKLSAgICBMUFdTVFIgYnVpbGROdW1iZXJTdHJpbmdQdHI7Ci0gICAgaWYgKCE6OkxvYWRT
dHJpbmdXKGluc3RhbmNlSGFuZGxlKCksIEJVSUxEX05VTUJFUiwgcmVpbnRlcnByZXRfY2FzdDxM
UFdTVFI+KCZidWlsZE51bWJlclN0cmluZ1B0ciksIDApIHx8ICFidWlsZE51bWJlclN0cmluZ1B0
cikKLSAgICAgICAgcmV0dXJuICI1MzQrIjsKLQotICAgIHJldHVybiBidWlsZE51bWJlclN0cmlu
Z1B0cjsKLX0KLQotU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3Qg
U3RyaW5nJiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpCi17Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIG9zVmVyc2lvbiwgKHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKSkp
OwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB3ZWJLaXRWZXJzaW9uLCAodXNlclZp
c2libGVXZWJLaXRWZXJzaW9uU3RyaW5nKCkpKTsKLQotICAgIHJldHVybiBtYWtlU3RyaW5nKCJN
b3ppbGxhLzUuMCAoIiwgb3NWZXJzaW9uLCAiKSBBcHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9u
LCAiIChLSFRNTCwgbGlrZSBHZWNrbykiLCBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQuaXNF
bXB0eSgpID8gIiIgOiAiICIsIGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7Ci19Ci0KLXZv
aWQgV2ViUGFnZVByb3h5OjpzZXRQb3B1cE1lbnVTZWxlY3RlZEluZGV4KGludDMyX3Qgc2VsZWN0
ZWRJbmRleCkKLXsKLSAgICBpZiAoIW1fYWN0aXZlUG9wdXBNZW51KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzdGF0aWNfY2FzdDxXZWJQb3B1cE1lbnVQcm94eVdpbio+KG1fYWN0aXZlUG9wdXBN
ZW51LmdldCgpKS0+c2V0Rm9jdXNlZEluZGV4KHNlbGVjdGVkSW5kZXgpOwotfQotCi1IV05EIFdl
YlBhZ2VQcm94eTo6bmF0aXZlV2luZG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdlQ2xp
ZW50LT5uYXRpdmVXaW5kb3coKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OnNjaGVkdWxlQ2hp
bGRXaW5kb3dHZW9tZXRyeVVwZGF0ZShjb25zdCBXaW5kb3dHZW9tZXRyeSYgZ2VvbWV0cnkpCi17
Ci0gICAgbV9wYWdlQ2xpZW50LT5zY2hlZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRhdGUoZ2Vv
bWV0cnkpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkSW5zdGFsbE9yVW5pbnN0YWxsUGFn
ZU92ZXJsYXkoYm9vbCBkaWRJbnN0YWxsKQotewotICAgIG1fcGFnZUNsaWVudC0+ZGlkSW5zdGFs
bE9yVW5pbnN0YWxsUGFnZU92ZXJsYXkoZGlkSW5zdGFsbCk7Ci19Ci0KLUludFJlY3QgV2ViUGFn
ZVByb3h5OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJJblNlbGVjdGVkUmFuZ2UoaW50IGNoYXJhY3Rl
clBvc2l0aW9uKQotewotICAgIEludFJlY3QgcmVzdWx0UmVjdDsKLSAgICBwcm9jZXNzKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpGaXJzdFJlY3RGb3JDaGFyYWN0ZXJJblNlbGVjdGVk
UmFuZ2UoY2hhcmFjdGVyUG9zaXRpb24pLCBNZXNzYWdlczo6V2ViUGFnZTo6Rmlyc3RSZWN0Rm9y
Q2hhcmFjdGVySW5TZWxlY3RlZFJhbmdlOjpSZXBseShyZXN1bHRSZWN0KSwgbV9wYWdlSUQpOwot
ICAgIHJldHVybiByZXN1bHRSZWN0OwotfQotCi1TdHJpbmcgV2ViUGFnZVByb3h5OjpnZXRTZWxl
Y3RlZFRleHQoKQotewotICAgIFN0cmluZyB0ZXh0OwotICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhZ2U6OkdldFNlbGVjdGVkVGV4dCgpLCBNZXNzYWdlczo6V2ViUGFnZTo6
R2V0U2VsZWN0ZWRUZXh0OjpSZXBseSh0ZXh0KSwgbV9wYWdlSUQpOwotICAgIHJldHVybiB0ZXh0
OwotfQotCi1ib29sIFdlYlBhZ2VQcm94eTo6Z2VzdHVyZVdpbGxCZWdpbihjb25zdCBJbnRQb2lu
dCYgcG9pbnQpCi17Ci0gICAgYm9vbCBjYW5CZWdpblBhbm5pbmcgPSBmYWxzZTsKLSAgICBwcm9j
ZXNzKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXN0dXJlV2lsbEJlZ2luKHBvaW50
KSwgTWVzc2FnZXM6OldlYlBhZ2U6Okdlc3R1cmVXaWxsQmVnaW46OlJlcGx5KGNhbkJlZ2luUGFu
bmluZyksIG1fcGFnZUlEKTsKLSAgICByZXR1cm4gY2FuQmVnaW5QYW5uaW5nOwotfQotCi12b2lk
IFdlYlBhZ2VQcm94eTo6Z2VzdHVyZURpZFNjcm9sbChjb25zdCBJbnRTaXplJiBzaXplKQotewot
ICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2VzdHVyZURpZFNjcm9sbChz
aXplKSwgbV9wYWdlSUQpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2VzdHVyZURpZEVuZCgp
Ci17Ci0gICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXN0dXJlRGlkRW5k
KCksIG1fcGFnZUlEKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OnNldEdlc3R1cmVSZWFjaGVk
U2Nyb2xsaW5nTGltaXQoYm9vbCBsaW1pdFJlYWNoZWQpCi17Ci0gICAgbV9wYWdlQ2xpZW50LT5z
ZXRHZXN0dXJlUmVhY2hlZFNjcm9sbGluZ0xpbWl0KGxpbWl0UmVhY2hlZCk7Ci19Ci0KLXZvaWQg
V2ViUGFnZVByb3h5OjpzdGFydERyYWdEcm9wKGNvbnN0IEludFBvaW50JiBpbWFnZU9yaWdpbiwg
Y29uc3QgSW50UG9pbnQmIGRyYWdQb2ludCwgdWludDY0X3Qgb2tFZmZlY3QsIGNvbnN0IEhhc2hN
YXA8VUlOVCwgVmVjdG9yPFN0cmluZz4gPiYgZGF0YU1hcCwgdWludDY0X3QgZmlsZVNpemUsIGNv
bnN0IFN0cmluZyYgcGF0aG5hbWUsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBmaWxlQ29u
dGVudEhhbmRsZSwgY29uc3QgSW50U2l6ZSYgZHJhZ0ltYWdlU2l6ZSwgY29uc3QgU2hhcmVkTWVt
b3J5OjpIYW5kbGUmIGRyYWdJbWFnZUhhbmRsZSwgYm9vbCBpc0xpbmtEcmFnKQotewotICAgIENP
TVB0cjxXQ0RhdGFPYmplY3Q+IGRhdGFPYmplY3Q7Ci0gICAgV0NEYXRhT2JqZWN0OjpjcmVhdGVJ
bnN0YW5jZSgmZGF0YU9iamVjdCwgZGF0YU1hcCk7Ci0KLSAgICBpZiAoZmlsZVNpemUpIHsKLSAg
ICAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gZmlsZUNvbnRlbnRCdWZmZXIgPSBTaGFyZWRNZW1v
cnk6OmNyZWF0ZShmaWxlQ29udGVudEhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7Ci0g
ICAgICAgIHNldEZpbGVEZXNjcmlwdG9yRGF0YShkYXRhT2JqZWN0LmdldCgpLCBmaWxlU2l6ZSwg
cGF0aG5hbWUpOwotICAgICAgICBzZXRGaWxlQ29udGVudERhdGEoZGF0YU9iamVjdC5nZXQoKSwg
ZmlsZVNpemUsIGZpbGVDb250ZW50QnVmZmVyLT5kYXRhKCkpOwotICAgIH0KLQotICAgIFJlZlB0
cjxTaGFyZWRNZW1vcnk+IG1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGRyYWdJ
bWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7Ci0gICAgaWYgKCFtZW1vcnlCdWZm
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxXZWJEcmFnU291cmNlPiBzb3VyY2Ug
PSBXZWJEcmFnU291cmNlOjpjcmVhdGVJbnN0YW5jZSgpOwotICAgIGlmICghc291cmNlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SURyYWdTb3VyY2VIZWxwZXI+IGhlbHBlcjsKLSAg
ICBpZiAoRkFJTEVEKDo6Q29DcmVhdGVJbnN0YW5jZShDTFNJRF9EcmFnRHJvcEhlbHBlciwgMCwg
Q0xTQ1RYX0lOUFJPQ19TRVJWRVIsIElJRF9JRHJhZ1NvdXJjZUhlbHBlciwgcmVpbnRlcnByZXRf
Y2FzdDxMUFZPSUQqPigmaGVscGVyKSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBCaXRtYXBJ
bmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoZHJhZ0ltYWdlU2l6ZSk7Ci0gICAg
dm9pZCogYml0czsKLSAgICBPd25QdHI8SEJJVE1BUD4gaGJtcCA9IGFkb3B0UHRyKDo6Q3JlYXRl
RElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsICZiaXRzLCAwLCAwKSk7
Ci0gICAgbWVtY3B5KGJpdHMsIG1lbW9yeUJ1ZmZlci0+ZGF0YSgpLCBtZW1vcnlCdWZmZXItPnNp
emUoKSk7Ci0KLSAgICBTSERSQUdJTUFHRSBzZGk7Ci0gICAgc2RpLnNpemVEcmFnSW1hZ2UuY3gg
PSBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVdpZHRoOwotICAgIHNkaS5zaXplRHJhZ0ltYWdlLmN5
ID0gYml0bWFwSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQ7Ci0gICAgc2RpLmNyQ29sb3JLZXkgPSAw
eGZmZmZmZmZmOwotICAgIHNkaS5oYm1wRHJhZ0ltYWdlID0gaGJtcC5sZWFrUHRyKCk7Ci0gICAg
c2RpLnB0T2Zmc2V0LnggPSBkcmFnUG9pbnQueCgpIC0gaW1hZ2VPcmlnaW4ueCgpOwotICAgIHNk
aS5wdE9mZnNldC55ID0gZHJhZ1BvaW50LnkoKSAtIGltYWdlT3JpZ2luLnkoKTsKLSAgICBpZiAo
aXNMaW5rRHJhZykKLSAgICAgICAgc2RpLnB0T2Zmc2V0LnkgPSBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaUhlaWdodCAtIHNkaS5wdE9mZnNldC55OwotCi0gICAgaGVscGVyLT5Jbml0aWFsaXplRnJv
bUJpdG1hcCgmc2RpLCBkYXRhT2JqZWN0LmdldCgpKTsKLQotICAgIERXT1JEIGVmZmVjdCA9IERS
T1BFRkZFQ1RfTk9ORTsKLQotICAgIERyYWdPcGVyYXRpb24gb3BlcmF0aW9uID0gRHJhZ09wZXJh
dGlvbk5vbmU7Ci0gICAgaWYgKDo6RG9EcmFnRHJvcChkYXRhT2JqZWN0LmdldCgpLCBzb3VyY2Uu
Z2V0KCksIG9rRWZmZWN0LCAmZWZmZWN0KSA9PSBEUkFHRFJPUF9TX0RST1ApIHsKLSAgICAgICAg
aWYgKGVmZmVjdCAmIERST1BFRkZFQ1RfQ09QWSkKLSAgICAgICAgICAgIG9wZXJhdGlvbiA9IERy
YWdPcGVyYXRpb25Db3B5OwotICAgICAgICBlbHNlIGlmIChlZmZlY3QgJiBEUk9QRUZGRUNUX0xJ
TkspCi0gICAgICAgICAgICBvcGVyYXRpb24gPSBEcmFnT3BlcmF0aW9uTGluazsKLSAgICAgICAg
ZWxzZSBpZiAoZWZmZWN0ICYgRFJPUEVGRkVDVF9NT1ZFKQotICAgICAgICAgICAgb3BlcmF0aW9u
ID0gRHJhZ09wZXJhdGlvbk1vdmU7Ci0gICAgfQotICAgIFBPSU5UIGdsb2JhbFBvaW50OwotICAg
IDo6R2V0Q3Vyc29yUG9zKCZnbG9iYWxQb2ludCk7Ci0gICAgUE9JTlQgbG9jYWxQb2ludCA9IGds
b2JhbFBvaW50OwotICAgIDo6U2NyZWVuVG9DbGllbnQobV9wYWdlQ2xpZW50LT5uYXRpdmVXaW5k
b3coKSwgJmxvY2FsUG9pbnQpOwotCi0gICAgZHJhZ0VuZGVkKGxvY2FsUG9pbnQsIGdsb2JhbFBv
aW50LCBvcGVyYXRpb24pOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2hhbmdlQ29tcG9z
aXRpb25TZWxlY3Rpb24oYm9vbCBoYXNDb21wb3NpdGlvbikKLXsKLSAgICBtX3BhZ2VDbGllbnQt
PmNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlZChoYXNDb21wb3NpdGlvbik7Ci19Ci0KLXZvaWQg
V2ViUGFnZVByb3h5Ojpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiBjb21wb3NpdGlv
blN0cmluZykKLXsKLSAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbmZp
cm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZyksIG1fcGFnZUlEKTsKLX0KLQotdm9pZCBX
ZWJQYWdlUHJveHk6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJp
bmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsIGludCBjdXJzb3JQ
b3NpdGlvbikKLXsKLSAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENv
bXBvc2l0aW9uKGNvbXBvc2l0aW9uU3RyaW5nLCB1bmRlcmxpbmVzLCBjdXJzb3JQb3NpdGlvbiks
IG1fcGFnZUlEKTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NTI4MDczM2ViNGIzNDExZWRlMWQ1ZWMwODVlYmY3
OWZiZjlhN2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw5ODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIE5PVEU6IFRoaXMg
aW1wbGVtZW50YXRpb24gaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBw
b3B1cHMgaW4gV2ViQ29yZTo6UG9wdXBNZW51V2luLgotLy8gV2Ugc2hvdWxkIHRyeSBhbmQgZmFj
dG9yIG91dCB0aGUgY29tbW9uIGJpdHMgYW5kIHNoYXJlIHRoZW0uCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eVdpbi5oIgotCi0jaW5jbHVkZSAiTmF0
aXZlV2ViTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFy
VGhlbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0hXbmREQy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2ZW50Lmg+Ci0j
aW5jbHVkZSA8d2luZG93c3guaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBu
YW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IExQQ1dT
VFIga1dlYktpdDJXZWJQb3B1cE1lbnVQcm94eVdpbmRvd0NsYXNzTmFtZSA9IEwiV2ViS2l0Mldl
YlBvcHVwTWVudVByb3h5V2luZG93Q2xhc3MiOwotCi1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRB
bmltYXRpb25EdXJhdGlvbiA9IDIwMDsKLXN0YXRpYyBjb25zdCBpbnQgbWF4UG9wdXBIZWlnaHQg
PSAzMjA7Ci1zdGF0aWMgY29uc3QgaW50IHBvcHVwV2luZG93Qm9yZGVyV2lkdGggPSAxOwotc3Rh
dGljIGNvbnN0IGludCBzZXBhcmF0b3JQYWRkaW5nID0gNDsKLXN0YXRpYyBjb25zdCBpbnQgc2Vw
YXJhdG9ySGVpZ2h0ID0gMTsKLQotLy8gVGhpcyBpcyB1c2VkIGZyb20gd2l0aGluIG91ciBjdXN0
b20gbWVzc2FnZSBwdW1wIHdoZW4gd2Ugd2FudCB0byBzZW5kIGEKLS8vIG1lc3NhZ2UgdG8gdGhl
IHdlYiB2aWV3IGFuZCBub3QgaGF2ZSBvdXIgbWVzc2FnZSBzdG9sZW4gYW5kIHNlbnQgdG8KLS8v
IHRoZSBwb3B1cCB3aW5kb3cuCi1zdGF0aWMgY29uc3QgVUlOVCBXTV9IT1NUX1dJTkRPV19GSVJT
VCA9IFdNX1VTRVI7Ci1zdGF0aWMgY29uc3QgVUlOVCBXTV9IT1NUX1dJTkRPV19DSEFSID0gV01f
VVNFUiArIFdNX0NIQVI7IAotc3RhdGljIGNvbnN0IFVJTlQgV01fSE9TVF9XSU5ET1dfTU9VU0VN
T1ZFID0gV01fVVNFUiArIFdNX01PVVNFTU9WRTsKLQotc3RhdGljIGlubGluZSBib29sIGlzQVND
SUlQcmludGFibGUodW5zaWduZWQgYykKLXsKLSAgICByZXR1cm4gYyA+PSAweDIwICYmIGMgPD0g
MHg3RTsKLX0KLQotc3RhdGljIHZvaWQgdHJhbnNsYXRlUG9pbnQoTFBBUkFNJiBsUGFyYW0sIEhX
TkQgZnJvbSwgSFdORCB0bykKLXsKLSAgICBQT0lOVCBwdDsKLSAgICBwdC54ID0gc3RhdGljX2Nh
c3Q8c2hvcnQ+KEdFVF9YX0xQQVJBTShsUGFyYW0pKTsKLSAgICBwdC55ID0gc3RhdGljX2Nhc3Q8
c2hvcnQ+KEdFVF9ZX0xQQVJBTShsUGFyYW0pKTsKLSAgICA6Ok1hcFdpbmRvd1BvaW50cyhmcm9t
LCB0bywgJnB0LCAxKTsKLSAgICBsUGFyYW0gPSBNQUtFTFBBUkFNKHB0LngsIHB0LnkpOwotfQot
Ci1MUkVTVUxUIENBTExCQUNLIFdlYlBvcHVwTWVudVByb3h5V2luOjpXZWJQb3B1cE1lbnVQcm94
eVduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBs
UGFyYW0pCi17Ci0gICAgTE9OR19QVFIgbG9uZ1B0ciA9IDo6R2V0V2luZG93TG9uZ1B0cihoV25k
LCAwKTsKLSAgIAotICAgIGlmIChXZWJQb3B1cE1lbnVQcm94eVdpbiogcG9wdXBNZW51UHJveHkg
PSByZWludGVycHJldF9jYXN0PFdlYlBvcHVwTWVudVByb3h5V2luKj4obG9uZ1B0cikpCi0gICAg
ICAgIHJldHVybiBwb3B1cE1lbnVQcm94eS0+d25kUHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0s
IGxQYXJhbSk7Ci0KLSAgICBpZiAobWVzc2FnZSA9PSBXTV9DUkVBVEUpIHsKLSAgICAgICAgTFBD
UkVBVEVTVFJVQ1QgY3JlYXRlU3RydWN0ID0gcmVpbnRlcnByZXRfY2FzdDxMUENSRUFURVNUUlVD
VD4obFBhcmFtKTsKLQotICAgICAgICAvLyBBc3NvY2lhdGUgdGhlIFdlYlZpZXcgd2l0aCB0aGUg
d2luZG93LgotICAgICAgICA6OlNldFdpbmRvd0xvbmdQdHIoaFduZCwgMCwgKExPTkdfUFRSKWNy
ZWF0ZVN0cnVjdC0+bHBDcmVhdGVQYXJhbXMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFt
KTsKLX0KLQotTFJFU1VMVCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6d25kUHJvYyhIV05EIGhXbmQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBMUkVT
VUxUIGxSZXN1bHQgPSAwOwotICAgIGJvb2wgaGFuZGxlZCA9IHRydWU7Ci0KLSAgICBzd2l0Y2gg
KG1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBXTV9NT1VTRUFDVElWQVRFOgotICAgICAgICAgICAg
bFJlc3VsdCA9IG9uTW91c2VBY3RpdmF0ZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwg
aGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9TSVpFOgotICAg
ICAgICAgICAgbFJlc3VsdCA9IG9uU2l6ZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwg
aGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9LRVlET1dOOgot
ICAgICAgICAgICAgbFJlc3VsdCA9IG9uS2V5RG93bihoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQ
YXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9DSEFS
OgotICAgICAgICAgICAgbFJlc3VsdCA9IG9uQ2hhcihoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQ
YXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9NT1VT
RU1PVkU6Ci0gICAgICAgICAgICBsUmVzdWx0ID0gb25Nb3VzZU1vdmUoaFduZCwgbWVzc2FnZSwg
d1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgV01fTEJVVFRPTkRPV046Ci0gICAgICAgICAgICBsUmVzdWx0ID0gb25MQnV0dG9uRG93biho
V25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9OVVA6Ci0gICAgICAgICAgICBsUmVzdWx0ID0gb25M
QnV0dG9uVXAoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV01fTU9VU0VXSEVFTDoKLSAgICAgICAgICAgIGxS
ZXN1bHQgPSBvbk1vdXNlV2hlZWwoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRs
ZWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV01fUEFJTlQ6Ci0gICAgICAg
ICAgICBsUmVzdWx0ID0gb25QYWludChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFu
ZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9QUklOVENMSUVOVDoK
LSAgICAgICAgICAgIGxSZXN1bHQgPSBvblByaW50Q2xpZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJh
bSwgbFBhcmFtLCBoYW5kbGVkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgaGFuZGxlZCA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgaWYgKCFoYW5kbGVkKQotICAgICAgICBsUmVzdWx0ID0gOjpEZWZXaW5kb3dQcm9j
KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIHJldHVybiBsUmVzdWx0Owot
fQotCi1ib29sIFdlYlBvcHVwTWVudVByb3h5V2luOjpyZWdpc3RlcldpbmRvd0NsYXNzKCkKLXsK
LSAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7Ci0gICAg
aWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOwotCi0gICAgV05EQ0xBU1NFWCB3Y2V4
OwotICAgIHdjZXguY2JTaXplICAgICAgICAgPSBzaXplb2YoV05EQ0xBU1NFWCk7Ci0gICAgd2Nl
eC5zdHlsZSAgICAgICAgICA9IENTX0RST1BTSEFET1c7Ci0gICAgd2NleC5scGZuV25kUHJvYyAg
ICA9IFdlYlBvcHVwTWVudVByb3h5V2luOjpXZWJQb3B1cE1lbnVQcm94eVduZFByb2M7Ci0gICAg
d2NleC5jYkNsc0V4dHJhICAgICA9IDA7Ci0gICAgd2NleC5jYlduZEV4dHJhICAgICA9IHNpemVv
ZihXZWJQb3B1cE1lbnVQcm94eVdpbiopOwotICAgIHdjZXguaEluc3RhbmNlICAgICAgPSBpbnN0
YW5jZUhhbmRsZSgpOwotICAgIHdjZXguaEljb24gICAgICAgICAgPSAwOwotICAgIHdjZXguaEN1
cnNvciAgICAgICAgPSA6OkxvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4LmhickJh
Y2tncm91bmQgID0gMDsKLSAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKLSAgICB3Y2V4Lmxw
c3pDbGFzc05hbWUgID0ga1dlYktpdDJXZWJQb3B1cE1lbnVQcm94eVdpbmRvd0NsYXNzTmFtZTsK
LSAgICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKLQotICAgIHJldHVybiAhITo6UmVnaXN0ZXJD
bGFzc0V4KCZ3Y2V4KTsKLX0KLQotV2ViUG9wdXBNZW51UHJveHlXaW46OldlYlBvcHVwTWVudVBy
b3h5V2luKFdlYlZpZXcqIHdlYlZpZXcsIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQqIGNsaWVu
dCkKLSAgICA6IFdlYlBvcHVwTWVudVByb3h5KGNsaWVudCkKLSAgICAsIG1fd2ViVmlldyh3ZWJW
aWV3KQotICAgICwgbV9uZXdTZWxlY3RlZEluZGV4KDApCi0gICAgLCBtX3BvcHVwKDApCi0gICAg
LCBtX0RDKDApCi0gICAgLCBtX2JtcCgwKQotICAgICwgbV9pdGVtSGVpZ2h0KDApCi0gICAgLCBt
X3Njcm9sbE9mZnNldCgwKQotICAgICwgbV93aGVlbERlbHRhKDApCi0gICAgLCBtX2ZvY3VzZWRJ
bmRleCgwKQotICAgICwgbV93YXNDbGlja2VkKGZhbHNlKQotICAgICwgbV9zY3JvbGxiYXJDYXB0
dXJpbmdNb3VzZShmYWxzZSkKLSAgICAsIG1fc2hvd1BvcHVwKGZhbHNlKQotewotfQotCi1XZWJQ
b3B1cE1lbnVQcm94eVdpbjo6fldlYlBvcHVwTWVudVByb3h5V2luKCkKLXsKLSAgICBpZiAobV9i
bXApCi0gICAgICAgIDo6RGVsZXRlT2JqZWN0KG1fYm1wKTsKLSAgICBpZiAobV9EQykKLSAgICAg
ICAgOjpEZWxldGVEQyhtX0RDKTsKLSAgICBpZiAobV9wb3B1cCkKLSAgICAgICAgOjpEZXN0cm95
V2luZG93KG1fcG9wdXApOwotICAgIGlmIChtX3Njcm9sbGJhcikKLSAgICAgICAgbV9zY3JvbGxi
YXItPnNldFBhcmVudCgwKTsKLX0KLQotdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2hvd1Bv
cHVwTWVudShjb25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0aW9uLCBkb3VibGUsIGNvbnN0
IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgY29uc3QgUGxhdGZvcm1Qb3B1cE1lbnVEYXRh
JiBkYXRhLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpCi17Ci0gICAgbV9pdGVtcyA9IGl0ZW1zOwot
ICAgIG1fZGF0YSA9IGRhdGE7Ci0gICAgbV9uZXdTZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRl
eDsKLQotICAgIGNhbGN1bGF0ZVBvc2l0aW9uQW5kU2l6ZShyZWN0KTsKLSAgICBpZiAoY2xpZW50
UmVjdCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSFdORCBob3N0V2luZG93
ID0gbV93ZWJWaWV3LT53aW5kb3coKTsKLQotICAgIGlmICghbV9zY3JvbGxiYXIgJiYgdmlzaWJs
ZUl0ZW1zKCkgPCBtX2l0ZW1zLnNpemUoKSkgewotICAgICAgICBtX3Njcm9sbGJhciA9IFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCBTbWFs
bFNjcm9sbGJhcik7Ci0gICAgICAgIG1fc2Nyb2xsYmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICB9
Ci0KLSAgICBpZiAoIW1fcG9wdXApIHsKLSAgICAgICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOwot
Ci0gICAgICAgIERXT1JEIGV4U3R5bGUgPSBXU19FWF9MVFJSRUFESU5HOwotCi0gICAgICAgIG1f
cG9wdXAgPSA6OkNyZWF0ZVdpbmRvd0V4KGV4U3R5bGUsIGtXZWJLaXQyV2ViUG9wdXBNZW51UHJv
eHlXaW5kb3dDbGFzc05hbWUsIFRFWFQoIlBvcHVwTWVudSIpLAotICAgICAgICAgICAgV1NfUE9Q
VVAgfCBXU19CT1JERVIsCi0gICAgICAgICAgICBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1Jl
Y3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLAotICAg
ICAgICAgICAgaG9zdFdpbmRvdywgMCwgaW5zdGFuY2VIYW5kbGUoKSwgdGhpcyk7Ci0KLSAgICAg
ICAgaWYgKCFtX3BvcHVwKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEJPT0wg
c2hvdWxkQW5pbWF0ZSA9IEZBTFNFOwotICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dF
VENPTUJPQk9YQU5JTUFUSU9OLCAwLCAmc2hvdWxkQW5pbWF0ZSwgMCk7Ci0KLSAgICBpZiAoc2hv
dWxkQW5pbWF0ZSkgewotICAgICAgICBSRUNUIHZpZXdSZWN0ID0gezB9OwotICAgICAgICA6Okdl
dFdpbmRvd1JlY3QoaG9zdFdpbmRvdywgJnZpZXdSZWN0KTsKLQotICAgICAgICBpZiAoITo6SXNS
ZWN0RW1wdHkoJnZpZXdSZWN0KSkgewotICAgICAgICAgICAgLy8gUG9wdXBzIHNob3VsZCBzbGlk
ZSBpbnRvIHZpZXcgYXdheSBmcm9tIHRoZSA8c2VsZWN0PiBib3gKLSAgICAgICAgICAgIC8vIE5P
VEU6IFRoaXMgbWF5IGhhdmUgdG8gY2hhbmdlIGZvciBWaXN0YQotICAgICAgICAgICAgRFdPUkQg
c2xpZGVEaXJlY3Rpb24gPSAobV93aW5kb3dSZWN0LnkoKSA8IHZpZXdSZWN0LnRvcCArIHJlY3Qu
bG9jYXRpb24oKS55KCkpID8gQVdfVkVSX05FR0FUSVZFIDogQVdfVkVSX1BPU0lUSVZFOwotCi0g
ICAgICAgICAgICA6OkFuaW1hdGVXaW5kb3cobV9wb3B1cCwgZGVmYXVsdEFuaW1hdGlvbkR1cmF0
aW9uLCBBV19TTElERSB8IHNsaWRlRGlyZWN0aW9uKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQot
ICAgICAgICA6OlNob3dXaW5kb3cobV9wb3B1cCwgU1dfU0hPV05PQUNUSVZBVEUpOwotCi0KLSAg
ICBpbnQgaW5kZXggPSBzZWxlY3RlZEluZGV4OwotICAgIGlmIChpbmRleCA+PSAwKQotICAgICAg
ICBzZXRGb2N1c2VkSW5kZXgoaW5kZXgpOwotCi0gICAgbV9zaG93UG9wdXAgPSB0cnVlOwotCi0g
ICAgLy8gUHJvdGVjdCB0aGUgcG9wdXAgbWVudSBpbiBjYXNlIGl0cyBvd25lciBpcyBkZXN0cm95
ZWQgd2hpbGUgd2UncmUgcnVubmluZyB0aGUgbWVzc2FnZSBwdW1wLgotICAgIFJlZlB0cjxXZWJQ
b3B1cE1lbnVQcm94eVdpbj4gcHJvdGVjdCh0aGlzKTsKLQotICAgIDo6U2V0Q2FwdHVyZShob3N0
V2luZG93KTsKLQotICAgIE1TRyBtc2c7Ci0gICAgSFdORCBhY3RpdmVXaW5kb3c7Ci0KLSAgICB3
aGlsZSAoOjpHZXRNZXNzYWdlKCZtc2csIDAsIDAsIDApKSB7Ci0gICAgICAgIHN3aXRjaCAobXNn
Lm1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBXTV9IT1NUX1dJTkRPV19NT1VTRU1PVkU6Ci0gICAg
ICAgIGNhc2UgV01fSE9TVF9XSU5ET1dfQ0hBUjogCi0gICAgICAgICAgICBpZiAobXNnLmh3bmQg
PT0gbV9wb3B1cCkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVzc2FnZSBzaG91bGQgYmUg
c2VudCB0byB0aGUgaG9zdCB3aW5kb3cuCi0gICAgICAgICAgICAgICAgbXNnLmh3bmQgPSBob3N0
V2luZG93OwotICAgICAgICAgICAgICAgIG1zZy5tZXNzYWdlIC09IFdNX0hPU1RfV0lORE9XX0ZJ
UlNUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gU3Rl
YWwgbW91c2UgbWVzc2FnZXMuCi0gICAgICAgIGNhc2UgV01fTkNNT1VTRU1PVkU6Ci0gICAgICAg
IGNhc2UgV01fTkNMQlVUVE9ORE9XTjoKLSAgICAgICAgY2FzZSBXTV9OQ0xCVVRUT05VUDoKLSAg
ICAgICAgY2FzZSBXTV9OQ0xCVVRUT05EQkxDTEs6Ci0gICAgICAgIGNhc2UgV01fTkNSQlVUVE9O
RE9XTjoKLSAgICAgICAgY2FzZSBXTV9OQ1JCVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9OQ1JC
VVRUT05EQkxDTEs6Ci0gICAgICAgIGNhc2UgV01fTkNNQlVUVE9ORE9XTjoKLSAgICAgICAgY2Fz
ZSBXTV9OQ01CVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9OQ01CVVRUT05EQkxDTEs6Ci0gICAg
ICAgIGNhc2UgV01fTU9VU0VXSEVFTDoKLSAgICAgICAgICAgIG1zZy5od25kID0gbV9wb3B1cDsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIFRoZXNlIG1vdXNlIG1lc3NhZ2VzIHVz
ZSBjbGllbnQgY29vcmRpbmF0ZXMgc28gd2UgbmVlZCB0byBjb252ZXJ0IHRoZW0uCi0gICAgICAg
IGNhc2UgV01fTU9VU0VNT1ZFOgotICAgICAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgotICAgICAg
ICBjYXNlIFdNX0xCVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9OREJMQ0xLOgotICAg
ICAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgotICAgICAgICBjYXNlIFdNX1JCVVRUT05VUDoKLSAg
ICAgICAgY2FzZSBXTV9SQlVUVE9OREJMQ0xLOgotICAgICAgICBjYXNlIFdNX01CVVRUT05ET1dO
OgotICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9NQlVUVE9OREJM
Q0xLOiB7Ci0gICAgICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIGNvb3JkaW5hdGUuCi0gICAgICAg
ICAgICB0cmFuc2xhdGVQb2ludChtc2cubFBhcmFtLCBtc2cuaHduZCwgbV9wb3B1cCk7Ci0gICAg
ICAgICAgICBtc2cuaHduZCA9IG1fcG9wdXA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIFN0ZWFsIGFsbCBrZXlib2FyZCBtZXNzYWdlcy4KLSAgICAgICAgY2Fz
ZSBXTV9LRVlET1dOOgotICAgICAgICBjYXNlIFdNX0tFWVVQOgotICAgICAgICBjYXNlIFdNX0NI
QVI6Ci0gICAgICAgIGNhc2UgV01fREVBRENIQVI6Ci0gICAgICAgIGNhc2UgV01fU1lTS0VZVVA6
Ci0gICAgICAgIGNhc2UgV01fU1lTQ0hBUjoKLSAgICAgICAgY2FzZSBXTV9TWVNERUFEQ0hBUjoK
LSAgICAgICAgICAgIG1zZy5od25kID0gbV9wb3B1cDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgOjpUcmFuc2xhdGVNZXNzYWdlKCZtc2cpOwotICAgICAgICA6OkRp
c3BhdGNoTWVzc2FnZSgmbXNnKTsKLQotICAgICAgICBpZiAoIW1fc2hvd1BvcHVwKQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGFjdGl2ZVdpbmRvdyA9IDo6R2V0QWN0aXZlV2luZG93KCk7
Ci0gICAgICAgIGlmIChhY3RpdmVXaW5kb3cgIT0gaG9zdFdpbmRvdyAmJiAhOjpJc0NoaWxkKGFj
dGl2ZVdpbmRvdywgaG9zdFdpbmRvdykpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYg
KDo6R2V0Q2FwdHVyZSgpICE9IGhvc3RXaW5kb3cpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBpZiAoOjpHZXRDYXB0dXJlKCkgPT0gaG9zdFdpbmRvdykKLSAgICAgICAgOjpSZWxl
YXNlQ2FwdHVyZSgpOwotCi0gICAgbV9zaG93UG9wdXAgPSBmYWxzZTsKLSAgICA6OlNob3dXaW5k
b3cobV9wb3B1cCwgU1dfSElERSk7Ci0KLSAgICBpZiAoIVdlYlBvcHVwTWVudVByb3h5OjptX2Ns
aWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViUG9wdXBNZW51UHJveHk6Om1fY2xpZW50
LT52YWx1ZUNoYW5nZWRGb3JQb3B1cE1lbnUodGhpcywgbV9uZXdTZWxlY3RlZEluZGV4KTsKLQot
ICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5MDQ+IElu
IG9yZGVyIHRvIHByb3Blcmx5IGNhbGwgdGhlIG9uQ2xpY2soKQotICAgIC8vIGhhbmRsZXIgb24g
YSA8c2VsZWN0PiBlbGVtZW50LCB3ZSBuZWVkIHRvIGZha2UgYSBtb3VzZSB1cCBldmVudCBpbiB0
aGUgbWFpbiB3aW5kb3cuCi0gICAgLy8gVGhlIG1haW4gd2luZG93IGFscmVhZHkgcmVjZWl2ZWQg
dGhlIG1vdXNlIGRvd24sIHdoaWNoIHNob3dlZCB0aGlzIHBvcHVwLCBidXQgdXBvbgotICAgIC8v
IHNlbGVjdGlvbiBvZiBhbiBpdGVtIHRoZSBtb3VzZSB1cCBnZXRzIGVhdGVuIGJ5IHRoZSBwb3B1
cCBtZW51LiBTbyB3ZSB0YWtlIHRoZSBtb3VzZSBkb3duCi0gICAgLy8gZXZlbnQsIGNoYW5nZSB0
aGUgbWVzc2FnZSB0eXBlIHRvIGEgbW91c2UgdXAgZXZlbnQsIGFuZCBwb3N0IHRoYXQgaW4gdGhl
IG1lc3NhZ2UgcXVldWUuCi0gICAgLy8gVGh1cywgd2UgYXJlIHZpcnR1YWxseSBjbGlja2luZyBh
dCB0aGUKLSAgICAvLyBzYW1lIGxvY2F0aW9uIHdoZXJlIHRoZSBtb3VzZSBkb3duIGV2ZW50IG9j
Y3VycmVkLiBUaGlzIGFsbG93cyB0aGUgaGl0IHRlc3QgdG8gc2VsZWN0Ci0gICAgLy8gdGhlIGNv
cnJlY3QgZWxlbWVudCwgYW5kIHRoZXJlYnkgY2FsbCB0aGUgb25DbGljaygpIEpTIGhhbmRsZXIu
Ci0gICAgaWYgKCFXZWJQb3B1cE1lbnVQcm94eTo6bV9jbGllbnQtPmN1cnJlbnRseVByb2Nlc3Nl
ZE1vdXNlRG93bkV2ZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY29uc3Qg
TVNHKiBpbml0aWF0aW5nV2luRXZlbnQgPSBXZWJQb3B1cE1lbnVQcm94eTo6bV9jbGllbnQtPmN1
cnJlbnRseVByb2Nlc3NlZE1vdXNlRG93bkV2ZW50KCktPm5hdGl2ZUV2ZW50KCk7Ci0gICAgTVNH
IGZha2VFdmVudCA9ICppbml0aWF0aW5nV2luRXZlbnQ7Ci0gICAgZmFrZUV2ZW50Lm1lc3NhZ2Ug
PSBXTV9MQlVUVE9OVVA7Ci0gICAgOjpQb3N0TWVzc2FnZShmYWtlRXZlbnQuaHduZCwgZmFrZUV2
ZW50Lm1lc3NhZ2UsIGZha2VFdmVudC53UGFyYW0sIGZha2VFdmVudC5sUGFyYW0pOwotfQotCi12
b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpoaWRlUG9wdXBNZW51KCkKLXsKLSAgICBpZiAoIW1f
c2hvd1BvcHVwKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG93UG9wdXAgPSBmYWxzZTsKLQot
ICAgIDo6U2hvd1dpbmRvdyhtX3BvcHVwLCBTV19ISURFKTsKLQotICAgIC8vIFBvc3QgYSBXTV9O
VUxMIG1lc3NhZ2UgdG8gd2FrZSB1cCB0aGUgbWVzc2FnZSBwdW1wIGlmIG5lY2Vzc2FyeS4KLSAg
ICA6OlBvc3RNZXNzYWdlKG1fcG9wdXAsIFdNX05VTEwsIDAsIDApOwotfQotCi12b2lkIFdlYlBv
cHVwTWVudVByb3h5V2luOjpjYWxjdWxhdGVQb3NpdGlvbkFuZFNpemUoY29uc3QgSW50UmVjdCYg
cmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0IHRoZSByZWN0ICh3aGljaCBpcyBpbiB2aWV3IGNvb3Jp
ZGF0ZXMpIGludG8gc2NyZWVuIGNvb3JkaW5hdGVzLgotICAgIEludFJlY3QgcmVjdEluU2NyZWVu
Q29vcmRzID0gcmVjdDsKLSAgICBQT0lOVCBsb2NhdGlvbihyZWN0SW5TY3JlZW5Db29yZHMgLmxv
Y2F0aW9uKCkpOwotICAgIGlmICghOjpDbGllbnRUb1NjcmVlbihtX3dlYlZpZXctPndpbmRvdygp
LCAmbG9jYXRpb24pKQotICAgICAgICByZXR1cm47Ci0gICAgcmVjdEluU2NyZWVuQ29vcmRzLnNl
dExvY2F0aW9uKGxvY2F0aW9uKTsKLQotICAgIGludCBpdGVtQ291bnQgPSBtX2l0ZW1zLnNpemUo
KTsKLSAgICBtX2l0ZW1IZWlnaHQgPSBtX2RhdGEubV9pdGVtSGVpZ2h0OwotCi0gICAgaW50IG5h
dHVyYWxIZWlnaHQgPSBtX2l0ZW1IZWlnaHQgKiBpdGVtQ291bnQ7Ci0gICAgaW50IHBvcHVwSGVp
Z2h0ID0gbWluKG1heFBvcHVwSGVpZ2h0LCBuYXR1cmFsSGVpZ2h0KTsKLQotICAgIC8vIFRoZSBw
b3B1cCBzaG91bGQgc2hvdyBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgaXRlbXMgKGkuZS4gbm8gcGFy
dGlhbCBpdGVtcyBzaG91bGQgYmUgdmlzaWJsZSkKLSAgICBwb3B1cEhlaWdodCAtPSBwb3B1cEhl
aWdodCAlIG1faXRlbUhlaWdodDsKLQotICAgIC8vIE5leHQgZGV0ZXJtaW5lIGl0cyB3aWR0aAot
ICAgIGludCBwb3B1cFdpZHRoID0gbV9kYXRhLm1fcG9wdXBXaWR0aDsKLQotICAgIGlmIChuYXR1
cmFsSGVpZ2h0ID4gbWF4UG9wdXBIZWlnaHQpIHsKLSAgICAgICAgLy8gV2UgbmVlZCByb29tIGZv
ciBhIHNjcm9sbGJhcgotICAgICAgICBwb3B1cFdpZHRoICs9IFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoU21hbGxTY3JvbGxiYXIpOwotICAgIH0KLQotICAgIHBv
cHVwSGVpZ2h0ICs9IDIgKiBwb3B1cFdpbmRvd0JvcmRlcldpZHRoOwotCi0gICAgLy8gVGhlIHBv
cHVwIHNob3VsZCBiZSBhdCBsZWFzdCBhcyB3aWRlIGFzIHRoZSBjb250cm9sIG9uIHRoZSBwYWdl
Ci0gICAgcG9wdXBXaWR0aCA9IG1heChyZWN0SW5TY3JlZW5Db29yZHMud2lkdGgoKSAtIG1fZGF0
YS5tX2NsaWVudEluc2V0TGVmdCAtIG1fZGF0YS5tX2NsaWVudEluc2V0UmlnaHQsIHBvcHVwV2lk
dGgpOwotCi0gICAgLy8gQWx3YXlzIGxlZnQtYWxpZ24gaXRlbXMgaW4gdGhlIHBvcHVwLiAgVGhp
cyBtYXRjaGVzIHBvcHVwIG1lbnVzIG9uIHRoZSBtYWMuCi0gICAgaW50IHBvcHVwWCA9IHJlY3RJ
blNjcmVlbkNvb3Jkcy54KCkgKyBtX2RhdGEubV9jbGllbnRJbnNldExlZnQ7Ci0KLSAgICBJbnRS
ZWN0IHBvcHVwUmVjdChwb3B1cFgsIHJlY3RJblNjcmVlbkNvb3Jkcy5tYXhZKCksIHBvcHVwV2lk
dGgsIHBvcHVwSGVpZ2h0KTsKLQotICAgIC8vIFRoZSBwb3B1cCBuZWVkcyB0byBzdGF5IHdpdGhp
biB0aGUgYm91bmRzIG9mIHRoZSBzY3JlZW4gYW5kIG5vdCBvdmVybGFwIGFueSB0b29sYmFycwot
ICAgIEhNT05JVE9SIG1vbml0b3IgPSA6Ok1vbml0b3JGcm9tV2luZG93KG1fd2ViVmlldy0+d2lu
ZG93KCksIE1PTklUT1JfREVGQVVMVFRPUFJJTUFSWSk7Ci0gICAgTU9OSVRPUklORk9FWCBtb25p
dG9ySW5mbzsKLSAgICBtb25pdG9ySW5mby5jYlNpemUgPSBzaXplb2YoTU9OSVRPUklORk9FWCk7
Ci0gICAgOjpHZXRNb25pdG9ySW5mbyhtb25pdG9yLCAmbW9uaXRvckluZm8pOwotICAgIEZsb2F0
UmVjdCBzY3JlZW4gPSBzdGF0aWNfY2FzdDxJbnRSZWN0Pihtb25pdG9ySW5mby5yY1dvcmspOwot
Ci0gICAgLy8gQ2hlY2sgdGhhdCB3ZSBkb24ndCBnbyBvZmYgdGhlIHNjcmVlbiB2ZXJ0aWNhbGx5
Ci0gICAgaWYgKHBvcHVwUmVjdC5tYXhZKCkgPiBzY3JlZW4uaGVpZ2h0KCkpIHsKLSAgICAgICAg
Ly8gVGhlIHBvcHVwIHdpbGwgZ28gb2ZmIHRoZSBzY3JlZW4sIHNvIHRyeSBwbGFjaW5nIGl0IGFi
b3ZlIHRoZSBjbGllbnQKLSAgICAgICAgaWYgKHJlY3RJblNjcmVlbkNvb3Jkcy55KCkgLSBwb3B1
cFJlY3QuaGVpZ2h0KCkgPCAwKSB7Ci0gICAgICAgICAgICAvLyBUaGUgcG9wdXAgd29uJ3QgZml0
IGFib3ZlLCBlaXRoZXIsIHNvIHBsYWNlIGl0IHdoZXJlZXZlcidzIGJpZ2dlciBhbmQgcmVzaXpl
IGl0IHRvIGZpdAotICAgICAgICAgICAgaWYgKChyZWN0SW5TY3JlZW5Db29yZHMueSgpICsgcmVj
dEluU2NyZWVuQ29vcmRzLmhlaWdodCgpIC8gMikgPCAoc2NyZWVuLmhlaWdodCgpIC8gMikpIHsK
LSAgICAgICAgICAgICAgICAvLyBCZWxvdyBpcyBiaWdnZXIKLSAgICAgICAgICAgICAgICBwb3B1
cFJlY3Quc2V0SGVpZ2h0KHNjcmVlbi5oZWlnaHQoKSAtIHBvcHVwUmVjdC55KCkpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBBYm92ZSBpcyBiaWdnZXIKLSAgICAg
ICAgICAgICAgICBwb3B1cFJlY3Quc2V0WSgwKTsKLSAgICAgICAgICAgICAgICBwb3B1cFJlY3Qu
c2V0SGVpZ2h0KHJlY3RJblNjcmVlbkNvb3Jkcy55KCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVGhlIHBvcHVwIGZpdHMgYWJvdmUsIHNvIHJlcG9z
aXRpb24gaXQKLSAgICAgICAgICAgIHBvcHVwUmVjdC5zZXRZKHJlY3RJblNjcmVlbkNvb3Jkcy55
KCkgLSBwb3B1cFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hl
Y2sgdGhhdCB3ZSBkb24ndCBnbyBvZmYgdGhlIHNjcmVlbiBob3Jpem9udGFsbHkKLSAgICBpZiAo
cG9wdXBSZWN0LngoKSA8IHNjcmVlbi54KCkpIHsKLSAgICAgICAgcG9wdXBSZWN0LnNldFdpZHRo
KHBvcHVwUmVjdC53aWR0aCgpIC0gKHNjcmVlbi54KCkgLSBwb3B1cFJlY3QueCgpKSk7Ci0gICAg
ICAgIHBvcHVwUmVjdC5zZXRYKHNjcmVlbi54KCkpOwotICAgIH0KLQotICAgIG1fd2luZG93UmVj
dCA9IHBvcHVwUmVjdDsKLX0KLQotSW50UmVjdCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y2xpZW50
UmVjdCgpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBjbGllbnRSZWN0ID0gbV93aW5kb3dSZWN0Owot
ICAgIGNsaWVudFJlY3QuaW5mbGF0ZSgtcG9wdXBXaW5kb3dCb3JkZXJXaWR0aCk7Ci0gICAgY2xp
ZW50UmVjdC5zZXRMb2NhdGlvbihJbnRQb2ludCgwLCAwKSk7Ci0gICAgcmV0dXJuIGNsaWVudFJl
Y3Q7Ci19Ci0KLXZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OmludmFsaWRhdGVJdGVtKGludCBp
bmRleCkKLXsKLSAgICBpZiAoIW1fcG9wdXApCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJl
Y3QgZGFtYWdlUmVjdChjbGllbnRSZWN0KCkpOwotICAgIGRhbWFnZVJlY3Quc2V0WShtX2l0ZW1I
ZWlnaHQgKiAoaW5kZXggLSBtX3Njcm9sbE9mZnNldCkpOwotICAgIGRhbWFnZVJlY3Quc2V0SGVp
Z2h0KG1faXRlbUhlaWdodCk7Ci0gICAgaWYgKG1fc2Nyb2xsYmFyKQotICAgICAgICBkYW1hZ2VS
ZWN0LnNldFdpZHRoKGRhbWFnZVJlY3Qud2lkdGgoKSAtIG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KS53aWR0aCgpKTsKLQotICAgIFJFQ1QgciA9IGRhbWFnZVJlY3Q7Ci0gICAgOjpJbnZhbGlkYXRl
UmVjdChtX3BvcHVwLCAmciwgVFJVRSk7Ci19Ci0KLWludCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6
c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKLXsKLSAg
ICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgJiYgbV9zY3JvbGxi
YXIpID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6
ZSgpKSA6IDA7Ci19Ci0KLWludCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsUG9zaXRpb24o
U2Nyb2xsYmFyKikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQ7Ci19Ci0KLXZv
aWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYg
b2Zmc2V0KQotewotICAgIHNjcm9sbFRvKG9mZnNldC55KCkpOwotfQotCi1pbnQgV2ViUG9wdXBN
ZW51UHJveHlXaW46OnZpc2libGVIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBtX3Njcm9s
bGJhciA/IG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpIDogY29udGVudHNTaXplKCkuaGVpZ2h0
KCk7Ci19Ci0KLWludCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6dmlzaWJsZVdpZHRoKCkgY29uc3QK
LXsKLSAgICBpbnQgc2Nyb2xsYmFyV2lkdGggPSBtX3Njcm9sbGJhciA/IG1fc2Nyb2xsYmFyLT5m
cmFtZVJlY3QoKS53aWR0aCgpIDogMDsKLSAgICByZXR1cm4gY29udGVudHNTaXplKCkud2lkdGgo
KSAtIHNjcm9sbGJhcldpZHRoOwotfQotCi1XZWJDb3JlOjpJbnRTaXplIFdlYlBvcHVwTWVudVBy
b3h5V2luOjpjb250ZW50c1NpemUoKSBjb25zdAotewotICAgIHJldHVybiBjbGllbnRSZWN0KCku
c2l6ZSgpOwotfQotCi1XZWJDb3JlOjpJbnRSZWN0IFdlYlBvcHVwTWVudVByb3h5V2luOjpzY3Jv
bGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93aW5kb3dSZWN0
OwotfQotCi12b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxUbyhpbnQgb2Zmc2V0KQot
ewotICAgIEFTU0VSVChtX3Njcm9sbGJhcik7Ci0KLSAgICBpZiAoIW1fcG9wdXApCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX3Njcm9sbE9mZnNldCA9PSBvZmZzZXQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGludCBzY3JvbGxlZExpbmVzID0gbV9zY3JvbGxPZmZzZXQgLSBvZmZzZXQ7
Ci0gICAgbV9zY3JvbGxPZmZzZXQgPSBvZmZzZXQ7Ci0KLSAgICBVSU5UIGZsYWdzID0gU1dfSU5W
QUxJREFURTsKLQotI2lmZGVmIENBTl9TRVRfU01PT1RIX1NDUk9MTElOR19EVVJBVElPTgotICAg
IEJPT0wgc2hvdWxkU21vb3RoU2Nyb2xsID0gRkFMU0U7Ci0gICAgOjpTeXN0ZW1QYXJhbWV0ZXJz
SW5mbyhTUElfR0VUTElTVEJPWFNNT09USFNDUk9MTElORywgMCwgJnNob3VsZFNtb290aFNjcm9s
bCwgMCk7Ci0gICAgaWYgKHNob3VsZFNtb290aFNjcm9sbCkKLSAgICAgICAgZmxhZ3MgfD0gTUFL
RVdPUkQoU1dfU01PT1RIU0NST0xMLCBzbW9vdGhTY3JvbGxBbmltYXRpb25EdXJhdGlvbik7Ci0j
ZW5kaWYKLQotICAgIEludFJlY3QgbGlzdFJlY3QgPSBjbGllbnRSZWN0KCk7Ci0gICAgaWYgKG1f
c2Nyb2xsYmFyKQotICAgICAgICBsaXN0UmVjdC5zZXRXaWR0aChsaXN0UmVjdC53aWR0aCgpIC0g
bV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpLndpZHRoKCkpOwotICAgIFJFQ1QgciA9IGxpc3RSZWN0
OwotICAgIDo6U2Nyb2xsV2luZG93RXgobV9wb3B1cCwgMCwgc2Nyb2xsZWRMaW5lcyAqIG1faXRl
bUhlaWdodCwgJnIsIDAsIDAsIDAsIGZsYWdzKTsKLSAgICBpZiAobV9zY3JvbGxiYXIpIHsKLSAg
ICAgICAgciA9IG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKLSAgICAgICAgOjpJbnZhbGlkYXRl
UmVjdChtX3BvcHVwLCAmciwgVFJVRSk7Ci0gICAgfQotICAgIDo6VXBkYXRlV2luZG93KG1fcG9w
dXApOwotfQotCi12b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjppbnZhbGlkYXRlU2Nyb2xsYmFy
UmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBJ
bnRSZWN0IHNjcm9sbFJlY3QgPSByZWN0OwotICAgIHNjcm9sbFJlY3QubW92ZShzY3JvbGxiYXIt
PngoKSwgc2Nyb2xsYmFyLT55KCkpOwotICAgIFJFQ1QgciA9IHNjcm9sbFJlY3Q7Ci0gICAgOjpJ
bnZhbGlkYXRlUmVjdChtX3BvcHVwLCAmciwgZmFsc2UpOwotfQotCi0vLyBNZXNzYWdlIHB1bXAg
bWVzc2FnZXMuCi0KLUxSRVNVTFQgV2ViUG9wdXBNZW51UHJveHlXaW46Om9uTW91c2VBY3RpdmF0
ZShIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQp
Ci17Ci0gICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgcmV0dXJuIE1BX05PQUNUSVZBVEU7Ci19Ci0K
LUxSRVNVTFQgV2ViUG9wdXBNZW51UHJveHlXaW46Om9uU2l6ZShIV05EIGhXbmQsIFVJTlQgbWVz
c2FnZSwgV1BBUkFNLCBMUEFSQU0gbFBhcmFtLCBib29sJiBoYW5kbGVkKQotewotICAgIGhhbmRs
ZWQgPSB0cnVlOwotICAgIGlmICghc2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgSW50U2l6ZSBzaXplKExPV09SRChsUGFyYW0pLCBISVdPUkQobFBhcmFtKSk7Ci0gICAgc2Ny
b2xsYmFyKCktPnNldEZyYW1lUmVjdChJbnRSZWN0KHNpemUud2lkdGgoKSAtIHNjcm9sbGJhcigp
LT53aWR0aCgpLCAwLCBzY3JvbGxiYXIoKS0+d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotCi0g
ICAgaW50IHZpc2libGVJdGVtcyA9IHRoaXMtPnZpc2libGVJdGVtcygpOwotICAgIHNjcm9sbGJh
cigpLT5zZXRFbmFibGVkKHZpc2libGVJdGVtcyA8IG1faXRlbXMuc2l6ZSgpKTsKLSAgICBzY3Jv
bGxiYXIoKS0+c2V0U3RlcHMoMSwgbWF4KDEsIHZpc2libGVJdGVtcyAtIDEpKTsKLSAgICBzY3Jv
bGxiYXIoKS0+c2V0UHJvcG9ydGlvbih2aXNpYmxlSXRlbXMsIG1faXRlbXMuc2l6ZSgpKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotTFJFU1VMVCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25LZXlEb3du
KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBi
b29sJiBoYW5kbGVkKQotewotICAgIGhhbmRsZWQgPSB0cnVlOwotCi0gICAgTFJFU1VMVCBsUmVz
dWx0ID0gMDsKLSAgICBzd2l0Y2ggKExPV09SRCh3UGFyYW0pKSB7Ci0gICAgY2FzZSBWS19ET1dO
OgotICAgIGNhc2UgVktfUklHSFQ6Ci0gICAgICAgIGRvd24oKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBWS19VUDoKLSAgICBjYXNlIFZLX0xFRlQ6Ci0gICAgICAgIHVwKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgVktfSE9NRToKLSAgICAgICAgZm9jdXNGaXJzdCgpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFZLX0VORDoKLSAgICAgICAgZm9jdXNMYXN0KCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgVktfUFJJT1I6Ci0gICAgICAgIGlmIChmb2N1c2VkSW5kZXgoKSAh
PSBzY3JvbGxPZmZzZXQoKSkgewotICAgICAgICAgICAgLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8g
dGhlIGZpcnN0IHZpc2libGUgaXRlbQotICAgICAgICAgICAgaW50IGZpcnN0VmlzaWJsZUl0ZW0g
PSBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgICAgIHVwKGZvY3VzZWRJbmRleCgpIC0gZmlyc3RW
aXNpYmxlSXRlbSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGUgZmlyc3Qg
dmlzaWJsZSBpdGVtIGlzIHNlbGVjdGVkLCBzbyBtb3ZlIHRoZSBzZWxlY3Rpb24gYmFjayBvbmUg
cGFnZQotICAgICAgICAgICAgdXAodmlzaWJsZUl0ZW1zKCkpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgVktfTkVYVDogewotICAgICAgICBpbnQgbGFzdFZpc2libGVJdGVt
ID0gc2Nyb2xsT2Zmc2V0KCkgKyB2aXNpYmxlSXRlbXMoKSAtIDE7Ci0gICAgICAgIGlmIChmb2N1
c2VkSW5kZXgoKSAhPSBsYXN0VmlzaWJsZUl0ZW0pIHsKLSAgICAgICAgICAgIC8vIFNldCB0aGUg
c2VsZWN0aW9uIHRvIHRoZSBsYXN0IHZpc2libGUgaXRlbQotICAgICAgICAgICAgZG93bihsYXN0
VmlzaWJsZUl0ZW0gLSBmb2N1c2VkSW5kZXgoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBUaGUgbGFzdCB2aXNpYmxlIGl0ZW0gaXMgc2VsZWN0ZWQsIHNvIG1vdmUgdGhlIHNl
bGVjdGlvbiBmb3J3YXJkIG9uZSBwYWdlCi0gICAgICAgICAgICBkb3duKHZpc2libGVJdGVtcygp
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBWS19UQUI6Ci0g
ICAgICAgIDo6U2VuZE1lc3NhZ2UobV93ZWJWaWV3LT53aW5kb3coKSwgbWVzc2FnZSwgd1BhcmFt
LCBsUGFyYW0pOwotICAgICAgICBoaWRlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVktf
RVNDQVBFOgotICAgICAgICBoaWRlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGlmIChpc0FTQ0lJUHJpbnRhYmxlKHdQYXJhbSkpIHsKLSAgICAgICAgICAgIC8vIFNl
bmQgdGhlIGtleWRvd24gdG8gdGhlIFdlYlZpZXcgc28gaXQgY2FuIGJlIHVzZWQgZm9yIHR5cGUt
dG8tc2VsZWN0LgotICAgICAgICAgICAgLy8gU2luY2Ugd2Uga25vdyB0aGF0IHRoZSB2aXJ0dWFs
IGtleSBpcyBBU0NJSSBwcmludGFibGUsIGl0J3MgT0sgdG8gY29udmVydCB0aGlzIHRvCi0gICAg
ICAgICAgICAvLyBhIFdNX0NIQVIgbWVzc2FnZS4gKFdlIGRvbid0IHdhbnQgdG8gY2FsbCBUcmFu
c2xhdGVNZXNzYWdlIGJlY2F1c2UgdGhhdCB3aWxsIHBvc3QgYQotICAgICAgICAgICAgLy8gV01f
Q0hBUiBtZXNzYWdlIHRoYXQgd2lsbCBiZSBzdG9sZW4gYW5kIHJlZGlyZWN0ZWQgdG8gdGhlIHBv
cHVwIEhXTkQuCi0gICAgICAgICAgICA6OlBvc3RNZXNzYWdlKG1fcG9wdXAsIFdNX0hPU1RfV0lO
RE9XX0NIQVIsIHdQYXJhbSwgbFBhcmFtKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBs
UmVzdWx0ID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxSZXN1bHQ7
Ci19Ci0KLUxSRVNVTFQgV2ViUG9wdXBNZW51UHJveHlXaW46Om9uQ2hhcihIV05EIGhXbmQsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKQotewotICAg
IGhhbmRsZWQgPSB0cnVlOwotCi0gICAgTFJFU1VMVCBsUmVzdWx0ID0gMDsKLSAgICBpbnQgaW5k
ZXg7Ci0gICAgc3dpdGNoICh3UGFyYW0pIHsKLSAgICBjYXNlIDB4MEQ6ICAgLy8gRW50ZXIvUmV0
dXJuCi0gICAgICAgIGhpZGUoKTsKLSAgICAgICAgaW5kZXggPSBmb2N1c2VkSW5kZXgoKTsKLSAg
ICAgICAgQVNTRVJUKGluZGV4ID49IDApOwotICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0
byBzZW5kIGJhY2sgdGhlIGluZGV4IHJpZ2h0IGF3YXk/Ci0gICAgICAgIG1fbmV3U2VsZWN0ZWRJ
bmRleCA9IGluZGV4OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDB4MUI6ICAgLy8gRXNjYXBl
Ci0gICAgICAgIGhpZGUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweDA5OiAgIC8vIFRB
QgotICAgIGNhc2UgMHgwODogICAvLyBCYWNrc3BhY2UKLSAgICBjYXNlIDB4MEE6ICAgLy8gTGlu
ZWZlZWQKLSAgICBkZWZhdWx0OiAgICAgLy8gQ2hhcmFjdGVyCi0gICAgICAgIGxSZXN1bHQgPSAx
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbFJlc3VsdDsKLX0KLQotTFJF
U1VMVCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25Nb3VzZU1vdmUoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wmIGhhbmRsZWQpCi17Ci0g
ICAgaGFuZGxlZCA9IHRydWU7Ci0KLSAgICBJbnRQb2ludCBtb3VzZVBvaW50KE1BS0VQT0lOVFMo
bFBhcmFtKSk7Ci0gICAgaWYgKHNjcm9sbGJhcigpKSB7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xs
QmFyUmVjdCA9IHNjcm9sbGJhcigpLT5mcmFtZVJlY3QoKTsKLSAgICAgICAgaWYgKHNjcm9sbGJh
ckNhcHR1cmluZ01vdXNlKCkgfHwgc2Nyb2xsQmFyUmVjdC5jb250YWlucyhtb3VzZVBvaW50KSkg
ewotICAgICAgICAgICAgLy8gUHV0IHRoZSBwb2ludCBpbnRvIGNvb3JkaW5hdGVzIHJlbGF0aXZl
IHRvIHRoZSBzY3JvbGwgYmFyCi0gICAgICAgICAgICBtb3VzZVBvaW50Lm1vdmUoLXNjcm9sbEJh
clJlY3QueCgpLCAtc2Nyb2xsQmFyUmVjdC55KCkpOwotICAgICAgICAgICAgUGxhdGZvcm1Nb3Vz
ZUV2ZW50IGV2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgTUFLRUxQQVJBTShtb3VzZVBvaW50
LngoKSwgbW91c2VQb2ludC55KCkpKTsKLSAgICAgICAgICAgIHNjcm9sbGJhcigpLT5tb3VzZU1v
dmVkKGV2ZW50KTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgQk9PTCBzaG91bGRIb3RUcmFjayA9IEZBTFNFOwotICAgIDo6U3lzdGVtUGFyYW1ldGVyc0lu
Zm8oU1BJX0dFVEhPVFRSQUNLSU5HLCAwLCAmc2hvdWxkSG90VHJhY2ssIDApOwotCi0gICAgUkVD
VCBib3VuZHM7Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1fcG9wdXAsICZib3VuZHMpOwotICAgIGlm
ICghOjpQdEluUmVjdCgmYm91bmRzLCBtb3VzZVBvaW50KSAmJiAhKHdQYXJhbSAmIE1LX0xCVVRU
T04pKSB7Ci0gICAgICAgIC8vIFdoZW4gdGhlIG1vdXNlIGlzIG5vdCBpbnNpZGUgdGhlIHBvcHVw
IG1lbnUgYW5kIHRoZSBsZWZ0IGJ1dHRvbiBpc24ndCBkb3duLCBqdXN0Ci0gICAgICAgIC8vIHJl
cG9zdCB0aGUgbWVzc2FnZSB0byB0aGUgd2ViIHZpZXcuCi0KLSAgICAgICAgLy8gVHJhbnNsYXRl
IHRoZSBjb29yZGluYXRlLgotICAgICAgICB0cmFuc2xhdGVQb2ludChsUGFyYW0sIG1fcG9wdXAs
IG1fd2ViVmlldy0+d2luZG93KCkpOwotCi0gICAgICAgIDo6UG9zdE1lc3NhZ2UobV9wb3B1cCwg
V01fSE9TVF9XSU5ET1dfTU9VU0VNT1ZFLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIGlmICgoc2hvdWxkSG90VHJhY2sgfHwgd1BhcmFtICYgTUtfTEJV
VFRPTikgJiYgOjpQdEluUmVjdCgmYm91bmRzLCBtb3VzZVBvaW50KSkKLSAgICAgICAgc2V0Rm9j
dXNlZEluZGV4KGxpc3RJbmRleEF0UG9pbnQobW91c2VQb2ludCksIHRydWUpOwotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLUxSRVNVTFQgV2ViUG9wdXBNZW51UHJveHlXaW46Om9uTEJ1dHRvbkRvd24o
SFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJv
b2wmIGhhbmRsZWQpCi17Ci0gICAgaGFuZGxlZCA9IHRydWU7Ci0KLSAgICBJbnRQb2ludCBtb3Vz
ZVBvaW50KE1BS0VQT0lOVFMobFBhcmFtKSk7Ci0gICAgaWYgKHNjcm9sbGJhcigpKSB7Ci0gICAg
ICAgIEludFJlY3Qgc2Nyb2xsQmFyUmVjdCA9IHNjcm9sbGJhcigpLT5mcmFtZVJlY3QoKTsKLSAg
ICAgICAgaWYgKHNjcm9sbEJhclJlY3QuY29udGFpbnMobW91c2VQb2ludCkpIHsKLSAgICAgICAg
ICAgIC8vIFB1dCB0aGUgcG9pbnQgaW50byBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgc2Ny
b2xsIGJhcgotICAgICAgICAgICAgbW91c2VQb2ludC5tb3ZlKC1zY3JvbGxCYXJSZWN0LngoKSwg
LXNjcm9sbEJhclJlY3QueSgpKTsKLSAgICAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBldmVu
dChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIE1BS0VMUEFSQU0obW91c2VQb2ludC54KCksIG1vdXNl
UG9pbnQueSgpKSk7Ci0gICAgICAgICAgICBzY3JvbGxiYXIoKS0+bW91c2VEb3duKGV2ZW50KTsK
LSAgICAgICAgICAgIHNldFNjcm9sbGJhckNhcHR1cmluZ01vdXNlKHRydWUpOwotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgbW91c2UgaXMg
aW5zaWRlIHRoZSB3aW5kb3csIHVwZGF0ZSB0aGUgZm9jdXNlZCBpbmRleC4gT3RoZXJ3aXNlLCAK
LSAgICAvLyBoaWRlIHRoZSBwb3B1cC4KLSAgICBSRUNUIGJvdW5kczsKLSAgICA6OkdldENsaWVu
dFJlY3QobV9wb3B1cCwgJmJvdW5kcyk7Ci0gICAgaWYgKDo6UHRJblJlY3QoJmJvdW5kcywgbW91
c2VQb2ludCkpCi0gICAgICAgIHNldEZvY3VzZWRJbmRleChsaXN0SW5kZXhBdFBvaW50KG1vdXNl
UG9pbnQpLCB0cnVlKTsKLSAgICBlbHNlCi0gICAgICAgIGhpZGUoKTsKLQotICAgIHJldHVybiAw
OwotfQotCi0KLUxSRVNVTFQgV2ViUG9wdXBNZW51UHJveHlXaW46Om9uTEJ1dHRvblVwKEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBib29sJiBo
YW5kbGVkKQotewotICAgIGhhbmRsZWQgPSB0cnVlOwotCi0gICAgSW50UG9pbnQgbW91c2VQb2lu
dChNQUtFUE9JTlRTKGxQYXJhbSkpOwotICAgIGlmIChzY3JvbGxiYXIoKSkgewotICAgICAgICBJ
bnRSZWN0IHNjcm9sbEJhclJlY3QgPSBzY3JvbGxiYXIoKS0+ZnJhbWVSZWN0KCk7Ci0gICAgICAg
IGlmIChzY3JvbGxiYXJDYXB0dXJpbmdNb3VzZSgpIHx8IHNjcm9sbEJhclJlY3QuY29udGFpbnMo
bW91c2VQb2ludCkpIHsKLSAgICAgICAgICAgIHNldFNjcm9sbGJhckNhcHR1cmluZ01vdXNlKGZh
bHNlKTsKLSAgICAgICAgICAgIC8vIFB1dCB0aGUgcG9pbnQgaW50byBjb29yZGluYXRlcyByZWxh
dGl2ZSB0byB0aGUgc2Nyb2xsIGJhcgotICAgICAgICAgICAgbW91c2VQb2ludC5tb3ZlKC1zY3Jv
bGxCYXJSZWN0LngoKSwgLXNjcm9sbEJhclJlY3QueSgpKTsKLSAgICAgICAgICAgIFBsYXRmb3Jt
TW91c2VFdmVudCBldmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIE1BS0VMUEFSQU0obW91c2VQ
b2ludC54KCksIG1vdXNlUG9pbnQueSgpKSk7Ci0gICAgICAgICAgICBzY3JvbGxiYXIoKS0+bW91
c2VVcChldmVudCk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgdG8gd29y
ayBhcm91bmQgU2Nyb2xsYmFyIG5vdCBpbnZhbGlkYXRpbmcgY29ycmVjdGx5IHdoZW4gaXQgZG9l
c24ndCBoYXZlIGEgcGFyZW50IHdpZGdldAotICAgICAgICAgICAgUkVDVCByID0gc2Nyb2xsQmFy
UmVjdDsKLSAgICAgICAgICAgIDo6SW52YWxpZGF0ZVJlY3QobV9wb3B1cCwgJnIsIFRSVUUpOwot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gT25seSBoaWRl
IHRoZSBwb3B1cCBpZiB0aGUgbW91c2UgaXMgaW5zaWRlIHRoZSBwb3B1cCB3aW5kb3cuCi0gICAg
UkVDVCBib3VuZHM7Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1fcG9wdXAsICZib3VuZHMpOwotICAg
IGlmICg6OlB0SW5SZWN0KCZib3VuZHMsIG1vdXNlUG9pbnQpKSB7Ci0gICAgICAgIGhpZGUoKTsK
LSAgICAgICAgaW50IGluZGV4ID0gZm9jdXNlZEluZGV4KCk7Ci0gICAgICAgIGlmIChpbmRleCA+
PSAwKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBzZW5kIGJhY2sgdGhl
IGluZGV4IHJpZ2h0IGF3YXk/Ci0gICAgICAgICAgICAgbV9uZXdTZWxlY3RlZEluZGV4ID0gaW5k
ZXg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotTFJFU1VMVCBXZWJQ
b3B1cE1lbnVQcm94eVdpbjo6b25Nb3VzZVdoZWVsKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBX
UEFSQU0gd1BhcmFtLCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpCi17Ci0gICAgaGFuZGxlZCA9IHRy
dWU7Ci0KLSAgICBpZiAoIXNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlu
dCBpID0gMDsKLSAgICBmb3IgKGluY3JlbWVudFdoZWVsRGVsdGEoR0VUX1dIRUVMX0RFTFRBX1dQ
QVJBTSh3UGFyYW0pKTsgYWJzKHdoZWVsRGVsdGEoKSkgPj0gV0hFRUxfREVMVEE7IHJlZHVjZVdo
ZWVsRGVsdGEoV0hFRUxfREVMVEEpKSB7Ci0gICAgICAgIGlmICh3aGVlbERlbHRhKCkgPiAwKQot
ICAgICAgICAgICAgKytpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAtLWk7Ci0gICAgfQot
Ci0gICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93
biwgU2Nyb2xsQnlMaW5lLCBhYnMoaSkpOwotICAgIHJldHVybiAwOwotfQotCi1MUkVTVUxUIFdl
YlBvcHVwTWVudVByb3h5V2luOjpvblBhaW50KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFS
QU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCkKLXsKLSAgICBoYW5kbGVkID0gdHJ1ZTsKLQotICAg
IFBBSU5UU1RSVUNUIHBhaW50U3RydWN0OwotICAgIDo6QmVnaW5QYWludChtX3BvcHVwLCAmcGFp
bnRTdHJ1Y3QpOwotICAgIHBhaW50KHBhaW50U3RydWN0LnJjUGFpbnQsIHBhaW50U3RydWN0Lmhk
Yyk7Ci0gICAgOjpFbmRQYWludChtX3BvcHVwLCAmcGFpbnRTdHJ1Y3QpOwotCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLUxSRVNVTFQgV2ViUG9wdXBNZW51UHJveHlXaW46Om9uUHJpbnRDbGllbnQoSFdO
RCBoV25kLCBVSU5ULCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpCi17Ci0g
ICAgaGFuZGxlZCA9IHRydWU7Ci0KLSAgICBIREMgaGRjID0gcmVpbnRlcnByZXRfY2FzdDxIREM+
KHdQYXJhbSk7Ci0gICAgcGFpbnQoY2xpZW50UmVjdCgpLCBoZGMpOwotCi0gICAgcmV0dXJuIDA7
Ci19Ci0KLWJvb2wgV2ViUG9wdXBNZW51UHJveHlXaW46OmRvd24odW5zaWduZWQgbGluZXMpCi17
Ci0gICAgaW50IHNpemUgPSBtX2l0ZW1zLnNpemUoKTsKLQotICAgIGludCBsYXN0U2VsZWN0YWJs
ZUluZGV4LCBzZWxlY3RlZExpc3RJbmRleDsKLSAgICBsYXN0U2VsZWN0YWJsZUluZGV4ID0gc2Vs
ZWN0ZWRMaXN0SW5kZXggPSBmb2N1c2VkSW5kZXgoKTsKLSAgICBmb3IgKGludCBpID0gc2VsZWN0
ZWRMaXN0SW5kZXggKyAxOyBpID49IDAgJiYgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAo
bV9pdGVtc1tpXS5tX2lzRW5hYmxlZCkgewotICAgICAgICAgICAgbGFzdFNlbGVjdGFibGVJbmRl
eCA9IGk7Ci0gICAgICAgICAgICBpZiAoaSA+PSBzZWxlY3RlZExpc3RJbmRleCArIChpbnQpbGlu
ZXMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gc2V0Rm9jdXNlZEluZGV4KGxhc3RTZWxlY3RhYmxlSW5kZXgpOwotfQotCi1ib29sIFdlYlBv
cHVwTWVudVByb3h5V2luOjp1cCh1bnNpZ25lZCBsaW5lcykKLXsKLSAgICBpbnQgc2l6ZSA9IG1f
aXRlbXMuc2l6ZSgpOwotCi0gICAgaW50IGxhc3RTZWxlY3RhYmxlSW5kZXgsIHNlbGVjdGVkTGlz
dEluZGV4OwotICAgIGxhc3RTZWxlY3RhYmxlSW5kZXggPSBzZWxlY3RlZExpc3RJbmRleCA9IGZv
Y3VzZWRJbmRleCgpOwotICAgIGZvciAoaW50IGkgPSBzZWxlY3RlZExpc3RJbmRleCAtIDE7IGkg
Pj0gMCAmJiBpIDwgc2l6ZTsgLS1pKSB7Ci0gICAgICAgIGlmIChtX2l0ZW1zW2ldLm1faXNFbmFi
bGVkKSB7Ci0gICAgICAgICAgICBsYXN0U2VsZWN0YWJsZUluZGV4ID0gaTsKLSAgICAgICAgICAg
IGlmIChpIDw9IHNlbGVjdGVkTGlzdEluZGV4IC0gKGludClsaW5lcykKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzZXRGb2N1c2VkSW5kZXgo
bGFzdFNlbGVjdGFibGVJbmRleCk7Ci19Ci0KLXZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnBh
aW50KGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIEhEQyBoZGMpCi17Ci0gICAgaWYgKCFtX3Bv
cHVwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fREMpIHsKLSAgICAgICAgbV9EQyA9
IDo6Q3JlYXRlQ29tcGF0aWJsZURDKEhXbmREQyhtX3BvcHVwKSk7Ci0gICAgICAgIGlmICghbV9E
QykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9ibXApIHsKLSAgICAg
ICAgYm9vbCBrZWVwQml0bWFwID0gZmFsc2U7Ci0gICAgICAgIEJJVE1BUCBiaXRtYXA7Ci0gICAg
ICAgIGlmICg6OkdldE9iamVjdChtX2JtcCwgc2l6ZW9mKGJpdG1hcCksICZiaXRtYXApKQotICAg
ICAgICAgICAga2VlcEJpdG1hcCA9IGJpdG1hcC5ibVdpZHRoID09IGNsaWVudFJlY3QoKS53aWR0
aCgpICYmIGJpdG1hcC5ibUhlaWdodCA9PSBjbGllbnRSZWN0KCkuaGVpZ2h0KCk7Ci0gICAgICAg
IGlmICgha2VlcEJpdG1hcCkgewotICAgICAgICAgICAgOjpEZWxldGVPYmplY3QobV9ibXApOwot
ICAgICAgICAgICAgbV9ibXAgPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX2Jt
cCkgewotICAgICAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVC
b3R0b21VcChjbGllbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICAgICAgdm9pZCogcGl4ZWxzID0gMDsK
LSAgICAgICAgbV9ibXAgPSA6OkNyZWF0ZURJQlNlY3Rpb24obV9EQywgJmJpdG1hcEluZm8sIERJ
Ql9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKTsKLSAgICAgICAgaWYgKCFtX2JtcCkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgOjpTZWxlY3RPYmplY3QobV9EQywgbV9ibXApOwotICAg
IH0KLQotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KG1fREMpOwotCi0gICAgSW50UmVjdCB0
cmFuc2xhdGVkRGFtYWdlUmVjdCA9IGRhbWFnZVJlY3Q7Ci0gICAgdHJhbnNsYXRlZERhbWFnZVJl
Y3QubW92ZShJbnRTaXplKDAsIG1fc2Nyb2xsT2Zmc2V0ICogbV9pdGVtSGVpZ2h0KSk7Ci0gICAg
bV9kYXRhLm1fbm90U2VsZWN0ZWRCYWNraW5nU3RvcmUtPnBhaW50KGNvbnRleHQsIGRhbWFnZVJl
Y3QubG9jYXRpb24oKSwgdHJhbnNsYXRlZERhbWFnZVJlY3QpOwotCi0gICAgSW50UmVjdCBzZWxl
Y3RlZEluZGV4UmVjdEluQmFja2luZ1N0b3JlKDAsIGZvY3VzZWRJbmRleCgpICogbV9pdGVtSGVp
Z2h0LCBtX2RhdGEubV9zZWxlY3RlZEJhY2tpbmdTdG9yZS0+c2l6ZSgpLndpZHRoKCksIG1faXRl
bUhlaWdodCk7Ci0gICAgSW50UG9pbnQgc2VsZWN0ZWRJbmRleERzdFBvaW50ID0gc2VsZWN0ZWRJ
bmRleFJlY3RJbkJhY2tpbmdTdG9yZS5sb2NhdGlvbigpOwotICAgIHNlbGVjdGVkSW5kZXhEc3RQ
b2ludC5tb3ZlKDAsIC1tX3Njcm9sbE9mZnNldCAqIG1faXRlbUhlaWdodCk7Ci0KLSAgICBtX2Rh
dGEubV9zZWxlY3RlZEJhY2tpbmdTdG9yZS0+cGFpbnQoY29udGV4dCwgc2VsZWN0ZWRJbmRleERz
dFBvaW50LCBzZWxlY3RlZEluZGV4UmVjdEluQmFja2luZ1N0b3JlKTsKLQotICAgIGlmIChtX3Nj
cm9sbGJhcikKLSAgICAgICAgbV9zY3JvbGxiYXItPnBhaW50KCZjb250ZXh0LCBkYW1hZ2VSZWN0
KTsKLQotCi0gICAgSFduZERDIGhXbmREQzsKLSAgICBIREMgbG9jYWxEQyA9IGhkYyA/IGhkYyA6
IGhXbmREQy5zZXRIV25kKG1fcG9wdXApOwotCi0gICAgOjpCaXRCbHQobG9jYWxEQywgZGFtYWdl
UmVjdC54KCksIGRhbWFnZVJlY3QueSgpLCBkYW1hZ2VSZWN0LndpZHRoKCksIGRhbWFnZVJlY3Qu
aGVpZ2h0KCksIG1fREMsIGRhbWFnZVJlY3QueCgpLCBkYW1hZ2VSZWN0LnkoKSwgU1JDQ09QWSk7
Ci19Ci0KLWJvb2wgV2ViUG9wdXBNZW51UHJveHlXaW46OnNldEZvY3VzZWRJbmRleChpbnQgaSwg
Ym9vbCBob3RUcmFja2luZykKLXsKLSAgICBpZiAoaSA8IDAgfHwgaSA+PSBtX2l0ZW1zLnNpemUo
KSB8fCBpID09IGZvY3VzZWRJbmRleCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIW1faXRlbXNbaV0ubV9pc0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGludmFsaWRhdGVJdGVtKGZvY3VzZWRJbmRleCgpKTsKLSAgICBpbnZhbGlkYXRlSXRlbShpKTsK
LQotICAgIG1fZm9jdXNlZEluZGV4ID0gaTsKLQotICAgIGlmICghaG90VHJhY2tpbmcpIHsKLSAg
ICAgICAgaWYgKFdlYlBvcHVwTWVudVByb3h5OjptX2NsaWVudCkKLSAgICAgICAgICAgIFdlYlBv
cHVwTWVudVByb3h5OjptX2NsaWVudC0+c2V0VGV4dEZyb21JdGVtRm9yUG9wdXBNZW51KHRoaXMs
IGkpOwotICAgIH0KLQotICAgIGlmICghc2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb24oKSkKLSAgICAg
ICAgOjpVcGRhdGVXaW5kb3cobV9wb3B1cCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50
IFdlYlBvcHVwTWVudVByb3h5V2luOjp2aXNpYmxlSXRlbXMoKSBjb25zdAotewotICAgIHJldHVy
biBjbGllbnRSZWN0KCkuaGVpZ2h0KCkgLyBtX2l0ZW1IZWlnaHQ7Ci19Ci0KLWludCBXZWJQb3B1
cE1lbnVQcm94eVdpbjo6bGlzdEluZGV4QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0ICsgcG9pbnQueSgpIC8gbV9pdGVtSGVp
Z2h0OwotfQotCi1pbnQgV2ViUG9wdXBNZW51UHJveHlXaW46OmZvY3VzZWRJbmRleCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fZm9jdXNlZEluZGV4OwotfQotCi12b2lkIFdlYlBvcHVwTWVudVBy
b3h5V2luOjpmb2N1c0ZpcnN0KCkKLXsKLSAgICBpbnQgc2l6ZSA9IG1faXRlbXMuc2l6ZSgpOwot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKG1faXRl
bXNbaV0ubV9pc0VuYWJsZWQpIHsKLSAgICAgICAgICAgIHNldEZvY3VzZWRJbmRleChpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFdlYlBvcHVwTWVu
dVByb3h5V2luOjpmb2N1c0xhc3QoKQotewotICAgIGludCBzaXplID0gbV9pdGVtcy5zaXplKCk7
Ci0KLSAgICBmb3IgKGludCBpID0gc2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgaWYg
KG1faXRlbXNbaV0ubV9pc0VuYWJsZWQpIHsKLSAgICAgICAgICAgIHNldEZvY3VzZWRJbmRleChp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KLXZvaWQgV2Vi
UG9wdXBNZW51UHJveHlXaW46OmluY3JlbWVudFdoZWVsRGVsdGEoaW50IGRlbHRhKQotewotICAg
IG1fd2hlZWxEZWx0YSArPSBkZWx0YTsKLX0KLQotdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6
cmVkdWNlV2hlZWxEZWx0YShpbnQgZGVsdGEpCi17Ci0gICAgQVNTRVJUKGRlbHRhID49IDApOwot
ICAgIEFTU0VSVChkZWx0YSA8PSBhYnMobV93aGVlbERlbHRhKSk7Ci0KLSAgICBpZiAobV93aGVl
bERlbHRhID4gMCkKLSAgICAgICAgbV93aGVlbERlbHRhIC09IGRlbHRhOwotICAgIGVsc2UgaWYg
KG1fd2hlZWxEZWx0YSA8IDApCi0gICAgICAgIG1fd2hlZWxEZWx0YSArPSBkZWx0YTsKLSAgICBl
bHNlCi0gICAgICAgIHJldHVybjsKLX0KLQotYm9vbCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Ny
b2xsVG9SZXZlYWxTZWxlY3Rpb24oKQotewotICAgIGlmICghbV9zY3JvbGxiYXIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGludCBpbmRleCA9IGZvY3VzZWRJbmRleCgpOwotCi0gICAg
aWYgKGluZGV4IDwgbV9zY3JvbGxPZmZzZXQpIHsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihWZXJ0aWNhbFNjcm9sbGJhciwgaW5kZXgpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaW5kZXggPj0gbV9zY3JvbGxP
ZmZzZXQgKyB2aXNpYmxlSXRlbXMoKSkgewotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
VG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKFZlcnRpY2FsU2Nyb2xsYmFyLCBpbmRleCAtIHZpc2li
bGVJdGVtcygpICsgMSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY0MTA0Zjc1ZmVhYTVmZjRiMjZhYWY3OTFjOGMyMzEwOGMyYTJkNDYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlBvcHVwTWVudVByb3h5
V2luX2gKLSNkZWZpbmUgV2ViUG9wdXBNZW51UHJveHlXaW5faAotCi0jaW5jbHVkZSAiUGxhdGZv
cm1Qb3B1cE1lbnVEYXRhLmgiCi0jaW5jbHVkZSAiV2ViUG9wdXBJdGVtLmgiCi0jaW5jbHVkZSAi
V2ViUG9wdXBNZW51UHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgSFdORF9f
KiBIV05EOwotdHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKLXR5cGVkZWYgc3RydWN0IEhCSVRN
QVBfXyogSEJJVE1BUDsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlZpZXc7Ci0K
LWNsYXNzIFdlYlBvcHVwTWVudVByb3h5V2luIDogcHVibGljIFdlYlBvcHVwTWVudVByb3h5LCBw
cml2YXRlIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhICB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHlXaW4+IGNyZWF0ZShXZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50KiBjbGllbnQpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYlBvcHVwTWVudVByb3h5V2luKHdlYlZpZXcsIGNsaWVudCkpOwotICAg
IH0KLSAgICB+V2ViUG9wdXBNZW51UHJveHlXaW4oKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzaG93
UG9wdXBNZW51KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9u
LCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYsIGNv
bnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAg
dmlydHVhbCB2b2lkIGhpZGVQb3B1cE1lbnUoKTsKLQotICAgIGJvb2wgc2V0Rm9jdXNlZEluZGV4
KGludCBpbmRleCwgYm9vbCBob3RUcmFja2luZyA9IGZhbHNlKTsKLQotICAgIHZvaWQgaGlkZSgp
IHsgaGlkZVBvcHVwTWVudSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViUG9wdXBNZW51UHJveHlX
aW4oV2ViVmlldyosIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQqKTsKLQotICAgIFdlYkNvcmU6
OlNjcm9sbGJhciogc2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxiYXIuZ2V0KCk7
IH0KLQotICAgIC8vIFNjcm9sbGFibGVBcmVhCi0gICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShX
ZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBpbnQgc2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6U2Nyb2xsYmFyKikgY29uc3QgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChX
ZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29y
bmVyVmlzaWJsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBXZWJDb3JlOjpJbnRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJh
ciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Njcm9sbGJh
ci5nZXQoKTsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1
YWwgaW50IHZpc2libGVIZWlnaHQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCB2
aXNpYmxlV2lkdGgoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNp
emUgY29udGVudHNTaXplKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJ
bnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkg
dGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KLSAgICB2
b2lkIHNjcm9sbFRvKGludCBvZmZzZXQpOwotCi0gICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJXaW5k
b3dDbGFzcygpOwotICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYlBvcHVwTWVudVByb3h5
V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci0gICAgTFJFU1VMVCB3bmRQcm9j
KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsK
LQotICAgIC8vIE1lc3NhZ2UgcHVtcCBtZXNzYWdlcy4KLSAgICBMUkVTVUxUIG9uTW91c2VBY3Rp
dmF0ZShIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsK
LSAgICBMUkVTVUxUIG9uU2l6ZShIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBi
b29sJiBoYW5kbGVkKTsKLSAgICBMUkVTVUxUIG9uS2V5RG93bihIV05ELCBVSU5UIG1lc3NhZ2Us
IFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKLSAgICBMUkVTVUxUIG9uQ2hhcihIV05E
LCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKLSAgICBMUkVT
VUxUIG9uTW91c2VNb3ZlKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wm
IGhhbmRsZWQpOwotICAgIExSRVNVTFQgb25MQnV0dG9uRG93bihIV05ELCBVSU5UIG1lc3NhZ2Us
IFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKLSAgICBMUkVTVUxUIG9uTEJ1dHRvblVw
KEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpOwotICAg
IExSRVNVTFQgb25Nb3VzZVdoZWVsKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0s
IGJvb2wmIGhhbmRsZWQpOwotICAgIExSRVNVTFQgb25QYWludChIV05ELCBVSU5UIG1lc3NhZ2Us
IFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKLSAgICBMUkVTVUxUIG9uUHJpbnRDbGll
bnQoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCk7Ci0K
LSAgICB2b2lkIGNhbGN1bGF0ZVBvc2l0aW9uQW5kU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBjbGllbnRSZWN0KCkgY29uc3Q7Ci0gICAgdm9pZCBp
bnZhbGlkYXRlSXRlbShpbnQgaW5kZXgpOwotCi0gICAgaW50IGl0ZW1IZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX2l0ZW1IZWlnaHQ7IH0KLSAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5k
b3dSZWN0KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dSZWN0OyB9Ci0gICAgaW50IHdoZWVsRGVs
dGEoKSBjb25zdCB7IHJldHVybiBtX3doZWVsRGVsdGE7IH0KLSAgICB2b2lkIHNldFdhc0NsaWNr
ZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX3dhc0NsaWNrZWQgPSBiOyB9Ci0gICAgYm9vbCB3YXNDbGlj
a2VkKCkgY29uc3QgeyByZXR1cm4gbV93YXNDbGlja2VkOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxP
ZmZzZXQoaW50IG9mZnNldCkgeyBtX3Njcm9sbE9mZnNldCA9IG9mZnNldDsgfQotICAgIGludCBz
Y3JvbGxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE9mZnNldDsgfQotICAgIGJvb2wg
c2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2UoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGJhckNhcHR1
cmluZ01vdXNlOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxiYXJDYXB0dXJpbmdNb3VzZShib29sIGIp
IHsgbV9zY3JvbGxiYXJDYXB0dXJpbmdNb3VzZSA9IGI7IH0KLQotCi0gICAgYm9vbCB1cCh1bnNp
Z25lZCBsaW5lcyA9IDEpOwotICAgIGJvb2wgZG93bih1bnNpZ25lZCBsaW5lcyA9IDEpOwotCi0g
ICAgdm9pZCBwYWludChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgPSAw
KTsKLSAgICBpbnQgdmlzaWJsZUl0ZW1zKCkgY29uc3Q7Ci0gICAgaW50IGxpc3RJbmRleEF0UG9p
bnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKLSAgICBpbnQgZm9jdXNlZEluZGV4
KCkgY29uc3Q7Ci0gICAgdm9pZCBmb2N1c0ZpcnN0KCk7Ci0gICAgdm9pZCBmb2N1c0xhc3QoKTsK
LSAgICBib29sIHNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKCk7Ci0gICAgdm9pZCBpbmNyZW1lbnRX
aGVlbERlbHRhKGludCBkZWx0YSk7Ci0gICAgdm9pZCByZWR1Y2VXaGVlbERlbHRhKGludCBkZWx0
YSk7Ci0KLSAgICBXZWJWaWV3KiBtX3dlYlZpZXc7Ci0gICAgVmVjdG9yPFdlYlBvcHVwSXRlbT4g
bV9pdGVtczsKLSAgICBQbGF0Zm9ybVBvcHVwTWVudURhdGEgbV9kYXRhOwotICAgIGludCBtX25l
d1NlbGVjdGVkSW5kZXg7Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX3Njcm9s
bGJhcjsKLSAgICBIV05EIG1fcG9wdXA7Ci0gICAgSERDIG1fREM7Ci0gICAgSEJJVE1BUCBtX2Jt
cDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fd2luZG93UmVjdDsKLQotICAgIGludCBtX2l0ZW1I
ZWlnaHQ7Ci0gICAgaW50IG1fc2Nyb2xsT2Zmc2V0OwotICAgIGludCBtX3doZWVsRGVsdGE7Ci0g
ICAgaW50IG1fZm9jdXNlZEluZGV4OwotICAgIGJvb2wgbV93YXNDbGlja2VkOwotICAgIGJvb2wg
bV9zY3JvbGxiYXJDYXB0dXJpbmdNb3VzZTsKLSAgICBib29sIG1fc2hvd1BvcHVwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJQb3B1cE1lbnVQcm94eVdpbl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlByb2Nlc3NQcm94
eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlByb2Nlc3NQcm94eVdp
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMGRiZTliOWFkNDMyOGNhZDQy
MzljNTcwNDAwOWY2NDQ4MWRlZjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQcm9jZXNzUHJveHlX
aW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLVZlY3RvcjxIV05EPiBXZWJQcm9jZXNzUHJveHk6OndpbmRvd3NUb1JlY2Vp
dmVTZW50TWVzc2FnZXNXaGlsZVdhaXRpbmdGb3JTeW5jUmVwbHkoKQotewotICAgIHJldHVybiBW
ZWN0b3I8SFdORD4oKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1
bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmKQotewotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93
aW4vV2ViVW5kb0NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlVu
ZG9DbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDA4YmMzYTI5ZDVi
Njk1ZWUzODc1M2FkMWRkODZhOTdjYzFiOTQ2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVW5kb0Ns
aWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlVuZG9DbGllbnQuaCIKLQotI2luY2x1ZGUg
IldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKLSNpbmNsdWRl
ICJXZWJWaWV3LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYlVuZG9DbGllbnQ6
OnJlZ2lzdGVyRWRpdENvbW1hbmQoV2ViVmlldyogdmlldywgUGFzc1JlZlB0cjxXZWJFZGl0Q29t
bWFuZFByb3h5PiBwcnBDb21tYW5kLCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVk
bykKLXsKLSAgICBpZiAoIW1fY2xpZW50LnJlZ2lzdGVyRWRpdENvbW1hbmQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFJlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBjb21tYW5kID0gcHJwQ29t
bWFuZDsKLSAgICBtX2NsaWVudC5yZWdpc3RlckVkaXRDb21tYW5kKHRvQVBJKHZpZXcpLCB0b0FQ
SShjb21tYW5kLnJlbGVhc2UoKS5sZWFrUmVmKCkpLCAodW5kb09yUmVkbyA9PSBXZWJQYWdlUHJv
eHk6OlVuZG8pID8ga1dLVmlld1VuZG8gOiBrV0tWaWV3UmVkbywgbV9jbGllbnQuY2xpZW50SW5m
byk7Ci19Ci0KLXZvaWQgV2ViVW5kb0NsaWVudDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoV2ViVmll
dyogdmlldykKLXsKLSAgICBpZiAoIW1fY2xpZW50LmNsZWFyQWxsRWRpdENvbW1hbmRzKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9jbGllbnQuY2xlYXJBbGxFZGl0Q29tbWFuZHModG9B
UEkodmlldyksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi1ib29sIFdlYlVuZG9DbGllbnQ6
OmNhblVuZG9SZWRvKFdlYlZpZXcqIHZpZXcsIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRv
T3JSZWRvKQotewotICAgIGlmICghbV9jbGllbnQuY2FuVW5kb1JlZG8pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gbV9jbGllbnQuY2FuVW5kb1JlZG8odG9BUEkodmll
dyksIHVuZG9PclJlZG8sIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12b2lkIFdlYlVuZG9D
bGllbnQ6OmV4ZWN1dGVVbmRvUmVkbyhXZWJWaWV3KiB2aWV3LCBXZWJQYWdlUHJveHk6OlVuZG9P
clJlZG8gdW5kb09yUmVkbykKLXsKLSAgICBpZiAoIW1fY2xpZW50LmV4ZWN1dGVVbmRvUmVkbykK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fY2xpZW50LmV4ZWN1dGVVbmRvUmVkbyh0b0FQ
SSh2aWV3KSwgdW5kb09yUmVkbywgbV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2lu
L1dlYlVuZG9DbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVW5kb0Ns
aWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2U2Y2RmNjMzNDI5YTUxODgw
ZmM0YTFiZTgwN2ZmOWFmMWQ3ZDY5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVW5kb0NsaWVudC5o
CisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2Vi
VW5kb0NsaWVudF9oCi0jZGVmaW5lIFdlYlVuZG9DbGllbnRfaAotCi0jaW5jbHVkZSAiQVBJQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiV0tWaWV3LmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0j
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdl
YkVkaXRDb21tYW5kUHJveHk7Ci0KLWNsYXNzIFdlYlVuZG9DbGllbnQgOiBwdWJsaWMgQVBJQ2xp
ZW50PFdLVmlld1VuZG9DbGllbnQsIGtXS1ZpZXdVbmRvQ2xpZW50Q3VycmVudFZlcnNpb24+IHsK
LXB1YmxpYzoKLSAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoV2ViVmlldyosIFBhc3NSZWZQ
dHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7Ci0gICAg
dm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcyhXZWJWaWV3Kik7Ci0gICAgYm9vbCBjYW5VbmRvUmVk
byhXZWJWaWV3KiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKLSAgICB2b2lkIGV4ZWN1dGVV
bmRvUmVkbyhXZWJWaWV3KiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViVW5kb0NsaWVudF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYmRlOTMyZjNjOGI5OTJjZmUwMDU2MDk4NDI3NTI0ZGMyNDBiMzU2Zi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3Mvd2luL1dlYlZpZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTgwNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLQotI2lu
Y2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVkZSAiRmluZEluZGljYXRvci5o
IgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50
LmgiCi0jaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIk5hdGl2ZVdl
YldoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJXZWJDb250
ZXh0LmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eVdpbi5oIgotI2luY2x1ZGUgIldl
YkVkaXRDb21tYW5kUHJveHkuaCIKLSNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKLSNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eVdpbi5oIgot
I2luY2x1ZGUgPENvbW1jdHJsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbmZvLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9DdXJzb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RyYWdTZXNzaW9u
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVT
eXN0ZW0uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSFduZERDLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Tb2Z0TGlua2luZy5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUluc3RhbmNlSGFuZGxlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dp
bmRvd3NUb3VjaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFVTRShDRykKLSNpbmNsdWRlICJXS0NB
Q0ZWaWV3V2luZG93LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0jaW5jbHVkZSAiV2ViRnVsbFNj
cmVlbk1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnVsbFNjcmVlbkNvbnRyb2xs
ZXIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSW1lIHsKLS8vIFdlIG5lZWQgdGhlc2UgZnVuY3Rp
b25zIGluIGEgc2VwYXJhdGUgbmFtZXNwYWNlLCBiZWNhdXNlIGluIHRoZSBnbG9iYWwgbmFtZXNw
YWNlIHRoZXkgY29uZmxpY3QKLS8vIHdpdGggdGhlIGRlZmluaXRpb25zIGluIGltbS5oIG9ubHkg
YnkgdGhlIHR5cGUgbW9kaWZpZXIgKHRoZSBtYWNybyBkZWZpbmVzIHRoZW0gYXMgc3RhdGljKSBh
bmQKLS8vIGltbS5oIGlzIGluY2x1ZGVkIGJ5IHdpbmRvd3MuaAotU09GVF9MSU5LX0xJQlJBUlko
SU1NMzIpCi1TT0ZUX0xJTksoSU1NMzIsIEltbUdldENvbnRleHQsIEhJTUMsIFdJTkFQSSwgKEhX
TkQgaHduZCksIChod25kKSkKLVNPRlRfTElOSyhJTU0zMiwgSW1tUmVsZWFzZUNvbnRleHQsIEJP
T0wsIFdJTkFQSSwgKEhXTkQgaFduZCwgSElNQyBoSU1DKSwgKGhXbmQsIGhJTUMpKQotU09GVF9M
SU5LKElNTTMyLCBJbW1HZXRDb21wb3NpdGlvblN0cmluZ1csIExPTkcsIFdJTkFQSSwgKEhJTUMg
aElNQywgRFdPUkQgZHdJbmRleCwgTFBWT0lEIGxwQnVmLCBEV09SRCBkd0J1ZkxlbiksIChoSU1D
LCBkd0luZGV4LCBscEJ1ZiwgZHdCdWZMZW4pKQotU09GVF9MSU5LKElNTTMyLCBJbW1TZXRDYW5k
aWRhdGVXaW5kb3csIEJPT0wsIFdJTkFQSSwgKEhJTUMgaElNQywgTFBDQU5ESURBVEVGT1JNIGxw
Q2FuZGlkYXRlKSwgKGhJTUMsIGxwQ2FuZGlkYXRlKSkKLVNPRlRfTElOSyhJTU0zMiwgSW1tU2V0
T3BlblN0YXR1cywgQk9PTCwgV0lOQVBJLCAoSElNQyBoSU1DLCBCT09MIGZPcGVuKSwgKGhJTUMs
IGZPcGVuKSkKLVNPRlRfTElOSyhJTU0zMiwgSW1tTm90aWZ5SU1FLCBCT09MLCBXSU5BUEksIChI
SU1DIGhJTUMsIERXT1JEIGR3QWN0aW9uLCBEV09SRCBkd0luZGV4LCBEV09SRCBkd1ZhbHVlKSwg
KGhJTUMsIGR3QWN0aW9uLCBkd0luZGV4LCBkd1ZhbHVlKSkKLVNPRlRfTElOSyhJTU0zMiwgSW1t
QXNzb2NpYXRlQ29udGV4dEV4LCBCT09MLCBXSU5BUEksIChIV05EIGhXbmQsIEhJTUMgaElNQywg
RFdPUkQgZHdGbGFncyksIChoV25kLCBoSU1DLCBkd0ZsYWdzKSkKLX07Ci0KLS8vIFNvZnQgbGlu
ayBmdW5jdGlvbnMgZm9yIGdlc3R1cmVzIGFuZCBwYW5uaW5nLgotU09GVF9MSU5LX0xJQlJBUlko
VVNFUjMyKTsKLVNPRlRfTElOS19PUFRJT05BTChVU0VSMzIsIEdldEdlc3R1cmVJbmZvLCBCT09M
LCBXSU5BUEksIChIR0VTVFVSRUlORk8sIFBHRVNUVVJFSU5GTykpOwotU09GVF9MSU5LX09QVElP
TkFMKFVTRVIzMiwgU2V0R2VzdHVyZUNvbmZpZywgQk9PTCwgV0lOQVBJLCAoSFdORCwgRFdPUkQs
IFVJTlQsIFBHRVNUVVJFQ09ORklHLCBVSU5UKSk7Ci1TT0ZUX0xJTktfT1BUSU9OQUwoVVNFUjMy
LCBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlLCBCT09MLCBXSU5BUEksIChIR0VTVFVSRUlORk8pKTsK
LQotU09GVF9MSU5LX0xJQlJBUlkoVXh0aGVtZSk7Ci1TT0ZUX0xJTktfT1BUSU9OQUwoVXh0aGVt
ZSwgQmVnaW5QYW5uaW5nRmVlZGJhY2ssIEJPT0wsIFdJTkFQSSwgKEhXTkQpKTsKLVNPRlRfTElO
S19PUFRJT05BTChVeHRoZW1lLCBFbmRQYW5uaW5nRmVlZGJhY2ssIEJPT0wsIFdJTkFQSSwgKEhX
TkQsIEJPT0wpKTsKLVNPRlRfTElOS19PUFRJT05BTChVeHRoZW1lLCBVcGRhdGVQYW5uaW5nRmVl
ZGJhY2ssIEJPT0wsIFdJTkFQSSwgKEhXTkQsIExPTkcsIExPTkcsIEJPT0wpKTsKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgY29uc3Qg
TFBDV1NUUiBrV2ViS2l0MldlYlZpZXdXaW5kb3dDbGFzc05hbWUgPSBMIldlYktpdDJXZWJWaWV3
V2luZG93Q2xhc3MiOwotCi0vLyBDb25zdGFudHMgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZv
cm1zLgotY29uc3QgaW50IFdNX1hQX1RIRU1FQ0hBTkdFRCA9IDB4MDMxQTsKLWNvbnN0IGludCBX
TV9WSVNUQV9NT1VTRUhXSEVFTCA9IDB4MDIwRTsKLQotc3RhdGljIGNvbnN0IGludCBrTWF4VG9v
bFRpcFdpZHRoID0gMjUwOwotCi1lbnVtIHsKLSAgICBVcGRhdGVBY3RpdmVTdGF0ZVRpbWVyID0g
MSwKLX07Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgV2ViVmlldzo6V2ViVmlld1duZFByb2MoSFdORCBo
V25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAg
TE9OR19QVFIgbG9uZ1B0ciA9IDo6R2V0V2luZG93TG9uZ1B0cihoV25kLCAwKTsKLSAgICAKLSAg
ICBpZiAoV2ViVmlldyogd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+KGxvbmdQ
dHIpKQotICAgICAgICByZXR1cm4gd2ViVmlldy0+d25kUHJvYyhoV25kLCBtZXNzYWdlLCB3UGFy
YW0sIGxQYXJhbSk7Ci0KLSAgICBpZiAobWVzc2FnZSA9PSBXTV9DUkVBVEUpIHsKLSAgICAgICAg
TFBDUkVBVEVTVFJVQ1QgY3JlYXRlU3RydWN0ID0gcmVpbnRlcnByZXRfY2FzdDxMUENSRUFURVNU
UlVDVD4obFBhcmFtKTsKLQotICAgICAgICAvLyBBc3NvY2lhdGUgdGhlIFdlYlZpZXcgd2l0aCB0
aGUgd2luZG93LgotICAgICAgICA6OlNldFdpbmRvd0xvbmdQdHIoaFduZCwgMCwgKExPTkdfUFRS
KWNyZWF0ZVN0cnVjdC0+bHBDcmVhdGVQYXJhbXMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBh
cmFtKTsKLX0KLQotTFJFU1VMVCBXZWJWaWV3Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIExSRVNVTFQgbFJlc3Vs
dCA9IDA7Ci0gICAgYm9vbCBoYW5kbGVkID0gdHJ1ZTsKLQotICAgIHN3aXRjaCAobWVzc2FnZSkg
ewotICAgIGNhc2UgV01fQ0xPU0U6Ci0gICAgICAgIG1fcGFnZS0+dHJ5Q2xvc2UoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9ERVNUUk9ZOgotICAgICAgICBtX2lzQmVpbmdEZXN0cm95
ZWQgPSB0cnVlOwotICAgICAgICBjbG9zZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdN
X0VSQVNFQktHTkQ6Ci0gICAgICAgIGxSZXN1bHQgPSAxOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFdNX1BBSU5UOgotICAgICAgICBsUmVzdWx0ID0gb25QYWludEV2ZW50KGhXbmQsIG1lc3Nh
Z2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
TV9QUklOVENMSUVOVDoKLSAgICAgICAgbFJlc3VsdCA9IG9uUHJpbnRDbGllbnRFdmVudChoV25k
LCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgV01fTU9VU0VBQ1RJVkFURToKLSAgICAgICAgc2V0V2FzQWN0aXZhdGVkQnlNb3VzZUV2
ZW50KHRydWUpOwotICAgICAgICBoYW5kbGVkID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgV01fTU9VU0VNT1ZFOgotICAgIGNhc2UgV01fTEJVVFRPTkRPV046Ci0gICAgY2FzZSBX
TV9NQlVUVE9ORE9XTjoKLSAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgotICAgIGNhc2UgV01fTEJV
VFRPTkRCTENMSzoKLSAgICBjYXNlIFdNX01CVVRUT05EQkxDTEs6Ci0gICAgY2FzZSBXTV9SQlVU
VE9OREJMQ0xLOgotICAgIGNhc2UgV01fTEJVVFRPTlVQOgotICAgIGNhc2UgV01fTUJVVFRPTlVQ
OgotICAgIGNhc2UgV01fUkJVVFRPTlVQOgotICAgIGNhc2UgV01fTU9VU0VMRUFWRToKLSAgICAg
ICAgbFJlc3VsdCA9IG9uTW91c2VFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwg
aGFuZGxlZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV01fTU9VU0VXSEVFTDoKLSAgICBj
YXNlIFdNX1ZJU1RBX01PVVNFSFdIRUVMOgotICAgICAgICBsUmVzdWx0ID0gb25XaGVlbEV2ZW50
KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBXTV9IU0NST0xMOgotICAgICAgICBsUmVzdWx0ID0gb25Ib3Jpem9udGFsU2Ny
b2xsKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBXTV9WU0NST0xMOgotICAgICAgICBsUmVzdWx0ID0gb25WZXJ0aWNhbFNj
cm9sbChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV01fR0VTVFVSRU5PVElGWToKLSAgICAgICAgbFJlc3VsdCA9IG9uR2Vz
dHVyZU5vdGlmeShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgV01fR0VTVFVSRToKLSAgICAgICAgbFJlc3VsdCA9IG9uR2Vz
dHVyZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV01fU1lTS0VZRE9XTjoKLSAgICBjYXNlIFdNX0tFWURPV046Ci0gICAg
Y2FzZSBXTV9TWVNDSEFSOgotICAgIGNhc2UgV01fQ0hBUjoKLSAgICBjYXNlIFdNX1NZU0tFWVVQ
OgotICAgIGNhc2UgV01fS0VZVVA6Ci0gICAgICAgIGxSZXN1bHQgPSBvbktleUV2ZW50KGhXbmQs
IG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXTV9TSVpFOgotICAgICAgICBsUmVzdWx0ID0gb25TaXplRXZlbnQoaFduZCwgbWVzc2Fn
ZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdN
X1dJTkRPV1BPU0NIQU5HRUQ6Ci0gICAgICAgIGxSZXN1bHQgPSBvbldpbmRvd1Bvc2l0aW9uQ2hh
bmdlZEV2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9TRVRGT0NVUzoKLSAgICAgICAgbFJlc3VsdCA9IG9uU2V0
Rm9jdXNFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgV01fS0lMTEZPQ1VTOgotICAgICAgICBsUmVzdWx0ID0gb25L
aWxsRm9jdXNFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgV01fVElNRVI6Ci0gICAgICAgIGxSZXN1bHQgPSBvblRp
bWVyRXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFdNX1NIT1dXSU5ET1c6Ci0gICAgICAgIGxSZXN1bHQgPSBvblNo
b3dXaW5kb3dFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgV01fU0VUQ1VSU09SOgotICAgICAgICBsUmVzdWx0ID0g
b25TZXRDdXJzb3IoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFdNX0lNRV9TVEFSVENPTVBPU0lUSU9OOgotICAgICAgICBo
YW5kbGVkID0gb25JTUVTdGFydENvbXBvc2l0aW9uKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgV01fSU1FX1JFUVVFU1Q6Ci0gICAgICAgIGxSZXN1bHQgPSBvbklNRVJlcXVlc3Qod1BhcmFt
LCBsUGFyYW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdNX0lNRV9DT01QT1NJVElPTjoK
LSAgICAgICAgaGFuZGxlZCA9IG9uSU1FQ29tcG9zaXRpb24obFBhcmFtKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBXTV9JTUVfRU5EQ09NUE9TSVRJT046Ci0gICAgICAgIGhhbmRsZWQgPSBv
bklNRUVuZENvbXBvc2l0aW9uKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV01fSU1FX1NF
TEVDVDoKLSAgICAgICAgaGFuZGxlZCA9IG9uSU1FU2VsZWN0KHdQYXJhbSwgbFBhcmFtKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9JTUVfU0VUQ09OVEVYVDoKLSAgICAgICAgaGFuZGxl
ZCA9IG9uSU1FU2V0Q29udGV4dCh3UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgaWYgKCFoYW5kbGVkKQotICAgICAgICBsUmVzdWx0ID0gOjpEZWZXaW5kb3dQcm9j
KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIHJldHVybiBsUmVzdWx0Owot
fQotCi1ib29sIFdlYlZpZXc6OnJlZ2lzdGVyV2ViVmlld1dpbmRvd0NsYXNzKCkKLXsKLSAgICBz
dGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7Ci0gICAgaWYgKGhh
dmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGhhdmVS
ZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOwotCi0gICAgV05EQ0xBU1NFWCB3Y2V4OwotCi0g
ICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Ci0gICAgd2NleC5zdHlsZSAgICAg
ICAgICA9IENTX0RCTENMS1M7Ci0gICAgd2NleC5scGZuV25kUHJvYyAgICA9IFdlYlZpZXc6Oldl
YlZpZXdXbmRQcm9jOwotICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOwotICAgIHdjZXguY2JX
bmRFeHRyYSAgICAgPSBzaXplb2YoV2ViVmlldyopOwotICAgIHdjZXguaEluc3RhbmNlICAgICAg
PSBpbnN0YW5jZUhhbmRsZSgpOwotICAgIHdjZXguaEljb24gICAgICAgICAgPSAwOwotICAgIHdj
ZXguaEN1cnNvciAgICAgICAgPSA6OkxvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4
LmhickJhY2tncm91bmQgID0gMDsKLSAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKLSAgICB3
Y2V4Lmxwc3pDbGFzc05hbWUgID0ga1dlYktpdDJXZWJWaWV3V2luZG93Q2xhc3NOYW1lOwotICAg
IHdjZXguaEljb25TbSAgICAgICAgPSAwOwotCi0gICAgcmV0dXJuICEhOjpSZWdpc3RlckNsYXNz
RXgoJndjZXgpOwotfQotCi1XZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgV2ViQ29udGV4dCog
Y29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIEhXTkQgcGFyZW50V2luZG93KQotICAg
IDogbV90b3BMZXZlbFBhcmVudFdpbmRvdygwKQotICAgICwgbV90b29sVGlwV2luZG93KDApCi0g
ICAgLCBtX2xhc3RDdXJzb3JTZXQoMCkKLSAgICAsIG1fd2ViQ29yZUN1cnNvcigwKQotICAgICwg
bV9vdmVycmlkZUN1cnNvcigwKQotICAgICwgbV90cmFja2luZ01vdXNlTGVhdmUoZmFsc2UpCi0g
ICAgLCBtX2lzSW5XaW5kb3coZmFsc2UpCi0gICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKLSAgICAs
IG1fd2FzQWN0aXZhdGVkQnlNb3VzZUV2ZW50KGZhbHNlKQotICAgICwgbV9pc0JlaW5nRGVzdHJv
eWVkKGZhbHNlKQotICAgICwgbV9pbklNRUNvbXBvc2l0aW9uKDApCi0gICAgLCBtX2ZpbmRJbmRp
Y2F0b3JDYWxsYmFjaygwKQotICAgICwgbV9maW5kSW5kaWNhdG9yQ2FsbGJhY2tDb250ZXh0KDAp
Ci0gICAgLCBtX3BhZ2VPdmVybGF5SW5zdGFsbGVkKGZhbHNlKQotICAgICwgbV9sYXN0UGFuWCgw
KQotICAgICwgbV9sYXN0UGFuWSgwKQotICAgICwgbV9vdmVyUGFuWSgwKQotICAgICwgbV9nZXN0
dXJlUmVhY2hlZFNjcm9sbGluZ0xpbWl0KGZhbHNlKQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICAsIG1fbGF5ZXJIb3N0V2luZG93KDApCi0jZW5kaWYKLXsKLSAgICByZWdp
c3RlcldlYlZpZXdXaW5kb3dDbGFzcygpOwotCi0gICAgbV93aW5kb3cgPSA6OkNyZWF0ZVdpbmRv
d0V4VygwLCBrV2ViS2l0MldlYlZpZXdXaW5kb3dDbGFzc05hbWUsIDAsIFdTX0NISUxEIHwgV1Nf
Q0xJUFNJQkxJTkdTIHwgV1NfQ0xJUENISUxEUkVOIHwgV1NfVklTSUJMRSwKLSAgICAgICAgcmVj
dC50b3AsIHJlY3QubGVmdCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSBy
ZWN0LnRvcCwgcGFyZW50V2luZG93ID8gcGFyZW50V2luZG93IDogSFdORF9NRVNTQUdFLCAwLCBp
bnN0YW5jZUhhbmRsZSgpLCB0aGlzKTsKLSAgICBBU1NFUlQoOjpJc1dpbmRvdyhtX3dpbmRvdykp
OwotICAgIC8vIFdlIG9ubHkgY2hlY2sgb3VyIHdpbmRvdyBzdHlsZSwgYW5kIG5vdCA6OklzV2lu
ZG93VmlzaWJsZSwgYmVjYXVzZSBtX2lzVmlzaWJsZSBvbmx5IHRyYWNrcwotICAgIC8vIHRoaXMg
d2luZG93J3MgdmlzaWJpbGl0eSBzdGF0dXMsIHdoaWxlIDo6SXNXaW5kb3dWaXNpYmxlIHRha2Vz
IG91ciBhbmNlc3RvcnMnIHZpc2liaWxpdHkKLSAgICAvLyBzdGF0dXMgaW50byBhY2NvdW50LiA8
aHR0cDovL3dlYmtpdC5vcmcvYi81NDEwND4KLSAgICBBU1NFUlQobV9pc1Zpc2libGUgPT0gc3Rh
dGljX2Nhc3Q8Ym9vbD4oOjpHZXRXaW5kb3dMb25nKG1fd2luZG93LCBHV0xfU1RZTEUpICYgV1Nf
VklTSUJMRSkpOwotCi0gICAgbV9wYWdlID0gY29udGV4dC0+Y3JlYXRlV2ViUGFnZSh0aGlzLCBw
YWdlR3JvdXApOwotICAgIG1fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKLQotICAgIENvQ3Jl
YXRlSW5zdGFuY2UoQ0xTSURfRHJhZ0Ryb3BIZWxwZXIsIDAsIENMU0NUWF9JTlBST0NfU0VSVkVS
LCBJSURfSURyb3BUYXJnZXRIZWxwZXIsICh2b2lkKiopJm1fZHJvcFRhcmdldEhlbHBlcik7Ci0K
LSAgICAvLyBGSVhNRTogSW5pdGlhbGl6aW5nIHRoZSB0b29sdGlwIHdpbmRvdyBoZXJlIG1hdGNo
ZXMgV2ViS2l0IHdpbiwgYnV0IHNlZW1zIGxpa2Ugc29tZXRoaW5nCi0gICAgLy8gd2UgY291bGQg
ZG8gb24gZGVtYW5kIHRvIHNhdmUgcmVzb3VyY2VzLgotICAgIGluaXRpYWxpemVUb29sVGlwV2lu
ZG93KCk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSB0b3AgbGV2ZWwgcGFyZW50IHdpbmRvdyBh
bmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgV2luZG93TWVzc2FnZUJyb2FkY2FzdGVyLgotICAgIHdp
bmRvd0FuY2VzdHJ5RGlkQ2hhbmdlKCk7Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0g
ICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KHRoaXMpOwotI2VuZGlm
Ci19Ci0KLVdlYlZpZXc6On5XZWJWaWV3KCkKLXsKLSAgICAvLyBUb29sdGlwIHdpbmRvdyBuZWVk
cyB0byBiZSBleHBsaWNpdGx5IGRlc3Ryb3llZCBzaW5jZSBpdCBpc24ndCBhIFdTX0NISUxELgot
ICAgIGlmICg6OklzV2luZG93KG1fdG9vbFRpcFdpbmRvdykpCi0gICAgICAgIDo6RGVzdHJveVdp
bmRvdyhtX3Rvb2xUaXBXaW5kb3cpOwotfQotCi12b2lkIFdlYlZpZXc6OmluaXRpYWxpemUoKQot
ewotICAgIDo6UmVnaXN0ZXJEcmFnRHJvcChtX3dpbmRvdywgdGhpcyk7Ci0KLSAgICBpZiAoc2hv
dWxkSW5pdGlhbGl6ZVRyYWNrUG9pbnRIYWNrKCkpIHsKLSAgICAgICAgLy8gSWYgd2UgZGV0ZWN0
ZWQgYSByZWdpc3RyeSBrZXkgYmVsb25naW5nIHRvIGEgVHJhY2tQb2ludCBkcml2ZXIsIHRoZW4g
Y3JlYXRlIGZha2UKLSAgICAgICAgLy8gc2Nyb2xsYmFycywgc28gdGhlIFdlYlZpZXcgd2lsbCBy
ZWNlaXZlIFdNX1ZTQ1JPTEwgYW5kIFdNX0hTQ1JPTEwgbWVzc2FnZXMuCi0gICAgICAgIC8vIFdl
IGNyZWF0ZSBhbiBpbnZpc2libGUgdmVydGljYWwgc2Nyb2xsYmFyIGFuZCBhbiBpbnZpc2libGUg
aG9yaXpvbnRhbCBzY3JvbGxiYXIgdG8gYWxsb3cKLSAgICAgICAgLy8gZm9yIHJlY2VpdmluZyBi
b3RoIHR5cGVzIG9mIG1lc3NhZ2VzLgotICAgICAgICA6OkNyZWF0ZVdpbmRvdyhURVhUKCJTQ1JP
TExCQVIiKSwgVEVYVCgiRkFLRVRSQUNLUE9JTlRIU0NST0xMQkFSIiksIFdTX0NISUxEIHwgV1Nf
VklTSUJMRSB8IFNCU19IT1JaLCAwLCAwLCAwLCAwLCBtX3dpbmRvdywgMCwgaW5zdGFuY2VIYW5k
bGUoKSwgMCk7Ci0gICAgICAgIDo6Q3JlYXRlV2luZG93KFRFWFQoIlNDUk9MTEJBUiIpLCBURVhU
KCJGQUtFVFJBQ0tQT0lOVFZTQ1JPTExCQVIiKSwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgU0JT
X1ZFUlQsIDAsIDAsIDAsIDAsIG1fd2luZG93LCAwLCBpbnN0YW5jZUhhbmRsZSgpLCAwKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZVVuZG9DbGllbnQoY29uc3QgV0tWaWV3
VW5kb0NsaWVudCogY2xpZW50KQotewotICAgIG1fdW5kb0NsaWVudC5pbml0aWFsaXplKGNsaWVu
dCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0UGFyZW50V2luZG93KEhXTkQgcGFyZW50V2luZG93
KQotewotICAgIGlmIChtX3dpbmRvdykgewotICAgICAgICAvLyBJZiB0aGUgaG9zdCB3aW5kb3cg
aGFzbid0IGNoYW5nZWQsIGJhaWwuCi0gICAgICAgIGlmICg6OkdldFBhcmVudChtX3dpbmRvdykg
PT0gcGFyZW50V2luZG93KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAocGFyZW50
V2luZG93KQotICAgICAgICAgICAgOjpTZXRQYXJlbnQobV93aW5kb3csIHBhcmVudFdpbmRvdyk7
Ci0gICAgICAgIGVsc2UgaWYgKCFtX2lzQmVpbmdEZXN0cm95ZWQpIHsKLSAgICAgICAgICAgIC8v
IFR1cm4gdGhlIFdlYlZpZXcgaW50byBhIG1lc3NhZ2Utb25seSB3aW5kb3cgc28gaXQgd2lsbCBu
byBsb25nZXIgYmUgYSBjaGlsZCBvZiB0aGUKLSAgICAgICAgICAgIC8vIG9sZCBwYXJlbnQgd2lu
ZG93IGFuZCB3aWxsIGJlIGhpZGRlbiBmcm9tIHNjcmVlbi4gV2Ugb25seSBkbyB0aGlzIHdoZW4K
LSAgICAgICAgICAgIC8vIGlzQmVpbmdEZXN0cm95ZWQoKSBpcyBmYWxzZSBiZWNhdXNlIGRvaW5n
IHRoaXMgd2hpbGUgaGFuZGxpbmcgV01fREVTVFJPWSBjYW4gbGVhdmUKLSAgICAgICAgICAgIC8v
IG1fd2luZG93IGluIGEgd2VpcmQgc3RhdGUgKHNlZSA8aHR0cDovL3dlYmtpdC5vcmcvYi8yOTMz
Nz4pLgotICAgICAgICAgICAgOjpTZXRQYXJlbnQobV93aW5kb3csIEhXTkRfTUVTU0FHRSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB3aW5kb3dBbmNlc3RyeURpZENoYW5nZSgpOwotfQotCi1z
dGF0aWMgSFdORCBmaW5kVG9wTGV2ZWxQYXJlbnRXaW5kb3coSFdORCB3aW5kb3cpCi17Ci0gICAg
aWYgKCF3aW5kb3cpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSFdORCBjdXJyZW50ID0gd2lu
ZG93OwotICAgIGZvciAoSFdORCBwYXJlbnQgPSBHZXRQYXJlbnQoY3VycmVudCk7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBwYXJlbnQsIHBhcmVudCA9IEdldFBhcmVudChwYXJlbnQpKSB7Ci0gICAgICAg
IGlmICghcGFyZW50IHx8ICEoR2V0V2luZG93TG9uZ1B0cihjdXJyZW50LCBHV0xfU1RZTEUpICYg
KFdTX1BPUFVQIHwgV1NfQ0hJTEQpKSkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50OwotICAg
IH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBX
ZWJWaWV3Ojp3aW5kb3dBbmNlc3RyeURpZENoYW5nZSgpCi17Ci0gICAgSFdORCBuZXdUb3BMZXZl
bFBhcmVudFdpbmRvdzsKLSAgICBpZiAobV93aW5kb3cpCi0gICAgICAgIG5ld1RvcExldmVsUGFy
ZW50V2luZG93ID0gZmluZFRvcExldmVsUGFyZW50V2luZG93KG1fd2luZG93KTsKLSAgICBlbHNl
IHsKLSAgICAgICAgLy8gVGhlcmUncyBubyBwb2ludCBpbiB0cmFja2luZyBhY3RpdmUgc3RhdGUg
Y2hhbmdlcyBvZiBvdXIgcGFyZW50IHdpbmRvdyBpZiB3ZSBkb24ndCBoYXZlCi0gICAgICAgIC8v
IGEgd2luZG93IG91cnNlbHZlcy4KLSAgICAgICAgbmV3VG9wTGV2ZWxQYXJlbnRXaW5kb3cgPSAw
OwotICAgIH0KLQotICAgIGlmIChuZXdUb3BMZXZlbFBhcmVudFdpbmRvdyA9PSBtX3RvcExldmVs
UGFyZW50V2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV90b3BMZXZlbFBhcmVu
dFdpbmRvdykKLSAgICAgICAgV2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjpyZW1vdmVMaXN0ZW5l
cihtX3RvcExldmVsUGFyZW50V2luZG93LCB0aGlzKTsKLQotICAgIG1fdG9wTGV2ZWxQYXJlbnRX
aW5kb3cgPSBuZXdUb3BMZXZlbFBhcmVudFdpbmRvdzsKLQotICAgIGlmIChtX3RvcExldmVsUGFy
ZW50V2luZG93KQotICAgICAgICBXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6OmFkZExpc3RlbmVy
KG1fdG9wTGV2ZWxQYXJlbnRXaW5kb3csIHRoaXMpOwotCi0gICAgdXBkYXRlQWN0aXZlU3RhdGUo
KTsKLX0KLQotTFJFU1VMVCBXZWJWaWV3Ojpvbk1vdXNlRXZlbnQoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wmIGhhbmRsZWQpCi17Ci0g
ICAgTmF0aXZlV2ViTW91c2VFdmVudCBtb3VzZUV2ZW50ID0gTmF0aXZlV2ViTW91c2VFdmVudCho
V25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgbV93YXNBY3RpdmF0ZWRCeU1vdXNlRXZlbnQp
OwotICAgIHNldFdhc0FjdGl2YXRlZEJ5TW91c2VFdmVudChmYWxzZSk7Ci0gICAgCi0gICAgc3dp
dGNoIChtZXNzYWdlKSB7Ci0gICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKLSAgICBjYXNlIFdNX01C
VVRUT05ET1dOOgotICAgIGNhc2UgV01fUkJVVFRPTkRPV046Ci0gICAgICAgIDo6U2V0Rm9jdXMo
bV93aW5kb3cpOwotICAgICAgICA6OlNldENhcHR1cmUobV93aW5kb3cpOwotICAgICAgICBicmVh
azsgCi0gICAgY2FzZSBXTV9MQlVUVE9OVVA6Ci0gICAgY2FzZSBXTV9NQlVUVE9OVVA6Ci0gICAg
Y2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgIDo6UmVsZWFzZUNhcHR1cmUoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBXTV9NT1VTRU1PVkU6Ci0gICAgICAgIHN0YXJ0VHJhY2tpbmdNb3Vz
ZUxlYXZlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV01fTU9VU0VMRUFWRToKLSAgICAg
ICAgc3RvcFRyYWNraW5nTW91c2VMZWF2ZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdN
X0xCVVRUT05EQkxDTEs6Ci0gICAgY2FzZSBXTV9NQlVUVE9OREJMQ0xLOgotICAgIGNhc2UgV01f
UkJVVFRPTkRCTENMSzoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgbV9wYWdlLT5oYW5kbGVNb3VzZUV2ZW50
KG1vdXNlRXZlbnQpOwotCi0gICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LUxSRVNVTFQgV2ViVmlldzo6b25XaGVlbEV2ZW50KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBX
UEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBib29sJiBoYW5kbGVkKQotewotICAgIE5hdGl2
ZVdlYldoZWVsRXZlbnQgd2hlZWxFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7
Ci0gICAgaWYgKHdoZWVsRXZlbnQuY29udHJvbEtleSgpKSB7Ci0gICAgICAgIC8vIFdlIGRvIG5v
dCB3YW50IFdlYktpdCB0byBoYW5kbGUgQ29udHJvbCArIFdoZWVsLCB0aGlzIHNob3VsZCBiZSBo
YW5kbGVkIGJ5IHRoZSBjbGllbnQgYXBwbGljYXRpb24KLSAgICAgICAgLy8gdG8gem9vbSB0aGUg
cGFnZS4KLSAgICAgICAgaGFuZGxlZCA9IGZhbHNlOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICBtX3BhZ2UtPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci0KLSAgICBoYW5k
bGVkID0gdHJ1ZTsKLSAgICByZXR1cm4gMDsKLX0KLQotTFJFU1VMVCBXZWJWaWV3Ojpvbkhvcml6
b250YWxTY3JvbGwoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJB
TSBsUGFyYW0sIGJvb2wmIGhhbmRsZWQpCi17Ci0gICAgU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
bjsKLSAgICBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eTsKLSAgICBzd2l0Y2ggKExPV09S
RCh3UGFyYW0pKSB7Ci0gICAgY2FzZSBTQl9MSU5FTEVGVDoKLSAgICAgICAgZ3JhbnVsYXJpdHkg
PSBTY3JvbGxCeUxpbmU7Ci0gICAgICAgIGRpcmVjdGlvbiA9IFNjcm9sbExlZnQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU0JfTElORVJJR0hUOgotICAgICAgICBncmFudWxhcml0eSA9IFNj
cm9sbEJ5TGluZTsKLSAgICAgICAgZGlyZWN0aW9uID0gU2Nyb2xsUmlnaHQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU0JfUEFHRUxFRlQ6Ci0gICAgICAgIGdyYW51bGFyaXR5ID0gU2Nyb2xs
QnlEb2N1bWVudDsKLSAgICAgICAgZGlyZWN0aW9uID0gU2Nyb2xsTGVmdDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBTQl9QQUdFUklHSFQ6Ci0gICAgICAgIGdyYW51bGFyaXR5ID0gU2Nyb2xs
QnlEb2N1bWVudDsKLSAgICAgICAgZGlyZWN0aW9uID0gU2Nyb2xsUmlnaHQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgbV9wYWdlLT5zY3JvbGxCeShkaXJlY3Rpb24sIGdyYW51bGFy
aXR5KTsKLQotICAgIGhhbmRsZWQgPSB0cnVlOwotICAgIHJldHVybiAwOwotfQotCi1MUkVTVUxU
IFdlYlZpZXc6Om9uVmVydGljYWxTY3JvbGwoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJB
TSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wmIGhhbmRsZWQpCi17Ci0gICAgU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbjsKLSAgICBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eTsKLSAg
ICBzd2l0Y2ggKExPV09SRCh3UGFyYW0pKSB7Ci0gICAgY2FzZSBTQl9MSU5FRE9XTjoKLSAgICAg
ICAgZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxpbmU7Ci0gICAgICAgIGRpcmVjdGlvbiA9IFNjcm9s
bERvd247Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0JfTElORVVQOgotICAgICAgICBncmFu
dWxhcml0eSA9IFNjcm9sbEJ5TGluZTsKLSAgICAgICAgZGlyZWN0aW9uID0gU2Nyb2xsVXA7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0JfUEFHRURPV046Ci0gICAgICAgIGdyYW51bGFyaXR5
ID0gU2Nyb2xsQnlEb2N1bWVudDsKLSAgICAgICAgZGlyZWN0aW9uID0gU2Nyb2xsRG93bjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTQl9QQUdFVVA6Ci0gICAgICAgIGdyYW51bGFyaXR5ID0g
U2Nyb2xsQnlEb2N1bWVudDsKLSAgICAgICAgZGlyZWN0aW9uID0gU2Nyb2xsVXA7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgbV9wYWdlLT5zY3JvbGxCeShkaXJlY3Rpb24sIGdyYW51
bGFyaXR5KTsKLQotICAgIGhhbmRsZWQgPSB0cnVlOwotICAgIHJldHVybiAwOwotfQotCi1MUkVT
VUxUIFdlYlZpZXc6Om9uR2VzdHVyZU5vdGlmeShIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BB
UkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSwgYm9vbCYgaGFuZGxlZCkKLXsKLSAgICAvLyBXZSBz
aG91bGRuJ3QgYmUgZ2V0dGluZyBhbnkgZ2VzdHVyZSBtZXNzYWdlcyB3aXRob3V0IFNldEdlc3R1
cmVDb25maWcgc29mdC1saW5raW5nIGNvcnJlY3RseS4KLSAgICBBU1NFUlQoU2V0R2VzdHVyZUNv
bmZpZ1B0cigpKTsKLQotICAgIEdFU1RVUkVOT1RJRllTVFJVQ1QqIGduID0gcmVpbnRlcnByZXRf
Y2FzdDxHRVNUVVJFTk9USUZZU1RSVUNUKj4obFBhcmFtKTsKLQotICAgIFBPSU5UIGxvY2FsUG9p
bnQgPSB7IGduLT5wdHNMb2NhdGlvbi54LCBnbi0+cHRzTG9jYXRpb24ueSB9OwotICAgIDo6U2Ny
ZWVuVG9DbGllbnQobV93aW5kb3csICZsb2NhbFBvaW50KTsKLQotICAgIGJvb2wgY2FuUGFuID0g
bV9wYWdlLT5nZXN0dXJlV2lsbEJlZ2luKGxvY2FsUG9pbnQpOwotCi0gICAgRFdPUkQgZHdQYW5X
YW50ID0gR0NfUEFOIHwgR0NfUEFOX1dJVEhfSU5FUlRJQSB8IEdDX1BBTl9XSVRIX0dVVFRFUjsK
LSAgICBEV09SRCBkd1BhbkJsb2NrID0gR0NfUEFOX1dJVEhfU0lOR0xFX0ZJTkdFUl9IT1JJWk9O
VEFMTFk7Ci0gICAgaWYgKGNhblBhbikKLSAgICAgICAgZHdQYW5XYW50IHw9IEdDX1BBTl9XSVRI
X1NJTkdMRV9GSU5HRVJfVkVSVElDQUxMWTsKLSAgICBlbHNlCi0gICAgICAgIGR3UGFuQmxvY2sg
fD0gR0NfUEFOX1dJVEhfU0lOR0xFX0ZJTkdFUl9WRVJUSUNBTExZOwotCi0gICAgR0VTVFVSRUNP
TkZJRyBnYyA9IHsgR0lEX1BBTiwgZHdQYW5XYW50LCBkd1BhbkJsb2NrIH07Ci0gICAgcmV0dXJu
IFNldEdlc3R1cmVDb25maWdQdHIoKShtX3dpbmRvdywgMCwgMSwgJmdjLCBzaXplb2YoZ2MpKTsK
LX0KLQotTFJFU1VMVCBXZWJWaWV3Ojpvbkdlc3R1cmUoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2Us
IFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wmIGhhbmRsZWQpCi17Ci0gICAgQVNT
RVJUKEdldEdlc3R1cmVJbmZvUHRyKCkpOwotICAgIEFTU0VSVChDbG9zZUdlc3R1cmVJbmZvSGFu
ZGxlUHRyKCkpOwotICAgIEFTU0VSVChVcGRhdGVQYW5uaW5nRmVlZGJhY2tQdHIoKSk7Ci0gICAg
QVNTRVJUKEJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkpOwotICAgIEFTU0VSVChFbmRQYW5uaW5n
RmVlZGJhY2tQdHIoKSk7Ci0KLSAgICBpZiAoIUdldEdlc3R1cmVJbmZvUHRyKCkgfHwgIUNsb3Nl
R2VzdHVyZUluZm9IYW5kbGVQdHIoKSB8fCAhVXBkYXRlUGFubmluZ0ZlZWRiYWNrUHRyKCkgfHwg
IUJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgfHwgIUVuZFBhbm5pbmdGZWVkYmFja1B0cigpKSB7
Ci0gICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgSEdFU1RVUkVJTkZPIGdlc3R1cmVIYW5kbGUgPSByZWludGVycHJldF9jYXN0PEhHRVNUVVJF
SU5GTz4obFBhcmFtKTsKLSAgICBHRVNUVVJFSU5GTyBnaSA9IHswfTsKLSAgICBnaS5jYlNpemUg
PSBzaXplb2YoR0VTVFVSRUlORk8pOwotCi0gICAgaWYgKCFHZXRHZXN0dXJlSW5mb1B0cigpKGdl
c3R1cmVIYW5kbGUsICZnaSkpIHsKLSAgICAgICAgaGFuZGxlZCA9IGZhbHNlOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGdpLmR3SUQpIHsKLSAgICBjYXNlIEdJRF9C
RUdJTjoKLSAgICAgICAgbV9sYXN0UGFuWCA9IGdpLnB0c0xvY2F0aW9uLng7Ci0gICAgICAgIG1f
bGFzdFBhblkgPSBnaS5wdHNMb2NhdGlvbi55OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdJ
RF9FTkQ6Ci0gICAgICAgIG1fcGFnZS0+Z2VzdHVyZURpZEVuZCgpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdJRF9QQU46IHsKLSAgICAgICAgaW50IGN1cnJlbnRYID0gZ2kucHRzTG9jYXRp
b24ueDsKLSAgICAgICAgaW50IGN1cnJlbnRZID0gZ2kucHRzTG9jYXRpb24ueTsKLQotICAgICAg
ICAvLyBSZXZlcnNlIHRoZSBjYWxjdWxhdGlvbnMgYmVjYXVzZSBtb3ZpbmcgeW91ciBmaW5nZXJz
IHVwIHNob3VsZCBtb3ZlIHRoZSBzY3JlZW4gZG93biwgYW5kCi0gICAgICAgIC8vIHZpY2UtdmVy
c2EuCi0gICAgICAgIGludCBkZWx0YVggPSBtX2xhc3RQYW5YIC0gY3VycmVudFg7Ci0gICAgICAg
IGludCBkZWx0YVkgPSBtX2xhc3RQYW5ZIC0gY3VycmVudFk7Ci0KLSAgICAgICAgbV9sYXN0UGFu
WCA9IGN1cnJlbnRYOwotICAgICAgICBtX2xhc3RQYW5ZID0gY3VycmVudFk7Ci0KLSAgICAgICAg
Ly8gQ2FsY3VsYXRlIHRoZSBvdmVycGFuIGZvciB3aW5kb3cgYm91bmNlLgotICAgICAgICBtX292
ZXJQYW5ZIC09IGRlbHRhWTsKLQotICAgICAgICBpZiAoZGVsdGFYIHx8IGRlbHRhWSkKLSAgICAg
ICAgICAgIG1fcGFnZS0+Z2VzdHVyZURpZFNjcm9sbChJbnRTaXplKGRlbHRhWCwgZGVsdGFZKSk7
Ci0KLSAgICAgICAgaWYgKGdpLmR3RmxhZ3MgJiBHRl9CRUdJTikgewotICAgICAgICAgICAgQmVn
aW5QYW5uaW5nRmVlZGJhY2tQdHIoKShtX3dpbmRvdyk7Ci0gICAgICAgICAgICBtX2dlc3R1cmVS
ZWFjaGVkU2Nyb2xsaW5nTGltaXQgPSBmYWxzZTsKLSAgICAgICAgICAgIG1fb3ZlclBhblkgPSAw
OwotICAgICAgICB9IGVsc2UgaWYgKGdpLmR3RmxhZ3MgJiBHRl9FTkQpIHsKLSAgICAgICAgICAg
IEVuZFBhbm5pbmdGZWVkYmFja1B0cigpKG1fd2luZG93LCB0cnVlKTsKLSAgICAgICAgICAgIG1f
b3ZlclBhblkgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgaG9y
aXpvbnRhbCB3aW5kb3cgYm91bmNlIC0gPGh0dHA6Ly93ZWJraXQub3JnL2IvNTgwNjg+LgotICAg
ICAgICAvLyBGSVhNRTogV2luZG93IEJvdW5jZSBkb2Vzbid0IHVuZG8gdW50aWwgdXNlciByZWxl
YXNlcyB0aGVpciBmaW5nZXIgLSA8aHR0cDovL3dlYmtpdC5vcmcvYi81ODA2OT4uCi0KLSAgICAg
ICAgaWYgKG1fZ2VzdHVyZVJlYWNoZWRTY3JvbGxpbmdMaW1pdCkKLSAgICAgICAgICAgIFVwZGF0
ZVBhbm5pbmdGZWVkYmFja1B0cigpKG1fd2luZG93LCAwLCBtX292ZXJQYW5ZLCBnaS5kd0ZsYWdz
ICYgR0ZfSU5FUlRJQSk7Ci0KLSAgICAgICAgQ2xvc2VHZXN0dXJlSW5mb0hhbmRsZVB0cigpKGdl
c3R1cmVIYW5kbGUpOwotCi0gICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8g
SWYgd2UgZ2V0IHRvIHRoaXMgcG9pbnQsIHRoZSBnZXN0dXJlIGhhcyBub3QgYmVlbiBoYW5kbGVk
LiBXZSBmb3J3YXJkCi0gICAgLy8gdGhlIGNhbGwgdG8gRGVmV2luZG93UHJvYyBieSByZXR1cm5p
bmcgZmFsc2UsIGFuZCB3ZSBkb24ndCBuZWVkIHRvIAotICAgIC8vIHRvIGNhbGwgQ2xvc2VHZXN0
dXJlSW5mb0hhbmRsZS4gCi0gICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9s
aWJyYXJ5L2RkMzUzMjI4KFZTLjg1KS5hc3B4Ci0gICAgaGFuZGxlZCA9IGZhbHNlOwotICAgIHJl
dHVybiAwOwotfQotCi1MUkVTVUxUIFdlYlZpZXc6Om9uS2V5RXZlbnQoSFdORCBoV25kLCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wmIGhhbmRsZWQpCi17
Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIC8vIFRyYXAgdGhlIEVTQyBrZXkgd2hl
biBpbiBmdWxsIHNjcmVlbiBtb2RlLgotICAgIGlmIChtZXNzYWdlID09IFdNX0tFWURPV04gJiYg
d1BhcmFtID09IFZLX0VTQ0FQRSAmJiBtX2Z1bGxTY3JlZW5Db250cm9sbGVyICYmIG1fZnVsbFNj
cmVlbkNvbnRyb2xsZXItPmlzRnVsbFNjcmVlbigpKSB7Ci0gICAgICAgIG1fZnVsbFNjcmVlbkNv
bnRyb2xsZXItPmV4aXRGdWxsU2NyZWVuKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0jZW5kaWYKLQotICAgIG1fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXli
b2FyZEV2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKSk7Ci0KLSAgICAvLyBXZSBj
bGFpbSBoZXJlIHRvIGFsd2F5cyBoYXZlIGhhbmRsZWQgdGhlIGV2ZW50LiBJZiB0aGUgZXZlbnQg
aXMgbm90IGluIGZhY3QgaGFuZGxlZCwgd2Ugd2lsbAotICAgIC8vIGZpbmQgb3V0IGxhdGVyIGlu
IGRpZE5vdEhhbmRsZUtleUV2ZW50LgotICAgIGhhbmRsZWQgPSB0cnVlOwotICAgIHJldHVybiAw
OwotfQotCi1zdGF0aWMgdm9pZCBkcmF3UGFnZUJhY2tncm91bmQoSERDIGRjLCBjb25zdCBXZWJQ
YWdlUHJveHkqIHBhZ2UsIGNvbnN0IFJFQ1QmIHJlY3QpCi17Ci0gICAgaWYgKCFwYWdlLT5kcmF3
c0JhY2tncm91bmQoKSB8fCBwYWdlLT5kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICA6OkZpbGxSZWN0KGRjLCAmcmVjdCwgcmVpbnRlcnByZXRfY2Fz
dDxIQlJVU0g+KENPTE9SX1dJTkRPVyArIDEpKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpwYWludChI
REMgaGRjLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgbV9wYWdlLT5lbmRQcmlu
dGluZygpOwotICAgIGlmIChEcmF3aW5nQXJlYVByb3h5SW1wbCogZHJhd2luZ0FyZWEgPSBzdGF0
aWNfY2FzdDxEcmF3aW5nQXJlYVByb3h5SW1wbCo+KG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkpIHsK
LSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwb3J0IFdlYktpdDEncyByZWN0IGNvYWxlc2Np
bmcgbG9naWMgaGVyZS4KLSAgICAgICAgUmVnaW9uIHVucGFpbnRlZFJlZ2lvbjsKLSAgICAgICAg
ZHJhd2luZ0FyZWEtPnBhaW50KGhkYywgZGlydHlSZWN0LCB1bnBhaW50ZWRSZWdpb24pOwotCi0g
ICAgICAgIFZlY3RvcjxJbnRSZWN0PiB1bnBhaW50ZWRSZWN0cyA9IHVucGFpbnRlZFJlZ2lvbi5y
ZWN0cygpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVucGFpbnRlZFJlY3RzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBSRUNUIHdpblJlY3QgPSB1bnBhaW50ZWRSZWN0c1tp
XTsKLSAgICAgICAgICAgIGRyYXdQYWdlQmFja2dyb3VuZChoZGMsIG1fcGFnZS5nZXQoKSwgdW5w
YWludGVkUmVjdHNbaV0pOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIGRyYXdQYWdl
QmFja2dyb3VuZChoZGMsIG1fcGFnZS5nZXQoKSwgZGlydHlSZWN0KTsKLQotICAgIG1fcGFnZS0+
ZGlkRHJhdygpOwotfQotCi1zdGF0aWMgdm9pZCBmbGFzaFJlY3RzKEhEQyBkYywgY29uc3QgSW50
UmVjdCByZWN0c1tdLCBzaXplX3QgcmVjdENvdW50LCBIQlJVU0ggYnJ1c2gpCi17Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZWN0Q291bnQ7ICsraSkgewotICAgICAgICBSRUNUIHdpblJl
Y3QgPSByZWN0c1tpXTsKLSAgICAgICAgOjpGaWxsUmVjdChkYywgJndpblJlY3QsIGJydXNoKTsK
LSAgICB9Ci0KLSAgICA6OkdkaUZsdXNoKCk7Ci0gICAgOjpTbGVlcCg1MCk7Ci19Ci0KLXN0YXRp
YyBPd25QdHI8SEJSVVNIPiBjcmVhdGVCcnVzaChjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UHRyKDo6Q3JlYXRlU29saWRCcnVzaChSR0IoY29sb3IucmVkKCksIGNvbG9y
LmdyZWVuKCksIGNvbG9yLmJsdWUoKSkpKTsKLX0KLQotTFJFU1VMVCBXZWJWaWV3OjpvblBhaW50
RXZlbnQoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5k
bGVkKQotewotICAgIC8vIFVwZGF0ZSBjaGlsZCB3aW5kb3dzIG5vdyBzbyB0aGF0IGFueSBhcmVh
cyBvZiBvdXIgd2luZG93IHRoZXkgcmV2ZWFsIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlCi0gICAg
Ly8gaW52YWxpZCByZWdpb24gdGhhdCA6OkJlZ2luUGFpbnQgc2Vlcy4KLSAgICB1cGRhdGVDaGls
ZFdpbmRvd0dlb21ldHJpZXMoKTsKLQotICAgIFBBSU5UU1RSVUNUIHBhaW50U3RydWN0OwotICAg
IEhEQyBoZGMgPSA6OkJlZ2luUGFpbnQobV93aW5kb3csICZwYWludFN0cnVjdCk7Ci0KLSAgICBp
ZiAoV2ViUGFnZVByb3h5OjpkZWJ1Z1BhaW50RmxhZ3MoKSAmIGtXS0RlYnVnRmxhc2hWaWV3VXBk
YXRlcykgewotICAgICAgICBzdGF0aWMgSEJSVVNIIGJydXNoID0gY3JlYXRlQnJ1c2goV2ViUGFn
ZVByb3h5Ojp2aWV3VXBkYXRlc0ZsYXNoQ29sb3IoKS5yZ2IoKSkubGVha1B0cigpOwotICAgICAg
ICBJbnRSZWN0IHJlY3QgPSBwYWludFN0cnVjdC5yY1BhaW50OwotICAgICAgICBmbGFzaFJlY3Rz
KGhkYywgJnJlY3QsIDEsIGJydXNoKTsKLSAgICB9Ci0KLSAgICBwYWludChoZGMsIHBhaW50U3Ry
dWN0LnJjUGFpbnQpOwotCi0gICAgOjpFbmRQYWludChtX3dpbmRvdywgJnBhaW50U3RydWN0KTsK
LQotICAgIGhhbmRsZWQgPSB0cnVlOwotICAgIHJldHVybiAwOwotfQotCi1MUkVTVUxUIFdlYlZp
ZXc6Om9uUHJpbnRDbGllbnRFdmVudChIV05EIGhXbmQsIFVJTlQsIFdQQVJBTSB3UGFyYW0sIExQ
QVJBTSwgYm9vbCYgaGFuZGxlZCkKLXsKLSAgICBIREMgaGRjID0gcmVpbnRlcnByZXRfY2FzdDxI
REM+KHdQYXJhbSk7Ci0gICAgUkVDVCB3aW5SZWN0OwotICAgIDo6R2V0Q2xpZW50UmVjdChoV25k
LCAmd2luUmVjdCk7Ci0KLSAgICAvLyBUd2lkZGluZyB0aGUgdmlzaWJpbGl0eSBmbGFncyB0ZWxs
cyB0aGUgRHJhd2luZ0FyZWEgdG8gcmVzdW1lIHBhaW50aW5nLiBSaWdodCBub3csIHRoZQotICAg
IC8vIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSB2aWV3IG9ubHkgYWZmZWN0cyB3aGV0aGVyIG9y
IG5vdCBwYWludGluZyBoYXBwZW5zLCBidXQgaW4gdGhlCi0gICAgLy8gZnV0dXJlIGl0IGNvdWxk
IGFmZmVjdCBtb3JlLCB3aGljaCB3ZSB3b3VsZG4ndCB3YW50IHRvIHRvdWNoIGhlcmUuCi0KLSAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IG9mIHRlbGxpbmcgdGhlIFdl
YlByb2Nlc3MgdG8gZHJhdyBldmVuIGlmIHdlJ3JlCi0gICAgLy8gaW52aXNpYmxlIHRoYW4gdHdp
ZGRsaW5nIHRoZSB2aXNpYmlsaXR5IGZsYWcuCi0KLSAgICBib29sIHdhc1Zpc2libGUgPSBpc1Zp
ZXdWaXNpYmxlKCk7Ci0gICAgaWYgKCF3YXNWaXNpYmxlKQotICAgICAgICBzZXRJc1Zpc2libGUo
dHJ1ZSk7Ci0KLSAgICBwYWludChoZGMsIHdpblJlY3QpOwotCi0gICAgaWYgKCF3YXNWaXNpYmxl
KQotICAgICAgICBzZXRJc1Zpc2libGUoZmFsc2UpOwotCi0gICAgaGFuZGxlZCA9IHRydWU7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUxSRVNVTFQgV2ViVmlldzo6b25TaXplRXZlbnQoSFdORCwgVUlO
VCwgV1BBUkFNLCBMUEFSQU0gbFBhcmFtLCBib29sJiBoYW5kbGVkKQotewotICAgIGludCB3aWR0
aCA9IExPV09SRChsUGFyYW0pOwotICAgIGludCBoZWlnaHQgPSBISVdPUkQobFBhcmFtKTsKLQot
ICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5kcmF3aW5nQXJlYSgpKSB7Ci0gICAgICAgIG1fcGFn
ZS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCBtX25leHRS
ZXNpemVTY3JvbGxPZmZzZXQpOwotICAgICAgICBtX25leHRSZXNpemVTY3JvbGxPZmZzZXQgPSBJ
bnRTaXplKCk7Ci0gICAgfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAg
IGlmIChtX2xheWVySG9zdFdpbmRvdykKLSAgICAgICAgOjpNb3ZlV2luZG93KG1fbGF5ZXJIb3N0
V2luZG93LCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBGQUxTRSk7Ci0jZW5kaWYKLQotICAgIGhhbmRs
ZWQgPSB0cnVlOwotICAgIHJldHVybiAwOwotfQotCi1MUkVTVUxUIFdlYlZpZXc6Om9uV2luZG93
UG9zaXRpb25DaGFuZ2VkRXZlbnQoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0gbFBhcmFtLCBi
b29sJiBoYW5kbGVkKQotewotICAgIGlmIChyZWludGVycHJldF9jYXN0PFdJTkRPV1BPUyo+KGxQ
YXJhbSktPmZsYWdzICYgU1dQX1NIT1dXSU5ET1cpCi0gICAgICAgIHVwZGF0ZUFjdGl2ZVN0YXRl
U29vbigpOwotCi0gICAgaGFuZGxlZCA9IGZhbHNlOwotICAgIHJldHVybiAwOwotfQotCi1MUkVT
VUxUIFdlYlZpZXc6Om9uU2V0Rm9jdXNFdmVudChIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSBs
UGFyYW0sIGJvb2wmIGhhbmRsZWQpCi17Ci0gICAgbV9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2Uo
V2ViUGFnZVByb3h5OjpWaWV3SXNGb2N1c2VkKTsKLSAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotTFJFU1VMVCBXZWJWaWV3OjpvbktpbGxGb2N1c0V2ZW50KEhXTkQsIFVJ
TlQsIFdQQVJBTSwgTFBBUkFNIGxQYXJhbSwgYm9vbCYgaGFuZGxlZCkKLXsKLSAgICBtX3BhZ2Ut
PnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQpOwotICAgIGhh
bmRsZWQgPSB0cnVlOwotICAgIHJldHVybiAwOwotfQotCi1MUkVTVUxUIFdlYlZpZXc6Om9uVGlt
ZXJFdmVudChIV05EIGhXbmQsIFVJTlQsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSwgYm9vbCYgaGFu
ZGxlZCkKLXsKLSAgICBzd2l0Y2ggKHdQYXJhbSkgewotICAgIGNhc2UgVXBkYXRlQWN0aXZlU3Rh
dGVUaW1lcjoKLSAgICAgICAgOjpLaWxsVGltZXIoaFduZCwgVXBkYXRlQWN0aXZlU3RhdGVUaW1l
cik7Ci0gICAgICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGhhbmRsZWQgPSB0cnVlOwotICAgIHJldHVybiAwOwotfQotCi1MUkVTVUxUIFdlYlZp
ZXc6Om9uU2hvd1dpbmRvd0V2ZW50KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1Bh
cmFtLCBMUEFSQU0gbFBhcmFtLCBib29sJiBoYW5kbGVkKQotewotICAgIC8vIGxQYXJhbSBpcyAw
IHdoZW4gdGhlIG1lc3NhZ2UgaXMgc2VudCBiZWNhdXNlIG9mIGEgU2hvd1dpbmRvdyBjYWxsLgot
ICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBkb24ndCBnZXQgbm90aWZpZWQgd2hlbiBhbiBhbmNlc3Rv
ciB3aW5kb3cgaXMgaGlkZGVuIG9yIHNob3duLCB3ZSB3aWxsIGtlZXAKLSAgICAvLyBwYWludGlu
ZyBldmVuIHdoZW4gd2UgaGF2ZSBhIGhpZGRlbiBhbmNlc3Rvci4gPGh0dHA6Ly93ZWJraXQub3Jn
L2IvNTQxMDQ+Ci0gICAgaWYgKCFsUGFyYW0pCi0gICAgICAgIHNldElzVmlzaWJsZSh3UGFyYW0p
OwotCi0gICAgaGFuZGxlZCA9IGZhbHNlOwotICAgIHJldHVybiAwOwotfQotCi1MUkVTVUxUIFdl
YlZpZXc6Om9uU2V0Q3Vyc29yKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFt
LCBMUEFSQU0gbFBhcmFtLCBib29sJiBoYW5kbGVkKQotewotICAgIGlmICghbV9sYXN0Q3Vyc29y
U2V0KSB7Ci0gICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgOjpTZXRDdXJzb3IobV9sYXN0Q3Vyc29yU2V0KTsKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBXZWJWaWV3Ojp1cGRhdGVBY3RpdmVTdGF0ZSgpCi17Ci0gICAgbV9wYWdlLT52aWV3
U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwotfQotCi12
b2lkIFdlYlZpZXc6OnVwZGF0ZUFjdGl2ZVN0YXRlU29vbigpCi17Ci0gICAgLy8gVGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgV01fTkNBQ1RJVkFURSBtZXNzYWdl
LgotICAgIC8vIFdoaWxlIHByb2Nlc3NpbmcgV01fTkNBQ1RJVkFURSB3aGVuIHdlIGFyZSBiZWlu
ZyBkZWFjdGl2YXRlZCwgR2V0QWN0aXZlV2luZG93KCkgd2lsbAotICAgIC8vIHN0aWxsIHJldHVy
biBvdXIgd2luZG93LiBJZiB3ZSB3ZXJlIHRvIGNhbGwgdXBkYXRlQWN0aXZlU3RhdGUoKSBpbiB0
aGF0IGNhc2UsIHdlIHdvdWxkCi0gICAgLy8gd3JvbmdseSB0aGluayB0aGF0IHdlIGFyZSBzdGls
bCB0aGUgYWN0aXZlIHdpbmRvdy4gVG8gd29yayBhcm91bmQgdGhpcywgd2UgdXBkYXRlIG91cgot
ICAgIC8vIGFjdGl2ZSBzdGF0ZSBhZnRlciBhIDAtZGVsYXkgdGltZXIgZmlyZXMsIGF0IHdoaWNo
IHBvaW50IEdldEFjdGl2ZVdpbmRvdygpIHdpbGwgcmV0dXJuCi0gICAgLy8gdGhlIG5ld2x5LWFj
dGl2YXRlZCB3aW5kb3cuCi0KLSAgICA6OlNldFRpbWVyKG1fd2luZG93LCBVcGRhdGVBY3RpdmVT
dGF0ZVRpbWVyLCAwLCAwKTsKLX0KLQotc3RhdGljIGJvb2wgaW5pdENvbW1vbkNvbnRyb2xzKCkK
LXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoaGF2
ZUluaXRpYWxpemVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIElOSVRDT01NT05DT05U
Uk9MU0VYIGluaXQ7Ci0gICAgaW5pdC5kd1NpemUgPSBzaXplb2YoaW5pdCk7Ci0gICAgaW5pdC5k
d0lDQyA9IElDQ19UUkVFVklFV19DTEFTU0VTOwotICAgIGhhdmVJbml0aWFsaXplZCA9ICEhOjpJ
bml0Q29tbW9uQ29udHJvbHNFeCgmaW5pdCk7Ci0gICAgcmV0dXJuIGhhdmVJbml0aWFsaXplZDsK
LX0KLQotdm9pZCBXZWJWaWV3Ojppbml0aWFsaXplVG9vbFRpcFdpbmRvdygpCi17Ci0gICAgaWYg
KCFpbml0Q29tbW9uQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90b29sVGlw
V2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeChXU19FWF9UUkFOU1BBUkVOVCwgVE9PTFRJUFNfQ0xB
U1MsIDAsIFdTX1BPUFVQIHwgVFRTX05PUFJFRklYIHwgVFRTX0FMV0FZU1RJUCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFV
TFQsIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3dpbmRvdywgMCwgMCwgMCk7Ci0gICAgaWYgKCFtX3Rvb2xUaXBX
aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRPT0xJTkZPIGluZm8gPSB7MH07Ci0gICAg
aW5mby5jYlNpemUgPSBzaXplb2YoaW5mbyk7Ci0gICAgaW5mby51RmxhZ3MgPSBUVEZfSURJU0hX
TkQgfCBUVEZfU1VCQ0xBU1M7Ci0gICAgaW5mby51SWQgPSByZWludGVycHJldF9jYXN0PFVJTlRf
UFRSPihtX3dpbmRvdyk7Ci0KLSAgICA6OlNlbmRNZXNzYWdlKG1fdG9vbFRpcFdpbmRvdywgVFRN
X0FERFRPT0wsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBBUkFNPigmaW5mbykpOwotICAgIDo6U2Vu
ZE1lc3NhZ2UobV90b29sVGlwV2luZG93LCBUVE1fU0VUTUFYVElQV0lEVEgsIDAsIGtNYXhUb29s
VGlwV2lkdGgpOwotICAgIDo6U2V0V2luZG93UG9zKG1fdG9vbFRpcFdpbmRvdywgSFdORF9UT1As
IDAsIDAsIDAsIDAsIFNXUF9OT01PVkUgfCBTV1BfTk9TSVpFIHwgU1dQX05PQUNUSVZBVEUpOwot
fQotCi12b2lkIFdlYlZpZXc6OnN0YXJ0VHJhY2tpbmdNb3VzZUxlYXZlKCkKLXsKLSAgICBpZiAo
bV90cmFja2luZ01vdXNlTGVhdmUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3RyYWNraW5nTW91
c2VMZWF2ZSA9IHRydWU7Ci0KLSAgICBUUkFDS01PVVNFRVZFTlQgdHJhY2tNb3VzZUV2ZW50Owot
ICAgIHRyYWNrTW91c2VFdmVudC5jYlNpemUgPSBzaXplb2YoVFJBQ0tNT1VTRUVWRU5UKTsKLSAg
ICB0cmFja01vdXNlRXZlbnQuZHdGbGFncyA9IFRNRV9MRUFWRTsKLSAgICB0cmFja01vdXNlRXZl
bnQuaHduZFRyYWNrID0gbV93aW5kb3c7Ci0KLSAgICA6OlRyYWNrTW91c2VFdmVudCgmdHJhY2tN
b3VzZUV2ZW50KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzdG9wVHJhY2tpbmdNb3VzZUxlYXZlKCkK
LXsKLSAgICBpZiAoIW1fdHJhY2tpbmdNb3VzZUxlYXZlKQotICAgICAgICByZXR1cm47Ci0gICAg
bV90cmFja2luZ01vdXNlTGVhdmUgPSBmYWxzZTsKLQotICAgIFRSQUNLTU9VU0VFVkVOVCB0cmFj
a01vdXNlRXZlbnQ7Ci0gICAgdHJhY2tNb3VzZUV2ZW50LmNiU2l6ZSA9IHNpemVvZihUUkFDS01P
VVNFRVZFTlQpOwotICAgIHRyYWNrTW91c2VFdmVudC5kd0ZsYWdzID0gVE1FX0xFQVZFIHwgVE1F
X0NBTkNFTDsKLSAgICB0cmFja01vdXNlRXZlbnQuaHduZFRyYWNrID0gbV93aW5kb3c7Ci0KLSAg
ICA6OlRyYWNrTW91c2VFdmVudCgmdHJhY2tNb3VzZUV2ZW50KTsKLX0KLQotYm9vbCBXZWJWaWV3
OjpzaG91bGRJbml0aWFsaXplVHJhY2tQb2ludEhhY2soKQotewotICAgIHN0YXRpYyBib29sIHNo
b3VsZENyZWF0ZVNjcm9sbGJhcnM7Ci0gICAgc3RhdGljIGJvb2wgaGFzUnVuVHJhY2tQb2ludENo
ZWNrOwotCi0gICAgaWYgKGhhc1J1blRyYWNrUG9pbnRDaGVjaykKLSAgICAgICAgcmV0dXJuIHNo
b3VsZENyZWF0ZVNjcm9sbGJhcnM7Ci0KLSAgICBoYXNSdW5UcmFja1BvaW50Q2hlY2sgPSB0cnVl
OwotICAgIGNvbnN0IHdjaGFyX3QqIHRyYWNrUG9pbnRLZXlzW10gPSB7IAotICAgICAgICBMIlNv
ZnR3YXJlXFxMZW5vdm9cXFRyYWNrUG9pbnQiLAotICAgICAgICBMIlNvZnR3YXJlXFxMZW5vdm9c
XFVsdHJhTmF2IiwKLSAgICAgICAgTCJTb2Z0d2FyZVxcQWxwc1xcQXBvaW50XFxUcmFja1BvaW50
IiwKLSAgICAgICAgTCJTb2Z0d2FyZVxcU3luYXB0aWNzXFxTeW5UUEVuaFxcVWx0cmFOYXZVU0Ii
LAotICAgICAgICBMIlNvZnR3YXJlXFxTeW5hcHRpY3NcXFN5blRQRW5oXFxVbHRyYU5hdlBTMiIK
LSAgICB9OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHRy
YWNrUG9pbnRLZXlzKTsgKytpKSB7Ci0gICAgICAgIEhLRVkgdHJhY2tQb2ludEtleTsKLSAgICAg
ICAgaW50IHJlYWRLZXlSZXN1bHQgPSA6OlJlZ09wZW5LZXlFeFcoSEtFWV9DVVJSRU5UX1VTRVIs
IHRyYWNrUG9pbnRLZXlzW2ldLCAwLCBLRVlfUkVBRCwgJnRyYWNrUG9pbnRLZXkpOwotICAgICAg
ICA6OlJlZ0Nsb3NlS2V5KHRyYWNrUG9pbnRLZXkpOwotICAgICAgICBpZiAocmVhZEtleVJlc3Vs
dCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBzaG91bGRDcmVhdGVTY3JvbGxiYXJz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBzaG91bGRDcmVhdGVTY3JvbGxiYXJzOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHNob3VsZENyZWF0ZVNjcm9sbGJhcnM7Ci19Ci0K
LXZvaWQgV2ViVmlldzo6Y2xvc2UoKQotewotICAgIG1fdW5kb0NsaWVudC5pbml0aWFsaXplKDAp
OwotICAgIDo6UmV2b2tlRHJhZ0Ryb3AobV93aW5kb3cpOwotICAgIGlmIChtX3dpbmRvdykgewot
ICAgICAgICAvLyBXZSBjYW4ndCBjaGVjayBJc1dpbmRvdyhtX3dpbmRvdykgaGVyZSwgYmVjYXVz
ZSB0aGF0IHdpbGwgcmV0dXJuIHRydWUgZXZlbiB3aGlsZQotICAgICAgICAvLyB3ZSdyZSBhbHJl
YWR5IGhhbmRsaW5nIFdNX0RFU1RST1kuIFNvIHdlIGNoZWNrICFtX2lzQmVpbmdEZXN0cm95ZWQg
aW5zdGVhZC4KLSAgICAgICAgaWYgKCFtX2lzQmVpbmdEZXN0cm95ZWQpCi0gICAgICAgICAgICBE
ZXN0cm95V2luZG93KG1fd2luZG93KTsKLSAgICAgICAgLy8gRWl0aGVyIHdlIGp1c3QgZGVzdHJv
eWVkIG1fd2luZG93LCBvciBpdCdzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4g
RWl0aGVyCi0gICAgICAgIC8vIHdheSwgd2UgY2xlYXIgaXQgb3V0IHRvIG1ha2Ugc3VyZSB3ZSBk
b24ndCB0cnkgdG8gdXNlIGl0IGxhdGVyLgotICAgICAgICBtX3dpbmRvdyA9IDA7Ci0gICAgfQot
ICAgIHNldFBhcmVudFdpbmRvdygwKTsKLSAgICBtX3BhZ2UtPmNsb3NlKCk7Ci19Ci0KLS8vIFBh
Z2VDbGllbnQKLQotUGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBXZWJWaWV3OjpjcmVhdGVE
cmF3aW5nQXJlYVByb3h5KCkKLXsKLSAgICByZXR1cm4gRHJhd2luZ0FyZWFQcm94eUltcGw6OmNy
ZWF0ZShtX3BhZ2UuZ2V0KCkpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldFZpZXdOZWVkc0Rpc3Bs
YXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKLXsKLSAgICBSRUNUIHIgPSByZWN0Owot
ICAgIDo6SW52YWxpZGF0ZVJlY3QobV93aW5kb3csICZyLCBmYWxzZSk7Ci19Ci0KLXZvaWQgV2Vi
Vmlldzo6ZGlzcGxheVZpZXcoKQotewotICAgIDo6VXBkYXRlV2luZG93KG1fd2luZG93KTsKLX0K
LQotdm9pZCBXZWJWaWV3OjpzY3JvbGxWaWV3KGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNv
bnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICAvLyBGSVhNRTogQWN0dWFsbHkgc2Ny
b2xsIHRoZSB2aWV3IGNvbnRlbnRzLgotICAgIHNldFZpZXdOZWVkc0Rpc3BsYXkoc2Nyb2xsUmVj
dCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZl
Y3RvcjxJbnRSZWN0PiYgdXBkYXRlUmVjdHMpCi17Ci0gICAgc3RhdGljIEhCUlVTSCBicnVzaCA9
IGNyZWF0ZUJydXNoKFdlYlBhZ2VQcm94eTo6YmFja2luZ1N0b3JlVXBkYXRlc0ZsYXNoQ29sb3Io
KS5yZ2IoKSkubGVha1B0cigpOwotICAgIEhXbmREQyBkYyhtX3dpbmRvdyk7Ci0gICAgZmxhc2hS
ZWN0cyhkYywgdXBkYXRlUmVjdHMuZGF0YSgpLCB1cGRhdGVSZWN0cy5zaXplKCksIGJydXNoKTsK
LX0KLQotV2ViQ29yZTo6SW50U2l6ZSBXZWJWaWV3Ojp2aWV3U2l6ZSgpCi17Ci0gICAgUkVDVCBj
bGllbnRSZWN0OwotICAgIEdldENsaWVudFJlY3QobV93aW5kb3csICZjbGllbnRSZWN0KTsKLQot
ICAgIHJldHVybiBJbnRSZWN0KGNsaWVudFJlY3QpLnNpemUoKTsKLX0KLQotYm9vbCBXZWJWaWV3
Ojppc1ZpZXdXaW5kb3dBY3RpdmUoKQoteyAgICAKLSAgICBIV05EIGFjdGl2ZVdpbmRvdyA9IDo6
R2V0QWN0aXZlV2luZG93KCk7Ci0gICAgcmV0dXJuIChhY3RpdmVXaW5kb3cgJiYgbV90b3BMZXZl
bFBhcmVudFdpbmRvdyA9PSBmaW5kVG9wTGV2ZWxQYXJlbnRXaW5kb3coYWN0aXZlV2luZG93KSk7
Ci19Ci0KLWJvb2wgV2ViVmlldzo6aXNWaWV3Rm9jdXNlZCgpCi17Ci0gICAgcmV0dXJuIDo6R2V0
Rm9jdXMoKSA9PSBtX3dpbmRvdzsKLX0KLQotYm9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNpYmxlKCkK
LXsKLSAgICByZXR1cm4gbV9pc1Zpc2libGU7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aXNWaWV3SW5X
aW5kb3coKQotewotICAgIHJldHVybiBtX2lzSW5XaW5kb3c7Ci19Ci0KLXZvaWQgV2ViVmlldzo6
cGFnZUNsb3NlZCgpCi17Ci19Ci0KLXZvaWQgV2ViVmlldzo6cHJvY2Vzc0RpZENyYXNoKCkKLXsK
LSAgICB1cGRhdGVOYXRpdmVDdXJzb3IoKTsKLSAgICA6OkludmFsaWRhdGVSZWN0KG1fd2luZG93
LCAwLCBUUlVFKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpkaWRSZWxhdW5jaFByb2Nlc3MoKQotewot
ICAgIHVwZGF0ZU5hdGl2ZUN1cnNvcigpOwotICAgIDo6SW52YWxpZGF0ZVJlY3QobV93aW5kb3cs
IDAsIFRSVUUpOwotfQotCi12b2lkIFdlYlZpZXc6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgbmV3VG9vbFRpcCkKLXsKLSAgICBpZiAoIW1fdG9vbFRpcFdpbmRv
dykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFuZXdUb29sVGlwLmlzRW1wdHkoKSkgewot
ICAgICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIFN0cmluZzo6Y2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSBpcyBub3QgY29uc3QuCi0gICAgICAgIFN0cmluZyB0b29sVGlw
ID0gbmV3VG9vbFRpcDsKLQotICAgICAgICBUT09MSU5GTyBpbmZvID0gezB9OwotICAgICAgICBp
bmZvLmNiU2l6ZSA9IHNpemVvZihpbmZvKTsKLSAgICAgICAgaW5mby51RmxhZ3MgPSBUVEZfSURJ
U0hXTkQ7Ci0gICAgICAgIGluZm8udUlkID0gcmVpbnRlcnByZXRfY2FzdDxVSU5UX1BUUj4obV93
aW5kb3cpOwotICAgICAgICBpbmZvLmxwc3pUZXh0ID0gY29uc3RfY2FzdDxVQ2hhcio+KHRvb2xU
aXAuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7Ci0gICAgICAgIDo6U2VuZE1lc3Nh
Z2UobV90b29sVGlwV2luZG93LCBUVE1fVVBEQVRFVElQVEVYVCwgMCwgcmVpbnRlcnByZXRfY2Fz
dDxMUEFSQU0+KCZpbmZvKSk7Ci0gICAgfQotCi0gICAgOjpTZW5kTWVzc2FnZShtX3Rvb2xUaXBX
aW5kb3csIFRUTV9BQ1RJVkFURSwgIW5ld1Rvb2xUaXAuaXNFbXB0eSgpLCAwKTsKLX0KLQotSENV
UlNPUiBXZWJWaWV3OjpjdXJzb3JUb1Nob3coKSBjb25zdAotewotICAgIGlmICghbV9wYWdlLT5p
c1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gV2Ugb25seSBzaG93IHRoZSBv
dmVycmlkZSBjdXJzb3IgaWYgdGhlIGRlZmF1bHQgKGFycm93KSBjdXJzb3IgaXMgc2hvd2luZy4K
LSAgICBzdGF0aWMgSENVUlNPUiBhcnJvd0N1cnNvciA9IDo6TG9hZEN1cnNvcigwLCBJRENfQVJS
T1cpOwotICAgIGlmIChtX292ZXJyaWRlQ3Vyc29yICYmIG1fd2ViQ29yZUN1cnNvciA9PSBhcnJv
d0N1cnNvcikKLSAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVDdXJzb3I7Ci0KLSAgICByZXR1cm4g
bV93ZWJDb3JlQ3Vyc29yOwotfQotCi12b2lkIFdlYlZpZXc6OnVwZGF0ZU5hdGl2ZUN1cnNvcigp
Ci17Ci0gICAgbV9sYXN0Q3Vyc29yU2V0ID0gY3Vyc29yVG9TaG93KCk7Ci0gICAgaWYgKCFtX2xh
c3RDdXJzb3JTZXQpCi0gICAgICAgIHJldHVybjsKLSAgICA6OlNldEN1cnNvcihtX2xhc3RDdXJz
b3JTZXQpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJz
b3ImIGN1cnNvcikKLXsKLSAgICBpZiAoIWN1cnNvci5wbGF0Zm9ybUN1cnNvcigpLT5uYXRpdmVD
dXJzb3IoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd2ViQ29yZUN1cnNvciA9IGN1cnNvci5w
bGF0Zm9ybUN1cnNvcigpLT5uYXRpdmVDdXJzb3IoKTsKLSAgICB1cGRhdGVOYXRpdmVDdXJzb3Io
KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9v
bCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldE92ZXJy
aWRlQ3Vyc29yKEhDVVJTT1Igb3ZlcnJpZGVDdXJzb3IpCi17Ci0gICAgbV9vdmVycmlkZUN1cnNv
ciA9IG92ZXJyaWRlQ3Vyc29yOwotICAgIHVwZGF0ZU5hdGl2ZUN1cnNvcigpOwotfQotCi12b2lk
IFdlYlZpZXc6OnNldEluaXRpYWxGb2N1cyhib29sIGZvcndhcmQsIGJvb2wgaXNLZXlib2FyZEV2
ZW50VmFsaWQsIGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQotewotICAgIG1fcGFnZS0+
c2V0SW5pdGlhbEZvY3VzKGZvcndhcmQsIGlzS2V5Ym9hcmRFdmVudFZhbGlkLCBldmVudCk7Ci19
Ci0KLXZvaWQgV2ViVmlldzo6c2V0U2Nyb2xsT2Zmc2V0T25OZXh0UmVzaXplKGNvbnN0IEludFNp
emUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICAvLyBUaGUgbmV4dCB0aW1lIHdlIGdldCBhIFdNX1NJ
WkUgbWVzc2FnZSwgc2Nyb2xsIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50IGluIG9uU2l6ZUV2ZW50
KCkuCi0gICAgbV9uZXh0UmVzaXplU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0OwotfQotCi12
b2lkIFdlYlZpZXc6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpW
aWV3cG9ydEF0dHJpYnV0ZXMmKQotewotfQotCi12b2lkIFdlYlZpZXc6OnJlZ2lzdGVyRWRpdENv
bW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBwcnBDb21tYW5kLCBXZWJQYWdl
UHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKLXsKLSAgICBSZWZQdHI8V2ViRWRpdENvbW1h
bmRQcm94eT4gY29tbWFuZCA9IHBycENvbW1hbmQ7Ci0gICAgbV91bmRvQ2xpZW50LnJlZ2lzdGVy
RWRpdENvbW1hbmQodGhpcywgY29tbWFuZCwgdW5kb09yUmVkbyk7Ci19Ci0KLXZvaWQgV2ViVmll
dzo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQotewotICAgIG1fdW5kb0NsaWVudC5jbGVhckFsbEVk
aXRDb21tYW5kcyh0aGlzKTsKLX0KLQotYm9vbCBXZWJWaWV3OjpjYW5VbmRvUmVkbyhXZWJQYWdl
UHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKLXsKLSAgICByZXR1cm4gbV91bmRvQ2xpZW50
LmNhblVuZG9SZWRvKHRoaXMsIHVuZG9PclJlZG8pOwotfQotCi12b2lkIFdlYlZpZXc6OmV4ZWN1
dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKLXsKLSAgICBt
X3VuZG9DbGllbnQuZXhlY3V0ZVVuZG9SZWRvKHRoaXMsIHVuZG9PclJlZG8pOwotfQotICAgIAot
dm9pZCBXZWJWaWV3OjpyZWFwcGx5RWRpdENvbW1hbmQoV2ViRWRpdENvbW1hbmRQcm94eSogY29t
bWFuZCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+aXNWYWxpZCgpIHx8ICFtX3BhZ2UtPmlzVmFsaWRF
ZGl0Q29tbWFuZChjb21tYW5kKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNvbW1hbmQt
PnJlYXBwbHkoKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojp1bmFwcGx5RWRpdENvbW1hbmQoV2ViRWRp
dENvbW1hbmRQcm94eSogY29tbWFuZCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+aXNWYWxpZCgpIHx8
ICFtX3BhZ2UtPmlzVmFsaWRFZGl0Q29tbWFuZChjb21tYW5kKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGNvbW1hbmQtPnVuYXBwbHkoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRDdXN0
b21Ecm9wVGFyZ2V0KElEcm9wVGFyZ2V0KiBkcm9wVGFyZ2V0KQotewotICAgIGlmICghbV9wYWdl
LT5pc1ZhbGlkKCkgfHwgIW1fd2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OlJldm9r
ZURyYWdEcm9wKG1fd2luZG93KTsKLQotICAgIGlmIChkcm9wVGFyZ2V0KQotICAgICAgICA6OlJl
Z2lzdGVyRHJhZ0Ryb3AobV93aW5kb3csIGRyb3BUYXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAg
OjpSZWdpc3RlckRyYWdEcm9wKG1fd2luZG93LCB0aGlzKTsKLX0KLQotRmxvYXRSZWN0IFdlYlZp
ZXc6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBy
ZXR1cm4gcmVjdDsKLX0KLQotSW50UG9pbnQgV2ViVmlldzo6c2NyZWVuVG9XaW5kb3coY29uc3Qg
SW50UG9pbnQmIHBvaW50KQotewotICAgIHJldHVybiBwb2ludDsKLX0KLQotSW50UmVjdCBXZWJW
aWV3Ojp3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBy
ZWN0OwotfQotCi1GbG9hdFJlY3QgV2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotSElNQyBXZWJWaWV3Ojpn
ZXRJTU1Db250ZXh0KCkgCi17Ci0gICAgcmV0dXJuIEltZTo6SW1tR2V0Q29udGV4dChtX3dpbmRv
dyk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6cHJlcGFyZUNhbmRpZGF0ZVdpbmRvdyhISU1DIGhJbnB1
dENvbnRleHQpIAotewotICAgIEludFJlY3QgY2FyZXQgPSBtX3BhZ2UtPmZpcnN0UmVjdEZvckNo
YXJhY3RlckluU2VsZWN0ZWRSYW5nZSgwKTsKLSAgICBDQU5ESURBVEVGT1JNIGZvcm07Ci0gICAg
Zm9ybS5kd0luZGV4ID0gMDsKLSAgICBmb3JtLmR3U3R5bGUgPSBDRlNfRVhDTFVERTsKLSAgICBm
b3JtLnB0Q3VycmVudFBvcy54ID0gY2FyZXQueCgpOwotICAgIGZvcm0ucHRDdXJyZW50UG9zLnkg
PSBjYXJldC5tYXhZKCk7Ci0gICAgZm9ybS5yY0FyZWEudG9wID0gY2FyZXQueSgpOwotICAgIGZv
cm0ucmNBcmVhLmJvdHRvbSA9IGNhcmV0Lm1heFkoKTsKLSAgICBmb3JtLnJjQXJlYS5sZWZ0ID0g
Y2FyZXQueCgpOwotICAgIGZvcm0ucmNBcmVhLnJpZ2h0ID0gY2FyZXQubWF4WCgpOwotICAgIElt
ZTo6SW1tU2V0Q2FuZGlkYXRlV2luZG93KGhJbnB1dENvbnRleHQsICZmb3JtKTsKLX0KLQotdm9p
ZCBXZWJWaWV3OjpyZXNldElNRSgpCi17Ci0gICAgSElNQyBoSW5wdXRDb250ZXh0ID0gZ2V0SU1N
Q29udGV4dCgpOwotICAgIGlmICghaElucHV0Q29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAg
IEltZTo6SW1tTm90aWZ5SU1FKGhJbnB1dENvbnRleHQsIE5JX0NPTVBPU0lUSU9OU1RSLCBDUFNf
Q0FOQ0VMLCAwKTsKLSAgICBJbWU6OkltbVJlbGVhc2VDb250ZXh0KG1fd2luZG93LCBoSW5wdXRD
b250ZXh0KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5h
YmxlZCkKLXsKLSAgICBJbWU6OkltbUFzc29jaWF0ZUNvbnRleHRFeChtX3dpbmRvdywgMCwgZW5h
YmxlZCA/IElBQ0VfREVGQVVMVCA6IDApOwotfQotCi12b2lkIFdlYlZpZXc6OmNvbXBvc2l0aW9u
U2VsZWN0aW9uQ2hhbmdlZChib29sIGhhc0NoYW5nZWQpCi17Ci0gICAgaWYgKG1fcGFnZS0+ZWRp
dG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbiAmJiAhaGFzQ2hhbmdlZCkKLSAgICAgICAgcmVzZXRJ
TUUoKTsKLX0KLQotYm9vbCBXZWJWaWV3OjpvbklNRVN0YXJ0Q29tcG9zaXRpb24oKQotewotICAg
IExPRyhUZXh0SW5wdXQsICJvbklNRVN0YXJ0Q29tcG9zaXRpb24iKTsKLSAgICBtX2luSU1FQ29t
cG9zaXRpb24rKzsKLQotICAgIEhJTUMgaElucHV0Q29udGV4dCA9IGdldElNTUNvbnRleHQoKTsK
LSAgICBpZiAoIWhJbnB1dENvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwcmVw
YXJlQ2FuZGlkYXRlV2luZG93KGhJbnB1dENvbnRleHQpOwotICAgIEltZTo6SW1tUmVsZWFzZUNv
bnRleHQobV93aW5kb3csIGhJbnB1dENvbnRleHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgYm9vbCBnZXRDb21wb3NpdGlvblN0cmluZyhISU1DIGhJbnB1dENvbnRleHQsIERXT1JE
IHR5cGUsIFN0cmluZyYgcmVzdWx0KQotewotICAgIExPTkcgY29tcG9zaXRpb25MZW5ndGggPSBJ
bWU6OkltbUdldENvbXBvc2l0aW9uU3RyaW5nVyhoSW5wdXRDb250ZXh0LCB0eXBlLCAwLCAwKTsK
LSAgICBpZiAoY29tcG9zaXRpb25MZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIFZlY3RvcjxVQ2hhcj4gY29tcG9zaXRpb25CdWZmZXIoY29tcG9zaXRpb25MZW5ndGggLyAy
KTsKLSAgICBjb21wb3NpdGlvbkxlbmd0aCA9IEltZTo6SW1tR2V0Q29tcG9zaXRpb25TdHJpbmdX
KGhJbnB1dENvbnRleHQsIHR5cGUsIGNvbXBvc2l0aW9uQnVmZmVyLmRhdGEoKSwgY29tcG9zaXRp
b25MZW5ndGgpOwotICAgIHJlc3VsdCA9IFN0cmluZzo6YWRvcHQoY29tcG9zaXRpb25CdWZmZXIp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBjb21wb3NpdGlvblRvVW5kZXJs
aW5lcyhjb25zdCBWZWN0b3I8RFdPUkQ+JiBjbGF1c2VzLCBjb25zdCBWZWN0b3I8QllURT4mIGF0
dHJpYnV0ZXMsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMpCi17Ci0g
ICAgaWYgKGNsYXVzZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHVuZGVybGluZXMuY2xlYXIoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgCi0gICAgc2l6ZV90IG51bUJvdW5kYXJpZXMgPSBj
bGF1c2VzLnNpemUoKSAtIDE7Ci0gICAgdW5kZXJsaW5lcy5yZXNpemUobnVtQm91bmRhcmllcyk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUJvdW5kYXJpZXM7ICsraSkgewotICAg
ICAgICB1bmRlcmxpbmVzW2ldLnN0YXJ0T2Zmc2V0ID0gY2xhdXNlc1tpXTsKLSAgICAgICAgdW5k
ZXJsaW5lc1tpXS5lbmRPZmZzZXQgPSBjbGF1c2VzW2kgKyAxXTsKLSAgICAgICAgQllURSBhdHRy
aWJ1dGUgPSBhdHRyaWJ1dGVzW2NsYXVzZXNbaV1dOwotICAgICAgICB1bmRlcmxpbmVzW2ldLnRo
aWNrID0gYXR0cmlidXRlID09IEFUVFJfVEFSR0VUX0NPTlZFUlRFRCB8fCBhdHRyaWJ1dGUgPT0g
QVRUUl9UQVJHRVRfTk9UQ09OVkVSVEVEOwotICAgICAgICB1bmRlcmxpbmVzW2ldLmNvbG9yID0g
Q29sb3I6OmJsYWNrOwotICAgIH0KLX0KLQotI2lmICFMT0dfRElTQUJMRUQKLSNkZWZpbmUgQVBQ
RU5EX0FSR1VNRU5UX05BTUUobmFtZSkgXAotICAgIGlmIChscGFyYW0gJiBuYW1lKSB7IFwKLSAg
ICAgICAgaWYgKG5lZWRzQ29tbWEpIFwKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFs
KCIsICIpOyBcCi0gICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCNuYW1lKTsgXAotICAgICAg
ICBuZWVkc0NvbW1hID0gdHJ1ZTsgXAotICAgIH0KLQotc3RhdGljIFN0cmluZyBpbWVDb21wb3Np
dGlvbkFyZ3VtZW50TmFtZXMoTFBBUkFNIGxwYXJhbSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHJl
c3VsdDsKLSAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKLQotICAgIEFQUEVORF9BUkdVTUVO
VF9OQU1FKEdDU19DT01QQVRUUik7Ci0gICAgQVBQRU5EX0FSR1VNRU5UX05BTUUoR0NTX0NPTVBD
TEFVU0UpOwotICAgIEFQUEVORF9BUkdVTUVOVF9OQU1FKEdDU19DT01QUkVBRFNUUik7Ci0gICAg
QVBQRU5EX0FSR1VNRU5UX05BTUUoR0NTX0NPTVBSRUFEQVRUUik7Ci0gICAgQVBQRU5EX0FSR1VN
RU5UX05BTUUoR0NTX0NPTVBSRUFEQ0xBVVNFKTsKLSAgICBBUFBFTkRfQVJHVU1FTlRfTkFNRShH
Q1NfQ09NUFNUUik7Ci0gICAgQVBQRU5EX0FSR1VNRU5UX05BTUUoR0NTX0NVUlNPUlBPUyk7Ci0g
ICAgQVBQRU5EX0FSR1VNRU5UX05BTUUoR0NTX0RFTFRBU1RBUlQpOwotICAgIEFQUEVORF9BUkdV
TUVOVF9OQU1FKEdDU19SRVNVTFRDTEFVU0UpOwotICAgIEFQUEVORF9BUkdVTUVOVF9OQU1FKEdD
U19SRVNVTFRSRUFEQ0xBVVNFKTsKLSAgICBBUFBFTkRfQVJHVU1FTlRfTkFNRShHQ1NfUkVTVUxU
UkVBRFNUUik7Ci0gICAgQVBQRU5EX0FSR1VNRU5UX05BTUUoR0NTX1JFU1VMVFNUUik7Ci0gICAg
QVBQRU5EX0FSR1VNRU5UX05BTUUoQ1NfSU5TRVJUQ0hBUik7Ci0gICAgQVBQRU5EX0FSR1VNRU5U
X05BTUUoQ1NfTk9NT1ZFQ0FSRVQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwot
fQotCi1zdGF0aWMgU3RyaW5nIGltZVJlcXVlc3ROYW1lKFdQQVJBTSB3cGFyYW0pCi17Ci0gICAg
c3dpdGNoICh3cGFyYW0pIHsKLSAgICBjYXNlIElNUl9DQU5ESURBVEVXSU5ET1c6Ci0gICAgICAg
IHJldHVybiAiSU1SX0NBTkRJREFURVdJTkRPVyI7Ci0gICAgY2FzZSBJTVJfQ09NUE9TSVRJT05G
T05UOgotICAgICAgICByZXR1cm4gIklNUl9DT01QT1NJVElPTkZPTlQiOwotICAgIGNhc2UgSU1S
X0NPTVBPU0lUSU9OV0lORE9XOgotICAgICAgICByZXR1cm4gIklNUl9DT01QT1NJVElPTldJTkRP
VyI7Ci0gICAgY2FzZSBJTVJfQ09ORklSTVJFQ09OVkVSVFNUUklORzoKLSAgICAgICAgcmV0dXJu
ICJJTVJfQ09ORklSTVJFQ09OVkVSVFNUUklORyI7Ci0gICAgY2FzZSBJTVJfRE9DVU1FTlRGRUVE
OgotICAgICAgICByZXR1cm4gIklNUl9ET0NVTUVOVEZFRUQiOwotICAgIGNhc2UgSU1SX1FVRVJZ
Q0hBUlBPU0lUSU9OOgotICAgICAgICByZXR1cm4gIklNUl9RVUVSWUNIQVJQT1NJVElPTiI7Ci0g
ICAgY2FzZSBJTVJfUkVDT05WRVJUU1RSSU5HOgotICAgICAgICByZXR1cm4gIklNUl9SRUNPTlZF
UlRTVFJJTkciOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAiVW5rbm93biAoIiArIFN0
cmluZzo6bnVtYmVyKHdwYXJhbSkgKyAiKSI7Ci0gICAgfQotfQotI2VuZGlmCi0KLWJvb2wgV2Vi
Vmlldzo6b25JTUVDb21wb3NpdGlvbihMUEFSQU0gbHBhcmFtKQotewotICAgIExPRyhUZXh0SW5w
dXQsICJvbklNRUNvbXBvc2l0aW9uICVzIiwgaW1lQ29tcG9zaXRpb25Bcmd1bWVudE5hbWVzKGxw
YXJhbSkubGF0aW4xKCkuZGF0YSgpKTsKLSAgICBISU1DIGhJbnB1dENvbnRleHQgPSBnZXRJTU1D
b250ZXh0KCk7Ci0gICAgaWYgKCFoSW5wdXRDb250ZXh0KQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmICghbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHByZXBhcmVDYW5kaWRhdGVXaW5kb3coaElucHV0Q29u
dGV4dCk7Ci0KLSAgICBpZiAobHBhcmFtICYgR0NTX1JFU1VMVFNUUiB8fCAhbHBhcmFtKSB7Ci0g
ICAgICAgIFN0cmluZyBjb21wb3NpdGlvblN0cmluZzsKLSAgICAgICAgaWYgKCFnZXRDb21wb3Np
dGlvblN0cmluZyhoSW5wdXRDb250ZXh0LCBHQ1NfUkVTVUxUU1RSLCBjb21wb3NpdGlvblN0cmlu
ZykgJiYgbHBhcmFtKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAg
ICBtX3BhZ2UtPmNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZyk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIFN0cmluZyBjb21wb3NpdGlvblN0cmluZzsKLSAg
ICBpZiAoIWdldENvbXBvc2l0aW9uU3RyaW5nKGhJbnB1dENvbnRleHQsIEdDU19DT01QU1RSLCBj
b21wb3NpdGlvblN0cmluZykpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENv
bXBvc2l0aW9uIHN0cmluZyBhdHRyaWJ1dGVzCi0gICAgaW50IG51bUF0dHJpYnV0ZXMgPSBJbWU6
OkltbUdldENvbXBvc2l0aW9uU3RyaW5nVyhoSW5wdXRDb250ZXh0LCBHQ1NfQ09NUEFUVFIsIDAs
IDApOwotICAgIFZlY3RvcjxCWVRFPiBhdHRyaWJ1dGVzKG51bUF0dHJpYnV0ZXMpOwotICAgIElt
ZTo6SW1tR2V0Q29tcG9zaXRpb25TdHJpbmdXKGhJbnB1dENvbnRleHQsIEdDU19DT01QQVRUUiwg
YXR0cmlidXRlcy5kYXRhKCksIG51bUF0dHJpYnV0ZXMpOwotCi0gICAgLy8gR2V0IGNsYXVzZXMK
LSAgICBpbnQgbnVtQnl0ZXMgPSBJbWU6OkltbUdldENvbXBvc2l0aW9uU3RyaW5nVyhoSW5wdXRD
b250ZXh0LCBHQ1NfQ09NUENMQVVTRSwgMCwgMCk7Ci0gICAgVmVjdG9yPERXT1JEPiBjbGF1c2Vz
KG51bUJ5dGVzIC8gc2l6ZW9mKERXT1JEKSk7Ci0gICAgSW1lOjpJbW1HZXRDb21wb3NpdGlvblN0
cmluZ1coaElucHV0Q29udGV4dCwgR0NTX0NPTVBDTEFVU0UsIGNsYXVzZXMuZGF0YSgpLCBudW1C
eXRlcyk7Ci0KLSAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7Ci0g
ICAgY29tcG9zaXRpb25Ub1VuZGVybGluZXMoY2xhdXNlcywgYXR0cmlidXRlcywgdW5kZXJsaW5l
cyk7Ci0KLSAgICBpbnQgY3Vyc29yUG9zaXRpb24gPSBMT1dPUkQoSW1lOjpJbW1HZXRDb21wb3Np
dGlvblN0cmluZ1coaElucHV0Q29udGV4dCwgR0NTX0NVUlNPUlBPUywgMCwgMCkpOwotCi0gICAg
bV9wYWdlLT5zZXRDb21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZywgdW5kZXJsaW5lcywgY3Vy
c29yUG9zaXRpb24pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViVmlldzo6b25J
TUVFbmRDb21wb3NpdGlvbigpCi17Ci0gICAgTE9HKFRleHRJbnB1dCwgIm9uSU1FRW5kQ29tcG9z
aXRpb24iKTsKLSAgICAvLyBJZiB0aGUgY29tcG9zaXRpb24gaGFzbid0IGJlZW4gY29uZmlybWVk
IHlldCwgaXQgbmVlZHMgdG8gYmUgY2FuY2VsbGVkLgotICAgIC8vIFRoaXMgaGFwcGVucyBhZnRl
ciBkZWxldGluZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZnJvbSBpbmxpbmUgaW5wdXQgaG9sZS4KLSAg
ICBpZiAobV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0aW9uKQotICAgICAgICBtX3Bh
Z2UtPmNvbmZpcm1Db21wb3NpdGlvbihTdHJpbmcoKSk7Ci0KLSAgICBpZiAobV9pbklNRUNvbXBv
c2l0aW9uKQotICAgICAgICBtX2luSU1FQ29tcG9zaXRpb24tLTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1MUkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvbihJTUVDSEFS
UE9TSVRJT04qIGNoYXJQb3MpCi17Ci0gICAgaWYgKGNoYXJQb3MtPmR3Q2hhclBvcyAmJiAhbV9w
YWdlLT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0aW9uKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBJbnRSZWN0IGNhcmV0ID0gbV9wYWdlLT5maXJzdFJlY3RGb3JDaGFyYWN0ZXJJblNlbGVjdGVk
UmFuZ2UoY2hhclBvcy0+ZHdDaGFyUG9zKTsKLSAgICBjaGFyUG9zLT5wdC54ID0gY2FyZXQueCgp
OwotICAgIGNoYXJQb3MtPnB0LnkgPSBjYXJldC55KCk7Ci0gICAgOjpDbGllbnRUb1NjcmVlbiht
X3dpbmRvdywgJmNoYXJQb3MtPnB0KTsKLSAgICBjaGFyUG9zLT5jTGluZUhlaWdodCA9IGNhcmV0
LmhlaWdodCgpOwotICAgIDo6R2V0V2luZG93UmVjdChtX3dpbmRvdywgJmNoYXJQb3MtPnJjRG9j
dW1lbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1MUkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVx
dWVzdFJlY29udmVydFN0cmluZyhSRUNPTlZFUlRTVFJJTkcqIHJlY29udmVydFN0cmluZykKLXsK
LSAgICBTdHJpbmcgdGV4dCA9IG1fcGFnZS0+Z2V0U2VsZWN0ZWRUZXh0KCk7Ci0gICAgdW5zaWdu
ZWQgdG90YWxTaXplID0gc2l6ZW9mKFJFQ09OVkVSVFNUUklORykgKyB0ZXh0Lmxlbmd0aCgpICog
c2l6ZW9mKFVDaGFyKTsKLSAgICAKLSAgICBpZiAoIXJlY29udmVydFN0cmluZykKLSAgICAgICAg
cmV0dXJuIHRvdGFsU2l6ZTsKLQotICAgIGlmICh0b3RhbFNpemUgPiByZWNvbnZlcnRTdHJpbmct
PmR3U2l6ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmVjb252ZXJ0U3RyaW5nLT5kd0NvbXBT
dHJMZW4gPSB0ZXh0Lmxlbmd0aCgpOwotICAgIHJlY29udmVydFN0cmluZy0+ZHdTdHJMZW4gPSB0
ZXh0Lmxlbmd0aCgpOwotICAgIHJlY29udmVydFN0cmluZy0+ZHdUYXJnZXRTdHJMZW4gPSB0ZXh0
Lmxlbmd0aCgpOwotICAgIHJlY29udmVydFN0cmluZy0+ZHdTdHJPZmZzZXQgPSBzaXplb2YoUkVD
T05WRVJUU1RSSU5HKTsKLSAgICBtZW1jcHkocmVjb252ZXJ0U3RyaW5nICsgMSwgdGV4dC5jaGFy
YWN0ZXJzKCksIHRleHQubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKLSAgICByZXR1cm4gdG90
YWxTaXplOwotfQotCi1MUkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdChXUEFSQU0gcmVxdWVz
dCwgTFBBUkFNIGRhdGEpCi17Ci0gICAgTE9HKFRleHRJbnB1dCwgIm9uSU1FUmVxdWVzdCAlcyIs
IGltZVJlcXVlc3ROYW1lKHJlcXVlc3QpLmxhdGluMSgpLmRhdGEoKSk7Ci0gICAgaWYgKCFtX3Bh
Z2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgc3dpdGNoIChyZXF1ZXN0KSB7Ci0gICAgY2FzZSBJTVJfUkVDT05WRVJUU1RSSU5HOgot
ICAgICAgICByZXR1cm4gb25JTUVSZXF1ZXN0UmVjb252ZXJ0U3RyaW5nKHJlaW50ZXJwcmV0X2Nh
c3Q8UkVDT05WRVJUU1RSSU5HKj4oZGF0YSkpOwotCi0gICAgY2FzZSBJTVJfUVVFUllDSEFSUE9T
SVRJT046Ci0gICAgICAgIHJldHVybiBvbklNRVJlcXVlc3RDaGFyUG9zaXRpb24ocmVpbnRlcnBy
ZXRfY2FzdDxJTUVDSEFSUE9TSVRJT04qPihkYXRhKSk7Ci0gICAgfQotICAgIHJldHVybiAwOwot
fQotCi1ib29sIFdlYlZpZXc6Om9uSU1FU2VsZWN0KFdQQVJBTSB3cGFyYW0sIExQQVJBTSBscGFy
YW0pCi17Ci0gICAgVU5VU0VEX1BBUkFNKHdwYXJhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKGxwYXJh
bSk7Ci0gICAgTE9HKFRleHRJbnB1dCwgIm9uSU1FU2VsZWN0IGxvY2FsZSAlbGQgJXMiLCBscGFy
YW0sIHdwYXJhbSA/ICJzZWxlY3QiIDogImRlc2VsZWN0Iik7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFdlYlZpZXc6Om9uSU1FU2V0Q29udGV4dChXUEFSQU0gd3BhcmFtLCBMUEFSQU0p
Ci17Ci0gICAgTE9HKFRleHRJbnB1dCwgIm9uSU1FU2V0Q29udGV4dCAlcyIsIHdwYXJhbSA/ICJh
Y3RpdmUiIDogImluYWN0aXZlIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYlZp
ZXc6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQs
IGJvb2wgd2FzRXZlbnRIYW5kbGVkKQotewotICAgIC8vIENhbGxpbmcgOjpEZWZXaW5kb3dQcm9j
VyB3aWxsIGVuc3VyZSB0aGF0IHByZXNzaW5nIHRoZSBBbHQga2V5IHdpbGwgZ2VuZXJhdGUgYSBX
TV9TWVNDT01NQU5ECi0gICAgLy8gZXZlbnQsIGUuZy4gU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzQ3NjcxPi4KLSAgICBpZiAoIXdhc0V2ZW50SGFuZGxlZCkKLSAgICAgICAgOjpEZWZXaW5kb3dQ
cm9jVyhldmVudC5uYXRpdmVFdmVudCgpLT5od25kLCBldmVudC5uYXRpdmVFdmVudCgpLT5tZXNz
YWdlLCBldmVudC5uYXRpdmVFdmVudCgpLT53UGFyYW0sIGV2ZW50Lm5hdGl2ZUV2ZW50KCktPmxQ
YXJhbSk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFdlYlZpZXc6OmNyZWF0
ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSogcGFnZSkKLXsKLSAgICByZXR1cm4gV2ViUG9w
dXBNZW51UHJveHlXaW46OmNyZWF0ZSh0aGlzLCBwYWdlKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJD
b250ZXh0TWVudVByb3h5PiBXZWJWaWV3OjpjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQ
cm94eSogcGFnZSkKLXsKLSAgICByZXR1cm4gV2ViQ29udGV4dE1lbnVQcm94eVdpbjo6Y3JlYXRl
KG1fd2luZG93LCBwYWdlKTsKLX0KLQotI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotUGFz
c1JlZlB0cjxXZWJDb2xvckNob29zZXJQcm94eT4gV2ViVmlldzo6Y3JlYXRlQ29sb3JDaG9vc2Vy
UHJveHkoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
I2VuZGlmCi0KLXZvaWQgV2ViVmlldzo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJ
bmRpY2F0b3I+IHBycEZpbmRJbmRpY2F0b3IsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKQot
ewotICAgIFVOVVNFRF9QQVJBTShhbmltYXRlKTsKLQotICAgIGlmICghbV9maW5kSW5kaWNhdG9y
Q2FsbGJhY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIEhCSVRNQVAgaGJtcCA9IDA7Ci0gICAg
SW50UmVjdCBzZWxlY3Rpb25SZWN0OwotCi0gICAgaWYgKFJlZlB0cjxGaW5kSW5kaWNhdG9yPiBm
aW5kSW5kaWNhdG9yID0gcHJwRmluZEluZGljYXRvcikgewotICAgICAgICBpZiAoU2hhcmVhYmxl
Qml0bWFwKiBjb250ZW50SW1hZ2UgPSBmaW5kSW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKSkgewot
ICAgICAgICAgICAgLy8gUmVuZGVyIHRoZSBjb250ZW50SW1hZ2UgdG8gYW4gSEJJVE1BUC4KLSAg
ICAgICAgICAgIHZvaWQqIGJpdHM7Ci0gICAgICAgICAgICBIREMgaGRjID0gOjpDcmVhdGVDb21w
YXRpYmxlREMoMCk7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSBjb250ZW50SW1hZ2UtPmJvdW5k
cygpLndpZHRoKCk7Ci0gICAgICAgICAgICBpbnQgaGVpZ2h0ID0gY29udGVudEltYWdlLT5ib3Vu
ZHMoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgIEJpdG1hcEluZm8gYml0bWFwSW5mbyA9IEJpdG1h
cEluZm86OmNyZWF0ZShjb250ZW50SW1hZ2UtPnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGhibXAg
PSBDcmVhdGVESUJTZWN0aW9uKDAsICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgc3RhdGlj
X2Nhc3Q8dm9pZCoqPigmYml0cyksIDAsIDApOwotICAgICAgICAgICAgSEJJVE1BUCBoYm1wT2xk
ID0gc3RhdGljX2Nhc3Q8SEJJVE1BUD4oU2VsZWN0T2JqZWN0KGhkYywgaGJtcCkpOwotI2lmIFVT
RShDRykKLSAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHQoQWRvcHRD
RiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJpdHMsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgOCwgd2lkdGggKiBzaXplb2YoUkdCUVVBRCksIGRldmljZVJHQkNvbG9yU3BhY2VSZWYo
KSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZEZpcnN0KSk7Ci0KLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQo
Y29udGV4dC5nZXQoKSk7Ci0gICAgICAgICAgICBjb250ZW50SW1hZ2UtPnBhaW50KGdyYXBoaWNz
Q29udGV4dCwgSW50UG9pbnQoKSwgY29udGVudEltYWdlLT5ib3VuZHMoKSk7Ci0jZWxzZQotICAg
ICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCEKLSNlbmRpZgotCi0gICAgICAgICAgICA6OlNl
bGVjdE9iamVjdChoZGMsIGhibXBPbGQpOwotICAgICAgICAgICAgOjpEZWxldGVEQyhoZGMpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgc2VsZWN0aW9uUmVjdCA9IEludFJlY3QoZmluZEluZGljYXRv
ci0+c2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMoKSk7Ci0gICAgfQotICAgIAotICAg
IC8vIFRoZSBjYWxsYmFjayBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyA6OkRlbGV0ZU9iamVj
dChoYm1wKS4KLSAgICAoKm1fZmluZEluZGljYXRvckNhbGxiYWNrKSh0b0FQSSh0aGlzKSwgaGJt
cCwgc2VsZWN0aW9uUmVjdCwgZmFkZU91dCwgbV9maW5kSW5kaWNhdG9yQ2FsbGJhY2tDb250ZXh0
KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRGaW5kSW5kaWNhdG9yQ2FsbGJhY2soV0tWaWV3Rmlu
ZEluZGljYXRvckNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KQotewotICAgIG1fZmlu
ZEluZGljYXRvckNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgbV9maW5kSW5kaWNhdG9yQ2FsbGJh
Y2tDb250ZXh0ID0gY29udGV4dDsKLX0KLQotV0tWaWV3RmluZEluZGljYXRvckNhbGxiYWNrIFdl
YlZpZXc6OmdldEZpbmRJbmRpY2F0b3JDYWxsYmFjayh2b2lkKiogY29udGV4dCkKLXsKLSAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgKmNvbnRleHQgPSBtX2ZpbmRJbmRpY2F0b3JDYWxsYmFja0Nv
bnRleHQ7Ci0gICAgCi0gICAgcmV0dXJuIG1fZmluZEluZGljYXRvckNhbGxiYWNrOwotfQotCi12
b2lkIFdlYlZpZXc6OmRpZEluc3RhbGxPclVuaW5zdGFsbFBhZ2VPdmVybGF5KGJvb2wgZGlkSW5z
dGFsbCkKLXsKLSAgICBtX3BhZ2VPdmVybGF5SW5zdGFsbGVkID0gZGlkSW5zdGFsbDsKLX0KLQot
dm9pZCBXZWJWaWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVw
cmVzZW50YXRpb24pCi17Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZGlkRmluaXNoTG9hZGluZ0RhdGFG
b3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBj
b25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikKLXsKLX0KLQotZG91YmxlIFdlYlZpZXc6OmN1
c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpCi17Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXZv
aWQgV2ViVmlldzo6c2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSkKLXsK
LX0KLQotdm9pZCBXZWJWaWV3OjpmaW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25z
dCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpCi17Ci19Ci0KLXZvaWQgV2ViVmlldzo6
Y291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBG
aW5kT3B0aW9ucywgdW5zaWduZWQpCi17Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0SXNJbldpbmRv
dyhib29sIGlzSW5XaW5kb3cpCi17Ci0gICAgbV9pc0luV2luZG93ID0gaXNJbldpbmRvdzsKLSAg
ICBtX3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0luV2luZG93
KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRJc1Zpc2libGUoYm9vbCBpc1Zpc2libGUpCi17Ci0g
ICAgbV9pc1Zpc2libGUgPSBpc1Zpc2libGU7Ci0KLSAgICBpZiAobV9wYWdlKQotICAgICAgICBt
X3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOwot
fQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi12b2lkIFdlYlZpZXc6OmVu
dGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgY29u
dGV4dCkKLXsKLSNpZiBIQVZFKFdLUUNBKQotICAgIEFTU0VSVCghY29udGV4dC5pc0VtcHR5KCkp
OwotCi0gICAgbV9sYXllckhvc3RXaW5kb3cgPSBjb250ZXh0LndpbmRvdzsKLQotICAgIEludFNp
emUgc2l6ZSA9IHZpZXdTaXplKCk7Ci0gICAgLy8gRW5zdXJlIHRoZSBsYXllciBob3N0IHdpbmRv
dyBpcyBiZWhpbmQgYWxsIG90aGVyIGNoaWxkIHdpbmRvd3MgKHNpbmNlIG90aGVyd2lzZSBpdCB3
b3VsZCBvYnNjdXJlIHRoZW0pLgotICAgIDo6U2V0V2luZG93UG9zKG1fbGF5ZXJIb3N0V2luZG93
LCBIV05EX0JPVFRPTSwgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBTV1BfU0hP
V1dJTkRPVyB8IFNXUF9OT0FDVElWQVRFKTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJWaWV3OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoKQotewotI2lmIEhBVkUoV0tRQ0EpCi0gICAgQVNTRVJUKG1fbGF5ZXJIb3N0V2luZG93
KTsKLQotICAgIC8vIFRlbGwgdGhlIFdLQ0FDRlZpZXdXaW5kb3cgdG8gZGVzdHJveSBpdHNlbGYu
IFdlIGNhbid0IGNhbGwgOjpEZXN0cm95V2luZG93IGRpcmVjdGx5IGJlY2F1c2UKLSAgICAvLyB0
aGUgd2luZG93IGlzIG93bmVkIGJ5IGFub3RoZXIgdGhyZWFkLgotICAgIDo6UG9zdE1lc3NhZ2VX
KG1fbGF5ZXJIb3N0V2luZG93LCBXS0NBQ0ZWaWV3V2luZG93OjpjdXN0b21EZXN0cm95TWVzc2Fn
ZSwgMCwgMCk7Ci0gICAgbV9sYXllckhvc3RXaW5kb3cgPSAwOwotI2Vsc2UKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlZpZXc6OnVwZGF0ZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKQotewotfQotI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotSFdORCBXZWJWaWV3OjpuYXRpdmVX
aW5kb3coKQotewotICAgIHJldHVybiBtX3dpbmRvdzsKLX0KLQotdm9pZCBXZWJWaWV3OjpzY2hl
ZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRhdGUoY29uc3QgV2luZG93R2VvbWV0cnkmIGdlb21l
dHJ5KQotewotICAgIG1fZ2VvbWV0cmllc1VwZGF0ZXIuYWRkUGVuZGluZ1VwZGF0ZShnZW9tZXRy
eSk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6dXBkYXRlQ2hpbGRXaW5kb3dHZW9tZXRyaWVzKCkKLXsK
LSAgICBtX2dlb21ldHJpZXNVcGRhdGVyLnVwZGF0ZUdlb21ldHJpZXMoRG9Ob3RCcmluZ1RvVG9w
KTsKLX0KLQotLy8gV2ViQ29yZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyCi0KLXZvaWQgV2ViVmll
dzo6d2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJh
bSwgTFBBUkFNKQotewotICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAgIGNhc2UgV01fTkNBQ1RJ
VkFURToKLSAgICAgICAgdXBkYXRlQWN0aXZlU3RhdGVTb29uKCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgV01fU0VUVElOR0NIQU5HRToKLSAgICAgICAgLy8gc3lzdGVtUGFyYW1ldGVyQ2hh
bmdlZCh3UGFyYW0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViVmlldzo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBw
cHZPYmplY3QpCi17Ci0gICAgKnBwdk9iamVjdCA9IDA7Ci0gICAgaWYgKElzRXF1YWxHVUlEKHJp
aWQsIElJRF9JVW5rbm93bikpCi0gICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJVW5r
bm93bio+KHRoaXMpOwotICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JRHJvcFRh
cmdldCkpCi0gICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJRHJvcFRhcmdldCo+KHRo
aXMpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7Ci0KLSAgICBBZGRS
ZWYoKTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
Vmlldzo6QWRkUmVmKHZvaWQpCi17Ci0gICAgcmVmKCk7Ci0gICAgcmV0dXJuIHJlZkNvdW50KCk7
Ci19Ci0KLVVMT05HIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OlJlbGVhc2Uodm9pZCkKLXsK
LSAgICBkZXJlZigpOwotICAgIHJldHVybiByZWZDb3VudCgpOwotfQotCi1zdGF0aWMgRFdPUkQg
ZHJhZ09wZXJhdGlvblRvRHJhZ0N1cnNvcihEcmFnT3BlcmF0aW9uIG9wKQotewotICAgIERXT1JE
IHJlcyA9IERST1BFRkZFQ1RfTk9ORTsKLSAgICBpZiAob3AgJiBEcmFnT3BlcmF0aW9uQ29weSkg
Ci0gICAgICAgIHJlcyA9IERST1BFRkZFQ1RfQ09QWTsKLSAgICBlbHNlIGlmIChvcCAmIERyYWdP
cGVyYXRpb25MaW5rKSAKLSAgICAgICAgcmVzID0gRFJPUEVGRkVDVF9MSU5LOwotICAgIGVsc2Ug
aWYgKG9wICYgRHJhZ09wZXJhdGlvbk1vdmUpIAotICAgICAgICByZXMgPSBEUk9QRUZGRUNUX01P
VkU7Ci0gICAgZWxzZSBpZiAob3AgJiBEcmFnT3BlcmF0aW9uR2VuZXJpYykgCi0gICAgICAgIHJl
cyA9IERST1BFRkZFQ1RfTU9WRTsgLy8gVGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBGaXJlZm94IGJl
aGF2aW91cgotICAgIHJldHVybiByZXM7Ci19Ci0KLVdlYkNvcmU6OkRyYWdPcGVyYXRpb24gV2Vi
Vmlldzo6a2V5U3RhdGVUb0RyYWdPcGVyYXRpb24oRFdPUkQgZ3JmS2V5U3RhdGUpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKLQot
ICAgIC8vIENvbmZvcm1zIHRvIE1pY3Jvc29mdCdzIGtleSBjb21iaW5hdGlvbnMgYXMgZG9jdW1l
bnRlZCBmb3IgCi0gICAgLy8gSURyb3BUYXJnZXQ6OkRyYWdPdmVyLiBOb3RlLCBncmZLZXlTdGF0
ZSBpcyB0aGUgY3VycmVudCAKLSAgICAvLyBzdGF0ZSBvZiB0aGUga2V5Ym9hcmQgbW9kaWZpZXIg
a2V5cyBvbiB0aGUga2V5Ym9hcmQuIFNlZToKLSAgICAvLyA8aHR0cDovL21zZG4ubWljcm9zb2Z0
LmNvbS9lbi11cy9saWJyYXJ5L21zNjgwMTI5KFZTLjg1KS5hc3B4Pi4KLSAgICBEcmFnT3BlcmF0
aW9uIG9wZXJhdGlvbiA9IG1fcGFnZS0+ZHJhZ1Nlc3Npb24oKS5vcGVyYXRpb247Ci0KLSAgICBp
ZiAoKGdyZktleVN0YXRlICYgKE1LX0NPTlRST0wgfCBNS19TSElGVCkpID09IChNS19DT05UUk9M
IHwgTUtfU0hJRlQpKQotICAgICAgICBvcGVyYXRpb24gPSBEcmFnT3BlcmF0aW9uTGluazsKLSAg
ICBlbHNlIGlmICgoZ3JmS2V5U3RhdGUgJiBNS19DT05UUk9MKSA9PSBNS19DT05UUk9MKQotICAg
ICAgICBvcGVyYXRpb24gPSBEcmFnT3BlcmF0aW9uQ29weTsKLSAgICBlbHNlIGlmICgoZ3JmS2V5
U3RhdGUgJiBNS19TSElGVCkgPT0gTUtfU0hJRlQpCi0gICAgICAgIG9wZXJhdGlvbiA9IERyYWdP
cGVyYXRpb25HZW5lcmljOwotCi0gICAgcmV0dXJuIG9wZXJhdGlvbjsKLX0KLQotSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpEcmFnRW50ZXIoSURhdGFPYmplY3QqIHBEYXRhT2Jq
ZWN0LCBEV09SRCBncmZLZXlTdGF0ZSwgUE9JTlRMIHB0LCBEV09SRCogcGR3RWZmZWN0KQotewot
ICAgIG1fZHJhZ0RhdGEgPSAwOwotICAgIG1fcGFnZS0+cmVzZXREcmFnT3BlcmF0aW9uKCk7Ci0K
LSAgICBpZiAobV9kcm9wVGFyZ2V0SGVscGVyKQotICAgICAgICBtX2Ryb3BUYXJnZXRIZWxwZXIt
PkRyYWdFbnRlcihtX3dpbmRvdywgcERhdGFPYmplY3QsIChQT0lOVCopJnB0LCAqcGR3RWZmZWN0
KTsKLQotICAgIFBPSU5UTCBsb2NhbHB0ID0gcHQ7Ci0gICAgOjpTY3JlZW5Ub0NsaWVudChtX3dp
bmRvdywgKExQUE9JTlQpJmxvY2FscHQpOwotICAgIERyYWdEYXRhIGRhdGEocERhdGFPYmplY3Qs
IEludFBvaW50KGxvY2FscHQueCwgbG9jYWxwdC55KSwgSW50UG9pbnQocHQueCwgcHQueSksIGtl
eVN0YXRlVG9EcmFnT3BlcmF0aW9uKGdyZktleVN0YXRlKSk7Ci0gICAgbV9wYWdlLT5kcmFnRW50
ZXJlZCgmZGF0YSk7Ci0gICAgKnBkd0VmZmVjdCA9IGRyYWdPcGVyYXRpb25Ub0RyYWdDdXJzb3Io
bV9wYWdlLT5kcmFnU2Vzc2lvbigpLm9wZXJhdGlvbik7Ci0KLSAgICBtX2xhc3REcm9wRWZmZWN0
ID0gKnBkd0VmZmVjdDsKLSAgICBtX2RyYWdEYXRhID0gcERhdGFPYmplY3Q7Ci0KLSAgICByZXR1
cm4gU19PSzsKLX0KLQotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpEcmFnT3Zl
cihEV09SRCBncmZLZXlTdGF0ZSwgUE9JTlRMIHB0LCBEV09SRCogcGR3RWZmZWN0KQotewotICAg
IGlmIChtX2Ryb3BUYXJnZXRIZWxwZXIpCi0gICAgICAgIG1fZHJvcFRhcmdldEhlbHBlci0+RHJh
Z092ZXIoKFBPSU5UKikmcHQsICpwZHdFZmZlY3QpOwotCi0gICAgaWYgKG1fZHJhZ0RhdGEpIHsK
LSAgICAgICAgUE9JTlRMIGxvY2FscHQgPSBwdDsKLSAgICAgICAgOjpTY3JlZW5Ub0NsaWVudCht
X3dpbmRvdywgKExQUE9JTlQpJmxvY2FscHQpOwotICAgICAgICBEcmFnRGF0YSBkYXRhKG1fZHJh
Z0RhdGEuZ2V0KCksIEludFBvaW50KGxvY2FscHQueCwgbG9jYWxwdC55KSwgSW50UG9pbnQocHQu
eCwgcHQueSksIGtleVN0YXRlVG9EcmFnT3BlcmF0aW9uKGdyZktleVN0YXRlKSk7Ci0gICAgICAg
IG1fcGFnZS0+ZHJhZ1VwZGF0ZWQoJmRhdGEpOwotICAgICAgICAqcGR3RWZmZWN0ID0gZHJhZ09w
ZXJhdGlvblRvRHJhZ0N1cnNvcihtX3BhZ2UtPmRyYWdTZXNzaW9uKCkub3BlcmF0aW9uKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgKnBkd0VmZmVjdCA9IERST1BFRkZFQ1RfTk9ORTsKLQotICAgIG1f
bGFzdERyb3BFZmZlY3QgPSAqcGR3RWZmZWN0OwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OkRyYWdMZWF2ZSgpCi17Ci0gICAgaWYgKG1f
ZHJvcFRhcmdldEhlbHBlcikKLSAgICAgICAgbV9kcm9wVGFyZ2V0SGVscGVyLT5EcmFnTGVhdmUo
KTsKLQotICAgIGlmIChtX2RyYWdEYXRhKSB7Ci0gICAgICAgIERyYWdEYXRhIGRhdGEobV9kcmFn
RGF0YS5nZXQoKSwgSW50UG9pbnQoKSwgSW50UG9pbnQoKSwgRHJhZ09wZXJhdGlvbk5vbmUpOwot
ICAgICAgICBtX3BhZ2UtPmRyYWdFeGl0ZWQoJmRhdGEpOwotICAgICAgICBtX2RyYWdEYXRhID0g
MDsKLSAgICAgICAgbV9wYWdlLT5yZXNldERyYWdPcGVyYXRpb24oKTsKLSAgICB9Ci0gICAgcmV0
dXJuIFNfT0s7Ci19Ci0KLXN0YXRpYyBib29sIG1heWJlQ3JlYXRlU2FuZGJveEV4dGVuc2lvbkZy
b21EcmFnRGF0YShjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEsIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKLXsKLSAgICBpZiAoIWRyYWdEYXRhLmNvbnRh
aW5zRmlsZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVW5saWtlIG9uIE1h
Yywgd2UgYWxsb3cgbXVsdGlwbGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLCBzaW5jZSBvbiBXaW5k
b3dzCi0gICAgLy8gd2UgaGF2ZSBhY3Rpb25zIGZvciB0aG9zZSAob3BlbiB0aGUgZmlyc3QgZmls
ZSwgb3BlbiBhIFdpbmRvd3MgRXhwbG9yZXIgd2luZG93KS4KLQotICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZSgiXFwiLCBTYW5kYm94RXh0ZW5zaW9uOjpSZWFkT25seSwgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViVmlldzo6RHJvcChJRGF0YU9iamVjdCogcERhdGFPYmplY3QsIERXT1JE
IGdyZktleVN0YXRlLCBQT0lOVEwgcHQsIERXT1JEKiBwZHdFZmZlY3QpCi17Ci0gICAgaWYgKG1f
ZHJvcFRhcmdldEhlbHBlcikKLSAgICAgICAgbV9kcm9wVGFyZ2V0SGVscGVyLT5Ecm9wKHBEYXRh
T2JqZWN0LCAoUE9JTlQqKSZwdCwgKnBkd0VmZmVjdCk7Ci0KLSAgICBtX2RyYWdEYXRhID0gMDsK
LSAgICAqcGR3RWZmZWN0ID0gbV9sYXN0RHJvcEVmZmVjdDsKLSAgICBQT0lOVEwgbG9jYWxwdCA9
IHB0OwotICAgIDo6U2NyZWVuVG9DbGllbnQobV93aW5kb3csIChMUFBPSU5UKSZsb2NhbHB0KTsK
LSAgICBEcmFnRGF0YSBkYXRhKHBEYXRhT2JqZWN0LCBJbnRQb2ludChsb2NhbHB0LngsIGxvY2Fs
cHQueSksIEludFBvaW50KHB0LngsIHB0LnkpLCBrZXlTdGF0ZVRvRHJhZ09wZXJhdGlvbihncmZL
ZXlTdGF0ZSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNp
b25IYW5kbGU7Ci0gICAgYm9vbCBjcmVhdGVkRXh0ZW5zaW9uID0gbWF5YmVDcmVhdGVTYW5kYm94
RXh0ZW5zaW9uRnJvbURyYWdEYXRhKGRhdGEsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwotICAg
IGlmIChjcmVhdGVkRXh0ZW5zaW9uKQotICAgICAgICBtX3BhZ2UtPnByb2Nlc3MoKS0+d2lsbEFj
cXVpcmVVbml2ZXJzYWxGaWxlUmVhZFNhbmRib3hFeHRlbnNpb24oKTsKLSAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5kYm94RXh0ZW5zaW9uRm9yVXBsb2FkOwotICAgIG1fcGFn
ZS0+cGVyZm9ybURyYWcoJmRhdGEsIFN0cmluZygpLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBz
YW5kYm94RXh0ZW5zaW9uRm9yVXBsb2FkKTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKLUZ1bGxTY3JlZW5Db250cm9sbGVyKiBXZWJWaWV3OjpmdWxs
U2NyZWVuQ29udHJvbGxlcigpCi17Ci0gICAgaWYgKCFtX2Z1bGxTY3JlZW5Db250cm9sbGVyKQot
ICAgICAgICBtX2Z1bGxTY3JlZW5Db250cm9sbGVyID0gYWRvcHRQdHIobmV3IEZ1bGxTY3JlZW5D
b250cm9sbGVyKHRoaXMpKTsKLSAgICByZXR1cm4gbV9mdWxsU2NyZWVuQ29udHJvbGxlci5nZXQo
KTsKLX0KLQotSFdORCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50V2luZG93KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV93aW5kb3c7Ci19Ci0KLUhXTkQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVu
dFBhcmVudFdpbmRvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDo6R2V0UGFyZW50KG1fd2luZG93
KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50U2V0UGFyZW50V2luZG93KEhX
TkQgaG9zdFdpbmRvdykKLXsKLSAgICBzZXRQYXJlbnRXaW5kb3coaG9zdFdpbmRvdyk7Ci19Ci0K
LXZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudFdpbGxFbnRlckZ1bGxTY3JlZW4oKQotewot
ICAgIHBhZ2UoKS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+d2lsbEVudGVyRnVsbFNjcmVlbigpOwot
fQotCi12b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnREaWRFbnRlckZ1bGxTY3JlZW4oKQot
ewotICAgIHBhZ2UoKS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+ZGlkRW50ZXJGdWxsU2NyZWVuKCk7
Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudFdpbGxFeGl0RnVsbFNjcmVlbigp
Ci17Ci0gICAgcGFnZSgpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT53aWxsRXhpdEZ1bGxTY3JlZW4o
KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50RGlkRXhpdEZ1bGxTY3JlZW4o
KQotewotICAgIHBhZ2UoKS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+ZGlkRXhpdEZ1bGxTY3JlZW4o
KTsKLX0KLQotc3RhdGljIHZvaWQgZnVsbFNjcmVlbkNsaWVudEZvcmNlUmVwYWludENvbXBsZXRl
ZChXS0Vycm9yUmVmLCB2b2lkKiBjb250ZXh0KQotewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAg
ICBzdGF0aWNfY2FzdDxXZWJWaWV3Kj4oY29udGV4dCktPmZ1bGxTY3JlZW5Db250cm9sbGVyKCkt
PnJlcGFpbnRDb21wbGV0ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50
Rm9yY2VSZXBhaW50KCkKLXsKLSAgICBwYWdlKCktPmZvcmNlUmVwYWludChWb2lkQ2FsbGJhY2s6
OmNyZWF0ZSh0aGlzLCAmZnVsbFNjcmVlbkNsaWVudEZvcmNlUmVwYWludENvbXBsZXRlZCkpOwot
fQotCi0jZW5kaWYKLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
d2luL1dlYlZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk3ODlmM2UzMGQx
NGE0MWExMmY0NmE2ZjQ2MDdmY2QwZjc0MzYwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcu
aAorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBX
ZWJWaWV3X2gKLSNkZWZpbmUgV2ViVmlld19oCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNp
bmNsdWRlICJDb2FsZXNjZWRXaW5kb3dHZW9tZXRyaWVzVXBkYXRlci5oIgotI2luY2x1ZGUgIlBh
Z2VDbGllbnQuaCIKLSNpbmNsdWRlICJXS1ZpZXcuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKLSNpbmNsdWRlICJXZWJVbmRvQ2xpZW50LmgiCi0jaW5jbHVkZSA8U2hsT2JqLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RyYWdBY3Rpb25zLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93
TWVzc2FnZUxpc3RlbmVyLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkKLSNpbmNsdWRlIDxXZWJDb3JlL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xp
ZW50Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEZ1bGxTY3Jl
ZW5Db250cm9sbGVyOwotfQotCi1pbnRlcmZhY2UgSURyb3BUYXJnZXRIZWxwZXI7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBEcmF3aW5nQXJlYVByb3h5OwotCi1jbGFzcyBXZWJWaWV3
Ci0gICAgOiBwdWJsaWMgQVBJT2JqZWN0Ci0gICAgLCBwdWJsaWMgUGFnZUNsaWVudAotICAgICwg
V2ViQ29yZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyCi0gICAgLCBwdWJsaWMgSURyb3BUYXJnZXQg
Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgICwgV2ViQ29yZTo6RnVsbFNjcmVlbkNv
bnRyb2xsZXJDbGllbnQKLSNlbmRpZgotewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYlZpZXc+IGNyZWF0ZShSRUNUIHJlY3QsIFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VH
cm91cCogcGFnZUdyb3VwLCBIV05EIHBhcmVudFdpbmRvdykKLSAgICB7Ci0gICAgICAgIFJlZlB0
cjxXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHRSZWYobmV3IFdlYlZpZXcocmVjdCwgY29udGV4dCwg
cGFnZUdyb3VwLCBwYXJlbnRXaW5kb3cpKTsKLSAgICAgICAgd2ViVmlldy0+aW5pdGlhbGl6ZSgp
OwotICAgICAgICByZXR1cm4gd2ViVmlldzsKLSAgICB9Ci0gICAgfldlYlZpZXcoKTsKLQotICAg
IEhXTkQgd2luZG93KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3c7IH0KLSAgICB2b2lkIHNldFBh
cmVudFdpbmRvdyhIV05EKTsKLSAgICB2b2lkIHdpbmRvd0FuY2VzdHJ5RGlkQ2hhbmdlKCk7Ci0g
ICAgdm9pZCBzZXRJc0luV2luZG93KGJvb2wpOwotICAgIHZvaWQgc2V0SXNWaXNpYmxlKGJvb2wp
OwotICAgIHZvaWQgc2V0T3ZlcnJpZGVDdXJzb3IoSENVUlNPUik7Ci0gICAgdm9pZCBzZXRJbml0
aWFsRm9jdXMoYm9vbCBmb3J3YXJkLCBib29sIGlzS2V5Ym9hcmRFdmVudFZhbGlkLCBjb25zdCBX
ZWJLZXlib2FyZEV2ZW50Jik7Ci0gICAgdm9pZCBzZXRTY3JvbGxPZmZzZXRPbk5leHRSZXNpemUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZvaWQgc2V0RmluZEluZGljYXRvckNhbGxi
YWNrKFdLVmlld0ZpbmRJbmRpY2F0b3JDYWxsYmFjaywgdm9pZCopOwotICAgIFdLVmlld0ZpbmRJ
bmRpY2F0b3JDYWxsYmFjayBnZXRGaW5kSW5kaWNhdG9yQ2FsbGJhY2sodm9pZCoqKTsKLSAgICBi
b29sIHBhZ2VPdmVybGF5SW5zdGFsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3ZlcmxheUlu
c3RhbGxlZDsgfQotICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIAotICAgIHZvaWQgaW5pdGlh
bGl6ZVVuZG9DbGllbnQoY29uc3QgV0tWaWV3VW5kb0NsaWVudCopOwotICAgIHZvaWQgcmVhcHBs
eUVkaXRDb21tYW5kKFdlYkVkaXRDb21tYW5kUHJveHkqKTsKLSAgICB2b2lkIHVuYXBwbHlFZGl0
Q29tbWFuZChXZWJFZGl0Q29tbWFuZFByb3h5Kik7Ci0KLSAgICB2b2lkIHNldEN1c3RvbURyb3BU
YXJnZXQoSURyb3BUYXJnZXQqKTsKLQotICAgIC8vIElVbmtub3duCi0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiog
cHB2T2JqZWN0KTsKLSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZih2
b2lkKTsKLSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uodm9pZCk7
Ci0KLSAgICAvLyBJRHJvcFRhcmdldAotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBEcmFnRW50ZXIoSURhdGFPYmplY3QqIHBEYXRhT2JqZWN0LCBEV09SRCBncmZLZXlTdGF0
ZSwgUE9JTlRMIHB0LCBEV09SRCogcGR3RWZmZWN0KTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRHJhZ092ZXIoRFdPUkQgZ3JmS2V5U3RhdGUsIFBPSU5UTCBwdCwgRFdP
UkQqIHBkd0VmZmVjdCk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERy
YWdMZWF2ZSgpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEcm9wKElE
YXRhT2JqZWN0KiBwRGF0YU9iamVjdCwgRFdPUkQgZ3JmS2V5U3RhdGUsIFBPSU5UTCBwdCwgRFdP
UkQqIHBkd0VmZmVjdCk7Ci0KLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX3BhZ2UuZ2V0KCk7IH0KLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBXZWJD
b3JlOjpGdWxsU2NyZWVuQ29udHJvbGxlciogZnVsbFNjcmVlbkNvbnRyb2xsZXIoKTsKLSNlbmRp
ZgotCi1wcml2YXRlOgotICAgIFdlYlZpZXcoUkVDVCwgV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91
cCosIEhXTkQgcGFyZW50V2luZG93KTsKLQotICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gVHlwZVZpZXc7IH0KLQotICAgIHN0YXRpYyBib29sIHJlZ2lzdGVyV2ViVmlld1dp
bmRvd0NsYXNzKCk7Ci0gICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV2ViVmlld1duZFByb2Mo
SFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotICAgIExSRVNVTFQgd25kUHJvYyhIV05EIGhX
bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7Ci0KLSAgICBM
UkVTVUxUIG9uTW91c2VFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFS
QU0sIGJvb2wmIGhhbmRsZWQpOwotICAgIExSRVNVTFQgb25XaGVlbEV2ZW50KEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCk7Ci0gICAgTFJFU1VM
VCBvbkhvcml6b250YWxTY3JvbGwoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBB
UkFNLCBib29sJiBoYW5kbGVkKTsKLSAgICBMUkVTVUxUIG9uVmVydGljYWxTY3JvbGwoSFdORCBo
V25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKLSAgICBM
UkVTVUxUIG9uR2VzdHVyZU5vdGlmeShIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBM
UEFSQU0sIGJvb2wmIGhhbmRsZWQpOwotICAgIExSRVNVTFQgb25HZXN0dXJlKEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCk7Ci0gICAgTFJFU1VM
VCBvbktleUV2ZW50KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9v
bCYgaGFuZGxlZCk7Ci0gICAgTFJFU1VMVCBvblBhaW50RXZlbnQoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKLSAgICBMUkVTVUxUIG9uUHJp
bnRDbGllbnRFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJv
b2wmIGhhbmRsZWQpOwotICAgIExSRVNVTFQgb25TaXplRXZlbnQoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKLSAgICBMUkVTVUxUIG9uV2lu
ZG93UG9zaXRpb25DaGFuZ2VkRXZlbnQoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwg
TFBBUkFNLCBib29sJiBoYW5kbGVkKTsKLSAgICBMUkVTVUxUIG9uU2V0Rm9jdXNFdmVudChIV05E
IGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpOwotICAg
IExSRVNVTFQgb25LaWxsRm9jdXNFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFN
LCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpOwotICAgIExSRVNVTFQgb25UaW1lckV2ZW50KEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCk7Ci0gICAg
TFJFU1VMVCBvblNob3dXaW5kb3dFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFN
LCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpOwotICAgIExSRVNVTFQgb25TZXRDdXJzb3IoSFdORCBo
V25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKLQotICAg
IHZvaWQgcGFpbnQoSERDLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAg
IHZvaWQgc2V0V2FzQWN0aXZhdGVkQnlNb3VzZUV2ZW50KGJvb2wgZmxhZykgeyBtX3dhc0FjdGl2
YXRlZEJ5TW91c2VFdmVudCA9IGZsYWc7IH0KLSAgICBib29sIG9uSU1FU3RhcnRDb21wb3NpdGlv
bigpOwotICAgIGJvb2wgb25JTUVDb21wb3NpdGlvbihMUEFSQU0pOwotICAgIGJvb2wgb25JTUVF
bmRDb21wb3NpdGlvbigpOwotICAgIExSRVNVTFQgb25JTUVSZXF1ZXN0KFdQQVJBTSwgTFBBUkFN
KTsKLSAgICBib29sIG9uSU1FU2VsZWN0KFdQQVJBTSwgTFBBUkFNKTsKLSAgICBib29sIG9uSU1F
U2V0Q29udGV4dChXUEFSQU0sIExQQVJBTSk7Ci0gICAgdm9pZCByZXNldElNRSgpOwotICAgIHZv
aWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sKTsKLSAgICBISU1DIGdldElNTUNvbnRleHQoKTsK
LSAgICB2b2lkIHByZXBhcmVDYW5kaWRhdGVXaW5kb3coSElNQyk7Ci0gICAgTFJFU1VMVCBvbklN
RVJlcXVlc3RDaGFyUG9zaXRpb24oSU1FQ0hBUlBPU0lUSU9OKik7Ci0gICAgTFJFU1VMVCBvbklN
RVJlcXVlc3RSZWNvbnZlcnRTdHJpbmcoUkVDT05WRVJUU1RSSU5HKik7Ci0KLSAgICB2b2lkIHVw
ZGF0ZUFjdGl2ZVN0YXRlKCk7Ci0gICAgdm9pZCB1cGRhdGVBY3RpdmVTdGF0ZVNvb24oKTsKLQot
ICAgIHZvaWQgaW5pdGlhbGl6ZVRvb2xUaXBXaW5kb3coKTsKLQotICAgIHZvaWQgc3RhcnRUcmFj
a2luZ01vdXNlTGVhdmUoKTsKLSAgICB2b2lkIHN0b3BUcmFja2luZ01vdXNlTGVhdmUoKTsKLQot
ICAgIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZVRyYWNrUG9pbnRIYWNrKCk7Ci0KLSAgICB2b2lkIGNs
b3NlKCk7Ci0KLSAgICBIQ1VSU09SIGN1cnNvclRvU2hvdygpIGNvbnN0OwotICAgIHZvaWQgdXBk
YXRlTmF0aXZlQ3Vyc29yKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZUNoaWxkV2luZG93R2VvbWV0cmll
cygpOwotCi0gICAgLy8gUGFnZUNsaWVudAotICAgIHZpcnR1YWwgUGFzc093blB0cjxEcmF3aW5n
QXJlYVByb3h5PiBjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwg
dm9pZCBkaXNwbGF5VmlldygpOwotICAgIHZpcnR1YWwgYm9vbCBjYW5TY3JvbGxWaWV3KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVmlldyhjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZz
ZXQpOwotICAgIHZpcnR1YWwgdm9pZCBmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+JiB1cGRhdGVSZWN0cyk7Ci0gICAgCi0gICAgdmlydHVhbCBX
ZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKCk7Ci0gICAgdmlydHVhbCBib29sIGlzVmlld1dpbmRv
d0FjdGl2ZSgpOwotICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdGb2N1c2VkKCk7Ci0gICAgdmlydHVh
bCBib29sIGlzVmlld1Zpc2libGUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3SW5XaW5kb3co
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZFJlbGF1bmNoUHJvY2VzcygpOwotICAgIHZpcnR1YWwgdm9pZCBwYWdlQ2xvc2VkKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3Qg
V1RGOjpTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6
OkN1cnNvciYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92
ZXMoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhj
b25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVn
aXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdl
UHJveHk6OlVuZG9PclJlZG8pOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5k
cygpOwotICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJl
ZG8pOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRv
T3JSZWRvKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VT
cGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZs
b2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0g
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVl
bihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoS2V5
RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVk
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2VkKGJvb2wpOwot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gY3JlYXRlUG9wdXBNZW51
UHJveHkoV2ViUGFnZVByb3h5Kik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvbnRleHRN
ZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5Kik7Ci0jaWYgRU5B
QkxFKElOUFVUX1RZUEVfQ09MT1IpCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvbG9yQ2hv
b3NlclByb3h5PiBjcmVhdGVDb2xvckNob29zZXJQcm94eShXZWJQYWdlUHJveHkqLCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYgaW50aWFsQ29sb3IsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSNl
bmRpZgotICAgIHZpcnR1YWwgdm9pZCBzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZElu
ZGljYXRvcj4sIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkSW5zdGFsbE9yVW5pbnN0YWxsUGFnZU92ZXJsYXkoYm9vbCk7Ci0KLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOwotICAgIHZpcnR1YWwgdm9pZCBl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOwotI2Vu
ZGlmCi0KLSAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21S
ZXByZXNlbnRhdGlvbik7Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJl
cHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IENvcmVJ
UEM6OkRhdGFSZWZlcmVuY2UmKTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBjdXN0b21SZXByZXNlbnRh
dGlvblpvb21GYWN0b3IoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VzdG9tUmVwcmVzZW50YXRp
b25ab29tRmFjdG9yKGRvdWJsZSk7Ci0gICAgV2ViQ29yZTo6RHJhZ09wZXJhdGlvbiBrZXlTdGF0
ZVRvRHJhZ09wZXJhdGlvbihEV09SRCBncmZLZXlTdGF0ZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmlu
ZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwotICAgIHZpcnR1YWwgdm9pZCBjb3Vu
dFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRP
cHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKLQotICAgIHZpcnR1YWwgSFdORCBuYXRp
dmVXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDaGlsZFdpbmRvd0dlb21ldHJ5
VXBkYXRlKGNvbnN0IFdpbmRvd0dlb21ldHJ5Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0R2Vz
dHVyZVJlYWNoZWRTY3JvbGxpbmdMaW1pdChib29sIGxpbWl0UmVhY2hlZCkgeyBtX2dlc3R1cmVS
ZWFjaGVkU2Nyb2xsaW5nTGltaXQgPSBsaW1pdFJlYWNoZWQ7IH0KLQotICAgIC8vIFdlYkNvcmU6
OldpbmRvd01lc3NhZ2VMaXN0ZW5lcgotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dSZWNlaXZlZE1l
c3NhZ2UoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7Ci0KLSNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCi0gICAgdmlydHVhbCBIV05EIGZ1bGxTY3JlZW5DbGllbnRXaW5kb3co
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEhXTkQgZnVsbFNjcmVlbkNsaWVudFBhcmVudFdpbmRvdygp
IGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBmdWxsU2NyZWVuQ2xpZW50U2V0UGFyZW50V2luZG93
KEhXTkQpOwotICAgIHZpcnR1YWwgdm9pZCBmdWxsU2NyZWVuQ2xpZW50V2lsbEVudGVyRnVsbFNj
cmVlbigpOwotICAgIHZpcnR1YWwgdm9pZCBmdWxsU2NyZWVuQ2xpZW50RGlkRW50ZXJGdWxsU2Ny
ZWVuKCk7Ci0gICAgdmlydHVhbCB2b2lkIGZ1bGxTY3JlZW5DbGllbnRXaWxsRXhpdEZ1bGxTY3Jl
ZW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgZnVsbFNjcmVlbkNsaWVudERpZEV4aXRGdWxsU2NyZWVu
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGZ1bGxTY3JlZW5DbGllbnRGb3JjZVJlcGFpbnQoKTsKLSNl
bmRpZgotCi0gICAgSFdORCBtX3dpbmRvdzsKLSAgICBIV05EIG1fdG9wTGV2ZWxQYXJlbnRXaW5k
b3c7Ci0gICAgSFdORCBtX3Rvb2xUaXBXaW5kb3c7Ci0gICAgCi0gICAgV2ViQ29yZTo6SW50U2l6
ZSBtX25leHRSZXNpemVTY3JvbGxPZmZzZXQ7Ci0KLSAgICBIQ1VSU09SIG1fbGFzdEN1cnNvclNl
dDsKLSAgICBIQ1VSU09SIG1fd2ViQ29yZUN1cnNvcjsKLSAgICBIQ1VSU09SIG1fb3ZlcnJpZGVD
dXJzb3I7Ci0KLSAgICBib29sIG1faXNJbldpbmRvdzsKLSAgICBib29sIG1faXNWaXNpYmxlOwot
ICAgIGJvb2wgbV93YXNBY3RpdmF0ZWRCeU1vdXNlRXZlbnQ7Ci0gICAgYm9vbCBtX3RyYWNraW5n
TW91c2VMZWF2ZTsKLSAgICBib29sIG1faXNCZWluZ0Rlc3Ryb3llZDsKLQotICAgIFJlZlB0cjxX
ZWJQYWdlUHJveHk+IG1fcGFnZTsKLQotICAgIHVuc2lnbmVkIG1faW5JTUVDb21wb3NpdGlvbjsK
LQotICAgIFdlYlVuZG9DbGllbnQgbV91bmRvQ2xpZW50OwotCi0gICAgV0tWaWV3RmluZEluZGlj
YXRvckNhbGxiYWNrIG1fZmluZEluZGljYXRvckNhbGxiYWNrOwotICAgIHZvaWQqIG1fZmluZElu
ZGljYXRvckNhbGxiYWNrQ29udGV4dDsKLSAgICBib29sIG1fcGFnZU92ZXJsYXlJbnN0YWxsZWQ7
Ci0KLSAgICBDT01QdHI8SURhdGFPYmplY3Q+IG1fZHJhZ0RhdGE7Ci0gICAgQ09NUHRyPElEcm9w
VGFyZ2V0SGVscGVyPiBtX2Ryb3BUYXJnZXRIZWxwZXI7Ci0gICAgLy8gRklYTUU6IFRoaXMgdmFy
aWFibGUgaXMgcGFydCBvZiBhIHdvcmthcm91bmQuIFRoZSBkcm9wIGVmZmVjdCAocGR3RWZmZWN0
KSBwYXNzZWQgdG8gRHJvcCBpcyBpbmNvcnJlY3QuIAotICAgIC8vIFdlIHNldCB0aGlzIHZhcmlh
YmxlIGluIERyYWdFbnRlciBhbmQgRHJhZ092ZXIgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBpbiBE
cm9wIHRvIHNldCB0aGUgY29ycmVjdCBkcm9wIGVmZmVjdC4gCi0gICAgLy8gVGh1cywgb24gcmV0
dXJuIGZyb20gRG9EcmFnRHJvcCB3ZSBoYXZlIHRoZSBjb3JyZWN0IHBkd0VmZmVjdCBmb3IgdGhl
IGRyYWctYW5kLWRyb3Agb3BlcmF0aW9uLgotICAgIC8vIChzZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MjY0KQotICAgIERXT1JEIG1fbGFzdERyb3BFZmZlY3Q7
Ci0KLSAgICBpbnQgbV9sYXN0UGFuWDsKLSAgICBpbnQgbV9sYXN0UGFuWTsKLQotICAgIGludCBt
X292ZXJQYW5ZOwotCi0gICAgYm9vbCBtX2dlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQ7Ci0K
LSAgICBDb2FsZXNjZWRXaW5kb3dHZW9tZXRyaWVzVXBkYXRlciBtX2dlb21ldHJpZXNVcGRhdGVy
OwotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIE93blB0cjxXZWJDb3JlOjpGdWxs
U2NyZWVuQ29udHJvbGxlcj4gbV9mdWxsU2NyZWVuQ29udHJvbGxlcjsKLSNlbmRpZgotCi0jaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIEhXTkQgbV9sYXllckhvc3RXaW5kb3c7
Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViVmll
d19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9jZi93
aW4vRG93bmxvYWRDRldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fk
cy9jZi93aW4vRG93bmxvYWRDRldpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDBkZDY1MDg5MzFiNmY2MjUzYTgxM2ZkMDU1NDZlYzUxMjg4NjZhY2EuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9Eb3dubG9hZHMvY2Yvd2luL0Rvd25sb2FkQ0ZXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJE
b3dubG9hZC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLXZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtRGlkRmluaXNoKCkKLXsKLSAgICBBU1NFUlQo
IW1fYnVuZGxlUGF0aC5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCghbV9kZXN0aW5hdGlvbi5pc0Vt
cHR5KCkpOwotCi0gICAgLy8gVHJ5IHRvIG1vdmUgdGhlIGJ1bmRsZSB0byB0aGUgZmluYWwgZmls
ZW5hbWUuCi0gICAgRFdPUkQgZmxhZ3MgPSBNT1ZFRklMRV9DT1BZX0FMTE9XRUQgfCAobV9hbGxv
d092ZXJ3cml0ZSA/IE1PVkVGSUxFX1JFUExBQ0VfRVhJU1RJTkcgOiAwKTsKLSAgICBpZiAoOjpN
b3ZlRmlsZUV4VyhtX2J1bmRsZVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwg
bV9kZXN0aW5hdGlvbi5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBmbGFncykpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBtb3ZlIGZhaWxlZC4gR2l2ZSB0aGUgY2xpZW50
IG9uZSBtb3JlIGNoYW5jZSB0byBjaG9vc2UgdGhlIGZpbmFsIGZpbGVuYW1lLgotICAgIG1fZGVz
dGluYXRpb24gPSByZXRyaWV2ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKG1fZGVz
dGluYXRpb24sIG1fYWxsb3dPdmVyd3JpdGUpOwotICAgIGlmIChtX2Rlc3RpbmF0aW9uLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgZWl0aGVyIG5lZWQgdG8gcmVwb3J0
IG91ciBmaW5hbCBmaWxlbmFtZSBhcyB0aGUgYnVuZGxlIGZpbGVuYW1lIG9yIHRoZSB1cGRhdGVk
IGRlc3RpbmF0aW9uIGZpbGVuYW1lLgotICAgIGZsYWdzID0gTU9WRUZJTEVfQ09QWV9BTExPV0VE
IHwgKG1fYWxsb3dPdmVyd3JpdGUgPyBNT1ZFRklMRV9SRVBMQUNFX0VYSVNUSU5HIDogMCk7Ci0g
ICAgaWYgKDo6TW92ZUZpbGVFeFcobV9idW5kbGVQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIG1fZGVzdGluYXRpb24uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwg
ZmxhZ3MpKQotICAgICAgICBkaWRDcmVhdGVEZXN0aW5hdGlvbihtX2Rlc3RpbmF0aW9uKTsKLSAg
ICBlbHNlCi0gICAgICAgIGRpZENyZWF0ZURlc3RpbmF0aW9uKG1fYnVuZGxlUGF0aCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy93aW4vV0tCdW5kbGVQcml2YXRlV2luLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mvd2luL1dLQnVuZGxl
UHJpdmF0ZVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2M2EyMTE1NTI3
ZTZjMTA3ZDVlN2I1YzgyMjM3NGI1NTlmZTQ0NzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy93aW4vV0tCdW5kbGVQcml2YXRlV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
V0tCdW5kbGVQcml2YXRlV2luLmgiCi0KLSNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgotI2lu
Y2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwotCi12b2lkIFdLQnVuZGxlU2V0SG9zdEFsbG93c0FueUhUVFBT
Q2VydGlmaWNhdGUoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS1N0cmluZ1JlZiBob3N0KQotewot
ICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZSh0
b1dURlN0cmluZyhob3N0KSk7Ci19Ci0KLXZvaWQgV0tCdW5kbGVTZXRDbGllbnRDZXJ0aWZpY2F0
ZShXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIFdLU3RyaW5nUmVmIGNl
cnRpZmljYXRlU3lzdGVtU3RvcmVOYW1lLCBXS0NlcnRpZmljYXRlSW5mb1JlZiBjZXJ0aWZpY2F0
ZUluZm9SZWYpCi17Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPnNldENsaWVudENlcnRpZmljYXRl
KHRvV1RGU3RyaW5nKGhvc3QpLCB0b1dURlN0cmluZyhjZXJ0aWZpY2F0ZVN5c3RlbVN0b3JlTmFt
ZSksIHRvSW1wbChjZXJ0aWZpY2F0ZUluZm9SZWYpKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mvd2luL1dLQnVuZGxlUHJpdmF0
ZVdpbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy93
aW4vV0tCdW5kbGVQcml2YXRlV2luLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAz
MDA2ZGMxMTUzMmQ5MDBkODAyZjVhNDQxYmE1OWQ0ZDBlNTJjMGEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy93aW4vV0tCdW5kbGVQcml2YXRlV2luLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXS0J1bmRsZVByaXZhdGVX
aW5faAotI2RlZmluZSBXS0J1bmRsZVByaXZhdGVXaW5faAotCi0jaW5jbHVkZSA8V2ViS2l0Mi9X
S0Jhc2UuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1X
S19FWFBPUlQgdm9pZCBXS0J1bmRsZVNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKFdL
QnVuZGxlUmVmIGJ1bmRsZSwgV0tTdHJpbmdSZWYgaG9zdCk7Ci1XS19FWFBPUlQgdm9pZCBXS0J1
bmRsZVNldENsaWVudENlcnRpZmljYXRlKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tTdHJpbmdSZWYg
aG9zdCwgV0tTdHJpbmdSZWYgY2VydGlmaWNhdGVTeXN0ZW1TdG9yZU5hbWUsIFdLQ2VydGlmaWNh
dGVJbmZvUmVmIGNlcnRpZmljYXRlSW5mbyk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2Vu
ZGlmCi0KLSNlbmRpZiAvKiBXS0J1bmRsZVByaXZhdGVXaW5faCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS93aW4vSW5qZWN0ZWRCdW5kbGVX
aW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS93aW4vSW5q
ZWN0ZWRCdW5kbGVXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGM5YTkz
N2IyYjY2MWFkYTg4YWZkZThhZTg4M2Y5M2NlZGUzYzRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvd2luL0luamVjdGVkQnVuZGxlV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklu
amVjdGVkQnVuZGxlLmgiCi0KLSNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKLSNpbmNsdWRl
ICJXS0J1bmRsZUluaXRpYWxpemUuaCIKLSNpbmNsdWRlICJXZWJDZXJ0aWZpY2F0ZUluZm8uaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9T
aW1wbGVGb250RGF0YS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2luY2x1
ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3aW5iYXNlLmg+Ci0jaW5jbHVkZSA8c2hsb2JqLmg+
Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgotCi0jaWYgVVNFKENGTkVUV09SSykKLSNpbmNsdWRlIDxX
ZWJDb3JlL0NlcnRpZmljYXRlQ0ZXaW4uaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIEZJWE1FOiBUaGlzIHNob3VsZCB0cnkg
YW5kIHVzZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+LgotCi1zdGF0aWMgU3RyaW5nIHBhdGhHZXRG
aWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIFN0cmluZyg6OlBhdGhG
aW5kRmlsZU5hbWUoU3RyaW5nKHBhdGgpLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkp
KTsKLX0KLQotc3RhdGljIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkK
LXsKLSAgICBTdHJpbmcgZmlsZU5hbWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7Ci0gICAgU3Ry
aW5nIGRpck5hbWUgPSBTdHJpbmcocGF0aCk7Ci0gICAgZGlyTmFtZS50cnVuY2F0ZShkaXJOYW1l
Lmxlbmd0aCgpIC0gcGF0aEdldEZpbGVOYW1lKHBhdGgpLmxlbmd0aCgpKTsKLSAgICByZXR1cm4g
ZGlyTmFtZTsKLX0KLQotYm9vbCBJbmplY3RlZEJ1bmRsZTo6bG9hZChBUElPYmplY3QqIGluaXRp
YWxpemF0aW9uVXNlckRhdGEpCi17Ci0gICAgV0NIQVIgY3VycmVudFBhdGhbTUFYX1BBVEhdOwot
ICAgIGlmICghOjpHZXRDdXJyZW50RGlyZWN0b3J5VyhNQVhfUEFUSCwgY3VycmVudFBhdGgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmcgZGlyZWN0b3JCdW5kbGVSZXNpZGVz
SW4gPSBkaXJlY3RvcnlOYW1lKG1fcGF0aCk7Ci0gICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3Rv
cnlXKGRpcmVjdG9yQnVuZGxlUmVzaWRlc0luLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3BsYXRmb3JtQnVuZGxlID0gOjpM
b2FkTGlicmFyeUV4VyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwg
TE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgpOwotICAgIGlmICghbV9wbGF0Zm9ybUJ1bmRs
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgZGly
ZWN0b3J5LgotICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFdLQnVuZGxlSW5pdGlhbGl6ZUZ1
bmN0aW9uUHRyIGluaXRpYWxpemVGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tCdW5kbGVJ
bml0aWFsaXplRnVuY3Rpb25QdHI+KDo6R2V0UHJvY0FkZHJlc3MobV9wbGF0Zm9ybUJ1bmRsZSwg
IldLQnVuZGxlSW5pdGlhbGl6ZSIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVGdW5jdGlvbikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW5pdGlhbGl6ZUZ1bmN0aW9uKHRvQVBJKHRoaXMp
LCB0b0FQSShpbml0aWFsaXphdGlvblVzZXJEYXRhKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgSW5qZWN0ZWRCdW5kbGU6OmFjdGl2YXRlTWFjRm9udEFzY2VudEhhY2soKQotewotICAg
IFNpbXBsZUZvbnREYXRhOjpzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2sodHJ1ZSk7Ci19Ci0K
LXZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNv
bnN0IFN0cmluZyYgaG9zdCkKLXsKLSNpZiBVU0UoQ0ZORVRXT1JLKQotICAgIFJlc291cmNlSGFu
ZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShob3N0KTsKLSNlbmRpZgotfQot
Ci12b2lkIEluamVjdGVkQnVuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcm
IGhvc3QsIGNvbnN0IFN0cmluZyYgY2VydGlmaWNhdGVTeXN0ZW1TdG9yZU5hbWUsIGNvbnN0IFdl
YkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGVJbmZvKQotewotI2lmIFVTRShDRk5FVFdPUksp
Ci0gICAgQVNTRVJUX0FSRyhjZXJ0aWZpY2F0ZUluZm8sIGNlcnRpZmljYXRlSW5mbyk7Ci0gICAg
aWYgKCFjZXJ0aWZpY2F0ZUluZm8pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBjb25zdCBW
ZWN0b3I8UENDRVJUX0NPTlRFWFQ+IGNlcnRpZmljYXRlQ2hhaW4gPSBjZXJ0aWZpY2F0ZUluZm8t
PnBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvKCkuY2VydGlmaWNhdGVDaGFpbigpOwotICAgIEFTU0VS
VChjZXJ0aWZpY2F0ZUNoYWluLnNpemUoKSA9PSAxKTsKLSAgICBpZiAoY2VydGlmaWNhdGVDaGFp
bi5zaXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVF9BUkcoY2Vy
dGlmaWNhdGVTeXN0ZW1TdG9yZU5hbWUsICFjZXJ0aWZpY2F0ZVN5c3RlbVN0b3JlTmFtZS5pc0Vt
cHR5KCkpOwotICAgIGlmIChjZXJ0aWZpY2F0ZVN5c3RlbVN0b3JlTmFtZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBUaGUgUENDRVJUX0NPTlRFWFQgaW4gdGhlIFdl
YkNlcnRpZmljYXRlSW5mbyB3ZSBjcmVhdGVkIHVzaW5nIHRoZSBtZXNzYWdlIGZyb20gdGhlIFVJ
IHByb2Nlc3MgZG9lc24ndCBjb250YWluIGVub3VnaCBpbmZvcm1hdGlvbgotICAgIC8vIHRvIGFj
dHVhbGx5IHVzZSBpdCBpbiBhIHJlcXVlc3QsIHdlIG5lZWQgdG8gZ2V0IHRoZSByZWFsIGNlcnRp
ZmljYXRlIGZyb20gdGhlIGNlcnRpZmljYXRlIHN0b3JlICh3aGljaCBpcyB0eXBpY2FsbHkgdGhl
ICJNWSIgc3RvcmUpLgotICAgIFN0cmluZyBtdXRhYmxlQ2VydGlmaWNhdGVTeXN0ZW1TdG9yZU5h
bWUgPSBjZXJ0aWZpY2F0ZVN5c3RlbVN0b3JlTmFtZTsKLSAgICBIQ0VSVFNUT1JFIGNlcnRTdG9y
ZSA9IDo6Q2VydE9wZW5TeXN0ZW1TdG9yZSgwLCBtdXRhYmxlQ2VydGlmaWNhdGVTeXN0ZW1TdG9y
ZU5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7Ci0gICAgaWYgKCFjZXJ0U3Rv
cmUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qgb3BlbiBzeXN0ZW0gY2VydGlmaWNh
dGUgc3RvcmUgJXMiLCBjZXJ0aWZpY2F0ZVN5c3RlbVN0b3JlTmFtZS5hc2NpaSgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgUENDRVJUX0NPTlRFWFQgcmVhbENl
cnQgPSA6OkNlcnRGaW5kQ2VydGlmaWNhdGVJblN0b3JlKGNlcnRTdG9yZSwgWDUwOV9BU05fRU5D
T0RJTkcgfCBQS0NTXzdfQVNOX0VOQ09ESU5HLCAwLCBDRVJUX0ZJTkRfRVhJU1RJTkcsIGNlcnRp
ZmljYXRlQ2hhaW4uZmlyc3QoKSwgMCk7Ci0gICAgaWYgKCFyZWFsQ2VydCkgewotICAgICAgICBM
T0dfRVJST1IoIkNvdWxkIG5vdCBmaW5kIGNlcnRpZmljYXRlIGluIHN5c3RlbSBjZXJ0aWZpY2F0
ZSBzdG9yZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVzb3VyY2VIYW5kbGU6
OnNldENsaWVudENlcnRpZmljYXRlKGhvc3QsIFdlYkNvcmU6OmNvcHlDZXJ0aWZpY2F0ZVRvRGF0
YShyZWFsQ2VydCkuZ2V0KCkpOwotICAgIENlcnRGcmVlQ2VydGlmaWNhdGVDb250ZXh0KHJlYWxD
ZXJ0KTsKLQotICAgIC8vIFdlIGNhbid0IGNsb3NlIGNlcnRTdG9yZSBoZXJlLCBzaW5jZSB0aGUg
Y2VydGlmaWNhdGUgaXMgc3RpbGwgaW4gdXNlLgotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL3dpbi9OZXRzY2FwZVBsdWdpbldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvd2luL05ldHNjYXBlUGx1Z2luV2luLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOWQwZGViMjdjNDRmNjZlODc2YWY4MGFmZjJhYzE2YjVjYjgx
ODFjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvd2luL05ldHNjYXBlUGx1Z2lu
V2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z2luLmgiCi0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIlBsdWdpbkNvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJXZWJFdmVudC5oIgotI2luY2x1ZGUgIldpbmRvd0dlb21ldHJ5LmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9EZWZXbmRQcm9jV2luZG93Q2xhc3MuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTG9jYWxXaW5kb3dzQ29udGV4
dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBOZXRzY2FwZVBsdWdpbiogY3VycmVudFBs
dWdpbjsKLQotY2xhc3MgQ3VycmVudFBsdWdpblNldHRlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ3VycmVudFBsdWdpblNldHRlcik7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ3VycmVu
dFBsdWdpblNldHRlcihOZXRzY2FwZVBsdWdpbiogcGx1Z2luKQotICAgICAgICA6IG1fcGx1Z2lu
KHBsdWdpbikKLSAgICAgICAgLCBtX2Zvcm1lckN1cnJlbnRQbHVnaW4oY3VycmVudFBsdWdpbikK
LSAgICB7Ci0gICAgICAgIGN1cnJlbnRQbHVnaW4gPSBtX3BsdWdpbjsKLSAgICB9Ci0KLSAgICB+
Q3VycmVudFBsdWdpblNldHRlcigpCi0gICAgewotICAgICAgICBBU1NFUlQoY3VycmVudFBsdWdp
biA9PSBtX3BsdWdpbik7Ci0gICAgICAgIGN1cnJlbnRQbHVnaW4gPSBtX2Zvcm1lckN1cnJlbnRQ
bHVnaW47Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE5ldHNjYXBlUGx1Z2luKiBtX3BsdWdpbjsK
LSAgICBOZXRzY2FwZVBsdWdpbiogbV9mb3JtZXJDdXJyZW50UGx1Z2luOwotfTsKLQotc3RhdGlj
IExQQ1dTVFIgd2luZG93Q2xhc3NOYW1lID0gTCJvcmcud2Via2l0Lk5ldHNjYXBlUGx1Z2luV2lu
ZG93IjsKLQotc3RhdGljIHZvaWQgcmVnaXN0ZXJQbHVnaW5WaWV3KCkKLXsKLSAgICBzdGF0aWMg
Ym9vbCBkaWRSZWdpc3RlcjsKLSAgICBpZiAoZGlkUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBkaWRSZWdpc3RlciA9IHRydWU7Ci0KLSAgICBXTkRDTEFTU1cgd2luZG93Q2xhc3MgPSB7
MH07Ci0gICAgd2luZG93Q2xhc3Muc3R5bGUgPSBDU19EQkxDTEtTOwotICAgIHdpbmRvd0NsYXNz
LmxwZm5XbmRQcm9jID0gOjpEZWZXaW5kb3dQcm9jVzsKLSAgICB3aW5kb3dDbGFzcy5oSW5zdGFu
Y2UgPSBpbnN0YW5jZUhhbmRsZSgpOwotICAgIHdpbmRvd0NsYXNzLmhDdXJzb3IgPSA6OkxvYWRD
dXJzb3JXKDAsIElEQ19BUlJPVyk7Ci0gICAgd2luZG93Q2xhc3MuaGJyQmFja2dyb3VuZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8SEJSVVNIPihDT0xPUl9XSU5ET1cgKyAxKTsKLSAgICB3aW5kb3dDbGFz
cy5scHN6Q2xhc3NOYW1lID0gd2luZG93Q2xhc3NOYW1lOwotCi0gICAgOjpSZWdpc3RlckNsYXNz
Vygmd2luZG93Q2xhc3MpOwotfQotCi1IV05EIE5ldHNjYXBlUGx1Z2luOjpjb250YWluaW5nV2lu
ZG93KCkKLXsKLSAgICByZXR1cm4gY29udHJvbGxlcigpLT5uYXRpdmVQYXJlbnRXaW5kb3coKTsK
LX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1Qb3N0SW5pdGlhbGl6ZSgpCi17Ci0g
ICAgaWYgKCFtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgbV93aW5kb3cgPSAwOwotCi0gICAgICAg
IC8vIFdpbmRvd2xlc3MgcGx1Z2lucyBuZWVkIGEgbGl0dGxlIGhlbHAgc2hvd2luZyBjb250ZXh0
IG1lbnVzIHNpbmNlIG91ciBjb250YWluaW5nV2luZG93KCkKLSAgICAgICAgLy8gaXMgaW4gYSBk
aWZmZXJlbnQgcHJvY2Vzcy4gU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzUxMDYzPi4KLSAgICAg
ICAgbV9wbHVnaW5Nb2R1bGUtPm1vZHVsZSgpLT5pbnN0YWxsSUFUSG9vaygidXNlcjMyLmRsbCIs
ICJUcmFja1BvcHVwTWVudSIsIGhvb2tlZFRyYWNrUG9wdXBNZW51KTsKLSAgICAgICAgbV9jb250
ZXh0TWVudU93bmVyV2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeFcoMCwgZGVmV25kUHJvY1dpbmRv
d0NsYXNzTmFtZSgpLCAwLCBXU19DSElMRCwgMCwgMCwgMCwgMCwgY29udGFpbmluZ1dpbmRvdygp
LCAwLCBpbnN0YW5jZUhhbmRsZSgpLCAwKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZWdpc3RlclBsdWdpblZpZXcoKTsKLQotICAgIC8vIFN0YXJ0IG91dCB3aXRoIHRo
ZSB3aW5kb3cgaGlkZGVuLiBUaGUgVUkgcHJvY2VzcyB3aWxsIHRha2UgY2FyZSBvZiBzaG93aW5n
IGl0IG9uY2UgaXQncyBjb3JyZWN0bHkgcG9zaXRpb25lZCB0aGUgd2luZG93LgotICAgIG1fd2lu
ZG93ID0gOjpDcmVhdGVXaW5kb3dFeFcoMCwgd2luZG93Q2xhc3NOYW1lLCAwLCBXU19DSElMRCwg
MCwgMCwgMCwgMCwgY29udGFpbmluZ1dpbmRvdygpLCAwLCBpbnN0YW5jZUhhbmRsZSgpLCAwKTsK
LSAgICBpZiAoIW1fd2luZG93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhN
RTogRG8gd2UgbmVlZCB0byBwYXNzIG91ciB3aW5kb3cgdG8gc2V0UGxhdGZvcm1XaWRnZXQ/Ci0g
ICAgLy8gRklYTUU6IFdlYkNvcmU6OlBsdWdpblZpZXcgc2V0cyB0aGUgd2luZG93IHByb2MgdG8g
RGVmV2luZG93UHJvY0EgaGVyZSBmb3IgU2hvY2t3YXZlIERpcmVjdG9yLgotCi0gICAgbV9ucFdp
bmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OwotICAgIG1fbnBXaW5kb3cud2luZG93ID0g
bV93aW5kb3c7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6
cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBpZiAoIW1faXNXaW5kb3dlZCkgewotICAgICAgICBB
U1NFUlQobV9jb250ZXh0TWVudU93bmVyV2luZG93KTsKLSAgICAgICAgOjpEZXN0cm95V2luZG93
KG1fY29udGV4dE1lbnVPd25lcldpbmRvdyk7Ci0gICAgICAgIEFTU0VSVCghbV93aW5kb3cpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCE6OklzV2luZG93KG1fd2luZG93KSkK
LSAgICAgICAgcmV0dXJuOwotICAgIDo6RGVzdHJveVdpbmRvdyhtX3dpbmRvdyk7Ci19Ci0KLWJv
b2wgTmV0c2NhcGVQbHVnaW46OnBsYXRmb3JtSW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBpbnZh
bGlkUmVjdCkKLXsKLSAgICBpZiAoIW1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgUkVDVCByZWN0ID0gaW52YWxpZFJlY3Q7Ci0gICAgOjpJbnZhbGlkYXRlUmVjdCht
X3dpbmRvdywgJnJlY3QsIEZBTFNFKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBOZXRz
Y2FwZVBsdWdpbjo6cGxhdGZvcm1HZW9tZXRyeURpZENoYW5nZSgpCi17Ci0gICAgaWYgKCFtX2lz
V2luZG93ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNjaGVkdWxlV2luZG93ZWRHZW9tZXRy
eVVwZGF0ZSgpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpwbGF0Zm9ybVZpc2liaWxpdHlE
aWRDaGFuZ2UoKQotewotICAgIGlmICghbV9pc1dpbmRvd2VkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzY2hlZHVsZVdpbmRvd2VkR2VvbWV0cnlVcGRhdGUoKTsKLX0KLQotdm9pZCBOZXRzY2Fw
ZVBsdWdpbjo6c2NoZWR1bGVXaW5kb3dlZEdlb21ldHJ5VXBkYXRlKCkKLXsKLSAgICAvLyBXZSBv
bmx5IHVwZGF0ZSB0aGUgc2l6ZSBoZXJlIGFuZCBsZXQgdGhlIFVJIHByb2Nlc3MgdXBkYXRlIG91
ciBwb3NpdGlvbiBhbmQgY2xpcCByZWN0IHNvCi0gICAgLy8gdGhhdCB3ZSBjYW4ga2VlcCBvdXIg
cG9zaXRpb24gaW4gc3luYyB3aGVuIHNjcm9sbGluZywgZXRjLiBTZWUgPGh0dHA6Ly93ZWJraXQu
b3JnL2IvNjAyMTA+LgotICAgIDo6U2V0V2luZG93UG9zKG1fd2luZG93LCAwLCAwLCAwLCBtX3Bs
dWdpblNpemUud2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpLCBTV1BfTk9BQ1RJVkFURSB8
IFNXUF9OT01PVkUgfCBTV1BfTk9PV05FUlpPUkRFUiB8IFNXUF9OT1pPUkRFUik7Ci0KLSAgICBX
aW5kb3dHZW9tZXRyeSBnZW9tZXRyeTsKLSAgICBnZW9tZXRyeS53aW5kb3cgPSBtX3dpbmRvdzsK
LSAgICBnZW9tZXRyeS52aXNpYmxlID0gY29udHJvbGxlcigpLT5pc1BsdWdpblZpc2libGUoKTsK
LSAgICBnZW9tZXRyeS5mcmFtZSA9IEludFJlY3QoY29udmVydFRvUm9vdFZpZXcoSW50UG9pbnQo
KSksIG1fcGx1Z2luU2l6ZSk7Ci0gICAgZ2VvbWV0cnkuY2xpcFJlY3QgPSBtX2NsaXBSZWN0Owot
Ci0gICAgY29udHJvbGxlcigpLT5zY2hlZHVsZVdpbmRvd2VkUGx1Z2luR2VvbWV0cnlVcGRhdGUo
Z2VvbWV0cnkpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpwbGF0Zm9ybVBhaW50KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBib29sKQotewot
ICAgIEN1cnJlbnRQbHVnaW5TZXR0ZXIgc2V0Q3VycmVudFBsdWdpbih0aGlzKTsKLQotICAgIC8v
IEZJWE1FOiBDYWxsIFNldFdpbmRvdyBoZXJlIGlmIHdlIGhhdmVuJ3QgY2FsbGVkIGl0IHlldCAo
c2VlIHI1OTkwNCkuCi0KLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBQYWludCB3aW5kb3dlZCBwbHVnaW5zIGludG8gY29udGV4dCBpZiBjb250ZXh0LT5zaG91bGRJ
bmNsdWRlQ2hpbGRXaW5kb3dzKCkgaXMgdHJ1ZS4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGNvbnRyb2xsZXIoKS0+d2lsbFNlbmRFdmVudFRvUGx1Z2luKCk7Ci0gICAgCi0gICAgTG9j
YWxXaW5kb3dzQ29udGV4dCB3aW5kb3dzQ29udGV4dChjb250ZXh0LCBkaXJ0eVJlY3QsIG1faXNU
cmFuc3BhcmVudCk7Ci0KLSAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJs
ZTsKLSAgICBtX25wV2luZG93LndpbmRvdyA9IHdpbmRvd3NDb250ZXh0LmhkYygpOwotCi0gICAg
V0lORE9XUE9TIHdpbmRvd3BvcyA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OwotCi0gICAgSW50
UG9pbnQgcGx1Z2luTG9jYXRpb25JblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBjb252ZXJ0VG9Sb290
VmlldyhJbnRQb2ludCgpKTsKLQotICAgIHdpbmRvd3Bvcy54ID0gcGx1Z2luTG9jYXRpb25JblJv
b3RWaWV3Q29vcmRpbmF0ZXMueCgpOwotICAgIHdpbmRvd3Bvcy55ID0gcGx1Z2luTG9jYXRpb25J
blJvb3RWaWV3Q29vcmRpbmF0ZXMueSgpOwotICAgIHdpbmRvd3Bvcy5jeCA9IG1fcGx1Z2luU2l6
ZS53aWR0aCgpOwotICAgIHdpbmRvd3Bvcy5jeSA9IG1fcGx1Z2luU2l6ZS5oZWlnaHQoKTsKLQot
ICAgIE5QRXZlbnQgbnBFdmVudDsKLSAgICBucEV2ZW50LmV2ZW50ID0gV01fV0lORE9XUE9TQ0hB
TkdFRDsKLSAgICBucEV2ZW50LndQYXJhbSA9IDA7Ci0gICAgbnBFdmVudC5sUGFyYW0gPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oJndpbmRvd3Bvcyk7Ci0KLSAgICBOUFBfSGFuZGxlRXZl
bnQoJm5wRXZlbnQpOwotCi0gICAgY2FsbFNldFdpbmRvdygpOwotCi0gICAgUkVDVCBkaXJ0eVdp
blJlY3QgPSBkaXJ0eVJlY3Q7Ci0KLSAgICBucEV2ZW50LmV2ZW50ID0gV01fUEFJTlQ7Ci0gICAg
bnBFdmVudC53UGFyYW0gPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4od2luZG93c0NvbnRl
eHQuaGRjKCkpOwotICAgIG5wRXZlbnQubFBhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KCZkaXJ0eVdpblJlY3QpOwotCi0gICAgTlBQX0hhbmRsZUV2ZW50KCZucEV2ZW50KTsKLX0K
LQotTlBFdmVudCB0b05QKGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQotewotICAgIE5QRXZl
bnQgbnBFdmVudDsKLQotICAgIG5wRXZlbnQud1BhcmFtID0gMDsKLSAgICBpZiAoZXZlbnQuY29u
dHJvbEtleSgpKQotICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19DT05UUk9MOwotICAgIGlm
IChldmVudC5zaGlmdEtleSgpKQotICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19TSElGVDsK
LQotICAgIG5wRXZlbnQubFBhcmFtID0gTUFLRUxQQVJBTShldmVudC5wb3NpdGlvbigpLngoKSwg
ZXZlbnQucG9zaXRpb24oKS55KCkpOwotCi0gICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKLSAg
ICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6Ci0gICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9N
T1VTRU1PVkU7Ci0gICAgICAgIHN3aXRjaCAoZXZlbnQuYnV0dG9uKCkpIHsKLSAgICAgICAgY2Fz
ZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgotICAgICAgICAgICAgbnBFdmVudC53UGFyYW0g
fD0gTUtfTEJVVFRPTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6Ok1pZGRsZUJ1dHRvbjoKLSAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX01C
VVRUT047Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpS
aWdodEJ1dHRvbjoKLSAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1JCVVRUT047Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbjoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V2ViRXZlbnQ6Ok1vdXNlRG93bjoKLSAgICAgICAgc3dpdGNoIChldmVudC5idXR0b24oKSkgewot
ICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246Ci0gICAgICAgICAgICBucEV2
ZW50LmV2ZW50ID0gV01fTEJVVFRPTkRPV047Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBXZWJNb3VzZUV2ZW50OjpNaWRkbGVCdXR0b246Ci0gICAgICAgICAgICBucEV2ZW50LmV2
ZW50ID0gV01fTUJVVFRPTkRPV047Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBX
ZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKLSAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBX
TV9SQlVUVE9ORE9XTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6Ok5vQnV0dG9uOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYkV2
ZW50OjpNb3VzZVVwOgotICAgICAgICBzd2l0Y2ggKGV2ZW50LmJ1dHRvbigpKSB7Ci0gICAgICAg
IGNhc2UgV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKLSAgICAgICAgICAgIG5wRXZlbnQuZXZl
bnQgPSBXTV9MQlVUVE9OVVA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXZWJN
b3VzZUV2ZW50OjpNaWRkbGVCdXR0b246Ci0gICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01f
TUJVVFRPTlVQOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViTW91c2VFdmVu
dDo6UmlnaHRCdXR0b246Ci0gICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTlVQ
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6Tm9CdXR0
b246Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnBF
dmVudDsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1IYW5kbGVNb3VzZUV2ZW50
KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQotewotICAgIEN1cnJlbnRQbHVnaW5TZXR0ZXIg
c2V0Q3VycmVudFBsdWdpbih0aGlzKTsKLQotICAgIGlmIChtX2lzV2luZG93ZWQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGNvbnRyb2xsZXIoKS0+d2lsbFNlbmRFdmVudFRvUGx1Z2lu
KCk7Ci0KLSAgICBOUEV2ZW50IG5wRXZlbnQgPSB0b05QKGV2ZW50KTsKLSAgICBOUFBfSGFuZGxl
RXZlbnQoJm5wRXZlbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1
Z2luOjpwbGF0Zm9ybUhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpCi17Ci0g
ICAgQ3VycmVudFBsdWdpblNldHRlciBzZXRDdXJyZW50UGx1Z2luKHRoaXMpOwotCi0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVn
aW46OnBsYXRmb3JtU2V0Rm9jdXMoYm9vbCBoYXNGb2N1cykKLXsKLSAgICBDdXJyZW50UGx1Z2lu
U2V0dGVyIHNldEN1cnJlbnRQbHVnaW4odGhpcyk7Ci0KLSAgICBpZiAobV9pc1dpbmRvd2VkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjb250cm9sbGVyKCktPndpbGxTZW5kRXZlbnRUb1BsdWdp
bigpOwotCi0gICAgTlBFdmVudCBucEV2ZW50OwotICAgIG5wRXZlbnQuZXZlbnQgPSBoYXNGb2N1
cyA/IFdNX1NFVEZPQ1VTIDogV01fS0lMTEZPQ1VTOwotICAgIG5wRXZlbnQud1BhcmFtID0gMDsK
LSAgICBucEV2ZW50LmxQYXJhbSA9IDA7Ci0KLSAgICBOUFBfSGFuZGxlRXZlbnQoJm5wRXZlbnQp
OwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjp3YW50c1BsdWdpblJlbGF0aXZlTlBXaW5kb3dD
b29yZGluYXRlcygpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1
Z2luOjpwbGF0Zm9ybUhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBl
dmVudCkKLXsKLSAgICBDdXJyZW50UGx1Z2luU2V0dGVyIHNldEN1cnJlbnRQbHVnaW4odGhpcyk7
Ci0KLSAgICBpZiAobV9pc1dpbmRvd2VkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBj
b250cm9sbGVyKCktPndpbGxTZW5kRXZlbnRUb1BsdWdpbigpOwotCi0gICAgTlBFdmVudCBucEV2
ZW50ID0gdG9OUChldmVudCk7Ci0gICAgTlBQX0hhbmRsZUV2ZW50KCZucEV2ZW50KTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1IYW5kbGVNb3Vz
ZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCi17Ci0gICAgQ3VycmVudFBs
dWdpblNldHRlciBzZXRDdXJyZW50UGx1Z2luKHRoaXMpOwotCi0gICAgaWYgKG1faXNXaW5kb3dl
ZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29udHJvbGxlcigpLT53aWxsU2VuZEV2
ZW50VG9QbHVnaW4oKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudCA9IHRvTlAoZXZlbnQpOwotICAg
IE5QUF9IYW5kbGVFdmVudCgmbnBFdmVudCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
TmV0c2NhcGVQbHVnaW46OnBsYXRmb3JtSGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXli
b2FyZEV2ZW50JikKLXsKLSAgICBDdXJyZW50UGx1Z2luU2V0dGVyIHNldEN1cnJlbnRQbHVnaW4o
dGhpcyk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Qk9PTCBOZXRzY2FwZVBsdWdpbjo6aG9va2VkVHJhY2tQb3B1cE1lbnUoSE1FTlUgaE1lbnUsIFVJ
TlQgdUZsYWdzLCBpbnQgeCwgaW50IHksIGludCBuUmVzZXJ2ZWQsIEhXTkQgaFduZCwgY29uc3Qg
UkVDVCogcHJjUmVjdCkKLXsKLSAgICAvLyA6OlRyYWNrUG9wdXBNZW51IGZhaWxzIHdoZW4gaXQg
aXMgcGFzc2VkIGEgd2luZG93IHRoYXQgaXMgb3duZWQgYnkgYW5vdGhlciB0aHJlYWQuIElmIHRo
aXMKLSAgICAvLyBoYXBwZW5zLCB3ZSBzdWJzdGl0dXRlIGEgZHVtbXkgd2luZG93IHRoYXQgaXMg
b3duZWQgYnkgdGhpcyB0aHJlYWQuCi0KLSAgICBpZiAoOjpHZXRXaW5kb3dUaHJlYWRQcm9jZXNz
SWQoaFduZCwgMCkgPT0gOjpHZXRDdXJyZW50VGhyZWFkSWQoKSkKLSAgICAgICAgcmV0dXJuIDo6
VHJhY2tQb3B1cE1lbnUoaE1lbnUsIHVGbGFncywgeCwgeSwgblJlc2VydmVkLCBoV25kLCBwcmNS
ZWN0KTsKLQotICAgIEhXTkQgb3JpZ2luYWxGb2N1c1dpbmRvdyA9IDA7Ci0KLSAgICBBU1NFUlQo
Y3VycmVudFBsdWdpbik7Ci0gICAgaWYgKGN1cnJlbnRQbHVnaW4pIHsKLSAgICAgICAgQVNTRVJU
KCFjdXJyZW50UGx1Z2luLT5tX2lzV2luZG93ZWQpOwotICAgICAgICBBU1NFUlQoY3VycmVudFBs
dWdpbi0+bV9jb250ZXh0TWVudU93bmVyV2luZG93KTsKLSAgICAgICAgQVNTRVJUKDo6R2V0V2lu
ZG93VGhyZWFkUHJvY2Vzc0lkKGN1cnJlbnRQbHVnaW4tPm1fY29udGV4dE1lbnVPd25lcldpbmRv
dywgMCkgPT0gOjpHZXRDdXJyZW50VGhyZWFkSWQoKSk7Ci0gICAgICAgIGhXbmQgPSBjdXJyZW50
UGx1Z2luLT5tX2NvbnRleHRNZW51T3duZXJXaW5kb3c7Ci0KLSAgICAgICAgLy8gSWYgd2UgZG9u
J3QgZm9jdXMgdGhlIGR1bW15IHdpbmRvdywgdGhlIHVzZXIgd2lsbCBiZSBhYmxlIHRvIHNjcm9s
bCB0aGUgcGFnZSB3aGlsZSB0aGUKLSAgICAgICAgLy8gY29udGV4dCBtZW51IGlzIHVwLCBlLmcu
Ci0gICAgICAgIG9yaWdpbmFsRm9jdXNXaW5kb3cgPSA6OlNldEZvY3VzKGhXbmQpOwotICAgIH0K
LQotICAgIEJPT0wgcmVzdWx0ID0gOjpUcmFja1BvcHVwTWVudShoTWVudSwgdUZsYWdzLCB4LCB5
LCBuUmVzZXJ2ZWQsIGhXbmQsIHByY1JlY3QpOwotCi0gICAgaWYgKG9yaWdpbmFsRm9jdXNXaW5k
b3cpCi0gICAgICAgIDo6U2V0Rm9jdXMob3JpZ2luYWxGb2N1c1dpbmRvdyk7Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViQ29udGV4dE1lbnVDbGllbnRXaW4uY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViQ29udGV4dE1lbnVD
bGllbnRXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODY2YzFkZTI2M2Zl
NWY1OGZlNDA1YTYxNGIwNmFhYmQ3ODUyNzNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvd2luL1dlYkNvbnRleHRNZW51Q2xpZW50V2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2Vi
Q29udGV4dE1lbnVDbGllbnQuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9p
ZCBXZWJDb250ZXh0TWVudUNsaWVudDo6bG9va1VwSW5EaWN0aW9uYXJ5KEZyYW1lKikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFdlYkNvbnRleHRNZW51Q2xpZW50Ojppc1Nw
ZWFraW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBXZWJDb250ZXh0TWVudUNsaWVudDo6c3BlYWsoY29uc3QgU3RyaW5nJikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50OjpzdG9w
U3BlYWtpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC93aW4vV2ViRHJhZ0NsaWVudFdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJEcmFnQ2xpZW50V2luLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTU0YTU1YjZjMjQ3NTczYjMyNDQ2YjVjY2E4YjFjNGMzMGI2MjYxOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJEcmFnQ2xpZW50V2luLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIldlYkRyYWdDbGllbnQuaCIKLQotI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUg
IldlYlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvQml0bWFwSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRXaW4uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RyYWdDb250
cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8
c2hsb2JqLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotc3RhdGljIERXT1JEIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza1RvRHJhZ0N1cnNv
cnMoRHJhZ09wZXJhdGlvbiBvcCkKLXsKLSAgICBEV09SRCByZXN1bHQgPSBEUk9QRUZGRUNUX05P
TkU7Ci0gICAgaWYgKG9wID09IERyYWdPcGVyYXRpb25FdmVyeSkKLSAgICAgICAgcmV0dXJuIERS
T1BFRkZFQ1RfQ09QWSB8IERST1BFRkZFQ1RfTElOSyB8IERST1BFRkZFQ1RfTU9WRTsgCi0gICAg
aWYgKG9wICYgRHJhZ09wZXJhdGlvbkNvcHkpCi0gICAgICAgIHJlc3VsdCB8PSBEUk9QRUZGRUNU
X0NPUFk7IAotICAgIGlmIChvcCAmIERyYWdPcGVyYXRpb25MaW5rKQotICAgICAgICByZXN1bHQg
fD0gRFJPUEVGRkVDVF9MSU5LOyAKLSAgICBpZiAob3AgJiBEcmFnT3BlcmF0aW9uTW92ZSkKLSAg
ICAgICAgcmVzdWx0IHw9IERST1BFRkZFQ1RfTU9WRTsKLSAgICBpZiAob3AgJiBEcmFnT3BlcmF0
aW9uR2VuZXJpYykKLSAgICAgICAgcmVzdWx0IHw9IERST1BFRkZFQ1RfTU9WRTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi12b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VS
ZWYgaW1hZ2UsIGNvbnN0IEludFBvaW50JiBpbWFnZU9yaWdpbiwgY29uc3QgSW50UG9pbnQmIGRy
YWdQb2ludCwgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1lKiBmcmFtZSwgYm9vbCBpc0xpbmsp
Ci17Ci0gICAgQ09NUHRyPElEYXRhT2JqZWN0PiBkYXRhT2JqZWN0ID0gc3RhdGljX2Nhc3Q8Q2xp
cGJvYXJkV2luKj4oY2xpcGJvYXJkKS0+ZGF0YU9iamVjdCgpOwotCi0gICAgaWYgKCFkYXRhT2Jq
ZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBPd25QdHI8SERDPiBiaXRtYXBEQyA9IGFkb3B0
UHRyKENyZWF0ZUNvbXBhdGlibGVEQygwKSk7Ci0gICAgQklUTUFQSU5GTyBiaXRtYXBJbmZvID0g
ezB9OwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZSA9IHNpemVvZihCSVRNQVBJTkZP
SEVBREVSKTsKLSAgICBHZXRESUJpdHMoYml0bWFwREMuZ2V0KCksIGltYWdlLCAwLCAwLCAwLCAm
Yml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMpOwotICAgIGlmIChiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaVNpemVJbWFnZSA8PSAwKQotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemVJ
bWFnZSA9IGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggKiBhYnMoYml0bWFwSW5mby5ibWlI
ZWFkZXIuYmlIZWlnaHQpICogKGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQml0Q291bnQgKyA3KSAv
IDg7Ci0gICAgCi0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbWVtb3J5QnVmZmVyID0gU2hhcmVk
TWVtb3J5OjpjcmVhdGUoYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UpOwotCi0gICAg
Yml0bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiA9IEJJX1JHQjsKLSAgICBHZXRESUJp
dHMoYml0bWFwREMuZ2V0KCksIGltYWdlLCAwLCBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUhlaWdo
dCwgbWVtb3J5QnVmZmVyLT5kYXRhKCksICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUyk7ICAg
ICAgIAotCi0gICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgIGlmICghbWVtb3J5
QnVmZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIERXT1JEIG9rRWZmZWN0ID0gZHJhZ2dpbmdTb3VyY2VPcGVyYXRp
b25NYXNrVG9EcmFnQ3Vyc29ycyhtX3BhZ2UtPmNvcmVQYWdlKCktPmRyYWdDb250cm9sbGVyKCkt
PnNvdXJjZURyYWdPcGVyYXRpb24oKSk7Ci0gICAgCi0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZGF0
YU9iamVjdC5nZXQoKSwgSW50UG9pbnQoKSwgSW50UG9pbnQoKSwgRHJhZ09wZXJhdGlvbk5vbmUp
OwotICAgIGludCBmaWxlU2l6ZTsKLSAgICBTdHJpbmcgcGF0aG5hbWU7Ci0gICAgZHJhZ0RhdGEu
Z2V0RHJhZ0ZpbGVEZXNjcmlwdG9yRGF0YShmaWxlU2l6ZSwgcGF0aG5hbWUpOwotICAgIFJlZlB0
cjxTaGFyZWRNZW1vcnk+IGZpbGVDb250ZW50QnVmZmVyOwotICAgIFNoYXJlZE1lbW9yeTo6SGFu
ZGxlIGZpbGVDb250ZW50SGFuZGxlOwotICAgIGlmIChmaWxlU2l6ZSkgewotICAgICAgICBmaWxl
Q29udGVudEJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGZpbGVTaXplKTsKLSAgICAgICAg
ZHJhZ0RhdGEuZ2V0RHJhZ0ZpbGVDb250ZW50RGF0YShmaWxlU2l6ZSwgZmlsZUNvbnRlbnRCdWZm
ZXItPmRhdGEoKSk7Ci0gICAgICAgIGZpbGVDb250ZW50QnVmZmVyLT5jcmVhdGVIYW5kbGUoZmls
ZUNvbnRlbnRIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwotICAgIH0KLQotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTdGFydERyYWdEcm9wKGltYWdlT3Jp
Z2luLCBkcmFnUG9pbnQsIG9rRWZmZWN0LCBkcmFnRGF0YS5kcmFnRGF0YU1hcCgpLCAodWludDY0
X3QpZmlsZVNpemUsIHBhdGhuYW1lLCBmaWxlQ29udGVudEhhbmRsZSwgSW50U2l6ZShiaXRtYXBJ
bmZvLmJtaUhlYWRlci5iaVdpZHRoLCBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCksIGhh
bmRsZSwgaXNMaW5rKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC93aW4vV2ViRHJhZ1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L3dpbi9XZWJEcmFnU291cmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjRmMTQxNGViNmQ5NWQ2MTM0ZDBjNDEzNDI4MTA3NzcwZDNiOTRhYy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJEcmFnU291cmNlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIldlYkRyYWdTb3VyY2UuaCIKLQotI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9EcmFnQWN0aW9ucy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRIYW5k
bGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFn
ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2ZW50Lmg+Ci0jaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1QYXNzUmVm
UHRyPFdlYkRyYWdTb3VyY2U+IFdlYkRyYWdTb3VyY2U6OmNyZWF0ZUluc3RhbmNlKCkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkRyYWdTb3VyY2UpOwotfQotCi1XZWJEcmFnU291cmNl
OjpXZWJEcmFnU291cmNlKCkKLXsKLX0KLQotSFJFU1VMVCBXZWJEcmFnU291cmNlOjpRdWVyeUlu
dGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKLXsKLSAgICAqcHB2T2JqZWN0
ID0gMDsKLSAgICBpZiAoSXNFcXVhbElJRChyaWlkLCBJSURfSVVua25vd24pIHx8IElzRXF1YWxJ
SUQocmlpZCwgSUlEX0lEcm9wU291cmNlKSkgewotICAgICAgICAqcHB2T2JqZWN0ID0gdGhpczsK
LSAgICAgICAgQWRkUmVmKCk7Ci0KLSAgICAgICAgcmV0dXJuIFNfT0s7Ci0gICAgfQotCi0gICAg
cmV0dXJuIEVfTk9JTlRFUkZBQ0U7Ci19Ci0KLVVMT05HIFdlYkRyYWdTb3VyY2U6OkFkZFJlZih2
b2lkKQotewotICAgIHJlZigpOwotICAgIHJldHVybiByZWZDb3VudCgpOwotfQotCi1VTE9ORyBX
ZWJEcmFnU291cmNlOjpSZWxlYXNlKHZvaWQpCi17Ci0gICAgZGVyZWYoKTsKLSAgICByZXR1cm4g
cmVmQ291bnQoKTsKLX0KLQotSFJFU1VMVCBXZWJEcmFnU291cmNlOjpRdWVyeUNvbnRpbnVlRHJh
ZyhCT09MIGZFc2NhcGVQcmVzc2VkLCBEV09SRCBncmZTdGF0ZSkKLXsKLSAgICBpZiAoZkVzY2Fw
ZVByZXNzZWQpCi0gICAgICAgIHJldHVybiBEUkFHRFJPUF9TX0NBTkNFTDsKLQotICAgIGlmIChn
cmZTdGF0ZSAmIChNS19MQlVUVE9OIHwgTUtfUkJVVFRPTikpCi0gICAgICAgIHJldHVybiBTX09L
OwotCi0gICAgcmV0dXJuIERSQUdEUk9QX1NfRFJPUDsKLX0KLQotSFJFU1VMVCBXZWJEcmFnU291
cmNlOjpHaXZlRmVlZGJhY2soRFdPUkQgZHdFZmZlY3QpCi17Ci0gICAgcmV0dXJuIERSQUdEUk9Q
X1NfVVNFREVGQVVMVENVUlNPUlM7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJEcmFnU291cmNlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJEcmFnU291cmNlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyYzVmM2Y3NjE5ODlmNTRhZGI3MGU5MzJiZjgxYjRiMTM1
MzYwNWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViRHJhZ1NvdXJjZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFdlYkRy
YWdTb3VyY2VfaAotI2RlZmluZSBXZWJEcmFnU291cmNlX2gKLQotI2luY2x1ZGUgPFdURi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KLSNpbmNsdWRlIDxvYmppZGwu
aD4KLQotY2xhc3MgV2ViRHJhZ1NvdXJjZSA6IHB1YmxpYyBJRHJvcFNvdXJjZSwgcHVibGljIFJl
ZkNvdW50ZWQ8V2ViRHJhZ1NvdXJjZT4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkRyYWdTb3VyY2U+IGNyZWF0ZUluc3RhbmNlKCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2
b2lkKiogcHB2T2JqZWN0KTsgICAgICAgIAotICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FM
TFRZUEUgQWRkUmVmKCk7Ci0gICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxl
YXNlKCk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5Q29udGlu
dWVEcmFnKEJPT0wgZkVzY2FwZVByZXNzZWQsIERXT1JEIGdyZlN0YXRlKTsKLSAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2l2ZUZlZWRiYWNrKERXT1JEIGR3RWZmZWN0KTsK
LSAgICBXZWJEcmFnU291cmNlKCk7Ci19OwotCi0jZW5kaWYgLy8gIVdlYkRyYWdTb3VyY2VfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4v
V2ViRXJyb3JzV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvd2luL1dlYkVycm9yc1dpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2
ODYwNDMzOTRmNGZlMzMyODY3N2Y4MTFkMTQzNDJhMzU1ODE4NGIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC93aW4vV2ViRXJyb3JzV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2Vi
RXJyb3JzLmgiCi0KLSNpbmNsdWRlICJXS0Vycm9yLmgiCi0jaW5jbHVkZSAiV2ViRXJyb3IuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VSZXNwb25zZS5oPgotCi0jaWYgVVNFKENGTkVUV09SSykKLSNpbmNsdWRlIDxDRk5l
dHdvcmsvQ0ZOZXR3b3JrRXJyb3JzLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1SZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9y
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSNpZiBVU0UoQ0ZORVRXT1JLKQot
ICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGtDRkVycm9yRG9tYWluQ0ZOZXR3b3JrLCBrQ0ZVUkxF
cnJvckNhbmNlbGxlZCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOwotI2Vsc2UK
LSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOyAvLyBGSVhNRQotI2VuZGlmCi19Ci0KLVJlc291
cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsK
LSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihXZWJFcnJvcjo6d2ViS2l0RXJyb3JEb21haW4oKSwg
a1dLRXJyb3JDb2RlQ2Fubm90VXNlUmVzdHJpY3RlZFBvcnQsIHJlcXVlc3QudXJsKCkuc3RyaW5n
KCksIFN0cmluZygpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9y
KFdlYkVycm9yOjp3ZWJLaXRFcnJvckRvbWFpbigpLCBrV0tFcnJvckNvZGVDYW5ub3RTaG93VVJM
LCByZXF1ZXN0LnVybCgpLnN0cmluZygpLCBTdHJpbmcoKSk7Ci19Ci0KLVJlc291cmNlRXJyb3Ig
aW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoV2ViRXJyb3I6OndlYktpdEVycm9y
RG9tYWluKCksIGtXS0Vycm9yQ29kZUZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xpY3lDaGFuZ2Us
IHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIFN0cmluZygpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBj
YW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
LXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOwotfQotCi1SZXNvdXJjZUVycm9yIGZpbGVE
b2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAg
ICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOwotfQotCi1SZXNvdXJjZUVycm9yIHBsdWdpbldpbGxI
YW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAg
cmV0dXJuIFJlc291cmNlRXJyb3IoV2ViRXJyb3I6OndlYktpdEVycm9yRG9tYWluKCksIGtXS0Vy
cm9yQ29kZVBsdWdJbldpbGxIYW5kbGVMb2FkLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgU3Ry
aW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luL1dlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4v
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDZiMjBjMWY5NzNiOTM2NDcyNjczZDkzNGEzNThlYTM0MGIxMjRiNTIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotLy8gQ2hlY2tp
bmcgdGhpcyBmaWxlIGluIGVtcHR5IHRvIGdldCB0aGUgYnVpbGQgc3lzdGVtIHdvcmsgb3V0IG9m
IHRoZSB3YXkuCi0vLyBXaWxsIHB1dCB0aGUgY29kZSBpbiBoZXJlIGxhdGVyLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC93aW4vV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0NTliNGVhZGYyOWFkN2MxMDVhODlkOTFhM2MwZmNkZTQxZmI5ZjhhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQu
aAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNp
Zm5kZWYgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dF9oCi0jZGVmaW5lIFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHRfaAotCi0jaW5jbHVkZSAiV2ViRnJhbWUuaCIKLQotI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgotCi1jbGFzcyBXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0IDogcHVibGljIFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNyZWF0ZShX
ZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dChmcmFtZSkpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lKQot
ICAgICAgICA6IFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQoZnJhbWUtPmNvcmVGcmFt
ZSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFN0cmluZyByZWZlcnJlcigpIGNvbnN0OwotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JikgY29uc3Q7Ci0KLSNpZiBVU0UoQ0ZORVRXT1JLKQotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwotI2VuZGlm
Ci0KLSAgICBTdHJpbmcgbV91c2VyQWdlbnQ7Ci19OwotCi0jZW5kaWYgLy8gV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L3dpbi9XZWJQb3B1cE1lbnVXaW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViUG9wdXBNZW51V2luLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwYWMwMTIxYWEyNzU3YjEzZThiNmRkOTY0NzZjOTg4NGRh
MTAyMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJQb3B1cE1lbnVXaW4u
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUG9wdXBNZW51LmgiCi0KLSNpbmNsdWRlICJQbGF0
Zm9ybVBvcHVwTWVudURhdGEuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZvbnQuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTGVuZ3RoRnVu
Y3Rpb25zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0UnVuLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9Qb3B1cE1lbnVDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BvcHVwTWVudVN0eWxlLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUaGVtZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBjb25zdCBpbnQgc2VwYXJhdG9y
UGFkZGluZyA9IDQ7Ci1zdGF0aWMgY29uc3QgaW50IHNlcGFyYXRvckhlaWdodCA9IDE7Ci1zdGF0
aWMgY29uc3QgaW50IHBvcHVwV2luZG93Qm9yZGVyV2lkdGggPSAxOwotCi12b2lkIFdlYlBvcHVw
TWVudTo6c2V0VXBQbGF0Zm9ybURhdGEoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcGFnZUNvb3Jk
aW5hdGVzLCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmIGRhdGEpCi17Ci0gICAgaW50IGl0ZW1Db3Vu
dCA9IG1fcG9wdXBDbGllbnQtPmxpc3RTaXplKCk7Ci0KLSAgICBkYXRhLm1fY2xpZW50UGFkZGlu
Z0xlZnQgPSBtX3BvcHVwQ2xpZW50LT5jbGllbnRQYWRkaW5nTGVmdCgpOwotICAgIGRhdGEubV9j
bGllbnRQYWRkaW5nUmlnaHQgPSBtX3BvcHVwQ2xpZW50LT5jbGllbnRQYWRkaW5nUmlnaHQoKTsK
LSAgICBkYXRhLm1fY2xpZW50SW5zZXRMZWZ0ID0gbV9wb3B1cENsaWVudC0+Y2xpZW50SW5zZXRM
ZWZ0KCk7Ci0gICAgZGF0YS5tX2NsaWVudEluc2V0UmlnaHQgPSBtX3BvcHVwQ2xpZW50LT5jbGll
bnRJbnNldFJpZ2h0KCk7Ci0gICAgZGF0YS5tX2l0ZW1IZWlnaHQgPSBtX3BvcHVwQ2xpZW50LT5t
ZW51U3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSArIDE7Ci0KLSAgICBpbnQg
cG9wdXBXaWR0aCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtQ291bnQ7ICsr
aSkgewotICAgICAgICBTdHJpbmcgdGV4dCA9IG1fcG9wdXBDbGllbnQtPml0ZW1UZXh0KGkpOwot
ICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBGb250IGl0ZW1Gb250ID0gbV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpOwot
ICAgICAgICBpZiAobV9wb3B1cENsaWVudC0+aXRlbUlzTGFiZWwoaSkpIHsKLSAgICAgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAg
ICAgICBkLnNldFdlaWdodChkLmJvbGRlcldlaWdodCgpKTsKLSAgICAgICAgICAgIGl0ZW1Gb250
ID0gRm9udChkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRTcGFjaW5n
KCkpOwotICAgICAgICAgICAgaXRlbUZvbnQudXBkYXRlKG1fcG9wdXBDbGllbnQtPmZvbnRTZWxl
Y3RvcigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBvcHVwV2lkdGggPSBzdGQ6Om1heDxmbG9h
dD4ocG9wdXBXaWR0aCwgY2VpbGYoaXRlbUZvbnQud2lkdGgoVGV4dFJ1bih0ZXh0LmNoYXJhY3Rl
cnMoKSwgdGV4dC5sZW5ndGgoKSkpKSk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IHBvcHVwV2lk
dGggc2hvdWxkIHByb2JhYmx5IHRha2UgaW50byBhY2NvdW50IG1vbml0b3IgY29uc3RyYWludHMg
YXMgaXMgZG9uZSB3aXRoIFdlYlBvcHVwTWVudVByb3h5V2luOjpjYWxjdWxhdGVQb3NpdGlvbkFu
ZFNpemUuCi0KLSAgICBwb3B1cFdpZHRoICs9IG1heCgwLCBkYXRhLm1fY2xpZW50UGFkZGluZ1Jp
Z2h0IC0gZGF0YS5tX2NsaWVudEluc2V0UmlnaHQpICsgbWF4KDAsIGRhdGEubV9jbGllbnRQYWRk
aW5nTGVmdCAtIGRhdGEubV9jbGllbnRJbnNldExlZnQpOwotICAgIHBvcHVwV2lkdGggKz0gMiAq
IHBvcHVwV2luZG93Qm9yZGVyV2lkdGg7Ci0gICAgZGF0YS5tX3BvcHVwV2lkdGggPSBwb3B1cFdp
ZHRoOwotCi0gICAgLy8gVGhlIGJhY2tpbmcgc3RvcmVzIHNob3VsZCBiZSBkcmF3biBhdCBsZWFz
dCBhcyB3aWRlIGFzIHRoZSBjb250cm9sIG9uIHRoZSBwYWdlIHRvIG1hdGNoIHRoZSB3aWR0aCBv
ZiB0aGUgcG9wdXAgd2luZG93IHdlJ2xsIGNyZWF0ZS4KLSAgICBpbnQgYmFja2luZ1N0b3JlV2lk
dGggPSBtYXgocGFnZUNvb3JkaW5hdGVzLndpZHRoKCkgLSBtX3BvcHVwQ2xpZW50LT5jbGllbnRJ
bnNldExlZnQoKSAtIG1fcG9wdXBDbGllbnQtPmNsaWVudEluc2V0UmlnaHQoKSwgcG9wdXBXaWR0
aCk7Ci0KLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUoYmFja2luZ1N0b3JlV2lkdGgsIChp
dGVtQ291bnQgKiBkYXRhLm1faXRlbUhlaWdodCkpOwotICAgIGRhdGEubV9ub3RTZWxlY3RlZEJh
Y2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJhY2tpbmdTdG9y
ZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7Ci0gICAgZGF0YS5tX3NlbGVj
dGVkQmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2lu
Z1N0b3JlU2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLQotICAgIE93blB0
cjxHcmFwaGljc0NvbnRleHQ+IG5vdFNlbGVjdGVkQmFja2luZ1N0b3JlQ29udGV4dCA9IGRhdGEu
bV9ub3RTZWxlY3RlZEJhY2tpbmdTdG9yZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAg
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gc2VsZWN0ZWRCYWNraW5nU3RvcmVDb250ZXh0ID0gZGF0
YS5tX3NlbGVjdGVkQmFja2luZ1N0b3JlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLQotICAg
IENvbG9yIGFjdGl2ZU9wdGlvbkJhY2tncm91bmRDb2xvciA9IFJlbmRlclRoZW1lOjpkZWZhdWx0
VGhlbWUoKS0+YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwotICAgIENv
bG9yIGFjdGl2ZU9wdGlvblRleHRDb2xvciA9IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpOyB5ICs9IGRhdGEubV9pdGVtSGVp
Z2h0KSB7Ci0gICAgICAgIGludCBpbmRleCA9IHkgLyBkYXRhLm1faXRlbUhlaWdodDsKLQotICAg
ICAgICBQb3B1cE1lbnVTdHlsZSBpdGVtU3R5bGUgPSBtX3BvcHVwQ2xpZW50LT5pdGVtU3R5bGUo
aW5kZXgpOwotCi0gICAgICAgIENvbG9yIG9wdGlvbkJhY2tncm91bmRDb2xvciA9IGl0ZW1TdHls
ZS5iYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igb3B0aW9uVGV4dENvbG9yID0gaXRl
bVN0eWxlLmZvcmVncm91bmRDb2xvcigpOwotCi0gICAgICAgIEludFJlY3QgaXRlbVJlY3QoMCwg
eSwgYmFja2luZ1N0b3JlV2lkdGgsIGRhdGEubV9pdGVtSGVpZ2h0KTsKLQotICAgICAgICAvLyBE
cmF3IHRoZSBiYWNrZ3JvdW5kIGZvciB0aGlzIG1lbnUgaXRlbQotICAgICAgICBpZiAoaXRlbVN0
eWxlLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgICAgICBub3RTZWxlY3RlZEJhY2tpbmdTdG9yZUNv
bnRleHQtPmZpbGxSZWN0KGl0ZW1SZWN0LCBvcHRpb25CYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwotICAgICAgICAgICAgc2VsZWN0ZWRCYWNraW5nU3RvcmVDb250ZXh0LT5m
aWxsUmVjdChpdGVtUmVjdCwgYWN0aXZlT3B0aW9uQmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3BvcHVwQ2xpZW50LT5pdGVt
SXNTZXBhcmF0b3IoaW5kZXgpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHNlcGFyYXRvclJlY3Qo
aXRlbVJlY3QueCgpICsgc2VwYXJhdG9yUGFkZGluZywgaXRlbVJlY3QueSgpICsgKGl0ZW1SZWN0
LmhlaWdodCgpIC0gc2VwYXJhdG9ySGVpZ2h0KSAvIDIsIGl0ZW1SZWN0LndpZHRoKCkgLSAyICog
c2VwYXJhdG9yUGFkZGluZywgc2VwYXJhdG9ySGVpZ2h0KTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgbm90U2VsZWN0ZWRCYWNraW5nU3RvcmVDb250ZXh0LT5maWxsUmVjdChzZXBhcmF0b3JS
ZWN0LCBvcHRpb25UZXh0Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICAgICAg
c2VsZWN0ZWRCYWNraW5nU3RvcmVDb250ZXh0LT5maWxsUmVjdChzZXBhcmF0b3JSZWN0LCBhY3Rp
dmVPcHRpb25UZXh0Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgaXRlbVRleHQgPSBtX3BvcHVwQ2xp
ZW50LT5pdGVtVGV4dChpbmRleCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IGRlZmF1bHRXcml0aW5n
RGlyZWN0aW9uIHNob3VsZCByZXR1cm4gYSBUZXh0RGlyZWN0aW9uIG5vdCBhIFVuaWNvZGU6OkRp
cmVjdGlvbi4KLSAgICAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBpdGVtVGV4dC5kZWZh
dWx0V3JpdGluZ0RpcmVjdGlvbigpID09IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQgPyBSVEwg
OiBMVFI7Ci0gICAgICAgIFRleHRSdW4gdGV4dFJ1bihpdGVtVGV4dCwgMCwgMCwgVGV4dFJ1bjo6
QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgZGlyZWN0aW9uKTsKLQotICAgICAgICBub3RTZWxlY3Rl
ZEJhY2tpbmdTdG9yZUNvbnRleHQtPnNldEZpbGxDb2xvcihvcHRpb25UZXh0Q29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwotICAgICAgICBzZWxlY3RlZEJhY2tpbmdTdG9yZUNvbnRleHQtPnNl
dEZpbGxDb2xvcihhY3RpdmVPcHRpb25UZXh0Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwot
ICAgICAgICAKLSAgICAgICAgRm9udCBpdGVtRm9udCA9IG1fcG9wdXBDbGllbnQtPm1lbnVTdHls
ZSgpLmZvbnQoKTsKLSAgICAgICAgaWYgKG1fcG9wdXBDbGllbnQtPml0ZW1Jc0xhYmVsKGluZGV4
KSkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3Jp
cHRpb24oKTsKLSAgICAgICAgICAgIGQuc2V0V2VpZ2h0KGQuYm9sZGVyV2VpZ2h0KCkpOwotICAg
ICAgICAgICAgaXRlbUZvbnQgPSBGb250KGQsIGl0ZW1Gb250LmxldHRlclNwYWNpbmcoKSwgaXRl
bUZvbnQud29yZFNwYWNpbmcoKSk7Ci0gICAgICAgICAgICBpdGVtRm9udC51cGRhdGUobV9wb3B1
cENsaWVudC0+Zm9udFNlbGVjdG9yKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRHJhdyB0
aGUgaXRlbSB0ZXh0Ci0gICAgICAgIGlmIChpdGVtU3R5bGUuaXNWaXNpYmxlKCkpIHsKLSAgICAg
ICAgICAgIGludCB0ZXh0WCA9IHN0ZDo6bWF4KDAsIGRhdGEubV9jbGllbnRQYWRkaW5nTGVmdCAt
IGRhdGEubV9jbGllbnRJbnNldExlZnQpOwotICAgICAgICAgICAgaWYgKFJlbmRlclRoZW1lOjpk
ZWZhdWx0VGhlbWUoKS0+cG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQoKSAmJiBpdGVtU3R5
bGUudGV4dERpcmVjdGlvbigpID09IExUUikKLSAgICAgICAgICAgICAgICB0ZXh0WCArPSBtaW5p
bXVtSW50VmFsdWVGb3JMZW5ndGgoaXRlbVN0eWxlLnRleHRJbmRlbnQoKSwgaXRlbVJlY3Qud2lk
dGgoKSk7Ci0gICAgICAgICAgICBpbnQgdGV4dFkgPSBpdGVtUmVjdC55KCkgKyBpdGVtRm9udC5m
b250TWV0cmljcygpLmFzY2VudCgpICsgKGl0ZW1SZWN0LmhlaWdodCgpIC0gaXRlbUZvbnQuZm9u
dE1ldHJpY3MoKS5oZWlnaHQoKSkgLyAyOwotCi0gICAgICAgICAgICBub3RTZWxlY3RlZEJhY2tp
bmdTdG9yZUNvbnRleHQtPmRyYXdCaWRpVGV4dChpdGVtRm9udCwgdGV4dFJ1biwgSW50UG9pbnQo
dGV4dFgsIHRleHRZKSk7Ci0gICAgICAgICAgICBzZWxlY3RlZEJhY2tpbmdTdG9yZUNvbnRleHQt
PmRyYXdCaWRpVGV4dChpdGVtRm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL3dpbi9MYXllclRyZWVIb3N0
Q0FXaW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL3dpbi9MYXll
clRyZWVIb3N0Q0FXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjUyYWQ2
OGIwNGFmN2JmNjg4MjBmYjczODhjYTA5YzA5Y2Y1ODhkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9jYS93aW4vTGF5ZXJUcmVlSG9zdENBV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheWVy
VHJlZUhvc3RDQVdpbi5oIgotCi0jaWYgSEFWRShXS1FDQSkKLQotI2luY2x1ZGUgIkRyYXdpbmdB
cmVhSW1wbC5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIlVwZGF0
ZUluZm8uaCIKLSNpbmNsdWRlICJXS0NBQ0ZWaWV3V2luZG93LmgiCi0jaW5jbHVkZSAiV2ViUGFn
ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNBLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9MYXllckNoYW5nZXNGbHVzaGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNB
TGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJLaXRRdWFydHpDb3Jl
QWRkaXRpb25zL1dLQ0FDRkltYWdlLmg+Ci0jaW5jbHVkZSA8V2ViS2l0UXVhcnR6Q29yZUFkZGl0
aW9ucy9XS0NBQ0ZWaWV3Lmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KLQotI2lmZGVmIERFQlVHX0FMTAotI2RlZmluZSBNT0RVTEVf
TkFNRSAiV2ViS2l0UXVhcnR6Q29yZUFkZGl0aW9uc19kZWJ1ZyIKLSNlbHNlCi0jZGVmaW5lIE1P
RFVMRV9OQU1FICJXZWJLaXRRdWFydHpDb3JlQWRkaXRpb25zIgotI2VuZGlmCi0KLSNwcmFnbWEg
Y29tbWVudChsaWIsIE1PRFVMRV9OQU1FKQotCi0jaWYgVVNFKEFWRk9VTkRBVElPTikKLVNPRlRf
TElOS19MT0FERURfTElCUkFSWShNT0RVTEVfTkFNRSwgV0tDQUNGVmlld0dldEQzRERldmljZTks
IElEaXJlY3QzRERldmljZTkqLCBfY2RlY2wsIChXS0NBQ0ZWaWV3UmVmIHZpZXcpKQotI2VuZGlm
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9v
bCBMYXllclRyZWVIb3N0Q0FXaW46OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCi17
Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7Ci0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nOwotICAgIGlmIChpbml0aWFsaXplZCkKLSAgICAgICAgcmV0
dXJuIHN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZzsKLSAgICBpbml0aWFsaXplZCA9IHRy
dWU7Ci0KLSAgICBSZXRhaW5QdHI8V0tDQUNGVmlld1JlZj4gdmlldyhBZG9wdENGLCBXS0NBQ0ZW
aWV3Q3JlYXRlKGtXS0NBQ0ZWaWV3RHJhd2luZ0Rlc3RpbmF0aW9uV2luZG93KSk7Ci0gICAgV0tD
QUNGVmlld1dpbmRvdyBkdW1teVdpbmRvdyh2aWV3LmdldCgpLCAwLCAwKTsKLSAgICBDR1JlY3Qg
ZmFrZUJvdW5kcyA9IENHUmVjdE1ha2UoMCwgMCwgMTAsIDEwKTsKLSAgICBXS0NBQ0ZWaWV3VXBk
YXRlKHZpZXcuZ2V0KCksIGR1bW15V2luZG93LndpbmRvdygpLCAmZmFrZUJvdW5kcyk7Ci0KLSAg
ICBzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgPSBXS0NBQ0ZWaWV3Q2FuRHJhdyh2aWV3
LmdldCgpKTsKLQotICAgIFdLQ0FDRlZpZXdVcGRhdGUodmlldy5nZXQoKSwgMCwgMCk7Ci0KLSAg
ICByZXR1cm4gc3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nOwotfQotCi1QYXNzUmVmUHRy
PExheWVyVHJlZUhvc3RDQVdpbj4gTGF5ZXJUcmVlSG9zdENBV2luOjpjcmVhdGUoV2ViUGFnZSog
d2ViUGFnZSkKLXsKLSAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdENBV2luPiBob3N0ID0gYWRvcHRS
ZWYobmV3IExheWVyVHJlZUhvc3RDQVdpbih3ZWJQYWdlKSk7Ci0gICAgaG9zdC0+aW5pdGlhbGl6
ZSgpOwotICAgIHJldHVybiBob3N0LnJlbGVhc2UoKTsKLX0KLQotTGF5ZXJUcmVlSG9zdENBV2lu
OjpMYXllclRyZWVIb3N0Q0FXaW4oV2ViUGFnZSogd2ViUGFnZSkKLSAgICA6IExheWVyVHJlZUhv
c3RDQSh3ZWJQYWdlKQotICAgICwgbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKGZhbHNlKQotewot
fQotCi1MYXllclRyZWVIb3N0Q0FXaW46On5MYXllclRyZWVIb3N0Q0FXaW4oKQotewotfQotCi12
b2lkIExheWVyVHJlZUhvc3RDQVdpbjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKLXsKLSAgICBtX3Zp
ZXcuYWRvcHRDRihXS0NBQ0ZWaWV3Q3JlYXRlKGtXS0NBQ0ZWaWV3RHJhd2luZ0Rlc3RpbmF0aW9u
V2luZG93KSk7Ci0gICAgV0tDQUNGVmlld1NldENvbnRleHRVc2VyRGF0YShtX3ZpZXcuZ2V0KCks
IHN0YXRpY19jYXN0PEFic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QqPih0aGlzKSk7Ci0gICAgV0tD
QUNGVmlld1NldExheWVyKG1fdmlldy5nZXQoKSwgcm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIo
KSk7Ci0gICAgV0tDQUNGVmlld1NldENvbnRleHREaWRDaGFuZ2VDYWxsYmFjayhtX3ZpZXcuZ2V0
KCksIGNvbnRleHREaWRDaGFuZ2VDYWxsYmFjaywgdGhpcyk7Ci0KLSAgICAvLyBQYXNzaW5nIFdT
X0RJU0FCTEVEIG1ha2VzIHRoZSB3aW5kb3cgaW52aXNpYmxlIHRvIG1vdXNlIGV2ZW50cywgd2hp
Y2ggbGV0cyBXS1ZpZXcncyBub3JtYWwKLSAgICAvLyBldmVudCBoYW5kbGluZyBtZWNoYW5pc20g
d29yayBldmVuIHdoZW4gdGhpcyB3aW5kb3cgaXMgb2JzY3VyaW5nIHRoZSBlbnRpcmUgV0tWaWV3
IEhXTkQuCi0gICAgLy8gTm90ZSB0aGF0IG1fd2ViUGFnZS0+bmF0aXZlV2luZG93KCkgaXMgb3du
ZWQgYnkgdGhlIFVJIHByb2Nlc3MsIHNvIHRoaXMgY3JlYXRlcyBhIGNyb3NzLQotICAgIC8vIHBy
b2Nlc3Mgd2luZG93IGhpZXJhcmNoeSAoYW5kIHRodXMgaW1wbGljaXRseSBhdHRhY2hlcyB0aGUg
aW5wdXQgcXVldWVzIG9mIHRoZSBVSSBhbmQgd2ViCi0gICAgLy8gcHJvY2Vzc2VzJyBtYWluIHRo
cmVhZHMpLgotICAgIG1fd2luZG93ID0gYWRvcHRQdHIobmV3IFdLQ0FDRlZpZXdXaW5kb3cobV92
aWV3LmdldCgpLCBtX3dlYlBhZ2UtPm5hdGl2ZVdpbmRvdygpLCBXU19ESVNBQkxFRCkpOwotCi0g
ICAgQ0dSZWN0IGJvdW5kcyA9IG1fd2ViUGFnZS0+Ym91bmRzKCk7Ci0gICAgV0tDQUNGVmlld1Vw
ZGF0ZShtX3ZpZXcuZ2V0KCksIG1fd2luZG93LT53aW5kb3coKSwgJmJvdW5kcyk7Ci0KLSAgICBt
X2xheWVyVHJlZUNvbnRleHQud2luZG93ID0gbV93aW5kb3ctPndpbmRvdygpOwotfQotCi12b2lk
IExheWVyVHJlZUhvc3RDQVdpbjo6aW52YWxpZGF0ZSgpCi17Ci0gICAgTGF5ZXJDaGFuZ2VzRmx1
c2hlcjo6c2hhcmVkKCkuY2FuY2VsUGVuZGluZ0ZsdXNoKHRoaXMpOwotCi0gICAgV0tDQUNGVmll
d1NldENvbnRleHRVc2VyRGF0YShtX3ZpZXcuZ2V0KCksIDApOwotICAgIFdLQ0FDRlZpZXdTZXRM
YXllcihtX3ZpZXcuZ2V0KCksIDApOwotICAgIFdLQ0FDRlZpZXdTZXRDb250ZXh0RGlkQ2hhbmdl
Q2FsbGJhY2sobV92aWV3LmdldCgpLCAwLCAwKTsKLQotICAgIC8vIFRoZSBVSSBwcm9jZXNzIHdp
bGwgZGVzdHJveSBtX3dpbmRvdydzIEhXTkQgd2hlbiBpdCBnZXRzIHRoZSBtZXNzYWdlIHRvIHN3
aXRjaCBvdXQgb2YKLSAgICAvLyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLiBXZSBkb24n
dCB3YW50IHRvIGRlc3Ryb3kgdGhlIEhXTkQgYmVmb3JlIHRoZW4gb3Igd2Ugd2lsbCBnZXQgYQot
ICAgIC8vIGZsYXNoIG9mIHdoaXRlIGJlZm9yZSB0aGUgVUkgcHJvY2VzcyBoYXMgYSBjaGFuY2Ug
dG8gZGlzcGxheSB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KLSAgICAvLyBTaW5jZSB0aGUg
SFdORCBuZWVkcyB0byBvdXRsaXZlIHVzLCB3ZSBsZWFrIG1fd2luZG93IGhlcmUgYW5kIHRlbGwg
aXQgdG8gY2xlYW4gaXRzZWxmIHVwCi0gICAgLy8gd2hlbiBpdHMgSFdORCBpcyBkZXN0cm95ZWQu
Ci0gICAgV0tDQUNGVmlld1dpbmRvdyogd2luZG93ID0gbV93aW5kb3cubGVha1B0cigpOwotICAg
IHdpbmRvdy0+c2V0RGVsZXRlc1NlbGZXaGVuV2luZG93RGVzdHJveWVkKHRydWUpOwotCi0gICAg
TGF5ZXJUcmVlSG9zdENBOjppbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdENB
V2luOjpzY2hlZHVsZUxheWVyRmx1c2goKQotewotICAgIGlmICghbV9sYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheWVyQ2hhbmdlc0ZsdXNoZXI6
OnNoYXJlZCgpLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc1Nvb24odGhpcyk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlSG9zdENBV2luOjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBs
YXllckZsdXNoaW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
bGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7Ci0KLSAg
ICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKLSAgICAgICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBMYXllckNoYW5nZXNG
bHVzaGVyOjpzaGFyZWQoKS5jYW5jZWxQZW5kaW5nRmx1c2godGhpcyk7Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlSG9zdENBV2luOjpzY2hlZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRhdGUoY29uc3Qg
V2luZG93R2VvbWV0cnkmIGdlb21ldHJ5KQotewotICAgIG1fZ2VvbWV0cmllc1VwZGF0ZXIuYWRk
UGVuZGluZ1VwZGF0ZShnZW9tZXRyeSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdENBV2luOjpz
aXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIG5ld1NpemUpCi17Ci0gICAgTGF5ZXJUcmVlSG9z
dENBOjpzaXplRGlkQ2hhbmdlKG5ld1NpemUpOwotICAgIENHUmVjdCBib3VuZHMgPSBDR1JlY3RN
YWtlKDAsIDAsIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSk7Ci0gICAgV0tDQUNG
Vmlld1VwZGF0ZShtX3ZpZXcuZ2V0KCksIG1fd2luZG93LT53aW5kb3coKSwgJmJvdW5kcyk7Ci0g
ICAgV0tDQUNGVmlld0ZsdXNoQ29udGV4dChtX3ZpZXcuZ2V0KCkpOwotfQotCi12b2lkIExheWVy
VHJlZUhvc3RDQVdpbjo6Zm9yY2VSZXBhaW50KCkKLXsKLSAgICBMYXllclRyZWVIb3N0Q0E6OmZv
cmNlUmVwYWludCgpOwotICAgIFdLQ0FDRlZpZXdGbHVzaENvbnRleHQobV92aWV3LmdldCgpKTsK
LX0KLQotdm9pZCBMYXllclRyZWVIb3N0Q0FXaW46OmNvbnRleHREaWRDaGFuZ2VDYWxsYmFjayhX
S0NBQ0ZWaWV3UmVmIHZpZXcsIHZvaWQqIGluZm8pCi17Ci0gICAgLy8gVGhpcyBzaG91bGQgb25s
eSBiZSBjYWxsZWQgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCB3aGVuIG5vIGNoYW5nZXMgaGF2ZSBh
Y3R1YWxseSAKLSAgICAvLyBiZWVuIGNvbW1pdHRlZCB0byB0aGUgY29udGV4dCwgZWcuIHdoZW4g
YSB2aWRlbyBmcmFtZSBoYXMgYmVlbiBhZGRlZCB0byBhbiBpbWFnZQotICAgIC8vIHF1ZXVlLCBz
byByZXR1cm4gd2l0aG91dCB0cmlnZ2VyaW5nIGFuaW1hdGlvbnMgZXRjLgotICAgIGlmICghaXNN
YWluVGhyZWFkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBMYXllclRyZWVIb3N0Q0FX
aW4qIGhvc3QgPSBzdGF0aWNfY2FzdDxMYXllclRyZWVIb3N0Q0FXaW4qPihpbmZvKTsKLSAgICBB
U1NFUlRfQVJHKHZpZXcsIHZpZXcgPT0gaG9zdC0+bV92aWV3KTsKLSAgICBob3N0LT5jb250ZXh0
RGlkQ2hhbmdlKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdENBV2luOjpjb250ZXh0RGlkQ2hh
bmdlKCkKLXsKLSAgICAvLyBTZW5kIGN1cnJlbnRUaW1lIHRvIHRoZSBwZW5kaW5nIGFuaW1hdGlv
bnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IENBQ0YgaW4gYSBjYWxsYmFjawotICAgIC8v
IHdoaWNoIG9jY3VycyBhZnRlciB0aGUgZHJhd0luQ29udGV4dCBjYWxscy4gU28gY3VycmVudFRp
bWUgaXMgdmVyeSBjbG9zZSB0byB0aGUgdGltZQotICAgIC8vIHRoZSBhbmltYXRpb25zIGFjdHVh
bGx5IHN0YXJ0Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwot
Ci0gICAgSGFzaFNldDxSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiA+OjppdGVyYXRvciBlbmQgPSBt
X3BlbmRpbmdBbmltYXRlZExheWVycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFBs
YXRmb3JtQ0FMYXllcj4gPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdBbmltYXRlZExheWVycy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5hbmltYXRpb25TdGFydGVk
KGN1cnJlbnRUaW1lKTsKLQotICAgIG1fcGVuZGluZ0FuaW1hdGVkTGF5ZXJzLmNsZWFyKCk7Ci0K
LSAgICAvLyBVcGRhdGUgY2hpbGQgd2luZG93IGdlb21ldHJpZXMgbm93IHNvIHRoYXQgdGhleSBz
dGF5IG1vc3RseSBpbiBzeW5jIHdpdGggdGhlIGFjY2VsZXJhdGVkIGNvbnRlbnQuCi0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCByZWFsbHkgYmUgZG9pbmcgdGhpcyB3aGVuIHRoZSBjaGFuZ2VzIHdl
IGp1c3QgZmx1c2hlZCBhcHBlYXIgb24gc2NyZWVuLiA8aHR0cDovL3dlYmtpdC5vcmcvYi82MTg2
Nz4KLSAgICAvLyBXZSBhbHNvIGJyaW5nIHRoZSBjaGlsZCB3aW5kb3dzIChpLmUuLCBwbHVnaW5z
KSB0byB0aGUgdG9wIG9mIHRoZSB6LW9yZGVyIHRvIGVuc3VyZSB0aGV5IGFyZSBhYm92ZSBtX3dp
bmRvdy4KLSAgICAvLyBGSVhNRTogV2UgY291bGQgZG8gdGhpcyBqdXN0IG9uY2UgcGVyIHdpbmRv
dyB3aGVuIGl0IGlzIGZpcnN0IHNob3duLiBNYXliZSB0aGF0IHdvdWxkIGJlIG1vcmUgZWZmaWNp
ZW50PwotICAgIG1fZ2VvbWV0cmllc1VwZGF0ZXIudXBkYXRlR2VvbWV0cmllcyhCcmluZ1RvVG9w
KTsKLX0KLQotUGxhdGZvcm1DQUxheWVyKiBMYXllclRyZWVIb3N0Q0FXaW46OnJvb3RMYXllcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDQSo+KExheWVy
VHJlZUhvc3RDQTo6cm9vdExheWVyKCkpLT5wbGF0Zm9ybUNBTGF5ZXIoKTsKLX0KLQotdm9pZCBM
YXllclRyZWVIb3N0Q0FXaW46OmFkZFBlbmRpbmdBbmltYXRlZExheWVyKFBhc3NSZWZQdHI8UGxh
dGZvcm1DQUxheWVyPiBsYXllcikKLXsKLSAgICBtX3BlbmRpbmdBbmltYXRlZExheWVycy5hZGQo
bGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RDQVdpbjo6bGF5ZXJUcmVlRGlkQ2hhbmdl
KCkKLXsKLSAgICBpZiAobV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKSB7Ci0gICAgICAgIC8vIFRo
ZSBsYXllciB0cmVlIGlzIGNoYW5naW5nIGFzIGEgcmVzdWx0IG9mIGZsdXNoaW5nIEdyYXBoaWNz
TGF5ZXIgY2hhbmdlcyB0byB0aGVpcgotICAgICAgICAvLyB1bmRlcmx5aW5nIFBsYXRmb3JtQ0FM
YXllcnMuIFdlJ2xsIGZsdXNoIHRob3NlIGNoYW5nZXMgdG8gdGhlIGNvbnRleHQgYXMgcGFydCBv
ZiB0aGF0Ci0gICAgICAgIC8vIHByb2Nlc3MsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBzY2hlZHVs
ZSBhbm90aGVyIGZsdXNoIGhlcmUuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBU
aGUgbGF5ZXIgdHJlZSBpcyBjaGFuZ2luZyBhcyBhIHJlc3VsdCBvZiBzb21lb25lIG1vZGlmeWlu
ZyBhIFBsYXRmb3JtQ0FMYXllciB0aGF0IGRvZXNuJ3QKLSAgICAvLyBoYXZlIGEgY29ycmVzcG9u
ZGluZyBHcmFwaGljc0xheWVyLiBTY2hlZHVsZSBhIGZsdXNoIHNpbmNlIHdlIHdvbid0IHNjaGVk
dWxlIG9uZSB0aHJvdWdoIHRoZQotICAgIC8vIG5vcm1hbCBHcmFwaGljc0xheWVyIG1lY2hhbmlz
bXMuCi0gICAgTGF5ZXJDaGFuZ2VzRmx1c2hlcjo6c2hhcmVkKCkuZmx1c2hQZW5kaW5nTGF5ZXJD
aGFuZ2VzU29vbih0aGlzKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0Q0FXaW46OmZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlc05vdygpCi17Ci0gICAgUmVmUHRyPExheWVyVHJlZUhvc3RDQT4gcHJv
dGVjdG9yKHRoaXMpOwotCi0gICAgbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzID0gdHJ1ZTsKLQot
ICAgIC8vIEZsdXNoIGNoYW5nZXMgc3RvcmVkIHVwIGluIEdyYXBoaWNzTGF5ZXJzIHRvIHRoZWly
IHVuZGVybHlpbmcgUGxhdGZvcm1DQUxheWVycywgaWYKLSAgICAvLyByZXF1ZXN0ZWQuCi0gICAg
cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLQotICAgIC8vIEZsdXNoIGNoYW5nZXMgc3Rv
cmVkIHVwIGluIFBsYXRmb3JtQ0FMYXllcnMgdG8gdGhlIGNvbnRleHQgc28gdGhleSB3aWxsIGJl
IHJlbmRlcmVkLgotICAgIFdLQ0FDRlZpZXdGbHVzaENvbnRleHQobV92aWV3LmdldCgpKTsKLQot
ICAgIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcyA9IGZhbHNlOwotfQotCi12b2lkIExheWVyVHJl
ZUhvc3RDQVdpbjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhp
Y3NMYXllcikKLXsKLSAgICAvLyBEb24ndCBmbHVzaCBhbnkgY2hhbmdlcyB3aGVuIHdlIGRvbid0
IGhhdmUgYSByb290IGxheWVyLiBUaGlzIHdpbGwgcHJldmVudCBmbGFzaGVzIG9mIHdoaXRlCi0g
ICAgLy8gd2hlbiBzd2l0Y2hpbmcgb3V0IG9mIGNvbXBvc2l0aW5nIG1vZGUuCi0gICAgc2V0TGF5
ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGdyYXBoaWNzTGF5ZXIpOwotCi0gICAgLy8gUmVzdWJt
aXQgYWxsIGV4aXN0aW5nIGFuaW1hdGlvbnMuIENBQ0YgZG9lcyBub3QgcmVtZW1iZXIgcnVubmlu
ZyBhbmltYXRpb25zCi0gICAgLy8gV2hlbiB0aGUgbGF5ZXIgdHJlZSBpcyByZW1vdmVkIGFuZCB0
aGVuIGFkZGVkIGJhY2sgdG8gdGhlIGhpZXJhcmNoeQotICAgIGlmIChncmFwaGljc0xheWVyKQot
ICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ0EqPihncmFwaGljc0xheWVyKS0+cGxh
dGZvcm1DQUxheWVyKCktPmVuc3VyZUFuaW1hdGlvbnNTdWJtaXR0ZWQoKTsKLQotICAgIExheWVy
VHJlZUhvc3RDQTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7Ci19Ci0K
LSNpZiBVU0UoQVZGT1VOREFUSU9OKQotV2ViQ29yZTo6R3JhcGhpY3NEZXZpY2VBZGFwdGVyKiBM
YXllclRyZWVIb3N0Q0FXaW46OmdyYXBoaWNzRGV2aWNlQWRhcHRlcigpIGNvbnN0Ci17Ci0gICAg
aWYgKCFXS0NBQ0ZWaWV3R2V0RDNERGV2aWNlOVB0cigpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEdyYXBoaWNzRGV2aWNlQWRhcHRlcio+KFdLQ0FD
RlZpZXdHZXREM0REZXZpY2U5UHRyKCkobV92aWV3LmdldCgpKSk7Ci19Ci0jZW5kaWYKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLQotI2VuZGlmIC8vIEhBVkUoV0tRQ0EpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvY2Evd2luL0xheWVyVHJlZUhvc3RD
QVdpbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL3dpbi9MYXllclRy
ZWVIb3N0Q0FXaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk5NGE4OGI1YmJh
MDI5ZGU0MzQ4ODA1ZWYzNDI5ZGQzMDQwNzYwZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvY2Ev
d2luL0xheWVyVHJlZUhvc3RDQVdpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgTGF5ZXJUcmVlSG9zdENBV2luX2gKLSNkZWZpbmUgTGF5ZXJU
cmVlSG9zdENBV2luX2gKLQotI2luY2x1ZGUgIkhlYWRlckRldGVjdGlvbi5oIgotCi0jaWYgSEFW
RShXS1FDQSkKLQotI2luY2x1ZGUgIkNvYWxlc2NlZFdpbmRvd0dlb21ldHJpZXNVcGRhdGVyLmgi
Ci0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdENBLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9BYnN0cmFj
dENBQ0ZMYXllclRyZWVIb3N0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9XS0NBQ0ZWaWV3KiBXS0NBQ0ZW
aWV3UmVmOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV0tDQUNGVmlld1dpbmRvdzsK
LQotY2xhc3MgTGF5ZXJUcmVlSG9zdENBV2luIDogcHVibGljIExheWVyVHJlZUhvc3RDQSwgcHJp
dmF0ZSBXZWJDb3JlOjpBYnN0cmFjdENBQ0ZMYXllclRyZWVIb3N0IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKLQotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RDQVdpbj4gY3JlYXRlKFdlYlBhZ2UqKTsKLSAgICB2
aXJ0dWFsIH5MYXllclRyZWVIb3N0Q0FXaW4oKTsKLQotI2lmIFVTRShBVkZPVU5EQVRJT04pCi0g
ICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0RldmljZUFkYXB0ZXIqIGdyYXBoaWNzRGV2aWNl
QWRhcHRlcigpIGNvbnN0IE9WRVJSSURFOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgTGF5ZXJUcmVlSG9zdENBV2luKFdlYlBhZ2UqKTsKLQotICAgIHN0YXRpYyB2b2lkIGNvbnRl
eHREaWRDaGFuZ2VDYWxsYmFjayhXS0NBQ0ZWaWV3UmVmLCB2b2lkKiBpbmZvKTsKLSAgICB2b2lk
IGNvbnRleHREaWRDaGFuZ2UoKTsKLQotICAgIC8vIExheWVyVHJlZUhvc3QKLSAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdT
aXplKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgdmlydHVh
bCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2NoZWR1bGVDaGlsZFdpbmRvd0dlb21ldHJ5VXBkYXRlKGNvbnN0IFdpbmRvd0dlb21l
dHJ5Jik7Ci0KLSAgICAvLyBMYXllclRyZWVIb3N0Q0EKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZv
cm1Jbml0aWFsaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVy
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLQotICAgIC8vIEFic3RyYWN0Q0FDRkxheWVyVHJl
ZUhvc3QKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFkZFBlbmRpbmdBbmltYXRlZExheWVyKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPik7Ci0gICAgdmlydHVhbCB2b2lkIGxheWVyVHJl
ZURpZENoYW5nZSgpOwotICAgIHZpcnR1YWwgdm9pZCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXNO
b3coKTsKLQotICAgIE93blB0cjxXS0NBQ0ZWaWV3V2luZG93PiBtX3dpbmRvdzsKLSAgICBSZXRh
aW5QdHI8V0tDQUNGVmlld1JlZj4gbV92aWV3OwotICAgIEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6
OlBsYXRmb3JtQ0FMYXllcj4gPiBtX3BlbmRpbmdBbmltYXRlZExheWVyczsKLSAgICBib29sIG1f
aXNGbHVzaGluZ0xheWVyQ2hhbmdlczsKLSAgICBDb2FsZXNjZWRXaW5kb3dHZW9tZXRyaWVzVXBk
YXRlciBtX2dlb21ldHJpZXNVcGRhdGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBIQVZFKFdLUUNBKQotCi0jZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdENBV2luX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9jYS93aW4vV0tD
QUNGVmlld1dpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvY2Ev
d2luL1dLQ0FDRlZpZXdXaW5kb3cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
Y2UzN2M0NDkwYjk1YzNkOGRmYWRiYTIyMGUzM2QwNmEwYzNiN2ZlLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9jYS93aW4vV0tDQUNGVmlld1dpbmRvdy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
NjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJX
S0NBQ0ZWaWV3V2luZG93LmgiCi0KLSNpZiBIQVZFKFdLUUNBKQotCi0jaW5jbHVkZSA8V2ViQ29y
ZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJLaXRRdWFydHpDb3JlQWRk
aXRpb25zL1dLQ0FDRlZpZXcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1zdGF0aWMgTFBDV1NUUiB3aW5kb3dDbGFzc05hbWUgPSBMIldLQ0FD
RlZpZXdXaW5kb3dDbGFzcyI7Ci0KLVdLQ0FDRlZpZXdXaW5kb3c6OldLQ0FDRlZpZXdXaW5kb3co
V0tDQUNGVmlld1JlZiB2aWV3LCBIV05EIHBhcmVudFdpbmRvdywgRFdPUkQgYWRkaXRpb25hbFN0
eWxlcykKLSAgICA6IG1fd2luZG93KDApCi0gICAgLCBtX3ZpZXcodmlldykKLSAgICAsIG1fZGVs
ZXRlc1NlbGZXaGVuV2luZG93RGVzdHJveWVkKGZhbHNlKQotewotICAgIEFTU0VSVF9BUkcodmll
dywgdmlldyk7Ci0KLSAgICByZWdpc3RlckNsYXNzKCk7Ci0KLSAgICBVSU5UIHN0eWxlID0gV1Nf
Q0xJUENISUxEUkVOIHwgV1NfQ0xJUFNJQkxJTkdTIHwgYWRkaXRpb25hbFN0eWxlczsKLSAgICBp
ZiAocGFyZW50V2luZG93KQotICAgICAgICBzdHlsZSB8PSBXU19DSElMRDsKLSAgICBlbHNlCi0g
ICAgICAgIHN0eWxlIHw9IFdTX1BPUFVQOwotCi0gICAgbV93aW5kb3cgPSA6OkNyZWF0ZVdpbmRv
d0V4VygwLCB3aW5kb3dDbGFzc05hbWUsIEwiV0tDQUNGVmlld1dpbmRvdyIsIHN0eWxlLCAwLCAw
LCAwLCAwLCBwYXJlbnRXaW5kb3csIDAsIGluc3RhbmNlSGFuZGxlKCksIHRoaXMpOwotICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UobV93aW5kb3csICI6OkNyZWF0ZVdpbmRvd0V4VyBmYWlsZWQgd2l0
aCBlcnJvciAlbHUiLCA6OkdldExhc3RFcnJvcigpKTsKLX0KLQotV0tDQUNGVmlld1dpbmRvdzo6
fldLQ0FDRlZpZXdXaW5kb3coKQotewotICAgIGlmICghbV93aW5kb3cpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVCghbV9kZWxldGVzU2VsZldoZW5XaW5kb3dEZXN0cm95ZWQpOwotICAg
IDo6RGVzdHJveVdpbmRvdyhtX3dpbmRvdyk7Ci19Ci0KLUxSRVNVTFQgV0tDQUNGVmlld1dpbmRv
dzo6b25DdXN0b21EZXN0cm95KFdQQVJBTSwgTFBBUkFNKQotewotICAgIDo6RGVzdHJveVdpbmRv
dyhtX3dpbmRvdyk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUxSRVNVTFQgV0tDQUNGVmlld1dpbmRv
dzo6b25EZXN0cm95KFdQQVJBTSwgTFBBUkFNKQotewotICAgIFdLQ0FDRlZpZXdVcGRhdGUobV92
aWV3LmdldCgpLCAwLCAwKTsKLSAgICByZXR1cm4gMDsKLX0KLQotTFJFU1VMVCBXS0NBQ0ZWaWV3
V2luZG93OjpvbkVyYXNlQmFja2dyb3VuZChXUEFSQU0sIExQQVJBTSkKLXsKLSAgICAvLyBUZWxs
IFdpbmRvd3Mgbm90IHRvIGVyYXNlIHVzLgotICAgIHJldHVybiAxOwotfQotCi1MUkVTVUxUIFdL
Q0FDRlZpZXdXaW5kb3c6Om9uTkNEZXN0cm95KFdQQVJBTSwgTFBBUkFNKQotewotICAgIG1fd2lu
ZG93ID0gMDsKLQotICAgIGlmICghbV9kZWxldGVzU2VsZldoZW5XaW5kb3dEZXN0cm95ZWQpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgZGVsZXRlIHRoaXM7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LUxSRVNVTFQgV0tDQUNGVmlld1dpbmRvdzo6b25QYWludChXUEFSQU0sIExQQVJBTSkKLXsKLSAg
ICBXS0NBQ0ZWaWV3RHJhdyhtX3ZpZXcuZ2V0KCkpOwotICAgIDo6VmFsaWRhdGVSZWN0KG1fd2lu
ZG93LCAwKTsKLSAgICByZXR1cm4gMDsKLX0KLQotTFJFU1VMVCBXS0NBQ0ZWaWV3V2luZG93Ojpv
blByaW50Q2xpZW50KFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgaWYgKCEo
bFBhcmFtICYgUFJGX0NMSUVOVCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgV0tDQUNGVmll
d0RyYXdJbnRvREMobV92aWV3LmdldCgpLCByZWludGVycHJldF9jYXN0PEhEQz4od1BhcmFtKSk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV0tDQUNGVmlld1dpbmRvdzo6cmVnaXN0ZXJDbGFz
cygpCi17Ci0gICAgc3RhdGljIGJvb2wgZGlkUmVnaXN0ZXI7Ci0gICAgaWYgKGRpZFJlZ2lzdGVy
KQotICAgICAgICByZXR1cm47Ci0gICAgZGlkUmVnaXN0ZXIgPSB0cnVlOwotCi0gICAgV05EQ0xB
U1NXIHduZENsYXNzID0gezB9OwotICAgIHduZENsYXNzLmxwZm5XbmRQcm9jID0gc3RhdGljV25k
UHJvYzsKLSAgICB3bmRDbGFzcy5oSW5zdGFuY2UgPSBpbnN0YW5jZUhhbmRsZSgpOwotICAgIHdu
ZENsYXNzLmxwc3pDbGFzc05hbWUgPSB3aW5kb3dDbGFzc05hbWU7Ci0KLSAgICA6OlJlZ2lzdGVy
Q2xhc3NXKCZ3bmRDbGFzcyk7Ci19Ci0KLUxSRVNVTFQgV0tDQUNGVmlld1dpbmRvdzo6c3RhdGlj
V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSkKLXsKLSAgICBXS0NBQ0ZWaWV3V2luZG93KiB3aW5kb3cgPSByZWludGVycHJldF9jYXN0
PFdLQ0FDRlZpZXdXaW5kb3cqPig6OkdldFdpbmRvd0xvbmdQdHIoaFduZCwgR1dMUF9VU0VSREFU
QSkpOwotICAgIGlmICghd2luZG93KSB7Ci0gICAgICAgIGlmIChtZXNzYWdlICE9IFdNX0NSRUFU
RSkKLSAgICAgICAgICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2NXKGhXbmQsIG1lc3NhZ2UsIHdQ
YXJhbSwgbFBhcmFtKTsKLSAgICAgICAgQ1JFQVRFU1RSVUNUKiBjcmVhdGVTdHJ1Y3QgPSByZWlu
dGVycHJldF9jYXN0PENSRUFURVNUUlVDVCo+KGxQYXJhbSk7Ci0gICAgICAgIHdpbmRvdyA9IHN0
YXRpY19jYXN0PFdLQ0FDRlZpZXdXaW5kb3cqPihjcmVhdGVTdHJ1Y3QtPmxwQ3JlYXRlUGFyYW1z
KTsKLSAgICAgICAgOjpTZXRXaW5kb3dMb25nUHRyKGhXbmQsIEdXTFBfVVNFUkRBVEEsIHJlaW50
ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KHdpbmRvdykpOwotICAgIH0KLQotICAgIHJldHVybiB3aW5k
b3ctPnduZFByb2MobWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotfQotCi1MUkVTVUxUIFdLQ0FD
RlZpZXdXaW5kb3c6OnduZFByb2MoVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKQotewotICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAgIGNhc2UgY3VzdG9tRGVzdHJv
eU1lc3NhZ2U6Ci0gICAgICAgIHJldHVybiBvbkN1c3RvbURlc3Ryb3kod1BhcmFtLCBsUGFyYW0p
OwotICAgIGNhc2UgV01fREVTVFJPWToKLSAgICAgICAgcmV0dXJuIG9uRGVzdHJveSh3UGFyYW0s
IGxQYXJhbSk7Ci0gICAgY2FzZSBXTV9FUkFTRUJLR05EOgotICAgICAgICByZXR1cm4gb25FcmFz
ZUJhY2tncm91bmQod1BhcmFtLCBsUGFyYW0pOwotICAgIGNhc2UgV01fTkNERVNUUk9ZOgotICAg
ICAgICByZXR1cm4gb25OQ0Rlc3Ryb3kod1BhcmFtLCBsUGFyYW0pOwotICAgIGNhc2UgV01fUEFJ
TlQ6Ci0gICAgICAgIHJldHVybiBvblBhaW50KHdQYXJhbSwgbFBhcmFtKTsKLSAgICBjYXNlIFdN
X1BSSU5UQ0xJRU5UOgotICAgICAgICByZXR1cm4gb25QcmludENsaWVudCh3UGFyYW0sIGxQYXJh
bSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDo6RGVmV2luZG93UHJvY1cobV93aW5k
b3csIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL3dpbi9XS0NBQ0ZWaWV3
V2luZG93LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvY2Evd2luL1dLQ0FD
RlZpZXdXaW5kb3cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkxMTQ2YTRjYjk0
OGIxOGQ0MjQwNTJlYzZjYzUzMGZhM2ZlOTU0Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvY2Ev
d2luL1dLQ0FDRlZpZXdXaW5kb3cuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFdLQ0FDRlZpZXdXaW5kb3dfaAotI2RlZmluZSBXS0NBQ0ZWaWV3
V2luZG93X2gKLQotI2luY2x1ZGUgIkhlYWRlckRldGVjdGlvbi5oIgotCi0jaWYgSEFWRShXS1FD
QSkKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX1dLQ0FDRlZpZXcqIFdLQ0FDRlZpZXdSZWY7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi0vLyBGSVhNRTogTW92ZSB0aGlzIGNsYXNzIGRvd24gdG8gV2Vi
Q29yZS4gKE1heWJlIGl0IGNhbiBldmVuIHJlcGxhY2Ugc29tZSBvZiBXS0NBQ0ZWaWV3TGF5ZXJU
cmVlSG9zdC4pCi1jbGFzcyBXS0NBQ0ZWaWV3V2luZG93IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShXS0NBQ0ZWaWV3V2luZG93KTsKLXB1YmxpYzoKLSAgICAvLyBXS0NBQ0ZWaWV3V2luZG93
IHdpbGwgZGVzdHJveSBpdHMgSFdORCB3aGVuIHRoaXMgbWVzc2FnZSBpcyByZWNlaXZlZC4KLSAg
ICBzdGF0aWMgY29uc3QgVUlOVCBjdXN0b21EZXN0cm95TWVzc2FnZSA9IFdNX1VTRVIgKyAxOwot
Ci0gICAgV0tDQUNGVmlld1dpbmRvdyhXS0NBQ0ZWaWV3UmVmLCBIV05EIHBhcmVudFdpbmRvdywg
RFdPUkQgYWRkaXRpb25hbFN0eWxlcyk7Ci0gICAgfldLQ0FDRlZpZXdXaW5kb3coKTsKLQotICAg
IHZvaWQgc2V0RGVsZXRlc1NlbGZXaGVuV2luZG93RGVzdHJveWVkKGJvb2wgZGVsZXRlcykgeyBt
X2RlbGV0ZXNTZWxmV2hlbldpbmRvd0Rlc3Ryb3llZCA9IGRlbGV0ZXM7IH0KLQotICAgIEhXTkQg
d2luZG93KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3c7IH0KLQotcHJpdmF0ZToKLSAgICBMUkVT
VUxUIG9uQ3VzdG9tRGVzdHJveShXUEFSQU0sIExQQVJBTSk7Ci0gICAgTFJFU1VMVCBvbkRlc3Ry
b3koV1BBUkFNLCBMUEFSQU0pOwotICAgIExSRVNVTFQgb25FcmFzZUJhY2tncm91bmQoV1BBUkFN
LCBMUEFSQU0pOwotICAgIExSRVNVTFQgb25OQ0Rlc3Ryb3koV1BBUkFNLCBMUEFSQU0pOwotICAg
IExSRVNVTFQgb25QYWludChXUEFSQU0sIExQQVJBTSk7Ci0gICAgTFJFU1VMVCBvblByaW50Q2xp
ZW50KFdQQVJBTSwgTFBBUkFNKTsKLSAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNsYXNzKCk7Ci0g
ICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgc3RhdGljV25kUHJvYyhIV05ELCBVSU5ULCBXUEFS
QU0sIExQQVJBTSk7Ci0gICAgTFJFU1VMVCB3bmRQcm9jKFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsK
LQotICAgIEhXTkQgbV93aW5kb3c7Ci0gICAgUmV0YWluUHRyPFdLQ0FDRlZpZXdSZWY+IG1fdmll
dzsKLSAgICBib29sIG1fZGVsZXRlc1NlbGZXaGVuV2luZG93RGVzdHJveWVkOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBIQVZFKFdLUUNBKQotCi0jZW5kaWYgLy8g
V0tDQUNGVmlld1dpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2Uvd2luL0RyYXdpbmdBcmVhSW1wbFdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2luL0RyYXdpbmdBcmVhSW1wbFdpbi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRmZWIwMDFmYTRhYjMwNmQwNGVhMmM3MmNjODk1MmNkYjBmZjM4NmMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9EcmF3aW5nQXJlYUltcGxXaW4uY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKLQotI2luY2x1ZGUgIlNoYXJlYWJsZUJp
dG1hcC5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0j
aW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXaW5kb3dHZW9tZXRy
eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBEcmF3aW5nQXJlYUlt
cGw6OnNjaGVkdWxlQ2hpbGRXaW5kb3dHZW9tZXRyeVVwZGF0ZShjb25zdCBXaW5kb3dHZW9tZXRy
eSYgZ2VvbWV0cnkpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlm
IChtX2xheWVyVHJlZUhvc3QpIHsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNo
aWxkV2luZG93R2VvbWV0cnlVcGRhdGUoZ2VvbWV0cnkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCi0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBNZXNzYWdlczo6RHJh
d2luZ0FyZWFQcm94eSwgYW5kIERyYXdpbmdBcmVhUHJveHkgc2hvdWxkIHBhc3MgdGhlCi0gICAg
Ly8gZGF0YSBvZmYgdG8gdGhlIFdlYlBhZ2VQcm94eS4KLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6U2NoZWR1bGVDaGlsZFdpbmRvd0dlb21ldHJ5VXBkYXRlKGdl
b21ldHJ5KSk7Ci19Ci0KLVBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBEcmF3aW5nQXJlYUlt
cGw6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dChTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCkKLXsKLSAg
ICBIREMgYml0bWFwREMgPSBiaXRtYXAtPndpbmRvd3NDb250ZXh0KCk7Ci0gICAgLy8gRklYTUU6
IFdlIHNob3VsZCByZWFsbHkgYmUgY2hlY2tpbmcgbV93ZWJQYWdlLT5kcmF3c1tUcmFuc3BhcmVu
dF1CYWNrZ3JvdW5kKCkgdG8gZGV0ZXJtaW5lCi0gICAgLy8gd2hldGhlciB0byBoYXZlIGFuIGFs
cGhhIGNoYW5uZWwgb3Igbm90LiBCdXQgY3VycmVudGx5IHdlIGFsd2F5cyByZW5kZXIgaW50byBh
IG5vbi1sYXllcmVkCi0gICAgLy8gd2luZG93LCBzbyB0aGUgYWxwaGEgY2hhbm5lbCBkb2Vzbid0
IG1hdHRlciBhbnl3YXkuCi0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQo
Yml0bWFwREMsIGZhbHNlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL0xheWVyVHJlZUhvc3RX
aW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9MYXllclRyZWVI
b3N0V2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdjMDRiYmYwNTBjNjhl
MjgwMDY3NmMzMzk0ZWRkMGY5M2Y4NTQ5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL0xh
eWVyVHJlZUhvc3RXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCi0K
LSNpZiBVU0UoQ0EpCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdENBV2luLmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCkKLXsKLSNpZiBVU0UoQ0EpICYmIEhBVkUoV0tRQ0EpCi0gICAgcmV0
dXJuIExheWVyVHJlZUhvc3RDQVdpbjo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7
Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93aW4v
V2ViSW5zcGVjdG9yV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93
aW4vV2ViSW5zcGVjdG9yV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFk
YTQ1ZDQxZWQwOTA4ZjZmZGVhZWZjZTM5YmM1NThkNjUxZTY0Ny4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd2luL1dlYkluc3BlY3Rvcldpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3Bl
Y3Rvci5oIgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLQotI2luY2x1ZGUgIldlYktpdEJ1bmRs
ZS5oIgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3I6Omxv
Y2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAotewotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gbG9j
YWxpemVkU3RyaW5nc1VSTFJlZihBZG9wdENGLCBDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTCh3ZWJL
aXRCdW5kbGUoKSwgQ0ZTVFIoImxvY2FsaXplZFN0cmluZ3MiKSwgQ0ZTVFIoImpzIiksIDApKTsK
LSAgICBpZiAoIWxvY2FsaXplZFN0cmluZ3NVUkxSZWYpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLQotICAgIHJldHVybiBTdHJpbmcoQ0ZVUkxHZXRTdHJpbmcobG9jYWxpemVkU3RyaW5nc1VS
TFJlZi5nZXQoKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd2luL1dlYlBhZ2VXaW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3dpbi9XZWJQYWdlV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlk
NzMzZWRkMTZkZWFjZjIwMDFkYmM4Yzk1NDRlODZjZmZkZTNiOS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd2luL1dlYlBhZ2VXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDY3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgot
Ci0jaW5jbHVkZSAiRm9udFNtb290aGluZ0xldmVsLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiV2ViRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJv
eHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzU3RvcmUuaCIKLSNpbmNsdWRl
ICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0ZvbnRSZW5kZXJpbmdNb2RlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9IaXRUZXN0UmVxdWVzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFn
ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1NldHRpbmdzLmg+Ci0jaWYgVVNFKENHKQotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNlbmRpZgotI2luY2x1ZGUgPFdpblVzZXIuaD4K
LQotI2lmIFVTRShDRk5FVFdPUkspCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJMQ2FjaGVQcml2
Lmg+Ci0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJMUHJvdG9jb2xQcml2Lmg+Ci0jaW5jbHVkZSA8
Q0ZOZXR3b3JrL0NGVVJMUmVxdWVzdFByaXYuaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgV2ViUGFnZTo6cGxhdGZvcm1J
bml0aWFsaXplKCkKLXsKLX0KLQotdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVByZWZlcmVuY2VzRGlk
Q2hhbmdlKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQotewotICAgIEZvbnRTbW9v
dGhpbmdMZXZlbCBmb250U21vb3RoaW5nTGV2ZWwgPSBzdGF0aWNfY2FzdDxGb250U21vb3RoaW5n
TGV2ZWw+KHN0b3JlLmdldFVJbnQzMlZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojpmb250
U21vb3RoaW5nTGV2ZWxLZXkoKSkpOwotCi0jaWYgVVNFKENHKQotICAgIEZvbnRTbW9vdGhpbmdM
ZXZlbCBhZGp1c3RlZExldmVsID0gZm9udFNtb290aGluZ0xldmVsOwotICAgIGlmIChhZGp1c3Rl
ZExldmVsID09IEZvbnRTbW9vdGhpbmdMZXZlbFdpbmRvd3MpCi0gICAgICAgIGFkanVzdGVkTGV2
ZWwgPSBGb250U21vb3RoaW5nTGV2ZWxNZWRpdW07Ci0gICAgd2tTZXRGb250U21vb3RoaW5nTGV2
ZWwoYWRqdXN0ZWRMZXZlbCk7Ci0jZW5kaWYKLQotICAgIG1fcGFnZS0+c2V0dGluZ3MoKS0+c2V0
Rm9udFJlbmRlcmluZ01vZGUoZm9udFNtb290aGluZ0xldmVsID09IEZvbnRTbW9vdGhpbmdMZXZl
bFdpbmRvd3MgPyBBbHRlcm5hdGVSZW5kZXJpbmdNb2RlIDogTm9ybWFsUmVuZGVyaW5nTW9kZSk7
Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBDdHJsS2V5ID0gMSA8PCAwOwotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIEFsdEtleSA9IDEgPDwgMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBTaGlm
dEtleSA9IDEgPDwgMjsKLQotc3RydWN0IEtleURvd25FbnRyeSB7Ci0gICAgdW5zaWduZWQgdmly
dHVhbEtleTsKLSAgICB1bnNpZ25lZCBtb2RpZmllcnM7Ci0gICAgY29uc3QgY2hhciogbmFtZTsK
LX07Ci0KLXN0cnVjdCBLZXlQcmVzc0VudHJ5IHsKLSAgICB1bnNpZ25lZCBjaGFyQ29kZTsKLSAg
ICB1bnNpZ25lZCBtb2RpZmllcnM7Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLX07Ci0KLXN0YXRp
YyBjb25zdCBLZXlEb3duRW50cnkga2V5RG93bkVudHJpZXNbXSA9IHsKLSAgICB7IFZLX0xFRlQs
ICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZUxlZnQiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICB7IFZLX0xFRlQsICAgU2hpZnRLZXksICAgICAgICAgICAiTW92
ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0xF
RlQsICAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVdvcmRMZWZ0IiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0xFRlQsICAgQ3RybEtleSB8IFNoaWZ0S2V5LCAi
TW92ZVdvcmRMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgfSwKLSAgICB7IFZL
X1JJR0hULCAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JJR0hULCAgU2hpZnRLZXksICAgICAgICAg
ICAiTW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgfSwKLSAgICB7
IFZLX1JJR0hULCAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVdvcmRSaWdodCIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JJR0hULCAgQ3RybEtleSB8IFNoaWZ0
S2V5LCAiTW92ZVdvcmRSaWdodEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwKLSAg
ICB7IFZLX1VQLCAgICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVVwIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1VQLCAgICAgU2hpZnRLZXksICAg
ICAgICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgICAgfSwK
LSAgICB7IFZLX1BSSU9SLCAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVBhZ2VVcEFuZE1vZGlm
eVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0RPV04sICAgMCwgICAgICAg
ICAgICAgICAgICAiTW92ZURvd24iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICB7IFZLX0RPV04sICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZURvd25BbmRNb2Rp
ZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX05FWFQsICAgU2hpZnRL
ZXksICAgICAgICAgICAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAg
ICAgfSwKLSAgICB7IFZLX1BSSU9SLCAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VVcCIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX05FWFQsICAgMCwg
ICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKLSAgICB7IFZLX0hPTUUsICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVn
aW5uaW5nT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0hPTUUsICAg
U2hpZnRLZXksICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0
aW9uIiAgICAgfSwKLSAgICB7IFZLX0hPTUUsICAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVRv
QmVnaW5uaW5nT2ZEb2N1bWVudCIgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0hPTUUs
ICAgQ3RybEtleSB8IFNoaWZ0S2V5LCAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlm
eVNlbGVjdGlvbiIgfSwKLQotICAgIHsgVktfRU5ELCAgICAwLCAgICAgICAgICAgICAgICAgICJN
b3ZlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktf
RU5ELCAgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxl
Y3Rpb24iICAgICAgICAgICB9LAotICAgIHsgVktfRU5ELCAgICBDdHJsS2V5LCAgICAgICAgICAg
ICJNb3ZlVG9FbmRPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsg
VktfRU5ELCAgICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9k
aWZ5U2VsZWN0aW9uIiAgICAgICB9LAotCi0gICAgeyBWS19CQUNLLCAgIDAsICAgICAgICAgICAg
ICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0g
ICAgeyBWS19CQUNLLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19ERUxFVEUsIDAsICAgICAgICAg
ICAgICAgICAgIkRlbGV0ZUZvcndhcmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
Ci0gICAgeyBWS19CQUNLLCAgIEN0cmxLZXksICAgICAgICAgICAgIkRlbGV0ZVdvcmRCYWNrd2Fy
ZCIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19ERUxFVEUsIEN0cmxLZXks
ICAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCi0gICAgCi0gICAgeyAnQicsICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIlRvZ2dsZUJv
bGQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnSScsICAgICAg
IEN0cmxLZXksICAgICAgICAgICAgIlRvZ2dsZUl0YWxpYyIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0KLSAgICB7IFZLX0VTQ0FQRSwgMCwgICAgICAgICAgICAgICAgICAiQ2Fu
Y2VsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX09F
TV9QRVJJT0QsIEN0cmxLZXksICAgICAgICAiQ2FuY2VsIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1RBQiwgICAgMCwgICAgICAgICAgICAgICAgICAi
SW5zZXJ0VGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZL
X1RBQiwgICAgU2hpZnRLZXksICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgMCwgICAgICAgICAgICAgICAg
ICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7
IFZLX1JFVFVSTiwgQ3RybEtleSwgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgQWx0S2V5LCAgICAgICAg
ICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAg
ICB7IFZLX1JFVFVSTiwgU2hpZnRLZXksICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgQWx0S2V5IHwgU2hp
ZnRLZXksICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
LQotICAgIC8vIEl0J3Mgbm90IHF1aXRlIGNsZWFyIHdoZXRoZXIgY2xpcGJvYXJkIHNob3J0Y3V0
cyBhbmQgVW5kby9SZWRvIHNob3VsZCBiZSBoYW5kbGVkCi0gICAgLy8gaW4gdGhlIGFwcGxpY2F0
aW9uIG9yIGluIFdlYktpdC4gV2UgY2hvc2UgV2ViS2l0LgotICAgIHsgJ0MnLCAgICAgICBDdHJs
S2V5LCAgICAgICAgICAgICJDb3B5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAotICAgIHsgJ1YnLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJQYXN0ZSIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1gnLCAgICAgICBD
dHJsS2V5LCAgICAgICAgICAgICJDdXQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotICAgIHsgJ0EnLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJTZWxlY3RB
bGwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfSU5TRVJU
LCBDdHJsS2V5LCAgICAgICAgICAgICJDb3B5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAotICAgIHsgVktfREVMRVRFLCBTaGlmdEtleSwgICAgICAgICAgICJDdXQi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfSU5T
RVJULCBTaGlmdEtleSwgICAgICAgICAgICJQYXN0ZSIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAotICAgIHsgJ1onLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJV
bmRvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1on
LCAgICAgICBDdHJsS2V5IHwgU2hpZnRLZXksICJSZWRvIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAotfTsKLQotc3RhdGljIGNvbnN0IEtleVByZXNzRW50cnkga2V5
UHJlc3NFbnRyaWVzW10gPSB7Ci0gICAgeyAnXHQnLCAgIDAsICAgICAgICAgICAgICAgICAgIklu
c2VydFRhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHQn
LCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2Vy
dE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAg
IEN0cmxLZXksICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgIEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5l
d2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgIFNo
aWZ0S2V5LCAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCi0gICAgeyAnXHInLCAgIEFsdEtleSB8IFNoaWZ0S2V5LCAgIkluc2VydE5ld2xp
bmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi19OwotCi1jb25zdCBjaGFyKiBX
ZWJQYWdlOjppbnRlcnByZXRLZXlFdmVudChjb25zdCBLZXlib2FyZEV2ZW50KiBldnQpCi17Ci0g
ICAgQVNTRVJUKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgfHwgZXZ0
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpOwotCi0gICAgc3RhdGljIEhh
c2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleURvd25Db21tYW5kc01hcCA9IDA7Ci0gICAgc3Rh
dGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleVByZXNzQ29tbWFuZHNNYXAgPSAwOwot
Ci0gICAgaWYgKCFrZXlEb3duQ29tbWFuZHNNYXApIHsKLSAgICAgICAga2V5RG93bkNvbW1hbmRz
TWFwID0gbmV3IEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj47Ci0gICAgICAgIGtleVByZXNzQ29t
bWFuZHNNYXAgPSBuZXcgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPjsKLQotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoa2V5RG93bkVudHJpZXMpOyArK2kp
Ci0gICAgICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAtPnNldChrZXlEb3duRW50cmllc1tpXS5t
b2RpZmllcnMgPDwgMTYgfCBrZXlEb3duRW50cmllc1tpXS52aXJ0dWFsS2V5LCBrZXlEb3duRW50
cmllc1tpXS5uYW1lKTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJB
WV9MRU5HVEgoa2V5UHJlc3NFbnRyaWVzKTsgKytpKQotICAgICAgICAgICAga2V5UHJlc3NDb21t
YW5kc01hcC0+c2V0KGtleVByZXNzRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlQcmVz
c0VudHJpZXNbaV0uY2hhckNvZGUsIGtleVByZXNzRW50cmllc1tpXS5uYW1lKTsKLSAgICB9Ci0K
LSAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOwotICAgIGlmIChldnQtPnNoaWZ0S2V5KCkpCi0g
ICAgICAgIG1vZGlmaWVycyB8PSBTaGlmdEtleTsKLSAgICBpZiAoZXZ0LT5hbHRLZXkoKSkKLSAg
ICAgICAgbW9kaWZpZXJzIHw9IEFsdEtleTsKLSAgICBpZiAoZXZ0LT5jdHJsS2V5KCkpCi0gICAg
ICAgIG1vZGlmaWVycyB8PSBDdHJsS2V5OwotCi0gICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKLSAgICAgICAgaW50IG1hcEtleSA9IG1vZGlmaWVycyA8
PCAxNiB8IGV2dC0+a2V5Q29kZSgpOwotICAgICAgICByZXR1cm4gbWFwS2V5ID8ga2V5RG93bkNv
bW1hbmRzTWFwLT5nZXQobWFwS2V5KSA6IDA7Ci0gICAgfQotCi0gICAgaW50IG1hcEtleSA9IG1v
ZGlmaWVycyA8PCAxNiB8IGV2dC0+Y2hhckNvZGUoKTsKLSAgICByZXR1cm4gbWFwS2V5ID8ga2V5
UHJlc3NDb21tYW5kc01hcC0+Z2V0KG1hcEtleSkgOiAwOwotfQotCi1ib29sIFdlYlBhZ2U6OnBl
cmZvcm1EZWZhdWx0QmVoYXZpb3JGb3JLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBr
ZXlib2FyZEV2ZW50KQotewotICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSAhPSBXZWJFdmVu
dDo6S2V5RG93biAmJiBrZXlib2FyZEV2ZW50LnR5cGUoKSAhPSBXZWJFdmVudDo6UmF3S2V5RG93
bikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoIChrZXlib2FyZEV2ZW50Lndp
bmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7Ci0gICAgY2FzZSBWS19CQUNLOgotICAgICAgICBpZiAo
a2V5Ym9hcmRFdmVudC5pc1N5c3RlbUtleSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5zaGlmdEtleSgpKQotICAgICAgICAgICAgbV9wYWdl
LT5nb0ZvcndhcmQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wYWdlLT5nb0JhY2so
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWS19MRUZUOgotICAgICAgICBpZiAoa2V5Ym9h
cmRFdmVudC5pc1N5c3RlbUtleSgpKQotICAgICAgICAgICAgbV9wYWdlLT5nb0JhY2soKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsTGVmdCwg
U2Nyb2xsQnlMaW5lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWS19SSUdIVDoKLSAgICAg
ICAgaWYgKGtleWJvYXJkRXZlbnQuaXNTeXN0ZW1LZXkoKSkKLSAgICAgICAgICAgIG1fcGFnZS0+
Z29Gb3J3YXJkKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNjcm9sbChtX3BhZ2UuZ2V0
KCksIFNjcm9sbFJpZ2h0LCBTY3JvbGxCeUxpbmUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFZLX1VQOgotICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5pc1N5c3RlbUtleSgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzY3JvbGwobV9wYWdlLmdldCgpLCBTY3JvbGxV
cCwgU2Nyb2xsQnlMaW5lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWS19ET1dOOgotICAg
ICAgICBpZiAoa2V5Ym9hcmRFdmVudC5pc1N5c3RlbUtleSgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBzY3JvbGwobV9wYWdlLmdldCgpLCBTY3JvbGxEb3duLCBTY3JvbGxC
eUxpbmUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFZLX0hPTUU6Ci0gICAgICAgIGlmIChr
ZXlib2FyZEV2ZW50LmlzU3lzdGVtS2V5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGxvZ2ljYWxTY3JvbGwobV9wYWdlLmdldCgpLCBTY3JvbGxCbG9ja0RpcmVjdGlvbkJh
Y2t3YXJkLCBTY3JvbGxCeURvY3VtZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWS19F
TkQ6Ci0gICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmlzU3lzdGVtS2V5KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxvZ2ljYWxTY3JvbGwobV9wYWdlLmdldCgpLCBTY3Jv
bGxCbG9ja0RpcmVjdGlvbkZvcndhcmQsIFNjcm9sbEJ5RG9jdW1lbnQpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFZLX1BSSU9SOgotICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5pc1N5c3Rl
bUtleSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBsb2dpY2FsU2Nyb2xs
KG1fcGFnZS5nZXQoKSwgU2Nyb2xsQmxvY2tEaXJlY3Rpb25CYWNrd2FyZCwgU2Nyb2xsQnlQYWdl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWS19ORVhUOgotICAgICAgICBpZiAoa2V5Ym9h
cmRFdmVudC5pc1N5c3RlbUtleSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBsb2dpY2FsU2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsQmxvY2tEaXJlY3Rpb25Gb3J3YXJk
LCBTY3JvbGxCeVBhZ2UpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBVU0UoQ0ZO
RVRXT1JLKQotc3RhdGljIFJldGFpblB0cjxDRkNhY2hlZFVSTFJlc3BvbnNlUmVmPiBjYWNoZWRS
ZXNwb25zZUZvclVSTChXZWJQYWdlKiB3ZWJQYWdlLCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAg
UmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTChBZG9wdENGLCB1cmwuY3JlYXRlQ0ZVUkwoKSk7Ci0g
ICAgUmV0YWluUHRyPENGTXV0YWJsZVVSTFJlcXVlc3RSZWY+IHJlcXVlc3QoQWRvcHRDRiwgQ0ZV
UkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZSgwLCBjZlVSTC5nZXQoKSwga0NGVVJMUmVxdWVzdENhY2hl
UG9saWN5UmVsb2FkSWdub3JpbmdDYWNoZSwgNjAsIDApKTsKLSNpZiBORUVEU19GSVhJTkdfQUZU
RVJfUjEzNDk2MAotICAgIHdrU2V0UmVxdWVzdFN0b3JhZ2VTZXNzaW9uKFJlc291cmNlSGFuZGxl
OjpjdXJyZW50U3RvcmFnZVNlc3Npb24oKSwgcmVxdWVzdC5nZXQoKSk7Ci0jZW5kaWYKLQotICAg
IENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJGaWVsZFZhbHVlKHJlcXVlc3QuZ2V0KCksIENGU1RS
KCJVc2VyLUFnZW50IiksIHdlYlBhZ2UtPnVzZXJBZ2VudCgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCkpOwotCi0gICAgUmV0YWluUHRyPENGVVJMQ2FjaGVSZWY+IGNhY2hlOwotI2lmIE5FRURTX0ZJ
WElOR19BRlRFUl9SMTM0OTYwCi0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgY3VycmVu
dFN0b3JhZ2VTZXNzaW9uID0gUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lvbigp
KQotICAgICAgICBjYWNoZS5hZG9wdENGKHdrQ29weVVSTENhY2hlKGN1cnJlbnRTdG9yYWdlU2Vz
c2lvbikpOwotICAgIGVsc2UKLSAgICAgICAgY2FjaGUuYWRvcHRDRihDRlVSTENhY2hlQ29weVNo
YXJlZFVSTENhY2hlKCkpOwotI2VuZGlmCi0KLSAgICBSZXRhaW5QdHI8Q0ZDYWNoZWRVUkxSZXNw
b25zZVJlZj4gcmVzcG9uc2UoQWRvcHRDRiwgQ0ZVUkxDYWNoZUNvcHlSZXNwb25zZUZvclJlcXVl
c3QoY2FjaGUuZ2V0KCksIHJlcXVlc3QuZ2V0KCkpKTsKLSAgICByZXR1cm4gcmVzcG9uc2U7ICAg
ICAgICAKLX0KLSNlbmRpZgotCi1ib29sIFdlYlBhZ2U6OnBsYXRmb3JtSGFzTG9jYWxEYXRhRm9y
VVJMKGNvbnN0IEtVUkwmIHVybCkKLXsKLSNpZiBVU0UoQ0ZORVRXT1JLKQotICAgIHJldHVybiBj
YWNoZWRSZXNwb25zZUZvclVSTCh0aGlzLCB1cmwpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7
Ci0jZW5kaWYKLX0KLQotU3RyaW5nIFdlYlBhZ2U6OmNhY2hlZFJlc3BvbnNlTUlNRVR5cGVGb3JV
UkwoY29uc3QgS1VSTCYgdXJsKQotewotI2lmIFVTRShDRk5FVFdPUkspCi0gICAgUmV0YWluUHRy
PENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY+IGNhY2hlZFJlc3BvbnNlID0gY2FjaGVkUmVzcG9uc2VG
b3JVUkwodGhpcywgdXJsKTsKLSAgICBDRlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlID0gQ0ZDYWNo
ZWRVUkxSZXNwb25zZUdldFdyYXBwZWRSZXNwb25zZShjYWNoZWRSZXNwb25zZS5nZXQoKSk7Ci0g
ICAgcmV0dXJuIHJlc3BvbnNlID8gQ0ZVUkxSZXNwb25zZUdldE1JTUVUeXBlKHJlc3BvbnNlKSA6
IFN0cmluZygpOwotI2Vsc2UKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci0jZW5kaWYKLX0KLQotU3Ry
aW5nIFdlYlBhZ2U6OmNhY2hlZFN1Z2dlc3RlZEZpbGVuYW1lRm9yVVJMKGNvbnN0IEtVUkwmIHVy
bCkKLXsKLSNpZiBVU0UoQ0ZORVRXT1JLKQotICAgIFJldGFpblB0cjxDRkNhY2hlZFVSTFJlc3Bv
bnNlUmVmPiBjYWNoZWRSZXNwb25zZSA9IGNhY2hlZFJlc3BvbnNlRm9yVVJMKHRoaXMsIHVybCk7
Ci0gICAgQ0ZVUkxSZXNwb25zZVJlZiByZXNwb25zZSA9IENGQ2FjaGVkVVJMUmVzcG9uc2VHZXRX
cmFwcGVkUmVzcG9uc2UoY2FjaGVkUmVzcG9uc2UuZ2V0KCkpOwotICAgIGlmICghcmVzcG9uc2Up
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN1
Z2dlc3RlZEZpbGVuYW1lKEFkb3B0Q0YsIENGVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5h
bWUocmVzcG9uc2UpKTsKLQotICAgIHJldHVybiBzdWdnZXN0ZWRGaWxlbmFtZS5nZXQoKTsKLSNl
bHNlCi0gICAgcmV0dXJuIFN0cmluZygpOwotI2VuZGlmCi19Ci0KLVBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBXZWJQYWdlOjpjYWNoZWRSZXNwb25zZURhdGFGb3JVUkwoY29uc3QgS1VSTCYgdXJs
KQotewotI2lmIFVTRShDRk5FVFdPUkspCi0gICAgUmV0YWluUHRyPENGQ2FjaGVkVVJMUmVzcG9u
c2VSZWY+IGNhY2hlZFJlc3BvbnNlID0gY2FjaGVkUmVzcG9uc2VGb3JVUkwodGhpcywgdXJsKTsK
LSAgICBDRkRhdGFSZWYgZGF0YSA9IENGQ2FjaGVkVVJMUmVzcG9uc2VHZXRSZWNlaXZlckRhdGEo
Y2FjaGVkUmVzcG9uc2UuZ2V0KCkpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKGRhdGEpOwotI2Vsc2UKLSAg
ICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi1ib29sIFdlYlBhZ2U6OnBsYXRmb3JtQ2FuSGFuZGxl
UmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0jaWYg
VVNFKENGTkVUV09SSykKLSAgICByZXR1cm4gQ0ZVUkxQcm90b2NvbENhbkhhbmRsZVJlcXVlc3Qo
cmVxdWVzdC5jZlVSTFJlcXVlc3QoKSk7Ci0jZWxzZQotICAgIHJldHVybiB0cnVlOwotI2VuZGlm
Ci19Ci0KLXZvaWQgV2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29t
cG9zaXRpb25TdHJpbmcpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUt
PmVkaXRvcigpLT5jYW5FZGl0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+ZWRpdG9y
KCktPmNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZyk7Ci19Ci0KLXZvaWQgV2Vi
UGFnZTo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiBjb21wb3NpdGlvblN0cmluZywgY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcywgdWlu
dDY0X3QgY3Vyc29yUG9zaXRpb24pCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSB8fCAh
ZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+
ZWRpdG9yKCktPnNldENvbXBvc2l0aW9uKGNvbXBvc2l0aW9uU3RyaW5nLCB1bmRlcmxpbmVzLCBj
dXJzb3JQb3NpdGlvbiwgMCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6Zmlyc3RSZWN0Rm9yQ2hhcmFj
dGVySW5TZWxlY3RlZFJhbmdlKGNvbnN0IHVpbnQ2NF90IGNoYXJhY3RlclBvc2l0aW9uLCBXZWJD
b3JlOjpJbnRSZWN0JiByZXN1bHRSZWN0KQotewotICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIEludFJlY3QgcmVj
dDsKLSAgICBpZiAoUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS0+aGFzQ29t
cG9zaXRpb24oKSA/IGZyYW1lLT5lZGl0b3IoKS0+Y29tcG9zaXRpb25SYW5nZSgpIDogZnJhbWUt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7Ci0gICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IHRlbXBSYW5nZSA9
IHJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKLSAgICAgICAgdGVtcFJhbmdlLT5zZXRTdGFydCh0ZW1w
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSwgdGVtcFJhbmdlLT5zdGFydE9mZnNldChlYykgKyBj
aGFyYWN0ZXJQb3NpdGlvbiwgZWMpOwotICAgICAgICByZWN0ID0gZnJhbWUtPmVkaXRvcigpLT5m
aXJzdFJlY3RGb3JSYW5nZSh0ZW1wUmFuZ2UuZ2V0KCkpOwotICAgIH0KLSAgICByZXN1bHRSZWN0
ID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKLX0KLQotdm9pZCBXZWJQ
YWdlOjpnZXRTZWxlY3RlZFRleHQoU3RyaW5nJiB0ZXh0KQotewotICAgIEZyYW1lKiBmcmFtZSA9
IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFJl
ZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxp
emVkUmFuZ2UoKTsKLSAgICB0ZXh0ID0gc2VsZWN0ZWRSYW5nZS0+dGV4dCgpOwotfQotCi12b2lk
IFdlYlBhZ2U6Omdlc3R1cmVXaWxsQmVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50
LCBib29sJiBjYW5CZWdpblBhbm5pbmcpCi17Ci0gICAgbV9nZXN0dXJlUmVhY2hlZFNjcm9sbGlu
Z0xpbWl0ID0gZmFsc2U7Ci0KLSAgICBib29sIGhpdFNjcm9sbGJhciA9IGZhbHNlOwotCi0gICAg
SGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkpOwotICAgIGZv
ciAoRnJhbWUqIGNoaWxkRnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOyBjaGlsZEZyYW1lOyBj
aGlsZEZyYW1lID0gRXZlbnRIYW5kbGVyOjpzdWJmcmFtZUZvclRhcmdldE5vZGUobV9nZXN0dXJl
VGFyZ2V0Tm9kZS5nZXQoKSkpIHsKLSAgICAgICAgU2Nyb2xsVmlldyogc2NvbGxWaWV3ID0gY2hp
bGRGcmFtZS0+dmlldygpOwotICAgICAgICBpZiAoIXNjb2xsVmlldykKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAKLSAgICAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IGNoaWxkRnJh
bWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJWaWV3KQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVy
Vmlldy0+bGF5ZXIoKTsKLSAgICAgICAgaWYgKCFsYXllcikKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gc2NvbGxWaWV3LT53aW5kb3dUb0NvbnRl
bnRzKHBvaW50KTsKLSAgICAgICAgbGF5ZXItPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKLSAg
ICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKLQotICAgICAg
ICBpZiAoIWhpdFNjcm9sbGJhcikKLSAgICAgICAgICAgIGhpdFNjcm9sbGJhciA9IHJlc3VsdC5z
Y3JvbGxiYXIoKTsKLSAgICB9Ci0KLSAgICBpZiAoaGl0U2Nyb2xsYmFyKSB7Ci0gICAgICAgIGNh
bkJlZ2luUGFubmluZyA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCFtX2dlc3R1cmVUYXJnZXROb2RlKSB7Ci0gICAgICAgIGNhbkJlZ2luUGFubmluZyA9IGZhbHNl
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKTsgcmVuZGVyZXI7IHJlbmRlcmVy
ID0gcmVuZGVyZXItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aXNCb3goKSAm
JiB0b1JlbmRlckJveChyZW5kZXJlciktPmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJl
YSgpKSB7Ci0gICAgICAgICAgICBjYW5CZWdpblBhbm5pbmcgPSB0cnVlOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FuQmVnaW5QYW5uaW5nID0gZmFsc2U7
Ci19Ci0KLXN0YXRpYyBib29sIHNjcm9sbGJhckF0VG9wT3JCb3R0b21PZkRvY3VtZW50KFNjcm9s
bGJhciogc2Nyb2xsYmFyKQotewotICAgIEFTU0VSVF9BUkcoc2Nyb2xsYmFyLCBzY3JvbGxiYXIp
OwotICAgIHJldHVybiAhc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgfHwgc2Nyb2xsYmFyLT5jdXJy
ZW50UG9zKCkgPj0gc2Nyb2xsYmFyLT5tYXhpbXVtKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6Z2Vz
dHVyZURpZFNjcm9sbChjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIEFTU0VSVF9BUkcoc2l6
ZSwgIXNpemUuaXNaZXJvKCkpOwotCi0gICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlIHx8ICFt
X2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpIHx8ICFtX2dlc3R1cmVUYXJnZXROb2RlLT5y
ZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY3Jv
bGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gMDsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9w
YWdlLT5tYWluRnJhbWUoKSkgewotICAgICAgICBpZiAoU2Nyb2xsVmlldyogdmlldyA9IGZyYW1l
LT52aWV3KCkpCi0gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhciA9IHZpZXctPnZlcnRpY2Fs
U2Nyb2xsYmFyKCk7Ci0gICAgfQotCi0gICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIo
KS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShzaXplKTsKLSAgICBib29s
IGdlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQgPSB2ZXJ0aWNhbFNjcm9sbGJhciAmJiBzY3Jv
bGxiYXJBdFRvcE9yQm90dG9tT2ZEb2N1bWVudCh2ZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICAv
LyBGSVhNRTogV2UgcmVhbGx5IG9ubHkgd2FudCB0byB1cGRhdGUgdGhpcyBzdGF0ZSBpZiB0aGUg
c3RhdGUgd2FzIHVwZGF0ZWQgdmlhIHNjcm9sbGluZyB0aGUgbWFpbiBmcmFtZSwKLSAgICAvLyBu
b3Qgc2Nyb2xsaW5nIHNvbWV0aGluZyBpbiBhIG1haW4gZnJhbWUgd2hlbiB0aGUgbWFpbiBmcmFt
ZSBoYWQgYWxyZWFkeSByZWFjaGVkIGl0cyBzY3JvbGxpbmcgbGltaXQuCi0KLSAgICBpZiAoZ2Vz
dHVyZVJlYWNoZWRTY3JvbGxpbmdMaW1pdCA9PSBtX2dlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGlt
aXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2V0R2VzdHVyZVJlYWNoZWRTY3JvbGxpbmdMaW1pdChnZXN0dXJlUmVhY2hlZFNjcm9sbGluZ0xp
bWl0KSk7Ci0gICAgbV9nZXN0dXJlUmVhY2hlZFNjcm9sbGluZ0xpbWl0ID0gZ2VzdHVyZVJlYWNo
ZWRTY3JvbGxpbmdMaW1pdDsKLX0KLQotdm9pZCBXZWJQYWdlOjpnZXN0dXJlRGlkRW5kKCkKLXsK
LSAgICBtX2dlc3R1cmVUYXJnZXROb2RlID0gbnVsbHB0cjsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3dpbi9XZWJQcm9j
ZXNzTWFpbldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNz
TWFpbldpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0Y2VjMjA0YzE1YmU1
YmYyMjA1OTFmYThjYTU3NzlhNTE0MGIxZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vz
c01haW5XaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzTWFpbi5oIgotCi0jaW5j
bHVkZSAiQ29tbWFuZExpbmUuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLSNpZiBVU0UoU0FGQVJJX1RIRU1FKQotI2lmZGVmIERFQlVHX0FMTAot
U09GVF9MSU5LX0RFQlVHX0xJQlJBUlkoU2FmYXJpVGhlbWUpCi0jZWxzZQotU09GVF9MSU5LX0xJ
QlJBUlkoU2FmYXJpVGhlbWUpCi0jZW5kaWYKLQotU09GVF9MSU5LKFNhZmFyaVRoZW1lLCBTVElu
aXRpYWxpemUsIHZvaWQsIEFQSUVOVFJZLCAoKSwgKCkpCi0KLXN0YXRpYyB2b2lkIGluaXRpYWxp
emVTYWZhcmlUaGVtZSgpCi17Ci0gICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZVNhZmFyaVRo
ZW1lOwotICAgIGlmICghZGlkSW5pdGlhbGl6ZVNhZmFyaVRoZW1lKSB7Ci0gICAgICAgIGlmIChT
YWZhcmlUaGVtZUxpYnJhcnkoKSkKLSAgICAgICAgICAgIFNUSW5pdGlhbGl6ZSgpOwotICAgICAg
ICBkaWRJbml0aWFsaXplU2FmYXJpVGhlbWUgPSB0cnVlOwotICAgIH0KLX0KLSNlbmRpZiAvLyBV
U0UoU0FGQVJJX1RIRU1FKQotCi1pbnQgV2ViUHJvY2Vzc01haW4oY29uc3QgQ29tbWFuZExpbmUm
IGNvbW1hbmRMaW5lKQotewotICAgIDo6T2xlSW5pdGlhbGl6ZSgwKTsKLQotI2lmIFVTRShTQUZB
UklfVEhFTUUpCi0gICAgaW5pdGlhbGl6ZVNhZmFyaVRoZW1lKCk7Ci0jZW5kaWYKLQotICAgIEpT
Qzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQo
KTsKLSAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKLQotICAgIGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllclN0cmluZyA9IGNvbW1hbmRMaW5lWyJjbGllbnRJZGVudGlmaWVyIl07
Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHJldHVybiBhbiBlcnJvciBjb2RlIGhlcmU/Ci0g
ICAgSEFORExFIGNsaWVudElkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PEhBTkRMRT4oaWRl
bnRpZmllclN0cmluZy50b1VJbnQ2NFN0cmljdCgpKTsKLSAgICBpZiAoIWNsaWVudElkZW50aWZp
ZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlh
bGl6ZUNvbm5lY3Rpb24oY2xpZW50SWRlbnRpZmllcik7Ci0KLSAgICBSdW5Mb29wOjpydW4oKTsK
LQotICAgIHJldHVybiAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NXaW4uY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQ0YWZhYjFiNjgyMzkxMzQzMjkyZTJmN2EyYWQyNWQ5YTQ4YjNjNjMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJXZWJQcm9jZXNzLmgiCi0KLSNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyLmgiCi0jaW5jbHVk
ZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01lbW9y
eUNhY2hlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlQ2FjaGUuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlSGFuZGxlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgVVNFKENGTkVUV09SSykKLSNpbmNs
dWRlIDxDRk5ldHdvcmsvQ0ZVUkxDYWNoZVByaXYuaD4KLSNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZV
UkxQcm90b2NvbFByaXYuaD4KLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0
U3lzdGVtSW50ZXJmYWNlLmg+IAotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNlbmRpZgot
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdWludDY0X3QgbWVtb3J5U2l6ZSgpCi17Ci0gICAgTUVN
T1JZU1RBVFVTRVggc3RhdGV4OwotICAgIHN0YXRleC5kd0xlbmd0aCA9IHNpemVvZihzdGF0ZXgp
OwotICAgIEdsb2JhbE1lbW9yeVN0YXR1c0V4KCZzdGF0ZXgpOwotICAgIHJldHVybiBzdGF0ZXgu
dWxsVG90YWxQaHlzOwotfQotCi1zdGF0aWMgdWludDY0X3Qgdm9sdW1lRnJlZVNpemUoQ0ZTdHJp
bmdSZWYgY2ZzdHJpbmdQYXRoKQotewotICAgIFdURjo6U3RyaW5nIHBhdGgoY2ZzdHJpbmdQYXRo
KTsKLSAgICBVTEFSR0VfSU5URUdFUiBmcmVlQnl0ZXNUb0NhbGxlcjsKLSAgICBCT09MIHJlc3Vs
dCA9IEdldERpc2tGcmVlU3BhY2VFeFcoKExQQ1dTVFIpcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLCAmZnJlZUJ5dGVzVG9DYWxsZXIsIDAsIDApOwotICAgIGlmICghcmVzdWx0
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZnJlZUJ5dGVzVG9DYWxsZXIuUXVhZFBh
cnQ7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKENhY2hlTW9k
ZWwgY2FjaGVNb2RlbCkKLXsKLSNpZiBVU0UoQ0ZORVRXT1JLKQotICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gY2Z1cmxDYWNoZURpcmVjdG9yeTsKLQotI2lmIE5FRURTX0ZJWElOR19BRlRFUl9S
MTM0OTYwCi0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgZGVmYXVsdFN0b3JhZ2VTZXNz
aW9uID0gUmVzb3VyY2VIYW5kbGU6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKQotICAgICAgICBj
ZnVybENhY2hlRGlyZWN0b3J5LmFkb3B0Q0Yod2tDb3B5Rm91bmRhdGlvbkNhY2hlRGlyZWN0b3J5
KGRlZmF1bHRTdG9yYWdlU2Vzc2lvbikpOwotICAgIGVsc2UKLSAgICAgICAgY2Z1cmxDYWNoZURp
cmVjdG9yeS5hZG9wdENGKHdrQ29weUZvdW5kYXRpb25DYWNoZURpcmVjdG9yeSgwKSk7Ci0jZW5k
aWYKLSAgICBpZiAoIWNmdXJsQ2FjaGVEaXJlY3RvcnkpCi0gICAgICAgIGNmdXJsQ2FjaGVEaXJl
Y3RvcnkgPSBXZWJDb3JlOjpsb2NhbFVzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKS5jcmVh
dGVDRlN0cmluZygpOwotCi0gICAgLy8gQXMgYSBmdWRnZSBmYWN0b3IsIHVzZSAxMDAwIGluc3Rl
YWQgb2YgMTAyNCwgaW4gY2FzZSB0aGUgcmVwb3J0ZWQgYnl0ZSAKLSAgICAvLyBjb3VudCBkb2Vz
bid0IGFsaWduIGV4YWN0bHkgdG8gYSBtZWdhYnl0ZSBib3VuZGFyeS4KLSAgICB1aW50NjRfdCBt
ZW1TaXplID0gbWVtb3J5U2l6ZSgpIC8gMTAyNCAvIDEwMDA7Ci0gICAgdWludDY0X3QgZGlza0Zy
ZWVTaXplID0gdm9sdW1lRnJlZVNpemUoY2Z1cmxDYWNoZURpcmVjdG9yeS5nZXQoKSkgLyAxMDI0
IC8gMTAwMDsKLQotICAgIHVuc2lnbmVkIGNhY2hlVG90YWxDYXBhY2l0eSA9IDA7Ci0gICAgdW5z
aWduZWQgY2FjaGVNaW5EZWFkQ2FwYWNpdHkgPSAwOwotICAgIHVuc2lnbmVkIGNhY2hlTWF4RGVh
ZENhcGFjaXR5ID0gMDsKLSAgICBkb3VibGUgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZh
bCA9IDA7Ci0gICAgdW5zaWduZWQgcGFnZUNhY2hlQ2FwYWNpdHkgPSAwOwotICAgIHVuc2lnbmVk
IGxvbmcgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyB1cmxD
YWNoZURpc2tDYXBhY2l0eSA9IDA7Ci0KLSAgICBjYWxjdWxhdGVDYWNoZVNpemVzKGNhY2hlTW9k
ZWwsIG1lbVNpemUsIGRpc2tGcmVlU2l6ZSwKLSAgICAgICAgY2FjaGVUb3RhbENhcGFjaXR5LCBj
YWNoZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGRlYWREZWNvZGVkRGF0
YURlbGV0aW9uSW50ZXJ2YWwsCi0gICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5LCB1cmxDYWNoZU1l
bW9yeUNhcGFjaXR5LCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7Ci0KLSAgICBtZW1vcnlDYWNoZSgp
LT5zZXRDYXBhY2l0aWVzKGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0
eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsKLSAgICBtZW1vcnlDYWNoZSgpLT5zZXREZWFkRGVjb2Rl
ZERhdGFEZWxldGlvbkludGVydmFsKGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpOwot
ICAgIHBhZ2VDYWNoZSgpLT5zZXRDYXBhY2l0eShwYWdlQ2FjaGVDYXBhY2l0eSk7Ci0KLSAgICBS
ZXRhaW5QdHI8Q0ZVUkxDYWNoZVJlZj4gY2Z1cmxDYWNoZTsKLSNpZiBORUVEU19GSVhJTkdfQUZU
RVJfUjEzNDk2MAotICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGRlZmF1bHRTdG9yYWdl
U2Vzc2lvbiA9IFJlc291cmNlSGFuZGxlOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSkKLSAgICAg
ICAgY2Z1cmxDYWNoZS5hZG9wdENGKHdrQ29weVVSTENhY2hlKGRlZmF1bHRTdG9yYWdlU2Vzc2lv
bikpOwotICAgIGVsc2UKLSAgICAgICAgY2Z1cmxDYWNoZS5hZG9wdENGKENGVVJMQ2FjaGVDb3B5
U2hhcmVkVVJMQ2FjaGUoKSk7Ci0jZW5kaWYKLSAgICBDRlVSTENhY2hlU2V0TWVtb3J5Q2FwYWNp
dHkoY2Z1cmxDYWNoZS5nZXQoKSwgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSk7Ci0gICAgQ0ZVUkxD
YWNoZVNldERpc2tDYXBhY2l0eShjZnVybENhY2hlLmdldCgpLCBtYXg8dW5zaWduZWQgbG9uZz4o
dXJsQ2FjaGVEaXNrQ2FwYWNpdHksIENGVVJMQ2FjaGVEaXNrQ2FwYWNpdHkoY2Z1cmxDYWNoZS5n
ZXQoKSkpKTsgLy8gRG9uJ3Qgc2hyaW5rIGEgYmlnIGRpc2sgY2FjaGUsIHNpbmNlIHRoYXQgd291
bGQgY2F1c2UgY2h1cm4uCi0jZW5kaWYKLX0KLQotdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUNs
ZWFyUmVzb3VyY2VDYWNoZXMoUmVzb3VyY2VDYWNoZXNUb0NsZWFyIGNhY2hlc1RvQ2xlYXIpCi17
Ci0jaWYgVVNFKENGTkVUV09SSykKLSAgICBpZiAoY2FjaGVzVG9DbGVhciA9PSBJbk1lbW9yeVJl
c291cmNlQ2FjaGVzT25seSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmV0YWluUHRyPENGVVJM
Q2FjaGVSZWY+IGNhY2hlOwotI2lmIE5FRURTX0ZJWElOR19BRlRFUl9SMTM0OTYwCi0gICAgaWYg
KENGVVJMU3RvcmFnZVNlc3Npb25SZWYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gUmVzb3VyY2VI
YW5kbGU6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKQotICAgICAgICBjYWNoZS5hZG9wdENGKHdr
Q29weVVSTENhY2hlKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbikpOwotICAgIGVsc2UKLSAgICAgICAg
Y2FjaGUuYWRvcHRDRihDRlVSTENhY2hlQ29weVNoYXJlZFVSTENhY2hlKCkpOwotI2VuZGlmCi0g
ICAgQ0ZVUkxDYWNoZVJlbW92ZUFsbENhY2hlZFJlc3BvbnNlcyhjYWNoZS5nZXQoKSk7Ci0jZW5k
aWYgLy8gVVNFKENGTkVUV09SSykKLX0KLQotdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJikKLXsKLSAgICBzZXRTaG91bGRQYWludE5h
dGl2ZUNvbnRyb2xzKHBhcmFtZXRlcnMuc2hvdWxkUGFpbnROYXRpdmVDb250cm9scyk7Ci0KLSNp
ZiBVU0UoQ0ZORVRXT1JLKQotICAgIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiBk
ZWZhdWx0U3RvcmFnZVNlc3Npb24oQWRvcHRDRiwgd2tEZXNlcmlhbGl6ZVN0b3JhZ2VTZXNzaW9u
KHBhcmFtZXRlcnMuc2VyaWFsaXplZERlZmF1bHRTdG9yYWdlU2Vzc2lvbi5nZXQoKSkpOwotI2lm
IE5FRURTX0ZJWElOR19BRlRFUl9SMTM0OTYwCi0gICAgUmVzb3VyY2VIYW5kbGU6OnNldERlZmF1
bHRTdG9yYWdlU2Vzc2lvbihkZWZhdWx0U3RvcmFnZVNlc3Npb24uZ2V0KCkpOwotI2VuZGlmCi0K
LSAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCktPnNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kocGFyYW1ldGVycy5pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeSk7Ci0KLSAgICAv
LyBCeSB1c2luZyB0aGUgZGVmYXVsdCBzdG9yYWdlIHNlc3Npb24gdGhhdCBjYW1lIGZyb20gdGhl
IHVpIHByb2Nlc3MsIHRoZSB3ZWIgcHJvY2VzcwotICAgIC8vIGF1dG9tYXRpY2FsbHkgdXNlcyB0
aGUgc2FtZSB0aGUgVVJMIENhY2hlIGFzIHVpIHByb2Nlc3MuCi0gICAgaWYgKGRlZmF1bHRTdG9y
YWdlU2Vzc2lvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmRpc2tD
YWNoZURpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0ZJbmRleCBjYWNoZURpc2tD
YXBhY2l0eSA9IHBhcmFtZXRlcnMuY2ZVUkxDYWNoZURpc2tDYXBhY2l0eTsKLSAgICBDRkluZGV4
IGNhY2hlTWVtb3J5Q2FwYWNpdHkgPSBwYXJhbWV0ZXJzLmNmVVJMQ2FjaGVNZW1vcnlDYXBhY2l0
eTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxDYWNoZVJlZj4gdWlQcm9jZXNzQ2FjaGUoQWRvcHRDRiwg
Q0ZVUkxDYWNoZUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjYWNoZU1lbW9yeUNhcGFjaXR5
LCBjYWNoZURpc2tDYXBhY2l0eSwgcGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkuY3JlYXRl
Q0ZTdHJpbmcoKS5nZXQoKSkpOwotICAgIENGVVJMQ2FjaGVTZXRTaGFyZWRVUkxDYWNoZSh1aVBy
b2Nlc3NDYWNoZS5nZXQoKSk7Ci0jZW5kaWYgLy8gVVNFKENGTkVUV09SSykKLX0KLQotdm9pZCBX
ZWJQcm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0ZSgpCi17Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzczo6
c2V0U2hvdWxkUGFpbnROYXRpdmVDb250cm9scyhib29sIHNob3VsZFBhaW50TmF0aXZlQ29udHJv
bHMpCi17Ci0jaWYgVVNFKFNBRkFSSV9USEVNRSkKLSAgICBTZXR0aW5nczo6c2V0U2hvdWxkUGFp
bnROYXRpdmVDb250cm9scyhzaG91bGRQYWludE5hdGl2ZUNvbnRyb2xzKTsKLSNlbmRpZgotfQot
Ci1zdHJ1Y3QgRW51bVdpbmRvd3NDb250ZXh0IHsKLSAgICBEV09SRCBjdXJyZW50VGhyZWFkSUQ7
Ci0gICAgVmVjdG9yPEhXTkQ+KiB3aW5kb3dzOwotfTsKLQotc3RhdGljIEJPT0wgQ0FMTEJBQ0sg
YWRkV2luZG93VG9WZWN0b3JJZk93bmVkQnlDdXJyZW50VGhyZWFkKEhXTkQgd2luZG93LCBMUEFS
QU0gbFBhcmFtKQotewotICAgIEVudW1XaW5kb3dzQ29udGV4dCogY29udGV4dCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8RW51bVdpbmRvd3NDb250ZXh0Kj4obFBhcmFtKTsKLQotICAgIGlmICg6OkdldFdp
bmRvd1RocmVhZFByb2Nlc3NJZCh3aW5kb3csIDApICE9IGNvbnRleHQtPmN1cnJlbnRUaHJlYWRJ
RCkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBjb250ZXh0LT53aW5kb3dzLT5hcHBlbmQo
d2luZG93KTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotVmVjdG9yPEhXTkQ+IFdlYlByb2Nlc3M6
OndpbmRvd3NUb1JlY2VpdmVTZW50TWVzc2FnZXNXaGlsZVdhaXRpbmdGb3JTeW5jUmVwbHkoKQot
ewotICAgIFZlY3RvcjxIV05EPiB3aW5kb3dzOwotCi0gICAgLy8gQW55IG5vbi1tZXNzYWdlLW9u
bHkgd2luZG93IGNyZWF0ZWQgYnkgdGhpcyB0aHJlYWQgbmVlZHMgdG8gcmVjZWl2ZSBzZW50IG1l
c3NhZ2VzIHdoaWxlIHdlCi0gICAgLy8gd2FpdCBmb3IgYSBzeW5jIHJlcGx5LiBPdGhlcndpc2Ug
d2UgY291bGQgZGVhZGxvY2sgd2l0aCB0aGUgVUkgcHJvY2VzcyBpZiwgZS5nLiwgdGhlIGZvY3Vz
Ci0gICAgLy8gd2luZG93IGNoYW5nZXMuIFNlZSA8aHR0cDovL3dlYmtpdC5vcmcvYi81ODIzOT4u
Ci0KLSAgICBFbnVtV2luZG93c0NvbnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0LmN1cnJlbnRU
aHJlYWRJRCA9IDo6R2V0Q3VycmVudFRocmVhZElkKCk7Ci0gICAgY29udGV4dC53aW5kb3dzID0g
JndpbmRvd3M7Ci0KLSAgICAvLyBTdGFydCBvdXQgd2l0aCB0b3AtbGV2ZWwgd2luZG93cyBjcmVh
dGVkIGJ5IHRoaXMgdGhyZWFkIChsaWtlIEZsYXNoJ3MgaGlkZGVuCi0gICAgLy8gU1dGbGFzaF9Q
bGFjZWhvbGRlclggdG9wLWxldmVsIHdpbmRvd3MpLgotICAgIDo6RW51bVRocmVhZFdpbmRvd3Mo
Y29udGV4dC5jdXJyZW50VGhyZWFkSUQsIGFkZFdpbmRvd1RvVmVjdG9ySWZPd25lZEJ5Q3VycmVu
dFRocmVhZCwgcmVpbnRlcnByZXRfY2FzdDxMUEFSQU0+KCZjb250ZXh0KSk7Ci0KLSAgICAvLyBB
bHNvIGluY2x1ZGUgYW55IGRlc2NlbmRhbnRzIG9mIHRob3NlIHRvcC1sZXZlbCB3aW5kb3dzLgot
ICAgIHNpemVfdCB0b3BMZXZlbFdpbmRvd0NvdW50ID0gd2luZG93cy5zaXplKCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0b3BMZXZlbFdpbmRvd0NvdW50OyArK2kpCi0gICAgICAgIDo6
RW51bUNoaWxkV2luZG93cyh3aW5kb3dzW2ldLCBhZGRXaW5kb3dUb1ZlY3RvcklmT3duZWRCeUN1
cnJlbnRUaHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBBUkFNPigmY29udGV4dCkpOwotCi0gICAg
Ly8gQWxzbyBpbmNsdWRlIGFueSBkZXNjZW5kYW50cyBvZiB0aGUgV2ViUGFnZXMnIHdpbmRvd3Mg
d2hpY2ggd2UndmUgY3JlYXRlZCAoZS5nLiwgZm9yIHdpbmRvd2VkIHBsdWdpbnMpLgotICAgIEhh
c2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+Ojpjb25zdF9pdGVyYXRvcjo6VmFsdWVz
IGVuZCA9IG1fcGFnZU1hcC5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFJlZlB0
cjxXZWJQYWdlPiA+Ojpjb25zdF9pdGVyYXRvcjo6VmFsdWVzIGl0ID0gbV9wYWdlTWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgOjpFbnVtQ2hpbGRXaW5kb3dzKCgqaXQpLT5u
YXRpdmVXaW5kb3coKSwgYWRkV2luZG93VG9WZWN0b3JJZk93bmVkQnlDdXJyZW50VGhyZWFkLCBy
ZWludGVycHJldF9jYXN0PExQQVJBTT4oJmNvbnRleHQpKTsKLQotICAgIHJldHVybiB3aW5kb3dz
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="199258"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>