REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 196.99 KB
Close
//proc/self/root/opt/alt/python38/lib/python3.8/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-38.pyc
Text
Base64
VQ0NCgAAAADrmFJleIoDAOMAAAAAAAAAAAAAAAAAAAAAaQAAAEAAAABz1gsAAGQAWgBkAVoBZAJaAmQDWgNkBGQFbARaBGQEZAZsBW0GWgcBAGQEZAVsCFoIZARkBWwJWglkBGQFbApaCmQEZAVsC1oLZARkBWwMWgxkBGQFbA1aDWQEZAVsDloOZARkBWwPWg9kBGQFbBBaEGQEZAdsEW0RWhEBAHoQZARkCGwSbRNaEwEAVwBuIAQAZRRrCnKoAQABAAEAZARkCGwVbRNaEwEAWQBuAlgAehxkBGQJbBZtF1oXAQBkBGQKbBZtGFoYAQBXAG4sBABlFGsKcvIBAAEAAQBkBGQJbA1tF1oXAQBkBGQKbA1tGFoYAQBZAG4CWAB6EGQEZAtsDW0ZWhoBAFcAbkIEAGUUawqQAXJGAQABAAEAehBkBGQLbBttGVoaAQBXAG4aBABlFGsKkAFyQAEAAQABAGQFWhpZAG4CWABZAG4CWABkDGQNZA5kD2QQZBFkEmQTZBRkFWQWZBdkGGQZZBpkG2QcZB1kHmQfZCBkIWQiZCNkJGQlZCZkJ2QoZClkKmQrZCxkLWQuZC9kMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWQ6ZDtkPGQ9ZD5kP2RAZEFkQmRDZERkRWRGZEdkSGRJZEpkS2RMZE1kTmRPZFBkUWRSZFNkVGRVZFZkV2RYZFlkWmRbZFxkXWReZF9kYGRhZGJkY2RkZGVkZmRnZGhkaWRqZGtkbGRtZG5kb2RwZHFkcmRzZHRnaVocZR1lCWoegwFkBWR1hQIZAFofZR9kBBkAZHVrAlogZSCQAnJwZQlqIVoiZSNaJGUlWiZlI1onZShlKWUqZStlLGUdZS1lLmUvZTBlMWcLWjJuYGUJajNaImU0WjVkdmR3hABaJ2cAWjJkBGQFbDZaNmR4oDehAEQAXThaOHoUZTKgOWU6ZTZlOIMCoQEBAFcAbhwEAGU7awqQAnLKAQABAAEAWQCQAnGWWQBuAlgAkAJxlmU8ZHlkeoQAZTVke4MBRACDAYMBWj1kfGR9hABaPkcAZH5kf4QAZH9lP4MDWkBlBGpBZQRqQhcAWkNkgFpEZURkgRcAWkVlQ2VEFwBaRmUlZIKDAVpHZIOgSGSEZHqEAGUEaklEAIMBoQFaSkcAZIVkI4QAZCNlS4MDWkxHAGSGZCWEAGQl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cmVjdGx5IGluIFB5dGhvbi4KCkhlcmUgaXMgYSBwcm9ncmFtIHRvIHBhcnNlICJIZWxsbywgV29ybGQhIiAob3IgYW55IGdyZWV0aW5nIG9mIHRoZSBmb3JtIApDeyI8c2FsdXRhdGlvbj4sIDxhZGRyZXNzZWU+ISJ9KSwgYnVpbHQgdXAgdXNpbmcgTHtXb3JkfSwgTHtMaXRlcmFsfSwgYW5kIEx7QW5kfSBlbGVtZW50cyAKKEx7JysnPFBhcnNlckVsZW1lbnQuX19hZGRfXz59IG9wZXJhdG9yIGdpdmVzIEx7QW5kfSBleHByZXNzaW9ucywgc3RyaW5ncyBhcmUgYXV0by1jb252ZXJ0ZWQgdG8KTHtMaXRlcmFsfSBleHByZXNzaW9ucyk6OgoKICAgIGZyb20gcHlwYXJzaW5nIGltcG9ydCBXb3JkLCBhbHBoYXMKCiAgICAjIGRlZmluZSBncmFtbWFyIG9mIGEgZ3JlZXRpbmcKICAgIGdyZWV0ID0gV29yZChhbHBoYXMpICsgIiwiICsgV29yZChhbHBoYXMpICsgIiEiCgogICAgaGVsbG8gPSAiSGVsbG8sIFdvcmxkISIKICAgIHByaW50IChoZWxsbywgIi0+IiwgZ3JlZXQucGFyc2VTdHJpbmcoaGVsbG8pKQoKVGhlIHByb2dyYW0gb3V0cHV0cyB0aGUgZm9sbG93aW5nOjoKCiAgICBIZWxsbywgV29ybGQhIC0+IFsnSGVsbG8nLCAnLCcsICdXb3JsZCcsICchJ10KClRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYW1tYXIgaXMgcXVpdGUgcmVhZGFibGUsIG93aW5nIHRvIHRoZSBzZWxmLWV4cGxhbmF0b3J5CmNsYXNzIG5hbWVzLCBhbmQgdGhlIHVzZSBvZiAnKycsICd8JyBhbmQgJ14nIG9wZXJhdG9ycy4KClRoZSBMe1BhcnNlUmVzdWx0c30gb2JqZWN0IHJldHVybmVkIGZyb20gTHtQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPFBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmc+fSBjYW4gYmUgYWNjZXNzZWQgYXMgYSBuZXN0ZWQgbGlzdCwgYSBkaWN0aW9uYXJ5LCBvciBhbgpvYmplY3Qgd2l0aCBuYW1lZCBhdHRyaWJ1dGVzLgoKVGhlIHB5cGFyc2luZyBtb2R1bGUgaGFuZGxlcyBzb21lIG9mIHRoZSBwcm9ibGVtcyB0aGF0IGFyZSB0eXBpY2FsbHkgdmV4aW5nIHdoZW4gd3JpdGluZyB0ZXh0IHBhcnNlcnM6CiAtIGV4dHJhIG9yIG1pc3Npbmcgd2hpdGVzcGFjZSAodGhlIGFib3ZlIHByb2dyYW0gd2lsbCBhbHNvIGhhbmRsZSAiSGVsbG8sV29ybGQhIiwgIkhlbGxvICAsICBXb3JsZCAgISIsIGV0Yy4pCiAtIHF1b3RlZCBzdHJpbmdzCiAtIGVtYmVkZGVkIGNvbW1lbnRzCgoKR2V0dGluZyBTdGFydGVkIC0KLS0tLS0tLS0tLS0tLS0tLS0KVmlzaXQgdGhlIGNsYXNzZXMgTHtQYXJzZXJFbGVtZW50fSBhbmQgTHtQYXJzZVJlc3VsdHN9IHRvIHNlZSB0aGUgYmFzZSBjbGFzc2VzIHRoYXQgbW9zdCBvdGhlciBweXBhcnNpbmcKY2xhc3NlcyBpbmhlcml0IGZyb20uIFVzZSB0aGUgZG9jc3RyaW5ncyBmb3IgZXhhbXBsZXMgb2YgaG93IHRvOgogLSBjb25zdHJ1Y3QgbGl0ZXJhbCBtYXRjaCBleHByZXNzaW9ucyBmcm9tIEx7TGl0ZXJhbH0gYW5kIEx7Q2FzZWxlc3NMaXRlcmFsfSBjbGFzc2VzCiAtIGNvbnN0cnVjdCBjaGFyYWN0ZXIgd29yZC1ncm91cCBleHByZXNzaW9ucyB1c2luZyB0aGUgTHtXb3JkfSBjbGFzcwogLSBzZWUgaG93IHRvIGNyZWF0ZSByZXBldGl0aXZlIGV4cHJlc3Npb25zIHVzaW5nIEx7WmVyb09yTW9yZX0gYW5kIEx7T25lT3JNb3JlfSBjbGFzc2VzCiAtIHVzZSBMeycrJzxBbmQ+fSwgTHsnfCc8TWF0Y2hGaXJzdD59LCBMeydeJzxPcj59LCBhbmQgTHsnJic8RWFjaD59IG9wZXJhdG9ycyB0byBjb21iaW5lIHNpbXBsZSBleHByZXNzaW9ucyBpbnRvIG1vcmUgY29tcGxleCBvbmVzCiAtIGFzc29jaWF0ZSBuYW1lcyB3aXRoIHlvdXIgcGFyc2VkIHJlc3VsdHMgdXNpbmcgTHtQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lfQogLSBmaW5kIHNvbWUgaGVscGZ1bCBleHByZXNzaW9uIHNob3J0LWN1dHMgbGlrZSBMe2RlbGltaXRlZExpc3R9IGFuZCBMe29uZU9mfQogLSBmaW5kIG1vcmUgdXNlZnVsIGNvbW1vbiBleHByZXNzaW9ucyBpbiB0aGUgTHtweXBhcnNpbmdfY29tbW9ufSBuYW1lc3BhY2UgY2xhc3MKegUyLjIuMXoVMTggU2VwIDIwMTggMDA6NDkgVVRDeipQYXVsIE1jR3VpcmUgPHB0bWNnQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD7pAAAAAE4pAdoDcmVmKQHaCGRhdGV0aW1lKQHaBVJMb2NrKQHaCEl0ZXJhYmxlKQHaDk11dGFibGVNYXBwaW5nKQHaC09yZGVyZWREaWN02gNBbmTaD0Nhc2VsZXNzS2V5d29yZNoPQ2FzZWxlc3NMaXRlcmFs2gpDaGFyc05vdElu2gdDb21iaW5l2gREaWN02gRFYWNo2gVFbXB0edoKRm9sbG93ZWRCedoHRm9yd2FyZNoKR29Ub0NvbHVtbtoFR3JvdXDaB0tleXdvcmTaB0xpbmVFbmTaCUxpbmVTdGFydNoHTGl0ZXJhbNoKTWF0Y2hGaXJzdNoHTm9NYXRjaNoGTm90QW552glPbmVPck1vcmXaCE9ubHlPbmNl2ghPcHRpb25hbNoCT3LaElBhcnNlQmFzZUV4Y2VwdGlvbtoTUGFyc2VFbGVtZW50RW5oYW5jZdoOUGFyc2VFeGNlcHRpb27aD1BhcnNlRXhwcmVzc2lvbtoTUGFyc2VGYXRhbEV4Y2VwdGlvbtoMUGFyc2VSZXN1bHRz2hRQYXJzZVN5bnRheEV4Y2VwdGlvbtoNUGFyc2VyRWxlbWVudNoMUXVvdGVkU3RyaW5n2hlSZWN1cnNpdmVHcmFtbWFyRXhjZXB0aW9u2gVSZWdleNoGU2tpcFRv2glTdHJpbmdFbmTaC1N0cmluZ1N0YXJ02ghTdXBwcmVzc9oFVG9rZW7aDlRva2VuQ29udmVydGVy2gVXaGl0ZdoEV29yZNoHV29yZEVuZNoJV29yZFN0YXJ02gpaZXJvT3JNb3Jl2glhbHBoYW51bXPaBmFscGhhc9oKYWxwaGFzOGJpdNoLYW55Q2xvc2VUYWfaCmFueU9wZW5UYWfaDWNTdHlsZUNvbW1lbnTaA2NvbNoSY29tbWFTZXBhcmF0ZWRMaXN02hBjb21tb25IVE1MRW50aXR52gxjb3VudGVkQXJyYXnaD2NwcFN0eWxlQ29tbWVudNoPZGJsUXVvdGVkU3RyaW5n2g9kYmxTbGFzaENvbW1lbnTaDWRlbGltaXRlZExpc3TaBmRpY3RPZtoOZG93bmNhc2VUb2tlbnPaBWVtcHR52gdoZXhudW1z2gtodG1sQ29tbWVudNoQamF2YVN0eWxlQ29tbWVudNoEbGluZdoHbGluZUVuZNoJbGluZVN0YXJ02gZsaW5lbm/aDG1ha2VIVE1MVGFnc9oLbWFrZVhNTFRhZ3PaDm1hdGNoT25seUF0Q29s2hFtYXRjaFByZXZpb3VzRXhwctoUbWF0Y2hQcmV2aW91c0xpdGVyYWzaCm5lc3RlZEV4cHLaD251bGxEZWJ1Z0FjdGlvbtoEbnVtc9oFb25lT2baB29wQXNzb2PaEm9wZXJhdG9yUHJlY2VkZW5jZdoKcHJpbnRhYmxlc9oIcHVuYzhiaXTaEnB5dGhvblN0eWxlQ29tbWVudNoMcXVvdGVkU3RyaW5n2gxyZW1vdmVRdW90ZXPaEXJlcGxhY2VIVE1MRW50aXR52gtyZXBsYWNlV2l0aNoKcmVzdE9mTGluZdoPc2dsUXVvdGVkU3RyaW5n2gZzcmFuZ2XaCXN0cmluZ0VuZNoLc3RyaW5nU3RhcnTaEHRyYWNlUGFyc2VBY3Rpb27aDXVuaWNvZGVTdHJpbmfaDHVwY2FzZVRva2Vuc9oNd2l0aEF0dHJpYnV0ZdoNaW5kZW50ZWRCbG9ja9oPb3JpZ2luYWxUZXh0Rm9y2gd1bmdyb3Vw2g1pbmZpeE5vdGF0aW9u2gtsb2NhdGVkRXhwctoJd2l0aENsYXNz2gpDbG9zZU1hdGNo2gh0b2tlbk1hcNoQcHlwYXJzaW5nX2NvbW1vbukDAAAAYwEAAAAAAAAAAAAAAAMAAAAIAAAAQwAAAHNmAAAAdAB8AHQBgwJyDnwAUwB6CnQCfACDAVcAUwAEAHQDawpyYAEAAQABAHQBfACDAaAEdAWgBqEAZAGhAn0BdAdkAoMBfQJ8AqAIZANkBIQAoQEBAHwCoAl8AaEBBgBZAFMAWABkBVMAKQZhFQEAAERyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHN0cihvYmopIHRoYXQgdHJpZXMgdG8gYmUgVW5pY29kZSBmcmllbmRseS4gSXQgZmlyc3QgdHJpZXMKICAgICAgICAgICBzdHIob2JqKS4gSWYgdGhhdCBmYWlscyB3aXRoIGEgVW5pY29kZUVuY29kZUVycm9yLCB0aGVuIGl0IHRyaWVzIHVuaWNvZGUob2JqKS4gSXQKICAgICAgICAgICB0aGVuIDwgcmV0dXJucyB0aGUgdW5pY29kZSBvYmplY3QgfCBlbmNvZGVzIGl0IHdpdGggdGhlIGRlZmF1bHQgZW5jb2RpbmcgfCAuLi4gPi4KICAgICAgICDaEXhtbGNoYXJyZWZyZXBsYWNlegYmI1xkKztjAQAAAAAAAAAAAAAAAQAAAAYAAABTAAAAcyQAAABkAXQAdAF8AGQCGQBkA2QEhQIZAIMBgwFkA2QAhQIZABcAUwApBU56Alx1cgEAAADpAgAAAOn/////KQLaA2hleNoDaW50qQHaAXSpAHJ5AAAA+pIvYnVpbGRkaXIvYnVpbGQvQlVJTERST09UL2FsdC1weXRob24zOC1zZXR1cHRvb2xzLTU4LjMuMC0yLmVsOC54ODZfNjQvb3B0L2FsdC9weXRob24zOC9saWIvcHl0aG9uMy44L3NpdGUtcGFja2FnZXMvc2V0dXB0b29scy9fdmVuZG9yL3B5cGFyc2luZy5wedoIPGxhbWJkYT6rAAAA8wAAAAB6F191c3RyLjxsb2NhbHM+LjxsYW1iZGE+TikK2gppc2luc3RhbmNl2gd1bmljb2Rl2gNzdHLaElVuaWNvZGVFbmNvZGVFcnJvctoGZW5jb2Rl2gNzeXPaEmdldGRlZmF1bHRlbmNvZGluZ3IpAAAA2g5zZXRQYXJzZUFjdGlvbtoPdHJhbnNmb3JtU3RyaW5nKQPaA29iatoDcmV0Wgp4bWxjaGFycmVmcnkAAAByeQAAAHJ6AAAA2gVfdXN0cpoAAABzEgAAAAAFCgEEAgIDCgIOAhQBCAEOAXKIAAAAejZzdW0gbGVuIHNvcnRlZCByZXZlcnNlZCBsaXN0IHR1cGxlIHNldCBhbnkgYWxsIG1pbiBtYXhjAQAAAAAA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dHRyaWJ1dGUgKEN7cmVzdWx0cy48cmVzdWx0c05hbWU+fSAtIHNlZSBMe1BhcnNlckVsZW1lbnQuc2V0UmVzdWx0c05hbWV9KQoKICAgIEV4YW1wbGU6OgogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgZGF0ZV9zdHIgPSAoaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgieWVhciIpICsgJy8nIAogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoIm1vbnRoIikgKyAnLycgCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgiZGF5IikpCiAgICAgICAgIyBlcXVpdmFsZW50IGZvcm06CiAgICAgICAgIyBkYXRlX3N0ciA9IGludGVnZXIoInllYXIiKSArICcvJyArIGludGVnZXIoIm1vbnRoIikgKyAnLycgKyBpbnRlZ2VyKCJkYXkiKQoKICAgICAgICAjIHBhcnNlU3RyaW5nIHJldHVybnMgYSBQYXJzZVJlc3VsdHMgb2JqZWN0CiAgICAgICAgcmVzdWx0ID0gZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKQoKICAgICAgICBkZWYgdGVzdChzLCBmbj1yZXByKToKICAgICAgICAgICAgcHJpbnQoIiVzIC0+ICVzIiAlIChzLCBmbihldmFsKHMpKSkpCiAgICAgICAgdGVzdCgibGlzdChyZXN1bHQpIikKICAgICAgICB0ZXN0KCJyZXN1bHRbMF0iKQogICAgICAgIHRlc3QoInJlc3VsdFsnbW9udGgnXSIpCiAgICAgICAgdGVzdCgicmVzdWx0LmRheSIpCiAgICAgICAgdGVzdCgiJ21vbnRoJyBpbiByZXN1bHQiKQogICAgICAgIHRlc3QoIidtaW51dGVzJyBpbiByZXN1bHQiKQogICAgICAgIHRlc3QoInJlc3VsdC5kdW1wKCkiLCBzdHIpCiAgICBwcmludHM6OgogICAgICAgIGxpc3QocmVzdWx0KSAtPiBbJzE5OTknLCAnLycsICcxMicsICcvJywgJzMxJ10KICAgICAgICByZXN1bHRbMF0g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ZmF1bHQgcmV0dXJuIHZhbHVlIGFyZ3VtZW50IGlzIAogICAgICAgIHN1cHBvcnRlZCwganVzdCBhcyBpbiBDe2RpY3QucG9wKCl9LgoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgZGVmIHJlbW92ZV9maXJzdCh0b2tlbnMpOgogICAgICAgICAgICAgICAgdG9rZW5zLnBvcCgwKQogICAgICAgICAgICBwcmludChPbmVPck1vcmUoV29yZChudW1zKSkucGFyc2VTdHJpbmcoIjAgMTIzIDMyMSIpKSAjIC0+IFsnMCcsICcxMjMnLCAnMzIxJ10KICAgICAgICAgICAgcHJpbnQoT25lT3JNb3JlKFdvcmQobnVtcykpLmFkZFBhcnNlQWN0aW9uKHJlbW92ZV9maXJzdCkucGFyc2VTdHJpbmcoIjAgMTIzIDMyMSIpKSAjIC0+IFsnMTIzJywgJzMyMSddCgogICAgICAgICAgICBsYWJlbCA9IFdvcmQoYWxwaGFzKQogICAgICAgICAgICBwYXR0ID0gbGFiZWwoIkxBQkVMIikgKyBPbmVPck1vcmUoV29yZChudW1zKSkKICAgICAgICAgICAgcHJpbnQocGF0dC5wYXJzZVN0cmluZygiQUFCIDEyMyAzMjEiKS5kdW1wKCkpCgogICAgICAgICAgICAjIFVzZSBwb3AoKSBpbiBhIHBhcnNlIGFjdGlvbiB0byByZW1vdmUgbmFtZWQgcmVzdWx0IChub3RlIHRoYXQgY29ycmVzcG9uZGluZyB2YWx1ZSBpcyBub3QKICAgICAgICAgICAgIyByZW1vdmVkIGZyb20gbGlzdCBmb3JtIG9mIHJlc3VsdHMpCiAgICAgICAgICAgIGRlZiByZW1vdmVfTEFCRUwodG9rZW5zKToKICAgICAgICAgICAgICAgIHRva2Vucy5wb3AoIkxBQkVMIikKICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbnMKICAgICAgICAgICAgcGF0dC5hZGRQYXJzZUFjdGlvbihyZW1vdmVfTEFCRUwpCiAgICAgICAgICAgIHByaW50KHBhdHQucGFyc2VTdHJpbmcoIkFBQiAxMjMgMzIxIikuZHVtcCgpKQogICAgICAgIHByaW50czo6CiAg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ZSBmb3IgdGhpcyB0b2tlbiBleHByZXNzaW9uLiBVc2VmdWwgd2hlbiBzZXZlcmFsIAogICAgICAgIGRpZmZlcmVudCBleHByZXNzaW9ucyBtaWdodCBtYXRjaCBhdCBhIHBhcnRpY3VsYXIgbG9jYXRpb24uCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgICAgICBzc25fZXhwciA9IFJlZ2V4KHIiXGRcZFxkLVxkXGQtXGRcZFxkXGQiKQogICAgICAgICAgICBob3VzZV9udW1iZXJfZXhwciA9IFN1cHByZXNzKCcjJykgKyBXb3JkKG51bXMsIGFscGhhbnVtcykKICAgICAgICAgICAgdXNlcl9kYXRhID0gKEdyb3VwKGhvdXNlX251bWJlcl9leHByKSgiaG91c2VfbnVtYmVyIikgCiAgICAgICAgICAgICAgICAgICAgICAgIHwgR3JvdXAoc3NuX2V4cHIpKCJzc24iKQogICAgICAgICAgICAgICAgICAgICAgICB8IEdyb3VwKGludGVnZXIpKCJhZ2UiKSkKICAgICAgICAgICAgdXNlcl9pbmZvID0gT25lT3JNb3JlKHVzZXJfZGF0YSkKICAgICAgICAgICAgCiAgICAgICAgICAgIHJlc3VsdCA9IHVzZXJfaW5mby5wYXJzZVN0cmluZygiMjIgMTExLTIyLTMzMzMgIzIyMUIiKQogICAgICAgICAgICBmb3IgaXRlbSBpbiByZXN1bHQ6CiAgICAgICAgICAgICAgICBwcmludChpdGVtLmdldE5hbWUoKSwgJzonLCBpdGVtWzBdKQogICAgICAgIHByaW50czo6CiAgICAgICAgICAgIGFnZSA6IDIyCiAgICAgICAgICAgIHNzbiA6IDExMS0yMi0zMzMzCiAgICAgICAgICAgIGhvdXNlX251bWJlciA6IDIyMUIKICAgICAgICBOco0AAAByAQAAACkCcgEAAABydAAAACkJctgAAABy2QAAANoVX1BhcnNlUmVzdWx0c19fbG9va3VwcvIAAABy4QAAANoEbmV4dHIEAQAAchEBAAByDwEAACkCcqcAAADaA3BhcnJ5AAAAcnkAAAByegAAANoHZ2V0TmFt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aW50LnBwcmludH0gbWV0aG9kLiAoVXtodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQucHByaW50fSkKCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGlkZW50ID0gV29yZChhbHBoYXMsIGFscGhhbnVtcykKICAgICAgICAgICAgbnVtID0gV29yZChudW1zKQogICAgICAgICAgICBmdW5jID0gRm9yd2FyZCgpCiAgICAgICAgICAgIHRlcm0gPSBpZGVudCB8IG51bSB8IEdyb3VwKCcoJyArIGZ1bmMgKyAnKScpCiAgICAgICAgICAgIGZ1bmMgPDw9IGlkZW50ICsgR3JvdXAoT3B0aW9uYWwoZGVsaW1pdGVkTGlzdCh0ZXJtKSkpCiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMucGFyc2VTdHJpbmcoImZuYSBhLGIsKGZuYiBjLGQsMjAwKSwxMDAiKQogICAgICAgICAgICByZXN1bHQucHByaW50KHdpZHRoPTQwKQogICAgICAgIHByaW50czo6CiAgICAgICAgICAgIFsnZm5hJywKICAgICAgICAgICAgIFsnYScsCiAgICAgICAgICAgICAgJ2InLAogICAgICAgICAgICAgIFsnKCcsICdmbmInLCBbJ2MnLCAnZCcsICcyMDAnXSwgJyknXSwKICAgICAgICAgICAgICAnMTAwJ11dCiAgICAgICAgTikC2gZwcHJpbnRy1gAAAKkDcqcAAABypgAAAHIWAQAAcnkAAAByeQAAAHJ6AAAAclUBAACUAwAAcwIAAAAAFXoTUGFyc2VSZXN1bHRzLnBwcmludGMBAAAAAAAAAAAAAAABAAAABQAAAEMAAABzLgAAAHwAagB8AGoBoAKhAHwAagNkAGsJch58AKADoQBwIGQAfABqBHwAagVmBGYCUwByiQAAACkGct4AAABy4QAAAHLjAAAActkAAABy2gAAAHLYAAAAcrAAAAByeQAAAHJ5AAAAcnoAAADaDF9fZ2V0c3RhdGVfX6wDAABzDgAAAAABBAEIARQBBAEE/QL/ehlQYXJzZVJlc3VsdHMuX19nZXRzdGF0ZV9fYwIAAAAAAAAAAAAAAAQAAAAFAAAAQwAAAHNOAAAA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bm90IG5lZWQgdG8gcmV0dXJuIGFueSB2YWx1ZS4KCiAgICAgICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHM6CiAgICAgICAgIC0gY2FsbER1cmluZ1RyeSA9IChkZWZhdWx0PUN7RmFsc2V9KSBpbmRpY2F0ZSBpZiBwYXJzZSBhY3Rpb24gc2hvdWxkIGJlIHJ1biBkdXJpbmcgbG9va2FoZWFkcyBhbmQgYWx0ZXJuYXRlIHRlc3RpbmcKCiAgICAgICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2luZyBiZWhhdmlvciBpcyB0byBleHBhbmQgdGFicyBpbiB0aGUgaW5wdXQgc3RyaW5nCiAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUgTHtJe3BhcnNlU3RyaW5nfTxwYXJzZVN0cmluZz59IGZvciBtb3JlIGluZm9ybWF0aW9uCiAgICAgICAgb24gcGFyc2luZyBzdHJpbmdzIGNvbnRhaW5pbmcgQ3s8VEFCPn1zLCBhbmQgc3VnZ2VzdGVkIG1ldGhvZHMgdG8gbWFpbnRhaW4gYQogICAgICAgIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgcGFyc2VkIHN0cmluZywgdGhlIHBhcnNlIGxvY2F0aW9uLCBhbmQgbGluZSBhbmQgY29sdW1uCiAgICAgICAgcG9zaXRpb25zIHdpdGhpbiB0aGUgcGFyc2VkIHN0cmluZy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyICsgJy8nICsgaW50ZWdlciArICcvJyArIGludGVnZXIKCiAgICAgICAgICAgIGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikgICMgLT4gWycxOTk5JywgJy8nLCAnMTInLCAnLycsICczMSddCgogICAgICAgICAgICAjIHVzZSBwYXJzZSBhY3Rpb24gdG8gY29udmVydCB0byBpbnRzIGF0IHBhcnNlIHRpbWUKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IGludCh0b2tzWzBdKSkKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyICsgJy8nICsgaW50ZWdlciArICcvJyArIGludGVnZXIKCiAgICAgICAgICAgICMgbm90ZSB0aGF0IGludGVnZXIgZmllbGRzIGFyZSBub3cgaW50cywgbm90IHN0cmluZ3MKICAgICAgICAgICAgZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKSAgIyAtPiBbMTk5OSwgJy8nLCAxMiwgJy8nLCAzMV0KICAgICAgICByoQEAAEYpBnLdAAAA2gNtYXByhwEAAHKOAQAAcuwAAAByoQEAAKkDcqcAAADaA2Zuc3IWAQAAcnkAAAByeQAAAHJ6AAAAcoQAAADiBAAAcwYAAAAAIhQBDgF6HFBhcnNlckVsZW1lbnQuc2V0UGFyc2VBY3Rpb25jAQAAAAAAAAAAAAAAAwAAAAcAAABPAAAAczQAAAB8AAQAagB0AXQCdAN0AXwBgwGDAoMBNwACAF8AfABqBHAsfAKgBWQBZAKhAnwAXwR8AFMAKQN6swogICAgICAgIEFkZCBvbmUgb3IgbW9yZSBwYXJzZSBhY3Rpb25zIHRvIGV4cHJlc3Npb24ncyBsaXN0IG9mIHBhcnNlIGFjdGlvbnMuIFNlZSBMe0l7c2V0UGFyc2VBY3Rpb259PHNldFBhcnNlQWN0aW9uPn0uCiAgICAgICAgCiAgICAgICAgU2VlIGV4YW1wbGVzIGluIEx7SXtjb3B5fTxjb3B5Pn0uCiAgICAgICAgcqEBAABGKQZyjgEAAHLdAAAAcrYBAAByhwEAAHKhAQAAcuwAAABytwEAAHJ5AAAAcnkAAAByegAAANoOYWRkUGFyc2VBY3Rpb24IBQAAcwYAAAAABhwBFAF6HFBhcnNlckVsZW1lbnQuYWRkUGFyc2VBY3Rpb25jAQAAAAAAAAAAAAAABAAAAAQAAAAPAAAAc14AAAB8AqAAZAFkAqECiQJ8AqAAZANkBKECchx0AW4CdAKJAHwBRABdIIkBhwCHAYcCZgNkBWQGhAh9A3wAagOgBHwDoQEBAHEkfABqBXBWfAKgAGQHZAShAnwAXwV8AFMAKQhh0wMAAEFkZCBhIGJvb2xlYW4gcHJlZGljYXRlIGZ1bmN0aW9uIHRvIGV4cHJlc3Npb24ncyBsaXN0IG9mIHBhcnNlIGFjdGlvbnMuIFNlZSAKICAgICAgICBMe0l7c2V0UGFyc2VBY3Rpb259PHNldFBhcnNlQWN0aW9uPn0gZm9yIGZ1bmN0aW9uIGNhbGwgc2lnbmF0dXJlcy4gVW5saWtlIEN7c2V0UGFyc2VBY3Rpb259LCAKICAgICAgICBmdW5jdGlvbnMgcGFzc2VkIHRvIEN7YWRkQ29uZGl0aW9ufSBuZWVkIHRvIHJldHVybiBib29sZWFuIHN1Y2Nlc3MvZmFpbCBvZiB0aGUgY29uZGl0aW9uLgoKICAgICAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50czoKICAgICAgICAgLSBtZXNzYWdlID0gZGVmaW5lIGEgY3VzdG9tIG1lc3NhZ2UgdG8gYmUgdXNlZCBpbiB0aGUgcmFpc2VkIGV4Y2VwdGlvbgogICAgICAgICAtIGZhdGFsICAgPSBpZiBUcnVlLCB3aWxsIHJhaXNlIFBhcnNlRmF0YWxFeGNlcHRpb24gdG8gc3RvcCBwYXJzaW5nIGltbWVkaWF0ZWx5OyBvdGhlcndpc2Ugd2lsbCByYWlzZSBQYXJzZUV4Y2VwdGlvbgogICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IGludCh0b2tzWzBdKSkKICAgICAgICAgICAgeWVhcl9pbnQgPSBpbnRlZ2VyLmNvcHkoKQogICAgICAgICAgICB5ZWFyX2ludC5hZGRDb25kaXRpb24obGFtYmRhIHRva3M6IHRva3NbMF0gPj0gMjAwMCwgbWVzc2FnZT0iT25seSBzdXBwb3J0IHllYXJzIDIwMDAgYW5kIGxhdGVyIikKICAgICAgICAgICAgZGF0ZV9zdHIgPSB5ZWFyX2ludCArICcvJyArIGludGVnZXIgKyAnLycgKyBpbnRlZ2VyCgogICAgICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpICAjIC0+IEV4Y2VwdGlvbjogT25s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aGlzIHNwZWVkdXAgbWF5IGJyZWFrIGV4aXN0aW5nIHByb2dyYW1zIHRoYXQgdXNlIHBhcnNlIGFjdGlvbnMgdGhhdAogICAgICAgICAgIGhhdmUgc2lkZS1lZmZlY3RzLiAgRm9yIHRoaXMgcmVhc29uLCBwYWNrcmF0IHBhcnNpbmcgaXMgZGlzYWJsZWQgd2hlbgogICAgICAgICAgIHlvdSBmaXJzdCBpbXBvcnQgcHlwYXJzaW5nLiAgVG8gYWN0aXZhdGUgdGhlIHBhY2tyYXQgZmVhdHVyZSwgeW91cgogICAgICAgICAgIHByb2dyYW0gbXVzdCBjYWxsIHRoZSBjbGFzcyBtZXRob2QgQ3tQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXQoKX0uICBJZgogICAgICAgICAgIHlvdXIgcHJvZ3JhbSB1c2VzIEN7cHN5Y299IHRvICJjb21waWxlIGFzIHlvdSBnbyIsIHlvdSBtdXN0IGNhbGwKICAgICAgICAgICBDe2VuYWJsZVBhY2tyYXR9IGJlZm9yZSBjYWxsaW5nIEN7cHN5Y28uZnVsbCgpfS4gIElmIHlvdSBkbyBub3QgZG8gdGhpcywKICAgICAgICAgICBQeXRob24gd2lsbCBjcmFzaC4gIEZvciBiZXN0IHJlc3VsdHMsIGNhbGwgQ3tlbmFibGVQYWNrcmF0KCl9IGltbWVkaWF0ZWx5CiAgICAgICAgICAgYWZ0ZXIgaW1wb3J0aW5nIHB5cGFyc2luZy4KICAgICAgICAgICAKICAgICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgICAgaW1wb3J0IHB5cGFyc2luZwogICAgICAgICAgICAgICBweXBhcnNpbmcuUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0KCkKICAgICAgICBUTikHciYAAADaD19wYWNrcmF0RW5hYmxlZHLmAQAAcvgBAABy8gEAAHL9AQAAcrQBAAApAdoQY2FjaGVfc2l6ZV9saW1pdHJ5AAAAcnkAAAByegAAANoNZW5hYmxlUGFja3JhdCUGAABzDAAAAAAbBgEGAQgBDAIMAXobUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0YwMAAAAAAAAAAAAAAAgAAAAKAAAAQwAAAHOu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YwAAAHM2AQAAfABqAHMOfACgAaEAAQB8AGoCRABdDH0EfASgAaEAAQBxFHwAagNzNHQEfAGDAaAFoQB9AXQGfAGDAX0FZAF9BnwAagd9B3wAagh9CHQJoAqhAAEAZAF9CXqkfAZ8BWsBcvp8CXwCawBy+nogfAd8AXwGgwJ9CnwIfAF8CmQCZAONA1wCfQt9DFcAbhwEAHQLawpypgEAAQABAHwKZAQXAH0GWQBxWlgAfAt8BmsEcvB8CWQENwB9CXwMfAp8C2YDVgABAHwDcup8B3wBfAaDAn0NfA18BmsEcuB8C30Gce58BmQENwB9BnH4fAt9BnFafApkBBcAfQZxWlcAbjQEAHQMawqQAXIwAQB9DgEAehR0CWoNkAFyHIIAbgR8DoIBVwA1AGQFfQ5+DlgAWQBuAlgAZAVTACkGYYYEAAAKICAgICAgICBTY2FuIHRoZSBpbnB1dCBzdHJpbmcgZm9yIGV4cHJlc3Npb24gbWF0Y2hlcy4gIEVhY2ggbWF0Y2ggd2lsbCByZXR1cm4gdGhlCiAgICAgICAgbWF0Y2hpbmcgdG9rZW5zLCBzdGFydCBsb2NhdGlvbiwgYW5kIGVuZCBsb2NhdGlvbi4gIE1heSBiZSBjYWxsZWQgd2l0aCBvcHRpb25hbAogICAgICAgIEN7bWF4TWF0Y2hlc30gYXJndW1lbnQsIHRvIGNsaXAgc2Nhbm5pbmcgYWZ0ZXIgJ24nIG1hdGNoZXMgYXJlIGZvdW5kLiAgSWYKICAgICAgICBDe292ZXJsYXB9IGlzIHNwZWNpZmllZCwgdGhlbiBvdmVybGFwcGluZyBtYXRjaGVzIHdpbGwgYmUgcmVwb3J0ZWQuCgogICAgICAgIE5vdGUgdGhhdCB0aGUgc3RhcnQgYW5kIGVuZCBsb2NhdGlvbnMgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBzdHJpbmcKICAgICAgICBiZWluZyBwYXJzZWQuICBTZWUgTHtJe3BhcnNlU3RyaW5nfTxwYXJzZVN0cmluZz59IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhcnNpbmcKICAgICAgICBzdHJpbmdzIHdpdGggZW1iZWRkZWQgdGFicy4KCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIHNvdXJjZSA9ICJzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODciCiAgICAgICAgICAgIHByaW50KHNvdXJjZSkKICAgICAgICAgICAgZm9yIHRva2VucyxzdGFydCxlbmQgaW4gV29yZChhbHBoYXMpLnNjYW5TdHJpbmcoc291cmNlKToKICAgICAgICAgICAgICAgIHByaW50KCcgJypzdGFydCArICdeJyooZW5kLXN0YXJ0KSkKICAgICAgICAgICAgICAgIHByaW50KCcgJypzdGFydCArIHRva2Vuc1swXSkKICAgICAgICAKICAgICAgICBwcmludHM6OgogICAgICAgIAogICAgICAgICAgICBzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODcKICAgICAgICAgICAgXl5eXl4KICAgICAgICAgICAgc2xkamYKICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgbHNkamprZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xka2pmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsa2pzZmQKICAgICAgICByAQAAAEapAXKvAQAAco0AAABOKQ5ymgEAAHIDAgAAcpgBAABylwEAAHKIAAAAcgQCAABy8gAAAHLKAQAAcrQBAAByJgAAAHL+AQAAciEAAAByHwAAAHIFAgAAKQ9ypwAAAHJiAQAA2gptYXhNYXRjaGVz2gdvdmVybGFwcsQBAAByyQEAAHKiAAAA2gpwcmVwYXJzZUZu2gdwYXJzZUZu2gdtYXRjaGVzctEBAADaB25leHRMb2Ny0gEAANoHbmV4dGxvY3JpAQAAcnkAAAByeQAAAHJ6AAAA2gpzY2FuU3RyaW5negYAAHNCAAAAAB4GAQgBCgEKAgYBDAEIAQQBBgEGAQgBBAECARABAgEKARYBDgEOAggBCAEMAQQBCgEIAQYCCgIGAg4BEgEIAQQDehhQYXJzZXJFbGVt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KyBMe1plcm9Pck1vcmV9KGV4cHIpfQogICAgICAgICAgICAgIChyZWFkIGFzICJhdCBsZWFzdCBuIGluc3RhbmNlcyBvZiBDe2V4cHJ9IikKICAgICAgICAgLSBDe2V4cHIqKE5vbmUsbil9IGlzIGVxdWl2YWxlbnQgdG8gQ3tleHByKigwLG4pfQogICAgICAgICAgICAgIChyZWFkIGFzICIwIHRvIG4gaW5zdGFuY2VzIG9mIEN7ZXhwcn0iKQogICAgICAgICAtIEN7ZXhwciooTm9uZSxOb25lKX0gaXMgZXF1aXZhbGVudCB0byBDe0x7WmVyb09yTW9yZX0oZXhwcil9CiAgICAgICAgIC0gQ3tleHByKigxLE5vbmUpfSBpcyBlcXVpdmFsZW50IHRvIEN7THtPbmVPck1vcmV9KGV4cHIpfQoKICAgICAgICBOb3RlIHRoYXQgQ3tleHByKihOb25lLG4pfSBkb2VzIG5vdCByYWlzZSBhbiBleGNlcHRpb24gaWYKICAgICAgICBtb3JlIHRoYW4gbiBleHBycyBleGlzdCBpbiB0aGUgaW5wdXQgc3RyZWFtOyB0aGF0IGlzLAogICAgICAgIEN7ZXhwciooTm9uZSxuKX0gZG9lcyBub3QgZW5mb3JjZSBhIG1heGltdW0gbnVtYmVyIG9mIGV4cHIKICAgICAgICBvY2N1cnJlbmNlcy4gIElmIHRoaXMgYmVoYXZpb3IgaXMgZGVzaXJlZCwgdGhlbiB3cml0ZQogICAgICAgIEN7ZXhwciooTm9uZSxuKSArIH5leHByfQogICAgICAgIHIBAAAAKQJOTk5ycwAAAHKNAAAAejdjYW5ub3QgbXVsdGlwbHkgJ1BhcnNlckVsZW1lbnQnIGFuZCAoJyVzJywnJXMnKSBvYmplY3RzejBjYW5ub3QgbXVsdGlwbHkgJ1BhcnNlckVsZW1lbnQnIGFuZCAnJXMnIG9iamVjdHN6L2Nhbm5vdCBtdWx0aXBseSBQYXJzZXJFbGVtZW50IGJ5IG5lZ2F0aXZlIHZhbHVlekBzZWNvbmQgdHVwbGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIGZpcnN0IHR1cGxlIHZhbHVleitjYW5ub3QgbXVsdGlwbHkgUGFyc2VyRWxl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IGFscGhhd29yZCBhdCBsb2MgMTEoMSwxMikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTIpLCAobGluZToxLCBjb2w6MTMpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTUoMSwxNikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTUpLCAobGluZToxLCBjb2w6MTYpCgogICAgICAgIFRoZSBvdXRwdXQgc2hvd24gaXMgdGhhdCBwcm9kdWNlZCBieSB0aGUgZGVmYXVsdCBkZWJ1ZyBhY3Rpb25zIC0gY3VzdG9tIGRlYnVnIGFjdGlvbnMgY2FuIGJlCiAgICAgICAgc3BlY2lmaWVkIHVzaW5nIEx7c2V0RGVidWdBY3Rpb25zfS4gUHJpb3IgdG8gYXR0ZW1wdGluZwogICAgICAgIHRvIG1hdGNoIHRoZSBDe3dkfSBleHByZXNzaW9uLCB0aGUgZGVidWdnaW5nIG1lc3NhZ2UgQ3siTWF0Y2ggPGV4cHJuYW1lPiBhdCBsb2MgPG4+KDxsaW5lPiw8Y29sPikifQogICAgICAgIGlzIHNob3duLiBUaGVuIGlmIHRoZSBwYXJzZSBzdWNjZWVkcywgYSBDeyJNYXRjaGVkIn0gbWVzc2FnZSBpcyBzaG93biwgb3IgYW4gQ3siRXhjZXB0aW9uIHJhaXNlZCJ9CiAgICAgICAgbWVzc2FnZSBpcyBzaG93bi4gQWxzbyBub3RlIHRoZSB1c2Ugb2YgTHtzZXROYW1lfSB0byBhc3NpZ24gYSBodW1hbi1yZWFkYWJsZSBuYW1lIHRvIHRoZSBleHByZXNzaW9uLAogICAgICAgIHdoaWNoIG1ha2VzIGRlYnVnZ2luZyBhbmQgZXhjZXB0aW9uIG1lc3NhZ2VzIGVhc2llciB0byB1bmRlcnN0YW5kIC0gZm9yIGluc3RhbmNlLCB0aGUgZGVmYXVsdAogICAgICAgIG5hbWUgY3JlYXRlZCBmb3IgdGhlIEN7V29yZH0gZXhwcmVzc2lvbiB3aXRob3V0IGNhbGxpbmcgQ3tzZXROYW1lfSBpcyBD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cmluZyBvZiB0ZXN0IHN0cmluZ3MKICAgICAgICAgLSBwYXJzZUFsbCAtIChkZWZhdWx0PUN7VHJ1ZX0pIC0gZmxhZyB0byBwYXNzIHRvIEN7THtwYXJzZVN0cmluZ319IHdoZW4gcnVubmluZyB0ZXN0cyAgICAgICAgICAgCiAgICAgICAgIC0gY29tbWVudCAtIChkZWZhdWx0PUN7JyMnfSkgLSBleHByZXNzaW9uIGZvciBpbmRpY2F0aW5nIGVtYmVkZGVkIGNvbW1lbnRzIGluIHRoZSB0ZXN0IAogICAgICAgICAgICAgIHN0cmluZzsgcGFzcyBOb25lIHRvIGRpc2FibGUgY29tbWVudCBmaWx0ZXJpbmcKICAgICAgICAgLSBmdWxsRHVtcCAtIChkZWZhdWx0PUN7VHJ1ZX0pIC0gZHVtcCByZXN1bHRzIGFzIGxpc3QgZm9sbG93ZWQgYnkgcmVzdWx0cyBuYW1lcyBpbiBuZXN0ZWQgb3V0bGluZTsKICAgICAgICAgICAgICBpZiBGYWxzZSwgb25seSBkdW1wIG5lc3RlZCBsaXN0CiAgICAgICAgIC0gcHJpbnRSZXN1bHRzIC0gKGRlZmF1bHQ9Q3tUcnVlfSkgcHJpbnRzIHRlc3Qgb3V0cHV0IHRvIHN0ZG91dAogICAgICAgICAtIGZhaWx1cmVUZXN0cyAtIChkZWZhdWx0PUN7RmFsc2V9KSBpbmRpY2F0ZXMgaWYgdGhlc2UgdGVzdHMgYXJlIGV4cGVjdGVkIHRvIGZhaWwgcGFyc2luZwoKICAgICAgICBSZXR1cm5zOiBhIChzdWNjZXNzLCByZXN1bHRzKSB0dXBsZSwgd2hlcmUgc3VjY2VzcyBpbmRpY2F0ZXMgdGhhdCBhbGwgdGVzdHMgc3VjY2VlZGVkCiAgICAgICAgKG9yIGZhaWxlZCBpZiBDe2ZhaWx1cmVUZXN0c30gaXMgVHJ1ZSksIGFuZCB0aGUgcmVzdWx0cyBjb250YWluIGEgbGlzdCBvZiBsaW5lcyBvZiBlYWNoIAogICAgICAgIHRlc3QncyBvdXRwdXQKICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgbnVtYmVyX2V4cHIgPSBweXBhcnNpbmdfY29tbW9uLm51bWJlci5jb3B5KCkKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyB1bnNpZ25lZCBpbnRlZ2VyCiAgICAgICAgICAgICAgICAxMDAKICAgICAgICAgICAgICAgICMgbmVnYXRpdmUgaW50ZWdlcgogICAgICAgICAgICAgICAgLTEwMAogICAgICAgICAgICAgICAgIyBmbG9hdCB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgICAgICMgaW50ZWdlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICAgICAnJycpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCgogICAgICAgICAgICByZXN1bHQgPSBudW1iZXJfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgICAgICMgc3RyYXkgY2hhcmFjdGVyCiAgICAgICAgICAgICAgICAxMDBaCiAgICAgICAgICAgICAgICAjIG1pc3NpbmcgbGVhZGluZyBkaWdpdCBiZWZvcmUgJy4nCiAgICAgICAgICAgICAgICAtLjEwMAogICAgICAgICAgICAgICAgIyB0b28gbWFueSAnLicKICAgICAgICAgICAgICAgIDMuMTQuMTU5CiAgICAgICAgICAgICAgICAnJycsIGZhaWx1cmVUZXN0cz1UcnVlKQogICAgICAgICAgICBwcmludCgiU3VjY2VzcyIgaWYgcmVzdWx0WzBdIGVsc2UgIkZhaWxlZCEiKQogICAgICAgIHByaW50czo6CiAgICAgICAgICAgICMgdW5zaWduZWQgaW50ZWdlcgogICAgICAgICAgICAxMDAKICAgICAgICAgICAgWzEwMF0KCiAgICAgICAgICAgICMgbmVnYXRpdmUgaW50ZWdlcgogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgIFstMTAwXQoKICAgICAgICAgICAgIyBmbG9hdCB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgICAgICAjIGludGVnZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgIFsxZS0xMl0KCiAgICAgICAgICAgIFN1Y2Nlc3MKICAgICAgICAgICAgCiAgICAgICAgICAgICMgc3RyYXkgY2hhcmFjdGVyCiAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCAoYXQgY2hhciAzKSwgKGxpbmU6MSwgY29sOjQpCgogICAgICAgICAgICAjIG1pc3NpbmcgbGVhZGluZyBkaWdpdCBiZWZvcmUgJy4nCiAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQge3JlYWwgbnVtYmVyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbiB8IHJlYWwgbnVtYmVyIHwgc2lnbmVkIGludGVnZXJ9IChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKCiAgICAgICAgICAgICMgdG9vIG1hbnkgJy4nCiAgICAgICAgICAgIDMuMTQuMTU5CiAgICAgICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIGVuZCBvZiB0ZXh0IChhdCBjaGFyIDQpLCAobGluZToxLCBjb2w6NSkKCiAgICAgICAgICAgIFN1Y2Nlc3MKCiAgICAgICAgRWFjaCB0ZXN0IHN0cmluZyBtdXN0IGJlIG9uIGEgc2luZ2xlIGxpbmUuIElmIHlvdSB3YW50IHRvIHRlc3QgYSBzdHJpbmcgdGhhdCBzcGFucyBtdWx0aXBsZQogICAgICAgIGxpbmVzLCBjcmVhdGUgYSB0ZXN0IGxpa2UgdGhpczo6CgogICAgICAgICAgICBleHByLnJ1blRlc3QociJ0aGlzIGlzIGEgdGVzdFxuIG9mIHN0cmluZ3MgdGhhdCBzcGFucyBcbiAzIGxpbmVzIikKICAgICAg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bWF0Y2hlc30gLSAoQ3tkZWZhdWx0PTF9KSBtYXhpbXVtIG51bWJlciBvZiBtaXNtYXRjaGVzIGFsbG93ZWQgdG8gY291bnQgYXMgYSBtYXRjaAogICAgCiAgICBUaGUgcmVzdWx0cyBmcm9tIGEgc3VjY2Vzc2Z1bCBwYXJzZSB3aWxsIGNvbnRhaW4gdGhlIG1hdGNoZWQgdGV4dCBmcm9tIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHRoZSBmb2xsb3dpbmcgbmFtZWQgcmVzdWx0czoKICAgICAtIEN7bWlzbWF0Y2hlc30gLSBhIGxpc3Qgb2YgdGhlIHBvc2l0aW9ucyB3aXRoaW4gdGhlIG1hdGNoX3N0cmluZyB3aGVyZSBtaXNtYXRjaGVzIHdlcmUgZm91bmQKICAgICAtIEN7b3JpZ2luYWx9IC0gdGhlIG9yaWdpbmFsIG1hdGNoX3N0cmluZyB1c2VkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgaW5wdXQgc3RyaW5nCiAgICAKICAgIElmIEN7bWlzbWF0Y2hlc30gaXMgYW4gZW1wdHkgbGlzdCwgdGhlbiB0aGUgbWF0Y2ggd2FzIGFuIGV4YWN0IG1hdGNoLgogICAgCiAgICBFeGFtcGxlOjoKICAgICAgICBwYXR0ID0gQ2xvc2VNYXRjaCgiQVRDQVRDR0FBVEdHQSIpCiAgICAgICAgcGF0dC5wYXJzZVN0cmluZygiQVRDQVRDR0FBWEdHQSIpICMgLT4gKFsnQVRDQVRDR0FBWEdHQSddLCB7J21pc21hdGNoZXMnOiBbWzldXSwgJ29yaWdpbmFsJzogWydBVENBVENHQUFUR0dBJ119KQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FYQ0dBQVhHR0EiKSAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgJ0FUQ0FUQ0dBQVRHR0EnICh3aXRoIHVwIHRvIDEgbWlzbWF0Y2hlcykgKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQoKICAgICAgICAjIGV4YWN0IG1hdGNoCiAgICAgICAgcGF0dC5wYXJzZVN0cmluZygiQVRDQVRDR0FBVEdHQSIpICMgLT4gKFsnQVRDQVRDR0FBVEdHQSddLCB7J21pc21hdGNoZXMnOiBbW11dLCAnb3JpZ2luYWwnOiBbJ0FUQ0FUQ0dBQVRHR0EnXX0pCgogICAgICAgICMgY2xvc2UgbWF0Y2ggYWxsb3dpbmcgdXAgdG8gMiBtaXNtYXRjaGVzCiAgICAgICAgcGF0dCA9IENsb3NlTWF0Y2goIkFUQ0FUQ0dBQVRHR0EiLCBtYXhNaXNtYXRjaGVzPTIpCiAgICAgICAgcGF0dC5wYXJzZVN0cmluZygiQVRDQVhDR0FBWEdHQSIpICMgLT4gKFsnQVRDQVhDR0FBWEdHQSddLCB7J21pc21hdGNoZXMnOiBbWzQsIDldXSwgJ29yaWdpbmFsJzogWydBVENBVENHQUFUR0dBJ119KQogICAgco0AAABjAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAc0IAAAB0AHQBfACDAqACoQABAHwBfABfA3wBfABfBHwCfABfBWQBfABqBHwAagVmAhYAfABfBmQCfABfB2QCfABfCGQAUwApA056JkV4cGVjdGVkICVyICh3aXRoIHVwIHRvICVkIG1pc21hdGNoZXMpRikJckkCAABybgAAAHKpAAAActUAAADaDG1hdGNoX3N0cmluZ9oNbWF4TWlzbWF0Y2hlc3KcAQAAcpsBAABylgEAACkDcqcAAAByegIAAHJ7AgAAckoCAAByeQAAAHJ6AAAAcqkAAAAKCgAAcw4AAAAAAQ4BBgEGAQYBEgEGAXoTQ2xvc2VNYXRjaC5fX2luaXRfX1RjBAAAAAAAAAAAAAAADwAAAAUAAABDAAAAc8oAAAB8An0EdAB8AYMBfQV8BHQAfABqAYMBFwB9BnwGfAVrAXK2fABqAX0HZAF9CGcAfQl8AGoCfQp0A3QEfAF8AnwGhQIZAHwAagGDAoMBRABdMlwCfQh9C3wLXAJ9DH0NfAx8DWsDck58CaAFfAihAQEAdAB8CYMBfAprBHJOAQBxtnFOfAhkAhcAfQJ0BnwBfAR8AoUCGQBnAYMBfQ58AGoBfA5kAzwAfAl8DmQEPAB8AnwOZgJTAHQHfAF8AnwAagh8AIMEggFkAFMAKQVOcgEAAAByjQAAANoIb3JpZ2luYWzaCm1pc21hdGNoZXMpCXLyAAAAcnoCAAByewIAAHL3AAAAcpIAAAByHQEAAHIkAAAAciEAAABynAEAACkPcqcAAAByYgEAAHKiAAAAcq4BAADaBXN0YXJ0cskBAADaBm1heGxvY3J6AgAA2g9tYXRjaF9zdHJpbmdsb2NyfQIAAHJ7AgAA2gNzX23aA3NyY9oDbWF02gdyZXN1bHRzcnkAAAByeQAAAHJ6AAAAcswBAAATCgAAcygAAAAAAQQBCAEOAggBBgEEAQQBBgIgAQgBCAEKAQwBBgIIARIBCgEIAQgCehRDbG9zZU1hdGNoLnBhcnNlSW1wbCkBco0AAAApAVRyaQIAAHJ5AAAAcnkAAABySgIAAHJ6AAAAcm4AAADxCQAAcwYAAAAIAQQYDgljAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAczgAAABlAFoBZABaAmQBWgNkDYcAZgFkBmQHhAlaBGQOZAlkCoQBWgWHAGYBZAtkDIQIWgaHAAQAWgdTACkPcjEAAABhFAkAAAogICAgVG9rZW4gZm9yIG1hdGNoaW5nIHdvcmRzIGNvbXBvc2VkIG9mIGFsbG93ZWQgY2hhcmFjdGVyIHNldHMuCiAgICBEZWZpbmVkIHdpdGggc3RyaW5nIGNvbnRhaW5pbmcgYWxsIGFsbG93ZWQgaW5pdGlhbCBjaGFyYWN0ZXJzLAogICAgYW4gb3B0aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgYWxsb3dlZCBib2R5IGNoYXJhY3RlcnMgKGlmIG9taXR0ZWQsCiAgICBkZWZhdWx0cyB0byB0aGUgaW5pdGlhbCBjaGFyYWN0ZXIgc2V0KSwgYW5kIGFuIG9wdGlvbmFsIG1pbmltdW0sCiAgICBtYXhpbXVtLCBhbmQvb3IgZXhhY3QgbGVuZ3RoLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIEN7bWlufSBpcyAxIChhCiAgICBtaW5pbXVtIHZhbHVlIDwgMSBpcyBub3QgdmFsaWQpOyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIEN7bWF4fSBhbmQgQ3tleGFjdH0KICAgIGFyZSAwLCBtZWFuaW5nIG5vIG1heGltdW0gb3IgZXhhY3QgbGVuZ3RoIHJlc3RyaWN0aW9uLiBBbiBvcHRpb25hbAogICAgQ3tleGNsdWRlQ2hhcnN9IHBhcmFtZXRlciBjYW4gbGlzdCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYmUgZm91bmQgaW4gCiAgICB0aGUgaW5wdXQgQ3tib2R5Q2hhcnN9IHN0cmluZzsgdXNlZnVsIHRvIGRlZmluZSBhIHdvcmQgb2YgYWxsIHByaW50YWJsZXMKICAgIGV4Y2VwdCBmb3Igb25lIG9yIHR3byBjaGFyYWN0ZXJzLCBmb3IgaW5zdGFuY2UuCiAgICAKICAgIEx7c3JhbmdlfSBpcyB1c2VmdWwgZm9yIGRlZmluaW5nIGN1c3RvbSBjaGFyYWN0ZXIgc2V0IHN0cmluZ3MgZm9yIGRlZmluaW5nIAogICAgQ3tXb3JkfSBleHByZXNzaW9ucywgdXNpbmcgcmFuZ2Ugbm90YXRpb24gZnJvbSByZWd1bGFyIGV4cHJlc3Npb24gY2hhcmFjdGVyIHNldHMuCiAgICAKICAgIEEgY29tbW9uIG1pc3Rha2UgaXMgdG8gdXNlIEN7V29yZH0gdG8gbWF0Y2ggYSBzcGVjaWZpYyBsaXRlcmFsIHN0cmluZywgYXMgaW4gCiAgICBDe1dvcmQoIkFkZHJlc3MiKX0uIFJlbWVtYmVyIHRoYXQgQ3tXb3JkfSB1c2VzIHRoZSBzdHJpbmcgYXJndW1lbnQgdG8gZGVmaW5lCiAgICBJe3NldHN9IG9mIG1hdGNoYWJsZSBjaGFyYWN0ZXJzLiBUaGlzIGV4cHJlc3Npb24gd291bGQgbWF0Y2ggIkFkZCIsICJBQUEiLAogICAgImRBcmVkIiwgb3IgYW55IG90aGVyIHdvcmQgbWFkZSB1cCBvZiB0aGUgY2hhcmFjdGVycyAnQScsICdkJywgJ3InLCAnZScsIGFuZCAncycuCiAgICBUbyBtYXRjaCBhbiBleGFjdCBsaXRlcmFsIHN0cmluZywgdXNlIEx7TGl0ZXJhbH0gb3IgTHtLZXl3b3JkfS4KCiAgICBweXBhcnNpbmcgaW5jbHVkZXMgaGVscGVyIHN0cmluZ3MgZm9yIGJ1aWxkaW5nIFdvcmRzOgogICAgIC0gTHthbHBoYXN9CiAgICAgLSBMe251bXN9CiAgICAgLSBMe2FscGhhbnVtc30KICAgICAtIEx7aGV4bnVtc30KICAgICAtIEx7YWxwaGFzOGJpdH0gKGFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1IC0gYWNjZW50ZWQsIHRpbGRlZCwgdW1sYXV0ZWQsIGV0Yy4pCiAgICAgLSBMe3B1bmM4Yml0fSAobm9uLWFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1IC0gY3VycmVuY3ksIHN5bWJvbHMsIHN1cGVyc2NyaXB0cywgZGlhY3JpdGljYWxzLCBldGMuKQogICAgIC0gTHtwcmludGFibGVzfSAoYW55IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcikKCiAgICBFeGFtcGxlOjoKICAgICAgICAjIGEgd29yZCBjb21wb3NlZCBvZiBkaWdpdHMKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKSAjIGVxdWl2YWxlbnQgdG8gV29yZCgiMDEyMzQ1Njc4OSIpIG9yIFdvcmQoc3JhbmdlKCIwLTkiKSkKICAgICAgICAKICAgICAgICAjIGEgd29yZCB3aXRoIGEgbGVhZGluZyBjYXBpdGFsLCBhbmQgemVybyBvciBtb3JlIGxvd2VyY2FzZQogICAgICAgIGNhcGl0YWxfd29yZCA9IFdvcmQoYWxwaGFzLnVwcGVyKCksIGFscGhhcy5sb3dlcigpKQoKICAgICAgICAjIGhvc3RuYW1lcyBhcmUgYWxwaGFudW1lcmljLCB3aXRoIGxlYWRpbmcgYWxwaGEsIGFuZCAnLScKICAgICAgICBob3N0bmFtZSA9IFdvcmQoYWxwaGFzLCBhbHBoYW51bXMrJy0nKQogICAgICAgIAogICAgICAgICMgcm9tYW4gbnVtZXJhbCAobm90IGEgc3RyaWN0IHBhcnNlciwgYWNjZXB0cyBpbnZhbGlkIG1peCBvZiBjaGFyYWN0ZXJzKQogICAgICAgIHJvbWFuID0gV29yZCgiSVZYTENETSIpCiAgICAgICAgCiAgICAgICAgIyBhbnkgc3RyaW5nIG9mIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIGV4Y2VwdCBmb3IgJywnCiAgICAgICAgY3N2X3ZhbHVlID0gV29yZChwcmludGFibGVzLCBleGNsdWRlQ2hhcnM9IiwiKQogICAgTnKNAAAAcgEAAABGYwgAAAAAAAAAAAAAAAgAAAAIAAAAAwAAAHPMAQAAdAB0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bGQgYmUgdW5xdW90ZWQgKGRlZmF1bHQ9Q3tUcnVlfSkKICAgICAgICAtIGVuZFF1b3RlQ2hhciAtIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGRlZmluaW5nIHRoZSBlbmQgb2YgdGhlIHF1b3RlIGRlbGltaXRlZCBzdHJpbmcgKGRlZmF1bHQ9Q3tOb25lfSA9PiBzYW1lIGFzIHF1b3RlQ2hhcikKICAgICAgICAtIGNvbnZlcnRXaGl0ZXNwYWNlRXNjYXBlcyAtIGNvbnZlcnQgZXNjYXBlZCB3aGl0ZXNwYWNlIChDeydcdCd9LCBDeydcbid9LCBldGMuKSB0byBhY3R1YWwgd2hpdGVzcGFjZSAoZGVmYXVsdD1De1RydWV9KQoKICAgIEV4YW1wbGU6OgogICAgICAgIHFzID0gUXVvdGVkU3RyaW5nKCciJykKICAgICAgICBwcmludChxcy5zZWFyY2hTdHJpbmcoJ2xzamRmICJUaGlzIGlzIHRoZSBxdW90ZSIgc2xkamYnKSkKICAgICAgICBjb21wbGV4X3FzID0gUXVvdGVkU3RyaW5nKCd7eycsIGVuZFF1b3RlQ2hhcj0nfX0nKQogICAgICAgIHByaW50KGNvbXBsZXhfcXMuc2VhcmNoU3RyaW5nKCdsc2pkZiB7e1RoaXMgaXMgdGhlICJxdW90ZSJ9fSBzbGRqZicpKQogICAgICAgIHNxbF9xcyA9IFF1b3RlZFN0cmluZygnIicsIGVzY1F1b3RlPSciIicpCiAgICAgICAgcHJpbnQoc3FsX3FzLnNlYXJjaFN0cmluZygnbHNqZGYgIlRoaXMgaXMgdGhlIHF1b3RlIHdpdGggIiJlbWJlZGRlZCIiIHF1b3RlcyIgc2xkamYnKSkKICAgIHByaW50czo6CiAgICAgICAgW1snVGhpcyBpcyB0aGUgcXVvdGUnXV0KICAgICAgICBbWydUaGlzIGlzIHRoZSAicXVvdGUiJ11dCiAgICAgICAgW1snVGhpcyBpcyB0aGUgcXVvdGUgd2l0aCAiZW1iZWRkZWQiIHF1b3RlcyddXQogICAgTkZUYwgAAAAAAAAAAAAAAAgAAAAKAAAAAwAAAHNOAgAAdAB0AYgAgwKgAqEAAQB8AaADoQB9AXwBczB0BGoF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cyB0byBiZSBmb3VuZCwgYnV0IGluIGFueSBvcmRlci4KICAgIEV4cHJlc3Npb25zIG1heSBiZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4KICAgIE1heSBiZSBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgQ3snJid9IG9wZXJhdG9yLgoKICAgIEV4YW1wbGU6OgogICAgICAgIGNvbG9yID0gb25lT2YoIlJFRCBPUkFOR0UgWUVMTE9XIEdSRUVOIEJMVUUgUFVSUExFIEJMQUNLIFdISVRFIEJST1dOIikKICAgICAgICBzaGFwZV90eXBlID0gb25lT2YoIlNRVUFSRSBDSVJDTEUgVFJJQU5HTEUgU1RBUiBIRVhBR09OIE9DVEFHT04iKQogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgc2hhcGVfYXR0ciA9ICJzaGFwZToiICsgc2hhcGVfdHlwZSgic2hhcGUiKQogICAgICAgIHBvc25fYXR0ciA9ICJwb3NuOiIgKyBHcm91cChpbnRlZ2VyKCJ4IikgKyAnLCcgKyBpbnRlZ2VyKCJ5IikpKCJwb3NuIikKICAgICAgICBjb2xvcl9hdHRyID0gImNvbG9yOiIgKyBjb2xvcigiY29sb3IiKQogICAgICAgIHNpemVfYXR0ciA9ICJzaXplOiIgKyBpbnRlZ2VyKCJzaXplIikKCiAgICAgICAgIyB1c2UgRWFjaCAodXNpbmcgb3BlcmF0b3IgJyYnKSB0byBhY2NlcHQgYXR0cmlidXRlcyBpbiBhbnkgb3JkZXIgCiAgICAgICAgIyAoc2hhcGUgYW5kIHBvc24gYXJlIHJlcXVpcmVkLCBjb2xvciBhbmQgc2l6ZSBhcmUgb3B0aW9uYWwpCiAgICAgICAgc2hhcGVfc3BlYyA9IHNoYXBlX2F0dHIgJiBwb3NuX2F0dHIgJiBPcHRpb25hbChjb2xvcl9hdHRyKSAmIE9wdGlvbmFsKHNpemVfYXR0cikKCiAgICAgICAgc2hhcGVfc3BlYy5ydW5UZXN0cygnJycKICAgICAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgICAgICBjb2xvcjpHUkVFTiBzaXplOjIwIHNoYXBlOlRSSUFOR0xFIHBvc246MjAsNDAKICAgICAgICAgICAgJycnCiAgICAgICAgICAgICkKICAgIHByaW50czo6CiAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICBbJ3NoYXBlOicsICdTUVVBUkUnLCAnY29sb3I6JywgJ0JMQUNLJywgJ3Bvc246JywgWycxMDAnLCAnLCcsICcxMjAnXV0KICAgICAgICAtIGNvbG9yOiBCTEFDSwogICAgICAgIC0gcG9zbjogWycxMDAnLCAnLCcsICcxMjAnXQogICAgICAgICAgLSB4OiAxMDAKICAgICAgICAgIC0geTogMTIwCiAgICAgICAgLSBzaGFwZTogU1FVQVJFCgoKICAgICAgICBzaGFwZTogQ0lSQ0xFIHNpemU6IDUwIGNvbG9yOiBCTFVFIHBvc246IDUwLDgwCiAgICAgICAgWydzaGFwZTonLCAnQ0lSQ0xFJywgJ3NpemU6JywgJzUwJywgJ2NvbG9yOicsICdCTFVFJywgJ3Bvc246JywgWyc1MCcsICcsJywgJzgwJ11dCiAgICAgICAgLSBjb2xvcjogQkxVRQogICAgICAgIC0gcG9zbjogWyc1MCcsICcsJywgJzgwJ10KICAgICAgICAgIC0geDogNTAKICAgICAgICAgIC0geTogODAKICAgICAgICAtIHNoYXBlOiBDSVJDTEUKICAgICAgICAtIHNpemU6IDUwCgoKICAgICAgICBjb2xvcjogR1JFRU4gc2l6ZTogMjAgc2hhcGU6IFRSSUFOR0xFIHBvc246IDIwLDQwCiAgICAgICAgWydjb2xvcjonLCAnR1JFRU4nLCAnc2l6ZTonLCAnMjAnLCAnc2hhcGU6JywgJ1RSSUFOR0xFJywgJ3Bvc246JywgWycyMCcsICcsJywgJzQwJ11dCiAgICAgICAgLSBjb2xvcjogR1JFRU4KICAgICAgICAtIHBvc246IFsnMjAnLCAnLCcsICc0MCddCiAgICAgICAgICAtIHg6IDIwCiAgICAgICAg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IGV4YWN0PTUpICsgT3B0aW9uYWwoJy0nICsgV29yZChudW1zLCBleGFjdD00KSkpCiAgICAgICAgemlwLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIHRyYWRpdGlvbmFsIFpJUCBjb2RlCiAgICAgICAgICAgIDEyMzQ1CiAgICAgICAgICAgIAogICAgICAgICAgICAjIFpJUCs0IGZvcm0KICAgICAgICAgICAgMTIxMDEtMDAwMQogICAgICAgICAgICAKICAgICAgICAgICAgIyBpbnZhbGlkIFpJUAogICAgICAgICAgICA5ODc2NS0KICAgICAgICAgICAgJycnKQogICAgcHJpbnRzOjoKICAgICAgICAjIHRyYWRpdGlvbmFsIFpJUCBjb2RlCiAgICAgICAgMTIzNDUKICAgICAgICBbJzEyMzQ1J10KCiAgICAgICAgIyBaSVArNCBmb3JtCiAgICAgICAgMTIxMDEtMDAwMQogICAgICAgIFsnMTIxMDEtMDAwMSddCgogICAgICAgICMgaW52YWxpZCBaSVAKICAgICAgICA5ODc2NS0KICAgICAgICAgICAgIF4KICAgICAgICBGQUlMOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCAoYXQgY2hhciA1KSwgKGxpbmU6MSwgY29sOjYpCiAgICBjAwAAAAAAAAAAAAAAAwAAAAQAAAADAAAAcy4AAAB0AHQBfACDAmoCfAFkAWQCjQIBAHwAagNqBHwAXwR8AnwAXwVkA3wAXwZkAFMAKQRORnJnAgAAVCkHckkCAAByHQAAAHKpAAAAcmMBAABykgEAAHIbAQAAcpYBAAApA3KnAAAAcmMBAAByFQEAAHJKAgAAcnkAAAByegAAAHKpAAAAnQ8AAHMIAAAAAAEUAQoBBgF6EU9wdGlvbmFsLl9faW5pdF9fVGMEAAAAAAAAAAAAAAAFAAAACQAAAEMAAABzegAAAHocfABqAGoBfAF8AnwDZAFkAo0EXAJ9An0EVwBuVAQAdAJ0A2YCawpycAEAAQABAHwAagR0BWsJcmh8AGoAagZyXnQHfABqBGcBgwF9BHwAagR8BHwAagBqBjwAcWx8AGoEZwF9BG4EZwB9BFkAbgJYAHwCfARmAlMAcgsDAAApCHJjAQAAcrQBAAByIQAAAHLmAAAAchsBAADaE19vcHRpb25hbE5vdE1hdGNoZWRykQEAAHIkAAAAKQVypwAAAHJiAQAAcqIAAAByrgEAAHLSAQAAcnkAAAByeQAAAHJ6AAAAcswBAACjDwAAcxQAAAAAAQIBHAESAQoBCAEMARACCgIKAXoST3B0aW9uYWwucGFyc2VJbXBsYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHM0AAAAdAB8AGQBgwJyEHwAagFTAHwAagJkAGsIci5kAnQDfABqBIMBFwBkAxcAfABfAnwAagJTACkETnLVAAAAcjIBAAByNQEAAHIGAwAAcrAAAAByeQAAAHJ5AAAAcnoAAABysQAAALEPAABzCgAAAAABCgEGAgoBFAJ6EE9wdGlvbmFsLl9fc3RyX18pAVQpCXKXAAAAcpgAAABymQAAAHK+AAAAchQDAAByqQAAAHLMAQAAcrEAAAByZQIAAHJ5AAAAcnkAAABySgIAAHJ6AAAAch0AAAB6DwAAcwgAAAAIAQQiEAYKDmMAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABzLAAAAGUAWgFkAFoCZAFaA2QJhwBmAWQEZAWECVoEZApkB2QIhAFaBYcABABaBlMAKQtyKgAAAGH/CQAACiAgICBUb2tlbiBmb3Igc2tpcHBpbmcgb3ZlciBhbGwgdW5kZWZpbmVkIHRleHQgdW50aWwgdGhlIG1hdGNoZWQgZXhwcmVzc2lvbiBpcyBmb3VuZC4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gZXhwciAtIHRhcmdldCBleHByZXNzaW9uIG1hcmtpbmcgdGhlIGVuZCBvZiB0aGUgZGF0YSB0byBiZSBza2lwcGVkCiAgICAgLSBpbmNsdWRlIC0gKGRlZmF1bHQ9Q3tGYWxzZX0pIGlmIFRydWUsIHRoZSB0YXJnZXQgZXhwcmVzc2lvbiBpcyBhbHNvIHBhcnNlZCAKICAgICAgICAgICh0aGUgc2tpcHBlZCB0ZXh0IGFuZCB0YXJnZXQgZXhwcmVzc2lvbiBhcmUgcmV0dXJuZWQgYXMgYSAyLWVsZW1lbnQgbGlzdCkuCiAgICAgLSBpZ25vcmUgLSAoZGVmYXVsdD1De05vbmV9KSB1c2VkIHRvIGRlZmluZSBncmFtbWFycyAodHlwaWNhbGx5IHF1b3RlZCBzdHJpbmdzIGFuZCAKICAgICAgICAgIGNvbW1lbnRzKSB0aGF0IG1pZ2h0IGNvbnRhaW4gZmFsc2UgbWF0Y2hlcyB0byB0aGUgdGFyZ2V0IGV4cHJlc3Npb24KICAgICAtIGZhaWxPbiAtIChkZWZhdWx0PUN7Tm9uZX0pIGRlZmluZSBleHByZXNzaW9ucyB0aGF0IGFyZSBub3QgYWxsb3dlZCB0byBiZSAKICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBza2lwcGVkIHRlc3Q7IGlmIGZvdW5kIGJlZm9yZSB0aGUgdGFyZ2V0IGV4cHJlc3Npb24gaXMgZm91bmQsIAogICAgICAgICAgdGhlIFNraXBUbyBpcyBub3QgYSBtYXRjaAoKICAgIEV4YW1wbGU6OgogICAgICAgIHJlcG9ydCA9ICcnJwogICAgICAgICAgICBPdXRzdGFuZGluZyBJc3N1ZXMgUmVwb3J0IC0gMSBKYW4gMjAwMAoKICAgICAgICAgICAgICAgIyB8IFNldmVyaXR5IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRGF5cyBPcGVuCiAgICAgICAgICAgIC0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLQogICAgICAgICAgICAgMTAxIHwgQ3JpdGljYWwgfCBJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoICAgICAgICAgICAgICAgICB8ICAgICAgICAgIDYKICAgICAgICAgICAgICA5NCB8IENvc21ldGljIHwgU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpICAgICAgICAgfCAgICAgICAgIDE0CiAgICAgICAgICAgICAgNzkgfCBNaW5vciAgICB8IFN5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzIHwgICAgICAgICA0NwogICAgICAgICAgICAnJycKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIFNFUCA9IFN1cHByZXNzKCd8JykKICAgICAgICAjIHVzZSBTa2lwVG8gdG8gc2ltcGx5IG1hdGNoIGV2ZXJ5dGhpbmcgdXAgdW50aWwgdGhlIG5leHQgU0VQCiAgICAgICAgIyAtIGlnbm9yZSBxdW90ZWQgc3RyaW5ncywgc28gdGhhdCBhICd8JyBjaGFyYWN0ZXIgaW5zaWRlIGEgcXVvdGVkIHN0cmluZyBkb2VzIG5vdCBtYXRjaAogICAgICAgICMgLSBwYXJzZSBhY3Rpb24gd2lsbCBjYWxsIHRva2VuLnN0cmlwKCkgZm9yIGVhY2ggbWF0Y2hlZCB0b2tlbiwgaS5lLiwgdGhlIGRlc2NyaXB0aW9uIGJvZHkKICAgICAgICBzdHJpbmdfZGF0YSA9IFNraXBUbyhTRVAsIGlnbm9yZT1xdW90ZWRTdHJpbmcpCiAgICAgICAgc3RyaW5nX2RhdGEuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnN0cmlwKSkKICAgICAgICB0aWNrZXRfZXhwciA9IChpbnRlZ2VyKCJpc3N1ZV9udW0iKSArIFNFUCAKICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nX2RhdGEoInNldiIpICsgU0VQIAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgiZGVzYyIpICsgU0VQIAogICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyKCJkYXlzX29wZW4iKSkKICAgICAgICAKICAgICAgICBmb3IgdGt0IGluIHRpY2tldF9leHByLnNlYXJjaFN0cmluZyhyZXBvcnQpOgogICAgICAgICAgICBwcmludCB0a3QuZHVtcCgpCiAgICBwcmludHM6OgogICAgICAgIFsnMTAxJywgJ0NyaXRpY2FsJywgJ0ludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2gnLCAnNiddCiAgICAgICAgLSBkYXlzX29wZW46IDYKICAgICAgICAtIGRlc2M6IEludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2gKICAgICAgICAtIGlzc3VlX251bTogMTAxCiAgICAgICAgLSBzZXY6IENyaXRpY2FsCiAgICAgICAgWyc5NCcsICdDb3NtZXRpYycsICJTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJyki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biB0aGUgZXhwcmVzc2lvbiBhcyBpdHMga2V5LgogICAgVXNlZnVsIGZvciB0YWJ1bGFyIHJlcG9ydCBzY3JhcGluZyB3aGVuIHRoZSBmaXJzdCBjb2x1bW4gY2FuIGJlIHVzZWQgYXMgYSBpdGVtIGtleS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IGxpZ2h0IGJsdWUgdGV4dHVyZTogYnVybGFwIgogICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKICAgICAgICAKICAgICAgICAjIHByaW50IGF0dHJpYnV0ZXMgYXMgcGxhaW4gZ3JvdXBzCiAgICAgICAgcHJpbnQoT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkuZHVtcCgpKQogICAgICAgIAogICAgICAgICMgaW5zdGVhZCBvZiBPbmVPck1vcmUoZXhwciksIHBhcnNlIHVzaW5nIERpY3QoT25lT3JNb3JlKEdyb3VwKGV4cHIpKSkgLSBEaWN0IHdpbGwgYXV0by1hc3NpZ24gbmFtZXMKICAgICAgICByZXN1bHQgPSBEaWN0KE9uZU9yTW9yZShHcm91cChhdHRyX2V4cHIpKSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIAogICAgICAgICMgYWNjZXNzIG5hbWVkIGZpZWxkcyBhcyBkaWN0IGVudHJpZXMsIG9yIG91dHB1dCBhcyBkaWN0CiAg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AmQBZAKECH0CfAFkA2sIcjB0AXQCgwGgA2QEZAWEAKEBfQFuCHwBoAShAH0BfAGgBWQGoQEBAHwBagZ8AmQHZAiNAgEAfAGIABcAoAVkCXQHiAGDARcAZAoXAKEBUwApC2E6AwAACiAgICBIZWxwZXIgdG8gZGVmaW5lIGEgY291bnRlZCBsaXN0IG9mIGV4cHJlc3Npb25zLgogICAgVGhpcyBoZWxwZXIgZGVmaW5lcyBhIHBhdHRlcm4gb2YgdGhlIGZvcm06OgogICAgICAgIGludGVnZXIgZXhwciBleHByIGV4cHIuLi4KICAgIHdoZXJlIHRoZSBsZWFkaW5nIGludGVnZXIgdGVsbHMgaG93IG1hbnkgZXhwciBleHByZXNzaW9ucyBmb2xsb3cuCiAgICBUaGUgbWF0Y2hlZCB0b2tlbnMgcmV0dXJucyB0aGUgYXJyYXkgb2YgZXhwciB0b2tlbnMgYXMgYSBsaXN0IC0gdGhlIGxlYWRpbmcgY291bnQgdG9rZW4gaXMgc3VwcHJlc3NlZC4KICAgIAogICAgSWYgQ3tpbnRFeHByfSBpcyBzcGVjaWZpZWQsIGl0IHNob3VsZCBiZSBhIHB5cGFyc2luZyBleHByZXNzaW9uIHRoYXQgcHJvZHVjZXMgYW4gaW50ZWdlciB2YWx1ZS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBjb3VudGVkQXJyYXkoV29yZChhbHBoYXMpKS5wYXJzZVN0cmluZygnMiBhYiBjZCBlZicpICAjIC0+IFsnYWInLCAnY2QnXQoKICAgICAgICAjIGluIHRoaXMgcGFyc2VyLCB0aGUgbGVhZGluZyBpbnRlZ2VyIHZhbHVlIGlzIGdpdmVuIGluIGJpbmFyeSwKICAgICAgICAjICcxMCcgaW5kaWNhdGluZyB0aGF0IDIgdmFsdWVzIGFyZSBpbiB0aGUgYXJyYXkKICAgICAgICBiaW5hcnlDb25zdGFudCA9IFdvcmQoJzAxJykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHQ6IGludCh0WzBdLCAyKSkKICAgICAgICBjb3VudGVkQXJyYXkoV29yZChhbHBoYXMpLCBpbnRFeHByPWJpbmFyeUNvbnN0YW50KS5wYXJzZVN0cmluZygnMTAgYWIgY2Qg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ZXkgcGF0dGVybiBjYW4gaW5jbHVkZSBkZWxpbWl0aW5nIG1hcmtlcnMgb3IgcHVuY3R1YXRpb24sCiAgICBhcyBsb25nIGFzIHRoZXkgYXJlIHN1cHByZXNzZWQsIHRoZXJlYnkgbGVhdmluZyB0aGUgc2lnbmlmaWNhbnQga2V5IHRleHQuICBUaGUgdmFsdWUKICAgIHBhdHRlcm4gY2FuIGluY2x1ZGUgbmFtZWQgcmVzdWx0cywgc28gdGhhdCB0aGUgQ3tEaWN0fSByZXN1bHRzIGNhbiBpbmNsdWRlIG5hbWVkIHRva2VuCiAgICBmaWVsZHMuCgogICAgRXhhbXBsZTo6CiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IGxpZ2h0IGJsdWUgdGV4dHVyZTogYnVybGFwIgogICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKICAgICAgICBwcmludChPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5kdW1wKCkpCiAgICAgICAgCiAgICAgICAgYXR0cl9sYWJlbCA9IGxhYmVsCiAgICAgICAgYXR0cl92YWx1ZSA9IFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKQoKICAgICAgICAjIHNpbWlsYXIgdG8gRGljdCwgYnV0IHNpbXBsZXIgY2FsbCBmb3JtYXQKICAgICAgICByZXN1bHQgPSBkaWN0T2YoYXR0cl9sYWJlbCwgYXR0cl92YWx1ZSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIHByaW50KHJlc3VsdFsnc2hhcGUnXSkKICAgICAgICBwcmludChyZXN1bHQuc2hhcGUpICAjIG9iamVjdCBhdHRyaWJ1dGUgYWNjZXNzIHdvcmtzIHRvbwogICAgICAgIHBy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dCBvcGVuaW5nIGFuZCBjbG9zaW5nIHRhZyBleHByZXNzaW9ucyBmb3IgSFRNTCwgZ2l2ZW4gYSB0YWcgbmFtZS4gTWF0Y2hlcwogICAgdGFncyBpbiBlaXRoZXIgdXBwZXIgb3IgbG93ZXIgY2FzZSwgYXR0cmlidXRlcyB3aXRoIG5hbWVzcGFjZXMgYW5kIHdpdGggcXVvdGVkIG9yIHVucXVvdGVkIHZhbHVlcy4KCiAgICBFeGFtcGxlOjoKICAgICAgICB0ZXh0ID0gJzx0ZD5Nb3JlIGluZm8gYXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9weXBhcnNpbmcud2lraXNwYWNlcy5jb20iPnB5cGFyc2luZzwvYT4gd2lraSBwYWdlPC90ZD4nCiAgICAgICAgIyBtYWtlSFRNTFRhZ3MgcmV0dXJucyBweXBhcnNpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nIHRhZ3MgYXMgYSAyLXR1cGxlCiAgICAgICAgYSxhX2VuZCA9IG1ha2VIVE1MVGFncygiQSIpCiAgICAgICAgbGlua19leHByID0gYSArIFNraXBUbyhhX2VuZCkoImxpbmtfdGV4dCIpICsgYV9lbmQKICAgICAgICAKICAgICAgICBmb3IgbGluayBpbiBsaW5rX2V4cHIuc2VhcmNoU3RyaW5nKHRleHQpOgogICAgICAgICAgICAjIGF0dHJpYnV0ZXMgaW4gdGhlIDxBPiB0YWcgKGxpa2UgImhyZWYiIHNob3duIGhlcmUpIGFyZSBhbHNvIGFjY2Vzc2libGUgYXMgbmFtZWQgcmVzdWx0cwogICAgICAgICAgICBwcmludChsaW5rLmxpbmtfdGV4dCwgJy0+JywgbGluay5ocmVmKQogICAgcHJpbnRzOjoKICAgICAgICBweXBhcnNpbmcgLT4gaHR0cDovL3B5cGFyc2luZy53aWtpc3BhY2VzLmNvbQogICAgRqkBcoYDAACpAXJ/AwAAcnkAAAByeQAAAHJ6AAAAck0AAAAoEwAAcwIAAAAAEWMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAABzCgAAAHQAfABkAYMCUwApAnq6CiAgICBIZWxwZXIgdG8gY29uc3RydWN0IG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFnIGV4cHJlc3Npb25zIGZvciBYTUwsIGdpdmVuIGEgdGFnIG5hbWUuIE1hdGNoZXMKICAgIHRhZ3Mgb25seSBpbiB0aGUgZ2l2ZW4gdXBwZXIvbG93ZXIgY2FzZS4KCiAgICBFeGFtcGxlOiBzaW1pbGFyIHRvIEx7bWFrZUhUTUxUYWdzfQogICAgVHKHAwAAcogDAAByeQAAAHJ5AAAAcnoAAAByTgAAADsTAABzAgAAAAAHYwAAAAAAAAAAAAAAAAMAAAADAAAADwAAAHM4AAAAfAByEnwAZAFkAYUCGQCJAG4IfAGgAKEAiQBkAmQDhACIAEQAgwGJAIcAZgFkBGQFhAh9AnwCUwApBmE8CAAACiAgICBIZWxwZXIgdG8gY3JlYXRlIGEgdmFsaWRhdGluZyBwYXJzZSBhY3Rpb24gdG8gYmUgdXNlZCB3aXRoIHN0YXJ0IHRhZ3MgY3JlYXRlZAogICAgd2l0aCBDe0x7bWFrZVhNTFRhZ3N9fSBvciBDe0x7bWFrZUhUTUxUYWdzfX0uIFVzZSBDe3dpdGhBdHRyaWJ1dGV9IHRvIHF1YWxpZnkgYSBzdGFydGluZyB0YWcKICAgIHdpdGggYSByZXF1aXJlZCBhdHRyaWJ1dGUgdmFsdWUsIHRvIGF2b2lkIGZhbHNlIG1hdGNoZXMgb24gY29tbW9uIHRhZ3Mgc3VjaCBhcwogICAgQ3s8VEQ+fSBvciBDezxESVY+fS4KCiAgICBDYWxsIEN7d2l0aEF0dHJpYnV0ZX0gd2l0aCBhIHNlcmllcyBvZiBhdHRyaWJ1dGUgbmFtZXMgYW5kIHZhbHVlcy4gU3BlY2lmeSB0aGUgbGlzdAogICAgb2YgZmlsdGVyIGF0dHJpYnV0ZXMgbmFtZXMgYW5kIHZhbHVlcyBhczoKICAgICAtIGtleXdvcmQgYXJndW1lbnRzLCBhcyBpbiBDeyhhbGlnbj0icmlnaHQiKX0sIG9yCiAgICAgLSBhcyBhbiBleHBsaWNpdCBkaWN0IHdpdGggQ3sqKn0gb3BlcmF0b3IsIHdoZW4gYW4gYXR0cmlidXRlIG5hbWUgaXMgYWxzbyBhIFB5dGhvbgogICAgICAgICAgcmVzZXJ2ZWQgd29yZCwgYXMgaW4gQ3sqKnsiY2xhc3MiOiJDdXN0b21lciIsICJhbGlnbiI6InJpZ2h0In19CiAgICAgLSBhIGxpc3Qgb2YgbmFtZS12YWx1ZSB0dXBsZXMsIGFzIGluICggKCJuczE6Y2xhc3MiLCAiQ3VzdG9tZXIiKSwgKCJuczI6YWxpZ24iLCJyaWdodCIpICkKICAgIEZvciBhdHRyaWJ1dGUgbmFtZXMgd2l0aCBhIG5hbWVzcGFjZSBwcmVmaXgsIHlvdSBtdXN0IHVzZSB0aGUgc2Vjb25kIGZvcm0uICBBdHRyaWJ1dGUKICAgIG5hbWVzIGFyZSBtYXRjaGVkIGluc2Vuc2l0aXZlIHRvIHVwcGVyL2xvd2VyIGNhc2UuCiAgICAgICAKICAgIElmIGp1c3QgdGVzdGluZyBmb3IgQ3tjbGFzc30gKHdpdGggb3Igd2l0aG91dCBhIG5hbWVzcGFjZSksIHVzZSBDe0x7d2l0aENsYXNzfX0uCgogICAgVG8gdmVyaWZ5IHRoYXQgdGhlIGF0dHJpYnV0ZSBleGlzdHMsIGJ1dCB3aXRob3V0IHNwZWNpZnlpbmcgYSB2YWx1ZSwgcGFzcwogICAgQ3t3aXRoQXR0cmlidXRlLkFOWV9WQUxVRX0gYXMgdGhlIHZhbHVlLgoKICAgIEV4YW1wbGU6OgogICAgICAgIGh0bWwgPSAnJycKICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgU29tZSB0ZXh0CiAgICAgICAgICAgIDxkaXYgdHlwZT0iZ3JpZCI+MSA0IDAgMSAwPC9kaXY+CiAgICAgICAgICAgIDxkaXYgdHlwZT0iZ3JhcGgiPjEsMyAyLDMgMSwxPC9kaXY+CiAgICAgICAgICAgIDxkaXY+dGhpcyBoYXMgbm8gdHlwZTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICcnJwogICAgICAgIGRpdixkaXZfZW5kID0gbWFrZUhUTUxUYWdzKCJkaXYiKQoKICAgICAgICAjIG9ubHkgbWF0Y2ggZGl2IHRhZyBoYXZpbmcgYSB0eXBlIGF0dHJpYnV0ZSB3aXRoIHZhbHVlICJncmlkIgogICAgICAgIGRpdl9ncmlkID0gZGl2KCkuc2V0UGFyc2VBY3Rpb24od2l0aEF0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DIMCkAFziHQMfAiDAX0IdAd8CGoNfA8XAIMBdAh8CHwPFwCDARcAfRBunHwJZAdrApABcvx8CGQCawmQAXLedAd8BXwIFwB8DxcAgwF0CHwFdAl8CHwPFwCDARcAgwEXAH0Qbhx0B3wFfA8XAIMBdAh8BXQJfA+DARcAgwEXAH0QbkR8CWQEawKQAnI4dAd8BXwNFwB8DxcAfA4XAHwPFwCDAXQIfAV8DRcAfA8XAHwOFwB8DxcAgwEXAH0Qbgh0A2QKgwGCAW4IdANkC4MBggF8C5ACcnZ0C3wLdA50D2YCgwKQAnJsfBBqEHwLjgABAG4KfBCgEHwLoQEBAHwPfBCgBHwMoQF8BUIASwB9D3wPfQVxHnwEfAVLAH0EfARTACkMYUQKAAAKICAgIEhlbHBlciBtZXRob2QgZm9yIGNvbnN0cnVjdGluZyBncmFtbWFycyBvZiBleHByZXNzaW9ucyBtYWRlIHVwIG9mCiAgICBvcGVyYXRvcnMgd29ya2luZyBpbiBhIHByZWNlZGVuY2UgaGllcmFyY2h5LiAgT3BlcmF0b3JzIG1heSBiZSB1bmFyeSBvcgogICAgYmluYXJ5LCBsZWZ0LSBvciByaWdodC1hc3NvY2lhdGl2ZS4gIFBhcnNlIGFjdGlvbnMgY2FuIGFsc28gYmUgYXR0YWNoZWQKICAgIHRvIG9wZXJhdG9yIGV4cHJlc3Npb25zLiBUaGUgZ2VuZXJhdGVkIHBhcnNlciB3aWxsIGFsc28gcmVjb2duaXplIHRoZSB1c2UgCiAgICBvZiBwYXJlbnRoZXNlcyB0byBvdmVycmlkZSBvcGVyYXRvciBwcmVjZWRlbmNlcyAoc2VlIGV4YW1wbGUgYmVsb3cpLgogICAgCiAgICBOb3RlOiBpZiB5b3UgZGVmaW5lIGEgZGVlcCBvcGVyYXRvciBsaXN0LCB5b3UgbWF5IHNlZSBwZXJmb3JtYW5jZSBpc3N1ZXMKICAgIHdoZW4gdXNpbmcgaW5maXhOb3RhdGlvbi4gU2VlIEx7UGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0fSBmb3IgYQogICAgbWVjaGFuaXNtIHRvIHBvdGVudGlhbGx5IGltcHJvdmUgeW91ciBwYXJzZXIgcGVyZm9ybWFuY2UuCgogICAgUGFyYW1ldGVyczoKICAgICAtIGJhc2VFeHByIC0gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIG1vc3QgYmFzaWMgZWxlbWVudCBmb3IgdGhlIG5lc3RlZAogICAgIC0gb3BMaXN0IC0gbGlzdCBvZiB0dXBsZXMsIG9uZSBmb3IgZWFjaCBvcGVyYXRvciBwcmVjZWRlbmNlIGxldmVsIGluIHRoZQogICAgICBleHByZXNzaW9uIGdyYW1tYXI7IGVhY2ggdHVwbGUgaXMgb2YgdGhlIGZvcm0KICAgICAgKG9wRXhwciwgbnVtVGVybXMsIHJpZ2h0TGVmdEFzc29jLCBwYXJzZUFjdGlvbiksIHdoZXJlOgogICAgICAgLSBvcEV4cHIgaXMgdGhlIHB5cGFyc2luZyBleHByZXNzaW9uIGZvciB0aGUgb3BlcmF0b3I7CiAgICAgICAgICBtYXkgYWxzbyBiZSBhIHN0cmluZywgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBMaXRlcmFsOwogICAgICAgICAgaWYgbnVtVGVybXMgaXMgMywgb3BFeHByIGlzIGEgdHVwbGUgb2YgdHdvIGV4cHJlc3Npb25zLCBmb3IgdGhlCiAgICAgICAgICB0d28gb3BlcmF0b3JzIHNlcGFyYXRpbmcgdGhlIDMgdGVybXMKICAgICAgIC0gbnVtVGVybXMgaXMgdGhlIG51bWJlciBvZiB0ZXJtcyBmb3IgdGhpcyBvcGVyYXRvciAobXVzdAogICAgICAgICAgYmUgMSwgMiwgb3IgMykKICAgICAgIC0gcmlnaHRMZWZ0QXNzb2MgaXMgdGhlIGluZGljYXRvciB3aGV0aGVyIHRoZSBvcGVyYXRvciBpcwogICAgICAgICAgcmlnaHQgb3IgbGVmdCBhc3NvY2lhdGl2ZSwgdXNpbmcgdGhlIHB5cGFyc2luZy1kZWZpbmVkCiAgICAgICAgICBjb25zdGFudHMgQ3tvcEFzc29jLlJJR0hUfSBhbmQgQ3tvcEFzc29jLkxFRlR9LgogICAgICAgLSBwYXJzZUFjdGlvbiBpcyB0aGUgcGFyc2UgYWN0aW9uIHRvIGJlIGFzc29jaWF0ZWQgd2l0aAogICAgICAgICAgZXhwcmVzc2lvbnMgbWF0Y2hpbmcgdGhpcyBvcGVyYXRvciBleHByZXNzaW9uICh0aGUKICAgICAgICAgIHBhcnNlIGFjdGlvbiB0dXBsZSBtZW1iZXIgbWF5IGJlIG9taXR0ZWQpOyBpZiB0aGUgcGFyc2UgYWN0aW9uCiAgICAgICAgICBpcyBwYXNzZWQgYSB0dXBsZSBvciBsaXN0IG9mIGZ1bmN0aW9ucywgdGhpcyBpcyBlcXVpdmFsZW50IHRvCiAgICAgICAgICBjYWxsaW5nIEN7c2V0UGFyc2VBY3Rpb24oKmZuKX0gKEx7UGFyc2VyRWxlbWVudC5zZXRQYXJzZUFjdGlvbn0pCiAgICAgLSBscGFyIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgbGVmdC1wYXJlbnRoZXNlcyAoZGVmYXVsdD1De1N1cHByZXNzKCcoJyl9KQogICAgIC0gcnBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIHJpZ2h0LXBhcmVudGhlc2VzIChkZWZhdWx0PUN7U3VwcHJlc3MoJyknKX0pCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyBzaW1wbGUgZXhhbXBsZSBvZiBmb3VyLWZ1bmN0aW9uIGFyaXRobWV0aWMgd2l0aCBpbnRzIGFuZCB2YXJpYWJsZSBuYW1lcwogICAgICAgIGludGVnZXIgPSBweXBhcnNpbmdfY29tbW9uLnNpZ25lZF9pbnRlZ2VyCiAgICAgICAgdmFybmFtZSA9IHB5cGFyc2luZ19jb21tb24uaWRlbnRpZmllciAKICAgICAgICAKICAgICAgICBhcml0aF9leHByID0gaW5maXhOb3RhdGlvbihpbnRlZ2VyIHwgdmFybmFtZSwKICAgICAgICAgICAgWwogICAgICAgICAgICAoJy0nLCAxLCBvcEFzc29jLlJJR0hUKSwKICAgICAgICAgICAgKG9uZU9mKCcqIC8nKSwgMiwgb3BBc3NvYy5MRUZUKSwKICAgICAgICAgICAgKG9uZU9mKCcrIC0nKSwgMiwgb3BBc3NvYy5MRUZUKSwKICAgICAgICAgICAgXSkKICAgICAgICAKICAgICAgICBhcml0aF9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICA1KzMqNgogICAgICAgICAgICAo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bHQ9Q3siKSJ9KTsgY2FuIGFsc28gYmUgYSBweXBhcnNpbmcgZXhwcmVzc2lvbgogICAgIC0gY29udGVudCAtIGV4cHJlc3Npb24gZm9yIGl0ZW1zIHdpdGhpbiB0aGUgbmVzdGVkIGxpc3RzIChkZWZhdWx0PUN7Tm9uZX0pCiAgICAgLSBpZ25vcmVFeHByIC0gZXhwcmVzc2lvbiBmb3IgaWdub3Jpbmcgb3BlbmluZyBhbmQgY2xvc2luZyBkZWxpbWl0ZXJzIChkZWZhdWx0PUN7cXVvdGVkU3RyaW5nfSkKCiAgICBJZiBhbiBleHByZXNzaW9uIGlzIG5vdCBwcm92aWRlZCBmb3IgdGhlIGNvbnRlbnQgYXJndW1lbnQsIHRoZSBuZXN0ZWQKICAgIGV4cHJlc3Npb24gd2lsbCBjYXB0dXJlIGFsbCB3aGl0ZXNwYWNlLWRlbGltaXRlZCBjb250ZW50IGJldHdlZW4gZGVsaW1pdGVycwogICAgYXMgYSBsaXN0IG9mIHNlcGFyYXRlIHZhbHVlcy4KCiAgICBVc2UgdGhlIEN7aWdub3JlRXhwcn0gYXJndW1lbnQgdG8gZGVmaW5lIGV4cHJlc3Npb25zIHRoYXQgbWF5IGNvbnRhaW4KICAgIG9wZW5pbmcgb3IgY2xvc2luZyBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIG9wZW5pbmcKICAgIG9yIGNsb3NpbmcgY2hhcmFjdGVycyBmb3IgbmVzdGluZywgc3VjaCBhcyBxdW90ZWRTdHJpbmcgb3IgYSBjb21tZW50CiAgICBleHByZXNzaW9uLiAgU3BlY2lmeSBtdWx0aXBsZSBleHByZXNzaW9ucyB1c2luZyBhbiBDe0x7T3J9fSBvciBDe0x7TWF0Y2hGaXJzdH19LgogICAgVGhlIGRlZmF1bHQgaXMgTHtxdW90ZWRTdHJpbmd9LCBidXQgaWYgbm8gZXhwcmVzc2lvbnMgYXJlIHRvIGJlIGlnbm9yZWQsCiAgICB0aGVuIHBhc3MgQ3tOb25lfSBmb3IgdGhpcyBhcmd1bWVudC4KCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhX3R5cGUgPSBvbmVPZigidm9pZCBpbnQgc2hvcnQgbG9uZyBjaGFyIGZsb2F0IGRvdWJsZSIpCiAgICAgICAgZGVjbF9kYXRhX3R5cGUgPSBDb21iaW5lKGRhdGFfdHlwZSArIE9wdGlvbmFsKFdvcmQoJyonKSkpCiAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcysnXycsIGFscGhhbnVtcysnXycpCiAgICAgICAgbnVtYmVyID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIKICAgICAgICBhcmcgPSBHcm91cChkZWNsX2RhdGFfdHlwZSArIGlkZW50KQogICAgICAgIExQQVIsUlBBUiA9IG1hcChTdXBwcmVzcywgIigpIikKCiAgICAgICAgY29kZV9ib2R5ID0gbmVzdGVkRXhwcigneycsICd9JywgaWdub3JlRXhwcj0ocXVvdGVkU3RyaW5nIHwgY1N0eWxlQ29tbWVudCkpCgogICAgICAgIGNfZnVuY3Rpb24gPSAoZGVjbF9kYXRhX3R5cGUoInR5cGUiKSAKICAgICAgICAgICAgICAgICAgICAgICsgaWRlbnQoIm5hbWUiKQogICAgICAgICAgICAgICAgICAgICAgKyBMUEFSICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChhcmcpLCBbXSkoImFyZ3MiKSArIFJQQVIgCiAgICAgICAgICAgICAgICAgICAgICArIGNvZGVfYm9keSgiYm9keSIpKQogICAgICAgIGNfZnVuY3Rpb24uaWdub3JlKGNTdHlsZUNvbW1lbnQpCiAgICAgICAgCiAgICAgICAgc291cmNlX2NvZGUgPSAnJycKICAgICAgICAgICAgaW50IGlzX29kZChpbnQgeCkgeyAKICAgICAgICAgICAgICAgIHJldHVybiAoeCUyKTsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICBpbnQgZGVjX3RvX2hleChjaGFyIGhjaGFyKSB7IAogICAgICAgICAgICAgICAgaWYgKGhjaGFyID49ICcwJyAmJiBoY2hhciA8PSAnOScpIHsgCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvcmQoaGNoYXIpLW9yZCgnMCcpKTsgCiAgICAgICAgICAgICAgICB9IGVsc2UgeyAKICAg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ICAgICAgICAgICAgc2hvdWxkIHNoYXJlIGEgY29tbW9uIGluZGVudFN0YWNrKQogICAgIC0gaW5kZW50IC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYmxvY2sgbXVzdCBiZSBpbmRlbnRlZCBiZXlvbmQgdGhlCiAgICAgICAgICAgIHRoZSBjdXJyZW50IGxldmVsOyBzZXQgdG8gRmFsc2UgZm9yIGJsb2NrIG9mIGxlZnQtbW9zdCBzdGF0ZW1lbnRzCiAgICAgICAgICAgIChkZWZhdWx0PUN7VHJ1ZX0pCgogICAgQSB2YWxpZCBibG9jayBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIEN7YmxvY2tTdGF0ZW1lbnR9LgoKICAgIEV4YW1wbGU6OgogICAgICAgIGRhdGEgPSAnJycKICAgICAgICBkZWYgQSh6KToKICAgICAgICAgIEExCiAgICAgICAgICBCID0gMTAwCiAgICAgICAgICBHID0gQTIKICAgICAgICAgIEEyCiAgICAgICAgICBBMwogICAgICAgIEIKICAgICAgICBkZWYgQkIoYSxiLGMpOgogICAgICAgICAgQkIxCiAgICAgICAgICBkZWYgQkJBKCk6CiAgICAgICAgICAgIGJiYTEKICAgICAgICAgICAgYmJhMgogICAgICAgICAgICBiYmEzCiAgICAgICAgQwogICAgICAgIEQKICAgICAgICBkZWYgc3BhbSh4LHkpOgogICAgICAgICAgICAgZGVmIGVnZ3Moeik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICcnJwoKCiAgICAgICAgaW5kZW50U3RhY2sgPSBbMV0KICAgICAgICBzdG10ID0gRm9yd2FyZCgpCgogICAgICAgIGlkZW50aWZpZXIgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKQogICAgICAgIGZ1bmNEZWNsID0gKCJkZWYiICsgaWRlbnRpZmllciArIEdyb3VwKCAiKCIgKyBPcHRpb25hbCggZGVsaW1pdGVkTGlzdChpZGVudGlmaWVyKSApICsgIikiICkgKyAiOiIpCiAgICAgICAgZnVuY19ib2R5ID0gaW5kZW50ZWRCbG9jayhzdG10LCBpbmRlbnRTdGFjaykKICAgICAgICBmdW5jRGVmID0gR3JvdXAoIGZ1bmNEZWNsICsgZnVuY19ib2R5ICkKCiAgICAgICAgcnZhbHVlID0gRm9yd2FyZCgpCiAgICAgICAgZnVuY0NhbGwgPSBHcm91cChpZGVudGlmaWVyICsgIigiICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChydmFsdWUpKSArICIpIikKICAgICAgICBydmFsdWUgPDwgKGZ1bmNDYWxsIHwgaWRlbnRpZmllciB8IFdvcmQobnVtcykpCiAgICAgICAgYXNzaWdubWVudCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiPSIgKyBydmFsdWUpCiAgICAgICAgc3RtdCA8PCAoIGZ1bmNEZWYgfCBhc3NpZ25tZW50IHwgaWRlbnRpZmllciApCgogICAgICAgIG1vZHVsZV9ib2R5ID0gT25lT3JNb3JlKHN0bXQpCgogICAgICAgIHBhcnNlVHJlZSA9IG1vZHVsZV9ib2R5LnBhcnNlU3RyaW5nKGRhdGEpCiAgICAgICAgcGFyc2VUcmVlLnBwcmludCgpCiAgICBwcmludHM6OgogICAgICAgIFtbJ2RlZicsCiAgICAgICAgICAnQScsCiAgICAgICAgICBbJygnLCAneicsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydBMSddLCBbWydCJywgJz0nLCAnMTAwJ11dLCBbWydHJywgJz0nLCAnQTInXV0sIFsnQTInXSwgWydBMyddXV0sCiAgICAgICAgICdCJywKICAgICAgICAgWydkZWYnLAogICAgICAgICAgJ0JCJywKICAgICAgICAgIFsnKCcsICdhJywgJ2InLCAnYycsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydCQjEnXSwgW1snZGVmJywgJ0JCQScsIFsnKCcsICcpJ10sICc6JywgW1snYmJhMSddLCBbJ2JiYTInXSwgWydiYmEzJ11dXV1dXSwKICAgICAgICAgJ0MnLAogICAgICAgICAnRCcsCiAgICAgICAgIFsnZGVmJywKICAgICAgICAgICdzcGFtJywKICAgICAgICAgIFsnKCcsICd4JywgJ3knLCAnKSddLAogICAgICAgICAg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CiAgICAgLSBJU084NjAxIEx7ZGF0ZXM8aXNvODYwMV9kYXRlPn0gYW5kIEx7ZGF0ZXRpbWU8aXNvODYwMV9kYXRldGltZT59CiAgICAgLSBMe1VVSUQ8dXVpZD59CiAgICAgLSBMe2NvbW1hLXNlcGFyYXRlZCBsaXN0PGNvbW1hX3NlcGFyYXRlZF9saXN0Pn0KICAgIFBhcnNlIGFjdGlvbnM6CiAgICAgLSBDe0x7Y29udmVydFRvSW50ZWdlcn19CiAgICAgLSBDe0x7Y29udmVydFRvRmxvYXR9fQogICAgIC0gQ3tMe2NvbnZlcnRUb0RhdGV9fQogICAgIC0gQ3tMe2NvbnZlcnRUb0RhdGV0aW1lfX0KICAgICAtIEN7THtzdHJpcEhUTUxUYWdzfX0KICAgICAtIEN7THt1cGNhc2VUb2tlbnN9fQogICAgIC0gQ3tMe2Rvd25jYXNlVG9rZW5zfX0KCiAgICBFeGFtcGxlOjoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLm51bWJlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgdHlwZQogICAgICAgICAgICAxMDAKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICArMTAwCiAgICAgICAgICAgIDMuMTQxNTkKICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uZm51bWJlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyBmbG9hdAogICAgICAgICAgICAxMDAKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICArMTAwCiAgICAgICAgICAgIDMuMTQxNTkKICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uaGV4X2ludGVnZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgaGV4IG51bWJlcnMKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIEZGCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5mcmFjdGlvbi5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAgICAgMS8yCiAgICAgICAgICAgIC0zLzQKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLm1peGVkX2ludGVnZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgbWl4ZWQgZnJhY3Rpb25zCiAgICAgICAgICAgIDEKICAgICAgICAgICAgMS8yCiAgICAgICAgICAgIC0zLzQKICAgICAgICAgICAgMS0zLzQKICAgICAgICAgICAgJycnKQoKICAgICAgICBpbXBvcnQgdXVpZAogICAgICAgIHB5cGFyc2luZ19jb21tb24udXVpZC5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcCh1dWlkLlVVSUQpKQogICAgICAgIHB5cGFyc2luZ19jb21tb24udXVpZC5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyB1dWlkCiAgICAgICAgICAgIDEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OAogICAgICAgICAgICAnJycpCiAgICBwcmludHM6OgogICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAzLjE0MTU5CiAgICAgICAgWzMuMTQxNTldCgogICAgICAgIDYuMDJlMjMKICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgIDFlLTEyCiAgICAgICAgWzFlLTEyXQoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgMTAwCiAgICAgICAgWzEwMC4wXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDAuMF0KCiAgICAgICAgKzEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoKICAgICAgICA2LjAyZTIzCiAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAxZS0xMgogICAgICAgIFsxZS0xMl0KCiAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgIDEwMAogICAgICAgIFsyNTZdCgogICAgICAgIEZGCiAgICAgICAgWzI1NV0KCiAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAxLzIKICAgICAgICBbMC41XQoKICAgICAgICAtMy80CiAgICAgICAgWy0wLjc1XQoKICAgICAgICAjIG1peGVkIGZyYWN0aW9ucwogICAgICAgIDEKICAgICAgICBbMV0KCiAgICAgICAgMS8yCiAgICAgICAgWzAuNV0KCiAgICAgICAgLTMvNAogICAgICAgIFstMC43NV0KCiAgICAgICAgMS0zLzQKICAgICAgICBbMS43NV0KCiAgICAgICAgIyB1dWlkCiAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgW1VVSUQoJzEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OCcpXQogICAg2gdpbnRlZ2VyegtoZXggaW50ZWdlcnJjAwAAeghbKy1dP1xkK3oOc2lnbmVkIGludGVnZXJyeQMAANoIZnJhY3Rpb25jAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcxAAAAB8AGQBGQB8AGQCGQAbAFMAKQNOcgEAAABydAAAAHJ5AAAAcncAAAByeQAAAHJ5AAAAcnoAAAByewAAALQVAAByfAAAAHoZcHlwYXJzaW5nX2NvbW1vbi48bGFtYmRhPnLWAgAAeiJmcmFjdGlvbiBvciBtaXhlZCBpbnRlZ2VyLWZyYWN0aW9ueg1bKy1dP1xkK1wuXGQqegtyZWFsIG51bWJlcnorWystXT9cZCsoW2VFXVsrLV0/XGQrfFwuXGQqKFtlRV1bKy1dP1xkKyk/KXok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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 3
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
ordered_set.cpython-38.pyc
16.11 KB
lrw-r--r--
2023-11-13 21:45:15
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-38.pyc
196.99 KB
lrw-r--r--
2023-11-13 21:45:15
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.pyc
236 B
lrw-r--r--
2023-11-13 21:45:15
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).