<?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>109986</bug_id>
          
          <creation_ts>2013-02-15 16:41:36 -0800</creation_ts>
          <short_desc>REGRESSION(r143066): Broke the Apple Lion build (among others). (Requested by ddkilzer on #webkit).</short_desc>
          <delta_ts>2013-02-15 16:53:52 -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>
          
          <blocked>109849</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="WebKit Review Bot">webkit.review.bot</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jdiggs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>834491</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 16:41:36 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/143066 broke the build:
Broke the Apple Lion build (among others). (Requested by ddkilzer on #webkit).

This is an automatic bug report generated by the sheriff-bot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests case pain.

&quot;Only you can prevent forest fires.&quot; -- Smokey the Bear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834492</commentid>
    <comment_count>1</comment_count>
      <attachid>188667</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 16:42:02 -0800</bug_when>
    <thetext>Created attachment 188667
ROLLOUT of r143066

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834506</commentid>
    <comment_count>2</comment_count>
      <attachid>188667</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 16:53:49 -0800</bug_when>
    <thetext>Comment on attachment 188667
ROLLOUT of r143066

Clearing flags on attachment: 188667

Committed r143069: &lt;http://trac.webkit.org/changeset/143069&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834507</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 16:53:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188667</attachid>
            <date>2013-02-15 16:42:02 -0800</date>
            <delta_ts>2013-02-15 16:53:49 -0800</delta_ts>
            <desc>ROLLOUT of r143066</desc>
            <filename>bug-109986-20130216003827.patch</filename>
            <type>text/plain</type>
            <size>313466</size>
            <attacher name="WebKit Review Bot">webkit.review.bot</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2MxZDlkYTVlYzUzZDZl
ZjZkN2FiZTZjN2IyZTNiMDFhZWZmMGU4Yy4uYTI0ODkzM2IzZjVlNDA2ZTE1ZWZlZmEwYWFmMzIz
MDczMDllYTNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDEzLTAyLTE1ICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KKworICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMTQzMDY2LgorICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3Jn
L2NoYW5nZXNldC8xNDMwNjYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwOTk4NgorCisgICAgICAgIEJyb2tlIHRoZSBBcHBsZSBMaW9uIGJ1aWxkIChh
bW9uZyBvdGhlcnMpLiAoUmVxdWVzdGVkIGJ5CisgICAgICAgIGRka2lsemVyIG9uICN3ZWJraXQp
LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmg6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHVucmVnaXN0ZXJVbmlx
dWVJZEZvclVJRWxlbWVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBkZXRhY2hdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
YWNjZXNzaWJpbGl0eU9iamVjdF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhdHRhY2htZW50Vmlld10pOgorICAgICAgICAoQ0ZBdXRvcmVsZWFzZUhlbHBlcik6
CisgICAgICAgIChBWE9iamVjdElzVGV4dE1hcmtlcik6CisgICAgICAgIChBWE9iamVjdElzVGV4
dE1hcmtlclJhbmdlKToKKyAgICAgICAgKEFYVGV4dE1hcmtlclJhbmdlKToKKyAgICAgICAgKEFY
VGV4dE1hcmtlclJhbmdlU3RhcnQpOgorICAgICAgICAoQVhUZXh0TWFya2VyUmFuZ2VFbmQpOgor
ICAgICAgICAoU2VhcmNoS2V5RW50cnkpOgorICAgICAgICAoY3JlYXRlQWNjZXNzaWJpbGl0eVNl
YXJjaEtleU1hcCk6CisgICAgICAgIChhY2Nlc3NpYmlsaXR5U2VhcmNoS2V5Rm9yU3RyaW5nKToK
KyAgICAgICAgKHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOl0p
OgorICAgICAgICAodmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcik6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6
XSk6CisgICAgICAgICh2aXNpYmxlUG9zaXRpb25Gb3JTdGFydE9mVGV4dE1hcmtlclJhbmdlKToK
KyAgICAgICAgKHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKToKKyAgICAg
ICAgKHRleHRNYXJrZXJSYW5nZUZyb21NYXJrZXJzKToKKyAgICAgICAgKEFYQXR0cmlidXRlZFN0
cmluZ1JhbmdlSXNWYWxpZCk6CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQpOgor
ICAgICAgICAoQ3JlYXRlQ0dDb2xvcklmRGlmZmVyZW50KToKKyAgICAgICAgKEFYQXR0cmlidXRl
U3RyaW5nU2V0Q29sb3IpOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIpOgor
ICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZSk6CisgICAgICAgIChBWEF0dHJpYnV0
ZVN0cmluZ1NldEJsb2NrcXVvdGVMZXZlbCk6CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1Nl
dFNwZWxsaW5nKToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0SGVhZGluZ0xldmVsKToK
KyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0RWxlbWVudCk6CisgICAgICAgIChBWEF0dHJp
YnV0ZWRTdHJpbmdBcHBlbmRUZXh0KToKKyAgICAgICAgKG5zU3RyaW5nRm9yUmVwbGFjZWROb2Rl
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZG9BWEF0dHJpYnV0
ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6XSk6CisgICAgICAgICh0ZXh0TWFya2VyUmFuZ2VG
cm9tVmlzaWJsZVBvc2l0aW9ucyk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOmVuZFBvc2l0aW9uOl0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5
QWN0aW9uTmFtZXNdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
YWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIHJlbmRlcldpZGdldENoaWxkcmVuXSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3RdKToK
KyAgICAgICAgKGNvbnZlcnRUb1ZlY3Rvcik6CisgICAgICAgIChjb252ZXJ0VG9OU0FycmF5KToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdl
Rm9yU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IHBvc2l0aW9uXSk6CisgICAgICAgIChjcmVhdGVBY2Nlc3NpYmlsaXR5Um9sZU1hcCk6CisgICAg
ICAgIChyb2xlVmFsdWVUb05TU3RyaW5nKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgcm9sZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBzdWJyb2xlXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IHJvbGVEZXNjcmlwdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBzY3JvbGxWaWV3UGFyZW50XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkXSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVk
QXR0cmlidXRlTmFtZXNdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgYWNjZXNzaWJpbGl0eVBlcmZvcm1QcmVzc0FjdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5UGVyZm9ybUluY3JlbWVudEFjdGlv
bl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5UGVyZm9ybURlY3JlbWVudEFjdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5UGVyZm9ybVNob3dNZW51QWN0aW9uXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTaG93Q29u
dGV4dE1lbnVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNj
ZXNzaWJpbGl0eVBlcmZvcm1BY3Rpb246XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTZXRWYWx1ZTpmb3JBdHRyaWJ1dGU6XSk6CisgICAg
ICAgIChyZW5kZXJlckZvclZpZXcpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBY3Rpb25EZXNjcmlwdGlv
bjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZG9BWEF0dHJp
YnV0ZWRTdHJpbmdGb3JSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgX2NvbnZlcnRUb05TUmFuZ2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIF9pbmRleEZvclRleHRNYXJrZXI6XSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF90ZXh0TWFya2VyRm9ySW5kZXg6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGRvQVhSVEZGb3JSYW5nZTpdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVN1cHBvcnRzT3ZlcnJpZGRlbkF0dHJpYnV0ZXNdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVNo
b3VsZFVzZVVuaXF1ZUlkXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIGFjY2Vzc2liaWxpdHlJbmRleE9mQ2hpbGQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZUNvdW50Ol0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXJy
YXlBdHRyaWJ1dGVWYWx1ZXM6aW5kZXg6bWF4Q291bnQ6XSk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Yy5tOiBSZW1vdmVkLgorCiAyMDEzLTAyLTE1ICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBDaGFuZ2UgTW91c2VSZWxhdGVkRXZlbnQgdG8gdXNlIExheW91dFBv
aW50OjpzY2FsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMv
QVhPYmplY3RDYWNoZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FY
T2JqZWN0Q2FjaGVNYWMubW0KaW5kZXggNTU2MDFhM2MwOTQ1MTQ3ODE0YTFlMmFjYTIzNDJjNjk3
NGYxOTQ4NC4uMDRkM2IzYWY0Y2IwYjlhMTk2MDgyODA3NmZhNGE0N2ZkYzZiODNjOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFj
Lm1tCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIK
ICNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgotI2ltcG9ydCAiV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJNYWMuaCIKKyNpbXBvcnQgIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmgi
CiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAKICNpbXBvcnQgPHd0Zi9QYXNz
UmVmUHRyLmg+CkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6ZGV0YWNoV3Jh
cHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmopCiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6YXR0
YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmopCiB7Ci0gICAgUmV0YWluUHRyPFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPiB3cmFwcGVyKEFkb3B0TlMsIFtbV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYWxsb2NdIGluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVj
dDpvYmpdKTsKKyAgICBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+IHdy
YXBwZXIoQWRvcHROUywgW1tXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhbGxvY10gaW5p
dFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0Om9ial0pOwogICAgIG9iai0+c2V0V3JhcHBlcih3cmFw
cGVyLmdldCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmgKaW5kZXggOGYz
OWVkODliNTc3Y2Y2MDkzN2M5OGQ4MDdmMDM0OGEwNzg0MDEyNS4uMjgyNzIyZjAxZGVjZGJkY2Yx
Njc5MDk4YjQ2OGZlMmM3Mjg5OGY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5o
CkBAIC00MSwxMiArNDEsMTMgQEAgY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogLSAoaWQpaW5pdFdp
dGhBY2Nlc3NpYmlsaXR5T2JqZWN0OihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KilheE9i
amVjdDsKIC0gKHZvaWQpZGV0YWNoOwogLSAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCop
YWNjZXNzaWJpbGl0eU9iamVjdDsKLS0gKEJPT0wpdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlOwor
KyAodm9pZClhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczooQk9PTCly
ZXBvc3Q7CiAKLS0gKGlkKWF0dGFjaG1lbnRWaWV3OwogLy8gVXNlZCB0byBpbmZvcm0gYW4gZWxl
bWVudCB3aGVuIGEgbm90aWZpY2F0aW9uIGlzIHBvc3RlZCBmb3IgaXQuIFVzZWQgYnkgRFJULgog
LSAodm9pZClhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlm
aWNhdGlvbk5hbWU7CiAKKy0gKE5TVmlldyopYXR0YWNobWVudFZpZXc7CisKIEBlbmQKIAogI2Vu
ZGlmIC8vIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
Lm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIubW0KaW5kZXggYjhhMTkwZmI4YzE1N2U5MWMyMzY5MzEyNmExNWEwNDMwMWMy
YzMzZC4uZTczNmQxYjU2ZThkMmM4ODY5MDkwYTU0OGVjZWZiZTcyNzQ0NjYxMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0KQEAgLTc3LDYgKzc3LDI4OCBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCisvLyBDZWxsIFRhYmxlcworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlTZWxlY3Rl
ZENlbGxzQXR0cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2VsbHNBdHRy
aWJ1dGUgQCJBWFNlbGVjdGVkQ2VsbHMiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxp
dHlWaXNpYmxlQ2VsbHNBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNl
bGxzQXR0cmlidXRlIEAiQVhWaXNpYmxlQ2VsbHMiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vz
c2liaWxpdHlSb3dIZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJp
bGl0eVJvd0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGUgQCJBWFJvd0hlYWRlclVJRWxlbWVudHMi
CisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlSb3dJbmRleFJhbmdlQXR0cmlidXRl
CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVJvd0luZGV4UmFuZ2VBdHRyaWJ1dGUgQCJBWFJvd0lu
ZGV4UmFuZ2UiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlDb2x1bW5JbmRleFJh
bmdlQXR0cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUNvbHVtbkluZGV4UmFuZ2VBdHRy
aWJ1dGUgQCJBWENvbHVtbkluZGV4UmFuZ2UiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2li
aWxpdHlDZWxsRm9yQ29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0dHJpYnV0ZQorI2RlZmluZSBO
U0FjY2Vzc2liaWxpdHlDZWxsRm9yQ29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBA
IkFYQ2VsbEZvckNvbHVtbkFuZFJvdyIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0
eUNlbGxSb2xlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUNlbGxSb2xlIEAiQVhDZWxsIgorI2Vu
ZGlmCisKKy8vIExpc3RzCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUNvbnRlbnRMaXN0U3Vicm9s
ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlDb250ZW50TGlzdFN1YnJvbGUgQCJBWENvbnRlbnRM
aXN0IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25MaXN0U3Vi
cm9sZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkxpc3RTdWJyb2xlIEAiQVhE
ZXNjcmlwdGlvbkxpc3QiCisjZW5kaWYKKworLy8gTWlzY2VsbGFuZW91cworI2lmbmRlZiBOU0Fj
Y2Vzc2liaWxpdHlCbG9ja1F1b3RlTGV2ZWxBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmls
aXR5QmxvY2tRdW90ZUxldmVsQXR0cmlidXRlIEAiQVhCbG9ja1F1b3RlTGV2ZWwiCisjZW5kaWYK
KworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGUKKyNkZWZpbmUgTlNB
Y2Nlc3NpYmlsaXR5QWNjZXNzS2V5QXR0cmlidXRlIEAiQVhBY2Nlc3NLZXkiCisjZW5kaWYKKwor
I2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlMYW5ndWFnZUF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlMYW5ndWFnZUF0dHJpYnV0ZSBAIkFYTGFuZ3VhZ2UiCisjZW5kaWYKKworI2lmbmRl
ZiBOU0FjY2Vzc2liaWxpdHlSZXF1aXJlZEF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlSZXF1aXJlZEF0dHJpYnV0ZSBAIkFYUmVxdWlyZWQiCisjZW5kaWYKKworI2lmbmRlZiBOU0Fj
Y2Vzc2liaWxpdHlJbnZhbGlkQXR0cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUludmFs
aWRBdHRyaWJ1dGUgQCJBWEludmFsaWQiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxp
dHlPd25zQXR0cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU93bnNBdHRyaWJ1dGUgQCJB
WE93bnMiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRl
CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGUgQCJBWEdyYWJiZWQiCisj
ZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlEcm9wRWZmZWN0c0F0dHJpYnV0ZQorI2Rl
ZmluZSBOU0FjY2Vzc2liaWxpdHlEcm9wRWZmZWN0c0F0dHJpYnV0ZSBAIkFYRHJvcEVmZmVjdHMi
CisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlBUklBTGl2ZUF0dHJpYnV0ZQorI2Rl
ZmluZSBOU0FjY2Vzc2liaWxpdHlBUklBTGl2ZUF0dHJpYnV0ZSBAIkFYQVJJQUxpdmUiCisjZW5k
aWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlBUklBQXRvbWljQXR0cmlidXRlCisjZGVmaW5l
IE5TQWNjZXNzaWJpbGl0eUFSSUFBdG9taWNBdHRyaWJ1dGUgQCJBWEFSSUFBdG9taWMiCisjZW5k
aWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlBUklBUmVsZXZhbnRBdHRyaWJ1dGUKKyNkZWZp
bmUgTlNBY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50QXR0cmlidXRlIEAiQVhBUklBUmVsZXZhbnQi
CisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlBUklBQnVzeUF0dHJpYnV0ZQorI2Rl
ZmluZSBOU0FjY2Vzc2liaWxpdHlBUklBQnVzeUF0dHJpYnV0ZSBAIkFYQVJJQUJ1c3kiCisjZW5k
aWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlMb2FkaW5nUHJvZ3Jlc3NBdHRyaWJ1dGUKKyNk
ZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TG9hZGluZ1Byb2dyZXNzQXR0cmlidXRlIEAiQVhMb2FkaW5n
UHJvZ3Jlc3MiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlIYXNQb3B1cEF0dHJp
YnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIYXNQb3B1cEF0dHJpYnV0ZSBAIkFYSGFzUG9w
dXAiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlQbGFjZWhvbGRlclZhbHVlQXR0
cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVBsYWNlaG9sZGVyVmFsdWVBdHRyaWJ1dGUg
QCJBWFBsYWNlaG9sZGVyVmFsdWUiCisjZW5kaWYKKworLy8gU2VhcmNoCisjaWZuZGVmIE5TQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudHNGb3JTZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmli
dXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVVJRWxlbWVudHNGb3JTZWFyY2hQcmVkaWNhdGVQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlIEAiQVhVSUVsZW1lbnRzRm9yU2VhcmNoUHJlZGljYXRlIgor
I2VuZGlmCisKKy8vIFNlYXJjaCBLZXlzCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFueVR5cGVT
ZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5QW55VHlwZVNlYXJjaEtleSBAIkFYQW55
VHlwZVNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUJsb2NrcXVv
dGVTYW1lTGV2ZWxTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5QmxvY2txdW90ZVNh
bWVMZXZlbFNlYXJjaEtleSBAIkFYQmxvY2txdW90ZVNhbWVMZXZlbFNlYXJjaEtleSIKKyNlbmRp
ZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUJsb2NrcXVvdGVTZWFyY2hLZXkKKyNkZWZpbmUg
TlNBY2Nlc3NpYmlsaXR5QmxvY2txdW90ZVNlYXJjaEtleSBAIkFYQmxvY2txdW90ZVNlYXJjaEtl
eSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUJvbGRGb250U2VhcmNoS2V5Cisj
ZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUJvbGRGb250U2VhcmNoS2V5IEAiQVhCb2xkRm9udFNlYXJj
aEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUJ1dHRvblNlYXJjaEtleQor
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlCdXR0b25TZWFyY2hLZXkgQCJBWEJ1dHRvblNlYXJjaEtl
eSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUNoZWNrQm94U2VhcmNoS2V5Cisj
ZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUNoZWNrQm94U2VhcmNoS2V5IEAiQVhDaGVja0JveFNlYXJj
aEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUNvbnRyb2xTZWFyY2hLZXkK
KyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Q29udHJvbFNlYXJjaEtleSBAIkFYQ29udHJvbFNlYXJj
aEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eURpZmZlcmVudFR5cGVTZWFy
Y2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5RGlmZmVyZW50VHlwZVNlYXJjaEtleSBAIkFY
RGlmZmVyZW50VHlwZVNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0
eUZvbnRDaGFuZ2VTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Rm9udENoYW5nZVNl
YXJjaEtleSBAIkFYRm9udENoYW5nZVNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNj
ZXNzaWJpbGl0eUZvbnRDb2xvckNoYW5nZVNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlGb250Q29sb3JDaGFuZ2VTZWFyY2hLZXkgQCJBWEZvbnRDb2xvckNoYW5nZVNlYXJjaEtleSIK
KyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUZyYW1lU2VhcmNoS2V5CisjZGVmaW5l
IE5TQWNjZXNzaWJpbGl0eUZyYW1lU2VhcmNoS2V5IEAiQVhGcmFtZVNlYXJjaEtleSIKKyNlbmRp
ZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUdyYXBoaWNTZWFyY2hLZXkKKyNkZWZpbmUgTlNB
Y2Nlc3NpYmlsaXR5R3JhcGhpY1NlYXJjaEtleSBAIkFYR3JhcGhpY1NlYXJjaEtleSIKKyNlbmRp
ZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDFTZWFyY2hLZXkKKyNkZWZp
bmUgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsMVNlYXJjaEtleSBAIkFYSGVhZGluZ0xldmVs
MVNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZl
bDJTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsMlNlYXJjaEtl
eSBAIkFYSGVhZGluZ0xldmVsMlNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNz
aWJpbGl0eUhlYWRpbmdMZXZlbDNTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SGVh
ZGluZ0xldmVsM1NlYXJjaEtleSBAIkFYSGVhZGluZ0xldmVsM1NlYXJjaEtleSIKKyNlbmRpZgor
CisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDRTZWFyY2hLZXkKKyNkZWZpbmUg
TlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsNFNlYXJjaEtleSBAIkFYSGVhZGluZ0xldmVsNFNl
YXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDVT
ZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsNVNlYXJjaEtleSBA
IkFYSGVhZGluZ0xldmVsNVNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJp
bGl0eUhlYWRpbmdMZXZlbDZTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SGVhZGlu
Z0xldmVsNlNlYXJjaEtleSBAIkFYSGVhZGluZ0xldmVsNlNlYXJjaEtleSIKKyNlbmRpZgorCisj
aWZuZGVmIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdTYW1lTGV2ZWxTZWFyY2hLZXkKKyNkZWZpbmUg
TlNBY2Nlc3NpYmlsaXR5SGVhZGluZ1NhbWVMZXZlbFNlYXJjaEtleSBAIkFYSGVhZGluZ1NhbWVM
ZXZlbFNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdT
ZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ1NlYXJjaEtleSBAIkFYSGVh
ZGluZ1NlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUhpZ2hsaWdo
dGVkU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhpZ2hsaWdodGVkU2VhcmNoS2V5
IEAiQVhIaWdobGlnaHRlZFNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJp
bGl0eUl0YWxpY0ZvbnRTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SXRhbGljRm9u
dFNlYXJjaEtleSBAIkFYSXRhbGljRm9udFNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5T
QWNjZXNzaWJpbGl0eUxhbmRtYXJrU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUxh
bmRtYXJrU2VhcmNoS2V5IEAiQVhMYW5kbWFya1NlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVm
IE5TQWNjZXNzaWJpbGl0eUxpbmtTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TGlu
a1NlYXJjaEtleSBAIkFYTGlua1NlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNz
aWJpbGl0eUxpc3RTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TGlzdFNlYXJjaEtl
eSBAIkFYTGlzdFNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUxp
dmVSZWdpb25TZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvblNlYXJj
aEtleSBAIkFYTGl2ZVJlZ2lvblNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNz
aWJpbGl0eU1pc3NwZWxsZWRXb3JkU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1p
c3NwZWxsZWRXb3JkU2VhcmNoS2V5IEAiQVhNaXNzcGVsbGVkV29yZFNlYXJjaEtleSIKKyNlbmRp
ZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVBsYWluVGV4dFNlYXJjaEtleQorI2RlZmluZSBO
U0FjY2Vzc2liaWxpdHlQbGFpblRleHRTZWFyY2hLZXkgQCJBWFBsYWluVGV4dFNlYXJjaEtleSIK
KyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVJhZGlvR3JvdXBTZWFyY2hLZXkKKyNk
ZWZpbmUgTlNBY2Nlc3NpYmlsaXR5UmFkaW9Hcm91cFNlYXJjaEtleSBAIkFYUmFkaW9Hcm91cFNl
YXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVNhbWVUeXBlU2VhcmNo
S2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVNhbWVUeXBlU2VhcmNoS2V5IEAiQVhTYW1lVHlw
ZVNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVN0YXRpY1RleHRT
ZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5U3RhdGljVGV4dFNlYXJjaEtleSBAIkFY
U3RhdGljVGV4dFNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVN0
eWxlQ2hhbmdlU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVN0eWxlQ2hhbmdlU2Vh
cmNoS2V5IEAiQVhTdHlsZUNoYW5nZVNlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNj
ZXNzaWJpbGl0eVRhYmxlU2FtZUxldmVsU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0
eVRhYmxlU2FtZUxldmVsU2VhcmNoS2V5IEAiQVhUYWJsZVNhbWVMZXZlbFNlYXJjaEtleSIKKyNl
bmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVRhYmxlU2VhcmNoS2V5CisjZGVmaW5lIE5T
QWNjZXNzaWJpbGl0eVRhYmxlU2VhcmNoS2V5IEAiQVhUYWJsZVNlYXJjaEtleSIKKyNlbmRpZgor
CisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVRleHRGaWVsZFNlYXJjaEtleQorI2RlZmluZSBOU0Fj
Y2Vzc2liaWxpdHlUZXh0RmllbGRTZWFyY2hLZXkgQCJBWFRleHRGaWVsZFNlYXJjaEtleSIKKyNl
bmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVVuZGVybGluZVNlYXJjaEtleQorI2RlZmlu
ZSBOU0FjY2Vzc2liaWxpdHlVbmRlcmxpbmVTZWFyY2hLZXkgQCJBWFVuZGVybGluZVNlYXJjaEtl
eSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVVudmlzaXRlZExpbmtTZWFyY2hL
ZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VW52aXNpdGVkTGlua1NlYXJjaEtleSBAIkFYVW52
aXNpdGVkTGlua1NlYXJjaEtleSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVZp
c2l0ZWRMaW5rU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVZpc2l0ZWRMaW5rU2Vh
cmNoS2V5IEAiQVhWaXNpdGVkTGlua1NlYXJjaEtleSIKKyNlbmRpZgorCisjZGVmaW5lIE5TQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJJc1ZhbGlkUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBAIkFYVGV4
dE1hcmtlcklzVmFsaWQiCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUluZGV4Rm9yVGV4dE1hcmtl
clBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgQCJBWEluZGV4Rm9yVGV4dE1hcmtlciIKKyNkZWZpbmUg
TlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlckZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBA
IkFYVGV4dE1hcmtlckZvckluZGV4IgorCisvLyBNYXRoIGF0dHJpYnV0ZXMKKyNkZWZpbmUgTlNB
Y2Nlc3NpYmlsaXR5TWF0aFJvb3RSYWRpY2FuZEF0dHJpYnV0ZSBAIkFYTWF0aFJvb3RSYWRpY2Fu
ZCIKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RJbmRleEF0dHJpYnV0ZSBAIkFYTWF0
aFJvb3RJbmRleCIKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9uRGVub21pbmF0
b3JBdHRyaWJ1dGUgQCJBWE1hdGhGcmFjdGlvbkRlbm9taW5hdG9yIgorI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlNYXRoRnJhY3Rpb25OdW1lcmF0b3JBdHRyaWJ1dGUgQCJBWE1hdGhGcmFjdGlvbk51
bWVyYXRvciIKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TWF0aEJhc2VBdHRyaWJ1dGUgQCJBWE1h
dGhCYXNlIgorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoU3Vic2NyaXB0QXR0cmlidXRlIEAi
QVhNYXRoU3Vic2NyaXB0IgorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoU3VwZXJzY3JpcHRB
dHRyaWJ1dGUgQCJBWE1hdGhTdXBlcnNjcmlwdCIKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TWF0
aFVuZGVyQXR0cmlidXRlIEAiQVhNYXRoVW5kZXIiCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1h
dGhPdmVyQXR0cmlidXRlIEAiQVhNYXRoT3ZlciIKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TWF0
aEZlbmNlZE9wZW5BdHRyaWJ1dGUgQCJBWE1hdGhGZW5jZWRPcGVuIgorI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlNYXRoRmVuY2VkQ2xvc2VBdHRyaWJ1dGUgQCJBWE1hdGhGZW5jZWRDbG9zZSIKKwor
QGludGVyZmFjZSBOU09iamVjdCAoV2ViS2l0QWNjZXNzaWJpbGl0eUFycmF5Q2F0ZWdvcnkpCisK
Ky0gKE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDooaWQpY2hpbGQ7CistIChO
U1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZUNvdW50OihOU1N0cmluZyAqKWF0
dHJpYnV0ZTsKKy0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVWYWx1ZXM6
KE5TU3RyaW5nICopYXR0cmlidXRlIGluZGV4OihOU1VJbnRlZ2VyKWluZGV4IG1heENvdW50OihO
U1VJbnRlZ2VyKW1heENvdW50OworCitAZW5kCisKIEBpbXBsZW1lbnRhdGlvbiBXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcgogCiAtIChpZClpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6
KEFjY2Vzc2liaWxpdHlPYmplY3QqKWF4T2JqZWN0CkBAIC04OCw4ICszNzAsMTggQEAgdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKICAgICByZXR1cm4gc2VsZjsKIH0KIAorLSAodm9pZCl1bnJlZ2lzdGVy
VW5pcXVlSWRGb3JVSUVsZW1lbnQKK3sKKyAgICB3a1VucmVnaXN0ZXJVbmlxdWVJZEZvckVsZW1l
bnQoc2VsZik7Cit9CisKIC0gKHZvaWQpZGV0YWNoCiB7CisgICAgLy8gU2VuZCB1bnJlZ2lzdGVy
VW5pcXVlSWRGb3JVSUVsZW1lbnQgdW5jb25kaXRpb25hbGx5IGJlY2F1c2UgaWYgaXQgaXMKKyAg
ICAvLyBldmVyIGFjY2lkZW50YWxseSBub3QgZG9uZSAodmlhIG90aGVyIGJ1Z3MgaW4gb3VyIEFY
IGltcGxlbWVudGF0aW9uKSB5b3UKKyAgICAvLyBlbmQgdXAgd2l0aCBhIGNyYXNoIGxpa2UgPHJk
YXI6Ly9wcm9ibGVtLzQyNzMxNDk+LiAgSXQgaXMgc2FmZSBhbmQgbm90CisgICAgLy8gZXhwZW5z
aXZlIHRvIHNlbmQgZXZlbiBpZiB0aGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkLgorICAgIFtz
ZWxmIHVucmVnaXN0ZXJVbmlxdWVJZEZvclVJRWxlbWVudF07CiAgICAgbV9vYmplY3QgPSAwOwog
fQogCkBAIC0xMDksMTQgKzQwMSwxNTI5IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAgICAgcmV0
dXJuIFlFUzsKIH0KIAotLSAoaWQpYXR0YWNobWVudFZpZXcKKy0gKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqKWFjY2Vzc2liaWxpdHlPYmplY3QKK3sKKyAgICByZXR1cm4gbV9vYmplY3Q7Cit9CisKKy0g
KE5TVmlldyopYXR0YWNobWVudFZpZXcKK3sKKyAgICBBU1NFUlQobV9vYmplY3QtPmlzQXR0YWNo
bWVudCgpKTsKKyAgICBXaWRnZXQqIHdpZGdldCA9IG1fb2JqZWN0LT53aWRnZXRGb3JBdHRhY2ht
ZW50VmlldygpOworICAgIGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJl
dHVybiBOU0FjY2Vzc2liaWxpdHlVbmlnbm9yZWREZXNjZW5kYW50KHdpZGdldC0+cGxhdGZvcm1X
aWRnZXQoKSk7Cit9CisKKyNwcmFnbWEgbWFyayBTeXN0ZW1JbnRlcmZhY2Ugd3JhcHBlcnMKKwor
c3RhdGljIGlubGluZSBpZCBDRkF1dG9yZWxlYXNlSGVscGVyKENGVHlwZVJlZiBvYmopCit7Cisg
ICAgaWYgKG9iaikKKyAgICAgICAgQ0ZNYWtlQ29sbGVjdGFibGUob2JqKTsKKyAgICBbKGlkKW9i
aiBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIChpZClvYmo7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Qk9PTCBBWE9iamVjdElzVGV4dE1hcmtlcihpZCBvYmopCit7CisgICAgcmV0dXJuIG9iaiAhPSBu
aWwgJiYgQ0ZHZXRUeXBlSUQob2JqKSA9PSB3a0dldEFYVGV4dE1hcmtlclR5cGVJRCgpOyAgICAK
K30KKworc3RhdGljIGlubGluZSBCT09MIEFYT2JqZWN0SXNUZXh0TWFya2VyUmFuZ2UoaWQgb2Jq
KQoreworICAgIHJldHVybiBvYmogIT0gbmlsICYmIENGR2V0VHlwZUlEKG9iaikgPT0gd2tHZXRB
WFRleHRNYXJrZXJSYW5nZVR5cGVJRCgpOyAgICAKK30KKworc3RhdGljIGlkIEFYVGV4dE1hcmtl
clJhbmdlKGlkIHN0YXJ0TWFya2VyLCBpZCBlbmRNYXJrZXIpCit7CisgICAgQVNTRVJUKHN0YXJ0
TWFya2VyICE9IG5pbCk7CisgICAgQVNTRVJUKGVuZE1hcmtlciAhPSBuaWwpOworICAgIEFTU0VS
VChDRkdldFR5cGVJRChzdGFydE1hcmtlcikgPT0gd2tHZXRBWFRleHRNYXJrZXJUeXBlSUQoKSk7
CisgICAgQVNTRVJUKENGR2V0VHlwZUlEKGVuZE1hcmtlcikgPT0gd2tHZXRBWFRleHRNYXJrZXJU
eXBlSUQoKSk7CisgICAgcmV0dXJuIENGQXV0b3JlbGVhc2VIZWxwZXIod2tDcmVhdGVBWFRleHRN
YXJrZXJSYW5nZSgoQ0ZUeXBlUmVmKXN0YXJ0TWFya2VyLCAoQ0ZUeXBlUmVmKWVuZE1hcmtlcikp
OworfQorCitzdGF0aWMgaWQgQVhUZXh0TWFya2VyUmFuZ2VTdGFydChpZCByYW5nZSkKK3sKKyAg
ICBBU1NFUlQocmFuZ2UgIT0gbmlsKTsKKyAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQocmFuZ2UpID09
IHdrR2V0QVhUZXh0TWFya2VyUmFuZ2VUeXBlSUQoKSk7CisgICAgcmV0dXJuIENGQXV0b3JlbGVh
c2VIZWxwZXIod2tDb3B5QVhUZXh0TWFya2VyUmFuZ2VTdGFydChyYW5nZSkpOyAgICAKK30KKwor
c3RhdGljIGlkIEFYVGV4dE1hcmtlclJhbmdlRW5kKGlkIHJhbmdlKQoreworICAgIEFTU0VSVChy
YW5nZSAhPSBuaWwpOworICAgIEFTU0VSVChDRkdldFR5cGVJRChyYW5nZSkgPT0gd2tHZXRBWFRl
eHRNYXJrZXJSYW5nZVR5cGVJRCgpKTsKKyAgICByZXR1cm4gQ0ZBdXRvcmVsZWFzZUhlbHBlcih3
a0NvcHlBWFRleHRNYXJrZXJSYW5nZUVuZChyYW5nZSkpOyAgICAKK30KKworI3ByYWdtYSBtYXJr
IFNlYXJjaCBoZWxwZXJzCisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEFjY2Vzc2liaWxpdHlT
ZWFyY2hLZXk+IEFjY2Vzc2liaWxpdHlTZWFyY2hLZXlNYXA7CisKK3N0cnVjdCBTZWFyY2hLZXlF
bnRyeSB7CisgICAgU3RyaW5nIGtleTsKKyAgICBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5IHZhbHVl
OworfTsKKworc3RhdGljIEFjY2Vzc2liaWxpdHlTZWFyY2hLZXlNYXAqIGNyZWF0ZUFjY2Vzc2li
aWxpdHlTZWFyY2hLZXlNYXAoKQoreworICAgIGNvbnN0IFNlYXJjaEtleUVudHJ5IHNlYXJjaEtl
eXNbXSA9IHsKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlBbnlUeXBlU2VhcmNoS2V5LCBBbnlU
eXBlU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5QmxvY2txdW90ZVNhbWVM
ZXZlbFNlYXJjaEtleSwgQmxvY2txdW90ZVNhbWVMZXZlbFNlYXJjaEtleSB9LAorICAgICAgICB7
IE5TQWNjZXNzaWJpbGl0eUJsb2NrcXVvdGVTZWFyY2hLZXksIEJsb2NrcXVvdGVTZWFyY2hLZXkg
fSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlCb2xkRm9udFNlYXJjaEtleSwgQm9sZEZvbnRT
ZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlCdXR0b25TZWFyY2hLZXksIEJ1
dHRvblNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUNoZWNrQm94U2VhcmNo
S2V5LCBDaGVja0JveFNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUNvbnRy
b2xTZWFyY2hLZXksIENvbnRyb2xTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxp
dHlEaWZmZXJlbnRUeXBlU2VhcmNoS2V5LCBEaWZmZXJlbnRUeXBlU2VhcmNoS2V5IH0sCisgICAg
ICAgIHsgTlNBY2Nlc3NpYmlsaXR5Rm9udENoYW5nZVNlYXJjaEtleSwgRm9udENoYW5nZVNlYXJj
aEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUZvbnRDb2xvckNoYW5nZVNlYXJjaEtl
eSwgRm9udENvbG9yQ2hhbmdlU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5
RnJhbWVTZWFyY2hLZXksIEZyYW1lU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmls
aXR5R3JhcGhpY1NlYXJjaEtleSwgR3JhcGhpY1NlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNj
ZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDFTZWFyY2hLZXksIEhlYWRpbmdMZXZlbDFTZWFyY2hLZXkg
fSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwyU2VhcmNoS2V5LCBIZWFk
aW5nTGV2ZWwyU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xl
dmVsM1NlYXJjaEtleSwgSGVhZGluZ0xldmVsM1NlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNj
ZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDRTZWFyY2hLZXksIEhlYWRpbmdMZXZlbDRTZWFyY2hLZXkg
fSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw1U2VhcmNoS2V5LCBIZWFk
aW5nTGV2ZWw1U2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xl
dmVsNlNlYXJjaEtleSwgSGVhZGluZ0xldmVsNlNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNj
ZXNzaWJpbGl0eUhlYWRpbmdTYW1lTGV2ZWxTZWFyY2hLZXksIEhlYWRpbmdTYW1lTGV2ZWxTZWFy
Y2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nU2VhcmNoS2V5LCBIZWFk
aW5nU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGlnaGxpZ2h0ZWRTZWFy
Y2hLZXksIEhpZ2hsaWdodGVkU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5
SXRhbGljRm9udFNlYXJjaEtleSwgSXRhbGljRm9udFNlYXJjaEtleSB9LAorICAgICAgICB7IE5T
QWNjZXNzaWJpbGl0eUxhbmRtYXJrU2VhcmNoS2V5LCBMYW5kbWFya1NlYXJjaEtleSB9LAorICAg
ICAgICB7IE5TQWNjZXNzaWJpbGl0eUxpbmtTZWFyY2hLZXksIExpbmtTZWFyY2hLZXkgfSwKKyAg
ICAgICAgeyBOU0FjY2Vzc2liaWxpdHlMaXN0U2VhcmNoS2V5LCBMaXN0U2VhcmNoS2V5IH0sCisg
ICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvblNlYXJjaEtleSwgTGl2ZVJlZ2lvblNl
YXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eU1pc3NwZWxsZWRXb3JkU2VhcmNo
S2V5LCBNaXNzcGVsbGVkV29yZFNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0
eVBsYWluVGV4dFNlYXJjaEtleSwgUGxhaW5UZXh0U2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNB
Y2Nlc3NpYmlsaXR5UmFkaW9Hcm91cFNlYXJjaEtleSwgUmFkaW9Hcm91cFNlYXJjaEtleSB9LAor
ICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVNhbWVUeXBlU2VhcmNoS2V5LCBTYW1lVHlwZVNlYXJj
aEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVN0YXRpY1RleHRTZWFyY2hLZXksIFN0
YXRpY1RleHRTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlTdHlsZUNoYW5n
ZVNlYXJjaEtleSwgU3R5bGVDaGFuZ2VTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2li
aWxpdHlUYWJsZVNhbWVMZXZlbFNlYXJjaEtleSwgVGFibGVTYW1lTGV2ZWxTZWFyY2hLZXkgfSwK
KyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlUYWJsZVNlYXJjaEtleSwgVGFibGVTZWFyY2hLZXkg
fSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlUZXh0RmllbGRTZWFyY2hLZXksIFRleHRGaWVs
ZFNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVVuZGVybGluZVNlYXJjaEtl
eSwgVW5kZXJsaW5lU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5VW52aXNp
dGVkTGlua1NlYXJjaEtleSwgVW52aXNpdGVkTGlua1NlYXJjaEtleSB9LAorICAgICAgICB7IE5T
QWNjZXNzaWJpbGl0eVZpc2l0ZWRMaW5rU2VhcmNoS2V5LCBWaXNpdGVkTGlua1NlYXJjaEtleSB9
CisgICAgfTsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5TWFwKiBzZWFyY2hLZXlN
YXAgPSBuZXcgQWNjZXNzaWJpbGl0eVNlYXJjaEtleU1hcDsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoc2VhcmNoS2V5cyk7IGkrKykKKyAgICAgICAgc2VhcmNo
S2V5TWFwLT5zZXQoc2VhcmNoS2V5c1tpXS5rZXksIHNlYXJjaEtleXNbaV0udmFsdWUpOworICAg
IAorICAgIHJldHVybiBzZWFyY2hLZXlNYXA7Cit9CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5U2Vh
cmNoS2V5IGFjY2Vzc2liaWxpdHlTZWFyY2hLZXlGb3JTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gQW55VHlwZVNl
YXJjaEtleTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQWNjZXNzaWJpbGl0eVNlYXJjaEtleU1h
cCogc2VhcmNoS2V5TWFwID0gY3JlYXRlQWNjZXNzaWJpbGl0eVNlYXJjaEtleU1hcCgpOworICAg
IAorICAgIEFjY2Vzc2liaWxpdHlTZWFyY2hLZXkgc2VhcmNoS2V5ID0gc2VhcmNoS2V5TWFwLT5n
ZXQodmFsdWUpOworICAgIAorICAgIHJldHVybiBzZWFyY2hLZXkgPyBzZWFyY2hLZXkgOiBBbnlU
eXBlU2VhcmNoS2V5OworfQorCisjcHJhZ21hIG1hcmsgVGV4dCBNYXJrZXIgaGVscGVycworCitz
dGF0aWMgaWQgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihBWE9iamVjdENhY2hlKiBjYWNo
ZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQoreworICAgIEFTU0VSVChjYWNo
ZSk7CisgICAgCisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CisgICAgY2FjaGUt
PnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLCB2aXNpYmxl
UG9zKTsKKyAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4SUQpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgCisgICAgcmV0dXJuIENGQXV0b3JlbGVhc2VIZWxwZXIod2tDcmVhdGVBWFRleHRNYXJr
ZXIoJnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1hcmtlckRhdGEpKSk7Cit9CisKKy0gKGlk
KXRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKXZp
c2libGVQb3MKK3sKKyAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihtX29i
amVjdC0+YXhPYmplY3RDYWNoZSgpLCB2aXNpYmxlUG9zKTsKK30KKworc3RhdGljIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUqIGNhY2hl
LCBDRlR5cGVSZWYgdGV4dE1hcmtlcikKK3sKKyAgICBBU1NFUlQoY2FjaGUpOworCisgICAgaWYg
KCF0ZXh0TWFya2VyKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgVGV4
dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CisgICAgaWYgKCF3a0dldEJ5dGVzRnJvbUFYVGV4
dE1hcmtlcih0ZXh0TWFya2VyLCAmdGV4dE1hcmtlckRhdGEsIHNpemVvZih0ZXh0TWFya2VyRGF0
YSkpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgCisgICAgcmV0dXJu
IGNhY2hlLT52aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyRGF0YSh0ZXh0TWFya2VyRGF0YSk7
Cit9CisKKy0gKFZpc2libGVQb3NpdGlvbil2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOihp
ZCl0ZXh0TWFya2VyCit7CisgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIo
bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlcik7Cit9CisKK3N0YXRpYyBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRPZlRleHRNYXJrZXJSYW5nZShBWE9i
amVjdENhY2hlICpjYWNoZSwgaWQgdGV4dE1hcmtlclJhbmdlKQoreworICAgIHJldHVybiB2aXNp
YmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHRl
eHRNYXJrZXJSYW5nZSkpOworfQorCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3Np
dGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBpZCB0ZXh0
TWFya2VyUmFuZ2UpCit7CisgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIo
Y2FjaGUsIEFYVGV4dE1hcmtlclJhbmdlRW5kKHRleHRNYXJrZXJSYW5nZSkpOworfQorCitzdGF0
aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbU1hcmtlcnMoaWQgdGV4dE1hcmtlcjEsIGlkIHRleHRN
YXJrZXIyKQoreworICAgIGlmICghdGV4dE1hcmtlcjEgfHwgIXRleHRNYXJrZXIyKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgICAgICAKKyAgICByZXR1cm4gQVhUZXh0TWFya2VyUmFuZ2UodGV4
dE1hcmtlcjEsIHRleHRNYXJrZXIyKTsKK30KKworLy8gV2hlbiBtb2RpZnlpbmcgYXR0cmlidXRl
ZCBzdHJpbmdzLCB0aGUgcmFuZ2UgY2FuIGNvbWUgZnJvbSBhIHNvdXJjZSB3aGljaCBtYXkgcHJv
dmlkZSBmYXVsdHkgaW5mb3JtYXRpb24gKGUuZy4gdGhlIHNwZWxsIGNoZWNrZXIpLgorLy8gVG8g
cHJvdGVjdCBhZ2FpbnN0IHN1Y2ggY2FzZXMgdGhlIHJhbmdlIHNob3VsZCBiZSB2YWxpZGF0ZWQg
YmVmb3JlIGFkZGluZyBvciByZW1vdmluZyBhdHRyaWJ1dGVzLgorc3RhdGljIEJPT0wgQVhBdHRy
aWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKE5TQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywg
TlNSYW5nZSByYW5nZSkKK3sKKyAgICByZXR1cm4gKHJhbmdlLmxvY2F0aW9uIDwgW2F0dHJTdHJp
bmcgbGVuZ3RoXSAmJiBOU01heFJhbmdlKHJhbmdlKSA8PSBbYXR0clN0cmluZyBsZW5ndGhdKTsK
K30KKworc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KE5TTXV0YWJsZUF0dHJp
YnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1dGUsIE5TRm9udCogZm9u
dCwgTlNSYW5nZSByYW5nZSkKK3sKKyAgICBpZiAoIUFYQXR0cmlidXRlZFN0cmluZ1JhbmdlSXNW
YWxpZChhdHRyU3RyaW5nLCByYW5nZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAo
Zm9udCkgeworICAgICAgICBOU0RpY3Rpb25hcnkqIGRpY3QgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbZm9udCBmb250TmFtZV0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgTlNBY2Nlc3NpYmlsaXR5Rm9udE5hbWVLZXksCisg
ICAgICAgICAgICBbZm9udCBmYW1pbHlOYW1lXSAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
TlNBY2Nlc3NpYmlsaXR5Rm9udEZhbWlseUtleSwKKyAgICAgICAgICAgIFtmb250IGRpc3BsYXlO
YW1lXSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlTmFt
ZUtleSwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6W2ZvbnQgcG9pbnRT
aXplXV0gLCBOU0FjY2Vzc2liaWxpdHlGb250U2l6ZUtleSwKKyAgICAgICAgbmlsXTsKKworICAg
ICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6YXR0cmlidXRlIHZhbHVlOmRpY3QgcmFuZ2U6
cmFuZ2VdOworICAgIH0gZWxzZQorICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6
YXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKKyAgICAKK30KKworc3RhdGljIENHQ29sb3JSZWYgQ3Jl
YXRlQ0dDb2xvcklmRGlmZmVyZW50KE5TQ29sb3IqIG5zQ29sb3IsIENHQ29sb3JSZWYgZXhpc3Rp
bmdDb2xvcikKK3sKKyAgICAvLyBnZXQgY29sb3IgaW5mb3JtYXRpb24gYXNzdW1pbmcgTlNEZXZp
Y2VSR0JDb2xvclNwYWNlIAorICAgIE5TQ29sb3IqIHJnYkNvbG9yID0gW25zQ29sb3IgY29sb3JV
c2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07CisgICAgaWYgKHJnYkNv
bG9yID09IG5pbCkKKyAgICAgICAgcmdiQ29sb3IgPSBbTlNDb2xvciBibGFja0NvbG9yXTsKKyAg
ICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07CisgICAgW3JnYkNvbG9yIGdldFJlZDomY29tcG9uZW50
c1swXSBncmVlbjomY29tcG9uZW50c1sxXSBibHVlOiZjb21wb25lbnRzWzJdIGFscGhhOiZjb21w
b25lbnRzWzNdXTsKKyAgICAKKyAgICAvLyBjcmVhdGUgYSBuZXcgQ0dDb2xvclJlZiB0byByZXR1
cm4KKyAgICBDR0NvbG9yU3BhY2VSZWYgY2dDb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRl
RGV2aWNlUkdCKCk7CisgICAgQ0dDb2xvclJlZiBjZ0NvbG9yID0gQ0dDb2xvckNyZWF0ZShjZ0Nv
bG9yU3BhY2UsIGNvbXBvbmVudHMpOworICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY2dDb2xvclNw
YWNlKTsKKyAgICAKKyAgICAvLyBjaGVjayBmb3IgbWF0Y2ggd2l0aCBleGlzdGluZyBjb2xvcgor
ICAgIGlmIChleGlzdGluZ0NvbG9yICYmIENHQ29sb3JFcXVhbFRvQ29sb3IoY2dDb2xvciwgZXhp
c3RpbmdDb2xvcikpIHsKKyAgICAgICAgQ0dDb2xvclJlbGVhc2UoY2dDb2xvcik7CisgICAgICAg
IGNnQ29sb3IgPSAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gY2dDb2xvcjsKK30KKworc3Rh
dGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihOU011dGFibGVBdHRyaWJ1dGVkU3Ry
aW5nKiBhdHRyU3RyaW5nLCBOU1N0cmluZyogYXR0cmlidXRlLCBOU0NvbG9yKiBjb2xvciwgTlNS
YW5nZSByYW5nZSkKK3sKKyAgICBpZiAoIUFYQXR0cmlidXRlZFN0cmluZ1JhbmdlSXNWYWxpZChh
dHRyU3RyaW5nLCByYW5nZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb2xvcikgewor
ICAgICAgICBDR0NvbG9yUmVmIGV4aXN0aW5nQ29sb3IgPSAoQ0dDb2xvclJlZikgW2F0dHJTdHJp
bmcgYXR0cmlidXRlOmF0dHJpYnV0ZSBhdEluZGV4OnJhbmdlLmxvY2F0aW9uIGVmZmVjdGl2ZVJh
bmdlOm5pbF07CisgICAgICAgIENHQ29sb3JSZWYgY2dDb2xvciA9IENyZWF0ZUNHQ29sb3JJZkRp
ZmZlcmVudChjb2xvciwgZXhpc3RpbmdDb2xvcik7CisgICAgICAgIGlmIChjZ0NvbG9yKSB7Cisg
ICAgICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6YXR0cmlidXRlIHZhbHVlOihpZClj
Z0NvbG9yIHJhbmdlOnJhbmdlXTsKKyAgICAgICAgICAgIENHQ29sb3JSZWxlYXNlKGNnQ29sb3Ip
OworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJp
YnV0ZTphdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOworfQorCitzdGF0aWMgdm9pZCBBWEF0dHJpYnV0
ZVN0cmluZ1NldE51bWJlcihOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBO
U1N0cmluZyogYXR0cmlidXRlLCBOU051bWJlciogbnVtYmVyLCBOU1JhbmdlIHJhbmdlKQorewor
ICAgIGlmICghQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJhbmdl
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG51bWJlcikKKyAgICAgICAgW2F0dHJTdHJp
bmcgYWRkQXR0cmlidXRlOmF0dHJpYnV0ZSB2YWx1ZTpudW1iZXIgcmFuZ2U6cmFuZ2VdOworICAg
IGVsc2UKKyAgICAgICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOmF0dHJpYnV0ZSByYW5n
ZTpyYW5nZV07Cit9CisKK3N0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgTlNSYW5nZSByYW5nZSkKK3sKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+
c3R5bGUoKTsKKworICAgIC8vIHNldCBiYXNpYyBmb250IGluZm8KKyAgICBBWEF0dHJpYnV0ZVN0
cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUs
IHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCksIHJhbmdlKTsKKworICAg
IC8vIHNldCBiYXNpYyBjb2xvcnMKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJT
dHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29s
b3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSksIHJhbmdl
KTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJp
bGl0eUJhY2tncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpLCByYW5nZSk7CisKKyAg
ICAvLyBzZXQgc3VwZXIvc3ViIHNjcmlwdGluZworICAgIEVWZXJ0aWNhbEFsaWduIGFsaWdubWVu
dCA9IHN0eWxlLT52ZXJ0aWNhbEFsaWduKCk7CisgICAgaWYgKGFsaWdubWVudCA9PSBTVUIpCisg
ICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJp
bGl0eVN1cGVyc2NyaXB0VGV4dEF0dHJpYnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6KC0x
KV0sIHJhbmdlKTsKKyAgICBlbHNlIGlmIChhbGlnbm1lbnQgPT0gU1VQRVIpCisgICAgICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eVN1cGVy
c2NyaXB0VGV4dEF0dHJpYnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6MV0sIHJhbmdlKTsK
KyAgICBlbHNlCisgICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2li
aWxpdHlTdXBlcnNjcmlwdFRleHRBdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOworICAgIAorICAgIC8v
IHNldCBzaGFkb3cKKyAgICBpZiAoc3R5bGUtPnRleHRTaGFkb3coKSkKKyAgICAgICAgQVhBdHRy
aWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5U2hhZG93VGV4
dEF0dHJpYnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIHJhbmdlKTsKKyAgICBl
bHNlCisgICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlT
aGFkb3dUZXh0QXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKKyAgICAKKyAgICAvLyBzZXQgdW5kZXJs
aW5lIGFuZCBzdHJpa2V0aHJvdWdoCisgICAgaW50IGRlY29yID0gc3R5bGUtPnRleHREZWNvcmF0
aW9uc0luRWZmZWN0KCk7CisgICAgaWYgKChkZWNvciAmIFVOREVSTElORSkgPT0gMCkgeworICAg
ICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5VW5kZXJsaW5l
VGV4dEF0dHJpYnV0ZSByYW5nZTpyYW5nZV07CisgICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0
dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlVbmRlcmxpbmVDb2xvclRleHRBdHRyaWJ1dGUgcmFuZ2U6
cmFuZ2VdOworICAgIH0KKyAgICAKKyAgICBpZiAoKGRlY29yICYgTElORV9USFJPVUdIKSA9PSAw
KSB7CisgICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlT
dHJpa2V0aHJvdWdoVGV4dEF0dHJpYnV0ZSByYW5nZTpyYW5nZV07CisgICAgICAgIFthdHRyU3Ry
aW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlTdHJpa2V0aHJvdWdoQ29sb3JUZXh0
QXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKKyAgICB9CisKKyAgICBpZiAoKGRlY29yICYgKFVOREVS
TElORSB8IExJTkVfVEhST1VHSCkpICE9IDApIHsKKyAgICAgICAgLy8gZmluZCBjb2xvcnMgdXNp
bmcgcXVpcmsgbW9kZSBhcHByb2FjaCAoc3RyaWN0IG1vZGUgd291bGQgdXNlIGN1cnJlbnQKKyAg
ICAgICAgLy8gY29sb3IgZm9yIGFsbCBidXQgdGhlIHJvb3QgbGluZSBib3gsIHdoaWNoIHdvdWxk
IHVzZSBnZXRUZXh0RGVjb3JhdGlvbkNvbG9ycykKKyAgICAgICAgQ29sb3IgdW5kZXJsaW5lLCBv
dmVybGluZSwgbGluZXRocm91Z2g7CisgICAgICAgIHJlbmRlcmVyLT5nZXRUZXh0RGVjb3JhdGlv
bkNvbG9ycyhkZWNvciwgdW5kZXJsaW5lLCBvdmVybGluZSwgbGluZXRocm91Z2gpOworICAgICAg
ICAKKyAgICAgICAgaWYgKChkZWNvciAmIFVOREVSTElORSkgIT0gMCkgeworICAgICAgICAgICAg
QVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5VW5k
ZXJsaW5lVGV4dEF0dHJpYnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIHJhbmdl
KTsKKyAgICAgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNB
Y2Nlc3NpYmlsaXR5VW5kZXJsaW5lQ29sb3JUZXh0QXR0cmlidXRlLCBuc0NvbG9yKHVuZGVybGlu
ZSksIHJhbmdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoZGVjb3IgJiBMSU5FX1RIUk9V
R0gpICE9IDApIHsKKyAgICAgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJT
dHJpbmcsIE5TQWNjZXNzaWJpbGl0eVN0cmlrZXRocm91Z2hUZXh0QXR0cmlidXRlLCBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgcmFuZ2UpOworICAgICAgICAgICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXRDb2xvcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlTdHJpa2V0aHJvdWdoQ29s
b3JUZXh0QXR0cmlidXRlLCBuc0NvbG9yKGxpbmV0aHJvdWdoKSwgcmFuZ2UpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIEluZGljYXRlIGJhY2tncm91bmQgaGlnaGxpZ2h0aW5nLgor
ICAgIGZvciAoTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7IG5vZGU7IG5vZGUgPSBub2Rl
LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUobWFya1RhZykp
CisgICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBAIkFY
SGlnaGxpZ2h0IiwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIHJhbmdlKTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0QmxvY2txdW90ZUxldmVsKE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIE5TUmFuZ2UgcmFuZ2UpCit7CisgICAgaWYgKCFBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlz
VmFsaWQoYXR0clN0cmluZywgcmFuZ2UpKQorICAgICAgICByZXR1cm47CisKKyAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvYmogPSByZW5kZXJlci0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgp
LT5nZXRPckNyZWF0ZShyZW5kZXJlcik7CisgICAgaW50IHF1b3RlTGV2ZWwgPSBvYmotPmJsb2Nr
cXVvdGVMZXZlbCgpOworICAgIAorICAgIGlmIChxdW90ZUxldmVsKQorICAgICAgICBbYXR0clN0
cmluZyBhZGRBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5QmxvY2tRdW90ZUxldmVsQXR0cmlidXRl
IHZhbHVlOltOU051bWJlciBudW1iZXJXaXRoSW50OnF1b3RlTGV2ZWxdIHJhbmdlOnJhbmdlXTsK
KyAgICBlbHNlCisgICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2li
aWxpdHlCbG9ja1F1b3RlTGV2ZWxBdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOworfQorCitzdGF0aWMg
dm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFNwZWxsaW5nKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcqIGF0dHJTdHJpbmcsIE5vZGUqIG5vZGUsIGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGNoYXJM
ZW5ndGgsIE5TUmFuZ2UgcmFuZ2UpCit7CisgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkpIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHNw
ZWxsaW5nIGRpcmVjdGx5IHNpbmNlIGRvY3VtZW50LT5tYXJrZXJzRm9yTm9kZSgpIGRvZXMgbm90
IHN0b3JlIHRoZSBtaXNzcGVsbGVkIG1hcmtpbmcgd2hlbiB0aGUgY3Vyc29yIGlzIGluIGEgd29y
ZC4KKyAgICAgICAgVGV4dENoZWNrZXJDbGllbnQqIGNoZWNrZXIgPSBub2RlLT5kb2N1bWVudCgp
LT5mcmFtZSgpLT5lZGl0b3IoKS0+dGV4dENoZWNrZXIoKTsKKworICAgICAgICAvLyBjaGVja1Rl
eHRPZlBhcmFncmFwaCBpcyB0aGUgb25seSBzcGVsbGluZy9ncmFtbWFyIGNoZWNrZXIgaW1wbGVt
ZW50ZWQgaW4gV0sxIGFuZCBXSzIKKyAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4g
cmVzdWx0czsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY2hlY2tlciwgY2hhcnMsIGNo
YXJMZW5ndGgsIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cyk7CisKKyAgICAgICAg
c2l6ZV90IHNpemUgPSByZXN1bHRzLnNpemUoKTsKKyAgICAgICAgTlNOdW1iZXIqIHRydWVWYWx1
ZSA9IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdS
ZXN1bHQmIHJlc3VsdCA9IHJlc3VsdHNbaV07CisgICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmlu
Z1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlNaXNzcGVsbGVkVGV4dEF0dHJp
YnV0ZSwgdHJ1ZVZhbHVlLCBOU01ha2VSYW5nZShyZXN1bHQubG9jYXRpb24gKyByYW5nZS5sb2Nh
dGlvbiwgcmVzdWx0Lmxlbmd0aCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpbnQgY3VycmVudFBvc2l0aW9uID0gMDsKKyAgICB3aGlsZSAoY2hhckxlbmd0aCA+
IDApIHsKKyAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJEYXRhID0gY2hhcnMgKyBjdXJyZW50UG9z
aXRpb247CisgICAgICAgIFRleHRDaGVja2VyQ2xpZW50KiBjaGVja2VyID0gbm9kZS0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnRleHRDaGVja2VyKCk7CisgICAgICAgIAorICAgICAg
ICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOworICAgICAgICBpbnQgbWlzc3BlbGxpbmdM
ZW5ndGggPSAwOworICAgICAgICBjaGVja2VyLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoY2hhckRh
dGEsIGNoYXJMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgp
OworICAgICAgICBpZiAobWlzc3BlbGxpbmdMb2NhdGlvbiA9PSAtMSB8fCAhbWlzc3BlbGxpbmdM
ZW5ndGgpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIE5TUmFuZ2Ugc3Bl
bGxSYW5nZSA9IE5TTWFrZVJhbmdlKHJhbmdlLmxvY2F0aW9uICsgY3VycmVudFBvc2l0aW9uICsg
bWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICBBWEF0dHJp
YnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlNaXNzcGVsbGVk
VGV4dEF0dHJpYnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIHNwZWxsUmFuZ2Up
OworICAgICAgICBjaGFyTGVuZ3RoIC09IChtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxp
bmdMZW5ndGgpOworICAgICAgICBjdXJyZW50UG9zaXRpb24gKz0gKG1pc3NwZWxsaW5nTG9jYXRp
b24gKyBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBBWEF0dHJp
YnV0ZVN0cmluZ1NldEhlYWRpbmdMZXZlbChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRy
U3RyaW5nLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBOU1JhbmdlIHJhbmdlKQoreworICAgIGlm
ICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIUFYQXR0cmlidXRl
ZFN0cmluZ1JhbmdlSXNWYWxpZChhdHRyU3RyaW5nLCByYW5nZSkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICAvLyBTb21ldGltZXMgdGhlcmUgYXJlIG9iamVjdHMgYmV0d2VlbiB0aGUgdGV4
dCBhbmQgdGhlIGhlYWRpbmcuIAorICAgIC8vIEluIHRob3NlIGNhc2VzIHRoZSBwYXJlbnQgaGll
cmFyY2h5IHNob3VsZCBiZSBxdWVyaWVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGhlYWRpbmcgbGV2
ZWwuCisgICAgaW50IHBhcmVudEhlYWRpbmdMZXZlbCA9IDA7CisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogcGFyZW50T2JqZWN0ID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUo
KS0+Z2V0T3JDcmVhdGUocmVuZGVyZXItPnBhcmVudCgpKTsKKyAgICBmb3IgKDsgcGFyZW50T2Jq
ZWN0OyBwYXJlbnRPYmplY3QgPSBwYXJlbnRPYmplY3QtPnBhcmVudE9iamVjdCgpKSB7CisgICAg
ICAgIHBhcmVudEhlYWRpbmdMZXZlbCA9IHBhcmVudE9iamVjdC0+aGVhZGluZ0xldmVsKCk7Cisg
ICAgICAgIGlmIChwYXJlbnRIZWFkaW5nTGV2ZWwpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisgICAgCisgICAgaWYgKHBhcmVudEhlYWRpbmdMZXZlbCkKKyAgICAgICAgW2F0dHJTdHJpbmcg
YWRkQXR0cmlidXRlOkAiQVhIZWFkaW5nTGV2ZWwiIHZhbHVlOltOU051bWJlciBudW1iZXJXaXRo
SW50OnBhcmVudEhlYWRpbmdMZXZlbF0gcmFuZ2U6cmFuZ2VdOworICAgIGVsc2UKKyAgICAgICAg
W2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOkAiQVhIZWFkaW5nTGV2ZWwiIHJhbmdlOnJhbmdl
XTsKK30KKworc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRFbGVtZW50KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1dGUsIEFjY2Vz
c2liaWxpdHlPYmplY3QqIG9iamVjdCwgTlNSYW5nZSByYW5nZSkKK3sKKyAgICBpZiAoIUFYQXR0
cmlidXRlZFN0cmluZ1JhbmdlSXNWYWxpZChhdHRyU3RyaW5nLCByYW5nZSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoKSkgeworICAgICAgICAvLyBtYWtlIGEgc2VyaWFsaXphYmxlIEFYIG9iamVjdAorICAg
ICAgICAKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHN0YXRpY19jYXN0PEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QqPihvYmplY3QpLT5yZW5kZXJlcigpOworICAgICAgICBpZiAo
IXJlbmRlcmVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgRG9jdW1l
bnQqIGRvYyA9IHJlbmRlcmVyLT5kb2N1bWVudCgpOworICAgICAgICBpZiAoIWRvYykKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0g
ZG9jLT5heE9iamVjdENhY2hlKCk7CisgICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgQVhVSUVsZW1lbnRSZWYgYXhFbGVtZW50ID0gd2tDcmVhdGVBWFVJ
RWxlbWVudFJlZihvYmplY3QtPndyYXBwZXIoKSk7CisgICAgICAgIGlmIChheEVsZW1lbnQpIHsK
KyAgICAgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTphdHRyaWJ1dGUgdmFsdWU6KGlk
KWF4RWxlbWVudCByYW5nZTpyYW5nZV07CisgICAgICAgICAgICBDRlJlbGVhc2UoYXhFbGVtZW50
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRy
aWJ1dGU6YXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKK30KKworc3RhdGljIHZvaWQgQVhBdHRyaWJ1
dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5n
LCBOb2RlKiBub2RlLCBjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW5ndGgpCit7CisgICAgLy8g
c2tpcCBpbnZpc2libGUgdGV4dAorICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gZWFzaWVyIHRvIGNhbGN1bGF0ZSB0aGUgcmFuZ2UgYmVmb3JlIGFw
cGVuZGluZyB0aGUgc3RyaW5nCisgICAgTlNSYW5nZSBhdHRyU3RyaW5nUmFuZ2UgPSBOU01ha2VS
YW5nZShbYXR0clN0cmluZyBsZW5ndGhdLCBsZW5ndGgpOworICAgIAorICAgIC8vIGFwcGVuZCB0
aGUgc3RyaW5nIGZyb20gdGhpcyBub2RlCisgICAgW1thdHRyU3RyaW5nIG11dGFibGVTdHJpbmdd
IGFwcGVuZFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6Y2hhcnMgbGVuZ3Ro
Omxlbmd0aF1dOworCisgICAgLy8gYWRkIG5ldyBhdHRyaWJ1dGVzIGFuZCByZW1vdmUgaXJyZWxl
dmFudCBpbmhlcml0ZWQgb25lcworICAgIC8vIE5PVEU6IGNvbG9yIGF0dHJpYnV0ZXMgYXJlIGhh
bmRsZWQgc3BlY2lhbGx5IGJlY2F1c2UgLVtOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0
dHJpYnV0ZTogdmFsdWU6IHJhbmdlOl0gZG9lcyBub3QgbWVyZ2UKKyAgICAvLyBpZGVudGljYWwg
Y29sb3JzLiAgV29ya2Fyb3VuZCBpcyB0byBub3QgcmVwbGFjZSBhbiBleGlzdGluZyBjb2xvciBh
dHRyaWJ1dGUgaWYgaXQgbWF0Y2hlcyB3aGF0IHdlIGFyZSBhZGRpbmcuICBUaGlzIGFsc28gbWVh
bnMKKyAgICAvLyB3ZSBjYW5ub3QganVzdCBwcmUtcmVtb3ZlIGFsbCBpbmhlcml0ZWQgYXR0cmli
dXRlcyBvbiB0aGUgYXBwZW5kZWQgc3RyaW5nLCBzbyB3ZSBoYXZlIHRvIHJlbW92ZSB0aGUgaXJy
ZWxldmFudCBvbmVzIGluZGl2aWR1YWxseS4KKworICAgIC8vIHJlbW92ZSBpbmhlcml0ZWQgYXR0
YWNobWVudCBmcm9tIHByaW9yIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFJlcGxhY2VkCisgICAg
W2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eUF0dGFjaG1lbnRUZXh0
QXR0cmlidXRlIHJhbmdlOmF0dHJTdHJpbmdSYW5nZV07CisgICAgW2F0dHJTdHJpbmcgcmVtb3Zl
QXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eU1pc3NwZWxsZWRUZXh0QXR0cmlidXRlIHJhbmdlOmF0
dHJTdHJpbmdSYW5nZV07CisgICAgCisgICAgLy8gc2V0IG5ldyBhdHRyaWJ1dGVzCisgICAgQVhB
dHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShhdHRyU3RyaW5nLCBub2RlLT5yZW5kZXJlcigpLCBhdHRy
U3RyaW5nUmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0SGVhZGluZ0xldmVsKGF0dHJT
dHJpbmcsIG5vZGUtPnJlbmRlcmVyKCksIGF0dHJTdHJpbmdSYW5nZSk7CisgICAgQVhBdHRyaWJ1
dGVTdHJpbmdTZXRCbG9ja3F1b3RlTGV2ZWwoYXR0clN0cmluZywgbm9kZS0+cmVuZGVyZXIoKSwg
YXR0clN0cmluZ1JhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEVsZW1lbnQoYXR0clN0
cmluZywgTlNBY2Nlc3NpYmlsaXR5TGlua1RleHRBdHRyaWJ1dGUsIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmFuY2hvckVsZW1lbnRGb3JOb2RlKG5vZGUpLCBhdHRyU3RyaW5nUmFuZ2UpOworICAgIAor
ICAgIC8vIGRvIHNwZWxsaW5nIGxhc3QgYmVjYXVzZSBpdCB0ZW5kcyB0byBicmVhayB1cCB0aGUg
cmFuZ2UKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldFNwZWxsaW5nKGF0dHJTdHJpbmcsIG5vZGUs
IGNoYXJzLCBsZW5ndGgsIGF0dHJTdHJpbmdSYW5nZSk7Cit9CisKK3N0YXRpYyBOU1N0cmluZyog
bnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2RlKQogeworICAgIC8vIHdl
IHNob3VsZCBhbHdheXMgYmUgZ2l2ZW4gYSByZW5kZXJlZCBub2RlIGFuZCBhIHJlcGxhY2VkIG5v
ZGUsIGJ1dCBiZSBzYWZlCisgICAgLy8gcmVwbGFjZWQgbm9kZXMgYXJlIGVpdGhlciBhdHRhY2ht
ZW50cyAod2lkZ2V0cykgb3IgaW1hZ2VzCisgICAgaWYgKCFyZXBsYWNlZE5vZGUgfHwgIXJlcGxh
Y2VkTm9kZS0+cmVuZGVyZXIoKSB8fCAhcmVwbGFjZWROb2RlLT5yZW5kZXJlcigpLT5pc1JlcGxh
Y2VkKCkgfHwgcmVwbGFjZWROb2RlLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorCisgICAgLy8gY3JlYXRl
IGFuIEFYIG9iamVjdCwgYnV0IHNraXAgaXQgaWYgaXQgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHNl
ZW4KKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0gcmVwbGFjZWROb2RlLT5y
ZW5kZXJlcigpLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlcGxh
Y2VkTm9kZS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKG9iai0+YWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZCgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIC8vIHVzZSB0aGUgYXR0YWNobWVu
dENoYXJhY3RlciB0byByZXByZXNlbnQgdGhlIHJlcGxhY2VkIG5vZGUKKyAgICBjb25zdCBVbmlD
aGFyIGF0dGFjaG1lbnRDaGFyID0gTlNBdHRhY2htZW50Q2hhcmFjdGVyOworICAgIHJldHVybiBb
TlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6JmF0dGFjaG1lbnRDaGFyIGxlbmd0aDoxXTsK
K30KKworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nKilkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRN
YXJrZXJSYW5nZTooaWQpdGV4dE1hcmtlclJhbmdlCit7CisgICAgaWYgKCFtX29iamVjdCkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICAvLyBleHRyYWN0IHRoZSBzdGFydCBhbmQgZW5k
IFZpc2libGVQb3NpdGlvbgorICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlv
biA9IHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UobV9vYmplY3QtPmF4
T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlclJhbmdlKTsKKyAgICBpZiAoc3RhcnRWaXNpYmxlUG9z
aXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBWaXNpYmxlUG9zaXRp
b24gZW5kVmlzaWJsZVBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2Vy
UmFuZ2UobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlclJhbmdlKTsKKyAgICBp
ZiAoZW5kVmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRWaXNpYmxl
UG9zaXRpb24sIGVuZFZpc2libGVQb3NpdGlvbik7CisgICAgLy8gaXRlcmF0ZSBvdmVyIHRoZSBy
YW5nZSB0byBidWlsZCB0aGUgQVggYXR0cmlidXRlZCBzdHJpbmcKKyAgICBOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nID0gW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0XTsKKyAgICBUZXh0SXRlcmF0b3IgaXQobWFrZVJhbmdlKHN0YXJ0VmlzaWJsZVBv
c2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24pLmdldCgpKTsKKyAgICB3aGlsZSAoIWl0LmF0RW5k
KCkpIHsKKyAgICAgICAgLy8gbG9jYXRlIHRoZSBub2RlIGFuZCBzdGFydGluZyBvZmZzZXQgZm9y
IHRoaXMgcmFuZ2UKKyAgICAgICAgaW50IGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIE5vZGUqIG5v
ZGUgPSBpdC5yYW5nZSgpLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOworICAgICAgICBBU1NF
UlQobm9kZSA9PSBpdC5yYW5nZSgpLT5lbmRDb250YWluZXIoZXhjZXB0aW9uKSk7CisgICAgICAg
IGludCBvZmZzZXQgPSBpdC5yYW5nZSgpLT5zdGFydE9mZnNldChleGNlcHRpb24pOworCisgICAg
ICAgIC8vIG5vbi16ZXJvIGxlbmd0aCBtZWFucyB0ZXh0dWFsIG5vZGUsIHplcm8gbGVuZ3RoIG1l
YW5zIHJlcGxhY2VkIG5vZGUgKEFLQSAiYXR0YWNobWVudHMiIGluIEFYKQorICAgICAgICBpZiAo
aXQubGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgLy8gQWRkIHRoZSB0ZXh0IG9mIHRoZSBs
aXN0IG1hcmtlciBpdGVtIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgIFN0cmluZyBsaXN0TWFy
a2VyVGV4dCA9IG1fb2JqZWN0LT5saXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbihub2Rl
LCBWaXNpYmxlUG9zaXRpb24oaXQucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgICAg
ICAgICBpZiAoIWxpc3RNYXJrZXJUZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBBWEF0
dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KGF0dHJTdHJpbmcsIG5vZGUsIGxpc3RNYXJrZXJUZXh0
LmNoYXJhY3RlcnMoKSwgbGlzdE1hcmtlclRleHQubGVuZ3RoKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KGF0dHJTdHJpbmcsIG5vZGUs
IGl0LmNoYXJhY3RlcnMoKSwgaXQubGVuZ3RoKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgTm9kZSogcmVwbGFjZWROb2RlID0gbm9kZS0+Y2hpbGROb2RlKG9mZnNldCk7CisgICAg
ICAgICAgICBOU1N0cmluZyAqYXR0YWNobWVudFN0cmluZyA9IG5zU3RyaW5nRm9yUmVwbGFjZWRO
b2RlKHJlcGxhY2VkTm9kZSk7CisgICAgICAgICAgICBpZiAoYXR0YWNobWVudFN0cmluZykgewor
ICAgICAgICAgICAgICAgIE5TUmFuZ2UgYXR0clN0cmluZ1JhbmdlID0gTlNNYWtlUmFuZ2UoW2F0
dHJTdHJpbmcgbGVuZ3RoXSwgW2F0dGFjaG1lbnRTdHJpbmcgbGVuZ3RoXSk7CisKKyAgICAgICAg
ICAgICAgICAvLyBhcHBlbmQgdGhlIHBsYWNlaG9sZGVyIHN0cmluZworICAgICAgICAgICAgICAg
IFtbYXR0clN0cmluZyBtdXRhYmxlU3RyaW5nXSBhcHBlbmRTdHJpbmc6YXR0YWNobWVudFN0cmlu
Z107CisKKyAgICAgICAgICAgICAgICAvLyByZW1vdmUgYWxsIGluaGVyaXRlZCBhdHRyaWJ1dGVz
CisgICAgICAgICAgICAgICAgW2F0dHJTdHJpbmcgc2V0QXR0cmlidXRlczpuaWwgcmFuZ2U6YXR0
clN0cmluZ1JhbmdlXTsKKworICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgYXR0YWNobWVudCBh
dHRyaWJ1dGUKKyAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSByZXBs
YWNlZE5vZGUtPnJlbmRlcmVyKCktPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUocmVwbGFjZWROb2RlLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICBBWEF0dHJp
YnV0ZVN0cmluZ1NldEVsZW1lbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5QXR0YWNobWVu
dFRleHRBdHRyaWJ1dGUsIG9iaiwgYXR0clN0cmluZ1JhbmdlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpdC5hZHZhbmNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIFthdHRy
U3RyaW5nIGF1dG9yZWxlYXNlXTsKK30KKworc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21W
aXNpYmxlUG9zaXRpb25zKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbiwgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uKQoreworICAgIGlkIHN0YXJ0
VGV4dE1hcmtlciA9IHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oY2FjaGUsIHN0YXJ0UG9z
aXRpb24pOworICAgIGlkIGVuZFRleHRNYXJrZXIgPSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0
aW9uKGNhY2hlLCBlbmRQb3NpdGlvbik7CisgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21N
YXJrZXJzKHN0YXJ0VGV4dE1hcmtlciwgZW5kVGV4dE1hcmtlcik7Cit9CisKKy0gKGlkKXRleHRN
YXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOihWaXNpYmxlUG9zaXRpb24pc3RhcnRQb3Np
dGlvbiBlbmRQb3NpdGlvbjooVmlzaWJsZVBvc2l0aW9uKWVuZFBvc2l0aW9uCit7CisgICAgcmV0
dXJuIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKG1fb2JqZWN0LT5heE9iamVj
dENhY2hlKCksIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKK30KKworLSAoTlNBcnJheSop
YWNjZXNzaWJpbGl0eUFjdGlvbk5hbWVzCit7CisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RC
YWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc3RhdGljIE5TQXJyYXkq
IGFjdGlvbkVsZW1lbnRBY3Rpb25zID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6
IE5TQWNjZXNzaWJpbGl0eVByZXNzQWN0aW9uLCBOU0FjY2Vzc2liaWxpdHlTaG93TWVudUFjdGlv
biwgbmlsXTsKKyAgICBzdGF0aWMgTlNBcnJheSogZGVmYXVsdEVsZW1lbnRBY3Rpb25zID0gW1tO
U0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6IE5TQWNjZXNzaWJpbGl0eVNob3dNZW51QWN0
aW9uLCBuaWxdOworICAgIHN0YXRpYyBOU0FycmF5KiBtZW51RWxlbWVudEFjdGlvbnMgPSBbW05T
QXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3NpYmlsaXR5Q2FuY2VsQWN0aW9u
LCBOU0FjY2Vzc2liaWxpdHlQcmVzc0FjdGlvbiwgbmlsXTsKKyAgICBzdGF0aWMgTlNBcnJheSog
c2xpZGVyQWN0aW9ucyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOiBOU0FjY2Vz
c2liaWxpdHlJbmNyZW1lbnRBY3Rpb24sIE5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEFjdGlvbiwg
bmlsXTsKKworICAgIE5TQXJyYXkgKmFjdGlvbnM7CisgICAgaWYgKG1fb2JqZWN0LT5hY3Rpb25F
bGVtZW50KCkgfHwgbV9vYmplY3QtPmlzQnV0dG9uKCkpIAorICAgICAgICBhY3Rpb25zID0gYWN0
aW9uRWxlbWVudEFjdGlvbnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTWVudVJlbGF0ZWQo
KSkKKyAgICAgICAgYWN0aW9ucyA9IG1lbnVFbGVtZW50QWN0aW9uczsKKyAgICBlbHNlIGlmICht
X29iamVjdC0+aXNTbGlkZXIoKSkKKyAgICAgICAgYWN0aW9ucyA9IHNsaWRlckFjdGlvbnM7Cisg
ICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQorICAgICAgICBhY3Rpb25zID0g
W1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QWN0aW9uTmFtZXNdOworICAgIGVs
c2UKKyAgICAgICAgYWN0aW9ucyA9IGRlZmF1bHRFbGVtZW50QWN0aW9uczsKKworICAgIHJldHVy
biBhY3Rpb25zOworfQorCistIChOU0FycmF5KilhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZU5hbWVzCit7CisgICAgaWYgKCFtX29iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIE5TTXV0YWJsZUFycmF5ICphZGRpdGlvbmFsID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsK
KyAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQU93bnMoKSkKKyAgICAgICAgW2FkZGl0aW9u
YWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU93bnNBdHRyaWJ1dGVdOworCisgICAgaWYgKG1f
b2JqZWN0LT5zdXBwb3J0c0FSSUFFeHBhbmRlZCgpKQorICAgICAgICBbYWRkaXRpb25hbCBhZGRP
YmplY3Q6TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRBdHRyaWJ1dGVdOworICAgIAorICAgIGlmICht
X29iamVjdC0+aXNTY3JvbGxiYXIoKSkKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRlXTsKKyAgICAKKyAgICBpZiAobV9vYmpl
Y3QtPnN1cHBvcnRzQVJJQURyYWdnaW5nKCkpCisgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRlXTsKKworICAgIGlmIChtX29iamVjdC0+
c3VwcG9ydHNBUklBRHJvcHBpbmcoKSkKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlXTsKKworICAgIGlmIChtX29iamVjdC0+
aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSAmJiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUq
PihtX29iamVjdCktPnN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkpCisgICAgICAgIFthZGRpdGlvbmFs
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdOyAgICAgICAg
CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0FSSUFMaXZlUmVnaW9uKCkpIHsKKyAg
ICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFMaXZlQXR0cmli
dXRlXTsKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFS
ZWxldmFudEF0dHJpYnV0ZV07CisgICAgfQorICAgIAorICAgIGlmIChtX29iamVjdC0+c29ydERp
cmVjdGlvbigpICE9IFNvcnREaXJlY3Rpb25Ob25lKQorICAgICAgICBbYWRkaXRpb25hbCBhZGRP
YmplY3Q6TlNBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbkF0dHJpYnV0ZV07CisgICAgICAgIAor
ICAgIC8vIElmIGFuIG9iamVjdCBpcyBhIGNoaWxkIG9mIGEgbGl2ZSByZWdpb24sIHRoZW4gYWRk
IHRoZXNlCisgICAgaWYgKG1fb2JqZWN0LT5pc0luc2lkZUFSSUFMaXZlUmVnaW9uKCkpCisgICAg
ICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBUklBQXRvbWljQXR0cmli
dXRlXTsKKyAgICAvLyBBbGwgb2JqZWN0cyBzaG91bGQgZXhwb3NlIHRoZSBBUklBIGJ1c3kgYXR0
cmlidXRlIChBUklBIDEuMSB3aXRoIElTU1VFLTUzOCkuCisgICAgW2FkZGl0aW9uYWwgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFCdXN5QXR0cmlidXRlXTsKKyAgICAKKyAgICAvLyBQb3B1
cCBidXR0b25zIG9uIHRoZSBNYWMgZXhwb3NlIHRoZSB2YWx1ZSBhdHRyaWJ1dGUuCisgICAgaWYg
KG1fb2JqZWN0LT5pc1BvcFVwQnV0dG9uKCkpCisgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV07CisKKyAgICBpZiAobV9vYmplY3QtPmFy
aWFIYXNQb3B1cCgpKQorICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5SGFzUG9wdXBBdHRyaWJ1dGVdOworICAgIAorICAgIGlmIChtX29iamVjdC0+aXNNYXRoUm9v
dCgpKSB7CisgICAgICAgIC8vIFRoZSBpbmRleCBvZiBhIHNxdWFyZSByb290IGlzIGFsd2F5cyBr
bm93biwgc28gdGhlcmUncyBubyBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIGl0LgorICAgICAgICBp
ZiAoIW1fb2JqZWN0LT5pc01hdGhTcXVhcmVSb290KCkpCisgICAgICAgICAgICBbYWRkaXRpb25h
bCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RJbmRleEF0dHJpYnV0ZV07CisgICAg
ICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdFJhZGljYW5k
QXR0cmlidXRlXTsKKyAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc01hdGhGcmFjdGlvbigpKSB7
CisgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoRnJhY3Rp
b25OdW1lcmF0b3JBdHRyaWJ1dGVdOworICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9uRGVub21pbmF0b3JBdHRyaWJ1dGVdOworICAgIH0gZWxz
ZSBpZiAobV9vYmplY3QtPmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkpIHsKKyAgICAgICAg
W2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhCYXNlQXR0cmlidXRlXTsK
KyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhTdWJzY3Jp
cHRBdHRyaWJ1dGVdOworICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5TWF0aFN1cGVyc2NyaXB0QXR0cmlidXRlXTsKKyAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5p
c01hdGhVbmRlck92ZXIoKSkgeworICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5TWF0aEJhc2VBdHRyaWJ1dGVdOworICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFVuZGVyQXR0cmlidXRlXTsKKyAgICAgICAgW2FkZGl0aW9u
YWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhPdmVyQXR0cmlidXRlXTsKKyAgICB9IGVs
c2UgaWYgKG1fb2JqZWN0LT5pc01hdGhGZW5jZWQoKSkgeworICAgICAgICBbYWRkaXRpb25hbCBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZE9wZW5BdHRyaWJ1dGVdOworICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZENsb3NlQXR0
cmlidXRlXTsKKyAgICB9CisKKyAgICByZXR1cm4gYWRkaXRpb25hbDsKK30KKworLSAoTlNBcnJh
eSopYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzCit7CisgICAgaWYgKCFbc2VsZiB1cGRhdGVP
YmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIGlmICht
X29iamVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVu
dFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc107CisKKyAgICBzdGF0aWMgTlNBcnJh
eSogYXR0cmlidXRlcyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogYW5jaG9yQXR0cnMgPSBu
aWw7CisgICAgc3RhdGljIE5TQXJyYXkqIHdlYkFyZWFBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMg
TlNBcnJheSogdGV4dEF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiBsaXN0QXR0cnMg
PSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIGxpc3RCb3hBdHRycyA9IG5pbDsKKyAgICBzdGF0
aWMgTlNBcnJheSogcmFuZ2VBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogY29tbW9u
TWVudUF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiBtZW51QXR0cnMgPSBuaWw7Cisg
ICAgc3RhdGljIE5TQXJyYXkqIG1lbnVCYXJBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJh
eSogbWVudUl0ZW1BdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogbWVudUJ1dHRvbkF0
dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiBjb250cm9sQXR0cnMgPSBuaWw7CisgICAg
c3RhdGljIE5TQXJyYXkqIHRhYmxlQXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIHRh
YmxlUm93QXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIHRhYmxlQ29sQXR0cnMgPSBu
aWw7CisgICAgc3RhdGljIE5TQXJyYXkqIHRhYmxlQ2VsbEF0dHJzID0gbmlsOworICAgIHN0YXRp
YyBOU0FycmF5KiBncm91cEF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiBpbnB1dElt
YWdlQXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIHBhc3N3b3JkRmllbGRBdHRycyA9
IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogdGFiTGlzdEF0dHJzID0gbmlsOworICAgIHN0YXRp
YyBOU0FycmF5KiBjb21ib0JveEF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiBvdXRs
aW5lQXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIG91dGxpbmVSb3dBdHRycyA9IG5p
bDsKKyAgICBzdGF0aWMgTlNBcnJheSogYnV0dG9uQXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5T
QXJyYXkqIHNjcm9sbFZpZXdBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogaW5jcmVt
ZW50b3JBdHRycyA9IG5pbDsKKyAgICBOU011dGFibGVBcnJheSogdGVtcEFycmF5OworICAgIGlm
IChhdHRyaWJ1dGVzID09IG5pbCkgeworICAgICAgICBhdHRyaWJ1dGVzID0gW1tOU0FycmF5IGFs
bG9jXSBpbml0V2l0aE9iamVjdHM6IE5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGUsCisgICAg
ICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U3Vicm9sZUF0dHJpYnV0ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGUs
CisgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGUs
CisgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5SGVscEF0dHJpYnV0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRyaWJ1dGUsCisgICAg
ICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGUsCisgICAg
ICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlLAorICAgICAgICAgICAg
ICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGUsCisgICAgICAgICAgICAg
ICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlLAorICAgICAgICAgICAgICAg
ICAgICAgIEAiQVhTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSIsCisgICAgICAgICAgICAgICAgICAg
ICAgQCJBWFN0YXJ0VGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWEVuZFRl
eHRNYXJrZXIiLAorICAgICAgICAgICAgICAgICAgICAgIEAiQVhWaXNpdGVkIiwKKyAgICAgICAg
ICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlMaW5rZWRVSUVsZW1lbnRzQXR0cmlidXRlLAor
ICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQXR0cmlidXRlLAor
ICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJp
YnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxl
bWVudEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBuaWxdOworICAgIH0KKyAgICBp
ZiAoY29tbW9uTWVudUF0dHJzID09IG5pbCkgeworICAgICAgICBjb21tb25NZW51QXR0cnMgPSBb
W05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJp
YnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlSb2xlRGVz
Y3JpcHRpb25BdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNB
Y2Nlc3NpYmlsaXR5UGFyZW50QXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuaWxdOworICAgIH0KKyAgICBpZiAoYW5jaG9yQXR0cnMgPT0gbmlsKSB7
CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJy
YXk6YXR0cmlidXRlc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eVVSTEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eUFjY2Vzc0tleUF0dHJpYnV0ZV07CisgICAgICAgIGFuY2hvckF0dHJzID0gW1tOU0Fy
cmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkg
cmVsZWFzZV07CisgICAgfQorICAgIGlmICh3ZWJBcmVhQXR0cnMgPT0gbmlsKSB7CisgICAgICAg
IHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmli
dXRlc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OkAiQVhMaW5rVUlFbGVtZW50cyJd
OworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpAIkFYTG9hZGVkIl07CisgICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0OkAiQVhMYXlvdXRDb3VudCJdOworICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlMb2FkaW5nUHJvZ3Jlc3NBdHRyaWJ1dGVdOworICAg
ICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlVUkxBdHRyaWJ1dGVdOwor
ICAgICAgICB3ZWJBcmVhQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVt
cEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAgaWYgKHRl
eHRBdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRP
YmplY3Q6TlNBY2Nlc3NpYmlsaXR5TnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmlidXRlXTsKKyAgICAg
ICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0QXR0cmli
dXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0
ZWRUZXh0UmFuZ2VBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdOworICAgICAgICBbdGVt
cEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbnNlcnRpb25Qb2ludExpbmVOdW1iZXJB
dHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlU
aXRsZVVJRWxlbWVudEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJlcXVpcmVkQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBB
cnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW52YWxpZEF0dHJpYnV0ZV07CisgICAgICAg
IFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVBsYWNlaG9sZGVyVmFsdWVBdHRy
aWJ1dGVdOworICAgICAgICB0ZXh0QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJy
YXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAg
aWYgKGxpc3RBdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKKyAgICAgICAgW3RlbXBBcnJh
eSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZV07Cisg
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGlsZHJl
bkF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eU9yaWVudGF0aW9uQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVdOworICAgICAgICBsaXN0QXR0cnMg
PSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3Rl
bXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAgaWYgKGxpc3RCb3hBdHRycyA9PSBuaWwpIHsK
KyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJh
eTpsaXN0QXR0cnNdOyAgICAKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5QWNjZXNzS2V5QXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbnZhbGlkQXR0cmlidXRlXTsKKyAgICAgICAgbGlzdEJv
eEF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAg
ICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmIChyYW5nZUF0dHJzID09IG5p
bCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vz
c2liaWxpdHlNaW5WYWx1ZUF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eU1heFZhbHVlQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25BdHRyaWJ1dGVdOworICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1ZURlc2NyaXB0aW9uQXR0cmli
dXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VGl0bGVV
SUVsZW1lbnRBdHRyaWJ1dGVdOworICAgICAgICByYW5nZUF0dHJzID0gW1tOU0FycmF5IGFsbG9j
XSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07
CisgICAgfQorICAgIGlmIChtZW51QmFyQXR0cnMgPT0gbmlsKSB7CisgICAgICAgIHRlbXBBcnJh
eSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6Y29tbW9uTWVudUF0dHJz
XTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRD
aGlsZHJlbkF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eVZpc2libGVDaGlsZHJlbkF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXTsKKyAgICAgICAg
bWVudUJhckF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07
CisgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmIChtZW51QXR0cnMg
PT0gbmlsKSB7CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQXJyYXk6Y29tbW9uTWVudUF0dHJzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZV07CisgICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGlsZHJlbkF0dHJpYnV0
ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRpdGxlVUlF
bGVtZW50QXR0cmlidXRlXTsKKyAgICAgICAgbWVudUF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBp
bml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07Cisg
ICAgfQorICAgIGlmIChtZW51SXRlbUF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkg
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmNvbW1vbk1lbnVBdHRyc107
CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRpdGxlQXR0cmli
dXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SGVscEF0
dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNl
bGVjdGVkQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5n
KilrQVhNZW51SXRlbUNtZENoYXJBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9i
amVjdDooTlNTdHJpbmcqKWtBWE1lbnVJdGVtQ21kVmlydHVhbEtleUF0dHJpYnV0ZV07CisgICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FYTWVudUl0ZW1DbWRHbHlwaEF0
dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FYTWVu
dUl0ZW1DbWRNb2RpZmllcnNBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDooTlNTdHJpbmcqKWtBWE1lbnVJdGVtTWFya0NoYXJBdHRyaWJ1dGVdOworICAgICAgICBbdGVt
cEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWE1lbnVJdGVtUHJpbWFyeVVJRWxlbWVudEF0
dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNl
cnZlc0FzVGl0bGVGb3JVSUVsZW1lbnRzQXR0cmlidXRlXTsKKyAgICAgICAgbWVudUl0ZW1BdHRy
cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBb
dGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAobWVudUJ1dHRvbkF0dHJzID09IG5p
bCkgeworICAgICAgICBtZW51QnV0dG9uQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRo
T2JqZWN0czpOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nl
c3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3Np
YmlsaXR5UGFyZW50QXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UG9zaXRp
b25BdHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmlidXRlLAor
ICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlLAorICAgICAgICAgICAg
TlNBY2Nlc3NpYmlsaXR5RW5hYmxlZEF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJp
bGl0eUZvY3VzZWRBdHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlUaXRsZUF0
dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlLCBu
aWxdOworICAgIH0KKyAgICBpZiAoY29udHJvbEF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1w
QXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNd
OworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxl
bWVudEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eUFjY2Vzc0tleUF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVJlcXVpcmVkQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRP
YmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW52YWxpZEF0dHJpYnV0ZV07CisgICAgICAgIGNvbnRyb2xB
dHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAg
ICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAoaW5jcmVtZW50b3JBdHRycyA9
PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5SW5jcmVtZW50QnV0dG9uQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJh
eSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QnV0dG9uQXR0cmlidXRlXTsKKyAg
ICAgICAgaW5jcmVtZW50b3JBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0
ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAo
YnV0dG9uQXR0cnMgPT0gbmlsKSB7CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107CisgICAgICAgIC8vIEJ1dHRvbnMg
c2hvdWxkIG5vdCBleHBvc2UgQVhWYWx1ZS4KKyAgICAgICAgW3RlbXBBcnJheSByZW1vdmVPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV07CisgICAgICAg
IFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJpYnV0ZV07
CisgICAgICAgIGJ1dHRvbkF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRl
bXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmIChj
b21ib0JveEF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmNvbnRyb2xBdHRyc107CisgICAgICAgIFt0ZW1wQXJy
YXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkQXR0cmlidXRlXTsKKyAgICAgICAg
Y29tYm9Cb3hBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXld
OworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOyAgICAgICAgCisgICAgfQorICAgIGlmICh0
YWJsZUF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJh
eSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZVJvd3NBdHRyaWJ1dGVdOworICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlDb2x1bW5zQXR0cmlidXRlXTsK
KyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNvbHVt
bnNBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlWaXNpYmxlQ2VsbHNBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDoo
TlNTdHJpbmcgKilrQVhDb2x1bW5IZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlXTsKKyAgICAgICAg
W3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Um93SGVhZGVyVUlFbGVtZW50c0F0
dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUhl
YWRlckF0dHJpYnV0ZV07CisgICAgICAgIHRhYmxlQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAg
ICB9CisgICAgaWYgKHRhYmxlUm93QXR0cnMgPT0gbmlsKSB7CisgICAgICAgIHRlbXBBcnJheSA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107CisgICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUluZGV4QXR0cmlidXRlXTsK
KyAgICAgICAgdGFibGVSb3dBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0
ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAo
dGFibGVDb2xBdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKKyAgICAgICAgW3RlbXBBcnJh
eSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdOworICAgICAgICBbdGVt
cEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlIZWFkZXJBdHRyaWJ1dGVdOworICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXTsKKyAg
ICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZVJvd3NBdHRy
aWJ1dGVdOworICAgICAgICB0YWJsZUNvbEF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0
aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQor
ICAgIGlmICh0YWJsZUNlbGxBdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKKyAgICAgICAg
W3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Um93SW5kZXhSYW5nZUF0dHJpYnV0
ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUNvbHVtbklu
ZGV4UmFuZ2VBdHRyaWJ1dGVdOworICAgICAgICB0YWJsZUNlbGxBdHRycyA9IFtbTlNBcnJheSBh
bGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVh
c2VdOyAgICAgICAgCisgICAgfQorICAgIGlmIChncm91cEF0dHJzID09IG5pbCkgeworICAgICAg
ICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJp
YnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRs
ZVVJRWxlbWVudEF0dHJpYnV0ZV07CisgICAgICAgIGdyb3VwQXR0cnMgPSBbW05TQXJyYXkgYWxs
b2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNl
XTsKKyAgICB9CisgICAgaWYgKGlucHV0SW1hZ2VBdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVt
cEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpidXR0b25BdHRy
c107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVVSTEF0dHJp
YnV0ZV07CisgICAgICAgIGlucHV0SW1hZ2VBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0K
KyAgICBpZiAocGFzc3dvcmRGaWVsZEF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkg
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAg
ICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0
dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJl
cXVpcmVkQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5SW52YWxpZEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVBsYWNlaG9sZGVyVmFsdWVBdHRyaWJ1dGVdOworICAgICAgICBwYXNzd29y
ZEZpZWxkQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsK
KyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAgaWYgKHRhYkxpc3RBdHRy
cyA9PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5VGFic0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eUNvbnRlbnRzQXR0cmlidXRlXTsKKyAgICAgICAgdGFiTGlzdEF0
dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAg
IFt0ZW1wQXJyYXkgcmVsZWFzZV07ICAgICAgICAKKyAgICB9CisgICAgaWYgKG91dGxpbmVBdHRy
cyA9PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dzQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJh
eSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1w
QXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUNvbHVtbnNBdHRyaWJ1dGVdOworICAgICAg
ICBvdXRsaW5lQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5
XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAgaWYgKG91dGxpbmVS
b3dBdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhBcnJheTp0YWJsZVJvd0F0dHJzXTsKKyAgICAgICAgW3RlbXBBcnJheSBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2luZ0F0dHJpYnV0ZV07CisgICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURpc2Nsb3NlZEJ5Um93QXR0cmlidXRl
XTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc3Vy
ZUxldmVsQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5RGlzY2xvc2VkUm93c0F0dHJpYnV0ZV07CisgICAgICAgIG91dGxpbmVSb3dBdHRycyA9
IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVt
cEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAoc2Nyb2xsVmlld0F0dHJzID09IG5pbCkg
eworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFy
cmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlDb250ZW50c0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eUhvcml6b250YWxTY3JvbGxCYXJBdHRyaWJ1dGVdOworICAgICAgICBbdGVt
cEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbFNjcm9sbEJhckF0dHJpYnV0
ZV07CisgICAgICAgIHNjcm9sbFZpZXdBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhB
cnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAg
ICAKKyAgICBOU0FycmF5ICpvYmplY3RBdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICAKKyAg
ICBpZiAobV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQorICAgICAgICBvYmplY3RBdHRyaWJ1
dGVzID0gcGFzc3dvcmRGaWVsZEF0dHJzOworCisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzV2Vi
QXJlYSgpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gd2ViQXJlYUF0dHJzOworICAgIAor
ICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpCisgICAgICAgIG9iamVjdEF0
dHJpYnV0ZXMgPSB0ZXh0QXR0cnM7CisKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNBbmNob3Io
KSB8fCBtX29iamVjdC0+aXNJbWFnZSgpIHx8IG1fb2JqZWN0LT5pc0xpbmsoKSkKKyAgICAgICAg
b2JqZWN0QXR0cmlidXRlcyA9IGFuY2hvckF0dHJzOworCisgICAgZWxzZSBpZiAobV9vYmplY3Qt
PmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJs
ZUF0dHJzOworICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RhYmxlQ29sdW1uKCkpCisgICAgICAg
IG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJsZUNvbEF0dHJzOworICAgIGVsc2UgaWYgKG1fb2JqZWN0
LT5pc1RhYmxlQ2VsbCgpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFibGVDZWxsQXR0
cnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVGFibGVSb3coKSkgeworICAgICAgICAvLyBB
biBBUklBIHRhYmxlIHJvdyBjYW4gYmUgY29sbGFwc2VkIGFuZCBleHBhbmRlZCwgc28gaXQgbmVl
ZHMgdGhlIGV4dHJhIGF0dHJpYnV0ZXMuCisgICAgICAgIGlmIChtX29iamVjdC0+aXNBUklBVHJl
ZUdyaWRSb3coKSkKKyAgICAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBvdXRsaW5lUm93QXR0
cnM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJsZVJv
d0F0dHJzOworICAgIH0KKyAgICAKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNUcmVlKCkpCisg
ICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBvdXRsaW5lQXR0cnM7CisgICAgZWxzZSBpZiAobV9v
YmplY3QtPmlzVHJlZUl0ZW0oKSkKKyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG91dGxpbmVS
b3dBdHRyczsKKyAgICAKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNMaXN0Qm94KCkpCisgICAg
ICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBsaXN0Qm94QXR0cnM7CisgICAgZWxzZSBpZiAobV9vYmpl
Y3QtPmlzTGlzdCgpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbGlzdEF0dHJzOworICAg
IAorICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0NvbWJvQm94KCkpCisgICAgICAgIG9iamVjdEF0
dHJpYnV0ZXMgPSBjb21ib0JveEF0dHJzOworICAgIAorICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5p
c1Byb2dyZXNzSW5kaWNhdG9yKCkgfHwgbV9vYmplY3QtPmlzU2xpZGVyKCkpCisgICAgICAgIG9i
amVjdEF0dHJpYnV0ZXMgPSByYW5nZUF0dHJzOworCisgICAgLy8gVGhlc2UgYXJlIHByb2Nlc3Nl
ZCBpbiBvcmRlciBiZWNhdXNlIGFuIGlucHV0IGltYWdlIGlzIGEgYnV0dG9uLCBhbmQgYSBidXR0
b24gaXMgYSBjb250cm9sLgorICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0lucHV0SW1hZ2UoKSkK
KyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGlucHV0SW1hZ2VBdHRyczsKKyAgICBlbHNlIGlm
IChtX29iamVjdC0+aXNCdXR0b24oKSkKKyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGJ1dHRv
bkF0dHJzOworICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0NvbnRyb2woKSkKKyAgICAgICAgb2Jq
ZWN0QXR0cmlidXRlcyA9IGNvbnRyb2xBdHRyczsKKyAgICAKKyAgICBlbHNlIGlmIChtX29iamVj
dC0+aXNHcm91cCgpIHx8IG1fb2JqZWN0LT5pc0xpc3RJdGVtKCkpCisgICAgICAgIG9iamVjdEF0
dHJpYnV0ZXMgPSBncm91cEF0dHJzOworICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RhYkxpc3Qo
KSkKKyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHRhYkxpc3RBdHRyczsKKyAgICBlbHNlIGlm
IChtX29iamVjdC0+aXNTY3JvbGxWaWV3KCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBz
Y3JvbGxWaWV3QXR0cnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU3BpbkJ1dHRvbigpKQor
ICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gaW5jcmVtZW50b3JBdHRyczsKKyAgICAKKyAgICBl
bHNlIGlmIChtX29iamVjdC0+aXNNZW51KCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBt
ZW51QXR0cnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTWVudUJhcigpKQorICAgICAgICBv
YmplY3RBdHRyaWJ1dGVzID0gbWVudUJhckF0dHJzOworICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5p
c01lbnVCdXR0b24oKSkKKyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG1lbnVCdXR0b25BdHRy
czsKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNNZW51SXRlbSgpKQorICAgICAgICBvYmplY3RB
dHRyaWJ1dGVzID0gbWVudUl0ZW1BdHRyczsKKyAgICAKKyAgICBOU0FycmF5ICphZGRpdGlvbmFs
QXR0cmlidXRlcyA9IFtzZWxmIGFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNd
OworICAgIGlmIChbYWRkaXRpb25hbEF0dHJpYnV0ZXMgY291bnRdKQorICAgICAgICBvYmplY3RB
dHRyaWJ1dGVzID0gW29iamVjdEF0dHJpYnV0ZXMgYXJyYXlCeUFkZGluZ09iamVjdHNGcm9tQXJy
YXk6YWRkaXRpb25hbEF0dHJpYnV0ZXNdOworICAgIAorICAgIHJldHVybiBvYmplY3RBdHRyaWJ1
dGVzOworfQorCistIChWaXNpYmxlUG9zaXRpb25SYW5nZSl2aXNpYmxlUG9zaXRpb25SYW5nZUZv
clRleHRNYXJrZXJSYW5nZTooaWQpdGV4dE1hcmtlclJhbmdlCit7CisgICAgaWYgKCF0ZXh0TWFy
a2VyUmFuZ2UpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgIEFY
T2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRPZlRleHRNYXJr
ZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSwgdmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZU
ZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRleHRNYXJrZXJSYW5nZSkpOworfQorCistIChOU0FycmF5
KilyZW5kZXJXaWRnZXRDaGlsZHJlbgoreworICAgIFdpZGdldCogd2lkZ2V0ID0gbV9vYmplY3Qt
PndpZGdldCgpOworICAgIGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJl
dHVybiBbKHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlOiBOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV07Cit9CisKKy0gKGlkKXJlbW90
ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3QKK3sKKyAgICBpZiAoIW1fb2JqZWN0KQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIAorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5k
b2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5j
bGllbnQoKS0+YWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpOworfQorCitzdGF0aWMgdm9pZCBj
b252ZXJ0VG9WZWN0b3IoTlNBcnJheSogYXJyYXksIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYgdmVjdG9yKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9
IFthcnJheSBjb3VudF07CisgICAgdmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3Ro
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gW1thcnJheSBvYmplY3RBdEluZGV4OmldIGFjY2Vz
c2liaWxpdHlPYmplY3RdOworICAgICAgICBpZiAob2JqKQorICAgICAgICAgICAgdmVjdG9yLmFw
cGVuZChvYmopOworICAgIH0KK30KKworc3RhdGljIE5TTXV0YWJsZUFycmF5KiBjb252ZXJ0VG9O
U0FycmF5KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYgdmVjdG9yKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHZlY3Rvci5zaXplKCk7Cisg
ICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFj
aXR5OiBsZW5ndGhdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
eworICAgICAgICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3JhcHBlciA9IHZlY3Rv
cltpXS0+d3JhcHBlcigpOworICAgICAgICBBU1NFUlQod3JhcHBlcik7CisgICAgICAgIGlmICh3
cmFwcGVyKSB7CisgICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHJldHVybiB0aGUgYXR0YWNobWVu
dCB2aWV3IGluc3RlYWQgb2YgdGhlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGF0dGFjaG1lbnQu
CisgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHdlIGdldCBwYWxpbmRyb21lIGVycm9ycyBpbiB0
aGUgQVggaGllcmFyY2h5CisgICAgICAgICAgICBpZiAodmVjdG9yW2ldLT5pc0F0dGFjaG1lbnQo
KSAmJiBbd3JhcHBlciBhdHRhY2htZW50Vmlld10pCisgICAgICAgICAgICAgICAgW2FycmF5IGFk
ZE9iamVjdDpbd3JhcHBlciBhdHRhY2htZW50Vmlld11dOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6d3JhcHBlcl07CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGFycmF5OworfQorCistIChpZCl0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rp
b24KK3sKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fb2JqZWN0LT5zZWxlY3Rp
b24oKTsKKyAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczpzZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCkgZW5kUG9zaXRpb246c2VsZWN0aW9uLnZpc2libGVFbmQoKV07
Cit9CisKKy0gKE5TVmFsdWUgKilwb3NpdGlvbgoreworICAgIEludFJlY3QgcmVjdCA9IHBpeGVs
U25hcHBlZEludFJlY3QobV9vYmplY3QtPmVsZW1lbnRSZWN0KCkpOworICAgIE5TUG9pbnQgcG9p
bnQ7CisgICAgCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX29iamVjdC0+ZG9jdW1lbnRG
cmFtZVZpZXcoKTsKKworICAgIC8vIFdlYktpdDEgY29kZSBwYXRoLi4uIHBsYXRmb3JtV2lkZ2V0
KCkgZXhpc3RzLgorICAgIGlmIChmcmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5wbGF0Zm9ybVdpZGdl
dCgpKSB7CisgICAgCisgICAgICAgIC8vIFRoZSBDb2NvYSBhY2Nlc3NpYmlsaXR5IEFQSSB3YW50
cyB0aGUgbG93ZXItbGVmdCBjb3JuZXIuCisgICAgICAgIHBvaW50ID0gTlNNYWtlUG9pbnQocmVj
dC54KCksIHJlY3QubWF4WSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChmcmFtZVZpZXcpIHsK
KyAgICAgICAgICAgIE5TVmlldyogdmlldyA9IGZyYW1lVmlldy0+ZG9jdW1lbnRWaWV3KCk7Cisg
ICAgICAgICAgICBwb2ludCA9IFtbdmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46W3Zp
ZXcgY29udmVydFBvaW50OiBwb2ludCB0b1ZpZXc6bmlsXV07CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICAKKyAgICAgICAgLy8gRmluZCB0aGUgYXBwcm9wcmlhdGUgc2Nyb2xsIHZp
ZXcgdG8gdXNlIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnRzIHRvIHRoZSB3aW5kb3cuCisgICAgICAg
IFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSAwOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnQgPSAwOworICAgICAgICBmb3IgKHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmpl
Y3QoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAg
ICAgICBpZiAocGFyZW50LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpIHsKKyAgICAgICAg
ICAgICAgICBzY3JvbGxWaWV3ID0gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5z
Y3JvbGxWaWV3KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc2Nyb2xsVmlldykKKyAgICAgICAgICAgIHJlY3QgPSBzY3Jv
bGxWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVjdCk7CisgICAgICAgIAorICAgICAgICBQYWdl
KiBwYWdlID0gbV9vYmplY3QtPnBhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHdlIGhh
dmUgYW4gZW1wdHkgY2hyb21lIGNsaWVudCAobGlrZSBTVkcpIHRoZW4gd2Ugc2hvdWxkIHVzZSB0
aGUgcGFnZQorICAgICAgICAvLyBvZiB0aGUgc2Nyb2xsIHZpZXcgcGFyZW50IHRvIGhlbHAgdXMg
Z2V0IHRvIHRoZSBzY3JlZW4gcmVjdC4KKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYWdlICYmIHBh
Z2UtPmNocm9tZSgpLT5jbGllbnQoKS0+aXNFbXB0eUNocm9tZUNsaWVudCgpKQorICAgICAgICAg
ICAgcGFnZSA9IHBhcmVudC0+cGFnZSgpOworCisgICAgICAgIGlmIChwYWdlKQorICAgICAgICAg
ICAgcG9pbnQgPSBwYWdlLT5jaHJvbWUoKS0+cm9vdFZpZXdUb1NjcmVlbihyZWN0KS5sb2NhdGlv
bigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb2ludCA9IHJlY3QubG9jYXRpb24oKTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50OnBvaW50XTsK
K30KKwordHlwZWRlZiBIYXNoTWFwPGludCwgTlNTdHJpbmcqPiBBY2Nlc3NpYmlsaXR5Um9sZU1h
cDsKKworc3RhdGljIGNvbnN0IEFjY2Vzc2liaWxpdHlSb2xlTWFwJiBjcmVhdGVBY2Nlc3NpYmls
aXR5Um9sZU1hcCgpCit7CisgICAgc3RydWN0IFJvbGVFbnRyeSB7CisgICAgICAgIEFjY2Vzc2li
aWxpdHlSb2xlIHZhbHVlOworICAgICAgICBOU1N0cmluZyogc3RyaW5nOworICAgIH07CisgICAg
CisgICAgc3RhdGljIGNvbnN0IFJvbGVFbnRyeSByb2xlc1tdID0geworICAgICAgICB7IFVua25v
d25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlVbmtub3duUm9sZSB9LAorICAgICAgICB7IEJ1dHRvblJv
bGUsIE5TQWNjZXNzaWJpbGl0eUJ1dHRvblJvbGUgfSwKKyAgICAgICAgeyBSYWRpb0J1dHRvblJv
bGUsIE5TQWNjZXNzaWJpbGl0eVJhZGlvQnV0dG9uUm9sZSB9LAorICAgICAgICB7IENoZWNrQm94
Um9sZSwgTlNBY2Nlc3NpYmlsaXR5Q2hlY2tCb3hSb2xlIH0sCisgICAgICAgIHsgU2xpZGVyUm9s
ZSwgTlNBY2Nlc3NpYmlsaXR5U2xpZGVyUm9sZSB9LAorICAgICAgICB7IFRhYkdyb3VwUm9sZSwg
TlNBY2Nlc3NpYmlsaXR5VGFiR3JvdXBSb2xlIH0sCisgICAgICAgIHsgVGV4dEZpZWxkUm9sZSwg
TlNBY2Nlc3NpYmlsaXR5VGV4dEZpZWxkUm9sZSB9LAorICAgICAgICB7IFN0YXRpY1RleHRSb2xl
LCBOU0FjY2Vzc2liaWxpdHlTdGF0aWNUZXh0Um9sZSB9LAorICAgICAgICB7IFRleHRBcmVhUm9s
ZSwgTlNBY2Nlc3NpYmlsaXR5VGV4dEFyZWFSb2xlIH0sCisgICAgICAgIHsgU2Nyb2xsQXJlYVJv
bGUsIE5TQWNjZXNzaWJpbGl0eVNjcm9sbEFyZWFSb2xlIH0sCisgICAgICAgIHsgUG9wVXBCdXR0
b25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlQb3BVcEJ1dHRvblJvbGUgfSwKKyAgICAgICAgeyBNZW51
QnV0dG9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5TWVudUJ1dHRvblJvbGUgfSwKKyAgICAgICAgeyBU
YWJsZVJvbGUsIE5TQWNjZXNzaWJpbGl0eVRhYmxlUm9sZSB9LAorICAgICAgICB7IEFwcGxpY2F0
aW9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5QXBwbGljYXRpb25Sb2xlIH0sCisgICAgICAgIHsgR3Jv
dXBSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBSYWRpb0dyb3Vw
Um9sZSwgTlNBY2Nlc3NpYmlsaXR5UmFkaW9Hcm91cFJvbGUgfSwKKyAgICAgICAgeyBMaXN0Um9s
ZSwgTlNBY2Nlc3NpYmlsaXR5TGlzdFJvbGUgfSwKKyAgICAgICAgeyBEaXJlY3RvcnlSb2xlLCBO
U0FjY2Vzc2liaWxpdHlMaXN0Um9sZSB9LAorICAgICAgICB7IFNjcm9sbEJhclJvbGUsIE5TQWNj
ZXNzaWJpbGl0eVNjcm9sbEJhclJvbGUgfSwKKyAgICAgICAgeyBWYWx1ZUluZGljYXRvclJvbGUs
IE5TQWNjZXNzaWJpbGl0eVZhbHVlSW5kaWNhdG9yUm9sZSB9LAorICAgICAgICB7IEltYWdlUm9s
ZSwgTlNBY2Nlc3NpYmlsaXR5SW1hZ2VSb2xlIH0sCisgICAgICAgIHsgTWVudUJhclJvbGUsIE5T
QWNjZXNzaWJpbGl0eU1lbnVCYXJSb2xlIH0sCisgICAgICAgIHsgTWVudVJvbGUsIE5TQWNjZXNz
aWJpbGl0eU1lbnVSb2xlIH0sCisgICAgICAgIHsgTWVudUl0ZW1Sb2xlLCBOU0FjY2Vzc2liaWxp
dHlNZW51SXRlbVJvbGUgfSwKKyAgICAgICAgeyBDb2x1bW5Sb2xlLCBOU0FjY2Vzc2liaWxpdHlD
b2x1bW5Sb2xlIH0sCisgICAgICAgIHsgUm93Um9sZSwgTlNBY2Nlc3NpYmlsaXR5Um93Um9sZSB9
LAorICAgICAgICB7IFRvb2xiYXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlUb29sYmFyUm9sZSB9LAor
ICAgICAgICB7IEJ1c3lJbmRpY2F0b3JSb2xlLCBOU0FjY2Vzc2liaWxpdHlCdXN5SW5kaWNhdG9y
Um9sZSB9LAorICAgICAgICB7IFByb2dyZXNzSW5kaWNhdG9yUm9sZSwgTlNBY2Nlc3NpYmlsaXR5
UHJvZ3Jlc3NJbmRpY2F0b3JSb2xlIH0sCisgICAgICAgIHsgV2luZG93Um9sZSwgTlNBY2Nlc3Np
YmlsaXR5V2luZG93Um9sZSB9LAorICAgICAgICB7IERyYXdlclJvbGUsIE5TQWNjZXNzaWJpbGl0
eURyYXdlclJvbGUgfSwKKyAgICAgICAgeyBTeXN0ZW1XaWRlUm9sZSwgTlNBY2Nlc3NpYmlsaXR5
U3lzdGVtV2lkZVJvbGUgfSwKKyAgICAgICAgeyBPdXRsaW5lUm9sZSwgTlNBY2Nlc3NpYmlsaXR5
T3V0bGluZVJvbGUgfSwKKyAgICAgICAgeyBJbmNyZW1lbnRvclJvbGUsIE5TQWNjZXNzaWJpbGl0
eUluY3JlbWVudG9yUm9sZSB9LAorICAgICAgICB7IEJyb3dzZXJSb2xlLCBOU0FjY2Vzc2liaWxp
dHlCcm93c2VyUm9sZSB9LAorICAgICAgICB7IENvbWJvQm94Um9sZSwgTlNBY2Nlc3NpYmlsaXR5
Q29tYm9Cb3hSb2xlIH0sCisgICAgICAgIHsgU3BsaXRHcm91cFJvbGUsIE5TQWNjZXNzaWJpbGl0
eVNwbGl0R3JvdXBSb2xlIH0sCisgICAgICAgIHsgU3BsaXR0ZXJSb2xlLCBOU0FjY2Vzc2liaWxp
dHlTcGxpdHRlclJvbGUgfSwKKyAgICAgICAgeyBDb2xvcldlbGxSb2xlLCBOU0FjY2Vzc2liaWxp
dHlDb2xvcldlbGxSb2xlIH0sCisgICAgICAgIHsgR3Jvd0FyZWFSb2xlLCBOU0FjY2Vzc2liaWxp
dHlHcm93QXJlYVJvbGUgfSwKKyAgICAgICAgeyBTaGVldFJvbGUsIE5TQWNjZXNzaWJpbGl0eVNo
ZWV0Um9sZSB9LAorICAgICAgICB7IEhlbHBUYWdSb2xlLCBOU0FjY2Vzc2liaWxpdHlIZWxwVGFn
Um9sZSB9LAorICAgICAgICB7IE1hdHRlUm9sZSwgTlNBY2Nlc3NpYmlsaXR5TWF0dGVSb2xlIH0s
IAorICAgICAgICB7IFJ1bGVyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5UnVsZXJSb2xlIH0sCisgICAg
ICAgIHsgUnVsZXJNYXJrZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlSdWxlck1hcmtlclJvbGUgfSwK
KyAgICAgICAgeyBMaW5rUm9sZSwgTlNBY2Nlc3NpYmlsaXR5TGlua1JvbGUgfSwKKyAgICAgICAg
eyBEaXNjbG9zdXJlVHJpYW5nbGVSb2xlLCBOU0FjY2Vzc2liaWxpdHlEaXNjbG9zdXJlVHJpYW5n
bGVSb2xlIH0sCisgICAgICAgIHsgR3JpZFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyaWRSb2xlIH0s
CisgICAgICAgIHsgV2ViQ29yZUxpbmtSb2xlLCBOU0FjY2Vzc2liaWxpdHlMaW5rUm9sZSB9LCAK
KyAgICAgICAgeyBJbWFnZU1hcExpbmtSb2xlLCBOU0FjY2Vzc2liaWxpdHlMaW5rUm9sZSB9LAor
ICAgICAgICB7IEltYWdlTWFwUm9sZSwgQCJBWEltYWdlTWFwIiB9LAorICAgICAgICB7IExpc3RN
YXJrZXJSb2xlLCBAIkFYTGlzdE1hcmtlciIgfSwKKyAgICAgICAgeyBXZWJBcmVhUm9sZSwgQCJB
WFdlYkFyZWEiIH0sCisgICAgICAgIHsgU2VhbWxlc3NXZWJBcmVhUm9sZSwgTlNBY2Nlc3NpYmls
aXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgSGVhZGluZ1JvbGUsIEAiQVhIZWFkaW5nIiB9LAor
ICAgICAgICB7IExpc3RCb3hSb2xlLCBOU0FjY2Vzc2liaWxpdHlMaXN0Um9sZSB9LAorICAgICAg
ICB7IExpc3RCb3hPcHRpb25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlTdGF0aWNUZXh0Um9sZSB9LAor
ICAgICAgICB7IENlbGxSb2xlLCBOU0FjY2Vzc2liaWxpdHlDZWxsUm9sZSB9LAorICAgICAgICB7
IFRhYmxlSGVhZGVyQ29udGFpbmVyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisg
ICAgICAgIHsgUm93SGVhZGVyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAg
ICAgIHsgRGVmaW5pdGlvblJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAg
ICB7IERlc2NyaXB0aW9uTGlzdERldGFpbFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9
LAorICAgICAgICB7IERlc2NyaXB0aW9uTGlzdFRlcm1Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91
cFJvbGUgfSwKKyAgICAgICAgeyBTbGlkZXJUaHVtYlJvbGUsIE5TQWNjZXNzaWJpbGl0eVZhbHVl
SW5kaWNhdG9yUm9sZSB9LAorICAgICAgICB7IExhbmRtYXJrQXBwbGljYXRpb25Sb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBMYW5kbWFya0Jhbm5lclJvbGUsIE5T
QWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IExhbmRtYXJrQ29tcGxlbWVudGFy
eVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IExhbmRtYXJrQ29u
dGVudEluZm9Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBMYW5k
bWFya01haW5Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBMYW5k
bWFya05hdmlnYXRpb25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAg
eyBMYW5kbWFya1NlYXJjaFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAg
ICB7IEFwcGxpY2F0aW9uQWxlcnRSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAg
ICAgICAgeyBBcHBsaWNhdGlvbkFsZXJ0RGlhbG9nUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBS
b2xlIH0sCisgICAgICAgIHsgQXBwbGljYXRpb25EaWFsb2dSb2xlLCBOU0FjY2Vzc2liaWxpdHlH
cm91cFJvbGUgfSwKKyAgICAgICAgeyBBcHBsaWNhdGlvbkxvZ1JvbGUsIE5TQWNjZXNzaWJpbGl0
eUdyb3VwUm9sZSB9LAorICAgICAgICB7IEFwcGxpY2F0aW9uTWFycXVlZVJvbGUsIE5TQWNjZXNz
aWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IEFwcGxpY2F0aW9uU3RhdHVzUm9sZSwgTlNB
Y2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgQXBwbGljYXRpb25UaW1lclJvbGUs
IE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IERvY3VtZW50Um9sZSwgTlNB
Y2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgRG9jdW1lbnRBcnRpY2xlUm9sZSwg
TlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgRG9jdW1lbnRNYXRoUm9sZSwg
TlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgRG9jdW1lbnROb3RlUm9sZSwg
TlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgRG9jdW1lbnRSZWdpb25Sb2xl
LCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBVc2VySW50ZXJmYWNlVG9v
bHRpcFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IFRhYlJvbGUs
IE5TQWNjZXNzaWJpbGl0eVJhZGlvQnV0dG9uUm9sZSB9LAorICAgICAgICB7IFRhYkxpc3RSb2xl
LCBOU0FjY2Vzc2liaWxpdHlUYWJHcm91cFJvbGUgfSwKKyAgICAgICAgeyBUYWJQYW5lbFJvbGUs
IE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IFRyZWVSb2xlLCBOU0FjY2Vz
c2liaWxpdHlPdXRsaW5lUm9sZSB9LAorICAgICAgICB7IFRyZWVJdGVtUm9sZSwgTlNBY2Nlc3Np
YmlsaXR5Um93Um9sZSB9LAorICAgICAgICB7IExpc3RJdGVtUm9sZSwgTlNBY2Nlc3NpYmlsaXR5
R3JvdXBSb2xlIH0sCisgICAgICAgIHsgUGFyYWdyYXBoUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3Jv
dXBSb2xlIH0sCisgICAgICAgIHsgTGFiZWxSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUg
fSwKKyAgICAgICAgeyBEaXZSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAg
ICAgeyBGb3JtUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgU3Bp
bkJ1dHRvblJvbGUsIE5TQWNjZXNzaWJpbGl0eUluY3JlbWVudG9yUm9sZSB9LAorICAgICAgICB7
IEZvb3RlclJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IFRvZ2ds
ZUJ1dHRvblJvbGUsIE5TQWNjZXNzaWJpbGl0eUJ1dHRvblJvbGUgfSwKKyAgICAgICAgeyBDYW52
YXNSb2xlLCBOU0FjY2Vzc2liaWxpdHlJbWFnZVJvbGUgfSwKKyAgICAgICAgeyBTVkdSb290Um9s
ZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgTGVnZW5kUm9sZSwgTlNB
Y2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgTWF0aEVsZW1lbnRSb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlHcm91cFJvbGUgfQorICAgIH07CisgICAgQWNjZXNzaWJpbGl0eVJvbGVNYXAm
IHJvbGVNYXAgPSAqbmV3IEFjY2Vzc2liaWxpdHlSb2xlTWFwOworICAgIAorICAgIGNvbnN0IHVu
c2lnbmVkIG51bVJvbGVzID0gc2l6ZW9mKHJvbGVzKSAvIHNpemVvZihyb2xlc1swXSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVJvbGVzOyArK2kpCisgICAgICAgIHJvbGVNYXAu
c2V0KHJvbGVzW2ldLnZhbHVlLCByb2xlc1tpXS5zdHJpbmcpOworICAgIHJldHVybiByb2xlTWFw
OworfQorCitzdGF0aWMgTlNTdHJpbmcqIHJvbGVWYWx1ZVRvTlNTdHJpbmcoQWNjZXNzaWJpbGl0
eVJvbGUgdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBzdGF0aWMgY29uc3QgQWNj
ZXNzaWJpbGl0eVJvbGVNYXAmIHJvbGVNYXAgPSBjcmVhdGVBY2Nlc3NpYmlsaXR5Um9sZU1hcCgp
OworICAgIHJldHVybiByb2xlTWFwLmdldCh2YWx1ZSk7Cit9CisKKy0gKE5TU3RyaW5nKilyb2xl
Cit7CisgICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKKyAgICAgICAgcmV0dXJuIFtb
c2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNz
aWJpbGl0eVJvbGVBdHRyaWJ1dGVdOworICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBtX29i
amVjdC0+cm9sZVZhbHVlKCk7CisgICAgaWYgKHJvbGUgPT0gQ2FudmFzUm9sZSAmJiBtX29iamVj
dC0+Y2FudmFzSGFzRmFsbGJhY2tDb250ZW50KCkpCisgICAgICAgIHJvbGUgPSBHcm91cFJvbGU7
CisgICAgTlNTdHJpbmcqIHN0cmluZyA9IHJvbGVWYWx1ZVRvTlNTdHJpbmcocm9sZSk7CisgICAg
aWYgKHN0cmluZyAhPSBuaWwpCisgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgcmV0dXJuIE5T
QWNjZXNzaWJpbGl0eVVua25vd25Sb2xlOworfQorCistIChOU1N0cmluZyopc3Vicm9sZQorewor
ICAgIGlmIChtX29iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCisgICAgICAgIHJldHVybiBOU0Fj
Y2Vzc2liaWxpdHlTZWN1cmVUZXh0RmllbGRTdWJyb2xlOworICAgIGlmIChtX29iamVjdC0+aXNT
ZWFyY2hGaWVsZCgpKQorICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRT
dWJyb2xlOworICAgIAorICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpIHsKKyAgICAg
ICAgTlNWaWV3KiBhdHRhY2hWaWV3ID0gW3NlbGYgYXR0YWNobWVudFZpZXddOworICAgICAgICBp
ZiAoW1thdHRhY2hWaWV3IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10gY29udGFpbnNPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5U3Vicm9sZUF0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIHJldHVy
biBbYXR0YWNoVmlldyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5
U3Vicm9sZUF0dHJpYnV0ZV07CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fb2Jq
ZWN0LT5pc1NwaW5CdXR0b25QYXJ0KCkpIHsKKyAgICAgICAgaWYgKHRvQWNjZXNzaWJpbGl0eVNw
aW5CdXR0b25QYXJ0KG1fb2JqZWN0KS0+aXNJbmNyZW1lbnRvcigpKQorICAgICAgICAgICAgcmV0
dXJuIE5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEFycm93U3Vicm9sZTsKKworICAgICAgICByZXR1
cm4gTlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QXJyb3dTdWJyb2xlOworICAgIH0KKyAgICAKKyAg
ICBpZiAobV9vYmplY3QtPmlzRmlsZVVwbG9hZEJ1dHRvbigpKQorICAgICAgICByZXR1cm4gQCJB
WEZpbGVVcGxvYWRCdXR0b24iOworICAgIAorICAgIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgp
KQorICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5T3V0bGluZVJvd1N1YnJvbGU7CisgICAg
CisgICAgaWYgKG1fb2JqZWN0LT5pc0xpc3QoKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5TGlz
dCogbGlzdE9iamVjdCA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Kj4obV9vYmplY3Qp
OworICAgICAgICBpZiAobGlzdE9iamVjdC0+aXNVbm9yZGVyZWRMaXN0KCkgfHwgbGlzdE9iamVj
dC0+aXNPcmRlcmVkTGlzdCgpKQorICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUNv
bnRlbnRMaXN0U3Vicm9sZTsKKyAgICAgICAgaWYgKGxpc3RPYmplY3QtPmlzRGVzY3JpcHRpb25M
aXN0KCkpCisgICAgICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25MaXN0
U3Vicm9sZTsKKyAgICB9CisgICAgCisgICAgLy8gQVJJQSBjb250ZW50IHN1YnJvbGVzLgorICAg
IHN3aXRjaCAobV9vYmplY3QtPnJvbGVWYWx1ZSgpKSB7CisgICAgICAgIGNhc2UgTGFuZG1hcmtB
cHBsaWNhdGlvblJvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWExhbmRtYXJrQXBwbGljYXRp
b24iOworICAgICAgICBjYXNlIExhbmRtYXJrQmFubmVyUm9sZToKKyAgICAgICAgICAgIHJldHVy
biBAIkFYTGFuZG1hcmtCYW5uZXIiOworICAgICAgICBjYXNlIExhbmRtYXJrQ29tcGxlbWVudGFy
eVJvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWExhbmRtYXJrQ29tcGxlbWVudGFyeSI7Cisg
ICAgICAgIC8vIEZvb3RlciByb2xlcyBzaG91bGQgYXBwZWFyIGFzIGNvbnRlbnQgaW5mbyB0eXBl
cy4KKyAgICAgICAgY2FzZSBGb290ZXJSb2xlOgorICAgICAgICBjYXNlIExhbmRtYXJrQ29udGVu
dEluZm9Sb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya0NvbnRlbnRJbmZvIjsK
KyAgICAgICAgY2FzZSBMYW5kbWFya01haW5Sb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhM
YW5kbWFya01haW4iOworICAgICAgICBjYXNlIExhbmRtYXJrTmF2aWdhdGlvblJvbGU6CisgICAg
ICAgICAgICByZXR1cm4gQCJBWExhbmRtYXJrTmF2aWdhdGlvbiI7CisgICAgICAgIGNhc2UgTGFu
ZG1hcmtTZWFyY2hSb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya1NlYXJjaCI7
CisgICAgICAgIGNhc2UgQXBwbGljYXRpb25BbGVydFJvbGU6CisgICAgICAgICAgICByZXR1cm4g
QCJBWEFwcGxpY2F0aW9uQWxlcnQiOworICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQWxlcnREaWFs
b2dSb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlvbkFsZXJ0RGlhbG9nIjsK
KyAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkRpYWxvZ1JvbGU6CisgICAgICAgICAgICByZXR1cm4g
QCJBWEFwcGxpY2F0aW9uRGlhbG9nIjsKKyAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkxvZ1JvbGU6
CisgICAgICAgICAgICByZXR1cm4gQCJBWEFwcGxpY2F0aW9uTG9nIjsKKyAgICAgICAgY2FzZSBB
cHBsaWNhdGlvbk1hcnF1ZWVSb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlv
bk1hcnF1ZWUiOworICAgICAgICBjYXNlIEFwcGxpY2F0aW9uU3RhdHVzUm9sZToKKyAgICAgICAg
ICAgIHJldHVybiBAIkFYQXBwbGljYXRpb25TdGF0dXMiOworICAgICAgICBjYXNlIEFwcGxpY2F0
aW9uVGltZXJSb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlvblRpbWVyIjsK
KyAgICAgICAgY2FzZSBEb2N1bWVudFJvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWERvY3Vt
ZW50IjsKKyAgICAgICAgY2FzZSBEb2N1bWVudEFydGljbGVSb2xlOgorICAgICAgICAgICAgcmV0
dXJuIEAiQVhEb2N1bWVudEFydGljbGUiOworICAgICAgICBjYXNlIERvY3VtZW50TWF0aFJvbGU6
CisgICAgICAgICAgICByZXR1cm4gQCJBWERvY3VtZW50TWF0aCI7CisgICAgICAgIGNhc2UgRG9j
dW1lbnROb3RlUm9sZToKKyAgICAgICAgICAgIHJldHVybiBAIkFYRG9jdW1lbnROb3RlIjsKKyAg
ICAgICAgY2FzZSBEb2N1bWVudFJlZ2lvblJvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWERv
Y3VtZW50UmVnaW9uIjsKKyAgICAgICAgY2FzZSBVc2VySW50ZXJmYWNlVG9vbHRpcFJvbGU6Cisg
ICAgICAgICAgICByZXR1cm4gQCJBWFVzZXJJbnRlcmZhY2VUb29sdGlwIjsKKyAgICAgICAgY2Fz
ZSBUYWJQYW5lbFJvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWFRhYlBhbmVsIjsKKyAgICAg
ICAgY2FzZSBEZWZpbml0aW9uUm9sZToKKyAgICAgICAgICAgIHJldHVybiBAIkFYRGVmaW5pdGlv
biI7CisgICAgICAgIGNhc2UgRGVzY3JpcHRpb25MaXN0VGVybVJvbGU6CisgICAgICAgICAgICBy
ZXR1cm4gQCJBWFRlcm0iOworICAgICAgICBjYXNlIERlc2NyaXB0aW9uTGlzdERldGFpbFJvbGU6
CisgICAgICAgICAgICByZXR1cm4gQCJBWERlc2NyaXB0aW9uIjsKKyAgICAgICAgLy8gRGVmYXVs
dCBkb2Vzbid0IHJldHVybiBhbnl0aGluZywgc28gcm9sZXMgZGVmaW5lZCBiZWxvdyBjYW4gYmUg
Y2hvc2VuLgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IAorICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0gTWF0aEVsZW1lbnRSb2xlKSB7Cisg
ICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biBAIkFYTWF0aEZyYWN0aW9uIjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhGZW5jZWQo
KSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aEZlbmNlZCI7CisgICAgICAgIGlmIChtX29i
amVjdC0+aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSkKKyAgICAgICAgICAgIHJldHVybiBA
IkFYTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0IjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01h
dGhSb3coKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFJvdyI7CisgICAgICAgIGlmICht
X29iamVjdC0+aXNNYXRoVW5kZXJPdmVyKCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhV
bmRlck92ZXIiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFNxdWFyZVJvb3QoKSkKKyAg
ICAgICAgICAgIHJldHVybiBAIkFYTWF0aFNxdWFyZVJvb3QiOworICAgICAgICBpZiAobV9vYmpl
Y3QtPmlzTWF0aFJvb3QoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFJvb3QiOworICAg
ICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFY
TWF0aFRleHQiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aE51bWJlcigpKQorICAgICAg
ICAgICAgcmV0dXJuIEAiQVhNYXRoTnVtYmVyIjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01h
dGhJZGVudGlmaWVyKCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhJZGVudGlmaWVyIjsK
KyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJu
IEAiQVhNYXRoVGFibGUiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRhYmxlUm93KCkp
CisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhUYWJsZVJvdyI7CisgICAgICAgIGlmIChtX29i
amVjdC0+aXNNYXRoVGFibGVDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhUYWJs
ZUNlbGwiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aEZlbmNlT3BlcmF0b3IoKSkKKyAg
ICAgICAgICAgIHJldHVybiBAIkFYTWF0aEZlbmNlT3BlcmF0b3IiOworICAgICAgICBpZiAobV9v
YmplY3QtPmlzTWF0aFNlcGFyYXRvck9wZXJhdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gQCJB
WE1hdGhTZXBhcmF0b3JPcGVyYXRvciI7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoT3Bl
cmF0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aE9wZXJhdG9yIjsKKyAgICB9Cisg
ICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc01lZGlhVGltZWxpbmUoKSkKKyAgICAgICAgcmV0dXJu
IE5TQWNjZXNzaWJpbGl0eVRpbWVsaW5lU3Vicm9sZTsKKwogICAgIHJldHVybiBuaWw7CiB9CiAK
LS0gKEFjY2Vzc2liaWxpdHlPYmplY3QqKWFjY2Vzc2liaWxpdHlPYmplY3QKKy0gKE5TU3RyaW5n
Kilyb2xlRGVzY3JpcHRpb24KIHsKLSAgICByZXR1cm4gbV9vYmplY3Q7CisgICAgaWYgKCFtX29i
amVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIGF0dGFjaG1lbnRzIGhhdmUgdGhl
IEFYSW1hZ2Ugcm9sZSwgYnV0IGEgZGlmZmVyZW50IHN1YnJvbGUKKyAgICBpZiAobV9vYmplY3Qt
PmlzQXR0YWNobWVudCgpKQorICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9u
QXR0cmlidXRlXTsKKyAgICAKKyAgICBOU1N0cmluZyogYXhSb2xlID0gW3NlbGYgcm9sZV07Cisg
ICAgCisgICAgaWYgKFtheFJvbGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUdyb3Vw
Um9sZV0pIHsKKyAgICAgICAgc3dpdGNoIChtX29iamVjdC0+cm9sZVZhbHVlKCkpIHsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVJv
bGVEZXNjcmlwdGlvbihOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUsIFtzZWxmIHN1YnJvbGVdKTsK
KyAgICAgICAgICAgIGNhc2UgTGFuZG1hcmtBcHBsaWNhdGlvblJvbGU6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtBcHBsaWNhdGlv
biIpOworICAgICAgICAgICAgY2FzZSBMYW5kbWFya0Jhbm5lclJvbGU6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtCYW5uZXIiKTsK
KyAgICAgICAgICAgIGNhc2UgTGFuZG1hcmtDb21wbGVtZW50YXJ5Um9sZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFya0NvbXBsZW1l
bnRhcnkiKTsKKyAgICAgICAgICAgIGNhc2UgTGFuZG1hcmtDb250ZW50SW5mb1JvbGU6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtD
b250ZW50SW5mbyIpOworICAgICAgICAgICAgY2FzZSBMYW5kbWFya01haW5Sb2xlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJrTWFp
biIpOworICAgICAgICAgICAgY2FzZSBMYW5kbWFya05hdmlnYXRpb25Sb2xlOgorICAgICAgICAg
ICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJrTmF2aWdh
dGlvbiIpOworICAgICAgICAgICAgY2FzZSBMYW5kbWFya1NlYXJjaFJvbGU6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtTZWFyY2gi
KTsKKyAgICAgICAgICAgIGNhc2UgQXBwbGljYXRpb25BbGVydFJvbGU6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBwbGljYXRpb25BbGVydCIp
OworICAgICAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkFsZXJ0RGlhbG9nUm9sZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFBcHBsaWNhdGlvbkFs
ZXJ0RGlhbG9nIik7CisgICAgICAgICAgICBjYXNlIEFwcGxpY2F0aW9uRGlhbG9nUm9sZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFBcHBsaWNh
dGlvbkRpYWxvZyIpOworICAgICAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkxvZ1JvbGU6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBwbGljYXRp
b25Mb2ciKTsKKyAgICAgICAgICAgIGNhc2UgQXBwbGljYXRpb25NYXJxdWVlUm9sZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFBcHBsaWNhdGlv
bk1hcnF1ZWUiKTsKKyAgICAgICAgICAgIGNhc2UgQXBwbGljYXRpb25TdGF0dXNSb2xlOgorICAg
ICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0
aW9uU3RhdHVzIik7CisgICAgICAgICAgICBjYXNlIEFwcGxpY2F0aW9uVGltZXJSb2xlOgorICAg
ICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0
aW9uVGltZXIiKTsKKyAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRSb2xlOgorICAgICAgICAgICAg
ICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQURvY3VtZW50Iik7CisgICAg
ICAgICAgICBjYXNlIERvY3VtZW50QXJ0aWNsZVJvbGU6CisgICAgICAgICAgICAgICAgcmV0dXJu
IEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBRG9jdW1lbnRBcnRpY2xlIik7CisgICAgICAg
ICAgICBjYXNlIERvY3VtZW50TWF0aFJvbGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJ
QUNvbnRlbnRHcm91cFRleHQoQCJBUklBRG9jdW1lbnRNYXRoIik7CisgICAgICAgICAgICBjYXNl
IERvY3VtZW50Tm90ZVJvbGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRH
cm91cFRleHQoQCJBUklBRG9jdW1lbnROb3RlIik7CisgICAgICAgICAgICBjYXNlIERvY3VtZW50
UmVnaW9uUm9sZToKKyAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4
dChAIkFSSUFEb2N1bWVudFJlZ2lvbiIpOworICAgICAgICAgICAgY2FzZSBVc2VySW50ZXJmYWNl
VG9vbHRpcFJvbGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRl
eHQoQCJBUklBVXNlckludGVyZmFjZVRvb2x0aXAiKTsKKyAgICAgICAgICAgIGNhc2UgVGFiUGFu
ZWxSb2xlOgorICAgICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAi
QVJJQVRhYlBhbmVsIik7CisgICAgICAgICAgICBjYXNlIERlZmluaXRpb25Sb2xlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBBWERlZmluaXRpb25UZXh0KCk7CisgICAgICAgICAgICBjYXNlIERl
c2NyaXB0aW9uTGlzdFRlcm1Sb2xlOgorICAgICAgICAgICAgICAgIHJldHVybiBBWERlc2NyaXB0
aW9uTGlzdFRlcm1UZXh0KCk7CisgICAgICAgICAgICBjYXNlIERlc2NyaXB0aW9uTGlzdERldGFp
bFJvbGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEFYRGVzY3JpcHRpb25MaXN0RGV0YWlsVGV4
dCgpOworICAgICAgICAgICAgY2FzZSBGb290ZXJSb2xlOgorICAgICAgICAgICAgICAgIHJldHVy
biBBWEZvb3RlclJvbGVEZXNjcmlwdGlvblRleHQoKTsKKyAgICAgICAgfQorICAgIH0gICAgICAg
IAorICAgIAorICAgIGlmIChbYXhSb2xlIGlzRXF1YWxUb1N0cmluZzpAIkFYV2ViQXJlYSJdKQor
ICAgICAgICByZXR1cm4gQVhXZWJBcmVhVGV4dCgpOworICAgIAorICAgIGlmIChbYXhSb2xlIGlz
RXF1YWxUb1N0cmluZzpAIkFYTGluayJdKQorICAgICAgICByZXR1cm4gQVhMaW5rVGV4dCgpOwor
ICAgIAorICAgIGlmIChbYXhSb2xlIGlzRXF1YWxUb1N0cmluZzpAIkFYTGlzdE1hcmtlciJdKQor
ICAgICAgICByZXR1cm4gQVhMaXN0TWFya2VyVGV4dCgpOworICAgIAorICAgIGlmIChbYXhSb2xl
IGlzRXF1YWxUb1N0cmluZzpAIkFYSW1hZ2VNYXAiXSkKKyAgICAgICAgcmV0dXJuIEFYSW1hZ2VN
YXBUZXh0KCk7CisKKyAgICBpZiAoW2F4Um9sZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEhlYWRpbmci
XSkKKyAgICAgICAgcmV0dXJuIEFYSGVhZGluZ1RleHQoKTsKKworICAgIGlmIChtX29iamVjdC0+
aXNGaWxlVXBsb2FkQnV0dG9uKCkpCisgICAgICAgIHJldHVybiBBWEZpbGVVcGxvYWRCdXR0b25U
ZXh0KCk7CisgICAgCisgICAgLy8gQXBwS2l0IGFsc28gcmV0dXJucyBBWFRhYiBmb3IgdGhlIHJv
bGUgZGVzY3JpcHRpb24gZm9yIGEgdGFiIGl0ZW0uCisgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkl0
ZW0oKSkKKyAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbihAIkFY
VGFiIiwgbmlsKTsKKyAgICAKKyAgICAvLyBXZSBzaG91bGQgdHJ5IHRoZSBzeXN0ZW0gZGVmYXVs
dCByb2xlIGRlc2NyaXB0aW9uIGZvciBhbGwgb3RoZXIgcm9sZXMuCisgICAgLy8gSWYgd2UgZ2V0
IHRoZSBzYW1lIHN0cmluZyBiYWNrLCB0aGVuIGFzIGEgbGFzdCByZXNvcnQsIHJldHVybiB1bmtu
b3duLgorICAgIE5TU3RyaW5nKiBkZWZhdWx0Um9sZURlc2NyaXB0aW9uID0gTlNBY2Nlc3NpYmls
aXR5Um9sZURlc2NyaXB0aW9uKGF4Um9sZSwgW3NlbGYgc3Vicm9sZV0pOworICAgIAorICAgIC8v
IE9uIGVhcmxpZXIgTWFjIHZlcnNpb25zIChMaW9uKSwgdXNpbmcgYSBub24tc3RhbmRhcmQgc3Vi
cm9sZSB3b3VsZCByZXN1bHQgaW4gYSByb2xlIGRlc2NyaXB0aW9uCisgICAgLy8gYmVpbmcgcmV0
dXJuZWQgdGhhdCBsb29rZWQgbGlrZSBBWFJvbGU6QVhTdWJyb2xlLiBUbyBtYWtlIGFsbCBwbGF0
Zm9ybXMgaGF2ZSB0aGUgc2FtZSByb2xlIGRlc2NyaXB0aW9ucworICAgIC8vIHdlIHNob3VsZCBm
YWxsYmFjayBvbiBhIHJvbGUgZGVzY3JpcHRpb24gaWdub3JpbmcgdGhlIHN1YnJvbGUgaW4gdGhl
c2UgY2FzZXMuCisgICAgaWYgKFtkZWZhdWx0Um9sZURlc2NyaXB0aW9uIGlzRXF1YWxUb1N0cmlu
ZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOiVAIiwgYXhSb2xlLCBbc2VsZiBzdWJy
b2xlXV1dKQorICAgICAgICBkZWZhdWx0Um9sZURlc2NyaXB0aW9uID0gTlNBY2Nlc3NpYmlsaXR5
Um9sZURlc2NyaXB0aW9uKGF4Um9sZSwgbmlsKTsKKyAgICAKKyAgICBpZiAoIVtkZWZhdWx0Um9s
ZURlc2NyaXB0aW9uIGlzRXF1YWxUb1N0cmluZzpheFJvbGVdKQorICAgICAgICByZXR1cm4gZGVm
YXVsdFJvbGVEZXNjcmlwdGlvbjsKKworICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVz
Y3JpcHRpb24oTlNBY2Nlc3NpYmlsaXR5VW5rbm93blJvbGUsIG5pbCk7Cit9CisKKy0gKGlkKXNj
cm9sbFZpZXdQYXJlbnQKK3sKKyAgICBpZiAoIW1fb2JqZWN0IHx8ICFtX29iamVjdC0+aXNBY2Nl
c3NpYmlsaXR5U2Nyb2xsVmlldygpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIC8v
IElmIHRoaXMgc2Nyb2xsIHZpZXcgcHJvdmlkZXMgaXQncyBwYXJlbnQgb2JqZWN0IChiZWNhdXNl
IGl0J3MgYSBzdWItZnJhbWUpLCB0aGVuCisgICAgLy8gd2Ugc2hvdWxkIG5vdCBmaW5kIHRoZSBy
ZW1vdGVBY2Nlc3NpYmlsaXR5UGFyZW50LgorICAgIGlmIChtX29iamVjdC0+cGFyZW50T2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eVNjcm9sbFZp
ZXcqIHNjcm9sbFZpZXcgPSB0b0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KG1fb2JqZWN0KTsKKyAg
ICBTY3JvbGxWaWV3KiBzY3JvbGwgPSBzY3JvbGxWaWV3LT5zY3JvbGxWaWV3KCk7CisgICAgaWYg
KCFzY3JvbGwpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgaWYgKHNjcm9sbC0+cGxh
dGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFu
Y2VzdG9yKHNjcm9sbC0+cGxhdGZvcm1XaWRnZXQoKSk7CisKKyAgICByZXR1cm4gW3NlbGYgcmVt
b3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF07CiB9CiAKIC8vIEZJWE1FOiBEaWZmZXJlbnQg
a2luZHMgb2YgZWxlbWVudHMgYXJlIHB1dHRpbmcgdGhlIHRpdGxlIHRhZyB0byB1c2UgaW4gZGlm
ZmVyZW50CkBAIC0yMjYsNiArMjAzMywxNTQzIEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAgICAg
cmV0dXJuIFtOU1N0cmluZyBzdHJpbmddOwogfQogCisvLyBGSVhNRTogc3BsaXQgdXAgdGhpcyBm
dW5jdGlvbiBpbiBhIGJldHRlciB3YXkuICAKKy8vIHN1Z2dlc3Rpb25zOiBVc2UgYSBoYXNoIHRh
YmxlIHRoYXQgbWFwcyBhdHRyaWJ1dGUgbmFtZXMgdG8gZnVuY3Rpb24gY2FsbHMsCisvLyBvciBt
YXliZSBwb2ludGVycyB0byBtZW1iZXIgZnVuY3Rpb25zCistIChpZClhY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCit7CisgICAgaWYgKCFbc2VsZiB1
cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVJvbGVB
dHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW3NlbGYgcm9sZV07CisKKyAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTdWJyb2xlQXR0cmlidXRl
XSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIHN1YnJvbGVdOworCisgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmli
dXRlXSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIHJvbGVEZXNjcmlwdGlvbl07CisKKyAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRy
aWJ1dGVdKSB7CisKKyAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiB0aGUgcGFyZW50IG9mIHRo
ZSBBWFdlYkFyZWEsIGlmIHRoaXMgaXMgYSB3ZWIgYXJlYS4KKyAgICAgICAgaWQgc2Nyb2xsVmll
d1BhcmVudCA9IFtzZWxmIHNjcm9sbFZpZXdQYXJlbnRdOworICAgICAgICBpZiAoc2Nyb2xsVmll
d1BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxWaWV3UGFyZW50OworICAgICAgICAK
KyAgICAgICAgLy8gVHJlZSBpdGVtIChjaGFuZ2VkIHRvIEFYUm93cykgY2FuIG9ubHkgcmVwb3J0
IHRoZSB0cmVlIChBWE91dGxpbmUpIGFzIGl0cyBwYXJlbnQuCisgICAgICAgIGlmIChtX29iamVj
dC0+aXNUcmVlSXRlbSgpKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJl
bnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgICAgICAgICB3aGls
ZSAocGFyZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNUcmVlKCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKKyAgICAgICAgICAgICAg
ICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJl
bnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgICAgIGlmICghcGFy
ZW50KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICAvLyBJbiBXZWJLaXQxLCB0
aGUgc2Nyb2xsIHZpZXcgaXMgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSAodGhlIGF0dGFjaG1lbnQg
dmlldyksIHNvIHRoZSBwYXJlbnQKKyAgICAgICAgLy8gc2hvdWxkIGJlIHJlcG9ydGVkIGRpcmVj
dGx5IGFzIHN1Y2guCisgICAgICAgIGlmIChtX29iamVjdC0+aXNXZWJBcmVhKCkgJiYgcGFyZW50
LT5pc0F0dGFjaG1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBbcGFyZW50LT53cmFwcGVyKCkg
YXR0YWNobWVudFZpZXddOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBl
cigpOworICAgIH0KKworICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5T
QWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkgeworICAgICAgICBpZiAobV9vYmplY3Qt
PmNoaWxkcmVuKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOU0FycmF5KiBjaGlsZHJlbiA9
IFtzZWxmIHJlbmRlcldpZGdldENoaWxkcmVuXTsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbiAh
PSBuaWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVGhlIHRyZWUncyAoQVhPdXRsaW5lKSBjaGlsZHJlbiBhcmUgc3VwcG9zZWQgdG8g
YmUgaXRzIHJvd3MgYW5kIGNvbHVtbnMuCisgICAgICAgIC8vIFRoZSBBUklBIHNwZWMgZG9lc24n
dCBoYXZlIGNvbHVtbnMsIHNvIHdlIGp1c3QgbmVlZCByb3dzLgorICAgICAgICBpZiAobV9vYmpl
Y3QtPmlzVHJlZSgpKQorICAgICAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXTsKKworICAgICAgICAvLyBB
IHRyZWUgaXRlbSBzaG91bGQgb25seSBleHBvc2UgaXRzIGNvbnRlbnQgYXMgaXRzIGNoaWxkcmVu
IChub3QgaXRzIHJvd3MpCisgICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKSB7Cisg
ICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgY29udGVudENvcHk7CisgICAgICAgICAgICBtX29iamVjdC0+YXJpYVRyZWVJdGVtQ29udGVu
dChjb250ZW50Q29weSk7CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjb250
ZW50Q29weSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBjb252ZXJ0VG9O
U0FycmF5KG1fb2JqZWN0LT5jaGlsZHJlbigpKTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJl
bkF0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0xpc3RCb3goKSkgeworICAg
ICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
IHNlbGVjdGVkQ2hpbGRyZW5Db3B5OworICAgICAgICAgICAgbV9vYmplY3QtPnNlbGVjdGVkQ2hp
bGRyZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b05TQXJyYXkoc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBuaWw7CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IE5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKKyAgICAgICAg
aWYgKG1fb2JqZWN0LT5pc0xpc3RCb3goKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHZpc2libGVDaGlsZHJlbkNvcHk7Cisg
ICAgICAgICAgICBtX29iamVjdC0+dmlzaWJsZUNoaWxkcmVuKHZpc2libGVDaGlsZHJlbkNvcHkp
OworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkodmlzaWJsZUNoaWxkcmVuQ29w
eSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTGlzdCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vz
c2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV07CisKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9
CisgICAgCisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc1dlYkFyZWEoKSkgeworICAgICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMaW5rVUlFbGVtZW50cyJdKSB7
CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3IgbGlua3M7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Kj4obV9vYmplY3QpLT5nZXREb2N1bWVudExpbmtzKGxpbmtzKTsKKyAgICAgICAgICAg
IHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGxpbmtzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMb2FkZWQiXSkKKyAgICAgICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmlzTG9hZGVkKCldOwor
ICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMYXlvdXRDb3Vu
dCJdKQorICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0
LT5sYXlvdXRDb3VudCgpXTsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlMb2FkaW5nUHJvZ3Jlc3NBdHRyaWJ1dGVdKQorICAgICAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOm1fb2JqZWN0LT5lc3RpbWF0ZWRM
b2FkaW5nUHJvZ3Jlc3MoKV07CisgICAgfQorICAgIAorICAgIGlmIChtX29iamVjdC0+aXNUZXh0
Q29udHJvbCgpKSB7CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
IE5TQWNjZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZV0pIHsKKyAgICAgICAg
ICAgIGludCBsZW5ndGggPSBtX29iamVjdC0+dGV4dExlbmd0aCgpOworICAgICAgICAgICAgaWYg
KGxlbmd0aCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50Omxlbmd0aF07CisgICAgICAgIH0K
KyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmls
aXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlXSkgeworICAgICAgICAgICAgU3RyaW5nIHNlbGVjdGVk
VGV4dCA9IG1fb2JqZWN0LT5zZWxlY3RlZFRleHQoKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rl
ZFRleHQuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAg
IHJldHVybiAoTlNTdHJpbmcqKXNlbGVjdGVkVGV4dDsKKyAgICAgICAgfQorICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRl
eHRSYW5nZUF0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5n
ZSA9IG1fb2JqZWN0LT5zZWxlY3RlZFRleHRSYW5nZSgpOworICAgICAgICAgICAgaWYgKHRleHRS
YW5nZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRo
UmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldOworICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZh
bHVlV2l0aFJhbmdlOk5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0
aCldOworICAgICAgICB9CisgICAgICAgIC8vIFRPRE86IEdldCBhY3R1YWwgdmlzaWJsZSByYW5n
ZS4gPHJkYXI6Ly9wcm9ibGVtLzQ3MTIxMDE+CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJp
YnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gbV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpID8g
bmlsIDogW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKDAsIG1fb2JqZWN0LT50
ZXh0TGVuZ3RoKCkpXTsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzogTlNBY2Nlc3NpYmlsaXR5SW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlXSkgewor
ICAgICAgICAgICAgLy8gaWYgc2VsZWN0aW9uRW5kID4gMCwgdGhlbiB0aGVyZSBpcyBzZWxlY3Rl
ZCB0ZXh0IGFuZCB0aGlzIHF1ZXN0aW9uIHNob3VsZCBub3QgYmUgYW5zd2VyZWQKKyAgICAgICAg
ICAgIGlmIChtX29iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkgfHwgbV9vYmplY3QtPnNlbGVjdGlv
bkVuZCgpID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBmb2N1c2VkT2JqZWN0ID0gbV9vYmplY3QtPmZvY3VzZWRVSUVs
ZW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChmb2N1c2VkT2JqZWN0ICE9IG1fb2JqZWN0KQorICAg
ICAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBm
b2N1c2VkUG9zaXRpb24gPSBmb2N1c2VkT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChm
b2N1c2VkT2JqZWN0LT5zZWxlY3Rpb25TdGFydCgpLCB0cnVlKTsKKyAgICAgICAgICAgIGludCBs
aW5lTnVtYmVyID0gbV9vYmplY3QtPmxpbmVGb3JQb3NpdGlvbihmb2N1c2VkUG9zaXRpb24pOwor
ICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpsaW5lTnVt
YmVyXTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlVUkxBdHRyaWJ1dGVdKSB7CisgICAgICAgIEtV
UkwgdXJsID0gbV9vYmplY3QtPnVybCgpOworICAgICAgICBpZiAodXJsLmlzTnVsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIChOU1VSTCopdXJsOworICAgIH0K
KworICAgIGlmIChtX29iamVjdC0+aXNTcGluQnV0dG9uKCkpIHsKKyAgICAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmNyZW1lbnRCdXR0b25B
dHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIHRvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24o
bV9vYmplY3QpLT5pbmNyZW1lbnRCdXR0b24oKS0+d3JhcHBlcigpOworICAgICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEJ1dHRv
bkF0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRv
bihtX29iamVjdCktPmRlY3JlbWVudEJ1dHRvbigpLT53cmFwcGVyKCk7CisgICAgfQorICAgIAor
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhWaXNpdGVkIl0pCisg
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IG1fb2JqZWN0LT5pc1Zpc2l0
ZWQoKV07CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5VGl0bGVBdHRyaWJ1dGVdKSB7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNB
dHRhY2htZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChbW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eVRpdGxlQXR0cmlidXRlXSkgCisgICAgICAgICAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2ht
ZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVRpdGxl
QXR0cmlidXRlXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFtzZWxmIGFj
Y2Vzc2liaWxpdHlUaXRsZV07CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXSkgewor
ICAgICAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKSB7CisgICAgICAgICAgICBpZiAo
W1tbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSBjb250
YWluc09iamVjdDpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV0pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gW3NlbGYgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uXTsKKyAgICB9
CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxp
dHlWYWx1ZUF0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQo
KSkgeworICAgICAgICAgICAgaWYgKFtbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lc10gY29udGFpbnNPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRy
aWJ1dGVdKSAKKyAgICAgICAgICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVd
OworICAgICAgICB9CisgICAgICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNSYW5nZVZhbHVlKCkp
CisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDptX29iamVjdC0+
dmFsdWVGb3JSYW5nZSgpXTsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBT
bGlkZXJUaHVtYlJvbGUpCisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhG
bG9hdDptX29iamVjdC0+cGFyZW50T2JqZWN0KCktPnZhbHVlRm9yUmFuZ2UoKV07CisgICAgICAg
IGlmIChtX29iamVjdC0+aXNIZWFkaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVy
IG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPmhlYWRpbmdMZXZlbCgpXTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChtX29iamVjdC0+aXNDaGVja2JveE9yUmFkaW8oKSkgeworICAgICAgICAgICAgc3dp
dGNoIChtX29iamVjdC0+Y2hlY2tib3hPclJhZGlvVmFsdWUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBCdXR0b25TdGF0ZU9mZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhJbnQ6MF07CisgICAgICAgICAgICBjYXNlIEJ1dHRvblN0YXRlT246CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OjFdOworICAgICAgICAgICAgY2Fz
ZSBCdXR0b25TdGF0ZU1peGVkOgorICAgICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDoyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIHJh
ZGlvIGdyb3VwcyByZXR1cm4gdGhlIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbiBhcyB0aGUgQVhWYWx1
ZQorICAgICAgICBpZiAobV9vYmplY3QtPmlzUmFkaW9Hcm91cCgpKSB7CisgICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiByYWRpb0J1dHRvbiA9IG1fb2JqZWN0LT5zZWxlY3RlZFJhZGlv
QnV0dG9uKCk7CisgICAgICAgICAgICBpZiAoIXJhZGlvQnV0dG9uKQorICAgICAgICAgICAgICAg
IHJldHVybiBuaWw7CisgICAgICAgICAgICByZXR1cm4gcmFkaW9CdXR0b24tPndyYXBwZXIoKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkxpc3QoKSkg
eworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdGFiSXRlbSA9IG1fb2JqZWN0LT5z
ZWxlY3RlZFRhYkl0ZW0oKTsKKyAgICAgICAgICAgIGlmICghdGFiSXRlbSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgcmV0dXJuIHRhYkl0ZW0tPndyYXBwZXIoKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkl0ZW0oKSkK
KyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+aXNT
ZWxlY3RlZCgpXTsKKworICAgICAgICBpZiAobV9vYmplY3QtPmlzQ29sb3JXZWxsKCkpIHsKKyAg
ICAgICAgICAgIGludCByLCBnLCBiOworICAgICAgICAgICAgbV9vYmplY3QtPmNvbG9yVmFsdWUo
ciwgZywgYik7CisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIsIHIgLyAyNTUuLCBnIC8gMjU1LiwgYiAvIDI1NS5d
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9vYmplY3QtPnN0cmluZ1Zh
bHVlKCk7CisgICAgfQorCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzog
TlNBY2Nlc3NpYmlsaXR5TWluVmFsdWVBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TTnVt
YmVyIG51bWJlcldpdGhGbG9hdDptX29iamVjdC0+bWluVmFsdWVGb3JSYW5nZSgpXTsKKworICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eU1heFZh
bHVlQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
bV9vYmplY3QtPm1heFZhbHVlRm9yUmFuZ2UoKV07CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlIZWxwQXR0cmlidXRlXSkKKyAgICAgICAg
cmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlIZWxwVGV4dF07CisKKyAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlXSkK
KyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogbV9vYmplY3QtPmlzRm9j
dXNlZCgpXTsKKworICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNj
ZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhCb29sOiBtX29iamVjdC0+aXNFbmFibGVkKCldOworCisgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZV0pIHsK
KyAgICAgICAgSW50U2l6ZSBzID0gbV9vYmplY3QtPnBpeGVsU25hcHBlZFNpemUoKTsKKyAgICAg
ICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFNpemU6IE5TTWFrZVNpemUocy53aWR0aCgpLCBz
LmhlaWdodCgpKV07CisgICAgfQorCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzogTlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4g
W3NlbGYgcG9zaXRpb25dOworCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzogTlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlXSB8fAorICAgICAgICBbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0
cmlidXRlXSkgeworICAgICAgICAKKyAgICAgICAgaWQgcmVtb3RlUGFyZW50ID0gW3NlbGYgcmVt
b3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF07CisgICAgICAgIGlmIChyZW1vdGVQYXJlbnQp
CisgICAgICAgICAgICByZXR1cm4gW3JlbW90ZVBhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6YXR0cmlidXRlTmFtZV07CisgICAgICAgIAorICAgICAgICBGcmFtZVZpZXcqIGZ2ID0g
bV9vYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisgICAgICAgIGlmIChmdikKKyAgICAgICAg
ICAgIHJldHVybiBbZnYtPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XTsKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGVdKSB7CisgICAgICAgIEF0b21pY1N0
cmluZyBhY2Nlc3NLZXkgPSBtX29iamVjdC0+YWNjZXNzS2V5KCk7CisgICAgICAgIGlmIChhY2Nl
c3NLZXkuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4g
YWNjZXNzS2V5OworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRhYnNBdHRyaWJ1dGVdKSB7CisgICAgICAgIGlmIChtX29i
amVjdC0+aXNUYWJMaXN0KCkpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB0YWJzQ2hpbGRyZW47CisgICAgICAgICAgICBtX29i
amVjdC0+dGFiQ2hpbGRyZW4odGFic0NoaWxkcmVuKTsKKyAgICAgICAgICAgIHJldHVybiBjb252
ZXJ0VG9OU0FycmF5KHRhYnNDaGlsZHJlbik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb250ZW50
c0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgLy8gVGhlIGNvbnRlbnRzIG9mIGEgdGFiIGxpc3QgYXJl
IGFsbCB0aGUgY2hpbGRyZW4gZXhjZXB0IHRoZSB0YWJzLgorICAgICAgICBpZiAobV9vYmplY3Qt
PmlzVGFiTGlzdCgpKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAg
ICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciB0YWJzQ2hpbGRyZW47CisgICAgICAgICAgICBtX29iamVjdC0+dGFiQ2hpbGRyZW4odGFic0No
aWxkcmVuKTsKKworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIGNvbnRlbnRzOworICAgICAgICAgICAgdW5zaWduZWQgY2hpbGRyZW5T
aXplID0gY2hpbGRyZW4uc2l6ZSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsg
ayA8IGNoaWxkcmVuU2l6ZTsgKytrKSB7CisgICAgICAgICAgICAgICAgaWYgKHRhYnNDaGlsZHJl
bi5maW5kKGNoaWxkcmVuW2tdKSA9PSBXVEY6Om5vdEZvdW5kKQorICAgICAgICAgICAgICAgICAg
ICBjb250ZW50cy5hcHBlbmQoY2hpbGRyZW5ba10pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudHMpOworICAgICAgICB9IGVsc2UgaWYg
KG1fb2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gbV9vYmplY3QtPmNo
aWxkcmVuKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEEgc2Nyb2xsVmlldydzIGNv
bnRlbnRzIGFyZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgc2Nyb2xsIGJhcnMuCisgICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29udGVu
dHM7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGlsZHJlblNpemUgPSBjaGlsZHJlbi5zaXplKCk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY2hpbGRyZW5TaXplOyArK2sp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuW2tdLT5pc1Njcm9sbGJhcigpKQorICAg
ICAgICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoY2hpbGRyZW5ba10pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudHMpOyAgICAg
ICAgICAgIAorICAgICAgICB9CisgICAgfSAgICAKKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlz
QWNjZXNzaWJpbGl0eVRhYmxlKCkpIHsKKyAgICAgICAgLy8gVE9ETzogZGlzdGluZ3Vpc2ggYmV0
d2VlbiB2aXNpYmxlIGFuZCBub24tdmlzaWJsZSByb3dzCisgICAgICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV0gfHwgCisg
ICAgICAgICAgICBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
VmlzaWJsZVJvd3NBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNB
cnJheShzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihtX29iamVjdCktPnJvd3MoKSk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogZGlzdGluZ3Vpc2ggYmV0d2VlbiB2aXNpYmxl
IGFuZCBub24tdmlzaWJsZSBjb2x1bW5zCisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29sdW1uc0F0dHJpYnV0ZV0gfHwgCisgICAgICAg
ICAgICBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJs
ZUNvbHVtbnNBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJh
eShzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihtX29iamVjdCktPmNvbHVtbnMoKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dzQXR0cmlidXRlXSkgeworICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNl
bGVjdGVkQ2hpbGRyZW5Db3B5OworICAgICAgICAgICAgbV9vYmplY3QtPnNlbGVjdGVkQ2hpbGRy
ZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05T
QXJyYXkoc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBIVE1MIHRhYmxlcyBkb24ndCBzdXBwb3J0IHRoZXNlCisgICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDb2x1bW5zQXR0
cmlidXRlXSB8fCAKKyAgICAgICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlTZWxlY3RlZENlbGxzQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVy
biBuaWw7CisgICAgICAgIAorICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOihOU1N0cmluZyAqKWtBWENvbHVtbkhlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7Cisg
ICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgY29sdW1uSGVhZGVyczsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlU
YWJsZSo+KG1fb2JqZWN0KS0+Y29sdW1uSGVhZGVycyhjb2x1bW5IZWFkZXJzKTsKKyAgICAgICAg
ICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNvbHVtbkhlYWRlcnMpOyAgICAgICAgICAgIAor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUhlYWRlckF0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlckNvbnRhaW5lciA9IHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+aGVhZGVyQ29udGFpbmVyKCk7CisgICAgICAgICAgICBp
ZiAoaGVhZGVyQ29udGFpbmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXJDb250YWlu
ZXItPndyYXBwZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJv
d0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93SGVhZGVyczsKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+cm93SGVhZGVy
cyhyb3dIZWFkZXJzKTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd0hl
YWRlcnMpOyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZp
c2libGVDZWxsc0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjZWxsczsKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+Y2VsbHMoY2VsbHMpOworICAgICAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY2VsbHMpOworICAgICAgICB9ICAgICAgICAK
KyAgICB9CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc1RhYmxlQ29sdW1uKCkpIHsKKyAgICAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRl
eEF0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6
c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uKj4obV9vYmplY3QpLT5jb2x1bW5J
bmRleCgpXTsKKyAgICAgICAgCisgICAgICAgIC8vIHJvd3MgYXR0cmlidXRlIGZvciBhIGNvbHVt
biBpcyB0aGUgbGlzdCBvZiBhbGwgdGhlIGVsZW1lbnRzIGluIHRoYXQgY29sdW1uIGF0IGVhY2gg
cm93CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5Um93c0F0dHJpYnV0ZV0gfHwgCisgICAgICAgICAgICBbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZVJvd3NBdHRyaWJ1dGVdKSB7CisgICAg
ICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5
VGFibGVDb2x1bW4qPihtX29iamVjdCktPmNoaWxkcmVuKCkpOworICAgICAgICB9CisgICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SGVhZGVy
QXR0cmlidXRlXSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyID0g
c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uKj4obV9vYmplY3QpLT5oZWFkZXJP
YmplY3QoKTsKKyAgICAgICAgICAgIGlmICghaGVhZGVyKQorICAgICAgICAgICAgICAgIHJldHVy
biBuaWw7CisgICAgICAgICAgICByZXR1cm4gaGVhZGVyLT53cmFwcGVyKCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc1RhYmxlQ2VsbCgpKSB7CisgICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93SW5k
ZXhSYW5nZUF0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIHBhaXI8aW50LCBpbnQ+IHJvd1Jhbmdl
OworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+KG1fb2Jq
ZWN0KS0+cm93SW5kZXhSYW5nZShyb3dSYW5nZSk7CisgICAgICAgICAgICByZXR1cm4gW05TVmFs
dWUgdmFsdWVXaXRoUmFuZ2U6TlNNYWtlUmFuZ2Uocm93UmFuZ2UuZmlyc3QsIHJvd1JhbmdlLnNl
Y29uZCldOworICAgICAgICB9ICAKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5JbmRleFJhbmdlQXR0cmlidXRlXSkgeworICAg
ICAgICAgICAgcGFpcjxpbnQsIGludD4gY29sdW1uUmFuZ2U7CisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4obV9vYmplY3QpLT5jb2x1bW5JbmRleFJhbmdl
KGNvbHVtblJhbmdlKTsKKyAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5n
ZTpOU01ha2VSYW5nZShjb2x1bW5SYW5nZS5maXJzdCwgY29sdW1uUmFuZ2Uuc2Vjb25kKV07Cisg
ICAgICAgIH0gIAorICAgIH0KKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzVHJlZSgpKSB7Cisg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRSb3dzQXR0cmlidXRlXSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW5Db3B5OworICAg
ICAgICAgICAgbV9vYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkp
OworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoc2VsZWN0ZWRDaGlsZHJlbkNv
cHkpOworICAgICAgICB9CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKKyAgICAg
ICAgICAgIG1fb2JqZWN0LT5hcmlhVHJlZVJvd3Mocm93c0NvcHkpOworICAgICAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb05TQXJyYXkocm93c0NvcHkpOyAgICAgICAgICAgIAorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBUcmVlUm9sZXMgZG8gbm90IHN1cHBvcnQgY29sdW1ucywgYnV0
IE1hYyBBWCBleHBlY3RzIHRvIGJlIGFibGUgdG8gYXNrIGFib3V0IGNvbHVtbnMgYXQgdGhlIGxl
YXN0LgorICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUNvbHVtbnNBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFy
cmF5XTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUluZGV4QXR0cmlidXRlXSkgeworICAgICAgICBpZiAobV9vYmplY3QtPmlz
VHJlZUl0ZW0oKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0g
bV9vYmplY3QtPnBhcmVudE9iamVjdCgpOworICAgICAgICAgICAgZm9yICg7IHBhcmVudCAmJiAh
cGFyZW50LT5pc1RyZWUoKTsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkKKyAgICAg
ICAgICAgIHsgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXBhcmVudCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGaW5k
IHRoZSBpbmRleCBvZiB0aGlzIGl0ZW0gYnkgaXRlcmF0aW5nIHRoZSBwYXJlbnRzLgorICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJv
d3NDb3B5OworICAgICAgICAgICAgcGFyZW50LT5hcmlhVHJlZVJvd3Mocm93c0NvcHkpOworICAg
ICAgICAgICAgc2l6ZV90IGNvdW50ID0gcm93c0NvcHkuc2l6ZSgpOworICAgICAgICAgICAgZm9y
IChzaXplX3QgayA9IDA7IGsgPCBjb3VudDsgKytrKQorICAgICAgICAgICAgICAgIGlmIChyb3dz
Q29weVtrXS0+d3JhcHBlcigpID09IHNlbGYpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBb
TlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50OmtdOworICAgICAgICAgICAgCisgICAgICAg
ICAgICByZXR1cm4gbmlsOworICAgICAgICB9CisgICAgICAgIGlmIChtX29iamVjdC0+aXNUYWJs
ZVJvdygpKSB7CisgICAgICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUluZGV4QXR0cmlidXRlXSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlUm93
Kj4obV9vYmplY3QpLT5yb3dJbmRleCgpXTsKKyAgICAgICAgfQorICAgIH0gICAgCisgICAgCisg
ICAgLy8gVGhlIHJvd3MgdGhhdCBhcmUgY29uc2lkZXJlZCBpbnNpZGUgdGhpcyByb3cuIAorICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xv
c2VkUm93c0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkp
IHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciByb3dzQ29weTsKKyAgICAgICAgICAgIG1fb2JqZWN0LT5hcmlhVHJlZUl0ZW1EaXNj
bG9zZWRSb3dzKHJvd3NDb3B5KTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5
KHJvd3NDb3B5KTsgICAgCisgICAgICAgIH0gZWxzZSBpZiAobV9vYmplY3QtPmlzQVJJQVRyZWVH
cmlkUm93KCkpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEFjY2Vz
c2liaWxpdHlBUklBR3JpZFJvdyo+KG1fb2JqZWN0KS0+ZGlzY2xvc2VkUm93cyhyb3dzQ29weSk7
CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShyb3dzQ29weSk7ICAgIAorICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSByb3cgdGhhdCBjb250YWlucyB0aGlzIHJv
dy4gSXQgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBwYXJlbnQgdGhhdCBpcyBhIHRy
ZWVpdGVtLgorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5RGlzY2xvc2VkQnlSb3dBdHRyaWJ1dGVdKSB7CisgICAgICAgIGlmIChtX29iamVjdC0+
aXNUcmVlSXRlbSgpKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7CisgICAgICAgICAgICB3aGlsZSAocGFyZW50KSB7
CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNUcmVlSXRlbSgpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CisgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIHBhcmVudCBpcyB0aGUgdHJlZSBpdHNlbGYsIHRoZW4gdGhpcyB2YWx1ZSA9PSBuaWwuCisg
ICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNUcmVlKCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBuaWw7CisgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmpl
Y3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0g
ZWxzZSBpZiAobV9vYmplY3QtPmlzQVJJQVRyZWVHcmlkUm93KCkpIHsKKyAgICAgICAgICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIHJvdyA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZFJvdyo+KG1fb2JqZWN0KS0+ZGlzY2xvc2VkQnlSb3coKTsKKyAgICAgICAgICAgIGlmICghcm93
KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICByZXR1cm4gcm93LT53
cmFwcGVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3N1cmVMZXZlbEF0dHJpYnV0ZV0pIHsK
KyAgICAgICAgLy8gQ29udmVydCBmcm9tIDEtYmFzZWQgbGV2ZWwgKGZyb20gYXJpYS1sZXZlbCBz
cGVjKSB0byAwLWJhc2VkIGxldmVsIChNYWMpCisgICAgICAgIGludCBsZXZlbCA9IG1fb2JqZWN0
LT5oaWVyYXJjaGljYWxMZXZlbCgpOworICAgICAgICBpZiAobGV2ZWwgPiAwKQorICAgICAgICAg
ICAgbGV2ZWwgLT0gMTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Omxl
dmVsXTsKKyAgICB9CisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlEaXNjbG9zaW5nQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNFeHBhbmRlZCgpXTsKKyAgICAKKyAgICBpZiAo
KG1fb2JqZWN0LT5pc0xpc3RCb3goKSB8fCBtX29iamVjdC0+aXNMaXN0KCkpICYmIFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0
ZV0pCisgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbE9yaWVudGF0aW9uVmFs
dWU7CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYU2VsZWN0
ZWRUZXh0TWFya2VyUmFuZ2UiXSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5n
ZUZvclNlbGVjdGlvbl07CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5yZW5kZXJlcigpKSB7Cisg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTdGFydFRleHRN
YXJrZXIiXSkKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBv
c2l0aW9uOnN0YXJ0T2ZEb2N1bWVudChtX29iamVjdC0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKSld
OworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYRW5kVGV4
dE1hcmtlciJdKQorICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxl
UG9zaXRpb246ZW5kT2ZEb2N1bWVudChtX29iamVjdC0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKSld
OworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+YmxvY2txdW90ZUxldmVsKCldOworICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRhYmxlTGV2ZWwiXSkKKyAg
ICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT50YWJsZUxldmVs
KCldOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNj
ZXNzaWJpbGl0eUxpbmtlZFVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7CisgICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBsaW5rZWRVSUVsZW1lbnRz
OworICAgICAgICBtX29iamVjdC0+bGlua2VkVUlFbGVtZW50cyhsaW5rZWRVSUVsZW1lbnRzKTsK
KyAgICAgICAgaWYgKGxpbmtlZFVJRWxlbWVudHMuc2l6ZSgpID09IDApCisgICAgICAgICAgICBy
ZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShsaW5rZWRVSUVsZW1l
bnRzKTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmlzU2VsZWN0ZWQoKV07CisKKyAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZXJ2ZXNBc1RpdGxl
Rm9yVUlFbGVtZW50c0F0dHJpYnV0ZV0gJiYgbV9vYmplY3QtPmlzTWVudUJ1dHRvbigpKSB7Cisg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHVpRWxlbWVudCA9IHN0YXRpY19jYXN0PEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QqPihtX29iamVjdCktPm1lbnVGb3JNZW51QnV0dG9uKCk7Cisg
ICAgICAgIGlmICh1aUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlX
aXRoT2JqZWN0OnVpRWxlbWVudC0+d3JhcHBlcigpXTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0
cmlidXRlXSkgeworICAgICAgICBpZiAoIW1fb2JqZWN0LT5leHBvc2VzVGl0bGVVSUVsZW1lbnQo
KSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIAorICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmogPSBtX29iamVjdC0+dGl0bGVVSUVsZW1lbnQoKTsKKyAgICAgICAgaWYg
KG9iaikKKyAgICAgICAgICAgIHJldHVybiBvYmotPndyYXBwZXIoKTsKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlWYWx1ZURlc2NyaXB0aW9uQXR0cmlidXRlXSkKKyAgICAgICAgcmV0
dXJuIG1fb2JqZWN0LT52YWx1ZURlc2NyaXB0aW9uKCk7CisgICAgCisgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0
ZV0pIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uIGVsZW1lbnRPcmllbnRhdGlv
biA9IG1fb2JqZWN0LT5vcmllbnRhdGlvbigpOworICAgICAgICBpZiAoZWxlbWVudE9yaWVudGF0
aW9uID09IEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvblZlcnRpY2FsKQorICAgICAgICAgICAgcmV0
dXJuIE5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsT3JpZW50YXRpb25WYWx1ZTsKKyAgICAgICAgaWYg
KGVsZW1lbnRPcmllbnRhdGlvbiA9PSBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25Ib3Jpem9udGFs
KQorICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUhvcml6b250YWxPcmllbnRhdGlv
blZhbHVlOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUhvcml6b250YWxTY3JvbGxC
YXJBdHRyaWJ1dGVdKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbEJhciA9
IG1fb2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uSG9yaXpvbnRhbCk7
CisgICAgICAgIGlmIChzY3JvbGxCYXIpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsQmFyLT53
cmFwcGVyKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmVydGljYWxTY3JvbGxCYXJBdHRy
aWJ1dGVdKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbEJhciA9IG1fb2Jq
ZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uVmVydGljYWwpOworICAgICAg
ICBpZiAoc2Nyb2xsQmFyKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbEJhci0+d3JhcHBlcigp
OworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb25BdHRyaWJ1dGVd
KSB7CisgICAgICAgIHN3aXRjaCAobV9vYmplY3QtPnNvcnREaXJlY3Rpb24oKSkgeworICAgICAg
ICBjYXNlIFNvcnREaXJlY3Rpb25Bc2NlbmRpbmc6CisgICAgICAgICAgICByZXR1cm4gTlNBY2Nl
c3NpYmlsaXR5QXNjZW5kaW5nU29ydERpcmVjdGlvblZhbHVlOworICAgICAgICBjYXNlIFNvcnRE
aXJlY3Rpb25EZXNjZW5kaW5nOgorICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eURl
c2NlbmRpbmdTb3J0RGlyZWN0aW9uVmFsdWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5rbm93blNvcnREaXJlY3Rpb25WYWx1ZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUxhbmd1YWdlQXR0cmlidXRlXSkgCisgICAgICAgIHJldHVybiBtX29i
amVjdC0+bGFuZ3VhZ2UoKTsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJu
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNFeHBhbmRlZCgpXTsKKyAgICAK
KyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJl
cXVpcmVkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9v
bDptX29iamVjdC0+aXNSZXF1aXJlZCgpXTsKKworICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW52YWxpZEF0dHJpYnV0ZV0pCisgICAgICAgIHJl
dHVybiBtX29iamVjdC0+aW52YWxpZFN0YXR1cygpOworICAgIAorICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5T3duc0F0dHJpYnV0ZV0pIHsKKyAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFy
aWFPd25zOworICAgICAgICBtX29iamVjdC0+YXJpYU93bnNFbGVtZW50cyhhcmlhT3ducyk7Cisg
ICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGFyaWFPd25zKTsKKyAgICB9CisgICAgCisg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlHcmFi
YmVkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpt
X29iamVjdC0+aXNBUklBR3JhYmJlZCgpXTsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlXSkgewor
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBkcm9wRWZmZWN0czsKKyAgICAgICAgbV9vYmplY3QtPmRl
dGVybWluZUFSSUFEcm9wRWZmZWN0cyhkcm9wRWZmZWN0cyk7CisgICAgICAgIHNpemVfdCBsZW5n
dGggPSBkcm9wRWZmZWN0cy5zaXplKCk7CisKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkqIGRyb3BF
ZmZlY3RzQXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bGVuZ3RoXTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAg
IFtkcm9wRWZmZWN0c0FycmF5IGFkZE9iamVjdDpkcm9wRWZmZWN0c1tpXV07CisgICAgICAgIHJl
dHVybiBkcm9wRWZmZWN0c0FycmF5OworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVBsYWNlaG9sZGVyVmFsdWVBdHRyaWJ1
dGVdKQorICAgICAgICByZXR1cm4gbV9vYmplY3QtPnBsYWNlaG9sZGVyVmFsdWUoKTsKKyAgICAK
KyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUhh
c1BvcHVwQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9v
bDptX29iamVjdC0+YXJpYUhhc1BvcHVwKCldOworICAgIAorICAgIC8vIEFSSUEgTGl2ZSByZWdp
b24gYXR0cmlidXRlcy4KKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUFSSUFMaXZlQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0
LT5hcmlhTGl2ZVJlZ2lvblN0YXR1cygpOworICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50QXR0cmlidXRlXSkKKyAgICAgICAg
IHJldHVybiBtX29iamVjdC0+YXJpYUxpdmVSZWdpb25SZWxldmFudCgpOworICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQUF0b21pY0F0dHJp
YnV0ZV0pCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3Qt
PmFyaWFMaXZlUmVnaW9uQXRvbWljKCldOworICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQUJ1c3lBdHRyaWJ1dGVdKQorICAgICAgICByZXR1
cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5hcmlhTGl2ZVJlZ2lvbkJ1c3ko
KV07CisKKyAgICAvLyBNYXRoTUwgQXR0cmlidXRlcy4KKyAgICBpZiAobV9vYmplY3QtPmlzTWF0
aEVsZW1lbnQoKSkgeworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eU1hdGhSb290SW5kZXhBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0
dXJuIChtX29iamVjdC0+bWF0aFJvb3RJbmRleE9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoUm9v
dEluZGV4T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RSYWRpY2FuZEF0dHJpYnV0
ZV0pCisgICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3QoKSkg
PyBtX29iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aEZy
YWN0aW9uTnVtZXJhdG9yQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiAobV9vYmplY3Qt
Pm1hdGhOdW1lcmF0b3JPYmplY3QoKSkgPyBtX29iamVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgp
LT53cmFwcGVyKCkgOiAwOworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhGcmFjdGlvbkRlbm9taW5hdG9yQXR0cmlidXRlXSkKKyAg
ICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhEZW5vbWluYXRvck9iamVjdCgpKSA/IG1f
b2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoQmFz
ZUF0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoQmFzZU9iamVj
dCgpKSA/IG1fb2JqZWN0LT5tYXRoQmFzZU9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhT
dWJzY3JpcHRBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aFN1
YnNjcmlwdE9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCktPndyYXBw
ZXIoKSA6IDA7CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5TWF0aFN1cGVyc2NyaXB0QXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVy
biAobV9vYmplY3QtPm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoU3Vw
ZXJzY3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoVW5kZXJBdHRyaWJ1dGVdKQor
ICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aFVuZGVyT2JqZWN0KCkpID8gbV9vYmpl
Y3QtPm1hdGhVbmRlck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhPdmVyQXR0cmlidXRl
XSkKKyAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhPdmVyT2JqZWN0KCkpID8gbV9v
YmplY3QtPm1hdGhPdmVyT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZE9wZW5B
dHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoRmVuY2VkT3BlblN0
cmluZygpOworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eU1hdGhGZW5jZWRDbG9zZUF0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4g
bV9vYmplY3QtPm1hdGhGZW5jZWRDbG9zZVN0cmluZygpOworICAgIH0KKyAgICAKKyAgICAvLyB0
aGlzIGlzIHVzZWQgb25seSBieSBEdW1wUmVuZGVyVHJlZSBmb3IgdGVzdGluZworICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWENsaWNrUG9pbnQiXSkKKyAgICAgICAg
cmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50Om1fb2JqZWN0LT5jbGlja1BvaW50KCldOwor
ICAgIAorICAgIC8vIFRoaXMgaXMgdXNlZCBieSBEUlQgdG8gdmVyaWZ5IENTUzMgc3BlZWNoIHdv
cmtzLgorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERSVFNwZWVj
aEF0dHJpYnV0ZSJdKSB7CisgICAgICAgIEVTcGVhayBzcGVha1Byb3BlcnR5ID0gbV9vYmplY3Qt
PnNwZWFrUHJvcGVydHkoKTsKKyAgICAgICAgc3dpdGNoIChzcGVha1Byb3BlcnR5KSB7CisgICAg
ICAgIGNhc2UgU3BlYWtOb25lOgorICAgICAgICAgICAgcmV0dXJuIEAibm9uZSI7CisgICAgICAg
IGNhc2UgU3BlYWtTcGVsbE91dDoKKyAgICAgICAgICAgIHJldHVybiBAInNwZWxsLW91dCI7Cisg
ICAgICAgIGNhc2UgU3BlYWtEaWdpdHM6CisgICAgICAgICAgICByZXR1cm4gQCJkaWdpdHMiOwor
ICAgICAgICBjYXNlIFNwZWFrTGl0ZXJhbFB1bmN0dWF0aW9uOgorICAgICAgICAgICAgcmV0dXJu
IEAibGl0ZXJhbC1wdW5jdHVhdGlvbiI7CisgICAgICAgIGNhc2UgU3BlYWtOb1B1bmN0dWF0aW9u
OgorICAgICAgICAgICAgcmV0dXJuIEAibm8tcHVuY3R1YXRpb24iOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICBjYXNlIFNwZWFrTm9ybWFsOgorICAgICAgICAgICAgcmV0dXJuIEAibm9ybWFs
IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZWQgYnkgRFJUIHRvIGZpbmQgYW4gYWNj
ZXNzaWJsZSBub2RlIGJ5IGl0cyBlbGVtZW50IGlkLgorICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6QCJBWERSVEVsZW1lbnRJZEF0dHJpYnV0ZSJdKQorICAgICAgICByZXR1
cm4gbV9vYmplY3QtPmdldEF0dHJpYnV0ZShpZEF0dHIpOworICAgIAorICAgIHJldHVybiBuaWw7
Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50Cit7CisgICAgaWYgKCFb
c2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGZvY3VzZWRPYmogPSBtX29iamVjdC0+Zm9j
dXNlZFVJRWxlbWVudCgpOworCisgICAgaWYgKCFmb2N1c2VkT2JqKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIAorICAgIHJldHVybiBmb2N1c2VkT2JqLT53cmFwcGVyKCk7Cit9CisKKy0gKGlk
KWFjY2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50Cit7CisgICAgaWYgKCFbc2VsZiB1
cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgbV9v
YmplY3QtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKKyAgICBSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdD4gYXhPYmplY3QgPSBtX29iamVjdC0+YWNjZXNzaWJpbGl0eUhpdFRlc3QoSW50
UG9pbnQocG9pbnQpKTsKKyAgICBpZiAoYXhPYmplY3QpCisgICAgICAgIHJldHVybiBOU0FjY2Vz
c2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihheE9iamVjdC0+d3JhcHBlcigpKTsKKyAgICByZXR1
cm4gTlNBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3Ioc2VsZik7Cit9CisKKy0gKEJPT0wp
YWNjZXNzaWJpbGl0eUlzQXR0cmlidXRlU2V0dGFibGU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1l
Cit7CisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogQCJB
WFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlIl0pCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2Vk
QXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0
ZSgpOworCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5VmFsdWVBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldFZh
bHVlQXR0cmlidXRlKCk7CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBtX29i
amVjdC0+Y2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKTsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVuQXR0
cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRTZWxlY3RlZENoaWxkcmVu
QXR0cmlidXRlKCk7CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eURpc2Nsb3NpbmdBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gbV9vYmpl
Y3QtPmNhblNldEV4cGFuZGVkQXR0cmlidXRlKCk7CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0pCisg
ICAgICAgIHJldHVybiBZRVM7CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdIHx8CisgICAgICAgIFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0
UmFuZ2VBdHRyaWJ1dGVdIHx8CisgICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzogTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRlXSkKKyAgICAg
ICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRUZXh0UmFuZ2VBdHRyaWJ1dGVzKCk7CisgICAgCisg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlHcmFi
YmVkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAKKyAgICByZXR1cm4gTk87
Cit9CisKKy8vIGFjY2Vzc2liaWxpdHlTaG91bGRVc2VVbmlxdWVJZCBpcyBhbiBBcHBLaXQgbWV0
aG9kIHdlIG92ZXJyaWRlIHNvIHRoYXQKKy8vIG9iamVjdHMgd2lsbCBiZSBnaXZlbiBhIHVuaXF1
ZSBJRCwgYW5kIHRoZXJlZm9yZSBhbGxvdyBBcHBLaXQgdG8ga25vdyB3aGVuIHRoZXkKKy8vIGJl
Y29tZSBvYnNvbGV0ZSAoZS5nLiB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyB0byBhIG5ldyB3ZWIg
cGFnZSwgbWFraW5nIHRoaXMgb25lCisvLyB1bnJlbmRlcmVkIGJ1dCBub3QgZGVhbGxvY2F0ZWQg
YmVjYXVzZSBpdCBpcyBpbiB0aGUgYmFjay9mb3J3YXJkIGNhY2hlKS4KKy8vIEl0IGlzIGltcG9y
dGFudCB0byBjYWxsIE5TQWNjZXNzaWJpbGl0eVVucmVnaXN0ZXJVbmlxdWVJZEZvclVJRWxlbWVu
dCBpbiB0aGUKKy8vIGFwcHJvcHJpYXRlIHBsYWNlIChlLmcuIGRlYWxsb2MpIHRvIHJlbW92ZSB0
aGVzZSBub24tcmV0YWluZWQgcmVmZXJlbmNlcyBmcm9tCisvLyBBcHBLaXQncyBpZCBtYXBwaW5n
IHRhYmxlcy4gV2UgZG8gdGhpcyBpbiBkZXRhY2ggYnkgY2FsbGluZyB1bnJlZ2lzdGVyVW5pcXVl
SWRGb3JVSUVsZW1lbnQuCisvLworLy8gUmVnaXN0ZXJpbmcgYW4gb2JqZWN0IGlzIGFsc28gcmVx
dWlyZWQgZm9yIG9ic2VydmluZyBub3RpZmljYXRpb25zLiBPbmx5IHJlZ2lzdGVyZWQgb2JqZWN0
cyBjYW4gYmUgb2JzZXJ2ZWQuCistIChCT09MKWFjY2Vzc2liaWxpdHlJc0lnbm9yZWQKK3sKKyAg
ICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCisgICAgICAgIHJldHVybiBZ
RVM7CisKKyAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQorICAgICAgICByZXR1cm4g
W1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkXTsKKyAgICByZXR1
cm4gbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsKK30KKworLSAoTlNBcnJheSog
KWFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMKK3sKKyAgICBpZiAoIVtz
ZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKSAKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIHN0YXRpYyBOU0FycmF5KiBwYXJhbUF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5
KiB0ZXh0UGFyYW1BdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogdGFibGVQYXJhbUF0
dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiB3ZWJBcmVhUGFyYW1BdHRycyA9IG5pbDsK
KyAgICBpZiAocGFyYW1BdHRycyA9PSBuaWwpIHsKKyAgICAgICAgcGFyYW1BdHRycyA9IFtbTlNB
cnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgorICAgICAgICAgICAgICAgICAgICAgIEAiQVhV
SUVsZW1lbnRGb3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYVGV4dE1h
cmtlclJhbmdlRm9yVUlFbGVtZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYTGluZUZv
clRleHRNYXJrZXIiLAorICAgICAgICAgICAgICAgICAgICAgIEAiQVhUZXh0TWFya2VyUmFuZ2VG
b3JMaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYU3RyaW5nRm9yVGV4dE1hcmtlclJh
bmdlIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYVGV4dE1hcmtlckZvclBvc2l0aW9uIiwK
KyAgICAgICAgICAgICAgICAgICAgICBAIkFYQm91bmRzRm9yVGV4dE1hcmtlclJhbmdlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICBAIkFYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5n
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFRleHRNYXJrZXJSYW5nZUZvclVub3JkZXJl
ZFRleHRNYXJrZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYTmV4dFRleHRNYXJrZXJG
b3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYUHJldmlvdXNUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWExlZnRXb3JkVGV4
dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFJp
Z2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiLAorICAgICAgICAgICAgICAgICAg
ICAgIEAiQVhMZWZ0TGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiLAorICAgICAgICAg
ICAgICAgICAgICAgIEAiQVhSaWdodExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIiwK
KyAgICAgICAgICAgICAgICAgICAgICBAIkFYU2VudGVuY2VUZXh0TWFya2VyUmFuZ2VGb3JUZXh0
TWFya2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYUGFyYWdyYXBoVGV4dE1hcmtlclJh
bmdlRm9yVGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWE5leHRXb3JkRW5k
VGV4dE1hcmtlckZvclRleHRNYXJrZXIiLAorICAgICAgICAgICAgICAgICAgICAgIEAiQVhQcmV2
aW91c1dvcmRTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAgICAg
ICAgICBAIkFYTmV4dExpbmVFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsCisgICAgICAgICAg
ICAgICAgICAgICAgQCJBWFByZXZpb3VzTGluZVN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIi
LAorICAgICAgICAgICAgICAgICAgICAgIEAiQVhOZXh0U2VudGVuY2VFbmRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFByZXZpb3VzU2VudGVuY2VT
dGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFY
TmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAg
ICAgICAgICBAIkFYUHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
IiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYU3R5bGVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0
TWFya2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYTGVuZ3RoRm9yVGV4dE1hcmtlclJh
bmdlIiwKKyAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlCb3VuZHNGb3JSYW5n
ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3Np
YmlsaXR5U3RyaW5nRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlLAorICAgICAgICAgICAg
ICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVVJRWxlbWVudHNGb3JTZWFyY2hQcmVkaWNhdGVQYXJh
bWV0ZXJpemVkQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgIG5pbF07CisgICAgfQor
CisgICAgaWYgKHRleHRQYXJhbUF0dHJzID09IG5pbCkgeworICAgICAgICBOU011dGFibGVBcnJh
eSogdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpwYXJh
bUF0dHJzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhMaW5l
Rm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRP
YmplY3Q6KE5TU3RyaW5nKilrQVhSYW5nZUZvckxpbmVQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsK
KyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhTdHJpbmdGb3JSYW5n
ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDoo
TlNTdHJpbmcqKWtBWFJhbmdlRm9yUG9zaXRpb25QYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKKyAg
ICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhSYW5nZUZvckluZGV4UGFy
YW1ldGVyaXplZEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0
cmluZyopa0FYQm91bmRzRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKKyAgICAgICAg
W3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhSVEZGb3JSYW5nZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtB
WEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOworICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWFN0eWxlUmFuZ2VGb3JJbmRleFBh
cmFtZXRlcml6ZWRBdHRyaWJ1dGVdOworICAgICAgICB0ZXh0UGFyYW1BdHRycyA9IFtbTlNBcnJh
eSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJl
bGVhc2VdOworICAgIH0KKyAgICBpZiAodGFibGVQYXJhbUF0dHJzID09IG5pbCkgeworICAgICAg
ICBOU011dGFibGVBcnJheSogdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhBcnJheTpwYXJhbUF0dHJzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5Q2VsbEZvckNvbHVtbkFuZFJvd1BhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwor
ICAgICAgICB0YWJsZVBhcmFtQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6
dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAgaWYg
KCF3ZWJBcmVhUGFyYW1BdHRycykgeworICAgICAgICBOU011dGFibGVBcnJheSogdGVtcEFycmF5
ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpwYXJhbUF0dHJzXTsKKyAg
ICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlckZvcklu
ZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJJc1ZhbGlkUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07
CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUluZGV4Rm9yVGV4
dE1hcmtlclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOworICAgICAgICB3ZWJBcmVhUGFyYW1BdHRy
cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBb
dGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzUGFz
c3dvcmRGaWVsZCgpKQorICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXldOworICAgIAorICAg
IGlmICghbV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICBy
ZXR1cm4gcGFyYW1BdHRyczsKKworICAgIGlmIChtX29iamVjdC0+aXNUZXh0Q29udHJvbCgpKQor
ICAgICAgICByZXR1cm4gdGV4dFBhcmFtQXR0cnM7CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5p
c0FjY2Vzc2liaWxpdHlUYWJsZSgpKQorICAgICAgICByZXR1cm4gdGFibGVQYXJhbUF0dHJzOwor
ICAgIAorICAgIGlmIChtX29iamVjdC0+aXNNZW51UmVsYXRlZCgpKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgaWYgKG1fb2JqZWN0LT5pc1dlYkFyZWEoKSkKKyAgICAgICAgcmV0dXJuIHdl
YkFyZWFQYXJhbUF0dHJzOworICAgIAorICAgIHJldHVybiBwYXJhbUF0dHJzOworfQorCistICh2
b2lkKWFjY2Vzc2liaWxpdHlQZXJmb3JtUHJlc3NBY3Rpb24KK3sKKyAgICBpZiAoIVtzZWxmIHVw
ZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX29i
amVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgICAgIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNj
ZXNzaWJpbGl0eVBlcmZvcm1BY3Rpb246TlNBY2Nlc3NpYmlsaXR5UHJlc3NBY3Rpb25dOworICAg
IGVsc2UKKyAgICAgICAgbV9vYmplY3QtPnByZXNzKCk7ICAgIAorfQorCistICh2b2lkKWFjY2Vz
c2liaWxpdHlQZXJmb3JtSW5jcmVtZW50QWN0aW9uCit7CisgICAgaWYgKCFbc2VsZiB1cGRhdGVP
YmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9vYmplY3Qt
PmlzQXR0YWNobWVudCgpKQorICAgICAgICBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2li
aWxpdHlQZXJmb3JtQWN0aW9uOk5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEFjdGlvbl07CisgICAg
ZWxzZQorICAgICAgICBtX29iamVjdC0+aW5jcmVtZW50KCk7ICAgIAorfQorCistICh2b2lkKWFj
Y2Vzc2liaWxpdHlQZXJmb3JtRGVjcmVtZW50QWN0aW9uCit7CisgICAgaWYgKCFbc2VsZiB1cGRh
dGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9vYmpl
Y3QtPmlzQXR0YWNobWVudCgpKQorICAgICAgICBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vz
c2liaWxpdHlQZXJmb3JtQWN0aW9uOk5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEFjdGlvbl07Cisg
ICAgZWxzZQorICAgICAgICBtX29iamVjdC0+ZGVjcmVtZW50KCk7ICAgIAorfQorCistICh2b2lk
KWFjY2Vzc2liaWxpdHlQZXJmb3JtU2hvd01lbnVBY3Rpb24KK3sKKyAgICBpZiAobV9vYmplY3Qt
PnJvbGVWYWx1ZSgpID09IENvbWJvQm94Um9sZSkKKyAgICAgICAgbV9vYmplY3QtPnNldElzRXhw
YW5kZWQodHJ1ZSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgcGVy
Zm9ybWVkIGluIGFuIGl0ZXJhdGlvbiBvZiB0aGUgcnVuIGxvb3AgdGhhdCBkaWQgbm90IHN0YXJ0
IGZyb20gYW4gQVggY2FsbC4gCisgICAgICAgIC8vIElmIGl0J3MgdGhlIHNhbWUgcnVuIGxvb3Ag
aXRlcmF0aW9uLCB0aGUgbWVudSBvcGVuIG5vdGlmaWNhdGlvbiB3b24ndCBiZSBzZW50CisgICAg
ICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoYWNjZXNzaWJpbGl0eVNob3dDb250
ZXh0TWVudSkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTowLjBdOworICAgIH0KK30KKworLSAo
dm9pZClhY2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRNZW51Cit7ICAgIAorICAgIFBhZ2UqIHBhZ2Ug
PSBtX29iamVjdC0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIEludFJlY3QgcmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3QobV9vYmplY3QtPmVsZW1l
bnRSZWN0KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9vYmplY3QtPmRvY3VtZW50
RnJhbWVWaWV3KCk7CisKKyAgICAvLyBPbiBXSzIsIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhl
IHNjcm9sbCBwb3NpdGlvbi4KKyAgICAvLyBPbiBXSzEsIHRoaXMgaXNuJ3QgbmVjZXNzYXJ5LCBp
dCdzIHRha2VuIGNhcmUgb2YgYnkgdGhlIGF0dGFjaG1lbnQgdmlld3MuCisgICAgaWYgKGZyYW1l
VmlldyAmJiAhZnJhbWVWaWV3LT5wbGF0Zm9ybVdpZGdldCgpKSB7CisgICAgICAgIC8vIEZpbmQg
dGhlIGFwcHJvcHJpYXRlIHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252ZXJ0IHRoZSBjb250ZW50
cyB0byB0aGUgd2luZG93LgorICAgICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVu
dCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBh
cmVudE9iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAocGFyZW50LT5pc0FjY2Vzc2liaWxpdHlT
Y3JvbGxWaWV3KCkpIHsKKyAgICAgICAgICAgICAgICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0g
dG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5zY3JvbGxWaWV3KCk7CisgICAgICAg
ICAgICAgICAgcmVjdCA9IHNjcm9sbFZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhyZWN0KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+c2hvd0NvbnRleHRNZW51QXQo
cGFnZS0+bWFpbkZyYW1lKCksIHJlY3QuY2VudGVyKCkpOworfQorCistICh2b2lkKWFjY2Vzc2li
aWxpdHlQZXJmb3JtQWN0aW9uOihOU1N0cmluZyopYWN0aW9uCit7CisgICAgaWYgKCFbc2VsZiB1
cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoW2Fj
dGlvbiBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UHJlc3NBY3Rpb25dKQorICAgICAg
ICBbc2VsZiBhY2Nlc3NpYmlsaXR5UGVyZm9ybVByZXNzQWN0aW9uXTsKKyAgICAKKyAgICBlbHNl
IGlmIChbYWN0aW9uIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTaG93TWVudUFjdGlv
bl0pCisgICAgICAgIFtzZWxmIGFjY2Vzc2liaWxpdHlQZXJmb3JtU2hvd01lbnVBY3Rpb25dOwor
CisgICAgZWxzZSBpZiAoW2FjdGlvbiBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5j
cmVtZW50QWN0aW9uXSkKKyAgICAgICAgW3NlbGYgYWNjZXNzaWJpbGl0eVBlcmZvcm1JbmNyZW1l
bnRBY3Rpb25dOworCisgICAgZWxzZSBpZiAoW2FjdGlvbiBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5RGVjcmVtZW50QWN0aW9uXSkKKyAgICAgICAgW3NlbGYgYWNjZXNzaWJpbGl0eVBl
cmZvcm1EZWNyZW1lbnRBY3Rpb25dOworfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1
ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQoreworICAg
IGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWQgdGV4dE1hcmtlclJhbmdlID0gbmlsOworICAgIE5TTnVtYmVyKiAgICAgICAgICAg
ICAgIG51bWJlciA9IG5pbDsKKyAgICBOU1N0cmluZyogICAgICAgICAgICAgICBzdHJpbmcgPSBu
aWw7CisgICAgTlNSYW5nZSAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7MCwgMH07CisgICAgTlNB
cnJheSogICAgICAgICAgICAgICAgYXJyYXkgPSBuaWw7CisgICAgCisgICAgLy8gZGVjb2RlIHRo
ZSBwYXJhbWV0ZXIKKyAgICBpZiAoQVhPYmplY3RJc1RleHRNYXJrZXJSYW5nZSh2YWx1ZSkpCisg
ICAgICAgIHRleHRNYXJrZXJSYW5nZSA9IHZhbHVlOworCisgICAgZWxzZSBpZiAoW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TTnVtYmVyIHNlbGZdXSkKKyAgICAgICAgbnVtYmVyID0gdmFsdWU7CisK
KyAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgc2VsZl1dKQorICAg
ICAgICBzdHJpbmcgPSB2YWx1ZTsKKyAgICAKKyAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZD
bGFzczpbTlNWYWx1ZSBzZWxmXV0pCisgICAgICAgIHJhbmdlID0gW3ZhbHVlIHJhbmdlVmFsdWVd
OworICAgIAorICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IHNlbGZd
XSkKKyAgICAgICAgYXJyYXkgPSB2YWx1ZTsKKyAgICAKKyAgICAvLyBoYW5kbGUgdGhlIGNvbW1h
bmQKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYU2VsZWN0ZWRU
ZXh0TWFya2VyUmFuZ2UiXSkgeworICAgICAgICBBU1NFUlQodGV4dE1hcmtlclJhbmdlKTsKKyAg
ICAgICAgbV9vYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoW3NlbGYgdmlz
aWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7ICAg
ICAgICAKKyAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgQVNTRVJUKG51bWJlcik7
CisgICAgICAgIG1fb2JqZWN0LT5zZXRGb2N1c2VkKFtudW1iZXIgaW50VmFsdWVdICE9IDApOwor
ICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2li
aWxpdHlWYWx1ZUF0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWYgKG51bWJlciAmJiBtX29iamVjdC0+
Y2FuU2V0TnVtZXJpY1ZhbHVlKCkpCisgICAgICAgICAgICBtX29iamVjdC0+c2V0VmFsdWUoW251
bWJlciBmbG9hdFZhbHVlXSk7CisgICAgICAgIGVsc2UgaWYgKHN0cmluZykKKyAgICAgICAgICAg
IG1fb2JqZWN0LT5zZXRWYWx1ZShzdHJpbmcpOworICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pIHsK
KyAgICAgICAgaWYgKCFudW1iZXIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fb2Jq
ZWN0LT5zZXRTZWxlY3RlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOworICAgIH0gZWxzZSBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxk
cmVuQXR0cmlidXRlXSkgeworICAgICAgICBpZiAoIWFycmF5IHx8IG1fb2JqZWN0LT5yb2xlVmFs
dWUoKSAhPSBMaXN0Qm94Um9sZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRy
ZW47CisgICAgICAgIGNvbnZlcnRUb1ZlY3RvcihhcnJheSwgc2VsZWN0ZWRDaGlsZHJlbik7Cisg
ICAgICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94Kj4obV9vYmplY3QpLT5zZXRT
ZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW4pOworICAgIH0gZWxzZSBpZiAobV9vYmpl
Y3QtPmlzVGV4dENvbnRyb2woKSkgeworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdKSB7CisgICAg
ICAgICAgICBtX29iamVjdC0+c2V0U2VsZWN0ZWRUZXh0KHN0cmluZyk7CisgICAgICAgIH0gZWxz
ZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxl
Y3RlZFRleHRSYW5nZUF0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIG1fb2JqZWN0LT5zZXRTZWxl
Y3RlZFRleHRSYW5nZShQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3Ro
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdKSB7CisgICAgICAg
ICAgICBtX29iamVjdC0+bWFrZVJhbmdlVmlzaWJsZShQbGFpblRleHRSYW5nZShyYW5nZS5sb2Nh
dGlvbiwgcmFuZ2UubGVuZ3RoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zaW5nQXR0cmlidXRl
XSkKKyAgICAgICAgbV9vYmplY3QtPnNldElzRXhwYW5kZWQoW251bWJlciBib29sVmFsdWVdKTsK
KyAgICBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5U2VsZWN0ZWRSb3dzQXR0cmlidXRlXSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRSb3dzOworICAgICAgICBjb252
ZXJ0VG9WZWN0b3IoYXJyYXksIHNlbGVjdGVkUm93cyk7CisgICAgICAgIGlmIChtX29iamVjdC0+
aXNUcmVlKCkgfHwgbV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCisgICAgICAgICAg
ICBtX29iamVjdC0+c2V0U2VsZWN0ZWRSb3dzKHNlbGVjdGVkUm93cyk7CisgICAgfSBlbHNlIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0
dHJpYnV0ZV0pCisgICAgICAgIG1fb2JqZWN0LT5zZXRBUklBR3JhYmJlZChbbnVtYmVyIGJvb2xW
YWx1ZV0pOworfQorCitzdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckZvclZpZXcoTlNWaWV3
KiB2aWV3KQoreworICAgIGlmICghW3ZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChX
ZWJDb3JlRnJhbWVWaWV3KV0pCisgICAgICAgIHJldHVybiAwOworCisgICAgTlNWaWV3PFdlYkNv
cmVGcmFtZVZpZXc+KiBmcmFtZVZpZXcgPSAoTlNWaWV3PFdlYkNvcmVGcmFtZVZpZXc+Kil2aWV3
OworICAgIEZyYW1lKiBmcmFtZSA9IFtmcmFtZVZpZXcgX3dlYl9mcmFtZV07CisgICAgaWYgKCFm
cmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOb2RlKiBub2RlID0gZnJhbWUtPmRvY3Vt
ZW50KCktPm93bmVyRWxlbWVudCgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKTsKK30KKworLSAoaWQpX2FjY2Vzc2liaWxp
dHlQYXJlbnRGb3JTdWJ2aWV3OihOU1ZpZXcqKXN1YnZpZXcKK3sgICAKKyAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gcmVuZGVyZXJGb3JWaWV3KHN1YnZpZXcpOworICAgIGlmICghcmVuZGVy
ZXIpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmog
PSByZW5kZXJlci0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5k
ZXJlcik7CisgICAgaWYgKG9iaikKKyAgICAgICAgcmV0dXJuIG9iai0+cGFyZW50T2JqZWN0VW5p
Z25vcmVkKCktPndyYXBwZXIoKTsKKyAgICByZXR1cm4gbmlsOworfQorCistIChOU1N0cmluZyop
YWNjZXNzaWJpbGl0eUFjdGlvbkRlc2NyaXB0aW9uOihOU1N0cmluZyopYWN0aW9uCit7CisgICAg
Ly8gd2UgaGF2ZSBubyBjdXN0b20gYWN0aW9ucworICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlB
Y3Rpb25EZXNjcmlwdGlvbihhY3Rpb24pOworfQorCisvLyBUaGUgQ0ZBdHRyaWJ1dGVkU3RyaW5n
VHlwZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY2Nl
c3NpYmlsaXR5CisvLyBvYmplY3QgdGhhdCBpcyBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIHJhbmdl
LgorLSAoTlNBdHRyaWJ1dGVkU3RyaW5nKilkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlOihO
U1JhbmdlKXJhbmdlCit7CisgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gUGxhaW5UZXh0
UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7CisgICAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgdmlzaWJsZVBvc1JhbmdlID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9y
UmFuZ2UodGV4dFJhbmdlKTsKKyAgICByZXR1cm4gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdG
b3JUZXh0TWFya2VyUmFuZ2U6W3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlv
bnM6dmlzaWJsZVBvc1JhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZpc2libGVQb3NSYW5nZS5lbmRd
XTsKK30KKworLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2UqKXJhbmdlCit7Cisg
ICAgTlNSYW5nZSByZXN1bHQgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICBpZiAo
IXJhbmdlIHx8ICFyYW5nZS0+c3RhcnRDb250YWluZXIoKSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5kb2N1bWVudCgpOworICAg
IGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzaXplX3QgbG9j
YXRpb247CisgICAgc2l6ZV90IGxlbmd0aDsKKyAgICBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9u
QW5kTGVuZ3RoRnJvbVJhbmdlKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgcmFuZ2UsIGxv
Y2F0aW9uLCBsZW5ndGgpOworICAgIHJlc3VsdC5sb2NhdGlvbiA9IGxvY2F0aW9uOworICAgIHJl
c3VsdC5sZW5ndGggPSBsZW5ndGg7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChOU0lu
dGVnZXIpX2luZGV4Rm9yVGV4dE1hcmtlcjooaWQpbWFya2VyCit7CisgICAgaWYgKCFtYXJrZXIp
CisgICAgICAgIHJldHVybiBOU05vdEZvdW5kOworICAgIAorICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uKFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6bWFya2VyXSk7ICAg
IAorICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKV0ubG9jYXRpb247Cit9CisKKy0gKGlkKV90ZXh0TWFya2VyRm9ySW5k
ZXg6KE5TSW50ZWdlcil0ZXh0SW5kZXgKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX29i
amVjdC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gbmls
OworICAgIAorICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHRleHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCB0
ZXh0SW5kZXgsIDApOworICAgIGlmICghdGV4dFJhbmdlIHx8ICF0ZXh0UmFuZ2UtPmJvdW5kYXJ5
UG9pbnRzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFZpc2libGVQb3NpdGlv
biBwb3NpdGlvbih0ZXh0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgcmV0dXJuIFtzZWxm
IHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246cG9zaXRpb25dOworfQorCisvLyBUaGUgUlRG
IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2li
aWxpdHkgb2JqZWN0IHRoYXQgaXMKKy8vIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gcmFuZ2UuCist
IChOU0RhdGEqKWRvQVhSVEZGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQoreworICAgIE5TQXR0cmli
dXRlZFN0cmluZyogYXR0clN0cmluZyA9IFtzZWxmIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFu
Z2U6cmFuZ2VdOworICAgIHJldHVybiBbYXR0clN0cmluZyBSVEZGcm9tUmFuZ2U6IE5TTWFrZVJh
bmdlKDAsIFthdHRyU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczogbmlsXTsKK30K
KworLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRl
IGZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyCit7CisgICAgaWQgdGV4dE1hcmtlciA9IG5pbDsK
KyAgICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBuaWw7CisgICAgTlNOdW1iZXIqIG51bWJlciA9IG5p
bDsKKyAgICBOU0FycmF5KiBhcnJheSA9IG5pbDsKKyAgICBOU0RpY3Rpb25hcnkqIGRpY3Rpb25h
cnkgPSBuaWw7CisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IHVpRWxlbWVudCA9IDA7
CisgICAgTlNQb2ludCBwb2ludCA9IE5TWmVyb1BvaW50OworICAgIGJvb2wgcG9pbnRTZXQgPSBm
YWxzZTsKKyAgICBOU1JhbmdlIHJhbmdlID0gezAsIDB9OworICAgIGJvb2wgcmFuZ2VTZXQgPSBm
YWxzZTsKKyAgICAKKyAgICAvLyBiYXNpYyBwYXJhbWV0ZXIgdmFsaWRhdGlvbgorICAgIGlmICgh
bV9vYmplY3QgfHwgIWF0dHJpYnV0ZSB8fCAhcGFyYW1ldGVyKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIAorICAgIC8vIGNvbW1vbiBwYXJhbWV0ZXIgdHlwZSBjaGVjay9jYXN0
aW5nLiAgTmlsIGNoZWNrcyBpbiBoYW5kbGVycyBjYXRjaCB3cm9uZyB0eXBlIGNhc2UuCisgICAg
Ly8gTk9URTogVGhpcyBhc3N1bWVzIG5pbCBpcyBub3QgYSB2YWxpZCBwYXJhbWV0ZXIsIGJlY2F1
c2UgaXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbQorICAgIC8vIGEgcGFyYW1ldGVyIG9mIHRo
ZSB3cm9uZyB0eXBlLgorICAgIGlmIChBWE9iamVjdElzVGV4dE1hcmtlcihwYXJhbWV0ZXIpKQor
ICAgICAgICB0ZXh0TWFya2VyID0gcGFyYW1ldGVyOworCisgICAgZWxzZSBpZiAoQVhPYmplY3RJ
c1RleHRNYXJrZXJSYW5nZShwYXJhbWV0ZXIpKQorICAgICAgICB0ZXh0TWFya2VyUmFuZ2UgPSBw
YXJhbWV0ZXI7CisKKyAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHNlbGZdXSkKKyAgICAgICAgdWlFbGVtZW50ID0gWyhX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopcGFyYW1ldGVyIGFjY2Vzc2liaWxpdHlPYmpl
Y3RdOworCisgICAgZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU051bWJlciBz
ZWxmXV0pCisgICAgICAgIG51bWJlciA9IHBhcmFtZXRlcjsKKworICAgIGVsc2UgaWYgKFtwYXJh
bWV0ZXIgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBzZWxmXV0pCisgICAgICAgIGFycmF5ID0gcGFy
YW1ldGVyOworCisgICAgZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU0RpY3Rp
b25hcnkgc2VsZl1dKQorICAgICAgICBkaWN0aW9uYXJ5ID0gcGFyYW1ldGVyOworCisgICAgZWxz
ZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIHNlbGZdXSAmJiBzdHJjbXAo
WyhOU1ZhbHVlKilwYXJhbWV0ZXIgb2JqQ1R5cGVdLCBAZW5jb2RlKE5TUG9pbnQpKSA9PSAwKSB7
CisgICAgICAgIHBvaW50U2V0ID0gdHJ1ZTsKKyAgICAgICAgcG9pbnQgPSBbKE5TVmFsdWUqKXBh
cmFtZXRlciBwb2ludFZhbHVlXTsKKworICAgIH0gZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRP
ZkNsYXNzOltOU1ZhbHVlIHNlbGZdXSAmJiBzdHJjbXAoWyhOU1ZhbHVlKilwYXJhbWV0ZXIgb2Jq
Q1R5cGVdLCBAZW5jb2RlKE5TUmFuZ2UpKSA9PSAwKSB7CisgICAgICAgIHJhbmdlU2V0ID0gdHJ1
ZTsKKyAgICAgICAgcmFuZ2UgPSBbKE5TVmFsdWUqKXBhcmFtZXRlciByYW5nZVZhbHVlXTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBBdHRyaWJ1dGUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLiBB
bGxvdyBzdXBlciB0byBoYW5kbGUuCisgICAgICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6cGFyYW1ldGVyXTsKKyAgICB9
CisgICAgCisgICAgLy8gZGlzcGF0Y2gKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50c0ZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHN0YXJ0T2JqZWN0
ID0gMDsKKyAgICAgICAgaWYgKFtbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWFN0YXJ0RWxl
bWVudCJdIGlzS2luZE9mQ2xhc3M6W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHNlbGZd
XSkKKyAgICAgICAgICAgIHN0YXJ0T2JqZWN0ID0gWyhXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciopW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAiQVhTdGFydEVsZW1lbnQiXSBhY2Nlc3Np
YmlsaXR5T2JqZWN0XTsKKyAgICAgICAgCisgICAgICAgIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJl
Y3Rpb24gc2VhcmNoRGlyZWN0aW9uID0gU2VhcmNoRGlyZWN0aW9uTmV4dDsKKyAgICAgICAgaWYg
KFtbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWERpcmVjdGlvbiJdIGlzS2luZE9mQ2xhc3M6
W05TU3RyaW5nIHNlbGZdXSkKKyAgICAgICAgICAgIHNlYXJjaERpcmVjdGlvbiA9IChbKE5TU3Ry
aW5nKilbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWERpcmVjdGlvbiJdIGlzRXF1YWxUb1N0
cmluZzpAIkFYRGlyZWN0aW9uTmV4dCJdKSA/IFNlYXJjaERpcmVjdGlvbk5leHQgOiBTZWFyY2hE
aXJlY3Rpb25QcmV2aW91czsKKyAgICAgICAgCisgICAgICAgIEFjY2Vzc2liaWxpdHlTZWFyY2hL
ZXkgc2VhcmNoS2V5ID0gQW55VHlwZVNlYXJjaEtleTsKKyAgICAgICAgaWYgKFtbZGljdGlvbmFy
eSBvYmplY3RGb3JLZXk6QCJBWFNlYXJjaEtleSJdIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIHNl
bGZdXSkKKyAgICAgICAgICAgIHNlYXJjaEtleSA9IGFjY2Vzc2liaWxpdHlTZWFyY2hLZXlGb3JT
dHJpbmcoKENGU3RyaW5nUmVmKVtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYU2VhcmNoS2V5
Il0pOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHNlYXJjaFRleHQ7CisgICAgICAgIGlmIChb
W2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAiQVhTZWFyY2hUZXh0Il0gaXNLaW5kT2ZDbGFzczpb
TlNTdHJpbmcgc2VsZl1dKQorICAgICAgICAgICAgc2VhcmNoVGV4dCA9IChDRlN0cmluZ1JlZilb
ZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWFNlYXJjaFRleHQiXTsKKyAgICAgICAgCisgICAg
ICAgIHVuc2lnbmVkIHJlc3VsdHNMaW1pdCA9IDA7CisgICAgICAgIGlmIChbW2RpY3Rpb25hcnkg
b2JqZWN0Rm9yS2V5OkAiQVhSZXN1bHRzTGltaXQiXSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBz
ZWxmXV0pCisgICAgICAgICAgICByZXN1bHRzTGltaXQgPSBbKE5TTnVtYmVyKilbZGljdGlvbmFy
eSBvYmplY3RGb3JLZXk6QCJBWFJlc3VsdHNMaW1pdCJdIHVuc2lnbmVkSW50VmFsdWVdOworICAg
ICAgICAKKyAgICAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhIGNyaXRlcmlhID0ge3N0
YXJ0T2JqZWN0LCBzZWFyY2hEaXJlY3Rpb24sIHNlYXJjaEtleSwgJnNlYXJjaFRleHQsIHJlc3Vs
dHNMaW1pdH07CisKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIHJlc3VsdHM7CisgICAgICAgIG1fb2JqZWN0LT5maW5kTWF0Y2hpbmdPYmpl
Y3RzKCZjcml0ZXJpYSwgcmVzdWx0cyk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gY29udmVy
dFRvTlNBcnJheShyZXN1bHRzKTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcklzVmFsaWRQYXJhbWV0ZXJpemVkQXR0
cmlidXRlXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zID0gW3NlbGYgdmlzaWJsZVBv
c2l0aW9uRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDohcG9zLmlzTnVsbCgpXTsKKyAgICB9CisgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUluZGV4Rm9yVGV4dE1hcmtlclBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEludGVnZXI6W3NlbGYgX2luZGV4Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXV07CisgICAgfQor
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgeworICAgICAgICByZXR1cm4gW3Nl
bGYgX3RleHRNYXJrZXJGb3JJbmRleDpbbnVtYmVyIGludGVnZXJWYWx1ZV1dOworICAgIH0KKyAg
ICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFVJRWxlbWVudEZvclRl
eHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxm
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSBtX29iamVjdC0+YWNjZXNzaWJpbGl0eU9iamVj
dEZvclBvc2l0aW9uKHZpc2libGVQb3MpOworICAgICAgICBpZiAoIWF4T2JqZWN0KQorICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIGF4T2JqZWN0LT53cmFwcGVyKCk7Cisg
ICAgfQorCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhUZXh0TWFya2Vy
UmFuZ2VGb3JVSUVsZW1lbnQiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJh
bmdlID0gdWlFbGVtZW50LmdldCgpLT52aXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgICAgICBy
ZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5z
dGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CisgICAgfQorCisgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMaW5lRm9yVGV4dE1hcmtlciJdKSB7CisgICAgICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlcjoodGV4dE1hcmtlcildOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhV
bnNpZ25lZEludDptX29iamVjdC0+bGluZUZvclBvc2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICB9
CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJSYW5n
ZUZvckxpbmUiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9v
YmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZShbbnVtYmVyIGludFZhbHVlXSk7Cisg
ICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2
cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKKyAgICB9CisKKyAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSJd
KSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtzZWxm
IHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07
CisgICAgICAgIHJldHVybiBtX29iamVjdC0+c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
dmlzaWJsZVBvc1JhbmdlKTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWFRleHRNYXJrZXJGb3JQb3NpdGlvbiJdKSB7CisgICAgICAgIEludFBvaW50IHdl
YkNvcmVQb2ludCA9IEludFBvaW50KHBvaW50KTsKKyAgICAgICAgcmV0dXJuIHBvaW50U2V0ID8g
W3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+dmlzaWJsZVBvc2l0
aW9uRm9yUG9pbnQod2ViQ29yZVBvaW50KV0gOiBuaWw7CisgICAgfQorCisgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhCb3VuZHNGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewor
ICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNp
YmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAg
ICAgICBOU1JlY3QgcmVjdCA9IG1fb2JqZWN0LT5ib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5n
ZSh2aXNpYmxlUG9zUmFuZ2UpOworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVj
dDpyZWN0XTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUJvdW5kc0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlv
bkZvckluZGV4KHJhbmdlLmxvY2F0aW9uKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9
IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5sb2NhdGlvbityYW5nZS5s
ZW5ndGgpOworICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgTlNSZWN0IHJlY3QgPSBtX29iamVjdC0+Ym91
bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnQsIGVu
ZCkpOworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XTsKKyAgICB9
CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eVN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0ID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdl
LmxvY2F0aW9uKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IG1fb2JqZWN0LT52aXNp
YmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5sb2NhdGlvbityYW5nZS5sZW5ndGgpOworICAgICAg
ICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5zdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25S
YW5nZShWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydCwgZW5kKSk7CisgICAgfQorCisgICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1h
cmtlclJhbmdlIl0pCisgICAgICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0Zv
clRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworCisgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhUZXh0TWFya2VyUmFuZ2VGb3JVbm9yZGVyZWRUZXh0TWFya2Vy
cyJdKSB7CisgICAgICAgIGlmIChbYXJyYXkgY291bnRdIDwgMikKKyAgICAgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICAgICAgaWQgdGV4dE1hcmtlcjEgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDow
XTsKKyAgICAgICAgaWQgdGV4dE1hcmtlcjIgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDoxXTsKKyAg
ICAgICAgaWYgKCFBWE9iamVjdElzVGV4dE1hcmtlcih0ZXh0TWFya2VyMSkgfHwgIUFYT2JqZWN0
SXNUZXh0TWFya2VyKHRleHRNYXJrZXIyKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MxID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9u
Rm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcjEpXTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3MyID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtl
cjIpXTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT52
aXNpYmxlUG9zaXRpb25SYW5nZUZvclVub3JkZXJlZFBvc2l0aW9ucyh2aXNpYmxlUG9zMSwgdmlz
aWJsZVBvczIpOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2li
bGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CisgICAg
fQorCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0VGV4dE1hcmtl
ckZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9
IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAg
ICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPm5l
eHRWaXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcyldOworICAgIH0KKworICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJd
KSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBv
c2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAgICAgICByZXR1cm4gW3NlbGYg
dGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+cHJldmlvdXNWaXNpYmxlUG9z
aXRpb24odmlzaWJsZVBvcyldOworICAgIH0KKworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxU
b1N0cmluZzpAIkFYTGVmdFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKKyAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdl
IHZwUmFuZ2UgPSBtX29iamVjdC0+cG9zaXRpb25PZkxlZnRXb3JkKHZpc2libGVQb3MpOworICAg
ICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBS
YW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CisgICAgfQorCisgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhSaWdodFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JU
ZXh0TWFya2VyIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2Vs
ZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIFZp
c2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+cG9zaXRpb25PZlJpZ2h0V29y
ZCh2aXNpYmxlUG9zKTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21W
aXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwor
ICAgIH0KKworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTGVmdExpbmVU
ZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFy
a2VyKV07CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+
bGVmdExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zKTsKKyAgICAgICAgcmV0dXJu
IFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQg
ZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOworICAgIH0KKworICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpAIkFYUmlnaHRMaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJd
KSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBv
c2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAgICAgICBWaXNpYmxlUG9zaXRp
b25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnJpZ2h0TGluZVZpc2libGVQb3NpdGlvblJhbmdl
KHZpc2libGVQb3MpOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZp
c2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07Cisg
ICAgfQorCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTZW50ZW5jZVRl
eHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJr
ZXIpXTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5z
ZW50ZW5jZUZvclBvc2l0aW9uKHZpc2libGVQb3MpOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlv
bjp2cFJhbmdlLmVuZF07CisgICAgfQorCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhQYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKKyAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZw
UmFuZ2UgPSBtX29iamVjdC0+cGFyYWdyYXBoRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7CisgICAg
ICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJh
bmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKKyAgICB9CisKKyAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRN
YXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZp
c2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAgcmV0dXJu
IFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPm5leHRXb3JkRW5k
KHZpc2libGVQb3MpXTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOkAiQVhQcmV2aW91c1dvcmRTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0
TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1dvcmRTdGFydCh2aXNp
YmxlUG9zKV07CisgICAgfQorCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAi
QVhOZXh0TGluZUVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKKyAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2Vy
Oih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJs
ZVBvc2l0aW9uOm1fb2JqZWN0LT5uZXh0TGluZUVuZFBvc2l0aW9uKHZpc2libGVQb3MpXTsKKyAg
ICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzTGlu
ZVN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRN
YXJrZXIpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRp
b246bV9vYmplY3QtPnByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24odmlzaWJsZVBvcyldOworICAg
IH0KKworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFNlbnRlbmNl
RW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJr
ZXIpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246
bV9vYmplY3QtPm5leHRTZW50ZW5jZUVuZFBvc2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICB9CisK
KyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzU2VudGVuY2VT
dGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFy
a2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9u
Om1fb2JqZWN0LT5wcmV2aW91c1NlbnRlbmNlU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9zKV07Cisg
ICAgfQorCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0UGFyYWdy
YXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRN
YXJrZXIpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRp
b246bV9vYmplY3QtPm5leHRQYXJhZ3JhcGhFbmRQb3NpdGlvbih2aXNpYmxlUG9zKV07CisgICAg
fQorCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c1BhcmFn
cmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRl
eHRNYXJrZXIpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9z
aXRpb246bV9vYmplY3QtPnByZXZpb3VzUGFyYWdyYXBoU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9z
KV07CisgICAgfQorCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdHls
ZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRN
YXJrZXIpXTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0
LT5zdHlsZVJhbmdlRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7CisgICAgICAgIHJldHVybiBbc2Vs
ZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBv
c2l0aW9uOnZwUmFuZ2UuZW5kXTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWExlbmd0aEZvclRleHRNYXJrZXJSYW5nZSJdKSB7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtzZWxmIHZpc2libGVQb3NpdGlvblJh
bmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAgICAgIGludCBsZW5n
dGggPSBtX29iamVjdC0+bGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc1Jh
bmdlKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgICAgICByZXR1cm4gbmlsOwor
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bGVuZ3RoXTsKKyAgICB9CisK
KyAgICAvLyBVc2VkIG9ubHkgYnkgRHVtcFJlbmRlclRyZWUgKHNvIGZhcikuCisgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
UmFuZ2UiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFuZ2Ug
PSBbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2Vy
UmFuZ2VdOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlv
bjp2aXNpYmxlUG9zUmFuZ2Uuc3RhcnRdOworICAgIH0KKworICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpAIkFYRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSJdKSB7Cisg
ICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtzZWxmIHZpc2li
bGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAg
ICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnZpc2libGVQb3NS
YW5nZS5lbmRdOworICAgIH0KKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0
eVRhYmxlKCkpIHsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eUNlbGxGb3JDb2x1bW5BbmRSb3dQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewor
ICAgICAgICAgICAgaWYgKGFycmF5ID09IG5pbCB8fCBbYXJyYXkgY291bnRdICE9IDIpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihtX29iamVjdCktPmNl
bGxGb3JDb2x1bW5BbmRSb3coW1thcnJheSBvYmplY3RBdEluZGV4OjBdIHVuc2lnbmVkSW50VmFs
dWVdLCBbW2FycmF5IG9iamVjdEF0SW5kZXg6MV0gdW5zaWduZWRJbnRWYWx1ZV0pOworICAgICAg
ICAgICAgaWYgKCFjZWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBjZWxsLT53cmFwcGVyKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAobV9vYmplY3QtPmlzVGV4dENvbnRyb2woKSkgeworICAgICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyAqKWtBWExpbmVGb3JJbmRleFBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IG1fb2Jq
ZWN0LT5kb0FYTGluZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKKyAgICAgICAgICAgIGlm
IChsaW5lTnVtYmVyIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6bGluZU51bWJlcl07Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0
cmluZyAqKWtBWFJhbmdlRm9yTGluZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAg
ICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+ZG9BWFJhbmdlRm9yTGlu
ZShbbnVtYmVyIGludFZhbHVlXSk7CisgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVX
aXRoUmFuZ2U6IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCld
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAo
TlNTdHJpbmcqKWtBWFN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKKyAg
ICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlID0gUGxhaW5UZXh0UmFuZ2Uo
cmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gcmFuZ2VT
ZXQgPyAoaWQpKG1fb2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UocGxhaW5UZXh0UmFuZ2UpKSA6
IG5pbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzogKE5TU3RyaW5nKilrQVhSYW5nZUZvclBvc2l0aW9uUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0p
IHsKKyAgICAgICAgICAgIGlmICghcG9pbnRTZXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICAgICAgICAgIEludFBvaW50IHdlYkNvcmVQb2ludCA9IEludFBvaW50KHBvaW50KTsK
KyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FYUmFu
Z2VGb3JQb3NpdGlvbih3ZWJDb3JlUG9pbnQpOworICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVl
IHZhbHVlV2l0aFJhbmdlOiBOU01ha2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5s
ZW5ndGgpXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzogKE5TU3RyaW5nKilrQVhSYW5nZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0p
IHsKKyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FY
UmFuZ2VGb3JJbmRleChbbnVtYmVyIGludFZhbHVlXSk7CisgICAgICAgICAgICByZXR1cm4gW05T
VmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJh
bmdlLmxlbmd0aCldOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOiAoTlNTdHJpbmcqKWtBWEJvdW5kc0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJp
YnV0ZV0pIHsKKyAgICAgICAgICAgIGlmICghcmFuZ2VTZXQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlID0gUGxh
aW5UZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7CisgICAgICAgICAgICBO
U1JlY3QgcmVjdCA9IG1fb2JqZWN0LT5kb0FYQm91bmRzRm9yUmFuZ2UocGxhaW5UZXh0UmFuZ2Up
OworICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmlu
Zyopa0FYUlRGRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJl
dHVybiByYW5nZVNldCA/IFtzZWxmIGRvQVhSVEZGb3JSYW5nZTpyYW5nZV0gOiBuaWw7CisKKyAg
ICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcqKWtBWEF0dHJp
YnV0ZWRTdHJpbmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKQorICAgICAgICAgICAg
cmV0dXJuIHJhbmdlU2V0ID8gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTpyYW5n
ZV0gOiBuaWw7CisKKyAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNT
dHJpbmcqKWtBWFN0eWxlUmFuZ2VGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Cisg
ICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+ZG9BWFN0eWxl
UmFuZ2VGb3JJbmRleChbbnVtYmVyIGludFZhbHVlXSk7CisgICAgICAgICAgICByZXR1cm4gW05T
VmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJh
bmdlLmxlbmd0aCldOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlcmUgYXJlIHNvbWUg
cGFyYW1ldGVycyB0aGF0IHN1cGVyIGhhbmRsZXMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgcmV0
dXJuZWQgYnkgdGhlIGxpc3Qgb2YgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzLgorICAgIC8vIElu
IHRoYXQgY2FzZSBpdCBtdXN0IGJlIHBhc3NlZCB0byBzdXBlci4gCisgICAgcmV0dXJuIFtzdXBl
ciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmlidXRlIGZvclBhcmFtZXRlcjpwYXJh
bWV0ZXJdOworfQorCistIChCT09MKWFjY2Vzc2liaWxpdHlTdXBwb3J0c092ZXJyaWRkZW5BdHRy
aWJ1dGVzCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9PTClhY2Nlc3NpYmlsaXR5U2hv
dWxkVXNlVW5pcXVlSWQKK3sKKyAgICAvLyBBbGwgQVggb2JqZWN0IHdyYXBwZXJzIHNob3VsZCB1
c2UgdW5pcXVlIElEJ3MgYmVjYXVzZSBpdCdzIGZhc3RlciB3aXRoaW4gQXBwS2l0IHRvIGxvb2sg
dGhlbSB1cC4KKyAgICByZXR1cm4gWUVTOworfQorCisvLyBBUEkgdGhhdCBBcHBLaXQgdXNlcyBm
b3IgZmFzdGVyIGFjY2VzcworLSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxk
OihpZCljaGlsZAoreworICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkK
KyAgICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CisgICAgCisgICAgLy8gVHJlZSBvYmplY3RzIHJl
dHVybiB0aGVpciByb3dzIGFzIHRoZWlyIGNoaWxkcmVuLiBXZSBjYW4gdXNlIHRoZSBvcmlnaW5h
bCBtZXRob2QKKyAgICAvLyBoZXJlLCBiZWNhdXNlIHdlIHdvbid0IGdhaW4gYW55IHNwZWVkIHVw
LgorICAgIGlmIChtX29iamVjdC0+aXNUcmVlKCkpCisgICAgICAgIHJldHVybiBbc3VwZXIgYWNj
ZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDpjaGlsZF07CisgICAgICAgCisgICAgY29uc3QgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IG1f
b2JqZWN0LT5jaGlsZHJlbigpOworICAgICAgIAorICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBbW3NlbGYgcmVuZGVyV2lkZ2V0Q2hpbGRyZW5dIGluZGV4T2ZPYmpl
Y3Q6Y2hpbGRdOworICAgIAorICAgIHVuc2lnbmVkIGNvdW50ID0gY2hpbGRyZW4uc2l6ZSgpOwor
ICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBjb3VudDsgKytrKSB7CisgICAgICAgIFdlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gY2hpbGRyZW5ba10tPndyYXBwZXIo
KTsKKyAgICAgICAgaWYgKHdyYXBwZXIgPT0gY2hpbGQgfHwgKGNoaWxkcmVuW2tdLT5pc0F0dGFj
aG1lbnQoKSAmJiBbd3JhcHBlciBhdHRhY2htZW50Vmlld10gPT0gY2hpbGQpKSAKKyAgICAgICAg
ICAgIHJldHVybiBrOworICAgIH0KKworICAgIHJldHVybiBOU05vdEZvdW5kOworfQorCistIChO
U1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZUNvdW50OihOU1N0cmluZyAqKWF0
dHJpYnV0ZQoreworICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkgeworICAgICAgICAvLyBUcmVlIGl0
ZW1zIG9iamVjdCByZXR1cm5zIGEgZGlmZmVyZW50IHNldCBvZiBjaGlsZHJlbiB0aGFuIHRob3Nl
IHRoYXQgYXJlIGluIGNoaWxkcmVuKCkKKyAgICAgICAgLy8gYmVjYXVzZSBhbiBBWE91dGxpbmUg
KHRoZSBtYWMgcm9sZSBpcyBiZWNvbWVzKSBoYXMgc29tZSBvZGQgc3RpcHVsYXRpb25zLgorICAg
ICAgICBpZiAobV9vYmplY3QtPmlzVHJlZSgpIHx8IG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpCisg
ICAgICAgICAgICByZXR1cm4gW1tzZWxmIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0Fj
Y2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV0gY291bnRdOworICAgICAgICAKKyAgICAgICAg
Y29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBj
aGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOworICAgICAgICBpZiAoY2hpbGRyZW4uaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIFtbc2VsZiByZW5kZXJXaWRnZXRDaGlsZHJlbl0g
Y291bnRdOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNpemUoKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVDb3Vu
dDphdHRyaWJ1dGVdOworfQorCistIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUFycmF5QXR0cmli
dXRlVmFsdWVzOihOU1N0cmluZyAqKWF0dHJpYnV0ZSBpbmRleDooTlNVSW50ZWdlcilpbmRleCBt
YXhDb3VudDooTlNVSW50ZWdlciltYXhDb3VudCAKK3sKKyAgICBpZiAoIVtzZWxmIHVwZGF0ZU9i
amVjdEJhY2tpbmdTdG9yZV0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRl
XSkgeworICAgICAgICBpZiAobV9vYmplY3QtPmNoaWxkcmVuKCkuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBOU0FycmF5ICpjaGlsZHJlbiA9IFtzZWxmIHJlbmRlcldpZGdldENoaWxkcmVuXTsK
KyAgICAgICAgICAgIGlmICghY2hpbGRyZW4pIAorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5TVUludGVnZXIgY2hpbGRDb3VudCA9IFtjaGls
ZHJlbiBjb3VudF07CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gY2hpbGRDb3VudCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgCisgICAgICAgICAgICBOU1VJbnRl
Z2VyIGFycmF5TGVuZ3RoID0gbWluKGNoaWxkQ291bnQgLSBpbmRleCwgbWF4Q291bnQpOworICAg
ICAgICAgICAgcmV0dXJuIFtjaGlsZHJlbiBzdWJhcnJheVdpdGhSYW5nZTpOU01ha2VSYW5nZShp
bmRleCwgYXJyYXlMZW5ndGgpXTsKKyAgICAgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNUcmVl
KCkpIHsKKyAgICAgICAgICAgIC8vIFRyZWUgb2JqZWN0cyByZXR1cm4gdGhlaXIgcm93cyBhcyB0
aGVpciBjaGlsZHJlbi4gV2UgY2FuIHVzZSB0aGUgb3JpZ2luYWwgbWV0aG9kIGluIHRoaXMgY2Fz
ZS4KKyAgICAgICAgICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRl
VmFsdWVzOmF0dHJpYnV0ZSBpbmRleDppbmRleCBtYXhDb3VudDptYXhDb3VudF07CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAg
ICAgICAgdW5zaWduZWQgY2hpbGRDb3VudCA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgaWYg
KGluZGV4ID49IGNoaWxkQ291bnQpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgYXZhaWxhYmxlID0gbWluKGNoaWxkQ291bnQgLSBpbmRleCwgbWF4
Q291bnQpOworICAgICAgICAKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnN1YmFycmF5ID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmF2YWlsYWJsZV07CisgICAgICAgIGZvciAo
dW5zaWduZWQgYWRkZWQgPSAwOyBhZGRlZCA8IGF2YWlsYWJsZTsgKytpbmRleCwgKythZGRlZCkg
eworICAgICAgICAgICAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBj
aGlsZHJlbltpbmRleF0tPndyYXBwZXIoKTsKKyAgICAgICAgICAgIGlmICh3cmFwcGVyKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIGF0dGFjaG1lbnQgdmlldyBzaG91bGQgYmUgcmV0dXJuZWQs
IG90aGVyd2lzZSBBWCBwYWxpbmRyb21lIGVycm9ycyBvY2N1ci4KKyAgICAgICAgICAgICAgICBp
ZiAoY2hpbGRyZW5baW5kZXhdLT5pc0F0dGFjaG1lbnQoKSAmJiBbd3JhcHBlciBhdHRhY2htZW50
Vmlld10pCisgICAgICAgICAgICAgICAgICAgIFtzdWJhcnJheSBhZGRPYmplY3Q6W3dyYXBwZXIg
YXR0YWNobWVudFZpZXddXTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIFtzdWJhcnJheSBhZGRPYmplY3Q6d3JhcHBlcl07CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdWJhcnJheTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVWYWx1ZXM6YXR0cmlidXRl
IGluZGV4OmluZGV4IG1heENvdW50Om1heENvdW50XTsKK30KKwogLy8gVGhpcyBpcyBzZXQgYnkg
RFJUIHdoZW4gaXQgd2FudHMgdG8gbGlzdGVuIGZvciBub3RpZmljYXRpb25zLgogc3RhdGljIEJP
T0wgYWNjZXNzaWJpbGl0eVNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM7CiArICh2b2lkKWFjY2Vz
c2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGI2Y2RlNzI5Y2VjZGI0NTllZGQ0OGZiNjNmN2JmOWRkZmE2ZDNkYzkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWNfaAotI2RlZmluZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hY19oCi0KLSNp
bXBvcnQgIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmgiCi0KLUBpbnRlcmZhY2UgV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgOiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcgotCi1AZW5kCi0KLSNlbmRpZiAvLyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Y19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMTdhMjU0YTBmNzdmOWE5ZTc5MTNiYjg1YzdlYWQxMjMxNmYwNTNkYS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5t
CisrKyAvZGV2L251bGwKQEAgLTEsMzUzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFj
LmgiCi0KLSNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCi0KLSNpbXBvcnQgIkFYT2JqZWN0Q2FjaGUu
aCIKLSNpbXBvcnQgIkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5oIgotI2ltcG9ydCAiQWNjZXNz
aWJpbGl0eUxpc3QuaCIKLSNpbXBvcnQgIkFjY2Vzc2liaWxpdHlMaXN0Qm94LmgiCi0jaW1wb3J0
ICJBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgiCi0jaW1wb3J0ICJBY2Nlc3NpYmlsaXR5U2Ny
b2xsVmlldy5oIgotI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaCIKLSNpbXBvcnQg
IkFjY2Vzc2liaWxpdHlUYWJsZS5oIgotI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5o
IgotI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmgiCi0jaW1wb3J0ICJBY2Nlc3Np
YmlsaXR5VGFibGVSb3cuaCIKLSNpbXBvcnQgIkNocm9tZS5oIgotI2ltcG9ydCAiQ2hyb21lQ2xp
ZW50LmgiCi0jaW1wb3J0ICJDb2xvck1hYy5oIgotI2ltcG9ydCAiQ29udGV4dE1lbnVDb250cm9s
bGVyLmgiCi0jaW1wb3J0ICJGb250LmgiCi0jaW1wb3J0ICJGcmFtZS5oIgotI2ltcG9ydCAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKLSNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCi0jaW1wb3J0ICJI
VE1MQW5jaG9yRWxlbWVudC5oIgotI2ltcG9ydCAiSFRNTEFyZWFFbGVtZW50LmgiCi0jaW1wb3J0
ICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbXBvcnQgIkhUTUxJbWFnZUVsZW1lbnQuaCIK
LSNpbXBvcnQgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbXBvcnQgIkhUTUxOYW1lcy5oIgotI2lt
cG9ydCAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgotI2ltcG9ydCAiTG9jYWxpemVkU3RyaW5ncy5o
IgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9ydCAiUmVuZGVyVGV4dENvbnRyb2wuaCIKLSNpbXBv
cnQgIlJlbmRlclZpZXcuaCIKLSNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgotI2ltcG9ydCAiU2Ny
b2xsVmlldy5oIgotI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKLSNpbXBvcnQgIlRleHRDaGVj
a2VyQ2xpZW50LmgiCi0jaW1wb3J0ICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKLSNpbXBvcnQgIlRl
eHRJdGVyYXRvci5oIgotI2ltcG9ydCAiV2ViQ29yZUZyYW1lVmlldy5oIgotI2ltcG9ydCAiV2Vi
Q29yZU9iakNFeHRyYXMuaCIKLSNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLSNp
bXBvcnQgImh0bWxlZGl0aW5nLmgiCi0jaW1wb3J0ICJ2aXNpYmxlX3VuaXRzLmgiCi0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLXVzaW5nIG5h
bWVzcGFjZSBzdGQ7Ci0KLS8vIENlbGwgVGFibGVzCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVNl
bGVjdGVkQ2VsbHNBdHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDZWxs
c0F0dHJpYnV0ZSBAIkFYU2VsZWN0ZWRDZWxscyIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNz
aWJpbGl0eVZpc2libGVDZWxsc0F0dHJpYnV0ZQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlWaXNp
YmxlQ2VsbHNBdHRyaWJ1dGUgQCJBWFZpc2libGVDZWxscyIKLSNlbmRpZgotCi0jaWZuZGVmIE5T
QWNjZXNzaWJpbGl0eVJvd0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nl
c3NpYmlsaXR5Um93SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZSBAIkFYUm93SGVhZGVyVUlFbGVt
ZW50cyIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVJvd0luZGV4UmFuZ2VBdHRy
aWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Um93SW5kZXhSYW5nZUF0dHJpYnV0ZSBAIkFY
Um93SW5kZXhSYW5nZSIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUNvbHVtbklu
ZGV4UmFuZ2VBdHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Q29sdW1uSW5kZXhSYW5n
ZUF0dHJpYnV0ZSBAIkFYQ29sdW1uSW5kZXhSYW5nZSIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNj
ZXNzaWJpbGl0eUNlbGxGb3JDb2x1bW5BbmRSb3dQYXJhbWV0ZXJpemVkQXR0cmlidXRlCi0jZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eUNlbGxGb3JDb2x1bW5BbmRSb3dQYXJhbWV0ZXJpemVkQXR0cmli
dXRlIEAiQVhDZWxsRm9yQ29sdW1uQW5kUm93IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3Np
YmlsaXR5Q2VsbFJvbGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Q2VsbFJvbGUgQCJBWENlbGwi
Ci0jZW5kaWYKLQotLy8gTGlzdHMKLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Q29udGVudExpc3RT
dWJyb2xlCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUNvbnRlbnRMaXN0U3Vicm9sZSBAIkFYQ29u
dGVudExpc3QiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkxp
c3RTdWJyb2xlCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uTGlzdFN1YnJvbGUg
QCJBWERlc2NyaXB0aW9uTGlzdCIKLSNlbmRpZgotCi0vLyBNaXNjZWxsYW5lb3VzCi0jaWZuZGVm
IE5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0ZQotI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlCbG9ja1F1b3RlTGV2ZWxBdHRyaWJ1dGUgQCJBWEJsb2NrUXVvdGVMZXZlbCIKLSNl
bmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJpYnV0ZQotI2RlZmlu
ZSBOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGUgQCJBWEFjY2Vzc0tleSIKLSNlbmRp
ZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUxhbmd1YWdlQXR0cmlidXRlCi0jZGVmaW5lIE5T
QWNjZXNzaWJpbGl0eUxhbmd1YWdlQXR0cmlidXRlIEAiQVhMYW5ndWFnZSIKLSNlbmRpZgotCi0j
aWZuZGVmIE5TQWNjZXNzaWJpbGl0eVJlcXVpcmVkQXR0cmlidXRlCi0jZGVmaW5lIE5TQWNjZXNz
aWJpbGl0eVJlcXVpcmVkQXR0cmlidXRlIEAiQVhSZXF1aXJlZCIKLSNlbmRpZgotCi0jaWZuZGVm
IE5TQWNjZXNzaWJpbGl0eUludmFsaWRBdHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5
SW52YWxpZEF0dHJpYnV0ZSBAIkFYSW52YWxpZCIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNz
aWJpbGl0eU93bnNBdHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5T3duc0F0dHJpYnV0
ZSBAIkFYT3ducyIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRy
aWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZSBAIkFYR3JhYmJl
ZCIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRl
Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlIEAiQVhEcm9wRWZm
ZWN0cyIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFSSUFMaXZlQXR0cmlidXRl
Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUFSSUFMaXZlQXR0cmlidXRlIEAiQVhBUklBTGl2ZSIK
LSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFSSUFBdG9taWNBdHRyaWJ1dGUKLSNk
ZWZpbmUgTlNBY2Nlc3NpYmlsaXR5QVJJQUF0b21pY0F0dHJpYnV0ZSBAIkFYQVJJQUF0b21pYyIK
LSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFSSUFSZWxldmFudEF0dHJpYnV0ZQot
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlBUklBUmVsZXZhbnRBdHRyaWJ1dGUgQCJBWEFSSUFSZWxl
dmFudCIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFSSUFCdXN5QXR0cmlidXRl
Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUFSSUFCdXN5QXR0cmlidXRlIEAiQVhBUklBQnVzeSIK
LSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUxvYWRpbmdQcm9ncmVzc0F0dHJpYnV0
ZQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlMb2FkaW5nUHJvZ3Jlc3NBdHRyaWJ1dGUgQCJBWExv
YWRpbmdQcm9ncmVzcyIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUhhc1BvcHVw
QXR0cmlidXRlCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhhc1BvcHVwQXR0cmlidXRlIEAiQVhI
YXNQb3B1cCIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVBsYWNlaG9sZGVyVmFs
dWVBdHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1ZUF0dHJp
YnV0ZSBAIkFYUGxhY2Vob2xkZXJWYWx1ZSIKLSNlbmRpZgotCi0vLyBTZWFyY2gKLSNpZm5kZWYg
TlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50c0ZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50c0ZvclNlYXJjaFByZWRp
Y2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgQCJBWFVJRWxlbWVudHNGb3JTZWFyY2hQcmVkaWNh
dGUiCi0jZW5kaWYKLQotLy8gU2VhcmNoIEtleXMKLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QW55
VHlwZVNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlBbnlUeXBlU2VhcmNoS2V5IEAi
QVhBbnlUeXBlU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Qmxv
Y2txdW90ZVNhbWVMZXZlbFNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlCbG9ja3F1
b3RlU2FtZUxldmVsU2VhcmNoS2V5IEAiQVhCbG9ja3F1b3RlU2FtZUxldmVsU2VhcmNoS2V5Igot
I2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QmxvY2txdW90ZVNlYXJjaEtleQotI2Rl
ZmluZSBOU0FjY2Vzc2liaWxpdHlCbG9ja3F1b3RlU2VhcmNoS2V5IEAiQVhCbG9ja3F1b3RlU2Vh
cmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Qm9sZEZvbnRTZWFyY2hL
ZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Qm9sZEZvbnRTZWFyY2hLZXkgQCJBWEJvbGRGb250
U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QnV0dG9uU2VhcmNo
S2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUJ1dHRvblNlYXJjaEtleSBAIkFYQnV0dG9uU2Vh
cmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Q2hlY2tCb3hTZWFyY2hL
ZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Q2hlY2tCb3hTZWFyY2hLZXkgQCJBWENoZWNrQm94
U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Q29udHJvbFNlYXJj
aEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlDb250cm9sU2VhcmNoS2V5IEAiQVhDb250cm9s
U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5RGlmZmVyZW50VHlw
ZVNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlEaWZmZXJlbnRUeXBlU2VhcmNoS2V5
IEAiQVhEaWZmZXJlbnRUeXBlU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3Np
YmlsaXR5Rm9udENoYW5nZVNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlGb250Q2hh
bmdlU2VhcmNoS2V5IEAiQVhGb250Q2hhbmdlU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYg
TlNBY2Nlc3NpYmlsaXR5Rm9udENvbG9yQ2hhbmdlU2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNz
aWJpbGl0eUZvbnRDb2xvckNoYW5nZVNlYXJjaEtleSBAIkFYRm9udENvbG9yQ2hhbmdlU2VhcmNo
S2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5RnJhbWVTZWFyY2hLZXkKLSNk
ZWZpbmUgTlNBY2Nlc3NpYmlsaXR5RnJhbWVTZWFyY2hLZXkgQCJBWEZyYW1lU2VhcmNoS2V5Igot
I2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5R3JhcGhpY1NlYXJjaEtleQotI2RlZmlu
ZSBOU0FjY2Vzc2liaWxpdHlHcmFwaGljU2VhcmNoS2V5IEAiQVhHcmFwaGljU2VhcmNoS2V5Igot
I2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsMVNlYXJjaEtleQot
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwxU2VhcmNoS2V5IEAiQVhIZWFkaW5n
TGV2ZWwxU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGlu
Z0xldmVsMlNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwyU2Vh
cmNoS2V5IEAiQVhIZWFkaW5nTGV2ZWwyU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNB
Y2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsM1NlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlIZWFkaW5nTGV2ZWwzU2VhcmNoS2V5IEAiQVhIZWFkaW5nTGV2ZWwzU2VhcmNoS2V5IgotI2Vu
ZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsNFNlYXJjaEtleQotI2Rl
ZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw0U2VhcmNoS2V5IEAiQVhIZWFkaW5nTGV2
ZWw0U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xl
dmVsNVNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw1U2VhcmNo
S2V5IEAiQVhIZWFkaW5nTGV2ZWw1U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nl
c3NpYmlsaXR5SGVhZGluZ0xldmVsNlNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlI
ZWFkaW5nTGV2ZWw2U2VhcmNoS2V5IEAiQVhIZWFkaW5nTGV2ZWw2U2VhcmNoS2V5IgotI2VuZGlm
Ci0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ1NhbWVMZXZlbFNlYXJjaEtleQotI2Rl
ZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nU2FtZUxldmVsU2VhcmNoS2V5IEAiQVhIZWFkaW5n
U2FtZUxldmVsU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVh
ZGluZ1NlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nU2VhcmNoS2V5IEAi
QVhIZWFkaW5nU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGln
aGxpZ2h0ZWRTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SGlnaGxpZ2h0ZWRTZWFy
Y2hLZXkgQCJBWEhpZ2hsaWdodGVkU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nl
c3NpYmlsaXR5SXRhbGljRm9udFNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlJdGFs
aWNGb250U2VhcmNoS2V5IEAiQVhJdGFsaWNGb250U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5k
ZWYgTlNBY2Nlc3NpYmlsaXR5TGFuZG1hcmtTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmls
aXR5TGFuZG1hcmtTZWFyY2hLZXkgQCJBWExhbmRtYXJrU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNp
Zm5kZWYgTlNBY2Nlc3NpYmlsaXR5TGlua1NlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlMaW5rU2VhcmNoS2V5IEAiQVhMaW5rU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNB
Y2Nlc3NpYmlsaXR5TGlzdFNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlMaXN0U2Vh
cmNoS2V5IEAiQVhMaXN0U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5TGl2ZVJlZ2lvblNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlMaXZlUmVnaW9u
U2VhcmNoS2V5IEAiQVhMaXZlUmVnaW9uU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNB
Y2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFdvcmRTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmls
aXR5TWlzc3BlbGxlZFdvcmRTZWFyY2hLZXkgQCJBWE1pc3NwZWxsZWRXb3JkU2VhcmNoS2V5Igot
I2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5UGxhaW5UZXh0U2VhcmNoS2V5Ci0jZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eVBsYWluVGV4dFNlYXJjaEtleSBAIkFYUGxhaW5UZXh0U2VhcmNo
S2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5UmFkaW9Hcm91cFNlYXJjaEtl
eQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlSYWRpb0dyb3VwU2VhcmNoS2V5IEAiQVhSYWRpb0dy
b3VwU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5U2FtZVR5cGVT
ZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5U2FtZVR5cGVTZWFyY2hLZXkgQCJBWFNh
bWVUeXBlU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5U3RhdGlj
VGV4dFNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlTdGF0aWNUZXh0U2VhcmNoS2V5
IEAiQVhTdGF0aWNUZXh0U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5U3R5bGVDaGFuZ2VTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5U3R5bGVDaGFu
Z2VTZWFyY2hLZXkgQCJBWFN0eWxlQ2hhbmdlU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYg
TlNBY2Nlc3NpYmlsaXR5VGFibGVTYW1lTGV2ZWxTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3Np
YmlsaXR5VGFibGVTYW1lTGV2ZWxTZWFyY2hLZXkgQCJBWFRhYmxlU2FtZUxldmVsU2VhcmNoS2V5
IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VGFibGVTZWFyY2hLZXkKLSNkZWZp
bmUgTlNBY2Nlc3NpYmlsaXR5VGFibGVTZWFyY2hLZXkgQCJBWFRhYmxlU2VhcmNoS2V5IgotI2Vu
ZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VGV4dEZpZWxkU2VhcmNoS2V5Ci0jZGVmaW5l
IE5TQWNjZXNzaWJpbGl0eVRleHRGaWVsZFNlYXJjaEtleSBAIkFYVGV4dEZpZWxkU2VhcmNoS2V5
IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VW5kZXJsaW5lU2VhcmNoS2V5Ci0j
ZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVVuZGVybGluZVNlYXJjaEtleSBAIkFYVW5kZXJsaW5lU2Vh
cmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VW52aXNpdGVkTGlua1Nl
YXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlVbnZpc2l0ZWRMaW5rU2VhcmNoS2V5IEAi
QVhVbnZpc2l0ZWRMaW5rU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5VmlzaXRlZExpbmtTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VmlzaXRlZExp
bmtTZWFyY2hLZXkgQCJBWFZpc2l0ZWRMaW5rU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNkZWZpbmUg
TlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcklzVmFsaWRQYXJhbWV0ZXJpemVkQXR0cmlidXRlIEAi
QVhUZXh0TWFya2VySXNWYWxpZCIKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SW5kZXhGb3JUZXh0
TWFya2VyUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBAIkFYSW5kZXhGb3JUZXh0TWFya2VyIgotI2Rl
ZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmli
dXRlIEAiQVhUZXh0TWFya2VyRm9ySW5kZXgiCi0KLS8vIE1hdGggYXR0cmlidXRlcwotI2RlZmlu
ZSBOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdFJhZGljYW5kQXR0cmlidXRlIEAiQVhNYXRoUm9vdFJh
ZGljYW5kIgotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdEluZGV4QXR0cmlidXRlIEAi
QVhNYXRoUm9vdEluZGV4IgotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoRnJhY3Rpb25EZW5v
bWluYXRvckF0dHJpYnV0ZSBAIkFYTWF0aEZyYWN0aW9uRGVub21pbmF0b3IiCi0jZGVmaW5lIE5T
QWNjZXNzaWJpbGl0eU1hdGhGcmFjdGlvbk51bWVyYXRvckF0dHJpYnV0ZSBAIkFYTWF0aEZyYWN0
aW9uTnVtZXJhdG9yIgotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0dHJpYnV0ZSBA
IkFYTWF0aEJhc2UiCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRBdHRyaWJ1
dGUgQCJBWE1hdGhTdWJzY3JpcHQiCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhTdXBlcnNj
cmlwdEF0dHJpYnV0ZSBAIkFYTWF0aFN1cGVyc2NyaXB0IgotI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlNYXRoVW5kZXJBdHRyaWJ1dGUgQCJBWE1hdGhVbmRlciIKLSNkZWZpbmUgTlNBY2Nlc3NpYmls
aXR5TWF0aE92ZXJBdHRyaWJ1dGUgQCJBWE1hdGhPdmVyIgotI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlNYXRoRmVuY2VkT3BlbkF0dHJpYnV0ZSBAIkFYTWF0aEZlbmNlZE9wZW4iCi0jZGVmaW5lIE5T
QWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRDbG9zZUF0dHJpYnV0ZSBAIkFYTWF0aEZlbmNlZENsb3Nl
IgotCi1AaW1wbGVtZW50YXRpb24gV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMKLQot
LSAodm9pZCl1bnJlZ2lzdGVyVW5pcXVlSWRGb3JVSUVsZW1lbnQKLXsKLSAgICB3a1VucmVnaXN0
ZXJVbmlxdWVJZEZvckVsZW1lbnQoc2VsZik7Ci19Ci0KLS0gKHZvaWQpZGV0YWNoCi17Ci0gICAg
Ly8gU2VuZCB1bnJlZ2lzdGVyVW5pcXVlSWRGb3JVSUVsZW1lbnQgdW5jb25kaXRpb25hbGx5IGJl
Y2F1c2UgaWYgaXQgaXMKLSAgICAvLyBldmVyIGFjY2lkZW50YWxseSBub3QgZG9uZSAodmlhIG90
aGVyIGJ1Z3MgaW4gb3VyIEFYIGltcGxlbWVudGF0aW9uKSB5b3UKLSAgICAvLyBlbmQgdXAgd2l0
aCBhIGNyYXNoIGxpa2UgPHJkYXI6Ly9wcm9ibGVtLzQyNzMxNDk+LiAgSXQgaXMgc2FmZSBhbmQg
bm90Ci0gICAgLy8gZXhwZW5zaXZlIHRvIHNlbmQgZXZlbiBpZiB0aGUgb2JqZWN0IGlzIG5vdCBy
ZWdpc3RlcmVkLgotICAgIFtzZWxmIHVucmVnaXN0ZXJVbmlxdWVJZEZvclVJRWxlbWVudF07Ci0g
ICAgW3N1cGVyIGRldGFjaF07Ci19Ci0KLS0gKGlkKWF0dGFjaG1lbnRWaWV3Ci17Ci0gICAgQVNT
RVJUKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSk7Ci0gICAgV2lkZ2V0KiB3aWRnZXQgPSBtX29i
amVjdC0+d2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBpZiAoIXdpZGdldCkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkRGVzY2Vu
ZGFudCh3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpOwotfQotCi0jcHJhZ21hIG1hcmsgU3lzdGVt
SW50ZXJmYWNlIHdyYXBwZXJzCi0KLXN0YXRpYyBpbmxpbmUgaWQgQ0ZBdXRvcmVsZWFzZUhlbHBl
cihDRlR5cGVSZWYgb2JqKQotewotICAgIGlmIChvYmopCi0gICAgICAgIENGTWFrZUNvbGxlY3Rh
YmxlKG9iaik7Ci0gICAgWyhpZClvYmogYXV0b3JlbGVhc2VdOwotICAgIHJldHVybiAoaWQpb2Jq
OwotfQotCi1zdGF0aWMgaW5saW5lIEJPT0wgQVhPYmplY3RJc1RleHRNYXJrZXIoaWQgb2JqKQot
ewotICAgIHJldHVybiBvYmogIT0gbmlsICYmIENGR2V0VHlwZUlEKG9iaikgPT0gd2tHZXRBWFRl
eHRNYXJrZXJUeXBlSUQoKTsKLX0KLQotc3RhdGljIGlubGluZSBCT09MIEFYT2JqZWN0SXNUZXh0
TWFya2VyUmFuZ2UoaWQgb2JqKQotewotICAgIHJldHVybiBvYmogIT0gbmlsICYmIENGR2V0VHlw
ZUlEKG9iaikgPT0gd2tHZXRBWFRleHRNYXJrZXJSYW5nZVR5cGVJRCgpOwotfQotCi1zdGF0aWMg
aWQgQVhUZXh0TWFya2VyUmFuZ2UoaWQgc3RhcnRNYXJrZXIsIGlkIGVuZE1hcmtlcikKLXsKLSAg
ICBBU1NFUlQoc3RhcnRNYXJrZXIgIT0gbmlsKTsKLSAgICBBU1NFUlQoZW5kTWFya2VyICE9IG5p
bCk7Ci0gICAgQVNTRVJUKENGR2V0VHlwZUlEKHN0YXJ0TWFya2VyKSA9PSB3a0dldEFYVGV4dE1h
cmtlclR5cGVJRCgpKTsKLSAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQoZW5kTWFya2VyKSA9PSB3a0dl
dEFYVGV4dE1hcmtlclR5cGVJRCgpKTsKLSAgICByZXR1cm4gQ0ZBdXRvcmVsZWFzZUhlbHBlcih3
a0NyZWF0ZUFYVGV4dE1hcmtlclJhbmdlKChDRlR5cGVSZWYpc3RhcnRNYXJrZXIsIChDRlR5cGVS
ZWYpZW5kTWFya2VyKSk7Ci19Ci0KLXN0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KGlk
IHJhbmdlKQotewotICAgIEFTU0VSVChyYW5nZSAhPSBuaWwpOwotICAgIEFTU0VSVChDRkdldFR5
cGVJRChyYW5nZSkgPT0gd2tHZXRBWFRleHRNYXJrZXJSYW5nZVR5cGVJRCgpKTsKLSAgICByZXR1
cm4gQ0ZBdXRvcmVsZWFzZUhlbHBlcih3a0NvcHlBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHJhbmdl
KSk7Ci19Ci0KLXN0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5nZUVuZChpZCByYW5nZSkKLXsKLSAg
ICBBU1NFUlQocmFuZ2UgIT0gbmlsKTsKLSAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQocmFuZ2UpID09
IHdrR2V0QVhUZXh0TWFya2VyUmFuZ2VUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIENGQXV0b3JlbGVh
c2VIZWxwZXIod2tDb3B5QVhUZXh0TWFya2VyUmFuZ2VFbmQocmFuZ2UpKTsKLX0KLQotI3ByYWdt
YSBtYXJrIFNlYXJjaCBoZWxwZXJzCi0KLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEFjY2Vzc2li
aWxpdHlTZWFyY2hLZXk+IEFjY2Vzc2liaWxpdHlTZWFyY2hLZXlNYXA7Ci0KLXN0cnVjdCBTZWFy
Y2hLZXlFbnRyeSB7Ci0gICAgU3RyaW5nIGtleTsKLSAgICBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5
IHZhbHVlOwotfTsKLQotc3RhdGljIEFjY2Vzc2liaWxpdHlTZWFyY2hLZXlNYXAqIGNyZWF0ZUFj
Y2Vzc2liaWxpdHlTZWFyY2hLZXlNYXAoKQotewotICAgIGNvbnN0IFNlYXJjaEtleUVudHJ5IHNl
YXJjaEtleXNbXSA9IHsKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlBbnlUeXBlU2VhcmNoS2V5
LCBBbnlUeXBlU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5QmxvY2txdW90
ZVNhbWVMZXZlbFNlYXJjaEtleSwgQmxvY2txdW90ZVNhbWVMZXZlbFNlYXJjaEtleSB9LAotICAg
ICAgICB7IE5TQWNjZXNzaWJpbGl0eUJsb2NrcXVvdGVTZWFyY2hLZXksIEJsb2NrcXVvdGVTZWFy
Y2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlCb2xkRm9udFNlYXJjaEtleSwgQm9s
ZEZvbnRTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlCdXR0b25TZWFyY2hL
ZXksIEJ1dHRvblNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUNoZWNrQm94
U2VhcmNoS2V5LCBDaGVja0JveFNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0
eUNvbnRyb2xTZWFyY2hLZXksIENvbnRyb2xTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vz
c2liaWxpdHlEaWZmZXJlbnRUeXBlU2VhcmNoS2V5LCBEaWZmZXJlbnRUeXBlU2VhcmNoS2V5IH0s
Ci0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5Rm9udENoYW5nZVNlYXJjaEtleSwgRm9udENoYW5n
ZVNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUZvbnRDb2xvckNoYW5nZVNl
YXJjaEtleSwgRm9udENvbG9yQ2hhbmdlU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3Np
YmlsaXR5RnJhbWVTZWFyY2hLZXksIEZyYW1lU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nl
c3NpYmlsaXR5R3JhcGhpY1NlYXJjaEtleSwgR3JhcGhpY1NlYXJjaEtleSB9LAotICAgICAgICB7
IE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDFTZWFyY2hLZXksIEhlYWRpbmdMZXZlbDFTZWFy
Y2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwyU2VhcmNoS2V5
LCBIZWFkaW5nTGV2ZWwyU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVh
ZGluZ0xldmVsM1NlYXJjaEtleSwgSGVhZGluZ0xldmVsM1NlYXJjaEtleSB9LAotICAgICAgICB7
IE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDRTZWFyY2hLZXksIEhlYWRpbmdMZXZlbDRTZWFy
Y2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw1U2VhcmNoS2V5
LCBIZWFkaW5nTGV2ZWw1U2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVh
ZGluZ0xldmVsNlNlYXJjaEtleSwgSGVhZGluZ0xldmVsNlNlYXJjaEtleSB9LAotICAgICAgICB7
IE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdTYW1lTGV2ZWxTZWFyY2hLZXksIEhlYWRpbmdTYW1lTGV2
ZWxTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nU2VhcmNoS2V5
LCBIZWFkaW5nU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGlnaGxpZ2h0
ZWRTZWFyY2hLZXksIEhpZ2hsaWdodGVkU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3Np
YmlsaXR5SXRhbGljRm9udFNlYXJjaEtleSwgSXRhbGljRm9udFNlYXJjaEtleSB9LAotICAgICAg
ICB7IE5TQWNjZXNzaWJpbGl0eUxhbmRtYXJrU2VhcmNoS2V5LCBMYW5kbWFya1NlYXJjaEtleSB9
LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUxpbmtTZWFyY2hLZXksIExpbmtTZWFyY2hLZXkg
fSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlMaXN0U2VhcmNoS2V5LCBMaXN0U2VhcmNoS2V5
IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvblNlYXJjaEtleSwgTGl2ZVJl
Z2lvblNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eU1pc3NwZWxsZWRXb3Jk
U2VhcmNoS2V5LCBNaXNzcGVsbGVkV29yZFNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNz
aWJpbGl0eVBsYWluVGV4dFNlYXJjaEtleSwgUGxhaW5UZXh0U2VhcmNoS2V5IH0sCi0gICAgICAg
IHsgTlNBY2Nlc3NpYmlsaXR5UmFkaW9Hcm91cFNlYXJjaEtleSwgUmFkaW9Hcm91cFNlYXJjaEtl
eSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVNhbWVUeXBlU2VhcmNoS2V5LCBTYW1lVHlw
ZVNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVN0YXRpY1RleHRTZWFyY2hL
ZXksIFN0YXRpY1RleHRTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlTdHls
ZUNoYW5nZVNlYXJjaEtleSwgU3R5bGVDaGFuZ2VTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0Fj
Y2Vzc2liaWxpdHlUYWJsZVNhbWVMZXZlbFNlYXJjaEtleSwgVGFibGVTYW1lTGV2ZWxTZWFyY2hL
ZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlUYWJsZVNlYXJjaEtleSwgVGFibGVTZWFy
Y2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlUZXh0RmllbGRTZWFyY2hLZXksIFRl
eHRGaWVsZFNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVVuZGVybGluZVNl
YXJjaEtleSwgVW5kZXJsaW5lU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5
VW52aXNpdGVkTGlua1NlYXJjaEtleSwgVW52aXNpdGVkTGlua1NlYXJjaEtleSB9LAotICAgICAg
ICB7IE5TQWNjZXNzaWJpbGl0eVZpc2l0ZWRMaW5rU2VhcmNoS2V5LCBWaXNpdGVkTGlua1NlYXJj
aEtleSB9Ci0gICAgfTsKLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5TWFwKiBzZWFy
Y2hLZXlNYXAgPSBuZXcgQWNjZXNzaWJpbGl0eVNlYXJjaEtleU1hcDsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoc2VhcmNoS2V5cyk7IGkrKykKLSAgICAgICAg
c2VhcmNoS2V5TWFwLT5zZXQoc2VhcmNoS2V5c1tpXS5rZXksIHNlYXJjaEtleXNbaV0udmFsdWUp
OwotICAgIAotICAgIHJldHVybiBzZWFyY2hLZXlNYXA7Ci19Ci0KLXN0YXRpYyBBY2Nlc3NpYmls
aXR5U2VhcmNoS2V5IGFjY2Vzc2liaWxpdHlTZWFyY2hLZXlGb3JTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gQW55
VHlwZVNlYXJjaEtleTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgQWNjZXNzaWJpbGl0eVNlYXJj
aEtleU1hcCogc2VhcmNoS2V5TWFwID0gY3JlYXRlQWNjZXNzaWJpbGl0eVNlYXJjaEtleU1hcCgp
OwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlTZWFyY2hLZXkgc2VhcmNoS2V5ID0gc2VhcmNoS2V5
TWFwLT5nZXQodmFsdWUpOwotICAgIAotICAgIHJldHVybiBzZWFyY2hLZXkgPyBzZWFyY2hLZXkg
OiBBbnlUeXBlU2VhcmNoS2V5OwotfQotCi0jcHJhZ21hIG1hcmsgVGV4dCBNYXJrZXIgaGVscGVy
cwotCi1zdGF0aWMgaWQgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihBWE9iamVjdENhY2hl
KiBjYWNoZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQotewotICAgIEFTU0VS
VChjYWNoZSk7Ci0gICAgCi0gICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7Ci0gICAg
Y2FjaGUtPnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLCB2
aXNpYmxlUG9zKTsKLSAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4SUQpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgCi0gICAgcmV0dXJuIENGQXV0b3JlbGVhc2VIZWxwZXIod2tDcmVhdGVBWFRl
eHRNYXJrZXIoJnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1hcmtlckRhdGEpKSk7Ci19Ci0K
LS0gKGlkKXRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFZpc2libGVQb3NpdGlv
biAmKXZpc2libGVQb3MKLXsKLSAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlv
bihtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB2aXNpYmxlUG9zKTsKLX0KLQotc3RhdGljIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUq
IGNhY2hlLCBDRlR5cGVSZWYgdGV4dE1hcmtlcikKLXsKLSAgICBBU1NFUlQoY2FjaGUpOwotICAg
IAotICAgIGlmICghdGV4dE1hcmtlcikKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigp
OwotICAgIFRleHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOwotICAgIGlmICghd2tHZXRCeXRl
c0Zyb21BWFRleHRNYXJrZXIodGV4dE1hcmtlciwgJnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4
dE1hcmtlckRhdGEpKSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwotICAgIAot
ICAgIHJldHVybiBjYWNoZS0+dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEodGV4dE1h
cmtlckRhdGEpOwotfQotCi0tIChWaXNpYmxlUG9zaXRpb24pdmlzaWJsZVBvc2l0aW9uRm9yVGV4
dE1hcmtlcjooaWQpdGV4dE1hcmtlcgotewotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXIpOwotfQotCi1z
dGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2Vy
UmFuZ2UoQVhPYmplY3RDYWNoZSAqY2FjaGUsIGlkIHRleHRNYXJrZXJSYW5nZSkKLXsKLSAgICBy
ZXR1cm4gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNoZSwgQVhUZXh0TWFya2VyUmFu
Z2VTdGFydCh0ZXh0TWFya2VyUmFuZ2UpKTsKLX0KLQotc3RhdGljIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zaXRpb25Gb3JFbmRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hlICpjYWNo
ZSwgaWQgdGV4dE1hcmtlclJhbmdlKQotewotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyKGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZUVuZCh0ZXh0TWFya2VyUmFuZ2UpKTsK
LX0KLQotc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21NYXJrZXJzKGlkIHRleHRNYXJrZXIx
LCBpZCB0ZXh0TWFya2VyMikKLXsKLSAgICBpZiAoIXRleHRNYXJrZXIxIHx8ICF0ZXh0TWFya2Vy
MikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICByZXR1cm4gQVhUZXh0TWFya2VyUmFu
Z2UodGV4dE1hcmtlcjEsIHRleHRNYXJrZXIyKTsKLX0KLQotLy8gV2hlbiBtb2RpZnlpbmcgYXR0
cmlidXRlZCBzdHJpbmdzLCB0aGUgcmFuZ2UgY2FuIGNvbWUgZnJvbSBhIHNvdXJjZSB3aGljaCBt
YXkgcHJvdmlkZSBmYXVsdHkgaW5mb3JtYXRpb24gKGUuZy4gdGhlIHNwZWxsIGNoZWNrZXIpLgot
Ly8gVG8gcHJvdGVjdCBhZ2FpbnN0IHN1Y2ggY2FzZXMgdGhlIHJhbmdlIHNob3VsZCBiZSB2YWxp
ZGF0ZWQgYmVmb3JlIGFkZGluZyBvciByZW1vdmluZyBhdHRyaWJ1dGVzLgotc3RhdGljIEJPT0wg
QVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKE5TQXR0cmlidXRlZFN0cmluZyogYXR0clN0
cmluZywgTlNSYW5nZSByYW5nZSkKLXsKLSAgICByZXR1cm4gKHJhbmdlLmxvY2F0aW9uIDwgW2F0
dHJTdHJpbmcgbGVuZ3RoXSAmJiBOU01heFJhbmdlKHJhbmdlKSA8PSBbYXR0clN0cmluZyBsZW5n
dGhdKTsKLX0KLQotc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1dGUsIE5TRm9u
dCogZm9udCwgTlNSYW5nZSByYW5nZSkKLXsKLSAgICBpZiAoIUFYQXR0cmlidXRlZFN0cmluZ1Jh
bmdlSXNWYWxpZChhdHRyU3RyaW5nLCByYW5nZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBpZiAoZm9udCkgewotICAgICAgICBOU0RpY3Rpb25hcnkqIGRpY3QgPSBbTlNEaWN0aW9uYXJ5
IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbZm9udCBmb250TmFtZV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgTlNBY2Nl
c3NpYmlsaXR5Rm9udE5hbWVLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9u
dCBmYW1pbHlOYW1lXSAgICAgICAgICAgICAgICAgICAgICAgICAgICwgTlNBY2Nlc3NpYmlsaXR5
Rm9udEZhbWlseUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb250IGRpc3Bs
YXlOYW1lXSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlWaXNpYmxl
TmFtZUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6W2ZvbnQgcG9pbnRTaXplXV0gLCBOU0FjY2Vzc2liaWxpdHlGb250U2l6ZUtleSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF07Ci0gICAgICAgIAotICAgICAgICBb
YXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6YXR0cmlidXRlIHZhbHVlOmRpY3QgcmFuZ2U6cmFuZ2Vd
OwotICAgIH0gZWxzZQotICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6YXR0cmli
dXRlIHJhbmdlOnJhbmdlXTsKLSAgICAKLX0KLQotc3RhdGljIENHQ29sb3JSZWYgQ3JlYXRlQ0dD
b2xvcklmRGlmZmVyZW50KE5TQ29sb3IqIG5zQ29sb3IsIENHQ29sb3JSZWYgZXhpc3RpbmdDb2xv
cikKLXsKLSAgICAvLyBnZXQgY29sb3IgaW5mb3JtYXRpb24gYXNzdW1pbmcgTlNEZXZpY2VSR0JD
b2xvclNwYWNlCi0gICAgTlNDb2xvciogcmdiQ29sb3IgPSBbbnNDb2xvciBjb2xvclVzaW5nQ29s
b3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKLSAgICBpZiAocmdiQ29sb3IgPT0g
bmlsKQotICAgICAgICByZ2JDb2xvciA9IFtOU0NvbG9yIGJsYWNrQ29sb3JdOwotICAgIENHRmxv
YXQgY29tcG9uZW50c1s0XTsKLSAgICBbcmdiQ29sb3IgZ2V0UmVkOiZjb21wb25lbnRzWzBdIGdy
ZWVuOiZjb21wb25lbnRzWzFdIGJsdWU6JmNvbXBvbmVudHNbMl0gYWxwaGE6JmNvbXBvbmVudHNb
M11dOwotICAgIAotICAgIC8vIGNyZWF0ZSBhIG5ldyBDR0NvbG9yUmVmIHRvIHJldHVybgotICAg
IENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VS
R0IoKTsKLSAgICBDR0NvbG9yUmVmIGNnQ29sb3IgPSBDR0NvbG9yQ3JlYXRlKGNnQ29sb3JTcGFj
ZSwgY29tcG9uZW50cyk7Ci0gICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjZ0NvbG9yU3BhY2UpOwot
ICAgIAotICAgIC8vIGNoZWNrIGZvciBtYXRjaCB3aXRoIGV4aXN0aW5nIGNvbG9yCi0gICAgaWYg
KGV4aXN0aW5nQ29sb3IgJiYgQ0dDb2xvckVxdWFsVG9Db2xvcihjZ0NvbG9yLCBleGlzdGluZ0Nv
bG9yKSkgewotICAgICAgICBDR0NvbG9yUmVsZWFzZShjZ0NvbG9yKTsKLSAgICAgICAgY2dDb2xv
ciA9IDA7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjZ0NvbG9yOwotfQotCi1zdGF0aWMgdm9p
ZCBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0
dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1dGUsIE5TQ29sb3IqIGNvbG9yLCBOU1JhbmdlIHJh
bmdlKQotewotICAgIGlmICghQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJp
bmcsIHJhbmdlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChjb2xvcikgewotICAg
ICAgICBDR0NvbG9yUmVmIGV4aXN0aW5nQ29sb3IgPSAoQ0dDb2xvclJlZikgW2F0dHJTdHJpbmcg
YXR0cmlidXRlOmF0dHJpYnV0ZSBhdEluZGV4OnJhbmdlLmxvY2F0aW9uIGVmZmVjdGl2ZVJhbmdl
Om5pbF07Ci0gICAgICAgIENHQ29sb3JSZWYgY2dDb2xvciA9IENyZWF0ZUNHQ29sb3JJZkRpZmZl
cmVudChjb2xvciwgZXhpc3RpbmdDb2xvcik7Ci0gICAgICAgIGlmIChjZ0NvbG9yKSB7Ci0gICAg
ICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6YXR0cmlidXRlIHZhbHVlOihpZCljZ0Nv
bG9yIHJhbmdlOnJhbmdlXTsKLSAgICAgICAgICAgIENHQ29sb3JSZWxlYXNlKGNnQ29sb3IpOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0
ZTphdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOwotfQotCi1zdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0
cmluZ1NldE51bWJlcihOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOU1N0
cmluZyogYXR0cmlidXRlLCBOU051bWJlciogbnVtYmVyLCBOU1JhbmdlIHJhbmdlKQotewotICAg
IGlmICghQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJhbmdlKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChudW1iZXIpCi0gICAgICAgIFthdHRyU3Ry
aW5nIGFkZEF0dHJpYnV0ZTphdHRyaWJ1dGUgdmFsdWU6bnVtYmVyIHJhbmdlOnJhbmdlXTsKLSAg
ICBlbHNlCi0gICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTphdHRyaWJ1dGUgcmFu
Z2U6cmFuZ2VdOwotfQotCi1zdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIE5TUmFuZ2UgcmFuZ2UpCi17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIt
PnN0eWxlKCk7Ci0gICAgCi0gICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAgIEFYQXR0cmli
dXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4dEF0dHJp
YnV0ZSwgc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSwgcmFuZ2UpOwot
ICAgIAotICAgIC8vIHNldCBiYXNpYyBjb2xvcnMKLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENv
bG9yKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1
dGUsIG5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9y
KSksIHJhbmdlKTsKLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJTdHJpbmcsIE5T
QWNjZXNzaWJpbGl0eUJhY2tncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29sb3Ioc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpLCByYW5n
ZSk7Ci0gICAgCi0gICAgLy8gc2V0IHN1cGVyL3N1YiBzY3JpcHRpbmcKLSAgICBFVmVydGljYWxB
bGlnbiBhbGlnbm1lbnQgPSBzdHlsZS0+dmVydGljYWxBbGlnbigpOwotICAgIGlmIChhbGlnbm1l
bnQgPT0gU1VCKQotICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5n
LCBOU0FjY2Vzc2liaWxpdHlTdXBlcnNjcmlwdFRleHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1i
ZXJXaXRoSW50OigtMSldLCByYW5nZSk7Ci0gICAgZWxzZSBpZiAoYWxpZ25tZW50ID09IFNVUEVS
KQotICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vz
c2liaWxpdHlTdXBlcnNjcmlwdFRleHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoSW50
OjFdLCByYW5nZSk7Ci0gICAgZWxzZQotICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1
dGU6TlNBY2Nlc3NpYmlsaXR5U3VwZXJzY3JpcHRUZXh0QXR0cmlidXRlIHJhbmdlOnJhbmdlXTsK
LSAgICAKLSAgICAvLyBzZXQgc2hhZG93Ci0gICAgaWYgKHN0eWxlLT50ZXh0U2hhZG93KCkpCi0g
ICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJp
bGl0eVNoYWRvd1RleHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBy
YW5nZSk7Ci0gICAgZWxzZQotICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNB
Y2Nlc3NpYmlsaXR5U2hhZG93VGV4dEF0dHJpYnV0ZSByYW5nZTpyYW5nZV07Ci0gICAgCi0gICAg
Ly8gc2V0IHVuZGVybGluZSBhbmQgc3RyaWtldGhyb3VnaAotICAgIGludCBkZWNvciA9IHN0eWxl
LT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwotICAgIGlmICgoZGVjb3IgJiBVTkRFUkxJTkUp
ID09IDApIHsKLSAgICAgICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNjZXNzaWJp
bGl0eVVuZGVybGluZVRleHRBdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOwotICAgICAgICBbYXR0clN0
cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5VW5kZXJsaW5lQ29sb3JUZXh0QXR0
cmlidXRlIHJhbmdlOnJhbmdlXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKChkZWNvciAmIExJTkVf
VEhST1VHSCkgPT0gMCkgewotICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNB
Y2Nlc3NpYmlsaXR5U3RyaWtldGhyb3VnaFRleHRBdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOwotICAg
ICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5U3RyaWtldGhy
b3VnaENvbG9yVGV4dEF0dHJpYnV0ZSByYW5nZTpyYW5nZV07Ci0gICAgfQotICAgIAotICAgIGlm
ICgoZGVjb3IgJiAoVU5ERVJMSU5FIHwgTElORV9USFJPVUdIKSkgIT0gMCkgewotICAgICAgICAv
LyBmaW5kIGNvbG9ycyB1c2luZyBxdWlyayBtb2RlIGFwcHJvYWNoIChzdHJpY3QgbW9kZSB3b3Vs
ZCB1c2UgY3VycmVudAotICAgICAgICAvLyBjb2xvciBmb3IgYWxsIGJ1dCB0aGUgcm9vdCBsaW5l
IGJveCwgd2hpY2ggd291bGQgdXNlIGdldFRleHREZWNvcmF0aW9uQ29sb3JzKQotICAgICAgICBD
b2xvciB1bmRlcmxpbmUsIG92ZXJsaW5lLCBsaW5ldGhyb3VnaDsKLSAgICAgICAgcmVuZGVyZXIt
PmdldFRleHREZWNvcmF0aW9uQ29sb3JzKGRlY29yLCB1bmRlcmxpbmUsIG92ZXJsaW5lLCBsaW5l
dGhyb3VnaCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoKGRlY29yICYgVU5ERVJMSU5FKSAhPSAw
KSB7Ci0gICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBO
U0FjY2Vzc2liaWxpdHlVbmRlcmxpbmVUZXh0QXR0cmlidXRlLCBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6WUVTXSwgcmFuZ2UpOwotICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRDb2xv
cihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlVbmRlcmxpbmVDb2xvclRleHRBdHRyaWJ1dGUs
IG5zQ29sb3IodW5kZXJsaW5lKSwgcmFuZ2UpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoKGRlY29yICYgTElORV9USFJPVUdIKSAhPSAwKSB7Ci0gICAgICAgICAgICBBWEF0dHJp
YnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlTdHJpa2V0aHJv
dWdoVGV4dEF0dHJpYnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIHJhbmdlKTsK
LSAgICAgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nl
c3NpYmlsaXR5U3RyaWtldGhyb3VnaENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihsaW5ldGhy
b3VnaCksIHJhbmdlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBJbmRpY2F0ZSBi
YWNrZ3JvdW5kIGhpZ2hsaWdodGluZy4KLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByZW5kZXJlci0+
bm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKG1hcmtUYWcpKQotICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdT
ZXROdW1iZXIoYXR0clN0cmluZywgQCJBWEhpZ2hsaWdodCIsIFtOU051bWJlciBudW1iZXJXaXRo
Qm9vbDpZRVNdLCByYW5nZSk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0
cmluZ1NldEJsb2NrcXVvdGVMZXZlbChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3Ry
aW5nLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBOU1JhbmdlIHJhbmdlKQotewotICAgIGlmICgh
QVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJhbmdlKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IHJlbmRlcmVy
LT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlcmVyKTsKLSAg
ICBpbnQgcXVvdGVMZXZlbCA9IG9iai0+YmxvY2txdW90ZUxldmVsKCk7Ci0gICAgCi0gICAgaWYg
KHF1b3RlTGV2ZWwpCi0gICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTpOU0FjY2Vzc2li
aWxpdHlCbG9ja1F1b3RlTGV2ZWxBdHRyaWJ1dGUgdmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhJ
bnQ6cXVvdGVMZXZlbF0gcmFuZ2U6cmFuZ2VdOwotICAgIGVsc2UKLSAgICAgICAgW2F0dHJTdHJp
bmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0
ZSByYW5nZTpyYW5nZV07Ci19Ci0KLXN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3Bl
bGxpbmcoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgTm9kZSogbm9kZSwg
Y29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgY2hhckxlbmd0aCwgTlNSYW5nZSByYW5nZSkKLXsKLSAg
ICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgp
KSkgewotICAgICAgICAvLyBDaGVjayB0aGUgc3BlbGxpbmcgZGlyZWN0bHkgc2luY2UgZG9jdW1l
bnQtPm1hcmtlcnNGb3JOb2RlKCkgZG9lcyBub3Qgc3RvcmUgdGhlIG1pc3NwZWxsZWQgbWFya2lu
ZyB3aGVuIHRoZSBjdXJzb3IgaXMgaW4gYSB3b3JkLgotICAgICAgICBUZXh0Q2hlY2tlckNsaWVu
dCogY2hlY2tlciA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT50ZXh0Q2hl
Y2tlcigpOwotICAgICAgICAKLSAgICAgICAgLy8gY2hlY2tUZXh0T2ZQYXJhZ3JhcGggaXMgdGhl
IG9ubHkgc3BlbGxpbmcvZ3JhbW1hciBjaGVja2VyIGltcGxlbWVudGVkIGluIFdLMSBhbmQgV0sy
Ci0gICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgICAgIGNo
ZWNrVGV4dE9mUGFyYWdyYXBoKGNoZWNrZXIsIGNoYXJzLCBjaGFyTGVuZ3RoLCBUZXh0Q2hlY2tp
bmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMpOwotICAgICAgICAKLSAgICAgICAgc2l6ZV90IHNpemUg
PSByZXN1bHRzLnNpemUoKTsKLSAgICAgICAgTlNOdW1iZXIqIHRydWVWYWx1ZSA9IFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpZRVNdOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3Vs
dCA9IHJlc3VsdHNbaV07Ci0gICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihh
dHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlNaXNzcGVsbGVkVGV4dEF0dHJpYnV0ZSwgdHJ1ZVZh
bHVlLCBOU01ha2VSYW5nZShyZXN1bHQubG9jYXRpb24gKyByYW5nZS5sb2NhdGlvbiwgcmVzdWx0
Lmxlbmd0aCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
aW50IGN1cnJlbnRQb3NpdGlvbiA9IDA7Ci0gICAgd2hpbGUgKGNoYXJMZW5ndGggPiAwKSB7Ci0g
ICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyRGF0YSA9IGNoYXJzICsgY3VycmVudFBvc2l0aW9uOwot
ICAgICAgICBUZXh0Q2hlY2tlckNsaWVudCogY2hlY2tlciA9IG5vZGUtPmRvY3VtZW50KCktPmZy
YW1lKCktPmVkaXRvcigpLT50ZXh0Q2hlY2tlcigpOwotICAgICAgICAKLSAgICAgICAgaW50IG1p
c3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKLSAgICAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0g
MDsKLSAgICAgICAgY2hlY2tlci0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNoYXJEYXRhLCBjaGFy
TGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICAg
ICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPT0gLTEgfHwgIW1pc3NwZWxsaW5nTGVuZ3RoKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBOU1JhbmdlIHNwZWxsUmFuZ2Ug
PSBOU01ha2VSYW5nZShyYW5nZS5sb2NhdGlvbiArIGN1cnJlbnRQb3NpdGlvbiArIG1pc3NwZWxs
aW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICAgICAgQVhBdHRyaWJ1dGVTdHJp
bmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFRleHRBdHRy
aWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBzcGVsbFJhbmdlKTsKLSAgICAg
ICAgY2hhckxlbmd0aCAtPSAobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3Ro
KTsKLSAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IChtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlz
c3BlbGxpbmdMZW5ndGgpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJp
bmdTZXRIZWFkaW5nTGV2ZWwoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgTlNSYW5nZSByYW5nZSkKLXsKLSAgICBpZiAoIXJlbmRl
cmVyKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFBWEF0dHJpYnV0ZWRTdHJpbmdS
YW5nZUlzVmFsaWQoYXR0clN0cmluZywgcmFuZ2UpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgLy8gU29tZXRpbWVzIHRoZXJlIGFyZSBvYmplY3RzIGJldHdlZW4gdGhlIHRleHQgYW5kIHRo
ZSBoZWFkaW5nLgotICAgIC8vIEluIHRob3NlIGNhc2VzIHRoZSBwYXJlbnQgaGllcmFyY2h5IHNo
b3VsZCBiZSBxdWVyaWVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGhlYWRpbmcgbGV2ZWwuCi0gICAg
aW50IHBhcmVudEhlYWRpbmdMZXZlbCA9IDA7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFy
ZW50T2JqZWN0ID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUocmVuZGVyZXItPnBhcmVudCgpKTsKLSAgICBmb3IgKDsgcGFyZW50T2JqZWN0OyBwYXJl
bnRPYmplY3QgPSBwYXJlbnRPYmplY3QtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgIHBhcmVu
dEhlYWRpbmdMZXZlbCA9IHBhcmVudE9iamVjdC0+aGVhZGluZ0xldmVsKCk7Ci0gICAgICAgIGlm
IChwYXJlbnRIZWFkaW5nTGV2ZWwpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKHBhcmVudEhlYWRpbmdMZXZlbCkKLSAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmli
dXRlOkAiQVhIZWFkaW5nTGV2ZWwiIHZhbHVlOltOU051bWJlciBudW1iZXJXaXRoSW50OnBhcmVu
dEhlYWRpbmdMZXZlbF0gcmFuZ2U6cmFuZ2VdOwotICAgIGVsc2UKLSAgICAgICAgW2F0dHJTdHJp
bmcgcmVtb3ZlQXR0cmlidXRlOkAiQVhIZWFkaW5nTGV2ZWwiIHJhbmdlOnJhbmdlXTsKLX0KLQot
c3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRFbGVtZW50KE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1dGUsIEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iamVjdCwgTlNSYW5nZSByYW5nZSkKLXsKLSAgICBpZiAoIUFYQXR0cmlidXRlZFN0
cmluZ1JhbmdlSXNWYWxpZChhdHRyU3RyaW5nLCByYW5nZSkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBpZiAob2JqZWN0ICYmIG9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
KCkpIHsKLSAgICAgICAgLy8gbWFrZSBhIHNlcmlhbGl6YWJsZSBBWCBvYmplY3QKLSAgICAgICAg
Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Kj4ob2JqZWN0KS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5k
ZXJlcikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIERvY3VtZW50KiBk
b2MgPSByZW5kZXJlci0+ZG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKCFkb2MpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvYy0+
YXhPYmplY3RDYWNoZSgpOwotICAgICAgICBpZiAoIWNhY2hlKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICAgICAgQVhVSUVsZW1lbnRSZWYgYXhFbGVtZW50ID0gd2tDcmVhdGVB
WFVJRWxlbWVudFJlZihvYmplY3QtPndyYXBwZXIoKSk7Ci0gICAgICAgIGlmIChheEVsZW1lbnQp
IHsKLSAgICAgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTphdHRyaWJ1dGUgdmFsdWU6
KGlkKWF4RWxlbWVudCByYW5nZTpyYW5nZV07Ci0gICAgICAgICAgICBDRlJlbGVhc2UoYXhFbGVt
ZW50KTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBbYXR0clN0cmluZyByZW1vdmVB
dHRyaWJ1dGU6YXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKLX0KLQotc3RhdGljIHZvaWQgQVhBdHRy
aWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3Ry
aW5nLCBOb2RlKiBub2RlLCBjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW5ndGgpCi17Ci0gICAg
Ly8gc2tpcCBpbnZpc2libGUgdGV4dAotICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIC8vIGVhc2llciB0byBjYWxjdWxhdGUgdGhlIHJhbmdlIGJl
Zm9yZSBhcHBlbmRpbmcgdGhlIHN0cmluZwotICAgIE5TUmFuZ2UgYXR0clN0cmluZ1JhbmdlID0g
TlNNYWtlUmFuZ2UoW2F0dHJTdHJpbmcgbGVuZ3RoXSwgbGVuZ3RoKTsKLSAgICAKLSAgICAvLyBh
cHBlbmQgdGhlIHN0cmluZyBmcm9tIHRoaXMgbm9kZQotICAgIFtbYXR0clN0cmluZyBtdXRhYmxl
U3RyaW5nXSBhcHBlbmRTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOmNoYXJz
IGxlbmd0aDpsZW5ndGhdXTsKLSAgICAKLSAgICAvLyBhZGQgbmV3IGF0dHJpYnV0ZXMgYW5kIHJl
bW92ZSBpcnJlbGV2YW50IGluaGVyaXRlZCBvbmVzCi0gICAgLy8gTk9URTogY29sb3IgYXR0cmli
dXRlcyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYmVjYXVzZSAtW05TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgYWRkQXR0cmlidXRlOiB2YWx1ZTogcmFuZ2U6XSBkb2VzIG5vdCBtZXJnZQotICAgIC8v
IGlkZW50aWNhbCBjb2xvcnMuICBXb3JrYXJvdW5kIGlzIHRvIG5vdCByZXBsYWNlIGFuIGV4aXN0
aW5nIGNvbG9yIGF0dHJpYnV0ZSBpZiBpdCBtYXRjaGVzIHdoYXQgd2UgYXJlIGFkZGluZy4gIFRo
aXMgYWxzbyBtZWFucwotICAgIC8vIHdlIGNhbm5vdCBqdXN0IHByZS1yZW1vdmUgYWxsIGluaGVy
aXRlZCBhdHRyaWJ1dGVzIG9uIHRoZSBhcHBlbmRlZCBzdHJpbmcsIHNvIHdlIGhhdmUgdG8gcmVt
b3ZlIHRoZSBpcnJlbGV2YW50IG9uZXMgaW5kaXZpZHVhbGx5LgotICAgIAotICAgIC8vIHJlbW92
ZSBpbmhlcml0ZWQgYXR0YWNobWVudCBmcm9tIHByaW9yIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVu
ZFJlcGxhY2VkCi0gICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0
eUF0dGFjaG1lbnRUZXh0QXR0cmlidXRlIHJhbmdlOmF0dHJTdHJpbmdSYW5nZV07Ci0gICAgW2F0
dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eU1pc3NwZWxsZWRUZXh0QXR0
cmlidXRlIHJhbmdlOmF0dHJTdHJpbmdSYW5nZV07Ci0gICAgCi0gICAgLy8gc2V0IG5ldyBhdHRy
aWJ1dGVzCi0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShhdHRyU3RyaW5nLCBub2RlLT5y
ZW5kZXJlcigpLCBhdHRyU3RyaW5nUmFuZ2UpOwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0SGVh
ZGluZ0xldmVsKGF0dHJTdHJpbmcsIG5vZGUtPnJlbmRlcmVyKCksIGF0dHJTdHJpbmdSYW5nZSk7
Ci0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRCbG9ja3F1b3RlTGV2ZWwoYXR0clN0cmluZywgbm9k
ZS0+cmVuZGVyZXIoKSwgYXR0clN0cmluZ1JhbmdlKTsKLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1Nl
dEVsZW1lbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TGlua1RleHRBdHRyaWJ1dGUsIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmFuY2hvckVsZW1lbnRGb3JOb2RlKG5vZGUpLCBhdHRyU3RyaW5n
UmFuZ2UpOwotICAgIAotICAgIC8vIGRvIHNwZWxsaW5nIGxhc3QgYmVjYXVzZSBpdCB0ZW5kcyB0
byBicmVhayB1cCB0aGUgcmFuZ2UKLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldFNwZWxsaW5nKGF0
dHJTdHJpbmcsIG5vZGUsIGNoYXJzLCBsZW5ndGgsIGF0dHJTdHJpbmdSYW5nZSk7Ci19Ci0KLXN0
YXRpYyBOU1N0cmluZyogbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2Rl
KQotewotICAgIC8vIHdlIHNob3VsZCBhbHdheXMgYmUgZ2l2ZW4gYSByZW5kZXJlZCBub2RlIGFu
ZCBhIHJlcGxhY2VkIG5vZGUsIGJ1dCBiZSBzYWZlCi0gICAgLy8gcmVwbGFjZWQgbm9kZXMgYXJl
IGVpdGhlciBhdHRhY2htZW50cyAod2lkZ2V0cykgb3IgaW1hZ2VzCi0gICAgaWYgKCFyZXBsYWNl
ZE5vZGUgfHwgIXJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKSB8fCAhcmVwbGFjZWROb2RlLT5yZW5k
ZXJlcigpLT5pc1JlcGxhY2VkKCkgfHwgcmVwbGFjZWROb2RlLT5pc1RleHROb2RlKCkpIHsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQot
ICAgIAotICAgIC8vIGNyZWF0ZSBhbiBBWCBvYmplY3QsIGJ1dCBza2lwIGl0IGlmIGl0IGlzIG5v
dCBzdXBwb3NlZCB0byBiZSBzZWVuCi0gICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9i
aiA9IHJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgp
LT5nZXRPckNyZWF0ZShyZXBsYWNlZE5vZGUtPnJlbmRlcmVyKCkpOwotICAgIGlmIChvYmotPmFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICAv
LyB1c2UgdGhlIGF0dGFjaG1lbnRDaGFyYWN0ZXIgdG8gcmVwcmVzZW50IHRoZSByZXBsYWNlZCBu
b2RlCi0gICAgY29uc3QgVW5pQ2hhciBhdHRhY2htZW50Q2hhciA9IE5TQXR0YWNobWVudENoYXJh
Y3RlcjsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZhdHRhY2ht
ZW50Q2hhciBsZW5ndGg6MV07Ci19Ci0KLS0gKE5TQXR0cmlidXRlZFN0cmluZyopZG9BWEF0dHJp
YnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJSYW5nZQotewotICAg
IGlmICghbV9vYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgLy8gZXh0cmFj
dCB0aGUgc3RhcnQgYW5kIGVuZCBWaXNpYmxlUG9zaXRpb24KLSAgICBWaXNpYmxlUG9zaXRpb24g
c3RhcnRWaXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JTdGFydE9mVGV4dE1hcmtl
clJhbmdlKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJSYW5nZSk7Ci0gICAg
aWYgKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9z
aXRpb25Gb3JFbmRPZlRleHRNYXJrZXJSYW5nZShtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0
ZXh0TWFya2VyUmFuZ2UpOwotICAgIGlmIChlbmRWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJs
ZVBvc2l0aW9uUmFuZ2Uoc3RhcnRWaXNpYmxlUG9zaXRpb24sIGVuZFZpc2libGVQb3NpdGlvbik7
Ci0gICAgLy8gaXRlcmF0ZSBvdmVyIHRoZSByYW5nZSB0byBidWlsZCB0aGUgQVggYXR0cmlidXRl
ZCBzdHJpbmcKLSAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nID0gW1tO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XTsKLSAgICBUZXh0SXRlcmF0b3Ig
aXQobWFrZVJhbmdlKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24pLmdl
dCgpKTsKLSAgICB3aGlsZSAoIWl0LmF0RW5kKCkpIHsKLSAgICAgICAgLy8gbG9jYXRlIHRoZSBu
b2RlIGFuZCBzdGFydGluZyBvZmZzZXQgZm9yIHRoaXMgcmFuZ2UKLSAgICAgICAgaW50IGV4Y2Vw
dGlvbiA9IDA7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBpdC5yYW5nZSgpLT5zdGFydENvbnRhaW5l
cihleGNlcHRpb24pOwotICAgICAgICBBU1NFUlQobm9kZSA9PSBpdC5yYW5nZSgpLT5lbmRDb250
YWluZXIoZXhjZXB0aW9uKSk7Ci0gICAgICAgIGludCBvZmZzZXQgPSBpdC5yYW5nZSgpLT5zdGFy
dE9mZnNldChleGNlcHRpb24pOwotICAgICAgICAKLSAgICAgICAgLy8gbm9uLXplcm8gbGVuZ3Ro
IG1lYW5zIHRleHR1YWwgbm9kZSwgemVybyBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9kZSAoQUtB
ICJhdHRhY2htZW50cyIgaW4gQVgpCi0gICAgICAgIGlmIChpdC5sZW5ndGgoKSAhPSAwKSB7Ci0g
ICAgICAgICAgICAvLyBBZGQgdGhlIHRleHQgb2YgdGhlIGxpc3QgbWFya2VyIGl0ZW0gaWYgbmVj
ZXNzYXJ5LgotICAgICAgICAgICAgU3RyaW5nIGxpc3RNYXJrZXJUZXh0ID0gbV9vYmplY3QtPmxp
c3RNYXJrZXJUZXh0Rm9yTm9kZUFuZFBvc2l0aW9uKG5vZGUsIFZpc2libGVQb3NpdGlvbihpdC5y
YW5nZSgpLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICAgICAgICAgIGlmICghbGlzdE1hcmtlclRl
eHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRl
eHQoYXR0clN0cmluZywgbm9kZSwgbGlzdE1hcmtlclRleHQuY2hhcmFjdGVycygpLCBsaXN0TWFy
a2VyVGV4dC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFYQXR0cmlidXRl
ZFN0cmluZ0FwcGVuZFRleHQoYXR0clN0cmluZywgbm9kZSwgaXQuY2hhcmFjdGVycygpLCBpdC5s
ZW5ndGgoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBOb2RlKiByZXBsYWNlZE5v
ZGUgPSBub2RlLT5jaGlsZE5vZGUob2Zmc2V0KTsKLSAgICAgICAgICAgIE5TU3RyaW5nICphdHRh
Y2htZW50U3RyaW5nID0gbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUocmVwbGFjZWROb2RlKTsKLSAg
ICAgICAgICAgIGlmIChhdHRhY2htZW50U3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgTlNSYW5n
ZSBhdHRyU3RyaW5nUmFuZ2UgPSBOU01ha2VSYW5nZShbYXR0clN0cmluZyBsZW5ndGhdLCBbYXR0
YWNobWVudFN0cmluZyBsZW5ndGhdKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAvLyBhcHBlbmQgdGhlIHBsYWNlaG9sZGVyIHN0cmluZwotICAgICAgICAgICAgICAgIFtbYXR0
clN0cmluZyBtdXRhYmxlU3RyaW5nXSBhcHBlbmRTdHJpbmc6YXR0YWNobWVudFN0cmluZ107Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbCBpbmhlcml0ZWQg
YXR0cmlidXRlcwotICAgICAgICAgICAgICAgIFthdHRyU3RyaW5nIHNldEF0dHJpYnV0ZXM6bmls
IHJhbmdlOmF0dHJTdHJpbmdSYW5nZV07Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgLy8gYWRkIHRoZSBhdHRhY2htZW50IGF0dHJpYnV0ZQotICAgICAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIG9iaiA9IHJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQo
KS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZXBsYWNlZE5vZGUtPnJlbmRlcmVyKCkp
OwotICAgICAgICAgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0RWxlbWVudChhdHRyU3RyaW5n
LCBOU0FjY2Vzc2liaWxpdHlBdHRhY2htZW50VGV4dEF0dHJpYnV0ZSwgb2JqLCBhdHRyU3RyaW5n
UmFuZ2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGl0LmFkdmFuY2UoKTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFthdHRyU3RyaW5nIGF1dG9yZWxlYXNlXTsKLX0KLQot
c3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKEFYT2JqZWN0Q2Fj
aGUgKmNhY2hlLCBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiwgVmlzaWJsZVBvc2l0aW9u
IGVuZFBvc2l0aW9uKQotewotICAgIGlkIHN0YXJ0VGV4dE1hcmtlciA9IHRleHRNYXJrZXJGb3JW
aXNpYmxlUG9zaXRpb24oY2FjaGUsIHN0YXJ0UG9zaXRpb24pOwotICAgIGlkIGVuZFRleHRNYXJr
ZXIgPSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGNhY2hlLCBlbmRQb3NpdGlvbik7Ci0g
ICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21NYXJrZXJzKHN0YXJ0VGV4dE1hcmtlciwgZW5k
VGV4dE1hcmtlcik7Ci19Ci0KLS0gKGlkKXRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRp
b25zOihWaXNpYmxlUG9zaXRpb24pc3RhcnRQb3NpdGlvbiBlbmRQb3NpdGlvbjooVmlzaWJsZVBv
c2l0aW9uKWVuZFBvc2l0aW9uCi17Ci0gICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21WaXNp
YmxlUG9zaXRpb25zKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uKTsKLX0KLQotLSAoTlNBcnJheSopYWNjZXNzaWJpbGl0eUFjdGlvbk5hbWVzCi17
Ci0gICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIAotICAgIHN0YXRpYyBOU0FycmF5KiBhY3Rpb25FbGVtZW50QWN0aW9ucyA9
IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOiBOU0FjY2Vzc2liaWxpdHlQcmVzc0Fj
dGlvbiwgTlNBY2Nlc3NpYmlsaXR5U2hvd01lbnVBY3Rpb24sIG5pbF07Ci0gICAgc3RhdGljIE5T
QXJyYXkqIGRlZmF1bHRFbGVtZW50QWN0aW9ucyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhP
YmplY3RzOiBOU0FjY2Vzc2liaWxpdHlTaG93TWVudUFjdGlvbiwgbmlsXTsKLSAgICBzdGF0aWMg
TlNBcnJheSogbWVudUVsZW1lbnRBY3Rpb25zID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9i
amVjdHM6IE5TQWNjZXNzaWJpbGl0eUNhbmNlbEFjdGlvbiwgTlNBY2Nlc3NpYmlsaXR5UHJlc3NB
Y3Rpb24sIG5pbF07Ci0gICAgc3RhdGljIE5TQXJyYXkqIHNsaWRlckFjdGlvbnMgPSBbW05TQXJy
YXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50QWN0aW9u
LCBOU0FjY2Vzc2liaWxpdHlEZWNyZW1lbnRBY3Rpb24sIG5pbF07Ci0gICAgCi0gICAgTlNBcnJh
eSAqYWN0aW9uczsKLSAgICBpZiAobV9vYmplY3QtPmFjdGlvbkVsZW1lbnQoKSB8fCBtX29iamVj
dC0+aXNCdXR0b24oKSkKLSAgICAgICAgYWN0aW9ucyA9IGFjdGlvbkVsZW1lbnRBY3Rpb25zOwot
ICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnVSZWxhdGVkKCkpCi0gICAgICAgIGFjdGlvbnMg
PSBtZW51RWxlbWVudEFjdGlvbnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU2xpZGVyKCkp
Ci0gICAgICAgIGFjdGlvbnMgPSBzbGlkZXJBY3Rpb25zOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0
LT5pc0F0dGFjaG1lbnQoKSkKLSAgICAgICAgYWN0aW9ucyA9IFtbc2VsZiBhdHRhY2htZW50Vmll
d10gYWNjZXNzaWJpbGl0eUFjdGlvbk5hbWVzXTsKLSAgICBlbHNlCi0gICAgICAgIGFjdGlvbnMg
PSBkZWZhdWx0RWxlbWVudEFjdGlvbnM7Ci0gICAgCi0gICAgcmV0dXJuIGFjdGlvbnM7Ci19Ci0K
LS0gKE5TQXJyYXkqKWFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKLXsKLSAg
ICBpZiAoIW1fb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIE5TTXV0YWJs
ZUFycmF5ICphZGRpdGlvbmFsID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBpZiAobV9v
YmplY3QtPnN1cHBvcnRzQVJJQU93bnMoKSkKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eU93bnNBdHRyaWJ1dGVdOwotICAgIAotICAgIGlmIChtX29iamVjdC0+
c3VwcG9ydHNBUklBRXhwYW5kZWQoKSkKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eUV4cGFuZGVkQXR0cmlidXRlXTsKLSAgICAKLSAgICBpZiAobV9vYmplY3Qt
PmlzU2Nyb2xsYmFyKCkpCi0gICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV07Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5zdXBw
b3J0c0FSSUFEcmFnZ2luZygpKQotICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZV07Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5zdXBw
b3J0c0FSSUFEcm9wcGluZygpKQotICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5RHJvcEVmZmVjdHNBdHRyaWJ1dGVdOwotICAgIAotICAgIGlmIChtX29iamVjdC0+
aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSAmJiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUq
PihtX29iamVjdCktPnN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkpCi0gICAgICAgIFthZGRpdGlvbmFs
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdOwotICAgIAot
ICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBTGl2ZVJlZ2lvbigpKSB7Ci0gICAgICAgIFth
ZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBUklBTGl2ZUF0dHJpYnV0ZV07Ci0g
ICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBUklBUmVsZXZhbnRB
dHRyaWJ1dGVdOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9vYmplY3QtPnNvcnREaXJlY3Rpb24o
KSAhPSBTb3J0RGlyZWN0aW9uTm9uZSkKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb25BdHRyaWJ1dGVdOwotICAgIAotICAgIC8vIElmIGFu
IG9iamVjdCBpcyBhIGNoaWxkIG9mIGEgbGl2ZSByZWdpb24sIHRoZW4gYWRkIHRoZXNlCi0gICAg
aWYgKG1fb2JqZWN0LT5pc0luc2lkZUFSSUFMaXZlUmVnaW9uKCkpCi0gICAgICAgIFthZGRpdGlv
bmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBUklBQXRvbWljQXR0cmlidXRlXTsKLSAgICAv
LyBBbGwgb2JqZWN0cyBzaG91bGQgZXhwb3NlIHRoZSBBUklBIGJ1c3kgYXR0cmlidXRlIChBUklB
IDEuMSB3aXRoIElTU1VFLTUzOCkuCi0gICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eUFSSUFCdXN5QXR0cmlidXRlXTsKLSAgICAKLSAgICAvLyBQb3B1cCBidXR0b25zIG9u
IHRoZSBNYWMgZXhwb3NlIHRoZSB2YWx1ZSBhdHRyaWJ1dGUuCi0gICAgaWYgKG1fb2JqZWN0LT5p
c1BvcFVwQnV0dG9uKCkpCi0gICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlWYWx1ZUF0dHJpYnV0ZV07Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5hcmlhSGFzUG9w
dXAoKSkKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUhhc1Bv
cHVwQXR0cmlidXRlXTsKLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzTWF0aFJvb3QoKSkgewot
ICAgICAgICAvLyBUaGUgaW5kZXggb2YgYSBzcXVhcmUgcm9vdCBpcyBhbHdheXMga25vd24sIHNv
IHRoZXJlJ3Mgbm8gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBpdC4KLSAgICAgICAgaWYgKCFtX29i
amVjdC0+aXNNYXRoU3F1YXJlUm9vdCgpKQotICAgICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhSb290SW5kZXhBdHRyaWJ1dGVdOwotICAgICAgICBbYWRk
aXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RSYWRpY2FuZEF0dHJpYnV0
ZV07Ci0gICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkgewotICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9uTnVtZXJh
dG9yQXR0cmlidXRlXTsKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eU1hdGhGcmFjdGlvbkRlbm9taW5hdG9yQXR0cmlidXRlXTsKLSAgICB9IGVsc2UgaWYgKG1f
b2JqZWN0LT5pc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpKSB7Ci0gICAgICAgIFthZGRpdGlv
bmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0dHJpYnV0ZV07Ci0gICAgICAg
IFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoU3Vic2NyaXB0QXR0cmli
dXRlXTsKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhT
dXBlcnNjcmlwdEF0dHJpYnV0ZV07Ci0gICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNNYXRoVW5k
ZXJPdmVyKCkpIHsKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eU1hdGhCYXNlQXR0cmlidXRlXTsKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eU1hdGhVbmRlckF0dHJpYnV0ZV07Ci0gICAgICAgIFthZGRpdGlvbmFsIGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoT3ZlckF0dHJpYnV0ZV07Ci0gICAgfSBlbHNlIGlmICht
X29iamVjdC0+aXNNYXRoRmVuY2VkKCkpIHsKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRPcGVuQXR0cmlidXRlXTsKLSAgICAgICAgW2FkZGl0
aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRDbG9zZUF0dHJpYnV0ZV07
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBhZGRpdGlvbmFsOwotfQotCi0tIChOU0FycmF5Kilh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKLXsKLSAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVj
dEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgaWYgKG1fb2Jq
ZWN0LT5pc0F0dGFjaG1lbnQoKSkKLSAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmll
d10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXTsKLSAgICAKLSAgICBzdGF0aWMgTlNBcnJh
eSogYXR0cmlidXRlcyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogYW5jaG9yQXR0cnMgPSBu
aWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIHdlYkFyZWFBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMg
TlNBcnJheSogdGV4dEF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiBsaXN0QXR0cnMg
PSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIGxpc3RCb3hBdHRycyA9IG5pbDsKLSAgICBzdGF0
aWMgTlNBcnJheSogcmFuZ2VBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogY29tbW9u
TWVudUF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiBtZW51QXR0cnMgPSBuaWw7Ci0g
ICAgc3RhdGljIE5TQXJyYXkqIG1lbnVCYXJBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJh
eSogbWVudUl0ZW1BdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogbWVudUJ1dHRvbkF0
dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiBjb250cm9sQXR0cnMgPSBuaWw7Ci0gICAg
c3RhdGljIE5TQXJyYXkqIHRhYmxlQXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIHRh
YmxlUm93QXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIHRhYmxlQ29sQXR0cnMgPSBu
aWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIHRhYmxlQ2VsbEF0dHJzID0gbmlsOwotICAgIHN0YXRp
YyBOU0FycmF5KiBncm91cEF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiBpbnB1dElt
YWdlQXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIHBhc3N3b3JkRmllbGRBdHRycyA9
IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogdGFiTGlzdEF0dHJzID0gbmlsOwotICAgIHN0YXRp
YyBOU0FycmF5KiBjb21ib0JveEF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiBvdXRs
aW5lQXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIG91dGxpbmVSb3dBdHRycyA9IG5p
bDsKLSAgICBzdGF0aWMgTlNBcnJheSogYnV0dG9uQXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5T
QXJyYXkqIHNjcm9sbFZpZXdBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogaW5jcmVt
ZW50b3JBdHRycyA9IG5pbDsKLSAgICBOU011dGFibGVBcnJheSogdGVtcEFycmF5OwotICAgIGlm
IChhdHRyaWJ1dGVzID09IG5pbCkgewotICAgICAgICBhdHRyaWJ1dGVzID0gW1tOU0FycmF5IGFs
bG9jXSBpbml0V2l0aE9iamVjdHM6IE5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U3Vicm9sZUF0dHJpYnV0ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5SGVscEF0dHJpYnV0ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRyaWJ1dGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlLAotICAgICAgICAgICAg
ICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlLAotICAgICAgICAgICAgICAg
ICAgICAgIEAiQVhTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSIsCi0gICAgICAgICAgICAgICAgICAg
ICAgQCJBWFN0YXJ0VGV4dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWEVuZFRl
eHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhWaXNpdGVkIiwKLSAgICAgICAg
ICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlMaW5rZWRVSUVsZW1lbnRzQXR0cmlidXRlLAot
ICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQXR0cmlidXRlLAot
ICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJp
YnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxl
bWVudEF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBuaWxdOwotICAgIH0KLSAgICBp
ZiAoY29tbW9uTWVudUF0dHJzID09IG5pbCkgewotICAgICAgICBjb21tb25NZW51QXR0cnMgPSBb
W05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJp
YnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNj
cmlwdGlvbkF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJp
bGl0eUNoaWxkcmVuQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nl
c3NpYmlsaXR5UGFyZW50QXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNB
Y2Nlc3NpYmlsaXR5RW5hYmxlZEF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5pbF07Ci0gICAgfQotICAgIGlmIChhbmNob3JBdHRycyA9PSBuaWwpIHsKLSAgICAg
ICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRy
aWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VVJM
QXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
QWNjZXNzS2V5QXR0cmlidXRlXTsKLSAgICAgICAgYW5jaG9yQXR0cnMgPSBbW05TQXJyYXkgYWxs
b2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNl
XTsKLSAgICB9Ci0gICAgaWYgKHdlYkFyZWFBdHRycyA9PSBuaWwpIHsKLSAgICAgICAgdGVtcEFy
cmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsK
LSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6QCJBWExpbmtVSUVsZW1lbnRzIl07Ci0gICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OkAiQVhMb2FkZWQiXTsKLSAgICAgICAgW3RlbXBBcnJh
eSBhZGRPYmplY3Q6QCJBWExheW91dENvdW50Il07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eUxvYWRpbmdQcm9ncmVzc0F0dHJpYnV0ZV07Ci0gICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVVSTEF0dHJpYnV0ZV07Ci0gICAgICAg
IHdlYkFyZWFBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXld
OwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAodGV4dEF0dHJz
ID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1dGVdOwotICAgICAgICBbdGVt
cEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdOwot
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRS
YW5nZUF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUluc2VydGlvblBvaW50TGluZU51bWJlckF0dHJpYnV0
ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRpdGxlVUlF
bGVtZW50QXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5QWNjZXNzS2V5QXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbnZhbGlkQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBB
cnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1ZUF0dHJpYnV0ZV07
Ci0gICAgICAgIHRleHRBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1w
QXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAobGlz
dEF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVuQXR0cmlidXRlXTsKLSAgICAgICAg
W3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoaWxkcmVuQXR0cmli
dXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5T3JpZW50
YXRpb25BdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV07Ci0gICAgICAgIGxpc3RBdHRycyA9IFtbTlNB
cnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5
IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAobGlzdEJveEF0dHJzID09IG5pbCkgewotICAgICAg
ICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5Omxpc3RB
dHRyc107Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFjY2Vz
c0tleUF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eVJlcXVpcmVkQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5SW52YWxpZEF0dHJpYnV0ZV07Ci0gICAgICAgIGxpc3RCb3hBdHRycyA9IFtb
TlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFy
cmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAocmFuZ2VBdHRycyA9PSBuaWwpIHsKLSAgICAg
ICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRy
aWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWlu
VmFsdWVBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlNYXhWYWx1ZUF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVEZXNjcmlwdGlvbkF0dHJpYnV0ZV07Ci0gICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0
cmlidXRlXTsKLSAgICAgICAgcmFuZ2VBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhB
cnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAg
ICBpZiAobWVudUJhckF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmNvbW1vbk1lbnVBdHRyc107Ci0gICAgICAg
IFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5BdHRy
aWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWaXNp
YmxlQ2hpbGRyZW5BdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV07Ci0gICAgICAgIG1lbnVCYXJBdHRy
cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBb
dGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAobWVudUF0dHJzID09IG5pbCkgewot
ICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5
OmNvbW1vbk1lbnVBdHRyc107Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hpbGRyZW5BdHRyaWJ1dGVdOwotICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJp
YnV0ZV07Ci0gICAgICAgIG1lbnVBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJh
eTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBp
ZiAobWVudUl0ZW1BdHRycyA9PSBuaWwpIHsKLSAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpjb21tb25NZW51QXR0cnNdOwotICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZV07Ci0gICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUhlbHBBdHRyaWJ1dGVdOwot
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJp
YnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FYTWVudUl0
ZW1DbWRDaGFyQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3Ry
aW5nKilrQVhNZW51SXRlbUNtZFZpcnR1YWxLZXlBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFy
cmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWE1lbnVJdGVtQ21kR2x5cGhBdHRyaWJ1dGVdOwot
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWE1lbnVJdGVtQ21kTW9k
aWZpZXJzQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5n
KilrQVhNZW51SXRlbU1hcmtDaGFyQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRP
YmplY3Q6KE5TU3RyaW5nKilrQVhNZW51SXRlbVByaW1hcnlVSUVsZW1lbnRBdHRyaWJ1dGVdOwot
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZXJ2ZXNBc1RpdGxl
Rm9yVUlFbGVtZW50c0F0dHJpYnV0ZV07Ci0gICAgICAgIG1lbnVJdGVtQXR0cnMgPSBbW05TQXJy
YXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSBy
ZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYgKG1lbnVCdXR0b25BdHRycyA9PSBuaWwpIHsKLSAgICAg
ICAgbWVudUJ1dHRvbkF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6TlNB
Y2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5T
QWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VGl0bGVBdHRyaWJ1
dGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0
dHJpYnV0ZSwgbmlsXTsKLSAgICB9Ci0gICAgaWYgKGNvbnRyb2xBdHRycyA9PSBuaWwpIHsKLSAg
ICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTph
dHRyaWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSZXF1aXJlZEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1w
QXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUludmFsaWRBdHRyaWJ1dGVdOwotICAgICAg
ICBjb250cm9sQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5
XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYgKGluY3JlbWVu
dG9yQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEJ1dHRvbkF0dHJpYnV0ZV07Ci0gICAgICAg
IFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEJ1dHRvbkF0dHJp
YnV0ZV07Ci0gICAgICAgIGluY3JlbWVudG9yQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRX
aXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9
Ci0gICAgaWYgKGJ1dHRvbkF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAgICAv
LyBCdXR0b25zIHNob3VsZCBub3QgZXhwb3NlIEFYVmFsdWUuCi0gICAgICAgIFt0ZW1wQXJyYXkg
cmVtb3ZlT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXTsKLSAgICAgICAgW3Rl
bXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVd
OwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlB
dHRyaWJ1dGVdOwotICAgICAgICBidXR0b25BdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0K
LSAgICBpZiAoY29tYm9Cb3hBdHRycyA9PSBuaWwpIHsKLSAgICAgICAgdGVtcEFycmF5ID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpjb250cm9sQXR0cnNdOwotICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlFeHBhbmRlZEF0dHJpYnV0ZV07
Ci0gICAgICAgIGNvbWJvQm94QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6
dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYg
KHRhYmxlQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107Ci0gICAgICAgIFt0ZW1wQXJyYXkg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFy
cmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlUm93c0F0dHJpYnV0ZV07Ci0gICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUNvbHVtbnNBdHRyaWJ1dGVd
OwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ29s
dW1uc0F0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eVZpc2libGVDZWxsc0F0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0
OihOU1N0cmluZyAqKWtBWENvbHVtbkhlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdOwotICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSb3dIZWFkZXJVSUVsZW1lbnRz
QXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
SGVhZGVyQXR0cmlidXRlXTsKLSAgICAgICAgdGFibGVBdHRycyA9IFtbTlNBcnJheSBhbGxvY10g
aW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwot
ICAgIH0KLSAgICBpZiAodGFibGVSb3dBdHRycyA9PSBuaWwpIHsKLSAgICAgICAgdGVtcEFycmF5
ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKLSAg
ICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVd
OwotICAgICAgICB0YWJsZVJvd0F0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5
OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07Ci0gICAgfQotICAgIGlm
ICh0YWJsZUNvbEF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAgICBbdGVtcEFy
cmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbmRleEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUhlYWRlckF0dHJpYnV0ZV07Ci0gICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdOwot
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlUm93c0F0
dHJpYnV0ZV07Ci0gICAgICAgIHRhYmxlQ29sQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRX
aXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9
Ci0gICAgaWYgKHRhYmxlQ2VsbEF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSb3dJbmRleFJhbmdlQXR0cmli
dXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Q29sdW1u
SW5kZXhSYW5nZUF0dHJpYnV0ZV07Ci0gICAgICAgIHRhYmxlQ2VsbEF0dHJzID0gW1tOU0FycmF5
IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVs
ZWFzZV07Ci0gICAgfQotICAgIGlmIChncm91cEF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1w
QXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNd
OwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxl
bWVudEF0dHJpYnV0ZV07Ci0gICAgICAgIGdyb3VwQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAg
ICB9Ci0gICAgaWYgKGlucHV0SW1hZ2VBdHRycyA9PSBuaWwpIHsKLSAgICAgICAgdGVtcEFycmF5
ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpidXR0b25BdHRyc107Ci0g
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVVSTEF0dHJpYnV0ZV07
Ci0gICAgICAgIGlucHV0SW1hZ2VBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJh
eTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBp
ZiAocGFzc3dvcmRGaWVsZEF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0
ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJlcXVpcmVk
QXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
SW52YWxpZEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eVBsYWNlaG9sZGVyVmFsdWVBdHRyaWJ1dGVdOwotICAgICAgICBwYXNzd29yZEZpZWxk
QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAg
ICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYgKHRhYkxpc3RBdHRycyA9PSBu
aWwpIHsKLSAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTphdHRyaWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5VGFic0F0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eUNvbnRlbnRzQXR0cmlidXRlXTsKLSAgICAgICAgdGFiTGlzdEF0dHJzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1w
QXJyYXkgcmVsZWFzZV07Ci0gICAgfQotICAgIGlmIChvdXRsaW5lQXR0cnMgPT0gbmlsKSB7Ci0g
ICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6
YXR0cmlidXRlc107Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlDb2x1bW5zQXR0cmlidXRlXTsKLSAgICAgICAgb3V0bGluZUF0dHJz
ID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0
ZW1wQXJyYXkgcmVsZWFzZV07Ci0gICAgfQotICAgIGlmIChvdXRsaW5lUm93QXR0cnMgPT0gbmls
KSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRo
QXJyYXk6dGFibGVSb3dBdHRyc107Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eURpc2Nsb3NpbmdBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zZWRCeVJvd0F0dHJpYnV0ZV07Ci0gICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURpc2Nsb3N1cmVMZXZlbEF0dHJpYnV0
ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURpc2Nsb3Nl
ZFJvd3NBdHRyaWJ1dGVdOwotICAgICAgICBvdXRsaW5lUm93QXR0cnMgPSBbW05TQXJyYXkgYWxs
b2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNl
XTsKLSAgICB9Ci0gICAgaWYgKHNjcm9sbFZpZXdBdHRycyA9PSBuaWwpIHsKLSAgICAgICAgdGVt
cEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVz
XTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Q29udGVudHNB
dHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlI
b3Jpem9udGFsU2Nyb2xsQmFyQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5VmVydGljYWxTY3JvbGxCYXJBdHRyaWJ1dGVdOwotICAgICAgICBz
Y3JvbGxWaWV3QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5
XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9Ci0gICAgCi0gICAgTlNBcnJh
eSAqb2JqZWN0QXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0
LT5pc1Bhc3N3b3JkRmllbGQoKSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHBhc3N3b3Jk
RmllbGRBdHRyczsKLSAgICAKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNXZWJBcmVhKCkpCi0g
ICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB3ZWJBcmVhQXR0cnM7Ci0gICAgCi0gICAgZWxzZSBp
ZiAobV9vYmplY3QtPmlzVGV4dENvbnRyb2woKSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9
IHRleHRBdHRyczsKLSAgICAKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNBbmNob3IoKSB8fCBt
X29iamVjdC0+aXNJbWFnZSgpIHx8IG1fb2JqZWN0LT5pc0xpbmsoKSkKLSAgICAgICAgb2JqZWN0
QXR0cmlidXRlcyA9IGFuY2hvckF0dHJzOwotICAgIAotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5p
c0FjY2Vzc2liaWxpdHlUYWJsZSgpKQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFibGVB
dHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNUYWJsZUNvbHVtbigpKQotICAgICAgICBv
YmplY3RBdHRyaWJ1dGVzID0gdGFibGVDb2xBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+
aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHRhYmxlQ2VsbEF0dHJz
OwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RhYmxlUm93KCkpIHsKLSAgICAgICAgLy8gQW4g
QVJJQSB0YWJsZSByb3cgY2FuIGJlIGNvbGxhcHNlZCBhbmQgZXhwYW5kZWQsIHNvIGl0IG5lZWRz
IHRoZSBleHRyYSBhdHRyaWJ1dGVzLgotICAgICAgICBpZiAobV9vYmplY3QtPmlzQVJJQVRyZWVH
cmlkUm93KCkpCi0gICAgICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gb3V0bGluZVJvd0F0dHJz
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFibGVSb3dB
dHRyczsKLSAgICB9Ci0gICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVHJlZSgpKQotICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gb3V0bGluZUF0dHJzOwotICAgIGVsc2UgaWYgKG1fb2Jq
ZWN0LT5pc1RyZWVJdGVtKCkpCi0gICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBvdXRsaW5lUm93
QXR0cnM7Ci0gICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTGlzdEJveCgpKQotICAgICAg
ICBvYmplY3RBdHRyaWJ1dGVzID0gbGlzdEJveEF0dHJzOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0
LT5pc0xpc3QoKSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGxpc3RBdHRyczsKLSAgICAK
LSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNDb21ib0JveCgpKQotICAgICAgICBvYmplY3RBdHRy
aWJ1dGVzID0gY29tYm9Cb3hBdHRyczsKLSAgICAKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNQ
cm9ncmVzc0luZGljYXRvcigpIHx8IG1fb2JqZWN0LT5pc1NsaWRlcigpKQotICAgICAgICBvYmpl
Y3RBdHRyaWJ1dGVzID0gcmFuZ2VBdHRyczsKLSAgICAKLSAgICAvLyBUaGVzZSBhcmUgcHJvY2Vz
c2VkIGluIG9yZGVyIGJlY2F1c2UgYW4gaW5wdXQgaW1hZ2UgaXMgYSBidXR0b24sIGFuZCBhIGJ1
dHRvbiBpcyBhIGNvbnRyb2wuCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzSW5wdXRJbWFnZSgp
KQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gaW5wdXRJbWFnZUF0dHJzOwotICAgIGVsc2Ug
aWYgKG1fb2JqZWN0LT5pc0J1dHRvbigpKQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gYnV0
dG9uQXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQ29udHJvbCgpKQotICAgICAgICBv
YmplY3RBdHRyaWJ1dGVzID0gY29udHJvbEF0dHJzOwotICAgIAotICAgIGVsc2UgaWYgKG1fb2Jq
ZWN0LT5pc0dyb3VwKCkgfHwgbV9vYmplY3QtPmlzTGlzdEl0ZW0oKSkKLSAgICAgICAgb2JqZWN0
QXR0cmlidXRlcyA9IGdyb3VwQXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVGFiTGlz
dCgpKQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFiTGlzdEF0dHJzOwotICAgIGVsc2Ug
aWYgKG1fb2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9
IHNjcm9sbFZpZXdBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNTcGluQnV0dG9uKCkp
Ci0gICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBpbmNyZW1lbnRvckF0dHJzOwotICAgIAotICAg
IGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnUoKSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9
IG1lbnVBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNNZW51QmFyKCkpCi0gICAgICAg
IG9iamVjdEF0dHJpYnV0ZXMgPSBtZW51QmFyQXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3Qt
PmlzTWVudUJ1dHRvbigpKQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbWVudUJ1dHRvbkF0
dHJzOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnVJdGVtKCkpCi0gICAgICAgIG9iamVj
dEF0dHJpYnV0ZXMgPSBtZW51SXRlbUF0dHJzOwotICAgIAotICAgIE5TQXJyYXkgKmFkZGl0aW9u
YWxBdHRyaWJ1dGVzID0gW3NlbGYgYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1l
c107Ci0gICAgaWYgKFthZGRpdGlvbmFsQXR0cmlidXRlcyBjb3VudF0pCi0gICAgICAgIG9iamVj
dEF0dHJpYnV0ZXMgPSBbb2JqZWN0QXR0cmlidXRlcyBhcnJheUJ5QWRkaW5nT2JqZWN0c0Zyb21B
cnJheTphZGRpdGlvbmFsQXR0cmlidXRlc107Ci0gICAgCi0gICAgcmV0dXJuIG9iamVjdEF0dHJp
YnV0ZXM7Ci19Ci0KLS0gKFZpc2libGVQb3NpdGlvblJhbmdlKXZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuZ2UKLXsKLSAgICBpZiAoIXRleHRN
YXJrZXJSYW5nZSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7Ci0gICAg
QVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOwotICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zaXRpb25Gb3JTdGFydE9mVGV4dE1h
cmtlclJhbmdlKGNhY2hlLCB0ZXh0TWFya2VyUmFuZ2UpLCB2aXNpYmxlUG9zaXRpb25Gb3JFbmRP
ZlRleHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSk7Ci19Ci0KLS0gKE5TQXJy
YXkqKXJlbmRlcldpZGdldENoaWxkcmVuCi17Ci0gICAgV2lkZ2V0KiB3aWRnZXQgPSBtX29iamVj
dC0+d2lkZ2V0KCk7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
cmV0dXJuIFsod2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6IE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKLX0KLQotLSAoaWQpcmVt
b3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdAotewotICAgIGlmICghbV9vYmplY3QpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9vYmplY3Qt
PmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICAKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1l
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCkt
PmNsaWVudCgpLT5hY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGNvbnZlcnRUb1ZlY3RvcihOU0FycmF5KiBhcnJheSwgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiB2ZWN0b3IpCi17Ci0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gW2FycmF5IGNvdW50XTsKLSAgICB2ZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5n
dGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBbW2FycmF5IG9iamVjdEF0SW5kZXg6aV0gYWNj
ZXNzaWJpbGl0eU9iamVjdF07Ci0gICAgICAgIGlmIChvYmopCi0gICAgICAgICAgICB2ZWN0b3Iu
YXBwZW5kKG9iaik7Ci0gICAgfQotfQotCi1zdGF0aWMgTlNNdXRhYmxlQXJyYXkqIGNvbnZlcnRU
b05TQXJyYXkoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJiB2ZWN0b3IpCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdmVjdG9yLnNpemUoKTsK
LSAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2Fw
YWNpdHk6IGxlbmd0aF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gdmVj
dG9yW2ldLT53cmFwcGVyKCk7Ci0gICAgICAgIEFTU0VSVCh3cmFwcGVyKTsKLSAgICAgICAgaWYg
KHdyYXBwZXIpIHsKLSAgICAgICAgICAgIC8vIHdlIHdhbnQgdG8gcmV0dXJuIHRoZSBhdHRhY2ht
ZW50IHZpZXcgaW5zdGVhZCBvZiB0aGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgYXR0YWNobWVu
dC4KLSAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgd2UgZ2V0IHBhbGluZHJvbWUgZXJyb3JzIGlu
IHRoZSBBWCBoaWVyYXJjaHkKLSAgICAgICAgICAgIGlmICh2ZWN0b3JbaV0tPmlzQXR0YWNobWVu
dCgpICYmIFt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XSkKLSAgICAgICAgICAgICAgICBbYXJyYXkg
YWRkT2JqZWN0Olt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XV07Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDp3cmFwcGVyXTsKLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLS0gKGlkKXRleHRNYXJrZXJSYW5nZUZvclNlbGVj
dGlvbgotewotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9vYmplY3QtPnNlbGVj
dGlvbigpOwotICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnNl
bGVjdGlvbi52aXNpYmxlU3RhcnQoKSBlbmRQb3NpdGlvbjpzZWxlY3Rpb24udmlzaWJsZUVuZCgp
XTsKLX0KLQotLSAoTlNWYWx1ZSAqKXBvc2l0aW9uCi17Ci0gICAgSW50UmVjdCByZWN0ID0gcGl4
ZWxTbmFwcGVkSW50UmVjdChtX29iamVjdC0+ZWxlbWVudFJlY3QoKSk7Ci0gICAgTlNQb2ludCBw
b2ludDsKLSAgICAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0LT5kb2N1bWVu
dEZyYW1lVmlldygpOwotICAgIAotICAgIC8vIFdlYktpdDEgY29kZSBwYXRoLi4uIHBsYXRmb3Jt
V2lkZ2V0KCkgZXhpc3RzLgotICAgIGlmIChmcmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5wbGF0Zm9y
bVdpZGdldCgpKSB7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgQ29jb2EgYWNjZXNzaWJpbGl0
eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgotICAgICAgICBwb2ludCA9IE5TTWFr
ZVBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZnJh
bWVWaWV3KSB7Ci0gICAgICAgICAgICBOU1ZpZXcqIHZpZXcgPSBmcmFtZVZpZXctPmRvY3VtZW50
VmlldygpOwotICAgICAgICAgICAgcG9pbnQgPSBbW3ZpZXcgd2luZG93XSBjb252ZXJ0QmFzZVRv
U2NyZWVuOlt2aWV3IGNvbnZlcnRQb2ludDogcG9pbnQgdG9WaWV3Om5pbF1dOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbmQgdGhlIGFwcHJvcHJpYXRl
IHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252ZXJ0IHRoZSBjb250ZW50cyB0byB0aGUgd2luZG93
LgotICAgICAgICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gMDsKLSAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gMDsKLSAgICAgICAgZm9yIChwYXJlbnQgPSBtX29iamVjdC0+
cGFyZW50T2JqZWN0KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkg
ewotICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpKSB7
Ci0gICAgICAgICAgICAgICAgc2Nyb2xsVmlldyA9IHRvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXco
cGFyZW50KS0+c2Nyb2xsVmlldygpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc2Nyb2xsVmlldykKLSAgICAg
ICAgICAgIHJlY3QgPSBzY3JvbGxWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVjdCk7Ci0gICAg
ICAgIAotICAgICAgICBQYWdlKiBwYWdlID0gbV9vYmplY3QtPnBhZ2UoKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIElmIHdlIGhhdmUgYW4gZW1wdHkgY2hyb21lIGNsaWVudCAobGlrZSBTVkcpIHRo
ZW4gd2Ugc2hvdWxkIHVzZSB0aGUgcGFnZQotICAgICAgICAvLyBvZiB0aGUgc2Nyb2xsIHZpZXcg
cGFyZW50IHRvIGhlbHAgdXMgZ2V0IHRvIHRoZSBzY3JlZW4gcmVjdC4KLSAgICAgICAgaWYgKHBh
cmVudCAmJiBwYWdlICYmIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+aXNFbXB0eUNocm9tZUNs
aWVudCgpKQotICAgICAgICAgICAgcGFnZSA9IHBhcmVudC0+cGFnZSgpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHBhZ2UpCi0gICAgICAgICAgICBwb2ludCA9IHBhZ2UtPmNocm9tZSgpLT5yb290
Vmlld1RvU2NyZWVuKHJlY3QpLmxvY2F0aW9uKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHBvaW50ID0gcmVjdC5sb2NhdGlvbigpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gW05TVmFs
dWUgdmFsdWVXaXRoUG9pbnQ6cG9pbnRdOwotfQotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBOU1N0
cmluZyo+IEFjY2Vzc2liaWxpdHlSb2xlTWFwOwotCi1zdGF0aWMgY29uc3QgQWNjZXNzaWJpbGl0
eVJvbGVNYXAmIGNyZWF0ZUFjY2Vzc2liaWxpdHlSb2xlTWFwKCkKLXsKLSAgICBzdHJ1Y3QgUm9s
ZUVudHJ5IHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgdmFsdWU7Ci0gICAgICAgIE5TU3Ry
aW5nKiBzdHJpbmc7Ci0gICAgfTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgUm9sZUVudHJ5IHJv
bGVzW10gPSB7Ci0gICAgICAgIHsgVW5rbm93blJvbGUsIE5TQWNjZXNzaWJpbGl0eVVua25vd25S
b2xlIH0sCi0gICAgICAgIHsgQnV0dG9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5QnV0dG9uUm9sZSB9
LAotICAgICAgICB7IFJhZGlvQnV0dG9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5UmFkaW9CdXR0b25S
b2xlIH0sCi0gICAgICAgIHsgQ2hlY2tCb3hSb2xlLCBOU0FjY2Vzc2liaWxpdHlDaGVja0JveFJv
bGUgfSwKLSAgICAgICAgeyBTbGlkZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlTbGlkZXJSb2xlIH0s
Ci0gICAgICAgIHsgVGFiR3JvdXBSb2xlLCBOU0FjY2Vzc2liaWxpdHlUYWJHcm91cFJvbGUgfSwK
LSAgICAgICAgeyBUZXh0RmllbGRSb2xlLCBOU0FjY2Vzc2liaWxpdHlUZXh0RmllbGRSb2xlIH0s
Ci0gICAgICAgIHsgU3RhdGljVGV4dFJvbGUsIE5TQWNjZXNzaWJpbGl0eVN0YXRpY1RleHRSb2xl
IH0sCi0gICAgICAgIHsgVGV4dEFyZWFSb2xlLCBOU0FjY2Vzc2liaWxpdHlUZXh0QXJlYVJvbGUg
fSwKLSAgICAgICAgeyBTY3JvbGxBcmVhUm9sZSwgTlNBY2Nlc3NpYmlsaXR5U2Nyb2xsQXJlYVJv
bGUgfSwKLSAgICAgICAgeyBQb3BVcEJ1dHRvblJvbGUsIE5TQWNjZXNzaWJpbGl0eVBvcFVwQnV0
dG9uUm9sZSB9LAotICAgICAgICB7IE1lbnVCdXR0b25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlNZW51
QnV0dG9uUm9sZSB9LAotICAgICAgICB7IFRhYmxlUm9sZSwgTlNBY2Nlc3NpYmlsaXR5VGFibGVS
b2xlIH0sCi0gICAgICAgIHsgQXBwbGljYXRpb25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlBcHBsaWNh
dGlvblJvbGUgfSwKLSAgICAgICAgeyBHcm91cFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9s
ZSB9LAotICAgICAgICB7IFJhZGlvR3JvdXBSb2xlLCBOU0FjY2Vzc2liaWxpdHlSYWRpb0dyb3Vw
Um9sZSB9LAotICAgICAgICB7IExpc3RSb2xlLCBOU0FjY2Vzc2liaWxpdHlMaXN0Um9sZSB9LAot
ICAgICAgICB7IERpcmVjdG9yeVJvbGUsIE5TQWNjZXNzaWJpbGl0eUxpc3RSb2xlIH0sCi0gICAg
ICAgIHsgU2Nyb2xsQmFyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5U2Nyb2xsQmFyUm9sZSB9LAotICAg
ICAgICB7IFZhbHVlSW5kaWNhdG9yUm9sZSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVJbmRpY2F0b3JS
b2xlIH0sCi0gICAgICAgIHsgSW1hZ2VSb2xlLCBOU0FjY2Vzc2liaWxpdHlJbWFnZVJvbGUgfSwK
LSAgICAgICAgeyBNZW51QmFyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5TWVudUJhclJvbGUgfSwKLSAg
ICAgICAgeyBNZW51Um9sZSwgTlNBY2Nlc3NpYmlsaXR5TWVudVJvbGUgfSwKLSAgICAgICAgeyBN
ZW51SXRlbVJvbGUsIE5TQWNjZXNzaWJpbGl0eU1lbnVJdGVtUm9sZSB9LAotICAgICAgICB7IENv
bHVtblJvbGUsIE5TQWNjZXNzaWJpbGl0eUNvbHVtblJvbGUgfSwKLSAgICAgICAgeyBSb3dSb2xl
LCBOU0FjY2Vzc2liaWxpdHlSb3dSb2xlIH0sCi0gICAgICAgIHsgVG9vbGJhclJvbGUsIE5TQWNj
ZXNzaWJpbGl0eVRvb2xiYXJSb2xlIH0sCi0gICAgICAgIHsgQnVzeUluZGljYXRvclJvbGUsIE5T
QWNjZXNzaWJpbGl0eUJ1c3lJbmRpY2F0b3JSb2xlIH0sCi0gICAgICAgIHsgUHJvZ3Jlc3NJbmRp
Y2F0b3JSb2xlLCBOU0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvclJvbGUgfSwKLSAgICAg
ICAgeyBXaW5kb3dSb2xlLCBOU0FjY2Vzc2liaWxpdHlXaW5kb3dSb2xlIH0sCi0gICAgICAgIHsg
RHJhd2VyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5RHJhd2VyUm9sZSB9LAotICAgICAgICB7IFN5c3Rl
bVdpZGVSb2xlLCBOU0FjY2Vzc2liaWxpdHlTeXN0ZW1XaWRlUm9sZSB9LAotICAgICAgICB7IE91
dGxpbmVSb2xlLCBOU0FjY2Vzc2liaWxpdHlPdXRsaW5lUm9sZSB9LAotICAgICAgICB7IEluY3Jl
bWVudG9yUm9sZSwgTlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50b3JSb2xlIH0sCi0gICAgICAgIHsg
QnJvd3NlclJvbGUsIE5TQWNjZXNzaWJpbGl0eUJyb3dzZXJSb2xlIH0sCi0gICAgICAgIHsgQ29t
Ym9Cb3hSb2xlLCBOU0FjY2Vzc2liaWxpdHlDb21ib0JveFJvbGUgfSwKLSAgICAgICAgeyBTcGxp
dEdyb3VwUm9sZSwgTlNBY2Nlc3NpYmlsaXR5U3BsaXRHcm91cFJvbGUgfSwKLSAgICAgICAgeyBT
cGxpdHRlclJvbGUsIE5TQWNjZXNzaWJpbGl0eVNwbGl0dGVyUm9sZSB9LAotICAgICAgICB7IENv
bG9yV2VsbFJvbGUsIE5TQWNjZXNzaWJpbGl0eUNvbG9yV2VsbFJvbGUgfSwKLSAgICAgICAgeyBH
cm93QXJlYVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3dBcmVhUm9sZSB9LAotICAgICAgICB7IFNo
ZWV0Um9sZSwgTlNBY2Nlc3NpYmlsaXR5U2hlZXRSb2xlIH0sCi0gICAgICAgIHsgSGVscFRhZ1Jv
bGUsIE5TQWNjZXNzaWJpbGl0eUhlbHBUYWdSb2xlIH0sCi0gICAgICAgIHsgTWF0dGVSb2xlLCBO
U0FjY2Vzc2liaWxpdHlNYXR0ZVJvbGUgfSwKLSAgICAgICAgeyBSdWxlclJvbGUsIE5TQWNjZXNz
aWJpbGl0eVJ1bGVyUm9sZSB9LAotICAgICAgICB7IFJ1bGVyTWFya2VyUm9sZSwgTlNBY2Nlc3Np
YmlsaXR5UnVsZXJNYXJrZXJSb2xlIH0sCi0gICAgICAgIHsgTGlua1JvbGUsIE5TQWNjZXNzaWJp
bGl0eUxpbmtSb2xlIH0sCi0gICAgICAgIHsgRGlzY2xvc3VyZVRyaWFuZ2xlUm9sZSwgTlNBY2Nl
c3NpYmlsaXR5RGlzY2xvc3VyZVRyaWFuZ2xlUm9sZSB9LAotICAgICAgICB7IEdyaWRSb2xlLCBO
U0FjY2Vzc2liaWxpdHlHcmlkUm9sZSB9LAotICAgICAgICB7IFdlYkNvcmVMaW5rUm9sZSwgTlNB
Y2Nlc3NpYmlsaXR5TGlua1JvbGUgfSwKLSAgICAgICAgeyBJbWFnZU1hcExpbmtSb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlMaW5rUm9sZSB9LAotICAgICAgICB7IEltYWdlTWFwUm9sZSwgQCJBWEltYWdl
TWFwIiB9LAotICAgICAgICB7IExpc3RNYXJrZXJSb2xlLCBAIkFYTGlzdE1hcmtlciIgfSwKLSAg
ICAgICAgeyBXZWJBcmVhUm9sZSwgQCJBWFdlYkFyZWEiIH0sCi0gICAgICAgIHsgU2VhbWxlc3NX
ZWJBcmVhUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgSGVhZGlu
Z1JvbGUsIEAiQVhIZWFkaW5nIiB9LAotICAgICAgICB7IExpc3RCb3hSb2xlLCBOU0FjY2Vzc2li
aWxpdHlMaXN0Um9sZSB9LAotICAgICAgICB7IExpc3RCb3hPcHRpb25Sb2xlLCBOU0FjY2Vzc2li
aWxpdHlTdGF0aWNUZXh0Um9sZSB9LAotICAgICAgICB7IENlbGxSb2xlLCBOU0FjY2Vzc2liaWxp
dHlDZWxsUm9sZSB9LAotICAgICAgICB7IFRhYmxlSGVhZGVyQ29udGFpbmVyUm9sZSwgTlNBY2Nl
c3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgUm93SGVhZGVyUm9sZSwgTlNBY2Nlc3Np
YmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgRGVmaW5pdGlvblJvbGUsIE5TQWNjZXNzaWJp
bGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IERlc2NyaXB0aW9uTGlzdERldGFpbFJvbGUsIE5T
QWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IERlc2NyaXB0aW9uTGlzdFRlcm1S
b2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBTbGlkZXJUaHVtYlJv
bGUsIE5TQWNjZXNzaWJpbGl0eVZhbHVlSW5kaWNhdG9yUm9sZSB9LAotICAgICAgICB7IExhbmRt
YXJrQXBwbGljYXRpb25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAg
eyBMYW5kbWFya0Jhbm5lclJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAg
ICB7IExhbmRtYXJrQ29tcGxlbWVudGFyeVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9
LAotICAgICAgICB7IExhbmRtYXJrQ29udGVudEluZm9Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91
cFJvbGUgfSwKLSAgICAgICAgeyBMYW5kbWFya01haW5Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91
cFJvbGUgfSwKLSAgICAgICAgeyBMYW5kbWFya05hdmlnYXRpb25Sb2xlLCBOU0FjY2Vzc2liaWxp
dHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBMYW5kbWFya1NlYXJjaFJvbGUsIE5TQWNjZXNzaWJp
bGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IEFwcGxpY2F0aW9uQWxlcnRSb2xlLCBOU0FjY2Vz
c2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBBcHBsaWNhdGlvbkFsZXJ0RGlhbG9nUm9s
ZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgQXBwbGljYXRpb25EaWFs
b2dSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBBcHBsaWNhdGlv
bkxvZ1JvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IEFwcGxpY2F0
aW9uTWFycXVlZVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IEFw
cGxpY2F0aW9uU3RhdHVzUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAg
IHsgQXBwbGljYXRpb25UaW1lclJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAg
ICAgICB7IERvY3VtZW50Um9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAg
IHsgRG9jdW1lbnRBcnRpY2xlUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAg
ICAgIHsgRG9jdW1lbnRNYXRoUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAg
ICAgIHsgRG9jdW1lbnROb3RlUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAg
ICAgIHsgRG9jdW1lbnRSZWdpb25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAg
ICAgICAgeyBVc2VySW50ZXJmYWNlVG9vbHRpcFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9s
ZSB9LAotICAgICAgICB7IFRhYlJvbGUsIE5TQWNjZXNzaWJpbGl0eVJhZGlvQnV0dG9uUm9sZSB9
LAotICAgICAgICB7IFRhYkxpc3RSb2xlLCBOU0FjY2Vzc2liaWxpdHlUYWJHcm91cFJvbGUgfSwK
LSAgICAgICAgeyBUYWJQYW5lbFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAg
ICAgICB7IFRyZWVSb2xlLCBOU0FjY2Vzc2liaWxpdHlPdXRsaW5lUm9sZSB9LAotICAgICAgICB7
IFRyZWVJdGVtUm9sZSwgTlNBY2Nlc3NpYmlsaXR5Um93Um9sZSB9LAotICAgICAgICB7IExpc3RJ
dGVtUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgUGFyYWdyYXBo
Um9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgTGFiZWxSb2xlLCBO
U0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBEaXZSb2xlLCBOU0FjY2Vzc2li
aWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBGb3JtUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3Jv
dXBSb2xlIH0sCi0gICAgICAgIHsgU3BpbkJ1dHRvblJvbGUsIE5TQWNjZXNzaWJpbGl0eUluY3Jl
bWVudG9yUm9sZSB9LAotICAgICAgICB7IEZvb3RlclJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3Vw
Um9sZSB9LAotICAgICAgICB7IFRvZ2dsZUJ1dHRvblJvbGUsIE5TQWNjZXNzaWJpbGl0eUJ1dHRv
blJvbGUgfSwKLSAgICAgICAgeyBDYW52YXNSb2xlLCBOU0FjY2Vzc2liaWxpdHlJbWFnZVJvbGUg
fSwKLSAgICAgICAgeyBTVkdSb290Um9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0g
ICAgICAgIHsgTGVnZW5kUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAg
IHsgTWF0aEVsZW1lbnRSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfQotICAgIH07Ci0g
ICAgQWNjZXNzaWJpbGl0eVJvbGVNYXAmIHJvbGVNYXAgPSAqbmV3IEFjY2Vzc2liaWxpdHlSb2xl
TWFwOwotICAgIAotICAgIGNvbnN0IHVuc2lnbmVkIG51bVJvbGVzID0gc2l6ZW9mKHJvbGVzKSAv
IHNpemVvZihyb2xlc1swXSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVJvbGVz
OyArK2kpCi0gICAgICAgIHJvbGVNYXAuc2V0KHJvbGVzW2ldLnZhbHVlLCByb2xlc1tpXS5zdHJp
bmcpOwotICAgIHJldHVybiByb2xlTWFwOwotfQotCi1zdGF0aWMgTlNTdHJpbmcqIHJvbGVWYWx1
ZVRvTlNTdHJpbmcoQWNjZXNzaWJpbGl0eVJvbGUgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHZhbHVl
KTsKLSAgICBzdGF0aWMgY29uc3QgQWNjZXNzaWJpbGl0eVJvbGVNYXAmIHJvbGVNYXAgPSBjcmVh
dGVBY2Nlc3NpYmlsaXR5Um9sZU1hcCgpOwotICAgIHJldHVybiByb2xlTWFwLmdldCh2YWx1ZSk7
Ci19Ci0KLS0gKE5TU3RyaW5nKilyb2xlCi17Ci0gICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1l
bnQoKSkKLSAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGVdOwotICAgIEFjY2Vz
c2liaWxpdHlSb2xlIHJvbGUgPSBtX29iamVjdC0+cm9sZVZhbHVlKCk7Ci0gICAgaWYgKHJvbGUg
PT0gQ2FudmFzUm9sZSAmJiBtX29iamVjdC0+Y2FudmFzSGFzRmFsbGJhY2tDb250ZW50KCkpCi0g
ICAgICAgIHJvbGUgPSBHcm91cFJvbGU7Ci0gICAgTlNTdHJpbmcqIHN0cmluZyA9IHJvbGVWYWx1
ZVRvTlNTdHJpbmcocm9sZSk7Ci0gICAgaWYgKHN0cmluZyAhPSBuaWwpCi0gICAgICAgIHJldHVy
biBzdHJpbmc7Ci0gICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVua25vd25Sb2xlOwotfQotCi0t
IChOU1N0cmluZyopc3Vicm9sZQotewotICAgIGlmIChtX29iamVjdC0+aXNQYXNzd29yZEZpZWxk
KCkpCi0gICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlTZWN1cmVUZXh0RmllbGRTdWJyb2xl
OwotICAgIGlmIChtX29iamVjdC0+aXNTZWFyY2hGaWVsZCgpKQotICAgICAgICByZXR1cm4gTlNB
Y2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRTdWJyb2xlOwotICAgIAotICAgIGlmIChtX29iamVjdC0+
aXNBdHRhY2htZW50KCkpIHsKLSAgICAgICAgTlNWaWV3KiBhdHRhY2hWaWV3ID0gW3NlbGYgYXR0
YWNobWVudFZpZXddOwotICAgICAgICBpZiAoW1thdHRhY2hWaWV3IGFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVOYW1lc10gY29udGFpbnNPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5U3Vicm9sZUF0dHJpYnV0
ZV0pIHsKLSAgICAgICAgICAgIHJldHVybiBbYXR0YWNoVmlldyBhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5U3Vicm9sZUF0dHJpYnV0ZV07Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1NwaW5CdXR0b25QYXJ0KCkpIHsKLSAgICAg
ICAgaWYgKHRvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b25QYXJ0KG1fb2JqZWN0KS0+aXNJbmNyZW1l
bnRvcigpKQotICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEFycm93
U3Vicm9sZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlEZWNyZW1l
bnRBcnJvd1N1YnJvbGU7Ci0gICAgfQotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNGaWxlVXBs
b2FkQnV0dG9uKCkpCi0gICAgICAgIHJldHVybiBAIkFYRmlsZVVwbG9hZEJ1dHRvbiI7Ci0gICAg
Ci0gICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpCi0gICAgICAgIHJldHVybiBOU0FjY2Vz
c2liaWxpdHlPdXRsaW5lUm93U3Vicm9sZTsKLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzTGlz
dCgpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlMaXN0KiBsaXN0T2JqZWN0ID0gc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eUxpc3QqPihtX29iamVjdCk7Ci0gICAgICAgIGlmIChsaXN0T2JqZWN0
LT5pc1Vub3JkZXJlZExpc3QoKSB8fCBsaXN0T2JqZWN0LT5pc09yZGVyZWRMaXN0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5Q29udGVudExpc3RTdWJyb2xlOwotICAgICAg
ICBpZiAobGlzdE9iamVjdC0+aXNEZXNjcmlwdGlvbkxpc3QoKSkKLSAgICAgICAgICAgIHJldHVy
biBOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkxpc3RTdWJyb2xlOwotICAgIH0KLSAgICAKLSAg
ICAvLyBBUklBIGNvbnRlbnQgc3Vicm9sZXMuCi0gICAgc3dpdGNoIChtX29iamVjdC0+cm9sZVZh
bHVlKCkpIHsKLSAgICAgICAgY2FzZSBMYW5kbWFya0FwcGxpY2F0aW9uUm9sZToKLSAgICAgICAg
ICAgIHJldHVybiBAIkFYTGFuZG1hcmtBcHBsaWNhdGlvbiI7Ci0gICAgICAgIGNhc2UgTGFuZG1h
cmtCYW5uZXJSb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya0Jhbm5lciI7Ci0g
ICAgICAgIGNhc2UgTGFuZG1hcmtDb21wbGVtZW50YXJ5Um9sZToKLSAgICAgICAgICAgIHJldHVy
biBAIkFYTGFuZG1hcmtDb21wbGVtZW50YXJ5IjsKLSAgICAgICAgICAgIC8vIEZvb3RlciByb2xl
cyBzaG91bGQgYXBwZWFyIGFzIGNvbnRlbnQgaW5mbyB0eXBlcy4KLSAgICAgICAgY2FzZSBGb290
ZXJSb2xlOgotICAgICAgICBjYXNlIExhbmRtYXJrQ29udGVudEluZm9Sb2xlOgotICAgICAgICAg
ICAgcmV0dXJuIEAiQVhMYW5kbWFya0NvbnRlbnRJbmZvIjsKLSAgICAgICAgY2FzZSBMYW5kbWFy
a01haW5Sb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya01haW4iOwotICAgICAg
ICBjYXNlIExhbmRtYXJrTmF2aWdhdGlvblJvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJBWExh
bmRtYXJrTmF2aWdhdGlvbiI7Ci0gICAgICAgIGNhc2UgTGFuZG1hcmtTZWFyY2hSb2xlOgotICAg
ICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya1NlYXJjaCI7Ci0gICAgICAgIGNhc2UgQXBwbGlj
YXRpb25BbGVydFJvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJBWEFwcGxpY2F0aW9uQWxlcnQi
OwotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQWxlcnREaWFsb2dSb2xlOgotICAgICAgICAgICAg
cmV0dXJuIEAiQVhBcHBsaWNhdGlvbkFsZXJ0RGlhbG9nIjsKLSAgICAgICAgY2FzZSBBcHBsaWNh
dGlvbkRpYWxvZ1JvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJBWEFwcGxpY2F0aW9uRGlhbG9n
IjsKLSAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkxvZ1JvbGU6Ci0gICAgICAgICAgICByZXR1cm4g
QCJBWEFwcGxpY2F0aW9uTG9nIjsKLSAgICAgICAgY2FzZSBBcHBsaWNhdGlvbk1hcnF1ZWVSb2xl
OgotICAgICAgICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlvbk1hcnF1ZWUiOwotICAgICAgICBj
YXNlIEFwcGxpY2F0aW9uU3RhdHVzUm9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYQXBwbGlj
YXRpb25TdGF0dXMiOwotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uVGltZXJSb2xlOgotICAgICAg
ICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlvblRpbWVyIjsKLSAgICAgICAgY2FzZSBEb2N1bWVu
dFJvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJBWERvY3VtZW50IjsKLSAgICAgICAgY2FzZSBE
b2N1bWVudEFydGljbGVSb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAiQVhEb2N1bWVudEFydGlj
bGUiOwotICAgICAgICBjYXNlIERvY3VtZW50TWF0aFJvbGU6Ci0gICAgICAgICAgICByZXR1cm4g
QCJBWERvY3VtZW50TWF0aCI7Ci0gICAgICAgIGNhc2UgRG9jdW1lbnROb3RlUm9sZToKLSAgICAg
ICAgICAgIHJldHVybiBAIkFYRG9jdW1lbnROb3RlIjsKLSAgICAgICAgY2FzZSBEb2N1bWVudFJl
Z2lvblJvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJBWERvY3VtZW50UmVnaW9uIjsKLSAgICAg
ICAgY2FzZSBVc2VySW50ZXJmYWNlVG9vbHRpcFJvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJB
WFVzZXJJbnRlcmZhY2VUb29sdGlwIjsKLSAgICAgICAgY2FzZSBUYWJQYW5lbFJvbGU6Ci0gICAg
ICAgICAgICByZXR1cm4gQCJBWFRhYlBhbmVsIjsKLSAgICAgICAgY2FzZSBEZWZpbml0aW9uUm9s
ZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYRGVmaW5pdGlvbiI7Ci0gICAgICAgIGNhc2UgRGVz
Y3JpcHRpb25MaXN0VGVybVJvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJBWFRlcm0iOwotICAg
ICAgICBjYXNlIERlc2NyaXB0aW9uTGlzdERldGFpbFJvbGU6Ci0gICAgICAgICAgICByZXR1cm4g
QCJBWERlc2NyaXB0aW9uIjsKLSAgICAgICAgICAgIC8vIERlZmF1bHQgZG9lc24ndCByZXR1cm4g
YW55dGhpbmcsIHNvIHJvbGVzIGRlZmluZWQgYmVsb3cgY2FuIGJlIGNob3Nlbi4KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9vYmpl
Y3QtPnJvbGVWYWx1ZSgpID09IE1hdGhFbGVtZW50Um9sZSkgewotICAgICAgICBpZiAobV9vYmpl
Y3QtPmlzTWF0aEZyYWN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhGcmFjdGlv
biI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoRmVuY2VkKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gQCJBWE1hdGhGZW5jZWQiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFN1YnNj
cmlwdFN1cGVyc2NyaXB0KCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhTdWJzY3JpcHRT
dXBlcnNjcmlwdCI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoUm93KCkpCi0gICAgICAg
ICAgICByZXR1cm4gQCJBWE1hdGhSb3ciOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFVu
ZGVyT3ZlcigpKQotICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVW5kZXJPdmVyIjsKLSAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc01hdGhTcXVhcmVSb290KCkpCi0gICAgICAgICAgICByZXR1cm4g
QCJBWE1hdGhTcXVhcmVSb290IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhSb290KCkp
Ci0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhSb290IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc01hdGhUZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhUZXh0IjsKLSAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc01hdGhOdW1iZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBAIkFY
TWF0aE51bWJlciI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoSWRlbnRpZmllcigpKQot
ICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoSWRlbnRpZmllciI7Ci0gICAgICAgIGlmIChtX29i
amVjdC0+aXNNYXRoVGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFRhYmxlIjsK
LSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhUYWJsZVJvdygpKQotICAgICAgICAgICAgcmV0
dXJuIEAiQVhNYXRoVGFibGVSb3ciOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRhYmxl
Q2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVGFibGVDZWxsIjsKLSAgICAgICAg
aWYgKG1fb2JqZWN0LT5pc01hdGhGZW5jZU9wZXJhdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4g
QCJBWE1hdGhGZW5jZU9wZXJhdG9yIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhTZXBh
cmF0b3JPcGVyYXRvcigpKQotICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoU2VwYXJhdG9yT3Bl
cmF0b3IiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aE9wZXJhdG9yKCkpCi0gICAgICAg
ICAgICByZXR1cm4gQCJBWE1hdGhPcGVyYXRvciI7Ci0gICAgfQotICAgIAotICAgIGlmIChtX29i
amVjdC0+aXNNZWRpYVRpbWVsaW5lKCkpCi0gICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlU
aW1lbGluZVN1YnJvbGU7Ci0gICAgCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoTlNTdHJpbmcq
KXJvbGVEZXNjcmlwdGlvbgotewotICAgIGlmICghbV9vYmplY3QpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgCi0gICAgLy8gYXR0YWNobWVudHMgaGF2ZSB0aGUgQVhJbWFnZSByb2xlLCBidXQg
YSBkaWZmZXJlbnQgc3Vicm9sZQotICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpCi0g
ICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVdOwotICAgIAot
ICAgIE5TU3RyaW5nKiBheFJvbGUgPSBbc2VsZiByb2xlXTsKLSAgICAKLSAgICBpZiAoW2F4Um9s
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlXSkgewotICAgICAgICBz
d2l0Y2ggKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSkgewotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uKE5TQWNj
ZXNzaWJpbGl0eUdyb3VwUm9sZSwgW3NlbGYgc3Vicm9sZV0pOwotICAgICAgICAgICAgY2FzZSBM
YW5kbWFya0FwcGxpY2F0aW9uUm9sZToKLSAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29u
dGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFya0FwcGxpY2F0aW9uIik7Ci0gICAgICAgICAgICBj
YXNlIExhbmRtYXJrQmFubmVyUm9sZToKLSAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29u
dGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFya0Jhbm5lciIpOwotICAgICAgICAgICAgY2FzZSBM
YW5kbWFya0NvbXBsZW1lbnRhcnlSb2xlOgotICAgICAgICAgICAgICAgIHJldHVybiBBWEFSSUFD
b250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJrQ29tcGxlbWVudGFyeSIpOwotICAgICAgICAg
ICAgY2FzZSBMYW5kbWFya0NvbnRlbnRJbmZvUm9sZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
QVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFya0NvbnRlbnRJbmZvIik7Ci0gICAg
ICAgICAgICBjYXNlIExhbmRtYXJrTWFpblJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFY
QVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtNYWluIik7Ci0gICAgICAgICAgICBj
YXNlIExhbmRtYXJrTmF2aWdhdGlvblJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJ
QUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtOYXZpZ2F0aW9uIik7Ci0gICAgICAgICAg
ICBjYXNlIExhbmRtYXJrU2VhcmNoUm9sZToKLSAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklB
Q29udGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFya1NlYXJjaCIpOwotICAgICAgICAgICAgY2Fz
ZSBBcHBsaWNhdGlvbkFsZXJ0Um9sZToKLSAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29u
dGVudEdyb3VwVGV4dChAIkFSSUFBcHBsaWNhdGlvbkFsZXJ0Iik7Ci0gICAgICAgICAgICBjYXNl
IEFwcGxpY2F0aW9uQWxlcnREaWFsb2dSb2xlOgotICAgICAgICAgICAgICAgIHJldHVybiBBWEFS
SUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0aW9uQWxlcnREaWFsb2ciKTsKLSAgICAg
ICAgICAgIGNhc2UgQXBwbGljYXRpb25EaWFsb2dSb2xlOgotICAgICAgICAgICAgICAgIHJldHVy
biBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0aW9uRGlhbG9nIik7Ci0gICAg
ICAgICAgICBjYXNlIEFwcGxpY2F0aW9uTG9nUm9sZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
QVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFBcHBsaWNhdGlvbkxvZyIpOwotICAgICAgICAg
ICAgY2FzZSBBcHBsaWNhdGlvbk1hcnF1ZWVSb2xlOgotICAgICAgICAgICAgICAgIHJldHVybiBB
WEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0aW9uTWFycXVlZSIpOwotICAgICAg
ICAgICAgY2FzZSBBcHBsaWNhdGlvblN0YXR1c1JvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBwbGljYXRpb25TdGF0dXMiKTsKLSAgICAg
ICAgICAgIGNhc2UgQXBwbGljYXRpb25UaW1lclJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBwbGljYXRpb25UaW1lciIpOwotICAgICAg
ICAgICAgY2FzZSBEb2N1bWVudFJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNv
bnRlbnRHcm91cFRleHQoQCJBUklBRG9jdW1lbnQiKTsKLSAgICAgICAgICAgIGNhc2UgRG9jdW1l
bnRBcnRpY2xlUm9sZToKLSAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3Vw
VGV4dChAIkFSSUFEb2N1bWVudEFydGljbGUiKTsKLSAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRN
YXRoUm9sZToKLSAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChA
IkFSSUFEb2N1bWVudE1hdGgiKTsKLSAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb3RlUm9sZToK
LSAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFEb2N1
bWVudE5vdGUiKTsKLSAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRSZWdpb25Sb2xlOgotICAgICAg
ICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQURvY3VtZW50UmVn
aW9uIik7Ci0gICAgICAgICAgICBjYXNlIFVzZXJJbnRlcmZhY2VUb29sdGlwUm9sZToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFVc2VySW50ZXJm
YWNlVG9vbHRpcCIpOwotICAgICAgICAgICAgY2FzZSBUYWJQYW5lbFJvbGU6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBVGFiUGFuZWwiKTsKLSAg
ICAgICAgICAgIGNhc2UgRGVmaW5pdGlvblJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFY
RGVmaW5pdGlvblRleHQoKTsKLSAgICAgICAgICAgIGNhc2UgRGVzY3JpcHRpb25MaXN0VGVybVJv
bGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFYRGVzY3JpcHRpb25MaXN0VGVybVRleHQoKTsK
LSAgICAgICAgICAgIGNhc2UgRGVzY3JpcHRpb25MaXN0RGV0YWlsUm9sZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gQVhEZXNjcmlwdGlvbkxpc3REZXRhaWxUZXh0KCk7Ci0gICAgICAgICAgICBj
YXNlIEZvb3RlclJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFYRm9vdGVyUm9sZURlc2Ny
aXB0aW9uVGV4dCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChbYXhSb2xlIGlz
RXF1YWxUb1N0cmluZzpAIkFYV2ViQXJlYSJdKQotICAgICAgICByZXR1cm4gQVhXZWJBcmVhVGV4
dCgpOwotICAgIAotICAgIGlmIChbYXhSb2xlIGlzRXF1YWxUb1N0cmluZzpAIkFYTGluayJdKQot
ICAgICAgICByZXR1cm4gQVhMaW5rVGV4dCgpOwotICAgIAotICAgIGlmIChbYXhSb2xlIGlzRXF1
YWxUb1N0cmluZzpAIkFYTGlzdE1hcmtlciJdKQotICAgICAgICByZXR1cm4gQVhMaXN0TWFya2Vy
VGV4dCgpOwotICAgIAotICAgIGlmIChbYXhSb2xlIGlzRXF1YWxUb1N0cmluZzpAIkFYSW1hZ2VN
YXAiXSkKLSAgICAgICAgcmV0dXJuIEFYSW1hZ2VNYXBUZXh0KCk7Ci0gICAgCi0gICAgaWYgKFth
eFJvbGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhIZWFkaW5nIl0pCi0gICAgICAgIHJldHVybiBBWEhl
YWRpbmdUZXh0KCk7Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0ZpbGVVcGxvYWRCdXR0b24o
KSkKLSAgICAgICAgcmV0dXJuIEFYRmlsZVVwbG9hZEJ1dHRvblRleHQoKTsKLSAgICAKLSAgICAv
LyBBcHBLaXQgYWxzbyByZXR1cm5zIEFYVGFiIGZvciB0aGUgcm9sZSBkZXNjcmlwdGlvbiBmb3Ig
YSB0YWIgaXRlbS4KLSAgICBpZiAobV9vYmplY3QtPmlzVGFiSXRlbSgpKQotICAgICAgICByZXR1
cm4gTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uKEAiQVhUYWIiLCBuaWwpOwotICAgIAot
ICAgIC8vIFdlIHNob3VsZCB0cnkgdGhlIHN5c3RlbSBkZWZhdWx0IHJvbGUgZGVzY3JpcHRpb24g
Zm9yIGFsbCBvdGhlciByb2xlcy4KLSAgICAvLyBJZiB3ZSBnZXQgdGhlIHNhbWUgc3RyaW5nIGJh
Y2ssIHRoZW4gYXMgYSBsYXN0IHJlc29ydCwgcmV0dXJuIHVua25vd24uCi0gICAgTlNTdHJpbmcq
IGRlZmF1bHRSb2xlRGVzY3JpcHRpb24gPSBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb24o
YXhSb2xlLCBbc2VsZiBzdWJyb2xlXSk7Ci0gICAgCi0gICAgLy8gT24gZWFybGllciBNYWMgdmVy
c2lvbnMgKExpb24pLCB1c2luZyBhIG5vbi1zdGFuZGFyZCBzdWJyb2xlIHdvdWxkIHJlc3VsdCBp
biBhIHJvbGUgZGVzY3JpcHRpb24KLSAgICAvLyBiZWluZyByZXR1cm5lZCB0aGF0IGxvb2tlZCBs
aWtlIEFYUm9sZTpBWFN1YnJvbGUuIFRvIG1ha2UgYWxsIHBsYXRmb3JtcyBoYXZlIHRoZSBzYW1l
IHJvbGUgZGVzY3JpcHRpb25zCi0gICAgLy8gd2Ugc2hvdWxkIGZhbGxiYWNrIG9uIGEgcm9sZSBk
ZXNjcmlwdGlvbiBpZ25vcmluZyB0aGUgc3Vicm9sZSBpbiB0aGVzZSBjYXNlcy4KLSAgICBpZiAo
W2RlZmF1bHRSb2xlRGVzY3JpcHRpb24gaXNFcXVhbFRvU3RyaW5nOltOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiJUA6JUAiLCBheFJvbGUsIFtzZWxmIHN1YnJvbGVdXV0pCi0gICAgICAgIGRl
ZmF1bHRSb2xlRGVzY3JpcHRpb24gPSBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb24oYXhS
b2xlLCBuaWwpOwotICAgIAotICAgIGlmICghW2RlZmF1bHRSb2xlRGVzY3JpcHRpb24gaXNFcXVh
bFRvU3RyaW5nOmF4Um9sZV0pCi0gICAgICAgIHJldHVybiBkZWZhdWx0Um9sZURlc2NyaXB0aW9u
OwotICAgIAotICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb24oTlNBY2Nl
c3NpYmlsaXR5VW5rbm93blJvbGUsIG5pbCk7Ci19Ci0KLS0gKGlkKXNjcm9sbFZpZXdQYXJlbnQK
LXsKLSAgICBpZiAoIW1fb2JqZWN0IHx8ICFtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xs
VmlldygpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIC8vIElmIHRoaXMgc2Nyb2xs
IHZpZXcgcHJvdmlkZXMgaXQncyBwYXJlbnQgb2JqZWN0IChiZWNhdXNlIGl0J3MgYSBzdWItZnJh
bWUpLCB0aGVuCi0gICAgLy8gd2Ugc2hvdWxkIG5vdCBmaW5kIHRoZSByZW1vdGVBY2Nlc3NpYmls
aXR5UGFyZW50LgotICAgIGlmIChtX29iamVjdC0+cGFyZW50T2JqZWN0KCkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcqIHNjcm9sbFZpZXcg
PSB0b0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KG1fb2JqZWN0KTsKLSAgICBTY3JvbGxWaWV3KiBz
Y3JvbGwgPSBzY3JvbGxWaWV3LT5zY3JvbGxWaWV3KCk7Ci0gICAgaWYgKCFzY3JvbGwpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgaWYgKHNjcm9sbC0+cGxhdGZvcm1XaWRnZXQoKSkK
LSAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKHNjcm9sbC0+
cGxhdGZvcm1XaWRnZXQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIFtzZWxmIHJlbW90ZUFjY2Vzc2li
aWxpdHlQYXJlbnRPYmplY3RdOwotfQotCi0vLyBGSVhNRTogRGlmZmVyZW50IGtpbmRzIG9mIGVs
ZW1lbnRzIGFyZSBwdXR0aW5nIHRoZSB0aXRsZSB0YWcgdG8gdXNlIGluIGRpZmZlcmVudAotLy8g
QVggZmllbGRzLiBUaGlzIHNob3VsZCBiZSByZWN0aWZpZWQsIGJ1dCBpbiB0aGUgaW5pdGlhbCBw
YXRjaCBJIHdhbnQgdG8gYWNoaWV2ZQotLy8gcGFyaXR5IHdpdGggZXhpc3RpbmcgYmVoYXZpb3Iu
Ci0tIChCT09MKXRpdGxlVGFnU2hvdWxkQmVVc2VkSW5EZXNjcmlwdGlvbkZpZWxkCi17Ci0gICAg
cmV0dXJuIChtX29iamVjdC0+aXNMaW5rKCkgJiYgIW1fb2JqZWN0LT5pc0ltYWdlTWFwTGluaygp
KSB8fCBtX29iamVjdC0+aXNJbWFnZSgpOwotfQotCi0vLyBUaGlzIHNob3VsZCBiZSB0aGUgInZp
c2libGUiIHRleHQgdGhhdCdzIGFjdHVhbGx5IG9uIHRoZSBzY3JlZW4gaWYgcG9zc2libGUuCi0v
LyBJZiB0aGVyZSdzIGFsdGVybmF0aXZlIHRleHQsIHRoYXQgY2FuIG92ZXJyaWRlIHRoZSB0aXRs
ZS4KLS0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVRpdGxlCi17Ci0gICAgLy8gU3RhdGljIHRl
eHQgb2JqZWN0cyBzaG91bGQgbm90IGhhdmUgYSB0aXRsZS4gSXRzIGNvbnRlbnQgaXMgY29tbXVu
aWNhdGVkIGluIGl0cyBBWFZhbHVlLgotICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0g
U3RhdGljVGV4dFJvbGUpCi0gICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nXTsKLSAgICAK
LSAgICAvLyBBIGZpbGUgdXBsb2FkIGJ1dHRvbiBwcmVzZW50cyBhIGNoYWxsZW5nZSBiZWNhdXNl
IGl0IGhhcyBidXR0b24gdGV4dCBhbmQgYSB2YWx1ZSwgYnV0IHRoZQotICAgIC8vIEFQSSBkb2Vz
bid0IHN1cHBvcnQgdGhpcyBwYXJhZGlnbS4KLSAgICAvLyBUaGUgY29tcHJvbWlzZSBpcyB0byBy
ZXR1cm4gdGhlIGJ1dHRvbiB0eXBlIGluIHRoZSByb2xlIGRlc2NyaXB0aW9uIGFuZCB0aGUgdmFs
dWUgb2YgdGhlIGZpbGUgcGF0aCBpbiB0aGUgdGl0bGUKLSAgICBpZiAobV9vYmplY3QtPmlzRmls
ZVVwbG9hZEJ1dHRvbigpKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPnN0cmluZ1ZhbHVlKCk7
Ci0gICAgCi0gICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiB0ZXh0T3JkZXI7Ci0gICAgbV9v
YmplY3QtPmFjY2Vzc2liaWxpdHlUZXh0KHRleHRPcmRlcik7Ci0gICAgCi0gICAgdW5zaWduZWQg
bGVuZ3RoID0gdGV4dE9yZGVyLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwg
bGVuZ3RoOyBrKyspIHsKLSAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eVRleHQmIHRleHQgPSB0
ZXh0T3JkZXJba107Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB3ZSBoYXZlIGFsdGVybmF0aXZl
IHRleHQsIHRoZW4gd2Ugc2hvdWxkIG5vdCBleHBvc2UgYSB0aXRsZS4KLSAgICAgICAgaWYgKHRl
eHQudGV4dFNvdXJjZSA9PSBBbHRlcm5hdGl2ZVRleHQpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgCi0gICAgICAgIC8vIE9uY2Ugd2UgZW5jb3VudGVyIHZpc2libGUgdGV4dCwgb3IgdGhl
IHRleHQgZnJvbSBvdXIgY2hpbGRyZW4gdGhhdCBzaG91bGQgYmUgdXNlZCBmb3JlbW9zdC4KLSAg
ICAgICAgaWYgKHRleHQudGV4dFNvdXJjZSA9PSBWaXNpYmxlVGV4dCB8fCB0ZXh0LnRleHRTb3Vy
Y2UgPT0gQ2hpbGRyZW5UZXh0KQotICAgICAgICAgICAgcmV0dXJuIHRleHQudGV4dDsKLSAgICAg
ICAgCi0gICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gZWxlbWVudCB0aGF0IGxhYmVscyB0aGlzIG9i
amVjdCBhbmQgaXQncyBub3QgZXhwb3NlZCwgdGhlbiB3ZSBzaG91bGQgdXNlCi0gICAgICAgIC8v
IHRoYXQgdGV4dCBhcyBvdXIgdGl0bGUuCi0gICAgICAgIGlmICh0ZXh0LnRleHRTb3VyY2UgPT0g
TGFiZWxCeUVsZW1lbnRUZXh0ICYmICFtX29iamVjdC0+ZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkp
Ci0gICAgICAgICAgICByZXR1cm4gdGV4dC50ZXh0OwotICAgICAgICAKLSAgICAgICAgLy8gRklY
TUU6IFRoZSB0aXRsZSB0YWcgaXMgdXNlZCBpbiBjZXJ0YWluIGNhc2VzIGZvciB0aGUgdGl0bGUu
IFRoaXMgdXNhZ2Ugc2hvdWxkCi0gICAgICAgIC8vIHByb2JhYmx5IGJlIGluIHRoZSBkZXNjcmlw
dGlvbiBmaWVsZCBzaW5jZSBpdCdzIG5vdCAidmlzaWJsZSIuCi0gICAgICAgIGlmICh0ZXh0LnRl
eHRTb3VyY2UgPT0gVGl0bGVUYWdUZXh0ICYmICFbc2VsZiB0aXRsZVRhZ1Nob3VsZEJlVXNlZElu
RGVzY3JpcHRpb25GaWVsZF0pCi0gICAgICAgICAgICByZXR1cm4gdGV4dC50ZXh0OwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ107Ci19Ci0KLS0gKE5TU3RyaW5nICop
YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uCi17Ci0gICAgLy8gU3RhdGljIHRleHQgb2JqZWN0cyBz
aG91bGQgbm90IGhhdmUgYSBkZXNjcmlwdGlvbi4gSXRzIGNvbnRlbnQgaXMgY29tbXVuaWNhdGVk
IGluIGl0cyBBWFZhbHVlLgotICAgIC8vIE9uZSBleGNlcHRpb24gaXMgdGhlIG1lZGlhIGNvbnRy
b2wgbGFiZWxzIHRoYXQgaGF2ZSBhIHZhbHVlIGFuZCBhIGRlc2NyaXB0aW9uLiBUaG9zZSBhcmUg
c2V0IHByb2dyYW1hdGljYWxseS4KLSAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IFN0
YXRpY1RleHRSb2xlICYmICFtX29iamVjdC0+aXNNZWRpYUNvbnRyb2xMYWJlbCgpKQotICAgICAg
ICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ107Ci0gICAgCi0gICAgVmVjdG9yPEFjY2Vzc2liaWxp
dHlUZXh0PiB0ZXh0T3JkZXI7Ci0gICAgbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlUZXh0KHRleHRP
cmRlcik7Ci0gICAgCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dE9yZGVyLnNpemUoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBrKyspIHsKLSAgICAgICAgY29uc3Qg
QWNjZXNzaWJpbGl0eVRleHQmIHRleHQgPSB0ZXh0T3JkZXJba107Ci0gICAgICAgIAotICAgICAg
ICBpZiAodGV4dC50ZXh0U291cmNlID09IEFsdGVybmF0aXZlVGV4dCkKLSAgICAgICAgICAgIHJl
dHVybiB0ZXh0LnRleHQ7Ci0gICAgICAgIAotICAgICAgICBpZiAodGV4dC50ZXh0U291cmNlID09
IFRpdGxlVGFnVGV4dCAmJiBbc2VsZiB0aXRsZVRhZ1Nob3VsZEJlVXNlZEluRGVzY3JpcHRpb25G
aWVsZF0pCi0gICAgICAgICAgICByZXR1cm4gdGV4dC50ZXh0OwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gW05TU3RyaW5nIHN0cmluZ107Ci19Ci0KLS0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0
eUhlbHBUZXh0Ci17Ci0gICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiB0ZXh0T3JkZXI7Ci0g
ICAgbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlUZXh0KHRleHRPcmRlcik7Ci0gICAgCi0gICAgdW5z
aWduZWQgbGVuZ3RoID0gdGV4dE9yZGVyLnNpemUoKTsKLSAgICBib29sIGRlc2NyaXB0aXZlVGV4
dEF2YWlsYWJsZSA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7
IGsrKykgewotICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5VGV4dCYgdGV4dCA9IHRleHRPcmRl
cltrXTsKLSAgICAgICAgCi0gICAgICAgIGlmICh0ZXh0LnRleHRTb3VyY2UgPT0gSGVscFRleHQg
fHwgdGV4dC50ZXh0U291cmNlID09IFN1bW1hcnlUZXh0KQotICAgICAgICAgICAgcmV0dXJuIHRl
eHQudGV4dDsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIGFuIGVsZW1lbnQgZG9lcyBOT1QgaGF2
ZSBvdGhlciBkZXNjcmlwdGl2ZSB0ZXh0IHRoZSB0aXRsZSB0YWcgc2hvdWxkIGJlIHVzZWQgYXMg
aXRzIGRlc2NyaXB0aXZlIHRleHQuCi0gICAgICAgIC8vIEJ1dCwgaWYgdGhvc2UgQVJFIGF2YWls
YWJsZSwgdGhlbiB0aGUgdGl0bGUgdGFnIHNob3VsZCBiZSB1c2VkIGZvciBoZWxwIHRleHQgaW5z
dGVhZC4KLSAgICAgICAgc3dpdGNoICh0ZXh0LnRleHRTb3VyY2UpIHsKLSAgICAgICAgICAgIGNh
c2UgQWx0ZXJuYXRpdmVUZXh0OgotICAgICAgICAgICAgY2FzZSBWaXNpYmxlVGV4dDoKLSAgICAg
ICAgICAgIGNhc2UgQ2hpbGRyZW5UZXh0OgotICAgICAgICAgICAgY2FzZSBMYWJlbEJ5RWxlbWVu
dFRleHQ6Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRpdmVUZXh0QXZhaWxhYmxlID0gdHJ1ZTsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmICh0ZXh0LnRleHRTb3VyY2UgPT0gVGl0bGVUYWdUZXh0ICYm
IGRlc2NyaXB0aXZlVGV4dEF2YWlsYWJsZSkKLSAgICAgICAgICAgIHJldHVybiB0ZXh0LnRleHQ7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nXTsKLX0KLQotLy8gRklY
TUU6IHNwbGl0IHVwIHRoaXMgZnVuY3Rpb24gaW4gYSBiZXR0ZXIgd2F5LgotLy8gc3VnZ2VzdGlv
bnM6IFVzZSBhIGhhc2ggdGFibGUgdGhhdCBtYXBzIGF0dHJpYnV0ZSBuYW1lcyB0byBmdW5jdGlv
biBjYWxscywKLS8vIG9yIG1heWJlIHBvaW50ZXJzIHRvIG1lbWJlciBmdW5jdGlvbnMKLS0gKGlk
KWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUKLXsK
LSAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbc2VsZiByb2xlXTsK
LSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2li
aWxpdHlTdWJyb2xlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIHN1YnJvbGVdOwot
ICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJp
bGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbc2VsZiByb2xl
RGVzY3JpcHRpb25dOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgCi0gICAgICAg
IC8vIFRoaXMgd2lsbCByZXR1cm4gdGhlIHBhcmVudCBvZiB0aGUgQVhXZWJBcmVhLCBpZiB0aGlz
IGlzIGEgd2ViIGFyZWEuCi0gICAgICAgIGlkIHNjcm9sbFZpZXdQYXJlbnQgPSBbc2VsZiBzY3Jv
bGxWaWV3UGFyZW50XTsKLSAgICAgICAgaWYgKHNjcm9sbFZpZXdQYXJlbnQpCi0gICAgICAgICAg
ICByZXR1cm4gc2Nyb2xsVmlld1BhcmVudDsKLSAgICAgICAgCi0gICAgICAgIC8vIFRyZWUgaXRl
bSAoY2hhbmdlZCB0byBBWFJvd3MpIGNhbiBvbmx5IHJlcG9ydCB0aGUgdHJlZSAoQVhPdXRsaW5l
KSBhcyBpdHMgcGFyZW50LgotICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkgewot
ICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVu
dE9iamVjdFVuaWdub3JlZCgpOwotICAgICAgICAgICAgd2hpbGUgKHBhcmVudCkgewotICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcGFyZW50LT53cmFwcGVyKCk7Ci0gICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5w
YXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVu
dE9iamVjdFVuaWdub3JlZCgpOwotICAgICAgICBpZiAoIXBhcmVudCkKLSAgICAgICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgICAgIAotICAgICAgICAvLyBJbiBXZWJLaXQxLCB0aGUgc2Nyb2xsIHZp
ZXcgaXMgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSAodGhlIGF0dGFjaG1lbnQgdmlldyksIHNvIHRo
ZSBwYXJlbnQKLSAgICAgICAgLy8gc2hvdWxkIGJlIHJlcG9ydGVkIGRpcmVjdGx5IGFzIHN1Y2gu
Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNXZWJBcmVhKCkgJiYgcGFyZW50LT5pc0F0dGFjaG1l
bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBbcGFyZW50LT53cmFwcGVyKCkgYXR0YWNobWVudFZp
ZXddOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwotICAgIH0K
LSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2li
aWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5jaGlsZHJl
bigpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgTlNBcnJheSogY2hpbGRyZW4gPSBbc2VsZiBy
ZW5kZXJXaWRnZXRDaGlsZHJlbl07Ci0gICAgICAgICAgICBpZiAoY2hpbGRyZW4gIT0gbmlsKQot
ICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgLy8gVGhlIHRyZWUncyAoQVhPdXRsaW5lKSBjaGlsZHJlbiBhcmUgc3VwcG9zZWQgdG8g
YmUgaXRzIHJvd3MgYW5kIGNvbHVtbnMuCi0gICAgICAgIC8vIFRoZSBBUklBIHNwZWMgZG9lc24n
dCBoYXZlIGNvbHVtbnMsIHNvIHdlIGp1c3QgbmVlZCByb3dzLgotICAgICAgICBpZiAobV9vYmpl
Y3QtPmlzVHJlZSgpKQotICAgICAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIEEgdHJlZSBpdGVtIHNob3VsZCBvbmx5IGV4cG9zZSBpdHMgY29udGVudCBhcyBpdHMg
Y2hpbGRyZW4gKG5vdCBpdHMgcm93cykKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVt
KCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBjb250ZW50Q29weTsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5hcmlhVHJlZUl0
ZW1Db250ZW50KGNvbnRlbnRDb3B5KTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0Fy
cmF5KGNvbnRlbnRDb3B5KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGNv
bnZlcnRUb05TQXJyYXkobV9vYmplY3QtPmNoaWxkcmVuKCkpOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3Rl
ZENoaWxkcmVuQXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzTGlzdEJveCgp
KSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbkNvcHk7Ci0gICAgICAgICAgICBtX29iamVjdC0+c2Vs
ZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuQ29weSk7Ci0gICAgICAgICAgICByZXR1cm4g
Y29udmVydFRvTlNBcnJheShzZWxlY3RlZENoaWxkcmVuQ29weSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoaWxkcmVuQXR0cmlidXRlXSkgewot
ICAgICAgICBpZiAobV9vYmplY3QtPmlzTGlzdEJveCgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdmlzaWJsZUNoaWxkcmVu
Q29weTsKLSAgICAgICAgICAgIG1fb2JqZWN0LT52aXNpYmxlQ2hpbGRyZW4odmlzaWJsZUNoaWxk
cmVuQ29weSk7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh2aXNpYmxlQ2hp
bGRyZW5Db3B5KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtX29iamVjdC0+aXNMaXN0
KCkpCi0gICAgICAgICAgICByZXR1cm4gW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
Ok5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKLSAgICAgICAgCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgfQotICAgIAotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNXZWJBcmVh
KCkpIHsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYTGlu
a1VJRWxlbWVudHMiXSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGxpbmtzOwotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KG1fb2JqZWN0KS0+Z2V0RG9jdW1lbnRMaW5rcyhsaW5r
cyk7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShsaW5rcyk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYTG9hZGVk
Il0pCi0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0
LT5pc0xvYWRlZCgpXTsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYTGF5b3V0Q291bnQiXSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEludDptX29iamVjdC0+bGF5b3V0Q291bnQoKV07Ci0gICAgICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TG9hZGluZ1Byb2dyZXNzQXR0cmli
dXRlXSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTptX29i
amVjdC0+ZXN0aW1hdGVkTG9hZGluZ1Byb2dyZXNzKCldOwotICAgIH0KLSAgICAKLSAgICBpZiAo
bV9vYmplY3QtPmlzVGV4dENvbnRyb2woKSkgewotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1
dGVdKSB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gbV9vYmplY3QtPnRleHRMZW5ndGgoKTsK
LSAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBuaWw7
Ci0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDpsZW5n
dGhdOwotICAgICAgICB9Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAg
IFN0cmluZyBzZWxlY3RlZFRleHQgPSBtX29iamVjdC0+c2VsZWN0ZWRUZXh0KCk7Ci0gICAgICAg
ICAgICBpZiAoc2VsZWN0ZWRUZXh0LmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgICAgICAgICByZXR1cm4gKE5TU3RyaW5nKilzZWxlY3RlZFRleHQ7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBQbGFpblRl
eHRSYW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+c2VsZWN0ZWRUZXh0UmFuZ2UoKTsKLSAgICAg
ICAgICAgIGlmICh0ZXh0UmFuZ2UuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFtO
U1ZhbHVlIHZhbHVlV2l0aFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXTsKLSAgICAgICAgICAgIHJl
dHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpOU01ha2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQs
IHRleHRSYW5nZS5sZW5ndGgpXTsKLSAgICAgICAgfQotICAgICAgICAvLyBUT0RPOiBHZXQgYWN0
dWFsIHZpc2libGUgcmFuZ2UuIDxyZGFyOi8vcHJvYmxlbS80NzEyMTAxPgotICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hh
cmFjdGVyUmFuZ2VBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5pc1Bh
c3N3b3JkRmllbGQoKSA/IG5pbCA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOiBOU01ha2VSYW5n
ZSgwLCBtX29iamVjdC0+dGV4dExlbmd0aCgpKV07Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUluc2VydGlvblBvaW50TGluZU51bWJl
ckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIC8vIGlmIHNlbGVjdGlvbkVuZCA+IDAsIHRoZW4g
dGhlcmUgaXMgc2VsZWN0ZWQgdGV4dCBhbmQgdGhpcyBxdWVzdGlvbiBzaG91bGQgbm90IGJlIGFu
c3dlcmVkCi0gICAgICAgICAgICBpZiAobV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpIHx8IG1f
b2JqZWN0LT5zZWxlY3Rpb25FbmQoKSA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZm9jdXNlZE9i
amVjdCA9IG1fb2JqZWN0LT5mb2N1c2VkVUlFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoZm9j
dXNlZE9iamVjdCAhPSBtX29iamVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gZm9jdXNlZFBvc2l0aW9uID0g
Zm9jdXNlZE9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoZm9jdXNlZE9iamVjdC0+c2Vs
ZWN0aW9uU3RhcnQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IG1fb2Jq
ZWN0LT5saW5lRm9yUG9zaXRpb24oZm9jdXNlZFBvc2l0aW9uKTsKLSAgICAgICAgICAgIGlmIChs
aW5lTnVtYmVyIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bGluZU51bWJlcl07
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VVJMQXR0cmlidXRlXSkgewotICAgICAgICBLVVJMIHVy
bCA9IG1fb2JqZWN0LT51cmwoKTsKLSAgICAgICAgaWYgKHVybC5pc051bGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgICAgIHJldHVybiAoTlNVUkwqKXVybDsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKG1fb2JqZWN0LT5pc1NwaW5CdXR0b24oKSkgewotICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEJ1dHRvbkF0
dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbiht
X29iamVjdCktPmluY3JlbWVudEJ1dHRvbigpLT53cmFwcGVyKCk7Ci0gICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QnV0dG9u
QXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiB0b0FjY2Vzc2liaWxpdHlTcGluQnV0dG9u
KG1fb2JqZWN0KS0+ZGVjcmVtZW50QnV0dG9uKCktPndyYXBwZXIoKTsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogQCJBWFZpc2l0ZWQiXSkKLSAg
ICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogbV9vYmplY3QtPmlzVmlzaXRl
ZCgpXTsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0Fj
Y2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0F0
dGFjaG1lbnQoKSkgewotICAgICAgICAgICAgaWYgKFtbW3NlbGYgYXR0YWNobWVudFZpZXddIGFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10gY29udGFpbnNPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
VGl0bGVBdHRyaWJ1dGVdKQotICAgICAgICAgICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVu
dFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlUaXRsZUF0
dHJpYnV0ZV07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBbc2VsZiBhY2Nl
c3NpYmlsaXR5VGl0bGVdOwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV0pIHsKLSAg
ICAgICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkgewotICAgICAgICAgICAgaWYgKFtb
W3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10gY29udGFp
bnNPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdKQotICAgICAgICAg
ICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbl07Ci0gICAgfQot
ICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJp
bGl0eVZhbHVlQXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVu
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoW1tbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZU5hbWVzXSBjb250YWluc09iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0
dHJpYnV0ZV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10g
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRl
XTsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzUmFuZ2VWYWx1ZSgp
KQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6bV9vYmplY3Qt
PnZhbHVlRm9yUmFuZ2UoKV07Ci0gICAgICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0g
U2xpZGVyVGh1bWJSb2xlKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRo
RmxvYXQ6bV9vYmplY3QtPnBhcmVudE9iamVjdCgpLT52YWx1ZUZvclJhbmdlKCldOwotICAgICAg
ICBpZiAobV9vYmplY3QtPmlzSGVhZGluZygpKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT5oZWFkaW5nTGV2ZWwoKV07Ci0gICAgICAgIAotICAg
ICAgICBpZiAobV9vYmplY3QtPmlzQ2hlY2tib3hPclJhZGlvKCkpIHsKLSAgICAgICAgICAgIHN3
aXRjaCAobV9vYmplY3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIEJ1dHRvblN0YXRlT2ZmOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gW05TTnVt
YmVyIG51bWJlcldpdGhJbnQ6MF07Ci0gICAgICAgICAgICAgICAgY2FzZSBCdXR0b25TdGF0ZU9u
OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6MV07
Ci0gICAgICAgICAgICAgICAgY2FzZSBCdXR0b25TdGF0ZU1peGVkOgotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Ml07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIHJhZGlvIGdyb3VwcyByZXR1cm4gdGhlIHNl
bGVjdGVkIHJhZGlvIGJ1dHRvbiBhcyB0aGUgQVhWYWx1ZQotICAgICAgICBpZiAobV9vYmplY3Qt
PmlzUmFkaW9Hcm91cCgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByYWRp
b0J1dHRvbiA9IG1fb2JqZWN0LT5zZWxlY3RlZFJhZGlvQnV0dG9uKCk7Ci0gICAgICAgICAgICBp
ZiAoIXJhZGlvQnV0dG9uKQotICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAg
ICByZXR1cm4gcmFkaW9CdXR0b24tPndyYXBwZXIoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkxpc3QoKSkgewotICAgICAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogdGFiSXRlbSA9IG1fb2JqZWN0LT5zZWxlY3RlZFRhYkl0ZW0oKTsKLSAgICAg
ICAgICAgIGlmICghdGFiSXRlbSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAg
ICAgICAgcmV0dXJuIHRhYkl0ZW0tPndyYXBwZXIoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkl0ZW0oKSkKLSAgICAgICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+aXNTZWxlY3RlZCgpXTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChtX29iamVjdC0+aXNDb2xvcldlbGwoKSkgewotICAgICAgICAgICAgaW50IHIs
IGcsIGI7Ci0gICAgICAgICAgICBtX29iamVjdC0+Y29sb3JWYWx1ZShyLCBnLCBiKTsKLSAgICAg
ICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41
ZiAlNy41ZiAxIiwgciAvIDI1NS4sIGcgLyAyNTUuLCBiIC8gMjU1Ll07Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+c3RyaW5nVmFsdWUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmls
aXR5TWluVmFsdWVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDptX29iamVjdC0+bWluVmFsdWVGb3JSYW5nZSgpXTsKLSAgICAKLSAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlNYXhWYWx1ZUF0dHJp
YnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om1fb2JqZWN0
LT5tYXhWYWx1ZUZvclJhbmdlKCldOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUhlbHBBdHRyaWJ1dGVdKQotICAgICAgICByZXR1
cm4gW3NlbGYgYWNjZXNzaWJpbGl0eUhlbHBUZXh0XTsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlXSkK
LSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogbV9vYmplY3QtPmlzRm9j
dXNlZCgpXTsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDogbV9vYmplY3QtPmlzRW5hYmxlZCgpXTsKLSAgICAKLSAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmli
dXRlXSkgewotICAgICAgICBJbnRTaXplIHMgPSBtX29iamVjdC0+cGl4ZWxTbmFwcGVkU2l6ZSgp
OwotICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoU2l6ZTogTlNNYWtlU2l6ZShzLndp
ZHRoKCksIHMuaGVpZ2h0KCkpXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdKQotICAg
ICAgICByZXR1cm4gW3NlbGYgcG9zaXRpb25dOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZV0gfHwKLSAg
ICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlUb3BM
ZXZlbFVJRWxlbWVudEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgCi0gICAgICAgIGlkIHJlbW90ZVBh
cmVudCA9IFtzZWxmIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3RdOwotICAgICAgICBp
ZiAocmVtb3RlUGFyZW50KQotICAgICAgICAgICAgcmV0dXJuIFtyZW1vdGVQYXJlbnQgYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZU5hbWVdOwotICAgICAgICAKLSAgICAgICAg
RnJhbWVWaWV3KiBmdiA9IG1fb2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOwotICAgICAgICBp
ZiAoZnYpCi0gICAgICAgICAgICByZXR1cm4gW2Z2LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRvd107
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QWNjZXNzS2V5QXR0cmlidXRlXSkgewot
ICAgICAgICBBdG9taWNTdHJpbmcgYWNjZXNzS2V5ID0gbV9vYmplY3QtPmFjY2Vzc0tleSgpOwot
ICAgICAgICBpZiAoYWNjZXNzS2V5LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAgICAgcmV0dXJuIGFjY2Vzc0tleTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUYWJzQXR0cmlidXRlXSkgewot
ICAgICAgICBpZiAobV9vYmplY3QtPmlzVGFiTGlzdCgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdGFic0NoaWxkcmVuOwot
ICAgICAgICAgICAgbV9vYmplY3QtPnRhYkNoaWxkcmVuKHRhYnNDaGlsZHJlbik7Ci0gICAgICAg
ICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh0YWJzQ2hpbGRyZW4pOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5Q29udGVudHNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIC8vIFRoZSBjb250ZW50cyBv
ZiBhIHRhYiBsaXN0IGFyZSBhbGwgdGhlIGNoaWxkcmVuIGV4Y2VwdCB0aGUgdGFicy4KLSAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc1RhYkxpc3QoKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gbV9vYmplY3Qt
PmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgdGFic0NoaWxkcmVuOwotICAgICAgICAgICAgbV9vYmplY3QtPnRh
YkNoaWxkcmVuKHRhYnNDaGlsZHJlbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb250ZW50czsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGNoaWxkcmVuU2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBjaGlsZHJlblNpemU7ICsraykgewotICAg
ICAgICAgICAgICAgIGlmICh0YWJzQ2hpbGRyZW4uZmluZChjaGlsZHJlbltrXSkgPT0gV1RGOjpu
b3RGb3VuZCkKLSAgICAgICAgICAgICAgICAgICAgY29udGVudHMuYXBwZW5kKGNoaWxkcmVuW2td
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNv
bnRlbnRzKTsKLSAgICAgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNTY3JvbGxWaWV3KCkpIHsK
LSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBBIHNjcm9sbFZpZXcncyBjb250ZW50cyBhcmUgZXZlcnl0aGluZyBleGNlcHQg
dGhlIHNjcm9sbCBiYXJzLgotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbnRlbnRzOwotICAgICAgICAgICAgdW5zaWduZWQgY2hp
bGRyZW5TaXplID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGNoaWxkcmVuU2l6ZTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGls
ZHJlbltrXS0+aXNTY3JvbGxiYXIoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGVudHMuYXBw
ZW5kKGNoaWxkcmVuW2tdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjb252
ZXJ0VG9OU0FycmF5KGNvbnRlbnRzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAo
bV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpIHsKLSAgICAgICAgLy8gVE9ETzogZGlz
dGluZ3Vpc2ggYmV0d2VlbiB2aXNpYmxlIGFuZCBub24tdmlzaWJsZSByb3dzCi0gICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJp
YnV0ZV0gfHwKLSAgICAgICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlWaXNpYmxlUm93c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIHJldHVybiBj
b252ZXJ0VG9OU0FycmF5KHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0
KS0+cm93cygpKTsKLSAgICAgICAgfQotICAgICAgICAvLyBUT0RPOiBkaXN0aW5ndWlzaCBiZXR3
ZWVuIHZpc2libGUgYW5kIG5vbi12aXNpYmxlIGNvbHVtbnMKLSAgICAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5zQXR0cmlidXRlXSB8
fAotICAgICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eVZpc2libGVDb2x1bW5zQXR0cmlidXRlXSkgewotICAgICAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb05TQXJyYXkoc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4obV9vYmplY3QpLT5j
b2x1bW5zKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0p
IHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciBzZWxlY3RlZENoaWxkcmVuQ29weTsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5zZWxl
Y3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKLSAgICAgICAgICAgIHJldHVybiBj
b252ZXJ0VG9OU0FycmF5KHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgLy8gSFRNTCB0YWJsZXMgZG9uJ3Qgc3VwcG9ydCB0aGVzZQotICAgICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVk
Q29sdW1uc0F0dHJpYnV0ZV0gfHwKLSAgICAgICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENlbGxzQXR0cmlidXRlXSkKLSAgICAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtBWENvbHVtbkhlYWRlclVJRWxlbWVudHNBdHRyaWJ1
dGVdKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgY29sdW1uSGVhZGVyczsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEFjY2Vz
c2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+Y29sdW1uSGVhZGVycyhjb2x1bW5IZWFkZXJzKTsK
LSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNvbHVtbkhlYWRlcnMpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUhlYWRlckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGhlYWRlckNvbnRhaW5lciA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZSo+KG1fb2JqZWN0KS0+aGVhZGVyQ29udGFpbmVyKCk7Ci0gICAgICAgICAgICBpZiAo
aGVhZGVyQ29udGFpbmVyKQotICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXJDb250YWluZXIt
PndyYXBwZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5Um93SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dIZWFkZXJzOwotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4obV9vYmplY3QpLT5yb3dI
ZWFkZXJzKHJvd0hlYWRlcnMpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXko
cm93SGVhZGVycyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNlbGxzQXR0cmlidXRl
XSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIGNlbGxzOwotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlKj4obV9vYmplY3QpLT5jZWxscyhjZWxscyk7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVy
dFRvTlNBcnJheShjZWxscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fb2Jq
ZWN0LT5pc1RhYmxlQ29sdW1uKCkpIHsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRleEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICBy
ZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlQ29sdW1uKj4obV9vYmplY3QpLT5jb2x1bW5JbmRleCgpXTsKLSAgICAgICAgCi0gICAgICAg
IC8vIHJvd3MgYXR0cmlidXRlIGZvciBhIGNvbHVtbiBpcyB0aGUgbGlzdCBvZiBhbGwgdGhlIGVs
ZW1lbnRzIGluIHRoYXQgY29sdW1uIGF0IGVhY2ggcm93Ci0gICAgICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV0gfHwKLSAg
ICAgICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlW
aXNpYmxlUm93c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0Fy
cmF5KHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbio+KG1fb2JqZWN0KS0+Y2hp
bGRyZW4oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlIZWFkZXJBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFi
bGVDb2x1bW4qPihtX29iamVjdCktPmhlYWRlck9iamVjdCgpOwotICAgICAgICAgICAgaWYgKCFo
ZWFkZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIHJldHVybiBo
ZWFkZXItPndyYXBwZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAobV9vYmpl
Y3QtPmlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dJbmRleFJhbmdlQXR0cmlidXRlXSkgewotICAgICAg
ICAgICAgcGFpcjxpbnQsIGludD4gcm93UmFuZ2U7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4obV9vYmplY3QpLT5yb3dJbmRleFJhbmdlKHJvd1Jhbmdl
KTsKLSAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpOU01ha2VSYW5n
ZShyb3dSYW5nZS5maXJzdCwgcm93UmFuZ2Uuc2Vjb25kKV07Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5J
bmRleFJhbmdlQXR0cmlidXRlXSkgewotICAgICAgICAgICAgcGFpcjxpbnQsIGludD4gY29sdW1u
UmFuZ2U7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4o
bV9vYmplY3QpLT5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKLSAgICAgICAgICAgIHJl
dHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpOU01ha2VSYW5nZShjb2x1bW5SYW5nZS5maXJz
dCwgY29sdW1uUmFuZ2Uuc2Vjb25kKV07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYg
KG1fb2JqZWN0LT5pc1RyZWUoKSkgewotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0pIHsKLSAgICAg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBz
ZWxlY3RlZENoaWxkcmVuQ29weTsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5zZWxlY3RlZENoaWxk
cmVuKHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9O
U0FycmF5KHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVd
KSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3Igcm93c0NvcHk7Ci0gICAgICAgICAgICBtX29iamVjdC0+YXJpYVRyZWVSb3dzKHJv
d3NDb3B5KTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd3NDb3B5KTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gVHJlZVJvbGVzIGRvIG5vdCBzdXBwb3J0
IGNvbHVtbnMsIGJ1dCBNYWMgQVggZXhwZWN0cyB0byBiZSBhYmxlIHRvIGFzayBhYm91dCBjb2x1
bW5zIGF0IHRoZSBsZWFzdC4KLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5zQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVy
biBbTlNBcnJheSBhcnJheV07Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKSB7Ci0gICAgICAg
IGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7Ci0gICAgICAgICAgICBm
b3IgKDsgcGFyZW50ICYmICFwYXJlbnQtPmlzVHJlZSgpOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dE9iamVjdCgpKQotICAgICAgICAgICAgeyB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICghcGFyZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIEZpbmQgdGhlIGluZGV4IG9mIHRoaXMgaXRlbSBieSBpdGVyYXRpbmcgdGhl
IHBhcmVudHMuCi0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3Igcm93c0NvcHk7Ci0gICAgICAgICAgICBwYXJlbnQtPmFyaWFUcmVlUm93
cyhyb3dzQ29weSk7Ci0gICAgICAgICAgICBzaXplX3QgY291bnQgPSByb3dzQ29weS5zaXplKCk7
Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGNvdW50OyArK2spCi0gICAgICAg
ICAgICAgICAgaWYgKHJvd3NDb3B5W2tdLT53cmFwcGVyKCkgPT0gc2VsZikKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6a107Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fb2JqZWN0LT5pc1RhYmxlUm93KCkpIHsKLSAgICAgICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKQotICAgICAg
ICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpzdGF0aWNfY2FzdDxBY2Nl
c3NpYmlsaXR5VGFibGVSb3cqPihtX29iamVjdCktPnJvd0luZGV4KCldOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIC8vIFRoZSByb3dzIHRoYXQgYXJlIGNvbnNpZGVyZWQgaW5zaWRlIHRo
aXMgcm93LgotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5RGlzY2xvc2VkUm93c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5p
c1RyZWVJdGVtKCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5hcmlh
VHJlZUl0ZW1EaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKLSAgICAgICAgICAgIHJldHVybiBjb252
ZXJ0VG9OU0FycmF5KHJvd3NDb3B5KTsKLSAgICAgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNB
UklBVHJlZUdyaWRSb3coKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3NDb3B5OwotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93Kj4obV9vYmplY3QpLT5kaXNjbG9zZWRSb3dzKHJv
d3NDb3B5KTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd3NDb3B5KTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBUaGUgcm93IHRoYXQgY29udGFpbnMgdGhp
cyByb3cuIEl0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgcGFyZW50IHRoYXQgaXMg
YSB0cmVlaXRlbS4KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eURpc2Nsb3NlZEJ5Um93QXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmpl
Y3QtPmlzVHJlZUl0ZW0oKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFy
ZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOwotICAgICAgICAgICAgd2hpbGUgKHBhcmVu
dCkgewotICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZUl0ZW0oKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwotICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBwYXJlbnQgaXMgdGhlIHRyZWUgaXRzZWxmLCB0aGVuIHRoaXMgdmFsdWUgPT0gbmls
LgotICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZSgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50
T2JqZWN0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAg
ICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc0FSSUFUcmVlR3JpZFJvdygpKSB7Ci0gICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByb3cgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWRSb3cqPihtX29iamVjdCktPmRpc2Nsb3NlZEJ5Um93KCk7Ci0gICAgICAgICAgICBpZiAo
IXJvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgcmV0dXJuIHJv
dy0+d3JhcHBlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc3VyZUxldmVsQXR0cmli
dXRlXSkgewotICAgICAgICAvLyBDb252ZXJ0IGZyb20gMS1iYXNlZCBsZXZlbCAoZnJvbSBhcmlh
LWxldmVsIHNwZWMpIHRvIDAtYmFzZWQgbGV2ZWwgKE1hYykKLSAgICAgICAgaW50IGxldmVsID0g
bV9vYmplY3QtPmhpZXJhcmNoaWNhbExldmVsKCk7Ci0gICAgICAgIGlmIChsZXZlbCA+IDApCi0g
ICAgICAgICAgICBsZXZlbCAtPSAxOwotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6bGV2ZWxdOwotICAgIH0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3NpbmdBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5pc0V4cGFuZGVkKCldOwotICAgIAot
ICAgIGlmICgobV9vYmplY3QtPmlzTGlzdEJveCgpIHx8IG1fb2JqZWN0LT5pc0xpc3QoKSkgJiYg
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9u
QXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsT3JpZW50
YXRpb25WYWx1ZTsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OiBAIkFYU2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UiXSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRl
eHRNYXJrZXJSYW5nZUZvclNlbGVjdGlvbl07Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5yZW5k
ZXJlcigpKSB7Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAi
QVhTdGFydFRleHRNYXJrZXIiXSkKLSAgICAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vy
Rm9yVmlzaWJsZVBvc2l0aW9uOnN0YXJ0T2ZEb2N1bWVudChtX29iamVjdC0+cmVuZGVyZXIoKS0+
ZG9jdW1lbnQoKSldOwotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OiBAIkFYRW5kVGV4dE1hcmtlciJdKQotICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJr
ZXJGb3JWaXNpYmxlUG9zaXRpb246ZW5kT2ZEb2N1bWVudChtX29iamVjdC0+cmVuZGVyZXIoKS0+
ZG9jdW1lbnQoKSldOwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0ZV0pCi0gICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+YmxvY2txdW90ZUxl
dmVsKCldOwotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRhYmxl
TGV2ZWwiXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0
LT50YWJsZUxldmVsKCldOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6IE5TQWNjZXNzaWJpbGl0eUxpbmtlZFVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBsaW5r
ZWRVSUVsZW1lbnRzOwotICAgICAgICBtX29iamVjdC0+bGlua2VkVUlFbGVtZW50cyhsaW5rZWRV
SUVsZW1lbnRzKTsKLSAgICAgICAgaWYgKGxpbmtlZFVJRWxlbWVudHMuc2l6ZSgpID09IDApCi0g
ICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShs
aW5rZWRVSUVsZW1lbnRzKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRBdHRyaWJ1dGVdKQotICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5pc1NlbGVjdGVkKCld
OwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNz
aWJpbGl0eVNlcnZlc0FzVGl0bGVGb3JVSUVsZW1lbnRzQXR0cmlidXRlXSAmJiBtX29iamVjdC0+
aXNNZW51QnV0dG9uKCkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdWlFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KG1fb2JqZWN0KS0+bWVu
dUZvck1lbnVCdXR0b24oKTsKLSAgICAgICAgaWYgKHVpRWxlbWVudCkKLSAgICAgICAgICAgIHJl
dHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6dWlFbGVtZW50LT53cmFwcGVyKCldOwotICAg
IH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXSkgewotICAgICAgICBpZiAoIW1fb2JqZWN0
LT5leHBvc2VzVGl0bGVVSUVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
ICAgIAotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBtX29iamVjdC0+dGl0bGVV
SUVsZW1lbnQoKTsKLSAgICAgICAgaWYgKG9iaikKLSAgICAgICAgICAgIHJldHVybiBvYmotPndy
YXBwZXIoKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWYWx1ZURlc2NyaXB0aW9u
QXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT52YWx1ZURlc2NyaXB0aW9uKCk7
Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9yaWVu
dGF0aW9uIGVsZW1lbnRPcmllbnRhdGlvbiA9IG1fb2JqZWN0LT5vcmllbnRhdGlvbigpOwotICAg
ICAgICBpZiAoZWxlbWVudE9yaWVudGF0aW9uID09IEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvblZl
cnRpY2FsKQotICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsT3JpZW50
YXRpb25WYWx1ZTsKLSAgICAgICAgaWYgKGVsZW1lbnRPcmllbnRhdGlvbiA9PSBBY2Nlc3NpYmls
aXR5T3JpZW50YXRpb25Ib3Jpem9udGFsKQotICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJp
bGl0eUhvcml6b250YWxPcmllbnRhdGlvblZhbHVlOwotICAgICAgICByZXR1cm4gbmlsOwotICAg
IH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUhvcml6b250YWxTY3JvbGxCYXJBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIHNjcm9sbEJhciA9IG1fb2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0
eU9yaWVudGF0aW9uSG9yaXpvbnRhbCk7Ci0gICAgICAgIGlmIChzY3JvbGxCYXIpCi0gICAgICAg
ICAgICByZXR1cm4gc2Nyb2xsQmFyLT53cmFwcGVyKCk7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgfQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5VmVydGljYWxTY3JvbGxCYXJBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIHNjcm9sbEJhciA9IG1fb2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVu
dGF0aW9uVmVydGljYWwpOwotICAgICAgICBpZiAoc2Nyb2xsQmFyKQotICAgICAgICAgICAgcmV0
dXJuIHNjcm9sbEJhci0+d3JhcHBlcigpOwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLSAg
ICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eVNvcnREaXJlY3Rpb25BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIHN3aXRjaCAobV9vYmplY3QtPnNv
cnREaXJlY3Rpb24oKSkgewotICAgICAgICAgICAgY2FzZSBTb3J0RGlyZWN0aW9uQXNjZW5kaW5n
OgotICAgICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlBc2NlbmRpbmdTb3J0RGly
ZWN0aW9uVmFsdWU7Ci0gICAgICAgICAgICBjYXNlIFNvcnREaXJlY3Rpb25EZXNjZW5kaW5nOgot
ICAgICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlEZXNjZW5kaW5nU29ydERpcmVj
dGlvblZhbHVlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
TlNBY2Nlc3NpYmlsaXR5VW5rbm93blNvcnREaXJlY3Rpb25WYWx1ZTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUxhbmd1YWdlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5sYW5n
dWFnZSgpOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5RXhwYW5kZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVy
IG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5pc0V4cGFuZGVkKCldOwotICAgIAotICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRBdHRy
aWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0
LT5pc1JlcXVpcmVkKCldOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW52YWxpZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBt
X29iamVjdC0+aW52YWxpZFN0YXR1cygpOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5T3duc0F0dHJpYnV0ZV0pIHsKLSAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFPd25z
OwotICAgICAgICBtX29iamVjdC0+YXJpYU93bnNFbGVtZW50cyhhcmlhT3ducyk7Ci0gICAgICAg
IHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGFyaWFPd25zKTsKLSAgICB9Ci0gICAgCi0gICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlHcmFiYmVkQXR0
cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVj
dC0+aXNBUklBR3JhYmJlZCgpXTsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlXSkgewotICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBkcm9wRWZmZWN0czsKLSAgICAgICAgbV9vYmplY3QtPmRldGVybWlu
ZUFSSUFEcm9wRWZmZWN0cyhkcm9wRWZmZWN0cyk7Ci0gICAgICAgIHNpemVfdCBsZW5ndGggPSBk
cm9wRWZmZWN0cy5zaXplKCk7Ci0gICAgICAgIAotICAgICAgICBOU011dGFibGVBcnJheSogZHJv
cEVmZmVjdHNBcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpsZW5ndGhd
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgW2Ryb3BFZmZlY3RzQXJyYXkgYWRkT2JqZWN0OmRyb3BFZmZlY3RzW2ldXTsKLSAgICAgICAg
cmV0dXJuIGRyb3BFZmZlY3RzQXJyYXk7Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1ZUF0dHJp
YnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+cGxhY2Vob2xkZXJWYWx1ZSgpOwotICAg
IAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
SGFzUG9wdXBBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhC
b29sOm1fb2JqZWN0LT5hcmlhSGFzUG9wdXAoKV07Ci0gICAgCi0gICAgLy8gQVJJQSBMaXZlIHJl
Z2lvbiBhdHRyaWJ1dGVzLgotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5QVJJQUxpdmVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmpl
Y3QtPmFyaWFMaXZlUmVnaW9uU3RhdHVzKCk7Ci0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBUmVsZXZhbnRBdHRyaWJ1dGVdKQotICAgICAg
ICByZXR1cm4gbV9vYmplY3QtPmFyaWFMaXZlUmVnaW9uUmVsZXZhbnQoKTsKLSAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFBdG9taWNBdHRy
aWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0
LT5hcmlhTGl2ZVJlZ2lvbkF0b21pYygpXTsKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFCdXN5QXR0cmlidXRlXSkKLSAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+YXJpYUxpdmVSZWdpb25CdXN5
KCldOwotICAgIAotICAgIC8vIE1hdGhNTCBBdHRyaWJ1dGVzLgotICAgIGlmIChtX29iamVjdC0+
aXNNYXRoRWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RJbmRleEF0dHJpYnV0ZV0pCi0gICAgICAgICAg
ICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoUm9vdEluZGV4T2JqZWN0KCkpID8gbV9vYmplY3QtPm1h
dGhSb290SW5kZXhPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLSAgICAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdFJhZGljYW5kQXR0
cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhSYWRpY2FuZE9iamVj
dCgpKSA/IG1fb2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLSAg
ICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlN
YXRoRnJhY3Rpb25OdW1lcmF0b3JBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChtX29i
amVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoTnVtZXJhdG9yT2Jq
ZWN0KCktPndyYXBwZXIoKSA6IDA7Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9uRGVub21pbmF0b3JBdHRyaWJ1dGVd
KQotICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCkp
ID8gbV9vYmplY3QtPm1hdGhEZW5vbWluYXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwotICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1h
dGhCYXNlQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhCYXNl
T2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhCYXNlT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Ci0g
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
TWF0aFN1YnNjcmlwdEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5t
YXRoU3Vic2NyaXB0T2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhTdWJzY3JpcHRPYmplY3QoKS0+
d3JhcHBlcigpIDogMDsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlNYXRoU3VwZXJzY3JpcHRBdHRyaWJ1dGVdKQotICAgICAgICAgICAg
cmV0dXJuIChtX29iamVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkpID8gbV9vYmplY3QtPm1h
dGhTdXBlcnNjcmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwotICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhVbmRlckF0dHJpYnV0
ZV0pCi0gICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoVW5kZXJPYmplY3QoKSkgPyBt
X29iamVjdC0+bWF0aFVuZGVyT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Ci0gICAgICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aE92ZXJBdHRy
aWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aE92ZXJPYmplY3QoKSkg
PyBtX29iamVjdC0+bWF0aE92ZXJPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLSAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoRmVuY2Vk
T3BlbkF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhGZW5jZWRP
cGVuU3RyaW5nKCk7Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZENsb3NlQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJl
dHVybiBtX29iamVjdC0+bWF0aEZlbmNlZENsb3NlU3RyaW5nKCk7Ci0gICAgfQotICAgIAotICAg
IC8vIHRoaXMgaXMgdXNlZCBvbmx5IGJ5IER1bXBSZW5kZXJUcmVlIGZvciB0ZXN0aW5nCi0gICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYQ2xpY2tQb2ludCJdKQotICAg
ICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6bV9vYmplY3QtPmNsaWNrUG9pbnQo
KV07Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB1c2VkIGJ5IERSVCB0byB2ZXJpZnkgQ1NTMyBzcGVl
Y2ggd29ya3MuCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYRFJU
U3BlZWNoQXR0cmlidXRlIl0pIHsKLSAgICAgICAgRVNwZWFrIHNwZWFrUHJvcGVydHkgPSBtX29i
amVjdC0+c3BlYWtQcm9wZXJ0eSgpOwotICAgICAgICBzd2l0Y2ggKHNwZWFrUHJvcGVydHkpIHsK
LSAgICAgICAgICAgIGNhc2UgU3BlYWtOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiBAIm5v
bmUiOwotICAgICAgICAgICAgY2FzZSBTcGVha1NwZWxsT3V0OgotICAgICAgICAgICAgICAgIHJl
dHVybiBAInNwZWxsLW91dCI7Ci0gICAgICAgICAgICBjYXNlIFNwZWFrRGlnaXRzOgotICAgICAg
ICAgICAgICAgIHJldHVybiBAImRpZ2l0cyI7Ci0gICAgICAgICAgICBjYXNlIFNwZWFrTGl0ZXJh
bFB1bmN0dWF0aW9uOgotICAgICAgICAgICAgICAgIHJldHVybiBAImxpdGVyYWwtcHVuY3R1YXRp
b24iOwotICAgICAgICAgICAgY2FzZSBTcGVha05vUHVuY3R1YXRpb246Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIEAibm8tcHVuY3R1YXRpb24iOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGNhc2UgU3BlYWtOb3JtYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEAibm9ybWFs
IjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBVc2VkIGJ5IERSVCB0byBmaW5kIGFu
IGFjY2Vzc2libGUgbm9kZSBieSBpdHMgZWxlbWVudCBpZC4KLSAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEUlRFbGVtZW50SWRBdHRyaWJ1dGUiXSkKLSAgICAgICAg
cmV0dXJuIG1fb2JqZWN0LT5nZXRBdHRyaWJ1dGUoaWRBdHRyKTsKLSAgICAKLSAgICByZXR1cm4g
bmlsOwotfQotCi0tIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudAotewotICAgIGlm
ICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAKLSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gZm9jdXNlZE9iaiA9IG1fb2Jq
ZWN0LT5mb2N1c2VkVUlFbGVtZW50KCk7Ci0gICAgCi0gICAgaWYgKCFmb2N1c2VkT2JqKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIHJldHVybiBmb2N1c2VkT2JqLT53cmFwcGVyKCk7
Ci19Ci0KLS0gKGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50Ci17Ci0gICAg
aWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIAotICAgIG1fb2JqZWN0LT51cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7Ci0gICAg
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGF4T2JqZWN0ID0gbV9vYmplY3QtPmFjY2Vzc2li
aWxpdHlIaXRUZXN0KEludFBvaW50KHBvaW50KSk7Ci0gICAgaWYgKGF4T2JqZWN0KQotICAgICAg
ICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoYXhPYmplY3QtPndyYXBw
ZXIoKSk7Ci0gICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKHNlbGYp
OwotfQotCi0tIChCT09MKWFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOihOU1N0cmlu
ZyopYXR0cmlidXRlTmFtZQotewotICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0
b3JlXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOiBAIkFYU2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UiXSkKLSAgICAgICAg
cmV0dXJuIFlFUzsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2Jq
ZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXSkKLSAgICAg
ICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpOwotICAgIAotICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVk
QXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRTZWxlY3RlZEF0dHJp
YnV0ZSgpOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5T
QWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4g
bV9vYmplY3QtPmNhblNldFNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGUoKTsKLSAgICAKLSAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3Np
bmdBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldEV4cGFuZGVkQXR0
cmlidXRlKCk7Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gWUVT
OwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNz
aWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV0gfHwKLSAgICAgICAgW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0
ZV0gfHwKLSAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2li
aWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9v
YmplY3QtPmNhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMoKTsKLSAgICAKLSAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGVd
KQotICAgICAgICByZXR1cm4gWUVTOwotICAgIAotICAgIHJldHVybiBOTzsKLX0KLQotLy8gYWNj
ZXNzaWJpbGl0eVNob3VsZFVzZVVuaXF1ZUlkIGlzIGFuIEFwcEtpdCBtZXRob2Qgd2Ugb3ZlcnJp
ZGUgc28gdGhhdAotLy8gb2JqZWN0cyB3aWxsIGJlIGdpdmVuIGEgdW5pcXVlIElELCBhbmQgdGhl
cmVmb3JlIGFsbG93IEFwcEtpdCB0byBrbm93IHdoZW4gdGhleQotLy8gYmVjb21lIG9ic29sZXRl
IChlLmcuIHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIHRvIGEgbmV3IHdlYiBwYWdlLCBtYWtpbmcg
dGhpcyBvbmUKLS8vIHVucmVuZGVyZWQgYnV0IG5vdCBkZWFsbG9jYXRlZCBiZWNhdXNlIGl0IGlz
IGluIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUpLgotLy8gSXQgaXMgaW1wb3J0YW50IHRvIGNhbGwg
TlNBY2Nlc3NpYmlsaXR5VW5yZWdpc3RlclVuaXF1ZUlkRm9yVUlFbGVtZW50IGluIHRoZQotLy8g
YXBwcm9wcmlhdGUgcGxhY2UgKGUuZy4gZGVhbGxvYykgdG8gcmVtb3ZlIHRoZXNlIG5vbi1yZXRh
aW5lZCByZWZlcmVuY2VzIGZyb20KLS8vIEFwcEtpdCdzIGlkIG1hcHBpbmcgdGFibGVzLiBXZSBk
byB0aGlzIGluIGRldGFjaCBieSBjYWxsaW5nIHVucmVnaXN0ZXJVbmlxdWVJZEZvclVJRWxlbWVu
dC4KLS8vCi0vLyBSZWdpc3RlcmluZyBhbiBvYmplY3QgaXMgYWxzbyByZXF1aXJlZCBmb3Igb2Jz
ZXJ2aW5nIG5vdGlmaWNhdGlvbnMuIE9ubHkgcmVnaXN0ZXJlZCBvYmplY3RzIGNhbiBiZSBvYnNl
cnZlZC4KLS0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzSWdub3JlZAotewotICAgIGlmICghW3NlbGYg
dXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAKLSAg
ICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQotICAgICAgICByZXR1cm4gW1tzZWxmIGF0
dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkXTsKLSAgICByZXR1cm4gbV9vYmpl
Y3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsKLX0KLQotLSAoTlNBcnJheSogKWFjY2Vzc2li
aWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMKLXsKLSAgICBpZiAoIVtzZWxmIHVwZGF0
ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgaWYg
KG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAg
ICBzdGF0aWMgTlNBcnJheSogcGFyYW1BdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSog
dGV4dFBhcmFtQXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIHRhYmxlUGFyYW1BdHRy
cyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogd2ViQXJlYVBhcmFtQXR0cnMgPSBuaWw7Ci0g
ICAgaWYgKHBhcmFtQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHBhcmFtQXR0cnMgPSBbW05TQXJy
YXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czoKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYVUlF
bGVtZW50Rm9yVGV4dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWFRleHRNYXJr
ZXJSYW5nZUZvclVJRWxlbWVudCIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWExpbmVGb3JU
ZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYVGV4dE1hcmtlclJhbmdlRm9y
TGluZSIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWFN0cmluZ0ZvclRleHRNYXJrZXJSYW5n
ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWFRleHRNYXJrZXJGb3JQb3NpdGlvbiIsCi0g
ICAgICAgICAgICAgICAgICAgICAgQCJBWEJvdW5kc0ZvclRleHRNYXJrZXJSYW5nZSIsCi0gICAg
ICAgICAgICAgICAgICAgICAgQCJBWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2Ui
LAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhUZXh0TWFya2VyUmFuZ2VGb3JVbm9yZGVyZWRU
ZXh0TWFya2VycyIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWE5leHRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWFByZXZpb3VzVGV4dE1hcmtl
ckZvclRleHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhMZWZ0V29yZFRleHRN
YXJrZXJSYW5nZUZvclRleHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhSaWdo
dFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAg
ICBAIkFYTGVmdExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIiwKLSAgICAgICAgICAg
ICAgICAgICAgICBAIkFYUmlnaHRMaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciIsCi0g
ICAgICAgICAgICAgICAgICAgICAgQCJBWFNlbnRlbmNlVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1h
cmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWFBhcmFncmFwaFRleHRNYXJrZXJSYW5n
ZUZvclRleHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhOZXh0V29yZEVuZFRl
eHRNYXJrZXJGb3JUZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYUHJldmlv
dXNXb3JkU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAg
ICAgQCJBWE5leHRMaW5lRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiLAotICAgICAgICAgICAg
ICAgICAgICAgIEAiQVhQcmV2aW91c0xpbmVTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwK
LSAgICAgICAgICAgICAgICAgICAgICBAIkFYTmV4dFNlbnRlbmNlRW5kVGV4dE1hcmtlckZvclRl
eHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhQcmV2aW91c1NlbnRlbmNlU3Rh
cnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWE5l
eHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsCi0gICAgICAgICAgICAgICAg
ICAgICAgQCJBWFByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIs
Ci0gICAgICAgICAgICAgICAgICAgICAgQCJBWFN0eWxlVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1h
cmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWExlbmd0aEZvclRleHRNYXJrZXJSYW5n
ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Qm91bmRzRm9yUmFuZ2VQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJp
bGl0eVN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICBOU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRzRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1l
dGVyaXplZEF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBuaWxdOwotICAgIH0KLSAg
ICAKLSAgICBpZiAodGV4dFBhcmFtQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIE5TTXV0YWJsZUFy
cmF5KiB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnBh
cmFtQXR0cnNdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWExp
bmVGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDooTlNTdHJpbmcqKWtBWFJhbmdlRm9yTGluZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVd
OwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWFN0cmluZ0ZvclJh
bmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0
OihOU1N0cmluZyopa0FYUmFuZ2VGb3JQb3NpdGlvblBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwot
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWFJhbmdlRm9ySW5kZXhQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5T
U3RyaW5nKilrQVhCb3VuZHNGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwotICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWFJURkZvclJhbmdlUGFyYW1ldGVy
aXplZEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyop
a0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07Ci0gICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FYU3R5bGVSYW5nZUZvckluZGV4
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07Ci0gICAgICAgIHRleHRQYXJhbUF0dHJzID0gW1tOU0Fy
cmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkg
cmVsZWFzZV07Ci0gICAgfQotICAgIGlmICh0YWJsZVBhcmFtQXR0cnMgPT0gbmlsKSB7Ci0gICAg
ICAgIE5TTXV0YWJsZUFycmF5KiB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aEFycmF5OnBhcmFtQXR0cnNdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlDZWxsRm9yQ29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07
Ci0gICAgICAgIHRhYmxlUGFyYW1BdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJh
eTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBp
ZiAoIXdlYkFyZWFQYXJhbUF0dHJzKSB7Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5KiB0ZW1wQXJy
YXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnBhcmFtQXR0cnNdOwot
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyRm9y
SW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcklzVmFsaWRQYXJhbWV0ZXJpemVkQXR0cmlidXRl
XTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW5kZXhGb3JU
ZXh0TWFya2VyUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07Ci0gICAgICAgIHdlYkFyZWFQYXJhbUF0
dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAg
IFt0ZW1wQXJyYXkgcmVsZWFzZV07Ci0gICAgfQotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNQ
YXNzd29yZEZpZWxkKCkpCi0gICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheV07Ci0gICAgCi0g
ICAgaWYgKCFtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAg
IHJldHVybiBwYXJhbUF0dHJzOwotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNUZXh0Q29udHJv
bCgpKQotICAgICAgICByZXR1cm4gdGV4dFBhcmFtQXR0cnM7Ci0gICAgCi0gICAgaWYgKG1fb2Jq
ZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gdGFibGVQYXJhbUF0
dHJzOwotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNNZW51UmVsYXRlZCgpKQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNXZWJBcmVhKCkpCi0gICAgICAg
IHJldHVybiB3ZWJBcmVhUGFyYW1BdHRyczsKLSAgICAKLSAgICByZXR1cm4gcGFyYW1BdHRyczsK
LX0KLQotLSAodm9pZClhY2Nlc3NpYmlsaXR5UGVyZm9ybVByZXNzQWN0aW9uCi17Ci0gICAgaWYg
KCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKLSAgICAgICAgW1tzZWxmIGF0dGFj
aG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5UGVyZm9ybUFjdGlvbjpOU0FjY2Vzc2liaWxpdHlQcmVz
c0FjdGlvbl07Ci0gICAgZWxzZQotICAgICAgICBtX29iamVjdC0+cHJlc3MoKTsKLX0KLQotLSAo
dm9pZClhY2Nlc3NpYmlsaXR5UGVyZm9ybUluY3JlbWVudEFjdGlvbgotewotICAgIGlmICghW3Nl
bGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpCi0gICAgICAgIFtbc2VsZiBhdHRhY2htZW50
Vmlld10gYWNjZXNzaWJpbGl0eVBlcmZvcm1BY3Rpb246TlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50
QWN0aW9uXTsKLSAgICBlbHNlCi0gICAgICAgIG1fb2JqZWN0LT5pbmNyZW1lbnQoKTsKLX0KLQot
LSAodm9pZClhY2Nlc3NpYmlsaXR5UGVyZm9ybURlY3JlbWVudEFjdGlvbgotewotICAgIGlmICgh
W3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpCi0gICAgICAgIFtbc2VsZiBhdHRhY2ht
ZW50Vmlld10gYWNjZXNzaWJpbGl0eVBlcmZvcm1BY3Rpb246TlNBY2Nlc3NpYmlsaXR5RGVjcmVt
ZW50QWN0aW9uXTsKLSAgICBlbHNlCi0gICAgICAgIG1fb2JqZWN0LT5kZWNyZW1lbnQoKTsKLX0K
LQotLSAodm9pZClhY2Nlc3NpYmlsaXR5UGVyZm9ybVNob3dNZW51QWN0aW9uCi17Ci0gICAgaWYg
KG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBDb21ib0JveFJvbGUpCi0gICAgICAgIG1fb2JqZWN0
LT5zZXRJc0V4cGFuZGVkKHRydWUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBUaGlzIG5lZWRz
IHRvIGJlIHBlcmZvcm1lZCBpbiBhbiBpdGVyYXRpb24gb2YgdGhlIHJ1biBsb29wIHRoYXQgZGlk
IG5vdCBzdGFydCBmcm9tIGFuIEFYIGNhbGwuCi0gICAgICAgIC8vIElmIGl0J3MgdGhlIHNhbWUg
cnVuIGxvb3AgaXRlcmF0aW9uLCB0aGUgbWVudSBvcGVuIG5vdGlmaWNhdGlvbiB3b24ndCBiZSBz
ZW50Ci0gICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoYWNjZXNzaWJpbGl0
eVNob3dDb250ZXh0TWVudSkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTowLjBdOwotICAgIH0K
LX0KLQotLSAodm9pZClhY2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRNZW51Ci17Ci0gICAgUGFnZSog
cGFnZSA9IG1fb2JqZWN0LT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgSW50UmVjdCByZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChtX29iamVjdC0+
ZWxlbWVudFJlY3QoKSk7Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX29iamVjdC0+ZG9j
dW1lbnRGcmFtZVZpZXcoKTsKLSAgICAKLSAgICAvLyBPbiBXSzIsIHdlIG5lZWQgdG8gYWNjb3Vu
dCBmb3IgdGhlIHNjcm9sbCBwb3NpdGlvbi4KLSAgICAvLyBPbiBXSzEsIHRoaXMgaXNuJ3QgbmVj
ZXNzYXJ5LCBpdCdzIHRha2VuIGNhcmUgb2YgYnkgdGhlIGF0dGFjaG1lbnQgdmlld3MuCi0gICAg
aWYgKGZyYW1lVmlldyAmJiAhZnJhbWVWaWV3LT5wbGF0Zm9ybVdpZGdldCgpKSB7Ci0gICAgICAg
IC8vIEZpbmQgdGhlIGFwcHJvcHJpYXRlIHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252ZXJ0IHRo
ZSBjb250ZW50cyB0byB0aGUgd2luZG93LgotICAgICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJlbnQgPSBw
YXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50LT5pc0FjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBTY3JvbGxWaWV3KiBzY3Jv
bGxWaWV3ID0gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5zY3JvbGxWaWV3KCk7
Ci0gICAgICAgICAgICAgICAgcmVjdCA9IHNjcm9sbFZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhy
ZWN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+c2hvd0NvbnRl
eHRNZW51QXQocGFnZS0+bWFpbkZyYW1lKCksIHJlY3QuY2VudGVyKCkpOwotfQotCi0tICh2b2lk
KWFjY2Vzc2liaWxpdHlQZXJmb3JtQWN0aW9uOihOU1N0cmluZyopYWN0aW9uCi17Ci0gICAgaWYg
KCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWYgKFthY3Rpb24gaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVByZXNzQWN0
aW9uXSkKLSAgICAgICAgW3NlbGYgYWNjZXNzaWJpbGl0eVBlcmZvcm1QcmVzc0FjdGlvbl07Ci0g
ICAgCi0gICAgZWxzZSBpZiAoW2FjdGlvbiBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
U2hvd01lbnVBY3Rpb25dKQotICAgICAgICBbc2VsZiBhY2Nlc3NpYmlsaXR5UGVyZm9ybVNob3dN
ZW51QWN0aW9uXTsKLSAgICAKLSAgICBlbHNlIGlmIChbYWN0aW9uIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlJbmNyZW1lbnRBY3Rpb25dKQotICAgICAgICBbc2VsZiBhY2Nlc3NpYmls
aXR5UGVyZm9ybUluY3JlbWVudEFjdGlvbl07Ci0gICAgCi0gICAgZWxzZSBpZiAoW2FjdGlvbiBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QWN0aW9uXSkKLSAgICAgICAg
W3NlbGYgYWNjZXNzaWJpbGl0eVBlcmZvcm1EZWNyZW1lbnRBY3Rpb25dOwotfQotCi0tICh2b2lk
KWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyop
YXR0cmlidXRlTmFtZQotewotICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3Jl
XSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlkIHRleHRNYXJrZXJSYW5nZSA9IG5pbDsK
LSAgICBOU051bWJlciogICAgICAgICAgICAgICBudW1iZXIgPSBuaWw7Ci0gICAgTlNTdHJpbmcq
ICAgICAgICAgICAgICAgc3RyaW5nID0gbmlsOwotICAgIE5TUmFuZ2UgICAgICAgICAgICAgICAg
IHJhbmdlID0gezAsIDB9OwotICAgIE5TQXJyYXkqICAgICAgICAgICAgICAgIGFycmF5ID0gbmls
OwotICAgIAotICAgIC8vIGRlY29kZSB0aGUgcGFyYW1ldGVyCi0gICAgaWYgKEFYT2JqZWN0SXNU
ZXh0TWFya2VyUmFuZ2UodmFsdWUpKQotICAgICAgICB0ZXh0TWFya2VyUmFuZ2UgPSB2YWx1ZTsK
LSAgICAKLSAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgc2VsZl1d
KQotICAgICAgICBudW1iZXIgPSB2YWx1ZTsKLSAgICAKLSAgICBlbHNlIGlmIChbdmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNTdHJpbmcgc2VsZl1dKQotICAgICAgICBzdHJpbmcgPSB2YWx1ZTsKLSAg
ICAKLSAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNWYWx1ZSBzZWxmXV0pCi0g
ICAgICAgIHJhbmdlID0gW3ZhbHVlIHJhbmdlVmFsdWVdOwotICAgIAotICAgIGVsc2UgaWYgKFt2
YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IHNlbGZdXSkKLSAgICAgICAgYXJyYXkgPSB2YWx1
ZTsKLSAgICAKLSAgICAvLyBoYW5kbGUgdGhlIGNvbW1hbmQKLSAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYU2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UiXSkgewotICAg
ICAgICBBU1NFUlQodGV4dE1hcmtlclJhbmdlKTsKLSAgICAgICAgbV9vYmplY3QtPnNldFNlbGVj
dGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoW3NlbGYgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0
TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7Ci0gICAgfSBlbHNlIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGVdKSB7
Ci0gICAgICAgIEFTU0VSVChudW1iZXIpOwotICAgICAgICBtX29iamVjdC0+c2V0Rm9jdXNlZChb
bnVtYmVyIGludFZhbHVlXSAhPSAwKTsKLSAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdKSB7Ci0gICAgICAg
IGlmIChudW1iZXIgJiYgbV9vYmplY3QtPmNhblNldE51bWVyaWNWYWx1ZSgpKQotICAgICAgICAg
ICAgbV9vYmplY3QtPnNldFZhbHVlKFtudW1iZXIgZmxvYXRWYWx1ZV0pOwotICAgICAgICBlbHNl
IGlmIChzdHJpbmcpCi0gICAgICAgICAgICBtX29iamVjdC0+c2V0VmFsdWUoc3RyaW5nKTsKLSAg
ICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmls
aXR5U2VsZWN0ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmICghbnVtYmVyKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBtX29iamVjdC0+c2V0U2VsZWN0ZWQoW251bWJlciBib29sVmFs
dWVdKTsKLSAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKCFh
cnJheSB8fCBtX29iamVjdC0+cm9sZVZhbHVlKCkgIT0gTGlzdEJveFJvbGUpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuOwotICAgICAgICBjb252ZXJ0VG9WZWN0b3IoYXJy
YXksIHNlbGVjdGVkQ2hpbGRyZW4pOwotICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5
TGlzdEJveCo+KG1fb2JqZWN0KS0+c2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVu
KTsKLSAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKLSAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0
ZWRUZXh0QXR0cmlidXRlXSkgewotICAgICAgICAgICAgbV9vYmplY3QtPnNldFNlbGVjdGVkVGV4
dChzdHJpbmcpOwotICAgICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgICAgICBtX29iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5UZXh0UmFuZ2UocmFu
Z2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkpOwotICAgICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJh
bmdlQXR0cmlidXRlXSkgewotICAgICAgICAgICAgbV9vYmplY3QtPm1ha2VSYW5nZVZpc2libGUo
UGxhaW5UZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5RGlzY2xvc2luZ0F0dHJpYnV0ZV0pCi0gICAgICAgIG1fb2JqZWN0LT5zZXRJc0V4cGFu
ZGVkKFtudW1iZXIgYm9vbFZhbHVlXSk7Ci0gICAgZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0pIHsKLSAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNl
bGVjdGVkUm93czsKLSAgICAgICAgY29udmVydFRvVmVjdG9yKGFycmF5LCBzZWxlY3RlZFJvd3Mp
OwotICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZSgpIHx8IG1fb2JqZWN0LT5pc0FjY2Vzc2li
aWxpdHlUYWJsZSgpKQotICAgICAgICAgICAgbV9vYmplY3QtPnNldFNlbGVjdGVkUm93cyhzZWxl
Y3RlZFJvd3MpOwotICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGVdKQotICAgICAgICBtX29iamVjdC0+c2V0
QVJJQUdyYWJiZWQoW251bWJlciBib29sVmFsdWVdKTsKLX0KLQotc3RhdGljIFJlbmRlck9iamVj
dCogcmVuZGVyZXJGb3JWaWV3KE5TVmlldyogdmlldykKLXsKLSAgICBpZiAoIVt2aWV3IGNvbmZv
cm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViQ29yZUZyYW1lVmlldyldKQotICAgICAgICByZXR1
cm4gMDsKLSAgICAKLSAgICBOU1ZpZXc8V2ViQ29yZUZyYW1lVmlldz4qIGZyYW1lVmlldyA9IChO
U1ZpZXc8V2ViQ29yZUZyYW1lVmlldz4qKXZpZXc7Ci0gICAgRnJhbWUqIGZyYW1lID0gW2ZyYW1l
VmlldyBfd2ViX2ZyYW1lXTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICAKLSAgICBOb2RlKiBub2RlID0gZnJhbWUtPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpOwot
ICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIG5vZGUt
PnJlbmRlcmVyKCk7Ci19Ci0KLS0gKGlkKV9hY2Nlc3NpYmlsaXR5UGFyZW50Rm9yU3Vidmlldzoo
TlNWaWV3KilzdWJ2aWV3Ci17Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHJlbmRlcmVy
Rm9yVmlldyhzdWJ2aWV3KTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IHJlbmRlcmVyLT5kb2N1bWVu
dCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlcmVyKTsKLSAgICBpZiAob2Jq
KQotICAgICAgICByZXR1cm4gb2JqLT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKS0+d3JhcHBlcigp
OwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKE5TU3RyaW5nKilhY2Nlc3NpYmlsaXR5QWN0aW9u
RGVzY3JpcHRpb246KE5TU3RyaW5nKilhY3Rpb24KLXsKLSAgICAvLyB3ZSBoYXZlIG5vIGN1c3Rv
bSBhY3Rpb25zCi0gICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUFjdGlvbkRlc2NyaXB0aW9uKGFj
dGlvbik7Ci19Ci0KLS8vIFRoZSBDRkF0dHJpYnV0ZWRTdHJpbmdUeXBlIHJlcHJlc2VudGF0aW9u
IG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2liaWxpdHkKLS8vIG9iamVj
dCB0aGF0IGlzIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gcmFuZ2UuCi0tIChOU0F0dHJpYnV0ZWRT
dHJpbmcqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKLXsKLSAg
ICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlv
biwgcmFuZ2UubGVuZ3RoKTsKLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFu
Z2UgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSh0ZXh0UmFuZ2UpOwot
ICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpb
c2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2aXNpYmxlUG9zUmFuZ2Uu
c3RhcnQgZW5kUG9zaXRpb246dmlzaWJsZVBvc1JhbmdlLmVuZF1dOwotfQotCi0tIChOU1Jhbmdl
KV9jb252ZXJ0VG9OU1JhbmdlOihSYW5nZSopcmFuZ2UKLXsKLSAgICBOU1JhbmdlIHJlc3VsdCA9
IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5z
dGFydENvbnRhaW5lcigpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQp
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgc2l6ZV90IGxvY2F0aW9uOwotICAg
IHNpemVfdCBsZW5ndGg7Ci0gICAgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZy
b21SYW5nZShkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIHJhbmdlLCBsb2NhdGlvbiwgbGVu
Z3RoKTsKLSAgICByZXN1bHQubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICByZXN1bHQubGVuZ3Ro
ID0gbGVuZ3RoOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5TSW50ZWdlcilf
aW5kZXhGb3JUZXh0TWFya2VyOihpZCltYXJrZXIKLXsKLSAgICBpZiAoIW1hcmtlcikKLSAgICAg
ICAgcmV0dXJuIE5TTm90Rm91bmQ7Ci0gICAgCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24oW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjptYXJrZXJdKTsKLSAgICByZXR1
cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCldLmxvY2F0aW9uOwotfQotCi0tIChpZClfdGV4dE1hcmtlckZvckluZGV4OihOU0ludGVn
ZXIpdGV4dEluZGV4Ci17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9vYmplY3QtPmRvY3Vt
ZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAg
ICBQYXNzUmVmUHRyPFJhbmdlPiB0ZXh0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxv
Y2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgdGV4dEluZGV4LCAw
KTsKLSAgICBpZiAoIXRleHRSYW5nZSB8fCAhdGV4dFJhbmdlLT5ib3VuZGFyeVBvaW50c1ZhbGlk
KCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uKHRleHRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICByZXR1cm4gW3NlbGYgdGV4dE1h
cmtlckZvclZpc2libGVQb3NpdGlvbjpwb3NpdGlvbl07Ci19Ci0KLS8vIFRoZSBSVEYgcmVwcmVz
ZW50YXRpb24gb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWNjZXNzaWJpbGl0eSBv
YmplY3QgdGhhdCBpcwotLy8gc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiByYW5nZS4KLS0gKE5TRGF0
YSopZG9BWFJURkZvclJhbmdlOihOU1JhbmdlKXJhbmdlCi17Ci0gICAgTlNBdHRyaWJ1dGVkU3Ry
aW5nKiBhdHRyU3RyaW5nID0gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTpyYW5n
ZV07Ci0gICAgcmV0dXJuIFthdHRyU3RyaW5nIFJURkZyb21SYW5nZTogTlNNYWtlUmFuZ2UoMCwg
W2F0dHJTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOiBuaWxdOwotfQotCi0tIChp
ZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGUgZm9yUGFy
YW1ldGVyOihpZClwYXJhbWV0ZXIKLXsKLSAgICBpZCB0ZXh0TWFya2VyID0gbmlsOwotICAgIGlk
IHRleHRNYXJrZXJSYW5nZSA9IG5pbDsKLSAgICBOU051bWJlciogbnVtYmVyID0gbmlsOwotICAg
IE5TQXJyYXkqIGFycmF5ID0gbmlsOwotICAgIE5TRGljdGlvbmFyeSogZGljdGlvbmFyeSA9IG5p
bDsKLSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gdWlFbGVtZW50ID0gMDsKLSAgICBO
U1BvaW50IHBvaW50ID0gTlNaZXJvUG9pbnQ7Ci0gICAgYm9vbCBwb2ludFNldCA9IGZhbHNlOwot
ICAgIE5TUmFuZ2UgcmFuZ2UgPSB7MCwgMH07Ci0gICAgYm9vbCByYW5nZVNldCA9IGZhbHNlOwot
ICAgIAotICAgIC8vIGJhc2ljIHBhcmFtZXRlciB2YWxpZGF0aW9uCi0gICAgaWYgKCFtX29iamVj
dCB8fCAhYXR0cmlidXRlIHx8ICFwYXJhbWV0ZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
Ci0gICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIAotICAgIC8vIGNvbW1vbiBwYXJhbWV0ZXIgdHlwZSBjaGVjay9jYXN0aW5n
LiAgTmlsIGNoZWNrcyBpbiBoYW5kbGVycyBjYXRjaCB3cm9uZyB0eXBlIGNhc2UuCi0gICAgLy8g
Tk9URTogVGhpcyBhc3N1bWVzIG5pbCBpcyBub3QgYSB2YWxpZCBwYXJhbWV0ZXIsIGJlY2F1c2Ug
aXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbQotICAgIC8vIGEgcGFyYW1ldGVyIG9mIHRoZSB3
cm9uZyB0eXBlLgotICAgIGlmIChBWE9iamVjdElzVGV4dE1hcmtlcihwYXJhbWV0ZXIpKQotICAg
ICAgICB0ZXh0TWFya2VyID0gcGFyYW1ldGVyOwotICAgIAotICAgIGVsc2UgaWYgKEFYT2JqZWN0
SXNUZXh0TWFya2VyUmFuZ2UocGFyYW1ldGVyKSkKLSAgICAgICAgdGV4dE1hcmtlclJhbmdlID0g
cGFyYW1ldGVyOwotICAgIAotICAgIGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpb
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc2VsZl1dKQotICAgICAgICB1aUVsZW1lbnQg
PSBbKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilwYXJhbWV0ZXIgYWNjZXNzaWJpbGl0
eU9iamVjdF07Ci0gICAgCi0gICAgZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltO
U051bWJlciBzZWxmXV0pCi0gICAgICAgIG51bWJlciA9IHBhcmFtZXRlcjsKLSAgICAKLSAgICBl
bHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgc2VsZl1dKQotICAgICAg
ICBhcnJheSA9IHBhcmFtZXRlcjsKLSAgICAKLSAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2lu
ZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBzZWxmXV0pCi0gICAgICAgIGRpY3Rpb25hcnkgPSBwYXJh
bWV0ZXI7Ci0gICAgCi0gICAgZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU1Zh
bHVlIHNlbGZdXSAmJiBzdHJjbXAoWyhOU1ZhbHVlKilwYXJhbWV0ZXIgb2JqQ1R5cGVdLCBAZW5j
b2RlKE5TUG9pbnQpKSA9PSAwKSB7Ci0gICAgICAgIHBvaW50U2V0ID0gdHJ1ZTsKLSAgICAgICAg
cG9pbnQgPSBbKE5TVmFsdWUqKXBhcmFtZXRlciBwb2ludFZhbHVlXTsKLSAgICAgICAgCi0gICAg
fSBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgc2VsZl1dICYmIHN0
cmNtcChbKE5TVmFsdWUqKXBhcmFtZXRlciBvYmpDVHlwZV0sIEBlbmNvZGUoTlNSYW5nZSkpID09
IDApIHsKLSAgICAgICAgcmFuZ2VTZXQgPSB0cnVlOwotICAgICAgICByYW5nZSA9IFsoTlNWYWx1
ZSopcGFyYW1ldGVyIHJhbmdlVmFsdWVdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEF0dHJp
YnV0ZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuIEFsbG93IHN1cGVyIHRvIGhhbmRsZS4KLSAgICAg
ICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmlidXRlIGZv
clBhcmFtZXRlcjpwYXJhbWV0ZXJdOwotICAgIH0KLSAgICAKLSAgICAvLyBkaXNwYXRjaAotICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRz
Rm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogc3RhcnRPYmplY3QgPSAwOwotICAgICAgICBpZiAoW1tkaWN0aW9u
YXJ5IG9iamVjdEZvcktleTpAIkFYU3RhcnRFbGVtZW50Il0gaXNLaW5kT2ZDbGFzczpbV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc2VsZl1dKQotICAgICAgICAgICAgc3RhcnRPYmplY3Qg
PSBbKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilbZGljdGlvbmFyeSBvYmplY3RGb3JL
ZXk6QCJBWFN0YXJ0RWxlbWVudCJdIGFjY2Vzc2liaWxpdHlPYmplY3RdOwotICAgICAgICAKLSAg
ICAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiBzZWFyY2hEaXJlY3Rpb24gPSBTZWFy
Y2hEaXJlY3Rpb25OZXh0OwotICAgICAgICBpZiAoW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpA
IkFYRGlyZWN0aW9uIl0gaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgc2VsZl1dKQotICAgICAgICAg
ICAgc2VhcmNoRGlyZWN0aW9uID0gKFsoTlNTdHJpbmcqKVtkaWN0aW9uYXJ5IG9iamVjdEZvcktl
eTpAIkFYRGlyZWN0aW9uIl0gaXNFcXVhbFRvU3RyaW5nOkAiQVhEaXJlY3Rpb25OZXh0Il0pID8g
U2VhcmNoRGlyZWN0aW9uTmV4dCA6IFNlYXJjaERpcmVjdGlvblByZXZpb3VzOwotICAgICAgICAK
LSAgICAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaEtleSBzZWFyY2hLZXkgPSBBbnlUeXBlU2VhcmNo
S2V5OwotICAgICAgICBpZiAoW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYU2VhcmNoS2V5
Il0gaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgc2VsZl1dKQotICAgICAgICAgICAgc2VhcmNoS2V5
ID0gYWNjZXNzaWJpbGl0eVNlYXJjaEtleUZvclN0cmluZygoQ0ZTdHJpbmdSZWYpW2RpY3Rpb25h
cnkgb2JqZWN0Rm9yS2V5OkAiQVhTZWFyY2hLZXkiXSk7Ci0gICAgICAgIAotICAgICAgICBTdHJp
bmcgc2VhcmNoVGV4dDsKLSAgICAgICAgaWYgKFtbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QCJB
WFNlYXJjaFRleHQiXSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBzZWxmXV0pCi0gICAgICAgICAg
ICBzZWFyY2hUZXh0ID0gKENGU3RyaW5nUmVmKVtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFY
U2VhcmNoVGV4dCJdOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0c0xpbWl0ID0g
MDsKLSAgICAgICAgaWYgKFtbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWFJlc3VsdHNMaW1p
dCJdIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIHNlbGZdXSkKLSAgICAgICAgICAgIHJlc3VsdHNM
aW1pdCA9IFsoTlNOdW1iZXIqKVtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYUmVzdWx0c0xp
bWl0Il0gdW5zaWduZWRJbnRWYWx1ZV07Ci0gICAgICAgIAotICAgICAgICBBY2Nlc3NpYmlsaXR5
U2VhcmNoQ3JpdGVyaWEgY3JpdGVyaWEgPSB7c3RhcnRPYmplY3QsIHNlYXJjaERpcmVjdGlvbiwg
c2VhcmNoS2V5LCAmc2VhcmNoVGV4dCwgcmVzdWx0c0xpbWl0fTsKLSAgICAgICAgCi0gICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByZXN1bHRz
OwotICAgICAgICBtX29iamVjdC0+ZmluZE1hdGNoaW5nT2JqZWN0cygmY3JpdGVyaWEsIHJlc3Vs
dHMpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocmVzdWx0cyk7
Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlUZXh0TWFya2VySXNWYWxpZFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFy
a2VyOnRleHRNYXJrZXJdOwotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29s
OiFwb3MuaXNOdWxsKCldOwotICAgIH0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhGb3JUZXh0TWFya2VyUGFyYW1ldGVyaXplZEF0dHJpYnV0
ZV0pIHsKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpbc2VsZiBf
aW5kZXhGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdXTsKLSAgICB9Ci0gICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJGb3JJbmRleFBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIHJldHVybiBbc2VsZiBfdGV4dE1hcmtlckZv
ckluZGV4OltudW1iZXIgaW50ZWdlclZhbHVlXV07Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVUlFbGVtZW50Rm9yVGV4dE1hcmtlciJdKSB7Ci0g
ICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9u
Rm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBheE9iamVjdCA9IG1fb2JqZWN0LT5hY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yUG9zaXRpb24odmlz
aWJsZVBvcyk7Ci0gICAgICAgIGlmICghYXhPYmplY3QpCi0gICAgICAgICAgICByZXR1cm4gbmls
OwotICAgICAgICByZXR1cm4gYXhPYmplY3QtPndyYXBwZXIoKTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhUZXh0TWFya2VyUmFuZ2VGb3JVSUVs
ZW1lbnQiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gdWlFbGVt
ZW50LmdldCgpLT52aXNpYmxlUG9zaXRpb25SYW5nZSgpOwotICAgICAgICByZXR1cm4gW3NlbGYg
dGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3Np
dGlvbjp2cFJhbmdlLmVuZF07Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpAIkFYTGluZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRl
eHRNYXJrZXIpXTsKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJ
bnQ6bV9vYmplY3QtPmxpbmVGb3JQb3NpdGlvbih2aXNpYmxlUG9zKV07Ci0gICAgfQotICAgIAot
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1hcmtlclJhbmdlRm9y
TGluZSJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVj
dC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKFtudW1iZXIgaW50VmFsdWVdKTsKLSAgICAg
ICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFu
Z2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwotICAgIH0KLSAgICAKLSAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSJd
KSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtzZWxm
IHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07
Ci0gICAgICAgIHJldHVybiBtX29iamVjdC0+c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
dmlzaWJsZVBvc1JhbmdlKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhUZXh0TWFya2VyRm9yUG9zaXRpb24iXSkgewotICAgICAgICBJbnRQb2lu
dCB3ZWJDb3JlUG9pbnQgPSBJbnRQb2ludChwb2ludCk7Ci0gICAgICAgIHJldHVybiBwb2ludFNl
dCA/IFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPnZpc2libGVQ
b3NpdGlvbkZvclBvaW50KHdlYkNvcmVQb2ludCldIDogbmlsOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEJvdW5kc0ZvclRleHRNYXJrZXJSYW5n
ZSJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtz
ZWxmIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5n
ZV07Ci0gICAgICAgIE5TUmVjdCByZWN0ID0gbV9vYmplY3QtPmJvdW5kc0ZvclZpc2libGVQb3Np
dGlvblJhbmdlKHZpc2libGVQb3NSYW5nZSk7Ci0gICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1
ZVdpdGhSZWN0OnJlY3RdOwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Qm91bmRzRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmli
dXRlXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBtX29iamVjdC0+dmlzaWJs
ZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2UubG9jYXRpb24pOwotICAgICAgICBWaXNpYmxlUG9zaXRp
b24gZW5kID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmxvY2F0aW9u
K3JhbmdlLmxlbmd0aCk7Ci0gICAgICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICBOU1JlY3QgcmVjdCA9IG1fb2Jq
ZWN0LT5ib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShWaXNpYmxlUG9zaXRpb25SYW5nZShz
dGFydCwgZW5kKSk7Ci0gICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJlY3Rd
OwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5U3RyaW5nRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5k
ZXgocmFuZ2UubG9jYXRpb24pOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gbV9vYmpl
Y3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmxvY2F0aW9uK3JhbmdlLmxlbmd0aCk7
Ci0gICAgICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gbmlsOwotICAgICAgICByZXR1cm4gbV9vYmplY3QtPnN0cmluZ0ZvclZpc2libGVQ
b3NpdGlvblJhbmdlKFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0LCBlbmQpKTsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhBdHRyaWJ1dGVkU3Ry
aW5nRm9yVGV4dE1hcmtlclJhbmdlIl0pCi0gICAgICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmli
dXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwotICAgIAotICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1hcmtlclJhbmdlRm9yVW5v
cmRlcmVkVGV4dE1hcmtlcnMiXSkgewotICAgICAgICBpZiAoW2FycmF5IGNvdW50XSA8IDIpCi0g
ICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAKLSAgICAgICAgaWQgdGV4dE1hcmtlcjEg
PSBbYXJyYXkgb2JqZWN0QXRJbmRleDowXTsKLSAgICAgICAgaWQgdGV4dE1hcmtlcjIgPSBbYXJy
YXkgb2JqZWN0QXRJbmRleDoxXTsKLSAgICAgICAgaWYgKCFBWE9iamVjdElzVGV4dE1hcmtlcih0
ZXh0TWFya2VyMSkgfHwgIUFYT2JqZWN0SXNUZXh0TWFya2VyKHRleHRNYXJrZXIyKSkKLSAgICAg
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlz
aWJsZVBvczEgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2Vy
MSldOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvczIgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyMildOwotICAgICAgICBWaXNpYmxlUG9z
aXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yVW5v
cmRlcmVkUG9zaXRpb25zKHZpc2libGVQb3MxLCB2aXNpYmxlUG9zMik7Ci0gICAgICAgIHJldHVy
biBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0
IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewot
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlv
bkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRN
YXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPm5leHRWaXNpYmxlUG9zaXRpb24odmlz
aWJsZVBvcyldOwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6QCJBWFByZXZpb3VzVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJr
ZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb246bV9vYmplY3QtPnByZXZpb3VzVmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3Mp
XTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhM
ZWZ0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6
KHRleHRNYXJrZXIpXTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1f
b2JqZWN0LT5wb3NpdGlvbk9mTGVmdFdvcmQodmlzaWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiBb
c2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVu
ZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhSaWdodFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2Vy
Il0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+cG9zaXRpb25PZlJpZ2h0V29yZCh2aXNpYmxl
UG9zKTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9z
aXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwotICAgIH0KLSAg
ICAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlZnRMaW5lVGV4dE1h
cmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcild
OwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPmxlZnRM
aW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiBbc2Vs
ZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBv
c2l0aW9uOnZwUmFuZ2UuZW5kXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOkAiQVhSaWdodExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0p
IHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9z
aXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIFZpc2libGVQb3NpdGlv
blJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+cmlnaHRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
dmlzaWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlz
aWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTZW50ZW5j
ZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRN
YXJrZXIpXTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0
LT5zZW50ZW5jZUZvclBvc2l0aW9uKHZpc2libGVQb3MpOwotICAgICAgICByZXR1cm4gW3NlbGYg
dGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3Np
dGlvbjp2cFJhbmdlLmVuZF07Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpAIkFYUGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7
Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0
aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICBWaXNpYmxlUG9zaXRpb25S
YW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnBhcmFncmFwaEZvclBvc2l0aW9uKHZpc2libGVQb3Mp
OwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlv
bnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07Ci0gICAgfQotICAgIAot
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFdvcmRFbmRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
ID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAg
ICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+
bmV4dFdvcmRFbmQodmlzaWJsZVBvcyldOwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRN
YXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZp
c2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgcmV0dXJu
IFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPnByZXZpb3VzV29y
ZFN0YXJ0KHZpc2libGVQb3MpXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOkAiQVhOZXh0TGluZUVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0
TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5uZXh0TGluZUVuZFBvc2l0aW9uKHZp
c2libGVQb3MpXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhQcmV2aW91c0xpbmVTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFy
a2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c0xpbmVTdGFydFBvc2l0aW9u
KHZpc2libGVQb3MpXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOkAiQVhOZXh0U2VudGVuY2VFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0g
ICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9u
Rm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1h
cmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+bmV4dFNlbnRlbmNlRW5kUG9zaXRpb24o
dmlzaWJsZVBvcyldOwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWFByZXZpb3VzU2VudGVuY2VTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0p
IHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9z
aXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBbc2VsZiB0
ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1NlbnRlbmNlU3Rh
cnRQb3NpdGlvbih2aXNpYmxlUG9zKV07Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNp
YmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBb
c2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5uZXh0UGFyYWdyYXBo
RW5kUG9zaXRpb24odmlzaWJsZVBvcyldOwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3Nl
bGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICBy
ZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+cHJldmlv
dXNQYXJhZ3JhcGhTdGFydFBvc2l0aW9uKHZpc2libGVQb3MpXTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdHlsZVRleHRNYXJrZXJSYW5nZUZv
clRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtz
ZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5zdHlsZVJhbmdlRm9yUG9z
aXRpb24odmlzaWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VG
cm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5k
XTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhM
ZW5ndGhGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJr
ZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwotICAgICAgICBpbnQgbGVuZ3RoID0gbV9vYmplY3Qt
Pmxlbmd0aEZvclZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3NSYW5nZSk7Ci0gICAgICAg
IGlmIChsZW5ndGggPCAwKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgcmV0dXJu
IFtOU051bWJlciBudW1iZXJXaXRoSW50Omxlbmd0aF07Ci0gICAgfQotICAgIAotICAgIC8vIFVz
ZWQgb25seSBieSBEdW1wUmVuZGVyVHJlZSAoc28gZmFyKS4KLSAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6QCJBWFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSJdKSB7
Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtzZWxmIHZp
c2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0g
ICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnZpc2libGVQ
b3NSYW5nZS5zdGFydF07Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxU
b1N0cmluZzpAIkFYRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSJdKSB7Ci0gICAgICAg
IFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtzZWxmIHZpc2libGVQb3Np
dGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0gICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnZpc2libGVQb3NSYW5nZS5l
bmRdOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxl
KCkpIHsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eUNlbGxGb3JDb2x1bW5BbmRSb3dQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAg
ICAgICAgaWYgKGFycmF5ID09IG5pbCB8fCBbYXJyYXkgY291bnRdICE9IDIpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNl
bGwgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihtX29iamVjdCktPmNlbGxGb3JD
b2x1bW5BbmRSb3coW1thcnJheSBvYmplY3RBdEluZGV4OjBdIHVuc2lnbmVkSW50VmFsdWVdLCBb
W2FycmF5IG9iamVjdEF0SW5kZXg6MV0gdW5zaWduZWRJbnRWYWx1ZV0pOwotICAgICAgICAgICAg
aWYgKCFjZWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHJldHVybiBjZWxsLT53cmFwcGVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgaWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKLSAgICAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcgKilrQVhMaW5lRm9ySW5kZXhQYXJhbWV0
ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBtX29iamVj
dC0+ZG9BWExpbmVGb3JJbmRleChbbnVtYmVyIGludFZhbHVlXSk7Ci0gICAgICAgICAgICBpZiAo
bGluZU51bWJlciA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50OmxpbmVOdW1iZXJdOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
IChOU1N0cmluZyAqKWtBWFJhbmdlRm9yTGluZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0g
ICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+ZG9BWFJhbmdl
Rm9yTGluZShbbnVtYmVyIGludFZhbHVlXSk7Ci0gICAgICAgICAgICByZXR1cm4gW05TVmFsdWUg
dmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxl
bmd0aCldOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FYU3RyaW5nRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0
cmlidXRlXSkgewotICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQ
bGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgICAg
IHJldHVybiByYW5nZVNldCA/IChpZCkobV9vYmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZShwbGFp
blRleHRSYW5nZSkpIDogbmlsOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FYUmFuZ2VGb3JQb3NpdGlvblBh
cmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBpZiAoIXBvaW50U2V0KQotICAg
ICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICBJbnRQb2ludCB3ZWJDb3JlUG9p
bnQgPSBJbnRQb2ludChwb2ludCk7Ci0gICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFu
Z2UgPSBtX29iamVjdC0+ZG9BWFJhbmdlRm9yUG9zaXRpb24od2ViQ29yZVBvaW50KTsKLSAgICAg
ICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UodGV4dFJh
bmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nKilrQVhSYW5nZUZv
ckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIFBsYWluVGV4dFJh
bmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FYUmFuZ2VGb3JJbmRleChbbnVtYmVyIGludFZh
bHVlXSk7Ci0gICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFr
ZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmlu
Zyopa0FYQm91bmRzRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICAg
ICAgaWYgKCFyYW5nZVNldCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAg
ICAgUGxhaW5UZXh0UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5nZShyYW5nZS5s
b2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgICAgIE5TUmVjdCByZWN0ID0gbV9vYmpl
Y3QtPmRvQVhCb3VuZHNGb3JSYW5nZShwbGFpblRleHRSYW5nZSk7Ci0gICAgICAgICAgICByZXR1
cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcqKWtBWFJURkZv
clJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gcmFuZ2VT
ZXQgPyBbc2VsZiBkb0FYUlRGRm9yUmFuZ2U6cmFuZ2VdIDogbmlsOwotICAgICAgICAKLSAgICAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcqKWtBWEF0dHJpYnV0
ZWRTdHJpbmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0
dXJuIHJhbmdlU2V0ID8gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTpyYW5nZV0g
OiBuaWw7Ci0gICAgICAgIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
IChOU1N0cmluZyopa0FYU3R5bGVSYW5nZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0p
IHsKLSAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FY
U3R5bGVSYW5nZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKLSAgICAgICAgICAgIHJldHVy
biBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0
ZXh0UmFuZ2UubGVuZ3RoKV07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gVGhlcmUg
YXJlIHNvbWUgcGFyYW1ldGVycyB0aGF0IHN1cGVyIGhhbmRsZXMgdGhhdCBhcmUgbm90IGV4cGxp
Y2l0bHkgcmV0dXJuZWQgYnkgdGhlIGxpc3Qgb2YgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzLgot
ICAgIC8vIEluIHRoYXQgY2FzZSBpdCBtdXN0IGJlIHBhc3NlZCB0byBzdXBlci4KLSAgICByZXR1
cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTphdHRyaWJ1dGUgZm9yUGFyYW1l
dGVyOnBhcmFtZXRlcl07Ci19Ci0KLS0gKEJPT0wpYWNjZXNzaWJpbGl0eVN1cHBvcnRzT3ZlcnJp
ZGRlbkF0dHJpYnV0ZXMKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChCT09MKWFjY2Vzc2li
aWxpdHlTaG91bGRVc2VVbmlxdWVJZAotewotICAgIC8vIEFsbCBBWCBvYmplY3Qgd3JhcHBlcnMg
c2hvdWxkIHVzZSB1bmlxdWUgSUQncyBiZWNhdXNlIGl0J3MgZmFzdGVyIHdpdGhpbiBBcHBLaXQg
dG8gbG9vayB0aGVtIHVwLgotICAgIHJldHVybiBZRVM7Ci19Ci0KLS8vIEFQSSB0aGF0IEFwcEtp
dCB1c2VzIGZvciBmYXN0ZXIgYWNjZXNzCi0tIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlJbmRl
eE9mQ2hpbGQ6KGlkKWNoaWxkCi17Ci0gICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5n
U3RvcmVdKQotICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKLSAgICAKLSAgICAvLyBUcmVlIG9i
amVjdHMgcmV0dXJuIHRoZWlyIHJvd3MgYXMgdGhlaXIgY2hpbGRyZW4uIFdlIGNhbiB1c2UgdGhl
IG9yaWdpbmFsIG1ldGhvZAotICAgIC8vIGhlcmUsIGJlY2F1c2Ugd2Ugd29uJ3QgZ2FpbiBhbnkg
c3BlZWQgdXAuCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSkKLSAgICAgICAgcmV0dXJuIFtz
dXBlciBhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxkOmNoaWxkXTsKLSAgICAKLSAgICBjb25zdCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVu
ID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7Ci0gICAgCi0gICAgaWYgKGNoaWxkcmVuLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIFtbc2VsZiByZW5kZXJXaWRnZXRDaGlsZHJlbl0gaW5kZXhPZk9i
amVjdDpjaGlsZF07Ci0gICAgCi0gICAgdW5zaWduZWQgY291bnQgPSBjaGlsZHJlbi5zaXplKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsKLSAgICAgICAgV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBjaGlsZHJlbltrXS0+d3JhcHBl
cigpOwotICAgICAgICBpZiAod3JhcHBlciA9PSBjaGlsZCB8fCAoY2hpbGRyZW5ba10tPmlzQXR0
YWNobWVudCgpICYmIFt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XSA9PSBjaGlsZCkpCi0gICAgICAg
ICAgICByZXR1cm4gazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIE5TTm90Rm91bmQ7Ci19Ci0K
LS0gKE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlQ291bnQ6KE5TU3RyaW5n
ICopYXR0cmlidXRlCi17Ci0gICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVd
KQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIC8vIFRy
ZWUgaXRlbXMgb2JqZWN0IHJldHVybnMgYSBkaWZmZXJlbnQgc2V0IG9mIGNoaWxkcmVuIHRoYW4g
dGhvc2UgdGhhdCBhcmUgaW4gY2hpbGRyZW4oKQotICAgICAgICAvLyBiZWNhdXNlIGFuIEFYT3V0
bGluZSAodGhlIG1hYyByb2xlIGlzIGJlY29tZXMpIGhhcyBzb21lIG9kZCBzdGlwdWxhdGlvbnMu
Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlKCkgfHwgbV9vYmplY3QtPmlzVHJlZUl0ZW0o
KSkKLSAgICAgICAgICAgIHJldHVybiBbW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
Ok5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSBjb3VudF07Ci0gICAgICAgIAotICAg
ICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3ImIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7Ci0gICAgICAgIGlmIChjaGlsZHJl
bi5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gW1tzZWxmIHJlbmRlcldpZGdldENoaWxk
cmVuXSBjb3VudF07Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2l6ZSgpOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0
ZUNvdW50OmF0dHJpYnV0ZV07Ci19Ci0KLS0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QXJyYXlB
dHRyaWJ1dGVWYWx1ZXM6KE5TU3RyaW5nICopYXR0cmlidXRlIGluZGV4OihOU1VJbnRlZ2VyKWlu
ZGV4IG1heENvdW50OihOU1VJbnRlZ2VyKW1heENvdW50Ci17Ci0gICAgaWYgKCFbc2VsZiB1cGRh
dGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJp
YnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5jaGlsZHJlbigpLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgTlNBcnJheSAqY2hpbGRyZW4gPSBbc2VsZiByZW5kZXJXaWRnZXRDaGlsZHJl
bl07Ci0gICAgICAgICAgICBpZiAoIWNoaWxkcmVuKQotICAgICAgICAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE5TVUludGVnZXIgY2hpbGRDb3VudCA9IFtj
aGlsZHJlbiBjb3VudF07Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gY2hpbGRDb3VudCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBOU1VJ
bnRlZ2VyIGFycmF5TGVuZ3RoID0gbWluKGNoaWxkQ291bnQgLSBpbmRleCwgbWF4Q291bnQpOwot
ICAgICAgICAgICAgcmV0dXJuIFtjaGlsZHJlbiBzdWJhcnJheVdpdGhSYW5nZTpOU01ha2VSYW5n
ZShpbmRleCwgYXJyYXlMZW5ndGgpXTsKLSAgICAgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNU
cmVlKCkpIHsKLSAgICAgICAgICAgIC8vIFRyZWUgb2JqZWN0cyByZXR1cm4gdGhlaXIgcm93cyBh
cyB0aGVpciBjaGlsZHJlbi4gV2UgY2FuIHVzZSB0aGUgb3JpZ2luYWwgbWV0aG9kIGluIHRoaXMg
Y2FzZS4KLSAgICAgICAgICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUFycmF5QXR0cmli
dXRlVmFsdWVzOmF0dHJpYnV0ZSBpbmRleDppbmRleCBtYXhDb3VudDptYXhDb3VudF07Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsK
LSAgICAgICAgdW5zaWduZWQgY2hpbGRDb3VudCA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICAgICAg
aWYgKGluZGV4ID49IGNoaWxkQ291bnQpCi0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAg
ICAKLSAgICAgICAgdW5zaWduZWQgYXZhaWxhYmxlID0gbWluKGNoaWxkQ291bnQgLSBpbmRleCwg
bWF4Q291bnQpOwotICAgICAgICAKLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnN1YmFycmF5ID0g
W05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmF2YWlsYWJsZV07Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgYWRkZWQgPSAwOyBhZGRlZCA8IGF2YWlsYWJsZTsgKytpbmRleCwgKythZGRl
ZCkgewotICAgICAgICAgICAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIg
PSBjaGlsZHJlbltpbmRleF0tPndyYXBwZXIoKTsKLSAgICAgICAgICAgIGlmICh3cmFwcGVyKSB7
Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGF0dGFjaG1lbnQgdmlldyBzaG91bGQgYmUgcmV0dXJu
ZWQsIG90aGVyd2lzZSBBWCBwYWxpbmRyb21lIGVycm9ycyBvY2N1ci4KLSAgICAgICAgICAgICAg
ICBpZiAoY2hpbGRyZW5baW5kZXhdLT5pc0F0dGFjaG1lbnQoKSAmJiBbd3JhcHBlciBhdHRhY2ht
ZW50Vmlld10pCi0gICAgICAgICAgICAgICAgICAgIFtzdWJhcnJheSBhZGRPYmplY3Q6W3dyYXBw
ZXIgYXR0YWNobWVudFZpZXddXTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIFtzdWJhcnJheSBhZGRPYmplY3Q6d3JhcHBlcl07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzdWJhcnJheTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVWYWx1ZXM6YXR0cmli
dXRlIGluZGV4OmluZGV4IG1heENvdW50Om1heENvdW50XTsKLX0KLQotQGVuZAotCi0jZW5kaWYg
Ly8gSEFWRShBQ0NFU1NJQklMSVRZKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>