<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://www.w3.org/Bugs/Public/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4"
          urlbase="https://www.w3.org/Bugs/Public/"
          
          maintainer="sysbot+bugzilla@w3.org"
>

    <bug>
          <bug_id>4361</bug_id>
          
          <creation_ts>2007-03-01 23:07:10 +0000</creation_ts>
          <short_desc>Check script ver 0.7.4 failure with latest Perl modules</short_desc>
          <delta_ts>2007-10-02 06:31:45 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Validator</product>
          <component>check</component>
          <version>0.7.4</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 2000</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>0.8.0</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Lynn Wheelwright">lynnw</reporter>
          <assigned_to name="Olivier Thereaux">ot</assigned_to>
          
          
          <qa_contact name="qa-dev tracking">www-validator-cvs</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>14294</commentid>
    <comment_count>0</comment_count>
    <who name="Lynn Wheelwright">lynnw</who>
    <bug_when>2007-03-01 23:07:10 +0000</bug_when>
    <thetext>Persistent failure to find specified doctype (msg 337) - fails on validator test cases.  Fixed by removing -R parameter from call to onsgml.exe (inspite of warnings)--it doesn&apos;t work otherwise on version 1.5.1.  

Installed latest Apache server (2.2.4) and latest perl from ActiveState (820) and latest perl modules.  These also broke the check script for win2k.  Fixed by editing a directory path (check script attached).  It also breaks version 0.7.2 of the check script (same edit).

The installation instructions for windows also have an error: under the title &apos;Configuration of the Validator&apos;, the sgml-lib is at c:\www\sgml-lib, but under the title &apos;Directory Structure&apos; it is at C:\www\validator\htdocs\sgml-lib.  The latter is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14295</commentid>
    <comment_count>1</comment_count>
      <attachid>460</attachid>
    <who name="Lynn Wheelwright">lynnw</who>
    <bug_when>2007-03-01 23:10:55 +0000</bug_when>
    <thetext>Created attachment 460
Edited check script for win2k failures with latest perl and Apache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16961</commentid>
    <comment_count>2</comment_count>
    <who name="Olivier Thereaux">ot</who>
    <bug_when>2007-10-02 06:31:45 +0000</bug_when>
    <thetext>Closing this (as &quot;fixed&quot; although it is a little dubious), as 0.8.0+ does not directly call onsgmls directly any longer.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>460</attachid>
            <date>2007-03-01 23:10:55 +0000</date>
            <delta_ts>2007-03-01 23:10:55 +0000</delta_ts>
            <desc>Edited check script for win2k failures with latest perl and Apache</desc>
            <filename>check</filename>
            <type>text/plain</type>
            <size>76445</size>
            <attacher name="Lynn Wheelwright">lynnw</attacher>
            
              <data encoding="base64">IyFDOi93d3cvcGVybC9iaW4vcGVybC5leGUNCiMNCiMgVzNDIE1hcmt1cCBWYWxpZGF0aW9uIFNl
