{"md5":"b6740a737d3432c286d2a0b9e0afdf31","b64content":"PD9waHAKLyoqCiAqIFNpdGVHdWFyZGluZyB0b29scyBpbnN0YWxsZXIgZm9yIGN1c3RvbWVyJ3MgcGFuZWwKICoKICogaHR0cHM6Ly93d3cuc2l0ZWd1YXJkaW5nLmNvbQogKiBEbyBub3QgZGlzdHJpYnV0ZSBvciBzaGFyZS4KICogCiAqIHZlci46IDIuNQogKiBEYXRlOiAyOCBKdWx5IDIwMjYKICovCiRhbGxvd2VkX0lQcyA9IGFycmF5KAogICAgJzE5OC43LjU5LjE2NycsCiAgICAnMTk4LjcuNTkuMTY4JywKKTsKCmRlZmluZSgnVkVSU0lPTicsICcyLjUnKTsKCmRlZmluZSgnREVCVUdfTU9ERScsIGZhbHNlKTsKCmRlZmluZSgnU0lURUdVQVJESU5HX1NFUlZFUicsICdodHRwOi8vd3d3LnNpdGVndWFyZGluZy5jb20vZXh0L3BhbmVsX2FwaS9pbmRleC5waHAnKTsKCiRwcml2YXRlX3BncF9rZXkgPSAnLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUJWd0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQVVFd2dnRTlBZ0VBQWtFQXB2dy9peDNrMi9EL3lNbGgKdTlMaG5wUDZwbmEvOTFKK1Y0ajBIZUFpQ21RdTh3cW5hUXRYQlVJTFVZazZqcXUrS2VtdU1Oem9jZkE3cnhFVwpQV1RDclFJREFRQUJBa0VBaEp1N3BySGx4bGg3K0tzY1p6bFFIVXZzK0hkRGVaaFVaeFdHcjVjSDBYRjNlTm9jCjh0UkY5a1ZvSXdjQU9jcE04czFuZ2t2ODN3UTlva0Q5dFl4d2pRSWhBTkt6ZWttUnBkcDBkT3h3K0ljdGtXdUcKaDBoQTVJNXZVY2JzTTlRODZ0emJBaUVBeXVMQXRHMTd1Y0RKbGo2NGVsdEFjeXAybVNkUzl4ekcxaDh6eFN5ZgpNUmNDSVFDSHRIVVVvU3d6TVVLRmJwV0Rhd1A0UHlNdWxDMGcxKzNSc3h3R25GMmdkUUloQU1rSUNmNCtCYnkzCkpJZzFPY0l6clJid1duZkRHVmcyTVdkMW4yeWVuRmFkQWlFQXpsRFZWR040Rm4vMFZNMHBXRDcxaEt3OVRLM1gKYlM0eHBreVFsREtDOTZjPQotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tJzsKCgokc2Nhbl9wYXRoID0gZGlybmFtZShfX0ZJTEVfXyk7CmlmICghZGVmaW5lZCgnRElSU0VQJykpCnsKICAgIGlmIChzdHJ0b3VwcGVyKHN1YnN0cihQSFBfT1MsIDAsIDMpKSA9PT0gJ1dJTicpIGRlZmluZSgnRElSU0VQJywgJ1xcJyk7CiAgICBlbHNlIGRlZmluZSgnRElSU0VQJywgJy8nKTsKfQpkZWZpbmUoJ1dFQlNJVEVfUk9PVCcsIGRpcm5hbWUoX19GSUxFX18pLkRJUlNFUCk7CgoKLy8gSW5pdApkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvTG9uZG9uJyk7Cmlnbm9yZV91c2VyX2Fib3J0KHRydWUpOwplcnJvcl9yZXBvcnRpbmcoIDAgKTsKaW5pX3NldCgnZXJyb3JfbG9nJywgJycpOwppbmlfc2V0KCdsb2dfZXJyb3JzJywgMCk7CmluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsIDcyMDApOwpzZXRfdGltZV9saW1pdCggNzIwMCApOwppbmlfc2V0KCdtZW1vcnlfbGltaXQnLCAnMTAyNE0nKTsKCgovKioKICogU3RhcnQKICovCiRpcF9hZGRyZXNzID0gaXNzZXQoJF9TRVJWRVJbIlJFTU9URV9BRERSIl0pID8gJF9TRVJWRVJbIlJFTU9URV9BRERSIl0gOiAnMTI3LjAuMC4xJzsKCi8vIEZvcndhcmRlZCBoZWFkZXJzIGFyZSBvbmx5IHRydXN0ZWQgd2hlbiB0aGUgcmVhbCBUQ1AgY29ubmVjdGlvbiAoUkVNT1RFX0FERFIpCi8vIGNvbWVzIGZyb20gYSBrbm93biByZXZlcnNlLXByb3h5IHJhbmdlIChDbG91ZGZsYXJlLCBpbnRlcm5hbCBsb2FkLWJhbGFuY2VycywgZXRjLikuCi8vIEFjY2VwdGluZyB0aGVtIGZyb20gYXJiaXRyYXJ5IGNsaWVudHMgYWxsb3dzIHRyaXZpYWwgSVAtd2hpdGVsaXN0IGJ5cGFzcy4KJHRydXN0ZWRfcHJveGllcyA9IGFycmF5KCcxMjcuMC4wLjEnLCAnOjoxJyk7CmlmIChpbl9hcnJheSgkaXBfYWRkcmVzcywgJHRydXN0ZWRfcHJveGllcywgdHJ1ZSkpIHsKICAgIGlmIChpc3NldCgkX1NFUlZFUlsiSFRUUF9DRl9DT05ORUNUSU5HX0lQIl0pICYmICRfU0VSVkVSWyJIVFRQX0NGX0NPTk5FQ1RJTkdfSVAiXSAhPT0gJycpIHsKICAgICAgICAkaXBfYWRkcmVzcyA9IHRyaW0oJF9TRVJWRVJbIkhUVFBfQ0ZfQ09OTkVDVElOR19JUCJdKTsKICAgIH0gZWxzZWlmIChpc3NldCgkX1NFUlZFUlsiSFRUUF9YX1JFQUxfSVAiXSkgJiYgJF9TRVJWRVJbIkhUVFBfWF9SRUFMX0lQIl0gIT09ICcnKSB7CiAgICAgICAgJGlwX2FkZHJlc3MgPSB0cmltKCRfU0VSVkVSWyJIVFRQX1hfUkVBTF9JUCJdKTsKICAgIH0gZWxzZWlmIChpc3NldCgkX1NFUlZFUlsiSFRUUF9YX0ZPUldBUkRFRF9GT1IiXSkgJiYgJF9TRVJWRVJbIkhUVFBfWF9GT1JXQVJERURfRk9SIl0gIT09ICcnKSB7CiAgICAgICAgLy8gWC1Gb3J3YXJkZWQtRm9yIG1heSBjb250YWluIGEgY29tbWEtc2VwYXJhdGVkIGNoYWluOyB0aGUgbGVmdG1vc3QgaXMgdGhlIGNsaWVudAogICAgICAgICR4ZmYgPSBleHBsb2RlKCcsJywgJF9TRVJWRVJbIkhUVFBfWF9GT1JXQVJERURfRk9SIl0pOwogICAgICAgICRpcF9hZGRyZXNzID0gdHJpbSgkeGZmWzBdKTsKICAgIH0KfQoKaWYgKERFQlVHX01PREUpIFNhdmVMb2coJ1N0YXJ0IHNlc3Npb24gZm9yICcuJGlwX2FkZHJlc3MpOwokdGFza19pZCA9ICcnOwppZiAoaXNzZXQoJF9SRVFVRVNUWyd0YXNrX2lkJ10pICYmICRfUkVRVUVTVFsndGFza19pZCddICE9PSBudWxsKSAkdGFza19pZCA9IHRyaW0oJF9SRVFVRVNUWyd0YXNrX2lkJ10pOwppZiAoJHRhc2tfaWQgPT0gJycgJiYgaXNzZXQoJF9QT1NUWyd0YXNrX2lkJ10pICYmICRfUE9TVFsndGFza19pZCddICE9PSBudWxsKSAkdGFza19pZCA9IHRyaW0oJF9QT1NUWyd0YXNrX2lkJ10pOwppZiAoJHRhc2tfaWQgPT0gJycpIGRpZSgnc2l0ZWd1YXJkaW5nX3Rvb2xzLnBocCBpcyBvayAodmVyLiAnLlZFUlNJT04uJyknLkNoZWNrRXJyb3IoKSk7CgokcmVtb3RlX21kNSA9IGlzc2V0KCRfUkVRVUVTVFsnbGF0ZXN0X21kNSddKSAmJiAkX1JFUVVFU1RbJ2xhdGVzdF9tZDUnXSAhPT0gbnVsbCA\/IHRyaW0oJF9SRVFVRVNUWydsYXRlc3RfbWQ1J10pIDogJyc7IAokbGF0ZXN0X3ZlciA9IGlzc2V0KCRfUkVRVUVTVFsnbGF0ZXN0X3ZlciddKSAmJiAkX1JFUVVFU1RbJ2xhdGVzdF92ZXInXSAhPT0gbnVsbCA\/IHRyaW0oJF9SRVFVRVNUWydsYXRlc3RfdmVyJ10pIDogJyc7IAoKCi8qKgogKiBBY3Rpb25zIHdpdGhvdXQgYXV0aG9yaXphdGlvbgogKi8KCgoKLy8gQ2hlY2sgaWYgcmVxdWVzdCBjYW1lIGZyb20gYWxsb3dlZCBJUCBhZGRyZXNzCiRpc19hbGxvd2VkX3Nlc3Npb24gPSBmYWxzZTsKZm9yZWFjaCAoJGFsbG93ZWRfSVBzIGFzICRpcCkKewogICAgaWYgKCRpcF9hZGRyZXNzID09IHRyaW0oJGlwKSkKICAgIHsKICAgICAgICAkaXNfYWxsb3dlZF9zZXNzaW9uID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgIH0KfQoKaWYgKERFQlVHX01PREUpIFNhdmVMb2coJ1Nlc3Npb24gaXMgJy52YXJfZXhwb3J0KCRpc19hbGxvd2VkX3Nlc3Npb24sIHRydWUpKTsKCi8vIENoZWNrIGJ5IGhvc3QKaWYgKCRpc19hbGxvd2VkX3Nlc3Npb24gPT09IGZhbHNlKQp7CiAgICAkaG9zdCA9IGdldGhvc3RieWFkZHIoJGlwX2FkZHJlc3MpOwogICAgaWYgKCRob3N0ICE9PSBmYWxzZSAmJiBpc19zdHJpbmcoJGhvc3QpICYmIHN0cmlwb3MoJGhvc3QsICJob3N0aW5nIikgPT09IGZhbHNlICYmIHN1YnN0cigkaG9zdCwgLTE2KSA9PSAnc2l0ZWd1YXJkaW5nLmNvbScpICRpc19hbGxvd2VkX3Nlc3Npb24gPSB0cnVlOwp9CgovLyBDaGVjayBieSBQR1AKaWYgKCRpc19hbGxvd2VkX3Nlc3Npb24gPT09IGZhbHNlKQp7CiAgICAvLyBDaGVjayBzZXNzaW9uIHdpdGggUEdQIHdheQogICAgJHRhc2tfcGdwID0gJyc7CiAgICBpZiAoaXNzZXQoJF9SRVFVRVNUWyd0YXNrX3BncCddKSAmJiAkX1JFUVVFU1RbJ3Rhc2tfcGdwJ10gIT09IG51bGwpICR0YXNrX3BncCA9IHRyaW0oJF9SRVFVRVNUWyd0YXNrX3BncCddKTsKICAgIGlmICgkdGFza19wZ3AgPT0gJycgJiYgaXNzZXQoJF9QT1NUWyd0YXNrX3BncCddKSAmJiAkX1BPU1RbJ3Rhc2tfcGdwJ10gIT09IG51bGwpICR0YXNrX3BncCA9IHRyaW0oJF9QT1NUWyd0YXNrX3BncCddKTsKICAgIGlmICgkdGFza19wZ3AgPT0gJycpIGRpZSgndGFza19wZ3AgZXJyb3InKTsKICAgIAogICAgaWYgKCFleHRlbnNpb25fbG9hZGVkKCdvcGVuc3NsJykpIGRpZSgnb3BlbnNzbCBleHRlbnNpb24gaXMgbm90IGluc3RhbGxlZCBvbiB0aGUgc2VydmVyIGZvciBQSFAgJy5waHB2ZXJzaW9uKCkpOwogICAgCiAgICAkZGVjcnlwdGVkID0gUEdQX2RlY3J5cHQoJHRhc2tfcGdwLCAkcHJpdmF0ZV9wZ3Bfa2V5KTsKICAgICR0YXNrX3BncCA9ICgkZGVjcnlwdGVkICE9PSBmYWxzZSAmJiAkZGVjcnlwdGVkICE9PSBudWxsKSA\/IHRyaW0oJGRlY3J5cHRlZCkgOiAnJzsKICAgIGlmIChERUJVR19NT0RFKSBTYXZlTG9nKCckdGFza19pZD0nLiR0YXNrX2lkLicgLCAkdGFza19wZ3A9Jy4kdGFza19wZ3ApOwogICAgaWYgKCR0YXNrX3BncCAhPSAkdGFza19pZCkgZGllKCd0YXNrX3BncCB3cm9uZyB2YWx1ZScpOwp9CgoKLyoqCiAqIEFjdGlvbnMgd2l0aCBhdXRob3JpemF0aW9uCiAqLwoKLy8gU2VsZiB1cGRhdGUKaWYgKCAoJHJlbW90ZV9tZDUgIT0gJycgJiYgaXNfc3RyaW5nKCRyZW1vdGVfbWQ1KSAmJiBzdHJsZW4oJHJlbW90ZV9tZDUpID09IDMyKSB8fCAoaXNfbnVtZXJpYygkbGF0ZXN0X3ZlcikgJiYgJGxhdGVzdF92ZXIgPiBWRVJTSU9OKSApCnsKICAgICRsb2dfZmlsZSA9IEdldF9Mb2dGaWxlKCk7CiAgICBpZiAoIWZpbGVfZXhpc3RzKCRsb2dfZmlsZSkgfHwgKHRpbWUoKSAtIGZpbGVjdGltZSgkbG9nX2ZpbGUpID4gMjQgKiA2MCAqIDYwKSApCiAgICB7CiAgICAgICAgJG93bl9tZDUgPSBtZDVfZmlsZShfX0ZJTEVfXyk7CiAgICAgICAgaWYgKCRvd25fbWQ1ICE9ICRyZW1vdGVfbWQ1KSAKICAgICAgICB7CiAgICAgICAgICAgIC8vIERvIHNlbGYgdXBkYXRlCiAgICAgICAgICAgIFNhdmVMb2coJ1NlbGYgVXBkYXRlLiBPd24gW3Zlci4gJy5WRVJTSU9OLiddIG1kNTogJy4kb3duX21kNS4nLCByZW1vdGUgW3Zlci4gJy4kbGF0ZXN0X3Zlci4nXSBtZDU6ICcuJHJlbW90ZV9tZDUpOwogICAgICAgICAgICBNYW51YWxVcGRhdGUoKTsKICAgICAgICB9CiAgICB9Cn0KCi8vIFBpbmcgYWN0aW9uCmlmICgkdGFza19pZCA9PSAncGluZycpCnsKICAgICRhID0gYXJyYXkoJ3N0YXR1cycgPT4gJ1BJTkdfT0snLCAndmVyJyA9PiBWRVJTSU9OLCAnbG9jYWxfcGF0aCcgPT4gV0VCU0lURV9ST09ULCAnc2VsZl9tZDUnID0+IG1kNV9maWxlKF9fRklMRV9fKSk7CiAgICAkbG9naW4gPSBXRUJTSVRFX1JPT1QuJ3dlYmFuYWx5emUnLkRJUlNFUC4nd2Vic2l0ZS1zZWN1cml0eS1jb25mLnBocCc7CiAgICBpZiAoZmlsZV9leGlzdHMoJGxvZ2luKSkKICAgIHsKICAgICAgICAkYVsnbG9naW4nXSA9IFJlYWRfRmlsZSgkbG9naW4pOwogICAgfQogICAgCiAgICAkYmFja3VwX2ZpbGUgPSBXRUJTSVRFX1JPT1QuJ3dlYmFuYWx5emUnLkRJUlNFUC4nc2l0ZWd1YXJkaW5nX3Rvb2xzLnBocCc7CiAgICBpZiAoIWZpbGVfZXhpc3RzKCRiYWNrdXBfZmlsZSkgfHwgZmlsZXNpemUoX19GSUxFX18pID4gZmlsZXNpemUoJGJhY2t1cF9maWxlKSkKICAgIHsKICAgICAgICAkZm9sZGVyX3dlYmFuYWx5emUgPSBXRUJTSVRFX1JPT1QuJ3dlYmFuYWx5emUnOwogICAgICAgIGlmICghZmlsZV9leGlzdHMoJGZvbGRlcl93ZWJhbmFseXplKSkgQG1rZGlyKCRmb2xkZXJfd2ViYW5hbHl6ZSwgMDc1NSwgdHJ1ZSk7CiAgICAgICAgY29weShfX0ZJTEVfXywgJGJhY2t1cF9maWxlKTsKICAgIH0KICAgIAogICAgZGllKGpzb25fZW5jb2RlKCRhKSk7Cn0KCi8vIE1hbnVhbCBVcGRhdGUKaWYgKCR0YXNrX2lkID09ICd1cGRhdGUnKQp7CiAgICAkanNvbiA9IGFycmF5KCdsb2NhbF9wYXRoJyA9PiBXRUJTSVRFX1JPT1QsICdjdXJyZW50X3ZlcicgPT4gVkVSU0lPTiwgJ3NlbGZfbWQ1JyA9PiBtZDVfZmlsZShfX0ZJTEVfXyksICd1cGRhdGVfc3RhdHVzJyA9PiAnJyk7CgoJaWYgKE1hbnVhbFVwZGF0ZSgpKSAkanNvblsndXBkYXRlX3N0YXR1cyddID0gJ1VQREFURUQnOwoJZWxzZSAkanNvblsndXBkYXRlX3N0YXR1cyddID0gJ1VQREFURSBGQUlMRUQnOwogICAgCiAgICBkaWUoIGpzb25fZW5jb2RlKCRqc29uKSApOyAgIAp9CgoKLy8gQ29ubmVjdCB0byBTaXRlR3VhcmRpbmcuY29tIHNlcnZlcgokbGluayA9IFNJVEVHVUFSRElOR19TRVJWRVIuJz9hY3Rpb249c2l0ZWd1YXJkaW5nX3Rvb2xzJnRhc2tfaWQ9Jy4kdGFza19pZDsKJHRhc2tfanNvbl9yYXcgPSBHZXRSZW1vdGVfZmlsZV9jb250ZW50cygkbGluayk7CiR0YXNrX2pzb25fcmF3ID0gKCR0YXNrX2pzb25fcmF3ICE9PSBmYWxzZSAmJiAkdGFza19qc29uX3JhdyAhPT0gbnVsbCkgPyB0cmltKCR0YXNrX2pzb25fcmF3KSA6ICcnOwppZiAoJHRhc2tfanNvbl9yYXcgPT0gJycpIGRpZSgnRW1wdHkgdGFza19qc29uJyk7CiR0YXNrX2pzb24gPSBqc29uX2RlY29kZSgkdGFza19qc29uX3JhdywgdHJ1ZSk7CmlmICghaXNfYXJyYXkoJHRhc2tfanNvbikgfHwgJHRhc2tfanNvbiA9PT0gbnVsbCkgZGllKCdGYWxzZSBkZWNvZGUgdGFza19qc29uJyk7Cgpmb3JlYWNoICgkdGFza19qc29uIGFzICR0YXNrX2NvZGUgPT4gJHRhc2tfZGF0YSkKewoJaWYgKERFQlVHX01PREUpIFNhdmVMb2coJ3Rhc2tfY29kZT0nLiR0YXNrX2NvZGUpOwogICAgc3dpdGNoICgkdGFza19jb2RlKQogICAgewogICAgICAgIGNhc2UgJ3NhdmVmaWxlJzoKICAgICAgICAgICAgVGFza19zYXZlZmlsZSgkdGFza19kYXRhKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIAogICAgICAgIGNhc2UgJ3Nob3dmaWxlJzoKICAgICAgICAgICAgVGFza19zaG93ZmlsZSgkdGFza19kYXRhKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIAogICAgICAgIGNhc2UgJ2RlbGV0ZWZpbGUnOgogICAgICAgICAgICBUYXNrX2RlbGV0ZWZpbGUoJHRhc2tfZGF0YSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAKICAgICAgICBjYXNlICdjb3B5ZmlsZSc6CiAgICAgICAgICAgIFRhc2tfY29weWZpbGUoJHRhc2tfZGF0YSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAKICAgICAgICBjYXNlICdkb3dubG9hZCc6CiAgICAgICAgICAgIFRhc2tfZG93bmxvYWQoJHRhc2tfZGF0YSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAKICAgICAgICBjYXNlICdpbmNsdWRlZmlsZSc6CiAgICAgICAgICAgIFRhc2tfaW5jbHVkZWZpbGUoJHRhc2tfZGF0YSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAKICAgICAgICBjYXNlICdmaWxlaW5mbyc6CiAgICAgICAgICAgIFRhc2tfZmlsZWluZm8oJHRhc2tfZGF0YSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9CgpleGl0OwoKCgoKCi8qKgogKiBmdW5jdGlvbnMKICovCgovKioKICogVmFsaWRhdGUgdGhhdCBhIGNhbGxlci1zdXBwbGllZCBmaWxlbmFtZSByZXNvbHZlcyB0byBhIHBhdGggaW5zaWRlIFdFQlNJVEVfUk9PVC4KICoKICogVXNlcyByZWFscGF0aCgpIGZvciBleGlzdGluZyBwYXRocywgYW5kIHJlc29sdmVzIHRoZSBuZWFyZXN0IGV4aXN0aW5nIHBhcmVudAogKiBmb3IgcGF0aHMgdGhhdCBkbyBub3QgeWV0IGV4aXN0IChlLmcuIGEgZmlsZSBhYm91dCB0byBiZSBjcmVhdGVkKS4KICogUmV0dXJucyB0aGUgY2Fub25pY2FsaXNlZCBhYnNvbHV0ZSBwYXRoIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIHZpb2xhdGlvbi4KICoKICogQ29tcGF0aWJsZSB3aXRoIFBIUCA1LjYg4oCTIDguMy4KICovCmZ1bmN0aW9uIFZhbGlkYXRlX1BhdGgoJGZpbGVuYW1lKQp7CiAgICBpZiAoIWlzX3N0cmluZygkZmlsZW5hbWUpIHx8ICRmaWxlbmFtZSA9PT0gJycpIHJldHVybiBmYWxzZTsKCiAgICAvLyBOb3JtYWxpc2UgdG8gZm9yd2FyZCBzbGFzaGVzIGFuZCBzdHJpcCBsZWFkaW5nIHNlcGFyYXRvcnMKICAgICRmaWxlbmFtZSA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJGZpbGVuYW1lKTsKICAgICRmaWxlbmFtZSA9IGx0cmltKCRmaWxlbmFtZSwgJy8nKTsKCiAgICAvLyBSZWplY3QgYW55IHBhcmVudC10cmF2ZXJzYWwgY29tcG9uZW50IG91dHJpZ2h0IChiZWx0LWFuZC1icmFjZXMgYXRvcCByZWFscGF0aCBjaGVja3MpCiAgICBmb3JlYWNoIChleHBsb2RlKCcvJywgJGZpbGVuYW1lKSBhcyAkc2VnKSB7IGlmICgkc2VnID09PSAnLi4nKSByZXR1cm4gZmFsc2U7IH0KCiAgICAkZnVsbF9wYXRoICA9IFdFQlNJVEVfUk9PVCAuICRmaWxlbmFtZTsKICAgICRyb290ICAgICAgID0gcmVhbHBhdGgoV0VCU0lURV9ST09UKTsKICAgIGlmICgkcm9vdCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsKCiAgICAvLyBOb3JtYWxpc2Ugcm9vdCBzbyB0aGUgcHJlZml4IGNoZWNrIGFsd2F5cyB1c2VzIHRoZSBzYW1lIHNlcGFyYXRvcgogICAgJHJvb3RfY2hlY2sgPSBydHJpbShzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRyb290KSwgJy8nKSAuICcvJzsKCiAgICAvLyBDYXNlIDE6IHBhdGggYWxyZWFkeSBleGlzdHMg4oCUIHJlc29sdmUgZGlyZWN0bHkKICAgICRyZXNvbHZlZCA9IHJlYWxwYXRoKCRmdWxsX3BhdGgpOwogICAgaWYgKCRyZXNvbHZlZCAhPT0gZmFsc2UpIHsKICAgICAgICAkcmVzb2x2ZWRfbm9ybSA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJHJlc29sdmVkKTsKICAgICAgICAvLyBBbGxvdyBleGFjdCBtYXRjaCB0byByb290IGl0c2VsZiwgb3IgYW55IHBhdGggdW5kZXJuZWF0aCBpdAogICAgICAgIGlmIChzdHJwb3MoJHJlc29sdmVkX25vcm0gLiAnLycsICRyb290X2NoZWNrKSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJHJlc29sdmVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gQ2FzZSAyOiBwYXRoIGRvZXMgbm90IGV4aXN0IHlldCAoZmlsZS9mb2xkZXIgdG8gYmUgY3JlYXRlZCkg4oCUCiAgICAvLyB3YWxrIHVwIHVudGlsIHdlIGZpbmQgYW4gZXhpc3RpbmcgYW5jZXN0b3IsIHZlcmlmeSBpdCwgdGhlbgogICAgLy8gcmVjb25zdHJ1Y3QgdGhlIGZ1bGwgdGFyZ2V0IHBhdGggZnJvbSB0aGUgcmVzb2x2ZWQgYW5jZXN0b3IuCiAgICAkcGFydHMgICAgID0gZXhwbG9kZSgnLycsIHJ0cmltKCRmaWxlbmFtZSwgJy8nKSk7CiAgICAkcmVtYWluaW5nID0gYXJyYXkoKTsKCiAgICB3aGlsZSAoY291bnQoJHBhcnRzKSA+IDApIHsKICAgICAgICAkY2FuZGlkYXRlID0gcmVhbHBhdGgoV0VCU0lURV9ST09UIC4gaW1wbG9kZSgnLycsICRwYXJ0cykpOwogICAgICAgIGlmICgkY2FuZGlkYXRlICE9PSBmYWxzZSkgewogICAgICAgICAgICAkY2FuZGlkYXRlX25vcm0gPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRjYW5kaWRhdGUpOwogICAgICAgICAgICBpZiAoc3RycG9zKCRjYW5kaWRhdGVfbm9ybSAuICcvJywgJHJvb3RfY2hlY2spICE9PSAwKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIC8vIFJlY29uc3RydWN0IGZ1bGwgcGF0aCB1c2luZyB0aGUgT1Mgc2VwYXJhdG9yCiAgICAgICAgICAgIGlmICghZW1wdHkoJHJlbWFpbmluZykpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkY2FuZGlkYXRlIC4gRElSU0VQIC4gaW1wbG9kZShESVJTRVAsICRyZW1haW5pbmcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkY2FuZGlkYXRlOwogICAgICAgIH0KICAgICAgICBhcnJheV91bnNoaWZ0KCRyZW1haW5pbmcsIGFycmF5X3BvcCgkcGFydHMpKTsKICAgIH0KCiAgICAvLyBObyBjb21wb25lbnQgZXhpc3RzIHlldCDigJQgdGhlIG5lYXJlc3QgZXhpc3RpbmcgYW5jZXN0b3IgaXMgV0VCU0lURV9ST09UIGl0c2VsZgogICAgJHJvb3RfcmVhbCA9IHJlYWxwYXRoKFdFQlNJVEVfUk9PVCk7CiAgICBpZiAoJHJvb3RfcmVhbCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsKICAgIGlmICghZW1wdHkoJHJlbWFpbmluZykpIHJldHVybiAkcm9vdF9yZWFsIC4gRElSU0VQIC4gaW1wbG9kZShESVJTRVAsICRyZW1haW5pbmcpOwogICAgcmV0dXJuICRyb290X3JlYWw7Cn0KCmZ1bmN0aW9uIFRhc2tfZGVsZXRlZmlsZSgkdGFza19kYXRhKQp7CiAgICBpZiAoIWlzX2FycmF5KCR0YXNrX2RhdGEpIHx8IGNvdW50KCR0YXNrX2RhdGEpID09IDApIHJldHVybjsKICAgIAogICAgZm9yZWFjaCAoJHRhc2tfZGF0YSBhcyAkZGF0YV9yb3cpCiAgICB7CiAgICAgICAgaWYgKCFpc19hcnJheSgkZGF0YV9yb3cpIHx8ICFpc3NldCgkZGF0YV9yb3dbJ2ZpbGUnXSkpIGNvbnRpbnVlOwoKICAgICAgICAkc2FmZV9wYXRoID0gVmFsaWRhdGVfUGF0aCgkZGF0YV9yb3dbJ2ZpbGUnXSk7CiAgICAgICAgaWYgKCRzYWZlX3BhdGggPT09IGZhbHNlKSBjb250aW51ZTsKCiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRzYWZlX3BhdGgpKSBAdW5saW5rKCRzYWZlX3BhdGgpOwogICAgfQp9CgoKZnVuY3Rpb24gVGFza19jb3B5ZmlsZSgkdGFza19kYXRhKQp7CiAgICBpZiAoIWlzX2FycmF5KCR0YXNrX2RhdGEpIHx8IGNvdW50KCR0YXNrX2RhdGEpID09IDApIHJldHVybjsKICAgIAogICAgZm9yZWFjaCAoJHRhc2tfZGF0YSBhcyAkZGF0YV9yb3cpCiAgICB7CiAgICAgICAgaWYgKCFpc19hcnJheSgkZGF0YV9yb3cpIHx8ICFpc3NldCgkZGF0YV9yb3dbJ2ZpbGUnXSkgfHwgIWlzc2V0KCRkYXRhX3Jvd1snZmlsZV90byddKSkgY29udGludWU7CgogICAgICAgICRzYWZlX3NyYyA9IFZhbGlkYXRlX1BhdGgoJGRhdGFfcm93WydmaWxlJ10pOwogICAgICAgICRzYWZlX2RzdCA9IFZhbGlkYXRlX1BhdGgoJGRhdGFfcm93WydmaWxlX3RvJ10pOwogICAgICAgIGlmICgkc2FmZV9zcmMgPT09IGZhbHNlIHx8ICRzYWZlX2RzdCA9PT0gZmFsc2UpIGNvbnRpbnVlOwoKICAgICAgICBpZiAoZmlsZV9leGlzdHMoJHNhZmVfc3JjKSkgQGNvcHkoJHNhZmVfc3JjLCAkc2FmZV9kc3QpOwogICAgfQp9CgoKZnVuY3Rpb24gVGFza19zYXZlZmlsZSgkdGFza19kYXRhKQp7CiAgICBpZiAoIWlzX2FycmF5KCR0YXNrX2RhdGEpIHx8IGNvdW50KCR0YXNrX2RhdGEpID09IDApIHJldHVybjsKICAgIAogICAgZm9yZWFjaCAoJHRhc2tfZGF0YSBhcyAkZGF0YV9yb3cpCiAgICB7CiAgICAgICAgaWYgKCFpc19hcnJheSgkZGF0YV9yb3cpIHx8ICFpc3NldCgkZGF0YV9yb3dbJ2ZpbGUnXSkpIGNvbnRpbnVlOwogICAgICAgICRmaWxlbmFtZSA9ICRkYXRhX3Jvd1snZmlsZSddOwogICAgICAgIAogICAgICAgIGlmICgkZmlsZW5hbWUgPT0gJ2NyZWF0ZV9mb2xkZXInKSAKICAgICAgICB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJGRhdGFfcm93Wydjb250ZW50J10pKSBjb250aW51ZTsKICAgICAgICAgICAgJHNhZmVfZm9sZGVyID0gVmFsaWRhdGVfUGF0aCgkZGF0YV9yb3dbJ2NvbnRlbnQnXSk7CiAgICAgICAgICAgIGlmICgkc2FmZV9mb2xkZXIgPT09IGZhbHNlKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkc2FmZV9mb2xkZXIpKSBAbWtkaXIoJHNhZmVfZm9sZGVyLCAwNzU1LCB0cnVlKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICAkc2FmZV9wYXRoID0gVmFsaWRhdGVfUGF0aCgkZmlsZW5hbWUpOwogICAgICAgIGlmICgkc2FmZV9wYXRoID09PSBmYWxzZSkgY29udGludWU7CiAgICAgICAgCiAgICAgICAgaWYgKCFpc3NldCgkZGF0YV9yb3dbJ2NvbnRlbnQnXSkpIGNvbnRpbnVlOwogICAgICAgICRjb250ZW50ID0gYmFzZTY0X2RlY29kZSgkZGF0YV9yb3dbJ2NvbnRlbnQnXSk7CiAgICAgICAgCiAgICAgICAgaWYgKCRjb250ZW50ICE9PSBmYWxzZSkgCiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNzZXQoJGRhdGFfcm93Wydza2lwJ10pICYmIGludHZhbCgkZGF0YV9yb3dbJ3NraXAnXSkgPT0gMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRzYWZlX3BhdGgpKSBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBTYXZlX0ZpbGUoJHNhZmVfcGF0aCwgJGNvbnRlbnQpOwogICAgICAgIH0KICAgIH0KfQoKCmZ1bmN0aW9uIFRhc2tfc2hvd2ZpbGUoJHRhc2tfZGF0YSkKewogICAgJGEgPSBhcnJheSgpOwogICAgaWYgKCFpc19hcnJheSgkdGFza19kYXRhKSB8fCBjb3VudCgkdGFza19kYXRhKSA9PSAwKSByZXR1cm47CiAgICAKICAgIGZvcmVhY2ggKCR0YXNrX2RhdGEgYXMgJGRhdGFfcm93KQogICAgewogICAgICAgIGlmICghaXNfYXJyYXkoJGRhdGFfcm93KSB8fCAhaXNzZXQoJGRhdGFfcm93WydmaWxlJ10pKSBjb250aW51ZTsKICAgICAgICAkZmlsZW5hbWUgPSAkZGF0YV9yb3dbJ2ZpbGUnXTsKCiAgICAgICAgJHNhZmVfcGF0aCA9IFZhbGlkYXRlX1BhdGgoJGZpbGVuYW1lKTsKICAgICAgICBpZiAoJHNhZmVfcGF0aCA9PT0gZmFsc2UpIGNvbnRpbnVlOwogICAgICAgIAogICAgICAgIGlmICghZmlsZV9leGlzdHMoJHNhZmVfcGF0aCkpIGNvbnRpbnVlOwogICAgICAgIAogICAgICAgIGlmIChpc3NldCgkZGF0YV9yb3dbJ3NpemUnXSkpCiAgICAgICAgewogICAgICAgICAgICAvLyBTaG93IGJ5IHNpemUKICAgICAgICAgICAgJGN1cnJlbnRfc2l6ZSA9IGZpbGVzaXplKCRzYWZlX3BhdGgpOwogICAgICAgICAgICBpZiAoJGN1cnJlbnRfc2l6ZSAhPT0gZmFsc2UgJiYgJGN1cnJlbnRfc2l6ZSA9PSAkZGF0YV9yb3dbJ3NpemUnXSkgY29udGludWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRhWyRmaWxlbmFtZV0gPSBiYXNlNjRfZW5jb2RlKFJlYWRfRmlsZSgkc2FmZV9wYXRoKSk7CiAgICB9CiAgICAKICAgIGlmIChjb3VudCgkYSkgPiAwKQogICAgewogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJGEpOwogICAgfQp9CgpmdW5jdGlvbiBUYXNrX2Rvd25sb2FkKCR0YXNrX2RhdGEpCnsKICAgIGlmICghaXNfYXJyYXkoJHRhc2tfZGF0YSkgfHwgIWlzc2V0KCR0YXNrX2RhdGFbJ2ZpbGUnXSkpIGRpZSgnRVJST1InKTsKCiAgICAkc2FmZV9wYXRoID0gVmFsaWRhdGVfUGF0aCh0cmltKCR0YXNrX2RhdGFbJ2ZpbGUnXSkpOwogICAgaWYgKCRzYWZlX3BhdGggPT09IGZhbHNlKSBkaWUoJ0VSUk9SJyk7CgogICAgJGZpbGUgPSAkc2FmZV9wYXRoOwogICAgCiAgICBpZiAoIWlzX2ZpbGUoJGZpbGUpKSBkaWUoJ0VSUk9SJyk7CiAgICAKICAgICRjb250ZW50ID0gJyc7CiAgICAkZmlsZXNpemUgPSAwOwogICAgCiAgICBpZiAoaXNzZXQoJHRhc2tfZGF0YVsnc2l6ZSddKSkKICAgIHsKICAgICAgICAkc2l6ZSA9IGludHZhbCgkdGFza19kYXRhWydzaXplJ10pOwogICAgICAgIGlmICgkc2l6ZSA+PSAwKSAKICAgICAgICB7CiAgICAgICAgICAgICRmaWxlc2l6ZSA9ICRzaXplOwogICAgICAgICAgICBpZiAoJHNpemUgPT0gMCkgCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgICAgICAgICByZWFkZmlsZSgkZmlsZSk7CiAgICAgICAgICAgICAgICAkY29udGVudCA9IG9iX2dldF9jbGVhbigpOwogICAgICAgICAgICAgICAgaWYgKCRjb250ZW50ID09PSBmYWxzZSkgJGNvbnRlbnQgPSAnJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRmcCA9IGZvcGVuKCRmaWxlLCAicmIiKTsKICAgICAgICAgICAgICAgIGlmICgkZnAgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSBmcmVhZCgkZnAsICRzaXplKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJGNvbnRlbnQgPT09IGZhbHNlKSAkY29udGVudCA9ICcnOwogICAgICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkZmlsZXNpemUgPSBhYnMoJHNpemUpOwogICAgICAgICAgICAkZnAgPSBmb3BlbigkZmlsZSwgJ3JiJyk7CiAgICAgICAgICAgIGlmICgkZnAgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBmc2VlaygkZnAsICRzaXplLCBTRUVLX0VORCk7CiAgICAgICAgICAgICAgICAkY29udGVudCA9IGZnZXRzKCRmcCwgJGZpbGVzaXplICsgMSk7CiAgICAgICAgICAgICAgICBpZiAoJGNvbnRlbnQgPT09IGZhbHNlKSAkY29udGVudCA9ICcnOwogICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAvLyBSZWFkIGVudGlyZSBmaWxlCiAgICAgICAgJGZpbGVzaXplID0gZmlsZXNpemUoJGZpbGUpOwogICAgICAgIGlmICgkZmlsZXNpemUgPT09IGZhbHNlKSAkZmlsZXNpemUgPSAwOwogICAgICAgIAogICAgICAgIGlmICgkZmlsZXNpemUgPiAwKSB7CiAgICAgICAgICAgICRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOwogICAgICAgICAgICBpZiAoJGNvbnRlbnQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkY29udGVudCA9ICcnOwogICAgICAgICAgICAgICAgJGZpbGVzaXplID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKGlzc2V0KCR0YXNrX2RhdGFbJ2xpbmVzJ10pKQogICAgewogICAgICAgICRsaW5lcyA9IGludHZhbCgkdGFza19kYXRhWydsaW5lcyddKTsKICAgICAgICAKICAgICAgICAkbGluZXNfZGF0YSA9IGZpbGUoJGZpbGUsIEZJTEVfSUdOT1JFX05FV19MSU5FUyB8IEZJTEVfU0tJUF9FTVBUWV9MSU5FUyk7CiAgICAgICAgCiAgICAgICAgaWYgKCRsaW5lc19kYXRhICE9PSBmYWxzZSAmJiBpc19hcnJheSgkbGluZXNfZGF0YSkpCiAgICAgICAgewogICAgICAgICAgICBpZiAoJGxpbmVzID4gMCkgJGNvbnRlbnRfYXJyID0gYXJyYXlfc2xpY2UoJGxpbmVzX2RhdGEsIDAsICRsaW5lcyk7CiAgICAgICAgICAgIGVsc2UgJGNvbnRlbnRfYXJyID0gYXJyYXlfc2xpY2UoJGxpbmVzX2RhdGEsICRsaW5lcyk7CiAgICAgICAgICAgIAogICAgICAgICAgICAkY29udGVudCA9IGltcGxvZGUoIlxuIiwgJGNvbnRlbnRfYXJyKTsKICAgICAgICAgICAgJGZpbGVzaXplID0gc3RybGVuKCRjb250ZW50KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRjb250ZW50ID0gJyc7CiAgICAgICAgICAgICRmaWxlc2l6ZSA9IDA7CiAgICAgICAgfQogICAgfQogICAgCiAgICBpZiAoIWlzc2V0KCRjb250ZW50KSB8fCAkY29udGVudCA9PT0gZmFsc2UpICRjb250ZW50ID0gJyc7CiAgICAKICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKICAgIGhlYWRlcignRXhwaXJlczogMCcpOwogICAgaGVhZGVyKCdDYWNoZS1Db250cm9sOiBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTAnKTsKICAgIGhlYWRlcignQ2FjaGUtQ29udHJvbDogcHJpdmF0ZScsIGZhbHNlKTsKICAgIGhlYWRlcignQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5Jyk7CiAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInLmJhc2VuYW1lKCRmaWxlKS4nIjsnKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTsKICAgIGhlYWRlcignQ29udGVudC1MZW5ndGg6ICcgLiAkZmlsZXNpemUpOwogICAgCiAgICBpZiAob2JfZ2V0X2xldmVsKCkgPiAwKSBvYl9jbGVhbigpOwogICAgZmx1c2goKTsKICAgIGVjaG8gJGNvbnRlbnQ7CiAgICBleGl0Owp9CgoKZnVuY3Rpb24gVGFza19maWxlaW5mbygkdGFza19kYXRhKQp7CiAgICAkYSA9IGFycmF5KCk7CiAgICBpZiAoIWlzX2FycmF5KCR0YXNrX2RhdGEpIHx8IGNvdW50KCR0YXNrX2RhdGEpID09IDApIHJldHVybjsKICAgIAogICAgZm9yZWFjaCAoJHRhc2tfZGF0YSBhcyAkZGF0YV9yb3cpCiAgICB7CiAgICAgICAgaWYgKCFpc19hcnJheSgkZGF0YV9yb3cpIHx8ICFpc3NldCgkZGF0YV9yb3dbJ2ZpbGUnXSkpIGNvbnRpbnVlOwogICAgICAgICRmaWxlbmFtZSA9ICRkYXRhX3Jvd1snZmlsZSddOwoKICAgICAgICAkc2FmZV9wYXRoID0gVmFsaWRhdGVfUGF0aCgkZmlsZW5hbWUpOwogICAgICAgIGlmICgkc2FmZV9wYXRoID09PSBmYWxzZSkgY29udGludWU7CiAgICAgICAgCiAgICAgICAgaWYgKGlzX2ZpbGUoJHNhZmVfcGF0aCkpIAogICAgICAgIHsKICAgICAgICAgICAgJG1kNWZpbGUgPSAnJzsKICAgICAgICAgICAgaWYgKGlzc2V0KCRkYXRhX3Jvd1snbWQ1J10pICYmIGludHZhbCgkZGF0YV9yb3dbJ21kNSddKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAkbWQ1X3Jlc3VsdCA9IG1kNV9maWxlKCRzYWZlX3BhdGgpOwogICAgICAgICAgICAgICAgJG1kNWZpbGUgPSAoJG1kNV9yZXN1bHQgIT09IGZhbHNlKSA\/ICRtZDVfcmVzdWx0IDogJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICRmc2l6ZSA9IGZpbGVzaXplKCRzYWZlX3BhdGgpOwogICAgICAgICAgICAkZnRpbWUgPSBmaWxlY3RpbWUoJHNhZmVfcGF0aCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAkYVskZmlsZW5hbWVdID0gYXJyYXkoCiAgICAgICAgICAgICAgICAnZXhpc3RzJyA9PiAxLCAKICAgICAgICAgICAgICAgICdzaXplJyA9PiAoJGZzaXplICE9PSBmYWxzZSA\/ICRmc2l6ZSA6IDApLCAKICAgICAgICAgICAgICAgICd0aW1lJyA9PiAoJGZ0aW1lICE9PSBmYWxzZSA\/ICRmdGltZSA6IDApLCAKICAgICAgICAgICAgICAgICdtZDUnID0+ICRtZDVmaWxlCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgJGFbJGZpbGVuYW1lXSA9IGFycmF5KCdleGlzdHMnID0+IDApOwogICAgfQogICAgCiAgICBpZiAoY291bnQoJGEpID4gMCkKICAgIHsKICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRhKTsKICAgIH0KfQoKCgpmdW5jdGlvbiBUYXNrX2luY2x1ZGVmaWxlKCR0YXNrX2RhdGEpCnsKICAgIGlmICghaXNfYXJyYXkoJHRhc2tfZGF0YSkgfHwgIWlzc2V0KCR0YXNrX2RhdGFbJ2NvZGUnXSkpIHJldHVybjsKICAgIAoJaWYgKERFQlVHX01PREUpIFNhdmVMb2coJ1Rhc2tfaW5maWxlIHN0YXJ0Jyk7CiAgICAkZm9sZGVyX3dlYmFuYWx5emUgPSBXRUJTSVRFX1JPT1QuJ3dlYmFuYWx5emUnOwogICAgaWYgKCFmaWxlX2V4aXN0cygkZm9sZGVyX3dlYmFuYWx5emUpKSBAbWtkaXIoJGZvbGRlcl93ZWJhbmFseXplLCAwNzU1LCB0cnVlKTsKICAgICRpbmNsdWRlX2ZpbGUgPSAkZm9sZGVyX3dlYmFuYWx5emUuRElSU0VQLid0b29sc19pbmNsdWRlXycucmFuZCgwLCAxMDAwKS4nXycucmFuZCgwLCAxMDAwKS4nLnRtcGNvZGUnOwoJaWYgKERFQlVHX01PREUpIFNhdmVMb2coJ2ZpbGU9Jy4kaW5jbHVkZV9maWxlKTsKICAgIFNhdmVfRmlsZSgkaW5jbHVkZV9maWxlLCAkdGFza19kYXRhWydjb2RlJ10pOwogICAgaWYgKGZpbGVfZXhpc3RzKCRpbmNsdWRlX2ZpbGUpKSB7CiAgICAgICAgaW5jbHVkZSgkaW5jbHVkZV9maWxlKTsKICAgICAgICBAdW5saW5rKCRpbmNsdWRlX2ZpbGUpOwogICAgfQoJaWYgKERFQlVHX01PREUpIFNhdmVMb2coJ1Rhc2tfaW5maWxlIGVuZCcpOwp9CgoKZnVuY3Rpb24gU2F2ZV9GaWxlKCRmaWxlLCAkY29udGVudCkKewogICAgJGZwID0gQGZvcGVuKCRmaWxlLCAndycpOwogICAgaWYgKCRmcCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsKICAgIGZ3cml0ZSgkZnAsICRjb250ZW50KTsKICAgIGZjbG9zZSgkZnApOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIFJlYWRfRmlsZSgkZmlsZSkKewogICAgJGNvbnRlbnRzID0gJyc7CiAgICAKICAgIGlmICghZmlsZV9leGlzdHMoJGZpbGUpKSByZXR1cm4gJGNvbnRlbnRzOwogICAgCiAgICAkZmlsZXNpemUgPSBmaWxlc2l6ZSgkZmlsZSk7CiAgICAKICAgIGlmICgkZmlsZXNpemUgPT09IGZhbHNlIHx8ICRmaWxlc2l6ZSA9PSAwKSByZXR1cm4gJyc7ICAvLyBlbXB0eSBmaWxlIG9yIGVycm9yCiAgICAKICAgICRmcCA9IEBmb3BlbigkZmlsZSwgInJiIik7CiAgICBpZiAoJGZwID09PSBmYWxzZSkgcmV0dXJuICRjb250ZW50czsKICAgIAogICAgaWYgKCRmaWxlc2l6ZSA8IDUxMjAwMCkKICAgIHsKICAgICAgICAkY29udGVudHMgPSBmcmVhZCgkZnAsICRmaWxlc2l6ZSk7CiAgICAgICAgaWYgKCRjb250ZW50cyA9PT0gZmFsc2UpICRjb250ZW50cyA9ICcnOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgd2hpbGUgKCFmZW9mKCRmcCkpIHsKICAgICAgICAgICAgJGNodW5rID0gZnJlYWQoJGZwLCA4MTkyKTsKICAgICAgICAgICAgaWYgKCRjaHVuayA9PT0gZmFsc2UpIGJyZWFrOwogICAgICAgICAgICAkY29udGVudHMgLj0gJGNodW5rOwogICAgICAgIH0KICAgIH0KICAgIGZjbG9zZSgkZnApOwogICAgCiAgICByZXR1cm4gJGNvbnRlbnRzOwp9CgoKZnVuY3Rpb24gUEdQX2RlY3J5cHQoJGRhdGEsICRrZXkpCnsKICAgIGlmICghaXNfc3RyaW5nKCRkYXRhKSB8fCAkZGF0YSA9PT0gJycpIHJldHVybiBmYWxzZTsKICAgIAoJJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhLCBmYWxzZSk7CglpZiAoJGRhdGEgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7CgkKCSRyZXN1bHQgPSBudWxsOwoJJHN0YXR1cyA9IG9wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0KCRkYXRhLCAkcmVzdWx0LCAka2V5KTsKICAgIGlmIChERUJVR19NT0RFKSBTYXZlTG9nKCdQR1AgZGVjcnlwdCBzdGF0dXM6ICcudmFyX2V4cG9ydCgkc3RhdHVzLCB0cnVlKSk7CiAgICBpZiAoJHN0YXR1cyA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiAkcmVzdWx0Owp9CgoKCmZ1bmN0aW9uIE1hbnVhbFVwZGF0ZSgpCnsKICAgICRsaW5rID0gU0lURUdVQVJESU5HX1NFUlZFUi4nP2FjdGlvbj11cGRhdGUnOwogICAgJHJlc3BvbnNlID0gR2V0UmVtb3RlX2ZpbGVfY29udGVudHMoJGxpbmspOwogICAgaWYgKCRyZXNwb25zZSA9PT0gZmFsc2UgfHwgJHJlc3BvbnNlID09PSBudWxsIHx8ICRyZXNwb25zZSA9PT0gJycpIHJldHVybiBmYWxzZTsKICAgIAogICAgJHJlc3BvbnNlID0gaXNfc3RyaW5nKCRyZXNwb25zZSkgPyB0cmltKCRyZXNwb25zZSkgOiAnJzsKICAgIGlmICgkcmVzcG9uc2UgPT09ICcnKSByZXR1cm4gZmFsc2U7CiAgICAKICAgICRkYXRhID0ganNvbl9kZWNvZGUoJHJlc3BvbnNlLCB0cnVlKTsKICAgIGlmICghaXNfYXJyYXkoJGRhdGEpIHx8ICFpc3NldCgkZGF0YVsnYjY0Y29udGVudCddKSB8fCAhaXNzZXQoJGRhdGFbJ21kNSddKSkgcmV0dXJuIGZhbHNlOwogICAgCiAgICAkY29udGVudCA9IGJhc2U2NF9kZWNvZGUoJGRhdGFbJ2I2NGNvbnRlbnQnXSk7CiAgICBpZiAoJGNvbnRlbnQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7CiAgICAKICAgIGlmIChtZDUoJGNvbnRlbnQpID09ICRkYXRhWydtZDUnXSkKICAgIHsKICAgICAgICBTYXZlX0ZpbGUoX19GSUxFX18sICRjb250ZW50KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gR2V0UmVtb3RlX2ZpbGVfY29udGVudHMoJHVybCwgJHBvc3RfZGF0YSA9IGFycmF5KCksICRwYXJzZSA9IGZhbHNlKQp7CiAgICAkb3V0cHV0ID0gR2V0UmVtb3RlX2ZpbGVfY29udGVudHNfZXh0KCR1cmwsICRwb3N0X2RhdGEpOwogICAgCiAgICAvLyBGYWxsYmFjazogdHJ5IGFsdGVybmF0aXZlIHByb3RvY29sIGlmIGZhaWxlZAogICAgaWYgKCRvdXRwdXQgPT09IGZhbHNlIHx8ICRvdXRwdXQgPT09ICcnIHx8ICRvdXRwdXQgPT09IG51bGwpIAogICAgewogICAgICAgIGlmIChzdHJpcG9zKCR1cmwsICJodHRwczovLyIpICE9PSBmYWxzZSkKICAgICAgICB7CiAgICAgICAgICAgICR1cmwgPSBzdHJfcmVwbGFjZSgiaHR0cHM6Ly8iLCAiaHR0cDovLyIsICR1cmwpOwogICAgICAgICAgICAkb3V0cHV0ID0gR2V0UmVtb3RlX2ZpbGVfY29udGVudHNfZXh0KCR1cmwsICRwb3N0X2RhdGEpOwogICAgICAgIH0KICAgICAgICBlbHNlaWYgKHN0cmlwb3MoJHVybCwgImh0dHA6Ly8iKSAhPT0gZmFsc2UpCiAgICAgICAgewogICAgICAgICAgICAkdXJsID0gc3RyX3JlcGxhY2UoImh0dHA6Ly8iLCAiaHR0cHM6Ly8iLCAkdXJsKTsKICAgICAgICAgICAgJG91dHB1dCA9IEdldFJlbW90ZV9maWxlX2NvbnRlbnRzX2V4dCgkdXJsLCAkcG9zdF9kYXRhKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGlmICgkb3V0cHV0ID09PSBmYWxzZSB8fCAkb3V0cHV0ID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAKICAgIGlmICgkcGFyc2UgPT09IHRydWUgJiYgaXNfc3RyaW5nKCRvdXRwdXQpKSAKICAgIHsKICAgICAgICAkZGVjb2RlZCA9IGpzb25fZGVjb2RlKCRvdXRwdXQsIHRydWUpOwogICAgICAgIHJldHVybiBpc19hcnJheSgkZGVjb2RlZCkgPyAkZGVjb2RlZCA6IGFycmF5KCk7CiAgICB9CiAgICAKICAgIHJldHVybiAkb3V0cHV0Owp9CgpmdW5jdGlvbiBHZXRSZW1vdGVfZmlsZV9jb250ZW50c19leHQoJHVybCwgJHBvc3RfZGF0YSA9IGFycmF5KCkpCnsKICAgIGlmICghZXh0ZW5zaW9uX2xvYWRlZCgnY3VybCcpKSAKICAgIHsKICAgICAgICBpZiAoREVCVUdfTU9ERSkgU2F2ZUxvZygnRVJST1IgLSBjVVJMIGlzIG5vdCBlbmFibGVkJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgCiAgICAkY2ggPSBjdXJsX2luaXQoKTsKICAgIAogICAgJHBvc3R2YXJzID0gJyc7CiAgICBpZiAoaXNfYXJyYXkoJHBvc3RfZGF0YSkgJiYgY291bnQoJHBvc3RfZGF0YSkgPiAwKQogICAgewogICAgICAgIGZvcmVhY2goJHBvc3RfZGF0YSBhcyAka2V5ID0+ICR2YWx1ZSkgCiAgICAgICAgewogICAgICAgICAgICAvLyBPbmx5IGNvbmNhdGVuYXRlIHNjYWxhciB2YWx1ZXMKICAgICAgICAgICAgaWYgKGlzX3NjYWxhcigkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkcG9zdHZhcnMgLj0gdXJsZW5jb2RlKCRrZXkpIC4gIj0iIC4gdXJsZW5jb2RlKCR2YWx1ZSkgLiAiJiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHBvc3R2YXJzID0gcnRyaW0oJHBvc3R2YXJzLCAnJicpOwogICAgfQogICAgCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkdXJsKTsKICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VU0VSQUdFTlQsICJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMC45OyBydjozOC4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzM4LjAiKTsKICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCAzNjAwKTsKICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7CiAgICAKICAgIGlmICgkcG9zdHZhcnMgIT09ICcnKQogICAgewogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCAxKTsKICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJHBvc3R2YXJzKTsKICAgIH0KCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIDEwKTsgLy8gMTAgc2VjCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIHRydWUpOwogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAwKTsKICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMCk7CiAgICAKICAgIC8vIENVUkxPUFRfQklOQVJZVFJBTlNGRVIgcmVtb3ZlZCAtIGRlcHJlY2F0ZWQgc2luY2UgUEhQIDUuMS4zLCByZW1vdmVkIGluIFBIUCA4LjAKICAgIC8vIENVUkxPUFRfVElNRU9VVF9NUyBhbmQgQ1VSTE9QVF9DT05ORUNUVElNRU9VVF9NUyByZW1vdmVkIC0gY2FuIGNhdXNlIGlzc3VlcyBvbiBzb21lIHN5c3RlbXMKICAgIAogICAgJG91dHB1dCA9IGN1cmxfZXhlYygkY2gpOwogICAgaWYgKCRvdXRwdXQgPT09IGZhbHNlICYmIERFQlVHX01PREUpIFNhdmVMb2coJ0VSUk9SIGNVUkwgcmVxdWVzdDogJy5jdXJsX2Vycm9yKCRjaCkpOwogICAgCiAgICBjdXJsX2Nsb3NlKCRjaCk7CiAgICAKICAgIGlmICgkb3V0cHV0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlOwogICAgCiAgICAkb3V0cHV0ID0gaXNfc3RyaW5nKCRvdXRwdXQpID8gdHJpbSgkb3V0cHV0KSA6ICcnOwogICAgaWYgKERFQlVHX01PREUgJiYgJG91dHB1dCAhPT0gJycpIFNhdmVMb2coJ2NVUkwgb3V0cHV0ICcuJG91dHB1dCk7CiAgICAKICAgIGlmICgkb3V0cHV0ID09PSAnJykgcmV0dXJuIGZhbHNlOwogICAgCiAgICByZXR1cm4gJG91dHB1dDsKfQoKZnVuY3Rpb24gQ3JlYXRlUmVtb3RlX2ZpbGVfY29udGVudHMoJHVybCwgJGRzdCkKewogICAgJGEgPSBDcmVhdGVSZW1vdGVfZmlsZV9jb250ZW50c19leHQoJHVybCwgJGRzdCk7CiAgICAKICAgIGlmICgkYSA9PT0gZmFsc2UgfHwgJGEgPT0gMCkgCiAgICB7CiAgICAgICAgaWYgKHN0cmlwb3MoJHVybCwgImh0dHA6Ly8iKSAhPT0gZmFsc2UpCiAgICAgICAgewogICAgICAgICAgICAkdXJsID0gc3RyX3JlcGxhY2UoImh0dHA6Ly8iLCAiaHR0cHM6Ly8iLCAkdXJsKTsKICAgICAgICAgICAgJGEgPSBDcmVhdGVSZW1vdGVfZmlsZV9jb250ZW50c19leHQoJHVybCwgJGRzdCk7CiAgICAgICAgfQogICAgICAgIGVsc2VpZiAoc3RyaXBvcygkdXJsLCAiaHR0cHM6Ly8iKSAhPT0gZmFsc2UpCiAgICAgICAgewogICAgICAgICAgICAkdXJsID0gc3RyX3JlcGxhY2UoImh0dHBzOi8vIiwgImh0dHA6Ly8iLCAkdXJsKTsKICAgICAgICAgICAgJGEgPSBDcmVhdGVSZW1vdGVfZmlsZV9jb250ZW50c19leHQoJHVybCwgJGRzdCk7CiAgICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gJGE7Cn0KCmZ1bmN0aW9uIENyZWF0ZVJlbW90ZV9maWxlX2NvbnRlbnRzX2V4dCgkdXJsLCAkZHN0KQp7CiAgICBpZiAoIWV4dGVuc2lvbl9sb2FkZWQoJ2N1cmwnKSkgcmV0dXJuIGZhbHNlOwogICAgCiAgICAkZHN0X2hhbmRsZSA9IEBmb3BlbigkZHN0LCAndycpOwogICAgaWYgKCRkc3RfaGFuZGxlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlOwogICAgCiAgICAkY2ggPSBjdXJsX2luaXQoKTsKICAgIAogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJHVybCk7CiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUkFHRU5ULCAiTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTAuOTsgcnY6MzguMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC8zOC4wIik7CiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgMzYwMCk7CiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGRzdF9oYW5kbGUpOwogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCB0cnVlKTsKICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgMzApOyAvLyAzMCBzZWMKICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7CiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDApOwogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwKTsKICAgIAogICAgLy8gQ1VSTE9QVF9CSU5BUllUUkFOU0ZFUiByZW1vdmVkIC0gZGVwcmVjYXRlZCBzaW5jZSBQSFAgNS4xLjMsIHJlbW92ZWQgaW4gUEhQIDguMAogICAgCiAgICAkYSA9IGN1cmxfZXhlYygkY2gpOwogICAgCiAgICAkaW5mbyA9IGFycmF5KCdzaXplX2Rvd25sb2FkJyA9PiAwKTsKICAgIGlmICgkYSAhPT0gZmFsc2UpIHsKICAgICAgICAkaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpOwogICAgfQogICAgCiAgICBjdXJsX2Nsb3NlKCRjaCk7CiAgICBmZmx1c2goJGRzdF9oYW5kbGUpOwogICAgZmNsb3NlKCRkc3RfaGFuZGxlKTsKICAgIAogICAgaWYgKCRhID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlOwogICAgCiAgICByZXR1cm4gaXNzZXQoJGluZm9bJ3NpemVfZG93bmxvYWQnXSkgPyAkaW5mb1snc2l6ZV9kb3dubG9hZCddIDogMDsKfQoKZnVuY3Rpb24gU2F2ZUxvZygkY29udGVudHMpCnsKICAgICRmaWxlbmFtZSA9IEdldF9Mb2dGaWxlKCk7CiAgICAkZnAgPSBAZm9wZW4oJGZpbGVuYW1lLCAnYScpOwogICAgaWYgKCRmcCA9PT0gZmFsc2UpIHJldHVybjsKICAgIGZ3cml0ZSgkZnAsIGRhdGUoIlktbS1kIEg6aTpzIikuJyAnLiRjb250ZW50cy4iXG4iKTsKICAgIGZjbG9zZSgkZnApOwp9CgpmdW5jdGlvbiBHZXRfTG9nRmlsZSgpCnsKICAgICRmb2xkZXJfd2ViYW5hbHl6ZSA9IFdFQlNJVEVfUk9PVC4nd2ViYW5hbHl6ZSc7CiAgICBpZiAoIWZpbGVfZXhpc3RzKCRmb2xkZXJfd2ViYW5hbHl6ZSkpCiAgICB7CiAgICAgICAgQG1rZGlyKCRmb2xkZXJfd2ViYW5hbHl6ZSwgMDc1NSwgdHJ1ZSk7CiAgICB9CiAgICAKICAgIHJldHVybiAkZm9sZGVyX3dlYmFuYWx5emUuRElSU0VQLidzaXRlZ3VhcmRpbmdfdG9vbHMubG9nJzsKfQoKZnVuY3Rpb24gQ2hlY2tFcnJvcigpCnsKCSRlcnJvcnMgPSBhcnJheSgpOwoJCglpZiAoIWV4dGVuc2lvbl9sb2FkZWQoJ2N1cmwnKSkgJGVycm9yc1tdID0gJ2NVUkwgaXMgbm90IGVuYWJsZWQnOwoJZWxzZSB7CgkJJG51bSA9IHJhbmQoMTAsIDEwMDAwKTsKCQkkbGluayA9IFNJVEVHVUFSRElOR19TRVJWRVIuJz9hY3Rpb249cGluZ19zaXRlZ3VhcmRpbmdfc2VydmVyJm51bT0nLiRudW07CgkJJGFuc3dlciA9IEdldFJlbW90ZV9maWxlX2NvbnRlbnRzKCRsaW5rKTsKCQkkYW5zd2VyID0gKCRhbnN3ZXIgIT09IGZhbHNlICYmIGlzX3N0cmluZygkYW5zd2VyKSkgPyB0cmltKCRhbnN3ZXIpIDogJyc7CgkJJGFuc3dlcl9hcnIgPSAoJGFuc3dlciAhPT0gJycpID8ganNvbl9kZWNvZGUoJGFuc3dlciwgdHJ1ZSkgOiBhcnJheSgpOwoJCWlmICghaXNfYXJyYXkoJGFuc3dlcl9hcnIpKSAkYW5zd2VyX2FyciA9IGFycmF5KCk7CgkJCgkJaWYgKGlzc2V0KCRhbnN3ZXJfYXJyWydzdGF0dXMnXSkgJiYgdHJpbSgkYW5zd2VyX2Fyclsnc3RhdHVzJ10pID09ICdvaycgJiYgaXNzZXQoJGFuc3dlcl9hcnJbJ251bSddKSAmJiBpbnR2YWwoJGFuc3dlcl9hcnJbJ251bSddKSA9PSAkbnVtKQoJCXsKCQkJLy8gT0sKCQl9CgkJZWxzZSAkZXJyb3JzW10gPSAnWW91ciBzZXJ2ZXIgY2FuIG5vdCBjb25uZWN0IHRvIHNpdGVndWFyZGluZy5jb20gc2VydmVyIHVzaW5nIGNVUkwuIENvbnRhY3QgeW91ciBob3N0aW5nIHN1cHBvcnQgYW5kIGFzayB0aGVtIHRvIGFkZCBJUCBhZGRyZXNzOiAxOTguNy41OS4xNjcgdG8gYWxsb3cgbGlzdCc7Cgl9CgkKCWlmIChjb3VudCgkZXJyb3JzKSA+IDApIHJldHVybiAnIFtEZXRlY3RlZCBlcnJvcnM6ICcuaW1wbG9kZSgiLCAiLCAkZXJyb3JzKS4nXSc7CgllbHNlIHJldHVybiAnJzsKfQovKkRPTlQgUkVNT1ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCg=="}