<?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>147995</bug_id>
          
          <creation_ts>2015-08-13 14:40:41 -0700</creation_ts>
          <short_desc>Run benchmark customized Dromaeo should not assume there is an internet connection.</short_desc>
          <delta_ts>2015-08-13 15:39:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>dewei_zhu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>glenn</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1117407</commentid>
    <comment_count>0</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2015-08-13 14:40:41 -0700</bug_when>
    <thetext>Run benchmark customized Dromaeo should not assume there is an internet connection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117411</commentid>
    <comment_count>1</comment_count>
      <attachid>258938</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2015-08-13 14:42:26 -0700</bug_when>
    <thetext>Created attachment 258938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117423</commentid>
    <comment_count>2</comment_count>
      <attachid>258938</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-13 15:39:38 -0700</bug_when>
    <thetext>Comment on attachment 258938
Patch

Clearing flags on attachment: 258938

Committed r188410: &lt;http://trac.webkit.org/changeset/188410&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117424</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-13 15:39:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258938</attachid>
            <date>2015-08-13 14:42:26 -0700</date>
            <delta_ts>2015-08-13 15:39:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147995-20150813144210.patch</filename>
            <type>text/plain</type>
            <size>661670</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NDAyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGU3ZmM3NmYyZGIwYTQwZmZkODNlNTg3ZWQ4MjM5YjVj
N2YwYzFjNC4uNDIyYTAxM2ExZTRlMmQ1MzZjNjZlYmUzN2E1ZDQ5MDI1OWEyNWFmMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDE1LTA4LTEzICBEZXdlaSBaaHUgIDxkZXdlaV96aHVAYXBwbGUuY29tPgorCisgICAg
ICAgIFJ1biBiZW5jaG1hcmsgY3VzdG9taXplZCBEcm9tYWVvIHNob3VsZCBub3QgYXNzdW1lIHRo
ZXJlIGlzIGFuIGludGVybmV0IGNvbm5lY3Rpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc5OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc2V2ZXJhbCBkZXBlbmRlbmN5IGpzIGxpYnMgdG8g
bG9jYWwuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0
YS9wYXRjaGVzL0Ryb21hZW8ucGF0Y2g6CisKIDIwMTUtMDgtMTMgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBXVEYgc2hvdWxkIGhhdmUgYSBjb21wYWN0IENvbmRp
dGlvbiBvYmplY3QgdG8gdXNlIHdpdGggTG9jawpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9Ecm9tYWVvLnBhdGNoIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9Ecm9tYWVv
LnBhdGNoCmluZGV4IGJlN2VmNzc0ZTk2MTM0OGE5MmE0ZmZiZGU4ZTY2NzJhMWUzZWFhMjAuLjRj
M2U2YzU4YzlmMzY1OTA1M2NjNTdiODEwYjQ1Nzc3NDI5OTYwNjggMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvRHJvbWFlby5w
YXRjaAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9w
YXRjaGVzL0Ryb21hZW8ucGF0Y2gKQEAgLTEsNSArMSw3MjAxIEBACitkaWZmIC0tZ2l0IGEvd2Vi
L2FqYXgvbGlicy9kb2pvLzEuNi4xL2Rvam8vZG9qby54ZC5qcyBiL3dlYi9hamF4L2xpYnMvZG9q
by8xLjYuMS9kb2pvL2Rvam8ueGQuanMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAw
MDAwLi4yYTJiNzAxCistLS0gL2Rldi9udWxsCisrKysgYi93ZWIvYWpheC9saWJzL2Rvam8vMS42
LjEvZG9qby9kb2pvLnhkLmpzCitAQCAtMCwwICsxLDE0IEBACisrLyoKKysJQ29weXJpZ2h0IChj
KSAyMDA0LTIwMTEsIFRoZSBEb2pvIEZvdW5kYXRpb24gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysJ
QXZhaWxhYmxlIHZpYSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgPj0gMi4xIE9SIHRoZSBtb2RpZmll
ZCBCU0QgbGljZW5zZS4KKysJc2VlOiBodHRwOi8vZG9qb3Rvb2xraXQub3JnL2xpY2Vuc2UgZm9y
IGRldGFpbHMKKysqLworKworKy8qCisrCVRoaXMgaXMgYW4gb3B0aW1pemVkIHZlcnNpb24gb2Yg
RG9qbywgYnVpbHQgZm9yIGRlcGxveW1lbnQgYW5kIG5vdCBmb3IKKysJZGV2ZWxvcG1lbnQuIFRv
IGdldCBzb3VyY2VzIGFuZCBkb2N1bWVudGF0aW9uLCBwbGVhc2UgdmlzaXQ6CisrCisrCQlodHRw
Oi8vZG9qb3Rvb2xraXQub3JnCisrKi8KKysKKysoZnVuY3Rpb24oKXt2YXIgXzE9bnVsbDtpZigo
XzF8fCh0eXBlb2YgZGpDb25maWchPSJ1bmRlZmluZWQiJiZkakNvbmZpZy5zY29wZU1hcCkpJiYo
dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCIpKXt2YXIgXzI9IiIsXzM9IiIsXzQ9IiIsXzU9e30s
XzY9e307XzE9XzF8fGRqQ29uZmlnLnNjb3BlTWFwO2Zvcih2YXIgaT0wO2k8XzEubGVuZ3RoO2kr
Kyl7dmFyIF83PV8xW2ldO18yKz0idmFyICIrXzdbMF0rIiA9IHt9OyAiK183WzFdKyIgPSAiK183
WzBdKyI7IitfN1sxXSsiLl9zY29wZU5hbWUgPSAnIitfN1sxXSsiJzsiO18zKz0oaT09MD8iIjoi
LCIpK183WzBdO180Kz0oaT09MD8iIjoiLCIpK183WzFdO181W183WzBdXT1fN1sxXTtfNltfN1sx
XV09XzdbMF07fWV2YWwoXzIrImRvam8uX3Njb3BlQXJncyA9IFsiK180KyJdOyIpO2Rvam8uX3Nj
b3BlUHJlZml4QXJncz1fMztkb2pvLl9zY29wZVByZWZpeD0iKGZ1bmN0aW9uKCIrXzMrIil7Ijtk
b2pvLl9zY29wZVN1ZmZpeD0ifSkoIitfNCsiKSI7ZG9qby5fc2NvcGVNYXA9XzU7ZG9qby5fc2Nv
cGVNYXBSZXY9XzY7fShmdW5jdGlvbigpe2lmKHR5cGVvZiB0aGlzWyJsb2FkRmlyZWJ1Z0NvbnNv
bGUiXT09ImZ1bmN0aW9uIil7dGhpc1sibG9hZEZpcmVidWdDb25zb2xlIl0oKTt9ZWxzZXt0aGlz
LmNvbnNvbGU9dGhpcy5jb25zb2xlfHx7fTt2YXIgY249WyJhc3NlcnQiLCJjb3VudCIsImRlYnVn
IiwiZGlyIiwiZGlyeG1sIiwiZXJyb3IiLCJncm91cCIsImdyb3VwRW5kIiwiaW5mbyIsInByb2Zp
bGUiLCJwcm9maWxlRW5kIiwidGltZSIsInRpbWVFbmQiLCJ0cmFjZSIsIndhcm4iLCJsb2ciXTt2
YXIgaT0wLHRuO3doaWxlKCh0bj1jbltpKytdKSl7aWYoIWNvbnNvbGVbdG5dKXsoZnVuY3Rpb24o
KXt2YXIgXzg9dG4rIiI7Y29uc29sZVtfOF09KCJsb2ciIGluIGNvbnNvbGUpP2Z1bmN0aW9uKCl7
dmFyIGE9QXJyYXkuYXBwbHkoe30sYXJndW1lbnRzKTthLnVuc2hpZnQoXzgrIjoiKTtjb25zb2xl
WyJsb2ciXShhLmpvaW4oIiAiKSk7fTpmdW5jdGlvbigpe307Y29uc29sZVtfOF0uX2Zha2U9dHJ1
ZTt9KSgpO319fWlmKHR5cGVvZiBkb2pvPT0idW5kZWZpbmVkIil7ZG9qbz17X3Njb3BlTmFtZToi
ZG9qbyIsX3Njb3BlUHJlZml4OiIiLF9zY29wZVByZWZpeEFyZ3M6IiIsX3Njb3BlU3VmZml4OiIi
LF9zY29wZU1hcDp7fSxfc2NvcGVNYXBSZXY6e319O312YXIgZD1kb2pvO2lmKHR5cGVvZiBkaWpp
dD09InVuZGVmaW5lZCIpe2Rpaml0PXtfc2NvcGVOYW1lOiJkaWppdCJ9O31pZih0eXBlb2YgZG9q
b3g9PSJ1bmRlZmluZWQiKXtkb2pveD17X3Njb3BlTmFtZToiZG9qb3gifTt9aWYoIWQuX3Njb3Bl
QXJncyl7ZC5fc2NvcGVBcmdzPVtkb2pvLGRpaml0LGRvam94XTt9ZC5nbG9iYWw9dGhpcztkLmNv
bmZpZz17aXNEZWJ1ZzpmYWxzZSxkZWJ1Z0F0QWxsQ29zdHM6ZmFsc2V9O3ZhciBfOT10eXBlb2Yg
ZGpDb25maWchPSJ1bmRlZmluZWQiP2RqQ29uZmlnOnR5cGVvZiBkb2pvQ29uZmlnIT0idW5kZWZp
bmVkIj9kb2pvQ29uZmlnOm51bGw7aWYoXzkpe2Zvcih2YXIgYyBpbiBfOSl7ZC5jb25maWdbY109
XzlbY107fX1kb2pvLmxvY2FsZT1kLmNvbmZpZy5sb2NhbGU7dmFyIF9hPSIkUmV2OiAyNDU5NSAk
Ii5tYXRjaCgvXGQrLyk7ZG9qby52ZXJzaW9uPXttYWpvcjoxLG1pbm9yOjYscGF0Y2g6MSxmbGFn
OiIiLHJldmlzaW9uOl9hPytfYVswXTpOYU4sdG9TdHJpbmc6ZnVuY3Rpb24oKXt3aXRoKGQudmVy
c2lvbil7cmV0dXJuIG1ham9yKyIuIittaW5vcisiLiIrcGF0Y2grZmxhZysiICgiK3JldmlzaW9u
KyIpIjt9fX07aWYodHlwZW9mIE9wZW5BamF4IT0idW5kZWZpbmVkIil7T3BlbkFqYXguaHViLnJl
Z2lzdGVyTGlicmFyeShkb2pvLl9zY29wZU5hbWUsImh0dHA6Ly9kb2pvdG9vbGtpdC5vcmciLGQu
dmVyc2lvbi50b1N0cmluZygpKTt9dmFyIF9iLF9jLF9kPXt9O2Zvcih2YXIgaSBpbiB7dG9TdHJp
bmc6MX0pe19iPVtdO2JyZWFrO31kb2pvLl9leHRyYU5hbWVzPV9iPV9ifHxbImhhc093blByb3Bl
cnR5IiwidmFsdWVPZiIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRv
TG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJjb25zdHJ1Y3RvciJdO19jPV9iLmxlbmd0aDtkb2pv
Ll9taXhpbj1mdW5jdGlvbihfZSxfZil7dmFyIF8xMCxzLGk7Zm9yKF8xMCBpbiBfZil7cz1fZltf
MTBdO2lmKCEoXzEwIGluIF9lKXx8KF9lW18xMF0hPT1zJiYoIShfMTAgaW4gX2QpfHxfZFtfMTBd
IT09cykpKXtfZVtfMTBdPXM7fX1pZihfYyYmX2Ype2ZvcihpPTA7aTxfYzsrK2kpe18xMD1fYltp
XTtzPV9mW18xMF07aWYoIShfMTAgaW4gX2UpfHwoX2VbXzEwXSE9PXMmJighKF8xMCBpbiBfZCl8
fF9kW18xMF0hPT1zKSkpe19lW18xMF09czt9fX1yZXR1cm4gX2U7fTtkb2pvLm1peGluPWZ1bmN0
aW9uKG9iaixfMTEpe2lmKCFvYmope29iaj17fTt9Zm9yKHZhciBpPTEsbD1hcmd1bWVudHMubGVu
Z3RoO2k8bDtpKyspe2QuX21peGluKG9iaixhcmd1bWVudHNbaV0pO31yZXR1cm4gb2JqO307ZG9q
by5fZ2V0UHJvcD1mdW5jdGlvbihfMTIsXzEzLF8xNCl7dmFyIG9iaj1fMTR8fGQuZ2xvYmFsO2Zv
cih2YXIgaT0wLHA7b2JqJiYocD1fMTJbaV0pO2krKyl7aWYoaT09MCYmZC5fc2NvcGVNYXBbcF0p
e3A9ZC5fc2NvcGVNYXBbcF07fW9iaj0ocCBpbiBvYmo/b2JqW3BdOihfMTM/b2JqW3BdPXt9OnVu
ZGVmaW5lZCkpO31yZXR1cm4gb2JqO307ZG9qby5zZXRPYmplY3Q9ZnVuY3Rpb24oXzE1LF8xNixf
MTcpe3ZhciBfMTg9XzE1LnNwbGl0KCIuIikscD1fMTgucG9wKCksb2JqPWQuX2dldFByb3AoXzE4
LHRydWUsXzE3KTtyZXR1cm4gb2JqJiZwPyhvYmpbcF09XzE2KTp1bmRlZmluZWQ7fTtkb2pvLmdl
dE9iamVjdD1mdW5jdGlvbihfMTksXzFhLF8xYil7cmV0dXJuIGQuX2dldFByb3AoXzE5LnNwbGl0
KCIuIiksXzFhLF8xYik7fTtkb2pvLmV4aXN0cz1mdW5jdGlvbihfMWMsb2JqKXtyZXR1cm4gZC5n
ZXRPYmplY3QoXzFjLGZhbHNlLG9iaikhPT11bmRlZmluZWQ7fTtkb2pvWyJldmFsIl09ZnVuY3Rp
b24oXzFkKXtyZXR1cm4gZC5nbG9iYWwuZXZhbD9kLmdsb2JhbC5ldmFsKF8xZCk6ZXZhbChfMWQp
O307ZC5kZXByZWNhdGVkPWQuZXhwZXJpbWVudGFsPWZ1bmN0aW9uKCl7fTt9KSgpOyhmdW5jdGlv
bigpe3ZhciBkPWRvam8sXzFlO2QubWl4aW4oZCx7X2xvYWRlZE1vZHVsZXM6e30sX2luRmxpZ2h0
Q291bnQ6MCxfaGFzUmVzb3VyY2U6e30sX21vZHVsZVByZWZpeGVzOntkb2pvOntuYW1lOiJkb2pv
Iix2YWx1ZToiLiJ9LGRvaDp7bmFtZToiZG9oIix2YWx1ZToiLi4vdXRpbC9kb2gifSx0ZXN0czp7
bmFtZToidGVzdHMiLHZhbHVlOiJ0ZXN0cyJ9fSxfbW9kdWxlSGFzUHJlZml4OmZ1bmN0aW9uKF8x
Zil7dmFyIG1wPWQuX21vZHVsZVByZWZpeGVzO3JldHVybiAhIShtcFtfMWZdJiZtcFtfMWZdLnZh
bHVlKTt9LF9nZXRNb2R1bGVQcmVmaXg6ZnVuY3Rpb24oXzIwKXt2YXIgbXA9ZC5fbW9kdWxlUHJl
Zml4ZXM7aWYoZC5fbW9kdWxlSGFzUHJlZml4KF8yMCkpe3JldHVybiBtcFtfMjBdLnZhbHVlO31y
ZXR1cm4gXzIwO30sX2xvYWRlZFVybHM6W10sX3Bvc3RMb2FkOmZhbHNlLF9sb2FkZXJzOltdLF91
bmxvYWRlcnM6W10sX2xvYWROb3RpZnlpbmc6ZmFsc2V9KTtkb2pvLl9sb2FkVXJpQW5kQ2hlY2s9
ZnVuY3Rpb24odXJpLF8yMSxjYil7dmFyIG9rPWZhbHNlO3RyeXtvaz1kLl9sb2FkVXJpKHVyaSxj
Yik7fWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoImZhaWxlZCBsb2FkaW5nICIrdXJpKyIgd2l0aCBl
cnJvcjogIitlKTt9cmV0dXJuICEhKG9rJiZkLl9sb2FkZWRNb2R1bGVzW18yMV0pO307ZG9qby5s
b2FkZWQ9ZnVuY3Rpb24oKXtkLl9sb2FkTm90aWZ5aW5nPXRydWU7ZC5fcG9zdExvYWQ9dHJ1ZTt2
YXIgbWxsPWQuX2xvYWRlcnM7ZC5fbG9hZGVycz1bXTtmb3IodmFyIHg9MDt4PG1sbC5sZW5ndGg7
eCsrKXttbGxbeF0oKTt9ZC5fbG9hZE5vdGlmeWluZz1mYWxzZTtpZihkLl9wb3N0TG9hZCYmZC5f
aW5GbGlnaHRDb3VudD09MCYmbWxsLmxlbmd0aCl7ZC5fY2FsbExvYWRlZCgpO319O2Rvam8udW5s
b2FkZWQ9ZnVuY3Rpb24oKXt2YXIgbWxsPWQuX3VubG9hZGVyczt3aGlsZShtbGwubGVuZ3RoKXso
bWxsLnBvcCgpKSgpO319O2QuX29udG89ZnVuY3Rpb24oYXJyLG9iaixmbil7aWYoIWZuKXthcnIu
cHVzaChvYmopO31lbHNle2lmKGZuKXt2YXIgXzIyPSh0eXBlb2YgZm49PSJzdHJpbmciKT9vYmpb
Zm5dOmZuO2Fyci5wdXNoKGZ1bmN0aW9uKCl7XzIyLmNhbGwob2JqKTt9KTt9fX07ZG9qby5yZWFk
eT1kb2pvLmFkZE9uTG9hZD1mdW5jdGlvbihvYmosXzIzKXtkLl9vbnRvKGQuX2xvYWRlcnMsb2Jq
LF8yMyk7aWYoZC5fcG9zdExvYWQmJmQuX2luRmxpZ2h0Q291bnQ9PTAmJiFkLl9sb2FkTm90aWZ5
aW5nKXtkLl9jYWxsTG9hZGVkKCk7fX07dmFyIGRjYT1kLmNvbmZpZy5hZGRPbkxvYWQ7aWYoZGNh
KXtkLmFkZE9uTG9hZFsoZGNhIGluc3RhbmNlb2YgQXJyYXk/ImFwcGx5IjoiY2FsbCIpXShkLGRj
YSk7fWRvam8uX21vZHVsZXNMb2FkZWQ9ZnVuY3Rpb24oKXtpZihkLl9wb3N0TG9hZCl7cmV0dXJu
O31pZihkLl9pbkZsaWdodENvdW50PjApe2NvbnNvbGUud2FybigiZmlsZXMgc3RpbGwgaW4gZmxp
Z2h0ISIpO3JldHVybjt9ZC5fY2FsbExvYWRlZCgpO307ZG9qby5fY2FsbExvYWRlZD1mdW5jdGlv
bigpe2lmKHR5cGVvZiBzZXRUaW1lb3V0PT0ib2JqZWN0Inx8KGQuY29uZmlnLnVzZVhEb21haW4m
JmQuaXNPcGVyYSkpe3NldFRpbWVvdXQoZC5pc0FJUj9mdW5jdGlvbigpe2QubG9hZGVkKCk7fTpk
Ll9zY29wZU5hbWUrIi5sb2FkZWQoKTsiLDApO31lbHNle2QubG9hZGVkKCk7fX07ZG9qby5fZ2V0
TW9kdWxlU3ltYm9scz1mdW5jdGlvbihfMjQpe3ZhciBfMjU9XzI0LnNwbGl0KCIuIik7Zm9yKHZh
ciBpPV8yNS5sZW5ndGg7aT4wO2ktLSl7dmFyIF8yNj1fMjUuc2xpY2UoMCxpKS5qb2luKCIuIik7
aWYoaT09MSYmIWQuX21vZHVsZUhhc1ByZWZpeChfMjYpKXtfMjVbMF09Ii4uLyIrXzI1WzBdO31l
bHNle3ZhciBfMjc9ZC5fZ2V0TW9kdWxlUHJlZml4KF8yNik7aWYoXzI3IT1fMjYpe18yNS5zcGxp
Y2UoMCxpLF8yNyk7YnJlYWs7fX19cmV0dXJuIF8yNTt9O2Rvam8uX2dsb2JhbF9vbWl0X21vZHVs
ZV9jaGVjaz1mYWxzZTtkb2pvLmxvYWRJbml0PWZ1bmN0aW9uKF8yOCl7XzI4KCk7fTtkb2pvLl9s
b2FkTW9kdWxlPWRvam8ucmVxdWlyZT1mdW5jdGlvbihfMjksXzJhKXtfMmE9ZC5fZ2xvYmFsX29t
aXRfbW9kdWxlX2NoZWNrfHxfMmE7dmFyIF8yYj1kLl9sb2FkZWRNb2R1bGVzW18yOV07aWYoXzJi
KXtyZXR1cm4gXzJiO312YXIgXzJjPWQuX2dldE1vZHVsZVN5bWJvbHMoXzI5KS5qb2luKCIvIikr
Ii5qcyI7dmFyIF8yZD0hXzJhP18yOTpudWxsO3ZhciBvaz1kLl9sb2FkUGF0aChfMmMsXzJkKTtp
Zighb2smJiFfMmEpe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGxvYWQgJyIrXzI5KyInOyBs
YXN0IHRyaWVkICciK18yYysiJyIpO31pZighXzJhJiYhZC5faXNYRG9tYWluKXtfMmI9ZC5fbG9h
ZGVkTW9kdWxlc1tfMjldO2lmKCFfMmIpe3Rocm93IG5ldyBFcnJvcigic3ltYm9sICciK18yOSsi
JyBpcyBub3QgZGVmaW5lZCBhZnRlciBsb2FkaW5nICciK18yYysiJyIpO319cmV0dXJuIF8yYjt9
O2Rvam8ucHJvdmlkZT1mdW5jdGlvbihfMmUpe18yZT1fMmUrIiI7cmV0dXJuIChkLl9sb2FkZWRN
b2R1bGVzW18yZV09ZC5nZXRPYmplY3QoXzJlLHRydWUpKTt9O2Rvam8ucGxhdGZvcm1SZXF1aXJl
PWZ1bmN0aW9uKF8yZil7dmFyIF8zMD1fMmYuY29tbW9ufHxbXTt2YXIgXzMxPV8zMC5jb25jYXQo
XzJmW2QuX25hbWVdfHxfMmZbImRlZmF1bHQiXXx8W10pO2Zvcih2YXIgeD0wO3g8XzMxLmxlbmd0
aDt4Kyspe3ZhciBfMzI9XzMxW3hdO2lmKF8zMi5jb25zdHJ1Y3Rvcj09QXJyYXkpe2QuX2xvYWRN
b2R1bGUuYXBwbHkoZCxfMzIpO31lbHNle2QuX2xvYWRNb2R1bGUoXzMyKTt9fX07ZG9qby5yZXF1
aXJlSWY9ZnVuY3Rpb24oXzMzLF8zNCl7aWYoXzMzPT09dHJ1ZSl7dmFyIF8zNT1bXTtmb3IodmFy
IGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXtfMzUucHVzaChhcmd1bWVudHNbaV0pO31kLnJl
cXVpcmUuYXBwbHkoZCxfMzUpO319O2Rvam8ucmVxdWlyZUFmdGVySWY9ZC5yZXF1aXJlSWY7ZG9q
by5yZWdpc3Rlck1vZHVsZVBhdGg9ZnVuY3Rpb24oXzM2LF8zNyl7ZC5fbW9kdWxlUHJlZml4ZXNb
XzM2XT17bmFtZTpfMzYsdmFsdWU6XzM3fTt9O2lmKHR5cGVvZiBkb2pvLmNvbmZpZ1sidXNlWERv
bWFpbiJdPT0idW5kZWZpbmVkIil7ZG9qby5jb25maWcudXNlWERvbWFpbj10cnVlO31kb2pvLnJl
Z2lzdGVyTW9kdWxlUGF0aCgiZG9qbyIsImh0dHA6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgv
bGlicy9kb2pvLzEuNi4xL2Rvam8iKTtkb2pvLnJlZ2lzdGVyTW9kdWxlUGF0aCgiZGlqaXQiLCJo
dHRwOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvZG9qby8xLjYuMS9kaWppdCIpO2Rv
am8ucmVnaXN0ZXJNb2R1bGVQYXRoKCJkb2pveCIsImh0dHA6Ly9hamF4Lmdvb2dsZWFwaXMuY29t
L2FqYXgvbGlicy9kb2pvLzEuNi4xL2Rvam94Iik7ZG9qby5yZXF1aXJlTG9jYWxpemF0aW9uPWZ1
bmN0aW9uKF8zOCxfMzksXzNhLF8zYil7ZC5yZXF1aXJlKCJkb2pvLmkxOG4iKTtkLmkxOG4uX3Jl
cXVpcmVMb2NhbGl6YXRpb24uYXBwbHkoZC5ob3N0ZW52LGFyZ3VtZW50cyk7fTt2YXIgb3JlPW5l
dyBSZWdFeHAoIl4oKFteOi8/I10rKTopPygvLyhbXi8/I10qKSk/KFtePyNdKikoXFw/KFteI10q
KSk/KCMoLiopKT8kIiksaXJlPW5ldyBSZWdFeHAoIl4oKChbXlxcWzpdKyk6KT8oW15AXSspQCk/
KFxcWyhbXlxcXV0rKVxcXXwoW15cXFs6XSopKSg6KFswLTldKykpPyQiKTtkb2pvLl9Vcmw9ZnVu
Y3Rpb24oKXt2YXIgbj1udWxsLF8zYz1hcmd1bWVudHMsdXJpPVtfM2NbMF1dO2Zvcih2YXIgaT0x
O2k8XzNjLmxlbmd0aDtpKyspe2lmKCFfM2NbaV0pe2NvbnRpbnVlO312YXIgXzNkPW5ldyBkLl9V
cmwoXzNjW2ldKyIiKSxfM2U9bmV3IGQuX1VybCh1cmlbMF0rIiIpO2lmKF8zZC5wYXRoPT0iIiYm
IV8zZC5zY2hlbWUmJiFfM2QuYXV0aG9yaXR5JiYhXzNkLnF1ZXJ5KXtpZihfM2QuZnJhZ21lbnQh
PW4pe18zZS5mcmFnbWVudD1fM2QuZnJhZ21lbnQ7fV8zZD1fM2U7fWVsc2V7aWYoIV8zZC5zY2hl
bWUpe18zZC5zY2hlbWU9XzNlLnNjaGVtZTtpZighXzNkLmF1dGhvcml0eSl7XzNkLmF1dGhvcml0
eT1fM2UuYXV0aG9yaXR5O2lmKF8zZC5wYXRoLmNoYXJBdCgwKSE9Ii8iKXt2YXIgXzNmPV8zZS5w
YXRoLnN1YnN0cmluZygwLF8zZS5wYXRoLmxhc3RJbmRleE9mKCIvIikrMSkrXzNkLnBhdGg7dmFy
IF80MD1fM2Yuc3BsaXQoIi8iKTtmb3IodmFyIGo9MDtqPF80MC5sZW5ndGg7aisrKXtpZihfNDBb
al09PSIuIil7aWYoaj09XzQwLmxlbmd0aC0xKXtfNDBbal09IiI7fWVsc2V7XzQwLnNwbGljZShq
LDEpO2otLTt9fWVsc2V7aWYoaj4wJiYhKGo9PTEmJl80MFswXT09IiIpJiZfNDBbal09PSIuLiIm
Jl80MFtqLTFdIT0iLi4iKXtpZihqPT0oXzQwLmxlbmd0aC0xKSl7XzQwLnNwbGljZShqLDEpO180
MFtqLTFdPSIiO31lbHNle180MC5zcGxpY2Uoai0xLDIpO2otPTI7fX19fV8zZC5wYXRoPV80MC5q
b2luKCIvIik7fX19fXVyaT1bXTtpZihfM2Quc2NoZW1lKXt1cmkucHVzaChfM2Quc2NoZW1lLCI6
Iik7fWlmKF8zZC5hdXRob3JpdHkpe3VyaS5wdXNoKCIvLyIsXzNkLmF1dGhvcml0eSk7fXVyaS5w
dXNoKF8zZC5wYXRoKTtpZihfM2QucXVlcnkpe3VyaS5wdXNoKCI/IixfM2QucXVlcnkpO31pZihf
M2QuZnJhZ21lbnQpe3VyaS5wdXNoKCIjIixfM2QuZnJhZ21lbnQpO319dGhpcy51cmk9dXJpLmpv
aW4oIiIpO3ZhciByPXRoaXMudXJpLm1hdGNoKG9yZSk7dGhpcy5zY2hlbWU9clsyXXx8KHJbMV0/
IiI6bik7dGhpcy5hdXRob3JpdHk9cls0XXx8KHJbM10/IiI6bik7dGhpcy5wYXRoPXJbNV07dGhp
cy5xdWVyeT1yWzddfHwocls2XT8iIjpuKTt0aGlzLmZyYWdtZW50PXJbOV18fChyWzhdPyIiOm4p
O2lmKHRoaXMuYXV0aG9yaXR5IT1uKXtyPXRoaXMuYXV0aG9yaXR5Lm1hdGNoKGlyZSk7dGhpcy51
c2VyPXJbM118fG47dGhpcy5wYXNzd29yZD1yWzRdfHxuO3RoaXMuaG9zdD1yWzZdfHxyWzddO3Ro
aXMucG9ydD1yWzldfHxuO319O2Rvam8uX1VybC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy51cmk7fTtkb2pvLm1vZHVsZVVybD1mdW5jdGlvbihfNDEsdXJsKXt2YXIg
bG9jPWQuX2dldE1vZHVsZVN5bWJvbHMoXzQxKS5qb2luKCIvIik7aWYoIWxvYyl7cmV0dXJuIG51
bGw7fWlmKGxvYy5sYXN0SW5kZXhPZigiLyIpIT1sb2MubGVuZ3RoLTEpe2xvYys9Ii8iO312YXIg
XzQyPWxvYy5pbmRleE9mKCI6Iik7aWYobG9jLmNoYXJBdCgwKSE9Ii8iJiYoXzQyPT0tMXx8XzQy
PmxvYy5pbmRleE9mKCIvIikpKXtsb2M9ZC5iYXNlVXJsK2xvYzt9cmV0dXJuIG5ldyBkLl9Vcmwo
bG9jLHVybCk7fTt9KSgpO2Rvam8ucHJvdmlkZSgiZG9qby5fYmFzZS5fbG9hZGVyLmxvYWRlcl94
ZCIpO2Rvam8uX3hkUmVzZXQ9ZnVuY3Rpb24oKXtkb2pvLl9pc1hEb21haW49ZG9qby5jb25maWcu
dXNlWERvbWFpbnx8ZmFsc2U7ZG9qby5feGRDbGVhckludGVydmFsKCk7ZG9qby5feGRJbkZsaWdo
dD17fTtkb2pvLl94ZE9yZGVyZWRSZXFzPVtdO2Rvam8uX3hkRGVwTWFwPXt9O2Rvam8uX3hkQ29u
dGVudHM9W107ZG9qby5feGREZWZMaXN0PVtdO307ZG9qby5feGRDbGVhckludGVydmFsPWZ1bmN0
aW9uKCl7aWYoZG9qby5feGRUaW1lcil7Y2xlYXJJbnRlcnZhbChkb2pvLl94ZFRpbWVyKTtkb2pv
Ll94ZFRpbWVyPTA7fX07ZG9qby5feGRSZXNldCgpO2Rvam8uX3hkQ3JlYXRlUmVzb3VyY2U9ZnVu
Y3Rpb24oXzQzLF80NCxfNDUpe3ZhciBfNDY9XzQzLnJlcGxhY2UoLyhcL1wqKFtcc1xTXSo/KVwq
XC98XC9cLyguKikkKS9tZywiIik7dmFyIF80Nz1bXTt2YXIgXzQ4PS9kb2pvLihyZXF1aXJlfHJl
cXVpcmVJZnxwcm92aWRlfHJlcXVpcmVBZnRlcklmfHBsYXRmb3JtUmVxdWlyZXxyZXF1aXJlTG9j
YWxpemF0aW9uKVxzKlwoKFtcd1xXXSo/KVwpL21nO3ZhciBfNDk7d2hpbGUoKF80OT1fNDguZXhl
YyhfNDYpKSE9bnVsbCl7aWYoXzQ5WzFdPT0icmVxdWlyZUxvY2FsaXphdGlvbiIpe2V2YWwoXzQ5
WzBdKTt9ZWxzZXtfNDcucHVzaCgiXCIiK180OVsxXSsiXCIsICIrXzQ5WzJdKTt9fXZhciBfNGE9
W107XzRhLnB1c2goZG9qby5fc2NvcGVOYW1lKyIuX3hkUmVzb3VyY2VMb2FkZWQoZnVuY3Rpb24o
Iitkb2pvLl9zY29wZVByZWZpeEFyZ3MrIil7XG4iKTt2YXIgXzRiPWRvam8uX3hkRXh0cmFjdExv
YWRJbml0cyhfNDMpO2lmKF80Yil7XzQzPV80YlswXTtmb3IodmFyIGk9MTtpPF80Yi5sZW5ndGg7
aSsrKXtfNGEucHVzaChfNGJbaV0rIjtcbiIpO319XzRhLnB1c2goInJldHVybiB7Iik7aWYoXzQ3
Lmxlbmd0aD4wKXtfNGEucHVzaCgiZGVwZW5kczogWyIpO2ZvcihpPTA7aTxfNDcubGVuZ3RoO2kr
Kyl7aWYoaT4wKXtfNGEucHVzaCgiLFxuIik7fV80YS5wdXNoKCJbIitfNDdbaV0rIl0iKTt9XzRh
LnB1c2goIl0sIik7fV80YS5wdXNoKCJcbmRlZmluZVJlc291cmNlOiBmdW5jdGlvbigiK2Rvam8u
X3Njb3BlUHJlZml4QXJncysiKXsiKTtpZighZG9qby5jb25maWdbImRlYnVnQXRBbGxDb3N0cyJd
fHxfNDQ9PSJkb2pvLl9iYXNlLl9sb2FkZXIubG9hZGVyX2RlYnVnIil7XzRhLnB1c2goXzQzKTt9
XzRhLnB1c2goIlxufSwgcmVzb3VyY2VOYW1lOiAnIitfNDQrIicsIHJlc291cmNlUGF0aDogJyIr
XzQ1KyInfTt9KTsiKTtyZXR1cm4gXzRhLmpvaW4oIiIpO307ZG9qby5feGRFeHRyYWN0TG9hZElu
aXRzPWZ1bmN0aW9uKF80Yyl7dmFyIF80ZD0vZG9qby5sb2FkSW5pdFxzKlwoL2c7XzRkLmxhc3RJ
bmRleD0wO3ZhciBfNGU9L1tcKFwpXS9nO180ZS5sYXN0SW5kZXg9MDt2YXIgXzRmPVtdO3ZhciBf
NTA7d2hpbGUoKF81MD1fNGQuZXhlYyhfNGMpKSl7XzRlLmxhc3RJbmRleD1fNGQubGFzdEluZGV4
O3ZhciBfNTE9MTt2YXIgXzUyO3doaWxlKChfNTI9XzRlLmV4ZWMoXzRjKSkpe2lmKF81MlswXT09
IikiKXtfNTEtPTE7fWVsc2V7XzUxKz0xO31pZihfNTE9PTApe2JyZWFrO319aWYoXzUxIT0wKXt0
aHJvdyAidW5tYXRjaGVkIHBhcmVuIGFyb3VuZCBjaGFyYWN0ZXIgIitfNGUubGFzdEluZGV4KyIg
aW46ICIrXzRjO312YXIgXzUzPV80ZC5sYXN0SW5kZXgtXzUwWzBdLmxlbmd0aDtfNGYucHVzaChf
NGMuc3Vic3RyaW5nKF81MyxfNGUubGFzdEluZGV4KSk7dmFyIF81ND1fNGUubGFzdEluZGV4LV81
MztfNGM9XzRjLnN1YnN0cmluZygwLF81MykrXzRjLnN1YnN0cmluZyhfNGUubGFzdEluZGV4LF80
Yy5sZW5ndGgpO180ZC5sYXN0SW5kZXg9XzRlLmxhc3RJbmRleC1fNTQ7XzRkLmxhc3RJbmRleD1f
NGUubGFzdEluZGV4O31pZihfNGYubGVuZ3RoPjApe180Zi51bnNoaWZ0KF80Yyk7fXJldHVybiAo
XzRmLmxlbmd0aD9fNGY6bnVsbCk7fTtkb2pvLl94ZElzWERvbWFpblBhdGg9ZnVuY3Rpb24oXzU1
KXt2YXIgXzU2PV81NS5pbmRleE9mKCI6Iik7dmFyIF81Nz1fNTUuaW5kZXhPZigiLyIpO2lmKF81
Nj4wJiZfNTY8XzU3fHxfNTUuaW5kZXhPZigiLy8iKT09PTApe3JldHVybiB0cnVlO31lbHNle3Zh
ciB1cmw9ZG9qby5iYXNlVXJsO181Nj11cmwuaW5kZXhPZigiOiIpO181Nz11cmwuaW5kZXhPZigi
LyIpO2lmKHVybC5pbmRleE9mKCIvLyIpPT09MHx8KF81Nj4wJiZfNTY8XzU3JiYoIWxvY2F0aW9u
Lmhvc3R8fHVybC5pbmRleE9mKCJodHRwOi8vIitsb2NhdGlvbi5ob3N0KSE9MCkpKXtyZXR1cm4g
dHJ1ZTt9fXJldHVybiBmYWxzZTt9O2Rvam8uX2xvYWRQYXRoPWZ1bmN0aW9uKF81OCxfNTksY2Ip
e3ZhciBfNWE9ZG9qby5feGRJc1hEb21haW5QYXRoKF81OCk7ZG9qby5faXNYRG9tYWlufD1fNWE7
dmFyIHVyaT0oKF81OC5jaGFyQXQoMCk9PSIvInx8XzU4Lm1hdGNoKC9eXHcrOi8pKT8iIjpkb2pv
LmJhc2VVcmwpK181ODt0cnl7cmV0dXJuICgoIV81OXx8ZG9qby5faXNYRG9tYWluKT9kb2pvLl9s
b2FkVXJpKHVyaSxjYixfNWEsXzU5KTpkb2pvLl9sb2FkVXJpQW5kQ2hlY2sodXJpLF81OSxjYikp
O31jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpO3JldHVybiBmYWxzZTt9fTtkb2pvLl94ZENoYXJT
ZXQ9InV0Zi04Ijtkb2pvLl9sb2FkVXJpPWZ1bmN0aW9uKHVyaSxjYixfNWIsXzVjKXtpZihkb2pv
Ll9sb2FkZWRVcmxzW3VyaV0pe3JldHVybiAxO31pZihkb2pvLl9pc1hEb21haW4mJl81YyYmXzVj
IT0iZG9qby5pMThuIil7ZG9qby5feGRPcmRlcmVkUmVxcy5wdXNoKF81Yyk7aWYoXzVifHx1cmku
aW5kZXhPZigiL25scy8iKT09LTEpe2Rvam8uX3hkSW5GbGlnaHRbXzVjXT10cnVlO2Rvam8uX2lu
RmxpZ2h0Q291bnQrKzt9aWYoIWRvam8uX3hkVGltZXIpe2lmKGRvam8uaXNBSVIpe2Rvam8uX3hk
VGltZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtkb2pvLl94ZFdhdGNoSW5GbGlnaHQoKTt9LDEw
MCk7fWVsc2V7ZG9qby5feGRUaW1lcj1zZXRJbnRlcnZhbChkb2pvLl9zY29wZU5hbWUrIi5feGRX
YXRjaEluRmxpZ2h0KCk7IiwxMDApO319ZG9qby5feGRTdGFydFRpbWU9KG5ldyBEYXRlKCkpLmdl
dFRpbWUoKTt9aWYoXzViKXt2YXIgXzVkPXVyaS5sYXN0SW5kZXhPZigiLiIpO2lmKF81ZDw9MCl7
XzVkPXVyaS5sZW5ndGgtMTt9dmFyIF81ZT11cmkuc3Vic3RyaW5nKDAsXzVkKSsiLnhkIjtpZihf
NWQhPXVyaS5sZW5ndGgtMSl7XzVlKz11cmkuc3Vic3RyaW5nKF81ZCx1cmkubGVuZ3RoKTt9aWYo
ZG9qby5pc0FJUil7XzVlPV81ZS5yZXBsYWNlKCJhcHA6LyIsIi8iKTt9dmFyIF81Zj1kb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtfNWYudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtpZihk
b2pvLl94ZENoYXJTZXQpe181Zi5jaGFyc2V0PWRvam8uX3hkQ2hhclNldDt9XzVmLnNyYz1fNWU7
aWYoIWRvam8uaGVhZEVsZW1lbnQpe2Rvam8uX2hlYWRFbGVtZW50PWRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJoZWFkIilbMF07aWYoIWRvam8uX2hlYWRFbGVtZW50KXtkb2pvLl9oZWFk
RWxlbWVudD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdO319ZG9qby5f
aGVhZEVsZW1lbnQuYXBwZW5kQ2hpbGQoXzVmKTt9ZWxzZXt2YXIgXzYwPWRvam8uX2dldFRleHQo
dXJpLG51bGwsdHJ1ZSk7aWYoXzYwPT1udWxsKXtyZXR1cm4gMDt9aWYoZG9qby5faXNYRG9tYWlu
JiZ1cmkuaW5kZXhPZigiL25scy8iKT09LTEmJl81YyE9ImRvam8uaTE4biIpe3ZhciByZXM9ZG9q
by5feGRDcmVhdGVSZXNvdXJjZShfNjAsXzVjLHVyaSk7ZG9qby5ldmFsKHJlcyk7fWVsc2V7aWYo
Y2Ipe182MD0iKCIrXzYwKyIpIjt9ZWxzZXtfNjA9ZG9qby5fc2NvcGVQcmVmaXgrXzYwK2Rvam8u
X3Njb3BlU3VmZml4O312YXIgXzYxPWRvam9bImV2YWwiXShfNjArIlxyXG4vL0Agc291cmNlVVJM
PSIrdXJpKTtpZihjYil7Y2IoXzYxKTt9fX1kb2pvLl9sb2FkZWRVcmxzW3VyaV09dHJ1ZTtkb2pv
Ll9sb2FkZWRVcmxzLnB1c2godXJpKTtyZXR1cm4gdHJ1ZTt9O2Rvam8uX3hkUmVzb3VyY2VMb2Fk
ZWQ9ZnVuY3Rpb24ocmVzKXtyZXM9cmVzLmFwcGx5KGRvam8uZ2xvYmFsLGRvam8uX3Njb3BlQXJn
cyk7dmFyIF82Mj1yZXMuZGVwZW5kczt2YXIgXzYzPW51bGw7dmFyIF82ND1udWxsO3ZhciBfNjU9
W107aWYoXzYyJiZfNjIubGVuZ3RoPjApe3ZhciBkZXA9bnVsbDt2YXIgXzY2PTA7dmFyIF82Nz1m
YWxzZTtmb3IodmFyIGk9MDtpPF82Mi5sZW5ndGg7aSsrKXtkZXA9XzYyW2ldO2lmKGRlcFswXT09
InByb3ZpZGUiKXtfNjUucHVzaChkZXBbMV0pO31lbHNle2lmKCFfNjMpe182Mz1bXTt9aWYoIV82
NCl7XzY0PVtdO312YXIgXzY4PWRvam8uX3hkVW5wYWNrRGVwZW5kZW5jeShkZXApO2lmKF82OC5y
ZXF1aXJlcyl7XzYzPV82My5jb25jYXQoXzY4LnJlcXVpcmVzKTt9aWYoXzY4LnJlcXVpcmVzQWZ0
ZXIpe182ND1fNjQuY29uY2F0KF82OC5yZXF1aXJlc0FmdGVyKTt9fXZhciBfNjk9ZGVwWzBdO3Zh
ciBfNmE9XzY5LnNwbGl0KCIuIik7aWYoXzZhLmxlbmd0aD09Mil7ZG9qb1tfNmFbMF1dW182YVsx
XV0uYXBwbHkoZG9qb1tfNmFbMF1dLGRlcC5zbGljZSgxKSk7fWVsc2V7ZG9qb1tfNjldLmFwcGx5
KGRvam8sZGVwLnNsaWNlKDEpKTt9fWlmKF82NS5sZW5ndGg9PTEmJl82NVswXT09ImRvam8uX2Jh
c2UuX2xvYWRlci5sb2FkZXJfZGVidWciKXtyZXMuZGVmaW5lUmVzb3VyY2UoZG9qbyk7fWVsc2V7
dmFyIF82Yj1kb2pvLl94ZENvbnRlbnRzLnB1c2goe2NvbnRlbnQ6cmVzLmRlZmluZVJlc291cmNl
LHJlc291cmNlTmFtZTpyZXNbInJlc291cmNlTmFtZSJdLHJlc291cmNlUGF0aDpyZXNbInJlc291
cmNlUGF0aCJdLGlzRGVmaW5lZDpmYWxzZX0pLTE7Zm9yKGk9MDtpPF82NS5sZW5ndGg7aSsrKXtk
b2pvLl94ZERlcE1hcFtfNjVbaV1dPXtyZXF1aXJlczpfNjMscmVxdWlyZXNBZnRlcjpfNjQsY29u
dGVudEluZGV4Ol82Yn07fX1mb3IoaT0wO2k8XzY1Lmxlbmd0aDtpKyspe2Rvam8uX3hkSW5GbGln
aHRbXzY1W2ldXT1mYWxzZTt9fX07ZG9qby5feGRMb2FkRmxhdHRlbmVkQnVuZGxlPWZ1bmN0aW9u
KF82YyxfNmQsXzZlLF82Zil7XzZlPV82ZXx8InJvb3QiO3ZhciBfNzA9ZG9qby5pMThuLm5vcm1h
bGl6ZUxvY2FsZShfNmUpLnJlcGxhY2UoIi0iLCJfIik7dmFyIF83MT1bXzZjLCJubHMiLF82ZF0u
am9pbigiLiIpO3ZhciBfNzI9ZG9qb1sicHJvdmlkZSJdKF83MSk7XzcyW183MF09XzZmO3ZhciBf
NzM9W182YyxfNzAsXzZkXS5qb2luKCIuIik7dmFyIF83ND1kb2pvLl94ZEJ1bmRsZU1hcFtfNzNd
O2lmKF83NCl7Zm9yKHZhciBfNzUgaW4gXzc0KXtfNzJbXzc1XT1fNmY7fX19O2Rvam8uX3hkSW5p
dEV4dHJhTG9jYWxlcz1mdW5jdGlvbigpe3ZhciBfNzY9ZG9qby5jb25maWcuZXh0cmFMb2NhbGU7
aWYoXzc2KXtpZighXzc2IGluc3RhbmNlb2YgQXJyYXkpe183Nj1bXzc2XTt9ZG9qby5feGRSZXFM
b2M9ZG9qby54ZFJlcXVpcmVMb2NhbGl6YXRpb247ZG9qby54ZFJlcXVpcmVMb2NhbGl6YXRpb249
ZnVuY3Rpb24obSxiLF83NyxfNzgpe2Rvam8uX3hkUmVxTG9jKG0sYixfNzcsXzc4KTtpZihfNzcp
e3JldHVybjt9Zm9yKHZhciBpPTA7aTxfNzYubGVuZ3RoO2krKyl7ZG9qby5feGRSZXFMb2MobSxi
LF83NltpXSxfNzgpO319O319O2Rvam8uX3hkQnVuZGxlTWFwPXt9O2Rvam8ueGRSZXF1aXJlTG9j
YWxpemF0aW9uPWZ1bmN0aW9uKF83OSxfN2EsXzdiLF83Yyl7aWYoZG9qby5feGRJbml0RXh0cmFM
b2NhbGVzKXtkb2pvLl94ZEluaXRFeHRyYUxvY2FsZXMoKTtkb2pvLl94ZEluaXRFeHRyYUxvY2Fs
ZXM9bnVsbDtkb2pvLnhkUmVxdWlyZUxvY2FsaXphdGlvbi5hcHBseShkb2pvLGFyZ3VtZW50cyk7
cmV0dXJuO312YXIgXzdkPV83Yy5zcGxpdCgiLCIpO3ZhciBfN2U9ZG9qby5pMThuLm5vcm1hbGl6
ZUxvY2FsZShfN2IpO3ZhciBfN2Y9IiI7Zm9yKHZhciBpPTA7aTxfN2QubGVuZ3RoO2krKyl7aWYo
XzdlLmluZGV4T2YoXzdkW2ldKT09MCl7aWYoXzdkW2ldLmxlbmd0aD5fN2YubGVuZ3RoKXtfN2Y9
XzdkW2ldO319fXZhciBfODA9XzdmLnJlcGxhY2UoIi0iLCJfIik7dmFyIF84MT1kb2pvLmdldE9i
amVjdChbXzc5LCJubHMiLF83YV0uam9pbigiLiIpKTtpZighXzgxfHwhXzgxW184MF0pe3ZhciBf
ODI9W183OSwoXzgwfHwicm9vdCIpLF83YV0uam9pbigiLiIpO3ZhciBfODM9ZG9qby5feGRCdW5k
bGVNYXBbXzgyXTtpZighXzgzKXtfODM9ZG9qby5feGRCdW5kbGVNYXBbXzgyXT17fTt9XzgzW183
ZS5yZXBsYWNlKCItIiwiXyIpXT10cnVlO2Rvam8ucmVxdWlyZShfNzkrIi5ubHMiKyhfN2Y/Ii4i
K183ZjoiIikrIi4iK183YSk7fX07ZG9qby5feGRSZWFsUmVxdWlyZUxvY2FsaXphdGlvbj1kb2pv
LnJlcXVpcmVMb2NhbGl6YXRpb247ZG9qby5yZXF1aXJlTG9jYWxpemF0aW9uPWZ1bmN0aW9uKF84
NCxfODUsXzg2LF84Nyl7dmFyIF84OD1kb2pvLm1vZHVsZVVybChfODQpLnRvU3RyaW5nKCk7aWYo
ZG9qby5feGRJc1hEb21haW5QYXRoKF84OCkpe3JldHVybiBkb2pvLnhkUmVxdWlyZUxvY2FsaXph
dGlvbi5hcHBseShkb2pvLGFyZ3VtZW50cyk7fWVsc2V7cmV0dXJuIGRvam8uX3hkUmVhbFJlcXVp
cmVMb2NhbGl6YXRpb24uYXBwbHkoZG9qbyxhcmd1bWVudHMpO319O2Rvam8uX3hkVW5wYWNrRGVw
ZW5kZW5jeT1mdW5jdGlvbihkZXApe3ZhciBfODk9bnVsbDt2YXIgXzhhPW51bGw7c3dpdGNoKGRl
cFswXSl7Y2FzZSAicmVxdWlyZUlmIjpjYXNlICJyZXF1aXJlQWZ0ZXJJZiI6aWYoZGVwWzFdPT09
dHJ1ZSl7Xzg5PVt7bmFtZTpkZXBbMl0sY29udGVudDpudWxsfV07fWJyZWFrO2Nhc2UgInBsYXRm
b3JtUmVxdWlyZSI6dmFyIF84Yj1kZXBbMV07dmFyIF84Yz1fOGJbImNvbW1vbiJdfHxbXTtfODk9
KF84Yltkb2pvLmhvc3RlbnYubmFtZV9dKT9fOGMuY29uY2F0KF84Yltkb2pvLmhvc3RlbnYubmFt
ZV9dfHxbXSk6XzhjLmNvbmNhdChfOGJbImRlZmF1bHQiXXx8W10pO2lmKF84OSl7Zm9yKHZhciBp
PTA7aTxfODkubGVuZ3RoO2krKyl7aWYoXzg5W2ldIGluc3RhbmNlb2YgQXJyYXkpe184OVtpXT17
bmFtZTpfODlbaV1bMF0sY29udGVudDpudWxsfTt9ZWxzZXtfODlbaV09e25hbWU6Xzg5W2ldLGNv
bnRlbnQ6bnVsbH07fX19YnJlYWs7Y2FzZSAicmVxdWlyZSI6Xzg5PVt7bmFtZTpkZXBbMV0sY29u
dGVudDpudWxsfV07YnJlYWs7Y2FzZSAiaTE4bi5fcHJlbG9hZExvY2FsaXphdGlvbnMiOmRvam8u
aTE4bi5fcHJlbG9hZExvY2FsaXphdGlvbnMuYXBwbHkoZG9qby5pMThuLl9wcmVsb2FkTG9jYWxp
emF0aW9ucyxkZXAuc2xpY2UoMSkpO2JyZWFrO31pZihkZXBbMF09PSJyZXF1aXJlQWZ0ZXJJZiJ8
fGRlcFswXT09InJlcXVpcmVJZiIpe184YT1fODk7Xzg5PW51bGw7fXJldHVybiB7cmVxdWlyZXM6
Xzg5LHJlcXVpcmVzQWZ0ZXI6XzhhfTt9O2Rvam8uX3hkV2Fsa1JlcXM9ZnVuY3Rpb24oKXt2YXIg
XzhkPW51bGw7dmFyIHJlcTtmb3IodmFyIGk9MDtpPGRvam8uX3hkT3JkZXJlZFJlcXMubGVuZ3Ro
O2krKyl7cmVxPWRvam8uX3hkT3JkZXJlZFJlcXNbaV07aWYoZG9qby5feGREZXBNYXBbcmVxXSl7
XzhkPVtyZXFdO184ZFtyZXFdPXRydWU7ZG9qby5feGRFdmFsUmVxcyhfOGQpO319fTtkb2pvLl94
ZEV2YWxSZXFzPWZ1bmN0aW9uKF84ZSl7d2hpbGUoXzhlLmxlbmd0aD4wKXt2YXIgcmVxPV84ZVtf
OGUubGVuZ3RoLTFdO3ZhciByZXM9ZG9qby5feGREZXBNYXBbcmVxXTt2YXIgaSxfOGYsXzkwO2lm
KHJlcyl7XzhmPXJlcy5yZXF1aXJlcztpZihfOGYmJl84Zi5sZW5ndGg+MCl7Zm9yKGk9MDtpPF84
Zi5sZW5ndGg7aSsrKXtfOTA9XzhmW2ldLm5hbWU7aWYoXzkwJiYhXzhlW185MF0pe184ZS5wdXNo
KF85MCk7XzhlW185MF09dHJ1ZTtkb2pvLl94ZEV2YWxSZXFzKF84ZSk7fX19dmFyIF85MT1kb2pv
Ll94ZENvbnRlbnRzW3Jlcy5jb250ZW50SW5kZXhdO2lmKCFfOTEuaXNEZWZpbmVkKXt2YXIgXzky
PV85MS5jb250ZW50O185MlsicmVzb3VyY2VOYW1lIl09XzkxWyJyZXNvdXJjZU5hbWUiXTtfOTJb
InJlc291cmNlUGF0aCJdPV85MVsicmVzb3VyY2VQYXRoIl07ZG9qby5feGREZWZMaXN0LnB1c2go
XzkyKTtfOTEuaXNEZWZpbmVkPXRydWU7fWRvam8uX3hkRGVwTWFwW3JlcV09bnVsbDtfOGY9cmVz
LnJlcXVpcmVzQWZ0ZXI7aWYoXzhmJiZfOGYubGVuZ3RoPjApe2ZvcihpPTA7aTxfOGYubGVuZ3Ro
O2krKyl7XzkwPV84ZltpXS5uYW1lO2lmKF85MCYmIV84ZVtfOTBdKXtfOGUucHVzaChfOTApO184
ZVtfOTBdPXRydWU7ZG9qby5feGRFdmFsUmVxcyhfOGUpO319fX1fOGUucG9wKCk7fX07ZG9qby5f
eGRXYXRjaEluRmxpZ2h0PWZ1bmN0aW9uKCl7dmFyIF85Mz0iIjt2YXIgXzk0PShkb2pvLmNvbmZp
Zy54ZFdhaXRTZWNvbmRzfHwxNSkqMTAwMDt2YXIgXzk1PShkb2pvLl94ZFN0YXJ0VGltZStfOTQp
PChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7Zm9yKHZhciBfOTYgaW4gZG9qby5feGRJbkZsaWdodCl7
aWYoZG9qby5feGRJbkZsaWdodFtfOTZdPT09dHJ1ZSl7aWYoXzk1KXtfOTMrPV85NisiICI7fWVs
c2V7cmV0dXJuO319fWRvam8uX3hkQ2xlYXJJbnRlcnZhbCgpO2lmKF85NSl7dGhyb3cgIkNvdWxk
IG5vdCBsb2FkIGNyb3NzLWRvbWFpbiByZXNvdXJjZXM6ICIrXzkzO31kb2pvLl94ZFdhbGtSZXFz
KCk7dmFyIF85Nz1kb2pvLl94ZERlZkxpc3QubGVuZ3RoO2Zvcih2YXIgaT0wO2k8Xzk3O2krKyl7
dmFyIF85OD1kb2pvLl94ZERlZkxpc3RbaV07aWYoZG9qby5jb25maWdbImRlYnVnQXRBbGxDb3N0
cyJdJiZfOThbInJlc291cmNlTmFtZSJdKXtpZighZG9qb1siX3hkRGVidWdRdWV1ZSJdKXtkb2pv
Ll94ZERlYnVnUXVldWU9W107fWRvam8uX3hkRGVidWdRdWV1ZS5wdXNoKHtyZXNvdXJjZU5hbWU6
Xzk4LnJlc291cmNlTmFtZSxyZXNvdXJjZVBhdGg6Xzk4LnJlc291cmNlUGF0aH0pO31lbHNle185
OC5hcHBseShkb2pvLmdsb2JhbCxkb2pvLl9zY29wZUFyZ3MpO319Zm9yKGk9MDtpPGRvam8uX3hk
Q29udGVudHMubGVuZ3RoO2krKyl7dmFyIF85OT1kb2pvLl94ZENvbnRlbnRzW2ldO2lmKF85OS5j
b250ZW50JiYhXzk5LmlzRGVmaW5lZCl7Xzk5LmNvbnRlbnQuYXBwbHkoZG9qby5nbG9iYWwsZG9q
by5fc2NvcGVBcmdzKTt9fWRvam8uX3hkUmVzZXQoKTtpZihkb2pvWyJfeGREZWJ1Z1F1ZXVlIl0m
JmRvam8uX3hkRGVidWdRdWV1ZS5sZW5ndGg+MCl7ZG9qby5feGREZWJ1Z0ZpbGVMb2FkZWQoKTt9
ZWxzZXtkb2pvLl94ZE5vdGlmeUxvYWRlZCgpO319O2Rvam8uX3hkTm90aWZ5TG9hZGVkPWZ1bmN0
aW9uKCl7Zm9yKHZhciBfOWEgaW4gZG9qby5feGRJbkZsaWdodCl7aWYodHlwZW9mIGRvam8uX3hk
SW5GbGlnaHRbXzlhXT09ImJvb2xlYW4iKXtyZXR1cm47fX1kb2pvLl9pbkZsaWdodENvdW50PTA7
aWYoZG9qby5faW5pdEZpcmVkJiYhZG9qby5fbG9hZE5vdGlmeWluZyl7ZG9qby5fY2FsbExvYWRl
ZCgpO319O2lmKHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiKXtkb2pvLmlzQnJvd3Nlcj10cnVl
O2Rvam8uX25hbWU9ImJyb3dzZXIiOyhmdW5jdGlvbigpe3ZhciBkPWRvam87aWYoZG9jdW1lbnQm
JmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKXt2YXIgXzliPWRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJzY3JpcHQiKTt2YXIgXzljPS9kb2pvKFwueGQpP1wuanMoXFd8JCkvaTtm
b3IodmFyIGk9MDtpPF85Yi5sZW5ndGg7aSsrKXt2YXIgc3JjPV85YltpXS5nZXRBdHRyaWJ1dGUo
InNyYyIpO2lmKCFzcmMpe2NvbnRpbnVlO312YXIgbT1zcmMubWF0Y2goXzljKTtpZihtKXtpZigh
ZC5jb25maWcuYmFzZVVybCl7ZC5jb25maWcuYmFzZVVybD1zcmMuc3Vic3RyaW5nKDAsbS5pbmRl
eCk7fXZhciBjZmc9KF85YltpXS5nZXRBdHRyaWJ1dGUoImRqQ29uZmlnIil8fF85YltpXS5nZXRB
dHRyaWJ1dGUoImRhdGEtZG9qby1jb25maWciKSk7aWYoY2ZnKXt2YXIgXzlkPWV2YWwoIih7ICIr
Y2ZnKyIgfSkiKTtmb3IodmFyIHggaW4gXzlkKXtkb2pvLmNvbmZpZ1t4XT1fOWRbeF07fX1icmVh
azt9fX1kLmJhc2VVcmw9ZC5jb25maWcuYmFzZVVybDt2YXIgbj1uYXZpZ2F0b3I7dmFyIGR1YT1u
LnVzZXJBZ2VudCxkYXY9bi5hcHBWZXJzaW9uLHR2PXBhcnNlRmxvYXQoZGF2KTtpZihkdWEuaW5k
ZXhPZigiT3BlcmEiKT49MCl7ZC5pc09wZXJhPXR2O31pZihkdWEuaW5kZXhPZigiQWRvYmVBSVIi
KT49MCl7ZC5pc0FJUj0xO31kLmlzS2h0bWw9KGRhdi5pbmRleE9mKCJLb25xdWVyb3IiKT49MCk/
dHY6MDtkLmlzV2ViS2l0PXBhcnNlRmxvYXQoZHVhLnNwbGl0KCJXZWJLaXQvIilbMV0pfHx1bmRl
ZmluZWQ7ZC5pc0Nocm9tZT1wYXJzZUZsb2F0KGR1YS5zcGxpdCgiQ2hyb21lLyIpWzFdKXx8dW5k
ZWZpbmVkO2QuaXNNYWM9ZGF2LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wO3ZhciBfOWU9TWF0aC5t
YXgoZGF2LmluZGV4T2YoIldlYktpdCIpLGRhdi5pbmRleE9mKCJTYWZhcmkiKSwwKTtpZihfOWUm
JiFkb2pvLmlzQ2hyb21lKXtkLmlzU2FmYXJpPXBhcnNlRmxvYXQoZGF2LnNwbGl0KCJWZXJzaW9u
LyIpWzFdKTtpZighZC5pc1NhZmFyaXx8cGFyc2VGbG9hdChkYXYuc3Vic3RyKF85ZSs3KSk8PTQx
OS4zKXtkLmlzU2FmYXJpPTI7fX1pZihkdWEuaW5kZXhPZigiR2Vja28iKT49MCYmIWQuaXNLaHRt
bCYmIWQuaXNXZWJLaXQpe2QuaXNNb3ppbGxhPWQuaXNNb3o9dHY7fWlmKGQuaXNNb3ope2QuaXNG
Rj1wYXJzZUZsb2F0KGR1YS5zcGxpdCgiRmlyZWZveC8iKVsxXXx8ZHVhLnNwbGl0KCJNaW5lZmll
bGQvIilbMV0pfHx1bmRlZmluZWQ7fWlmKGRvY3VtZW50LmFsbCYmIWQuaXNPcGVyYSl7ZC5pc0lF
PXBhcnNlRmxvYXQoZGF2LnNwbGl0KCJNU0lFICIpWzFdKXx8dW5kZWZpbmVkO3ZhciBfOWY9ZG9j
dW1lbnQuZG9jdW1lbnRNb2RlO2lmKF85ZiYmXzlmIT01JiZNYXRoLmZsb29yKGQuaXNJRSkhPV85
Zil7ZC5pc0lFPV85Zjt9fWlmKGRvam8uaXNJRSYmd2luZG93LmxvY2F0aW9uLnByb3RvY29sPT09
ImZpbGU6Iil7ZG9qby5jb25maWcuaWVGb3JjZUFjdGl2ZVhYaHI9dHJ1ZTt9ZC5pc1F1aXJrcz1k
b2N1bWVudC5jb21wYXRNb2RlPT0iQmFja0NvbXBhdCI7ZC5sb2NhbGU9ZG9qby5jb25maWcubG9j
YWxlfHwoZC5pc0lFP24udXNlckxhbmd1YWdlOm4ubGFuZ3VhZ2UpLnRvTG93ZXJDYXNlKCk7ZC5f
WE1MSFRUUF9QUk9HSURTPVsiTXN4bWwyLlhNTEhUVFAiLCJNaWNyb3NvZnQuWE1MSFRUUCIsIk1z
eG1sMi5YTUxIVFRQLjQuMCJdO2QuX3hock9iaj1mdW5jdGlvbigpe3ZhciBfYTAsX2ExO2lmKCFk
b2pvLmlzSUV8fCFkb2pvLmNvbmZpZy5pZUZvcmNlQWN0aXZlWFhocil7dHJ5e19hMD1uZXcgWE1M
SHR0cFJlcXVlc3QoKTt9Y2F0Y2goZSl7fX1pZighX2EwKXtmb3IodmFyIGk9MDtpPDM7KytpKXt2
YXIgX2EyPWQuX1hNTEhUVFBfUFJPR0lEU1tpXTt0cnl7X2EwPW5ldyBBY3RpdmVYT2JqZWN0KF9h
Mik7fWNhdGNoKGUpe19hMT1lO31pZihfYTApe2QuX1hNTEhUVFBfUFJPR0lEUz1bX2EyXTticmVh
azt9fX1pZighX2EwKXt0aHJvdyBuZXcgRXJyb3IoIlhNTEhUVFAgbm90IGF2YWlsYWJsZTogIitf
YTEpO31yZXR1cm4gX2EwO307ZC5faXNEb2N1bWVudE9rPWZ1bmN0aW9uKF9hMyl7dmFyIF9hND1f
YTMuc3RhdHVzfHwwLGxwPWxvY2F0aW9uLnByb3RvY29sO3JldHVybiAoX2E0Pj0yMDAmJl9hNDwz
MDApfHxfYTQ9PTMwNHx8X2E0PT0xMjIzfHwoIV9hNCYmKGxwPT0iZmlsZToifHxscD09ImNocm9t
ZToifHxscD09ImNocm9tZS1leHRlbnNpb246Inx8bHA9PSJhcHA6IikpO307dmFyIF9hNT13aW5k
b3cubG9jYXRpb24rIiI7dmFyIF9hNj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYmFz
ZSIpO3ZhciBfYTc9KF9hNiYmX2E2Lmxlbmd0aD4wKTtkLl9nZXRUZXh0PWZ1bmN0aW9uKHVyaSxf
YTgpe3ZhciBfYTk9ZC5feGhyT2JqKCk7aWYoIV9hNyYmZG9qby5fVXJsKXt1cmk9KG5ldyBkb2pv
Ll9VcmwoX2E1LHVyaSkpLnRvU3RyaW5nKCk7fWlmKGQuY29uZmlnLmNhY2hlQnVzdCl7dXJpKz0i
Ijt1cmkrPSh1cmkuaW5kZXhPZigiPyIpPT0tMT8iPyI6IiYiKStTdHJpbmcoZC5jb25maWcuY2Fj
aGVCdXN0KS5yZXBsYWNlKC9cVysvZywiIik7fV9hOS5vcGVuKCJHRVQiLHVyaSxmYWxzZSk7dHJ5
e19hOS5zZW5kKG51bGwpO2lmKCFkLl9pc0RvY3VtZW50T2soX2E5KSl7dmFyIGVycj1FcnJvcigi
VW5hYmxlIHRvIGxvYWQgIit1cmkrIiBzdGF0dXM6IitfYTkuc3RhdHVzKTtlcnIuc3RhdHVzPV9h
OS5zdGF0dXM7ZXJyLnJlc3BvbnNlVGV4dD1fYTkucmVzcG9uc2VUZXh0O3Rocm93IGVycjt9fWNh
dGNoKGUpe2lmKF9hOCl7cmV0dXJuIG51bGw7fXRocm93IGU7fXJldHVybiBfYTkucmVzcG9uc2VU
ZXh0O307dmFyIF9hYT13aW5kb3c7dmFyIF9hYj1mdW5jdGlvbihfYWMsZnApe3ZhciBfYWQ9X2Fh
LmF0dGFjaEV2ZW50fHxfYWEuYWRkRXZlbnRMaXN0ZW5lcjtfYWM9X2FhLmF0dGFjaEV2ZW50P19h
YzpfYWMuc3Vic3RyaW5nKDIpO19hZChfYWMsZnVuY3Rpb24oKXtmcC5hcHBseShfYWEsYXJndW1l
bnRzKTt9LGZhbHNlKTt9O2QuX3dpbmRvd1VubG9hZGVycz1bXTtkLndpbmRvd1VubG9hZGVkPWZ1
bmN0aW9uKCl7dmFyIG1sbD1kLl93aW5kb3dVbmxvYWRlcnM7d2hpbGUobWxsLmxlbmd0aCl7KG1s
bC5wb3AoKSkoKTt9ZD1udWxsO307dmFyIF9hZT0wO2QuYWRkT25XaW5kb3dVbmxvYWQ9ZnVuY3Rp
b24ob2JqLF9hZil7ZC5fb250byhkLl93aW5kb3dVbmxvYWRlcnMsb2JqLF9hZik7aWYoIV9hZSl7
X2FlPTE7X2FiKCJvbnVubG9hZCIsZC53aW5kb3dVbmxvYWRlZCk7fX07dmFyIF9iMD0wO2QuYWRk
T25VbmxvYWQ9ZnVuY3Rpb24ob2JqLF9iMSl7ZC5fb250byhkLl91bmxvYWRlcnMsb2JqLF9iMSk7
aWYoIV9iMCl7X2IwPTE7X2FiKCJvbmJlZm9yZXVubG9hZCIsZG9qby51bmxvYWRlZCk7fX07fSko
KTtkb2pvLl9pbml0RmlyZWQ9ZmFsc2U7ZG9qby5fbG9hZEluaXQ9ZnVuY3Rpb24oZSl7aWYoZG9q
by5fc2Nyb2xsSW50ZXJ2YWxJZCl7Y2xlYXJJbnRlcnZhbChkb2pvLl9zY3JvbGxJbnRlcnZhbElk
KTtkb2pvLl9zY3JvbGxJbnRlcnZhbElkPTA7fWlmKCFkb2pvLl9pbml0RmlyZWQpe2Rvam8uX2lu
aXRGaXJlZD10cnVlO2lmKCFkb2pvLmNvbmZpZy5hZnRlck9uTG9hZCYmd2luZG93LmRldGFjaEV2
ZW50KXt3aW5kb3cuZGV0YWNoRXZlbnQoIm9ubG9hZCIsZG9qby5fbG9hZEluaXQpO31pZihkb2pv
Ll9pbkZsaWdodENvdW50PT0wKXtkb2pvLl9tb2R1bGVzTG9hZGVkKCk7fX19O2lmKCFkb2pvLmNv
bmZpZy5hZnRlck9uTG9hZCl7aWYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcil7ZG9jdW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsZG9qby5fbG9hZEluaXQsZmFsc2Up
O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixkb2pvLl9sb2FkSW5pdCxmYWxzZSk7fWVs
c2V7aWYod2luZG93LmF0dGFjaEV2ZW50KXt3aW5kb3cuYXR0YWNoRXZlbnQoIm9ubG9hZCIsZG9q
by5fbG9hZEluaXQpO2lmKCFkb2pvLmNvbmZpZy5za2lwSWVEb21Mb2FkZWQmJnNlbGY9PT1zZWxm
LnRvcCl7ZG9qby5fc2Nyb2xsSW50ZXJ2YWxJZD1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3RyeXtp
Zihkb2N1bWVudC5ib2R5KXtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQi
KTtkb2pvLl9sb2FkSW5pdCgpO319Y2F0Y2goZSl7fX0sMzApO319fX1pZihkb2pvLmlzSUUpe3Ry
eXsoZnVuY3Rpb24oKXtkb2N1bWVudC5uYW1lc3BhY2VzLmFkZCgidiIsInVybjpzY2hlbWFzLW1p
Y3Jvc29mdC1jb206dm1sIik7dmFyIF9iMj1bIioiLCJncm91cCIsInJvdW5kcmVjdCIsIm92YWwi
LCJzaGFwZSIsInJlY3QiLCJpbWFnZWRhdGEiLCJwYXRoIiwidGV4dHBhdGgiLCJ0ZXh0Il0saT0w
LGw9MSxzPWRvY3VtZW50LmNyZWF0ZVN0eWxlU2hlZXQoKTtpZihkb2pvLmlzSUU+PTgpe2k9MTts
PV9iMi5sZW5ndGg7fWZvcig7aTxsOysraSl7cy5hZGRSdWxlKCJ2XFw6IitfYjJbaV0sImJlaGF2
aW9yOnVybCgjZGVmYXVsdCNWTUwpOyBkaXNwbGF5OmlubGluZS1ibG9jayIpO319KSgpO31jYXRj
aChlKXt9fX0oZnVuY3Rpb24oKXt2YXIgbXA9ZG9qby5jb25maWdbIm1vZHVsZVBhdGhzIl07aWYo
bXApe2Zvcih2YXIgX2IzIGluIG1wKXtkb2pvLnJlZ2lzdGVyTW9kdWxlUGF0aChfYjMsbXBbX2Iz
XSk7fX19KSgpO2lmKGRvam8uY29uZmlnLmlzRGVidWcpe2Rvam8ucmVxdWlyZSgiZG9qby5fZmly
ZWJ1Zy5maXJlYnVnIik7fWlmKGRvam8uY29uZmlnLmRlYnVnQXRBbGxDb3N0cyl7ZG9qby5yZXF1
aXJlKCJkb2pvLl9iYXNlLl9sb2FkZXIubG9hZGVyX2RlYnVnIik7fWlmKCFkb2pvLl9oYXNSZXNv
dXJjZVsiZG9qby5fYmFzZS5sYW5nIl0pe2Rvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmxh
bmciXT10cnVlO2Rvam8ucHJvdmlkZSgiZG9qby5fYmFzZS5sYW5nIik7KGZ1bmN0aW9uKCl7dmFy
IGQ9ZG9qbyxfYjQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztkb2pvLmlzU3RyaW5nPWZ1bmN0
aW9uKGl0KXtyZXR1cm4gKHR5cGVvZiBpdD09InN0cmluZyJ8fGl0IGluc3RhbmNlb2YgU3RyaW5n
KTt9O2Rvam8uaXNBcnJheT1mdW5jdGlvbihpdCl7cmV0dXJuIGl0JiYoaXQgaW5zdGFuY2VvZiBB
cnJheXx8dHlwZW9mIGl0PT0iYXJyYXkiKTt9O2Rvam8uaXNGdW5jdGlvbj1mdW5jdGlvbihpdCl7
cmV0dXJuIF9iNC5jYWxsKGl0KT09PSJbb2JqZWN0IEZ1bmN0aW9uXSI7fTtkb2pvLmlzT2JqZWN0
PWZ1bmN0aW9uKGl0KXtyZXR1cm4gaXQhPT11bmRlZmluZWQmJihpdD09PW51bGx8fHR5cGVvZiBp
dD09Im9iamVjdCJ8fGQuaXNBcnJheShpdCl8fGQuaXNGdW5jdGlvbihpdCkpO307ZG9qby5pc0Fy
cmF5TGlrZT1mdW5jdGlvbihpdCl7cmV0dXJuIGl0JiZpdCE9PXVuZGVmaW5lZCYmIWQuaXNTdHJp
bmcoaXQpJiYhZC5pc0Z1bmN0aW9uKGl0KSYmIShpdC50YWdOYW1lJiZpdC50YWdOYW1lLnRvTG93
ZXJDYXNlKCk9PSJmb3JtIikmJihkLmlzQXJyYXkoaXQpfHxpc0Zpbml0ZShpdC5sZW5ndGgpKTt9
O2Rvam8uaXNBbGllbj1mdW5jdGlvbihpdCl7cmV0dXJuIGl0JiYhZC5pc0Z1bmN0aW9uKGl0KSYm
L1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vLnRlc3QoU3RyaW5nKGl0KSk7fTtkb2pvLmV4dGVu
ZD1mdW5jdGlvbihfYjUsX2I2KXtmb3IodmFyIGk9MSxsPWFyZ3VtZW50cy5sZW5ndGg7aTxsO2kr
Kyl7ZC5fbWl4aW4oX2I1LnByb3RvdHlwZSxhcmd1bWVudHNbaV0pO31yZXR1cm4gX2I1O307ZG9q
by5faGl0Y2hBcmdzPWZ1bmN0aW9uKF9iNyxfYjgpe3ZhciBwcmU9ZC5fdG9BcnJheShhcmd1bWVu
dHMsMik7dmFyIF9iOT1kLmlzU3RyaW5nKF9iOCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF9iYT1k
Ll90b0FycmF5KGFyZ3VtZW50cyk7dmFyIGY9X2I5PyhfYjd8fGQuZ2xvYmFsKVtfYjhdOl9iODty
ZXR1cm4gZiYmZi5hcHBseShfYjd8fHRoaXMscHJlLmNvbmNhdChfYmEpKTt9O307ZG9qby5oaXRj
aD1mdW5jdGlvbihfYmIsX2JjKXtpZihhcmd1bWVudHMubGVuZ3RoPjIpe3JldHVybiBkLl9oaXRj
aEFyZ3MuYXBwbHkoZCxhcmd1bWVudHMpO31pZighX2JjKXtfYmM9X2JiO19iYj1udWxsO31pZihk
LmlzU3RyaW5nKF9iYykpe19iYj1fYmJ8fGQuZ2xvYmFsO2lmKCFfYmJbX2JjXSl7dGhyb3cgKFsi
ZG9qby5oaXRjaDogc2NvcGVbXCIiLF9iYywiXCJdIGlzIG51bGwgKHNjb3BlPVwiIixfYmIsIlwi
KSJdLmpvaW4oIiIpKTt9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIF9iYltfYmNdLmFwcGx5KF9i
Yixhcmd1bWVudHN8fFtdKTt9O31yZXR1cm4gIV9iYj9fYmM6ZnVuY3Rpb24oKXtyZXR1cm4gX2Jj
LmFwcGx5KF9iYixhcmd1bWVudHN8fFtdKTt9O307ZG9qby5kZWxlZ2F0ZT1kb2pvLl9kZWxlZ2F0
ZT0oZnVuY3Rpb24oKXtmdW5jdGlvbiBUTVAoKXt9O3JldHVybiBmdW5jdGlvbihvYmosX2JkKXtU
TVAucHJvdG90eXBlPW9iajt2YXIgdG1wPW5ldyBUTVAoKTtUTVAucHJvdG90eXBlPW51bGw7aWYo
X2JkKXtkLl9taXhpbih0bXAsX2JkKTt9cmV0dXJuIHRtcDt9O30pKCk7dmFyIF9iZT1mdW5jdGlv
bihvYmosX2JmLF9jMCl7cmV0dXJuIChfYzB8fFtdKS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNs
aWNlLmNhbGwob2JqLF9iZnx8MCkpO307dmFyIF9jMT1mdW5jdGlvbihvYmosX2MyLF9jMyl7dmFy
IGFycj1fYzN8fFtdO2Zvcih2YXIgeD1fYzJ8fDA7eDxvYmoubGVuZ3RoO3grKyl7YXJyLnB1c2go
b2JqW3hdKTt9cmV0dXJuIGFycjt9O2Rvam8uX3RvQXJyYXk9ZC5pc0lFP2Z1bmN0aW9uKG9iail7
cmV0dXJuICgob2JqLml0ZW0pP19jMTpfYmUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9Ol9iZTtk
b2pvLnBhcnRpYWw9ZnVuY3Rpb24oX2M0KXt2YXIgYXJyPVtudWxsXTtyZXR1cm4gZC5oaXRjaC5h
cHBseShkLGFyci5jb25jYXQoZC5fdG9BcnJheShhcmd1bWVudHMpKSk7fTt2YXIgX2M1PWQuX2V4
dHJhTmFtZXMsX2M2PV9jNS5sZW5ndGgsX2M3PXt9O2Rvam8uY2xvbmU9ZnVuY3Rpb24obyl7aWYo
IW98fHR5cGVvZiBvIT0ib2JqZWN0Inx8ZC5pc0Z1bmN0aW9uKG8pKXtyZXR1cm4gbzt9aWYoby5u
b2RlVHlwZSYmImNsb25lTm9kZSIgaW4gbyl7cmV0dXJuIG8uY2xvbmVOb2RlKHRydWUpO31pZihv
IGluc3RhbmNlb2YgRGF0ZSl7cmV0dXJuIG5ldyBEYXRlKG8uZ2V0VGltZSgpKTt9aWYobyBpbnN0
YW5jZW9mIFJlZ0V4cCl7cmV0dXJuIG5ldyBSZWdFeHAobyk7fXZhciByLGksbCxzLF9jODtpZihk
LmlzQXJyYXkobykpe3I9W107Zm9yKGk9MCxsPW8ubGVuZ3RoO2k8bDsrK2kpe2lmKGkgaW4gbyl7
ci5wdXNoKGQuY2xvbmUob1tpXSkpO319fWVsc2V7cj1vLmNvbnN0cnVjdG9yP25ldyBvLmNvbnN0
cnVjdG9yKCk6e307fWZvcihfYzggaW4gbyl7cz1vW19jOF07aWYoIShfYzggaW4gcil8fChyW19j
OF0hPT1zJiYoIShfYzggaW4gX2M3KXx8X2M3W19jOF0hPT1zKSkpe3JbX2M4XT1kLmNsb25lKHMp
O319aWYoX2M2KXtmb3IoaT0wO2k8X2M2OysraSl7X2M4PV9jNVtpXTtzPW9bX2M4XTtpZighKF9j
OCBpbiByKXx8KHJbX2M4XSE9PXMmJighKF9jOCBpbiBfYzcpfHxfYzdbX2M4XSE9PXMpKSl7cltf
YzhdPXM7fX19cmV0dXJuIHI7fTtkb2pvLnRyaW09U3RyaW5nLnByb3RvdHlwZS50cmltP2Z1bmN0
aW9uKHN0cil7cmV0dXJuIHN0ci50cmltKCk7fTpmdW5jdGlvbihzdHIpe3JldHVybiBzdHIucmVw
bGFjZSgvXlxzXHMqLywiIikucmVwbGFjZSgvXHNccyokLywiIik7fTt2YXIgX2M5PS9ceyhbXlx9
XSspXH0vZztkb2pvLnJlcGxhY2U9ZnVuY3Rpb24oX2NhLG1hcCxfY2Ipe3JldHVybiBfY2EucmVw
bGFjZShfY2J8fF9jOSxkLmlzRnVuY3Rpb24obWFwKT9tYXA6ZnVuY3Rpb24oX2NjLGspe3JldHVy
biBkLmdldE9iamVjdChrLGZhbHNlLG1hcCk7fSk7fTt9KSgpO31pZighZG9qby5faGFzUmVzb3Vy
Y2VbImRvam8uX2Jhc2UuYXJyYXkiXSl7ZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuYXJy
YXkiXT10cnVlO2Rvam8ucHJvdmlkZSgiZG9qby5fYmFzZS5hcnJheSIpOyhmdW5jdGlvbigpe3Zh
ciBfY2Q9ZnVuY3Rpb24oYXJyLG9iaixjYil7cmV0dXJuIFsodHlwZW9mIGFycj09InN0cmluZyIp
P2Fyci5zcGxpdCgiIik6YXJyLG9ianx8ZG9qby5nbG9iYWwsKHR5cGVvZiBjYj09InN0cmluZyIp
P25ldyBGdW5jdGlvbigiaXRlbSIsImluZGV4IiwiYXJyYXkiLGNiKTpjYl07fTt2YXIgX2NlPWZ1
bmN0aW9uKF9jZixhcnIsX2QwLF9kMSl7dmFyIF9kMj1fY2QoYXJyLF9kMSxfZDApO2Fycj1fZDJb
MF07Zm9yKHZhciBpPTAsbD1hcnIubGVuZ3RoO2k8bDsrK2kpe3ZhciBfZDM9ISFfZDJbMl0uY2Fs
bChfZDJbMV0sYXJyW2ldLGksYXJyKTtpZihfY2ZeX2QzKXtyZXR1cm4gX2QzO319cmV0dXJuIF9j
Zjt9O2Rvam8ubWl4aW4oZG9qbyx7aW5kZXhPZjpmdW5jdGlvbihfZDQsX2Q1LF9kNixfZDcpe3Zh
ciBfZDg9MSxlbmQ9X2Q0Lmxlbmd0aHx8MCxpPTA7aWYoX2Q3KXtpPWVuZC0xO19kOD1lbmQ9LTE7
fWlmKF9kNiE9dW5kZWZpbmVkKXtpPV9kNjt9aWYoKF9kNyYmaT5lbmQpfHxpPGVuZCl7Zm9yKDtp
IT1lbmQ7aSs9X2Q4KXtpZihfZDRbaV09PV9kNSl7cmV0dXJuIGk7fX19cmV0dXJuIC0xO30sbGFz
dEluZGV4T2Y6ZnVuY3Rpb24oX2Q5LF9kYSxfZGIpe3JldHVybiBkb2pvLmluZGV4T2YoX2Q5LF9k
YSxfZGIsdHJ1ZSk7fSxmb3JFYWNoOmZ1bmN0aW9uKGFycixfZGMsX2RkKXtpZighYXJyfHwhYXJy
Lmxlbmd0aCl7cmV0dXJuO312YXIgX2RlPV9jZChhcnIsX2RkLF9kYyk7YXJyPV9kZVswXTtmb3Io
dmFyIGk9MCxsPWFyci5sZW5ndGg7aTxsOysraSl7X2RlWzJdLmNhbGwoX2RlWzFdLGFycltpXSxp
LGFycik7fX0sZXZlcnk6ZnVuY3Rpb24oYXJyLF9kZixfZTApe3JldHVybiBfY2UodHJ1ZSxhcnIs
X2RmLF9lMCk7fSxzb21lOmZ1bmN0aW9uKGFycixfZTEsX2UyKXtyZXR1cm4gX2NlKGZhbHNlLGFy
cixfZTEsX2UyKTt9LG1hcDpmdW5jdGlvbihhcnIsX2UzLF9lNCl7dmFyIF9lNT1fY2QoYXJyLF9l
NCxfZTMpO2Fycj1fZTVbMF07dmFyIF9lNj0oYXJndW1lbnRzWzNdPyhuZXcgYXJndW1lbnRzWzNd
KCkpOltdKTtmb3IodmFyIGk9MCxsPWFyci5sZW5ndGg7aTxsOysraSl7X2U2LnB1c2goX2U1WzJd
LmNhbGwoX2U1WzFdLGFycltpXSxpLGFycikpO31yZXR1cm4gX2U2O30sZmlsdGVyOmZ1bmN0aW9u
KGFycixfZTcsX2U4KXt2YXIgX2U5PV9jZChhcnIsX2U4LF9lNyk7YXJyPV9lOVswXTt2YXIgX2Vh
PVtdO2Zvcih2YXIgaT0wLGw9YXJyLmxlbmd0aDtpPGw7KytpKXtpZihfZTlbMl0uY2FsbChfZTlb
MV0sYXJyW2ldLGksYXJyKSl7X2VhLnB1c2goYXJyW2ldKTt9fXJldHVybiBfZWE7fX0pO30pKCk7
fWlmKCFkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS5kZWNsYXJlIl0pe2Rvam8uX2hhc1Jl
c291cmNlWyJkb2pvLl9iYXNlLmRlY2xhcmUiXT10cnVlO2Rvam8ucHJvdmlkZSgiZG9qby5fYmFz
ZS5kZWNsYXJlIik7KGZ1bmN0aW9uKCl7dmFyIGQ9ZG9qbyxtaXg9ZC5fbWl4aW4sb3A9T2JqZWN0
LnByb3RvdHlwZSxfZWI9b3AudG9TdHJpbmcsX2VjPW5ldyBGdW5jdGlvbixfZWQ9MCxfZWU9ImNv
bnN0cnVjdG9yIjtmdW5jdGlvbiBlcnIobXNnLGNscyl7dGhyb3cgbmV3IEVycm9yKCJkZWNsYXJl
IisoY2xzPyIgIitjbHM6IiIpKyI6ICIrbXNnKTt9O2Z1bmN0aW9uIF9lZihfZjAsX2YxKXt2YXIg
X2YyPVtdLF9mMz1be2NsczowLHJlZnM6W119XSxfZjQ9e30sX2Y1PTEsbD1fZjAubGVuZ3RoLGk9
MCxqLGxpbixfZjYsdG9wLF9mNyxyZWMsX2Y4LF9mOTtmb3IoO2k8bDsrK2kpe19mNj1fZjBbaV07
aWYoIV9mNil7ZXJyKCJtaXhpbiAjIitpKyIgaXMgdW5rbm93bi4gRGlkIHlvdSB1c2UgZG9qby5y
ZXF1aXJlIHRvIHB1bGwgaXQgaW4/IixfZjEpO31lbHNle2lmKF9lYi5jYWxsKF9mNikhPSJbb2Jq
ZWN0IEZ1bmN0aW9uXSIpe2VycigibWl4aW4gIyIraSsiIGlzIG5vdCBhIGNhbGxhYmxlIGNvbnN0
cnVjdG9yLiIsX2YxKTt9fWxpbj1fZjYuX21ldGE/X2Y2Ll9tZXRhLmJhc2VzOltfZjZdO3RvcD0w
O2ZvcihqPWxpbi5sZW5ndGgtMTtqPj0wOy0tail7X2Y3PWxpbltqXS5wcm90b3R5cGU7aWYoIV9m
Ny5oYXNPd25Qcm9wZXJ0eSgiZGVjbGFyZWRDbGFzcyIpKXtfZjcuZGVjbGFyZWRDbGFzcz0idW5p
cU5hbWVfIisoX2VkKyspO31fZjg9X2Y3LmRlY2xhcmVkQ2xhc3M7aWYoIV9mNC5oYXNPd25Qcm9w
ZXJ0eShfZjgpKXtfZjRbX2Y4XT17Y291bnQ6MCxyZWZzOltdLGNsczpsaW5bal19OysrX2Y1O31y
ZWM9X2Y0W19mOF07aWYodG9wJiZ0b3AhPT1yZWMpe3JlYy5yZWZzLnB1c2godG9wKTsrK3RvcC5j
b3VudDt9dG9wPXJlYzt9Kyt0b3AuY291bnQ7X2YzWzBdLnJlZnMucHVzaCh0b3ApO313aGlsZShf
ZjMubGVuZ3RoKXt0b3A9X2YzLnBvcCgpO19mMi5wdXNoKHRvcC5jbHMpOy0tX2Y1O3doaWxlKF9m
OT10b3AucmVmcyxfZjkubGVuZ3RoPT0xKXt0b3A9X2Y5WzBdO2lmKCF0b3B8fC0tdG9wLmNvdW50
KXt0b3A9MDticmVhazt9X2YyLnB1c2godG9wLmNscyk7LS1fZjU7fWlmKHRvcCl7Zm9yKGk9MCxs
PV9mOS5sZW5ndGg7aTxsOysraSl7dG9wPV9mOVtpXTtpZighLS10b3AuY291bnQpe19mMy5wdXNo
KHRvcCk7fX19fWlmKF9mNSl7ZXJyKCJjYW4ndCBidWlsZCBjb25zaXN0ZW50IGxpbmVhcml6YXRp
b24iLF9mMSk7fV9mNj1fZjBbMF07X2YyWzBdPV9mNj9fZjYuX21ldGEmJl9mNj09PV9mMltfZjIu
bGVuZ3RoLV9mNi5fbWV0YS5iYXNlcy5sZW5ndGhdP19mNi5fbWV0YS5iYXNlcy5sZW5ndGg6MTow
O3JldHVybiBfZjI7fTtmdW5jdGlvbiBfZmEoX2ZiLGEsZil7dmFyIF9mYyxfZmQsX2ZlLF9mZixt
ZXRhLGJhc2UsXzEwMCxvcGYscG9zLF8xMDE9dGhpcy5faW5oZXJpdGVkPXRoaXMuX2luaGVyaXRl
ZHx8e307aWYodHlwZW9mIF9mYj09InN0cmluZyIpe19mYz1fZmI7X2ZiPWE7YT1mO31mPTA7X2Zm
PV9mYi5jYWxsZWU7X2ZjPV9mY3x8X2ZmLm5vbTtpZighX2ZjKXtlcnIoImNhbid0IGRlZHVjZSBh
IG5hbWUgdG8gY2FsbCBpbmhlcml0ZWQoKSIsdGhpcy5kZWNsYXJlZENsYXNzKTt9bWV0YT10aGlz
LmNvbnN0cnVjdG9yLl9tZXRhO19mZT1tZXRhLmJhc2VzO3Bvcz1fMTAxLnA7aWYoX2ZjIT1fZWUp
e2lmKF8xMDEuYyE9PV9mZil7cG9zPTA7YmFzZT1fZmVbMF07bWV0YT1iYXNlLl9tZXRhO2lmKG1l
dGEuaGlkZGVuW19mY10hPT1fZmYpe19mZD1tZXRhLmNoYWlucztpZihfZmQmJnR5cGVvZiBfZmRb
X2ZjXT09InN0cmluZyIpe2VycigiY2FsbGluZyBjaGFpbmVkIG1ldGhvZCB3aXRoIGluaGVyaXRl
ZDogIitfZmMsdGhpcy5kZWNsYXJlZENsYXNzKTt9ZG97bWV0YT1iYXNlLl9tZXRhO18xMDA9YmFz
ZS5wcm90b3R5cGU7aWYobWV0YSYmKF8xMDBbX2ZjXT09PV9mZiYmXzEwMC5oYXNPd25Qcm9wZXJ0
eShfZmMpfHxtZXRhLmhpZGRlbltfZmNdPT09X2ZmKSl7YnJlYWs7fX13aGlsZShiYXNlPV9mZVsr
K3Bvc10pO3Bvcz1iYXNlP3BvczotMTt9fWJhc2U9X2ZlWysrcG9zXTtpZihiYXNlKXtfMTAwPWJh
c2UucHJvdG90eXBlO2lmKGJhc2UuX21ldGEmJl8xMDAuaGFzT3duUHJvcGVydHkoX2ZjKSl7Zj1f
MTAwW19mY107fWVsc2V7b3BmPW9wW19mY107ZG97XzEwMD1iYXNlLnByb3RvdHlwZTtmPV8xMDBb
X2ZjXTtpZihmJiYoYmFzZS5fbWV0YT9fMTAwLmhhc093blByb3BlcnR5KF9mYyk6ZiE9PW9wZikp
e2JyZWFrO319d2hpbGUoYmFzZT1fZmVbKytwb3NdKTt9fWY9YmFzZSYmZnx8b3BbX2ZjXTt9ZWxz
ZXtpZihfMTAxLmMhPT1fZmYpe3Bvcz0wO21ldGE9X2ZlWzBdLl9tZXRhO2lmKG1ldGEmJm1ldGEu
Y3RvciE9PV9mZil7X2ZkPW1ldGEuY2hhaW5zO2lmKCFfZmR8fF9mZC5jb25zdHJ1Y3RvciE9PSJt
YW51YWwiKXtlcnIoImNhbGxpbmcgY2hhaW5lZCBjb25zdHJ1Y3RvciB3aXRoIGluaGVyaXRlZCIs
dGhpcy5kZWNsYXJlZENsYXNzKTt9d2hpbGUoYmFzZT1fZmVbKytwb3NdKXttZXRhPWJhc2UuX21l
dGE7aWYobWV0YSYmbWV0YS5jdG9yPT09X2ZmKXticmVhazt9fXBvcz1iYXNlP3BvczotMTt9fXdo
aWxlKGJhc2U9X2ZlWysrcG9zXSl7bWV0YT1iYXNlLl9tZXRhO2Y9bWV0YT9tZXRhLmN0b3I6YmFz
ZTtpZihmKXticmVhazt9fWY9YmFzZSYmZjt9XzEwMS5jPWY7XzEwMS5wPXBvcztpZihmKXtyZXR1
cm4gYT09PXRydWU/ZjpmLmFwcGx5KHRoaXMsYXx8X2ZiKTt9fTtmdW5jdGlvbiBfMTAyKG5hbWUs
YXJncyl7aWYodHlwZW9mIG5hbWU9PSJzdHJpbmciKXtyZXR1cm4gdGhpcy5pbmhlcml0ZWQobmFt
ZSxhcmdzLHRydWUpO31yZXR1cm4gdGhpcy5pbmhlcml0ZWQobmFtZSx0cnVlKTt9O2Z1bmN0aW9u
IF8xMDMoY2xzKXt2YXIgXzEwND10aGlzLmNvbnN0cnVjdG9yLl9tZXRhLmJhc2VzO2Zvcih2YXIg
aT0wLGw9XzEwNC5sZW5ndGg7aTxsOysraSl7aWYoXzEwNFtpXT09PWNscyl7cmV0dXJuIHRydWU7
fX1yZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGNsczt9O2Z1bmN0aW9uIF8xMDUoXzEwNixfMTA3KXt2
YXIgbmFtZSxpPTAsbD1kLl9leHRyYU5hbWVzLmxlbmd0aDtmb3IobmFtZSBpbiBfMTA3KXtpZihu
YW1lIT1fZWUmJl8xMDcuaGFzT3duUHJvcGVydHkobmFtZSkpe18xMDZbbmFtZV09XzEwN1tuYW1l
XTt9fWZvcig7aTxsOysraSl7bmFtZT1kLl9leHRyYU5hbWVzW2ldO2lmKG5hbWUhPV9lZSYmXzEw
Ny5oYXNPd25Qcm9wZXJ0eShuYW1lKSl7XzEwNltuYW1lXT1fMTA3W25hbWVdO319fTtmdW5jdGlv
biBfMTA4KF8xMDksXzEwYSl7dmFyIG5hbWUsdCxpPTAsbD1kLl9leHRyYU5hbWVzLmxlbmd0aDtm
b3IobmFtZSBpbiBfMTBhKXt0PV8xMGFbbmFtZV07aWYoKHQhPT1vcFtuYW1lXXx8IShuYW1lIGlu
IG9wKSkmJm5hbWUhPV9lZSl7aWYoX2ViLmNhbGwodCk9PSJbb2JqZWN0IEZ1bmN0aW9uXSIpe3Qu
bm9tPW5hbWU7fV8xMDlbbmFtZV09dDt9fWZvcig7aTxsOysraSl7bmFtZT1kLl9leHRyYU5hbWVz
W2ldO3Q9XzEwYVtuYW1lXTtpZigodCE9PW9wW25hbWVdfHwhKG5hbWUgaW4gb3ApKSYmbmFtZSE9
X2VlKXtpZihfZWIuY2FsbCh0KT09IltvYmplY3QgRnVuY3Rpb25dIil7dC5ub209bmFtZTt9XzEw
OVtuYW1lXT10O319cmV0dXJuIF8xMDk7fTtmdW5jdGlvbiBfMTBiKF8xMGMpe18xMDgodGhpcy5w
cm90b3R5cGUsXzEwYyk7cmV0dXJuIHRoaXM7fTtmdW5jdGlvbiBfMTBkKF8xMGUsXzEwZil7cmV0
dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzLGFyZ3M9YSxhMD1hWzBdLGYsaSxtLGw9XzEw
ZS5sZW5ndGgsXzExMDtpZighKHRoaXMgaW5zdGFuY2VvZiBhLmNhbGxlZSkpe3JldHVybiBfMTEx
KGEpO31pZihfMTBmJiYoYTAmJmEwLnByZWFtYmxlfHx0aGlzLnByZWFtYmxlKSl7XzExMD1uZXcg
QXJyYXkoXzEwZS5sZW5ndGgpO18xMTBbMF09YTtmb3IoaT0wOzspe2EwPWFbMF07aWYoYTApe2Y9
YTAucHJlYW1ibGU7aWYoZil7YT1mLmFwcGx5KHRoaXMsYSl8fGE7fX1mPV8xMGVbaV0ucHJvdG90
eXBlO2Y9Zi5oYXNPd25Qcm9wZXJ0eSgicHJlYW1ibGUiKSYmZi5wcmVhbWJsZTtpZihmKXthPWYu
YXBwbHkodGhpcyxhKXx8YTt9aWYoKytpPT1sKXticmVhazt9XzExMFtpXT1hO319Zm9yKGk9bC0x
O2k+PTA7LS1pKXtmPV8xMGVbaV07bT1mLl9tZXRhO2Y9bT9tLmN0b3I6ZjtpZihmKXtmLmFwcGx5
KHRoaXMsXzExMD9fMTEwW2ldOmEpO319Zj10aGlzLnBvc3RzY3JpcHQ7aWYoZil7Zi5hcHBseSh0
aGlzLGFyZ3MpO319O307ZnVuY3Rpb24gXzExMihjdG9yLF8xMTMpe3JldHVybiBmdW5jdGlvbigp
e3ZhciBhPWFyZ3VtZW50cyx0PWEsYTA9YVswXSxmO2lmKCEodGhpcyBpbnN0YW5jZW9mIGEuY2Fs
bGVlKSl7cmV0dXJuIF8xMTEoYSk7fWlmKF8xMTMpe2lmKGEwKXtmPWEwLnByZWFtYmxlO2lmKGYp
e3Q9Zi5hcHBseSh0aGlzLHQpfHx0O319Zj10aGlzLnByZWFtYmxlO2lmKGYpe2YuYXBwbHkodGhp
cyx0KTt9fWlmKGN0b3Ipe2N0b3IuYXBwbHkodGhpcyxhKTt9Zj10aGlzLnBvc3RzY3JpcHQ7aWYo
Zil7Zi5hcHBseSh0aGlzLGEpO319O307ZnVuY3Rpb24gXzExNChfMTE1KXtyZXR1cm4gZnVuY3Rp
b24oKXt2YXIgYT1hcmd1bWVudHMsaT0wLGYsbTtpZighKHRoaXMgaW5zdGFuY2VvZiBhLmNhbGxl
ZSkpe3JldHVybiBfMTExKGEpO31mb3IoO2Y9XzExNVtpXTsrK2kpe209Zi5fbWV0YTtmPW0/bS5j
dG9yOmY7aWYoZil7Zi5hcHBseSh0aGlzLGEpO2JyZWFrO319Zj10aGlzLnBvc3RzY3JpcHQ7aWYo
Zil7Zi5hcHBseSh0aGlzLGEpO319O307ZnVuY3Rpb24gXzExNihuYW1lLF8xMTcsXzExOCl7cmV0
dXJuIGZ1bmN0aW9uKCl7dmFyIGIsbSxmLGk9MCxzdGVwPTE7aWYoXzExOCl7aT1fMTE3Lmxlbmd0
aC0xO3N0ZXA9LTE7fWZvcig7Yj1fMTE3W2ldO2krPXN0ZXApe209Yi5fbWV0YTtmPShtP20uaGlk
ZGVuOmIucHJvdG90eXBlKVtuYW1lXTtpZihmKXtmLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9fX07
fTtmdW5jdGlvbiBfMTE5KGN0b3Ipe19lYy5wcm90b3R5cGU9Y3Rvci5wcm90b3R5cGU7dmFyIHQ9
bmV3IF9lYztfZWMucHJvdG90eXBlPW51bGw7cmV0dXJuIHQ7fTtmdW5jdGlvbiBfMTExKGFyZ3Mp
e3ZhciBjdG9yPWFyZ3MuY2FsbGVlLHQ9XzExOShjdG9yKTtjdG9yLmFwcGx5KHQsYXJncyk7cmV0
dXJuIHQ7fTtkLmRlY2xhcmU9ZnVuY3Rpb24oXzExYSxfMTFiLF8xMWMpe2lmKHR5cGVvZiBfMTFh
IT0ic3RyaW5nIil7XzExYz1fMTFiO18xMWI9XzExYTtfMTFhPSIiO31fMTFjPV8xMWN8fHt9O3Zh
ciBfMTFkLGksdCxjdG9yLG5hbWUsXzExZSxfMTFmLF8xMjA9MSxfMTIxPV8xMWI7aWYoX2ViLmNh
bGwoXzExYik9PSJbb2JqZWN0IEFycmF5XSIpe18xMWU9X2VmKF8xMWIsXzExYSk7dD1fMTFlWzBd
O18xMjA9XzExZS5sZW5ndGgtdDtfMTFiPV8xMWVbXzEyMF07fWVsc2V7XzExZT1bMF07aWYoXzEx
Yil7aWYoX2ViLmNhbGwoXzExYik9PSJbb2JqZWN0IEZ1bmN0aW9uXSIpe3Q9XzExYi5fbWV0YTtf
MTFlPV8xMWUuY29uY2F0KHQ/dC5iYXNlczpfMTFiKTt9ZWxzZXtlcnIoImJhc2UgY2xhc3MgaXMg
bm90IGEgY2FsbGFibGUgY29uc3RydWN0b3IuIixfMTFhKTt9fWVsc2V7aWYoXzExYiE9PW51bGwp
e2VycigidW5rbm93biBiYXNlIGNsYXNzLiBEaWQgeW91IHVzZSBkb2pvLnJlcXVpcmUgdG8gcHVs
bCBpdCBpbj8iLF8xMWEpO319fWlmKF8xMWIpe2ZvcihpPV8xMjAtMTs7LS1pKXtfMTFkPV8xMTko
XzExYik7aWYoIWkpe2JyZWFrO310PV8xMWVbaV07KHQuX21ldGE/XzEwNTptaXgpKF8xMWQsdC5w
cm90b3R5cGUpO2N0b3I9bmV3IEZ1bmN0aW9uO2N0b3Iuc3VwZXJjbGFzcz1fMTFiO2N0b3IucHJv
dG90eXBlPV8xMWQ7XzExYj1fMTFkLmNvbnN0cnVjdG9yPWN0b3I7fX1lbHNle18xMWQ9e307fV8x
MDgoXzExZCxfMTFjKTt0PV8xMWMuY29uc3RydWN0b3I7aWYodCE9PW9wLmNvbnN0cnVjdG9yKXt0
Lm5vbT1fZWU7XzExZC5jb25zdHJ1Y3Rvcj10O31mb3IoaT1fMTIwLTE7aTstLWkpe3Q9XzExZVtp
XS5fbWV0YTtpZih0JiZ0LmNoYWlucyl7XzExZj1taXgoXzExZnx8e30sdC5jaGFpbnMpO319aWYo
XzExZFsiLWNoYWlucy0iXSl7XzExZj1taXgoXzExZnx8e30sXzExZFsiLWNoYWlucy0iXSk7fXQ9
IV8xMWZ8fCFfMTFmLmhhc093blByb3BlcnR5KF9lZSk7XzExZVswXT1jdG9yPShfMTFmJiZfMTFm
LmNvbnN0cnVjdG9yPT09Im1hbnVhbCIpP18xMTQoXzExZSk6KF8xMWUubGVuZ3RoPT0xP18xMTIo
XzExYy5jb25zdHJ1Y3Rvcix0KTpfMTBkKF8xMWUsdCkpO2N0b3IuX21ldGE9e2Jhc2VzOl8xMWUs
aGlkZGVuOl8xMWMsY2hhaW5zOl8xMWYscGFyZW50czpfMTIxLGN0b3I6XzExYy5jb25zdHJ1Y3Rv
cn07Y3Rvci5zdXBlcmNsYXNzPV8xMWImJl8xMWIucHJvdG90eXBlO2N0b3IuZXh0ZW5kPV8xMGI7
Y3Rvci5wcm90b3R5cGU9XzExZDtfMTFkLmNvbnN0cnVjdG9yPWN0b3I7XzExZC5nZXRJbmhlcml0
ZWQ9XzEwMjtfMTFkLmluaGVyaXRlZD1fZmE7XzExZC5pc0luc3RhbmNlT2Y9XzEwMztpZihfMTFh
KXtfMTFkLmRlY2xhcmVkQ2xhc3M9XzExYTtkLnNldE9iamVjdChfMTFhLGN0b3IpO31pZihfMTFm
KXtmb3IobmFtZSBpbiBfMTFmKXtpZihfMTFkW25hbWVdJiZ0eXBlb2YgXzExZltuYW1lXT09InN0
cmluZyImJm5hbWUhPV9lZSl7dD1fMTFkW25hbWVdPV8xMTYobmFtZSxfMTFlLF8xMWZbbmFtZV09
PT0iYWZ0ZXIiKTt0Lm5vbT1uYW1lO319fXJldHVybiBjdG9yO307ZC5zYWZlTWl4aW49XzEwODt9
KSgpO31pZighZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuY29ubmVjdCJdKXtkb2pvLl9o
YXNSZXNvdXJjZVsiZG9qby5fYmFzZS5jb25uZWN0Il09dHJ1ZTtkb2pvLnByb3ZpZGUoImRvam8u
X2Jhc2UuY29ubmVjdCIpO2Rvam8uX2xpc3RlbmVyPXtnZXREaXNwYXRjaGVyOmZ1bmN0aW9uKCl7
cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGFwPUFycmF5LnByb3RvdHlwZSxjPWFyZ3VtZW50cy5jYWxs
ZWUsbHM9Yy5fbGlzdGVuZXJzLHQ9Yy50YXJnZXQscj10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRz
KSxpLGxscz1bXS5jb25jYXQobHMpO2ZvcihpIGluIGxscyl7aWYoIShpIGluIGFwKSl7bGxzW2ld
LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9fXJldHVybiByO307fSxhZGQ6ZnVuY3Rpb24oXzEyMixf
MTIzLF8xMjQpe18xMjI9XzEyMnx8ZG9qby5nbG9iYWw7dmFyIGY9XzEyMltfMTIzXTtpZighZnx8
IWYuX2xpc3RlbmVycyl7dmFyIGQ9ZG9qby5fbGlzdGVuZXIuZ2V0RGlzcGF0Y2hlcigpO2QudGFy
Z2V0PWY7ZC5fbGlzdGVuZXJzPVtdO2Y9XzEyMltfMTIzXT1kO31yZXR1cm4gZi5fbGlzdGVuZXJz
LnB1c2goXzEyNCk7fSxyZW1vdmU6ZnVuY3Rpb24oXzEyNSxfMTI2LF8xMjcpe3ZhciBmPShfMTI1
fHxkb2pvLmdsb2JhbClbXzEyNl07aWYoZiYmZi5fbGlzdGVuZXJzJiZfMTI3LS0pe2RlbGV0ZSBm
Ll9saXN0ZW5lcnNbXzEyN107fX19O2Rvam8uY29ubmVjdD1mdW5jdGlvbihvYmosXzEyOCxfMTI5
LF8xMmEsXzEyYil7dmFyIGE9YXJndW1lbnRzLGFyZ3M9W10saT0wO2FyZ3MucHVzaChkb2pvLmlz
U3RyaW5nKGFbMF0pP251bGw6YVtpKytdLGFbaSsrXSk7dmFyIGExPWFbaSsxXTthcmdzLnB1c2go
ZG9qby5pc1N0cmluZyhhMSl8fGRvam8uaXNGdW5jdGlvbihhMSk/YVtpKytdOm51bGwsYVtpKytd
KTtmb3IodmFyIGw9YS5sZW5ndGg7aTxsO2krKyl7YXJncy5wdXNoKGFbaV0pO31yZXR1cm4gZG9q
by5fY29ubmVjdC5hcHBseSh0aGlzLGFyZ3MpO307ZG9qby5fY29ubmVjdD1mdW5jdGlvbihvYmos
XzEyYyxfMTJkLF8xMmUpe3ZhciBsPWRvam8uX2xpc3RlbmVyLGg9bC5hZGQob2JqLF8xMmMsZG9q
by5oaXRjaChfMTJkLF8xMmUpKTtyZXR1cm4gW29iaixfMTJjLGgsbF07fTtkb2pvLmRpc2Nvbm5l
Y3Q9ZnVuY3Rpb24oXzEyZil7aWYoXzEyZiYmXzEyZlswXSE9PXVuZGVmaW5lZCl7ZG9qby5fZGlz
Y29ubmVjdC5hcHBseSh0aGlzLF8xMmYpO2RlbGV0ZSBfMTJmWzBdO319O2Rvam8uX2Rpc2Nvbm5l
Y3Q9ZnVuY3Rpb24ob2JqLF8xMzAsXzEzMSxfMTMyKXtfMTMyLnJlbW92ZShvYmosXzEzMCxfMTMx
KTt9O2Rvam8uX3RvcGljcz17fTtkb2pvLnN1YnNjcmliZT1mdW5jdGlvbihfMTMzLF8xMzQsXzEz
NSl7cmV0dXJuIFtfMTMzLGRvam8uX2xpc3RlbmVyLmFkZChkb2pvLl90b3BpY3MsXzEzMyxkb2pv
LmhpdGNoKF8xMzQsXzEzNSkpXTt9O2Rvam8udW5zdWJzY3JpYmU9ZnVuY3Rpb24oXzEzNil7aWYo
XzEzNil7ZG9qby5fbGlzdGVuZXIucmVtb3ZlKGRvam8uX3RvcGljcyxfMTM2WzBdLF8xMzZbMV0p
O319O2Rvam8ucHVibGlzaD1mdW5jdGlvbihfMTM3LGFyZ3Mpe3ZhciBmPWRvam8uX3RvcGljc1tf
MTM3XTtpZihmKXtmLmFwcGx5KHRoaXMsYXJnc3x8W10pO319O2Rvam8uY29ubmVjdFB1Ymxpc2hl
cj1mdW5jdGlvbihfMTM4LG9iaixfMTM5KXt2YXIgcGY9ZnVuY3Rpb24oKXtkb2pvLnB1Ymxpc2go
XzEzOCxhcmd1bWVudHMpO307cmV0dXJuIF8xMzk/ZG9qby5jb25uZWN0KG9iaixfMTM5LHBmKTpk
b2pvLmNvbm5lY3Qob2JqLHBmKTt9O31pZighZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2Uu
RGVmZXJyZWQiXSl7ZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuRGVmZXJyZWQiXT10cnVl
O2Rvam8ucHJvdmlkZSgiZG9qby5fYmFzZS5EZWZlcnJlZCIpOyhmdW5jdGlvbigpe3ZhciBfMTNh
PWZ1bmN0aW9uKCl7fTt2YXIgXzEzYj1PYmplY3QuZnJlZXplfHxmdW5jdGlvbigpe307ZG9qby5E
ZWZlcnJlZD1mdW5jdGlvbihfMTNjKXt2YXIgXzEzZCxfMTNlLF8xM2YsaGVhZCxfMTQwO3ZhciBf
MTQxPSh0aGlzLnByb21pc2U9e30pO2Z1bmN0aW9uIF8xNDIoXzE0Myl7aWYoXzEzZSl7dGhyb3cg
bmV3IEVycm9yKCJUaGlzIGRlZmVycmVkIGhhcyBhbHJlYWR5IGJlZW4gcmVzb2x2ZWQiKTt9XzEz
ZD1fMTQzO18xM2U9dHJ1ZTtfMTQ0KCk7fTtmdW5jdGlvbiBfMTQ0KCl7dmFyIF8xNDU7d2hpbGUo
IV8xNDUmJl8xNDApe3ZhciBfMTQ2PV8xNDA7XzE0MD1fMTQwLm5leHQ7aWYoKF8xNDU9KF8xNDYu
cHJvZ3Jlc3M9PV8xM2EpKSl7XzEzZT1mYWxzZTt9dmFyIGZ1bmM9KF8xM2Y/XzE0Ni5lcnJvcjpf
MTQ2LnJlc29sdmVkKTtpZihmdW5jKXt0cnl7dmFyIF8xNDc9ZnVuYyhfMTNkKTtpZihfMTQ3JiZ0
eXBlb2YgXzE0Ny50aGVuPT09ImZ1bmN0aW9uIil7XzE0Ny50aGVuKGRvam8uaGl0Y2goXzE0Ni5k
ZWZlcnJlZCwicmVzb2x2ZSIpLGRvam8uaGl0Y2goXzE0Ni5kZWZlcnJlZCwicmVqZWN0IikpO2Nv
bnRpbnVlO312YXIgXzE0OD1fMTQ1JiZfMTQ3PT09dW5kZWZpbmVkO2lmKF8xNDUmJiFfMTQ4KXtf
MTNmPV8xNDcgaW5zdGFuY2VvZiBFcnJvcjt9XzE0Ni5kZWZlcnJlZFtfMTQ4JiZfMTNmPyJyZWpl
Y3QiOiJyZXNvbHZlIl0oXzE0OD9fMTNkOl8xNDcpO31jYXRjaChlKXtfMTQ2LmRlZmVycmVkLnJl
amVjdChlKTt9fWVsc2V7aWYoXzEzZil7XzE0Ni5kZWZlcnJlZC5yZWplY3QoXzEzZCk7fWVsc2V7
XzE0Ni5kZWZlcnJlZC5yZXNvbHZlKF8xM2QpO319fX07dGhpcy5yZXNvbHZlPXRoaXMuY2FsbGJh
Y2s9ZnVuY3Rpb24oXzE0OSl7dGhpcy5maXJlZD0wO3RoaXMucmVzdWx0cz1bXzE0OSxudWxsXTtf
MTQyKF8xNDkpO307dGhpcy5yZWplY3Q9dGhpcy5lcnJiYWNrPWZ1bmN0aW9uKF8xNGEpe18xM2Y9
dHJ1ZTt0aGlzLmZpcmVkPTE7XzE0MihfMTRhKTt0aGlzLnJlc3VsdHM9W251bGwsXzE0YV07aWYo
IV8xNGF8fF8xNGEubG9nIT09ZmFsc2Upeyhkb2pvLmNvbmZpZy5kZWZlcnJlZE9uRXJyb3J8fGZ1
bmN0aW9uKHgpe2NvbnNvbGUuZXJyb3IoeCk7fSkoXzE0YSk7fX07dGhpcy5wcm9ncmVzcz1mdW5j
dGlvbihfMTRiKXt2YXIgXzE0Yz1fMTQwO3doaWxlKF8xNGMpe3ZhciBfMTRkPV8xNGMucHJvZ3Jl
c3M7XzE0ZCYmXzE0ZChfMTRiKTtfMTRjPV8xNGMubmV4dDt9fTt0aGlzLmFkZENhbGxiYWNrcz1m
dW5jdGlvbihfMTRlLF8xNGYpe3RoaXMudGhlbihfMTRlLF8xNGYsXzEzYSk7cmV0dXJuIHRoaXM7
fTt0aGlzLnRoZW49XzE0MS50aGVuPWZ1bmN0aW9uKF8xNTAsXzE1MSxfMTUyKXt2YXIgXzE1Mz1f
MTUyPT1fMTNhP3RoaXM6bmV3IGRvam8uRGVmZXJyZWQoXzE0MS5jYW5jZWwpO3ZhciBfMTU0PXty
ZXNvbHZlZDpfMTUwLGVycm9yOl8xNTEscHJvZ3Jlc3M6XzE1MixkZWZlcnJlZDpfMTUzfTtpZihf
MTQwKXtoZWFkPWhlYWQubmV4dD1fMTU0O31lbHNle18xNDA9aGVhZD1fMTU0O31pZihfMTNlKXtf
MTQ0KCk7fXJldHVybiBfMTUzLnByb21pc2U7fTt2YXIgXzE1NT10aGlzO3RoaXMuY2FuY2VsPV8x
NDEuY2FuY2VsPWZ1bmN0aW9uKCl7aWYoIV8xM2Upe3ZhciBfMTU2PV8xM2MmJl8xM2MoXzE1NSk7
aWYoIV8xM2Upe2lmKCEoXzE1NiBpbnN0YW5jZW9mIEVycm9yKSl7XzE1Nj1uZXcgRXJyb3IoXzE1
Nik7fV8xNTYubG9nPWZhbHNlO18xNTUucmVqZWN0KF8xNTYpO319fTtfMTNiKF8xNDEpO307ZG9q
by5leHRlbmQoZG9qby5EZWZlcnJlZCx7YWRkQ2FsbGJhY2s6ZnVuY3Rpb24oXzE1Nyl7cmV0dXJu
IHRoaXMuYWRkQ2FsbGJhY2tzKGRvam8uaGl0Y2guYXBwbHkoZG9qbyxhcmd1bWVudHMpKTt9LGFk
ZEVycmJhY2s6ZnVuY3Rpb24oXzE1OCl7cmV0dXJuIHRoaXMuYWRkQ2FsbGJhY2tzKG51bGwsZG9q
by5oaXRjaC5hcHBseShkb2pvLGFyZ3VtZW50cykpO30sYWRkQm90aDpmdW5jdGlvbihfMTU5KXt2
YXIgXzE1YT1kb2pvLmhpdGNoLmFwcGx5KGRvam8sYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5hZGRD
YWxsYmFja3MoXzE1YSxfMTVhKTt9LGZpcmVkOi0xfSk7fSkoKTtkb2pvLndoZW49ZnVuY3Rpb24o
XzE1YixfMTVjLF8xNWQsXzE1ZSl7aWYoXzE1YiYmdHlwZW9mIF8xNWIudGhlbj09PSJmdW5jdGlv
biIpe3JldHVybiBfMTViLnRoZW4oXzE1YyxfMTVkLF8xNWUpO31yZXR1cm4gXzE1YyhfMTViKTt9
O31pZighZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuanNvbiJdKXtkb2pvLl9oYXNSZXNv
dXJjZVsiZG9qby5fYmFzZS5qc29uIl09dHJ1ZTtkb2pvLnByb3ZpZGUoImRvam8uX2Jhc2UuanNv
biIpO2Rvam8uZnJvbUpzb249ZnVuY3Rpb24oanNvbil7cmV0dXJuIGV2YWwoIigiK2pzb24rIiki
KTt9O2Rvam8uX2VzY2FwZVN0cmluZz1mdW5jdGlvbihzdHIpe3JldHVybiAoIlwiIitzdHIucmVw
bGFjZSgvKFsiXFxdKS9nLCJcXCQxIikrIlwiIikucmVwbGFjZSgvW1xmXS9nLCJcXGYiKS5yZXBs
YWNlKC9bXGJdL2csIlxcYiIpLnJlcGxhY2UoL1tcbl0vZywiXFxuIikucmVwbGFjZSgvW1x0XS9n
LCJcXHQiKS5yZXBsYWNlKC9bXHJdL2csIlxcciIpO307ZG9qby50b0pzb25JbmRlbnRTdHI9Ilx0
Ijtkb2pvLnRvSnNvbj1mdW5jdGlvbihpdCxfMTVmLF8xNjApe2lmKGl0PT09dW5kZWZpbmVkKXty
ZXR1cm4gInVuZGVmaW5lZCI7fXZhciBfMTYxPXR5cGVvZiBpdDtpZihfMTYxPT0ibnVtYmVyInx8
XzE2MT09ImJvb2xlYW4iKXtyZXR1cm4gaXQrIiI7fWlmKGl0PT09bnVsbCl7cmV0dXJuICJudWxs
Ijt9aWYoZG9qby5pc1N0cmluZyhpdCkpe3JldHVybiBkb2pvLl9lc2NhcGVTdHJpbmcoaXQpO312
YXIgXzE2Mj1hcmd1bWVudHMuY2FsbGVlO3ZhciBfMTYzO18xNjA9XzE2MHx8IiI7dmFyIF8xNjQ9
XzE1Zj9fMTYwK2Rvam8udG9Kc29uSW5kZW50U3RyOiIiO3ZhciB0Zj1pdC5fX2pzb25fX3x8aXQu
anNvbjtpZihkb2pvLmlzRnVuY3Rpb24odGYpKXtfMTYzPXRmLmNhbGwoaXQpO2lmKGl0IT09XzE2
Myl7cmV0dXJuIF8xNjIoXzE2MyxfMTVmLF8xNjQpO319aWYoaXQubm9kZVR5cGUmJml0LmNsb25l
Tm9kZSl7dGhyb3cgbmV3IEVycm9yKCJDYW4ndCBzZXJpYWxpemUgRE9NIG5vZGVzIik7fXZhciBz
ZXA9XzE1Zj8iICI6IiI7dmFyIF8xNjU9XzE1Zj8iXG4iOiIiO2lmKGRvam8uaXNBcnJheShpdCkp
e3ZhciByZXM9ZG9qby5tYXAoaXQsZnVuY3Rpb24ob2JqKXt2YXIgdmFsPV8xNjIob2JqLF8xNWYs
XzE2NCk7aWYodHlwZW9mIHZhbCE9InN0cmluZyIpe3ZhbD0idW5kZWZpbmVkIjt9cmV0dXJuIF8x
NjUrXzE2NCt2YWw7fSk7cmV0dXJuICJbIityZXMuam9pbigiLCIrc2VwKStfMTY1K18xNjArIl0i
O31pZihfMTYxPT0iZnVuY3Rpb24iKXtyZXR1cm4gbnVsbDt9dmFyIF8xNjY9W10sa2V5O2Zvcihr
ZXkgaW4gaXQpe3ZhciBfMTY3LHZhbDtpZih0eXBlb2Yga2V5PT0ibnVtYmVyIil7XzE2Nz0iXCIi
K2tleSsiXCIiO31lbHNle2lmKHR5cGVvZiBrZXk9PSJzdHJpbmciKXtfMTY3PWRvam8uX2VzY2Fw
ZVN0cmluZyhrZXkpO31lbHNle2NvbnRpbnVlO319dmFsPV8xNjIoaXRba2V5XSxfMTVmLF8xNjQp
O2lmKHR5cGVvZiB2YWwhPSJzdHJpbmciKXtjb250aW51ZTt9XzE2Ni5wdXNoKF8xNjUrXzE2NCtf
MTY3KyI6IitzZXArdmFsKTt9cmV0dXJuICJ7IitfMTY2LmpvaW4oIiwiK3NlcCkrXzE2NStfMTYw
KyJ9Ijt9O31pZighZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuQ29sb3IiXSl7ZG9qby5f
aGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuQ29sb3IiXT10cnVlO2Rvam8ucHJvdmlkZSgiZG9qby5f
YmFzZS5Db2xvciIpOyhmdW5jdGlvbigpe3ZhciBkPWRvam87ZG9qby5Db2xvcj1mdW5jdGlvbihf
MTY4KXtpZihfMTY4KXt0aGlzLnNldENvbG9yKF8xNjgpO319O2Rvam8uQ29sb3IubmFtZWQ9e2Js
YWNrOlswLDAsMF0sc2lsdmVyOlsxOTIsMTkyLDE5Ml0sZ3JheTpbMTI4LDEyOCwxMjhdLHdoaXRl
OlsyNTUsMjU1LDI1NV0sbWFyb29uOlsxMjgsMCwwXSxyZWQ6WzI1NSwwLDBdLHB1cnBsZTpbMTI4
LDAsMTI4XSxmdWNoc2lhOlsyNTUsMCwyNTVdLGdyZWVuOlswLDEyOCwwXSxsaW1lOlswLDI1NSww
XSxvbGl2ZTpbMTI4LDEyOCwwXSx5ZWxsb3c6WzI1NSwyNTUsMF0sbmF2eTpbMCwwLDEyOF0sYmx1
ZTpbMCwwLDI1NV0sdGVhbDpbMCwxMjgsMTI4XSxhcXVhOlswLDI1NSwyNTVdLHRyYW5zcGFyZW50
OmQuY29uZmlnLnRyYW5zcGFyZW50Q29sb3J8fFsyNTUsMjU1LDI1NV19O2Rvam8uZXh0ZW5kKGRv
am8uQ29sb3Ise3I6MjU1LGc6MjU1LGI6MjU1LGE6MSxfc2V0OmZ1bmN0aW9uKHIsZyxiLGEpe3Zh
ciB0PXRoaXM7dC5yPXI7dC5nPWc7dC5iPWI7dC5hPWE7fSxzZXRDb2xvcjpmdW5jdGlvbihfMTY5
KXtpZihkLmlzU3RyaW5nKF8xNjkpKXtkLmNvbG9yRnJvbVN0cmluZyhfMTY5LHRoaXMpO31lbHNl
e2lmKGQuaXNBcnJheShfMTY5KSl7ZC5jb2xvckZyb21BcnJheShfMTY5LHRoaXMpO31lbHNle3Ro
aXMuX3NldChfMTY5LnIsXzE2OS5nLF8xNjkuYixfMTY5LmEpO2lmKCEoXzE2OSBpbnN0YW5jZW9m
IGQuQ29sb3IpKXt0aGlzLnNhbml0aXplKCk7fX19cmV0dXJuIHRoaXM7fSxzYW5pdGl6ZTpmdW5j
dGlvbigpe3JldHVybiB0aGlzO30sdG9SZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBb
dC5yLHQuZyx0LmJdO30sdG9SZ2JhOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gW3Qucix0
LmcsdC5iLHQuYV07fSx0b0hleDpmdW5jdGlvbigpe3ZhciBhcnI9ZC5tYXAoWyJyIiwiZyIsImIi
XSxmdW5jdGlvbih4KXt2YXIgcz10aGlzW3hdLnRvU3RyaW5nKDE2KTtyZXR1cm4gcy5sZW5ndGg8
Mj8iMCIrczpzO30sdGhpcyk7cmV0dXJuICIjIithcnIuam9pbigiIik7fSx0b0NzczpmdW5jdGlv
bihfMTZhKXt2YXIgdD10aGlzLHJnYj10LnIrIiwgIit0LmcrIiwgIit0LmI7cmV0dXJuIChfMTZh
PyJyZ2JhKCIrcmdiKyIsICIrdC5hOiJyZ2IoIityZ2IpKyIpIjt9LHRvU3RyaW5nOmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMudG9Dc3ModHJ1ZSk7fX0pO2Rvam8uYmxlbmRDb2xvcnM9ZnVuY3Rpb24o
XzE2YixlbmQsXzE2YyxvYmope3ZhciB0PW9ianx8bmV3IGQuQ29sb3IoKTtkLmZvckVhY2goWyJy
IiwiZyIsImIiLCJhIl0sZnVuY3Rpb24oeCl7dFt4XT1fMTZiW3hdKyhlbmRbeF0tXzE2Ylt4XSkq
XzE2YztpZih4IT0iYSIpe3RbeF09TWF0aC5yb3VuZCh0W3hdKTt9fSk7cmV0dXJuIHQuc2FuaXRp
emUoKTt9O2Rvam8uY29sb3JGcm9tUmdiPWZ1bmN0aW9uKF8xNmQsb2JqKXt2YXIgbT1fMTZkLnRv
TG93ZXJDYXNlKCkubWF0Y2goL15yZ2JhP1woKFtcc1wuLDAtOV0rKVwpLyk7cmV0dXJuIG0mJmRv
am8uY29sb3JGcm9tQXJyYXkobVsxXS5zcGxpdCgvXHMqLFxzKi8pLG9iaik7fTtkb2pvLmNvbG9y
RnJvbUhleD1mdW5jdGlvbihfMTZlLG9iail7dmFyIHQ9b2JqfHxuZXcgZC5Db2xvcigpLGJpdHM9
KF8xNmUubGVuZ3RoPT00KT80OjgsbWFzaz0oMTw8Yml0cyktMTtfMTZlPU51bWJlcigiMHgiK18x
NmUuc3Vic3RyKDEpKTtpZihpc05hTihfMTZlKSl7cmV0dXJuIG51bGw7fWQuZm9yRWFjaChbImIi
LCJnIiwiciJdLGZ1bmN0aW9uKHgpe3ZhciBjPV8xNmUmbWFzaztfMTZlPj49Yml0czt0W3hdPWJp
dHM9PTQ/MTcqYzpjO30pO3QuYT0xO3JldHVybiB0O307ZG9qby5jb2xvckZyb21BcnJheT1mdW5j
dGlvbihhLG9iail7dmFyIHQ9b2JqfHxuZXcgZC5Db2xvcigpO3QuX3NldChOdW1iZXIoYVswXSks
TnVtYmVyKGFbMV0pLE51bWJlcihhWzJdKSxOdW1iZXIoYVszXSkpO2lmKGlzTmFOKHQuYSkpe3Qu
YT0xO31yZXR1cm4gdC5zYW5pdGl6ZSgpO307ZG9qby5jb2xvckZyb21TdHJpbmc9ZnVuY3Rpb24o
c3RyLG9iail7dmFyIGE9ZC5Db2xvci5uYW1lZFtzdHJdO3JldHVybiBhJiZkLmNvbG9yRnJvbUFy
cmF5KGEsb2JqKXx8ZC5jb2xvckZyb21SZ2Ioc3RyLG9iail8fGQuY29sb3JGcm9tSGV4KHN0cixv
YmopO307fSkoKTt9aWYoIWRvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLndpbmRvdyJdKXtk
b2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS53aW5kb3ciXT10cnVlO2Rvam8ucHJvdmlkZSgi
ZG9qby5fYmFzZS53aW5kb3ciKTtkb2pvLmRvYz13aW5kb3dbImRvY3VtZW50Il18fG51bGw7ZG9q
by5ib2R5PWZ1bmN0aW9uKCl7cmV0dXJuIGRvam8uZG9jLmJvZHl8fGRvam8uZG9jLmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJib2R5IilbMF07fTtkb2pvLnNldENvbnRleHQ9ZnVuY3Rpb24oXzE2Zixf
MTcwKXtkb2pvLmdsb2JhbD1fMTZmO2Rvam8uZG9jPV8xNzA7fTtkb2pvLndpdGhHbG9iYWw9ZnVu
Y3Rpb24oXzE3MSxfMTcyLF8xNzMsXzE3NCl7dmFyIF8xNzU9ZG9qby5nbG9iYWw7dHJ5e2Rvam8u
Z2xvYmFsPV8xNzE7cmV0dXJuIGRvam8ud2l0aERvYy5jYWxsKG51bGwsXzE3MS5kb2N1bWVudCxf
MTcyLF8xNzMsXzE3NCk7fWZpbmFsbHl7ZG9qby5nbG9iYWw9XzE3NTt9fTtkb2pvLndpdGhEb2M9
ZnVuY3Rpb24oXzE3NixfMTc3LF8xNzgsXzE3OSl7dmFyIF8xN2E9ZG9qby5kb2MsXzE3Yj1kb2pv
Ll9ib2R5THRyLG9sZFE9ZG9qby5pc1F1aXJrczt0cnl7ZG9qby5kb2M9XzE3NjtkZWxldGUgZG9q
by5fYm9keUx0cjtkb2pvLmlzUXVpcmtzPWRvam8uZG9jLmNvbXBhdE1vZGU9PSJCYWNrQ29tcGF0
IjtpZihfMTc4JiZ0eXBlb2YgXzE3Nz09InN0cmluZyIpe18xNzc9XzE3OFtfMTc3XTt9cmV0dXJu
IF8xNzcuYXBwbHkoXzE3OCxfMTc5fHxbXSk7fWZpbmFsbHl7ZG9qby5kb2M9XzE3YTtkZWxldGUg
ZG9qby5fYm9keUx0cjtpZihfMTdiIT09dW5kZWZpbmVkKXtkb2pvLl9ib2R5THRyPV8xN2I7fWRv
am8uaXNRdWlya3M9b2xkUTt9fTt9aWYoIWRvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmV2
ZW50Il0pe2Rvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmV2ZW50Il09dHJ1ZTtkb2pvLnBy
b3ZpZGUoImRvam8uX2Jhc2UuZXZlbnQiKTsoZnVuY3Rpb24oKXt2YXIgZGVsPShkb2pvLl9ldmVu
dF9saXN0ZW5lcj17YWRkOmZ1bmN0aW9uKG5vZGUsbmFtZSxmcCl7aWYoIW5vZGUpe3JldHVybjt9
bmFtZT1kZWwuX25vcm1hbGl6ZUV2ZW50TmFtZShuYW1lKTtmcD1kZWwuX2ZpeENhbGxiYWNrKG5h
bWUsZnApO2lmKCFkb2pvLmlzSUUmJihuYW1lPT0ibW91c2VlbnRlciJ8fG5hbWU9PSJtb3VzZWxl
YXZlIikpe3ZhciBvZnA9ZnA7bmFtZT0obmFtZT09Im1vdXNlZW50ZXIiKT8ibW91c2VvdmVyIjoi
bW91c2VvdXQiO2ZwPWZ1bmN0aW9uKGUpe2lmKCFkb2pvLmlzRGVzY2VuZGFudChlLnJlbGF0ZWRU
YXJnZXQsbm9kZSkpe3JldHVybiBvZnAuY2FsbCh0aGlzLGUpO319O31ub2RlLmFkZEV2ZW50TGlz
dGVuZXIobmFtZSxmcCxmYWxzZSk7cmV0dXJuIGZwO30scmVtb3ZlOmZ1bmN0aW9uKG5vZGUsXzE3
YyxfMTdkKXtpZihub2RlKXtfMTdjPWRlbC5fbm9ybWFsaXplRXZlbnROYW1lKF8xN2MpO2lmKCFk
b2pvLmlzSUUmJihfMTdjPT0ibW91c2VlbnRlciJ8fF8xN2M9PSJtb3VzZWxlYXZlIikpe18xN2M9
KF8xN2M9PSJtb3VzZWVudGVyIik/Im1vdXNlb3ZlciI6Im1vdXNlb3V0Ijt9bm9kZS5yZW1vdmVF
dmVudExpc3RlbmVyKF8xN2MsXzE3ZCxmYWxzZSk7fX0sX25vcm1hbGl6ZUV2ZW50TmFtZTpmdW5j
dGlvbihuYW1lKXtyZXR1cm4gbmFtZS5zbGljZSgwLDIpPT0ib24iP25hbWUuc2xpY2UoMik6bmFt
ZTt9LF9maXhDYWxsYmFjazpmdW5jdGlvbihuYW1lLGZwKXtyZXR1cm4gbmFtZSE9ImtleXByZXNz
Ij9mcDpmdW5jdGlvbihlKXtyZXR1cm4gZnAuY2FsbCh0aGlzLGRlbC5fZml4RXZlbnQoZSx0aGlz
KSk7fTt9LF9maXhFdmVudDpmdW5jdGlvbihldnQsXzE3ZSl7c3dpdGNoKGV2dC50eXBlKXtjYXNl
ICJrZXlwcmVzcyI6ZGVsLl9zZXRLZXlDaGFyKGV2dCk7YnJlYWs7fXJldHVybiBldnQ7fSxfc2V0
S2V5Q2hhcjpmdW5jdGlvbihldnQpe2V2dC5rZXlDaGFyPWV2dC5jaGFyQ29kZT49MzI/U3RyaW5n
LmZyb21DaGFyQ29kZShldnQuY2hhckNvZGUpOiIiO2V2dC5jaGFyT3JDb2RlPWV2dC5rZXlDaGFy
fHxldnQua2V5Q29kZTt9LF9wdW5jdE1hcDp7MTA2OjQyLDExMTo0NywxODY6NTksMTg3OjQzLDE4
ODo0NCwxODk6NDUsMTkwOjQ2LDE5MTo0NywxOTI6OTYsMjE5OjkxLDIyMDo5MiwyMjE6OTMsMjIy
OjM5fX0pO2Rvam8uZml4RXZlbnQ9ZnVuY3Rpb24oZXZ0LF8xN2Ype3JldHVybiBkZWwuX2ZpeEV2
ZW50KGV2dCxfMTdmKTt9O2Rvam8uc3RvcEV2ZW50PWZ1bmN0aW9uKGV2dCl7ZXZ0LnByZXZlbnRE
ZWZhdWx0KCk7ZXZ0LnN0b3BQcm9wYWdhdGlvbigpO307dmFyIF8xODA9ZG9qby5fbGlzdGVuZXI7
ZG9qby5fY29ubmVjdD1mdW5jdGlvbihvYmosXzE4MSxfMTgyLF8xODMsXzE4NCl7dmFyIF8xODU9
b2JqJiYob2JqLm5vZGVUeXBlfHxvYmouYXR0YWNoRXZlbnR8fG9iai5hZGRFdmVudExpc3RlbmVy
KTt2YXIgbGlkPV8xODU/KF8xODQ/MjoxKTowLGw9W2Rvam8uX2xpc3RlbmVyLGRlbCxfMTgwXVts
aWRdO3ZhciBoPWwuYWRkKG9iaixfMTgxLGRvam8uaGl0Y2goXzE4MixfMTgzKSk7cmV0dXJuIFtv
YmosXzE4MSxoLGxpZF07fTtkb2pvLl9kaXNjb25uZWN0PWZ1bmN0aW9uKG9iaixfMTg2LF8xODcs
XzE4OCl7KFtkb2pvLl9saXN0ZW5lcixkZWwsXzE4MF1bXzE4OF0pLnJlbW92ZShvYmosXzE4Nixf
MTg3KTt9O2Rvam8ua2V5cz17QkFDS1NQQUNFOjgsVEFCOjksQ0xFQVI6MTIsRU5URVI6MTMsU0hJ
RlQ6MTYsQ1RSTDoxNyxBTFQ6MTgsTUVUQTpkb2pvLmlzU2FmYXJpPzkxOjIyNCxQQVVTRToxOSxD
QVBTX0xPQ0s6MjAsRVNDQVBFOjI3LFNQQUNFOjMyLFBBR0VfVVA6MzMsUEFHRV9ET1dOOjM0LEVO
RDozNSxIT01FOjM2LExFRlRfQVJST1c6MzcsVVBfQVJST1c6MzgsUklHSFRfQVJST1c6MzksRE9X
Tl9BUlJPVzo0MCxJTlNFUlQ6NDUsREVMRVRFOjQ2LEhFTFA6NDcsTEVGVF9XSU5ET1c6OTEsUklH
SFRfV0lORE9XOjkyLFNFTEVDVDo5MyxOVU1QQURfMDo5NixOVU1QQURfMTo5NyxOVU1QQURfMjo5
OCxOVU1QQURfMzo5OSxOVU1QQURfNDoxMDAsTlVNUEFEXzU6MTAxLE5VTVBBRF82OjEwMixOVU1Q
QURfNzoxMDMsTlVNUEFEXzg6MTA0LE5VTVBBRF85OjEwNSxOVU1QQURfTVVMVElQTFk6MTA2LE5V
TVBBRF9QTFVTOjEwNyxOVU1QQURfRU5URVI6MTA4LE5VTVBBRF9NSU5VUzoxMDksTlVNUEFEX1BF
UklPRDoxMTAsTlVNUEFEX0RJVklERToxMTEsRjE6MTEyLEYyOjExMyxGMzoxMTQsRjQ6MTE1LEY1
OjExNixGNjoxMTcsRjc6MTE4LEY4OjExOSxGOToxMjAsRjEwOjEyMSxGMTE6MTIyLEYxMjoxMjMs
RjEzOjEyNCxGMTQ6MTI1LEYxNToxMjYsTlVNX0xPQ0s6MTQ0LFNDUk9MTF9MT0NLOjE0NSxjb3B5
S2V5OmRvam8uaXNNYWMmJiFkb2pvLmlzQUlSPyhkb2pvLmlzU2FmYXJpPzkxOjIyNCk6MTd9O3Zh
ciBfMTg5PWRvam8uaXNNYWM/Im1ldGFLZXkiOiJjdHJsS2V5Ijtkb2pvLmlzQ29weUtleT1mdW5j
dGlvbihlKXtyZXR1cm4gZVtfMTg5XTt9O2lmKGRvam8uaXNJRTw5fHwoZG9qby5pc0lFJiZkb2pv
LmlzUXVpcmtzKSl7ZG9qby5tb3VzZUJ1dHRvbnM9e0xFRlQ6MSxNSURETEU6NCxSSUdIVDoyLGlz
QnV0dG9uOmZ1bmN0aW9uKGUsXzE4YSl7cmV0dXJuIGUuYnV0dG9uJl8xOGE7fSxpc0xlZnQ6ZnVu
Y3Rpb24oZSl7cmV0dXJuIGUuYnV0dG9uJjE7fSxpc01pZGRsZTpmdW5jdGlvbihlKXtyZXR1cm4g
ZS5idXR0b24mNDt9LGlzUmlnaHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYnV0dG9uJjI7fX07fWVs
c2V7ZG9qby5tb3VzZUJ1dHRvbnM9e0xFRlQ6MCxNSURETEU6MSxSSUdIVDoyLGlzQnV0dG9uOmZ1
bmN0aW9uKGUsXzE4Yil7cmV0dXJuIGUuYnV0dG9uPT1fMThiO30saXNMZWZ0OmZ1bmN0aW9uKGUp
e3JldHVybiBlLmJ1dHRvbj09MDt9LGlzTWlkZGxlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmJ1dHRv
bj09MTt9LGlzUmlnaHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYnV0dG9uPT0yO319O31pZihkb2pv
LmlzSUUpe3ZhciBfMThjPWZ1bmN0aW9uKGUsY29kZSl7dHJ5e3JldHVybiAoZS5rZXlDb2RlPWNv
ZGUpO31jYXRjaChlKXtyZXR1cm4gMDt9fTt2YXIgaWVsPWRvam8uX2xpc3RlbmVyO3ZhciBfMThk
PShkb2pvLl9pZUxpc3RlbmVyc05hbWU9Il8iK2Rvam8uX3Njb3BlTmFtZSsiX2xpc3RlbmVycyIp
O2lmKCFkb2pvLmNvbmZpZy5fYWxsb3dfbGVha3Mpe18xODA9aWVsPWRvam8uX2llX2xpc3RlbmVy
PXtoYW5kbGVyczpbXSxhZGQ6ZnVuY3Rpb24oXzE4ZSxfMThmLF8xOTApe18xOGU9XzE4ZXx8ZG9q
by5nbG9iYWw7dmFyIGY9XzE4ZVtfMThmXTtpZighZnx8IWZbXzE4ZF0pe3ZhciBkPWRvam8uX2dl
dEllRGlzcGF0Y2hlcigpO2QudGFyZ2V0PWYmJihpZWgucHVzaChmKS0xKTtkW18xOGRdPVtdO2Y9
XzE4ZVtfMThmXT1kO31yZXR1cm4gZltfMThkXS5wdXNoKGllaC5wdXNoKF8xOTApLTEpO30scmVt
b3ZlOmZ1bmN0aW9uKF8xOTEsXzE5MixfMTkzKXt2YXIgZj0oXzE5MXx8ZG9qby5nbG9iYWwpW18x
OTJdLGw9ZiYmZltfMThkXTtpZihmJiZsJiZfMTkzLS0pe2RlbGV0ZSBpZWhbbFtfMTkzXV07ZGVs
ZXRlIGxbXzE5M107fX19O3ZhciBpZWg9aWVsLmhhbmRsZXJzO31kb2pvLm1peGluKGRlbCx7YWRk
OmZ1bmN0aW9uKG5vZGUsXzE5NCxmcCl7aWYoIW5vZGUpe3JldHVybjt9XzE5ND1kZWwuX25vcm1h
bGl6ZUV2ZW50TmFtZShfMTk0KTtpZihfMTk0PT0ib25rZXlwcmVzcyIpe3ZhciBrZD1ub2RlLm9u
a2V5ZG93bjtpZigha2R8fCFrZFtfMThkXXx8IWtkLl9zdGVhbHRoS2V5ZG93bkhhbmRsZSl7dmFy
IGg9ZGVsLmFkZChub2RlLCJvbmtleWRvd24iLGRlbC5fc3RlYWx0aEtleURvd24pO2tkPW5vZGUu
b25rZXlkb3duO2tkLl9zdGVhbHRoS2V5ZG93bkhhbmRsZT1oO2tkLl9zdGVhbHRoS2V5ZG93blJl
ZnM9MTt9ZWxzZXtrZC5fc3RlYWx0aEtleWRvd25SZWZzKys7fX1yZXR1cm4gaWVsLmFkZChub2Rl
LF8xOTQsZGVsLl9maXhDYWxsYmFjayhmcCkpO30scmVtb3ZlOmZ1bmN0aW9uKG5vZGUsXzE5NSxf
MTk2KXtfMTk1PWRlbC5fbm9ybWFsaXplRXZlbnROYW1lKF8xOTUpO2llbC5yZW1vdmUobm9kZSxf
MTk1LF8xOTYpO2lmKF8xOTU9PSJvbmtleXByZXNzIil7dmFyIGtkPW5vZGUub25rZXlkb3duO2lm
KC0ta2QuX3N0ZWFsdGhLZXlkb3duUmVmczw9MCl7aWVsLnJlbW92ZShub2RlLCJvbmtleWRvd24i
LGtkLl9zdGVhbHRoS2V5ZG93bkhhbmRsZSk7ZGVsZXRlIGtkLl9zdGVhbHRoS2V5ZG93bkhhbmRs
ZTt9fX0sX25vcm1hbGl6ZUV2ZW50TmFtZTpmdW5jdGlvbihfMTk3KXtyZXR1cm4gXzE5Ny5zbGlj
ZSgwLDIpIT0ib24iPyJvbiIrXzE5NzpfMTk3O30sX25vcDpmdW5jdGlvbigpe30sX2ZpeEV2ZW50
OmZ1bmN0aW9uKGV2dCxfMTk4KXtpZighZXZ0KXt2YXIgdz1fMTk4JiYoXzE5OC5vd25lckRvY3Vt
ZW50fHxfMTk4LmRvY3VtZW50fHxfMTk4KS5wYXJlbnRXaW5kb3d8fHdpbmRvdztldnQ9dy5ldmVu
dDt9aWYoIWV2dCl7cmV0dXJuIChldnQpO31ldnQudGFyZ2V0PWV2dC5zcmNFbGVtZW50O2V2dC5j
dXJyZW50VGFyZ2V0PShfMTk4fHxldnQuc3JjRWxlbWVudCk7ZXZ0LmxheWVyWD1ldnQub2Zmc2V0
WDtldnQubGF5ZXJZPWV2dC5vZmZzZXRZO3ZhciBzZT1ldnQuc3JjRWxlbWVudCxkb2M9KHNlJiZz
ZS5vd25lckRvY3VtZW50KXx8ZG9jdW1lbnQ7dmFyIF8xOTk9KChkb2pvLmlzSUU8Nil8fChkb2Nb
ImNvbXBhdE1vZGUiXT09IkJhY2tDb21wYXQiKSk/ZG9jLmJvZHk6ZG9jLmRvY3VtZW50RWxlbWVu
dDt2YXIgXzE5YT1kb2pvLl9nZXRJZURvY3VtZW50RWxlbWVudE9mZnNldCgpO2V2dC5wYWdlWD1l
dnQuY2xpZW50WCtkb2pvLl9maXhJZUJpRGlTY3JvbGxMZWZ0KF8xOTkuc2Nyb2xsTGVmdHx8MCkt
XzE5YS54O2V2dC5wYWdlWT1ldnQuY2xpZW50WSsoXzE5OS5zY3JvbGxUb3B8fDApLV8xOWEueTtp
ZihldnQudHlwZT09Im1vdXNlb3ZlciIpe2V2dC5yZWxhdGVkVGFyZ2V0PWV2dC5mcm9tRWxlbWVu
dDt9aWYoZXZ0LnR5cGU9PSJtb3VzZW91dCIpe2V2dC5yZWxhdGVkVGFyZ2V0PWV2dC50b0VsZW1l
bnQ7fWlmKGRvam8uaXNJRTw5fHxkb2pvLmlzUXVpcmtzKXtldnQuc3RvcFByb3BhZ2F0aW9uPWRl
bC5fc3RvcFByb3BhZ2F0aW9uO2V2dC5wcmV2ZW50RGVmYXVsdD1kZWwuX3ByZXZlbnREZWZhdWx0
O31yZXR1cm4gZGVsLl9maXhLZXlzKGV2dCk7fSxfZml4S2V5czpmdW5jdGlvbihldnQpe3N3aXRj
aChldnQudHlwZSl7Y2FzZSAia2V5cHJlc3MiOnZhciBjPSgiY2hhckNvZGUiIGluIGV2dD9ldnQu
Y2hhckNvZGU6ZXZ0LmtleUNvZGUpO2lmKGM9PTEwKXtjPTA7ZXZ0LmtleUNvZGU9MTM7fWVsc2V7
aWYoYz09MTN8fGM9PTI3KXtjPTA7fWVsc2V7aWYoYz09Myl7Yz05OTt9fX1ldnQuY2hhckNvZGU9
YztkZWwuX3NldEtleUNoYXIoZXZ0KTticmVhazt9cmV0dXJuIGV2dDt9LF9zdGVhbHRoS2V5RG93
bjpmdW5jdGlvbihldnQpe3ZhciBrcD1ldnQuY3VycmVudFRhcmdldC5vbmtleXByZXNzO2lmKCFr
cHx8IWtwW18xOGRdKXtyZXR1cm47fXZhciBrPWV2dC5rZXlDb2RlO3ZhciBfMTliPShrIT0xM3x8
KGRvam8uaXNJRT49OSYmIWRvam8uaXNRdWlya3MpKSYmayE9MzImJmshPTI3JiYoazw0OHx8az45
MCkmJihrPDk2fHxrPjExMSkmJihrPDE4Nnx8az4xOTIpJiYoazwyMTl8fGs+MjIyKTtpZihfMTli
fHxldnQuY3RybEtleSl7dmFyIGM9XzE5Yj8wOms7aWYoZXZ0LmN0cmxLZXkpe2lmKGs9PTN8fGs9
PTEzKXtyZXR1cm47fWVsc2V7aWYoYz45NSYmYzwxMDYpe2MtPTQ4O31lbHNle2lmKCghZXZ0LnNo
aWZ0S2V5KSYmKGM+PTY1JiZjPD05MCkpe2MrPTMyO31lbHNle2M9ZGVsLl9wdW5jdE1hcFtjXXx8
Yzt9fX19dmFyIGZhdXg9ZGVsLl9zeW50aGVzaXplRXZlbnQoZXZ0LHt0eXBlOiJrZXlwcmVzcyIs
ZmF1eDp0cnVlLGNoYXJDb2RlOmN9KTtrcC5jYWxsKGV2dC5jdXJyZW50VGFyZ2V0LGZhdXgpO2lm
KGRvam8uaXNJRTw5fHwoZG9qby5pc0lFJiZkb2pvLmlzUXVpcmtzKSl7ZXZ0LmNhbmNlbEJ1YmJs
ZT1mYXV4LmNhbmNlbEJ1YmJsZTt9ZXZ0LnJldHVyblZhbHVlPWZhdXgucmV0dXJuVmFsdWU7XzE4
YyhldnQsZmF1eC5rZXlDb2RlKTt9fSxfc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5j
YW5jZWxCdWJibGU9dHJ1ZTt9LF9wcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuYnViYmxl
ZEtleUNvZGU9dGhpcy5rZXlDb2RlO2lmKHRoaXMuY3RybEtleSl7XzE4Yyh0aGlzLDApO310aGlz
LnJldHVyblZhbHVlPWZhbHNlO319KTtkb2pvLnN0b3BFdmVudD0oZG9qby5pc0lFPDl8fGRvam8u
aXNRdWlya3MpP2Z1bmN0aW9uKGV2dCl7ZXZ0PWV2dHx8d2luZG93LmV2ZW50O2RlbC5fc3RvcFBy
b3BhZ2F0aW9uLmNhbGwoZXZ0KTtkZWwuX3ByZXZlbnREZWZhdWx0LmNhbGwoZXZ0KTt9OmRvam8u
c3RvcEV2ZW50O31kZWwuX3N5bnRoZXNpemVFdmVudD1mdW5jdGlvbihldnQsXzE5Yyl7dmFyIGZh
dXg9ZG9qby5taXhpbih7fSxldnQsXzE5Yyk7ZGVsLl9zZXRLZXlDaGFyKGZhdXgpO2ZhdXgucHJl
dmVudERlZmF1bHQ9ZnVuY3Rpb24oKXtldnQucHJldmVudERlZmF1bHQoKTt9O2ZhdXguc3RvcFBy
b3BhZ2F0aW9uPWZ1bmN0aW9uKCl7ZXZ0LnN0b3BQcm9wYWdhdGlvbigpO307cmV0dXJuIGZhdXg7
fTtpZihkb2pvLmlzT3BlcmEpe2Rvam8ubWl4aW4oZGVsLHtfZml4RXZlbnQ6ZnVuY3Rpb24oZXZ0
LF8xOWQpe3N3aXRjaChldnQudHlwZSl7Y2FzZSAia2V5cHJlc3MiOnZhciBjPWV2dC53aGljaDtp
ZihjPT0zKXtjPTk5O31jPWM8NDEmJiFldnQuc2hpZnRLZXk/MDpjO2lmKGV2dC5jdHJsS2V5JiYh
ZXZ0LnNoaWZ0S2V5JiZjPj02NSYmYzw9OTApe2MrPTMyO31yZXR1cm4gZGVsLl9zeW50aGVzaXpl
RXZlbnQoZXZ0LHtjaGFyQ29kZTpjfSk7fXJldHVybiBldnQ7fX0pO31pZihkb2pvLmlzV2ViS2l0
KXtkZWwuX2FkZD1kZWwuYWRkO2RlbC5fcmVtb3ZlPWRlbC5yZW1vdmU7ZG9qby5taXhpbihkZWws
e2FkZDpmdW5jdGlvbihub2RlLF8xOWUsZnApe2lmKCFub2RlKXtyZXR1cm47fXZhciBfMTlmPWRl
bC5fYWRkKG5vZGUsXzE5ZSxmcCk7aWYoZGVsLl9ub3JtYWxpemVFdmVudE5hbWUoXzE5ZSk9PSJr
ZXlwcmVzcyIpe18xOWYuX3N0ZWFsdGhLZXlEb3duSGFuZGxlPWRlbC5fYWRkKG5vZGUsImtleWRv
d24iLGZ1bmN0aW9uKGV2dCl7dmFyIGs9ZXZ0LmtleUNvZGU7dmFyIF8xYTA9ayE9MTMmJmshPTMy
JiYoazw0OHx8az45MCkmJihrPDk2fHxrPjExMSkmJihrPDE4Nnx8az4xOTIpJiYoazwyMTl8fGs+
MjIyKTtpZihfMWEwfHxldnQuY3RybEtleSl7dmFyIGM9XzFhMD8wOms7aWYoZXZ0LmN0cmxLZXkp
e2lmKGs9PTN8fGs9PTEzKXtyZXR1cm47fWVsc2V7aWYoYz45NSYmYzwxMDYpe2MtPTQ4O31lbHNl
e2lmKCFldnQuc2hpZnRLZXkmJmM+PTY1JiZjPD05MCl7Yys9MzI7fWVsc2V7Yz1kZWwuX3B1bmN0
TWFwW2NdfHxjO319fX12YXIgZmF1eD1kZWwuX3N5bnRoZXNpemVFdmVudChldnQse3R5cGU6Imtl
eXByZXNzIixmYXV4OnRydWUsY2hhckNvZGU6Y30pO2ZwLmNhbGwoZXZ0LmN1cnJlbnRUYXJnZXQs
ZmF1eCk7fX0pO31yZXR1cm4gXzE5Zjt9LHJlbW92ZTpmdW5jdGlvbihub2RlLF8xYTEsXzFhMil7
aWYobm9kZSl7aWYoXzFhMi5fc3RlYWx0aEtleURvd25IYW5kbGUpe2RlbC5fcmVtb3ZlKG5vZGUs
ImtleWRvd24iLF8xYTIuX3N0ZWFsdGhLZXlEb3duSGFuZGxlKTt9ZGVsLl9yZW1vdmUobm9kZSxf
MWExLF8xYTIpO319LF9maXhFdmVudDpmdW5jdGlvbihldnQsXzFhMyl7c3dpdGNoKGV2dC50eXBl
KXtjYXNlICJrZXlwcmVzcyI6aWYoZXZ0LmZhdXgpe3JldHVybiBldnQ7fXZhciBjPWV2dC5jaGFy
Q29kZTtjPWM+PTMyP2M6MDtyZXR1cm4gZGVsLl9zeW50aGVzaXplRXZlbnQoZXZ0LHtjaGFyQ29k
ZTpjLGZhdXg6dHJ1ZX0pO31yZXR1cm4gZXZ0O319KTt9fSkoKTtpZihkb2pvLmlzSUUpe2Rvam8u
X2llRGlzcGF0Y2hlcj1mdW5jdGlvbihhcmdzLF8xYTQpe3ZhciBhcD1BcnJheS5wcm90b3R5cGUs
aD1kb2pvLl9pZV9saXN0ZW5lci5oYW5kbGVycyxjPWFyZ3MuY2FsbGVlLGxzPWNbZG9qby5faWVM
aXN0ZW5lcnNOYW1lXSx0PWhbYy50YXJnZXRdO3ZhciByPXQmJnQuYXBwbHkoXzFhNCxhcmdzKTt2
YXIgbGxzPVtdLmNvbmNhdChscyk7Zm9yKHZhciBpIGluIGxscyl7dmFyIGY9aFtsbHNbaV1dO2lm
KCEoaSBpbiBhcCkmJmYpe2YuYXBwbHkoXzFhNCxhcmdzKTt9fXJldHVybiByO307ZG9qby5fZ2V0
SWVEaXNwYXRjaGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGdW5jdGlvbihkb2pvLl9zY29wZU5h
bWUrIi5faWVEaXNwYXRjaGVyKGFyZ3VtZW50cywgdGhpcykiKTt9O2Rvam8uX2V2ZW50X2xpc3Rl
bmVyLl9maXhDYWxsYmFjaz1mdW5jdGlvbihmcCl7dmFyIGY9ZG9qby5fZXZlbnRfbGlzdGVuZXIu
X2ZpeEV2ZW50O3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnAuY2FsbCh0aGlzLGYoZSx0aGlz
KSk7fTt9O319aWYoIWRvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmh0bWwiXSl7ZG9qby5f
aGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuaHRtbCJdPXRydWU7ZG9qby5wcm92aWRlKCJkb2pvLl9i
YXNlLmh0bWwiKTt0cnl7ZG9jdW1lbnQuZXhlY0NvbW1hbmQoIkJhY2tncm91bmRJbWFnZUNhY2hl
IixmYWxzZSx0cnVlKTt9Y2F0Y2goZSl7fWlmKGRvam8uaXNJRSl7ZG9qby5ieUlkPWZ1bmN0aW9u
KGlkLGRvYyl7aWYodHlwZW9mIGlkIT0ic3RyaW5nIil7cmV0dXJuIGlkO312YXIgXzFhNT1kb2N8
fGRvam8uZG9jLHRlPV8xYTUuZ2V0RWxlbWVudEJ5SWQoaWQpO2lmKHRlJiYodGUuYXR0cmlidXRl
cy5pZC52YWx1ZT09aWR8fHRlLmlkPT1pZCkpe3JldHVybiB0ZTt9ZWxzZXt2YXIgZWxlcz1fMWE1
LmFsbFtpZF07aWYoIWVsZXN8fGVsZXMubm9kZU5hbWUpe2VsZXM9W2VsZXNdO312YXIgaT0wO3do
aWxlKCh0ZT1lbGVzW2krK10pKXtpZigodGUuYXR0cmlidXRlcyYmdGUuYXR0cmlidXRlcy5pZCYm
dGUuYXR0cmlidXRlcy5pZC52YWx1ZT09aWQpfHx0ZS5pZD09aWQpe3JldHVybiB0ZTt9fX19O31l
bHNle2Rvam8uYnlJZD1mdW5jdGlvbihpZCxkb2Mpe3JldHVybiAoKHR5cGVvZiBpZD09InN0cmlu
ZyIpPyhkb2N8fGRvam8uZG9jKS5nZXRFbGVtZW50QnlJZChpZCk6aWQpfHxudWxsO307fShmdW5j
dGlvbigpe3ZhciBkPWRvam87dmFyIGJ5SWQ9ZC5ieUlkO3ZhciBfMWE2PW51bGwsXzFhNztkLmFk
ZE9uV2luZG93VW5sb2FkKGZ1bmN0aW9uKCl7XzFhNj1udWxsO30pO2Rvam8uX2Rlc3Ryb3lFbGVt
ZW50PWRvam8uZGVzdHJveT1mdW5jdGlvbihub2RlKXtub2RlPWJ5SWQobm9kZSk7dHJ5e3ZhciBk
b2M9bm9kZS5vd25lckRvY3VtZW50O2lmKCFfMWE2fHxfMWE3IT1kb2Mpe18xYTY9ZG9jLmNyZWF0
ZUVsZW1lbnQoImRpdiIpO18xYTc9ZG9jO31fMWE2LmFwcGVuZENoaWxkKG5vZGUucGFyZW50Tm9k
ZT9ub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk6bm9kZSk7XzFhNi5pbm5lckhUTUw9
IiI7fWNhdGNoKGUpe319O2Rvam8uaXNEZXNjZW5kYW50PWZ1bmN0aW9uKG5vZGUsXzFhOCl7dHJ5
e25vZGU9YnlJZChub2RlKTtfMWE4PWJ5SWQoXzFhOCk7d2hpbGUobm9kZSl7aWYobm9kZT09XzFh
OCl7cmV0dXJuIHRydWU7fW5vZGU9bm9kZS5wYXJlbnROb2RlO319Y2F0Y2goZSl7fXJldHVybiBm
YWxzZTt9O2Rvam8uc2V0U2VsZWN0YWJsZT1mdW5jdGlvbihub2RlLF8xYTkpe25vZGU9YnlJZChu
b2RlKTtpZihkLmlzTW96aWxsYSl7bm9kZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PV8xYTk/IiI6Im5v
bmUiO31lbHNle2lmKGQuaXNLaHRtbHx8ZC5pc1dlYktpdCl7bm9kZS5zdHlsZS5LaHRtbFVzZXJT
ZWxlY3Q9XzFhOT8iYXV0byI6Im5vbmUiO31lbHNle2lmKGQuaXNJRSl7dmFyIHY9KG5vZGUudW5z
ZWxlY3RhYmxlPV8xYTk/IiI6Im9uIik7ZC5xdWVyeSgiKiIsbm9kZSkuZm9yRWFjaCgiaXRlbS51
bnNlbGVjdGFibGUgPSAnIit2KyInIik7fX19fTt2YXIgXzFhYT1mdW5jdGlvbihub2RlLHJlZil7
dmFyIF8xYWI9cmVmLnBhcmVudE5vZGU7aWYoXzFhYil7XzFhYi5pbnNlcnRCZWZvcmUobm9kZSxy
ZWYpO319O3ZhciBfMWFjPWZ1bmN0aW9uKG5vZGUscmVmKXt2YXIgXzFhZD1yZWYucGFyZW50Tm9k
ZTtpZihfMWFkKXtpZihfMWFkLmxhc3RDaGlsZD09cmVmKXtfMWFkLmFwcGVuZENoaWxkKG5vZGUp
O31lbHNle18xYWQuaW5zZXJ0QmVmb3JlKG5vZGUscmVmLm5leHRTaWJsaW5nKTt9fX07ZG9qby5w
bGFjZT1mdW5jdGlvbihub2RlLF8xYWUsXzFhZil7XzFhZT1ieUlkKF8xYWUpO2lmKHR5cGVvZiBu
b2RlPT0ic3RyaW5nIil7bm9kZT0vXlxzKjwvLnRlc3Qobm9kZSk/ZC5fdG9Eb20obm9kZSxfMWFl
Lm93bmVyRG9jdW1lbnQpOmJ5SWQobm9kZSk7fWlmKHR5cGVvZiBfMWFmPT0ibnVtYmVyIil7dmFy
IGNuPV8xYWUuY2hpbGROb2RlcztpZighY24ubGVuZ3RofHxjbi5sZW5ndGg8PV8xYWYpe18xYWUu
YXBwZW5kQ2hpbGQobm9kZSk7fWVsc2V7XzFhYShub2RlLGNuW18xYWY8MD8wOl8xYWZdKTt9fWVs
c2V7c3dpdGNoKF8xYWYpe2Nhc2UgImJlZm9yZSI6XzFhYShub2RlLF8xYWUpO2JyZWFrO2Nhc2Ug
ImFmdGVyIjpfMWFjKG5vZGUsXzFhZSk7YnJlYWs7Y2FzZSAicmVwbGFjZSI6XzFhZS5wYXJlbnRO
b2RlLnJlcGxhY2VDaGlsZChub2RlLF8xYWUpO2JyZWFrO2Nhc2UgIm9ubHkiOmQuZW1wdHkoXzFh
ZSk7XzFhZS5hcHBlbmRDaGlsZChub2RlKTticmVhaztjYXNlICJmaXJzdCI6aWYoXzFhZS5maXJz
dENoaWxkKXtfMWFhKG5vZGUsXzFhZS5maXJzdENoaWxkKTticmVhazt9ZGVmYXVsdDpfMWFlLmFw
cGVuZENoaWxkKG5vZGUpO319cmV0dXJuIG5vZGU7fTtkb2pvLmJveE1vZGVsPSJjb250ZW50LWJv
eCI7aWYoZC5pc0lFKXtkLmJveE1vZGVsPWRvY3VtZW50LmNvbXBhdE1vZGU9PSJCYWNrQ29tcGF0
Ij8iYm9yZGVyLWJveCI6ImNvbnRlbnQtYm94Ijt9dmFyIGdjcztpZihkLmlzV2ViS2l0KXtnY3M9
ZnVuY3Rpb24obm9kZSl7dmFyIHM7aWYobm9kZS5ub2RlVHlwZT09MSl7dmFyIGR2PW5vZGUub3du
ZXJEb2N1bWVudC5kZWZhdWx0VmlldztzPWR2LmdldENvbXB1dGVkU3R5bGUobm9kZSxudWxsKTtp
ZighcyYmbm9kZS5zdHlsZSl7bm9kZS5zdHlsZS5kaXNwbGF5PSIiO3M9ZHYuZ2V0Q29tcHV0ZWRT
dHlsZShub2RlLG51bGwpO319cmV0dXJuIHN8fHt9O307fWVsc2V7aWYoZC5pc0lFKXtnY3M9ZnVu
Y3Rpb24obm9kZSl7cmV0dXJuIG5vZGUubm9kZVR5cGU9PTE/bm9kZS5jdXJyZW50U3R5bGU6e307
fTt9ZWxzZXtnY3M9ZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGUubm9kZVR5cGU9PTE/bm9kZS5v
d25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9kZSxudWxsKTp7fTt9
O319ZG9qby5nZXRDb21wdXRlZFN0eWxlPWdjcztpZighZC5pc0lFKXtkLl90b1BpeGVsVmFsdWU9
ZnVuY3Rpb24oXzFiMCxfMWIxKXtyZXR1cm4gcGFyc2VGbG9hdChfMWIxKXx8MDt9O31lbHNle2Qu
X3RvUGl4ZWxWYWx1ZT1mdW5jdGlvbihfMWIyLF8xYjMpe2lmKCFfMWIzKXtyZXR1cm4gMDt9aWYo
XzFiMz09Im1lZGl1bSIpe3JldHVybiA0O31pZihfMWIzLnNsaWNlJiZfMWIzLnNsaWNlKC0yKT09
InB4Iil7cmV0dXJuIHBhcnNlRmxvYXQoXzFiMyk7fXdpdGgoXzFiMil7dmFyIF8xYjQ9c3R5bGUu
bGVmdDt2YXIgXzFiNT1ydW50aW1lU3R5bGUubGVmdDtydW50aW1lU3R5bGUubGVmdD1jdXJyZW50
U3R5bGUubGVmdDt0cnl7c3R5bGUubGVmdD1fMWIzO18xYjM9c3R5bGUucGl4ZWxMZWZ0O31jYXRj
aChlKXtfMWIzPTA7fXN0eWxlLmxlZnQ9XzFiNDtydW50aW1lU3R5bGUubGVmdD1fMWI1O31yZXR1
cm4gXzFiMzt9O312YXIgcHg9ZC5fdG9QaXhlbFZhbHVlO3ZhciBhc3RyPSJEWEltYWdlVHJhbnNm
b3JtLk1pY3Jvc29mdC5BbHBoYSI7dmFyIGFmPWZ1bmN0aW9uKG4sZil7dHJ5e3JldHVybiBuLmZp
bHRlcnMuaXRlbShhc3RyKTt9Y2F0Y2goZSl7cmV0dXJuIGY/e306bnVsbDt9fTtkb2pvLl9nZXRP
cGFjaXR5PWQuaXNJRTw5P2Z1bmN0aW9uKG5vZGUpe3RyeXtyZXR1cm4gYWYobm9kZSkuT3BhY2l0
eS8xMDA7fWNhdGNoKGUpe3JldHVybiAxO319OmZ1bmN0aW9uKG5vZGUpe3JldHVybiBnY3Mobm9k
ZSkub3BhY2l0eTt9O2Rvam8uX3NldE9wYWNpdHk9ZC5pc0lFPDk/ZnVuY3Rpb24obm9kZSxfMWI2
KXt2YXIgb3Y9XzFiNioxMDAsXzFiNz1fMWI2PT0xO25vZGUuc3R5bGUuem9vbT1fMWI3PyIiOjE7
aWYoIWFmKG5vZGUpKXtpZihfMWI3KXtyZXR1cm4gXzFiNjt9bm9kZS5zdHlsZS5maWx0ZXIrPSIg
cHJvZ2lkOiIrYXN0cisiKE9wYWNpdHk9IitvdisiKSI7fWVsc2V7YWYobm9kZSwxKS5PcGFjaXR5
PW92O31hZihub2RlLDEpLkVuYWJsZWQ9IV8xYjc7aWYobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpPT0idHIiKXtkLnF1ZXJ5KCI+IHRkIixub2RlKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2QuX3Nl
dE9wYWNpdHkoaSxfMWI2KTt9KTt9cmV0dXJuIF8xYjY7fTpmdW5jdGlvbihub2RlLF8xYjgpe3Jl
dHVybiBub2RlLnN0eWxlLm9wYWNpdHk9XzFiODt9O3ZhciBfMWI5PXtsZWZ0OnRydWUsdG9wOnRy
dWV9O3ZhciBfMWJhPS9tYXJnaW58cGFkZGluZ3x3aWR0aHxoZWlnaHR8bWF4fG1pbnxvZmZzZXQv
O3ZhciBfMWJiPWZ1bmN0aW9uKG5vZGUsdHlwZSxfMWJjKXt0eXBlPXR5cGUudG9Mb3dlckNhc2Uo
KTtpZihkLmlzSUUpe2lmKF8xYmM9PSJhdXRvIil7aWYodHlwZT09ImhlaWdodCIpe3JldHVybiBu
b2RlLm9mZnNldEhlaWdodDt9aWYodHlwZT09IndpZHRoIil7cmV0dXJuIG5vZGUub2Zmc2V0V2lk
dGg7fX1pZih0eXBlPT0iZm9udHdlaWdodCIpe3N3aXRjaChfMWJjKXtjYXNlIDcwMDpyZXR1cm4g
ImJvbGQiO2Nhc2UgNDAwOmRlZmF1bHQ6cmV0dXJuICJub3JtYWwiO319fWlmKCEodHlwZSBpbiBf
MWI5KSl7XzFiOVt0eXBlXT1fMWJhLnRlc3QodHlwZSk7fXJldHVybiBfMWI5W3R5cGVdP3B4KG5v
ZGUsXzFiYyk6XzFiYzt9O3ZhciBfMWJkPWQuaXNJRT8ic3R5bGVGbG9hdCI6ImNzc0Zsb2F0Iixf
MWJlPXsiY3NzRmxvYXQiOl8xYmQsInN0eWxlRmxvYXQiOl8xYmQsImZsb2F0IjpfMWJkfTtkb2pv
LnN0eWxlPWZ1bmN0aW9uKG5vZGUsXzFiZixfMWMwKXt2YXIgbj1ieUlkKG5vZGUpLGFyZ3M9YXJn
dW1lbnRzLmxlbmd0aCxvcD0oXzFiZj09Im9wYWNpdHkiKTtfMWJmPV8xYmVbXzFiZl18fF8xYmY7
aWYoYXJncz09Myl7cmV0dXJuIG9wP2QuX3NldE9wYWNpdHkobixfMWMwKTpuLnN0eWxlW18xYmZd
PV8xYzA7fWlmKGFyZ3M9PTImJm9wKXtyZXR1cm4gZC5fZ2V0T3BhY2l0eShuKTt9dmFyIHM9Z2Nz
KG4pO2lmKGFyZ3M9PTImJnR5cGVvZiBfMWJmIT0ic3RyaW5nIil7Zm9yKHZhciB4IGluIF8xYmYp
e2Quc3R5bGUobm9kZSx4LF8xYmZbeF0pO31yZXR1cm4gczt9cmV0dXJuIChhcmdzPT0xKT9zOl8x
YmIobixfMWJmLHNbXzFiZl18fG4uc3R5bGVbXzFiZl0pO307ZG9qby5fZ2V0UGFkRXh0ZW50cz1m
dW5jdGlvbihuLF8xYzEpe3ZhciBzPV8xYzF8fGdjcyhuKSxsPXB4KG4scy5wYWRkaW5nTGVmdCks
dD1weChuLHMucGFkZGluZ1RvcCk7cmV0dXJuIHtsOmwsdDp0LHc6bCtweChuLHMucGFkZGluZ1Jp
Z2h0KSxoOnQrcHgobixzLnBhZGRpbmdCb3R0b20pfTt9O2Rvam8uX2dldEJvcmRlckV4dGVudHM9
ZnVuY3Rpb24obixfMWMyKXt2YXIgbmU9Im5vbmUiLHM9XzFjMnx8Z2NzKG4pLGJsPShzLmJvcmRl
ckxlZnRTdHlsZSE9bmU/cHgobixzLmJvcmRlckxlZnRXaWR0aCk6MCksYnQ9KHMuYm9yZGVyVG9w
U3R5bGUhPW5lP3B4KG4scy5ib3JkZXJUb3BXaWR0aCk6MCk7cmV0dXJuIHtsOmJsLHQ6YnQsdzpi
bCsocy5ib3JkZXJSaWdodFN0eWxlIT1uZT9weChuLHMuYm9yZGVyUmlnaHRXaWR0aCk6MCksaDpi
dCsocy5ib3JkZXJCb3R0b21TdHlsZSE9bmU/cHgobixzLmJvcmRlckJvdHRvbVdpZHRoKTowKX07
fTtkb2pvLl9nZXRQYWRCb3JkZXJFeHRlbnRzPWZ1bmN0aW9uKG4sXzFjMyl7dmFyIHM9XzFjM3x8
Z2NzKG4pLHA9ZC5fZ2V0UGFkRXh0ZW50cyhuLHMpLGI9ZC5fZ2V0Qm9yZGVyRXh0ZW50cyhuLHMp
O3JldHVybiB7bDpwLmwrYi5sLHQ6cC50K2IudCx3OnAudytiLncsaDpwLmgrYi5ofTt9O2Rvam8u
X2dldE1hcmdpbkV4dGVudHM9ZnVuY3Rpb24obixfMWM0KXt2YXIgcz1fMWM0fHxnY3MobiksbD1w
eChuLHMubWFyZ2luTGVmdCksdD1weChuLHMubWFyZ2luVG9wKSxyPXB4KG4scy5tYXJnaW5SaWdo
dCksYj1weChuLHMubWFyZ2luQm90dG9tKTtpZihkLmlzV2ViS2l0JiYocy5wb3NpdGlvbiE9ImFi
c29sdXRlIikpe3I9bDt9cmV0dXJuIHtsOmwsdDp0LHc6bCtyLGg6dCtifTt9O2Rvam8uX2dldE1h
cmdpbkJveD1mdW5jdGlvbihub2RlLF8xYzUpe3ZhciBzPV8xYzV8fGdjcyhub2RlKSxtZT1kLl9n
ZXRNYXJnaW5FeHRlbnRzKG5vZGUscyk7dmFyIGw9bm9kZS5vZmZzZXRMZWZ0LW1lLmwsdD1ub2Rl
Lm9mZnNldFRvcC1tZS50LHA9bm9kZS5wYXJlbnROb2RlO2lmKGQuaXNNb3ope3ZhciBzbD1wYXJz
ZUZsb2F0KHMubGVmdCksc3Q9cGFyc2VGbG9hdChzLnRvcCk7aWYoIWlzTmFOKHNsKSYmIWlzTmFO
KHN0KSl7bD1zbCx0PXN0O31lbHNle2lmKHAmJnAuc3R5bGUpe3ZhciBwY3M9Z2NzKHApO2lmKHBj
cy5vdmVyZmxvdyE9InZpc2libGUiKXt2YXIgYmU9ZC5fZ2V0Qm9yZGVyRXh0ZW50cyhwLHBjcyk7
bCs9YmUubCx0Kz1iZS50O319fX1lbHNle2lmKGQuaXNPcGVyYXx8KGQuaXNJRT43JiYhZC5pc1F1
aXJrcykpe2lmKHApe2JlPWQuX2dldEJvcmRlckV4dGVudHMocCk7bC09YmUubDt0LT1iZS50O319
fXJldHVybiB7bDpsLHQ6dCx3Om5vZGUub2Zmc2V0V2lkdGgrbWUudyxoOm5vZGUub2Zmc2V0SGVp
Z2h0K21lLmh9O307ZG9qby5fZ2V0TWFyZ2luU2l6ZT1mdW5jdGlvbihub2RlLF8xYzYpe25vZGU9
YnlJZChub2RlKTt2YXIgbWU9ZC5fZ2V0TWFyZ2luRXh0ZW50cyhub2RlLF8xYzZ8fGdjcyhub2Rl
KSk7dmFyIHNpemU9bm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4ge3c6KHNpemUu
cmlnaHQtc2l6ZS5sZWZ0KSttZS53LGg6KHNpemUuYm90dG9tLXNpemUudG9wKSttZS5ofTt9O2Rv
am8uX2dldENvbnRlbnRCb3g9ZnVuY3Rpb24obm9kZSxfMWM3KXt2YXIgcz1fMWM3fHxnY3Mobm9k
ZSkscGU9ZC5fZ2V0UGFkRXh0ZW50cyhub2RlLHMpLGJlPWQuX2dldEJvcmRlckV4dGVudHMobm9k
ZSxzKSx3PW5vZGUuY2xpZW50V2lkdGgsaDtpZighdyl7dz1ub2RlLm9mZnNldFdpZHRoLGg9bm9k
ZS5vZmZzZXRIZWlnaHQ7fWVsc2V7aD1ub2RlLmNsaWVudEhlaWdodCxiZS53PWJlLmg9MDt9aWYo
ZC5pc09wZXJhKXtwZS5sKz1iZS5sO3BlLnQrPWJlLnQ7fXJldHVybiB7bDpwZS5sLHQ6cGUudCx3
OnctcGUudy1iZS53LGg6aC1wZS5oLWJlLmh9O307ZG9qby5fZ2V0Qm9yZGVyQm94PWZ1bmN0aW9u
KG5vZGUsXzFjOCl7dmFyIHM9XzFjOHx8Z2NzKG5vZGUpLHBlPWQuX2dldFBhZEV4dGVudHMobm9k
ZSxzKSxjYj1kLl9nZXRDb250ZW50Qm94KG5vZGUscyk7cmV0dXJuIHtsOmNiLmwtcGUubCx0OmNi
LnQtcGUudCx3OmNiLncrcGUudyxoOmNiLmgrcGUuaH07fTtkb2pvLl9zZXRCb3g9ZnVuY3Rpb24o
bm9kZSxsLHQsdyxoLHUpe3U9dXx8InB4Ijt2YXIgcz1ub2RlLnN0eWxlO2lmKCFpc05hTihsKSl7
cy5sZWZ0PWwrdTt9aWYoIWlzTmFOKHQpKXtzLnRvcD10K3U7fWlmKHc+PTApe3Mud2lkdGg9dyt1
O31pZihoPj0wKXtzLmhlaWdodD1oK3U7fX07ZG9qby5faXNCdXR0b25UYWc9ZnVuY3Rpb24obm9k
ZSl7cmV0dXJuIG5vZGUudGFnTmFtZT09IkJVVFRPTiJ8fG5vZGUudGFnTmFtZT09IklOUFVUIiYm
KG5vZGUuZ2V0QXR0cmlidXRlKCJ0eXBlIil8fCIiKS50b1VwcGVyQ2FzZSgpPT0iQlVUVE9OIjt9
O2Rvam8uX3VzZXNCb3JkZXJCb3g9ZnVuY3Rpb24obm9kZSl7dmFyIG49bm9kZS50YWdOYW1lO3Jl
dHVybiBkLmJveE1vZGVsPT0iYm9yZGVyLWJveCJ8fG49PSJUQUJMRSJ8fGQuX2lzQnV0dG9uVGFn
KG5vZGUpO307ZG9qby5fc2V0Q29udGVudFNpemU9ZnVuY3Rpb24obm9kZSxfMWM5LF8xY2EsXzFj
Yil7aWYoZC5fdXNlc0JvcmRlckJveChub2RlKSl7dmFyIHBiPWQuX2dldFBhZEJvcmRlckV4dGVu
dHMobm9kZSxfMWNiKTtpZihfMWM5Pj0wKXtfMWM5Kz1wYi53O31pZihfMWNhPj0wKXtfMWNhKz1w
Yi5oO319ZC5fc2V0Qm94KG5vZGUsTmFOLE5hTixfMWM5LF8xY2EpO307ZG9qby5fc2V0TWFyZ2lu
Qm94PWZ1bmN0aW9uKG5vZGUsXzFjYyxfMWNkLF8xY2UsXzFjZixfMWQwKXt2YXIgcz1fMWQwfHxn
Y3Mobm9kZSksYmI9ZC5fdXNlc0JvcmRlckJveChub2RlKSxwYj1iYj9fMWQxOmQuX2dldFBhZEJv
cmRlckV4dGVudHMobm9kZSxzKTtpZihkLmlzV2ViS2l0KXtpZihkLl9pc0J1dHRvblRhZyhub2Rl
KSl7dmFyIG5zPW5vZGUuc3R5bGU7aWYoXzFjZT49MCYmIW5zLndpZHRoKXtucy53aWR0aD0iNHB4
Ijt9aWYoXzFjZj49MCYmIW5zLmhlaWdodCl7bnMuaGVpZ2h0PSI0cHgiO319fXZhciBtYj1kLl9n
ZXRNYXJnaW5FeHRlbnRzKG5vZGUscyk7aWYoXzFjZT49MCl7XzFjZT1NYXRoLm1heChfMWNlLXBi
LnctbWIudywwKTt9aWYoXzFjZj49MCl7XzFjZj1NYXRoLm1heChfMWNmLXBiLmgtbWIuaCwwKTt9
ZC5fc2V0Qm94KG5vZGUsXzFjYyxfMWNkLF8xY2UsXzFjZik7fTt2YXIgXzFkMT17bDowLHQ6MCx3
OjAsaDowfTtkb2pvLm1hcmdpbkJveD1mdW5jdGlvbihub2RlLGJveCl7dmFyIG49YnlJZChub2Rl
KSxzPWdjcyhuKSxiPWJveDtyZXR1cm4gIWI/ZC5fZ2V0TWFyZ2luQm94KG4scyk6ZC5fc2V0TWFy
Z2luQm94KG4sYi5sLGIudCxiLncsYi5oLHMpO307ZG9qby5jb250ZW50Qm94PWZ1bmN0aW9uKG5v
ZGUsYm94KXt2YXIgbj1ieUlkKG5vZGUpLHM9Z2NzKG4pLGI9Ym94O3JldHVybiAhYj9kLl9nZXRD
b250ZW50Qm94KG4scyk6ZC5fc2V0Q29udGVudFNpemUobixiLncsYi5oLHMpO307dmFyIF8xZDI9
ZnVuY3Rpb24obm9kZSxwcm9wKXtpZighKG5vZGU9KG5vZGV8fDApLnBhcmVudE5vZGUpKXtyZXR1
cm4gMDt9dmFyIHZhbCxfMWQzPTAsXzFkND1kLmJvZHkoKTt3aGlsZShub2RlJiZub2RlLnN0eWxl
KXtpZihnY3Mobm9kZSkucG9zaXRpb249PSJmaXhlZCIpe3JldHVybiAwO312YWw9bm9kZVtwcm9w
XTtpZih2YWwpe18xZDMrPXZhbC0wO2lmKG5vZGU9PV8xZDQpe2JyZWFrO319bm9kZT1ub2RlLnBh
cmVudE5vZGU7fXJldHVybiBfMWQzO307ZG9qby5fZG9jU2Nyb2xsPWZ1bmN0aW9uKCl7dmFyIG49
ZC5nbG9iYWw7cmV0dXJuICJwYWdlWE9mZnNldCIgaW4gbj97eDpuLnBhZ2VYT2Zmc2V0LHk6bi5w
YWdlWU9mZnNldH06KG49ZC5pc1F1aXJrcz9kLmRvYy5ib2R5OmQuZG9jLmRvY3VtZW50RWxlbWVu
dCx7eDpkLl9maXhJZUJpRGlTY3JvbGxMZWZ0KG4uc2Nyb2xsTGVmdHx8MCkseTpuLnNjcm9sbFRv
cHx8MH0pO307ZG9qby5faXNCb2R5THRyPWZ1bmN0aW9uKCl7cmV0dXJuICJfYm9keUx0ciIgaW4g
ZD9kLl9ib2R5THRyOmQuX2JvZHlMdHI9KGQuYm9keSgpLmRpcnx8ZC5kb2MuZG9jdW1lbnRFbGVt
ZW50LmRpcnx8Imx0ciIpLnRvTG93ZXJDYXNlKCk9PSJsdHIiO307ZG9qby5fZ2V0SWVEb2N1bWVu
dEVsZW1lbnRPZmZzZXQ9ZnVuY3Rpb24oKXt2YXIgZGU9ZC5kb2MuZG9jdW1lbnRFbGVtZW50O2lm
KGQuaXNJRTw4KXt2YXIgcj1kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgbD1yLmxlZnQs
dD1yLnRvcDtpZihkLmlzSUU8Nyl7bCs9ZGUuY2xpZW50TGVmdDt0Kz1kZS5jbGllbnRUb3A7fXJl
dHVybiB7eDpsPDA/MDpsLHk6dDwwPzA6dH07fWVsc2V7cmV0dXJuIHt4OjAseTowfTt9fTtkb2pv
Ll9maXhJZUJpRGlTY3JvbGxMZWZ0PWZ1bmN0aW9uKF8xZDUpe3ZhciBpZT1kLmlzSUU7aWYoaWUm
JiFkLl9pc0JvZHlMdHIoKSl7dmFyIHFrPWQuaXNRdWlya3MsZGU9cWs/ZC5kb2MuYm9keTpkLmRv
Yy5kb2N1bWVudEVsZW1lbnQ7aWYoaWU9PTYmJiFxayYmZC5nbG9iYWwuZnJhbWVFbGVtZW50JiZk
ZS5zY3JvbGxIZWlnaHQ+ZGUuY2xpZW50SGVpZ2h0KXtfMWQ1Kz1kZS5jbGllbnRMZWZ0O31yZXR1
cm4gKGllPDh8fHFrKT8oXzFkNStkZS5jbGllbnRXaWR0aC1kZS5zY3JvbGxXaWR0aCk6LV8xZDU7
fXJldHVybiBfMWQ1O307ZG9qby5fYWJzPWRvam8ucG9zaXRpb249ZnVuY3Rpb24obm9kZSxfMWQ2
KXtub2RlPWJ5SWQobm9kZSk7dmFyIGRiPWQuYm9keSgpLGRoPWRiLnBhcmVudE5vZGUscmV0PW5v
ZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0PXt4OnJldC5sZWZ0LHk6cmV0LnRvcCx3OnJl
dC5yaWdodC1yZXQubGVmdCxoOnJldC5ib3R0b20tcmV0LnRvcH07aWYoZC5pc0lFKXt2YXIgXzFk
Nz1kLl9nZXRJZURvY3VtZW50RWxlbWVudE9mZnNldCgpO3JldC54LT1fMWQ3LngrKGQuaXNRdWly
a3M/ZGIuY2xpZW50TGVmdCtkYi5vZmZzZXRMZWZ0OjApO3JldC55LT1fMWQ3LnkrKGQuaXNRdWly
a3M/ZGIuY2xpZW50VG9wK2RiLm9mZnNldFRvcDowKTt9ZWxzZXtpZihkLmlzRkY9PTMpe3ZhciBj
cz1nY3MoZGgpO3JldC54LT1weChkaCxjcy5tYXJnaW5MZWZ0KStweChkaCxjcy5ib3JkZXJMZWZ0
V2lkdGgpO3JldC55LT1weChkaCxjcy5tYXJnaW5Ub3ApK3B4KGRoLGNzLmJvcmRlclRvcFdpZHRo
KTt9fWlmKF8xZDYpe3ZhciBfMWQ4PWQuX2RvY1Njcm9sbCgpO3JldC54Kz1fMWQ4Lng7cmV0Lnkr
PV8xZDgueTt9cmV0dXJuIHJldDt9O2Rvam8uY29vcmRzPWZ1bmN0aW9uKG5vZGUsXzFkOSl7dmFy
IG49YnlJZChub2RlKSxzPWdjcyhuKSxtYj1kLl9nZXRNYXJnaW5Cb3gobixzKTt2YXIgYWJzPWQu
cG9zaXRpb24obixfMWQ5KTttYi54PWFicy54O21iLnk9YWJzLnk7cmV0dXJuIG1iO307dmFyIF8x
ZGE9eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IiLHRhYmluZGV4OiJ0YWJJbmRl
eCIscmVhZG9ubHk6InJlYWRPbmx5Iixjb2xzcGFuOiJjb2xTcGFuIixmcmFtZWJvcmRlcjoiZnJh
bWVCb3JkZXIiLHJvd3NwYW46InJvd1NwYW4iLHZhbHVldHlwZToidmFsdWVUeXBlIn0sXzFkYj17
Y2xhc3NuYW1lOiJjbGFzcyIsaHRtbGZvcjoiZm9yIix0YWJpbmRleDoidGFiSW5kZXgiLHJlYWRv
bmx5OiJyZWFkT25seSJ9LF8xZGM9e2lubmVySFRNTDoxLGNsYXNzTmFtZToxLGh0bWxGb3I6ZC5p
c0lFLHZhbHVlOjF9O3ZhciBfMWRkPWZ1bmN0aW9uKG5hbWUpe3JldHVybiBfMWRiW25hbWUudG9M
b3dlckNhc2UoKV18fG5hbWU7fTt2YXIgXzFkZT1mdW5jdGlvbihub2RlLG5hbWUpe3ZhciBhdHRy
PW5vZGUuZ2V0QXR0cmlidXRlTm9kZSYmbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO3JldHVy
biBhdHRyJiZhdHRyLnNwZWNpZmllZDt9O2Rvam8uaGFzQXR0cj1mdW5jdGlvbihub2RlLG5hbWUp
e3ZhciBsYz1uYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIF8xZGNbXzFkYVtsY118fG5hbWVdfHxf
MWRlKGJ5SWQobm9kZSksXzFkYltsY118fG5hbWUpO307dmFyIF8xZGY9e30sXzFlMD0wLF8xZTE9
ZG9qby5fc2NvcGVOYW1lKyJhdHRyaWQiLF8xZTI9e2NvbDoxLGNvbGdyb3VwOjEsdGFibGU6MSx0
Ym9keToxLHRmb290OjEsdGhlYWQ6MSx0cjoxLHRpdGxlOjF9O2Rvam8uYXR0cj1mdW5jdGlvbihu
b2RlLG5hbWUsXzFlMyl7bm9kZT1ieUlkKG5vZGUpO3ZhciBhcmdzPWFyZ3VtZW50cy5sZW5ndGgs
cHJvcDtpZihhcmdzPT0yJiZ0eXBlb2YgbmFtZSE9InN0cmluZyIpe2Zvcih2YXIgeCBpbiBuYW1l
KXtkLmF0dHIobm9kZSx4LG5hbWVbeF0pO31yZXR1cm4gbm9kZTt9dmFyIGxjPW5hbWUudG9Mb3dl
ckNhc2UoKSxfMWU0PV8xZGFbbGNdfHxuYW1lLF8xZTU9XzFkY1tfMWU0XSxfMWU2PV8xZGJbbGNd
fHxuYW1lO2lmKGFyZ3M9PTMpe2Rve2lmKF8xZTQ9PSJzdHlsZSImJnR5cGVvZiBfMWUzIT0ic3Ry
aW5nIil7ZC5zdHlsZShub2RlLF8xZTMpO2JyZWFrO31pZihfMWU0PT0iaW5uZXJIVE1MIil7aWYo
ZC5pc0lFJiZub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSBpbiBfMWUyKXtkLmVtcHR5KG5vZGUp
O25vZGUuYXBwZW5kQ2hpbGQoZC5fdG9Eb20oXzFlMyxub2RlLm93bmVyRG9jdW1lbnQpKTt9ZWxz
ZXtub2RlW18xZTRdPV8xZTM7fWJyZWFrO31pZihkLmlzRnVuY3Rpb24oXzFlMykpe3ZhciBfMWU3
PWQuYXR0cihub2RlLF8xZTEpO2lmKCFfMWU3KXtfMWU3PV8xZTArKztkLmF0dHIobm9kZSxfMWUx
LF8xZTcpO31pZighXzFkZltfMWU3XSl7XzFkZltfMWU3XT17fTt9dmFyIGg9XzFkZltfMWU3XVtf
MWU0XTtpZihoKXtkLmRpc2Nvbm5lY3QoaCk7fWVsc2V7dHJ5e2RlbGV0ZSBub2RlW18xZTRdO31j
YXRjaChlKXt9fV8xZGZbXzFlN11bXzFlNF09ZC5jb25uZWN0KG5vZGUsXzFlNCxfMWUzKTticmVh
azt9aWYoXzFlNXx8dHlwZW9mIF8xZTM9PSJib29sZWFuIil7bm9kZVtfMWU0XT1fMWUzO2JyZWFr
O31ub2RlLnNldEF0dHJpYnV0ZShfMWU2LF8xZTMpO313aGlsZShmYWxzZSk7cmV0dXJuIG5vZGU7
fV8xZTM9bm9kZVtfMWU0XTtpZihfMWU1JiZ0eXBlb2YgXzFlMyE9InVuZGVmaW5lZCIpe3JldHVy
biBfMWUzO31pZihfMWU0IT0iaHJlZiImJih0eXBlb2YgXzFlMz09ImJvb2xlYW4ifHxkLmlzRnVu
Y3Rpb24oXzFlMykpKXtyZXR1cm4gXzFlMzt9cmV0dXJuIF8xZGUobm9kZSxfMWU2KT9ub2RlLmdl
dEF0dHJpYnV0ZShfMWU2KTpudWxsO307ZG9qby5yZW1vdmVBdHRyPWZ1bmN0aW9uKG5vZGUsbmFt
ZSl7YnlJZChub2RlKS5yZW1vdmVBdHRyaWJ1dGUoXzFkZChuYW1lKSk7fTtkb2pvLmdldE5vZGVQ
cm9wPWZ1bmN0aW9uKG5vZGUsbmFtZSl7bm9kZT1ieUlkKG5vZGUpO3ZhciBsYz1uYW1lLnRvTG93
ZXJDYXNlKCksXzFlOD1fMWRhW2xjXXx8bmFtZTtpZigoXzFlOCBpbiBub2RlKSYmXzFlOCE9Imhy
ZWYiKXtyZXR1cm4gbm9kZVtfMWU4XTt9dmFyIF8xZTk9XzFkYltsY118fG5hbWU7cmV0dXJuIF8x
ZGUobm9kZSxfMWU5KT9ub2RlLmdldEF0dHJpYnV0ZShfMWU5KTpudWxsO307ZG9qby5jcmVhdGU9
ZnVuY3Rpb24odGFnLF8xZWEsXzFlYixwb3Mpe3ZhciBkb2M9ZC5kb2M7aWYoXzFlYil7XzFlYj1i
eUlkKF8xZWIpO2RvYz1fMWViLm93bmVyRG9jdW1lbnQ7fWlmKHR5cGVvZiB0YWc9PSJzdHJpbmci
KXt0YWc9ZG9jLmNyZWF0ZUVsZW1lbnQodGFnKTt9aWYoXzFlYSl7ZC5hdHRyKHRhZyxfMWVhKTt9
aWYoXzFlYil7ZC5wbGFjZSh0YWcsXzFlYixwb3MpO31yZXR1cm4gdGFnO307ZC5lbXB0eT1kLmlz
SUU/ZnVuY3Rpb24obm9kZSl7bm9kZT1ieUlkKG5vZGUpO2Zvcih2YXIgYztjPW5vZGUubGFzdENo
aWxkOyl7ZC5kZXN0cm95KGMpO319OmZ1bmN0aW9uKG5vZGUpe2J5SWQobm9kZSkuaW5uZXJIVE1M
PSIiO307dmFyIF8xZWM9e29wdGlvbjpbInNlbGVjdCJdLHRib2R5OlsidGFibGUiXSx0aGVhZDpb
InRhYmxlIl0sdGZvb3Q6WyJ0YWJsZSJdLHRyOlsidGFibGUiLCJ0Ym9keSJdLHRkOlsidGFibGUi
LCJ0Ym9keSIsInRyIl0sdGg6WyJ0YWJsZSIsInRoZWFkIiwidHIiXSxsZWdlbmQ6WyJmaWVsZHNl
dCJdLGNhcHRpb246WyJ0YWJsZSJdLGNvbGdyb3VwOlsidGFibGUiXSxjb2w6WyJ0YWJsZSIsImNv
bGdyb3VwIl0sbGk6WyJ1bCJdfSxfMWVkPS88XHMqKFtcd1w6XSspLyxfMWVlPXt9LF8xZWY9MCxf
MWYwPSJfXyIrZC5fc2NvcGVOYW1lKyJUb0RvbUlkIjtmb3IodmFyIF8xZjEgaW4gXzFlYyl7aWYo
XzFlYy5oYXNPd25Qcm9wZXJ0eShfMWYxKSl7dmFyIHR3PV8xZWNbXzFmMV07dHcucHJlPV8xZjE9
PSJvcHRpb24iPyI8c2VsZWN0IG11bHRpcGxlPVwibXVsdGlwbGVcIj4iOiI8Iit0dy5qb2luKCI+
PCIpKyI+Ijt0dy5wb3N0PSI8LyIrdHcucmV2ZXJzZSgpLmpvaW4oIj48LyIpKyI+Ijt9fWQuX3Rv
RG9tPWZ1bmN0aW9uKGZyYWcsZG9jKXtkb2M9ZG9jfHxkLmRvYzt2YXIgXzFmMj1kb2NbXzFmMF07
aWYoIV8xZjIpe2RvY1tfMWYwXT1fMWYyPSsrXzFlZisiIjtfMWVlW18xZjJdPWRvYy5jcmVhdGVF
bGVtZW50KCJkaXYiKTt9ZnJhZys9IiI7dmFyIF8xZjM9ZnJhZy5tYXRjaChfMWVkKSx0YWc9XzFm
Mz9fMWYzWzFdLnRvTG93ZXJDYXNlKCk6IiIsXzFmND1fMWVlW18xZjJdLHdyYXAsaSxmYyxkZjtp
ZihfMWYzJiZfMWVjW3RhZ10pe3dyYXA9XzFlY1t0YWddO18xZjQuaW5uZXJIVE1MPXdyYXAucHJl
K2ZyYWcrd3JhcC5wb3N0O2ZvcihpPXdyYXAubGVuZ3RoO2k7LS1pKXtfMWY0PV8xZjQuZmlyc3RD
aGlsZDt9fWVsc2V7XzFmNC5pbm5lckhUTUw9ZnJhZzt9aWYoXzFmNC5jaGlsZE5vZGVzLmxlbmd0
aD09MSl7cmV0dXJuIF8xZjQucmVtb3ZlQ2hpbGQoXzFmNC5maXJzdENoaWxkKTt9ZGY9ZG9jLmNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQoKTt3aGlsZShmYz1fMWY0LmZpcnN0Q2hpbGQpe2RmLmFwcGVu
ZENoaWxkKGZjKTt9cmV0dXJuIGRmO307dmFyIF8xZjU9ImNsYXNzTmFtZSI7ZG9qby5oYXNDbGFz
cz1mdW5jdGlvbihub2RlLF8xZjYpe3JldHVybiAoKCIgIitieUlkKG5vZGUpW18xZjVdKyIgIiku
aW5kZXhPZigiICIrXzFmNisiICIpPj0wKTt9O3ZhciBfMWY3PS9ccysvLGExPVsiIl0sXzFmOD17
fSxfMWY5PWZ1bmN0aW9uKHMpe2lmKHR5cGVvZiBzPT0ic3RyaW5nInx8cyBpbnN0YW5jZW9mIFN0
cmluZyl7aWYocy5pbmRleE9mKCIgIik8MCl7YTFbMF09cztyZXR1cm4gYTE7fWVsc2V7cmV0dXJu
IHMuc3BsaXQoXzFmNyk7fX1yZXR1cm4gc3x8IiI7fTtkb2pvLmFkZENsYXNzPWZ1bmN0aW9uKG5v
ZGUsXzFmYSl7bm9kZT1ieUlkKG5vZGUpO18xZmE9XzFmOShfMWZhKTt2YXIgY2xzPW5vZGVbXzFm
NV0sXzFmYjtjbHM9Y2xzPyIgIitjbHMrIiAiOiIgIjtfMWZiPWNscy5sZW5ndGg7Zm9yKHZhciBp
PTAsbGVuPV8xZmEubGVuZ3RoLGM7aTxsZW47KytpKXtjPV8xZmFbaV07aWYoYyYmY2xzLmluZGV4
T2YoIiAiK2MrIiAiKTwwKXtjbHMrPWMrIiAiO319aWYoXzFmYjxjbHMubGVuZ3RoKXtub2RlW18x
ZjVdPWNscy5zdWJzdHIoMSxjbHMubGVuZ3RoLTIpO319O2Rvam8ucmVtb3ZlQ2xhc3M9ZnVuY3Rp
b24obm9kZSxfMWZjKXtub2RlPWJ5SWQobm9kZSk7dmFyIGNscztpZihfMWZjIT09dW5kZWZpbmVk
KXtfMWZjPV8xZjkoXzFmYyk7Y2xzPSIgIitub2RlW18xZjVdKyIgIjtmb3IodmFyIGk9MCxsZW49
XzFmYy5sZW5ndGg7aTxsZW47KytpKXtjbHM9Y2xzLnJlcGxhY2UoIiAiK18xZmNbaV0rIiAiLCIg
Iik7fWNscz1kLnRyaW0oY2xzKTt9ZWxzZXtjbHM9IiI7fWlmKG5vZGVbXzFmNV0hPWNscyl7bm9k
ZVtfMWY1XT1jbHM7fX07ZG9qby5yZXBsYWNlQ2xhc3M9ZnVuY3Rpb24obm9kZSxfMWZkLF8xZmUp
e25vZGU9YnlJZChub2RlKTtfMWY4LmNsYXNzTmFtZT1ub2RlLmNsYXNzTmFtZTtkb2pvLnJlbW92
ZUNsYXNzKF8xZjgsXzFmZSk7ZG9qby5hZGRDbGFzcyhfMWY4LF8xZmQpO2lmKG5vZGUuY2xhc3NO
YW1lIT09XzFmOC5jbGFzc05hbWUpe25vZGUuY2xhc3NOYW1lPV8xZjguY2xhc3NOYW1lO319O2Rv
am8udG9nZ2xlQ2xhc3M9ZnVuY3Rpb24obm9kZSxfMWZmLF8yMDApe2lmKF8yMDA9PT11bmRlZmlu
ZWQpe18yMDA9IWQuaGFzQ2xhc3Mobm9kZSxfMWZmKTt9ZFtfMjAwPyJhZGRDbGFzcyI6InJlbW92
ZUNsYXNzIl0obm9kZSxfMWZmKTt9O30pKCk7fWlmKCFkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5f
YmFzZS5Ob2RlTGlzdCJdKXtkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS5Ob2RlTGlzdCJd
PXRydWU7ZG9qby5wcm92aWRlKCJkb2pvLl9iYXNlLk5vZGVMaXN0Iik7KGZ1bmN0aW9uKCl7dmFy
IGQ9ZG9qbzt2YXIgYXA9QXJyYXkucHJvdG90eXBlLGFwcz1hcC5zbGljZSxhcGM9YXAuY29uY2F0
O3ZhciB0bmw9ZnVuY3Rpb24oYSxfMjAxLF8yMDIpe2lmKCFhLnNvcnQpe2E9YXBzLmNhbGwoYSww
KTt9dmFyIGN0b3I9XzIwMnx8dGhpcy5fTm9kZUxpc3RDdG9yfHxkLl9Ob2RlTGlzdEN0b3I7YS5j
b25zdHJ1Y3Rvcj1jdG9yO2Rvam8uX21peGluKGEsY3Rvci5wcm90b3R5cGUpO2EuX05vZGVMaXN0
Q3Rvcj1jdG9yO3JldHVybiBfMjAxP2EuX3N0YXNoKF8yMDEpOmE7fTt2YXIgXzIwMz1mdW5jdGlv
bihmLGEsbyl7YT1bMF0uY29uY2F0KGFwcy5jYWxsKGEsMCkpO289b3x8ZC5nbG9iYWw7cmV0dXJu
IGZ1bmN0aW9uKG5vZGUpe2FbMF09bm9kZTtyZXR1cm4gZi5hcHBseShvLGEpO307fTt2YXIgXzIw
ND1mdW5jdGlvbihmLG8pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuZm9yRWFjaChfMjAzKGYsYXJn
dW1lbnRzLG8pKTtyZXR1cm4gdGhpczt9O307dmFyIF8yMDU9ZnVuY3Rpb24oZixvKXtyZXR1cm4g
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoXzIwMyhmLGFyZ3VtZW50cyxvKSk7fTt9O3ZhciBf
MjA2PWZ1bmN0aW9uKGYsbyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyKF8y
MDMoZixhcmd1bWVudHMsbykpO307fTt2YXIgXzIwNz1mdW5jdGlvbihmLGcsbyl7cmV0dXJuIGZ1
bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzLGJvZHk9XzIwMyhmLGEsbyk7aWYoZy5jYWxsKG98fGQu
Z2xvYmFsLGEpKXtyZXR1cm4gdGhpcy5tYXAoYm9keSk7fXRoaXMuZm9yRWFjaChib2R5KTtyZXR1
cm4gdGhpczt9O307dmFyIF8yMDg9ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RoPT0xJiYodHlw
ZW9mIGFbMF09PSJzdHJpbmciKTt9O3ZhciBfMjA5PWZ1bmN0aW9uKG5vZGUpe3ZhciBwPW5vZGUu
cGFyZW50Tm9kZTtpZihwKXtwLnJlbW92ZUNoaWxkKG5vZGUpO319O2Rvam8uTm9kZUxpc3Q9ZnVu
Y3Rpb24oKXtyZXR1cm4gdG5sKEFycmF5LmFwcGx5KG51bGwsYXJndW1lbnRzKSk7fTtkLl9Ob2Rl
TGlzdEN0b3I9ZC5Ob2RlTGlzdDt2YXIgbmw9ZC5Ob2RlTGlzdCxubHA9bmwucHJvdG90eXBlO25s
Ll93cmFwPW5scC5fd3JhcD10bmw7bmwuX2FkYXB0QXNNYXA9XzIwNTtubC5fYWRhcHRBc0ZvckVh
Y2g9XzIwNDtubC5fYWRhcHRBc0ZpbHRlcj1fMjA2O25sLl9hZGFwdFdpdGhDb25kaXRpb249XzIw
NztkLmZvckVhY2goWyJzbGljZSIsInNwbGljZSJdLGZ1bmN0aW9uKG5hbWUpe3ZhciBmPWFwW25h
bWVdO25scFtuYW1lXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwKGYuYXBwbHkodGhpcyxh
cmd1bWVudHMpLG5hbWU9PSJzbGljZSI/dGhpczpudWxsKTt9O30pO2QuZm9yRWFjaChbImluZGV4
T2YiLCJsYXN0SW5kZXhPZiIsImV2ZXJ5Iiwic29tZSJdLGZ1bmN0aW9uKG5hbWUpe3ZhciBmPWRb
bmFtZV07bmxwW25hbWVdPWZ1bmN0aW9uKCl7cmV0dXJuIGYuYXBwbHkoZCxbdGhpc10uY29uY2F0
KGFwcy5jYWxsKGFyZ3VtZW50cywwKSkpO307fSk7ZC5mb3JFYWNoKFsiYXR0ciIsInN0eWxlIl0s
ZnVuY3Rpb24obmFtZSl7bmxwW25hbWVdPV8yMDcoZFtuYW1lXSxfMjA4KTt9KTtkLmZvckVhY2go
WyJjb25uZWN0IiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInJlcGxhY2VDbGFzcyIsInRvZ2ds
ZUNsYXNzIiwiZW1wdHkiLCJyZW1vdmVBdHRyIl0sZnVuY3Rpb24obmFtZSl7bmxwW25hbWVdPV8y
MDQoZFtuYW1lXSk7fSk7ZG9qby5leHRlbmQoZG9qby5Ob2RlTGlzdCx7X25vcm1hbGl6ZTpmdW5j
dGlvbihfMjBhLF8yMGIpe3ZhciBfMjBjPV8yMGEucGFyc2U9PT10cnVlP3RydWU6ZmFsc2U7aWYo
dHlwZW9mIF8yMGEudGVtcGxhdGU9PSJzdHJpbmciKXt2YXIgXzIwZD1fMjBhLnRlbXBsYXRlRnVu
Y3x8KGRvam8uc3RyaW5nJiZkb2pvLnN0cmluZy5zdWJzdGl0dXRlKTtfMjBhPV8yMGQ/XzIwZChf
MjBhLnRlbXBsYXRlLF8yMGEpOl8yMGE7fXZhciB0eXBlPSh0eXBlb2YgXzIwYSk7aWYodHlwZT09
InN0cmluZyJ8fHR5cGU9PSJudW1iZXIiKXtfMjBhPWRvam8uX3RvRG9tKF8yMGEsKF8yMGImJl8y
MGIub3duZXJEb2N1bWVudCkpO2lmKF8yMGEubm9kZVR5cGU9PTExKXtfMjBhPWRvam8uX3RvQXJy
YXkoXzIwYS5jaGlsZE5vZGVzKTt9ZWxzZXtfMjBhPVtfMjBhXTt9fWVsc2V7aWYoIWRvam8uaXNB
cnJheUxpa2UoXzIwYSkpe18yMGE9W18yMGFdO31lbHNle2lmKCFkb2pvLmlzQXJyYXkoXzIwYSkp
e18yMGE9ZG9qby5fdG9BcnJheShfMjBhKTt9fX1pZihfMjBjKXtfMjBhLl9ydW5QYXJzZT10cnVl
O31yZXR1cm4gXzIwYTt9LF9jbG9uZU5vZGU6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGUuY2xv
bmVOb2RlKHRydWUpO30sX3BsYWNlOmZ1bmN0aW9uKGFyeSxfMjBlLF8yMGYsXzIxMCl7aWYoXzIw
ZS5ub2RlVHlwZSE9MSYmXzIwZj09Im9ubHkiKXtyZXR1cm47fXZhciBfMjExPV8yMGUsXzIxMjt2
YXIgXzIxMz1hcnkubGVuZ3RoO2Zvcih2YXIgaT1fMjEzLTE7aT49MDtpLS0pe3ZhciBub2RlPShf
MjEwP3RoaXMuX2Nsb25lTm9kZShhcnlbaV0pOmFyeVtpXSk7aWYoYXJ5Ll9ydW5QYXJzZSYmZG9q
by5wYXJzZXImJmRvam8ucGFyc2VyLnBhcnNlKXtpZighXzIxMil7XzIxMj1fMjExLm93bmVyRG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7fV8yMTIuYXBwZW5kQ2hpbGQobm9kZSk7ZG9qby5w
YXJzZXIucGFyc2UoXzIxMik7bm9kZT1fMjEyLmZpcnN0Q2hpbGQ7d2hpbGUoXzIxMi5maXJzdENo
aWxkKXtfMjEyLnJlbW92ZUNoaWxkKF8yMTIuZmlyc3RDaGlsZCk7fX1pZihpPT1fMjEzLTEpe2Rv
am8ucGxhY2Uobm9kZSxfMjExLF8yMGYpO31lbHNle18yMTEucGFyZW50Tm9kZS5pbnNlcnRCZWZv
cmUobm9kZSxfMjExKTt9XzIxMT1ub2RlO319LF9zdGFzaDpmdW5jdGlvbihfMjE0KXt0aGlzLl9w
YXJlbnQ9XzIxNDtyZXR1cm4gdGhpczt9LGVuZDpmdW5jdGlvbigpe2lmKHRoaXMuX3BhcmVudCl7
cmV0dXJuIHRoaXMuX3BhcmVudDt9ZWxzZXtyZXR1cm4gbmV3IHRoaXMuX05vZGVMaXN0Q3Rvcigp
O319LGNvbmNhdDpmdW5jdGlvbihpdGVtKXt2YXIgdD1kLmlzQXJyYXkodGhpcyk/dGhpczphcHMu
Y2FsbCh0aGlzLDApLG09ZC5tYXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe3JldHVybiBhJiYhZC5p
c0FycmF5KGEpJiYodHlwZW9mIE5vZGVMaXN0IT0idW5kZWZpbmVkIiYmYS5jb25zdHJ1Y3Rvcj09
PU5vZGVMaXN0fHxhLmNvbnN0cnVjdG9yPT09dGhpcy5fTm9kZUxpc3RDdG9yKT9hcHMuY2FsbChh
LDApOmE7fSk7cmV0dXJuIHRoaXMuX3dyYXAoYXBjLmFwcGx5KHQsbSksdGhpcyk7fSxtYXA6ZnVu
Y3Rpb24oZnVuYyxvYmope3JldHVybiB0aGlzLl93cmFwKGQubWFwKHRoaXMsZnVuYyxvYmopLHRo
aXMpO30sZm9yRWFjaDpmdW5jdGlvbihfMjE1LF8yMTYpe2QuZm9yRWFjaCh0aGlzLF8yMTUsXzIx
Nik7cmV0dXJuIHRoaXM7fSxjb29yZHM6XzIwNShkLmNvb3JkcykscG9zaXRpb246XzIwNShkLnBv
c2l0aW9uKSxwbGFjZTpmdW5jdGlvbihfMjE3LF8yMTgpe3ZhciBpdGVtPWQucXVlcnkoXzIxNylb
MF07cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihub2RlKXtkLnBsYWNlKG5vZGUsaXRlbSxf
MjE4KTt9KTt9LG9ycGhhbjpmdW5jdGlvbihfMjE5KXtyZXR1cm4gKF8yMTk/ZC5fZmlsdGVyUXVl
cnlSZXN1bHQodGhpcyxfMjE5KTp0aGlzKS5mb3JFYWNoKF8yMDkpO30sYWRvcHQ6ZnVuY3Rpb24o
XzIxYSxfMjFiKXtyZXR1cm4gZC5xdWVyeShfMjFhKS5wbGFjZSh0aGlzWzBdLF8yMWIpLl9zdGFz
aCh0aGlzKTt9LHF1ZXJ5OmZ1bmN0aW9uKF8yMWMpe2lmKCFfMjFjKXtyZXR1cm4gdGhpczt9dmFy
IHJldD10aGlzLm1hcChmdW5jdGlvbihub2RlKXtyZXR1cm4gZC5xdWVyeShfMjFjLG5vZGUpLmZp
bHRlcihmdW5jdGlvbihfMjFkKXtyZXR1cm4gXzIxZCE9PXVuZGVmaW5lZDt9KTt9KTtyZXR1cm4g
dGhpcy5fd3JhcChhcGMuYXBwbHkoW10scmV0KSx0aGlzKTt9LGZpbHRlcjpmdW5jdGlvbihfMjFl
KXt2YXIgYT1hcmd1bWVudHMsXzIxZj10aGlzLF8yMjA9MDtpZih0eXBlb2YgXzIxZT09InN0cmlu
ZyIpe18yMWY9ZC5fZmlsdGVyUXVlcnlSZXN1bHQodGhpcyxhWzBdKTtpZihhLmxlbmd0aD09MSl7
cmV0dXJuIF8yMWYuX3N0YXNoKHRoaXMpO31fMjIwPTE7fXJldHVybiB0aGlzLl93cmFwKGQuZmls
dGVyKF8yMWYsYVtfMjIwXSxhW18yMjArMV0pLHRoaXMpO30sYWRkQ29udGVudDpmdW5jdGlvbihf
MjIxLF8yMjIpe18yMjE9dGhpcy5fbm9ybWFsaXplKF8yMjEsdGhpc1swXSk7Zm9yKHZhciBpPTAs
bm9kZTsobm9kZT10aGlzW2ldKTtpKyspe3RoaXMuX3BsYWNlKF8yMjEsbm9kZSxfMjIyLGk+MCk7
fXJldHVybiB0aGlzO30saW5zdGFudGlhdGU6ZnVuY3Rpb24oXzIyMyxfMjI0KXt2YXIgYz1kLmlz
RnVuY3Rpb24oXzIyMyk/XzIyMzpkLmdldE9iamVjdChfMjIzKTtfMjI0PV8yMjR8fHt9O3JldHVy
biB0aGlzLmZvckVhY2goZnVuY3Rpb24obm9kZSl7bmV3IGMoXzIyNCxub2RlKTt9KTt9LGF0OmZ1
bmN0aW9uKCl7dmFyIHQ9bmV3IHRoaXMuX05vZGVMaXN0Q3RvcigpO2QuZm9yRWFjaChhcmd1bWVu
dHMsZnVuY3Rpb24oaSl7aWYoaTwwKXtpPXRoaXMubGVuZ3RoK2k7fWlmKHRoaXNbaV0pe3QucHVz
aCh0aGlzW2ldKTt9fSx0aGlzKTtyZXR1cm4gdC5fc3Rhc2godGhpcyk7fX0pO25sLmV2ZW50cz1b
ImJsdXIiLCJmb2N1cyIsImNoYW5nZSIsImNsaWNrIiwiZXJyb3IiLCJrZXlkb3duIiwia2V5cHJl
c3MiLCJrZXl1cCIsImxvYWQiLCJtb3VzZWRvd24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIs
Im1vdXNlbW92ZSIsIm1vdXNlb3V0IiwibW91c2VvdmVyIiwibW91c2V1cCIsInN1Ym1pdCJdO2Qu
Zm9yRWFjaChubC5ldmVudHMsZnVuY3Rpb24oZXZ0KXt2YXIgXzIyNT0ib24iK2V2dDtubHBbXzIy
NV09ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5jb25uZWN0KF8yMjUsYSxiKTt9O30pO30pKCk7
fWlmKCFkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS5xdWVyeSJdKXtkb2pvLl9oYXNSZXNv
dXJjZVsiZG9qby5fYmFzZS5xdWVyeSJdPXRydWU7KGZ1bmN0aW9uKCl7dmFyIF8yMjY9ZnVuY3Rp
b24oZCl7dmFyIHRyaW09ZC50cmltO3ZhciBlYWNoPWQuZm9yRWFjaDt2YXIgcWxjPShkLl9Ob2Rl
TGlzdEN0b3I9ZC5Ob2RlTGlzdCk7dmFyIF8yMjc9ZnVuY3Rpb24oKXtyZXR1cm4gZC5kb2M7fTt2
YXIgXzIyOD0oKGQuaXNXZWJLaXR8fGQuaXNNb3ppbGxhKSYmKChfMjI3KCkuY29tcGF0TW9kZSk9
PSJCYWNrQ29tcGF0IikpO3ZhciBfMjI5PSEhXzIyNygpLmZpcnN0Q2hpbGRbImNoaWxkcmVuIl0/
ImNoaWxkcmVuIjoiY2hpbGROb2RlcyI7dmFyIF8yMmE9Ij5+KyI7dmFyIF8yMmI9ZmFsc2U7dmFy
IF8yMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9O3ZhciBfMjJkPWZ1bmN0aW9uKF8yMmUpe2lm
KF8yMmEuaW5kZXhPZihfMjJlLnNsaWNlKC0xKSk+PTApe18yMmUrPSIgKiAiO31lbHNle18yMmUr
PSIgIjt9dmFyIHRzPWZ1bmN0aW9uKHMsZSl7cmV0dXJuIHRyaW0oXzIyZS5zbGljZShzLGUpKTt9
O3ZhciBfMjJmPVtdO3ZhciBfMjMwPS0xLF8yMzE9LTEsXzIzMj0tMSxfMjMzPS0xLF8yMzQ9LTEs
aW5JZD0tMSxfMjM1PS0xLGxjPSIiLGNjPSIiLF8yMzY7dmFyIHg9MCxxbD1fMjJlLmxlbmd0aCxf
MjM3PW51bGwsXzIzOD1udWxsO3ZhciBfMjM5PWZ1bmN0aW9uKCl7aWYoXzIzNT49MCl7dmFyIHR2
PShfMjM1PT14KT9udWxsOnRzKF8yMzUseCk7XzIzN1soXzIyYS5pbmRleE9mKHR2KTwwKT8idGFn
Ijoib3BlciJdPXR2O18yMzU9LTE7fX07dmFyIF8yM2E9ZnVuY3Rpb24oKXtpZihpbklkPj0wKXtf
MjM3LmlkPXRzKGluSWQseCkucmVwbGFjZSgvXFwvZywiIik7aW5JZD0tMTt9fTt2YXIgXzIzYj1m
dW5jdGlvbigpe2lmKF8yMzQ+PTApe18yMzcuY2xhc3Nlcy5wdXNoKHRzKF8yMzQrMSx4KS5yZXBs
YWNlKC9cXC9nLCIiKSk7XzIzND0tMTt9fTt2YXIgXzIzYz1mdW5jdGlvbigpe18yM2EoKTtfMjM5
KCk7XzIzYigpO307dmFyIF8yM2Q9ZnVuY3Rpb24oKXtfMjNjKCk7aWYoXzIzMz49MCl7XzIzNy5w
c2V1ZG9zLnB1c2goe25hbWU6dHMoXzIzMysxLHgpfSk7fV8yMzcubG9vcHM9KF8yMzcucHNldWRv
cy5sZW5ndGh8fF8yMzcuYXR0cnMubGVuZ3RofHxfMjM3LmNsYXNzZXMubGVuZ3RoKTtfMjM3Lm9x
dWVyeT1fMjM3LnF1ZXJ5PXRzKF8yMzYseCk7XzIzNy5vdGFnPV8yMzcudGFnPShfMjM3WyJvcGVy
Il0pP251bGw6KF8yMzcudGFnfHwiKiIpO2lmKF8yMzcudGFnKXtfMjM3LnRhZz1fMjM3LnRhZy50
b1VwcGVyQ2FzZSgpO31pZihfMjJmLmxlbmd0aCYmKF8yMmZbXzIyZi5sZW5ndGgtMV0ub3Blcikp
e18yMzcuaW5maXhPcGVyPV8yMmYucG9wKCk7XzIzNy5xdWVyeT1fMjM3LmluZml4T3Blci5xdWVy
eSsiICIrXzIzNy5xdWVyeTt9XzIyZi5wdXNoKF8yMzcpO18yMzc9bnVsbDt9O2Zvcig7bGM9Y2Ms
Y2M9XzIyZS5jaGFyQXQoeCkseDxxbDt4Kyspe2lmKGxjPT0iXFwiKXtjb250aW51ZTt9aWYoIV8y
Mzcpe18yMzY9eDtfMjM3PXtxdWVyeTpudWxsLHBzZXVkb3M6W10sYXR0cnM6W10sY2xhc3Nlczpb
XSx0YWc6bnVsbCxvcGVyOm51bGwsaWQ6bnVsbCxnZXRUYWc6ZnVuY3Rpb24oKXtyZXR1cm4gKF8y
MmIpP3RoaXMub3RhZzp0aGlzLnRhZzt9fTtfMjM1PXg7fWlmKF8yMzA+PTApe2lmKGNjPT0iXSIp
e2lmKCFfMjM4LmF0dHIpe18yMzguYXR0cj10cyhfMjMwKzEseCk7fWVsc2V7XzIzOC5tYXRjaEZv
cj10cygoXzIzMnx8XzIzMCsxKSx4KTt9dmFyIGNtZj1fMjM4Lm1hdGNoRm9yO2lmKGNtZil7aWYo
KGNtZi5jaGFyQXQoMCk9PSJcIiIpfHwoY21mLmNoYXJBdCgwKT09IiciKSl7XzIzOC5tYXRjaEZv
cj1jbWYuc2xpY2UoMSwtMSk7fX1fMjM3LmF0dHJzLnB1c2goXzIzOCk7XzIzOD1udWxsO18yMzA9
XzIzMj0tMTt9ZWxzZXtpZihjYz09Ij0iKXt2YXIgXzIzZT0oInx+XiQqIi5pbmRleE9mKGxjKT49
MCk/bGM6IiI7XzIzOC50eXBlPV8yM2UrY2M7XzIzOC5hdHRyPXRzKF8yMzArMSx4LV8yM2UubGVu
Z3RoKTtfMjMyPXgrMTt9fX1lbHNle2lmKF8yMzE+PTApe2lmKGNjPT0iKSIpe2lmKF8yMzM+PTAp
e18yMzgudmFsdWU9dHMoXzIzMSsxLHgpO31fMjMzPV8yMzE9LTE7fX1lbHNle2lmKGNjPT0iIyIp
e18yM2MoKTtpbklkPXgrMTt9ZWxzZXtpZihjYz09Ii4iKXtfMjNjKCk7XzIzND14O31lbHNle2lm
KGNjPT0iOiIpe18yM2MoKTtfMjMzPXg7fWVsc2V7aWYoY2M9PSJbIil7XzIzYygpO18yMzA9eDtf
MjM4PXt9O31lbHNle2lmKGNjPT0iKCIpe2lmKF8yMzM+PTApe18yMzg9e25hbWU6dHMoXzIzMysx
LHgpLHZhbHVlOm51bGx9O18yMzcucHNldWRvcy5wdXNoKF8yMzgpO31fMjMxPXg7fWVsc2V7aWYo
KGNjPT0iICIpJiYobGMhPWNjKSl7XzIzZCgpO319fX19fX19fXJldHVybiBfMjJmO307dmFyIF8y
M2Y9ZnVuY3Rpb24oXzI0MCxfMjQxKXtpZighXzI0MCl7cmV0dXJuIF8yNDE7fWlmKCFfMjQxKXty
ZXR1cm4gXzI0MDt9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIF8yNDAuYXBwbHkod2luZG93LGFy
Z3VtZW50cykmJl8yNDEuYXBwbHkod2luZG93LGFyZ3VtZW50cyk7fTt9O3ZhciBfMjQyPWZ1bmN0
aW9uKGksYXJyKXt2YXIgcj1hcnJ8fFtdO2lmKGkpe3IucHVzaChpKTt9cmV0dXJuIHI7fTt2YXIg
XzI0Mz1mdW5jdGlvbihuKXtyZXR1cm4gKDE9PW4ubm9kZVR5cGUpO307dmFyIF8yNDQ9IiI7dmFy
IF8yNDU9ZnVuY3Rpb24oZWxlbSxhdHRyKXtpZighZWxlbSl7cmV0dXJuIF8yNDQ7fWlmKGF0dHI9
PSJjbGFzcyIpe3JldHVybiBlbGVtLmNsYXNzTmFtZXx8XzI0NDt9aWYoYXR0cj09ImZvciIpe3Jl
dHVybiBlbGVtLmh0bWxGb3J8fF8yNDQ7fWlmKGF0dHI9PSJzdHlsZSIpe3JldHVybiBlbGVtLnN0
eWxlLmNzc1RleHR8fF8yNDQ7fXJldHVybiAoXzIyYj9lbGVtLmdldEF0dHJpYnV0ZShhdHRyKTpl
bGVtLmdldEF0dHJpYnV0ZShhdHRyLDIpKXx8XzI0NDt9O3ZhciBfMjQ2PXsiKj0iOmZ1bmN0aW9u
KGF0dHIsXzI0Nyl7cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe3JldHVybiAoXzI0NShlbGVtLGF0dHIp
LmluZGV4T2YoXzI0Nyk+PTApO307fSwiXj0iOmZ1bmN0aW9uKGF0dHIsXzI0OCl7cmV0dXJuIGZ1
bmN0aW9uKGVsZW0pe3JldHVybiAoXzI0NShlbGVtLGF0dHIpLmluZGV4T2YoXzI0OCk9PTApO307
fSwiJD0iOmZ1bmN0aW9uKGF0dHIsXzI0OSl7dmFyIHR2YWw9IiAiK18yNDk7cmV0dXJuIGZ1bmN0
aW9uKGVsZW0pe3ZhciBlYT0iICIrXzI0NShlbGVtLGF0dHIpO3JldHVybiAoZWEubGFzdEluZGV4
T2YoXzI0OSk9PShlYS5sZW5ndGgtXzI0OS5sZW5ndGgpKTt9O30sIn49IjpmdW5jdGlvbihhdHRy
LF8yNGEpe3ZhciB0dmFsPSIgIitfMjRhKyIgIjtyZXR1cm4gZnVuY3Rpb24oZWxlbSl7dmFyIGVh
PSIgIitfMjQ1KGVsZW0sYXR0cikrIiAiO3JldHVybiAoZWEuaW5kZXhPZih0dmFsKT49MCk7fTt9
LCJ8PSI6ZnVuY3Rpb24oYXR0cixfMjRiKXt2YXIgXzI0Yz0iICIrXzI0YisiLSI7cmV0dXJuIGZ1
bmN0aW9uKGVsZW0pe3ZhciBlYT0iICIrXzI0NShlbGVtLGF0dHIpO3JldHVybiAoKGVhPT1fMjRi
KXx8KGVhLmluZGV4T2YoXzI0Yyk9PTApKTt9O30sIj0iOmZ1bmN0aW9uKGF0dHIsXzI0ZCl7cmV0
dXJuIGZ1bmN0aW9uKGVsZW0pe3JldHVybiAoXzI0NShlbGVtLGF0dHIpPT1fMjRkKTt9O319O3Zh
ciBfMjRlPSh0eXBlb2YgXzIyNygpLmZpcnN0Q2hpbGQubmV4dEVsZW1lbnRTaWJsaW5nPT0idW5k
ZWZpbmVkIik7dmFyIF8yNGY9IV8yNGU/Im5leHRFbGVtZW50U2libGluZyI6Im5leHRTaWJsaW5n
Ijt2YXIgXzI1MD0hXzI0ZT8icHJldmlvdXNFbGVtZW50U2libGluZyI6InByZXZpb3VzU2libGlu
ZyI7dmFyIF8yNTE9KF8yNGU/XzI0MzpfMjJjKTt2YXIgXzI1Mj1mdW5jdGlvbihub2RlKXt3aGls
ZShub2RlPW5vZGVbXzI1MF0pe2lmKF8yNTEobm9kZSkpe3JldHVybiBmYWxzZTt9fXJldHVybiB0
cnVlO307dmFyIF8yNTM9ZnVuY3Rpb24obm9kZSl7d2hpbGUobm9kZT1ub2RlW18yNGZdKXtpZihf
MjUxKG5vZGUpKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTt9O3ZhciBfMjU0PWZ1bmN0aW9u
KG5vZGUpe3ZhciByb290PW5vZGUucGFyZW50Tm9kZTt2YXIgaT0wLHRyZXQ9cm9vdFtfMjI5XSxj
aT0obm9kZVsiX2kiXXx8LTEpLGNsPShyb290WyJfbCJdfHwtMSk7aWYoIXRyZXQpe3JldHVybiAt
MTt9dmFyIGw9dHJldC5sZW5ndGg7aWYoY2w9PWwmJmNpPj0wJiZjbD49MCl7cmV0dXJuIGNpO31y
b290WyJfbCJdPWw7Y2k9LTE7Zm9yKHZhciB0ZT1yb290WyJmaXJzdEVsZW1lbnRDaGlsZCJdfHxy
b290WyJmaXJzdENoaWxkIl07dGU7dGU9dGVbXzI0Zl0pe2lmKF8yNTEodGUpKXt0ZVsiX2kiXT0r
K2k7aWYobm9kZT09PXRlKXtjaT1pO319fXJldHVybiBjaTt9O3ZhciBfMjU1PWZ1bmN0aW9uKGVs
ZW0pe3JldHVybiAhKChfMjU0KGVsZW0pKSUyKTt9O3ZhciBfMjU2PWZ1bmN0aW9uKGVsZW0pe3Jl
dHVybiAoKF8yNTQoZWxlbSkpJTIpO307dmFyIF8yNTc9eyJjaGVja2VkIjpmdW5jdGlvbihuYW1l
LF8yNTgpe3JldHVybiBmdW5jdGlvbihlbGVtKXtyZXR1cm4gISEoImNoZWNrZWQiIGluIGVsZW0/
ZWxlbS5jaGVja2VkOmVsZW0uc2VsZWN0ZWQpO307fSwiZmlyc3QtY2hpbGQiOmZ1bmN0aW9uKCl7
cmV0dXJuIF8yNTI7fSwibGFzdC1jaGlsZCI6ZnVuY3Rpb24oKXtyZXR1cm4gXzI1Mzt9LCJvbmx5
LWNoaWxkIjpmdW5jdGlvbihuYW1lLF8yNTkpe3JldHVybiBmdW5jdGlvbihub2RlKXtpZighXzI1
Mihub2RlKSl7cmV0dXJuIGZhbHNlO31pZighXzI1Myhub2RlKSl7cmV0dXJuIGZhbHNlO31yZXR1
cm4gdHJ1ZTt9O30sImVtcHR5IjpmdW5jdGlvbihuYW1lLF8yNWEpe3JldHVybiBmdW5jdGlvbihl
bGVtKXt2YXIgY249ZWxlbS5jaGlsZE5vZGVzO3ZhciBjbmw9ZWxlbS5jaGlsZE5vZGVzLmxlbmd0
aDtmb3IodmFyIHg9Y25sLTE7eD49MDt4LS0pe3ZhciBudD1jblt4XS5ub2RlVHlwZTtpZigobnQ9
PT0xKXx8KG50PT0zKSl7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7fTt9LCJjb250YWlucyI6
ZnVuY3Rpb24obmFtZSxfMjViKXt2YXIgY3o9XzI1Yi5jaGFyQXQoMCk7aWYoY3o9PSJcIiJ8fGN6
PT0iJyIpe18yNWI9XzI1Yi5zbGljZSgxLC0xKTt9cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe3JldHVy
biAoZWxlbS5pbm5lckhUTUwuaW5kZXhPZihfMjViKT49MCk7fTt9LCJub3QiOmZ1bmN0aW9uKG5h
bWUsXzI1Yyl7dmFyIHA9XzIyZChfMjVjKVswXTt2YXIgXzI1ZD17ZWw6MX07aWYocC50YWchPSIq
Iil7XzI1ZC50YWc9MTt9aWYoIXAuY2xhc3Nlcy5sZW5ndGgpe18yNWQuY2xhc3Nlcz0xO312YXIg
bnRmPV8yNWUocCxfMjVkKTtyZXR1cm4gZnVuY3Rpb24oZWxlbSl7cmV0dXJuICghbnRmKGVsZW0p
KTt9O30sIm50aC1jaGlsZCI6ZnVuY3Rpb24obmFtZSxfMjVmKXt2YXIgcGk9cGFyc2VJbnQ7aWYo
XzI1Zj09Im9kZCIpe3JldHVybiBfMjU2O31lbHNle2lmKF8yNWY9PSJldmVuIil7cmV0dXJuIF8y
NTU7fX1pZihfMjVmLmluZGV4T2YoIm4iKSE9LTEpe3ZhciBfMjYwPV8yNWYuc3BsaXQoIm4iLDIp
O3ZhciBwcmVkPV8yNjBbMF0/KChfMjYwWzBdPT0iLSIpPy0xOnBpKF8yNjBbMF0pKToxO3ZhciBp
ZHg9XzI2MFsxXT9waShfMjYwWzFdKTowO3ZhciBsYj0wLHViPS0xO2lmKHByZWQ+MCl7aWYoaWR4
PDApe2lkeD0oaWR4JXByZWQpJiYocHJlZCsoaWR4JXByZWQpKTt9ZWxzZXtpZihpZHg+MCl7aWYo
aWR4Pj1wcmVkKXtsYj1pZHgtaWR4JXByZWQ7fWlkeD1pZHglcHJlZDt9fX1lbHNle2lmKHByZWQ8
MCl7cHJlZCo9LTE7aWYoaWR4PjApe3ViPWlkeDtpZHg9aWR4JXByZWQ7fX19aWYocHJlZD4wKXty
ZXR1cm4gZnVuY3Rpb24oZWxlbSl7dmFyIGk9XzI1NChlbGVtKTtyZXR1cm4gKGk+PWxiKSYmKHVi
PDB8fGk8PXViKSYmKChpJXByZWQpPT1pZHgpO307fWVsc2V7XzI1Zj1pZHg7fX12YXIgXzI2MT1w
aShfMjVmKTtyZXR1cm4gZnVuY3Rpb24oZWxlbSl7cmV0dXJuIChfMjU0KGVsZW0pPT1fMjYxKTt9
O319O3ZhciBfMjYyPShkLmlzSUU8OXx8KGRvam8uaXNJRSYmZG9qby5pc1F1aXJrcykpP2Z1bmN0
aW9uKGNvbmQpe3ZhciBjbGM9Y29uZC50b0xvd2VyQ2FzZSgpO2lmKGNsYz09ImNsYXNzIil7Y29u
ZD0iY2xhc3NOYW1lIjt9cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe3JldHVybiAoXzIyYj9lbGVtLmdl
dEF0dHJpYnV0ZShjb25kKTplbGVtW2NvbmRdfHxlbGVtW2NsY10pO307fTpmdW5jdGlvbihjb25k
KXtyZXR1cm4gZnVuY3Rpb24oZWxlbSl7cmV0dXJuIChlbGVtJiZlbGVtLmdldEF0dHJpYnV0ZSYm
ZWxlbS5oYXNBdHRyaWJ1dGUoY29uZCkpO307fTt2YXIgXzI1ZT1mdW5jdGlvbihfMjYzLF8yNjQp
e2lmKCFfMjYzKXtyZXR1cm4gXzIyYzt9XzI2ND1fMjY0fHx7fTt2YXIgZmY9bnVsbDtpZighKCJl
bCIgaW4gXzI2NCkpe2ZmPV8yM2YoZmYsXzI0Myk7fWlmKCEoInRhZyIgaW4gXzI2NCkpe2lmKF8y
NjMudGFnIT0iKiIpe2ZmPV8yM2YoZmYsZnVuY3Rpb24oZWxlbSl7cmV0dXJuIChlbGVtJiYoZWxl
bS50YWdOYW1lPT1fMjYzLmdldFRhZygpKSk7fSk7fX1pZighKCJjbGFzc2VzIiBpbiBfMjY0KSl7
ZWFjaChfMjYzLmNsYXNzZXMsZnVuY3Rpb24oXzI2NSxpZHgsYXJyKXt2YXIgcmU9bmV3IFJlZ0V4
cCgiKD86XnxcXHMpIitfMjY1KyIoPzpcXHN8JCkiKTtmZj1fMjNmKGZmLGZ1bmN0aW9uKGVsZW0p
e3JldHVybiByZS50ZXN0KGVsZW0uY2xhc3NOYW1lKTt9KTtmZi5jb3VudD1pZHg7fSk7fWlmKCEo
InBzZXVkb3MiIGluIF8yNjQpKXtlYWNoKF8yNjMucHNldWRvcyxmdW5jdGlvbihfMjY2KXt2YXIg
cG49XzI2Ni5uYW1lO2lmKF8yNTdbcG5dKXtmZj1fMjNmKGZmLF8yNTdbcG5dKHBuLF8yNjYudmFs
dWUpKTt9fSk7fWlmKCEoImF0dHJzIiBpbiBfMjY0KSl7ZWFjaChfMjYzLmF0dHJzLGZ1bmN0aW9u
KGF0dHIpe3ZhciBfMjY3O3ZhciBhPWF0dHIuYXR0cjtpZihhdHRyLnR5cGUmJl8yNDZbYXR0ci50
eXBlXSl7XzI2Nz1fMjQ2W2F0dHIudHlwZV0oYSxhdHRyLm1hdGNoRm9yKTt9ZWxzZXtpZihhLmxl
bmd0aCl7XzI2Nz1fMjYyKGEpO319aWYoXzI2Nyl7ZmY9XzIzZihmZixfMjY3KTt9fSk7fWlmKCEo
ImlkIiBpbiBfMjY0KSl7aWYoXzI2My5pZCl7ZmY9XzIzZihmZixmdW5jdGlvbihlbGVtKXtyZXR1
cm4gKCEhZWxlbSYmKGVsZW0uaWQ9PV8yNjMuaWQpKTt9KTt9fWlmKCFmZil7aWYoISgiZGVmYXVs
dCIgaW4gXzI2NCkpe2ZmPV8yMmM7fX1yZXR1cm4gZmY7fTt2YXIgXzI2OD1mdW5jdGlvbihfMjY5
KXtyZXR1cm4gZnVuY3Rpb24obm9kZSxyZXQsYmFnKXt3aGlsZShub2RlPW5vZGVbXzI0Zl0pe2lm
KF8yNGUmJighXzI0Myhub2RlKSkpe2NvbnRpbnVlO31pZigoIWJhZ3x8XzI2YShub2RlLGJhZykp
JiZfMjY5KG5vZGUpKXtyZXQucHVzaChub2RlKTt9YnJlYWs7fXJldHVybiByZXQ7fTt9O3ZhciBf
MjZiPWZ1bmN0aW9uKF8yNmMpe3JldHVybiBmdW5jdGlvbihyb290LHJldCxiYWcpe3ZhciB0ZT1y
b290W18yNGZdO3doaWxlKHRlKXtpZihfMjUxKHRlKSl7aWYoYmFnJiYhXzI2YSh0ZSxiYWcpKXti
cmVhazt9aWYoXzI2Yyh0ZSkpe3JldC5wdXNoKHRlKTt9fXRlPXRlW18yNGZdO31yZXR1cm4gcmV0
O307fTt2YXIgXzI2ZD1mdW5jdGlvbihfMjZlKXtfMjZlPV8yNmV8fF8yMmM7cmV0dXJuIGZ1bmN0
aW9uKHJvb3QscmV0LGJhZyl7dmFyIHRlLHg9MCx0cmV0PXJvb3RbXzIyOV07d2hpbGUodGU9dHJl
dFt4KytdKXtpZihfMjUxKHRlKSYmKCFiYWd8fF8yNmEodGUsYmFnKSkmJihfMjZlKHRlLHgpKSl7
cmV0LnB1c2godGUpO319cmV0dXJuIHJldDt9O307dmFyIF8yNmY9ZnVuY3Rpb24obm9kZSxyb290
KXt2YXIgcG49bm9kZS5wYXJlbnROb2RlO3doaWxlKHBuKXtpZihwbj09cm9vdCl7YnJlYWs7fXBu
PXBuLnBhcmVudE5vZGU7fXJldHVybiAhIXBuO307dmFyIF8yNzA9e307dmFyIF8yNzE9ZnVuY3Rp
b24oXzI3Mil7dmFyIF8yNzM9XzI3MFtfMjcyLnF1ZXJ5XTtpZihfMjczKXtyZXR1cm4gXzI3Mzt9
dmFyIGlvPV8yNzIuaW5maXhPcGVyO3ZhciBvcGVyPShpbz9pby5vcGVyOiIiKTt2YXIgXzI3ND1f
MjVlKF8yNzIse2VsOjF9KTt2YXIgcXQ9XzI3Mi50YWc7dmFyIF8yNzU9KCIqIj09cXQpO3ZhciBl
Y3M9XzIyNygpWyJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIl07aWYoIW9wZXIpe2lmKF8yNzIuaWQp
e18yNzQ9KCFfMjcyLmxvb3BzJiZfMjc1KT9fMjJjOl8yNWUoXzI3Mix7ZWw6MSxpZDoxfSk7XzI3
Mz1mdW5jdGlvbihyb290LGFycil7dmFyIHRlPWQuYnlJZChfMjcyLmlkLChyb290Lm93bmVyRG9j
dW1lbnR8fHJvb3QpKTtpZighdGV8fCFfMjc0KHRlKSl7cmV0dXJuO31pZig5PT1yb290Lm5vZGVU
eXBlKXtyZXR1cm4gXzI0Mih0ZSxhcnIpO31lbHNle2lmKF8yNmYodGUscm9vdCkpe3JldHVybiBf
MjQyKHRlLGFycik7fX19O31lbHNle2lmKGVjcyYmL1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0v
LnRlc3QoU3RyaW5nKGVjcykpJiZfMjcyLmNsYXNzZXMubGVuZ3RoJiYhXzIyOCl7XzI3ND1fMjVl
KF8yNzIse2VsOjEsY2xhc3NlczoxLGlkOjF9KTt2YXIgXzI3Nj1fMjcyLmNsYXNzZXMuam9pbigi
ICIpO18yNzM9ZnVuY3Rpb24ocm9vdCxhcnIsYmFnKXt2YXIgcmV0PV8yNDIoMCxhcnIpLHRlLHg9
MDt2YXIgdHJldD1yb290LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXzI3Nik7d2hpbGUoKHRlPXRy
ZXRbeCsrXSkpe2lmKF8yNzQodGUscm9vdCkmJl8yNmEodGUsYmFnKSl7cmV0LnB1c2godGUpO319
cmV0dXJuIHJldDt9O31lbHNle2lmKCFfMjc1JiYhXzI3Mi5sb29wcyl7XzI3Mz1mdW5jdGlvbihy
b290LGFycixiYWcpe3ZhciByZXQ9XzI0MigwLGFyciksdGUseD0wO3ZhciB0cmV0PXJvb3QuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoXzI3Mi5nZXRUYWcoKSk7d2hpbGUoKHRlPXRyZXRbeCsrXSkpe2lm
KF8yNmEodGUsYmFnKSl7cmV0LnB1c2godGUpO319cmV0dXJuIHJldDt9O31lbHNle18yNzQ9XzI1
ZShfMjcyLHtlbDoxLHRhZzoxLGlkOjF9KTtfMjczPWZ1bmN0aW9uKHJvb3QsYXJyLGJhZyl7dmFy
IHJldD1fMjQyKDAsYXJyKSx0ZSx4PTA7dmFyIHRyZXQ9cm9vdC5nZXRFbGVtZW50c0J5VGFnTmFt
ZShfMjcyLmdldFRhZygpKTt3aGlsZSgodGU9dHJldFt4KytdKSl7aWYoXzI3NCh0ZSxyb290KSYm
XzI2YSh0ZSxiYWcpKXtyZXQucHVzaCh0ZSk7fX1yZXR1cm4gcmV0O307fX19fWVsc2V7dmFyIF8y
Nzc9e2VsOjF9O2lmKF8yNzUpe18yNzcudGFnPTE7fV8yNzQ9XzI1ZShfMjcyLF8yNzcpO2lmKCIr
Ij09b3Blcil7XzI3Mz1fMjY4KF8yNzQpO31lbHNle2lmKCJ+Ij09b3Blcil7XzI3Mz1fMjZiKF8y
NzQpO31lbHNle2lmKCI+Ij09b3Blcil7XzI3Mz1fMjZkKF8yNzQpO319fX1yZXR1cm4gXzI3MFtf
MjcyLnF1ZXJ5XT1fMjczO307dmFyIF8yNzg9ZnVuY3Rpb24ocm9vdCxfMjc5KXt2YXIgXzI3YT1f
MjQyKHJvb3QpLHFwLHgsdGUscXBsPV8yNzkubGVuZ3RoLGJhZyxyZXQ7Zm9yKHZhciBpPTA7aTxx
cGw7aSsrKXtyZXQ9W107cXA9XzI3OVtpXTt4PV8yN2EubGVuZ3RoLTE7aWYoeD4wKXtiYWc9e307
cmV0Lm5vemlwPXRydWU7fXZhciBnZWY9XzI3MShxcCk7Zm9yKHZhciBqPTA7KHRlPV8yN2Fbal0p
O2orKyl7Z2VmKHRlLHJldCxiYWcpO31pZighcmV0Lmxlbmd0aCl7YnJlYWs7fV8yN2E9cmV0O31y
ZXR1cm4gcmV0O307dmFyIF8yN2I9e30sXzI3Yz17fTt2YXIgXzI3ZD1mdW5jdGlvbihfMjdlKXt2
YXIgXzI3Zj1fMjJkKHRyaW0oXzI3ZSkpO2lmKF8yN2YubGVuZ3RoPT0xKXt2YXIgdGVmPV8yNzEo
XzI3ZlswXSk7cmV0dXJuIGZ1bmN0aW9uKHJvb3Qpe3ZhciByPXRlZihyb290LG5ldyBxbGMoKSk7
aWYocil7ci5ub3ppcD10cnVlO31yZXR1cm4gcjt9O31yZXR1cm4gZnVuY3Rpb24ocm9vdCl7cmV0
dXJuIF8yNzgocm9vdCxfMjdmKTt9O307dmFyIG51YT1uYXZpZ2F0b3IudXNlckFnZW50O3ZhciB3
az0iV2ViS2l0LyI7dmFyIF8yODA9KGQuaXNXZWJLaXQmJihudWEuaW5kZXhPZih3ayk+MCkmJihw
YXJzZUZsb2F0KG51YS5zcGxpdCh3aylbMV0pPjUyOCkpO3ZhciBfMjgxPWQuaXNJRT8iY29tbWVu
dFN0cmlwIjoibm96aXAiO3ZhciBxc2E9InF1ZXJ5U2VsZWN0b3JBbGwiO3ZhciBfMjgyPSghIV8y
MjcoKVtxc2FdJiYoIWQuaXNTYWZhcml8fChkLmlzU2FmYXJpPjMuMSl8fF8yODApKTt2YXIgXzI4
Mz0vblwrXGR8KFteIF0pPyhbPn4rXSkoW14gPV0pPy9nO3ZhciBfMjg0PWZ1bmN0aW9uKF8yODUs
cHJlLGNoLHBvc3Qpe3JldHVybiBjaD8ocHJlP3ByZSsiICI6IiIpK2NoKyhwb3N0PyIgIitwb3N0
OiIiKTpfMjg1O307dmFyIF8yODY9ZnVuY3Rpb24oXzI4NyxfMjg4KXtfMjg3PV8yODcucmVwbGFj
ZShfMjgzLF8yODQpO2lmKF8yODIpe3ZhciBfMjg5PV8yN2NbXzI4N107aWYoXzI4OSYmIV8yODgp
e3JldHVybiBfMjg5O319dmFyIF8yOGE9XzI3YltfMjg3XTtpZihfMjhhKXtyZXR1cm4gXzI4YTt9
dmFyIHFjej1fMjg3LmNoYXJBdCgwKTt2YXIgXzI4Yj0oLTE9PV8yODcuaW5kZXhPZigiICIpKTtp
ZigoXzI4Ny5pbmRleE9mKCIjIik+PTApJiYoXzI4Yikpe18yODg9dHJ1ZTt9dmFyIF8yOGM9KF8y
ODImJighXzI4OCkmJihfMjJhLmluZGV4T2YocWN6KT09LTEpJiYoIWQuaXNJRXx8KF8yODcuaW5k
ZXhPZigiOiIpPT0tMSkpJiYoIShfMjI4JiYoXzI4Ny5pbmRleE9mKCIuIik+PTApKSkmJihfMjg3
LmluZGV4T2YoIjpjb250YWlucyIpPT0tMSkmJihfMjg3LmluZGV4T2YoIjpjaGVja2VkIik9PS0x
KSYmKF8yODcuaW5kZXhPZigifD0iKT09LTEpKTtpZihfMjhjKXt2YXIgdHE9KF8yMmEuaW5kZXhP
ZihfMjg3LmNoYXJBdChfMjg3Lmxlbmd0aC0xKSk+PTApPyhfMjg3KyIgKiIpOl8yODc7cmV0dXJu
IF8yN2NbXzI4N109ZnVuY3Rpb24ocm9vdCl7dHJ5e2lmKCEoKDk9PXJvb3Qubm9kZVR5cGUpfHxf
MjhiKSl7dGhyb3cgIiI7fXZhciByPXJvb3RbcXNhXSh0cSk7cltfMjgxXT10cnVlO3JldHVybiBy
O31jYXRjaChlKXtyZXR1cm4gXzI4NihfMjg3LHRydWUpKHJvb3QpO319O31lbHNle3ZhciBfMjhk
PV8yODcuc3BsaXQoL1xzKixccyovKTtyZXR1cm4gXzI3YltfMjg3XT0oKF8yOGQubGVuZ3RoPDIp
P18yN2QoXzI4Nyk6ZnVuY3Rpb24ocm9vdCl7dmFyIF8yOGU9MCxyZXQ9W10sdHA7d2hpbGUoKHRw
PV8yOGRbXzI4ZSsrXSkpe3JldD1yZXQuY29uY2F0KF8yN2QodHApKHJvb3QpKTt9cmV0dXJuIHJl
dDt9KTt9fTt2YXIgXzI4Zj0wO3ZhciBfMjkwPWQuaXNJRT9mdW5jdGlvbihub2RlKXtpZihfMjJi
KXtyZXR1cm4gKG5vZGUuZ2V0QXR0cmlidXRlKCJfdWlkIil8fG5vZGUuc2V0QXR0cmlidXRlKCJf
dWlkIiwrK18yOGYpfHxfMjhmKTt9ZWxzZXtyZXR1cm4gbm9kZS51bmlxdWVJRDt9fTpmdW5jdGlv
bihub2RlKXtyZXR1cm4gKG5vZGUuX3VpZHx8KG5vZGUuX3VpZD0rK18yOGYpKTt9O3ZhciBfMjZh
PWZ1bmN0aW9uKG5vZGUsYmFnKXtpZighYmFnKXtyZXR1cm4gMTt9dmFyIGlkPV8yOTAobm9kZSk7
aWYoIWJhZ1tpZF0pe3JldHVybiBiYWdbaWRdPTE7fXJldHVybiAwO307dmFyIF8yOTE9Il96aXBJ
ZHgiO3ZhciBfMjkyPWZ1bmN0aW9uKGFycil7aWYoYXJyJiZhcnIubm96aXApe3JldHVybiAocWxj
Ll93cmFwKT9xbGMuX3dyYXAoYXJyKTphcnI7fXZhciByZXQ9bmV3IHFsYygpO2lmKCFhcnJ8fCFh
cnIubGVuZ3RoKXtyZXR1cm4gcmV0O31pZihhcnJbMF0pe3JldC5wdXNoKGFyclswXSk7fWlmKGFy
ci5sZW5ndGg8Mil7cmV0dXJuIHJldDt9XzI4ZisrO2lmKGQuaXNJRSYmXzIyYil7dmFyIF8yOTM9
XzI4ZisiIjthcnJbMF0uc2V0QXR0cmlidXRlKF8yOTEsXzI5Myk7Zm9yKHZhciB4PTEsdGU7dGU9
YXJyW3hdO3grKyl7aWYoYXJyW3hdLmdldEF0dHJpYnV0ZShfMjkxKSE9XzI5Myl7cmV0LnB1c2go
dGUpO310ZS5zZXRBdHRyaWJ1dGUoXzI5MSxfMjkzKTt9fWVsc2V7aWYoZC5pc0lFJiZhcnIuY29t
bWVudFN0cmlwKXt0cnl7Zm9yKHZhciB4PTEsdGU7dGU9YXJyW3hdO3grKyl7aWYoXzI0Myh0ZSkp
e3JldC5wdXNoKHRlKTt9fX1jYXRjaChlKXt9fWVsc2V7aWYoYXJyWzBdKXthcnJbMF1bXzI5MV09
XzI4Zjt9Zm9yKHZhciB4PTEsdGU7dGU9YXJyW3hdO3grKyl7aWYoYXJyW3hdW18yOTFdIT1fMjhm
KXtyZXQucHVzaCh0ZSk7fXRlW18yOTFdPV8yOGY7fX19cmV0dXJuIHJldDt9O2QucXVlcnk9ZnVu
Y3Rpb24oXzI5NCxyb290KXtxbGM9ZC5fTm9kZUxpc3RDdG9yO2lmKCFfMjk0KXtyZXR1cm4gbmV3
IHFsYygpO31pZihfMjk0LmNvbnN0cnVjdG9yPT1xbGMpe3JldHVybiBfMjk0O31pZih0eXBlb2Yg
XzI5NCE9InN0cmluZyIpe3JldHVybiBuZXcgcWxjKF8yOTQpO31pZih0eXBlb2Ygcm9vdD09InN0
cmluZyIpe3Jvb3Q9ZC5ieUlkKHJvb3QpO2lmKCFyb290KXtyZXR1cm4gbmV3IHFsYygpO319cm9v
dD1yb290fHxfMjI3KCk7dmFyIG9kPXJvb3Qub3duZXJEb2N1bWVudHx8cm9vdC5kb2N1bWVudEVs
ZW1lbnQ7XzIyYj0ocm9vdC5jb250ZW50VHlwZSYmcm9vdC5jb250ZW50VHlwZT09ImFwcGxpY2F0
aW9uL3htbCIpfHwoZC5pc09wZXJhJiYocm9vdC5kb2N0eXBlfHxvZC50b1N0cmluZygpPT0iW29i
amVjdCBYTUxEb2N1bWVudF0iKSl8fCghIW9kKSYmKGQuaXNJRT9vZC54bWw6KHJvb3QueG1sVmVy
c2lvbnx8b2QueG1sVmVyc2lvbikpO3ZhciByPV8yODYoXzI5NCkocm9vdCk7aWYociYmci5ub3pp
cCYmIXFsYy5fd3JhcCl7cmV0dXJuIHI7fXJldHVybiBfMjkyKHIpO307ZC5xdWVyeS5wc2V1ZG9z
PV8yNTc7ZC5fZmlsdGVyUXVlcnlSZXN1bHQ9ZnVuY3Rpb24oXzI5NSxfMjk2LHJvb3Qpe3ZhciBf
Mjk3PW5ldyBkLl9Ob2RlTGlzdEN0b3IoKSxfMjk4PV8yMmQoXzI5NiksXzI5OT0oXzI5OC5sZW5n
dGg9PTEmJiEvW15cdyNcLl0vLnRlc3QoXzI5NikpP18yNWUoXzI5OFswXSk6ZnVuY3Rpb24obm9k
ZSl7cmV0dXJuIGRvam8ucXVlcnkoXzI5Nixyb290KS5pbmRleE9mKG5vZGUpIT0tMTt9O2Zvcih2
YXIgeD0wLHRlO3RlPV8yOTVbeF07eCsrKXtpZihfMjk5KHRlKSl7XzI5Ny5wdXNoKHRlKTt9fXJl
dHVybiBfMjk3O307fTt2YXIgXzI5YT1mdW5jdGlvbigpe2FjbWU9e3RyaW06ZnVuY3Rpb24oc3Ry
KXtzdHI9c3RyLnJlcGxhY2UoL15ccysvLCIiKTtmb3IodmFyIGk9c3RyLmxlbmd0aC0xO2k+PTA7
aS0tKXtpZigvXFMvLnRlc3Qoc3RyLmNoYXJBdChpKSkpe3N0cj1zdHIuc3Vic3RyaW5nKDAsaSsx
KTticmVhazt9fXJldHVybiBzdHI7fSxmb3JFYWNoOmZ1bmN0aW9uKGFycixfMjliLF8yOWMpe2lm
KCFhcnJ8fCFhcnIubGVuZ3RoKXtyZXR1cm47fWZvcih2YXIgaT0wLGw9YXJyLmxlbmd0aDtpPGw7
KytpKXtfMjliLmNhbGwoXzI5Y3x8d2luZG93LGFycltpXSxpLGFycik7fX0sYnlJZDpmdW5jdGlv
bihpZCxkb2Mpe2lmKHR5cGVvZiBpZD09InN0cmluZyIpe3JldHVybiAoZG9jfHxkb2N1bWVudCku
Z2V0RWxlbWVudEJ5SWQoaWQpO31lbHNle3JldHVybiBpZDt9fSxkb2M6ZG9jdW1lbnQsTm9kZUxp
c3Q6QXJyYXl9O3ZhciBuPW5hdmlnYXRvcjt2YXIgZHVhPW4udXNlckFnZW50O3ZhciBkYXY9bi5h
cHBWZXJzaW9uO3ZhciB0dj1wYXJzZUZsb2F0KGRhdik7YWNtZS5pc09wZXJhPShkdWEuaW5kZXhP
ZigiT3BlcmEiKT49MCk/dHY6dW5kZWZpbmVkO2FjbWUuaXNLaHRtbD0oZGF2LmluZGV4T2YoIktv
bnF1ZXJvciIpPj0wKT90djp1bmRlZmluZWQ7YWNtZS5pc1dlYktpdD1wYXJzZUZsb2F0KGR1YS5z
cGxpdCgiV2ViS2l0LyIpWzFdKXx8dW5kZWZpbmVkO2FjbWUuaXNDaHJvbWU9cGFyc2VGbG9hdChk
dWEuc3BsaXQoIkNocm9tZS8iKVsxXSl8fHVuZGVmaW5lZDt2YXIgXzI5ZD1NYXRoLm1heChkYXYu
aW5kZXhPZigiV2ViS2l0IiksZGF2LmluZGV4T2YoIlNhZmFyaSIpLDApO2lmKF8yOWQmJiFhY21l
LmlzQ2hyb21lKXthY21lLmlzU2FmYXJpPXBhcnNlRmxvYXQoZGF2LnNwbGl0KCJWZXJzaW9uLyIp
WzFdKTtpZighYWNtZS5pc1NhZmFyaXx8cGFyc2VGbG9hdChkYXYuc3Vic3RyKF8yOWQrNykpPD00
MTkuMyl7YWNtZS5pc1NhZmFyaT0yO319aWYoZG9jdW1lbnQuYWxsJiYhYWNtZS5pc09wZXJhKXth
Y21lLmlzSUU9cGFyc2VGbG9hdChkYXYuc3BsaXQoIk1TSUUgIilbMV0pfHx1bmRlZmluZWQ7fUFy
cmF5Ll93cmFwPWZ1bmN0aW9uKGFycil7cmV0dXJuIGFycjt9O3JldHVybiBhY21lO307aWYodGhp
c1siZG9qbyJdKXtkb2pvLnByb3ZpZGUoImRvam8uX2Jhc2UucXVlcnkiKTtfMjI2KHRoaXNbInF1
ZXJ5UG9ydGFiaWxpdHkiXXx8dGhpc1siYWNtZSJdfHxkb2pvKTt9ZWxzZXtfMjI2KHRoaXNbInF1
ZXJ5UG9ydGFiaWxpdHkiXXx8dGhpc1siYWNtZSJdfHxfMjlhKCkpO319KSgpO31pZighZG9qby5f
aGFzUmVzb3VyY2VbImRvam8uX2Jhc2UueGhyIl0pe2Rvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9i
YXNlLnhociJdPXRydWU7ZG9qby5wcm92aWRlKCJkb2pvLl9iYXNlLnhociIpOyhmdW5jdGlvbigp
e3ZhciBfMjllPWRvam8sY2ZnPV8yOWUuY29uZmlnO2Z1bmN0aW9uIF8yOWYob2JqLG5hbWUsXzJh
MCl7aWYoXzJhMD09PW51bGwpe3JldHVybjt9dmFyIHZhbD1vYmpbbmFtZV07aWYodHlwZW9mIHZh
bD09InN0cmluZyIpe29ialtuYW1lXT1bdmFsLF8yYTBdO31lbHNle2lmKF8yOWUuaXNBcnJheSh2
YWwpKXt2YWwucHVzaChfMmEwKTt9ZWxzZXtvYmpbbmFtZV09XzJhMDt9fX07ZG9qby5maWVsZFRv
T2JqZWN0PWZ1bmN0aW9uKF8yYTEpe3ZhciByZXQ9bnVsbDt2YXIgaXRlbT1fMjllLmJ5SWQoXzJh
MSk7aWYoaXRlbSl7dmFyIF8yYTI9aXRlbS5uYW1lO3ZhciB0eXBlPShpdGVtLnR5cGV8fCIiKS50
b0xvd2VyQ2FzZSgpO2lmKF8yYTImJnR5cGUmJiFpdGVtLmRpc2FibGVkKXtpZih0eXBlPT0icmFk
aW8ifHx0eXBlPT0iY2hlY2tib3giKXtpZihpdGVtLmNoZWNrZWQpe3JldD1pdGVtLnZhbHVlO319
ZWxzZXtpZihpdGVtLm11bHRpcGxlKXtyZXQ9W107XzI5ZS5xdWVyeSgib3B0aW9uIixpdGVtKS5m
b3JFYWNoKGZ1bmN0aW9uKG9wdCl7aWYob3B0LnNlbGVjdGVkKXtyZXQucHVzaChvcHQudmFsdWUp
O319KTt9ZWxzZXtyZXQ9aXRlbS52YWx1ZTt9fX19cmV0dXJuIHJldDt9O2Rvam8uZm9ybVRvT2Jq
ZWN0PWZ1bmN0aW9uKF8yYTMpe3ZhciByZXQ9e307dmFyIF8yYTQ9ImZpbGV8c3VibWl0fGltYWdl
fHJlc2V0fGJ1dHRvbnwiO18yOWUuZm9yRWFjaChkb2pvLmJ5SWQoXzJhMykuZWxlbWVudHMsZnVu
Y3Rpb24oaXRlbSl7dmFyIF8yYTU9aXRlbS5uYW1lO3ZhciB0eXBlPShpdGVtLnR5cGV8fCIiKS50
b0xvd2VyQ2FzZSgpO2lmKF8yYTUmJnR5cGUmJl8yYTQuaW5kZXhPZih0eXBlKT09LTEmJiFpdGVt
LmRpc2FibGVkKXtfMjlmKHJldCxfMmE1LF8yOWUuZmllbGRUb09iamVjdChpdGVtKSk7aWYodHlw
ZT09ImltYWdlIil7cmV0W18yYTUrIi54Il09cmV0W18yYTUrIi55Il09cmV0W18yYTVdLng9cmV0
W18yYTVdLnk9MDt9fX0pO3JldHVybiByZXQ7fTtkb2pvLm9iamVjdFRvUXVlcnk9ZnVuY3Rpb24o
bWFwKXt2YXIgZW5jPWVuY29kZVVSSUNvbXBvbmVudDt2YXIgXzJhNj1bXTt2YXIgXzJhNz17fTtm
b3IodmFyIG5hbWUgaW4gbWFwKXt2YXIgXzJhOD1tYXBbbmFtZV07aWYoXzJhOCE9XzJhN1tuYW1l
XSl7dmFyIF8yYTk9ZW5jKG5hbWUpKyI9IjtpZihfMjllLmlzQXJyYXkoXzJhOCkpe2Zvcih2YXIg
aT0wO2k8XzJhOC5sZW5ndGg7aSsrKXtfMmE2LnB1c2goXzJhOStlbmMoXzJhOFtpXSkpO319ZWxz
ZXtfMmE2LnB1c2goXzJhOStlbmMoXzJhOCkpO319fXJldHVybiBfMmE2LmpvaW4oIiYiKTt9O2Rv
am8uZm9ybVRvUXVlcnk9ZnVuY3Rpb24oXzJhYSl7cmV0dXJuIF8yOWUub2JqZWN0VG9RdWVyeShf
MjllLmZvcm1Ub09iamVjdChfMmFhKSk7fTtkb2pvLmZvcm1Ub0pzb249ZnVuY3Rpb24oXzJhYixf
MmFjKXtyZXR1cm4gXzI5ZS50b0pzb24oXzI5ZS5mb3JtVG9PYmplY3QoXzJhYiksXzJhYyk7fTtk
b2pvLnF1ZXJ5VG9PYmplY3Q9ZnVuY3Rpb24oc3RyKXt2YXIgcmV0PXt9O3ZhciBxcD1zdHIuc3Bs
aXQoIiYiKTt2YXIgZGVjPWRlY29kZVVSSUNvbXBvbmVudDtfMjllLmZvckVhY2gocXAsZnVuY3Rp
b24oaXRlbSl7aWYoaXRlbS5sZW5ndGgpe3ZhciBfMmFkPWl0ZW0uc3BsaXQoIj0iKTt2YXIgbmFt
ZT1kZWMoXzJhZC5zaGlmdCgpKTt2YXIgdmFsPWRlYyhfMmFkLmpvaW4oIj0iKSk7aWYodHlwZW9m
IHJldFtuYW1lXT09InN0cmluZyIpe3JldFtuYW1lXT1bcmV0W25hbWVdXTt9aWYoXzI5ZS5pc0Fy
cmF5KHJldFtuYW1lXSkpe3JldFtuYW1lXS5wdXNoKHZhbCk7fWVsc2V7cmV0W25hbWVdPXZhbDt9
fX0pO3JldHVybiByZXQ7fTtkb2pvLl9ibG9ja0FzeW5jPWZhbHNlO3ZhciBfMmFlPV8yOWUuX2Nv
bnRlbnRIYW5kbGVycz1kb2pvLmNvbnRlbnRIYW5kbGVycz17dGV4dDpmdW5jdGlvbih4aHIpe3Jl
dHVybiB4aHIucmVzcG9uc2VUZXh0O30sanNvbjpmdW5jdGlvbih4aHIpe3JldHVybiBfMjllLmZy
b21Kc29uKHhoci5yZXNwb25zZVRleHR8fG51bGwpO30sImpzb24tY29tbWVudC1maWx0ZXJlZCI6
ZnVuY3Rpb24oeGhyKXtpZighZG9qby5jb25maWcudXNlQ29tbWVudGVkSnNvbil7Y29uc29sZS53
YXJuKCJDb25zaWRlciB1c2luZyB0aGUgc3RhbmRhcmQgbWltZXR5cGU6YXBwbGljYXRpb24vanNv
bi4iKyIganNvbi1jb21tZW50aW5nIGNhbiBpbnRyb2R1Y2Ugc2VjdXJpdHkgaXNzdWVzLiBUbyIr
IiBkZWNyZWFzZSB0aGUgY2hhbmNlcyBvZiBoaWphY2tpbmcsIHVzZSB0aGUgc3RhbmRhcmQgdGhl
ICdqc29uJyBoYW5kbGVyIGFuZCIrIiBwcmVmaXggeW91ciBqc29uIHdpdGg6IHt9JiZcbiIrIlVz
ZSBkakNvbmZpZy51c2VDb21tZW50ZWRKc29uPXRydWUgdG8gdHVybiBvZmYgdGhpcyBtZXNzYWdl
LiIpO312YXIgXzJhZj14aHIucmVzcG9uc2VUZXh0O3ZhciBfMmIwPV8yYWYuaW5kZXhPZigiLyoi
KTt2YXIgXzJiMT1fMmFmLmxhc3RJbmRleE9mKCIqLyIpO2lmKF8yYjA9PS0xfHxfMmIxPT0tMSl7
dGhyb3cgbmV3IEVycm9yKCJKU09OIHdhcyBub3QgY29tbWVudCBmaWx0ZXJlZCIpO31yZXR1cm4g
XzI5ZS5mcm9tSnNvbihfMmFmLnN1YnN0cmluZyhfMmIwKzIsXzJiMSkpO30samF2YXNjcmlwdDpm
dW5jdGlvbih4aHIpe3JldHVybiBfMjllLmV2YWwoeGhyLnJlc3BvbnNlVGV4dCk7fSx4bWw6ZnVu
Y3Rpb24oeGhyKXt2YXIgXzJiMj14aHIucmVzcG9uc2VYTUw7aWYoXzI5ZS5pc0lFJiYoIV8yYjJ8
fCFfMmIyLmRvY3VtZW50RWxlbWVudCkpe3ZhciBtcz1mdW5jdGlvbihuKXtyZXR1cm4gIk1TWE1M
IituKyIuRE9NRG9jdW1lbnQiO307dmFyIGRwPVsiTWljcm9zb2Z0LlhNTERPTSIsbXMoNiksbXMo
NCksbXMoMyksbXMoMildO18yOWUuc29tZShkcCxmdW5jdGlvbihwKXt0cnl7dmFyIGRvbT1uZXcg
QWN0aXZlWE9iamVjdChwKTtkb20uYXN5bmM9ZmFsc2U7ZG9tLmxvYWRYTUwoeGhyLnJlc3BvbnNl
VGV4dCk7XzJiMj1kb207fWNhdGNoKGUpe3JldHVybiBmYWxzZTt9cmV0dXJuIHRydWU7fSk7fXJl
dHVybiBfMmIyO30sImpzb24tY29tbWVudC1vcHRpb25hbCI6ZnVuY3Rpb24oeGhyKXtpZih4aHIu
cmVzcG9uc2VUZXh0JiYvXltee1xbXSpcL1wqLy50ZXN0KHhoci5yZXNwb25zZVRleHQpKXtyZXR1
cm4gXzJhZVsianNvbi1jb21tZW50LWZpbHRlcmVkIl0oeGhyKTt9ZWxzZXtyZXR1cm4gXzJhZVsi
anNvbiJdKHhocik7fX19O2Rvam8uX2lvU2V0QXJncz1mdW5jdGlvbihhcmdzLF8yYjMsXzJiNCxf
MmI1KXt2YXIgXzJiNj17YXJnczphcmdzLHVybDphcmdzLnVybH07dmFyIF8yYjc9bnVsbDtpZihh
cmdzLmZvcm0pe3ZhciBmb3JtPV8yOWUuYnlJZChhcmdzLmZvcm0pO3ZhciBfMmI4PWZvcm0uZ2V0
QXR0cmlidXRlTm9kZSgiYWN0aW9uIik7XzJiNi51cmw9XzJiNi51cmx8fChfMmI4P18yYjgudmFs
dWU6bnVsbCk7XzJiNz1fMjllLmZvcm1Ub09iamVjdChmb3JtKTt9dmFyIF8yYjk9W3t9XTtpZihf
MmI3KXtfMmI5LnB1c2goXzJiNyk7fWlmKGFyZ3MuY29udGVudCl7XzJiOS5wdXNoKGFyZ3MuY29u
dGVudCk7fWlmKGFyZ3MucHJldmVudENhY2hlKXtfMmI5LnB1c2goeyJkb2pvLnByZXZlbnRDYWNo
ZSI6bmV3IERhdGUoKS52YWx1ZU9mKCl9KTt9XzJiNi5xdWVyeT1fMjllLm9iamVjdFRvUXVlcnko
XzI5ZS5taXhpbi5hcHBseShudWxsLF8yYjkpKTtfMmI2LmhhbmRsZUFzPWFyZ3MuaGFuZGxlQXN8
fCJ0ZXh0Ijt2YXIgZD1uZXcgXzI5ZS5EZWZlcnJlZChfMmIzKTtkLmFkZENhbGxiYWNrcyhfMmI0
LGZ1bmN0aW9uKF8yYmEpe3JldHVybiBfMmI1KF8yYmEsZCk7fSk7dmFyIGxkPWFyZ3MubG9hZDtp
ZihsZCYmXzI5ZS5pc0Z1bmN0aW9uKGxkKSl7ZC5hZGRDYWxsYmFjayhmdW5jdGlvbihfMmJiKXty
ZXR1cm4gbGQuY2FsbChhcmdzLF8yYmIsXzJiNik7fSk7fXZhciBlcnI9YXJncy5lcnJvcjtpZihl
cnImJl8yOWUuaXNGdW5jdGlvbihlcnIpKXtkLmFkZEVycmJhY2soZnVuY3Rpb24oXzJiYyl7cmV0
dXJuIGVyci5jYWxsKGFyZ3MsXzJiYyxfMmI2KTt9KTt9dmFyIF8yYmQ9YXJncy5oYW5kbGU7aWYo
XzJiZCYmXzI5ZS5pc0Z1bmN0aW9uKF8yYmQpKXtkLmFkZEJvdGgoZnVuY3Rpb24oXzJiZSl7cmV0
dXJuIF8yYmQuY2FsbChhcmdzLF8yYmUsXzJiNik7fSk7fWlmKGNmZy5pb1B1Ymxpc2gmJl8yOWUu
cHVibGlzaCYmXzJiNi5hcmdzLmlvUHVibGlzaCE9PWZhbHNlKXtkLmFkZENhbGxiYWNrcyhmdW5j
dGlvbihyZXMpe18yOWUucHVibGlzaCgiL2Rvam8vaW8vbG9hZCIsW2QscmVzXSk7cmV0dXJuIHJl
czt9LGZ1bmN0aW9uKHJlcyl7XzI5ZS5wdWJsaXNoKCIvZG9qby9pby9lcnJvciIsW2QscmVzXSk7
cmV0dXJuIHJlczt9KTtkLmFkZEJvdGgoZnVuY3Rpb24ocmVzKXtfMjllLnB1Ymxpc2goIi9kb2pv
L2lvL2RvbmUiLFtkLHJlc10pO3JldHVybiByZXM7fSk7fWQuaW9BcmdzPV8yYjY7cmV0dXJuIGQ7
fTt2YXIgXzJiZj1mdW5jdGlvbihkZmQpe2RmZC5jYW5jZWxlZD10cnVlO3ZhciB4aHI9ZGZkLmlv
QXJncy54aHI7dmFyIF8yYzA9dHlwZW9mIHhoci5hYm9ydDtpZihfMmMwPT0iZnVuY3Rpb24ifHxf
MmMwPT0ib2JqZWN0Inx8XzJjMD09InVua25vd24iKXt4aHIuYWJvcnQoKTt9dmFyIGVycj1kZmQu
aW9BcmdzLmVycm9yO2lmKCFlcnIpe2Vycj1uZXcgRXJyb3IoInhociBjYW5jZWxsZWQiKTtlcnIu
ZG9qb1R5cGU9ImNhbmNlbCI7fXJldHVybiBlcnI7fTt2YXIgXzJjMT1mdW5jdGlvbihkZmQpe3Zh
ciByZXQ9XzJhZVtkZmQuaW9BcmdzLmhhbmRsZUFzXShkZmQuaW9BcmdzLnhocik7cmV0dXJuIHJl
dD09PXVuZGVmaW5lZD9udWxsOnJldDt9O3ZhciBfMmMyPWZ1bmN0aW9uKF8yYzMsZGZkKXtpZigh
ZGZkLmlvQXJncy5hcmdzLmZhaWxPayl7Y29uc29sZS5lcnJvcihfMmMzKTt9cmV0dXJuIF8yYzM7
fTt2YXIgXzJjND1udWxsO3ZhciBfMmM1PVtdO3ZhciBfMmM2PTA7dmFyIF8yYzc9ZnVuY3Rpb24o
ZGZkKXtpZihfMmM2PD0wKXtfMmM2PTA7aWYoY2ZnLmlvUHVibGlzaCYmXzI5ZS5wdWJsaXNoJiYo
IWRmZHx8ZGZkJiZkZmQuaW9BcmdzLmFyZ3MuaW9QdWJsaXNoIT09ZmFsc2UpKXtfMjllLnB1Ymxp
c2goIi9kb2pvL2lvL3N0b3AiKTt9fX07dmFyIF8yYzg9ZnVuY3Rpb24oKXt2YXIgbm93PShuZXcg
RGF0ZSgpKS5nZXRUaW1lKCk7aWYoIV8yOWUuX2Jsb2NrQXN5bmMpe2Zvcih2YXIgaT0wLHRpZjtp
PF8yYzUubGVuZ3RoJiYodGlmPV8yYzVbaV0pO2krKyl7dmFyIGRmZD10aWYuZGZkO3ZhciBmdW5j
PWZ1bmN0aW9uKCl7aWYoIWRmZHx8ZGZkLmNhbmNlbGVkfHwhdGlmLnZhbGlkQ2hlY2soZGZkKSl7
XzJjNS5zcGxpY2UoaS0tLDEpO18yYzYtPTE7fWVsc2V7aWYodGlmLmlvQ2hlY2soZGZkKSl7XzJj
NS5zcGxpY2UoaS0tLDEpO3RpZi5yZXNIYW5kbGUoZGZkKTtfMmM2LT0xO31lbHNle2lmKGRmZC5z
dGFydFRpbWUpe2lmKGRmZC5zdGFydFRpbWUrKGRmZC5pb0FyZ3MuYXJncy50aW1lb3V0fHwwKTxu
b3cpe18yYzUuc3BsaWNlKGktLSwxKTt2YXIgZXJyPW5ldyBFcnJvcigidGltZW91dCBleGNlZWRl
ZCIpO2Vyci5kb2pvVHlwZT0idGltZW91dCI7ZGZkLmVycmJhY2soZXJyKTtkZmQuY2FuY2VsKCk7
XzJjNi09MTt9fX19fTtpZihkb2pvLmNvbmZpZy5kZWJ1Z0F0QWxsQ29zdHMpe2Z1bmMuY2FsbCh0
aGlzKTt9ZWxzZXt0cnl7ZnVuYy5jYWxsKHRoaXMpO31jYXRjaChlKXtkZmQuZXJyYmFjayhlKTt9
fX19XzJjNyhkZmQpO2lmKCFfMmM1Lmxlbmd0aCl7Y2xlYXJJbnRlcnZhbChfMmM0KTtfMmM0PW51
bGw7cmV0dXJuO319O2Rvam8uX2lvQ2FuY2VsQWxsPWZ1bmN0aW9uKCl7dHJ5e18yOWUuZm9yRWFj
aChfMmM1LGZ1bmN0aW9uKGkpe3RyeXtpLmRmZC5jYW5jZWwoKTt9Y2F0Y2goZSl7fX0pO31jYXRj
aChlKXt9fTtpZihfMjllLmlzSUUpe18yOWUuYWRkT25XaW5kb3dVbmxvYWQoXzI5ZS5faW9DYW5j
ZWxBbGwpO31fMjllLl9pb05vdGlmeVN0YXJ0PWZ1bmN0aW9uKGRmZCl7aWYoY2ZnLmlvUHVibGlz
aCYmXzI5ZS5wdWJsaXNoJiZkZmQuaW9BcmdzLmFyZ3MuaW9QdWJsaXNoIT09ZmFsc2Upe2lmKCFf
MmM2KXtfMjllLnB1Ymxpc2goIi9kb2pvL2lvL3N0YXJ0Iik7fV8yYzYrPTE7XzI5ZS5wdWJsaXNo
KCIvZG9qby9pby9zZW5kIixbZGZkXSk7fX07XzI5ZS5faW9XYXRjaD1mdW5jdGlvbihkZmQsXzJj
OSxfMmNhLF8yY2Ipe3ZhciBhcmdzPWRmZC5pb0FyZ3MuYXJncztpZihhcmdzLnRpbWVvdXQpe2Rm
ZC5zdGFydFRpbWU9KG5ldyBEYXRlKCkpLmdldFRpbWUoKTt9XzJjNS5wdXNoKHtkZmQ6ZGZkLHZh
bGlkQ2hlY2s6XzJjOSxpb0NoZWNrOl8yY2EscmVzSGFuZGxlOl8yY2J9KTtpZighXzJjNCl7XzJj
ND1zZXRJbnRlcnZhbChfMmM4LDUwKTt9aWYoYXJncy5zeW5jKXtfMmM4KCk7fX07dmFyIF8yY2M9
ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI7dmFyIF8yY2Q9ZnVuY3Rpb24oZGZk
KXtyZXR1cm4gZGZkLmlvQXJncy54aHIucmVhZHlTdGF0ZTt9O3ZhciBfMmNlPWZ1bmN0aW9uKGRm
ZCl7cmV0dXJuIDQ9PWRmZC5pb0FyZ3MueGhyLnJlYWR5U3RhdGU7fTt2YXIgXzJjZj1mdW5jdGlv
bihkZmQpe3ZhciB4aHI9ZGZkLmlvQXJncy54aHI7aWYoXzI5ZS5faXNEb2N1bWVudE9rKHhocikp
e2RmZC5jYWxsYmFjayhkZmQpO31lbHNle3ZhciBlcnI9bmV3IEVycm9yKCJVbmFibGUgdG8gbG9h
ZCAiK2RmZC5pb0FyZ3MudXJsKyIgc3RhdHVzOiIreGhyLnN0YXR1cyk7ZXJyLnN0YXR1cz14aHIu
c3RhdHVzO2Vyci5yZXNwb25zZVRleHQ9eGhyLnJlc3BvbnNlVGV4dDtkZmQuZXJyYmFjayhlcnIp
O319O2Rvam8uX2lvQWRkUXVlcnlUb1VybD1mdW5jdGlvbihfMmQwKXtpZihfMmQwLnF1ZXJ5Lmxl
bmd0aCl7XzJkMC51cmwrPShfMmQwLnVybC5pbmRleE9mKCI/Iik9PS0xPyI/IjoiJiIpK18yZDAu
cXVlcnk7XzJkMC5xdWVyeT1udWxsO319O2Rvam8ueGhyPWZ1bmN0aW9uKF8yZDEsYXJncyxfMmQy
KXt2YXIgZGZkPV8yOWUuX2lvU2V0QXJncyhhcmdzLF8yYmYsXzJjMSxfMmMyKTt2YXIgXzJkMz1k
ZmQuaW9BcmdzO3ZhciB4aHI9XzJkMy54aHI9XzI5ZS5feGhyT2JqKF8yZDMuYXJncyk7aWYoIXho
cil7ZGZkLmNhbmNlbCgpO3JldHVybiBkZmQ7fWlmKCJwb3N0RGF0YSIgaW4gYXJncyl7XzJkMy5x
dWVyeT1hcmdzLnBvc3REYXRhO31lbHNle2lmKCJwdXREYXRhIiBpbiBhcmdzKXtfMmQzLnF1ZXJ5
PWFyZ3MucHV0RGF0YTt9ZWxzZXtpZigicmF3Qm9keSIgaW4gYXJncyl7XzJkMy5xdWVyeT1hcmdz
LnJhd0JvZHk7fWVsc2V7aWYoKGFyZ3VtZW50cy5sZW5ndGg+MiYmIV8yZDIpfHwiUE9TVHxQVVQi
LmluZGV4T2YoXzJkMS50b1VwcGVyQ2FzZSgpKT09LTEpe18yOWUuX2lvQWRkUXVlcnlUb1VybChf
MmQzKTt9fX19eGhyLm9wZW4oXzJkMSxfMmQzLnVybCxhcmdzLnN5bmMhPT10cnVlLGFyZ3MudXNl
cnx8dW5kZWZpbmVkLGFyZ3MucGFzc3dvcmR8fHVuZGVmaW5lZCk7aWYoYXJncy5oZWFkZXJzKXtm
b3IodmFyIGhkciBpbiBhcmdzLmhlYWRlcnMpe2lmKGhkci50b0xvd2VyQ2FzZSgpPT09ImNvbnRl
bnQtdHlwZSImJiFhcmdzLmNvbnRlbnRUeXBlKXthcmdzLmNvbnRlbnRUeXBlPWFyZ3MuaGVhZGVy
c1toZHJdO31lbHNle2lmKGFyZ3MuaGVhZGVyc1toZHJdKXt4aHIuc2V0UmVxdWVzdEhlYWRlciho
ZHIsYXJncy5oZWFkZXJzW2hkcl0pO319fX14aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1U
eXBlIixhcmdzLmNvbnRlbnRUeXBlfHxfMmNjKTtpZighYXJncy5oZWFkZXJzfHwhKCJYLVJlcXVl
c3RlZC1XaXRoIiBpbiBhcmdzLmhlYWRlcnMpKXt4aHIuc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1
ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0Iik7fV8yOWUuX2lvTm90aWZ5U3RhcnQoZGZkKTtp
Zihkb2pvLmNvbmZpZy5kZWJ1Z0F0QWxsQ29zdHMpe3hoci5zZW5kKF8yZDMucXVlcnkpO31lbHNl
e3RyeXt4aHIuc2VuZChfMmQzLnF1ZXJ5KTt9Y2F0Y2goZSl7XzJkMy5lcnJvcj1lO2RmZC5jYW5j
ZWwoKTt9fV8yOWUuX2lvV2F0Y2goZGZkLF8yY2QsXzJjZSxfMmNmKTt4aHI9bnVsbDtyZXR1cm4g
ZGZkO307ZG9qby54aHJHZXQ9ZnVuY3Rpb24oYXJncyl7cmV0dXJuIF8yOWUueGhyKCJHRVQiLGFy
Z3MpO307ZG9qby5yYXdYaHJQb3N0PWRvam8ueGhyUG9zdD1mdW5jdGlvbihhcmdzKXtyZXR1cm4g
XzI5ZS54aHIoIlBPU1QiLGFyZ3MsdHJ1ZSk7fTtkb2pvLnJhd1hoclB1dD1kb2pvLnhoclB1dD1m
dW5jdGlvbihhcmdzKXtyZXR1cm4gXzI5ZS54aHIoIlBVVCIsYXJncyx0cnVlKTt9O2Rvam8ueGhy
RGVsZXRlPWZ1bmN0aW9uKGFyZ3Mpe3JldHVybiBfMjllLnhocigiREVMRVRFIixhcmdzKTt9O30p
KCk7fWlmKCFkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS5meCJdKXtkb2pvLl9oYXNSZXNv
dXJjZVsiZG9qby5fYmFzZS5meCJdPXRydWU7ZG9qby5wcm92aWRlKCJkb2pvLl9iYXNlLmZ4Iik7
KGZ1bmN0aW9uKCl7dmFyIGQ9ZG9qbzt2YXIgXzJkND1kLl9taXhpbjtkb2pvLl9MaW5lPWZ1bmN0
aW9uKF8yZDUsZW5kKXt0aGlzLnN0YXJ0PV8yZDU7dGhpcy5lbmQ9ZW5kO307ZG9qby5fTGluZS5w
cm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuICgodGhpcy5lbmQtdGhpcy5zdGFy
dCkqbikrdGhpcy5zdGFydDt9O2Rvam8uQW5pbWF0aW9uPWZ1bmN0aW9uKGFyZ3Mpe18yZDQodGhp
cyxhcmdzKTtpZihkLmlzQXJyYXkodGhpcy5jdXJ2ZSkpe3RoaXMuY3VydmU9bmV3IGQuX0xpbmUo
dGhpcy5jdXJ2ZVswXSx0aGlzLmN1cnZlWzFdKTt9fTtkLl9BbmltYXRpb249ZC5BbmltYXRpb247
ZC5leHRlbmQoZG9qby5BbmltYXRpb24se2R1cmF0aW9uOjM1MCxyZXBlYXQ6MCxyYXRlOjIwLF9w
ZXJjZW50OjAsX3N0YXJ0UmVwZWF0Q291bnQ6MCxfZ2V0U3RlcDpmdW5jdGlvbigpe3ZhciBfMmQ2
PXRoaXMuX3BlcmNlbnQsXzJkNz10aGlzLmVhc2luZztyZXR1cm4gXzJkNz9fMmQ3KF8yZDYpOl8y
ZDY7fSxfZmlyZTpmdW5jdGlvbihldnQsYXJncyl7dmFyIGE9YXJnc3x8W107aWYodGhpc1tldnRd
KXtpZihkLmNvbmZpZy5kZWJ1Z0F0QWxsQ29zdHMpe3RoaXNbZXZ0XS5hcHBseSh0aGlzLGEpO31l
bHNle3RyeXt0aGlzW2V2dF0uYXBwbHkodGhpcyxhKTt9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcigi
ZXhjZXB0aW9uIGluIGFuaW1hdGlvbiBoYW5kbGVyIGZvcjoiLGV2dCk7Y29uc29sZS5lcnJvcihl
KTt9fX1yZXR1cm4gdGhpczt9LHBsYXk6ZnVuY3Rpb24oXzJkOCxfMmQ5KXt2YXIgXzJkYT10aGlz
O2lmKF8yZGEuX2RlbGF5VGltZXIpe18yZGEuX2NsZWFyVGltZXIoKTt9aWYoXzJkOSl7XzJkYS5f
c3RvcFRpbWVyKCk7XzJkYS5fYWN0aXZlPV8yZGEuX3BhdXNlZD1mYWxzZTtfMmRhLl9wZXJjZW50
PTA7fWVsc2V7aWYoXzJkYS5fYWN0aXZlJiYhXzJkYS5fcGF1c2VkKXtyZXR1cm4gXzJkYTt9fV8y
ZGEuX2ZpcmUoImJlZm9yZUJlZ2luIixbXzJkYS5ub2RlXSk7dmFyIGRlPV8yZDh8fF8yZGEuZGVs
YXksXzJkYj1kb2pvLmhpdGNoKF8yZGEsIl9wbGF5IixfMmQ5KTtpZihkZT4wKXtfMmRhLl9kZWxh
eVRpbWVyPXNldFRpbWVvdXQoXzJkYixkZSk7cmV0dXJuIF8yZGE7fV8yZGIoKTtyZXR1cm4gXzJk
YTt9LF9wbGF5OmZ1bmN0aW9uKF8yZGMpe3ZhciBfMmRkPXRoaXM7aWYoXzJkZC5fZGVsYXlUaW1l
cil7XzJkZC5fY2xlYXJUaW1lcigpO31fMmRkLl9zdGFydFRpbWU9bmV3IERhdGUoKS52YWx1ZU9m
KCk7aWYoXzJkZC5fcGF1c2VkKXtfMmRkLl9zdGFydFRpbWUtPV8yZGQuZHVyYXRpb24qXzJkZC5f
cGVyY2VudDt9XzJkZC5fYWN0aXZlPXRydWU7XzJkZC5fcGF1c2VkPWZhbHNlO3ZhciBfMmRlPV8y
ZGQuY3VydmUuZ2V0VmFsdWUoXzJkZC5fZ2V0U3RlcCgpKTtpZighXzJkZC5fcGVyY2VudCl7aWYo
IV8yZGQuX3N0YXJ0UmVwZWF0Q291bnQpe18yZGQuX3N0YXJ0UmVwZWF0Q291bnQ9XzJkZC5yZXBl
YXQ7fV8yZGQuX2ZpcmUoIm9uQmVnaW4iLFtfMmRlXSk7fV8yZGQuX2ZpcmUoIm9uUGxheSIsW18y
ZGVdKTtfMmRkLl9jeWNsZSgpO3JldHVybiBfMmRkO30scGF1c2U6ZnVuY3Rpb24oKXt2YXIgXzJk
Zj10aGlzO2lmKF8yZGYuX2RlbGF5VGltZXIpe18yZGYuX2NsZWFyVGltZXIoKTt9XzJkZi5fc3Rv
cFRpbWVyKCk7aWYoIV8yZGYuX2FjdGl2ZSl7cmV0dXJuIF8yZGY7fV8yZGYuX3BhdXNlZD10cnVl
O18yZGYuX2ZpcmUoIm9uUGF1c2UiLFtfMmRmLmN1cnZlLmdldFZhbHVlKF8yZGYuX2dldFN0ZXAo
KSldKTtyZXR1cm4gXzJkZjt9LGdvdG9QZXJjZW50OmZ1bmN0aW9uKF8yZTAsXzJlMSl7dmFyIF8y
ZTI9dGhpcztfMmUyLl9zdG9wVGltZXIoKTtfMmUyLl9hY3RpdmU9XzJlMi5fcGF1c2VkPXRydWU7
XzJlMi5fcGVyY2VudD1fMmUwO2lmKF8yZTEpe18yZTIucGxheSgpO31yZXR1cm4gXzJlMjt9LHN0
b3A6ZnVuY3Rpb24oXzJlMyl7dmFyIF8yZTQ9dGhpcztpZihfMmU0Ll9kZWxheVRpbWVyKXtfMmU0
Ll9jbGVhclRpbWVyKCk7fWlmKCFfMmU0Ll90aW1lcil7cmV0dXJuIF8yZTQ7fV8yZTQuX3N0b3BU
aW1lcigpO2lmKF8yZTMpe18yZTQuX3BlcmNlbnQ9MTt9XzJlNC5fZmlyZSgib25TdG9wIixbXzJl
NC5jdXJ2ZS5nZXRWYWx1ZShfMmU0Ll9nZXRTdGVwKCkpXSk7XzJlNC5fYWN0aXZlPV8yZTQuX3Bh
dXNlZD1mYWxzZTtyZXR1cm4gXzJlNDt9LHN0YXR1czpmdW5jdGlvbigpe2lmKHRoaXMuX2FjdGl2
ZSl7cmV0dXJuIHRoaXMuX3BhdXNlZD8icGF1c2VkIjoicGxheWluZyI7fXJldHVybiAic3RvcHBl
ZCI7fSxfY3ljbGU6ZnVuY3Rpb24oKXt2YXIgXzJlNT10aGlzO2lmKF8yZTUuX2FjdGl2ZSl7dmFy
IGN1cnI9bmV3IERhdGUoKS52YWx1ZU9mKCk7dmFyIHN0ZXA9KGN1cnItXzJlNS5fc3RhcnRUaW1l
KS8oXzJlNS5kdXJhdGlvbik7aWYoc3RlcD49MSl7c3RlcD0xO31fMmU1Ll9wZXJjZW50PXN0ZXA7
aWYoXzJlNS5lYXNpbmcpe3N0ZXA9XzJlNS5lYXNpbmcoc3RlcCk7fV8yZTUuX2ZpcmUoIm9uQW5p
bWF0ZSIsW18yZTUuY3VydmUuZ2V0VmFsdWUoc3RlcCldKTtpZihfMmU1Ll9wZXJjZW50PDEpe18y
ZTUuX3N0YXJ0VGltZXIoKTt9ZWxzZXtfMmU1Ll9hY3RpdmU9ZmFsc2U7aWYoXzJlNS5yZXBlYXQ+
MCl7XzJlNS5yZXBlYXQtLTtfMmU1LnBsYXkobnVsbCx0cnVlKTt9ZWxzZXtpZihfMmU1LnJlcGVh
dD09LTEpe18yZTUucGxheShudWxsLHRydWUpO31lbHNle2lmKF8yZTUuX3N0YXJ0UmVwZWF0Q291
bnQpe18yZTUucmVwZWF0PV8yZTUuX3N0YXJ0UmVwZWF0Q291bnQ7XzJlNS5fc3RhcnRSZXBlYXRD
b3VudD0wO319fV8yZTUuX3BlcmNlbnQ9MDtfMmU1Ll9maXJlKCJvbkVuZCIsW18yZTUubm9kZV0p
OyFfMmU1LnJlcGVhdCYmXzJlNS5fc3RvcFRpbWVyKCk7fX1yZXR1cm4gXzJlNTt9LF9jbGVhclRp
bWVyOmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX2RlbGF5VGltZXIpO2RlbGV0ZSB0aGlz
Ll9kZWxheVRpbWVyO319KTt2YXIgY3RyPTAsXzJlNj1udWxsLF8yZTc9e3J1bjpmdW5jdGlvbigp
e319O2QuZXh0ZW5kKGQuQW5pbWF0aW9uLHtfc3RhcnRUaW1lcjpmdW5jdGlvbigpe2lmKCF0aGlz
Ll90aW1lcil7dGhpcy5fdGltZXI9ZC5jb25uZWN0KF8yZTcsInJ1biIsdGhpcywiX2N5Y2xlIik7
Y3RyKys7fWlmKCFfMmU2KXtfMmU2PXNldEludGVydmFsKGQuaGl0Y2goXzJlNywicnVuIiksdGhp
cy5yYXRlKTt9fSxfc3RvcFRpbWVyOmZ1bmN0aW9uKCl7aWYodGhpcy5fdGltZXIpe2QuZGlzY29u
bmVjdCh0aGlzLl90aW1lcik7dGhpcy5fdGltZXI9bnVsbDtjdHItLTt9aWYoY3RyPD0wKXtjbGVh
ckludGVydmFsKF8yZTYpO18yZTY9bnVsbDtjdHI9MDt9fX0pO3ZhciBfMmU4PWQuaXNJRT9mdW5j
dGlvbihub2RlKXt2YXIgbnM9bm9kZS5zdHlsZTtpZighbnMud2lkdGgubGVuZ3RoJiZkLnN0eWxl
KG5vZGUsIndpZHRoIik9PSJhdXRvIil7bnMud2lkdGg9ImF1dG8iO319OmZ1bmN0aW9uKCl7fTtk
b2pvLl9mYWRlPWZ1bmN0aW9uKGFyZ3Mpe2FyZ3Mubm9kZT1kLmJ5SWQoYXJncy5ub2RlKTt2YXIg
XzJlOT1fMmQ0KHtwcm9wZXJ0aWVzOnt9fSxhcmdzKSxfMmVhPShfMmU5LnByb3BlcnRpZXMub3Bh
Y2l0eT17fSk7XzJlYS5zdGFydD0hKCJzdGFydCIgaW4gXzJlOSk/ZnVuY3Rpb24oKXtyZXR1cm4g
K2Quc3R5bGUoXzJlOS5ub2RlLCJvcGFjaXR5Iil8fDA7fTpfMmU5LnN0YXJ0O18yZWEuZW5kPV8y
ZTkuZW5kO3ZhciBhbmltPWQuYW5pbWF0ZVByb3BlcnR5KF8yZTkpO2QuY29ubmVjdChhbmltLCJi
ZWZvcmVCZWdpbiIsZC5wYXJ0aWFsKF8yZTgsXzJlOS5ub2RlKSk7cmV0dXJuIGFuaW07fTtkb2pv
LmZhZGVJbj1mdW5jdGlvbihhcmdzKXtyZXR1cm4gZC5fZmFkZShfMmQ0KHtlbmQ6MX0sYXJncykp
O307ZG9qby5mYWRlT3V0PWZ1bmN0aW9uKGFyZ3Mpe3JldHVybiBkLl9mYWRlKF8yZDQoe2VuZDow
fSxhcmdzKSk7fTtkb2pvLl9kZWZhdWx0RWFzaW5nPWZ1bmN0aW9uKG4pe3JldHVybiAwLjUrKChN
YXRoLnNpbigobisxLjUpKk1hdGguUEkpKS8yKTt9O3ZhciBfMmViPWZ1bmN0aW9uKF8yZWMpe3Ro
aXMuX3Byb3BlcnRpZXM9XzJlYztmb3IodmFyIHAgaW4gXzJlYyl7dmFyIHByb3A9XzJlY1twXTtp
Zihwcm9wLnN0YXJ0IGluc3RhbmNlb2YgZC5Db2xvcil7cHJvcC50ZW1wQ29sb3I9bmV3IGQuQ29s
b3IoKTt9fX07XzJlYi5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24ocil7dmFyIHJldD17fTtm
b3IodmFyIHAgaW4gdGhpcy5fcHJvcGVydGllcyl7dmFyIHByb3A9dGhpcy5fcHJvcGVydGllc1tw
XSxfMmVkPXByb3Auc3RhcnQ7aWYoXzJlZCBpbnN0YW5jZW9mIGQuQ29sb3Ipe3JldFtwXT1kLmJs
ZW5kQ29sb3JzKF8yZWQscHJvcC5lbmQscixwcm9wLnRlbXBDb2xvcikudG9Dc3MoKTt9ZWxzZXtp
ZighZC5pc0FycmF5KF8yZWQpKXtyZXRbcF09KChwcm9wLmVuZC1fMmVkKSpyKStfMmVkKyhwIT0i
b3BhY2l0eSI/cHJvcC51bml0c3x8InB4IjowKTt9fX1yZXR1cm4gcmV0O307ZG9qby5hbmltYXRl
UHJvcGVydHk9ZnVuY3Rpb24oYXJncyl7dmFyIG49YXJncy5ub2RlPWQuYnlJZChhcmdzLm5vZGUp
O2lmKCFhcmdzLmVhc2luZyl7YXJncy5lYXNpbmc9ZC5fZGVmYXVsdEVhc2luZzt9dmFyIGFuaW09
bmV3IGQuQW5pbWF0aW9uKGFyZ3MpO2QuY29ubmVjdChhbmltLCJiZWZvcmVCZWdpbiIsYW5pbSxm
dW5jdGlvbigpe3ZhciBwbT17fTtmb3IodmFyIHAgaW4gdGhpcy5wcm9wZXJ0aWVzKXtpZihwPT0i
d2lkdGgifHxwPT0iaGVpZ2h0Iil7dGhpcy5ub2RlLmRpc3BsYXk9ImJsb2NrIjt9dmFyIHByb3A9
dGhpcy5wcm9wZXJ0aWVzW3BdO2lmKGQuaXNGdW5jdGlvbihwcm9wKSl7cHJvcD1wcm9wKG4pO31w
cm9wPXBtW3BdPV8yZDQoe30sKGQuaXNPYmplY3QocHJvcCk/cHJvcDp7ZW5kOnByb3B9KSk7aWYo
ZC5pc0Z1bmN0aW9uKHByb3Auc3RhcnQpKXtwcm9wLnN0YXJ0PXByb3Auc3RhcnQobik7fWlmKGQu
aXNGdW5jdGlvbihwcm9wLmVuZCkpe3Byb3AuZW5kPXByb3AuZW5kKG4pO312YXIgXzJlZT0ocC50
b0xvd2VyQ2FzZSgpLmluZGV4T2YoImNvbG9yIik+PTApO2Z1bmN0aW9uIF8yZWYobm9kZSxwKXt2
YXIgdj17aGVpZ2h0Om5vZGUub2Zmc2V0SGVpZ2h0LHdpZHRoOm5vZGUub2Zmc2V0V2lkdGh9W3Bd
O2lmKHYhPT11bmRlZmluZWQpe3JldHVybiB2O312PWQuc3R5bGUobm9kZSxwKTtyZXR1cm4gKHA9
PSJvcGFjaXR5Iik/K3Y6KF8yZWU/djpwYXJzZUZsb2F0KHYpKTt9O2lmKCEoImVuZCIgaW4gcHJv
cCkpe3Byb3AuZW5kPV8yZWYobixwKTt9ZWxzZXtpZighKCJzdGFydCIgaW4gcHJvcCkpe3Byb3Au
c3RhcnQ9XzJlZihuLHApO319aWYoXzJlZSl7cHJvcC5zdGFydD1uZXcgZC5Db2xvcihwcm9wLnN0
YXJ0KTtwcm9wLmVuZD1uZXcgZC5Db2xvcihwcm9wLmVuZCk7fWVsc2V7cHJvcC5zdGFydD0ocD09
Im9wYWNpdHkiKT8rcHJvcC5zdGFydDpwYXJzZUZsb2F0KHByb3Auc3RhcnQpO319dGhpcy5jdXJ2
ZT1uZXcgXzJlYihwbSk7fSk7ZC5jb25uZWN0KGFuaW0sIm9uQW5pbWF0ZSIsZC5oaXRjaChkLCJz
dHlsZSIsYW5pbS5ub2RlKSk7cmV0dXJuIGFuaW07fTtkb2pvLmFuaW09ZnVuY3Rpb24obm9kZSxf
MmYwLF8yZjEsXzJmMixfMmYzLF8yZjQpe3JldHVybiBkLmFuaW1hdGVQcm9wZXJ0eSh7bm9kZTpu
b2RlLGR1cmF0aW9uOl8yZjF8fGQuQW5pbWF0aW9uLnByb3RvdHlwZS5kdXJhdGlvbixwcm9wZXJ0
aWVzOl8yZjAsZWFzaW5nOl8yZjIsb25FbmQ6XzJmM30pLnBsYXkoXzJmNHx8MCk7fTt9KSgpO31p
ZighZG9qby5faGFzUmVzb3VyY2VbImRvam8uaTE4biJdKXtkb2pvLl9oYXNSZXNvdXJjZVsiZG9q
by5pMThuIl09dHJ1ZTtkb2pvLnByb3ZpZGUoImRvam8uaTE4biIpO2Rvam8uZ2V0T2JqZWN0KCJp
MThuIix0cnVlLGRvam8pO2Rvam8uaTE4bi5nZXRMb2NhbGl6YXRpb249ZG9qby5pMThuLmdldExv
Y2FsaXphdGlvbnx8ZnVuY3Rpb24oXzJmNSxfMmY2LF8yZjcpe18yZjc9ZG9qby5pMThuLm5vcm1h
bGl6ZUxvY2FsZShfMmY3KTt2YXIgXzJmOD1fMmY3LnNwbGl0KCItIik7dmFyIF8yZjk9W18yZjUs
Im5scyIsXzJmNl0uam9pbigiLiIpO3ZhciBfMmZhPWRvam8uX2xvYWRlZE1vZHVsZXNbXzJmOV07
aWYoXzJmYSl7dmFyIF8yZmI7Zm9yKHZhciBpPV8yZjgubGVuZ3RoO2k+MDtpLS0pe3ZhciBsb2M9
XzJmOC5zbGljZSgwLGkpLmpvaW4oIl8iKTtpZihfMmZhW2xvY10pe18yZmI9XzJmYVtsb2NdO2Jy
ZWFrO319aWYoIV8yZmIpe18yZmI9XzJmYS5ST09UO31pZihfMmZiKXt2YXIgXzJmYz1mdW5jdGlv
bigpe307XzJmYy5wcm90b3R5cGU9XzJmYjtyZXR1cm4gbmV3IF8yZmMoKTt9fXRocm93IG5ldyBF
cnJvcigiQnVuZGxlIG5vdCBmb3VuZDogIitfMmY2KyIgaW4gIitfMmY1KyIgLCBsb2NhbGU9Iitf
MmY3KTt9O2Rvam8uaTE4bi5ub3JtYWxpemVMb2NhbGU9ZnVuY3Rpb24oXzJmZCl7dmFyIF8yZmU9
XzJmZD9fMmZkLnRvTG93ZXJDYXNlKCk6ZG9qby5sb2NhbGU7aWYoXzJmZT09InJvb3QiKXtfMmZl
PSJST09UIjt9cmV0dXJuIF8yZmU7fTtkb2pvLmkxOG4uX3JlcXVpcmVMb2NhbGl6YXRpb249ZnVu
Y3Rpb24oXzJmZixfMzAwLF8zMDEsXzMwMil7dmFyIF8zMDM9ZG9qby5pMThuLm5vcm1hbGl6ZUxv
Y2FsZShfMzAxKTt2YXIgXzMwND1bXzJmZiwibmxzIixfMzAwXS5qb2luKCIuIik7dmFyIF8zMDU9
IiI7aWYoXzMwMil7dmFyIF8zMDY9XzMwMi5zcGxpdCgiLCIpO2Zvcih2YXIgaT0wO2k8XzMwNi5s
ZW5ndGg7aSsrKXtpZihfMzAzWyJpbmRleE9mIl0oXzMwNltpXSk9PTApe2lmKF8zMDZbaV0ubGVu
Z3RoPl8zMDUubGVuZ3RoKXtfMzA1PV8zMDZbaV07fX19aWYoIV8zMDUpe18zMDU9IlJPT1QiO319
dmFyIF8zMDc9XzMwMj9fMzA1Ol8zMDM7dmFyIF8zMDg9ZG9qby5fbG9hZGVkTW9kdWxlc1tfMzA0
XTt2YXIgXzMwOT1udWxsO2lmKF8zMDgpe2lmKGRvam8uY29uZmlnLmxvY2FsaXphdGlvbkNvbXBs
ZXRlJiZfMzA4Ll9idWlsdCl7cmV0dXJuO312YXIgXzMwYT1fMzA3LnJlcGxhY2UoLy0vZywiXyIp
O3ZhciBfMzBiPV8zMDQrIi4iK18zMGE7XzMwOT1kb2pvLl9sb2FkZWRNb2R1bGVzW18zMGJdO31p
ZighXzMwOSl7XzMwOD1kb2pvWyJwcm92aWRlIl0oXzMwNCk7dmFyIHN5bXM9ZG9qby5fZ2V0TW9k
dWxlU3ltYm9scyhfMmZmKTt2YXIgXzMwYz1zeW1zLmNvbmNhdCgibmxzIikuam9pbigiLyIpO3Zh
ciBfMzBkO2Rvam8uaTE4bi5fc2VhcmNoTG9jYWxlUGF0aChfMzA3LF8zMDIsZnVuY3Rpb24obG9j
KXt2YXIgXzMwZT1sb2MucmVwbGFjZSgvLS9nLCJfIik7dmFyIF8zMGY9XzMwNCsiLiIrXzMwZTt2
YXIgXzMxMD1mYWxzZTtpZighZG9qby5fbG9hZGVkTW9kdWxlc1tfMzBmXSl7ZG9qb1sicHJvdmlk
ZSJdKF8zMGYpO3ZhciBfMzExPVtfMzBjXTtpZihsb2MhPSJST09UIil7XzMxMS5wdXNoKGxvYyk7
fV8zMTEucHVzaChfMzAwKTt2YXIgXzMxMj1fMzExLmpvaW4oIi8iKSsiLmpzIjtfMzEwPWRvam8u
X2xvYWRQYXRoKF8zMTIsbnVsbCxmdW5jdGlvbihoYXNoKXtoYXNoPWhhc2gucm9vdHx8aGFzaDt2
YXIgXzMxMz1mdW5jdGlvbigpe307XzMxMy5wcm90b3R5cGU9XzMwZDtfMzA4W18zMGVdPW5ldyBf
MzEzKCk7Zm9yKHZhciBqIGluIGhhc2gpe18zMDhbXzMwZV1bal09aGFzaFtqXTt9fSk7fWVsc2V7
XzMxMD10cnVlO31pZihfMzEwJiZfMzA4W18zMGVdKXtfMzBkPV8zMDhbXzMwZV07fWVsc2V7XzMw
OFtfMzBlXT1fMzBkO31pZihfMzAyKXtyZXR1cm4gdHJ1ZTt9fSk7fWlmKF8zMDImJl8zMDMhPV8z
MDUpe18zMDhbXzMwMy5yZXBsYWNlKC8tL2csIl8iKV09XzMwOFtfMzA1LnJlcGxhY2UoLy0vZywi
XyIpXTt9fTsoZnVuY3Rpb24oKXt2YXIgXzMxND1kb2pvLmNvbmZpZy5leHRyYUxvY2FsZTtpZihf
MzE0KXtpZighXzMxNCBpbnN0YW5jZW9mIEFycmF5KXtfMzE0PVtfMzE0XTt9dmFyIHJlcT1kb2pv
LmkxOG4uX3JlcXVpcmVMb2NhbGl6YXRpb247ZG9qby5pMThuLl9yZXF1aXJlTG9jYWxpemF0aW9u
PWZ1bmN0aW9uKG0sYixfMzE1LF8zMTYpe3JlcShtLGIsXzMxNSxfMzE2KTtpZihfMzE1KXtyZXR1
cm47fWZvcih2YXIgaT0wO2k8XzMxNC5sZW5ndGg7aSsrKXtyZXEobSxiLF8zMTRbaV0sXzMxNik7
fX07fX0pKCk7ZG9qby5pMThuLl9zZWFyY2hMb2NhbGVQYXRoPWZ1bmN0aW9uKF8zMTcsZG93bixf
MzE4KXtfMzE3PWRvam8uaTE4bi5ub3JtYWxpemVMb2NhbGUoXzMxNyk7dmFyIF8zMTk9XzMxNy5z
cGxpdCgiLSIpO3ZhciBfMzFhPVtdO2Zvcih2YXIgaT1fMzE5Lmxlbmd0aDtpPjA7aS0tKXtfMzFh
LnB1c2goXzMxOS5zbGljZSgwLGkpLmpvaW4oIi0iKSk7fV8zMWEucHVzaChmYWxzZSk7aWYoZG93
bil7XzMxYS5yZXZlcnNlKCk7fWZvcih2YXIgaj1fMzFhLmxlbmd0aC0xO2o+PTA7ai0tKXt2YXIg
bG9jPV8zMWFbal18fCJST09UIjt2YXIgc3RvcD1fMzE4KGxvYyk7aWYoc3RvcCl7YnJlYWs7fX19
O2Rvam8uaTE4bi5fcHJlbG9hZExvY2FsaXphdGlvbnM9ZnVuY3Rpb24oXzMxYixfMzFjKXtmdW5j
dGlvbiBfMzFkKF8zMWUpe18zMWU9ZG9qby5pMThuLm5vcm1hbGl6ZUxvY2FsZShfMzFlKTtkb2pv
LmkxOG4uX3NlYXJjaExvY2FsZVBhdGgoXzMxZSx0cnVlLGZ1bmN0aW9uKGxvYyl7Zm9yKHZhciBp
PTA7aTxfMzFjLmxlbmd0aDtpKyspe2lmKF8zMWNbaV09PWxvYyl7ZG9qb1sicmVxdWlyZSJdKF8z
MWIrIl8iK2xvYyk7cmV0dXJuIHRydWU7fX1yZXR1cm4gZmFsc2U7fSk7fTtfMzFkKCk7dmFyIF8z
MWY9ZG9qby5jb25maWcuZXh0cmFMb2NhbGV8fFtdO2Zvcih2YXIgaT0wO2k8XzMxZi5sZW5ndGg7
aSsrKXtfMzFkKF8zMWZbaV0pO319O31pZighZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2Uu
YnJvd3NlciJdKXtkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS5icm93c2VyIl09dHJ1ZTtk
b2pvLnByb3ZpZGUoImRvam8uX2Jhc2UuYnJvd3NlciIpO2Rvam8uZm9yRWFjaChkb2pvLmNvbmZp
Zy5yZXF1aXJlLGZ1bmN0aW9uKGkpe2Rvam9bInJlcXVpcmUiXShpKTt9KTt9aWYoIWRvam8uX2hh
c1Jlc291cmNlWyJkb2pvLl9iYXNlIl0pe2Rvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlIl09
dHJ1ZTtkb2pvLnByb3ZpZGUoImRvam8uX2Jhc2UiKTt9aWYoZG9qby5pc0Jyb3dzZXImJihkb2N1
bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlInx8ZG9qby5jb25maWcuYWZ0ZXJPbkxvYWQpKXt3
aW5kb3cuc2V0VGltZW91dChkb2pvLl9sb2FkSW5pdCwxMDApO319KSgpOworZGlmZiAtLWdpdCBh
L3dlYi9hamF4L2xpYnMvZXh0LWNvcmUvMy4xLjAvZXh0LWNvcmUuanMgYi93ZWIvYWpheC9saWJz
L2V4dC1jb3JlLzMuMS4wL2V4dC1jb3JlLmpzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg
MDAwMDAwMC4uOWZjNjcyNworLS0tIC9kZXYvbnVsbAorKysrIGIvd2ViL2FqYXgvbGlicy9leHQt
Y29yZS8zLjEuMC9leHQtY29yZS5qcworQEAgLTAsMCArMSw4IEBACisrLyoKKysgKiBFeHQgQ29y
ZSBMaWJyYXJ5IDMuMAorKyAqIGh0dHA6Ly9leHRqcy5jb20vCisrICogQ29weXJpZ2h0KGMpIDIw
MDYtMjAwOSwgRXh0IEpTLCBMTEMuCisrICogCisrICogTUlUIExpY2Vuc2VkIC0gaHR0cDovL2V4
dGpzLmNvbS9saWNlbnNlL21pdC50eHQKKysgKi8KKyt3aW5kb3cudW5kZWZpbmVkPXdpbmRvdy51
bmRlZmluZWQ7RXh0PXt2ZXJzaW9uOiIzLjEuMCJ9O0V4dC5hcHBseT1mdW5jdGlvbihkLGUsYil7
aWYoYil7RXh0LmFwcGx5KGQsYil9aWYoZCYmZSYmdHlwZW9mIGU9PSJvYmplY3QiKXtmb3IodmFy
IGEgaW4gZSl7ZFthXT1lW2FdfX1yZXR1cm4gZH07KGZ1bmN0aW9uKCl7dmFyIGg9MCx0PU9iamVj
dC5wcm90b3R5cGUudG9TdHJpbmcsdT1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCks
ej1mdW5jdGlvbihlKXtyZXR1cm4gZS50ZXN0KHUpfSxqPWRvY3VtZW50LG09ai5jb21wYXRNb2Rl
PT0iQ1NTMUNvbXBhdCIsQj16KC9vcGVyYS8pLGk9eigvY2hyb21lLyksdj16KC93ZWJraXQvKSx5
PSFpJiZ6KC9zYWZhcmkvKSxnPXkmJnooL2FwcGxld2Via2l0XC80LyksYj15JiZ6KC92ZXJzaW9u
XC8zLyksQz15JiZ6KC92ZXJzaW9uXC80Lykscz0hQiYmeigvbXNpZS8pLHE9cyYmeigvbXNpZSA3
LykscD1zJiZ6KC9tc2llIDgvKSxyPXMmJiFxJiYhcCxvPSF2JiZ6KC9nZWNrby8pLGQ9byYmeigv
cnY6MVwuOC8pLGE9byYmeigvcnY6MVwuOS8pLHc9cyYmIW0sQT16KC93aW5kb3dzfHdpbjMyLyks
bD16KC9tYWNpbnRvc2h8bWFjIG9zIHgvKSxrPXooL2Fkb2JlYWlyLyksbj16KC9saW51eC8pLGM9
L15odHRwcy9pLnRlc3Qod2luZG93LmxvY2F0aW9uLnByb3RvY29sKTtpZihyKXt0cnl7ai5leGVj
Q29tbWFuZCgiQmFja2dyb3VuZEltYWdlQ2FjaGUiLGZhbHNlLHRydWUpfWNhdGNoKHgpe319RXh0
LmFwcGx5KEV4dCx7U1NMX1NFQ1VSRV9VUkw6YyYmcz8namF2YXNjcmlwdDoiIic6ImFib3V0OmJs
YW5rIixpc1N0cmljdDptLGlzU2VjdXJlOmMsaXNSZWFkeTpmYWxzZSxlbmFibGVHYXJiYWdlQ29s
bGVjdG9yOnRydWUsZW5hYmxlTGlzdGVuZXJDb2xsZWN0aW9uOmZhbHNlLGVuYWJsZU5lc3RlZExp
c3RlbmVyUmVtb3ZhbDpmYWxzZSxVU0VfTkFUSVZFX0pTT046ZmFsc2UsYXBwbHlJZjpmdW5jdGlv
bihELEUpe2lmKEQpe2Zvcih2YXIgZSBpbiBFKXtpZighRXh0LmlzRGVmaW5lZChEW2VdKSl7RFtl
XT1FW2VdfX19cmV0dXJuIER9LGlkOmZ1bmN0aW9uKGUsRCl7cmV0dXJuKGU9RXh0LmdldERvbShl
KXx8e30pLmlkPWUuaWR8fChEfHwiZXh0LWdlbiIpKygrK2gpfSxleHRlbmQ6ZnVuY3Rpb24oKXt2
YXIgRD1mdW5jdGlvbihGKXtmb3IodmFyIEUgaW4gRil7dGhpc1tFXT1GW0VdfX07dmFyIGU9T2Jq
ZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZnVuY3Rpb24oSyxILEope2lmKEV4dC5p
c09iamVjdChIKSl7Sj1IO0g9SztLPUouY29uc3RydWN0b3IhPWU/Si5jb25zdHJ1Y3RvcjpmdW5j
dGlvbigpe0guYXBwbHkodGhpcyxhcmd1bWVudHMpfX12YXIgRz1mdW5jdGlvbigpe30sSSxFPUgu
cHJvdG90eXBlO0cucHJvdG90eXBlPUU7ST1LLnByb3RvdHlwZT1uZXcgRygpO0kuY29uc3RydWN0
b3I9SztLLnN1cGVyY2xhc3M9RTtpZihFLmNvbnN0cnVjdG9yPT1lKXtFLmNvbnN0cnVjdG9yPUh9
Sy5vdmVycmlkZT1mdW5jdGlvbihGKXtFeHQub3ZlcnJpZGUoSyxGKX07SS5zdXBlcmNsYXNzPUku
c3Vwcj0oZnVuY3Rpb24oKXtyZXR1cm4gRX0pO0kub3ZlcnJpZGU9RDtFeHQub3ZlcnJpZGUoSyxK
KTtLLmV4dGVuZD1mdW5jdGlvbihGKXtyZXR1cm4gRXh0LmV4dGVuZChLLEYpfTtyZXR1cm4gS319
KCksb3ZlcnJpZGU6ZnVuY3Rpb24oZSxFKXtpZihFKXt2YXIgRD1lLnByb3RvdHlwZTtFeHQuYXBw
bHkoRCxFKTtpZihFeHQuaXNJRSYmRS5oYXNPd25Qcm9wZXJ0eSgidG9TdHJpbmciKSl7RC50b1N0
cmluZz1FLnRvU3RyaW5nfX19LG5hbWVzcGFjZTpmdW5jdGlvbigpe3ZhciBELGU7RXh0LmVhY2go
YXJndW1lbnRzLGZ1bmN0aW9uKEUpe2U9RS5zcGxpdCgiLiIpO0Q9d2luZG93W2VbMF1dPXdpbmRv
d1tlWzBdXXx8e307RXh0LmVhY2goZS5zbGljZSgxKSxmdW5jdGlvbihGKXtEPURbRl09RFtGXXx8
e319KX0pO3JldHVybiBEfSx1cmxFbmNvZGU6ZnVuY3Rpb24oSCxHKXt2YXIgRSxEPVtdLEY9ZW5j
b2RlVVJJQ29tcG9uZW50O0V4dC5pdGVyYXRlKEgsZnVuY3Rpb24oZSxJKXtFPUV4dC5pc0VtcHR5
KEkpO0V4dC5lYWNoKEU/ZTpJLGZ1bmN0aW9uKEope0QucHVzaCgiJiIsRihlKSwiPSIsKCFFeHQu
aXNFbXB0eShKKSYmKEohPWV8fCFFKSk/KEV4dC5pc0RhdGUoSik/RXh0LmVuY29kZShKKS5yZXBs
YWNlKC8iL2csIiIpOkYoSikpOiIiKX0pfSk7aWYoIUcpe0Quc2hpZnQoKTtHPSIifXJldHVybiBH
K0Quam9pbigiIil9LHVybERlY29kZTpmdW5jdGlvbihFLEQpe2lmKEV4dC5pc0VtcHR5KEUpKXty
ZXR1cm57fX12YXIgSD17fSxHPUUuc3BsaXQoIiYiKSxJPWRlY29kZVVSSUNvbXBvbmVudCxlLEY7
RXh0LmVhY2goRyxmdW5jdGlvbihKKXtKPUouc3BsaXQoIj0iKTtlPUkoSlswXSk7Rj1JKEpbMV0p
O0hbZV09RHx8IUhbZV0/RjpbXS5jb25jYXQoSFtlXSkuY29uY2F0KEYpfSk7cmV0dXJuIEh9LHVy
bEFwcGVuZDpmdW5jdGlvbihlLEQpe2lmKCFFeHQuaXNFbXB0eShEKSl7cmV0dXJuIGUrKGUuaW5k
ZXhPZigiPyIpPT09LTE/Ij8iOiImIikrRH1yZXR1cm4gZX0sdG9BcnJheTpmdW5jdGlvbigpe3Jl
dHVybiBzP2Z1bmN0aW9uKEUsSCxGLEcpe0c9W107Zm9yKHZhciBEPTAsZT1FLmxlbmd0aDtEPGU7
RCsrKXtHLnB1c2goRVtEXSl9cmV0dXJuIEcuc2xpY2UoSHx8MCxGfHxHLmxlbmd0aCl9OmZ1bmN0
aW9uKGUsRSxEKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSxFfHwwLER8fGUu
bGVuZ3RoKX19KCksaXNJdGVyYWJsZTpmdW5jdGlvbihlKXtpZihFeHQuaXNBcnJheShlKXx8ZS5j
YWxsZWUpe3JldHVybiB0cnVlfWlmKC9Ob2RlTGlzdHxIVE1MQ29sbGVjdGlvbi8udGVzdCh0LmNh
bGwoZSkpKXtyZXR1cm4gdHJ1ZX1yZXR1cm4oKHR5cGVvZiBlLm5leHROb2RlIT0idW5kZWZpbmVk
Inx8ZS5pdGVtKSYmRXh0LmlzTnVtYmVyKGUubGVuZ3RoKSl9LGVhY2g6ZnVuY3Rpb24oRyxGLEUp
e2lmKEV4dC5pc0VtcHR5KEcsdHJ1ZSkpe3JldHVybn1pZighRXh0LmlzSXRlcmFibGUoRyl8fEV4
dC5pc1ByaW1pdGl2ZShHKSl7Rz1bR119Zm9yKHZhciBEPTAsZT1HLmxlbmd0aDtEPGU7RCsrKXtp
ZihGLmNhbGwoRXx8R1tEXSxHW0RdLEQsRyk9PT1mYWxzZSl7cmV0dXJuIER9fX0saXRlcmF0ZTpm
dW5jdGlvbihFLEQsZSl7aWYoRXh0LmlzRW1wdHkoRSkpe3JldHVybn1pZihFeHQuaXNJdGVyYWJs
ZShFKSl7RXh0LmVhY2goRSxELGUpO3JldHVybn1lbHNle2lmKEV4dC5pc09iamVjdChFKSl7Zm9y
KHZhciBGIGluIEUpe2lmKEUuaGFzT3duUHJvcGVydHkoRikpe2lmKEQuY2FsbChlfHxFLEYsRVtG
XSxFKT09PWZhbHNlKXtyZXR1cm59fX19fX0sZ2V0RG9tOmZ1bmN0aW9uKGUpe2lmKCFlfHwhail7
cmV0dXJuIG51bGx9cmV0dXJuIGUuZG9tP2UuZG9tOihFeHQuaXNTdHJpbmcoZSk/ai5nZXRFbGVt
ZW50QnlJZChlKTplKX0sZ2V0Qm9keTpmdW5jdGlvbigpe3JldHVybiBFeHQuZ2V0KGouYm9keXx8
ai5kb2N1bWVudEVsZW1lbnQpfSxyZW1vdmVOb2RlOnMmJiFwP2Z1bmN0aW9uKCl7dmFyIGU7cmV0
dXJuIGZ1bmN0aW9uKEQpe2lmKEQmJkQudGFnTmFtZSE9IkJPRFkiKXsoRXh0LmVuYWJsZU5lc3Rl
ZExpc3RlbmVyUmVtb3ZhbCk/RXh0LkV2ZW50TWFuYWdlci5wdXJnZUVsZW1lbnQoRCx0cnVlKTpF
eHQuRXZlbnRNYW5hZ2VyLnJlbW92ZUFsbChEKTtlPWV8fGouY3JlYXRlRWxlbWVudCgiZGl2Iik7
ZS5hcHBlbmRDaGlsZChEKTtlLmlubmVySFRNTD0iIjtkZWxldGUgRXh0LmVsQ2FjaGVbRC5pZF19
fX0oKTpmdW5jdGlvbihlKXtpZihlJiZlLnBhcmVudE5vZGUmJmUudGFnTmFtZSE9IkJPRFkiKXso
RXh0LmVuYWJsZU5lc3RlZExpc3RlbmVyUmVtb3ZhbCk/RXh0LkV2ZW50TWFuYWdlci5wdXJnZUVs
ZW1lbnQoZSx0cnVlKTpFeHQuRXZlbnRNYW5hZ2VyLnJlbW92ZUFsbChlKTtlLnBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGQoZSk7ZGVsZXRlIEV4dC5lbENhY2hlW2UuaWRdfX0saXNFbXB0eTpmdW5jdGlv
bihELGUpe3JldHVybiBEPT09bnVsbHx8RD09PXVuZGVmaW5lZHx8KChFeHQuaXNBcnJheShEKSYm
IUQubGVuZ3RoKSl8fCghZT9EPT09IiI6ZmFsc2UpfSxpc0FycmF5OmZ1bmN0aW9uKGUpe3JldHVy
biB0LmFwcGx5KGUpPT09IltvYmplY3QgQXJyYXldIn0saXNEYXRlOmZ1bmN0aW9uKGUpe3JldHVy
biB0LmFwcGx5KGUpPT09IltvYmplY3QgRGF0ZV0ifSxpc09iamVjdDpmdW5jdGlvbihlKXtyZXR1
cm4gISFlJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT0iW29iamVjdCBPYmpl
Y3RdIn0saXNQcmltaXRpdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIEV4dC5pc1N0cmluZyhlKXx8RXh0
LmlzTnVtYmVyKGUpfHxFeHQuaXNCb29sZWFuKGUpfSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGUpe3Jl
dHVybiB0LmFwcGx5KGUpPT09IltvYmplY3QgRnVuY3Rpb25dIn0saXNOdW1iZXI6ZnVuY3Rpb24o
ZSl7cmV0dXJuIHR5cGVvZiBlPT09Im51bWJlciImJmlzRmluaXRlKGUpfSxpc1N0cmluZzpmdW5j
dGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PT0ic3RyaW5nIn0saXNCb29sZWFuOmZ1bmN0aW9uKGUp
e3JldHVybiB0eXBlb2YgZT09PSJib29sZWFuIn0saXNFbGVtZW50OmZ1bmN0aW9uKGUpe3JldHVy
biAhIWUmJmUudGFnTmFtZX0saXNEZWZpbmVkOmZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZSE9
PSJ1bmRlZmluZWQifSxpc09wZXJhOkIsaXNXZWJLaXQ6dixpc0Nocm9tZTppLGlzU2FmYXJpOnks
aXNTYWZhcmkzOmIsaXNTYWZhcmk0OkMsaXNTYWZhcmkyOmcsaXNJRTpzLGlzSUU2OnIsaXNJRTc6
cSxpc0lFODpwLGlzR2Vja286byxpc0dlY2tvMjpkLGlzR2Vja28zOmEsaXNCb3JkZXJCb3g6dyxp
c0xpbnV4Om4saXNXaW5kb3dzOkEsaXNNYWM6bCxpc0FpcjprfSk7RXh0Lm5zPUV4dC5uYW1lc3Bh
Y2V9KSgpO0V4dC5ucygiRXh0LnV0aWwiLCJFeHQubGliIiwiRXh0LmRhdGEiKTtFeHQuZWxDYWNo
ZT17fTtFeHQuYXBwbHkoRnVuY3Rpb24ucHJvdG90eXBlLHtjcmVhdGVJbnRlcmNlcHRvcjpmdW5j
dGlvbihiLGEpe3ZhciBjPXRoaXM7cmV0dXJuICFFeHQuaXNGdW5jdGlvbihiKT90aGlzOmZ1bmN0
aW9uKCl7dmFyIGU9dGhpcyxkPWFyZ3VtZW50cztiLnRhcmdldD1lO2IubWV0aG9kPWM7cmV0dXJu
KGIuYXBwbHkoYXx8ZXx8d2luZG93LGQpIT09ZmFsc2UpP2MuYXBwbHkoZXx8d2luZG93LGQpOm51
bGx9fSxjcmVhdGVDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cyxiPXRoaXM7cmV0
dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGIuYXBwbHkod2luZG93LGEpfX0sY3JlYXRlRGVsZWdhdGU6
ZnVuY3Rpb24oYyxiLGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGc9Ynx8YXJn
dW1lbnRzO2lmKGE9PT10cnVlKXtnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50
cywwKTtnPWcuY29uY2F0KGIpfWVsc2V7aWYoRXh0LmlzTnVtYmVyKGEpKXtnPUFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTt2YXIgZT1bYSwwXS5jb25jYXQoYik7QXJyYXku
cHJvdG90eXBlLnNwbGljZS5hcHBseShnLGUpfX1yZXR1cm4gZC5hcHBseShjfHx3aW5kb3csZyl9
fSxkZWZlcjpmdW5jdGlvbihjLGUsYixhKXt2YXIgZD10aGlzLmNyZWF0ZURlbGVnYXRlKGUsYixh
KTtpZihjPjApe3JldHVybiBzZXRUaW1lb3V0KGQsYyl9ZCgpO3JldHVybiAwfX0pO0V4dC5hcHBs
eUlmKFN0cmluZyx7Zm9ybWF0OmZ1bmN0aW9uKGIpe3ZhciBhPUV4dC50b0FycmF5KGFyZ3VtZW50
cywxKTtyZXR1cm4gYi5yZXBsYWNlKC9ceyhcZCspXH0vZyxmdW5jdGlvbihjLGQpe3JldHVybiBh
W2RdfSl9fSk7RXh0LmFwcGx5SWYoQXJyYXkucHJvdG90eXBlLHtpbmRleE9mOmZ1bmN0aW9uKGIs
Yyl7dmFyIGE9dGhpcy5sZW5ndGg7Yz1jfHwwO2MrPShjPDApP2E6MDtmb3IoO2M8YTsrK2Mpe2lm
KHRoaXNbY109PT1iKXtyZXR1cm4gY319cmV0dXJuIC0xfSxyZW1vdmU6ZnVuY3Rpb24oYil7dmFy
IGE9dGhpcy5pbmRleE9mKGIpO2lmKGEhPS0xKXt0aGlzLnNwbGljZShhLDEpfXJldHVybiB0aGlz
fX0pO0V4dC51dGlsLlRhc2tSdW5uZXI9ZnVuY3Rpb24oZSl7ZT1lfHwxMDt2YXIgZz1bXSxhPVtd
LGI9MCxoPWZhbHNlLGQ9ZnVuY3Rpb24oKXtoPWZhbHNlO2NsZWFySW50ZXJ2YWwoYik7Yj0wfSxp
PWZ1bmN0aW9uKCl7aWYoIWgpe2g9dHJ1ZTtiPXNldEludGVydmFsKGosZSl9fSxjPWZ1bmN0aW9u
KGspe2EucHVzaChrKTtpZihrLm9uU3RvcCl7ay5vblN0b3AuYXBwbHkoay5zY29wZXx8ayl9fSxq
PWZ1bmN0aW9uKCl7dmFyIG09YS5sZW5ndGgsbz1uZXcgRGF0ZSgpLmdldFRpbWUoKTtpZihtPjAp
e2Zvcih2YXIgcT0wO3E8bTtxKyspe2cucmVtb3ZlKGFbcV0pfWE9W107aWYoZy5sZW5ndGg8MSl7
ZCgpO3JldHVybn19Zm9yKHZhciBxPTAscCxsLG4saz1nLmxlbmd0aDtxPGs7KytxKXtwPWdbcV07
bD1vLXAudGFza1J1blRpbWU7aWYocC5pbnRlcnZhbDw9bCl7bj1wLnJ1bi5hcHBseShwLnNjb3Bl
fHxwLHAuYXJnc3x8WysrcC50YXNrUnVuQ291bnRdKTtwLnRhc2tSdW5UaW1lPW87aWYobj09PWZh
bHNlfHxwLnRhc2tSdW5Db3VudD09PXAucmVwZWF0KXtjKHApO3JldHVybn19aWYocC5kdXJhdGlv
biYmcC5kdXJhdGlvbjw9KG8tcC50YXNrU3RhcnRUaW1lKSl7YyhwKX19fTt0aGlzLnN0YXJ0PWZ1
bmN0aW9uKGspe2cucHVzaChrKTtrLnRhc2tTdGFydFRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCk7
ay50YXNrUnVuVGltZT0wO2sudGFza1J1bkNvdW50PTA7aSgpO3JldHVybiBrfTt0aGlzLnN0b3A9
ZnVuY3Rpb24oayl7YyhrKTtyZXR1cm4ga307dGhpcy5zdG9wQWxsPWZ1bmN0aW9uKCl7ZCgpO2Zv
cih2YXIgbD0wLGs9Zy5sZW5ndGg7bDxrO2wrKyl7aWYoZ1tsXS5vblN0b3Ape2dbbF0ub25TdG9w
KCl9fWc9W107YT1bXX19O0V4dC5UYXNrTWdyPW5ldyBFeHQudXRpbC5UYXNrUnVubmVyKCk7RXh0
LnV0aWwuRGVsYXllZFRhc2s9ZnVuY3Rpb24oZCxjLGEpe3ZhciBlPXRoaXMsZyxiPWZ1bmN0aW9u
KCl7Y2xlYXJJbnRlcnZhbChnKTtnPW51bGw7ZC5hcHBseShjLGF8fFtdKX07ZS5kZWxheT1mdW5j
dGlvbihpLGssaixoKXtlLmNhbmNlbCgpO2Q9a3x8ZDtjPWp8fGM7YT1ofHxhO2c9c2V0SW50ZXJ2
YWwoYixpKX07ZS5jYW5jZWw9ZnVuY3Rpb24oKXtpZihnKXtjbGVhckludGVydmFsKGcpO2c9bnVs
bH19fTsoZnVuY3Rpb24oKXt2YXIgYjtmdW5jdGlvbiBjKGQpe2lmKCFiKXtiPW5ldyBFeHQuRWxl
bWVudC5GbHl3ZWlnaHQoKX1iLmRvbT1kO3JldHVybiBifShmdW5jdGlvbigpe3ZhciBoPWRvY3Vt
ZW50LGU9aC5jb21wYXRNb2RlPT0iQ1NTMUNvbXBhdCIsZz1NYXRoLm1heCxkPU1hdGgucm91bmQs
aT1wYXJzZUludDtFeHQubGliLkRvbT17aXNBbmNlc3RvcjpmdW5jdGlvbihrLGwpe3ZhciBqPWZh
bHNlO2s9RXh0LmdldERvbShrKTtsPUV4dC5nZXREb20obCk7aWYoayYmbCl7aWYoay5jb250YWlu
cyl7cmV0dXJuIGsuY29udGFpbnMobCl9ZWxzZXtpZihrLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u
KXtyZXR1cm4gISEoay5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihsKSYxNil9ZWxzZXt3aGlsZShs
PWwucGFyZW50Tm9kZSl7aj1sPT1rfHxqfX19fXJldHVybiBqfSxnZXRWaWV3V2lkdGg6ZnVuY3Rp
b24oail7cmV0dXJuIGo/dGhpcy5nZXREb2N1bWVudFdpZHRoKCk6dGhpcy5nZXRWaWV3cG9ydFdp
ZHRoKCl9LGdldFZpZXdIZWlnaHQ6ZnVuY3Rpb24oail7cmV0dXJuIGo/dGhpcy5nZXREb2N1bWVu
dEhlaWdodCgpOnRoaXMuZ2V0Vmlld3BvcnRIZWlnaHQoKX0sZ2V0RG9jdW1lbnRIZWlnaHQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gZyghZT9oLmJvZHkuc2Nyb2xsSGVpZ2h0OmguZG9jdW1lbnRFbGVtZW50
LnNjcm9sbEhlaWdodCx0aGlzLmdldFZpZXdwb3J0SGVpZ2h0KCkpfSxnZXREb2N1bWVudFdpZHRo
OmZ1bmN0aW9uKCl7cmV0dXJuIGcoIWU/aC5ib2R5LnNjcm9sbFdpZHRoOmguZG9jdW1lbnRFbGVt
ZW50LnNjcm9sbFdpZHRoLHRoaXMuZ2V0Vmlld3BvcnRXaWR0aCgpKX0sZ2V0Vmlld3BvcnRIZWln
aHQ6ZnVuY3Rpb24oKXtyZXR1cm4gRXh0LmlzSUU/KEV4dC5pc1N0cmljdD9oLmRvY3VtZW50RWxl
bWVudC5jbGllbnRIZWlnaHQ6aC5ib2R5LmNsaWVudEhlaWdodCk6c2VsZi5pbm5lckhlaWdodH0s
Z2V0Vmlld3BvcnRXaWR0aDpmdW5jdGlvbigpe3JldHVybiAhRXh0LmlzU3RyaWN0JiYhRXh0Lmlz
T3BlcmE/aC5ib2R5LmNsaWVudFdpZHRoOkV4dC5pc0lFP2guZG9jdW1lbnRFbGVtZW50LmNsaWVu
dFdpZHRoOnNlbGYuaW5uZXJXaWR0aH0sZ2V0WTpmdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5nZXRY
WShqKVsxXX0sZ2V0WDpmdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5nZXRYWShqKVswXX0sZ2V0WFk6
ZnVuY3Rpb24obCl7dmFyIGsscix0LHcsbSxuLHY9MCxzPTAsdSxqLG89KGguYm9keXx8aC5kb2N1
bWVudEVsZW1lbnQpLHE9WzAsMF07bD1FeHQuZ2V0RG9tKGwpO2lmKGwhPW8pe2lmKGwuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KXt0PWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dT1jKGRvY3VtZW50
KS5nZXRTY3JvbGwoKTtxPVtkKHQubGVmdCt1LmxlZnQpLGQodC50b3ArdS50b3ApXX1lbHNle2s9
bDtqPWMobCkuaXNTdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpO3doaWxlKGspe3I9YyhrKTt2
Kz1rLm9mZnNldExlZnQ7cys9ay5vZmZzZXRUb3A7aj1qfHxyLmlzU3R5bGUoInBvc2l0aW9uIiwi
YWJzb2x1dGUiKTtpZihFeHQuaXNHZWNrbyl7cys9dz1pKHIuZ2V0U3R5bGUoImJvcmRlclRvcFdp
ZHRoIiksMTApfHwwO3YrPW09aShyLmdldFN0eWxlKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDA7
aWYoayE9bCYmIXIuaXNTdHlsZSgib3ZlcmZsb3ciLCJ2aXNpYmxlIikpe3YrPW07cys9d319az1r
Lm9mZnNldFBhcmVudH1pZihFeHQuaXNTYWZhcmkmJmope3YtPW8ub2Zmc2V0TGVmdDtzLT1vLm9m
ZnNldFRvcH1pZihFeHQuaXNHZWNrbyYmIWope249YyhvKTt2Kz1pKG4uZ2V0U3R5bGUoImJvcmRl
ckxlZnRXaWR0aCIpLDEwKXx8MDtzKz1pKG4uZ2V0U3R5bGUoImJvcmRlclRvcFdpZHRoIiksMTAp
fHwwfWs9bC5wYXJlbnROb2RlO3doaWxlKGsmJmshPW8pe2lmKCFFeHQuaXNPcGVyYXx8KGsudGFn
TmFtZSE9IlRSIiYmIWMoaykuaXNTdHlsZSgiZGlzcGxheSIsImlubGluZSIpKSl7di09ay5zY3Jv
bGxMZWZ0O3MtPWsuc2Nyb2xsVG9wfWs9ay5wYXJlbnROb2RlfXE9W3Ysc119fXJldHVybiBxfSxz
ZXRYWTpmdW5jdGlvbihrLGwpeyhrPUV4dC5mbHkoaywiX3NldFhZIikpLnBvc2l0aW9uKCk7dmFy
IG09ay50cmFuc2xhdGVQb2ludHMobCksaj1rLmRvbS5zdHlsZSxuO2ZvcihuIGluIG0pe2lmKCFp
c05hTihtW25dKSl7altuXT1tW25dKyJweCJ9fX0sc2V0WDpmdW5jdGlvbihrLGope3RoaXMuc2V0
WFkoayxbaixmYWxzZV0pfSxzZXRZOmZ1bmN0aW9uKGosayl7dGhpcy5zZXRYWShqLFtmYWxzZSxr
XSl9fX0pKCk7RXh0LmxpYi5FdmVudD1mdW5jdGlvbigpe3ZhciB4PWZhbHNlLGg9e30sQj0wLHE9
W10sZCxEPWZhbHNlLGw9d2luZG93LEg9ZG9jdW1lbnQsbT0yMDAsdD0yMCxDPTAscz0wLGo9MSxu
PTIsdT0yLHk9Myx2PSJzY3JvbGxMZWZ0IixyPSJzY3JvbGxUb3AiLGc9InVubG9hZCIsQT0ibW91
c2VvdmVyIixHPSJtb3VzZW91dCIsZT1mdW5jdGlvbigpe3ZhciBJO2lmKGwuYWRkRXZlbnRMaXN0
ZW5lcil7ST1mdW5jdGlvbihNLEssTCxKKXtpZihLPT0ibW91c2VlbnRlciIpe0w9TC5jcmVhdGVJ
bnRlcmNlcHRvcihwKTtNLmFkZEV2ZW50TGlzdGVuZXIoQSxMLChKKSl9ZWxzZXtpZihLPT0ibW91
c2VsZWF2ZSIpe0w9TC5jcmVhdGVJbnRlcmNlcHRvcihwKTtNLmFkZEV2ZW50TGlzdGVuZXIoRyxM
LChKKSl9ZWxzZXtNLmFkZEV2ZW50TGlzdGVuZXIoSyxMLChKKSl9fXJldHVybiBMfX1lbHNle2lm
KGwuYXR0YWNoRXZlbnQpe0k9ZnVuY3Rpb24oTSxLLEwsSil7TS5hdHRhY2hFdmVudCgib24iK0ss
TCk7cmV0dXJuIEx9fWVsc2V7ST1mdW5jdGlvbigpe319fXJldHVybiBJfSgpLGk9ZnVuY3Rpb24o
KXt2YXIgSTtpZihsLnJlbW92ZUV2ZW50TGlzdGVuZXIpe0k9ZnVuY3Rpb24oTSxLLEwsSil7aWYo
Sz09Im1vdXNlZW50ZXIiKXtLPUF9ZWxzZXtpZihLPT0ibW91c2VsZWF2ZSIpe0s9R319TS5yZW1v
dmVFdmVudExpc3RlbmVyKEssTCwoSikpfX1lbHNle2lmKGwuZGV0YWNoRXZlbnQpe0k9ZnVuY3Rp
b24oTCxKLEspe0wuZGV0YWNoRXZlbnQoIm9uIitKLEspfX1lbHNle0k9ZnVuY3Rpb24oKXt9fX1y
ZXR1cm4gSX0oKTtmdW5jdGlvbiBwKEkpe3JldHVybiAhdyhJLmN1cnJlbnRUYXJnZXQsei5nZXRS
ZWxhdGVkVGFyZ2V0KEkpKX1mdW5jdGlvbiB3KEksSil7aWYoSSYmSS5maXJzdENoaWxkKXt3aGls
ZShKKXtpZihKPT09SSl7cmV0dXJuIHRydWV9Sj1KLnBhcmVudE5vZGU7aWYoSiYmKEoubm9kZVR5
cGUhPTEpKXtKPW51bGx9fX1yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gRSgpe3ZhciBLPWZhbHNlLE89
W10sTSxMLEksSixOPSF4fHwoQj4wKTtpZighRCl7RD10cnVlO2ZvcihMPTAsST1xLmxlbmd0aDtM
PEk7TCsrKXtKPXFbTF07aWYoSiYmKE09SC5nZXRFbGVtZW50QnlJZChKLmlkKSkpe2lmKCFKLmNo
ZWNrUmVhZHl8fHh8fE0ubmV4dFNpYmxpbmd8fChIJiZILmJvZHkpKXtNPUoub3ZlcnJpZGU/KEou
b3ZlcnJpZGU9PT10cnVlP0oub2JqOkoub3ZlcnJpZGUpOk07Si5mbi5jYWxsKE0sSi5vYmopO3Eu
cmVtb3ZlKEopfWVsc2V7Ty5wdXNoKEopfX19Qj0oTy5sZW5ndGg9PT0wKT8wOkItMTtpZihOKXtv
KCl9ZWxzZXtjbGVhckludGVydmFsKGQpO2Q9bnVsbH1LPSEoRD1mYWxzZSl9cmV0dXJuIEt9ZnVu
Y3Rpb24gbygpe2lmKCFkKXt2YXIgST1mdW5jdGlvbigpe0UoKX07ZD1zZXRJbnRlcnZhbChJLHQp
fX1mdW5jdGlvbiBGKCl7dmFyIEk9SC5kb2N1bWVudEVsZW1lbnQsSj1ILmJvZHk7aWYoSSYmKElb
cl18fElbdl0pKXtyZXR1cm5bSVt2XSxJW3JdXX1lbHNle2lmKEope3JldHVybltKW3ZdLEpbcl1d
fWVsc2V7cmV0dXJuWzAsMF19fX1mdW5jdGlvbiBrKEksSil7ST1JLmJyb3dzZXJFdmVudHx8STt2
YXIgSz1JWyJwYWdlIitKXTtpZighSyYmSyE9PTApe0s9SVsiY2xpZW50IitKXXx8MDtpZihFeHQu
aXNJRSl7Sys9RigpW0o9PSJYIj8wOjFdfX1yZXR1cm4gS312YXIgej17ZXh0QWRhcHRlcjp0cnVl
LG9uQXZhaWxhYmxlOmZ1bmN0aW9uKEssSSxMLEope3EucHVzaCh7aWQ6SyxmbjpJLG9iajpMLG92
ZXJyaWRlOkosY2hlY2tSZWFkeTpmYWxzZX0pO0I9bTtvKCl9LGFkZExpc3RlbmVyOmZ1bmN0aW9u
KEssSSxKKXtLPUV4dC5nZXREb20oSyk7aWYoSyYmSil7aWYoST09Zyl7aWYoaFtLLmlkXT09PXVu
ZGVmaW5lZCl7aFtLLmlkXT1bXX1oW0suaWRdLnB1c2goW0ksSl0pO3JldHVybiBKfXJldHVybiBl
KEssSSxKLGZhbHNlKX1yZXR1cm4gZmFsc2V9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKE8sSyxO
KXtPPUV4dC5nZXREb20oTyk7dmFyIE0sSixJLEw7aWYoTyYmTil7aWYoSz09Zyl7aWYoKEw9aFtP
LmlkXSkhPT11bmRlZmluZWQpe2ZvcihNPTAsSj1MLmxlbmd0aDtNPEo7TSsrKXtpZigoST1MW01d
KSYmSVtzXT09SyYmSVtqXT09Til7aFtpZF0uc3BsaWNlKE0sMSl9fX1yZXR1cm59aShPLEssTixm
YWxzZSl9fSxnZXRUYXJnZXQ6ZnVuY3Rpb24oSSl7ST1JLmJyb3dzZXJFdmVudHx8STtyZXR1cm4g
dGhpcy5yZXNvbHZlVGV4dE5vZGUoSS50YXJnZXR8fEkuc3JjRWxlbWVudCl9LHJlc29sdmVUZXh0
Tm9kZTpFeHQuaXNHZWNrbz9mdW5jdGlvbihKKXtpZighSil7cmV0dXJufXZhciBJPUhUTUxFbGVt
ZW50LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEopO2lmKEk9PSJbeHBjb25uZWN0IHdyYXBwZWQg
bmF0aXZlIHByb3RvdHlwZV0ifHxJPT0iW29iamVjdCBYVUxFbGVtZW50XSIpe3JldHVybn1yZXR1
cm4gSi5ub2RlVHlwZT09Mz9KLnBhcmVudE5vZGU6Sn06ZnVuY3Rpb24oSSl7cmV0dXJuIEkmJkku
bm9kZVR5cGU9PTM/SS5wYXJlbnROb2RlOkl9LGdldFJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oSSl7
ST1JLmJyb3dzZXJFdmVudHx8STtyZXR1cm4gdGhpcy5yZXNvbHZlVGV4dE5vZGUoSS5yZWxhdGVk
VGFyZ2V0fHwoSS50eXBlPT1HP0kudG9FbGVtZW50OkkudHlwZT09QT9JLmZyb21FbGVtZW50Om51
bGwpKX0sZ2V0UGFnZVg6ZnVuY3Rpb24oSSl7cmV0dXJuIGsoSSwiWCIpfSxnZXRQYWdlWTpmdW5j
dGlvbihJKXtyZXR1cm4gayhJLCJZIil9LGdldFhZOmZ1bmN0aW9uKEkpe3JldHVyblt0aGlzLmdl
dFBhZ2VYKEkpLHRoaXMuZ2V0UGFnZVkoSSldfSxzdG9wRXZlbnQ6ZnVuY3Rpb24oSSl7dGhpcy5z
dG9wUHJvcGFnYXRpb24oSSk7dGhpcy5wcmV2ZW50RGVmYXVsdChJKX0sc3RvcFByb3BhZ2F0aW9u
OmZ1bmN0aW9uKEkpe0k9SS5icm93c2VyRXZlbnR8fEk7aWYoSS5zdG9wUHJvcGFnYXRpb24pe0ku
c3RvcFByb3BhZ2F0aW9uKCl9ZWxzZXtJLmNhbmNlbEJ1YmJsZT10cnVlfX0scHJldmVudERlZmF1
bHQ6ZnVuY3Rpb24oSSl7ST1JLmJyb3dzZXJFdmVudHx8STtpZihJLnByZXZlbnREZWZhdWx0KXtJ
LnByZXZlbnREZWZhdWx0KCl9ZWxzZXtJLnJldHVyblZhbHVlPWZhbHNlfX0sZ2V0RXZlbnQ6ZnVu
Y3Rpb24oSSl7ST1JfHxsLmV2ZW50O2lmKCFJKXt2YXIgSj10aGlzLmdldEV2ZW50LmNhbGxlcjt3
aGlsZShKKXtJPUouYXJndW1lbnRzWzBdO2lmKEkmJkV2ZW50PT1JLmNvbnN0cnVjdG9yKXticmVh
a31KPUouY2FsbGVyfX1yZXR1cm4gSX0sZ2V0Q2hhckNvZGU6ZnVuY3Rpb24oSSl7ST1JLmJyb3dz
ZXJFdmVudHx8STtyZXR1cm4gSS5jaGFyQ29kZXx8SS5rZXlDb2RlfHwwfSxnZXRMaXN0ZW5lcnM6
ZnVuY3Rpb24oSixJKXtFeHQuRXZlbnRNYW5hZ2VyLmdldExpc3RlbmVycyhKLEkpfSxwdXJnZUVs
ZW1lbnQ6ZnVuY3Rpb24oSixLLEkpe0V4dC5FdmVudE1hbmFnZXIucHVyZ2VFbGVtZW50KEosSyxJ
KX0sX2xvYWQ6ZnVuY3Rpb24oSil7eD10cnVlO3ZhciBJPUV4dC5saWIuRXZlbnQ7aWYoRXh0Lmlz
SUUmJkohPT10cnVlKXtpKGwsImxvYWQiLGFyZ3VtZW50cy5jYWxsZWUpfX0sX3VubG9hZDpmdW5j
dGlvbihQKXt2YXIgSj1FeHQubGliLkV2ZW50LE0sTCxLLFMsUSxJLE8sTixUO2ZvcihJIGluIGgp
e1E9aFtJXTtmb3IoTT0wLE89US5sZW5ndGg7TTxPO00rKyl7Uz1RW01dO2lmKFMpe3RyeXtUPVNb
eV0/KFNbeV09PT10cnVlP1NbdV06U1t5XSk6bDtTW2pdLmNhbGwoVCxKLmdldEV2ZW50KFApLFNb
dV0pfWNhdGNoKFIpe319fX1oPW51bGw7RXh0LkV2ZW50TWFuYWdlci5fdW5sb2FkKCk7aShsLGcs
Si5fdW5sb2FkKX19O3oub249ei5hZGRMaXN0ZW5lcjt6LnVuPXoucmVtb3ZlTGlzdGVuZXI7aWYo
SCYmSC5ib2R5KXt6Ll9sb2FkKHRydWUpfWVsc2V7ZShsLCJsb2FkIix6Ll9sb2FkKX1lKGwsZyx6
Ll91bmxvYWQpO0UoKTtyZXR1cm4gen0oKTtFeHQubGliLkFqYXg9ZnVuY3Rpb24oKXt2YXIgaD1b
Ik1TWE1MMi5YTUxIVFRQLjMuMCIsIk1TWE1MMi5YTUxIVFRQIiwiTWljcm9zb2Z0LlhNTEhUVFAi
XSxkPSJDb250ZW50LVR5cGUiO2Z1bmN0aW9uIGkodCl7dmFyIHM9dC5jb25uLHU7ZnVuY3Rpb24g
cih2LHcpe2Zvcih1IGluIHcpe2lmKHcuaGFzT3duUHJvcGVydHkodSkpe3Yuc2V0UmVxdWVzdEhl
YWRlcih1LHdbdV0pfX19aWYobC5kZWZhdWx0SGVhZGVycyl7cihzLGwuZGVmYXVsdEhlYWRlcnMp
fWlmKGwuaGVhZGVycyl7cihzLGwuaGVhZGVycyk7ZGVsZXRlIGwuaGVhZGVyc319ZnVuY3Rpb24g
ZSh1LHQscyxyKXtyZXR1cm57dElkOnUsc3RhdHVzOnM/LTE6MCxzdGF0dXNUZXh0OnM/InRyYW5z
YWN0aW9uIGFib3J0ZWQiOiJjb21tdW5pY2F0aW9uIGZhaWx1cmUiLGlzQWJvcnQ6cyxpc1RpbWVv
dXQ6cixhcmd1bWVudDp0fX1mdW5jdGlvbiBrKHIscyl7KGwuaGVhZGVycz1sLmhlYWRlcnN8fHt9
KVtyXT1zfWZ1bmN0aW9uIHAoQSx5KXt2YXIgdT17fSx3LHg9QS5jb25uLHIsdjt0cnl7dz1BLmNv
bm4uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7RXh0LmVhY2gody5yZXBsYWNlKC9cclxuL2csIlxu
Iikuc3BsaXQoIlxuIiksZnVuY3Rpb24ocyl7cj1zLmluZGV4T2YoIjoiKTtpZihyPj0wKXt2PXMu
c3Vic3RyKDAscikudG9Mb3dlckNhc2UoKTtpZihzLmNoYXJBdChyKzEpPT0iICIpeysrcn11W3Zd
PXMuc3Vic3RyKHIrMSl9fSl9Y2F0Y2goeil7fXJldHVybnt0SWQ6QS50SWQsc3RhdHVzOnguc3Rh
dHVzLHN0YXR1c1RleHQ6eC5zdGF0dXNUZXh0LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKHMp
e3JldHVybiB1W3MudG9Mb3dlckNhc2UoKV19LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlv
bigpe3JldHVybiB3fSxyZXNwb25zZVRleHQ6eC5yZXNwb25zZVRleHQscmVzcG9uc2VYTUw6eC5y
ZXNwb25zZVhNTCxhcmd1bWVudDp5fX1mdW5jdGlvbiBvKHIpe3IuY29ubj1udWxsO3I9bnVsbH1m
dW5jdGlvbiBnKHcseCxzLHIpe2lmKCF4KXtvKHcpO3JldHVybn12YXIgdSx0O3RyeXtpZih3LmNv
bm4uc3RhdHVzIT09dW5kZWZpbmVkJiZ3LmNvbm4uc3RhdHVzIT0wKXt1PXcuY29ubi5zdGF0dXN9
ZWxzZXt1PTEzMDMwfX1jYXRjaCh2KXt1PTEzMDMwfWlmKCh1Pj0yMDAmJnU8MzAwKXx8KEV4dC5p
c0lFJiZ1PT0xMjIzKSl7dD1wKHcseC5hcmd1bWVudCk7aWYoeC5zdWNjZXNzKXtpZigheC5zY29w
ZSl7eC5zdWNjZXNzKHQpfWVsc2V7eC5zdWNjZXNzLmFwcGx5KHguc2NvcGUsW3RdKX19fWVsc2V7
c3dpdGNoKHUpe2Nhc2UgMTIwMDI6Y2FzZSAxMjAyOTpjYXNlIDEyMDMwOmNhc2UgMTIwMzE6Y2Fz
ZSAxMjE1MjpjYXNlIDEzMDMwOnQ9ZSh3LnRJZCx4LmFyZ3VtZW50LChzP3M6ZmFsc2UpLHIpO2lm
KHguZmFpbHVyZSl7aWYoIXguc2NvcGUpe3guZmFpbHVyZSh0KX1lbHNle3guZmFpbHVyZS5hcHBs
eSh4LnNjb3BlLFt0XSl9fWJyZWFrO2RlZmF1bHQ6dD1wKHcseC5hcmd1bWVudCk7aWYoeC5mYWls
dXJlKXtpZigheC5zY29wZSl7eC5mYWlsdXJlKHQpfWVsc2V7eC5mYWlsdXJlLmFwcGx5KHguc2Nv
cGUsW3RdKX19fX1vKHcpO3Q9bnVsbH1mdW5jdGlvbiBuKHQsdyl7dz13fHx7fTt2YXIgcj10LmNv
bm4sdj10LnRJZCxzPWwucG9sbCx1PXcudGltZW91dHx8bnVsbDtpZih1KXtsLnRpbWVvdXRbdl09
c2V0VGltZW91dChmdW5jdGlvbigpe2wuYWJvcnQodCx3LHRydWUpfSx1KX1zW3ZdPXNldEludGVy
dmFsKGZ1bmN0aW9uKCl7aWYociYmci5yZWFkeVN0YXRlPT00KXtjbGVhckludGVydmFsKHNbdl0p
O3Nbdl09bnVsbDtpZih1KXtjbGVhclRpbWVvdXQobC50aW1lb3V0W3ZdKTtsLnRpbWVvdXRbdl09
bnVsbH1nKHQsdyl9fSxsLnBvbGxJbnRlcnZhbCl9ZnVuY3Rpb24gaih2LHMsdSxyKXt2YXIgdD1t
KCl8fG51bGw7aWYodCl7dC5jb25uLm9wZW4odixzLHRydWUpO2lmKGwudXNlRGVmYXVsdFhockhl
YWRlcil7aygiWC1SZXF1ZXN0ZWQtV2l0aCIsbC5kZWZhdWx0WGhySGVhZGVyKX1pZihyJiZsLnVz
ZURlZmF1bHRIZWFkZXImJighbC5oZWFkZXJzfHwhbC5oZWFkZXJzW2RdKSl7ayhkLGwuZGVmYXVs
dFBvc3RIZWFkZXIpfWlmKGwuZGVmYXVsdEhlYWRlcnN8fGwuaGVhZGVycyl7aSh0KX1uKHQsdSk7
dC5jb25uLnNlbmQocnx8bnVsbCl9cmV0dXJuIHR9ZnVuY3Rpb24gbSgpe3ZhciBzO3RyeXtpZihz
PXEobC50cmFuc2FjdGlvbklkKSl7bC50cmFuc2FjdGlvbklkKyt9fWNhdGNoKHIpe31maW5hbGx5
e3JldHVybiBzfX1mdW5jdGlvbiBxKHUpe3ZhciByO3RyeXtyPW5ldyBYTUxIdHRwUmVxdWVzdCgp
fWNhdGNoKHQpe2Zvcih2YXIgcz0wO3M8aC5sZW5ndGg7KytzKXt0cnl7cj1uZXcgQWN0aXZlWE9i
amVjdChoW3NdKTticmVha31jYXRjaCh0KXt9fX1maW5hbGx5e3JldHVybntjb25uOnIsdElkOnV9
fX12YXIgbD17cmVxdWVzdDpmdW5jdGlvbihyLHQsdSx2LHope2lmKHope3ZhciB3PXRoaXMscz16
LnhtbERhdGEseD16Lmpzb25EYXRhLHk7RXh0LmFwcGx5SWYodyx6KTtpZihzfHx4KXt5PXcuaGVh
ZGVycztpZigheXx8IXlbZF0pe2soZCxzPyJ0ZXh0L3htbCI6ImFwcGxpY2F0aW9uL2pzb24iKX12
PXN8fCghRXh0LmlzUHJpbWl0aXZlKHgpP0V4dC5lbmNvZGUoeCk6eCl9fXJldHVybiBqKHJ8fHou
bWV0aG9kfHwiUE9TVCIsdCx1LHYpfSxzZXJpYWxpemVGb3JtOmZ1bmN0aW9uKHMpe3ZhciB0PXMu
ZWxlbWVudHN8fChkb2N1bWVudC5mb3Jtc1tzXXx8RXh0LmdldERvbShzKSkuZWxlbWVudHMsej1m
YWxzZSx5PWVuY29kZVVSSUNvbXBvbmVudCx3LEEscix1LHY9IiIseDtFeHQuZWFjaCh0LGZ1bmN0
aW9uKEIpe3I9Qi5uYW1lO3g9Qi50eXBlO2lmKCFCLmRpc2FibGVkJiZyKXtpZigvc2VsZWN0LShv
bmV8bXVsdGlwbGUpL2kudGVzdCh4KSl7RXh0LmVhY2goQi5vcHRpb25zLGZ1bmN0aW9uKEMpe2lm
KEMuc2VsZWN0ZWQpe3YrPVN0cmluZy5mb3JtYXQoInswfT17MX0mIix5KHIpLHkoKEMuaGFzQXR0
cmlidXRlP0MuaGFzQXR0cmlidXRlKCJ2YWx1ZSIpOkMuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpIT09
bnVsbCk/Qy52YWx1ZTpDLnRleHQpKX19KX1lbHNle2lmKCEvZmlsZXx1bmRlZmluZWR8cmVzZXR8
YnV0dG9uL2kudGVzdCh4KSl7aWYoISgvcmFkaW98Y2hlY2tib3gvaS50ZXN0KHgpJiYhQi5jaGVj
a2VkKSYmISh4PT0ic3VibWl0IiYmeikpe3YrPXkocikrIj0iK3koQi52YWx1ZSkrIiYiO3o9L3N1
Ym1pdC9pLnRlc3QoeCl9fX19fSk7cmV0dXJuIHYuc3Vic3RyKDAsdi5sZW5ndGgtMSl9LHVzZURl
ZmF1bHRIZWFkZXI6dHJ1ZSxkZWZhdWx0UG9zdEhlYWRlcjoiYXBwbGljYXRpb24veC13d3ctZm9y
bS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04Iix1c2VEZWZhdWx0WGhySGVhZGVyOnRydWUsZGVm
YXVsdFhockhlYWRlcjoiWE1MSHR0cFJlcXVlc3QiLHBvbGw6e30sdGltZW91dDp7fSxwb2xsSW50
ZXJ2YWw6NTAsdHJhbnNhY3Rpb25JZDowLGFib3J0OmZ1bmN0aW9uKHUsdyxyKXt2YXIgdD10aGlz
LHY9dS50SWQscz1mYWxzZTtpZih0LmlzQ2FsbEluUHJvZ3Jlc3ModSkpe3UuY29ubi5hYm9ydCgp
O2NsZWFySW50ZXJ2YWwodC5wb2xsW3ZdKTt0LnBvbGxbdl09bnVsbDtjbGVhclRpbWVvdXQobC50
aW1lb3V0W3ZdKTt0LnRpbWVvdXRbdl09bnVsbDtnKHUsdywocz10cnVlKSxyKX1yZXR1cm4gc30s
aXNDYWxsSW5Qcm9ncmVzczpmdW5jdGlvbihyKXtyZXR1cm4gci5jb25uJiYhezA6dHJ1ZSw0OnRy
dWV9W3IuY29ubi5yZWFkeVN0YXRlXX19O3JldHVybiBsfSgpOyhmdW5jdGlvbigpe3ZhciBoPUV4
dC5saWIsaj0vd2lkdGh8aGVpZ2h0fG9wYWNpdHl8cGFkZGluZy9pLGc9L14oKHdpZHRofGhlaWdo
dCl8KHRvcHxsZWZ0KSkkLyxkPS93aWR0aHxoZWlnaHR8dG9wJHxib3R0b20kfGxlZnQkfHJpZ2h0
JC9pLGk9L1xkKyhlbXwlfGVufGV4fHB0fGlufGNtfG1tfHBjKSQvaSxrPWZ1bmN0aW9uKGwpe3Jl
dHVybiB0eXBlb2YgbCE9PSJ1bmRlZmluZWQifSxlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRl
KCl9O2guQW5pbT17bW90aW9uOmZ1bmN0aW9uKG8sbSxwLHEsbCxuKXtyZXR1cm4gdGhpcy5ydW4o
byxtLHAscSxsLG4sRXh0LmxpYi5Nb3Rpb24pfSxydW46ZnVuY3Rpb24ocCxtLHIscyxsLG8sbil7
bj1ufHxFeHQubGliLkFuaW1CYXNlO2lmKHR5cGVvZiBzPT0ic3RyaW5nIil7cz1FeHQubGliLkVh
c2luZ1tzXX12YXIgcT1uZXcgbihwLG0scixzKTtxLmFuaW1hdGVYKGZ1bmN0aW9uKCl7aWYoRXh0
LmlzRnVuY3Rpb24obCkpe2wuY2FsbChvKX19KTtyZXR1cm4gcX19O2guQW5pbUJhc2U9ZnVuY3Rp
b24obSxsLG4sbyl7aWYobSl7dGhpcy5pbml0KG0sbCxuLG8pfX07aC5BbmltQmFzZS5wcm90b3R5
cGU9e2RvTWV0aG9kOmZ1bmN0aW9uKGwsbyxtKXt2YXIgbj10aGlzO3JldHVybiBuLm1ldGhvZChu
LmN1ckZyYW1lLG8sbS1vLG4udG90YWxGcmFtZXMpfSxzZXRBdHRyOmZ1bmN0aW9uKGwsbixtKXtp
ZihqLnRlc3QobCkmJm48MCl7bj0wfUV4dC5mbHkodGhpcy5lbCwiX2FuaW0iKS5zZXRTdHlsZShs
LG4rbSl9LGdldEF0dHI6ZnVuY3Rpb24obCl7dmFyIG49RXh0LmZseSh0aGlzLmVsKSxvPW4uZ2V0
U3R5bGUobCksbT1nLmV4ZWMobCl8fFtdO2lmKG8hPT0iYXV0byImJiFpLnRlc3Qobykpe3JldHVy
biBwYXJzZUZsb2F0KG8pfXJldHVybighIShtWzJdKXx8KG4uZ2V0U3R5bGUoInBvc2l0aW9uIik9
PSJhYnNvbHV0ZSImJiEhKG1bM10pKSk/bi5kb21bIm9mZnNldCIrbVswXS5jaGFyQXQoMCkudG9V
cHBlckNhc2UoKSttWzBdLnN1YnN0cigxKV06MH0sZ2V0RGVmYXVsdFVuaXQ6ZnVuY3Rpb24obCl7
cmV0dXJuIGQudGVzdChsKT8icHgiOiIifSxhbmltYXRlWDpmdW5jdGlvbihvLGwpe3ZhciBtPXRo
aXMsbj1mdW5jdGlvbigpe20ub25Db21wbGV0ZS5yZW1vdmVMaXN0ZW5lcihuKTtpZihFeHQuaXNG
dW5jdGlvbihvKSl7by5jYWxsKGx8fG0sbSl9fTttLm9uQ29tcGxldGUuYWRkTGlzdGVuZXIobixt
KTttLmFuaW1hdGUoKX0sc2V0UnVuQXR0cjpmdW5jdGlvbihxKXt2YXIgcz10aGlzLHQ9dGhpcy5h
dHRyaWJ1dGVzW3FdLHU9dC50byxyPXQuYnksdj10LmZyb20sdz10LnVuaXQsbT0odGhpcy5ydW5B
dHRyc1txXT17fSksbjtpZighayh1KSYmIWsocikpe3JldHVybiBmYWxzZX12YXIgbD1rKHYpP3Y6
cy5nZXRBdHRyKHEpO2lmKGsodSkpe249dX1lbHNle2lmKGsocikpe2lmKEV4dC5pc0FycmF5KGwp
KXtuPVtdO2Zvcih2YXIgbz0wLHA9bC5sZW5ndGg7bzxwO28rKyl7bltvXT1sW29dK3Jbb119fWVs
c2V7bj1sK3J9fX1FeHQuYXBwbHkobSx7c3RhcnQ6bCxlbmQ6bix1bml0Omsodyk/dzpzLmdldERl
ZmF1bHRVbml0KHEpfSl9LGluaXQ6ZnVuY3Rpb24obSxxLHAsbCl7dmFyIHM9dGhpcyxvPTAsdD1o
LkFuaW1NZ3I7RXh0LmFwcGx5KHMse2lzQW5pbWF0ZWQ6ZmFsc2Usc3RhcnRUaW1lOm51bGwsZWw6
RXh0LmdldERvbShtKSxhdHRyaWJ1dGVzOnF8fHt9LGR1cmF0aW9uOnB8fDEsbWV0aG9kOmx8fGgu
RWFzaW5nLmVhc2VOb25lLHVzZVNlYzp0cnVlLGN1ckZyYW1lOjAsdG90YWxGcmFtZXM6dC5mcHMs
cnVuQXR0cnM6e30sYW5pbWF0ZTpmdW5jdGlvbigpe3ZhciB2PXRoaXMsdz12LmR1cmF0aW9uO2lm
KHYuaXNBbmltYXRlZCl7cmV0dXJuIGZhbHNlfXYuY3VyRnJhbWU9MDt2LnRvdGFsRnJhbWVzPXYu
dXNlU2VjP01hdGguY2VpbCh0LmZwcyp3KTp3O3QucmVnaXN0ZXJFbGVtZW50KHYpfSxzdG9wOmZ1
bmN0aW9uKHYpe3ZhciB3PXRoaXM7aWYodil7dy5jdXJGcmFtZT13LnRvdGFsRnJhbWVzO3cuX29u
VHdlZW4uZmlyZSgpfXQuc3RvcCh3KX19KTt2YXIgdT1mdW5jdGlvbigpe3ZhciB3PXRoaXMsdjt3
Lm9uU3RhcnQuZmlyZSgpO3cucnVuQXR0cnM9e307Zm9yKHYgaW4gdGhpcy5hdHRyaWJ1dGVzKXt0
aGlzLnNldFJ1bkF0dHIodil9dy5pc0FuaW1hdGVkPXRydWU7dy5zdGFydFRpbWU9ZSgpO289MH07
dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdz10aGlzO3cub25Ud2Vlbi5maXJlKHtkdXJhdGlvbjplKCkt
dy5zdGFydFRpbWUsY3VyRnJhbWU6dy5jdXJGcmFtZX0pO3ZhciB4PXcucnVuQXR0cnM7Zm9yKHZh
ciB2IGluIHgpe3RoaXMuc2V0QXR0cih2LHcuZG9NZXRob2Qodix4W3ZdLnN0YXJ0LHhbdl0uZW5k
KSx4W3ZdLnVuaXQpfSsrb307dmFyIG49ZnVuY3Rpb24oKXt2YXIgdj10aGlzLHg9KGUoKS12LnN0
YXJ0VGltZSkvMTAwMCx3PXtkdXJhdGlvbjp4LGZyYW1lczpvLGZwczpvL3h9O3YuaXNBbmltYXRl
ZD1mYWxzZTtvPTA7di5vbkNvbXBsZXRlLmZpcmUodyl9O3Mub25TdGFydD1uZXcgRXh0LnV0aWwu
RXZlbnQocyk7cy5vblR3ZWVuPW5ldyBFeHQudXRpbC5FdmVudChzKTtzLm9uQ29tcGxldGU9bmV3
IEV4dC51dGlsLkV2ZW50KHMpOyhzLl9vblN0YXJ0PW5ldyBFeHQudXRpbC5FdmVudChzKSkuYWRk
TGlzdGVuZXIodSk7KHMuX29uVHdlZW49bmV3IEV4dC51dGlsLkV2ZW50KHMpKS5hZGRMaXN0ZW5l
cihyKTsocy5fb25Db21wbGV0ZT1uZXcgRXh0LnV0aWwuRXZlbnQocykpLmFkZExpc3RlbmVyKG4p
fX07RXh0LmxpYi5BbmltTWdyPW5ldyBmdW5jdGlvbigpe3ZhciBwPXRoaXMsbj1udWxsLG09W10s
bD0wO0V4dC5hcHBseShwLHtmcHM6MTAwMCxkZWxheToxLHJlZ2lzdGVyRWxlbWVudDpmdW5jdGlv
bihyKXttLnB1c2gocik7KytsO3IuX29uU3RhcnQuZmlyZSgpO3Auc3RhcnQoKX0sdW5SZWdpc3Rl
cjpmdW5jdGlvbihzLHIpe3MuX29uQ29tcGxldGUuZmlyZSgpO3I9cnx8cShzKTtpZihyIT0tMSl7
bS5zcGxpY2UociwxKX1pZigtLWw8PTApe3Auc3RvcCgpfX0sc3RhcnQ6ZnVuY3Rpb24oKXtpZihu
PT09bnVsbCl7bj1zZXRJbnRlcnZhbChwLnJ1bixwLmRlbGF5KX19LHN0b3A6ZnVuY3Rpb24odCl7
aWYoIXQpe2NsZWFySW50ZXJ2YWwobik7Zm9yKHZhciBzPTAscj1tLmxlbmd0aDtzPHI7KytzKXtp
ZihtWzBdLmlzQW5pbWF0ZWQpe3AudW5SZWdpc3RlcihtWzBdLDApfX1tPVtdO249bnVsbDtsPTB9
ZWxzZXtwLnVuUmVnaXN0ZXIodCl9fSxydW46ZnVuY3Rpb24oKXt2YXIgdSx0LHIscztmb3IodD0w
LHI9bS5sZW5ndGg7dDxyO3QrKyl7cz1tW3RdO2lmKHMmJnMuaXNBbmltYXRlZCl7dT1zLnRvdGFs
RnJhbWVzO2lmKHMuY3VyRnJhbWU8dXx8dT09PW51bGwpeysrcy5jdXJGcmFtZTtpZihzLnVzZVNl
Yyl7byhzKX1zLl9vblR3ZWVuLmZpcmUoKX1lbHNle3Auc3RvcChzKX19fX19KTt2YXIgcT1mdW5j
dGlvbih0KXt2YXIgcyxyO2ZvcihzPTAscj1tLmxlbmd0aDtzPHI7cysrKXtpZihtW3NdPT09dCl7
cmV0dXJuIHN9fXJldHVybiAtMX07dmFyIG89ZnVuY3Rpb24ocyl7dmFyIHc9cy50b3RhbEZyYW1l
cyx2PXMuY3VyRnJhbWUsdT1zLmR1cmF0aW9uLHQ9KHYqdSoxMDAwL3cpLHI9KGUoKS1zLnN0YXJ0
VGltZSkseD0wO2lmKHI8dSoxMDAwKXt4PU1hdGgucm91bmQoKHIvdC0xKSp2KX1lbHNle3g9dy0o
disxKX1pZih4PjAmJmlzRmluaXRlKHgpKXtpZihzLmN1ckZyYW1lK3g+PXcpe3g9dy0odisxKX1z
LmN1ckZyYW1lKz14fX19O2guQmV6aWVyPW5ldyBmdW5jdGlvbigpe3RoaXMuZ2V0UG9zaXRpb249
ZnVuY3Rpb24ocSxwKXt2YXIgcz1xLmxlbmd0aCxvPVtdLHI9MS1wLG0sbDtmb3IobT0wO208czsr
K20pe29bbV09W3FbbV1bMF0scVttXVsxXV19Zm9yKGw9MTtsPHM7KytsKXtmb3IobT0wO208cy1s
OysrbSl7b1ttXVswXT1yKm9bbV1bMF0rcCpvW3BhcnNlSW50KG0rMSwxMCldWzBdO29bbV1bMV09
cipvW21dWzFdK3Aqb1twYXJzZUludChtKzEsMTApXVsxXX19cmV0dXJuW29bMF1bMF0sb1swXVsx
XV19fTtoLkVhc2luZz17ZWFzZU5vbmU6ZnVuY3Rpb24obSxsLG8sbil7cmV0dXJuIG8qbS9uK2x9
LGVhc2VJbjpmdW5jdGlvbihtLGwsbyxuKXtyZXR1cm4gbyoobS89bikqbStsfSxlYXNlT3V0OmZ1
bmN0aW9uKG0sbCxvLG4pe3JldHVybiAtbyoobS89bikqKG0tMikrbH19OyhmdW5jdGlvbigpe2gu
TW90aW9uPWZ1bmN0aW9uKHEscCxyLHMpe2lmKHEpe2guTW90aW9uLnN1cGVyY2xhc3MuY29uc3Ry
dWN0b3IuY2FsbCh0aGlzLHEscCxyLHMpfX07RXh0LmV4dGVuZChoLk1vdGlvbixFeHQubGliLkFu
aW1CYXNlKTt2YXIgbz1oLk1vdGlvbi5zdXBlcmNsYXNzLG49aC5Nb3Rpb24ucHJvdG90eXBlLG09
L15wb2ludHMkL2k7RXh0LmFwcGx5KGguTW90aW9uLnByb3RvdHlwZSx7c2V0QXR0cjpmdW5jdGlv
bihwLHQscyl7dmFyIHI9dGhpcyxxPW8uc2V0QXR0cjtpZihtLnRlc3QocCkpe3M9c3x8InB4Ijtx
LmNhbGwociwibGVmdCIsdFswXSxzKTtxLmNhbGwociwidG9wIix0WzFdLHMpfWVsc2V7cS5jYWxs
KHIscCx0LHMpfX0sZ2V0QXR0cjpmdW5jdGlvbihwKXt2YXIgcj10aGlzLHE9by5nZXRBdHRyO3Jl
dHVybiBtLnRlc3QocCk/W3EuY2FsbChyLCJsZWZ0IikscS5jYWxsKHIsInRvcCIpXTpxLmNhbGwo
cixwKX0sZG9NZXRob2Q6ZnVuY3Rpb24ocCxzLHEpe3ZhciByPXRoaXM7cmV0dXJuIG0udGVzdChw
KT9oLkJlemllci5nZXRQb3NpdGlvbihyLnJ1bkF0dHJzW3BdLHIubWV0aG9kKHIuY3VyRnJhbWUs
MCwxMDAsci50b3RhbEZyYW1lcykvMTAwKTpvLmRvTWV0aG9kLmNhbGwocixwLHMscSl9LHNldFJ1
bkF0dHI6ZnVuY3Rpb24odyl7aWYobS50ZXN0KHcpKXt2YXIgeT10aGlzLHI9dGhpcy5lbCxCPXRo
aXMuYXR0cmlidXRlcy5wb2ludHMsdT1CLmNvbnRyb2x8fFtdLHo9Qi5mcm9tLEE9Qi50byx4PUIu
YnksQz1oLkRvbSxxLHQscyx2LHA7aWYodS5sZW5ndGg+MCYmIUV4dC5pc0FycmF5KHVbMF0pKXt1
PVt1XX1lbHNle31FeHQuZmx5KHIsIl9hbmltIikucG9zaXRpb24oKTtDLnNldFhZKHIsayh6KT96
OkMuZ2V0WFkocikpO3E9eS5nZXRBdHRyKCJwb2ludHMiKTtpZihrKEEpKXtzPWwuY2FsbCh5LEEs
cSk7Zm9yKHQ9MCx2PXUubGVuZ3RoO3Q8djsrK3Qpe3VbdF09bC5jYWxsKHksdVt0XSxxKX19ZWxz
ZXtpZihrKHgpKXtzPVtxWzBdK3hbMF0scVsxXSt4WzFdXTtmb3IodD0wLHY9dS5sZW5ndGg7dDx2
OysrdCl7dVt0XT1bcVswXSt1W3RdWzBdLHFbMV0rdVt0XVsxXV19fX1wPXRoaXMucnVuQXR0cnNb
d109W3FdO2lmKHUubGVuZ3RoPjApe3A9cC5jb25jYXQodSl9cFtwLmxlbmd0aF09c31lbHNle28u
c2V0UnVuQXR0ci5jYWxsKHRoaXMsdyl9fX0pO3ZhciBsPWZ1bmN0aW9uKHAscil7dmFyIHE9aC5E
b20uZ2V0WFkodGhpcy5lbCk7cmV0dXJuW3BbMF0tcVswXStyWzBdLHBbMV0tcVsxXStyWzFdXX19
KSgpfSkoKTsoZnVuY3Rpb24oKXt2YXIgZD1NYXRoLmFicyxqPU1hdGguUEksaT1NYXRoLmFzaW4s
aD1NYXRoLnBvdyxlPU1hdGguc2luLGc9RXh0LmxpYjtFeHQuYXBwbHkoZy5FYXNpbmcse2Vhc2VC
b3RoOmZ1bmN0aW9uKGwsayxuLG0pe3JldHVybigobC89bS8yKTwxKT9uLzIqbCpsK2s6LW4vMioo
KC0tbCkqKGwtMiktMSkra30sZWFzZUluU3Ryb25nOmZ1bmN0aW9uKGwsayxuLG0pe3JldHVybiBu
KihsLz1tKSpsKmwqbCtrfSxlYXNlT3V0U3Ryb25nOmZ1bmN0aW9uKGwsayxuLG0pe3JldHVybiAt
biooKGw9bC9tLTEpKmwqbCpsLTEpK2t9LGVhc2VCb3RoU3Ryb25nOmZ1bmN0aW9uKGwsayxuLG0p
e3JldHVybigobC89bS8yKTwxKT9uLzIqbCpsKmwqbCtrOi1uLzIqKChsLT0yKSpsKmwqbC0yKStr
fSxlbGFzdGljSW46ZnVuY3Rpb24obSxrLHIscSxsLG8pe2lmKG09PTB8fChtLz1xKT09MSl7cmV0
dXJuIG09PTA/azprK3J9bz1vfHwocSowLjMpO3ZhciBuO2lmKGw+PWQocikpe249by8oMipqKSpp
KHIvbCl9ZWxzZXtsPXI7bj1vLzR9cmV0dXJuIC0obCpoKDIsMTAqKG0tPTEpKSplKChtKnEtbikq
KDIqaikvbykpK2t9LGVsYXN0aWNPdXQ6ZnVuY3Rpb24obSxrLHIscSxsLG8pe2lmKG09PTB8fCht
Lz1xKT09MSl7cmV0dXJuIG09PTA/azprK3J9bz1vfHwocSowLjMpO3ZhciBuO2lmKGw+PWQocikp
e249by8oMipqKSppKHIvbCl9ZWxzZXtsPXI7bj1vLzR9cmV0dXJuIGwqaCgyLC0xMCptKSplKCht
KnEtbikqKDIqaikvbykrcitrfSxlbGFzdGljQm90aDpmdW5jdGlvbihtLGsscixxLGwsbyl7aWYo
bT09MHx8KG0vPXEvMik9PTIpe3JldHVybiBtPT0wP2s6aytyfW89b3x8KHEqKDAuMyoxLjUpKTt2
YXIgbjtpZihsPj1kKHIpKXtuPW8vKDIqaikqaShyL2wpfWVsc2V7bD1yO249by80fXJldHVybiBt
PDE/LTAuNSoobCpoKDIsMTAqKG0tPTEpKSplKChtKnEtbikqKDIqaikvbykpK2s6bCpoKDIsLTEw
KihtLT0xKSkqZSgobSpxLW4pKigyKmopL28pKjAuNStyK2t9LGJhY2tJbjpmdW5jdGlvbihsLGss
byxuLG0pe209bXx8MS43MDE1ODtyZXR1cm4gbyoobC89bikqbCooKG0rMSkqbC1tKStrfSxiYWNr
T3V0OmZ1bmN0aW9uKGwsayxvLG4sbSl7aWYoIW0pe209MS43MDE1OH1yZXR1cm4gbyooKGw9bC9u
LTEpKmwqKChtKzEpKmwrbSkrMSkra30sYmFja0JvdGg6ZnVuY3Rpb24obCxrLG8sbixtKXttPW18
fDEuNzAxNTg7cmV0dXJuKChsLz1uLzIpPDEpP28vMioobCpsKigoKG0qPSgxLjUyNSkpKzEpKmwt
bSkpK2s6by8yKigobC09MikqbCooKChtKj0oMS41MjUpKSsxKSpsK20pKzIpK2t9LGJvdW5jZUlu
OmZ1bmN0aW9uKGwsayxuLG0pe3JldHVybiBuLWcuRWFzaW5nLmJvdW5jZU91dChtLWwsMCxuLG0p
K2t9LGJvdW5jZU91dDpmdW5jdGlvbihsLGssbixtKXtpZigobC89bSk8KDEvMi43NSkpe3JldHVy
biBuKig3LjU2MjUqbCpsKStrfWVsc2V7aWYobDwoMi8yLjc1KSl7cmV0dXJuIG4qKDcuNTYyNSoo
bC09KDEuNS8yLjc1KSkqbCswLjc1KStrfWVsc2V7aWYobDwoMi41LzIuNzUpKXtyZXR1cm4gbioo
Ny41NjI1KihsLT0oMi4yNS8yLjc1KSkqbCswLjkzNzUpK2t9fX1yZXR1cm4gbiooNy41NjI1Kihs
LT0oMi42MjUvMi43NSkpKmwrMC45ODQzNzUpK2t9LGJvdW5jZUJvdGg6ZnVuY3Rpb24obCxrLG4s
bSl7cmV0dXJuKGw8bS8yKT9nLkVhc2luZy5ib3VuY2VJbihsKjIsMCxuLG0pKjAuNStrOmcuRWFz
aW5nLmJvdW5jZU91dChsKjItbSwwLG4sbSkqMC41K24qMC41K2t9fSl9KSgpOyhmdW5jdGlvbigp
e3ZhciBpPUV4dC5saWI7aS5BbmltLmNvbG9yPWZ1bmN0aW9uKHEsbyxyLHMsbixwKXtyZXR1cm4g
aS5BbmltLnJ1bihxLG8scixzLG4scCxpLkNvbG9yQW5pbSl9O2kuQ29sb3JBbmltPWZ1bmN0aW9u
KG8sbixwLHEpe2kuQ29sb3JBbmltLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLG8s
bixwLHEpfTtFeHQuZXh0ZW5kKGkuQ29sb3JBbmltLGkuQW5pbUJhc2UpO3ZhciBrPWkuQ29sb3JB
bmltLnN1cGVyY2xhc3Msaj0vY29sb3IkL2ksZz0vXnRyYW5zcGFyZW50fHJnYmFcKDAsIDAsIDAs
IDBcKSQvLG09L15yZ2JcKChbMC05XSspXHMqLFxzKihbMC05XSspXHMqLFxzKihbMC05XSspXCkk
L2ksZD0vXiM/KFswLTlBLUZdezJ9KShbMC05QS1GXXsyfSkoWzAtOUEtRl17Mn0pJC9pLGU9L14j
PyhbMC05QS1GXXsxfSkoWzAtOUEtRl17MX0pKFswLTlBLUZdezF9KSQvaSxoPWZ1bmN0aW9uKG4p
e3JldHVybiB0eXBlb2YgbiE9PSJ1bmRlZmluZWQifTtmdW5jdGlvbiBsKG8pe3ZhciBxPXBhcnNl
SW50LHAsbj1udWxsLHI7aWYoby5sZW5ndGg9PTMpe3JldHVybiBvfUV4dC5lYWNoKFtkLG0sZV0s
ZnVuY3Rpb24odCxzKXtwPShzJTI9PTApPzE2OjEwO3I9dC5leGVjKG8pO2lmKHImJnIubGVuZ3Ro
PT00KXtuPVtxKHJbMV0scCkscShyWzJdLHApLHEoclszXSxwKV07cmV0dXJuIGZhbHNlfX0pO3Jl
dHVybiBufUV4dC5hcHBseShpLkNvbG9yQW5pbS5wcm90b3R5cGUse2dldEF0dHI6ZnVuY3Rpb24o
bil7dmFyIHA9dGhpcyxvPXAuZWwscTtpZihqLnRlc3Qobikpe3doaWxlKG8mJmcudGVzdChxPUV4
dC5mbHkobykuZ2V0U3R5bGUobikpKXtvPW8ucGFyZW50Tm9kZTtxPSJmZmYifX1lbHNle3E9ay5n
ZXRBdHRyLmNhbGwocCxuKX1yZXR1cm4gcX0sZG9NZXRob2Q6ZnVuY3Rpb24odCxuLHApe3ZhciB1
PXRoaXMsbyxyPU1hdGguZmxvb3IscSxzLHc7aWYoai50ZXN0KHQpKXtvPVtdO2ZvcihxPTAscz1u
Lmxlbmd0aDtxPHM7cSsrKXt3PW5bcV07b1txXT1rLmRvTWV0aG9kLmNhbGwodSx0LHcscFtxXSl9
bz0icmdiKCIrcihvWzBdKSsiLCIrcihvWzFdKSsiLCIrcihvWzJdKSsiKSJ9ZWxzZXtvPWsuZG9N
ZXRob2QuY2FsbCh1LHQsbixwKX1yZXR1cm4gb30sc2V0UnVuQXR0cjpmdW5jdGlvbihzKXt2YXIg
dT10aGlzLHY9dS5hdHRyaWJ1dGVzW3NdLHc9di50byx0PXYuYnksbztrLnNldFJ1bkF0dHIuY2Fs
bCh1LHMpO289dS5ydW5BdHRyc1tzXTtpZihqLnRlc3Qocykpe3ZhciBuPWwoby5zdGFydCkscD1s
KG8uZW5kKTtpZighaCh3KSYmaCh0KSl7cD1sKHQpO2Zvcih2YXIgcT0wLHI9bi5sZW5ndGg7cTxy
O3ErKyl7cFtxXT1uW3FdK3BbcV19fW8uc3RhcnQ9bjtvLmVuZD1wfX19KX0pKCk7KGZ1bmN0aW9u
KCl7dmFyIGQ9RXh0LmxpYjtkLkFuaW0uc2Nyb2xsPWZ1bmN0aW9uKGssaSxsLG0saCxqKXtyZXR1
cm4gZC5BbmltLnJ1bihrLGksbCxtLGgsaixkLlNjcm9sbCl9O2QuU2Nyb2xsPWZ1bmN0aW9uKGks
aCxqLGspe2lmKGkpe2QuU2Nyb2xsLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGks
aCxqLGspfX07RXh0LmV4dGVuZChkLlNjcm9sbCxkLkNvbG9yQW5pbSk7dmFyIGc9ZC5TY3JvbGwu
c3VwZXJjbGFzcyxlPSJzY3JvbGwiO0V4dC5hcHBseShkLlNjcm9sbC5wcm90b3R5cGUse2RvTWV0
aG9kOmZ1bmN0aW9uKGgsbixpKXt2YXIgbCxrPXRoaXMsbT1rLmN1ckZyYW1lLGo9ay50b3RhbEZy
YW1lcztpZihoPT1lKXtsPVtrLm1ldGhvZChtLG5bMF0saVswXS1uWzBdLGopLGsubWV0aG9kKG0s
blsxXSxpWzFdLW5bMV0saildfWVsc2V7bD1nLmRvTWV0aG9kLmNhbGwoayxoLG4saSl9cmV0dXJu
IGx9LGdldEF0dHI6ZnVuY3Rpb24oaCl7dmFyIGk9dGhpcztpZihoPT1lKXtyZXR1cm5baS5lbC5z
Y3JvbGxMZWZ0LGkuZWwuc2Nyb2xsVG9wXX1lbHNle3JldHVybiBnLmdldEF0dHIuY2FsbChpLGgp
fX0sc2V0QXR0cjpmdW5jdGlvbihoLGssail7dmFyIGk9dGhpcztpZihoPT1lKXtpLmVsLnNjcm9s
bExlZnQ9a1swXTtpLmVsLnNjcm9sbFRvcD1rWzFdfWVsc2V7Zy5zZXRBdHRyLmNhbGwoaSxoLGss
ail9fX0pfSkoKTtpZihFeHQuaXNJRSl7ZnVuY3Rpb24gYSgpe3ZhciBkPUZ1bmN0aW9uLnByb3Rv
dHlwZTtkZWxldGUgZC5jcmVhdGVTZXF1ZW5jZTtkZWxldGUgZC5kZWZlcjtkZWxldGUgZC5jcmVh
dGVEZWxlZ2F0ZTtkZWxldGUgZC5jcmVhdGVDYWxsYmFjaztkZWxldGUgZC5jcmVhdGVJbnRlcmNl
cHRvcjt3aW5kb3cuZGV0YWNoRXZlbnQoIm9udW5sb2FkIixhKX13aW5kb3cuYXR0YWNoRXZlbnQo
Im9udW5sb2FkIixhKX19KSgpOyhmdW5jdGlvbigpe3ZhciBpPUV4dC51dGlsLGw9RXh0LnRvQXJy
YXksaz1FeHQuZWFjaCxhPUV4dC5pc09iamVjdCxoPXRydWUsaj1mYWxzZTtpLk9ic2VydmFibGU9
ZnVuY3Rpb24oKXt2YXIgbT10aGlzLG49bS5ldmVudHM7aWYobS5saXN0ZW5lcnMpe20ub24obS5s
aXN0ZW5lcnMpO2RlbGV0ZSBtLmxpc3RlbmVyc31tLmV2ZW50cz1ufHx7fX07aS5PYnNlcnZhYmxl
LnByb3RvdHlwZT17ZmlsdGVyT3B0UmU6L14oPzpzY29wZXxkZWxheXxidWZmZXJ8c2luZ2xlKSQv
LGZpcmVFdmVudDpmdW5jdGlvbigpe3ZhciBtPWwoYXJndW1lbnRzKSxvPW1bMF0udG9Mb3dlckNh
c2UoKSxwPXRoaXMsbj1oLHM9cC5ldmVudHNbb10scix0O2lmKHAuZXZlbnRzU3VzcGVuZGVkPT09
aCl7aWYocj1wLmV2ZW50UXVldWUpe3IucHVzaChtKX19ZWxzZXtpZihhKHMpJiZzLmJ1YmJsZSl7
aWYocy5maXJlLmFwcGx5KHMsbS5zbGljZSgxKSk9PT1qKXtyZXR1cm4gan10PXAuZ2V0QnViYmxl
VGFyZ2V0JiZwLmdldEJ1YmJsZVRhcmdldCgpO2lmKHQmJnQuZW5hYmxlQnViYmxlKXtpZighdC5l
dmVudHNbb118fCFFeHQuaXNPYmplY3QodC5ldmVudHNbb10pfHwhdC5ldmVudHNbb10uYnViYmxl
KXt0LmVuYWJsZUJ1YmJsZShvKX1yZXR1cm4gdC5maXJlRXZlbnQuYXBwbHkodCxtKX19ZWxzZXtp
ZihhKHMpKXttLnNoaWZ0KCk7bj1zLmZpcmUuYXBwbHkocyxtKX19fXJldHVybiBufSxhZGRMaXN0
ZW5lcjpmdW5jdGlvbihwLHMsdSxuKXt2YXIgcj10aGlzLHEsdix0LG07aWYoYShwKSl7bj1wO2Zv
cihxIGluIG4pe3Y9bltxXTtpZighci5maWx0ZXJPcHRSZS50ZXN0KHEpKXtyLmFkZExpc3RlbmVy
KHEsdi5mbnx8dix2LnNjb3BlfHxuLnNjb3BlLHYuZm4/djpuKX19fWVsc2V7cD1wLnRvTG93ZXJD
YXNlKCk7bT1yLmV2ZW50c1twXXx8aDtpZihFeHQuaXNCb29sZWFuKG0pKXtyLmV2ZW50c1twXT1t
PW5ldyBpLkV2ZW50KHIscCl9bS5hZGRMaXN0ZW5lcihzLHUsYShuKT9uOnt9KX19LHJlbW92ZUxp
c3RlbmVyOmZ1bmN0aW9uKG0sbyxuKXt2YXIgcD10aGlzLmV2ZW50c1ttLnRvTG93ZXJDYXNlKCld
O2lmKGEocCkpe3AucmVtb3ZlTGlzdGVuZXIobyxuKX19LHB1cmdlTGlzdGVuZXJzOmZ1bmN0aW9u
KCl7dmFyIG89dGhpcy5ldmVudHMsbSxuO2ZvcihuIGluIG8pe209b1tuXTtpZihhKG0pKXttLmNs
ZWFyTGlzdGVuZXJzKCl9fX0sYWRkRXZlbnRzOmZ1bmN0aW9uKHEpe3ZhciBwPXRoaXM7cC5ldmVu
dHM9cC5ldmVudHN8fHt9O2lmKEV4dC5pc1N0cmluZyhxKSl7dmFyIG09YXJndW1lbnRzLG49bS5s
ZW5ndGg7d2hpbGUobi0tKXtwLmV2ZW50c1ttW25dXT1wLmV2ZW50c1ttW25dXXx8aH19ZWxzZXtF
eHQuYXBwbHlJZihwLmV2ZW50cyxxKX19LGhhc0xpc3RlbmVyOmZ1bmN0aW9uKG0pe3ZhciBuPXRo
aXMuZXZlbnRzW21dO3JldHVybiBhKG4pJiZuLmxpc3RlbmVycy5sZW5ndGg+MH0sc3VzcGVuZEV2
ZW50czpmdW5jdGlvbihtKXt0aGlzLmV2ZW50c1N1c3BlbmRlZD1oO2lmKG0mJiF0aGlzLmV2ZW50
UXVldWUpe3RoaXMuZXZlbnRRdWV1ZT1bXX19LHJlc3VtZUV2ZW50czpmdW5jdGlvbigpe3ZhciBt
PXRoaXMsbj1tLmV2ZW50UXVldWV8fFtdO20uZXZlbnRzU3VzcGVuZGVkPWo7ZGVsZXRlIG0uZXZl
bnRRdWV1ZTtrKG4sZnVuY3Rpb24obyl7bS5maXJlRXZlbnQuYXBwbHkobSxvKX0pfX07dmFyIGU9
aS5PYnNlcnZhYmxlLnByb3RvdHlwZTtlLm9uPWUuYWRkTGlzdGVuZXI7ZS51bj1lLnJlbW92ZUxp
c3RlbmVyO2kuT2JzZXJ2YWJsZS5yZWxlYXNlQ2FwdHVyZT1mdW5jdGlvbihtKXttLmZpcmVFdmVu
dD1lLmZpcmVFdmVudH07ZnVuY3Rpb24gZyhuLHAsbSl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYocC50
YXJnZXQ9PWFyZ3VtZW50c1swXSl7bi5hcHBseShtLGwoYXJndW1lbnRzKSl9fX1mdW5jdGlvbiBj
KHAscSxtLG4pe20udGFzaz1uZXcgaS5EZWxheWVkVGFzaygpO3JldHVybiBmdW5jdGlvbigpe20u
dGFzay5kZWxheShxLmJ1ZmZlcixwLG4sbChhcmd1bWVudHMpKX19ZnVuY3Rpb24gZChvLHAsbixt
KXtyZXR1cm4gZnVuY3Rpb24oKXtwLnJlbW92ZUxpc3RlbmVyKG4sbSk7cmV0dXJuIG8uYXBwbHko
bSxhcmd1bWVudHMpfX1mdW5jdGlvbiBiKHAscSxtLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBv
PW5ldyBpLkRlbGF5ZWRUYXNrKCk7aWYoIW0udGFza3Mpe20udGFza3M9W119bS50YXNrcy5wdXNo
KG8pO28uZGVsYXkocS5kZWxheXx8MTAscCxuLGwoYXJndW1lbnRzKSl9fWkuRXZlbnQ9ZnVuY3Rp
b24obixtKXt0aGlzLm5hbWU9bTt0aGlzLm9iaj1uO3RoaXMubGlzdGVuZXJzPVtdfTtpLkV2ZW50
LnByb3RvdHlwZT17YWRkTGlzdGVuZXI6ZnVuY3Rpb24ocCxvLG4pe3ZhciBxPXRoaXMsbTtvPW98
fHEub2JqO2lmKCFxLmlzTGlzdGVuaW5nKHAsbykpe209cS5jcmVhdGVMaXN0ZW5lcihwLG8sbik7
aWYocS5maXJpbmcpe3EubGlzdGVuZXJzPXEubGlzdGVuZXJzLnNsaWNlKDApfXEubGlzdGVuZXJz
LnB1c2gobSl9fSxjcmVhdGVMaXN0ZW5lcjpmdW5jdGlvbihxLHAscil7cj1yfHx7fSxwPXB8fHRo
aXMub2JqO3ZhciBtPXtmbjpxLHNjb3BlOnAsb3B0aW9uczpyfSxuPXE7aWYoci50YXJnZXQpe249
ZyhuLHIscCl9aWYoci5kZWxheSl7bj1iKG4scixtLHApfWlmKHIuc2luZ2xlKXtuPWQobix0aGlz
LHEscCl9aWYoci5idWZmZXIpe249YyhuLHIsbSxwKX1tLmZpcmVGbj1uO3JldHVybiBtfSxmaW5k
TGlzdGVuZXI6ZnVuY3Rpb24ocSxwKXt2YXIgcj10aGlzLmxpc3RlbmVycyxuPXIubGVuZ3RoLG0s
bzt3aGlsZShuLS0pe209cltuXTtpZihtKXtvPW0uc2NvcGU7aWYobS5mbj09cSYmKG89PXB8fG89
PXRoaXMub2JqKSl7cmV0dXJuIG59fX1yZXR1cm4gLTF9LGlzTGlzdGVuaW5nOmZ1bmN0aW9uKG4s
bSl7cmV0dXJuIHRoaXMuZmluZExpc3RlbmVyKG4sbSkhPS0xfSxyZW1vdmVMaXN0ZW5lcjpmdW5j
dGlvbihyLHEpe3ZhciBwLG0sbixzPXRoaXMsbz1qO2lmKChwPXMuZmluZExpc3RlbmVyKHIscSkp
IT0tMSl7aWYocy5maXJpbmcpe3MubGlzdGVuZXJzPXMubGlzdGVuZXJzLnNsaWNlKDApfW09cy5s
aXN0ZW5lcnNbcF07aWYobS50YXNrKXttLnRhc2suY2FuY2VsKCk7ZGVsZXRlIG0udGFza31uPW0u
dGFza3MmJm0udGFza3MubGVuZ3RoO2lmKG4pe3doaWxlKG4tLSl7bS50YXNrc1tuXS5jYW5jZWwo
KX1kZWxldGUgbS50YXNrc31zLmxpc3RlbmVycy5zcGxpY2UocCwxKTtvPWh9cmV0dXJuIG99LGNs
ZWFyTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dmFyIG89dGhpcyxtPW8ubGlzdGVuZXJzLG49bS5sZW5n
dGg7d2hpbGUobi0tKXtvLnJlbW92ZUxpc3RlbmVyKG1bbl0uZm4sbVtuXS5zY29wZSl9fSxmaXJl
OmZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxvPWwoYXJndW1lbnRzKSxxPXIubGlzdGVuZXJzLG09cS5s
ZW5ndGgscD0wLG47aWYobT4wKXtyLmZpcmluZz1oO2Zvcig7cDxtO3ArKyl7bj1xW3BdO2lmKG4m
Jm4uZmlyZUZuLmFwcGx5KG4uc2NvcGV8fHIub2JqfHx3aW5kb3csbyk9PT1qKXtyZXR1cm4oci5m
aXJpbmc9ail9fX1yLmZpcmluZz1qO3JldHVybiBofX19KSgpO0V4dC5Eb21IZWxwZXI9ZnVuY3Rp
b24oKXt2YXIgcz1udWxsLGo9L14oPzpicnxmcmFtZXxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHJh
bmdlfHNwYWNlcnx3YnJ8YXJlYXxwYXJhbXxjb2wpJC9pLGw9L150YWJsZXx0Ym9keXx0cnx0ZCQv
aSxwLG09ImFmdGVyYmVnaW4iLG49ImFmdGVyZW5kIixjPSJiZWZvcmViZWdpbiIsbz0iYmVmb3Jl
ZW5kIixhPSI8dGFibGU+IixoPSI8L3RhYmxlPiIsYj1hKyI8dGJvZHk+IixpPSI8L3Rib2R5PiIr
aCxrPWIrIjx0cj4iLHI9IjwvdHI+IitpO2Z1bmN0aW9uIGcodyx5LHgseix2LHQpe3ZhciB1PXAu
aW5zZXJ0SHRtbCh6LEV4dC5nZXREb20odykscSh5KSk7cmV0dXJuIHg/RXh0LmdldCh1LHRydWUp
OnV9ZnVuY3Rpb24gcSh6KXt2YXIgdj0iIix1LHkseCx0LEE7aWYoRXh0LmlzU3RyaW5nKHopKXt2
PXp9ZWxzZXtpZihFeHQuaXNBcnJheSh6KSl7Zm9yKHZhciB3PTA7dzx6Lmxlbmd0aDt3Kyspe2lm
KHpbd10pe3YrPXEoelt3XSl9fX1lbHNle3YrPSI8Iisoei50YWc9ei50YWd8fCJkaXYiKTtFeHQu
aXRlcmF0ZSh6LGZ1bmN0aW9uKEIsQyl7aWYoIS90YWd8Y2hpbGRyZW58Y258aHRtbCQvaS50ZXN0
KEIpKXtpZihFeHQuaXNPYmplY3QoQykpe3YrPSIgIitCKyc9Iic7RXh0Lml0ZXJhdGUoQyxmdW5j
dGlvbihFLEQpe3YrPUUrIjoiK0QrIjsifSk7dis9JyInfWVsc2V7dis9IiAiKyh7Y2xzOiJjbGFz
cyIsaHRtbEZvcjoiZm9yIn1bQl18fEIpKyc9IicrQysnIid9fX0pO2lmKGoudGVzdCh6LnRhZykp
e3YrPSIvPiJ9ZWxzZXt2Kz0iPiI7aWYoKEE9ei5jaGlsZHJlbnx8ei5jbikpe3YrPXEoQSl9ZWxz
ZXtpZih6Lmh0bWwpe3YrPXouaHRtbH19dis9IjwvIit6LnRhZysiPiJ9fX1yZXR1cm4gdn1mdW5j
dGlvbiBlKEEseCx3LHkpe3MuaW5uZXJIVE1MPVt4LHcseV0uam9pbigiIik7dmFyIHQ9LTEsdj1z
LHU7d2hpbGUoKyt0PEEpe3Y9di5maXJzdENoaWxkfWlmKHU9di5uZXh0U2libGluZyl7dmFyIHo9
ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3doaWxlKHYpe3U9di5uZXh0U2libGlu
Zzt6LmFwcGVuZENoaWxkKHYpO3Y9dX12PXp9cmV0dXJuIHZ9ZnVuY3Rpb24gZCh0LHUsdyx2KXt2
YXIgeCx5O3M9c3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYodD09InRkIiYmKHU9
PW18fHU9PW8pfHwhL3RkfHRyfHRib2R5L2kudGVzdCh0KSYmKHU9PWN8fHU9PW4pKXtyZXR1cm59
eT11PT1jP3c6dT09bj93Lm5leHRTaWJsaW5nOnU9PW0/dy5maXJzdENoaWxkOm51bGw7aWYodT09
Y3x8dT09bil7dz13LnBhcmVudE5vZGV9aWYodD09InRkInx8KHQ9PSJ0ciImJih1PT1vfHx1PT1t
KSkpe3g9ZSg0LGssdixyKX1lbHNle2lmKCh0PT0idGJvZHkiJiYodT09b3x8dT09bSkpfHwodD09
InRyIiYmKHU9PWN8fHU9PW4pKSl7eD1lKDMsYix2LGkpfWVsc2V7eD1lKDIsYSx2LGgpfX13Lmlu
c2VydEJlZm9yZSh4LHkpO3JldHVybiB4fXA9e21hcmt1cDpmdW5jdGlvbih0KXtyZXR1cm4gcSh0
KX0sYXBwbHlTdHlsZXM6ZnVuY3Rpb24odyx4KXtpZih4KXt2YXIgdT0wLHQsdjt3PUV4dC5mbHko
dyk7aWYoRXh0LmlzRnVuY3Rpb24oeCkpe3g9eC5jYWxsKCl9aWYoRXh0LmlzU3RyaW5nKHgpKXt4
PXgudHJpbSgpLnNwbGl0KC9ccyooPzo6fDspXHMqLyk7Zm9yKHQ9eC5sZW5ndGg7dTx0Oyl7dy5z
ZXRTdHlsZSh4W3UrK10seFt1KytdKX19ZWxzZXtpZihFeHQuaXNPYmplY3QoeCkpe3cuc2V0U3R5
bGUoeCl9fX19LGluc2VydEh0bWw6ZnVuY3Rpb24oeSx0LHope3ZhciB4PXt9LHYsQixBLEMsdyx1
O3k9eS50b0xvd2VyQ2FzZSgpO3hbY109WyJCZWZvcmVCZWdpbiIsInByZXZpb3VzU2libGluZyJd
O3hbbl09WyJBZnRlckVuZCIsIm5leHRTaWJsaW5nIl07aWYodC5pbnNlcnRBZGphY2VudEhUTUwp
e2lmKGwudGVzdCh0LnRhZ05hbWUpJiYodT1kKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLHksdCx6
KSkpe3JldHVybiB1fXhbbV09WyJBZnRlckJlZ2luIiwiZmlyc3RDaGlsZCJdO3hbb109WyJCZWZv
cmVFbmQiLCJsYXN0Q2hpbGQiXTtpZigodj14W3ldKSl7dC5pbnNlcnRBZGphY2VudEhUTUwodlsw
XSx6KTtyZXR1cm4gdFt2WzFdXX19ZWxzZXtBPXQub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgp
O0I9InNldFN0YXJ0IisoL2VuZC9pLnRlc3QoeSk/IkFmdGVyIjoiQmVmb3JlIik7aWYoeFt5XSl7
QVtCXSh0KTtDPUEuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHopO3QucGFyZW50Tm9kZS5pbnNl
cnRCZWZvcmUoQyx5PT1jP3Q6dC5uZXh0U2libGluZyk7cmV0dXJuIHRbKHk9PWM/InByZXZpb3Vz
IjoibmV4dCIpKyJTaWJsaW5nIl19ZWxzZXt3PSh5PT1tPyJmaXJzdCI6Imxhc3QiKSsiQ2hpbGQi
O2lmKHQuZmlyc3RDaGlsZCl7QVtCXSh0W3ddKTtDPUEuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KHopO2lmKHk9PW0pe3QuaW5zZXJ0QmVmb3JlKEMsdC5maXJzdENoaWxkKX1lbHNle3QuYXBwZW5k
Q2hpbGQoQyl9fWVsc2V7dC5pbm5lckhUTUw9en1yZXR1cm4gdFt3XX19dGhyb3cnSWxsZWdhbCBp
bnNlcnRpb24gcG9pbnQgLT4gIicreSsnIid9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LHYsdSl7
cmV0dXJuIGcodCx2LHUsYyl9LGluc2VydEFmdGVyOmZ1bmN0aW9uKHQsdix1KXtyZXR1cm4gZyh0
LHYsdSxuLCJuZXh0U2libGluZyIpfSxpbnNlcnRGaXJzdDpmdW5jdGlvbih0LHYsdSl7cmV0dXJu
IGcodCx2LHUsbSwiZmlyc3RDaGlsZCIpfSxhcHBlbmQ6ZnVuY3Rpb24odCx2LHUpe3JldHVybiBn
KHQsdix1LG8sIiIsdHJ1ZSl9LG92ZXJ3cml0ZTpmdW5jdGlvbih0LHYsdSl7dD1FeHQuZ2V0RG9t
KHQpO3QuaW5uZXJIVE1MPXEodik7cmV0dXJuIHU/RXh0LmdldCh0LmZpcnN0Q2hpbGQpOnQuZmly
c3RDaGlsZH0sY3JlYXRlSHRtbDpxfTtyZXR1cm4gcH0oKTtFeHQuVGVtcGxhdGU9ZnVuY3Rpb24o
ZCl7dmFyIGU9dGhpcyxiPWFyZ3VtZW50cyxjPVtdO2lmKEV4dC5pc0FycmF5KGQpKXtkPWQuam9p
bigiIil9ZWxzZXtpZihiLmxlbmd0aD4xKXtFeHQuZWFjaChiLGZ1bmN0aW9uKGEpe2lmKEV4dC5p
c09iamVjdChhKSl7RXh0LmFwcGx5KGUsYSl9ZWxzZXtjLnB1c2goYSl9fSk7ZD1jLmpvaW4oIiIp
fX1lLmh0bWw9ZDtpZihlLmNvbXBpbGVkKXtlLmNvbXBpbGUoKX19O0V4dC5UZW1wbGF0ZS5wcm90
b3R5cGU9e3JlOi9ceyhbXHctXSspXH0vZyxhcHBseVRlbXBsYXRlOmZ1bmN0aW9uKGEpe3ZhciBi
PXRoaXM7cmV0dXJuIGIuY29tcGlsZWQ/Yi5jb21waWxlZChhKTpiLmh0bWwucmVwbGFjZShiLnJl
LGZ1bmN0aW9uKGMsZCl7cmV0dXJuIGFbZF0hPT11bmRlZmluZWQ/YVtkXToiIn0pfSxzZXQ6ZnVu
Y3Rpb24oYSxjKXt2YXIgYj10aGlzO2IuaHRtbD1hO2IuY29tcGlsZWQ9bnVsbDtyZXR1cm4gYz9i
LmNvbXBpbGUoKTpifSxjb21waWxlOmZ1bmN0aW9uKCl7dmFyIG1lPXRoaXMsc2VwPUV4dC5pc0dl
Y2tvPyIrIjoiLCI7ZnVuY3Rpb24gZm4obSxuYW1lKXtuYW1lPSJ2YWx1ZXNbJyIrbmFtZSsiJ10i
O3JldHVybiInIitzZXArIigiK25hbWUrIiA9PSB1bmRlZmluZWQgPyAnJyA6ICIrbmFtZSsiKSIr
c2VwKyInIn1ldmFsKCJ0aGlzLmNvbXBpbGVkID0gZnVuY3Rpb24odmFsdWVzKXsgcmV0dXJuICIr
KEV4dC5pc0dlY2tvPyInIjoiWyciKSttZS5odG1sLnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBs
YWNlKC8oXHJcbnxcbikvZywiXFxuIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKHRoaXMu
cmUsZm4pKyhFeHQuaXNHZWNrbz8iJzt9OyI6IiddLmpvaW4oJycpO307IikpO3JldHVybiBtZX0s
aW5zZXJ0Rmlyc3Q6ZnVuY3Rpb24oYixhLGMpe3JldHVybiB0aGlzLmRvSW5zZXJ0KCJhZnRlckJl
Z2luIixiLGEsYyl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihiLGEsYyl7cmV0dXJuIHRoaXMuZG9J
bnNlcnQoImJlZm9yZUJlZ2luIixiLGEsYyl9LGluc2VydEFmdGVyOmZ1bmN0aW9uKGIsYSxjKXty
ZXR1cm4gdGhpcy5kb0luc2VydCgiYWZ0ZXJFbmQiLGIsYSxjKX0sYXBwZW5kOmZ1bmN0aW9uKGIs
YSxjKXtyZXR1cm4gdGhpcy5kb0luc2VydCgiYmVmb3JlRW5kIixiLGEsYyl9LGRvSW5zZXJ0OmZ1
bmN0aW9uKGMsZSxiLGEpe2U9RXh0LmdldERvbShlKTt2YXIgZD1FeHQuRG9tSGVscGVyLmluc2Vy
dEh0bWwoYyxlLHRoaXMuYXBwbHlUZW1wbGF0ZShiKSk7cmV0dXJuIGE/RXh0LmdldChkLHRydWUp
OmR9LG92ZXJ3cml0ZTpmdW5jdGlvbihiLGEsYyl7Yj1FeHQuZ2V0RG9tKGIpO2IuaW5uZXJIVE1M
PXRoaXMuYXBwbHlUZW1wbGF0ZShhKTtyZXR1cm4gYz9FeHQuZ2V0KGIuZmlyc3RDaGlsZCx0cnVl
KTpiLmZpcnN0Q2hpbGR9fTtFeHQuVGVtcGxhdGUucHJvdG90eXBlLmFwcGx5PUV4dC5UZW1wbGF0
ZS5wcm90b3R5cGUuYXBwbHlUZW1wbGF0ZTtFeHQuVGVtcGxhdGUuZnJvbT1mdW5jdGlvbihiLGEp
e2I9RXh0LmdldERvbShiKTtyZXR1cm4gbmV3IEV4dC5UZW1wbGF0ZShiLnZhbHVlfHxiLmlubmVy
SFRNTCxhfHwiIil9O0V4dC5Eb21RdWVyeT1mdW5jdGlvbigpe3ZhciBjYWNoZT17fSxzaW1wbGVD
YWNoZT17fSx2YWx1ZUNhY2hlPXt9LG5vblNwYWNlPS9cUy8sdHJpbVJlPS9eXHMrfFxzKyQvZyx0
cGxSZT0vXHsoXGQrKVx9L2csbW9kZVJlPS9eKFxzP1tcLz4rfl1ccz98XHN8JCkvLHRhZ1Rva2Vu
UmU9L14oIyk/KFtcdy1cKl0rKS8sbnRoUmU9LyhcZCopblwrPyhcZCopLyxudGhSZTI9L1xELyxp
c0lFPXdpbmRvdy5BY3RpdmVYT2JqZWN0P3RydWU6ZmFsc2Usa2V5PTMwODAzO2V2YWwoInZhciBi
YXRjaCA9IDMwODAzOyIpO2Z1bmN0aW9uIGNoaWxkKHAsaW5kZXgpe3ZhciBpPTAsbj1wLmZpcnN0
Q2hpbGQ7d2hpbGUobil7aWYobi5ub2RlVHlwZT09MSl7aWYoKytpPT1pbmRleCl7cmV0dXJuIG59
fW49bi5uZXh0U2libGluZ31yZXR1cm4gbnVsbH1mdW5jdGlvbiBuZXh0KG4pe3doaWxlKChuPW4u
bmV4dFNpYmxpbmcpJiZuLm5vZGVUeXBlIT0xKXt9cmV0dXJuIG59ZnVuY3Rpb24gcHJldihuKXt3
aGlsZSgobj1uLnByZXZpb3VzU2libGluZykmJm4ubm9kZVR5cGUhPTEpe31yZXR1cm4gbn1mdW5j
dGlvbiBjaGlsZHJlbihkKXt2YXIgbj1kLmZpcnN0Q2hpbGQsbmk9LTEsbng7d2hpbGUobil7bng9
bi5uZXh0U2libGluZztpZihuLm5vZGVUeXBlPT0zJiYhbm9uU3BhY2UudGVzdChuLm5vZGVWYWx1
ZSkpe2QucmVtb3ZlQ2hpbGQobil9ZWxzZXtuLm5vZGVJbmRleD0rK25pfW49bnh9cmV0dXJuIHRo
aXN9ZnVuY3Rpb24gYnlDbGFzc05hbWUoYyxhLHYpe2lmKCF2KXtyZXR1cm4gY312YXIgcj1bXSxy
aT0tMSxjbjtmb3IodmFyIGk9MCxjaTtjaT1jW2ldO2krKyl7aWYoKCIgIitjaS5jbGFzc05hbWUr
IiAiKS5pbmRleE9mKHYpIT0tMSl7clsrK3JpXT1jaX19cmV0dXJuIHJ9ZnVuY3Rpb24gYXR0clZh
bHVlKG4sYXR0cil7aWYoIW4udGFnTmFtZSYmdHlwZW9mIG4ubGVuZ3RoIT0idW5kZWZpbmVkIil7
bj1uWzBdfWlmKCFuKXtyZXR1cm4gbnVsbH1pZihhdHRyPT0iZm9yIil7cmV0dXJuIG4uaHRtbEZv
cn1pZihhdHRyPT0iY2xhc3MifHxhdHRyPT0iY2xhc3NOYW1lIil7cmV0dXJuIG4uY2xhc3NOYW1l
fXJldHVybiBuLmdldEF0dHJpYnV0ZShhdHRyKXx8blthdHRyXX1mdW5jdGlvbiBnZXROb2Rlcyhu
cyxtb2RlLHRhZ05hbWUpe3ZhciByZXN1bHQ9W10scmk9LTEsY3M7aWYoIW5zKXtyZXR1cm4gcmVz
dWx0fXRhZ05hbWU9dGFnTmFtZXx8IioiO2lmKHR5cGVvZiBucy5nZXRFbGVtZW50c0J5VGFnTmFt
ZSE9InVuZGVmaW5lZCIpe25zPVtuc119aWYoIW1vZGUpe2Zvcih2YXIgaT0wLG5pO25pPW5zW2ld
O2krKyl7Y3M9bmkuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSk7Zm9yKHZhciBqPTAsY2k7
Y2k9Y3Nbal07aisrKXtyZXN1bHRbKytyaV09Y2l9fX1lbHNle2lmKG1vZGU9PSIvInx8bW9kZT09
Ij4iKXt2YXIgdXRhZz10YWdOYW1lLnRvVXBwZXJDYXNlKCk7Zm9yKHZhciBpPTAsbmksY247bmk9
bnNbaV07aSsrKXtjbj1uaS5jaGlsZE5vZGVzO2Zvcih2YXIgaj0wLGNqO2NqPWNuW2pdO2orKyl7
aWYoY2oubm9kZU5hbWU9PXV0YWd8fGNqLm5vZGVOYW1lPT10YWdOYW1lfHx0YWdOYW1lPT0iKiIp
e3Jlc3VsdFsrK3JpXT1jan19fX1lbHNle2lmKG1vZGU9PSIrIil7dmFyIHV0YWc9dGFnTmFtZS50
b1VwcGVyQ2FzZSgpO2Zvcih2YXIgaT0wLG47bj1uc1tpXTtpKyspe3doaWxlKChuPW4ubmV4dFNp
YmxpbmcpJiZuLm5vZGVUeXBlIT0xKXt9aWYobiYmKG4ubm9kZU5hbWU9PXV0YWd8fG4ubm9kZU5h
bWU9PXRhZ05hbWV8fHRhZ05hbWU9PSIqIikpe3Jlc3VsdFsrK3JpXT1ufX19ZWxzZXtpZihtb2Rl
PT0ifiIpe3ZhciB1dGFnPXRhZ05hbWUudG9VcHBlckNhc2UoKTtmb3IodmFyIGk9MCxuO249bnNb
aV07aSsrKXt3aGlsZSgobj1uLm5leHRTaWJsaW5nKSl7aWYobi5ub2RlTmFtZT09dXRhZ3x8bi5u
b2RlTmFtZT09dGFnTmFtZXx8dGFnTmFtZT09IioiKXtyZXN1bHRbKytyaV09bn19fX19fX1yZXR1
cm4gcmVzdWx0fWZ1bmN0aW9uIGNvbmNhdChhLGIpe2lmKGIuc2xpY2Upe3JldHVybiBhLmNvbmNh
dChiKX1mb3IodmFyIGk9MCxsPWIubGVuZ3RoO2k8bDtpKyspe2FbYS5sZW5ndGhdPWJbaV19cmV0
dXJuIGF9ZnVuY3Rpb24gYnlUYWcoY3MsdGFnTmFtZSl7aWYoY3MudGFnTmFtZXx8Y3M9PWRvY3Vt
ZW50KXtjcz1bY3NdfWlmKCF0YWdOYW1lKXtyZXR1cm4gY3N9dmFyIHI9W10scmk9LTE7dGFnTmFt
ZT10YWdOYW1lLnRvTG93ZXJDYXNlKCk7Zm9yKHZhciBpPTAsY2k7Y2k9Y3NbaV07aSsrKXtpZihj
aS5ub2RlVHlwZT09MSYmY2kudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT10YWdOYW1lKXtyWysrcmld
PWNpfX1yZXR1cm4gcn1mdW5jdGlvbiBieUlkKGNzLGF0dHIsaWQpe2lmKGNzLnRhZ05hbWV8fGNz
PT1kb2N1bWVudCl7Y3M9W2NzXX1pZighaWQpe3JldHVybiBjc312YXIgcj1bXSxyaT0tMTtmb3Io
dmFyIGk9MCxjaTtjaT1jc1tpXTtpKyspe2lmKGNpJiZjaS5pZD09aWQpe3JbKytyaV09Y2k7cmV0
dXJuIHJ9fXJldHVybiByfWZ1bmN0aW9uIGJ5QXR0cmlidXRlKGNzLGF0dHIsdmFsdWUsb3AsY3Vz
dG9tKXt2YXIgcj1bXSxyaT0tMSxzdD1jdXN0b209PSJ7IixmPUV4dC5Eb21RdWVyeS5vcGVyYXRv
cnNbb3BdLGEsaWg7Zm9yKHZhciBpPTAsY2k7Y2k9Y3NbaV07aSsrKXtpZihjaS5ub2RlVHlwZSE9
MSl7Y29udGludWV9aWg9Y2kuaW5uZXJIVE1MO2lmKGloIT09bnVsbCYmaWghPT11bmRlZmluZWQp
e2lmKHN0KXthPUV4dC5Eb21RdWVyeS5nZXRTdHlsZShjaSxhdHRyKX1lbHNle2lmKGF0dHI9PSJj
bGFzcyJ8fGF0dHI9PSJjbGFzc05hbWUiKXthPWNpLmNsYXNzTmFtZX1lbHNle2lmKGF0dHI9PSJm
b3IiKXthPWNpLmh0bWxGb3J9ZWxzZXtpZihhdHRyPT0iaHJlZiIpe2E9Y2kuZ2V0QXR0cmlidXRl
KCJocmVmIiwyKX1lbHNle2E9Y2kuZ2V0QXR0cmlidXRlKGF0dHIpfX19fX1lbHNle2E9Y2kuZ2V0
QXR0cmlidXRlKGF0dHIpfWlmKChmJiZmKGEsdmFsdWUpKXx8KCFmJiZhKSl7clsrK3JpXT1jaX19
cmV0dXJuIHJ9ZnVuY3Rpb24gYnlQc2V1ZG8oY3MsbmFtZSx2YWx1ZSl7cmV0dXJuIEV4dC5Eb21R
dWVyeS5wc2V1ZG9zW25hbWVdKGNzLHZhbHVlKX1mdW5jdGlvbiBub2R1cElFWG1sKGNzKXt2YXIg
ZD0rK2tleSxyO2NzWzBdLnNldEF0dHJpYnV0ZSgiX25vZHVwIixkKTtyPVtjc1swXV07Zm9yKHZh
ciBpPTEsbGVuPWNzLmxlbmd0aDtpPGxlbjtpKyspe3ZhciBjPWNzW2ldO2lmKCFjLmdldEF0dHJp
YnV0ZSgiX25vZHVwIikhPWQpe2Muc2V0QXR0cmlidXRlKCJfbm9kdXAiLGQpO3Jbci5sZW5ndGhd
PWN9fWZvcih2YXIgaT0wLGxlbj1jcy5sZW5ndGg7aTxsZW47aSsrKXtjc1tpXS5yZW1vdmVBdHRy
aWJ1dGUoIl9ub2R1cCIpfXJldHVybiByfWZ1bmN0aW9uIG5vZHVwKGNzKXtpZighY3Mpe3JldHVy
bltdfXZhciBsZW49Y3MubGVuZ3RoLGMsaSxyPWNzLGNqLHJpPS0xO2lmKCFsZW58fHR5cGVvZiBj
cy5ub2RlVHlwZSE9InVuZGVmaW5lZCJ8fGxlbj09MSl7cmV0dXJuIGNzfWlmKGlzSUUmJnR5cGVv
ZiBjc1swXS5zZWxlY3RTaW5nbGVOb2RlIT0idW5kZWZpbmVkIil7cmV0dXJuIG5vZHVwSUVYbWwo
Y3MpfXZhciBkPSsra2V5O2NzWzBdLl9ub2R1cD1kO2ZvcihpPTE7Yz1jc1tpXTtpKyspe2lmKGMu
X25vZHVwIT1kKXtjLl9ub2R1cD1kfWVsc2V7cj1bXTtmb3IodmFyIGo9MDtqPGk7aisrKXtyWysr
cmldPWNzW2pdfWZvcihqPWkrMTtjaj1jc1tqXTtqKyspe2lmKGNqLl9ub2R1cCE9ZCl7Y2ouX25v
ZHVwPWQ7clsrK3JpXT1jan19cmV0dXJuIHJ9fXJldHVybiByfWZ1bmN0aW9uIHF1aWNrRGlmZklF
WG1sKGMxLGMyKXt2YXIgZD0rK2tleSxyPVtdO2Zvcih2YXIgaT0wLGxlbj1jMS5sZW5ndGg7aTxs
ZW47aSsrKXtjMVtpXS5zZXRBdHRyaWJ1dGUoIl9xZGlmZiIsZCl9Zm9yKHZhciBpPTAsbGVuPWMy
Lmxlbmd0aDtpPGxlbjtpKyspe2lmKGMyW2ldLmdldEF0dHJpYnV0ZSgiX3FkaWZmIikhPWQpe3Jb
ci5sZW5ndGhdPWMyW2ldfX1mb3IodmFyIGk9MCxsZW49YzEubGVuZ3RoO2k8bGVuO2krKyl7YzFb
aV0ucmVtb3ZlQXR0cmlidXRlKCJfcWRpZmYiKX1yZXR1cm4gcn1mdW5jdGlvbiBxdWlja0RpZmYo
YzEsYzIpe3ZhciBsZW4xPWMxLmxlbmd0aCxkPSsra2V5LHI9W107aWYoIWxlbjEpe3JldHVybiBj
Mn1pZihpc0lFJiZ0eXBlb2YgYzFbMF0uc2VsZWN0U2luZ2xlTm9kZSE9InVuZGVmaW5lZCIpe3Jl
dHVybiBxdWlja0RpZmZJRVhtbChjMSxjMil9Zm9yKHZhciBpPTA7aTxsZW4xO2krKyl7YzFbaV0u
X3FkaWZmPWR9Zm9yKHZhciBpPTAsbGVuPWMyLmxlbmd0aDtpPGxlbjtpKyspe2lmKGMyW2ldLl9x
ZGlmZiE9ZCl7cltyLmxlbmd0aF09YzJbaV19fXJldHVybiByfWZ1bmN0aW9uIHF1aWNrSWQobnMs
bW9kZSxyb290LGlkKXtpZihucz09cm9vdCl7dmFyIGQ9cm9vdC5vd25lckRvY3VtZW50fHxyb290
O3JldHVybiBkLmdldEVsZW1lbnRCeUlkKGlkKX1ucz1nZXROb2Rlcyhucyxtb2RlLCIqIik7cmV0
dXJuIGJ5SWQobnMsbnVsbCxpZCl9cmV0dXJue2dldFN0eWxlOmZ1bmN0aW9uKGVsLG5hbWUpe3Jl
dHVybiBFeHQuZmx5KGVsKS5nZXRTdHlsZShuYW1lKX0sY29tcGlsZTpmdW5jdGlvbihwYXRoLHR5
cGUpe3R5cGU9dHlwZXx8InNlbGVjdCI7dmFyIGZuPVsidmFyIGYgPSBmdW5jdGlvbihyb290KXtc
biB2YXIgbW9kZTsgKytiYXRjaDsgdmFyIG4gPSByb290IHx8IGRvY3VtZW50O1xuIl0scT1wYXRo
LG1vZGUsbHEsdGs9RXh0LkRvbVF1ZXJ5Lm1hdGNoZXJzLHRrbGVuPXRrLmxlbmd0aCxtbSxsbW9k
ZT1xLm1hdGNoKG1vZGVSZSk7aWYobG1vZGUmJmxtb2RlWzFdKXtmbltmbi5sZW5ndGhdPSdtb2Rl
PSInK2xtb2RlWzFdLnJlcGxhY2UodHJpbVJlLCIiKSsnIjsnO3E9cS5yZXBsYWNlKGxtb2RlWzFd
LCIiKX13aGlsZShwYXRoLnN1YnN0cigwLDEpPT0iLyIpe3BhdGg9cGF0aC5zdWJzdHIoMSl9d2hp
bGUocSYmbHEhPXEpe2xxPXE7dmFyIHRtPXEubWF0Y2godGFnVG9rZW5SZSk7aWYodHlwZT09InNl
bGVjdCIpe2lmKHRtKXtpZih0bVsxXT09IiMiKXtmbltmbi5sZW5ndGhdPSduID0gcXVpY2tJZChu
LCBtb2RlLCByb290LCAiJyt0bVsyXSsnIik7J31lbHNle2ZuW2ZuLmxlbmd0aF09J24gPSBnZXRO
b2RlcyhuLCBtb2RlLCAiJyt0bVsyXSsnIik7J31xPXEucmVwbGFjZSh0bVswXSwiIil9ZWxzZXtp
ZihxLnN1YnN0cigwLDEpIT0iQCIpe2ZuW2ZuLmxlbmd0aF09J24gPSBnZXROb2RlcyhuLCBtb2Rl
LCAiKiIpOyd9fX1lbHNle2lmKHRtKXtpZih0bVsxXT09IiMiKXtmbltmbi5sZW5ndGhdPSduID0g
YnlJZChuLCBudWxsLCAiJyt0bVsyXSsnIik7J31lbHNle2ZuW2ZuLmxlbmd0aF09J24gPSBieVRh
ZyhuLCAiJyt0bVsyXSsnIik7J31xPXEucmVwbGFjZSh0bVswXSwiIil9fXdoaWxlKCEobW09cS5t
YXRjaChtb2RlUmUpKSl7dmFyIG1hdGNoZWQ9ZmFsc2U7Zm9yKHZhciBqPTA7ajx0a2xlbjtqKysp
e3ZhciB0PXRrW2pdO3ZhciBtPXEubWF0Y2godC5yZSk7aWYobSl7Zm5bZm4ubGVuZ3RoXT10LnNl
bGVjdC5yZXBsYWNlKHRwbFJlLGZ1bmN0aW9uKHgsaSl7cmV0dXJuIG1baV19KTtxPXEucmVwbGFj
ZShtWzBdLCIiKTttYXRjaGVkPXRydWU7YnJlYWt9fWlmKCFtYXRjaGVkKXt0aHJvdydFcnJvciBw
YXJzaW5nIHNlbGVjdG9yLCBwYXJzaW5nIGZhaWxlZCBhdCAiJytxKyciJ319aWYobW1bMV0pe2Zu
W2ZuLmxlbmd0aF09J21vZGU9IicrbW1bMV0ucmVwbGFjZSh0cmltUmUsIiIpKyciOyc7cT1xLnJl
cGxhY2UobW1bMV0sIiIpfX1mbltmbi5sZW5ndGhdPSJyZXR1cm4gbm9kdXAobik7XG59IjtldmFs
KGZuLmpvaW4oIiIpKTtyZXR1cm4gZn0sc2VsZWN0OmZ1bmN0aW9uKHBhdGgscm9vdCx0eXBlKXtp
Zighcm9vdHx8cm9vdD09ZG9jdW1lbnQpe3Jvb3Q9ZG9jdW1lbnR9aWYodHlwZW9mIHJvb3Q9PSJz
dHJpbmciKXtyb290PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJvb3QpfXZhciBwYXRocz1wYXRo
LnNwbGl0KCIsIikscmVzdWx0cz1bXTtmb3IodmFyIGk9MCxsZW49cGF0aHMubGVuZ3RoO2k8bGVu
O2krKyl7dmFyIHA9cGF0aHNbaV0ucmVwbGFjZSh0cmltUmUsIiIpO2lmKCFjYWNoZVtwXSl7Y2Fj
aGVbcF09RXh0LkRvbVF1ZXJ5LmNvbXBpbGUocCk7aWYoIWNhY2hlW3BdKXt0aHJvdyBwKyIgaXMg
bm90IGEgdmFsaWQgc2VsZWN0b3IifX12YXIgcmVzdWx0PWNhY2hlW3BdKHJvb3QpO2lmKHJlc3Vs
dCYmcmVzdWx0IT1kb2N1bWVudCl7cmVzdWx0cz1yZXN1bHRzLmNvbmNhdChyZXN1bHQpfX1pZihw
YXRocy5sZW5ndGg+MSl7cmV0dXJuIG5vZHVwKHJlc3VsdHMpfXJldHVybiByZXN1bHRzfSxzZWxl
Y3ROb2RlOmZ1bmN0aW9uKHBhdGgscm9vdCl7cmV0dXJuIEV4dC5Eb21RdWVyeS5zZWxlY3QocGF0
aCxyb290KVswXX0sc2VsZWN0VmFsdWU6ZnVuY3Rpb24ocGF0aCxyb290LGRlZmF1bHRWYWx1ZSl7
cGF0aD1wYXRoLnJlcGxhY2UodHJpbVJlLCIiKTtpZighdmFsdWVDYWNoZVtwYXRoXSl7dmFsdWVD
YWNoZVtwYXRoXT1FeHQuRG9tUXVlcnkuY29tcGlsZShwYXRoLCJzZWxlY3QiKX12YXIgbj12YWx1
ZUNhY2hlW3BhdGhdKHJvb3QpLHY7bj1uWzBdP25bMF06bjtpZih0eXBlb2Ygbi5ub3JtYWxpemU9
PSJmdW5jdGlvbiIpe24ubm9ybWFsaXplKCl9dj0obiYmbi5maXJzdENoaWxkP24uZmlyc3RDaGls
ZC5ub2RlVmFsdWU6bnVsbCk7cmV0dXJuKCh2PT09bnVsbHx8dj09PXVuZGVmaW5lZHx8dj09PSIi
KT9kZWZhdWx0VmFsdWU6dil9LHNlbGVjdE51bWJlcjpmdW5jdGlvbihwYXRoLHJvb3QsZGVmYXVs
dFZhbHVlKXt2YXIgdj1FeHQuRG9tUXVlcnkuc2VsZWN0VmFsdWUocGF0aCxyb290LGRlZmF1bHRW
YWx1ZXx8MCk7cmV0dXJuIHBhcnNlRmxvYXQodil9LGlzOmZ1bmN0aW9uKGVsLHNzKXtpZih0eXBl
b2YgZWw9PSJzdHJpbmciKXtlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbCl9dmFyIGlzQXJy
YXk9RXh0LmlzQXJyYXkoZWwpLHJlc3VsdD1FeHQuRG9tUXVlcnkuZmlsdGVyKGlzQXJyYXk/ZWw6
W2VsXSxzcyk7cmV0dXJuIGlzQXJyYXk/KHJlc3VsdC5sZW5ndGg9PWVsLmxlbmd0aCk6KHJlc3Vs
dC5sZW5ndGg+MCl9LGZpbHRlcjpmdW5jdGlvbihlbHMsc3Msbm9uTWF0Y2hlcyl7c3M9c3MucmVw
bGFjZSh0cmltUmUsIiIpO2lmKCFzaW1wbGVDYWNoZVtzc10pe3NpbXBsZUNhY2hlW3NzXT1FeHQu
RG9tUXVlcnkuY29tcGlsZShzcywic2ltcGxlIil9dmFyIHJlc3VsdD1zaW1wbGVDYWNoZVtzc10o
ZWxzKTtyZXR1cm4gbm9uTWF0Y2hlcz9xdWlja0RpZmYocmVzdWx0LGVscyk6cmVzdWx0fSxtYXRj
aGVyczpbe3JlOi9eXC4oW1x3LV0rKS8sc2VsZWN0OiduID0gYnlDbGFzc05hbWUobiwgbnVsbCwg
IiB7MX0gIik7J30se3JlOi9eXDooW1x3LV0rKSg/OlwoKCg/OlteXHM+XC9dKnwuKj8pKVwpKT8v
LHNlbGVjdDonbiA9IGJ5UHNldWRvKG4sICJ7MX0iLCAiezJ9Iik7J30se3JlOi9eKD86KFtcW1x7
XSkoPzpAKT8oW1x3LV0rKVxzPyg/Oig9fC49KVxzP1snIl0/KC4qPylbIiddPyk/W1xdXH1dKS8s
c2VsZWN0OiduID0gYnlBdHRyaWJ1dGUobiwgInsyfSIsICJ7NH0iLCAiezN9IiwgInsxfSIpOyd9
LHtyZTovXiMoW1x3LV0rKS8sc2VsZWN0OiduID0gYnlJZChuLCBudWxsLCAiezF9Iik7J30se3Jl
Oi9eQChbXHctXSspLyxzZWxlY3Q6J3JldHVybiB7Zmlyc3RDaGlsZDp7bm9kZVZhbHVlOmF0dHJW
YWx1ZShuLCAiezF9Iil9fTsnfV0sb3BlcmF0b3JzOnsiPSI6ZnVuY3Rpb24oYSx2KXtyZXR1cm4g
YT09dn0sIiE9IjpmdW5jdGlvbihhLHYpe3JldHVybiBhIT12fSwiXj0iOmZ1bmN0aW9uKGEsdil7
cmV0dXJuIGEmJmEuc3Vic3RyKDAsdi5sZW5ndGgpPT12fSwiJD0iOmZ1bmN0aW9uKGEsdil7cmV0
dXJuIGEmJmEuc3Vic3RyKGEubGVuZ3RoLXYubGVuZ3RoKT09dn0sIio9IjpmdW5jdGlvbihhLHYp
e3JldHVybiBhJiZhLmluZGV4T2YodikhPT0tMX0sIiU9IjpmdW5jdGlvbihhLHYpe3JldHVybihh
JXYpPT0wfSwifD0iOmZ1bmN0aW9uKGEsdil7cmV0dXJuIGEmJihhPT12fHxhLnN1YnN0cigwLHYu
bGVuZ3RoKzEpPT12KyItIil9LCJ+PSI6ZnVuY3Rpb24oYSx2KXtyZXR1cm4gYSYmKCIgIithKyIg
IikuaW5kZXhPZigiICIrdisiICIpIT0tMX19LHBzZXVkb3M6eyJmaXJzdC1jaGlsZCI6ZnVuY3Rp
b24oYyl7dmFyIHI9W10scmk9LTEsbjtmb3IodmFyIGk9MCxjaTtjaT1uPWNbaV07aSsrKXt3aGls
ZSgobj1uLnByZXZpb3VzU2libGluZykmJm4ubm9kZVR5cGUhPTEpe31pZighbil7clsrK3JpXT1j
aX19cmV0dXJuIHJ9LCJsYXN0LWNoaWxkIjpmdW5jdGlvbihjKXt2YXIgcj1bXSxyaT0tMSxuO2Zv
cih2YXIgaT0wLGNpO2NpPW49Y1tpXTtpKyspe3doaWxlKChuPW4ubmV4dFNpYmxpbmcpJiZuLm5v
ZGVUeXBlIT0xKXt9aWYoIW4pe3JbKytyaV09Y2l9fXJldHVybiByfSwibnRoLWNoaWxkIjpmdW5j
dGlvbihjLGEpe3ZhciByPVtdLHJpPS0xLG09bnRoUmUuZXhlYyhhPT0iZXZlbiImJiIybiJ8fGE9
PSJvZGQiJiYiMm4rMSJ8fCFudGhSZTIudGVzdChhKSYmIm4rIithfHxhKSxmPShtWzFdfHwxKS0w
LGw9bVsyXS0wO2Zvcih2YXIgaT0wLG47bj1jW2ldO2krKyl7dmFyIHBuPW4ucGFyZW50Tm9kZTtp
ZihiYXRjaCE9cG4uX2JhdGNoKXt2YXIgaj0wO2Zvcih2YXIgY249cG4uZmlyc3RDaGlsZDtjbjtj
bj1jbi5uZXh0U2libGluZyl7aWYoY24ubm9kZVR5cGU9PTEpe2NuLm5vZGVJbmRleD0rK2p9fXBu
Ll9iYXRjaD1iYXRjaH1pZihmPT0xKXtpZihsPT0wfHxuLm5vZGVJbmRleD09bCl7clsrK3JpXT1u
fX1lbHNle2lmKChuLm5vZGVJbmRleCtsKSVmPT0wKXtyWysrcmldPW59fX1yZXR1cm4gcn0sIm9u
bHktY2hpbGQiOmZ1bmN0aW9uKGMpe3ZhciByPVtdLHJpPS0xO2Zvcih2YXIgaT0wLGNpO2NpPWNb
aV07aSsrKXtpZighcHJldihjaSkmJiFuZXh0KGNpKSl7clsrK3JpXT1jaX19cmV0dXJuIHJ9LGVt
cHR5OmZ1bmN0aW9uKGMpe3ZhciByPVtdLHJpPS0xO2Zvcih2YXIgaT0wLGNpO2NpPWNbaV07aSsr
KXt2YXIgY25zPWNpLmNoaWxkTm9kZXMsaj0wLGNuLGVtcHR5PXRydWU7d2hpbGUoY249Y25zW2pd
KXsrK2o7aWYoY24ubm9kZVR5cGU9PTF8fGNuLm5vZGVUeXBlPT0zKXtlbXB0eT1mYWxzZTticmVh
a319aWYoZW1wdHkpe3JbKytyaV09Y2l9fXJldHVybiByfSxjb250YWluczpmdW5jdGlvbihjLHYp
e3ZhciByPVtdLHJpPS0xO2Zvcih2YXIgaT0wLGNpO2NpPWNbaV07aSsrKXtpZigoY2kudGV4dENv
bnRlbnR8fGNpLmlubmVyVGV4dHx8IiIpLmluZGV4T2YodikhPS0xKXtyWysrcmldPWNpfX1yZXR1
cm4gcn0sbm9kZVZhbHVlOmZ1bmN0aW9uKGMsdil7dmFyIHI9W10scmk9LTE7Zm9yKHZhciBpPTAs
Y2k7Y2k9Y1tpXTtpKyspe2lmKGNpLmZpcnN0Q2hpbGQmJmNpLmZpcnN0Q2hpbGQubm9kZVZhbHVl
PT12KXtyWysrcmldPWNpfX1yZXR1cm4gcn0sY2hlY2tlZDpmdW5jdGlvbihjKXt2YXIgcj1bXSxy
aT0tMTtmb3IodmFyIGk9MCxjaTtjaT1jW2ldO2krKyl7aWYoY2kuY2hlY2tlZD09dHJ1ZSl7clsr
K3JpXT1jaX19cmV0dXJuIHJ9LG5vdDpmdW5jdGlvbihjLHNzKXtyZXR1cm4gRXh0LkRvbVF1ZXJ5
LmZpbHRlcihjLHNzLHRydWUpfSxhbnk6ZnVuY3Rpb24oYyxzZWxlY3RvcnMpe3ZhciBzcz1zZWxl
Y3RvcnMuc3BsaXQoInwiKSxyPVtdLHJpPS0xLHM7Zm9yKHZhciBpPTAsY2k7Y2k9Y1tpXTtpKysp
e2Zvcih2YXIgaj0wO3M9c3Nbal07aisrKXtpZihFeHQuRG9tUXVlcnkuaXMoY2kscykpe3JbKyty
aV09Y2k7YnJlYWt9fX1yZXR1cm4gcn0sb2RkOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzWyJudGgt
Y2hpbGQiXShjLCJvZGQiKX0sZXZlbjpmdW5jdGlvbihjKXtyZXR1cm4gdGhpc1sibnRoLWNoaWxk
Il0oYywiZXZlbiIpfSxudGg6ZnVuY3Rpb24oYyxhKXtyZXR1cm4gY1thLTFdfHxbXX0sZmlyc3Q6
ZnVuY3Rpb24oYyl7cmV0dXJuIGNbMF18fFtdfSxsYXN0OmZ1bmN0aW9uKGMpe3JldHVybiBjW2Mu
bGVuZ3RoLTFdfHxbXX0saGFzOmZ1bmN0aW9uKGMsc3Mpe3ZhciBzPUV4dC5Eb21RdWVyeS5zZWxl
Y3Qscj1bXSxyaT0tMTtmb3IodmFyIGk9MCxjaTtjaT1jW2ldO2krKyl7aWYocyhzcyxjaSkubGVu
Z3RoPjApe3JbKytyaV09Y2l9fXJldHVybiByfSxuZXh0OmZ1bmN0aW9uKGMsc3Mpe3ZhciBpcz1F
eHQuRG9tUXVlcnkuaXMscj1bXSxyaT0tMTtmb3IodmFyIGk9MCxjaTtjaT1jW2ldO2krKyl7dmFy
IG49bmV4dChjaSk7aWYobiYmaXMobixzcykpe3JbKytyaV09Y2l9fXJldHVybiByfSxwcmV2OmZ1
bmN0aW9uKGMsc3Mpe3ZhciBpcz1FeHQuRG9tUXVlcnkuaXMscj1bXSxyaT0tMTtmb3IodmFyIGk9
MCxjaTtjaT1jW2ldO2krKyl7dmFyIG49cHJldihjaSk7aWYobiYmaXMobixzcykpe3JbKytyaV09
Y2l9fXJldHVybiByfX19fSgpO0V4dC5xdWVyeT1FeHQuRG9tUXVlcnkuc2VsZWN0O0V4dC5FdmVu
dE1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgdSxtLGk9ZmFsc2UsbD1FeHQubGliLkV2ZW50LG49RXh0
LmxpYi5Eb20sYj1kb2N1bWVudCx2PXdpbmRvdyxlPSJpZS1kZWZlcnJlZC1sb2FkZXIiLG89IkRP
TUNvbnRlbnRMb2FkZWQiLGc9L14oPzpzY29wZXxkZWxheXxidWZmZXJ8c2luZ2xlfHN0b3BFdmVu
dHxwcmV2ZW50RGVmYXVsdHxzdG9wUHJvcGFnYXRpb258bm9ybWFsaXplZHxhcmdzfGRlbGVnYXRl
KSQvLHE9W107ZnVuY3Rpb24gayh5KXt2YXIgQj1mYWxzZSx4PTAsdz1xLmxlbmd0aCxCPWZhbHNl
LHo9ZmFsc2UsQTtpZih5KXtpZih5LmdldEVsZW1lbnRCeUlkfHx5Lm5hdmlnYXRvcil7Zm9yKDt4
PHc7Kyt4KXtBPXFbeF07aWYoQS5lbD09PXkpe0I9QS5pZDticmVha319aWYoIUIpe0I9RXh0Lmlk
KHkpO3EucHVzaCh7aWQ6QixlbDp5fSk7ej10cnVlfX1lbHNle0I9RXh0LmlkKHkpfWlmKCFFeHQu
ZWxDYWNoZVtCXSl7RXh0LkVsZW1lbnQuYWRkVG9DYWNoZShuZXcgRXh0LkVsZW1lbnQoeSksQik7
aWYoeil7RXh0LmVsQ2FjaGVbQl0uc2tpcEdDPXRydWV9fX1yZXR1cm4gQn1mdW5jdGlvbiBqKHks
QSxELHoseCxGKXt5PUV4dC5nZXREb20oeSk7dmFyIHc9ayh5KSxFPUV4dC5lbENhY2hlW3ddLmV2
ZW50cyxCO0I9bC5vbih5LEEseCk7RVtBXT1FW0FdfHxbXTtFW0FdLnB1c2goW0QseCxGLEIsel0p
O2lmKEE9PSJtb3VzZXdoZWVsIiYmeS5hZGRFdmVudExpc3RlbmVyKXt2YXIgQz1bIkRPTU1vdXNl
U2Nyb2xsIix4LGZhbHNlXTt5LmFkZEV2ZW50TGlzdGVuZXIuYXBwbHkoeSxDKTtFeHQuRXZlbnRN
YW5hZ2VyLmFkZExpc3RlbmVyKHYsInVubG9hZCIsZnVuY3Rpb24oKXt5LnJlbW92ZUV2ZW50TGlz
dGVuZXIuYXBwbHkoeSxDKX0pfWlmKEE9PSJtb3VzZWRvd24iJiZ5PT1kb2N1bWVudCl7RXh0LkV2
ZW50TWFuYWdlci5zdG9wcGVkTW91c2VEb3duRXZlbnQuYWRkTGlzdGVuZXIoeCl9fWZ1bmN0aW9u
IGMoKXtpZighaSl7RXh0LmlzUmVhZHk9aT10cnVlO2lmKG0pe2NsZWFySW50ZXJ2YWwobSl9aWYo
RXh0LmlzR2Vja298fEV4dC5pc09wZXJhKXtiLnJlbW92ZUV2ZW50TGlzdGVuZXIobyxjLGZhbHNl
KX1pZihFeHQuaXNJRSl7dmFyIHc9Yi5nZXRFbGVtZW50QnlJZChlKTtpZih3KXt3Lm9ucmVhZHlz
dGF0ZWNoYW5nZT1udWxsO3cucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3KX19aWYodSl7dS5maXJl
KCk7dS5saXN0ZW5lcnM9W119fX1mdW5jdGlvbiBhKCl7dmFyIHc9ImNvbXBsZXRlIjt1PW5ldyBF
eHQudXRpbC5FdmVudCgpO2lmKEV4dC5pc0dlY2tvfHxFeHQuaXNPcGVyYSl7Yi5hZGRFdmVudExp
c3RlbmVyKG8sYyxmYWxzZSl9ZWxzZXtpZihFeHQuaXNJRSl7Yi53cml0ZSgiPHNjcmlwdCBpZD0i
K2UrJyBkZWZlcj0iZGVmZXIiIHNyYz0iLy86Ij48XC9zY3JpcHQ+Jyk7Yi5nZXRFbGVtZW50QnlJ
ZChlKS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYWR5U3RhdGU9PXcp
e2MoKX19fWVsc2V7aWYoRXh0LmlzV2ViS2l0KXttPXNldEludGVydmFsKGZ1bmN0aW9uKCl7aWYo
Yi5yZWFkeVN0YXRlPT13KXtjKCl9fSwxMCl9fX1sLm9uKHYsImxvYWQiLGMpfWZ1bmN0aW9uIHMo
dyx4KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeT1FeHQudG9BcnJheShhcmd1bWVudHMpO2lmKHgu
dGFyZ2V0PT1FeHQuRXZlbnRPYmplY3Quc2V0RXZlbnQoeVswXSkudGFyZ2V0KXt3LmFwcGx5KHRo
aXMseSl9fX1mdW5jdGlvbiB0KHgseSx3KXtyZXR1cm4gZnVuY3Rpb24oeil7dy5kZWxheSh5LmJ1
ZmZlcix4LG51bGwsW25ldyBFeHQuRXZlbnRPYmplY3RJbXBsKHopXSl9fWZ1bmN0aW9uIHAoQSx6
LHcseSx4KXtyZXR1cm4gZnVuY3Rpb24oQil7RXh0LkV2ZW50TWFuYWdlci5yZW1vdmVMaXN0ZW5l
cih6LHcseSx4KTtBKEIpfX1mdW5jdGlvbiBkKHgseSx3KXtyZXR1cm4gZnVuY3Rpb24oQSl7dmFy
IHo9bmV3IEV4dC51dGlsLkRlbGF5ZWRUYXNrKHgpO2lmKCF3LnRhc2tzKXt3LnRhc2tzPVtdfXcu
dGFza3MucHVzaCh6KTt6LmRlbGF5KHkuZGVsYXl8fDEwLHgsbnVsbCxbbmV3IEV4dC5FdmVudE9i
amVjdEltcGwoQSldKX19ZnVuY3Rpb24gaChCLEEsdyxELEUpe3ZhciB4PSFFeHQuaXNPYmplY3Qo
dyk/e306dyx5PUV4dC5nZXREb20oQiksejtEPUR8fHguZm47RT1FfHx4LnNjb3BlO2lmKCF5KXt0
aHJvdydFcnJvciBsaXN0ZW5pbmcgZm9yICInK0ErJyIuIEVsZW1lbnQgIicrQisiXCIgZG9lc24n
dCBleGlzdC4ifWZ1bmN0aW9uIEMoRyl7aWYoIUV4dCl7cmV0dXJufUc9RXh0LkV2ZW50T2JqZWN0
LnNldEV2ZW50KEcpO3ZhciBGO2lmKHguZGVsZWdhdGUpe2lmKCEoRj1HLmdldFRhcmdldCh4LmRl
bGVnYXRlLHkpKSl7cmV0dXJufX1lbHNle0Y9Ry50YXJnZXR9aWYoeC5zdG9wRXZlbnQpe0cuc3Rv
cEV2ZW50KCl9aWYoeC5wcmV2ZW50RGVmYXVsdCl7Ry5wcmV2ZW50RGVmYXVsdCgpfWlmKHguc3Rv
cFByb3BhZ2F0aW9uKXtHLnN0b3BQcm9wYWdhdGlvbigpfWlmKHgubm9ybWFsaXplZCl7Rz1HLmJy
b3dzZXJFdmVudH1ELmNhbGwoRXx8eSxHLEYseCl9aWYoeC50YXJnZXQpe0M9cyhDLHgpfWlmKHgu
ZGVsYXkpe0M9ZChDLHgsRCl9aWYoeC5zaW5nbGUpe0M9cChDLHksQSxELEUpfWlmKHguYnVmZmVy
KXt6PW5ldyBFeHQudXRpbC5EZWxheWVkVGFzayhDKTtDPXQoQyx4LHopfWooeSxBLEQseixDLEUp
O3JldHVybiBDfXZhciByPXthZGRMaXN0ZW5lcjpmdW5jdGlvbih5LHcsQSx6LHgpe2lmKEV4dC5p
c09iamVjdCh3KSl7dmFyIEQ9dyxCLEM7Zm9yKEIgaW4gRCl7Qz1EW0JdO2lmKCFnLnRlc3QoQikp
e2lmKEV4dC5pc0Z1bmN0aW9uKEMpKXtoKHksQixELEMsRC5zY29wZSl9ZWxzZXtoKHksQixDKX19
fX1lbHNle2goeSx3LHgsQSx6KX19LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKHosRCxILEkpe3o9
RXh0LmdldERvbSh6KTt2YXIgdz1rKHopLEY9eiYmKEV4dC5lbENhY2hlW3ddLmV2ZW50cylbRF18
fFtdLHgsQyxBLEIseSxFLEc7Zm9yKEM9MCxFPUYubGVuZ3RoO0M8RTtDKyspe2lmKEV4dC5pc0Fy
cmF5KEc9RltDXSkmJkdbMF09PUgmJighSXx8R1syXT09SSkpe2lmKEdbNF0pe0dbNF0uY2FuY2Vs
KCl9Qj1ILnRhc2tzJiZILnRhc2tzLmxlbmd0aDtpZihCKXt3aGlsZShCLS0pe0gudGFza3NbQl0u
Y2FuY2VsKCl9ZGVsZXRlIEgudGFza3N9eT14PUdbMV07aWYobC5leHRBZGFwdGVyKXt5PUdbM119
bC51bih6LEQseSk7Ri5zcGxpY2UoQywxKTtpZihGLmxlbmd0aD09PTApe2RlbGV0ZSBFeHQuZWxD
YWNoZVt3XS5ldmVudHNbRF19Zm9yKEIgaW4gRXh0LmVsQ2FjaGVbd10uZXZlbnRzKXtyZXR1cm4g
ZmFsc2V9RXh0LmVsQ2FjaGVbd10uZXZlbnRzPXt9O3JldHVybiBmYWxzZX19aWYoRD09Im1vdXNl
d2hlZWwiJiZ6LmFkZEV2ZW50TGlzdGVuZXImJngpe3oucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9N
TW91c2VTY3JvbGwiLHgsZmFsc2UpfWlmKEQ9PSJtb3VzZWRvd24iJiZ6PT1iJiZ4KXtFeHQuRXZl
bnRNYW5hZ2VyLnN0b3BwZWRNb3VzZURvd25FdmVudC5yZW1vdmVMaXN0ZW5lcih4KX19LHJlbW92
ZUFsbDpmdW5jdGlvbih4KXt4PUV4dC5nZXREb20oeCk7dmFyIHc9ayh4KSxDPUV4dC5lbENhY2hl
W3ddfHx7fSxGPUMuZXZlbnRzfHx7fSxCLEEsRCx5LEUsejtmb3IoeSBpbiBGKXtpZihGLmhhc093
blByb3BlcnR5KHkpKXtCPUZbeV07Zm9yKEE9MCxEPUIubGVuZ3RoO0E8RDtBKyspe0U9QltBXTtp
ZihFWzRdKXtFWzRdLmNhbmNlbCgpfWlmKEVbMF0udGFza3MmJih6PUVbMF0udGFza3MubGVuZ3Ro
KSl7d2hpbGUoei0tKXtFWzBdLnRhc2tzW3pdLmNhbmNlbCgpfWRlbGV0ZSBFLnRhc2tzfWwudW4o
eCx5LGwuZXh0QWRhcHRlcj9FWzNdOkVbMV0pfX19aWYoRXh0LmVsQ2FjaGVbd10pe0V4dC5lbENh
Y2hlW3ddLmV2ZW50cz17fX19LGdldExpc3RlbmVyczpmdW5jdGlvbih6LHcpe3o9RXh0LmdldERv
bSh6KTt2YXIgQj1rKHopLHg9RXh0LmVsQ2FjaGVbQl18fHt9LEE9eC5ldmVudHN8fHt9LHk9W107
aWYoQSYmQVt3XSl7cmV0dXJuIEFbd119ZWxzZXtyZXR1cm4gbnVsbH19LHB1cmdlRWxlbWVudDpm
dW5jdGlvbih5LHcsQSl7eT1FeHQuZ2V0RG9tKHkpO3ZhciB4PWsoeSksRD1FeHQuZWxDYWNoZVt4
XXx8e30sRT1ELmV2ZW50c3x8e30seixDLEI7aWYoQSl7aWYoRSYmRS5oYXNPd25Qcm9wZXJ0eShB
KSl7Qz1FW0FdO2Zvcih6PTAsQj1DLmxlbmd0aDt6PEI7eisrKXtFeHQuRXZlbnRNYW5hZ2VyLnJl
bW92ZUxpc3RlbmVyKHksQSxDW3pdWzBdKX19fWVsc2V7RXh0LkV2ZW50TWFuYWdlci5yZW1vdmVB
bGwoeSl9aWYodyYmeSYmeS5jaGlsZE5vZGVzKXtmb3Ioej0wLEI9eS5jaGlsZE5vZGVzLmxlbmd0
aDt6PEI7eisrKXtFeHQuRXZlbnRNYW5hZ2VyLnB1cmdlRWxlbWVudCh5LmNoaWxkTm9kZXNbel0s
dyxBKX19fSxfdW5sb2FkOmZ1bmN0aW9uKCl7dmFyIHc7Zm9yKHcgaW4gRXh0LmVsQ2FjaGUpe0V4
dC5FdmVudE1hbmFnZXIucmVtb3ZlQWxsKHcpfX0sb25Eb2N1bWVudFJlYWR5OmZ1bmN0aW9uKHks
eCx3KXtpZihpKXt1LmFkZExpc3RlbmVyKHkseCx3KTt1LmZpcmUoKTt1Lmxpc3RlbmVycz1bXX1l
bHNle2lmKCF1KXthKCl9dz13fHx7fTt3LmRlbGF5PXcuZGVsYXl8fDE7dS5hZGRMaXN0ZW5lcih5
LHgsdyl9fX07ci5vbj1yLmFkZExpc3RlbmVyO3IudW49ci5yZW1vdmVMaXN0ZW5lcjtyLnN0b3Bw
ZWRNb3VzZURvd25FdmVudD1uZXcgRXh0LnV0aWwuRXZlbnQoKTtyZXR1cm4gcn0oKTtFeHQub25S
ZWFkeT1FeHQuRXZlbnRNYW5hZ2VyLm9uRG9jdW1lbnRSZWFkeTsoZnVuY3Rpb24oKXt2YXIgYT1m
dW5jdGlvbigpe3ZhciBjPWRvY3VtZW50LmJvZHl8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJib2R5IilbMF07aWYoIWMpe3JldHVybiBmYWxzZX12YXIgYj1bIiAiLEV4dC5pc0lFPyJl
eHQtaWUgIisoRXh0LmlzSUU2PyJleHQtaWU2IjooRXh0LmlzSUU3PyJleHQtaWU3IjoiZXh0LWll
OCIpKTpFeHQuaXNHZWNrbz8iZXh0LWdlY2tvICIrKEV4dC5pc0dlY2tvMj8iZXh0LWdlY2tvMiI6
ImV4dC1nZWNrbzMiKTpFeHQuaXNPcGVyYT8iZXh0LW9wZXJhIjpFeHQuaXNXZWJLaXQ/ImV4dC13
ZWJraXQiOiIiXTtpZihFeHQuaXNTYWZhcmkpe2IucHVzaCgiZXh0LXNhZmFyaSAiKyhFeHQuaXNT
YWZhcmkyPyJleHQtc2FmYXJpMiI6KEV4dC5pc1NhZmFyaTM/ImV4dC1zYWZhcmkzIjoiZXh0LXNh
ZmFyaTQiKSkpfWVsc2V7aWYoRXh0LmlzQ2hyb21lKXtiLnB1c2goImV4dC1jaHJvbWUiKX19aWYo
RXh0LmlzTWFjKXtiLnB1c2goImV4dC1tYWMiKX1pZihFeHQuaXNMaW51eCl7Yi5wdXNoKCJleHQt
bGludXgiKX1pZihFeHQuaXNTdHJpY3R8fEV4dC5pc0JvcmRlckJveCl7dmFyIGQ9Yy5wYXJlbnRO
b2RlO2lmKGQpe2QuY2xhc3NOYW1lKz1FeHQuaXNTdHJpY3Q/IiBleHQtc3RyaWN0IjoiIGV4dC1i
b3JkZXItYm94In19Yy5jbGFzc05hbWUrPWIuam9pbigiICIpO3JldHVybiB0cnVlfTtpZighYSgp
KXtFeHQub25SZWFkeShhKX19KSgpO0V4dC5FdmVudE9iamVjdD1mdW5jdGlvbigpe3ZhciBiPUV4
dC5saWIuRXZlbnQsYT17MzoxMyw2MzIzNDozNyw2MzIzNTozOSw2MzIzMjozOCw2MzIzMzo0MCw2
MzI3NjozMyw2MzI3NzozNCw2MzI3Mjo0Niw2MzI3MzozNiw2MzI3NTozNX0sYz1FeHQuaXNJRT97
MTowLDQ6MSwyOjJ9OihFeHQuaXNXZWJLaXQ/ezE6MCwyOjEsMzoyfTp7MDowLDE6MSwyOjJ9KTtF
eHQuRXZlbnRPYmplY3RJbXBsPWZ1bmN0aW9uKGQpe2lmKGQpe3RoaXMuc2V0RXZlbnQoZC5icm93
c2VyRXZlbnR8fGQpfX07RXh0LkV2ZW50T2JqZWN0SW1wbC5wcm90b3R5cGU9e3NldEV2ZW50OmZ1
bmN0aW9uKGcpe3ZhciBkPXRoaXM7aWYoZz09ZHx8KGcmJmcuYnJvd3NlckV2ZW50KSl7cmV0dXJu
IGd9ZC5icm93c2VyRXZlbnQ9ZztpZihnKXtkLmJ1dHRvbj1nLmJ1dHRvbj9jW2cuYnV0dG9uXToo
Zy53aGljaD9nLndoaWNoLTE6LTEpO2lmKGcudHlwZT09ImNsaWNrIiYmZC5idXR0b249PS0xKXtk
LmJ1dHRvbj0wfWQudHlwZT1nLnR5cGU7ZC5zaGlmdEtleT1nLnNoaWZ0S2V5O2QuY3RybEtleT1n
LmN0cmxLZXl8fGcubWV0YUtleXx8ZmFsc2U7ZC5hbHRLZXk9Zy5hbHRLZXk7ZC5rZXlDb2RlPWcu
a2V5Q29kZTtkLmNoYXJDb2RlPWcuY2hhckNvZGU7ZC50YXJnZXQ9Yi5nZXRUYXJnZXQoZyk7ZC54
eT1iLmdldFhZKGcpfWVsc2V7ZC5idXR0b249LTE7ZC5zaGlmdEtleT1mYWxzZTtkLmN0cmxLZXk9
ZmFsc2U7ZC5hbHRLZXk9ZmFsc2U7ZC5rZXlDb2RlPTA7ZC5jaGFyQ29kZT0wO2QudGFyZ2V0PW51
bGw7ZC54eT1bMCwwXX1yZXR1cm4gZH0sc3RvcEV2ZW50OmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztp
ZihkLmJyb3dzZXJFdmVudCl7aWYoZC5icm93c2VyRXZlbnQudHlwZT09Im1vdXNlZG93biIpe0V4
dC5FdmVudE1hbmFnZXIuc3RvcHBlZE1vdXNlRG93bkV2ZW50LmZpcmUoZCl9Yi5zdG9wRXZlbnQo
ZC5icm93c2VyRXZlbnQpfX0scHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmJyb3dz
ZXJFdmVudCl7Yi5wcmV2ZW50RGVmYXVsdCh0aGlzLmJyb3dzZXJFdmVudCl9fSxzdG9wUHJvcGFn
YXRpb246ZnVuY3Rpb24oKXt2YXIgZD10aGlzO2lmKGQuYnJvd3NlckV2ZW50KXtpZihkLmJyb3dz
ZXJFdmVudC50eXBlPT0ibW91c2Vkb3duIil7RXh0LkV2ZW50TWFuYWdlci5zdG9wcGVkTW91c2VE
b3duRXZlbnQuZmlyZShkKX1iLnN0b3BQcm9wYWdhdGlvbihkLmJyb3dzZXJFdmVudCl9fSxnZXRD
aGFyQ29kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoYXJDb2RlfHx0aGlzLmtleUNvZGV9LGdl
dEtleTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZUtleSh0aGlzLmtleUNvZGV8fHRo
aXMuY2hhckNvZGUpfSxub3JtYWxpemVLZXk6ZnVuY3Rpb24oZCl7cmV0dXJuIEV4dC5pc1NhZmFy
aT8oYVtkXXx8ZCk6ZH0sZ2V0UGFnZVg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54eVswXX0sZ2V0
UGFnZVk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54eVsxXX0sZ2V0WFk6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy54eX0sZ2V0VGFyZ2V0OmZ1bmN0aW9uKGUsZyxkKXtyZXR1cm4gZT9FeHQuZmx5KHRo
aXMudGFyZ2V0KS5maW5kUGFyZW50KGUsZyxkKTooZD9FeHQuZ2V0KHRoaXMudGFyZ2V0KTp0aGlz
LnRhcmdldCl9LGdldFJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5icm93c2Vy
RXZlbnQ/Yi5nZXRSZWxhdGVkVGFyZ2V0KHRoaXMuYnJvd3NlckV2ZW50KTpudWxsfSxnZXRXaGVl
bERlbHRhOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5icm93c2VyRXZlbnQ7dmFyIGc9MDtpZihkLndo
ZWVsRGVsdGEpe2c9ZC53aGVlbERlbHRhLzEyMH1lbHNle2lmKGQuZGV0YWlsKXtnPS1kLmRldGFp
bC8zfX1yZXR1cm4gZ30sd2l0aGluOmZ1bmN0aW9uKGcsaCxkKXtpZihnKXt2YXIgZT10aGlzW2g/
ImdldFJlbGF0ZWRUYXJnZXQiOiJnZXRUYXJnZXQiXSgpO3JldHVybiBlJiYoKGQ/KGU9PUV4dC5n
ZXREb20oZykpOmZhbHNlKXx8RXh0LmZseShnKS5jb250YWlucyhlKSl9cmV0dXJuIGZhbHNlfX07
cmV0dXJuIG5ldyBFeHQuRXZlbnRPYmplY3RJbXBsKCl9KCk7KGZ1bmN0aW9uKCl7dmFyIGo9ZG9j
dW1lbnQ7RXh0LkVsZW1lbnQ9ZnVuY3Rpb24obyxwKXt2YXIgcT10eXBlb2Ygbz09InN0cmluZyI/
ai5nZXRFbGVtZW50QnlJZChvKTpvLHI7aWYoIXEpe3JldHVybiBudWxsfXI9cS5pZDtpZighcCYm
ciYmRXh0LmVsQ2FjaGVbcl0pe3JldHVybiBFeHQuZWxDYWNoZVtyXS5lbH10aGlzLmRvbT1xO3Ro
aXMuaWQ9cnx8RXh0LmlkKHEpfTt2YXIgYT1FeHQubGliLkRvbSxnPUV4dC5Eb21IZWxwZXIsbT1F
eHQubGliLkV2ZW50LGU9RXh0LmxpYi5BbmltLGg9RXh0LkVsZW1lbnQsYj1FeHQuZWxDYWNoZTto
LnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uKHQscSl7dmFyIHI9dGhpcy5kb20scCxzLHE9KHEhPT1m
YWxzZSkmJiEhci5zZXRBdHRyaWJ1dGU7Zm9yKHAgaW4gdCl7aWYodC5oYXNPd25Qcm9wZXJ0eShw
KSl7cz10W3BdO2lmKHA9PSJzdHlsZSIpe2cuYXBwbHlTdHlsZXMocixzKX1lbHNle2lmKHA9PSJj
bHMiKXtyLmNsYXNzTmFtZT1zfWVsc2V7aWYocSl7ci5zZXRBdHRyaWJ1dGUocCxzKX1lbHNle3Jb
cF09c319fX19cmV0dXJuIHRoaXN9LGRlZmF1bHRVbml0OiJweCIsaXM6ZnVuY3Rpb24obyl7cmV0
dXJuIEV4dC5Eb21RdWVyeS5pcyh0aGlzLmRvbSxvKX0sZm9jdXM6ZnVuY3Rpb24ocixxKXt2YXIg
bz10aGlzLHE9cXx8by5kb207dHJ5e2lmKE51bWJlcihyKSl7by5mb2N1cy5kZWZlcihyLG51bGws
W251bGwscV0pfWVsc2V7cS5mb2N1cygpfX1jYXRjaChwKXt9cmV0dXJuIG99LGJsdXI6ZnVuY3Rp
b24oKXt0cnl7dGhpcy5kb20uYmx1cigpfWNhdGNoKG8pe31yZXR1cm4gdGhpc30sZ2V0VmFsdWU6
ZnVuY3Rpb24obyl7dmFyIHA9dGhpcy5kb20udmFsdWU7cmV0dXJuIG8/cGFyc2VJbnQocCwxMCk6
cH0sYWRkTGlzdGVuZXI6ZnVuY3Rpb24obyxyLHEscCl7RXh0LkV2ZW50TWFuYWdlci5vbih0aGlz
LmRvbSxvLHIscXx8dGhpcyxwKTtyZXR1cm4gdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24o
byxxLHApe0V4dC5FdmVudE1hbmFnZXIucmVtb3ZlTGlzdGVuZXIodGhpcy5kb20sbyxxLHB8fHRo
aXMpO3JldHVybiB0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtFeHQuRXZlbnRN
YW5hZ2VyLnJlbW92ZUFsbCh0aGlzLmRvbSk7cmV0dXJuIHRoaXN9LHB1cmdlQWxsTGlzdGVuZXJz
OmZ1bmN0aW9uKCl7RXh0LkV2ZW50TWFuYWdlci5wdXJnZUVsZW1lbnQodGhpcyx0cnVlKTtyZXR1
cm4gdGhpc30sYWRkVW5pdHM6ZnVuY3Rpb24obyl7aWYobz09PSIifHxvPT0iYXV0byJ8fG89PT11
bmRlZmluZWQpe289b3x8IiJ9ZWxzZXtpZighaXNOYU4obyl8fCFrLnRlc3Qobykpe289bysodGhp
cy5kZWZhdWx0VW5pdHx8InB4Iil9fXJldHVybiBvfSxsb2FkOmZ1bmN0aW9uKHAscSxvKXtFeHQu
QWpheC5yZXF1ZXN0KEV4dC5hcHBseSh7cGFyYW1zOnEsdXJsOnAudXJsfHxwLGNhbGxiYWNrOm8s
ZWw6dGhpcy5kb20saW5kaWNhdG9yVGV4dDpwLmluZGljYXRvclRleHR8fCIifSxFeHQuaXNPYmpl
Y3QocCk/cDp7fSkpO3JldHVybiB0aGlzfSxpc0JvcmRlckJveDpmdW5jdGlvbigpe3JldHVybiBp
Wyh0aGlzLmRvbS50YWdOYW1lfHwiIikudG9Mb3dlckNhc2UoKV18fEV4dC5pc0JvcmRlckJveH0s
cmVtb3ZlOmZ1bmN0aW9uKCl7dmFyIG89dGhpcyxwPW8uZG9tO2lmKHApe2RlbGV0ZSBvLmRvbTtF
eHQucmVtb3ZlTm9kZShwKX19LGhvdmVyOmZ1bmN0aW9uKHAsbyxyLHEpe3ZhciBzPXRoaXM7cy5v
bigibW91c2VlbnRlciIscCxyfHxzLmRvbSxxKTtzLm9uKCJtb3VzZWxlYXZlIixvLHJ8fHMuZG9t
LHEpO3JldHVybiBzfSxjb250YWluczpmdW5jdGlvbihvKXtyZXR1cm4gIW8/ZmFsc2U6RXh0Lmxp
Yi5Eb20uaXNBbmNlc3Rvcih0aGlzLmRvbSxvLmRvbT9vLmRvbTpvKX0sZ2V0QXR0cmlidXRlTlM6
ZnVuY3Rpb24ocCxvKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUobyxwKX0sZ2V0QXR0cmlidXRl
OkV4dC5pc0lFP2Z1bmN0aW9uKG8scSl7dmFyIHI9dGhpcy5kb20scD10eXBlb2YgcltxKyI6Iitv
XTtpZihbInVuZGVmaW5lZCIsInVua25vd24iXS5pbmRleE9mKHApPT0tMSl7cmV0dXJuIHJbcSsi
OiIrb119cmV0dXJuIHJbb119OmZ1bmN0aW9uKG8scCl7dmFyIHE9dGhpcy5kb207cmV0dXJuIHEu
Z2V0QXR0cmlidXRlTlMocCxvKXx8cS5nZXRBdHRyaWJ1dGUocCsiOiIrbyl8fHEuZ2V0QXR0cmli
dXRlKG8pfHxxW29dfSx1cGRhdGU6ZnVuY3Rpb24obyl7aWYodGhpcy5kb20pe3RoaXMuZG9tLmlu
bmVySFRNTD1vfXJldHVybiB0aGlzfX07dmFyIG49aC5wcm90b3R5cGU7aC5hZGRNZXRob2RzPWZ1
bmN0aW9uKHApe0V4dC5hcHBseShuLHApfTtuLm9uPW4uYWRkTGlzdGVuZXI7bi51bj1uLnJlbW92
ZUxpc3RlbmVyO24uYXV0b0JveEFkanVzdD10cnVlO3ZhciBrPS9cZCsocHh8ZW18JXxlbnxleHxw
dHxpbnxjbXxtbXxwYykkL2ksZDtoLmdldD1mdW5jdGlvbihwKXt2YXIgbyxzLHI7aWYoIXApe3Jl
dHVybiBudWxsfWlmKHR5cGVvZiBwPT0ic3RyaW5nIil7aWYoIShzPWouZ2V0RWxlbWVudEJ5SWQo
cCkpKXtyZXR1cm4gbnVsbH1pZihiW3BdJiZiW3BdLmVsKXtvPWJbcF0uZWw7by5kb209c31lbHNl
e289aC5hZGRUb0NhY2hlKG5ldyBoKHMpKX1yZXR1cm4gb31lbHNle2lmKHAudGFnTmFtZSl7aWYo
IShyPXAuaWQpKXtyPUV4dC5pZChwKX1pZihiW3JdJiZiW3JdLmVsKXtvPWJbcl0uZWw7by5kb209
cH1lbHNle289aC5hZGRUb0NhY2hlKG5ldyBoKHApKX1yZXR1cm4gb31lbHNle2lmKHAgaW5zdGFu
Y2VvZiBoKXtpZihwIT1kKXtwLmRvbT1qLmdldEVsZW1lbnRCeUlkKHAuaWQpfHxwLmRvbX1yZXR1
cm4gcH1lbHNle2lmKHAuaXNDb21wb3NpdGUpe3JldHVybiBwfWVsc2V7aWYoRXh0LmlzQXJyYXko
cCkpe3JldHVybiBoLnNlbGVjdChwKX1lbHNle2lmKHA9PWope2lmKCFkKXt2YXIgcT1mdW5jdGlv
bigpe307cS5wcm90b3R5cGU9aC5wcm90b3R5cGU7ZD1uZXcgcSgpO2QuZG9tPWp9cmV0dXJuIGR9
fX19fX1yZXR1cm4gbnVsbH07aC5hZGRUb0NhY2hlPWZ1bmN0aW9uKG8scCl7cD1wfHxvLmlkO2Jb
cF09e2VsOm8sZGF0YTp7fSxldmVudHM6e319O3JldHVybiBvfTtoLmRhdGE9ZnVuY3Rpb24ocCxv
LHEpe3A9aC5nZXQocCk7aWYoIXApe3JldHVybiBudWxsfXZhciByPWJbcC5pZF0uZGF0YTtpZihh
cmd1bWVudHMubGVuZ3RoPT0yKXtyZXR1cm4gcltvXX1lbHNle3JldHVybihyW29dPXEpfX07ZnVu
Y3Rpb24gbCgpe2lmKCFFeHQuZW5hYmxlR2FyYmFnZUNvbGxlY3Rvcil7Y2xlYXJJbnRlcnZhbCho
LmNvbGxlY3RvclRocmVhZElkKX1lbHNle3ZhciBwLHIsdSxzO2ZvcihwIGluIGIpe3M9YltwXTtp
ZihzLnNraXBHQyl7Y29udGludWV9cj1zLmVsO3U9ci5kb207aWYoIXV8fCF1LnBhcmVudE5vZGV8
fCghdS5vZmZzZXRQYXJlbnQmJiFqLmdldEVsZW1lbnRCeUlkKHApKSl7aWYoRXh0LmVuYWJsZUxp
c3RlbmVyQ29sbGVjdGlvbil7RXh0LkV2ZW50TWFuYWdlci5yZW1vdmVBbGwodSl9ZGVsZXRlIGJb
cF19fWlmKEV4dC5pc0lFKXt2YXIgcT17fTtmb3IocCBpbiBiKXtxW3BdPWJbcF19Yj1FeHQuZWxD
YWNoZT1xfX19aC5jb2xsZWN0b3JUaHJlYWRJZD1zZXRJbnRlcnZhbChsLDMwMDAwKTt2YXIgYz1m
dW5jdGlvbigpe307Yy5wcm90b3R5cGU9aC5wcm90b3R5cGU7aC5GbHl3ZWlnaHQ9ZnVuY3Rpb24o
byl7dGhpcy5kb209b307aC5GbHl3ZWlnaHQucHJvdG90eXBlPW5ldyBjKCk7aC5GbHl3ZWlnaHQu
cHJvdG90eXBlLmlzRmx5d2VpZ2h0PXRydWU7aC5fZmx5d2VpZ2h0cz17fTtoLmZseT1mdW5jdGlv
bihxLG8pe3ZhciBwPW51bGw7bz1vfHwiX2dsb2JhbCI7aWYocT1FeHQuZ2V0RG9tKHEpKXsoaC5f
Zmx5d2VpZ2h0c1tvXT1oLl9mbHl3ZWlnaHRzW29dfHxuZXcgaC5GbHl3ZWlnaHQoKSkuZG9tPXE7
cD1oLl9mbHl3ZWlnaHRzW29dfXJldHVybiBwfTtFeHQuZ2V0PWguZ2V0O0V4dC5mbHk9aC5mbHk7
dmFyIGk9RXh0LmlzU3RyaWN0P3tzZWxlY3Q6MX06e2lucHV0OjEsc2VsZWN0OjEsdGV4dGFyZWE6
MX07aWYoRXh0LmlzSUV8fEV4dC5pc0dlY2tvKXtpLmJ1dHRvbj0xfUV4dC5FdmVudE1hbmFnZXIu
b24od2luZG93LCJ1bmxvYWQiLGZ1bmN0aW9uKCl7ZGVsZXRlIGI7ZGVsZXRlIGguX2ZseXdlaWdo
dHN9KX0pKCk7RXh0LkVsZW1lbnQuYWRkTWV0aG9kcyhmdW5jdGlvbigpe3ZhciBkPSJwYXJlbnRO
b2RlIixiPSJuZXh0U2libGluZyIsYz0icHJldmlvdXNTaWJsaW5nIixlPUV4dC5Eb21RdWVyeSxh
PUV4dC5nZXQ7cmV0dXJue2ZpbmRQYXJlbnQ6ZnVuY3Rpb24obSxsLGgpe3ZhciBqPXRoaXMuZG9t
LGc9ZG9jdW1lbnQuYm9keSxrPTAsaTtpZihFeHQuaXNHZWNrbyYmT2JqZWN0LnByb3RvdHlwZS50
b1N0cmluZy5jYWxsKGopPT0iW29iamVjdCBYVUxFbGVtZW50XSIpe3JldHVybiBudWxsfWw9bHx8
NTA7aWYoaXNOYU4obCkpe2k9RXh0LmdldERvbShsKTtsPU51bWJlci5NQVhfVkFMVUV9d2hpbGUo
aiYmai5ub2RlVHlwZT09MSYmazxsJiZqIT1nJiZqIT1pKXtpZihlLmlzKGosbSkpe3JldHVybiBo
P2Eoaik6an1rKys7aj1qLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9LGZpbmRQYXJlbnROb2RlOmZ1
bmN0aW9uKGosaSxnKXt2YXIgaD1FeHQuZmx5KHRoaXMuZG9tLnBhcmVudE5vZGUsIl9pbnRlcm5h
bCIpO3JldHVybiBoP2guZmluZFBhcmVudChqLGksZyk6bnVsbH0sdXA6ZnVuY3Rpb24oaCxnKXty
ZXR1cm4gdGhpcy5maW5kUGFyZW50Tm9kZShoLGcsdHJ1ZSl9LHNlbGVjdDpmdW5jdGlvbihnKXty
ZXR1cm4gRXh0LkVsZW1lbnQuc2VsZWN0KGcsdGhpcy5kb20pfSxxdWVyeTpmdW5jdGlvbihnKXty
ZXR1cm4gZS5zZWxlY3QoZyx0aGlzLmRvbSl9LGNoaWxkOmZ1bmN0aW9uKGcsaCl7dmFyIGk9ZS5z
ZWxlY3ROb2RlKGcsdGhpcy5kb20pO3JldHVybiBoP2k6YShpKX0sZG93bjpmdW5jdGlvbihnLGgp
e3ZhciBpPWUuc2VsZWN0Tm9kZSgiID4gIitnLHRoaXMuZG9tKTtyZXR1cm4gaD9pOmEoaSl9LHBh
cmVudDpmdW5jdGlvbihnLGgpe3JldHVybiB0aGlzLm1hdGNoTm9kZShkLGQsZyxoKX0sbmV4dDpm
dW5jdGlvbihnLGgpe3JldHVybiB0aGlzLm1hdGNoTm9kZShiLGIsZyxoKX0scHJldjpmdW5jdGlv
bihnLGgpe3JldHVybiB0aGlzLm1hdGNoTm9kZShjLGMsZyxoKX0sZmlyc3Q6ZnVuY3Rpb24oZyxo
KXtyZXR1cm4gdGhpcy5tYXRjaE5vZGUoYiwiZmlyc3RDaGlsZCIsZyxoKX0sbGFzdDpmdW5jdGlv
bihnLGgpe3JldHVybiB0aGlzLm1hdGNoTm9kZShjLCJsYXN0Q2hpbGQiLGcsaCl9LG1hdGNoTm9k
ZTpmdW5jdGlvbihoLGssZyxpKXt2YXIgaj10aGlzLmRvbVtrXTt3aGlsZShqKXtpZihqLm5vZGVU
eXBlPT0xJiYoIWd8fGUuaXMoaixnKSkpe3JldHVybiAhaT9hKGopOmp9aj1qW2hdfXJldHVybiBu
dWxsfX19KCkpO0V4dC5FbGVtZW50LmFkZE1ldGhvZHMoZnVuY3Rpb24oKXt2YXIgYz1FeHQuZ2V0
RG9tLGE9RXh0LmdldCxiPUV4dC5Eb21IZWxwZXI7cmV0dXJue2FwcGVuZENoaWxkOmZ1bmN0aW9u
KGQpe3JldHVybiBhKGQpLmFwcGVuZFRvKHRoaXMpfSxhcHBlbmRUbzpmdW5jdGlvbihkKXtjKGQp
LmFwcGVuZENoaWxkKHRoaXMuZG9tKTtyZXR1cm4gdGhpc30saW5zZXJ0QmVmb3JlOmZ1bmN0aW9u
KGQpeyhkPWMoZCkpLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tLGQpO3JldHVybiB0
aGlzfSxpbnNlcnRBZnRlcjpmdW5jdGlvbihkKXsoZD1jKGQpKS5wYXJlbnROb2RlLmluc2VydEJl
Zm9yZSh0aGlzLmRvbSxkLm5leHRTaWJsaW5nKTtyZXR1cm4gdGhpc30saW5zZXJ0Rmlyc3Q6ZnVu
Y3Rpb24oZSxkKXtlPWV8fHt9O2lmKGUubm9kZVR5cGV8fGUuZG9tfHx0eXBlb2YgZT09InN0cmlu
ZyIpe2U9YyhlKTt0aGlzLmRvbS5pbnNlcnRCZWZvcmUoZSx0aGlzLmRvbS5maXJzdENoaWxkKTty
ZXR1cm4gIWQ/YShlKTplfWVsc2V7cmV0dXJuIHRoaXMuY3JlYXRlQ2hpbGQoZSx0aGlzLmRvbS5m
aXJzdENoaWxkLGQpfX0scmVwbGFjZTpmdW5jdGlvbihkKXtkPWEoZCk7dGhpcy5pbnNlcnRCZWZv
cmUoZCk7ZC5yZW1vdmUoKTtyZXR1cm4gdGhpc30scmVwbGFjZVdpdGg6ZnVuY3Rpb24oZCl7dmFy
IGU9dGhpcztpZihkLm5vZGVUeXBlfHxkLmRvbXx8dHlwZW9mIGQ9PSJzdHJpbmciKXtkPWMoZCk7
ZS5kb20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZCxlLmRvbSl9ZWxzZXtkPWIuaW5zZXJ0QmVm
b3JlKGUuZG9tLGQpfWRlbGV0ZSBFeHQuZWxDYWNoZVtlLmlkXTtFeHQucmVtb3ZlTm9kZShlLmRv
bSk7ZS5pZD1FeHQuaWQoZS5kb209ZCk7RXh0LkVsZW1lbnQuYWRkVG9DYWNoZShlLmlzRmx5d2Vp
Z2h0P25ldyBFeHQuRWxlbWVudChlLmRvbSk6ZSk7cmV0dXJuIGV9LGNyZWF0ZUNoaWxkOmZ1bmN0
aW9uKGUsZCxnKXtlPWV8fHt0YWc6ImRpdiJ9O3JldHVybiBkP2IuaW5zZXJ0QmVmb3JlKGQsZSxn
IT09dHJ1ZSk6YlshdGhpcy5kb20uZmlyc3RDaGlsZD8ib3ZlcndyaXRlIjoiYXBwZW5kIl0odGhp
cy5kb20sZSxnIT09dHJ1ZSl9LHdyYXA6ZnVuY3Rpb24oZCxlKXt2YXIgZz1iLmluc2VydEJlZm9y
ZSh0aGlzLmRvbSxkfHx7dGFnOiJkaXYifSwhZSk7Zy5kb20/Zy5kb20uYXBwZW5kQ2hpbGQodGhp
cy5kb20pOmcuYXBwZW5kQ2hpbGQodGhpcy5kb20pO3JldHVybiBnfSxpbnNlcnRIdG1sOmZ1bmN0
aW9uKGUsZyxkKXt2YXIgaD1iLmluc2VydEh0bWwoZSx0aGlzLmRvbSxnKTtyZXR1cm4gZD9FeHQu
Z2V0KGgpOmh9fX0oKSk7RXh0LkVsZW1lbnQuYWRkTWV0aG9kcyhmdW5jdGlvbigpe3ZhciBoPXt9
LHg9LygtW2Etel0pL2dpLGI9e30scz1kb2N1bWVudC5kZWZhdWx0Vmlldyx1PUV4dC5pc0lFPyJz
dHlsZUZsb2F0IjoiY3NzRmxvYXQiLEM9L2FscGhhXChvcGFjaXR5PSguKilcKS9pLGw9L15ccyt8
XHMrJC9nLEE9RXh0LkVsZW1lbnQsZD0icGFkZGluZyIsYz0ibWFyZ2luIix5PSJib3JkZXIiLHQ9
Ii1sZWZ0IixxPSItcmlnaHQiLHc9Ii10b3AiLG89Ii1ib3R0b20iLGo9Ii13aWR0aCIscj1NYXRo
LHo9ImhpZGRlbiIsZT0iaXNDbGlwcGVkIixrPSJvdmVyZmxvdyIsbj0ib3ZlcmZsb3cteCIsbT0i
b3ZlcmZsb3cteSIsQj0ib3JpZ2luYWxDbGlwIixpPXtsOnkrdCtqLHI6eStxK2osdDp5K3craixi
OnkrbytqfSxnPXtsOmQrdCxyOmQrcSx0OmQrdyxiOmQrb30sYT17bDpjK3QscjpjK3EsdDpjK3cs
YjpjK299LEQ9RXh0LkVsZW1lbnQuZGF0YTtmdW5jdGlvbiBwKEUsRil7cmV0dXJuIEYuY2hhckF0
KDEpLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gdihFKXtyZXR1cm4gaFtFXXx8KGhbRV09RT09ImZs
b2F0Ij91OkUucmVwbGFjZSh4LHApKX1yZXR1cm57YWRqdXN0V2lkdGg6ZnVuY3Rpb24oRSl7dmFy
IEY9dGhpczt2YXIgRz1FeHQuaXNOdW1iZXIoRSk7aWYoRyYmRi5hdXRvQm94QWRqdXN0JiYhRi5p
c0JvcmRlckJveCgpKXtFLT0oRi5nZXRCb3JkZXJXaWR0aCgibHIiKStGLmdldFBhZGRpbmcoImxy
IikpfXJldHVybihHJiZFPDApPzA6RX0sYWRqdXN0SGVpZ2h0OmZ1bmN0aW9uKEUpe3ZhciBGPXRo
aXM7dmFyIEc9RXh0LmlzTnVtYmVyKEUpO2lmKEcmJkYuYXV0b0JveEFkanVzdCYmIUYuaXNCb3Jk
ZXJCb3goKSl7RS09KEYuZ2V0Qm9yZGVyV2lkdGgoInRiIikrRi5nZXRQYWRkaW5nKCJ0YiIpKX1y
ZXR1cm4oRyYmRTwwKT8wOkV9LGFkZENsYXNzOmZ1bmN0aW9uKEgpe3ZhciBJPXRoaXMsRyxFLEY7
SD1FeHQuaXNBcnJheShIKT9IOltIXTtmb3IoRz0wLEU9SC5sZW5ndGg7RzxFO0crKyl7Rj1IW0dd
O2lmKEYpe0kuZG9tLmNsYXNzTmFtZSs9KCFJLmhhc0NsYXNzKEYpJiZGPyIgIitGOiIiKX19cmV0
dXJuIEl9LHJhZGlvQ2xhc3M6ZnVuY3Rpb24oSCl7dmFyIEk9dGhpcy5kb20ucGFyZW50Tm9kZS5j
aGlsZE5vZGVzLEY7SD1FeHQuaXNBcnJheShIKT9IOltIXTtmb3IodmFyIEc9MCxFPUkubGVuZ3Ro
O0c8RTtHKyspe0Y9SVtHXTtpZihGJiZGLm5vZGVUeXBlPT0xKXtFeHQuZmx5KEYsIl9pbnRlcm5h
bCIpLnJlbW92ZUNsYXNzKEgpfX1yZXR1cm4gdGhpcy5hZGRDbGFzcyhIKX0scmVtb3ZlQ2xhc3M6
ZnVuY3Rpb24oSCl7dmFyIEk9dGhpcyxGO0g9RXh0LmlzQXJyYXkoSCk/SDpbSF07aWYoSS5kb20m
JkkuZG9tLmNsYXNzTmFtZSl7Zm9yKHZhciBHPTAsRT1ILmxlbmd0aDtHPEU7RysrKXtGPUhbR107
aWYoRil7SS5kb20uY2xhc3NOYW1lPUkuZG9tLmNsYXNzTmFtZS5yZXBsYWNlKGJbRl09YltGXXx8
bmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIrRisiKD86XFxzK3wkKSIsImciKSwiICIpfX19cmV0dXJu
IEl9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmhhc0NsYXNzKEUpP3RoaXMu
cmVtb3ZlQ2xhc3MoRSk6dGhpcy5hZGRDbGFzcyhFKX0saGFzQ2xhc3M6ZnVuY3Rpb24oRSl7cmV0
dXJuIEUmJigiICIrdGhpcy5kb20uY2xhc3NOYW1lKyIgIikuaW5kZXhPZigiICIrRSsiICIpIT0t
MX0scmVwbGFjZUNsYXNzOmZ1bmN0aW9uKEYsRSl7cmV0dXJuIHRoaXMucmVtb3ZlQ2xhc3MoRiku
YWRkQ2xhc3MoRSl9LGlzU3R5bGU6ZnVuY3Rpb24oRSxGKXtyZXR1cm4gdGhpcy5nZXRTdHlsZShF
KT09Rn0sZ2V0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gcyYmcy5nZXRDb21wdXRlZFN0eWxlP2Z1
bmN0aW9uKEspe3ZhciBIPXRoaXMuZG9tLEUsRyxGLEksSj1FeHQuaXNXZWJLaXQsSTtpZihIPT1k
b2N1bWVudCl7cmV0dXJuIG51bGx9Sz12KEspO2lmKEomJi9tYXJnaW5SaWdodC8udGVzdChLKSl7
ST10aGlzLmdldFN0eWxlKCJkaXNwbGF5Iik7SC5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2si
fUY9KEU9SC5zdHlsZVtLXSk/RTooRz1zLmdldENvbXB1dGVkU3R5bGUoSCwiIikpP0dbS106bnVs
bDtpZihKKXtpZihGPT0icmdiYSgwLCAwLCAwLCAwKSIpe0Y9InRyYW5zcGFyZW50In1lbHNle2lm
KEkpe0guc3R5bGUuZGlzcGxheT1JfX19cmV0dXJuIEZ9OmZ1bmN0aW9uKEkpe3ZhciBHPXRoaXMu
ZG9tLEUsRjtpZihHPT1kb2N1bWVudCl7cmV0dXJuIG51bGx9aWYoST09Im9wYWNpdHkiKXtpZihH
LnN0eWxlLmZpbHRlci5tYXRjaCl7aWYoRT1HLnN0eWxlLmZpbHRlci5tYXRjaChDKSl7dmFyIEg9
cGFyc2VGbG9hdChFWzFdKTtpZighaXNOYU4oSCkpe3JldHVybiBIP0gvMTAwOjB9fX1yZXR1cm4g
MX1JPXYoSSk7cmV0dXJuIEcuc3R5bGVbSV18fCgoRj1HLmN1cnJlbnRTdHlsZSk/RltJXTpudWxs
KX19KCksZ2V0Q29sb3I6ZnVuY3Rpb24oRSxGLEope3ZhciBIPXRoaXMuZ2V0U3R5bGUoRSksRz1F
eHQuaXNEZWZpbmVkKEopP0o6IiMiLEk7aWYoIUh8fC90cmFuc3BhcmVudHxpbmhlcml0Ly50ZXN0
KEgpKXtyZXR1cm4gRn1pZigvXnIvLnRlc3QoSCkpe0V4dC5lYWNoKEguc2xpY2UoNCxILmxlbmd0
aC0xKS5zcGxpdCgiLCIpLGZ1bmN0aW9uKEspe0k9cGFyc2VJbnQoSywxMCk7Rys9KEk8MTY/IjAi
OiIiKStJLnRvU3RyaW5nKDE2KX0pfWVsc2V7SD1ILnJlcGxhY2UoIiMiLCIiKTtHKz1ILmxlbmd0
aD09Mz9ILnJlcGxhY2UoL14oXHcpKFx3KShcdykkLywiJDEkMSQyJDIkMyQzIik6SH1yZXR1cm4o
Ry5sZW5ndGg+NT9HLnRvTG93ZXJDYXNlKCk6Ril9LHNldFN0eWxlOmZ1bmN0aW9uKEksSCl7dmFy
IEYsRyxFO2lmKCFFeHQuaXNPYmplY3QoSSkpe0Y9e307RltJXT1IO0k9Rn1mb3IoRyBpbiBJKXtI
PUlbR107Rz09Im9wYWNpdHkiP3RoaXMuc2V0T3BhY2l0eShIKTp0aGlzLmRvbS5zdHlsZVt2KEcp
XT1IfXJldHVybiB0aGlzfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKEYsRSl7dmFyIEk9dGhpcyxHPUku
ZG9tLnN0eWxlO2lmKCFFfHwhSS5hbmltKXtpZihFeHQuaXNJRSl7dmFyIEg9RjwxPyJhbHBoYShv
cGFjaXR5PSIrRioxMDArIikiOiIiLEo9Ry5maWx0ZXIucmVwbGFjZShDLCIiKS5yZXBsYWNlKGws
IiIpO0cuem9vbT0xO0cuZmlsdGVyPUorKEoubGVuZ3RoPjA/IiAiOiIiKStIfWVsc2V7Ry5vcGFj
aXR5PUZ9fWVsc2V7SS5hbmltKHtvcGFjaXR5Ont0bzpGfX0sSS5wcmVhbmltKGFyZ3VtZW50cywx
KSxudWxsLDAuMzUsImVhc2VJbiIpfXJldHVybiBJfSxjbGVhck9wYWNpdHk6ZnVuY3Rpb24oKXt2
YXIgRT10aGlzLmRvbS5zdHlsZTtpZihFeHQuaXNJRSl7aWYoIUV4dC5pc0VtcHR5KEUuZmlsdGVy
KSl7RS5maWx0ZXI9RS5maWx0ZXIucmVwbGFjZShDLCIiKS5yZXBsYWNlKGwsIiIpfX1lbHNle0Uu
b3BhY2l0eT1FWyItbW96LW9wYWNpdHkiXT1FWyIta2h0bWwtb3BhY2l0eSJdPSIifXJldHVybiB0
aGlzfSxnZXRIZWlnaHQ6ZnVuY3Rpb24oRyl7dmFyIEY9dGhpcyxJPUYuZG9tLEg9RXh0LmlzSUUm
JkYuaXNTdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxFPXIubWF4KEkub2Zmc2V0SGVpZ2h0LEg/MDpJ
LmNsaWVudEhlaWdodCl8fDA7RT0hRz9FOkUtRi5nZXRCb3JkZXJXaWR0aCgidGIiKS1GLmdldFBh
ZGRpbmcoInRiIik7cmV0dXJuIEU8MD8wOkV9LGdldFdpZHRoOmZ1bmN0aW9uKEYpe3ZhciBHPXRo
aXMsST1HLmRvbSxIPUV4dC5pc0lFJiZHLmlzU3R5bGUoImRpc3BsYXkiLCJub25lIiksRT1yLm1h
eChJLm9mZnNldFdpZHRoLEg/MDpJLmNsaWVudFdpZHRoKXx8MDtFPSFGP0U6RS1HLmdldEJvcmRl
cldpZHRoKCJsciIpLUcuZ2V0UGFkZGluZygibHIiKTtyZXR1cm4gRTwwPzA6RX0sc2V0V2lkdGg6
ZnVuY3Rpb24oRixFKXt2YXIgRz10aGlzO0Y9Ry5hZGp1c3RXaWR0aChGKTshRXx8IUcuYW5pbT9H
LmRvbS5zdHlsZS53aWR0aD1HLmFkZFVuaXRzKEYpOkcuYW5pbSh7d2lkdGg6e3RvOkZ9fSxHLnBy
ZWFuaW0oYXJndW1lbnRzLDEpKTtyZXR1cm4gR30sc2V0SGVpZ2h0OmZ1bmN0aW9uKEUsRil7dmFy
IEc9dGhpcztFPUcuYWRqdXN0SGVpZ2h0KEUpOyFGfHwhRy5hbmltP0cuZG9tLnN0eWxlLmhlaWdo
dD1HLmFkZFVuaXRzKEUpOkcuYW5pbSh7aGVpZ2h0Ont0bzpFfX0sRy5wcmVhbmltKGFyZ3VtZW50
cywxKSk7cmV0dXJuIEd9LGdldEJvcmRlcldpZHRoOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmFk
ZFN0eWxlcyhFLGkpfSxnZXRQYWRkaW5nOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmFkZFN0eWxl
cyhFLGcpfSxjbGlwOmZ1bmN0aW9uKCl7dmFyIEU9dGhpcyxGPUUuZG9tO2lmKCFEKEYsZSkpe0Qo
RixlLHRydWUpO0QoRixCLHtvOkUuZ2V0U3R5bGUoaykseDpFLmdldFN0eWxlKG4pLHk6RS5nZXRT
dHlsZShtKX0pO0Uuc2V0U3R5bGUoayx6KTtFLnNldFN0eWxlKG4seik7RS5zZXRTdHlsZShtLHop
fXJldHVybiBFfSx1bmNsaXA6ZnVuY3Rpb24oKXt2YXIgRT10aGlzLEc9RS5kb207aWYoRChHLGUp
KXtEKEcsZSxmYWxzZSk7dmFyIEY9RChHLEIpO2lmKEYubyl7RS5zZXRTdHlsZShrLEYubyl9aWYo
Ri54KXtFLnNldFN0eWxlKG4sRi54KX1pZihGLnkpe0Uuc2V0U3R5bGUobSxGLnkpfX1yZXR1cm4g
RX0sYWRkU3R5bGVzOmZ1bmN0aW9uKEosSSl7dmFyIEs9MCxGPUoubWF0Y2goL1x3L2cpLEg7Zm9y
KHZhciBHPTAsRT1GLmxlbmd0aDtHPEU7RysrKXtIPUZbR10mJnBhcnNlSW50KHRoaXMuZ2V0U3R5
bGUoSVtGW0ddXSksMTApO2lmKEgpe0srPXIuYWJzKEgpfX1yZXR1cm4gS30sbWFyZ2luczphfX0o
KSk7KGZ1bmN0aW9uKCl7dmFyIGE9RXh0LmxpYi5Eb20sYj0ibGVmdCIsZz0icmlnaHQiLGQ9InRv
cCIsaT0iYm90dG9tIixoPSJwb3NpdGlvbiIsYz0ic3RhdGljIixlPSJyZWxhdGl2ZSIsaj0iYXV0
byIsaz0iei1pbmRleCI7RXh0LkVsZW1lbnQuYWRkTWV0aG9kcyh7Z2V0WDpmdW5jdGlvbigpe3Jl
dHVybiBhLmdldFgodGhpcy5kb20pfSxnZXRZOmZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0WSh0aGlz
LmRvbSl9LGdldFhZOmZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0WFkodGhpcy5kb20pfSxnZXRPZmZz
ZXRzVG86ZnVuY3Rpb24obCl7dmFyIG49dGhpcy5nZXRYWSgpLG09RXh0LmZseShsLCJfaW50ZXJu
YWwiKS5nZXRYWSgpO3JldHVybltuWzBdLW1bMF0sblsxXS1tWzFdXX0sc2V0WDpmdW5jdGlvbihs
LG0pe3JldHVybiB0aGlzLnNldFhZKFtsLHRoaXMuZ2V0WSgpXSx0aGlzLmFuaW1UZXN0KGFyZ3Vt
ZW50cyxtLDEpKX0sc2V0WTpmdW5jdGlvbihtLGwpe3JldHVybiB0aGlzLnNldFhZKFt0aGlzLmdl
dFgoKSxtXSx0aGlzLmFuaW1UZXN0KGFyZ3VtZW50cyxsLDEpKX0sc2V0TGVmdDpmdW5jdGlvbihs
KXt0aGlzLnNldFN0eWxlKGIsdGhpcy5hZGRVbml0cyhsKSk7cmV0dXJuIHRoaXN9LHNldFRvcDpm
dW5jdGlvbihsKXt0aGlzLnNldFN0eWxlKGQsdGhpcy5hZGRVbml0cyhsKSk7cmV0dXJuIHRoaXN9
LHNldFJpZ2h0OmZ1bmN0aW9uKGwpe3RoaXMuc2V0U3R5bGUoZyx0aGlzLmFkZFVuaXRzKGwpKTty
ZXR1cm4gdGhpc30sc2V0Qm90dG9tOmZ1bmN0aW9uKGwpe3RoaXMuc2V0U3R5bGUoaSx0aGlzLmFk
ZFVuaXRzKGwpKTtyZXR1cm4gdGhpc30sc2V0WFk6ZnVuY3Rpb24obixsKXt2YXIgbT10aGlzO2lm
KCFsfHwhbS5hbmltKXthLnNldFhZKG0uZG9tLG4pfWVsc2V7bS5hbmltKHtwb2ludHM6e3RvOm59
fSxtLnByZWFuaW0oYXJndW1lbnRzLDEpLCJtb3Rpb24iKX1yZXR1cm4gbX0sc2V0TG9jYXRpb246
ZnVuY3Rpb24obCxuLG0pe3JldHVybiB0aGlzLnNldFhZKFtsLG5dLHRoaXMuYW5pbVRlc3QoYXJn
dW1lbnRzLG0sMikpfSxtb3ZlVG86ZnVuY3Rpb24obCxuLG0pe3JldHVybiB0aGlzLnNldFhZKFts
LG5dLHRoaXMuYW5pbVRlc3QoYXJndW1lbnRzLG0sMikpfSxnZXRMZWZ0OmZ1bmN0aW9uKGwpe3Jl
dHVybiAhbD90aGlzLmdldFgoKTpwYXJzZUludCh0aGlzLmdldFN0eWxlKGIpLDEwKXx8MH0sZ2V0
UmlnaHQ6ZnVuY3Rpb24obCl7dmFyIG09dGhpcztyZXR1cm4gIWw/bS5nZXRYKCkrbS5nZXRXaWR0
aCgpOihtLmdldExlZnQodHJ1ZSkrbS5nZXRXaWR0aCgpKXx8MH0sZ2V0VG9wOmZ1bmN0aW9uKGwp
e3JldHVybiAhbD90aGlzLmdldFkoKTpwYXJzZUludCh0aGlzLmdldFN0eWxlKGQpLDEwKXx8MH0s
Z2V0Qm90dG9tOmZ1bmN0aW9uKGwpe3ZhciBtPXRoaXM7cmV0dXJuICFsP20uZ2V0WSgpK20uZ2V0
SGVpZ2h0KCk6KG0uZ2V0VG9wKHRydWUpK20uZ2V0SGVpZ2h0KCkpfHwwfSxwb3NpdGlvbjpmdW5j
dGlvbihwLG8sbCxuKXt2YXIgbT10aGlzO2lmKCFwJiZtLmlzU3R5bGUoaCxjKSl7bS5zZXRTdHls
ZShoLGUpfWVsc2V7aWYocCl7bS5zZXRTdHlsZShoLHApfX1pZihvKXttLnNldFN0eWxlKGssbyl9
aWYobHx8bil7bS5zZXRYWShbbHx8ZmFsc2Usbnx8ZmFsc2VdKX19LGNsZWFyUG9zaXRpb25pbmc6
ZnVuY3Rpb24obCl7bD1sfHwiIjt0aGlzLnNldFN0eWxlKHtsZWZ0OmwscmlnaHQ6bCx0b3A6bCxi
b3R0b206bCwiei1pbmRleCI6IiIscG9zaXRpb246Y30pO3JldHVybiB0aGlzfSxnZXRQb3NpdGlv
bmluZzpmdW5jdGlvbigpe3ZhciBtPXRoaXMuZ2V0U3R5bGUoYik7dmFyIG49dGhpcy5nZXRTdHls
ZShkKTtyZXR1cm57cG9zaXRpb246dGhpcy5nZXRTdHlsZShoKSxsZWZ0Om0scmlnaHQ6bT8iIjp0
aGlzLmdldFN0eWxlKGcpLHRvcDpuLGJvdHRvbTpuPyIiOnRoaXMuZ2V0U3R5bGUoaSksInotaW5k
ZXgiOnRoaXMuZ2V0U3R5bGUoayl9fSxzZXRQb3NpdGlvbmluZzpmdW5jdGlvbihsKXt2YXIgbj10
aGlzLG09bi5kb20uc3R5bGU7bi5zZXRTdHlsZShsKTtpZihsLnJpZ2h0PT1qKXttLnJpZ2h0PSIi
fWlmKGwuYm90dG9tPT1qKXttLmJvdHRvbT0iIn1yZXR1cm4gbn0sdHJhbnNsYXRlUG9pbnRzOmZ1
bmN0aW9uKG0sdSl7dT1pc05hTihtWzFdKT91Om1bMV07bT1pc05hTihtWzBdKT9tOm1bMF07dmFy
IHE9dGhpcyxyPXEuaXNTdHlsZShoLGUpLHM9cS5nZXRYWSgpLG49cGFyc2VJbnQocS5nZXRTdHls
ZShiKSwxMCkscD1wYXJzZUludChxLmdldFN0eWxlKGQpLDEwKTtuPSFpc05hTihuKT9uOihyPzA6
cS5kb20ub2Zmc2V0TGVmdCk7cD0haXNOYU4ocCk/cDoocj8wOnEuZG9tLm9mZnNldFRvcCk7cmV0
dXJue2xlZnQ6KG0tc1swXStuKSx0b3A6KHUtc1sxXStwKX19LGFuaW1UZXN0OmZ1bmN0aW9uKG0s
bCxuKXtyZXR1cm4gISFsJiZ0aGlzLnByZWFuaW0/dGhpcy5wcmVhbmltKG0sbik6ZmFsc2V9fSl9
KSgpO0V4dC5FbGVtZW50LmFkZE1ldGhvZHMoe2lzU2Nyb2xsYWJsZTpmdW5jdGlvbigpe3ZhciBh
PXRoaXMuZG9tO3JldHVybiBhLnNjcm9sbEhlaWdodD5hLmNsaWVudEhlaWdodHx8YS5zY3JvbGxX
aWR0aD5hLmNsaWVudFdpZHRofSxzY3JvbGxUbzpmdW5jdGlvbihhLGIpe3RoaXMuZG9tWyJzY3Jv
bGwiKygvdG9wL2kudGVzdChhKT8iVG9wIjoiTGVmdCIpXT1iO3JldHVybiB0aGlzfSxnZXRTY3Jv
bGw6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmRvbSxoPWRvY3VtZW50LGE9aC5ib2R5LGM9aC5kb2N1
bWVudEVsZW1lbnQsYixnLGU7aWYoaT09aHx8aT09YSl7aWYoRXh0LmlzSUUmJkV4dC5pc1N0cmlj
dCl7Yj1jLnNjcm9sbExlZnQ7Zz1jLnNjcm9sbFRvcH1lbHNle2I9d2luZG93LnBhZ2VYT2Zmc2V0
O2c9d2luZG93LnBhZ2VZT2Zmc2V0fWU9e2xlZnQ6Ynx8KGE/YS5zY3JvbGxMZWZ0OjApLHRvcDpn
fHwoYT9hLnNjcm9sbFRvcDowKX19ZWxzZXtlPXtsZWZ0Omkuc2Nyb2xsTGVmdCx0b3A6aS5zY3Jv
bGxUb3B9fXJldHVybiBlfX0pO0V4dC5FbGVtZW50LlZJU0lCSUxJVFk9MTtFeHQuRWxlbWVudC5E
SVNQTEFZPTI7RXh0LkVsZW1lbnQuYWRkTWV0aG9kcyhmdW5jdGlvbigpe3ZhciBoPSJ2aXNpYmls
aXR5IixkPSJkaXNwbGF5IixiPSJoaWRkZW4iLGo9Im5vbmUiLGE9Im9yaWdpbmFsRGlzcGxheSIs
Yz0idmlzaWJpbGl0eU1vZGUiLGU9RXh0LkVsZW1lbnQuRElTUExBWSxnPUV4dC5FbGVtZW50LmRh
dGEsaT1mdW5jdGlvbihtKXt2YXIgbD1nKG0sYSk7aWYobD09PXVuZGVmaW5lZCl7ZyhtLGEsbD0i
Iil9cmV0dXJuIGx9LGs9ZnVuY3Rpb24obil7dmFyIGw9ZyhuLGMpO2lmKGw9PT11bmRlZmluZWQp
e2cobixjLGw9MSl9cmV0dXJuIGx9O3JldHVybntvcmlnaW5hbERpc3BsYXk6IiIsdmlzaWJpbGl0
eU1vZGU6MSxzZXRWaXNpYmlsaXR5TW9kZTpmdW5jdGlvbihsKXtnKHRoaXMuZG9tLGMsbCk7cmV0
dXJuIHRoaXN9LGFuaW1hdGU6ZnVuY3Rpb24obSxvLG4scCxsKXt0aGlzLmFuaW0obSx7ZHVyYXRp
b246byxjYWxsYmFjazpuLGVhc2luZzpwfSxsKTtyZXR1cm4gdGhpc30sYW5pbTpmdW5jdGlvbihv
LHAsbSxyLG4sbCl7bT1tfHwicnVuIjtwPXB8fHt9O3ZhciBxPXRoaXMscz1FeHQubGliLkFuaW1b
bV0ocS5kb20sbywocC5kdXJhdGlvbnx8cil8fDAuMzUsKHAuZWFzaW5nfHxuKXx8ImVhc2VPdXQi
LGZ1bmN0aW9uKCl7aWYobCl7bC5jYWxsKHEpfWlmKHAuY2FsbGJhY2spe3AuY2FsbGJhY2suY2Fs
bChwLnNjb3BlfHxxLHEscCl9fSxxKTtwLmFuaW09cztyZXR1cm4gc30scHJlYW5pbTpmdW5jdGlv
bihsLG0pe3JldHVybiAhbFttXT9mYWxzZTooRXh0LmlzT2JqZWN0KGxbbV0pP2xbbV06e2R1cmF0
aW9uOmxbbSsxXSxjYWxsYmFjazpsW20rMl0sZWFzaW5nOmxbbSszXX0pfSxpc1Zpc2libGU6ZnVu
Y3Rpb24oKXtyZXR1cm4gIXRoaXMuaXNTdHlsZShoLGIpJiYhdGhpcy5pc1N0eWxlKGQsail9LHNl
dFZpc2libGU6ZnVuY3Rpb24ocCxtKXt2YXIgbj10aGlzLG89bi5kb20sbD1rKHRoaXMuZG9tKT09
ZTtpZighbXx8IW4uYW5pbSl7aWYobCl7bi5zZXREaXNwbGF5ZWQocCl9ZWxzZXtuLmZpeERpc3Bs
YXkoKTtvLnN0eWxlLnZpc2liaWxpdHk9cD8idmlzaWJsZSI6Yn19ZWxzZXtpZihwKXtuLnNldE9w
YWNpdHkoMC4wMSk7bi5zZXRWaXNpYmxlKHRydWUpfW4uYW5pbSh7b3BhY2l0eTp7dG86KHA/MTow
KX19LG4ucHJlYW5pbShhcmd1bWVudHMsMSksbnVsbCwwLjM1LCJlYXNlSW4iLGZ1bmN0aW9uKCl7
aWYoIXApe28uc3R5bGVbbD9kOmhdPShsKT9qOmI7RXh0LmZseShvKS5zZXRPcGFjaXR5KDEpfX0p
fXJldHVybiBufSx0b2dnbGU6ZnVuY3Rpb24obCl7dmFyIG09dGhpczttLnNldFZpc2libGUoIW0u
aXNWaXNpYmxlKCksbS5wcmVhbmltKGFyZ3VtZW50cywwKSk7cmV0dXJuIG19LHNldERpc3BsYXll
ZDpmdW5jdGlvbihsKXtpZih0eXBlb2YgbD09ImJvb2xlYW4iKXtsPWw/aSh0aGlzLmRvbSk6an10
aGlzLnNldFN0eWxlKGQsbCk7cmV0dXJuIHRoaXN9LGZpeERpc3BsYXk6ZnVuY3Rpb24oKXt2YXIg
bD10aGlzO2lmKGwuaXNTdHlsZShkLGopKXtsLnNldFN0eWxlKGgsYik7bC5zZXRTdHlsZShkLGko
dGhpcy5kb20pKTtpZihsLmlzU3R5bGUoZCxqKSl7bC5zZXRTdHlsZShkLCJibG9jayIpfX19LGhp
ZGU6ZnVuY3Rpb24obCl7dGhpcy5zZXRWaXNpYmxlKGZhbHNlLHRoaXMucHJlYW5pbShhcmd1bWVu
dHMsMCkpO3JldHVybiB0aGlzfSxzaG93OmZ1bmN0aW9uKGwpe3RoaXMuc2V0VmlzaWJsZSh0cnVl
LHRoaXMucHJlYW5pbShhcmd1bWVudHMsMCkpO3JldHVybiB0aGlzfX19KCkpOyhmdW5jdGlvbigp
e3ZhciB5PW51bGwsQT11bmRlZmluZWQsaz10cnVlLHQ9ZmFsc2Usaj0ic2V0WCIsaD0ic2V0WSIs
YT0ic2V0WFkiLG49ImxlZnQiLGw9ImJvdHRvbSIscz0idG9wIixtPSJyaWdodCIscT0iaGVpZ2h0
IixnPSJ3aWR0aCIsaT0icG9pbnRzIix3PSJoaWRkZW4iLHo9ImFic29sdXRlIix1PSJ2aXNpYmxl
IixlPSJtb3Rpb24iLG89InBvc2l0aW9uIixyPSJlYXNlT3V0IixkPW5ldyBFeHQuRWxlbWVudC5G
bHl3ZWlnaHQoKSx2PXt9LHg9ZnVuY3Rpb24oQil7cmV0dXJuIEJ8fHt9fSxwPWZ1bmN0aW9uKEIp
e2QuZG9tPUI7ZC5pZD1FeHQuaWQoQik7cmV0dXJuIGR9LGM9ZnVuY3Rpb24oQil7aWYoIXZbQl0p
e3ZbQl09W119cmV0dXJuIHZbQl19LGI9ZnVuY3Rpb24oQyxCKXt2W0NdPUJ9O0V4dC5lbmFibGVG
eD1rO0V4dC5GeD17c3dpdGNoU3RhdGVtZW50czpmdW5jdGlvbihDLEQsQil7cmV0dXJuIEQuYXBw
bHkodGhpcyxCW0NdKX0sc2xpZGVJbjpmdW5jdGlvbihILEUpe0U9eChFKTt2YXIgSj10aGlzLEc9
Si5kb20sTT1HLnN0eWxlLE8sQixMLEQsQyxNLEksTixLLEY7SD1IfHwidCI7Si5xdWV1ZUZ4KEUs
ZnVuY3Rpb24oKXtPPXAoRykuZ2V0WFkoKTtwKEcpLmZpeERpc3BsYXkoKTtCPXAoRykuZ2V0RnhS
ZXN0b3JlKCk7TD17eDpPWzBdLHk6T1sxXSwwOk9bMF0sMTpPWzFdLHdpZHRoOkcub2Zmc2V0V2lk
dGgsaGVpZ2h0Okcub2Zmc2V0SGVpZ2h0fTtMLnJpZ2h0PUwueCtMLndpZHRoO0wuYm90dG9tPUwu
eStMLmhlaWdodDtwKEcpLnNldFdpZHRoKEwud2lkdGgpLnNldEhlaWdodChMLmhlaWdodCk7RD1w
KEcpLmZ4V3JhcChCLnBvcyxFLHcpO00udmlzaWJpbGl0eT11O00ucG9zaXRpb249ejtmdW5jdGlv
biBQKCl7cChHKS5meFVud3JhcChELEIucG9zLEUpO00ud2lkdGg9Qi53aWR0aDtNLmhlaWdodD1C
LmhlaWdodDtwKEcpLmFmdGVyRngoRSl9Tj17dG86W0wueCxMLnldfTtLPXt0bzpMLndpZHRofTtG
PXt0bzpMLmhlaWdodH07ZnVuY3Rpb24gUShVLFIsVixTLFgsWixhYyxhYixhYSxXLFQpe3ZhciBZ
PXt9O3AoVSkuc2V0V2lkdGgoVikuc2V0SGVpZ2h0KFMpO2lmKHAoVSlbWF0pe3AoVSlbWF0oWil9
UlthY109UlthYl09IjAiO2lmKGFhKXtZLndpZHRoPWFhfWlmKFcpe1kuaGVpZ2h0PVd9aWYoVCl7
WS5wb2ludHM9VH1yZXR1cm4gWX1JPXAoRykuc3dpdGNoU3RhdGVtZW50cyhILnRvTG93ZXJDYXNl
KCksUSx7dDpbRCxNLEwud2lkdGgsMCx5LHksbixsLHksRix5XSxsOltELE0sMCxMLmhlaWdodCx5
LHksbSxzLEsseSx5XSxyOltELE0sTC53aWR0aCxMLmhlaWdodCxqLEwucmlnaHQsbixzLHkseSxO
XSxiOltELE0sTC53aWR0aCxMLmhlaWdodCxoLEwuYm90dG9tLG4scyx5LEYsTl0sdGw6W0QsTSww
LDAseSx5LG0sbCxLLEYsTl0sYmw6W0QsTSwwLDAsaCxMLnkrTC5oZWlnaHQsbSxzLEssRixOXSxi
cjpbRCxNLDAsMCxhLFtMLnJpZ2h0LEwuYm90dG9tXSxuLHMsSyxGLE5dLHRyOltELE0sMCwwLGos
TC54K0wud2lkdGgsbixsLEssRixOXX0pO00udmlzaWJpbGl0eT11O3AoRCkuc2hvdygpO2FyZ3Vt
ZW50cy5jYWxsZWUuYW5pbT1wKEQpLmZ4YW5pbShJLEUsZSwwLjUscixQKX0pO3JldHVybiBKfSxz
bGlkZU91dDpmdW5jdGlvbihGLEQpe0Q9eChEKTt2YXIgSD10aGlzLEU9SC5kb20sSz1FLnN0eWxl
LEw9SC5nZXRYWSgpLEMsQixJLEosRz17dG86MH07Rj1GfHwidCI7SC5xdWV1ZUZ4KEQsZnVuY3Rp
b24oKXtCPXAoRSkuZ2V0RnhSZXN0b3JlKCk7ST17eDpMWzBdLHk6TFsxXSwwOkxbMF0sMTpMWzFd
LHdpZHRoOkUub2Zmc2V0V2lkdGgsaGVpZ2h0OkUub2Zmc2V0SGVpZ2h0fTtJLnJpZ2h0PUkueCtJ
LndpZHRoO0kuYm90dG9tPUkueStJLmhlaWdodDtwKEUpLnNldFdpZHRoKEkud2lkdGgpLnNldEhl
aWdodChJLmhlaWdodCk7Qz1wKEUpLmZ4V3JhcChCLnBvcyxELHUpO0sudmlzaWJpbGl0eT11O0su
cG9zaXRpb249ejtwKEMpLnNldFdpZHRoKEkud2lkdGgpLnNldEhlaWdodChJLmhlaWdodCk7ZnVu
Y3Rpb24gTSgpe0QudXNlRGlzcGxheT9wKEUpLnNldERpc3BsYXllZCh0KTpwKEUpLmhpZGUoKTtw
KEUpLmZ4VW53cmFwKEMsQi5wb3MsRCk7Sy53aWR0aD1CLndpZHRoO0suaGVpZ2h0PUIuaGVpZ2h0
O3AoRSkuYWZ0ZXJGeChEKX1mdW5jdGlvbiBOKE8sVyxVLFgsUyxWLFIsVCxRKXt2YXIgUD17fTtP
W1ddPU9bVV09IjAiO1BbWF09UztpZihWKXtQW1ZdPVJ9aWYoVCl7UFtUXT1RfXJldHVybiBQfUo9
cChFKS5zd2l0Y2hTdGF0ZW1lbnRzKEYudG9Mb3dlckNhc2UoKSxOLHt0OltLLG4sbCxxLEddLGw6
W0ssbSxzLGcsR10scjpbSyxuLHMsZyxHLGkse3RvOltJLnJpZ2h0LEkueV19XSxiOltLLG4scyxx
LEcsaSx7dG86W0kueCxJLmJvdHRvbV19XSx0bDpbSyxtLGwsZyxHLHEsR10sYmw6W0ssbSxzLGcs
RyxxLEcsaSx7dG86W0kueCxJLmJvdHRvbV19XSxicjpbSyxuLHMsZyxHLHEsRyxpLHt0bzpbSS54
K0kud2lkdGgsSS5ib3R0b21dfV0sdHI6W0ssbixsLGcsRyxxLEcsaSx7dG86W0kucmlnaHQsSS55
XX1dfSk7YXJndW1lbnRzLmNhbGxlZS5hbmltPXAoQykuZnhhbmltKEosRCxlLDAuNSxyLE0pfSk7
cmV0dXJuIEh9LHB1ZmY6ZnVuY3Rpb24oSCl7SD14KEgpO3ZhciBGPXRoaXMsRz1GLmRvbSxDPUcu
c3R5bGUsRCxCLEU7Ri5xdWV1ZUZ4KEgsZnVuY3Rpb24oKXtEPXAoRykuZ2V0V2lkdGgoKTtCPXAo
RykuZ2V0SGVpZ2h0KCk7cChHKS5jbGVhck9wYWNpdHkoKTtwKEcpLnNob3coKTtFPXAoRykuZ2V0
RnhSZXN0b3JlKCk7ZnVuY3Rpb24gSSgpe0gudXNlRGlzcGxheT9wKEcpLnNldERpc3BsYXllZCh0
KTpwKEcpLmhpZGUoKTtwKEcpLmNsZWFyT3BhY2l0eSgpO3AoRykuc2V0UG9zaXRpb25pbmcoRS5w
b3MpO0Mud2lkdGg9RS53aWR0aDtDLmhlaWdodD1FLmhlaWdodDtDLmZvbnRTaXplPSIiO3AoRyku
YWZ0ZXJGeChIKX1hcmd1bWVudHMuY2FsbGVlLmFuaW09cChHKS5meGFuaW0oe3dpZHRoOnt0bzpw
KEcpLmFkanVzdFdpZHRoKEQqMil9LGhlaWdodDp7dG86cChHKS5hZGp1c3RIZWlnaHQoQioyKX0s
cG9pbnRzOntieTpbLUQqMC41LC1CKjAuNV19LG9wYWNpdHk6e3RvOjB9LGZvbnRTaXplOnt0bzoy
MDAsdW5pdDoiJSJ9fSxILGUsMC41LHIsSSl9KTtyZXR1cm4gRn0sc3dpdGNoT2ZmOmZ1bmN0aW9u
KEYpe0Y9eChGKTt2YXIgRD10aGlzLEU9RC5kb20sQj1FLnN0eWxlLEM7RC5xdWV1ZUZ4KEYsZnVu
Y3Rpb24oKXtwKEUpLmNsZWFyT3BhY2l0eSgpO3AoRSkuY2xpcCgpO0M9cChFKS5nZXRGeFJlc3Rv
cmUoKTtmdW5jdGlvbiBHKCl7Ri51c2VEaXNwbGF5P3AoRSkuc2V0RGlzcGxheWVkKHQpOnAoRSku
aGlkZSgpO3AoRSkuY2xlYXJPcGFjaXR5KCk7cChFKS5zZXRQb3NpdGlvbmluZyhDLnBvcyk7Qi53
aWR0aD1DLndpZHRoO0IuaGVpZ2h0PUMuaGVpZ2h0O3AoRSkuYWZ0ZXJGeChGKX1wKEUpLmZ4YW5p
bSh7b3BhY2l0eTp7dG86MC4zfX0seSx5LDAuMSx5LGZ1bmN0aW9uKCl7cChFKS5jbGVhck9wYWNp
dHkoKTsoZnVuY3Rpb24oKXtwKEUpLmZ4YW5pbSh7aGVpZ2h0Ont0bzoxfSxwb2ludHM6e2J5Olsw
LHAoRSkuZ2V0SGVpZ2h0KCkqMC41XX19LEYsZSwwLjMsImVhc2VJbiIsRyl9KS5kZWZlcigxMDAp
fSl9KTtyZXR1cm4gRH0saGlnaGxpZ2h0OmZ1bmN0aW9uKEQsSCl7SD14KEgpO3ZhciBGPXRoaXMs
Rz1GLmRvbSxCPUguYXR0cnx8ImJhY2tncm91bmRDb2xvciIsQz17fSxFO0YucXVldWVGeChILGZ1
bmN0aW9uKCl7cChHKS5jbGVhck9wYWNpdHkoKTtwKEcpLnNob3coKTtmdW5jdGlvbiBJKCl7Ry5z
dHlsZVtCXT1FO3AoRykuYWZ0ZXJGeChIKX1FPUcuc3R5bGVbQl07Q1tCXT17ZnJvbTpEfHwiZmZm
ZjljIix0bzpILmVuZENvbG9yfHxwKEcpLmdldENvbG9yKEIpfHwiZmZmZmZmIn07YXJndW1lbnRz
LmNhbGxlZS5hbmltPXAoRykuZnhhbmltKEMsSCwiY29sb3IiLDEsImVhc2VJbiIsSSl9KTtyZXR1
cm4gRn0sZnJhbWU6ZnVuY3Rpb24oQixFLEgpe0g9eChIKTt2YXIgRD10aGlzLEc9RC5kb20sQyxG
O0QucXVldWVGeChILGZ1bmN0aW9uKCl7Qj1CfHwiI0MzREFGOSI7aWYoQi5sZW5ndGg9PTYpe0I9
IiMiK0J9RT1FfHwxO3AoRykuc2hvdygpO3ZhciBMPXAoRykuZ2V0WFkoKSxKPXt4OkxbMF0seTpM
WzFdLDA6TFswXSwxOkxbMV0sd2lkdGg6Ry5vZmZzZXRXaWR0aCxoZWlnaHQ6Ry5vZmZzZXRIZWln
aHR9LEk9ZnVuY3Rpb24oKXtDPXAoZG9jdW1lbnQuYm9keXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50KS5jcmVhdGVDaGlsZCh7c3R5bGU6e3Bvc2l0aW9uOnosInotaW5kZXgiOjM1MDAwLGJvcmRl
cjoiMHB4IHNvbGlkICIrQn19KTtyZXR1cm4gQy5xdWV1ZUZ4KHt9LEspfTthcmd1bWVudHMuY2Fs
bGVlLmFuaW09e2lzQW5pbWF0ZWQ6dHJ1ZSxzdG9wOmZ1bmN0aW9uKCl7RT0wO0Muc3RvcEZ4KCl9
fTtmdW5jdGlvbiBLKCl7dmFyIE09RXh0LmlzQm9yZGVyQm94PzI6MTtGPUMuYW5pbSh7dG9wOntm
cm9tOkoueSx0bzpKLnktMjB9LGxlZnQ6e2Zyb206Si54LHRvOkoueC0yMH0sYm9yZGVyV2lkdGg6
e2Zyb206MCx0bzoxMH0sb3BhY2l0eTp7ZnJvbToxLHRvOjB9LGhlaWdodDp7ZnJvbTpKLmhlaWdo
dCx0bzpKLmhlaWdodCsyMCpNfSx3aWR0aDp7ZnJvbTpKLndpZHRoLHRvOkoud2lkdGgrMjAqTX19
LHtkdXJhdGlvbjpILmR1cmF0aW9ufHwxLGNhbGxiYWNrOmZ1bmN0aW9uKCl7Qy5yZW1vdmUoKTst
LUU+MD9JKCk6cChHKS5hZnRlckZ4KEgpfX0pO2FyZ3VtZW50cy5jYWxsZWUuYW5pbT17aXNBbmlt
YXRlZDp0cnVlLHN0b3A6ZnVuY3Rpb24oKXtGLnN0b3AoKX19fUkoKX0pO3JldHVybiBEfSxwYXVz
ZTpmdW5jdGlvbihEKXt2YXIgQz10aGlzLmRvbSxCO3RoaXMucXVldWVGeCh7fSxmdW5jdGlvbigp
e0I9c2V0VGltZW91dChmdW5jdGlvbigpe3AoQykuYWZ0ZXJGeCh7fSl9LEQqMTAwMCk7YXJndW1l
bnRzLmNhbGxlZS5hbmltPXtpc0FuaW1hdGVkOnRydWUsc3RvcDpmdW5jdGlvbigpe2NsZWFyVGlt
ZW91dChCKTtwKEMpLmFmdGVyRngoe30pfX19KTtyZXR1cm4gdGhpc30sZmFkZUluOmZ1bmN0aW9u
KEQpe0Q9eChEKTt2YXIgQj10aGlzLEM9Qi5kb20sRT1ELmVuZE9wYWNpdHl8fDE7Qi5xdWV1ZUZ4
KEQsZnVuY3Rpb24oKXtwKEMpLnNldE9wYWNpdHkoMCk7cChDKS5maXhEaXNwbGF5KCk7Qy5zdHls
ZS52aXNpYmlsaXR5PXU7YXJndW1lbnRzLmNhbGxlZS5hbmltPXAoQykuZnhhbmltKHtvcGFjaXR5
Ont0bzpFfX0sRCx5LDAuNSxyLGZ1bmN0aW9uKCl7aWYoRT09MSl7cChDKS5jbGVhck9wYWNpdHko
KX1wKEMpLmFmdGVyRngoRCl9KX0pO3JldHVybiBCfSxmYWRlT3V0OmZ1bmN0aW9uKEUpe0U9eChF
KTt2YXIgQz10aGlzLEQ9Qy5kb20sQj1ELnN0eWxlLEY9RS5lbmRPcGFjaXR5fHwwO0MucXVldWVG
eChFLGZ1bmN0aW9uKCl7YXJndW1lbnRzLmNhbGxlZS5hbmltPXAoRCkuZnhhbmltKHtvcGFjaXR5
Ont0bzpGfX0sRSx5LDAuNSxyLGZ1bmN0aW9uKCl7aWYoRj09MCl7RXh0LkVsZW1lbnQuZGF0YShE
LCJ2aXNpYmlsaXR5TW9kZSIpPT1FeHQuRWxlbWVudC5ESVNQTEFZfHxFLnVzZURpc3BsYXk/Qi5k
aXNwbGF5PSJub25lIjpCLnZpc2liaWxpdHk9dztwKEQpLmNsZWFyT3BhY2l0eSgpfXAoRCkuYWZ0
ZXJGeChFKX0pfSk7cmV0dXJuIEN9LHNjYWxlOmZ1bmN0aW9uKEIsQyxEKXt0aGlzLnNoaWZ0KEV4
dC5hcHBseSh7fSxELHt3aWR0aDpCLGhlaWdodDpDfSkpO3JldHVybiB0aGlzfSxzaGlmdDpmdW5j
dGlvbihEKXtEPXgoRCk7dmFyIEM9dGhpcy5kb20sQj17fTt0aGlzLnF1ZXVlRngoRCxmdW5jdGlv
bigpe2Zvcih2YXIgRSBpbiBEKXtpZihEW0VdIT1BKXtCW0VdPXt0bzpEW0VdfX19Qi53aWR0aD9C
LndpZHRoLnRvPXAoQykuYWRqdXN0V2lkdGgoRC53aWR0aCk6QjtCLmhlaWdodD9CLmhlaWdodC50
bz1wKEMpLmFkanVzdFdpZHRoKEQuaGVpZ2h0KTpCO2lmKEIueHx8Qi55fHxCLnh5KXtCLnBvaW50
cz1CLnh5fHx7dG86W0IueD9CLngudG86cChDKS5nZXRYKCksQi55P0IueS50bzpwKEMpLmdldFko
KV19fWFyZ3VtZW50cy5jYWxsZWUuYW5pbT1wKEMpLmZ4YW5pbShCLEQsZSwwLjM1LHIsZnVuY3Rp
b24oKXtwKEMpLmFmdGVyRngoRCl9KX0pO3JldHVybiB0aGlzfSxnaG9zdDpmdW5jdGlvbihFLEMp
e0M9eChDKTt2YXIgRz10aGlzLEQ9Ry5kb20sSj1ELnN0eWxlLEg9e29wYWNpdHk6e3RvOjB9LHBv
aW50czp7fX0sSz1ILnBvaW50cyxCLEksRjtFPUV8fCJiIjtHLnF1ZXVlRngoQyxmdW5jdGlvbigp
e0I9cChEKS5nZXRGeFJlc3RvcmUoKTtJPXAoRCkuZ2V0V2lkdGgoKTtGPXAoRCkuZ2V0SGVpZ2h0
KCk7ZnVuY3Rpb24gTCgpe0MudXNlRGlzcGxheT9wKEQpLnNldERpc3BsYXllZCh0KTpwKEQpLmhp
ZGUoKTtwKEQpLmNsZWFyT3BhY2l0eSgpO3AoRCkuc2V0UG9zaXRpb25pbmcoQi5wb3MpO0oud2lk
dGg9Qi53aWR0aDtKLmhlaWdodD1CLmhlaWdodDtwKEQpLmFmdGVyRngoQyl9Sy5ieT1wKEQpLnN3
aXRjaFN0YXRlbWVudHMoRS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKE4sTSl7cmV0dXJuW04sTV19
LHt0OlswLC1GXSxsOlstSSwwXSxyOltJLDBdLGI6WzAsRl0sdGw6Wy1JLC1GXSxibDpbLUksRl0s
YnI6W0ksRl0sdHI6W0ksLUZdfSk7YXJndW1lbnRzLmNhbGxlZS5hbmltPXAoRCkuZnhhbmltKEgs
QyxlLDAuNSxyLEwpfSk7cmV0dXJuIEd9LHN5bmNGeDpmdW5jdGlvbigpe3ZhciBCPXRoaXM7Qi5m
eERlZmF1bHRzPUV4dC5hcHBseShCLmZ4RGVmYXVsdHN8fHt9LHtibG9jazp0LGNvbmN1cnJlbnQ6
ayxzdG9wRng6dH0pO3JldHVybiBCfSxzZXF1ZW5jZUZ4OmZ1bmN0aW9uKCl7dmFyIEI9dGhpcztC
LmZ4RGVmYXVsdHM9RXh0LmFwcGx5KEIuZnhEZWZhdWx0c3x8e30se2Jsb2NrOnQsY29uY3VycmVu
dDp0LHN0b3BGeDp0fSk7cmV0dXJuIEJ9LG5leHRGeDpmdW5jdGlvbigpe3ZhciBCPWModGhpcy5k
b20uaWQpWzBdO2lmKEIpe0IuY2FsbCh0aGlzKX19LGhhc0FjdGl2ZUZ4OmZ1bmN0aW9uKCl7cmV0
dXJuIGModGhpcy5kb20uaWQpWzBdfSxzdG9wRng6ZnVuY3Rpb24oQil7dmFyIEM9dGhpcyxFPUMu
ZG9tLmlkO2lmKEMuaGFzQWN0aXZlRngoKSl7dmFyIEQ9YyhFKVswXTtpZihEJiZELmFuaW0pe2lm
KEQuYW5pbS5pc0FuaW1hdGVkKXtiKEUsW0RdKTtELmFuaW0uc3RvcChCIT09dW5kZWZpbmVkP0I6
ayl9ZWxzZXtiKEUsW10pfX19cmV0dXJuIEN9LGJlZm9yZUZ4OmZ1bmN0aW9uKEIpe2lmKHRoaXMu
aGFzQWN0aXZlRngoKSYmIUIuY29uY3VycmVudCl7aWYoQi5zdG9wRngpe3RoaXMuc3RvcEZ4KCk7
cmV0dXJuIGt9cmV0dXJuIHR9cmV0dXJuIGt9LGhhc0Z4QmxvY2s6ZnVuY3Rpb24oKXt2YXIgQj1j
KHRoaXMuZG9tLmlkKTtyZXR1cm4gQiYmQlswXSYmQlswXS5ibG9ja30scXVldWVGeDpmdW5jdGlv
bihFLEIpe3ZhciBDPXAodGhpcy5kb20pO2lmKCFDLmhhc0Z4QmxvY2soKSl7RXh0LmFwcGx5SWYo
RSxDLmZ4RGVmYXVsdHMpO2lmKCFFLmNvbmN1cnJlbnQpe3ZhciBEPUMuYmVmb3JlRngoRSk7Qi5i
bG9jaz1FLmJsb2NrO2MoQy5kb20uaWQpLnB1c2goQik7aWYoRCl7Qy5uZXh0RngoKX19ZWxzZXtC
LmNhbGwoQyl9fXJldHVybiBDfSxmeFdyYXA6ZnVuY3Rpb24oSCxGLEQpe3ZhciBFPXRoaXMuZG9t
LEMsQjtpZighRi53cmFwfHwhKEM9RXh0LmdldERvbShGLndyYXApKSl7aWYoRi5maXhQb3NpdGlv
bil7Qj1wKEUpLmdldFhZKCl9dmFyIEc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ry5z
dHlsZS52aXNpYmlsaXR5PUQ7Qz1FLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKEcsRSk7cChDKS5z
ZXRQb3NpdGlvbmluZyhIKTtpZihwKEMpLmlzU3R5bGUobywic3RhdGljIikpe3AoQykucG9zaXRp
b24oInJlbGF0aXZlIil9cChFKS5jbGVhclBvc2l0aW9uaW5nKCJhdXRvIik7cChDKS5jbGlwKCk7
Qy5hcHBlbmRDaGlsZChFKTtpZihCKXtwKEMpLnNldFhZKEIpfX1yZXR1cm4gQ30sZnhVbndyYXA6
ZnVuY3Rpb24oQyxGLEUpe3ZhciBEPXRoaXMuZG9tO3AoRCkuY2xlYXJQb3NpdGlvbmluZygpO3Ao
RCkuc2V0UG9zaXRpb25pbmcoRik7aWYoIUUud3JhcCl7dmFyIEI9cChDKS5kb20ucGFyZW50Tm9k
ZTtCLmluc2VydEJlZm9yZShELEMpO3AoQykucmVtb3ZlKCl9fSxnZXRGeFJlc3RvcmU6ZnVuY3Rp
b24oKXt2YXIgQj10aGlzLmRvbS5zdHlsZTtyZXR1cm57cG9zOnRoaXMuZ2V0UG9zaXRpb25pbmco
KSx3aWR0aDpCLndpZHRoLGhlaWdodDpCLmhlaWdodH19LGFmdGVyRng6ZnVuY3Rpb24oQyl7dmFy
IEI9dGhpcy5kb20sRD1CLmlkO2lmKEMuYWZ0ZXJTdHlsZSl7cChCKS5zZXRTdHlsZShDLmFmdGVy
U3R5bGUpfWlmKEMuYWZ0ZXJDbHMpe3AoQikuYWRkQ2xhc3MoQy5hZnRlckNscyl9aWYoQy5yZW1v
dmU9PWspe3AoQikucmVtb3ZlKCl9aWYoQy5jYWxsYmFjayl7Qy5jYWxsYmFjay5jYWxsKEMuc2Nv
cGUscChCKSl9aWYoIUMuY29uY3VycmVudCl7YyhEKS5zaGlmdCgpO3AoQikubmV4dEZ4KCl9fSxm
eGFuaW06ZnVuY3Rpb24oRSxGLEMsRyxELEIpe0M9Q3x8InJ1biI7Rj1GfHx7fTt2YXIgSD1FeHQu
bGliLkFuaW1bQ10odGhpcy5kb20sRSwoRi5kdXJhdGlvbnx8Ryl8fDAuMzUsKEYuZWFzaW5nfHxE
KXx8cixCLHRoaXMpO0YuYW5pbT1IO3JldHVybiBIfX07RXh0LkZ4LnJlc2l6ZT1FeHQuRnguc2Nh
bGU7RXh0LkVsZW1lbnQuYWRkTWV0aG9kcyhFeHQuRngpfSkoKTtFeHQuQ29tcG9zaXRlRWxlbWVu
dExpdGU9ZnVuY3Rpb24oYixhKXt0aGlzLmVsZW1lbnRzPVtdO3RoaXMuYWRkKGIsYSk7dGhpcy5l
bD1uZXcgRXh0LkVsZW1lbnQuRmx5d2VpZ2h0KCl9O0V4dC5Db21wb3NpdGVFbGVtZW50TGl0ZS5w
cm90b3R5cGU9e2lzQ29tcG9zaXRlOnRydWUsZ2V0RWxlbWVudDpmdW5jdGlvbihhKXt2YXIgYj10
aGlzLmVsO2IuZG9tPWE7Yi5pZD1hLmlkO3JldHVybiBifSx0cmFuc2Zvcm1FbGVtZW50OmZ1bmN0
aW9uKGEpe3JldHVybiBFeHQuZ2V0RG9tKGEpfSxnZXRDb3VudDpmdW5jdGlvbigpe3JldHVybiB0
aGlzLmVsZW1lbnRzLmxlbmd0aH0sYWRkOmZ1bmN0aW9uKGQsYil7dmFyIGU9dGhpcyxnPWUuZWxl
bWVudHM7aWYoIWQpe3JldHVybiB0aGlzfWlmKEV4dC5pc1N0cmluZyhkKSl7ZD1FeHQuRWxlbWVu
dC5zZWxlY3RvckZ1bmN0aW9uKGQsYil9ZWxzZXtpZihkLmlzQ29tcG9zaXRlKXtkPWQuZWxlbWVu
dHN9ZWxzZXtpZighRXh0LmlzSXRlcmFibGUoZCkpe2Q9W2RdfX19Zm9yKHZhciBjPTAsYT1kLmxl
bmd0aDtjPGE7KytjKXtnLnB1c2goZS50cmFuc2Zvcm1FbGVtZW50KGRbY10pKX1yZXR1cm4gZX0s
aW52b2tlOmZ1bmN0aW9uKGcsYil7dmFyIGg9dGhpcyxkPWguZWxlbWVudHMsYT1kLmxlbmd0aCxq
LGM7Zm9yKGM9MDtjPGE7YysrKXtqPWRbY107aWYoail7RXh0LkVsZW1lbnQucHJvdG90eXBlW2dd
LmFwcGx5KGguZ2V0RWxlbWVudChqKSxiKX19cmV0dXJuIGh9LGl0ZW06ZnVuY3Rpb24oYil7dmFy
IGQ9dGhpcyxjPWQuZWxlbWVudHNbYl0sYT1udWxsO2lmKGMpe2E9ZC5nZXRFbGVtZW50KGMpfXJl
dHVybiBhfSxhZGRMaXN0ZW5lcjpmdW5jdGlvbihiLGosaCxnKXt2YXIgZD10aGlzLmVsZW1lbnRz
LGE9ZC5sZW5ndGgsYyxrO2ZvcihjPTA7YzxhO2MrKyl7az1kW2NdO2lmKGspe0V4dC5FdmVudE1h
bmFnZXIub24oayxiLGosaHx8ayxnKX19cmV0dXJuIHRoaXN9LGVhY2g6ZnVuY3Rpb24oZyxkKXt2
YXIgaD10aGlzLGM9aC5lbGVtZW50cyxhPWMubGVuZ3RoLGIsajtmb3IoYj0wO2I8YTtiKyspe2o9
Y1tiXTtpZihqKXtqPXRoaXMuZ2V0RWxlbWVudChqKTtpZihnLmNhbGwoZHx8aixqLGgsYikpe2Jy
ZWFrfX19cmV0dXJuIGh9LGZpbGw6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztiLmVsZW1lbnRzPVtd
O2IuYWRkKGEpO3JldHVybiBifSxmaWx0ZXI6ZnVuY3Rpb24oYSl7dmFyIGI9W10sZD10aGlzLGU9
ZC5lbGVtZW50cyxjPUV4dC5pc0Z1bmN0aW9uKGEpP2E6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXMo
YSl9O2QuZWFjaChmdW5jdGlvbihqLGcsaCl7aWYoYyhqLGgpIT09ZmFsc2Upe2JbYi5sZW5ndGhd
PWQudHJhbnNmb3JtRWxlbWVudChqKX19KTtkLmVsZW1lbnRzPWI7cmV0dXJuIGR9LGluZGV4T2Y6
ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWxlbWVudHMuaW5kZXhPZih0aGlzLnRyYW5zZm9ybUVs
ZW1lbnQoYSkpfSxyZXBsYWNlRWxlbWVudDpmdW5jdGlvbihlLGMsYSl7dmFyIGI9IWlzTmFOKGUp
P2U6dGhpcy5pbmRleE9mKGUpLGc7aWYoYj4tMSl7Yz1FeHQuZ2V0RG9tKGMpO2lmKGEpe2c9dGhp
cy5lbGVtZW50c1tiXTtnLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGMsZyk7RXh0LnJlbW92ZU5v
ZGUoZyl9dGhpcy5lbGVtZW50cy5zcGxpY2UoYiwxLGMpfXJldHVybiB0aGlzfSxjbGVhcjpmdW5j
dGlvbigpe3RoaXMuZWxlbWVudHM9W119fTtFeHQuQ29tcG9zaXRlRWxlbWVudExpdGUucHJvdG90
eXBlLm9uPUV4dC5Db21wb3NpdGVFbGVtZW50TGl0ZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI7KGZ1
bmN0aW9uKCl7dmFyIGMsYj1FeHQuRWxlbWVudC5wcm90b3R5cGUsYT1FeHQuQ29tcG9zaXRlRWxl
bWVudExpdGUucHJvdG90eXBlO2ZvcihjIGluIGIpe2lmKEV4dC5pc0Z1bmN0aW9uKGJbY10pKXso
ZnVuY3Rpb24oZCl7YVtkXT1hW2RdfHxmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZShkLGFy
Z3VtZW50cyl9fSkuY2FsbChhLGMpfX19KSgpO2lmKEV4dC5Eb21RdWVyeSl7RXh0LkVsZW1lbnQu
c2VsZWN0b3JGdW5jdGlvbj1FeHQuRG9tUXVlcnkuc2VsZWN0fUV4dC5FbGVtZW50LnNlbGVjdD1m
dW5jdGlvbihhLGIpe3ZhciBjO2lmKHR5cGVvZiBhPT0ic3RyaW5nIil7Yz1FeHQuRWxlbWVudC5z
ZWxlY3RvckZ1bmN0aW9uKGEsYil9ZWxzZXtpZihhLmxlbmd0aCE9PXVuZGVmaW5lZCl7Yz1hfWVs
c2V7dGhyb3ciSW52YWxpZCBzZWxlY3RvciJ9fXJldHVybiBuZXcgRXh0LkNvbXBvc2l0ZUVsZW1l
bnRMaXRlKGMpfTtFeHQuc2VsZWN0PUV4dC5FbGVtZW50LnNlbGVjdDsoZnVuY3Rpb24oKXt2YXIg
Yj0iYmVmb3JlcmVxdWVzdCIsZT0icmVxdWVzdGNvbXBsZXRlIixkPSJyZXF1ZXN0ZXhjZXB0aW9u
IixoPXVuZGVmaW5lZCxjPSJsb2FkIixpPSJQT1NUIixhPSJHRVQiLGc9d2luZG93O0V4dC5kYXRh
LkNvbm5lY3Rpb249ZnVuY3Rpb24oail7RXh0LmFwcGx5KHRoaXMsaik7dGhpcy5hZGRFdmVudHMo
YixlLGQpO0V4dC5kYXRhLkNvbm5lY3Rpb24uc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRo
aXMpfTtFeHQuZXh0ZW5kKEV4dC5kYXRhLkNvbm5lY3Rpb24sRXh0LnV0aWwuT2JzZXJ2YWJsZSx7
dGltZW91dDozMDAwMCxhdXRvQWJvcnQ6ZmFsc2UsZGlzYWJsZUNhY2hpbmc6dHJ1ZSxkaXNhYmxl
Q2FjaGluZ1BhcmFtOiJfZGMiLHJlcXVlc3Q6ZnVuY3Rpb24obil7dmFyIHM9dGhpcztpZihzLmZp
cmVFdmVudChiLHMsbikpe2lmKG4uZWwpe2lmKCFFeHQuaXNFbXB0eShuLmluZGljYXRvclRleHQp
KXtzLmluZGljYXRvclRleHQ9JzxkaXYgY2xhc3M9ImxvYWRpbmctaW5kaWNhdG9yIj4nK24uaW5k
aWNhdG9yVGV4dCsiPC9kaXY+In1pZihzLmluZGljYXRvclRleHQpe0V4dC5nZXREb20obi5lbCku
aW5uZXJIVE1MPXMuaW5kaWNhdG9yVGV4dH1uLnN1Y2Nlc3M9KEV4dC5pc0Z1bmN0aW9uKG4uc3Vj
Y2Vzcyk/bi5zdWNjZXNzOmZ1bmN0aW9uKCl7fSkuY3JlYXRlSW50ZXJjZXB0b3IoZnVuY3Rpb24o
byl7RXh0LmdldERvbShuLmVsKS5pbm5lckhUTUw9by5yZXNwb25zZVRleHR9KX12YXIgbD1uLnBh
cmFtcyxrPW4udXJsfHxzLnVybCxqLHE9e3N1Y2Nlc3M6cy5oYW5kbGVSZXNwb25zZSxmYWlsdXJl
OnMuaGFuZGxlRmFpbHVyZSxzY29wZTpzLGFyZ3VtZW50OntvcHRpb25zOm59LHRpbWVvdXQ6bi50
aW1lb3V0fHxzLnRpbWVvdXR9LG0sdDtpZihFeHQuaXNGdW5jdGlvbihsKSl7bD1sLmNhbGwobi5z
Y29wZXx8ZyxuKX1sPUV4dC51cmxFbmNvZGUocy5leHRyYVBhcmFtcyxFeHQuaXNPYmplY3QobCk/
RXh0LnVybEVuY29kZShsKTpsKTtpZihFeHQuaXNGdW5jdGlvbihrKSl7az1rLmNhbGwobi5zY29w
ZXx8ZyxuKX1pZigobT1FeHQuZ2V0RG9tKG4uZm9ybSkpKXtrPWt8fG0uYWN0aW9uO2lmKG4uaXNV
cGxvYWR8fC9tdWx0aXBhcnRcL2Zvcm0tZGF0YS9pLnRlc3QobS5nZXRBdHRyaWJ1dGUoImVuY3R5
cGUiKSkpe3JldHVybiBzLmRvRm9ybVVwbG9hZC5jYWxsKHMsbixsLGspfXQ9RXh0LmxpYi5BamF4
LnNlcmlhbGl6ZUZvcm0obSk7bD1sPyhsKyImIit0KTp0fWo9bi5tZXRob2R8fHMubWV0aG9kfHwo
KGx8fG4ueG1sRGF0YXx8bi5qc29uRGF0YSk/aTphKTtpZihqPT09YSYmKHMuZGlzYWJsZUNhY2hp
bmcmJm4uZGlzYWJsZUNhY2hpbmchPT1mYWxzZSl8fG4uZGlzYWJsZUNhY2hpbmc9PT10cnVlKXt2
YXIgcj1uLmRpc2FibGVDYWNoaW5nUGFyYW18fHMuZGlzYWJsZUNhY2hpbmdQYXJhbTtrPUV4dC51
cmxBcHBlbmQoayxyKyI9IisobmV3IERhdGUoKS5nZXRUaW1lKCkpKX1uLmhlYWRlcnM9RXh0LmFw
cGx5KG4uaGVhZGVyc3x8e30scy5kZWZhdWx0SGVhZGVyc3x8e30pO2lmKG4uYXV0b0Fib3J0PT09
dHJ1ZXx8cy5hdXRvQWJvcnQpe3MuYWJvcnQoKX1pZigoaj09YXx8bi54bWxEYXRhfHxuLmpzb25E
YXRhKSYmbCl7az1FeHQudXJsQXBwZW5kKGssbCk7bD0iIn1yZXR1cm4ocy50cmFuc0lkPUV4dC5s
aWIuQWpheC5yZXF1ZXN0KGosayxxLGwsbikpfWVsc2V7cmV0dXJuIG4uY2FsbGJhY2s/bi5jYWxs
YmFjay5hcHBseShuLnNjb3BlLFtuLGgsaF0pOm51bGx9fSxpc0xvYWRpbmc6ZnVuY3Rpb24oail7
cmV0dXJuIGo/RXh0LmxpYi5BamF4LmlzQ2FsbEluUHJvZ3Jlc3Moaik6ISF0aGlzLnRyYW5zSWR9
LGFib3J0OmZ1bmN0aW9uKGope2lmKGp8fHRoaXMuaXNMb2FkaW5nKCkpe0V4dC5saWIuQWpheC5h
Ym9ydChqfHx0aGlzLnRyYW5zSWQpfX0saGFuZGxlUmVzcG9uc2U6ZnVuY3Rpb24oail7dGhpcy50
cmFuc0lkPWZhbHNlO3ZhciBrPWouYXJndW1lbnQub3B0aW9ucztqLmFyZ3VtZW50PWs/ay5hcmd1
bWVudDpudWxsO3RoaXMuZmlyZUV2ZW50KGUsdGhpcyxqLGspO2lmKGsuc3VjY2Vzcyl7ay5zdWNj
ZXNzLmNhbGwoay5zY29wZSxqLGspfWlmKGsuY2FsbGJhY2spe2suY2FsbGJhY2suY2FsbChrLnNj
b3BlLGssdHJ1ZSxqKX19LGhhbmRsZUZhaWx1cmU6ZnVuY3Rpb24oaixsKXt0aGlzLnRyYW5zSWQ9
ZmFsc2U7dmFyIGs9ai5hcmd1bWVudC5vcHRpb25zO2ouYXJndW1lbnQ9az9rLmFyZ3VtZW50Om51
bGw7dGhpcy5maXJlRXZlbnQoZCx0aGlzLGosayxsKTtpZihrLmZhaWx1cmUpe2suZmFpbHVyZS5j
YWxsKGsuc2NvcGUsaixrKX1pZihrLmNhbGxiYWNrKXtrLmNhbGxiYWNrLmNhbGwoay5zY29wZSxr
LGZhbHNlLGopfX0sZG9Gb3JtVXBsb2FkOmZ1bmN0aW9uKHEsaixrKXt2YXIgbD1FeHQuaWQoKSx2
PWRvY3VtZW50LHI9di5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxtPUV4dC5nZXREb20ocS5mb3Jt
KSx1PVtdLHQscD0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsbj17dGFyZ2V0Om0udGFyZ2V0LG1ldGhv
ZDptLm1ldGhvZCxlbmNvZGluZzptLmVuY29kaW5nLGVuY3R5cGU6bS5lbmN0eXBlLGFjdGlvbjpt
LmFjdGlvbn07RXh0LmZseShyKS5zZXQoe2lkOmwsbmFtZTpsLGNsczoieC1oaWRkZW4ifSk7di5i
b2R5LmFwcGVuZENoaWxkKHIpO0V4dC5mbHkocikuc2V0KHtzcmM6RXh0LlNTTF9TRUNVUkVfVVJM
fSk7aWYoRXh0LmlzSUUpe2RvY3VtZW50LmZyYW1lc1tsXS5uYW1lPWx9RXh0LmZseShtKS5zZXQo
e3RhcmdldDpsLG1ldGhvZDppLGVuY3R5cGU6cCxlbmNvZGluZzpwLGFjdGlvbjprfHxuLmFjdGlv
bn0pO0V4dC5pdGVyYXRlKEV4dC51cmxEZWNvZGUoaixmYWxzZSksZnVuY3Rpb24odyxvKXt0PXYu
Y3JlYXRlRWxlbWVudCgiaW5wdXQiKTtFeHQuZmx5KHQpLnNldCh7dHlwZToiaGlkZGVuIix2YWx1
ZTpvLG5hbWU6d30pO20uYXBwZW5kQ2hpbGQodCk7dS5wdXNoKHQpfSk7ZnVuY3Rpb24gcygpe3Zh
ciB4PXRoaXMsdz17cmVzcG9uc2VUZXh0OiIiLHJlc3BvbnNlWE1MOm51bGwsYXJndW1lbnQ6cS5h
cmd1bWVudH0sQSx6O3RyeXtBPXIuY29udGVudFdpbmRvdy5kb2N1bWVudHx8ci5jb250ZW50RG9j
dW1lbnR8fGcuZnJhbWVzW2xdLmRvY3VtZW50O2lmKEEpe2lmKEEuYm9keSl7aWYoL3RleHRhcmVh
L2kudGVzdCgoej1BLmJvZHkuZmlyc3RDaGlsZHx8e30pLnRhZ05hbWUpKXt3LnJlc3BvbnNlVGV4
dD16LnZhbHVlfWVsc2V7dy5yZXNwb25zZVRleHQ9QS5ib2R5LmlubmVySFRNTH19dy5yZXNwb25z
ZVhNTD1BLlhNTERvY3VtZW50fHxBfX1jYXRjaCh5KXt9RXh0LkV2ZW50TWFuYWdlci5yZW1vdmVM
aXN0ZW5lcihyLGMscyx4KTt4LmZpcmVFdmVudChlLHgsdyxxKTtmdW5jdGlvbiBvKEQsQyxCKXtp
ZihFeHQuaXNGdW5jdGlvbihEKSl7RC5hcHBseShDLEIpfX1vKHEuc3VjY2VzcyxxLnNjb3BlLFt3
LHFdKTtvKHEuY2FsbGJhY2sscS5zY29wZSxbcSx0cnVlLHddKTtpZigheC5kZWJ1Z1VwbG9hZHMp
e3NldFRpbWVvdXQoZnVuY3Rpb24oKXtFeHQucmVtb3ZlTm9kZShyKX0sMTAwKX19RXh0LkV2ZW50
TWFuYWdlci5vbihyLGMscyx0aGlzKTttLnN1Ym1pdCgpO0V4dC5mbHkobSkuc2V0KG4pO0V4dC5l
YWNoKHUsZnVuY3Rpb24obyl7RXh0LnJlbW92ZU5vZGUobyl9KX19KX0pKCk7RXh0LkFqYXg9bmV3
IEV4dC5kYXRhLkNvbm5lY3Rpb24oe2F1dG9BYm9ydDpmYWxzZSxzZXJpYWxpemVGb3JtOmZ1bmN0
aW9uKGEpe3JldHVybiBFeHQubGliLkFqYXguc2VyaWFsaXplRm9ybShhKX19KTtFeHQudXRpbC5K
U09OPW5ldyAoZnVuY3Rpb24oKXt2YXIgdXNlSGFzT3duPSEhe30uaGFzT3duUHJvcGVydHksaXNO
YXRpdmU9ZnVuY3Rpb24oKXt2YXIgdXNlTmF0aXZlPW51bGw7cmV0dXJuIGZ1bmN0aW9uKCl7aWYo
dXNlTmF0aXZlPT09bnVsbCl7dXNlTmF0aXZlPUV4dC5VU0VfTkFUSVZFX0pTT04mJndpbmRvdy5K
U09OJiZKU09OLnRvU3RyaW5nKCk9PSJbb2JqZWN0IEpTT05dIn1yZXR1cm4gdXNlTmF0aXZlfX0o
KSxwYWQ9ZnVuY3Rpb24obil7cmV0dXJuIG48MTA/IjAiK246bn0sZG9EZWNvZGU9ZnVuY3Rpb24o
anNvbil7cmV0dXJuIGV2YWwoIigiK2pzb24rIikiKX0sZG9FbmNvZGU9ZnVuY3Rpb24obyl7aWYo
IUV4dC5pc0RlZmluZWQobyl8fG89PT1udWxsKXtyZXR1cm4ibnVsbCJ9ZWxzZXtpZihFeHQuaXNB
cnJheShvKSl7cmV0dXJuIGVuY29kZUFycmF5KG8pfWVsc2V7aWYoRXh0LmlzRGF0ZShvKSl7cmV0
dXJuIEV4dC51dGlsLkpTT04uZW5jb2RlRGF0ZShvKX1lbHNle2lmKEV4dC5pc1N0cmluZyhvKSl7
cmV0dXJuIGVuY29kZVN0cmluZyhvKX1lbHNle2lmKHR5cGVvZiBvPT0ibnVtYmVyIil7cmV0dXJu
IGlzRmluaXRlKG8pP1N0cmluZyhvKToibnVsbCJ9ZWxzZXtpZihFeHQuaXNCb29sZWFuKG8pKXty
ZXR1cm4gU3RyaW5nKG8pfWVsc2V7dmFyIGE9WyJ7Il0sYixpLHY7Zm9yKGkgaW4gbyl7aWYoIW8u
Z2V0RWxlbWVudHNCeVRhZ05hbWUpe2lmKCF1c2VIYXNPd258fG8uaGFzT3duUHJvcGVydHkoaSkp
e3Y9b1tpXTtzd2l0Y2godHlwZW9mIHYpe2Nhc2UidW5kZWZpbmVkIjpjYXNlImZ1bmN0aW9uIjpj
YXNlInVua25vd24iOmJyZWFrO2RlZmF1bHQ6aWYoYil7YS5wdXNoKCIsIil9YS5wdXNoKGRvRW5j
b2RlKGkpLCI6Iix2PT09bnVsbD8ibnVsbCI6ZG9FbmNvZGUodikpO2I9dHJ1ZX19fX1hLnB1c2go
In0iKTtyZXR1cm4gYS5qb2luKCIiKX19fX19fX0sbT17IlxiIjoiXFxiIiwiXHQiOiJcXHQiLCJc
biI6IlxcbiIsIlxmIjoiXFxmIiwiXHIiOiJcXHIiLCciJzonXFwiJywiXFwiOiJcXFxcIn0sZW5j
b2RlU3RyaW5nPWZ1bmN0aW9uKHMpe2lmKC9bIlxcXHgwMC1ceDFmXS8udGVzdChzKSl7cmV0dXJu
JyInK3MucmVwbGFjZSgvKFtceDAwLVx4MWZcXCJdKS9nLGZ1bmN0aW9uKGEsYil7dmFyIGM9bVti
XTtpZihjKXtyZXR1cm4gY31jPWIuY2hhckNvZGVBdCgpO3JldHVybiJcXHUwMCIrTWF0aC5mbG9v
cihjLzE2KS50b1N0cmluZygxNikrKGMlMTYpLnRvU3RyaW5nKDE2KX0pKyciJ31yZXR1cm4nIicr
cysnIid9LGVuY29kZUFycmF5PWZ1bmN0aW9uKG8pe3ZhciBhPVsiWyJdLGIsaSxsPW8ubGVuZ3Ro
LHY7Zm9yKGk9MDtpPGw7aSs9MSl7dj1vW2ldO3N3aXRjaCh0eXBlb2Ygdil7Y2FzZSJ1bmRlZmlu
ZWQiOmNhc2UiZnVuY3Rpb24iOmNhc2UidW5rbm93biI6YnJlYWs7ZGVmYXVsdDppZihiKXthLnB1
c2goIiwiKX1hLnB1c2godj09PW51bGw/Im51bGwiOkV4dC51dGlsLkpTT04uZW5jb2RlKHYpKTti
PXRydWV9fWEucHVzaCgiXSIpO3JldHVybiBhLmpvaW4oIiIpfTt0aGlzLmVuY29kZURhdGU9ZnVu
Y3Rpb24obyl7cmV0dXJuJyInK28uZ2V0RnVsbFllYXIoKSsiLSIrcGFkKG8uZ2V0TW9udGgoKSsx
KSsiLSIrcGFkKG8uZ2V0RGF0ZSgpKSsiVCIrcGFkKG8uZ2V0SG91cnMoKSkrIjoiK3BhZChvLmdl
dE1pbnV0ZXMoKSkrIjoiK3BhZChvLmdldFNlY29uZHMoKSkrJyInfTt0aGlzLmVuY29kZT1mdW5j
dGlvbigpe3ZhciBlYztyZXR1cm4gZnVuY3Rpb24obyl7aWYoIWVjKXtlYz1pc05hdGl2ZSgpP0pT
T04uc3RyaW5naWZ5OmRvRW5jb2RlfXJldHVybiBlYyhvKX19KCk7dGhpcy5kZWNvZGU9ZnVuY3Rp
b24oKXt2YXIgZGM7cmV0dXJuIGZ1bmN0aW9uKGpzb24pe2lmKCFkYyl7ZGM9aXNOYXRpdmUoKT9K
U09OLnBhcnNlOmRvRGVjb2RlfXJldHVybiBkYyhqc29uKX19KCl9KSgpO0V4dC5lbmNvZGU9RXh0
LnV0aWwuSlNPTi5lbmNvZGU7RXh0LmRlY29kZT1FeHQudXRpbC5KU09OLmRlY29kZTsKK1wgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL3dlYi9hamF4L2xpYnMvanF1ZXJ5
LzEuMTAuMi9qcXVlcnkubWluLmpzIGIvd2ViL2FqYXgvbGlicy9qcXVlcnkvMS4xMC4yL2pxdWVy
eS5taW4uanMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yOWIzYTJjCist
LS0gL2Rldi9udWxsCisrKysgYi93ZWIvYWpheC9saWJzL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1p
bi5qcworQEAgLTAsMCArMSw2IEBACisrLyohIGpRdWVyeSB2MS4xMC4yIHwgKGMpIDIwMDUsIDIw
MTMgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UKKysvL0Agc291
cmNlTWFwcGluZ1VSTD1qcXVlcnkubWluLm1hcAorKyovCisrKGZ1bmN0aW9uKGUsdCl7dmFyIG4s
cixpPXR5cGVvZiB0LG89ZS5sb2NhdGlvbixhPWUuZG9jdW1lbnQscz1hLmRvY3VtZW50RWxlbWVu
dCxsPWUualF1ZXJ5LHU9ZS4kLGM9e30scD1bXSxmPSIxLjEwLjIiLGQ9cC5jb25jYXQsaD1wLnB1
c2gsZz1wLnNsaWNlLG09cC5pbmRleE9mLHk9Yy50b1N0cmluZyx2PWMuaGFzT3duUHJvcGVydHks
Yj1mLnRyaW0seD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgeC5mbi5pbml0KGUsdCxyKX0sdz0v
WystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSxUPS9cUysvZyxDPS9e
W1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZyxOPS9eKD86XHMqKDxbXHdcV10rPilb
Xj5dKnwjKFtcdy1dKikpJC8saz0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvLEU9L15bXF0s
Ont9XHNdKiQvLFM9Lyg/Ol58OnwsKSg/OlxzKlxbKSsvZyxBPS9cXCg/OlsiXFxcL2JmbnJ0XXx1
W1xkYS1mQS1GXXs0fSkvZyxqPS8iW14iXFxcclxuXSoifHRydWV8ZmFsc2V8bnVsbHwtPyg/Olxk
K1wufClcZCsoPzpbZUVdWystXT9cZCt8KS9nLEQ9L14tbXMtLyxMPS8tKFtcZGEtel0pL2dpLEg9
ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSxxPWZ1bmN0aW9uKGUpeyhhLmFk
ZEV2ZW50TGlzdGVuZXJ8fCJsb2FkIj09PWUudHlwZXx8ImNvbXBsZXRlIj09PWEucmVhZHlTdGF0
ZSkmJihfKCkseC5yZWFkeSgpKX0sXz1mdW5jdGlvbigpe2EuYWRkRXZlbnRMaXN0ZW5lcj8oYS5y
ZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixxLCExKSxlLnJlbW92ZUV2ZW50
TGlzdGVuZXIoImxvYWQiLHEsITEpKTooYS5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdl
IixxKSxlLmRldGFjaEV2ZW50KCJvbmxvYWQiLHEpKX07eC5mbj14LnByb3RvdHlwZT17anF1ZXJ5
OmYsY29uc3RydWN0b3I6eCxpbml0OmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvO2lmKCFlKXJldHVy
biB0aGlzO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoaT0iPCI9PT1lLmNoYXJBdCgwKSYmIj4i
PT09ZS5jaGFyQXQoZS5sZW5ndGgtMSkmJmUubGVuZ3RoPj0zP1tudWxsLGUsbnVsbF06Ti5leGVj
KGUpLCFpfHwhaVsxXSYmbilyZXR1cm4hbnx8bi5qcXVlcnk/KG58fHIpLmZpbmQoZSk6dGhpcy5j
b25zdHJ1Y3RvcihuKS5maW5kKGUpO2lmKGlbMV0pe2lmKG49biBpbnN0YW5jZW9mIHg/blswXTpu
LHgubWVyZ2UodGhpcyx4LnBhcnNlSFRNTChpWzFdLG4mJm4ubm9kZVR5cGU/bi5vd25lckRvY3Vt
ZW50fHxuOmEsITApKSxrLnRlc3QoaVsxXSkmJnguaXNQbGFpbk9iamVjdChuKSlmb3IoaSBpbiBu
KXguaXNGdW5jdGlvbih0aGlzW2ldKT90aGlzW2ldKG5baV0pOnRoaXMuYXR0cihpLG5baV0pO3Jl
dHVybiB0aGlzfWlmKG89YS5nZXRFbGVtZW50QnlJZChpWzJdKSxvJiZvLnBhcmVudE5vZGUpe2lm
KG8uaWQhPT1pWzJdKXJldHVybiByLmZpbmQoZSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPW99cmV0
dXJuIHRoaXMuY29udGV4dD1hLHRoaXMuc2VsZWN0b3I9ZSx0aGlzfXJldHVybiBlLm5vZGVUeXBl
Pyh0aGlzLmNvbnRleHQ9dGhpc1swXT1lLHRoaXMubGVuZ3RoPTEsdGhpcyk6eC5pc0Z1bmN0aW9u
KGUpP3IucmVhZHkoZSk6KGUuc2VsZWN0b3IhPT10JiYodGhpcy5zZWxlY3Rvcj1lLnNlbGVjdG9y
LHRoaXMuY29udGV4dD1lLmNvbnRleHQpLHgubWFrZUFycmF5KGUsdGhpcykpfSxzZWxlY3Rvcjoi
IixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGcuY2FsbCh0aGlzKX0sZ2V0OmZ1
bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3RoaXMudG9BcnJheSgpOjA+ZT90aGlzW3RoaXMubGVu
Z3RoK2VdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD14Lm1lcmdlKHRoaXMu
Y29uc3RydWN0b3IoKSxlKTtyZXR1cm4gdC5wcmV2T2JqZWN0PXRoaXMsdC5jb250ZXh0PXRoaXMu
Y29udGV4dCx0fSxlYWNoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguZWFjaCh0aGlzLGUsdCl9LHJl
YWR5OmZ1bmN0aW9uKGUpe3JldHVybiB4LnJlYWR5LnByb21pc2UoKS5kb25lKGUpLHRoaXN9LHNs
aWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGcuYXBwbHkodGhpcyxhcmd1bWVu
dHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigp
e3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0r
ZSsoMD5lP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4+PTAmJnQ+bj9bdGhpc1tuXV06W10p
fSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgubWFwKHRoaXMsZnVuY3Rp
b24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpoLHNvcnQ6W10uc29y
dCxzcGxpY2U6W10uc3BsaWNlfSx4LmZuLmluaXQucHJvdG90eXBlPXguZm4seC5leHRlbmQ9eC5m
bi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSxuLHIsaSxvLGEscz1hcmd1bWVudHNbMF18fHt9LGw9
MSx1PWFyZ3VtZW50cy5sZW5ndGgsYz0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgcyYmKGM9cyxz
PWFyZ3VtZW50c1sxXXx8e30sbD0yKSwib2JqZWN0Ij09dHlwZW9mIHN8fHguaXNGdW5jdGlvbihz
KXx8KHM9e30pLHU9PT1sJiYocz10aGlzLC0tbCk7dT5sO2wrKylpZihudWxsIT0obz1hcmd1bWVu
dHNbbF0pKWZvcihpIGluIG8pZT1zW2ldLHI9b1tpXSxzIT09ciYmKGMmJnImJih4LmlzUGxhaW5P
YmplY3Qocil8fChuPXguaXNBcnJheShyKSkpPyhuPyhuPSExLGE9ZSYmeC5pc0FycmF5KGUpP2U6
W10pOmE9ZSYmeC5pc1BsYWluT2JqZWN0KGUpP2U6e30sc1tpXT14LmV4dGVuZChjLGEscikpOnIh
PT10JiYoc1tpXT1yKSk7cmV0dXJuIHN9LHguZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhmK01h
dGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vQ29uZmxpY3Q6ZnVuY3Rpb24odCl7cmV0
dXJuIGUuJD09PXgmJihlLiQ9dSksdCYmZS5qUXVlcnk9PT14JiYoZS5qUXVlcnk9bCkseH0saXNS
ZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oZSl7ZT94LnJlYWR5V2FpdCsr
OngucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihlKXtpZihlPT09ITA/IS0teC5yZWFkeVdhaXQ6
IXguaXNSZWFkeSl7aWYoIWEuYm9keSlyZXR1cm4gc2V0VGltZW91dCh4LnJlYWR5KTt4LmlzUmVh
ZHk9ITAsZSE9PSEwJiYtLXgucmVhZHlXYWl0PjB8fChuLnJlc29sdmVXaXRoKGEsW3hdKSx4LmZu
LnRyaWdnZXImJngoYSkudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5IikpfX0saXNGdW5jdGlv
bjpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT09eC50eXBlKGUpfSxpc0FycmF5OkFycmF5
LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJhcnJheSI9PT14LnR5cGUoZSl9LGlzV2luZG93
OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlPT1lLndpbmRvd30saXNOdW1lcmljOmZ1bmN0
aW9uKGUpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGUpKSYmaXNGaW5pdGUoZSl9LHR5cGU6ZnVu
Y3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/ZSsiIjoib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlv
biI9PXR5cGVvZiBlP2NbeS5jYWxsKGUpXXx8Im9iamVjdCI6dHlwZW9mIGV9LGlzUGxhaW5PYmpl
Y3Q6ZnVuY3Rpb24oZSl7dmFyIG47aWYoIWV8fCJvYmplY3QiIT09eC50eXBlKGUpfHxlLm5vZGVU
eXBlfHx4LmlzV2luZG93KGUpKXJldHVybiExO3RyeXtpZihlLmNvbnN0cnVjdG9yJiYhdi5jYWxs
KGUsImNvbnN0cnVjdG9yIikmJiF2LmNhbGwoZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJv
dG90eXBlT2YiKSlyZXR1cm4hMX1jYXRjaChyKXtyZXR1cm4hMX1pZih4LnN1cHBvcnQub3duTGFz
dClmb3IobiBpbiBlKXJldHVybiB2LmNhbGwoZSxuKTtmb3IobiBpbiBlKTtyZXR1cm4gbj09PXR8
fHYuY2FsbChlLG4pfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUp
cmV0dXJuITE7cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IEVycm9yKGUpfSxwYXJz
ZUhUTUw6ZnVuY3Rpb24oZSx0LG4pe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51
bGw7ImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0PXR8fGE7dmFyIHI9ay5leGVjKGUp
LGk9IW4mJltdO3JldHVybiByP1t0LmNyZWF0ZUVsZW1lbnQoclsxXSldOihyPXguYnVpbGRGcmFn
bWVudChbZV0sdCxpKSxpJiZ4KGkpLnJlbW92ZSgpLHgubWVyZ2UoW10sci5jaGlsZE5vZGVzKSl9
LHBhcnNlSlNPTjpmdW5jdGlvbihuKXtyZXR1cm4gZS5KU09OJiZlLkpTT04ucGFyc2U/ZS5KU09O
LnBhcnNlKG4pOm51bGw9PT1uP246InN0cmluZyI9PXR5cGVvZiBuJiYobj14LnRyaW0obiksbiYm
RS50ZXN0KG4ucmVwbGFjZShBLCJAIikucmVwbGFjZShqLCJdIikucmVwbGFjZShTLCIiKSkpP0Z1
bmN0aW9uKCJyZXR1cm4gIituKSgpOih4LmVycm9yKCJJbnZhbGlkIEpTT046ICIrbiksdCl9LHBh
cnNlWE1MOmZ1bmN0aW9uKG4pe3ZhciByLGk7aWYoIW58fCJzdHJpbmciIT10eXBlb2YgbilyZXR1
cm4gbnVsbDt0cnl7ZS5ET01QYXJzZXI/KGk9bmV3IERPTVBhcnNlcixyPWkucGFyc2VGcm9tU3Ry
aW5nKG4sInRleHQveG1sIikpOihyPW5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MRE9N
Iiksci5hc3luYz0iZmFsc2UiLHIubG9hZFhNTChuKSl9Y2F0Y2gobyl7cj10fXJldHVybiByJiZy
LmRvY3VtZW50RWxlbWVudCYmIXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIiku
bGVuZ3RofHx4LmVycm9yKCJJbnZhbGlkIFhNTDogIituKSxyfSxub29wOmZ1bmN0aW9uKCl7fSxn
bG9iYWxFdmFsOmZ1bmN0aW9uKHQpe3QmJngudHJpbSh0KSYmKGUuZXhlY1NjcmlwdHx8ZnVuY3Rp
b24odCl7ZS5ldmFsLmNhbGwoZSx0KX0pKHQpfSxjYW1lbENhc2U6ZnVuY3Rpb24oZSl7cmV0dXJu
IGUucmVwbGFjZShELCJtcy0iKS5yZXBsYWNlKEwsSCl9LG5vZGVOYW1lOmZ1bmN0aW9uKGUsdCl7
cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNh
c2UoKX0sZWFjaDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT0wLG89ZS5sZW5ndGgsYT1NKGUpO2lm
KG4pe2lmKGEpe2Zvcig7bz5pO2krKylpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9
ZWxzZSBmb3IoaSBpbiBlKWlmKHI9dC5hcHBseShlW2ldLG4pLHI9PT0hMSlicmVha31lbHNlIGlm
KGEpe2Zvcig7bz5pO2krKylpZihyPXQuY2FsbChlW2ldLGksZVtpXSkscj09PSExKWJyZWFrfWVs
c2UgZm9yKGkgaW4gZSlpZihyPXQuY2FsbChlW2ldLGksZVtpXSkscj09PSExKWJyZWFrO3JldHVy
biBlfSx0cmltOmImJiFiLmNhbGwoIlx1ZmVmZlx1MDBhMCIpP2Z1bmN0aW9uKGUpe3JldHVybiBu
dWxsPT1lPyIiOmIuY2FsbChlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6KGUrIiIp
LnJlcGxhY2UoQywiIil9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVy
biBudWxsIT1lJiYoTShPYmplY3QoZSkpP3gubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2Vd
OmUpOmguY2FsbChuLGUpKSxufSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZih0KXtp
ZihtKXJldHVybiBtLmNhbGwodCxlLG4pO2ZvcihyPXQubGVuZ3RoLG49bj8wPm4/TWF0aC5tYXgo
MCxyK24pOm46MDtyPm47bisrKWlmKG4gaW4gdCYmdFtuXT09PWUpcmV0dXJuIG59cmV0dXJuLTF9
LG1lcmdlOmZ1bmN0aW9uKGUsbil7dmFyIHI9bi5sZW5ndGgsaT1lLmxlbmd0aCxvPTA7aWYoIm51
bWJlciI9PXR5cGVvZiByKWZvcig7cj5vO28rKyllW2krK109bltvXTtlbHNlIHdoaWxlKG5bb10h
PT10KWVbaSsrXT1uW28rK107cmV0dXJuIGUubGVuZ3RoPWksZX0sZ3JlcDpmdW5jdGlvbihlLHQs
bil7dmFyIHIsaT1bXSxvPTAsYT1lLmxlbmd0aDtmb3Iobj0hIW47YT5vO28rKylyPSEhdChlW29d
LG8pLG4hPT1yJiZpLnB1c2goZVtvXSk7cmV0dXJuIGl9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFy
IHIsaT0wLG89ZS5sZW5ndGgsYT1NKGUpLHM9W107aWYoYSlmb3IoO28+aTtpKyspcj10KGVbaV0s
aSxuKSxudWxsIT1yJiYoc1tzLmxlbmd0aF09cik7ZWxzZSBmb3IoaSBpbiBlKXI9dChlW2ldLGks
biksbnVsbCE9ciYmKHNbcy5sZW5ndGhdPXIpO3JldHVybiBkLmFwcGx5KFtdLHMpfSxndWlkOjEs
cHJveHk6ZnVuY3Rpb24oZSxuKXt2YXIgcixpLG87cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuJiYo
bz1lW25dLG49ZSxlPW8pLHguaXNGdW5jdGlvbihlKT8ocj1nLmNhbGwoYXJndW1lbnRzLDIpLGk9
ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseShufHx0aGlzLHIuY29uY2F0KGcuY2FsbChhcmd1bWVu
dHMpKSl9LGkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHx4Lmd1aWQrKyxpKTp0fSxhY2Nlc3M6ZnVuY3Rp
b24oZSxuLHIsaSxvLGEscyl7dmFyIGw9MCx1PWUubGVuZ3RoLGM9bnVsbD09cjtpZigib2JqZWN0
Ij09PXgudHlwZShyKSl7bz0hMDtmb3IobCBpbiByKXguYWNjZXNzKGUsbixsLHJbbF0sITAsYSxz
KX1lbHNlIGlmKGkhPT10JiYobz0hMCx4LmlzRnVuY3Rpb24oaSl8fChzPSEwKSxjJiYocz8obi5j
YWxsKGUsaSksbj1udWxsKTooYz1uLG49ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBjLmNhbGwoeChl
KSxuKX0pKSxuKSlmb3IoO3U+bDtsKyspbihlW2xdLHIscz9pOmkuY2FsbChlW2xdLGwsbihlW2xd
LHIpKSk7cmV0dXJuIG8/ZTpjP24uY2FsbChlKTp1P24oZVswXSxyKTphfSxub3c6ZnVuY3Rpb24o
KXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sc3dhcDpmdW5jdGlvbihlLHQsbixyKXt2YXIg
aSxvLGE9e307Zm9yKG8gaW4gdClhW29dPWUuc3R5bGVbb10sZS5zdHlsZVtvXT10W29dO2k9bi5h
cHBseShlLHJ8fFtdKTtmb3IobyBpbiB0KWUuc3R5bGVbb109YVtvXTtyZXR1cm4gaX19KSx4LnJl
YWR5LnByb21pc2U9ZnVuY3Rpb24odCl7aWYoIW4paWYobj14LkRlZmVycmVkKCksImNvbXBsZXRl
Ij09PWEucmVhZHlTdGF0ZSlzZXRUaW1lb3V0KHgucmVhZHkpO2Vsc2UgaWYoYS5hZGRFdmVudExp
c3RlbmVyKWEuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIscSwhMSksZS5hZGRF
dmVudExpc3RlbmVyKCJsb2FkIixxLCExKTtlbHNle2EuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0
ZWNoYW5nZSIscSksZS5hdHRhY2hFdmVudCgib25sb2FkIixxKTt2YXIgcj0hMTt0cnl7cj1udWxs
PT1lLmZyYW1lRWxlbWVudCYmYS5kb2N1bWVudEVsZW1lbnR9Y2F0Y2goaSl7fXImJnIuZG9TY3Jv
bGwmJmZ1bmN0aW9uIG8oKXtpZigheC5pc1JlYWR5KXt0cnl7ci5kb1Njcm9sbCgibGVmdCIpfWNh
dGNoKGUpe3JldHVybiBzZXRUaW1lb3V0KG8sNTApfV8oKSx4LnJlYWR5KCl9fSgpfXJldHVybiBu
LnByb21pc2UodCl9LHguZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5
IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2NbIltv
YmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gTShlKXt2YXIgdD1lLmxl
bmd0aCxuPXgudHlwZShlKTtyZXR1cm4geC5pc1dpbmRvdyhlKT8hMToxPT09ZS5ub2RlVHlwZSYm
dD8hMDoiYXJyYXkiPT09bnx8ImZ1bmN0aW9uIiE9PW4mJigwPT09dHx8Im51bWJlciI9PXR5cGVv
ZiB0JiZ0PjAmJnQtMSBpbiBlKX1yPXgoYSksZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHMs
bCx1LGMscCxmLGQsaCxnLG0seSx2LGI9InNpenpsZSIrLW5ldyBEYXRlLHc9ZS5kb2N1bWVudCxU
PTAsQz0wLE49c3QoKSxrPXN0KCksRT1zdCgpLFM9ITEsQT1mdW5jdGlvbihlLHQpe3JldHVybiBl
PT09dD8oUz0hMCwwKTowfSxqPXR5cGVvZiB0LEQ9MTw8MzEsTD17fS5oYXNPd25Qcm9wZXJ0eSxI
PVtdLHE9SC5wb3AsXz1ILnB1c2gsTT1ILnB1c2gsTz1ILnNsaWNlLEY9SC5pbmRleE9mfHxmdW5j
dGlvbihlKXt2YXIgdD0wLG49dGhpcy5sZW5ndGg7Zm9yKDtuPnQ7dCsrKWlmKHRoaXNbdF09PT1l
KXJldHVybiB0O3JldHVybi0xfSxCPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xh
dXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBs
ZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsUD0iW1xceDIwXFx0XFxyXFxuXFxmXSIs
Uj0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLFc9Ui5yZXBsYWNlKCJ3IiwidyMi
KSwkPSJcXFsiK1ArIiooIitSKyIpIitQKyIqKD86KFsqXiR8IX5dPz0pIitQKyIqKD86KFsnXCJd
KSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woIitXKyIpfCl8KSIrUCsiKlxcXSIsST0iOigiK1Ir
IikoPzpcXCgoKFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woKD86XFxcXC58W15cXFxc
KClbXFxdXXwiKyQucmVwbGFjZSgzLDgpKyIpKil8LiopXFwpfCkiLHo9UmVnRXhwKCJeIitQKyIr
fCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK1ArIiskIiwiZyIpLFg9UmVnRXhwKCJeIitQKyIq
LCIrUCsiKiIpLFU9UmVnRXhwKCJeIitQKyIqKFs+K35dfCIrUCsiKSIrUCsiKiIpLFY9UmVnRXhw
KFArIipbK35dIiksWT1SZWdFeHAoIj0iK1ArIiooW15cXF0nXCJdKikiK1ArIipcXF0iLCJnIiks
Sj1SZWdFeHAoSSksRz1SZWdFeHAoIl4iK1crIiQiKSxRPXtJRDpSZWdFeHAoIl4jKCIrUisiKSIp
LENMQVNTOlJlZ0V4cCgiXlxcLigiK1IrIikiKSxUQUc6UmVnRXhwKCJeKCIrUi5yZXBsYWNlKCJ3
IiwidyoiKSsiKSIpLEFUVFI6UmVnRXhwKCJeIiskKSxQU0VVRE86UmVnRXhwKCJeIitJKSxDSElM
RDpSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBl
KSg/OlxcKCIrUCsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrUCsiKig/OihbKy1dfCki
K1ArIiooXFxkKyl8KSkiK1ArIipcXCl8KSIsImkiKSxib29sOlJlZ0V4cCgiXig/OiIrQisiKSQi
LCJpIiksbmVlZHNDb250ZXh0OlJlZ0V4cCgiXiIrUCsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8
bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitQKyIqKCg/Oi1cXGQpP1xcZCopIitQKyIqXFwpfCko
Pz1bXi1dfCQpIiwiaSIpfSxLPS9eW157XStce1xzKlxbbmF0aXZlIFx3LyxaPS9eKD86IyhbXHct
XSspfChcdyspfFwuKFtcdy1dKykpJC8sZXQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0
dG9uKSQvaSx0dD0vXmhcZCQvaSxudD0vJ3xcXC9nLHJ0PVJlZ0V4cCgiXFxcXChbXFxkYS1mXXsx
LDZ9IitQKyI/fCgiK1ArIil8LikiLCJpZyIpLGl0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0iMHgi
K3QtNjU1MzY7cmV0dXJuIHIhPT1yfHxuP3Q6MD5yP1N0cmluZy5mcm9tQ2hhckNvZGUocis2NTUz
Nik6U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxyPj4xMCw1NjMyMHwxMDIzJnIpfTt0cnl7TS5h
cHBseShIPU8uY2FsbCh3LmNoaWxkTm9kZXMpLHcuY2hpbGROb2RlcyksSFt3LmNoaWxkTm9kZXMu
bGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChvdCl7TT17YXBwbHk6SC5sZW5ndGg/ZnVuY3Rpb24oZSx0
KXtfLmFwcGx5KGUsTy5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7
d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gYXQoZSx0LG4saSl7
dmFyIG8sYSxzLGwsdSxjLGQsbSx5LHg7aWYoKHQ/dC5vd25lckRvY3VtZW50fHx0OncpIT09ZiYm
cCh0KSx0PXR8fGYsbj1ufHxbXSwhZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBuO2lmKDEh
PT0obD10Lm5vZGVUeXBlKSYmOSE9PWwpcmV0dXJuW107aWYoaCYmIWkpe2lmKG89Wi5leGVjKGUp
KWlmKHM9b1sxXSl7aWYoOT09PWwpe2lmKGE9dC5nZXRFbGVtZW50QnlJZChzKSwhYXx8IWEucGFy
ZW50Tm9kZSlyZXR1cm4gbjtpZihhLmlkPT09cylyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZSBpZih0
Lm93bmVyRG9jdW1lbnQmJihhPXQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChzKSkmJnYo
dCxhKSYmYS5pZD09PXMpcmV0dXJuIG4ucHVzaChhKSxufWVsc2V7aWYob1syXSlyZXR1cm4gTS5h
cHBseShuLHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkpLG47aWYoKHM9b1szXSkmJnIuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSYmdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBNLmFwcGx5
KG4sdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHMpKSxufWlmKHIucXNhJiYoIWd8fCFnLnRlc3Qo
ZSkpKXtpZihtPWQ9Yix5PXQseD05PT09bCYmZSwxPT09bCYmIm9iamVjdCIhPT10Lm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkpe2M9bXQoZSksKGQ9dC5nZXRBdHRyaWJ1dGUoImlkIikpP209ZC5yZXBs
YWNlKG50LCJcXCQmIik6dC5zZXRBdHRyaWJ1dGUoImlkIixtKSxtPSJbaWQ9JyIrbSsiJ10gIix1
PWMubGVuZ3RoO3doaWxlKHUtLSljW3VdPW0reXQoY1t1XSk7eT1WLnRlc3QoZSkmJnQucGFyZW50
Tm9kZXx8dCx4PWMuam9pbigiLCIpfWlmKHgpdHJ5e3JldHVybiBNLmFwcGx5KG4seS5xdWVyeVNl
bGVjdG9yQWxsKHgpKSxufWNhdGNoKFQpe31maW5hbGx5e2R8fHQucmVtb3ZlQXR0cmlidXRlKCJp
ZCIpfX19cmV0dXJuIGt0KGUucmVwbGFjZSh6LCIkMSIpLHQsbixpKX1mdW5jdGlvbiBzdCgpe3Zh
ciBlPVtdO2Z1bmN0aW9uIHQobixyKXtyZXR1cm4gZS5wdXNoKG4rPSIgIik+by5jYWNoZUxlbmd0
aCYmZGVsZXRlIHRbZS5zaGlmdCgpXSx0W25dPXJ9cmV0dXJuIHR9ZnVuY3Rpb24gbHQoZSl7cmV0
dXJuIGVbYl09ITAsZX1mdW5jdGlvbiB1dChlKXt2YXIgdD1mLmNyZWF0ZUVsZW1lbnQoImRpdiIp
O3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2gobil7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUm
JnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGN0KGUsdCl7dmFy
IG49ZS5zcGxpdCgifCIpLHI9ZS5sZW5ndGg7d2hpbGUoci0tKW8uYXR0ckhhbmRsZVtuW3JdXT10
fWZ1bmN0aW9uIHB0KGUsdCl7dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYxPT09dC5u
b2RlVHlwZSYmKH50LnNvdXJjZUluZGV4fHxEKS0ofmUuc291cmNlSW5kZXh8fEQpO2lmKHIpcmV0
dXJuIHI7aWYobil3aGlsZShuPW4ubmV4dFNpYmxpbmcpaWYobj09PXQpcmV0dXJuLTE7cmV0dXJu
IGU/MTotMX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFt
ZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1uJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBk
dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3Jl
dHVybigiaW5wdXQiPT09bnx8ImJ1dHRvbiI9PT1uKSYmdC50eXBlPT09ZX19ZnVuY3Rpb24gaHQo
ZSl7cmV0dXJuIGx0KGZ1bmN0aW9uKHQpe3JldHVybiB0PSt0LGx0KGZ1bmN0aW9uKG4scil7dmFy
IGksbz1lKFtdLG4ubGVuZ3RoLHQpLGE9by5sZW5ndGg7d2hpbGUoYS0tKW5baT1vW2FdXSYmKG5b
aV09IShyW2ldPW5baV0pKX0pfSl9cz1hdC5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiYoZS5v
d25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHQ/IkhUTUwiIT09dC5ub2Rl
TmFtZTohMX0scj1hdC5zdXBwb3J0PXt9LHA9YXQuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFy
IG49ZT9lLm93bmVyRG9jdW1lbnR8fGU6dyxpPW4uZGVmYXVsdFZpZXc7cmV0dXJuIG4hPT1mJiY5
PT09bi5ub2RlVHlwZSYmbi5kb2N1bWVudEVsZW1lbnQ/KGY9bixkPW4uZG9jdW1lbnRFbGVtZW50
LGg9IXMobiksaSYmaS5hdHRhY2hFdmVudCYmaSE9PWkudG9wJiZpLmF0dGFjaEV2ZW50KCJvbmJl
Zm9yZXVubG9hZCIsZnVuY3Rpb24oKXtwKCl9KSxyLmF0dHJpYnV0ZXM9dXQoZnVuY3Rpb24oZSl7
cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksci5n
ZXRFbGVtZW50c0J5VGFnTmFtZT11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZChu
LmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0p
LHIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhU
TUw9IjxkaXYgY2xhc3M9J2EnPjwvZGl2PjxkaXYgY2xhc3M9J2EgaSc+PC9kaXY+IixlLmZpcnN0
Q2hpbGQuY2xhc3NOYW1lPSJpIiwyPT09ZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJpIikubGVu
Z3RofSksci5nZXRCeUlkPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBkLmFwcGVuZENoaWxkKGUpLmlk
PWIsIW4uZ2V0RWxlbWVudHNCeU5hbWV8fCFuLmdldEVsZW1lbnRzQnlOYW1lKGIpLmxlbmd0aH0p
LHIuZ2V0QnlJZD8oby5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQuZ2V0RWxlbWVu
dEJ5SWQhPT1qJiZoKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuJiZuLnBhcmVu
dE5vZGU/W25dOltdfX0sby5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHJ0
LGl0KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJpZCIpPT09dH19
KTooZGVsZXRlIG8uZmluZC5JRCxvLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxh
Y2UocnQsaXQpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10eXBlb2YgZS5nZXRBdHRyaWJ1dGVO
b2RlIT09aiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBuJiZuLnZhbHVlPT09dH19
KSxvLmZpbmQuVEFHPXIuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oZSxuKXtyZXR1cm4g
dHlwZW9mIG4uZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1qP24uZ2V0RWxlbWVudHNCeVRhZ05hbWUo
ZSk6dH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoZSk7aWYoIioiPT09ZSl7d2hpbGUobj1vW2krK10pMT09PW4ubm9kZVR5cGUmJnIucHVzaChu
KTtyZXR1cm4gcn1yZXR1cm4gb30sby5maW5kLkNMQVNTPXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSYmZnVuY3Rpb24oZSxuKXtyZXR1cm4gdHlwZW9mIG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9
PWomJmg/bi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpOnR9LG09W10sZz1bXSwoci5xc2E9Sy50
ZXN0KG4ucXVlcnlTZWxlY3RvckFsbCkpJiYodXQoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9Ijxz
ZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxl
Y3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8Zy5wdXNoKCJcXFsiK1ArIiooPzp2YWx1ZXwi
K0IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxnLnB1c2goIjpj
aGVja2VkIil9KSx1dChmdW5jdGlvbihlKXt2YXIgdD1uLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7
dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxlLmFwcGVuZENoaWxkKHQpLnNldEF0dHJp
YnV0ZSgidCIsIiIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3RePScnXSIpLmxlbmd0aCYmZy5wdXNo
KCJbKl4kXT0iK1ArIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQi
KS5sZW5ndGh8fGcucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JB
bGwoIiosOngiKSxnLnB1c2goIiwuKjoiKX0pKSwoci5tYXRjaGVzU2VsZWN0b3I9Sy50ZXN0KHk9
ZC53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGQubW96TWF0Y2hlc1NlbGVjdG9yfHxkLm9NYXRjaGVz
U2VsZWN0b3J8fGQubXNNYXRjaGVzU2VsZWN0b3IpKSYmdXQoZnVuY3Rpb24oZSl7ci5kaXNjb25u
ZWN0ZWRNYXRjaD15LmNhbGwoZSwiZGl2IikseS5jYWxsKGUsIltzIT0nJ106eCIpLG0ucHVzaCgi
IT0iLEkpfSksZz1nLmxlbmd0aCYmUmVnRXhwKGcuam9pbigifCIpKSxtPW0ubGVuZ3RoJiZSZWdF
eHAobS5qb2luKCJ8IikpLHY9Sy50ZXN0KGQuY29udGFpbnMpfHxkLmNvbXBhcmVEb2N1bWVudFBv
c2l0aW9uP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1l
bnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBl
fHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYx
NiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGls
ZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sQT1kLmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIFM9ITAsMDt2YXIg
aT10LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZl
LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpO3JldHVybiBpPzEmaXx8IXIuc29ydERldGFjaGVk
JiZ0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpPT09aT9lPT09bnx8dih3LGUpPy0xOnQ9PT1u
fHx2KHcsdCk/MTpjP0YuY2FsbChjLGUpLUYuY2FsbChjLHQpOjA6NCZpPy0xOjE6ZS5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbj8tMToxfTpmdW5jdGlvbihlLHQpe3ZhciByLGk9MCxvPWUucGFyZW50
Tm9kZSxhPXQucGFyZW50Tm9kZSxzPVtlXSxsPVt0XTtpZihlPT09dClyZXR1cm4gUz0hMCwwO2lm
KCFvfHwhYSlyZXR1cm4gZT09PW4/LTE6dD09PW4/MTpvPy0xOmE/MTpjP0YuY2FsbChjLGUpLUYu
Y2FsbChjLHQpOjA7aWYobz09PWEpcmV0dXJuIHB0KGUsdCk7cj1lO3doaWxlKHI9ci5wYXJlbnRO
b2RlKXMudW5zaGlmdChyKTtyPXQ7d2hpbGUocj1yLnBhcmVudE5vZGUpbC51bnNoaWZ0KHIpO3do
aWxlKHNbaV09PT1sW2ldKWkrKztyZXR1cm4gaT9wdChzW2ldLGxbaV0pOnNbaV09PT13Py0xOmxb
aV09PT13PzE6MH0sbik6Zn0sYXQubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBhdChlLG51
bGwsbnVsbCx0KX0sYXQubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoKGUub3duZXJE
b2N1bWVudHx8ZSkhPT1mJiZwKGUpLHQ9dC5yZXBsYWNlKFksIj0nJDEnXSIpLCEoIXIubWF0Y2hl
c1NlbGVjdG9yfHwhaHx8bSYmbS50ZXN0KHQpfHxnJiZnLnRlc3QodCkpKXRyeXt2YXIgbj15LmNh
bGwoZSx0KTtpZihufHxyLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9j
dW1lbnQubm9kZVR5cGUpcmV0dXJuIG59Y2F0Y2goaSl7fXJldHVybiBhdCh0LGYsbnVsbCxbZV0p
Lmxlbmd0aD4wfSxhdC5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybihlLm93bmVyRG9jdW1l
bnR8fGUpIT09ZiYmcChlKSx2KGUsdCl9LGF0LmF0dHI9ZnVuY3Rpb24oZSxuKXsoZS5vd25lckRv
Y3VtZW50fHxlKSE9PWYmJnAoZSk7dmFyIGk9by5hdHRySGFuZGxlW24udG9Mb3dlckNhc2UoKV0s
YT1pJiZMLmNhbGwoby5hdHRySGFuZGxlLG4udG9Mb3dlckNhc2UoKSk/aShlLG4sIWgpOnQ7cmV0
dXJuIGE9PT10P3IuYXR0cmlidXRlc3x8IWg/ZS5nZXRBdHRyaWJ1dGUobik6KGE9ZS5nZXRBdHRy
aWJ1dGVOb2RlKG4pKSYmYS5zcGVjaWZpZWQ/YS52YWx1ZTpudWxsOmF9LGF0LmVycm9yPWZ1bmN0
aW9uKGUpe3Rocm93IEVycm9yKCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9u
OiAiK2UpfSxhdC51bmlxdWVTb3J0PWZ1bmN0aW9uKGUpe3ZhciB0LG49W10saT0wLG89MDtpZihT
PSFyLmRldGVjdER1cGxpY2F0ZXMsYz0hci5zb3J0U3RhYmxlJiZlLnNsaWNlKDApLGUuc29ydChB
KSxTKXt3aGlsZSh0PWVbbysrXSl0PT09ZVtvXSYmKGk9bi5wdXNoKG8pKTt3aGlsZShpLS0pZS5z
cGxpY2UobltpXSwxKX1yZXR1cm4gZX0sYT1hdC5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49
IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09aSl7aWYoInN0
cmluZyI9PXR5cGVvZiBlLnRleHRDb250ZW50KXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUu
Zmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1hKGUpfWVsc2UgaWYoMz09PWl8fDQ9PT1p
KXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIGZvcig7dD1lW3JdO3IrKyluKz1hKHQpO3JldHVybiBu
fSxvPWF0LnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmx0LG1hdGNoOlEs
YXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmly
c3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIs
Zmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1
bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZShydCxpdCksZVszXT0oZVs0XXx8ZVs1
XXx8IiIpLnJlcGxhY2UocnQsaXQpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUu
c2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2Fz
ZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxhdC5lcnJvcihlWzBdKSxlWzRdPSso
ZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVd
PSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZhdC5lcnJvcihlWzBdKSxlfSxQU0VV
RE86ZnVuY3Rpb24oZSl7dmFyIG4scj0hZVs1XSYmZVsyXTtyZXR1cm4gUS5DSElMRC50ZXN0KGVb
MF0pP251bGw6KGVbM10mJmVbNF0hPT10P2VbMl09ZVs0XTpyJiZKLnRlc3QocikmJihuPW10KHIs
ITApKSYmKG49ci5pbmRleE9mKCIpIixyLmxlbmd0aC1uKS1yLmxlbmd0aCkmJihlWzBdPWVbMF0u
c2xpY2UoMCxuKSxlWzJdPXIuc2xpY2UoMCxuKSksZS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFH
OmZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShydCxpdCkudG9Mb3dlckNhc2UoKTtyZXR1cm4i
KiI9PT1lP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVOYW1l
JiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10fX0sQ0xBU1M6ZnVuY3Rpb24oZSl7dmFyIHQ9
TltlKyIgIl07cmV0dXJuIHR8fCh0PVJlZ0V4cCgiKF58IitQKyIpIitlKyIoIitQKyJ8JCkiKSkm
Jk4oZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05h
bWUmJmUuY2xhc3NOYW1lfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGUhPT1qJiZlLmdldEF0dHJpYnV0
ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihy
KXt2YXIgaT1hdC5hdHRyKHIsZSk7cmV0dXJuIG51bGw9PWk/IiE9Ij09PXQ6dD8oaSs9IiIsIj0i
PT09dD9pPT09bjoiIT0iPT09dD9pIT09bjoiXj0iPT09dD9uJiYwPT09aS5pbmRleE9mKG4pOiIq
PSI9PT10P24mJmkuaW5kZXhPZihuKT4tMToiJD0iPT09dD9uJiZpLnNsaWNlKC1uLmxlbmd0aCk9
PT1uOiJ+PSI9PT10PygiICIraSsiICIpLmluZGV4T2Yobik+LTE6Inw9Ij09PXQ/aT09PW58fGku
c2xpY2UoMCxuLmxlbmd0aCsxKT09PW4rIi0iOiExKTohMH19LENISUxEOmZ1bmN0aW9uKGUsdCxu
LHIsaSl7dmFyIG89Im50aCIhPT1lLnNsaWNlKDAsMyksYT0ibGFzdCIhPT1lLnNsaWNlKC00KSxz
PSJvZi10eXBlIj09PXQ7cmV0dXJuIDE9PT1yJiYwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4hIWUu
cGFyZW50Tm9kZX06ZnVuY3Rpb24odCxuLGwpe3ZhciB1LGMscCxmLGQsaCxnPW8hPT1hPyJuZXh0
U2libGluZyI6InByZXZpb3VzU2libGluZyIsbT10LnBhcmVudE5vZGUseT1zJiZ0Lm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCksdj0hbCYmIXM7aWYobSl7aWYobyl7d2hpbGUoZyl7cD10O3doaWxlKHA9
cFtnXSlpZihzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpcmV0
dXJuITE7aD1nPSJvbmx5Ij09PWUmJiFoJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKGg9W2E/
bS5maXJzdENoaWxkOm0ubGFzdENoaWxkXSxhJiZ2KXtjPW1bYl18fChtW2JdPXt9KSx1PWNbZV18
fFtdLGQ9dVswXT09PVQmJnVbMV0sZj11WzBdPT09VCYmdVsyXSxwPWQmJm0uY2hpbGROb2Rlc1tk
XTt3aGlsZShwPSsrZCYmcCYmcFtnXXx8KGY9ZD0wKXx8aC5wb3AoKSlpZigxPT09cC5ub2RlVHlw
ZSYmKytmJiZwPT09dCl7Y1tlXT1bVCxkLGZdO2JyZWFrfX1lbHNlIGlmKHYmJih1PSh0W2JdfHwo
dFtiXT17fSkpW2VdKSYmdVswXT09PVQpZj11WzFdO2Vsc2Ugd2hpbGUocD0rK2QmJnAmJnBbZ118
fChmPWQ9MCl8fGgucG9wKCkpaWYoKHM/cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eToxPT09
cC5ub2RlVHlwZSkmJisrZiYmKHYmJigocFtiXXx8KHBbYl09e30pKVtlXT1bVCxmXSkscD09PXQp
KWJyZWFrO3JldHVybiBmLT1pLGY9PT1yfHwwPT09ZiVyJiZmL3I+PTB9fX0sUFNFVURPOmZ1bmN0
aW9uKGUsdCl7dmFyIG4scj1vLnBzZXVkb3NbZV18fG8uc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNl
KCldfHxhdC5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiByW2JdP3IodCk6
ci5sZW5ndGg+MT8obj1bZSxlLCIiLHRdLG8uc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRv
TG93ZXJDYXNlKCkpP2x0KGZ1bmN0aW9uKGUsbil7dmFyIGksbz1yKGUsdCksYT1vLmxlbmd0aDt3
aGlsZShhLS0paT1GLmNhbGwoZSxvW2FdKSxlW2ldPSEobltpXT1vW2FdKX0pOmZ1bmN0aW9uKGUp
e3JldHVybiByKGUsMCxuKX0pOnJ9fSxwc2V1ZG9zOntub3Q6bHQoZnVuY3Rpb24oZSl7dmFyIHQ9
W10sbj1bXSxyPWwoZS5yZXBsYWNlKHosIiQxIikpO3JldHVybiByW2JdP2x0KGZ1bmN0aW9uKGUs
dCxuLGkpe3ZhciBvLGE9cihlLG51bGwsaSxbXSkscz1lLmxlbmd0aDt3aGlsZShzLS0pKG89YVtz
XSkmJihlW3NdPSEodFtzXT1vKSl9KTpmdW5jdGlvbihlLGksbyl7cmV0dXJuIHRbMF09ZSxyKHQs
bnVsbCxvLG4pLCFuLnBvcCgpfX0pLGhhczpsdChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24o
dCl7cmV0dXJuIGF0KGUsdCkubGVuZ3RoPjB9fSksY29udGFpbnM6bHQoZnVuY3Rpb24oZSl7cmV0
dXJuIGZ1bmN0aW9uKHQpe3JldHVybih0LnRleHRDb250ZW50fHx0LmlubmVyVGV4dHx8YSh0KSku
aW5kZXhPZihlKT4tMX19KSxsYW5nOmx0KGZ1bmN0aW9uKGUpe3JldHVybiBHLnRlc3QoZXx8IiIp
fHxhdC5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIitlKSxlPWUucmVwbGFjZShydCxpdCkudG9M
b3dlckNhc2UoKSxmdW5jdGlvbih0KXt2YXIgbjtkbyBpZihuPWg/dC5sYW5nOnQuZ2V0QXR0cmli
dXRlKCJ4bWw6bGFuZyIpfHx0LmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybiBuPW4udG9Mb3dl
ckNhc2UoKSxuPT09ZXx8MD09PW4uaW5kZXhPZihlKyItIik7d2hpbGUoKHQ9dC5wYXJlbnROb2Rl
KSYmMT09PXQubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbih0KXt2YXIgbj1l
LmxvY2F0aW9uJiZlLmxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJm4uc2xpY2UoMSk9PT10LmlkfSxy
b290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09ZH0sZm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9
PT1mLmFjdGl2ZUVsZW1lbnQmJighZi5oYXNGb2N1c3x8Zi5oYXNGb2N1cygpKSYmISEoZS50eXBl
fHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNh
YmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSEwfSxj
aGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4i
aW5wdXQiPT09dCYmISFlLmNoZWNrZWR8fCJvcHRpb24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxl
Y3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0
ZWRJbmRleCxlLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RD
aGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVOYW1lPiJAInx8Mz09PWUubm9kZVR5cGV8
fDQ9PT1lLm5vZGVUeXBlKXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0
dXJuIW8ucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0dC50ZXN0
KGUubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZXQudGVzdChlLm5vZGVOYW1l
KX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1
cm4iaW5wdXQiPT09dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5j
dGlvbihlKXt2YXIgdDtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYi
dGV4dCI9PT1lLnR5cGUmJihudWxsPT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8dC50b0xv
d2VyQ2FzZSgpPT09ZS50eXBlKX0sZmlyc3Q6aHQoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0
Omh0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTpodChmdW5jdGlvbihlLHQsbil7cmV0
dXJuWzA+bj9uK3Q6bl19KSxldmVuOmh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49MDtmb3IoO3Q+bjtu
Kz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDpodChmdW5jdGlvbihlLHQpe3ZhciBuPTE7Zm9y
KDt0Pm47bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxsdDpodChmdW5jdGlvbihlLHQsbil7dmFy
IHI9MD5uP24rdDpuO2Zvcig7LS1yPj0wOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDpodChmdW5j
dGlvbihlLHQsbil7dmFyIHI9MD5uP24rdDpuO2Zvcig7dD4rK3I7KWUucHVzaChyKTtyZXR1cm4g
ZX0pfX0sby5wc2V1ZG9zLm50aD1vLnBzZXVkb3MuZXE7Zm9yKG4gaW57cmFkaW86ITAsY2hlY2ti
b3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pby5wc2V1ZG9zW25dPWZ0KG4pO2Zv
cihuIGlue3N1Ym1pdDohMCxyZXNldDohMH0pby5wc2V1ZG9zW25dPWR0KG4pO2Z1bmN0aW9uIGd0
KCl7fWd0LnByb3RvdHlwZT1vLmZpbHRlcnM9by5wc2V1ZG9zLG8uc2V0RmlsdGVycz1uZXcgZ3Q7
ZnVuY3Rpb24gbXQoZSx0KXt2YXIgbixyLGksYSxzLGwsdSxjPWtbZSsiICJdO2lmKGMpcmV0dXJu
IHQ/MDpjLnNsaWNlKDApO3M9ZSxsPVtdLHU9by5wcmVGaWx0ZXI7d2hpbGUocyl7KCFufHwocj1Y
LmV4ZWMocykpKSYmKHImJihzPXMuc2xpY2UoclswXS5sZW5ndGgpfHxzKSxsLnB1c2goaT1bXSkp
LG49ITEsKHI9VS5leGVjKHMpKSYmKG49ci5zaGlmdCgpLGkucHVzaCh7dmFsdWU6bix0eXBlOnJb
MF0ucmVwbGFjZSh6LCIgIil9KSxzPXMuc2xpY2Uobi5sZW5ndGgpKTtmb3IoYSBpbiBvLmZpbHRl
cikhKHI9UVthXS5leGVjKHMpKXx8dVthXSYmIShyPXVbYV0ocikpfHwobj1yLnNoaWZ0KCksaS5w
dXNoKHt2YWx1ZTpuLHR5cGU6YSxtYXRjaGVzOnJ9KSxzPXMuc2xpY2Uobi5sZW5ndGgpKTtpZigh
bilicmVha31yZXR1cm4gdD9zLmxlbmd0aDpzP2F0LmVycm9yKGUpOmsoZSxsKS5zbGljZSgwKX1m
dW5jdGlvbiB5dChlKXt2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjtmb3IoO24+dDt0Kyspcis9ZVt0
XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiB2dChlLHQsbil7dmFyIHI9dC5kaXIsbz1uJiYicGFy
ZW50Tm9kZSI9PT1yLGE9QysrO3JldHVybiB0LmZpcnN0P2Z1bmN0aW9uKHQsbixpKXt3aGlsZSh0
PXRbcl0paWYoMT09PXQubm9kZVR5cGV8fG8pcmV0dXJuIGUodCxuLGkpfTpmdW5jdGlvbih0LG4s
cyl7dmFyIGwsdSxjLHA9VCsiICIrYTtpZihzKXt3aGlsZSh0PXRbcl0paWYoKDE9PT10Lm5vZGVU
eXBlfHxvKSYmZSh0LG4scykpcmV0dXJuITB9ZWxzZSB3aGlsZSh0PXRbcl0paWYoMT09PXQubm9k
ZVR5cGV8fG8paWYoYz10W2JdfHwodFtiXT17fSksKHU9Y1tyXSkmJnVbMF09PT1wKXtpZigobD11
WzFdKT09PSEwfHxsPT09aSlyZXR1cm4gbD09PSEwfWVsc2UgaWYodT1jW3JdPVtwXSx1WzFdPWUo
dCxuLHMpfHxpLHVbMV09PT0hMClyZXR1cm4hMH19ZnVuY3Rpb24gYnQoZSl7cmV0dXJuIGUubGVu
Z3RoPjE/ZnVuY3Rpb24odCxuLHIpe3ZhciBpPWUubGVuZ3RoO3doaWxlKGktLSlpZighZVtpXSh0
LG4scikpcmV0dXJuITE7cmV0dXJuITB9OmVbMF19ZnVuY3Rpb24geHQoZSx0LG4scixpKXt2YXIg
byxhPVtdLHM9MCxsPWUubGVuZ3RoLHU9bnVsbCE9dDtmb3IoO2w+cztzKyspKG89ZVtzXSkmJigh
bnx8bihvLHIsaSkpJiYoYS5wdXNoKG8pLHUmJnQucHVzaChzKSk7cmV0dXJuIGF9ZnVuY3Rpb24g
d3QoZSx0LG4scixpLG8pe3JldHVybiByJiYhcltiXSYmKHI9d3QocikpLGkmJiFpW2JdJiYoaT13
dChpLG8pKSxsdChmdW5jdGlvbihvLGEscyxsKXt2YXIgdSxjLHAsZj1bXSxkPVtdLGg9YS5sZW5n
dGgsZz1vfHxOdCh0fHwiKiIscy5ub2RlVHlwZT9bc106cyxbXSksbT0hZXx8IW8mJnQ/Zzp4dChn
LGYsZSxzLGwpLHk9bj9pfHwobz9lOmh8fHIpP1tdOmE6bTtpZihuJiZuKG0seSxzLGwpLHIpe3U9
eHQoeSxkKSxyKHUsW10scyxsKSxjPXUubGVuZ3RoO3doaWxlKGMtLSkocD11W2NdKSYmKHlbZFtj
XV09IShtW2RbY11dPXApKX1pZihvKXtpZihpfHxlKXtpZihpKXt1PVtdLGM9eS5sZW5ndGg7d2hp
bGUoYy0tKShwPXlbY10pJiZ1LnB1c2gobVtjXT1wKTtpKG51bGwseT1bXSx1LGwpfWM9eS5sZW5n
dGg7d2hpbGUoYy0tKShwPXlbY10pJiYodT1pP0YuY2FsbChvLHApOmZbY10pPi0xJiYob1t1XT0h
KGFbdV09cCkpfX1lbHNlIHk9eHQoeT09PWE/eS5zcGxpY2UoaCx5Lmxlbmd0aCk6eSksaT9pKG51
bGwsYSx5LGwpOk0uYXBwbHkoYSx5KX0pfWZ1bmN0aW9uIFR0KGUpe3ZhciB0LG4scixpPWUubGVu
Z3RoLGE9by5yZWxhdGl2ZVtlWzBdLnR5cGVdLHM9YXx8by5yZWxhdGl2ZVsiICJdLGw9YT8xOjAs
Yz12dChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXR9LHMsITApLHA9dnQoZnVuY3Rpb24oZSl7cmV0
dXJuIEYuY2FsbCh0LGUpPi0xfSxzLCEwKSxmPVtmdW5jdGlvbihlLG4scil7cmV0dXJuIWEmJihy
fHxuIT09dSl8fCgodD1uKS5ub2RlVHlwZT9jKGUsbixyKTpwKGUsbixyKSl9XTtmb3IoO2k+bDts
KyspaWYobj1vLnJlbGF0aXZlW2VbbF0udHlwZV0pZj1bdnQoYnQoZiksbildO2Vsc2V7aWYobj1v
LmZpbHRlcltlW2xdLnR5cGVdLmFwcGx5KG51bGwsZVtsXS5tYXRjaGVzKSxuW2JdKXtmb3Iocj0r
K2w7aT5yO3IrKylpZihvLnJlbGF0aXZlW2Vbcl0udHlwZV0pYnJlYWs7cmV0dXJuIHd0KGw+MSYm
YnQoZiksbD4xJiZ5dChlLnNsaWNlKDAsbC0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWVbbC0yXS50
eXBlPyIqIjoiIn0pKS5yZXBsYWNlKHosIiQxIiksbixyPmwmJlR0KGUuc2xpY2UobCxyKSksaT5y
JiZUdChlPWUuc2xpY2UocikpLGk+ciYmeXQoZSkpfWYucHVzaChuKX1yZXR1cm4gYnQoZil9ZnVu
Y3Rpb24gQ3QoZSx0KXt2YXIgbj0wLHI9dC5sZW5ndGg+MCxhPWUubGVuZ3RoPjAscz1mdW5jdGlv
bihzLGwsYyxwLGQpe3ZhciBoLGcsbSx5PVtdLHY9MCxiPSIwIix4PXMmJltdLHc9bnVsbCE9ZCxD
PXUsTj1zfHxhJiZvLmZpbmQuVEFHKCIqIixkJiZsLnBhcmVudE5vZGV8fGwpLGs9VCs9bnVsbD09
Qz8xOk1hdGgucmFuZG9tKCl8fC4xO2Zvcih3JiYodT1sIT09ZiYmbCxpPW4pO251bGwhPShoPU5b
Yl0pO2IrKyl7aWYoYSYmaCl7Zz0wO3doaWxlKG09ZVtnKytdKWlmKG0oaCxsLGMpKXtwLnB1c2go
aCk7YnJlYWt9dyYmKFQ9ayxpPSsrbil9ciYmKChoPSFtJiZoKSYmdi0tLHMmJngucHVzaChoKSl9
aWYodis9YixyJiZiIT09dil7Zz0wO3doaWxlKG09dFtnKytdKW0oeCx5LGwsYyk7aWYocyl7aWYo
dj4wKXdoaWxlKGItLSl4W2JdfHx5W2JdfHwoeVtiXT1xLmNhbGwocCkpO3k9eHQoeSl9TS5hcHBs
eShwLHkpLHcmJiFzJiZ5Lmxlbmd0aD4wJiZ2K3QubGVuZ3RoPjEmJmF0LnVuaXF1ZVNvcnQocCl9
cmV0dXJuIHcmJihUPWssdT1DKSx4fTtyZXR1cm4gcj9sdChzKTpzfWw9YXQuY29tcGlsZT1mdW5j
dGlvbihlLHQpe3ZhciBuLHI9W10saT1bXSxvPUVbZSsiICJdO2lmKCFvKXt0fHwodD1tdChlKSks
bj10Lmxlbmd0aDt3aGlsZShuLS0pbz1UdCh0W25dKSxvW2JdP3IucHVzaChvKTppLnB1c2gobyk7
bz1FKGUsQ3QoaSxyKSl9cmV0dXJuIG99O2Z1bmN0aW9uIE50KGUsdCxuKXt2YXIgcj0wLGk9dC5s
ZW5ndGg7Zm9yKDtpPnI7cisrKWF0KGUsdFtyXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBrdChlLHQs
bixpKXt2YXIgYSxzLHUsYyxwLGY9bXQoZSk7aWYoIWkmJjE9PT1mLmxlbmd0aCl7aWYocz1mWzBd
PWZbMF0uc2xpY2UoMCkscy5sZW5ndGg+MiYmIklEIj09PSh1PXNbMF0pLnR5cGUmJnIuZ2V0QnlJ
ZCYmOT09PXQubm9kZVR5cGUmJmgmJm8ucmVsYXRpdmVbc1sxXS50eXBlXSl7aWYodD0oby5maW5k
LklEKHUubWF0Y2hlc1swXS5yZXBsYWNlKHJ0LGl0KSx0KXx8W10pWzBdLCF0KXJldHVybiBuO2U9
ZS5zbGljZShzLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1hPVEubmVlZHNDb250ZXh0LnRlc3QoZSk/
MDpzLmxlbmd0aDt3aGlsZShhLS0pe2lmKHU9c1thXSxvLnJlbGF0aXZlW2M9dS50eXBlXSlicmVh
aztpZigocD1vLmZpbmRbY10pJiYoaT1wKHUubWF0Y2hlc1swXS5yZXBsYWNlKHJ0LGl0KSxWLnRl
c3Qoc1swXS50eXBlKSYmdC5wYXJlbnROb2RlfHx0KSkpe2lmKHMuc3BsaWNlKGEsMSksZT1pLmxl
bmd0aCYmeXQocyksIWUpcmV0dXJuIE0uYXBwbHkobixpKSxuO2JyZWFrfX19cmV0dXJuIGwoZSxm
KShpLHQsIWgsbixWLnRlc3QoZSkpLG59ci5zb3J0U3RhYmxlPWIuc3BsaXQoIiIpLnNvcnQoQSku
am9pbigiIik9PT1iLHIuZGV0ZWN0RHVwbGljYXRlcz1TLHAoKSxyLnNvcnREZXRhY2hlZD11dChm
dW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGYuY3JlYXRlRWxl
bWVudCgiZGl2IikpfSksdXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8YSBocmVm
PScjJz48L2E+IiwiIyI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8Y3Qo
InR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcj90OmUuZ2V0
QXR0cmlidXRlKG4sInR5cGUiPT09bi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxyLmF0dHJpYnV0ZXMm
JnV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGls
ZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRl
KCJ2YWx1ZSIpfSl8fGN0KCJ2YWx1ZSIsZnVuY3Rpb24oZSxuLHIpe3JldHVybiByfHwiaW5wdXQi
IT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3Q6ZS5kZWZhdWx0VmFsdWV9KSx1dChmdW5jdGlv
bihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8Y3QoQixmdW5j
dGlvbihlLG4scil7dmFyIGk7cmV0dXJuIHI/dDooaT1lLmdldEF0dHJpYnV0ZU5vZGUobikpJiZp
LnNwZWNpZmllZD9pLnZhbHVlOmVbbl09PT0hMD9uLnRvTG93ZXJDYXNlKCk6bnVsbH0pLHguZmlu
ZD1hdCx4LmV4cHI9YXQuc2VsZWN0b3JzLHguZXhwclsiOiJdPXguZXhwci5wc2V1ZG9zLHgudW5p
cXVlPWF0LnVuaXF1ZVNvcnQseC50ZXh0PWF0LmdldFRleHQseC5pc1hNTERvYz1hdC5pc1hNTCx4
LmNvbnRhaW5zPWF0LmNvbnRhaW5zfShlKTt2YXIgTz17fTtmdW5jdGlvbiBGKGUpe3ZhciB0PU9b
ZV09e307cmV0dXJuIHguZWFjaChlLm1hdGNoKFQpfHxbXSxmdW5jdGlvbihlLG4pe3Rbbl09ITB9
KSx0fXguQ2FsbGJhY2tzPWZ1bmN0aW9uKGUpe2U9InN0cmluZyI9PXR5cGVvZiBlP09bZV18fEYo
ZSk6eC5leHRlbmQoe30sZSk7dmFyIG4scixpLG8sYSxzLGw9W10sdT0hZS5vbmNlJiZbXSxjPWZ1
bmN0aW9uKHQpe2ZvcihyPWUubWVtb3J5JiZ0LGk9ITAsYT1zfHwwLHM9MCxvPWwubGVuZ3RoLG49
ITA7bCYmbz5hO2ErKylpZihsW2FdLmFwcGx5KHRbMF0sdFsxXSk9PT0hMSYmZS5zdG9wT25GYWxz
ZSl7cj0hMTticmVha31uPSExLGwmJih1P3UubGVuZ3RoJiZjKHUuc2hpZnQoKSk6cj9sPVtdOnAu
ZGlzYWJsZSgpKX0scD17YWRkOmZ1bmN0aW9uKCl7aWYobCl7dmFyIHQ9bC5sZW5ndGg7KGZ1bmN0
aW9uIGkodCl7eC5lYWNoKHQsZnVuY3Rpb24odCxuKXt2YXIgcj14LnR5cGUobik7ImZ1bmN0aW9u
Ij09PXI/ZS51bmlxdWUmJnAuaGFzKG4pfHxsLnB1c2gobik6biYmbi5sZW5ndGgmJiJzdHJpbmci
IT09ciYmaShuKX0pfSkoYXJndW1lbnRzKSxuP289bC5sZW5ndGg6ciYmKHM9dCxjKHIpKX1yZXR1
cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIGwmJnguZWFjaChhcmd1bWVudHMsZnVu
Y3Rpb24oZSx0KXt2YXIgcjt3aGlsZSgocj14LmluQXJyYXkodCxsLHIpKT4tMSlsLnNwbGljZShy
LDEpLG4mJihvPj1yJiZvLS0sYT49ciYmYS0tKX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1
cm4gZT94LmluQXJyYXkoZSxsKT4tMTohKCFsfHwhbC5sZW5ndGgpfSxlbXB0eTpmdW5jdGlvbigp
e3JldHVybiBsPVtdLG89MCx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGw9dT1yPXQs
dGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hbH0sbG9jazpmdW5jdGlvbigpe3JldHVy
biB1PXQscnx8cC5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIXV9LGZp
cmVXaXRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIWx8fGkmJiF1fHwodD10fHxbXSx0PVtlLHQuc2xp
Y2U/dC5zbGljZSgpOnRdLG4/dS5wdXNoKHQpOmModCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXty
ZXR1cm4gcC5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXty
ZXR1cm4hIWl9fTtyZXR1cm4gcH0seC5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciB0
PVtbInJlc29sdmUiLCJkb25lIix4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQi
XSxbInJlamVjdCIsImZhaWwiLHguQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJd
LFsibm90aWZ5IiwicHJvZ3Jlc3MiLHguQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLG49InBlbmRpbmci
LHI9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBp
LmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3Zh
ciBlPWFyZ3VtZW50cztyZXR1cm4geC5EZWZlcnJlZChmdW5jdGlvbihuKXt4LmVhY2godCxmdW5j
dGlvbih0LG8pe3ZhciBhPW9bMF0scz14LmlzRnVuY3Rpb24oZVt0XSkmJmVbdF07aVtvWzFdXShm
dW5jdGlvbigpe3ZhciBlPXMmJnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJnguaXNGdW5jdGlv
bihlLnByb21pc2UpP2UucHJvbWlzZSgpLmRvbmUobi5yZXNvbHZlKS5mYWlsKG4ucmVqZWN0KS5w
cm9ncmVzcyhuLm5vdGlmeSk6blthKyJXaXRoIl0odGhpcz09PXI/bi5wcm9taXNlKCk6dGhpcyxz
P1tlXTphcmd1bWVudHMpfSl9KSxlPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24o
ZSl7cmV0dXJuIG51bGwhPWU/eC5leHRlbmQoZSxyKTpyfX0saT17fTtyZXR1cm4gci5waXBlPXIu
dGhlbix4LmVhY2godCxmdW5jdGlvbihlLG8pe3ZhciBhPW9bMl0scz1vWzNdO3Jbb1sxXV09YS5h
ZGQscyYmYS5hZGQoZnVuY3Rpb24oKXtuPXN9LHRbMV5lXVsyXS5kaXNhYmxlLHRbMl1bMl0ubG9j
ayksaVtvWzBdXT1mdW5jdGlvbigpe3JldHVybiBpW29bMF0rIldpdGgiXSh0aGlzPT09aT9yOnRo
aXMsYXJndW1lbnRzKSx0aGlzfSxpW29bMF0rIldpdGgiXT1hLmZpcmVXaXRofSksci5wcm9taXNl
KGkpLGUmJmUuY2FsbChpLGkpLGl9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWcuY2FsbChh
cmd1bWVudHMpLHI9bi5sZW5ndGgsaT0xIT09cnx8ZSYmeC5pc0Z1bmN0aW9uKGUucHJvbWlzZSk/
cjowLG89MT09PWk/ZTp4LkRlZmVycmVkKCksYT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0
aW9uKHIpe3RbZV09dGhpcyxuW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9nLmNhbGwoYXJndW1lbnRz
KTpyLG49PT1zP28ubm90aWZ5V2l0aCh0LG4pOi0taXx8by5yZXNvbHZlV2l0aCh0LG4pfX0scyxs
LHU7aWYocj4xKWZvcihzPUFycmF5KHIpLGw9QXJyYXkociksdT1BcnJheShyKTtyPnQ7dCsrKW5b
dF0mJnguaXNGdW5jdGlvbihuW3RdLnByb21pc2UpP25bdF0ucHJvbWlzZSgpLmRvbmUoYSh0LHUs
bikpLmZhaWwoby5yZWplY3QpLnByb2dyZXNzKGEodCxsLHMpKTotLWk7cmV0dXJuIGl8fG8ucmVz
b2x2ZVdpdGgodSxuKSxvLnByb21pc2UoKX19KSx4LnN1cHBvcnQ9ZnVuY3Rpb24odCl7dmFyIG4s
cixvLHMsbCx1LGMscCxmLGQ9YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtpZihkLnNldEF0dHJpYnV0
ZSgiY2xhc3NOYW1lIiwidCIpLGQuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48
YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLG49ZC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiKiIpfHxbXSxyPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSwhcnx8
IXIuc3R5bGV8fCFuLmxlbmd0aClyZXR1cm4gdDtzPWEuY3JlYXRlRWxlbWVudCgic2VsZWN0Iiks
dT1zLmFwcGVuZENoaWxkKGEuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLG89ZC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxyLnN0eWxlLmNzc1RleHQ9InRvcDoxcHg7ZmxvYXQ6bGVm
dDtvcGFjaXR5Oi41Iix0LmdldFNldEF0dHJpYnV0ZT0idCIhPT1kLmNsYXNzTmFtZSx0LmxlYWRp
bmdXaGl0ZXNwYWNlPTM9PT1kLmZpcnN0Q2hpbGQubm9kZVR5cGUsdC50Ym9keT0hZC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsdC5odG1sU2VyaWFsaXplPSEhZC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCx0LnN0eWxlPS90b3AvLnRlc3Qoci5nZXRBdHRy
aWJ1dGUoInN0eWxlIikpLHQuaHJlZk5vcm1hbGl6ZWQ9Ii9hIj09PXIuZ2V0QXR0cmlidXRlKCJo
cmVmIiksdC5vcGFjaXR5PS9eMC41Ly50ZXN0KHIuc3R5bGUub3BhY2l0eSksdC5jc3NGbG9hdD0h
IXIuc3R5bGUuY3NzRmxvYXQsdC5jaGVja09uPSEhby52YWx1ZSx0Lm9wdFNlbGVjdGVkPXUuc2Vs
ZWN0ZWQsdC5lbmN0eXBlPSEhYS5jcmVhdGVFbGVtZW50KCJmb3JtIikuZW5jdHlwZSx0Lmh0bWw1
Q2xvbmU9Ijw6bmF2PjwvOm5hdj4iIT09YS5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUo
ITApLm91dGVySFRNTCx0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQ9ITEsdC5zaHJpbmtXcmFwQmxv
Y2tzPSExLHQucGl4ZWxQb3NpdGlvbj0hMSx0LmRlbGV0ZUV4cGFuZG89ITAsdC5ub0Nsb25lRXZl
bnQ9ITAsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSEwLHQuYm94U2l6aW5nUmVsaWFibGU9ITAsby5j
aGVja2VkPSEwLHQubm9DbG9uZUNoZWNrZWQ9by5jbG9uZU5vZGUoITApLmNoZWNrZWQscy5kaXNh
YmxlZD0hMCx0Lm9wdERpc2FibGVkPSF1LmRpc2FibGVkO3RyeXtkZWxldGUgZC50ZXN0fWNhdGNo
KGgpe3QuZGVsZXRlRXhwYW5kbz0hMX1vPWEuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxvLnNldEF0
dHJpYnV0ZSgidmFsdWUiLCIiKSx0LmlucHV0PSIiPT09by5nZXRBdHRyaWJ1dGUoInZhbHVlIiks
by52YWx1ZT0idCIsby5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLHQucmFkaW9WYWx1ZT0i
dCI9PT1vLnZhbHVlLG8uc2V0QXR0cmlidXRlKCJjaGVja2VkIiwidCIpLG8uc2V0QXR0cmlidXRl
KCJuYW1lIiwidCIpLGw9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbC5hcHBlbmRDaGlsZChv
KSx0LmFwcGVuZENoZWNrZWQ9by5jaGVja2VkLHQuY2hlY2tDbG9uZT1sLmNsb25lTm9kZSghMCku
Y2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxkLmF0dGFjaEV2ZW50JiYoZC5hdHRhY2hF
dmVudCgib25jbGljayIsZnVuY3Rpb24oKXt0Lm5vQ2xvbmVFdmVudD0hMX0pLGQuY2xvbmVOb2Rl
KCEwKS5jbGljaygpKTtmb3IoZiBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWQu
c2V0QXR0cmlidXRlKGM9Im9uIitmLCJ0IiksdFtmKyJCdWJibGVzIl09YyBpbiBlfHxkLmF0dHJp
YnV0ZXNbY10uZXhwYW5kbz09PSExO2Quc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94
IixkLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsdC5jbGVhckNsb25lU3R5
bGU9ImNvbnRlbnQtYm94Ij09PWQuc3R5bGUuYmFja2dyb3VuZENsaXA7Zm9yKGYgaW4geCh0KSli
cmVhaztyZXR1cm4gdC5vd25MYXN0PSIwIiE9PWYseChmdW5jdGlvbigpe3ZhciBuLHIsbyxzPSJw
YWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmNvbnRl
bnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDstd2Via2l0LWJveC1zaXppbmc6Y29u
dGVudC1ib3g7IixsPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTtsJiYobj1hLmNy
ZWF0ZUVsZW1lbnQoImRpdiIpLG4uc3R5bGUuY3NzVGV4dD0iYm9yZGVyOjA7d2lkdGg6MDtoZWln
aHQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0Oi05OTk5cHg7bWFyZ2luLXRvcDoxcHgi
LGwuYXBwZW5kQ2hpbGQobikuYXBwZW5kQ2hpbGQoZCksZC5pbm5lckhUTUw9Ijx0YWJsZT48dHI+
PHRkPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+PC90YWJsZT4iLG89ZC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgidGQiKSxvWzBdLnN0eWxlLmNzc1RleHQ9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtk
aXNwbGF5Om5vbmUiLHA9MD09PW9bMF0ub2Zmc2V0SGVpZ2h0LG9bMF0uc3R5bGUuZGlzcGxheT0i
IixvWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQucmVsaWFibGVIaWRkZW5PZmZzZXRzPXAmJjA9
PT1vWzBdLm9mZnNldEhlaWdodCxkLmlubmVySFRNTD0iIixkLnN0eWxlLmNzc1RleHQ9ImJveC1z
aXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWJveC1z
aXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lk
dGg6NHB4O21hcmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElOyIseC5zd2FwKGws
bnVsbCE9bC5zdHlsZS56b29tP3t6b29tOjF9Ont9LGZ1bmN0aW9uKCl7dC5ib3hTaXppbmc9ND09
PWQub2Zmc2V0V2lkdGh9KSxlLmdldENvbXB1dGVkU3R5bGUmJih0LnBpeGVsUG9zaXRpb249IjEl
IiE9PShlLmdldENvbXB1dGVkU3R5bGUoZCxudWxsKXx8e30pLnRvcCx0LmJveFNpemluZ1JlbGlh
YmxlPSI0cHgiPT09KGUuZ2V0Q29tcHV0ZWRTdHlsZShkLG51bGwpfHx7d2lkdGg6IjRweCJ9KS53
aWR0aCxyPWQuYXBwZW5kQ2hpbGQoYS5jcmVhdGVFbGVtZW50KCJkaXYiKSksci5zdHlsZS5jc3NU
ZXh0PWQuc3R5bGUuY3NzVGV4dD1zLHIuc3R5bGUubWFyZ2luUmlnaHQ9ci5zdHlsZS53aWR0aD0i
MCIsZC5zdHlsZS53aWR0aD0iMXB4Iix0LnJlbGlhYmxlTWFyZ2luUmlnaHQ9IXBhcnNlRmxvYXQo
KGUuZ2V0Q29tcHV0ZWRTdHlsZShyLG51bGwpfHx7fSkubWFyZ2luUmlnaHQpKSx0eXBlb2YgZC5z
dHlsZS56b29tIT09aSYmKGQuaW5uZXJIVE1MPSIiLGQuc3R5bGUuY3NzVGV4dD1zKyJ3aWR0aDox
cHg7cGFkZGluZzoxcHg7ZGlzcGxheTppbmxpbmU7em9vbToxIix0LmlubGluZUJsb2NrTmVlZHNM
YXlvdXQ9Mz09PWQub2Zmc2V0V2lkdGgsZC5zdHlsZS5kaXNwbGF5PSJibG9jayIsZC5pbm5lckhU
TUw9IjxkaXY+PC9kaXY+IixkLmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjVweCIsdC5zaHJpbmtX
cmFwQmxvY2tzPTMhPT1kLm9mZnNldFdpZHRoLHQuaW5saW5lQmxvY2tOZWVkc0xheW91dCYmKGwu
c3R5bGUuem9vbT0xKSksbC5yZW1vdmVDaGlsZChuKSxuPWQ9bz1yPW51bGwpfSksbj1zPWw9dT1y
PW89bnVsbCx0CisrfSh7fSk7dmFyIEI9Lyg/Olx7W1xzXFNdKlx9fFxbW1xzXFNdKlxdKSQvLFA9
LyhbQS1aXSkvZztmdW5jdGlvbiBSKGUsbixyLGkpe2lmKHguYWNjZXB0RGF0YShlKSl7dmFyIG8s
YSxzPXguZXhwYW5kbyxsPWUubm9kZVR5cGUsdT1sP3guY2FjaGU6ZSxjPWw/ZVtzXTplW3NdJiZz
O2lmKGMmJnVbY10mJihpfHx1W2NdLmRhdGEpfHxyIT09dHx8InN0cmluZyIhPXR5cGVvZiBuKXJl
dHVybiBjfHwoYz1sP2Vbc109cC5wb3AoKXx8eC5ndWlkKys6cyksdVtjXXx8KHVbY109bD97fTp7
dG9KU09OOngubm9vcH0pLCgib2JqZWN0Ij09dHlwZW9mIG58fCJmdW5jdGlvbiI9PXR5cGVvZiBu
KSYmKGk/dVtjXT14LmV4dGVuZCh1W2NdLG4pOnVbY10uZGF0YT14LmV4dGVuZCh1W2NdLmRhdGEs
bikpLGE9dVtjXSxpfHwoYS5kYXRhfHwoYS5kYXRhPXt9KSxhPWEuZGF0YSksciE9PXQmJihhW3gu
Y2FtZWxDYXNlKG4pXT1yKSwic3RyaW5nIj09dHlwZW9mIG4/KG89YVtuXSxudWxsPT1vJiYobz1h
W3guY2FtZWxDYXNlKG4pXSkpOm89YSxvfX1mdW5jdGlvbiBXKGUsdCxuKXtpZih4LmFjY2VwdERh
dGEoZSkpe3ZhciByLGksbz1lLm5vZGVUeXBlLGE9bz94LmNhY2hlOmUscz1vP2VbeC5leHBhbmRv
XTp4LmV4cGFuZG87aWYoYVtzXSl7aWYodCYmKHI9bj9hW3NdOmFbc10uZGF0YSkpe3guaXNBcnJh
eSh0KT90PXQuY29uY2F0KHgubWFwKHQseC5jYW1lbENhc2UpKTp0IGluIHI/dD1bdF06KHQ9eC5j
YW1lbENhc2UodCksdD10IGluIHI/W3RdOnQuc3BsaXQoIiAiKSksaT10Lmxlbmd0aDt3aGlsZShp
LS0pZGVsZXRlIHJbdFtpXV07aWYobj8hSShyKToheC5pc0VtcHR5T2JqZWN0KHIpKXJldHVybn0o
bnx8KGRlbGV0ZSBhW3NdLmRhdGEsSShhW3NdKSkpJiYobz94LmNsZWFuRGF0YShbZV0sITApOngu
c3VwcG9ydC5kZWxldGVFeHBhbmRvfHxhIT1hLndpbmRvdz9kZWxldGUgYVtzXTphW3NdPW51bGwp
fX19eC5leHRlbmQoe2NhY2hlOnt9LG5vRGF0YTp7YXBwbGV0OiEwLGVtYmVkOiEwLG9iamVjdDoi
Y2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIn0saGFzRGF0YTpmdW5j
dGlvbihlKXtyZXR1cm4gZT1lLm5vZGVUeXBlP3guY2FjaGVbZVt4LmV4cGFuZG9dXTplW3guZXhw
YW5kb10sISFlJiYhSShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFIoZSx0LG4pfSxy
ZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFcoZSx0KX0sX2RhdGE6ZnVuY3Rpb24oZSx0
LG4pe3JldHVybiBSKGUsdCxuLCEwKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4g
VyhlLHQsITApfSxhY2NlcHREYXRhOmZ1bmN0aW9uKGUpe2lmKGUubm9kZVR5cGUmJjEhPT1lLm5v
ZGVUeXBlJiY5IT09ZS5ub2RlVHlwZSlyZXR1cm4hMTt2YXIgdD1lLm5vZGVOYW1lJiZ4Lm5vRGF0
YVtlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO3JldHVybiF0fHx0IT09ITAmJmUuZ2V0QXR0cmli
dXRlKCJjbGFzc2lkIik9PT10fX0pLHguZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGUsbil7dmFy
IHIsaSxvPW51bGwsYT0wLHM9dGhpc1swXTtpZihlPT09dCl7aWYodGhpcy5sZW5ndGgmJihvPXgu
ZGF0YShzKSwxPT09cy5ub2RlVHlwZSYmIXguX2RhdGEocywicGFyc2VkQXR0cnMiKSkpe2Zvcihy
PXMuYXR0cmlidXRlcztyLmxlbmd0aD5hO2ErKylpPXJbYV0ubmFtZSwwPT09aS5pbmRleE9mKCJk
YXRhLSIpJiYoaT14LmNhbWVsQ2FzZShpLnNsaWNlKDUpKSwkKHMsaSxvW2ldKSk7eC5fZGF0YShz
LCJwYXJzZWRBdHRycyIsITApfXJldHVybiBvfXJldHVybiJvYmplY3QiPT10eXBlb2YgZT90aGlz
LmVhY2goZnVuY3Rpb24oKXt4LmRhdGEodGhpcyxlKX0pOmFyZ3VtZW50cy5sZW5ndGg+MT90aGlz
LmVhY2goZnVuY3Rpb24oKXt4LmRhdGEodGhpcyxlLG4pfSk6cz8kKHMsZSx4LmRhdGEocyxlKSk6
bnVsbH0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7
eC5yZW1vdmVEYXRhKHRoaXMsZSl9KX19KTtmdW5jdGlvbiAkKGUsbixyKXtpZihyPT09dCYmMT09
PWUubm9kZVR5cGUpe3ZhciBpPSJkYXRhLSIrbi5yZXBsYWNlKFAsIi0kMSIpLnRvTG93ZXJDYXNl
KCk7aWYocj1lLmdldEF0dHJpYnV0ZShpKSwic3RyaW5nIj09dHlwZW9mIHIpe3RyeXtyPSJ0cnVl
Ij09PXI/ITA6ImZhbHNlIj09PXI/ITE6Im51bGwiPT09cj9udWxsOityKyIiPT09cj8rcjpCLnRl
c3Qocik/eC5wYXJzZUpTT04ocik6cn1jYXRjaChvKXt9eC5kYXRhKGUsbixyKX1lbHNlIHI9dH1y
ZXR1cm4gcn1mdW5jdGlvbiBJKGUpe3ZhciB0O2Zvcih0IGluIGUpaWYoKCJkYXRhIiE9PXR8fCF4
LmlzRW1wdHlPYmplY3QoZVt0XSkpJiYidG9KU09OIiE9PXQpcmV0dXJuITE7cmV0dXJuITB9eC5l
eHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsbixyKXt2YXIgaTtyZXR1cm4gZT8obj0obnx8ImZ4Iikr
InF1ZXVlIixpPXguX2RhdGEoZSxuKSxyJiYoIWl8fHguaXNBcnJheShyKT9pPXguX2RhdGEoZSxu
LHgubWFrZUFycmF5KHIpKTppLnB1c2gocikpLGl8fFtdKTp0fSxkZXF1ZXVlOmZ1bmN0aW9uKGUs
dCl7dD10fHwiZngiO3ZhciBuPXgucXVldWUoZSx0KSxyPW4ubGVuZ3RoLGk9bi5zaGlmdCgpLG89
eC5fcXVldWVIb29rcyhlLHQpLGE9ZnVuY3Rpb24oKXt4LmRlcXVldWUoZSx0KX07ImlucHJvZ3Jl
c3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJv
Z3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLGEsbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUo
KX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4g
eC5fZGF0YShlLG4pfHx4Ll9kYXRhKGUsbix7ZW1wdHk6eC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5
IikuYWRkKGZ1bmN0aW9uKCl7eC5fcmVtb3ZlRGF0YShlLHQrInF1ZXVlIikseC5fcmVtb3ZlRGF0
YShlLG4pfSl9KX19KSx4LmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSxuKXt2YXIgcj0yO3Jl
dHVybiJzdHJpbmciIT10eXBlb2YgZSYmKG49ZSxlPSJmeCIsci0tKSxyPmFyZ3VtZW50cy5sZW5n
dGg/eC5xdWV1ZSh0aGlzWzBdLGUpOm49PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFy
IHQ9eC5xdWV1ZSh0aGlzLGUsbik7eC5fcXVldWVIb29rcyh0aGlzLGUpLCJmeCI9PT1lJiYiaW5w
cm9ncmVzcyIhPT10WzBdJiZ4LmRlcXVldWUodGhpcyxlKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmRlcXVldWUodGhpcyxlKX0pfSxkZWxheTpm
dW5jdGlvbihlLHQpe3JldHVybiBlPXguZng/eC5meC5zcGVlZHNbZV18fGU6ZSx0PXR8fCJmeCIs
dGhpcy5xdWV1ZSh0LGZ1bmN0aW9uKHQsbil7dmFyIHI9c2V0VGltZW91dCh0LGUpO24uc3RvcD1m
dW5jdGlvbigpe2NsZWFyVGltZW91dChyKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1
cm4gdGhpcy5xdWV1ZShlfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihlLG4pe3ZhciByLGk9
MSxvPXguRGVmZXJyZWQoKSxhPXRoaXMscz10aGlzLmxlbmd0aCxsPWZ1bmN0aW9uKCl7LS1pfHxv
LnJlc29sdmVXaXRoKGEsW2FdKX07InN0cmluZyIhPXR5cGVvZiBlJiYobj1lLGU9dCksZT1lfHwi
ZngiO3doaWxlKHMtLSlyPXguX2RhdGEoYVtzXSxlKyJxdWV1ZUhvb2tzIiksciYmci5lbXB0eSYm
KGkrKyxyLmVtcHR5LmFkZChsKSk7cmV0dXJuIGwoKSxvLnByb21pc2Uobil9fSk7dmFyIHosWCxV
PS9bXHRcclxuXGZdL2csVj0vXHIvZyxZPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRv
bnxvYmplY3QpJC9pLEo9L14oPzphfGFyZWEpJC9pLEc9L14oPzpjaGVja2VkfHNlbGVjdGVkKSQv
aSxRPXguc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUsSz14LnN1cHBvcnQuaW5wdXQ7eC5mbi5leHRl
bmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5hY2Nlc3ModGhpcyx4LmF0dHIsZSx0LGFy
Z3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFj
aChmdW5jdGlvbigpe3gucmVtb3ZlQXR0cih0aGlzLGUpfSl9LHByb3A6ZnVuY3Rpb24oZSx0KXty
ZXR1cm4geC5hY2Nlc3ModGhpcyx4LnByb3AsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92
ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9eC5wcm9wRml4W2VdfHxlLHRoaXMuZWFjaChmdW5j
dGlvbigpe3RyeXt0aGlzW2VdPXQsZGVsZXRlIHRoaXNbZV19Y2F0Y2gobil7fX0pfSxhZGRDbGFz
czpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE9MCxzPXRoaXMubGVuZ3RoLGw9InN0cmluZyI9
PXR5cGVvZiBlJiZlO2lmKHguaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KHQpe3godGhpcykuYWRkQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYo
bClmb3IodD0oZXx8IiIpLm1hdGNoKFQpfHxbXTtzPmE7YSsrKWlmKG49dGhpc1thXSxyPTE9PT1u
Lm5vZGVUeXBlJiYobi5jbGFzc05hbWU/KCIgIituLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVSwi
ICIpOiIgIikpe289MDt3aGlsZShpPXRbbysrXSkwPnIuaW5kZXhPZigiICIraSsiICIpJiYocis9
aSsiICIpO24uY2xhc3NOYW1lPXgudHJpbShyKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVu
Y3Rpb24oZSl7dmFyIHQsbixyLGksbyxhPTAscz10aGlzLmxlbmd0aCxsPTA9PT1hcmd1bWVudHMu
bGVuZ3RofHwic3RyaW5nIj09dHlwZW9mIGUmJmU7aWYoeC5pc0Z1bmN0aW9uKGUpKXJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS5yZW1vdmVDbGFzcyhlLmNhbGwodGhpcyx0LHRo
aXMuY2xhc3NOYW1lKSl9KTtpZihsKWZvcih0PShlfHwiIikubWF0Y2goVCl8fFtdO3M+YTthKysp
aWYobj10aGlzW2FdLHI9MT09PW4ubm9kZVR5cGUmJihuLmNsYXNzTmFtZT8oIiAiK24uY2xhc3NO
YW1lKyIgIikucmVwbGFjZShVLCIgIik6IiIpKXtvPTA7d2hpbGUoaT10W28rK10pd2hpbGUoci5p
bmRleE9mKCIgIitpKyIgIik+PTApcj1yLnJlcGxhY2UoIiAiK2krIiAiLCIgIik7bi5jbGFzc05h
bWU9ZT94LnRyaW0ocik6IiJ9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUsdCl7
dmFyIG49dHlwZW9mIGU7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmInN0cmluZyI9PT1uP3Q/
dGhpcy5hZGRDbGFzcyhlKTp0aGlzLnJlbW92ZUNsYXNzKGUpOnguaXNGdW5jdGlvbihlKT90aGlz
LmVhY2goZnVuY3Rpb24obil7eCh0aGlzKS50b2dnbGVDbGFzcyhlLmNhbGwodGhpcyxuLHRoaXMu
Y2xhc3NOYW1lLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1uKXt2
YXIgdCxyPTAsbz14KHRoaXMpLGE9ZS5tYXRjaChUKXx8W107d2hpbGUodD1hW3IrK10pby5oYXND
bGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCl9ZWxzZShuPT09aXx8ImJvb2xl
YW4iPT09bikmJih0aGlzLmNsYXNzTmFtZSYmeC5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0
aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGU9PT0hMT8iIjp4
Ll9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUp
e3ZhciB0PSIgIitlKyIgIixuPTAscj10aGlzLmxlbmd0aDtmb3IoO3I+bjtuKyspaWYoMT09PXRo
aXNbbl0ubm9kZVR5cGUmJigiICIrdGhpc1tuXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKFUsIiAi
KS5pbmRleE9mKHQpPj0wKXJldHVybiEwO3JldHVybiExfSx2YWw6ZnVuY3Rpb24oZSl7dmFyIG4s
cixpLG89dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gaT14LmlzRnVuY3Rpb24o
ZSksdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3ZhciBvOzE9PT10aGlzLm5vZGVUeXBlJiYobz1pP2Uu
Y2FsbCh0aGlzLG4seCh0aGlzKS52YWwoKSk6ZSxudWxsPT1vP289IiI6Im51bWJlciI9PXR5cGVv
ZiBvP28rPSIiOnguaXNBcnJheShvKSYmKG89eC5tYXAobyxmdW5jdGlvbihlKXtyZXR1cm4gbnVs
bD09ZT8iIjplKyIifSkpLHI9eC52YWxIb29rc1t0aGlzLnR5cGVdfHx4LnZhbEhvb2tzW3RoaXMu
bm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sciYmInNldCJpbiByJiZyLnNldCh0aGlzLG8sInZhbHVl
IikhPT10fHwodGhpcy52YWx1ZT1vKSl9KTtpZihvKXJldHVybiByPXgudmFsSG9va3Nbby50eXBl
XXx8eC52YWxIb29rc1tvLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLHImJiJnZXQiaW4gciYmKG49
ci5nZXQobywidmFsdWUiKSkhPT10P246KG49by52YWx1ZSwic3RyaW5nIj09dHlwZW9mIG4/bi5y
ZXBsYWNlKFYsIiIpOm51bGw9PW4/IiI6bil9fX0pLHguZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9u
OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5maW5kLmF0dHIoZSwidmFsdWUiKTtyZXR1cm4gbnVs
bCE9dD90OmUudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLm9wdGlv
bnMsaT1lLnNlbGVjdGVkSW5kZXgsbz0ic2VsZWN0LW9uZSI9PT1lLnR5cGV8fDA+aSxhPW8/bnVs
bDpbXSxzPW8/aSsxOnIubGVuZ3RoLGw9MD5pP3M6bz9pOjA7Zm9yKDtzPmw7bCsrKWlmKG49clts
XSwhKCFuLnNlbGVjdGVkJiZsIT09aXx8KHguc3VwcG9ydC5vcHREaXNhYmxlZD9uLmRpc2FibGVk
Om51bGwhPT1uLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSl8fG4ucGFyZW50Tm9kZS5kaXNhYmxl
ZCYmeC5ub2RlTmFtZShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PXgobikudmFsKCks
bylyZXR1cm4gdDthLnB1c2godCl9cmV0dXJuIGF9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIs
aT1lLm9wdGlvbnMsbz14Lm1ha2VBcnJheSh0KSxhPWkubGVuZ3RoO3doaWxlKGEtLSlyPWlbYV0s
KHIuc2VsZWN0ZWQ9eC5pbkFycmF5KHgocikudmFsKCksbyk+PTApJiYobj0hMCk7cmV0dXJuIG58
fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX0sYXR0cjpmdW5jdGlvbihlLG4scil7dmFyIG8sYSxz
PWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjghPT1zJiYyIT09cylyZXR1cm4gdHlwZW9mIGUuZ2V0
QXR0cmlidXRlPT09aT94LnByb3AoZSxuLHIpOigxPT09cyYmeC5pc1hNTERvYyhlKXx8KG49bi50
b0xvd2VyQ2FzZSgpLG89eC5hdHRySG9va3Nbbl18fCh4LmV4cHIubWF0Y2guYm9vbC50ZXN0KG4p
P1g6eikpLHI9PT10P28mJiJnZXQiaW4gbyYmbnVsbCE9PShhPW8uZ2V0KGUsbikpP2E6KGE9eC5m
aW5kLmF0dHIoZSxuKSxudWxsPT1hP3Q6YSk6bnVsbCE9PXI/byYmInNldCJpbiBvJiYoYT1vLnNl
dChlLHIsbikpIT09dD9hOihlLnNldEF0dHJpYnV0ZShuLHIrIiIpLHIpOih4LnJlbW92ZUF0dHIo
ZSxuKSx0KSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9MCxvPXQmJnQubWF0
Y2goVCk7aWYobyYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1vW2krK10pcj14LnByb3BGaXhbbl18
fG4seC5leHByLm1hdGNoLmJvb2wudGVzdChuKT9LJiZRfHwhRy50ZXN0KG4pP2Vbcl09ITE6ZVt4
LmNhbWVsQ2FzZSgiZGVmYXVsdC0iK24pXT1lW3JdPSExOnguYXR0cihlLG4sIiIpLGUucmVtb3Zl
QXR0cmlidXRlKFE/bjpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZigh
eC5zdXBwb3J0LnJhZGlvVmFsdWUmJiJyYWRpbyI9PT10JiZ4Lm5vZGVOYW1lKGUsImlucHV0Iikp
e3ZhciBuPWUudmFsdWU7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJ0eXBlIix0KSxuJiYoZS52YWx1
ZT1uKSx0fX19fSxwcm9wRml4OnsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn0s
cHJvcDpmdW5jdGlvbihlLG4scil7dmFyIGksbyxhLHM9ZS5ub2RlVHlwZTtpZihlJiYzIT09cyYm
OCE9PXMmJjIhPT1zKXJldHVybiBhPTEhPT1zfHwheC5pc1hNTERvYyhlKSxhJiYobj14LnByb3BG
aXhbbl18fG4sbz14LnByb3BIb29rc1tuXSksciE9PXQ/byYmInNldCJpbiBvJiYoaT1vLnNldChl
LHIsbikpIT09dD9pOmVbbl09cjpvJiYiZ2V0ImluIG8mJm51bGwhPT0oaT1vLmdldChlLG4pKT9p
OmVbbl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD14LmZpbmQu
YXR0cihlLCJ0YWJpbmRleCIpO3JldHVybiB0P3BhcnNlSW50KHQsMTApOlkudGVzdChlLm5vZGVO
YW1lKXx8Si50ZXN0KGUubm9kZU5hbWUpJiZlLmhyZWY/MDotMX19fX0pLFg9e3NldDpmdW5jdGlv
bihlLHQsbil7cmV0dXJuIHQ9PT0hMT94LnJlbW92ZUF0dHIoZSxuKTpLJiZRfHwhRy50ZXN0KG4p
P2Uuc2V0QXR0cmlidXRlKCFRJiZ4LnByb3BGaXhbbl18fG4sbik6ZVt4LmNhbWVsQ2FzZSgiZGVm
YXVsdC0iK24pXT1lW25dPSEwLG59fSx4LmVhY2goeC5leHByLm1hdGNoLmJvb2wuc291cmNlLm1h
dGNoKC9cdysvZyksZnVuY3Rpb24oZSxuKXt2YXIgcj14LmV4cHIuYXR0ckhhbmRsZVtuXXx8eC5m
aW5kLmF0dHI7eC5leHByLmF0dHJIYW5kbGVbbl09SyYmUXx8IUcudGVzdChuKT9mdW5jdGlvbihl
LG4saSl7dmFyIG89eC5leHByLmF0dHJIYW5kbGVbbl0sYT1pP3Q6KHguZXhwci5hdHRySGFuZGxl
W25dPXQpIT1yKGUsbixpKT9uLnRvTG93ZXJDYXNlKCk6bnVsbDtyZXR1cm4geC5leHByLmF0dHJI
YW5kbGVbbl09byxhfTpmdW5jdGlvbihlLG4scil7cmV0dXJuIHI/dDplW3guY2FtZWxDYXNlKCJk
ZWZhdWx0LSIrbildP24udG9Mb3dlckNhc2UoKTpudWxsfX0pLEsmJlF8fCh4LmF0dHJIb29rcy52
YWx1ZT17c2V0OmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4geC5ub2RlTmFtZShlLCJpbnB1dCIpPyhl
LmRlZmF1bHRWYWx1ZT1uLHQpOnomJnouc2V0KGUsbixyKX19KSxRfHwoej17c2V0OmZ1bmN0aW9u
KGUsbixyKXt2YXIgaT1lLmdldEF0dHJpYnV0ZU5vZGUocik7cmV0dXJuIGl8fGUuc2V0QXR0cmli
dXRlTm9kZShpPWUub3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUocikpLGkudmFsdWU9bis9
IiIsInZhbHVlIj09PXJ8fG49PT1lLmdldEF0dHJpYnV0ZShyKT9uOnR9fSx4LmV4cHIuYXR0ckhh
bmRsZS5pZD14LmV4cHIuYXR0ckhhbmRsZS5uYW1lPXguZXhwci5hdHRySGFuZGxlLmNvb3Jkcz1m
dW5jdGlvbihlLG4scil7dmFyIGk7cmV0dXJuIHI/dDooaT1lLmdldEF0dHJpYnV0ZU5vZGUobikp
JiYiIiE9PWkudmFsdWU/aS52YWx1ZTpudWxsfSx4LnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0
aW9uKGUsbil7dmFyIHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pO3JldHVybiByJiZyLnNwZWNpZmll
ZD9yLnZhbHVlOnR9LHNldDp6LnNldH0seC5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtzZXQ6
ZnVuY3Rpb24oZSx0LG4pe3ouc2V0KGUsIiI9PT10PyExOnQsbil9fSx4LmVhY2goWyJ3aWR0aCIs
ImhlaWdodCJdLGZ1bmN0aW9uKGUsbil7eC5hdHRySG9va3Nbbl09e3NldDpmdW5jdGlvbihlLHIp
e3JldHVybiIiPT09cj8oZS5zZXRBdHRyaWJ1dGUobiwiYXV0byIpLHIpOnR9fX0pKSx4LnN1cHBv
cnQuaHJlZk5vcm1hbGl6ZWR8fHguZWFjaChbImhyZWYiLCJzcmMiXSxmdW5jdGlvbihlLHQpe3gu
cHJvcEhvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsNCl9
fX0pLHguc3VwcG9ydC5zdHlsZXx8KHguYXR0ckhvb2tzLnN0eWxlPXtnZXQ6ZnVuY3Rpb24oZSl7
cmV0dXJuIGUuc3R5bGUuY3NzVGV4dHx8dH0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc3R5
bGUuY3NzVGV4dD10KyIifX0pLHguc3VwcG9ydC5vcHRTZWxlY3RlZHx8KHgucHJvcEhvb2tzLnNl
bGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYodC5z
ZWxlY3RlZEluZGV4LHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpLG51
bGx9fSkseC5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFj
aW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9y
ZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXt4LnByb3BGaXhbdGhpcy50b0xvd2Vy
Q2FzZSgpXT10aGlzfSkseC5zdXBwb3J0LmVuY3R5cGV8fCh4LnByb3BGaXguZW5jdHlwZT0iZW5j
b2RpbmciKSx4LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXt4LnZhbEhvb2tz
W3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4geC5pc0FycmF5KG4pP2UuY2hlY2tlZD14
LmluQXJyYXkoeChlKS52YWwoKSxuKT49MDp0fX0seC5zdXBwb3J0LmNoZWNrT258fCh4LnZhbEhv
b2tzW3RoaXNdLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ2
YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSk7dmFyIFo9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWEp
JC9pLGV0PS9ea2V5Lyx0dD0vXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sbnQ9L14oPzpm
b2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLHJ0PS9eKFteLl0qKSg/OlwuKC4rKXwpJC87ZnVu
Y3Rpb24gaXQoKXtyZXR1cm4hMH1mdW5jdGlvbiBvdCgpe3JldHVybiExfWZ1bmN0aW9uIGF0KCl7
dHJ5e3JldHVybiBhLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goZSl7fX14LmV2ZW50PXtnbG9iYWw6e30s
YWRkOmZ1bmN0aW9uKGUsbixyLG8sYSl7dmFyIHMsbCx1LGMscCxmLGQsaCxnLG0seSx2PXguX2Rh
dGEoZSk7aWYodil7ci5oYW5kbGVyJiYoYz1yLHI9Yy5oYW5kbGVyLGE9Yy5zZWxlY3Rvciksci5n
dWlkfHwoci5ndWlkPXguZ3VpZCsrKSwobD12LmV2ZW50cyl8fChsPXYuZXZlbnRzPXt9KSwoZj12
LmhhbmRsZSl8fChmPXYuaGFuZGxlPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgeD09PWl8fGUm
JnguZXZlbnQudHJpZ2dlcmVkPT09ZS50eXBlP3Q6eC5ldmVudC5kaXNwYXRjaC5hcHBseShmLmVs
ZW0sYXJndW1lbnRzKX0sZi5lbGVtPWUpLG49KG58fCIiKS5tYXRjaChUKXx8WyIiXSx1PW4ubGVu
Z3RoO3doaWxlKHUtLSlzPXJ0LmV4ZWMoblt1XSl8fFtdLGc9eT1zWzFdLG09KHNbMl18fCIiKS5z
cGxpdCgiLiIpLnNvcnQoKSxnJiYocD14LmV2ZW50LnNwZWNpYWxbZ118fHt9LGc9KGE/cC5kZWxl
Z2F0ZVR5cGU6cC5iaW5kVHlwZSl8fGcscD14LmV2ZW50LnNwZWNpYWxbZ118fHt9LGQ9eC5leHRl
bmQoe3R5cGU6ZyxvcmlnVHlwZTp5LGRhdGE6byxoYW5kbGVyOnIsZ3VpZDpyLmd1aWQsc2VsZWN0
b3I6YSxuZWVkc0NvbnRleHQ6YSYmeC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGEpLG5h
bWVzcGFjZTptLmpvaW4oIi4iKX0sYyksKGg9bFtnXSl8fChoPWxbZ109W10saC5kZWxlZ2F0ZUNv
dW50PTAscC5zZXR1cCYmcC5zZXR1cC5jYWxsKGUsbyxtLGYpIT09ITF8fChlLmFkZEV2ZW50TGlz
dGVuZXI/ZS5hZGRFdmVudExpc3RlbmVyKGcsZiwhMSk6ZS5hdHRhY2hFdmVudCYmZS5hdHRhY2hF
dmVudCgib24iK2csZikpKSxwLmFkZCYmKHAuYWRkLmNhbGwoZSxkKSxkLmhhbmRsZXIuZ3VpZHx8
KGQuaGFuZGxlci5ndWlkPXIuZ3VpZCkpLGE/aC5zcGxpY2UoaC5kZWxlZ2F0ZUNvdW50KyssMCxk
KTpoLnB1c2goZCkseC5ldmVudC5nbG9iYWxbZ109ITApO2U9bnVsbH19LHJlbW92ZTpmdW5jdGlv
bihlLHQsbixyLGkpe3ZhciBvLGEscyxsLHUsYyxwLGYsZCxoLGcsbT14Lmhhc0RhdGEoZSkmJngu
X2RhdGEoZSk7aWYobSYmKGM9bS5ldmVudHMpKXt0PSh0fHwiIikubWF0Y2goVCl8fFsiIl0sdT10
Lmxlbmd0aDt3aGlsZSh1LS0paWYocz1ydC5leGVjKHRbdV0pfHxbXSxkPWc9c1sxXSxoPShzWzJd
fHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCl7cD14LmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KHI/
cC5kZWxlZ2F0ZVR5cGU6cC5iaW5kVHlwZSl8fGQsZj1jW2RdfHxbXSxzPXNbMl0mJlJlZ0V4cCgi
KF58XFwuKSIraC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxsPW89Zi5sZW5ndGg7
d2hpbGUoby0tKWE9ZltvXSwhaSYmZyE9PWEub3JpZ1R5cGV8fG4mJm4uZ3VpZCE9PWEuZ3VpZHx8
cyYmIXMudGVzdChhLm5hbWVzcGFjZSl8fHImJnIhPT1hLnNlbGVjdG9yJiYoIioqIiE9PXJ8fCFh
LnNlbGVjdG9yKXx8KGYuc3BsaWNlKG8sMSksYS5zZWxlY3RvciYmZi5kZWxlZ2F0ZUNvdW50LS0s
cC5yZW1vdmUmJnAucmVtb3ZlLmNhbGwoZSxhKSk7bCYmIWYubGVuZ3RoJiYocC50ZWFyZG93biYm
cC50ZWFyZG93bi5jYWxsKGUsaCxtLmhhbmRsZSkhPT0hMXx8eC5yZW1vdmVFdmVudChlLGQsbS5o
YW5kbGUpLGRlbGV0ZSBjW2RdKX1lbHNlIGZvcihkIGluIGMpeC5ldmVudC5yZW1vdmUoZSxkK3Rb
dV0sbixyLCEwKTt4LmlzRW1wdHlPYmplY3QoYykmJihkZWxldGUgbS5oYW5kbGUseC5fcmVtb3Zl
RGF0YShlLCJldmVudHMiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKG4scixpLG8pe3ZhciBzLGwsdSxj
LHAsZixkLGg9W2l8fGFdLGc9di5jYWxsKG4sInR5cGUiKT9uLnR5cGU6bixtPXYuY2FsbChuLCJu
YW1lc3BhY2UiKT9uLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKHU9Zj1pPWl8fGEsMyE9PWku
bm9kZVR5cGUmJjghPT1pLm5vZGVUeXBlJiYhbnQudGVzdChnK3guZXZlbnQudHJpZ2dlcmVkKSYm
KGcuaW5kZXhPZigiLiIpPj0wJiYobT1nLnNwbGl0KCIuIiksZz1tLnNoaWZ0KCksbS5zb3J0KCkp
LGw9MD5nLmluZGV4T2YoIjoiKSYmIm9uIitnLG49blt4LmV4cGFuZG9dP246bmV3IHguRXZlbnQo
Zywib2JqZWN0Ij09dHlwZW9mIG4mJm4pLG4uaXNUcmlnZ2VyPW8/MjozLG4ubmFtZXNwYWNlPW0u
am9pbigiLiIpLG4ubmFtZXNwYWNlX3JlPW4ubmFtZXNwYWNlP1JlZ0V4cCgiKF58XFwuKSIrbS5q
b2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLG4ucmVzdWx0PXQsbi50YXJnZXR8
fChuLnRhcmdldD1pKSxyPW51bGw9PXI/W25dOngubWFrZUFycmF5KHIsW25dKSxwPXguZXZlbnQu
c3BlY2lhbFtnXXx8e30sb3x8IXAudHJpZ2dlcnx8cC50cmlnZ2VyLmFwcGx5KGkscikhPT0hMSkp
e2lmKCFvJiYhcC5ub0J1YmJsZSYmIXguaXNXaW5kb3coaSkpe2ZvcihjPXAuZGVsZWdhdGVUeXBl
fHxnLG50LnRlc3QoYytnKXx8KHU9dS5wYXJlbnROb2RlKTt1O3U9dS5wYXJlbnROb2RlKWgucHVz
aCh1KSxmPXU7Zj09PShpLm93bmVyRG9jdW1lbnR8fGEpJiZoLnB1c2goZi5kZWZhdWx0Vmlld3x8
Zi5wYXJlbnRXaW5kb3d8fGUpfWQ9MDt3aGlsZSgodT1oW2QrK10pJiYhbi5pc1Byb3BhZ2F0aW9u
U3RvcHBlZCgpKW4udHlwZT1kPjE/YzpwLmJpbmRUeXBlfHxnLHM9KHguX2RhdGEodSwiZXZlbnRz
Iil8fHt9KVtuLnR5cGVdJiZ4Ll9kYXRhKHUsImhhbmRsZSIpLHMmJnMuYXBwbHkodSxyKSxzPWwm
JnVbbF0scyYmeC5hY2NlcHREYXRhKHUpJiZzLmFwcGx5JiZzLmFwcGx5KHUscik9PT0hMSYmbi5w
cmV2ZW50RGVmYXVsdCgpO2lmKG4udHlwZT1nLCFvJiYhbi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYm
KCFwLl9kZWZhdWx0fHxwLl9kZWZhdWx0LmFwcGx5KGgucG9wKCkscik9PT0hMSkmJnguYWNjZXB0
RGF0YShpKSYmbCYmaVtnXSYmIXguaXNXaW5kb3coaSkpe2Y9aVtsXSxmJiYoaVtsXT1udWxsKSx4
LmV2ZW50LnRyaWdnZXJlZD1nO3RyeXtpW2ddKCl9Y2F0Y2goeSl7fXguZXZlbnQudHJpZ2dlcmVk
PXQsZiYmKGlbbF09Zil9cmV0dXJuIG4ucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZT14
LmV2ZW50LmZpeChlKTt2YXIgbixyLGksbyxhLHM9W10sbD1nLmNhbGwoYXJndW1lbnRzKSx1PSh4
Ll9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbZS50eXBlXXx8W10sYz14LmV2ZW50LnNwZWNpYWxb
ZS50eXBlXXx8e307aWYobFswXT1lLGUuZGVsZWdhdGVUYXJnZXQ9dGhpcywhYy5wcmVEaXNwYXRj
aHx8Yy5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsZSkhPT0hMSl7cz14LmV2ZW50LmhhbmRsZXJzLmNh
bGwodGhpcyxlLHUpLG49MDt3aGlsZSgobz1zW24rK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBl
ZCgpKXtlLmN1cnJlbnRUYXJnZXQ9by5lbGVtLGE9MDt3aGlsZSgoaT1vLmhhbmRsZXJzW2ErK10p
JiYhZS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghZS5uYW1lc3BhY2VfcmV8fGUu
bmFtZXNwYWNlX3JlLnRlc3QoaS5uYW1lc3BhY2UpKSYmKGUuaGFuZGxlT2JqPWksZS5kYXRhPWku
ZGF0YSxyPSgoeC5ldmVudC5zcGVjaWFsW2kub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxpLmhhbmRs
ZXIpLmFwcGx5KG8uZWxlbSxsKSxyIT09dCYmKGUucmVzdWx0PXIpPT09ITEmJihlLnByZXZlbnRE
ZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBjLnBvc3REaXNwYXRjaCYmYy5w
b3N0RGlzcGF0Y2guY2FsbCh0aGlzLGUpLGUucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSxu
KXt2YXIgcixpLG8sYSxzPVtdLGw9bi5kZWxlZ2F0ZUNvdW50LHU9ZS50YXJnZXQ7aWYobCYmdS5u
b2RlVHlwZSYmKCFlLmJ1dHRvbnx8ImNsaWNrIiE9PWUudHlwZSkpZm9yKDt1IT10aGlzO3U9dS5w
YXJlbnROb2RlfHx0aGlzKWlmKDE9PT11Lm5vZGVUeXBlJiYodS5kaXNhYmxlZCE9PSEwfHwiY2xp
Y2siIT09ZS50eXBlKSl7Zm9yKG89W10sYT0wO2w+YTthKyspaT1uW2FdLHI9aS5zZWxlY3Rvcisi
ICIsb1tyXT09PXQmJihvW3JdPWkubmVlZHNDb250ZXh0P3gocix0aGlzKS5pbmRleCh1KT49MDp4
LmZpbmQocix0aGlzLG51bGwsW3VdKS5sZW5ndGgpLG9bcl0mJm8ucHVzaChpKTtvLmxlbmd0aCYm
cy5wdXNoKHtlbGVtOnUsaGFuZGxlcnM6b30pfXJldHVybiBuLmxlbmd0aD5sJiZzLnB1c2goe2Vs
ZW06dGhpcyxoYW5kbGVyczpuLnNsaWNlKGwpfSksc30sZml4OmZ1bmN0aW9uKGUpe2lmKGVbeC5l
eHBhbmRvXSlyZXR1cm4gZTt2YXIgdCxuLHIsaT1lLnR5cGUsbz1lLHM9dGhpcy5maXhIb29rc1tp
XTtzfHwodGhpcy5maXhIb29rc1tpXT1zPXR0LnRlc3QoaSk/dGhpcy5tb3VzZUhvb2tzOmV0LnRl
c3QoaSk/dGhpcy5rZXlIb29rczp7fSkscj1zLnByb3BzP3RoaXMucHJvcHMuY29uY2F0KHMucHJv
cHMpOnRoaXMucHJvcHMsZT1uZXcgeC5FdmVudChvKSx0PXIubGVuZ3RoO3doaWxlKHQtLSluPXJb
dF0sZVtuXT1vW25dO3JldHVybiBlLnRhcmdldHx8KGUudGFyZ2V0PW8uc3JjRWxlbWVudHx8YSks
Mz09PWUudGFyZ2V0Lm5vZGVUeXBlJiYoZS50YXJnZXQ9ZS50YXJnZXQucGFyZW50Tm9kZSksZS5t
ZXRhS2V5PSEhZS5tZXRhS2V5LHMuZmlsdGVyP3MuZmlsdGVyKGUsbyk6ZX0scHJvcHM6ImFsdEtl
eSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0
YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIu
c3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5
IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWUu
d2hpY2gmJihlLndoaWNoPW51bGwhPXQuY2hhckNvZGU/dC5jaGFyQ29kZTp0LmtleUNvZGUpLGV9
fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21F
bGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVt
ZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihlLG4pe3ZhciByLGksbyxzPW4uYnV0dG9u
LGw9bi5mcm9tRWxlbWVudDtyZXR1cm4gbnVsbD09ZS5wYWdlWCYmbnVsbCE9bi5jbGllbnRYJiYo
aT1lLnRhcmdldC5vd25lckRvY3VtZW50fHxhLG89aS5kb2N1bWVudEVsZW1lbnQscj1pLmJvZHks
ZS5wYWdlWD1uLmNsaWVudFgrKG8mJm8uc2Nyb2xsTGVmdHx8ciYmci5zY3JvbGxMZWZ0fHwwKS0o
byYmby5jbGllbnRMZWZ0fHxyJiZyLmNsaWVudExlZnR8fDApLGUucGFnZVk9bi5jbGllbnRZKyhv
JiZvLnNjcm9sbFRvcHx8ciYmci5zY3JvbGxUb3B8fDApLShvJiZvLmNsaWVudFRvcHx8ciYmci5j
bGllbnRUb3B8fDApKSwhZS5yZWxhdGVkVGFyZ2V0JiZsJiYoZS5yZWxhdGVkVGFyZ2V0PWw9PT1l
LnRhcmdldD9uLnRvRWxlbWVudDpsKSxlLndoaWNofHxzPT09dHx8KGUud2hpY2g9MSZzPzE6MiZz
PzM6NCZzPzI6MCksZX19LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dl
cjpmdW5jdGlvbigpe2lmKHRoaXMhPT1hdCgpJiZ0aGlzLmZvY3VzKXRyeXtyZXR1cm4gdGhpcy5m
b2N1cygpLCExfWNhdGNoKGUpe319LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdn
ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PWF0KCkmJnRoaXMuYmx1cj8odGhpcy5ibHVyKCks
ITEpOnR9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigp
e3JldHVybiB4Lm5vZGVOYW1lKHRoaXMsImlucHV0IikmJiJjaGVja2JveCI9PT10aGlzLnR5cGUm
JnRoaXMuY2xpY2s/KHRoaXMuY2xpY2soKSwhMSk6dH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7cmV0
dXJuIHgubm9kZU5hbWUoZS50YXJnZXQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNo
OmZ1bmN0aW9uKGUpe2UucmVzdWx0IT09dCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1l
LnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9eC5leHRlbmQobmV3
IHguRXZlbnQsbix7dHlwZTplLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtyP3gu
ZXZlbnQudHJpZ2dlcihpLG51bGwsdCk6eC5ldmVudC5kaXNwYXRjaC5jYWxsKHQsaSksaS5pc0Rl
ZmF1bHRQcmV2ZW50ZWQoKSYmbi5wcmV2ZW50RGVmYXVsdCgpfX0seC5yZW1vdmVFdmVudD1hLnJl
bW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYm
ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0ib24i
K3Q7ZS5kZXRhY2hFdmVudCYmKHR5cGVvZiBlW3JdPT09aSYmKGVbcl09bnVsbCksZS5kZXRhY2hF
dmVudChyLG4pKX0seC5FdmVudD1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzIGluc3RhbmNlb2Yg
eC5FdmVudD8oZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBl
LHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZHx8ZS5yZXR1cm5WYWx1
ZT09PSExfHxlLmdldFByZXZlbnREZWZhdWx0JiZlLmdldFByZXZlbnREZWZhdWx0KCk/aXQ6b3Qp
OnRoaXMudHlwZT1lLG4mJnguZXh0ZW5kKHRoaXMsbiksdGhpcy50aW1lU3RhbXA9ZSYmZS50aW1l
U3RhbXB8fHgubm93KCksdGhpc1t4LmV4cGFuZG9dPSEwLHQpOm5ldyB4LkV2ZW50KGUsbil9LHgu
RXZlbnQucHJvdG90eXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6b3QsaXNQcm9wYWdhdGlvblN0b3Bw
ZWQ6b3QsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6b3QscHJldmVudERlZmF1bHQ6ZnVu
Y3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9
aXQsZSYmKGUucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOmUucmV0dXJuVmFsdWU9
ITEpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7
dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1pdCxlJiYoZS5zdG9wUHJvcGFnYXRpb24mJmUuc3Rv
cFByb3BhZ2F0aW9uKCksZS5jYW5jZWxCdWJibGU9ITApfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRp
b246ZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPWl0LHRoaXMu
c3RvcFByb3BhZ2F0aW9uKCl9fSx4LmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2Vs
ZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihlLHQpe3guZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdh
dGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5y
ZWxhdGVkVGFyZ2V0LG89ZS5oYW5kbGVPYmo7cmV0dXJuKCFpfHxpIT09ciYmIXguY29udGFpbnMo
cixpKSkmJihlLnR5cGU9by5vcmlnVHlwZSxuPW8uaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50
cyksZS50eXBlPXQpLG59fX0pLHguc3VwcG9ydC5zdWJtaXRCdWJibGVzfHwoeC5ldmVudC5zcGVj
aWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4geC5ub2RlTmFtZSh0aGlzLCJmb3Jt
Iik/ITE6KHguZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIs
ZnVuY3Rpb24oZSl7dmFyIG49ZS50YXJnZXQscj14Lm5vZGVOYW1lKG4sImlucHV0Iil8fHgubm9k
ZU5hbWUobiwiYnV0dG9uIik/bi5mb3JtOnQ7ciYmIXguX2RhdGEociwic3VibWl0QnViYmxlcyIp
JiYoeC5ldmVudC5hZGQociwic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGUpe2UuX3N1Ym1pdF9i
dWJibGU9ITB9KSx4Ll9kYXRhKHIsInN1Ym1pdEJ1YmJsZXMiLCEwKSl9KSx0KX0scG9zdERpc3Bh
dGNoOmZ1bmN0aW9uKGUpe2UuX3N1Ym1pdF9idWJibGUmJihkZWxldGUgZS5fc3VibWl0X2J1YmJs
ZSx0aGlzLnBhcmVudE5vZGUmJiFlLmlzVHJpZ2dlciYmeC5ldmVudC5zaW11bGF0ZSgic3VibWl0
Iix0aGlzLnBhcmVudE5vZGUsZSwhMCkpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiB4Lm5v
ZGVOYW1lKHRoaXMsImZvcm0iKT8hMTooeC5ldmVudC5yZW1vdmUodGhpcywiLl9zdWJtaXQiKSx0
KX19KSx4LnN1cHBvcnQuY2hhbmdlQnViYmxlc3x8KHguZXZlbnQuc3BlY2lhbC5jaGFuZ2U9e3Nl
dHVwOmZ1bmN0aW9uKCl7cmV0dXJuIFoudGVzdCh0aGlzLm5vZGVOYW1lKT8oKCJjaGVja2JveCI9
PT10aGlzLnR5cGV8fCJyYWRpbyI9PT10aGlzLnR5cGUpJiYoeC5ldmVudC5hZGQodGhpcywicHJv
cGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oZSl7ImNoZWNrZWQiPT09ZS5vcmlnaW5hbEV2
ZW50LnByb3BlcnR5TmFtZSYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMCl9KSx4LmV2ZW50LmFkZCh0
aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihlKXt0aGlzLl9qdXN0X2NoYW5nZWQmJiFlLmlz
VHJpZ2dlciYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSkseC5ldmVudC5zaW11bGF0ZSgiY2hhbmdl
Iix0aGlzLGUsITApfSkpLCExKTooeC5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2No
YW5nZSIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7Wi50ZXN0KHQubm9kZU5hbWUpJiYheC5f
ZGF0YSh0LCJjaGFuZ2VCdWJibGVzIikmJih4LmV2ZW50LmFkZCh0LCJjaGFuZ2UuX2NoYW5nZSIs
ZnVuY3Rpb24oZSl7IXRoaXMucGFyZW50Tm9kZXx8ZS5pc1NpbXVsYXRlZHx8ZS5pc1RyaWdnZXJ8
fHguZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGUsITApfSkseC5fZGF0
YSh0LCJjaGFuZ2VCdWJibGVzIiwhMCkpfSksdCl9LGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgbj1l
LnRhcmdldDtyZXR1cm4gdGhpcyE9PW58fGUuaXNTaW11bGF0ZWR8fGUuaXNUcmlnZ2VyfHwicmFk
aW8iIT09bi50eXBlJiYiY2hlY2tib3giIT09bi50eXBlP2UuaGFuZGxlT2JqLmhhbmRsZXIuYXBw
bHkodGhpcyxhcmd1bWVudHMpOnR9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIHguZXZlbnQu
cmVtb3ZlKHRoaXMsIi5fY2hhbmdlIiksIVoudGVzdCh0aGlzLm5vZGVOYW1lKX19KSx4LnN1cHBv
cnQuZm9jdXNpbkJ1YmJsZXN8fHguZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0
In0sZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9ZnVuY3Rpb24oZSl7eC5ldmVudC5zaW11bGF0ZSh0
LGUudGFyZ2V0LHguZXZlbnQuZml4KGUpLCEwKX07eC5ldmVudC5zcGVjaWFsW3RdPXtzZXR1cDpm
dW5jdGlvbigpezA9PT1uKysmJmEuYWRkRXZlbnRMaXN0ZW5lcihlLHIsITApfSx0ZWFyZG93bjpm
dW5jdGlvbigpezA9PT0tLW4mJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsITApfX19KSx4LmZu
LmV4dGVuZCh7b246ZnVuY3Rpb24oZSxuLHIsaSxvKXt2YXIgYSxzO2lmKCJvYmplY3QiPT10eXBl
b2YgZSl7InN0cmluZyIhPXR5cGVvZiBuJiYocj1yfHxuLG49dCk7Zm9yKGEgaW4gZSl0aGlzLm9u
KGEsbixyLGVbYV0sbyk7cmV0dXJuIHRoaXN9aWYobnVsbD09ciYmbnVsbD09aT8oaT1uLHI9bj10
KTpudWxsPT1pJiYoInN0cmluZyI9PXR5cGVvZiBuPyhpPXIscj10KTooaT1yLHI9bixuPXQpKSxp
PT09ITEpaT1vdDtlbHNlIGlmKCFpKXJldHVybiB0aGlzO3JldHVybiAxPT09byYmKHM9aSxpPWZ1
bmN0aW9uKGUpe3JldHVybiB4KCkub2ZmKGUpLHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxpLmd1
aWQ9cy5ndWlkfHwocy5ndWlkPXguZ3VpZCsrKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVu
dC5hZGQodGhpcyxlLGkscixuKX0pfSxvbmU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMu
b24oZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvO2lmKGUmJmUucHJldmVu
dERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVybiBpPWUuaGFuZGxlT2JqLHgoZS5kZWxlZ2F0ZVRh
cmdldCkub2ZmKGkubmFtZXNwYWNlP2kub3JpZ1R5cGUrIi4iK2kubmFtZXNwYWNlOmkub3JpZ1R5
cGUsaS5zZWxlY3RvcixpLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3Io
byBpbiBlKXRoaXMub2ZmKG8sbixlW29dKTtyZXR1cm4gdGhpc31yZXR1cm4obj09PSExfHwiZnVu
Y3Rpb24iPT10eXBlb2YgbikmJihyPW4sbj10KSxyPT09ITEmJihyPW90KSx0aGlzLmVhY2goZnVu
Y3Rpb24oKXt4LmV2ZW50LnJlbW92ZSh0aGlzLGUscixuKX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKGUs
dCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3guZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9
KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSxuKXt2YXIgcj10aGlzWzBdO3JldHVybiByP3gu
ZXZlbnQudHJpZ2dlcihlLG4sciwhMCk6dH19KTt2YXIgc3Q9L14uW146I1xbXC4sXSokLyxsdD0v
Xig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyx1dD14LmV4cHIubWF0Y2gubmVlZHNDb250
ZXh0LGN0PXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O3guZm4uZXh0
ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG49W10scj10aGlzLGk9ci5sZW5ndGg7aWYoInN0
cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayh4KGUpLmZpbHRlcihmdW5jdGlv
bigpe2Zvcih0PTA7aT50O3QrKylpZih4LmNvbnRhaW5zKHJbdF0sdGhpcykpcmV0dXJuITB9KSk7
Zm9yKHQ9MDtpPnQ7dCsrKXguZmluZChlLHJbdF0sbik7cmV0dXJuIG49dGhpcy5wdXNoU3RhY2so
aT4xP3gudW5pcXVlKG4pOm4pLG4uc2VsZWN0b3I9dGhpcy5zZWxlY3Rvcj90aGlzLnNlbGVjdG9y
KyIgIitlOmUsbn0saGFzOmZ1bmN0aW9uKGUpe3ZhciB0LG49eChlLHRoaXMpLHI9bi5sZW5ndGg7
cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDtyPnQ7dCsrKWlmKHguY29udGFp
bnModGhpcyxuW3RdKSlyZXR1cm4hMH0pfSxub3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVz
aFN0YWNrKGZ0KHRoaXMsZXx8W10sITApKX0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlz
LnB1c2hTdGFjayhmdCh0aGlzLGV8fFtdLCExKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhZnQo
dGhpcywic3RyaW5nIj09dHlwZW9mIGUmJnV0LnRlc3QoZSk/eChlKTplfHxbXSwhMSkubGVuZ3Ro
fSxjbG9zZXN0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wLGk9dGhpcy5sZW5ndGgsbz1bXSxhPXV0
LnRlc3QoZSl8fCJzdHJpbmciIT10eXBlb2YgZT94KGUsdHx8dGhpcy5jb250ZXh0KTowO2Zvcig7
aT5yO3IrKylmb3Iobj10aGlzW3JdO24mJm4hPT10O249bi5wYXJlbnROb2RlKWlmKDExPm4ubm9k
ZVR5cGUmJihhP2EuaW5kZXgobik+LTE6MT09PW4ubm9kZVR5cGUmJnguZmluZC5tYXRjaGVzU2Vs
ZWN0b3IobixlKSkpe249by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhvLmxl
bmd0aD4xP3gudW5pcXVlKG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5n
Ij09dHlwZW9mIGU/eC5pbkFycmF5KHRoaXNbMF0seChlKSk6eC5pbkFycmF5KGUuanF1ZXJ5P2Vb
MF06ZSx0aGlzKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZB
bGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPSJzdHJpbmciPT10eXBlb2Yg
ZT94KGUsdCk6eC5tYWtlQXJyYXkoZSYmZS5ub2RlVHlwZT9bZV06ZSkscj14Lm1lcmdlKHRoaXMu
Z2V0KCksbik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgudW5pcXVlKHIpKX0sYWRkQmFjazpmdW5j
dGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2
T2JqZWN0LmZpbHRlcihlKSl9fSk7ZnVuY3Rpb24gcHQoZSx0KXtkbyBlPWVbdF07d2hpbGUoZSYm
MSE9PWUubm9kZVR5cGUpO3JldHVybiBlfXguZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0
PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpm
dW5jdGlvbihlKXtyZXR1cm4geC5kaXIoZSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVu
Y3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlv
bihlKXtyZXR1cm4gcHQoZSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihlKXtyZXR1cm4g
cHQoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGly
KGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsInBy
ZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihl
LCJuZXh0U2libGluZyIsbil9LHByZXZVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGly
KGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiB4LnNp
YmxpbmcoKGUucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsZSl9LGNoaWxkcmVuOmZ1bmN0aW9u
KGUpe3JldHVybiB4LnNpYmxpbmcoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7
cmV0dXJuIHgubm9kZU5hbWUoZSwiaWZyYW1lIik/ZS5jb250ZW50RG9jdW1lbnR8fGUuY29udGVu
dFdpbmRvdy5kb2N1bWVudDp4Lm1lcmdlKFtdLGUuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihlLHQp
e3guZm5bZV09ZnVuY3Rpb24obixyKXt2YXIgaT14Lm1hcCh0aGlzLHQsbik7cmV0dXJuIlVudGls
IiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiYic3RyaW5nIj09dHlwZW9mIHImJihpPXguZmlsdGVy
KHIsaSkpLHRoaXMubGVuZ3RoPjEmJihjdFtlXXx8KGk9eC51bmlxdWUoaSkpLGx0LnRlc3QoZSkm
JihpPWkucmV2ZXJzZSgpKSksdGhpcy5wdXNoU3RhY2soaSl9fSkseC5leHRlbmQoe2ZpbHRlcjpm
dW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09
PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT94LmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3Jd
OltdOnguZmluZC5tYXRjaGVzKGUseC5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5v
ZGVUeXBlfSkpfSxkaXI6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPVtdLG89ZVtuXTt3aGlsZShvJiY5
IT09by5ub2RlVHlwZSYmKHI9PT10fHwxIT09by5ub2RlVHlwZXx8IXgobykuaXMocikpKTE9PT1v
Lm5vZGVUeXBlJiZpLnB1c2gobyksbz1vW25dO3JldHVybiBpfSxzaWJsaW5nOmZ1bmN0aW9uKGUs
dCl7dmFyIG49W107Zm9yKDtlO2U9ZS5uZXh0U2libGluZykxPT09ZS5ub2RlVHlwZSYmZSE9PXQm
Jm4ucHVzaChlKTtyZXR1cm4gbn19KTtmdW5jdGlvbiBmdChlLHQsbil7aWYoeC5pc0Z1bmN0aW9u
KHQpKXJldHVybiB4LmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiEhdC5jYWxsKGUscixlKSE9
PW59KTtpZih0Lm5vZGVUeXBlKXJldHVybiB4LmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09
PXQhPT1ufSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZihzdC50ZXN0KHQpKXJldHVybiB4LmZp
bHRlcih0LGUsbik7dD14LmZpbHRlcih0LGUpfXJldHVybiB4LmdyZXAoZSxmdW5jdGlvbihlKXty
ZXR1cm4geC5pbkFycmF5KGUsdCk+PTAhPT1ufSl9ZnVuY3Rpb24gZHQoZSl7dmFyIHQ9aHQuc3Bs
aXQoInwiKSxuPWUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKG4uY3JlYXRlRWxlbWVudCl3
aGlsZSh0Lmxlbmd0aCluLmNyZWF0ZUVsZW1lbnQodC5wb3AoKSk7cmV0dXJuIG59dmFyIGh0PSJh
YmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8
ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0
cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixndD0vIGpRdWVyeVxkKz0i
KD86bnVsbHxcZCspIi9nLG10PVJlZ0V4cCgiPCg/OiIraHQrIilbXFxzLz5dIiwiaSIpLHl0PS9e
XHMrLyx2dD0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFy
YW0pKChbXHc6XSspW14+XSopXC8+L2dpLGJ0PS88KFtcdzpdKykvLHh0PS88dGJvZHkvaSx3dD0v
PHwmIz9cdys7LyxUdD0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLEN0PS9eKD86Y2hlY2tib3h8
cmFkaW8pJC9pLE50PS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGt0PS9eJHxc
Lyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxFdD0vXnRydWVcLyguKikvLFN0PS9eXHMqPCEoPzpcW0NE
QVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZyxBdD17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRp
cGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9m
aWVsZHNldD4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLHBhcmFtOlsxLCI8b2JqZWN0PiIs
Ijwvb2JqZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxl
Pjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJv
ZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9k
eT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6eC5zdXBwb3J0Lmh0bWxT
ZXJpYWxpemU/WzAsIiIsIiJdOlsxLCJYPGRpdj4iLCI8L2Rpdj4iXX0sanQ9ZHQoYSksRHQ9anQu
YXBwZW5kQ2hpbGQoYS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7QXQub3B0Z3JvdXA9QXQub3B0aW9u
LEF0LnRib2R5PUF0LnRmb290PUF0LmNvbGdyb3VwPUF0LmNhcHRpb249QXQudGhlYWQsQXQudGg9
QXQudGQseC5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWNjZXNzKHRoaXMs
ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10P3gudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuYXBwZW5k
KCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGEpLmNyZWF0ZVRleHROb2RlKGUpKX0s
bnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5k
b21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09
dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PUx0KHRoaXMsZSk7dC5hcHBl
bmRDaGlsZChlKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFy
Z3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVU
eXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9THQodGhpcyxlKTt0Lmluc2VydEJlZm9yZShl
LHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlw
KGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5p
bnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1h
bmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9k
ZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxyZW1vdmU6ZnVuY3Rpb24oZSx0
KXt2YXIgbixyPWU/eC5maWx0ZXIoZSx0aGlzKTp0aGlzLGk9MDtmb3IoO251bGwhPShuPXJbaV0p
O2krKyl0fHwxIT09bi5ub2RlVHlwZXx8eC5jbGVhbkRhdGEoRnQobikpLG4ucGFyZW50Tm9kZSYm
KHQmJnguY29udGFpbnMobi5vd25lckRvY3VtZW50LG4pJiZfdChGdChuLCJzY3JpcHQiKSksbi5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXt2
YXIgZSx0PTA7Zm9yKDtudWxsIT0oZT10aGlzW3RdKTt0KyspezE9PT1lLm5vZGVUeXBlJiZ4LmNs
ZWFuRGF0YShGdChlLCExKSk7d2hpbGUoZS5maXJzdENoaWxkKWUucmVtb3ZlQ2hpbGQoZS5maXJz
dENoaWxkKTtlLm9wdGlvbnMmJngubm9kZU5hbWUoZSwic2VsZWN0IikmJihlLm9wdGlvbnMubGVu
Z3RoPTApfXJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGw9PWU/
ITE6ZSx0PW51bGw9PXQ/ZTp0LHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHguY2xvbmUodGhp
cyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24o
ZSl7dmFyIG49dGhpc1swXXx8e30scj0wLGk9dGhpcy5sZW5ndGg7aWYoZT09PXQpcmV0dXJuIDE9
PT1uLm5vZGVUeXBlP24uaW5uZXJIVE1MLnJlcGxhY2UoZ3QsIiIpOnQ7aWYoISgic3RyaW5nIiE9
dHlwZW9mIGV8fFR0LnRlc3QoZSl8fCF4LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSYmbXQudGVzdChl
KXx8IXguc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmeXQudGVzdChlKXx8QXRbKGJ0LmV4ZWMo
ZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKSl7ZT1lLnJlcGxhY2UodnQsIjwkMT48LyQy
PiIpO3RyeXtmb3IoO2k+cjtyKyspbj10aGlzW3JdfHx7fSwxPT09bi5ub2RlVHlwZSYmKHguY2xl
YW5EYXRhKEZ0KG4sITEpKSxuLmlubmVySFRNTD1lKTtuPTB9Y2F0Y2gobyl7fX1uJiZ0aGlzLmVt
cHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1
bmN0aW9uKCl7dmFyIGU9eC5tYXAodGhpcyxmdW5jdGlvbihlKXtyZXR1cm5bZS5uZXh0U2libGlu
ZyxlLnBhcmVudE5vZGVdfSksdD0wO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5j
dGlvbihuKXt2YXIgcj1lW3QrK10saT1lW3QrK107aSYmKHImJnIucGFyZW50Tm9kZSE9PWkmJihy
PXRoaXMubmV4dFNpYmxpbmcpLHgodGhpcykucmVtb3ZlKCksaS5pbnNlcnRCZWZvcmUobixyKSl9
LCEwKSx0P3RoaXM6dGhpcy5yZW1vdmUoKX0sZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlz
LnJlbW92ZShlLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oZSx0LG4pe2U9ZC5hcHBseShbXSxlKTt2
YXIgcixpLG8sYSxzLGwsdT0wLGM9dGhpcy5sZW5ndGgscD10aGlzLGY9Yy0xLGg9ZVswXSxnPXgu
aXNGdW5jdGlvbihoKTtpZihnfHwhKDE+PWN8fCJzdHJpbmciIT10eXBlb2YgaHx8eC5zdXBwb3J0
LmNoZWNrQ2xvbmUpJiZOdC50ZXN0KGgpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24ocil7dmFy
IGk9cC5lcShyKTtnJiYoZVswXT1oLmNhbGwodGhpcyxyLGkuaHRtbCgpKSksaS5kb21NYW5pcChl
LHQsbil9KTtpZihjJiYobD14LmJ1aWxkRnJhZ21lbnQoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQs
ITEsIW4mJnRoaXMpLHI9bC5maXJzdENoaWxkLDE9PT1sLmNoaWxkTm9kZXMubGVuZ3RoJiYobD1y
KSxyKSl7Zm9yKGE9eC5tYXAoRnQobCwic2NyaXB0IiksSHQpLG89YS5sZW5ndGg7Yz51O3UrKylp
PWwsdSE9PWYmJihpPXguY2xvbmUoaSwhMCwhMCksbyYmeC5tZXJnZShhLEZ0KGksInNjcmlwdCIp
KSksdC5jYWxsKHRoaXNbdV0saSx1KTtpZihvKWZvcihzPWFbYS5sZW5ndGgtMV0ub3duZXJEb2N1
bWVudCx4Lm1hcChhLHF0KSx1PTA7bz51O3UrKylpPWFbdV0sa3QudGVzdChpLnR5cGV8fCIiKSYm
IXguX2RhdGEoaSwiZ2xvYmFsRXZhbCIpJiZ4LmNvbnRhaW5zKHMsaSkmJihpLnNyYz94Ll9ldmFs
VXJsKGkuc3JjKTp4Lmdsb2JhbEV2YWwoKGkudGV4dHx8aS50ZXh0Q29udGVudHx8aS5pbm5lckhU
TUx8fCIiKS5yZXBsYWNlKFN0LCIiKSkpO2w9cj1udWxsfXJldHVybiB0aGlzfX0pO2Z1bmN0aW9u
IEx0KGUsdCl7cmV0dXJuIHgubm9kZU5hbWUoZSwidGFibGUiKSYmeC5ub2RlTmFtZSgxPT09dC5u
b2RlVHlwZT90OnQuZmlyc3RDaGlsZCwidHIiKT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9k
eSIpWzBdfHxlLmFwcGVuZENoaWxkKGUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9k
eSIpKTplfWZ1bmN0aW9uIEh0KGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT14LmZpbmQuYXR0cihl
LCJ0eXBlIikpKyIvIitlLnR5cGUsZX1mdW5jdGlvbiBxdChlKXt2YXIgdD1FdC5leGVjKGUudHlw
ZSk7cmV0dXJuIHQ/ZS50eXBlPXRbMV06ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxlfWZ1bmN0
aW9uIF90KGUsdCl7dmFyIG4scj0wO2Zvcig7bnVsbCE9KG49ZVtyXSk7cisrKXguX2RhdGEobiwi
Z2xvYmFsRXZhbCIsIXR8fHguX2RhdGEodFtyXSwiZ2xvYmFsRXZhbCIpKX1mdW5jdGlvbiBNdChl
LHQpe2lmKDE9PT10Lm5vZGVUeXBlJiZ4Lmhhc0RhdGEoZSkpe3ZhciBuLHIsaSxvPXguX2RhdGEo
ZSksYT14Ll9kYXRhKHQsbykscz1vLmV2ZW50cztpZihzKXtkZWxldGUgYS5oYW5kbGUsYS5ldmVu
dHM9e307Zm9yKG4gaW4gcylmb3Iocj0wLGk9c1tuXS5sZW5ndGg7aT5yO3IrKyl4LmV2ZW50LmFk
ZCh0LG4sc1tuXVtyXSl9YS5kYXRhJiYoYS5kYXRhPXguZXh0ZW5kKHt9LGEuZGF0YSkpfX1mdW5j
dGlvbiBPdChlLHQpe3ZhciBuLHIsaTtpZigxPT09dC5ub2RlVHlwZSl7aWYobj10Lm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCksIXguc3VwcG9ydC5ub0Nsb25lRXZlbnQmJnRbeC5leHBhbmRvXSl7aT14
Ll9kYXRhKHQpO2ZvcihyIGluIGkuZXZlbnRzKXgucmVtb3ZlRXZlbnQodCxyLGkuaGFuZGxlKTt0
LnJlbW92ZUF0dHJpYnV0ZSh4LmV4cGFuZG8pfSJzY3JpcHQiPT09biYmdC50ZXh0IT09ZS50ZXh0
PyhIdCh0KS50ZXh0PWUudGV4dCxxdCh0KSk6Im9iamVjdCI9PT1uPyh0LnBhcmVudE5vZGUmJih0
Lm91dGVySFRNTD1lLm91dGVySFRNTCkseC5zdXBwb3J0Lmh0bWw1Q2xvbmUmJmUuaW5uZXJIVE1M
JiYheC50cmltKHQuaW5uZXJIVE1MKSYmKHQuaW5uZXJIVE1MPWUuaW5uZXJIVE1MKSk6ImlucHV0
Ij09PW4mJkN0LnRlc3QoZS50eXBlKT8odC5kZWZhdWx0Q2hlY2tlZD10LmNoZWNrZWQ9ZS5jaGVj
a2VkLHQudmFsdWUhPT1lLnZhbHVlJiYodC52YWx1ZT1lLnZhbHVlKSk6Im9wdGlvbiI9PT1uP3Qu
ZGVmYXVsdFNlbGVjdGVkPXQuc2VsZWN0ZWQ9ZS5kZWZhdWx0U2VsZWN0ZWQ6KCJpbnB1dCI9PT1u
fHwidGV4dGFyZWEiPT09bikmJih0LmRlZmF1bHRWYWx1ZT1lLmRlZmF1bHRWYWx1ZSl9fXguZWFj
aCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJl
Zm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0
aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihlKXt2YXIgbixyPTAsaT1bXSxvPXgoZSksYT1vLmxl
bmd0aC0xO2Zvcig7YT49cjtyKyspbj1yPT09YT90aGlzOnRoaXMuY2xvbmUoITApLHgob1tyXSlb
dF0obiksaC5hcHBseShpLG4uZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhpKX19KTtmdW5j
dGlvbiBGdChlLG4pe3ZhciByLG8sYT0wLHM9dHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUh
PT1pP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUobnx8IioiKTp0eXBlb2YgZS5xdWVyeVNlbGVjdG9y
QWxsIT09aT9lLnF1ZXJ5U2VsZWN0b3JBbGwobnx8IioiKTp0O2lmKCFzKWZvcihzPVtdLHI9ZS5j
aGlsZE5vZGVzfHxlO251bGwhPShvPXJbYV0pO2ErKykhbnx8eC5ub2RlTmFtZShvLG4pP3MucHVz
aChvKTp4Lm1lcmdlKHMsRnQobyxuKSk7cmV0dXJuIG49PT10fHxuJiZ4Lm5vZGVOYW1lKGUsbik/
eC5tZXJnZShbZV0scyk6c31mdW5jdGlvbiBCdChlKXtDdC50ZXN0KGUudHlwZSkmJihlLmRlZmF1
bHRDaGVja2VkPWUuY2hlY2tlZCl9eC5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIg
cixpLG8sYSxzLGw9eC5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSk7aWYoeC5zdXBwb3J0Lmh0
bWw1Q2xvbmV8fHguaXNYTUxEb2MoZSl8fCFtdC50ZXN0KCI8IitlLm5vZGVOYW1lKyI+Iik/bz1l
LmNsb25lTm9kZSghMCk6KER0LmlubmVySFRNTD1lLm91dGVySFRNTCxEdC5yZW1vdmVDaGlsZChv
PUR0LmZpcnN0Q2hpbGQpKSwhKHguc3VwcG9ydC5ub0Nsb25lRXZlbnQmJnguc3VwcG9ydC5ub0Ns
b25lQ2hlY2tlZHx8MSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZXx8eC5pc1hNTERvYyhl
KSkpZm9yKHI9RnQobykscz1GdChlKSxhPTA7bnVsbCE9KGk9c1thXSk7KythKXJbYV0mJk90KGks
clthXSk7aWYodClpZihuKWZvcihzPXN8fEZ0KGUpLHI9cnx8RnQobyksYT0wO251bGwhPShpPXNb
YV0pO2ErKylNdChpLHJbYV0pO2Vsc2UgTXQoZSxvKTtyZXR1cm4gcj1GdChvLCJzY3JpcHQiKSxy
Lmxlbmd0aD4wJiZfdChyLCFsJiZGdChlLCJzY3JpcHQiKSkscj1zPWk9bnVsbCxvfSxidWlsZEZy
YWdtZW50OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLGwsdSxjLHA9ZS5sZW5ndGgsZj1k
dCh0KSxkPVtdLGg9MDtmb3IoO3A+aDtoKyspaWYobz1lW2hdLG98fDA9PT1vKWlmKCJvYmplY3Qi
PT09eC50eXBlKG8pKXgubWVyZ2UoZCxvLm5vZGVUeXBlP1tvXTpvKTtlbHNlIGlmKHd0LnRlc3Qo
bykpe3M9c3x8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxsPShidC5leGVj
KG8pfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGM9QXRbbF18fEF0Ll9kZWZhdWx0LHMuaW5u
ZXJIVE1MPWNbMV0rby5yZXBsYWNlKHZ0LCI8JDE+PC8kMj4iKStjWzJdLGk9Y1swXTt3aGlsZShp
LS0pcz1zLmxhc3RDaGlsZDtpZigheC5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZ5dC50ZXN0
KG8pJiZkLnB1c2godC5jcmVhdGVUZXh0Tm9kZSh5dC5leGVjKG8pWzBdKSksIXguc3VwcG9ydC50
Ym9keSl7bz0idGFibGUiIT09bHx8eHQudGVzdChvKT8iPHRhYmxlPiIhPT1jWzFdfHx4dC50ZXN0
KG8pPzA6czpzLmZpcnN0Q2hpbGQsaT1vJiZvLmNoaWxkTm9kZXMubGVuZ3RoO3doaWxlKGktLSl4
Lm5vZGVOYW1lKHU9by5jaGlsZE5vZGVzW2ldLCJ0Ym9keSIpJiYhdS5jaGlsZE5vZGVzLmxlbmd0
aCYmby5yZW1vdmVDaGlsZCh1KX14Lm1lcmdlKGQscy5jaGlsZE5vZGVzKSxzLnRleHRDb250ZW50
PSIiO3doaWxlKHMuZmlyc3RDaGlsZClzLnJlbW92ZUNoaWxkKHMuZmlyc3RDaGlsZCk7cz1mLmxh
c3RDaGlsZH1lbHNlIGQucHVzaCh0LmNyZWF0ZVRleHROb2RlKG8pKTtzJiZmLnJlbW92ZUNoaWxk
KHMpLHguc3VwcG9ydC5hcHBlbmRDaGVja2VkfHx4LmdyZXAoRnQoZCwiaW5wdXQiKSxCdCksaD0w
O3doaWxlKG89ZFtoKytdKWlmKCghcnx8LTE9PT14LmluQXJyYXkobyxyKSkmJihhPXguY29udGFp
bnMoby5vd25lckRvY3VtZW50LG8pLHM9RnQoZi5hcHBlbmRDaGlsZChvKSwic2NyaXB0IiksYSYm
X3Qocyksbikpe2k9MDt3aGlsZShvPXNbaSsrXSlrdC50ZXN0KG8udHlwZXx8IiIpJiZuLnB1c2go
byl9cmV0dXJuIHM9bnVsbCxmfSxjbGVhbkRhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8sYSxz
PTAsbD14LmV4cGFuZG8sdT14LmNhY2hlLGM9eC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8sZj14LmV2
ZW50LnNwZWNpYWw7Zm9yKDtudWxsIT0obj1lW3NdKTtzKyspaWYoKHR8fHguYWNjZXB0RGF0YShu
KSkmJihvPW5bbF0sYT1vJiZ1W29dKSl7aWYoYS5ldmVudHMpZm9yKHIgaW4gYS5ldmVudHMpZlty
XT94LmV2ZW50LnJlbW92ZShuLHIpOngucmVtb3ZlRXZlbnQobixyLGEuaGFuZGxlKTsKKyt1W29d
JiYoZGVsZXRlIHVbb10sYz9kZWxldGUgbltsXTp0eXBlb2Ygbi5yZW1vdmVBdHRyaWJ1dGUhPT1p
P24ucmVtb3ZlQXR0cmlidXRlKGwpOm5bbF09bnVsbCxwLnB1c2gobykpfX0sX2V2YWxVcmw6ZnVu
Y3Rpb24oZSl7cmV0dXJuIHguYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0
Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX19KSx4LmZuLmV4dGVuZCh7d3JhcEFs
bDpmdW5jdGlvbihlKXtpZih4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bih0KXt4KHRoaXMpLndyYXBBbGwoZS5jYWxsKHRoaXMsdCkpfSk7aWYodGhpc1swXSl7dmFyIHQ9
eChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50
Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlz
O3doaWxlKGUuZmlyc3RDaGlsZCYmMT09PWUuZmlyc3RDaGlsZC5ub2RlVHlwZSllPWUuZmlyc3RD
aGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0
aW9uKGUpe3JldHVybiB4LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhp
cykud3JhcElubmVyKGUuY2FsbCh0aGlzLHQpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0
PXgodGhpcyksbj10LmNvbnRlbnRzKCk7bi5sZW5ndGg/bi53cmFwQWxsKGUpOnQuYXBwZW5kKGUp
fSl9LHdyYXA6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5pc0Z1bmN0aW9uKGUpO3JldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24obil7eCh0aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0sdW53
cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe3gubm9k
ZU5hbWUodGhpcywiYm9keSIpfHx4KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9
KS5lbmQoKX19KTt2YXIgUHQsUnQsV3QsJHQ9L2FscGhhXChbXildKlwpL2ksSXQ9L29wYWNpdHlc
cyo9XHMqKFteKV0qKS8senQ9L14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvLFh0PS9eKG5vbmV8
dGFibGUoPyEtY1tlYV0pLispLyxVdD0vXm1hcmdpbi8sVnQ9UmVnRXhwKCJeKCIrdysiKSguKikk
IiwiaSIpLFl0PVJlZ0V4cCgiXigiK3crIikoPyFweClbYS16JV0rJCIsImkiKSxKdD1SZWdFeHAo
Il4oWystXSk9KCIrdysiKSIsImkiKSxHdD17Qk9EWToiYmxvY2sifSxRdD17cG9zaXRpb246ImFi
c29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sS3Q9e2xldHRlclNw
YWNpbmc6MCxmb250V2VpZ2h0OjQwMH0sWnQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQi
XSxlbj1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIHRuKGUsdCl7aWYodCBpbiBl
KXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxyPXQs
aT1lbi5sZW5ndGg7d2hpbGUoaS0tKWlmKHQ9ZW5baV0rbix0IGluIGUpcmV0dXJuIHQ7cmV0dXJu
IHJ9ZnVuY3Rpb24gbm4oZSx0KXtyZXR1cm4gZT10fHxlLCJub25lIj09PXguY3NzKGUsImRpc3Bs
YXkiKXx8IXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIHJuKGUsdCl7dmFy
IG4scixpLG89W10sYT0wLHM9ZS5sZW5ndGg7Zm9yKDtzPmE7YSsrKXI9ZVthXSxyLnN0eWxlJiYo
b1thXT14Ll9kYXRhKHIsIm9sZGRpc3BsYXkiKSxuPXIuc3R5bGUuZGlzcGxheSx0PyhvW2FdfHwi
bm9uZSIhPT1ufHwoci5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmbm4o
cikmJihvW2FdPXguX2RhdGEociwib2xkZGlzcGxheSIsbG4oci5ub2RlTmFtZSkpKSk6b1thXXx8
KGk9bm4ociksKG4mJiJub25lIiE9PW58fCFpKSYmeC5fZGF0YShyLCJvbGRkaXNwbGF5IixpP246
eC5jc3MociwiZGlzcGxheSIpKSkpO2ZvcihhPTA7cz5hO2ErKylyPWVbYV0sci5zdHlsZSYmKHQm
JiJub25lIiE9PXIuc3R5bGUuZGlzcGxheSYmIiIhPT1yLnN0eWxlLmRpc3BsYXl8fChyLnN0eWxl
LmRpc3BsYXk9dD9vW2FdfHwiIjoibm9uZSIpKTtyZXR1cm4gZX14LmZuLmV4dGVuZCh7Y3NzOmZ1
bmN0aW9uKGUsbil7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG8s
YT17fSxzPTA7aWYoeC5pc0FycmF5KG4pKXtmb3Iobz1SdChlKSxpPW4ubGVuZ3RoO2k+cztzKysp
YVtuW3NdXT14LmNzcyhlLG5bc10sITEsbyk7cmV0dXJuIGF9cmV0dXJuIHIhPT10P3guc3R5bGUo
ZSxuLHIpOnguY3NzKGUsbil9LGUsbixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9u
KCl7cmV0dXJuIHJuKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHJuKHRoaXMpfSx0
b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygp
OnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe25uKHRoaXMpP3godGhpcykuc2hvdygp
OngodGhpcykuaGlkZSgpfSl9fSkseC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVu
Y3Rpb24oZSx0KXtpZih0KXt2YXIgbj1XdChlLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1uPyIxIjpu
fX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZvbnRXZWlnaHQ6
ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEw
LHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0Ijp4LnN1cHBvcnQuY3NzRmxvYXQ/
ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGUsbixyLGkpe2lmKGUmJjMh
PT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIG8sYSxzLGw9eC5jYW1l
bENhc2UobiksdT1lLnN0eWxlO2lmKG49eC5jc3NQcm9wc1tsXXx8KHguY3NzUHJvcHNbbF09dG4o
dSxsKSkscz14LmNzc0hvb2tzW25dfHx4LmNzc0hvb2tzW2xdLHI9PT10KXJldHVybiBzJiYiZ2V0
ImluIHMmJihvPXMuZ2V0KGUsITEsaSkpIT09dD9vOnVbbl07aWYoYT10eXBlb2Ygciwic3RyaW5n
Ij09PWEmJihvPUp0LmV4ZWMocikpJiYocj0ob1sxXSsxKSpvWzJdK3BhcnNlRmxvYXQoeC5jc3Mo
ZSxuKSksYT0ibnVtYmVyIiksIShudWxsPT1yfHwibnVtYmVyIj09PWEmJmlzTmFOKHIpfHwoIm51
bWJlciIhPT1hfHx4LmNzc051bWJlcltsXXx8KHIrPSJweCIpLHguc3VwcG9ydC5jbGVhckNsb25l
U3R5bGV8fCIiIT09cnx8MCE9PW4uaW5kZXhPZigiYmFja2dyb3VuZCIpfHwodVtuXT0iaW5oZXJp
dCIpLHMmJiJzZXQiaW4gcyYmKHI9cy5zZXQoZSxyLGkpKT09PXQpKSl0cnl7dVtuXT1yfWNhdGNo
KGMpe319fSxjc3M6ZnVuY3Rpb24oZSxuLHIsaSl7dmFyIG8sYSxzLGw9eC5jYW1lbENhc2Uobik7
cmV0dXJuIG49eC5jc3NQcm9wc1tsXXx8KHguY3NzUHJvcHNbbF09dG4oZS5zdHlsZSxsKSkscz14
LmNzc0hvb2tzW25dfHx4LmNzc0hvb2tzW2xdLHMmJiJnZXQiaW4gcyYmKGE9cy5nZXQoZSwhMCxy
KSksYT09PXQmJihhPVd0KGUsbixpKSksIm5vcm1hbCI9PT1hJiZuIGluIEt0JiYoYT1LdFtuXSks
IiI9PT1yfHxyPyhvPXBhcnNlRmxvYXQoYSkscj09PSEwfHx4LmlzTnVtZXJpYyhvKT9vfHwwOmEp
OmF9fSksZS5nZXRDb21wdXRlZFN0eWxlPyhSdD1mdW5jdGlvbih0KXtyZXR1cm4gZS5nZXRDb21w
dXRlZFN0eWxlKHQsbnVsbCl9LFd0PWZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvLGEscz1yfHxSdChl
KSxsPXM/cy5nZXRQcm9wZXJ0eVZhbHVlKG4pfHxzW25dOnQsdT1lLnN0eWxlO3JldHVybiBzJiYo
IiIhPT1sfHx4LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8KGw9eC5zdHlsZShlLG4pKSxZ
dC50ZXN0KGwpJiZVdC50ZXN0KG4pJiYoaT11LndpZHRoLG89dS5taW5XaWR0aCxhPXUubWF4V2lk
dGgsdS5taW5XaWR0aD11Lm1heFdpZHRoPXUud2lkdGg9bCxsPXMud2lkdGgsdS53aWR0aD1pLHUu
bWluV2lkdGg9byx1Lm1heFdpZHRoPWEpKSxsfSk6YS5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0
eWxlJiYoUnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3VycmVudFN0eWxlfSxXdD1mdW5jdGlvbihl
LG4scil7dmFyIGksbyxhLHM9cnx8UnQoZSksbD1zP3Nbbl06dCx1PWUuc3R5bGU7cmV0dXJuIG51
bGw9PWwmJnUmJnVbbl0mJihsPXVbbl0pLFl0LnRlc3QobCkmJiF6dC50ZXN0KG4pJiYoaT11Lmxl
ZnQsbz1lLnJ1bnRpbWVTdHlsZSxhPW8mJm8ubGVmdCxhJiYoby5sZWZ0PWUuY3VycmVudFN0eWxl
LmxlZnQpLHUubGVmdD0iZm9udFNpemUiPT09bj8iMWVtIjpsLGw9dS5waXhlbExlZnQrInB4Iix1
LmxlZnQ9aSxhJiYoby5sZWZ0PWEpKSwiIj09PWw/ImF1dG8iOmx9KTtmdW5jdGlvbiBvbihlLHQs
bil7dmFyIHI9VnQuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMV0tKG58fDApKSsoclsy
XXx8InB4Iik6dH1mdW5jdGlvbiBhbihlLHQsbixyLGkpe3ZhciBvPW49PT0ocj8iYm9yZGVyIjoi
Y29udGVudCIpPzQ6IndpZHRoIj09PXQ/MTowLGE9MDtmb3IoOzQ+bztvKz0yKSJtYXJnaW4iPT09
biYmKGErPXguY3NzKGUsbitadFtvXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKGEtPXguY3Nz
KGUsInBhZGRpbmciK1p0W29dLCEwLGkpKSwibWFyZ2luIiE9PW4mJihhLT14LmNzcyhlLCJib3Jk
ZXIiK1p0W29dKyJXaWR0aCIsITAsaSkpKTooYSs9eC5jc3MoZSwicGFkZGluZyIrWnRbb10sITAs
aSksInBhZGRpbmciIT09biYmKGErPXguY3NzKGUsImJvcmRlciIrWnRbb10rIldpZHRoIiwhMCxp
KSkpO3JldHVybiBhfWZ1bmN0aW9uIHNuKGUsdCxuKXt2YXIgcj0hMCxpPSJ3aWR0aCI9PT10P2Uu
b2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHQsbz1SdChlKSxhPXguc3VwcG9ydC5ib3hTaXppbmcm
JiJib3JkZXItYm94Ij09PXguY3NzKGUsImJveFNpemluZyIsITEsbyk7aWYoMD49aXx8bnVsbD09
aSl7aWYoaT1XdChlLHQsbyksKDA+aXx8bnVsbD09aSkmJihpPWUuc3R5bGVbdF0pLFl0LnRlc3Qo
aSkpcmV0dXJuIGk7cj1hJiYoeC5zdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlfHxpPT09ZS5zdHls
ZVt0XSksaT1wYXJzZUZsb2F0KGkpfHwwfXJldHVybiBpK2FuKGUsdCxufHwoYT8iYm9yZGVyIjoi
Y29udGVudCIpLHIsbykrInB4In1mdW5jdGlvbiBsbihlKXt2YXIgdD1hLG49R3RbZV07cmV0dXJu
IG58fChuPXVuKGUsdCksIm5vbmUiIT09biYmbnx8KFB0PShQdHx8eCgiPGlmcmFtZSBmcmFtZWJv
cmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpLmNzcygiY3NzVGV4dCIsImRpc3BsYXk6
YmxvY2sgIWltcG9ydGFudCIpKS5hcHBlbmRUbyh0LmRvY3VtZW50RWxlbWVudCksdD0oUHRbMF0u
Y29udGVudFdpbmRvd3x8UHRbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCx0LndyaXRlKCI8
IWRvY3R5cGUgaHRtbD48aHRtbD48Ym9keT4iKSx0LmNsb3NlKCksbj11bihlLHQpLFB0LmRldGFj
aCgpKSxHdFtlXT1uKSxufWZ1bmN0aW9uIHVuKGUsdCl7dmFyIG49eCh0LmNyZWF0ZUVsZW1lbnQo
ZSkpLmFwcGVuZFRvKHQuYm9keSkscj14LmNzcyhuWzBdLCJkaXNwbGF5Iik7cmV0dXJuIG4ucmVt
b3ZlKCkscn14LmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsbil7eC5jc3NIb29r
c1tuXT17Z2V0OmZ1bmN0aW9uKGUscixpKXtyZXR1cm4gcj8wPT09ZS5vZmZzZXRXaWR0aCYmWHQu
dGVzdCh4LmNzcyhlLCJkaXNwbGF5IikpP3guc3dhcChlLFF0LGZ1bmN0aW9uKCl7cmV0dXJuIHNu
KGUsbixpKX0pOnNuKGUsbixpKTp0fSxzZXQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXImJlJ0KGUp
O3JldHVybiBvbihlLHQscj9hbihlLG4scix4LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJv
eCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLGkpLGkpOjApfX19KSx4LnN1cHBvcnQub3BhY2l0
eXx8KHguY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEl0LnRlc3Qo
KHQmJmUuY3VycmVudFN0eWxlP2UuY3VycmVudFN0eWxlLmZpbHRlcjplLnN0eWxlLmZpbHRlcil8
fCIiKT8uMDEqcGFyc2VGbG9hdChSZWdFeHAuJDEpKyIiOnQ/IjEiOiIifSxzZXQ6ZnVuY3Rpb24o
ZSx0KXt2YXIgbj1lLnN0eWxlLHI9ZS5jdXJyZW50U3R5bGUsaT14LmlzTnVtZXJpYyh0KT8iYWxw
aGEob3BhY2l0eT0iKzEwMCp0KyIpIjoiIixvPXImJnIuZmlsdGVyfHxuLmZpbHRlcnx8IiI7bi56
b29tPTEsKHQ+PTF8fCIiPT09dCkmJiIiPT09eC50cmltKG8ucmVwbGFjZSgkdCwiIikpJiZuLnJl
bW92ZUF0dHJpYnV0ZSYmKG4ucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKSwiIj09PXR8fHImJiFy
LmZpbHRlcil8fChuLmZpbHRlcj0kdC50ZXN0KG8pP28ucmVwbGFjZSgkdCxpKTpvKyIgIitpKX19
KSx4KGZ1bmN0aW9uKCl7eC5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fCh4LmNzc0hvb2tz
Lm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj94LnN3YXAoZSx7ZGlzcGxh
eToiaW5saW5lLWJsb2NrIn0sV3QsW2UsIm1hcmdpblJpZ2h0Il0pOnR9fSksIXguc3VwcG9ydC5w
aXhlbFBvc2l0aW9uJiZ4LmZuLnBvc2l0aW9uJiZ4LmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rp
b24oZSxuKXt4LmNzc0hvb2tzW25dPXtnZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gcj8ocj1XdChl
LG4pLFl0LnRlc3Qocik/eChlKS5wb3NpdGlvbigpW25dKyJweCI6cik6dH19fSl9KSx4LmV4cHIm
JnguZXhwci5maWx0ZXJzJiYoeC5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGUpe3JldHVy
biAwPj1lLm9mZnNldFdpZHRoJiYwPj1lLm9mZnNldEhlaWdodHx8IXguc3VwcG9ydC5yZWxpYWJs
ZUhpZGRlbk9mZnNldHMmJiJub25lIj09PShlLnN0eWxlJiZlLnN0eWxlLmRpc3BsYXl8fHguY3Nz
KGUsImRpc3BsYXkiKSl9LHguZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJu
IXguZXhwci5maWx0ZXJzLmhpZGRlbihlKX0pLHguZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIs
Ym9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5jc3NIb29rc1tlK3RdPXtleHBhbmQ6ZnVu
Y3Rpb24obil7dmFyIHI9MCxpPXt9LG89InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoIiAiKTpb
bl07Zm9yKDs0PnI7cisrKWlbZStadFtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0dXJuIGl9
fSxVdC50ZXN0KGUpfHwoeC5jc3NIb29rc1tlK3RdLnNldD1vbil9KTt2YXIgY249LyUyMC9nLHBu
PS9cW1xdJC8sZm49L1xyP1xuL2csZG49L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZp
bGUpJC9pLGhuPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTt4LmZuLmV4dGVu
ZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHgucGFyYW0odGhpcy5zZXJpYWxpemVBcnJh
eSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24o
KXt2YXIgZT14LnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT94Lm1ha2VBcnJheShlKTp0
aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUm
JiF4KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmaG4udGVzdCh0aGlzLm5vZGVOYW1lKSYmIWRuLnRl
c3QoZSkmJih0aGlzLmNoZWNrZWR8fCFDdC50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3Zh
ciBuPXgodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDp4LmlzQXJyYXkobik/eC5tYXAo
bixmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKGZuLCJcclxu
Iil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShmbiwiXHJcbiIpfX0pLmdldCgpfX0p
LHgucGFyYW09ZnVuY3Rpb24oZSxuKXt2YXIgcixpPVtdLG89ZnVuY3Rpb24oZSx0KXt0PXguaXNG
dW5jdGlvbih0KT90KCk6bnVsbD09dD8iIjp0LGlbaS5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVu
dChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpfTtpZihuPT09dCYmKG49eC5hamF4U2V0dGlu
Z3MmJnguYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSx4LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYh
eC5pc1BsYWluT2JqZWN0KGUpKXguZWFjaChlLGZ1bmN0aW9uKCl7byh0aGlzLm5hbWUsdGhpcy52
YWx1ZSl9KTtlbHNlIGZvcihyIGluIGUpZ24ocixlW3JdLG4sbyk7cmV0dXJuIGkuam9pbigiJiIp
LnJlcGxhY2UoY24sIisiKX07ZnVuY3Rpb24gZ24oZSx0LG4scil7dmFyIGk7aWYoeC5pc0FycmF5
KHQpKXguZWFjaCh0LGZ1bmN0aW9uKHQsaSl7bnx8cG4udGVzdChlKT9yKGUsaSk6Z24oZSsiWyIr
KCJvYmplY3QiPT10eXBlb2YgaT90OiIiKSsiXSIsaSxuLHIpfSk7ZWxzZSBpZihufHwib2JqZWN0
IiE9PXgudHlwZSh0KSlyKGUsdCk7ZWxzZSBmb3IoaSBpbiB0KWduKGUrIlsiK2krIl0iLHRbaV0s
bixyKX14LmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3Jv
bGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3Vz
ZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0
IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVu
Y3Rpb24oZSx0KXt4LmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+
MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0KX19KSx4LmZuLmV4dGVuZCh7aG92
ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8
ZSl9LGJpbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJp
bmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxkZWxlZ2F0ZTpmdW5j
dGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlv
bihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUsIioqIik6dGhp
cy5vZmYodCxlfHwiKioiLG4pfX0pO3ZhciBtbix5bix2bj14Lm5vdygpLGJuPS9cPy8seG49LyMu
KiQvLHduPS8oWz8mXSlfPVteJl0qLyxUbj0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL2dt
LENuPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRn
ZXQpOiQvLE5uPS9eKD86R0VUfEhFQUQpJC8sa249L15cL1wvLyxFbj0vXihbXHcuKy1dKzopKD86
XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sU249eC5mbi5sb2FkLEFuPXt9LGpuPXt9LERu
PSIqLyIuY29uY2F0KCIqIik7dHJ5e3luPW8uaHJlZn1jYXRjaChMbil7eW49YS5jcmVhdGVFbGVt
ZW50KCJhIikseW4uaHJlZj0iIix5bj15bi5ocmVmfW1uPUVuLmV4ZWMoeW4udG9Mb3dlckNhc2Uo
KSl8fFtdO2Z1bmN0aW9uIEhuKGUpe3JldHVybiBmdW5jdGlvbih0LG4peyJzdHJpbmciIT10eXBl
b2YgdCYmKG49dCx0PSIqIik7dmFyIHIsaT0wLG89dC50b0xvd2VyQ2FzZSgpLm1hdGNoKFQpfHxb
XTtpZih4LmlzRnVuY3Rpb24obikpd2hpbGUocj1vW2krK10pIisiPT09clswXT8ocj1yLnNsaWNl
KDEpfHwiKiIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNo
KG4pfX1mdW5jdGlvbiBxbihlLG4scixpKXt2YXIgbz17fSxhPWU9PT1qbjtmdW5jdGlvbiBzKGwp
e3ZhciB1O3JldHVybiBvW2xdPSEwLHguZWFjaChlW2xdfHxbXSxmdW5jdGlvbihlLGwpe3ZhciBj
PWwobixyLGkpO3JldHVybiJzdHJpbmciIT10eXBlb2YgY3x8YXx8b1tjXT9hPyEodT1jKTp0Oihu
LmRhdGFUeXBlcy51bnNoaWZ0KGMpLHMoYyksITEpfSksdX1yZXR1cm4gcyhuLmRhdGFUeXBlc1sw
XSl8fCFvWyIqIl0mJnMoIioiKX1mdW5jdGlvbiBfbihlLG4pe3ZhciByLGksbz14LmFqYXhTZXR0
aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGkgaW4gbiluW2ldIT09dCYmKChvW2ldP2U6cnx8KHI9
e30pKVtpXT1uW2ldKTtyZXR1cm4gciYmeC5leHRlbmQoITAsZSxyKSxlfXguZm4ubG9hZD1mdW5j
dGlvbihlLG4scil7aWYoInN0cmluZyIhPXR5cGVvZiBlJiZTbilyZXR1cm4gU24uYXBwbHkodGhp
cyxhcmd1bWVudHMpO3ZhciBpLG8sYSxzPXRoaXMsbD1lLmluZGV4T2YoIiAiKTtyZXR1cm4gbD49
MCYmKGk9ZS5zbGljZShsLGUubGVuZ3RoKSxlPWUuc2xpY2UoMCxsKSkseC5pc0Z1bmN0aW9uKG4p
PyhyPW4sbj10KTpuJiYib2JqZWN0Ij09dHlwZW9mIG4mJihhPSJQT1NUIikscy5sZW5ndGg+MCYm
eC5hamF4KHt1cmw6ZSx0eXBlOmEsZGF0YVR5cGU6Imh0bWwiLGRhdGE6bn0pLmRvbmUoZnVuY3Rp
b24oZSl7bz1hcmd1bWVudHMscy5odG1sKGk/eCgiPGRpdj4iKS5hcHBlbmQoeC5wYXJzZUhUTUwo
ZSkpLmZpbmQoaSk6ZSl9KS5jb21wbGV0ZShyJiZmdW5jdGlvbihlLHQpe3MuZWFjaChyLG98fFtl
LnJlc3BvbnNlVGV4dCx0LGVdKX0pLHRoaXN9LHguZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9w
IiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1
bmN0aW9uKGUsdCl7eC5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHgu
ZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3Vy
bDp5bix0eXBlOiJHRVQiLGlzTG9jYWw6Q24udGVzdChtblsxXSksZ2xvYmFsOiEwLHByb2Nlc3NE
YXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu
Y29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpEbix0ZXh0OiJ0ZXh0L3BsYWluIixo
dG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBw
bGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDoveG1sLyxodG1s
Oi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRl
eHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4
dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOngucGFyc2VKU09OLCJ0ZXh0IHht
bCI6eC5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVw
OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/X24oX24oZSx4LmFqYXhTZXR0aW5ncyksdCk6X24oeC5h
amF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6SG4oQW4pLGFqYXhUcmFuc3BvcnQ6SG4oam4p
LGFqYXg6ZnVuY3Rpb24oZSxuKXsib2JqZWN0Ij09dHlwZW9mIGUmJihuPWUsZT10KSxuPW58fHt9
O3ZhciByLGksbyxhLHMsbCx1LGMscD14LmFqYXhTZXR1cCh7fSxuKSxmPXAuY29udGV4dHx8cCxk
PXAuY29udGV4dCYmKGYubm9kZVR5cGV8fGYuanF1ZXJ5KT94KGYpOnguZXZlbnQsaD14LkRlZmVy
cmVkKCksZz14LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxtPXAuc3RhdHVzQ29kZXx8e30seT17
fSx2PXt9LGI9MCx3PSJjYW5jZWxlZCIsQz17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVy
OmZ1bmN0aW9uKGUpe3ZhciB0O2lmKDI9PT1iKXtpZighYyl7Yz17fTt3aGlsZSh0PVRuLmV4ZWMo
YSkpY1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1jW2UudG9Mb3dlckNhc2UoKV19cmV0dXJu
IG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4g
Mj09PWI/YTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50b0xv
d2VyQ2FzZSgpO3JldHVybiBifHwoZT12W25dPXZbbl18fGUseVtlXT10KSx0aGlzfSxvdmVycmlk
ZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBifHwocC5taW1lVHlwZT1lKSx0aGlzfSxzdGF0
dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoMj5iKWZvcih0IGluIGUpbVt0XT1bbVt0
XSxlW3RdXTtlbHNlIEMuYWx3YXlzKGVbQy5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVu
Y3Rpb24oZSl7dmFyIHQ9ZXx8dztyZXR1cm4gdSYmdS5hYm9ydCh0KSxrKDAsdCksdGhpc319O2lm
KGgucHJvbWlzZShDKS5jb21wbGV0ZT1nLmFkZCxDLnN1Y2Nlc3M9Qy5kb25lLEMuZXJyb3I9Qy5m
YWlsLHAudXJsPSgoZXx8cC51cmx8fHluKSsiIikucmVwbGFjZSh4biwiIikucmVwbGFjZShrbixt
blsxXSsiLy8iKSxwLnR5cGU9bi5tZXRob2R8fG4udHlwZXx8cC5tZXRob2R8fHAudHlwZSxwLmRh
dGFUeXBlcz14LnRyaW0ocC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFQpfHxb
IiJdLG51bGw9PXAuY3Jvc3NEb21haW4mJihyPUVuLmV4ZWMocC51cmwudG9Mb3dlckNhc2UoKSks
cC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT09bW5bMV0mJnJbMl09PT1tblsyXSYmKHJbM118fCgi
aHR0cDoiPT09clsxXT8iODAiOiI0NDMiKSk9PT0obW5bM118fCgiaHR0cDoiPT09bW5bMV0/Ijgw
IjoiNDQzIikpKSkscC5kYXRhJiZwLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIHAuZGF0
YSYmKHAuZGF0YT14LnBhcmFtKHAuZGF0YSxwLnRyYWRpdGlvbmFsKSkscW4oQW4scCxuLEMpLDI9
PT1iKXJldHVybiBDO2w9cC5nbG9iYWwsbCYmMD09PXguYWN0aXZlKysmJnguZXZlbnQudHJpZ2dl
cigiYWpheFN0YXJ0IikscC50eXBlPXAudHlwZS50b1VwcGVyQ2FzZSgpLHAuaGFzQ29udGVudD0h
Tm4udGVzdChwLnR5cGUpLG89cC51cmwscC5oYXNDb250ZW50fHwocC5kYXRhJiYobz1wLnVybCs9
KGJuLnRlc3Qobyk/IiYiOiI/IikrcC5kYXRhLGRlbGV0ZSBwLmRhdGEpLHAuY2FjaGU9PT0hMSYm
KHAudXJsPXduLnRlc3Qobyk/by5yZXBsYWNlKHduLCIkMV89Iit2bisrKTpvKyhibi50ZXN0KG8p
PyImIjoiPyIpKyJfPSIrdm4rKykpLHAuaWZNb2RpZmllZCYmKHgubGFzdE1vZGlmaWVkW29dJiZD
LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIix4Lmxhc3RNb2RpZmllZFtvXSks
eC5ldGFnW29dJiZDLnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHguZXRhZ1tvXSkp
LChwLmRhdGEmJnAuaGFzQ29udGVudCYmcC5jb250ZW50VHlwZSE9PSExfHxuLmNvbnRlbnRUeXBl
KSYmQy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHAuY29udGVudFR5cGUpLEMuc2V0
UmVxdWVzdEhlYWRlcigiQWNjZXB0IixwLmRhdGFUeXBlc1swXSYmcC5hY2NlcHRzW3AuZGF0YVR5
cGVzWzBdXT9wLmFjY2VwdHNbcC5kYXRhVHlwZXNbMF1dKygiKiIhPT1wLmRhdGFUeXBlc1swXT8i
LCAiK0RuKyI7IHE9MC4wMSI6IiIpOnAuYWNjZXB0c1siKiJdKTtmb3IoaSBpbiBwLmhlYWRlcnMp
Qy5zZXRSZXF1ZXN0SGVhZGVyKGkscC5oZWFkZXJzW2ldKTtpZihwLmJlZm9yZVNlbmQmJihwLmJl
Zm9yZVNlbmQuY2FsbChmLEMscCk9PT0hMXx8Mj09PWIpKXJldHVybiBDLmFib3J0KCk7dz0iYWJv
cnQiO2ZvcihpIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KUNbaV0ocFtpXSk7aWYo
dT1xbihqbixwLG4sQykpe0MucmVhZHlTdGF0ZT0xLGwmJmQudHJpZ2dlcigiYWpheFNlbmQiLFtD
LHBdKSxwLmFzeW5jJiZwLnRpbWVvdXQ+MCYmKHM9c2V0VGltZW91dChmdW5jdGlvbigpe0MuYWJv
cnQoInRpbWVvdXQiKX0scC50aW1lb3V0KSk7dHJ5e2I9MSx1LnNlbmQoeSxrKX1jYXRjaChOKXtp
ZighKDI+YikpdGhyb3cgTjtrKC0xLE4pfX1lbHNlIGsoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0
aW9uIGsoZSxuLHIsaSl7dmFyIGMseSx2LHcsVCxOPW47MiE9PWImJihiPTIscyYmY2xlYXJUaW1l
b3V0KHMpLHU9dCxhPWl8fCIiLEMucmVhZHlTdGF0ZT1lPjA/NDowLGM9ZT49MjAwJiYzMDA+ZXx8
MzA0PT09ZSxyJiYodz1NbihwLEMscikpLHc9T24ocCx3LEMsYyksYz8ocC5pZk1vZGlmaWVkJiYo
VD1DLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksVCYmKHgubGFzdE1vZGlmaWVk
W29dPVQpLFQ9Qy5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLFQmJih4LmV0YWdbb109VCkpLDIw
ND09PWV8fCJIRUFEIj09PXAudHlwZT9OPSJub2NvbnRlbnQiOjMwND09PWU/Tj0ibm90bW9kaWZp
ZWQiOihOPXcuc3RhdGUseT13LmRhdGEsdj13LmVycm9yLGM9IXYpKToodj1OLChlfHwhTikmJihO
PSJlcnJvciIsMD5lJiYoZT0wKSkpLEMuc3RhdHVzPWUsQy5zdGF0dXNUZXh0PShufHxOKSsiIixj
P2gucmVzb2x2ZVdpdGgoZixbeSxOLENdKTpoLnJlamVjdFdpdGgoZixbQyxOLHZdKSxDLnN0YXR1
c0NvZGUobSksbT10LGwmJmQudHJpZ2dlcihjPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW0Ms
cCxjP3k6dl0pLGcuZmlyZVdpdGgoZixbQyxOXSksbCYmKGQudHJpZ2dlcigiYWpheENvbXBsZXRl
IixbQyxwXSksLS14LmFjdGl2ZXx8eC5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJu
IEN9LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmdldChlLHQsbiwianNvbiIpfSxn
ZXRTY3JpcHQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4geC5nZXQoZSx0LG4sInNjcmlwdCIpfX0pLHgu
ZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLG4pe3hbbl09ZnVuY3Rpb24oZSxyLGksbyl7
cmV0dXJuIHguaXNGdW5jdGlvbihyKSYmKG89b3x8aSxpPXIscj10KSx4LmFqYXgoe3VybDplLHR5
cGU6bixkYXRhVHlwZTpvLGRhdGE6cixzdWNjZXNzOml9KX19KTtmdW5jdGlvbiBNbihlLG4scil7
dmFyIGksbyxhLHMsbD1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUoIioiPT09dVswXSl1
LnNoaWZ0KCksbz09PXQmJihvPWUubWltZVR5cGV8fG4uZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRl
bnQtVHlwZSIpKTtpZihvKWZvcihzIGluIGwpaWYobFtzXSYmbFtzXS50ZXN0KG8pKXt1LnVuc2hp
ZnQocyk7YnJlYWt9aWYodVswXWluIHIpYT11WzBdO2Vsc2V7Zm9yKHMgaW4gcil7aWYoIXVbMF18
fGUuY29udmVydGVyc1tzKyIgIit1WzBdXSl7YT1zO2JyZWFrfWl8fChpPXMpfWE9YXx8aX1yZXR1
cm4gYT8oYSE9PXVbMF0mJnUudW5zaGlmdChhKSxyW2FdKTp0fWZ1bmN0aW9uIE9uKGUsdCxuLHIp
e3ZhciBpLG8sYSxzLGwsdT17fSxjPWUuZGF0YVR5cGVzLnNsaWNlKCk7aWYoY1sxXSlmb3IoYSBp
biBlLmNvbnZlcnRlcnMpdVthLnRvTG93ZXJDYXNlKCldPWUuY29udmVydGVyc1thXTtvPWMuc2hp
ZnQoKTt3aGlsZShvKWlmKGUucmVzcG9uc2VGaWVsZHNbb10mJihuW2UucmVzcG9uc2VGaWVsZHNb
b11dPXQpLCFsJiZyJiZlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUp
KSxsPW8sbz1jLnNoaWZ0KCkpaWYoIioiPT09bylvPWw7ZWxzZSBpZigiKiIhPT1sJiZsIT09byl7
aWYoYT11W2wrIiAiK29dfHx1WyIqICIrb10sIWEpZm9yKGkgaW4gdSlpZihzPWkuc3BsaXQoIiAi
KSxzWzFdPT09byYmKGE9dVtsKyIgIitzWzBdXXx8dVsiKiAiK3NbMF1dKSl7YT09PSEwP2E9dVtp
XTp1W2ldIT09ITAmJihvPXNbMF0sYy51bnNoaWZ0KHNbMV0pKTticmVha31pZihhIT09ITApaWYo
YSYmZVsidGhyb3dzIl0pdD1hKHQpO2Vsc2UgdHJ5e3Q9YSh0KX1jYXRjaChwKXtyZXR1cm57c3Rh
dGU6InBhcnNlcmVycm9yIixlcnJvcjphP3A6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK2wrIiB0byAi
K299fX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6dH19eC5hamF4U2V0dXAoe2FjY2VwdHM6
e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNh
dGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2Ny
aXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5j
dGlvbihlKXtyZXR1cm4geC5nbG9iYWxFdmFsKGUpLGV9fX0pLHguYWpheFByZWZpbHRlcigic2Ny
aXB0IixmdW5jdGlvbihlKXtlLmNhY2hlPT09dCYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4m
JihlLnR5cGU9IkdFVCIsZS5nbG9iYWw9ITEpfSkseC5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1
bmN0aW9uKGUpe2lmKGUuY3Jvc3NEb21haW4pe3ZhciBuLHI9YS5oZWFkfHx4KCJoZWFkIilbMF18
fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKHQsaSl7bj1hLmNyZWF0ZUVs
ZW1lbnQoInNjcmlwdCIpLG4uYXN5bmM9ITAsZS5zY3JpcHRDaGFyc2V0JiYobi5jaGFyc2V0PWUu
c2NyaXB0Q2hhcnNldCksbi5zcmM9ZS51cmwsbi5vbmxvYWQ9bi5vbnJlYWR5c3RhdGVjaGFuZ2U9
ZnVuY3Rpb24oZSx0KXsodHx8IW4ucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChu
LnJlYWR5U3RhdGUpKSYmKG4ub25sb2FkPW4ub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsbi5wYXJl
bnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiksbj1udWxsLHR8fGkoMjAwLCJzdWNj
ZXNzIikpfSxyLmluc2VydEJlZm9yZShuLHIuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7
biYmbi5vbmxvYWQodCwhMCl9fX19KTt2YXIgRm49W10sQm49Lyg9KVw/KD89JnwkKXxcP1w/Lzt4
LmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFy
IGU9Rm4ucG9wKCl8fHguZXhwYW5kbysiXyIrdm4rKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLHgu
YWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24obixyLGkpe3ZhciBvLGEscyxsPW4u
anNvbnAhPT0hMSYmKEJuLnRlc3Qobi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2Ygbi5kYXRh
JiYhKG4uY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVy
bGVuY29kZWQiKSYmQm4udGVzdChuLmRhdGEpJiYiZGF0YSIpO3JldHVybiBsfHwianNvbnAiPT09
bi5kYXRhVHlwZXNbMF0/KG89bi5qc29ucENhbGxiYWNrPXguaXNGdW5jdGlvbihuLmpzb25wQ2Fs
bGJhY2spP24uanNvbnBDYWxsYmFjaygpOm4uanNvbnBDYWxsYmFjayxsP25bbF09bltsXS5yZXBs
YWNlKEJuLCIkMSIrbyk6bi5qc29ucCE9PSExJiYobi51cmwrPShibi50ZXN0KG4udXJsKT8iJiI6
Ij8iKStuLmpzb25wKyI9IitvKSxuLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24o
KXtyZXR1cm4gc3x8eC5lcnJvcihvKyIgd2FzIG5vdCBjYWxsZWQiKSxzWzBdfSxuLmRhdGFUeXBl
c1swXT0ianNvbiIsYT1lW29dLGVbb109ZnVuY3Rpb24oKXtzPWFyZ3VtZW50c30saS5hbHdheXMo
ZnVuY3Rpb24oKXtlW29dPWEsbltvXSYmKG4uanNvbnBDYWxsYmFjaz1yLmpzb25wQ2FsbGJhY2ss
Rm4ucHVzaChvKSkscyYmeC5pc0Z1bmN0aW9uKGEpJiZhKHNbMF0pLHM9YT10fSksInNjcmlwdCIp
OnR9KTt2YXIgUG4sUm4sV249MCwkbj1lLkFjdGl2ZVhPYmplY3QmJmZ1bmN0aW9uKCl7dmFyIGU7
Zm9yKGUgaW4gUG4pUG5bZV0odCwhMCl9O2Z1bmN0aW9uIEluKCl7dHJ5e3JldHVybiBuZXcgZS5Y
TUxIdHRwUmVxdWVzdH1jYXRjaCh0KXt9fWZ1bmN0aW9uIHpuKCl7dHJ5e3JldHVybiBuZXcgZS5B
Y3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKHQpe319eC5hamF4U2V0dGlu
Z3MueGhyPWUuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJklu
KCl8fHpuKCl9OkluLFJuPXguYWpheFNldHRpbmdzLnhocigpLHguc3VwcG9ydC5jb3JzPSEhUm4m
JiJ3aXRoQ3JlZGVudGlhbHMiaW4gUm4sUm49eC5zdXBwb3J0LmFqYXg9ISFSbixSbiYmeC5hamF4
VHJhbnNwb3J0KGZ1bmN0aW9uKG4pe2lmKCFuLmNyb3NzRG9tYWlufHx4LnN1cHBvcnQuY29ycyl7
dmFyIHI7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oaSxvKXt2YXIgYSxzLGw9bi54aHIoKTtpZihuLnVz
ZXJuYW1lP2wub3BlbihuLnR5cGUsbi51cmwsbi5hc3luYyxuLnVzZXJuYW1lLG4ucGFzc3dvcmQp
Omwub3BlbihuLnR5cGUsbi51cmwsbi5hc3luYyksbi54aHJGaWVsZHMpZm9yKHMgaW4gbi54aHJG
aWVsZHMpbFtzXT1uLnhockZpZWxkc1tzXTtuLm1pbWVUeXBlJiZsLm92ZXJyaWRlTWltZVR5cGUm
Jmwub3ZlcnJpZGVNaW1lVHlwZShuLm1pbWVUeXBlKSxuLmNyb3NzRG9tYWlufHxpWyJYLVJlcXVl
c3RlZC1XaXRoIl18fChpWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5
e2ZvcihzIGluIGkpbC5zZXRSZXF1ZXN0SGVhZGVyKHMsaVtzXSl9Y2F0Y2godSl7fWwuc2VuZChu
Lmhhc0NvbnRlbnQmJm4uZGF0YXx8bnVsbCkscj1mdW5jdGlvbihlLGkpe3ZhciBzLHUsYyxwO3Ry
eXtpZihyJiYoaXx8ND09PWwucmVhZHlTdGF0ZSkpaWYocj10LGEmJihsLm9ucmVhZHlzdGF0ZWNo
YW5nZT14Lm5vb3AsJG4mJmRlbGV0ZSBQblthXSksaSk0IT09bC5yZWFkeVN0YXRlJiZsLmFib3J0
KCk7ZWxzZXtwPXt9LHM9bC5zdGF0dXMsdT1sLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLCJzdHJp
bmciPT10eXBlb2YgbC5yZXNwb25zZVRleHQmJihwLnRleHQ9bC5yZXNwb25zZVRleHQpO3RyeXtj
PWwuc3RhdHVzVGV4dH1jYXRjaChmKXtjPSIifXN8fCFuLmlzTG9jYWx8fG4uY3Jvc3NEb21haW4/
MTIyMz09PXMmJihzPTIwNCk6cz1wLnRleHQ/MjAwOjQwNH19Y2F0Y2goZCl7aXx8bygtMSxkKX1w
JiZvKHMsYyxwLHUpfSxuLmFzeW5jPzQ9PT1sLnJlYWR5U3RhdGU/c2V0VGltZW91dChyKTooYT0r
K1duLCRuJiYoUG58fChQbj17fSx4KGUpLnVubG9hZCgkbikpLFBuW2FdPXIpLGwub25yZWFkeXN0
YXRlY2hhbmdlPXIpOnIoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtyJiZyKHQsITApfX19fSk7dmFyIFhu
LFVuLFZuPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxZbj1SZWdFeHAoIl4oPzooWystXSk9fCko
Iit3KyIpKFthLXolXSopJCIsImkiKSxKbj0vcXVldWVIb29rcyQvLEduPVtucl0sUW49eyIqIjpb
ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCkscj1uLmN1cigpLGk9WW4u
ZXhlYyh0KSxvPWkmJmlbM118fCh4LmNzc051bWJlcltlXT8iIjoicHgiKSxhPSh4LmNzc051bWJl
cltlXXx8InB4IiE9PW8mJityKSYmWW4uZXhlYyh4LmNzcyhuLmVsZW0sZSkpLHM9MSxsPTIwO2lm
KGEmJmFbM10hPT1vKXtvPW98fGFbM10saT1pfHxbXSxhPStyfHwxO2RvIHM9c3x8Ii41IixhLz1z
LHguc3R5bGUobi5lbGVtLGUsYStvKTt3aGlsZShzIT09KHM9bi5jdXIoKS9yKSYmMSE9PXMmJi0t
bCl9cmV0dXJuIGkmJihhPW4uc3RhcnQ9K2F8fCtyfHwwLG4udW5pdD1vLG4uZW5kPWlbMV0/YSso
aVsxXSsxKSppWzJdOitpWzJdKSxufV19O2Z1bmN0aW9uIEtuKCl7cmV0dXJuIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKXtYbj10fSksWG49eC5ub3coKX1mdW5jdGlvbiBabihlLHQsbil7dmFyIHIsaT0o
UW5bdF18fFtdKS5jb25jYXQoUW5bIioiXSksbz0wLGE9aS5sZW5ndGg7Zm9yKDthPm87bysrKWlm
KHI9aVtvXS5jYWxsKG4sdCxlKSlyZXR1cm4gcn1mdW5jdGlvbiBlcihlLHQsbil7dmFyIHIsaSxv
PTAsYT1Hbi5sZW5ndGgscz14LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIGwu
ZWxlbX0pLGw9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO3ZhciB0PVhufHxLbigpLG49TWF0aC5t
YXgoMCx1LnN0YXJ0VGltZSt1LmR1cmF0aW9uLXQpLHI9bi91LmR1cmF0aW9ufHwwLG89MS1yLGE9
MCxsPXUudHdlZW5zLmxlbmd0aDtmb3IoO2w+YTthKyspdS50d2VlbnNbYV0ucnVuKG8pO3JldHVy
biBzLm5vdGlmeVdpdGgoZSxbdSxvLG5dKSwxPm8mJmw/bjoocy5yZXNvbHZlV2l0aChlLFt1XSks
ITEpfSx1PXMucHJvbWlzZSh7ZWxlbTplLHByb3BzOnguZXh0ZW5kKHt9LHQpLG9wdHM6eC5leHRl
bmQoITAse3NwZWNpYWxFYXNpbmc6e319LG4pLG9yaWdpbmFsUHJvcGVydGllczp0LG9yaWdpbmFs
T3B0aW9uczpuLHN0YXJ0VGltZTpYbnx8S24oKSxkdXJhdGlvbjpuLmR1cmF0aW9uLHR3ZWVuczpb
XSxjcmVhdGVUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciByPXguVHdlZW4oZSx1Lm9wdHMsdCxuLHUu
b3B0cy5zcGVjaWFsRWFzaW5nW3RdfHx1Lm9wdHMuZWFzaW5nKTtyZXR1cm4gdS50d2VlbnMucHVz
aChyKSxyfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P3UudHdlZW5zLmxlbmd0aDowO2lm
KGkpcmV0dXJuIHRoaXM7Zm9yKGk9ITA7cj5uO24rKyl1LnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJu
IHQ/cy5yZXNvbHZlV2l0aChlLFt1LHRdKTpzLnJlamVjdFdpdGgoZSxbdSx0XSksdGhpc319KSxj
PXUucHJvcHM7Zm9yKHRyKGMsdS5vcHRzLnNwZWNpYWxFYXNpbmcpO2E+bztvKyspaWYocj1Hbltv
XS5jYWxsKHUsZSxjLHUub3B0cykpcmV0dXJuIHI7cmV0dXJuIHgubWFwKGMsWm4sdSkseC5pc0Z1
bmN0aW9uKHUub3B0cy5zdGFydCkmJnUub3B0cy5zdGFydC5jYWxsKGUsdSkseC5meC50aW1lcih4
LmV4dGVuZChsLHtlbGVtOmUsYW5pbTp1LHF1ZXVlOnUub3B0cy5xdWV1ZX0pKSx1LnByb2dyZXNz
KHUub3B0cy5wcm9ncmVzcykuZG9uZSh1Lm9wdHMuZG9uZSx1Lm9wdHMuY29tcGxldGUpLmZhaWwo
dS5vcHRzLmZhaWwpLmFsd2F5cyh1Lm9wdHMuYWx3YXlzKX1mdW5jdGlvbiB0cihlLHQpe3ZhciBu
LHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihyPXguY2FtZWxDYXNlKG4pLGk9dFtyXSxvPWVbbl0seC5p
c0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtu
XSksYT14LmNzc0hvb2tzW3JdLGEmJiJleHBhbmQiaW4gYSl7bz1hLmV4cGFuZChvKSxkZWxldGUg
ZVtyXTtmb3IobiBpbiBvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpfWVsc2UgdFtyXT1pfXgu
QW5pbWF0aW9uPXguZXh0ZW5kKGVyLHt0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7eC5pc0Z1bmN0aW9u
KGUpPyh0PWUsZT1bIioiXSk6ZT1lLnNwbGl0KCIgIik7dmFyIG4scj0wLGk9ZS5sZW5ndGg7Zm9y
KDtpPnI7cisrKW49ZVtyXSxRbltuXT1RbltuXXx8W10sUW5bbl0udW5zaGlmdCh0KX0scHJlZmls
dGVyOmZ1bmN0aW9uKGUsdCl7dD9Hbi51bnNoaWZ0KGUpOkduLnB1c2goZSl9fSk7ZnVuY3Rpb24g
bnIoZSx0LG4pe3ZhciByLGksbyxhLHMsbCx1PXRoaXMsYz17fSxwPWUuc3R5bGUsZj1lLm5vZGVU
eXBlJiZubihlKSxkPXguX2RhdGEoZSwiZnhzaG93Iik7bi5xdWV1ZXx8KHM9eC5fcXVldWVIb29r
cyhlLCJmeCIpLG51bGw9PXMudW5xdWV1ZWQmJihzLnVucXVldWVkPTAsbD1zLmVtcHR5LmZpcmUs
cy5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7cy51bnF1ZXVlZHx8bCgpfSkscy51bnF1ZXVlZCsrLHUu
YWx3YXlzKGZ1bmN0aW9uKCl7dS5hbHdheXMoZnVuY3Rpb24oKXtzLnVucXVldWVkLS0seC5xdWV1
ZShlLCJmeCIpLmxlbmd0aHx8cy5lbXB0eS5maXJlKCl9KX0pKSwxPT09ZS5ub2RlVHlwZSYmKCJo
ZWlnaHQiaW4gdHx8IndpZHRoImluIHQpJiYobi5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJm
bG93WCxwLm92ZXJmbG93WV0sImlubGluZSI9PT14LmNzcyhlLCJkaXNwbGF5IikmJiJub25lIj09
PXguY3NzKGUsImZsb2F0IikmJih4LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCYmImlu
bGluZSIhPT1sbihlLm5vZGVOYW1lKT9wLnpvb209MTpwLmRpc3BsYXk9ImlubGluZS1ibG9jayIp
KSxuLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIix4LnN1cHBvcnQuc2hyaW5rV3JhcEJs
b2Nrc3x8dS5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0scC5vdmVy
Zmxvd1g9bi5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpO2ZvcihyIGlu
IHQpaWYoaT10W3JdLFZuLmV4ZWMoaSkpe2lmKGRlbGV0ZSB0W3JdLG89b3x8InRvZ2dsZSI9PT1p
LGk9PT0oZj8iaGlkZSI6InNob3ciKSljb250aW51ZTtjW3JdPWQmJmRbcl18fHguc3R5bGUoZSxy
KX1pZigheC5pc0VtcHR5T2JqZWN0KGMpKXtkPyJoaWRkZW4iaW4gZCYmKGY9ZC5oaWRkZW4pOmQ9
eC5fZGF0YShlLCJmeHNob3ciLHt9KSxvJiYoZC5oaWRkZW49IWYpLGY/eChlKS5zaG93KCk6dS5k
b25lKGZ1bmN0aW9uKCl7eChlKS5oaWRlKCl9KSx1LmRvbmUoZnVuY3Rpb24oKXt2YXIgdDt4Ll9y
ZW1vdmVEYXRhKGUsImZ4c2hvdyIpO2Zvcih0IGluIGMpeC5zdHlsZShlLHQsY1t0XSl9KTtmb3Io
ciBpbiBjKWE9Wm4oZj9kW3JdOjAscix1KSxyIGluIGR8fChkW3JdPWEuc3RhcnQsZiYmKGEuZW5k
PWEuc3RhcnQsYS5zdGFydD0id2lkdGgiPT09cnx8ImhlaWdodCI9PT1yPzE6MCkpfX1mdW5jdGlv
biBycihlLHQsbixyLGkpe3JldHVybiBuZXcgcnIucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX14
LlR3ZWVuPXJyLHJyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cnIsaW5pdDpmdW5jdGlvbihlLHQs
bixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8InN3aW5nIix0
aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0
aGlzLnVuaXQ9b3x8KHguY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIg
ZT1yci5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6cnIu
cHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49cnIu
cHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMucG9zPXQ9dGhpcy5vcHRpb25zLmR1cmF0
aW9uP3guZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0
aGlzLm9wdGlvbnMuZHVyYXRpb24pOmUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQr
dGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlz
LmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6cnIucHJvcEhvb2tzLl9k
ZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0scnIucHJvdG90eXBlLmluaXQucHJvdG90eXBlPXJyLnBy
b3RvdHlwZSxyci5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0
dXJuIG51bGw9PWUuZWxlbVtlLnByb3BdfHxlLmVsZW0uc3R5bGUmJm51bGwhPWUuZWxlbS5zdHls
ZVtlLnByb3BdPyh0PXguY3NzKGUuZWxlbSxlLnByb3AsIiIpLHQmJiJhdXRvIiE9PXQ/dDowKTpl
LmVsZW1bZS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGUpe3guZnguc3RlcFtlLnByb3BdP3guZnguc3Rl
cFtlLnByb3BdKGUpOmUuZWxlbS5zdHlsZSYmKG51bGwhPWUuZWxlbS5zdHlsZVt4LmNzc1Byb3Bz
W2UucHJvcF1dfHx4LmNzc0hvb2tzW2UucHJvcF0pP3guc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5v
dytlLnVuaXQpOmUuZWxlbVtlLnByb3BdPWUubm93fX19LHJyLnByb3BIb29rcy5zY3JvbGxUb3A9
cnIucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUm
JmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0seC5lYWNoKFsidG9n
Z2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXguZm5bdF07eC5mblt0XT1m
dW5jdGlvbihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/bi5hcHBs
eSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGlyKHQsITApLGUscixpKX19KSx4LmZuLmV4
dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihubikuY3Nz
KCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9LGFu
aW1hdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9eC5pc0VtcHR5T2JqZWN0KGUpLG89eC5zcGVl
ZCh0LG4sciksYT1mdW5jdGlvbigpe3ZhciB0PWVyKHRoaXMseC5leHRlbmQoe30sZSksbyk7KGl8
fHguX2RhdGEodGhpcywiZmluaXNoIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxp
fHxvLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpm
dW5jdGlvbihlLG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0
b3AsdChyKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYocj1uLG49ZSxlPXQpLG4mJmUhPT0h
MSYmdGhpcy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0hMCxu
PW51bGwhPWUmJmUrInF1ZXVlSG9va3MiLG89eC50aW1lcnMsYT14Ll9kYXRhKHRoaXMpO2lmKG4p
YVtuXSYmYVtuXS5zdG9wJiZpKGFbbl0pO2Vsc2UgZm9yKG4gaW4gYSlhW25dJiZhW25dLnN0b3Am
JkpuLnRlc3QobikmJmkoYVtuXSk7Zm9yKG49by5sZW5ndGg7bi0tOylvW25dLmVsZW0hPT10aGlz
fHxudWxsIT1lJiZvW25dLnF1ZXVlIT09ZXx8KG9bbl0uYW5pbS5zdG9wKHIpLHQ9ITEsby5zcGxp
Y2UobiwxKSk7KHR8fCFyKSYmeC5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUp
e3JldHVybiBlIT09ITEmJihlPWV8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49
eC5fZGF0YSh0aGlzKSxyPW5bZSsicXVldWUiXSxpPW5bZSsicXVldWVIb29rcyJdLG89eC50aW1l
cnMsYT1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEwLHgucXVldWUodGhpcyxlLFtdKSxpJiZp
LnN0b3AmJmkuc3RvcC5jYWxsKHRoaXMsITApLHQ9by5sZW5ndGg7dC0tOylvW3RdLmVsZW09PT10
aGlzJiZvW3RdLnF1ZXVlPT09ZSYmKG9bdF0uYW5pbS5zdG9wKCEwKSxvLnNwbGljZSh0LDEpKTtm
b3IodD0wO2E+dDt0Kyspclt0XSYmclt0XS5maW5pc2gmJnJbdF0uZmluaXNoLmNhbGwodGhpcyk7
ZGVsZXRlIG4uZmluaXNofSl9fSk7ZnVuY3Rpb24gaXIoZSx0KXt2YXIgbixyPXtoZWlnaHQ6ZX0s
aT0wO2Zvcih0PXQ/MTowOzQ+aTtpKz0yLXQpbj1adFtpXSxyWyJtYXJnaW4iK25dPXJbInBhZGRp
bmciK25dPWU7cmV0dXJuIHQmJihyLm9wYWNpdHk9ci53aWR0aD1lKSxyfXguZWFjaCh7c2xpZGVE
b3duOmlyKCJzaG93Iiksc2xpZGVVcDppcigiaGlkZSIpLHNsaWRlVG9nZ2xlOmlyKCJ0b2dnbGUi
KSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRv
Z2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihl
LG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixyKX19KSx4LnNwZWVkPWZ1bmN0aW9uKGUs
dCxuKXt2YXIgcj1lJiYib2JqZWN0Ij09dHlwZW9mIGU/eC5leHRlbmQoe30sZSk6e2NvbXBsZXRl
Om58fCFuJiZ0fHx4LmlzRnVuY3Rpb24oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYm
IXguaXNGdW5jdGlvbih0KSYmdH07cmV0dXJuIHIuZHVyYXRpb249eC5meC5vZmY/MDoibnVtYmVy
Ij09dHlwZW9mIHIuZHVyYXRpb24/ci5kdXJhdGlvbjpyLmR1cmF0aW9uIGluIHguZnguc3BlZWRz
P3guZnguc3BlZWRzW3IuZHVyYXRpb25dOnguZnguc3BlZWRzLl9kZWZhdWx0LChudWxsPT1yLnF1
ZXVlfHxyLnF1ZXVlPT09ITApJiYoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29t
cGxldGU9ZnVuY3Rpb24oKXt4LmlzRnVuY3Rpb24oci5vbGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIu
cXVldWUmJnguZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxyfSx4LmVhc2luZz17bGluZWFyOmZ1bmN0
aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4uNS1NYXRoLmNvcyhlKk1h
dGguUEkpLzJ9fSx4LnRpbWVycz1bXSx4LmZ4PXJyLnByb3RvdHlwZS5pbml0LHguZngudGljaz1m
dW5jdGlvbigpe3ZhciBlLG49eC50aW1lcnMscj0wO2ZvcihYbj14Lm5vdygpO24ubGVuZ3RoPnI7
cisrKWU9bltyXSxlKCl8fG5bcl0hPT1lfHxuLnNwbGljZShyLS0sMSk7bi5sZW5ndGh8fHguZngu
c3RvcCgpLFhuPXR9LHguZngudGltZXI9ZnVuY3Rpb24oZSl7ZSgpJiZ4LnRpbWVycy5wdXNoKGUp
JiZ4LmZ4LnN0YXJ0KCl9LHguZnguaW50ZXJ2YWw9MTMseC5meC5zdGFydD1mdW5jdGlvbigpe1Vu
fHwoVW49c2V0SW50ZXJ2YWwoeC5meC50aWNrLHguZnguaW50ZXJ2YWwpKX0seC5meC5zdG9wPWZ1
bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChVbiksVW49bnVsbH0seC5meC5zcGVlZHM9e3Nsb3c6NjAw
LGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0seC5meC5zdGVwPXt9LHguZXhwciYmeC5leHByLmZpbHRl
cnMmJih4LmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4geC5ncmVwKHgu
dGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSkseC5mbi5vZmZz
ZXQ9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZT09PXQ/dGhpczp0aGlz
LmVhY2goZnVuY3Rpb24odCl7eC5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsZSx0KX0pO3ZhciBuLHIs
bz17dG9wOjAsbGVmdDowfSxhPXRoaXNbMF0scz1hJiZhLm93bmVyRG9jdW1lbnQ7aWYocylyZXR1
cm4gbj1zLmRvY3VtZW50RWxlbWVudCx4LmNvbnRhaW5zKG4sYSk/KHR5cGVvZiBhLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCE9PWkmJihvPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHI9b3Iocyks
e3RvcDpvLnRvcCsoci5wYWdlWU9mZnNldHx8bi5zY3JvbGxUb3ApLShuLmNsaWVudFRvcHx8MCks
bGVmdDpvLmxlZnQrKHIucGFnZVhPZmZzZXR8fG4uc2Nyb2xsTGVmdCktKG4uY2xpZW50TGVmdHx8
MCl9KTpvfSx4Lm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj14LmNzcyhl
LCJwb3NpdGlvbiIpOyJzdGF0aWMiPT09ciYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7
dmFyIGk9eChlKSxvPWkub2Zmc2V0KCksYT14LmNzcyhlLCJ0b3AiKSxzPXguY3NzKGUsImxlZnQi
KSxsPSgiYWJzb2x1dGUiPT09cnx8ImZpeGVkIj09PXIpJiZ4LmluQXJyYXkoImF1dG8iLFthLHNd
KT4tMSx1PXt9LGM9e30scCxmO2w/KGM9aS5wb3NpdGlvbigpLHA9Yy50b3AsZj1jLmxlZnQpOihw
PXBhcnNlRmxvYXQoYSl8fDAsZj1wYXJzZUZsb2F0KHMpfHwwKSx4LmlzRnVuY3Rpb24odCkmJih0
PXQuY2FsbChlLG4sbykpLG51bGwhPXQudG9wJiYodS50b3A9dC50b3Atby50b3ArcCksbnVsbCE9
dC5sZWZ0JiYodS5sZWZ0PXQubGVmdC1vLmxlZnQrZiksInVzaW5nImluIHQ/dC51c2luZy5jYWxs
KGUsdSk6aS5jc3ModSl9fSx4LmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlz
WzBdKXt2YXIgZSx0LG49e3RvcDowLGxlZnQ6MH0scj10aGlzWzBdO3JldHVybiJmaXhlZCI9PT14
LmNzcyhyLCJwb3NpdGlvbiIpP3Q9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooZT10aGlzLm9m
ZnNldFBhcmVudCgpLHQ9dGhpcy5vZmZzZXQoKSx4Lm5vZGVOYW1lKGVbMF0sImh0bWwiKXx8KG49
ZS5vZmZzZXQoKSksbi50b3ArPXguY3NzKGVbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksbi5sZWZ0
Kz14LmNzcyhlWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDp0LnRvcC1uLnRvcC14LmNz
cyhyLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1uLmxlZnQteC5jc3MociwibWFyZ2luTGVm
dCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlv
bigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50fHxzO3doaWxlKGUmJiF4Lm5vZGVOYW1lKGUsImh0
bWwiKSYmInN0YXRpYyI9PT14LmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0
dXJuIGV8fHN9KX19KSx4LmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6
InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oZSxuKXt2YXIgcj0vWS8udGVzdChuKTt4LmZuW2VdPWZ1
bmN0aW9uKGkpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsaSxvKXt2YXIgYT1vcihl
KTtyZXR1cm4gbz09PXQ/YT9uIGluIGE/YVtuXTphLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtp
XTplW2ldOihhP2Euc2Nyb2xsVG8ocj94KGEpLnNjcm9sbExlZnQoKTpvLHI/bzp4KGEpLnNjcm9s
bFRvcCgpKTplW2ldPW8sdCl9LGUsaSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pO2Z1bmN0aW9u
IG9yKGUpe3JldHVybiB4LmlzV2luZG93KGUpP2U6OT09PWUubm9kZVR5cGU/ZS5kZWZhdWx0Vmll
d3x8ZS5wYXJlbnRXaW5kb3c6ITF9eC5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRo
In0sZnVuY3Rpb24oZSxuKXt4LmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6biwiIjoi
b3V0ZXIiK2V9LGZ1bmN0aW9uKHIsaSl7eC5mbltpXT1mdW5jdGlvbihpLG8pe3ZhciBhPWFyZ3Vt
ZW50cy5sZW5ndGgmJihyfHwiYm9vbGVhbiIhPXR5cGVvZiBpKSxzPXJ8fChpPT09ITB8fG89PT0h
MD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24obixyLGkp
e3ZhciBvO3JldHVybiB4LmlzV2luZG93KG4pP24uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJj
bGllbnQiK2VdOjk9PT1uLm5vZGVUeXBlPyhvPW4uZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KG4u
Ym9keVsic2Nyb2xsIitlXSxvWyJzY3JvbGwiK2VdLG4uYm9keVsib2Zmc2V0IitlXSxvWyJvZmZz
ZXQiK2VdLG9bImNsaWVudCIrZV0pKTppPT09dD94LmNzcyhuLHIscyk6eC5zdHlsZShuLHIsaSxz
KX0sbixhP2k6dCxhLG51bGwpfX0pfSkseC5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
bGVuZ3RofSx4LmZuLmFuZFNlbGY9eC5mbi5hZGRCYWNrLCJvYmplY3QiPT10eXBlb2YgbW9kdWxl
JiZtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9
eDooZS5qUXVlcnk9ZS4kPXgsImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYm
ZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSl9KSh3aW5kb3cpOworZGlm
ZiAtLWdpdCBhL3dlYi9hamF4L2xpYnMvanF1ZXJ5LzIuMC4zL2pxdWVyeS5taW4uanMgYi93ZWIv
YWpheC9saWJzL2pxdWVyeS8yLjAuMy9qcXVlcnkubWluLmpzCituZXcgZmlsZSBtb2RlIDEwMDY0
NAoraW5kZXggMDAwMDAwMC4uOWE4NWJkMworLS0tIC9kZXYvbnVsbAorKysrIGIvd2ViL2FqYXgv
bGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcworQEAgLTAsMCArMSw2IEBACisrLyohIGpR
dWVyeSB2Mi4wLjMgfCAoYykgMjAwNSwgMjAxMyBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiB8IGpx
dWVyeS5vcmcvbGljZW5zZQorKy8vQCBzb3VyY2VNYXBwaW5nVVJMPWpxdWVyeS5taW4ubWFwCisr
Ki8KKysoZnVuY3Rpb24oZSx1bmRlZmluZWQpe3ZhciB0LG4scj10eXBlb2YgdW5kZWZpbmVkLGk9
ZS5sb2NhdGlvbixvPWUuZG9jdW1lbnQscz1vLmRvY3VtZW50RWxlbWVudCxhPWUualF1ZXJ5LHU9
ZS4kLGw9e30sYz1bXSxwPSIyLjAuMyIsZj1jLmNvbmNhdCxoPWMucHVzaCxkPWMuc2xpY2UsZz1j
LmluZGV4T2YsbT1sLnRvU3RyaW5nLHk9bC5oYXNPd25Qcm9wZXJ0eSx2PXAudHJpbSx4PWZ1bmN0
aW9uKGUsbil7cmV0dXJuIG5ldyB4LmZuLmluaXQoZSxuLHQpfSxiPS9bKy1dPyg/OlxkKlwufClc
ZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLHc9L1xTKy9nLFQ9L14oPzpccyooPFtcd1xXXSs+
KVtePl0qfCMoW1x3LV0qKSkkLyxDPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8saz0vXi1t
cy0vLE49Ly0oW1xkYS16XSkvZ2ksRT1mdW5jdGlvbihlLHQpe3JldHVybiB0LnRvVXBwZXJDYXNl
KCl9LFM9ZnVuY3Rpb24oKXtvLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQi
LFMsITEpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsUywhMSkseC5yZWFkeSgpfTt4LmZu
PXgucHJvdG90eXBlPXtqcXVlcnk6cCxjb25zdHJ1Y3Rvcjp4LGluaXQ6ZnVuY3Rpb24oZSx0LG4p
e3ZhciByLGk7aWYoIWUpcmV0dXJuIHRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZihyPSI8
Ij09PWUuY2hhckF0KDApJiYiPiI9PT1lLmNoYXJBdChlLmxlbmd0aC0xKSYmZS5sZW5ndGg+PTM/
W251bGwsZSxudWxsXTpULmV4ZWMoZSksIXJ8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8o
dHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10
IGluc3RhbmNlb2YgeD90WzBdOnQseC5tZXJnZSh0aGlzLHgucGFyc2VIVE1MKHJbMV0sdCYmdC5u
b2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6bywhMCkpLEMudGVzdChyWzFdKSYmeC5pc1BsYWlu
T2JqZWN0KHQpKWZvcihyIGluIHQpeC5pc0Z1bmN0aW9uKHRoaXNbcl0pP3RoaXNbcl0odFtyXSk6
dGhpcy5hdHRyKHIsdFtyXSk7cmV0dXJuIHRoaXN9cmV0dXJuIGk9by5nZXRFbGVtZW50QnlJZChy
WzJdKSxpJiZpLnBhcmVudE5vZGUmJih0aGlzLmxlbmd0aD0xLHRoaXNbMF09aSksdGhpcy5jb250
ZXh0PW8sdGhpcy5zZWxlY3Rvcj1lLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXMuY29udGV4
dD10aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTp4LmlzRnVuY3Rpb24oZSk/bi5yZWFkeShl
KTooZS5zZWxlY3RvciE9PXVuZGVmaW5lZCYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlz
LmNvbnRleHQ9ZS5jb250ZXh0KSx4Lm1ha2VBcnJheShlLHRoaXMpKX0sc2VsZWN0b3I6IiIsbGVu
Z3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBkLmNhbGwodGhpcyl9LGdldDpmdW5jdGlv
bihlKXtyZXR1cm4gbnVsbD09ZT90aGlzLnRvQXJyYXkoKTowPmU/dGhpc1t0aGlzLmxlbmd0aCtl
XTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5tZXJnZSh0aGlzLmNvbnN0
cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHQuY29udGV4dD10aGlzLmNvbnRl
eHQsdH0sZWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmVhY2godGhpcyxlLHQpfSxyZWFkeTpm
dW5jdGlvbihlKXtyZXR1cm4geC5yZWFkeS5wcm9taXNlKCkuZG9uZShlKSx0aGlzfSxzbGljZTpm
dW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9
LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49K2UrKDA+
ZT90OjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhuPj0wJiZ0Pm4/W3RoaXNbbl1dOltdKX0sbWFw
OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayh4Lm1hcCh0aGlzLGZ1bmN0aW9uKHQs
bil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBy
ZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6aCxzb3J0OltdLnNvcnQsc3Bs
aWNlOltdLnNwbGljZX0seC5mbi5pbml0LnByb3RvdHlwZT14LmZuLHguZXh0ZW5kPXguZm4uZXh0
ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLHM9YXJndW1lbnRzWzBdfHx7fSxhPTEsdT1h
cmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIHMmJihsPXMscz1hcmd1
bWVudHNbMV18fHt9LGE9MiksIm9iamVjdCI9PXR5cGVvZiBzfHx4LmlzRnVuY3Rpb24ocyl8fChz
PXt9KSx1PT09YSYmKHM9dGhpcywtLWEpO3U+YTthKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW2Fd
KSlmb3IodCBpbiBlKW49c1t0XSxyPWVbdF0scyE9PXImJihsJiZyJiYoeC5pc1BsYWluT2JqZWN0
KHIpfHwoaT14LmlzQXJyYXkocikpKT8oaT8oaT0hMSxvPW4mJnguaXNBcnJheShuKT9uOltdKTpv
PW4mJnguaXNQbGFpbk9iamVjdChuKT9uOnt9LHNbdF09eC5leHRlbmQobCxvLHIpKTpyIT09dW5k
ZWZpbmVkJiYoc1t0XT1yKSk7cmV0dXJuIHN9LHguZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhw
K01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vQ29uZmxpY3Q6ZnVuY3Rpb24odCl7
cmV0dXJuIGUuJD09PXgmJihlLiQ9dSksdCYmZS5qUXVlcnk9PT14JiYoZS5qUXVlcnk9YSkseH0s
aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oZSl7ZT94LnJlYWR5V2Fp
dCsrOngucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihlKXsoZT09PSEwPy0teC5yZWFkeVdhaXQ6
eC5pc1JlYWR5KXx8KHguaXNSZWFkeT0hMCxlIT09ITAmJi0teC5yZWFkeVdhaXQ+MHx8KG4ucmVz
b2x2ZVdpdGgobyxbeF0pLHguZm4udHJpZ2dlciYmeChvKS50cmlnZ2VyKCJyZWFkeSIpLm9mZigi
cmVhZHkiKSkpfSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PT14LnR5
cGUoZSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1cm4g
bnVsbCE9ZSYmZT09PWUud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFO
KHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX0sdHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVs
bD09ZT9lKyIiOiJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGU/bFttLmNh
bGwoZSldfHwib2JqZWN0Ijp0eXBlb2YgZX0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXtpZigi
b2JqZWN0IiE9PXgudHlwZShlKXx8ZS5ub2RlVHlwZXx8eC5pc1dpbmRvdyhlKSlyZXR1cm4hMTt0
cnl7aWYoZS5jb25zdHJ1Y3RvciYmIXkuY2FsbChlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQ
cm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEwfSxpc0VtcHR5
T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGVy
cm9yOmZ1bmN0aW9uKGUpe3Rocm93IEVycm9yKGUpfSxwYXJzZUhUTUw6ZnVuY3Rpb24oZSx0LG4p
e2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2Yg
dCYmKG49dCx0PSExKSx0PXR8fG87dmFyIHI9Qy5leGVjKGUpLGk9IW4mJltdO3JldHVybiByP1t0
LmNyZWF0ZUVsZW1lbnQoclsxXSldOihyPXguYnVpbGRGcmFnbWVudChbZV0sdCxpKSxpJiZ4KGkp
LnJlbW92ZSgpLHgubWVyZ2UoW10sci5jaGlsZE5vZGVzKSl9LHBhcnNlSlNPTjpKU09OLnBhcnNl
LHBhcnNlWE1MOmZ1bmN0aW9uKGUpe3ZhciB0LG47aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSly
ZXR1cm4gbnVsbDt0cnl7bj1uZXcgRE9NUGFyc2VyLHQ9bi5wYXJzZUZyb21TdHJpbmcoZSwidGV4
dC94bWwiKX1jYXRjaChyKXt0PXVuZGVmaW5lZH1yZXR1cm4oIXR8fHQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmeC5lcnJvcigiSW52YWxpZCBYTUw6ICIrZSks
dH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihlKXt2YXIgdCxuPWV2YWw7
ZT14LnRyaW0oZSksZSYmKDE9PT1lLmluZGV4T2YoInVzZSBzdHJpY3QiKT8odD1vLmNyZWF0ZUVs
ZW1lbnQoInNjcmlwdCIpLHQudGV4dD1lLG8uaGVhZC5hcHBlbmRDaGlsZCh0KS5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKHQpKTpuKGUpKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJl
cGxhY2UoaywibXMtIikucmVwbGFjZShOLEUpfSxub2RlTmFtZTpmdW5jdGlvbihlLHQpe3JldHVy
biBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9
LGVhY2g6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9MCxvPWUubGVuZ3RoLHM9aihlKTtpZihuKXtp
ZihzKXtmb3IoO28+aTtpKyspaWYocj10LmFwcGx5KGVbaV0sbikscj09PSExKWJyZWFrfWVsc2Ug
Zm9yKGkgaW4gZSlpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBpZihzKXtm
b3IoO28+aTtpKyspaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVha31lbHNlIGZv
cihpIGluIGUpaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVhaztyZXR1cm4gZX0s
dHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjp2LmNhbGwoZSl9LG1ha2VBcnJheTpm
dW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVybiBudWxsIT1lJiYoaihPYmplY3QoZSkpP3gu
bWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOmguY2FsbChuLGUpKSxufSxpbkFycmF5
OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTpnLmNhbGwodCxlLG4pfSxtZXJnZTpm
dW5jdGlvbihlLHQpe3ZhciBuPXQubGVuZ3RoLHI9ZS5sZW5ndGgsaT0wO2lmKCJudW1iZXIiPT10
eXBlb2Ygbilmb3IoO24+aTtpKyspZVtyKytdPXRbaV07ZWxzZSB3aGlsZSh0W2ldIT09dW5kZWZp
bmVkKWVbcisrXT10W2krK107cmV0dXJuIGUubGVuZ3RoPXIsZX0sZ3JlcDpmdW5jdGlvbihlLHQs
bil7dmFyIHIsaT1bXSxvPTAscz1lLmxlbmd0aDtmb3Iobj0hIW47cz5vO28rKylyPSEhdChlW29d
LG8pLG4hPT1yJiZpLnB1c2goZVtvXSk7cmV0dXJuIGl9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFy
IHIsaT0wLG89ZS5sZW5ndGgscz1qKGUpLGE9W107aWYocylmb3IoO28+aTtpKyspcj10KGVbaV0s
aSxuKSxudWxsIT1yJiYoYVthLmxlbmd0aF09cik7ZWxzZSBmb3IoaSBpbiBlKXI9dChlW2ldLGks
biksbnVsbCE9ciYmKGFbYS5sZW5ndGhdPXIpO3JldHVybiBmLmFwcGx5KFtdLGEpfSxndWlkOjEs
cHJveHk6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYo
bj1lW3RdLHQ9ZSxlPW4pLHguaXNGdW5jdGlvbihlKT8ocj1kLmNhbGwoYXJndW1lbnRzLDIpLGk9
ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KGQuY2FsbChhcmd1bWVu
dHMpKSl9LGkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHx4Lmd1aWQrKyxpKTp1bmRlZmluZWR9LGFjY2Vz
czpmdW5jdGlvbihlLHQsbixyLGksbyxzKXt2YXIgYT0wLHU9ZS5sZW5ndGgsbD1udWxsPT1uO2lm
KCJvYmplY3QiPT09eC50eXBlKG4pKXtpPSEwO2ZvcihhIGluIG4peC5hY2Nlc3MoZSx0LGEsblth
XSwhMCxvLHMpfWVsc2UgaWYociE9PXVuZGVmaW5lZCYmKGk9ITAseC5pc0Z1bmN0aW9uKHIpfHwo
cz0hMCksbCYmKHM/KHQuY2FsbChlLHIpLHQ9bnVsbCk6KGw9dCx0PWZ1bmN0aW9uKGUsdCxuKXty
ZXR1cm4gbC5jYWxsKHgoZSksbil9KSksdCkpZm9yKDt1PmE7YSsrKXQoZVthXSxuLHM/cjpyLmNh
bGwoZVthXSxhLHQoZVthXSxuKSkpO3JldHVybiBpP2U6bD90LmNhbGwoZSk6dT90KGVbMF0sbik6
b30sbm93OkRhdGUubm93LHN3YXA6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzPXt9O2Zvcihv
IGluIHQpc1tvXT1lLnN0eWxlW29dLGUuc3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7
Zm9yKG8gaW4gdCllLnN0eWxlW29dPXNbb107cmV0dXJuIGl9fSkseC5yZWFkeS5wcm9taXNlPWZ1
bmN0aW9uKHQpe3JldHVybiBufHwobj14LkRlZmVycmVkKCksImNvbXBsZXRlIj09PW8ucmVhZHlT
dGF0ZT9zZXRUaW1lb3V0KHgucmVhZHkpOihvLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRM
b2FkZWQiLFMsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsUywhMSkpKSxuLnByb21pc2Uo
dCl9LHguZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVn
RXhwIE9iamVjdCBFcnJvciIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2xbIltvYmplY3QgIit0
KyJdIl09dC50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gaihlKXt2YXIgdD1lLmxlbmd0aCxuPXgu
dHlwZShlKTtyZXR1cm4geC5pc1dpbmRvdyhlKT8hMToxPT09ZS5ub2RlVHlwZSYmdD8hMDoiYXJy
YXkiPT09bnx8ImZ1bmN0aW9uIiE9PW4mJigwPT09dHx8Im51bWJlciI9PXR5cGVvZiB0JiZ0PjAm
JnQtMSBpbiBlKX10PXgobyksZnVuY3Rpb24oZSx1bmRlZmluZWQpe3ZhciB0LG4scixpLG8scyxh
LHUsbCxjLHAsZixoLGQsZyxtLHksdj0ic2l6emxlIistbmV3IERhdGUsYj1lLmRvY3VtZW50LHc9
MCxUPTAsQz1zdCgpLGs9c3QoKSxOPXN0KCksRT0hMSxTPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9
PT10PyhFPSEwLDApOjB9LGo9dHlwZW9mIHVuZGVmaW5lZCxEPTE8PDMxLEE9e30uaGFzT3duUHJv
cGVydHksTD1bXSxxPUwucG9wLEg9TC5wdXNoLE89TC5wdXNoLEY9TC5zbGljZSxQPUwuaW5kZXhP
Znx8ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPXRoaXMubGVuZ3RoO2Zvcig7bj50O3QrKylpZih0aGlz
W3RdPT09ZSlyZXR1cm4gdDtyZXR1cm4tMX0sUj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRv
Zm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8
bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLE09IltcXHgyMFxcdFxcclxc
blxcZl0iLFc9Iig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIiwkPVcucmVwbGFjZSgi
dyIsIncjIiksQj0iXFxbIitNKyIqKCIrVysiKSIrTSsiKig/OihbKl4kfCF+XT89KSIrTSsiKig/
OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrJCsiKXwpfCkiK00rIipcXF0iLEk9
IjooIitXKyIpKD86XFwoKChbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCg/OlxcXFwu
fFteXFxcXCgpW1xcXV18IitCLnJlcGxhY2UoMyw4KSsiKSopfC4qKVxcKXwpIix6PVJlZ0V4cCgi
XiIrTSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitNKyIrJCIsImciKSxfPVJlZ0V4cCgi
XiIrTSsiKiwiK00rIioiKSxYPVJlZ0V4cCgiXiIrTSsiKihbPit+XXwiK00rIikiK00rIioiKSxV
PVJlZ0V4cChNKyIqWyt+XSIpLFk9UmVnRXhwKCI9IitNKyIqKFteXFxdJ1wiXSopIitNKyIqXFxd
IiwiZyIpLFY9UmVnRXhwKEkpLEc9UmVnRXhwKCJeIiskKyIkIiksSj17SUQ6UmVnRXhwKCJeIygi
K1crIikiKSxDTEFTUzpSZWdFeHAoIl5cXC4oIitXKyIpIiksVEFHOlJlZ0V4cCgiXigiK1cucmVw
bGFjZSgidyIsIncqIikrIikiKSxBVFRSOlJlZ0V4cCgiXiIrQiksUFNFVURPOlJlZ0V4cCgiXiIr
SSksQ0hJTEQ6UmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8
b2YtdHlwZSkoPzpcXCgiK00rIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK00rIiooPzoo
WystXXwpIitNKyIqKFxcZCspfCkpIitNKyIqXFwpfCkiLCJpIiksYm9vbDpSZWdFeHAoIl4oPzoi
K1IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpSZWdFeHAoIl4iK00rIipbPit+XXw6KGV2ZW58b2Rk
fGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrTSsiKigoPzotXFxkKT9cXGQqKSIrTSsi
KlxcKXwpKD89W14tXXwkKSIsImkiKX0sUT0vXltee10rXHtccypcW25hdGl2ZSBcdy8sSz0vXig/
OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLFo9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFy
ZWF8YnV0dG9uKSQvaSxldD0vXmhcZCQvaSx0dD0vJ3xcXC9nLG50PVJlZ0V4cCgiXFxcXChbXFxk
YS1mXXsxLDZ9IitNKyI/fCgiK00rIil8LikiLCJpZyIpLHJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIg
cj0iMHgiK3QtNjU1MzY7cmV0dXJuIHIhPT1yfHxuP3Q6MD5yP1N0cmluZy5mcm9tQ2hhckNvZGUo
cis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxyPj4xMCw1NjMyMHwxMDIzJnIpfTt0
cnl7Ty5hcHBseShMPUYuY2FsbChiLmNoaWxkTm9kZXMpLGIuY2hpbGROb2RlcyksTFtiLmNoaWxk
Tm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChpdCl7Tz17YXBwbHk6TC5sZW5ndGg/ZnVuY3Rp
b24oZSx0KXtILmFwcGx5KGUsRi5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0
aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gb3QoZSx0
LHIsaSl7dmFyIG8scyxhLHUsbCxmLGcsbSx4LHc7aWYoKHQ/dC5vd25lckRvY3VtZW50fHx0OmIp
IT09cCYmYyh0KSx0PXR8fHAscj1yfHxbXSwhZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBy
O2lmKDEhPT0odT10Lm5vZGVUeXBlKSYmOSE9PXUpcmV0dXJuW107aWYoaCYmIWkpe2lmKG89Sy5l
eGVjKGUpKWlmKGE9b1sxXSl7aWYoOT09PXUpe2lmKHM9dC5nZXRFbGVtZW50QnlJZChhKSwhc3x8
IXMucGFyZW50Tm9kZSlyZXR1cm4gcjtpZihzLmlkPT09YSlyZXR1cm4gci5wdXNoKHMpLHJ9ZWxz
ZSBpZih0Lm93bmVyRG9jdW1lbnQmJihzPXQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChh
KSkmJnkodCxzKSYmcy5pZD09PWEpcmV0dXJuIHIucHVzaChzKSxyfWVsc2V7aWYob1syXSlyZXR1
cm4gTy5hcHBseShyLHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkpLHI7aWYoKGE9b1szXSkmJm4u
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBP
LmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpKSxyfWlmKG4ucXNhJiYoIWR8fCFk
LnRlc3QoZSkpKXtpZihtPWc9dix4PXQsdz05PT09dSYmZSwxPT09dSYmIm9iamVjdCIhPT10Lm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Y9Z3QoZSksKGc9dC5nZXRBdHRyaWJ1dGUoImlkIikpP209
Zy5yZXBsYWNlKHR0LCJcXCQmIik6dC5zZXRBdHRyaWJ1dGUoImlkIixtKSxtPSJbaWQ9JyIrbSsi
J10gIixsPWYubGVuZ3RoO3doaWxlKGwtLSlmW2xdPW0rbXQoZltsXSk7eD1VLnRlc3QoZSkmJnQu
cGFyZW50Tm9kZXx8dCx3PWYuam9pbigiLCIpfWlmKHcpdHJ5e3JldHVybiBPLmFwcGx5KHIseC5x
dWVyeVNlbGVjdG9yQWxsKHcpKSxyfWNhdGNoKFQpe31maW5hbGx5e2d8fHQucmVtb3ZlQXR0cmli
dXRlKCJpZCIpfX19cmV0dXJuIGt0KGUucmVwbGFjZSh6LCIkMSIpLHQscixpKX1mdW5jdGlvbiBz
dCgpe3ZhciBlPVtdO2Z1bmN0aW9uIHQobixyKXtyZXR1cm4gZS5wdXNoKG4rPSIgIik+aS5jYWNo
ZUxlbmd0aCYmZGVsZXRlIHRbZS5zaGlmdCgpXSx0W25dPXJ9cmV0dXJuIHR9ZnVuY3Rpb24gYXQo
ZSl7cmV0dXJuIGVbdl09ITAsZX1mdW5jdGlvbiB1dChlKXt2YXIgdD1wLmNyZWF0ZUVsZW1lbnQo
ImRpdiIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2gobil7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVu
dE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGx0KGUs
dCl7dmFyIG49ZS5zcGxpdCgifCIpLHI9ZS5sZW5ndGg7d2hpbGUoci0tKWkuYXR0ckhhbmRsZVtu
W3JdXT10fWZ1bmN0aW9uIGN0KGUsdCl7dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYx
PT09dC5ub2RlVHlwZSYmKH50LnNvdXJjZUluZGV4fHxEKS0ofmUuc291cmNlSW5kZXh8fEQpO2lm
KHIpcmV0dXJuIHI7aWYobil3aGlsZShuPW4ubmV4dFNpYmxpbmcpaWYobj09PXQpcmV0dXJuLTE7
cmV0dXJuIGU/MTotMX1mdW5jdGlvbiBwdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1uJiZ0LnR5cGU9PT1lfX1mdW5j
dGlvbiBmdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpO3JldHVybigiaW5wdXQiPT09bnx8ImJ1dHRvbiI9PT1uKSYmdC50eXBlPT09ZX19ZnVuY3Rp
b24gaHQoZSl7cmV0dXJuIGF0KGZ1bmN0aW9uKHQpe3JldHVybiB0PSt0LGF0KGZ1bmN0aW9uKG4s
cil7dmFyIGksbz1lKFtdLG4ubGVuZ3RoLHQpLHM9by5sZW5ndGg7d2hpbGUocy0tKW5baT1vW3Nd
XSYmKG5baV09IShyW2ldPW5baV0pKX0pfSl9cz1vdC5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1l
JiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHQ/IkhUTUwiIT09
dC5ub2RlTmFtZTohMX0sbj1vdC5zdXBwb3J0PXt9LGM9b3Quc2V0RG9jdW1lbnQ9ZnVuY3Rpb24o
ZSl7dmFyIHQ9ZT9lLm93bmVyRG9jdW1lbnR8fGU6YixyPXQuZGVmYXVsdFZpZXc7cmV0dXJuIHQh
PT1wJiY5PT09dC5ub2RlVHlwZSYmdC5kb2N1bWVudEVsZW1lbnQ/KHA9dCxmPXQuZG9jdW1lbnRF
bGVtZW50LGg9IXModCksciYmci5hdHRhY2hFdmVudCYmciE9PXIudG9wJiZyLmF0dGFjaEV2ZW50
KCJvbmJlZm9yZXVubG9hZCIsZnVuY3Rpb24oKXtjKCl9KSxuLmF0dHJpYnV0ZXM9dXQoZnVuY3Rp
b24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIp
fSksbi5nZXRFbGVtZW50c0J5VGFnTmFtZT11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRD
aGlsZCh0LmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxl
bmd0aH0pLG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5p
bm5lckhUTUw9IjxkaXYgY2xhc3M9J2EnPjwvZGl2PjxkaXYgY2xhc3M9J2EgaSc+PC9kaXY+Iixl
LmZpcnN0Q2hpbGQuY2xhc3NOYW1lPSJpIiwyPT09ZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJp
IikubGVuZ3RofSksbi5nZXRCeUlkPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBmLmFwcGVuZENoaWxk
KGUpLmlkPXYsIXQuZ2V0RWxlbWVudHNCeU5hbWV8fCF0LmdldEVsZW1lbnRzQnlOYW1lKHYpLmxl
bmd0aH0pLG4uZ2V0QnlJZD8oaS5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQuZ2V0
RWxlbWVudEJ5SWQhPT1qJiZoKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuJiZu
LnBhcmVudE5vZGU/W25dOltdfX0saS5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBs
YWNlKG50LHJ0KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJpZCIp
PT09dH19KTooZGVsZXRlIGkuZmluZC5JRCxpLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1l
LnJlcGxhY2UobnQscnQpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10eXBlb2YgZS5nZXRBdHRy
aWJ1dGVOb2RlIT09aiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBuJiZuLnZhbHVl
PT09dH19KSxpLmZpbmQuVEFHPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oZSx0KXty
ZXR1cm4gdHlwZW9mIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1qP3QuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoZSk6dW5kZWZpbmVkfTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT0wLG89dC5nZXRF
bGVtZW50c0J5VGFnTmFtZShlKTtpZigiKiI9PT1lKXt3aGlsZShuPW9baSsrXSkxPT09bi5ub2Rl
VHlwZSYmci5wdXNoKG4pO3JldHVybiByfXJldHVybiBvfSxpLmZpbmQuQ0xBU1M9bi5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihlLHQpe3JldHVybiB0eXBlb2YgdC5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lIT09aiYmaD90LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSk6dW5kZWZpbmVk
fSxnPVtdLGQ9W10sKG4ucXNhPVEudGVzdCh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKHV0KGZ1bmN0
aW9uKGUpe2UuaW5uZXJIVE1MPSI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+
PC9zZWxlY3Q+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fGQucHVz
aCgiXFxbIitNKyIqKD86dmFsdWV8IitSKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tl
ZCIpLmxlbmd0aHx8ZC5wdXNoKCI6Y2hlY2tlZCIpfSksdXQoZnVuY3Rpb24oZSl7dmFyIG49dC5j
cmVhdGVFbGVtZW50KCJpbnB1dCIpO24uc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5h
cHBlbmRDaGlsZChuKS5zZXRBdHRyaWJ1dGUoInQiLCIiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0
Xj0nJ10iKS5sZW5ndGgmJmQucHVzaCgiWypeJF09IitNKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5
U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxkLnB1c2goIjplbmFibGVkIiwiOmRpc2Fi
bGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IiksZC5wdXNoKCIsLio6Iil9KSksKG4ubWF0
Y2hlc1NlbGVjdG9yPVEudGVzdChtPWYud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxmLm1vek1hdGNo
ZXNTZWxlY3Rvcnx8Zi5vTWF0Y2hlc1NlbGVjdG9yfHxmLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJnV0
KGZ1bmN0aW9uKGUpe24uZGlzY29ubmVjdGVkTWF0Y2g9bS5jYWxsKGUsImRpdiIpLG0uY2FsbChl
LCJbcyE9JyddOngiKSxnLnB1c2goIiE9IixJKX0pLGQ9ZC5sZW5ndGgmJlJlZ0V4cChkLmpvaW4o
InwiKSksZz1nLmxlbmd0aCYmUmVnRXhwKGcuam9pbigifCIpKSx5PVEudGVzdChmLmNvbnRhaW5z
KXx8Zi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe3ZhciBuPTk9PT1lLm5v
ZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGU7cmV0dXJuIGU9PT1y
fHwhKCFyfHwxIT09ci5ub2RlVHlwZXx8IShuLmNvbnRhaW5zP24uY29udGFpbnMocik6ZS5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSkpfTpm
dW5jdGlvbihlLHQpe2lmKHQpd2hpbGUodD10LnBhcmVudE5vZGUpaWYodD09PWUpcmV0dXJuITA7
cmV0dXJuITF9LFM9Zi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHIpe2lmKGU9
PT1yKXJldHVybiBFPSEwLDA7dmFyIGk9ci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKTtyZXR1cm4g
aT8xJml8fCFuLnNvcnREZXRhY2hlZCYmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PWk/
ZT09PXR8fHkoYixlKT8tMTpyPT09dHx8eShiLHIpPzE6bD9QLmNhbGwobCxlKS1QLmNhbGwobCxy
KTowOjQmaT8tMToxOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MX06ZnVuY3Rpb24oZSxu
KXt2YXIgcixpPTAsbz1lLnBhcmVudE5vZGUscz1uLnBhcmVudE5vZGUsYT1bZV0sdT1bbl07aWYo
ZT09PW4pcmV0dXJuIEU9ITAsMDtpZighb3x8IXMpcmV0dXJuIGU9PT10Py0xOm49PT10PzE6bz8t
MTpzPzE6bD9QLmNhbGwobCxlKS1QLmNhbGwobCxuKTowO2lmKG89PT1zKXJldHVybiBjdChlLG4p
O3I9ZTt3aGlsZShyPXIucGFyZW50Tm9kZSlhLnVuc2hpZnQocik7cj1uO3doaWxlKHI9ci5wYXJl
bnROb2RlKXUudW5zaGlmdChyKTt3aGlsZShhW2ldPT09dVtpXSlpKys7cmV0dXJuIGk/Y3QoYVtp
XSx1W2ldKTphW2ldPT09Yj8tMTp1W2ldPT09Yj8xOjB9LHQpOnB9LG90Lm1hdGNoZXM9ZnVuY3Rp
b24oZSx0KXtyZXR1cm4gb3QoZSxudWxsLG51bGwsdCl9LG90Lm1hdGNoZXNTZWxlY3Rvcj1mdW5j
dGlvbihlLHQpe2lmKChlLm93bmVyRG9jdW1lbnR8fGUpIT09cCYmYyhlKSx0PXQucmVwbGFjZShZ
LCI9JyQxJ10iKSwhKCFuLm1hdGNoZXNTZWxlY3Rvcnx8IWh8fGcmJmcudGVzdCh0KXx8ZCYmZC50
ZXN0KHQpKSl0cnl7dmFyIHI9bS5jYWxsKGUsdCk7aWYocnx8bi5kaXNjb25uZWN0ZWRNYXRjaHx8
ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiByfWNhdGNoKGkpe31y
ZXR1cm4gb3QodCxwLG51bGwsW2VdKS5sZW5ndGg+MH0sb3QuY29udGFpbnM9ZnVuY3Rpb24oZSx0
KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PXAmJmMoZSkseShlLHQpfSxvdC5hdHRyPWZ1
bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1wJiZjKGUpO3ZhciByPWkuYXR0ckhh
bmRsZVt0LnRvTG93ZXJDYXNlKCldLG89ciYmQS5jYWxsKGkuYXR0ckhhbmRsZSx0LnRvTG93ZXJD
YXNlKCkpP3IoZSx0LCFoKTp1bmRlZmluZWQ7cmV0dXJuIG89PT11bmRlZmluZWQ/bi5hdHRyaWJ1
dGVzfHwhaD9lLmdldEF0dHJpYnV0ZSh0KToobz1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZvLnNw
ZWNpZmllZD9vLnZhbHVlOm51bGw6b30sb3QuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgRXJyb3Io
IlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LG90LnVuaXF1ZVNv
cnQ9ZnVuY3Rpb24oZSl7dmFyIHQscj1bXSxpPTAsbz0wO2lmKEU9IW4uZGV0ZWN0RHVwbGljYXRl
cyxsPSFuLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KFMpLEUpe3doaWxlKHQ9ZVtvKytd
KXQ9PT1lW29dJiYoaT1yLnB1c2gobykpO3doaWxlKGktLSllLnNwbGljZShyW2ldLDEpfXJldHVy
biBlfSxvPW90LmdldFRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixyPTAsaT1lLm5vZGVUeXBl
O2lmKGkpe2lmKDE9PT1pfHw5PT09aXx8MTE9PT1pKXtpZigic3RyaW5nIj09dHlwZW9mIGUudGV4
dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5l
eHRTaWJsaW5nKW4rPW8oZSl9ZWxzZSBpZigzPT09aXx8ND09PWkpcmV0dXJuIGUubm9kZVZhbHVl
fWVsc2UgZm9yKDt0PWVbcl07cisrKW4rPW8odCk7cmV0dXJuIG59LGk9b3Quc2VsZWN0b3JzPXtj
YWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86YXQsbWF0Y2g6SixhdHRySGFuZGxlOnt9LGZpbmQ6
e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBh
cmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6
InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVb
MV09ZVsxXS5yZXBsYWNlKG50LHJ0KSxlWzNdPShlWzRdfHxlWzVdfHwiIikucmVwbGFjZShudCxy
dCksIn49Ij09PWVbMl0mJihlWzNdPSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpm
dW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1lWzFdLnNs
aWNlKDAsMyk/KGVbM118fG90LmVycm9yKGVbMF0pLGVbNF09KyhlWzRdP2VbNV0rKGVbNl18fDEp
OjIqKCJldmVuIj09PWVbM118fCJvZGQiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fCJvZGQi
PT09ZVszXSkpOmVbM10mJm90LmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIg
dCxuPSFlWzVdJiZlWzJdO3JldHVybiBKLkNISUxELnRlc3QoZVswXSk/bnVsbDooZVszXSYmZVs0
XSE9PXVuZGVmaW5lZD9lWzJdPWVbNF06biYmVi50ZXN0KG4pJiYodD1ndChuLCEwKSkmJih0PW4u
aW5kZXhPZigiKSIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCks
ZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihl
KXt2YXIgdD1lLnJlcGxhY2UobnQscnQpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5j
dGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFt
ZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PUNbZSsiICJdO3Jl
dHVybiB0fHwodD1SZWdFeHAoIihefCIrTSsiKSIrZSsiKCIrTSsifCQpIikpJiZDKGUsZnVuY3Rp
b24oZSl7cmV0dXJuIHQudGVzdCgic3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNz
TmFtZXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlIT09aiYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8
fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9b3Qu
YXR0cihyLGUpO3JldHVybiBudWxsPT1pPyIhPSI9PT10OnQ/KGkrPSIiLCI9Ij09PXQ/aT09PW46
IiE9Ij09PXQ/aSE9PW46Il49Ij09PXQ/biYmMD09PWkuaW5kZXhPZihuKToiKj0iPT09dD9uJiZp
LmluZGV4T2Yobik+LTE6IiQ9Ij09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjoifj0iPT09
dD8oIiAiK2krIiAiKS5pbmRleE9mKG4pPi0xOiJ8PSI9PT10P2k9PT1ufHxpLnNsaWNlKDAsbi5s
ZW5ndGgrMSk9PT1uKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBv
PSJudGgiIT09ZS5zbGljZSgwLDMpLHM9Imxhc3QiIT09ZS5zbGljZSgtNCksYT0ib2YtdHlwZSI9
PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9
OmZ1bmN0aW9uKHQsbix1KXt2YXIgbCxjLHAsZixoLGQsZz1vIT09cz8ibmV4dFNpYmxpbmciOiJw
cmV2aW91c1NpYmxpbmciLG09dC5wYXJlbnROb2RlLHk9YSYmdC5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpLHg9IXUmJiFhO2lmKG0pe2lmKG8pe3doaWxlKGcpe3A9dDt3aGlsZShwPXBbZ10paWYoYT9w
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT15OjE9PT1wLm5vZGVUeXBlKXJldHVybiExO2Q9Zz0i
b25seSI9PT1lJiYhZCYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihkPVtzP20uZmlyc3RDaGls
ZDptLmxhc3RDaGlsZF0scyYmeCl7Yz1tW3ZdfHwobVt2XT17fSksbD1jW2VdfHxbXSxoPWxbMF09
PT13JiZsWzFdLGY9bFswXT09PXcmJmxbMl0scD1oJiZtLmNoaWxkTm9kZXNbaF07d2hpbGUocD0r
K2gmJnAmJnBbZ118fChmPWg9MCl8fGQucG9wKCkpaWYoMT09PXAubm9kZVR5cGUmJisrZiYmcD09
PXQpe2NbZV09W3csaCxmXTticmVha319ZWxzZSBpZih4JiYobD0odFt2XXx8KHRbdl09e30pKVtl
XSkmJmxbMF09PT13KWY9bFsxXTtlbHNlIHdoaWxlKHA9KytoJiZwJiZwW2ddfHwoZj1oPTApfHxk
LnBvcCgpKWlmKChhP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUp
JiYrK2YmJih4JiYoKHBbdl18fChwW3ZdPXt9KSlbZV09W3csZl0pLHA9PT10KSlicmVhaztyZXR1
cm4gZi09aSxmPT09cnx8MD09PWYlciYmZi9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3Zh
ciBuLHI9aS5wc2V1ZG9zW2VdfHxpLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8b3QuZXJy
b3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKTtyZXR1cm4gclt2XT9yKHQpOnIubGVuZ3RoPjE/
KG49W2UsZSwiIix0XSxpLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgp
KT9hdChmdW5jdGlvbihlLG4pe3ZhciBpLG89cihlLHQpLHM9by5sZW5ndGg7d2hpbGUocy0tKWk9
UC5jYWxsKGUsb1tzXSksZVtpXT0hKG5baV09b1tzXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gcihl
LDAsbil9KTpyfX0scHNldWRvczp7bm90OmF0KGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1h
KGUucmVwbGFjZSh6LCIkMSIpKTtyZXR1cm4gclt2XT9hdChmdW5jdGlvbihlLHQsbixpKXt2YXIg
byxzPXIoZSxudWxsLGksW10pLGE9ZS5sZW5ndGg7d2hpbGUoYS0tKShvPXNbYV0pJiYoZVthXT0h
KHRbYV09bykpfSk6ZnVuY3Rpb24oZSxpLG8pe3JldHVybiB0WzBdPWUscih0LG51bGwsbyxuKSwh
bi5wb3AoKX19KSxoYXM6YXQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBv
dChlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOmF0KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlv
bih0KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fG8odCkpLmluZGV4T2YoZSk+
LTF9fSksbGFuZzphdChmdW5jdGlvbihlKXtyZXR1cm4gRy50ZXN0KGV8fCIiKXx8b3QuZXJyb3Io
InVuc3VwcG9ydGVkIGxhbmc6ICIrZSksZT1lLnJlcGxhY2UobnQscnQpLnRvTG93ZXJDYXNlKCks
ZnVuY3Rpb24odCl7dmFyIG47ZG8gaWYobj1oP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1sOmxh
bmciKXx8dC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksbj09
PWV8fDA9PT1uLmluZGV4T2YoZSsiLSIpO3doaWxlKCh0PXQucGFyZW50Tm9kZSkmJjE9PT10Lm5v
ZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlvbiYm
ZS5sb2NhdGlvbi5oYXNoO3JldHVybiBuJiZuLnNsaWNlKDEpPT09dC5pZH0scm9vdDpmdW5jdGlv
bihlKXtyZXR1cm4gZT09PWZ9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09cC5hY3RpdmVF
bGVtZW50JiYoIXAuaGFzRm9jdXN8fHAuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+
ZS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMX0s
ZGlzYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5j
dGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQm
JiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rp
b24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsZS5z
ZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUu
bmV4dFNpYmxpbmcpaWYoZS5ub2RlTmFtZT4iQCJ8fDM9PT1lLm5vZGVUeXBlfHw0PT09ZS5ub2Rl
VHlwZSlyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFpLnBzZXVk
b3MuZW1wdHkoZSl9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZXQudGVzdChlLm5vZGVOYW1l
KX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFoudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1
bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09
dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIg
dDtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5
cGUmJihudWxsPT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8dC50b0xvd2VyQ2FzZSgpPT09
ZS50eXBlKX0sZmlyc3Q6aHQoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0Omh0KGZ1bmN0aW9u
KGUsdCl7cmV0dXJuW3QtMV19KSxlcTpodChmdW5jdGlvbihlLHQsbil7cmV0dXJuWzA+bj9uK3Q6
bl19KSxldmVuOmh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49MDtmb3IoO3Q+bjtuKz0yKWUucHVzaChu
KTtyZXR1cm4gZX0pLG9kZDpodChmdW5jdGlvbihlLHQpe3ZhciBuPTE7Zm9yKDt0Pm47bis9Mill
LnB1c2gobik7cmV0dXJuIGV9KSxsdDpodChmdW5jdGlvbihlLHQsbil7dmFyIHI9MD5uP24rdDpu
O2Zvcig7LS1yPj0wOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDpodChmdW5jdGlvbihlLHQsbil7
dmFyIHI9MD5uP24rdDpuO2Zvcig7dD4rK3I7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0saS5wc2V1
ZG9zLm50aD1pLnBzZXVkb3MuZXE7Zm9yKHQgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZToh
MCxwYXNzd29yZDohMCxpbWFnZTohMH0paS5wc2V1ZG9zW3RdPXB0KHQpO2Zvcih0IGlue3N1Ym1p
dDohMCxyZXNldDohMH0paS5wc2V1ZG9zW3RdPWZ0KHQpO2Z1bmN0aW9uIGR0KCl7fWR0LnByb3Rv
dHlwZT1pLmZpbHRlcnM9aS5wc2V1ZG9zLGkuc2V0RmlsdGVycz1uZXcgZHQ7ZnVuY3Rpb24gZ3Qo
ZSx0KXt2YXIgbixyLG8scyxhLHUsbCxjPWtbZSsiICJdO2lmKGMpcmV0dXJuIHQ/MDpjLnNsaWNl
KDApO2E9ZSx1PVtdLGw9aS5wcmVGaWx0ZXI7d2hpbGUoYSl7KCFufHwocj1fLmV4ZWMoYSkpKSYm
KHImJihhPWEuc2xpY2UoclswXS5sZW5ndGgpfHxhKSx1LnB1c2gobz1bXSkpLG49ITEsKHI9WC5l
eGVjKGEpKSYmKG49ci5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOnJbMF0ucmVwbGFjZSh6
LCIgIil9KSxhPWEuc2xpY2Uobi5sZW5ndGgpKTtmb3IocyBpbiBpLmZpbHRlcikhKHI9SltzXS5l
eGVjKGEpKXx8bFtzXSYmIShyPWxbc10ocikpfHwobj1yLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpu
LHR5cGU6cyxtYXRjaGVzOnJ9KSxhPWEuc2xpY2Uobi5sZW5ndGgpKTtpZighbilicmVha31yZXR1
cm4gdD9hLmxlbmd0aDphP290LmVycm9yKGUpOmsoZSx1KS5zbGljZSgwKX1mdW5jdGlvbiBtdChl
KXt2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjtmb3IoO24+dDt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1
cm4gcn1mdW5jdGlvbiB5dChlLHQsbil7dmFyIGk9dC5kaXIsbz1uJiYicGFyZW50Tm9kZSI9PT1p
LHM9VCsrO3JldHVybiB0LmZpcnN0P2Z1bmN0aW9uKHQsbixyKXt3aGlsZSh0PXRbaV0paWYoMT09
PXQubm9kZVR5cGV8fG8pcmV0dXJuIGUodCxuLHIpfTpmdW5jdGlvbih0LG4sYSl7dmFyIHUsbCxj
LHA9dysiICIrcztpZihhKXt3aGlsZSh0PXRbaV0paWYoKDE9PT10Lm5vZGVUeXBlfHxvKSYmZSh0
LG4sYSkpcmV0dXJuITB9ZWxzZSB3aGlsZSh0PXRbaV0paWYoMT09PXQubm9kZVR5cGV8fG8paWYo
Yz10W3ZdfHwodFt2XT17fSksKGw9Y1tpXSkmJmxbMF09PT1wKXtpZigodT1sWzFdKT09PSEwfHx1
PT09cilyZXR1cm4gdT09PSEwfWVsc2UgaWYobD1jW2ldPVtwXSxsWzFdPWUodCxuLGEpfHxyLGxb
MV09PT0hMClyZXR1cm4hMH19ZnVuY3Rpb24gdnQoZSl7cmV0dXJuIGUubGVuZ3RoPjE/ZnVuY3Rp
b24odCxuLHIpe3ZhciBpPWUubGVuZ3RoO3doaWxlKGktLSlpZighZVtpXSh0LG4scikpcmV0dXJu
ITE7cmV0dXJuITB9OmVbMF19ZnVuY3Rpb24geHQoZSx0LG4scixpKXt2YXIgbyxzPVtdLGE9MCx1
PWUubGVuZ3RoLGw9bnVsbCE9dDtmb3IoO3U+YTthKyspKG89ZVthXSkmJighbnx8bihvLHIsaSkp
JiYocy5wdXNoKG8pLGwmJnQucHVzaChhKSk7cmV0dXJuIHN9ZnVuY3Rpb24gYnQoZSx0LG4scixp
LG8pe3JldHVybiByJiYhclt2XSYmKHI9YnQocikpLGkmJiFpW3ZdJiYoaT1idChpLG8pKSxhdChm
dW5jdGlvbihvLHMsYSx1KXt2YXIgbCxjLHAsZj1bXSxoPVtdLGQ9cy5sZW5ndGgsZz1vfHxDdCh0
fHwiKiIsYS5ub2RlVHlwZT9bYV06YSxbXSksbT0hZXx8IW8mJnQ/Zzp4dChnLGYsZSxhLHUpLHk9
bj9pfHwobz9lOmR8fHIpP1tdOnM6bTtpZihuJiZuKG0seSxhLHUpLHIpe2w9eHQoeSxoKSxyKGws
W10sYSx1KSxjPWwubGVuZ3RoO3doaWxlKGMtLSkocD1sW2NdKSYmKHlbaFtjXV09IShtW2hbY11d
PXApKX1pZihvKXtpZihpfHxlKXtpZihpKXtsPVtdLGM9eS5sZW5ndGg7d2hpbGUoYy0tKShwPXlb
Y10pJiZsLnB1c2gobVtjXT1wKTtpKG51bGwseT1bXSxsLHUpfWM9eS5sZW5ndGg7d2hpbGUoYy0t
KShwPXlbY10pJiYobD1pP1AuY2FsbChvLHApOmZbY10pPi0xJiYob1tsXT0hKHNbbF09cCkpfX1l
bHNlIHk9eHQoeT09PXM/eS5zcGxpY2UoZCx5Lmxlbmd0aCk6eSksaT9pKG51bGwscyx5LHUpOk8u
YXBwbHkocyx5KX0pfWZ1bmN0aW9uIHd0KGUpe3ZhciB0LG4scixvPWUubGVuZ3RoLHM9aS5yZWxh
dGl2ZVtlWzBdLnR5cGVdLGE9c3x8aS5yZWxhdGl2ZVsiICJdLGw9cz8xOjAsYz15dChmdW5jdGlv
bihlKXtyZXR1cm4gZT09PXR9LGEsITApLHA9eXQoZnVuY3Rpb24oZSl7cmV0dXJuIFAuY2FsbCh0
LGUpPi0xfSxhLCEwKSxmPVtmdW5jdGlvbihlLG4scil7cmV0dXJuIXMmJihyfHxuIT09dSl8fCgo
dD1uKS5ub2RlVHlwZT9jKGUsbixyKTpwKGUsbixyKSl9XTtmb3IoO28+bDtsKyspaWYobj1pLnJl
bGF0aXZlW2VbbF0udHlwZV0pZj1beXQodnQoZiksbildO2Vsc2V7aWYobj1pLmZpbHRlcltlW2xd
LnR5cGVdLmFwcGx5KG51bGwsZVtsXS5tYXRjaGVzKSxuW3ZdKXtmb3Iocj0rK2w7bz5yO3IrKylp
ZihpLnJlbGF0aXZlW2Vbcl0udHlwZV0pYnJlYWs7cmV0dXJuIGJ0KGw+MSYmdnQoZiksbD4xJiZt
dChlLnNsaWNlKDAsbC0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWVbbC0yXS50eXBlPyIqIjoiIn0p
KS5yZXBsYWNlKHosIiQxIiksbixyPmwmJnd0KGUuc2xpY2UobCxyKSksbz5yJiZ3dChlPWUuc2xp
Y2UocikpLG8+ciYmbXQoZSkpfWYucHVzaChuKX1yZXR1cm4gdnQoZil9ZnVuY3Rpb24gVHQoZSx0
KXt2YXIgbj0wLG89dC5sZW5ndGg+MCxzPWUubGVuZ3RoPjAsYT1mdW5jdGlvbihhLGwsYyxmLGgp
e3ZhciBkLGcsbSx5PVtdLHY9MCx4PSIwIixiPWEmJltdLFQ9bnVsbCE9aCxDPXUsaz1hfHxzJiZp
LmZpbmQuVEFHKCIqIixoJiZsLnBhcmVudE5vZGV8fGwpLE49dys9bnVsbD09Qz8xOk1hdGgucmFu
ZG9tKCl8fC4xO2ZvcihUJiYodT1sIT09cCYmbCxyPW4pO251bGwhPShkPWtbeF0pO3grKyl7aWYo
cyYmZCl7Zz0wO3doaWxlKG09ZVtnKytdKWlmKG0oZCxsLGMpKXtmLnB1c2goZCk7YnJlYWt9VCYm
KHc9TixyPSsrbil9byYmKChkPSFtJiZkKSYmdi0tLGEmJmIucHVzaChkKSl9aWYodis9eCxvJiZ4
IT09dil7Zz0wO3doaWxlKG09dFtnKytdKW0oYix5LGwsYyk7aWYoYSl7aWYodj4wKXdoaWxlKHgt
LSliW3hdfHx5W3hdfHwoeVt4XT1xLmNhbGwoZikpO3k9eHQoeSl9Ty5hcHBseShmLHkpLFQmJiFh
JiZ5Lmxlbmd0aD4wJiZ2K3QubGVuZ3RoPjEmJm90LnVuaXF1ZVNvcnQoZil9cmV0dXJuIFQmJih3
PU4sdT1DKSxifTtyZXR1cm4gbz9hdChhKTphfWE9b3QuY29tcGlsZT1mdW5jdGlvbihlLHQpe3Zh
ciBuLHI9W10saT1bXSxvPU5bZSsiICJdO2lmKCFvKXt0fHwodD1ndChlKSksbj10Lmxlbmd0aDt3
aGlsZShuLS0pbz13dCh0W25dKSxvW3ZdP3IucHVzaChvKTppLnB1c2gobyk7bz1OKGUsVHQoaSxy
KSl9cmV0dXJuIG99O2Z1bmN0aW9uIEN0KGUsdCxuKXt2YXIgcj0wLGk9dC5sZW5ndGg7Zm9yKDtp
PnI7cisrKW90KGUsdFtyXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBrdChlLHQscixvKXt2YXIgcyx1
LGwsYyxwLGY9Z3QoZSk7aWYoIW8mJjE9PT1mLmxlbmd0aCl7aWYodT1mWzBdPWZbMF0uc2xpY2Uo
MCksdS5sZW5ndGg+MiYmIklEIj09PShsPXVbMF0pLnR5cGUmJm4uZ2V0QnlJZCYmOT09PXQubm9k
ZVR5cGUmJmgmJmkucmVsYXRpdmVbdVsxXS50eXBlXSl7aWYodD0oaS5maW5kLklEKGwubWF0Y2hl
c1swXS5yZXBsYWNlKG50LHJ0KSx0KXx8W10pWzBdLCF0KXJldHVybiByO2U9ZS5zbGljZSh1LnNo
aWZ0KCkudmFsdWUubGVuZ3RoKX1zPUoubmVlZHNDb250ZXh0LnRlc3QoZSk/MDp1Lmxlbmd0aDt3
aGlsZShzLS0pe2lmKGw9dVtzXSxpLnJlbGF0aXZlW2M9bC50eXBlXSlicmVhaztpZigocD1pLmZp
bmRbY10pJiYobz1wKGwubWF0Y2hlc1swXS5yZXBsYWNlKG50LHJ0KSxVLnRlc3QodVswXS50eXBl
KSYmdC5wYXJlbnROb2RlfHx0KSkpe2lmKHUuc3BsaWNlKHMsMSksZT1vLmxlbmd0aCYmbXQodSks
IWUpcmV0dXJuIE8uYXBwbHkocixvKSxyO2JyZWFrfX19cmV0dXJuIGEoZSxmKShvLHQsIWgscixV
LnRlc3QoZSkpLHJ9bi5zb3J0U3RhYmxlPXYuc3BsaXQoIiIpLnNvcnQoUykuam9pbigiIik9PT12
LG4uZGV0ZWN0RHVwbGljYXRlcz1FLGMoKSxuLnNvcnREZXRhY2hlZD11dChmdW5jdGlvbihlKXty
ZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHAuY3JlYXRlRWxlbWVudCgiZGl2Iikp
fSksdXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+Iiwi
IyI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8bHQoInR5cGV8aHJlZnxo
ZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj91bmRlZmluZWQ6ZS5nZXRBdHRy
aWJ1dGUodCwidHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/MToyKX0pLG4uYXR0cmlidXRlcyYmdXQo
ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8aW5wdXQvPiIsZS5maXJzdENoaWxkLnNl
dEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZh
bHVlIil9KXx8bHQoInZhbHVlIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIG58fCJpbnB1dCIhPT1l
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/dW5kZWZpbmVkOmUuZGVmYXVsdFZhbHVlfSksdXQoZnVu
Y3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGx0KFIs
ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiBuP3VuZGVmaW5lZDoocj1lLmdldEF0dHJpYnV0
ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOmVbdF09PT0hMD90LnRvTG93ZXJDYXNlKCk6
bnVsbH0pLHguZmluZD1vdCx4LmV4cHI9b3Quc2VsZWN0b3JzLHguZXhwclsiOiJdPXguZXhwci5w
c2V1ZG9zLHgudW5pcXVlPW90LnVuaXF1ZVNvcnQseC50ZXh0PW90LmdldFRleHQseC5pc1hNTERv
Yz1vdC5pc1hNTCx4LmNvbnRhaW5zPW90LmNvbnRhaW5zfShlKTt2YXIgRD17fTtmdW5jdGlvbiBB
KGUpe3ZhciB0PURbZV09e307cmV0dXJuIHguZWFjaChlLm1hdGNoKHcpfHxbXSxmdW5jdGlvbihl
LG4pe3Rbbl09ITB9KSx0fXguQ2FsbGJhY2tzPWZ1bmN0aW9uKGUpe2U9InN0cmluZyI9PXR5cGVv
ZiBlP0RbZV18fEEoZSk6eC5leHRlbmQoe30sZSk7dmFyIHQsbixyLGksbyxzLGE9W10sdT0hZS5v
bmNlJiZbXSxsPWZ1bmN0aW9uKHApe2Zvcih0PWUubWVtb3J5JiZwLG49ITAscz1pfHwwLGk9MCxv
PWEubGVuZ3RoLHI9ITA7YSYmbz5zO3MrKylpZihhW3NdLmFwcGx5KHBbMF0scFsxXSk9PT0hMSYm
ZS5zdG9wT25GYWxzZSl7dD0hMTticmVha31yPSExLGEmJih1P3UubGVuZ3RoJiZsKHUuc2hpZnQo
KSk6dD9hPVtdOmMuZGlzYWJsZSgpKX0sYz17YWRkOmZ1bmN0aW9uKCl7aWYoYSl7dmFyIG49YS5s
ZW5ndGg7KGZ1bmN0aW9uIHModCl7eC5lYWNoKHQsZnVuY3Rpb24odCxuKXt2YXIgcj14LnR5cGUo
bik7ImZ1bmN0aW9uIj09PXI/ZS51bmlxdWUmJmMuaGFzKG4pfHxhLnB1c2gobik6biYmbi5sZW5n
dGgmJiJzdHJpbmciIT09ciYmcyhuKX0pfSkoYXJndW1lbnRzKSxyP289YS5sZW5ndGg6dCYmKGk9
bixsKHQpKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIGEmJnguZWFjaChh
cmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgbjt3aGlsZSgobj14LmluQXJyYXkodCxhLG4pKT4t
MSlhLnNwbGljZShuLDEpLHImJihvPj1uJiZvLS0scz49biYmcy0tKX0pLHRoaXN9LGhhczpmdW5j
dGlvbihlKXtyZXR1cm4gZT94LmluQXJyYXkoZSxhKT4tMTohKCFhfHwhYS5sZW5ndGgpfSxlbXB0
eTpmdW5jdGlvbigpe3JldHVybiBhPVtdLG89MCx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0
dXJuIGE9dT10PXVuZGVmaW5lZCx0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFhfSxs
b2NrOmZ1bmN0aW9uKCl7cmV0dXJuIHU9dW5kZWZpbmVkLHR8fGMuZGlzYWJsZSgpLHRoaXN9LGxv
Y2tlZDpmdW5jdGlvbigpe3JldHVybiF1fSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiFh
fHxuJiYhdXx8KHQ9dHx8W10sdD1bZSx0LnNsaWNlP3Quc2xpY2UoKTp0XSxyP3UucHVzaCh0KTps
KHQpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGMuZmlyZVdpdGgodGhpcyxhcmd1bWVu
dHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFufX07cmV0dXJuIGN9LHguZXh0ZW5k
KHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgdD1bWyJyZXNvbHZlIiwiZG9uZSIseC5DYWxsYmFj
a3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIix4LkNhbGxiYWNr
cygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIix4LkNhbGxi
YWNrcygibWVtb3J5IildXSxuPSJwZW5kaW5nIixyPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBu
fSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVu
dHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHguRGVmZXJy
ZWQoZnVuY3Rpb24obil7eC5lYWNoKHQsZnVuY3Rpb24odCxvKXt2YXIgcz1vWzBdLGE9eC5pc0Z1
bmN0aW9uKGVbdF0pJiZlW3RdO2lbb1sxXV0oZnVuY3Rpb24oKXt2YXIgZT1hJiZhLmFwcGx5KHRo
aXMsYXJndW1lbnRzKTtlJiZ4LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5kb25l
KG4ucmVzb2x2ZSkuZmFpbChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpOm5bcysiV2l0aCJd
KHRoaXM9PT1yP24ucHJvbWlzZSgpOnRoaXMsYT9bZV06YXJndW1lbnRzKX0pfSksZT1udWxsfSku
cHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP3guZXh0ZW5kKGUs
cik6cn19LGk9e307cmV0dXJuIHIucGlwZT1yLnRoZW4seC5lYWNoKHQsZnVuY3Rpb24oZSxvKXt2
YXIgcz1vWzJdLGE9b1szXTtyW29bMV1dPXMuYWRkLGEmJnMuYWRkKGZ1bmN0aW9uKCl7bj1hfSx0
WzFeZV1bMl0uZGlzYWJsZSx0WzJdWzJdLmxvY2spLGlbb1swXV09ZnVuY3Rpb24oKXtyZXR1cm4g
aVtvWzBdKyJXaXRoIl0odGhpcz09PWk/cjp0aGlzLGFyZ3VtZW50cyksdGhpc30saVtvWzBdKyJX
aXRoIl09cy5maXJlV2l0aH0pLHIucHJvbWlzZShpKSxlJiZlLmNhbGwoaSxpKSxpfSx3aGVuOmZ1
bmN0aW9uKGUpe3ZhciB0PTAsbj1kLmNhbGwoYXJndW1lbnRzKSxyPW4ubGVuZ3RoLGk9MSE9PXJ8
fGUmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP3I6MCxvPTE9PT1pP2U6eC5EZWZlcnJlZCgpLHM9
ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt0W2VdPXRoaXMsbltlXT1hcmd1bWVu
dHMubGVuZ3RoPjE/ZC5jYWxsKGFyZ3VtZW50cyk6cixuPT09YT9vLm5vdGlmeVdpdGgodCxuKTot
LWl8fG8ucmVzb2x2ZVdpdGgodCxuKX19LGEsdSxsO2lmKHI+MSlmb3IoYT1BcnJheShyKSx1PUFy
cmF5KHIpLGw9QXJyYXkocik7cj50O3QrKyluW3RdJiZ4LmlzRnVuY3Rpb24oblt0XS5wcm9taXNl
KT9uW3RdLnByb21pc2UoKS5kb25lKHModCxsLG4pKS5mYWlsKG8ucmVqZWN0KS5wcm9ncmVzcyhz
KHQsdSxhKSk6LS1pO3JldHVybiBpfHxvLnJlc29sdmVXaXRoKGwsbiksby5wcm9taXNlKCl9fSks
eC5zdXBwb3J0PWZ1bmN0aW9uKHQpe3ZhciBuPW8uY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxyPW8u
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9by5jcmVhdGVFbGVtZW50KCJkaXYiKSxzPW8uY3Jl
YXRlRWxlbWVudCgic2VsZWN0IiksYT1zLmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgib3B0
aW9uIikpO3JldHVybiBuLnR5cGU/KG4udHlwZT0iY2hlY2tib3giLHQuY2hlY2tPbj0iIiE9PW4u
dmFsdWUsdC5vcHRTZWxlY3RlZD1hLnNlbGVjdGVkLHQucmVsaWFibGVNYXJnaW5SaWdodD0hMCx0
LmJveFNpemluZ1JlbGlhYmxlPSEwLHQucGl4ZWxQb3NpdGlvbj0hMSxuLmNoZWNrZWQ9ITAsdC5u
b0Nsb25lQ2hlY2tlZD1uLmNsb25lTm9kZSghMCkuY2hlY2tlZCxzLmRpc2FibGVkPSEwLHQub3B0
RGlzYWJsZWQ9IWEuZGlzYWJsZWQsbj1vLmNyZWF0ZUVsZW1lbnQoImlucHV0Iiksbi52YWx1ZT0i
dCIsbi50eXBlPSJyYWRpbyIsdC5yYWRpb1ZhbHVlPSJ0Ij09PW4udmFsdWUsbi5zZXRBdHRyaWJ1
dGUoImNoZWNrZWQiLCJ0Iiksbi5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0Iiksci5hcHBlbmRDaGls
ZChuKSx0LmNoZWNrQ2xvbmU9ci5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxk
LmNoZWNrZWQsdC5mb2N1c2luQnViYmxlcz0ib25mb2N1c2luImluIGUsaS5zdHlsZS5iYWNrZ3Jv
dW5kQ2xpcD0iY29udGVudC1ib3giLGkuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xp
cD0iIix0LmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09aS5zdHlsZS5iYWNrZ3JvdW5k
Q2xpcCx4KGZ1bmN0aW9uKCl7dmFyIG4scixzPSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7
ZGlzcGxheTpibG9jazstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6
aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3giLGE9by5nZXRFbGVtZW50c0J5
VGFnTmFtZSgiYm9keSIpWzBdO2EmJihuPW8uY3JlYXRlRWxlbWVudCgiZGl2Iiksbi5zdHlsZS5j
c3NUZXh0PSJib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDow
O2xlZnQ6LTk5OTlweDttYXJnaW4tdG9wOjFweCIsYS5hcHBlbmRDaGlsZChuKS5hcHBlbmRDaGls
ZChpKSxpLmlubmVySFRNTD0iIixpLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpi
b3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJv
eDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6NHB4O21hcmdpbi10
b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElIix4LnN3YXAoYSxudWxsIT1hLnN0eWxlLnpv
b20/e3pvb206MX06e30sZnVuY3Rpb24oKXt0LmJveFNpemluZz00PT09aS5vZmZzZXRXaWR0aH0p
LGUuZ2V0Q29tcHV0ZWRTdHlsZSYmKHQucGl4ZWxQb3NpdGlvbj0iMSUiIT09KGUuZ2V0Q29tcHV0
ZWRTdHlsZShpLG51bGwpfHx7fSkudG9wLHQuYm94U2l6aW5nUmVsaWFibGU9IjRweCI9PT0oZS5n
ZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHt3aWR0aDoiNHB4In0pLndpZHRoLHI9aS5hcHBlbmRD
aGlsZChvLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxyLnN0eWxlLmNzc1RleHQ9aS5zdHlsZS5jc3NU
ZXh0PXMsci5zdHlsZS5tYXJnaW5SaWdodD1yLnN0eWxlLndpZHRoPSIwIixpLnN0eWxlLndpZHRo
PSIxcHgiLHQucmVsaWFibGVNYXJnaW5SaWdodD0hcGFyc2VGbG9hdCgoZS5nZXRDb21wdXRlZFN0
eWxlKHIsbnVsbCl8fHt9KS5tYXJnaW5SaWdodCkpLGEucmVtb3ZlQ2hpbGQobikpfSksdCk6dH0o
e30pO3ZhciBMLHEsSD0vKD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sTz0vKFtBLVpdKS9n
O2Z1bmN0aW9uIEYoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5jYWNoZT17fSwwLHtnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm57fX19KSx0aGlzLmV4cGFuZG89eC5leHBhbmRvK01hdGgucmFuZG9t
KCl9Ri51aWQ9MSxGLmFjY2VwdHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGU/MT09PWUu
bm9kZVR5cGV8fDk9PT1lLm5vZGVUeXBlOiEwfSxGLnByb3RvdHlwZT17a2V5OmZ1bmN0aW9uKGUp
e2lmKCFGLmFjY2VwdHMoZSkpcmV0dXJuIDA7dmFyIHQ9e30sbj1lW3RoaXMuZXhwYW5kb107aWYo
IW4pe249Ri51aWQrKzt0cnl7dFt0aGlzLmV4cGFuZG9dPXt2YWx1ZTpufSxPYmplY3QuZGVmaW5l
UHJvcGVydGllcyhlLHQpfWNhdGNoKHIpe3RbdGhpcy5leHBhbmRvXT1uLHguZXh0ZW5kKGUsdCl9
fXJldHVybiB0aGlzLmNhY2hlW25dfHwodGhpcy5jYWNoZVtuXT17fSksbn0sc2V0OmZ1bmN0aW9u
KGUsdCxuKXt2YXIgcixpPXRoaXMua2V5KGUpLG89dGhpcy5jYWNoZVtpXTtpZigic3RyaW5nIj09
dHlwZW9mIHQpb1t0XT1uO2Vsc2UgaWYoeC5pc0VtcHR5T2JqZWN0KG8pKXguZXh0ZW5kKHRoaXMu
Y2FjaGVbaV0sdCk7ZWxzZSBmb3IociBpbiB0KW9bcl09dFtyXTtyZXR1cm4gb30sZ2V0OmZ1bmN0
aW9uKGUsdCl7dmFyIG49dGhpcy5jYWNoZVt0aGlzLmtleShlKV07cmV0dXJuIHQ9PT11bmRlZmlu
ZWQ/bjpuW3RdfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB0PT09dW5kZWZp
bmVkfHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJm49PT11bmRlZmluZWQ/KHI9dGhpcy5nZXQoZSx0
KSxyIT09dW5kZWZpbmVkP3I6dGhpcy5nZXQoZSx4LmNhbWVsQ2FzZSh0KSkpOih0aGlzLnNldChl
LHQsbiksbiE9PXVuZGVmaW5lZD9uOnQpfSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGks
bz10aGlzLmtleShlKSxzPXRoaXMuY2FjaGVbb107aWYodD09PXVuZGVmaW5lZCl0aGlzLmNhY2hl
W29dPXt9O2Vsc2V7eC5pc0FycmF5KHQpP3I9dC5jb25jYXQodC5tYXAoeC5jYW1lbENhc2UpKToo
aT14LmNhbWVsQ2FzZSh0KSx0IGluIHM/cj1bdCxpXToocj1pLHI9ciBpbiBzP1tyXTpyLm1hdGNo
KHcpfHxbXSkpLG49ci5sZW5ndGg7d2hpbGUobi0tKWRlbGV0ZSBzW3Jbbl1dfX0saGFzRGF0YTpm
dW5jdGlvbihlKXtyZXR1cm4heC5pc0VtcHR5T2JqZWN0KHRoaXMuY2FjaGVbZVt0aGlzLmV4cGFu
ZG9dXXx8e30pfSxkaXNjYXJkOmZ1bmN0aW9uKGUpe2VbdGhpcy5leHBhbmRvXSYmZGVsZXRlIHRo
aXMuY2FjaGVbZVt0aGlzLmV4cGFuZG9dXX19LEw9bmV3IEYscT1uZXcgRix4LmV4dGVuZCh7YWNj
ZXB0RGF0YTpGLmFjY2VwdHMsaGFzRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gTC5oYXNEYXRhKGUp
fHxxLmhhc0RhdGEoZSl9LGRhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBMLmFjY2VzcyhlLHQs
bil9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtMLnJlbW92ZShlLHQpfSxfZGF0YTpmdW5jdGlv
bihlLHQsbil7cmV0dXJuIHEuYWNjZXNzKGUsdCxuKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oZSx0
KXtxLnJlbW92ZShlLHQpfX0pLHguZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIG4s
cixpPXRoaXNbMF0sbz0wLHM9bnVsbDtpZihlPT09dW5kZWZpbmVkKXtpZih0aGlzLmxlbmd0aCYm
KHM9TC5nZXQoaSksMT09PWkubm9kZVR5cGUmJiFxLmdldChpLCJoYXNEYXRhQXR0cnMiKSkpe2Zv
cihuPWkuYXR0cmlidXRlcztuLmxlbmd0aD5vO28rKylyPW5bb10ubmFtZSwwPT09ci5pbmRleE9m
KCJkYXRhLSIpJiYocj14LmNhbWVsQ2FzZShyLnNsaWNlKDUpKSxQKGkscixzW3JdKSk7cS5zZXQo
aSwiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIHN9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP3Ro
aXMuZWFjaChmdW5jdGlvbigpe0wuc2V0KHRoaXMsZSl9KTp4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9u
KHQpe3ZhciBuLHI9eC5jYW1lbENhc2UoZSk7aWYoaSYmdD09PXVuZGVmaW5lZCl7aWYobj1MLmdl
dChpLGUpLG4hPT11bmRlZmluZWQpcmV0dXJuIG47aWYobj1MLmdldChpLHIpLG4hPT11bmRlZmlu
ZWQpcmV0dXJuIG47aWYobj1QKGkscix1bmRlZmluZWQpLG4hPT11bmRlZmluZWQpcmV0dXJuIG59
ZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1MLmdldCh0aGlzLHIpO0wuc2V0KHRoaXMs
cix0KSwtMSE9PWUuaW5kZXhPZigiLSIpJiZuIT09dW5kZWZpbmVkJiZMLnNldCh0aGlzLGUsdCl9
KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlv
bihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5yZW1vdmUodGhpcyxlKX0pfX0pO2Z1
bmN0aW9uIFAoZSx0LG4pe3ZhciByO2lmKG49PT11bmRlZmluZWQmJjE9PT1lLm5vZGVUeXBlKWlm
KHI9ImRhdGEtIit0LnJlcGxhY2UoTywiLSQxIikudG9Mb3dlckNhc2UoKSxuPWUuZ2V0QXR0cmli
dXRlKHIpLCJzdHJpbmciPT10eXBlb2Ygbil7dHJ5e249InRydWUiPT09bj8hMDoiZmFsc2UiPT09
bj8hMToibnVsbCI9PT1uP251bGw6K24rIiI9PT1uPytuOkgudGVzdChuKT9KU09OLnBhcnNlKG4p
Om59Y2F0Y2goaSl7fUwuc2V0KGUsdCxuKX1lbHNlIG49dW5kZWZpbmVkO3JldHVybiBufXguZXh0
ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIGU/KHQ9KHR8fCJmeCIpKyJx
dWV1ZSIscj1xLmdldChlLHQpLG4mJighcnx8eC5pc0FycmF5KG4pP3I9cS5hY2Nlc3MoZSx0LHgu
bWFrZUFycmF5KG4pKTpyLnB1c2gobikpLHJ8fFtdKTp1bmRlZmluZWR9LGRlcXVldWU6ZnVuY3Rp
b24oZSx0KXt0PXR8fCJmeCI7dmFyIG49eC5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0
KCksbz14Ll9xdWV1ZUhvb2tzKGUsdCkscz1mdW5jdGlvbigpe3guZGVxdWV1ZShlLHQpCisrfTsi
aW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlm
dCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUscyxvKSksIXImJm8mJm8uZW1w
dHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihlLHQpe3ZhciBuPXQrInF1ZXVlSG9va3Mi
O3JldHVybiBxLmdldChlLG4pfHxxLmFjY2VzcyhlLG4se2VtcHR5OnguQ2FsbGJhY2tzKCJvbmNl
IG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe3EucmVtb3ZlKGUsW3QrInF1ZXVlIixuXSl9KX0pfX0p
LHguZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPTI7cmV0dXJuInN0cmluZyIh
PXR5cGVvZiBlJiYodD1lLGU9ImZ4IixuLS0pLG4+YXJndW1lbnRzLmxlbmd0aD94LnF1ZXVlKHRo
aXNbMF0sZSk6dD09PXVuZGVmaW5lZD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPXgu
cXVldWUodGhpcyxlLHQpO3guX3F1ZXVlSG9va3ModGhpcyxlKSwiZngiPT09ZSYmImlucHJvZ3Jl
c3MiIT09blswXSYmeC5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihlKXtyZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVsYXk6ZnVuY3Rp
b24oZSx0KXtyZXR1cm4gZT14LmZ4P3guZnguc3BlZWRzW2VdfHxlOmUsdD10fHwiZngiLHRoaXMu
cXVldWUodCxmdW5jdGlvbih0LG4pe3ZhciByPXNldFRpbWVvdXQodCxlKTtuLnN0b3A9ZnVuY3Rp
b24oKXtjbGVhclRpbWVvdXQocil9fSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRo
aXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTEsaT14
LkRlZmVycmVkKCksbz10aGlzLHM9dGhpcy5sZW5ndGgsYT1mdW5jdGlvbigpey0tcnx8aS5yZXNv
bHZlV2l0aChvLFtvXSl9OyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPXVuZGVmaW5lZCksZT1l
fHwiZngiO3doaWxlKHMtLSluPXEuZ2V0KG9bc10sZSsicXVldWVIb29rcyIpLG4mJm4uZW1wdHkm
JihyKyssbi5lbXB0eS5hZGQoYSkpO3JldHVybiBhKCksaS5wcm9taXNlKHQpfX0pO3ZhciBSLE0s
Vz0vW1x0XHJcblxmXS9nLCQ9L1xyL2csQj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0
b24pJC9pO3guZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguYWNjZXNzKHRo
aXMseC5hdHRyLGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LnJlbW92ZUF0dHIodGhpcyxlKX0pfSxwcm9w
OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguYWNjZXNzKHRoaXMseC5wcm9wLGUsdCxhcmd1bWVudHMu
bGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rp
b24oKXtkZWxldGUgdGhpc1t4LnByb3BGaXhbZV18fGVdfSl9LGFkZENsYXNzOmZ1bmN0aW9uKGUp
e3ZhciB0LG4scixpLG8scz0wLGE9dGhpcy5sZW5ndGgsdT0ic3RyaW5nIj09dHlwZW9mIGUmJmU7
aWYoeC5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS5h
ZGRDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZih1KWZvcih0PShlfHwi
IikubWF0Y2godyl8fFtdO2E+cztzKyspaWYobj10aGlzW3NdLHI9MT09PW4ubm9kZVR5cGUmJihu
LmNsYXNzTmFtZT8oIiAiK24uY2xhc3NOYW1lKyIgIikucmVwbGFjZShXLCIgIik6IiAiKSl7bz0w
O3doaWxlKGk9dFtvKytdKTA+ci5pbmRleE9mKCIgIitpKyIgIikmJihyKz1pKyIgIik7bi5jbGFz
c05hbWU9eC50cmltKHIpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIg
dCxuLHIsaSxvLHM9MCxhPXRoaXMubGVuZ3RoLHU9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJp
bmciPT10eXBlb2YgZSYmZTtpZih4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbih0KXt4KHRoaXMpLnJlbW92ZUNsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUp
KX0pO2lmKHUpZm9yKHQ9KGV8fCIiKS5tYXRjaCh3KXx8W107YT5zO3MrKylpZihuPXRoaXNbc10s
cj0xPT09bi5ub2RlVHlwZSYmKG4uY2xhc3NOYW1lPygiICIrbi5jbGFzc05hbWUrIiAiKS5yZXBs
YWNlKFcsIiAiKToiIikpe289MDt3aGlsZShpPXRbbysrXSl3aGlsZShyLmluZGV4T2YoIiAiK2kr
IiAiKT49MClyPXIucmVwbGFjZSgiICIraSsiICIsIiAiKTtuLmNsYXNzTmFtZT1lP3gudHJpbShy
KToiIn1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2Yg
ZTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0JiYic3RyaW5nIj09PW4/dD90aGlzLmFkZENsYXNz
KGUpOnRoaXMucmVtb3ZlQ2xhc3MoZSk6eC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlv
bihuKXt4KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLG4sdGhpcy5jbGFzc05hbWUsdCks
dCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtpZigic3RyaW5nIj09PW4pe3ZhciB0LGk9MCxvPXgo
dGhpcykscz1lLm1hdGNoKHcpfHxbXTt3aGlsZSh0PXNbaSsrXSlvLmhhc0NsYXNzKHQpP28ucmVt
b3ZlQ2xhc3ModCk6by5hZGRDbGFzcyh0KX1lbHNlKG49PT1yfHwiYm9vbGVhbiI9PT1uKSYmKHRo
aXMuY2xhc3NOYW1lJiZxLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSks
dGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGU9PT0hMT8iIjpxLmdldCh0aGlzLCJfX2Ns
YXNzTmFtZV9fIil8fCIiKX0pfSxoYXNDbGFzczpmdW5jdGlvbihlKXt2YXIgdD0iICIrZSsiICIs
bj0wLHI9dGhpcy5sZW5ndGg7Zm9yKDtyPm47bisrKWlmKDE9PT10aGlzW25dLm5vZGVUeXBlJiYo
IiAiK3RoaXNbbl0uY2xhc3NOYW1lKyIgIikucmVwbGFjZShXLCIgIikuaW5kZXhPZih0KT49MCly
ZXR1cm4hMDtyZXR1cm4hMX0sdmFsOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPXRoaXNbMF07e2lm
KGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI9eC5pc0Z1bmN0aW9uKGUpLHRoaXMuZWFjaChmdW5j
dGlvbihuKXt2YXIgaTsxPT09dGhpcy5ub2RlVHlwZSYmKGk9cj9lLmNhbGwodGhpcyxuLHgodGhp
cykudmFsKCkpOmUsbnVsbD09aT9pPSIiOiJudW1iZXIiPT10eXBlb2YgaT9pKz0iIjp4LmlzQXJy
YXkoaSkmJihpPXgubWFwKGksZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6ZSsiIn0pKSx0
PXgudmFsSG9va3NbdGhpcy50eXBlXXx8eC52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJD
YXNlKCldLHQmJiJzZXQiaW4gdCYmdC5zZXQodGhpcyxpLCJ2YWx1ZSIpIT09dW5kZWZpbmVkfHwo
dGhpcy52YWx1ZT1pKSl9KTtpZihpKXJldHVybiB0PXgudmFsSG9va3NbaS50eXBlXXx8eC52YWxI
b29rc1tpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLHQmJiJnZXQiaW4gdCYmKG49dC5nZXQoaSwi
dmFsdWUiKSkhPT11bmRlZmluZWQ/bjoobj1pLnZhbHVlLCJzdHJpbmciPT10eXBlb2Ygbj9uLnJl
cGxhY2UoJCwiIik6bnVsbD09bj8iIjpuKX19fSkseC5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246
e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIXR8fHQuc3Bl
Y2lmaWVkP2UudmFsdWU6ZS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixy
PWUub3B0aW9ucyxpPWUuc2VsZWN0ZWRJbmRleCxvPSJzZWxlY3Qtb25lIj09PWUudHlwZXx8MD5p
LHM9bz9udWxsOltdLGE9bz9pKzE6ci5sZW5ndGgsdT0wPmk/YTpvP2k6MDtmb3IoO2E+dTt1Kysp
aWYobj1yW3VdLCEoIW4uc2VsZWN0ZWQmJnUhPT1pfHwoeC5zdXBwb3J0Lm9wdERpc2FibGVkP24u
ZGlzYWJsZWQ6bnVsbCE9PW4uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8bi5wYXJlbnROb2Rl
LmRpc2FibGVkJiZ4Lm5vZGVOYW1lKG4ucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKHQ9eChu
KS52YWwoKSxvKXJldHVybiB0O3MucHVzaCh0KX1yZXR1cm4gc30sc2V0OmZ1bmN0aW9uKGUsdCl7
dmFyIG4scixpPWUub3B0aW9ucyxvPXgubWFrZUFycmF5KHQpLHM9aS5sZW5ndGg7d2hpbGUocy0t
KXI9aVtzXSwoci5zZWxlY3RlZD14LmluQXJyYXkoeChyKS52YWwoKSxvKT49MCkmJihuPSEwKTty
ZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fSxhdHRyOmZ1bmN0aW9uKGUsdCxuKXt2
YXIgaSxvLHM9ZS5ub2RlVHlwZTtpZihlJiYzIT09cyYmOCE9PXMmJjIhPT1zKXJldHVybiB0eXBl
b2YgZS5nZXRBdHRyaWJ1dGU9PT1yP3gucHJvcChlLHQsbik6KDE9PT1zJiZ4LmlzWE1MRG9jKGUp
fHwodD10LnRvTG93ZXJDYXNlKCksaT14LmF0dHJIb29rc1t0XXx8KHguZXhwci5tYXRjaC5ib29s
LnRlc3QodCk/TTpSKSksbj09PXVuZGVmaW5lZD9pJiYiZ2V0ImluIGkmJm51bGwhPT0obz1pLmdl
dChlLHQpKT9vOihvPXguZmluZC5hdHRyKGUsdCksbnVsbD09bz91bmRlZmluZWQ6byk6bnVsbCE9
PW4/aSYmInNldCJpbiBpJiYobz1pLnNldChlLG4sdCkpIT09dW5kZWZpbmVkP286KGUuc2V0QXR0
cmlidXRlKHQsbisiIiksbik6KHgucmVtb3ZlQXR0cihlLHQpLHVuZGVmaW5lZCkpfSxyZW1vdmVB
dHRyOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPTAsbz10JiZ0Lm1hdGNoKHcpO2lmKG8mJjE9PT1l
Lm5vZGVUeXBlKXdoaWxlKG49b1tpKytdKXI9eC5wcm9wRml4W25dfHxuLHguZXhwci5tYXRjaC5i
b29sLnRlc3QobikmJihlW3JdPSExKSxlLnJlbW92ZUF0dHJpYnV0ZShuKX0sYXR0ckhvb2tzOnt0
eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZigheC5zdXBwb3J0LnJhZGlvVmFsdWUmJiJyYWRpbyI9
PT10JiZ4Lm5vZGVOYW1lKGUsImlucHV0Iikpe3ZhciBuPWUudmFsdWU7cmV0dXJuIGUuc2V0QXR0
cmlidXRlKCJ0eXBlIix0KSxuJiYoZS52YWx1ZT1uKSx0fX19fSxwcm9wRml4OnsiZm9yIjoiaHRt
bEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn0scHJvcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxv
LHM9ZS5ub2RlVHlwZTtpZihlJiYzIT09cyYmOCE9PXMmJjIhPT1zKXJldHVybiBvPTEhPT1zfHwh
eC5pc1hNTERvYyhlKSxvJiYodD14LnByb3BGaXhbdF18fHQsaT14LnByb3BIb29rc1t0XSksbiE9
PXVuZGVmaW5lZD9pJiYic2V0ImluIGkmJihyPWkuc2V0KGUsbix0KSkhPT11bmRlZmluZWQ/cjpl
W3RdPW46aSYmImdldCJpbiBpJiZudWxsIT09KHI9aS5nZXQoZSx0KSk/cjplW3RdfSxwcm9wSG9v
a3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJ0YWJp
bmRleCIpfHxCLnRlc3QoZS5ub2RlTmFtZSl8fGUuaHJlZj9lLnRhYkluZGV4Oi0xfX19fSksTT17
c2V0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD09PSExP3gucmVtb3ZlQXR0cihlLG4pOmUuc2V0
QXR0cmlidXRlKG4sbiksbn19LHguZWFjaCh4LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2go
L1x3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBuPXguZXhwci5hdHRySGFuZGxlW3RdfHx4LmZpbmQu
YXR0cjt4LmV4cHIuYXR0ckhhbmRsZVt0XT1mdW5jdGlvbihlLHQscil7dmFyIGk9eC5leHByLmF0
dHJIYW5kbGVbdF0sbz1yP3VuZGVmaW5lZDooeC5leHByLmF0dHJIYW5kbGVbdF09dW5kZWZpbmVk
KSE9bihlLHQscik/dC50b0xvd2VyQ2FzZSgpOm51bGw7cmV0dXJuIHguZXhwci5hdHRySGFuZGxl
W3RdPWksb319KSx4LnN1cHBvcnQub3B0U2VsZWN0ZWR8fCh4LnByb3BIb29rcy5zZWxlY3RlZD17
Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmdC5wYXJlbnROb2Rl
JiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxudWxsfX0pLHguZWFjaChbInRhYkluZGV4Iiwi
cmVhZE9ubHkiLCJtYXhMZW5ndGgiLCJjZWxsU3BhY2luZyIsImNlbGxQYWRkaW5nIiwicm93U3Bh
biIsImNvbFNwYW4iLCJ1c2VNYXAiLCJmcmFtZUJvcmRlciIsImNvbnRlbnRFZGl0YWJsZSJdLGZ1
bmN0aW9uKCl7eC5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pLHguZWFjaChbInJh
ZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe3gudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlv
bihlLHQpe3JldHVybiB4LmlzQXJyYXkodCk/ZS5jaGVja2VkPXguaW5BcnJheSh4KGUpLnZhbCgp
LHQpPj0wOnVuZGVmaW5lZH19LHguc3VwcG9ydC5jaGVja09ufHwoeC52YWxIb29rc1t0aGlzXS5n
ZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24i
OmUudmFsdWV9KX0pO3ZhciBJPS9ea2V5Lyx6PS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNr
LyxfPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxYPS9eKFteLl0qKSg/OlwuKC4r
KXwpJC87ZnVuY3Rpb24gVSgpe3JldHVybiEwfWZ1bmN0aW9uIFkoKXtyZXR1cm4hMX1mdW5jdGlv
biBWKCl7dHJ5e3JldHVybiBvLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goZSl7fX14LmV2ZW50PXtnbG9i
YWw6e30sYWRkOmZ1bmN0aW9uKGUsdCxuLGksbyl7dmFyIHMsYSx1LGwsYyxwLGYsaCxkLGcsbSx5
PXEuZ2V0KGUpO2lmKHkpe24uaGFuZGxlciYmKHM9bixuPXMuaGFuZGxlcixvPXMuc2VsZWN0b3Ip
LG4uZ3VpZHx8KG4uZ3VpZD14Lmd1aWQrKyksKGw9eS5ldmVudHMpfHwobD15LmV2ZW50cz17fSks
KGE9eS5oYW5kbGUpfHwoYT15LmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIHg9PT1y
fHxlJiZ4LmV2ZW50LnRyaWdnZXJlZD09PWUudHlwZT91bmRlZmluZWQ6eC5ldmVudC5kaXNwYXRj
aC5hcHBseShhLmVsZW0sYXJndW1lbnRzKX0sYS5lbGVtPWUpLHQ9KHR8fCIiKS5tYXRjaCh3KXx8
WyIiXSxjPXQubGVuZ3RoO3doaWxlKGMtLSl1PVguZXhlYyh0W2NdKXx8W10sZD1tPXVbMV0sZz0o
dVsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGQmJihmPXguZXZlbnQuc3BlY2lhbFtkXXx8e30s
ZD0obz9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZCxmPXguZXZlbnQuc3BlY2lhbFtkXXx8
e30scD14LmV4dGVuZCh7dHlwZTpkLG9yaWdUeXBlOm0sZGF0YTppLGhhbmRsZXI6bixndWlkOm4u
Z3VpZCxzZWxlY3RvcjpvLG5lZWRzQ29udGV4dDpvJiZ4LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0
LnRlc3QobyksbmFtZXNwYWNlOmcuam9pbigiLiIpfSxzKSwoaD1sW2RdKXx8KGg9bFtkXT1bXSxo
LmRlbGVnYXRlQ291bnQ9MCxmLnNldHVwJiZmLnNldHVwLmNhbGwoZSxpLGcsYSkhPT0hMXx8ZS5h
ZGRFdmVudExpc3RlbmVyJiZlLmFkZEV2ZW50TGlzdGVuZXIoZCxhLCExKSksZi5hZGQmJihmLmFk
ZC5jYWxsKGUscCkscC5oYW5kbGVyLmd1aWR8fChwLmhhbmRsZXIuZ3VpZD1uLmd1aWQpKSxvP2gu
c3BsaWNlKGguZGVsZWdhdGVDb3VudCsrLDAscCk6aC5wdXNoKHApLHguZXZlbnQuZ2xvYmFsW2Rd
PSEwKTtlPW51bGx9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxzLGEsdSxsLGMs
cCxmLGgsZCxnLG09cS5oYXNEYXRhKGUpJiZxLmdldChlKTtpZihtJiYodT1tLmV2ZW50cykpe3Q9
KHR8fCIiKS5tYXRjaCh3KXx8WyIiXSxsPXQubGVuZ3RoO3doaWxlKGwtLSlpZihhPVguZXhlYyh0
W2xdKXx8W10saD1nPWFbMV0sZD0oYVsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGgpe3A9eC5l
dmVudC5zcGVjaWFsW2hdfHx7fSxoPShyP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHxoLGY9
dVtoXXx8W10sYT1hWzJdJiZSZWdFeHAoIihefFxcLikiK2Quam9pbigiXFwuKD86LipcXC58KSIp
KyIoXFwufCQpIikscz1vPWYubGVuZ3RoO3doaWxlKG8tLSljPWZbb10sIWkmJmchPT1jLm9yaWdU
eXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fGEmJiFhLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09
Yy5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYy5zZWxlY3Rvcil8fChmLnNwbGljZShvLDEpLGMuc2Vs
ZWN0b3ImJmYuZGVsZWdhdGVDb3VudC0tLHAucmVtb3ZlJiZwLnJlbW92ZS5jYWxsKGUsYykpO3Mm
JiFmLmxlbmd0aCYmKHAudGVhcmRvd24mJnAudGVhcmRvd24uY2FsbChlLGQsbS5oYW5kbGUpIT09
ITF8fHgucmVtb3ZlRXZlbnQoZSxoLG0uaGFuZGxlKSxkZWxldGUgdVtoXSl9ZWxzZSBmb3IoaCBp
biB1KXguZXZlbnQucmVtb3ZlKGUsaCt0W2xdLG4sciwhMCk7eC5pc0VtcHR5T2JqZWN0KHUpJiYo
ZGVsZXRlIG0uaGFuZGxlLHEucmVtb3ZlKGUsImV2ZW50cyIpKX19LHRyaWdnZXI6ZnVuY3Rpb24o
dCxuLHIsaSl7dmFyIHMsYSx1LGwsYyxwLGYsaD1bcnx8b10sZD15LmNhbGwodCwidHlwZSIpP3Qu
dHlwZTp0LGc9eS5jYWxsKHQsIm5hbWVzcGFjZSIpP3QubmFtZXNwYWNlLnNwbGl0KCIuIik6W107
aWYoYT11PXI9cnx8bywzIT09ci5ub2RlVHlwZSYmOCE9PXIubm9kZVR5cGUmJiFfLnRlc3QoZCt4
LmV2ZW50LnRyaWdnZXJlZCkmJihkLmluZGV4T2YoIi4iKT49MCYmKGc9ZC5zcGxpdCgiLiIpLGQ9
Zy5zaGlmdCgpLGcuc29ydCgpKSxjPTA+ZC5pbmRleE9mKCI6IikmJiJvbiIrZCx0PXRbeC5leHBh
bmRvXT90Om5ldyB4LkV2ZW50KGQsIm9iamVjdCI9PXR5cGVvZiB0JiZ0KSx0LmlzVHJpZ2dlcj1p
PzI6Myx0Lm5hbWVzcGFjZT1nLmpvaW4oIi4iKSx0Lm5hbWVzcGFjZV9yZT10Lm5hbWVzcGFjZT9S
ZWdFeHAoIihefFxcLikiK2cuam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCx0
LnJlc3VsdD11bmRlZmluZWQsdC50YXJnZXR8fCh0LnRhcmdldD1yKSxuPW51bGw9PW4/W3RdOngu
bWFrZUFycmF5KG4sW3RdKSxmPXguZXZlbnQuc3BlY2lhbFtkXXx8e30saXx8IWYudHJpZ2dlcnx8
Zi50cmlnZ2VyLmFwcGx5KHIsbikhPT0hMSkpe2lmKCFpJiYhZi5ub0J1YmJsZSYmIXguaXNXaW5k
b3cocikpe2ZvcihsPWYuZGVsZWdhdGVUeXBlfHxkLF8udGVzdChsK2QpfHwoYT1hLnBhcmVudE5v
ZGUpO2E7YT1hLnBhcmVudE5vZGUpaC5wdXNoKGEpLHU9YTt1PT09KHIub3duZXJEb2N1bWVudHx8
bykmJmgucHVzaCh1LmRlZmF1bHRWaWV3fHx1LnBhcmVudFdpbmRvd3x8ZSl9cz0wO3doaWxlKChh
PWhbcysrXSkmJiF0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpdC50eXBlPXM+MT9sOmYuYmluZFR5
cGV8fGQscD0ocS5nZXQoYSwiZXZlbnRzIil8fHt9KVt0LnR5cGVdJiZxLmdldChhLCJoYW5kbGUi
KSxwJiZwLmFwcGx5KGEsbikscD1jJiZhW2NdLHAmJnguYWNjZXB0RGF0YShhKSYmcC5hcHBseSYm
cC5hcHBseShhLG4pPT09ITEmJnQucHJldmVudERlZmF1bHQoKTtyZXR1cm4gdC50eXBlPWQsaXx8
dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Zi5fZGVmYXVsdCYmZi5fZGVmYXVsdC5hcHBseShoLnBv
cCgpLG4pIT09ITF8fCF4LmFjY2VwdERhdGEocil8fGMmJnguaXNGdW5jdGlvbihyW2RdKSYmIXgu
aXNXaW5kb3cocikmJih1PXJbY10sdSYmKHJbY109bnVsbCkseC5ldmVudC50cmlnZ2VyZWQ9ZCxy
W2RdKCkseC5ldmVudC50cmlnZ2VyZWQ9dW5kZWZpbmVkLHUmJihyW2NdPXUpKSx0LnJlc3VsdH19
LGRpc3BhdGNoOmZ1bmN0aW9uKGUpe2U9eC5ldmVudC5maXgoZSk7dmFyIHQsbixyLGksbyxzPVtd
LGE9ZC5jYWxsKGFyZ3VtZW50cyksdT0ocS5nZXQodGhpcywiZXZlbnRzIil8fHt9KVtlLnR5cGVd
fHxbXSxsPXguZXZlbnQuc3BlY2lhbFtlLnR5cGVdfHx7fTtpZihhWzBdPWUsZS5kZWxlZ2F0ZVRh
cmdldD10aGlzLCFsLnByZURpc3BhdGNofHxsLnByZURpc3BhdGNoLmNhbGwodGhpcyxlKSE9PSEx
KXtzPXguZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLGUsdSksdD0wO3doaWxlKChpPXNbdCsrXSkm
JiFlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2UuY3VycmVudFRhcmdldD1pLmVsZW0sbj0wO3do
aWxlKChvPWkuaGFuZGxlcnNbbisrXSkmJiFlLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVk
KCkpKCFlLm5hbWVzcGFjZV9yZXx8ZS5uYW1lc3BhY2VfcmUudGVzdChvLm5hbWVzcGFjZSkpJiYo
ZS5oYW5kbGVPYmo9byxlLmRhdGE9by5kYXRhLHI9KCh4LmV2ZW50LnNwZWNpYWxbby5vcmlnVHlw
ZV18fHt9KS5oYW5kbGV8fG8uaGFuZGxlcikuYXBwbHkoaS5lbGVtLGEpLHIhPT11bmRlZmluZWQm
JihlLnJlc3VsdD1yKT09PSExJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9u
KCkpKX1yZXR1cm4gbC5wb3N0RGlzcGF0Y2gmJmwucG9zdERpc3BhdGNoLmNhbGwodGhpcyxlKSxl
LnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8scz1bXSxhPXQuZGVs
ZWdhdGVDb3VudCx1PWUudGFyZ2V0O2lmKGEmJnUubm9kZVR5cGUmJighZS5idXR0b258fCJjbGlj
ayIhPT1lLnR5cGUpKWZvcig7dSE9PXRoaXM7dT11LnBhcmVudE5vZGV8fHRoaXMpaWYodS5kaXNh
YmxlZCE9PSEwfHwiY2xpY2siIT09ZS50eXBlKXtmb3Iocj1bXSxuPTA7YT5uO24rKylvPXRbbl0s
aT1vLnNlbGVjdG9yKyIgIixyW2ldPT09dW5kZWZpbmVkJiYocltpXT1vLm5lZWRzQ29udGV4dD94
KGksdGhpcykuaW5kZXgodSk+PTA6eC5maW5kKGksdGhpcyxudWxsLFt1XSkubGVuZ3RoKSxyW2ld
JiZyLnB1c2gobyk7ci5sZW5ndGgmJnMucHVzaCh7ZWxlbTp1LGhhbmRsZXJzOnJ9KX1yZXR1cm4g
dC5sZW5ndGg+YSYmcy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6dC5zbGljZShhKX0pLHN9LHBy
b3BzOiJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVu
dFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZp
ZXcgd2hpY2giLnNwbGl0KCIgIiksZml4SG9va3M6e30sa2V5SG9va3M6e3Byb3BzOiJjaGFyIGNo
YXJDb2RlIGtleSBrZXlDb2RlIi5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihlLHQpe3JldHVy
biBudWxsPT1lLndoaWNoJiYoZS53aGljaD1udWxsIT10LmNoYXJDb2RlP3QuY2hhckNvZGU6dC5r
ZXlDb2RlKSxlfX0sbW91c2VIb29rczp7cHJvcHM6ImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xp
ZW50WSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVu
dCIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGkscz10LmJ1dHRvbjty
ZXR1cm4gbnVsbD09ZS5wYWdlWCYmbnVsbCE9dC5jbGllbnRYJiYobj1lLnRhcmdldC5vd25lckRv
Y3VtZW50fHxvLHI9bi5kb2N1bWVudEVsZW1lbnQsaT1uLmJvZHksZS5wYWdlWD10LmNsaWVudFgr
KHImJnIuc2Nyb2xsTGVmdHx8aSYmaS5zY3JvbGxMZWZ0fHwwKS0ociYmci5jbGllbnRMZWZ0fHxp
JiZpLmNsaWVudExlZnR8fDApLGUucGFnZVk9dC5jbGllbnRZKyhyJiZyLnNjcm9sbFRvcHx8aSYm
aS5zY3JvbGxUb3B8fDApLShyJiZyLmNsaWVudFRvcHx8aSYmaS5jbGllbnRUb3B8fDApKSxlLndo
aWNofHxzPT09dW5kZWZpbmVkfHwoZS53aGljaD0xJnM/MToyJnM/Mzo0JnM/MjowKSxlfX0sZml4
OmZ1bmN0aW9uKGUpe2lmKGVbeC5leHBhbmRvXSlyZXR1cm4gZTt2YXIgdCxuLHIsaT1lLnR5cGUs
cz1lLGE9dGhpcy5maXhIb29rc1tpXTthfHwodGhpcy5maXhIb29rc1tpXT1hPXoudGVzdChpKT90
aGlzLm1vdXNlSG9va3M6SS50ZXN0KGkpP3RoaXMua2V5SG9va3M6e30pLHI9YS5wcm9wcz90aGlz
LnByb3BzLmNvbmNhdChhLnByb3BzKTp0aGlzLnByb3BzLGU9bmV3IHguRXZlbnQocyksdD1yLmxl
bmd0aDt3aGlsZSh0LS0pbj1yW3RdLGVbbl09c1tuXTtyZXR1cm4gZS50YXJnZXR8fChlLnRhcmdl
dD1vKSwzPT09ZS50YXJnZXQubm9kZVR5cGUmJihlLnRhcmdldD1lLnRhcmdldC5wYXJlbnROb2Rl
KSxhLmZpbHRlcj9hLmZpbHRlcihlLHMpOmV9LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxm
b2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzIT09VigpJiZ0aGlzLmZvY3VzPyh0
aGlzLmZvY3VzKCksITEpOnVuZGVmaW5lZH0sZGVsZWdhdGVUeXBlOiJmb2N1c2luIn0sYmx1cjp7
dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzPT09VigpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1
cigpLCExKTp1bmRlZmluZWR9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dl
cjpmdW5jdGlvbigpe3JldHVybiJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2smJngu
bm9kZU5hbWUodGhpcywiaW5wdXQiKT8odGhpcy5jbGljaygpLCExKTp1bmRlZmluZWR9LF9kZWZh
dWx0OmZ1bmN0aW9uKGUpe3JldHVybiB4Lm5vZGVOYW1lKGUudGFyZ2V0LCJhIil9fSxiZWZvcmV1
bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihlKXtlLnJlc3VsdCE9PXVuZGVmaW5lZCYmKGUu
b3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24o
ZSx0LG4scil7dmFyIGk9eC5leHRlbmQobmV3IHguRXZlbnQsbix7dHlwZTplLGlzU2ltdWxhdGVk
OiEwLG9yaWdpbmFsRXZlbnQ6e319KTtyP3guZXZlbnQudHJpZ2dlcihpLG51bGwsdCk6eC5ldmVu
dC5kaXNwYXRjaC5jYWxsKHQsaSksaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmbi5wcmV2ZW50RGVm
YXVsdCgpfX0seC5yZW1vdmVFdmVudD1mdW5jdGlvbihlLHQsbil7ZS5yZW1vdmVFdmVudExpc3Rl
bmVyJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCExKX0seC5FdmVudD1mdW5jdGlvbihlLHQp
e3JldHVybiB0aGlzIGluc3RhbmNlb2YgeC5FdmVudD8oZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFs
RXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVs
dFByZXZlbnRlZHx8ZS5nZXRQcmV2ZW50RGVmYXVsdCYmZS5nZXRQcmV2ZW50RGVmYXVsdCgpP1U6
WSk6dGhpcy50eXBlPWUsdCYmeC5leHRlbmQodGhpcyx0KSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRp
bWVTdGFtcHx8eC5ub3coKSx0aGlzW3guZXhwYW5kb109ITAsdW5kZWZpbmVkKTpuZXcgeC5FdmVu
dChlLHQpfSx4LkV2ZW50LnByb3RvdHlwZT17aXNEZWZhdWx0UHJldmVudGVkOlksaXNQcm9wYWdh
dGlvblN0b3BwZWQ6WSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpZLHByZXZlbnREZWZh
dWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJl
dmVudGVkPVUsZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJv
cGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3Bh
Z2F0aW9uU3RvcHBlZD1VLGUmJmUuc3RvcFByb3BhZ2F0aW9uJiZlLnN0b3BQcm9wYWdhdGlvbigp
fSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJv
cGFnYXRpb25TdG9wcGVkPVUsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LHguZWFjaCh7bW91c2Vl
bnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGUsdCl7eC5l
dmVudC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6dCxiaW5kVHlwZTp0LGhhbmRsZTpmdW5jdGlv
bihlKXt2YXIgbixyPXRoaXMsaT1lLnJlbGF0ZWRUYXJnZXQsbz1lLmhhbmRsZU9iajtyZXR1cm4o
IWl8fGkhPT1yJiYheC5jb250YWlucyhyLGkpKSYmKGUudHlwZT1vLm9yaWdUeXBlLG49by5oYW5k
bGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnR5cGU9dCksbn19fSkseC5zdXBwb3J0LmZvY3Vz
aW5CdWJibGVzfHx4LmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0
aW9uKGUsdCl7dmFyIG49MCxyPWZ1bmN0aW9uKGUpe3guZXZlbnQuc2ltdWxhdGUodCxlLnRhcmdl
dCx4LmV2ZW50LmZpeChlKSwhMCl9O3guZXZlbnQuc3BlY2lhbFt0XT17c2V0dXA6ZnVuY3Rpb24o
KXswPT09bisrJiZvLmFkZEV2ZW50TGlzdGVuZXIoZSxyLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24o
KXswPT09LS1uJiZvLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLCEwKX19fSkseC5mbi5leHRlbmQo
e29uOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8scztpZigib2JqZWN0Ij09dHlwZW9mIGUpeyJz
dHJpbmciIT10eXBlb2YgdCYmKG49bnx8dCx0PXVuZGVmaW5lZCk7Zm9yKHMgaW4gZSl0aGlzLm9u
KHMsdCxuLGVbc10saSk7cmV0dXJuIHRoaXN9aWYobnVsbD09biYmbnVsbD09cj8ocj10LG49dD11
bmRlZmluZWQpOm51bGw9PXImJigic3RyaW5nIj09dHlwZW9mIHQ/KHI9bixuPXVuZGVmaW5lZCk6
KHI9bixuPXQsdD11bmRlZmluZWQpKSxyPT09ITEpcj1ZO2Vsc2UgaWYoIXIpcmV0dXJuIHRoaXM7
cmV0dXJuIDE9PT1pJiYobz1yLHI9ZnVuY3Rpb24oZSl7cmV0dXJuIHgoKS5vZmYoZSksby5hcHBs
eSh0aGlzLGFyZ3VtZW50cyl9LHIuZ3VpZD1vLmd1aWR8fChvLmd1aWQ9eC5ndWlkKyspKSx0aGlz
LmVhY2goZnVuY3Rpb24oKXt4LmV2ZW50LmFkZCh0aGlzLGUscixuLHQpfSl9LG9uZTpmdW5jdGlv
bihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbihlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4p
e3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5o
YW5kbGVPYmoseChlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsi
LiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigi
b2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0
aGlzfXJldHVybih0PT09ITF8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSYmKG49dCx0PXVuZGVmaW5l
ZCksbj09PSExJiYobj1ZKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmV2ZW50LnJlbW92ZSh0aGlz
LGUsbix0KX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bigpe3guZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24o
ZSx0KXt2YXIgbj10aGlzWzBdO3JldHVybiBuP3guZXZlbnQudHJpZ2dlcihlLHQsbiwhMCk6dW5k
ZWZpbmVkfX0pO3ZhciBHPS9eLlteOiNcW1wuLF0qJC8sSj0vXig/OnBhcmVudHN8cHJldig/OlVu
dGlsfEFsbCkpLyxRPXguZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsSz17Y2hpbGRyZW46ITAsY29u
dGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTt4LmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2
YXIgdCxuPVtdLHI9dGhpcyxpPXIubGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4g
dGhpcy5wdXNoU3RhY2soeChlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO2k+dDt0KyspaWYo
eC5jb250YWlucyhyW3RdLHRoaXMpKXJldHVybiEwfSkpO2Zvcih0PTA7aT50O3QrKyl4LmZpbmQo
ZSxyW3RdLG4pO3JldHVybiBuPXRoaXMucHVzaFN0YWNrKGk+MT94LnVuaXF1ZShuKTpuKSxuLnNl
bGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrZTplLG59LGhhczpmdW5jdGlv
bihlKXt2YXIgdD14KGUsdGhpcyksbj10Lmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rp
b24oKXt2YXIgZT0wO2Zvcig7bj5lO2UrKylpZih4LmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJu
ITB9KX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhldCh0aGlzLGV8fFtd
LCEwKSl9LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZXQodGhpcyxl
fHxbXSwhMSkpfSxpczpmdW5jdGlvbihlKXtyZXR1cm4hIWV0KHRoaXMsInN0cmluZyI9PXR5cGVv
ZiBlJiZRLnRlc3QoZSk/eChlKTplfHxbXSwhMSkubGVuZ3RofSxjbG9zZXN0OmZ1bmN0aW9uKGUs
dCl7dmFyIG4scj0wLGk9dGhpcy5sZW5ndGgsbz1bXSxzPVEudGVzdChlKXx8InN0cmluZyIhPXR5
cGVvZiBlP3goZSx0fHx0aGlzLmNvbnRleHQpOjA7Zm9yKDtpPnI7cisrKWZvcihuPXRoaXNbcl07
biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYoMTE+bi5ub2RlVHlwZSYmKHM/cy5pbmRleChuKT4t
MToxPT09bi5ub2RlVHlwZSYmeC5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7bj1vLnB1c2go
bik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8ubGVuZ3RoPjE/eC51bmlxdWUobyk6byl9
LGluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlPyJzdHJpbmciPT10eXBlb2YgZT9nLmNhbGwoeChl
KSx0aGlzWzBdKTpnLmNhbGwodGhpcyxlLmpxdWVyeT9lWzBdOmUpOnRoaXNbMF0mJnRoaXNbMF0u
cGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9u
KGUsdCl7dmFyIG49InN0cmluZyI9PXR5cGVvZiBlP3goZSx0KTp4Lm1ha2VBcnJheShlJiZlLm5v
ZGVUeXBlP1tlXTplKSxyPXgubWVyZ2UodGhpcy5nZXQoKSxuKTtyZXR1cm4gdGhpcy5wdXNoU3Rh
Y2soeC51bmlxdWUocikpfSxhZGRCYWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxs
PT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX19KTtmdW5jdGlv
biBaKGUsdCl7d2hpbGUoKGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlKTtyZXR1cm4gZX14LmVhY2go
e3BhcmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJjExIT09dC5u
b2RlVHlwZT90Om51bGx9LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsInBhcmVu
dE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4geC5kaXIoZSwicGFy
ZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFooZSwibmV4dFNpYmxpbmciKX0s
cHJldjpmdW5jdGlvbihlKXtyZXR1cm4gWihlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpm
dW5jdGlvbihlKXtyZXR1cm4geC5kaXIoZSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlv
bihlKXtyZXR1cm4geC5kaXIoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlv
bihlLHQsbil7cmV0dXJuIHguZGlyKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0
aW9uKGUsdCxuKXtyZXR1cm4geC5kaXIoZSwicHJldmlvdXNTaWJsaW5nIixuKX0sc2libGluZ3M6
ZnVuY3Rpb24oZSl7cmV0dXJuIHguc2libGluZygoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGls
ZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIHguc2libGluZyhlLmZpcnN0Q2hpbGQp
fSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb250ZW50RG9jdW1lbnR8fHgubWVyZ2Uo
W10sZS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihuLHIpe3Zh
ciBpPXgubWFwKHRoaXMsdCxuKTtyZXR1cm4iVW50aWwiIT09ZS5zbGljZSgtNSkmJihyPW4pLHIm
JiJzdHJpbmciPT10eXBlb2YgciYmKGk9eC5maWx0ZXIocixpKSksdGhpcy5sZW5ndGg+MSYmKEtb
ZV18fHgudW5pcXVlKGkpLEoudGVzdChlKSYmaS5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKGkp
fX0pLHguZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRbMF07cmV0dXJuIG4m
JihlPSI6bm90KCIrZSsiKSIpLDE9PT10Lmxlbmd0aCYmMT09PXIubm9kZVR5cGU/eC5maW5kLm1h
dGNoZXNTZWxlY3RvcihyLGUpP1tyXTpbXTp4LmZpbmQubWF0Y2hlcyhlLHguZ3JlcCh0LGZ1bmN0
aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZX0pKX0sZGlyOmZ1bmN0aW9uKGUsdCxuKXt2YXIg
cj1bXSxpPW4hPT11bmRlZmluZWQ7d2hpbGUoKGU9ZVt0XSkmJjkhPT1lLm5vZGVUeXBlKWlmKDE9
PT1lLm5vZGVUeXBlKXtpZihpJiZ4KGUpLmlzKG4pKWJyZWFrO3IucHVzaChlKX1yZXR1cm4gcn0s
c2libGluZzpmdW5jdGlvbihlLHQpe3ZhciBuPVtdO2Zvcig7ZTtlPWUubmV4dFNpYmxpbmcpMT09
PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59fSk7ZnVuY3Rpb24gZXQoZSx0
LG4pe2lmKHguaXNGdW5jdGlvbih0KSlyZXR1cm4geC5ncmVwKGUsZnVuY3Rpb24oZSxyKXtyZXR1
cm4hIXQuY2FsbChlLHIsZSkhPT1ufSk7aWYodC5ub2RlVHlwZSlyZXR1cm4geC5ncmVwKGUsZnVu
Y3Rpb24oZSl7cmV0dXJuIGU9PT10IT09bn0pO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYoRy50
ZXN0KHQpKXJldHVybiB4LmZpbHRlcih0LGUsbik7dD14LmZpbHRlcih0LGUpfXJldHVybiB4Lmdy
ZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZy5jYWxsKHQsZSk+PTAhPT1ufSl9dmFyIHR0PS88KD8h
YXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylb
Xj5dKilcLz4vZ2ksbnQ9LzwoW1x3Ol0rKS8scnQ9Lzx8JiM/XHcrOy8saXQ9LzwoPzpzY3JpcHR8
c3R5bGV8bGluaykvaSxvdD0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxzdD0vY2hlY2tlZFxzKig/
OltePV18PVxzKi5jaGVja2VkLikvaSxhdD0vXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksdXQ9
L150cnVlXC8oLiopLyxsdD0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyok
L2csY3Q9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0
PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3Jv
dXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJv
ZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5Pjwv
dGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtjdC5vcHRncm91cD1jdC5vcHRpb24sY3QudGJv
ZHk9Y3QudGZvb3Q9Y3QuY29sZ3JvdXA9Y3QuY2FwdGlvbj1jdC50aGVhZCxjdC50aD1jdC50ZCx4
LmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihlKXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlv
bihlKXtyZXR1cm4gZT09PXVuZGVmaW5lZD94LnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVu
ZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxvKS5jcmVhdGVUZXh0Tm9kZShlKSl9
LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
ZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09
PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1wdCh0aGlzLGUpO3QuYXBw
ZW5kQ2hpbGQoZSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChh
cmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2Rl
VHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PXB0KHRoaXMsZSk7dC5pbnNlcnRCZWZvcmUo
ZSx0LmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5p
cChhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUu
aW5zZXJ0QmVmb3JlKGUsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21N
YW5pcChhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5v
ZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KX0scmVtb3ZlOmZ1bmN0aW9uKGUs
dCl7dmFyIG4scj1lP3guZmlsdGVyKGUsdGhpcyk6dGhpcyxpPTA7Zm9yKDtudWxsIT0obj1yW2ld
KTtpKyspdHx8MSE9PW4ubm9kZVR5cGV8fHguY2xlYW5EYXRhKG10KG4pKSxuLnBhcmVudE5vZGUm
Jih0JiZ4LmNvbnRhaW5zKG4ub3duZXJEb2N1bWVudCxuKSYmZHQobXQobiwic2NyaXB0IikpLG4u
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7
dmFyIGUsdD0wO2Zvcig7bnVsbCE9KGU9dGhpc1t0XSk7dCsrKTE9PT1lLm5vZGVUeXBlJiYoeC5j
bGVhbkRhdGEobXQoZSwhMSkpLGUudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpm
dW5jdGlvbihlLHQpe3JldHVybiBlPW51bGw9PWU/ITE6ZSx0PW51bGw9PXQ/ZTp0LHRoaXMubWFw
KGZ1bmN0aW9uKCl7cmV0dXJuIHguY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7
cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9
dGhpcy5sZW5ndGg7aWYoZT09PXVuZGVmaW5lZCYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5u
ZXJIVE1MO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmIWl0LnRlc3QoZSkmJiFjdFsobnQuZXhlYyhl
KXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9ZS5yZXBsYWNlKHR0LCI8JDE+PC8kMj4i
KTt0cnl7Zm9yKDtyPm47bisrKXQ9dGhpc1tuXXx8e30sMT09PXQubm9kZVR5cGUmJih4LmNsZWFu
RGF0YShtdCh0LCExKSksdC5pbm5lckhUTUw9ZSk7dD0wfWNhdGNoKGkpe319dCYmdGhpcy5lbXB0
eSgpLmFwcGVuZChlKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5j
dGlvbigpe3ZhciBlPXgubWFwKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuW2UubmV4dFNpYmxpbmcs
ZS5wYXJlbnROb2RlXX0pLHQ9MDtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rp
b24obil7dmFyIHI9ZVt0KytdLGk9ZVt0KytdO2kmJihyJiZyLnBhcmVudE5vZGUhPT1pJiYocj10
aGlzLm5leHRTaWJsaW5nKSx4KHRoaXMpLnJlbW92ZSgpLGkuaW5zZXJ0QmVmb3JlKG4scikpfSwh
MCksdD90aGlzOnRoaXMucmVtb3ZlKCl9LGRldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5y
ZW1vdmUoZSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGUsdCxuKXtlPWYuYXBwbHkoW10sZSk7dmFy
IHIsaSxvLHMsYSx1LGw9MCxjPXRoaXMubGVuZ3RoLHA9dGhpcyxoPWMtMSxkPWVbMF0sZz14Lmlz
RnVuY3Rpb24oZCk7aWYoZ3x8ISgxPj1jfHwic3RyaW5nIiE9dHlwZW9mIGR8fHguc3VwcG9ydC5j
aGVja0Nsb25lKSYmc3QudGVzdChkKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBp
PXAuZXEocik7ZyYmKGVbMF09ZC5jYWxsKHRoaXMscixpLmh0bWwoKSkpLGkuZG9tTWFuaXAoZSx0
LG4pfSk7aWYoYyYmKHI9eC5idWlsZEZyYWdtZW50KGUsdGhpc1swXS5vd25lckRvY3VtZW50LCEx
LCFuJiZ0aGlzKSxpPXIuZmlyc3RDaGlsZCwxPT09ci5jaGlsZE5vZGVzLmxlbmd0aCYmKHI9aSks
aSkpe2ZvcihvPXgubWFwKG10KHIsInNjcmlwdCIpLGZ0KSxzPW8ubGVuZ3RoO2M+bDtsKyspYT1y
LGwhPT1oJiYoYT14LmNsb25lKGEsITAsITApLHMmJngubWVyZ2UobyxtdChhLCJzY3JpcHQiKSkp
LHQuY2FsbCh0aGlzW2xdLGEsbCk7aWYocylmb3IodT1vW28ubGVuZ3RoLTFdLm93bmVyRG9jdW1l
bnQseC5tYXAobyxodCksbD0wO3M+bDtsKyspYT1vW2xdLGF0LnRlc3QoYS50eXBlfHwiIikmJiFx
LmFjY2VzcyhhLCJnbG9iYWxFdmFsIikmJnguY29udGFpbnModSxhKSYmKGEuc3JjP3guX2V2YWxV
cmwoYS5zcmMpOnguZ2xvYmFsRXZhbChhLnRleHRDb250ZW50LnJlcGxhY2UobHQsIiIpKSl9cmV0
dXJuIHRoaXN9fSkseC5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQi
LGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJl
cGxhY2VXaXRoIn0sZnVuY3Rpb24oZSx0KXt4LmZuW2VdPWZ1bmN0aW9uKGUpe3ZhciBuLHI9W10s
aT14KGUpLG89aS5sZW5ndGgtMSxzPTA7Zm9yKDtvPj1zO3MrKyluPXM9PT1vP3RoaXM6dGhpcy5j
bG9uZSghMCkseChpW3NdKVt0XShuKSxoLmFwcGx5KHIsbi5nZXQoKSk7cmV0dXJuIHRoaXMucHVz
aFN0YWNrKHIpfX0pLHguZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLHMs
YT1lLmNsb25lTm9kZSghMCksdT14LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKTtpZighKHgu
c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZHx8MSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZXx8
eC5pc1hNTERvYyhlKSkpZm9yKHM9bXQoYSksbz1tdChlKSxyPTAsaT1vLmxlbmd0aDtpPnI7cisr
KXl0KG9bcl0sc1tyXSk7aWYodClpZihuKWZvcihvPW98fG10KGUpLHM9c3x8bXQoYSkscj0wLGk9
by5sZW5ndGg7aT5yO3IrKylndChvW3JdLHNbcl0pO2Vsc2UgZ3QoZSxhKTtyZXR1cm4gcz1tdChh
LCJzY3JpcHQiKSxzLmxlbmd0aD4wJiZkdChzLCF1JiZtdChlLCJzY3JpcHQiKSksYX0sYnVpbGRG
cmFnbWVudDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHMsYSx1LGwsYz0wLHA9ZS5sZW5ndGgs
Zj10LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPVtdO2Zvcig7cD5jO2MrKylpZihpPWVbY10s
aXx8MD09PWkpaWYoIm9iamVjdCI9PT14LnR5cGUoaSkpeC5tZXJnZShoLGkubm9kZVR5cGU/W2ld
OmkpO2Vsc2UgaWYocnQudGVzdChpKSl7bz1vfHxmLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVu
dCgiZGl2IikpLHM9KG50LmV4ZWMoaSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksYT1jdFtz
XXx8Y3QuX2RlZmF1bHQsby5pbm5lckhUTUw9YVsxXStpLnJlcGxhY2UodHQsIjwkMT48LyQyPiIp
K2FbMl0sbD1hWzBdO3doaWxlKGwtLSlvPW8ubGFzdENoaWxkO3gubWVyZ2UoaCxvLmNoaWxkTm9k
ZXMpLG89Zi5maXJzdENoaWxkLG8udGV4dENvbnRlbnQ9IiJ9ZWxzZSBoLnB1c2godC5jcmVhdGVU
ZXh0Tm9kZShpKSk7Zi50ZXh0Q29udGVudD0iIixjPTA7d2hpbGUoaT1oW2MrK10paWYoKCFyfHwt
MT09PXguaW5BcnJheShpLHIpKSYmKHU9eC5jb250YWlucyhpLm93bmVyRG9jdW1lbnQsaSksbz1t
dChmLmFwcGVuZENoaWxkKGkpLCJzY3JpcHQiKSx1JiZkdChvKSxuKSl7bD0wO3doaWxlKGk9b1ts
KytdKWF0LnRlc3QoaS50eXBlfHwiIikmJm4ucHVzaChpKX1yZXR1cm4gZn0sY2xlYW5EYXRhOmZ1
bmN0aW9uKGUpe3ZhciB0LG4scixpLG8scyxhPXguZXZlbnQuc3BlY2lhbCx1PTA7Zm9yKDsobj1l
W3VdKSE9PXVuZGVmaW5lZDt1Kyspe2lmKEYuYWNjZXB0cyhuKSYmKG89bltxLmV4cGFuZG9dLG8m
Jih0PXEuY2FjaGVbb10pKSl7aWYocj1PYmplY3Qua2V5cyh0LmV2ZW50c3x8e30pLHIubGVuZ3Ro
KWZvcihzPTA7KGk9cltzXSkhPT11bmRlZmluZWQ7cysrKWFbaV0/eC5ldmVudC5yZW1vdmUobixp
KTp4LnJlbW92ZUV2ZW50KG4saSx0LmhhbmRsZSk7cS5jYWNoZVtvXSYmZGVsZXRlIHEuY2FjaGVb
b119ZGVsZXRlIEwuY2FjaGVbbltMLmV4cGFuZG9dXX19LF9ldmFsVXJsOmZ1bmN0aW9uKGUpe3Jl
dHVybiB4LmFqYXgoe3VybDplLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEs
Z2xvYmFsOiExLCJ0aHJvd3MiOiEwfSl9fSk7ZnVuY3Rpb24gcHQoZSx0KXtyZXR1cm4geC5ub2Rl
TmFtZShlLCJ0YWJsZSIpJiZ4Lm5vZGVOYW1lKDE9PT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxk
LCJ0ciIpP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGUuYXBwZW5kQ2hpbGQo
ZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmV9ZnVuY3Rpb24gZnQoZSl7
cmV0dXJuIGUudHlwZT0obnVsbCE9PWUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpKyIvIitlLnR5cGUs
ZX1mdW5jdGlvbiBodChlKXt2YXIgdD11dC5leGVjKGUudHlwZSk7cmV0dXJuIHQ/ZS50eXBlPXRb
MV06ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxlfWZ1bmN0aW9uIGR0KGUsdCl7dmFyIG49ZS5s
ZW5ndGgscj0wO2Zvcig7bj5yO3IrKylxLnNldChlW3JdLCJnbG9iYWxFdmFsIiwhdHx8cS5nZXQo
dFtyXSwiZ2xvYmFsRXZhbCIpKX1mdW5jdGlvbiBndChlLHQpe3ZhciBuLHIsaSxvLHMsYSx1LGw7
aWYoMT09PXQubm9kZVR5cGUpe2lmKHEuaGFzRGF0YShlKSYmKG89cS5hY2Nlc3MoZSkscz1xLnNl
dCh0LG8pLGw9by5ldmVudHMpKXtkZWxldGUgcy5oYW5kbGUscy5ldmVudHM9e307Zm9yKGkgaW4g
bClmb3Iobj0wLHI9bFtpXS5sZW5ndGg7cj5uO24rKyl4LmV2ZW50LmFkZCh0LGksbFtpXVtuXSl9
TC5oYXNEYXRhKGUpJiYoYT1MLmFjY2VzcyhlKSx1PXguZXh0ZW5kKHt9LGEpLEwuc2V0KHQsdSkp
fX1mdW5jdGlvbiBtdChlLHQpe3ZhciBuPWUuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZS5nZXRFbGVt
ZW50c0J5VGFnTmFtZSh0fHwiKiIpOmUucXVlcnlTZWxlY3RvckFsbD9lLnF1ZXJ5U2VsZWN0b3JB
bGwodHx8IioiKTpbXTtyZXR1cm4gdD09PXVuZGVmaW5lZHx8dCYmeC5ub2RlTmFtZShlLHQpP3gu
bWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24geXQoZSx0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJD
YXNlKCk7ImlucHV0Ij09PW4mJm90LnRlc3QoZS50eXBlKT90LmNoZWNrZWQ9ZS5jaGVja2VkOigi
aW5wdXQiPT09bnx8InRleHRhcmVhIj09PW4pJiYodC5kZWZhdWx0VmFsdWU9ZS5kZWZhdWx0VmFs
dWUpfXguZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB4LmlzRnVu
Y3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykud3JhcEFsbChlLmNhbGwodGhp
cyx0KSl9KToodGhpc1swXSYmKHQ9eChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xv
bmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAo
ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3doaWxlKGUuZmlyc3RFbGVtZW50Q2hpbGQpZT1lLmZpcnN0
RWxlbWVudENoaWxkO3JldHVybiBlfSkuYXBwZW5kKHRoaXMpKSx0aGlzKX0sd3JhcElubmVyOmZ1
bmN0aW9uKGUpe3JldHVybiB4LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3go
dGhpcykud3JhcElubmVyKGUuY2FsbCh0aGlzLHQpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3Zh
ciB0PXgodGhpcyksbj10LmNvbnRlbnRzKCk7bi5sZW5ndGg/bi53cmFwQWxsKGUpOnQuYXBwZW5k
KGUpfSl9LHdyYXA6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5pc0Z1bmN0aW9uKGUpO3JldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24obil7eCh0aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0s
dW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe3gu
bm9kZU5hbWUodGhpcywiYm9keSIpfHx4KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rl
cyl9KS5lbmQoKX19KTt2YXIgdnQseHQsYnQ9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLHd0
PS9ebWFyZ2luLyxUdD1SZWdFeHAoIl4oIitiKyIpKC4qKSQiLCJpIiksQ3Q9UmVnRXhwKCJeKCIr
YisiKSg/IXB4KVthLXolXSskIiwiaSIpLGt0PVJlZ0V4cCgiXihbKy1dKT0oIitiKyIpIiwiaSIp
LE50PXtCT0RZOiJibG9jayJ9LEV0PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6Imhp
ZGRlbiIsZGlzcGxheToiYmxvY2sifSxTdD17bGV0dGVyU3BhY2luZzowLGZvbnRXZWlnaHQ6NDAw
fSxqdD1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLER0PVsiV2Via2l0IiwiTyIsIk1v
eiIsIm1zIl07ZnVuY3Rpb24gQXQoZSx0KXtpZih0IGluIGUpcmV0dXJuIHQ7dmFyIG49dC5jaGFy
QXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpLHI9dCxpPUR0Lmxlbmd0aDt3aGlsZShpLS0p
aWYodD1EdFtpXStuLHQgaW4gZSlyZXR1cm4gdDtyZXR1cm4gcn1mdW5jdGlvbiBMdChlLHQpe3Jl
dHVybiBlPXR8fGUsIm5vbmUiPT09eC5jc3MoZSwiZGlzcGxheSIpfHwheC5jb250YWlucyhlLm93
bmVyRG9jdW1lbnQsZSl9ZnVuY3Rpb24gcXQodCl7cmV0dXJuIGUuZ2V0Q29tcHV0ZWRTdHlsZSh0
LG51bGwpfWZ1bmN0aW9uIEh0KGUsdCl7dmFyIG4scixpLG89W10scz0wLGE9ZS5sZW5ndGg7Zm9y
KDthPnM7cysrKXI9ZVtzXSxyLnN0eWxlJiYob1tzXT1xLmdldChyLCJvbGRkaXNwbGF5Iiksbj1y
LnN0eWxlLmRpc3BsYXksdD8ob1tzXXx8Im5vbmUiIT09bnx8KHIuc3R5bGUuZGlzcGxheT0iIiks
IiI9PT1yLnN0eWxlLmRpc3BsYXkmJkx0KHIpJiYob1tzXT1xLmFjY2VzcyhyLCJvbGRkaXNwbGF5
IixSdChyLm5vZGVOYW1lKSkpKTpvW3NdfHwoaT1MdChyKSwobiYmIm5vbmUiIT09bnx8IWkpJiZx
LnNldChyLCJvbGRkaXNwbGF5IixpP246eC5jc3MociwiZGlzcGxheSIpKSkpO2ZvcihzPTA7YT5z
O3MrKylyPWVbc10sci5zdHlsZSYmKHQmJiJub25lIiE9PXIuc3R5bGUuZGlzcGxheSYmIiIhPT1y
LnN0eWxlLmRpc3BsYXl8fChyLnN0eWxlLmRpc3BsYXk9dD9vW3NdfHwiIjoibm9uZSIpKTtyZXR1
cm4gZX14LmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguYWNjZXNzKHRoaXMs
ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz17fSxzPTA7aWYoeC5pc0FycmF5KHQpKXtmb3Iocj1x
dChlKSxpPXQubGVuZ3RoO2k+cztzKyspb1t0W3NdXT14LmNzcyhlLHRbc10sITEscik7cmV0dXJu
IG99cmV0dXJuIG4hPT11bmRlZmluZWQ/eC5zdHlsZShlLHQsbik6eC5jc3MoZSx0KX0sZSx0LGFy
Z3VtZW50cy5sZW5ndGg+MSl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gSHQodGhpcywhMCl9LGhp
ZGU6ZnVuY3Rpb24oKXtyZXR1cm4gSHQodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihlKXtyZXR1cm4i
Ym9vbGVhbiI9PXR5cGVvZiBlP2U/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1
bmN0aW9uKCl7THQodGhpcyk/eCh0aGlzKS5zaG93KCk6eCh0aGlzKS5oaWRlKCl9KX19KSx4LmV4
dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPXZ0
KGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7Y29sdW1uQ291
bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6
ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1By
b3BzOnsiZmxvYXQiOiJjc3NGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUmJjMh
PT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIGksbyxzLGE9eC5jYW1l
bENhc2UodCksdT1lLnN0eWxlO3JldHVybiB0PXguY3NzUHJvcHNbYV18fCh4LmNzc1Byb3BzW2Fd
PUF0KHUsYSkpLHM9eC5jc3NIb29rc1t0XXx8eC5jc3NIb29rc1thXSxuPT09dW5kZWZpbmVkP3Mm
JiJnZXQiaW4gcyYmKGk9cy5nZXQoZSwhMSxyKSkhPT11bmRlZmluZWQ/aTp1W3RdOihvPXR5cGVv
ZiBuLCJzdHJpbmciPT09byYmKGk9a3QuZXhlYyhuKSkmJihuPShpWzFdKzEpKmlbMl0rcGFyc2VG
bG9hdCh4LmNzcyhlLHQpKSxvPSJudW1iZXIiKSxudWxsPT1ufHwibnVtYmVyIj09PW8mJmlzTmFO
KG4pfHwoIm51bWJlciIhPT1vfHx4LmNzc051bWJlclthXXx8KG4rPSJweCIpLHguc3VwcG9ydC5j
bGVhckNsb25lU3R5bGV8fCIiIT09bnx8MCE9PXQuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwodVt0
XT0iaW5oZXJpdCIpLHMmJiJzZXQiaW4gcyYmKG49cy5zZXQoZSxuLHIpKT09PXVuZGVmaW5lZHx8
KHVbdF09bikpLHVuZGVmaW5lZCl9fSxjc3M6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzLGE9
eC5jYW1lbENhc2UodCk7cmV0dXJuIHQ9eC5jc3NQcm9wc1thXXx8KHguY3NzUHJvcHNbYV09QXQo
ZS5zdHlsZSxhKSkscz14LmNzc0hvb2tzW3RdfHx4LmNzc0hvb2tzW2FdLHMmJiJnZXQiaW4gcyYm
KGk9cy5nZXQoZSwhMCxuKSksaT09PXVuZGVmaW5lZCYmKGk9dnQoZSx0LHIpKSwibm9ybWFsIj09
PWkmJnQgaW4gU3QmJihpPVN0W3RdKSwiIj09PW58fG4/KG89cGFyc2VGbG9hdChpKSxuPT09ITB8
fHguaXNOdW1lcmljKG8pP298fDA6aSk6aX19KSx2dD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxv
LHM9bnx8cXQoZSksYT1zP3MuZ2V0UHJvcGVydHlWYWx1ZSh0KXx8c1t0XTp1bmRlZmluZWQsdT1l
LnN0eWxlO3JldHVybiBzJiYoIiIhPT1hfHx4LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8
KGE9eC5zdHlsZShlLHQpKSxDdC50ZXN0KGEpJiZ3dC50ZXN0KHQpJiYocj11LndpZHRoLGk9dS5t
aW5XaWR0aCxvPXUubWF4V2lkdGgsdS5taW5XaWR0aD11Lm1heFdpZHRoPXUud2lkdGg9YSxhPXMu
d2lkdGgsdS53aWR0aD1yLHUubWluV2lkdGg9aSx1Lm1heFdpZHRoPW8pKSxhfTtmdW5jdGlvbiBP
dChlLHQsbil7dmFyIHI9VHQuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMV0tKG58fDAp
KSsoclsyXXx8InB4Iik6dH1mdW5jdGlvbiBGdChlLHQsbixyLGkpe3ZhciBvPW49PT0ocj8iYm9y
ZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PXQ/MTowLHM9MDtmb3IoOzQ+bztvKz0yKSJtYXJn
aW4iPT09biYmKHMrPXguY3NzKGUsbitqdFtvXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKHMt
PXguY3NzKGUsInBhZGRpbmciK2p0W29dLCEwLGkpKSwibWFyZ2luIiE9PW4mJihzLT14LmNzcyhl
LCJib3JkZXIiK2p0W29dKyJXaWR0aCIsITAsaSkpKToocys9eC5jc3MoZSwicGFkZGluZyIranRb
b10sITAsaSksInBhZGRpbmciIT09biYmKHMrPXguY3NzKGUsImJvcmRlciIranRbb10rIldpZHRo
IiwhMCxpKSkpO3JldHVybiBzfWZ1bmN0aW9uIFB0KGUsdCxuKXt2YXIgcj0hMCxpPSJ3aWR0aCI9
PT10P2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHQsbz1xdChlKSxzPXguc3VwcG9ydC5ib3hT
aXppbmcmJiJib3JkZXItYm94Ij09PXguY3NzKGUsImJveFNpemluZyIsITEsbyk7aWYoMD49aXx8
bnVsbD09aSl7aWYoaT12dChlLHQsbyksKDA+aXx8bnVsbD09aSkmJihpPWUuc3R5bGVbdF0pLEN0
LnRlc3QoaSkpcmV0dXJuIGk7cj1zJiYoeC5zdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlfHxpPT09
ZS5zdHlsZVt0XSksaT1wYXJzZUZsb2F0KGkpfHwwfXJldHVybiBpK0Z0KGUsdCxufHwocz8iYm9y
ZGVyIjoiY29udGVudCIpLHIsbykrInB4In1mdW5jdGlvbiBSdChlKXt2YXIgdD1vLG49TnRbZV07
cmV0dXJuIG58fChuPU10KGUsdCksIm5vbmUiIT09biYmbnx8KHh0PSh4dHx8eCgiPGlmcmFtZSBm
cmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpLmNzcygiY3NzVGV4dCIsImRp
c3BsYXk6YmxvY2sgIWltcG9ydGFudCIpKS5hcHBlbmRUbyh0LmRvY3VtZW50RWxlbWVudCksdD0o
eHRbMF0uY29udGVudFdpbmRvd3x8eHRbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCx0Lndy
aXRlKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48Ym9keT4iKSx0LmNsb3NlKCksbj1NdChlLHQpLHh0
LmRldGFjaCgpKSxOdFtlXT1uKSxufWZ1bmN0aW9uIE10KGUsdCl7dmFyIG49eCh0LmNyZWF0ZUVs
ZW1lbnQoZSkpLmFwcGVuZFRvKHQuYm9keSkscj14LmNzcyhuWzBdLCJkaXNwbGF5Iik7cmV0dXJu
IG4ucmVtb3ZlKCkscn14LmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsdCl7eC5j
c3NIb29rc1t0XT17Z2V0OmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbj8wPT09ZS5vZmZzZXRXaWR0
aCYmYnQudGVzdCh4LmNzcyhlLCJkaXNwbGF5IikpP3guc3dhcChlLEV0LGZ1bmN0aW9uKCl7cmV0
dXJuIFB0KGUsdCxyKX0pOlB0KGUsdCxyKTp1bmRlZmluZWR9LHNldDpmdW5jdGlvbihlLG4scil7
dmFyIGk9ciYmcXQoZSk7cmV0dXJuIE90KGUsbixyP0Z0KGUsdCxyLHguc3VwcG9ydC5ib3hTaXpp
bmcmJiJib3JkZXItYm94Ij09PXguY3NzKGUsImJveFNpemluZyIsITEsaSksaSk6MCl9fX0pLHgo
ZnVuY3Rpb24oKXt4LnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KHguY3NzSG9va3MubWFy
Z2luUmlnaHQ9e2dldDpmdW5jdGlvbihlLHQpe3JldHVybiB0P3guc3dhcChlLHtkaXNwbGF5OiJp
bmxpbmUtYmxvY2sifSx2dCxbZSwibWFyZ2luUmlnaHQiXSk6dW5kZWZpbmVkfX0pLCF4LnN1cHBv
cnQucGl4ZWxQb3NpdGlvbiYmeC5mbi5wb3NpdGlvbiYmeC5lYWNoKFsidG9wIiwibGVmdCJdLGZ1
bmN0aW9uKGUsdCl7eC5jc3NIb29rc1t0XT17Z2V0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4/KG49
dnQoZSx0KSxDdC50ZXN0KG4pP3goZSkucG9zaXRpb24oKVt0XSsicHgiOm4pOnVuZGVmaW5lZH19
fSl9KSx4LmV4cHImJnguZXhwci5maWx0ZXJzJiYoeC5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0
aW9uKGUpe3JldHVybiAwPj1lLm9mZnNldFdpZHRoJiYwPj1lLm9mZnNldEhlaWdodH0seC5leHBy
LmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4heC5leHByLmZpbHRlcnMuaGlkZGVu
KGUpfSkseC5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rp
b24oZSx0KXt4LmNzc0hvb2tzW2UrdF09e2V4cGFuZDpmdW5jdGlvbihuKXt2YXIgcj0wLGk9e30s
bz0ic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgiICIpOltuXTtmb3IoOzQ+cjtyKyspaVtlK2p0
W3JdK3RdPW9bcl18fG9bci0yXXx8b1swXTtyZXR1cm4gaX19LHd0LnRlc3QoZSl8fCh4LmNzc0hv
b2tzW2UrdF0uc2V0PU90KX0pO3ZhciBXdD0vJTIwL2csJHQ9L1xbXF0kLyxCdD0vXHI/XG4vZyxJ
dD0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksenQ9L14oPzppbnB1dHxz
ZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO3guZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24o
KXtyZXR1cm4geC5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpm
dW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXgucHJvcCh0aGlzLCJl
bGVtZW50cyIpO3JldHVybiBlP3gubWFrZUFycmF5KGUpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24o
KXt2YXIgZT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIXgodGhpcykuaXMoIjpkaXNhYmxl
ZCIpJiZ6dC50ZXN0KHRoaXMubm9kZU5hbWUpJiYhSXQudGVzdChlKSYmKHRoaXMuY2hlY2tlZHx8
IW90LnRlc3QoZSkpfSkubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG49eCh0aGlzKS52YWwoKTtyZXR1
cm4gbnVsbD09bj9udWxsOnguaXNBcnJheShuKT94Lm1hcChuLGZ1bmN0aW9uKGUpe3JldHVybntu
YW1lOnQubmFtZSx2YWx1ZTplLnJlcGxhY2UoQnQsIlxyXG4iKX19KTp7bmFtZTp0Lm5hbWUsdmFs
dWU6bi5yZXBsYWNlKEJ0LCJcclxuIil9fSkuZ2V0KCl9fSkseC5wYXJhbT1mdW5jdGlvbihlLHQp
e3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3Q9eC5pc0Z1bmN0aW9uKHQpP3QoKTpudWxsPT10
PyIiOnQscltyLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21w
b25lbnQodCl9O2lmKHQ9PT11bmRlZmluZWQmJih0PXguYWpheFNldHRpbmdzJiZ4LmFqYXhTZXR0
aW5ncy50cmFkaXRpb25hbCkseC5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIXguaXNQbGFpbk9iamVj
dChlKSl4LmVhY2goZSxmdW5jdGlvbigpe2kodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBm
b3IobiBpbiBlKV90KG4sZVtuXSx0LGkpO3JldHVybiByLmpvaW4oIiYiKS5yZXBsYWNlKFd0LCIr
Iil9O2Z1bmN0aW9uIF90KGUsdCxuLHIpe3ZhciBpO2lmKHguaXNBcnJheSh0KSl4LmVhY2godCxm
dW5jdGlvbih0LGkpe258fCR0LnRlc3QoZSk/cihlLGkpOl90KGUrIlsiKygib2JqZWN0Ij09dHlw
ZW9mIGk/dDoiIikrIl0iLGksbixyKX0pO2Vsc2UgaWYobnx8Im9iamVjdCIhPT14LnR5cGUodCkp
cihlLHQpO2Vsc2UgZm9yKGkgaW4gdClfdChlKyJbIitpKyJdIix0W2ldLG4scil9eC5lYWNoKCJi
bHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGlj
ayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0
IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXBy
ZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7eC5m
blt0XT1mdW5jdGlvbihlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbih0LG51
bGwsZSxuKTp0aGlzLnRyaWdnZXIodCl9fSkseC5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUs
dCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfSxiaW5kOmZ1bmN0
aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUs
dCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KQorK30sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4s
cil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3Jl
dHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8
IioqIixuKX19KTt2YXIgWHQsVXQsWXQ9eC5ub3coKSxWdD0vXD8vLEd0PS8jLiokLyxKdD0vKFs/
Jl0pXz1bXiZdKi8sUXQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxLdD0vXig/OmFib3V0
fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxadD0vXig/
OkdFVHxIRUFEKSQvLGVuPS9eXC9cLy8sdG49L14oW1x3ListXSs6KSg/OlwvXC8oW15cLz8jOl0q
KSg/OjooXGQrKXwpfCkvLG5uPXguZm4ubG9hZCxybj17fSxvbj17fSxzbj0iKi8iLmNvbmNhdCgi
KiIpO3RyeXtVdD1pLmhyZWZ9Y2F0Y2goYW4pe1V0PW8uY3JlYXRlRWxlbWVudCgiYSIpLFV0Lmhy
ZWY9IiIsVXQ9VXQuaHJlZn1YdD10bi5leGVjKFV0LnRvTG93ZXJDYXNlKCkpfHxbXTtmdW5jdGlv
biB1bihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXsic3RyaW5nIiE9dHlwZW9mIHQmJihuPXQsdD0i
KiIpO3ZhciByLGk9MCxvPXQudG9Mb3dlckNhc2UoKS5tYXRjaCh3KXx8W107aWYoeC5pc0Z1bmN0
aW9uKG4pKXdoaWxlKHI9b1tpKytdKSIrIj09PXJbMF0/KHI9ci5zbGljZSgxKXx8IioiLChlW3Jd
PWVbcl18fFtdKS51bnNoaWZ0KG4pKTooZVtyXT1lW3JdfHxbXSkucHVzaChuKX19ZnVuY3Rpb24g
bG4oZSx0LG4scil7dmFyIGk9e30sbz1lPT09b247ZnVuY3Rpb24gcyhhKXt2YXIgdTtyZXR1cm4g
aVthXT0hMCx4LmVhY2goZVthXXx8W10sZnVuY3Rpb24oZSxhKXt2YXIgbD1hKHQsbixyKTtyZXR1
cm4ic3RyaW5nIiE9dHlwZW9mIGx8fG98fGlbbF0/bz8hKHU9bCk6dW5kZWZpbmVkOih0LmRhdGFU
eXBlcy51bnNoaWZ0KGwpLHMobCksITEpfSksdX1yZXR1cm4gcyh0LmRhdGFUeXBlc1swXSl8fCFp
WyIqIl0mJnMoIioiKX1mdW5jdGlvbiBjbihlLHQpe3ZhciBuLHIsaT14LmFqYXhTZXR0aW5ncy5m
bGF0T3B0aW9uc3x8e307Zm9yKG4gaW4gdCl0W25dIT09dW5kZWZpbmVkJiYoKGlbbl0/ZTpyfHwo
cj17fSkpW25dPXRbbl0pO3JldHVybiByJiZ4LmV4dGVuZCghMCxlLHIpLGV9eC5mbi5sb2FkPWZ1
bmN0aW9uKGUsdCxuKXtpZigic3RyaW5nIiE9dHlwZW9mIGUmJm5uKXJldHVybiBubi5hcHBseSh0
aGlzLGFyZ3VtZW50cyk7dmFyIHIsaSxvLHM9dGhpcyxhPWUuaW5kZXhPZigiICIpO3JldHVybiBh
Pj0wJiYocj1lLnNsaWNlKGEpLGU9ZS5zbGljZSgwLGEpKSx4LmlzRnVuY3Rpb24odCk/KG49dCx0
PXVuZGVmaW5lZCk6dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYoaT0iUE9TVCIpLHMubGVuZ3RoPjAm
JnguYWpheCh7dXJsOmUsdHlwZTppLGRhdGFUeXBlOiJodG1sIixkYXRhOnR9KS5kb25lKGZ1bmN0
aW9uKGUpe289YXJndW1lbnRzLHMuaHRtbChyP3goIjxkaXY+IikuYXBwZW5kKHgucGFyc2VIVE1M
KGUpKS5maW5kKHIpOmUpfSkuY29tcGxldGUobiYmZnVuY3Rpb24oZSx0KXtzLmVhY2gobixvfHxb
ZS5yZXNwb25zZVRleHQsdCxlXSl9KSx0aGlzfSx4LmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3Rv
cCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxm
dW5jdGlvbihlLHQpe3guZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSx4
LmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1
cmw6VXQsdHlwZToiR0VUIixpc0xvY2FsOkt0LnRlc3QoWHRbMV0pLGdsb2JhbDohMCxwcm9jZXNz
RGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxl
bmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6c24sdGV4dDoidGV4dC9wbGFpbiIs
aHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFw
cGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRt
bDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0
ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRl
eHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjp4LnBhcnNlSlNPTiwidGV4dCB4
bWwiOngucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1
cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P2NuKGNuKGUseC5hamF4U2V0dGluZ3MpLHQpOmNuKHgu
YWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOnVuKHJuKSxhamF4VHJhbnNwb3J0OnVuKG9u
KSxhamF4OmZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBlJiYodD1lLGU9dW5kZWZpbmVk
KSx0PXR8fHt9O3ZhciBuLHIsaSxvLHMsYSx1LGwsYz14LmFqYXhTZXR1cCh7fSx0KSxwPWMuY29u
dGV4dHx8YyxmPWMuY29udGV4dCYmKHAubm9kZVR5cGV8fHAuanF1ZXJ5KT94KHApOnguZXZlbnQs
aD14LkRlZmVycmVkKCksZD14LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxnPWMuc3RhdHVzQ29k
ZXx8e30sbT17fSx5PXt9LHY9MCxiPSJjYW5jZWxlZCIsVD17cmVhZHlTdGF0ZTowLGdldFJlc3Bv
bnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKDI9PT12KXtpZighbyl7bz17fTt3aGlsZSh0
PVF0LmV4ZWMoaSkpb1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1vW2UudG9Mb3dlckNhc2Uo
KV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24o
KXtyZXR1cm4gMj09PXY/aTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7dmFy
IG49ZS50b0xvd2VyQ2FzZSgpO3JldHVybiB2fHwoZT15W25dPXlbbl18fGUsbVtlXT10KSx0aGlz
fSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiB2fHwoYy5taW1lVHlwZT1lKSx0
aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoMj52KWZvcih0IGluIGUp
Z1t0XT1bZ1t0XSxlW3RdXTtlbHNlIFQuYWx3YXlzKGVbVC5zdGF0dXNdKTtyZXR1cm4gdGhpc30s
YWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8YjtyZXR1cm4gbiYmbi5hYm9ydCh0KSxrKDAsdCks
dGhpc319O2lmKGgucHJvbWlzZShUKS5jb21wbGV0ZT1kLmFkZCxULnN1Y2Nlc3M9VC5kb25lLFQu
ZXJyb3I9VC5mYWlsLGMudXJsPSgoZXx8Yy51cmx8fFV0KSsiIikucmVwbGFjZShHdCwiIikucmVw
bGFjZShlbixYdFsxXSsiLy8iKSxjLnR5cGU9dC5tZXRob2R8fHQudHlwZXx8Yy5tZXRob2R8fGMu
dHlwZSxjLmRhdGFUeXBlcz14LnRyaW0oYy5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1h
dGNoKHcpfHxbIiJdLG51bGw9PWMuY3Jvc3NEb21haW4mJihhPXRuLmV4ZWMoYy51cmwudG9Mb3dl
ckNhc2UoKSksYy5jcm9zc0RvbWFpbj0hKCFhfHxhWzFdPT09WHRbMV0mJmFbMl09PT1YdFsyXSYm
KGFbM118fCgiaHR0cDoiPT09YVsxXT8iODAiOiI0NDMiKSk9PT0oWHRbM118fCgiaHR0cDoiPT09
WHRbMV0/IjgwIjoiNDQzIikpKSksYy5kYXRhJiZjLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlw
ZW9mIGMuZGF0YSYmKGMuZGF0YT14LnBhcmFtKGMuZGF0YSxjLnRyYWRpdGlvbmFsKSksbG4ocm4s
Yyx0LFQpLDI9PT12KXJldHVybiBUO3U9Yy5nbG9iYWwsdSYmMD09PXguYWN0aXZlKysmJnguZXZl
bnQudHJpZ2dlcigiYWpheFN0YXJ0IiksYy50eXBlPWMudHlwZS50b1VwcGVyQ2FzZSgpLGMuaGFz
Q29udGVudD0hWnQudGVzdChjLnR5cGUpLHI9Yy51cmwsYy5oYXNDb250ZW50fHwoYy5kYXRhJiYo
cj1jLnVybCs9KFZ0LnRlc3Qocik/IiYiOiI/IikrYy5kYXRhLGRlbGV0ZSBjLmRhdGEpLGMuY2Fj
aGU9PT0hMSYmKGMudXJsPUp0LnRlc3Qocik/ci5yZXBsYWNlKEp0LCIkMV89IitZdCsrKTpyKyhW
dC50ZXN0KHIpPyImIjoiPyIpKyJfPSIrWXQrKykpLGMuaWZNb2RpZmllZCYmKHgubGFzdE1vZGlm
aWVkW3JdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIix4Lmxhc3RNb2Rp
ZmllZFtyXSkseC5ldGFnW3JdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHgu
ZXRhZ1tyXSkpLChjLmRhdGEmJmMuaGFzQ29udGVudCYmYy5jb250ZW50VHlwZSE9PSExfHx0LmNv
bnRlbnRUeXBlKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGMuY29udGVudFR5
cGUpLFQuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixjLmRhdGFUeXBlc1swXSYmYy5hY2NlcHRz
W2MuZGF0YVR5cGVzWzBdXT9jLmFjY2VwdHNbYy5kYXRhVHlwZXNbMF1dKygiKiIhPT1jLmRhdGFU
eXBlc1swXT8iLCAiK3NuKyI7IHE9MC4wMSI6IiIpOmMuYWNjZXB0c1siKiJdKTtmb3IobCBpbiBj
LmhlYWRlcnMpVC5zZXRSZXF1ZXN0SGVhZGVyKGwsYy5oZWFkZXJzW2xdKTtpZihjLmJlZm9yZVNl
bmQmJihjLmJlZm9yZVNlbmQuY2FsbChwLFQsYyk9PT0hMXx8Mj09PXYpKXJldHVybiBULmFib3J0
KCk7Yj0iYWJvcnQiO2ZvcihsIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KVRbbF0o
Y1tsXSk7aWYobj1sbihvbixjLHQsVCkpe1QucmVhZHlTdGF0ZT0xLHUmJmYudHJpZ2dlcigiYWph
eFNlbmQiLFtULGNdKSxjLmFzeW5jJiZjLnRpbWVvdXQ+MCYmKHM9c2V0VGltZW91dChmdW5jdGlv
bigpe1QuYWJvcnQoInRpbWVvdXQiKX0sYy50aW1lb3V0KSk7dHJ5e3Y9MSxuLnNlbmQobSxrKX1j
YXRjaChDKXtpZighKDI+dikpdGhyb3cgQztrKC0xLEMpfX1lbHNlIGsoLTEsIk5vIFRyYW5zcG9y
dCIpO2Z1bmN0aW9uIGsoZSx0LG8sYSl7dmFyIGwsbSx5LGIsdyxDPXQ7MiE9PXYmJih2PTIscyYm
Y2xlYXJUaW1lb3V0KHMpLG49dW5kZWZpbmVkLGk9YXx8IiIsVC5yZWFkeVN0YXRlPWU+MD80OjAs
bD1lPj0yMDAmJjMwMD5lfHwzMDQ9PT1lLG8mJihiPXBuKGMsVCxvKSksYj1mbihjLGIsVCxsKSxs
PyhjLmlmTW9kaWZpZWQmJih3PVQuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3
JiYoeC5sYXN0TW9kaWZpZWRbcl09dyksdz1ULmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYm
KHguZXRhZ1tyXT13KSksMjA0PT09ZXx8IkhFQUQiPT09Yy50eXBlP0M9Im5vY29udGVudCI6MzA0
PT09ZT9DPSJub3Rtb2RpZmllZCI6KEM9Yi5zdGF0ZSxtPWIuZGF0YSx5PWIuZXJyb3IsbD0heSkp
Oih5PUMsKGV8fCFDKSYmKEM9ImVycm9yIiwwPmUmJihlPTApKSksVC5zdGF0dXM9ZSxULnN0YXR1
c1RleHQ9KHR8fEMpKyIiLGw/aC5yZXNvbHZlV2l0aChwLFttLEMsVF0pOmgucmVqZWN0V2l0aChw
LFtULEMseV0pLFQuc3RhdHVzQ29kZShnKSxnPXVuZGVmaW5lZCx1JiZmLnRyaWdnZXIobD8iYWph
eFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFtULGMsbD9tOnldKSxkLmZpcmVXaXRoKHAsW1QsQ10pLHUm
JihmLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW1QsY10pLC0teC5hY3RpdmV8fHguZXZlbnQudHJp
Z2dlcigiYWpheFN0b3AiKSkpfXJldHVybiBUfSxnZXRKU09OOmZ1bmN0aW9uKGUsdCxuKXtyZXR1
cm4geC5nZXQoZSx0LG4sImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHgu
Z2V0KGUsdW5kZWZpbmVkLHQsInNjcmlwdCIpfX0pLHguZWFjaChbImdldCIsInBvc3QiXSxmdW5j
dGlvbihlLHQpe3hbdF09ZnVuY3Rpb24oZSxuLHIsaSl7cmV0dXJuIHguaXNGdW5jdGlvbihuKSYm
KGk9aXx8cixyPW4sbj11bmRlZmluZWQpLHguYWpheCh7dXJsOmUsdHlwZTp0LGRhdGFUeXBlOmks
ZGF0YTpuLHN1Y2Nlc3M6cn0pfX0pO2Z1bmN0aW9uIHBuKGUsdCxuKXt2YXIgcixpLG8scyxhPWUu
Y29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQoKSxyPT09dW5k
ZWZpbmVkJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUi
KSk7aWYocilmb3IoaSBpbiBhKWlmKGFbaV0mJmFbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2Jy
ZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZl
cnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31zfHwocz1pKX1vPW98fHN9cmV0dXJuIG8/KG8h
PT11WzBdJiZ1LnVuc2hpZnQobyksbltvXSk6dW5kZWZpbmVkfWZ1bmN0aW9uIGZuKGUsdCxuLHIp
e3ZhciBpLG8scyxhLHUsbD17fSxjPWUuZGF0YVR5cGVzLnNsaWNlKCk7aWYoY1sxXSlmb3IocyBp
biBlLmNvbnZlcnRlcnMpbFtzLnRvTG93ZXJDYXNlKCldPWUuY29udmVydGVyc1tzXTtvPWMuc2hp
ZnQoKTt3aGlsZShvKWlmKGUucmVzcG9uc2VGaWVsZHNbb10mJihuW2UucmVzcG9uc2VGaWVsZHNb
b11dPXQpLCF1JiZyJiZlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUp
KSx1PW8sbz1jLnNoaWZ0KCkpaWYoIioiPT09bylvPXU7ZWxzZSBpZigiKiIhPT11JiZ1IT09byl7
aWYocz1sW3UrIiAiK29dfHxsWyIqICIrb10sIXMpZm9yKGkgaW4gbClpZihhPWkuc3BsaXQoIiAi
KSxhWzFdPT09byYmKHM9bFt1KyIgIithWzBdXXx8bFsiKiAiK2FbMF1dKSl7cz09PSEwP3M9bFtp
XTpsW2ldIT09ITAmJihvPWFbMF0sYy51bnNoaWZ0KGFbMV0pKTticmVha31pZihzIT09ITApaWYo
cyYmZVsidGhyb3dzIl0pdD1zKHQpO2Vsc2UgdHJ5e3Q9cyh0KX1jYXRjaChwKXtyZXR1cm57c3Rh
dGU6InBhcnNlcmVycm9yIixlcnJvcjpzP3A6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK3UrIiB0byAi
K299fX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6dH19eC5hamF4U2V0dXAoe2FjY2VwdHM6
e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNh
dGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2Ny
aXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5j
dGlvbihlKXtyZXR1cm4geC5nbG9iYWxFdmFsKGUpLGV9fX0pLHguYWpheFByZWZpbHRlcigic2Ny
aXB0IixmdW5jdGlvbihlKXtlLmNhY2hlPT09dW5kZWZpbmVkJiYoZS5jYWNoZT0hMSksZS5jcm9z
c0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSx4LmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rp
b24oZSl7aWYoZS5jcm9zc0RvbWFpbil7dmFyIHQsbjtyZXR1cm57c2VuZDpmdW5jdGlvbihyLGkp
e3Q9eCgiPHNjcmlwdD4iKS5wcm9wKHthc3luYzohMCxjaGFyc2V0OmUuc2NyaXB0Q2hhcnNldCxz
cmM6ZS51cmx9KS5vbigibG9hZCBlcnJvciIsbj1mdW5jdGlvbihlKXt0LnJlbW92ZSgpLG49bnVs
bCxlJiZpKCJlcnJvciI9PT1lLnR5cGU/NDA0OjIwMCxlLnR5cGUpfSksby5oZWFkLmFwcGVuZENo
aWxkKHRbMF0pfSxhYm9ydDpmdW5jdGlvbigpe24mJm4oKX19fX0pO3ZhciBobj1bXSxkbj0vKD0p
XD8oPz0mfCQpfFw/XD8vO3guYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJh
Y2s6ZnVuY3Rpb24oKXt2YXIgZT1obi5wb3AoKXx8eC5leHBhbmRvKyJfIitZdCsrO3JldHVybiB0
aGlzW2VdPSEwLGV9fSkseC5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbih0LG4s
cil7dmFyIGksbyxzLGE9dC5qc29ucCE9PSExJiYoZG4udGVzdCh0LnVybCk/InVybCI6InN0cmlu
ZyI9PXR5cGVvZiB0LmRhdGEmJiEodC5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0
aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZkbi50ZXN0KHQuZGF0YSkmJiJkYXRhIik7cmV0
dXJuIGF8fCJqc29ucCI9PT10LmRhdGFUeXBlc1swXT8oaT10Lmpzb25wQ2FsbGJhY2s9eC5pc0Z1
bmN0aW9uKHQuanNvbnBDYWxsYmFjayk/dC5qc29ucENhbGxiYWNrKCk6dC5qc29ucENhbGxiYWNr
LGE/dFthXT10W2FdLnJlcGxhY2UoZG4sIiQxIitpKTp0Lmpzb25wIT09ITEmJih0LnVybCs9KFZ0
LnRlc3QodC51cmwpPyImIjoiPyIpK3QuanNvbnArIj0iK2kpLHQuY29udmVydGVyc1sic2NyaXB0
IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBzfHx4LmVycm9yKGkrIiB3YXMgbm90IGNhbGxlZCIp
LHNbMF19LHQuZGF0YVR5cGVzWzBdPSJqc29uIixvPWVbaV0sZVtpXT1mdW5jdGlvbigpe3M9YXJn
dW1lbnRzfSxyLmFsd2F5cyhmdW5jdGlvbigpe2VbaV09byx0W2ldJiYodC5qc29ucENhbGxiYWNr
PW4uanNvbnBDYWxsYmFjayxobi5wdXNoKGkpKSxzJiZ4LmlzRnVuY3Rpb24obykmJm8oc1swXSks
cz1vPXVuZGVmaW5lZH0pLCJzY3JpcHQiKTp1bmRlZmluZWR9KSx4LmFqYXhTZXR0aW5ncy54aHI9
ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH1jYXRjaChlKXt9fTt2YXIg
Z249eC5hamF4U2V0dGluZ3MueGhyKCksbW49ezA6MjAwLDEyMjM6MjA0fSx5bj0wLHZuPXt9O2Uu
QWN0aXZlWE9iamVjdCYmeChlKS5vbigidW5sb2FkIixmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB2
bil2bltlXSgpO3ZuPXVuZGVmaW5lZH0pLHguc3VwcG9ydC5jb3JzPSEhZ24mJiJ3aXRoQ3JlZGVu
dGlhbHMiaW4gZ24seC5zdXBwb3J0LmFqYXg9Z249ISFnbix4LmFqYXhUcmFuc3BvcnQoZnVuY3Rp
b24oZSl7dmFyIHQ7cmV0dXJuIHguc3VwcG9ydC5jb3JzfHxnbiYmIWUuY3Jvc3NEb21haW4/e3Nl
bmQ6ZnVuY3Rpb24obixyKXt2YXIgaSxvLHM9ZS54aHIoKTtpZihzLm9wZW4oZS50eXBlLGUudXJs
LGUuYXN5bmMsZS51c2VybmFtZSxlLnBhc3N3b3JkKSxlLnhockZpZWxkcylmb3IoaSBpbiBlLnho
ckZpZWxkcylzW2ldPWUueGhyRmllbGRzW2ldO2UubWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlw
ZSYmcy5vdmVycmlkZU1pbWVUeXBlKGUubWltZVR5cGUpLGUuY3Jvc3NEb21haW58fG5bIlgtUmVx
dWVzdGVkLVdpdGgiXXx8KG5bIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtm
b3IoaSBpbiBuKXMuc2V0UmVxdWVzdEhlYWRlcihpLG5baV0pO3Q9ZnVuY3Rpb24oZSl7cmV0dXJu
IGZ1bmN0aW9uKCl7dCYmKGRlbGV0ZSB2bltvXSx0PXMub25sb2FkPXMub25lcnJvcj1udWxsLCJh
Ym9ydCI9PT1lP3MuYWJvcnQoKToiZXJyb3IiPT09ZT9yKHMuc3RhdHVzfHw0MDQscy5zdGF0dXNU
ZXh0KTpyKG1uW3Muc3RhdHVzXXx8cy5zdGF0dXMscy5zdGF0dXNUZXh0LCJzdHJpbmciPT10eXBl
b2Ygcy5yZXNwb25zZVRleHQ/e3RleHQ6cy5yZXNwb25zZVRleHR9OnVuZGVmaW5lZCxzLmdldEFs
bFJlc3BvbnNlSGVhZGVycygpKSl9fSxzLm9ubG9hZD10KCkscy5vbmVycm9yPXQoImVycm9yIiks
dD12bltvPXluKytdPXQoImFib3J0Iikscy5zZW5kKGUuaGFzQ29udGVudCYmZS5kYXRhfHxudWxs
KX0sYWJvcnQ6ZnVuY3Rpb24oKXt0JiZ0KCl9fTp1bmRlZmluZWR9KTt2YXIgeG4sYm4sd249L14o
Pzp0b2dnbGV8c2hvd3xoaWRlKSQvLFRuPVJlZ0V4cCgiXig/OihbKy1dKT18KSgiK2IrIikoW2Et
eiVdKikkIiwiaSIpLENuPS9xdWV1ZUhvb2tzJC8sa249W0FuXSxObj17IioiOltmdW5jdGlvbihl
LHQpe3ZhciBuPXRoaXMuY3JlYXRlVHdlZW4oZSx0KSxyPW4uY3VyKCksaT1Ubi5leGVjKHQpLG89
aSYmaVszXXx8KHguY3NzTnVtYmVyW2VdPyIiOiJweCIpLHM9KHguY3NzTnVtYmVyW2VdfHwicHgi
IT09byYmK3IpJiZUbi5leGVjKHguY3NzKG4uZWxlbSxlKSksYT0xLHU9MjA7aWYocyYmc1szXSE9
PW8pe289b3x8c1szXSxpPWl8fFtdLHM9K3J8fDE7ZG8gYT1hfHwiLjUiLHMvPWEseC5zdHlsZShu
LmVsZW0sZSxzK28pO3doaWxlKGEhPT0oYT1uLmN1cigpL3IpJiYxIT09YSYmLS11KX1yZXR1cm4g
aSYmKHM9bi5zdGFydD0rc3x8K3J8fDAsbi51bml0PW8sbi5lbmQ9aVsxXT9zKyhpWzFdKzEpKmlb
Ml06K2lbMl0pLG59XX07ZnVuY3Rpb24gRW4oKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigp
e3huPXVuZGVmaW5lZH0pLHhuPXgubm93KCl9ZnVuY3Rpb24gU24oZSx0LG4pe3ZhciByLGk9KE5u
W3RdfHxbXSkuY29uY2F0KE5uWyIqIl0pLG89MCxzPWkubGVuZ3RoO2Zvcig7cz5vO28rKylpZihy
PWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gam4oZSx0LG4pe3ZhciByLGksbz0w
LHM9a24ubGVuZ3RoLGE9eC5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVs
ZW19KSx1PWZ1bmN0aW9uKCl7aWYoaSlyZXR1cm4hMTt2YXIgdD14bnx8RW4oKSxuPU1hdGgubWF4
KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi10KSxyPW4vbC5kdXJhdGlvbnx8MCxvPTEtcixzPTAs
dT1sLnR3ZWVucy5sZW5ndGg7Zm9yKDt1PnM7cysrKWwudHdlZW5zW3NdLnJ1bihvKTtyZXR1cm4g
YS5ub3RpZnlXaXRoKGUsW2wsbyxuXSksMT5vJiZ1P246KGEucmVzb2x2ZVdpdGgoZSxbbF0pLCEx
KX0sbD1hLnByb21pc2Uoe2VsZW06ZSxwcm9wczp4LmV4dGVuZCh7fSx0KSxvcHRzOnguZXh0ZW5k
KCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9w
dGlvbnM6bixzdGFydFRpbWU6eG58fEVuKCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10s
Y3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj14LlR3ZWVuKGUsbC5vcHRzLHQsbixsLm9w
dHMuc3BlY2lhbEVhc2luZ1t0XXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2go
cikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9sLnR3ZWVucy5sZW5ndGg6MDtpZihp
KXJldHVybiB0aGlzO2ZvcihpPSEwO3I+bjtuKyspbC50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0
P2EucmVzb2x2ZVdpdGgoZSxbbCx0XSk6YS5yZWplY3RXaXRoKGUsW2wsdF0pLHRoaXN9fSksYz1s
LnByb3BzO2ZvcihEbihjLGwub3B0cy5zcGVjaWFsRWFzaW5nKTtzPm87bysrKWlmKHI9a25bb10u
Y2FsbChsLGUsYyxsLm9wdHMpKXJldHVybiByO3JldHVybiB4Lm1hcChjLFNuLGwpLHguaXNGdW5j
dGlvbihsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChlLGwpLHguZngudGltZXIoeC5l
eHRlbmQodSx7ZWxlbTplLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbC5wcm9ncmVzcyhs
Lm9wdHMucHJvZ3Jlc3MpLmRvbmUobC5vcHRzLmRvbmUsbC5vcHRzLmNvbXBsZXRlKS5mYWlsKGwu
b3B0cy5mYWlsKS5hbHdheXMobC5vcHRzLmFsd2F5cyl9ZnVuY3Rpb24gRG4oZSx0KXt2YXIgbixy
LGksbyxzO2ZvcihuIGluIGUpaWYocj14LmNhbWVsQ2FzZShuKSxpPXRbcl0sbz1lW25dLHguaXNB
cnJheShvKSYmKGk9b1sxXSxvPWVbbl09b1swXSksbiE9PXImJihlW3JdPW8sZGVsZXRlIGVbbl0p
LHM9eC5jc3NIb29rc1tyXSxzJiYiZXhwYW5kImluIHMpe289cy5leHBhbmQobyksZGVsZXRlIGVb
cl07Zm9yKG4gaW4gbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKX1lbHNlIHRbcl09aX14LkFu
aW1hdGlvbj14LmV4dGVuZChqbix7dHdlZW5lcjpmdW5jdGlvbihlLHQpe3guaXNGdW5jdGlvbihl
KT8odD1lLGU9WyIqIl0pOmU9ZS5zcGxpdCgiICIpO3ZhciBuLHI9MCxpPWUubGVuZ3RoO2Zvcig7
aT5yO3IrKyluPWVbcl0sTm5bbl09Tm5bbl18fFtdLE5uW25dLnVuc2hpZnQodCl9LHByZWZpbHRl
cjpmdW5jdGlvbihlLHQpe3Q/a24udW5zaGlmdChlKTprbi5wdXNoKGUpfX0pO2Z1bmN0aW9uIEFu
KGUsdCxuKXt2YXIgcixpLG8scyxhLHUsbD10aGlzLGM9e30scD1lLnN0eWxlLGY9ZS5ub2RlVHlw
ZSYmTHQoZSksaD1xLmdldChlLCJmeHNob3ciKTtuLnF1ZXVlfHwoYT14Ll9xdWV1ZUhvb2tzKGUs
ImZ4IiksbnVsbD09YS51bnF1ZXVlZCYmKGEudW5xdWV1ZWQ9MCx1PWEuZW1wdHkuZmlyZSxhLmVt
cHR5LmZpcmU9ZnVuY3Rpb24oKXthLnVucXVldWVkfHx1KCl9KSxhLnVucXVldWVkKyssbC5hbHdh
eXMoZnVuY3Rpb24oKXtsLmFsd2F5cyhmdW5jdGlvbigpe2EudW5xdWV1ZWQtLSx4LnF1ZXVlKGUs
ImZ4IikubGVuZ3RofHxhLmVtcHR5LmZpcmUoKX0pfSkpLDE9PT1lLm5vZGVUeXBlJiYoImhlaWdo
dCJpbiB0fHwid2lkdGgiaW4gdCkmJihuLm92ZXJmbG93PVtwLm92ZXJmbG93LHAub3ZlcmZsb3dY
LHAub3ZlcmZsb3dZXSwiaW5saW5lIj09PXguY3NzKGUsImRpc3BsYXkiKSYmIm5vbmUiPT09eC5j
c3MoZSwiZmxvYXQiKSYmKHAuZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihw
Lm92ZXJmbG93PSJoaWRkZW4iLGwuYWx3YXlzKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1uLm92ZXJm
bG93WzBdLHAub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9bi5vdmVyZmxvd1sy
XX0pKTtmb3IociBpbiB0KWlmKGk9dFtyXSx3bi5leGVjKGkpKXtpZihkZWxldGUgdFtyXSxvPW98
fCJ0b2dnbGUiPT09aSxpPT09KGY/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWl8fCFofHxo
W3JdPT09dW5kZWZpbmVkKWNvbnRpbnVlO2Y9ITB9Y1tyXT1oJiZoW3JdfHx4LnN0eWxlKGUscil9
aWYoIXguaXNFbXB0eU9iamVjdChjKSl7aD8iaGlkZGVuImluIGgmJihmPWguaGlkZGVuKTpoPXEu
YWNjZXNzKGUsImZ4c2hvdyIse30pLG8mJihoLmhpZGRlbj0hZiksZj94KGUpLnNob3coKTpsLmRv
bmUoZnVuY3Rpb24oKXt4KGUpLmhpZGUoKX0pLGwuZG9uZShmdW5jdGlvbigpe3ZhciB0O3EucmVt
b3ZlKGUsImZ4c2hvdyIpO2Zvcih0IGluIGMpeC5zdHlsZShlLHQsY1t0XSl9KTtmb3IociBpbiBj
KXM9U24oZj9oW3JdOjAscixsKSxyIGluIGh8fChoW3JdPXMuc3RhcnQsZiYmKHMuZW5kPXMuc3Rh
cnQscy5zdGFydD0id2lkdGgiPT09cnx8ImhlaWdodCI9PT1yPzE6MCkpfX1mdW5jdGlvbiBMbihl
LHQsbixyLGkpe3JldHVybiBuZXcgTG4ucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX14LlR3ZWVu
PUxuLExuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TG4saW5pdDpmdW5jdGlvbihlLHQsbixyLGks
byl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8InN3aW5nIix0aGlzLm9w
dGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVu
aXQ9b3x8KHguY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1Mbi5w
cm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6TG4ucHJvcEhv
b2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49TG4ucHJvcEhv
b2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMucG9zPXQ9dGhpcy5vcHRpb25zLmR1cmF0aW9uP3gu
ZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9w
dGlvbnMuZHVyYXRpb24pOmUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5z
dGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0s
dGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6TG4ucHJvcEhvb2tzLl9kZWZhdWx0
LnNldCh0aGlzKSx0aGlzfX0sTG4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlPUxuLnByb3RvdHlw
ZSxMbi5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51
bGw9PWUuZWxlbVtlLnByb3BdfHxlLmVsZW0uc3R5bGUmJm51bGwhPWUuZWxlbS5zdHlsZVtlLnBy
b3BdPyh0PXguY3NzKGUuZWxlbSxlLnByb3AsIiIpLHQmJiJhdXRvIiE9PXQ/dDowKTplLmVsZW1b
ZS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGUpe3guZnguc3RlcFtlLnByb3BdP3guZnguc3RlcFtlLnBy
b3BdKGUpOmUuZWxlbS5zdHlsZSYmKG51bGwhPWUuZWxlbS5zdHlsZVt4LmNzc1Byb3BzW2UucHJv
cF1dfHx4LmNzc0hvb2tzW2UucHJvcF0pP3guc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVu
aXQpOmUuZWxlbVtlLnByb3BdPWUubm93fX19LExuLnByb3BIb29rcy5zY3JvbGxUb3A9TG4ucHJv
cEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxl
bS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0seC5lYWNoKFsidG9nZ2xlIiwi
c2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXguZm5bdF07eC5mblt0XT1mdW5jdGlv
bihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/bi5hcHBseSh0aGlz
LGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKHFuKHQsITApLGUscixpKX19KSx4LmZuLmV4dGVuZCh7
ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihMdCkuY3NzKCJvcGFj
aXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9LGFuaW1hdGU6
ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9eC5pc0VtcHR5T2JqZWN0KGUpLG89eC5zcGVlZCh0LG4s
cikscz1mdW5jdGlvbigpe3ZhciB0PWpuKHRoaXMseC5leHRlbmQoe30sZSksbyk7KGl8fHEuZ2V0
KHRoaXMsImZpbmlzaCIpKSYmdC5zdG9wKCEwKX07cmV0dXJuIHMuZmluaXNoPXMsaXx8by5xdWV1
ZT09PSExP3RoaXMuZWFjaChzKTp0aGlzLnF1ZXVlKG8ucXVldWUscyl9LHN0b3A6ZnVuY3Rpb24o
ZSx0LG4pe3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RvcDtkZWxldGUgZS5zdG9wLHQobil9
O3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKG49dCx0PWUsZT11bmRlZmluZWQpLHQmJmUhPT0h
MSYmdGhpcy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0hMCxp
PW51bGwhPWUmJmUrInF1ZXVlSG9va3MiLG89eC50aW1lcnMscz1xLmdldCh0aGlzKTtpZihpKXNb
aV0mJnNbaV0uc3RvcCYmcihzW2ldKTtlbHNlIGZvcihpIGluIHMpc1tpXSYmc1tpXS5zdG9wJiZD
bi50ZXN0KGkpJiZyKHNbaV0pO2ZvcihpPW8ubGVuZ3RoO2ktLTspb1tpXS5lbGVtIT09dGhpc3x8
bnVsbCE9ZSYmb1tpXS5xdWV1ZSE9PWV8fChvW2ldLmFuaW0uc3RvcChuKSx0PSExLG8uc3BsaWNl
KGksMSkpOyh0fHwhbikmJnguZGVxdWV1ZSh0aGlzLGUpfSl9LGZpbmlzaDpmdW5jdGlvbihlKXty
ZXR1cm4gZSE9PSExJiYoZT1lfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxuPXEu
Z2V0KHRoaXMpLHI9bltlKyJxdWV1ZSJdLGk9bltlKyJxdWV1ZUhvb2tzIl0sbz14LnRpbWVycyxz
PXI/ci5sZW5ndGg6MDtmb3Iobi5maW5pc2g9ITAseC5xdWV1ZSh0aGlzLGUsW10pLGkmJmkuc3Rv
cCYmaS5zdG9wLmNhbGwodGhpcywhMCksdD1vLmxlbmd0aDt0LS07KW9bdF0uZWxlbT09PXRoaXMm
Jm9bdF0ucXVldWU9PT1lJiYob1t0XS5hbmltLnN0b3AoITApLG8uc3BsaWNlKHQsMSkpO2Zvcih0
PTA7cz50O3QrKylyW3RdJiZyW3RdLmZpbmlzaCYmclt0XS5maW5pc2guY2FsbCh0aGlzKTtkZWxl
dGUgbi5maW5pc2h9KX19KTtmdW5jdGlvbiBxbihlLHQpe3ZhciBuLHI9e2hlaWdodDplfSxpPTA7
Zm9yKHQ9dD8xOjA7ND5pO2krPTItdCluPWp0W2ldLHJbIm1hcmdpbiIrbl09clsicGFkZGluZyIr
bl09ZTtyZXR1cm4gdCYmKHIub3BhY2l0eT1yLndpZHRoPWUpLHJ9eC5lYWNoKHtzbGlkZURvd246
cW4oInNob3ciKSxzbGlkZVVwOnFuKCJoaWRlIiksc2xpZGVUb2dnbGU6cW4oInRvZ2dsZSIpLGZh
ZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xl
OntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oZSx0KXt4LmZuW2VdPWZ1bmN0aW9uKGUsbixy
KXtyZXR1cm4gdGhpcy5hbmltYXRlKHQsZSxuLHIpfX0pLHguc3BlZWQ9ZnVuY3Rpb24oZSx0LG4p
e3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT94LmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8
IW4mJnR8fHguaXNGdW5jdGlvbihlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYheC5p
c0Z1bmN0aW9uKHQpJiZ0fTtyZXR1cm4gci5kdXJhdGlvbj14LmZ4Lm9mZj8wOiJudW1iZXIiPT10
eXBlb2Ygci5kdXJhdGlvbj9yLmR1cmF0aW9uOnIuZHVyYXRpb24gaW4geC5meC5zcGVlZHM/eC5m
eC5zcGVlZHNbci5kdXJhdGlvbl06eC5meC5zcGVlZHMuX2RlZmF1bHQsKG51bGw9PXIucXVldWV8
fHIucXVldWU9PT0hMCkmJihyLnF1ZXVlPSJmeCIpLHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0
ZT1mdW5jdGlvbigpe3guaXNGdW5jdGlvbihyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1
ZSYmeC5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LHguZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5Q
SSkvMn19LHgudGltZXJzPVtdLHguZng9TG4ucHJvdG90eXBlLmluaXQseC5meC50aWNrPWZ1bmN0
aW9uKCl7dmFyIGUsdD14LnRpbWVycyxuPTA7Zm9yKHhuPXgubm93KCk7dC5sZW5ndGg+bjtuKysp
ZT10W25dLGUoKXx8dFtuXSE9PWV8fHQuc3BsaWNlKG4tLSwxKTt0Lmxlbmd0aHx8eC5meC5zdG9w
KCkseG49dW5kZWZpbmVkfSx4LmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2UoKSYmeC50aW1lcnMucHVz
aChlKSYmeC5meC5zdGFydCgpfSx4LmZ4LmludGVydmFsPTEzLHguZnguc3RhcnQ9ZnVuY3Rpb24o
KXtibnx8KGJuPXNldEludGVydmFsKHguZngudGljayx4LmZ4LmludGVydmFsKSl9LHguZnguc3Rv
cD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoYm4pLGJuPW51bGx9LHguZnguc3BlZWRzPXtzbG93
OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHguZnguc3RlcD17fSx4LmV4cHImJnguZXhwci5m
aWx0ZXJzJiYoeC5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHguZ3Jl
cCh4LnRpbWVycyxmdW5jdGlvbih0KXtyZXR1cm4gZT09PXQuZWxlbX0pLmxlbmd0aH0pLHguZm4u
b2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9PT11bmRlZmlu
ZWQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24odCl7eC5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsZSx0
KX0pO3ZhciB0LG4saT10aGlzWzBdLG89e3RvcDowLGxlZnQ6MH0scz1pJiZpLm93bmVyRG9jdW1l
bnQ7aWYocylyZXR1cm4gdD1zLmRvY3VtZW50RWxlbWVudCx4LmNvbnRhaW5zKHQsaSk/KHR5cGVv
ZiBpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9PXImJihvPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCkpLG49SG4ocykse3RvcDpvLnRvcCtuLnBhZ2VZT2Zmc2V0LXQuY2xpZW50VG9wLGxlZnQ6by5s
ZWZ0K24ucGFnZVhPZmZzZXQtdC5jbGllbnRMZWZ0fSk6b30seC5vZmZzZXQ9e3NldE9mZnNldDpm
dW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLHMsYSx1LGwsYz14LmNzcyhlLCJwb3NpdGlvbiIpLHA9
eChlKSxmPXt9OyJzdGF0aWMiPT09YyYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksYT1w
Lm9mZnNldCgpLG89eC5jc3MoZSwidG9wIiksdT14LmNzcyhlLCJsZWZ0IiksbD0oImFic29sdXRl
Ij09PWN8fCJmaXhlZCI9PT1jKSYmKG8rdSkuaW5kZXhPZigiYXV0byIpPi0xLGw/KHI9cC5wb3Np
dGlvbigpLHM9ci50b3AsaT1yLmxlZnQpOihzPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0
KHUpfHwwKSx4LmlzRnVuY3Rpb24odCkmJih0PXQuY2FsbChlLG4sYSkpLG51bGwhPXQudG9wJiYo
Zi50b3A9dC50b3AtYS50b3ArcyksbnVsbCE9dC5sZWZ0JiYoZi5sZWZ0PXQubGVmdC1hLmxlZnQr
aSksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsZik6cC5jc3MoZil9fSx4LmZuLmV4dGVuZCh7
cG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG49dGhpc1swXSxyPXt0b3A6
MCxsZWZ0OjB9O3JldHVybiJmaXhlZCI9PT14LmNzcyhuLCJwb3NpdGlvbiIpP3Q9bi5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKTooZT10aGlzLm9mZnNldFBhcmVudCgpLHQ9dGhpcy5vZmZzZXQoKSx4
Lm5vZGVOYW1lKGVbMF0sImh0bWwiKXx8KHI9ZS5vZmZzZXQoKSksci50b3ArPXguY3NzKGVbMF0s
ImJvcmRlclRvcFdpZHRoIiwhMCksci5sZWZ0Kz14LmNzcyhlWzBdLCJib3JkZXJMZWZ0V2lkdGgi
LCEwKSkse3RvcDp0LnRvcC1yLnRvcC14LmNzcyhuLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVm
dC1yLmxlZnQteC5jc3MobiwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlv
bigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50fHxz
O3doaWxlKGUmJiF4Lm5vZGVOYW1lKGUsImh0bWwiKSYmInN0YXRpYyI9PT14LmNzcyhlLCJwb3Np
dGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHN9KX19KSx4LmVhY2goe3Njcm9sbExl
ZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24odCxuKXt2
YXIgcj0icGFnZVlPZmZzZXQiPT09bjt4LmZuW3RdPWZ1bmN0aW9uKGkpe3JldHVybiB4LmFjY2Vz
cyh0aGlzLGZ1bmN0aW9uKHQsaSxvKXt2YXIgcz1Ibih0KTtyZXR1cm4gbz09PXVuZGVmaW5lZD9z
P3Nbbl06dFtpXToocz9zLnNjcm9sbFRvKHI/ZS5wYWdlWE9mZnNldDpvLHI/bzplLnBhZ2VZT2Zm
c2V0KTp0W2ldPW8sdW5kZWZpbmVkKX0sdCxpLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSk7ZnVu
Y3Rpb24gSG4oZSl7cmV0dXJuIHguaXNXaW5kb3coZSk/ZTo5PT09ZS5ub2RlVHlwZSYmZS5kZWZh
dWx0Vmlld314LmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihl
LHQpe3guZWFjaCh7cGFkZGluZzoiaW5uZXIiK2UsY29udGVudDp0LCIiOiJvdXRlciIrZX0sZnVu
Y3Rpb24obixyKXt4LmZuW3JdPWZ1bmN0aW9uKHIsaSl7dmFyIG89YXJndW1lbnRzLmxlbmd0aCYm
KG58fCJib29sZWFuIiE9dHlwZW9mIHIpLHM9bnx8KHI9PT0hMHx8aT09PSEwPyJtYXJnaW4iOiJi
b3JkZXIiKTtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbih0LG4scil7dmFyIGk7cmV0dXJu
IHguaXNXaW5kb3codCk/dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrZV06OT09
PXQubm9kZVR5cGU/KGk9dC5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgodC5ib2R5WyJzY3JvbGwi
K2VdLGlbInNjcm9sbCIrZV0sdC5ib2R5WyJvZmZzZXQiK2VdLGlbIm9mZnNldCIrZV0saVsiY2xp
ZW50IitlXSkpOnI9PT11bmRlZmluZWQ/eC5jc3ModCxuLHMpOnguc3R5bGUodCxuLHIscyl9LHQs
bz9yOnVuZGVmaW5lZCxvLG51bGwpfX0pfSkseC5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMubGVuZ3RofSx4LmZuLmFuZFNlbGY9eC5mbi5hZGRCYWNrLCJvYmplY3QiPT10eXBlb2YgbW9k
dWxlJiZtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9y
dHM9eDoiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVy
eSIsW10sZnVuY3Rpb24oKXtyZXR1cm4geH0pLCJvYmplY3QiPT10eXBlb2YgZSYmIm9iamVjdCI9
PXR5cGVvZiBlLmRvY3VtZW50JiYoZS5qUXVlcnk9ZS4kPXgpfSkod2luZG93KTsKK2RpZmYgLS1n
aXQgYS93ZWIvYWpheC9saWJzL21vb3Rvb2xzLzEuNC4xL21vb3Rvb2xzLXl1aS1jb21wcmVzc2Vk
LmpzIGIvd2ViL2FqYXgvbGlicy9tb290b29scy8xLjQuMS9tb290b29scy15dWktY29tcHJlc3Nl
ZC5qcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmUwM2ZiN2MKKy0tLSAv
ZGV2L251bGwKKysrKyBiL3dlYi9hamF4L2xpYnMvbW9vdG9vbHMvMS40LjEvbW9vdG9vbHMteXVp
LWNvbXByZXNzZWQuanMKK0BAIC0wLDAgKzEsNTE1IEBACisrLyoKKystLS0KKytNb29Ub29sczog
dGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrCisrCisrd2ViIGJ1aWxkOgorKyAtIGh0dHA6Ly9tb290
b29scy5uZXQvY29yZS83NmJmNDcwNjJkNmMxOTgzZDY2Y2U0N2FkNjZhYTBlMAorKworK3BhY2th
Z2VyIGJ1aWxkOgorKyAtIHBhY2thZ2VyIGJ1aWxkIENvcmUvQ29yZSBDb3JlL0FycmF5IENvcmUv
U3RyaW5nIENvcmUvTnVtYmVyIENvcmUvRnVuY3Rpb24gQ29yZS9PYmplY3QgQ29yZS9FdmVudCBD
b3JlL0Jyb3dzZXIgQ29yZS9DbGFzcyBDb3JlL0NsYXNzLkV4dHJhcyBDb3JlL1NsaWNrLlBhcnNl
ciBDb3JlL1NsaWNrLkZpbmRlciBDb3JlL0VsZW1lbnQgQ29yZS9FbGVtZW50LlN0eWxlIENvcmUv
RWxlbWVudC5FdmVudCBDb3JlL0VsZW1lbnQuRGVsZWdhdGlvbiBDb3JlL0VsZW1lbnQuRGltZW5z
aW9ucyBDb3JlL0Z4IENvcmUvRnguQ1NTIENvcmUvRnguVHdlZW4gQ29yZS9GeC5Nb3JwaCBDb3Jl
L0Z4LlRyYW5zaXRpb25zIENvcmUvUmVxdWVzdCBDb3JlL1JlcXVlc3QuSFRNTCBDb3JlL1JlcXVl
c3QuSlNPTiBDb3JlL0Nvb2tpZSBDb3JlL0pTT04gQ29yZS9ET01SZWFkeSBDb3JlL1N3aWZmCisr
CisrY29weXJpZ2h0czoKKysgIC0gW01vb1Rvb2xzXShodHRwOi8vbW9vdG9vbHMubmV0KQorKwor
K2xpY2Vuc2VzOgorKyAgLSBbTUlUIExpY2Vuc2VdKGh0dHA6Ly9tb290b29scy5uZXQvbGljZW5z
ZS50eHQpCisrLi4uCisrKi8KKysoZnVuY3Rpb24oKXt0aGlzLk1vb1Rvb2xzPXt2ZXJzaW9uOiIx
LjQuMSIsYnVpbGQ6ImQxZmIyNTcxMGUzYzU0ODJhMjE5YWI5ZGM2NzVhNGUwYWQyMTc2YjYifTt2
YXIgZT10aGlzLnR5cGVPZj1mdW5jdGlvbihpKXtpZihpPT1udWxsKXtyZXR1cm4ibnVsbCI7fWlm
KGkuJGZhbWlseSl7cmV0dXJuIGkuJGZhbWlseSgpOworK31pZihpLm5vZGVOYW1lKXtpZihpLm5v
ZGVUeXBlPT0xKXtyZXR1cm4iZWxlbWVudCI7fWlmKGkubm9kZVR5cGU9PTMpe3JldHVybigvXFMv
KS50ZXN0KGkubm9kZVZhbHVlKT8idGV4dG5vZGUiOiJ3aGl0ZXNwYWNlIjt9fWVsc2V7aWYodHlw
ZW9mIGkubGVuZ3RoPT0ibnVtYmVyIil7aWYoaS5jYWxsZWUpe3JldHVybiJhcmd1bWVudHMiOwor
K31pZigiaXRlbSIgaW4gaSl7cmV0dXJuImNvbGxlY3Rpb24iO319fXJldHVybiB0eXBlb2YgaTt9
O3ZhciB1PXRoaXMuaW5zdGFuY2VPZj1mdW5jdGlvbih3LGkpe2lmKHc9PW51bGwpe3JldHVybiBm
YWxzZTt9dmFyIHY9dy4kY29uc3RydWN0b3J8fHcuY29uc3RydWN0b3I7Cisrd2hpbGUodil7aWYo
dj09PWkpe3JldHVybiB0cnVlO312PXYucGFyZW50O31yZXR1cm4gdyBpbnN0YW5jZW9mIGk7fTt2
YXIgZj10aGlzLkZ1bmN0aW9uO3ZhciByPXRydWU7Zm9yKHZhciBxIGluIHt0b1N0cmluZzoxfSl7
cj1udWxsO31pZihyKXtyPVsiaGFzT3duUHJvcGVydHkiLCJ2YWx1ZU9mIiwiaXNQcm90b3R5cGVP
ZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1N0cmluZyIsImNv
bnN0cnVjdG9yIl07CisrfWYucHJvdG90eXBlLm92ZXJsb2FkU2V0dGVyPWZ1bmN0aW9uKHYpe3Zh
ciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKHgsdyl7aWYoeD09bnVsbCl7cmV0dXJuIHRoaXM7fWlm
KHZ8fHR5cGVvZiB4IT0ic3RyaW5nIil7Zm9yKHZhciB5IGluIHgpe2kuY2FsbCh0aGlzLHkseFt5
XSk7CisrfWlmKHIpe2Zvcih2YXIgej1yLmxlbmd0aDt6LS07KXt5PXJbel07aWYoeC5oYXNPd25Q
cm9wZXJ0eSh5KSl7aS5jYWxsKHRoaXMseSx4W3ldKTt9fX19ZWxzZXtpLmNhbGwodGhpcyx4LHcp
O31yZXR1cm4gdGhpczt9O307Zi5wcm90b3R5cGUub3ZlcmxvYWRHZXR0ZXI9ZnVuY3Rpb24odil7
dmFyIGk9dGhpczsKKytyZXR1cm4gZnVuY3Rpb24oeCl7dmFyIHksdztpZih2fHx0eXBlb2YgeCE9
InN0cmluZyIpe3k9eDt9ZWxzZXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe3k9YXJndW1lbnRzO319
aWYoeSl7dz17fTtmb3IodmFyIHo9MDt6PHkubGVuZ3RoO3orKyl7d1t5W3pdXT1pLmNhbGwodGhp
cyx5W3pdKTsKKyt9fWVsc2V7dz1pLmNhbGwodGhpcyx4KTt9cmV0dXJuIHc7fTt9O2YucHJvdG90
eXBlLmV4dGVuZD1mdW5jdGlvbihpLHYpe3RoaXNbaV09djt9Lm92ZXJsb2FkU2V0dGVyKCk7Zi5w
cm90b3R5cGUuaW1wbGVtZW50PWZ1bmN0aW9uKGksdil7dGhpcy5wcm90b3R5cGVbaV09djsKKyt9
Lm92ZXJsb2FkU2V0dGVyKCk7dmFyIG89QXJyYXkucHJvdG90eXBlLnNsaWNlO2YuZnJvbT1mdW5j
dGlvbihpKXtyZXR1cm4oZShpKT09ImZ1bmN0aW9uIik/aTpmdW5jdGlvbigpe3JldHVybiBpO307
fTtBcnJheS5mcm9tPWZ1bmN0aW9uKGkpe2lmKGk9PW51bGwpe3JldHVybltdOworK31yZXR1cm4o
ay5pc0VudW1lcmFibGUoaSkmJnR5cGVvZiBpIT0ic3RyaW5nIik/KGUoaSk9PSJhcnJheSIpP2k6
by5jYWxsKGkpOltpXTt9O051bWJlci5mcm9tPWZ1bmN0aW9uKHYpe3ZhciBpPXBhcnNlRmxvYXQo
dik7cmV0dXJuIGlzRmluaXRlKGkpP2k6bnVsbDsKKyt9O1N0cmluZy5mcm9tPWZ1bmN0aW9uKGkp
e3JldHVybiBpKyIiO307Zi5pbXBsZW1lbnQoe2hpZGU6ZnVuY3Rpb24oKXt0aGlzLiRoaWRkZW49
dHJ1ZTtyZXR1cm4gdGhpczt9LHByb3RlY3Q6ZnVuY3Rpb24oKXt0aGlzLiRwcm90ZWN0ZWQ9dHJ1
ZTtyZXR1cm4gdGhpczsKKyt9fSk7dmFyIGs9dGhpcy5UeXBlPWZ1bmN0aW9uKHgsdyl7aWYoeCl7
dmFyIHY9eC50b0xvd2VyQ2FzZSgpO3ZhciBpPWZ1bmN0aW9uKHkpe3JldHVybihlKHkpPT12KTt9
O2tbImlzIit4XT1pO2lmKHchPW51bGwpe3cucHJvdG90eXBlLiRmYW1pbHk9KGZ1bmN0aW9uKCl7
cmV0dXJuIHY7CisrfSkuaGlkZSgpO3cudHlwZT1pO319aWYodz09bnVsbCl7cmV0dXJuIG51bGw7
fXcuZXh0ZW5kKHRoaXMpO3cuJGNvbnN0cnVjdG9yPWs7dy5wcm90b3R5cGUuJGNvbnN0cnVjdG9y
PXc7cmV0dXJuIHc7fTt2YXIgcD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2suaXNFbnVtZXJh
YmxlPWZ1bmN0aW9uKGkpe3JldHVybihpIT1udWxsJiZ0eXBlb2YgaS5sZW5ndGg9PSJudW1iZXIi
JiZwLmNhbGwoaSkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpOworK307dmFyIGI9e307dmFyIGQ9ZnVu
Y3Rpb24oaSl7dmFyIHY9ZShpLnByb3RvdHlwZSk7cmV0dXJuIGJbdl18fChiW3ZdPVtdKTt9O3Zh
ciBoPWZ1bmN0aW9uKHcsQSl7aWYoQSYmQS4kaGlkZGVuKXtyZXR1cm47fXZhciB2PWQodGhpcyk7
Zm9yKHZhciB4PTA7eDx2Lmxlbmd0aDsKKyt4Kyspe3ZhciB6PXZbeF07aWYoZSh6KT09InR5cGUi
KXtoLmNhbGwoeix3LEEpO31lbHNle3ouY2FsbCh0aGlzLHcsQSk7fX12YXIgeT10aGlzLnByb3Rv
dHlwZVt3XTtpZih5PT1udWxsfHwheS4kcHJvdGVjdGVkKXt0aGlzLnByb3RvdHlwZVt3XT1BO31p
Zih0aGlzW3ddPT1udWxsJiZlKEEpPT0iZnVuY3Rpb24iKXt0LmNhbGwodGhpcyx3LGZ1bmN0aW9u
KGkpe3JldHVybiBBLmFwcGx5KGksby5jYWxsKGFyZ3VtZW50cywxKSk7CisrfSk7fX07dmFyIHQ9
ZnVuY3Rpb24oaSx3KXtpZih3JiZ3LiRoaWRkZW4pe3JldHVybjt9dmFyIHY9dGhpc1tpXTtpZih2
PT1udWxsfHwhdi4kcHJvdGVjdGVkKXt0aGlzW2ldPXc7fX07ay5pbXBsZW1lbnQoe2ltcGxlbWVu
dDpoLm92ZXJsb2FkU2V0dGVyKCksZXh0ZW5kOnQub3ZlcmxvYWRTZXR0ZXIoKSxhbGlhczpmdW5j
dGlvbihpLHYpe2guY2FsbCh0aGlzLGksdGhpcy5wcm90b3R5cGVbdl0pOworK30ub3ZlcmxvYWRT
ZXR0ZXIoKSxtaXJyb3I6ZnVuY3Rpb24oaSl7ZCh0aGlzKS5wdXNoKGkpO3JldHVybiB0aGlzO319
KTtuZXcgaygiVHlwZSIsayk7dmFyIGM9ZnVuY3Rpb24odix6LHgpe3ZhciB3PSh6IT1PYmplY3Qp
LEQ9ei5wcm90b3R5cGU7aWYodyl7ej1uZXcgayh2LHopOworK31mb3IodmFyIEE9MCx5PXgubGVu
Z3RoO0E8eTtBKyspe3ZhciBFPXhbQV0sQz16W0VdLEI9RFtFXTtpZihDKXtDLnByb3RlY3QoKTt9
aWYodyYmQil7ZGVsZXRlIERbRV07RFtFXT1CLnByb3RlY3QoKTt9fWlmKHcpe3ouaW1wbGVtZW50
KEQpO31yZXR1cm4gYzt9O2MoIlN0cmluZyIsU3RyaW5nLFsiY2hhckF0IiwiY2hhckNvZGVBdCIs
ImNvbmNhdCIsImluZGV4T2YiLCJsYXN0SW5kZXhPZiIsIm1hdGNoIiwicXVvdGUiLCJyZXBsYWNl
Iiwic2VhcmNoIiwic2xpY2UiLCJzcGxpdCIsInN1YnN0ciIsInN1YnN0cmluZyIsInRyaW0iLCJ0
b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIl0pKCJBcnJheSIsQXJyYXksWyJwb3AiLCJwdXNoIiwi
cmV2ZXJzZSIsInNoaWZ0Iiwic29ydCIsInNwbGljZSIsInVuc2hpZnQiLCJjb25jYXQiLCJqb2lu
Iiwic2xpY2UiLCJpbmRleE9mIiwibGFzdEluZGV4T2YiLCJmaWx0ZXIiLCJmb3JFYWNoIiwiZXZl
cnkiLCJtYXAiLCJzb21lIiwicmVkdWNlIiwicmVkdWNlUmlnaHQiXSkoIk51bWJlciIsTnVtYmVy
LFsidG9FeHBvbmVudGlhbCIsInRvRml4ZWQiLCJ0b0xvY2FsZVN0cmluZyIsInRvUHJlY2lzaW9u
Il0pKCJGdW5jdGlvbiIsZixbImFwcGx5IiwiY2FsbCIsImJpbmQiXSkoIlJlZ0V4cCIsUmVnRXhw
LFsiZXhlYyIsInRlc3QiXSkoIk9iamVjdCIsT2JqZWN0LFsiY3JlYXRlIiwiZGVmaW5lUHJvcGVy
dHkiLCJkZWZpbmVQcm9wZXJ0aWVzIiwia2V5cyIsImdldFByb3RvdHlwZU9mIiwiZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByZXZlbnRFeHRlbnNpb25z
IiwiaXNFeHRlbnNpYmxlIiwic2VhbCIsImlzU2VhbGVkIiwiZnJlZXplIiwiaXNGcm96ZW4iXSko
IkRhdGUiLERhdGUsWyJub3ciXSk7CisrT2JqZWN0LmV4dGVuZD10Lm92ZXJsb2FkU2V0dGVyKCk7
RGF0ZS5leHRlbmQoIm5vdyIsZnVuY3Rpb24oKXtyZXR1cm4gKyhuZXcgRGF0ZSk7fSk7bmV3IGso
IkJvb2xlYW4iLEJvb2xlYW4pO051bWJlci5wcm90b3R5cGUuJGZhbWlseT1mdW5jdGlvbigpe3Jl
dHVybiBpc0Zpbml0ZSh0aGlzKT8ibnVtYmVyIjoibnVsbCI7CisrfS5oaWRlKCk7TnVtYmVyLmV4
dGVuZCgicmFuZG9tIixmdW5jdGlvbih2LGkpe3JldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9t
KCkqKGktdisxKSt2KTt9KTt2YXIgbD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O09i
amVjdC5leHRlbmQoImZvckVhY2giLGZ1bmN0aW9uKGksdyx4KXtmb3IodmFyIHYgaW4gaSl7aWYo
bC5jYWxsKGksdikpe3cuY2FsbCh4LGlbdl0sdixpKTsKKyt9fX0pO09iamVjdC5lYWNoPU9iamVj
dC5mb3JFYWNoO0FycmF5LmltcGxlbWVudCh7Zm9yRWFjaDpmdW5jdGlvbih4LHkpe2Zvcih2YXIg
dz0wLHY9dGhpcy5sZW5ndGg7dzx2O3crKyl7aWYodyBpbiB0aGlzKXt4LmNhbGwoeSx0aGlzW3dd
LHcsdGhpcyk7fX19LGVhY2g6ZnVuY3Rpb24oaSx2KXtBcnJheS5mb3JFYWNoKHRoaXMsaSx2KTsK
KytyZXR1cm4gdGhpczt9fSk7dmFyIHM9ZnVuY3Rpb24oaSl7c3dpdGNoKGUoaSkpe2Nhc2UiYXJy
YXkiOnJldHVybiBpLmNsb25lKCk7Y2FzZSJvYmplY3QiOnJldHVybiBPYmplY3QuY2xvbmUoaSk7
ZGVmYXVsdDpyZXR1cm4gaTt9fTtBcnJheS5pbXBsZW1lbnQoImNsb25lIixmdW5jdGlvbigpe3Zh
ciB2PXRoaXMubGVuZ3RoLHc9bmV3IEFycmF5KHYpOworK3doaWxlKHYtLSl7d1t2XT1zKHRoaXNb
dl0pO31yZXR1cm4gdzt9KTt2YXIgYT1mdW5jdGlvbih2LGksdyl7c3dpdGNoKGUodykpe2Nhc2Ui
b2JqZWN0IjppZihlKHZbaV0pPT0ib2JqZWN0Iil7T2JqZWN0Lm1lcmdlKHZbaV0sdyk7fWVsc2V7
dltpXT1PYmplY3QuY2xvbmUodyk7CisrfWJyZWFrO2Nhc2UiYXJyYXkiOnZbaV09dy5jbG9uZSgp
O2JyZWFrO2RlZmF1bHQ6dltpXT13O31yZXR1cm4gdjt9O09iamVjdC5leHRlbmQoe21lcmdlOmZ1
bmN0aW9uKEMseSx4KXtpZihlKHkpPT0ic3RyaW5nIil7cmV0dXJuIGEoQyx5LHgpO31mb3IodmFy
IEI9MSx3PWFyZ3VtZW50cy5sZW5ndGg7CisrQjx3O0IrKyl7dmFyIHo9YXJndW1lbnRzW0JdO2Zv
cih2YXIgQSBpbiB6KXthKEMsQSx6W0FdKTt9fXJldHVybiBDO30sY2xvbmU6ZnVuY3Rpb24oaSl7
dmFyIHc9e307Zm9yKHZhciB2IGluIGkpe3dbdl09cyhpW3ZdKTt9cmV0dXJuIHc7fSxhcHBlbmQ6
ZnVuY3Rpb24oeil7Zm9yKHZhciB5PTEsdz1hcmd1bWVudHMubGVuZ3RoOworK3k8dzt5Kyspe3Zh
ciB2PWFyZ3VtZW50c1t5XXx8e307Zm9yKHZhciB4IGluIHYpe3pbeF09dlt4XTt9fXJldHVybiB6
O319KTtbIk9iamVjdCIsIldoaXRlU3BhY2UiLCJUZXh0Tm9kZSIsIkNvbGxlY3Rpb24iLCJBcmd1
bWVudHMiXS5lYWNoKGZ1bmN0aW9uKGkpe25ldyBrKGkpOworK30pO3ZhciBqPURhdGUubm93KCk7
U3RyaW5nLmV4dGVuZCgidW5pcXVlSUQiLGZ1bmN0aW9uKCl7cmV0dXJuKGorKykudG9TdHJpbmco
MzYpO30pO3ZhciBnPXRoaXMuSGFzaD1uZXcgaygiSGFzaCIsZnVuY3Rpb24oaSl7aWYoZShpKT09
Imhhc2giKXtpPU9iamVjdC5jbG9uZShpLmdldENsZWFuKCkpOworK31mb3IodmFyIHYgaW4gaSl7
dGhpc1t2XT1pW3ZdO31yZXR1cm4gdGhpczt9KTtnLmltcGxlbWVudCh7Zm9yRWFjaDpmdW5jdGlv
bihpLHYpe09iamVjdC5mb3JFYWNoKHRoaXMsaSx2KTt9LGdldENsZWFuOmZ1bmN0aW9uKCl7dmFy
IHY9e307Zm9yKHZhciBpIGluIHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoaSkpe3ZbaV09
dGhpc1tpXTsKKyt9fXJldHVybiB2O30sZ2V0TGVuZ3RoOmZ1bmN0aW9uKCl7dmFyIHY9MDtmb3Io
dmFyIGkgaW4gdGhpcyl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShpKSl7disrO319cmV0dXJuIHY7
fX0pO2cuYWxpYXMoImVhY2giLCJmb3JFYWNoIik7T2JqZWN0LnR5cGU9ay5pc09iamVjdDsKKyt2
YXIgbj10aGlzLk5hdGl2ZT1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IGsoaS5uYW1lLGkuaW5pdGlh
bGl6ZSk7fTtuLnR5cGU9ay50eXBlO24uaW1wbGVtZW50PWZ1bmN0aW9uKHgsdil7Zm9yKHZhciB3
PTA7dzx4Lmxlbmd0aDt3Kyspe3hbd10uaW1wbGVtZW50KHYpOworK31yZXR1cm4gbjt9O3ZhciBt
PUFycmF5LnR5cGU7QXJyYXkudHlwZT1mdW5jdGlvbihpKXtyZXR1cm4gdShpLEFycmF5KXx8bShp
KTt9O3RoaXMuJEE9ZnVuY3Rpb24oaSl7cmV0dXJuIEFycmF5LmZyb20oaSkuc2xpY2UoKTt9O3Ro
aXMuJGFyZ3VtZW50cz1mdW5jdGlvbih2KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1l
bnRzW3ZdOworK307fTt0aGlzLiRjaGs9ZnVuY3Rpb24oaSl7cmV0dXJuICEhKGl8fGk9PT0wKTt9
O3RoaXMuJGNsZWFyPWZ1bmN0aW9uKGkpe2NsZWFyVGltZW91dChpKTtjbGVhckludGVydmFsKGkp
O3JldHVybiBudWxsO307dGhpcy4kZGVmaW5lZD1mdW5jdGlvbihpKXtyZXR1cm4oaSE9bnVsbCk7
CisrfTt0aGlzLiRlYWNoPWZ1bmN0aW9uKHcsdix4KXt2YXIgaT1lKHcpOygoaT09ImFyZ3VtZW50
cyJ8fGk9PSJjb2xsZWN0aW9uInx8aT09ImFycmF5Inx8aT09ImVsZW1lbnRzIik/QXJyYXk6T2Jq
ZWN0KS5lYWNoKHcsdix4KTt9O3RoaXMuJGVtcHR5PWZ1bmN0aW9uKCl7fTsKKyt0aGlzLiRleHRl
bmQ9ZnVuY3Rpb24odixpKXtyZXR1cm4gT2JqZWN0LmFwcGVuZCh2LGkpO307dGhpcy4kSD1mdW5j
dGlvbihpKXtyZXR1cm4gbmV3IGcoaSk7fTt0aGlzLiRtZXJnZT1mdW5jdGlvbigpe3ZhciBpPUFy
cmF5LnNsaWNlKGFyZ3VtZW50cyk7aS51bnNoaWZ0KHt9KTsKKytyZXR1cm4gT2JqZWN0Lm1lcmdl
LmFwcGx5KG51bGwsaSk7fTt0aGlzLiRsYW1iZGE9Zi5mcm9tO3RoaXMuJG1peGluPU9iamVjdC5t
ZXJnZTt0aGlzLiRyYW5kb209TnVtYmVyLnJhbmRvbTt0aGlzLiRzcGxhdD1BcnJheS5mcm9tO3Ro
aXMuJHRpbWU9RGF0ZS5ub3c7CisrdGhpcy4kdHlwZT1mdW5jdGlvbihpKXt2YXIgdj1lKGkpO2lm
KHY9PSJlbGVtZW50cyIpe3JldHVybiJhcnJheSI7fXJldHVybih2PT0ibnVsbCIpP2ZhbHNlOnY7
fTt0aGlzLiR1bmxpbms9ZnVuY3Rpb24oaSl7c3dpdGNoKGUoaSkpe2Nhc2Uib2JqZWN0IjpyZXR1
cm4gT2JqZWN0LmNsb25lKGkpOworK2Nhc2UiYXJyYXkiOnJldHVybiBBcnJheS5jbG9uZShpKTtj
YXNlImhhc2giOnJldHVybiBuZXcgZyhpKTtkZWZhdWx0OnJldHVybiBpO319O30pKCk7QXJyYXku
aW1wbGVtZW50KHtldmVyeTpmdW5jdGlvbihjLGQpe2Zvcih2YXIgYj0wLGE9dGhpcy5sZW5ndGg+
Pj4wOworK2I8YTtiKyspe2lmKChiIGluIHRoaXMpJiYhYy5jYWxsKGQsdGhpc1tiXSxiLHRoaXMp
KXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTt9LGZpbHRlcjpmdW5jdGlvbihkLGUpe3ZhciBj
PVtdO2Zvcih2YXIgYj0wLGE9dGhpcy5sZW5ndGg+Pj4wO2I8YTtiKyspe2lmKChiIGluIHRoaXMp
JiZkLmNhbGwoZSx0aGlzW2JdLGIsdGhpcykpe2MucHVzaCh0aGlzW2JdKTsKKyt9fXJldHVybiBj
O30saW5kZXhPZjpmdW5jdGlvbihjLGQpe3ZhciBiPXRoaXMubGVuZ3RoPj4+MDtmb3IodmFyIGE9
KGQ8MCk/TWF0aC5tYXgoMCxiK2QpOmR8fDA7YTxiO2ErKyl7aWYodGhpc1thXT09PWMpe3JldHVy
biBhO319cmV0dXJuIC0xO30sbWFwOmZ1bmN0aW9uKGMsZSl7dmFyIGQ9dGhpcy5sZW5ndGg+Pj4w
LGI9QXJyYXkoZCk7CisrZm9yKHZhciBhPTA7YTxkO2ErKyl7aWYoYSBpbiB0aGlzKXtiW2FdPWMu
Y2FsbChlLHRoaXNbYV0sYSx0aGlzKTt9fXJldHVybiBiO30sc29tZTpmdW5jdGlvbihjLGQpe2Zv
cih2YXIgYj0wLGE9dGhpcy5sZW5ndGg+Pj4wO2I8YTtiKyspe2lmKChiIGluIHRoaXMpJiZjLmNh
bGwoZCx0aGlzW2JdLGIsdGhpcykpe3JldHVybiB0cnVlOworK319cmV0dXJuIGZhbHNlO30sY2xl
YW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51
bGw7fSk7fSxpbnZva2U6ZnVuY3Rpb24oYSl7dmFyIGI9QXJyYXkuc2xpY2UoYXJndW1lbnRzLDEp
O3JldHVybiB0aGlzLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gY1thXS5hcHBseShjLGIpOworK30p
O30sYXNzb2NpYXRlOmZ1bmN0aW9uKGMpe3ZhciBkPXt9LGI9TWF0aC5taW4odGhpcy5sZW5ndGgs
Yy5sZW5ndGgpO2Zvcih2YXIgYT0wO2E8YjthKyspe2RbY1thXV09dGhpc1thXTt9cmV0dXJuIGQ7
fSxsaW5rOmZ1bmN0aW9uKGMpe3ZhciBhPXt9O2Zvcih2YXIgZT0wLGI9dGhpcy5sZW5ndGg7Cisr
ZTxiO2UrKyl7Zm9yKHZhciBkIGluIGMpe2lmKGNbZF0odGhpc1tlXSkpe2FbZF09dGhpc1tlXTtk
ZWxldGUgY1tkXTticmVhazt9fX1yZXR1cm4gYTt9LGNvbnRhaW5zOmZ1bmN0aW9uKGEsYil7cmV0
dXJuIHRoaXMuaW5kZXhPZihhLGIpIT0tMTt9LGFwcGVuZDpmdW5jdGlvbihhKXt0aGlzLnB1c2gu
YXBwbHkodGhpcyxhKTsKKytyZXR1cm4gdGhpczt9LGdldExhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4o
dGhpcy5sZW5ndGgpP3RoaXNbdGhpcy5sZW5ndGgtMV06bnVsbDt9LGdldFJhbmRvbTpmdW5jdGlv
bigpe3JldHVybih0aGlzLmxlbmd0aCk/dGhpc1tOdW1iZXIucmFuZG9tKDAsdGhpcy5sZW5ndGgt
MSldOm51bGw7CisrfSxpbmNsdWRlOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbnRhaW5zKGEpKXt0
aGlzLnB1c2goYSk7fXJldHVybiB0aGlzO30sY29tYmluZTpmdW5jdGlvbihjKXtmb3IodmFyIGI9
MCxhPWMubGVuZ3RoO2I8YTtiKyspe3RoaXMuaW5jbHVkZShjW2JdKTt9cmV0dXJuIHRoaXM7Cisr
fSxlcmFzZTpmdW5jdGlvbihiKXtmb3IodmFyIGE9dGhpcy5sZW5ndGg7YS0tOyl7aWYodGhpc1th
XT09PWIpe3RoaXMuc3BsaWNlKGEsMSk7fX1yZXR1cm4gdGhpczt9LGVtcHR5OmZ1bmN0aW9uKCl7
dGhpcy5sZW5ndGg9MDtyZXR1cm4gdGhpczt9LGZsYXR0ZW46ZnVuY3Rpb24oKXt2YXIgZD1bXTsK
Kytmb3IodmFyIGI9MCxhPXRoaXMubGVuZ3RoO2I8YTtiKyspe3ZhciBjPXR5cGVPZih0aGlzW2Jd
KTtpZihjPT0ibnVsbCIpe2NvbnRpbnVlO31kPWQuY29uY2F0KChjPT0iYXJyYXkifHxjPT0iY29s
bGVjdGlvbiJ8fGM9PSJhcmd1bWVudHMifHxpbnN0YW5jZU9mKHRoaXNbYl0sQXJyYXkpKT9BcnJh
eS5mbGF0dGVuKHRoaXNbYl0pOnRoaXNbYl0pOworK31yZXR1cm4gZDt9LHBpY2s6ZnVuY3Rpb24o
KXtmb3IodmFyIGI9MCxhPXRoaXMubGVuZ3RoO2I8YTtiKyspe2lmKHRoaXNbYl0hPW51bGwpe3Jl
dHVybiB0aGlzW2JdO319cmV0dXJuIG51bGw7fSxoZXhUb1JnYjpmdW5jdGlvbihiKXtpZih0aGlz
Lmxlbmd0aCE9Myl7cmV0dXJuIG51bGw7CisrfXZhciBhPXRoaXMubWFwKGZ1bmN0aW9uKGMpe2lm
KGMubGVuZ3RoPT0xKXtjKz1jO31yZXR1cm4gYy50b0ludCgxNik7fSk7cmV0dXJuKGIpP2E6InJn
YigiK2ErIikiO30scmdiVG9IZXg6ZnVuY3Rpb24oZCl7aWYodGhpcy5sZW5ndGg8Myl7cmV0dXJu
IG51bGw7fWlmKHRoaXMubGVuZ3RoPT00JiZ0aGlzWzNdPT0wJiYhZCl7cmV0dXJuInRyYW5zcGFy
ZW50IjsKKyt9dmFyIGI9W107Zm9yKHZhciBhPTA7YTwzO2ErKyl7dmFyIGM9KHRoaXNbYV0tMCku
dG9TdHJpbmcoMTYpO2IucHVzaCgoYy5sZW5ndGg9PTEpPyIwIitjOmMpO31yZXR1cm4oZCk/Yjoi
IyIrYi5qb2luKCIiKTt9fSk7QXJyYXkuYWxpYXMoImV4dGVuZCIsImFwcGVuZCIpOworK3ZhciAk
cGljaz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKGFyZ3VtZW50cykucGljaygpO307U3Ry
aW5nLmltcGxlbWVudCh7dGVzdDpmdW5jdGlvbihhLGIpe3JldHVybigodHlwZU9mKGEpPT0icmVn
ZXhwIik/YTpuZXcgUmVnRXhwKCIiK2EsYikpLnRlc3QodGhpcyk7CisrfSxjb250YWluczpmdW5j
dGlvbihhLGIpe3JldHVybihiKT8oYit0aGlzK2IpLmluZGV4T2YoYithK2IpPi0xOlN0cmluZyh0
aGlzKS5pbmRleE9mKGEpPi0xO30sdHJpbTpmdW5jdGlvbigpe3JldHVybiBTdHJpbmcodGhpcyku
cmVwbGFjZSgvXlxzK3xccyskL2csIiIpOworK30sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gU3Ry
aW5nKHRoaXMpLnJlcGxhY2UoL1xzKy9nLCIgIikudHJpbSgpO30sY2FtZWxDYXNlOmZ1bmN0aW9u
KCl7cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC8tXEQvZyxmdW5jdGlvbihhKXtyZXR1cm4g
YS5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTsKKyt9KTt9LGh5cGhlbmF0ZTpmdW5jdGlvbigpe3Jl
dHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvW0EtWl0vZyxmdW5jdGlvbihhKXtyZXR1cm4oIi0i
K2EuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpO30pO30sY2FwaXRhbGl6ZTpmdW5jdGlvbigpe3Jl
dHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXGJbYS16XS9nLGZ1bmN0aW9uKGEpe3JldHVybiBh
LnRvVXBwZXJDYXNlKCk7CisrfSk7fSxlc2NhcGVSZWdFeHA6ZnVuY3Rpb24oKXtyZXR1cm4gU3Ry
aW5nKHRoaXMpLnJlcGxhY2UoLyhbLS4qKz9eJHt9KCl8W1xdXC9cXF0pL2csIlxcJDEiKTt9LHRv
SW50OmZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludCh0aGlzLGF8fDEwKTt9LHRvRmxvYXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTsKKyt9LGhleFRvUmdiOmZ1bmN0aW9uKGIp
e3ZhciBhPVN0cmluZyh0aGlzKS5tYXRjaCgvXiM/KFx3ezEsMn0pKFx3ezEsMn0pKFx3ezEsMn0p
JC8pO3JldHVybihhKT9hLnNsaWNlKDEpLmhleFRvUmdiKGIpOm51bGw7fSxyZ2JUb0hleDpmdW5j
dGlvbihiKXt2YXIgYT1TdHJpbmcodGhpcykubWF0Y2goL1xkezEsM30vZyk7CisrcmV0dXJuKGEp
P2EucmdiVG9IZXgoYik6bnVsbDt9LHN1YnN0aXR1dGU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gU3Ry
aW5nKHRoaXMpLnJlcGxhY2UoYnx8KC9cXD9ceyhbXnt9XSspXH0vZyksZnVuY3Rpb24oZCxjKXtp
ZihkLmNoYXJBdCgwKT09IlxcIil7cmV0dXJuIGQuc2xpY2UoMSk7CisrfXJldHVybihhW2NdIT1u
dWxsKT9hW2NdOiIiO30pO319KTtOdW1iZXIuaW1wbGVtZW50KHtsaW1pdDpmdW5jdGlvbihiLGEp
e3JldHVybiBNYXRoLm1pbihhLE1hdGgubWF4KGIsdGhpcykpO30scm91bmQ6ZnVuY3Rpb24oYSl7
YT1NYXRoLnBvdygxMCxhfHwwKS50b0ZpeGVkKGE8MD8tYTowKTsKKytyZXR1cm4gTWF0aC5yb3Vu
ZCh0aGlzKmEpL2E7fSx0aW1lczpmdW5jdGlvbihiLGMpe2Zvcih2YXIgYT0wO2E8dGhpczthKysp
e2IuY2FsbChjLGEsdGhpcyk7fX0sdG9GbG9hdDpmdW5jdGlvbigpe3JldHVybiBwYXJzZUZsb2F0
KHRoaXMpO30sdG9JbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KHRoaXMsYXx8MTApOwor
K319KTtOdW1iZXIuYWxpYXMoImVhY2giLCJ0aW1lcyIpOyhmdW5jdGlvbihiKXt2YXIgYT17fTti
LmVhY2goZnVuY3Rpb24oYyl7aWYoIU51bWJlcltjXSl7YVtjXT1mdW5jdGlvbigpe3JldHVybiBN
YXRoW2NdLmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChBcnJheS5mcm9tKGFyZ3VtZW50cykpKTsK
Kyt9O319KTtOdW1iZXIuaW1wbGVtZW50KGEpO30pKFsiYWJzIiwiYWNvcyIsImFzaW4iLCJhdGFu
IiwiYXRhbjIiLCJjZWlsIiwiY29zIiwiZXhwIiwiZmxvb3IiLCJsb2ciLCJtYXgiLCJtaW4iLCJw
b3ciLCJzaW4iLCJzcXJ0IiwidGFuIl0pO0Z1bmN0aW9uLmV4dGVuZCh7YXR0ZW1wdDpmdW5jdGlv
bigpe2Zvcih2YXIgYj0wLGE9YXJndW1lbnRzLmxlbmd0aDsKKytiPGE7YisrKXt0cnl7cmV0dXJu
IGFyZ3VtZW50c1tiXSgpO31jYXRjaChjKXt9fXJldHVybiBudWxsO319KTtGdW5jdGlvbi5pbXBs
ZW1lbnQoe2F0dGVtcHQ6ZnVuY3Rpb24oYSxjKXt0cnl7cmV0dXJuIHRoaXMuYXBwbHkoYyxBcnJh
eS5mcm9tKGEpKTt9Y2F0Y2goYil7fXJldHVybiBudWxsOworK30sYmluZDpmdW5jdGlvbihlKXt2
YXIgYT10aGlzLGI9YXJndW1lbnRzLmxlbmd0aD4xP0FycmF5LnNsaWNlKGFyZ3VtZW50cywxKTpu
dWxsLGQ9ZnVuY3Rpb24oKXt9O3ZhciBjPWZ1bmN0aW9uKCl7dmFyIGc9ZSxoPWFyZ3VtZW50cy5s
ZW5ndGg7aWYodGhpcyBpbnN0YW5jZW9mIGMpe2QucHJvdG90eXBlPWEucHJvdG90eXBlOworK2c9
bmV3IGQ7fXZhciBmPSghYiYmIWgpP2EuY2FsbChnKTphLmFwcGx5KGcsYiYmaD9iLmNvbmNhdChB
cnJheS5zbGljZShhcmd1bWVudHMpKTpifHxhcmd1bWVudHMpO3JldHVybiBnPT1lP2Y6Zzt9O3Jl
dHVybiBjO30scGFzczpmdW5jdGlvbihiLGMpe3ZhciBhPXRoaXM7CisraWYoYiE9bnVsbCl7Yj1B
cnJheS5mcm9tKGIpO31yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShjLGJ8fGFyZ3Vt
ZW50cyk7fTt9LGRlbGF5OmZ1bmN0aW9uKGIsYyxhKXtyZXR1cm4gc2V0VGltZW91dCh0aGlzLnBh
c3MoKGE9PW51bGw/W106YSksYyksYik7CisrfSxwZXJpb2RpY2FsOmZ1bmN0aW9uKGMsYixhKXty
ZXR1cm4gc2V0SW50ZXJ2YWwodGhpcy5wYXNzKChhPT1udWxsP1tdOmEpLGIpLGMpO319KTtkZWxl
dGUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7RnVuY3Rpb24uaW1wbGVtZW50KHtjcmVhdGU6ZnVu
Y3Rpb24oYil7dmFyIGE9dGhpczsKKytiPWJ8fHt9O3JldHVybiBmdW5jdGlvbihkKXt2YXIgYz1i
LmFyZ3VtZW50cztjPShjIT1udWxsKT9BcnJheS5mcm9tKGMpOkFycmF5LnNsaWNlKGFyZ3VtZW50
cywoYi5ldmVudCk/MTowKTtpZihiLmV2ZW50KXtjPVtkfHx3aW5kb3cuZXZlbnRdLmV4dGVuZChj
KTt9dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShiLmJpbmR8fG51bGwsYyk7CisrfTtp
ZihiLmRlbGF5KXtyZXR1cm4gc2V0VGltZW91dChlLGIuZGVsYXkpO31pZihiLnBlcmlvZGljYWwp
e3JldHVybiBzZXRJbnRlcnZhbChlLGIucGVyaW9kaWNhbCk7fWlmKGIuYXR0ZW1wdCl7cmV0dXJu
IEZ1bmN0aW9uLmF0dGVtcHQoZSk7fXJldHVybiBlKCk7fTsKKyt9LGJpbmQ6ZnVuY3Rpb24oYyxi
KXt2YXIgYT10aGlzO2lmKGIhPW51bGwpe2I9QXJyYXkuZnJvbShiKTt9cmV0dXJuIGZ1bmN0aW9u
KCl7cmV0dXJuIGEuYXBwbHkoYyxifHxhcmd1bWVudHMpO307fSxiaW5kV2l0aEV2ZW50OmZ1bmN0
aW9uKGMsYil7dmFyIGE9dGhpczsKKytpZihiIT1udWxsKXtiPUFycmF5LmZyb20oYik7fXJldHVy
biBmdW5jdGlvbihkKXtyZXR1cm4gYS5hcHBseShjLChiPT1udWxsKT9hcmd1bWVudHM6W2RdLmNv
bmNhdChiKSk7fTt9LHJ1bjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmFwcGx5KGIsQXJyYXku
ZnJvbShhKSk7CisrfX0pO2lmKE9iamVjdC5jcmVhdGU9PUZ1bmN0aW9uLnByb3RvdHlwZS5jcmVh
dGUpe09iamVjdC5jcmVhdGU9bnVsbDt9dmFyICR0cnk9RnVuY3Rpb24uYXR0ZW1wdDsoZnVuY3Rp
b24oKXt2YXIgYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O09iamVjdC5leHRlbmQo
e3N1YnNldDpmdW5jdGlvbihkLGcpe3ZhciBmPXt9OworK2Zvcih2YXIgZT0wLGI9Zy5sZW5ndGg7
ZTxiO2UrKyl7dmFyIGM9Z1tlXTtpZihjIGluIGQpe2ZbY109ZFtjXTt9fXJldHVybiBmO30sbWFw
OmZ1bmN0aW9uKGIsZSxmKXt2YXIgZD17fTtmb3IodmFyIGMgaW4gYil7aWYoYS5jYWxsKGIsYykp
e2RbY109ZS5jYWxsKGYsYltjXSxjLGIpOworK319cmV0dXJuIGQ7fSxmaWx0ZXI6ZnVuY3Rpb24o
YixlLGcpe3ZhciBkPXt9O2Zvcih2YXIgYyBpbiBiKXt2YXIgZj1iW2NdO2lmKGEuY2FsbChiLGMp
JiZlLmNhbGwoZyxmLGMsYikpe2RbY109Zjt9fXJldHVybiBkO30sZXZlcnk6ZnVuY3Rpb24oYixk
LGUpe2Zvcih2YXIgYyBpbiBiKXtpZihhLmNhbGwoYixjKSYmIWQuY2FsbChlLGJbY10sYykpe3Jl
dHVybiBmYWxzZTsKKyt9fXJldHVybiB0cnVlO30sc29tZTpmdW5jdGlvbihiLGQsZSl7Zm9yKHZh
ciBjIGluIGIpe2lmKGEuY2FsbChiLGMpJiZkLmNhbGwoZSxiW2NdLGMpKXtyZXR1cm4gdHJ1ZTt9
fXJldHVybiBmYWxzZTt9LGtleXM6ZnVuY3Rpb24oYil7dmFyIGQ9W107Zm9yKHZhciBjIGluIGIp
e2lmKGEuY2FsbChiLGMpKXtkLnB1c2goYyk7CisrfX1yZXR1cm4gZDt9LHZhbHVlczpmdW5jdGlv
bihjKXt2YXIgYj1bXTtmb3IodmFyIGQgaW4gYyl7aWYoYS5jYWxsKGMsZCkpe2IucHVzaChjW2Rd
KTt9fXJldHVybiBiO30sZ2V0TGVuZ3RoOmZ1bmN0aW9uKGIpe3JldHVybiBPYmplY3Qua2V5cyhi
KS5sZW5ndGg7fSxrZXlPZjpmdW5jdGlvbihiLGQpe2Zvcih2YXIgYyBpbiBiKXtpZihhLmNhbGwo
YixjKSYmYltjXT09PWQpe3JldHVybiBjOworK319cmV0dXJuIG51bGw7fSxjb250YWluczpmdW5j
dGlvbihiLGMpe3JldHVybiBPYmplY3Qua2V5T2YoYixjKSE9bnVsbDt9LHRvUXVlcnlTdHJpbmc6
ZnVuY3Rpb24oYixjKXt2YXIgZD1bXTtPYmplY3QuZWFjaChiLGZ1bmN0aW9uKGgsZyl7aWYoYyl7
Zz1jKyJbIitnKyJdIjsKKyt9dmFyIGY7c3dpdGNoKHR5cGVPZihoKSl7Y2FzZSJvYmplY3QiOmY9
T2JqZWN0LnRvUXVlcnlTdHJpbmcoaCxnKTticmVhaztjYXNlImFycmF5Ijp2YXIgZT17fTtoLmVh
Y2goZnVuY3Rpb24oayxqKXtlW2pdPWs7fSk7Zj1PYmplY3QudG9RdWVyeVN0cmluZyhlLGcpOwor
K2JyZWFrO2RlZmF1bHQ6Zj1nKyI9IitlbmNvZGVVUklDb21wb25lbnQoaCk7fWlmKGghPW51bGwp
e2QucHVzaChmKTt9fSk7cmV0dXJuIGQuam9pbigiJiIpO319KTt9KSgpO0hhc2guaW1wbGVtZW50
KHtoYXM6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxrZXlPZjpmdW5jdGlvbihhKXty
ZXR1cm4gT2JqZWN0LmtleU9mKHRoaXMsYSk7CisrfSxoYXNWYWx1ZTpmdW5jdGlvbihhKXtyZXR1
cm4gT2JqZWN0LmNvbnRhaW5zKHRoaXMsYSk7fSxleHRlbmQ6ZnVuY3Rpb24oYSl7SGFzaC5lYWNo
KGF8fHt9LGZ1bmN0aW9uKGMsYil7SGFzaC5zZXQodGhpcyxiLGMpO30sdGhpcyk7cmV0dXJuIHRo
aXM7fSxjb21iaW5lOmZ1bmN0aW9uKGEpe0hhc2guZWFjaChhfHx7fSxmdW5jdGlvbihjLGIpe0hh
c2guaW5jbHVkZSh0aGlzLGIsYyk7CisrfSx0aGlzKTtyZXR1cm4gdGhpczt9LGVyYXNlOmZ1bmN0
aW9uKGEpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoYSkpe2RlbGV0ZSB0aGlzW2FdO31yZXR1cm4g
dGhpczt9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4odGhpcy5oYXNPd25Qcm9wZXJ0eShhKSk/dGhp
c1thXTpudWxsOworK30sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIXRoaXNbYV18fHRoaXMuaGFzT3du
UHJvcGVydHkoYSkpe3RoaXNbYV09Yjt9cmV0dXJuIHRoaXM7fSxlbXB0eTpmdW5jdGlvbigpe0hh
c2guZWFjaCh0aGlzLGZ1bmN0aW9uKGIsYSl7ZGVsZXRlIHRoaXNbYV07fSx0aGlzKTsKKytyZXR1
cm4gdGhpczt9LGluY2x1ZGU6ZnVuY3Rpb24oYSxiKXtpZih0aGlzW2FdPT1udWxsKXt0aGlzW2Fd
PWI7fXJldHVybiB0aGlzO30sbWFwOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBIYXNoKE9iamVj
dC5tYXAodGhpcyxhLGIpKTt9LGZpbHRlcjpmdW5jdGlvbihhLGIpe3JldHVybiBuZXcgSGFzaChP
YmplY3QuZmlsdGVyKHRoaXMsYSxiKSk7CisrfSxldmVyeTpmdW5jdGlvbihhLGIpe3JldHVybiBP
YmplY3QuZXZlcnkodGhpcyxhLGIpO30sc29tZTpmdW5jdGlvbihhLGIpe3JldHVybiBPYmplY3Qu
c29tZSh0aGlzLGEsYik7fSxnZXRLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRo
aXMpO30sZ2V0VmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC52YWx1ZXModGhpcyk7Cisr
fSx0b1F1ZXJ5U3RyaW5nOmZ1bmN0aW9uKGEpe3JldHVybiBPYmplY3QudG9RdWVyeVN0cmluZyh0
aGlzLGEpO319KTtIYXNoLmV4dGVuZD1PYmplY3QuYXBwZW5kO0hhc2guYWxpYXMoe2luZGV4T2Y6
ImtleU9mIixjb250YWluczoiaGFzVmFsdWUifSk7KGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5kb2N1
bWVudDsKKyt2YXIgaj1sLndpbmRvdz10aGlzO3ZhciBiPTE7dGhpcy4kdWlkPShqLkFjdGl2ZVhP
YmplY3QpP2Z1bmN0aW9uKGUpe3JldHVybihlLnVpZHx8KGUudWlkPVtiKytdKSlbMF07fTpmdW5j
dGlvbihlKXtyZXR1cm4gZS51aWR8fChlLnVpZD1iKyspO307JHVpZChqKTskdWlkKGwpOworK3Zh
ciBhPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSxjPW5hdmlnYXRvci5wbGF0Zm9y
bS50b0xvd2VyQ2FzZSgpLGs9YS5tYXRjaCgvKG9wZXJhfGllfGZpcmVmb3h8Y2hyb21lfHZlcnNp
b24pW1xzXC86XShbXHdcZFwuXSspPy4qPyhzYWZhcml8dmVyc2lvbltcc1wvOl0oW1x3XGRcLl0r
KXwkKS8pfHxbbnVsbCwidW5rbm93biIsMF0sZz1rWzFdPT0iaWUiJiZsLmRvY3VtZW50TW9kZTsK
Kyt2YXIgcD10aGlzLkJyb3dzZXI9e2V4dGVuZDpGdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5kLG5h
bWU6KGtbMV09PSJ2ZXJzaW9uIik/a1szXTprWzFdLHZlcnNpb246Z3x8cGFyc2VGbG9hdCgoa1sx
XT09Im9wZXJhIiYma1s0XSk/a1s0XTprWzJdKSxQbGF0Zm9ybTp7bmFtZTphLm1hdGNoKC9pcCg/
OmFkfG9kfGhvbmUpLyk/ImlvcyI6KGEubWF0Y2goLyg/OndlYm9zfGFuZHJvaWQpLyl8fGMubWF0
Y2goL21hY3x3aW58bGludXgvKXx8WyJvdGhlciJdKVswXX0sRmVhdHVyZXM6e3hwYXRoOiEhKGwu
ZXZhbHVhdGUpLGFpcjohIShqLnJ1bnRpbWUpLHF1ZXJ5OiEhKGwucXVlcnlTZWxlY3RvciksanNv
bjohIShqLkpTT04pfSxQbHVnaW5zOnt9fTsKKytwW3AubmFtZV09dHJ1ZTtwW3AubmFtZStwYXJz
ZUludChwLnZlcnNpb24sMTApXT10cnVlO3AuUGxhdGZvcm1bcC5QbGF0Zm9ybS5uYW1lXT10cnVl
O3AuUmVxdWVzdD0oZnVuY3Rpb24oKXt2YXIgcj1mdW5jdGlvbigpe3JldHVybiBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKKyt9O3ZhciBxPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0
KCJNU1hNTDIuWE1MSFRUUCIpO307dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFjdGl2ZVhP
YmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7fTtyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5j
dGlvbigpe3IoKTsKKytyZXR1cm4gcjt9LGZ1bmN0aW9uKCl7cSgpO3JldHVybiBxO30sZnVuY3Rp
b24oKXtlKCk7cmV0dXJuIGU7fSk7fSkoKTtwLkZlYXR1cmVzLnhocj0hIShwLlJlcXVlc3QpO3Zh
ciBpPShGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci5wbHVnaW5z
WyJTaG9ja3dhdmUgRmxhc2giXS5kZXNjcmlwdGlvbjsKKyt9LGZ1bmN0aW9uKCl7cmV0dXJuIG5l
dyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIpLkdldFZhcmlh
YmxlKCIkdmVyc2lvbiIpO30pfHwiMCByMCIpLm1hdGNoKC9cZCsvZyk7cC5QbHVnaW5zLkZsYXNo
PXt2ZXJzaW9uOk51bWJlcihpWzBdfHwiMC4iK2lbMV0pfHwwLGJ1aWxkOk51bWJlcihpWzJdKXx8
MH07CisrcC5leGVjPWZ1bmN0aW9uKHEpe2lmKCFxKXtyZXR1cm4gcTt9aWYoai5leGVjU2NyaXB0
KXtqLmV4ZWNTY3JpcHQocSk7fWVsc2V7dmFyIGU9bC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtl
LnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvamF2YXNjcmlwdCIpO2UudGV4dD1xOworK2wuaGVh
ZC5hcHBlbmRDaGlsZChlKTtsLmhlYWQucmVtb3ZlQ2hpbGQoZSk7fXJldHVybiBxO307U3RyaW5n
LmltcGxlbWVudCgic3RyaXBTY3JpcHRzIixmdW5jdGlvbihxKXt2YXIgZT0iIjt2YXIgcj10aGlz
LnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xzXFNdKj8pPFwvc2NyaXB0Pi9naSxmdW5jdGlvbihz
LHQpe2UrPXQrIlxuIjsKKytyZXR1cm4iIjt9KTtpZihxPT09dHJ1ZSl7cC5leGVjKGUpO31lbHNl
e2lmKHR5cGVPZihxKT09ImZ1bmN0aW9uIil7cShlLHIpO319cmV0dXJuIHI7fSk7cC5leHRlbmQo
e0RvY3VtZW50OnRoaXMuRG9jdW1lbnQsV2luZG93OnRoaXMuV2luZG93LEVsZW1lbnQ6dGhpcy5F
bGVtZW50LEV2ZW50OnRoaXMuRXZlbnR9KTsKKyt0aGlzLldpbmRvdz10aGlzLiRjb25zdHJ1Y3Rv
cj1uZXcgVHlwZSgiV2luZG93IixmdW5jdGlvbigpe30pO3RoaXMuJGZhbWlseT1GdW5jdGlvbi5m
cm9tKCJ3aW5kb3ciKS5oaWRlKCk7V2luZG93Lm1pcnJvcihmdW5jdGlvbihlLHEpe2pbZV09cTt9
KTt0aGlzLkRvY3VtZW50PWwuJGNvbnN0cnVjdG9yPW5ldyBUeXBlKCJEb2N1bWVudCIsZnVuY3Rp
b24oKXt9KTsKKytsLiRmYW1pbHk9RnVuY3Rpb24uZnJvbSgiZG9jdW1lbnQiKS5oaWRlKCk7RG9j
dW1lbnQubWlycm9yKGZ1bmN0aW9uKGUscSl7bFtlXT1xO30pO2wuaHRtbD1sLmRvY3VtZW50RWxl
bWVudDtpZighbC5oZWFkKXtsLmhlYWQ9bC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBd
OworK31pZihsLmV4ZWNDb21tYW5kKXt0cnl7bC5leGVjQ29tbWFuZCgiQmFja2dyb3VuZEltYWdl
Q2FjaGUiLGZhbHNlLHRydWUpO31jYXRjaChoKXt9fWlmKHRoaXMuYXR0YWNoRXZlbnQmJiF0aGlz
LmFkZEV2ZW50TGlzdGVuZXIpe3ZhciBkPWZ1bmN0aW9uKCl7dGhpcy5kZXRhY2hFdmVudCgib251
bmxvYWQiLGQpOworK2wuaGVhZD1sLmh0bWw9bC53aW5kb3c9bnVsbDt9O3RoaXMuYXR0YWNoRXZl
bnQoIm9udW5sb2FkIixkKTt9dmFyIG49QXJyYXkuZnJvbTt0cnl7bihsLmh0bWwuY2hpbGROb2Rl
cyk7fWNhdGNoKGgpe0FycmF5LmZyb209ZnVuY3Rpb24ocSl7aWYodHlwZW9mIHEhPSJzdHJpbmci
JiZUeXBlLmlzRW51bWVyYWJsZShxKSYmdHlwZU9mKHEpIT0iYXJyYXkiKXt2YXIgZT1xLmxlbmd0
aCxyPW5ldyBBcnJheShlKTsKKyt3aGlsZShlLS0pe3JbZV09cVtlXTt9cmV0dXJuIHI7fXJldHVy
biBuKHEpO307dmFyIG09QXJyYXkucHJvdG90eXBlLG89bS5zbGljZTtbInBvcCIsInB1c2giLCJy
ZXZlcnNlIiwic2hpZnQiLCJzb3J0Iiwic3BsaWNlIiwidW5zaGlmdCIsImNvbmNhdCIsImpvaW4i
LCJzbGljZSJdLmVhY2goZnVuY3Rpb24oZSl7dmFyIHE9bVtlXTsKKytBcnJheVtlXT1mdW5jdGlv
bihyKXtyZXR1cm4gcS5hcHBseShBcnJheS5mcm9tKHIpLG8uY2FsbChhcmd1bWVudHMsMSkpO307
fSk7fWlmKHAuUGxhdGZvcm0uaW9zKXtwLlBsYXRmb3JtLmlwb2Q9dHJ1ZTt9cC5FbmdpbmU9e307
dmFyIGY9ZnVuY3Rpb24ocSxlKXtwLkVuZ2luZS5uYW1lPXE7CisrcC5FbmdpbmVbcStlXT10cnVl
O3AuRW5naW5lLnZlcnNpb249ZTt9O2lmKHAuaWUpe3AuRW5naW5lLnRyaWRlbnQ9dHJ1ZTtzd2l0
Y2gocC52ZXJzaW9uKXtjYXNlIDY6ZigidHJpZGVudCIsNCk7YnJlYWs7Y2FzZSA3OmYoInRyaWRl
bnQiLDUpO2JyZWFrO2Nhc2UgODpmKCJ0cmlkZW50Iiw2KTsKKyt9fWlmKHAuZmlyZWZveCl7cC5F
bmdpbmUuZ2Vja289dHJ1ZTtpZihwLnZlcnNpb24+PTMpe2YoImdlY2tvIiwxOSk7fWVsc2V7Zigi
Z2Vja28iLDE4KTt9fWlmKHAuc2FmYXJpfHxwLmNocm9tZSl7cC5FbmdpbmUud2Via2l0PXRydWU7
c3dpdGNoKHAudmVyc2lvbil7Y2FzZSAyOmYoIndlYmtpdCIsNDE5KTsKKyticmVhaztjYXNlIDM6
Zigid2Via2l0Iiw0MjApO2JyZWFrO2Nhc2UgNDpmKCJ3ZWJraXQiLDUyNSk7fX1pZihwLm9wZXJh
KXtwLkVuZ2luZS5wcmVzdG89dHJ1ZTtpZihwLnZlcnNpb24+PTkuNil7ZigicHJlc3RvIiw5NjAp
O31lbHNle2lmKHAudmVyc2lvbj49OS41KXtmKCJwcmVzdG8iLDk1MCk7CisrfWVsc2V7ZigicHJl
c3RvIiw5MjUpO319fWlmKHAubmFtZT09InVua25vd24iKXtzd2l0Y2goKGEubWF0Y2goLyg/Ondl
YmtpdHxraHRtbHxnZWNrbykvKXx8W10pWzBdKXtjYXNlIndlYmtpdCI6Y2FzZSJraHRtbCI6cC5F
bmdpbmUud2Via2l0PXRydWU7YnJlYWs7Y2FzZSJnZWNrbyI6cC5FbmdpbmUuZ2Vja289dHJ1ZTsK
Kyt9fXRoaXMuJGV4ZWM9cC5leGVjO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9e307dmFyIGE9dGhp
cy5ET01FdmVudD1uZXcgVHlwZSgiRE9NRXZlbnQiLGZ1bmN0aW9uKGMsZyl7aWYoIWcpe2c9d2lu
ZG93O31jPWN8fGcuZXZlbnQ7aWYoYy4kZXh0ZW5kZWQpe3JldHVybiBjOworK310aGlzLmV2ZW50
PWM7dGhpcy4kZXh0ZW5kZWQ9dHJ1ZTt0aGlzLnNoaWZ0PWMuc2hpZnRLZXk7dGhpcy5jb250cm9s
PWMuY3RybEtleTt0aGlzLmFsdD1jLmFsdEtleTt0aGlzLm1ldGE9Yy5tZXRhS2V5O3ZhciBpPXRo
aXMudHlwZT1jLnR5cGU7dmFyIGg9Yy50YXJnZXR8fGMuc3JjRWxlbWVudDsKKyt3aGlsZShoJiZo
Lm5vZGVUeXBlPT0zKXtoPWgucGFyZW50Tm9kZTt9dGhpcy50YXJnZXQ9ZG9jdW1lbnQuaWQoaCk7
aWYoaS5pbmRleE9mKCJrZXkiKT09MCl7dmFyIGQ9dGhpcy5jb2RlPShjLndoaWNofHxjLmtleUNv
ZGUpO3RoaXMua2V5PWJbZF18fE9iamVjdC5rZXlPZihFdmVudC5LZXlzLGQpOworK2lmKGk9PSJr
ZXlkb3duIil7aWYoZD4xMTEmJmQ8MTI0KXt0aGlzLmtleT0iZiIrKGQtMTExKTt9ZWxzZXtpZihk
Pjk1JiZkPDEwNil7dGhpcy5rZXk9ZC05Njt9fX1pZih0aGlzLmtleT09bnVsbCl7dGhpcy5rZXk9
U3RyaW5nLmZyb21DaGFyQ29kZShkKS50b0xvd2VyQ2FzZSgpOworK319ZWxzZXtpZihpPT0iY2xp
Y2sifHxpPT0iZGJsY2xpY2sifHxpPT0iY29udGV4dG1lbnUifHxpPT0iRE9NTW91c2VTY3JvbGwi
fHxpLmluZGV4T2YoIm1vdXNlIik9PTApe3ZhciBqPWcuZG9jdW1lbnQ7aj0oIWouY29tcGF0TW9k
ZXx8ai5jb21wYXRNb2RlPT0iQ1NTMUNvbXBhdCIpP2ouaHRtbDpqLmJvZHk7CisrdGhpcy5wYWdl
PXt4OihjLnBhZ2VYIT1udWxsKT9jLnBhZ2VYOmMuY2xpZW50WCtqLnNjcm9sbExlZnQseTooYy5w
YWdlWSE9bnVsbCk/Yy5wYWdlWTpjLmNsaWVudFkrai5zY3JvbGxUb3B9O3RoaXMuY2xpZW50PXt4
OihjLnBhZ2VYIT1udWxsKT9jLnBhZ2VYLWcucGFnZVhPZmZzZXQ6Yy5jbGllbnRYLHk6KGMucGFn
ZVkhPW51bGwpP2MucGFnZVktZy5wYWdlWU9mZnNldDpjLmNsaWVudFl9OworK2lmKGk9PSJET01N
b3VzZVNjcm9sbCJ8fGk9PSJtb3VzZXdoZWVsIil7dGhpcy53aGVlbD0oYy53aGVlbERlbHRhKT9j
LndoZWVsRGVsdGEvMTIwOi0oYy5kZXRhaWx8fDApLzM7fXRoaXMucmlnaHRDbGljaz0oYy53aGlj
aD09M3x8Yy5idXR0b249PTIpO2lmKGk9PSJtb3VzZW92ZXIifHxpPT0ibW91c2VvdXQiKXt2YXIg
az1jLnJlbGF0ZWRUYXJnZXR8fGNbKGk9PSJtb3VzZW92ZXIiPyJmcm9tIjoidG8iKSsiRWxlbWVu
dCJdOworK3doaWxlKGsmJmsubm9kZVR5cGU9PTMpe2s9ay5wYXJlbnROb2RlO310aGlzLnJlbGF0
ZWRUYXJnZXQ9ZG9jdW1lbnQuaWQoayk7fX1lbHNle2lmKGkuaW5kZXhPZigidG91Y2giKT09MHx8
aS5pbmRleE9mKCJnZXN0dXJlIik9PTApe3RoaXMucm90YXRpb249Yy5yb3RhdGlvbjsKKyt0aGlz
LnNjYWxlPWMuc2NhbGU7dGhpcy50YXJnZXRUb3VjaGVzPWMudGFyZ2V0VG91Y2hlczt0aGlzLmNo
YW5nZWRUb3VjaGVzPWMuY2hhbmdlZFRvdWNoZXM7dmFyIGY9dGhpcy50b3VjaGVzPWMudG91Y2hl
cztpZihmJiZmWzBdKXt2YXIgZT1mWzBdO3RoaXMucGFnZT17eDplLnBhZ2VYLHk6ZS5wYWdlWX07
CisrdGhpcy5jbGllbnQ9e3g6ZS5jbGllbnRYLHk6ZS5jbGllbnRZfTt9fX19aWYoIXRoaXMuY2xp
ZW50KXt0aGlzLmNsaWVudD17fTt9aWYoIXRoaXMucGFnZSl7dGhpcy5wYWdlPXt9O319KTthLmlt
cGxlbWVudCh7c3RvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZlbnREZWZhdWx0KCkuc3Rv
cFByb3BhZ2F0aW9uKCk7CisrfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLmV2
ZW50LnN0b3BQcm9wYWdhdGlvbil7dGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTt9ZWxzZXt0
aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZT10cnVlO31yZXR1cm4gdGhpczt9LHByZXZlbnREZWZhdWx0
OmZ1bmN0aW9uKCl7aWYodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCl7dGhpcy5ldmVudC5wcmV2
ZW50RGVmYXVsdCgpOworK31lbHNle3RoaXMuZXZlbnQucmV0dXJuVmFsdWU9ZmFsc2U7fXJldHVy
biB0aGlzO319KTthLmRlZmluZUtleT1mdW5jdGlvbihkLGMpe2JbZF09YztyZXR1cm4gdGhpczt9
O2EuZGVmaW5lS2V5cz1hLmRlZmluZUtleS5vdmVybG9hZFNldHRlcih0cnVlKTthLmRlZmluZUtl
eXMoeyIzOCI6InVwIiwiNDAiOiJkb3duIiwiMzciOiJsZWZ0IiwiMzkiOiJyaWdodCIsIjI3Ijoi
ZXNjIiwiMzIiOiJzcGFjZSIsIjgiOiJiYWNrc3BhY2UiLCI5IjoidGFiIiwiNDYiOiJkZWxldGUi
LCIxMyI6ImVudGVyIn0pOworK30pKCk7dmFyIEV2ZW50PURPTUV2ZW50O0V2ZW50LktleXM9e307
RXZlbnQuS2V5cz1uZXcgSGFzaChFdmVudC5LZXlzKTsoZnVuY3Rpb24oKXt2YXIgYT10aGlzLkNs
YXNzPW5ldyBUeXBlKCJDbGFzcyIsZnVuY3Rpb24oaCl7aWYoaW5zdGFuY2VPZihoLEZ1bmN0aW9u
KSl7aD17aW5pdGlhbGl6ZTpofTsKKyt9dmFyIGc9ZnVuY3Rpb24oKXtlKHRoaXMpO2lmKGcuJHBy
b3RvdHlwaW5nKXtyZXR1cm4gdGhpczt9dGhpcy4kY2FsbGVyPW51bGw7dmFyIGk9KHRoaXMuaW5p
dGlhbGl6ZSk/dGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzO3RoaXMu
JGNhbGxlcj10aGlzLmNhbGxlcj1udWxsOworK3JldHVybiBpO30uZXh0ZW5kKHRoaXMpLmltcGxl
bWVudChoKTtnLiRjb25zdHJ1Y3Rvcj1hO2cucHJvdG90eXBlLiRjb25zdHJ1Y3Rvcj1nO2cucHJv
dG90eXBlLnBhcmVudD1jO3JldHVybiBnO30pO3ZhciBjPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJGNh
bGxlcil7dGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kICJwYXJlbnQiIGNhbm5vdCBiZSBjYWxs
ZWQuJyk7CisrfXZhciBnPXRoaXMuJGNhbGxlci4kbmFtZSxoPXRoaXMuJGNhbGxlci4kb3duZXIu
cGFyZW50LGk9KGgpP2gucHJvdG90eXBlW2ddOm51bGw7aWYoIWkpe3Rocm93IG5ldyBFcnJvcign
VGhlIG1ldGhvZCAiJytnKyciIGhhcyBubyBwYXJlbnQuJyk7fXJldHVybiBpLmFwcGx5KHRoaXMs
YXJndW1lbnRzKTsKKyt9O3ZhciBlPWZ1bmN0aW9uKGcpe2Zvcih2YXIgaCBpbiBnKXt2YXIgaj1n
W2hdO3N3aXRjaCh0eXBlT2Yoaikpe2Nhc2Uib2JqZWN0Ijp2YXIgaT1mdW5jdGlvbigpe307aS5w
cm90b3R5cGU9ajtnW2hdPWUobmV3IGkpO2JyZWFrO2Nhc2UiYXJyYXkiOmdbaF09ai5jbG9uZSgp
OworK2JyZWFrO319cmV0dXJuIGc7fTt2YXIgYj1mdW5jdGlvbihnLGgsail7aWYoai4kb3JpZ2lu
KXtqPWouJG9yaWdpbjt9dmFyIGk9ZnVuY3Rpb24oKXtpZihqLiRwcm90ZWN0ZWQmJnRoaXMuJGNh
bGxlcj09bnVsbCl7dGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kICInK2grJyIgY2Fubm90IGJl
IGNhbGxlZC4nKTsKKyt9dmFyIGw9dGhpcy5jYWxsZXIsbT10aGlzLiRjYWxsZXI7dGhpcy5jYWxs
ZXI9bTt0aGlzLiRjYWxsZXI9aTt2YXIgaz1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLiRj
YWxsZXI9bTt0aGlzLmNhbGxlcj1sO3JldHVybiBrO30uZXh0ZW5kKHskb3duZXI6Zywkb3JpZ2lu
OmosJG5hbWU6aH0pOworK3JldHVybiBpO307dmFyIGY9ZnVuY3Rpb24oaCxpLGcpe2lmKGEuTXV0
YXRvcnMuaGFzT3duUHJvcGVydHkoaCkpe2k9YS5NdXRhdG9yc1toXS5jYWxsKHRoaXMsaSk7aWYo
aT09bnVsbCl7cmV0dXJuIHRoaXM7fX1pZih0eXBlT2YoaSk9PSJmdW5jdGlvbiIpe2lmKGkuJGhp
ZGRlbil7cmV0dXJuIHRoaXM7CisrfXRoaXMucHJvdG90eXBlW2hdPShnKT9pOmIodGhpcyxoLGkp
O31lbHNle09iamVjdC5tZXJnZSh0aGlzLnByb3RvdHlwZSxoLGkpO31yZXR1cm4gdGhpczt9O3Zh
ciBkPWZ1bmN0aW9uKGcpe2cuJHByb3RvdHlwaW5nPXRydWU7dmFyIGg9bmV3IGc7ZGVsZXRlIGcu
JHByb3RvdHlwaW5nOworK3JldHVybiBoO307YS5pbXBsZW1lbnQoImltcGxlbWVudCIsZi5vdmVy
bG9hZFNldHRlcigpKTthLk11dGF0b3JzPXtFeHRlbmRzOmZ1bmN0aW9uKGcpe3RoaXMucGFyZW50
PWc7dGhpcy5wcm90b3R5cGU9ZChnKTt9LEltcGxlbWVudHM6ZnVuY3Rpb24oZyl7QXJyYXkuZnJv
bShnKS5lYWNoKGZ1bmN0aW9uKGope3ZhciBoPW5ldyBqOworK2Zvcih2YXIgaSBpbiBoKXtmLmNh
bGwodGhpcyxpLGhbaV0sdHJ1ZSk7fX0sdGhpcyk7fX07fSkoKTsoZnVuY3Rpb24oKXt0aGlzLkNo
YWluPW5ldyBDbGFzcyh7JGNoYWluOltdLGNoYWluOmZ1bmN0aW9uKCl7dGhpcy4kY2hhaW4uYXBw
ZW5kKEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSk7CisrcmV0dXJuIHRoaXM7fSxjYWxsQ2hhaW46
ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy4kY2hhaW4ubGVuZ3RoKT90aGlzLiRjaGFpbi5zaGlmdCgp
LmFwcGx5KHRoaXMsYXJndW1lbnRzKTpmYWxzZTt9LGNsZWFyQ2hhaW46ZnVuY3Rpb24oKXt0aGlz
LiRjaGFpbi5lbXB0eSgpOworK3JldHVybiB0aGlzO319KTt2YXIgYT1mdW5jdGlvbihiKXtyZXR1
cm4gYi5yZXBsYWNlKC9eb24oW0EtWl0pLyxmdW5jdGlvbihjLGQpe3JldHVybiBkLnRvTG93ZXJD
YXNlKCk7fSk7fTt0aGlzLkV2ZW50cz1uZXcgQ2xhc3MoeyRldmVudHM6e30sYWRkRXZlbnQ6ZnVu
Y3Rpb24oZCxjLGIpe2Q9YShkKTsKKytpZihjPT0kZW1wdHkpe3JldHVybiB0aGlzO310aGlzLiRl
dmVudHNbZF09KHRoaXMuJGV2ZW50c1tkXXx8W10pLmluY2x1ZGUoYyk7aWYoYil7Yy5pbnRlcm5h
bD10cnVlO31yZXR1cm4gdGhpczt9LGFkZEV2ZW50czpmdW5jdGlvbihiKXtmb3IodmFyIGMgaW4g
Yil7dGhpcy5hZGRFdmVudChjLGJbY10pOworK31yZXR1cm4gdGhpczt9LGZpcmVFdmVudDpmdW5j
dGlvbihlLGMsYil7ZT1hKGUpO3ZhciBkPXRoaXMuJGV2ZW50c1tlXTtpZighZCl7cmV0dXJuIHRo
aXM7fWM9QXJyYXkuZnJvbShjKTtkLmVhY2goZnVuY3Rpb24oZil7aWYoYil7Zi5kZWxheShiLHRo
aXMsYyk7fWVsc2V7Zi5hcHBseSh0aGlzLGMpOworK319LHRoaXMpO3JldHVybiB0aGlzO30scmVt
b3ZlRXZlbnQ6ZnVuY3Rpb24oZSxkKXtlPWEoZSk7dmFyIGM9dGhpcy4kZXZlbnRzW2VdO2lmKGMm
JiFkLmludGVybmFsKXt2YXIgYj1jLmluZGV4T2YoZCk7aWYoYiE9LTEpe2RlbGV0ZSBjW2JdO319
cmV0dXJuIHRoaXM7CisrfSxyZW1vdmVFdmVudHM6ZnVuY3Rpb24oZCl7dmFyIGU7aWYodHlwZU9m
KGQpPT0ib2JqZWN0Iil7Zm9yKGUgaW4gZCl7dGhpcy5yZW1vdmVFdmVudChlLGRbZV0pO31yZXR1
cm4gdGhpczt9aWYoZCl7ZD1hKGQpO31mb3IoZSBpbiB0aGlzLiRldmVudHMpe2lmKGQmJmQhPWUp
e2NvbnRpbnVlOworK312YXIgYz10aGlzLiRldmVudHNbZV07Zm9yKHZhciBiPWMubGVuZ3RoO2It
LTspe2lmKGIgaW4gYyl7dGhpcy5yZW1vdmVFdmVudChlLGNbYl0pO319fXJldHVybiB0aGlzO319
KTt0aGlzLk9wdGlvbnM9bmV3IENsYXNzKHtzZXRPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIGI9dGhp
cy5vcHRpb25zPU9iamVjdC5tZXJnZS5hcHBseShudWxsLFt7fSx0aGlzLm9wdGlvbnNdLmFwcGVu
ZChhcmd1bWVudHMpKTsKKytpZih0aGlzLmFkZEV2ZW50KXtmb3IodmFyIGMgaW4gYil7aWYodHlw
ZU9mKGJbY10pIT0iZnVuY3Rpb24ifHwhKC9eb25bQS1aXS8pLnRlc3QoYykpe2NvbnRpbnVlO310
aGlzLmFkZEV2ZW50KGMsYltjXSk7ZGVsZXRlIGJbY107fX1yZXR1cm4gdGhpczt9fSk7fSkoKTsK
KysoZnVuY3Rpb24oKXt2YXIgayxuLGwsZyxhPXt9LGM9e30sbT0vXFwvZzt2YXIgZT1mdW5jdGlv
bihxLHApe2lmKHE9PW51bGwpe3JldHVybiBudWxsO31pZihxLlNsaWNrPT09dHJ1ZSl7cmV0dXJu
IHE7fXE9KCIiK3EpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTtnPSEhcDsKKyt2YXIgbz0oZyk/
YzphO2lmKG9bcV0pe3JldHVybiBvW3FdO31rPXtTbGljazp0cnVlLGV4cHJlc3Npb25zOltdLHJh
dzpxLHJldmVyc2U6ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLnJhdyx0cnVlKTt9fTtuPS0xO3do
aWxlKHEhPShxPXEucmVwbGFjZShqLGIpKSl7fWsubGVuZ3RoPWsuZXhwcmVzc2lvbnMubGVuZ3Ro
OworK3JldHVybiBvW2sucmF3XT0oZyk/aChrKTprO307dmFyIGk9ZnVuY3Rpb24obyl7aWYobz09
PSIhIil7cmV0dXJuIiAiO31lbHNle2lmKG89PT0iICIpe3JldHVybiIhIjt9ZWxzZXtpZigoL14h
LykudGVzdChvKSl7cmV0dXJuIG8ucmVwbGFjZSgvXiEvLCIiKTt9ZWxzZXtyZXR1cm4iISIrbzsK
Kyt9fX19O3ZhciBoPWZ1bmN0aW9uKHUpe3ZhciByPXUuZXhwcmVzc2lvbnM7Zm9yKHZhciBwPTA7
cDxyLmxlbmd0aDtwKyspe3ZhciB0PXJbcF07dmFyIHE9e3BhcnRzOltdLHRhZzoiKiIsY29tYmlu
YXRvcjppKHRbMF0uY29tYmluYXRvcil9O2Zvcih2YXIgbz0wO288dC5sZW5ndGg7CisrbysrKXt2
YXIgcz10W29dO2lmKCFzLnJldmVyc2VDb21iaW5hdG9yKXtzLnJldmVyc2VDb21iaW5hdG9yPSIg
Ijt9cy5jb21iaW5hdG9yPXMucmV2ZXJzZUNvbWJpbmF0b3I7ZGVsZXRlIHMucmV2ZXJzZUNvbWJp
bmF0b3I7fXQucmV2ZXJzZSgpLnB1c2gocSk7fXJldHVybiB1OworK307dmFyIGY9ZnVuY3Rpb24o
byl7cmV0dXJuIG8ucmVwbGFjZSgvWy1bXF17fSgpKis/LlxcXiR8LCNcc10vZyxmdW5jdGlvbihw
KXtyZXR1cm4iXFwiK3A7fSk7fTt2YXIgaj1uZXcgUmVnRXhwKCJeKD86XFxzKigsKVxccyp8XFxz
Kig8Y29tYmluYXRvcj4rKVxccyp8KFxccyspfCg8dW5pY29kZT4rfFxcKil8XFwjKDx1bmljb2Rl
PispfFxcLig8dW5pY29kZT4rKXxcXFtcXHMqKDx1bmljb2RlMT4rKSg/OlxccyooWypeJCF+fF0/
PSkoPzpcXHMqKD86KFtcIiddPykoLio/KVxcOSkpKT9cXHMqXFxdKD8hXFxdKXwoOispKDx1bmlj
b2RlPispKD86XFwoKD86KD86KFtcIiddKShbXlxcMTNdKilcXDEzKXwoKD86XFwoW14pXStcXCl8
W14oKV0qKSspKVxcKSk/KSIucmVwbGFjZSgvPGNvbWJpbmF0b3I+LywiWyIrZigiPit+YCFAJCVe
Jj17fVxcOzwvIikrIl0iKS5yZXBsYWNlKC88dW5pY29kZT4vZywiKD86W1xcd1xcdTAwYTEtXFx1
RkZGRi1dfFxcXFxbXlxcczAtOWEtZl0pIikucmVwbGFjZSgvPHVuaWNvZGUxPi9nLCIoPzpbOlxc
d1xcdTAwYTEtXFx1RkZGRi1dfFxcXFxbXlxcczAtOWEtZl0pIikpOworK2Z1bmN0aW9uIGIoeCxz
LEQseixyLEMscSxCLEEseSx1LEYsRyx2LHAsdyl7aWYoc3x8bj09PS0xKXtrLmV4cHJlc3Npb25z
Wysrbl09W107bD0tMTtpZihzKXtyZXR1cm4iIjt9fWlmKER8fHp8fGw9PT0tMSl7RD1EfHwiICI7
dmFyIHQ9ay5leHByZXNzaW9uc1tuXTsKKytpZihnJiZ0W2xdKXt0W2xdLnJldmVyc2VDb21iaW5h
dG9yPWkoRCk7fXRbKytsXT17Y29tYmluYXRvcjpELHRhZzoiKiJ9O312YXIgbz1rLmV4cHJlc3Np
b25zW25dW2xdO2lmKHIpe28udGFnPXIucmVwbGFjZShtLCIiKTt9ZWxzZXtpZihDKXtvLmlkPUMu
cmVwbGFjZShtLCIiKTsKKyt9ZWxzZXtpZihxKXtxPXEucmVwbGFjZShtLCIiKTtpZighby5jbGFz
c0xpc3Qpe28uY2xhc3NMaXN0PVtdO31pZighby5jbGFzc2VzKXtvLmNsYXNzZXM9W107fW8uY2xh
c3NMaXN0LnB1c2gocSk7by5jbGFzc2VzLnB1c2goe3ZhbHVlOnEscmVnZXhwOm5ldyBSZWdFeHAo
IihefFxccykiK2YocSkrIihcXHN8JCkiKX0pOworK31lbHNle2lmKEcpe3c9d3x8cDt3PXc/dy5y
ZXBsYWNlKG0sIiIpOm51bGw7aWYoIW8ucHNldWRvcyl7by5wc2V1ZG9zPVtdO31vLnBzZXVkb3Mu
cHVzaCh7a2V5OkcucmVwbGFjZShtLCIiKSx2YWx1ZTp3LHR5cGU6Ri5sZW5ndGg9PTE/ImNsYXNz
IjoiZWxlbWVudCJ9KTsKKyt9ZWxzZXtpZihCKXtCPUIucmVwbGFjZShtLCIiKTt1PSh1fHwiIiku
cmVwbGFjZShtLCIiKTt2YXIgRSxIO3N3aXRjaChBKXtjYXNlIl49IjpIPW5ldyBSZWdFeHAoIl4i
K2YodSkpO2JyZWFrO2Nhc2UiJD0iOkg9bmV3IFJlZ0V4cChmKHUpKyIkIik7YnJlYWs7Y2FzZSJ+
PSI6SD1uZXcgUmVnRXhwKCIoXnxcXHMpIitmKHUpKyIoXFxzfCQpIik7CisrYnJlYWs7Y2FzZSJ8
PSI6SD1uZXcgUmVnRXhwKCJeIitmKHUpKyIoLXwkKSIpO2JyZWFrO2Nhc2UiPSI6RT1mdW5jdGlv
bihJKXtyZXR1cm4gdT09STt9O2JyZWFrO2Nhc2UiKj0iOkU9ZnVuY3Rpb24oSSl7cmV0dXJuIEkm
JkkuaW5kZXhPZih1KT4tMTt9O2JyZWFrOworK2Nhc2UiIT0iOkU9ZnVuY3Rpb24oSSl7cmV0dXJu
IHUhPUk7fTticmVhaztkZWZhdWx0OkU9ZnVuY3Rpb24oSSl7cmV0dXJuICEhSTt9O31pZih1PT0i
IiYmKC9eWyokXl09JC8pLnRlc3QoQSkpe0U9ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fTt9aWYo
IUUpe0U9ZnVuY3Rpb24oSSl7cmV0dXJuIEkmJkgudGVzdChJKTsKKyt9O31pZighby5hdHRyaWJ1
dGVzKXtvLmF0dHJpYnV0ZXM9W107fW8uYXR0cmlidXRlcy5wdXNoKHtrZXk6QixvcGVyYXRvcjpB
LHZhbHVlOnUsdGVzdDpFfSk7fX19fX1yZXR1cm4iIjt9dmFyIGQ9KHRoaXMuU2xpY2t8fHt9KTtk
LnBhcnNlPWZ1bmN0aW9uKG8pe3JldHVybiBlKG8pOworK307ZC5lc2NhcGVSZWdFeHA9ZjtpZigh
dGhpcy5TbGljayl7dGhpcy5TbGljaz1kO319KS5hcHBseSgodHlwZW9mIGV4cG9ydHMhPSJ1bmRl
ZmluZWQiKT9leHBvcnRzOnRoaXMpOyhmdW5jdGlvbigpe3ZhciBrPXt9LG09e30sZD1PYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nOworK2suaXNOYXRpdmVDb2RlPWZ1bmN0aW9uKGMpe3JldHVybigv
XHtccypcW25hdGl2ZSBjb2RlXF1ccypcfS8pLnRlc3QoIiIrYyk7fTtrLmlzWE1MPWZ1bmN0aW9u
KGMpe3JldHVybighIWMueG1sVmVyc2lvbil8fCghIWMueG1sKXx8KGQuY2FsbChjKT09IltvYmpl
Y3QgWE1MRG9jdW1lbnRdIil8fChjLm5vZGVUeXBlPT05JiZjLmRvY3VtZW50RWxlbWVudC5ub2Rl
TmFtZSE9IkhUTUwiKTsKKyt9O2suc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oeCl7dmFyIHU9eC5ub2Rl
VHlwZTtpZih1PT05KXt9ZWxzZXtpZih1KXt4PXgub3duZXJEb2N1bWVudDt9ZWxzZXtpZih4Lm5h
dmlnYXRvcil7eD14LmRvY3VtZW50O31lbHNle3JldHVybjt9fX1pZih0aGlzLmRvY3VtZW50PT09
eCl7cmV0dXJuOworK310aGlzLmRvY3VtZW50PXg7dmFyIHo9eC5kb2N1bWVudEVsZW1lbnQsdj10
aGlzLmdldFVJRFhNTCh6KSxwPW1bdl0sQjtpZihwKXtmb3IoQiBpbiBwKXt0aGlzW0JdPXBbQl07
fXJldHVybjt9cD1tW3ZdPXt9O3Aucm9vdD16O3AuaXNYTUxEb2N1bWVudD10aGlzLmlzWE1MKHgp
OworK3AuYnJva2VuU3RhckdFQlROPXAuc3RhclNlbGVjdHNDbG9zZWRRU0E9cC5pZEdldHNOYW1l
PXAuYnJva2VuTWl4ZWRDYXNlUVNBPXAuYnJva2VuR0VCQ049cC5icm9rZW5DaGVja2VkUVNBPXAu
YnJva2VuRW1wdHlBdHRyaWJ1dGVRU0E9cC5pc0hUTUxEb2N1bWVudD1wLm5hdGl2ZU1hdGNoZXNT
ZWxlY3Rvcj1mYWxzZTsKKyt2YXIgbixvLHkscixzO3ZhciB0LGM9InNsaWNrX3VuaXF1ZWlkIjt2
YXIgQT14LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ZhciBxPXguYm9keXx8eC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgiYm9keSIpWzBdfHx6O3EuYXBwZW5kQ2hpbGQoQSk7dHJ5e0EuaW5uZXJIVE1MPSc8
YSBpZD0iJytjKyciPjwvYT4nOworK3AuaXNIVE1MRG9jdW1lbnQ9ISF4LmdldEVsZW1lbnRCeUlk
KGMpO31jYXRjaCh3KXt9aWYocC5pc0hUTUxEb2N1bWVudCl7QS5zdHlsZS5kaXNwbGF5PSJub25l
IjtBLmFwcGVuZENoaWxkKHguY3JlYXRlQ29tbWVudCgiIikpO289KEEuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoIioiKS5sZW5ndGg+MSk7CisrdHJ5e0EuaW5uZXJIVE1MPSJmb288L2Zvbz4iO3Q9QS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpO249KHQmJiEhdC5sZW5ndGgmJnRbMF0ubm9kZU5hbWUu
Y2hhckF0KDApPT0iLyIpO31jYXRjaCh3KXt9cC5icm9rZW5TdGFyR0VCVE49b3x8bjt0cnl7QS5p
bm5lckhUTUw9JzxhIG5hbWU9IicrYysnIj48L2E+PGIgaWQ9IicrYysnIj48L2I+JzsKKytwLmlk
R2V0c05hbWU9eC5nZXRFbGVtZW50QnlJZChjKT09PUEuZmlyc3RDaGlsZDt9Y2F0Y2godyl7fWlm
KEEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSl7dHJ5e0EuaW5uZXJIVE1MPSc8YSBjbGFzcz0iZiI+
PC9hPjxhIGNsYXNzPSJiIj48L2E+JztBLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImIiKS5sZW5n
dGg7CisrQS5maXJzdENoaWxkLmNsYXNzTmFtZT0iYiI7cj0oQS5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKCJiIikubGVuZ3RoIT0yKTt9Y2F0Y2godyl7fXRyeXtBLmlubmVySFRNTD0nPGEgY2xhc3M9
ImEiPjwvYT48YSBjbGFzcz0iZiBiIGEiPjwvYT4nO3k9KEEuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSgiYSIpLmxlbmd0aCE9Mik7CisrfWNhdGNoKHcpe31wLmJyb2tlbkdFQkNOPXJ8fHk7fWlmKEEu
cXVlcnlTZWxlY3RvckFsbCl7dHJ5e0EuaW5uZXJIVE1MPSJmb288L2Zvbz4iO3Q9QS5xdWVyeVNl
bGVjdG9yQWxsKCIqIik7cC5zdGFyU2VsZWN0c0Nsb3NlZFFTQT0odCYmISF0Lmxlbmd0aCYmdFsw
XS5ub2RlTmFtZS5jaGFyQXQoMCk9PSIvIik7CisrfWNhdGNoKHcpe310cnl7QS5pbm5lckhUTUw9
JzxhIGNsYXNzPSJNaVgiPjwvYT4nO3AuYnJva2VuTWl4ZWRDYXNlUVNBPSFBLnF1ZXJ5U2VsZWN0
b3JBbGwoIi5NaVgiKS5sZW5ndGg7fWNhdGNoKHcpe310cnl7QS5pbm5lckhUTUw9JzxzZWxlY3Q+
PG9wdGlvbiBzZWxlY3RlZD0ic2VsZWN0ZWQiPmE8L29wdGlvbj48L3NlbGVjdD4nOworK3AuYnJv
a2VuQ2hlY2tlZFFTQT0oQS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aD09MCk7
fWNhdGNoKHcpe310cnl7QS5pbm5lckhUTUw9JzxhIGNsYXNzPSIiPjwvYT4nO3AuYnJva2VuRW1w
dHlBdHRyaWJ1dGVRU0E9KEEucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj0iIl0nKS5sZW5ndGgh
PTApOworK31jYXRjaCh3KXt9fXRyeXtBLmlubmVySFRNTD0nPGZvcm0gYWN0aW9uPSJzIj48aW5w
dXQgaWQ9ImFjdGlvbiIvPjwvZm9ybT4nO3M9KEEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImFj
dGlvbiIpIT0icyIpO31jYXRjaCh3KXt9cC5uYXRpdmVNYXRjaGVzU2VsZWN0b3I9ei5tYXRjaGVz
U2VsZWN0b3J8fHoubW96TWF0Y2hlc1NlbGVjdG9yfHx6LndlYmtpdE1hdGNoZXNTZWxlY3RvcjsK
KytpZihwLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvcil7dHJ5e3AubmF0aXZlTWF0Y2hlc1NlbGVjdG9y
LmNhbGwoeiwiOnNsaWNrIik7cC5uYXRpdmVNYXRjaGVzU2VsZWN0b3I9bnVsbDt9Y2F0Y2godyl7
fX19dHJ5e3ouc2xpY2tfZXhwYW5kbz0xO2RlbGV0ZSB6LnNsaWNrX2V4cGFuZG87CisrcC5nZXRV
SUQ9dGhpcy5nZXRVSURIVE1MO31jYXRjaCh3KXtwLmdldFVJRD10aGlzLmdldFVJRFhNTDt9cS5y
ZW1vdmVDaGlsZChBKTtBPXQ9cT1udWxsO3AuZ2V0QXR0cmlidXRlPShwLmlzSFRNTERvY3VtZW50
JiZzKT9mdW5jdGlvbihFLEMpe3ZhciBGPXRoaXMuYXR0cmlidXRlR2V0dGVyc1tDXTsKKytpZihG
KXtyZXR1cm4gRi5jYWxsKEUpO312YXIgRD1FLmdldEF0dHJpYnV0ZU5vZGUoQyk7cmV0dXJuKEQp
P0Qubm9kZVZhbHVlOm51bGw7fTpmdW5jdGlvbihELEMpe3ZhciBFPXRoaXMuYXR0cmlidXRlR2V0
dGVyc1tDXTtyZXR1cm4oRSk/RS5jYWxsKEQpOkQuZ2V0QXR0cmlidXRlKEMpOworK307cC5oYXNB
dHRyaWJ1dGU9KHomJnRoaXMuaXNOYXRpdmVDb2RlKHouaGFzQXR0cmlidXRlKSk/ZnVuY3Rpb24o
RCxDKXtyZXR1cm4gRC5oYXNBdHRyaWJ1dGUoQyk7fTpmdW5jdGlvbihELEMpe0Q9RC5nZXRBdHRy
aWJ1dGVOb2RlKEMpO3JldHVybiAhIShEJiYoRC5zcGVjaWZpZWR8fEQubm9kZVZhbHVlKSk7Cisr
fTtwLmNvbnRhaW5zPSh6JiZ0aGlzLmlzTmF0aXZlQ29kZSh6LmNvbnRhaW5zKSk/ZnVuY3Rpb24o
QyxEKXtyZXR1cm4gQy5jb250YWlucyhEKTt9Oih6JiZ6LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u
KT9mdW5jdGlvbihDLEQpe3JldHVybiBDPT09RHx8ISEoQy5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bihEKSYxNik7CisrfTpmdW5jdGlvbihDLEQpe2lmKEQpe2Rve2lmKEQ9PT1DKXtyZXR1cm4gdHJ1
ZTt9fXdoaWxlKChEPUQucGFyZW50Tm9kZSkpO31yZXR1cm4gZmFsc2U7fTtwLmRvY3VtZW50U29y
dGVyPSh6LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKT9mdW5jdGlvbihELEMpe2lmKCFELmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9ufHwhQy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbil7cmV0dXJuIDA7
CisrfXJldHVybiBELmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKEMpJjQ/LTE6RD09PUM/MDoxO306
KCJzb3VyY2VJbmRleCIgaW4geik/ZnVuY3Rpb24oRCxDKXtpZighRC5zb3VyY2VJbmRleHx8IUMu
c291cmNlSW5kZXgpe3JldHVybiAwO31yZXR1cm4gRC5zb3VyY2VJbmRleC1DLnNvdXJjZUluZGV4
OworK306KHguY3JlYXRlUmFuZ2UpP2Z1bmN0aW9uKEYsRCl7aWYoIUYub3duZXJEb2N1bWVudHx8
IUQub3duZXJEb2N1bWVudCl7cmV0dXJuIDA7fXZhciBFPUYub3duZXJEb2N1bWVudC5jcmVhdGVS
YW5nZSgpLEM9RC5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7RS5zZXRTdGFydChGLDApOwor
K0Uuc2V0RW5kKEYsMCk7Qy5zZXRTdGFydChELDApO0Muc2V0RW5kKEQsMCk7cmV0dXJuIEUuY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCxDKTt9Om51bGw7ej1udWxsO2Zv
cihCIGluIHApe3RoaXNbQl09cFtCXTt9fTt2YXIgZj0vXihbIy5dPykoKD86W1x3LV0rfFwqKSkk
LyxoPS9cWy4rWyokXl09KD86IiJ8JycpP1xdLyxnPXt9OworK2suc2VhcmNoPWZ1bmN0aW9uKFUs
eixILHMpe3ZhciBwPXRoaXMuZm91bmQ9KHMpP251bGw6KEh8fFtdKTtpZighVSl7cmV0dXJuIHA7
fWVsc2V7aWYoVS5uYXZpZ2F0b3Ipe1U9VS5kb2N1bWVudDt9ZWxzZXtpZighVS5ub2RlVHlwZSl7
cmV0dXJuIHA7fX19dmFyIEYsTyxWPXRoaXMudW5pcXVlcz17fSxJPSEhKEgmJkgubGVuZ3RoKSx5
PShVLm5vZGVUeXBlPT05KTsKKytpZih0aGlzLmRvY3VtZW50IT09KHk/VTpVLm93bmVyRG9jdW1l
bnQpKXt0aGlzLnNldERvY3VtZW50KFUpO31pZihJKXtmb3IoTz1wLmxlbmd0aDtPLS07KXtWW3Ro
aXMuZ2V0VUlEKHBbT10pXT10cnVlO319aWYodHlwZW9mIHo9PSJzdHJpbmciKXt2YXIgcj16Lm1h
dGNoKGYpOworK3NpbXBsZVNlbGVjdG9yczppZihyKXt2YXIgdT1yWzFdLHY9clsyXSxBLEU7aWYo
IXUpe2lmKHY9PSIqIiYmdGhpcy5icm9rZW5TdGFyR0VCVE4pe2JyZWFrIHNpbXBsZVNlbGVjdG9y
czt9RT1VLmdldEVsZW1lbnRzQnlUYWdOYW1lKHYpO2lmKHMpe3JldHVybiBFWzBdfHxudWxsOwor
K31mb3IoTz0wO0E9RVtPKytdOyl7aWYoIShJJiZWW3RoaXMuZ2V0VUlEKEEpXSkpe3AucHVzaChB
KTt9fX1lbHNle2lmKHU9PSIjIil7aWYoIXRoaXMuaXNIVE1MRG9jdW1lbnR8fCF5KXticmVhayBz
aW1wbGVTZWxlY3RvcnM7fUE9VS5nZXRFbGVtZW50QnlJZCh2KTsKKytpZighQSl7cmV0dXJuIHA7
fWlmKHRoaXMuaWRHZXRzTmFtZSYmQS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1ZSE9
dil7YnJlYWsgc2ltcGxlU2VsZWN0b3JzO31pZihzKXtyZXR1cm4gQXx8bnVsbDt9aWYoIShJJiZW
W3RoaXMuZ2V0VUlEKEEpXSkpe3AucHVzaChBKTsKKyt9fWVsc2V7aWYodT09Ii4iKXtpZighdGhp
cy5pc0hUTUxEb2N1bWVudHx8KCghVS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lfHx0aGlzLmJyb2tl
bkdFQkNOKSYmVS5xdWVyeVNlbGVjdG9yQWxsKSl7YnJlYWsgc2ltcGxlU2VsZWN0b3JzO31pZihV
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJiF0aGlzLmJyb2tlbkdFQkNOKXtFPVUuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSh2KTsKKytpZihzKXtyZXR1cm4gRVswXXx8bnVsbDt9Zm9yKE89MDtBPUVb
TysrXTspe2lmKCEoSSYmVlt0aGlzLmdldFVJRChBKV0pKXtwLnB1c2goQSk7fX19ZWxzZXt2YXIg
VD1uZXcgUmVnRXhwKCIoXnxcXHMpIitlLmVzY2FwZVJlZ0V4cCh2KSsiKFxcc3wkKSIpO0U9VS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOworK2ZvcihPPTA7QT1FW08rK107KXtjbGFzc05hbWU9
QS5jbGFzc05hbWU7aWYoIShjbGFzc05hbWUmJlQudGVzdChjbGFzc05hbWUpKSl7Y29udGludWU7
fWlmKHMpe3JldHVybiBBO31pZighKEkmJlZbdGhpcy5nZXRVSUQoQSldKSl7cC5wdXNoKEEpO319
fX19fWlmKEkpe3RoaXMuc29ydChwKTsKKyt9cmV0dXJuKHMpP251bGw6cDt9cXVlcnlTZWxlY3Rv
cjppZihVLnF1ZXJ5U2VsZWN0b3JBbGwpe2lmKCF0aGlzLmlzSFRNTERvY3VtZW50fHxnW3pdfHx0
aGlzLmJyb2tlbk1peGVkQ2FzZVFTQXx8KHRoaXMuYnJva2VuQ2hlY2tlZFFTQSYmei5pbmRleE9m
KCI6Y2hlY2tlZCIpPi0xKXx8KHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EmJmgudGVzdCh6
KSl8fCgheSYmei5pbmRleE9mKCIsIik+LTEpfHxlLmRpc2FibGVRU0Epe2JyZWFrIHF1ZXJ5U2Vs
ZWN0b3I7CisrfXZhciBTPXoseD1VO2lmKCF5KXt2YXIgQz14LmdldEF0dHJpYnV0ZSgiaWQiKSx0
PSJzbGlja2lkX18iO3guc2V0QXR0cmlidXRlKCJpZCIsdCk7Uz0iIyIrdCsiICIrUztVPXgucGFy
ZW50Tm9kZTt9dHJ5e2lmKHMpe3JldHVybiBVLnF1ZXJ5U2VsZWN0b3IoUyl8fG51bGw7CisrfWVs
c2V7RT1VLnF1ZXJ5U2VsZWN0b3JBbGwoUyk7fX1jYXRjaChRKXtnW3pdPTE7YnJlYWsgcXVlcnlT
ZWxlY3Rvcjt9ZmluYWxseXtpZigheSl7aWYoQyl7eC5zZXRBdHRyaWJ1dGUoImlkIixDKTt9ZWxz
ZXt4LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTt9VT14O319aWYodGhpcy5zdGFyU2VsZWN0c0Nsb3Nl
ZFFTQSl7Zm9yKE89MDsKKytBPUVbTysrXTspe2lmKEEubm9kZU5hbWU+IkAiJiYhKEkmJlZbdGhp
cy5nZXRVSUQoQSldKSl7cC5wdXNoKEEpO319fWVsc2V7Zm9yKE89MDtBPUVbTysrXTspe2lmKCEo
SSYmVlt0aGlzLmdldFVJRChBKV0pKXtwLnB1c2goQSk7fX19aWYoSSl7dGhpcy5zb3J0KHApOwor
K31yZXR1cm4gcDt9Rj10aGlzLlNsaWNrLnBhcnNlKHopO2lmKCFGLmxlbmd0aCl7cmV0dXJuIHA7
fX1lbHNle2lmKHo9PW51bGwpe3JldHVybiBwO31lbHNle2lmKHouU2xpY2spe0Y9ejt9ZWxzZXtp
Zih0aGlzLmNvbnRhaW5zKFUuZG9jdW1lbnRFbGVtZW50fHxVLHopKXsocCk/cC5wdXNoKHopOnA9
ejsKKytyZXR1cm4gcDt9ZWxzZXtyZXR1cm4gcDt9fX19dGhpcy5wb3NOVEg9e307dGhpcy5wb3NO
VEhMYXN0PXt9O3RoaXMucG9zTlRIVHlwZT17fTt0aGlzLnBvc05USFR5cGVMYXN0PXt9O3RoaXMu
cHVzaD0oIUkmJihzfHwoRi5sZW5ndGg9PTEmJkYuZXhwcmVzc2lvbnNbMF0ubGVuZ3RoPT0xKSkp
P3RoaXMucHVzaEFycmF5OnRoaXMucHVzaFVJRDsKKytpZihwPT1udWxsKXtwPVtdO312YXIgTSxM
LEs7dmFyIEIsSixELGMscSxHLFc7dmFyIE4sUCxvLHcsUj1GLmV4cHJlc3Npb25zO3NlYXJjaDpm
b3IoTz0wOyhQPVJbT10pO08rKyl7Zm9yKE09MDsobz1QW01dKTtNKyspe0I9ImNvbWJpbmF0b3I6
IitvLmNvbWJpbmF0b3I7CisraWYoIXRoaXNbQl0pe2NvbnRpbnVlIHNlYXJjaDt9Sj0odGhpcy5p
c1hNTERvY3VtZW50KT9vLnRhZzpvLnRhZy50b1VwcGVyQ2FzZSgpO0Q9by5pZDtjPW8uY2xhc3NM
aXN0O3E9by5jbGFzc2VzO0c9by5hdHRyaWJ1dGVzO1c9by5wc2V1ZG9zO3c9KE09PT0oUC5sZW5n
dGgtMSkpOworK3RoaXMuYml0VW5pcXVlcz17fTtpZih3KXt0aGlzLnVuaXF1ZXM9Vjt0aGlzLmZv
dW5kPXA7fWVsc2V7dGhpcy51bmlxdWVzPXt9O3RoaXMuZm91bmQ9W107fWlmKE09PT0wKXt0aGlz
W0JdKFUsSixELHEsRyxXLGMpO2lmKHMmJncmJnAubGVuZ3RoKXticmVhayBzZWFyY2g7CisrfX1l
bHNle2lmKHMmJncpe2ZvcihMPTAsSz1OLmxlbmd0aDtMPEs7TCsrKXt0aGlzW0JdKE5bTF0sSixE
LHEsRyxXLGMpO2lmKHAubGVuZ3RoKXticmVhayBzZWFyY2g7fX19ZWxzZXtmb3IoTD0wLEs9Ti5s
ZW5ndGg7TDxLO0wrKyl7dGhpc1tCXShOW0xdLEosRCxxLEcsVyxjKTsKKyt9fX1OPXRoaXMuZm91
bmQ7fX1pZihJfHwoRi5leHByZXNzaW9ucy5sZW5ndGg+MSkpe3RoaXMuc29ydChwKTt9cmV0dXJu
KHMpPyhwWzBdfHxudWxsKTpwO307ay51aWR4PTE7ay51aWRrPSJzbGljay11bmlxdWVpZCI7ay5n
ZXRVSURYTUw9ZnVuY3Rpb24obil7dmFyIGM9bi5nZXRBdHRyaWJ1dGUodGhpcy51aWRrKTsKKytp
ZighYyl7Yz10aGlzLnVpZHgrKztuLnNldEF0dHJpYnV0ZSh0aGlzLnVpZGssYyk7fXJldHVybiBj
O307ay5nZXRVSURIVE1MPWZ1bmN0aW9uKGMpe3JldHVybiBjLnVuaXF1ZU51bWJlcnx8KGMudW5p
cXVlTnVtYmVyPXRoaXMudWlkeCsrKTt9O2suc29ydD1mdW5jdGlvbihjKXtpZighdGhpcy5kb2N1
bWVudFNvcnRlcil7cmV0dXJuIGM7CisrfWMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtyZXR1
cm4gYzt9O2suY2FjaGVOVEg9e307ay5tYXRjaE5USD0vXihbKy1dP1xkKik/KFthLXpdKyk/KFsr
LV1cZCspPyQvO2sucGFyc2VOVEhBcmd1bWVudD1mdW5jdGlvbihxKXt2YXIgbz1xLm1hdGNoKHRo
aXMubWF0Y2hOVEgpOworK2lmKCFvKXtyZXR1cm4gZmFsc2U7fXZhciBwPW9bMl18fGZhbHNlO3Zh
ciBuPW9bMV18fDE7aWYobj09Ii0iKXtuPS0xO312YXIgYz0rb1szXXx8MDtvPShwPT0ibiIpP3th
Om4sYjpjfToocD09Im9kZCIpP3thOjIsYjoxfToocD09ImV2ZW4iKT97YToyLGI6MH06e2E6MCxi
Om59OworK3JldHVybih0aGlzLmNhY2hlTlRIW3FdPW8pO307ay5jcmVhdGVOVEhQc2V1ZG89ZnVu
Y3Rpb24ocCxuLGMsbyl7cmV0dXJuIGZ1bmN0aW9uKHMscSl7dmFyIHU9dGhpcy5nZXRVSUQocyk7
aWYoIXRoaXNbY11bdV0pe3ZhciBBPXMucGFyZW50Tm9kZTtpZighQSl7cmV0dXJuIGZhbHNlOwor
K312YXIgcj1BW3BdLHQ9MTtpZihvKXt2YXIgej1zLm5vZGVOYW1lO2Rve2lmKHIubm9kZU5hbWUh
PXope2NvbnRpbnVlO310aGlzW2NdW3RoaXMuZ2V0VUlEKHIpXT10Kys7fXdoaWxlKChyPXJbbl0p
KTt9ZWxzZXtkb3tpZihyLm5vZGVUeXBlIT0xKXtjb250aW51ZTsKKyt9dGhpc1tjXVt0aGlzLmdl
dFVJRChyKV09dCsrO313aGlsZSgocj1yW25dKSk7fX1xPXF8fCJuIjt2YXIgdj10aGlzLmNhY2hl
TlRIW3FdfHx0aGlzLnBhcnNlTlRIQXJndW1lbnQocSk7aWYoIXYpe3JldHVybiBmYWxzZTt9dmFy
IHk9di5hLHg9di5iLHc9dGhpc1tjXVt1XTsKKytpZih5PT0wKXtyZXR1cm4geD09dzt9aWYoeT4w
KXtpZih3PHgpe3JldHVybiBmYWxzZTt9fWVsc2V7aWYoeDx3KXtyZXR1cm4gZmFsc2U7fX1yZXR1
cm4oKHcteCkleSk9PTA7fTt9O2sucHVzaEFycmF5PWZ1bmN0aW9uKHAsYyxyLG8sbixxKXtpZih0
aGlzLm1hdGNoU2VsZWN0b3IocCxjLHIsbyxuLHEpKXt0aGlzLmZvdW5kLnB1c2gocCk7CisrfX07
ay5wdXNoVUlEPWZ1bmN0aW9uKHEsYyxzLHAsbixyKXt2YXIgbz10aGlzLmdldFVJRChxKTtpZigh
dGhpcy51bmlxdWVzW29dJiZ0aGlzLm1hdGNoU2VsZWN0b3IocSxjLHMscCxuLHIpKXt0aGlzLnVu
aXF1ZXNbb109dHJ1ZTt0aGlzLmZvdW5kLnB1c2gocSk7fX07Cisray5tYXRjaE5vZGU9ZnVuY3Rp
b24obixvKXtpZih0aGlzLmlzSFRNTERvY3VtZW50JiZ0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
cil7dHJ5e3JldHVybiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5jYWxsKG4sby5yZXBsYWNl
KC9cWyhbXj1dKyk9XHMqKFteJyJcXV0rPylccypcXS9nLCdbJDE9IiQyIl0nKSk7CisrfWNhdGNo
KHUpe319dmFyIHQ9dGhpcy5TbGljay5wYXJzZShvKTtpZighdCl7cmV0dXJuIHRydWU7fXZhciBy
PXQuZXhwcmVzc2lvbnMscz0wLHE7Zm9yKHE9MDsoY3VycmVudEV4cHJlc3Npb249cltxXSk7cSsr
KXtpZihjdXJyZW50RXhwcmVzc2lvbi5sZW5ndGg9PTEpe3ZhciBwPWN1cnJlbnRFeHByZXNzaW9u
WzBdOworK2lmKHRoaXMubWF0Y2hTZWxlY3RvcihuLCh0aGlzLmlzWE1MRG9jdW1lbnQpP3AudGFn
OnAudGFnLnRvVXBwZXJDYXNlKCkscC5pZCxwLmNsYXNzZXMscC5hdHRyaWJ1dGVzLHAucHNldWRv
cykpe3JldHVybiB0cnVlO31zKys7fX1pZihzPT10Lmxlbmd0aCl7cmV0dXJuIGZhbHNlOworK312
YXIgYz10aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50LHQpLHY7Zm9yKHE9MDt2PWNbcSsrXTspe2lm
KHY9PT1uKXtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9O2subWF0Y2hQc2V1ZG89ZnVuY3Rp
b24ocSxjLHApe3ZhciBuPSJwc2V1ZG86IitjO2lmKHRoaXNbbl0pe3JldHVybiB0aGlzW25dKHEs
cCk7CisrfXZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKHEsYyk7cmV0dXJuKHApP3A9PW86ISFvO307
ay5tYXRjaFNlbGVjdG9yPWZ1bmN0aW9uKG8sdixjLHAscSxzKXtpZih2KXt2YXIgdD0odGhpcy5p
c1hNTERvY3VtZW50KT9vLm5vZGVOYW1lOm8ubm9kZU5hbWUudG9VcHBlckNhc2UoKTsKKytpZih2
PT0iKiIpe2lmKHQ8IkAiKXtyZXR1cm4gZmFsc2U7fX1lbHNle2lmKHQhPXYpe3JldHVybiBmYWxz
ZTt9fX1pZihjJiZvLmdldEF0dHJpYnV0ZSgiaWQiKSE9Yyl7cmV0dXJuIGZhbHNlO312YXIgcixu
LHU7aWYocCl7Zm9yKHI9cC5sZW5ndGg7ci0tOyl7dT1vLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8
by5jbGFzc05hbWU7CisraWYoISh1JiZwW3JdLnJlZ2V4cC50ZXN0KHUpKSl7cmV0dXJuIGZhbHNl
O319fWlmKHEpe2ZvcihyPXEubGVuZ3RoO3ItLTspe249cVtyXTtpZihuLm9wZXJhdG9yPyFuLnRl
c3QodGhpcy5nZXRBdHRyaWJ1dGUobyxuLmtleSkpOiF0aGlzLmhhc0F0dHJpYnV0ZShvLG4ua2V5
KSl7cmV0dXJuIGZhbHNlOworK319fWlmKHMpe2ZvcihyPXMubGVuZ3RoO3ItLTspe249c1tyXTtp
ZighdGhpcy5tYXRjaFBzZXVkbyhvLG4ua2V5LG4udmFsdWUpKXtyZXR1cm4gZmFsc2U7fX19cmV0
dXJuIHRydWU7fTt2YXIgaj17IiAiOmZ1bmN0aW9uKHEsdyxuLHIscyx1LHApe3ZhciB0LHYsbzsK
KytpZih0aGlzLmlzSFRNTERvY3VtZW50KXtnZXRCeUlkOmlmKG4pe3Y9dGhpcy5kb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChuKTtpZigoIXYmJnEuYWxsKXx8KHRoaXMuaWRHZXRzTmFtZSYmdiYmdi5n
ZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1ZSE9bikpe289cS5hbGxbbl07CisraWYoIW8p
e3JldHVybjt9aWYoIW9bMF0pe289W29dO31mb3IodD0wO3Y9b1t0KytdOyl7dmFyIGM9di5nZXRB
dHRyaWJ1dGVOb2RlKCJpZCIpO2lmKGMmJmMubm9kZVZhbHVlPT1uKXt0aGlzLnB1c2godix3LG51
bGwscixzLHUpO2JyZWFrO319cmV0dXJuO31pZighdil7aWYodGhpcy5jb250YWlucyh0aGlzLnJv
b3QscSkpe3JldHVybjsKKyt9ZWxzZXticmVhayBnZXRCeUlkO319ZWxzZXtpZih0aGlzLmRvY3Vt
ZW50IT09cSYmIXRoaXMuY29udGFpbnMocSx2KSl7cmV0dXJuO319dGhpcy5wdXNoKHYsdyxudWxs
LHIscyx1KTtyZXR1cm47fWdldEJ5Q2xhc3M6aWYociYmcS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l
JiYhdGhpcy5icm9rZW5HRUJDTil7bz1xLmdldEVsZW1lbnRzQnlDbGFzc05hbWUocC5qb2luKCIg
IikpOworK2lmKCEobyYmby5sZW5ndGgpKXticmVhayBnZXRCeUNsYXNzO31mb3IodD0wO3Y9b1t0
KytdOyl7dGhpcy5wdXNoKHYsdyxuLG51bGwscyx1KTt9cmV0dXJuO319Z2V0QnlUYWc6e289cS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSh3KTtpZighKG8mJm8ubGVuZ3RoKSl7YnJlYWsgZ2V0QnlUYWc7
CisrfWlmKCF0aGlzLmJyb2tlblN0YXJHRUJUTil7dz1udWxsO31mb3IodD0wO3Y9b1t0KytdOyl7
dGhpcy5wdXNoKHYsdyxuLHIscyx1KTt9fX0sIj4iOmZ1bmN0aW9uKHAsYyxyLG8sbixxKXtpZigo
cD1wLmZpcnN0Q2hpbGQpKXtkb3tpZihwLm5vZGVUeXBlPT0xKXt0aGlzLnB1c2gocCxjLHIsbyxu
LHEpOworK319d2hpbGUoKHA9cC5uZXh0U2libGluZykpO319LCIrIjpmdW5jdGlvbihwLGMscixv
LG4scSl7d2hpbGUoKHA9cC5uZXh0U2libGluZykpe2lmKHAubm9kZVR5cGU9PTEpe3RoaXMucHVz
aChwLGMscixvLG4scSk7YnJlYWs7fX19LCJeIjpmdW5jdGlvbihwLGMscixvLG4scSl7cD1wLmZp
cnN0Q2hpbGQ7CisraWYocCl7aWYocC5ub2RlVHlwZT09MSl7dGhpcy5wdXNoKHAsYyxyLG8sbixx
KTt9ZWxzZXt0aGlzWyJjb21iaW5hdG9yOisiXShwLGMscixvLG4scSk7fX19LCJ+IjpmdW5jdGlv
bihxLGMscyxwLG4scil7d2hpbGUoKHE9cS5uZXh0U2libGluZykpe2lmKHEubm9kZVR5cGUhPTEp
e2NvbnRpbnVlOworK312YXIgbz10aGlzLmdldFVJRChxKTtpZih0aGlzLmJpdFVuaXF1ZXNbb10p
e2JyZWFrO310aGlzLmJpdFVuaXF1ZXNbb109dHJ1ZTt0aGlzLnB1c2gocSxjLHMscCxuLHIpO319
LCIrKyI6ZnVuY3Rpb24ocCxjLHIsbyxuLHEpe3RoaXNbImNvbWJpbmF0b3I6KyJdKHAsYyxyLG8s
bixxKTsKKyt0aGlzWyJjb21iaW5hdG9yOiErIl0ocCxjLHIsbyxuLHEpO30sIn5+IjpmdW5jdGlv
bihwLGMscixvLG4scSl7dGhpc1siY29tYmluYXRvcjp+Il0ocCxjLHIsbyxuLHEpO3RoaXNbImNv
bWJpbmF0b3I6IX4iXShwLGMscixvLG4scSk7fSwiISI6ZnVuY3Rpb24ocCxjLHIsbyxuLHEpe3do
aWxlKChwPXAucGFyZW50Tm9kZSkpe2lmKHAhPT10aGlzLmRvY3VtZW50KXt0aGlzLnB1c2gocCxj
LHIsbyxuLHEpOworK319fSwiIT4iOmZ1bmN0aW9uKHAsYyxyLG8sbixxKXtwPXAucGFyZW50Tm9k
ZTtpZihwIT09dGhpcy5kb2N1bWVudCl7dGhpcy5wdXNoKHAsYyxyLG8sbixxKTt9fSwiISsiOmZ1
bmN0aW9uKHAsYyxyLG8sbixxKXt3aGlsZSgocD1wLnByZXZpb3VzU2libGluZykpe2lmKHAubm9k
ZVR5cGU9PTEpe3RoaXMucHVzaChwLGMscixvLG4scSk7CisrYnJlYWs7fX19LCIhXiI6ZnVuY3Rp
b24ocCxjLHIsbyxuLHEpe3A9cC5sYXN0Q2hpbGQ7aWYocCl7aWYocC5ub2RlVHlwZT09MSl7dGhp
cy5wdXNoKHAsYyxyLG8sbixxKTt9ZWxzZXt0aGlzWyJjb21iaW5hdG9yOiErIl0ocCxjLHIsbyxu
LHEpO319fSwiIX4iOmZ1bmN0aW9uKHEsYyxzLHAsbixyKXt3aGlsZSgocT1xLnByZXZpb3VzU2li
bGluZykpe2lmKHEubm9kZVR5cGUhPTEpe2NvbnRpbnVlOworK312YXIgbz10aGlzLmdldFVJRChx
KTtpZih0aGlzLmJpdFVuaXF1ZXNbb10pe2JyZWFrO310aGlzLmJpdFVuaXF1ZXNbb109dHJ1ZTt0
aGlzLnB1c2gocSxjLHMscCxuLHIpO319fTtmb3IodmFyIGkgaW4gail7a1siY29tYmluYXRvcjoi
K2ldPWpbaV07fXZhciBsPXtlbXB0eTpmdW5jdGlvbihjKXt2YXIgbj1jLmZpcnN0Q2hpbGQ7Cisr
cmV0dXJuICEobiYmbi5ub2RlVHlwZT09MSkmJiEoYy5pbm5lclRleHR8fGMudGV4dENvbnRlbnR8
fCIiKS5sZW5ndGg7fSxub3Q6ZnVuY3Rpb24oYyxuKXtyZXR1cm4gIXRoaXMubWF0Y2hOb2RlKGMs
bik7fSxjb250YWluczpmdW5jdGlvbihjLG4pe3JldHVybihjLmlubmVyVGV4dHx8Yy50ZXh0Q29u
dGVudHx8IiIpLmluZGV4T2Yobik+LTE7CisrfSwiZmlyc3QtY2hpbGQiOmZ1bmN0aW9uKGMpe3do
aWxlKChjPWMucHJldmlvdXNTaWJsaW5nKSl7aWYoYy5ub2RlVHlwZT09MSl7cmV0dXJuIGZhbHNl
O319cmV0dXJuIHRydWU7fSwibGFzdC1jaGlsZCI6ZnVuY3Rpb24oYyl7d2hpbGUoKGM9Yy5uZXh0
U2libGluZykpe2lmKGMubm9kZVR5cGU9PTEpe3JldHVybiBmYWxzZTsKKyt9fXJldHVybiB0cnVl
O30sIm9ubHktY2hpbGQiOmZ1bmN0aW9uKG8pe3ZhciBuPW87d2hpbGUoKG49bi5wcmV2aW91c1Np
YmxpbmcpKXtpZihuLm5vZGVUeXBlPT0xKXtyZXR1cm4gZmFsc2U7fX12YXIgYz1vO3doaWxlKChj
PWMubmV4dFNpYmxpbmcpKXtpZihjLm5vZGVUeXBlPT0xKXtyZXR1cm4gZmFsc2U7CisrfX1yZXR1
cm4gdHJ1ZTt9LCJudGgtY2hpbGQiOmsuY3JlYXRlTlRIUHNldWRvKCJmaXJzdENoaWxkIiwibmV4
dFNpYmxpbmciLCJwb3NOVEgiKSwibnRoLWxhc3QtY2hpbGQiOmsuY3JlYXRlTlRIUHNldWRvKCJs
YXN0Q2hpbGQiLCJwcmV2aW91c1NpYmxpbmciLCJwb3NOVEhMYXN0IiksIm50aC1vZi10eXBlIjpr
LmNyZWF0ZU5USFBzZXVkbygiZmlyc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicG9zTlRIVHlwZSIs
dHJ1ZSksIm50aC1sYXN0LW9mLXR5cGUiOmsuY3JlYXRlTlRIUHNldWRvKCJsYXN0Q2hpbGQiLCJw
cmV2aW91c1NpYmxpbmciLCJwb3NOVEhUeXBlTGFzdCIsdHJ1ZSksaW5kZXg6ZnVuY3Rpb24obixj
KXtyZXR1cm4gdGhpc1sicHNldWRvOm50aC1jaGlsZCJdKG4sIiIrYysxKTsKKyt9LGV2ZW46ZnVu
Y3Rpb24oYyl7cmV0dXJuIHRoaXNbInBzZXVkbzpudGgtY2hpbGQiXShjLCIybiIpO30sb2RkOmZ1
bmN0aW9uKGMpe3JldHVybiB0aGlzWyJwc2V1ZG86bnRoLWNoaWxkIl0oYywiMm4rMSIpO30sImZp
cnN0LW9mLXR5cGUiOmZ1bmN0aW9uKGMpe3ZhciBuPWMubm9kZU5hbWU7Cisrd2hpbGUoKGM9Yy5w
cmV2aW91c1NpYmxpbmcpKXtpZihjLm5vZGVOYW1lPT1uKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4g
dHJ1ZTt9LCJsYXN0LW9mLXR5cGUiOmZ1bmN0aW9uKGMpe3ZhciBuPWMubm9kZU5hbWU7d2hpbGUo
KGM9Yy5uZXh0U2libGluZykpe2lmKGMubm9kZU5hbWU9PW4pe3JldHVybiBmYWxzZTsKKyt9fXJl
dHVybiB0cnVlO30sIm9ubHktb2YtdHlwZSI6ZnVuY3Rpb24obyl7dmFyIG49byxwPW8ubm9kZU5h
bWU7d2hpbGUoKG49bi5wcmV2aW91c1NpYmxpbmcpKXtpZihuLm5vZGVOYW1lPT1wKXtyZXR1cm4g
ZmFsc2U7fX12YXIgYz1vO3doaWxlKChjPWMubmV4dFNpYmxpbmcpKXtpZihjLm5vZGVOYW1lPT1w
KXtyZXR1cm4gZmFsc2U7CisrfX1yZXR1cm4gdHJ1ZTt9LGVuYWJsZWQ6ZnVuY3Rpb24oYyl7cmV0
dXJuICFjLmRpc2FibGVkO30sZGlzYWJsZWQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGMuZGlzYWJsZWQ7
fSxjaGVja2VkOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNoZWNrZWR8fGMuc2VsZWN0ZWQ7fSxmb2N1
czpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5pc0hUTUxEb2N1bWVudCYmdGhpcy5kb2N1bWVudC5h
Y3RpdmVFbGVtZW50PT09YyYmKGMuaHJlZnx8Yy50eXBlfHx0aGlzLmhhc0F0dHJpYnV0ZShjLCJ0
YWJpbmRleCIpKTsKKyt9LHJvb3Q6ZnVuY3Rpb24oYyl7cmV0dXJuKGM9PT10aGlzLnJvb3QpO30s
c2VsZWN0ZWQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGMuc2VsZWN0ZWQ7fX07Zm9yKHZhciBiIGluIGwp
e2tbInBzZXVkbzoiK2JdPWxbYl07fXZhciBhPWsuYXR0cmlidXRlR2V0dGVycz17ImNsYXNzIjpm
dW5jdGlvbigpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8dGhpcy5jbGFzc05h
bWU7CisrfSwiZm9yIjpmdW5jdGlvbigpe3JldHVybigiaHRtbEZvciIgaW4gdGhpcyk/dGhpcy5o
dG1sRm9yOnRoaXMuZ2V0QXR0cmlidXRlKCJmb3IiKTt9LGhyZWY6ZnVuY3Rpb24oKXtyZXR1cm4o
ImhyZWYiIGluIHRoaXMpP3RoaXMuZ2V0QXR0cmlidXRlKCJocmVmIiwyKTp0aGlzLmdldEF0dHJp
YnV0ZSgiaHJlZiIpOworK30sc3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5zdHlsZSk/dGhp
cy5zdHlsZS5jc3NUZXh0OnRoaXMuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO30sdGFiaW5kZXg6ZnVu
Y3Rpb24oKXt2YXIgYz10aGlzLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7cmV0dXJuKGMm
JmMuc3BlY2lmaWVkKT9jLm5vZGVWYWx1ZTpudWxsOworK30sdHlwZTpmdW5jdGlvbigpe3JldHVy
biB0aGlzLmdldEF0dHJpYnV0ZSgidHlwZSIpO30sbWF4bGVuZ3RoOmZ1bmN0aW9uKCl7dmFyIGM9
dGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCJtYXhMZW5ndGgiKTtyZXR1cm4oYyYmYy5zcGVjaWZpZWQp
P2Mubm9kZVZhbHVlOm51bGw7CisrfX07YS5NQVhMRU5HVEg9YS5tYXhMZW5ndGg9YS5tYXhsZW5n
dGg7dmFyIGU9ay5TbGljaz0odGhpcy5TbGlja3x8e30pO2UudmVyc2lvbj0iMS4xLjYiO2Uuc2Vh
cmNoPWZ1bmN0aW9uKG4sbyxjKXtyZXR1cm4gay5zZWFyY2gobixvLGMpO307ZS5maW5kPWZ1bmN0
aW9uKGMsbil7cmV0dXJuIGsuc2VhcmNoKGMsbixudWxsLHRydWUpOworK307ZS5jb250YWlucz1m
dW5jdGlvbihjLG4pe2suc2V0RG9jdW1lbnQoYyk7cmV0dXJuIGsuY29udGFpbnMoYyxuKTt9O2Uu
Z2V0QXR0cmlidXRlPWZ1bmN0aW9uKG4sYyl7ay5zZXREb2N1bWVudChuKTtyZXR1cm4gay5nZXRB
dHRyaWJ1dGUobixjKTt9O2UuaGFzQXR0cmlidXRlPWZ1bmN0aW9uKG4sYyl7ay5zZXREb2N1bWVu
dChuKTsKKytyZXR1cm4gay5oYXNBdHRyaWJ1dGUobixjKTt9O2UubWF0Y2g9ZnVuY3Rpb24obixj
KXtpZighKG4mJmMpKXtyZXR1cm4gZmFsc2U7fWlmKCFjfHxjPT09bil7cmV0dXJuIHRydWU7fWsu
c2V0RG9jdW1lbnQobik7cmV0dXJuIGsubWF0Y2hOb2RlKG4sYyk7fTtlLmRlZmluZUF0dHJpYnV0
ZUdldHRlcj1mdW5jdGlvbihjLG4pe2suYXR0cmlidXRlR2V0dGVyc1tjXT1uOworK3JldHVybiB0
aGlzO307ZS5sb29rdXBBdHRyaWJ1dGVHZXR0ZXI9ZnVuY3Rpb24oYyl7cmV0dXJuIGsuYXR0cmli
dXRlR2V0dGVyc1tjXTt9O2UuZGVmaW5lUHNldWRvPWZ1bmN0aW9uKGMsbil7a1sicHNldWRvOiIr
Y109ZnVuY3Rpb24ocCxvKXtyZXR1cm4gbi5jYWxsKHAsbyk7CisrfTtyZXR1cm4gdGhpczt9O2Uu
bG9va3VwUHNldWRvPWZ1bmN0aW9uKGMpe3ZhciBuPWtbInBzZXVkbzoiK2NdO2lmKG4pe3JldHVy
biBmdW5jdGlvbihvKXtyZXR1cm4gbi5jYWxsKHRoaXMsbyk7fTt9cmV0dXJuIG51bGw7fTtlLm92
ZXJyaWRlPWZ1bmN0aW9uKG4sYyl7ay5vdmVycmlkZShuLGMpOworK3JldHVybiB0aGlzO307ZS5p
c1hNTD1rLmlzWE1MO2UudWlkT2Y9ZnVuY3Rpb24oYyl7cmV0dXJuIGsuZ2V0VUlESFRNTChjKTt9
O2lmKCF0aGlzLlNsaWNrKXt0aGlzLlNsaWNrPWU7fX0pLmFwcGx5KCh0eXBlb2YgZXhwb3J0cyE9
InVuZGVmaW5lZCIpP2V4cG9ydHM6dGhpcyk7CisrdmFyIEVsZW1lbnQ9ZnVuY3Rpb24oYixnKXt2
YXIgaD1FbGVtZW50LkNvbnN0cnVjdG9yc1tiXTtpZihoKXtyZXR1cm4gaChnKTt9aWYodHlwZW9m
IGIhPSJzdHJpbmciKXtyZXR1cm4gZG9jdW1lbnQuaWQoYikuc2V0KGcpO31pZighZyl7Zz17fTt9
aWYoISgvXltcdy1dKyQvKS50ZXN0KGIpKXt2YXIgZT1TbGljay5wYXJzZShiKS5leHByZXNzaW9u
c1swXVswXTsKKytiPShlLnRhZz09IioiKT8iZGl2IjplLnRhZztpZihlLmlkJiZnLmlkPT1udWxs
KXtnLmlkPWUuaWQ7fXZhciBkPWUuYXR0cmlidXRlcztpZihkKXtmb3IodmFyIGEsZj0wLGM9ZC5s
ZW5ndGg7ZjxjO2YrKyl7YT1kW2ZdO2lmKGdbYS5rZXldIT1udWxsKXtjb250aW51ZTsKKyt9aWYo
YS52YWx1ZSE9bnVsbCYmYS5vcGVyYXRvcj09Ij0iKXtnW2Eua2V5XT1hLnZhbHVlO31lbHNle2lm
KCFhLnZhbHVlJiYhYS5vcGVyYXRvcil7Z1thLmtleV09dHJ1ZTt9fX19aWYoZS5jbGFzc0xpc3Qm
JmdbImNsYXNzIl09PW51bGwpe2dbImNsYXNzIl09ZS5jbGFzc0xpc3Quam9pbigiICIpOworK319
cmV0dXJuIGRvY3VtZW50Lm5ld0VsZW1lbnQoYixnKTt9O2lmKEJyb3dzZXIuRWxlbWVudCl7RWxl
bWVudC5wcm90b3R5cGU9QnJvd3Nlci5FbGVtZW50LnByb3RvdHlwZTt9bmV3IFR5cGUoIkVsZW1l
bnQiLEVsZW1lbnQpLm1pcnJvcihmdW5jdGlvbihhKXtpZihBcnJheS5wcm90b3R5cGVbYV0pe3Jl
dHVybjsKKyt9dmFyIGI9e307YlthXT1mdW5jdGlvbigpe3ZhciBoPVtdLGU9YXJndW1lbnRzLGo9
dHJ1ZTtmb3IodmFyIGc9MCxkPXRoaXMubGVuZ3RoO2c8ZDtnKyspe3ZhciBmPXRoaXNbZ10sYz1o
W2ddPWZbYV0uYXBwbHkoZixlKTtqPShqJiZ0eXBlT2YoYyk9PSJlbGVtZW50Iik7CisrfXJldHVy
bihqKT9uZXcgRWxlbWVudHMoaCk6aDt9O0VsZW1lbnRzLmltcGxlbWVudChiKTt9KTtpZighQnJv
d3Nlci5FbGVtZW50KXtFbGVtZW50LnBhcmVudD1PYmplY3Q7RWxlbWVudC5Qcm90b3R5cGU9eyIk
ZmFtaWx5IjpGdW5jdGlvbi5mcm9tKCJlbGVtZW50IikuaGlkZSgpfTsKKytFbGVtZW50Lm1pcnJv
cihmdW5jdGlvbihhLGIpe0VsZW1lbnQuUHJvdG90eXBlW2FdPWI7fSk7fUVsZW1lbnQuQ29uc3Ry
dWN0b3JzPXt9O0VsZW1lbnQuQ29uc3RydWN0b3JzPW5ldyBIYXNoO3ZhciBJRnJhbWU9bmV3IFR5
cGUoIklGcmFtZSIsZnVuY3Rpb24oKXt2YXIgZT1BcnJheS5saW5rKGFyZ3VtZW50cyx7cHJvcGVy
dGllczpUeXBlLmlzT2JqZWN0LGlmcmFtZTpmdW5jdGlvbihmKXtyZXR1cm4oZiE9bnVsbCk7Cisr
fX0pO3ZhciBjPWUucHJvcGVydGllc3x8e30sYjtpZihlLmlmcmFtZSl7Yj1kb2N1bWVudC5pZChl
LmlmcmFtZSk7fXZhciBkPWMub25sb2FkfHxmdW5jdGlvbigpe307ZGVsZXRlIGMub25sb2FkO2Mu
aWQ9Yy5uYW1lPVtjLmlkLGMubmFtZSxiPyhiLmlkfHxiLm5hbWUpOiJJRnJhbWVfIitTdHJpbmcu
dW5pcXVlSUQoKV0ucGljaygpOworK2I9bmV3IEVsZW1lbnQoYnx8ImlmcmFtZSIsYyk7dmFyIGE9
ZnVuY3Rpb24oKXtkLmNhbGwoYi5jb250ZW50V2luZG93KTt9O2lmKHdpbmRvdy5mcmFtZXNbYy5p
ZF0pe2EoKTt9ZWxzZXtiLmFkZExpc3RlbmVyKCJsb2FkIixhKTt9cmV0dXJuIGI7fSk7dmFyIEVs
ZW1lbnRzPXRoaXMuRWxlbWVudHM9ZnVuY3Rpb24oYSl7aWYoYSYmYS5sZW5ndGgpe3ZhciBlPXt9
LGQ7CisrZm9yKHZhciBjPTA7ZD1hW2MrK107KXt2YXIgYj1TbGljay51aWRPZihkKTtpZighZVti
XSl7ZVtiXT10cnVlO3RoaXMucHVzaChkKTt9fX19O0VsZW1lbnRzLnByb3RvdHlwZT17bGVuZ3Ro
OjB9O0VsZW1lbnRzLnBhcmVudD1BcnJheTtuZXcgVHlwZSgiRWxlbWVudHMiLEVsZW1lbnRzKS5p
bXBsZW1lbnQoe2ZpbHRlcjpmdW5jdGlvbihhLGIpe2lmKCFhKXtyZXR1cm4gdGhpczsKKyt9cmV0
dXJuIG5ldyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywodHlwZU9mKGEpPT0ic3RyaW5nIik/
ZnVuY3Rpb24oYyl7cmV0dXJuIGMubWF0Y2goYSk7fTphLGIpKTt9LnByb3RlY3QoKSxwdXNoOmZ1
bmN0aW9uKCl7dmFyIGQ9dGhpcy5sZW5ndGg7Zm9yKHZhciBiPTAsYT1hcmd1bWVudHMubGVuZ3Ro
OworK2I8YTtiKyspe3ZhciBjPWRvY3VtZW50LmlkKGFyZ3VtZW50c1tiXSk7aWYoYyl7dGhpc1tk
KytdPWM7fX1yZXR1cm4odGhpcy5sZW5ndGg9ZCk7fS5wcm90ZWN0KCksdW5zaGlmdDpmdW5jdGlv
bigpe3ZhciBiPVtdO2Zvcih2YXIgYz0wLGE9YXJndW1lbnRzLmxlbmd0aDsKKytjPGE7YysrKXt2
YXIgZD1kb2N1bWVudC5pZChhcmd1bWVudHNbY10pO2lmKGQpe2IucHVzaChkKTt9fXJldHVybiBB
cnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh0aGlzLGIpO30ucHJvdGVjdCgpLGNvbmNhdDpm
dW5jdGlvbigpe3ZhciBiPW5ldyBFbGVtZW50cyh0aGlzKTsKKytmb3IodmFyIGM9MCxhPWFyZ3Vt
ZW50cy5sZW5ndGg7YzxhO2MrKyl7dmFyIGQ9YXJndW1lbnRzW2NdO2lmKFR5cGUuaXNFbnVtZXJh
YmxlKGQpKXtiLmFwcGVuZChkKTt9ZWxzZXtiLnB1c2goZCk7fX1yZXR1cm4gYjt9LnByb3RlY3Qo
KSxhcHBlbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBiPTAsYT1jLmxlbmd0aDsKKytiPGE7YisrKXt0
aGlzLnB1c2goY1tiXSk7fXJldHVybiB0aGlzO30ucHJvdGVjdCgpLGVtcHR5OmZ1bmN0aW9uKCl7
d2hpbGUodGhpcy5sZW5ndGgpe2RlbGV0ZSB0aGlzWy0tdGhpcy5sZW5ndGhdO31yZXR1cm4gdGhp
czt9LnByb3RlY3QoKX0pO0VsZW1lbnRzLmFsaWFzKCJleHRlbmQiLCJhcHBlbmQiKTsKKysoZnVu
Y3Rpb24oKXt2YXIgZz1BcnJheS5wcm90b3R5cGUuc3BsaWNlLGI9eyIwIjowLCIxIjoxLGxlbmd0
aDoyfTtnLmNhbGwoYiwxLDEpO2lmKGJbMV09PTEpe0VsZW1lbnRzLmltcGxlbWVudCgic3BsaWNl
IixmdW5jdGlvbigpe3ZhciBoPXRoaXMubGVuZ3RoO3ZhciBlPWcuYXBwbHkodGhpcyxhcmd1bWVu
dHMpOworK3doaWxlKGg+PXRoaXMubGVuZ3RoKXtkZWxldGUgdGhpc1toLS1dO31yZXR1cm4gZTt9
LnByb3RlY3QoKSk7fUVsZW1lbnRzLmltcGxlbWVudChBcnJheS5wcm90b3R5cGUpO0FycmF5Lm1p
cnJvcihFbGVtZW50cyk7dmFyIGY7dHJ5e3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIjxp
bnB1dCBuYW1lPXg+Iik7CisrZj0oYS5uYW1lPT0ieCIpO31jYXRjaChjKXt9dmFyIGQ9ZnVuY3Rp
b24oZSl7cmV0dXJuKCIiK2UpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC8iL2csIiZx
dW90OyIpO307RG9jdW1lbnQuaW1wbGVtZW50KHtuZXdFbGVtZW50OmZ1bmN0aW9uKGUsaCl7aWYo
aCYmaC5jaGVja2VkIT1udWxsKXtoLmRlZmF1bHRDaGVja2VkPWguY2hlY2tlZDsKKyt9aWYoZiYm
aCl7ZT0iPCIrZTtpZihoLm5hbWUpe2UrPScgbmFtZT0iJytkKGgubmFtZSkrJyInO31pZihoLnR5
cGUpe2UrPScgdHlwZT0iJytkKGgudHlwZSkrJyInO31lKz0iPiI7ZGVsZXRlIGgubmFtZTtkZWxl
dGUgaC50eXBlO31yZXR1cm4gdGhpcy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQoZSkpLnNldChoKTsK
Kyt9fSk7fSkoKTtEb2N1bWVudC5pbXBsZW1lbnQoe25ld1RleHROb2RlOmZ1bmN0aW9uKGEpe3Jl
dHVybiB0aGlzLmNyZWF0ZVRleHROb2RlKGEpO30sZ2V0RG9jdW1lbnQ6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpczt9LGdldFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLndpbmRvdzsKKyt9LGlk
OihmdW5jdGlvbigpe3ZhciBhPXtzdHJpbmc6ZnVuY3Rpb24oZCxjLGIpe2Q9U2xpY2suZmluZChi
LCIjIitkLnJlcGxhY2UoLyhcVykvZywiXFwkMSIpKTtyZXR1cm4oZCk/YS5lbGVtZW50KGQsYyk6
bnVsbDt9LGVsZW1lbnQ6ZnVuY3Rpb24oYixjKXskdWlkKGIpOworK2lmKCFjJiYhYi4kZmFtaWx5
JiYhKC9eKD86b2JqZWN0fGVtYmVkKSQvaSkudGVzdChiLnRhZ05hbWUpKXtPYmplY3QuYXBwZW5k
KGIsRWxlbWVudC5Qcm90b3R5cGUpO31yZXR1cm4gYjt9LG9iamVjdDpmdW5jdGlvbihjLGQsYil7
aWYoYy50b0VsZW1lbnQpe3JldHVybiBhLmVsZW1lbnQoYy50b0VsZW1lbnQoYiksZCk7CisrfXJl
dHVybiBudWxsO319O2EudGV4dG5vZGU9YS53aGl0ZXNwYWNlPWEud2luZG93PWEuZG9jdW1lbnQ9
ZnVuY3Rpb24oYil7cmV0dXJuIGI7fTtyZXR1cm4gZnVuY3Rpb24oYyxlLGQpe2lmKGMmJmMuJGZh
bWlseSYmYy51aWQpe3JldHVybiBjO312YXIgYj10eXBlT2YoYyk7CisrcmV0dXJuKGFbYl0pP2Fb
Yl0oYyxlLGR8fGRvY3VtZW50KTpudWxsO307fSkoKX0pO2lmKHdpbmRvdy4kPT1udWxsKXtXaW5k
b3cuaW1wbGVtZW50KCIkIixmdW5jdGlvbihhLGIpe3JldHVybiBkb2N1bWVudC5pZChhLGIsdGhp
cy5kb2N1bWVudCk7fSk7fVdpbmRvdy5pbXBsZW1lbnQoe2dldERvY3VtZW50OmZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuZG9jdW1lbnQ7CisrfSxnZXRXaW5kb3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
czt9fSk7W0RvY3VtZW50LEVsZW1lbnRdLmludm9rZSgiaW1wbGVtZW50Iix7Z2V0RWxlbWVudHM6
ZnVuY3Rpb24oYSl7cmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLGEsbmV3IEVsZW1lbnRzKTt9LGdl
dEVsZW1lbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcyxh
KSk7CisrfX0pO3ZhciBjb250YWlucz17Y29udGFpbnM6ZnVuY3Rpb24oYSl7cmV0dXJuIFNsaWNr
LmNvbnRhaW5zKHRoaXMsYSk7fX07aWYoIWRvY3VtZW50LmNvbnRhaW5zKXtEb2N1bWVudC5pbXBs
ZW1lbnQoY29udGFpbnMpO31pZighZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikuY29udGFp
bnMpe0VsZW1lbnQuaW1wbGVtZW50KGNvbnRhaW5zKTsKKyt9RWxlbWVudC5pbXBsZW1lbnQoImhh
c0NoaWxkIixmdW5jdGlvbihhKXtyZXR1cm4gdGhpcyE9PWEmJnRoaXMuY29udGFpbnMoYSk7fSk7
KGZ1bmN0aW9uKGIsZCxhKXt0aGlzLlNlbGVjdG9ycz17fTt2YXIgZT10aGlzLlNlbGVjdG9ycy5Q
c2V1ZG89bmV3IEhhc2goKTsKKyt2YXIgYz1mdW5jdGlvbigpe2Zvcih2YXIgZiBpbiBlKXtpZihl
Lmhhc093blByb3BlcnR5KGYpKXtTbGljay5kZWZpbmVQc2V1ZG8oZixlW2ZdKTtkZWxldGUgZVtm
XTt9fX07U2xpY2suc2VhcmNoPWZ1bmN0aW9uKGcsaCxmKXtjKCk7cmV0dXJuIGIuY2FsbCh0aGlz
LGcsaCxmKTsKKyt9O1NsaWNrLmZpbmQ9ZnVuY3Rpb24oZixnKXtjKCk7cmV0dXJuIGQuY2FsbCh0
aGlzLGYsZyk7fTtTbGljay5tYXRjaD1mdW5jdGlvbihnLGYpe2MoKTtyZXR1cm4gYS5jYWxsKHRo
aXMsZyxmKTt9O30pKFNsaWNrLnNlYXJjaCxTbGljay5maW5kLFNsaWNrLm1hdGNoKTsKKyt2YXIg
aW5qZWN0Q29tYmluYXRvcj1mdW5jdGlvbihkLGMpe2lmKCFkKXtyZXR1cm4gYzt9ZD1PYmplY3Qu
Y2xvbmUoU2xpY2sucGFyc2UoZCkpO3ZhciBiPWQuZXhwcmVzc2lvbnM7Zm9yKHZhciBhPWIubGVu
Z3RoO2EtLTspe2JbYV1bMF0uY29tYmluYXRvcj1jO31yZXR1cm4gZDsKKyt9O09iamVjdC5mb3JF
YWNoKHtnZXROZXh0OiJ+IixnZXRQcmV2aW91czoiIX4iLGdldFBhcmVudDoiISJ9LGZ1bmN0aW9u
KGEsYil7RWxlbWVudC5pbXBsZW1lbnQoYixmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5nZXRFbGVt
ZW50KGluamVjdENvbWJpbmF0b3IoYyxhKSk7CisrfSk7fSk7T2JqZWN0LmZvckVhY2goe2dldEFs
bE5leHQ6In4iLGdldEFsbFByZXZpb3VzOiIhfiIsZ2V0U2libGluZ3M6In5+IixnZXRDaGlsZHJl
bjoiPiIsZ2V0UGFyZW50czoiISJ9LGZ1bmN0aW9uKGEsYil7RWxlbWVudC5pbXBsZW1lbnQoYixm
dW5jdGlvbihjKXtyZXR1cm4gdGhpcy5nZXRFbGVtZW50cyhpbmplY3RDb21iaW5hdG9yKGMsYSkp
OworK30pO30pO0VsZW1lbnQuaW1wbGVtZW50KHtnZXRGaXJzdDpmdW5jdGlvbihhKXtyZXR1cm4g
ZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsaW5qZWN0Q29tYmluYXRvcihhLCI+IikpWzBd
KTt9LGdldExhc3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0
aGlzLGluamVjdENvbWJpbmF0b3IoYSwiPiIpKS5nZXRMYXN0KCkpOworK30sZ2V0V2luZG93OmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC53aW5kb3c7fSxnZXREb2N1bWVudDpm
dW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQ7fSxnZXRFbGVtZW50QnlJZDpmdW5j
dGlvbihhKXtyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCIjIisoIiIrYSkucmVw
bGFjZSgvKFxXKS9nLCJcXCQxIikpKTsKKyt9LG1hdGNoOmZ1bmN0aW9uKGEpe3JldHVybiAhYXx8
U2xpY2subWF0Y2godGhpcyxhKTt9fSk7aWYod2luZG93LiQkPT1udWxsKXtXaW5kb3cuaW1wbGVt
ZW50KCIkJCIsZnVuY3Rpb24oYSl7dmFyIGY9bmV3IEVsZW1lbnRzO2lmKGFyZ3VtZW50cy5sZW5n
dGg9PTEmJnR5cGVvZiBhPT0ic3RyaW5nIil7cmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLmRvY3Vt
ZW50LGEsZik7CisrfXZhciBjPUFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKTtmb3IodmFyIGQ9MCxi
PWMubGVuZ3RoO2Q8YjtkKyspe3ZhciBlPWNbZF07c3dpdGNoKHR5cGVPZihlKSl7Y2FzZSJlbGVt
ZW50IjpmLnB1c2goZSk7YnJlYWs7Y2FzZSJzdHJpbmciOlNsaWNrLnNlYXJjaCh0aGlzLmRvY3Vt
ZW50LGUsZik7CisrfX1yZXR1cm4gZjt9KTt9aWYod2luZG93LiQkPT1udWxsKXtXaW5kb3cuaW1w
bGVtZW50KCIkJCIsZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aD09MSl7aWYodHlwZW9m
IGE9PSJzdHJpbmciKXtyZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMuZG9jdW1lbnQsYSxuZXcgRWxl
bWVudHMpOworK31lbHNle2lmKFR5cGUuaXNFbnVtZXJhYmxlKGEpKXtyZXR1cm4gbmV3IEVsZW1l
bnRzKGEpO319fXJldHVybiBuZXcgRWxlbWVudHMoYXJndW1lbnRzKTt9KTt9KGZ1bmN0aW9uKCl7
dmFyIGI9e2JlZm9yZTpmdW5jdGlvbihuLG0pe3ZhciBvPW0ucGFyZW50Tm9kZTsKKytpZihvKXtv
Lmluc2VydEJlZm9yZShuLG0pO319LGFmdGVyOmZ1bmN0aW9uKG4sbSl7dmFyIG89bS5wYXJlbnRO
b2RlO2lmKG8pe28uaW5zZXJ0QmVmb3JlKG4sbS5uZXh0U2libGluZyk7fX0sYm90dG9tOmZ1bmN0
aW9uKG4sbSl7bS5hcHBlbmRDaGlsZChuKTt9LHRvcDpmdW5jdGlvbihuLG0pe20uaW5zZXJ0QmVm
b3JlKG4sbS5maXJzdENoaWxkKTsKKyt9fTtiLmluc2lkZT1iLmJvdHRvbTtPYmplY3QuZWFjaChi
LGZ1bmN0aW9uKG4sbyl7bz1vLmNhcGl0YWxpemUoKTt2YXIgbT17fTttWyJpbmplY3QiK29dPWZ1
bmN0aW9uKHApe24odGhpcyxkb2N1bWVudC5pZChwLHRydWUpKTtyZXR1cm4gdGhpczt9O21bImdy
YWIiK29dPWZ1bmN0aW9uKHApe24oZG9jdW1lbnQuaWQocCx0cnVlKSx0aGlzKTsKKytyZXR1cm4g
dGhpczt9O0VsZW1lbnQuaW1wbGVtZW50KG0pO30pO3ZhciBrPXt9LGQ9e307dmFyIGk9e307QXJy
YXkuZm9yRWFjaChbInR5cGUiLCJ2YWx1ZSIsImRlZmF1bHRWYWx1ZSIsImFjY2Vzc0tleSIsImNl
bGxQYWRkaW5nIiwiY2VsbFNwYWNpbmciLCJjb2xTcGFuIiwiZnJhbWVCb3JkZXIiLCJyZWFkT25s
eSIsInJvd1NwYW4iLCJ0YWJJbmRleCIsInVzZU1hcCJdLGZ1bmN0aW9uKG0pe2lbbS50b0xvd2Vy
Q2FzZSgpXT1tOworK30pO09iamVjdC5hcHBlbmQoaSx7aHRtbDoiaW5uZXJIVE1MIix0ZXh0Oihm
dW5jdGlvbigpe3ZhciBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybihtLnRl
eHRDb250ZW50PT1udWxsKT8iaW5uZXJUZXh0IjoidGV4dENvbnRlbnQiO30pKCl9KTsKKytPYmpl
Y3QuZm9yRWFjaChpLGZ1bmN0aW9uKG4sbSl7ZFttXT1mdW5jdGlvbihvLHApe29bbl09cDt9O2tb
bV09ZnVuY3Rpb24obyl7cmV0dXJuIG9bbl07fTt9KTt2YXIgYT1bImNvbXBhY3QiLCJub3dyYXAi
LCJpc21hcCIsImRlY2xhcmUiLCJub3NoYWRlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwicmVhZE9u
bHkiLCJtdWx0aXBsZSIsInNlbGVjdGVkIiwibm9yZXNpemUiLCJkZWZlciIsImRlZmF1bHRDaGVj
a2VkIiwiYXV0b2ZvY3VzIiwiY29udHJvbHMiLCJhdXRvcGxheSIsImxvb3AiXTsKKyt2YXIgaD17
fTtBcnJheS5mb3JFYWNoKGEsZnVuY3Rpb24obSl7dmFyIG49bS50b0xvd2VyQ2FzZSgpO2hbbl09
bTtkW25dPWZ1bmN0aW9uKG8scCl7b1ttXT0hIXA7fTtrW25dPWZ1bmN0aW9uKG8pe3JldHVybiAh
IW9bbV07fTt9KTtPYmplY3QuYXBwZW5kKGQseyJjbGFzcyI6ZnVuY3Rpb24obSxuKXsoImNsYXNz
TmFtZSIgaW4gbSk/bS5jbGFzc05hbWU9bjptLnNldEF0dHJpYnV0ZSgiY2xhc3MiLG4pOworK30s
ImZvciI6ZnVuY3Rpb24obSxuKXsoImh0bWxGb3IiIGluIG0pP20uaHRtbEZvcj1uOm0uc2V0QXR0
cmlidXRlKCJmb3IiLG4pO30sc3R5bGU6ZnVuY3Rpb24obSxuKXsobS5zdHlsZSk/bS5zdHlsZS5j
c3NUZXh0PW46bS5zZXRBdHRyaWJ1dGUoInN0eWxlIixuKTsKKyt9fSk7RWxlbWVudC5pbXBsZW1l
bnQoe3NldFByb3BlcnR5OmZ1bmN0aW9uKG4sbyl7dmFyIG09bi50b0xvd2VyQ2FzZSgpO2lmKG89
PW51bGwpe2lmKCFoW21dKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTtyZXR1cm4gdGhpczt9bz1m
YWxzZTt9dmFyIHA9ZFttXTtpZihwKXtwKHRoaXMsbyk7CisrfWVsc2V7dGhpcy5zZXRBdHRyaWJ1
dGUobixvKTt9cmV0dXJuIHRoaXM7fSxzZXRQcm9wZXJ0aWVzOmZ1bmN0aW9uKG0pe2Zvcih2YXIg
biBpbiBtKXt0aGlzLnNldFByb3BlcnR5KG4sbVtuXSk7fXJldHVybiB0aGlzO30sZ2V0UHJvcGVy
dHk6ZnVuY3Rpb24obyl7dmFyIG49a1tvLnRvTG93ZXJDYXNlKCldOworK2lmKG4pe3JldHVybiBu
KHRoaXMpO312YXIgbT1TbGljay5nZXRBdHRyaWJ1dGUodGhpcyxvKTtyZXR1cm4oIW0mJiFTbGlj
ay5oYXNBdHRyaWJ1dGUodGhpcyxvKSk/bnVsbDptO30sZ2V0UHJvcGVydGllczpmdW5jdGlvbigp
e3ZhciBtPUFycmF5LmZyb20oYXJndW1lbnRzKTsKKytyZXR1cm4gbS5tYXAodGhpcy5nZXRQcm9w
ZXJ0eSx0aGlzKS5hc3NvY2lhdGUobSk7fSxyZW1vdmVQcm9wZXJ0eTpmdW5jdGlvbihtKXtyZXR1
cm4gdGhpcy5zZXRQcm9wZXJ0eShtLG51bGwpO30scmVtb3ZlUHJvcGVydGllczpmdW5jdGlvbigp
e0FycmF5LmVhY2goYXJndW1lbnRzLHRoaXMucmVtb3ZlUHJvcGVydHksdGhpcyk7CisrcmV0dXJu
IHRoaXM7fSxzZXQ6ZnVuY3Rpb24obyxuKXt2YXIgbT1FbGVtZW50LlByb3BlcnRpZXNbb107KG0m
Jm0uc2V0KT9tLnNldC5jYWxsKHRoaXMsbik6dGhpcy5zZXRQcm9wZXJ0eShvLG4pO30ub3Zlcmxv
YWRTZXR0ZXIoKSxnZXQ6ZnVuY3Rpb24obil7dmFyIG09RWxlbWVudC5Qcm9wZXJ0aWVzW25dOwor
K3JldHVybihtJiZtLmdldCk/bS5nZXQuYXBwbHkodGhpcyk6dGhpcy5nZXRQcm9wZXJ0eShuKTt9
Lm92ZXJsb2FkR2V0dGVyKCksZXJhc2U6ZnVuY3Rpb24obil7dmFyIG09RWxlbWVudC5Qcm9wZXJ0
aWVzW25dOyhtJiZtLmVyYXNlKT9tLmVyYXNlLmFwcGx5KHRoaXMpOnRoaXMucmVtb3ZlUHJvcGVy
dHkobik7CisrcmV0dXJuIHRoaXM7fSxoYXNDbGFzczpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5j
bGFzc05hbWUuY2xlYW4oKS5jb250YWlucyhtLCIgIik7fSxhZGRDbGFzczpmdW5jdGlvbihtKXtp
ZighdGhpcy5oYXNDbGFzcyhtKSl7dGhpcy5jbGFzc05hbWU9KHRoaXMuY2xhc3NOYW1lKyIgIitt
KS5jbGVhbigpOworK31yZXR1cm4gdGhpczt9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKG0pe3RoaXMu
Y2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgiKF58XFxzKSIrbSsi
KD86XFxzfCQpIiksIiQxIik7cmV0dXJuIHRoaXM7fSx0b2dnbGVDbGFzczpmdW5jdGlvbihtLG4p
e2lmKG49PW51bGwpe249IXRoaXMuaGFzQ2xhc3MobSk7CisrfXJldHVybihuKT90aGlzLmFkZENs
YXNzKG0pOnRoaXMucmVtb3ZlQ2xhc3MobSk7fSxhZG9wdDpmdW5jdGlvbigpe3ZhciBwPXRoaXMs
bSxyPUFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSxxPXIubGVuZ3RoO2lmKHE+MSl7cD1tPWRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyt9Zm9yKHZhciBvPTA7bzxxO28rKyl7dmFy
IG49ZG9jdW1lbnQuaWQocltvXSx0cnVlKTtpZihuKXtwLmFwcGVuZENoaWxkKG4pO319aWYobSl7
dGhpcy5hcHBlbmRDaGlsZChtKTt9cmV0dXJuIHRoaXM7fSxhcHBlbmRUZXh0OmZ1bmN0aW9uKG4s
bSl7cmV0dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCkubmV3VGV4dE5vZGUobiksbSk7
CisrfSxncmFiOmZ1bmN0aW9uKG4sbSl7YlttfHwiYm90dG9tIl0oZG9jdW1lbnQuaWQobix0cnVl
KSx0aGlzKTtyZXR1cm4gdGhpczt9LGluamVjdDpmdW5jdGlvbihuLG0pe2JbbXx8ImJvdHRvbSJd
KHRoaXMsZG9jdW1lbnQuaWQobix0cnVlKSk7cmV0dXJuIHRoaXM7fSxyZXBsYWNlczpmdW5jdGlv
bihtKXttPWRvY3VtZW50LmlkKG0sdHJ1ZSk7CisrbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0
aGlzLG0pO3JldHVybiB0aGlzO30sd3JhcHM6ZnVuY3Rpb24obixtKXtuPWRvY3VtZW50LmlkKG4s
dHJ1ZSk7cmV0dXJuIHRoaXMucmVwbGFjZXMobikuZ3JhYihuLG0pO30sZ2V0U2VsZWN0ZWQ6ZnVu
Y3Rpb24oKXt0aGlzLnNlbGVjdGVkSW5kZXg7CisrcmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5m
cm9tKHRoaXMub3B0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG0pe3JldHVybiBtLnNlbGVjdGVkO30p
KTt9LHRvUXVlcnlTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgbT1bXTt0aGlzLmdldEVsZW1lbnRzKCJp
bnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSIpLmVhY2goZnVuY3Rpb24obyl7dmFyIG49by50eXBlOwor
K2lmKCFvLm5hbWV8fG8uZGlzYWJsZWR8fG49PSJzdWJtaXQifHxuPT0icmVzZXQifHxuPT0iZmls
ZSJ8fG49PSJpbWFnZSIpe3JldHVybjt9dmFyIHA9KG8uZ2V0KCJ0YWciKT09InNlbGVjdCIpP28u
Z2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ocSl7cmV0dXJuIGRvY3VtZW50LmlkKHEpLmdldCgi
dmFsdWUiKTsKKyt9KTooKG49PSJyYWRpbyJ8fG49PSJjaGVja2JveCIpJiYhby5jaGVja2VkKT9u
dWxsOm8uZ2V0KCJ2YWx1ZSIpO0FycmF5LmZyb20ocCkuZWFjaChmdW5jdGlvbihxKXtpZih0eXBl
b2YgcSE9InVuZGVmaW5lZCIpe20ucHVzaChlbmNvZGVVUklDb21wb25lbnQoby5uYW1lKSsiPSIr
ZW5jb2RlVVJJQ29tcG9uZW50KHEpKTsKKyt9fSk7fSk7cmV0dXJuIG0uam9pbigiJiIpO319KTt2
YXIgaj17fSxlPXt9O3ZhciBjPWZ1bmN0aW9uKG0pe3JldHVybihlW21dfHwoZVttXT17fSkpO307
dmFyIGc9ZnVuY3Rpb24obil7dmFyIG09bi51aWQ7aWYobi5yZW1vdmVFdmVudHMpe24ucmVtb3Zl
RXZlbnRzKCk7CisrfWlmKG4uY2xlYXJBdHRyaWJ1dGVzKXtuLmNsZWFyQXR0cmlidXRlcygpO31p
ZihtIT1udWxsKXtkZWxldGUgalttXTtkZWxldGUgZVttXTt9cmV0dXJuIG47fTt2YXIgbD17aW5w
dXQ6ImNoZWNrZWQiLG9wdGlvbjoic2VsZWN0ZWQiLHRleHRhcmVhOiJ2YWx1ZSJ9OworK0VsZW1l
bnQuaW1wbGVtZW50KHtkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIG09Zyh0aGlzKS5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiKiIpO0FycmF5LmVhY2gobSxnKTtFbGVtZW50LmRpc3Bvc2UodGhpcyk7cmV0
dXJuIG51bGw7fSxlbXB0eTpmdW5jdGlvbigpe0FycmF5LmZyb20odGhpcy5jaGlsZE5vZGVzKS5l
YWNoKEVsZW1lbnQuZGlzcG9zZSk7CisrcmV0dXJuIHRoaXM7fSxkaXNwb3NlOmZ1bmN0aW9uKCl7
cmV0dXJuKHRoaXMucGFyZW50Tm9kZSk/dGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMp
OnRoaXM7fSxjbG9uZTpmdW5jdGlvbihyLHApe3I9ciE9PWZhbHNlO3ZhciB3PXRoaXMuY2xvbmVO
b2RlKHIpLG89W3ddLHE9W3RoaXNdLHU7CisraWYocil7by5hcHBlbmQoQXJyYXkuZnJvbSh3Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpKTtxLmFwcGVuZChBcnJheS5mcm9tKHRoaXMuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoIioiKSkpO31mb3IodT1vLmxlbmd0aDt1LS07KXt2YXIgcz1vW3VdLHY9
cVt1XTtpZighcCl7cy5yZW1vdmVBdHRyaWJ1dGUoImlkIik7CisrfWlmKHMuY2xlYXJBdHRyaWJ1
dGVzKXtzLmNsZWFyQXR0cmlidXRlcygpO3MubWVyZ2VBdHRyaWJ1dGVzKHYpO3MucmVtb3ZlQXR0
cmlidXRlKCJ1aWQiKTtpZihzLm9wdGlvbnMpe3ZhciB6PXMub3B0aW9ucyxtPXYub3B0aW9ucztm
b3IodmFyIHQ9ei5sZW5ndGg7dC0tOworKyl7elt0XS5zZWxlY3RlZD1tW3RdLnNlbGVjdGVkO319
fXZhciBuPWxbdi50YWdOYW1lLnRvTG93ZXJDYXNlKCldO2lmKG4mJnZbbl0pe3Nbbl09dltuXTt9
fWlmKEJyb3dzZXIuaWUpe3ZhciB4PXcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpLHk9
dGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0Iik7CisrZm9yKHU9eC5sZW5ndGg7dS0t
Oyl7eFt1XS5vdXRlckhUTUw9eVt1XS5vdXRlckhUTUw7fX1yZXR1cm4gZG9jdW1lbnQuaWQodyk7
fX0pO1tFbGVtZW50LFdpbmRvdyxEb2N1bWVudF0uaW52b2tlKCJpbXBsZW1lbnQiLHthZGRMaXN0
ZW5lcjpmdW5jdGlvbihwLG8pe2lmKHA9PSJ1bmxvYWQiKXt2YXIgbT1vLG49dGhpczsKKytvPWZ1
bmN0aW9uKCl7bi5yZW1vdmVMaXN0ZW5lcigidW5sb2FkIixvKTttKCk7fTt9ZWxzZXtqWyR1aWQo
dGhpcyldPXRoaXM7fWlmKHRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7dGhpcy5hZGRFdmVudExpc3Rl
bmVyKHAsbywhIWFyZ3VtZW50c1syXSk7fWVsc2V7dGhpcy5hdHRhY2hFdmVudCgib24iK3Asbyk7
CisrfXJldHVybiB0aGlzO30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24obixtKXtpZih0aGlzLnJl
bW92ZUV2ZW50TGlzdGVuZXIpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLG0sISFhcmd1bWVu
dHNbMl0pO31lbHNle3RoaXMuZGV0YWNoRXZlbnQoIm9uIituLG0pOworK31yZXR1cm4gdGhpczt9
LHJldHJpZXZlOmZ1bmN0aW9uKG4sbSl7dmFyIHA9YygkdWlkKHRoaXMpKSxvPXBbbl07aWYobSE9
bnVsbCYmbz09bnVsbCl7bz1wW25dPW07fXJldHVybiBvIT1udWxsP286bnVsbDt9LHN0b3JlOmZ1
bmN0aW9uKG4sbSl7dmFyIG89YygkdWlkKHRoaXMpKTsKKytvW25dPW07cmV0dXJuIHRoaXM7fSxl
bGltaW5hdGU6ZnVuY3Rpb24obSl7dmFyIG49YygkdWlkKHRoaXMpKTtkZWxldGUgblttXTtyZXR1
cm4gdGhpczt9fSk7aWYod2luZG93LmF0dGFjaEV2ZW50JiYhd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIpe3dpbmRvdy5hZGRMaXN0ZW5lcigidW5sb2FkIixmdW5jdGlvbigpe09iamVjdC5lYWNoKGos
Zyk7CisraWYod2luZG93LkNvbGxlY3RHYXJiYWdlKXtDb2xsZWN0R2FyYmFnZSgpO319KTt9RWxl
bWVudC5Qcm9wZXJ0aWVzPXt9O0VsZW1lbnQuUHJvcGVydGllcz1uZXcgSGFzaDtFbGVtZW50LlBy
b3BlcnRpZXMuc3R5bGU9e3NldDpmdW5jdGlvbihtKXt0aGlzLnN0eWxlLmNzc1RleHQ9bTsKKyt9
LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLmNzc1RleHQ7fSxlcmFzZTpmdW5jdGlv
bigpe3RoaXMuc3R5bGUuY3NzVGV4dD0iIjt9fTtFbGVtZW50LlByb3BlcnRpZXMudGFnPXtnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CisrfX07RWxlbWVu
dC5Qcm9wZXJ0aWVzLmh0bWw9KGZ1bmN0aW9uKCl7dmFyIHM9RnVuY3Rpb24uYXR0ZW1wdChmdW5j
dGlvbigpe3ZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7dS5pbm5lckhUTUw9
Ijx0cj48dGQ+PC90ZD48L3RyPiI7fSk7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7CisrdmFyIG89e3RhYmxlOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxzZWxlY3Q6WzEsIjxz
ZWxlY3Q+IiwiPC9zZWxlY3Q+Il0sdGJvZHk6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48
L3RhYmxlPiJdLHRyOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJs
ZT4iXX07Cisrby50aGVhZD1vLnRmb290PW8udGJvZHk7dC5pbm5lckhUTUw9IjxuYXY+PC9uYXY+
Ijt2YXIgbj10LmNoaWxkTm9kZXMubGVuZ3RoPT0xO2lmKCFuKXt2YXIgcT0iYWJiciBhcnRpY2xl
IGFzaWRlIGF1ZGlvIGNhbnZhcyBkYXRhbGlzdCBkZXRhaWxzIGZpZ2NhcHRpb24gZmlndXJlIGZv
b3RlciBoZWFkZXIgaGdyb3VwIG1hcmsgbWV0ZXIgbmF2IG91dHB1dCBwcm9ncmVzcyBzZWN0aW9u
IHN1bW1hcnkgdGltZSB2aWRlbyIuc3BsaXQoIiAiKSxwPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQoKSxtPXEubGVuZ3RoOworK3doaWxlKG0tLSl7cC5jcmVhdGVFbGVtZW50KHFbbV0p
O31wLmFwcGVuZENoaWxkKHQpO312YXIgcj17c2V0OmZ1bmN0aW9uKHYpe2lmKHR5cGVPZih2KT09
ImFycmF5Iil7dj12LmpvaW4oIiIpO312YXIgdz0oIXMmJm9bdGhpcy5nZXQoInRhZyIpXSk7aWYo
IXcmJiFuKXt3PVswLCIiLCIiXTsKKyt9aWYodyl7dmFyIHg9dDt4LmlubmVySFRNTD13WzFdK3Yr
d1syXTtmb3IodmFyIHU9d1swXTt1LS07KXt4PXguZmlyc3RDaGlsZDt9dGhpcy5lbXB0eSgpLmFk
b3B0KHguY2hpbGROb2Rlcyk7fWVsc2V7dGhpcy5pbm5lckhUTUw9djt9fX07ci5lcmFzZT1yLnNl
dDtyZXR1cm4gcjsKKyt9KSgpO3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKTtm
LmlubmVySFRNTD0iPHNlbGVjdD48b3B0aW9uPnM8L29wdGlvbj48L3NlbGVjdD4iO2lmKGYuZmly
c3RDaGlsZC52YWx1ZSE9InMiKXtFbGVtZW50LlByb3BlcnRpZXMudmFsdWU9e3NldDpmdW5jdGlv
bihyKXt2YXIgbj10aGlzLmdldCgidGFnIik7CisraWYobiE9InNlbGVjdCIpe3JldHVybiB0aGlz
LnNldFByb3BlcnR5KCJ2YWx1ZSIscik7fXZhciBvPXRoaXMuZ2V0RWxlbWVudHMoIm9wdGlvbiIp
O2Zvcih2YXIgcD0wO3A8by5sZW5ndGg7cCsrKXt2YXIgcT1vW3BdLG09cS5nZXRBdHRyaWJ1dGVO
b2RlKCJ2YWx1ZSIpLHM9KG0mJm0uc3BlY2lmaWVkKT9xLnZhbHVlOnEuZ2V0KCJ0ZXh0Iik7Cisr
aWYocz09cil7cmV0dXJuIHEuc2VsZWN0ZWQ9dHJ1ZTt9fX0sZ2V0OmZ1bmN0aW9uKCl7dmFyIG89
dGhpcyxuPW8uZ2V0KCJ0YWciKTtpZihuIT0ic2VsZWN0IiYmbiE9Im9wdGlvbiIpe3JldHVybiB0
aGlzLmdldFByb3BlcnR5KCJ2YWx1ZSIpO31pZihuPT0ic2VsZWN0IiYmIShvPW8uZ2V0U2VsZWN0
ZWQoKVswXSkpe3JldHVybiIiOworK312YXIgbT1vLmdldEF0dHJpYnV0ZU5vZGUoInZhbHVlIik7
cmV0dXJuKG0mJm0uc3BlY2lmaWVkKT9vLnZhbHVlOm8uZ2V0KCJ0ZXh0Iik7fX07fX0pKCk7KGZ1
bmN0aW9uKCl7dmFyIGY9ZG9jdW1lbnQuaHRtbDtFbGVtZW50LlByb3BlcnRpZXMuc3R5bGVzPXtz
ZXQ6ZnVuY3Rpb24oaSl7dGhpcy5zZXRTdHlsZXMoaSk7CisrfX07dmFyIGg9KGYuc3R5bGUub3Bh
Y2l0eSE9bnVsbCksYT0oZi5zdHlsZS5maWx0ZXIhPW51bGwpLGc9L2FscGhhXChvcGFjaXR5PShb
XGQuXSspXCkvaTt2YXIgYj1mdW5jdGlvbihqLGkpe2ouc3RvcmUoIiRvcGFjaXR5IixpKTtqLnN0
eWxlLnZpc2liaWxpdHk9aT4wPyJ2aXNpYmxlIjoiaGlkZGVuIjsKKyt9O3ZhciBkPShoP2Z1bmN0
aW9uKGosaSl7ai5zdHlsZS5vcGFjaXR5PWk7fTooYT9mdW5jdGlvbihqLGkpe2lmKCFqLmN1cnJl
bnRTdHlsZXx8IWouY3VycmVudFN0eWxlLmhhc0xheW91dCl7ai5zdHlsZS56b29tPTE7fWk9KGkq
MTAwKS5saW1pdCgwLDEwMCkucm91bmQoKTsKKytpPShpPT0xMDApPyIiOiJhbHBoYShvcGFjaXR5
PSIraSsiKSI7dmFyIGs9ai5zdHlsZS5maWx0ZXJ8fGouZ2V0Q29tcHV0ZWRTdHlsZSgiZmlsdGVy
Iil8fCIiO2ouc3R5bGUuZmlsdGVyPWcudGVzdChrKT9rLnJlcGxhY2UoZyxpKTprK2k7fTpiKSk7
dmFyIGU9KGg/ZnVuY3Rpb24oail7dmFyIGk9ai5zdHlsZS5vcGFjaXR5fHxqLmdldENvbXB1dGVk
U3R5bGUoIm9wYWNpdHkiKTsKKytyZXR1cm4oaT09IiIpPzE6aS50b0Zsb2F0KCk7fTooYT9mdW5j
dGlvbihqKXt2YXIgaz0oai5zdHlsZS5maWx0ZXJ8fGouZ2V0Q29tcHV0ZWRTdHlsZSgiZmlsdGVy
IikpLGk7aWYoayl7aT1rLm1hdGNoKGcpO31yZXR1cm4oaT09bnVsbHx8az09bnVsbCk/MTooaVsx
XS8xMDApOworK306ZnVuY3Rpb24oail7dmFyIGk9ai5yZXRyaWV2ZSgiJG9wYWNpdHkiKTtpZihp
PT1udWxsKXtpPShqLnN0eWxlLnZpc2liaWxpdHk9PSJoaWRkZW4iPzA6MSk7fXJldHVybiBpO30p
KTt2YXIgYz0oZi5zdHlsZS5jc3NGbG9hdD09bnVsbCk/InN0eWxlRmxvYXQiOiJjc3NGbG9hdCI7
CisrRWxlbWVudC5pbXBsZW1lbnQoe2dldENvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oayl7aWYodGhp
cy5jdXJyZW50U3R5bGUpe3JldHVybiB0aGlzLmN1cnJlbnRTdHlsZVtrLmNhbWVsQ2FzZSgpXTt9
dmFyIGo9RWxlbWVudC5nZXREb2N1bWVudCh0aGlzKS5kZWZhdWx0VmlldyxpPWo/ai5nZXRDb21w
dXRlZFN0eWxlKHRoaXMsbnVsbCk6bnVsbDsKKytyZXR1cm4oaSk/aS5nZXRQcm9wZXJ0eVZhbHVl
KChrPT1jKT8iZmxvYXQiOmsuaHlwaGVuYXRlKCkpOm51bGw7fSxzZXRTdHlsZTpmdW5jdGlvbihq
LGkpe2lmKGo9PSJvcGFjaXR5Iil7ZCh0aGlzLHBhcnNlRmxvYXQoaSkpO3JldHVybiB0aGlzO31q
PShqPT0iZmxvYXQiP2M6aikuY2FtZWxDYXNlKCk7CisraWYodHlwZU9mKGkpIT0ic3RyaW5nIil7
dmFyIGs9KEVsZW1lbnQuU3R5bGVzW2pdfHwiQCIpLnNwbGl0KCIgIik7aT1BcnJheS5mcm9tKGkp
Lm1hcChmdW5jdGlvbihtLGwpe2lmKCFrW2xdKXtyZXR1cm4iIjt9cmV0dXJuKHR5cGVPZihtKT09
Im51bWJlciIpP2tbbF0ucmVwbGFjZSgiQCIsTWF0aC5yb3VuZChtKSk6bTsKKyt9KS5qb2luKCIg
Iik7fWVsc2V7aWYoaT09U3RyaW5nKE51bWJlcihpKSkpe2k9TWF0aC5yb3VuZChpKTt9fXRoaXMu
c3R5bGVbal09aTtyZXR1cm4gdGhpczt9LGdldFN0eWxlOmZ1bmN0aW9uKG8pe2lmKG89PSJvcGFj
aXR5Iil7cmV0dXJuIGUodGhpcyk7fW89KG89PSJmbG9hdCI/YzpvKS5jYW1lbENhc2UoKTsKKyt2
YXIgaT10aGlzLnN0eWxlW29dO2lmKCFpfHxvPT0iekluZGV4Iil7aT1bXTtmb3IodmFyIG4gaW4g
RWxlbWVudC5TaG9ydFN0eWxlcyl7aWYobyE9bil7Y29udGludWU7fWZvcih2YXIgbSBpbiBFbGVt
ZW50LlNob3J0U3R5bGVzW25dKXtpLnB1c2godGhpcy5nZXRTdHlsZShtKSk7CisrfXJldHVybiBp
LmpvaW4oIiAiKTt9aT10aGlzLmdldENvbXB1dGVkU3R5bGUobyk7fWlmKGkpe2k9U3RyaW5nKGkp
O3ZhciBrPWkubWF0Y2goL3JnYmE/XChbXGRccyxdK1wpLyk7aWYoayl7aT1pLnJlcGxhY2Uoa1sw
XSxrWzBdLnJnYlRvSGV4KCkpO319aWYoQnJvd3Nlci5vcGVyYXx8KEJyb3dzZXIuaWUmJmlzTmFO
KHBhcnNlRmxvYXQoaSkpKSl7aWYoKC9eKGhlaWdodHx3aWR0aCkkLykudGVzdChvKSl7dmFyIGo9
KG89PSJ3aWR0aCIpP1sibGVmdCIsInJpZ2h0Il06WyJ0b3AiLCJib3R0b20iXSxsPTA7Cisrai5l
YWNoKGZ1bmN0aW9uKHApe2wrPXRoaXMuZ2V0U3R5bGUoImJvcmRlci0iK3ArIi13aWR0aCIpLnRv
SW50KCkrdGhpcy5nZXRTdHlsZSgicGFkZGluZy0iK3ApLnRvSW50KCk7fSx0aGlzKTtyZXR1cm4g
dGhpc1sib2Zmc2V0IitvLmNhcGl0YWxpemUoKV0tbCsicHgiOworK31pZihCcm93c2VyLm9wZXJh
JiZTdHJpbmcoaSkuaW5kZXhPZigicHgiKSE9LTEpe3JldHVybiBpO31pZigoL15ib3JkZXIoLisp
V2lkdGh8bWFyZ2lufHBhZGRpbmcvKS50ZXN0KG8pKXtyZXR1cm4iMHB4Ijt9fXJldHVybiBpO30s
c2V0U3R5bGVzOmZ1bmN0aW9uKGope2Zvcih2YXIgaSBpbiBqKXt0aGlzLnNldFN0eWxlKGksaltp
XSk7CisrfXJldHVybiB0aGlzO30sZ2V0U3R5bGVzOmZ1bmN0aW9uKCl7dmFyIGk9e307QXJyYXku
ZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oail7aVtqXT10aGlzLmdldFN0eWxlKGop
O30sdGhpcyk7cmV0dXJuIGk7fX0pO0VsZW1lbnQuU3R5bGVzPXtsZWZ0OiJAcHgiLHRvcDoiQHB4
Iixib3R0b206IkBweCIscmlnaHQ6IkBweCIsd2lkdGg6IkBweCIsaGVpZ2h0OiJAcHgiLG1heFdp
ZHRoOiJAcHgiLG1heEhlaWdodDoiQHB4IixtaW5XaWR0aDoiQHB4IixtaW5IZWlnaHQ6IkBweCIs
YmFja2dyb3VuZENvbG9yOiJyZ2IoQCwgQCwgQCkiLGJhY2tncm91bmRQb3NpdGlvbjoiQHB4IEBw
eCIsY29sb3I6InJnYihALCBALCBAKSIsZm9udFNpemU6IkBweCIsbGV0dGVyU3BhY2luZzoiQHB4
IixsaW5lSGVpZ2h0OiJAcHgiLGNsaXA6InJlY3QoQHB4IEBweCBAcHggQHB4KSIsbWFyZ2luOiJA
cHggQHB4IEBweCBAcHgiLHBhZGRpbmc6IkBweCBAcHggQHB4IEBweCIsYm9yZGVyOiJAcHggQCBy
Z2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSIsYm9yZGVy
V2lkdGg6IkBweCBAcHggQHB4IEBweCIsYm9yZGVyU3R5bGU6IkAgQCBAIEAiLGJvcmRlckNvbG9y
OiJyZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCkiLHpJ
bmRleDoiQCIsem9vbToiQCIsZm9udFdlaWdodDoiQCIsdGV4dEluZGVudDoiQHB4IixvcGFjaXR5
OiJAIn07CisrRWxlbWVudC5pbXBsZW1lbnQoe3NldE9wYWNpdHk6ZnVuY3Rpb24oaSl7ZCh0aGlz
LGkpO3JldHVybiB0aGlzO30sZ2V0T3BhY2l0eTpmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpO319
KTtFbGVtZW50LlByb3BlcnRpZXMub3BhY2l0eT17c2V0OmZ1bmN0aW9uKGkpe2QodGhpcyxpKTsK
KytiKHRoaXMsaSk7fSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKTt9fTtFbGVtZW50LlN0
eWxlcz1uZXcgSGFzaChFbGVtZW50LlN0eWxlcyk7RWxlbWVudC5TaG9ydFN0eWxlcz17bWFyZ2lu
Ont9LHBhZGRpbmc6e30sYm9yZGVyOnt9LGJvcmRlcldpZHRoOnt9LGJvcmRlclN0eWxlOnt9LGJv
cmRlckNvbG9yOnt9fTsKKytbIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLmVhY2goZnVu
Y3Rpb24obyl7dmFyIG49RWxlbWVudC5TaG9ydFN0eWxlczt2YXIgaj1FbGVtZW50LlN0eWxlcztb
Im1hcmdpbiIsInBhZGRpbmciXS5lYWNoKGZ1bmN0aW9uKHApe3ZhciBxPXArbztuW3BdW3FdPWpb
cV09IkBweCI7CisrfSk7dmFyIG09ImJvcmRlciIrbztuLmJvcmRlclttXT1qW21dPSJAcHggQCBy
Z2IoQCwgQCwgQCkiO3ZhciBsPW0rIldpZHRoIixpPW0rIlN0eWxlIixrPW0rIkNvbG9yIjtuW21d
PXt9O24uYm9yZGVyV2lkdGhbbF09blttXVtsXT1qW2xdPSJAcHgiO24uYm9yZGVyU3R5bGVbaV09
blttXVtpXT1qW2ldPSJAIjsKKytuLmJvcmRlckNvbG9yW2tdPW5bbV1ba109altrXT0icmdiKEAs
IEAsIEApIjt9KTt9KSgpOyhmdW5jdGlvbigpe0VsZW1lbnQuUHJvcGVydGllcy5ldmVudHM9e3Nl
dDpmdW5jdGlvbihiKXt0aGlzLmFkZEV2ZW50cyhiKTt9fTtbRWxlbWVudCxXaW5kb3csRG9jdW1l
bnRdLmludm9rZSgiaW1wbGVtZW50Iix7YWRkRXZlbnQ6ZnVuY3Rpb24oZixoKXt2YXIgaT10aGlz
LnJldHJpZXZlKCJldmVudHMiLHt9KTsKKytpZighaVtmXSl7aVtmXT17a2V5czpbXSx2YWx1ZXM6
W119O31pZihpW2ZdLmtleXMuY29udGFpbnMoaCkpe3JldHVybiB0aGlzO31pW2ZdLmtleXMucHVz
aChoKTt2YXIgZz1mLGI9RWxlbWVudC5FdmVudHNbZl0sZD1oLGo9dGhpcztpZihiKXtpZihiLm9u
QWRkKXtiLm9uQWRkLmNhbGwodGhpcyxoLGYpOworK31pZihiLmNvbmRpdGlvbil7ZD1mdW5jdGlv
bihrKXtpZihiLmNvbmRpdGlvbi5jYWxsKHRoaXMsayxmKSl7cmV0dXJuIGguY2FsbCh0aGlzLGsp
O31yZXR1cm4gdHJ1ZTt9O31pZihiLmJhc2Upe2c9RnVuY3Rpb24uZnJvbShiLmJhc2UpLmNhbGwo
dGhpcyxmKTt9fXZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuIGguY2FsbChqKTsKKyt9O3ZhciBjPUVs
ZW1lbnQuTmF0aXZlRXZlbnRzW2ddO2lmKGMpe2lmKGM9PTIpe2U9ZnVuY3Rpb24oayl7az1uZXcg
RE9NRXZlbnQoayxqLmdldFdpbmRvdygpKTtpZihkLmNhbGwoaixrKT09PWZhbHNlKXtrLnN0b3Ao
KTt9fTt9dGhpcy5hZGRMaXN0ZW5lcihnLGUsYXJndW1lbnRzWzJdKTsKKyt9aVtmXS52YWx1ZXMu
cHVzaChlKTtyZXR1cm4gdGhpczt9LHJlbW92ZUV2ZW50OmZ1bmN0aW9uKGUsZCl7dmFyIGM9dGhp
cy5yZXRyaWV2ZSgiZXZlbnRzIik7aWYoIWN8fCFjW2VdKXtyZXR1cm4gdGhpczt9dmFyIGg9Y1tl
XTt2YXIgYj1oLmtleXMuaW5kZXhPZihkKTsKKytpZihiPT0tMSl7cmV0dXJuIHRoaXM7fXZhciBn
PWgudmFsdWVzW2JdO2RlbGV0ZSBoLmtleXNbYl07ZGVsZXRlIGgudmFsdWVzW2JdO3ZhciBmPUVs
ZW1lbnQuRXZlbnRzW2VdO2lmKGYpe2lmKGYub25SZW1vdmUpe2Yub25SZW1vdmUuY2FsbCh0aGlz
LGQsZSk7fWlmKGYuYmFzZSl7ZT1GdW5jdGlvbi5mcm9tKGYuYmFzZSkuY2FsbCh0aGlzLGUpOwor
K319cmV0dXJuKEVsZW1lbnQuTmF0aXZlRXZlbnRzW2VdKT90aGlzLnJlbW92ZUxpc3RlbmVyKGUs
Zyxhcmd1bWVudHNbMl0pOnRoaXM7fSxhZGRFdmVudHM6ZnVuY3Rpb24oYil7Zm9yKHZhciBjIGlu
IGIpe3RoaXMuYWRkRXZlbnQoYyxiW2NdKTt9cmV0dXJuIHRoaXM7CisrfSxyZW1vdmVFdmVudHM6
ZnVuY3Rpb24oYil7dmFyIGQ7aWYodHlwZU9mKGIpPT0ib2JqZWN0Iil7Zm9yKGQgaW4gYil7dGhp
cy5yZW1vdmVFdmVudChkLGJbZF0pO31yZXR1cm4gdGhpczt9dmFyIGM9dGhpcy5yZXRyaWV2ZSgi
ZXZlbnRzIik7aWYoIWMpe3JldHVybiB0aGlzOworK31pZighYil7Zm9yKGQgaW4gYyl7dGhpcy5y
ZW1vdmVFdmVudHMoZCk7fXRoaXMuZWxpbWluYXRlKCJldmVudHMiKTt9ZWxzZXtpZihjW2JdKXtj
W2JdLmtleXMuZWFjaChmdW5jdGlvbihlKXt0aGlzLnJlbW92ZUV2ZW50KGIsZSk7fSx0aGlzKTtk
ZWxldGUgY1tiXTsKKyt9fXJldHVybiB0aGlzO30sZmlyZUV2ZW50OmZ1bmN0aW9uKGUsYyxiKXt2
YXIgZD10aGlzLnJldHJpZXZlKCJldmVudHMiKTtpZighZHx8IWRbZV0pe3JldHVybiB0aGlzO31j
PUFycmF5LmZyb20oYyk7ZFtlXS5rZXlzLmVhY2goZnVuY3Rpb24oZil7aWYoYil7Zi5kZWxheShi
LHRoaXMsYyk7CisrfWVsc2V7Zi5hcHBseSh0aGlzLGMpO319LHRoaXMpO3JldHVybiB0aGlzO30s
Y2xvbmVFdmVudHM6ZnVuY3Rpb24oZSxkKXtlPWRvY3VtZW50LmlkKGUpO3ZhciBjPWUucmV0cmll
dmUoImV2ZW50cyIpO2lmKCFjKXtyZXR1cm4gdGhpczt9aWYoIWQpe2Zvcih2YXIgYiBpbiBjKXt0
aGlzLmNsb25lRXZlbnRzKGUsYik7CisrfX1lbHNle2lmKGNbZF0pe2NbZF0ua2V5cy5lYWNoKGZ1
bmN0aW9uKGYpe3RoaXMuYWRkRXZlbnQoZCxmKTt9LHRoaXMpO319cmV0dXJuIHRoaXM7fX0pO0Vs
ZW1lbnQuTmF0aXZlRXZlbnRzPXtjbGljazoyLGRibGNsaWNrOjIsbW91c2V1cDoyLG1vdXNlZG93
bjoyLGNvbnRleHRtZW51OjIsbW91c2V3aGVlbDoyLERPTU1vdXNlU2Nyb2xsOjIsbW91c2VvdmVy
OjIsbW91c2VvdXQ6Mixtb3VzZW1vdmU6MixzZWxlY3RzdGFydDoyLHNlbGVjdGVuZDoyLGtleWRv
d246MixrZXlwcmVzczoyLGtleXVwOjIsb3JpZW50YXRpb25jaGFuZ2U6Mix0b3VjaHN0YXJ0OjIs
dG91Y2htb3ZlOjIsdG91Y2hlbmQ6Mix0b3VjaGNhbmNlbDoyLGdlc3R1cmVzdGFydDoyLGdlc3R1
cmVjaGFuZ2U6MixnZXN0dXJlZW5kOjIsZm9jdXM6MixibHVyOjIsY2hhbmdlOjIscmVzZXQ6Mixz
ZWxlY3Q6MixzdWJtaXQ6MixwYXN0ZToyLGlucHV0OjIsbG9hZDoyLHVubG9hZDoxLGJlZm9yZXVu
bG9hZDoyLHJlc2l6ZToxLG1vdmU6MSxET01Db250ZW50TG9hZGVkOjEscmVhZHlzdGF0ZWNoYW5n
ZToxLGVycm9yOjEsYWJvcnQ6MSxzY3JvbGw6MX07CisrdmFyIGE9ZnVuY3Rpb24oYil7dmFyIGM9
Yi5yZWxhdGVkVGFyZ2V0O2lmKGM9PW51bGwpe3JldHVybiB0cnVlO31pZighYyl7cmV0dXJuIGZh
bHNlO31yZXR1cm4oYyE9dGhpcyYmYy5wcmVmaXghPSJ4dWwiJiZ0eXBlT2YodGhpcykhPSJkb2N1
bWVudCImJiF0aGlzLmNvbnRhaW5zKGMpKTsKKyt9O0VsZW1lbnQuRXZlbnRzPXttb3VzZWVudGVy
OntiYXNlOiJtb3VzZW92ZXIiLGNvbmRpdGlvbjphfSxtb3VzZWxlYXZlOntiYXNlOiJtb3VzZW91
dCIsY29uZGl0aW9uOmF9LG1vdXNld2hlZWw6e2Jhc2U6KEJyb3dzZXIuZmlyZWZveCk/IkRPTU1v
dXNlU2Nyb2xsIjoibW91c2V3aGVlbCJ9fTsKKytpZighd2luZG93LmFkZEV2ZW50TGlzdGVuZXIp
e0VsZW1lbnQuTmF0aXZlRXZlbnRzLnByb3BlcnR5Y2hhbmdlPTI7RWxlbWVudC5FdmVudHMuY2hh
bmdlPXtiYXNlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy50eXBlO3JldHVybih0aGlzLmdldCgidGFn
Iik9PSJpbnB1dCImJihiPT0icmFkaW8ifHxiPT0iY2hlY2tib3giKSk/InByb3BlcnR5Y2hhbmdl
IjoiY2hhbmdlIjsKKyt9LGNvbmRpdGlvbjpmdW5jdGlvbihiKXtyZXR1cm4gISEodGhpcy50eXBl
IT0icmFkaW8ifHx0aGlzLmNoZWNrZWQpO319O31FbGVtZW50LkV2ZW50cz1uZXcgSGFzaChFbGVt
ZW50LkV2ZW50cyk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYz0hIXdpbmRvdy5hZGRFdmVudExpc3Rl
bmVyOworK0VsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3VzaW49RWxlbWVudC5OYXRpdmVFdmVudHMu
Zm9jdXNvdXQ9Mjt2YXIgaz1mdW5jdGlvbihsLG0sbixvLHApe3doaWxlKHAmJnAhPWwpe2lmKG0o
cCxvKSl7cmV0dXJuIG4uY2FsbChwLG8scCk7fXA9ZG9jdW1lbnQuaWQocC5wYXJlbnROb2RlKTsK
Kyt9fTt2YXIgYT17bW91c2VlbnRlcjp7YmFzZToibW91c2VvdmVyIn0sbW91c2VsZWF2ZTp7YmFz
ZToibW91c2VvdXQifSxmb2N1czp7YmFzZToiZm9jdXMiKyhjPyIiOiJpbiIpLGNhcHR1cmU6dHJ1
ZX0sYmx1cjp7YmFzZTpjPyJibHVyIjoiZm9jdXNvdXQiLGNhcHR1cmU6dHJ1ZX19OworK3ZhciBi
PSIkZGVsZWdhdGlvbjoiO3ZhciBpPWZ1bmN0aW9uKGwpe3JldHVybntiYXNlOiJmb2N1c2luIixy
ZW1vdmU6ZnVuY3Rpb24obSxvKXt2YXIgcD1tLnJldHJpZXZlKGIrbCsibGlzdGVuZXJzIix7fSlb
b107aWYocCYmcC5mb3Jtcyl7Zm9yKHZhciBuPXAuZm9ybXMubGVuZ3RoOworK24tLTspe3AuZm9y
bXNbbl0ucmVtb3ZlRXZlbnQobCxwLmZuc1tuXSk7fX19LGxpc3RlbjpmdW5jdGlvbih4LHIsdixu
LHQscyl7dmFyIG89KHQuZ2V0KCJ0YWciKT09ImZvcm0iKT90Om4udGFyZ2V0LmdldFBhcmVudCgi
Zm9ybSIpO2lmKCFvKXtyZXR1cm47fXZhciB1PXgucmV0cmlldmUoYitsKyJsaXN0ZW5lcnMiLHt9
KSxwPXVbc118fHtmb3JtczpbXSxmbnM6W119LG09cC5mb3Jtcyx3PXAuZm5zOworK2lmKG0uaW5k
ZXhPZihvKSE9LTEpe3JldHVybjt9bS5wdXNoKG8pO3ZhciBxPWZ1bmN0aW9uKHkpe2soeCxyLHYs
eSx0KTt9O28uYWRkRXZlbnQobCxxKTt3LnB1c2gocSk7dVtzXT1wO3guc3RvcmUoYitsKyJsaXN0
ZW5lcnMiLHUpO319O307dmFyIGQ9ZnVuY3Rpb24obCl7cmV0dXJue2Jhc2U6ImZvY3VzaW4iLGxp
c3RlbjpmdW5jdGlvbihtLG4scCxxLHIpe3ZhciBvPXtibHVyOmZ1bmN0aW9uKCl7dGhpcy5yZW1v
dmVFdmVudHMobyk7CisrfX07b1tsXT1mdW5jdGlvbihzKXtrKG0sbixwLHMscik7fTtxLnRhcmdl
dC5hZGRFdmVudHMobyk7fX07fTtpZighYyl7T2JqZWN0LmFwcGVuZChhLHtzdWJtaXQ6aSgic3Vi
bWl0IikscmVzZXQ6aSgicmVzZXQiKSxjaGFuZ2U6ZCgiY2hhbmdlIiksc2VsZWN0OmQoInNlbGVj
dCIpfSk7CisrfXZhciBoPUVsZW1lbnQucHJvdG90eXBlLGY9aC5hZGRFdmVudCxqPWgucmVtb3Zl
RXZlbnQ7dmFyIGU9ZnVuY3Rpb24obCxtKXtyZXR1cm4gZnVuY3Rpb24ocixxLG4pe2lmKHIuaW5k
ZXhPZigiOnJlbGF5Iik9PS0xKXtyZXR1cm4gbC5jYWxsKHRoaXMscixxLG4pOworK312YXIgbz1T
bGljay5wYXJzZShyKS5leHByZXNzaW9uc1swXVswXTtpZihvLnBzZXVkb3NbMF0ua2V5IT0icmVs
YXkiKXtyZXR1cm4gbC5jYWxsKHRoaXMscixxLG4pO312YXIgcD1vLnRhZztvLnBzZXVkb3Muc2xp
Y2UoMSkuZWFjaChmdW5jdGlvbihzKXtwKz0iOiIrcy5rZXkrKHMudmFsdWU/IigiK3MudmFsdWUr
IikiOiIiKTsKKyt9KTtsLmNhbGwodGhpcyxyLHEpO3JldHVybiBtLmNhbGwodGhpcyxwLG8ucHNl
dWRvc1swXS52YWx1ZSxxKTt9O307dmFyIGc9e2FkZEV2ZW50OmZ1bmN0aW9uKHYscSx4KXt2YXIg
dD10aGlzLnJldHJpZXZlKCIkZGVsZWdhdGVzIix7fSkscj10W3ZdO2lmKHIpe2Zvcih2YXIgeSBp
biByKXtpZihyW3ldLmZuPT14JiZyW3ldLm1hdGNoPT1xKXtyZXR1cm4gdGhpczsKKyt9fX12YXIg
cD12LHU9cSxvPXgsbj1hW3ZdfHx7fTt2PW4uYmFzZXx8cDtxPWZ1bmN0aW9uKEIpe3JldHVybiBT
bGljay5tYXRjaChCLHUpO307dmFyIHc9RWxlbWVudC5FdmVudHNbcF07aWYodyYmdy5jb25kaXRp
b24pe3ZhciBsPXEsbT13LmNvbmRpdGlvbjtxPWZ1bmN0aW9uKEMsQil7cmV0dXJuIGwoQyxCKSYm
bS5jYWxsKEMsQix2KTsKKyt9O312YXIgej10aGlzLHM9U3RyaW5nLnVuaXF1ZUlEKCk7dmFyIEE9
bi5saXN0ZW4/ZnVuY3Rpb24oQixDKXtpZighQyYmQiYmQi50YXJnZXQpe0M9Qi50YXJnZXQ7fWlm
KEMpe24ubGlzdGVuKHoscSx4LEIsQyxzKTt9fTpmdW5jdGlvbihCLEMpe2lmKCFDJiZCJiZCLnRh
cmdldCl7Qz1CLnRhcmdldDsKKyt9aWYoQyl7ayh6LHEseCxCLEMpO319O2lmKCFyKXtyPXt9O31y
W3NdPXttYXRjaDp1LGZuOm8sZGVsZWdhdG9yOkF9O3RbcF09cjtyZXR1cm4gZi5jYWxsKHRoaXMs
dixBLG4uY2FwdHVyZSk7fSxyZW1vdmVFdmVudDpmdW5jdGlvbihyLG4sdCx1KXt2YXIgcT10aGlz
LnJldHJpZXZlKCIkZGVsZWdhdGVzIix7fSkscD1xW3JdOworK2lmKCFwKXtyZXR1cm4gdGhpczt9
aWYodSl7dmFyIG09cix3PXBbdV0uZGVsZWdhdG9yLGw9YVtyXXx8e307cj1sLmJhc2V8fG07aWYo
bC5yZW1vdmUpe2wucmVtb3ZlKHRoaXMsdSk7fWRlbGV0ZSBwW3VdO3FbbV09cDtyZXR1cm4gai5j
YWxsKHRoaXMscix3KTt9dmFyIG8sdjsKKytpZih0KXtmb3IobyBpbiBwKXt2PXBbb107aWYodi5t
YXRjaD09biYmdi5mbj09dCl7cmV0dXJuIGcucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLHIsbix0LG8p
O319fWVsc2V7Zm9yKG8gaW4gcCl7dj1wW29dO2lmKHYubWF0Y2g9PW4pe2cucmVtb3ZlRXZlbnQu
Y2FsbCh0aGlzLHIsbix2LmZuLG8pOworK319fXJldHVybiB0aGlzO319O1tFbGVtZW50LFdpbmRv
dyxEb2N1bWVudF0uaW52b2tlKCJpbXBsZW1lbnQiLHthZGRFdmVudDplKGYsZy5hZGRFdmVudCks
cmVtb3ZlRXZlbnQ6ZShqLGcucmVtb3ZlRXZlbnQpfSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaD1k
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworK2guc3R5bGUuaGVpZ2h0PSIwIjtoLmFwcGVuZENoaWxkKGUpO3ZhciBkPShlLm9mZnNl
dFBhcmVudD09PWgpO2g9ZT1udWxsO3ZhciBsPWZ1bmN0aW9uKG0pe3JldHVybiBrKG0sInBvc2l0
aW9uIikhPSJzdGF0aWMifHxhKG0pO307dmFyIGk9ZnVuY3Rpb24obSl7cmV0dXJuIGwobSl8fCgv
Xig/OnRhYmxlfHRkfHRoKSQvaSkudGVzdChtLnRhZ05hbWUpOworK307RWxlbWVudC5pbXBsZW1l
bnQoe3Njcm9sbFRvOmZ1bmN0aW9uKG0sbil7aWYoYSh0aGlzKSl7dGhpcy5nZXRXaW5kb3coKS5z
Y3JvbGxUbyhtLG4pO31lbHNle3RoaXMuc2Nyb2xsTGVmdD1tO3RoaXMuc2Nyb2xsVG9wPW47fXJl
dHVybiB0aGlzO30sZ2V0U2l6ZTpmdW5jdGlvbigpe2lmKGEodGhpcykpe3JldHVybiB0aGlzLmdl
dFdpbmRvdygpLmdldFNpemUoKTsKKyt9cmV0dXJue3g6dGhpcy5vZmZzZXRXaWR0aCx5OnRoaXMu
b2Zmc2V0SGVpZ2h0fTt9LGdldFNjcm9sbFNpemU6ZnVuY3Rpb24oKXtpZihhKHRoaXMpKXtyZXR1
cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7fXJldHVybnt4OnRoaXMuc2Nyb2xs
V2lkdGgseTp0aGlzLnNjcm9sbEhlaWdodH07CisrfSxnZXRTY3JvbGw6ZnVuY3Rpb24oKXtpZihh
KHRoaXMpKXtyZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGwoKTt9cmV0dXJue3g6dGhp
cy5zY3JvbGxMZWZ0LHk6dGhpcy5zY3JvbGxUb3B9O30sZ2V0U2Nyb2xsczpmdW5jdGlvbigpe3Zh
ciBuPXRoaXMucGFyZW50Tm9kZSxtPXt4OjAseTowfTsKKyt3aGlsZShuJiYhYShuKSl7bS54Kz1u
LnNjcm9sbExlZnQ7bS55Kz1uLnNjcm9sbFRvcDtuPW4ucGFyZW50Tm9kZTt9cmV0dXJuIG07fSxn
ZXRPZmZzZXRQYXJlbnQ6ZD9mdW5jdGlvbigpe3ZhciBtPXRoaXM7aWYoYShtKXx8ayhtLCJwb3Np
dGlvbiIpPT0iZml4ZWQiKXtyZXR1cm4gbnVsbDsKKyt9dmFyIG49KGsobSwicG9zaXRpb24iKT09
InN0YXRpYyIpP2k6bDt3aGlsZSgobT1tLnBhcmVudE5vZGUpKXtpZihuKG0pKXtyZXR1cm4gbTt9
fXJldHVybiBudWxsO306ZnVuY3Rpb24oKXt2YXIgbT10aGlzO2lmKGEobSl8fGsobSwicG9zaXRp
b24iKT09ImZpeGVkIil7cmV0dXJuIG51bGw7CisrfXRyeXtyZXR1cm4gbS5vZmZzZXRQYXJlbnQ7
fWNhdGNoKG4pe31yZXR1cm4gbnVsbDt9LGdldE9mZnNldHM6ZnVuY3Rpb24oKXtpZih0aGlzLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCYmIUJyb3dzZXIuUGxhdGZvcm0uaW9zKXt2YXIgcj10aGlzLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ZG9jdW1lbnQuaWQodGhpcy5nZXREb2N1bWVudCgpLmRv
Y3VtZW50RWxlbWVudCkscT1vLmdldFNjcm9sbCgpLHQ9dGhpcy5nZXRTY3JvbGxzKCkscz0oayh0
aGlzLCJwb3NpdGlvbiIpPT0iZml4ZWQiKTsKKytyZXR1cm57eDpyLmxlZnQudG9JbnQoKSt0Lngr
KChzKT8wOnEueCktby5jbGllbnRMZWZ0LHk6ci50b3AudG9JbnQoKSt0LnkrKChzKT8wOnEueSkt
by5jbGllbnRUb3B9O312YXIgbj10aGlzLG09e3g6MCx5OjB9O2lmKGEodGhpcykpe3JldHVybiBt
O313aGlsZShuJiYhYShuKSl7bS54Kz1uLm9mZnNldExlZnQ7CisrbS55Kz1uLm9mZnNldFRvcDtp
ZihCcm93c2VyLmZpcmVmb3gpe2lmKCFjKG4pKXttLngrPWIobik7bS55Kz1nKG4pO312YXIgcD1u
LnBhcmVudE5vZGU7aWYocCYmayhwLCJvdmVyZmxvdyIpIT0idmlzaWJsZSIpe20ueCs9YihwKTtt
LnkrPWcocCk7fX1lbHNle2lmKG4hPXRoaXMmJkJyb3dzZXIuc2FmYXJpKXttLngrPWIobik7Cisr
bS55Kz1nKG4pO319bj1uLm9mZnNldFBhcmVudDt9aWYoQnJvd3Nlci5maXJlZm94JiYhYyh0aGlz
KSl7bS54LT1iKHRoaXMpO20ueS09Zyh0aGlzKTt9cmV0dXJuIG07fSxnZXRQb3NpdGlvbjpmdW5j
dGlvbihwKXt2YXIgcT10aGlzLmdldE9mZnNldHMoKSxuPXRoaXMuZ2V0U2Nyb2xscygpOworK3Zh
ciBtPXt4OnEueC1uLngseTpxLnktbi55fTtpZihwJiYocD1kb2N1bWVudC5pZChwKSkpe3ZhciBv
PXAuZ2V0UG9zaXRpb24oKTtyZXR1cm57eDptLngtby54LWIocCkseTptLnktby55LWcocCl9O31y
ZXR1cm4gbTt9LGdldENvb3JkaW5hdGVzOmZ1bmN0aW9uKG8pe2lmKGEodGhpcykpe3JldHVybiB0
aGlzLmdldFdpbmRvdygpLmdldENvb3JkaW5hdGVzKCk7CisrfXZhciBtPXRoaXMuZ2V0UG9zaXRp
b24obyksbj10aGlzLmdldFNpemUoKTt2YXIgcD17bGVmdDptLngsdG9wOm0ueSx3aWR0aDpuLngs
aGVpZ2h0Om4ueX07cC5yaWdodD1wLmxlZnQrcC53aWR0aDtwLmJvdHRvbT1wLnRvcCtwLmhlaWdo
dDtyZXR1cm4gcDt9LGNvbXB1dGVQb3NpdGlvbjpmdW5jdGlvbihtKXtyZXR1cm57bGVmdDptLngt
aih0aGlzLCJtYXJnaW4tbGVmdCIpLHRvcDptLnktaih0aGlzLCJtYXJnaW4tdG9wIil9OworK30s
c2V0UG9zaXRpb246ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuc2V0U3R5bGVzKHRoaXMuY29tcHV0
ZVBvc2l0aW9uKG0pKTt9fSk7W0RvY3VtZW50LFdpbmRvd10uaW52b2tlKCJpbXBsZW1lbnQiLHtn
ZXRTaXplOmZ1bmN0aW9uKCl7dmFyIG09Zih0aGlzKTtyZXR1cm57eDptLmNsaWVudFdpZHRoLHk6
bS5jbGllbnRIZWlnaHR9OworK30sZ2V0U2Nyb2xsOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5nZXRX
aW5kb3coKSxtPWYodGhpcyk7cmV0dXJue3g6bi5wYWdlWE9mZnNldHx8bS5zY3JvbGxMZWZ0LHk6
bi5wYWdlWU9mZnNldHx8bS5zY3JvbGxUb3B9O30sZ2V0U2Nyb2xsU2l6ZTpmdW5jdGlvbigpe3Zh
ciBvPWYodGhpcyksbj10aGlzLmdldFNpemUoKSxtPXRoaXMuZ2V0RG9jdW1lbnQoKS5ib2R5Owor
K3JldHVybnt4Ok1hdGgubWF4KG8uc2Nyb2xsV2lkdGgsbS5zY3JvbGxXaWR0aCxuLngpLHk6TWF0
aC5tYXgoby5zY3JvbGxIZWlnaHQsbS5zY3JvbGxIZWlnaHQsbi55KX07fSxnZXRQb3NpdGlvbjpm
dW5jdGlvbigpe3JldHVybnt4OjAseTowfTt9LGdldENvb3JkaW5hdGVzOmZ1bmN0aW9uKCl7dmFy
IG09dGhpcy5nZXRTaXplKCk7CisrcmV0dXJue3RvcDowLGxlZnQ6MCxib3R0b206bS55LHJpZ2h0
Om0ueCxoZWlnaHQ6bS55LHdpZHRoOm0ueH07fX0pO3ZhciBrPUVsZW1lbnQuZ2V0Q29tcHV0ZWRT
dHlsZTtmdW5jdGlvbiBqKG0sbil7cmV0dXJuIGsobSxuKS50b0ludCgpfHwwO31mdW5jdGlvbiBj
KG0pe3JldHVybiBrKG0sIi1tb3otYm94LXNpemluZyIpPT0iYm9yZGVyLWJveCI7CisrfWZ1bmN0
aW9uIGcobSl7cmV0dXJuIGoobSwiYm9yZGVyLXRvcC13aWR0aCIpO31mdW5jdGlvbiBiKG0pe3Jl
dHVybiBqKG0sImJvcmRlci1sZWZ0LXdpZHRoIik7fWZ1bmN0aW9uIGEobSl7cmV0dXJuKC9eKD86
Ym9keXxodG1sKSQvaSkudGVzdChtLnRhZ05hbWUpOworK31mdW5jdGlvbiBmKG0pe3ZhciBuPW0u
Z2V0RG9jdW1lbnQoKTtyZXR1cm4oIW4uY29tcGF0TW9kZXx8bi5jb21wYXRNb2RlPT0iQ1NTMUNv
bXBhdCIpP24uaHRtbDpuLmJvZHk7fX0pKCk7RWxlbWVudC5hbGlhcyh7cG9zaXRpb246InNldFBv
c2l0aW9uIn0pO1tXaW5kb3csRG9jdW1lbnQsRWxlbWVudF0uaW52b2tlKCJpbXBsZW1lbnQiLHtn
ZXRIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTaXplKCkueTsKKyt9LGdldFdpZHRo
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7fSxnZXRTY3JvbGxUb3A6ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS55O30sZ2V0U2Nyb2xsTGVmdDpmdW5jdGlvbigp
e3JldHVybiB0aGlzLmdldFNjcm9sbCgpLng7CisrfSxnZXRTY3JvbGxIZWlnaHQ6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueTt9LGdldFNjcm9sbFdpZHRoOmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLng7fSxnZXRUb3A6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7CisrfSxnZXRMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuZ2V0UG9zaXRpb24oKS54O319KTsoZnVuY3Rpb24oKXt2YXIgZj10aGlzLkZ4PW5ldyBDbGFz
cyh7SW1wbGVtZW50czpbQ2hhaW4sRXZlbnRzLE9wdGlvbnNdLG9wdGlvbnM6e2Zwczo2MCx1bml0
OmZhbHNlLGR1cmF0aW9uOjUwMCxmcmFtZXM6bnVsbCxmcmFtZVNraXA6dHJ1ZSxsaW5rOiJpZ25v
cmUifSxpbml0aWFsaXplOmZ1bmN0aW9uKGcpe3RoaXMuc3ViamVjdD10aGlzLnN1YmplY3R8fHRo
aXM7CisrdGhpcy5zZXRPcHRpb25zKGcpO30sZ2V0VHJhbnNpdGlvbjpmdW5jdGlvbigpe3JldHVy
biBmdW5jdGlvbihnKXtyZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJKmcpLTEpLzI7fTt9LHN0ZXA6
ZnVuY3Rpb24oZyl7aWYodGhpcy5vcHRpb25zLmZyYW1lU2tpcCl7dmFyIGg9KHRoaXMudGltZSE9
bnVsbCk/KGctdGhpcy50aW1lKTowLGk9aC90aGlzLmZyYW1lSW50ZXJ2YWw7CisrdGhpcy50aW1l
PWc7dGhpcy5mcmFtZSs9aTt9ZWxzZXt0aGlzLmZyYW1lKys7fWlmKHRoaXMuZnJhbWU8dGhpcy5m
cmFtZXMpe3ZhciBqPXRoaXMudHJhbnNpdGlvbih0aGlzLmZyYW1lL3RoaXMuZnJhbWVzKTt0aGlz
LnNldCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLHRoaXMudG8saikpOworK31lbHNle3RoaXMuZnJh
bWU9dGhpcy5mcmFtZXM7dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSx0aGlzLnRvLDEp
KTt0aGlzLnN0b3AoKTt9fSxzZXQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGc7fSxjb21wdXRlOmZ1bmN0
aW9uKGksaCxnKXtyZXR1cm4gZi5jb21wdXRlKGksaCxnKTsKKyt9LGNoZWNrOmZ1bmN0aW9uKCl7
aWYoIXRoaXMuaXNSdW5uaW5nKCkpe3JldHVybiB0cnVlO31zd2l0Y2godGhpcy5vcHRpb25zLmxp
bmspe2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbCgpO3JldHVybiB0cnVlO2Nhc2UiY2hhaW4iOnRo
aXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVudHMsdGhpcykpOworK3JldHVybiBmYWxz
ZTt9cmV0dXJuIGZhbHNlO30sc3RhcnQ6ZnVuY3Rpb24oayxqKXtpZighdGhpcy5jaGVjayhrLGop
KXtyZXR1cm4gdGhpczt9dGhpcy5mcm9tPWs7dGhpcy50bz1qO3RoaXMuZnJhbWU9KHRoaXMub3B0
aW9ucy5mcmFtZVNraXApPzA6LTE7dGhpcy50aW1lPW51bGw7CisrdGhpcy50cmFuc2l0aW9uPXRo
aXMuZ2V0VHJhbnNpdGlvbigpO3ZhciBpPXRoaXMub3B0aW9ucy5mcmFtZXMsaD10aGlzLm9wdGlv
bnMuZnBzLGc9dGhpcy5vcHRpb25zLmR1cmF0aW9uO3RoaXMuZHVyYXRpb249Zi5EdXJhdGlvbnNb
Z118fGcudG9JbnQoKTt0aGlzLmZyYW1lSW50ZXJ2YWw9MTAwMC9oOworK3RoaXMuZnJhbWVzPWl8
fE1hdGgucm91bmQodGhpcy5kdXJhdGlvbi90aGlzLmZyYW1lSW50ZXJ2YWwpO3RoaXMuZmlyZUV2
ZW50KCJzdGFydCIsdGhpcy5zdWJqZWN0KTtiLmNhbGwodGhpcyxoKTtyZXR1cm4gdGhpczt9LHN0
b3A6ZnVuY3Rpb24oKXtpZih0aGlzLmlzUnVubmluZygpKXt0aGlzLnRpbWU9bnVsbDsKKytkLmNh
bGwodGhpcyx0aGlzLm9wdGlvbnMuZnBzKTtpZih0aGlzLmZyYW1lcz09dGhpcy5mcmFtZSl7dGhp
cy5maXJlRXZlbnQoImNvbXBsZXRlIix0aGlzLnN1YmplY3QpO2lmKCF0aGlzLmNhbGxDaGFpbigp
KXt0aGlzLmZpcmVFdmVudCgiY2hhaW5Db21wbGV0ZSIsdGhpcy5zdWJqZWN0KTsKKyt9fWVsc2V7
dGhpcy5maXJlRXZlbnQoInN0b3AiLHRoaXMuc3ViamVjdCk7fX1yZXR1cm4gdGhpczt9LGNhbmNl
bDpmdW5jdGlvbigpe2lmKHRoaXMuaXNSdW5uaW5nKCkpe3RoaXMudGltZT1udWxsO2QuY2FsbCh0
aGlzLHRoaXMub3B0aW9ucy5mcHMpO3RoaXMuZnJhbWU9dGhpcy5mcmFtZXM7CisrdGhpcy5maXJl
RXZlbnQoImNhbmNlbCIsdGhpcy5zdWJqZWN0KS5jbGVhckNoYWluKCk7fXJldHVybiB0aGlzO30s
cGF1c2U6ZnVuY3Rpb24oKXtpZih0aGlzLmlzUnVubmluZygpKXt0aGlzLnRpbWU9bnVsbDtkLmNh
bGwodGhpcyx0aGlzLm9wdGlvbnMuZnBzKTt9cmV0dXJuIHRoaXM7CisrfSxyZXN1bWU6ZnVuY3Rp
b24oKXtpZigodGhpcy5mcmFtZTx0aGlzLmZyYW1lcykmJiF0aGlzLmlzUnVubmluZygpKXtiLmNh
bGwodGhpcyx0aGlzLm9wdGlvbnMuZnBzKTt9cmV0dXJuIHRoaXM7fSxpc1J1bm5pbmc6ZnVuY3Rp
b24oKXt2YXIgZz1lW3RoaXMub3B0aW9ucy5mcHNdOworK3JldHVybiBnJiZnLmNvbnRhaW5zKHRo
aXMpO319KTtmLmNvbXB1dGU9ZnVuY3Rpb24oaSxoLGcpe3JldHVybihoLWkpKmcraTt9O2YuRHVy
YXRpb25zPXsic2hvcnQiOjI1MCxub3JtYWw6NTAwLCJsb25nIjoxMDAwfTt2YXIgZT17fSxjPXt9
O3ZhciBhPWZ1bmN0aW9uKCl7dmFyIGg9RGF0ZS5ub3coKTsKKytmb3IodmFyIGo9dGhpcy5sZW5n
dGg7ai0tOyl7dmFyIGc9dGhpc1tqXTtpZihnKXtnLnN0ZXAoaCk7fX19O3ZhciBiPWZ1bmN0aW9u
KGgpe3ZhciBnPWVbaF18fChlW2hdPVtdKTtnLnB1c2godGhpcyk7aWYoIWNbaF0pe2NbaF09YS5w
ZXJpb2RpY2FsKE1hdGgucm91bmQoMTAwMC9oKSxnKTsKKyt9fTt2YXIgZD1mdW5jdGlvbihoKXt2
YXIgZz1lW2hdO2lmKGcpe2cuZXJhc2UodGhpcyk7aWYoIWcubGVuZ3RoJiZjW2hdKXtkZWxldGUg
ZVtoXTtjW2hdPWNsZWFySW50ZXJ2YWwoY1toXSk7fX19O30pKCk7RnguQ1NTPW5ldyBDbGFzcyh7
RXh0ZW5kczpGeCxwcmVwYXJlOmZ1bmN0aW9uKGMsZCxiKXtiPUFycmF5LmZyb20oYik7CisraWYo
YlsxXT09bnVsbCl7YlsxXT1iWzBdO2JbMF09Yy5nZXRTdHlsZShkKTt9dmFyIGE9Yi5tYXAodGhp
cy5wYXJzZSk7cmV0dXJue2Zyb206YVswXSx0bzphWzFdfTt9LHBhcnNlOmZ1bmN0aW9uKGEpe2E9
RnVuY3Rpb24uZnJvbShhKSgpO2E9KHR5cGVvZiBhPT0ic3RyaW5nIik/YS5zcGxpdCgiICIpOkFy
cmF5LmZyb20oYSk7CisrcmV0dXJuIGEubWFwKGZ1bmN0aW9uKGMpe2M9U3RyaW5nKGMpO3ZhciBi
PWZhbHNlO09iamVjdC5lYWNoKEZ4LkNTUy5QYXJzZXJzLGZ1bmN0aW9uKGYsZSl7aWYoYil7cmV0
dXJuO312YXIgZD1mLnBhcnNlKGMpO2lmKGR8fGQ9PT0wKXtiPXt2YWx1ZTpkLHBhcnNlcjpmfTsK
Kyt9fSk7Yj1ifHx7dmFsdWU6YyxwYXJzZXI6RnguQ1NTLlBhcnNlcnMuU3RyaW5nfTtyZXR1cm4g
Yjt9KTt9LGNvbXB1dGU6ZnVuY3Rpb24oZCxjLGIpe3ZhciBhPVtdOyhNYXRoLm1pbihkLmxlbmd0
aCxjLmxlbmd0aCkpLnRpbWVzKGZ1bmN0aW9uKGUpe2EucHVzaCh7dmFsdWU6ZFtlXS5wYXJzZXIu
Y29tcHV0ZShkW2VdLnZhbHVlLGNbZV0udmFsdWUsYikscGFyc2VyOmRbZV0ucGFyc2VyfSk7Cisr
fSk7YS4kZmFtaWx5PUZ1bmN0aW9uLmZyb20oImZ4OmNzczp2YWx1ZSIpO3JldHVybiBhO30sc2Vy
dmU6ZnVuY3Rpb24oYyxiKXtpZih0eXBlT2YoYykhPSJmeDpjc3M6dmFsdWUiKXtjPXRoaXMucGFy
c2UoYyk7fXZhciBhPVtdO2MuZWFjaChmdW5jdGlvbihkKXthPWEuY29uY2F0KGQucGFyc2VyLnNl
cnZlKGQudmFsdWUsYikpOworK30pO3JldHVybiBhO30scmVuZGVyOmZ1bmN0aW9uKGEsZCxjLGIp
e2Euc2V0U3R5bGUoZCx0aGlzLnNlcnZlKGMsYikpO30sc2VhcmNoOmZ1bmN0aW9uKGEpe2lmKEZ4
LkNTUy5DYWNoZVthXSl7cmV0dXJuIEZ4LkNTUy5DYWNoZVthXTt9dmFyIGM9e30sYj1uZXcgUmVn
RXhwKCJeIithLmVzY2FwZVJlZ0V4cCgpKyIkIik7CisrQXJyYXkuZWFjaChkb2N1bWVudC5zdHls
ZVNoZWV0cyxmdW5jdGlvbihmLGUpe3ZhciBkPWYuaHJlZjtpZihkJiZkLmNvbnRhaW5zKCI6Ly8i
KSYmIWQuY29udGFpbnMoZG9jdW1lbnQuZG9tYWluKSl7cmV0dXJuO312YXIgZz1mLnJ1bGVzfHxm
LmNzc1J1bGVzO0FycmF5LmVhY2goZyxmdW5jdGlvbihrLGgpe2lmKCFrLnN0eWxlKXtyZXR1cm47
CisrfXZhciBqPShrLnNlbGVjdG9yVGV4dCk/ay5zZWxlY3RvclRleHQucmVwbGFjZSgvXlx3Ky8s
ZnVuY3Rpb24oaSl7cmV0dXJuIGkudG9Mb3dlckNhc2UoKTt9KTpudWxsO2lmKCFqfHwhYi50ZXN0
KGopKXtyZXR1cm47fU9iamVjdC5lYWNoKEVsZW1lbnQuU3R5bGVzLGZ1bmN0aW9uKGwsaSl7aWYo
IWsuc3R5bGVbaV18fEVsZW1lbnQuU2hvcnRTdHlsZXNbaV0pe3JldHVybjsKKyt9bD1TdHJpbmco
ay5zdHlsZVtpXSk7Y1tpXT0oKC9ecmdiLykudGVzdChsKSk/bC5yZ2JUb0hleCgpOmw7fSk7fSk7
fSk7cmV0dXJuIEZ4LkNTUy5DYWNoZVthXT1jO319KTtGeC5DU1MuQ2FjaGU9e307RnguQ1NTLlBh
cnNlcnM9e0NvbG9yOntwYXJzZTpmdW5jdGlvbihhKXtpZihhLm1hdGNoKC9eI1swLTlhLWZdezMs
Nn0kL2kpKXtyZXR1cm4gYS5oZXhUb1JnYih0cnVlKTsKKyt9cmV0dXJuKChhPWEubWF0Y2goLyhc
ZCspLFxzKihcZCspLFxzKihcZCspLykpKT9bYVsxXSxhWzJdLGFbM11dOmZhbHNlO30sY29tcHV0
ZTpmdW5jdGlvbihjLGIsYSl7cmV0dXJuIGMubWFwKGZ1bmN0aW9uKGUsZCl7cmV0dXJuIE1hdGgu
cm91bmQoRnguY29tcHV0ZShjW2RdLGJbZF0sYSkpOworK30pO30sc2VydmU6ZnVuY3Rpb24oYSl7
cmV0dXJuIGEubWFwKE51bWJlcik7fX0sTnVtYmVyOntwYXJzZTpwYXJzZUZsb2F0LGNvbXB1dGU6
RnguY29tcHV0ZSxzZXJ2ZTpmdW5jdGlvbihiLGEpe3JldHVybihhKT9iK2E6Yjt9fSxTdHJpbmc6
e3BhcnNlOkZ1bmN0aW9uLmZyb20oZmFsc2UpLGNvbXB1dGU6ZnVuY3Rpb24oYixhKXtyZXR1cm4g
YTsKKyt9LHNlcnZlOmZ1bmN0aW9uKGEpe3JldHVybiBhO319fTtGeC5DU1MuUGFyc2Vycz1uZXcg
SGFzaChGeC5DU1MuUGFyc2Vycyk7RnguVHdlZW49bmV3IENsYXNzKHtFeHRlbmRzOkZ4LkNTUyxp
bml0aWFsaXplOmZ1bmN0aW9uKGIsYSl7dGhpcy5lbGVtZW50PXRoaXMuc3ViamVjdD1kb2N1bWVu
dC5pZChiKTsKKyt0aGlzLnBhcmVudChhKTt9LHNldDpmdW5jdGlvbihiLGEpe2lmKGFyZ3VtZW50
cy5sZW5ndGg9PTEpe2E9YjtiPXRoaXMucHJvcGVydHl8fHRoaXMub3B0aW9ucy5wcm9wZXJ0eTt9
dGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LGIsYSx0aGlzLm9wdGlvbnMudW5pdCk7CisrcmV0dXJu
IHRoaXM7fSxzdGFydDpmdW5jdGlvbihjLGUsZCl7aWYoIXRoaXMuY2hlY2soYyxlLGQpKXtyZXR1
cm4gdGhpczt9dmFyIGI9QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpO3RoaXMucHJvcGVydHk9dGhp
cy5vcHRpb25zLnByb3BlcnR5fHxiLnNoaWZ0KCk7dmFyIGE9dGhpcy5wcmVwYXJlKHRoaXMuZWxl
bWVudCx0aGlzLnByb3BlcnR5LGIpOworK3JldHVybiB0aGlzLnBhcmVudChhLmZyb20sYS50byk7
fX0pO0VsZW1lbnQuUHJvcGVydGllcy50d2Vlbj17c2V0OmZ1bmN0aW9uKGEpe3RoaXMuZ2V0KCJ0
d2VlbiIpLmNhbmNlbCgpLnNldE9wdGlvbnMoYSk7cmV0dXJuIHRoaXM7fSxnZXQ6ZnVuY3Rpb24o
KXt2YXIgYT10aGlzLnJldHJpZXZlKCJ0d2VlbiIpOworK2lmKCFhKXthPW5ldyBGeC5Ud2Vlbih0
aGlzLHtsaW5rOiJjYW5jZWwifSk7dGhpcy5zdG9yZSgidHdlZW4iLGEpO31yZXR1cm4gYTt9fTtF
bGVtZW50LmltcGxlbWVudCh7dHdlZW46ZnVuY3Rpb24oYSxjLGIpe3RoaXMuZ2V0KCJ0d2VlbiIp
LnN0YXJ0KGEsYyxiKTsKKytyZXR1cm4gdGhpczt9LGZhZGU6ZnVuY3Rpb24oYyl7dmFyIGQ9dGhp
cy5nZXQoInR3ZWVuIiksZixlLGE7aWYoYz09bnVsbCl7Yz0idG9nZ2xlIjt9c3dpdGNoKGMpe2Nh
c2UiaW4iOmY9InN0YXJ0IjtlPTE7YnJlYWs7Y2FzZSJvdXQiOmY9InN0YXJ0IjtlPTA7YnJlYWs7
CisrY2FzZSJzaG93IjpmPSJzZXQiO2U9MTticmVhaztjYXNlImhpZGUiOmY9InNldCI7ZT0wO2Jy
ZWFrO2Nhc2UidG9nZ2xlIjp2YXIgYj10aGlzLnJldHJpZXZlKCJmYWRlOmZsYWciLHRoaXMuZ2V0
U3R5bGUoIm9wYWNpdHkiKT09MSk7Zj0ic3RhcnQiO2U9Yj8wOjE7dGhpcy5zdG9yZSgiZmFkZTpm
bGFnIiwhYik7CisrYT10cnVlO2JyZWFrO2RlZmF1bHQ6Zj0ic3RhcnQiO2U9Yzt9aWYoIWEpe3Ro
aXMuZWxpbWluYXRlKCJmYWRlOmZsYWciKTt9ZFtmXSgib3BhY2l0eSIsZSk7aWYoZj09InNldCJ8
fGUhPTApe3RoaXMuc2V0U3R5bGUoInZpc2liaWxpdHkiLGU9PTA/ImhpZGRlbiI6InZpc2libGUi
KTsKKyt9ZWxzZXtkLmNoYWluKGZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnNldFN0eWxlKCJ2aXNp
YmlsaXR5IiwiaGlkZGVuIik7fSk7fXJldHVybiB0aGlzO30saGlnaGxpZ2h0OmZ1bmN0aW9uKGMs
YSl7aWYoIWEpe2E9dGhpcy5yZXRyaWV2ZSgiaGlnaGxpZ2h0Om9yaWdpbmFsIix0aGlzLmdldFN0
eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIikpOworK2E9KGE9PSJ0cmFuc3BhcmVudCIpPyIjZmZmIjph
O312YXIgYj10aGlzLmdldCgidHdlZW4iKTtiLnN0YXJ0KCJiYWNrZ3JvdW5kLWNvbG9yIixjfHwi
I2ZmZmY4OCIsYSkuY2hhaW4oZnVuY3Rpb24oKXt0aGlzLnNldFN0eWxlKCJiYWNrZ3JvdW5kLWNv
bG9yIix0aGlzLnJldHJpZXZlKCJoaWdobGlnaHQ6b3JpZ2luYWwiKSk7CisrYi5jYWxsQ2hhaW4o
KTt9LmJpbmQodGhpcykpO3JldHVybiB0aGlzO319KTtGeC5Nb3JwaD1uZXcgQ2xhc3Moe0V4dGVu
ZHM6RnguQ1NTLGluaXRpYWxpemU6ZnVuY3Rpb24oYixhKXt0aGlzLmVsZW1lbnQ9dGhpcy5zdWJq
ZWN0PWRvY3VtZW50LmlkKGIpO3RoaXMucGFyZW50KGEpOworK30sc2V0OmZ1bmN0aW9uKGEpe2lm
KHR5cGVvZiBhPT0ic3RyaW5nIil7YT10aGlzLnNlYXJjaChhKTt9Zm9yKHZhciBiIGluIGEpe3Ro
aXMucmVuZGVyKHRoaXMuZWxlbWVudCxiLGFbYl0sdGhpcy5vcHRpb25zLnVuaXQpO31yZXR1cm4g
dGhpczt9LGNvbXB1dGU6ZnVuY3Rpb24oZSxkLGMpe3ZhciBhPXt9OworK2Zvcih2YXIgYiBpbiBl
KXthW2JdPXRoaXMucGFyZW50KGVbYl0sZFtiXSxjKTt9cmV0dXJuIGE7fSxzdGFydDpmdW5jdGlv
bihiKXtpZighdGhpcy5jaGVjayhiKSl7cmV0dXJuIHRoaXM7fWlmKHR5cGVvZiBiPT0ic3RyaW5n
Iil7Yj10aGlzLnNlYXJjaChiKTt9dmFyIGU9e30sZD17fTsKKytmb3IodmFyIGMgaW4gYil7dmFy
IGE9dGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCxjLGJbY10pO2VbY109YS5mcm9tO2RbY109YS50
bzt9cmV0dXJuIHRoaXMucGFyZW50KGUsZCk7fX0pO0VsZW1lbnQuUHJvcGVydGllcy5tb3JwaD17
c2V0OmZ1bmN0aW9uKGEpe3RoaXMuZ2V0KCJtb3JwaCIpLmNhbmNlbCgpLnNldE9wdGlvbnMoYSk7
CisrcmV0dXJuIHRoaXM7fSxnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJldHJpZXZlKCJtb3Jw
aCIpO2lmKCFhKXthPW5ldyBGeC5Nb3JwaCh0aGlzLHtsaW5rOiJjYW5jZWwifSk7dGhpcy5zdG9y
ZSgibW9ycGgiLGEpO31yZXR1cm4gYTt9fTtFbGVtZW50LmltcGxlbWVudCh7bW9ycGg6ZnVuY3Rp
b24oYSl7dGhpcy5nZXQoIm1vcnBoIikuc3RhcnQoYSk7CisrcmV0dXJuIHRoaXM7fX0pO0Z4Lmlt
cGxlbWVudCh7Z2V0VHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucy50cmFu
c2l0aW9ufHxGeC5UcmFuc2l0aW9ucy5TaW5lLmVhc2VJbk91dDtpZih0eXBlb2YgYT09InN0cmlu
ZyIpe3ZhciBiPWEuc3BsaXQoIjoiKTsKKythPUZ4LlRyYW5zaXRpb25zO2E9YVtiWzBdXXx8YVti
WzBdLmNhcGl0YWxpemUoKV07aWYoYlsxXSl7YT1hWyJlYXNlIitiWzFdLmNhcGl0YWxpemUoKSso
YlsyXT9iWzJdLmNhcGl0YWxpemUoKToiIildO319cmV0dXJuIGE7fX0pO0Z4LlRyYW5zaXRpb249
ZnVuY3Rpb24oYyxiKXtiPUFycmF5LmZyb20oYik7CisrdmFyIGE9ZnVuY3Rpb24oZCl7cmV0dXJu
IGMoZCxiKTt9O3JldHVybiBPYmplY3QuYXBwZW5kKGEse2Vhc2VJbjphLGVhc2VPdXQ6ZnVuY3Rp
b24oZCl7cmV0dXJuIDEtYygxLWQsYik7fSxlYXNlSW5PdXQ6ZnVuY3Rpb24oZCl7cmV0dXJuKGQ8
PTAuNT9jKDIqZCxiKTooMi1jKDIqKDEtZCksYikpKS8yOworK319KTt9O0Z4LlRyYW5zaXRpb25z
PXtsaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGE7fX07RnguVHJhbnNpdGlvbnM9bmV3IEhhc2go
RnguVHJhbnNpdGlvbnMpO0Z4LlRyYW5zaXRpb25zLmV4dGVuZD1mdW5jdGlvbihhKXtmb3IodmFy
IGIgaW4gYSl7RnguVHJhbnNpdGlvbnNbYl09bmV3IEZ4LlRyYW5zaXRpb24oYVtiXSk7CisrfX07
RnguVHJhbnNpdGlvbnMuZXh0ZW5kKHtQb3c6ZnVuY3Rpb24oYixhKXtyZXR1cm4gTWF0aC5wb3co
YixhJiZhWzBdfHw2KTt9LEV4cG86ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgucG93KDIsOCooYS0x
KSk7fSxDaXJjOmZ1bmN0aW9uKGEpe3JldHVybiAxLU1hdGguc2luKE1hdGguYWNvcyhhKSk7Cisr
fSxTaW5lOmZ1bmN0aW9uKGEpe3JldHVybiAxLU1hdGguY29zKGEqTWF0aC5QSS8yKTt9LEJhY2s6
ZnVuY3Rpb24oYixhKXthPWEmJmFbMF18fDEuNjE4O3JldHVybiBNYXRoLnBvdyhiLDIpKigoYSsx
KSpiLWEpO30sQm91bmNlOmZ1bmN0aW9uKGYpe3ZhciBlO2Zvcih2YXIgZD0wLGM9MTsKKysxO2Qr
PWMsYy89Mil7aWYoZj49KDctNCpkKS8xMSl7ZT1jKmMtTWF0aC5wb3coKDExLTYqZC0xMSpmKS80
LDIpO2JyZWFrO319cmV0dXJuIGU7fSxFbGFzdGljOmZ1bmN0aW9uKGIsYSl7cmV0dXJuIE1hdGgu
cG93KDIsMTAqLS1iKSpNYXRoLmNvcygyMCpiKk1hdGguUEkqKGEmJmFbMF18fDEpLzMpOworK319
KTtbIlF1YWQiLCJDdWJpYyIsIlF1YXJ0IiwiUXVpbnQiXS5lYWNoKGZ1bmN0aW9uKGIsYSl7Rngu
VHJhbnNpdGlvbnNbYl09bmV3IEZ4LlRyYW5zaXRpb24oZnVuY3Rpb24oYyl7cmV0dXJuIE1hdGgu
cG93KGMsYSsyKTt9KTt9KTsoZnVuY3Rpb24oKXt2YXIgZD1mdW5jdGlvbigpe30sYT0oIm9ucHJv
Z3Jlc3MiIGluIG5ldyBCcm93c2VyLlJlcXVlc3QpOworK3ZhciBjPXRoaXMuUmVxdWVzdD1uZXcg
Q2xhc3Moe0ltcGxlbWVudHM6W0NoYWluLEV2ZW50cyxPcHRpb25zXSxvcHRpb25zOnt1cmw6IiIs
ZGF0YToiIixoZWFkZXJzOnsiWC1SZXF1ZXN0ZWQtV2l0aCI6IlhNTEh0dHBSZXF1ZXN0IixBY2Nl
cHQ6InRleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1s
LCAqLyoifSxhc3luYzp0cnVlLGZvcm1hdDpmYWxzZSxtZXRob2Q6InBvc3QiLGxpbms6Imlnbm9y
ZSIsaXNTdWNjZXNzOm51bGwsZW11bGF0aW9uOnRydWUsdXJsRW5jb2RlZDp0cnVlLGVuY29kaW5n
OiJ1dGYtOCIsZXZhbFNjcmlwdHM6ZmFsc2UsZXZhbFJlc3BvbnNlOmZhbHNlLHRpbWVvdXQ6MCxu
b0NhY2hlOmZhbHNlfSxpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3RoaXMueGhyPW5ldyBCcm93c2Vy
LlJlcXVlc3QoKTsKKyt0aGlzLnNldE9wdGlvbnMoZSk7dGhpcy5oZWFkZXJzPXRoaXMub3B0aW9u
cy5oZWFkZXJzO30sb25TdGF0ZUNoYW5nZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMueGhyO2lmKGUu
cmVhZHlTdGF0ZSE9NHx8IXRoaXMucnVubmluZyl7cmV0dXJuO310aGlzLnJ1bm5pbmc9ZmFsc2U7
CisrdGhpcy5zdGF0dXM9MDtGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7dmFyIGY9ZS5zdGF0
dXM7dGhpcy5zdGF0dXM9KGY9PTEyMjMpPzIwNDpmO30uYmluZCh0aGlzKSk7ZS5vbnJlYWR5c3Rh
dGVjaGFuZ2U9ZDtpZihhKXtlLm9ucHJvZ3Jlc3M9ZS5vbmxvYWRzdGFydD1kOworK31jbGVhclRp
bWVvdXQodGhpcy50aW1lcik7dGhpcy5yZXNwb25zZT17dGV4dDp0aGlzLnhoci5yZXNwb25zZVRl
eHR8fCIiLHhtbDp0aGlzLnhoci5yZXNwb25zZVhNTH07aWYodGhpcy5vcHRpb25zLmlzU3VjY2Vz
cy5jYWxsKHRoaXMsdGhpcy5zdGF0dXMpKXt0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0
LHRoaXMucmVzcG9uc2UueG1sKTsKKyt9ZWxzZXt0aGlzLmZhaWx1cmUoKTt9fSxpc1N1Y2Nlc3M6
ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXR1cztyZXR1cm4oZT49MjAwJiZlPDMwMCk7fSxpc1J1
bm5pbmc6ZnVuY3Rpb24oKXtyZXR1cm4gISF0aGlzLnJ1bm5pbmc7fSxwcm9jZXNzU2NyaXB0czpm
dW5jdGlvbihlKXtpZih0aGlzLm9wdGlvbnMuZXZhbFJlc3BvbnNlfHwoLyhlY21hfGphdmEpc2Ny
aXB0LykudGVzdCh0aGlzLmdldEhlYWRlcigiQ29udGVudC10eXBlIikpKXtyZXR1cm4gQnJvd3Nl
ci5leGVjKGUpOworK31yZXR1cm4gZS5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25zLmV2YWxTY3Jp
cHRzKTt9LHN1Y2Nlc3M6ZnVuY3Rpb24oZixlKXt0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NT
Y3JpcHRzKGYpLGUpO30sb25TdWNjZXNzOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoImNvbXBs
ZXRlIixhcmd1bWVudHMpLmZpcmVFdmVudCgic3VjY2VzcyIsYXJndW1lbnRzKS5jYWxsQ2hhaW4o
KTsKKyt9LGZhaWx1cmU6ZnVuY3Rpb24oKXt0aGlzLm9uRmFpbHVyZSgpO30sb25GYWlsdXJlOmZ1
bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoImNvbXBsZXRlIikuZmlyZUV2ZW50KCJmYWlsdXJlIix0
aGlzLnhocik7fSxsb2Fkc3RhcnQ6ZnVuY3Rpb24oZSl7dGhpcy5maXJlRXZlbnQoImxvYWRzdGFy
dCIsW2UsdGhpcy54aHJdKTsKKyt9LHByb2dyZXNzOmZ1bmN0aW9uKGUpe3RoaXMuZmlyZUV2ZW50
KCJwcm9ncmVzcyIsW2UsdGhpcy54aHJdKTt9LHRpbWVvdXQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmVF
dmVudCgidGltZW91dCIsdGhpcy54aHIpO30sc2V0SGVhZGVyOmZ1bmN0aW9uKGUsZil7dGhpcy5o
ZWFkZXJzW2VdPWY7CisrcmV0dXJuIHRoaXM7fSxnZXRIZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJu
IEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VI
ZWFkZXIoZSk7fS5iaW5kKHRoaXMpKTt9LGNoZWNrOmZ1bmN0aW9uKCl7aWYoIXRoaXMucnVubmlu
Zyl7cmV0dXJuIHRydWU7CisrfXN3aXRjaCh0aGlzLm9wdGlvbnMubGluayl7Y2FzZSJjYW5jZWwi
OnRoaXMuY2FuY2VsKCk7cmV0dXJuIHRydWU7Y2FzZSJjaGFpbiI6dGhpcy5jaGFpbih0aGlzLmNh
bGxlci5wYXNzKGFyZ3VtZW50cyx0aGlzKSk7cmV0dXJuIGZhbHNlO31yZXR1cm4gZmFsc2U7fSxz
ZW5kOmZ1bmN0aW9uKG8pe2lmKCF0aGlzLmNoZWNrKG8pKXtyZXR1cm4gdGhpczsKKyt9dGhpcy5v
cHRpb25zLmlzU3VjY2Vzcz10aGlzLm9wdGlvbnMuaXNTdWNjZXNzfHx0aGlzLmlzU3VjY2Vzczt0
aGlzLnJ1bm5pbmc9dHJ1ZTt2YXIgbD10eXBlT2Yobyk7aWYobD09InN0cmluZyJ8fGw9PSJlbGVt
ZW50Iil7bz17ZGF0YTpvfTt9dmFyIGg9dGhpcy5vcHRpb25zOworK289T2JqZWN0LmFwcGVuZCh7
ZGF0YTpoLmRhdGEsdXJsOmgudXJsLG1ldGhvZDpoLm1ldGhvZH0sbyk7dmFyIGo9by5kYXRhLGY9
U3RyaW5nKG8udXJsKSxlPW8ubWV0aG9kLnRvTG93ZXJDYXNlKCk7c3dpdGNoKHR5cGVPZihqKSl7
Y2FzZSJlbGVtZW50IjpqPWRvY3VtZW50LmlkKGopLnRvUXVlcnlTdHJpbmcoKTsKKyticmVhaztj
YXNlIm9iamVjdCI6Y2FzZSJoYXNoIjpqPU9iamVjdC50b1F1ZXJ5U3RyaW5nKGopO31pZih0aGlz
Lm9wdGlvbnMuZm9ybWF0KXt2YXIgbT0iZm9ybWF0PSIrdGhpcy5vcHRpb25zLmZvcm1hdDtqPShq
KT9tKyImIitqOm07fWlmKHRoaXMub3B0aW9ucy5lbXVsYXRpb24mJiFbImdldCIsInBvc3QiXS5j
b250YWlucyhlKSl7dmFyIGs9Il9tZXRob2Q9IitlOworK2o9KGopP2srIiYiK2o6aztlPSJwb3N0
Ijt9aWYodGhpcy5vcHRpb25zLnVybEVuY29kZWQmJlsicG9zdCIsInB1dCJdLmNvbnRhaW5zKGUp
KXt2YXIgZz0odGhpcy5vcHRpb25zLmVuY29kaW5nKT8iOyBjaGFyc2V0PSIrdGhpcy5vcHRpb25z
LmVuY29kaW5nOiIiO3RoaXMuaGVhZGVyc1siQ29udGVudC10eXBlIl09ImFwcGxpY2F0aW9uL3gt
d3d3LWZvcm0tdXJsZW5jb2RlZCIrZzsKKyt9aWYoIWYpe2Y9ZG9jdW1lbnQubG9jYXRpb24ucGF0
aG5hbWU7fXZhciBpPWYubGFzdEluZGV4T2YoIi8iKTtpZihpPi0xJiYoaT1mLmluZGV4T2YoIiMi
KSk+LTEpe2Y9Zi5zdWJzdHIoMCxpKTt9aWYodGhpcy5vcHRpb25zLm5vQ2FjaGUpe2YrPShmLmNv
bnRhaW5zKCI/Iik/IiYiOiI/IikrU3RyaW5nLnVuaXF1ZUlEKCk7CisrfWlmKGomJmU9PSJnZXQi
KXtmKz0oZi5jb250YWlucygiPyIpPyImIjoiPyIpK2o7aj1udWxsO312YXIgbj10aGlzLnhocjtp
ZihhKXtuLm9ubG9hZHN0YXJ0PXRoaXMubG9hZHN0YXJ0LmJpbmQodGhpcyk7bi5vbnByb2dyZXNz
PXRoaXMucHJvZ3Jlc3MuYmluZCh0aGlzKTsKKyt9bi5vcGVuKGUudG9VcHBlckNhc2UoKSxmLHRo
aXMub3B0aW9ucy5hc3luYyx0aGlzLm9wdGlvbnMudXNlcix0aGlzLm9wdGlvbnMucGFzc3dvcmQp
O2lmKHRoaXMub3B0aW9ucy51c2VyJiYid2l0aENyZWRlbnRpYWxzIiBpbiBuKXtuLndpdGhDcmVk
ZW50aWFscz10cnVlOworK31uLm9ucmVhZHlzdGF0ZWNoYW5nZT10aGlzLm9uU3RhdGVDaGFuZ2Uu
YmluZCh0aGlzKTtPYmplY3QuZWFjaCh0aGlzLmhlYWRlcnMsZnVuY3Rpb24ocSxwKXt0cnl7bi5z
ZXRSZXF1ZXN0SGVhZGVyKHAscSk7fWNhdGNoKHIpe3RoaXMuZmlyZUV2ZW50KCJleGNlcHRpb24i
LFtwLHFdKTsKKyt9fSx0aGlzKTt0aGlzLmZpcmVFdmVudCgicmVxdWVzdCIpO24uc2VuZChqKTtp
ZighdGhpcy5vcHRpb25zLmFzeW5jKXt0aGlzLm9uU3RhdGVDaGFuZ2UoKTt9aWYodGhpcy5vcHRp
b25zLnRpbWVvdXQpe3RoaXMudGltZXI9dGhpcy50aW1lb3V0LmRlbGF5KHRoaXMub3B0aW9ucy50
aW1lb3V0LHRoaXMpOworK31yZXR1cm4gdGhpczt9LGNhbmNlbDpmdW5jdGlvbigpe2lmKCF0aGlz
LnJ1bm5pbmcpe3JldHVybiB0aGlzO310aGlzLnJ1bm5pbmc9ZmFsc2U7dmFyIGU9dGhpcy54aHI7
ZS5hYm9ydCgpO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtlLm9ucmVhZHlzdGF0ZWNoYW5nZT1k
OworK2lmKGEpe2Uub25wcm9ncmVzcz1lLm9ubG9hZHN0YXJ0PWQ7fXRoaXMueGhyPW5ldyBCcm93
c2VyLlJlcXVlc3QoKTt0aGlzLmZpcmVFdmVudCgiY2FuY2VsIik7cmV0dXJuIHRoaXM7fX0pO3Zh
ciBiPXt9O1siZ2V0IiwicG9zdCIsInB1dCIsImRlbGV0ZSIsIkdFVCIsIlBPU1QiLCJQVVQiLCJE
RUxFVEUiXS5lYWNoKGZ1bmN0aW9uKGUpe2JbZV09ZnVuY3Rpb24oZyl7dmFyIGY9e21ldGhvZDpl
fTsKKytpZihnIT1udWxsKXtmLmRhdGE9Zzt9cmV0dXJuIHRoaXMuc2VuZChmKTt9O30pO2MuaW1w
bGVtZW50KGIpO0VsZW1lbnQuUHJvcGVydGllcy5zZW5kPXtzZXQ6ZnVuY3Rpb24oZSl7dmFyIGY9
dGhpcy5nZXQoInNlbmQiKS5jYW5jZWwoKTtmLnNldE9wdGlvbnMoZSk7CisrcmV0dXJuIHRoaXM7
fSxnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJldHJpZXZlKCJzZW5kIik7aWYoIWUpe2U9bmV3
IGMoe2RhdGE6dGhpcyxsaW5rOiJjYW5jZWwiLG1ldGhvZDp0aGlzLmdldCgibWV0aG9kIil8fCJw
b3N0Iix1cmw6dGhpcy5nZXQoImFjdGlvbiIpfSk7CisrdGhpcy5zdG9yZSgic2VuZCIsZSk7fXJl
dHVybiBlO319O0VsZW1lbnQuaW1wbGVtZW50KHtzZW5kOmZ1bmN0aW9uKGUpe3ZhciBmPXRoaXMu
Z2V0KCJzZW5kIik7Zi5zZW5kKHtkYXRhOnRoaXMsdXJsOmV8fGYub3B0aW9ucy51cmx9KTtyZXR1
cm4gdGhpczt9fSk7fSkoKTsKKytSZXF1ZXN0LkhUTUw9bmV3IENsYXNzKHtFeHRlbmRzOlJlcXVl
c3Qsb3B0aW9uczp7dXBkYXRlOmZhbHNlLGFwcGVuZDpmYWxzZSxldmFsU2NyaXB0czp0cnVlLGZp
bHRlcjpmYWxzZSxoZWFkZXJzOntBY2NlcHQ6InRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0
ZXh0L3htbCwgKi8qIn19LHN1Y2Nlc3M6ZnVuY3Rpb24oZil7dmFyIGU9dGhpcy5vcHRpb25zLGM9
dGhpcy5yZXNwb25zZTsKKytjLmh0bWw9Zi5zdHJpcFNjcmlwdHMoZnVuY3Rpb24oaCl7Yy5qYXZh
c2NyaXB0PWg7fSk7dmFyIGQ9Yy5odG1sLm1hdGNoKC88Ym9keVtePl0qPihbXHNcU10qPyk8XC9i
b2R5Pi9pKTtpZihkKXtjLmh0bWw9ZFsxXTt9dmFyIGI9bmV3IEVsZW1lbnQoImRpdiIpLnNldCgi
aHRtbCIsYy5odG1sKTsKKytjLnRyZWU9Yi5jaGlsZE5vZGVzO2MuZWxlbWVudHM9Yi5nZXRFbGVt
ZW50cyhlLmZpbHRlcnx8IioiKTtpZihlLmZpbHRlcil7Yy50cmVlPWMuZWxlbWVudHM7fWlmKGUu
dXBkYXRlKXt2YXIgZz1kb2N1bWVudC5pZChlLnVwZGF0ZSkuZW1wdHkoKTtpZihlLmZpbHRlcil7
Zy5hZG9wdChjLmVsZW1lbnRzKTsKKyt9ZWxzZXtnLnNldCgiaHRtbCIsYy5odG1sKTt9fWVsc2V7
aWYoZS5hcHBlbmQpe3ZhciBhPWRvY3VtZW50LmlkKGUuYXBwZW5kKTtpZihlLmZpbHRlcil7Yy5l
bGVtZW50cy5yZXZlcnNlKCkuaW5qZWN0KGEpO31lbHNle2EuYWRvcHQoYi5nZXRDaGlsZHJlbigp
KTt9fX1pZihlLmV2YWxTY3JpcHRzKXtCcm93c2VyLmV4ZWMoYy5qYXZhc2NyaXB0KTsKKyt9dGhp
cy5vblN1Y2Nlc3MoYy50cmVlLGMuZWxlbWVudHMsYy5odG1sLGMuamF2YXNjcmlwdCk7fX0pO0Vs
ZW1lbnQuUHJvcGVydGllcy5sb2FkPXtzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nZXQoImxv
YWQiKS5jYW5jZWwoKTtiLnNldE9wdGlvbnMoYSk7cmV0dXJuIHRoaXM7CisrfSxnZXQ6ZnVuY3Rp
b24oKXt2YXIgYT10aGlzLnJldHJpZXZlKCJsb2FkIik7aWYoIWEpe2E9bmV3IFJlcXVlc3QuSFRN
TCh7ZGF0YTp0aGlzLGxpbms6ImNhbmNlbCIsdXBkYXRlOnRoaXMsbWV0aG9kOiJnZXQifSk7dGhp
cy5zdG9yZSgibG9hZCIsYSk7fXJldHVybiBhOworK319O0VsZW1lbnQuaW1wbGVtZW50KHtsb2Fk
OmZ1bmN0aW9uKCl7dGhpcy5nZXQoImxvYWQiKS5zZW5kKEFycmF5LmxpbmsoYXJndW1lbnRzLHtk
YXRhOlR5cGUuaXNPYmplY3QsdXJsOlR5cGUuaXNTdHJpbmd9KSk7cmV0dXJuIHRoaXM7fX0pO2lm
KHR5cGVvZiBKU09OPT0idW5kZWZpbmVkIil7dGhpcy5KU09OPXt9OworK31KU09OPW5ldyBIYXNo
KHtzdHJpbmdpZnk6SlNPTi5zdHJpbmdpZnkscGFyc2U6SlNPTi5wYXJzZX0pOyhmdW5jdGlvbigp
e3ZhciBzcGVjaWFsPXsiXGIiOiJcXGIiLCJcdCI6IlxcdCIsIlxuIjoiXFxuIiwiXGYiOiJcXGYi
LCJcciI6IlxcciIsJyInOidcXCInLCJcXCI6IlxcXFwifTsKKyt2YXIgZXNjYXBlPWZ1bmN0aW9u
KGNocil7cmV0dXJuIHNwZWNpYWxbY2hyXXx8IlxcdSIrKCIwMDAwIitjaHIuY2hhckNvZGVBdCgw
KS50b1N0cmluZygxNikpLnNsaWNlKC00KTt9O0pTT04udmFsaWRhdGU9ZnVuY3Rpb24oc3RyaW5n
KXtzdHJpbmc9c3RyaW5nLnJlcGxhY2UoL1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0
fSkvZywiQCIpLnJlcGxhY2UoLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86
XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLCJdIikucmVwbGFjZSgvKD86Xnw6fCwpKD86XHMq
XFspKy9nLCIiKTsKKytyZXR1cm4oL15bXF0sOnt9XHNdKiQvKS50ZXN0KHN0cmluZyk7fTtKU09O
LmVuY29kZT1KU09OLnN0cmluZ2lmeT9mdW5jdGlvbihvYmope3JldHVybiBKU09OLnN0cmluZ2lm
eShvYmopO306ZnVuY3Rpb24ob2JqKXtpZihvYmomJm9iai50b0pTT04pe29iaj1vYmoudG9KU09O
KCk7CisrfXN3aXRjaCh0eXBlT2Yob2JqKSl7Y2FzZSJzdHJpbmciOnJldHVybiciJytvYmoucmVw
bGFjZSgvW1x4MDAtXHgxZlxcIl0vZyxlc2NhcGUpKyciJztjYXNlImFycmF5IjpyZXR1cm4iWyIr
b2JqLm1hcChKU09OLmVuY29kZSkuY2xlYW4oKSsiXSI7Y2FzZSJvYmplY3QiOmNhc2UiaGFzaCI6
dmFyIHN0cmluZz1bXTsKKytPYmplY3QuZWFjaChvYmosZnVuY3Rpb24odmFsdWUsa2V5KXt2YXIg
anNvbj1KU09OLmVuY29kZSh2YWx1ZSk7aWYoanNvbil7c3RyaW5nLnB1c2goSlNPTi5lbmNvZGUo
a2V5KSsiOiIranNvbik7fX0pO3JldHVybiJ7IitzdHJpbmcrIn0iO2Nhc2UibnVtYmVyIjpjYXNl
ImJvb2xlYW4iOnJldHVybiIiK29iajsKKytjYXNlIm51bGwiOnJldHVybiJudWxsIjt9cmV0dXJu
IG51bGw7fTtKU09OLmRlY29kZT1mdW5jdGlvbihzdHJpbmcsc2VjdXJlKXtpZighc3RyaW5nfHx0
eXBlT2Yoc3RyaW5nKSE9InN0cmluZyIpe3JldHVybiBudWxsO31pZihzZWN1cmV8fEpTT04uc2Vj
dXJlKXtpZihKU09OLnBhcnNlKXtyZXR1cm4gSlNPTi5wYXJzZShzdHJpbmcpOworK31pZighSlNP
Ti52YWxpZGF0ZShzdHJpbmcpKXt0aHJvdyBuZXcgRXJyb3IoIkpTT04gY291bGQgbm90IGRlY29k
ZSB0aGUgaW5wdXQ7IHNlY3VyaXR5IGlzIGVuYWJsZWQgYW5kIHRoZSB2YWx1ZSBpcyBub3Qgc2Vj
dXJlLiIpO319cmV0dXJuIGV2YWwoIigiK3N0cmluZysiKSIpOworK307fSkoKTtSZXF1ZXN0LkpT
T049bmV3IENsYXNzKHtFeHRlbmRzOlJlcXVlc3Qsb3B0aW9uczp7c2VjdXJlOnRydWV9LGluaXRp
YWxpemU6ZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnQoYSk7T2JqZWN0LmFwcGVuZCh0aGlzLmhlYWRl
cnMse0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsIlgtUmVxdWVzdCI6IkpTT04ifSk7CisrfSxz
dWNjZXNzOmZ1bmN0aW9uKGMpe3ZhciBiO3RyeXtiPXRoaXMucmVzcG9uc2UuanNvbj1KU09OLmRl
Y29kZShjLHRoaXMub3B0aW9ucy5zZWN1cmUpO31jYXRjaChhKXt0aGlzLmZpcmVFdmVudCgiZXJy
b3IiLFtjLGFdKTtyZXR1cm47fWlmKGI9PW51bGwpe3RoaXMub25GYWlsdXJlKCk7CisrfWVsc2V7
dGhpcy5vblN1Y2Nlc3MoYixjKTt9fX0pO3ZhciBDb29raWU9bmV3IENsYXNzKHtJbXBsZW1lbnRz
Ok9wdGlvbnMsb3B0aW9uczp7cGF0aDoiLyIsZG9tYWluOmZhbHNlLGR1cmF0aW9uOmZhbHNlLHNl
Y3VyZTpmYWxzZSxkb2N1bWVudDpkb2N1bWVudCxlbmNvZGU6dHJ1ZX0saW5pdGlhbGl6ZTpmdW5j
dGlvbihiLGEpe3RoaXMua2V5PWI7CisrdGhpcy5zZXRPcHRpb25zKGEpO30sd3JpdGU6ZnVuY3Rp
b24oYil7aWYodGhpcy5vcHRpb25zLmVuY29kZSl7Yj1lbmNvZGVVUklDb21wb25lbnQoYik7fWlm
KHRoaXMub3B0aW9ucy5kb21haW4pe2IrPSI7IGRvbWFpbj0iK3RoaXMub3B0aW9ucy5kb21haW47
fWlmKHRoaXMub3B0aW9ucy5wYXRoKXtiKz0iOyBwYXRoPSIrdGhpcy5vcHRpb25zLnBhdGg7Cisr
fWlmKHRoaXMub3B0aW9ucy5kdXJhdGlvbil7dmFyIGE9bmV3IERhdGUoKTthLnNldFRpbWUoYS5n
ZXRUaW1lKCkrdGhpcy5vcHRpb25zLmR1cmF0aW9uKjI0KjYwKjYwKjEwMDApO2IrPSI7IGV4cGly
ZXM9IithLnRvR01UU3RyaW5nKCk7fWlmKHRoaXMub3B0aW9ucy5zZWN1cmUpe2IrPSI7IHNlY3Vy
ZSI7CisrfXRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWU9dGhpcy5rZXkrIj0iK2I7cmV0dXJu
IHRoaXM7fSxyZWFkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tp
ZS5tYXRjaCgiKD86Xnw7KVxccyoiK3RoaXMua2V5LmVzY2FwZVJlZ0V4cCgpKyI9KFteO10qKSIp
OworK3JldHVybihhKT9kZWNvZGVVUklDb21wb25lbnQoYVsxXSk6bnVsbDt9LGRpc3Bvc2U6ZnVu
Y3Rpb24oKXtuZXcgQ29va2llKHRoaXMua2V5LE9iamVjdC5tZXJnZSh7fSx0aGlzLm9wdGlvbnMs
e2R1cmF0aW9uOi0xfSkpLndyaXRlKCIiKTtyZXR1cm4gdGhpczt9fSk7CisrQ29va2llLndyaXRl
PWZ1bmN0aW9uKGIsYyxhKXtyZXR1cm4gbmV3IENvb2tpZShiLGEpLndyaXRlKGMpO307Q29va2ll
LnJlYWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBDb29raWUoYSkucmVhZCgpO307Q29va2llLmRp
c3Bvc2U9ZnVuY3Rpb24oYixhKXtyZXR1cm4gbmV3IENvb2tpZShiLGEpLmRpc3Bvc2UoKTsKKyt9
OyhmdW5jdGlvbihpLGspe3ZhciBsLGYsZT1bXSxjLGIsZD1rLmNyZWF0ZUVsZW1lbnQoImRpdiIp
O3ZhciBnPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGIpO2lmKGwpe3JldHVybjt9QnJvd3Nlci5s
b2FkZWQ9bD10cnVlO2sucmVtb3ZlTGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGcpLnJlbW92
ZUxpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixhKTsKKytrLmZpcmVFdmVudCgiZG9tcmVhZHki
KTtpLmZpcmVFdmVudCgiZG9tcmVhZHkiKTt9O3ZhciBhPWZ1bmN0aW9uKCl7Zm9yKHZhciBtPWUu
bGVuZ3RoO20tLTspe2lmKGVbbV0oKSl7ZygpO3JldHVybiB0cnVlO319cmV0dXJuIGZhbHNlO307
dmFyIGo9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoYik7CisraWYoIWEoKSl7Yj1zZXRUaW1lb3V0
KGosMTApO319O2suYWRkTGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGcpO3ZhciBoPWZ1bmN0
aW9uKCl7dHJ5e2QuZG9TY3JvbGwoKTtyZXR1cm4gdHJ1ZTt9Y2F0Y2gobSl7fXJldHVybiBmYWxz
ZTt9O2lmKGQuZG9TY3JvbGwmJiFoKCkpe2UucHVzaChoKTsKKytjPXRydWU7fWlmKGsucmVhZHlT
dGF0ZSl7ZS5wdXNoKGZ1bmN0aW9uKCl7dmFyIG09ay5yZWFkeVN0YXRlO3JldHVybihtPT0ibG9h
ZGVkInx8bT09ImNvbXBsZXRlIik7fSk7fWlmKCJvbnJlYWR5c3RhdGVjaGFuZ2UiIGluIGspe2su
YWRkTGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLGEpOworK31lbHNle2M9dHJ1ZTt9aWYoYyl7
aigpO31FbGVtZW50LkV2ZW50cy5kb21yZWFkeT17b25BZGQ6ZnVuY3Rpb24obSl7aWYobCl7bS5j
YWxsKHRoaXMpO319fTtFbGVtZW50LkV2ZW50cy5sb2FkPXtiYXNlOiJsb2FkIixvbkFkZDpmdW5j
dGlvbihtKXtpZihmJiZ0aGlzPT1pKXttLmNhbGwodGhpcyk7CisrfX0sY29uZGl0aW9uOmZ1bmN0
aW9uKCl7aWYodGhpcz09aSl7ZygpO2RlbGV0ZSBFbGVtZW50LkV2ZW50cy5sb2FkO31yZXR1cm4g
dHJ1ZTt9fTtpLmFkZEV2ZW50KCJsb2FkIixmdW5jdGlvbigpe2Y9dHJ1ZTt9KTt9KSh3aW5kb3cs
ZG9jdW1lbnQpOyhmdW5jdGlvbigpe3ZhciBTd2lmZj10aGlzLlN3aWZmPW5ldyBDbGFzcyh7SW1w
bGVtZW50czpPcHRpb25zLG9wdGlvbnM6e2lkOm51bGwsaGVpZ2h0OjEsd2lkdGg6MSxjb250YWlu
ZXI6bnVsbCxwcm9wZXJ0aWVzOnt9LHBhcmFtczp7cXVhbGl0eToiaGlnaCIsYWxsb3dTY3JpcHRB
Y2Nlc3M6ImFsd2F5cyIsd01vZGU6IndpbmRvdyIsc3dMaXZlQ29ubmVjdDp0cnVlfSxjYWxsQmFj
a3M6e30sdmFyczp7fX0sdG9FbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2JqZWN0Owor
K30saW5pdGlhbGl6ZTpmdW5jdGlvbihwYXRoLG9wdGlvbnMpe3RoaXMuaW5zdGFuY2U9IlN3aWZm
XyIrU3RyaW5nLnVuaXF1ZUlEKCk7dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO29wdGlvbnM9dGhp
cy5vcHRpb25zO3ZhciBpZD10aGlzLmlkPW9wdGlvbnMuaWR8fHRoaXMuaW5zdGFuY2U7CisrdmFy
IGNvbnRhaW5lcj1kb2N1bWVudC5pZChvcHRpb25zLmNvbnRhaW5lcik7U3dpZmYuQ2FsbEJhY2tz
W3RoaXMuaW5zdGFuY2VdPXt9O3ZhciBwYXJhbXM9b3B0aW9ucy5wYXJhbXMsdmFycz1vcHRpb25z
LnZhcnMsY2FsbEJhY2tzPW9wdGlvbnMuY2FsbEJhY2tzOworK3ZhciBwcm9wZXJ0aWVzPU9iamVj
dC5hcHBlbmQoe2hlaWdodDpvcHRpb25zLmhlaWdodCx3aWR0aDpvcHRpb25zLndpZHRofSxvcHRp
b25zLnByb3BlcnRpZXMpO3ZhciBzZWxmPXRoaXM7Zm9yKHZhciBjYWxsQmFjayBpbiBjYWxsQmFj
a3Mpe1N3aWZmLkNhbGxCYWNrc1t0aGlzLmluc3RhbmNlXVtjYWxsQmFja109KGZ1bmN0aW9uKG9w
dGlvbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG9wdGlvbi5hcHBseShzZWxmLm9iamVjdCxh
cmd1bWVudHMpOworK307fSkoY2FsbEJhY2tzW2NhbGxCYWNrXSk7dmFyc1tjYWxsQmFja109IlN3
aWZmLkNhbGxCYWNrcy4iK3RoaXMuaW5zdGFuY2UrIi4iK2NhbGxCYWNrO31wYXJhbXMuZmxhc2hW
YXJzPU9iamVjdC50b1F1ZXJ5U3RyaW5nKHZhcnMpO2lmKEJyb3dzZXIuaWUpe3Byb3BlcnRpZXMu
Y2xhc3NpZD0iY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIjsKKytw
YXJhbXMubW92aWU9cGF0aDt9ZWxzZXtwcm9wZXJ0aWVzLnR5cGU9ImFwcGxpY2F0aW9uL3gtc2hv
Y2t3YXZlLWZsYXNoIjt9cHJvcGVydGllcy5kYXRhPXBhdGg7dmFyIGJ1aWxkPSc8b2JqZWN0IGlk
PSInK2lkKyciJztmb3IodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXMpe2J1aWxkKz0iICIrcHJv
cGVydHkrJz0iJytwcm9wZXJ0aWVzW3Byb3BlcnR5XSsnIic7CisrfWJ1aWxkKz0iPiI7Zm9yKHZh
ciBwYXJhbSBpbiBwYXJhbXMpe2lmKHBhcmFtc1twYXJhbV0pe2J1aWxkKz0nPHBhcmFtIG5hbWU9
IicrcGFyYW0rJyIgdmFsdWU9IicrcGFyYW1zW3BhcmFtXSsnIiAvPic7fX1idWlsZCs9Ijwvb2Jq
ZWN0PiI7dGhpcy5vYmplY3Q9KChjb250YWluZXIpP2NvbnRhaW5lci5lbXB0eSgpOm5ldyBFbGVt
ZW50KCJkaXYiKSkuc2V0KCJodG1sIixidWlsZCkuZmlyc3RDaGlsZDsKKyt9LHJlcGxhY2VzOmZ1
bmN0aW9uKGVsZW1lbnQpe2VsZW1lbnQ9ZG9jdW1lbnQuaWQoZWxlbWVudCx0cnVlKTtlbGVtZW50
LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMudG9FbGVtZW50KCksZWxlbWVudCk7cmV0dXJu
IHRoaXM7fSxpbmplY3Q6ZnVuY3Rpb24oZWxlbWVudCl7ZG9jdW1lbnQuaWQoZWxlbWVudCx0cnVl
KS5hcHBlbmRDaGlsZCh0aGlzLnRvRWxlbWVudCgpKTsKKytyZXR1cm4gdGhpczt9LHJlbW90ZTpm
dW5jdGlvbigpe3JldHVybiBTd2lmZi5yZW1vdGUuYXBwbHkoU3dpZmYsW3RoaXMudG9FbGVtZW50
KCldLmFwcGVuZChhcmd1bWVudHMpKTt9fSk7U3dpZmYuQ2FsbEJhY2tzPXt9O1N3aWZmLnJlbW90
ZT1mdW5jdGlvbihvYmosZm4pe3ZhciBycz1vYmouQ2FsbEZ1bmN0aW9uKCc8aW52b2tlIG5hbWU9
IicrZm4rJyIgcmV0dXJudHlwZT0iamF2YXNjcmlwdCI+JytfX2ZsYXNoX19hcmd1bWVudHNUb1hN
TChhcmd1bWVudHMsMikrIjwvaW52b2tlPiIpOworK3JldHVybiBldmFsKHJzKTt9O30pKCk7Citc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS93ZWIvYWpheC9saWJzL3By
b3RvdHlwZS8xLjcuMC4wL3Byb3RvdHlwZS5qcyBiL3dlYi9hamF4L2xpYnMvcHJvdG90eXBlLzEu
Ny4wLjAvcHJvdG90eXBlLmpzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4u
NDc0YjIyMworLS0tIC9kZXYvbnVsbAorKysrIGIvd2ViL2FqYXgvbGlicy9wcm90b3R5cGUvMS43
LjAuMC9wcm90b3R5cGUuanMKK0BAIC0wLDAgKzEsNjA4MiBAQAorKy8qICBQcm90b3R5cGUgSmF2
YVNjcmlwdCBmcmFtZXdvcmssIHZlcnNpb24gMS43CisrICogIChjKSAyMDA1LTIwMTAgU2FtIFN0
ZXBoZW5zb24KKysgKgorKyAqICBQcm90b3R5cGUgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5k
ZXIgdGhlIHRlcm1zIG9mIGFuIE1JVC1zdHlsZSBsaWNlbnNlLgorKyAqICBGb3IgZGV0YWlscywg
c2VlIHRoZSBQcm90b3R5cGUgd2ViIHNpdGU6IGh0dHA6Ly93d3cucHJvdG90eXBlanMub3JnLwor
KyAqCisrICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrdmFyIFByb3RvdHlwZSA9IHsKKysKKysg
IFZlcnNpb246ICcxLjcnLAorKworKyAgQnJvd3NlcjogKGZ1bmN0aW9uKCl7CisrICAgIHZhciB1
YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7CisrICAgIHZhciBpc09wZXJhID0gT2JqZWN0LnByb3Rv
dHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5vcGVyYSkgPT0gJ1tvYmplY3QgT3BlcmFdJzsKKysg
ICAgcmV0dXJuIHsKKysgICAgICBJRTogICAgICAgICAgICAgISF3aW5kb3cuYXR0YWNoRXZlbnQg
JiYgIWlzT3BlcmEsCisrICAgICAgT3BlcmE6ICAgICAgICAgIGlzT3BlcmEsCisrICAgICAgV2Vi
S2l0OiAgICAgICAgIHVhLmluZGV4T2YoJ0FwcGxlV2ViS2l0LycpID4gLTEsCisrICAgICAgR2Vj
a286ICAgICAgICAgIHVhLmluZGV4T2YoJ0dlY2tvJykgPiAtMSAmJiB1YS5pbmRleE9mKCdLSFRN
TCcpID09PSAtMSwKKysgICAgICBNb2JpbGVTYWZhcmk6ICAgL0FwcGxlLipNb2JpbGUvLnRlc3Qo
dWEpCisrICAgIH0KKysgIH0pKCksCisrCisrICBCcm93c2VyRmVhdHVyZXM6IHsKKysgICAgWFBh
dGg6ICEhZG9jdW1lbnQuZXZhbHVhdGUsCisrCisrICAgIFNlbGVjdG9yc0FQSTogISFkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yLAorKworKyAgICBFbGVtZW50RXh0ZW5zaW9uczogKGZ1bmN0aW9uKCkg
eworKyAgICAgIHZhciBjb25zdHJ1Y3RvciA9IHdpbmRvdy5FbGVtZW50IHx8IHdpbmRvdy5IVE1M
RWxlbWVudDsKKysgICAgICByZXR1cm4gISEoY29uc3RydWN0b3IgJiYgY29uc3RydWN0b3IucHJv
dG90eXBlKTsKKysgICAgfSkoKSwKKysgICAgU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9uczogKGZ1
bmN0aW9uKCkgeworKyAgICAgIGlmICh0eXBlb2Ygd2luZG93LkhUTUxEaXZFbGVtZW50ICE9PSAn
dW5kZWZpbmVkJykKKysgICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAgIHZhciBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKKysgICAgICAgICAgZm9ybSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKSwKKysgICAgICAgICAgaXNTdXBwb3J0ZWQgPSBmYWxzZTsK
KysKKysgICAgICBpZiAoZGl2WydfX3Byb3RvX18nXSAmJiAoZGl2WydfX3Byb3RvX18nXSAhPT0g
Zm9ybVsnX19wcm90b19fJ10pKSB7CisrICAgICAgICBpc1N1cHBvcnRlZCA9IHRydWU7CisrICAg
ICAgfQorKworKyAgICAgIGRpdiA9IGZvcm0gPSBudWxsOworKworKyAgICAgIHJldHVybiBpc1N1
cHBvcnRlZDsKKysgICAgfSkoKQorKyAgfSwKKysKKysgIFNjcmlwdEZyYWdtZW50OiAnPHNjcmlw
dFtePl0qPihbXFxTXFxzXSo/KTxcL3NjcmlwdD4nLAorKyAgSlNPTkZpbHRlcjogL15cL1wqLXNl
Y3VyZS0oW1xzXFNdKilcKlwvXHMqJC8sCisrCisrICBlbXB0eUZ1bmN0aW9uOiBmdW5jdGlvbigp
IHsgfSwKKysKKysgIEs6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggfQorK307CisrCisraWYgKFBy
b3RvdHlwZS5Ccm93c2VyLk1vYmlsZVNhZmFyaSkKKysgIFByb3RvdHlwZS5Ccm93c2VyRmVhdHVy
ZXMuU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9ucyA9IGZhbHNlOworKworKworK3ZhciBBYnN0cmFj
dCA9IHsgfTsKKysKKysKKyt2YXIgVHJ5ID0geworKyAgdGhlc2U6IGZ1bmN0aW9uKCkgeworKyAg
ICB2YXIgcmV0dXJuVmFsdWU7CisrCisrICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcmd1
bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKysgICAgICB2YXIgbGFtYmRhID0gYXJn
dW1lbnRzW2ldOworKyAgICAgIHRyeSB7CisrICAgICAgICByZXR1cm5WYWx1ZSA9IGxhbWJkYSgp
OworKyAgICAgICAgYnJlYWs7CisrICAgICAgfSBjYXRjaCAoZSkgeyB9CisrICAgIH0KKysKKysg
ICAgcmV0dXJuIHJldHVyblZhbHVlOworKyAgfQorK307CisrCisrLyogQmFzZWQgb24gQWxleCBB
cm5lbGwncyBpbmhlcml0YW5jZSBpbXBsZW1lbnRhdGlvbi4gKi8KKysKKyt2YXIgQ2xhc3MgPSAo
ZnVuY3Rpb24oKSB7CisrCisrICB2YXIgSVNfRE9OVEVOVU1fQlVHR1kgPSAoZnVuY3Rpb24oKXsK
KysgICAgZm9yICh2YXIgcCBpbiB7IHRvU3RyaW5nOiAxIH0pIHsKKysgICAgICBpZiAocCA9PT0g
J3RvU3RyaW5nJykgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworKyAg
fSkoKTsKKysKKysgIGZ1bmN0aW9uIHN1YmNsYXNzKCkge307CisrICBmdW5jdGlvbiBjcmVhdGUo
KSB7CisrICAgIHZhciBwYXJlbnQgPSBudWxsLCBwcm9wZXJ0aWVzID0gJEEoYXJndW1lbnRzKTsK
KysgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHByb3BlcnRpZXNbMF0pKQorKyAgICAgIHBhcmVu
dCA9IHByb3BlcnRpZXMuc2hpZnQoKTsKKysKKysgICAgZnVuY3Rpb24ga2xhc3MoKSB7CisrICAg
ICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisrICAgIH0KKysKKysg
ICAgT2JqZWN0LmV4dGVuZChrbGFzcywgQ2xhc3MuTWV0aG9kcyk7CisrICAgIGtsYXNzLnN1cGVy
Y2xhc3MgPSBwYXJlbnQ7CisrICAgIGtsYXNzLnN1YmNsYXNzZXMgPSBbXTsKKysKKysgICAgaWYg
KHBhcmVudCkgeworKyAgICAgIHN1YmNsYXNzLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7
CisrICAgICAga2xhc3MucHJvdG90eXBlID0gbmV3IHN1YmNsYXNzOworKyAgICAgIHBhcmVudC5z
dWJjbGFzc2VzLnB1c2goa2xhc3MpOworKyAgICB9CisrCisrICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKQorKyAgICAgIGtsYXNz
LmFkZE1ldGhvZHMocHJvcGVydGllc1tpXSk7CisrCisrICAgIGlmICgha2xhc3MucHJvdG90eXBl
LmluaXRpYWxpemUpCisrICAgICAga2xhc3MucHJvdG90eXBlLmluaXRpYWxpemUgPSBQcm90b3R5
cGUuZW1wdHlGdW5jdGlvbjsKKysKKysgICAga2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0g
a2xhc3M7CisrICAgIHJldHVybiBrbGFzczsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGFkZE1ldGhv
ZHMoc291cmNlKSB7CisrICAgIHZhciBhbmNlc3RvciAgID0gdGhpcy5zdXBlcmNsYXNzICYmIHRo
aXMuc3VwZXJjbGFzcy5wcm90b3R5cGUsCisrICAgICAgICBwcm9wZXJ0aWVzID0gT2JqZWN0Lmtl
eXMoc291cmNlKTsKKysKKysgICAgaWYgKElTX0RPTlRFTlVNX0JVR0dZKSB7CisrICAgICAgaWYg
KHNvdXJjZS50b1N0cmluZyAhPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKQorKyAgICAgICAg
cHJvcGVydGllcy5wdXNoKCJ0b1N0cmluZyIpOworKyAgICAgIGlmIChzb3VyY2UudmFsdWVPZiAh
PSBPYmplY3QucHJvdG90eXBlLnZhbHVlT2YpCisrICAgICAgICBwcm9wZXJ0aWVzLnB1c2goInZh
bHVlT2YiKTsKKysgICAgfQorKworKyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcHJvcGVy
dGllcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworKyAgICAgIHZhciBwcm9wZXJ0eSA9IHBy
b3BlcnRpZXNbaV0sIHZhbHVlID0gc291cmNlW3Byb3BlcnR5XTsKKysgICAgICBpZiAoYW5jZXN0
b3IgJiYgT2JqZWN0LmlzRnVuY3Rpb24odmFsdWUpICYmCisrICAgICAgICAgIHZhbHVlLmFyZ3Vt
ZW50TmFtZXMoKVswXSA9PSAiJHN1cGVyIikgeworKyAgICAgICAgdmFyIG1ldGhvZCA9IHZhbHVl
OworKyAgICAgICAgdmFsdWUgPSAoZnVuY3Rpb24obSkgeworKyAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7IHJldHVybiBhbmNlc3RvclttXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9Owor
KyAgICAgICAgfSkocHJvcGVydHkpLndyYXAobWV0aG9kKTsKKysKKysgICAgICAgIHZhbHVlLnZh
bHVlT2YgPSBtZXRob2QudmFsdWVPZi5iaW5kKG1ldGhvZCk7CisrICAgICAgICB2YWx1ZS50b1N0
cmluZyA9IG1ldGhvZC50b1N0cmluZy5iaW5kKG1ldGhvZCk7CisrICAgICAgfQorKyAgICAgIHRo
aXMucHJvdG90eXBlW3Byb3BlcnR5XSA9IHZhbHVlOworKyAgICB9CisrCisrICAgIHJldHVybiB0
aGlzOworKyAgfQorKworKyAgcmV0dXJuIHsKKysgICAgY3JlYXRlOiBjcmVhdGUsCisrICAgIE1l
dGhvZHM6IHsKKysgICAgICBhZGRNZXRob2RzOiBhZGRNZXRob2RzCisrICAgIH0KKysgIH07Cisr
fSkoKTsKKysoZnVuY3Rpb24oKSB7CisrCisrICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3Rv
dHlwZS50b1N0cmluZywKKysgICAgICBOVUxMX1RZUEUgPSAnTnVsbCcsCisrICAgICAgVU5ERUZJ
TkVEX1RZUEUgPSAnVW5kZWZpbmVkJywKKysgICAgICBCT09MRUFOX1RZUEUgPSAnQm9vbGVhbics
CisrICAgICAgTlVNQkVSX1RZUEUgPSAnTnVtYmVyJywKKysgICAgICBTVFJJTkdfVFlQRSA9ICdT
dHJpbmcnLAorKyAgICAgIE9CSkVDVF9UWVBFID0gJ09iamVjdCcsCisrICAgICAgRlVOQ1RJT05f
Q0xBU1MgPSAnW29iamVjdCBGdW5jdGlvbl0nLAorKyAgICAgIEJPT0xFQU5fQ0xBU1MgPSAnW29i
amVjdCBCb29sZWFuXScsCisrICAgICAgTlVNQkVSX0NMQVNTID0gJ1tvYmplY3QgTnVtYmVyXScs
CisrICAgICAgU1RSSU5HX0NMQVNTID0gJ1tvYmplY3QgU3RyaW5nXScsCisrICAgICAgQVJSQVlf
Q0xBU1MgPSAnW29iamVjdCBBcnJheV0nLAorKyAgICAgIERBVEVfQ0xBU1MgPSAnW29iamVjdCBE
YXRlXScsCisrICAgICAgTkFUSVZFX0pTT05fU1RSSU5HSUZZX1NVUFBPUlQgPSB3aW5kb3cuSlNP
TiAmJgorKyAgICAgICAgdHlwZW9mIEpTT04uc3RyaW5naWZ5ID09PSAnZnVuY3Rpb24nICYmCisr
ICAgICAgICBKU09OLnN0cmluZ2lmeSgwKSA9PT0gJzAnICYmCisrICAgICAgICB0eXBlb2YgSlNP
Ti5zdHJpbmdpZnkoUHJvdG90eXBlLkspID09PSAndW5kZWZpbmVkJzsKKysKKysgIGZ1bmN0aW9u
IFR5cGUobykgeworKyAgICBzd2l0Y2gobykgeworKyAgICAgIGNhc2UgbnVsbDogcmV0dXJuIE5V
TExfVFlQRTsKKysgICAgICBjYXNlICh2b2lkIDApOiByZXR1cm4gVU5ERUZJTkVEX1RZUEU7Cisr
ICAgIH0KKysgICAgdmFyIHR5cGUgPSB0eXBlb2YgbzsKKysgICAgc3dpdGNoKHR5cGUpIHsKKysg
ICAgICBjYXNlICdib29sZWFuJzogcmV0dXJuIEJPT0xFQU5fVFlQRTsKKysgICAgICBjYXNlICdu
dW1iZXInOiAgcmV0dXJuIE5VTUJFUl9UWVBFOworKyAgICAgIGNhc2UgJ3N0cmluZyc6ICByZXR1
cm4gU1RSSU5HX1RZUEU7CisrICAgIH0KKysgICAgcmV0dXJuIE9CSkVDVF9UWVBFOworKyAgfQor
KworKyAgZnVuY3Rpb24gZXh0ZW5kKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHsKKysgICAgZm9yICh2
YXIgcHJvcGVydHkgaW4gc291cmNlKQorKyAgICAgIGRlc3RpbmF0aW9uW3Byb3BlcnR5XSA9IHNv
dXJjZVtwcm9wZXJ0eV07CisrICAgIHJldHVybiBkZXN0aW5hdGlvbjsKKysgIH0KKysKKysgIGZ1
bmN0aW9uIGluc3BlY3Qob2JqZWN0KSB7CisrICAgIHRyeSB7CisrICAgICAgaWYgKGlzVW5kZWZp
bmVkKG9iamVjdCkpIHJldHVybiAndW5kZWZpbmVkJzsKKysgICAgICBpZiAob2JqZWN0ID09PSBu
dWxsKSByZXR1cm4gJ251bGwnOworKyAgICAgIHJldHVybiBvYmplY3QuaW5zcGVjdCA/IG9iamVj
dC5pbnNwZWN0KCkgOiBTdHJpbmcob2JqZWN0KTsKKysgICAgfSBjYXRjaCAoZSkgeworKyAgICAg
IGlmIChlIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikgcmV0dXJuICcuLi4nOworKyAgICAgIHRocm93
IGU7CisrICAgIH0KKysgIH0KKysKKysgIGZ1bmN0aW9uIHRvSlNPTih2YWx1ZSkgeworKyAgICBy
ZXR1cm4gU3RyKCcnLCB7ICcnOiB2YWx1ZSB9LCBbXSk7CisrICB9CisrCisrICBmdW5jdGlvbiBT
dHIoa2V5LCBob2xkZXIsIHN0YWNrKSB7CisrICAgIHZhciB2YWx1ZSA9IGhvbGRlcltrZXldLAor
KyAgICAgICAgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKKysKKysgICAgaWYgKFR5cGUodmFsdWUpID09
PSBPQkpFQ1RfVFlQRSAmJiB0eXBlb2YgdmFsdWUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7Cisr
ICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTT04oa2V5KTsKKysgICAgfQorKworKyAgICB2YXIgX2Ns
YXNzID0gX3RvU3RyaW5nLmNhbGwodmFsdWUpOworKworKyAgICBzd2l0Y2ggKF9jbGFzcykgewor
KyAgICAgIGNhc2UgTlVNQkVSX0NMQVNTOgorKyAgICAgIGNhc2UgQk9PTEVBTl9DTEFTUzoKKysg
ICAgICBjYXNlIFNUUklOR19DTEFTUzoKKysgICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWVPZigp
OworKyAgICB9CisrCisrICAgIHN3aXRjaCAodmFsdWUpIHsKKysgICAgICBjYXNlIG51bGw6IHJl
dHVybiAnbnVsbCc7CisrICAgICAgY2FzZSB0cnVlOiByZXR1cm4gJ3RydWUnOworKyAgICAgIGNh
c2UgZmFsc2U6IHJldHVybiAnZmFsc2UnOworKyAgICB9CisrCisrICAgIHR5cGUgPSB0eXBlb2Yg
dmFsdWU7CisrICAgIHN3aXRjaCAodHlwZSkgeworKyAgICAgIGNhc2UgJ3N0cmluZyc6CisrICAg
ICAgICByZXR1cm4gdmFsdWUuaW5zcGVjdCh0cnVlKTsKKysgICAgICBjYXNlICdudW1iZXInOgor
KyAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiAnbnVsbCc7
CisrICAgICAgY2FzZSAnb2JqZWN0JzoKKysKKysgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5n
dGggPSBzdGFjay5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworKyAgICAgICAgICBpZiAoc3Rh
Y2tbaV0gPT09IHZhbHVlKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoKTsgfQorKyAgICAgICAgfQor
KyAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSk7CisrCisrICAgICAgICB2YXIgcGFydGlhbCA9IFtd
OworKyAgICAgICAgaWYgKF9jbGFzcyA9PT0gQVJSQVlfQ0xBU1MpIHsKKysgICAgICAgICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisr
ICAgICAgICAgICAgdmFyIHN0ciA9IFN0cihpLCB2YWx1ZSwgc3RhY2spOworKyAgICAgICAgICAg
IHBhcnRpYWwucHVzaCh0eXBlb2Ygc3RyID09PSAndW5kZWZpbmVkJyA/ICdudWxsJyA6IHN0cik7
CisrICAgICAgICAgIH0KKysgICAgICAgICAgcGFydGlhbCA9ICdbJyArIHBhcnRpYWwuam9pbign
LCcpICsgJ10nOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgdmFyIGtleXMgPSBPYmpl
Y3Qua2V5cyh2YWx1ZSk7CisrICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlz
Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisrICAgICAgICAgICAgdmFyIGtleSA9IGtleXNb
aV0sIHN0ciA9IFN0cihrZXksIHZhbHVlLCBzdGFjayk7CisrICAgICAgICAgICAgaWYgKHR5cGVv
ZiBzdHIgIT09ICJ1bmRlZmluZWQiKSB7CisrICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKGtl
eS5pbnNwZWN0KHRydWUpKyAnOicgKyBzdHIpOworKyAgICAgICAgICAgICB9CisrICAgICAgICAg
IH0KKysgICAgICAgICAgcGFydGlhbCA9ICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nOwor
KyAgICAgICAgfQorKyAgICAgICAgc3RhY2sucG9wKCk7CisrICAgICAgICByZXR1cm4gcGFydGlh
bDsKKysgICAgfQorKyAgfQorKworKyAgZnVuY3Rpb24gc3RyaW5naWZ5KG9iamVjdCkgeworKyAg
ICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0KTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHRv
UXVlcnlTdHJpbmcob2JqZWN0KSB7CisrICAgIHJldHVybiAkSChvYmplY3QpLnRvUXVlcnlTdHJp
bmcoKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHRvSFRNTChvYmplY3QpIHsKKysgICAgcmV0dXJu
IG9iamVjdCAmJiBvYmplY3QudG9IVE1MID8gb2JqZWN0LnRvSFRNTCgpIDogU3RyaW5nLmludGVy
cHJldChvYmplY3QpOworKyAgfQorKworKyAgZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsKKysgICAg
aWYgKFR5cGUob2JqZWN0KSAhPT0gT0JKRUNUX1RZUEUpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigp
OyB9CisrICAgIHZhciByZXN1bHRzID0gW107CisrICAgIGZvciAodmFyIHByb3BlcnR5IGluIG9i
amVjdCkgeworKyAgICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7Cisr
ICAgICAgICByZXN1bHRzLnB1c2gocHJvcGVydHkpOworKyAgICAgIH0KKysgICAgfQorKyAgICBy
ZXR1cm4gcmVzdWx0czsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHsKKysg
ICAgdmFyIHJlc3VsdHMgPSBbXTsKKysgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gb2JqZWN0KQor
KyAgICAgIHJlc3VsdHMucHVzaChvYmplY3RbcHJvcGVydHldKTsKKysgICAgcmV0dXJuIHJlc3Vs
dHM7CisrICB9CisrCisrICBmdW5jdGlvbiBjbG9uZShvYmplY3QpIHsKKysgICAgcmV0dXJuIGV4
dGVuZCh7IH0sIG9iamVjdCk7CisrICB9CisrCisrICBmdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0
KSB7CisrICAgIHJldHVybiAhIShvYmplY3QgJiYgb2JqZWN0Lm5vZGVUeXBlID09IDEpOworKyAg
fQorKworKyAgZnVuY3Rpb24gaXNBcnJheShvYmplY3QpIHsKKysgICAgcmV0dXJuIF90b1N0cmlu
Zy5jYWxsKG9iamVjdCkgPT09IEFSUkFZX0NMQVNTOworKyAgfQorKworKyAgdmFyIGhhc05hdGl2
ZUlzQXJyYXkgPSAodHlwZW9mIEFycmF5LmlzQXJyYXkgPT0gJ2Z1bmN0aW9uJykKKysgICAgJiYg
QXJyYXkuaXNBcnJheShbXSkgJiYgIUFycmF5LmlzQXJyYXkoe30pOworKworKyAgaWYgKGhhc05h
dGl2ZUlzQXJyYXkpIHsKKysgICAgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CisrICB9CisrCisr
ICBmdW5jdGlvbiBpc0hhc2gob2JqZWN0KSB7CisrICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2Vv
ZiBIYXNoOworKyAgfQorKworKyAgZnVuY3Rpb24gaXNGdW5jdGlvbihvYmplY3QpIHsKKysgICAg
cmV0dXJuIF90b1N0cmluZy5jYWxsKG9iamVjdCkgPT09IEZVTkNUSU9OX0NMQVNTOworKyAgfQor
KworKyAgZnVuY3Rpb24gaXNTdHJpbmcob2JqZWN0KSB7CisrICAgIHJldHVybiBfdG9TdHJpbmcu
Y2FsbChvYmplY3QpID09PSBTVFJJTkdfQ0xBU1M7CisrICB9CisrCisrICBmdW5jdGlvbiBpc051
bWJlcihvYmplY3QpIHsKKysgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iamVjdCkgPT09IE5V
TUJFUl9DTEFTUzsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGlzRGF0ZShvYmplY3QpIHsKKysgICAg
cmV0dXJuIF90b1N0cmluZy5jYWxsKG9iamVjdCkgPT09IERBVEVfQ0xBU1M7CisrICB9CisrCisr
ICBmdW5jdGlvbiBpc1VuZGVmaW5lZChvYmplY3QpIHsKKysgICAgcmV0dXJuIHR5cGVvZiBvYmpl
Y3QgPT09ICJ1bmRlZmluZWQiOworKyAgfQorKworKyAgZXh0ZW5kKE9iamVjdCwgeworKyAgICBl
eHRlbmQ6ICAgICAgICBleHRlbmQsCisrICAgIGluc3BlY3Q6ICAgICAgIGluc3BlY3QsCisrICAg
IHRvSlNPTjogICAgICAgIE5BVElWRV9KU09OX1NUUklOR0lGWV9TVVBQT1JUID8gc3RyaW5naWZ5
IDogdG9KU09OLAorKyAgICB0b1F1ZXJ5U3RyaW5nOiB0b1F1ZXJ5U3RyaW5nLAorKyAgICB0b0hU
TUw6ICAgICAgICB0b0hUTUwsCisrICAgIGtleXM6ICAgICAgICAgIE9iamVjdC5rZXlzIHx8IGtl
eXMsCisrICAgIHZhbHVlczogICAgICAgIHZhbHVlcywKKysgICAgY2xvbmU6ICAgICAgICAgY2xv
bmUsCisrICAgIGlzRWxlbWVudDogICAgIGlzRWxlbWVudCwKKysgICAgaXNBcnJheTogICAgICAg
aXNBcnJheSwKKysgICAgaXNIYXNoOiAgICAgICAgaXNIYXNoLAorKyAgICBpc0Z1bmN0aW9uOiAg
ICBpc0Z1bmN0aW9uLAorKyAgICBpc1N0cmluZzogICAgICBpc1N0cmluZywKKysgICAgaXNOdW1i
ZXI6ICAgICAgaXNOdW1iZXIsCisrICAgIGlzRGF0ZTogICAgICAgIGlzRGF0ZSwKKysgICAgaXNV
bmRlZmluZWQ6ICAgaXNVbmRlZmluZWQKKysgIH0pOworK30pKCk7CisrT2JqZWN0LmV4dGVuZChG
dW5jdGlvbi5wcm90b3R5cGUsIChmdW5jdGlvbigpIHsKKysgIHZhciBzbGljZSA9IEFycmF5LnBy
b3RvdHlwZS5zbGljZTsKKysKKysgIGZ1bmN0aW9uIHVwZGF0ZShhcnJheSwgYXJncykgeworKyAg
ICB2YXIgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGgsIGxlbmd0aCA9IGFyZ3MubGVuZ3RoOwor
KyAgICB3aGlsZSAobGVuZ3RoLS0pIGFycmF5W2FycmF5TGVuZ3RoICsgbGVuZ3RoXSA9IGFyZ3Nb
bGVuZ3RoXTsKKysgICAgcmV0dXJuIGFycmF5OworKyAgfQorKworKyAgZnVuY3Rpb24gbWVyZ2Uo
YXJyYXksIGFyZ3MpIHsKKysgICAgYXJyYXkgPSBzbGljZS5jYWxsKGFycmF5LCAwKTsKKysgICAg
cmV0dXJuIHVwZGF0ZShhcnJheSwgYXJncyk7CisrICB9CisrCisrICBmdW5jdGlvbiBhcmd1bWVu
dE5hbWVzKCkgeworKyAgICB2YXIgbmFtZXMgPSB0aGlzLnRvU3RyaW5nKCkubWF0Y2goL15bXHNc
KF0qZnVuY3Rpb25bXihdKlwoKFteKV0qKVwpLylbMV0KKysgICAgICAucmVwbGFjZSgvXC9cLy4q
P1tcclxuXXxcL1wqKD86LnxbXHJcbl0pKj9cKlwvL2csICcnKQorKyAgICAgIC5yZXBsYWNlKC9c
cysvZywgJycpLnNwbGl0KCcsJyk7CisrICAgIHJldHVybiBuYW1lcy5sZW5ndGggPT0gMSAmJiAh
bmFtZXNbMF0gPyBbXSA6IG5hbWVzOworKyAgfQorKworKyAgZnVuY3Rpb24gYmluZChjb250ZXh0
KSB7CisrICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMiAmJiBPYmplY3QuaXNVbmRlZmluZWQo
YXJndW1lbnRzWzBdKSkgcmV0dXJuIHRoaXM7CisrICAgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFy
Z3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CisrICAgIHJldHVybiBmdW5jdGlvbigpIHsK
KysgICAgICB2YXIgYSA9IG1lcmdlKGFyZ3MsIGFyZ3VtZW50cyk7CisrICAgICAgcmV0dXJuIF9f
bWV0aG9kLmFwcGx5KGNvbnRleHQsIGEpOworKyAgICB9CisrICB9CisrCisrICBmdW5jdGlvbiBi
aW5kQXNFdmVudExpc3RlbmVyKGNvbnRleHQpIHsKKysgICAgdmFyIF9fbWV0aG9kID0gdGhpcywg
YXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKKysgICAgcmV0dXJuIGZ1bmN0aW9uKGV2
ZW50KSB7CisrICAgICAgdmFyIGEgPSB1cGRhdGUoW2V2ZW50IHx8IHdpbmRvdy5ldmVudF0sIGFy
Z3MpOworKyAgICAgIHJldHVybiBfX21ldGhvZC5hcHBseShjb250ZXh0LCBhKTsKKysgICAgfQor
KyAgfQorKworKyAgZnVuY3Rpb24gY3VycnkoKSB7CisrICAgIGlmICghYXJndW1lbnRzLmxlbmd0
aCkgcmV0dXJuIHRoaXM7CisrICAgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3MgPSBzbGljZS5j
YWxsKGFyZ3VtZW50cywgMCk7CisrICAgIHJldHVybiBmdW5jdGlvbigpIHsKKysgICAgICB2YXIg
YSA9IG1lcmdlKGFyZ3MsIGFyZ3VtZW50cyk7CisrICAgICAgcmV0dXJuIF9fbWV0aG9kLmFwcGx5
KHRoaXMsIGEpOworKyAgICB9CisrICB9CisrCisrICBmdW5jdGlvbiBkZWxheSh0aW1lb3V0KSB7
CisrICAgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywg
MSk7CisrICAgIHRpbWVvdXQgPSB0aW1lb3V0ICogMTAwMDsKKysgICAgcmV0dXJuIHdpbmRvdy5z
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworKyAgICAgIHJldHVybiBfX21ldGhvZC5hcHBseShfX21l
dGhvZCwgYXJncyk7CisrICAgIH0sIHRpbWVvdXQpOworKyAgfQorKworKyAgZnVuY3Rpb24gZGVm
ZXIoKSB7CisrICAgIHZhciBhcmdzID0gdXBkYXRlKFswLjAxXSwgYXJndW1lbnRzKTsKKysgICAg
cmV0dXJuIHRoaXMuZGVsYXkuYXBwbHkodGhpcywgYXJncyk7CisrICB9CisrCisrICBmdW5jdGlv
biB3cmFwKHdyYXBwZXIpIHsKKysgICAgdmFyIF9fbWV0aG9kID0gdGhpczsKKysgICAgcmV0dXJu
IGZ1bmN0aW9uKCkgeworKyAgICAgIHZhciBhID0gdXBkYXRlKFtfX21ldGhvZC5iaW5kKHRoaXMp
XSwgYXJndW1lbnRzKTsKKysgICAgICByZXR1cm4gd3JhcHBlci5hcHBseSh0aGlzLCBhKTsKKysg
ICAgfQorKyAgfQorKworKyAgZnVuY3Rpb24gbWV0aG9kaXplKCkgeworKyAgICBpZiAodGhpcy5f
bWV0aG9kaXplZCkgcmV0dXJuIHRoaXMuX21ldGhvZGl6ZWQ7CisrICAgIHZhciBfX21ldGhvZCA9
IHRoaXM7CisrICAgIHJldHVybiB0aGlzLl9tZXRob2RpemVkID0gZnVuY3Rpb24oKSB7CisrICAg
ICAgdmFyIGEgPSB1cGRhdGUoW3RoaXNdLCBhcmd1bWVudHMpOworKyAgICAgIHJldHVybiBfX21l
dGhvZC5hcHBseShudWxsLCBhKTsKKysgICAgfTsKKysgIH0KKysKKysgIHJldHVybiB7CisrICAg
IGFyZ3VtZW50TmFtZXM6ICAgICAgIGFyZ3VtZW50TmFtZXMsCisrICAgIGJpbmQ6ICAgICAgICAg
ICAgICAgIGJpbmQsCisrICAgIGJpbmRBc0V2ZW50TGlzdGVuZXI6IGJpbmRBc0V2ZW50TGlzdGVu
ZXIsCisrICAgIGN1cnJ5OiAgICAgICAgICAgICAgIGN1cnJ5LAorKyAgICBkZWxheTogICAgICAg
ICAgICAgICBkZWxheSwKKysgICAgZGVmZXI6ICAgICAgICAgICAgICAgZGVmZXIsCisrICAgIHdy
YXA6ICAgICAgICAgICAgICAgIHdyYXAsCisrICAgIG1ldGhvZGl6ZTogICAgICAgICAgIG1ldGhv
ZGl6ZQorKyAgfQorK30pKCkpOworKworKworKworKyhmdW5jdGlvbihwcm90bykgeworKworKwor
KyAgZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7CisrICAgIHJldHVybiB0aGlzLmdldFVUQ0Z1bGxZ
ZWFyKCkgKyAnLScgKworKyAgICAgICh0aGlzLmdldFVUQ01vbnRoKCkgKyAxKS50b1BhZGRlZFN0
cmluZygyKSArICctJyArCisrICAgICAgdGhpcy5nZXRVVENEYXRlKCkudG9QYWRkZWRTdHJpbmco
MikgKyAnVCcgKworKyAgICAgIHRoaXMuZ2V0VVRDSG91cnMoKS50b1BhZGRlZFN0cmluZygyKSAr
ICc6JyArCisrICAgICAgdGhpcy5nZXRVVENNaW51dGVzKCkudG9QYWRkZWRTdHJpbmcoMikgKyAn
OicgKworKyAgICAgIHRoaXMuZ2V0VVRDU2Vjb25kcygpLnRvUGFkZGVkU3RyaW5nKDIpICsgJ1on
OworKyAgfQorKworKworKyAgZnVuY3Rpb24gdG9KU09OKCkgeworKyAgICByZXR1cm4gdGhpcy50
b0lTT1N0cmluZygpOworKyAgfQorKworKyAgaWYgKCFwcm90by50b0lTT1N0cmluZykgcHJvdG8u
dG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZzsKKysgIGlmICghcHJvdG8udG9KU09OKSBwcm90by50
b0pTT04gPSB0b0pTT047CisrCisrfSkoRGF0ZS5wcm90b3R5cGUpOworKworKworK1JlZ0V4cC5w
cm90b3R5cGUubWF0Y2ggPSBSZWdFeHAucHJvdG90eXBlLnRlc3Q7CisrCisrUmVnRXhwLmVzY2Fw
ZSA9IGZ1bmN0aW9uKHN0cikgeworKyAgcmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UoLyhbLior
P149IToke30oKXxbXF1cL1xcXSkvZywgJ1xcJDEnKTsKKyt9OworK3ZhciBQZXJpb2RpY2FsRXhl
Y3V0ZXIgPSBDbGFzcy5jcmVhdGUoeworKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY2FsbGJhY2ss
IGZyZXF1ZW5jeSkgeworKyAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CisrICAgIHRoaXMu
ZnJlcXVlbmN5ID0gZnJlcXVlbmN5OworKyAgICB0aGlzLmN1cnJlbnRseUV4ZWN1dGluZyA9IGZh
bHNlOworKworKyAgICB0aGlzLnJlZ2lzdGVyQ2FsbGJhY2soKTsKKysgIH0sCisrCisrICByZWdp
c3RlckNhbGxiYWNrOiBmdW5jdGlvbigpIHsKKysgICAgdGhpcy50aW1lciA9IHNldEludGVydmFs
KHRoaXMub25UaW1lckV2ZW50LmJpbmQodGhpcyksIHRoaXMuZnJlcXVlbmN5ICogMTAwMCk7Cisr
ICB9LAorKworKyAgZXhlY3V0ZTogZnVuY3Rpb24oKSB7CisrICAgIHRoaXMuY2FsbGJhY2sodGhp
cyk7CisrICB9LAorKworKyAgc3RvcDogZnVuY3Rpb24oKSB7CisrICAgIGlmICghdGhpcy50aW1l
cikgcmV0dXJuOworKyAgICBjbGVhckludGVydmFsKHRoaXMudGltZXIpOworKyAgICB0aGlzLnRp
bWVyID0gbnVsbDsKKysgIH0sCisrCisrICBvblRpbWVyRXZlbnQ6IGZ1bmN0aW9uKCkgeworKyAg
ICBpZiAoIXRoaXMuY3VycmVudGx5RXhlY3V0aW5nKSB7CisrICAgICAgdHJ5IHsKKysgICAgICAg
IHRoaXMuY3VycmVudGx5RXhlY3V0aW5nID0gdHJ1ZTsKKysgICAgICAgIHRoaXMuZXhlY3V0ZSgp
OworKyAgICAgICAgdGhpcy5jdXJyZW50bHlFeGVjdXRpbmcgPSBmYWxzZTsKKysgICAgICB9IGNh
dGNoKGUpIHsKKysgICAgICAgIHRoaXMuY3VycmVudGx5RXhlY3V0aW5nID0gZmFsc2U7CisrICAg
ICAgICB0aHJvdyBlOworKyAgICAgIH0KKysgICAgfQorKyAgfQorK30pOworK09iamVjdC5leHRl
bmQoU3RyaW5nLCB7CisrICBpbnRlcnByZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CisrICAgIHJldHVy
biB2YWx1ZSA9PSBudWxsID8gJycgOiBTdHJpbmcodmFsdWUpOworKyAgfSwKKysgIHNwZWNpYWxD
aGFyOiB7CisrICAgICdcYic6ICdcXGInLAorKyAgICAnXHQnOiAnXFx0JywKKysgICAgJ1xuJzog
J1xcbicsCisrICAgICdcZic6ICdcXGYnLAorKyAgICAnXHInOiAnXFxyJywKKysgICAgJ1xcJzog
J1xcXFwnCisrICB9CisrfSk7CisrCisrT2JqZWN0LmV4dGVuZChTdHJpbmcucHJvdG90eXBlLCAo
ZnVuY3Rpb24oKSB7CisrICB2YXIgTkFUSVZFX0pTT05fUEFSU0VfU1VQUE9SVCA9IHdpbmRvdy5K
U09OICYmCisrICAgIHR5cGVvZiBKU09OLnBhcnNlID09PSAnZnVuY3Rpb24nICYmCisrICAgIEpT
T04ucGFyc2UoJ3sidGVzdCI6IHRydWV9JykudGVzdDsKKysKKysgIGZ1bmN0aW9uIHByZXBhcmVS
ZXBsYWNlbWVudChyZXBsYWNlbWVudCkgeworKyAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24ocmVw
bGFjZW1lbnQpKSByZXR1cm4gcmVwbGFjZW1lbnQ7CisrICAgIHZhciB0ZW1wbGF0ZSA9IG5ldyBU
ZW1wbGF0ZShyZXBsYWNlbWVudCk7CisrICAgIHJldHVybiBmdW5jdGlvbihtYXRjaCkgeyByZXR1
cm4gdGVtcGxhdGUuZXZhbHVhdGUobWF0Y2gpIH07CisrICB9CisrCisrICBmdW5jdGlvbiBnc3Vi
KHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7CisrICAgIHZhciByZXN1bHQgPSAnJywgc291cmNlID0g
dGhpcywgbWF0Y2g7CisrICAgIHJlcGxhY2VtZW50ID0gcHJlcGFyZVJlcGxhY2VtZW50KHJlcGxh
Y2VtZW50KTsKKysKKysgICAgaWYgKE9iamVjdC5pc1N0cmluZyhwYXR0ZXJuKSkKKysgICAgICBw
YXR0ZXJuID0gUmVnRXhwLmVzY2FwZShwYXR0ZXJuKTsKKysKKysgICAgaWYgKCEocGF0dGVybi5s
ZW5ndGggfHwgcGF0dGVybi5zb3VyY2UpKSB7CisrICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNl
bWVudCgnJyk7CisrICAgICAgcmV0dXJuIHJlcGxhY2VtZW50ICsgc291cmNlLnNwbGl0KCcnKS5q
b2luKHJlcGxhY2VtZW50KSArIHJlcGxhY2VtZW50OworKyAgICB9CisrCisrICAgIHdoaWxlIChz
b3VyY2UubGVuZ3RoID4gMCkgeworKyAgICAgIGlmIChtYXRjaCA9IHNvdXJjZS5tYXRjaChwYXR0
ZXJuKSkgeworKyAgICAgICAgcmVzdWx0ICs9IHNvdXJjZS5zbGljZSgwLCBtYXRjaC5pbmRleCk7
CisrICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmludGVycHJldChyZXBsYWNlbWVudChtYXRjaCkp
OworKyAgICAgICAgc291cmNlICA9IHNvdXJjZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBd
Lmxlbmd0aCk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHJlc3VsdCArPSBzb3VyY2UsIHNv
dXJjZSA9ICcnOworKyAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gcmVzdWx0OworKyAgfQor
KworKyAgZnVuY3Rpb24gc3ViKHBhdHRlcm4sIHJlcGxhY2VtZW50LCBjb3VudCkgeworKyAgICBy
ZXBsYWNlbWVudCA9IHByZXBhcmVSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7CisrICAgIGNvdW50
ID0gT2JqZWN0LmlzVW5kZWZpbmVkKGNvdW50KSA/IDEgOiBjb3VudDsKKysKKysgICAgcmV0dXJu
IHRoaXMuZ3N1YihwYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCkgeworKyAgICAgIGlmICgtLWNvdW50
IDwgMCkgcmV0dXJuIG1hdGNoWzBdOworKyAgICAgIHJldHVybiByZXBsYWNlbWVudChtYXRjaCk7
CisrICAgIH0pOworKyAgfQorKworKyAgZnVuY3Rpb24gc2NhbihwYXR0ZXJuLCBpdGVyYXRvcikg
eworKyAgICB0aGlzLmdzdWIocGF0dGVybiwgaXRlcmF0b3IpOworKyAgICByZXR1cm4gU3RyaW5n
KHRoaXMpOworKyAgfQorKworKyAgZnVuY3Rpb24gdHJ1bmNhdGUobGVuZ3RoLCB0cnVuY2F0aW9u
KSB7CisrICAgIGxlbmd0aCA9IGxlbmd0aCB8fCAzMDsKKysgICAgdHJ1bmNhdGlvbiA9IE9iamVj
dC5pc1VuZGVmaW5lZCh0cnVuY2F0aW9uKSA/ICcuLi4nIDogdHJ1bmNhdGlvbjsKKysgICAgcmV0
dXJuIHRoaXMubGVuZ3RoID4gbGVuZ3RoID8KKysgICAgICB0aGlzLnNsaWNlKDAsIGxlbmd0aCAt
IHRydW5jYXRpb24ubGVuZ3RoKSArIHRydW5jYXRpb24gOiBTdHJpbmcodGhpcyk7CisrICB9Cisr
CisrICBmdW5jdGlvbiBzdHJpcCgpIHsKKysgICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvXlxzKy8s
ICcnKS5yZXBsYWNlKC9ccyskLywgJycpOworKyAgfQorKworKyAgZnVuY3Rpb24gc3RyaXBUYWdz
KCkgeworKyAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC88XHcrKFxzKygiW14iXSoifCdbXiddKid8
W14+XSkrKT8+fDxcL1x3Kz4vZ2ksICcnKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHN0cmlwU2Ny
aXB0cygpIHsKKysgICAgcmV0dXJuIHRoaXMucmVwbGFjZShuZXcgUmVnRXhwKFByb3RvdHlwZS5T
Y3JpcHRGcmFnbWVudCwgJ2ltZycpLCAnJyk7CisrICB9CisrCisrICBmdW5jdGlvbiBleHRyYWN0
U2NyaXB0cygpIHsKKysgICAgdmFyIG1hdGNoQWxsID0gbmV3IFJlZ0V4cChQcm90b3R5cGUuU2Ny
aXB0RnJhZ21lbnQsICdpbWcnKSwKKysgICAgICAgIG1hdGNoT25lID0gbmV3IFJlZ0V4cChQcm90
b3R5cGUuU2NyaXB0RnJhZ21lbnQsICdpbScpOworKyAgICByZXR1cm4gKHRoaXMubWF0Y2gobWF0
Y2hBbGwpIHx8IFtdKS5tYXAoZnVuY3Rpb24oc2NyaXB0VGFnKSB7CisrICAgICAgcmV0dXJuIChz
Y3JpcHRUYWcubWF0Y2gobWF0Y2hPbmUpIHx8IFsnJywgJyddKVsxXTsKKysgICAgfSk7CisrICB9
CisrCisrICBmdW5jdGlvbiBldmFsU2NyaXB0cygpIHsKKysgICAgcmV0dXJuIHRoaXMuZXh0cmFj
dFNjcmlwdHMoKS5tYXAoZnVuY3Rpb24oc2NyaXB0KSB7IHJldHVybiBldmFsKHNjcmlwdCkgfSk7
CisrICB9CisrCisrICBmdW5jdGlvbiBlc2NhcGVIVE1MKCkgeworKyAgICByZXR1cm4gdGhpcy5y
ZXBsYWNlKC8mL2csJyZhbXA7JykucmVwbGFjZSgvPC9nLCcmbHQ7JykucmVwbGFjZSgvPi9nLCcm
Z3Q7Jyk7CisrICB9CisrCisrICBmdW5jdGlvbiB1bmVzY2FwZUhUTUwoKSB7CisrICAgIHJldHVy
biB0aGlzLnN0cmlwVGFncygpLnJlcGxhY2UoLyZsdDsvZywnPCcpLnJlcGxhY2UoLyZndDsvZywn
PicpLnJlcGxhY2UoLyZhbXA7L2csJyYnKTsKKysgIH0KKysKKysKKysgIGZ1bmN0aW9uIHRvUXVl
cnlQYXJhbXMoc2VwYXJhdG9yKSB7CisrICAgIHZhciBtYXRjaCA9IHRoaXMuc3RyaXAoKS5tYXRj
aCgvKFtePyNdKikoIy4qKT8kLyk7CisrICAgIGlmICghbWF0Y2gpIHJldHVybiB7IH07CisrCisr
ICAgIHJldHVybiBtYXRjaFsxXS5zcGxpdChzZXBhcmF0b3IgfHwgJyYnKS5pbmplY3QoeyB9LCBm
dW5jdGlvbihoYXNoLCBwYWlyKSB7CisrICAgICAgaWYgKChwYWlyID0gcGFpci5zcGxpdCgnPScp
KVswXSkgeworKyAgICAgICAgdmFyIGtleSA9IGRlY29kZVVSSUNvbXBvbmVudChwYWlyLnNoaWZ0
KCkpLAorKyAgICAgICAgICAgIHZhbHVlID0gcGFpci5sZW5ndGggPiAxID8gcGFpci5qb2luKCc9
JykgOiBwYWlyWzBdOworKworKyAgICAgICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCkgdmFsdWUg
PSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpOworKworKyAgICAgICAgaWYgKGtleSBpbiBoYXNo
KSB7CisrICAgICAgICAgIGlmICghT2JqZWN0LmlzQXJyYXkoaGFzaFtrZXldKSkgaGFzaFtrZXld
ID0gW2hhc2hba2V5XV07CisrICAgICAgICAgIGhhc2hba2V5XS5wdXNoKHZhbHVlKTsKKysgICAg
ICAgIH0KKysgICAgICAgIGVsc2UgaGFzaFtrZXldID0gdmFsdWU7CisrICAgICAgfQorKyAgICAg
IHJldHVybiBoYXNoOworKyAgICB9KTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7
CisrICAgIHJldHVybiB0aGlzLnNwbGl0KCcnKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHN1Y2Mo
KSB7CisrICAgIHJldHVybiB0aGlzLnNsaWNlKDAsIHRoaXMubGVuZ3RoIC0gMSkgKworKyAgICAg
IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5jaGFyQ29kZUF0KHRoaXMubGVuZ3RoIC0gMSkgKyAx
KTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHRpbWVzKGNvdW50KSB7CisrICAgIHJldHVybiBjb3Vu
dCA8IDEgPyAnJyA6IG5ldyBBcnJheShjb3VudCArIDEpLmpvaW4odGhpcyk7CisrICB9CisrCisr
ICBmdW5jdGlvbiBjYW1lbGl6ZSgpIHsKKysgICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvLSsoLik/
L2csIGZ1bmN0aW9uKG1hdGNoLCBjaHIpIHsKKysgICAgICByZXR1cm4gY2hyID8gY2hyLnRvVXBw
ZXJDYXNlKCkgOiAnJzsKKysgICAgfSk7CisrICB9CisrCisrICBmdW5jdGlvbiBjYXBpdGFsaXpl
KCkgeworKyAgICByZXR1cm4gdGhpcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRoaXMuc3Vi
c3RyaW5nKDEpLnRvTG93ZXJDYXNlKCk7CisrICB9CisrCisrICBmdW5jdGlvbiB1bmRlcnNjb3Jl
KCkgeworKyAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC86Oi9nLCAnLycpCisrICAgICAgICAgICAg
ICAgLnJlcGxhY2UoLyhbQS1aXSspKFtBLVpdW2Etel0pL2csICckMV8kMicpCisrICAgICAgICAg
ICAgICAgLnJlcGxhY2UoLyhbYS16XGRdKShbQS1aXSkvZywgJyQxXyQyJykKKysgICAgICAgICAg
ICAgICAucmVwbGFjZSgvLS9nLCAnXycpCisrICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKCk7
CisrICB9CisrCisrICBmdW5jdGlvbiBkYXNoZXJpemUoKSB7CisrICAgIHJldHVybiB0aGlzLnJl
cGxhY2UoL18vZywgJy0nKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGluc3BlY3QodXNlRG91Ymxl
UXVvdGVzKSB7CisrICAgIHZhciBlc2NhcGVkU3RyaW5nID0gdGhpcy5yZXBsYWNlKC9bXHgwMC1c
eDFmXFxdL2csIGZ1bmN0aW9uKGNoYXJhY3RlcikgeworKyAgICAgIGlmIChjaGFyYWN0ZXIgaW4g
U3RyaW5nLnNwZWNpYWxDaGFyKSB7CisrICAgICAgICByZXR1cm4gU3RyaW5nLnNwZWNpYWxDaGFy
W2NoYXJhY3Rlcl07CisrICAgICAgfQorKyAgICAgIHJldHVybiAnXFx1MDAnICsgY2hhcmFjdGVy
LmNoYXJDb2RlQXQoKS50b1BhZGRlZFN0cmluZygyLCAxNik7CisrICAgIH0pOworKyAgICBpZiAo
dXNlRG91YmxlUXVvdGVzKSByZXR1cm4gJyInICsgZXNjYXBlZFN0cmluZy5yZXBsYWNlKC8iL2cs
ICdcXCInKSArICciJzsKKysgICAgcmV0dXJuICInIiArIGVzY2FwZWRTdHJpbmcucmVwbGFjZSgv
Jy9nLCAnXFxcJycpICsgIiciOworKyAgfQorKworKyAgZnVuY3Rpb24gdW5maWx0ZXJKU09OKGZp
bHRlcikgeworKyAgICByZXR1cm4gdGhpcy5yZXBsYWNlKGZpbHRlciB8fCBQcm90b3R5cGUuSlNP
TkZpbHRlciwgJyQxJyk7CisrICB9CisrCisrICBmdW5jdGlvbiBpc0pTT04oKSB7CisrICAgIHZh
ciBzdHIgPSB0aGlzOworKyAgICBpZiAoc3RyLmJsYW5rKCkpIHJldHVybiBmYWxzZTsKKysgICAg
c3RyID0gc3RyLnJlcGxhY2UoL1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywg
J0AnKTsKKysgICAgc3RyID0gc3RyLnJlcGxhY2UoLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxu
dWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLCAnXScpOworKyAgICBzdHIg
PSBzdHIucmVwbGFjZSgvKD86Xnw6fCwpKD86XHMqXFspKy9nLCAnJyk7CisrICAgIHJldHVybiAo
L15bXF0sOnt9XHNdKiQvKS50ZXN0KHN0cik7CisrICB9CisrCisrICBmdW5jdGlvbiBldmFsSlNP
TihzYW5pdGl6ZSkgeworKyAgICB2YXIganNvbiA9IHRoaXMudW5maWx0ZXJKU09OKCksCisrICAg
ICAgICBjeCA9IC9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1
MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZd
L2c7CisrICAgIGlmIChjeC50ZXN0KGpzb24pKSB7CisrICAgICAganNvbiA9IGpzb24ucmVwbGFj
ZShjeCwgZnVuY3Rpb24gKGEpIHsKKysgICAgICAgIHJldHVybiAnXFx1JyArICgnMDAwMCcgKyBh
LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7CisrICAgICAgfSk7CisrICAg
IH0KKysgICAgdHJ5IHsKKysgICAgICBpZiAoIXNhbml0aXplIHx8IGpzb24uaXNKU09OKCkpIHJl
dHVybiBldmFsKCcoJyArIGpzb24gKyAnKScpOworKyAgICB9IGNhdGNoIChlKSB7IH0KKysgICAg
dGhyb3cgbmV3IFN5bnRheEVycm9yKCdCYWRseSBmb3JtZWQgSlNPTiBzdHJpbmc6ICcgKyB0aGlz
Lmluc3BlY3QoKSk7CisrICB9CisrCisrICBmdW5jdGlvbiBwYXJzZUpTT04oKSB7CisrICAgIHZh
ciBqc29uID0gdGhpcy51bmZpbHRlckpTT04oKTsKKysgICAgcmV0dXJuIEpTT04ucGFyc2UoanNv
bik7CisrICB9CisrCisrICBmdW5jdGlvbiBpbmNsdWRlKHBhdHRlcm4pIHsKKysgICAgcmV0dXJu
IHRoaXMuaW5kZXhPZihwYXR0ZXJuKSA+IC0xOworKyAgfQorKworKyAgZnVuY3Rpb24gc3RhcnRz
V2l0aChwYXR0ZXJuKSB7CisrICAgIHJldHVybiB0aGlzLmxhc3RJbmRleE9mKHBhdHRlcm4sIDAp
ID09PSAwOworKyAgfQorKworKyAgZnVuY3Rpb24gZW5kc1dpdGgocGF0dGVybikgeworKyAgICB2
YXIgZCA9IHRoaXMubGVuZ3RoIC0gcGF0dGVybi5sZW5ndGg7CisrICAgIHJldHVybiBkID49IDAg
JiYgdGhpcy5pbmRleE9mKHBhdHRlcm4sIGQpID09PSBkOworKyAgfQorKworKyAgZnVuY3Rpb24g
ZW1wdHkoKSB7CisrICAgIHJldHVybiB0aGlzID09ICcnOworKyAgfQorKworKyAgZnVuY3Rpb24g
YmxhbmsoKSB7CisrICAgIHJldHVybiAvXlxzKiQvLnRlc3QodGhpcyk7CisrICB9CisrCisrICBm
dW5jdGlvbiBpbnRlcnBvbGF0ZShvYmplY3QsIHBhdHRlcm4pIHsKKysgICAgcmV0dXJuIG5ldyBU
ZW1wbGF0ZSh0aGlzLCBwYXR0ZXJuKS5ldmFsdWF0ZShvYmplY3QpOworKyAgfQorKworKyAgcmV0
dXJuIHsKKysgICAgZ3N1YjogICAgICAgICAgIGdzdWIsCisrICAgIHN1YjogICAgICAgICAgICBz
dWIsCisrICAgIHNjYW46ICAgICAgICAgICBzY2FuLAorKyAgICB0cnVuY2F0ZTogICAgICAgdHJ1
bmNhdGUsCisrICAgIHN0cmlwOiAgICAgICAgICBTdHJpbmcucHJvdG90eXBlLnRyaW0gfHwgc3Ry
aXAsCisrICAgIHN0cmlwVGFnczogICAgICBzdHJpcFRhZ3MsCisrICAgIHN0cmlwU2NyaXB0czog
ICBzdHJpcFNjcmlwdHMsCisrICAgIGV4dHJhY3RTY3JpcHRzOiBleHRyYWN0U2NyaXB0cywKKysg
ICAgZXZhbFNjcmlwdHM6ICAgIGV2YWxTY3JpcHRzLAorKyAgICBlc2NhcGVIVE1MOiAgICAgZXNj
YXBlSFRNTCwKKysgICAgdW5lc2NhcGVIVE1MOiAgIHVuZXNjYXBlSFRNTCwKKysgICAgdG9RdWVy
eVBhcmFtczogIHRvUXVlcnlQYXJhbXMsCisrICAgIHBhcnNlUXVlcnk6ICAgICB0b1F1ZXJ5UGFy
YW1zLAorKyAgICB0b0FycmF5OiAgICAgICAgdG9BcnJheSwKKysgICAgc3VjYzogICAgICAgICAg
IHN1Y2MsCisrICAgIHRpbWVzOiAgICAgICAgICB0aW1lcywKKysgICAgY2FtZWxpemU6ICAgICAg
IGNhbWVsaXplLAorKyAgICBjYXBpdGFsaXplOiAgICAgY2FwaXRhbGl6ZSwKKysgICAgdW5kZXJz
Y29yZTogICAgIHVuZGVyc2NvcmUsCisrICAgIGRhc2hlcml6ZTogICAgICBkYXNoZXJpemUsCisr
ICAgIGluc3BlY3Q6ICAgICAgICBpbnNwZWN0LAorKyAgICB1bmZpbHRlckpTT046ICAgdW5maWx0
ZXJKU09OLAorKyAgICBpc0pTT046ICAgICAgICAgaXNKU09OLAorKyAgICBldmFsSlNPTjogICAg
ICAgTkFUSVZFX0pTT05fUEFSU0VfU1VQUE9SVCA/IHBhcnNlSlNPTiA6IGV2YWxKU09OLAorKyAg
ICBpbmNsdWRlOiAgICAgICAgaW5jbHVkZSwKKysgICAgc3RhcnRzV2l0aDogICAgIHN0YXJ0c1dp
dGgsCisrICAgIGVuZHNXaXRoOiAgICAgICBlbmRzV2l0aCwKKysgICAgZW1wdHk6ICAgICAgICAg
IGVtcHR5LAorKyAgICBibGFuazogICAgICAgICAgYmxhbmssCisrICAgIGludGVycG9sYXRlOiAg
ICBpbnRlcnBvbGF0ZQorKyAgfTsKKyt9KSgpKTsKKysKKyt2YXIgVGVtcGxhdGUgPSBDbGFzcy5j
cmVhdGUoeworKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24odGVtcGxhdGUsIHBhdHRlcm4pIHsKKysg
ICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlLnRvU3RyaW5nKCk7CisrICAgIHRoaXMucGF0dGVy
biA9IHBhdHRlcm4gfHwgVGVtcGxhdGUuUGF0dGVybjsKKysgIH0sCisrCisrICBldmFsdWF0ZTog
ZnVuY3Rpb24ob2JqZWN0KSB7CisrICAgIGlmIChvYmplY3QgJiYgT2JqZWN0LmlzRnVuY3Rpb24o
b2JqZWN0LnRvVGVtcGxhdGVSZXBsYWNlbWVudHMpKQorKyAgICAgIG9iamVjdCA9IG9iamVjdC50
b1RlbXBsYXRlUmVwbGFjZW1lbnRzKCk7CisrCisrICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmdz
dWIodGhpcy5wYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCkgeworKyAgICAgIGlmIChvYmplY3QgPT0g
bnVsbCkgcmV0dXJuIChtYXRjaFsxXSArICcnKTsKKysKKysgICAgICB2YXIgYmVmb3JlID0gbWF0
Y2hbMV0gfHwgJyc7CisrICAgICAgaWYgKGJlZm9yZSA9PSAnXFwnKSByZXR1cm4gbWF0Y2hbMl07
CisrCisrICAgICAgdmFyIGN0eCA9IG9iamVjdCwgZXhwciA9IG1hdGNoWzNdLAorKyAgICAgICAg
ICBwYXR0ZXJuID0gL14oW14uW10rfFxbKCg/Oi4qP1teXFxdKT8pXF0pKFwufFxbfCQpLzsKKysK
KysgICAgICBtYXRjaCA9IHBhdHRlcm4uZXhlYyhleHByKTsKKysgICAgICBpZiAobWF0Y2ggPT0g
bnVsbCkgcmV0dXJuIGJlZm9yZTsKKysKKysgICAgICB3aGlsZSAobWF0Y2ggIT0gbnVsbCkgewor
KyAgICAgICAgdmFyIGNvbXAgPSBtYXRjaFsxXS5zdGFydHNXaXRoKCdbJykgPyBtYXRjaFsyXS5y
ZXBsYWNlKC9cXFxcXS9nLCAnXScpIDogbWF0Y2hbMV07CisrICAgICAgICBjdHggPSBjdHhbY29t
cF07CisrICAgICAgICBpZiAobnVsbCA9PSBjdHggfHwgJycgPT0gbWF0Y2hbM10pIGJyZWFrOwor
KyAgICAgICAgZXhwciA9IGV4cHIuc3Vic3RyaW5nKCdbJyA9PSBtYXRjaFszXSA/IG1hdGNoWzFd
Lmxlbmd0aCA6IG1hdGNoWzBdLmxlbmd0aCk7CisrICAgICAgICBtYXRjaCA9IHBhdHRlcm4uZXhl
YyhleHByKTsKKysgICAgICB9CisrCisrICAgICAgcmV0dXJuIGJlZm9yZSArIFN0cmluZy5pbnRl
cnByZXQoY3R4KTsKKysgICAgfSk7CisrICB9CisrfSk7CisrVGVtcGxhdGUuUGF0dGVybiA9IC8o
XnwufFxyfFxuKSgjXHsoLio/KVx9KS87CisrCisrdmFyICRicmVhayA9IHsgfTsKKysKKyt2YXIg
RW51bWVyYWJsZSA9IChmdW5jdGlvbigpIHsKKysgIGZ1bmN0aW9uIGVhY2goaXRlcmF0b3IsIGNv
bnRleHQpIHsKKysgICAgdmFyIGluZGV4ID0gMDsKKysgICAgdHJ5IHsKKysgICAgICB0aGlzLl9l
YWNoKGZ1bmN0aW9uKHZhbHVlKSB7CisrICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZh
bHVlLCBpbmRleCsrKTsKKysgICAgICB9KTsKKysgICAgfSBjYXRjaCAoZSkgeworKyAgICAgIGlm
IChlICE9ICRicmVhaykgdGhyb3cgZTsKKysgICAgfQorKyAgICByZXR1cm4gdGhpczsKKysgIH0K
KysKKysgIGZ1bmN0aW9uIGVhY2hTbGljZShudW1iZXIsIGl0ZXJhdG9yLCBjb250ZXh0KSB7Cisr
ICAgIHZhciBpbmRleCA9IC1udW1iZXIsIHNsaWNlcyA9IFtdLCBhcnJheSA9IHRoaXMudG9BcnJh
eSgpOworKyAgICBpZiAobnVtYmVyIDwgMSkgcmV0dXJuIGFycmF5OworKyAgICB3aGlsZSAoKGlu
ZGV4ICs9IG51bWJlcikgPCBhcnJheS5sZW5ndGgpCisrICAgICAgc2xpY2VzLnB1c2goYXJyYXku
c2xpY2UoaW5kZXgsIGluZGV4K251bWJlcikpOworKyAgICByZXR1cm4gc2xpY2VzLmNvbGxlY3Qo
aXRlcmF0b3IsIGNvbnRleHQpOworKyAgfQorKworKyAgZnVuY3Rpb24gYWxsKGl0ZXJhdG9yLCBj
b250ZXh0KSB7CisrICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgfHwgUHJvdG90eXBlLks7CisrICAg
IHZhciByZXN1bHQgPSB0cnVlOworKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4
KSB7CisrICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICEhaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2
YWx1ZSwgaW5kZXgpOworKyAgICAgIGlmICghcmVzdWx0KSB0aHJvdyAkYnJlYWs7CisrICAgIH0p
OworKyAgICByZXR1cm4gcmVzdWx0OworKyAgfQorKworKyAgZnVuY3Rpb24gYW55KGl0ZXJhdG9y
LCBjb250ZXh0KSB7CisrICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgfHwgUHJvdG90eXBlLks7Cisr
ICAgIHZhciByZXN1bHQgPSBmYWxzZTsKKysgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBp
bmRleCkgeworKyAgICAgIGlmIChyZXN1bHQgPSAhIWl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFs
dWUsIGluZGV4KSkKKysgICAgICAgIHRocm93ICRicmVhazsKKysgICAgfSk7CisrICAgIHJldHVy
biByZXN1bHQ7CisrICB9CisrCisrICBmdW5jdGlvbiBjb2xsZWN0KGl0ZXJhdG9yLCBjb250ZXh0
KSB7CisrICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgfHwgUHJvdG90eXBlLks7CisrICAgIHZhciBy
ZXN1bHRzID0gW107CisrICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKysg
ICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgpKTsK
KysgICAgfSk7CisrICAgIHJldHVybiByZXN1bHRzOworKyAgfQorKworKyAgZnVuY3Rpb24gZGV0
ZWN0KGl0ZXJhdG9yLCBjb250ZXh0KSB7CisrICAgIHZhciByZXN1bHQ7CisrICAgIHRoaXMuZWFj
aChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKysgICAgICBpZiAoaXRlcmF0b3IuY2FsbChjb250
ZXh0LCB2YWx1ZSwgaW5kZXgpKSB7CisrICAgICAgICByZXN1bHQgPSB2YWx1ZTsKKysgICAgICAg
IHRocm93ICRicmVhazsKKysgICAgICB9CisrICAgIH0pOworKyAgICByZXR1cm4gcmVzdWx0Owor
KyAgfQorKworKyAgZnVuY3Rpb24gZmluZEFsbChpdGVyYXRvciwgY29udGV4dCkgeworKyAgICB2
YXIgcmVzdWx0cyA9IFtdOworKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7
CisrICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KSkKKysgICAg
ICAgIHJlc3VsdHMucHVzaCh2YWx1ZSk7CisrICAgIH0pOworKyAgICByZXR1cm4gcmVzdWx0czsK
KysgIH0KKysKKysgIGZ1bmN0aW9uIGdyZXAoZmlsdGVyLCBpdGVyYXRvciwgY29udGV4dCkgewor
KyAgICBpdGVyYXRvciA9IGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LOworKyAgICB2YXIgcmVzdWx0
cyA9IFtdOworKworKyAgICBpZiAoT2JqZWN0LmlzU3RyaW5nKGZpbHRlcikpCisrICAgICAgZmls
dGVyID0gbmV3IFJlZ0V4cChSZWdFeHAuZXNjYXBlKGZpbHRlcikpOworKworKyAgICB0aGlzLmVh
Y2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisrICAgICAgaWYgKGZpbHRlci5tYXRjaCh2YWx1
ZSkpCisrICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwg
aW5kZXgpKTsKKysgICAgfSk7CisrICAgIHJldHVybiByZXN1bHRzOworKyAgfQorKworKyAgZnVu
Y3Rpb24gaW5jbHVkZShvYmplY3QpIHsKKysgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHRoaXMu
aW5kZXhPZikpCisrICAgICAgaWYgKHRoaXMuaW5kZXhPZihvYmplY3QpICE9IC0xKSByZXR1cm4g
dHJ1ZTsKKysKKysgICAgdmFyIGZvdW5kID0gZmFsc2U7CisrICAgIHRoaXMuZWFjaChmdW5jdGlv
bih2YWx1ZSkgeworKyAgICAgIGlmICh2YWx1ZSA9PSBvYmplY3QpIHsKKysgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKKysgICAgICAgIHRocm93ICRicmVhazsKKysgICAgICB9CisrICAgIH0pOworKyAg
ICByZXR1cm4gZm91bmQ7CisrICB9CisrCisrICBmdW5jdGlvbiBpbkdyb3Vwc09mKG51bWJlciwg
ZmlsbFdpdGgpIHsKKysgICAgZmlsbFdpdGggPSBPYmplY3QuaXNVbmRlZmluZWQoZmlsbFdpdGgp
ID8gbnVsbCA6IGZpbGxXaXRoOworKyAgICByZXR1cm4gdGhpcy5lYWNoU2xpY2UobnVtYmVyLCBm
dW5jdGlvbihzbGljZSkgeworKyAgICAgIHdoaWxlKHNsaWNlLmxlbmd0aCA8IG51bWJlcikgc2xp
Y2UucHVzaChmaWxsV2l0aCk7CisrICAgICAgcmV0dXJuIHNsaWNlOworKyAgICB9KTsKKysgIH0K
KysKKysgIGZ1bmN0aW9uIGluamVjdChtZW1vLCBpdGVyYXRvciwgY29udGV4dCkgeworKyAgICB0
aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisrICAgICAgbWVtbyA9IGl0ZXJhdG9y
LmNhbGwoY29udGV4dCwgbWVtbywgdmFsdWUsIGluZGV4KTsKKysgICAgfSk7CisrICAgIHJldHVy
biBtZW1vOworKyAgfQorKworKyAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCkgeworKyAgICB2YXIg
YXJncyA9ICRBKGFyZ3VtZW50cykuc2xpY2UoMSk7CisrICAgIHJldHVybiB0aGlzLm1hcChmdW5j
dGlvbih2YWx1ZSkgeworKyAgICAgIHJldHVybiB2YWx1ZVttZXRob2RdLmFwcGx5KHZhbHVlLCBh
cmdzKTsKKysgICAgfSk7CisrICB9CisrCisrICBmdW5jdGlvbiBtYXgoaXRlcmF0b3IsIGNvbnRl
eHQpIHsKKysgICAgaXRlcmF0b3IgPSBpdGVyYXRvciB8fCBQcm90b3R5cGUuSzsKKysgICAgdmFy
IHJlc3VsdDsKKysgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgeworKyAgICAg
IHZhbHVlID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgpOworKyAgICAgIGlm
IChyZXN1bHQgPT0gbnVsbCB8fCB2YWx1ZSA+PSByZXN1bHQpCisrICAgICAgICByZXN1bHQgPSB2
YWx1ZTsKKysgICAgfSk7CisrICAgIHJldHVybiByZXN1bHQ7CisrICB9CisrCisrICBmdW5jdGlv
biBtaW4oaXRlcmF0b3IsIGNvbnRleHQpIHsKKysgICAgaXRlcmF0b3IgPSBpdGVyYXRvciB8fCBQ
cm90b3R5cGUuSzsKKysgICAgdmFyIHJlc3VsdDsKKysgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCkgeworKyAgICAgIHZhbHVlID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1
ZSwgaW5kZXgpOworKyAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCB8fCB2YWx1ZSA8IHJlc3VsdCkK
KysgICAgICAgIHJlc3VsdCA9IHZhbHVlOworKyAgICB9KTsKKysgICAgcmV0dXJuIHJlc3VsdDsK
KysgIH0KKysKKysgIGZ1bmN0aW9uIHBhcnRpdGlvbihpdGVyYXRvciwgY29udGV4dCkgeworKyAg
ICBpdGVyYXRvciA9IGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LOworKyAgICB2YXIgdHJ1ZXMgPSBb
XSwgZmFsc2VzID0gW107CisrICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsK
KysgICAgICAoaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgpID8KKysgICAgICAg
IHRydWVzIDogZmFsc2VzKS5wdXNoKHZhbHVlKTsKKysgICAgfSk7CisrICAgIHJldHVybiBbdHJ1
ZXMsIGZhbHNlc107CisrICB9CisrCisrICBmdW5jdGlvbiBwbHVjayhwcm9wZXJ0eSkgeworKyAg
ICB2YXIgcmVzdWx0cyA9IFtdOworKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUpIHsKKysg
ICAgICByZXN1bHRzLnB1c2godmFsdWVbcHJvcGVydHldKTsKKysgICAgfSk7CisrICAgIHJldHVy
biByZXN1bHRzOworKyAgfQorKworKyAgZnVuY3Rpb24gcmVqZWN0KGl0ZXJhdG9yLCBjb250ZXh0
KSB7CisrICAgIHZhciByZXN1bHRzID0gW107CisrICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1
ZSwgaW5kZXgpIHsKKysgICAgICBpZiAoIWl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGlu
ZGV4KSkKKysgICAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZSk7CisrICAgIH0pOworKyAgICByZXR1
cm4gcmVzdWx0czsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHNvcnRCeShpdGVyYXRvciwgY29udGV4
dCkgeworKyAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisrICAg
ICAgcmV0dXJuIHsKKysgICAgICAgIHZhbHVlOiB2YWx1ZSwKKysgICAgICAgIGNyaXRlcmlhOiBp
dGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCkKKysgICAgICB9OworKyAgICB9KS5z
b3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7CisrICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlh
LCBiID0gcmlnaHQuY3JpdGVyaWE7CisrICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/
IDEgOiAwOworKyAgICB9KS5wbHVjaygndmFsdWUnKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHRv
QXJyYXkoKSB7CisrICAgIHJldHVybiB0aGlzLm1hcCgpOworKyAgfQorKworKyAgZnVuY3Rpb24g
emlwKCkgeworKyAgICB2YXIgaXRlcmF0b3IgPSBQcm90b3R5cGUuSywgYXJncyA9ICRBKGFyZ3Vt
ZW50cyk7CisrICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbihhcmdzLmxhc3QoKSkpCisrICAgICAg
aXRlcmF0b3IgPSBhcmdzLnBvcCgpOworKworKyAgICB2YXIgY29sbGVjdGlvbnMgPSBbdGhpc10u
Y29uY2F0KGFyZ3MpLm1hcCgkQSk7CisrICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1
ZSwgaW5kZXgpIHsKKysgICAgICByZXR1cm4gaXRlcmF0b3IoY29sbGVjdGlvbnMucGx1Y2soaW5k
ZXgpKTsKKysgICAgfSk7CisrICB9CisrCisrICBmdW5jdGlvbiBzaXplKCkgeworKyAgICByZXR1
cm4gdGhpcy50b0FycmF5KCkubGVuZ3RoOworKyAgfQorKworKyAgZnVuY3Rpb24gaW5zcGVjdCgp
IHsKKysgICAgcmV0dXJuICcjPEVudW1lcmFibGU6JyArIHRoaXMudG9BcnJheSgpLmluc3BlY3Qo
KSArICc+JzsKKysgIH0KKysKKysKKysKKysKKysKKysKKysKKysKKysKKysgIHJldHVybiB7Cisr
ICAgIGVhY2g6ICAgICAgIGVhY2gsCisrICAgIGVhY2hTbGljZTogIGVhY2hTbGljZSwKKysgICAg
YWxsOiAgICAgICAgYWxsLAorKyAgICBldmVyeTogICAgICBhbGwsCisrICAgIGFueTogICAgICAg
IGFueSwKKysgICAgc29tZTogICAgICAgYW55LAorKyAgICBjb2xsZWN0OiAgICBjb2xsZWN0LAor
KyAgICBtYXA6ICAgICAgICBjb2xsZWN0LAorKyAgICBkZXRlY3Q6ICAgICBkZXRlY3QsCisrICAg
IGZpbmRBbGw6ICAgIGZpbmRBbGwsCisrICAgIHNlbGVjdDogICAgIGZpbmRBbGwsCisrICAgIGZp
bHRlcjogICAgIGZpbmRBbGwsCisrICAgIGdyZXA6ICAgICAgIGdyZXAsCisrICAgIGluY2x1ZGU6
ICAgIGluY2x1ZGUsCisrICAgIG1lbWJlcjogICAgIGluY2x1ZGUsCisrICAgIGluR3JvdXBzT2Y6
IGluR3JvdXBzT2YsCisrICAgIGluamVjdDogICAgIGluamVjdCwKKysgICAgaW52b2tlOiAgICAg
aW52b2tlLAorKyAgICBtYXg6ICAgICAgICBtYXgsCisrICAgIG1pbjogICAgICAgIG1pbiwKKysg
ICAgcGFydGl0aW9uOiAgcGFydGl0aW9uLAorKyAgICBwbHVjazogICAgICBwbHVjaywKKysgICAg
cmVqZWN0OiAgICAgcmVqZWN0LAorKyAgICBzb3J0Qnk6ICAgICBzb3J0QnksCisrICAgIHRvQXJy
YXk6ICAgIHRvQXJyYXksCisrICAgIGVudHJpZXM6ICAgIHRvQXJyYXksCisrICAgIHppcDogICAg
ICAgIHppcCwKKysgICAgc2l6ZTogICAgICAgc2l6ZSwKKysgICAgaW5zcGVjdDogICAgaW5zcGVj
dCwKKysgICAgZmluZDogICAgICAgZGV0ZWN0CisrICB9OworK30pKCk7CisrCisrZnVuY3Rpb24g
JEEoaXRlcmFibGUpIHsKKysgIGlmICghaXRlcmFibGUpIHJldHVybiBbXTsKKysgIGlmICgndG9B
cnJheScgaW4gT2JqZWN0KGl0ZXJhYmxlKSkgcmV0dXJuIGl0ZXJhYmxlLnRvQXJyYXkoKTsKKysg
IHZhciBsZW5ndGggPSBpdGVyYWJsZS5sZW5ndGggfHwgMCwgcmVzdWx0cyA9IG5ldyBBcnJheShs
ZW5ndGgpOworKyAgd2hpbGUgKGxlbmd0aC0tKSByZXN1bHRzW2xlbmd0aF0gPSBpdGVyYWJsZVts
ZW5ndGhdOworKyAgcmV0dXJuIHJlc3VsdHM7CisrfQorKworKworK2Z1bmN0aW9uICR3KHN0cmlu
ZykgeworKyAgaWYgKCFPYmplY3QuaXNTdHJpbmcoc3RyaW5nKSkgcmV0dXJuIFtdOworKyAgc3Ry
aW5nID0gc3RyaW5nLnN0cmlwKCk7CisrICByZXR1cm4gc3RyaW5nID8gc3RyaW5nLnNwbGl0KC9c
cysvKSA6IFtdOworK30KKysKKytBcnJheS5mcm9tID0gJEE7CisrCisrCisrKGZ1bmN0aW9uKCkg
eworKyAgdmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsCisrICAgICAgc2xpY2UgPSBh
cnJheVByb3RvLnNsaWNlLAorKyAgICAgIF9lYWNoID0gYXJyYXlQcm90by5mb3JFYWNoOyAvLyB1
c2UgbmF0aXZlIGJyb3dzZXIgSlMgMS42IGltcGxlbWVudGF0aW9uIGlmIGF2YWlsYWJsZQorKwor
KyAgZnVuY3Rpb24gZWFjaChpdGVyYXRvciwgY29udGV4dCkgeworKyAgICBmb3IgKHZhciBpID0g
MCwgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsZW5ndGg7IGkrKykgeworKyAgICAg
IGlmIChpIGluIHRoaXMpIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdGhpc1tpXSwgaSwgdGhpcyk7
CisrICAgIH0KKysgIH0KKysgIGlmICghX2VhY2gpIF9lYWNoID0gZWFjaDsKKysKKysgIGZ1bmN0
aW9uIGNsZWFyKCkgeworKyAgICB0aGlzLmxlbmd0aCA9IDA7CisrICAgIHJldHVybiB0aGlzOwor
KyAgfQorKworKyAgZnVuY3Rpb24gZmlyc3QoKSB7CisrICAgIHJldHVybiB0aGlzWzBdOworKyAg
fQorKworKyAgZnVuY3Rpb24gbGFzdCgpIHsKKysgICAgcmV0dXJuIHRoaXNbdGhpcy5sZW5ndGgg
LSAxXTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGNvbXBhY3QoKSB7CisrICAgIHJldHVybiB0aGlz
LnNlbGVjdChmdW5jdGlvbih2YWx1ZSkgeworKyAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsOwor
KyAgICB9KTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGZsYXR0ZW4oKSB7CisrICAgIHJldHVybiB0
aGlzLmluamVjdChbXSwgZnVuY3Rpb24oYXJyYXksIHZhbHVlKSB7CisrICAgICAgaWYgKE9iamVj
dC5pc0FycmF5KHZhbHVlKSkKKysgICAgICAgIHJldHVybiBhcnJheS5jb25jYXQodmFsdWUuZmxh
dHRlbigpKTsKKysgICAgICBhcnJheS5wdXNoKHZhbHVlKTsKKysgICAgICByZXR1cm4gYXJyYXk7
CisrICAgIH0pOworKyAgfQorKworKyAgZnVuY3Rpb24gd2l0aG91dCgpIHsKKysgICAgdmFyIHZh
bHVlcyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTsKKysgICAgcmV0dXJuIHRoaXMuc2VsZWN0
KGZ1bmN0aW9uKHZhbHVlKSB7CisrICAgICAgcmV0dXJuICF2YWx1ZXMuaW5jbHVkZSh2YWx1ZSk7
CisrICAgIH0pOworKyAgfQorKworKyAgZnVuY3Rpb24gcmV2ZXJzZShpbmxpbmUpIHsKKysgICAg
cmV0dXJuIChpbmxpbmUgPT09IGZhbHNlID8gdGhpcy50b0FycmF5KCkgOiB0aGlzKS5fcmV2ZXJz
ZSgpOworKyAgfQorKworKyAgZnVuY3Rpb24gdW5pcShzb3J0ZWQpIHsKKysgICAgcmV0dXJuIHRo
aXMuaW5qZWN0KFtdLCBmdW5jdGlvbihhcnJheSwgdmFsdWUsIGluZGV4KSB7CisrICAgICAgaWYg
KDAgPT0gaW5kZXggfHwgKHNvcnRlZCA/IGFycmF5Lmxhc3QoKSAhPSB2YWx1ZSA6ICFhcnJheS5p
bmNsdWRlKHZhbHVlKSkpCisrICAgICAgICBhcnJheS5wdXNoKHZhbHVlKTsKKysgICAgICByZXR1
cm4gYXJyYXk7CisrICAgIH0pOworKyAgfQorKworKyAgZnVuY3Rpb24gaW50ZXJzZWN0KGFycmF5
KSB7CisrICAgIHJldHVybiB0aGlzLnVuaXEoKS5maW5kQWxsKGZ1bmN0aW9uKGl0ZW0pIHsKKysg
ICAgICByZXR1cm4gYXJyYXkuZGV0ZWN0KGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBpdGVtID09
PSB2YWx1ZSB9KTsKKysgICAgfSk7CisrICB9CisrCisrCisrICBmdW5jdGlvbiBjbG9uZSgpIHsK
KysgICAgcmV0dXJuIHNsaWNlLmNhbGwodGhpcywgMCk7CisrICB9CisrCisrICBmdW5jdGlvbiBz
aXplKCkgeworKyAgICByZXR1cm4gdGhpcy5sZW5ndGg7CisrICB9CisrCisrICBmdW5jdGlvbiBp
bnNwZWN0KCkgeworKyAgICByZXR1cm4gJ1snICsgdGhpcy5tYXAoT2JqZWN0Lmluc3BlY3QpLmpv
aW4oJywgJykgKyAnXSc7CisrICB9CisrCisrICBmdW5jdGlvbiBpbmRleE9mKGl0ZW0sIGkpIHsK
KysgICAgaSB8fCAoaSA9IDApOworKyAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CisrICAg
IGlmIChpIDwgMCkgaSA9IGxlbmd0aCArIGk7CisrICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKysp
CisrICAgICAgaWYgKHRoaXNbaV0gPT09IGl0ZW0pIHJldHVybiBpOworKyAgICByZXR1cm4gLTE7
CisrICB9CisrCisrICBmdW5jdGlvbiBsYXN0SW5kZXhPZihpdGVtLCBpKSB7CisrICAgIGkgPSBp
c05hTihpKSA/IHRoaXMubGVuZ3RoIDogKGkgPCAwID8gdGhpcy5sZW5ndGggKyBpIDogaSkgKyAx
OworKyAgICB2YXIgbiA9IHRoaXMuc2xpY2UoMCwgaSkucmV2ZXJzZSgpLmluZGV4T2YoaXRlbSk7
CisrICAgIHJldHVybiAobiA8IDApID8gbiA6IGkgLSBuIC0gMTsKKysgIH0KKysKKysgIGZ1bmN0
aW9uIGNvbmNhdCgpIHsKKysgICAgdmFyIGFycmF5ID0gc2xpY2UuY2FsbCh0aGlzLCAwKSwgaXRl
bTsKKysgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBs
ZW5ndGg7IGkrKykgeworKyAgICAgIGl0ZW0gPSBhcmd1bWVudHNbaV07CisrICAgICAgaWYgKE9i
amVjdC5pc0FycmF5KGl0ZW0pICYmICEoJ2NhbGxlZScgaW4gaXRlbSkpIHsKKysgICAgICAgIGZv
ciAodmFyIGogPSAwLCBhcnJheUxlbmd0aCA9IGl0ZW0ubGVuZ3RoOyBqIDwgYXJyYXlMZW5ndGg7
IGorKykKKysgICAgICAgICAgYXJyYXkucHVzaChpdGVtW2pdKTsKKysgICAgICB9IGVsc2Ugewor
KyAgICAgICAgYXJyYXkucHVzaChpdGVtKTsKKysgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJu
IGFycmF5OworKyAgfQorKworKyAgT2JqZWN0LmV4dGVuZChhcnJheVByb3RvLCBFbnVtZXJhYmxl
KTsKKysKKysgIGlmICghYXJyYXlQcm90by5fcmV2ZXJzZSkKKysgICAgYXJyYXlQcm90by5fcmV2
ZXJzZSA9IGFycmF5UHJvdG8ucmV2ZXJzZTsKKysKKysgIE9iamVjdC5leHRlbmQoYXJyYXlQcm90
bywgeworKyAgICBfZWFjaDogICAgIF9lYWNoLAorKyAgICBjbGVhcjogICAgIGNsZWFyLAorKyAg
ICBmaXJzdDogICAgIGZpcnN0LAorKyAgICBsYXN0OiAgICAgIGxhc3QsCisrICAgIGNvbXBhY3Q6
ICAgY29tcGFjdCwKKysgICAgZmxhdHRlbjogICBmbGF0dGVuLAorKyAgICB3aXRob3V0OiAgIHdp
dGhvdXQsCisrICAgIHJldmVyc2U6ICAgcmV2ZXJzZSwKKysgICAgdW5pcTogICAgICB1bmlxLAor
KyAgICBpbnRlcnNlY3Q6IGludGVyc2VjdCwKKysgICAgY2xvbmU6ICAgICBjbG9uZSwKKysgICAg
dG9BcnJheTogICBjbG9uZSwKKysgICAgc2l6ZTogICAgICBzaXplLAorKyAgICBpbnNwZWN0OiAg
IGluc3BlY3QKKysgIH0pOworKworKyAgdmFyIENPTkNBVF9BUkdVTUVOVFNfQlVHR1kgPSAoZnVu
Y3Rpb24oKSB7CisrICAgIHJldHVybiBbXS5jb25jYXQoYXJndW1lbnRzKVswXVswXSAhPT0gMTsK
KysgIH0pKDEsMikKKysKKysgIGlmIChDT05DQVRfQVJHVU1FTlRTX0JVR0dZKSBhcnJheVByb3Rv
LmNvbmNhdCA9IGNvbmNhdDsKKysKKysgIGlmICghYXJyYXlQcm90by5pbmRleE9mKSBhcnJheVBy
b3RvLmluZGV4T2YgPSBpbmRleE9mOworKyAgaWYgKCFhcnJheVByb3RvLmxhc3RJbmRleE9mKSBh
cnJheVByb3RvLmxhc3RJbmRleE9mID0gbGFzdEluZGV4T2Y7CisrfSkoKTsKKytmdW5jdGlvbiAk
SChvYmplY3QpIHsKKysgIHJldHVybiBuZXcgSGFzaChvYmplY3QpOworK307CisrCisrdmFyIEhh
c2ggPSBDbGFzcy5jcmVhdGUoRW51bWVyYWJsZSwgKGZ1bmN0aW9uKCkgeworKyAgZnVuY3Rpb24g
aW5pdGlhbGl6ZShvYmplY3QpIHsKKysgICAgdGhpcy5fb2JqZWN0ID0gT2JqZWN0LmlzSGFzaChv
YmplY3QpID8gb2JqZWN0LnRvT2JqZWN0KCkgOiBPYmplY3QuY2xvbmUob2JqZWN0KTsKKysgIH0K
KysKKysKKysgIGZ1bmN0aW9uIF9lYWNoKGl0ZXJhdG9yKSB7CisrICAgIGZvciAodmFyIGtleSBp
biB0aGlzLl9vYmplY3QpIHsKKysgICAgICB2YXIgdmFsdWUgPSB0aGlzLl9vYmplY3Rba2V5XSwg
cGFpciA9IFtrZXksIHZhbHVlXTsKKysgICAgICBwYWlyLmtleSA9IGtleTsKKysgICAgICBwYWly
LnZhbHVlID0gdmFsdWU7CisrICAgICAgaXRlcmF0b3IocGFpcik7CisrICAgIH0KKysgIH0KKysK
KysgIGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7CisrICAgIHJldHVybiB0aGlzLl9vYmplY3Rb
a2V5XSA9IHZhbHVlOworKyAgfQorKworKyAgZnVuY3Rpb24gZ2V0KGtleSkgeworKyAgICBpZiAo
dGhpcy5fb2JqZWN0W2tleV0gIT09IE9iamVjdC5wcm90b3R5cGVba2V5XSkKKysgICAgICByZXR1
cm4gdGhpcy5fb2JqZWN0W2tleV07CisrICB9CisrCisrICBmdW5jdGlvbiB1bnNldChrZXkpIHsK
KysgICAgdmFyIHZhbHVlID0gdGhpcy5fb2JqZWN0W2tleV07CisrICAgIGRlbGV0ZSB0aGlzLl9v
YmplY3Rba2V5XTsKKysgICAgcmV0dXJuIHZhbHVlOworKyAgfQorKworKyAgZnVuY3Rpb24gdG9P
YmplY3QoKSB7CisrICAgIHJldHVybiBPYmplY3QuY2xvbmUodGhpcy5fb2JqZWN0KTsKKysgIH0K
KysKKysKKysKKysgIGZ1bmN0aW9uIGtleXMoKSB7CisrICAgIHJldHVybiB0aGlzLnBsdWNrKCdr
ZXknKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHZhbHVlcygpIHsKKysgICAgcmV0dXJuIHRoaXMu
cGx1Y2soJ3ZhbHVlJyk7CisrICB9CisrCisrICBmdW5jdGlvbiBpbmRleCh2YWx1ZSkgeworKyAg
ICB2YXIgbWF0Y2ggPSB0aGlzLmRldGVjdChmdW5jdGlvbihwYWlyKSB7CisrICAgICAgcmV0dXJu
IHBhaXIudmFsdWUgPT09IHZhbHVlOworKyAgICB9KTsKKysgICAgcmV0dXJuIG1hdGNoICYmIG1h
dGNoLmtleTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIG1lcmdlKG9iamVjdCkgeworKyAgICByZXR1
cm4gdGhpcy5jbG9uZSgpLnVwZGF0ZShvYmplY3QpOworKyAgfQorKworKyAgZnVuY3Rpb24gdXBk
YXRlKG9iamVjdCkgeworKyAgICByZXR1cm4gbmV3IEhhc2gob2JqZWN0KS5pbmplY3QodGhpcywg
ZnVuY3Rpb24ocmVzdWx0LCBwYWlyKSB7CisrICAgICAgcmVzdWx0LnNldChwYWlyLmtleSwgcGFp
ci52YWx1ZSk7CisrICAgICAgcmV0dXJuIHJlc3VsdDsKKysgICAgfSk7CisrICB9CisrCisrICBm
dW5jdGlvbiB0b1F1ZXJ5UGFpcihrZXksIHZhbHVlKSB7CisrICAgIGlmIChPYmplY3QuaXNVbmRl
ZmluZWQodmFsdWUpKSByZXR1cm4ga2V5OworKyAgICByZXR1cm4ga2V5ICsgJz0nICsgZW5jb2Rl
VVJJQ29tcG9uZW50KFN0cmluZy5pbnRlcnByZXQodmFsdWUpKTsKKysgIH0KKysKKysgIGZ1bmN0
aW9uIHRvUXVlcnlTdHJpbmcoKSB7CisrICAgIHJldHVybiB0aGlzLmluamVjdChbXSwgZnVuY3Rp
b24ocmVzdWx0cywgcGFpcikgeworKyAgICAgIHZhciBrZXkgPSBlbmNvZGVVUklDb21wb25lbnQo
cGFpci5rZXkpLCB2YWx1ZXMgPSBwYWlyLnZhbHVlOworKworKyAgICAgIGlmICh2YWx1ZXMgJiYg
dHlwZW9mIHZhbHVlcyA9PSAnb2JqZWN0JykgeworKyAgICAgICAgaWYgKE9iamVjdC5pc0FycmF5
KHZhbHVlcykpIHsKKysgICAgICAgICAgdmFyIHF1ZXJ5VmFsdWVzID0gW107CisrICAgICAgICAg
IGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWx1ZXMubGVuZ3RoLCB2YWx1ZTsgaSA8IGxlbjsgaSsr
KSB7CisrICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaV07CisrICAgICAgICAgICAgcXVlcnlW
YWx1ZXMucHVzaCh0b1F1ZXJ5UGFpcihrZXksIHZhbHVlKSk7CisrICAgICAgICAgIH0KKysgICAg
ICAgICAgcmV0dXJuIHJlc3VsdHMuY29uY2F0KHF1ZXJ5VmFsdWVzKTsKKysgICAgICAgIH0KKysg
ICAgICB9IGVsc2UgcmVzdWx0cy5wdXNoKHRvUXVlcnlQYWlyKGtleSwgdmFsdWVzKSk7CisrICAg
ICAgcmV0dXJuIHJlc3VsdHM7CisrICAgIH0pLmpvaW4oJyYnKTsKKysgIH0KKysKKysgIGZ1bmN0
aW9uIGluc3BlY3QoKSB7CisrICAgIHJldHVybiAnIzxIYXNoOnsnICsgdGhpcy5tYXAoZnVuY3Rp
b24ocGFpcikgeworKyAgICAgIHJldHVybiBwYWlyLm1hcChPYmplY3QuaW5zcGVjdCkuam9pbign
OiAnKTsKKysgICAgfSkuam9pbignLCAnKSArICd9Pic7CisrICB9CisrCisrICBmdW5jdGlvbiBj
bG9uZSgpIHsKKysgICAgcmV0dXJuIG5ldyBIYXNoKHRoaXMpOworKyAgfQorKworKyAgcmV0dXJu
IHsKKysgICAgaW5pdGlhbGl6ZTogICAgICAgICAgICAgaW5pdGlhbGl6ZSwKKysgICAgX2VhY2g6
ICAgICAgICAgICAgICAgICAgX2VhY2gsCisrICAgIHNldDogICAgICAgICAgICAgICAgICAgIHNl
dCwKKysgICAgZ2V0OiAgICAgICAgICAgICAgICAgICAgZ2V0LAorKyAgICB1bnNldDogICAgICAg
ICAgICAgICAgICB1bnNldCwKKysgICAgdG9PYmplY3Q6ICAgICAgICAgICAgICAgdG9PYmplY3Qs
CisrICAgIHRvVGVtcGxhdGVSZXBsYWNlbWVudHM6IHRvT2JqZWN0LAorKyAgICBrZXlzOiAgICAg
ICAgICAgICAgICAgICBrZXlzLAorKyAgICB2YWx1ZXM6ICAgICAgICAgICAgICAgICB2YWx1ZXMs
CisrICAgIGluZGV4OiAgICAgICAgICAgICAgICAgIGluZGV4LAorKyAgICBtZXJnZTogICAgICAg
ICAgICAgICAgICBtZXJnZSwKKysgICAgdXBkYXRlOiAgICAgICAgICAgICAgICAgdXBkYXRlLAor
KyAgICB0b1F1ZXJ5U3RyaW5nOiAgICAgICAgICB0b1F1ZXJ5U3RyaW5nLAorKyAgICBpbnNwZWN0
OiAgICAgICAgICAgICAgICBpbnNwZWN0LAorKyAgICB0b0pTT046ICAgICAgICAgICAgICAgICB0
b09iamVjdCwKKysgICAgY2xvbmU6ICAgICAgICAgICAgICAgICAgY2xvbmUKKysgIH07CisrfSko
KSk7CisrCisrSGFzaC5mcm9tID0gJEg7CisrT2JqZWN0LmV4dGVuZChOdW1iZXIucHJvdG90eXBl
LCAoZnVuY3Rpb24oKSB7CisrICBmdW5jdGlvbiB0b0NvbG9yUGFydCgpIHsKKysgICAgcmV0dXJu
IHRoaXMudG9QYWRkZWRTdHJpbmcoMiwgMTYpOworKyAgfQorKworKyAgZnVuY3Rpb24gc3VjYygp
IHsKKysgICAgcmV0dXJuIHRoaXMgKyAxOworKyAgfQorKworKyAgZnVuY3Rpb24gdGltZXMoaXRl
cmF0b3IsIGNvbnRleHQpIHsKKysgICAgJFIoMCwgdGhpcywgdHJ1ZSkuZWFjaChpdGVyYXRvciwg
Y29udGV4dCk7CisrICAgIHJldHVybiB0aGlzOworKyAgfQorKworKyAgZnVuY3Rpb24gdG9QYWRk
ZWRTdHJpbmcobGVuZ3RoLCByYWRpeCkgeworKyAgICB2YXIgc3RyaW5nID0gdGhpcy50b1N0cmlu
ZyhyYWRpeCB8fCAxMCk7CisrICAgIHJldHVybiAnMCcudGltZXMobGVuZ3RoIC0gc3RyaW5nLmxl
bmd0aCkgKyBzdHJpbmc7CisrICB9CisrCisrICBmdW5jdGlvbiBhYnMoKSB7CisrICAgIHJldHVy
biBNYXRoLmFicyh0aGlzKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHJvdW5kKCkgeworKyAgICBy
ZXR1cm4gTWF0aC5yb3VuZCh0aGlzKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGNlaWwoKSB7Cisr
ICAgIHJldHVybiBNYXRoLmNlaWwodGhpcyk7CisrICB9CisrCisrICBmdW5jdGlvbiBmbG9vcigp
IHsKKysgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcyk7CisrICB9CisrCisrICByZXR1cm4gewor
KyAgICB0b0NvbG9yUGFydDogICAgdG9Db2xvclBhcnQsCisrICAgIHN1Y2M6ICAgICAgICAgICBz
dWNjLAorKyAgICB0aW1lczogICAgICAgICAgdGltZXMsCisrICAgIHRvUGFkZGVkU3RyaW5nOiB0
b1BhZGRlZFN0cmluZywKKysgICAgYWJzOiAgICAgICAgICAgIGFicywKKysgICAgcm91bmQ6ICAg
ICAgICAgIHJvdW5kLAorKyAgICBjZWlsOiAgICAgICAgICAgY2VpbCwKKysgICAgZmxvb3I6ICAg
ICAgICAgIGZsb29yCisrICB9OworK30pKCkpOworKworK2Z1bmN0aW9uICRSKHN0YXJ0LCBlbmQs
IGV4Y2x1c2l2ZSkgeworKyAgcmV0dXJuIG5ldyBPYmplY3RSYW5nZShzdGFydCwgZW5kLCBleGNs
dXNpdmUpOworK30KKysKKyt2YXIgT2JqZWN0UmFuZ2UgPSBDbGFzcy5jcmVhdGUoRW51bWVyYWJs
ZSwgKGZ1bmN0aW9uKCkgeworKyAgZnVuY3Rpb24gaW5pdGlhbGl6ZShzdGFydCwgZW5kLCBleGNs
dXNpdmUpIHsKKysgICAgdGhpcy5zdGFydCA9IHN0YXJ0OworKyAgICB0aGlzLmVuZCA9IGVuZDsK
KysgICAgdGhpcy5leGNsdXNpdmUgPSBleGNsdXNpdmU7CisrICB9CisrCisrICBmdW5jdGlvbiBf
ZWFjaChpdGVyYXRvcikgeworKyAgICB2YXIgdmFsdWUgPSB0aGlzLnN0YXJ0OworKyAgICB3aGls
ZSAodGhpcy5pbmNsdWRlKHZhbHVlKSkgeworKyAgICAgIGl0ZXJhdG9yKHZhbHVlKTsKKysgICAg
ICB2YWx1ZSA9IHZhbHVlLnN1Y2MoKTsKKysgICAgfQorKyAgfQorKworKyAgZnVuY3Rpb24gaW5j
bHVkZSh2YWx1ZSkgeworKyAgICBpZiAodmFsdWUgPCB0aGlzLnN0YXJ0KQorKyAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgaWYgKHRoaXMuZXhjbHVzaXZlKQorKyAgICAgIHJldHVybiB2YWx1ZSA8
IHRoaXMuZW5kOworKyAgICByZXR1cm4gdmFsdWUgPD0gdGhpcy5lbmQ7CisrICB9CisrCisrICBy
ZXR1cm4geworKyAgICBpbml0aWFsaXplOiBpbml0aWFsaXplLAorKyAgICBfZWFjaDogICAgICBf
ZWFjaCwKKysgICAgaW5jbHVkZTogICAgaW5jbHVkZQorKyAgfTsKKyt9KSgpKTsKKysKKysKKysK
Kyt2YXIgQWpheCA9IHsKKysgIGdldFRyYW5zcG9ydDogZnVuY3Rpb24oKSB7CisrICAgIHJldHVy
biBUcnkudGhlc2UoCisrICAgICAgZnVuY3Rpb24oKSB7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVz
dCgpfSwKKysgICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1s
Mi5YTUxIVFRQJyl9LAorKyAgICAgIGZ1bmN0aW9uKCkge3JldHVybiBuZXcgQWN0aXZlWE9iamVj
dCgnTWljcm9zb2Z0LlhNTEhUVFAnKX0KKysgICAgKSB8fCBmYWxzZTsKKysgIH0sCisrCisrICBh
Y3RpdmVSZXF1ZXN0Q291bnQ6IDAKKyt9OworKworK0FqYXguUmVzcG9uZGVycyA9IHsKKysgIHJl
c3BvbmRlcnM6IFtdLAorKworKyAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CisrICAgIHRo
aXMucmVzcG9uZGVycy5fZWFjaChpdGVyYXRvcik7CisrICB9LAorKworKyAgcmVnaXN0ZXI6IGZ1
bmN0aW9uKHJlc3BvbmRlcikgeworKyAgICBpZiAoIXRoaXMuaW5jbHVkZShyZXNwb25kZXIpKQor
KyAgICAgIHRoaXMucmVzcG9uZGVycy5wdXNoKHJlc3BvbmRlcik7CisrICB9LAorKworKyAgdW5y
ZWdpc3RlcjogZnVuY3Rpb24ocmVzcG9uZGVyKSB7CisrICAgIHRoaXMucmVzcG9uZGVycyA9IHRo
aXMucmVzcG9uZGVycy53aXRob3V0KHJlc3BvbmRlcik7CisrICB9LAorKworKyAgZGlzcGF0Y2g6
IGZ1bmN0aW9uKGNhbGxiYWNrLCByZXF1ZXN0LCB0cmFuc3BvcnQsIGpzb24pIHsKKysgICAgdGhp
cy5lYWNoKGZ1bmN0aW9uKHJlc3BvbmRlcikgeworKyAgICAgIGlmIChPYmplY3QuaXNGdW5jdGlv
bihyZXNwb25kZXJbY2FsbGJhY2tdKSkgeworKyAgICAgICAgdHJ5IHsKKysgICAgICAgICAgcmVz
cG9uZGVyW2NhbGxiYWNrXS5hcHBseShyZXNwb25kZXIsIFtyZXF1ZXN0LCB0cmFuc3BvcnQsIGpz
b25dKTsKKysgICAgICAgIH0gY2F0Y2ggKGUpIHsgfQorKyAgICAgIH0KKysgICAgfSk7CisrICB9
CisrfTsKKysKKytPYmplY3QuZXh0ZW5kKEFqYXguUmVzcG9uZGVycywgRW51bWVyYWJsZSk7Cisr
CisrQWpheC5SZXNwb25kZXJzLnJlZ2lzdGVyKHsKKysgIG9uQ3JlYXRlOiAgIGZ1bmN0aW9uKCkg
eyBBamF4LmFjdGl2ZVJlcXVlc3RDb3VudCsrIH0sCisrICBvbkNvbXBsZXRlOiBmdW5jdGlvbigp
IHsgQWpheC5hY3RpdmVSZXF1ZXN0Q291bnQtLSB9CisrfSk7CisrQWpheC5CYXNlID0gQ2xhc3Mu
Y3JlYXRlKHsKKysgIGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKysgICAgdGhpcy5v
cHRpb25zID0geworKyAgICAgIG1ldGhvZDogICAgICAgJ3Bvc3QnLAorKyAgICAgIGFzeW5jaHJv
bm91czogdHJ1ZSwKKysgICAgICBjb250ZW50VHlwZTogICdhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQnLAorKyAgICAgIGVuY29kaW5nOiAgICAgJ1VURi04JywKKysgICAgICBwYXJh
bWV0ZXJzOiAgICcnLAorKyAgICAgIGV2YWxKU09OOiAgICAgdHJ1ZSwKKysgICAgICBldmFsSlM6
ICAgICAgIHRydWUKKysgICAgfTsKKysgICAgT2JqZWN0LmV4dGVuZCh0aGlzLm9wdGlvbnMsIG9w
dGlvbnMgfHwgeyB9KTsKKysKKysgICAgdGhpcy5vcHRpb25zLm1ldGhvZCA9IHRoaXMub3B0aW9u
cy5tZXRob2QudG9Mb3dlckNhc2UoKTsKKysKKysgICAgaWYgKE9iamVjdC5pc0hhc2godGhpcy5v
cHRpb25zLnBhcmFtZXRlcnMpKQorKyAgICAgIHRoaXMub3B0aW9ucy5wYXJhbWV0ZXJzID0gdGhp
cy5vcHRpb25zLnBhcmFtZXRlcnMudG9PYmplY3QoKTsKKysgIH0KKyt9KTsKKytBamF4LlJlcXVl
c3QgPSBDbGFzcy5jcmVhdGUoQWpheC5CYXNlLCB7CisrICBfY29tcGxldGU6IGZhbHNlLAorKwor
KyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oJHN1cGVyLCB1cmwsIG9wdGlvbnMpIHsKKysgICAgJHN1
cGVyKG9wdGlvbnMpOworKyAgICB0aGlzLnRyYW5zcG9ydCA9IEFqYXguZ2V0VHJhbnNwb3J0KCk7
CisrICAgIHRoaXMucmVxdWVzdCh1cmwpOworKyAgfSwKKysKKysgIHJlcXVlc3Q6IGZ1bmN0aW9u
KHVybCkgeworKyAgICB0aGlzLnVybCA9IHVybDsKKysgICAgdGhpcy5tZXRob2QgPSB0aGlzLm9w
dGlvbnMubWV0aG9kOworKyAgICB2YXIgcGFyYW1zID0gT2JqZWN0LmlzU3RyaW5nKHRoaXMub3B0
aW9ucy5wYXJhbWV0ZXJzKSA/CisrICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXJhbWV0ZXJzIDoK
KysgICAgICAgICAgT2JqZWN0LnRvUXVlcnlTdHJpbmcodGhpcy5vcHRpb25zLnBhcmFtZXRlcnMp
OworKworKyAgICBpZiAoIVsnZ2V0JywgJ3Bvc3QnXS5pbmNsdWRlKHRoaXMubWV0aG9kKSkgewor
KyAgICAgIHBhcmFtcyArPSAocGFyYW1zID8gJyYnIDogJycpICsgIl9tZXRob2Q9IiArIHRoaXMu
bWV0aG9kOworKyAgICAgIHRoaXMubWV0aG9kID0gJ3Bvc3QnOworKyAgICB9CisrCisrICAgIGlm
IChwYXJhbXMgJiYgdGhpcy5tZXRob2QgPT09ICdnZXQnKSB7CisrICAgICAgdGhpcy51cmwgKz0g
KHRoaXMudXJsLmluY2x1ZGUoJz8nKSA/ICcmJyA6ICc/JykgKyBwYXJhbXM7CisrICAgIH0KKysK
KysgICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1zLnRvUXVlcnlQYXJhbXMoKTsKKysKKysgICAg
dHJ5IHsKKysgICAgICB2YXIgcmVzcG9uc2UgPSBuZXcgQWpheC5SZXNwb25zZSh0aGlzKTsKKysg
ICAgICBpZiAodGhpcy5vcHRpb25zLm9uQ3JlYXRlKSB0aGlzLm9wdGlvbnMub25DcmVhdGUocmVz
cG9uc2UpOworKyAgICAgIEFqYXguUmVzcG9uZGVycy5kaXNwYXRjaCgnb25DcmVhdGUnLCB0aGlz
LCByZXNwb25zZSk7CisrCisrICAgICAgdGhpcy50cmFuc3BvcnQub3Blbih0aGlzLm1ldGhvZC50
b1VwcGVyQ2FzZSgpLCB0aGlzLnVybCwKKysgICAgICAgIHRoaXMub3B0aW9ucy5hc3luY2hyb25v
dXMpOworKworKyAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzKSB0aGlzLnJlc3Bv
bmRUb1JlYWR5U3RhdGUuYmluZCh0aGlzKS5kZWZlcigxKTsKKysKKysgICAgICB0aGlzLnRyYW5z
cG9ydC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKTsK
KysgICAgICB0aGlzLnNldFJlcXVlc3RIZWFkZXJzKCk7CisrCisrICAgICAgdGhpcy5ib2R5ID0g
dGhpcy5tZXRob2QgPT0gJ3Bvc3QnID8gKHRoaXMub3B0aW9ucy5wb3N0Qm9keSB8fCBwYXJhbXMp
IDogbnVsbDsKKysgICAgICB0aGlzLnRyYW5zcG9ydC5zZW5kKHRoaXMuYm9keSk7CisrCisrICAg
ICAgLyogRm9yY2UgRmlyZWZveCB0byBoYW5kbGUgcmVhZHkgc3RhdGUgNCBmb3Igc3luY2hyb25v
dXMgcmVxdWVzdHMgKi8KKysgICAgICBpZiAoIXRoaXMub3B0aW9ucy5hc3luY2hyb25vdXMgJiYg
dGhpcy50cmFuc3BvcnQub3ZlcnJpZGVNaW1lVHlwZSkKKysgICAgICAgIHRoaXMub25TdGF0ZUNo
YW5nZSgpOworKworKyAgICB9CisrICAgIGNhdGNoIChlKSB7CisrICAgICAgdGhpcy5kaXNwYXRj
aEV4Y2VwdGlvbihlKTsKKysgICAgfQorKyAgfSwKKysKKysgIG9uU3RhdGVDaGFuZ2U6IGZ1bmN0
aW9uKCkgeworKyAgICB2YXIgcmVhZHlTdGF0ZSA9IHRoaXMudHJhbnNwb3J0LnJlYWR5U3RhdGU7
CisrICAgIGlmIChyZWFkeVN0YXRlID4gMSAmJiAhKChyZWFkeVN0YXRlID09IDQpICYmIHRoaXMu
X2NvbXBsZXRlKSkKKysgICAgICB0aGlzLnJlc3BvbmRUb1JlYWR5U3RhdGUodGhpcy50cmFuc3Bv
cnQucmVhZHlTdGF0ZSk7CisrICB9LAorKworKyAgc2V0UmVxdWVzdEhlYWRlcnM6IGZ1bmN0aW9u
KCkgeworKyAgICB2YXIgaGVhZGVycyA9IHsKKysgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdY
TUxIdHRwUmVxdWVzdCcsCisrICAgICAgJ1gtUHJvdG90eXBlLVZlcnNpb24nOiBQcm90b3R5cGUu
VmVyc2lvbiwKKysgICAgICAnQWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBh
cHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonCisrICAgIH07CisrCisrICAgIGlmICh0aGlz
Lm1ldGhvZCA9PSAncG9zdCcpIHsKKysgICAgICBoZWFkZXJzWydDb250ZW50LXR5cGUnXSA9IHRo
aXMub3B0aW9ucy5jb250ZW50VHlwZSArCisrICAgICAgICAodGhpcy5vcHRpb25zLmVuY29kaW5n
ID8gJzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJycpOworKworKyAgICAg
IC8qIEZvcmNlICJDb25uZWN0aW9uOiBjbG9zZSIgZm9yIG9sZGVyIE1vemlsbGEgYnJvd3NlcnMg
dG8gd29yaworKyAgICAgICAqIGFyb3VuZCBhIGJ1ZyB3aGVyZSBYTUxIdHRwUmVxdWVzdCBzZW5k
cyBhbiBpbmNvcnJlY3QKKysgICAgICAgKiBDb250ZW50LWxlbmd0aCBoZWFkZXIuIFNlZSBNb3pp
bGxhIEJ1Z3ppbGxhICMyNDY2NTEuCisrICAgICAgICovCisrICAgICAgaWYgKHRoaXMudHJhbnNw
b3J0Lm92ZXJyaWRlTWltZVR5cGUgJiYKKysgICAgICAgICAgKG5hdmlnYXRvci51c2VyQWdlbnQu
bWF0Y2goL0dlY2tvXC8oXGR7NH0pLykgfHwgWzAsMjAwNV0pWzFdIDwgMjAwNSkKKysgICAgICAg
ICAgICBoZWFkZXJzWydDb25uZWN0aW9uJ10gPSAnY2xvc2UnOworKyAgICB9CisrCisrICAgIGlm
ICh0eXBlb2YgdGhpcy5vcHRpb25zLnJlcXVlc3RIZWFkZXJzID09ICdvYmplY3QnKSB7CisrICAg
ICAgdmFyIGV4dHJhcyA9IHRoaXMub3B0aW9ucy5yZXF1ZXN0SGVhZGVyczsKKysKKysgICAgICBp
ZiAoT2JqZWN0LmlzRnVuY3Rpb24oZXh0cmFzLnB1c2gpKQorKyAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGxlbmd0aCA9IGV4dHJhcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkgKz0gMikKKysgICAgICAg
ICAgaGVhZGVyc1tleHRyYXNbaV1dID0gZXh0cmFzW2krMV07CisrICAgICAgZWxzZQorKyAgICAg
ICAgJEgoZXh0cmFzKS5lYWNoKGZ1bmN0aW9uKHBhaXIpIHsgaGVhZGVyc1twYWlyLmtleV0gPSBw
YWlyLnZhbHVlIH0pOworKyAgICB9CisrCisrICAgIGZvciAodmFyIG5hbWUgaW4gaGVhZGVycykK
KysgICAgICB0aGlzLnRyYW5zcG9ydC5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIGhlYWRlcnNbbmFt
ZV0pOworKyAgfSwKKysKKysgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCkgeworKyAgICB2YXIgc3RhdHVz
ID0gdGhpcy5nZXRTdGF0dXMoKTsKKysgICAgcmV0dXJuICFzdGF0dXMgfHwgKHN0YXR1cyA+PSAy
MDAgJiYgc3RhdHVzIDwgMzAwKSB8fCBzdGF0dXMgPT0gMzA0OworKyAgfSwKKysKKysgIGdldFN0
YXR1czogZnVuY3Rpb24oKSB7CisrICAgIHRyeSB7CisrICAgICAgaWYgKHRoaXMudHJhbnNwb3J0
LnN0YXR1cyA9PT0gMTIyMykgcmV0dXJuIDIwNDsKKysgICAgICByZXR1cm4gdGhpcy50cmFuc3Bv
cnQuc3RhdHVzIHx8IDA7CisrICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIDAgfQorKyAgfSwKKysK
KysgIHJlc3BvbmRUb1JlYWR5U3RhdGU6IGZ1bmN0aW9uKHJlYWR5U3RhdGUpIHsKKysgICAgdmFy
IHN0YXRlID0gQWpheC5SZXF1ZXN0LkV2ZW50c1tyZWFkeVN0YXRlXSwgcmVzcG9uc2UgPSBuZXcg
QWpheC5SZXNwb25zZSh0aGlzKTsKKysKKysgICAgaWYgKHN0YXRlID09ICdDb21wbGV0ZScpIHsK
KysgICAgICB0cnkgeworKyAgICAgICAgdGhpcy5fY29tcGxldGUgPSB0cnVlOworKyAgICAgICAg
KHRoaXMub3B0aW9uc1snb24nICsgcmVzcG9uc2Uuc3RhdHVzXQorKyAgICAgICAgIHx8IHRoaXMu
b3B0aW9uc1snb24nICsgKHRoaXMuc3VjY2VzcygpID8gJ1N1Y2Nlc3MnIDogJ0ZhaWx1cmUnKV0K
KysgICAgICAgICB8fCBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbikocmVzcG9uc2UsIHJlc3BvbnNl
LmhlYWRlckpTT04pOworKyAgICAgIH0gY2F0Y2ggKGUpIHsKKysgICAgICAgIHRoaXMuZGlzcGF0
Y2hFeGNlcHRpb24oZSk7CisrICAgICAgfQorKworKyAgICAgIHZhciBjb250ZW50VHlwZSA9IHJl
c3BvbnNlLmdldEhlYWRlcignQ29udGVudC10eXBlJyk7CisrICAgICAgaWYgKHRoaXMub3B0aW9u
cy5ldmFsSlMgPT0gJ2ZvcmNlJworKyAgICAgICAgICB8fCAodGhpcy5vcHRpb25zLmV2YWxKUyAm
JiB0aGlzLmlzU2FtZU9yaWdpbigpICYmIGNvbnRlbnRUeXBlCisrICAgICAgICAgICYmIGNvbnRl
bnRUeXBlLm1hdGNoKC9eXHMqKHRleHR8YXBwbGljYXRpb24pXC8oeC0pPyhqYXZhfGVjbWEpc2Ny
aXB0KDsuKik/XHMqJC9pKSkpCisrICAgICAgICB0aGlzLmV2YWxSZXNwb25zZSgpOworKyAgICB9
CisrCisrICAgIHRyeSB7CisrICAgICAgKHRoaXMub3B0aW9uc1snb24nICsgc3RhdGVdIHx8IFBy
b3RvdHlwZS5lbXB0eUZ1bmN0aW9uKShyZXNwb25zZSwgcmVzcG9uc2UuaGVhZGVySlNPTik7Cisr
ICAgICAgQWpheC5SZXNwb25kZXJzLmRpc3BhdGNoKCdvbicgKyBzdGF0ZSwgdGhpcywgcmVzcG9u
c2UsIHJlc3BvbnNlLmhlYWRlckpTT04pOworKyAgICB9IGNhdGNoIChlKSB7CisrICAgICAgdGhp
cy5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKKysgICAgfQorKworKyAgICBpZiAoc3RhdGUgPT0gJ0Nv
bXBsZXRlJykgeworKyAgICAgIHRoaXMudHJhbnNwb3J0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IFBy
b3RvdHlwZS5lbXB0eUZ1bmN0aW9uOworKyAgICB9CisrICB9LAorKworKyAgaXNTYW1lT3JpZ2lu
OiBmdW5jdGlvbigpIHsKKysgICAgdmFyIG0gPSB0aGlzLnVybC5tYXRjaCgvXlxzKmh0dHBzPzpc
L1wvW15cL10qLyk7CisrICAgIHJldHVybiAhbSB8fCAobVswXSA9PSAnI3twcm90b2NvbH0vLyN7
ZG9tYWlufSN7cG9ydH0nLmludGVycG9sYXRlKHsKKysgICAgICBwcm90b2NvbDogbG9jYXRpb24u
cHJvdG9jb2wsCisrICAgICAgZG9tYWluOiBkb2N1bWVudC5kb21haW4sCisrICAgICAgcG9ydDog
bG9jYXRpb24ucG9ydCA/ICc6JyArIGxvY2F0aW9uLnBvcnQgOiAnJworKyAgICB9KSk7CisrICB9
LAorKworKyAgZ2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKSB7CisrICAgIHRyeSB7CisrICAgICAg
cmV0dXJuIHRoaXMudHJhbnNwb3J0LmdldFJlc3BvbnNlSGVhZGVyKG5hbWUpIHx8IG51bGw7Cisr
ICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0KKysgIH0sCisrCisrICBldmFsUmVzcG9u
c2U6IGZ1bmN0aW9uKCkgeworKyAgICB0cnkgeworKyAgICAgIHJldHVybiBldmFsKCh0aGlzLnRy
YW5zcG9ydC5yZXNwb25zZVRleHQgfHwgJycpLnVuZmlsdGVySlNPTigpKTsKKysgICAgfSBjYXRj
aCAoZSkgeworKyAgICAgIHRoaXMuZGlzcGF0Y2hFeGNlcHRpb24oZSk7CisrICAgIH0KKysgIH0s
CisrCisrICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7CisrICAgICh0
aGlzLm9wdGlvbnMub25FeGNlcHRpb24gfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pKHRoaXMs
IGV4Y2VwdGlvbik7CisrICAgIEFqYXguUmVzcG9uZGVycy5kaXNwYXRjaCgnb25FeGNlcHRpb24n
LCB0aGlzLCBleGNlcHRpb24pOworKyAgfQorK30pOworKworK0FqYXguUmVxdWVzdC5FdmVudHMg
PQorKyAgWydVbmluaXRpYWxpemVkJywgJ0xvYWRpbmcnLCAnTG9hZGVkJywgJ0ludGVyYWN0aXZl
JywgJ0NvbXBsZXRlJ107CisrCisrCisrCisrCisrCisrCisrCisrCisrQWpheC5SZXNwb25zZSA9
IENsYXNzLmNyZWF0ZSh7CisrICBpbml0aWFsaXplOiBmdW5jdGlvbihyZXF1ZXN0KXsKKysgICAg
dGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDsKKysgICAgdmFyIHRyYW5zcG9ydCAgPSB0aGlzLnRyYW5z
cG9ydCAgPSByZXF1ZXN0LnRyYW5zcG9ydCwKKysgICAgICAgIHJlYWR5U3RhdGUgPSB0aGlzLnJl
YWR5U3RhdGUgPSB0cmFuc3BvcnQucmVhZHlTdGF0ZTsKKysKKysgICAgaWYgKChyZWFkeVN0YXRl
ID4gMiAmJiAhUHJvdG90eXBlLkJyb3dzZXIuSUUpIHx8IHJlYWR5U3RhdGUgPT0gNCkgeworKyAg
ICAgIHRoaXMuc3RhdHVzICAgICAgID0gdGhpcy5nZXRTdGF0dXMoKTsKKysgICAgICB0aGlzLnN0
YXR1c1RleHQgICA9IHRoaXMuZ2V0U3RhdHVzVGV4dCgpOworKyAgICAgIHRoaXMucmVzcG9uc2VU
ZXh0ID0gU3RyaW5nLmludGVycHJldCh0cmFuc3BvcnQucmVzcG9uc2VUZXh0KTsKKysgICAgICB0
aGlzLmhlYWRlckpTT04gICA9IHRoaXMuX2dldEhlYWRlckpTT04oKTsKKysgICAgfQorKworKyAg
ICBpZiAocmVhZHlTdGF0ZSA9PSA0KSB7CisrICAgICAgdmFyIHhtbCA9IHRyYW5zcG9ydC5yZXNw
b25zZVhNTDsKKysgICAgICB0aGlzLnJlc3BvbnNlWE1MICA9IE9iamVjdC5pc1VuZGVmaW5lZCh4
bWwpID8gbnVsbCA6IHhtbDsKKysgICAgICB0aGlzLnJlc3BvbnNlSlNPTiA9IHRoaXMuX2dldFJl
c3BvbnNlSlNPTigpOworKyAgICB9CisrICB9LAorKworKyAgc3RhdHVzOiAgICAgIDAsCisrCisr
ICBzdGF0dXNUZXh0OiAnJywKKysKKysgIGdldFN0YXR1czogQWpheC5SZXF1ZXN0LnByb3RvdHlw
ZS5nZXRTdGF0dXMsCisrCisrICBnZXRTdGF0dXNUZXh0OiBmdW5jdGlvbigpIHsKKysgICAgdHJ5
IHsKKysgICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuc3RhdHVzVGV4dCB8fCAnJzsKKysgICAg
fSBjYXRjaCAoZSkgeyByZXR1cm4gJycgfQorKyAgfSwKKysKKysgIGdldEhlYWRlcjogQWpheC5S
ZXF1ZXN0LnByb3RvdHlwZS5nZXRIZWFkZXIsCisrCisrICBnZXRBbGxIZWFkZXJzOiBmdW5jdGlv
bigpIHsKKysgICAgdHJ5IHsKKysgICAgICByZXR1cm4gdGhpcy5nZXRBbGxSZXNwb25zZUhlYWRl
cnMoKTsKKysgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbCB9CisrICB9LAorKworKyAgZ2V0
UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKG5hbWUpIHsKKysgICAgcmV0dXJuIHRoaXMudHJhbnNw
b3J0LmdldFJlc3BvbnNlSGVhZGVyKG5hbWUpOworKyAgfSwKKysKKysgIGdldEFsbFJlc3BvbnNl
SGVhZGVyczogZnVuY3Rpb24oKSB7CisrICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5nZXRBbGxS
ZXNwb25zZUhlYWRlcnMoKTsKKysgIH0sCisrCisrICBfZ2V0SGVhZGVySlNPTjogZnVuY3Rpb24o
KSB7CisrICAgIHZhciBqc29uID0gdGhpcy5nZXRIZWFkZXIoJ1gtSlNPTicpOworKyAgICBpZiAo
IWpzb24pIHJldHVybiBudWxsOworKyAgICBqc29uID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2Fw
ZShqc29uKSk7CisrICAgIHRyeSB7CisrICAgICAgcmV0dXJuIGpzb24uZXZhbEpTT04odGhpcy5y
ZXF1ZXN0Lm9wdGlvbnMuc2FuaXRpemVKU09OIHx8CisrICAgICAgICAhdGhpcy5yZXF1ZXN0Lmlz
U2FtZU9yaWdpbigpKTsKKysgICAgfSBjYXRjaCAoZSkgeworKyAgICAgIHRoaXMucmVxdWVzdC5k
aXNwYXRjaEV4Y2VwdGlvbihlKTsKKysgICAgfQorKyAgfSwKKysKKysgIF9nZXRSZXNwb25zZUpT
T046IGZ1bmN0aW9uKCkgeworKyAgICB2YXIgb3B0aW9ucyA9IHRoaXMucmVxdWVzdC5vcHRpb25z
OworKyAgICBpZiAoIW9wdGlvbnMuZXZhbEpTT04gfHwgKG9wdGlvbnMuZXZhbEpTT04gIT0gJ2Zv
cmNlJyAmJgorKyAgICAgICEodGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpIHx8ICcnKS5p
bmNsdWRlKCdhcHBsaWNhdGlvbi9qc29uJykpIHx8CisrICAgICAgICB0aGlzLnJlc3BvbnNlVGV4
dC5ibGFuaygpKQorKyAgICAgICAgICByZXR1cm4gbnVsbDsKKysgICAgdHJ5IHsKKysgICAgICBy
ZXR1cm4gdGhpcy5yZXNwb25zZVRleHQuZXZhbEpTT04ob3B0aW9ucy5zYW5pdGl6ZUpTT04gfHwK
KysgICAgICAgICF0aGlzLnJlcXVlc3QuaXNTYW1lT3JpZ2luKCkpOworKyAgICB9IGNhdGNoIChl
KSB7CisrICAgICAgdGhpcy5yZXF1ZXN0LmRpc3BhdGNoRXhjZXB0aW9uKGUpOworKyAgICB9Cisr
ICB9CisrfSk7CisrCisrQWpheC5VcGRhdGVyID0gQ2xhc3MuY3JlYXRlKEFqYXguUmVxdWVzdCwg
eworKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oJHN1cGVyLCBjb250YWluZXIsIHVybCwgb3B0aW9u
cykgeworKyAgICB0aGlzLmNvbnRhaW5lciA9IHsKKysgICAgICBzdWNjZXNzOiAoY29udGFpbmVy
LnN1Y2Nlc3MgfHwgY29udGFpbmVyKSwKKysgICAgICBmYWlsdXJlOiAoY29udGFpbmVyLmZhaWx1
cmUgfHwgKGNvbnRhaW5lci5zdWNjZXNzID8gbnVsbCA6IGNvbnRhaW5lcikpCisrICAgIH07Cisr
CisrICAgIG9wdGlvbnMgPSBPYmplY3QuY2xvbmUob3B0aW9ucyk7CisrICAgIHZhciBvbkNvbXBs
ZXRlID0gb3B0aW9ucy5vbkNvbXBsZXRlOworKyAgICBvcHRpb25zLm9uQ29tcGxldGUgPSAoZnVu
Y3Rpb24ocmVzcG9uc2UsIGpzb24pIHsKKysgICAgICB0aGlzLnVwZGF0ZUNvbnRlbnQocmVzcG9u
c2UucmVzcG9uc2VUZXh0KTsKKysgICAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24ob25Db21wbGV0
ZSkpIG9uQ29tcGxldGUocmVzcG9uc2UsIGpzb24pOworKyAgICB9KS5iaW5kKHRoaXMpOworKwor
KyAgICAkc3VwZXIodXJsLCBvcHRpb25zKTsKKysgIH0sCisrCisrICB1cGRhdGVDb250ZW50OiBm
dW5jdGlvbihyZXNwb25zZVRleHQpIHsKKysgICAgdmFyIHJlY2VpdmVyID0gdGhpcy5jb250YWlu
ZXJbdGhpcy5zdWNjZXNzKCkgPyAnc3VjY2VzcycgOiAnZmFpbHVyZSddLAorKyAgICAgICAgb3B0
aW9ucyA9IHRoaXMub3B0aW9uczsKKysKKysgICAgaWYgKCFvcHRpb25zLmV2YWxTY3JpcHRzKSBy
ZXNwb25zZVRleHQgPSByZXNwb25zZVRleHQuc3RyaXBTY3JpcHRzKCk7CisrCisrICAgIGlmIChy
ZWNlaXZlciA9ICQocmVjZWl2ZXIpKSB7CisrICAgICAgaWYgKG9wdGlvbnMuaW5zZXJ0aW9uKSB7
CisrICAgICAgICBpZiAoT2JqZWN0LmlzU3RyaW5nKG9wdGlvbnMuaW5zZXJ0aW9uKSkgeworKyAg
ICAgICAgICB2YXIgaW5zZXJ0aW9uID0geyB9OyBpbnNlcnRpb25bb3B0aW9ucy5pbnNlcnRpb25d
ID0gcmVzcG9uc2VUZXh0OworKyAgICAgICAgICByZWNlaXZlci5pbnNlcnQoaW5zZXJ0aW9uKTsK
KysgICAgICAgIH0KKysgICAgICAgIGVsc2Ugb3B0aW9ucy5pbnNlcnRpb24ocmVjZWl2ZXIsIHJl
c3BvbnNlVGV4dCk7CisrICAgICAgfQorKyAgICAgIGVsc2UgcmVjZWl2ZXIudXBkYXRlKHJlc3Bv
bnNlVGV4dCk7CisrICAgIH0KKysgIH0KKyt9KTsKKysKKytBamF4LlBlcmlvZGljYWxVcGRhdGVy
ID0gQ2xhc3MuY3JlYXRlKEFqYXguQmFzZSwgeworKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oJHN1
cGVyLCBjb250YWluZXIsIHVybCwgb3B0aW9ucykgeworKyAgICAkc3VwZXIob3B0aW9ucyk7Cisr
ICAgIHRoaXMub25Db21wbGV0ZSA9IHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlOworKworKyAgICB0
aGlzLmZyZXF1ZW5jeSA9ICh0aGlzLm9wdGlvbnMuZnJlcXVlbmN5IHx8IDIpOworKyAgICB0aGlz
LmRlY2F5ID0gKHRoaXMub3B0aW9ucy5kZWNheSB8fCAxKTsKKysKKysgICAgdGhpcy51cGRhdGVy
ID0geyB9OworKyAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjsKKysgICAgdGhpcy51cmwg
PSB1cmw7CisrCisrICAgIHRoaXMuc3RhcnQoKTsKKysgIH0sCisrCisrICBzdGFydDogZnVuY3Rp
b24oKSB7CisrICAgIHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlID0gdGhpcy51cGRhdGVDb21wbGV0
ZS5iaW5kKHRoaXMpOworKyAgICB0aGlzLm9uVGltZXJFdmVudCgpOworKyAgfSwKKysKKysgIHN0
b3A6IGZ1bmN0aW9uKCkgeworKyAgICB0aGlzLnVwZGF0ZXIub3B0aW9ucy5vbkNvbXBsZXRlID0g
dW5kZWZpbmVkOworKyAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7CisrICAgICh0aGlzLm9u
Q29tcGxldGUgfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7CisrICB9LAorKworKyAgdXBkYXRlQ29tcGxldGU6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7Cisr
ICAgIGlmICh0aGlzLm9wdGlvbnMuZGVjYXkpIHsKKysgICAgICB0aGlzLmRlY2F5ID0gKHJlc3Bv
bnNlLnJlc3BvbnNlVGV4dCA9PSB0aGlzLmxhc3RUZXh0ID8KKysgICAgICAgIHRoaXMuZGVjYXkg
KiB0aGlzLm9wdGlvbnMuZGVjYXkgOiAxKTsKKysKKysgICAgICB0aGlzLmxhc3RUZXh0ID0gcmVz
cG9uc2UucmVzcG9uc2VUZXh0OworKyAgICB9CisrICAgIHRoaXMudGltZXIgPSB0aGlzLm9uVGlt
ZXJFdmVudC5iaW5kKHRoaXMpLmRlbGF5KHRoaXMuZGVjYXkgKiB0aGlzLmZyZXF1ZW5jeSk7Cisr
ICB9LAorKworKyAgb25UaW1lckV2ZW50OiBmdW5jdGlvbigpIHsKKysgICAgdGhpcy51cGRhdGVy
ID0gbmV3IEFqYXguVXBkYXRlcih0aGlzLmNvbnRhaW5lciwgdGhpcy51cmwsIHRoaXMub3B0aW9u
cyk7CisrICB9CisrfSk7CisrCisrCisrZnVuY3Rpb24gJChlbGVtZW50KSB7CisrICBpZiAoYXJn
dW1lbnRzLmxlbmd0aCA+IDEpIHsKKysgICAgZm9yICh2YXIgaSA9IDAsIGVsZW1lbnRzID0gW10s
IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykKKysgICAgICBlbGVt
ZW50cy5wdXNoKCQoYXJndW1lbnRzW2ldKSk7CisrICAgIHJldHVybiBlbGVtZW50czsKKysgIH0K
KysgIGlmIChPYmplY3QuaXNTdHJpbmcoZWxlbWVudCkpCisrICAgIGVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChlbGVtZW50KTsKKysgIHJldHVybiBFbGVtZW50LmV4dGVuZChlbGVt
ZW50KTsKKyt9CisrCisraWYgKFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuWFBhdGgpIHsKKysg
IGRvY3VtZW50Ll9nZXRFbGVtZW50c0J5WFBhdGggPSBmdW5jdGlvbihleHByZXNzaW9uLCBwYXJl
bnRFbGVtZW50KSB7CisrICAgIHZhciByZXN1bHRzID0gW107CisrICAgIHZhciBxdWVyeSA9IGRv
Y3VtZW50LmV2YWx1YXRlKGV4cHJlc3Npb24sICQocGFyZW50RWxlbWVudCkgfHwgZG9jdW1lbnQs
CisrICAgICAgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIG51
bGwpOworKyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcXVlcnkuc25hcHNob3RMZW5ndGg7
IGkgPCBsZW5ndGg7IGkrKykKKysgICAgICByZXN1bHRzLnB1c2goRWxlbWVudC5leHRlbmQocXVl
cnkuc25hcHNob3RJdGVtKGkpKSk7CisrICAgIHJldHVybiByZXN1bHRzOworKyAgfTsKKyt9Cisr
CisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisraWYgKCFOb2RlKSB2YXIgTm9kZSA9IHsgfTsK
KysKKytpZiAoIU5vZGUuRUxFTUVOVF9OT0RFKSB7CisrICBPYmplY3QuZXh0ZW5kKE5vZGUsIHsK
KysgICAgRUxFTUVOVF9OT0RFOiAxLAorKyAgICBBVFRSSUJVVEVfTk9ERTogMiwKKysgICAgVEVY
VF9OT0RFOiAzLAorKyAgICBDREFUQV9TRUNUSU9OX05PREU6IDQsCisrICAgIEVOVElUWV9SRUZF
UkVOQ0VfTk9ERTogNSwKKysgICAgRU5USVRZX05PREU6IDYsCisrICAgIFBST0NFU1NJTkdfSU5T
VFJVQ1RJT05fTk9ERTogNywKKysgICAgQ09NTUVOVF9OT0RFOiA4LAorKyAgICBET0NVTUVOVF9O
T0RFOiA5LAorKyAgICBET0NVTUVOVF9UWVBFX05PREU6IDEwLAorKyAgICBET0NVTUVOVF9GUkFH
TUVOVF9OT0RFOiAxMSwKKysgICAgTk9UQVRJT05fTk9ERTogMTIKKysgIH0pOworK30KKysKKysK
KysKKysoZnVuY3Rpb24oZ2xvYmFsKSB7CisrICBmdW5jdGlvbiBzaG91bGRVc2VDYWNoZSh0YWdO
YW1lLCBhdHRyaWJ1dGVzKSB7CisrICAgIGlmICh0YWdOYW1lID09PSAnc2VsZWN0JykgcmV0dXJu
IGZhbHNlOworKyAgICBpZiAoJ3R5cGUnIGluIGF0dHJpYnV0ZXMpIHJldHVybiBmYWxzZTsKKysg
ICAgcmV0dXJuIHRydWU7CisrICB9CisrCisrICB2YXIgSEFTX0VYVEVOREVEX0NSRUFURV9FTEVN
RU5UX1NZTlRBWCA9IChmdW5jdGlvbigpeworKyAgICB0cnkgeworKyAgICAgIHZhciBlbCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJzxpbnB1dCBuYW1lPSJ4Ij4nKTsKKysgICAgICByZXR1cm4g
ZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmIGVsLm5hbWUgPT09ICd4JzsK
KysgICAgfQorKyAgICBjYXRjaChlcnIpIHsKKysgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysgIH0pKCk7CisrCisrICB2YXIgZWxlbWVudCA9IGdsb2JhbC5FbGVtZW50OworKworKyAgZ2xv
YmFsLkVsZW1lbnQgPSBmdW5jdGlvbih0YWdOYW1lLCBhdHRyaWJ1dGVzKSB7CisrICAgIGF0dHJp
YnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHsgfTsKKysgICAgdGFnTmFtZSA9IHRhZ05hbWUudG9Mb3dl
ckNhc2UoKTsKKysgICAgdmFyIGNhY2hlID0gRWxlbWVudC5jYWNoZTsKKysKKysgICAgaWYgKEhB
U19FWFRFTkRFRF9DUkVBVEVfRUxFTUVOVF9TWU5UQVggJiYgYXR0cmlidXRlcy5uYW1lKSB7Cisr
ICAgICAgdGFnTmFtZSA9ICc8JyArIHRhZ05hbWUgKyAnIG5hbWU9IicgKyBhdHRyaWJ1dGVzLm5h
bWUgKyAnIj4nOworKyAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLm5hbWU7CisrICAgICAgcmV0dXJu
IEVsZW1lbnQud3JpdGVBdHRyaWJ1dGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKSwg
YXR0cmlidXRlcyk7CisrICAgIH0KKysKKysgICAgaWYgKCFjYWNoZVt0YWdOYW1lXSkgY2FjaGVb
dGFnTmFtZV0gPSBFbGVtZW50LmV4dGVuZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUp
KTsKKysKKysgICAgdmFyIG5vZGUgPSBzaG91bGRVc2VDYWNoZSh0YWdOYW1lLCBhdHRyaWJ1dGVz
KSA/CisrICAgICBjYWNoZVt0YWdOYW1lXS5jbG9uZU5vZGUoZmFsc2UpIDogZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCh0YWdOYW1lKTsKKysKKysgICAgcmV0dXJuIEVsZW1lbnQud3JpdGVBdHRyaWJ1
dGUobm9kZSwgYXR0cmlidXRlcyk7CisrICB9OworKworKyAgT2JqZWN0LmV4dGVuZChnbG9iYWwu
RWxlbWVudCwgZWxlbWVudCB8fCB7IH0pOworKyAgaWYgKGVsZW1lbnQpIGdsb2JhbC5FbGVtZW50
LnByb3RvdHlwZSA9IGVsZW1lbnQucHJvdG90eXBlOworKworK30pKHRoaXMpOworKworK0VsZW1l
bnQuaWRDb3VudGVyID0gMTsKKytFbGVtZW50LmNhY2hlID0geyB9OworKworK0VsZW1lbnQuX3B1
cmdlRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgIHZhciB1aWQgPSBlbGVtZW50Ll9w
cm90b3R5cGVVSUQ7CisrICBpZiAodWlkKSB7CisrICAgIEVsZW1lbnQuc3RvcE9ic2VydmluZyhl
bGVtZW50KTsKKysgICAgZWxlbWVudC5fcHJvdG90eXBlVUlEID0gdm9pZCAwOworKyAgICBkZWxl
dGUgRWxlbWVudC5TdG9yYWdlW3VpZF07CisrICB9CisrfQorKworK0VsZW1lbnQuTWV0aG9kcyA9
IHsKKysgIHZpc2libGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgcmV0dXJuICQoZWxlbWVu
dCkuc3R5bGUuZGlzcGxheSAhPSAnbm9uZSc7CisrICB9LAorKworKyAgdG9nZ2xlOiBmdW5jdGlv
bihlbGVtZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICBFbGVtZW50W0Vs
ZW1lbnQudmlzaWJsZShlbGVtZW50KSA/ICdoaWRlJyA6ICdzaG93J10oZWxlbWVudCk7CisrICAg
IHJldHVybiBlbGVtZW50OworKyAgfSwKKysKKysgIGhpZGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
KysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9
ICdub25lJzsKKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9LAorKworKyAgc2hvdzogZnVuY3Rp
b24oZWxlbWVudCkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgZWxlbWVudC5z
dHlsZS5kaXNwbGF5ID0gJyc7CisrICAgIHJldHVybiBlbGVtZW50OworKyAgfSwKKysKKysgIHJl
bW92ZTogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysg
ICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpOworKyAgICByZXR1cm4g
ZWxlbWVudDsKKysgIH0sCisrCisrICB1cGRhdGU6IChmdW5jdGlvbigpeworKworKyAgICB2YXIg
U0VMRUNUX0VMRU1FTlRfSU5ORVJIVE1MX0JVR0dZID0gKGZ1bmN0aW9uKCl7CisrICAgICAgdmFy
IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksCisrICAgICAgICAgIGlzQnVn
Z3kgPSB0cnVlOworKyAgICAgIGVsLmlubmVySFRNTCA9ICI8b3B0aW9uIHZhbHVlPVwidGVzdFwi
PnRlc3Q8L29wdGlvbj4iOworKyAgICAgIGlmIChlbC5vcHRpb25zICYmIGVsLm9wdGlvbnNbMF0p
IHsKKysgICAgICAgIGlzQnVnZ3kgPSBlbC5vcHRpb25zWzBdLm5vZGVOYW1lLnRvVXBwZXJDYXNl
KCkgIT09ICJPUFRJT04iOworKyAgICAgIH0KKysgICAgICBlbCA9IG51bGw7CisrICAgICAgcmV0
dXJuIGlzQnVnZ3k7CisrICAgIH0pKCk7CisrCisrICAgIHZhciBUQUJMRV9FTEVNRU5UX0lOTkVS
SFRNTF9CVUdHWSA9IChmdW5jdGlvbigpeworKyAgICAgIHRyeSB7CisrICAgICAgICB2YXIgZWwg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOworKyAgICAgICAgaWYgKGVsICYmIGVs
LnRCb2RpZXMpIHsKKysgICAgICAgICAgZWwuaW5uZXJIVE1MID0gIjx0Ym9keT48dHI+PHRkPnRl
c3Q8L3RkPjwvdHI+PC90Ym9keT4iOworKyAgICAgICAgICB2YXIgaXNCdWdneSA9IHR5cGVvZiBl
bC50Qm9kaWVzWzBdID09ICJ1bmRlZmluZWQiOworKyAgICAgICAgICBlbCA9IG51bGw7CisrICAg
ICAgICAgIHJldHVybiBpc0J1Z2d5OworKyAgICAgICAgfQorKyAgICAgIH0gY2F0Y2ggKGUpIHsK
KysgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgIH0KKysgICAgfSkoKTsKKysKKysgICAgdmFy
IExJTktfRUxFTUVOVF9JTk5FUkhUTUxfQlVHR1kgPSAoZnVuY3Rpb24oKSB7CisrICAgICAgdHJ5
IHsKKysgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworKyAg
ICAgICAgZWwuaW5uZXJIVE1MID0gIjxsaW5rPiI7CisrICAgICAgICB2YXIgaXNCdWdneSA9IChl
bC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCk7CisrICAgICAgICBlbCA9IG51bGw7CisrICAgICAg
ICByZXR1cm4gaXNCdWdneTsKKysgICAgICB9IGNhdGNoKGUpIHsKKysgICAgICAgIHJldHVybiB0
cnVlOworKyAgICAgIH0KKysgICAgfSkoKTsKKysKKysgICAgdmFyIEFOWV9JTk5FUkhUTUxfQlVH
R1kgPSBTRUxFQ1RfRUxFTUVOVF9JTk5FUkhUTUxfQlVHR1kgfHwKKysgICAgIFRBQkxFX0VMRU1F
TlRfSU5ORVJIVE1MX0JVR0dZIHx8IExJTktfRUxFTUVOVF9JTk5FUkhUTUxfQlVHR1k7CisrCisr
ICAgIHZhciBTQ1JJUFRfRUxFTUVOVF9SRUpFQ1RTX1RFWFROT0RFX0FQUEVORElORyA9IChmdW5j
dGlvbiAoKSB7CisrICAgICAgdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQi
KSwKKysgICAgICAgICAgaXNCdWdneSA9IGZhbHNlOworKyAgICAgIHRyeSB7CisrICAgICAgICBz
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7CisrICAgICAgICBpc0J1
Z2d5ID0gIXMuZmlyc3RDaGlsZCB8fAorKyAgICAgICAgICBzLmZpcnN0Q2hpbGQgJiYgcy5maXJz
dENoaWxkLm5vZGVUeXBlICE9PSAzOworKyAgICAgIH0gY2F0Y2ggKGUpIHsKKysgICAgICAgIGlz
QnVnZ3kgPSB0cnVlOworKyAgICAgIH0KKysgICAgICBzID0gbnVsbDsKKysgICAgICByZXR1cm4g
aXNCdWdneTsKKysgICAgfSkoKTsKKysKKysKKysgICAgZnVuY3Rpb24gdXBkYXRlKGVsZW1lbnQs
IGNvbnRlbnQpIHsKKysgICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgICB2YXIgcHVy
Z2VFbGVtZW50ID0gRWxlbWVudC5fcHVyZ2VFbGVtZW50OworKworKyAgICAgIHZhciBkZXNjZW5k
YW50cyA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSwKKysgICAgICAgaSA9IGRl
c2NlbmRhbnRzLmxlbmd0aDsKKysgICAgICB3aGlsZSAoaS0tKSBwdXJnZUVsZW1lbnQoZGVzY2Vu
ZGFudHNbaV0pOworKworKyAgICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQudG9FbGVtZW50KQor
KyAgICAgICAgY29udGVudCA9IGNvbnRlbnQudG9FbGVtZW50KCk7CisrCisrICAgICAgaWYgKE9i
amVjdC5pc0VsZW1lbnQoY29udGVudCkpCisrICAgICAgICByZXR1cm4gZWxlbWVudC51cGRhdGUo
KS5pbnNlcnQoY29udGVudCk7CisrCisrICAgICAgY29udGVudCA9IE9iamVjdC50b0hUTUwoY29u
dGVudCk7CisrCisrICAgICAgdmFyIHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9VcHBlckNh
c2UoKTsKKysKKysgICAgICBpZiAodGFnTmFtZSA9PT0gJ1NDUklQVCcgJiYgU0NSSVBUX0VMRU1F
TlRfUkVKRUNUU19URVhUTk9ERV9BUFBFTkRJTkcpIHsKKysgICAgICAgIGVsZW1lbnQudGV4dCA9
IGNvbnRlbnQ7CisrICAgICAgICByZXR1cm4gZWxlbWVudDsKKysgICAgICB9CisrCisrICAgICAg
aWYgKEFOWV9JTk5FUkhUTUxfQlVHR1kpIHsKKysgICAgICAgIGlmICh0YWdOYW1lIGluIEVsZW1l
bnQuX2luc2VydGlvblRyYW5zbGF0aW9ucy50YWdzKSB7CisrICAgICAgICAgIHdoaWxlIChlbGVt
ZW50LmZpcnN0Q2hpbGQpIHsKKysgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1l
bnQuZmlyc3RDaGlsZCk7CisrICAgICAgICAgIH0KKysgICAgICAgICAgRWxlbWVudC5fZ2V0Q29u
dGVudEZyb21Bbm9ueW1vdXNFbGVtZW50KHRhZ05hbWUsIGNvbnRlbnQuc3RyaXBTY3JpcHRzKCkp
CisrICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24obm9kZSkgeworKyAgICAgICAgICAgICAgZWxl
bWVudC5hcHBlbmRDaGlsZChub2RlKQorKyAgICAgICAgICAgIH0pOworKyAgICAgICAgfSBlbHNl
IGlmIChMSU5LX0VMRU1FTlRfSU5ORVJIVE1MX0JVR0dZICYmIE9iamVjdC5pc1N0cmluZyhjb250
ZW50KSAmJiBjb250ZW50LmluZGV4T2YoJzxsaW5rJykgPiAtMSkgeworKyAgICAgICAgICB3aGls
ZSAoZWxlbWVudC5maXJzdENoaWxkKSB7CisrICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDaGls
ZChlbGVtZW50LmZpcnN0Q2hpbGQpOworKyAgICAgICAgICB9CisrICAgICAgICAgIHZhciBub2Rl
cyA9IEVsZW1lbnQuX2dldENvbnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCh0YWdOYW1lLCBjb250
ZW50LnN0cmlwU2NyaXB0cygpLCB0cnVlKTsKKysgICAgICAgICAgbm9kZXMuZWFjaChmdW5jdGlv
bihub2RlKSB7IGVsZW1lbnQuYXBwZW5kQ2hpbGQobm9kZSkgfSk7CisrICAgICAgICB9CisrICAg
ICAgICBlbHNlIHsKKysgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50LnN0cmlw
U2NyaXB0cygpOworKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBlbHNlIHsKKysgICAgICAg
IGVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudC5zdHJpcFNjcmlwdHMoKTsKKysgICAgICB9Cisr
CisrICAgICAgY29udGVudC5ldmFsU2NyaXB0cy5iaW5kKGNvbnRlbnQpLmRlZmVyKCk7CisrICAg
ICAgcmV0dXJuIGVsZW1lbnQ7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHVwZGF0ZTsKKysgIH0p
KCksCisrCisrICByZXBsYWNlOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7CisrICAgIGVs
ZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICBpZiAoY29udGVudCAmJiBjb250ZW50LnRvRWxlbWVu
dCkgY29udGVudCA9IGNvbnRlbnQudG9FbGVtZW50KCk7CisrICAgIGVsc2UgaWYgKCFPYmplY3Qu
aXNFbGVtZW50KGNvbnRlbnQpKSB7CisrICAgICAgY29udGVudCA9IE9iamVjdC50b0hUTUwoY29u
dGVudCk7CisrICAgICAgdmFyIHJhbmdlID0gZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZVJh
bmdlKCk7CisrICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShlbGVtZW50KTsKKysgICAgICBjb250ZW50
LmV2YWxTY3JpcHRzLmJpbmQoY29udGVudCkuZGVmZXIoKTsKKysgICAgICBjb250ZW50ID0gcmFu
Z2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnRlbnQuc3RyaXBTY3JpcHRzKCkpOworKyAg
ICB9CisrICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29udGVudCwgZWxlbWVu
dCk7CisrICAgIHJldHVybiBlbGVtZW50OworKyAgfSwKKysKKysgIGluc2VydDogZnVuY3Rpb24o
ZWxlbWVudCwgaW5zZXJ0aW9ucykgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysKKysg
ICAgaWYgKE9iamVjdC5pc1N0cmluZyhpbnNlcnRpb25zKSB8fCBPYmplY3QuaXNOdW1iZXIoaW5z
ZXJ0aW9ucykgfHwKKysgICAgICAgIE9iamVjdC5pc0VsZW1lbnQoaW5zZXJ0aW9ucykgfHwgKGlu
c2VydGlvbnMgJiYgKGluc2VydGlvbnMudG9FbGVtZW50IHx8IGluc2VydGlvbnMudG9IVE1MKSkp
CisrICAgICAgICAgIGluc2VydGlvbnMgPSB7Ym90dG9tOmluc2VydGlvbnN9OworKworKyAgICB2
YXIgY29udGVudCwgaW5zZXJ0LCB0YWdOYW1lLCBjaGlsZE5vZGVzOworKworKyAgICBmb3IgKHZh
ciBwb3NpdGlvbiBpbiBpbnNlcnRpb25zKSB7CisrICAgICAgY29udGVudCAgPSBpbnNlcnRpb25z
W3Bvc2l0aW9uXTsKKysgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uLnRvTG93ZXJDYXNlKCk7Cisr
ICAgICAgaW5zZXJ0ID0gRWxlbWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zW3Bvc2l0aW9uXTsK
KysKKysgICAgICBpZiAoY29udGVudCAmJiBjb250ZW50LnRvRWxlbWVudCkgY29udGVudCA9IGNv
bnRlbnQudG9FbGVtZW50KCk7CisrICAgICAgaWYgKE9iamVjdC5pc0VsZW1lbnQoY29udGVudCkp
IHsKKysgICAgICAgIGluc2VydChlbGVtZW50LCBjb250ZW50KTsKKysgICAgICAgIGNvbnRpbnVl
OworKyAgICAgIH0KKysKKysgICAgICBjb250ZW50ID0gT2JqZWN0LnRvSFRNTChjb250ZW50KTsK
KysKKysgICAgICB0YWdOYW1lID0gKChwb3NpdGlvbiA9PSAnYmVmb3JlJyB8fCBwb3NpdGlvbiA9
PSAnYWZ0ZXInKQorKyAgICAgICAgPyBlbGVtZW50LnBhcmVudE5vZGUgOiBlbGVtZW50KS50YWdO
YW1lLnRvVXBwZXJDYXNlKCk7CisrCisrICAgICAgY2hpbGROb2RlcyA9IEVsZW1lbnQuX2dldENv
bnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCh0YWdOYW1lLCBjb250ZW50LnN0cmlwU2NyaXB0cygp
KTsKKysKKysgICAgICBpZiAocG9zaXRpb24gPT0gJ3RvcCcgfHwgcG9zaXRpb24gPT0gJ2FmdGVy
JykgY2hpbGROb2Rlcy5yZXZlcnNlKCk7CisrICAgICAgY2hpbGROb2Rlcy5lYWNoKGluc2VydC5j
dXJyeShlbGVtZW50KSk7CisrCisrICAgICAgY29udGVudC5ldmFsU2NyaXB0cy5iaW5kKGNvbnRl
bnQpLmRlZmVyKCk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9LAorKwor
KyAgd3JhcDogZnVuY3Rpb24oZWxlbWVudCwgd3JhcHBlciwgYXR0cmlidXRlcykgeworKyAgICBl
bGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgaWYgKE9iamVjdC5pc0VsZW1lbnQod3JhcHBlcikp
CisrICAgICAgJCh3cmFwcGVyKS53cml0ZUF0dHJpYnV0ZShhdHRyaWJ1dGVzIHx8IHsgfSk7Cisr
ICAgIGVsc2UgaWYgKE9iamVjdC5pc1N0cmluZyh3cmFwcGVyKSkgd3JhcHBlciA9IG5ldyBFbGVt
ZW50KHdyYXBwZXIsIGF0dHJpYnV0ZXMpOworKyAgICBlbHNlIHdyYXBwZXIgPSBuZXcgRWxlbWVu
dCgnZGl2Jywgd3JhcHBlcik7CisrICAgIGlmIChlbGVtZW50LnBhcmVudE5vZGUpCisrICAgICAg
ZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh3cmFwcGVyLCBlbGVtZW50KTsKKysgICAg
d3JhcHBlci5hcHBlbmRDaGlsZChlbGVtZW50KTsKKysgICAgcmV0dXJuIHdyYXBwZXI7CisrICB9
LAorKworKyAgaW5zcGVjdDogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICBlbGVtZW50ID0gJChl
bGVtZW50KTsKKysgICAgdmFyIHJlc3VsdCA9ICc8JyArIGVsZW1lbnQudGFnTmFtZS50b0xvd2Vy
Q2FzZSgpOworKyAgICAkSCh7J2lkJzogJ2lkJywgJ2NsYXNzTmFtZSc6ICdjbGFzcyd9KS5lYWNo
KGZ1bmN0aW9uKHBhaXIpIHsKKysgICAgICB2YXIgcHJvcGVydHkgPSBwYWlyLmZpcnN0KCksCisr
ICAgICAgICAgIGF0dHJpYnV0ZSA9IHBhaXIubGFzdCgpLAorKyAgICAgICAgICB2YWx1ZSA9IChl
bGVtZW50W3Byb3BlcnR5XSB8fCAnJykudG9TdHJpbmcoKTsKKysgICAgICBpZiAodmFsdWUpIHJl
c3VsdCArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPScgKyB2YWx1ZS5pbnNwZWN0KHRydWUpOworKyAg
ICB9KTsKKysgICAgcmV0dXJuIHJlc3VsdCArICc+JzsKKysgIH0sCisrCisrICByZWN1cnNpdmVs
eUNvbGxlY3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCBtYXhpbXVtTGVuZ3RoKSB7Cisr
ICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICBtYXhpbXVtTGVuZ3RoID0gbWF4aW11bUxl
bmd0aCB8fCAtMTsKKysgICAgdmFyIGVsZW1lbnRzID0gW107CisrCisrICAgIHdoaWxlIChlbGVt
ZW50ID0gZWxlbWVudFtwcm9wZXJ0eV0pIHsKKysgICAgICBpZiAoZWxlbWVudC5ub2RlVHlwZSA9
PSAxKQorKyAgICAgICAgZWxlbWVudHMucHVzaChFbGVtZW50LmV4dGVuZChlbGVtZW50KSk7Cisr
ICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PSBtYXhpbXVtTGVuZ3RoKQorKyAgICAgICAgYnJl
YWs7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGVsZW1lbnRzOworKyAgfSwKKysKKysgIGFuY2Vz
dG9yczogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICByZXR1cm4gRWxlbWVudC5yZWN1cnNpdmVs
eUNvbGxlY3QoZWxlbWVudCwgJ3BhcmVudE5vZGUnKTsKKysgIH0sCisrCisrICBkZXNjZW5kYW50
czogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICByZXR1cm4gRWxlbWVudC5zZWxlY3QoZWxlbWVu
dCwgIioiKTsKKysgIH0sCisrCisrICBmaXJzdERlc2NlbmRhbnQ6IGZ1bmN0aW9uKGVsZW1lbnQp
IHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCkuZmlyc3RDaGlsZDsKKysgICAgd2hpbGUgKGVs
ZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSAhPSAxKSBlbGVtZW50ID0gZWxlbWVudC5uZXh0U2li
bGluZzsKKysgICAgcmV0dXJuICQoZWxlbWVudCk7CisrICB9LAorKworKyAgaW1tZWRpYXRlRGVz
Y2VuZGFudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgdmFyIHJlc3VsdHMgPSBbXSwgY2hp
bGQgPSAkKGVsZW1lbnQpLmZpcnN0Q2hpbGQ7CisrICAgIHdoaWxlIChjaGlsZCkgeworKyAgICAg
IGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkgeworKyAgICAgICAgcmVzdWx0cy5wdXNoKEVsZW1l
bnQuZXh0ZW5kKGNoaWxkKSk7CisrICAgICAgfQorKyAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNp
Ymxpbmc7CisrICAgIH0KKysgICAgcmV0dXJuIHJlc3VsdHM7CisrICB9LAorKworKyAgcHJldmlv
dXNTaWJsaW5nczogZnVuY3Rpb24oZWxlbWVudCwgbWF4aW11bUxlbmd0aCkgeworKyAgICByZXR1
cm4gRWxlbWVudC5yZWN1cnNpdmVseUNvbGxlY3QoZWxlbWVudCwgJ3ByZXZpb3VzU2libGluZycp
OworKyAgfSwKKysKKysgIG5leHRTaWJsaW5nczogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICBy
ZXR1cm4gRWxlbWVudC5yZWN1cnNpdmVseUNvbGxlY3QoZWxlbWVudCwgJ25leHRTaWJsaW5nJyk7
CisrICB9LAorKworKyAgc2libGluZ3M6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgZWxlbWVu
dCA9ICQoZWxlbWVudCk7CisrICAgIHJldHVybiBFbGVtZW50LnByZXZpb3VzU2libGluZ3MoZWxl
bWVudCkucmV2ZXJzZSgpCisrICAgICAgLmNvbmNhdChFbGVtZW50Lm5leHRTaWJsaW5ncyhlbGVt
ZW50KSk7CisrICB9LAorKworKyAgbWF0Y2g6IGZ1bmN0aW9uKGVsZW1lbnQsIHNlbGVjdG9yKSB7
CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICBpZiAoT2JqZWN0LmlzU3RyaW5nKHNl
bGVjdG9yKSkKKysgICAgICByZXR1cm4gUHJvdG90eXBlLlNlbGVjdG9yLm1hdGNoKGVsZW1lbnQs
IHNlbGVjdG9yKTsKKysgICAgcmV0dXJuIHNlbGVjdG9yLm1hdGNoKGVsZW1lbnQpOworKyAgfSwK
KysKKysgIHVwOiBmdW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9uLCBpbmRleCkgeworKyAgICBl
bGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgcmV0
dXJuICQoZWxlbWVudC5wYXJlbnROb2RlKTsKKysgICAgdmFyIGFuY2VzdG9ycyA9IEVsZW1lbnQu
YW5jZXN0b3JzKGVsZW1lbnQpOworKyAgICByZXR1cm4gT2JqZWN0LmlzTnVtYmVyKGV4cHJlc3Np
b24pID8gYW5jZXN0b3JzW2V4cHJlc3Npb25dIDoKKysgICAgICBQcm90b3R5cGUuU2VsZWN0b3Iu
ZmluZChhbmNlc3RvcnMsIGV4cHJlc3Npb24sIGluZGV4KTsKKysgIH0sCisrCisrICBkb3duOiBm
dW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9uLCBpbmRleCkgeworKyAgICBlbGVtZW50ID0gJChl
bGVtZW50KTsKKysgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgcmV0dXJuIEVsZW1lbnQu
Zmlyc3REZXNjZW5kYW50KGVsZW1lbnQpOworKyAgICByZXR1cm4gT2JqZWN0LmlzTnVtYmVyKGV4
cHJlc3Npb24pID8gRWxlbWVudC5kZXNjZW5kYW50cyhlbGVtZW50KVtleHByZXNzaW9uXSA6Cisr
ICAgICAgRWxlbWVudC5zZWxlY3QoZWxlbWVudCwgZXhwcmVzc2lvbilbaW5kZXggfHwgMF07Cisr
ICB9LAorKworKyAgcHJldmlvdXM6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIGluZGV4
KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICBpZiAoT2JqZWN0LmlzTnVtYmVy
KGV4cHJlc3Npb24pKSBpbmRleCA9IGV4cHJlc3Npb24sIGV4cHJlc3Npb24gPSBmYWxzZTsKKysg
ICAgaWYgKCFPYmplY3QuaXNOdW1iZXIoaW5kZXgpKSBpbmRleCA9IDA7CisrCisrICAgIGlmIChl
eHByZXNzaW9uKSB7CisrICAgICAgcmV0dXJuIFByb3RvdHlwZS5TZWxlY3Rvci5maW5kKGVsZW1l
bnQucHJldmlvdXNTaWJsaW5ncygpLCBleHByZXNzaW9uLCBpbmRleCk7CisrICAgIH0gZWxzZSB7
CisrICAgICAgcmV0dXJuIGVsZW1lbnQucmVjdXJzaXZlbHlDb2xsZWN0KCJwcmV2aW91c1NpYmxp
bmciLCBpbmRleCArIDEpW2luZGV4XTsKKysgICAgfQorKyAgfSwKKysKKysgIG5leHQ6IGZ1bmN0
aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIGluZGV4KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1l
bnQpOworKyAgICBpZiAoT2JqZWN0LmlzTnVtYmVyKGV4cHJlc3Npb24pKSBpbmRleCA9IGV4cHJl
c3Npb24sIGV4cHJlc3Npb24gPSBmYWxzZTsKKysgICAgaWYgKCFPYmplY3QuaXNOdW1iZXIoaW5k
ZXgpKSBpbmRleCA9IDA7CisrCisrICAgIGlmIChleHByZXNzaW9uKSB7CisrICAgICAgcmV0dXJu
IFByb3RvdHlwZS5TZWxlY3Rvci5maW5kKGVsZW1lbnQubmV4dFNpYmxpbmdzKCksIGV4cHJlc3Np
b24sIGluZGV4KTsKKysgICAgfSBlbHNlIHsKKysgICAgICB2YXIgbWF4aW11bUxlbmd0aCA9IE9i
amVjdC5pc051bWJlcihpbmRleCkgPyBpbmRleCArIDEgOiAxOworKyAgICAgIHJldHVybiBlbGVt
ZW50LnJlY3Vyc2l2ZWx5Q29sbGVjdCgibmV4dFNpYmxpbmciLCBpbmRleCArIDEpW2luZGV4XTsK
KysgICAgfQorKyAgfSwKKysKKysKKysgIHNlbGVjdDogZnVuY3Rpb24oZWxlbWVudCkgeworKyAg
ICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgdmFyIGV4cHJlc3Npb25zID0gQXJyYXkucHJv
dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKS5qb2luKCcsICcpOworKyAgICByZXR1cm4g
UHJvdG90eXBlLlNlbGVjdG9yLnNlbGVjdChleHByZXNzaW9ucywgZWxlbWVudCk7CisrICB9LAor
KworKyAgYWRqYWNlbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxl
bWVudCk7CisrICAgIHZhciBleHByZXNzaW9ucyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs
KGFyZ3VtZW50cywgMSkuam9pbignLCAnKTsKKysgICAgcmV0dXJuIFByb3RvdHlwZS5TZWxlY3Rv
ci5zZWxlY3QoZXhwcmVzc2lvbnMsIGVsZW1lbnQucGFyZW50Tm9kZSkud2l0aG91dChlbGVtZW50
KTsKKysgIH0sCisrCisrICBpZGVudGlmeTogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKKysgICAgdmFyIGlkID0gRWxlbWVudC5yZWFkQXR0cmlidXRlKGVs
ZW1lbnQsICdpZCcpOworKyAgICBpZiAoaWQpIHJldHVybiBpZDsKKysgICAgZG8geyBpZCA9ICdh
bm9ueW1vdXNfZWxlbWVudF8nICsgRWxlbWVudC5pZENvdW50ZXIrKyB9IHdoaWxlICgkKGlkKSk7
CisrICAgIEVsZW1lbnQud3JpdGVBdHRyaWJ1dGUoZWxlbWVudCwgJ2lkJywgaWQpOworKyAgICBy
ZXR1cm4gaWQ7CisrICB9LAorKworKyAgcmVhZEF0dHJpYnV0ZTogZnVuY3Rpb24oZWxlbWVudCwg
bmFtZSkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgaWYgKFByb3RvdHlwZS5C
cm93c2VyLklFKSB7CisrICAgICAgdmFyIHQgPSBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlv
bnMucmVhZDsKKysgICAgICBpZiAodC52YWx1ZXNbbmFtZV0pIHJldHVybiB0LnZhbHVlc1tuYW1l
XShlbGVtZW50LCBuYW1lKTsKKysgICAgICBpZiAodC5uYW1lc1tuYW1lXSkgbmFtZSA9IHQubmFt
ZXNbbmFtZV07CisrICAgICAgaWYgKG5hbWUuaW5jbHVkZSgnOicpKSB7CisrICAgICAgICByZXR1
cm4gKCFlbGVtZW50LmF0dHJpYnV0ZXMgfHwgIWVsZW1lbnQuYXR0cmlidXRlc1tuYW1lXSkgPyBu
dWxsIDoKKysgICAgICAgICBlbGVtZW50LmF0dHJpYnV0ZXNbbmFtZV0udmFsdWU7CisrICAgICAg
fQorKyAgICB9CisrICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsKKysgIH0s
CisrCisrICB3cml0ZUF0dHJpYnV0ZTogZnVuY3Rpb24oZWxlbWVudCwgbmFtZSwgdmFsdWUpIHsK
KysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIHZhciBhdHRyaWJ1dGVzID0geyB9LCB0
ID0gRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLndyaXRlOworKworKyAgICBpZiAodHlw
ZW9mIG5hbWUgPT0gJ29iamVjdCcpIGF0dHJpYnV0ZXMgPSBuYW1lOworKyAgICBlbHNlIGF0dHJp
YnV0ZXNbbmFtZV0gPSBPYmplY3QuaXNVbmRlZmluZWQodmFsdWUpID8gdHJ1ZSA6IHZhbHVlOwor
KworKyAgICBmb3IgKHZhciBhdHRyIGluIGF0dHJpYnV0ZXMpIHsKKysgICAgICBuYW1lID0gdC5u
YW1lc1thdHRyXSB8fCBhdHRyOworKyAgICAgIHZhbHVlID0gYXR0cmlidXRlc1thdHRyXTsKKysg
ICAgICBpZiAodC52YWx1ZXNbYXR0cl0pIG5hbWUgPSB0LnZhbHVlc1thdHRyXShlbGVtZW50LCB2
YWx1ZSk7CisrICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gbnVsbCkKKysg
ICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpOworKyAgICAgIGVsc2UgaWYgKHZh
bHVlID09PSB0cnVlKQorKyAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgbmFtZSk7
CisrICAgICAgZWxzZSBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CisrICAgIH0K
KysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9LAorKworKyAgZ2V0SGVpZ2h0OiBmdW5jdGlvbihl
bGVtZW50KSB7CisrICAgIHJldHVybiBFbGVtZW50LmdldERpbWVuc2lvbnMoZWxlbWVudCkuaGVp
Z2h0OworKyAgfSwKKysKKysgIGdldFdpZHRoOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgIHJl
dHVybiBFbGVtZW50LmdldERpbWVuc2lvbnMoZWxlbWVudCkud2lkdGg7CisrICB9LAorKworKyAg
Y2xhc3NOYW1lczogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICByZXR1cm4gbmV3IEVsZW1lbnQu
Q2xhc3NOYW1lcyhlbGVtZW50KTsKKysgIH0sCisrCisrICBoYXNDbGFzc05hbWU6IGZ1bmN0aW9u
KGVsZW1lbnQsIGNsYXNzTmFtZSkgeworKyAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkp
IHJldHVybjsKKysgICAgdmFyIGVsZW1lbnRDbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZTsK
KysgICAgcmV0dXJuIChlbGVtZW50Q2xhc3NOYW1lLmxlbmd0aCA+IDAgJiYgKGVsZW1lbnRDbGFz
c05hbWUgPT0gY2xhc3NOYW1lIHx8CisrICAgICAgbmV3IFJlZ0V4cCgiKF58XFxzKSIgKyBjbGFz
c05hbWUgKyAiKFxcc3wkKSIpLnRlc3QoZWxlbWVudENsYXNzTmFtZSkpKTsKKysgIH0sCisrCisr
ICBhZGRDbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgeworKyAgICBpZiAo
IShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKKysgICAgaWYgKCFFbGVtZW50Lmhhc0Ns
YXNzTmFtZShlbGVtZW50LCBjbGFzc05hbWUpKQorKyAgICAgIGVsZW1lbnQuY2xhc3NOYW1lICs9
IChlbGVtZW50LmNsYXNzTmFtZSA/ICcgJyA6ICcnKSArIGNsYXNzTmFtZTsKKysgICAgcmV0dXJu
IGVsZW1lbnQ7CisrICB9LAorKworKyAgcmVtb3ZlQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVtZW50
LCBjbGFzc05hbWUpIHsKKysgICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47
CisrICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZSgKKysg
ICAgICBuZXcgUmVnRXhwKCIoXnxcXHMrKSIgKyBjbGFzc05hbWUgKyAiKFxccyt8JCkiKSwgJyAn
KS5zdHJpcCgpOworKyAgICByZXR1cm4gZWxlbWVudDsKKysgIH0sCisrCisrICB0b2dnbGVDbGFz
c05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgeworKyAgICBpZiAoIShlbGVtZW50
ID0gJChlbGVtZW50KSkpIHJldHVybjsKKysgICAgcmV0dXJuIEVsZW1lbnRbRWxlbWVudC5oYXND
bGFzc05hbWUoZWxlbWVudCwgY2xhc3NOYW1lKSA/CisrICAgICAgJ3JlbW92ZUNsYXNzTmFtZScg
OiAnYWRkQ2xhc3NOYW1lJ10oZWxlbWVudCwgY2xhc3NOYW1lKTsKKysgIH0sCisrCisrICBjbGVh
bldoaXRlc3BhY2U6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVu
dCk7CisrICAgIHZhciBub2RlID0gZWxlbWVudC5maXJzdENoaWxkOworKyAgICB3aGlsZSAobm9k
ZSkgeworKyAgICAgIHZhciBuZXh0Tm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7CisrICAgICAgaWYg
KG5vZGUubm9kZVR5cGUgPT0gMyAmJiAhL1xTLy50ZXN0KG5vZGUubm9kZVZhbHVlKSkKKysgICAg
ICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSk7CisrICAgICAgbm9kZSA9IG5leHROb2RlOwor
KyAgICB9CisrICAgIHJldHVybiBlbGVtZW50OworKyAgfSwKKysKKysgIGVtcHR5OiBmdW5jdGlv
bihlbGVtZW50KSB7CisrICAgIHJldHVybiAkKGVsZW1lbnQpLmlubmVySFRNTC5ibGFuaygpOwor
KyAgfSwKKysKKysgIGRlc2NlbmRhbnRPZjogZnVuY3Rpb24oZWxlbWVudCwgYW5jZXN0b3IpIHsK
KysgICAgZWxlbWVudCA9ICQoZWxlbWVudCksIGFuY2VzdG9yID0gJChhbmNlc3Rvcik7CisrCisr
ICAgIGlmIChlbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKQorKyAgICAgIHJldHVybiAo
ZWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhbmNlc3RvcikgJiA4KSA9PT0gODsKKysK
KysgICAgaWYgKGFuY2VzdG9yLmNvbnRhaW5zKQorKyAgICAgIHJldHVybiBhbmNlc3Rvci5jb250
YWlucyhlbGVtZW50KSAmJiBhbmNlc3RvciAhPT0gZWxlbWVudDsKKysKKysgICAgd2hpbGUgKGVs
ZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpCisrICAgICAgaWYgKGVsZW1lbnQgPT0gYW5jZXN0
b3IpIHJldHVybiB0cnVlOworKworKyAgICByZXR1cm4gZmFsc2U7CisrICB9LAorKworKyAgc2Ny
b2xsVG86IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Cisr
ICAgIHZhciBwb3MgPSBFbGVtZW50LmN1bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7CisrICAgIHdp
bmRvdy5zY3JvbGxUbyhwb3NbMF0sIHBvc1sxXSk7CisrICAgIHJldHVybiBlbGVtZW50OworKyAg
fSwKKysKKysgIGdldFN0eWxlOiBmdW5jdGlvbihlbGVtZW50LCBzdHlsZSkgeworKyAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKKysgICAgc3R5bGUgPSBzdHlsZSA9PSAnZmxvYXQnID8gJ2Nzc0Zs
b2F0JyA6IHN0eWxlLmNhbWVsaXplKCk7CisrICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuc3R5bGVb
c3R5bGVdOworKyAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09ICdhdXRvJykgeworKyAgICAgIHZh
ciBjc3MgPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51
bGwpOworKyAgICAgIHZhbHVlID0gY3NzID8gY3NzW3N0eWxlXSA6IG51bGw7CisrICAgIH0KKysg
ICAgaWYgKHN0eWxlID09ICdvcGFjaXR5JykgcmV0dXJuIHZhbHVlID8gcGFyc2VGbG9hdCh2YWx1
ZSkgOiAxLjA7CisrICAgIHJldHVybiB2YWx1ZSA9PSAnYXV0bycgPyBudWxsIDogdmFsdWU7Cisr
ICB9LAorKworKyAgZ2V0T3BhY2l0eTogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICByZXR1cm4g
JChlbGVtZW50KS5nZXRTdHlsZSgnb3BhY2l0eScpOworKyAgfSwKKysKKysgIHNldFN0eWxlOiBm
dW5jdGlvbihlbGVtZW50LCBzdHlsZXMpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Cisr
ICAgIHZhciBlbGVtZW50U3R5bGUgPSBlbGVtZW50LnN0eWxlLCBtYXRjaDsKKysgICAgaWYgKE9i
amVjdC5pc1N0cmluZyhzdHlsZXMpKSB7CisrICAgICAgZWxlbWVudC5zdHlsZS5jc3NUZXh0ICs9
ICc7JyArIHN0eWxlczsKKysgICAgICByZXR1cm4gc3R5bGVzLmluY2x1ZGUoJ29wYWNpdHknKSA/
CisrICAgICAgICBlbGVtZW50LnNldE9wYWNpdHkoc3R5bGVzLm1hdGNoKC9vcGFjaXR5OlxzKihc
ZD9cLj9cZCopLylbMV0pIDogZWxlbWVudDsKKysgICAgfQorKyAgICBmb3IgKHZhciBwcm9wZXJ0
eSBpbiBzdHlsZXMpCisrICAgICAgaWYgKHByb3BlcnR5ID09ICdvcGFjaXR5JykgZWxlbWVudC5z
ZXRPcGFjaXR5KHN0eWxlc1twcm9wZXJ0eV0pOworKyAgICAgIGVsc2UKKysgICAgICAgIGVsZW1l
bnRTdHlsZVsocHJvcGVydHkgPT0gJ2Zsb2F0JyB8fCBwcm9wZXJ0eSA9PSAnY3NzRmxvYXQnKSA/
CisrICAgICAgICAgIChPYmplY3QuaXNVbmRlZmluZWQoZWxlbWVudFN0eWxlLnN0eWxlRmxvYXQp
ID8gJ2Nzc0Zsb2F0JyA6ICdzdHlsZUZsb2F0JykgOgorKyAgICAgICAgICAgIHByb3BlcnR5XSA9
IHN0eWxlc1twcm9wZXJ0eV07CisrCisrICAgIHJldHVybiBlbGVtZW50OworKyAgfSwKKysKKysg
IHNldE9wYWNpdHk6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7CisrICAgIGVsZW1lbnQgPSAk
KGVsZW1lbnQpOworKyAgICBlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAodmFsdWUgPT0gMSB8fCB2
YWx1ZSA9PT0gJycpID8gJycgOgorKyAgICAgICh2YWx1ZSA8IDAuMDAwMDEpID8gMCA6IHZhbHVl
OworKyAgICByZXR1cm4gZWxlbWVudDsKKysgIH0sCisrCisrICBtYWtlUG9zaXRpb25lZDogZnVu
Y3Rpb24oZWxlbWVudCkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgdmFyIHBv
cyA9IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJyk7CisrICAgIGlmIChwb3Mg
PT0gJ3N0YXRpYycgfHwgIXBvcykgeworKyAgICAgIGVsZW1lbnQuX21hZGVQb3NpdGlvbmVkID0g
dHJ1ZTsKKysgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKKysgICAg
ICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuT3BlcmEpIHsKKysgICAgICAgIGVsZW1lbnQuc3R5bGUu
dG9wID0gMDsKKysgICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IDA7CisrICAgICAgfQorKyAg
ICB9CisrICAgIHJldHVybiBlbGVtZW50OworKyAgfSwKKysKKysgIHVuZG9Qb3NpdGlvbmVkOiBm
dW5jdGlvbihlbGVtZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICBpZiAo
ZWxlbWVudC5fbWFkZVBvc2l0aW9uZWQpIHsKKysgICAgICBlbGVtZW50Ll9tYWRlUG9zaXRpb25l
ZCA9IHVuZGVmaW5lZDsKKysgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0KKysgICAgICAg
IGVsZW1lbnQuc3R5bGUudG9wID0KKysgICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9CisrICAg
ICAgICBlbGVtZW50LnN0eWxlLmJvdHRvbSA9CisrICAgICAgICBlbGVtZW50LnN0eWxlLnJpZ2h0
ID0gJyc7CisrICAgIH0KKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9LAorKworKyAgbWFrZUNs
aXBwaW5nOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwor
KyAgICBpZiAoZWxlbWVudC5fb3ZlcmZsb3cpIHJldHVybiBlbGVtZW50OworKyAgICBlbGVtZW50
Ll9vdmVyZmxvdyA9IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ292ZXJmbG93JykgfHwgJ2F1
dG8nOworKyAgICBpZiAoZWxlbWVudC5fb3ZlcmZsb3cgIT09ICdoaWRkZW4nKQorKyAgICAgIGVs
ZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJzsKKysgICAgcmV0dXJuIGVsZW1lbnQ7Cisr
ICB9LAorKworKyAgdW5kb0NsaXBwaW5nOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgIGVsZW1l
bnQgPSAkKGVsZW1lbnQpOworKyAgICBpZiAoIWVsZW1lbnQuX292ZXJmbG93KSByZXR1cm4gZWxl
bWVudDsKKysgICAgZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IGVsZW1lbnQuX292ZXJmbG93ID09
ICdhdXRvJyA/ICcnIDogZWxlbWVudC5fb3ZlcmZsb3c7CisrICAgIGVsZW1lbnQuX292ZXJmbG93
ID0gbnVsbDsKKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9LAorKworKyAgY2xvbmVQb3NpdGlv
bjogZnVuY3Rpb24oZWxlbWVudCwgc291cmNlKSB7CisrICAgIHZhciBvcHRpb25zID0gT2JqZWN0
LmV4dGVuZCh7CisrICAgICAgc2V0TGVmdDogICAgdHJ1ZSwKKysgICAgICBzZXRUb3A6ICAgICB0
cnVlLAorKyAgICAgIHNldFdpZHRoOiAgIHRydWUsCisrICAgICAgc2V0SGVpZ2h0OiAgdHJ1ZSwK
KysgICAgICBvZmZzZXRUb3A6ICAwLAorKyAgICAgIG9mZnNldExlZnQ6IDAKKysgICAgfSwgYXJn
dW1lbnRzWzJdIHx8IHsgfSk7CisrCisrICAgIHNvdXJjZSA9ICQoc291cmNlKTsKKysgICAgdmFy
IHAgPSBFbGVtZW50LnZpZXdwb3J0T2Zmc2V0KHNvdXJjZSksIGRlbHRhID0gWzAsIDBdLCBwYXJl
bnQgPSBudWxsOworKworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysKKysgICAgaWYgKEVs
ZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2Fic29sdXRlJykgeworKyAg
ICAgIHBhcmVudCA9IEVsZW1lbnQuZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpOworKyAgICAgIGRl
bHRhID0gRWxlbWVudC52aWV3cG9ydE9mZnNldChwYXJlbnQpOworKyAgICB9CisrCisrICAgIGlm
IChwYXJlbnQgPT0gZG9jdW1lbnQuYm9keSkgeworKyAgICAgIGRlbHRhWzBdIC09IGRvY3VtZW50
LmJvZHkub2Zmc2V0TGVmdDsKKysgICAgICBkZWx0YVsxXSAtPSBkb2N1bWVudC5ib2R5Lm9mZnNl
dFRvcDsKKysgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5zZXRMZWZ0KSAgIGVsZW1lbnQuc3R5
bGUubGVmdCAgPSAocFswXSAtIGRlbHRhWzBdICsgb3B0aW9ucy5vZmZzZXRMZWZ0KSArICdweCc7
CisrICAgIGlmIChvcHRpb25zLnNldFRvcCkgICAgZWxlbWVudC5zdHlsZS50b3AgICA9IChwWzFd
IC0gZGVsdGFbMV0gKyBvcHRpb25zLm9mZnNldFRvcCkgKyAncHgnOworKyAgICBpZiAob3B0aW9u
cy5zZXRXaWR0aCkgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBzb3VyY2Uub2Zmc2V0V2lkdGggKyAn
cHgnOworKyAgICBpZiAob3B0aW9ucy5zZXRIZWlnaHQpIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0g
c291cmNlLm9mZnNldEhlaWdodCArICdweCc7CisrICAgIHJldHVybiBlbGVtZW50OworKyAgfQor
K307CisrCisrT2JqZWN0LmV4dGVuZChFbGVtZW50Lk1ldGhvZHMsIHsKKysgIGdldEVsZW1lbnRz
QnlTZWxlY3RvcjogRWxlbWVudC5NZXRob2RzLnNlbGVjdCwKKysKKysgIGNoaWxkRWxlbWVudHM6
IEVsZW1lbnQuTWV0aG9kcy5pbW1lZGlhdGVEZXNjZW5kYW50cworK30pOworKworK0VsZW1lbnQu
X2F0dHJpYnV0ZVRyYW5zbGF0aW9ucyA9IHsKKysgIHdyaXRlOiB7CisrICAgIG5hbWVzOiB7Cisr
ICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLAorKyAgICAgIGh0bWxGb3I6ICAgJ2ZvcicKKysgICAg
fSwKKysgICAgdmFsdWVzOiB7IH0KKysgIH0KKyt9OworKworK2lmIChQcm90b3R5cGUuQnJvd3Nl
ci5PcGVyYSkgeworKyAgRWxlbWVudC5NZXRob2RzLmdldFN0eWxlID0gRWxlbWVudC5NZXRob2Rz
LmdldFN0eWxlLndyYXAoCisrICAgIGZ1bmN0aW9uKHByb2NlZWQsIGVsZW1lbnQsIHN0eWxlKSB7
CisrICAgICAgc3dpdGNoIChzdHlsZSkgeworKyAgICAgICAgY2FzZSAnaGVpZ2h0JzogY2FzZSAn
d2lkdGgnOgorKyAgICAgICAgICBpZiAoIUVsZW1lbnQudmlzaWJsZShlbGVtZW50KSkgcmV0dXJu
IG51bGw7CisrCisrICAgICAgICAgIHZhciBkaW0gPSBwYXJzZUludChwcm9jZWVkKGVsZW1lbnQs
IHN0eWxlKSwgMTApOworKworKyAgICAgICAgICBpZiAoZGltICE9PSBlbGVtZW50WydvZmZzZXQn
ICsgc3R5bGUuY2FwaXRhbGl6ZSgpXSkKKysgICAgICAgICAgICByZXR1cm4gZGltICsgJ3B4JzsK
KysKKysgICAgICAgICAgdmFyIHByb3BlcnRpZXM7CisrICAgICAgICAgIGlmIChzdHlsZSA9PT0g
J2hlaWdodCcpIHsKKysgICAgICAgICAgICBwcm9wZXJ0aWVzID0gWydib3JkZXItdG9wLXdpZHRo
JywgJ3BhZGRpbmctdG9wJywKKysgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tJywgJ2JvcmRl
ci1ib3R0b20td2lkdGgnXTsKKysgICAgICAgICAgfQorKyAgICAgICAgICBlbHNlIHsKKysgICAg
ICAgICAgICBwcm9wZXJ0aWVzID0gWydib3JkZXItbGVmdC13aWR0aCcsICdwYWRkaW5nLWxlZnQn
LAorKyAgICAgICAgICAgICAncGFkZGluZy1yaWdodCcsICdib3JkZXItcmlnaHQtd2lkdGgnXTsK
KysgICAgICAgICAgfQorKyAgICAgICAgICByZXR1cm4gcHJvcGVydGllcy5pbmplY3QoZGltLCBm
dW5jdGlvbihtZW1vLCBwcm9wZXJ0eSkgeworKyAgICAgICAgICAgIHZhciB2YWwgPSBwcm9jZWVk
KGVsZW1lbnQsIHByb3BlcnR5KTsKKysgICAgICAgICAgICByZXR1cm4gdmFsID09PSBudWxsID8g
bWVtbyA6IG1lbW8gLSBwYXJzZUludCh2YWwsIDEwKTsKKysgICAgICAgICAgfSkgKyAncHgnOwor
KyAgICAgICAgZGVmYXVsdDogcmV0dXJuIHByb2NlZWQoZWxlbWVudCwgc3R5bGUpOworKyAgICAg
IH0KKysgICAgfQorKyAgKTsKKysKKysgIEVsZW1lbnQuTWV0aG9kcy5yZWFkQXR0cmlidXRlID0g
RWxlbWVudC5NZXRob2RzLnJlYWRBdHRyaWJ1dGUud3JhcCgKKysgICAgZnVuY3Rpb24ocHJvY2Vl
ZCwgZWxlbWVudCwgYXR0cmlidXRlKSB7CisrICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gJ3RpdGxl
JykgcmV0dXJuIGVsZW1lbnQudGl0bGU7CisrICAgICAgcmV0dXJuIHByb2NlZWQoZWxlbWVudCwg
YXR0cmlidXRlKTsKKysgICAgfQorKyAgKTsKKyt9CisrCisrZWxzZSBpZiAoUHJvdG90eXBlLkJy
b3dzZXIuSUUpIHsKKysgIEVsZW1lbnQuTWV0aG9kcy5nZXRTdHlsZSA9IGZ1bmN0aW9uKGVsZW1l
bnQsIHN0eWxlKSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICBzdHlsZSA9IChz
dHlsZSA9PSAnZmxvYXQnIHx8IHN0eWxlID09ICdjc3NGbG9hdCcpID8gJ3N0eWxlRmxvYXQnIDog
c3R5bGUuY2FtZWxpemUoKTsKKysgICAgdmFyIHZhbHVlID0gZWxlbWVudC5zdHlsZVtzdHlsZV07
CisrICAgIGlmICghdmFsdWUgJiYgZWxlbWVudC5jdXJyZW50U3R5bGUpIHZhbHVlID0gZWxlbWVu
dC5jdXJyZW50U3R5bGVbc3R5bGVdOworKworKyAgICBpZiAoc3R5bGUgPT0gJ29wYWNpdHknKSB7
CisrICAgICAgaWYgKHZhbHVlID0gKGVsZW1lbnQuZ2V0U3R5bGUoJ2ZpbHRlcicpIHx8ICcnKS5t
YXRjaCgvYWxwaGFcKG9wYWNpdHk9KC4qKVwpLykpCisrICAgICAgICBpZiAodmFsdWVbMV0pIHJl
dHVybiBwYXJzZUZsb2F0KHZhbHVlWzFdKSAvIDEwMDsKKysgICAgICByZXR1cm4gMS4wOworKyAg
ICB9CisrCisrICAgIGlmICh2YWx1ZSA9PSAnYXV0bycpIHsKKysgICAgICBpZiAoKHN0eWxlID09
ICd3aWR0aCcgfHwgc3R5bGUgPT0gJ2hlaWdodCcpICYmIChlbGVtZW50LmdldFN0eWxlKCdkaXNw
bGF5JykgIT0gJ25vbmUnKSkKKysgICAgICAgIHJldHVybiBlbGVtZW50WydvZmZzZXQnICsgc3R5
bGUuY2FwaXRhbGl6ZSgpXSArICdweCc7CisrICAgICAgcmV0dXJuIG51bGw7CisrICAgIH0KKysg
ICAgcmV0dXJuIHZhbHVlOworKyAgfTsKKysKKysgIEVsZW1lbnQuTWV0aG9kcy5zZXRPcGFjaXR5
ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKKysgICAgZnVuY3Rpb24gc3RyaXBBbHBoYShm
aWx0ZXIpeworKyAgICAgIHJldHVybiBmaWx0ZXIucmVwbGFjZSgvYWxwaGFcKFteXCldKlwpL2dp
LCcnKTsKKysgICAgfQorKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgdmFyIGN1cnJl
bnRTdHlsZSA9IGVsZW1lbnQuY3VycmVudFN0eWxlOworKyAgICBpZiAoKGN1cnJlbnRTdHlsZSAm
JiAhY3VycmVudFN0eWxlLmhhc0xheW91dCkgfHwKKysgICAgICAoIWN1cnJlbnRTdHlsZSAmJiBl
bGVtZW50LnN0eWxlLnpvb20gPT0gJ25vcm1hbCcpKQorKyAgICAgICAgZWxlbWVudC5zdHlsZS56
b29tID0gMTsKKysKKysgICAgdmFyIGZpbHRlciA9IGVsZW1lbnQuZ2V0U3R5bGUoJ2ZpbHRlcicp
LCBzdHlsZSA9IGVsZW1lbnQuc3R5bGU7CisrICAgIGlmICh2YWx1ZSA9PSAxIHx8IHZhbHVlID09
PSAnJykgeworKyAgICAgIChmaWx0ZXIgPSBzdHJpcEFscGhhKGZpbHRlcikpID8KKysgICAgICAg
IHN0eWxlLmZpbHRlciA9IGZpbHRlciA6IHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7
CisrICAgICAgcmV0dXJuIGVsZW1lbnQ7CisrICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwLjAwMDAx
KSB2YWx1ZSA9IDA7CisrICAgIHN0eWxlLmZpbHRlciA9IHN0cmlwQWxwaGEoZmlsdGVyKSArCisr
ICAgICAgJ2FscGhhKG9wYWNpdHk9JyArICh2YWx1ZSAqIDEwMCkgKyAnKSc7CisrICAgIHJldHVy
biBlbGVtZW50OworKyAgfTsKKysKKysgIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucyA9
IChmdW5jdGlvbigpeworKworKyAgICB2YXIgY2xhc3NQcm9wID0gJ2NsYXNzTmFtZScsCisrICAg
ICAgICBmb3JQcm9wID0gJ2ZvcicsCisrICAgICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpOworKworKyAgICBlbC5zZXRBdHRyaWJ1dGUoY2xhc3NQcm9wLCAneCcpOworKwor
KyAgICBpZiAoZWwuY2xhc3NOYW1lICE9PSAneCcpIHsKKysgICAgICBlbC5zZXRBdHRyaWJ1dGUo
J2NsYXNzJywgJ3gnKTsKKysgICAgICBpZiAoZWwuY2xhc3NOYW1lID09PSAneCcpIHsKKysgICAg
ICAgIGNsYXNzUHJvcCA9ICdjbGFzcyc7CisrICAgICAgfQorKyAgICB9CisrICAgIGVsID0gbnVs
bDsKKysKKysgICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpOworKyAgICBl
bC5zZXRBdHRyaWJ1dGUoZm9yUHJvcCwgJ3gnKTsKKysgICAgaWYgKGVsLmh0bWxGb3IgIT09ICd4
JykgeworKyAgICAgIGVsLnNldEF0dHJpYnV0ZSgnaHRtbEZvcicsICd4Jyk7CisrICAgICAgaWYg
KGVsLmh0bWxGb3IgPT09ICd4JykgeworKyAgICAgICAgZm9yUHJvcCA9ICdodG1sRm9yJzsKKysg
ICAgICB9CisrICAgIH0KKysgICAgZWwgPSBudWxsOworKworKyAgICByZXR1cm4geworKyAgICAg
IHJlYWQ6IHsKKysgICAgICAgIG5hbWVzOiB7CisrICAgICAgICAgICdjbGFzcyc6ICAgICAgY2xh
c3NQcm9wLAorKyAgICAgICAgICAnY2xhc3NOYW1lJzogIGNsYXNzUHJvcCwKKysgICAgICAgICAg
J2Zvcic6ICAgICAgICBmb3JQcm9wLAorKyAgICAgICAgICAnaHRtbEZvcic6ICAgIGZvclByb3AK
KysgICAgICAgIH0sCisrICAgICAgICB2YWx1ZXM6IHsKKysgICAgICAgICAgX2dldEF0dHI6IGZ1
bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgeworKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50
LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpOworKyAgICAgICAgICB9LAorKyAgICAgICAgICBfZ2V0
QXR0cjI6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgeworKyAgICAgICAgICAgIHJldHVy
biBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIDIpOworKyAgICAgICAgICB9LAorKyAg
ICAgICAgICBfZ2V0QXR0ck5vZGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgeworKyAg
ICAgICAgICAgIHZhciBub2RlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZSk7
CisrICAgICAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLnZhbHVlIDogIiI7CisrICAgICAgICAg
IH0sCisrICAgICAgICAgIF9nZXRFdjogKGZ1bmN0aW9uKCl7CisrCisrICAgICAgICAgICAgdmFy
IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGY7CisrICAgICAgICAgICAgZWwu
b25jbGljayA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOworKyAgICAgICAgICAgIHZhciB2YWx1
ZSA9IGVsLmdldEF0dHJpYnV0ZSgnb25jbGljaycpOworKworKyAgICAgICAgICAgIGlmIChTdHJp
bmcodmFsdWUpLmluZGV4T2YoJ3snKSA+IC0xKSB7CisrICAgICAgICAgICAgICBmID0gZnVuY3Rp
b24oZWxlbWVudCwgYXR0cmlidXRlKSB7CisrICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IGVs
ZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7CisrICAgICAgICAgICAgICAgIGlmICghYXR0
cmlidXRlKSByZXR1cm4gbnVsbDsKKysgICAgICAgICAgICAgICAgYXR0cmlidXRlID0gYXR0cmli
dXRlLnRvU3RyaW5nKCk7CisrICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5z
cGxpdCgneycpWzFdOworKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUuc3Bs
aXQoJ30nKVswXTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS5zdHJpcCgpOwor
KyAgICAgICAgICAgICAgfTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAo
dmFsdWUgPT09ICcnKSB7CisrICAgICAgICAgICAgICBmID0gZnVuY3Rpb24oZWxlbWVudCwgYXR0
cmlidXRlKSB7CisrICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0QXR0cmli
dXRlKGF0dHJpYnV0ZSk7CisrICAgICAgICAgICAgICAgIGlmICghYXR0cmlidXRlKSByZXR1cm4g
bnVsbDsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS5zdHJpcCgpOworKyAgICAg
ICAgICAgICAgfTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWwgPSBudWxsOworKyAg
ICAgICAgICAgIHJldHVybiBmOworKyAgICAgICAgICB9KSgpLAorKyAgICAgICAgICBfZmxhZzog
ZnVuY3Rpb24oZWxlbWVudCwgYXR0cmlidXRlKSB7CisrICAgICAgICAgICAgcmV0dXJuICQoZWxl
bWVudCkuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkgPyBhdHRyaWJ1dGUgOiBudWxsOworKyAgICAg
ICAgICB9LAorKyAgICAgICAgICBzdHlsZTogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICAgICAg
ICAgIHJldHVybiBlbGVtZW50LnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKTsKKysgICAgICAg
ICAgfSwKKysgICAgICAgICAgdGl0bGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudC50aXRsZTsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAg
IH0KKysgICAgfQorKyAgfSkoKTsKKysKKysgIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9u
cy53cml0ZSA9IHsKKysgICAgbmFtZXM6IE9iamVjdC5leHRlbmQoeworKyAgICAgIGNlbGxwYWRk
aW5nOiAnY2VsbFBhZGRpbmcnLAorKyAgICAgIGNlbGxzcGFjaW5nOiAnY2VsbFNwYWNpbmcnCisr
ICAgIH0sIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy5yZWFkLm5hbWVzKSwKKysgICAg
dmFsdWVzOiB7CisrICAgICAgY2hlY2tlZDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKKysg
ICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9ICEhdmFsdWU7CisrICAgICAgfSwKKysKKysgICAgICBz
dHlsZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKKysgICAgICAgIGVsZW1lbnQuc3R5bGUu
Y3NzVGV4dCA9IHZhbHVlID8gdmFsdWUgOiAnJzsKKysgICAgICB9CisrICAgIH0KKysgIH07Cisr
CisrICBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMuaGFzID0ge307CisrCisrICAkdygn
Y29sU3BhbiByb3dTcGFuIHZBbGlnbiBkYXRlVGltZSBhY2Nlc3NLZXkgdGFiSW5kZXggJyArCisr
ICAgICAgJ2VuY1R5cGUgbWF4TGVuZ3RoIHJlYWRPbmx5IGxvbmdEZXNjIGZyYW1lQm9yZGVyJyku
ZWFjaChmdW5jdGlvbihhdHRyKSB7CisrICAgIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9u
cy53cml0ZS5uYW1lc1thdHRyLnRvTG93ZXJDYXNlKCldID0gYXR0cjsKKysgICAgRWxlbWVudC5f
YXR0cmlidXRlVHJhbnNsYXRpb25zLmhhc1thdHRyLnRvTG93ZXJDYXNlKCldID0gYXR0cjsKKysg
IH0pOworKworKyAgKGZ1bmN0aW9uKHYpIHsKKysgICAgT2JqZWN0LmV4dGVuZCh2LCB7CisrICAg
ICAgaHJlZjogICAgICAgIHYuX2dldEF0dHIyLAorKyAgICAgIHNyYzogICAgICAgICB2Ll9nZXRB
dHRyMiwKKysgICAgICB0eXBlOiAgICAgICAgdi5fZ2V0QXR0ciwKKysgICAgICBhY3Rpb246ICAg
ICAgdi5fZ2V0QXR0ck5vZGUsCisrICAgICAgZGlzYWJsZWQ6ICAgIHYuX2ZsYWcsCisrICAgICAg
Y2hlY2tlZDogICAgIHYuX2ZsYWcsCisrICAgICAgcmVhZG9ubHk6ICAgIHYuX2ZsYWcsCisrICAg
ICAgbXVsdGlwbGU6ICAgIHYuX2ZsYWcsCisrICAgICAgb25sb2FkOiAgICAgIHYuX2dldEV2LAor
KyAgICAgIG9udW5sb2FkOiAgICB2Ll9nZXRFdiwKKysgICAgICBvbmNsaWNrOiAgICAgdi5fZ2V0
RXYsCisrICAgICAgb25kYmxjbGljazogIHYuX2dldEV2LAorKyAgICAgIG9ubW91c2Vkb3duOiB2
Ll9nZXRFdiwKKysgICAgICBvbm1vdXNldXA6ICAgdi5fZ2V0RXYsCisrICAgICAgb25tb3VzZW92
ZXI6IHYuX2dldEV2LAorKyAgICAgIG9ubW91c2Vtb3ZlOiB2Ll9nZXRFdiwKKysgICAgICBvbm1v
dXNlb3V0OiAgdi5fZ2V0RXYsCisrICAgICAgb25mb2N1czogICAgIHYuX2dldEV2LAorKyAgICAg
IG9uYmx1cjogICAgICB2Ll9nZXRFdiwKKysgICAgICBvbmtleXByZXNzOiAgdi5fZ2V0RXYsCisr
ICAgICAgb25rZXlkb3duOiAgIHYuX2dldEV2LAorKyAgICAgIG9ua2V5dXA6ICAgICB2Ll9nZXRF
diwKKysgICAgICBvbnN1Ym1pdDogICAgdi5fZ2V0RXYsCisrICAgICAgb25yZXNldDogICAgIHYu
X2dldEV2LAorKyAgICAgIG9uc2VsZWN0OiAgICB2Ll9nZXRFdiwKKysgICAgICBvbmNoYW5nZTog
ICAgdi5fZ2V0RXYKKysgICAgfSk7CisrICB9KShFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlv
bnMucmVhZC52YWx1ZXMpOworKworKyAgaWYgKFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuRWxl
bWVudEV4dGVuc2lvbnMpIHsKKysgICAgKGZ1bmN0aW9uKCkgeworKyAgICAgIGZ1bmN0aW9uIF9k
ZXNjZW5kYW50cyhlbGVtZW50KSB7CisrICAgICAgICB2YXIgbm9kZXMgPSBlbGVtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCcqJyksIHJlc3VsdHMgPSBbXTsKKysgICAgICAgIGZvciAodmFyIGkg
PSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKKysgICAgICAgICAgaWYgKG5vZGUudGFn
TmFtZSAhPT0gIiEiKSAvLyBGaWx0ZXIgb3V0IGNvbW1lbnQgbm9kZXMuCisrICAgICAgICAgICAg
cmVzdWx0cy5wdXNoKG5vZGUpOworKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisrICAgICAgfQor
KworKyAgICAgIEVsZW1lbnQuTWV0aG9kcy5kb3duID0gZnVuY3Rpb24oZWxlbWVudCwgZXhwcmVz
c2lvbiwgaW5kZXgpIHsKKysgICAgICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICAgICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgcmV0dXJuIGVsZW1lbnQuZmlyc3REZXNjZW5kYW50
KCk7CisrICAgICAgICByZXR1cm4gT2JqZWN0LmlzTnVtYmVyKGV4cHJlc3Npb24pID8gX2Rlc2Nl
bmRhbnRzKGVsZW1lbnQpW2V4cHJlc3Npb25dIDoKKysgICAgICAgICAgRWxlbWVudC5zZWxlY3Qo
ZWxlbWVudCwgZXhwcmVzc2lvbilbaW5kZXggfHwgMF07CisrICAgICAgfQorKyAgICB9KSgpOwor
KyAgfQorKworK30KKysKKytlbHNlIGlmIChQcm90b3R5cGUuQnJvd3Nlci5HZWNrbyAmJiAvcnY6
MVwuOFwuMC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgeworKyAgRWxlbWVudC5NZXRob2Rz
LnNldE9wYWNpdHkgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgeworKyAgICBlbGVtZW50ID0g
JChlbGVtZW50KTsKKysgICAgZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gKHZhbHVlID09IDEpID8g
MC45OTk5OTkgOgorKyAgICAgICh2YWx1ZSA9PT0gJycpID8gJycgOiAodmFsdWUgPCAwLjAwMDAx
KSA/IDAgOiB2YWx1ZTsKKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9OworK30KKysKKytlbHNl
IGlmIChQcm90b3R5cGUuQnJvd3Nlci5XZWJLaXQpIHsKKysgIEVsZW1lbnQuTWV0aG9kcy5zZXRP
cGFjaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKKysgICAgZWxlbWVudCA9ICQoZWxl
bWVudCk7CisrICAgIGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICh2YWx1ZSA9PSAxIHx8IHZhbHVl
ID09PSAnJykgPyAnJyA6CisrICAgICAgKHZhbHVlIDwgMC4wMDAwMSkgPyAwIDogdmFsdWU7Cisr
CisrICAgIGlmICh2YWx1ZSA9PSAxKQorKyAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUudG9VcHBl
ckNhc2UoKSA9PSAnSU1HJyAmJiBlbGVtZW50LndpZHRoKSB7CisrICAgICAgICBlbGVtZW50Lndp
ZHRoKys7IGVsZW1lbnQud2lkdGgtLTsKKysgICAgICB9IGVsc2UgdHJ5IHsKKysgICAgICAgIHZh
ciBuID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKTsKKysgICAgICAgIGVsZW1lbnQuYXBw
ZW5kQ2hpbGQobik7CisrICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKG4pOworKyAgICAgIH0g
Y2F0Y2ggKGUpIHsgfQorKworKyAgICByZXR1cm4gZWxlbWVudDsKKysgIH07CisrfQorKworK2lm
ICgnb3V0ZXJIVE1MJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHsKKysgIEVsZW1lbnQu
TWV0aG9kcy5yZXBsYWNlID0gZnVuY3Rpb24oZWxlbWVudCwgY29udGVudCkgeworKyAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKKysKKysgICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC50b0VsZW1l
bnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOworKyAgICBpZiAoT2JqZWN0LmlzRWxl
bWVudChjb250ZW50KSkgeworKyAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQo
Y29udGVudCwgZWxlbWVudCk7CisrICAgICAgcmV0dXJuIGVsZW1lbnQ7CisrICAgIH0KKysKKysg
ICAgY29udGVudCA9IE9iamVjdC50b0hUTUwoY29udGVudCk7CisrICAgIHZhciBwYXJlbnQgPSBl
bGVtZW50LnBhcmVudE5vZGUsIHRhZ05hbWUgPSBwYXJlbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgp
OworKworKyAgICBpZiAoRWxlbWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zLnRhZ3NbdGFnTmFt
ZV0pIHsKKysgICAgICB2YXIgbmV4dFNpYmxpbmcgPSBlbGVtZW50Lm5leHQoKSwKKysgICAgICAg
ICAgZnJhZ21lbnRzID0gRWxlbWVudC5fZ2V0Q29udGVudEZyb21Bbm9ueW1vdXNFbGVtZW50KHRh
Z05hbWUsIGNvbnRlbnQuc3RyaXBTY3JpcHRzKCkpOworKyAgICAgIHBhcmVudC5yZW1vdmVDaGls
ZChlbGVtZW50KTsKKysgICAgICBpZiAobmV4dFNpYmxpbmcpCisrICAgICAgICBmcmFnbWVudHMu
ZWFjaChmdW5jdGlvbihub2RlKSB7IHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dFNpYmxp
bmcpIH0pOworKyAgICAgIGVsc2UKKysgICAgICAgIGZyYWdtZW50cy5lYWNoKGZ1bmN0aW9uKG5v
ZGUpIHsgcGFyZW50LmFwcGVuZENoaWxkKG5vZGUpIH0pOworKyAgICB9CisrICAgIGVsc2UgZWxl
bWVudC5vdXRlckhUTUwgPSBjb250ZW50LnN0cmlwU2NyaXB0cygpOworKworKyAgICBjb250ZW50
LmV2YWxTY3JpcHRzLmJpbmQoY29udGVudCkuZGVmZXIoKTsKKysgICAgcmV0dXJuIGVsZW1lbnQ7
CisrICB9OworK30KKysKKytFbGVtZW50Ll9yZXR1cm5PZmZzZXQgPSBmdW5jdGlvbihsLCB0KSB7
CisrICB2YXIgcmVzdWx0ID0gW2wsIHRdOworKyAgcmVzdWx0LmxlZnQgPSBsOworKyAgcmVzdWx0
LnRvcCA9IHQ7CisrICByZXR1cm4gcmVzdWx0OworK307CisrCisrRWxlbWVudC5fZ2V0Q29udGVu
dEZyb21Bbm9ueW1vdXNFbGVtZW50ID0gZnVuY3Rpb24odGFnTmFtZSwgaHRtbCwgZm9yY2UpIHsK
KysgIHZhciBkaXYgPSBuZXcgRWxlbWVudCgnZGl2JyksCisrICAgICAgdCA9IEVsZW1lbnQuX2lu
c2VydGlvblRyYW5zbGF0aW9ucy50YWdzW3RhZ05hbWVdOworKworKyAgdmFyIHdvcmthcm91bmQg
PSBmYWxzZTsKKysgIGlmICh0KSB3b3JrYXJvdW5kID0gdHJ1ZTsKKysgIGVsc2UgaWYgKGZvcmNl
KSB7CisrICAgIHdvcmthcm91bmQgPSB0cnVlOworKyAgICB0ID0gWycnLCAnJywgMF07CisrICB9
CisrCisrICBpZiAod29ya2Fyb3VuZCkgeworKyAgICBkaXYuaW5uZXJIVE1MID0gJyZuYnNwOycg
KyB0WzBdICsgaHRtbCArIHRbMV07CisrICAgIGRpdi5yZW1vdmVDaGlsZChkaXYuZmlyc3RDaGls
ZCk7CisrICAgIGZvciAodmFyIGkgPSB0WzJdOyBpLS07ICkgeworKyAgICAgIGRpdiA9IGRpdi5m
aXJzdENoaWxkOworKyAgICB9CisrICB9CisrICBlbHNlIHsKKysgICAgZGl2LmlubmVySFRNTCA9
IGh0bWw7CisrICB9CisrICByZXR1cm4gJEEoZGl2LmNoaWxkTm9kZXMpOworK307CisrCisrRWxl
bWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zID0geworKyAgYmVmb3JlOiBmdW5jdGlvbihlbGVt
ZW50LCBub2RlKSB7CisrICAgIGVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwg
ZWxlbWVudCk7CisrICB9LAorKyAgdG9wOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7CisrICAg
IGVsZW1lbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIGVsZW1lbnQuZmlyc3RDaGlsZCk7CisrICB9LAor
KyAgYm90dG9tOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7CisrICAgIGVsZW1lbnQuYXBwZW5k
Q2hpbGQobm9kZSk7CisrICB9LAorKyAgYWZ0ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsK
KysgICAgZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBlbGVtZW50Lm5leHRT
aWJsaW5nKTsKKysgIH0sCisrICB0YWdzOiB7CisrICAgIFRBQkxFOiAgWyc8dGFibGU+JywgICAg
ICAgICAgICAgICAgJzwvdGFibGU+JywgICAgICAgICAgICAgICAgICAgMV0sCisrICAgIFRCT0RZ
OiAgWyc8dGFibGU+PHRib2R5PicsICAgICAgICAgJzwvdGJvZHk+PC90YWJsZT4nLCAgICAgICAg
ICAgMl0sCisrICAgIFRSOiAgICAgWyc8dGFibGU+PHRib2R5Pjx0cj4nLCAgICAgJzwvdHI+PC90
Ym9keT48L3RhYmxlPicsICAgICAgM10sCisrICAgIFREOiAgICAgWyc8dGFibGU+PHRib2R5Pjx0
cj48dGQ+JywgJzwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+JywgNF0sCisrICAgIFNFTEVDVDog
Wyc8c2VsZWN0PicsICAgICAgICAgICAgICAgJzwvc2VsZWN0PicsICAgICAgICAgICAgICAgICAg
MV0KKysgIH0KKyt9OworKworKyhmdW5jdGlvbigpIHsKKysgIHZhciB0YWdzID0gRWxlbWVudC5f
aW5zZXJ0aW9uVHJhbnNsYXRpb25zLnRhZ3M7CisrICBPYmplY3QuZXh0ZW5kKHRhZ3MsIHsKKysg
ICAgVEhFQUQ6IHRhZ3MuVEJPRFksCisrICAgIFRGT09UOiB0YWdzLlRCT0RZLAorKyAgICBUSDog
ICAgdGFncy5URAorKyAgfSk7CisrfSkoKTsKKysKKytFbGVtZW50Lk1ldGhvZHMuU2ltdWxhdGVk
ID0geworKyAgaGFzQXR0cmlidXRlOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKKysg
ICAgYXR0cmlidXRlID0gRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLmhhc1thdHRyaWJ1
dGVdIHx8IGF0dHJpYnV0ZTsKKysgICAgdmFyIG5vZGUgPSAkKGVsZW1lbnQpLmdldEF0dHJpYnV0
ZU5vZGUoYXR0cmlidXRlKTsKKysgICAgcmV0dXJuICEhKG5vZGUgJiYgbm9kZS5zcGVjaWZpZWQp
OworKyAgfQorK307CisrCisrRWxlbWVudC5NZXRob2RzLkJ5VGFnID0geyB9OworKworK09iamVj
dC5leHRlbmQoRWxlbWVudCwgRWxlbWVudC5NZXRob2RzKTsKKysKKysoZnVuY3Rpb24oZGl2KSB7
CisrCisrICBpZiAoIVByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuRWxlbWVudEV4dGVuc2lvbnMg
JiYgZGl2WydfX3Byb3RvX18nXSkgeworKyAgICB3aW5kb3cuSFRNTEVsZW1lbnQgPSB7IH07Cisr
ICAgIHdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUgPSBkaXZbJ19fcHJvdG9fXyddOworKyAg
ICBQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLkVsZW1lbnRFeHRlbnNpb25zID0gdHJ1ZTsKKysg
IH0KKysKKysgIGRpdiA9IG51bGw7CisrCisrfSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
JykpOworKworK0VsZW1lbnQuZXh0ZW5kID0gKGZ1bmN0aW9uKCkgeworKworKyAgZnVuY3Rpb24g
Y2hlY2tEZWZpY2llbmN5KHRhZ05hbWUpIHsKKysgICAgaWYgKHR5cGVvZiB3aW5kb3cuRWxlbWVu
dCAhPSAndW5kZWZpbmVkJykgeworKyAgICAgIHZhciBwcm90byA9IHdpbmRvdy5FbGVtZW50LnBy
b3RvdHlwZTsKKysgICAgICBpZiAocHJvdG8pIHsKKysgICAgICAgIHZhciBpZCA9ICdfJyArIChN
YXRoLnJhbmRvbSgpKycnKS5zbGljZSgyKSwKKysgICAgICAgICAgICBlbCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQodGFnTmFtZSk7CisrICAgICAgICBwcm90b1tpZF0gPSAneCc7CisrICAgICAg
ICB2YXIgaXNCdWdneSA9IChlbFtpZF0gIT09ICd4Jyk7CisrICAgICAgICBkZWxldGUgcHJvdG9b
aWRdOworKyAgICAgICAgZWwgPSBudWxsOworKyAgICAgICAgcmV0dXJuIGlzQnVnZ3k7CisrICAg
ICAgfQorKyAgICB9CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGV4
dGVuZEVsZW1lbnRXaXRoKGVsZW1lbnQsIG1ldGhvZHMpIHsKKysgICAgZm9yICh2YXIgcHJvcGVy
dHkgaW4gbWV0aG9kcykgeworKyAgICAgIHZhciB2YWx1ZSA9IG1ldGhvZHNbcHJvcGVydHldOwor
KyAgICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbih2YWx1ZSkgJiYgIShwcm9wZXJ0eSBpbiBlbGVt
ZW50KSkKKysgICAgICAgIGVsZW1lbnRbcHJvcGVydHldID0gdmFsdWUubWV0aG9kaXplKCk7Cisr
ICAgIH0KKysgIH0KKysKKysgIHZhciBIVE1MT0JKRUNURUxFTUVOVF9QUk9UT1RZUEVfQlVHR1kg
PSBjaGVja0RlZmljaWVuY3koJ29iamVjdCcpOworKworKyAgaWYgKFByb3RvdHlwZS5Ccm93c2Vy
RmVhdHVyZXMuU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9ucykgeworKyAgICBpZiAoSFRNTE9CSkVD
VEVMRU1FTlRfUFJPVE9UWVBFX0JVR0dZKSB7CisrICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1l
bnQpIHsKKysgICAgICAgIGlmIChlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50Ll9leHRlbmRlZEJ5
UHJvdG90eXBlID09ICd1bmRlZmluZWQnKSB7CisrICAgICAgICAgIHZhciB0ID0gZWxlbWVudC50
YWdOYW1lOworKyAgICAgICAgICBpZiAodCAmJiAoL14oPzpvYmplY3R8YXBwbGV0fGVtYmVkKSQv
aS50ZXN0KHQpKSkgeworKyAgICAgICAgICAgIGV4dGVuZEVsZW1lbnRXaXRoKGVsZW1lbnQsIEVs
ZW1lbnQuTWV0aG9kcyk7CisrICAgICAgICAgICAgZXh0ZW5kRWxlbWVudFdpdGgoZWxlbWVudCwg
RWxlbWVudC5NZXRob2RzLlNpbXVsYXRlZCk7CisrICAgICAgICAgICAgZXh0ZW5kRWxlbWVudFdp
dGgoZWxlbWVudCwgRWxlbWVudC5NZXRob2RzLkJ5VGFnW3QudG9VcHBlckNhc2UoKV0pOworKyAg
ICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gZWxlbWVudDsKKysgICAgICB9
CisrICAgIH0KKysgICAgcmV0dXJuIFByb3RvdHlwZS5LOworKyAgfQorKworKyAgdmFyIE1ldGhv
ZHMgPSB7IH0sIEJ5VGFnID0gRWxlbWVudC5NZXRob2RzLkJ5VGFnOworKworKyAgdmFyIGV4dGVu
ZCA9IE9iamVjdC5leHRlbmQoZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICBpZiAoIWVsZW1lbnQg
fHwgdHlwZW9mIGVsZW1lbnQuX2V4dGVuZGVkQnlQcm90b3R5cGUgIT0gJ3VuZGVmaW5lZCcgfHwK
KysgICAgICAgIGVsZW1lbnQubm9kZVR5cGUgIT0gMSB8fCBlbGVtZW50ID09IHdpbmRvdykgcmV0
dXJuIGVsZW1lbnQ7CisrCisrICAgIHZhciBtZXRob2RzID0gT2JqZWN0LmNsb25lKE1ldGhvZHMp
LAorKyAgICAgICAgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOworKwor
KyAgICBpZiAoQnlUYWdbdGFnTmFtZV0pIE9iamVjdC5leHRlbmQobWV0aG9kcywgQnlUYWdbdGFn
TmFtZV0pOworKworKyAgICBleHRlbmRFbGVtZW50V2l0aChlbGVtZW50LCBtZXRob2RzKTsKKysK
KysgICAgZWxlbWVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0
aW9uOworKyAgICByZXR1cm4gZWxlbWVudDsKKysKKysgIH0sIHsKKysgICAgcmVmcmVzaDogZnVu
Y3Rpb24oKSB7CisrICAgICAgaWYgKCFQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLkVsZW1lbnRF
eHRlbnNpb25zKSB7CisrICAgICAgICBPYmplY3QuZXh0ZW5kKE1ldGhvZHMsIEVsZW1lbnQuTWV0
aG9kcyk7CisrICAgICAgICBPYmplY3QuZXh0ZW5kKE1ldGhvZHMsIEVsZW1lbnQuTWV0aG9kcy5T
aW11bGF0ZWQpOworKyAgICAgIH0KKysgICAgfQorKyAgfSk7CisrCisrICBleHRlbmQucmVmcmVz
aCgpOworKyAgcmV0dXJuIGV4dGVuZDsKKyt9KSgpOworKworK2lmIChkb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnQuaGFzQXR0cmlidXRlKSB7CisrICBFbGVtZW50Lmhhc0F0dHJpYnV0ZSA9IGZ1bmN0
aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgeworKyAgICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1
dGUoYXR0cmlidXRlKTsKKysgIH07CisrfQorK2Vsc2UgeworKyAgRWxlbWVudC5oYXNBdHRyaWJ1
dGUgPSBFbGVtZW50Lk1ldGhvZHMuU2ltdWxhdGVkLmhhc0F0dHJpYnV0ZTsKKyt9CisrCisrRWxl
bWVudC5hZGRNZXRob2RzID0gZnVuY3Rpb24obWV0aG9kcykgeworKyAgdmFyIEYgPSBQcm90b3R5
cGUuQnJvd3NlckZlYXR1cmVzLCBUID0gRWxlbWVudC5NZXRob2RzLkJ5VGFnOworKworKyAgaWYg
KCFtZXRob2RzKSB7CisrICAgIE9iamVjdC5leHRlbmQoRm9ybSwgRm9ybS5NZXRob2RzKTsKKysg
ICAgT2JqZWN0LmV4dGVuZChGb3JtLkVsZW1lbnQsIEZvcm0uRWxlbWVudC5NZXRob2RzKTsKKysg
ICAgT2JqZWN0LmV4dGVuZChFbGVtZW50Lk1ldGhvZHMuQnlUYWcsIHsKKysgICAgICAiRk9STSI6
ICAgICBPYmplY3QuY2xvbmUoRm9ybS5NZXRob2RzKSwKKysgICAgICAiSU5QVVQiOiAgICBPYmpl
Y3QuY2xvbmUoRm9ybS5FbGVtZW50Lk1ldGhvZHMpLAorKyAgICAgICJTRUxFQ1QiOiAgIE9iamVj
dC5jbG9uZShGb3JtLkVsZW1lbnQuTWV0aG9kcyksCisrICAgICAgIlRFWFRBUkVBIjogT2JqZWN0
LmNsb25lKEZvcm0uRWxlbWVudC5NZXRob2RzKSwKKysgICAgICAiQlVUVE9OIjogICBPYmplY3Qu
Y2xvbmUoRm9ybS5FbGVtZW50Lk1ldGhvZHMpCisrICAgIH0pOworKyAgfQorKworKyAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPT0gMikgeworKyAgICB2YXIgdGFnTmFtZSA9IG1ldGhvZHM7CisrICAg
IG1ldGhvZHMgPSBhcmd1bWVudHNbMV07CisrICB9CisrCisrICBpZiAoIXRhZ05hbWUpIE9iamVj
dC5leHRlbmQoRWxlbWVudC5NZXRob2RzLCBtZXRob2RzIHx8IHsgfSk7CisrICBlbHNlIHsKKysg
ICAgaWYgKE9iamVjdC5pc0FycmF5KHRhZ05hbWUpKSB0YWdOYW1lLmVhY2goZXh0ZW5kKTsKKysg
ICAgZWxzZSBleHRlbmQodGFnTmFtZSk7CisrICB9CisrCisrICBmdW5jdGlvbiBleHRlbmQodGFn
TmFtZSkgeworKyAgICB0YWdOYW1lID0gdGFnTmFtZS50b1VwcGVyQ2FzZSgpOworKyAgICBpZiAo
IUVsZW1lbnQuTWV0aG9kcy5CeVRhZ1t0YWdOYW1lXSkKKysgICAgICBFbGVtZW50Lk1ldGhvZHMu
QnlUYWdbdGFnTmFtZV0gPSB7IH07CisrICAgIE9iamVjdC5leHRlbmQoRWxlbWVudC5NZXRob2Rz
LkJ5VGFnW3RhZ05hbWVdLCBtZXRob2RzKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGNvcHkobWV0
aG9kcywgZGVzdGluYXRpb24sIG9ubHlJZkFic2VudCkgeworKyAgICBvbmx5SWZBYnNlbnQgPSBv
bmx5SWZBYnNlbnQgfHwgZmFsc2U7CisrICAgIGZvciAodmFyIHByb3BlcnR5IGluIG1ldGhvZHMp
IHsKKysgICAgICB2YXIgdmFsdWUgPSBtZXRob2RzW3Byb3BlcnR5XTsKKysgICAgICBpZiAoIU9i
amVjdC5pc0Z1bmN0aW9uKHZhbHVlKSkgY29udGludWU7CisrICAgICAgaWYgKCFvbmx5SWZBYnNl
bnQgfHwgIShwcm9wZXJ0eSBpbiBkZXN0aW5hdGlvbikpCisrICAgICAgICBkZXN0aW5hdGlvbltw
cm9wZXJ0eV0gPSB2YWx1ZS5tZXRob2RpemUoKTsKKysgICAgfQorKyAgfQorKworKyAgZnVuY3Rp
b24gZmluZERPTUNsYXNzKHRhZ05hbWUpIHsKKysgICAgdmFyIGtsYXNzOworKyAgICB2YXIgdHJh
bnMgPSB7CisrICAgICAgIk9QVEdST1VQIjogIk9wdEdyb3VwIiwgIlRFWFRBUkVBIjogIlRleHRB
cmVhIiwgIlAiOiAiUGFyYWdyYXBoIiwKKysgICAgICAiRklFTERTRVQiOiAiRmllbGRTZXQiLCAi
VUwiOiAiVUxpc3QiLCAiT0wiOiAiT0xpc3QiLCAiREwiOiAiRExpc3QiLAorKyAgICAgICJESVIi
OiAiRGlyZWN0b3J5IiwgIkgxIjogIkhlYWRpbmciLCAiSDIiOiAiSGVhZGluZyIsICJIMyI6ICJI
ZWFkaW5nIiwKKysgICAgICAiSDQiOiAiSGVhZGluZyIsICJINSI6ICJIZWFkaW5nIiwgIkg2Ijog
IkhlYWRpbmciLCAiUSI6ICJRdW90ZSIsCisrICAgICAgIklOUyI6ICJNb2QiLCAiREVMIjogIk1v
ZCIsICJBIjogIkFuY2hvciIsICJJTUciOiAiSW1hZ2UiLCAiQ0FQVElPTiI6CisrICAgICAgIlRh
YmxlQ2FwdGlvbiIsICJDT0wiOiAiVGFibGVDb2wiLCAiQ09MR1JPVVAiOiAiVGFibGVDb2wiLCAi
VEhFQUQiOgorKyAgICAgICJUYWJsZVNlY3Rpb24iLCAiVEZPT1QiOiAiVGFibGVTZWN0aW9uIiwg
IlRCT0RZIjogIlRhYmxlU2VjdGlvbiIsICJUUiI6CisrICAgICAgIlRhYmxlUm93IiwgIlRIIjog
IlRhYmxlQ2VsbCIsICJURCI6ICJUYWJsZUNlbGwiLCAiRlJBTUVTRVQiOgorKyAgICAgICJGcmFt
ZVNldCIsICJJRlJBTUUiOiAiSUZyYW1lIgorKyAgICB9OworKyAgICBpZiAodHJhbnNbdGFnTmFt
ZV0pIGtsYXNzID0gJ0hUTUwnICsgdHJhbnNbdGFnTmFtZV0gKyAnRWxlbWVudCc7CisrICAgIGlm
ICh3aW5kb3dba2xhc3NdKSByZXR1cm4gd2luZG93W2tsYXNzXTsKKysgICAga2xhc3MgPSAnSFRN
TCcgKyB0YWdOYW1lICsgJ0VsZW1lbnQnOworKyAgICBpZiAod2luZG93W2tsYXNzXSkgcmV0dXJu
IHdpbmRvd1trbGFzc107CisrICAgIGtsYXNzID0gJ0hUTUwnICsgdGFnTmFtZS5jYXBpdGFsaXpl
KCkgKyAnRWxlbWVudCc7CisrICAgIGlmICh3aW5kb3dba2xhc3NdKSByZXR1cm4gd2luZG93W2ts
YXNzXTsKKysKKysgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05h
bWUpLAorKyAgICAgICAgcHJvdG8gPSBlbGVtZW50WydfX3Byb3RvX18nXSB8fCBlbGVtZW50LmNv
bnN0cnVjdG9yLnByb3RvdHlwZTsKKysKKysgICAgZWxlbWVudCA9IG51bGw7CisrICAgIHJldHVy
biBwcm90bzsKKysgIH0KKysKKysgIHZhciBlbGVtZW50UHJvdG90eXBlID0gd2luZG93LkhUTUxF
bGVtZW50ID8gSFRNTEVsZW1lbnQucHJvdG90eXBlIDoKKysgICBFbGVtZW50LnByb3RvdHlwZTsK
KysKKysgIGlmIChGLkVsZW1lbnRFeHRlbnNpb25zKSB7CisrICAgIGNvcHkoRWxlbWVudC5NZXRo
b2RzLCBlbGVtZW50UHJvdG90eXBlKTsKKysgICAgY29weShFbGVtZW50Lk1ldGhvZHMuU2ltdWxh
dGVkLCBlbGVtZW50UHJvdG90eXBlLCB0cnVlKTsKKysgIH0KKysKKysgIGlmIChGLlNwZWNpZmlj
RWxlbWVudEV4dGVuc2lvbnMpIHsKKysgICAgZm9yICh2YXIgdGFnIGluIEVsZW1lbnQuTWV0aG9k
cy5CeVRhZykgeworKyAgICAgIHZhciBrbGFzcyA9IGZpbmRET01DbGFzcyh0YWcpOworKyAgICAg
IGlmIChPYmplY3QuaXNVbmRlZmluZWQoa2xhc3MpKSBjb250aW51ZTsKKysgICAgICBjb3B5KFRb
dGFnXSwga2xhc3MucHJvdG90eXBlKTsKKysgICAgfQorKyAgfQorKworKyAgT2JqZWN0LmV4dGVu
ZChFbGVtZW50LCBFbGVtZW50Lk1ldGhvZHMpOworKyAgZGVsZXRlIEVsZW1lbnQuQnlUYWc7Cisr
CisrICBpZiAoRWxlbWVudC5leHRlbmQucmVmcmVzaCkgRWxlbWVudC5leHRlbmQucmVmcmVzaCgp
OworKyAgRWxlbWVudC5jYWNoZSA9IHsgfTsKKyt9OworKworKworK2RvY3VtZW50LnZpZXdwb3J0
ID0geworKworKyAgZ2V0RGltZW5zaW9uczogZnVuY3Rpb24oKSB7CisrICAgIHJldHVybiB7IHdp
ZHRoOiB0aGlzLmdldFdpZHRoKCksIGhlaWdodDogdGhpcy5nZXRIZWlnaHQoKSB9OworKyAgfSwK
KysKKysgIGdldFNjcm9sbE9mZnNldHM6IGZ1bmN0aW9uKCkgeworKyAgICByZXR1cm4gRWxlbWVu
dC5fcmV0dXJuT2Zmc2V0KAorKyAgICAgIHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsCisr
ICAgICAgd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3Jv
bGxUb3AgIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKTsKKysgIH0KKyt9OworKworKyhmdW5j
dGlvbih2aWV3cG9ydCkgeworKyAgdmFyIEIgPSBQcm90b3R5cGUuQnJvd3NlciwgZG9jID0gZG9j
dW1lbnQsIGVsZW1lbnQsIHByb3BlcnR5ID0ge307CisrCisrICBmdW5jdGlvbiBnZXRSb290RWxl
bWVudCgpIHsKKysgICAgaWYgKEIuV2ViS2l0ICYmICFkb2MuZXZhbHVhdGUpCisrICAgICAgcmV0
dXJuIGRvY3VtZW50OworKworKyAgICBpZiAoQi5PcGVyYSAmJiB3aW5kb3cucGFyc2VGbG9hdCh3
aW5kb3cub3BlcmEudmVyc2lvbigpKSA8IDkuNSkKKysgICAgICByZXR1cm4gZG9jdW1lbnQuYm9k
eTsKKysKKysgICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKysgIH0KKysKKysg
IGZ1bmN0aW9uIGRlZmluZShEKSB7CisrICAgIGlmICghZWxlbWVudCkgZWxlbWVudCA9IGdldFJv
b3RFbGVtZW50KCk7CisrCisrICAgIHByb3BlcnR5W0RdID0gJ2NsaWVudCcgKyBEOworKworKyAg
ICB2aWV3cG9ydFsnZ2V0JyArIERdID0gZnVuY3Rpb24oKSB7IHJldHVybiBlbGVtZW50W3Byb3Bl
cnR5W0RdXSB9OworKyAgICByZXR1cm4gdmlld3BvcnRbJ2dldCcgKyBEXSgpOworKyAgfQorKwor
KyAgdmlld3BvcnQuZ2V0V2lkdGggID0gZGVmaW5lLmN1cnJ5KCdXaWR0aCcpOworKworKyAgdmll
d3BvcnQuZ2V0SGVpZ2h0ID0gZGVmaW5lLmN1cnJ5KCdIZWlnaHQnKTsKKyt9KShkb2N1bWVudC52
aWV3cG9ydCk7CisrCisrCisrRWxlbWVudC5TdG9yYWdlID0geworKyAgVUlEOiAxCisrfTsKKysK
KytFbGVtZW50LmFkZE1ldGhvZHMoeworKyAgZ2V0U3RvcmFnZTogZnVuY3Rpb24oZWxlbWVudCkg
eworKyAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKKysKKysgICAgdmFy
IHVpZDsKKysgICAgaWYgKGVsZW1lbnQgPT09IHdpbmRvdykgeworKyAgICAgIHVpZCA9IDA7Cisr
ICAgIH0gZWxzZSB7CisrICAgICAgaWYgKHR5cGVvZiBlbGVtZW50Ll9wcm90b3R5cGVVSUQgPT09
ICJ1bmRlZmluZWQiKQorKyAgICAgICAgZWxlbWVudC5fcHJvdG90eXBlVUlEID0gRWxlbWVudC5T
dG9yYWdlLlVJRCsrOworKyAgICAgIHVpZCA9IGVsZW1lbnQuX3Byb3RvdHlwZVVJRDsKKysgICAg
fQorKworKyAgICBpZiAoIUVsZW1lbnQuU3RvcmFnZVt1aWRdKQorKyAgICAgIEVsZW1lbnQuU3Rv
cmFnZVt1aWRdID0gJEgoKTsKKysKKysgICAgcmV0dXJuIEVsZW1lbnQuU3RvcmFnZVt1aWRdOwor
KyAgfSwKKysKKysgIHN0b3JlOiBmdW5jdGlvbihlbGVtZW50LCBrZXksIHZhbHVlKSB7CisrICAg
IGlmICghKGVsZW1lbnQgPSAkKGVsZW1lbnQpKSkgcmV0dXJuOworKworKyAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA9PT0gMikgeworKyAgICAgIEVsZW1lbnQuZ2V0U3RvcmFnZShlbGVtZW50KS51
cGRhdGUoa2V5KTsKKysgICAgfSBlbHNlIHsKKysgICAgICBFbGVtZW50LmdldFN0b3JhZ2UoZWxl
bWVudCkuc2V0KGtleSwgdmFsdWUpOworKyAgICB9CisrCisrICAgIHJldHVybiBlbGVtZW50Owor
KyAgfSwKKysKKysgIHJldHJpZXZlOiBmdW5jdGlvbihlbGVtZW50LCBrZXksIGRlZmF1bHRWYWx1
ZSkgeworKyAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKKysgICAgdmFy
IGhhc2ggPSBFbGVtZW50LmdldFN0b3JhZ2UoZWxlbWVudCksIHZhbHVlID0gaGFzaC5nZXQoa2V5
KTsKKysKKysgICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZCh2YWx1ZSkpIHsKKysgICAgICBoYXNo
LnNldChrZXksIGRlZmF1bHRWYWx1ZSk7CisrICAgICAgdmFsdWUgPSBkZWZhdWx0VmFsdWU7Cisr
ICAgIH0KKysKKysgICAgcmV0dXJuIHZhbHVlOworKyAgfSwKKysKKysgIGNsb25lOiBmdW5jdGlv
bihlbGVtZW50LCBkZWVwKSB7CisrICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1lbnQpKSkgcmV0
dXJuOworKyAgICB2YXIgY2xvbmUgPSBlbGVtZW50LmNsb25lTm9kZShkZWVwKTsKKysgICAgY2xv
bmUuX3Byb3RvdHlwZVVJRCA9IHZvaWQgMDsKKysgICAgaWYgKGRlZXApIHsKKysgICAgICB2YXIg
ZGVzY2VuZGFudHMgPSBFbGVtZW50LnNlbGVjdChjbG9uZSwgJyonKSwKKysgICAgICAgICAgaSA9
IGRlc2NlbmRhbnRzLmxlbmd0aDsKKysgICAgICB3aGlsZSAoaS0tKSB7CisrICAgICAgICBkZXNj
ZW5kYW50c1tpXS5fcHJvdG90eXBlVUlEID0gdm9pZCAwOworKyAgICAgIH0KKysgICAgfQorKyAg
ICByZXR1cm4gRWxlbWVudC5leHRlbmQoY2xvbmUpOworKyAgfSwKKysKKysgIHB1cmdlOiBmdW5j
dGlvbihlbGVtZW50KSB7CisrICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1lbnQpKSkgcmV0dXJu
OworKyAgICB2YXIgcHVyZ2VFbGVtZW50ID0gRWxlbWVudC5fcHVyZ2VFbGVtZW50OworKworKyAg
ICBwdXJnZUVsZW1lbnQoZWxlbWVudCk7CisrCisrICAgIHZhciBkZXNjZW5kYW50cyA9IGVsZW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSwKKysgICAgIGkgPSBkZXNjZW5kYW50cy5sZW5n
dGg7CisrCisrICAgIHdoaWxlIChpLS0pIHB1cmdlRWxlbWVudChkZXNjZW5kYW50c1tpXSk7Cisr
CisrICAgIHJldHVybiBudWxsOworKyAgfQorK30pOworKworKyhmdW5jdGlvbigpIHsKKysKKysg
IGZ1bmN0aW9uIHRvRGVjaW1hbChwY3RTdHJpbmcpIHsKKysgICAgdmFyIG1hdGNoID0gcGN0U3Ry
aW5nLm1hdGNoKC9eKFxkKyklPyQvaSk7CisrICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsOwor
KyAgICByZXR1cm4gKE51bWJlcihtYXRjaFsxXSkgLyAxMDApOworKyAgfQorKworKyAgZnVuY3Rp
b24gZ2V0UGl4ZWxWYWx1ZSh2YWx1ZSwgcHJvcGVydHksIGNvbnRleHQpIHsKKysgICAgdmFyIGVs
ZW1lbnQgPSBudWxsOworKyAgICBpZiAoT2JqZWN0LmlzRWxlbWVudCh2YWx1ZSkpIHsKKysgICAg
ICBlbGVtZW50ID0gdmFsdWU7CisrICAgICAgdmFsdWUgPSBlbGVtZW50LmdldFN0eWxlKHByb3Bl
cnR5KTsKKysgICAgfQorKworKyAgICBpZiAodmFsdWUgPT09IG51bGwpIHsKKysgICAgICByZXR1
cm4gbnVsbDsKKysgICAgfQorKworKyAgICBpZiAoKC9eKD86LSk/XGQrKFwuXGQrKT8ocHgpPyQv
aSkudGVzdCh2YWx1ZSkpIHsKKysgICAgICByZXR1cm4gd2luZG93LnBhcnNlRmxvYXQodmFsdWUp
OworKyAgICB9CisrCisrICAgIHZhciBpc1BlcmNlbnRhZ2UgPSB2YWx1ZS5pbmNsdWRlKCclJyks
IGlzVmlld3BvcnQgPSAoY29udGV4dCA9PT0gZG9jdW1lbnQudmlld3BvcnQpOworKworKyAgICBp
ZiAoL1xkLy50ZXN0KHZhbHVlKSAmJiBlbGVtZW50ICYmIGVsZW1lbnQucnVudGltZVN0eWxlICYm
ICEoaXNQZXJjZW50YWdlICYmIGlzVmlld3BvcnQpKSB7CisrICAgICAgdmFyIHN0eWxlID0gZWxl
bWVudC5zdHlsZS5sZWZ0LCByU3R5bGUgPSBlbGVtZW50LnJ1bnRpbWVTdHlsZS5sZWZ0OworKyAg
ICAgIGVsZW1lbnQucnVudGltZVN0eWxlLmxlZnQgPSBlbGVtZW50LmN1cnJlbnRTdHlsZS5sZWZ0
OworKyAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IHZhbHVlIHx8IDA7CisrICAgICAgdmFsdWUg
PSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDsKKysgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBz
dHlsZTsKKysgICAgICBlbGVtZW50LnJ1bnRpbWVTdHlsZS5sZWZ0ID0gclN0eWxlOworKworKyAg
ICAgIHJldHVybiB2YWx1ZTsKKysgICAgfQorKworKyAgICBpZiAoZWxlbWVudCAmJiBpc1BlcmNl
bnRhZ2UpIHsKKysgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCBlbGVtZW50LnBhcmVudE5vZGU7
CisrICAgICAgdmFyIGRlY2ltYWwgPSB0b0RlY2ltYWwodmFsdWUpOworKyAgICAgIHZhciB3aG9s
ZSA9IG51bGw7CisrICAgICAgdmFyIHBvc2l0aW9uID0gZWxlbWVudC5nZXRTdHlsZSgncG9zaXRp
b24nKTsKKysKKysgICAgICB2YXIgaXNIb3Jpem9udGFsID0gcHJvcGVydHkuaW5jbHVkZSgnbGVm
dCcpIHx8IHByb3BlcnR5LmluY2x1ZGUoJ3JpZ2h0JykgfHwKKysgICAgICAgcHJvcGVydHkuaW5j
bHVkZSgnd2lkdGgnKTsKKysKKysgICAgICB2YXIgaXNWZXJ0aWNhbCA9ICBwcm9wZXJ0eS5pbmNs
dWRlKCd0b3AnKSB8fCBwcm9wZXJ0eS5pbmNsdWRlKCdib3R0b20nKSB8fAorKyAgICAgICAgcHJv
cGVydHkuaW5jbHVkZSgnaGVpZ2h0Jyk7CisrCisrICAgICAgaWYgKGNvbnRleHQgPT09IGRvY3Vt
ZW50LnZpZXdwb3J0KSB7CisrICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7CisrICAgICAgICAg
IHdob2xlID0gZG9jdW1lbnQudmlld3BvcnQuZ2V0V2lkdGgoKTsKKysgICAgICAgIH0gZWxzZSBp
ZiAoaXNWZXJ0aWNhbCkgeworKyAgICAgICAgICB3aG9sZSA9IGRvY3VtZW50LnZpZXdwb3J0Lmdl
dEhlaWdodCgpOworKyAgICAgICAgfQorKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBpZiAoaXNI
b3Jpem9udGFsKSB7CisrICAgICAgICAgIHdob2xlID0gJChjb250ZXh0KS5tZWFzdXJlKCd3aWR0
aCcpOworKyAgICAgICAgfSBlbHNlIGlmIChpc1ZlcnRpY2FsKSB7CisrICAgICAgICAgIHdob2xl
ID0gJChjb250ZXh0KS5tZWFzdXJlKCdoZWlnaHQnKTsKKysgICAgICAgIH0KKysgICAgICB9Cisr
CisrICAgICAgcmV0dXJuICh3aG9sZSA9PT0gbnVsbCkgPyAwIDogd2hvbGUgKiBkZWNpbWFsOwor
KyAgICB9CisrCisrICAgIHJldHVybiAwOworKyAgfQorKworKyAgZnVuY3Rpb24gdG9DU1NQaXhl
bHMobnVtYmVyKSB7CisrICAgIGlmIChPYmplY3QuaXNTdHJpbmcobnVtYmVyKSAmJiBudW1iZXIu
ZW5kc1dpdGgoJ3B4JykpIHsKKysgICAgICByZXR1cm4gbnVtYmVyOworKyAgICB9CisrICAgIHJl
dHVybiBudW1iZXIgKyAncHgnOworKyAgfQorKworKyAgZnVuY3Rpb24gaXNEaXNwbGF5ZWQoZWxl
bWVudCkgeworKyAgICB2YXIgb3JpZ2luYWxFbGVtZW50ID0gZWxlbWVudDsKKysgICAgd2hpbGUg
KGVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnROb2RlKSB7CisrICAgICAgdmFyIGRpc3BsYXkgPSBl
bGVtZW50LmdldFN0eWxlKCdkaXNwbGF5Jyk7CisrICAgICAgaWYgKGRpc3BsYXkgPT09ICdub25l
JykgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgIH0KKysgICAgICBlbGVtZW50ID0g
JChlbGVtZW50LnBhcmVudE5vZGUpOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworKyAgfQor
KworKyAgdmFyIGhhc0xheW91dCA9IFByb3RvdHlwZS5LOworKyAgaWYgKCdjdXJyZW50U3R5bGUn
IGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgeworKyAgICBoYXNMYXlvdXQgPSBmdW5jdGlv
bihlbGVtZW50KSB7CisrICAgICAgaWYgKCFlbGVtZW50LmN1cnJlbnRTdHlsZS5oYXNMYXlvdXQp
IHsKKysgICAgICAgIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7CisrICAgICAgfQorKyAgICAgIHJl
dHVybiBlbGVtZW50OworKyAgICB9OworKyAgfQorKworKyAgZnVuY3Rpb24gY3NzTmFtZUZvcihr
ZXkpIHsKKysgICAgaWYgKGtleS5pbmNsdWRlKCdib3JkZXInKSkga2V5ID0ga2V5ICsgJy13aWR0
aCc7CisrICAgIHJldHVybiBrZXkuY2FtZWxpemUoKTsKKysgIH0KKysKKysgIEVsZW1lbnQuTGF5
b3V0ID0gQ2xhc3MuY3JlYXRlKEhhc2gsIHsKKysgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oJHN1
cGVyLCBlbGVtZW50LCBwcmVDb21wdXRlKSB7CisrICAgICAgJHN1cGVyKCk7CisrICAgICAgdGhp
cy5lbGVtZW50ID0gJChlbGVtZW50KTsKKysKKysgICAgICBFbGVtZW50LkxheW91dC5QUk9QRVJU
SUVTLmVhY2goIGZ1bmN0aW9uKHByb3BlcnR5KSB7CisrICAgICAgICB0aGlzLl9zZXQocHJvcGVy
dHksIG51bGwpOworKyAgICAgIH0sIHRoaXMpOworKworKyAgICAgIGlmIChwcmVDb21wdXRlKSB7
CisrICAgICAgICB0aGlzLl9wcmVDb21wdXRpbmcgPSB0cnVlOworKyAgICAgICAgdGhpcy5fYmVn
aW4oKTsKKysgICAgICAgIEVsZW1lbnQuTGF5b3V0LlBST1BFUlRJRVMuZWFjaCggdGhpcy5fY29t
cHV0ZSwgdGhpcyApOworKyAgICAgICAgdGhpcy5fZW5kKCk7CisrICAgICAgICB0aGlzLl9wcmVD
b21wdXRpbmcgPSBmYWxzZTsKKysgICAgICB9CisrICAgIH0sCisrCisrICAgIF9zZXQ6IGZ1bmN0
aW9uKHByb3BlcnR5LCB2YWx1ZSkgeworKyAgICAgIHJldHVybiBIYXNoLnByb3RvdHlwZS5zZXQu
Y2FsbCh0aGlzLCBwcm9wZXJ0eSwgdmFsdWUpOworKyAgICB9LAorKworKyAgICBzZXQ6IGZ1bmN0
aW9uKHByb3BlcnR5LCB2YWx1ZSkgeworKyAgICAgIHRocm93ICJQcm9wZXJ0aWVzIG9mIEVsZW1l
bnQuTGF5b3V0IGFyZSByZWFkLW9ubHkuIjsKKysgICAgfSwKKysKKysgICAgZ2V0OiBmdW5jdGlv
bigkc3VwZXIsIHByb3BlcnR5KSB7CisrICAgICAgdmFyIHZhbHVlID0gJHN1cGVyKHByb3BlcnR5
KTsKKysgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyB0aGlzLl9jb21wdXRlKHByb3BlcnR5
KSA6IHZhbHVlOworKyAgICB9LAorKworKyAgICBfYmVnaW46IGZ1bmN0aW9uKCkgeworKyAgICAg
IGlmICh0aGlzLl9wcmVwYXJlZCkgcmV0dXJuOworKworKyAgICAgIHZhciBlbGVtZW50ID0gdGhp
cy5lbGVtZW50OworKyAgICAgIGlmIChpc0Rpc3BsYXllZChlbGVtZW50KSkgeworKyAgICAgICAg
dGhpcy5fcHJlcGFyZWQgPSB0cnVlOworKyAgICAgICAgcmV0dXJuOworKyAgICAgIH0KKysKKysg
ICAgICB2YXIgb3JpZ2luYWxTdHlsZXMgPSB7CisrICAgICAgICBwb3NpdGlvbjogICBlbGVtZW50
LnN0eWxlLnBvc2l0aW9uICAgfHwgJycsCisrICAgICAgICB3aWR0aDogICAgICBlbGVtZW50LnN0
eWxlLndpZHRoICAgICAgfHwgJycsCisrICAgICAgICB2aXNpYmlsaXR5OiBlbGVtZW50LnN0eWxl
LnZpc2liaWxpdHkgfHwgJycsCisrICAgICAgICBkaXNwbGF5OiAgICBlbGVtZW50LnN0eWxlLmRp
c3BsYXkgICAgfHwgJycKKysgICAgICB9OworKworKyAgICAgIGVsZW1lbnQuc3RvcmUoJ3Byb3Rv
dHlwZV9vcmlnaW5hbF9zdHlsZXMnLCBvcmlnaW5hbFN0eWxlcyk7CisrCisrICAgICAgdmFyIHBv
c2l0aW9uID0gZWxlbWVudC5nZXRTdHlsZSgncG9zaXRpb24nKSwKKysgICAgICAgd2lkdGggPSBl
bGVtZW50LmdldFN0eWxlKCd3aWR0aCcpOworKworKyAgICAgIGlmICh3aWR0aCA9PT0gIjBweCIg
fHwgd2lkdGggPT09IG51bGwpIHsKKysgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdi
bG9jayc7CisrICAgICAgICB3aWR0aCA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3dpZHRoJyk7CisrICAg
ICAgfQorKworKyAgICAgIHZhciBjb250ZXh0ID0gKHBvc2l0aW9uID09PSAnZml4ZWQnKSA/IGRv
Y3VtZW50LnZpZXdwb3J0IDoKKysgICAgICAgZWxlbWVudC5wYXJlbnROb2RlOworKworKyAgICAg
IGVsZW1lbnQuc2V0U3R5bGUoeworKyAgICAgICAgcG9zaXRpb246ICAgJ2Fic29sdXRlJywKKysg
ICAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLAorKyAgICAgICAgZGlzcGxheTogICAgJ2Jsb2Nr
JworKyAgICAgIH0pOworKworKyAgICAgIHZhciBwb3NpdGlvbmVkV2lkdGggPSBlbGVtZW50Lmdl
dFN0eWxlKCd3aWR0aCcpOworKworKyAgICAgIHZhciBuZXdXaWR0aDsKKysgICAgICBpZiAod2lk
dGggJiYgKHBvc2l0aW9uZWRXaWR0aCA9PT0gd2lkdGgpKSB7CisrICAgICAgICBuZXdXaWR0aCA9
IGdldFBpeGVsVmFsdWUoZWxlbWVudCwgJ3dpZHRoJywgY29udGV4dCk7CisrICAgICAgfSBlbHNl
IGlmIChwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJyB8fCBwb3NpdGlvbiA9PT0gJ2ZpeGVkJykgewor
KyAgICAgICAgbmV3V2lkdGggPSBnZXRQaXhlbFZhbHVlKGVsZW1lbnQsICd3aWR0aCcsIGNvbnRl
eHQpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJl
bnROb2RlLCBwTGF5b3V0ID0gJChwYXJlbnQpLmdldExheW91dCgpOworKworKyAgICAgICAgbmV3
V2lkdGggPSBwTGF5b3V0LmdldCgnd2lkdGgnKSAtCisrICAgICAgICAgdGhpcy5nZXQoJ21hcmdp
bi1sZWZ0JykgLQorKyAgICAgICAgIHRoaXMuZ2V0KCdib3JkZXItbGVmdCcpIC0KKysgICAgICAg
ICB0aGlzLmdldCgncGFkZGluZy1sZWZ0JykgLQorKyAgICAgICAgIHRoaXMuZ2V0KCdwYWRkaW5n
LXJpZ2h0JykgLQorKyAgICAgICAgIHRoaXMuZ2V0KCdib3JkZXItcmlnaHQnKSAtCisrICAgICAg
ICAgdGhpcy5nZXQoJ21hcmdpbi1yaWdodCcpOworKyAgICAgIH0KKysKKysgICAgICBlbGVtZW50
LnNldFN0eWxlKHsgd2lkdGg6IG5ld1dpZHRoICsgJ3B4JyB9KTsKKysKKysgICAgICB0aGlzLl9w
cmVwYXJlZCA9IHRydWU7CisrICAgIH0sCisrCisrICAgIF9lbmQ6IGZ1bmN0aW9uKCkgeworKyAg
ICAgIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50OworKyAgICAgIHZhciBvcmlnaW5hbFN0eWxl
cyA9IGVsZW1lbnQucmV0cmlldmUoJ3Byb3RvdHlwZV9vcmlnaW5hbF9zdHlsZXMnKTsKKysgICAg
ICBlbGVtZW50LnN0b3JlKCdwcm90b3R5cGVfb3JpZ2luYWxfc3R5bGVzJywgbnVsbCk7CisrICAg
ICAgZWxlbWVudC5zZXRTdHlsZShvcmlnaW5hbFN0eWxlcyk7CisrICAgICAgdGhpcy5fcHJlcGFy
ZWQgPSBmYWxzZTsKKysgICAgfSwKKysKKysgICAgX2NvbXB1dGU6IGZ1bmN0aW9uKHByb3BlcnR5
KSB7CisrICAgICAgdmFyIENPTVBVVEFUSU9OUyA9IEVsZW1lbnQuTGF5b3V0LkNPTVBVVEFUSU9O
UzsKKysgICAgICBpZiAoIShwcm9wZXJ0eSBpbiBDT01QVVRBVElPTlMpKSB7CisrICAgICAgICB0
aHJvdyAiUHJvcGVydHkgbm90IGZvdW5kLiI7CisrICAgICAgfQorKworKyAgICAgIHJldHVybiB0
aGlzLl9zZXQocHJvcGVydHksIENPTVBVVEFUSU9OU1twcm9wZXJ0eV0uY2FsbCh0aGlzLCB0aGlz
LmVsZW1lbnQpKTsKKysgICAgfSwKKysKKysgICAgdG9PYmplY3Q6IGZ1bmN0aW9uKCkgeworKyAg
ICAgIHZhciBhcmdzID0gJEEoYXJndW1lbnRzKTsKKysgICAgICB2YXIga2V5cyA9IChhcmdzLmxl
bmd0aCA9PT0gMCkgPyBFbGVtZW50LkxheW91dC5QUk9QRVJUSUVTIDoKKysgICAgICAgYXJncy5q
b2luKCcgJykuc3BsaXQoJyAnKTsKKysgICAgICB2YXIgb2JqID0ge307CisrICAgICAga2V5cy5l
YWNoKCBmdW5jdGlvbihrZXkpIHsKKysgICAgICAgIGlmICghRWxlbWVudC5MYXlvdXQuUFJPUEVS
VElFUy5pbmNsdWRlKGtleSkpIHJldHVybjsKKysgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0
KGtleSk7CisrICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgb2JqW2tleV0gPSB2YWx1ZTsKKysg
ICAgICB9LCB0aGlzKTsKKysgICAgICByZXR1cm4gb2JqOworKyAgICB9LAorKworKyAgICB0b0hh
c2g6IGZ1bmN0aW9uKCkgeworKyAgICAgIHZhciBvYmogPSB0aGlzLnRvT2JqZWN0LmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7CisrICAgICAgcmV0dXJuIG5ldyBIYXNoKG9iaik7CisrICAgIH0sCisr
CisrICAgIHRvQ1NTOiBmdW5jdGlvbigpIHsKKysgICAgICB2YXIgYXJncyA9ICRBKGFyZ3VtZW50
cyk7CisrICAgICAgdmFyIGtleXMgPSAoYXJncy5sZW5ndGggPT09IDApID8gRWxlbWVudC5MYXlv
dXQuUFJPUEVSVElFUyA6CisrICAgICAgIGFyZ3Muam9pbignICcpLnNwbGl0KCcgJyk7CisrICAg
ICAgdmFyIGNzcyA9IHt9OworKworKyAgICAgIGtleXMuZWFjaCggZnVuY3Rpb24oa2V5KSB7Cisr
ICAgICAgICBpZiAoIUVsZW1lbnQuTGF5b3V0LlBST1BFUlRJRVMuaW5jbHVkZShrZXkpKSByZXR1
cm47CisrICAgICAgICBpZiAoRWxlbWVudC5MYXlvdXQuQ09NUE9TSVRFX1BST1BFUlRJRVMuaW5j
bHVkZShrZXkpKSByZXR1cm47CisrCisrICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldChrZXkp
OworKyAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIGNzc1tjc3NOYW1lRm9yKGtleSldID0gdmFs
dWUgKyAncHgnOworKyAgICAgIH0sIHRoaXMpOworKyAgICAgIHJldHVybiBjc3M7CisrICAgIH0s
CisrCisrICAgIGluc3BlY3Q6IGZ1bmN0aW9uKCkgeworKyAgICAgIHJldHVybiAiIzxFbGVtZW50
LkxheW91dD4iOworKyAgICB9CisrICB9KTsKKysKKysgIE9iamVjdC5leHRlbmQoRWxlbWVudC5M
YXlvdXQsIHsKKysgICAgUFJPUEVSVElFUzogJHcoJ2hlaWdodCB3aWR0aCB0b3AgbGVmdCByaWdo
dCBib3R0b20gYm9yZGVyLWxlZnQgYm9yZGVyLXJpZ2h0IGJvcmRlci10b3AgYm9yZGVyLWJvdHRv
bSBwYWRkaW5nLWxlZnQgcGFkZGluZy1yaWdodCBwYWRkaW5nLXRvcCBwYWRkaW5nLWJvdHRvbSBt
YXJnaW4tdG9wIG1hcmdpbi1ib3R0b20gbWFyZ2luLWxlZnQgbWFyZ2luLXJpZ2h0IHBhZGRpbmct
Ym94LXdpZHRoIHBhZGRpbmctYm94LWhlaWdodCBib3JkZXItYm94LXdpZHRoIGJvcmRlci1ib3gt
aGVpZ2h0IG1hcmdpbi1ib3gtd2lkdGggbWFyZ2luLWJveC1oZWlnaHQnKSwKKysKKysgICAgQ09N
UE9TSVRFX1BST1BFUlRJRVM6ICR3KCdwYWRkaW5nLWJveC13aWR0aCBwYWRkaW5nLWJveC1oZWln
aHQgbWFyZ2luLWJveC13aWR0aCBtYXJnaW4tYm94LWhlaWdodCBib3JkZXItYm94LXdpZHRoIGJv
cmRlci1ib3gtaGVpZ2h0JyksCisrCisrICAgIENPTVBVVEFUSU9OUzogeworKyAgICAgICdoZWln
aHQnOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgICBpZiAoIXRoaXMuX3ByZUNvbXB1dGlu
ZykgdGhpcy5fYmVnaW4oKTsKKysKKysgICAgICAgIHZhciBiSGVpZ2h0ID0gdGhpcy5nZXQoJ2Jv
cmRlci1ib3gtaGVpZ2h0Jyk7CisrICAgICAgICBpZiAoYkhlaWdodCA8PSAwKSB7CisrICAgICAg
ICAgIGlmICghdGhpcy5fcHJlQ29tcHV0aW5nKSB0aGlzLl9lbmQoKTsKKysgICAgICAgICAgcmV0
dXJuIDA7CisrICAgICAgICB9CisrCisrICAgICAgICB2YXIgYlRvcCA9IHRoaXMuZ2V0KCdib3Jk
ZXItdG9wJyksCisrICAgICAgICAgYkJvdHRvbSA9IHRoaXMuZ2V0KCdib3JkZXItYm90dG9tJyk7
CisrCisrICAgICAgICB2YXIgcFRvcCA9IHRoaXMuZ2V0KCdwYWRkaW5nLXRvcCcpLAorKyAgICAg
ICAgIHBCb3R0b20gPSB0aGlzLmdldCgncGFkZGluZy1ib3R0b20nKTsKKysKKysgICAgICAgIGlm
ICghdGhpcy5fcHJlQ29tcHV0aW5nKSB0aGlzLl9lbmQoKTsKKysKKysgICAgICAgIHJldHVybiBi
SGVpZ2h0IC0gYlRvcCAtIGJCb3R0b20gLSBwVG9wIC0gcEJvdHRvbTsKKysgICAgICB9LAorKwor
KyAgICAgICd3aWR0aCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgIGlmICghdGhpcy5f
cHJlQ29tcHV0aW5nKSB0aGlzLl9iZWdpbigpOworKworKyAgICAgICAgdmFyIGJXaWR0aCA9IHRo
aXMuZ2V0KCdib3JkZXItYm94LXdpZHRoJyk7CisrICAgICAgICBpZiAoYldpZHRoIDw9IDApIHsK
KysgICAgICAgICAgaWYgKCF0aGlzLl9wcmVDb21wdXRpbmcpIHRoaXMuX2VuZCgpOworKyAgICAg
ICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHZhciBiTGVmdCA9IHRoaXMu
Z2V0KCdib3JkZXItbGVmdCcpLAorKyAgICAgICAgIGJSaWdodCA9IHRoaXMuZ2V0KCdib3JkZXIt
cmlnaHQnKTsKKysKKysgICAgICAgIHZhciBwTGVmdCA9IHRoaXMuZ2V0KCdwYWRkaW5nLWxlZnQn
KSwKKysgICAgICAgICBwUmlnaHQgPSB0aGlzLmdldCgncGFkZGluZy1yaWdodCcpOworKworKyAg
ICAgICAgaWYgKCF0aGlzLl9wcmVDb21wdXRpbmcpIHRoaXMuX2VuZCgpOworKworKyAgICAgICAg
cmV0dXJuIGJXaWR0aCAtIGJMZWZ0IC0gYlJpZ2h0IC0gcExlZnQgLSBwUmlnaHQ7CisrICAgICAg
fSwKKysKKysgICAgICAncGFkZGluZy1ib3gtaGVpZ2h0JzogZnVuY3Rpb24oZWxlbWVudCkgewor
KyAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0KCdoZWlnaHQnKSwKKysgICAgICAgICBwVG9w
ID0gdGhpcy5nZXQoJ3BhZGRpbmctdG9wJyksCisrICAgICAgICAgcEJvdHRvbSA9IHRoaXMuZ2V0
KCdwYWRkaW5nLWJvdHRvbScpOworKworKyAgICAgICAgcmV0dXJuIGhlaWdodCArIHBUb3AgKyBw
Qm90dG9tOworKyAgICAgIH0sCisrCisrICAgICAgJ3BhZGRpbmctYm94LXdpZHRoJzogZnVuY3Rp
b24oZWxlbWVudCkgeworKyAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXQoJ3dpZHRoJyksCisr
ICAgICAgICAgcExlZnQgPSB0aGlzLmdldCgncGFkZGluZy1sZWZ0JyksCisrICAgICAgICAgcFJp
Z2h0ID0gdGhpcy5nZXQoJ3BhZGRpbmctcmlnaHQnKTsKKysKKysgICAgICAgIHJldHVybiB3aWR0
aCArIHBMZWZ0ICsgcFJpZ2h0OworKyAgICAgIH0sCisrCisrICAgICAgJ2JvcmRlci1ib3gtaGVp
Z2h0JzogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICAgICAgaWYgKCF0aGlzLl9wcmVDb21wdXRp
bmcpIHRoaXMuX2JlZ2luKCk7CisrICAgICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRI
ZWlnaHQ7CisrICAgICAgICBpZiAoIXRoaXMuX3ByZUNvbXB1dGluZykgdGhpcy5fZW5kKCk7Cisr
ICAgICAgICByZXR1cm4gaGVpZ2h0OworKyAgICAgIH0sCisrCisrICAgICAgJ2JvcmRlci1ib3gt
d2lkdGgnOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgICBpZiAoIXRoaXMuX3ByZUNvbXB1
dGluZykgdGhpcy5fYmVnaW4oKTsKKysgICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0
V2lkdGg7CisrICAgICAgICBpZiAoIXRoaXMuX3ByZUNvbXB1dGluZykgdGhpcy5fZW5kKCk7Cisr
ICAgICAgICByZXR1cm4gd2lkdGg7CisrICAgICAgfSwKKysKKysgICAgICAnbWFyZ2luLWJveC1o
ZWlnaHQnOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgICB2YXIgYkhlaWdodCA9IHRoaXMu
Z2V0KCdib3JkZXItYm94LWhlaWdodCcpLAorKyAgICAgICAgIG1Ub3AgPSB0aGlzLmdldCgnbWFy
Z2luLXRvcCcpLAorKyAgICAgICAgIG1Cb3R0b20gPSB0aGlzLmdldCgnbWFyZ2luLWJvdHRvbScp
OworKworKyAgICAgICAgaWYgKGJIZWlnaHQgPD0gMCkgcmV0dXJuIDA7CisrCisrICAgICAgICBy
ZXR1cm4gYkhlaWdodCArIG1Ub3AgKyBtQm90dG9tOworKyAgICAgIH0sCisrCisrICAgICAgJ21h
cmdpbi1ib3gtd2lkdGgnOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgICB2YXIgYldpZHRo
ID0gdGhpcy5nZXQoJ2JvcmRlci1ib3gtd2lkdGgnKSwKKysgICAgICAgICBtTGVmdCA9IHRoaXMu
Z2V0KCdtYXJnaW4tbGVmdCcpLAorKyAgICAgICAgIG1SaWdodCA9IHRoaXMuZ2V0KCdtYXJnaW4t
cmlnaHQnKTsKKysKKysgICAgICAgIGlmIChiV2lkdGggPD0gMCkgcmV0dXJuIDA7CisrCisrICAg
ICAgICByZXR1cm4gYldpZHRoICsgbUxlZnQgKyBtUmlnaHQ7CisrICAgICAgfSwKKysKKysgICAg
ICAndG9wJzogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICAgICAgdmFyIG9mZnNldCA9IGVsZW1l
bnQucG9zaXRpb25lZE9mZnNldCgpOworKyAgICAgICAgcmV0dXJuIG9mZnNldC50b3A7CisrICAg
ICAgfSwKKysKKysgICAgICAnYm90dG9tJzogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICAgICAg
dmFyIG9mZnNldCA9IGVsZW1lbnQucG9zaXRpb25lZE9mZnNldCgpLAorKyAgICAgICAgIHBhcmVu
dCA9IGVsZW1lbnQuZ2V0T2Zmc2V0UGFyZW50KCksCisrICAgICAgICAgcEhlaWdodCA9IHBhcmVu
dC5tZWFzdXJlKCdoZWlnaHQnKTsKKysKKysgICAgICAgIHZhciBtSGVpZ2h0ID0gdGhpcy5nZXQo
J2JvcmRlci1ib3gtaGVpZ2h0Jyk7CisrCisrICAgICAgICByZXR1cm4gcEhlaWdodCAtIG1IZWln
aHQgLSBvZmZzZXQudG9wOworKyAgICAgIH0sCisrCisrICAgICAgJ2xlZnQnOiBmdW5jdGlvbihl
bGVtZW50KSB7CisrICAgICAgICB2YXIgb2Zmc2V0ID0gZWxlbWVudC5wb3NpdGlvbmVkT2Zmc2V0
KCk7CisrICAgICAgICByZXR1cm4gb2Zmc2V0LmxlZnQ7CisrICAgICAgfSwKKysKKysgICAgICAn
cmlnaHQnOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgICB2YXIgb2Zmc2V0ID0gZWxlbWVu
dC5wb3NpdGlvbmVkT2Zmc2V0KCksCisrICAgICAgICAgcGFyZW50ID0gZWxlbWVudC5nZXRPZmZz
ZXRQYXJlbnQoKSwKKysgICAgICAgICBwV2lkdGggPSBwYXJlbnQubWVhc3VyZSgnd2lkdGgnKTsK
KysKKysgICAgICAgIHZhciBtV2lkdGggPSB0aGlzLmdldCgnYm9yZGVyLWJveC13aWR0aCcpOwor
KworKyAgICAgICAgcmV0dXJuIHBXaWR0aCAtIG1XaWR0aCAtIG9mZnNldC5sZWZ0OworKyAgICAg
IH0sCisrCisrICAgICAgJ3BhZGRpbmctdG9wJzogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICAg
ICAgcmV0dXJuIGdldFBpeGVsVmFsdWUoZWxlbWVudCwgJ3BhZGRpbmdUb3AnKTsKKysgICAgICB9
LAorKworKyAgICAgICdwYWRkaW5nLWJvdHRvbSc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAg
ICAgIHJldHVybiBnZXRQaXhlbFZhbHVlKGVsZW1lbnQsICdwYWRkaW5nQm90dG9tJyk7CisrICAg
ICAgfSwKKysKKysgICAgICAncGFkZGluZy1sZWZ0JzogZnVuY3Rpb24oZWxlbWVudCkgeworKyAg
ICAgICAgcmV0dXJuIGdldFBpeGVsVmFsdWUoZWxlbWVudCwgJ3BhZGRpbmdMZWZ0Jyk7CisrICAg
ICAgfSwKKysKKysgICAgICAncGFkZGluZy1yaWdodCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysg
ICAgICAgIHJldHVybiBnZXRQaXhlbFZhbHVlKGVsZW1lbnQsICdwYWRkaW5nUmlnaHQnKTsKKysg
ICAgICB9LAorKworKyAgICAgICdib3JkZXItdG9wJzogZnVuY3Rpb24oZWxlbWVudCkgeworKyAg
ICAgICAgcmV0dXJuIGdldFBpeGVsVmFsdWUoZWxlbWVudCwgJ2JvcmRlclRvcFdpZHRoJyk7Cisr
ICAgICAgfSwKKysKKysgICAgICAnYm9yZGVyLWJvdHRvbSc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
KysgICAgICAgIHJldHVybiBnZXRQaXhlbFZhbHVlKGVsZW1lbnQsICdib3JkZXJCb3R0b21XaWR0
aCcpOworKyAgICAgIH0sCisrCisrICAgICAgJ2JvcmRlci1sZWZ0JzogZnVuY3Rpb24oZWxlbWVu
dCkgeworKyAgICAgICAgcmV0dXJuIGdldFBpeGVsVmFsdWUoZWxlbWVudCwgJ2JvcmRlckxlZnRX
aWR0aCcpOworKyAgICAgIH0sCisrCisrICAgICAgJ2JvcmRlci1yaWdodCc6IGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKKysgICAgICAgIHJldHVybiBnZXRQaXhlbFZhbHVlKGVsZW1lbnQsICdib3JkZXJS
aWdodFdpZHRoJyk7CisrICAgICAgfSwKKysKKysgICAgICAnbWFyZ2luLXRvcCc6IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKKysgICAgICAgIHJldHVybiBnZXRQaXhlbFZhbHVlKGVsZW1lbnQsICdtYXJn
aW5Ub3AnKTsKKysgICAgICB9LAorKworKyAgICAgICdtYXJnaW4tYm90dG9tJzogZnVuY3Rpb24o
ZWxlbWVudCkgeworKyAgICAgICAgcmV0dXJuIGdldFBpeGVsVmFsdWUoZWxlbWVudCwgJ21hcmdp
bkJvdHRvbScpOworKyAgICAgIH0sCisrCisrICAgICAgJ21hcmdpbi1sZWZ0JzogZnVuY3Rpb24o
ZWxlbWVudCkgeworKyAgICAgICAgcmV0dXJuIGdldFBpeGVsVmFsdWUoZWxlbWVudCwgJ21hcmdp
bkxlZnQnKTsKKysgICAgICB9LAorKworKyAgICAgICdtYXJnaW4tcmlnaHQnOiBmdW5jdGlvbihl
bGVtZW50KSB7CisrICAgICAgICByZXR1cm4gZ2V0UGl4ZWxWYWx1ZShlbGVtZW50LCAnbWFyZ2lu
UmlnaHQnKTsKKysgICAgICB9CisrICAgIH0KKysgIH0pOworKworKyAgaWYgKCdnZXRCb3VuZGlu
Z0NsaWVudFJlY3QnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgeworKyAgICBPYmplY3Qu
ZXh0ZW5kKEVsZW1lbnQuTGF5b3V0LkNPTVBVVEFUSU9OUywgeworKyAgICAgICdyaWdodCc6IGZ1
bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgIHZhciBwYXJlbnQgPSBoYXNMYXlvdXQoZWxlbWVu
dC5nZXRPZmZzZXRQYXJlbnQoKSk7CisrICAgICAgICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCksCisrICAgICAgICAgcFJlY3QgPSBwYXJlbnQuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCk7CisrCisrICAgICAgICByZXR1cm4gKHBSZWN0LnJpZ2h0IC0gcmVjdC5yaWdo
dCkucm91bmQoKTsKKysgICAgICB9LAorKworKyAgICAgICdib3R0b20nOiBmdW5jdGlvbihlbGVt
ZW50KSB7CisrICAgICAgICB2YXIgcGFyZW50ID0gaGFzTGF5b3V0KGVsZW1lbnQuZ2V0T2Zmc2V0
UGFyZW50KCkpOworKyAgICAgICAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpLAorKyAgICAgICAgIHBSZWN0ID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OworKworKyAgICAgICAgcmV0dXJuIChwUmVjdC5ib3R0b20gLSByZWN0LmJvdHRvbSkucm91bmQo
KTsKKysgICAgICB9CisrICAgIH0pOworKyAgfQorKworKyAgRWxlbWVudC5PZmZzZXQgPSBDbGFz
cy5jcmVhdGUoeworKyAgICBpbml0aWFsaXplOiBmdW5jdGlvbihsZWZ0LCB0b3ApIHsKKysgICAg
ICB0aGlzLmxlZnQgPSBsZWZ0LnJvdW5kKCk7CisrICAgICAgdGhpcy50b3AgID0gdG9wLnJvdW5k
KCk7CisrCisrICAgICAgdGhpc1swXSA9IHRoaXMubGVmdDsKKysgICAgICB0aGlzWzFdID0gdGhp
cy50b3A7CisrICAgIH0sCisrCisrICAgIHJlbGF0aXZlVG86IGZ1bmN0aW9uKG9mZnNldCkgewor
KyAgICAgIHJldHVybiBuZXcgRWxlbWVudC5PZmZzZXQoCisrICAgICAgICB0aGlzLmxlZnQgLSBv
ZmZzZXQubGVmdCwKKysgICAgICAgIHRoaXMudG9wICAtIG9mZnNldC50b3AKKysgICAgICApOwor
KyAgICB9LAorKworKyAgICBpbnNwZWN0OiBmdW5jdGlvbigpIHsKKysgICAgICByZXR1cm4gIiM8
RWxlbWVudC5PZmZzZXQgbGVmdDogI3tsZWZ0fSB0b3A6ICN7dG9wfT4iLmludGVycG9sYXRlKHRo
aXMpOworKyAgICB9LAorKworKyAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CisrICAgICAgcmV0
dXJuICJbI3tsZWZ0fSwgI3t0b3B9XSIuaW50ZXJwb2xhdGUodGhpcyk7CisrICAgIH0sCisrCisr
ICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgeworKyAgICAgIHJldHVybiBbdGhpcy5sZWZ0LCB0aGlz
LnRvcF07CisrICAgIH0KKysgIH0pOworKworKyAgZnVuY3Rpb24gZ2V0TGF5b3V0KGVsZW1lbnQs
IHByZUNvbXB1dGUpIHsKKysgICAgcmV0dXJuIG5ldyBFbGVtZW50LkxheW91dChlbGVtZW50LCBw
cmVDb21wdXRlKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIG1lYXN1cmUoZWxlbWVudCwgcHJvcGVy
dHkpIHsKKysgICAgcmV0dXJuICQoZWxlbWVudCkuZ2V0TGF5b3V0KCkuZ2V0KHByb3BlcnR5KTsK
KysgIH0KKysKKysgIGZ1bmN0aW9uIGdldERpbWVuc2lvbnMoZWxlbWVudCkgeworKyAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKKysgICAgdmFyIGRpc3BsYXkgPSBFbGVtZW50LmdldFN0eWxlKGVs
ZW1lbnQsICdkaXNwbGF5Jyk7CisrCisrICAgIGlmIChkaXNwbGF5ICYmIGRpc3BsYXkgIT09ICdu
b25lJykgeworKyAgICAgIHJldHVybiB7IHdpZHRoOiBlbGVtZW50Lm9mZnNldFdpZHRoLCBoZWln
aHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IH07CisrICAgIH0KKysKKysgICAgdmFyIHN0eWxlID0g
ZWxlbWVudC5zdHlsZTsKKysgICAgdmFyIG9yaWdpbmFsU3R5bGVzID0geworKyAgICAgIHZpc2li
aWxpdHk6IHN0eWxlLnZpc2liaWxpdHksCisrICAgICAgcG9zaXRpb246ICAgc3R5bGUucG9zaXRp
b24sCisrICAgICAgZGlzcGxheTogICAgc3R5bGUuZGlzcGxheQorKyAgICB9OworKworKyAgICB2
YXIgbmV3U3R5bGVzID0geworKyAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLAorKyAgICAgIGRp
c3BsYXk6ICAgICdibG9jaycKKysgICAgfTsKKysKKysgICAgaWYgKG9yaWdpbmFsU3R5bGVzLnBv
c2l0aW9uICE9PSAnZml4ZWQnKQorKyAgICAgIG5ld1N0eWxlcy5wb3NpdGlvbiA9ICdhYnNvbHV0
ZSc7CisrCisrICAgIEVsZW1lbnQuc2V0U3R5bGUoZWxlbWVudCwgbmV3U3R5bGVzKTsKKysKKysg
ICAgdmFyIGRpbWVuc2lvbnMgPSB7CisrICAgICAgd2lkdGg6ICBlbGVtZW50Lm9mZnNldFdpZHRo
LAorKyAgICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHQKKysgICAgfTsKKysKKysgICAg
RWxlbWVudC5zZXRTdHlsZShlbGVtZW50LCBvcmlnaW5hbFN0eWxlcyk7CisrCisrICAgIHJldHVy
biBkaW1lbnNpb25zOworKyAgfQorKworKyAgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1l
bnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrCisrICAgIGlmIChpc0RvY3VtZW50
KGVsZW1lbnQpIHx8IGlzRGV0YWNoZWQoZWxlbWVudCkgfHwgaXNCb2R5KGVsZW1lbnQpIHx8IGlz
SHRtbChlbGVtZW50KSkKKysgICAgICByZXR1cm4gJChkb2N1bWVudC5ib2R5KTsKKysKKysgICAg
dmFyIGlzSW5saW5lID0gKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ2Rpc3BsYXknKSA9PT0g
J2lubGluZScpOworKyAgICBpZiAoIWlzSW5saW5lICYmIGVsZW1lbnQub2Zmc2V0UGFyZW50KSBy
ZXR1cm4gJChlbGVtZW50Lm9mZnNldFBhcmVudCk7CisrCisrICAgIHdoaWxlICgoZWxlbWVudCA9
IGVsZW1lbnQucGFyZW50Tm9kZSkgJiYgZWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkgeworKyAg
ICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpICE9PSAnc3RhdGlj
JykgeworKyAgICAgICAgcmV0dXJuIGlzSHRtbChlbGVtZW50KSA/ICQoZG9jdW1lbnQuYm9keSkg
OiAkKGVsZW1lbnQpOworKyAgICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gJChkb2N1bWVu
dC5ib2R5KTsKKysgIH0KKysKKysKKysgIGZ1bmN0aW9uIGN1bXVsYXRpdmVPZmZzZXQoZWxlbWVu
dCkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgdmFyIHZhbHVlVCA9IDAsIHZh
bHVlTCA9IDA7CisrICAgIGlmIChlbGVtZW50LnBhcmVudE5vZGUpIHsKKysgICAgICBkbyB7Cisr
ICAgICAgICB2YWx1ZVQgKz0gZWxlbWVudC5vZmZzZXRUb3AgIHx8IDA7CisrICAgICAgICB2YWx1
ZUwgKz0gZWxlbWVudC5vZmZzZXRMZWZ0IHx8IDA7CisrICAgICAgICBlbGVtZW50ID0gZWxlbWVu
dC5vZmZzZXRQYXJlbnQ7CisrICAgICAgfSB3aGlsZSAoZWxlbWVudCk7CisrICAgIH0KKysgICAg
cmV0dXJuIG5ldyBFbGVtZW50Lk9mZnNldCh2YWx1ZUwsIHZhbHVlVCk7CisrICB9CisrCisrICBm
dW5jdGlvbiBwb3NpdGlvbmVkT2Zmc2V0KGVsZW1lbnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxl
bWVudCk7CisrCisrICAgIHZhciBsYXlvdXQgPSBlbGVtZW50LmdldExheW91dCgpOworKworKyAg
ICB2YXIgdmFsdWVUID0gMCwgdmFsdWVMID0gMDsKKysgICAgZG8geworKyAgICAgIHZhbHVlVCAr
PSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsKKysgICAgICB2YWx1ZUwgKz0gZWxlbWVudC5vZmZz
ZXRMZWZ0IHx8IDA7CisrICAgICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OworKyAg
ICAgIGlmIChlbGVtZW50KSB7CisrICAgICAgICBpZiAoaXNCb2R5KGVsZW1lbnQpKSBicmVhazsK
KysgICAgICAgIHZhciBwID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKTsK
KysgICAgICAgIGlmIChwICE9PSAnc3RhdGljJykgYnJlYWs7CisrICAgICAgfQorKyAgICB9IHdo
aWxlIChlbGVtZW50KTsKKysKKysgICAgdmFsdWVMIC09IGxheW91dC5nZXQoJ21hcmdpbi10b3An
KTsKKysgICAgdmFsdWVUIC09IGxheW91dC5nZXQoJ21hcmdpbi1sZWZ0Jyk7CisrCisrICAgIHJl
dHVybiBuZXcgRWxlbWVudC5PZmZzZXQodmFsdWVMLCB2YWx1ZVQpOworKyAgfQorKworKyAgZnVu
Y3Rpb24gY3VtdWxhdGl2ZVNjcm9sbE9mZnNldChlbGVtZW50KSB7CisrICAgIHZhciB2YWx1ZVQg
PSAwLCB2YWx1ZUwgPSAwOworKyAgICBkbyB7CisrICAgICAgdmFsdWVUICs9IGVsZW1lbnQuc2Ny
b2xsVG9wICB8fCAwOworKyAgICAgIHZhbHVlTCArPSBlbGVtZW50LnNjcm9sbExlZnQgfHwgMDsK
KysgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOworKyAgICB9IHdoaWxlIChlbGVt
ZW50KTsKKysgICAgcmV0dXJuIG5ldyBFbGVtZW50Lk9mZnNldCh2YWx1ZUwsIHZhbHVlVCk7Cisr
ICB9CisrCisrICBmdW5jdGlvbiB2aWV3cG9ydE9mZnNldChmb3JFbGVtZW50KSB7CisrICAgIGVs
ZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICB2YXIgdmFsdWVUID0gMCwgdmFsdWVMID0gMCwgZG9j
Qm9keSA9IGRvY3VtZW50LmJvZHk7CisrCisrICAgIHZhciBlbGVtZW50ID0gZm9yRWxlbWVudDsK
KysgICAgZG8geworKyAgICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsKKysg
ICAgICB2YWx1ZUwgKz0gZWxlbWVudC5vZmZzZXRMZWZ0IHx8IDA7CisrICAgICAgaWYgKGVsZW1l
bnQub2Zmc2V0UGFyZW50ID09IGRvY0JvZHkgJiYKKysgICAgICAgIEVsZW1lbnQuZ2V0U3R5bGUo
ZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2Fic29sdXRlJykgYnJlYWs7CisrICAgIH0gd2hpbGUg
KGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudCk7CisrCisrICAgIGVsZW1lbnQgPSBmb3JF
bGVtZW50OworKyAgICBkbyB7CisrICAgICAgaWYgKGVsZW1lbnQgIT0gZG9jQm9keSkgeworKyAg
ICAgICAgdmFsdWVUIC09IGVsZW1lbnQuc2Nyb2xsVG9wICB8fCAwOworKyAgICAgICAgdmFsdWVM
IC09IGVsZW1lbnQuc2Nyb2xsTGVmdCB8fCAwOworKyAgICAgIH0KKysgICAgfSB3aGlsZSAoZWxl
bWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSk7CisrICAgIHJldHVybiBuZXcgRWxlbWVudC5PZmZz
ZXQodmFsdWVMLCB2YWx1ZVQpOworKyAgfQorKworKyAgZnVuY3Rpb24gYWJzb2x1dGl6ZShlbGVt
ZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKworKyAgICBpZiAoRWxlbWVudC5n
ZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKSA9PT0gJ2Fic29sdXRlJykgeworKyAgICAgIHJl
dHVybiBlbGVtZW50OworKyAgICB9CisrCisrICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZz
ZXRQYXJlbnQoZWxlbWVudCk7CisrICAgIHZhciBlT2Zmc2V0ID0gZWxlbWVudC52aWV3cG9ydE9m
ZnNldCgpLAorKyAgICAgcE9mZnNldCA9IG9mZnNldFBhcmVudC52aWV3cG9ydE9mZnNldCgpOwor
KworKyAgICB2YXIgb2Zmc2V0ID0gZU9mZnNldC5yZWxhdGl2ZVRvKHBPZmZzZXQpOworKyAgICB2
YXIgbGF5b3V0ID0gZWxlbWVudC5nZXRMYXlvdXQoKTsKKysKKysgICAgZWxlbWVudC5zdG9yZSgn
cHJvdG90eXBlX2Fic29sdXRpemVfb3JpZ2luYWxfc3R5bGVzJywgeworKyAgICAgIGxlZnQ6ICAg
ZWxlbWVudC5nZXRTdHlsZSgnbGVmdCcpLAorKyAgICAgIHRvcDogICAgZWxlbWVudC5nZXRTdHls
ZSgndG9wJyksCisrICAgICAgd2lkdGg6ICBlbGVtZW50LmdldFN0eWxlKCd3aWR0aCcpLAorKyAg
ICAgIGhlaWdodDogZWxlbWVudC5nZXRTdHlsZSgnaGVpZ2h0JykKKysgICAgfSk7CisrCisrICAg
IGVsZW1lbnQuc2V0U3R5bGUoeworKyAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAorKyAgICAg
IHRvcDogICAgb2Zmc2V0LnRvcCArICdweCcsCisrICAgICAgbGVmdDogICBvZmZzZXQubGVmdCAr
ICdweCcsCisrICAgICAgd2lkdGg6ICBsYXlvdXQuZ2V0KCd3aWR0aCcpICsgJ3B4JywKKysgICAg
ICBoZWlnaHQ6IGxheW91dC5nZXQoJ2hlaWdodCcpICsgJ3B4JworKyAgICB9KTsKKysKKysgICAg
cmV0dXJuIGVsZW1lbnQ7CisrICB9CisrCisrICBmdW5jdGlvbiByZWxhdGl2aXplKGVsZW1lbnQp
IHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIGlmIChFbGVtZW50LmdldFN0eWxl
KGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAncmVsYXRpdmUnKSB7CisrICAgICAgcmV0dXJuIGVs
ZW1lbnQ7CisrICAgIH0KKysKKysgICAgdmFyIG9yaWdpbmFsU3R5bGVzID0KKysgICAgIGVsZW1l
bnQucmV0cmlldmUoJ3Byb3RvdHlwZV9hYnNvbHV0aXplX29yaWdpbmFsX3N0eWxlcycpOworKwor
KyAgICBpZiAob3JpZ2luYWxTdHlsZXMpIGVsZW1lbnQuc2V0U3R5bGUob3JpZ2luYWxTdHlsZXMp
OworKyAgICByZXR1cm4gZWxlbWVudDsKKysgIH0KKysKKysgIGlmIChQcm90b3R5cGUuQnJvd3Nl
ci5JRSkgeworKyAgICBnZXRPZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQud3JhcCgKKysg
ICAgICBmdW5jdGlvbihwcm9jZWVkLCBlbGVtZW50KSB7CisrICAgICAgICBlbGVtZW50ID0gJChl
bGVtZW50KTsKKysKKysgICAgICAgIGlmIChpc0RvY3VtZW50KGVsZW1lbnQpIHx8IGlzRGV0YWNo
ZWQoZWxlbWVudCkgfHwgaXNCb2R5KGVsZW1lbnQpIHx8IGlzSHRtbChlbGVtZW50KSkKKysgICAg
ICAgICAgcmV0dXJuICQoZG9jdW1lbnQuYm9keSk7CisrCisrICAgICAgICB2YXIgcG9zaXRpb24g
PSBlbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpOworKyAgICAgICAgaWYgKHBvc2l0aW9uICE9
PSAnc3RhdGljJykgcmV0dXJuIHByb2NlZWQoZWxlbWVudCk7CisrCisrICAgICAgICBlbGVtZW50
LnNldFN0eWxlKHsgcG9zaXRpb246ICdyZWxhdGl2ZScgfSk7CisrICAgICAgICB2YXIgdmFsdWUg
PSBwcm9jZWVkKGVsZW1lbnQpOworKyAgICAgICAgZWxlbWVudC5zZXRTdHlsZSh7IHBvc2l0aW9u
OiBwb3NpdGlvbiB9KTsKKysgICAgICAgIHJldHVybiB2YWx1ZTsKKysgICAgICB9CisrICAgICk7
CisrCisrICAgIHBvc2l0aW9uZWRPZmZzZXQgPSBwb3NpdGlvbmVkT2Zmc2V0LndyYXAoZnVuY3Rp
b24ocHJvY2VlZCwgZWxlbWVudCkgeworKyAgICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAg
ICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSByZXR1cm4gbmV3IEVsZW1lbnQuT2Zmc2V0KDAs
IDApOworKyAgICAgIHZhciBwb3NpdGlvbiA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJyk7
CisrICAgICAgaWYgKHBvc2l0aW9uICE9PSAnc3RhdGljJykgcmV0dXJuIHByb2NlZWQoZWxlbWVu
dCk7CisrCisrICAgICAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQuZ2V0T2Zmc2V0UGFyZW50
KCk7CisrICAgICAgaWYgKG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQuZ2V0U3R5bGUoJ3Bv
c2l0aW9uJykgPT09ICdmaXhlZCcpCisrICAgICAgICBoYXNMYXlvdXQob2Zmc2V0UGFyZW50KTsK
KysKKysgICAgICBlbGVtZW50LnNldFN0eWxlKHsgcG9zaXRpb246ICdyZWxhdGl2ZScgfSk7Cisr
ICAgICAgdmFyIHZhbHVlID0gcHJvY2VlZChlbGVtZW50KTsKKysgICAgICBlbGVtZW50LnNldFN0
eWxlKHsgcG9zaXRpb246IHBvc2l0aW9uIH0pOworKyAgICAgIHJldHVybiB2YWx1ZTsKKysgICAg
fSk7CisrICB9IGVsc2UgaWYgKFByb3RvdHlwZS5Ccm93c2VyLldlYmtpdCkgeworKyAgICBjdW11
bGF0aXZlT2Zmc2V0ID0gZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICAgIGVsZW1lbnQgPSAkKGVs
ZW1lbnQpOworKyAgICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOworKyAgICAgIGRvIHsK
KysgICAgICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsKKysgICAgICAgIHZh
bHVlTCArPSBlbGVtZW50Lm9mZnNldExlZnQgfHwgMDsKKysgICAgICAgIGlmIChlbGVtZW50Lm9m
ZnNldFBhcmVudCA9PSBkb2N1bWVudC5ib2R5KQorKyAgICAgICAgICBpZiAoRWxlbWVudC5nZXRT
dHlsZShlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnYWJzb2x1dGUnKSBicmVhazsKKysKKysgICAg
ICAgIGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDsKKysgICAgICB9IHdoaWxlIChlbGVt
ZW50KTsKKysKKysgICAgICByZXR1cm4gbmV3IEVsZW1lbnQuT2Zmc2V0KHZhbHVlTCwgdmFsdWVU
KTsKKysgICAgfTsKKysgIH0KKysKKysKKysgIEVsZW1lbnQuYWRkTWV0aG9kcyh7CisrICAgIGdl
dExheW91dDogICAgICAgICAgICAgIGdldExheW91dCwKKysgICAgbWVhc3VyZTogICAgICAgICAg
ICAgICAgbWVhc3VyZSwKKysgICAgZ2V0RGltZW5zaW9uczogICAgICAgICAgZ2V0RGltZW5zaW9u
cywKKysgICAgZ2V0T2Zmc2V0UGFyZW50OiAgICAgICAgZ2V0T2Zmc2V0UGFyZW50LAorKyAgICBj
dW11bGF0aXZlT2Zmc2V0OiAgICAgICBjdW11bGF0aXZlT2Zmc2V0LAorKyAgICBwb3NpdGlvbmVk
T2Zmc2V0OiAgICAgICBwb3NpdGlvbmVkT2Zmc2V0LAorKyAgICBjdW11bGF0aXZlU2Nyb2xsT2Zm
c2V0OiBjdW11bGF0aXZlU2Nyb2xsT2Zmc2V0LAorKyAgICB2aWV3cG9ydE9mZnNldDogICAgICAg
ICB2aWV3cG9ydE9mZnNldCwKKysgICAgYWJzb2x1dGl6ZTogICAgICAgICAgICAgYWJzb2x1dGl6
ZSwKKysgICAgcmVsYXRpdml6ZTogICAgICAgICAgICAgcmVsYXRpdml6ZQorKyAgfSk7CisrCisr
ICBmdW5jdGlvbiBpc0JvZHkoZWxlbWVudCkgeworKyAgICByZXR1cm4gZWxlbWVudC5ub2RlTmFt
ZS50b1VwcGVyQ2FzZSgpID09PSAnQk9EWSc7CisrICB9CisrCisrICBmdW5jdGlvbiBpc0h0bWwo
ZWxlbWVudCkgeworKyAgICByZXR1cm4gZWxlbWVudC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09
PSAnSFRNTCc7CisrICB9CisrCisrICBmdW5jdGlvbiBpc0RvY3VtZW50KGVsZW1lbnQpIHsKKysg
ICAgcmV0dXJuIGVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERTsKKysgIH0K
KysKKysgIGZ1bmN0aW9uIGlzRGV0YWNoZWQoZWxlbWVudCkgeworKyAgICByZXR1cm4gZWxlbWVu
dCAhPT0gZG9jdW1lbnQuYm9keSAmJgorKyAgICAgIUVsZW1lbnQuZGVzY2VuZGFudE9mKGVsZW1l
bnQsIGRvY3VtZW50LmJvZHkpOworKyAgfQorKworKyAgaWYgKCdnZXRCb3VuZGluZ0NsaWVudFJl
Y3QnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgeworKyAgICBFbGVtZW50LmFkZE1ldGhv
ZHMoeworKyAgICAgIHZpZXdwb3J0T2Zmc2V0OiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAg
ICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgICAgIGlmIChpc0RldGFjaGVkKGVsZW1lbnQp
KSByZXR1cm4gbmV3IEVsZW1lbnQuT2Zmc2V0KDAsIDApOworKworKyAgICAgICAgdmFyIHJlY3Qg
PSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLAorKyAgICAgICAgIGRvY0VsID0gZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50OworKyAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50Lk9mZnNl
dChyZWN0LmxlZnQgLSBkb2NFbC5jbGllbnRMZWZ0LAorKyAgICAgICAgIHJlY3QudG9wIC0gZG9j
RWwuY2xpZW50VG9wKTsKKysgICAgICB9CisrICAgIH0pOworKyAgfQorK30pKCk7Cisrd2luZG93
LiQkID0gZnVuY3Rpb24oKSB7CisrICB2YXIgZXhwcmVzc2lvbiA9ICRBKGFyZ3VtZW50cykuam9p
bignLCAnKTsKKysgIHJldHVybiBQcm90b3R5cGUuU2VsZWN0b3Iuc2VsZWN0KGV4cHJlc3Npb24s
IGRvY3VtZW50KTsKKyt9OworKworK1Byb3RvdHlwZS5TZWxlY3RvciA9IChmdW5jdGlvbigpIHsK
KysKKysgIGZ1bmN0aW9uIHNlbGVjdCgpIHsKKysgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qg
IlByb3RvdHlwZS5TZWxlY3Rvci5zZWxlY3QiIG11c3QgYmUgZGVmaW5lZC4nKTsKKysgIH0KKysK
KysgIGZ1bmN0aW9uIG1hdGNoKCkgeworKyAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCAiUHJv
dG90eXBlLlNlbGVjdG9yLm1hdGNoIiBtdXN0IGJlIGRlZmluZWQuJyk7CisrICB9CisrCisrICBm
dW5jdGlvbiBmaW5kKGVsZW1lbnRzLCBleHByZXNzaW9uLCBpbmRleCkgeworKyAgICBpbmRleCA9
IGluZGV4IHx8IDA7CisrICAgIHZhciBtYXRjaCA9IFByb3RvdHlwZS5TZWxlY3Rvci5tYXRjaCwg
bGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoLCBtYXRjaEluZGV4ID0gMCwgaTsKKysKKysgICAgZm9y
IChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisrICAgICAgaWYgKG1hdGNoKGVsZW1lbnRzW2ld
LCBleHByZXNzaW9uKSAmJiBpbmRleCA9PSBtYXRjaEluZGV4KyspIHsKKysgICAgICAgIHJldHVy
biBFbGVtZW50LmV4dGVuZChlbGVtZW50c1tpXSk7CisrICAgICAgfQorKyAgICB9CisrICB9Cisr
CisrICBmdW5jdGlvbiBleHRlbmRFbGVtZW50cyhlbGVtZW50cykgeworKyAgICBmb3IgKHZhciBp
ID0gMCwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKysgICAg
ICBFbGVtZW50LmV4dGVuZChlbGVtZW50c1tpXSk7CisrICAgIH0KKysgICAgcmV0dXJuIGVsZW1l
bnRzOworKyAgfQorKworKworKyAgdmFyIEsgPSBQcm90b3R5cGUuSzsKKysKKysgIHJldHVybiB7
CisrICAgIHNlbGVjdDogc2VsZWN0LAorKyAgICBtYXRjaDogbWF0Y2gsCisrICAgIGZpbmQ6IGZp
bmQsCisrICAgIGV4dGVuZEVsZW1lbnRzOiAoRWxlbWVudC5leHRlbmQgPT09IEspID8gSyA6IGV4
dGVuZEVsZW1lbnRzLAorKyAgICBleHRlbmRFbGVtZW50OiBFbGVtZW50LmV4dGVuZAorKyAgfTsK
Kyt9KSgpOworK1Byb3RvdHlwZS5fb3JpZ2luYWxfcHJvcGVydHkgPSB3aW5kb3cuU2l6emxlOwor
Ky8qIQorKyAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIC0gdjEuMAorKyAqICBDb3B5cmln
aHQgMjAwOSwgVGhlIERvam8gRm91bmRhdGlvbgorKyAqICBSZWxlYXNlZCB1bmRlciB0aGUgTUlU
LCBCU0QsIGFuZCBHUEwgTGljZW5zZXMuCisrICogIE1vcmUgaW5mb3JtYXRpb246IGh0dHA6Ly9z
aXp6bGVqcy5jb20vCisrICovCisrKGZ1bmN0aW9uKCl7CisrCisrdmFyIGNodW5rZXIgPSAvKCg/
OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXltcXV0qXF18WyciXVteJyJdKlsn
Il18W15bXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/
Oi58XHJ8XG4pKikvZywKKysJZG9uZSA9IDAsCisrCXRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlw
ZS50b1N0cmluZywKKysJaGFzRHVwbGljYXRlID0gZmFsc2UsCisrCWJhc2VIYXNEdXBsaWNhdGUg
PSB0cnVlOworKworK1swLCAwXS5zb3J0KGZ1bmN0aW9uKCl7CisrCWJhc2VIYXNEdXBsaWNhdGUg
PSBmYWxzZTsKKysJcmV0dXJuIDA7CisrfSk7CisrCisrdmFyIFNpenpsZSA9IGZ1bmN0aW9uKHNl
bGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkKSB7CisrCXJlc3VsdHMgPSByZXN1bHRzIHx8
IFtdOworKwl2YXIgb3JpZ0NvbnRleHQgPSBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsK
KysKKysJaWYgKCBjb250ZXh0Lm5vZGVUeXBlICE9PSAxICYmIGNvbnRleHQubm9kZVR5cGUgIT09
IDkgKSB7CisrCQlyZXR1cm4gW107CisrCX0KKysKKysJaWYgKCAhc2VsZWN0b3IgfHwgdHlwZW9m
IHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsKKysJCXJldHVybiByZXN1bHRzOworKwl9CisrCisr
CXZhciBwYXJ0cyA9IFtdLCBtLCBzZXQsIGNoZWNrU2V0LCBjaGVjaywgbW9kZSwgZXh0cmEsIHBy
dW5lID0gdHJ1ZSwgY29udGV4dFhNTCA9IGlzWE1MKGNvbnRleHQpLAorKwkJc29GYXIgPSBzZWxl
Y3RvcjsKKysKKysJd2hpbGUgKCAoY2h1bmtlci5leGVjKCIiKSwgbSA9IGNodW5rZXIuZXhlYyhz
b0ZhcikpICE9PSBudWxsICkgeworKwkJc29GYXIgPSBtWzNdOworKworKwkJcGFydHMucHVzaCgg
bVsxXSApOworKworKwkJaWYgKCBtWzJdICkgeworKwkJCWV4dHJhID0gbVszXTsKKysJCQlicmVh
azsKKysJCX0KKysJfQorKworKwlpZiAoIHBhcnRzLmxlbmd0aCA+IDEgJiYgb3JpZ1BPUy5leGVj
KCBzZWxlY3RvciApICkgeworKwkJaWYgKCBwYXJ0cy5sZW5ndGggPT09IDIgJiYgRXhwci5yZWxh
dGl2ZVsgcGFydHNbMF0gXSApIHsKKysJCQlzZXQgPSBwb3NQcm9jZXNzKCBwYXJ0c1swXSArIHBh
cnRzWzFdLCBjb250ZXh0ICk7CisrCQl9IGVsc2UgeworKwkJCXNldCA9IEV4cHIucmVsYXRpdmVb
IHBhcnRzWzBdIF0gPworKwkJCQlbIGNvbnRleHQgXSA6CisrCQkJCVNpenpsZSggcGFydHMuc2hp
ZnQoKSwgY29udGV4dCApOworKworKwkJCXdoaWxlICggcGFydHMubGVuZ3RoICkgeworKwkJCQlz
ZWxlY3RvciA9IHBhcnRzLnNoaWZ0KCk7CisrCisrCQkJCWlmICggRXhwci5yZWxhdGl2ZVsgc2Vs
ZWN0b3IgXSApCisrCQkJCQlzZWxlY3RvciArPSBwYXJ0cy5zaGlmdCgpOworKworKwkJCQlzZXQg
PSBwb3NQcm9jZXNzKCBzZWxlY3Rvciwgc2V0ICk7CisrCQkJfQorKwkJfQorKwl9IGVsc2Ugewor
KwkJaWYgKCAhc2VlZCAmJiBwYXJ0cy5sZW5ndGggPiAxICYmIGNvbnRleHQubm9kZVR5cGUgPT09
IDkgJiYgIWNvbnRleHRYTUwgJiYKKysJCQkJRXhwci5tYXRjaC5JRC50ZXN0KHBhcnRzWzBdKSAm
JiAhRXhwci5tYXRjaC5JRC50ZXN0KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKSApIHsKKysJCQl2
YXIgcmV0ID0gU2l6emxlLmZpbmQoIHBhcnRzLnNoaWZ0KCksIGNvbnRleHQsIGNvbnRleHRYTUwg
KTsKKysJCQljb250ZXh0ID0gcmV0LmV4cHIgPyBTaXp6bGUuZmlsdGVyKCByZXQuZXhwciwgcmV0
LnNldCApWzBdIDogcmV0LnNldFswXTsKKysJCX0KKysKKysJCWlmICggY29udGV4dCApIHsKKysJ
CQl2YXIgcmV0ID0gc2VlZCA/CisrCQkJCXsgZXhwcjogcGFydHMucG9wKCksIHNldDogbWFrZUFy
cmF5KHNlZWQpIH0gOgorKwkJCQlTaXp6bGUuZmluZCggcGFydHMucG9wKCksIHBhcnRzLmxlbmd0
aCA9PT0gMSAmJiAocGFydHNbMF0gPT09ICJ+IiB8fCBwYXJ0c1swXSA9PT0gIisiKSAmJiBjb250
ZXh0LnBhcmVudE5vZGUgPyBjb250ZXh0LnBhcmVudE5vZGUgOiBjb250ZXh0LCBjb250ZXh0WE1M
ICk7CisrCQkJc2V0ID0gcmV0LmV4cHIgPyBTaXp6bGUuZmlsdGVyKCByZXQuZXhwciwgcmV0LnNl
dCApIDogcmV0LnNldDsKKysKKysJCQlpZiAoIHBhcnRzLmxlbmd0aCA+IDAgKSB7CisrCQkJCWNo
ZWNrU2V0ID0gbWFrZUFycmF5KHNldCk7CisrCQkJfSBlbHNlIHsKKysJCQkJcHJ1bmUgPSBmYWxz
ZTsKKysJCQl9CisrCisrCQkJd2hpbGUgKCBwYXJ0cy5sZW5ndGggKSB7CisrCQkJCXZhciBjdXIg
PSBwYXJ0cy5wb3AoKSwgcG9wID0gY3VyOworKworKwkJCQlpZiAoICFFeHByLnJlbGF0aXZlWyBj
dXIgXSApIHsKKysJCQkJCWN1ciA9ICIiOworKwkJCQl9IGVsc2UgeworKwkJCQkJcG9wID0gcGFy
dHMucG9wKCk7CisrCQkJCX0KKysKKysJCQkJaWYgKCBwb3AgPT0gbnVsbCApIHsKKysJCQkJCXBv
cCA9IGNvbnRleHQ7CisrCQkJCX0KKysKKysJCQkJRXhwci5yZWxhdGl2ZVsgY3VyIF0oIGNoZWNr
U2V0LCBwb3AsIGNvbnRleHRYTUwgKTsKKysJCQl9CisrCQl9IGVsc2UgeworKwkJCWNoZWNrU2V0
ID0gcGFydHMgPSBbXTsKKysJCX0KKysJfQorKworKwlpZiAoICFjaGVja1NldCApIHsKKysJCWNo
ZWNrU2V0ID0gc2V0OworKwl9CisrCisrCWlmICggIWNoZWNrU2V0ICkgeworKwkJdGhyb3cgIlN5
bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIgKyAoY3VyIHx8IHNlbGVjdG9y
KTsKKysJfQorKworKwlpZiAoIHRvU3RyaW5nLmNhbGwoY2hlY2tTZXQpID09PSAiW29iamVjdCBB
cnJheV0iICkgeworKwkJaWYgKCAhcHJ1bmUgKSB7CisrCQkJcmVzdWx0cy5wdXNoLmFwcGx5KCBy
ZXN1bHRzLCBjaGVja1NldCApOworKwkJfSBlbHNlIGlmICggY29udGV4dCAmJiBjb250ZXh0Lm5v
ZGVUeXBlID09PSAxICkgeworKwkJCWZvciAoIHZhciBpID0gMDsgY2hlY2tTZXRbaV0gIT0gbnVs
bDsgaSsrICkgeworKwkJCQlpZiAoIGNoZWNrU2V0W2ldICYmIChjaGVja1NldFtpXSA9PT0gdHJ1
ZSB8fCBjaGVja1NldFtpXS5ub2RlVHlwZSA9PT0gMSAmJiBjb250YWlucyhjb250ZXh0LCBjaGVj
a1NldFtpXSkpICkgeworKwkJCQkJcmVzdWx0cy5wdXNoKCBzZXRbaV0gKTsKKysJCQkJfQorKwkJ
CX0KKysJCX0gZWxzZSB7CisrCQkJZm9yICggdmFyIGkgPSAwOyBjaGVja1NldFtpXSAhPSBudWxs
OyBpKysgKSB7CisrCQkJCWlmICggY2hlY2tTZXRbaV0gJiYgY2hlY2tTZXRbaV0ubm9kZVR5cGUg
PT09IDEgKSB7CisrCQkJCQlyZXN1bHRzLnB1c2goIHNldFtpXSApOworKwkJCQl9CisrCQkJfQor
KwkJfQorKwl9IGVsc2UgeworKwkJbWFrZUFycmF5KCBjaGVja1NldCwgcmVzdWx0cyApOworKwl9
CisrCisrCWlmICggZXh0cmEgKSB7CisrCQlTaXp6bGUoIGV4dHJhLCBvcmlnQ29udGV4dCwgcmVz
dWx0cywgc2VlZCApOworKwkJU2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTsKKysJfQorKwor
KwlyZXR1cm4gcmVzdWx0czsKKyt9OworKworK1NpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24o
cmVzdWx0cyl7CisrCWlmICggc29ydE9yZGVyICkgeworKwkJaGFzRHVwbGljYXRlID0gYmFzZUhh
c0R1cGxpY2F0ZTsKKysJCXJlc3VsdHMuc29ydChzb3J0T3JkZXIpOworKworKwkJaWYgKCBoYXNE
dXBsaWNhdGUgKSB7CisrCQkJZm9yICggdmFyIGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkr
KyApIHsKKysJCQkJaWYgKCByZXN1bHRzW2ldID09PSByZXN1bHRzW2ktMV0gKSB7CisrCQkJCQly
ZXN1bHRzLnNwbGljZShpLS0sIDEpOworKwkJCQl9CisrCQkJfQorKwkJfQorKwl9CisrCisrCXJl
dHVybiByZXN1bHRzOworK307CisrCisrU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbihleHByLCBz
ZXQpeworKwlyZXR1cm4gU2l6emxlKGV4cHIsIG51bGwsIG51bGwsIHNldCk7CisrfTsKKysKKytT
aXp6bGUuZmluZCA9IGZ1bmN0aW9uKGV4cHIsIGNvbnRleHQsIGlzWE1MKXsKKysJdmFyIHNldCwg
bWF0Y2g7CisrCisrCWlmICggIWV4cHIgKSB7CisrCQlyZXR1cm4gW107CisrCX0KKysKKysJZm9y
ICggdmFyIGkgPSAwLCBsID0gRXhwci5vcmRlci5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisrCQl2
YXIgdHlwZSA9IEV4cHIub3JkZXJbaV0sIG1hdGNoOworKworKwkJaWYgKCAobWF0Y2ggPSBFeHBy
LmxlZnRNYXRjaFsgdHlwZSBdLmV4ZWMoIGV4cHIgKSkgKSB7CisrCQkJdmFyIGxlZnQgPSBtYXRj
aFsxXTsKKysJCQltYXRjaC5zcGxpY2UoMSwxKTsKKysKKysJCQlpZiAoIGxlZnQuc3Vic3RyKCBs
ZWZ0Lmxlbmd0aCAtIDEgKSAhPT0gIlxcIiApIHsKKysJCQkJbWF0Y2hbMV0gPSAobWF0Y2hbMV0g
fHwgIiIpLnJlcGxhY2UoL1xcL2csICIiKTsKKysJCQkJc2V0ID0gRXhwci5maW5kWyB0eXBlIF0o
IG1hdGNoLCBjb250ZXh0LCBpc1hNTCApOworKwkJCQlpZiAoIHNldCAhPSBudWxsICkgeworKwkJ
CQkJZXhwciA9IGV4cHIucmVwbGFjZSggRXhwci5tYXRjaFsgdHlwZSBdLCAiIiApOworKwkJCQkJ
YnJlYWs7CisrCQkJCX0KKysJCQl9CisrCQl9CisrCX0KKysKKysJaWYgKCAhc2V0ICkgeworKwkJ
c2V0ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOworKwl9CisrCisrCXJldHVy
biB7c2V0OiBzZXQsIGV4cHI6IGV4cHJ9OworK307CisrCisrU2l6emxlLmZpbHRlciA9IGZ1bmN0
aW9uKGV4cHIsIHNldCwgaW5wbGFjZSwgbm90KXsKKysJdmFyIG9sZCA9IGV4cHIsIHJlc3VsdCA9
IFtdLCBjdXJMb29wID0gc2V0LCBtYXRjaCwgYW55Rm91bmQsCisrCQlpc1hNTEZpbHRlciA9IHNl
dCAmJiBzZXRbMF0gJiYgaXNYTUwoc2V0WzBdKTsKKysKKysJd2hpbGUgKCBleHByICYmIHNldC5s
ZW5ndGggKSB7CisrCQlmb3IgKCB2YXIgdHlwZSBpbiBFeHByLmZpbHRlciApIHsKKysJCQlpZiAo
IChtYXRjaCA9IEV4cHIubWF0Y2hbIHR5cGUgXS5leGVjKCBleHByICkpICE9IG51bGwgKSB7Cisr
CQkJCXZhciBmaWx0ZXIgPSBFeHByLmZpbHRlclsgdHlwZSBdLCBmb3VuZCwgaXRlbTsKKysJCQkJ
YW55Rm91bmQgPSBmYWxzZTsKKysKKysJCQkJaWYgKCBjdXJMb29wID09IHJlc3VsdCApIHsKKysJ
CQkJCXJlc3VsdCA9IFtdOworKwkJCQl9CisrCisrCQkJCWlmICggRXhwci5wcmVGaWx0ZXJbIHR5
cGUgXSApIHsKKysJCQkJCW1hdGNoID0gRXhwci5wcmVGaWx0ZXJbIHR5cGUgXSggbWF0Y2gsIGN1
ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTEZpbHRlciApOworKworKwkJCQkJaWYg
KCAhbWF0Y2ggKSB7CisrCQkJCQkJYW55Rm91bmQgPSBmb3VuZCA9IHRydWU7CisrCQkJCQl9IGVs
c2UgaWYgKCBtYXRjaCA9PT0gdHJ1ZSApIHsKKysJCQkJCQljb250aW51ZTsKKysJCQkJCX0KKysJ
CQkJfQorKworKwkJCQlpZiAoIG1hdGNoICkgeworKwkJCQkJZm9yICggdmFyIGkgPSAwOyAoaXRl
bSA9IGN1ckxvb3BbaV0pICE9IG51bGw7IGkrKyApIHsKKysJCQkJCQlpZiAoIGl0ZW0gKSB7Cisr
CQkJCQkJCWZvdW5kID0gZmlsdGVyKCBpdGVtLCBtYXRjaCwgaSwgY3VyTG9vcCApOworKwkJCQkJ
CQl2YXIgcGFzcyA9IG5vdCBeICEhZm91bmQ7CisrCisrCQkJCQkJCWlmICggaW5wbGFjZSAmJiBm
b3VuZCAhPSBudWxsICkgeworKwkJCQkJCQkJaWYgKCBwYXNzICkgeworKwkJCQkJCQkJCWFueUZv
dW5kID0gdHJ1ZTsKKysJCQkJCQkJCX0gZWxzZSB7CisrCQkJCQkJCQkJY3VyTG9vcFtpXSA9IGZh
bHNlOworKwkJCQkJCQkJfQorKwkJCQkJCQl9IGVsc2UgaWYgKCBwYXNzICkgeworKwkJCQkJCQkJ
cmVzdWx0LnB1c2goIGl0ZW0gKTsKKysJCQkJCQkJCWFueUZvdW5kID0gdHJ1ZTsKKysJCQkJCQkJ
fQorKwkJCQkJCX0KKysJCQkJCX0KKysJCQkJfQorKworKwkJCQlpZiAoIGZvdW5kICE9PSB1bmRl
ZmluZWQgKSB7CisrCQkJCQlpZiAoICFpbnBsYWNlICkgeworKwkJCQkJCWN1ckxvb3AgPSByZXN1
bHQ7CisrCQkJCQl9CisrCisrCQkJCQlleHByID0gZXhwci5yZXBsYWNlKCBFeHByLm1hdGNoWyB0
eXBlIF0sICIiICk7CisrCisrCQkJCQlpZiAoICFhbnlGb3VuZCApIHsKKysJCQkJCQlyZXR1cm4g
W107CisrCQkJCQl9CisrCisrCQkJCQlicmVhazsKKysJCQkJfQorKwkJCX0KKysJCX0KKysKKysJ
CWlmICggZXhwciA9PSBvbGQgKSB7CisrCQkJaWYgKCBhbnlGb3VuZCA9PSBudWxsICkgeworKwkJ
CQl0aHJvdyAiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIGV4cHI7
CisrCQkJfSBlbHNlIHsKKysJCQkJYnJlYWs7CisrCQkJfQorKwkJfQorKworKwkJb2xkID0gZXhw
cjsKKysJfQorKworKwlyZXR1cm4gY3VyTG9vcDsKKyt9OworKworK3ZhciBFeHByID0gU2l6emxl
LnNlbGVjdG9ycyA9IHsKKysJb3JkZXI6IFsgIklEIiwgIk5BTUUiLCAiVEFHIiBdLAorKwltYXRj
aDogeworKwkJSUQ6IC8jKCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4pKykvLAorKwkJQ0xBU1M6
IC9cLigoPzpbXHdcdTAwYzAtXHVGRkZGLV18XFwuKSspLywKKysJCU5BTUU6IC9cW25hbWU9Wyci
XSooKD86W1x3XHUwMGMwLVx1RkZGRi1dfFxcLikrKVsnIl0qXF0vLAorKwkJQVRUUjogL1xbXHMq
KCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4pKylccyooPzooXFM/PSlccyooWyciXSopKC4qPylc
M3wpXHMqXF0vLAorKwkJVEFHOiAvXigoPzpbXHdcdTAwYzAtXHVGRkZGXCotXXxcXC4pKykvLAor
KwkJQ0hJTEQ6IC86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XCgoZXZlbnxvZGR8W1xk
bistXSopXCkpPy8sCisrCQlQT1M6IC86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2Rk
KSg/OlwoKFxkKilcKSk/KD89W14tXXwkKS8sCisrCQlQU0VVRE86IC86KCg/Oltcd1x1MDBjMC1c
dUZGRkYtXXxcXC4pKykoPzpcKChbJyJdKikoKD86XChbXlwpXStcKXxbXlwyXChcKV0qKSspXDJc
KSk/LworKwl9LAorKwlsZWZ0TWF0Y2g6IHt9LAorKwlhdHRyTWFwOiB7CisrCQkiY2xhc3MiOiAi
Y2xhc3NOYW1lIiwKKysJCSJmb3IiOiAiaHRtbEZvciIKKysJfSwKKysJYXR0ckhhbmRsZTogewor
KwkJaHJlZjogZnVuY3Rpb24oZWxlbSl7CisrCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJo
cmVmIik7CisrCQl9CisrCX0sCisrCXJlbGF0aXZlOiB7CisrCQkiKyI6IGZ1bmN0aW9uKGNoZWNr
U2V0LCBwYXJ0LCBpc1hNTCl7CisrCQkJdmFyIGlzUGFydFN0ciA9IHR5cGVvZiBwYXJ0ID09PSAi
c3RyaW5nIiwKKysJCQkJaXNUYWcgPSBpc1BhcnRTdHIgJiYgIS9cVy8udGVzdChwYXJ0KSwKKysJ
CQkJaXNQYXJ0U3RyTm90VGFnID0gaXNQYXJ0U3RyICYmICFpc1RhZzsKKysKKysJCQlpZiAoIGlz
VGFnICYmICFpc1hNTCApIHsKKysJCQkJcGFydCA9IHBhcnQudG9VcHBlckNhc2UoKTsKKysJCQl9
CisrCisrCQkJZm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2tTZXQubGVuZ3RoLCBlbGVtOyBpIDwg
bDsgaSsrICkgeworKwkJCQlpZiAoIChlbGVtID0gY2hlY2tTZXRbaV0pICkgeworKwkJCQkJd2hp
bGUgKCAoZWxlbSA9IGVsZW0ucHJldmlvdXNTaWJsaW5nKSAmJiBlbGVtLm5vZGVUeXBlICE9PSAx
ICkge30KKysKKysJCQkJCWNoZWNrU2V0W2ldID0gaXNQYXJ0U3RyTm90VGFnIHx8IGVsZW0gJiYg
ZWxlbS5ub2RlTmFtZSA9PT0gcGFydCA/CisrCQkJCQkJZWxlbSB8fCBmYWxzZSA6CisrCQkJCQkJ
ZWxlbSA9PT0gcGFydDsKKysJCQkJfQorKwkJCX0KKysKKysJCQlpZiAoIGlzUGFydFN0ck5vdFRh
ZyApIHsKKysJCQkJU2l6emxlLmZpbHRlciggcGFydCwgY2hlY2tTZXQsIHRydWUgKTsKKysJCQl9
CisrCQl9LAorKwkJIj4iOiBmdW5jdGlvbihjaGVja1NldCwgcGFydCwgaXNYTUwpeworKwkJCXZh
ciBpc1BhcnRTdHIgPSB0eXBlb2YgcGFydCA9PT0gInN0cmluZyI7CisrCisrCQkJaWYgKCBpc1Bh
cnRTdHIgJiYgIS9cVy8udGVzdChwYXJ0KSApIHsKKysJCQkJcGFydCA9IGlzWE1MID8gcGFydCA6
IHBhcnQudG9VcHBlckNhc2UoKTsKKysKKysJCQkJZm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2tT
ZXQubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworKwkJCQkJdmFyIGVsZW0gPSBjaGVja1NldFtpXTsK
KysJCQkJCWlmICggZWxlbSApIHsKKysJCQkJCQl2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2Rl
OworKwkJCQkJCWNoZWNrU2V0W2ldID0gcGFyZW50Lm5vZGVOYW1lID09PSBwYXJ0ID8gcGFyZW50
IDogZmFsc2U7CisrCQkJCQl9CisrCQkJCX0KKysJCQl9IGVsc2UgeworKwkJCQlmb3IgKCB2YXIg
aSA9IDAsIGwgPSBjaGVja1NldC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisrCQkJCQl2YXIgZWxl
bSA9IGNoZWNrU2V0W2ldOworKwkJCQkJaWYgKCBlbGVtICkgeworKwkJCQkJCWNoZWNrU2V0W2ld
ID0gaXNQYXJ0U3RyID8KKysJCQkJCQkJZWxlbS5wYXJlbnROb2RlIDoKKysJCQkJCQkJZWxlbS5w
YXJlbnROb2RlID09PSBwYXJ0OworKwkJCQkJfQorKwkJCQl9CisrCisrCQkJCWlmICggaXNQYXJ0
U3RyICkgeworKwkJCQkJU2l6emxlLmZpbHRlciggcGFydCwgY2hlY2tTZXQsIHRydWUgKTsKKysJ
CQkJfQorKwkJCX0KKysJCX0sCisrCQkiIjogZnVuY3Rpb24oY2hlY2tTZXQsIHBhcnQsIGlzWE1M
KXsKKysJCQl2YXIgZG9uZU5hbWUgPSBkb25lKyssIGNoZWNrRm4gPSBkaXJDaGVjazsKKysKKysJ
CQlpZiAoICEvXFcvLnRlc3QocGFydCkgKSB7CisrCQkJCXZhciBub2RlQ2hlY2sgPSBwYXJ0ID0g
aXNYTUwgPyBwYXJ0IDogcGFydC50b1VwcGVyQ2FzZSgpOworKwkJCQljaGVja0ZuID0gZGlyTm9k
ZUNoZWNrOworKwkJCX0KKysKKysJCQljaGVja0ZuKCJwYXJlbnROb2RlIiwgcGFydCwgZG9uZU5h
bWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MKTsKKysJCX0sCisrCQkifiI6IGZ1bmN0aW9u
KGNoZWNrU2V0LCBwYXJ0LCBpc1hNTCl7CisrCQkJdmFyIGRvbmVOYW1lID0gZG9uZSsrLCBjaGVj
a0ZuID0gZGlyQ2hlY2s7CisrCisrCQkJaWYgKCB0eXBlb2YgcGFydCA9PT0gInN0cmluZyIgJiYg
IS9cVy8udGVzdChwYXJ0KSApIHsKKysJCQkJdmFyIG5vZGVDaGVjayA9IHBhcnQgPSBpc1hNTCA/
IHBhcnQgOiBwYXJ0LnRvVXBwZXJDYXNlKCk7CisrCQkJCWNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7
CisrCQkJfQorKworKwkJCWNoZWNrRm4oInByZXZpb3VzU2libGluZyIsIHBhcnQsIGRvbmVOYW1l
LCBjaGVja1NldCwgbm9kZUNoZWNrLCBpc1hNTCk7CisrCQl9CisrCX0sCisrCWZpbmQ6IHsKKysJ
CUlEOiBmdW5jdGlvbihtYXRjaCwgY29udGV4dCwgaXNYTUwpeworKwkJCWlmICggdHlwZW9mIGNv
bnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09ICJ1bmRlZmluZWQiICYmICFpc1hNTCApIHsKKysJCQkJ
dmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG1hdGNoWzFdKTsKKysJCQkJcmV0dXJuIG0g
PyBbbV0gOiBbXTsKKysJCQl9CisrCQl9LAorKwkJTkFNRTogZnVuY3Rpb24obWF0Y2gsIGNvbnRl
eHQsIGlzWE1MKXsKKysJCQlpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lICE9
PSAidW5kZWZpbmVkIiApIHsKKysJCQkJdmFyIHJldCA9IFtdLCByZXN1bHRzID0gY29udGV4dC5n
ZXRFbGVtZW50c0J5TmFtZShtYXRjaFsxXSk7CisrCisrCQkJCWZvciAoIHZhciBpID0gMCwgbCA9
IHJlc3VsdHMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworKwkJCQkJaWYgKCByZXN1bHRzW2ldLmdl
dEF0dHJpYnV0ZSgibmFtZSIpID09PSBtYXRjaFsxXSApIHsKKysJCQkJCQlyZXQucHVzaCggcmVz
dWx0c1tpXSApOworKwkJCQkJfQorKwkJCQl9CisrCisrCQkJCXJldHVybiByZXQubGVuZ3RoID09
PSAwID8gbnVsbCA6IHJldDsKKysJCQl9CisrCQl9LAorKwkJVEFHOiBmdW5jdGlvbihtYXRjaCwg
Y29udGV4dCl7CisrCQkJcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUobWF0Y2hb
MV0pOworKwkJfQorKwl9LAorKwlwcmVGaWx0ZXI6IHsKKysJCUNMQVNTOiBmdW5jdGlvbihtYXRj
aCwgY3VyTG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QsIGlzWE1MKXsKKysJCQltYXRjaCA9ICIg
IiArIG1hdGNoWzFdLnJlcGxhY2UoL1xcL2csICIiKSArICIgIjsKKysKKysJCQlpZiAoIGlzWE1M
ICkgeworKwkJCQlyZXR1cm4gbWF0Y2g7CisrCQkJfQorKworKwkJCWZvciAoIHZhciBpID0gMCwg
ZWxlbTsgKGVsZW0gPSBjdXJMb29wW2ldKSAhPSBudWxsOyBpKysgKSB7CisrCQkJCWlmICggZWxl
bSApIHsKKysJCQkJCWlmICggbm90IF4gKGVsZW0uY2xhc3NOYW1lICYmICgiICIgKyBlbGVtLmNs
YXNzTmFtZSArICIgIikuaW5kZXhPZihtYXRjaCkgPj0gMCkgKSB7CisrCQkJCQkJaWYgKCAhaW5w
bGFjZSApCisrCQkJCQkJCXJlc3VsdC5wdXNoKCBlbGVtICk7CisrCQkJCQl9IGVsc2UgaWYgKCBp
bnBsYWNlICkgeworKwkJCQkJCWN1ckxvb3BbaV0gPSBmYWxzZTsKKysJCQkJCX0KKysJCQkJfQor
KwkJCX0KKysKKysJCQlyZXR1cm4gZmFsc2U7CisrCQl9LAorKwkJSUQ6IGZ1bmN0aW9uKG1hdGNo
KXsKKysJCQlyZXR1cm4gbWF0Y2hbMV0ucmVwbGFjZSgvXFwvZywgIiIpOworKwkJfSwKKysJCVRB
RzogZnVuY3Rpb24obWF0Y2gsIGN1ckxvb3ApeworKwkJCWZvciAoIHZhciBpID0gMDsgY3VyTG9v
cFtpXSA9PT0gZmFsc2U7IGkrKyApe30KKysJCQlyZXR1cm4gY3VyTG9vcFtpXSAmJiBpc1hNTChj
dXJMb29wW2ldKSA/IG1hdGNoWzFdIDogbWF0Y2hbMV0udG9VcHBlckNhc2UoKTsKKysJCX0sCisr
CQlDSElMRDogZnVuY3Rpb24obWF0Y2gpeworKwkJCWlmICggbWF0Y2hbMV0gPT0gIm50aCIgKSB7
CisrCQkJCXZhciB0ZXN0ID0gLygtPykoXGQqKW4oKD86XCt8LSk/XGQqKS8uZXhlYygKKysJCQkJ
CW1hdGNoWzJdID09ICJldmVuIiAmJiAiMm4iIHx8IG1hdGNoWzJdID09ICJvZGQiICYmICIybisx
IiB8fAorKwkJCQkJIS9cRC8udGVzdCggbWF0Y2hbMl0gKSAmJiAiMG4rIiArIG1hdGNoWzJdIHx8
IG1hdGNoWzJdKTsKKysKKysJCQkJbWF0Y2hbMl0gPSAodGVzdFsxXSArICh0ZXN0WzJdIHx8IDEp
KSAtIDA7CisrCQkJCW1hdGNoWzNdID0gdGVzdFszXSAtIDA7CisrCQkJfQorKworKwkJCW1hdGNo
WzBdID0gZG9uZSsrOworKworKwkJCXJldHVybiBtYXRjaDsKKysJCX0sCisrCQlBVFRSOiBmdW5j
dGlvbihtYXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QsIGlzWE1MKXsKKysJCQl2
YXIgbmFtZSA9IG1hdGNoWzFdLnJlcGxhY2UoL1xcL2csICIiKTsKKysKKysJCQlpZiAoICFpc1hN
TCAmJiBFeHByLmF0dHJNYXBbbmFtZV0gKSB7CisrCQkJCW1hdGNoWzFdID0gRXhwci5hdHRyTWFw
W25hbWVdOworKwkJCX0KKysKKysJCQlpZiAoIG1hdGNoWzJdID09PSAifj0iICkgeworKwkJCQlt
YXRjaFs0XSA9ICIgIiArIG1hdGNoWzRdICsgIiAiOworKwkJCX0KKysKKysJCQlyZXR1cm4gbWF0
Y2g7CisrCQl9LAorKwkJUFNFVURPOiBmdW5jdGlvbihtYXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwg
cmVzdWx0LCBub3QpeworKwkJCWlmICggbWF0Y2hbMV0gPT09ICJub3QiICkgeworKwkJCQlpZiAo
ICggY2h1bmtlci5leGVjKG1hdGNoWzNdKSB8fCAiIiApLmxlbmd0aCA+IDEgfHwgL15cdy8udGVz
dChtYXRjaFszXSkgKSB7CisrCQkJCQltYXRjaFszXSA9IFNpenpsZShtYXRjaFszXSwgbnVsbCwg
bnVsbCwgY3VyTG9vcCk7CisrCQkJCX0gZWxzZSB7CisrCQkJCQl2YXIgcmV0ID0gU2l6emxlLmZp
bHRlcihtYXRjaFszXSwgY3VyTG9vcCwgaW5wbGFjZSwgdHJ1ZSBeIG5vdCk7CisrCQkJCQlpZiAo
ICFpbnBsYWNlICkgeworKwkJCQkJCXJlc3VsdC5wdXNoLmFwcGx5KCByZXN1bHQsIHJldCApOwor
KwkJCQkJfQorKwkJCQkJcmV0dXJuIGZhbHNlOworKwkJCQl9CisrCQkJfSBlbHNlIGlmICggRXhw
ci5tYXRjaC5QT1MudGVzdCggbWF0Y2hbMF0gKSB8fCBFeHByLm1hdGNoLkNISUxELnRlc3QoIG1h
dGNoWzBdICkgKSB7CisrCQkJCXJldHVybiB0cnVlOworKwkJCX0KKysKKysJCQlyZXR1cm4gbWF0
Y2g7CisrCQl9LAorKwkJUE9TOiBmdW5jdGlvbihtYXRjaCl7CisrCQkJbWF0Y2gudW5zaGlmdCgg
dHJ1ZSApOworKwkJCXJldHVybiBtYXRjaDsKKysJCX0KKysJfSwKKysJZmlsdGVyczogeworKwkJ
ZW5hYmxlZDogZnVuY3Rpb24oZWxlbSl7CisrCQkJcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGZh
bHNlICYmIGVsZW0udHlwZSAhPT0gImhpZGRlbiI7CisrCQl9LAorKwkJZGlzYWJsZWQ6IGZ1bmN0
aW9uKGVsZW0peworKwkJCXJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlOworKwkJfSwKKysJ
CWNoZWNrZWQ6IGZ1bmN0aW9uKGVsZW0peworKwkJCXJldHVybiBlbGVtLmNoZWNrZWQgPT09IHRy
dWU7CisrCQl9LAorKwkJc2VsZWN0ZWQ6IGZ1bmN0aW9uKGVsZW0peworKwkJCWVsZW0ucGFyZW50
Tm9kZS5zZWxlY3RlZEluZGV4OworKwkJCXJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOwor
KwkJfSwKKysJCXBhcmVudDogZnVuY3Rpb24oZWxlbSl7CisrCQkJcmV0dXJuICEhZWxlbS5maXJz
dENoaWxkOworKwkJfSwKKysJCWVtcHR5OiBmdW5jdGlvbihlbGVtKXsKKysJCQlyZXR1cm4gIWVs
ZW0uZmlyc3RDaGlsZDsKKysJCX0sCisrCQloYXM6IGZ1bmN0aW9uKGVsZW0sIGksIG1hdGNoKXsK
KysJCQlyZXR1cm4gISFTaXp6bGUoIG1hdGNoWzNdLCBlbGVtICkubGVuZ3RoOworKwkJfSwKKysJ
CWhlYWRlcjogZnVuY3Rpb24oZWxlbSl7CisrCQkJcmV0dXJuIC9oXGQvaS50ZXN0KCBlbGVtLm5v
ZGVOYW1lICk7CisrCQl9LAorKwkJdGV4dDogZnVuY3Rpb24oZWxlbSl7CisrCQkJcmV0dXJuICJ0
ZXh0IiA9PT0gZWxlbS50eXBlOworKwkJfSwKKysJCXJhZGlvOiBmdW5jdGlvbihlbGVtKXsKKysJ
CQlyZXR1cm4gInJhZGlvIiA9PT0gZWxlbS50eXBlOworKwkJfSwKKysJCWNoZWNrYm94OiBmdW5j
dGlvbihlbGVtKXsKKysJCQlyZXR1cm4gImNoZWNrYm94IiA9PT0gZWxlbS50eXBlOworKwkJfSwK
KysJCWZpbGU6IGZ1bmN0aW9uKGVsZW0peworKwkJCXJldHVybiAiZmlsZSIgPT09IGVsZW0udHlw
ZTsKKysJCX0sCisrCQlwYXNzd29yZDogZnVuY3Rpb24oZWxlbSl7CisrCQkJcmV0dXJuICJwYXNz
d29yZCIgPT09IGVsZW0udHlwZTsKKysJCX0sCisrCQlzdWJtaXQ6IGZ1bmN0aW9uKGVsZW0pewor
KwkJCXJldHVybiAic3VibWl0IiA9PT0gZWxlbS50eXBlOworKwkJfSwKKysJCWltYWdlOiBmdW5j
dGlvbihlbGVtKXsKKysJCQlyZXR1cm4gImltYWdlIiA9PT0gZWxlbS50eXBlOworKwkJfSwKKysJ
CXJlc2V0OiBmdW5jdGlvbihlbGVtKXsKKysJCQlyZXR1cm4gInJlc2V0IiA9PT0gZWxlbS50eXBl
OworKwkJfSwKKysJCWJ1dHRvbjogZnVuY3Rpb24oZWxlbSl7CisrCQkJcmV0dXJuICJidXR0b24i
ID09PSBlbGVtLnR5cGUgfHwgZWxlbS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09PSAiQlVUVE9O
IjsKKysJCX0sCisrCQlpbnB1dDogZnVuY3Rpb24oZWxlbSl7CisrCQkJcmV0dXJuIC9pbnB1dHxz
ZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChlbGVtLm5vZGVOYW1lKTsKKysJCX0KKysJfSwK
KysJc2V0RmlsdGVyczogeworKwkJZmlyc3Q6IGZ1bmN0aW9uKGVsZW0sIGkpeworKwkJCXJldHVy
biBpID09PSAwOworKwkJfSwKKysJCWxhc3Q6IGZ1bmN0aW9uKGVsZW0sIGksIG1hdGNoLCBhcnJh
eSl7CisrCQkJcmV0dXJuIGkgPT09IGFycmF5Lmxlbmd0aCAtIDE7CisrCQl9LAorKwkJZXZlbjog
ZnVuY3Rpb24oZWxlbSwgaSl7CisrCQkJcmV0dXJuIGkgJSAyID09PSAwOworKwkJfSwKKysJCW9k
ZDogZnVuY3Rpb24oZWxlbSwgaSl7CisrCQkJcmV0dXJuIGkgJSAyID09PSAxOworKwkJfSwKKysJ
CWx0OiBmdW5jdGlvbihlbGVtLCBpLCBtYXRjaCl7CisrCQkJcmV0dXJuIGkgPCBtYXRjaFszXSAt
IDA7CisrCQl9LAorKwkJZ3Q6IGZ1bmN0aW9uKGVsZW0sIGksIG1hdGNoKXsKKysJCQlyZXR1cm4g
aSA+IG1hdGNoWzNdIC0gMDsKKysJCX0sCisrCQludGg6IGZ1bmN0aW9uKGVsZW0sIGksIG1hdGNo
KXsKKysJCQlyZXR1cm4gbWF0Y2hbM10gLSAwID09IGk7CisrCQl9LAorKwkJZXE6IGZ1bmN0aW9u
KGVsZW0sIGksIG1hdGNoKXsKKysJCQlyZXR1cm4gbWF0Y2hbM10gLSAwID09IGk7CisrCQl9Cisr
CX0sCisrCWZpbHRlcjogeworKwkJUFNFVURPOiBmdW5jdGlvbihlbGVtLCBtYXRjaCwgaSwgYXJy
YXkpeworKwkJCXZhciBuYW1lID0gbWF0Y2hbMV0sIGZpbHRlciA9IEV4cHIuZmlsdGVyc1sgbmFt
ZSBdOworKworKwkJCWlmICggZmlsdGVyICkgeworKwkJCQlyZXR1cm4gZmlsdGVyKCBlbGVtLCBp
LCBtYXRjaCwgYXJyYXkgKTsKKysJCQl9IGVsc2UgaWYgKCBuYW1lID09PSAiY29udGFpbnMiICkg
eworKwkJCQlyZXR1cm4gKGVsZW0udGV4dENvbnRlbnQgfHwgZWxlbS5pbm5lclRleHQgfHwgIiIp
LmluZGV4T2YobWF0Y2hbM10pID49IDA7CisrCQkJfSBlbHNlIGlmICggbmFtZSA9PT0gIm5vdCIg
KSB7CisrCQkJCXZhciBub3QgPSBtYXRjaFszXTsKKysKKysJCQkJZm9yICggdmFyIGkgPSAwLCBs
ID0gbm90Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKysJCQkJCWlmICggbm90W2ldID09PSBlbGVt
ICkgeworKwkJCQkJCXJldHVybiBmYWxzZTsKKysJCQkJCX0KKysJCQkJfQorKworKwkJCQlyZXR1
cm4gdHJ1ZTsKKysJCQl9CisrCQl9LAorKwkJQ0hJTEQ6IGZ1bmN0aW9uKGVsZW0sIG1hdGNoKXsK
KysJCQl2YXIgdHlwZSA9IG1hdGNoWzFdLCBub2RlID0gZWxlbTsKKysJCQlzd2l0Y2ggKHR5cGUp
IHsKKysJCQkJY2FzZSAnb25seSc6CisrCQkJCWNhc2UgJ2ZpcnN0JzoKKysJCQkJCXdoaWxlICgg
KG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykgKSAgeworKwkJCQkJCWlmICggbm9kZS5ub2Rl
VHlwZSA9PT0gMSApIHJldHVybiBmYWxzZTsKKysJCQkJCX0KKysJCQkJCWlmICggdHlwZSA9PSAn
Zmlyc3QnKSByZXR1cm4gdHJ1ZTsKKysJCQkJCW5vZGUgPSBlbGVtOworKwkJCQljYXNlICdsYXN0
JzoKKysJCQkJCXdoaWxlICggKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSApICB7CisrCQkJCQkJ
aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkgcmV0dXJuIGZhbHNlOworKwkJCQkJfQorKwkJCQkJ
cmV0dXJuIHRydWU7CisrCQkJCWNhc2UgJ250aCc6CisrCQkJCQl2YXIgZmlyc3QgPSBtYXRjaFsy
XSwgbGFzdCA9IG1hdGNoWzNdOworKworKwkJCQkJaWYgKCBmaXJzdCA9PSAxICYmIGxhc3QgPT0g
MCApIHsKKysJCQkJCQlyZXR1cm4gdHJ1ZTsKKysJCQkJCX0KKysKKysJCQkJCXZhciBkb25lTmFt
ZSA9IG1hdGNoWzBdLAorKwkJCQkJCXBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKysKKysJCQkJ
CWlmICggcGFyZW50ICYmIChwYXJlbnQuc2l6Y2FjaGUgIT09IGRvbmVOYW1lIHx8ICFlbGVtLm5v
ZGVJbmRleCkgKSB7CisrCQkJCQkJdmFyIGNvdW50ID0gMDsKKysJCQkJCQlmb3IgKCBub2RlID0g
cGFyZW50LmZpcnN0Q2hpbGQ7IG5vZGU7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nICkgeworKwkJ
CQkJCQlpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisrCQkJCQkJCQlub2RlLm5vZGVJbmRl
eCA9ICsrY291bnQ7CisrCQkJCQkJCX0KKysJCQkJCQl9CisrCQkJCQkJcGFyZW50LnNpemNhY2hl
ID0gZG9uZU5hbWU7CisrCQkJCQl9CisrCisrCQkJCQl2YXIgZGlmZiA9IGVsZW0ubm9kZUluZGV4
IC0gbGFzdDsKKysJCQkJCWlmICggZmlyc3QgPT0gMCApIHsKKysJCQkJCQlyZXR1cm4gZGlmZiA9
PSAwOworKwkJCQkJfSBlbHNlIHsKKysJCQkJCQlyZXR1cm4gKCBkaWZmICUgZmlyc3QgPT0gMCAm
JiBkaWZmIC8gZmlyc3QgPj0gMCApOworKwkJCQkJfQorKwkJCX0KKysJCX0sCisrCQlJRDogZnVu
Y3Rpb24oZWxlbSwgbWF0Y2gpeworKwkJCXJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxICYmIGVs
ZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBtYXRjaDsKKysJCX0sCisrCQlUQUc6IGZ1bmN0aW9u
KGVsZW0sIG1hdGNoKXsKKysJCQlyZXR1cm4gKG1hdGNoID09PSAiKiIgJiYgZWxlbS5ub2RlVHlw
ZSA9PT0gMSkgfHwgZWxlbS5ub2RlTmFtZSA9PT0gbWF0Y2g7CisrCQl9LAorKwkJQ0xBU1M6IGZ1
bmN0aW9uKGVsZW0sIG1hdGNoKXsKKysJCQlyZXR1cm4gKCIgIiArIChlbGVtLmNsYXNzTmFtZSB8
fCBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSkgKyAiICIpCisrCQkJCS5pbmRleE9mKCBtYXRj
aCApID4gLTE7CisrCQl9LAorKwkJQVRUUjogZnVuY3Rpb24oZWxlbSwgbWF0Y2gpeworKwkJCXZh
ciBuYW1lID0gbWF0Y2hbMV0sCisrCQkJCXJlc3VsdCA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZSBd
ID8KKysJCQkJCUV4cHIuYXR0ckhhbmRsZVsgbmFtZSBdKCBlbGVtICkgOgorKwkJCQkJZWxlbVsg
bmFtZSBdICE9IG51bGwgPworKwkJCQkJCWVsZW1bIG5hbWUgXSA6CisrCQkJCQkJZWxlbS5nZXRB
dHRyaWJ1dGUoIG5hbWUgKSwKKysJCQkJdmFsdWUgPSByZXN1bHQgKyAiIiwKKysJCQkJdHlwZSA9
IG1hdGNoWzJdLAorKwkJCQljaGVjayA9IG1hdGNoWzRdOworKworKwkJCXJldHVybiByZXN1bHQg
PT0gbnVsbCA/CisrCQkJCXR5cGUgPT09ICIhPSIgOgorKwkJCQl0eXBlID09PSAiPSIgPworKwkJ
CQl2YWx1ZSA9PT0gY2hlY2sgOgorKwkJCQl0eXBlID09PSAiKj0iID8KKysJCQkJdmFsdWUuaW5k
ZXhPZihjaGVjaykgPj0gMCA6CisrCQkJCXR5cGUgPT09ICJ+PSIgPworKwkJCQkoIiAiICsgdmFs
dWUgKyAiICIpLmluZGV4T2YoY2hlY2spID49IDAgOgorKwkJCQkhY2hlY2sgPworKwkJCQl2YWx1
ZSAmJiByZXN1bHQgIT09IGZhbHNlIDoKKysJCQkJdHlwZSA9PT0gIiE9IiA/CisrCQkJCXZhbHVl
ICE9IGNoZWNrIDoKKysJCQkJdHlwZSA9PT0gIl49IiA/CisrCQkJCXZhbHVlLmluZGV4T2YoY2hl
Y2spID09PSAwIDoKKysJCQkJdHlwZSA9PT0gIiQ9IiA/CisrCQkJCXZhbHVlLnN1YnN0cih2YWx1
ZS5sZW5ndGggLSBjaGVjay5sZW5ndGgpID09PSBjaGVjayA6CisrCQkJCXR5cGUgPT09ICJ8PSIg
PworKwkJCQl2YWx1ZSA9PT0gY2hlY2sgfHwgdmFsdWUuc3Vic3RyKDAsIGNoZWNrLmxlbmd0aCAr
IDEpID09PSBjaGVjayArICItIiA6CisrCQkJCWZhbHNlOworKwkJfSwKKysJCVBPUzogZnVuY3Rp
b24oZWxlbSwgbWF0Y2gsIGksIGFycmF5KXsKKysJCQl2YXIgbmFtZSA9IG1hdGNoWzJdLCBmaWx0
ZXIgPSBFeHByLnNldEZpbHRlcnNbIG5hbWUgXTsKKysKKysJCQlpZiAoIGZpbHRlciApIHsKKysJ
CQkJcmV0dXJuIGZpbHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7CisrCQkJfQorKwkJfQor
Kwl9CisrfTsKKysKKyt2YXIgb3JpZ1BPUyA9IEV4cHIubWF0Y2guUE9TOworKworK2ZvciAoIHZh
ciB0eXBlIGluIEV4cHIubWF0Y2ggKSB7CisrCUV4cHIubWF0Y2hbIHR5cGUgXSA9IG5ldyBSZWdF
eHAoIEV4cHIubWF0Y2hbIHR5cGUgXS5zb3VyY2UgKyAvKD8hW15cW10qXF0pKD8hW15cKF0qXCkp
Ly5zb3VyY2UgKTsKKysJRXhwci5sZWZ0TWF0Y2hbIHR5cGUgXSA9IG5ldyBSZWdFeHAoIC8oXig/
Oi58XHJ8XG4pKj8pLy5zb3VyY2UgKyBFeHByLm1hdGNoWyB0eXBlIF0uc291cmNlICk7CisrfQor
KworK3ZhciBtYWtlQXJyYXkgPSBmdW5jdGlvbihhcnJheSwgcmVzdWx0cykgeworKwlhcnJheSA9
IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcnJheSwgMCApOworKworKwlpZiAoIHJlc3Vs
dHMgKSB7CisrCQlyZXN1bHRzLnB1c2guYXBwbHkoIHJlc3VsdHMsIGFycmF5ICk7CisrCQlyZXR1
cm4gcmVzdWx0czsKKysJfQorKworKwlyZXR1cm4gYXJyYXk7CisrfTsKKysKKyt0cnkgeworKwlB
cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNoaWxk
Tm9kZXMsIDAgKTsKKysKKyt9IGNhdGNoKGUpeworKwltYWtlQXJyYXkgPSBmdW5jdGlvbihhcnJh
eSwgcmVzdWx0cykgeworKwkJdmFyIHJldCA9IHJlc3VsdHMgfHwgW107CisrCisrCQlpZiAoIHRv
U3RyaW5nLmNhbGwoYXJyYXkpID09PSAiW29iamVjdCBBcnJheV0iICkgeworKwkJCUFycmF5LnBy
b3RvdHlwZS5wdXNoLmFwcGx5KCByZXQsIGFycmF5ICk7CisrCQl9IGVsc2UgeworKwkJCWlmICgg
dHlwZW9mIGFycmF5Lmxlbmd0aCA9PT0gIm51bWJlciIgKSB7CisrCQkJCWZvciAoIHZhciBpID0g
MCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKysJCQkJCXJldC5wdXNoKCBhcnJh
eVtpXSApOworKwkJCQl9CisrCQkJfSBlbHNlIHsKKysJCQkJZm9yICggdmFyIGkgPSAwOyBhcnJh
eVtpXTsgaSsrICkgeworKwkJCQkJcmV0LnB1c2goIGFycmF5W2ldICk7CisrCQkJCX0KKysJCQl9
CisrCQl9CisrCisrCQlyZXR1cm4gcmV0OworKwl9OworK30KKysKKyt2YXIgc29ydE9yZGVyOwor
KworK2lmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u
ICkgeworKwlzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHsKKysJCWlmICggIWEuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24gKSB7CisrCQkJ
aWYgKCBhID09IGIgKSB7CisrCQkJCWhhc0R1cGxpY2F0ZSA9IHRydWU7CisrCQkJfQorKwkJCXJl
dHVybiAwOworKwkJfQorKworKwkJdmFyIHJldCA9IGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24o
YikgJiA0ID8gLTEgOiBhID09PSBiID8gMCA6IDE7CisrCQlpZiAoIHJldCA9PT0gMCApIHsKKysJ
CQloYXNEdXBsaWNhdGUgPSB0cnVlOworKwkJfQorKwkJcmV0dXJuIHJldDsKKysJfTsKKyt9IGVs
c2UgaWYgKCAic291cmNlSW5kZXgiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCApIHsKKysJ
c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7CisrCQlpZiAoICFhLnNvdXJjZUluZGV4IHx8
ICFiLnNvdXJjZUluZGV4ICkgeworKwkJCWlmICggYSA9PSBiICkgeworKwkJCQloYXNEdXBsaWNh
dGUgPSB0cnVlOworKwkJCX0KKysJCQlyZXR1cm4gMDsKKysJCX0KKysKKysJCXZhciByZXQgPSBh
LnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDsKKysJCWlmICggcmV0ID09PSAwICkgeworKwkJ
CWhhc0R1cGxpY2F0ZSA9IHRydWU7CisrCQl9CisrCQlyZXR1cm4gcmV0OworKwl9OworK30gZWxz
ZSBpZiAoIGRvY3VtZW50LmNyZWF0ZVJhbmdlICkgeworKwlzb3J0T3JkZXIgPSBmdW5jdGlvbigg
YSwgYiApIHsKKysJCWlmICggIWEub3duZXJEb2N1bWVudCB8fCAhYi5vd25lckRvY3VtZW50ICkg
eworKwkJCWlmICggYSA9PSBiICkgeworKwkJCQloYXNEdXBsaWNhdGUgPSB0cnVlOworKwkJCX0K
KysJCQlyZXR1cm4gMDsKKysJCX0KKysKKysJCXZhciBhUmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQu
Y3JlYXRlUmFuZ2UoKSwgYlJhbmdlID0gYi5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Cisr
CQlhUmFuZ2Uuc2V0U3RhcnQoYSwgMCk7CisrCQlhUmFuZ2Uuc2V0RW5kKGEsIDApOworKwkJYlJh
bmdlLnNldFN0YXJ0KGIsIDApOworKwkJYlJhbmdlLnNldEVuZChiLCAwKTsKKysJCXZhciByZXQg
PSBhUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgYlJhbmdl
KTsKKysJCWlmICggcmV0ID09PSAwICkgeworKwkJCWhhc0R1cGxpY2F0ZSA9IHRydWU7CisrCQl9
CisrCQlyZXR1cm4gcmV0OworKwl9OworK30KKysKKysoZnVuY3Rpb24oKXsKKysJdmFyIGZvcm0g
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwKKysJCWlkID0gInNjcmlwdCIgKyAobmV3
IERhdGUpLmdldFRpbWUoKTsKKysJZm9ybS5pbm5lckhUTUwgPSAiPGEgbmFtZT0nIiArIGlkICsg
IicvPiI7CisrCisrCXZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworKwlyb290
Lmluc2VydEJlZm9yZSggZm9ybSwgcm9vdC5maXJzdENoaWxkICk7CisrCisrCWlmICggISFkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCggaWQgKSApIHsKKysJCUV4cHIuZmluZC5JRCA9IGZ1bmN0aW9u
KG1hdGNoLCBjb250ZXh0LCBpc1hNTCl7CisrCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVt
ZW50QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgIWlzWE1MICkgeworKwkJCQl2YXIgbSA9IGNvbnRl
eHQuZ2V0RWxlbWVudEJ5SWQobWF0Y2hbMV0pOworKwkJCQlyZXR1cm4gbSA/IG0uaWQgPT09IG1h
dGNoWzFdIHx8IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmIG0u
Z2V0QXR0cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWUgPT09IG1hdGNoWzFdID8gW21dIDogdW5k
ZWZpbmVkIDogW107CisrCQkJfQorKwkJfTsKKysKKysJCUV4cHIuZmlsdGVyLklEID0gZnVuY3Rp
b24oZWxlbSwgbWF0Y2gpeworKwkJCXZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRl
Tm9kZSAhPT0gInVuZGVmaW5lZCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOworKwkJ
CXJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxICYmIG5vZGUgJiYgbm9kZS5ub2RlVmFsdWUgPT09
IG1hdGNoOworKwkJfTsKKysJfQorKworKwlyb290LnJlbW92ZUNoaWxkKCBmb3JtICk7CisrCXJv
b3QgPSBmb3JtID0gbnVsbDsgLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKKyt9KSgpOworKworKyhm
dW5jdGlvbigpeworKworKwl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisrCWRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIikgKTsKKysKKysJ
aWYgKCBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGggPiAwICkgeworKwkJRXhw
ci5maW5kLlRBRyA9IGZ1bmN0aW9uKG1hdGNoLCBjb250ZXh0KXsKKysJCQl2YXIgcmVzdWx0cyA9
IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUobWF0Y2hbMV0pOworKworKwkJCWlmICggbWF0
Y2hbMV0gPT09ICIqIiApIHsKKysJCQkJdmFyIHRtcCA9IFtdOworKworKwkJCQlmb3IgKCB2YXIg
aSA9IDA7IHJlc3VsdHNbaV07IGkrKyApIHsKKysJCQkJCWlmICggcmVzdWx0c1tpXS5ub2RlVHlw
ZSA9PT0gMSApIHsKKysJCQkJCQl0bXAucHVzaCggcmVzdWx0c1tpXSApOworKwkJCQkJfQorKwkJ
CQl9CisrCisrCQkJCXJlc3VsdHMgPSB0bXA7CisrCQkJfQorKworKwkJCXJldHVybiByZXN1bHRz
OworKwkJfTsKKysJfQorKworKwlkaXYuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMnPjwvYT4iOwor
KwlpZiAoIGRpdi5maXJzdENoaWxkICYmIHR5cGVvZiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1
dGUgIT09ICJ1bmRlZmluZWQiICYmCisrCQkJZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJo
cmVmIikgIT09ICIjIiApIHsKKysJCUV4cHIuYXR0ckhhbmRsZS5ocmVmID0gZnVuY3Rpb24oZWxl
bSl7CisrCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJocmVmIiwgMik7CisrCQl9OworKwl9
CisrCisrCWRpdiA9IG51bGw7IC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCisrfSkoKTsKKysKKytp
ZiAoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSAoZnVuY3Rpb24oKXsKKysJdmFyIG9sZFNp
enpsZSA9IFNpenpsZSwgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisrCWRp
di5pbm5lckhUTUwgPSAiPHAgY2xhc3M9J1RFU1QnPjwvcD4iOworKworKwlpZiAoIGRpdi5xdWVy
eVNlbGVjdG9yQWxsICYmIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aCA9PT0g
MCApIHsKKysJCXJldHVybjsKKysJfQorKworKwlTaXp6bGUgPSBmdW5jdGlvbihxdWVyeSwgY29u
dGV4dCwgZXh0cmEsIHNlZWQpeworKwkJY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7Cisr
CisrCQlpZiAoICFzZWVkICYmIGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgIWlzWE1MKGNvbnRl
eHQpICkgeworKwkJCXRyeSB7CisrCQkJCXJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQucXVlcnlT
ZWxlY3RvckFsbChxdWVyeSksIGV4dHJhICk7CisrCQkJfSBjYXRjaChlKXt9CisrCQl9CisrCisr
CQlyZXR1cm4gb2xkU2l6emxlKHF1ZXJ5LCBjb250ZXh0LCBleHRyYSwgc2VlZCk7CisrCX07Cisr
CisrCWZvciAoIHZhciBwcm9wIGluIG9sZFNpenpsZSApIHsKKysJCVNpenpsZVsgcHJvcCBdID0g
b2xkU2l6emxlWyBwcm9wIF07CisrCX0KKysKKysJZGl2ID0gbnVsbDsgLy8gcmVsZWFzZSBtZW1v
cnkgaW4gSUUKKyt9KSgpOworKworK2lmICggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIChm
dW5jdGlvbigpeworKwl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisr
CWRpdi5pbm5lckhUTUwgPSAiPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0
ZXN0Jz48L2Rpdj4iOworKworKwlpZiAoIGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIiku
bGVuZ3RoID09PSAwICkKKysJCXJldHVybjsKKysKKysJZGl2Lmxhc3RDaGlsZC5jbGFzc05hbWUg
PSAiZSI7CisrCisrCWlmICggZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGgg
PT09IDEgKQorKwkJcmV0dXJuOworKworKwlFeHByLm9yZGVyLnNwbGljZSgxLCAwLCAiQ0xBU1Mi
KTsKKysJRXhwci5maW5kLkNMQVNTID0gZnVuY3Rpb24obWF0Y2gsIGNvbnRleHQsIGlzWE1MKSB7
CisrCQlpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09ICJ1bmRl
ZmluZWQiICYmICFpc1hNTCApIHsKKysJCQlyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKG1hdGNoWzFdKTsKKysJCX0KKysJfTsKKysKKysJZGl2ID0gbnVsbDsgLy8gcmVsZWFz
ZSBtZW1vcnkgaW4gSUUKKyt9KSgpOworKworK2Z1bmN0aW9uIGRpck5vZGVDaGVjayggZGlyLCBj
dXIsIGRvbmVOYW1lLCBjaGVja1NldCwgbm9kZUNoZWNrLCBpc1hNTCApIHsKKysJdmFyIHNpYkRp
ciA9IGRpciA9PSAicHJldmlvdXNTaWJsaW5nIiAmJiAhaXNYTUw7CisrCWZvciAoIHZhciBpID0g
MCwgbCA9IGNoZWNrU2V0Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKysJCXZhciBlbGVtID0gY2hl
Y2tTZXRbaV07CisrCQlpZiAoIGVsZW0gKSB7CisrCQkJaWYgKCBzaWJEaXIgJiYgZWxlbS5ub2Rl
VHlwZSA9PT0gMSApeworKwkJCQllbGVtLnNpemNhY2hlID0gZG9uZU5hbWU7CisrCQkJCWVsZW0u
c2l6c2V0ID0gaTsKKysJCQl9CisrCQkJZWxlbSA9IGVsZW1bZGlyXTsKKysJCQl2YXIgbWF0Y2gg
PSBmYWxzZTsKKysKKysJCQl3aGlsZSAoIGVsZW0gKSB7CisrCQkJCWlmICggZWxlbS5zaXpjYWNo
ZSA9PT0gZG9uZU5hbWUgKSB7CisrCQkJCQltYXRjaCA9IGNoZWNrU2V0W2VsZW0uc2l6c2V0XTsK
KysJCQkJCWJyZWFrOworKwkJCQl9CisrCisrCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAm
JiAhaXNYTUwgKXsKKysJCQkJCWVsZW0uc2l6Y2FjaGUgPSBkb25lTmFtZTsKKysJCQkJCWVsZW0u
c2l6c2V0ID0gaTsKKysJCQkJfQorKworKwkJCQlpZiAoIGVsZW0ubm9kZU5hbWUgPT09IGN1ciAp
IHsKKysJCQkJCW1hdGNoID0gZWxlbTsKKysJCQkJCWJyZWFrOworKwkJCQl9CisrCisrCQkJCWVs
ZW0gPSBlbGVtW2Rpcl07CisrCQkJfQorKworKwkJCWNoZWNrU2V0W2ldID0gbWF0Y2g7CisrCQl9
CisrCX0KKyt9CisrCisrZnVuY3Rpb24gZGlyQ2hlY2soIGRpciwgY3VyLCBkb25lTmFtZSwgY2hl
Y2tTZXQsIG5vZGVDaGVjaywgaXNYTUwgKSB7CisrCXZhciBzaWJEaXIgPSBkaXIgPT0gInByZXZp
b3VzU2libGluZyIgJiYgIWlzWE1MOworKwlmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5s
ZW5ndGg7IGkgPCBsOyBpKysgKSB7CisrCQl2YXIgZWxlbSA9IGNoZWNrU2V0W2ldOworKwkJaWYg
KCBlbGVtICkgeworKwkJCWlmICggc2liRGlyICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Cisr
CQkJCWVsZW0uc2l6Y2FjaGUgPSBkb25lTmFtZTsKKysJCQkJZWxlbS5zaXpzZXQgPSBpOworKwkJ
CX0KKysJCQllbGVtID0gZWxlbVtkaXJdOworKwkJCXZhciBtYXRjaCA9IGZhbHNlOworKworKwkJ
CXdoaWxlICggZWxlbSApIHsKKysJCQkJaWYgKCBlbGVtLnNpemNhY2hlID09PSBkb25lTmFtZSAp
IHsKKysJCQkJCW1hdGNoID0gY2hlY2tTZXRbZWxlbS5zaXpzZXRdOworKwkJCQkJYnJlYWs7Cisr
CQkJCX0KKysKKysJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworKwkJCQkJaWYgKCAh
aXNYTUwgKSB7CisrCQkJCQkJZWxlbS5zaXpjYWNoZSA9IGRvbmVOYW1lOworKwkJCQkJCWVsZW0u
c2l6c2V0ID0gaTsKKysJCQkJCX0KKysJCQkJCWlmICggdHlwZW9mIGN1ciAhPT0gInN0cmluZyIg
KSB7CisrCQkJCQkJaWYgKCBlbGVtID09PSBjdXIgKSB7CisrCQkJCQkJCW1hdGNoID0gdHJ1ZTsK
KysJCQkJCQkJYnJlYWs7CisrCQkJCQkJfQorKworKwkJCQkJfSBlbHNlIGlmICggU2l6emxlLmZp
bHRlciggY3VyLCBbZWxlbV0gKS5sZW5ndGggPiAwICkgeworKwkJCQkJCW1hdGNoID0gZWxlbTsK
KysJCQkJCQlicmVhazsKKysJCQkJCX0KKysJCQkJfQorKworKwkJCQllbGVtID0gZWxlbVtkaXJd
OworKwkJCX0KKysKKysJCQljaGVja1NldFtpXSA9IG1hdGNoOworKwkJfQorKwl9CisrfQorKwor
K3ZhciBjb250YWlucyA9IGRvY3VtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8gIGZ1bmN0
aW9uKGEsIGIpeworKwlyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDE2Owor
K30gOiBmdW5jdGlvbihhLCBiKXsKKysJcmV0dXJuIGEgIT09IGIgJiYgKGEuY29udGFpbnMgPyBh
LmNvbnRhaW5zKGIpIDogdHJ1ZSk7CisrfTsKKysKKyt2YXIgaXNYTUwgPSBmdW5jdGlvbihlbGVt
KXsKKysJcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDkgJiYgZWxlbS5kb2N1bWVudEVsZW1lbnQu
bm9kZU5hbWUgIT09ICJIVE1MIiB8fAorKwkJISFlbGVtLm93bmVyRG9jdW1lbnQgJiYgZWxlbS5v
d25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gIkhUTUwiOworK307Cisr
CisrdmFyIHBvc1Byb2Nlc3MgPSBmdW5jdGlvbihzZWxlY3RvciwgY29udGV4dCl7CisrCXZhciB0
bXBTZXQgPSBbXSwgbGF0ZXIgPSAiIiwgbWF0Y2gsCisrCQlyb290ID0gY29udGV4dC5ub2RlVHlw
ZSA/IFtjb250ZXh0XSA6IGNvbnRleHQ7CisrCisrCXdoaWxlICggKG1hdGNoID0gRXhwci5tYXRj
aC5QU0VVRE8uZXhlYyggc2VsZWN0b3IgKSkgKSB7CisrCQlsYXRlciArPSBtYXRjaFswXTsKKysJ
CXNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZSggRXhwci5tYXRjaC5QU0VVRE8sICIiICk7Cisr
CX0KKysKKysJc2VsZWN0b3IgPSBFeHByLnJlbGF0aXZlW3NlbGVjdG9yXSA/IHNlbGVjdG9yICsg
IioiIDogc2VsZWN0b3I7CisrCisrCWZvciAoIHZhciBpID0gMCwgbCA9IHJvb3QubGVuZ3RoOyBp
IDwgbDsgaSsrICkgeworKwkJU2l6emxlKCBzZWxlY3Rvciwgcm9vdFtpXSwgdG1wU2V0ICk7Cisr
CX0KKysKKysJcmV0dXJuIFNpenpsZS5maWx0ZXIoIGxhdGVyLCB0bXBTZXQgKTsKKyt9OworKwor
KworK3dpbmRvdy5TaXp6bGUgPSBTaXp6bGU7CisrCisrfSkoKTsKKysKKys7KGZ1bmN0aW9uKGVu
Z2luZSkgeworKyAgdmFyIGV4dGVuZEVsZW1lbnRzID0gUHJvdG90eXBlLlNlbGVjdG9yLmV4dGVu
ZEVsZW1lbnRzOworKworKyAgZnVuY3Rpb24gc2VsZWN0KHNlbGVjdG9yLCBzY29wZSkgeworKyAg
ICByZXR1cm4gZXh0ZW5kRWxlbWVudHMoZW5naW5lKHNlbGVjdG9yLCBzY29wZSB8fCBkb2N1bWVu
dCkpOworKyAgfQorKworKyAgZnVuY3Rpb24gbWF0Y2goZWxlbWVudCwgc2VsZWN0b3IpIHsKKysg
ICAgcmV0dXJuIGVuZ2luZS5tYXRjaGVzKHNlbGVjdG9yLCBbZWxlbWVudF0pLmxlbmd0aCA9PSAx
OworKyAgfQorKworKyAgUHJvdG90eXBlLlNlbGVjdG9yLmVuZ2luZSA9IGVuZ2luZTsKKysgIFBy
b3RvdHlwZS5TZWxlY3Rvci5zZWxlY3QgPSBzZWxlY3Q7CisrICBQcm90b3R5cGUuU2VsZWN0b3Iu
bWF0Y2ggPSBtYXRjaDsKKyt9KShTaXp6bGUpOworKworK3dpbmRvdy5TaXp6bGUgPSBQcm90b3R5
cGUuX29yaWdpbmFsX3Byb3BlcnR5OworK2RlbGV0ZSBQcm90b3R5cGUuX29yaWdpbmFsX3Byb3Bl
cnR5OworKworK3ZhciBGb3JtID0geworKyAgcmVzZXQ6IGZ1bmN0aW9uKGZvcm0pIHsKKysgICAg
Zm9ybSA9ICQoZm9ybSk7CisrICAgIGZvcm0ucmVzZXQoKTsKKysgICAgcmV0dXJuIGZvcm07Cisr
ICB9LAorKworKyAgc2VyaWFsaXplRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnRzLCBvcHRpb25z
KSB7CisrICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPSAnb2JqZWN0Jykgb3B0aW9ucyA9IHsgaGFz
aDogISFvcHRpb25zIH07CisrICAgIGVsc2UgaWYgKE9iamVjdC5pc1VuZGVmaW5lZChvcHRpb25z
Lmhhc2gpKSBvcHRpb25zLmhhc2ggPSB0cnVlOworKyAgICB2YXIga2V5LCB2YWx1ZSwgc3VibWl0
dGVkID0gZmFsc2UsIHN1Ym1pdCA9IG9wdGlvbnMuc3VibWl0LCBhY2N1bXVsYXRvciwgaW5pdGlh
bDsKKysKKysgICAgaWYgKG9wdGlvbnMuaGFzaCkgeworKyAgICAgIGluaXRpYWwgPSB7fTsKKysg
ICAgICBhY2N1bXVsYXRvciA9IGZ1bmN0aW9uKHJlc3VsdCwga2V5LCB2YWx1ZSkgeworKyAgICAg
ICAgaWYgKGtleSBpbiByZXN1bHQpIHsKKysgICAgICAgICAgaWYgKCFPYmplY3QuaXNBcnJheShy
ZXN1bHRba2V5XSkpIHJlc3VsdFtrZXldID0gW3Jlc3VsdFtrZXldXTsKKysgICAgICAgICAgcmVz
dWx0W2tleV0ucHVzaCh2YWx1ZSk7CisrICAgICAgICB9IGVsc2UgcmVzdWx0W2tleV0gPSB2YWx1
ZTsKKysgICAgICAgIHJldHVybiByZXN1bHQ7CisrICAgICAgfTsKKysgICAgfSBlbHNlIHsKKysg
ICAgICBpbml0aWFsID0gJyc7CisrICAgICAgYWNjdW11bGF0b3IgPSBmdW5jdGlvbihyZXN1bHQs
IGtleSwgdmFsdWUpIHsKKysgICAgICAgIHJldHVybiByZXN1bHQgKyAocmVzdWx0ID8gJyYnIDog
JycpICsgZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQo
dmFsdWUpOworKyAgICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gZWxlbWVudHMuaW5qZWN0
KGluaXRpYWwsIGZ1bmN0aW9uKHJlc3VsdCwgZWxlbWVudCkgeworKyAgICAgIGlmICghZWxlbWVu
dC5kaXNhYmxlZCAmJiBlbGVtZW50Lm5hbWUpIHsKKysgICAgICAgIGtleSA9IGVsZW1lbnQubmFt
ZTsgdmFsdWUgPSAkKGVsZW1lbnQpLmdldFZhbHVlKCk7CisrICAgICAgICBpZiAodmFsdWUgIT0g
bnVsbCAmJiBlbGVtZW50LnR5cGUgIT0gJ2ZpbGUnICYmIChlbGVtZW50LnR5cGUgIT0gJ3N1Ym1p
dCcgfHwgKCFzdWJtaXR0ZWQgJiYKKysgICAgICAgICAgICBzdWJtaXQgIT09IGZhbHNlICYmICgh
c3VibWl0IHx8IGtleSA9PSBzdWJtaXQpICYmIChzdWJtaXR0ZWQgPSB0cnVlKSkpKSB7CisrICAg
ICAgICAgIHJlc3VsdCA9IGFjY3VtdWxhdG9yKHJlc3VsdCwga2V5LCB2YWx1ZSk7CisrICAgICAg
ICB9CisrICAgICAgfQorKyAgICAgIHJldHVybiByZXN1bHQ7CisrICAgIH0pOworKyAgfQorK307
CisrCisrRm9ybS5NZXRob2RzID0geworKyAgc2VyaWFsaXplOiBmdW5jdGlvbihmb3JtLCBvcHRp
b25zKSB7CisrICAgIHJldHVybiBGb3JtLnNlcmlhbGl6ZUVsZW1lbnRzKEZvcm0uZ2V0RWxlbWVu
dHMoZm9ybSksIG9wdGlvbnMpOworKyAgfSwKKysKKysgIGdldEVsZW1lbnRzOiBmdW5jdGlvbihm
b3JtKSB7CisrICAgIHZhciBlbGVtZW50cyA9ICQoZm9ybSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
JyonKSwKKysgICAgICAgIGVsZW1lbnQsCisrICAgICAgICBhcnIgPSBbIF0sCisrICAgICAgICBz
ZXJpYWxpemVycyA9IEZvcm0uRWxlbWVudC5TZXJpYWxpemVyczsKKysgICAgZm9yICh2YXIgaSA9
IDA7IGVsZW1lbnQgPSBlbGVtZW50c1tpXTsgaSsrKSB7CisrICAgICAgYXJyLnB1c2goZWxlbWVu
dCk7CisrICAgIH0KKysgICAgcmV0dXJuIGFyci5pbmplY3QoW10sIGZ1bmN0aW9uKGVsZW1lbnRz
LCBjaGlsZCkgeworKyAgICAgIGlmIChzZXJpYWxpemVyc1tjaGlsZC50YWdOYW1lLnRvTG93ZXJD
YXNlKCldKQorKyAgICAgICAgZWxlbWVudHMucHVzaChFbGVtZW50LmV4dGVuZChjaGlsZCkpOwor
KyAgICAgIHJldHVybiBlbGVtZW50czsKKysgICAgfSkKKysgIH0sCisrCisrICBnZXRJbnB1dHM6
IGZ1bmN0aW9uKGZvcm0sIHR5cGVOYW1lLCBuYW1lKSB7CisrICAgIGZvcm0gPSAkKGZvcm0pOwor
KyAgICB2YXIgaW5wdXRzID0gZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTsKKysK
KysgICAgaWYgKCF0eXBlTmFtZSAmJiAhbmFtZSkgcmV0dXJuICRBKGlucHV0cykubWFwKEVsZW1l
bnQuZXh0ZW5kKTsKKysKKysgICAgZm9yICh2YXIgaSA9IDAsIG1hdGNoaW5nSW5wdXRzID0gW10s
IGxlbmd0aCA9IGlucHV0cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworKyAgICAgIHZhciBp
bnB1dCA9IGlucHV0c1tpXTsKKysgICAgICBpZiAoKHR5cGVOYW1lICYmIGlucHV0LnR5cGUgIT0g
dHlwZU5hbWUpIHx8IChuYW1lICYmIGlucHV0Lm5hbWUgIT0gbmFtZSkpCisrICAgICAgICBjb250
aW51ZTsKKysgICAgICBtYXRjaGluZ0lucHV0cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGlucHV0KSk7
CisrICAgIH0KKysKKysgICAgcmV0dXJuIG1hdGNoaW5nSW5wdXRzOworKyAgfSwKKysKKysgIGRp
c2FibGU6IGZ1bmN0aW9uKGZvcm0pIHsKKysgICAgZm9ybSA9ICQoZm9ybSk7CisrICAgIEZvcm0u
Z2V0RWxlbWVudHMoZm9ybSkuaW52b2tlKCdkaXNhYmxlJyk7CisrICAgIHJldHVybiBmb3JtOwor
KyAgfSwKKysKKysgIGVuYWJsZTogZnVuY3Rpb24oZm9ybSkgeworKyAgICBmb3JtID0gJChmb3Jt
KTsKKysgICAgRm9ybS5nZXRFbGVtZW50cyhmb3JtKS5pbnZva2UoJ2VuYWJsZScpOworKyAgICBy
ZXR1cm4gZm9ybTsKKysgIH0sCisrCisrICBmaW5kRmlyc3RFbGVtZW50OiBmdW5jdGlvbihmb3Jt
KSB7CisrICAgIHZhciBlbGVtZW50cyA9ICQoZm9ybSkuZ2V0RWxlbWVudHMoKS5maW5kQWxsKGZ1
bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICByZXR1cm4gJ2hpZGRlbicgIT0gZWxlbWVudC50eXBl
ICYmICFlbGVtZW50LmRpc2FibGVkOworKyAgICB9KTsKKysgICAgdmFyIGZpcnN0QnlJbmRleCA9
IGVsZW1lbnRzLmZpbmRBbGwoZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICAgIHJldHVybiBlbGVt
ZW50Lmhhc0F0dHJpYnV0ZSgndGFiSW5kZXgnKSAmJiBlbGVtZW50LnRhYkluZGV4ID49IDA7Cisr
ICAgIH0pLnNvcnRCeShmdW5jdGlvbihlbGVtZW50KSB7IHJldHVybiBlbGVtZW50LnRhYkluZGV4
IH0pLmZpcnN0KCk7CisrCisrICAgIHJldHVybiBmaXJzdEJ5SW5kZXggPyBmaXJzdEJ5SW5kZXgg
OiBlbGVtZW50cy5maW5kKGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICByZXR1cm4gL14oPzpp
bnB1dHxzZWxlY3R8dGV4dGFyZWEpJC9pLnRlc3QoZWxlbWVudC50YWdOYW1lKTsKKysgICAgfSk7
CisrICB9LAorKworKyAgZm9jdXNGaXJzdEVsZW1lbnQ6IGZ1bmN0aW9uKGZvcm0pIHsKKysgICAg
Zm9ybSA9ICQoZm9ybSk7CisrICAgIHZhciBlbGVtZW50ID0gZm9ybS5maW5kRmlyc3RFbGVtZW50
KCk7CisrICAgIGlmIChlbGVtZW50KSBlbGVtZW50LmFjdGl2YXRlKCk7CisrICAgIHJldHVybiBm
b3JtOworKyAgfSwKKysKKysgIHJlcXVlc3Q6IGZ1bmN0aW9uKGZvcm0sIG9wdGlvbnMpIHsKKysg
ICAgZm9ybSA9ICQoZm9ybSksIG9wdGlvbnMgPSBPYmplY3QuY2xvbmUob3B0aW9ucyB8fCB7IH0p
OworKworKyAgICB2YXIgcGFyYW1zID0gb3B0aW9ucy5wYXJhbWV0ZXJzLCBhY3Rpb24gPSBmb3Jt
LnJlYWRBdHRyaWJ1dGUoJ2FjdGlvbicpIHx8ICcnOworKyAgICBpZiAoYWN0aW9uLmJsYW5rKCkp
IGFjdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOworKyAgICBvcHRpb25zLnBhcmFtZXRlcnMg
PSBmb3JtLnNlcmlhbGl6ZSh0cnVlKTsKKysKKysgICAgaWYgKHBhcmFtcykgeworKyAgICAgIGlm
IChPYmplY3QuaXNTdHJpbmcocGFyYW1zKSkgcGFyYW1zID0gcGFyYW1zLnRvUXVlcnlQYXJhbXMo
KTsKKysgICAgICBPYmplY3QuZXh0ZW5kKG9wdGlvbnMucGFyYW1ldGVycywgcGFyYW1zKTsKKysg
ICAgfQorKworKyAgICBpZiAoZm9ybS5oYXNBdHRyaWJ1dGUoJ21ldGhvZCcpICYmICFvcHRpb25z
Lm1ldGhvZCkKKysgICAgICBvcHRpb25zLm1ldGhvZCA9IGZvcm0ubWV0aG9kOworKworKyAgICBy
ZXR1cm4gbmV3IEFqYXguUmVxdWVzdChhY3Rpb24sIG9wdGlvbnMpOworKyAgfQorK307CisrCisr
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrCisrRm9ybS5FbGVtZW50ID0geworKyAgZm9jdXM6
IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgJChlbGVtZW50KS5mb2N1cygpOworKyAgICByZXR1
cm4gZWxlbWVudDsKKysgIH0sCisrCisrICBzZWxlY3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysg
ICAgJChlbGVtZW50KS5zZWxlY3QoKTsKKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9CisrfTsK
KysKKytGb3JtLkVsZW1lbnQuTWV0aG9kcyA9IHsKKysKKysgIHNlcmlhbGl6ZTogZnVuY3Rpb24o
ZWxlbWVudCkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgaWYgKCFlbGVtZW50
LmRpc2FibGVkICYmIGVsZW1lbnQubmFtZSkgeworKyAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQu
Z2V0VmFsdWUoKTsKKysgICAgICBpZiAodmFsdWUgIT0gdW5kZWZpbmVkKSB7CisrICAgICAgICB2
YXIgcGFpciA9IHsgfTsKKysgICAgICAgIHBhaXJbZWxlbWVudC5uYW1lXSA9IHZhbHVlOworKyAg
ICAgICAgcmV0dXJuIE9iamVjdC50b1F1ZXJ5U3RyaW5nKHBhaXIpOworKyAgICAgIH0KKysgICAg
fQorKyAgICByZXR1cm4gJyc7CisrICB9LAorKworKyAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGVsZW1l
bnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIHZhciBtZXRob2QgPSBlbGVt
ZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKKysgICAgcmV0dXJuIEZvcm0uRWxlbWVudC5TZXJp
YWxpemVyc1ttZXRob2RdKGVsZW1lbnQpOworKyAgfSwKKysKKysgIHNldFZhbHVlOiBmdW5jdGlv
bihlbGVtZW50LCB2YWx1ZSkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgdmFy
IG1ldGhvZCA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOworKyAgICBGb3JtLkVsZW1l
bnQuU2VyaWFsaXplcnNbbWV0aG9kXShlbGVtZW50LCB2YWx1ZSk7CisrICAgIHJldHVybiBlbGVt
ZW50OworKyAgfSwKKysKKysgIGNsZWFyOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICQoZWxl
bWVudCkudmFsdWUgPSAnJzsKKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9LAorKworKyAgcHJl
c2VudDogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICByZXR1cm4gJChlbGVtZW50KS52YWx1ZSAh
PSAnJzsKKysgIH0sCisrCisrICBhY3RpdmF0ZTogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICBl
bGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgdHJ5IHsKKysgICAgICBlbGVtZW50LmZvY3VzKCk7
CisrICAgICAgaWYgKGVsZW1lbnQuc2VsZWN0ICYmIChlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNh
c2UoKSAhPSAnaW5wdXQnIHx8CisrICAgICAgICAgICEoL14oPzpidXR0b258cmVzZXR8c3VibWl0
KSQvaS50ZXN0KGVsZW1lbnQudHlwZSkpKSkKKysgICAgICAgIGVsZW1lbnQuc2VsZWN0KCk7Cisr
ICAgIH0gY2F0Y2ggKGUpIHsgfQorKyAgICByZXR1cm4gZWxlbWVudDsKKysgIH0sCisrCisrICBk
aXNhYmxlOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwor
KyAgICBlbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9
LAorKworKyAgZW5hYmxlOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVs
ZW1lbnQpOworKyAgICBlbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CisrICAgIHJldHVybiBlbGVt
ZW50OworKyAgfQorK307CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrdmFyIEZpZWxk
ID0gRm9ybS5FbGVtZW50OworKworK3ZhciAkRiA9IEZvcm0uRWxlbWVudC5NZXRob2RzLmdldFZh
bHVlOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK0Zvcm0uRWxlbWVudC5TZXJpYWxp
emVycyA9IChmdW5jdGlvbigpIHsKKysgIGZ1bmN0aW9uIGlucHV0KGVsZW1lbnQsIHZhbHVlKSB7
CisrICAgIHN3aXRjaCAoZWxlbWVudC50eXBlLnRvTG93ZXJDYXNlKCkpIHsKKysgICAgICBjYXNl
ICdjaGVja2JveCc6CisrICAgICAgY2FzZSAncmFkaW8nOgorKyAgICAgICAgcmV0dXJuIGlucHV0
U2VsZWN0b3IoZWxlbWVudCwgdmFsdWUpOworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICByZXR1
cm4gdmFsdWVTZWxlY3RvcihlbGVtZW50LCB2YWx1ZSk7CisrICAgIH0KKysgIH0KKysKKysgIGZ1
bmN0aW9uIGlucHV0U2VsZWN0b3IoZWxlbWVudCwgdmFsdWUpIHsKKysgICAgaWYgKE9iamVjdC5p
c1VuZGVmaW5lZCh2YWx1ZSkpCisrICAgICAgcmV0dXJuIGVsZW1lbnQuY2hlY2tlZCA/IGVsZW1l
bnQudmFsdWUgOiBudWxsOworKyAgICBlbHNlIGVsZW1lbnQuY2hlY2tlZCA9ICEhdmFsdWU7Cisr
ICB9CisrCisrICBmdW5jdGlvbiB2YWx1ZVNlbGVjdG9yKGVsZW1lbnQsIHZhbHVlKSB7CisrICAg
IGlmIChPYmplY3QuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm4gZWxlbWVudC52YWx1ZTsKKysg
ICAgZWxzZSBlbGVtZW50LnZhbHVlID0gdmFsdWU7CisrICB9CisrCisrICBmdW5jdGlvbiBzZWxl
Y3QoZWxlbWVudCwgdmFsdWUpIHsKKysgICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZCh2YWx1ZSkp
CisrICAgICAgcmV0dXJuIChlbGVtZW50LnR5cGUgPT09ICdzZWxlY3Qtb25lJyA/IHNlbGVjdE9u
ZSA6IHNlbGVjdE1hbnkpKGVsZW1lbnQpOworKworKyAgICB2YXIgb3B0LCBjdXJyZW50VmFsdWUs
IHNpbmdsZSA9ICFPYmplY3QuaXNBcnJheSh2YWx1ZSk7CisrICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBlbGVtZW50Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisrICAgICAgb3B0ID0g
ZWxlbWVudC5vcHRpb25zW2ldOworKyAgICAgIGN1cnJlbnRWYWx1ZSA9IHRoaXMub3B0aW9uVmFs
dWUob3B0KTsKKysgICAgICBpZiAoc2luZ2xlKSB7CisrICAgICAgICBpZiAoY3VycmVudFZhbHVl
ID09IHZhbHVlKSB7CisrICAgICAgICAgIG9wdC5zZWxlY3RlZCA9IHRydWU7CisrICAgICAgICAg
IHJldHVybjsKKysgICAgICAgIH0KKysgICAgICB9CisrICAgICAgZWxzZSBvcHQuc2VsZWN0ZWQg
PSB2YWx1ZS5pbmNsdWRlKGN1cnJlbnRWYWx1ZSk7CisrICAgIH0KKysgIH0KKysKKysgIGZ1bmN0
aW9uIHNlbGVjdE9uZShlbGVtZW50KSB7CisrICAgIHZhciBpbmRleCA9IGVsZW1lbnQuc2VsZWN0
ZWRJbmRleDsKKysgICAgcmV0dXJuIGluZGV4ID49IDAgPyBvcHRpb25WYWx1ZShlbGVtZW50Lm9w
dGlvbnNbaW5kZXhdKSA6IG51bGw7CisrICB9CisrCisrICBmdW5jdGlvbiBzZWxlY3RNYW55KGVs
ZW1lbnQpIHsKKysgICAgdmFyIHZhbHVlcywgbGVuZ3RoID0gZWxlbWVudC5sZW5ndGg7CisrICAg
IGlmICghbGVuZ3RoKSByZXR1cm4gbnVsbDsKKysKKysgICAgZm9yICh2YXIgaSA9IDAsIHZhbHVl
cyA9IFtdOyBpIDwgbGVuZ3RoOyBpKyspIHsKKysgICAgICB2YXIgb3B0ID0gZWxlbWVudC5vcHRp
b25zW2ldOworKyAgICAgIGlmIChvcHQuc2VsZWN0ZWQpIHZhbHVlcy5wdXNoKG9wdGlvblZhbHVl
KG9wdCkpOworKyAgICB9CisrICAgIHJldHVybiB2YWx1ZXM7CisrICB9CisrCisrICBmdW5jdGlv
biBvcHRpb25WYWx1ZShvcHQpIHsKKysgICAgcmV0dXJuIEVsZW1lbnQuaGFzQXR0cmlidXRlKG9w
dCwgJ3ZhbHVlJykgPyBvcHQudmFsdWUgOiBvcHQudGV4dDsKKysgIH0KKysKKysgIHJldHVybiB7
CisrICAgIGlucHV0OiAgICAgICAgIGlucHV0LAorKyAgICBpbnB1dFNlbGVjdG9yOiBpbnB1dFNl
bGVjdG9yLAorKyAgICB0ZXh0YXJlYTogICAgICB2YWx1ZVNlbGVjdG9yLAorKyAgICBzZWxlY3Q6
ICAgICAgICBzZWxlY3QsCisrICAgIHNlbGVjdE9uZTogICAgIHNlbGVjdE9uZSwKKysgICAgc2Vs
ZWN0TWFueTogICAgc2VsZWN0TWFueSwKKysgICAgb3B0aW9uVmFsdWU6ICAgb3B0aW9uVmFsdWUs
CisrICAgIGJ1dHRvbjogICAgICAgIHZhbHVlU2VsZWN0b3IKKysgIH07CisrfSkoKTsKKysKKysv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysKKytBYnN0cmFjdC5UaW1lZE9ic2VydmVyID0gQ2xh
c3MuY3JlYXRlKFBlcmlvZGljYWxFeGVjdXRlciwgeworKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24o
JHN1cGVyLCBlbGVtZW50LCBmcmVxdWVuY3ksIGNhbGxiYWNrKSB7CisrICAgICRzdXBlcihjYWxs
YmFjaywgZnJlcXVlbmN5KTsKKysgICAgdGhpcy5lbGVtZW50ICAgPSAkKGVsZW1lbnQpOworKyAg
ICB0aGlzLmxhc3RWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTsKKysgIH0sCisrCisrICBleGVjdXRl
OiBmdW5jdGlvbigpIHsKKysgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOworKyAgICBp
ZiAoT2JqZWN0LmlzU3RyaW5nKHRoaXMubGFzdFZhbHVlKSAmJiBPYmplY3QuaXNTdHJpbmcodmFs
dWUpID8KKysgICAgICAgIHRoaXMubGFzdFZhbHVlICE9IHZhbHVlIDogU3RyaW5nKHRoaXMubGFz
dFZhbHVlKSAhPSBTdHJpbmcodmFsdWUpKSB7CisrICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmVs
ZW1lbnQsIHZhbHVlKTsKKysgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHZhbHVlOworKyAgICB9Cisr
ICB9CisrfSk7CisrCisrRm9ybS5FbGVtZW50Lk9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKEFic3Ry
YWN0LlRpbWVkT2JzZXJ2ZXIsIHsKKysgIGdldFZhbHVlOiBmdW5jdGlvbigpIHsKKysgICAgcmV0
dXJuIEZvcm0uRWxlbWVudC5nZXRWYWx1ZSh0aGlzLmVsZW1lbnQpOworKyAgfQorK30pOworKwor
K0Zvcm0uT2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoQWJzdHJhY3QuVGltZWRPYnNlcnZlciwgewor
KyAgZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgeworKyAgICByZXR1cm4gRm9ybS5zZXJpYWxpemUodGhp
cy5lbGVtZW50KTsKKysgIH0KKyt9KTsKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKytB
YnN0cmFjdC5FdmVudE9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKHsKKysgIGluaXRpYWxpemU6IGZ1
bmN0aW9uKGVsZW1lbnQsIGNhbGxiYWNrKSB7CisrICAgIHRoaXMuZWxlbWVudCAgPSAkKGVsZW1l
bnQpOworKyAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CisrCisrICAgIHRoaXMubGFzdFZh
bHVlID0gdGhpcy5nZXRWYWx1ZSgpOworKyAgICBpZiAodGhpcy5lbGVtZW50LnRhZ05hbWUudG9M
b3dlckNhc2UoKSA9PSAnZm9ybScpCisrICAgICAgdGhpcy5yZWdpc3RlckZvcm1DYWxsYmFja3Mo
KTsKKysgICAgZWxzZQorKyAgICAgIHRoaXMucmVnaXN0ZXJDYWxsYmFjayh0aGlzLmVsZW1lbnQp
OworKyAgfSwKKysKKysgIG9uRWxlbWVudEV2ZW50OiBmdW5jdGlvbigpIHsKKysgICAgdmFyIHZh
bHVlID0gdGhpcy5nZXRWYWx1ZSgpOworKyAgICBpZiAodGhpcy5sYXN0VmFsdWUgIT0gdmFsdWUp
IHsKKysgICAgICB0aGlzLmNhbGxiYWNrKHRoaXMuZWxlbWVudCwgdmFsdWUpOworKyAgICAgIHRo
aXMubGFzdFZhbHVlID0gdmFsdWU7CisrICAgIH0KKysgIH0sCisrCisrICByZWdpc3RlckZvcm1D
YWxsYmFja3M6IGZ1bmN0aW9uKCkgeworKyAgICBGb3JtLmdldEVsZW1lbnRzKHRoaXMuZWxlbWVu
dCkuZWFjaCh0aGlzLnJlZ2lzdGVyQ2FsbGJhY2ssIHRoaXMpOworKyAgfSwKKysKKysgIHJlZ2lz
dGVyQ2FsbGJhY2s6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgaWYgKGVsZW1lbnQudHlwZSkg
eworKyAgICAgIHN3aXRjaCAoZWxlbWVudC50eXBlLnRvTG93ZXJDYXNlKCkpIHsKKysgICAgICAg
IGNhc2UgJ2NoZWNrYm94JzoKKysgICAgICAgIGNhc2UgJ3JhZGlvJzoKKysgICAgICAgICAgRXZl
bnQub2JzZXJ2ZShlbGVtZW50LCAnY2xpY2snLCB0aGlzLm9uRWxlbWVudEV2ZW50LmJpbmQodGhp
cykpOworKyAgICAgICAgICBicmVhazsKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgIEV2
ZW50Lm9ic2VydmUoZWxlbWVudCwgJ2NoYW5nZScsIHRoaXMub25FbGVtZW50RXZlbnQuYmluZCh0
aGlzKSk7CisrICAgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgfQorKyAgfQorK30pOwor
KworK0Zvcm0uRWxlbWVudC5FdmVudE9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKEFic3RyYWN0LkV2
ZW50T2JzZXJ2ZXIsIHsKKysgIGdldFZhbHVlOiBmdW5jdGlvbigpIHsKKysgICAgcmV0dXJuIEZv
cm0uRWxlbWVudC5nZXRWYWx1ZSh0aGlzLmVsZW1lbnQpOworKyAgfQorK30pOworKworK0Zvcm0u
RXZlbnRPYnNlcnZlciA9IENsYXNzLmNyZWF0ZShBYnN0cmFjdC5FdmVudE9ic2VydmVyLCB7Cisr
ICBnZXRWYWx1ZTogZnVuY3Rpb24oKSB7CisrICAgIHJldHVybiBGb3JtLnNlcmlhbGl6ZSh0aGlz
LmVsZW1lbnQpOworKyAgfQorK30pOworKyhmdW5jdGlvbigpIHsKKysKKysgIHZhciBFdmVudCA9
IHsKKysgICAgS0VZX0JBQ0tTUEFDRTogOCwKKysgICAgS0VZX1RBQjogICAgICAgOSwKKysgICAg
S0VZX1JFVFVSTjogICAxMywKKysgICAgS0VZX0VTQzogICAgICAyNywKKysgICAgS0VZX0xFRlQ6
ICAgICAzNywKKysgICAgS0VZX1VQOiAgICAgICAzOCwKKysgICAgS0VZX1JJR0hUOiAgICAzOSwK
KysgICAgS0VZX0RPV046ICAgICA0MCwKKysgICAgS0VZX0RFTEVURTogICA0NiwKKysgICAgS0VZ
X0hPTUU6ICAgICAzNiwKKysgICAgS0VZX0VORDogICAgICAzNSwKKysgICAgS0VZX1BBR0VVUDog
ICAzMywKKysgICAgS0VZX1BBR0VET1dOOiAzNCwKKysgICAgS0VZX0lOU0VSVDogICA0NSwKKysK
KysgICAgY2FjaGU6IHt9CisrICB9OworKworKyAgdmFyIGRvY0VsID0gZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50OworKyAgdmFyIE1PVVNFRU5URVJfTU9VU0VMRUFWRV9FVkVOVFNfU1VQUE9SVEVE
ID0gJ29ubW91c2VlbnRlcicgaW4gZG9jRWwKKysgICAgJiYgJ29ubW91c2VsZWF2ZScgaW4gZG9j
RWw7CisrCisrCisrCisrICB2YXIgaXNJRUxlZ2FjeUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsg
cmV0dXJuIGZhbHNlOyB9OworKworKyAgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkgeworKyAgICBp
ZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHsKKysgICAgICBpc0lFTGVnYWN5RXZlbnQgPSBm
dW5jdGlvbihldmVudCkgeworKyAgICAgICAgcmV0dXJuICEoZXZlbnQgaW5zdGFuY2VvZiB3aW5k
b3cuRXZlbnQpOworKyAgICAgIH07CisrICAgIH0gZWxzZSB7CisrICAgICAgaXNJRUxlZ2FjeUV2
ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsgcmV0dXJuIHRydWU7IH07CisrICAgIH0KKysgIH0KKysK
KysgIHZhciBfaXNCdXR0b247CisrCisrICBmdW5jdGlvbiBfaXNCdXR0b25Gb3JET01FdmVudHMo
ZXZlbnQsIGNvZGUpIHsKKysgICAgcmV0dXJuIGV2ZW50LndoaWNoID8gKGV2ZW50LndoaWNoID09
PSBjb2RlICsgMSkgOiAoZXZlbnQuYnV0dG9uID09PSBjb2RlKTsKKysgIH0KKysKKysgIHZhciBs
ZWdhY3lCdXR0b25NYXAgPSB7IDA6IDEsIDE6IDQsIDI6IDIgfTsKKysgIGZ1bmN0aW9uIF9pc0J1
dHRvbkZvckxlZ2FjeUV2ZW50cyhldmVudCwgY29kZSkgeworKyAgICByZXR1cm4gZXZlbnQuYnV0
dG9uID09PSBsZWdhY3lCdXR0b25NYXBbY29kZV07CisrICB9CisrCisrICBmdW5jdGlvbiBfaXNC
dXR0b25Gb3JXZWJLaXQoZXZlbnQsIGNvZGUpIHsKKysgICAgc3dpdGNoIChjb2RlKSB7CisrICAg
ICAgY2FzZSAwOiByZXR1cm4gZXZlbnQud2hpY2ggPT0gMSAmJiAhZXZlbnQubWV0YUtleTsKKysg
ICAgICBjYXNlIDE6IHJldHVybiBldmVudC53aGljaCA9PSAyIHx8IChldmVudC53aGljaCA9PSAx
ICYmIGV2ZW50Lm1ldGFLZXkpOworKyAgICAgIGNhc2UgMjogcmV0dXJuIGV2ZW50LndoaWNoID09
IDM7CisrICAgICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlOworKyAgICB9CisrICB9CisrCisrICBp
ZiAod2luZG93LmF0dGFjaEV2ZW50KSB7CisrICAgIGlmICghd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIpIHsKKysgICAgICBfaXNCdXR0b24gPSBfaXNCdXR0b25Gb3JMZWdhY3lFdmVudHM7CisrICAg
IH0gZWxzZSB7CisrICAgICAgX2lzQnV0dG9uID0gZnVuY3Rpb24oZXZlbnQsIGNvZGUpIHsKKysg
ICAgICAgIHJldHVybiBpc0lFTGVnYWN5RXZlbnQoZXZlbnQpID8gX2lzQnV0dG9uRm9yTGVnYWN5
RXZlbnRzKGV2ZW50LCBjb2RlKSA6CisrICAgICAgICAgX2lzQnV0dG9uRm9yRE9NRXZlbnRzKGV2
ZW50LCBjb2RlKTsKKysgICAgICB9CisrICAgIH0KKysgIH0gZWxzZSBpZiAoUHJvdG90eXBlLkJy
b3dzZXIuV2ViS2l0KSB7CisrICAgIF9pc0J1dHRvbiA9IF9pc0J1dHRvbkZvcldlYktpdDsKKysg
IH0gZWxzZSB7CisrICAgIF9pc0J1dHRvbiA9IF9pc0J1dHRvbkZvckRPTUV2ZW50czsKKysgIH0K
KysKKysgIGZ1bmN0aW9uIGlzTGVmdENsaWNrKGV2ZW50KSAgIHsgcmV0dXJuIF9pc0J1dHRvbihl
dmVudCwgMCkgfQorKworKyAgZnVuY3Rpb24gaXNNaWRkbGVDbGljayhldmVudCkgeyByZXR1cm4g
X2lzQnV0dG9uKGV2ZW50LCAxKSB9CisrCisrICBmdW5jdGlvbiBpc1JpZ2h0Q2xpY2soZXZlbnQp
ICB7IHJldHVybiBfaXNCdXR0b24oZXZlbnQsIDIpIH0KKysKKysgIGZ1bmN0aW9uIGVsZW1lbnQo
ZXZlbnQpIHsKKysgICAgZXZlbnQgPSBFdmVudC5leHRlbmQoZXZlbnQpOworKworKyAgICB2YXIg
bm9kZSA9IGV2ZW50LnRhcmdldCwgdHlwZSA9IGV2ZW50LnR5cGUsCisrICAgICBjdXJyZW50VGFy
Z2V0ID0gZXZlbnQuY3VycmVudFRhcmdldDsKKysKKysgICAgaWYgKGN1cnJlbnRUYXJnZXQgJiYg
Y3VycmVudFRhcmdldC50YWdOYW1lKSB7CisrICAgICAgaWYgKHR5cGUgPT09ICdsb2FkJyB8fCB0
eXBlID09PSAnZXJyb3InIHx8CisrICAgICAgICAodHlwZSA9PT0gJ2NsaWNrJyAmJiBjdXJyZW50
VGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JworKyAgICAgICAgICAmJiBj
dXJyZW50VGFyZ2V0LnR5cGUgPT09ICdyYWRpbycpKQorKyAgICAgICAgICAgIG5vZGUgPSBjdXJy
ZW50VGFyZ2V0OworKyAgICB9CisrCisrICAgIGlmIChub2RlLm5vZGVUeXBlID09IE5vZGUuVEVY
VF9OT0RFKQorKyAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7CisrCisrICAgIHJldHVybiBF
bGVtZW50LmV4dGVuZChub2RlKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGZpbmRFbGVtZW50KGV2
ZW50LCBleHByZXNzaW9uKSB7CisrICAgIHZhciBlbGVtZW50ID0gRXZlbnQuZWxlbWVudChldmVu
dCk7CisrCisrICAgIGlmICghZXhwcmVzc2lvbikgcmV0dXJuIGVsZW1lbnQ7CisrICAgIHdoaWxl
IChlbGVtZW50KSB7CisrICAgICAgaWYgKE9iamVjdC5pc0VsZW1lbnQoZWxlbWVudCkgJiYgUHJv
dG90eXBlLlNlbGVjdG9yLm1hdGNoKGVsZW1lbnQsIGV4cHJlc3Npb24pKSB7CisrICAgICAgICBy
ZXR1cm4gRWxlbWVudC5leHRlbmQoZWxlbWVudCk7CisrICAgICAgfQorKyAgICAgIGVsZW1lbnQg
PSBlbGVtZW50LnBhcmVudE5vZGU7CisrICAgIH0KKysgIH0KKysKKysgIGZ1bmN0aW9uIHBvaW50
ZXIoZXZlbnQpIHsKKysgICAgcmV0dXJuIHsgeDogcG9pbnRlclgoZXZlbnQpLCB5OiBwb2ludGVy
WShldmVudCkgfTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHBvaW50ZXJYKGV2ZW50KSB7CisrICAg
IHZhciBkb2NFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAorKyAgICAgYm9keSA9
IGRvY3VtZW50LmJvZHkgfHwgeyBzY3JvbGxMZWZ0OiAwIH07CisrCisrICAgIHJldHVybiBldmVu
dC5wYWdlWCB8fCAoZXZlbnQuY2xpZW50WCArCisrICAgICAgKGRvY0VsZW1lbnQuc2Nyb2xsTGVm
dCB8fCBib2R5LnNjcm9sbExlZnQpIC0KKysgICAgICAoZG9jRWxlbWVudC5jbGllbnRMZWZ0IHx8
IDApKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHBvaW50ZXJZKGV2ZW50KSB7CisrICAgIHZhciBk
b2NFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAorKyAgICAgYm9keSA9IGRvY3Vt
ZW50LmJvZHkgfHwgeyBzY3JvbGxUb3A6IDAgfTsKKysKKysgICAgcmV0dXJuICBldmVudC5wYWdl
WSB8fCAoZXZlbnQuY2xpZW50WSArCisrICAgICAgIChkb2NFbGVtZW50LnNjcm9sbFRvcCB8fCBi
b2R5LnNjcm9sbFRvcCkgLQorKyAgICAgICAoZG9jRWxlbWVudC5jbGllbnRUb3AgfHwgMCkpOwor
KyAgfQorKworKworKyAgZnVuY3Rpb24gc3RvcChldmVudCkgeworKyAgICBFdmVudC5leHRlbmQo
ZXZlbnQpOworKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworKyAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKKysKKysgICAgZXZlbnQuc3RvcHBlZCA9IHRydWU7CisrICB9CisrCisrCisr
ICBFdmVudC5NZXRob2RzID0geworKyAgICBpc0xlZnRDbGljazogICBpc0xlZnRDbGljaywKKysg
ICAgaXNNaWRkbGVDbGljazogaXNNaWRkbGVDbGljaywKKysgICAgaXNSaWdodENsaWNrOiAgaXNS
aWdodENsaWNrLAorKworKyAgICBlbGVtZW50OiAgICAgZWxlbWVudCwKKysgICAgZmluZEVsZW1l
bnQ6IGZpbmRFbGVtZW50LAorKworKyAgICBwb2ludGVyOiAgcG9pbnRlciwKKysgICAgcG9pbnRl
clg6IHBvaW50ZXJYLAorKyAgICBwb2ludGVyWTogcG9pbnRlclksCisrCisrICAgIHN0b3A6IHN0
b3AKKysgIH07CisrCisrICB2YXIgbWV0aG9kcyA9IE9iamVjdC5rZXlzKEV2ZW50Lk1ldGhvZHMp
LmluamVjdCh7IH0sIGZ1bmN0aW9uKG0sIG5hbWUpIHsKKysgICAgbVtuYW1lXSA9IEV2ZW50Lk1l
dGhvZHNbbmFtZV0ubWV0aG9kaXplKCk7CisrICAgIHJldHVybiBtOworKyAgfSk7CisrCisrICBp
ZiAod2luZG93LmF0dGFjaEV2ZW50KSB7CisrICAgIGZ1bmN0aW9uIF9yZWxhdGVkVGFyZ2V0KGV2
ZW50KSB7CisrICAgICAgdmFyIGVsZW1lbnQ7CisrICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7
CisrICAgICAgICBjYXNlICdtb3VzZW92ZXInOgorKyAgICAgICAgY2FzZSAnbW91c2VlbnRlcic6
CisrICAgICAgICAgIGVsZW1lbnQgPSBldmVudC5mcm9tRWxlbWVudDsKKysgICAgICAgICAgYnJl
YWs7CisrICAgICAgICBjYXNlICdtb3VzZW91dCc6CisrICAgICAgICBjYXNlICdtb3VzZWxlYXZl
JzoKKysgICAgICAgICAgZWxlbWVudCA9IGV2ZW50LnRvRWxlbWVudDsKKysgICAgICAgICAgYnJl
YWs7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICByZXR1cm4gbnVsbDsKKysgICAgICB9
CisrICAgICAgcmV0dXJuIEVsZW1lbnQuZXh0ZW5kKGVsZW1lbnQpOworKyAgICB9CisrCisrICAg
IHZhciBhZGRpdGlvbmFsTWV0aG9kcyA9IHsKKysgICAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0
aW9uKCkgeyB0aGlzLmNhbmNlbEJ1YmJsZSA9IHRydWUgfSwKKysgICAgICBwcmV2ZW50RGVmYXVs
dDogIGZ1bmN0aW9uKCkgeyB0aGlzLnJldHVyblZhbHVlID0gZmFsc2UgfSwKKysgICAgICBpbnNw
ZWN0OiBmdW5jdGlvbigpIHsgcmV0dXJuICdbb2JqZWN0IEV2ZW50XScgfQorKyAgICB9OworKwor
KyAgICBFdmVudC5leHRlbmQgPSBmdW5jdGlvbihldmVudCwgZWxlbWVudCkgeworKyAgICAgIGlm
ICghZXZlbnQpIHJldHVybiBmYWxzZTsKKysKKysgICAgICBpZiAoIWlzSUVMZWdhY3lFdmVudChl
dmVudCkpIHJldHVybiBldmVudDsKKysKKysgICAgICBpZiAoZXZlbnQuX2V4dGVuZGVkQnlQcm90
b3R5cGUpIHJldHVybiBldmVudDsKKysgICAgICBldmVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSA9
IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOworKworKyAgICAgIHZhciBwb2ludGVyID0gRXZlbnQu
cG9pbnRlcihldmVudCk7CisrCisrICAgICAgT2JqZWN0LmV4dGVuZChldmVudCwgeworKyAgICAg
ICAgdGFyZ2V0OiBldmVudC5zcmNFbGVtZW50IHx8IGVsZW1lbnQsCisrICAgICAgICByZWxhdGVk
VGFyZ2V0OiBfcmVsYXRlZFRhcmdldChldmVudCksCisrICAgICAgICBwYWdlWDogIHBvaW50ZXIu
eCwKKysgICAgICAgIHBhZ2VZOiAgcG9pbnRlci55CisrICAgICAgfSk7CisrCisrICAgICAgT2Jq
ZWN0LmV4dGVuZChldmVudCwgbWV0aG9kcyk7CisrICAgICAgT2JqZWN0LmV4dGVuZChldmVudCwg
YWRkaXRpb25hbE1ldGhvZHMpOworKworKyAgICAgIHJldHVybiBldmVudDsKKysgICAgfTsKKysg
IH0gZWxzZSB7CisrICAgIEV2ZW50LmV4dGVuZCA9IFByb3RvdHlwZS5LOworKyAgfQorKworKyAg
aWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7CisrICAgIEV2ZW50LnByb3RvdHlwZSA9IHdp
bmRvdy5FdmVudC5wcm90b3R5cGUgfHwgZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMn
KS5fX3Byb3RvX187CisrICAgIE9iamVjdC5leHRlbmQoRXZlbnQucHJvdG90eXBlLCBtZXRob2Rz
KTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIF9jcmVhdGVSZXNwb25kZXIoZWxlbWVudCwgZXZlbnRO
YW1lLCBoYW5kbGVyKSB7CisrICAgIHZhciByZWdpc3RyeSA9IEVsZW1lbnQucmV0cmlldmUoZWxl
bWVudCwgJ3Byb3RvdHlwZV9ldmVudF9yZWdpc3RyeScpOworKworKyAgICBpZiAoT2JqZWN0Lmlz
VW5kZWZpbmVkKHJlZ2lzdHJ5KSkgeworKyAgICAgIENBQ0hFLnB1c2goZWxlbWVudCk7CisrICAg
ICAgcmVnaXN0cnkgPSBFbGVtZW50LnJldHJpZXZlKGVsZW1lbnQsICdwcm90b3R5cGVfZXZlbnRf
cmVnaXN0cnknLCAkSCgpKTsKKysgICAgfQorKworKyAgICB2YXIgcmVzcG9uZGVyc0ZvckV2ZW50
ID0gcmVnaXN0cnkuZ2V0KGV2ZW50TmFtZSk7CisrICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQo
cmVzcG9uZGVyc0ZvckV2ZW50KSkgeworKyAgICAgIHJlc3BvbmRlcnNGb3JFdmVudCA9IFtdOwor
KyAgICAgIHJlZ2lzdHJ5LnNldChldmVudE5hbWUsIHJlc3BvbmRlcnNGb3JFdmVudCk7CisrICAg
IH0KKysKKysgICAgaWYgKHJlc3BvbmRlcnNGb3JFdmVudC5wbHVjaygnaGFuZGxlcicpLmluY2x1
ZGUoaGFuZGxlcikpIHJldHVybiBmYWxzZTsKKysKKysgICAgdmFyIHJlc3BvbmRlcjsKKysgICAg
aWYgKGV2ZW50TmFtZS5pbmNsdWRlKCI6IikpIHsKKysgICAgICByZXNwb25kZXIgPSBmdW5jdGlv
bihldmVudCkgeworKyAgICAgICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZChldmVudC5ldmVudE5h
bWUpKQorKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisrCisrICAgICAgICBpZiAoZXZlbnQuZXZl
bnROYW1lICE9PSBldmVudE5hbWUpCisrICAgICAgICAgIHJldHVybiBmYWxzZTsKKysKKysgICAg
ICAgIEV2ZW50LmV4dGVuZChldmVudCwgZWxlbWVudCk7CisrICAgICAgICBoYW5kbGVyLmNhbGwo
ZWxlbWVudCwgZXZlbnQpOworKyAgICAgIH07CisrICAgIH0gZWxzZSB7CisrICAgICAgaWYgKCFN
T1VTRUVOVEVSX01PVVNFTEVBVkVfRVZFTlRTX1NVUFBPUlRFRCAmJgorKyAgICAgICAoZXZlbnRO
YW1lID09PSAibW91c2VlbnRlciIgfHwgZXZlbnROYW1lID09PSAibW91c2VsZWF2ZSIpKSB7Cisr
ICAgICAgICBpZiAoZXZlbnROYW1lID09PSAibW91c2VlbnRlciIgfHwgZXZlbnROYW1lID09PSAi
bW91c2VsZWF2ZSIpIHsKKysgICAgICAgICAgcmVzcG9uZGVyID0gZnVuY3Rpb24oZXZlbnQpIHsK
KysgICAgICAgICAgICBFdmVudC5leHRlbmQoZXZlbnQsIGVsZW1lbnQpOworKworKyAgICAgICAg
ICAgIHZhciBwYXJlbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0OworKyAgICAgICAgICAgIHdoaWxl
IChwYXJlbnQgJiYgcGFyZW50ICE9PSBlbGVtZW50KSB7CisrICAgICAgICAgICAgICB0cnkgeyBw
YXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTsgfQorKyAgICAgICAgICAgICAgY2F0Y2goZSkgeyBw
YXJlbnQgPSBlbGVtZW50OyB9CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGlmIChw
YXJlbnQgPT09IGVsZW1lbnQpIHJldHVybjsKKysKKysgICAgICAgICAgICBoYW5kbGVyLmNhbGwo
ZWxlbWVudCwgZXZlbnQpOworKyAgICAgICAgICB9OworKyAgICAgICAgfQorKyAgICAgIH0gZWxz
ZSB7CisrICAgICAgICByZXNwb25kZXIgPSBmdW5jdGlvbihldmVudCkgeworKyAgICAgICAgICBF
dmVudC5leHRlbmQoZXZlbnQsIGVsZW1lbnQpOworKyAgICAgICAgICBoYW5kbGVyLmNhbGwoZWxl
bWVudCwgZXZlbnQpOworKyAgICAgICAgfTsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgcmVz
cG9uZGVyLmhhbmRsZXIgPSBoYW5kbGVyOworKyAgICByZXNwb25kZXJzRm9yRXZlbnQucHVzaChy
ZXNwb25kZXIpOworKyAgICByZXR1cm4gcmVzcG9uZGVyOworKyAgfQorKworKyAgZnVuY3Rpb24g
X2Rlc3Ryb3lDYWNoZSgpIHsKKysgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IENBQ0hFLmxl
bmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisrICAgICAgRXZlbnQuc3RvcE9ic2VydmluZyhDQUNI
RVtpXSk7CisrICAgICAgQ0FDSEVbaV0gPSBudWxsOworKyAgICB9CisrICB9CisrCisrICB2YXIg
Q0FDSEUgPSBbXTsKKysKKysgIGlmIChQcm90b3R5cGUuQnJvd3Nlci5JRSkKKysgICAgd2luZG93
LmF0dGFjaEV2ZW50KCdvbnVubG9hZCcsIF9kZXN0cm95Q2FjaGUpOworKworKyAgaWYgKFByb3Rv
dHlwZS5Ccm93c2VyLldlYktpdCkKKysgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9h
ZCcsIFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uLCBmYWxzZSk7CisrCisrCisrICB2YXIgX2dldERP
TUV2ZW50TmFtZSA9IFByb3RvdHlwZS5LLAorKyAgICAgIHRyYW5zbGF0aW9ucyA9IHsgbW91c2Vl
bnRlcjogIm1vdXNlb3ZlciIsIG1vdXNlbGVhdmU6ICJtb3VzZW91dCIgfTsKKysKKysgIGlmICgh
TU9VU0VFTlRFUl9NT1VTRUxFQVZFX0VWRU5UU19TVVBQT1JURUQpIHsKKysgICAgX2dldERPTUV2
ZW50TmFtZSA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkgeworKyAgICAgIHJldHVybiAodHJhbnNsYXRp
b25zW2V2ZW50TmFtZV0gfHwgZXZlbnROYW1lKTsKKysgICAgfTsKKysgIH0KKysKKysgIGZ1bmN0
aW9uIG9ic2VydmUoZWxlbWVudCwgZXZlbnROYW1lLCBoYW5kbGVyKSB7CisrICAgIGVsZW1lbnQg
PSAkKGVsZW1lbnQpOworKworKyAgICB2YXIgcmVzcG9uZGVyID0gX2NyZWF0ZVJlc3BvbmRlcihl
bGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpOworKworKyAgICBpZiAoIXJlc3BvbmRlcikgcmV0
dXJuIGVsZW1lbnQ7CisrCisrICAgIGlmIChldmVudE5hbWUuaW5jbHVkZSgnOicpKSB7CisrICAg
ICAgaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikKKysgICAgICAgIGVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigiZGF0YWF2YWlsYWJsZSIsIHJlc3BvbmRlciwgZmFsc2UpOworKyAgICAgIGVs
c2UgeworKyAgICAgICAgZWxlbWVudC5hdHRhY2hFdmVudCgib25kYXRhYXZhaWxhYmxlIiwgcmVz
cG9uZGVyKTsKKysgICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoIm9ubG9zZWNhcHR1cmUiLCBy
ZXNwb25kZXIpOworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICB2YXIgYWN0dWFsRXZl
bnROYW1lID0gX2dldERPTUV2ZW50TmFtZShldmVudE5hbWUpOworKworKyAgICAgIGlmIChlbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIpCisrICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
YWN0dWFsRXZlbnROYW1lLCByZXNwb25kZXIsIGZhbHNlKTsKKysgICAgICBlbHNlCisrICAgICAg
ICBlbGVtZW50LmF0dGFjaEV2ZW50KCJvbiIgKyBhY3R1YWxFdmVudE5hbWUsIHJlc3BvbmRlcik7
CisrICAgIH0KKysKKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9CisrCisrICBmdW5jdGlvbiBz
dG9wT2JzZXJ2aW5nKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcikgeworKyAgICBlbGVtZW50
ID0gJChlbGVtZW50KTsKKysKKysgICAgdmFyIHJlZ2lzdHJ5ID0gRWxlbWVudC5yZXRyaWV2ZShl
bGVtZW50LCAncHJvdG90eXBlX2V2ZW50X3JlZ2lzdHJ5Jyk7CisrICAgIGlmICghcmVnaXN0cnkp
IHJldHVybiBlbGVtZW50OworKworKyAgICBpZiAoIWV2ZW50TmFtZSkgeworKyAgICAgIHJlZ2lz
dHJ5LmVhY2goIGZ1bmN0aW9uKHBhaXIpIHsKKysgICAgICAgIHZhciBldmVudE5hbWUgPSBwYWly
LmtleTsKKysgICAgICAgIHN0b3BPYnNlcnZpbmcoZWxlbWVudCwgZXZlbnROYW1lKTsKKysgICAg
ICB9KTsKKysgICAgICByZXR1cm4gZWxlbWVudDsKKysgICAgfQorKworKyAgICB2YXIgcmVzcG9u
ZGVycyA9IHJlZ2lzdHJ5LmdldChldmVudE5hbWUpOworKyAgICBpZiAoIXJlc3BvbmRlcnMpIHJl
dHVybiBlbGVtZW50OworKworKyAgICBpZiAoIWhhbmRsZXIpIHsKKysgICAgICByZXNwb25kZXJz
LmVhY2goZnVuY3Rpb24ocikgeworKyAgICAgICAgc3RvcE9ic2VydmluZyhlbGVtZW50LCBldmVu
dE5hbWUsIHIuaGFuZGxlcik7CisrICAgICAgfSk7CisrICAgICAgcmV0dXJuIGVsZW1lbnQ7Cisr
ICAgIH0KKysKKysgICAgdmFyIGkgPSByZXNwb25kZXJzLmxlbmd0aCwgcmVzcG9uZGVyOworKyAg
ICB3aGlsZSAoaS0tKSB7CisrICAgICAgaWYgKHJlc3BvbmRlcnNbaV0uaGFuZGxlciA9PT0gaGFu
ZGxlcikgeworKyAgICAgICAgcmVzcG9uZGVyID0gcmVzcG9uZGVyc1tpXTsKKysgICAgICAgIGJy
ZWFrOworKyAgICAgIH0KKysgICAgfQorKyAgICBpZiAoIXJlc3BvbmRlcikgcmV0dXJuIGVsZW1l
bnQ7CisrCisrICAgIGlmIChldmVudE5hbWUuaW5jbHVkZSgnOicpKSB7CisrICAgICAgaWYgKGVs
ZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikKKysgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRM
aXN0ZW5lcigiZGF0YWF2YWlsYWJsZSIsIHJlc3BvbmRlciwgZmFsc2UpOworKyAgICAgIGVsc2Ug
eworKyAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgib25kYXRhYXZhaWxhYmxlIiwgcmVzcG9u
ZGVyKTsKKysgICAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoIm9ubG9zZWNhcHR1cmUiLCByZXNw
b25kZXIpOworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICB2YXIgYWN0dWFsRXZlbnRO
YW1lID0gX2dldERPTUV2ZW50TmFtZShldmVudE5hbWUpOworKyAgICAgIGlmIChlbGVtZW50LnJl
bW92ZUV2ZW50TGlzdGVuZXIpCisrICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIo
YWN0dWFsRXZlbnROYW1lLCByZXNwb25kZXIsIGZhbHNlKTsKKysgICAgICBlbHNlCisrICAgICAg
ICBlbGVtZW50LmRldGFjaEV2ZW50KCdvbicgKyBhY3R1YWxFdmVudE5hbWUsIHJlc3BvbmRlcik7
CisrICAgIH0KKysKKysgICAgcmVnaXN0cnkuc2V0KGV2ZW50TmFtZSwgcmVzcG9uZGVycy53aXRo
b3V0KHJlc3BvbmRlcikpOworKworKyAgICByZXR1cm4gZWxlbWVudDsKKysgIH0KKysKKysgIGZ1
bmN0aW9uIGZpcmUoZWxlbWVudCwgZXZlbnROYW1lLCBtZW1vLCBidWJibGUpIHsKKysgICAgZWxl
bWVudCA9ICQoZWxlbWVudCk7CisrCisrICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQoYnViYmxl
KSkKKysgICAgICBidWJibGUgPSB0cnVlOworKworKyAgICBpZiAoZWxlbWVudCA9PSBkb2N1bWVu
dCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiAhZWxlbWVudC5kaXNwYXRjaEV2ZW50KQorKyAg
ICAgIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisrCisrICAgIHZhciBldmVu
dDsKKysgICAgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7CisrICAgICAgZXZlbnQgPSBkb2N1
bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpOworKyAgICAgIGV2ZW50LmluaXRFdmVudCgn
ZGF0YWF2YWlsYWJsZScsIGJ1YmJsZSwgdHJ1ZSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgZXZl
bnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpOworKyAgICAgIGV2ZW50LmV2ZW50VHlw
ZSA9IGJ1YmJsZSA/ICdvbmRhdGFhdmFpbGFibGUnIDogJ29ubG9zZWNhcHR1cmUnOworKyAgICB9
CisrCisrICAgIGV2ZW50LmV2ZW50TmFtZSA9IGV2ZW50TmFtZTsKKysgICAgZXZlbnQubWVtbyA9
IG1lbW8gfHwgeyB9OworKworKyAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpCisrICAgICAg
ZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKysgICAgZWxzZQorKyAgICAgIGVsZW1lbnQu
ZmlyZUV2ZW50KGV2ZW50LmV2ZW50VHlwZSwgZXZlbnQpOworKworKyAgICByZXR1cm4gRXZlbnQu
ZXh0ZW5kKGV2ZW50KTsKKysgIH0KKysKKysgIEV2ZW50LkhhbmRsZXIgPSBDbGFzcy5jcmVhdGUo
eworKyAgICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBldmVudE5hbWUsIHNlbGVjdG9y
LCBjYWxsYmFjaykgeworKyAgICAgIHRoaXMuZWxlbWVudCAgID0gJChlbGVtZW50KTsKKysgICAg
ICB0aGlzLmV2ZW50TmFtZSA9IGV2ZW50TmFtZTsKKysgICAgICB0aGlzLnNlbGVjdG9yICA9IHNl
bGVjdG9yOworKyAgICAgIHRoaXMuY2FsbGJhY2sgID0gY2FsbGJhY2s7CisrICAgICAgdGhpcy5o
YW5kbGVyICAgPSB0aGlzLmhhbmRsZUV2ZW50LmJpbmQodGhpcyk7CisrICAgIH0sCisrCisrICAg
IHN0YXJ0OiBmdW5jdGlvbigpIHsKKysgICAgICBFdmVudC5vYnNlcnZlKHRoaXMuZWxlbWVudCwg
dGhpcy5ldmVudE5hbWUsIHRoaXMuaGFuZGxlcik7CisrICAgICAgcmV0dXJuIHRoaXM7CisrICAg
IH0sCisrCisrICAgIHN0b3A6IGZ1bmN0aW9uKCkgeworKyAgICAgIEV2ZW50LnN0b3BPYnNlcnZp
bmcodGhpcy5lbGVtZW50LCB0aGlzLmV2ZW50TmFtZSwgdGhpcy5oYW5kbGVyKTsKKysgICAgICBy
ZXR1cm4gdGhpczsKKysgICAgfSwKKysKKysgICAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50
KSB7CisrICAgICAgdmFyIGVsZW1lbnQgPSBFdmVudC5maW5kRWxlbWVudChldmVudCwgdGhpcy5z
ZWxlY3Rvcik7CisrICAgICAgaWYgKGVsZW1lbnQpIHRoaXMuY2FsbGJhY2suY2FsbCh0aGlzLmVs
ZW1lbnQsIGV2ZW50LCBlbGVtZW50KTsKKysgICAgfQorKyAgfSk7CisrCisrICBmdW5jdGlvbiBv
bihlbGVtZW50LCBldmVudE5hbWUsIHNlbGVjdG9yLCBjYWxsYmFjaykgeworKyAgICBlbGVtZW50
ID0gJChlbGVtZW50KTsKKysgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHNlbGVjdG9yKSAmJiBP
YmplY3QuaXNVbmRlZmluZWQoY2FsbGJhY2spKSB7CisrICAgICAgY2FsbGJhY2sgPSBzZWxlY3Rv
ciwgc2VsZWN0b3IgPSBudWxsOworKyAgICB9CisrCisrICAgIHJldHVybiBuZXcgRXZlbnQuSGFu
ZGxlcihlbGVtZW50LCBldmVudE5hbWUsIHNlbGVjdG9yLCBjYWxsYmFjaykuc3RhcnQoKTsKKysg
IH0KKysKKysgIE9iamVjdC5leHRlbmQoRXZlbnQsIEV2ZW50Lk1ldGhvZHMpOworKworKyAgT2Jq
ZWN0LmV4dGVuZChFdmVudCwgeworKyAgICBmaXJlOiAgICAgICAgICBmaXJlLAorKyAgICBvYnNl
cnZlOiAgICAgICBvYnNlcnZlLAorKyAgICBzdG9wT2JzZXJ2aW5nOiBzdG9wT2JzZXJ2aW5nLAor
KyAgICBvbjogICAgICAgICAgICBvbgorKyAgfSk7CisrCisrICBFbGVtZW50LmFkZE1ldGhvZHMo
eworKyAgICBmaXJlOiAgICAgICAgICBmaXJlLAorKworKyAgICBvYnNlcnZlOiAgICAgICBvYnNl
cnZlLAorKworKyAgICBzdG9wT2JzZXJ2aW5nOiBzdG9wT2JzZXJ2aW5nLAorKworKyAgICBvbjog
ICAgICAgICAgICBvbgorKyAgfSk7CisrCisrICBPYmplY3QuZXh0ZW5kKGRvY3VtZW50LCB7Cisr
ICAgIGZpcmU6ICAgICAgICAgIGZpcmUubWV0aG9kaXplKCksCisrCisrICAgIG9ic2VydmU6ICAg
ICAgIG9ic2VydmUubWV0aG9kaXplKCksCisrCisrICAgIHN0b3BPYnNlcnZpbmc6IHN0b3BPYnNl
cnZpbmcubWV0aG9kaXplKCksCisrCisrICAgIG9uOiAgICAgICAgICAgIG9uLm1ldGhvZGl6ZSgp
LAorKworKyAgICBsb2FkZWQ6ICAgICAgICBmYWxzZQorKyAgfSk7CisrCisrICBpZiAod2luZG93
LkV2ZW50KSBPYmplY3QuZXh0ZW5kKHdpbmRvdy5FdmVudCwgRXZlbnQpOworKyAgZWxzZSB3aW5k
b3cuRXZlbnQgPSBFdmVudDsKKyt9KSgpOworKworKyhmdW5jdGlvbigpIHsKKysgIC8qIFN1cHBv
cnQgZm9yIHRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50IGlzIGJhc2VkIG9uIHdvcmsgYnkgRGFu
IFdlYmIsCisrICAgICBNYXR0aGlhcyBNaWxsZXIsIERlYW4gRWR3YXJkcywgSm9obiBSZXNpZywg
YW5kIERpZWdvIFBlcmluaS4gKi8KKysKKysgIHZhciB0aW1lcjsKKysKKysgIGZ1bmN0aW9uIGZp
cmVDb250ZW50TG9hZGVkRXZlbnQoKSB7CisrICAgIGlmIChkb2N1bWVudC5sb2FkZWQpIHJldHVy
bjsKKysgICAgaWYgKHRpbWVyKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKTsKKysgICAgZG9j
dW1lbnQubG9hZGVkID0gdHJ1ZTsKKysgICAgZG9jdW1lbnQuZmlyZSgnZG9tOmxvYWRlZCcpOwor
KyAgfQorKworKyAgZnVuY3Rpb24gY2hlY2tSZWFkeVN0YXRlKCkgeworKyAgICBpZiAoZG9jdW1l
bnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykgeworKyAgICAgIGRvY3VtZW50LnN0b3BPYnNl
cnZpbmcoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVja1JlYWR5U3RhdGUpOworKyAgICAgIGZpcmVD
b250ZW50TG9hZGVkRXZlbnQoKTsKKysgICAgfQorKyAgfQorKworKyAgZnVuY3Rpb24gcG9sbERv
U2Nyb2xsKCkgeworKyAgICB0cnkgeyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwo
J2xlZnQnKTsgfQorKyAgICBjYXRjaChlKSB7CisrICAgICAgdGltZXIgPSBwb2xsRG9TY3JvbGwu
ZGVmZXIoKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZmlyZUNvbnRlbnRMb2FkZWRF
dmVudCgpOworKyAgfQorKworKyAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKKysg
ICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZpcmVDb250
ZW50TG9hZGVkRXZlbnQsIGZhbHNlKTsKKysgIH0gZWxzZSB7CisrICAgIGRvY3VtZW50Lm9ic2Vy
dmUoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVja1JlYWR5U3RhdGUpOworKyAgICBpZiAod2luZG93
ID09IHRvcCkKKysgICAgICB0aW1lciA9IHBvbGxEb1Njcm9sbC5kZWZlcigpOworKyAgfQorKwor
KyAgRXZlbnQub2JzZXJ2ZSh3aW5kb3csICdsb2FkJywgZmlyZUNvbnRlbnRMb2FkZWRFdmVudCk7
CisrfSkoKTsKKysKKytFbGVtZW50LmFkZE1ldGhvZHMoKTsKKysKKysvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gREVQUkVDQVRFRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKysKKytIYXNoLnRvUXVlcnlTdHJpbmcgPSBPYmplY3QudG9RdWVyeVN0cmluZzsKKysK
Kyt2YXIgVG9nZ2xlID0geyBkaXNwbGF5OiBFbGVtZW50LnRvZ2dsZSB9OworKworK0VsZW1lbnQu
TWV0aG9kcy5jaGlsZE9mID0gRWxlbWVudC5NZXRob2RzLmRlc2NlbmRhbnRPZjsKKysKKyt2YXIg
SW5zZXJ0aW9uID0geworKyAgQmVmb3JlOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7Cisr
ICAgIHJldHVybiBFbGVtZW50Lmluc2VydChlbGVtZW50LCB7YmVmb3JlOmNvbnRlbnR9KTsKKysg
IH0sCisrCisrICBUb3A6IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKKysgICAgcmV0dXJu
IEVsZW1lbnQuaW5zZXJ0KGVsZW1lbnQsIHt0b3A6Y29udGVudH0pOworKyAgfSwKKysKKysgIEJv
dHRvbTogZnVuY3Rpb24oZWxlbWVudCwgY29udGVudCkgeworKyAgICByZXR1cm4gRWxlbWVudC5p
bnNlcnQoZWxlbWVudCwge2JvdHRvbTpjb250ZW50fSk7CisrICB9LAorKworKyAgQWZ0ZXI6IGZ1
bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKKysgICAgcmV0dXJuIEVsZW1lbnQuaW5zZXJ0KGVs
ZW1lbnQsIHthZnRlcjpjb250ZW50fSk7CisrICB9CisrfTsKKysKKyt2YXIgJGNvbnRpbnVlID0g
bmV3IEVycm9yKCcidGhyb3cgJGNvbnRpbnVlIiBpcyBkZXByZWNhdGVkLCB1c2UgInJldHVybiIg
aW5zdGVhZCcpOworKworK3ZhciBQb3NpdGlvbiA9IHsKKysgIGluY2x1ZGVTY3JvbGxPZmZzZXRz
OiBmYWxzZSwKKysKKysgIHByZXBhcmU6IGZ1bmN0aW9uKCkgeworKyAgICB0aGlzLmRlbHRhWCA9
ICB3aW5kb3cucGFnZVhPZmZzZXQKKysgICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50LnNjcm9sbExlZnQKKysgICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQuYm9keS5z
Y3JvbGxMZWZ0CisrICAgICAgICAgICAgICAgIHx8IDA7CisrICAgIHRoaXMuZGVsdGFZID0gIHdp
bmRvdy5wYWdlWU9mZnNldAorKyAgICAgICAgICAgICAgICB8fCBkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQuc2Nyb2xsVG9wCisrICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xs
VG9wCisrICAgICAgICAgICAgICAgIHx8IDA7CisrICB9LAorKworKyAgd2l0aGluOiBmdW5jdGlv
bihlbGVtZW50LCB4LCB5KSB7CisrICAgIGlmICh0aGlzLmluY2x1ZGVTY3JvbGxPZmZzZXRzKQor
KyAgICAgIHJldHVybiB0aGlzLndpdGhpbkluY2x1ZGluZ1Njcm9sbG9mZnNldHMoZWxlbWVudCwg
eCwgeSk7CisrICAgIHRoaXMueGNvbXAgPSB4OworKyAgICB0aGlzLnljb21wID0geTsKKysgICAg
dGhpcy5vZmZzZXQgPSBFbGVtZW50LmN1bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7CisrCisrICAg
IHJldHVybiAoeSA+PSB0aGlzLm9mZnNldFsxXSAmJgorKyAgICAgICAgICAgIHkgPCAgdGhpcy5v
ZmZzZXRbMV0gKyBlbGVtZW50Lm9mZnNldEhlaWdodCAmJgorKyAgICAgICAgICAgIHggPj0gdGhp
cy5vZmZzZXRbMF0gJiYKKysgICAgICAgICAgICB4IDwgIHRoaXMub2Zmc2V0WzBdICsgZWxlbWVu
dC5vZmZzZXRXaWR0aCk7CisrICB9LAorKworKyAgd2l0aGluSW5jbHVkaW5nU2Nyb2xsb2Zmc2V0
czogZnVuY3Rpb24oZWxlbWVudCwgeCwgeSkgeworKyAgICB2YXIgb2Zmc2V0Y2FjaGUgPSBFbGVt
ZW50LmN1bXVsYXRpdmVTY3JvbGxPZmZzZXQoZWxlbWVudCk7CisrCisrICAgIHRoaXMueGNvbXAg
PSB4ICsgb2Zmc2V0Y2FjaGVbMF0gLSB0aGlzLmRlbHRhWDsKKysgICAgdGhpcy55Y29tcCA9IHkg
KyBvZmZzZXRjYWNoZVsxXSAtIHRoaXMuZGVsdGFZOworKyAgICB0aGlzLm9mZnNldCA9IEVsZW1l
bnQuY3VtdWxhdGl2ZU9mZnNldChlbGVtZW50KTsKKysKKysgICAgcmV0dXJuICh0aGlzLnljb21w
ID49IHRoaXMub2Zmc2V0WzFdICYmCisrICAgICAgICAgICAgdGhpcy55Y29tcCA8ICB0aGlzLm9m
ZnNldFsxXSArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICYmCisrICAgICAgICAgICAgdGhpcy54Y29t
cCA+PSB0aGlzLm9mZnNldFswXSAmJgorKyAgICAgICAgICAgIHRoaXMueGNvbXAgPCAgdGhpcy5v
ZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNldFdpZHRoKTsKKysgIH0sCisrCisrICBvdmVybGFwOiBm
dW5jdGlvbihtb2RlLCBlbGVtZW50KSB7CisrICAgIGlmICghbW9kZSkgcmV0dXJuIDA7CisrICAg
IGlmIChtb2RlID09ICd2ZXJ0aWNhbCcpCisrICAgICAgcmV0dXJuICgodGhpcy5vZmZzZXRbMV0g
KyBlbGVtZW50Lm9mZnNldEhlaWdodCkgLSB0aGlzLnljb21wKSAvCisrICAgICAgICBlbGVtZW50
Lm9mZnNldEhlaWdodDsKKysgICAgaWYgKG1vZGUgPT0gJ2hvcml6b250YWwnKQorKyAgICAgIHJl
dHVybiAoKHRoaXMub2Zmc2V0WzBdICsgZWxlbWVudC5vZmZzZXRXaWR0aCkgLSB0aGlzLnhjb21w
KSAvCisrICAgICAgICBlbGVtZW50Lm9mZnNldFdpZHRoOworKyAgfSwKKysKKysKKysgIGN1bXVs
YXRpdmVPZmZzZXQ6IEVsZW1lbnQuTWV0aG9kcy5jdW11bGF0aXZlT2Zmc2V0LAorKworKyAgcG9z
aXRpb25lZE9mZnNldDogRWxlbWVudC5NZXRob2RzLnBvc2l0aW9uZWRPZmZzZXQsCisrCisrICBh
YnNvbHV0aXplOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgIFBvc2l0aW9uLnByZXBhcmUoKTsK
KysgICAgcmV0dXJuIEVsZW1lbnQuYWJzb2x1dGl6ZShlbGVtZW50KTsKKysgIH0sCisrCisrICBy
ZWxhdGl2aXplOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgIFBvc2l0aW9uLnByZXBhcmUoKTsK
KysgICAgcmV0dXJuIEVsZW1lbnQucmVsYXRpdml6ZShlbGVtZW50KTsKKysgIH0sCisrCisrICBy
ZWFsT2Zmc2V0OiBFbGVtZW50Lk1ldGhvZHMuY3VtdWxhdGl2ZVNjcm9sbE9mZnNldCwKKysKKysg
IG9mZnNldFBhcmVudDogRWxlbWVudC5NZXRob2RzLmdldE9mZnNldFBhcmVudCwKKysKKysgIHBh
Z2U6IEVsZW1lbnQuTWV0aG9kcy52aWV3cG9ydE9mZnNldCwKKysKKysgIGNsb25lOiBmdW5jdGlv
bihzb3VyY2UsIHRhcmdldCwgb3B0aW9ucykgeworKyAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7
IH07CisrICAgIHJldHVybiBFbGVtZW50LmNsb25lUG9zaXRpb24odGFyZ2V0LCBzb3VyY2UsIG9w
dGlvbnMpOworKyAgfQorK307CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisraWYgKCFk
b2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lID0gZnVuY3Rpb24oaW5zdGFuY2VNZXRob2RzKXsKKysgIGZ1bmN0aW9uIGl0ZXIobmFt
ZSkgeworKyAgICByZXR1cm4gbmFtZS5ibGFuaygpID8gbnVsbCA6ICJbY29udGFpbnMoY29uY2F0
KCcgJywgQGNsYXNzLCAnICcpLCAnICIgKyBuYW1lICsgIiAnKV0iOworKyAgfQorKworKyAgaW5z
dGFuY2VNZXRob2RzLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBQcm90b3R5cGUuQnJvd3NlckZl
YXR1cmVzLlhQYXRoID8KKysgIGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgeworKyAgICBj
bGFzc05hbWUgPSBjbGFzc05hbWUudG9TdHJpbmcoKS5zdHJpcCgpOworKyAgICB2YXIgY29uZCA9
IC9ccy8udGVzdChjbGFzc05hbWUpID8gJHcoY2xhc3NOYW1lKS5tYXAoaXRlcikuam9pbignJykg
OiBpdGVyKGNsYXNzTmFtZSk7CisrICAgIHJldHVybiBjb25kID8gZG9jdW1lbnQuX2dldEVsZW1l
bnRzQnlYUGF0aCgnLi8vKicgKyBjb25kLCBlbGVtZW50KSA6IFtdOworKyAgfSA6IGZ1bmN0aW9u
KGVsZW1lbnQsIGNsYXNzTmFtZSkgeworKyAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9TdHJp
bmcoKS5zdHJpcCgpOworKyAgICB2YXIgZWxlbWVudHMgPSBbXSwgY2xhc3NOYW1lcyA9ICgvXHMv
LnRlc3QoY2xhc3NOYW1lKSA/ICR3KGNsYXNzTmFtZSkgOiBudWxsKTsKKysgICAgaWYgKCFjbGFz
c05hbWVzICYmICFjbGFzc05hbWUpIHJldHVybiBlbGVtZW50czsKKysKKysgICAgdmFyIG5vZGVz
ID0gJChlbGVtZW50KS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpOworKyAgICBjbGFzc05hbWUg
PSAnICcgKyBjbGFzc05hbWUgKyAnICc7CisrCisrICAgIGZvciAodmFyIGkgPSAwLCBjaGlsZCwg
Y247IGNoaWxkID0gbm9kZXNbaV07IGkrKykgeworKyAgICAgIGlmIChjaGlsZC5jbGFzc05hbWUg
JiYgKGNuID0gJyAnICsgY2hpbGQuY2xhc3NOYW1lICsgJyAnKSAmJiAoY24uaW5jbHVkZShjbGFz
c05hbWUpIHx8CisrICAgICAgICAgIChjbGFzc05hbWVzICYmIGNsYXNzTmFtZXMuYWxsKGZ1bmN0
aW9uKG5hbWUpIHsKKysgICAgICAgICAgICByZXR1cm4gIW5hbWUudG9TdHJpbmcoKS5ibGFuaygp
ICYmIGNuLmluY2x1ZGUoJyAnICsgbmFtZSArICcgJyk7CisrICAgICAgICAgIH0pKSkpCisrICAg
ICAgICBlbGVtZW50cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGNoaWxkKSk7CisrICAgIH0KKysgICAg
cmV0dXJuIGVsZW1lbnRzOworKyAgfTsKKysKKysgIHJldHVybiBmdW5jdGlvbihjbGFzc05hbWUs
IHBhcmVudEVsZW1lbnQpIHsKKysgICAgcmV0dXJuICQocGFyZW50RWxlbWVudCB8fCBkb2N1bWVu
dC5ib2R5KS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7CisrICB9OworK30oRWxl
bWVudC5NZXRob2RzKTsKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKytFbGVtZW50LkNs
YXNzTmFtZXMgPSBDbGFzcy5jcmVhdGUoKTsKKytFbGVtZW50LkNsYXNzTmFtZXMucHJvdG90eXBl
ID0geworKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICB0aGlzLmVsZW1l
bnQgPSAkKGVsZW1lbnQpOworKyAgfSwKKysKKysgIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikg
eworKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KC9ccysvKS5zZWxlY3QoZnVuY3Rp
b24obmFtZSkgeworKyAgICAgIHJldHVybiBuYW1lLmxlbmd0aCA+IDA7CisrICAgIH0pLl9lYWNo
KGl0ZXJhdG9yKTsKKysgIH0sCisrCisrICBzZXQ6IGZ1bmN0aW9uKGNsYXNzTmFtZSkgeworKyAg
ICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lOworKyAgfSwKKysKKysgIGFkZDog
ZnVuY3Rpb24oY2xhc3NOYW1lVG9BZGQpIHsKKysgICAgaWYgKHRoaXMuaW5jbHVkZShjbGFzc05h
bWVUb0FkZCkpIHJldHVybjsKKysgICAgdGhpcy5zZXQoJEEodGhpcykuY29uY2F0KGNsYXNzTmFt
ZVRvQWRkKS5qb2luKCcgJykpOworKyAgfSwKKysKKysgIHJlbW92ZTogZnVuY3Rpb24oY2xhc3NO
YW1lVG9SZW1vdmUpIHsKKysgICAgaWYgKCF0aGlzLmluY2x1ZGUoY2xhc3NOYW1lVG9SZW1vdmUp
KSByZXR1cm47CisrICAgIHRoaXMuc2V0KCRBKHRoaXMpLndpdGhvdXQoY2xhc3NOYW1lVG9SZW1v
dmUpLmpvaW4oJyAnKSk7CisrICB9LAorKworKyAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgeworKyAg
ICByZXR1cm4gJEEodGhpcykuam9pbignICcpOworKyAgfQorK307CisrCisrT2JqZWN0LmV4dGVu
ZChFbGVtZW50LkNsYXNzTmFtZXMucHJvdG90eXBlLCBFbnVtZXJhYmxlKTsKKysKKysvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KKysKKysoZnVuY3Rpb24oKSB7CisrICB3aW5kb3cuU2VsZWN0b3IgPSBD
bGFzcy5jcmVhdGUoeworKyAgICBpbml0aWFsaXplOiBmdW5jdGlvbihleHByZXNzaW9uKSB7Cisr
ICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbi5zdHJpcCgpOworKyAgICB9LAorKwor
KyAgICBmaW5kRWxlbWVudHM6IGZ1bmN0aW9uKHJvb3RFbGVtZW50KSB7CisrICAgICAgcmV0dXJu
IFByb3RvdHlwZS5TZWxlY3Rvci5zZWxlY3QodGhpcy5leHByZXNzaW9uLCByb290RWxlbWVudCk7
CisrICAgIH0sCisrCisrICAgIG1hdGNoOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgcmV0
dXJuIFByb3RvdHlwZS5TZWxlY3Rvci5tYXRjaChlbGVtZW50LCB0aGlzLmV4cHJlc3Npb24pOwor
KyAgICB9LAorKworKyAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CisrICAgICAgcmV0dXJuIHRo
aXMuZXhwcmVzc2lvbjsKKysgICAgfSwKKysKKysgICAgaW5zcGVjdDogZnVuY3Rpb24oKSB7Cisr
ICAgICAgcmV0dXJuICIjPFNlbGVjdG9yOiAiICsgdGhpcy5leHByZXNzaW9uICsgIj4iOworKyAg
ICB9CisrICB9KTsKKysKKysgIE9iamVjdC5leHRlbmQoU2VsZWN0b3IsIHsKKysgICAgbWF0Y2hF
bGVtZW50czogZnVuY3Rpb24oZWxlbWVudHMsIGV4cHJlc3Npb24pIHsKKysgICAgICB2YXIgbWF0
Y2ggPSBQcm90b3R5cGUuU2VsZWN0b3IubWF0Y2gsCisrICAgICAgICAgIHJlc3VsdHMgPSBbXTsK
KysKKysgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKysgICAgICAgIHZhciBlbGVtZW50ID0gZWxlbWVudHNbaV07CisrICAg
ICAgICBpZiAobWF0Y2goZWxlbWVudCwgZXhwcmVzc2lvbikpIHsKKysgICAgICAgICAgcmVzdWx0
cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGVsZW1lbnQpKTsKKysgICAgICAgIH0KKysgICAgICB9Cisr
ICAgICAgcmV0dXJuIHJlc3VsdHM7CisrICAgIH0sCisrCisrICAgIGZpbmRFbGVtZW50OiBmdW5j
dGlvbihlbGVtZW50cywgZXhwcmVzc2lvbiwgaW5kZXgpIHsKKysgICAgICBpbmRleCA9IGluZGV4
IHx8IDA7CisrICAgICAgdmFyIG1hdGNoSW5kZXggPSAwLCBlbGVtZW50OworKyAgICAgIGZvciAo
dmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewor
KyAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRzW2ldOworKyAgICAgICAgaWYgKFByb3RvdHlwZS5T
ZWxlY3Rvci5tYXRjaChlbGVtZW50LCBleHByZXNzaW9uKSAmJiBpbmRleCA9PT0gbWF0Y2hJbmRl
eCsrKSB7CisrICAgICAgICAgIHJldHVybiBFbGVtZW50LmV4dGVuZChlbGVtZW50KTsKKysgICAg
ICAgIH0KKysgICAgICB9CisrICAgIH0sCisrCisrICAgIGZpbmRDaGlsZEVsZW1lbnRzOiBmdW5j
dGlvbihlbGVtZW50LCBleHByZXNzaW9ucykgeworKyAgICAgIHZhciBzZWxlY3RvciA9IGV4cHJl
c3Npb25zLnRvQXJyYXkoKS5qb2luKCcsICcpOworKyAgICAgIHJldHVybiBQcm90b3R5cGUuU2Vs
ZWN0b3Iuc2VsZWN0KHNlbGVjdG9yLCBlbGVtZW50IHx8IGRvY3VtZW50KTsKKysgICAgfQorKyAg
fSk7CisrfSkoKTsKK2RpZmYgLS1naXQgYS93ZWIvdGVzdHMvY3NzcXVlcnktZG9qby5odG1sIGIv
d2ViL3Rlc3RzL2Nzc3F1ZXJ5LWRvam8uaHRtbAoraW5kZXggYjI3Yzk1Yi4uNjI2ZjkyYyAxMDA2
NDQKKy0tLSBhL3dlYi90ZXN0cy9jc3NxdWVyeS1kb2pvLmh0bWwKKysrKyBiL3dlYi90ZXN0cy9j
c3NxdWVyeS1kb2pvLmh0bWwKK0BAIC0xLDcgKzEsNyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxz
Y3JpcHQgc3JjPSIuLi9odG1scnVubmVyLmpzIj48L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0
cDovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2Rvam8vMS42LjEvZG9qby9kb2pvLnhk
LmpzIj48L3NjcmlwdD4KKys8c2NyaXB0IHNyYz0iLi4vYWpheC9saWJzL2Rvam8vMS42LjEvZG9q
by9kb2pvLnhkLmpzIj48L3NjcmlwdD4KKyA8c2NyaXB0PgorIHdpbmRvdy5vbmxvYWQgPSBmdW5j
dGlvbigpeworIHN0YXJ0VGVzdCgiY3NzcXVlcnktZG9qbyIsICc1NDc3ZDJhZScpOworQEAgLTE2
OCw3ICsxNjgsNyBAQCBlbmRUZXN0KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFz
cz0iaGVhZCI+CistICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdo
dD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRo
PTcyPjwvYT4KKysgICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0
PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8vMTI3LjAuMC4xL0ljb25zL3czY19ob21lIiB3aWR0aD03
Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYgLS1n
aXQgYS93ZWIvdGVzdHMvY3NzcXVlcnktZXh0Lmh0bWwgYi93ZWIvdGVzdHMvY3NzcXVlcnktZXh0
Lmh0bWwKK2luZGV4IGFjYjM1YzEuLjY4YjQwNDIgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMvY3Nz
cXVlcnktZXh0Lmh0bWwKKysrKyBiL3dlYi90ZXN0cy9jc3NxdWVyeS1leHQuaHRtbAorQEAgLTEs
NyArMSw3IEBACisgPGh0bWw+CisgPGhlYWQ+CisgPHNjcmlwdCBzcmM9Ii4uL2h0bWxydW5uZXIu
anMiPjwvc2NyaXB0PgorLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20v
YWpheC9saWJzL2V4dC1jb3JlLzMuMS4wL2V4dC1jb3JlLmpzIj48L3NjcmlwdD4KKys8c2NyaXB0
IHNyYz0iLi4vYWpheC9saWJzL2V4dC1jb3JlLzMuMS4wL2V4dC1jb3JlLmpzIj48L3NjcmlwdD4K
KyA8c2NyaXB0PgorIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpeworIHN0YXJ0VGVzdCgiY3Nz
cXVlcnktZXh0IiwgJzViYzA1YTE3Jyk7CitAQCAtMTY4LDcgKzE2OCw3IEBAIGVuZFRlc3QoKTsK
KyA8L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2IGNsYXNzPSJoZWFkIj4KKy0gICA8cD48YSBocmVm
PSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8v
d3d3LnczLm9yZy9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorKyAgIDxwPjxhIGhyZWY9
Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly8x
MjcuMC4wLjEvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8aDEgaWQ9InRp
dGxlIj5TZWxlY3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90ZXN0cy9jc3NxdWVyeS1q
cXVlcnktMi54Lmh0bWwgYi93ZWIvdGVzdHMvY3NzcXVlcnktanF1ZXJ5LTIueC5odG1sCitpbmRl
eCA2Yjk1ZmVlLi5lMWVmNTY3IDEwMDY0NAorLS0tIGEvd2ViL3Rlc3RzL2Nzc3F1ZXJ5LWpxdWVy
eS0yLnguaHRtbAorKysrIGIvd2ViL3Rlc3RzL2Nzc3F1ZXJ5LWpxdWVyeS0yLnguaHRtbAorQEAg
LTEsNyArMSw3IEBACisgPGh0bWw+CisgPGhlYWQ+CisgPHNjcmlwdCBzcmM9Ii4uL2h0bWxydW5u
ZXIuanMiPjwvc2NyaXB0PgorLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5j
b20vYWpheC9saWJzL2pxdWVyeS8yLjAuMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KKys8c2Ny
aXB0IHNyYz0iLi4vYWpheC9saWJzL2pxdWVyeS8yLjAuMy9qcXVlcnkubWluLmpzIj48L3Njcmlw
dD4KKyA8c2NyaXB0PgorIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpeworIHN0YXJ0VGVzdCgi
Y3NzcXVlcnktanF1ZXJ5IiwgJzVkZmUxYTEyJyk7CitAQCAtMTY3LDcgKzE2Nyw3IEBAIGVuZFRl
c3QoKTsKKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2IGNsYXNzPSJoZWFkIj4KKy0gICA8cD48
YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3JjPSJo
dHRwOi8vd3d3LnczLm9yZy9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorKyAgIDxwPjxh
IGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0
dHA6Ly8xMjcuMC4wLjEvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8aDEg
aWQ9InRpdGxlIj5TZWxlY3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90ZXN0cy9jc3Nx
dWVyeS1qcXVlcnkuaHRtbCBiL3dlYi90ZXN0cy9jc3NxdWVyeS1qcXVlcnkuaHRtbAoraW5kZXgg
YTgzZWY1Yy4uZDUyN2NiNyAxMDA2NDQKKy0tLSBhL3dlYi90ZXN0cy9jc3NxdWVyeS1qcXVlcnku
aHRtbAorKysrIGIvd2ViL3Rlc3RzL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sCitAQCAtMSw3ICsxLDcg
QEAKKyA8aHRtbD4KKyA8aGVhZD4KKyA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5lci5qcyI+PC9z
Y3JpcHQ+CistPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xp
YnMvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KKys8c2NyaXB0IHNyYz0i
Li4vYWpheC9saWJzL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisgPHNj
cmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFydFRlc3QoImNzc3F1ZXJ5
LWpxdWVyeSIsICdkZTgwOGU1ZicpOworQEAgLTE2Nyw3ICsxNjcsNyBAQCBlbmRUZXN0KCk7Cisg
PC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFzcz0iaGVhZCI+CistICAgPHA+PGEgaHJlZj0i
aHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovL3d3
dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKysgICA8cD48YSBocmVmPSJo
dHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8vMTI3
LjAuMC4xL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRs
ZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYgLS1naXQgYS93ZWIvdGVzdHMvY3NzcXVlcnktbW9v
dG9vbHMuaHRtbCBiL3dlYi90ZXN0cy9jc3NxdWVyeS1tb290b29scy5odG1sCitpbmRleCA1MDA5
ZWZjLi42NzQ3MzBlIDEwMDY0NAorLS0tIGEvd2ViL3Rlc3RzL2Nzc3F1ZXJ5LW1vb3Rvb2xzLmh0
bWwKKysrKyBiL3dlYi90ZXN0cy9jc3NxdWVyeS1tb290b29scy5odG1sCitAQCAtMSw3ICsxLDcg
QEAKKyA8aHRtbD4KKyA8aGVhZD4KKyA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5lci5qcyI+PC9z
Y3JpcHQ+CistPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xp
YnMvbW9vdG9vbHMvMS40LjEvbW9vdG9vbHMteXVpLWNvbXByZXNzZWQuanMiPjwvc2NyaXB0Pgor
KzxzY3JpcHQgc3JjPSIuLi9hamF4L2xpYnMvbW9vdG9vbHMvMS40LjEvbW9vdG9vbHMteXVpLWNv
bXByZXNzZWQuanMiPjwvc2NyaXB0PgorIDxzY3JpcHQ+Cisgd2luZG93Lm9ubG9hZCA9IGZ1bmN0
aW9uKCl7Cisgc3RhcnRUZXN0KCJjc3NxdWVyeS1tb290b29scyIsICdjNWFjNjU2YicpOworQEAg
LTE2Nyw3ICsxNjcsNyBAQCBlbmRUZXN0KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBj
bGFzcz0iaGVhZCI+CistICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhl
aWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdp
ZHRoPTcyPjwvYT4KKysgICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVp
Z2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8vMTI3LjAuMC4xL0ljb25zL3czY19ob21lIiB3aWR0
aD03Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYg
LS1naXQgYS93ZWIvdGVzdHMvY3NzcXVlcnktcHJvdG90eXBlLmh0bWwgYi93ZWIvdGVzdHMvY3Nz
cXVlcnktcHJvdG90eXBlLmh0bWwKK2luZGV4IDMyNGQ0ZWQuLmUwZDg2YzkgMTAwNjQ0CistLS0g
YS93ZWIvdGVzdHMvY3NzcXVlcnktcHJvdG90eXBlLmh0bWwKKysrKyBiL3dlYi90ZXN0cy9jc3Nx
dWVyeS1wcm90b3R5cGUuaHRtbAorQEAgLTEsNyArMSw3IEBACisgPGh0bWw+CisgPGhlYWQ+Cisg
PHNjcmlwdCBzcmM9Ii4uL2h0bWxydW5uZXIuanMiPjwvc2NyaXB0PgorLTxzY3JpcHQgc3JjPSJo
dHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL3Byb3RvdHlwZS8xLjcuMC4wL3By
b3RvdHlwZS5qcyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBzcmM9Ii4uL2FqYXgvbGlicy9wcm90b3R5
cGUvMS43LjAuMC9wcm90b3R5cGUuanMiPjwvc2NyaXB0PgorIDxzY3JpcHQ+Cisgd2luZG93Lm9u
bG9hZCA9IGZ1bmN0aW9uKCl7Cisgc3RhcnRUZXN0KCJjc3NxdWVyeS1wcm90b3R5cGUiLCAnZDE1
MTE2MWYnKTsKK0BAIC0xNjcsNyArMTY3LDcgQEAgZW5kVGVzdCgpOworIDwvaGVhZD4KKyA8Ym9k
eT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMu
b3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cudzMub3JnL0ljb25z
L3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5v
cmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovLzEyNy4wLjAuMS9JY29ucy93
M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorIAorICAgIDxoMSBpZD0idGl0bGUiPlNlbGVjdG9yczwv
aDE+CisgCitkaWZmIC0tZ2l0IGEvd2ViL3Rlc3RzL2Nzc3F1ZXJ5LXl1aS5odG1sIGIvd2ViL3Rl
c3RzL2Nzc3F1ZXJ5LXl1aS5odG1sCitpbmRleCBkMzU0ZWQ3Li43MjQ1MjUxIDEwMDY0NAorLS0t
IGEvd2ViL3Rlc3RzL2Nzc3F1ZXJ5LXl1aS5odG1sCisrKysgYi93ZWIvdGVzdHMvY3NzcXVlcnkt
eXVpLmh0bWwKK0BAIC0xNzAsNyArMTcwLDcgQEAgZW5kVGVzdCgpOworIDwvaGVhZD4KKyA8Ym9k
eT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMu
b3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cudzMub3JnL0ljb25z
L3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5v
cmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovLzEyNy4wLjAuMS9JY29ucy93
M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorIAorICAgIDxoMSBpZD0idGl0bGUiPlNlbGVjdG9yczwv
aDE+CisgCitkaWZmIC0tZ2l0IGEvd2ViL3Rlc3RzL2RvbS1hdHRyLmh0bWwgYi93ZWIvdGVzdHMv
ZG9tLWF0dHIuaHRtbAoraW5kZXggZGJmMzYxYi4uNmM1Mjg3NSAxMDA2NDQKKy0tLSBhL3dlYi90
ZXN0cy9kb20tYXR0ci5odG1sCisrKysgYi93ZWIvdGVzdHMvZG9tLWF0dHIuaHRtbAorQEAgLTQ4
LDcgKzQ4LDcgQEAgZW5kVGVzdCgpOworIDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9
ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9
NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cudzMub3JnL0ljb25zL3czY19ob21lIiB3aWR0aD03
Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00
OCBhbHQ9VzNDIHNyYz0iaHR0cDovLzEyNy4wLjAuMS9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+
PC9hPgorIAorICAgIDxoMSBpZD0idGl0bGUiPlNlbGVjdG9yczwvaDE+CisgCitkaWZmIC0tZ2l0
IGEvd2ViL3Rlc3RzL2RvbS1tb2RpZnkuaHRtbCBiL3dlYi90ZXN0cy9kb20tbW9kaWZ5Lmh0bWwK
K2luZGV4IGVmNTdiNTEuLmMwMjg2MjAgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMvZG9tLW1vZGlm
eS5odG1sCisrKysgYi93ZWIvdGVzdHMvZG9tLW1vZGlmeS5odG1sCitAQCAtNzgsNyArNzgsNyBA
QCBlbmRUZXN0KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFzcz0iaGVhZCI+Cist
ICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzND
IHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKysg
ICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mg
c3JjPSJodHRwOi8vMTI3LjAuMC4xL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisgCisg
ICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYgLS1naXQgYS93ZWIvdGVz
dHMvZG9tLXF1ZXJ5Lmh0bWwgYi93ZWIvdGVzdHMvZG9tLXF1ZXJ5Lmh0bWwKK2luZGV4IDY1YTYx
ZGQuLjcwYTJkNTQgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMvZG9tLXF1ZXJ5Lmh0bWwKKysrKyBi
L3dlYi90ZXN0cy9kb20tcXVlcnkuaHRtbAorQEAgLTEwNSw3ICsxMDUsNyBAQCBlbmRUZXN0KCk7
CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFzcz0iaGVhZCI+CistICAgPHA+PGEgaHJl
Zj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDov
L3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKysgICA8cD48YSBocmVm
PSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8v
MTI3LjAuMC4xL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0
aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYgLS1naXQgYS93ZWIvdGVzdHMvZG9tLXRyYXZl
cnNlLmh0bWwgYi93ZWIvdGVzdHMvZG9tLXRyYXZlcnNlLmh0bWwKK2luZGV4IDY3M2MwOTUuLjI3
ZGE2YjMgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMvZG9tLXRyYXZlcnNlLmh0bWwKKysrKyBiL3dl
Yi90ZXN0cy9kb20tdHJhdmVyc2UuaHRtbAorQEAgLTc3LDcgKzc3LDcgQEAgZW5kVGVzdCgpOwor
IDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9
Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93
d3cudzMub3JnL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0i
aHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovLzEy
Ny4wLjAuMS9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorIAorICAgIDxoMSBpZD0idGl0
bGUiPlNlbGVjdG9yczwvaDE+CisgCitkaWZmIC0tZ2l0IGEvd2ViL3Rlc3RzL2pzbGliLWF0dHIt
anF1ZXJ5LTIueC5odG1sIGIvd2ViL3Rlc3RzL2pzbGliLWF0dHItanF1ZXJ5LTIueC5odG1sCitp
bmRleCBjYTZkMzM4Li4zN2ZlM2ZkIDEwMDY0NAorLS0tIGEvd2ViL3Rlc3RzL2pzbGliLWF0dHIt
anF1ZXJ5LTIueC5odG1sCisrKysgYi93ZWIvdGVzdHMvanNsaWItYXR0ci1qcXVlcnktMi54Lmh0
bWwKK0BAIC0xLDcgKzEsNyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQgc3JjPSIuLi9o
dG1scnVubmVyLmpzIj48L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2ds
ZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+
CisrPHNjcmlwdCBzcmM9Ii4uL2FqYXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+
PC9zY3JpcHQ+CisgPHNjcmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFy
dFRlc3QoImpzbGliLWF0dHItanF1ZXJ5IiwgJ2FlYjNiMmMxJyk7CitAQCAtNTQsNyArNTQsNyBA
QCBlbmRUZXN0KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFzcz0iaGVhZCI+Cist
ICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzND
IHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKysg
ICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mg
c3JjPSJodHRwOi8vMTI3LjAuMC4xL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisgCisg
ICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYgLS1naXQgYS93ZWIvdGVz
dHMvanNsaWItYXR0ci1qcXVlcnkuaHRtbCBiL3dlYi90ZXN0cy9qc2xpYi1hdHRyLWpxdWVyeS5o
dG1sCitpbmRleCA3MGY4ZmRjLi4zNjEyOTFjIDEwMDY0NAorLS0tIGEvd2ViL3Rlc3RzL2pzbGli
LWF0dHItanF1ZXJ5Lmh0bWwKKysrKyBiL3dlYi90ZXN0cy9qc2xpYi1hdHRyLWpxdWVyeS5odG1s
CitAQCAtMSw3ICsxLDcgQEAKKyA8aHRtbD4KKyA8aGVhZD4KKyA8c2NyaXB0IHNyYz0iLi4vaHRt
bHJ1bm5lci5qcyI+PC9zY3JpcHQ+CistPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVh
cGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4K
Kys8c2NyaXB0IHNyYz0iLi4vYWpheC9saWJzL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyI+
PC9zY3JpcHQ+CisgPHNjcmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFy
dFRlc3QoImpzbGliLWF0dHItanF1ZXJ5IiwgJzY3NWEzNTRmJyk7CitAQCAtNTQsNyArNTQsNyBA
QCBlbmRUZXN0KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFzcz0iaGVhZCI+Cist
ICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzND
IHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKysg
ICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mg
c3JjPSJodHRwOi8vMTI3LjAuMC4xL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisgCisg
ICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYgLS1naXQgYS93ZWIvdGVz
dHMvanNsaWItYXR0ci1wcm90b3R5cGUuaHRtbCBiL3dlYi90ZXN0cy9qc2xpYi1hdHRyLXByb3Rv
dHlwZS5odG1sCitpbmRleCBjMGU4MDA2Li4zNmFiMzM1IDEwMDY0NAorLS0tIGEvd2ViL3Rlc3Rz
L2pzbGliLWF0dHItcHJvdG90eXBlLmh0bWwKKysrKyBiL3dlYi90ZXN0cy9qc2xpYi1hdHRyLXBy
b3RvdHlwZS5odG1sCitAQCAtMSw3ICsxLDcgQEAKKyA8aHRtbD4KKyA8aGVhZD4KKyA8c2NyaXB0
IHNyYz0iLi4vaHRtbHJ1bm5lci5qcyI+PC9zY3JpcHQ+CistPHNjcmlwdCBzcmM9Imh0dHBzOi8v
YWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvcHJvdG90eXBlLzEuNy4wLjAvcHJvdG90eXBl
LmpzIj48L3NjcmlwdD4KKys8c2NyaXB0IHNyYz0iLi4vYWpheC9saWJzL3Byb3RvdHlwZS8xLjcu
MC4wL3Byb3RvdHlwZS5qcyI+PC9zY3JpcHQ+CisgPHNjcmlwdD4KKyB3aW5kb3cub25sb2FkID0g
ZnVuY3Rpb24oKXsKKyBzdGFydFRlc3QoImpzbGliLWF0dHItcHJvdG90eXBlIiwgJzRmYjkzYzZh
Jyk7CitAQCAtNTQsNyArNTQsNyBAQCBlbmRUZXN0KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAg
PGRpdiBjbGFzcz0iaGVhZCI+CistICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48
aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hv
bWUiIHdpZHRoPTcyPjwvYT4KKysgICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxp
bWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8vMTI3LjAuMC4xL0ljb25zL3czY19ob21l
IiB3aWR0aD03Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAK
K2RpZmYgLS1naXQgYS93ZWIvdGVzdHMvanNsaWItZXZlbnQtanF1ZXJ5LTIueC5odG1sIGIvd2Vi
L3Rlc3RzL2pzbGliLWV2ZW50LWpxdWVyeS0yLnguaHRtbAoraW5kZXggNGU1YWJlZi4uMTRkMDZk
NSAxMDA2NDQKKy0tLSBhL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1qcXVlcnktMi54Lmh0bWwKKysr
KyBiL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1qcXVlcnktMi54Lmh0bWwKK0BAIC0xLDcgKzEsNyBA
QAorIDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQgc3JjPSIuLi9odG1scnVubmVyLmpzIj48L3Nj
cmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGli
cy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBzcmM9Ii4u
L2FqYXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisgPHNjcmlw
dD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFydFRlc3QoImpzbGliLWV2ZW50
LWpxdWVyeSIsICcxNjFhNDQ3YycpOworQEAgLTQxLDcgKzQxLDcgQEAgZW5kVGVzdCgpOworIDwv
aGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0
dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cu
dzMub3JnL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0
cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovLzEyNy4w
LjAuMS9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorIAorICAgIDxoMSBpZD0idGl0bGUi
PlNlbGVjdG9yczwvaDE+CisgCitkaWZmIC0tZ2l0IGEvd2ViL3Rlc3RzL2pzbGliLWV2ZW50LWpx
dWVyeS5odG1sIGIvd2ViL3Rlc3RzL2pzbGliLWV2ZW50LWpxdWVyeS5odG1sCitpbmRleCAyMmFl
Mzk1Li5hNjZjYzNjIDEwMDY0NAorLS0tIGEvd2ViL3Rlc3RzL2pzbGliLWV2ZW50LWpxdWVyeS5o
dG1sCisrKysgYi93ZWIvdGVzdHMvanNsaWItZXZlbnQtanF1ZXJ5Lmh0bWwKK0BAIC0xLDcgKzEs
NyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQgc3JjPSIuLi9odG1scnVubmVyLmpzIj48
L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgv
bGlicy9qcXVlcnkvMS4xMC4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgorKzxzY3JpcHQgc3Jj
PSIuLi9hamF4L2xpYnMvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KKyA8
c2NyaXB0PgorIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpeworIHN0YXJ0VGVzdCgianNsaWIt
ZXZlbnQtanF1ZXJ5IiwgJzY5MGY4ODFlJyk7CitAQCAtNDEsNyArNDEsNyBAQCBlbmRUZXN0KCk7
CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFzcz0iaGVhZCI+CistICAgPHA+PGEgaHJl
Zj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDov
L3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKysgICA8cD48YSBocmVm
PSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8v
MTI3LjAuMC4xL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0
aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYgLS1naXQgYS93ZWIvdGVzdHMvanNsaWItZXZl
bnQtcHJvdG90eXBlLmh0bWwgYi93ZWIvdGVzdHMvanNsaWItZXZlbnQtcHJvdG90eXBlLmh0bWwK
K2luZGV4IGM2MDFhODkuLjJhYmY4ZmUgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMvanNsaWItZXZl
bnQtcHJvdG90eXBlLmh0bWwKKysrKyBiL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1wcm90b3R5cGUu
aHRtbAorQEAgLTEsNyArMSw3IEBACisgPGh0bWw+CisgPGhlYWQ+CisgPHNjcmlwdCBzcmM9Ii4u
L2h0bWxydW5uZXIuanMiPjwvc2NyaXB0PgorLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29v
Z2xlYXBpcy5jb20vYWpheC9saWJzL3Byb3RvdHlwZS8xLjcuMC4wL3Byb3RvdHlwZS5qcyI+PC9z
Y3JpcHQ+CisrPHNjcmlwdCBzcmM9Ii4uL2FqYXgvbGlicy9wcm90b3R5cGUvMS43LjAuMC9wcm90
b3R5cGUuanMiPjwvc2NyaXB0PgorIDxzY3JpcHQ+Cisgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9u
KCl7Cisgc3RhcnRUZXN0KCJqc2xpYi1ldmVudC1wcm90b3R5cGUiLCAnMDNiODZkOTYnKTsKK0BA
IC00MSw3ICs0MSw3IEBAIGVuZFRlc3QoKTsKKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2IGNs
YXNzPSJoZWFkIj4KKy0gICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVp
Z2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8vd3d3LnczLm9yZy9JY29ucy93M2NfaG9tZSIgd2lk
dGg9NzI+PC9hPgorKyAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWln
aHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly8xMjcuMC4wLjEvSWNvbnMvdzNjX2hvbWUiIHdpZHRo
PTcyPjwvYT4KKyAKKyAgICA8aDEgaWQ9InRpdGxlIj5TZWxlY3RvcnM8L2gxPgorIAorZGlmZiAt
LWdpdCBhL3dlYi90ZXN0cy9qc2xpYi1tb2RpZnktanF1ZXJ5LTIueC5odG1sIGIvd2ViL3Rlc3Rz
L2pzbGliLW1vZGlmeS1qcXVlcnktMi54Lmh0bWwKK2luZGV4IGQwM2Q1NmIuLjIxZWY3NzMgMTAw
NjQ0CistLS0gYS93ZWIvdGVzdHMvanNsaWItbW9kaWZ5LWpxdWVyeS0yLnguaHRtbAorKysrIGIv
d2ViL3Rlc3RzL2pzbGliLW1vZGlmeS1qcXVlcnktMi54Lmh0bWwKK0BAIC0xLDcgKzEsNyBAQAor
IDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQgc3JjPSIuLi9odG1scnVubmVyLmpzIj48L3Njcmlw
dD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9q
cXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBzcmM9Ii4uL2Fq
YXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisgPHNjcmlwdD4K
KyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFydFRlc3QoImpzbGliLW1vZGlmeS1q
cXVlcnkiLCAnZWQyYzdlZjInKTsKK0BAIC02NSw3ICs2NSw3IEBAIGVuZFRlc3QoKTsKKyA8L2hl
YWQ+CisgPGJvZHk+CisgICA8ZGl2IGNsYXNzPSJoZWFkIj4KKy0gICA8cD48YSBocmVmPSJodHRw
Oi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8vd3d3Lncz
Lm9yZy9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorKyAgIDxwPjxhIGhyZWY9Imh0dHA6
Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly8xMjcuMC4w
LjEvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8aDEgaWQ9InRpdGxlIj5T
ZWxlY3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90ZXN0cy9qc2xpYi1tb2RpZnktanF1
ZXJ5Lmh0bWwgYi93ZWIvdGVzdHMvanNsaWItbW9kaWZ5LWpxdWVyeS5odG1sCitpbmRleCAxMmM2
YTM1Li5iY2Q2Nzk2IDEwMDY0NAorLS0tIGEvd2ViL3Rlc3RzL2pzbGliLW1vZGlmeS1qcXVlcnku
aHRtbAorKysrIGIvd2ViL3Rlc3RzL2pzbGliLW1vZGlmeS1qcXVlcnkuaHRtbAorQEAgLTEsNyAr
MSw3IEBACisgPGh0bWw+CisgPGhlYWQ+CisgPHNjcmlwdCBzcmM9Ii4uL2h0bWxydW5uZXIuanMi
Pjwvc2NyaXB0PgorLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWph
eC9saWJzL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBz
cmM9Ii4uL2FqYXgvbGlicy9qcXVlcnkvMS4xMC4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pgor
IDxzY3JpcHQ+Cisgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7Cisgc3RhcnRUZXN0KCJqc2xp
Yi1tb2RpZnktanF1ZXJ5IiwgJzk1MGFhYWExJyk7CitAQCAtNjUsNyArNjUsNyBAQCBlbmRUZXN0
KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFzcz0iaGVhZCI+CistICAgPHA+PGEg
aHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0
cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKysgICA8cD48YSBo
cmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRw
Oi8vMTI3LjAuMC4xL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisgCisgICAgPGgxIGlk
PSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYgLS1naXQgYS93ZWIvdGVzdHMvanNsaWIt
bW9kaWZ5LXByb3RvdHlwZS5odG1sIGIvd2ViL3Rlc3RzL2pzbGliLW1vZGlmeS1wcm90b3R5cGUu
aHRtbAoraW5kZXggZTVlMmE0ZC4uMDEzMzYxOCAxMDA2NDQKKy0tLSBhL3dlYi90ZXN0cy9qc2xp
Yi1tb2RpZnktcHJvdG90eXBlLmh0bWwKKysrKyBiL3dlYi90ZXN0cy9qc2xpYi1tb2RpZnktcHJv
dG90eXBlLmh0bWwKK0BAIC0xLDcgKzEsNyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQg
c3JjPSIuLi9odG1scnVubmVyLmpzIj48L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9h
amF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9wcm90b3R5cGUvMS43LjAuMC9wcm90b3R5cGUu
anMiPjwvc2NyaXB0PgorKzxzY3JpcHQgc3JjPSIuLi9hamF4L2xpYnMvcHJvdG90eXBlLzEuNy4w
LjAvcHJvdG90eXBlLmpzIj48L3NjcmlwdD4KKyA8c2NyaXB0PgorIHdpbmRvdy5vbmxvYWQgPSBm
dW5jdGlvbigpeworIHN0YXJ0VGVzdCgianNsaWItbW9kaWZ5LXByb3RvdHlwZSIsICc2NjkzYjNh
NScpOworQEAgLTY1LDcgKzY1LDcgQEAgZW5kVGVzdCgpOworIDwvaGVhZD4KKyA8Ym9keT4KKyAg
IDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+
PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cudzMub3JnL0ljb25zL3czY19o
b21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48
aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovLzEyNy4wLjAuMS9JY29ucy93M2NfaG9t
ZSIgd2lkdGg9NzI+PC9hPgorIAorICAgIDxoMSBpZD0idGl0bGUiPlNlbGVjdG9yczwvaDE+Cisg
CitkaWZmIC0tZ2l0IGEvd2ViL3Rlc3RzL2pzbGliLXN0eWxlLWpxdWVyeS0yLnguaHRtbCBiL3dl
Yi90ZXN0cy9qc2xpYi1zdHlsZS1qcXVlcnktMi54Lmh0bWwKK2luZGV4IGNlNDc3YjguLjg4MDBj
NjMgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMvanNsaWItc3R5bGUtanF1ZXJ5LTIueC5odG1sCisr
KysgYi93ZWIvdGVzdHMvanNsaWItc3R5bGUtanF1ZXJ5LTIueC5odG1sCitAQCAtMSw3ICsxLDcg
QEAKKyA8aHRtbD4KKyA8aGVhZD4KKyA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5lci5qcyI+PC9z
Y3JpcHQ+CistPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xp
YnMvanF1ZXJ5LzIuMC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgorKzxzY3JpcHQgc3JjPSIu
Li9hamF4L2xpYnMvanF1ZXJ5LzIuMC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgorIDxzY3Jp
cHQ+Cisgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7Cisgc3RhcnRUZXN0KCJqc2xpYi1zdHls
ZS1qcXVlcnkiLCAnMDhiYzY5ODgnKTsKK0BAIC02Myw3ICs2Myw3IEBAIGVuZFRlc3QoKTsKKyA8
L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2IGNsYXNzPSJoZWFkIj4KKy0gICA8cD48YSBocmVmPSJo
dHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8vd3d3
LnczLm9yZy9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorKyAgIDxwPjxhIGhyZWY9Imh0
dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly8xMjcu
MC4wLjEvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8aDEgaWQ9InRpdGxl
Ij5TZWxlY3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90ZXN0cy9qc2xpYi1zdHlsZS1q
cXVlcnkuaHRtbCBiL3dlYi90ZXN0cy9qc2xpYi1zdHlsZS1qcXVlcnkuaHRtbAoraW5kZXggMzU2
OTc5Ni4uNDBlZDRmNyAxMDA2NDQKKy0tLSBhL3dlYi90ZXN0cy9qc2xpYi1zdHlsZS1qcXVlcnku
aHRtbAorKysrIGIvd2ViL3Rlc3RzL2pzbGliLXN0eWxlLWpxdWVyeS5odG1sCitAQCAtMSw3ICsx
LDcgQEAKKyA8aHRtbD4KKyA8aGVhZD4KKyA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5lci5qcyI+
PC9zY3JpcHQ+CistPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4
L2xpYnMvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KKys8c2NyaXB0IHNy
Yz0iLi4vYWpheC9saWJzL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+Cisg
PHNjcmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFydFRlc3QoImpzbGli
LXN0eWxlLWpxdWVyeSIsICdhODAzNzkwYScpOworQEAgLTYzLDcgKzYzLDcgQEAgZW5kVGVzdCgp
OworIDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhy
ZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6
Ly93d3cudzMub3JnL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJl
Zj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDov
LzEyNy4wLjAuMS9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorIAorICAgIDxoMSBpZD0i
dGl0bGUiPlNlbGVjdG9yczwvaDE+CisgCitkaWZmIC0tZ2l0IGEvd2ViL3Rlc3RzL2pzbGliLXN0
eWxlLXByb3RvdHlwZS5odG1sIGIvd2ViL3Rlc3RzL2pzbGliLXN0eWxlLXByb3RvdHlwZS5odG1s
CitpbmRleCAyNzYyNDAxLi5jNDBmYzcxIDEwMDY0NAorLS0tIGEvd2ViL3Rlc3RzL2pzbGliLXN0
eWxlLXByb3RvdHlwZS5odG1sCisrKysgYi93ZWIvdGVzdHMvanNsaWItc3R5bGUtcHJvdG90eXBl
Lmh0bWwKK0BAIC0xLDcgKzEsNyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQgc3JjPSIu
Li9odG1scnVubmVyLmpzIj48L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdv
b2dsZWFwaXMuY29tL2FqYXgvbGlicy9wcm90b3R5cGUvMS43LjAuMC9wcm90b3R5cGUuanMiPjwv
c2NyaXB0PgorKzxzY3JpcHQgc3JjPSIuLi9hamF4L2xpYnMvcHJvdG90eXBlLzEuNy4wLjAvcHJv
dG90eXBlLmpzIj48L3NjcmlwdD4KKyA8c2NyaXB0PgorIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlv
bigpeworIHN0YXJ0VGVzdCgianNsaWItc3R5bGUtcHJvdG90eXBlIiwgJ2M0MTE3NGYwJyk7CitA
QCAtNjQsNyArNjQsNyBAQCBlbmRUZXN0KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBj
bGFzcz0iaGVhZCI+CistICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhl
aWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdp
ZHRoPTcyPjwvYT4KKysgICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVp
Z2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8vMTI3LjAuMC4xL0ljb25zL3czY19ob21lIiB3aWR0
aD03Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYg
LS1naXQgYS93ZWIvdGVzdHMvanNsaWItdHJhdmVyc2UtanF1ZXJ5LTIueC5odG1sIGIvd2ViL3Rl
c3RzL2pzbGliLXRyYXZlcnNlLWpxdWVyeS0yLnguaHRtbAoraW5kZXggYWZjNWIzZC4uYzBlMmFl
OCAxMDA2NDQKKy0tLSBhL3dlYi90ZXN0cy9qc2xpYi10cmF2ZXJzZS1qcXVlcnktMi54Lmh0bWwK
KysrKyBiL3dlYi90ZXN0cy9qc2xpYi10cmF2ZXJzZS1qcXVlcnktMi54Lmh0bWwKK0BAIC0xLDcg
KzEsNyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQgc3JjPSIuLi9odG1scnVubmVyLmpz
Ij48L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2Fq
YXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBz
cmM9Ii4uL2FqYXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+Cisg
PHNjcmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFydFRlc3QoImpzbGli
LXRyYXZlcnNlLWpxdWVyeSIsICc2NmU2OTBjMCcpOworQEAgLTY1LDcgKzY1LDcgQEAgZW5kVGVz
dCgpOworIDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxh
IGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0
dHA6Ly93d3cudzMub3JnL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEg
aHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0
cDovLzEyNy4wLjAuMS9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorIAorICAgIDxoMSBp
ZD0idGl0bGUiPlNlbGVjdG9yczwvaDE+CisgCitkaWZmIC0tZ2l0IGEvd2ViL3Rlc3RzL2pzbGli
LXRyYXZlcnNlLWpxdWVyeS5odG1sIGIvd2ViL3Rlc3RzL2pzbGliLXRyYXZlcnNlLWpxdWVyeS5o
dG1sCitpbmRleCA5MTBlMmU2Li5iNDE2MTlmIDEwMDY0NAorLS0tIGEvd2ViL3Rlc3RzL2pzbGli
LXRyYXZlcnNlLWpxdWVyeS5odG1sCisrKysgYi93ZWIvdGVzdHMvanNsaWItdHJhdmVyc2UtanF1
ZXJ5Lmh0bWwKK0BAIC0xLDcgKzEsNyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQgc3Jj
PSIuLi9odG1scnVubmVyLmpzIj48L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4
Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS4xMC4yL2pxdWVyeS5taW4uanMiPjwv
c2NyaXB0PgorKzxzY3JpcHQgc3JjPSIuLi9hamF4L2xpYnMvanF1ZXJ5LzEuMTAuMi9qcXVlcnku
bWluLmpzIj48L3NjcmlwdD4KKyA8c2NyaXB0PgorIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigp
eworIHN0YXJ0VGVzdCgianNsaWItdHJhdmVyc2UtanF1ZXJ5IiwgJ2JjNWIxOGYzJyk7CitAQCAt
NjUsNyArNjUsNyBAQCBlbmRUZXN0KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFz
cz0iaGVhZCI+CistICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdo
dD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRo
PTcyPjwvYT4KKysgICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0
PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8vMTI3LjAuMC4xL0ljb25zL3czY19ob21lIiB3aWR0aD03
Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYgLS1n
aXQgYS93ZWIvdGVzdHMvanNsaWItdHJhdmVyc2UtcHJvdG90eXBlLmh0bWwgYi93ZWIvdGVzdHMv
anNsaWItdHJhdmVyc2UtcHJvdG90eXBlLmh0bWwKK2luZGV4IDM3YzI4ZDYuLmU0MmNkOGYgMTAw
NjQ0CistLS0gYS93ZWIvdGVzdHMvanNsaWItdHJhdmVyc2UtcHJvdG90eXBlLmh0bWwKKysrKyBi
L3dlYi90ZXN0cy9qc2xpYi10cmF2ZXJzZS1wcm90b3R5cGUuaHRtbAorQEAgLTEsNyArMSw3IEBA
CisgPGh0bWw+CisgPGhlYWQ+CisgPHNjcmlwdCBzcmM9Ii4uL2h0bWxydW5uZXIuanMiPjwvc2Ny
aXB0PgorLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJz
L3Byb3RvdHlwZS8xLjcuMC4wL3Byb3RvdHlwZS5qcyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBzcmM9
Ii4uL2FqYXgvbGlicy9wcm90b3R5cGUvMS43LjAuMC9wcm90b3R5cGUuanMiPjwvc2NyaXB0Pgor
IDxzY3JpcHQ+Cisgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7Cisgc3RhcnRUZXN0KCJqc2xp
Yi10cmF2ZXJzZS1wcm90b3R5cGUiLCAnZDQ2ZDNlYWInKTsKK0BAIC02NSw3ICs2NSw3IEBAIGVu
ZFRlc3QoKTsKKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2IGNsYXNzPSJoZWFkIj4KKy0gICA8
cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3Jj
PSJodHRwOi8vd3d3LnczLm9yZy9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorKyAgIDxw
PjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9
Imh0dHA6Ly8xMjcuMC4wLjEvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8
aDEgaWQ9InRpdGxlIj5TZWxlY3RvcnM8L2gxPgorIAogZGlmZiAtLWdpdCBhL3dlYi93ZWJydW5u
ZXIuanMgYi93ZWIvd2VicnVubmVyLmpzCi1pbmRleCA2M2Q3NzdiLi45NTNjMDI2IDEwMDc1NQor
aW5kZXggNjNkNzc3Yi4uYmY0M2UyNCAxMDA2NDQKIC0tLSBhL3dlYi93ZWJydW5uZXIuanMKICsr
KyBiL3dlYi93ZWJydW5uZXIuanMKIEBAIC0xNTYsNiArMTU2LDcgQEAKQEAgLTUyLDcgKzcyNDgs
NyBAQCBpbmRleCA2M2Q3NzdiLi45NTNjMDI2IDEwMDc1NQogIAkJCWlmICggd2luZG93LmxpbWl0
U2VhcmNoICkgewogIAkJCQl2YXIgc3VtbWFyeSA9IChydW5TdHlsZSA9PT0gInJ1bnMvcyIgPyBN
YXRoLnBvdyhNYXRoLkUsIG1heFRvdGFsIC8gbWF4VG90YWxOdW0pIDogbWF4VG90YWwpLnRvRml4
ZWQoMik7CiAgCi1AQCAtNDIxLDcgKzQ0Myw1IEBACitAQCAtNDIxLDkgKzQ0Myw3IEBACiAgCQkJ
CX0KICAJCQl9KTsKICAKQEAgLTYxLDcgKzcyNTcsOSBAQCBpbmRleCA2M2Q3NzdiLi45NTNjMDI2
IDEwMDc1NQogLQkJfQogKwkJJCgiI3BhdXNlIikuY2xpY2soKTsKICAJfQotQEAgLTY3Myw4ICs2
OTUsMTggQEAKKyAKKyAJZnVuY3Rpb24gaW5pdFRlc3QoY3VySUQpeworQEAgLTY3Myw4ICs2OTMs
MTggQEAKICAKICAJCSQoIiN0aW1lYmFyIikud2lkdGgoKHcgPCAxID8gMSA6IHcpICsgIiUiKTsK
ICAJfQpAQCAtODEsNyArNzI3OSw3IEBAIGluZGV4IDYzZDc3N2IuLjk1M2MwMjYgMTAwNzU1CiAg
CQkvLyBLZWVwIGEgcnVubmluZyBzdW1tYXJ5IGdvaW5nCiAgCQlkYXRhLm1lYW4gPSBwYXJzZUZs
b2F0KGRhdGEubWVhbik7CiAgCQl2YXIgbWVhbiA9IChydW5TdHlsZSA9PT0gInJ1bnMvcyIgPyBN
YXRoLmxvZyhkYXRhLm1lYW4pIDogZGF0YS5tZWFuKTsKLUBAIC03MTEsNiArNzQzLDggQEAKK0BA
IC03MTEsNiArNzQxLDggQEAKICAJCQlwZXIgKyAiJTsnPiIgKyAocGVyID49IDEwMCA/ICI8c3Bh
bj4iICsgbWVhbi50b0ZpeGVkKDIpICsgcnVuU3R5bGUgKyAiPC9zcGFuPiIgOiAiIikgKyAiPC9k
aXY+PC9kaXY+Iik7CiAgCiAgCQlpZiAoIHBlciA+PSAxMDAgJiYgdGVzdFN1bW1hcnlbZGF0YS5j
dXJJRF0gPiAwICkgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>