cnZpY2UNCiMgQSBDR0kgc2NyaXB0IHRvIHJldHJpZXZlIGFuZCB2YWxpZGF0ZSBhIG1hcmt1cCBm
aWxlDQojDQojIENvcHlyaWdodCAoYykgMTk5NS0yMDA2IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRp
dW0NCiMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEdlcmFsZCBPc2tvYm9pbnkgPGdlcmFsZEB3My5v
cmc+DQojIGZvciBhZGRpdGlvbmFsIGNvbnRyaWJ1dG9ycywgc2VlIGh0dHA6Ly92YWxpZGF0b3Iu
dzMub3JnL2Fib3V0Lmh0bWwjY3JlZGl0cw0KIyBhbmQgaHR0cDovL2Rldi53My5vcmcvY3Zzd2Vi
L3ZhbGlkYXRvci8NCiMNCiMgVGhpcyBzb3VyY2UgY29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhl
IGxpY2Vuc2UgYXQ6DQojICAgICBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL2Nv
cHlyaWdodC1zb2Z0d2FyZQ0KIw0KIyAkSWQ6IGNoZWNrLHYgMS40MzIuMi4yMiAyMDA2LzExLzEw
IDAyOjUxOjUwIG90IEV4cCAkDQoNCiMNCiMgRGlzYWJsZSBidWZmZXJpbmcgb24gU1RET1VUIQ0K
JHwgPSAxOw0KDQojDQojIFdlIG5lZWQgUGVybCA1LjYuMCsuDQp1c2UgNS4wMDY7DQoNCiMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMNCiMjIyMgTG9hZCBtb2R1bGVzLiAjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMNCg0KIw0KIyBQcmFnbWFzLg0KdXNlIHN0cmljdDsNCnVzZSB3YXJuaW5nczsNCg0K
Iw0KIyBNb2R1bGVzLiAgU2VlIGFsc28gdGhlIEJFR0lOIGJsb2NrIGZ1cnRoZXIgZG93biBiZWxv
dy4NCiMNCiMgVmVyc2lvbiBudW1iZXJzIGdpdmVuIHdoZXJlIHdlIGFic29sdXRlbHkgbmVlZCBh
IG1pbmltdW0gdmVyc2lvbiBvZiBhIGdpdmVuDQojIG1vZHVsZSAoZ2l2ZXMgbmljZXIgZXJyb3Ig
bWVzc2FnZXMpLiBCeSBkZWZhdWx0LCBhZGQgYW4gZW1wdHkgaW1wb3J0IGxpc3QNCiMgd2hlbiBs
b2FkaW5nIG1vZHVsZXMgdG8gcHJldmVudCBub24tT08gb3IgcG9vcmx5IHdyaXR0ZW4gbW9kdWxl
cyBmcm9tDQojIHBvbGx1dGluZyBvdXIgbmFtZXNwYWNlLg0KIw0KdXNlIENHSSAgICAgICAgICAg
ICAyLjgxIHF3KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1uZXdzdHlsZV91cmxzDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLXByaXZhdGVfdGVtcGZpbGVzDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVkaXJlY3QNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICk7
ICMgMi44MSBmb3IgWEhUTUwsIGFuZCBpbXBvcnQgcmVkaXJlY3QoKSBmdW5jdGlvbi4NCg0KdXNl
IENHSTo6Q2FycCAgICAgICAgICAgIHF3KGNhcnAgY3JvYWsgZmF0YWxzVG9Ccm93c2VyKTsNCnVz
ZSBDb25maWc6OkdlbmVyYWwgMi4xOSBxdygpOyAjIE5lZWQgMi4xOSBmb3IgLUF1dG9MYXVuZGVy
DQp1c2UgRmlsZTo6U3BlYyAgICAgICAgICAgcXcoKTsNCnVzZSBIVE1MOjpQYXJzZXIgICAgMy4y
NSBxdygpOyAjIE5lZWQgMy4yNSBmb3IgJHAtPmlnbm9yZV9lbGVtZW50cy4NCnVzZSBIVE1MOjpU
ZW1wbGF0ZSAgMi42ICBxdygpOw0KdXNlIEhUVFA6OlJlcXVlc3QgICAgICAgIHF3KCk7DQp1c2Ug
SFRUUDo6SGVhZGVyczo6QXV0aCAgcXcoKTsgIyBOZWVkcyB0byBiZSBpbXBvcnRlZCBhZnRlciBv
dGhlciBIVFRQOjoqLg0KdXNlIElPOjpGaWxlICAgICAgICAgICAgIHF3KCk7DQp1c2UgSVBDOjpP
cGVuMyAgICAgICAgICAgcXcob3BlbjMpOw0KdXNlIFNldDo6SW50U3BhbiAgICAgICAgIHF3KCk7
DQp1c2UgVGV4dDo6SWNvbnYgICAgICAgICAgcXcoKTsNCnVzZSBUZXh0OjpXcmFwICAgICAgICAg
ICBxdyh3cmFwKTsNCnVzZSBVUkkgICAgICAgICAgICAgICAgICBxdygpOw0KdXNlIFVSSTo6RXNj
YXBlICAgICAgICAgIHF3KHVyaV9lc2NhcGUpOw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoj
IyMjIENvbnN0YW50IGRlZmluaXRpb25zLiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMNCiMgRGVm
aW5lIGdsb2JhbCBjb25zdGFudHMNCnVzZSBjb25zdGFudCBUUlVFICA9PiAxOw0KdXNlIGNvbnN0
YW50IEZBTFNFID0+IDA7DQoNCiMNCiMgVGVudGF0aXZlIFZhbGlkYXRpb24gU2V2ZXJpdGllcy4N
CnVzZSBjb25zdGFudCBUX0RFQlVHID0+ICAxOyAjIDAwMDAgMDAwMQ0KdXNlIGNvbnN0YW50IFRf
SU5GTyAgPT4gIDI7ICMgMDAwMCAwMDEwDQp1c2UgY29uc3RhbnQgVF9XQVJOICA9PiAgNDsgIyAw
MDAwIDAxMDANCnVzZSBjb25zdGFudCBUX0VSUk9SID0+ICA4OyAjIDAwMDAgMTAwMA0KdXNlIGNv
bnN0YW50IFRfRkFUQUwgPT4gMTY7ICMgMDAwMSAwMDAwDQp1c2UgY29uc3RhbnQgVF9GQUxMICA9
PiAzMjsgIyAwMDEwIDAwMDAsIEZhbGxiYWNrIGluIGVmZmVjdC4NCg0KIw0KIyBPdXRwdXQgZmxh
Z3MgZm9yIGVycm9yIHByb2Nlc3NpbmcNCnVzZSBjb25zdGFudCBPX1NPVVJDRSAgPT4gMTsgIyAw
MDAwIDAwMDENCnVzZSBjb25zdGFudCBPX0NIQVJTRVQgPT4gMjsgIyAwMDAwIDAwMTANCnVzZSBj
b25zdGFudCBPX0RPQ1RZUEUgPT4gNDsgIyAwMDAwIDAxMDANCnVzZSBjb25zdGFudCBPX05PTkUg
ICAgPT4gODsgIyAwMDAwIDEwMDANCg0KIw0KIyBQYXJzZSBtb2RlIHRva2Vucy4NCnVzZSBjb25z
dGFudCBNT0RFX1NHTUwgPT4gMTsgIyAwMDAwIDAwMDENCnVzZSBjb25zdGFudCBNT0RFX1hNTCAg
PT4gMjsgIyAwMDAwIDAwMTANCnVzZSBjb25zdGFudCBNT0RFX1RCRCAgPT4gNDsgIyAwMDAwIDAx
MDAsIG5lZWRzIGZ1cnRoZXIgaW5mbyB0byBkZWNpZGUuDQojQEBGSVhNRTogWE1MIFdGIGNoZWNr
aW5nIGlzbid0IGltcGxlbWVudGVkLg0KdXNlIGNvbnN0YW50IE1PREVfV0YgICA9PiA4OyAjIDAw
MDAgMTAwMCwgb25seSBYTUwgd2VsbC1mb3JtZWQgY2hlY2tpbmcuDQojQEBGSVhNRTsNCg0KIw0K
IyBEZWZpbmUgZ2xvYmFsIHZhcmlhYmxlcy4NCnVzZSB2YXJzIHF3KCRERUJVRyAkQ0ZHICRSU1JD
ICRWRVJTSU9OKTsNCg0KIw0KIyBUaGluZ3MgaW5zaWRlIEJFR0lOIGRvbid0IGhhcHBlbiBvbiBl
dmVyeSByZXF1ZXN0IGluIHBlcnNpc3RlbnQgZW52aXJvbm1lbnRzDQojIChzdWNoIGFzIG1vZF9w
ZXJsKTsgc28gbGV0J3MgZG8gdGhlIGdsb2JhbHMsIGVnLiByZWFkIGNvbmZpZywgaGVyZS4NCkJF
R0lOIHsNCiAgIyBMYXVuZGVyIGRhdGEgZm9yIC1UOyAtQXV0b0xhdW5kZXIgZG9lc24ndCBjYXRj
aCB0aGlzIG9uZS4NCiAgaWYgKGV4aXN0cyAkRU5We1czQ19WQUxJREFUT1JfSE9NRX0pIHsNCiAg
ICAkRU5We1czQ19WQUxJREFUT1JfSE9NRX0gPX4gL14oLiopJC87DQogICAgJEVOVntXM0NfVkFM
SURBVE9SX0hPTUV9ID0gJDE7DQogIH0NCg0KICBteSAkYmFzZV9wYXRoID0gJEVOVntXM0NfVkFM
SURBVE9SX0hPTUV9IHx8ICdDOi93d3cvdmFsaWRhdG9yJzsNCiAgIw0KICAjIFJlYWQgQ29uZmln
IEZpbGVzLg0KICBldmFsIHsNCiAgICBteSAlY29uZmlnX29wdHMgPSAoDQogICAgICAgLUNvbmZp
Z0ZpbGUgPT4gKCdjOi93d3cvdmFsaWRhdG9yL2h0ZG9jcy9jb25maWcvdmFsaWRhdG9yLmNvbmYn
KSwNCiAgICAgICAtTWVyZ2VEdXBsaWNhdGVPcHRpb25zID0+IFRSVUUsDQogICAgICAgLU1lcmdl
RHVwbGljYXRlQmxvY2tzICA9PiBUUlVFLA0KICAgICAgIC1TcGxpdFBvbGljeSAgICAgID0+ICdl
cXVhbHNpZ24nLA0KICAgICAgIC1Vc2VBcGFjaGVJbmNsdWRlID0+IFRSVUUsDQogICAgICAgLUlu
Y2x1ZGVSZWxhdGl2ZSAgPT4gVFJVRSwNCiAgICAgICAtSW50ZXJQb2xhdGVWYXJzICA9PiBUUlVF
LA0KICAgICAgIC1BdXRvTGF1bmRlciAgICAgID0+IFRSVUUsDQogICAgICAgLUF1dG9UcnVlICAg
ICAgICAgPT4gVFJVRSwNCiAgICAgICAtRGVmYXVsdENvbmZpZyAgICA9PiB7DQogICAgICAgICAg
UHJvdG9jb2xzID0+IHtBbGxvdyA9PiAnaHR0cCxodHRwcyd9LA0KICAgICAgICAgIFBhdGhzID0+
IHsNCiAgICAgICAgICAgIEJhc2UgPT4gJGJhc2VfcGF0aCwNCiAgICAgICAgICAgIFRlbXBsYXRl
cyA9PiAiJGJhc2VfcGF0aC9zaGFyZS90ZW1wbGF0ZXMiLA0KICAgICAgICAgICAgU0dNTCA9PiB7
UGFyc2VyID0+ICdjOi93d3cvb3BlbnNwL29uc2dtbHMuZXhlJywgDQogICAgICAgICAgICAgICAg
ICAgICBMaWJyYXJ5ID0+ICIkYmFzZV9wYXRoL2h0ZG9jcy9zZ21sLWxpYiJ9LA0KICAgICAgICAg
IH0sDQogICAgICAgfSwNCiAgICAgICk7DQogICAgbXkgJWNmZyA9IENvbmZpZzo6R2VuZXJhbC0+
bmV3KCVjb25maWdfb3B0cyktPmdldGFsbCgpOw0KICAgICRDRkcgPSBcJWNmZzsNCiAgfTsNCiAg
aWYgKCRAKSB7DQogICAgZGllIDw8Ii5FT0YuIjsNCkNvdWxkIG5vdCByZWFkIGNvbmZpZ3VyYXRp
b24uICBTZXQgdGhlIFczQ19WQUxJREFUT1JfQ0ZHIGVudmlyb25tZW50IHZhcmlhYmxlDQp0byBw
b2ludCB0byB0aGUgdmFsaWRhdG9yLmNvbmYgZmlsZSBvciBjb3B5IGh0ZG9jcy9jb25mLyogdG8g
L2V0Yy93M2MvLiBNYWtlIHN1cmUNCnRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgYWxs
IGluY2x1ZGVkIGZpbGVzIGFyZSByZWFkYWJsZSBieSB0aGUgd2ViDQpzZXJ2ZXIgdXNlci4gVGhl
IGVycm9yIHdhczpcbickQCcNCi5FT0YuDQogIH0NCg0KICAjDQogICMgQ2hlY2sgYSBmaWxlc3lz
dGVtIHBhdGggZm9yIGV4aXN0YW5jZSBhbmQgInJlYWRhYmlsaXR5Ii4NCiAgc3ViIHBhdGhjaGVj
ayAoQCkgew0KICAgIG15ICVwYXRocyA9IG1hcCB7ICRfID0+IFstZCAkXywgLXIgX10gfSBAXzsN
CiAgICBteSBAX2QgPSBncmVwIHtub3QgJHBhdGhzeyRffS0+WzBdfSBrZXlzICVwYXRoczsNCiAg
ICBteSBAX3IgPSBncmVwIHtub3QgJHBhdGhzeyRffS0+WzFdfSBrZXlzICVwYXRoczsNCiAgICBy
ZXR1cm4gVFJVRSBpZiAoc2NhbGFyKEBfZCkgKyBzY2FsYXIoQF9yKSA9PSAwKTsNCiAgICBkaWUg
PDwiLkVPRi4iIGlmIHNjYWxhciBAX2Q7DQpEb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJl
Y3Rvcnk6IEBfZA0KLkVPRi4NCiAgICBkaWUgPDwiLkVPRi4iIGlmIHNjYWxhciBAX3I7DQpEaXJl
Y3Rvcnkgbm90IHJlYWRhYmxlIChwZXJtaXNzaW9uIGRlbmllZCk6IEBfcg0KLkVPRi4NCiAgfQ0K
DQogICMNCiAgIyBDaGVjayBwYXRocyBpbiBjb25maWcuLi4NCiAgIyBAQEZJWE1FOiBUaGlzIGRv
ZXMgbm90IGRvIGEgdmVyeSBnb29kIGpvYiBlcnJvci1tZXNzYWdlLXdpc2UgaWYgYSBwYXRoIGlz
DQogICMgQEBGSVhNRTogbWlzc2luZy4uLjsNCiAgew0KICAgIG15IEBkaXJzID0gKCk7DQogICAg
cHVzaCBAZGlycywgJENGRy0+e1BhdGhzfS0+e0Jhc2V9Ow0KICAgIHB1c2ggQGRpcnMsICRDRkct
PntQYXRoc30tPntUZW1wbGF0ZXN9Ow0KICAgIHB1c2ggQGRpcnMsICRDRkctPntQYXRoc30tPntT
R01MfS0+e0xpYnJhcnl9Ow0KICAgICZwYXRoY2hlY2soQGRpcnMpOw0KICB9DQoNCiAgIw0KICAj
IFNwbGl0IGFsbG93ZWQgcHJvdG9jb2xzIGludG8gYSBsaXN0Lg0KICBpZiAobXkgJGFsbG93ZWQg
PSBkZWxldGUoJENGRy0+e1Byb3RvY29sc30tPntBbGxvd30pKSB7DQogICAgJENGRy0+e1Byb3Rv
Y29sc30tPntBbGxvd30gPSBbc3BsaXQoL1xzKixccyovLCAkYWxsb3dlZCldOw0KICB9DQoNCiAg
Iw0KICAjIE1ha2Ugc3VyZSBvbnNnbWxzIGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZS4NCiAgdW5s
ZXNzICgteCAkQ0ZHLT57UGF0aHN9LT57U0dNTH0tPntQYXJzZXJ9KSB7DQogICAgZGllIHFxKENv
bmZpZ3VyZWQgU0dNTCBQYXJzZXIgIiRDRkctPntQYXRoc30tPntTR01MfS0+e1BhcnNlcn0iIG5v
dCBleGVjdXRhYmxlIVxuKTsNCiAgfQ0KDQogIHsgIyBNYWtlIHR5cGVzIGNvbmZpZyBpbmRleGVk
IGJ5IEZQSS4NCiAgICBteSAkX3R5cGVzID0ge307DQogICAgbWFwIHsgJF90eXBlcy0+eyRDRkct
PntUeXBlc30tPnskX30tPntQdWJJRH19ID0gJENGRy0+e1R5cGVzfS0+eyRffSB9DQogICAgICBr
ZXlzICV7JENGRy0+e1R5cGVzfX07DQogICAgJENGRy0+e1R5cGVzfSA9ICRfdHlwZXM7DQogIH0N
Cg0KICAjDQogICMgQ2hhbmdlIHN0cmluZ3MgdG8gaW50ZXJuYWwgY29uc3RhbnRzIGluIE1JTUUg
dHlwZSBtYXBwaW5nLg0KICBmb3IgKGtleXMgJXskQ0ZHLT57TUlNRX19KSB7DQogICAgaWYgICAg
KCRDRkctPntNSU1FfS0+eyRffSBlcSAnU0dNTCcpIHsgJENGRy0+e01JTUV9LT57JF99ID0gTU9E
RV9TR01MIH0NCiAgICBlbHNpZiAoJENGRy0+e01JTUV9LT57JF99IGVxICdYTUwnKSAgeyAkQ0ZH
LT57TUlNRX0tPnskX30gPSBNT0RFX1hNTCB9DQogICAgZWxzaWYgKCRDRkctPntNSU1FfS0+eyRf
fSBlcSAnVEJEJykgIHsgJENGRy0+e01JTUV9LT57JF99ID0gTU9ERV9UQkQgfQ0KICAgIGVsc2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICRDRkctPntNSU1FfS0+eyRffSA9IE1P
REVfVEJEIH0NCiAgfQ0KDQogICMNCiAgIyBTZXQgZGVidWcgZmxhZy4NCiAgaWYgKCRDRkctPnsn
QWxsb3cgRGVidWcnfSA9PSBUUlVFKSB7DQogICAgJERFQlVHID0gVFJVRSBpZiAkRU5We1czQ19W
QUxJREFUT1JfREVCVUd9IHx8ICRDRkctPnsnRW5hYmxlIERlYnVnJ307DQogIH0gZWxzZSB7DQog
ICAgJERFQlVHID0gRkFMU0U7DQogIH0NCg0KICAjDQogICMgU3RyaW5ncw0KICAkVkVSU0lPTiA9
ICBxJFJldmlzaW9uOiAxLjQzMi4yLjIyICQ7DQogICRWRVJTSU9OID1+IHMvUmV2aXNpb246IChb
XGRcLl0rKSAvJDEvOw0KDQogICMNCiAgIyBVc2UgcGFzc2l2ZSBGVFAgYnkgZGVmYXVsdC4NCiAg
JEVOVntGVFBfUEFTU0lWRX0gPSAxIHVubGVzcyBleGlzdHMoJEVOVntGVFBfUEFTU0lWRX0pOw0K
fSAjIGVuZCBvZiBCRUdJTiBibG9jay4NCg0KIw0KIyBHZXQgcmlkIG9mIChwb3NzaWJseSBpbnNl
Y3VyZSkgJFBBVEguDQpkZWxldGUgJEVOVntQQVRIfTsNCg0KI0BAREVCVUc6IER1bXAgJENGRyBk
YXRhc3RydWN0dXJlLiBVc2VkIG9ubHkgYXMgYSBkZXZlbG9wZXIgYWlkLg0KI3VzZSBEYXRhOjpE
dW1wZXIgcXcoRHVtcGVyKTsNCiNwcmludCBEdW1wZXIoJENGRyk7DQojZXhpdDsNCiNAQERFQlVH
Ow0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIFByb2Nlc3MgQ0dJIHZhcmlhYmxlcyBh
bmQgaW5pdGlhbGl6ZS4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMNCiMgQ3JlYXRlIGEgbmV3IENHSSBvYmplY3QuDQpteSAk
cSA9IG5ldyBDR0k7DQoNCiMNCiMgVGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgd2lsbCBob2xkIGFs
bCBzZXNzaW9uIGRhdGEuDQpteSAkRmlsZTsNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBQb3B1bGF0ZSAkRmlsZS0+e0Vudn0gLS0gU2Vzc2lvbiBN
ZXRhZGF0YS4gIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
Iw0KDQojDQojIFRoZSBVUkwgdG8gdGhpcyBDR0kgU2NyaXB0Lg0KJEZpbGUtPntFbnZ9LT57J1Nl
bGYgVVJJJ30gPSAkcS0+dXJsKC1xdWVyeSA9PiAwKTsNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjDQojIEluaXRpYWxpemUgdGhlIGRhdGFzdHJ1Y3R1cmUuICMNCiMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojDQojIENoYXJzZXQgZGF0YSAoY2FzaW5nIHBv
bGljeTogbG93ZXJjYXNlIGVhcmx5KS4NCiRGaWxlLT57Q2hhcnNldH0tPntVc2V9ICAgICAgPSAn
JzsgIyBUaGUgY2hhcnNldCB1c2VkIGZvciB2YWxpZGF0aW9uLg0KJEZpbGUtPntDaGFyc2V0fS0+
e0F1dG99ICAgICA9ICcnOyAjIEF1dG9kZXRlY3Rpb24gdXNpbmcgWE1MIHJ1bGVzIChBcHBlbmRp
eCBGKQ0KJEZpbGUtPntDaGFyc2V0fS0+e0hUVFB9ICAgICA9ICcnOyAjIEZyb20gSFRUUCdzICJj
aGFyc2V0IiBwYXJhbWV0ZXIuDQokRmlsZS0+e0NoYXJzZXR9LT57TUVUQX0gICAgID0gJyc7ICMg
RnJvbSBIVE1MJ3MgPG1ldGEgaHR0cC1lcXVpdj4uDQokRmlsZS0+e0NoYXJzZXR9LT57WE1MfSAg
ICAgID0gJyc7ICMgRnJvbSB0aGUgWE1MIERlY2xhcmF0aW9uLg0KJEZpbGUtPntDaGFyc2V0fS0+
e092ZXJyaWRlfSA9ICcnOyAjIEZyb20gQ0dJL3VzZXIgb3ZlcnJpZGUuDQoNCiMNCiMgTWlzYyBz
aW1wbGUgdHlwZXMuDQokRmlsZS0+e01vZGV9ID0gTU9ERV9TR01MOyAjIERlZmF1bHQgcGFyc2Ug
bW9kZSBpcyBTR01MLg0KDQojDQojIEFycmF5IChyZWYpIHVzZWQgdG8gc3RvcmUgY2hhcmFjdGVy
IG9mZnNldHMgZm9yIHRoZSBYTUwgcmVwb3J0Lg0KJEZpbGUtPntPZmZzZXRzfS0+WzBdID0gWzAs
IDBdOyAjIFRoZSBmaXJzdCBpdGVtIGlzbid0IHVzZWQuLi4NCg0KIw0KIyBMaXN0cmVmcy4NCiRG
aWxlLT57TGluZXN9ICAgICAgPSBbXTsgIyBMaW5lIG51bWJlcnMgZm9yIGVuY29kaW5nIGVycm9y
cy4NCiRGaWxlLT57V2FybmluZ3N9ICAgPSBbXTsgIyBXYXJuaW5ncy4uLg0KJEZpbGUtPntOYW1l
c3BhY2VzfSA9IFtdOyAjIE90aGVyIChub24tcm9vdCkgTmFtZXNwYWNlcy4NCg0KIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIw0KIyMjIyBHZW5lcmF0ZSBUZW1wbGF0ZSBmb3IgUmVzdWx0LiAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIw0KDQpteSAkbGFuZyA9ICdlbl9VUyc7ICMgQEBUT0RPOiBjb25uZWc7DQoNCm15ICVjYWNo
ZV9vcHRzID0gKCk7DQppZiAoZXZhbCB7IHJlcXVpcmUgU3RvcmFibGUgfSkgew0KICAlY2FjaGVf
b3B0cyA9ICgNCiAgICBmaWxlX2NhY2hlICAgICA9PiBUUlVFLA0KICAgIGZpbGVfY2FjaGVfZGly
ID0+IEZpbGU6OlNwZWMtPmNhdGRpcihGaWxlOjpTcGVjLT50bXBkaXIoKSwgJ3ZhbGlkYXRvcicp
LA0KICApOw0KfQ0KDQpteSAkVCA9IEhUTUw6OlRlbXBsYXRlLT5uZXcoDQogIGZpbGVuYW1lICAg
ICAgICAgID0+IEZpbGU6OlNwZWMtPmNhdGZpbGUoJENGRy0+e1BhdGhzfS0+e1RlbXBsYXRlc30s
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxhbmcsICdyZXN1
bHQudG1wbCcpLA0KICBkaWVfb25fYmFkX3BhcmFtcyA9PiBGQUxTRSwNCiAgbG9vcF9jb250ZXh0
X3ZhcnMgPT4gVFJVRSwNCiAgJWNhY2hlX29wdHMsDQopOw0KbXkgJEUgPSBIVE1MOjpUZW1wbGF0
ZS0+bmV3KA0KICBmaWxlbmFtZSAgICAgICAgICA9PiBGaWxlOjpTcGVjLT5jYXRmaWxlKCRDRkct
PntQYXRoc30tPntUZW1wbGF0ZXN9LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICRsYW5nLCAnZmF0YWwtZXJyb3IudG1wbCcpLA0KICBkaWVfb25fYmFkX3BhcmFt
cyA9PiBGQUxTRSwNCiAgJWNhY2hlX29wdHMsDQopOw0KbXkgJEggPSBIVE1MOjpUZW1wbGF0ZS0+
bmV3KA0KICBmaWxlbmFtZSAgICAgICAgICA9PiBGaWxlOjpTcGVjLT5jYXRmaWxlKCRDRkctPntQ
YXRoc30tPntUZW1wbGF0ZXN9LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICRsYW5nLCAnaHR0cF80MDFfYXV0aHJlcXVpcmVkLnRtcGwnKSwNCiAgZGllX29uX2Jh
ZF9wYXJhbXMgPT4gRkFMU0UsDQogICVjYWNoZV9vcHRzLA0KKTsNCg0KIyB0ZW1wbGF0ZXMgZm9y
IGFsdGVybmF0ZSBvdXRwdXQgZm9ybWF0cw0KbXkgJFhNTFQgPSBIVE1MOjpUZW1wbGF0ZS0+bmV3
KA0KICBmaWxlbmFtZSAgICAgICAgICA9PiBGaWxlOjpTcGVjLT5jYXRmaWxlKCRDRkctPntQYXRo
c30tPntUZW1wbGF0ZXN9LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJGxhbmcsICd4bWxfb3V0cHV0LnRtcGwnKSwNCiAgZGllX29uX2JhZF9wYXJhbXMgPT4gRkFM
U0UsDQogIGxvb3BfY29udGV4dF92YXJzID0+IFRSVUUsDQogIGNhY2hlICAgICAgICAgICAgID0+
IFRSVUUsDQopOw0KbXkgJFNPQVBUID0gSFRNTDo6VGVtcGxhdGUtPm5ldygNCiAgZmlsZW5hbWUg
ICAgICAgICAgPT4gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkQ0ZHLT57UGF0aHN9LT57VGVtcGxhdGVz
fSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsYW5nLCAnc29h
cF9vdXRwdXQudG1wbCcpLA0KICBkaWVfb25fYmFkX3BhcmFtcyA9PiBGQUxTRSwNCiAgbG9vcF9j
b250ZXh0X3ZhcnMgPT4gVFJVRSwNCiAgY2FjaGUgICAgICAgICAgICAgPT4gVFJVRSwNCik7DQpt
eSAkVUNOVCA9IEhUTUw6OlRlbXBsYXRlLT5uZXcoDQogIGZpbGVuYW1lICAgICAgICAgID0+IEZp
bGU6OlNwZWMtPmNhdGZpbGUoJENGRy0+e1BhdGhzfS0+e1RlbXBsYXRlc30sDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFuZywgJ3Vjbl9vdXRwdXQudG1wbCcp
LA0KICBkaWVfb25fYmFkX3BhcmFtcyA9PiBGQUxTRSwNCiAgbG9vcF9jb250ZXh0X3ZhcnMgPT4g
VFJVRSwNCiAgY2FjaGUgICAgICAgICAgICAgPT4gVFJVRSwNCik7DQpteSAkU09BUEZUID0gSFRN
TDo6VGVtcGxhdGUtPm5ldygNCiAgZmlsZW5hbWUgICAgICAgICAgPT4gRmlsZTo6U3BlYy0+Y2F0
ZmlsZSgkQ0ZHLT57UGF0aHN9LT57VGVtcGxhdGVzfSwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICRsYW5nLCAnc29hcF9mYXVsdC50bXBsJyksDQogIGRpZV9vbl9i
YWRfcGFyYW1zID0+IEZBTFNFLA0KICBsb29wX2NvbnRleHRfdmFycyA9PiBUUlVFLA0KICBjYWNo
ZSAgICAgICAgICAgICA9PiBUUlVFLA0KKTsNCm15ICRTT0FQRElTID0gSFRNTDo6VGVtcGxhdGUt
Pm5ldygNCiAgZmlsZW5hbWUgICAgICAgICAgPT4gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkQ0ZHLT57
UGF0aHN9LT57VGVtcGxhdGVzfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICRsYW5nLCAnc29hcF9kaXNhYmxlZC50bXBsJyksDQogIGRpZV9vbl9iYWRfcGFyYW1z
ID0+IEZBTFNFLA0KICBsb29wX2NvbnRleHRfdmFycyA9PiBUUlVFLA0KICBjYWNoZSAgICAgICAg
ICAgICA9PiBUUlVFLA0KKTsNCm15ICRFQVJMVCA9IEhUTUw6OlRlbXBsYXRlLT5uZXcoDQogIGZp
bGVuYW1lICAgICAgICAgID0+IEZpbGU6OlNwZWMtPmNhdGZpbGUoJENGRy0+e1BhdGhzfS0+e1Rl
bXBsYXRlc30sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFu
ZywgJ2VhcmxfeG1sLnRtcGwnKSwNCiAgZGllX29uX2JhZF9wYXJhbXMgPT4gRkFMU0UsDQogIGxv
b3BfY29udGV4dF92YXJzID0+IFRSVUUsDQogIGNhY2hlICAgICAgICAgICAgID0+IFRSVUUsDQog
IGdsb2JhbF92YXJzICAgICAgID0+IFRSVUUsDQopOw0KbXkgJE4zVCA9IEhUTUw6OlRlbXBsYXRl
LT5uZXcoDQogIGZpbGVuYW1lICAgICAgICAgID0+IEZpbGU6OlNwZWMtPmNhdGZpbGUoJENGRy0+
e1BhdGhzfS0+e1RlbXBsYXRlc30sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkbGFuZywgJ2VhcmxfbjMudG1wbCcpLA0KICBkaWVfb25fYmFkX3BhcmFtcyA9PiBG
QUxTRSwNCiAgbG9vcF9jb250ZXh0X3ZhcnMgPT4gVFJVRSwNCiAgY2FjaGUgICAgICAgICAgICAg
PT4gVFJVRSwNCiAgZ2xvYmFsX3ZhcnMgICAgICAgPT4gVFJVRSwNCik7DQoNCiRGaWxlLT57VH0g
PSAkVDsNCiRGaWxlLT57U30gPSAkU09BUFQ7DQokRmlsZS0+e0V9ID0gJEU7DQokRmlsZS0+e0h9
ID0gJEg7DQoNCiMgUmVhZCBmcmllbmRseSBlcnJvciBtZXNzYWdlIGZpbGUNCm15ICVyc3JjID0g
Q29uZmlnOjpHZW5lcmFsLT5uZXcoDQogIC1NZXJnZUR1cGxpY2F0ZUJsb2NrcyA9PiAxLA0KICAt
Q29uZmlnRmlsZSAgICAgICAgICAgPT4gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkQ0ZHLT57UGF0aHN9
LT57VGVtcGxhdGVzfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJGxhbmcsICdlcnJvcl9tZXNzYWdlcy5jZmcnKSwNCiAgKS0+Z2V0YWxsKCk7DQojIENv
bmZpZzo6R2VuZXJhbCB3b3JrYXJvdW5kcyBmb3IgPG1zZyAwPiBpc3N1ZXM6DQojIGh0dHA6Ly9s
aXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3B1YmxpYy1xYS1kZXYvMjAwNkZlYi8wMDIyLmh0
bWwNCiMgaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvcHVibGljLXFhLWRldi8y
MDA2RmViLzAwMjUuaHRtbA0KIyBodHRwczovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxh
eS5odG1sP2lkPTE3ODUyDQokcnNyY3ttc2d9ezB9IHx8PQ0KICBkZWxldGUoJHJzcmN7J21zZyAw
J30pIHx8ICAgICAgICAgICAgICAgICAgICMgPCAyLjMxDQogIHsgb3JpZ2luYWwgPT4gZGVsZXRl
KCRyc3Jje21zZ317b3JpZ2luYWx9KSwgIyAgIDIuMzENCiAgICB2ZXJib3NlICA9PiBkZWxldGUo
JHJzcmN7bXNnfXt2ZXJib3NlfSksDQogIH07DQokUlNSQyA9IFwlcnNyYzsNCg0KJFQtPnBhcmFt
KGNmZ19ob21lX3BhZ2UgPT4gJENGRy0+eydIb21lIFBhZ2UnfSk7DQokU09BUFQtPnBhcmFtKGNm
Z19ob21lX3BhZ2UgPT4gJENGRy0+eydIb21lIFBhZ2UnfSk7DQoNCnVuZGVmICRsYW5nOw0KdW5k
ZWYgJWNhY2hlX29wdHM7DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjDQojIFBvcHVsYXRlICRGaWxlLT57T3B0fSAtLSBDR0kgT3B0aW9ucy4gIw0KIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIw0KIyBQcmVwcm9jZXNzIHRoZSBD
R0kgcGFyYW1ldGVycy4NCiRxID0gJnByZXBDR0koJEZpbGUsICRxKTsNCg0KIw0KIyBTZXQgc2Vz
c2lvbiBzd2l0Y2hlcy4NCiRGaWxlLT57T3B0fS0+eydPdXRsaW5lJ30gICAgICAgID0gJHEtPnBh
cmFtKCdvdXRsaW5lJykgPyBUUlVFICAgICAgICAgICAgICAgICAgIDogIEZBTFNFOw0KJEZpbGUt
PntPcHR9LT57J1Nob3cgU291cmNlJ30gICAgPSAkcS0+cGFyYW0oJ3NzJykgICAgICA/IFRSVUUg
ICAgICAgICAgICAgICAgICAgOiAgRkFMU0U7DQokRmlsZS0+e09wdH0tPnsnU2hvdyBQYXJzZXRy
ZWUnfSA9ICRxLT5wYXJhbSgnc3AnKSAgICAgID8gVFJVRSAgICAgICAgICAgICAgICAgICA6ICBG
QUxTRTsNCiRGaWxlLT57T3B0fS0+eydObyBBdHRyaWJ1dGVzJ30gID0gJHEtPnBhcmFtKCdub2F0
dCcpICAgPyBUUlVFICAgICAgICAgICAgICAgICAgIDogIEZBTFNFOw0KJEZpbGUtPntPcHR9LT57
J1Nob3cgRVNJUyd9ICAgICAgPSAkcS0+cGFyYW0oJ2VzaXMnKSAgICA/IFRSVUUgICAgICAgICAg
ICAgICAgICAgOiAgRkFMU0U7DQokRmlsZS0+e09wdH0tPnsnU2hvdyBFcnJvcnMnfSAgICA9ICRx
LT5wYXJhbSgnZXJyb3JzJykgID8gVFJVRSAgICAgICAgICAgICAgICAgICA6ICBGQUxTRTsNCiRG
aWxlLT57T3B0fS0+eydWZXJib3NlJ30gICAgICAgID0gJHEtPnBhcmFtKCd2ZXJib3NlJykgPyBU
UlVFICAgICAgICAgICAgICAgICAgIDogIEZBTFNFOw0KJEZpbGUtPntPcHR9LT57J0RlYnVnJ30g
ICAgICAgICAgPSAkcS0+cGFyYW0oJ2RlYnVnJykgICA/IFRSVUUgICAgICAgICAgICAgICAgICAg
OiAgRkFMU0U7DQokRmlsZS0+e09wdH0tPnsnTm8yMDAnfSAgICAgICAgICA9ICRxLT5wYXJhbSgn
Tm8yMDAnKSAgID8gVFJVRSAgICAgICAgICAgICAgICAgICA6ICBGQUxTRTsNCiRGaWxlLT57T3B0
fS0+eydDaGFyc2V0J30gICAgICAgID0gJHEtPnBhcmFtKCdjaGFyc2V0JykgPyBsYyAkcS0+cGFy
YW0oJ2NoYXJzZXQnKTogICAgICcnOw0KJEZpbGUtPntPcHR9LT57J0RPQ1RZUEUnfSAgICAgICAg
PSAkcS0+cGFyYW0oJ2RvY3R5cGUnKSA/ICRxLT5wYXJhbSgnZG9jdHlwZScpICAgOiAgICAgJyc7
DQokRmlsZS0+e09wdH0tPnsnT3V0cHV0J30gICAgICAgICA9ICRxLT5wYXJhbSgnb3V0cHV0Jykg
ID8gJHEtPnBhcmFtKCdvdXRwdXQnKSAgICA6ICdodG1sJzsNCiRGaWxlLT57T3B0fS0+eydNYXgg
RXJyb3JzJ30gICAgID0gJHEtPnBhcmFtKCdtZScpICAgICAgPyAkcS0+cGFyYW0oJ21lJykgICAg
ICAgIDogICAgICcnOw0KDQojDQojICJGYWxsYmFjayIgaW5mbyBmb3IgQ2hhcmFjdGVyIEVuY29k
aW5nIChmYmMpLCBDb250ZW50LVR5cGUgKGZidCksDQojIGFuZCBET0NUWVBFIChmYmQpLiBJZiBU
UlVFLCB0aGUgT3ZlcnJpZGUgdmFsdWVzIGFyZSB0cmVhdGVkIGFzDQojIEZhbGxiYWNrcyBpbnN0
ZWFkIG9mIE92ZXJyaWRlcy4NCiRGaWxlLT57T3B0fS0+e0ZCfS0+e0NoYXJzZXR9ID0gJHEtPnBh
cmFtKCdmYmMnKSA/IFRSVUUgOiBGQUxTRTsNCiRGaWxlLT57T3B0fS0+e0ZCfS0+e1R5cGV9ICAg
ID0gJHEtPnBhcmFtKCdmYnQnKSA/IFRSVUUgOiBGQUxTRTsNCiRGaWxlLT57T3B0fS0+e0ZCfS0+
e0RPQ1RZUEV9ID0gJHEtPnBhcmFtKCdmYmQnKSA/IFRSVUUgOiBGQUxTRTsNCg0KIw0KIyBJZiAi
O2RlYnVnIiB3YXMgZ2l2ZW4sIGxldCBpdCBvdmVycnVsZSB0aGUgdmFsdWUgZnJvbSB0aGUgY29u
ZmlnIGZpbGUsDQojIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCdzICIwIiBvciAiMSIgKG9uIG9y
IG9mZiksIGJ1dCBvbmx5IGlmIGNvbmZpZw0KIyBhbGxvd3MgdGhlIGRlYnVnZ2luZyBvcHRpb25z
Lg0KaWYgKCRDRkctPnsnQWxsb3cgRGVidWcnfSkgew0KICAkREVCVUcgPSAkcS0+cGFyYW0oJ2Rl
YnVnJykgaWYgZGVmaW5lZCAkcS0+cGFyYW0oJ2RlYnVnJyk7DQogICRGaWxlLT57T3B0fS0+e1Zl
cmJvc2V9ID0gVFJVRSBpZiAkREVCVUc7DQp9IGVsc2Ugew0KICAkREVCVUcgPSBGQUxTRTsgIyBU
aGUgZGVmYXVsdC4NCn0NCg0KJmFib3J0X2lmX2Vycm9yX2ZsYWdnZWQoJEZpbGUsIE9fTk9ORSk7
ICMgVG9vIGVhcmx5IHRvICZwcmludF90YWJsZS4NCg0KIw0KIyBHZXQgdGhlIGZpbGUgYW5kIG1l
dGFkYXRhLg0KaWYgKCRxLT5wYXJhbSgndXBsb2FkZWRfZmlsZScpKSB7DQogICRGaWxlID0gJmhh
bmRsZV9maWxlKCRxLCAkRmlsZSk7DQp9IGVsc2lmICgkcS0+cGFyYW0oJ2ZyYWdtZW50JykpIHsN
CiAgJEZpbGUgPSAmaGFuZGxlX2ZyYWcoJHEsICRGaWxlKTsNCn0gZWxzaWYgKCRxLT5wYXJhbSgn
dXJpJykpIHsNCiAgJEZpbGUgPSAmaGFuZGxlX3VyaSgkcSwgJEZpbGUpOw0KfQ0KDQojDQojIEFi
b3J0IGlmIGFuIGVycm9yIHdhcyBmbGFnZ2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4NCiZhYm9y
dF9pZl9lcnJvcl9mbGFnZ2VkKCRGaWxlLCAwKTsNCg0KIw0KIyBHZXQgcmlkIG9mIHRoZSBDR0kg
b2JqZWN0Lg0KdW5kZWYgJHE7DQoNCiMNCiMgV2UgZG9uJ3QgbmVlZCBTVERJTiBhbnkgbW9yZSwg
c28gZ2V0IHJpZCBvZiBpdCB0byBhdm9pZCBnZXR0aW5nIGNsb2JiZXJlZA0KIyBieSBBcGFjaGU6
OlJlZ2lzdHJ5J3MgaWRpb3RpYyBpbnRlcmZlcmVuY2UgdW5kZXIgbW9kX3BlcmwuDQp1bnRpZSAq
U1RESU47DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyMgT3V0cHV0IHZhbGlkYXRpb24g
cmVzdWx0cy4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMN
CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIw0KIyBGaW5kIHRoZSBYTUwgRW5jb2RpbmcuDQok
RmlsZSA9ICZmaW5kX3htbF9lbmNvZGluZygkRmlsZSk7DQoNCiMNCiMgRGVjaWRlIG9uIGEgY2hh
cnNldCB0byB1c2UgKGZpcnN0IHBhcnQpDQojDQppZiAoJEZpbGUtPntDaGFyc2V0fS0+e0hUVFB9
KSB7ICMgSFRUUCwgaWYgZ2l2ZW4sIGlzIGF1dGhvcml0YXRpdmUuDQogICRGaWxlLT57Q2hhcnNl
dH0tPntVc2V9ID0gJEZpbGUtPntDaGFyc2V0fS0+e0hUVFB9Ow0KfSBlbHNpZiAoJEZpbGUtPntD
b250ZW50VHlwZX0gPX4gbShedGV4dC8oWy0uYS16QS1aMC05XVwrKT94bWwkKSkgew0KICAjIEFj
dCBhcyBpZiAkaHR0cF9jaGFyc2V0IHdhcyAndXMtYXNjaWknLiAoTUlNRSBydWxlcykNCiAgJEZp
bGUtPntDaGFyc2V0fS0+e1VzZX0gPSAndXMtYXNjaWknOw0KDQogICZhZGRfd2FybmluZygnVzAx
Jywgew0KICAgIFcwMV91cGxvYWQgPT4gJEZpbGUtPnsnSXMgVXBsb2FkJ30sDQogICAgVzAxX2Fn
ZW50ICA9PiAkRmlsZS0+e1NlcnZlcn0sDQogICAgVzAxX2N0ICAgICA9PiAkRmlsZS0+e0NvbnRl
bnRUeXBlfSwNCiAgfSk7DQoNCn0gZWxzaWYgKCRGaWxlLT57Q2hhcnNldH0tPntYTUx9KSB7DQog
ICRGaWxlLT57Q2hhcnNldH0tPntVc2V9ID0gJEZpbGUtPntDaGFyc2V0fS0+e1hNTH07DQp9IGVs
c2lmICgkRmlsZS0+e0NoYXJzZXR9LT57QXV0b30gPX4gL151dGYtMTZbYmxdZSQvICYmICRGaWxl
LT57Qk9NfSA9PSAyKSB7DQogICRGaWxlLT57Q2hhcnNldH0tPntVc2V9ID0gJ3V0Zi0xNic7DQp9
IGVsc2lmICgkRmlsZS0+e0NvbnRlbnRUeXBlfSA9fiBtKF5hcHBsaWNhdGlvbi8oWy0uYS16QS1a
MC05XStcKyk/eG1sJCkpIHsNCiAgJEZpbGUtPntDaGFyc2V0fS0+e1VzZX0gPSAidXRmLTgiOw0K
fSBlbHNpZiAoJmlzX3htbCgkRmlsZSkgYW5kIG5vdCAkRmlsZS0+e0NvbnRlbnRUeXBlfSA9fiBt
KF50ZXh0LykpIHsNCiAgJEZpbGUtPntDaGFyc2V0fS0+e1VzZX0gPSAndXRmLTgnOyAjIFVURi04
IChpbWFnZS9zdmcreG1sIGV0Yy4pDQp9DQoNCiRGaWxlLT57Q29udGVudH0gPSAmbm9ybWFsaXpl
X25ld2xpbmVzKCRGaWxlLT57Qnl0ZXN9LA0KICAgICAgICAgICAgICAgICAgICAgICBleGFjdF9j
aGFyc2V0KCRGaWxlLCAkRmlsZS0+e0NoYXJzZXR9LT57VXNlfSkpOw0KDQojDQojIFRyeSB0byBl
eHRyYWN0IE1FVEEgY2hhcnNldA0KIyAod29ya3Mgb25seSBpZiBhc2NpaS1iYXNlZCBhbmQgcmVh
c29uYWJseSBjbGVhbiBiZWZvcmUgPG1ldGE+KQ0KJEZpbGUgPSAmcHJlcGFyc2VfbWV0YSgkRmls
ZSk7ICMgRmlyc3QgY2FsbC4gUmVwZWF0ZWQgbGF0ZXIgdG8gZmV0Y2ggdGhlIEZQSS4NCnVubGVz
cyAoJEZpbGUtPntDaGFyc2V0fS0+e1VzZX0pIHsNCiAgJEZpbGUtPntDaGFyc2V0fS0+e1VzZX0g
PSAkRmlsZS0+e0NoYXJzZXR9LT57TUVUQX07DQp9DQoNCiMNCiMgSGFuZGxlIGFueSBGYWxsYmFj
ayBvciBPdmVycmlkZSBmb3IgdGhlIGNoYXJzZXQuDQppZiAoJmNvbmZsaWN0KCRGaWxlLT57T3B0
fS0+e0NoYXJzZXR9LCAnKGRldGVjdCBhdXRvbWF0aWNhbGx5KScpKSB7DQogICMgY2hhcnNldD1m
b28gd2FzIGdpdmVuIHRvIHRoZSBDR0kgYW5kIGl0IHdhc24ndCAiYXV0b2RldGVjdCIuDQoNCiAg
Iw0KICAjIEV4dHJhY3QgdGhlIHVzZXItcmVxdWVzdGVkIGNoYXJzZXQgZnJvbSBDR0kgcGFyYW0u
DQogIG15ICgkb3ZlcnJpZGUsIHVuZGVmKSA9IHNwbGl0KC9ccy8sICRGaWxlLT57T3B0fS0+e0No
YXJzZXR9LCAyKTsNCiAgJEZpbGUtPntDaGFyc2V0fS0+e092ZXJyaWRlfSA9IGxjKCRvdmVycmlk
ZSk7DQoNCiAgaWYgKCRGaWxlLT57T3B0fS0+e0ZCfS0+e0NoYXJzZXR9KSB7ICMgY2hhcnNldCBm
YWxsYmFjayBtb2RlDQogICAgdW5sZXNzICgkRmlsZS0+e0NoYXJzZXR9LT57VXNlfSkgew0KICAg
ICAgJmFkZF93YXJuaW5nKCdXMDInLCB7VzAyX2NoYXJzZXQgPT4gJEZpbGUtPntDaGFyc2V0fS0+
e092ZXJyaWRlfX0pOw0KDQogICAgICAkRmlsZS0+e1RlbnRhdGl2ZX0gfD0gVF9FUlJPUjsgIyBU
YWcgaXQgYXMgSW52YWxpZC4NCiAgICAgICRGaWxlLT57Q2hhcnNldH0tPntVc2V9ID0gJEZpbGUt
PntDaGFyc2V0fS0+e092ZXJyaWRlfTsNCiAgICB9DQogIH0gZWxzZSB7ICMgY2hhcnNldCAiaGFy
ZCBvdmVycmlkZSIgbW9kZQ0KICAgIGlmICghICRGaWxlLT57Q2hhcnNldH0tPntVc2V9KSB7ICMg
b3ZlcnJpZGluZyAibm90aGluZyINCiAgICAgICZhZGRfd2FybmluZygnVzA0Jywge1cwNF9jaGFy
c2V0ID0+ICRGaWxlLT57Q2hhcnNldH0tPntPdmVycmlkZX0sIFcwNF9vdmVycmlkZSA9PiBUUlVF
fSk7DQogICAgICAkRmlsZS0+e1RlbnRhdGl2ZX0gfD0gVF9FUlJPUjsNCiAgICAgICRGaWxlLT57
Q2hhcnNldH0tPntVc2V9ID0gJEZpbGUtPntDaGFyc2V0fS0+e092ZXJyaWRlfTsNCiAgICAgfQ0K
ICAgICBlbHNlIHsgI2FjdHVhbGx5IG92ZXJyaWRpbmcgc29tZXRoaW5nDQogICAgICAjIFdhcm4g
YWJvdXQgT3ZlcnJpZGUgdW5sZXNzIGl0J3MgdGhlIHNhbWUgYXMgdGhlIHJlYWwgY2hhcnNldC4u
Lg0KDQogICAgICB1bmxlc3MgKCRGaWxlLT57Q2hhcnNldH0tPntPdmVycmlkZX0gZXEgJEZpbGUt
PntDaGFyc2V0fS0+e1VzZX0pIHsNCiAgICAgICAgJmFkZF93YXJuaW5nKCdXMDMnLCB7DQogICAg
ICAgICAgVzAzX3VzZSA9PiAkRmlsZS0+e0NoYXJzZXR9LT57VXNlfSwNCiAgICAgICAgICBXMDNf
b3B0ID0+ICRGaWxlLT57Q2hhcnNldH0tPntPdmVycmlkZX0sDQogICAgICAgIH0pOw0KDQogICAg
ICAgICRGaWxlLT57VGVudGF0aXZlfSB8PSBUX0VSUk9SOw0KICAgICAgICAkRmlsZS0+e0NoYXJz
ZXR9LT57VXNlfSA9ICRGaWxlLT57Q2hhcnNldH0tPntPdmVycmlkZX07DQogICAgICB9DQogICAg
fQ0KICB9DQp9DQoNCnVubGVzcyAoJEZpbGUtPntDaGFyc2V0fS0+e1VzZX0pIHsgIyBObyBjaGFy
c2V0IGdpdmVuLi4uDQogICZhZGRfd2FybmluZygnVzA0Jywge1cwNF9jaGFyc2V0ID0+ICdVVEYt
OCd9KTsNCiAgJEZpbGUtPntUZW50YXRpdmV9IHw9IFRfRVJST1I7ICMgQ2FuIG5ldmVyIGJlIHZh
bGlkLg0KICAkRmlsZS0+e0NoYXJzZXR9LT57VXNlfSA9ICd1dGYtOCc7DQp9DQoNCiMNCiMgQWJv
cnQgaWYgYW4gZXJyb3Igd2FzIGZsYWdnZWQgd2hpbGUgZmluZGluZyB0aGUgZW5jb2RpbmcuDQom
YWJvcnRfaWZfZXJyb3JfZmxhZ2dlZCgkRmlsZSwgT19DSEFSU0VUfE9fRE9DVFlQRSk7DQoNCiMN
CiMgQ2hlY2sgdGhlIGRldGVjdGVkIEVuY29kaW5nIGFuZCB0cmFuc2NvZGUuDQppZiAoJmNvbmZs
aWN0KCRGaWxlLT57Q2hhcnNldH0tPntVc2V9LCAndXRmLTgnKSkgew0KICAkRmlsZSA9ICZ0cmFu
c2NvZGUoJEZpbGUpOw0KICAmYWJvcnRfaWZfZXJyb3JfZmxhZ2dlZCgkRmlsZSwgT19DSEFSU0VU
KTsNCn0NCg0KJEZpbGUgPSAmY2hlY2tfdXRmOCgkRmlsZSk7ICMgYWx3YXlzIGNoZWNrDQokRmls
ZSA9ICZieXRlX2Vycm9yKCRGaWxlKTsNCg0KIw0KIyBBYm9ydCBpZiBhbiBlcnJvciB3YXMgZmxh
Z2dlZCBkdXJpbmcgdHJhbnNjb2RpbmcNCiZhYm9ydF9pZl9lcnJvcl9mbGFnZ2VkKCRGaWxlLCBP
X1NPVVJDRXxPX0NIQVJTRVQpOw0KDQojDQojIE92ZXJhbGwgcGFyc2luZyBhbGdvcml0aG0gZm9y
IGRvY3VtZW50cyByZXR1cm5lZCBhcyB0ZXh0L2h0bWw6DQojDQojIEZvciBkb2N1bWVudHMgdGhh
dCBjb21lIHRvIHVzIGFzIHRleHQvaHRtbCwNCiMNCiMgIDEuIGNoZWNrIGlmIHRoZXJlJ3MgYSBk
b2N0eXBlDQojICAyLiBpZiB0aGVyZSBpcyBhIGRvY3R5cGUsIHBhcnNlL3ZhbGlkYXRlIGFnYWlu
c3QgdGhhdCBEVEQNCiMgIDMuIGlmIG5vIGRvY3R5cGUsIGNoZWNrIGZvciBhbiB4bWxucz0gYXR0
cmlidXRlIG9uIHRoZSBmaXJzdCBlbGVtZW50DQojICA0LiBpZiB0aGVyZSBpcyBhbiB4bWxucz0g
YXR0cmlidXRlLCBjaGVjayBmb3IgWE1MIHdlbGwtZm9ybWVkbmVzcw0KIyAgNS4gaWYgdGhlcmUg
aXMgbm8geG1sbnM9IGF0dHJpYnV0ZSwgYW5kIG5vIERPQ1RZUEUsIHB1bnQuDQojDQoNCiMNCiMg
T3ZlcnJpZGUgRE9DVFlQRSBpZiB1c2VyIGFza2VkIGZvciBpdC4NCmlmICgkRmlsZS0+e09wdH0t
PntET0NUWVBFfQ0KICAgIGFuZCBub3QgJEZpbGUtPntPcHR9LT57RE9DVFlQRX0gPX4gLyhJbmxp
bmV8ZGV0ZWN0KS9pKSB7DQogICRGaWxlID0gJm92ZXJyaWRlX2RvY3R5cGUoJEZpbGUpOw0KfQ0K
DQojDQojIFRyeSB0byBleHRyYWN0IGEgRE9DVFlQRSBvciB4bWxucy4NCiRGaWxlID0gJnByZXBh
cnNlX2RvY3R5cGUoJEZpbGUpOw0KDQojDQojIFNldCBwYXJzZSBtb2RlLg0KaWYgKCRGaWxlLT57
RE9DVFlQRX0pIHsNCiAgbXkgJGZwaSA9ICRGaWxlLT57RE9DVFlQRX07DQogIGlmIChleGlzdHMg
JENGRy0+e1R5cGVzfS0+eyRmcGl9KSB7DQogICAgbXkgJGNmZyAgPSAkQ0ZHLT57VHlwZXN9LT57
JGZwaX07DQogICAgbXkgJG1vZGUgPSAkY2ZnLT57J1BhcnNlIE1vZGUnfTsNCg0KICAgIGlmICAg
ICgkbW9kZSBlcSAnU0dNTCcpIHsgJG1vZGUgPSBNT0RFX1NHTUwgfQ0KICAgIGVsc2lmICgkbW9k
ZSBlcSAnWE1MJykgIHsgJG1vZGUgPSBNT0RFX1hNTCB9DQogICAgZWxzZSAgICAgICAgICAgICAg
ICAgICAgeyAkbW9kZSA9IE1PREVfVEJEIH0NCg0KICAgIGlmICgkRmlsZS0+e01vZGV9ID09IE1P
REVfVEJEKSB7DQogICAgICBpZiAgICAoJG1vZGUgPT0gTU9ERV9TR01MKSB7ICRGaWxlLT57TW9k
ZX0gPSBNT0RFX1NHTUwgfQ0KICAgICAgZWxzaWYgKCRtb2RlID09IE1PREVfWE1MKSAgeyAkRmls
ZS0+e01vZGV9ID0gTU9ERV9YTUwgfQ0KICAgICAgZWxzZSB7DQogICAgICAgICRGaWxlLT57TW9k
ZX0gPSBNT0RFX1NHTUw7DQogICAgICAgICZhZGRfd2FybmluZygnVzA2Jywge30pOw0KICAgICAg
fQ0KICAgIH0gZWxzZSB7DQogICAgICB1bmxlc3MgKCRtb2RlID09ICRGaWxlLT57TW9kZX0pIHsN
CiAgICAgICAgbXkgJGR0ZCA9ICRtb2RlOw0KICAgICAgICBteSAkY3QgID0gJEZpbGUtPntNb2Rl
fTsNCiAgICAgICAgZm9yICgkZHRkLCAkY3QpIHsNCiAgICAgICAgICBpZiAgICAoJF8gPT0gTU9E
RV9TR01MKSB7ICRfID0gJ1NHTUwnIH0NCiAgICAgICAgICBlbHNpZiAoJF8gPT0gTU9ERV9YTUwp
ICB7ICRfID0gICdYTUwnIH0NCiAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICB7ICRf
ID0gJ1NHTUwnIH0NCiAgICAgICAgfQ0KICAgICAgICB1bmxlc3MgKCRGaWxlLT57TW9kZX0gPT0g
TU9ERV9UQkQpIHsNCiAgICAgICAgICAmYWRkX3dhcm5pbmcoJ1cwNycsIHsNCiAgICAgICAgICAg
IFcwN19taW1lID0+ICRGaWxlLT57Q29udGVudFR5cGV9LA0KICAgICAgICAgICAgVzA3X2N0ICAg
PT4gJGN0LA0KICAgICAgICAgICAgVzA3X2R0ZCAgPT4gJGR0ZCwNCiAgICAgICAgICB9KTsNCiAg
ICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgfSBlbHNlIHsNCiAgICAmYWRkX3dhcm5pbmcoJ1cw
OCcsIHtXMDhfbWltZSA9PiAkRmlsZS0+e0NvbnRlbnRUeXBlfX0pDQogICAgICBpZiAkRmlsZS0+
e01vZGV9ID09IE1PREVfVEJEOw0KICB9DQp9DQoNCiMNCiMgU2FuaXR5IGNoZWNrIENoYXJzZXQg
aW5mb3JtYXRpb24gYW5kIGFkZCBhbnkgd2FybmluZ3MgbmVjZXNzYXJ5Lg0KJEZpbGUgPSAmY2hh
cnNldF9jb25mbGljdHMoJEZpbGUpOw0KDQojDQojIEFiYW5kb24gYWxsIGhvcGUgeWUgd2hvIGVu
dGVyIGhlcmUuLi4NCiRGaWxlID0gJnBhcnNlKCRGaWxlKTsNCnN1YiBwYXJzZSAoXCQpIHsNCiAg
bXkgJEZpbGUgPSBzaGlmdDsNCg0KICAjDQogICMgQnkgZGVmYXVsdCwgdXNlIFNHTUwgY2F0YWxv
ZyBmaWxlIGFuZCBTR01MIERlY2xhcmF0aW9uLg0KICBteSAkY2F0YWxvZyAgPSBGaWxlOjpTcGVj
LT5jYXRmaWxlKCRDRkctPntQYXRoc30tPntTR01MfS0+e0xpYnJhcnl9LCAnc2dtbC5zb2MnKTsN
CiAgIw0KICAjIE5vdGU6IGlmIHlvdSBmZWVsIHRoZSB1cmdlIHRvIHJlbW92ZSAtUiBmcm9tIGhl
cmUsIHBsZWFzZSB1bmRlcnN0YW5kIHRoYXQNCiAgIyBkb2luZyBzbyBvcGVucyBhIHBvdGVudGlh
bCBzZWN1cml0eSBob2xlLiAgRG9uJ3QgZG8gdGhhdDsgaW5zdGVhZCBqdXN0DQogICMgbWFrZSBz
dXJlIHlvdSdyZSBydW5uaW5nIE9wZW5TUCAxLjUgb3IgbGF0ZXIuDQojICAgICAgICAgICAgICAg
ICAtUg0KICBteSBAc3BvcHQgPSBxdygNCiAgICAgICAgICAgICAgICAgLXd2YWxpZA0KICAgICAg
ICAgICAgICAgICAtd25vbi1zZ21sLWNoYXItcmVmDQogICAgICAgICAgICAgICAgIC13bm8tZHVw
bGljYXRlDQogICAgICAgICAgICAgICAgKTsNCg0KICAjDQogICMgU3dpdGNoIHRvIFhNTCBzZW1h
bnRpY3MgaWYgZmlsZSBpcyBYTUwuDQogIGlmICgmaXNfeG1sKCRGaWxlKSkgew0KICAgICRjYXRh
bG9nICA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJENGRy0+e1BhdGhzfS0+e1NHTUx9LT57TGlicmFy
eX0sICd4bWwuc29jJyk7DQogICAgcHVzaChAc3BvcHQsICctd3htbCcpOw0KICB9DQoNCiAgIw0K
ICAjIERlZmF1bHRzIGZvciBTUDsgdHVybiBvZmYgZml4ZWQgY2hhcnNldCBtb2RlIGFuZCBzZXQg
ZW5jb2RpbmcgdG8gVVRGLTguDQogICRFTlZ7U1BfQ0hBUlNFVF9GSVhFRH0gPSAnTk8nOw0KICAk
RU5We1NQX0VOQ09ESU5HfSAgICAgID0gJ1VURi04JzsNCiAgJEVOVntTUF9CQ1RGfSAgICAgICAg
ICA9ICdVVEYtOCc7DQoNCiAgIw0KICAjIFRlbGwgb25zZ21scyBhYm91dCB0aGUgU0dNTCBMaWJy
YXJ5Lg0KICAkRU5We1NHTUxfU0VBUkNIX1BBVEh9ID0gJENGRy0+e1BhdGhzfS0+e1NHTUx9LT57
TGlicmFyeX07DQoNCiAgIw0KICAjIFNldCB0aGUgY29tbWFuZCB0byBleGVjdXRlLg0KICBteSBA
Y21kID0gKCRDRkctPntQYXRoc30tPntTR01MfS0+e1BhcnNlcn0sICctbicsICctYycsICRjYXRh
bG9nLCBAc3BvcHQpOw0KDQogICMNCiAgIyBTZXQgZGVidWcgaW5mbyBmb3IgSFRNTCByZXBvcnQu
DQogICRULT5wYXJhbShvcHRfZGVidWcgPT4gJERFQlVHKTsNCiAgJFQtPnBhcmFtKGRlYnVnID0+
DQogICAgICAgICAgICBbDQogICAgICAgICAgICAge25hbWUgPT4gJ0NvbW1hbmQnLCAgICAgICAg
ICAgdmFsdWUgPT4gIkBjbWQifSwNCiAgICAgICAgICAgICBtYXAoe25hbWUgPT4gJF8sIHZhbHVl
ID0+ICRFTlZ7JF99fSwNCiAgICAgICAgICAgICAgIHF3KFNQX0NIQVJTRVRfRklYRUQgU1BfRU5D
T0RJTkcgU1BfQkNURiBTR01MX1NFQVJDSF9QQVRIDQogICAgICAgICAgICAgICAgICBub19wcm94
eSBodHRwX3Byb3h5IGh0dHBzX3Byb3h5IGZ0cF9wcm94eSBGVFBfUEFTU0lWRSkpLA0KICAgICAg
ICAgICAgIHtuYW1lID0+ICdDb250ZW50LUVuY29kaW5nJywgIHZhbHVlID0+ICRGaWxlLT57Q29u
dGVudEVuY319LA0KICAgICAgICAgICAgIHtuYW1lID0+ICdUcmFuc2Zlci1FbmNvZGluZycsIHZh
bHVlID0+ICRGaWxlLT57VHJhbnNmZXJFbmN9fSwNCiAgICAgICAgICAgIF0sDQogICAgICAgICAg
ICk7DQoNCiAgI0BARklYTUU6IFRoaXMgbmVlZHMgYSBVSSBhbmQgdGVzdGluZyENCiAgIw0KICAj
IFNldCBvbnNnbWxzJyAtRSBzd2l0Y2ggdG8gdGhlIG51bWJlciBvZiBlcnJvcnMgcmVxdWVzdGVk
Lg0KICBpZiAoJEZpbGUtPntPcHR9LT57J01heCBFcnJvcnMnfSA9fiBtKF5hbGwkKWkpIHsNCiAg
ICBwdXNoIEBjbWQsICctRTAnOw0KICB9IGVsc2lmICgkRmlsZS0+e09wdH0tPnsnTWF4IEVycm9y
cyd9ID1+IG0oXihcZCspJCkpIHsNCiAgICBteSAkbnVtRXJyID0gJDE7DQogICAgaWYgKCRudW1F
cnIgPj0gMjAwKSB7DQogICAgICAkbnVtRXJyID0gMjAwOw0KICAgIH0gZWxzaWYgKCRudW1FcnIg
PD0gMCkgew0KICAgICAgJG51bUVyciA9IDA7ICNAQEZJWE1FOiBTaG91bGQgYWRkIGZlYXR1cmUg
dG8gc3VwcmVzcyBlcnJvciBvdXRwdXQgaW4gdGhpcyBjYXNlLjsNCiAgICB9DQogICAgcHVzaCBA
Y21kLCAnLUUnIC4gJG51bUVycjsNCiAgfSBlbHNlIHsNCiAgICBwdXNoIEBjbWQsICctRScgLiAo
JENGRy0+eydNYXggRXJyb3JzJ30gfHwgMCk7ICMgIi1FMCIgbWVhbnMgImFsbCIuDQogIH0NCiAg
I0BARklYTUU7DQoNCiAgIw0KICAjIFRlbXBvcmFyeSBmaWxlaGFuZGxlcy4NCiAgbXkgJHNwaW4g
ID0gSU86OkZpbGUtPm5ld190bXBmaWxlOw0KICBteSAkc3BvdXQgPSBJTzo6RmlsZS0+bmV3X3Rt
cGZpbGU7DQogIG15ICRzcGVyciA9IElPOjpGaWxlLT5uZXdfdG1wZmlsZTsNCg0KICAjDQogICMg
RHVtcCBmaWxlIHRvIGEgdGVtcCBmaWxlIGZvciBwYXJzaW5nLg0KICBmb3IgKEB7JEZpbGUtPntD
b250ZW50fX0pIHsNCiAgICBwcmludCAkc3BpbiAkXywgIlxuIjsNCiAgfQ0KDQogICMNCiAgIyBz
ZWVrKCkgdG8gYmVnaW5uaW5nIG9mIHRoZSBmaWxlLg0KICBzZWVrICRzcGluLCAwLCAwOw0KDQog
ICMNCiAgIyBSdW4gaXQgdGhyb3VnaCBTUCwgcmVkaXJlY3Rpbmcgb3V0cHV0IHRvIHRlbXBvcmFy
eSBmaWxlcy4NCiAgbXkgJHBpZCA9IGRvIHsNCiAgICBubyB3YXJuaW5ncyAnb25jZSc7DQogICAg
bG9jYWwgKCpTUElOLCAqU1BPVVQsICpTUEVSUikgID0gKCRzcGluLCAkc3BvdXQsICRzcGVycik7
DQogICAgb3BlbjMoIjwmU1BJTiIsICI+JlNQT1VUIiwgIj4mU1BFUlIiLCBAY21kKTsNCiAgfTsN
CiAgdW5kZWYgJHNwaW47DQogIHdhaXRwaWQgJHBpZCwgMDsNCg0KICAjDQogICMgUmV3aW5kIHRl
bXBvcmFyeSBmaWxlaGFuZGxlcy4NCiAgc2VlayAkXywgMCwgMCBmb3IgJHNwb3V0LCAkc3BlcnI7
DQoNCiAgIw0KICAjIFByb3BlciB0ZXh0IG1vZGUgZm9yIFdpbjMyIHN5c3RlbXMNCiAgYmlubW9k
ZSgkc3BvdXQsICc6Y3JsZicpIGlmICReTyBlcSAiTVNXaW4zMiI7DQoNCiAgJEZpbGUgPSAmcGFy
c2VfZXJyb3JzKCRGaWxlLCAkc3BlcnIpOyAjIFBhcnNlIGVycm9yIG91dHB1dC4NCiAgdW5kZWYg
JHNwZXJyOyAjIEdldCByaWQgb2Ygbm8gbG9uZ2VyIG5lZWRlZCBmaWxlaGFuZGxlLg0KDQogICRG
aWxlLT57RVNJU30gPSBbXTsNCiAgbXkgJGVsZW1lbnRzX2ZvdW5kID0gMDsNCiAgd2hpbGUgKDwk
c3BvdXQ+KSB7DQogICAgJGVsZW1lbnRzX2ZvdW5kKysgaWYgL15cKC87DQoNCiAgICBpZiAoL15B
eG1sbnMoKSBcdysgKC4qKS8gb3IgL15BeG1sbnM6KFteIF0rKSBcdysgKC4qKS8pIHsNCiAgICAg
IGlmIChub3QgJEZpbGUtPntOYW1lc3BhY2V9KSB7DQogICAgICAgIGlmICgkZWxlbWVudHNfZm91
bmQgPT0gMCBhbmQgJDEgZXEgIiIpIHsNCiAgICAgICAgICAkRmlsZS0+e05hbWVzcGFjZX0gPSAk
MjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAjIEBARklYTUU6IHNob3VsZCBub3QgaGFw
cGVuOw0KICAgICAgICAgIHB1c2goQHskRmlsZS0+e05hbWVzcGFjZXN9fSwgJDIpOw0KICAgICAg
ICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICBwdXNoKEB7JEZpbGUtPntOYW1lc3BhY2VzfX0s
ICQyKSBpZiAoJDIgbmUgJEZpbGUtPntOYW1lc3BhY2V9KTsNCiAgICAgIH0NCiAgICB9DQoNCiAg
ICBuZXh0IGlmIC8gSU1QTElFRCQvICYmIG5vdCAkREVCVUc7DQogICAgbmV4dCBpZiAvXkFTREFG
T1JNIENEQVRBIC87DQogICAgbmV4dCBpZiAvXkFTREFQUkVGIENEQVRBIC87DQogICAgY2hvbXA7
ICMgUmVtb3ZlcyB0cmFpbGluZyBuZXdsaW5lcw0KICAgIHB1c2ggQHskRmlsZS0+e0VTSVN9fSwg
JF87DQogIH0NCiAgdW5kZWYgJHNwb3V0Ow0KDQogIGlmIChAeyRGaWxlLT57RVNJU319ICYmICRG
aWxlLT57RVNJU30tPlstMV0gPX4gL15DJC8pIHsNCiAgICBwb3AoQHskRmlsZS0+e0VTSVN9fSk7
DQogICAgJEZpbGUtPnsnSXMgVmFsaWQnfSA9IFRSVUU7DQogIH0gZWxzZSB7DQogICAgJEZpbGUt
PnsnSXMgVmFsaWQnfSA9IEZBTFNFOw0KICB9DQoNCiAgIw0KICAjIFNldCBWZXJzaW9uIHRvIGJl
IHRoZSBGUEkgaW5pdGlhbGx5Lg0KICAkRmlsZS0+e1ZlcnNpb259ID0gJEZpbGUtPntET0NUWVBF
fTsNCg0KICAjDQogICMgRXh0cmFjdCBhbnkgdmVyc2lvbiBhdHRyaWJ1dGUgZnJvbSB0aGUgRVNJ
Uy4NCiAgZm9yIChAeyRGaWxlLT57RVNJU319KSB7DQogICAgbm8gd2FybmluZ3MgJ3VuaW5pdGlh
bGl6ZWQnOw0KICAgIG5leHQgdW5sZXNzIC9eQVZFUlNJT04gQ0RBVEEgKC4qKS9pOw0KICAgIHB1
c2ggQHskRmlsZS0+e1ZlcnNpb25fRVNJU319LCAkMTsNCiAgICBpZiAoJDEgPX4gJy0vL1czQy8v
RFREIChTR01MfFhNTCkgRmFsbGJhY2svL0VOJykgew0KICAgICAgJEZpbGUtPntUZW50YXRpdmV9
IHw9IChUX0VSUk9SIHwgVF9GQUxMKTsNCiAgICAgIG15ICRkdGQgPSAkMSBlcSAnU0dNTCcgPyAn
SFRNTCA0LjAxIFRyYW5zaXRpb25hbCcgOiAnWEhUTUwgMS4wIFN0cmljdCc7DQogICAgICAmYWRk
X3dhcm5pbmcoJ1cwOScsIHsgVzA5X2R0ZCA9PiAkZHRkIH0pOw0KICAgIH0NCiAgfQ0KDQogIHJl
dHVybiAkRmlsZTsNCn0NCg0KIw0KIyBGb3JjZSAiWE1MIiBpZiB0eXBlIGlzIGFuIFhNTCB0eXBl
IGFuZCBhbiBGUEkgd2FzIG5vdCBmb3VuZC4NCiMgT3RoZXJ3aXNlIHNldCB0aGUgdHlwZSB0byBi
ZSB0aGUgRlBJLg0KaWYgKCZpc194bWwoJEZpbGUpIGFuZCBub3QgJEZpbGUtPntET0NUWVBFfSkg
ew0KICAkRmlsZS0+e1ZlcnNpb259ID0gJ1hNTCc7DQp9IGVsc2Ugew0KICAkRmlsZS0+e1ZlcnNp
b259ID0gJEZpbGUtPntET0NUWVBFfSB1bmxlc3MgJEZpbGUtPntWZXJzaW9ufTsNCn0NCg0KIw0K
IyBHZXQgdGhlIHByZXR0eSB0ZXh0IHZlcnNpb24gb2YgdGhlIEZQSSBpZiBhIG1hcHBpbmcgZXhp
c3RzLg0KaWYgKG15ICRwcmV0dHl2ZXIgPSAkQ0ZHLT57VHlwZXN9LT57JEZpbGUtPntWZXJzaW9u
fX0tPntEaXNwbGF5fSkgew0KICAkRmlsZS0+e1ZlcnNpb259ID0gJHByZXR0eXZlcjsNCn0NCg0K
Iw0KIyBXYXJuIGFib3V0IHVua25vd24sIGluY29ycmVjdCwgb3IgbWlzc2luZyBOYW1lc3BhY2Vz
Lg0KaWYgKCRGaWxlLT57TmFtZXNwYWNlfSkgew0KICBteSAkbnMgID0gJENGRy0+e1R5cGVzfS0+
eyRGaWxlLT57VmVyc2lvbn19LT57TmFtZXNwYWNlfSB8fCBGQUxTRTsNCg0KICBpZiAoJmlzX3ht
bCgkRmlsZSkpIHsNCiAgICBpZiAoJG5zIGVxICRGaWxlLT57TmFtZXNwYWNlfSkgew0KICAgICAg
JmFkZF93YXJuaW5nKCdXMTAnLCB7DQogICAgICAgIFcxMF9ucyAgID0+ICRGaWxlLT57TmFtZXNw
YWNlfSwNCiAgICAgICAgVzEwX3R5cGUgPT4gJEZpbGUtPntUeXBlfSwNCiAgICAgIH0pOw0KICAg
IH0NCiAgfSBlbHNlIHsNCiAgICAmYWRkX3dhcm5pbmcoJ1cxMScsIHtXMTFfbnMgPT4gJEZpbGUt
PntOYW1lc3BhY2V9fSk7DQogIH0NCn0gZWxzZSB7DQogIGlmICgmaXNfeG1sKCRGaWxlKSBhbmQg
JENGRy0+e1R5cGVzfS0+eyRGaWxlLT57VmVyc2lvbn19LT57TmFtZXNwYWNlfSkgew0KICAgICZh
ZGRfd2FybmluZygnVzEyJywge30pOw0KICB9DQp9DQoNCm15ICR0ZW1wbGF0ZTsNCg0KaWYgKCRG
aWxlLT57T3B0fS0+e091dHB1dH0gZXEgJ3htbCcpIHsNCiAgJHRlbXBsYXRlID0gJFhNTFQ7DQp9
IGVsc2lmICgkRmlsZS0+e09wdH0tPntPdXRwdXR9IGVxICdlYXJsJykgew0KICAkdGVtcGxhdGUg
PSAkRUFSTFQ7DQp9IGVsc2lmICgkRmlsZS0+e09wdH0tPntPdXRwdXR9IGVxICduMycpIHsNCiAg
JHRlbXBsYXRlID0gJE4zVDsNCn0gZWxzaWYgKCRGaWxlLT57T3B0fS0+e091dHB1dH0gZXEgJ3Vj
bicpIHsNCiAgJHRlbXBsYXRlID0gJFVDTlQ7DQp9IGVsc2lmICgkRmlsZS0+e09wdH0tPntPdXRw
dXR9IGVxICdzb2FwMTInKSB7DQogIGlmICgkQ0ZHLT57J0VuYWJsZSBTT0FQJ30gIT0gMSkgeyAj
IEFQSSBkaXNhYmxlZCAtIGlkZWFsbHkgdGhpcyBzaG91bGQgaGF2ZSBiZWVuIHNlbnQgYmVmb3Jl
IHBlcmZvcm1pbmcgdmFsaWRhdGlvbi4uLg0KICAgIHByaW50IENHSTo6aGVhZGVyKC1zdGF0dXMg
PT4gNTAzLCAtY29udGVudF9sYW5ndWFnZSA9PiAiZW4iLA0KICAgICAgICAgIC10eXBlID0+ICJ0
ZXh0L2h0bWwiLCAtY2hhcnNldCA9PiAidXRmLTgiDQogICAgKTsNCiAgICAkdGVtcGxhdGUgPSAk
U09BUERJUzsNCiAgfSBlbHNpZiAoJEZpbGUtPnsnRXJyb3IgRmxhZ2dlZCd9KSB7DQogICAgJHRl
bXBsYXRlID0gJFNPQVBGVDsNCiAgfSBlbHNlIHsNCiAgICAkdGVtcGxhdGUgPSAkU09BUFQ7DQog
IH0NCn0gZWxzZSB7DQogICAgJHRlbXBsYXRlID0gJFQ7DQp9DQoNCiZwcmVwX3RlbXBsYXRlKCRG
aWxlLCAkdGVtcGxhdGUpOw0KJmZpbl90ZW1wbGF0ZSgkRmlsZSwgJHRlbXBsYXRlKTsNCg0KJHRl
bXBsYXRlLT5wYXJhbShmaWxlX3dhcm5pbmdzID0+ICRGaWxlLT57V2FybmluZ3N9KTsNCiR0ZW1w
bGF0ZS0+cGFyYW0oZmlsZV9zb3VyY2UgPT4gJnNvdXJjZSgkRmlsZSkpDQogIGlmICR0ZW1wbGF0
ZS0+cGFyYW0oJ29wdF9zaG93X3NvdXJjZScpOw0KJHRlbXBsYXRlLT5wYXJhbSgnb3B0X3Nob3df
ZXNpcycgPT4gVFJVRSkNCiAgaWYgJEZpbGUtPntPcHR9LT57J1Nob3cgRVNJUyd9Ow0KJHRlbXBs
YXRlLT5wYXJhbSgnb3B0X3Nob3dfcmF3X2Vycm9ycycgPT4gVFJVRSkNCiAgaWYgJEZpbGUtPntP
cHR9LT57J1Nob3cgRXJyb3JzJ307DQokdGVtcGxhdGUtPnBhcmFtKCdmaWxlX3Jhd19lcnJvcnMn
ID0+ICZzaG93X2Vycm9ycygkRmlsZSkpDQogIGlmICR0ZW1wbGF0ZS0+cGFyYW0oJ29wdF9zaG93
X3Jhd19lcnJvcnMnKTsNCiAgJFQtPnBhcmFtKGZpbGVfb3V0bGluZSAgID0+ICZvdXRsaW5lKCRG
aWxlKSkgaWYgJFQtPnBhcmFtKCdvcHRfc2hvd19vdXRsaW5lJyk7DQpwcmludCAkdGVtcGxhdGUt
Pm91dHB1dDsNCg0KIw0KIyBHZXQgcmlkIG9mICRGaWxlIG9iamVjdCBhbmQgZXhpdC4NCnVuZGVm
ICRGaWxlOw0KZXhpdDsNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgU3Vicm91dGluZSBkZWZp
bml0aW9ucw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIw0Kc3ViIHByZXBfdGVtcGxhdGUgKCQk
KSB7DQogIG15ICRGaWxlID0gc2hpZnQ7DQogIG15ICRUICAgID0gc2hpZnQ7DQoNCiAgIw0KICAj
IFhNTCBtb2RlLi4uDQogICRULT5wYXJhbShpc194bWwgPT4gJmlzX3htbCgkRmlsZSkpOw0KDQog
ICMNCiAgIyBVcGxvYWQ/DQogICRULT5wYXJhbShpc191cGxvYWQgPT4gJEZpbGUtPnsnSXMgVXBs
b2FkJ30pOw0KDQogICMNCiAgIyBUaGUgVVJJLi4uDQogICRULT5wYXJhbShmaWxlX3VyaSA9PiAk
RmlsZS0+e1VSSX0pOw0KICAkVC0+cGFyYW0oZmlsZV91cmlfcGFyYW0gPT4gdXJpX2VzY2FwZSgk
RmlsZS0+e1VSSX0pKTsNCg0KICAjDQogICMgU2V0IFVSTCBmb3IgcGFnZSB0aXRsZS4NCiAgJFQt
PnBhcmFtKHBhZ2VfdGl0bGVfdXJsID0+ICRGaWxlLT57VVJJfSk7DQoNCiAgIw0KICAjIE1ldGFk
YXRhLi4uDQogICRULT5wYXJhbShmaWxlX21vZGlmaWVkICAgID0+ICRGaWxlLT57TW9kaWZpZWR9
KTsNCiAgJFQtPnBhcmFtKGZpbGVfc2VydmVyICAgICAgPT4gJEZpbGUtPntTZXJ2ZXJ9KTsNCiAg
JFQtPnBhcmFtKGZpbGVfc2l6ZSAgICAgICAgPT4gJEZpbGUtPntTaXplfSk7DQogICRULT5wYXJh
bShmaWxlX2NvbnRlbnR0eXBlID0+ICRGaWxlLT57Q29udGVudFR5cGV9KTsNCiAgJFQtPnBhcmFt
KGZpbGVfY2hhcnNldCAgICAgPT4gJEZpbGUtPntDaGFyc2V0fS0+e1VzZX0pOw0KICAkVC0+cGFy
YW0oZmlsZV9kb2N0eXBlICAgICA9PiAkRmlsZS0+e0RPQ1RZUEV9KTsNCg0KICAjDQogICMgT3V0
cHV0IG9wdGlvbnMuLi4NCiAgJFQtPnBhcmFtKG9wdF9zaG93X3NvdXJjZSAgICA9PiAkRmlsZS0+
e09wdH0tPnsnU2hvdyBTb3VyY2UnfSk7DQogICRULT5wYXJhbShvcHRfc2hvd19vdXRsaW5lICAg
PT4gJEZpbGUtPntPcHR9LT57J091dGxpbmUnfSk7DQogICRULT5wYXJhbShvcHRfc2hvd19wYXJz
ZXRyZWUgPT4gJEZpbGUtPntPcHR9LT57J1Nob3cgUGFyc2V0cmVlJ30pOw0KICAkVC0+cGFyYW0o
b3B0X3Nob3dfbm9hdHQgICAgID0+ICRGaWxlLT57T3B0fS0+eydObyBBdHRyaWJ1dGVzJ30pOw0K
ICAkVC0+cGFyYW0ob3B0X3ZlcmJvc2UgICAgICAgID0+ICRGaWxlLT57T3B0fS0+eydWZXJib3Nl
J30pOw0KICAkVC0+cGFyYW0ob3B0X25vMjAwICAgICAgICAgID0+ICRGaWxlLT57T3B0fS0+eydO
bzIwMCd9KTsNCg0KICAjDQogICMgVGlwIG9mIHRoZSBEYXkuLi4NCiAgbXkgJHRpcCA9ICZnZXRf
dGlwKCk7DQogICRULT5wYXJhbSh0aXBfdXJpICA9PiAkdGlwLT5bMF0pOw0KICAkVC0+cGFyYW0o
dGlwX3NsdWcgPT4gJHRpcC0+WzFdKTsNCg0KICAjDQogICMgTmFtZXNwYWNlcy4uLg0KICAkVC0+
cGFyYW0oZmlsZV9uYW1lc3BhY2UgID0+ICRGaWxlLT57TmFtZXNwYWNlfSk7DQogIG15ICVzZWVu
X25zID0gKCk7DQogIG15IEBidWxrX25zID0gIEB7JEZpbGUtPntOYW1lc3BhY2VzfX07DQogICRG
aWxlLT57TmFtZXNwYWNlc30gPSBbXTsgIyByZWluaXRpYWxpemUgdGhlIGxpc3Qgb2Ygbm9uLXJv
b3QgbmFtZXNwYWNlcw0KICBteSAgJHNpbmdsZV9uYW1lc3BhY2U7DQogICMgLi4uIGFuZCB0aGVu
IGdldCBhIHVuaXEgdmVyc2lvbiBvZiBpdA0KICBmb3JlYWNoICRzaW5nbGVfbmFtZXNwYWNlIChA
YnVsa19ucykgew0KICAgICBwdXNoKEB7JEZpbGUtPntOYW1lc3BhY2VzfX0sICRzaW5nbGVfbmFt
ZXNwYWNlKSB1bmxlc3MgJHNlZW5fbnN7JHNpbmdsZV9uYW1lc3BhY2V9Kys7DQogIH0NCiAgbXkg
QG5zcyAgICAgICAgICAgICAgICAgICA9ICBtYXAoe3VyaSA9PiAkX30sIEB7JEZpbGUtPntOYW1l
c3BhY2VzfX0pOw0KICAkVC0+cGFyYW0oZmlsZV9uYW1lc3BhY2VzID0+IFxAbnNzKSBpZiBAbnNz
Ow0KDQogIGlmICgkRmlsZS0+e09wdH0tPntET0NUWVBFfSkgew0KICAgICAgbXkgJG92ZXJfZG9j
dHlwZV9wYXJhbSA9ICJvdmVycmlkZSBkb2N0eXBlICRGaWxlLT57T3B0fS0+e0RPQ1RZUEV9IjsN
CiAgICAgICAkVC0+cGFyYW0oJG92ZXJfZG9jdHlwZV9wYXJhbSA9PiBUUlVFKTsNCiAgfQ0KDQog
IGlmICgkRmlsZS0+e09wdH0tPntDaGFyc2V0fSkgew0KICAgICAgbXkgJG92ZXJfY2hhcnNldF9w
YXJhbSA9ICJvdmVycmlkZSBjaGFyc2V0ICRGaWxlLT57T3B0fS0+e0NoYXJzZXR9IjsNCiAgICAg
ICAkVC0+cGFyYW0oJG92ZXJfY2hhcnNldF9wYXJhbSA9PiBUUlVFKTsNCiAgfQ0KfQ0Kc3ViIGZp
bl90ZW1wbGF0ZSAoJCQpIHsNCiAgbXkgJEZpbGUgPSBzaGlmdDsNCiAgbXkgJFQgICAgPSBzaGlm
dDsNCg0KICBpZiAoISAkRmlsZS0+e0RvY3R5cGV9IGFuZCAoJEZpbGUtPntWZXJzaW9ufSBlcSAn
dW5rbm93bicgb3IgJEZpbGUtPntWZXJzaW9ufSBlcSAnU0dNTCcgb3IgKCEkRmlsZS0+e1ZlcnNp
b259KSkpIHsNCg0KICAgICMgQEBUT0RPQEAgd2Ugc2hvdWxkIHRyeSBmYWxsaW5nIGJhY2sgb24g
b3RoZXIgdmVyc2lvbg0KICAgICMgaW5mbywgc3VjaCBhcyB0aGUgb25lcyBzdG9yZWQgaW4gVmVy
c2lvbl9FU0lTDQogICAgJFQtPnBhcmFtKGZpbGVfdmVyc2lvbiA9PiAnKG5vIERvY3R5cGUgZm91
bmQpJyk7DQogIH0NCiAgZWxzZSB7DQogICAgJFQtPnBhcmFtKGZpbGVfdmVyc2lvbiA9PiAkRmls
ZS0+e1ZlcnNpb259KTsNCiAgfQ0KICBteSAoJG51bV9lcnJvcnMsJG51bV93YXJuaW5ncywgJG51
bV9pbmZvLCAkcmVwb3J0ZWRfZXJyb3JzKSA9ICZyZXBvcnRfZXJyb3JzKCRGaWxlKTsNCiAgaWYg
KCRudW1fZXJyb3JzKyRudW1fd2FybmluZ3MgPiAwKQ0KICB7DQogICAgJFQtPnBhcmFtKGhhc19l
cnJvcnMgPT4gMSk7DQogIH0NCiAgJFQtPnBhcmFtKHZhbGlkX2Vycm9yc19udW0gPT4gJG51bV9l
cnJvcnMpOw0KICAkbnVtX3dhcm5pbmdzICs9IHNjYWxhciBAeyRGaWxlLT57V2FybmluZ3N9fTsN
CiAgJFQtPnBhcmFtKHZhbGlkX3dhcm5pbmdzX251bSA9PiAkbnVtX3dhcm5pbmdzKTsNCiAgbXkg
JG51bWJlcl9vZl9lcnJvcnMgPSAiIjsgIyB0ZXh0dWFsIGZvcm0gb2YgJG51bV9lcnJvcnMNCiAg
aWYgKCRudW1fZXJyb3JzID4gMSkgew0KICAgICRudW1iZXJfb2ZfZXJyb3JzID0gIiRudW1fZXJy
b3JzIGVycm9ycyINCiAgfQ0KICBlbHNlIHsNCiAgICAkbnVtYmVyX29mX2Vycm9ycyA9ICIkbnVt
X2Vycm9ycyBlcnJvciINCiAgfQ0KICAkVC0+cGFyYW0oZmlsZV9lcnJvcnMgPT4gJHJlcG9ydGVk
X2Vycm9ycyk7DQogICAkVC0+cGFyYW0obnVtYmVyX29mX2Vycm9ycyA9PiAkbnVtYmVyX29mX2Vy
cm9ycyk7DQogIGlmICgkRmlsZS0+eydJcyBWYWxpZCd9KSB7DQogICAgJFQtPnBhcmFtKFZBTElE
ID0+IFRSVUUpOw0KICAgICRULT5wYXJhbSh2YWxpZF9zdGF0dXMgPT4gJ1ZhbGlkJyk7DQogICAg
JnJlcG9ydF92YWxpZCgkRmlsZSwgJFQpOw0KICB9IGVsc2Ugew0KICAgICRULT5wYXJhbShWQUxJ
RCA9PiBGQUxTRSk7DQogICAgJFQtPnBhcmFtKHZhbGlkX3N0YXR1cyA9PiAnSW52YWxpZCcpOw0K
ICB9DQp9DQoNCiMNCiMgT3V0cHV0ICJUaGlzIHBhZ2UgaXMgVmFsaWQiIHJlcG9ydC4NCnN1YiBy
ZXBvcnRfdmFsaWQgew0KICBteSAkRmlsZSA9IHNoaWZ0Ow0KICBteSAkVCAgICA9IHNoaWZ0Ow0K
DQogIHVubGVzcyAoJEZpbGUtPntWZXJzaW9ufSBlcSAndW5rbm93bicgb3IgZGVmaW5lZCAkRmls
ZS0+e1RlbnRhdGl2ZX0pIHsNCg0KICAgIGlmIChleGlzdHMgJENGRy0+e1R5cGVzfS0+eyRGaWxl
LT57RE9DVFlQRX19LT57QmFkZ2V9KSB7DQogICAgICBteSAkY2ZnID0gJENGRy0+e1R5cGVzfS0+
eyRGaWxlLT57RE9DVFlQRX19Ow0KICAgICAgJFQtPnBhcmFtKGhhdmVfYmFkZ2UgPT4gVFJVRSk7
DQogICAgICAkVC0+cGFyYW0oYmFkZ2VfdXJpICA9PiAkY2ZnLT57QmFkZ2V9LT57VVJJfSk7DQog
ICAgICAkVC0+cGFyYW0oYmFkZ2VfYWx0ICA9PiAkY2ZnLT57QmFkZ2V9LT57QWx0fSk7DQogICAg
ICAkVC0+cGFyYW0oYmFkZ2VfaCAgICA9PiAkY2ZnLT57QmFkZ2V9LT57SGVpZ2h0fSk7DQogICAg
ICAkVC0+cGFyYW0oYmFkZ2VfdyAgICA9PiAkY2ZnLT57QmFkZ2V9LT57V2lkdGh9KTsNCiAgICAg
ICRULT5wYXJhbShiYWRnZV90YWdjID0+ICgkY2ZnLT57J1BhcnNlIE1vZGUnfSBlcSAnWE1MJyA/
ICcgLycgOiAnJykpOw0KICAgIH0NCiAgfSBlbHNpZiAoZGVmaW5lZCAkRmlsZS0+e1RlbnRhdGl2
ZX0pIHsNCiAgICAkVC0+cGFyYW0oaXNfdGVudGF0aXZlID0+IFRSVUUpOw0KICB9DQogIG15ICR0
aGlzcGFnZSA9ICRGaWxlLT57RW52fS0+eydTZWxmIFVSSSd9Ow0KICBteSAkZXNjYXBlZF91cmkg
PSB1cmlfZXNjYXBlKCRGaWxlLT57VVJJfSk7DQogICR0aGlzcGFnZSAuPSBxcSg/dXJpPSRlc2Nh
cGVkX3VyaSk7DQogICR0aGlzcGFnZSAuPSAnO3NzPTEnICAgICAgaWYgJEZpbGUtPntPcHR9LT57
J1Nob3cgU291cmNlJ307DQogICR0aGlzcGFnZSAuPSAnO3NwPTEnICAgICAgaWYgJEZpbGUtPntP
cHR9LT57J1Nob3cgUGFyc2V0cmVlJ307DQogICR0aGlzcGFnZSAuPSAnO25vYXR0PTEnICAgaWYg
JEZpbGUtPntPcHR9LT57J05vIEF0dHJpYnV0ZXMnfTsNCiAgJHRoaXNwYWdlIC49ICc7b3V0bGlu
ZT0xJyBpZiAkRmlsZS0+e09wdH0tPnsnT3V0bGluZSd9Ow0KICAkVC0+cGFyYW0oZmlsZV90aGlz
cGFnZSA9PiAkdGhpc3BhZ2UpOw0KfQ0KDQojDQojIEFkZCBhIHdhcmluZyBtZXNzYWdlIHRvIHRo
ZSBvdXRwdXQuDQpzdWIgYWRkX3dhcm5pbmcgKCQkKSB7DQogIG15ICRXSUQgICAgPSBzaGlmdDsN
CiAgbXkgJHBhcmFtcyA9IHNoaWZ0Ow0KDQogICRGaWxlLT57VH0tPnBhcmFtKCRXSUQgPT4gVFJV
RSwgJXskcGFyYW1zfSk7DQogICRGaWxlLT57VH0tPnBhcmFtKGhhdmVfd2FybmluZ3MgPT4gVFJV
RSk7DQogICRGaWxlLT57RX0tPnBhcmFtKCRXSUQgPT4gVFJVRSwgJXskcGFyYW1zfSk7DQogICRG
aWxlLT57RX0tPnBhcmFtKGhhdmVfd2FybmluZ3MgPT4gVFJVRSk7DQogICRGaWxlLT57U30tPnBh
cmFtKCRXSUQgPT4gVFJVRSwgJXskcGFyYW1zfSk7DQogICRGaWxlLT57U30tPnBhcmFtKGhhdmVf
d2FybmluZ3MgPT4gVFJVRSk7DQoNCn0NCg0KIw0KIyBQcm94eSBhdXRoZW50aWNhdGlvbiByZXF1
ZXN0cy4NCiMgTm90ZTogZXhwZWN0cyB0aGUgdGhpcmQgYXJndW1lbnQgdG8gYmUgYSBoYXNoIHJl
ZiAoc2VlIEhUVFA6OkhlYWRlcnM6OkF1dGgpLg0Kc3ViIGF1dGhlbnRpY2F0ZSB7DQogIG15ICRG
aWxlICAgICAgID0gc2hpZnQ7DQogIG15ICRyZXNvdXJjZSAgID0gc2hpZnQ7DQogIG15ICRhdXRo
SGVhZGVyID0gc2hpZnQgfHwge307DQoNCiAgbXkgJHJlYWxtID0gJHJlc291cmNlOw0KICAkcmVh
bG0gPX4gcyhbXlx3XGQuLV0qKXt9ZzsNCg0KICBmb3IgbXkgJHNjaGVtZSAoa2V5cyglJGF1dGhI
ZWFkZXIpKSB7DQogICAgbXkgJG9yaWdyZWFsbSA9ICRhdXRoSGVhZGVyLT57JHNjaGVtZX0tPnty
ZWFsbX07DQogICAgaWYgKG5vdCBkZWZpbmVkICRvcmlncmVhbG0gb3IgbGMoJHNjaGVtZSkgIX4g
L14oPzpiYXNpY3xkaWdlc3QpJC8pIHsNCiAgICAgIGRlbGV0ZSgkYXV0aEhlYWRlci0+eyRzY2hl
bWV9KTsNCiAgICAgIG5leHQ7DQogICAgfQ0KICAgICRhdXRoSGVhZGVyLT57JHNjaGVtZX0tPnty
ZWFsbX0gPSAiJHJlYWxtLSRvcmlncmVhbG0iOw0KICB9DQoNCiAgbXkgJGhlYWRlcnMgPSBIVFRQ
OjpIZWFkZXJzLT5uZXcoQ29ubmVjdGlvbiA9PiAnY2xvc2UnKTsNCiAgJGhlYWRlcnMtPnd3d19h
dXRoZW50aWNhdGUoJSRhdXRoSGVhZGVyKTsNCiAgJGhlYWRlcnMgPSAkaGVhZGVycy0+YXNfc3Ry
aW5nKCk7DQogIGNob21wKCRoZWFkZXJzKTsNCg0KICAkRmlsZS0+e0h9LT5wYXJhbShodHRwXzQw
MV9oZWFkZXJzID0+ICRoZWFkZXJzKTsNCiAgJEZpbGUtPntIfS0+cGFyYW0oaHR0cF80MDFfdXJs
ICAgICA9PiAkcmVzb3VyY2UpOw0KDQogIHByaW50ICRGaWxlLT57SH0tPm91dHB1dDsNCg0KICBl
eGl0OyAjIEZ1cnRoZXIgaW50ZXJhY3Rpb24gd2lsbCBiZSBhIG5ldyBIVFRQIHJlcXVlc3QuDQp9
DQoNCiMNCiMgRmV0Y2ggYW4gVVJMIGFuZCByZXR1cm4gdGhlIGNvbnRlbnQgYW5kIHNlbGVjdGVk
IG1ldGEtaW5mby4NCnN1YiBoYW5kbGVfdXJpIHsNCiAgbXkgJHEgICAgPSBzaGlmdDsgIyBUaGUg
Q0dJIG9iamVjdC4NCiAgbXkgJEZpbGUgPSBzaGlmdDsgIyBUaGUgbWFzdGVyIGRhdGFzdHJ1Y3R1
cmUuDQoNCiAgbXkgJHVyaSA9IG5ldyBVUkkgKHJlZiAkcSA/ICRxLT5wYXJhbSgndXJpJykgOiAk
cSktPmNhbm9uaWNhbCgpOw0KICAkdXJpLT5mcmFnbWVudCh1bmRlZik7DQoNCiAgbXkgJHVhID0g
bmV3IFczQzo6VmFsaWRhdG9yOjpVc2VyQWdlbnQgKCRDRkcsICRGaWxlKTsNCiAgJHVhLT5lbnZf
cHJveHkoKTsNCiAgJHVhLT5hZ2VudCgiVzNDX1ZhbGlkYXRvci8kVkVSU0lPTiIpOw0KICAkdWEt
PnBhcnNlX2hlYWQoMCk7ICAjIERvbid0IHBhcnNlIHRoZSBodHRwLWVxdWl2IHN0dWZmLg0KDQog
ICR1YS0+cHJvdG9jb2xzX2FsbG93ZWQoJENGRy0+e1Byb3RvY29sc30tPntBbGxvd30gfHwgWydo
dHRwJywgJ2h0dHBzJ10pOw0KDQogIHVubGVzcyAoJHVhLT5pc19wcm90b2NvbF9zdXBwb3J0ZWQo
JHVyaSkpIHsNCiAgICAkRmlsZS0+eydFcnJvciBGbGFnZ2VkJ30gPSBUUlVFOw0KICAgIGlmICgo
JHVyaS0+Y2Fub25pY2FsKCkgZXEgIjEiKSApDQogICAgI2lmIHVyaSBwYXJhbSBpcyBlbXB0eSAo
YWxzbyBmb3IgZW1wdHkgZGlyZWN0IG9yIHVwbG9hZCksIGl0J3MgYmVlbiBzZXQgdG8gVFJVRSBp
biBzdWIgcHJlcENHSSgpDQogICAgew0KICAgICAgJEZpbGUtPntFfS0+cGFyYW0oZmF0YWxfbm9f
Y29udGVudCAgPT4gVFJVRSk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgJEZpbGUtPntFfS0+
cGFyYW0oZmF0YWxfdXJpX2Vycm9yICA9PiBUUlVFKTsNCiAgICAgICRGaWxlLT57RX0tPnBhcmFt
KGZhdGFsX3VyaV9zY2hlbWUgPT4gJHVyaS0+c2NoZW1lKCkpOw0KICAgIH0NCiAgICByZXR1cm4g
JEZpbGU7DQogIH0NCg0KICByZXR1cm4gJEZpbGUgdW5sZXNzICR1YS0+dXJpX29rKCR1cmkpOw0K
DQogIG15ICRyZXEgPSBuZXcgSFRUUDo6UmVxdWVzdChHRVQgPT4gJHVyaSk7DQoNCiAgIyBJZiB3
ZSBnb3QgYSBBdXRob3JpemF0aW9uIGhlYWRlciwgdGhlIGNsaWVudCBpcyBiYWNrIGF0IGl0IGFm
dGVyIGJlaW5nDQogICMgcHJvbXB0ZWQgZm9yIGEgcGFzc3dvcmQgc28gd2UgaW5zZXJ0IHRoZSBo
ZWFkZXIgYXMgaXMgaW4gdGhlIHJlcXVlc3QuDQogIGlmKCRFTlZ7SFRUUF9BVVRIT1JJWkFUSU9O
fSl7DQogICAgJHJlcS0+aGVhZGVycy0+aGVhZGVyKEF1dGhvcml6YXRpb24gPT4gJEVOVntIVFRQ
X0FVVEhPUklaQVRJT059KTsNCiAgfQ0KDQogIG15ICRyZXMgPSAkdWEtPnJlcXVlc3QoJHJlcSk7
DQoNCiAgcmV0dXJuICRGaWxlIGlmICRGaWxlLT57J0Vycm9yIEZsYWdnZWQnfTsgIyBSZWRpcmVj
dCBJUCByZWplY3RlZD8NCg0KICB1bmxlc3MgKCRyZXMtPmNvZGUgPT0gMjAwIG9yICRGaWxlLT57
T3B0fS0+eydObzIwMCd9KSB7DQogICAgaWYgKCRyZXMtPmNvZGUgPT0gNDAxKSB7DQogICAgICBt
eSAlYXV0aCA9ICRyZXMtPnd3d19hdXRoZW50aWNhdGUoKTsgIyBIVFRQOjpIZWFkZXJzOjpBdXRo
DQogICAgICAmYXV0aGVudGljYXRlKCRGaWxlLCAkcmVzLT5yZXF1ZXN0LT51cmksIFwlYXV0aCk7
DQogICAgfSBlbHNlIHsNCiAgICAgICRGaWxlLT57J0Vycm9yIEZsYWdnZWQnfSA9IFRSVUU7DQoN
CiAgICAgICRGaWxlLT57RX0tPnBhcmFtKGZhdGFsX2h0dHBfZXJyb3IgPT4gVFJVRSk7DQogICAg
ICAkRmlsZS0+e0V9LT5wYXJhbShmYXRhbF9odHRwX3VyaSAgID0+ICR1cmktPmFzX3N0cmluZyk7
DQogICAgICAkRmlsZS0+e0V9LT5wYXJhbShmYXRhbF9odHRwX2NvZGUgID0+ICRyZXMtPmNvZGUp
Ow0KICAgICAgJEZpbGUtPntFfS0+cGFyYW0oZmF0YWxfaHR0cF9tc2cgICA9PiAkcmVzLT5tZXNz
YWdlKTsNCiAgICAgICRGaWxlLT57RX0tPnBhcmFtKGZhdGFsX2h0dHBfZG5zICAgPT4gVFJVRSkg
aWYgJHJlcy0+Y29kZSA9PSA1MDA7DQogICAgfQ0KICAgIHJldHVybiAkRmlsZTsNCiAgfQ0KDQog
ICMNCiAgIyBFbmZvcmNlIE1heCBSZWN1cnNpb24gbGV2ZWwuDQogICZjaGVja19yZWN1cnNpb24o
JEZpbGUsICRyZXMpOw0KDQogIG15ICgkbW9kZSwgJGN0LCAkY2hhcnNldCkNCiAgICA9ICZwYXJz
ZV9jb250ZW50X3R5cGUoDQogICAgICAgICAgICAgICAgICAgICAgICAgICRGaWxlLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAkcmVzLT5oZWFkZXIoJ0NvbnRlbnQtVHlwZScpLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICBzY2FsYXIoJHJlcy0+cmVxdWVzdC0+dXJpKSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICApOw0KDQogIG15ICRsYXN0bW9kID0gdW5kZWY7DQogIGlmICggJHJl
cy0+bGFzdF9tb2RpZmllZCApIHsNCiAgICAkbGFzdG1vZCA9IHNjYWxhcihnbXRpbWUoJHJlcy0+
bGFzdF9tb2RpZmllZCkpOw0KICB9DQoNCiAgbXkgJGNvbnRlbnQgPSAkcmVzLT5jYW4oJ2RlY29k
ZWRfY29udGVudCcpID8NCiAgICAkcmVzLT5kZWNvZGVkX2NvbnRlbnQoY2hhcnNldCA9PiAnbm9u
ZScpIDogJHJlcy0+Y29udGVudDsNCg0KICAkRmlsZS0+e0J5dGVzfSAgICAgICAgICAgPSAkY29u
dGVudDsNCiAgJEZpbGUtPntNb2RlfSAgICAgICAgICAgID0gJG1vZGU7DQogICRGaWxlLT57Q29u
dGVudFR5cGV9ICAgICA9ICRjdDsNCiAgJEZpbGUtPntDb250ZW50RW5jfSAgICAgID0gJHJlcy0+
Y29udGVudF9lbmNvZGluZzsNCiAgJEZpbGUtPntUcmFuc2ZlckVuY30gICAgID0gJHJlcy0+aGVh
ZGVyKCdDbGllbnQtVHJhbnNmZXItRW5jb2RpbmcnKTsNCiAgJEZpbGUtPntDaGFyc2V0fS0+e0hU
VFB9ID0gbGMgJGNoYXJzZXQ7DQogICRGaWxlLT57TW9kaWZpZWR9ICAgICAgICA9ICRsYXN0bW9k
Ow0KICAkRmlsZS0+e1NlcnZlcn0gICAgICAgICAgPSBzY2FsYXIgJHJlcy0+c2VydmVyOw0KICAk
RmlsZS0+e1NpemV9ICAgICAgICAgICAgPSBzY2FsYXIgJHJlcy0+Y29udGVudF9sZW5ndGg7DQog
ICRGaWxlLT57VVJJfSAgICAgICAgICAgICA9IHNjYWxhciAkcmVzLT5yZXF1ZXN0LT51cmktPmNh
bm9uaWNhbDsNCiAgJEZpbGUtPnsnSXMgVXBsb2FkJ30gICAgID0gRkFMU0U7DQogICRGaWxlLT57
J0RpcmVjdCBJbnB1dCd9ICA9IEZBTFNFOw0KDQogIHJldHVybiAkRmlsZTsNCn0NCg0KIw0KIyBI
YW5kbGUgdXBsb2FkZWQgZmlsZSBhbmQgcmV0dXJuIHRoZSBjb250ZW50IGFuZCBzZWxlY3RlZCBt
ZXRhLWluZm8uDQpzdWIgaGFuZGxlX2ZpbGUgew0KICBteSAkcSAgICA9IHNoaWZ0OyAjIFRoZSBD
R0kgb2JqZWN0Lg0KICBteSAkRmlsZSA9IHNoaWZ0OyAjIFRoZSBtYXN0ZXIgZGF0YXN0cnVjdHVy
ZS4NCg0KICBteSAkZiA9ICRxLT5wYXJhbSgndXBsb2FkZWRfZmlsZScpOw0KICBteSAkaCA9ICRx
LT51cGxvYWRJbmZvKCRmKTsNCiAgbXkgJGZpbGU7DQoNCiAgbG9jYWwgJC8gPSB1bmRlZjsgIyBz
ZXQgbGluZSBkZWxpbWl0ZXIgc28gdGhhdCA8PiByZWFkcyByZXN0IG9mIGZpbGUNCiAgJGZpbGUg
PSA8JGY+Ow0KDQogIG15ICgkbW9kZSwgJGN0LCAkY2hhcnNldCkgPSAmcGFyc2VfY29udGVudF90
eXBlKCRGaWxlLCAkaC0+eydDb250ZW50LVR5cGUnfSk7DQoNCiAgJEZpbGUtPntCeXRlc30gICAg
ICAgICAgID0gJGZpbGU7DQogICRGaWxlLT57TW9kZX0gICAgICAgICAgICA9ICRtb2RlOw0KICAk
RmlsZS0+e0NvbnRlbnRUeXBlfSAgICAgPSAkY3Q7DQogICRGaWxlLT57Q2hhcnNldH0tPntIVFRQ
fSA9IGxjICRjaGFyc2V0Ow0KICAkRmlsZS0+e01vZGlmaWVkfSAgICAgICAgPSAkcS0+aHR0cCgn
TGFzdC1Nb2RpZmllZCcpOw0KICAkRmlsZS0+e1NlcnZlcn0gICAgICAgICAgPSAkcS0+aHR0cCgn
VXNlci1BZ2VudCcpOyAjIEZha2UgYSAic2VydmVyIi4gOi0pDQogICRGaWxlLT57U2l6ZX0gICAg
ICAgICAgICA9ICRxLT5odHRwKCdDb250ZW50LUxlbmd0aCcpOw0KICAkRmlsZS0+e1VSSX0gICAg
ICAgICAgICAgPSAiJGYiOyAjIE5lZWQgdG8gc3RyaW5naWZ5IGJlY2F1c2Ugd2Ugd2FudCByZWYN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0byByZXR1cm4gZmFsc2UgbGF0
ZXIgaW4gYWRkX3RhYmxlLiAgVGhpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAjIGlzIGFsc28gYSBmaWxlIGhhbmRsZS4uLiBzZWUgbWFuIENHSS4NCiAgJEZpbGUtPnsnSXMg
VXBsb2FkJ30gICAgID0gVFJVRTsNCiAgJEZpbGUtPnsnRGlyZWN0IElucHV0J30gID0gRkFMU0U7
DQoNCiAgcmV0dXJuICRGaWxlOw0KfQ0KDQojDQojIEhhbmRsZSB1cGxvYWRlZCBmaWxlIGFuZCBy
ZXR1cm4gdGhlIGNvbnRlbnQgYW5kIHNlbGVjdGVkIG1ldGEtaW5mby4NCnN1YiBoYW5kbGVfZnJh
ZyB7DQogIG15ICRxICAgID0gc2hpZnQ7ICMgVGhlIENHSSBvYmplY3QuDQogIG15ICRGaWxlID0g
c2hpZnQ7ICMgVGhlIG1hc3RlciBkYXRhc3RydWN0dXJlLg0KDQogICRGaWxlLT57Qnl0ZXN9ICAg
ICAgID0gJHEtPnBhcmFtKCdmcmFnbWVudCcpOw0KICAkRmlsZS0+e01vZGV9ICAgICAgICA9IE1P
REVfVEJEOw0KICAkRmlsZS0+e01vZGlmaWVkfSAgICA9ICcnOw0KICAkRmlsZS0+e1NlcnZlcn0g
ICAgICA9ICcnOw0KICAkRmlsZS0+e1NpemV9ICAgICAgICA9ICcnOw0KICAkRmlsZS0+e0NvbnRl
bnRUeXBlfSA9ICcnOyAjIEBAVE9ETz8NCiAgJEZpbGUtPntVUkl9ICAgICAgICAgPSAndXBsb2Fk
Oi8vRm9ybSBTdWJtaXNzaW9uJzsNCiAgJEZpbGUtPnsnSXMgVXBsb2FkJ30gPSBUUlVFOw0KICAk
RmlsZS0+eydEaXJlY3QgSW5wdXQnfSA9IFRSVUU7DQogICRGaWxlLT57Q2hhcnNldH0tPntIVFRQ
fSA9ICJ1dGYtOCI7ICMgYnkgZGVmYXVsdCwgdGhlIGZvcm0gYWNjZXB0cyB1dGYtOCBjaGFycw0K
DQogIHJldHVybiAkRmlsZTsNCn0NCg0KIw0KIyBQYXJzZSBhIENvbnRlbnQtVHlwZSBhbmQgcGFy
YW1ldGVycy4gUmV0dXJuIGRvY3VtZW50IHR5cGUgYW5kIGNoYXJzZXQuDQpzdWIgcGFyc2VfY29u
dGVudF90eXBlIHsNCiAgbXkgJEZpbGUgICAgICAgICA9IHNoaWZ0Ow0KICBteSAkQ29udGVudF9U
eXBlID0gc2hpZnQ7DQogIG15ICR1cmwgICAgICAgICAgPSBzaGlmdDsNCiAgbXkgJGNoYXJzZXQg
ICAgICA9ICcnOw0KICBteSAkbW9kZSAgICAgICAgID0gJyc7DQoNCiAgbXkgKCRjdCwgQHBhcmFt
KSA9IHNwbGl0IC9ccyo7XHMqLywgbGMgJENvbnRlbnRfVHlwZTsNCiAgJGN0ID1+IHMvXlxzKy8v
OyAkY3QgPX4gcy9ccyskLy87DQoNCiAgJG1vZGUgPSAkQ0ZHLT57TUlNRX0tPnskY3R9IHx8ICRj
dDsNCg0KICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFtKSB7DQogICAgbXkgKCRwLCAkdikgPSBz
cGxpdCAvXHMqPVxzKi8sICRwYXJhbTsNCiAgICBuZXh0IHVubGVzcyAkcCA9fiBtKGNoYXJzZXQp
aTsNCiAgICBpZiAoJHYgPX4gbS8oW1wnXCJdPykoXFMrKVwxL2kpIHsNCiAgICAgICRjaGFyc2V0
ID0gbGMgJDI7DQogICAgICBsYXN0Ow0KICAgIH0NCiAgfQ0KDQogIGlmICgkbW9kZSA9fiBtKC8p
KSB7ICMgYSAiLyIgbWVhbnMgaXQncyB1bmtub3duIG9yIHdlJ2QgaGF2ZSBhIG1vZGUgaGVyZS4N
CiAgICBpZiAoJGN0ID1+IG0odGV4dC9jc3MpIGFuZCBkZWZpbmVkICR1cmwpIHsNCiAgICAgIHBy
aW50IHJlZGlyZWN0DQogICAgICAgICdodHRwOi8vamlnc2F3LnczLm9yZy9jc3MtdmFsaWRhdG9y
L3ZhbGlkYXRvcj91cmk9Jw0KICAgICAgICAgIC4gdXJpX2VzY2FwZSAkdXJsOw0KICAgICAgZXhp
dDsNCiAgICB9IGVsc2Ugew0KICAgICAgJEZpbGUtPnsnRXJyb3IgRmxhZ2dlZCd9ID0gVFJVRTsN
CiAgICAgICRGaWxlLT57RX0tPnBhcmFtKGZhdGFsX21pbWVfZXJyb3IgPT4gVFJVRSk7DQogICAg
ICAkRmlsZS0+e0V9LT5wYXJhbShmYXRhbF9taW1lX2N0ICAgID0+ICRjdCk7DQogICAgfQ0KICB9
DQoNCiAgcmV0dXJuICRtb2RlLCAkY3QsICRjaGFyc2V0Ow0KfQ0KDQojDQojIENoZWNrIHJlY3Vy
c2lvbiBsZXZlbCBhbmQgZW5mb3JjZSBNYXggUmVjdXJzaW9uIGxpbWl0Lg0Kc3ViIGNoZWNrX3Jl
Y3Vyc2lvbiAoJCQpIHsNCiAgbXkgJEZpbGUgPSBzaGlmdDsNCiAgbXkgJHJlcyAgPSBzaGlmdDsN
Cg0KICAjIE5vdCBsb29raW5nIGF0IG91ciBvd24gb3V0cHV0Lg0KICByZXR1cm4gdW5sZXNzIGRl
ZmluZWQgJHJlcy0+aGVhZGVyKCdYLVczQy1WYWxpZGF0b3ItUmVjdXJzaW9uJyk7DQoNCiAgbXkg
JGx2bCA9ICRyZXMtPmhlYWRlcignWC1XM0MtVmFsaWRhdG9yLVJlY3Vyc2lvbicpOw0KICByZXR1
cm4gdW5sZXNzICRsdmwgPX4gbSheXGQrJCk7ICMgTm9uLWRpZ2l0LCBpLmUuIGdhcmJhZ2UsIGln
bm9yZS4NCg0KICBpZiAoJGx2bCA+PSAkQ0ZHLT57J01heCBSZWN1cnNpb24nfSkgew0KICAgIHBy
aW50IHJlZGlyZWN0ICRDRkctPnsnSG9tZSBQYWdlJ307DQogIH0gZWxzZSB7DQogICAgJFQtPnBh
cmFtKGRlcHRoID0+ICRsdmwrKyk7ICMgSW5jcmVhc2UgcmVjdXJzaW9uIGxldmVsIGluIG91dHB1
dC4NCiAgfQ0KfQ0KDQojDQojIE5vcm1hbGl6ZSBuZXdsaW5lIGZvcm1zIChDUkxGL0NSL0xGKSB0
byBuYXRpdmUgbmV3bGluZS4NCnN1YiBub3JtYWxpemVfbmV3bGluZXMgew0KICBteSAkZmlsZSA9
IHNoaWZ0Ow0KICBsb2NhbCAkXyA9IHNoaWZ0OyAgI2NoYXJzZXQNCiAgbXkgJHBhdHRlcm4gPSAn
JzsNCg0KICAjIGRvbid0IHVzZSBiYWNrcmVmZXJlbmNlIHBhcmVudGhlc2VzIQ0KICAkcGF0dGVy
biA9ICdceDAwXHgwRCg/Olx4MDBceDBBKT98XHgwMFx4MEEnIGlmIC9edXRmLTE2YmUkLzsNCiAg
JHBhdHRlcm4gPSAnXHgwRFx4MDAoPzpceDBBXHgwMCk/fFx4MEFceDAwJyBpZiAvXnV0Zi0xNmxl
JC87DQogICMgJHBhdHRlcm4gPSAnXHgwMFx4MDBceDAwXHgwRCg/Olx4MDBceDAwXHgwMFx4MEEp
P3xceDAwXHgwMFx4MDBceDBBJyBpZiAvXlVDUy00YmUkLzsNCiAgIyAkcGF0dGVybiA9ICdceDBE
XHgwMFx4MDBceDAwKD86XHgwQVx4MDBceDAwXHgwMCk/fFx4MEFceDAwXHgwMFx4MDAnIGlmIC9e
VUNTLTRsZSQvOw0KICAjIGluc2VydCBvdGhlciBzcGVjaWFsIGNhc2VzIGhlcmUsIHN1Y2ggYXMg
RUJDRElDDQogICRwYXR0ZXJuID0gJ1x4MEQoPzpceDBBKT98XHgwQScgaWYgISRwYXR0ZXJuOyAg
ICAjIGFsbCBvdGhlciBjYXNlcw0KDQogIHJldHVybiBbc3BsaXQgLyRwYXR0ZXJuLywgJGZpbGVd
Ow0KfQ0KDQojDQojIGZpbmQgZXhhY3QgY2hhcnNldCBmcm9tIGdlbmVyYWwgb25lICh1dGYtMTYp
DQojDQojIG5lZWRlZCBmb3IgcGVyLWxpbmUgY29udmVyc2lvbiBhbmQgbGluZSBzcGxpdHRpbmcN
CiMgKEJFIGlzIGRlZmF1bHQsIGJ1dCB0aGlzIHdpbGwgYXBwbHkgb25seSB0byBIVE1MKQ0Kc3Vi
IGV4YWN0X2NoYXJzZXQgew0KICBteSAkRmlsZSA9IHNoaWZ0Ow0KICBteSAkZ2VuZXJhbF9jaGFy
c2V0ID0gc2hpZnQ7DQogIG15ICRleGFjdF9jaGFyc2V0ID0gJGdlbmVyYWxfY2hhcnNldDsNCg0K
ICBpZiAoJGdlbmVyYWxfY2hhcnNldCBlcSAndXRmLTE2Jykgew0KICAgIGlmICgkRmlsZS0+e0No
YXJzZXR9LT57QXV0b30gPX4gbS9edXRmLTE2W2JsXWUkLykgew0KICAgICAgJGV4YWN0X2NoYXJz
ZXQgPSAkRmlsZS0+e0NoYXJzZXR9LT57QXV0b307DQogICAgfSBlbHNlIHsgJGV4YWN0X2NoYXJz
ZXQgPSAndXRmLTE2YmUnOyB9DQogIH0NCiAgIyBhZGQgc2FtZSBjb2RlIGZvciB1Y3MtNCBoZXJl
DQogIHJldHVybiAkZXhhY3RfY2hhcnNldDsNCn0NCg0KIw0KIyBSZXR1cm4gJF9bMF0gZW5jb2Rl
ZCBmb3IgSFRNTCBlbnRpdGllcyAoY3JpYmJlZCBmcm9tIG1lcmx5bikuDQojDQojIE5vdGUgdGhh
dCB0aGlzIGlzIHVzZWQgYm90aCBmb3IgSFRNTCBhbmQgWE1MIGVzY2FwaW5nLg0KIw0Kc3ViIGVu
dCB7DQogIGxvY2FsICRfID0gc2hpZnQ7DQogIHJldHVybiAnJyB1bmxlc3MgZGVmaW5lZDsgIyBF
bGltaW5hdGUgd2FybmluZ3MNCiAgcyhbIjwmPiJdKXsnJiMnIC4gb3JkKCQmKSAuICc7J31nZTsg
ICMgc2hvdWxkIHN3aXRjaCB0byBoZXggc29vbmVyIG9yIGxhdGVyDQogIHJldHVybiAkXzsNCn0N
Cg0KIw0KIyBUcnVuY2F0ZSBzb3VyY2UgbGluZXMgZm9yIHJlcG9ydC4NCiMNCiMgVGhpcyAqcmVh
bGx5KiB3YW50cyBQZXJsIDUuOC4wIGFuZCBpdCdzIGltcHJvdmVkIFVOSUNPREUgc3VwcG9ydC4N
CiMgQnl0ZSBzZW1hbnRpY3MgYXJlIGluIGVmZmVjdCBvbiBhbGwgbGVuZ3RoKCksIHN1YnN0cigp
LCBldGMuIGNhbGxzLA0KIyBzbyBvZmZzZXRzIHdpbGwgYmUgd3JvbmcgaWYgdGhlcmUgYXJlIG11
bHRpLWJ5dGUgc2VxdWVuY2VzIHByaW9yIHRvDQojIHRoZSBjb2x1bW4gd2hlcmUgdGhlIGVycm9y
IGlzIGRldGVjdGVkLg0KIw0Kc3ViIHRydW5jYXRlX2xpbmUgew0KICBteSAkbGluZSAgPSBzaGlm
dDsNCiAgbXkgJGNvbCAgID0gc2hpZnQ7DQoNCiAgbXkgJHN0YXJ0ID0gJGNvbDsNCiAgbXkgJGVu
ZCAgID0gJGNvbDsNCg0KICBmb3IgKDEuLjQwKSB7DQogICAgJHN0YXJ0LS0gaWYgKCRzdGFydCAt
IDEgPj0gMCk7ICAgICAgICAgICAgIyBpbi9kZS1jcmVtZW50IHVudGlsLi4uDQogICAgJGVuZCsr
ICAgaWYgKCRlbmQgICArIDEgPD0gbGVuZ3RoICRsaW5lKTsgIyAuLi53ZSBoaXQgZW5kIG9mIGxp
bmUuDQogIH0NCg0KICB1bmxlc3MgKCRlbmQgLSAkc3RhcnQgPT0gODApIHsNCiAgICBpZiAoJHN0
YXJ0ID09IDApIHsgIyBIaXQgc3RhcnQgb2YgbGluZSwgbWF5YmUgZ3JhYiBtb3JlIGF0IGVuZC4N
CiAgICAgIG15ICRkaWZmID0gNDAgLSAkY29sOw0KICAgICAgZm9yICgxLi4kZGlmZikgew0KICAg
ICAgICAkZW5kKysgaWYgKCRlbmQgKyAxIDw9IGxlbmd0aCAkbGluZSk7DQogICAgICB9DQogICAg
fSBlbHNpZiAoJGVuZCA9PSBsZW5ndGggJGxpbmUpIHsgIyBIaXQgZW5kIG9mIGxpbmUsIG1heWJl
IGdyYWIgbW9yZSBhdCBiZWdpbm5pbmcuDQogICAgICBteSAkZGlmZiA9IDgwIC0gJGNvbDsNCiAg
ICAgIGZvciAoMS4uJGRpZmYpIHsNCiAgICAgICAgJHN0YXJ0LS0gaWYgKCRzdGFydCAtIDEgPj0g
MCk7DQogICAgICB9DQogICAgfQ0KICB9DQoNCiAgIw0KICAjIEFkZCBlbGlwc2lzIGF0IGVuZCBp
ZiBuZWNlc3NhcnkuDQogIHVubGVzcyAoJGVuZCAgID09IGxlbmd0aCAkbGluZSkge3N1YnN0ciAk
bGluZSwgLTMsIDMsICcuLi4nfTsNCg0KICAkY29sID0gJGNvbCAtICRzdGFydDsgIyBOZXcgb2Zm
c2V0IGlzIGRpZmYgZnJvbSAkY29sIHRvICRzdGFydC4NCiAgJGxpbmUgPSBzdWJzdHIgJGxpbmUs
ICRzdGFydCwgJGVuZCAtICRzdGFydDsgIyBUcnVuY2F0ZS4NCg0KICAjDQogICMgQWRkIGVsaXBz
aXMgYXQgc3RhcnQgaWYgbmVjZXNzYXJ5Lg0KICB1bmxlc3MgKCRzdGFydCA9PSAwKSAgICAgICAg
ICAgIHtzdWJzdHIgJGxpbmUsICAwLCAzLCAnLi4uJ307DQoNCiAgcmV0dXJuICRsaW5lLCAkY29s
Ow0KfQ0KDQojDQojIFN1cHByZXNzIGFueSBleGlzdGluZyBET0NUWVBFIGJ5IGNvbW1lbnRpbmcg
aXQgb3V0Lg0Kc3ViIG92ZXJyaWRlX2RvY3R5cGUgew0KICBubyBzdHJpY3QgJ3ZhcnMnOw0KICBt
eSAkRmlsZSA9IHNoaWZ0Ow0KICBteSAoJGR0KSA9DQogICAgZ3JlcCB7ICRfLT57RGlzcGxheX0g
ZXEgJEZpbGUtPntPcHR9LT57RE9DVFlQRX0gfSB2YWx1ZXMgJXskQ0ZHLT57VHlwZXN9fTsNCg0K
ICAjIEBAVE9ETzogYWJvcnQvd2hpbmUgYWJvdXQgdW5yZWNvZ25pemVkIGRvY3R5cGUgaWYgJGR0
IGlzIHVuZGVmLjsNCiAgbXkgJHB1YmlkID0gJGR0LT57UHViSUR9Ow0KICBteSAkc3lzaWQgPSAk
ZHQtPntTeXNJRH07DQogIG15ICRuYW1lICA9ICRkdC0+e05hbWV9Ow0KICBsb2NhbCAkZHRkID0g
cXEoPCFET0NUWVBFICRuYW1lIFBVQkxJQyAiJHB1YmlkIik7DQogICRkdGQgLj0gcXEoICIkc3lz
aWQiKSBpZiAkc3lzaWQ7ICMgV2UgZG9uJ3QgaGF2ZSBvbmUgZm9yIGFsbCB0eXBlcy4NCiAgJGR0
ZCAuPSAnPic7DQoNCiAgbG9jYWwgJG9yZ19kdGQgPSAnJzsNCiAgbG9jYWwgJEhUTUwgICAgPSAn
JzsNCiAgbG9jYWwgJHNlZW4gICAgPSBGQUxTRTsNCg0KICBteSAkZGVjbGFyYXRpb24gPSBzdWIg
ew0KICAgICRzZWVuID0gVFJVRTsNCg0KICAgICMgTm8gT3ZlcnJpZGUgaWYgRmFsbGJhY2sgd2Fz
IHJlcXVlc3RlZC4NCiAgICBpZiAoJEZpbGUtPntPcHR9LT57RkJ9LT57RE9DVFlQRX0pIHsNCiAg
ICAgICRIVE1MIC49ICRfWzBdOyAjIFN0YXNoIGl0IGFzIGlzLi4uDQogICAgfSBlbHNlIHsNCiAg
ICAgICMgQ29tbWVudCBpdCBvdXQgYW5kIGluc2VydCB0aGUgbmV3IG9uZS4uLg0KICAgICAgJEhU
TUwgLj0gIiRkdGRcbiIgLiAnPCEtLSAnIC4gJF9bMF0gLiAnIC0tPic7DQogICAgICAkb3JnX2R0
ZCA9ICZlbnQoJF9bMF0pOw0KICAgIH0NCiAgfTsNCg0KICBIVE1MOjpQYXJzZXItPm5ldyhkZWZh
dWx0X2ggICAgID0+IFtzdWIgeyRIVE1MIC49IHNoaWZ0fSwgJ3RleHQnXSwNCiAgICAgICAgICAg
ICAgICAgICAgZGVjbGFyYXRpb25faCA9PiBbJGRlY2xhcmF0aW9uLCAndGV4dCddDQogICAgICAg
ICAgICAgICAgICAgKS0+cGFyc2Uoam9pbiAiXG4iLCBAeyRGaWxlLT57Q29udGVudH19KS0+ZW9m
KCk7DQoNCiAgJEZpbGUtPntDb250ZW50fSA9IFtzcGxpdCAvXG4vLCAkSFRNTF07DQoNCiAgaWYg
KCRzZWVuKSB7DQogICAgdW5sZXNzICgoJEZpbGUtPntPcHR9LT57RkJ9LT57RE9DVFlQRX0pIG9y
ICgkRmlsZS0+e09wdH0tPntET0NUWVBFfSBlcSAkQ0ZHLT57VHlwZXN9LT57JEZpbGUtPntET0NU
WVBFfX0tPntEaXNwbGF5fSApKSB7DQogICAgICAmYWRkX3dhcm5pbmcoJ1cxMycsIHsNCiAgICAg
ICAgVzEzX29yZyA9PiAkb3JnX2R0ZCwNCiAgICAgICAgVzEzX25ldyA9PiAkRmlsZS0+e09wdH0t
PntET0NUWVBFfSwNCiAgICAgIH0pOw0KICAgICAgJEZpbGUtPntUZW50YXRpdmV9IHw9IFRfRVJS
T1I7ICMgVGFnIGl0IGFzIEludmFsaWQuDQogICAgfQ0KICB9IGVsc2Ugew0KICAgIHVuc2hpZnQg
QHskRmlsZS0+e0NvbnRlbnR9fSwgJGR0ZDsNCg0KICAgIGlmICgkRmlsZS0+e09wdH0tPntGQn0t
PntET0NUWVBFfSkgew0KICAgICAgJmFkZF93YXJuaW5nKCdXMTYnLCB7VzE2X2R0ZCA9PiAkRmls
ZS0+e09wdH0tPntET0NUWVBFfX0pOw0KICAgICAgJEZpbGUtPntUZW50YXRpdmV9IHw9IFRfRVJS
T1I7ICMgVGFnIGl0IGFzIEludmFsaWQuDQogICAgfSBlbHNlIHsNCiAgICAgICZhZGRfd2Fybmlu
ZygnVzE1Jywge1cxNV9kdGQgPT4gJEZpbGUtPntPcHR9LT57RE9DVFlQRX19KTsNCiAgICAgICRG
aWxlLT57VGVudGF0aXZlfSB8PSBUX0VSUk9SOyAjIFRhZyBpdCBhcyBJbnZhbGlkLg0KICAgIH0N
CiAgfQ0KDQogIHJldHVybiAkRmlsZTsNCn0NCg0KIw0KIyBQYXJzZSBlcnJvcnMgcmVwb3J0ZWQg
YnkgU1AuDQpzdWIgcGFyc2VfZXJyb3JzICgkJCkgew0KICBteSAkRmlsZSA9IHNoaWZ0Ow0KICBt
eSAkZmggICA9IHNoaWZ0Ow0KDQogICRGaWxlLT57RXJyb3JzfSA9IFtdOyAjIEluaXRpYWxpemUg
dG8gYW4gKGVtcHR5KSBhbm9ueW1vdXMgYXJyYXkgcmVmLg0KICBmb3IgKDwkZmg+KSB7DQoNCiAg
ICAjIHJlbW92ZSBTR01MIFBhcnNlciBwYXRoIGlmIGl0IGNvbnRhaW5zIGNvbG9ucw0KICAgIHMv
XlxRJENGRy0+e1BhdGhzfS0+e1NHTUx9LT57UGFyc2VyfVxFLy8gaWYNCiAgICAgICAgICRDRkct
PntQYXRoc30tPntTR01MfS0+e1BhcnNlcn0gPX4gLzovOw0KDQogICAgcHVzaCBAeyRGaWxlLT57
REVCVUd9LT57RXJyb3JzfX0sICRfOw0KICAgIGNob21wOw0KICAgIG15ICgkZXJyLCBAZXJyb3Jz
KTsNCiAgICBuZXh0IGlmIC9ePE9TRkQ+MDpbMC05XSs6WzAtOV0rOlteQS1aXS87DQogICAgbmV4
dCBpZiAvbnVtYmVycyBleGNlZWRpbmcgNjU1MzUgbm90IHN1cHBvcnRlZC87DQogICAgbmV4dCBp
ZiAvVVJMIFJlZGlyZWN0ZWQgdG8vOw0KDQogICAgbXkgKEBfZXJyKSA9IHNwbGl0IC86LzsNCiAg
ICBuZXh0IHVubGVzcyAkX2VyclsxXSBlcSAnPE9TRkQ+MCc7ICNAQEZJWE1FOiBUaGlzIGlzIGEg
cG9saXRlIGZpY3Rpb24hOw0KICAgIGlmICgkX2VyclsxXSA9fiBtKF48VVJMPikpIHsNCiAgICAg
IEBlcnJvcnMgPSAoJF9lcnJbMF0sIGpvaW4oJzonLCAkX2VyclsxXSwgJF9lcnJbMl0pLCBAX2Vy
clszLi4kI19lcnJdKTsNCiAgICB9IGVsc2Ugew0KICAgICAgQGVycm9ycyA9IEBfZXJyOw0KICAg
IH0NCiAgICAkZXJyLT57c3JjfSAgPSAkZXJyb3JzWzFdOw0KICAgICRlcnItPntsaW5lfSA9ICRl
cnJvcnNbMl07DQogICAgJGVyci0+e2NoYXJ9ID0gJGVycm9yc1szXTsNCg0KICAgICMgV29ya2Fy
b3VuZCBmb3Igb25zZ21scyAxLjUgc29tZXRpbWVzIHJlcG9ydGluZyBlcnJvcnMgYmV5b25kIEVP
TC4NCiAgICBpZiAoKG15ICRsID0gbGVuZ3RoKCRGaWxlLT57Q29udGVudH0tPlskZXJyLT57bGlu
ZX0tMV0pKSA8ICRlcnItPntjaGFyfSkgew0KICAgICAgJGVyci0+e2NoYXJ9ID0gJGw7DQogICAg
fQ0KICAgICRlcnItPntudW19ICA9ICRlcnJvcnNbNF0gfHwgJyc7DQogICAgDQogICAgIyB0aGUg
Zm9sbG93aW5nIGlzIG5lY2Vzc2FyeSBmb3Igb3BlblNQIDEuNS4yKywgDQogICAgIyB3aGljaCBz
ZWVtcyB0byBoYXZlIGludHJvZHVjZWQgYSBjaGFuZ2UgaW4gZXJyb3IgbWVzc2FnZW51bWJlcmlu
Zw0KICAgICMgc3ludGF4IGFwcGVhcnMgdG8gYmUgc2Vzc2lvbl9pZC5lcnJvcl9pZCAtIFdlIGtl
ZXAgb25seSB0aGUgbGF0dGVyIHBhcnQNCiAgICAkZXJyLT57bnVtfSAgPX4gcy8oLiopXC4vLzsN
CiAgICANCiAgICAkZXJyLT57dHlwZX0gPSAkZXJyb3JzWzVdIHx8ICcnOw0KICAgIGlmICgkZXJy
LT57dHlwZX0gZXEgJ0UnIG9yICRlcnItPnt0eXBlfSBlcSAnWCcgb3IgJGVyci0+e3R5cGV9IGVx
ICdRJykgew0KICAgICAgJGVyci0+e21zZ30gID0gam9pbiAnOicsIEBlcnJvcnNbNiAuLiAkI2Vy
cm9yc107DQogICAgfSBlbHNpZiAoJGVyci0+e3R5cGV9IGVxICdXJykgew0KDQogICAgICAjQEBG
SVhNRTogVGhpcyBpcyBib3JrZWQgYWZ0ZXIgdGVtcGxhdGlmaWNhdGlvbi4NCiAgICAgICMgJmFk
ZF93YXJuaW5nKCRGaWxlLCAnZmFrZScsICdXYXJuaW5nOicsDQogICAgICAjICAiTGluZSAkZXJy
LT57bGluZX0sIGNvbHVtbiAkZXJyLT57Y2hhcn06ICIgLiAmZW50KCRlcnJvcnNbNl0pKTsNCiAg
ICAgICNAQEZJWE1FOw0KICAgICAgJGVyci0+e21zZ30gID0gam9pbiAnOicsIEBlcnJvcnNbNiAu
LiAkI2Vycm9yc107DQogICAgfSBlbHNlIHsNCiAgICAgICRlcnItPnt0eXBlfSA9ICdJJzsNCiAg
ICAgICRlcnItPntudW19ICA9ICcnOw0KICAgICAgJGVyci0+e21zZ30gID0gam9pbiAnOicsIEBl
cnJvcnNbNCAuLiAkI2Vycm9yc107DQogICAgfQ0KDQogICAgIyBObyBvciB1bmtub3duIEZQSSBh
bmQgYSByZWxhdGl2ZSBTSS4NCiAgICBpZiAoJGVyci0+e21zZ30gPX4gbShjYW5ub3QgKG9wZW58
ZmluZCkpKSB7DQogICAgICAkRmlsZS0+eydFcnJvciBGbGFnZ2VkJ30gPSBUUlVFOw0KICAgICAg
JEZpbGUtPntFfS0+cGFyYW0oZmF0YWxfcGFyc2VfZXh0aWRfZXJyb3IgPT4gVFJVRSk7DQogICAg
ICAkRmlsZS0+e0V9LT5wYXJhbShmYXRhbF9wYXJzZV9leHRpZF9tc2cgICA9PiAkZXJyLT57bXNn
fSk7DQogICAgfQ0KDQogICAgIyBObyBET0NUWVBFLg0KICAgIGlmICgkZXJyLT57bXNnfSA9fiBt
KHByb2xvZyBjYW5cJ3QgYmUgb21pdHRlZCkpIHsNCiAgICAgIG15ICRkdGQgPSAoJEZpbGUtPntN
b2RlfSA9PSBNT0RFX1NHTUwgPw0KICAgICAgICAgICAgICAgICAgICdIVE1MIDQuMDEgVHJhbnNp
dGlvbmFsJyA6ICdYSFRNTCAxLjAgVHJhbnNpdGlvbmFsJyk7DQogICAgICAmYWRkX3dhcm5pbmco
J1cwOScsIHtXMDlfZHRkID0+ICRkdGR9KTsNCiAgICAgIG5leHQ7ICMgRG9uJ3QgcmVwb3J0IHRo
aXMgYXMgYSBub3JtYWwgZXJyb3IuDQogICAgfQ0KDQogICAgJmFib3J0X2lmX2Vycm9yX2ZsYWdn
ZWQoJEZpbGUsIE9fRE9DVFlQRSk7DQogICAgJGVyci0+e21zZ30gPX4gcy9eXHMqLy87DQogICAg
cHVzaCBAeyRGaWxlLT57RXJyb3JzfX0sICRlcnI7DQogIH0NCiAgdW5kZWYgJGZoOw0KICByZXR1
cm4gJEZpbGU7DQp9DQoNCiMNCiMgR2VuZXJhdGUgYSBIVE1MIHJlcG9ydCBvZiBkZXRlY3RlZCBl
cnJvcnMuDQpzdWIgcmVwb3J0X2Vycm9ycyAoJCkgew0KICBteSAkRmlsZSA9IHNoaWZ0Ow0KICBt
eSAkRXJyb3JzID0gW107DQogIG15ICRudW1iZXJfb2ZfZXJyb3JzID0gMDsNCiAgbXkgJG51bWJl
cl9vZl93YXJuaW5ncyA9IDA7DQogIG15ICRudW1iZXJfb2ZfaW5mbyA9IDA7DQoNCiAgIyBIYXNo
IHRvIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgb2YgZWFjaCBlcnJvciBpcyByZXBvcnRlZC4NCiAg
bXkgJU1zZ3M7ICMgVXNlZCB0byBnZW5lcmF0ZSBhIFVJRCBmb3IgZXhwbGFuYXRpb25zLg0KDQog
IGlmIChzY2FsYXIgQHskRmlsZS0+e0Vycm9yc319KSB7DQogICAgZm9yZWFjaCBteSAkZXJyIChA
eyRGaWxlLT57RXJyb3JzfX0pIHsNCiAgICAgIG15ICgkbGluZSwgJGNvbCkgPSAmdHJ1bmNhdGVf
bGluZSgkRmlsZS0+e0NvbnRlbnR9LT5bJGVyci0+e2xpbmV9LTFdLCAkZXJyLT57Y2hhcn0pOw0K
DQogICAgICAkbGluZSA9ICZtYXJrX2Vycm9yKCRsaW5lLCAkY29sKTsNCg0KICAgICAgbXkgJGV4
cGxhbmF0aW9uOw0KICAgICAgaWYgKCRlcnItPntudW19KSB7DQogICAgICAgIG15ICRudW0gPSAk
ZXJyLT57bnVtfTsNCiAgICAgICAgaWYgKGV4aXN0cyAkTXNnc3skbnVtfSkgeyAjIFdlJ3ZlIGFs
cmVhZHkgc2VlbiB0aGlzIG1lc3NhZ2UuLi4NCiAgICAgICAgICBpZiAoJEZpbGUtPntPcHR9LT57
VmVyYm9zZX0pIHsgIyAuLi5zbyBvbmx5IHJlcGVhdCBpdCBpbiBWZXJib3NlIG1vZGUuDQogICAg
ICAgICAgICAkZXhwbGFuYXRpb24gPSBxcShcbiAgICA8ZGl2IGNsYXNzPSJoaWRkZW4gbWlkLSRu
dW0iPjwvZGl2PlxuKTsNCiAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg
JE1zZ3N7JG51bX0gPSAxOw0KICAgICAgICAgICRleHBsYW5hdGlvbiAuPSAiXG4gICAgJFJTUkMt
Pnttc2d9LT57JG51bX0tPnt2ZXJib3NlfVxuIg0KICAgICAgICAgICAgaWYgZXhpc3RzICRSU1JD
LT57bXNnfS0+eyRudW19DQogICAgICAgICAgICAmJiBleGlzdHMgJFJTUkMtPnttc2d9LT57JG51
bX0tPnt2ZXJib3NlfTsNCiAgICAgICAgfQ0KICAgICAgICBteSAkX21zZyA9ICRSU1JDLT57bXNn
fS0+e25vbXNnfS0+e3ZlcmJvc2V9Ow0KICAgICAgICAkX21zZyA9fiBzLzwhLS1NSUQtLT4vJG51
bS9nOw0KICAgICAgICBpZiAoJEZpbGUtPnsnSXMgVXBsb2FkJ30pDQogICAgICAgIHsNCiAgICAg
ICAgICAkX21zZyA9fiBzLzwhLS1VUkktLT4vL2cNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQog
ICAgICAgIHsNCiAgICAgICAgICBteSAkZXNjYXBlZF91cmkgPSB1cmlfZXNjYXBlKCRGaWxlLT57
VVJJfSk7DQogICAgICAgICAgJF9tc2cgPX4gcy88IS0tVVJJLS0+LyRlc2NhcGVkX3VyaS9nOw0K
ICAgICAgICB9DQogICAgICAgICRleHBsYW5hdGlvbiAuPSAiICAgICRfbXNnXG4iOyAjIFRoZSBz
ZW5kIGZlZWRiYWNrIHBsZWEuDQogICAgICB9DQoNCiAgICAgICRlcnItPntzcmN9ID0gJGxpbmU7
DQogICAgICAkZXJyLT57Y29sfSA9ICcgJyB4ICRjb2w7DQogICAgICAkZXJyLT57ZXhwbH0gPSAk
ZXhwbGFuYXRpb247DQogICAgICBpZiAoJGVyci0+e3R5cGV9IGVxICdJJykNCiAgICAgIHsNCiAg
ICAgICAgJGVyci0+e2NsYXNzfSA9ICdtc2dfaW5mbyc7DQogICAgICAgICRlcnItPntlcnJfdHlw
ZV9lcnJ9ID0gMDsNCiAgICAgICAgJGVyci0+e2Vycl90eXBlX3dhcm59ID0gMDsNCiAgICAgICAg
JGVyci0+e2Vycl90eXBlX2luZm99ID0gMTsNCiAgICAgICAgJG51bWJlcl9vZl9pbmZvICs9IDE7
DQogICAgICB9DQogICAgICBlbHNpZiAoJGVyci0+e3R5cGV9IGVxICdFJykNCiAgICAgIHsNCiAg
ICAgICAgJGVyci0+e2NsYXNzfSA9ICdtc2dfZXJyJzsNCiAgICAgICAgJGVyci0+e2Vycl90eXBl
X2Vycn0gPSAxOw0KICAgICAgICAkZXJyLT57ZXJyX3R5cGVfd2Fybn0gPSAwOw0KICAgICAgICAk
ZXJyLT57ZXJyX3R5cGVfaW5mb30gPSAwOw0KICAgICAgICAkbnVtYmVyX29mX2Vycm9ycyArPSAx
Ow0KICAgICAgfQ0KICAgICAgZWxzaWYgKCgkZXJyLT57dHlwZX0gZXEgJ1cnKSBvciAoJGVyci0+
e3R5cGV9IGVxICdYJykgKQ0KICAgICAgew0KICAgICAgICAkZXJyLT57Y2xhc3N9ID0gJ21zZ193
YXJuJzsNCiAgICAgICAgJGVyci0+e2Vycl90eXBlX2Vycn0gPSAwOw0KICAgICAgICAkZXJyLT57
ZXJyX3R5cGVfd2Fybn0gPSAxOw0KICAgICAgICAkZXJyLT57ZXJyX3R5cGVfaW5mb30gPSAwOw0K
ICAgICAgICAkbnVtYmVyX29mX3dhcm5pbmdzICs9IDE7DQogICAgICB9DQogICAgICAjIFRPRE8g
b3RoZXIgY2xhc3NlcyBmb3IgIlgiIGV0Yz8gRklYTUUgZmluZCBhbGwgdHlwZXMgb2YgbWVzc2Fn
ZS4NCg0KICAgICAgcHVzaCBAeyRFcnJvcnN9LCAkZXJyOw0KICAgIH0NCiAgfQ0KICByZXR1cm4g
JG51bWJlcl9vZl9lcnJvcnMsICRudW1iZXJfb2Zfd2FybmluZ3MsICRudW1iZXJfb2ZfaW5mbywg
JEVycm9yczsNCn0NCg0KDQojDQojIENob3AgdGhlIHNvdXJjZSBsaW5lIGludG8gMyBwaWVjZXM7
IHRoZSBjaGFyYWN0ZXIgYXQgd2hpY2ggdGhlIGVycm9yDQojIHdhcyBkZXRlY3RlZCwgYW5kIGV2
ZXJ5dGhpbmcgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIHRoYXQgcG9zaXRpb24uDQojIFRoYXQg
d2F5IHdlIGNhbiBhZGQgbWFya3VwIHRvIHRoZSByZWxldmFudCBjaGFyIHdpdGhvdXQgYnJlYWtp
bmcgJmVudCgpLg0Kc3ViIG1hcmtfZXJyb3IgKFwkXCQpIHsNCiAgbXkgJGxpbmUgPSBzaGlmdDsN
CiAgbXkgJGNvbCAgPSBzaGlmdDsNCg0KICAjDQogICMgTGVmdCBzaWRlLi4uDQogIG15ICRsZWZ0
Ow0KICB7DQogICAgbXkgJG9mZnNldCA9IDA7ICMgTGVmdCBzaWRlIGFsbHdheXMgc3RhcnRzIGF0
IDAuDQogICAgbXkgJGxlbmd0aDsNCg0KICAgIGlmICgkY29sIC0gMSA8IDApIHsgIyBJZiBlcnJv
ciBpcyBhdCBzdGFydCBvZiBsaW5lLi4uDQogICAgICAkbGVuZ3RoID0gMDsgIyAuLi5mbG9vciB0
byAwIChubyBuZWdhdGl2ZSBvZmZzZXQpLg0KICAgIH0gZWxzaWYgKCRjb2wgPT0gbGVuZ3RoICRs
aW5lKSB7ICMgSWYgZXJyb3IgaXMgYXQgRU9MLi4uDQogICAgICAkbGVuZ3RoID0gJGNvbCAtIDE7
ICMgLi4ubGVhdmUgbGFzdCBjaGFyIHRvIGluZGljYXRlIHBvc2l0aW9uLg0KICAgIH0gZWxzZSB7
ICMgT3RoZXJ3aXNlIGdyYWIgZXZlcnl0aGluZyB1cCB0byBwb3Mgb2YgZXJyb3IuDQogICAgICAk
bGVuZ3RoID0gJGNvbDsNCiAgICB9DQogICAgJGxlZnQgPSBzdWJzdHIgJGxpbmUsICRvZmZzZXQs
ICRsZW5ndGg7DQogICAgJGxlZnQgPSAmZW50KCRsZWZ0KTsNCiAgfQ0KDQogICMNCiAgIyBUaGUg
Y2hhcmFjdGVyIHdoZXJlIHRoZSBlcnJvciB3YXMgZGV0ZWN0ZWQuDQogIG15ICRjaGFyOw0KICB7
DQogICAgbXkgJG9mZnNldDsNCiAgICBteSAkbGVuZ3RoID0gMTsgIyBMZW5ndGggaXMgYWx3YXlz
IDE7IHRoZSBjaGFyIHdoZXJlIGVycm9yIHdhcyBmb3VuZC4NCg0KICAgIGlmICgkY29sID09IGxl
bmd0aCAkbGluZSkgeyAjIElmIGVyciBpcyBhdCBFT0wuLi4NCiAgICAgICRvZmZzZXQgPSAkY29s
IC0gMTsgIyAuLi50aGVuIGdyYWIgbGFzdCBjaGFyIG9uIGxpbmUgaW5zdGVhZC4NCiAgICB9IGVs
c2Ugew0KICAgICAgJG9mZnNldCA9ICRjb2w7ICMgT3RoZXJ3aXNlIGp1c3QgZ3JhYiB0aGUgY2hh
ci4NCiAgICB9DQogICAgJGNoYXIgPSBzdWJzdHIgJGxpbmUsICRvZmZzZXQsICRsZW5ndGg7DQog
ICAgJGNoYXIgPSAmZW50KCRjaGFyKTsNCiAgfQ0KDQogICMNCiAgIyBUaGUgcmlnaHQgc2lkZSB1
cCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLi4uDQogIG15ICRyaWdodDsNCiAgew0KICAgIG15ICRv
ZmZzZXQ7DQogICAgbXkgJGxlbmd0aDsNCg0KICAgICMgT2Zmc2V0Li4uDQogICAgaWYgKCRjb2wg
PT0gbGVuZ3RoICRsaW5lKSB7ICMgSWYgYXQgRU9MLi4uDQogICAgICAkb2Zmc2V0ID0gMDsgIyBE
b24ndCBib3RoZXIgYXMgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIGdyYWIuDQogICAgfSBlbHNl
IHsNCiAgICAgICRvZmZzZXQgPSAkY29sICsgMTsgIyBPdGhlcndpc2UgZ2V0IGV2ZXJ5dGhpbmcg
ZnJvbSBjaGFyLWFmdGVyLWVycm9yLg0KICAgIH0NCg0KICAgICMgTGVuZ3RoLi4uDQogICAgaWYg
KCRjb2wgPT0gbGVuZ3RoICRsaW5lKSB7ICMgSWYgYXQgZW5kIG9mIGxpbmUuLi4NCiAgICAgICRs
ZW5ndGggPSAwOyAjIC4uLnRoZW4gZG9uJ3QgZ3JhYiBhbnl0aGluZy4NCiAgICB9IGVsc2Ugew0K
ICAgICAgJGxlbmd0aCA9IGxlbmd0aCgkbGluZSkgLSAoJGNvbCAtIDEpOyAjIE90aGVyd2lzZSBn
ZXQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuDQogICAgfQ0KICAgICRyaWdodCA9IHN1YnN0ciAkbGlu
ZSwgJG9mZnNldCwgJGxlbmd0aDsNCiAgICAkcmlnaHQgPSAmZW50KCRyaWdodCk7DQogIH0NCg0K
ICAkY2hhciA9IHFxKDxzdHJvbmcgdGl0bGU9IlBvc2l0aW9uIHdoZXJlIGVycm9yIHdhcyBkZXRl
Y3RlZC4iPiRjaGFyPC9zdHJvbmc+KTsNCiAgJGxpbmUgPSAkbGVmdCAuICRjaGFyIC4gJHJpZ2h0
Ow0KDQogIHJldHVybiAkbGluZTsNCn0NCg0KIw0KIyBQcm9kdWNlIGFuIG91dGxpbmUgb2YgdGhl
IGRvY3VtZW50IGJhc2VkIG9uIEhuIGVsZW1lbnRzIGZyb20gdGhlIEVTSVMuDQpzdWIgb3V0bGlu
ZSB7DQogIG15ICRGaWxlID0gc2hpZnQ7DQoNCiAgbXkgJG91dGxpbmUgPSAnJzsNCg0KICBteSAk
cHJldmxldmVsID0gMDsNCiAgbXkgJGxldmVsICAgICA9IDA7DQoNCiAgZm9yICgxLi4kI3skRmls
ZS0+e0VTSVN9fSkgew0KICAgIG15ICRsaW5lID0gJEZpbGUtPntFU0lTfS0+WyRfXTsNCiAgICBu
ZXh0IHVubGVzcyAoJGxpbmUgJiYgJGxpbmUgPX4gL15cKEgoWzEtNl0pJC9pKTsNCg0KICAgICRw
cmV2bGV2ZWwgPSAkbGV2ZWw7DQogICAgJGxldmVsICAgICA9ICQxOw0KDQogICAgbXkgJFRBQiA9
ICRsZXZlbCArIDI7DQoNCiAgICBpZiAoJHByZXZsZXZlbCA9PSAwKSB7DQogICAgICAkb3V0bGlu
ZSAuPSAiICAgIDx1bD5cbiI7DQogICAgfSBlbHNlIHsNCiAgICAgIGlmICgkbGV2ZWwgPCAkcHJl
dmxldmVsKSB7DQogICAgICAgICRvdXRsaW5lIC49ICI8L2xpPlxuIjsNCiAgICAgICAgZm9yICht
eSAkaSA9ICRwcmV2bGV2ZWw7ICRpID4gJGxldmVsOyAkaS0tKSB7DQogICAgICAgICAgJG91dGxp
bmUgLj0gIiAgIiB4ICgkaSArIDIpICAgICAgIC4gIjwvdWw+XG4iOw0KICAgICAgICAgICRvdXRs
aW5lIC49ICIgICIgeCAoKCRpICsgMikgLSAxKSAuICI8L2xpPlxuIjsNCiAgICAgICAgfQ0KICAg
ICAgfSBlbHNpZiAoJGxldmVsID09ICRwcmV2bGV2ZWwpIHsNCiAgICAgICAgJG91dGxpbmUgLj0g
IjwvbGk+XG4iOw0KICAgICAgfSBlbHNpZiAoJGxldmVsID4gJHByZXZsZXZlbCkgew0KICAgICAg
ICBpZiAoJGxldmVsIC0gJHByZXZsZXZlbCA+IDEpIHsNCiAgICAgICAgICBmb3JlYWNoIG15ICRp
ICgoJHByZXZsZXZlbCArIDEpIC4uICgkbGV2ZWwgLSAxKSkgew0KICAgICAgICAgICAgJG91dGxp
bmUgLj0gIlxuIi4gIiAgIiB4ICgkaSArIDIpIC4gIjx1bD5cbiIgLiAiICAiIHggKCRpICsgMik7
DQogICAgICAgICAgICAkb3V0bGluZSAuPSBxcSg8bGkgY2xhc3M9Indhcm5pbmciPkEgbGV2ZWwg
JGkgaGVhZGluZyBpcyBtaXNzaW5nISk7DQogICAgICAgICAgfQ0KICAgICAgICAgICRvdXRsaW5l
IC49ICJcbiIgLiAiICAiIHggJFRBQiAuICI8dWw+XG4iOw0KICAgICAgICB9IGVsc2Ugew0KICAg
ICAgICAgICRvdXRsaW5lIC49ICJcbiIgLiAiICAiIHggJFRBQjsNCiAgICAgICAgICAkb3V0bGlu
ZSAuPSAiPHVsPlxuIjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCg0KICAgICRsaW5lICAg
ICAgID0gJyc7DQogICAgbXkgJGhlYWRpbmcgPSAnJzsNCiAgICB1bnRpbCAoc3Vic3RyKCRsaW5l
LCAwLCAzKSA9fiAvXlwpSCRsZXZlbC9pKSB7DQogICAgICAkbGluZSA9ICRGaWxlLT57RVNJU30t
PlskXysrXTsNCiAgICAgIGlmICgkbGluZSA9fiAvXi0vKSB7DQogICAgICAgIG15ICRoZWFkY29u
dCA9ICRsaW5lOw0KICAgICAgICBzdWJzdHIoJGhlYWRjb250LCAwLCAxKSA9ICIgIjsNCiAgICAg
ICAgJGhlYWRpbmcgLj0gJGhlYWRjb250Ow0KICAgICAgfSBlbHNpZiAoJGxpbmUgPX4gL15BQUxU
IENEQVRBKCAuKykvaSkgew0KICAgICAgICBteSAkaGVhZGNvbnQgPSAkMTsNCiAgICAgICAgJGhl
YWRpbmcgLj0gJGhlYWRjb250Ow0KICAgICAgfQ0KICAgIH0NCg0KICAgICRoZWFkaW5nID1+IHMv
XFwwMTEvIC9nOw0KICAgICRoZWFkaW5nID1+IHMvXFwwMTIvIC9nOw0KICAgICRoZWFkaW5nID1+
IHMvXFxuLyAvZzsNCiAgICAkaGVhZGluZyA9fiBzL1xzKy8gL2c7DQogICAgJGhlYWRpbmcgPX4g
cy9eWy0gXS8vOw0KICAgICRoZWFkaW5nID0gJmVudCgkaGVhZGluZyk7DQogICAgJG91dGxpbmUg
Lj0gIiAgICA8bGk+JGhlYWRpbmciOw0KICB9DQogICRvdXRsaW5lIC49ICIgICAgPC9saT48L3Vs
PlxuIiB4ICRsZXZlbDsNCiAgcmV0dXJuICRvdXRsaW5lOw0KfQ0KDQojDQojIENyZWF0ZSBhIEhU
TUwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50Lg0Kc3ViIHNvdXJjZSB7DQogIG15ICRG
aWxlID0gc2hpZnQ7DQoNCiAgIyBSZW1vdmUgYW55IEJPTSBzaW5jZSB3ZSdyZSBub3QgYXQgQk9U
IGFueW1vcmUuLi4NCiAgJEZpbGUtPntDb250ZW50fS0+WzBdID0NCiAgICBzdWJzdHIgJEZpbGUt
PntDb250ZW50fS0+WzBdLCAoJEZpbGUtPntCT019ID8gMyA6IDApOyAjIHJlbW92ZSBCT00NCg0K
ICBteSBAc291cmNlID0gbWFwKHtmaWxlX3NvdXJjZV9saW5lID0+ICRffSwgQHskRmlsZS0+e0Nv
bnRlbnR9fSk7DQogIHJldHVybiBcQHNvdXJjZTsNCn0NCg0KIw0KIyBDcmVhdGUgYSBIVE1MIFBh
cnNlIFRyZWUgb2YgdGhlIGRvY3VtZW50IGZvciB2YWxpZGF0aW9uIHJlcG9ydC4NCnN1YiBwYXJz
ZXRyZWUgew0KICBteSAkRmlsZSA9IHNoaWZ0Ow0KICBteSAkdHJlZSA9ICcnOw0KDQogICRULT5w
YXJhbShmaWxlX3BhcnNldHJlZV9ub2F0dCA9PiBUUlVFKSBpZiAkRmlsZS0+e09wdH0tPnsnTm8g
QXR0cmlidXRlcyd9Ow0KDQogIG15ICRpbmRlbnQgICA9IDA7DQogIG15ICRwcmV2ZGF0YSA9ICcn
Ow0KDQogIGZvcmVhY2ggbXkgJGxpbmUgKEB7JEZpbGUtPntFU0lTfX0pIHsNCg0KICAgIG5leHQg
aWYgKCRGaWxlLT57T3B0fS0+eydObyBBdHRyaWJ1dGVzJ30gJiYgJGxpbmUgPX4gL15BLyk7DQoN
CiAgICAkbGluZSA9fiBzL1xcbi8gL2c7DQogICAgJGxpbmUgPX4gcy9cXDAxMS8gL2c7DQogICAg
JGxpbmUgPX4gcy9cXDAxMi8gL2c7DQogICAgJGxpbmUgPX4gcy9ccysvIC9nOw0KICAgIG5leHQg
aWYgJGxpbmUgPX4gL14tXHMqJC87DQoNCiAgICBpZiAoJGxpbmUgPX4gL14tLykgew0KICAgICAg
c3Vic3RyKCRsaW5lLCAwLCAxKSA9ICcgJzsNCiAgICAgICRwcmV2ZGF0YSAuPSAkbGluZTsNCiAg
ICAgIG5leHQ7DQogICAgfSBlbHNpZiAoJHByZXZkYXRhKSB7DQogICAgICAkcHJldmRhdGEgPX4g
cy9ccysvIC9nOw0KICAgICAgbG9jYWwoJFRleHQ6OldyYXA6Omh1Z2UpID0gJ292ZXJmbG93Jzsg
IyBidWcgMjYyMw0KICAgICAgJHRyZWUgLj0gJmVudCh3cmFwKCcgJyB4ICRpbmRlbnQsICcgJyB4
ICRpbmRlbnQsICRwcmV2ZGF0YSkpIC4gIlxuIjsNCiAgICAgIHVuZGVmICRwcmV2ZGF0YTsNCiAg
ICB9DQoNCiAgICAkbGluZSA9ICZlbnQoJGxpbmUpOw0KICAgIGlmICgkbGluZSA9fiAvXlwpLykg
ew0KICAgICAgJGluZGVudCAtPSAyOw0KICAgIH0NCg0KICAgIG15ICRwcmludG1lOw0KICAgIGNo
b21wKCRwcmludG1lID0gJGxpbmUpOw0KICAgIGlmIChteSAoJGNsb3NlLCAkZWxlbSkgPSAkcHJp
bnRtZSA9fiAvXihbKCldKSguKykvKSB7DQogICAgICAjIHJlZm9ybWF0IGFuZCBhZGQgbGlua3Mg
b24gSFRNTCBlbGVtZW50cw0KICAgICAgJGNsb3NlID0gKCRjbG9zZSBlcSAnKScpID8gJy8nIDog
Jyc7ICMgIikiIC0+IGNsb3NlLXRhZw0KICAgICAgaWYgKG15ICR1ID0gJENGRy0+e0VsZW1lbnRz
fS0+e2xjKCRlbGVtKX0pIHsNCiAgICAgICAgJGVsZW0gPSAnPGEgaHJlZj0iJyAuICRDRkctPnsn
RWxlbWVudCBSZWYgVVJJJ30gLiAiJHVcIj4kZWxlbTwvYT4iOw0KICAgICAgfQ0KICAgICAgJHBy
aW50bWUgPSAiJmx0OyRjbG9zZSRlbGVtJmd0OyI7DQogICAgfSBlbHNlIHsNCiAgICAgICRwcmlu
dG1lID1+IHMsXkEsICBBLDsgIyBpbmRlbnQgYXR0cmlidXRlcyBhIGJpdA0KICAgIH0NCg0KICAg
ICR0cmVlIC49ICcgJyB4ICRpbmRlbnQgLiAkcHJpbnRtZSAuICJcbiI7DQoNCiAgICBpZiAoJGxp
bmUgPX4gL15cKC8pIHsNCiAgICAgICRpbmRlbnQgKz0gMjsNCiAgICB9DQogIH0NCiAgcmV0dXJu
ICR0cmVlOw0KfQ0KDQojDQojIERvIGFuIGluaXRpYWwgcGFyc2Ugb2YgdGhlIERvY3VtZW50IEVu
dGl0eSB0byBleHRyYWN0IEZQSS4NCnN1YiBwcmVwYXJzZV9kb2N0eXBlIHsNCiAgbXkgJEZpbGUg
PSBzaGlmdDsNCg0KICAjDQogICMgUmVzZXQgRE9DVFlQRSwgUm9vdCAoZm9yIHNlY29uZCBpbnZv
Y2F0aW9uLCBwcm9iYWJseSBub3QgbmVlZGVkIGFueW1vcmUpLg0KICAkRmlsZS0+e0RPQ1RZUEV9
ICAgICAgICAgPSAnJzsNCiAgJEZpbGUtPntSb290fSAgICAgICAgICAgID0gJyc7DQoNCiAgbXkg
JGR0ZCA9IHN1YiB7DQogICAgcmV0dXJuIGlmICRGaWxlLT57Um9vdH07DQogICAgKCRGaWxlLT57
Um9vdH0sICRGaWxlLT57RE9DVFlQRX0pID0gc2hpZnQgPX4gbSg8IURPQ1RZUEVccysoXHcrKVxz
Kyg/OlBVQkxJQ3xTWVNURU0pXHMrKD86W1wnXCJdKShbXlwiXCddKykoPzpbXCJcJ10pLio+KXNp
Ow0KICB9Ow0KDQogIG15ICRzdGFydCA9IHN1YiB7DQogICAgbXkgJHRhZyAgPSBzaGlmdDsNCiAg
ICBteSAkYXR0ciA9IHNoaWZ0Ow0KICAgIG15ICVhdHRyID0gbWFwIHtsYygkXykgPT4gJGF0dHIt
PnskX319IGtleXMgJXskYXR0cn07DQoNCiAgICBpZiAoJEZpbGUtPntSb290fSkgew0KICAgICAg
cmV0dXJuIHVubGVzcyAkdGFnIGVxICRGaWxlLT57Um9vdH07DQogICAgfSBlbHNlIHsNCiAgICAg
ICRGaWxlLT57Um9vdH0gPSAkdGFnOw0KICAgIH0NCiAgICBpZiAoJGF0dHItPnt4bWxuc30pIHsk
RmlsZS0+e05hbWVzcGFjZX0gPSAkYXR0ci0+e3htbG5zfX07DQogIH07DQoNCiAgbXkgJHAgPSBI
VE1MOjpQYXJzZXItPm5ldyhhcGlfdmVyc2lvbiA9PiAzKTsNCiAgJHAtPnhtbF9tb2RlKFRSVUUp
Ow0KICAkcC0+aWdub3JlX2VsZW1lbnRzKCdCT0RZJyk7DQogICRwLT5pZ25vcmVfZWxlbWVudHMo
J2JvZHknKTsNCiAgJHAtPmhhbmRsZXIoZGVjbGFyYXRpb24gPT4gJGR0ZCwgJ3RleHQnKTsNCiAg
JHAtPmhhbmRsZXIoc3RhcnQgPT4gJHN0YXJ0LCAndGFnLGF0dHInKTsNCiAgJHAtPnBhcnNlKGpv
aW4gIlxuIiwgQHskRmlsZS0+e0NvbnRlbnR9fSk7DQoNCiAgJEZpbGUtPntET0NUWVBFfSA9ICcn
IHVubGVzcyBkZWZpbmVkICRGaWxlLT57RE9DVFlQRX07DQogICRGaWxlLT57RE9DVFlQRX0gPX4g
cyheXHMrKXsgfWc7DQogICRGaWxlLT57RE9DVFlQRX0gPX4gcyhccyskKXsgfWc7DQogICRGaWxl
LT57RE9DVFlQRX0gPX4gcyhccyspIHsgfWc7DQoNCiAgcmV0dXJuICRGaWxlOw0KfQ0KDQojDQoj
IFByaW50IG91dCB0aGUgcmF3IEVTSVMgb3V0cHV0IGZvciBkZWJ1Z2dpbmcuDQpzdWIgc2hvd19l
c2lzICgkKSB7DQogIG15ICRmaWxlX2VzaXMgPSAiIjsNCiAgZm9yIChAe3NoaWZ0LT57RVNJU319
KSB7DQogICAgcy9cXDAxMi8vZzsNCiAgICBzL1xcbi9cbi9nOw0KICAgICRmaWxlX2VzaXMgLj0g
ZW50ICRfOw0KICAgICRmaWxlX2VzaXMgLj0gIlxuIjsNCiAgfQ0KICByZXR1cm4gICRmaWxlX2Vz
aXM7DQp9DQoNCiMNCiMgUHJpbnQgb3V0IHRoZSByYXcgZXJyb3Igb3V0cHV0IGZvciBkZWJ1Z2dp
bmcuDQpzdWIgc2hvd19lcnJvcnMgKCQpIHsNCiAgbXkgJGZpbGVfcmF3X2Vycm9ycyA9ICIiOw0K
ICBmb3IgKEB7c2hpZnQtPntERUJVR30tPntFcnJvcnN9fSkgew0KICAkZmlsZV9yYXdfZXJyb3Jz
IC49IGVudCAkXw0KICB9Ow0KICByZXR1cm4gJGZpbGVfcmF3X2Vycm9yczsNCn0NCg0KIw0KIyBQ
cmVwcm9jZXNzIENHSSBwYXJhbWV0ZXJzLg0Kc3ViIHByZXBDR0kgew0KICBteSAkRmlsZSA9IHNo
aWZ0Ow0KICBteSAkcSAgICA9IHNoaWZ0Ow0KDQogICMgQXZvaWQgQ0dJLnBtJ3MgImV4aXN0cyBi
dXQgdW5kZWYiIGJlaGF2aW91ci4NCiAgaWYgKHNjYWxhciAkcS0+cGFyYW0pIHsNCiAgICBmb3Jl
YWNoIG15ICRwYXJhbSAoJHEtPnBhcmFtKSB7DQogICAgICBuZXh0IGlmICRwYXJhbSBlcSAndXBs
b2FkZWRfZmlsZSc7ICMgJ3VwbG9hZGVkX2ZpbGUnIGNvbnRhaW5zIGRhdGEuDQogICAgICBuZXh0
IGlmICRwYXJhbSBlcSAnZnJhZ21lbnQnOyAgICAgICMgRGl0dG8gJ2ZyYWdtZW50Jy4NCiAgICAg
IG5leHQgaWYgJHEtPnBhcmFtKCRwYXJhbSkgZXEgJzAnOyAgIyBLZWVwIGZhbHNlLWJ1dC1zZXQg
cGFyYW1zLg0KDQogICAgICAjDQogICAgICAjIFBhcmFtZXRlcnMgdGhhdCBhcmUgZ2l2ZW4gdG8g
dXMgd2l0aG91dCBzcGVjaWZ5aW5nIGEgdmFsdWUgZ2V0DQogICAgICAjIHNldCB0byAiMSIgKHRo
ZSAiVFJVRSIgY29uc3RhbnQpLiBUaGlzIGlzIHNvIHdlIGNhbiB0ZXN0IGZvciB0aGUNCiAgICAg
ICMgYm9vbGVhbiB2YWx1ZSBvZiBhIHBhcmFtZXRlciBpbnN0ZWFkIG9mIGZpcnN0IGNoZWNraW5n
IHdoZXRoZXINCiAgICAgICMgdGhlIHBhcmFtIHdhcyBnaXZlbiBhbmQgdGhlbiB0ZXN0aW5nIGl0
J3MgdmFsdWUuIE5lZWRlZCBiZWNhdXNlDQogICAgICAjIENHSS5wbSBzZXRzICI7cGFyYW0iIGFu
ZCAiO3BhcmFtPSIgdG8gYSBib29sZWFuIGZhbHNlIHZhbHVlDQogICAgICAjICh1bmRlZigpIG9y
IGEgbnVsbCBzdHJpbmcsIHJlc3BlY3RpdmVseSkuDQogICAgICAkcS0+cGFyYW0oJHBhcmFtLCBU
UlVFKSB1bmxlc3MgJHEtPnBhcmFtKCRwYXJhbSk7DQogICAgfQ0KICB9DQoNCiAgIyBGdXR6IHRo
ZSBVUkwgc28gIi9yZWZlcmVyIiB3b3Jrcy4NCiAgaWYgKCRxLT5wYXRoX2luZm8pIHsNCiAgICBp
ZiAoJHEtPnBhdGhfaW5mbyBlcSAnL3JlZmVyZXInIG9yICRxLT5wYXRoX2luZm8gZXEgJy9yZWZl
cnJlcicpIHsNCiAgICAgIGlmICgkcS0+cmVmZXJlcikgew0KICAgICAgICAkcS0+cGFyYW0oJ3Vy
aScsICRxLT5yZWZlcmVyKTsNCiAgICAgICAgcHJpbnQgcmVkaXJlY3QgJnNlbGZfdXJsX3EoJHEs
ICRGaWxlKTsNCiAgICAgICAgZXhpdDsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHByaW50IHJl
ZGlyZWN0ICRxLT51cmwoKSAuICc/dXJpPScgLiAncmVmZXJlcic7DQogICAgICAgIGV4aXQ7DQog
ICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgIHByaW50IHJlZGlyZWN0ICZzZWxmX3VybF9xKCRx
LCAkRmlsZSk7DQogICAgICBleGl0Ow0KICAgIH0NCiAgfQ0KDQogICMgVXNlICJ1cmwiIHVubGVz
cyBhICJ1cmkiIHdhcyBhbHNvIGdpdmVuLg0KICBpZiAoJHEtPnBhcmFtKCd1cmwnKSBhbmQgbm90
ICRxLT5wYXJhbSgndXJpJykpIHsNCiAgICAkcS0+cGFyYW0oJ3VyaScsICRxLT5wYXJhbSgndXJs
JykpOw0KICB9DQoNCiAgIyBNdW5nZSB0aGUgVVJMIHRvIGluY2x1ZGUgY29tbW9ubHkgb21pdHRl
ZCBwcmVmaXguDQogIG15ICR1ID0gJHEtPnBhcmFtKCd1cmknKTsNCiAgJHEtPnBhcmFtKCd1cmkn
LCAiaHR0cDovLyR1IikgaWYgJHUgJiYgJHUgPX4gbShed3d3KWk7DQoNCiAgIyBJc3N1ZSBhIHJl
ZGlyZWN0IGZvciB1cmk9cmVmZXJlci4NCiAgaWYgKCRxLT5wYXJhbSgndXJpJykgYW5kICRxLT5w
YXJhbSgndXJpJykgZXEgJ3JlZmVyZXInKSB7DQogICAgaWYgKCRxLT5yZWZlcmVyKSB7DQogICAg
ICAkcS0+cGFyYW0oJ3VyaScsICRxLT5yZWZlcmVyKTsNCiAgICAgIHByaW50IHJlZGlyZWN0ICZz
ZWxmX3VybF9xKCRxLCAkRmlsZSk7DQogICAgICBleGl0Ow0KICAgIH0gZWxzZSB7DQoNCiAgICAg
ICMgUmVkaXJlY3RlZCBmcm9tIC9jaGVjay9yZWZlcmVyIHRvIC9jaGVjaz91cmk9cmVmZXJlciBi
ZWNhdXNlDQogICAgICAjIHRoZSBicm93c2VyIGRpZG4ndCBzZW5kIGEgUmVmZXJlciBoZWFkZXIs
IG9yIHRoZSByZXF1ZXN0IHdhcw0KICAgICAgIyBmb3IgL2NoZWNrP3VyaT1yZWZlcmVyIGJ1dCBu
byBSZWZlcmVyIGhlYWRlciB3YXMgZm91bmQuDQogICAgICAkRmlsZS0+eydFcnJvciBGbGFnZ2Vk
J30gPSBUUlVFOw0KDQogICAgICAkRmlsZS0+e0V9LT5wYXJhbShmYXRhbF9yZWZlcmVyX2Vycm9y
ID0+IFRSVUUpOw0KICAgIH0NCiAgfQ0KDQogICMgU3VwZXJzZWRlIFVSTCB3aXRoIGFuIHVwbG9h
ZGVkIGZpbGUuDQogIGlmICgkcS0+cGFyYW0oJ3VwbG9hZGVkX2ZpbGUnKSkgew0KICAgICRxLT5w
YXJhbSgndXJpJywgJ3VwbG9hZDovLycgLiAkcS0+cGFyYW0oJ3VwbG9hZGVkX2ZpbGUnKSk7DQog
ICAgJEZpbGUtPnsnSXMgVXBsb2FkJ30gPSBUUlVFOyAjIFRhZyBpdCBmb3IgbGF0ZXIgdXNlLg0K
ICB9DQoNCiAgIyBTdXBlcnNlZGUgVVJMIHdpdGggYW4gdXBsb2FkZWQgZnJhZ21lbnQuDQogIGlm
ICgkcS0+cGFyYW0oJ2ZyYWdtZW50JykpIHsNCiAgICAkcS0+cGFyYW0oJ3VyaScsICd1cGxvYWQ6
Ly9Gb3JtIFN1Ym1pc3Npb24nKTsNCiAgICAkRmlsZS0+eydJcyBVcGxvYWQnfSA9IFRSVUU7ICMg
VGFnIGl0IGZvciBsYXRlciB1c2UuDQogIH0NCg0KICAjIFJlZGlyZWN0IHRvIGEgR0VUYWJsZSBV
UkwgaWYgbWV0aG9kIGlzIFBPU1Qgd2l0aG91dCBhIGZpbGUgdXBsb2FkLg0KICBpZiAoJHEtPnJl
cXVlc3RfbWV0aG9kIGVxICdQT1NUJyBhbmQgbm90ICRGaWxlLT57J0lzIFVwbG9hZCd9KSB7DQog
ICAgbXkgJHRoaXNwYWdlID0gJnNlbGZfdXJsX3EoJHEsICRGaWxlKTsNCiAgICBwcmludCByZWRp
cmVjdCAkdGhpc3BhZ2U7DQogICAgZXhpdDsNCiAgfQ0KDQogICMNCiAgIyBGbGFnIGFuIGVycm9y
IGlmIHdlIGRpZG4ndCBnZXQgYSBmaWxlIHRvIHZhbGlkYXRlLg0KICB1bmxlc3MgKCRxLT5wYXJh
bSgndXJpJykpIHsNCiAgICAkRmlsZS0+eydFcnJvciBGbGFnZ2VkJ30gPSBUUlVFOw0KICAgICRG
aWxlLT57RX0tPnBhcmFtKGZhdGFsX3VyaV9lcnJvciAgPT4gVFJVRSk7DQogICAgJEZpbGUtPntF
fS0+cGFyYW0oZmF0YWxfdXJpX3NjaGVtZSA9PiAndW5kZWZpbmVkJyk7DQogIH0NCg0KICByZXR1
cm4gJHE7DQp9DQoNCiMNCiMgUHJlcHJvY2VzcyBTU0kgZmlsZXMuDQpzdWIgcHJlcFNTSSB7DQog
IG15ICRvcHQgPSBzaGlmdDsNCg0KICBteSAkZmggPSBuZXcgSU86OkZpbGUgIjwgJG9wdC0+e0Zp
bGV9Ig0KICAgIG9yIGNyb2FrICJvcGVuKCRvcHQtPntGaWxlfSkgcmV0dXJuZWQ6ICQhXG4iOw0K
ICBteSAkc3NpID0gam9pbiAnJywgPCRmaD47DQogIGNsb3NlICRmaCBvciBjYXJwICJjbG9zZSgk
b3B0LT57RmlsZX0pIHJldHVybmVkOiAkIVxuIjsNCg0KICAkc3NpID1+IHMvPCEtLVwjZWNobyB2
YXI9InRpdGxlIiAtLT4vJG9wdC0+e1RpdGxlfS9nDQogICAgaWYgZGVmaW5lZCAkb3B0LT57VGl0
bGV9Ow0KDQogICRzc2kgPX4gcy88IS0tXCNlY2hvIHZhcj0iZGF0ZSIgLS0+LyRvcHQtPntEYXRl
fS9nDQogICAgaWYgZGVmaW5lZCAkb3B0LT57RGF0ZX07DQoNCiAgJHNzaSA9fiBzLzwhLS1cI2Vj
aG9ccyt2YXI9InJldmlzaW9uIlxzKy0tPi8kb3B0LT57UmV2aXNpb259L2cNCiAgICBpZiBkZWZp
bmVkICRvcHQtPntSZXZpc2lvbn07DQoNCiAgIyBObyBuZWVkIHRvIHBhcmFtZXRyaXplIHRoaXMg
b25lLCBpdCdzIGFsd2F5cyAiLi8iIGluIHRoaXMgY29udGV4dC4NCiAgJHNzaSA9fiBzfDwhLS1c
I2VjaG9ccyt2YXI9InJlbHJvb3QiXHMrLS0+fC4vfGc7DQoNCiAgcmV0dXJuICRzc2k7DQp9DQoN
CiMNCiMgVXRpbGl0eSBzdWIgdG8gdGVsbCBpZiBtb2RlICJpcyIgWE1MLg0Kc3ViIGlzX3htbCB7
c2hpZnQtPntNb2RlfSA9PSBNT0RFX1hNTH07DQoNCiMNCiMgRG8gYW4gaW5pdGlhbCBwYXJzZSBv
ZiB0aGUgRG9jdW1lbnQgRW50aXR5IHRvIGV4dHJhY3QgY2hhcnNldCBmcm9tIEhUTUwgPG1ldGE+
Lg0KIyAoc3RpbGwgYWxzbyBleHRyYWN0cyBGUEksIGF0IGxlYXN0IHRvIHNvbWUgZXh0ZW50KQ0K
c3ViIHByZXBhcnNlX21ldGEgew0KICBteSAkRmlsZSA9IHNoaWZ0Ow0KDQogIG15ICRkdGQgPSBz
dWIgew0KICAgIHJldHVybiBpZiAkRmlsZS0+e1Jvb3R9Ow0KICAgICgkRmlsZS0+e1Jvb3R9LCAk
RmlsZS0+e0RPQ1RZUEV9KSA9IHNoaWZ0ID1+IG0oPCFET0NUWVBFXHMrKFx3KylccytQVUJMSUNc
cysoPzpbXCdcIl0pKFteXCJcJ10rKSg/OltcIlwnXSkuKj4pc2k7DQogIH07DQoNCiAgbXkgJHN0
YXJ0ID0gc3ViIHsNCiAgICBteSAkdGFnICA9IHNoaWZ0Ow0KICAgIG15ICRhdHRyID0gc2hpZnQ7
DQogICAgbXkgJWF0dHIgPSBtYXAge2xjKCRfKSA9PiAkYXR0ci0+eyRffX0ga2V5cyAleyRhdHRy
fTsNCg0KICAgIGlmICgkRmlsZS0+e1Jvb3R9KSB7DQogICAgICBpZiAobGMgJHRhZyBlcSAnbWV0
YScpIHsNCiAgICAgICAgaWYgKGxjICRhdHRyeydodHRwLWVxdWl2J30gZXEgJ2NvbnRlbnQtdHlw
ZScpIHsNCiAgICAgICAgICBpZiAoJGF0dHJ7Y29udGVudH0gPX4gbShjaGFyc2V0XHMqPVtcc1wi
XCddKihbXlxzO1wiXCc+XSopKXNpKSB7DQogICAgICAgICAgICAkRmlsZS0+e0NoYXJzZXR9LT57
TUVUQX0gPSBsYyAkMTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJl
dHVybiB1bmxlc3MgJHRhZyBlcSAkRmlsZS0+e1Jvb3R9Ow0KICAgIH0gZWxzZSB7DQogICAgICAk
RmlsZS0+e1Jvb3R9ID0gJHRhZzsNCiAgICB9DQogIH07DQoNCiAgbXkgJHAgPSBIVE1MOjpQYXJz
ZXItPm5ldyhhcGlfdmVyc2lvbiA9PiAzKTsNCiAgJHAtPnhtbF9tb2RlKFRSVUUpOw0KICAkcC0+
aWdub3JlX2VsZW1lbnRzKCdCT0RZJyk7DQogICRwLT5pZ25vcmVfZWxlbWVudHMoJ2JvZHknKTsN
CiAgJHAtPmhhbmRsZXIoZGVjbGFyYXRpb24gPT4gJGR0ZCwgJ3RleHQnKTsNCiAgJHAtPmhhbmRs
ZXIoc3RhcnQgPT4gJHN0YXJ0LCAndGFnLGF0dHInKTsNCiAgJHAtPnBhcnNlKGpvaW4gIlxuIiwg
QHskRmlsZS0+e0NvbnRlbnR9fSk7DQoNCiAgcmV0dXJuICRGaWxlOw0KfQ0KDQojDQojIENoZWNr
IGNoYXJzZXQgY29uZmxpY3RzIGFuZCBhZGQgYW55IHdhcm5pbmdzIG5lY2Vzc2FyeS4NCnN1YiBj
aGFyc2V0X2NvbmZsaWN0cyB7DQogIG15ICRGaWxlID0gc2hpZnQ7DQoNCiAgIw0KICAjIEhhbmRs
ZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSB3YXMgbm8gY2hhcnNldCB0byBiZSBmb3VuZC4NCiAgdW5s
ZXNzICgkRmlsZS0+e0NoYXJzZXR9LT57VXNlfSkgew0KICAgICZhZGRfd2FybmluZygnVzE3Jywg
e30pOw0KICAgICRGaWxlLT57VGVudGF0aXZlfSB8PSBUX1dBUk47DQogIH0NCg0KICBteSAkY3Nf
dXNlICA9ICRGaWxlLT57Q2hhcnNldH0tPntVc2V9ICA/ICZlbnQoJEZpbGUtPntDaGFyc2V0fS0+
e1VzZX0pICA6ICcnOw0KICBteSAkY3Nfb3B0ICA9ICRGaWxlLT57T3B0fS0+e0NoYXJzZXR9ICA/
ICZlbnQoJEZpbGUtPntPcHR9LT57Q2hhcnNldH0pICA6ICcnOw0KICBteSAkY3NfaHR0cCA9ICRG
aWxlLT57Q2hhcnNldH0tPntIVFRQfSA/ICZlbnQoJEZpbGUtPntDaGFyc2V0fS0+e0hUVFB9KSA6
ICcnOw0KICBteSAkY3NfeG1sICA9ICRGaWxlLT57Q2hhcnNldH0tPntYTUx9ICA/ICZlbnQoJEZp
bGUtPntDaGFyc2V0fS0+e1hNTH0pICA6ICcnOw0KICBteSAkY3NfbWV0YSA9ICRGaWxlLT57Q2hh
cnNldH0tPntNRVRBfSA/ICZlbnQoJEZpbGUtPntDaGFyc2V0fS0+e01FVEF9KSA6ICcnOw0KDQog
ICMNCiAgIyBBZGQgYSB3YXJuaW5nIGlmIHRoZXJlIHdhcyBjaGFyc2V0IGluZm8gY29uZmxpY3Qg
KEhUVFAgaGVhZGVyLA0KICAjIFhNTCBkZWNsYXJhdGlvbiwgb3IgPG1ldGE+IGVsZW1lbnQpLg0K
ICBpZiAoJmNvbmZsaWN0KCRGaWxlLT57Q2hhcnNldH0tPntIVFRQfSwgJEZpbGUtPntDaGFyc2V0
fS0+e1hNTH0pIGFuZCBub3QgKCRGaWxlLT57J0RpcmVjdCBJbnB1dCd9KSkgew0KICAgICZhZGRf
d2FybmluZygnVzE4Jywgew0KICAgICAgVzE4X2h0dHAgPT4gJGNzX2h0dHAsDQogICAgICBXMThf
eG1sICA9PiAkY3NfeG1sLA0KICAgICAgVzE4X3VzZSAgPT4gJGNzX3VzZSwNCiAgICB9KTsNCiAg
fSBlbHNpZiAoJmNvbmZsaWN0KCRGaWxlLT57Q2hhcnNldH0tPntIVFRQfSwgJEZpbGUtPntDaGFy
c2V0fS0+e01FVEF9KSBhbmQgbm90ICgkRmlsZS0+eydEaXJlY3QgSW5wdXQnfSkpIHsNCiAgICAm
YWRkX3dhcm5pbmcoJ1cxOScsIHsNCiAgICAgIFcxOV9odHRwID0+ICRjc19odHRwLA0KICAgICAg
VzE5X21ldGEgPT4gJGNzX21ldGEsDQogICAgICBXMTlfdXNlICA9PiAkY3NfdXNlLA0KICAgIH0p
Ow0KICB9IGVsc2lmICgmY29uZmxpY3QoJEZpbGUtPntDaGFyc2V0fS0+e1hNTH0sICRGaWxlLT57
Q2hhcnNldH0tPntNRVRBfSkpIHsNCiAgICAmYWRkX3dhcm5pbmcoJ1cyMCcsIHsNCiAgICAgIFcy
MF9odHRwID0+ICRjc194bWwsDQogICAgICBXMjBfeG1sICA9PiAkY3NfbWV0YSwNCiAgICB9KTsN
CiAgICAkRmlsZS0+e1RlbnRhdGl2ZX0gfD0gVF9XQVJOOw0KICB9DQoNCiAgcmV0dXJuICRGaWxl
Ow0KfQ0KDQojDQojIFRyYW5zY29kZSB0byBVVEYtOA0Kc3ViIHRyYW5zY29kZSB7DQogIG15ICRG
aWxlID0gc2hpZnQ7DQoNCiAgbXkgJGNzID0gJEZpbGUtPntDaGFyc2V0fS0+e1VzZX07DQogIG15
ICgkY29tbWFuZCwgJHJlc3VsdF9jaGFyc2V0KSA9ICgnJywgJycpOw0KICBpZiAoJENGRy0+e0No
YXJzZXRzfS0+eyRjc30pIHsNCiAgICAoJGNvbW1hbmQsICRyZXN1bHRfY2hhcnNldCkgPSBzcGxp
dCgiICIsICRDRkctPntDaGFyc2V0c30tPnskY3N9LCAyKTsNCiAgfQ0KDQogIG15ICRjOw0KICAk
cmVzdWx0X2NoYXJzZXQgPSBleGFjdF9jaGFyc2V0KCRGaWxlLCAkcmVzdWx0X2NoYXJzZXQpOw0K
DQogIGlmICgkY29tbWFuZCBlcSAnSScpIHsNCiAgICAjIHRlc3QgaWYgZ2l2ZW4gY2hhcnNldCBp
cyBhdmFpbGFibGUNCiAgICBldmFsIHsgJGMgPSBUZXh0OjpJY29udi0+bmV3KCRyZXN1bHRfY2hh
cnNldCwgJ3V0Zi04JykgfTsNCiAgICAkY29tbWFuZCA9ICcnIGlmICRAOw0KICB9IGVsc2lmICgk
Y29tbWFuZCBlcSAnWCcpIHsNCiAgICAkQCA9ICIkRmlsZS0+e0NoYXJzZXR9LT57VXNlfSB1bmRl
ZmluZWQ7IHJlcGxhY2UgYnkgJHJlc3VsdF9jaGFyc2V0IjsNCiAgfQ0KDQogIGlmICgkY29tbWFu
ZCBuZSAnSScpIHsNCiAgICAkRmlsZS0+eydFcnJvciBGbGFnZ2VkJ30gPSBUUlVFOw0KICAgICRG
aWxlLT57RX0tPnBhcmFtKGZhdGFsX3RyYW5zY29kZV9lcnJvciAgID0+IFRSVUUpOw0KICAgICRG
aWxlLT57RX0tPnBhcmFtKGZhdGFsX3RyYW5zY29kZV9jaGFyc2V0ID0+ICRjcyk7DQogICAgJEZp
bGUtPntFfS0+cGFyYW0oZmF0YWxfdHJhbnNjb2RlX2Vycm1zZyAgPT4gKCRAIHx8ICcnKSk7DQog
ICAgcmV0dXJuICRGaWxlOw0KICB9DQoNCiAgbXkgJGxpbmUgPSAwOw0KICBmb3IgKEB7JEZpbGUt
PntDb250ZW50fX0pIHsNCiAgICBteSAkaW4gPSAkXzsNCiAgICAkbGluZSsrOw0KICAgICRfID0g
JGMtPmNvbnZlcnQoJF8pOyAjICRfIGlzIGxvY2FsISENCiAgICBpZiAoJGluIG5lICIiIGFuZCAo
IWRlZmluZWQoJF8pIHx8ICRfIGVxICIiKSkgew0KICAgICAgcHVzaCBAeyRGaWxlLT57TGluZXN9
fSwgJGxpbmU7DQoNCiAgICAgICMgdHJ5IHRvIGRlY29kZWQgYXMgbXVjaCBhcyBwb3NzaWJsZSBv
ZiB0aGUgbGluZQ0KICAgICAgbXkgJHNob3J0ID0gMDsgICAgICAgICAgICAgICAgIyBsb25nZXN0
IG9rYXkNCiAgICAgIG15ICRsb25nICA9IChsZW5ndGggJGluKSAtIDE7ICMgbG9uZ2VzdCB1bmtu
b3duDQoNCiAgICAgIHdoaWxlICgkbG9uZyA+ICRzaG9ydCkgew0KICAgICAgICAjIGJpbmFyeSBz
ZWFyY2gNCiAgICAgICAgbXkgJHRyeSA9IGludCAoKCRsb25nKyRzaG9ydCsxKSAvIDIpOw0KICAg
ICAgICBteSAkY29udmVydGVkID0gJGMtPmNvbnZlcnQoc3Vic3RyKCRpbiwgMCwgJHRyeSkpOw0K
ICAgICAgICBpZiAoIWRlZmluZWQoJGNvbnZlcnRlZCkgfHwgJGNvbnZlcnRlZCBlcSAiIikgew0K
ICAgICAgICAgICRsb25nICA9ICR0cnktMTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAk
c2hvcnQgPSAkdHJ5Ow0KICAgICAgICB9DQogICAgICB9DQogICAgICBteSAkcmVtYWluID0gKGxl
bmd0aCAkaW4pIC0gJHNob3J0Ow0KICAgICAgbXkgJGNvbnZlcnRlZCA9ICRjLT5jb252ZXJ0KHN1
YnN0cigkaW4sIDAsICRzaG9ydCkpOw0KICAgICAgJF8gPSBkZWZpbmVkKCRjb252ZXJ0ZWQpID8g
JGNvbnZlcnRlZCA6ICcnDQogICAgICAgICAgIC4gIiMjIyMgJHJlbWFpbiBieXRlKHMpIHVuY29u
dmVydGlibGUgIyMjIyI7DQogICAgfQ0KICB9DQogIHJldHVybiAkRmlsZTsNCn0NCg0KIw0KIyBD
aGVjayBjb3JyZWN0bmVzcyBvZiBVVEYtOCBib3RoIGZvciBVVEYtOCBpbnB1dCBhbmQgZm9yIGNv
bnZlcnNpb24gcmVzdWx0cw0Kc3ViIGNoZWNrX3V0Zjggew0KICBteSAkRmlsZSA9IHNoaWZ0Ow0K
DQogIGZvciAobXkgJGkgPSAwOyAkaSA8ICQjeyRGaWxlLT57Q29udGVudH19OyAkaSsrKSB7DQog
ICAgIyBzdWJzdGl0dXRpb24gbmVlZGVkIGZvciB2ZXJ5IGxvbmcgbGluZXMgKD4zMkspLCB0byBh
dm9pZCBiYWNrdHJhY2sNCiAgICAjIHN0YWNrIG92ZXJmbG93LiBIYW5kaWx5LCB0aGlzIGFsc28g
aGFwcGVucyB0byBjb3VudCBjaGFyYWN0ZXJzLg0KICAgIGxvY2FsICRfID0gJEZpbGUtPntDb250
ZW50fS0+WyRpXTsNCiAgICBteSAkY291bnQgPQ0KICAgIHMvICBbXHgwMC1ceDdGXSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICMgQVNDSUkNCiAgICAgIHwgW1x4QzItXHhERl0gICAgICAgIFtc
eDgwLVx4QkZdICAgICAgICAjIG5vbi1vdmVybG9uZyAyLWJ5dGUgc2VxdWVuY2VzDQogICAgICB8
ICBceEUwW1x4QTAtXHhCRl0gICBbXHg4MC1ceEJGXSAgICAgICAgIyBleGNsdWRpbmcgb3Zlcmxv
bmdzDQogICAgICB8IFtceEUxLVx4RUNceEVFXHhFRl1bXHg4MC1ceEJGXXsyfSAgICAgIyBzdHJh
aWdodCAzLWJ5dGUgc2VxdWVuY2VzDQogICAgICB8ICBceEVEW1x4ODAtXHg5Rl0gICBbXHg4MC1c
eEJGXSAgICAgICAgIyBleGNsdWRpbmcgc3Vycm9nYXRlcw0KICAgICAgfCAgXHhGMFtceDkwLVx4
QkZdICAgW1x4ODAtXHhCRl17Mn0gICAgICMgcGxhbmVzIDEtMw0KICAgICAgfCBbXHhGMS1ceEYz
XSAgICAgICAgW1x4ODAtXHhCRl17M30gICAgICMgcGxhbmVzIDQtMTUNCiAgICAgIHwgIFx4RjRb
XHg4MC1ceDhGXVtceDgwLVx4QkZdezJ9ICAgICAgICAjIHBsYW5lIDE2DQogICAgIC8veGc7DQog
ICAgaWYgKGxlbmd0aCkgew0KICAgICAgcHVzaCBAeyRGaWxlLT57TGluZXN9fSwgKCRpKzEpOw0K
ICAgICAgJEZpbGUtPntDb250ZW50fS0+WyRpXSA9ICIjIyMjIGVuY29kaW5nIHByb2JsZW0gb24g
dGhpcyBsaW5lLCBub3Qgc2hvd24gIyMjIyI7DQogICAgICAkY291bnQgPSA1MDsgIyBsZW5ndGgg
b2YgYWJvdmUgdGV4dA0KICAgIH0NCiAgICAkY291bnQgKz0gMDsgIyBGb3JjZSBudW1lcmljLg0K
ICAgICRGaWxlLT57T2Zmc2V0c30tPlskaSArIDFdID0gWyRjb3VudCwgJEZpbGUtPntPZmZzZXRz
fS0+WyRpXS0+WzFdICsgJGNvdW50XTsNCiAgfQ0KDQogICMgQWRkIGEgd2FybmluZyBpZiBkb2Mg
aXMgVVRGLTggYW5kIGNvbnRhaW5zIGEgQk9NLg0KICBpZiAoJEZpbGUtPntDaGFyc2V0fS0+e1Vz
ZX0gZXEgJ3V0Zi04JyAmJg0KICAgICAgICAkRmlsZS0+e0NvbnRlbnR9LT5bMF0gPX4gbSheXHhF
Rlx4QkJceEJGKSkgew0KICAgICZhZGRfd2FybmluZygnVzIxJywge30pOw0KICB9DQogIHJldHVy
biAkRmlsZTsNCn0NCg0KIw0KIyBieXRlIGVycm9yIGFuYWx5c2lzDQpzdWIgYnl0ZV9lcnJvciB7
DQogIG15ICRGaWxlID0gc2hpZnQ7DQogIG15IEBsaW5lcyA9IEB7JEZpbGUtPntMaW5lc319Ow0K
ICBpZiAoc2NhbGFyIEBsaW5lcykgew0KICAgICRGaWxlLT57J0Vycm9yIEZsYWdnZWQnfSA9IFRS
VUU7DQogICAgbXkgJGxpbmVzID0gam9pbiAnLCAnLCBzcGxpdCAnLCcsIFNldDo6SW50U3Bhbi0+
bmV3KFxAbGluZXMpLT5ydW5fbGlzdDsNCiAgICAkRmlsZS0+e0V9LT5wYXJhbShmYXRhbF9ieXRl
X2Vycm9yICAgPT4gVFJVRSk7DQogICAgJEZpbGUtPntFfS0+cGFyYW0oZmF0YWxfYnl0ZV9saW5l
cyAgID0+ICRsaW5lcyk7DQogICAgJEZpbGUtPntFfS0+cGFyYW0oZmF0YWxfYnl0ZV9jaGFyc2V0
ID0+ICRGaWxlLT57Q2hhcnNldH0tPntVc2V9KTsNCiAgfQ0KICByZXR1cm4gJEZpbGU7DQp9DQoN
CiMNCiMgQXV0b2RldGVjdGlvbiBhcyBpbiBBcHBlbmRpeCBGIG9mIHRoZSBYTUwgMS4wIFJlY29t
bWVuZGF0aW9uLg0KIyA8aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMteG1sLTIwMDAxMDA2
I3NlYy1ndWVzc2luZz4NCiMNCiMgcmV0dXJuIHZhbHVlcyBhcmU6IChiYXNlX2VuY29kaW5nLCBC
T01TaXplLCBTaXplLCBQYXR0ZXJuKQ0Kc3ViIGZpbmRfYmFzZV9lbmNvZGluZyB7DQogIGxvY2Fs
ICRfID0gc2hpZnQ7DQoNCiAgIyBXaXRoIGEgQnl0ZSBPcmRlciBNYXJrOg0KICByZXR1cm4gKCd1
Y3MtNGJlJywgIDQsIDQsICdcMFwwXDAoLiknKQ0KICAgIGlmIC9eXHgwMFx4MDBceEZFXHhGRi87
ICMgVUNTLTQsIGJpZy1lbmRpYW4gbWFjaGluZSAoMTIzNCkNCiAgcmV0dXJuICgndWNzLTRsZScs
ICA0LCA0LCAnKC4pXDBcMFwwJykNCiAgICBpZiAvXlx4RkZceEZFXHgwMFx4MDAvOyAjIFVDUy00
LCBsaXR0bGUtZW5kaWFuIG1hY2hpbmUgKDQzMjEpDQogIHJldHVybiAoJ3V0Zi0xNmJlJywgMiwg
MiwgJ1wwKC4pJykNCiAgICBpZiAvXlx4RkVceEZGLzsgICAgICAgICAjIFVURi0xNiwgYmlnLWVu
ZGlhbi4NCiAgcmV0dXJuICgndXRmLTE2bGUnLCAyLCAyLCAnKC4pXDAnKQ0KICAgIGlmIC9eXHhG
Rlx4RkUvOyAgICAgICAgICMgVVRGLTE2LCBsaXR0bGUtZW5kaWFuLg0KICByZXR1cm4gKCd1dGYt
OCcsICAgIDMsIDEsICcnKQ0KICAgIGlmIC9eXHhFRlx4QkJceEJGLzsgIyBVVEYtOC4NCg0KICAj
IFdpdGhvdXQgYSBCeXRlIE9yZGVyIE1hcms6DQogIHJldHVybiAoJ3Vjcy00YmUnLCAgMCwgNCwg
J1wwXDBcMCguKScpDQogICAgaWYgL15ceDAwXHgwMFx4MDBceDNDLzsgIyBVQ1MtNCBvciAzMmJp
dDsgYmlnLWVuZGlhbiBtYWNoaW5lICgxMjM0IG9yZGVyKS4NCiAgcmV0dXJuICgndWNzLTRsZScs
ICAwLCA0LCAnKC4pXDBcMFwwJykNCiAgICBpZiAvXlx4M0NceDAwXHgwMFx4MDAvOyAjIFVDUy00
IG9yIDMyYml0OyBsaXR0bGUtZW5kaWFuIG1hY2hpbmUgKDQzMjEgb3JkZXIpLg0KICByZXR1cm4g
KCd1dGYtMTZiZScsIDAsIDIsICdcMCguKScpDQogICAgaWYgL15ceDAwXHgzQ1x4MDBceDNGLzsg
IyBVQ1MtMiwgVVRGLTE2LCBvciAxNmJpdDsgYmlnLWVuZGlhbi4NCiAgcmV0dXJuICgndXRmLTE2
bGUnLCAwLCAyLCAnKC4pXDAnKQ0KICAgIGlmIC9eXHgzQ1x4MDBceDNGXHgwMC87ICMgVUNTLTIs
IFVURi0xNiwgb3IgMTZiaXQ7IGxpdHRsZS1lbmRpYW4uDQogIHJldHVybiAoJ3V0Zi04JywgICAg
MCwgMSwgJycpDQogICAgaWYgL15ceDNDXHgzRlx4NzhceDZELzsgIyBVVEYtOCwgSVNPLTY0Niwg
QVNDSUksIElTTy04ODU5LSosIFNoaWZ0LUpJUywgRVVDLCBldGMuDQogIHJldHVybiAoJ2ViY2Rp
YycsICAgMCwgMSwgJycpDQogICAgaWYgL15ceDRDXHg2Rlx4QTdceDk0LzsgIyBFQkNESUMNCiAg
cmV0dXJuICgnJywgICAgICAgICAwLCAxLCAnJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBub3RoaW5nIGluIHBhcnRpY3VsYXINCn0NCg0KIw0KIyBGaW5kIGVuY29kaW5nIGluIGRv
Y3VtZW50IGFjY29yZGluZyB0byBYTUwgcnVsZXMNCiMgT25seSBtZWFuaW5nZnVsIGlmIGZpbGUg
Y29udGFpbnMgYSBCT00sIG9yIGZvciB3ZWxsLWZvcm1lZCBYTUwhDQpzdWIgZmluZF94bWxfZW5j
b2Rpbmcgew0KICBteSAkRmlsZSA9IHNoaWZ0Ow0KICBteSAoJENvZGVVbml0U2l6ZSwgJFBhdHRl
cm4pOw0KDQogICgkRmlsZS0+e0NoYXJzZXR9LT57QXV0b30sICRGaWxlLT57Qk9NfSwgJENvZGVV
bml0U2l6ZSwgJFBhdHRlcm4pDQogICAgPSAmZmluZF9iYXNlX2VuY29kaW5nKCRGaWxlLT57Qnl0
ZXN9KTsNCg0KICAjIDEwMCBhcmJpdHJhcnksIGJ1dCBlbm91Z2ggaW4gYW55IGNhc2UNCiAgbXkg
JHNvbWVCeXRlcyA9IHN1YnN0ciAkRmlsZS0+e0J5dGVzfSwgJEZpbGUtPntCT019LCAoJENvZGVV
bml0U2l6ZSAqIDEwMCk7DQogIG15ICRzb21lVGV4dCAgPSAnJzsNCg0KICAjIHRyYW5zbGF0ZSBm
cm9tIGd1ZXNzZWQgZW5jb2RpbmcgdG8gYXNjaWktY29tcGF0aWJsZQ0KICBpZiAoJEZpbGUtPntD
aGFyc2V0fS0+e0F1dG99IGVxICdlYmNkaWMnKSB7DQoNCiAgICAjIHNwZWNpYWwgdHJlYXRtZW50
IGZvciBFQkNESUMsIG1heWJlIHVzZSB0ci8vLw0KICAgICMgd29yayBvbiB0aGlzIGxhdGVyDQog
IH0NCiAgZWxzaWYgKCEkUGF0dGVybikgew0KICAgICRzb21lVGV4dCA9ICRzb21lQnl0ZXM7ICMg
ZWZmaWNpZW5jeSBzaG9ydGN1dA0KICB9DQogIGVsc2Ugew0KICAgICMgZ2VuZXJpYyBjb2RlIGZv
ciBVVEYtMTYvVUNTLTQNCiAgICAkc29tZUJ5dGVzID1+IC9eKCgkUGF0dGVybikqKS9zOw0KICAg
ICRzb21lVGV4dCA9ICQxOyAgICAgICAgICAgICAgICAgICAjIGdldCBpbml0aWFsIHBpZWNlIHdp
dGhvdXQgY2hhcnMgPjI1NQ0KICAgICRzb21lVGV4dCA9fiBzLyRQYXR0ZXJuLyQxL3NnOyAgICAj
IHNlbGVjdCB0aGUgcmVsZXZhbnQgYnl0ZXMNCiAgfQ0KDQogICMgdHJ5IHRvIGZpbmQgZW5jb2Rp
bmcgcHNldWRvLWF0dHJpYnV0ZQ0KICBteSAkcyA9ICdbXCBcdFxuXHJdJzsNCiAgJHNvbWVUZXh0
ID1+IG0oXjxcP3htbCAkcysgdmVyc2lvbiAkcyogPSAkcyogKFtcJ1wiXSkgWy0uXzphLXpBLVow
LTldKyBcMSAkcysNCiAgICAgICAgICAgICAgICAgIGVuY29kaW5nICRzKiA9ICRzKiAoW1wnXCJd
KSAoW0EtWmEtel1bLS5fQS1aYS16MC05XSopIFwyDQogICAgICAgICAgICAgICAgKXhzbzsNCg0K
ICAkRmlsZS0+e0NoYXJzZXR9LT57WE1MfSA9IGxjICQzOw0KICByZXR1cm4gJEZpbGU7DQp9DQoN
CiMNCiMgQWJvcnQgd2l0aCBhIG1lc3NhZ2UgaWYgYW4gZXJyb3Igd2FzIGZsYWdnZWQgYXQgcG9p
bnQuDQpzdWIgYWJvcnRfaWZfZXJyb3JfZmxhZ2dlZCB7DQogIG15ICRGaWxlICA9IHNoaWZ0Ow0K
ICBteSAkRmxhZ3MgPSBzaGlmdDsNCg0KICByZXR1cm4gdW5sZXNzICRGaWxlLT57J0Vycm9yIEZs
YWdnZWQnfTsNCiAgcmV0dXJuIGlmICAgICAkRmlsZS0+eydFcnJvciBIYW5kbGVkJ307ICMgUHJl
dmlvdXMgZXJyb3IsIGtlZXAgZ29pbmcuDQoNCiAgaWYgKCRGaWxlLT57T3B0fS0+e091dHB1dH0g
ZXEgJ2h0bWwnKSB7DQogICAgJnByZXBfdGVtcGxhdGUoJEZpbGUsICRFKTsNCiAgICBwcmludCAk
RS0+b3V0cHV0Ow0KICAgIGV4aXQ7DQogIH0gZWxzZSB7DQoNCiAgICAjQEBGSVhNRTogVGhpcyBp
cyBib3JrZWQgYWZ0ZXIgdGVtcGxhdGlmaWNhdGlvbi4NCiAgICAjICZhZGRfd2FybmluZygkRmls
ZSwgJ2ZhdGFsJywgJ0ZhdGFsIEVycm9yJywgPDwiLkVPRi4iKTsNCiAgICAjIEEgZmF0YWwgZXJy
b3IgaGFzIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3RlZCBkb2N1bWVudC4g
UHJvY2Vzc2luZw0KICAgICMgaGFzIGNvbnRpbnVlZCBidXQgYW55IGxhdGVyIG91dHB1dCB3aWxs
IGJlIG9mIGR1YmlvdXMgcXVhbGl0eS4gTGltaXRhdGlvbnMgb2YNCiAgICAjIHRoaXMgb3V0cHV0
IG1vZGUgcHJldmVudCB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGZyb20gYmVpbmcgcmV0dXJuZWQ7
IHBsZWFzZQ0KICAgICMgcmV0cnkgdGhpcyBvcGVyYXRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSB1
c2luZyB0aGUgd2ViIGludGVyZmFjZSB0byBzZWUgdGhlDQogICAgIyBhY3R1YWwgZXJyb3IgbWVz
c2FnZS4NCiAgICAjIC5FT0YuDQogICAgI0BARklYTUU7DQogICAgJEZpbGUtPnsnRXJyb3IgSGFu
ZGxlZCd9ID0gVFJVRTsNCiAgfQ0KfQ0KDQojDQojIGNvbmZsaWN0aW5nIGVuY29kaW5ncw0Kc3Vi
IGNvbmZsaWN0IHsNCiAgbXkgJGVuY29kaW5nQSA9IHNoaWZ0Ow0KICBteSAkZW5jb2RpbmdCID0g
c2hpZnQ7DQogIHJldHVybiAkZW5jb2RpbmdBICYmICRlbmNvZGluZ0IgJiYgKCRlbmNvZGluZ0Eg
bmUgJGVuY29kaW5nQik7DQp9DQoNCiMNCiMgQ29uc3RydWN0IGEgc2VsZi1yZWZlcmVudGlhbCBV
UkwgZnJvbSBhIENHSS5wbSAkcSBvYmplY3QuDQpzdWIgc2VsZl91cmxfcSB7DQogIG15ICgkcSwg
JEZpbGUpID0gQF87DQogIG15ICR0aGlzcGFnZSA9ICRGaWxlLT57RW52fS0+eydTZWxmIFVSSSd9
Ow0KICAkdGhpc3BhZ2UgLj0gJz91cmk9JyAgICAgICAuIHVyaV9lc2NhcGUoJHEtPnBhcmFtKCd1
cmknKSk7DQogICR0aGlzcGFnZSAuPSAnO3NzPTEnICAgICAgaWYgJHEtPnBhcmFtKCdzcycpOw0K
ICAkdGhpc3BhZ2UgLj0gJztzcD0xJyAgICAgIGlmICRxLT5wYXJhbSgnc3AnKTsNCiAgJHRoaXNw
YWdlIC49ICc7bm9hdHQ9MScgICBpZiAkcS0+cGFyYW0oJ25vYXR0Jyk7DQogICR0aGlzcGFnZSAu
PSAnO291dGxpbmU9MScgaWYgJHEtPnBhcmFtKCdvdXRsaW5lJyk7DQogICR0aGlzcGFnZSAuPSAn
O05vMjAwPTEnICAgaWYgJHEtPnBhcmFtKCdObzIwMCcpOw0KICAkdGhpc3BhZ2UgLj0gJzt2ZXJi
b3NlPTEnIGlmICRxLT5wYXJhbSgndmVyYm9zZScpOw0KICBpZiAoJHEtPnBhcmFtKCdkb2N0eXBl
JykNCiAgICAgIGFuZCBub3QgJHEtPnBhcmFtKCdkb2N0eXBlJykgPX4gLyhJbmxpbmV8ZGV0ZWN0
KS9pKSB7DQogICAgJHRoaXNwYWdlIC49ICc7ZG9jdHlwZT0nIC4gdXJpX2VzY2FwZSgkcS0+cGFy
YW0oJ2RvY3R5cGUnKSk7DQogIH0NCiAgaWYgKCRxLT5wYXJhbSgnY2hhcnNldCcpIGFuZCBub3Qg
JHEtPnBhcmFtKCdjaGFyc2V0JykgPX4gL2RldGVjdC9pKSB7DQogICAgJHRoaXNwYWdlIC49ICc7
Y2hhcnNldD0nIC4gdXJpX2VzY2FwZSgkcS0+cGFyYW0oJ2NoYXJzZXQnKSk7DQogIH0NCiAgcmV0
dXJuICR0aGlzcGFnZTsNCn0NCg0KIw0KIyBSZXR1cm4gcmFuZG9tIFRpcCB3aXRoIGl0J3MgVVJM
Lg0Kc3ViIGdldF90aXAgew0KICBteSBAdGlwQWRkcnMgPSBrZXlzICV7JENGRy0+e1RpcHN9fTsN
CiAgbXkgJHRpcEFkZHIgID0gJHRpcEFkZHJzW3JhbmQgc2NhbGFyIEB0aXBBZGRyc107DQogIG15
ICR0aXBTbHVnICA9ICRDRkctPntUaXBzfS0+eyR0aXBBZGRyfTsNCg0KICByZXR1cm4gWyR0aXBB
ZGRyLCAkdGlwU2x1Z107DQp9DQoNCiMNCiMgQ29uc3RydWN0IGEgc2VsZi1yZWZlcmVudGlhbCBV
UkwgZnJvbSBhICRGaWxlIG9iamVjdC4NCnN1YiBzZWxmX3VybF9maWxlIHsNCiAgbXkgJEZpbGUg
PSBzaGlmdDsNCg0KICBteSAkdGhpc3BhZ2UgPSAkRmlsZS0+e0Vudn0tPnsnU2VsZiBVUkknfTsN
CiAgbXkgJGVzY2FwZWRfdXJpID0gdXJpX2VzY2FwZSgkRmlsZS0+e1VSSX0pOw0KICAkdGhpc3Bh
Z2UgLj0gcXEoP3VyaT0kZXNjYXBlZF91cmkpOw0KICAkdGhpc3BhZ2UgLj0gJztzcz0xJyAgICAg
IGlmICRGaWxlLT57T3B0fS0+eydTaG93IFNvdXJjZSd9Ow0KICAkdGhpc3BhZ2UgLj0gJztzcD0x
JyAgICAgIGlmICRGaWxlLT57T3B0fS0+eydTaG93IFBhcnNldHJlZSd9Ow0KICAkdGhpc3BhZ2Ug
Lj0gJztub2F0dD0xJyAgIGlmICRGaWxlLT57T3B0fS0+eydObyBBdHRyaWJ1dGVzJ307DQogICR0
aGlzcGFnZSAuPSAnO291dGxpbmU9MScgaWYgJEZpbGUtPntPcHR9LT57J091dGxpbmUnfTsNCiAg
JHRoaXNwYWdlIC49ICc7dmVyYm9zZT0xJyBpZiAkRmlsZS0+e09wdH0tPnsnVmVyYm9zZSd9Ow0K
ICAkdGhpc3BhZ2UgLj0gJztObzIwMD0xJyAgIGlmICRGaWxlLT57T3B0fS0+eydObzIwMCd9Ow0K
DQogIHJldHVybiAkdGhpc3BhZ2U7DQp9DQoNCiMjIyMjDQoNCnBhY2thZ2UgVzNDOjpWYWxpZGF0
b3I6OlVzZXJBZ2VudDsNCg0KdXNlIExXUDo6VXNlckFnZW50ICAxLjkwIHF3KCk7ICMgTmVlZCAx
LjkwIGZvciBwcm90b2NvbHNfKGFsbG93ZWR8Zm9yYmlkZGVuKQ0KdXNlIE5ldDo6aG9zdGVudCAg
ICAgICAgIHF3KGdldGhvc3RieW5hbWUpOw0KdXNlIE5ldDo6SVAgICAgICAgICAgICAgIHF3KCk7
DQp1c2UgU29ja2V0ICAgICAgICAgICAgICAgcXcoaW5ldF9udG9hKTsNCg0KdXNlIGJhc2UgcXco
TFdQOjpVc2VyQWdlbnQpOw0KDQpzdWIgbmV3IHsNCiAgbXkgKCRwcm90bywgJENGRywgJEZpbGUs
IEByZXN0KSA9IEBfOw0KICBteSAkY2xhc3MgPSByZWYoJHByb3RvKSB8fCAkcHJvdG87DQogIG15
ICRzZWxmID0gJGNsYXNzLT5TVVBFUjo6bmV3KEByZXN0KTsNCiAgJHNlbGYtPnsnVzNDOjpWYWxp
ZGF0b3I6OkNGRyd9ICA9ICRDRkc7DQogICRzZWxmLT57J1czQzo6VmFsaWRhdG9yOjpGaWxlJ30g
PSAkRmlsZTsNCiAgcmV0dXJuICRzZWxmOw0KfQ0KDQpzdWIgcmVkaXJlY3Rfb2sgew0KICBteSAo
JHNlbGYsICRyZXEsICRyZXMpID0gQF87DQogIHJldHVybiAkc2VsZi0+U1VQRVI6OnJlZGlyZWN0
X29rKCRyZXEsICRyZXMpICYmICRzZWxmLT51cmlfb2soJHJlcS0+dXJpKCkpOw0KfQ0KDQpzdWIg
dXJpX29rIHsNCiAgbXkgKCRzZWxmLCAkdXJpKSA9IEBfOw0KICByZXR1cm4gMSBpZiAoJHNlbGYt
PnsnVzNDOjpWYWxpZGF0b3I6OkNGRyd9LT57J0FsbG93IFByaXZhdGUgSVBzJ30gb3INCiAgICAg
ICAgICAgICAgICEkdXJpLT5jYW4oJ2hvc3QnKSk7DQoNCiAgbXkgJGFkZHIgPSBteSAkaXB0eXBl
ID0gdW5kZWY7DQogIGlmIChteSAkaG9zdCA9IGdldGhvc3RieW5hbWUoJHVyaS0+aG9zdCgpKSkg
ew0KICAgICRhZGRyID0gaW5ldF9udG9hKCRob3N0LT5hZGRyKCkpIGlmICRob3N0LT5hZGRyKCk7
DQogICAgaWYgKCRhZGRyICYmIChteSAkaXAgPSBOZXQ6OklQLT5uZXcoJGFkZHIpKSkgew0KICAg
ICAgJGlwdHlwZSA9ICRpcC0+aXB0eXBlKCk7DQogICAgfQ0KICB9DQogIGlmICgkaXB0eXBlICYm
ICRpcHR5cGUgbmUgJ1BVQkxJQycpIHsNCiAgICBteSAkRmlsZSA9ICRzZWxmLT57J1czQzo6VmFs
aWRhdG9yOjpGaWxlJ307DQogICAgJEZpbGUtPnsnRXJyb3IgRmxhZ2dlZCd9ID0gMTsNCiAgICAk
RmlsZS0+e0V9LT5wYXJhbShmYXRhbF9pcF9lcnJvciAgICA9PiAxKTsNCiAgICAkRmlsZS0+e0V9
LT5wYXJhbShmYXRhbF9pcF9ob3N0bmFtZSA9PiAxKQ0KICAgICAgaWYgJGFkZHIgYW5kICR1cmkt
Pmhvc3QoKSBuZSAkYWRkcjsNCiAgICAkRmlsZS0+e0V9LT5wYXJhbShmYXRhbF9pcF9ob3N0ID0+
ICgkdXJpLT5ob3N0KCkgfHwgJ3VuZGVmaW5lZCcpKTsNCiAgICByZXR1cm4gMDsNCiAgfQ0KICBy
ZXR1cm4gMTsNCn0NCg0KIyBMb2NhbCBWYXJpYWJsZXM6DQojIG1vZGU6IHBlcmwNCiMgaW5kZW50
LXRhYnMtbW9kZTogbmlsDQojIHRhYi13aWR0aDogMg0KIyBwZXJsLWluZGVudC1sZXZlbDogMg0K
IyBFbmQ6DQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>