PD9waHAKCnVzZSBJbGx1bWluYXRlXFN1cHBvcnRcU3RyOwoKcmV0dXJuIFsKCiAgICAvKgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IERlZmF1bHQgRGF0YWJhc2UgQ29ubmVjdGlvbiBOYW1lCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgSGVyZSB5b3UgbWF5IHNwZWNpZnkgd2hpY2ggb2YgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25zIGJlbG93IHlvdSB3aXNoCiAgICB8IHRvIHVzZSBhcyB5b3VyIGRlZmF1bHQgY29ubmVjdGlvbiBmb3IgYWxsIGRhdGFiYXNlIHdvcmsuIE9mIGNvdXJzZQogICAgfCB5b3UgbWF5IHVzZSBtYW55IGNvbm5lY3Rpb25zIGF0IG9uY2UgdXNpbmcgdGhlIERhdGFiYXNlIGxpYnJhcnkuCiAgICB8CiAgICAqLwoKICAgICdkZWZhdWx0JyA9PiBlbnYoJ0RCX0NPTk5FQ1RJT04nLCAnbXlzcWwnKSwKCiAgICAvKgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IERhdGFiYXNlIENvbm5lY3Rpb25zCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgSGVyZSBhcmUgZWFjaCBvZiB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbnMgc2V0dXAgZm9yIHlvdXIgYXBwbGljYXRpb24uCiAgICB8IE9mIGNvdXJzZSwgZXhhbXBsZXMgb2YgY29uZmlndXJpbmcgZWFjaCBkYXRhYmFzZSBwbGF0Zm9ybSB0aGF0IGlzCiAgICB8IHN1cHBvcnRlZCBieSBMYXJhdmVsIGlzIHNob3duIGJlbG93IHRvIG1ha2UgZGV2ZWxvcG1lbnQgc2ltcGxlLgogICAgfAogICAgfAogICAgfCBBbGwgZGF0YWJhc2Ugd29yayBpbiBMYXJhdmVsIGlzIGRvbmUgdGhyb3VnaCB0aGUgUEhQIFBETyBmYWNpbGl0aWVzCiAgICB8IHNvIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgZHJpdmVyIGZvciB5b3VyIHBhcnRpY3VsYXIgZGF0YWJhc2Ugb2YKICAgIHwgY2hvaWNlIGluc3RhbGxlZCBvbiB5b3VyIG1hY2hpbmUgYmVmb3JlIHlvdSBiZWdpbiBkZXZlbG9wbWVudC4KICAgIHwKICAgICovCgogICAgJ2Nvbm5lY3Rpb25zJyA9PiBbCgogICAgICAgICdzcWxpdGUnID0+IFsKICAgICAgICAgICAgJ2RyaXZlcicgPT4gJ3NxbGl0ZScsCiAgICAgICAgICAgICd1cmwnID0+IGVudignREFUQUJBU0VfVVJMJyksCiAgICAgICAgICAgICdkYXRhYmFzZScgPT4gZW52KCdEQl9EQVRBQkFTRScsIGRhdGFiYXNlX3BhdGgoJ2RhdGFiYXNlLnNxbGl0ZScpKSwKICAgICAgICAgICAgJ3ByZWZpeCcgPT4gJycsCiAgICAgICAgICAgICdmb3JlaWduX2tleV9jb25zdHJhaW50cycgPT4gZW52KCdEQl9GT1JFSUdOX0tFWVMnLCB0cnVlKSwKICAgICAgICBdLAoKICAgICAgICAnbXlzcWwnID0+IFsKICAgICAgICAgICAgJ2RyaXZlcicgPT4gJ215c3FsJywKICAgICAgICAgICAgJ3VybCcgPT4gZW52KCdEQVRBQkFTRV9VUkwnKSwKICAgICAgICAgICAgJ2hvc3QnID0+IGVudignREJfSE9TVCcsICdsb2NhbGhvc3QnKSwKICAgICAgICAgICAgJ3BvcnQnID0+IGVudignREJfUE9SVCcsICczMzA2JyksCiAgICAgICAgICAgICdkYXRhYmFzZScgPT4gZW52KCdEQl9EQVRBQkFTRScsICdjY25wajE5OV9HbUQnKSwKICAgICAgICAgICAgJ3VzZXJuYW1lJyA9PiBlbnYoJ0RCX1VTRVJOQU1FJywgJ2NjbnBqMTk5X0dtRCcpLAogICAgICAgICAgICAncGFzc3dvcmQnID0+IGVudignREJfUEFTU1dPUkQnLCAnbkFKTU44S3g0dzY4QmVmdScpLAogICAgICAgICAgICAndW5peF9zb2NrZXQnID0+IGVudignREJfU09DS0VUJywgJycpLAogICAgICAgICAgICAnY2hhcnNldCcgPT4gJ3V0ZjhtYjQnLAogICAgICAgICAgICAnY29sbGF0aW9uJyA9PiAndXRmOG1iNF91bmljb2RlX2NpJywKICAgICAgICAgICAgJ3ByZWZpeCcgPT4gJycsCiAgICAgICAgICAgICdwcmVmaXhfaW5kZXhlcycgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3N0cmljdCcgPT4gdHJ1ZSwKICAgICAgICAgICAgJ2VuZ2luZScgPT4gbnVsbCwKICAgICAgICAgICAgJ29wdGlvbnMnID0+IGV4dGVuc2lvbl9sb2FkZWQoJ3Bkb19teXNxbCcpID8gYXJyYXlfZmlsdGVyKFsKICAgICAgICAgICAgICAgIFBETzo6TVlTUUxfQVRUUl9TU0xfQ0EgPT4gZW52KCdNWVNRTF9BVFRSX1NTTF9DQScpLAogICAgICAgICAgICBdKSA6IFtdLAogICAgICAgIF0sCiAgICAgICAgJ21vbmdvZGInID0+IFsKICAgICAgICAgICAgJ2RyaXZlcicgPT4gJ21vbmdvZGInLAogICAgICAgICAgICAnaG9zdCcgPT4gJzEyNy4wLjAuMScsCiAgICAgICAgICAgICdwb3J0JyA9PiAyNzAxNywKICAgICAgICAgICAgJ2RhdGFiYXNlJyA9PiAnY25wanMnLAogICAgICAgICAgICAndXNlcm5hbWUnID0+ICcnLAogICAgICAgICAgICAncGFzc3dvcmQnID0+ICcnLAogICAgICAgICAgICAnb3B0aW9ucycgPT4gWwogICAgICAgICAgICAgICAgLy8gaGVyZSB5b3UgY2FuIHBhc3MgbW9yZSBzZXR0aW5ncyB0byB0aGUgTW9uZ28gRHJpdmVyIE1hbmFnZXIKICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9tb25nb2RiLWRyaXZlci1tYW5hZ2VyLmNvbnN0cnVjdC5waHAgdW5kZXIgIlVyaSBPcHRpb25zIiBmb3IgYSBsaXN0IG9mIGNvbXBsZXRlIHBhcmFtZXRlcnMgdGhhdCB5b3UgY2FuIHVzZQoKLy8gICAgICAgICAgICAgICAgJ2RhdGFiYXNlJyA9PiBlbnYoJ0RCX0FVVEhFTlRJQ0FUSU9OX0RBVEFCQVNFJywgJ2FkbWluJyksIC8vIHJlcXVpcmVkIHdpdGggTW9uZ28gMysKICAgICAgICAgICAgXSwKICAgICAgICBdLAogICAgICAgICdwZ3NxbCcgPT4gWwogICAgICAgICAgICAnZHJpdmVyJyA9PiAncGdzcWwnLAogICAgICAgICAgICAndXJsJyA9PiBlbnYoJ0RBVEFCQVNFX1VSTCcpLAogICAgICAgICAgICAnaG9zdCcgPT4gZW52KCdEQl9IT1NUJywgJzEyNy4wLjAuMScpLAogICAgICAgICAgICAncG9ydCcgPT4gZW52KCdEQl9QT1JUJywgJzU0MzInKSwKICAgICAgICAgICAgJ2RhdGFiYXNlJyA9PiBlbnYoJ0RCX0RBVEFCQVNFJywgJ2ZvcmdlJyksCiAgICAgICAgICAgICd1c2VybmFtZScgPT4gZW52KCdEQl9VU0VSTkFNRScsICdmb3JnZScpLAogICAgICAgICAgICAncGFzc3dvcmQnID0+IGVudignREJfUEFTU1dPUkQnLCAnJyksCiAgICAgICAgICAgICdjaGFyc2V0JyA9PiAndXRmOCcsCiAgICAgICAgICAgICdwcmVmaXgnID0+ICcnLAogICAgICAgICAgICAncHJlZml4X2luZGV4ZXMnID0+IHRydWUsCiAgICAgICAgICAgICdzY2hlbWEnID0+ICdwdWJsaWMnLAogICAgICAgICAgICAnc3NsbW9kZScgPT4gJ3ByZWZlcicsCiAgICAgICAgXSwKCiAgICAgICAgJ3NxbHNydicgPT4gWwogICAgICAgICAgICAnZHJpdmVyJyA9PiAnc3Fsc3J2JywKICAgICAgICAgICAgJ3VybCcgPT4gZW52KCdEQVRBQkFTRV9VUkwnKSwKICAgICAgICAgICAgJ2hvc3QnID0+IGVudignREJfSE9TVCcsICdsb2NhbGhvc3QnKSwKICAgICAgICAgICAgJ3BvcnQnID0+IGVudignREJfUE9SVCcsICcxNDMzJyksCiAgICAgICAgICAgICdkYXRhYmFzZScgPT4gZW52KCdEQl9EQVRBQkFTRScsICdmb3JnZScpLAogICAgICAgICAgICAndXNlcm5hbWUnID0+IGVudignREJfVVNFUk5BTUUnLCAnZm9yZ2UnKSwKICAgICAgICAgICAgJ3Bhc3N3b3JkJyA9PiBlbnYoJ0RCX1BBU1NXT1JEJywgJycpLAogICAgICAgICAgICAnY2hhcnNldCcgPT4gJ3V0ZjgnLAogICAgICAgICAgICAncHJlZml4JyA9PiAnJywKICAgICAgICAgICAgJ3ByZWZpeF9pbmRleGVzJyA9PiB0cnVlLAogICAgICAgIF0sCgogICAgXSwKCiAgICAvKgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IE1pZ3JhdGlvbiBSZXBvc2l0b3J5IFRhYmxlCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgVGhpcyB0YWJsZSBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIG1pZ3JhdGlvbnMgdGhhdCBoYXZlIGFscmVhZHkgcnVuIGZvcgogICAgfCB5b3VyIGFwcGxpY2F0aW9uLiBVc2luZyB0aGlzIGluZm9ybWF0aW9uLCB3ZSBjYW4gZGV0ZXJtaW5lIHdoaWNoIG9mCiAgICB8IHRoZSBtaWdyYXRpb25zIG9uIGRpc2sgaGF2ZW4ndCBhY3R1YWxseSBiZWVuIHJ1biBpbiB0aGUgZGF0YWJhc2UuCiAgICB8CiAgICAqLwoKICAgICdtaWdyYXRpb25zJyA9PiAnbWlncmF0aW9ucycsCgogICAgLyoKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBSZWRpcyBEYXRhYmFzZXMKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfAogICAgfCBSZWRpcyBpcyBhbiBvcGVuIHNvdXJjZSwgZmFzdCwgYW5kIGFkdmFuY2VkIGtleS12YWx1ZSBzdG9yZSB0aGF0IGFsc28KICAgIHwgcHJvdmlkZXMgYSByaWNoZXIgYm9keSBvZiBjb21tYW5kcyB0aGFuIGEgdHlwaWNhbCBrZXktdmFsdWUgc3lzdGVtCiAgICB8IHN1Y2ggYXMgQVBDIG9yIE1lbWNhY2hlZC4gTGFyYXZlbCBtYWtlcyBpdCBlYXN5IHRvIGRpZyByaWdodCBpbi4KICAgIHwKICAgICovCgogICAgJ3JlZGlzJyA9PiBbCgogICAgICAgICdjbGllbnQnID0+IGVudignUkVESVNfQ0xJRU5UJywgJ3BocHJlZGlzJyksCgogICAgICAgICdvcHRpb25zJyA9PiBbCiAgICAgICAgICAgICdjbHVzdGVyJyA9PiBlbnYoJ1JFRElTX0NMVVNURVInLCAncmVkaXMnKSwKICAgICAgICAgICAgJ3ByZWZpeCcgPT4gZW52KCdSRURJU19QUkVGSVgnLCBTdHI6OnNsdWcoZW52KCdBUFBfTkFNRScsICdsYXJhdmVsJyksICdfJykuJ19kYXRhYmFzZV8nKSwKICAgICAgICBdLAoKICAgICAgICAnZGVmYXVsdCcgPT4gWwogICAgICAgICAgICAndXJsJyA9PiBlbnYoJ1JFRElTX1VSTCcpLAogICAgICAgICAgICAnaG9zdCcgPT4gZW52KCdSRURJU19IT1NUJywgJzEyNy4wLjAuMScpLAogICAgICAgICAgICAncGFzc3dvcmQnID0+IGVudignUkVESVNfUEFTU1dPUkQnLCBudWxsKSwKICAgICAgICAgICAgJ3BvcnQnID0+IGVudignUkVESVNfUE9SVCcsIDYzNzkpLAogICAgICAgICAgICAnZGF0YWJhc2UnID0+IGVudignUkVESVNfREInLCAwKSwKICAgICAgICBdLAoKICAgICAgICAnY2FjaGUnID0+IFsKICAgICAgICAgICAgJ3VybCcgPT4gZW52KCdSRURJU19VUkwnKSwKICAgICAgICAgICAgJ2hvc3QnID0+IGVudignUkVESVNfSE9TVCcsICcxMjcuMC4wLjEnKSwKICAgICAgICAgICAgJ3Bhc3N3b3JkJyA9PiBlbnYoJ1JFRElTX1BBU1NXT1JEJywgbnVsbCksCiAgICAgICAgICAgICdwb3J0JyA9PiBlbnYoJ1JFRElTX1BPUlQnLCA2Mzc5KSwKICAgICAgICAgICAgJ2RhdGFiYXNlJyA9PiBlbnYoJ1JFRElTX0NBQ0hFX0RCJywgMSksCiAgICAgICAgXSwKCiAgICBdLAoKXTsKPD9waHAKCnJldHVybiBbCgogICAgLyoKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBEZWZhdWx0IEZpbGVzeXN0ZW0gRGlzawogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8CiAgICB8IEhlcmUgeW91IG1heSBzcGVjaWZ5IHRoZSBkZWZhdWx0IGZpbGVzeXN0ZW0gZGlzayB0aGF0IHNob3VsZCBiZSB1c2VkCiAgICB8IGJ5IHRoZSBmcmFtZXdvcmsuIFRoZSAibG9jYWwiIGRpc2ssIGFzIHdlbGwgYXMgYSB2YXJpZXR5IG9mIGNsb3VkCiAgICB8IGJhc2VkIGRpc2tzIGFyZSBhdmFpbGFibGUgdG8geW91ciBhcHBsaWNhdGlvbi4gSnVzdCBzdG9yZSBhd2F5IQogICAgfAogICAgKi8KCiAgICAnZGVmYXVsdCcgPT4gZW52KCdGSUxFU1lTVEVNX0RSSVZFUicsICdsb2NhbCcpLAoKICAgIC8qCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgRGVmYXVsdCBDbG91ZCBGaWxlc3lzdGVtIERpc2sKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfAogICAgfCBNYW55IGFwcGxpY2F0aW9ucyBzdG9yZSBmaWxlcyBib3RoIGxvY2FsbHkgYW5kIGluIHRoZSBjbG91ZC4gRm9yIHRoaXMKICAgIHwgcmVhc29uLCB5b3UgbWF5IHNwZWNpZnkgYSBkZWZhdWx0ICJjbG91ZCIgZHJpdmVyIGhlcmUuIFRoaXMgZHJpdmVyCiAgICB8IHdpbGwgYmUgYm91bmQgYXMgdGhlIENsb3VkIGRpc2sgaW1wbGVtZW50YXRpb24gaW4gdGhlIGNvbnRhaW5lci4KICAgIHwKICAgICovCgogICAgJ2Nsb3VkJyA9PiBlbnYoJ0ZJTEVTWVNURU1fQ0xPVUQnLCAnczMnKSwKCiAgICAvKgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IEZpbGVzeXN0ZW0gRGlza3MKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfAogICAgfCBIZXJlIHlvdSBtYXkgY29uZmlndXJlIGFzIG1hbnkgZmlsZXN5c3RlbSAiZGlza3MiIGFzIHlvdSB3aXNoLCBhbmQgeW91CiAgICB8IG1heSBldmVuIGNvbmZpZ3VyZSBtdWx0aXBsZSBkaXNrcyBvZiB0aGUgc2FtZSBkcml2ZXIuIERlZmF1bHRzIGhhdmUKICAgIHwgYmVlbiBzZXR1cCBmb3IgZWFjaCBkcml2ZXIgYXMgYW4gZXhhbXBsZSBvZiB0aGUgcmVxdWlyZWQgb3B0aW9ucy4KICAgIHwKICAgIHwgU3VwcG9ydGVkIERyaXZlcnM6ICJsb2NhbCIsICJmdHAiLCAic2Z0cCIsICJzMyIKICAgIHwKICAgICovCgogICAgJ2Rpc2tzJyA9PiBbCgogICAgICAgICdsb2NhbCcgPT4gWwogICAgICAgICAgICAnZHJpdmVyJyA9PiAnbG9jYWwnLAogICAgICAgICAgICAncm9vdCcgPT4gc3RvcmFnZV9wYXRoKCdhcHAnKSwKICAgICAgICBdLAoKICAgICAgICAncHVibGljJyA9PiBbCiAgICAgICAgICAgICdkcml2ZXInID0+ICdsb2NhbCcsCiAgICAgICAgICAgICdyb290JyA9PiBzdG9yYWdlX3BhdGgoJ2FwcC9wdWJsaWMnKSwKICAgICAgICAgICAgJ3VybCcgPT4gZW52KCdBUFBfVVJMJykuJy9zdG9yYWdlJywKICAgICAgICAgICAgJ3Zpc2liaWxpdHknID0+ICdwdWJsaWMnLAogICAgICAgIF0sCgogICAgICAgICdzMycgPT4gWwogICAgICAgICAgICAnZHJpdmVyJyA9PiAnczMnLAogICAgICAgICAgICAna2V5JyA9PiBlbnYoJ0FXU19BQ0NFU1NfS0VZX0lEJyksCiAgICAgICAgICAgICdzZWNyZXQnID0+IGVudignQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJyksCiAgICAgICAgICAgICdyZWdpb24nID0+IGVudignQVdTX0RFRkFVTFRfUkVHSU9OJyksCiAgICAgICAgICAgICdidWNrZXQnID0+IGVudignQVdTX0JVQ0tFVCcpLAogICAgICAgICAgICAndXJsJyA9PiBlbnYoJ0FXU19VUkwnKSwKICAgICAgICBdLAoKICAgIF0sCgpdOwo=PD9waHAKCnJldHVybiBbCgogICAgLyoKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBNYWlsIERyaXZlcgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8CiAgICB8IExhcmF2ZWwgc3VwcG9ydHMgYm90aCBTTVRQIGFuZCBQSFAncyAibWFpbCIgZnVuY3Rpb24gYXMgZHJpdmVycyBmb3IgdGhlCiAgICB8IHNlbmRpbmcgb2YgZS1tYWlsLiBZb3UgbWF5IHNwZWNpZnkgd2hpY2ggb25lIHlvdSdyZSB1c2luZyB0aHJvdWdob3V0CiAgICB8IHlvdXIgYXBwbGljYXRpb24gaGVyZS4gQnkgZGVmYXVsdCwgTGFyYXZlbCBpcyBzZXR1cCBmb3IgU01UUCBtYWlsLgogICAgfAogICAgfCBTdXBwb3J0ZWQ6ICJzbXRwIiwgInNlbmRtYWlsIiwgIm1haWxndW4iLCAic2VzIiwKICAgIHwgICAgICAgICAgICAicG9zdG1hcmsiLCAibG9nIiwgImFycmF5IgogICAgfAogICAgKi8KCiAgICAnZHJpdmVyJyA9PiBlbnYoJ01BSUxfRFJJVkVSJywgJ3NtdHAnKSwKCiAgICAvKgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IFNNVFAgSG9zdCBBZGRyZXNzCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgSGVyZSB5b3UgbWF5IHByb3ZpZGUgdGhlIGhvc3QgYWRkcmVzcyBvZiB0aGUgU01UUCBzZXJ2ZXIgdXNlZCBieSB5b3VyCiAgICB8IGFwcGxpY2F0aW9ucy4gQSBkZWZhdWx0IG9wdGlvbiBpcyBwcm92aWRlZCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aAogICAgfCB0aGUgTWFpbGd1biBtYWlsIHNlcnZpY2Ugd2hpY2ggd2lsbCBwcm92aWRlIHJlbGlhYmxlIGRlbGl2ZXJpZXMuCiAgICB8CiAgICAqLwoKICAgICdob3N0JyA9PiBlbnYoJ01BSUxfSE9TVCcsICdzbXRwLm1haWxndW4ub3JnJyksCgogICAgLyoKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBTTVRQIEhvc3QgUG9ydAogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8CiAgICB8IFRoaXMgaXMgdGhlIFNNVFAgcG9ydCB1c2VkIGJ5IHlvdXIgYXBwbGljYXRpb24gdG8gZGVsaXZlciBlLW1haWxzIHRvCiAgICB8IHVzZXJzIG9mIHRoZSBhcHBsaWNhdGlvbi4gTGlrZSB0aGUgaG9zdCB3ZSBoYXZlIHNldCB0aGlzIHZhbHVlIHRvCiAgICB8IHN0YXkgY29tcGF0aWJsZSB3aXRoIHRoZSBNYWlsZ3VuIGUtbWFpbCBhcHBsaWNhdGlvbiBieSBkZWZhdWx0LgogICAgfAogICAgKi8KCiAgICAncG9ydCcgPT4gZW52KCdNQUlMX1BPUlQnLCA1ODcpLAoKICAgIC8qCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgR2xvYmFsICJGcm9tIiBBZGRyZXNzCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgWW91IG1heSB3aXNoIGZvciBhbGwgZS1tYWlscyBzZW50IGJ5IHlvdXIgYXBwbGljYXRpb24gdG8gYmUgc2VudCBmcm9tCiAgICB8IHRoZSBzYW1lIGFkZHJlc3MuIEhlcmUsIHlvdSBtYXkgc3BlY2lmeSBhIG5hbWUgYW5kIGFkZHJlc3MgdGhhdCBpcwogICAgfCB1c2VkIGdsb2JhbGx5IGZvciBhbGwgZS1tYWlscyB0aGF0IGFyZSBzZW50IGJ5IHlvdXIgYXBwbGljYXRpb24uCiAgICB8CiAgICAqLwoKICAgICdmcm9tJyA9PiBbCiAgICAgICAgJ2FkZHJlc3MnID0+IGVudignTUFJTF9GUk9NX0FERFJFU1MnLCAnaGVsbG9AZXhhbXBsZS5jb20nKSwKICAgICAgICAnbmFtZScgPT4gZW52KCdNQUlMX0ZST01fTkFNRScsICdFeGFtcGxlJyksCiAgICBdLAoKICAgIC8qCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgRS1NYWlsIEVuY3J5cHRpb24gUHJvdG9jb2wKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfAogICAgfCBIZXJlIHlvdSBtYXkgc3BlY2lmeSB0aGUgZW5jcnlwdGlvbiBwcm90b2NvbCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4KICAgIHwgdGhlIGFwcGxpY2F0aW9uIHNlbmQgZS1tYWlsIG1lc3NhZ2VzLiBBIHNlbnNpYmxlIGRlZmF1bHQgdXNpbmcgdGhlCiAgICB8IHRyYW5zcG9ydCBsYXllciBzZWN1cml0eSBwcm90b2NvbCBzaG91bGQgcHJvdmlkZSBncmVhdCBzZWN1cml0eS4KICAgIHwKICAgICovCgogICAgJ2VuY3J5cHRpb24nID0+IGVudignTUFJTF9FTkNSWVBUSU9OJywgJ3RscycpLAoKICAgIC8qCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgU01UUCBTZXJ2ZXIgVXNlcm5hbWUKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfAogICAgfCBJZiB5b3VyIFNNVFAgc2VydmVyIHJlcXVpcmVzIGEgdXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0aW9uLCB5b3Ugc2hvdWxkCiAgICB8IHNldCBpdCBoZXJlLiBUaGlzIHdpbGwgZ2V0IHVzZWQgdG8gYXV0aGVudGljYXRlIHdpdGggeW91ciBzZXJ2ZXIgb24KICAgIHwgY29ubmVjdGlvbi4gWW91IG1heSBhbHNvIHNldCB0aGUgInBhc3N3b3JkIiB2YWx1ZSBiZWxvdyB0aGlzIG9uZS4KICAgIHwKICAgICovCgogICAgJ3VzZXJuYW1lJyA9PiBlbnYoJ01BSUxfVVNFUk5BTUUnKSwKCiAgICAncGFzc3dvcmQnID0+IGVudignTUFJTF9QQVNTV09SRCcpLAoKICAgIC8qCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgU2VuZG1haWwgU3lzdGVtIFBhdGgKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfAogICAgfCBXaGVuIHVzaW5nIHRoZSAic2VuZG1haWwiIGRyaXZlciB0byBzZW5kIGUtbWFpbHMsIHdlIHdpbGwgbmVlZCB0byBrbm93CiAgICB8IHRoZSBwYXRoIHRvIHdoZXJlIFNlbmRtYWlsIGxpdmVzIG9uIHRoaXMgc2VydmVyLiBBIGRlZmF1bHQgcGF0aCBoYXMKICAgIHwgYmVlbiBwcm92aWRlZCBoZXJlLCB3aGljaCB3aWxsIHdvcmsgd2VsbCBvbiBtb3N0IG9mIHlvdXIgc3lzdGVtcy4KICAgIHwKICAgICovCgogICAgJ3NlbmRtYWlsJyA9PiAnL3Vzci9zYmluL3NlbmRtYWlsIC1icycsCgogICAgLyoKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBNYXJrZG93biBNYWlsIFNldHRpbmdzCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgSWYgeW91IGFyZSB1c2luZyBNYXJrZG93biBiYXNlZCBlbWFpbCByZW5kZXJpbmcsIHlvdSBtYXkgY29uZmlndXJlIHlvdXIKICAgIHwgdGhlbWUgYW5kIGNvbXBvbmVudCBwYXRocyBoZXJlLCBhbGxvd2luZyB5b3UgdG8gY3VzdG9taXplIHRoZSBkZXNpZ24KICAgIHwgb2YgdGhlIGVtYWlscy4gT3IsIHlvdSBtYXkgc2ltcGx5IHN0aWNrIHdpdGggdGhlIExhcmF2ZWwgZGVmYXVsdHMhCiAgICB8CiAgICAqLwoKICAgICdtYXJrZG93bicgPT4gWwogICAgICAgICd0aGVtZScgPT4gJ2RlZmF1bHQnLAoKICAgICAgICAncGF0aHMnID0+IFsKICAgICAgICAgICAgcmVzb3VyY2VfcGF0aCgndmlld3MvdmVuZG9yL21haWwnKSwKICAgICAgICBdLAogICAgXSwKCiAgICAvKgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IExvZyBDaGFubmVsCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgSWYgeW91IGFyZSB1c2luZyB0aGUgImxvZyIgZHJpdmVyLCB5b3UgbWF5IHNwZWNpZnkgdGhlIGxvZ2dpbmcgY2hhbm5lbAogICAgfCBpZiB5b3UgcHJlZmVyIHRvIGtlZXAgbWFpbCBtZXNzYWdlcyBzZXBhcmF0ZSBmcm9tIG90aGVyIGxvZyBlbnRyaWVzCiAgICB8IGZvciBzaW1wbGVyIHJlYWRpbmcuIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQgY2hhbm5lbCB3aWxsIGJlIHVzZWQuCiAgICB8CiAgICAqLwoKICAgICdsb2dfY2hhbm5lbCcgPT4gZW52KCdNQUlMX0xPR19DSEFOTkVMJyksCgpdOwo=PD9waHAKCnJldHVybiBbCgogICAgLyoKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBUaGlyZCBQYXJ0eSBTZXJ2aWNlcwogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8CiAgICB8IFRoaXMgZmlsZSBpcyBmb3Igc3RvcmluZyB0aGUgY3JlZGVudGlhbHMgZm9yIHRoaXJkIHBhcnR5IHNlcnZpY2VzIHN1Y2gKICAgIHwgYXMgTWFpbGd1biwgUG9zdG1hcmssIEFXUyBhbmQgbW9yZS4gVGhpcyBmaWxlIHByb3ZpZGVzIHRoZSBkZSBmYWN0bwogICAgfCBsb2NhdGlvbiBmb3IgdGhpcyB0eXBlIG9mIGluZm9ybWF0aW9uLCBhbGxvd2luZyBwYWNrYWdlcyB0byBoYXZlCiAgICB8IGEgY29udmVudGlvbmFsIGZpbGUgdG8gbG9jYXRlIHRoZSB2YXJpb3VzIHNlcnZpY2UgY3JlZGVudGlhbHMuCiAgICB8CiAgICAqLwoKICAgICdtYWlsZ3VuJyA9PiBbCiAgICAgICAgJ2RvbWFpbicgPT4gZW52KCdNQUlMR1VOX0RPTUFJTicpLAogICAgICAgICdzZWNyZXQnID0+IGVudignTUFJTEdVTl9TRUNSRVQnKSwKICAgICAgICAnZW5kcG9pbnQnID0+IGVudignTUFJTEdVTl9FTkRQT0lOVCcsICdhcGkubWFpbGd1bi5uZXQnKSwKICAgIF0sCgogICAgJ3Bvc3RtYXJrJyA9PiBbCiAgICAgICAgJ3Rva2VuJyA9PiBlbnYoJ1BPU1RNQVJLX1RPS0VOJyksCiAgICBdLAoKICAgICdzZXMnID0+IFsKICAgICAgICAna2V5JyA9PiBlbnYoJ0FXU19BQ0NFU1NfS0VZX0lEJyksCiAgICAgICAgJ3NlY3JldCcgPT4gZW52KCdBV1NfU0VDUkVUX0FDQ0VTU19LRVknKSwKICAgICAgICAncmVnaW9uJyA9PiBlbnYoJ0FXU19ERUZBVUxUX1JFR0lPTicsICd1cy1lYXN0LTEnKSwKICAgIF0sCgpdOwo= 🧨 Database [mysql] not configured.