REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 196.91 KB
Close
//proc/self/root/usr/lib/python3.8/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-38.pyc
Text
Base64
VQ0NCgAAAADiUWFid4oDAOMAAAAAAAAAAAAAAAAAAAAAaQAAAEAAAABz1gsAAGQAWgBkAVoBZAJaAmQDWgNkBGQFbARaBGQEZAZsBW0GWgcBAGQEZAVsCFoIZARkBWwJWglkBGQFbApaCmQEZAVsC1oLZARkBWwMWgxkBGQFbA1aDWQEZAVsDloOZARkBWwPWg9kBGQFbBBaEGQEZAdsEW0RWhEBAHoQZARkCGwSbRNaEwEAVwBuIAQAZRRrCnKoAQABAAEAZARkCGwVbRNaEwEAWQBuAlgAehxkBGQJbBZtF1oXAQBkBGQKbBZtGFoYAQBXAG4sBABlFGsKcvIBAAEAAQBkBGQJbA1tF1oXAQBkBGQKbA1tGFoYAQBZAG4CWAB6EGQEZAtsDW0ZWhoBAFcAbkIEAGUUawqQAXJGAQABAAEAehBkBGQLbBttGVoaAQBXAG4aBABlFGsKkAFyQAEAAQABAGQFWhpZAG4CWABZAG4CWABkDGQNZA5kD2QQZBFkEmQTZBRkFWQWZBdkGGQZZBpkG2QcZB1kHmQfZCBkIWQiZCNkJGQlZCZkJ2QoZClkKmQrZCxkLWQuZC9kMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWQ6ZDtkPGQ9ZD5kP2RAZEFkQmRDZERkRWRGZEdkSGRJZEpkS2RMZE1kTmRPZFBkUWRSZFNkVGRVZFZkV2RYZFlkWmRbZFxkXWReZF9kYGRhZGJkY2RkZGVkZmRnZGhkaWRqZGtkbGRtZG5kb2RwZHFkcmRzZHRnaVocZR1lCWoegwFkBWR1hQIZAFofZR9kBBkAZHVrAlogZSCQAnJwZQlqIVoiZSNaJGUlWiZlI1onZShlKWUqZStlLGUdZS1lLmUvZTBlMWcLWjJuYGUJajNaImU0WjVkdmR3hABaJ2cAWjJkBGQFbDZaNmR4oDehAEQAXThaOHoUZTKgOWU6ZTZlOIMCoQEBAFcAbhwEAGU7awqQAnLKAQABAAEAWQCQAnGWWQBuAlgAkAJxlmU8ZHlkeoQAZTVke4MBRACDAYMBWj1kfGR9hABaPkcAZH5kf4QAZH9lP4MDWkBlBGpBZQRqQhcAWkNkgFpEZURkgRcAWkVlQ2VEFwBaRmUlZIKDAVpHZIOgSGSEZHqEAGUEaklEAIMBoQFaSkcAZIVkI4QAZCNlS4MDWkxHAGSGZCWEAGQl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cmVjdGx5IGluIFB5dGhvbi4KCkhlcmUgaXMgYSBwcm9ncmFtIHRvIHBhcnNlICJIZWxsbywgV29ybGQhIiAob3IgYW55IGdyZWV0aW5nIG9mIHRoZSBmb3JtIApDeyI8c2FsdXRhdGlvbj4sIDxhZGRyZXNzZWU+ISJ9KSwgYnVpbHQgdXAgdXNpbmcgTHtXb3JkfSwgTHtMaXRlcmFsfSwgYW5kIEx7QW5kfSBlbGVtZW50cyAKKEx7JysnPFBhcnNlckVsZW1lbnQuX19hZGRfXz59IG9wZXJhdG9yIGdpdmVzIEx7QW5kfSBleHByZXNzaW9ucywgc3RyaW5ncyBhcmUgYXV0by1jb252ZXJ0ZWQgdG8KTHtMaXRlcmFsfSBleHByZXNzaW9ucyk6OgoKICAgIGZyb20gcHlwYXJzaW5nIGltcG9ydCBXb3JkLCBhbHBoYXMKCiAgICAjIGRlZmluZSBncmFtbWFyIG9mIGEgZ3JlZXRpbmcKICAgIGdyZWV0ID0gV29yZChhbHBoYXMpICsgIiwiICsgV29yZChhbHBoYXMpICsgIiEiCgogICAgaGVsbG8gPSAiSGVsbG8sIFdvcmxkISIKICAgIHByaW50IChoZWxsbywgIi0+IiwgZ3JlZXQucGFyc2VTdHJpbmcoaGVsbG8pKQoKVGhlIHByb2dyYW0gb3V0cHV0cyB0aGUgZm9sbG93aW5nOjoKCiAgICBIZWxsbywgV29ybGQhIC0+IFsnSGVsbG8nLCAnLCcsICdXb3JsZCcsICchJ10KClRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYW1tYXIgaXMgcXVpdGUgcmVhZGFibGUsIG93aW5nIHRvIHRoZSBzZWxmLWV4cGxhbmF0b3J5CmNsYXNzIG5hbWVzLCBhbmQgdGhlIHVzZSBvZiAnKycsICd8JyBhbmQgJ14nIG9wZXJhdG9ycy4KClRoZSBMe1BhcnNlUmVzdWx0c30gb2JqZWN0IHJldHVybmVkIGZyb20gTHtQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPFBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmc+fSBjYW4gYmUgYWNjZXNzZWQgYXMgYSBuZXN0ZWQgbGlzdCwgYSBkaWN0aW9uYXJ5LCBvciBhbgpvYmplY3Qgd2l0aCBuYW1lZCBhdHRyaWJ1dGVzLgoKVGhlIHB5cGFyc2luZyBtb2R1bGUgaGFuZGxlcyBzb21lIG9mIHRoZSBwcm9ibGVtcyB0aGF0IGFyZSB0eXBpY2FsbHkgdmV4aW5nIHdoZW4gd3JpdGluZyB0ZXh0IHBhcnNlcnM6CiAtIGV4dHJhIG9yIG1pc3Npbmcgd2hpdGVzcGFjZSAodGhlIGFib3ZlIHByb2dyYW0gd2lsbCBhbHNvIGhhbmRsZSAiSGVsbG8sV29ybGQhIiwgIkhlbGxvICAsICBXb3JsZCAgISIsIGV0Yy4pCiAtIHF1b3RlZCBzdHJpbmdzCiAtIGVtYmVkZGVkIGNvbW1lbnRzCgoKR2V0dGluZyBTdGFydGVkIC0KLS0tLS0tLS0tLS0tLS0tLS0KVmlzaXQgdGhlIGNsYXNzZXMgTHtQYXJzZXJFbGVtZW50fSBhbmQgTHtQYXJzZVJlc3VsdHN9IHRvIHNlZSB0aGUgYmFzZSBjbGFzc2VzIHRoYXQgbW9zdCBvdGhlciBweXBhcnNpbmcKY2xhc3NlcyBpbmhlcml0IGZyb20uIFVzZSB0aGUgZG9jc3RyaW5ncyBmb3IgZXhhbXBsZXMgb2YgaG93IHRvOgogLSBjb25zdHJ1Y3QgbGl0ZXJhbCBtYXRjaCBleHByZXNzaW9ucyBmcm9tIEx7TGl0ZXJhbH0gYW5kIEx7Q2FzZWxlc3NMaXRlcmFsfSBjbGFzc2VzCiAtIGNvbnN0cnVjdCBjaGFyYWN0ZXIgd29yZC1ncm91cCBleHByZXNzaW9ucyB1c2luZyB0aGUgTHtXb3JkfSBjbGFzcwogLSBzZWUgaG93IHRvIGNyZWF0ZSByZXBldGl0aXZlIGV4cHJlc3Npb25zIHVzaW5nIEx7WmVyb09yTW9yZX0gYW5kIEx7T25lT3JNb3JlfSBjbGFzc2VzCiAtIHVzZSBMeycrJzxBbmQ+fSwgTHsnfCc8TWF0Y2hGaXJzdD59LCBMeydeJzxPcj59LCBhbmQgTHsnJic8RWFjaD59IG9wZXJhdG9ycyB0byBjb21iaW5lIHNpbXBsZSBleHByZXNzaW9ucyBpbnRvIG1vcmUgY29tcGxleCBvbmVzCiAtIGFzc29jaWF0ZSBuYW1lcyB3aXRoIHlvdXIgcGFyc2VkIHJlc3VsdHMgdXNpbmcgTHtQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lfQogLSBmaW5kIHNvbWUgaGVscGZ1bCBleHByZXNzaW9uIHNob3J0LWN1dHMgbGlrZSBMe2RlbGltaXRlZExpc3R9IGFuZCBMe29uZU9mfQogLSBmaW5kIG1vcmUgdXNlZnVsIGNvbW1vbiBleHByZXNzaW9ucyBpbiB0aGUgTHtweXBhcnNpbmdfY29tbW9ufSBuYW1lc3BhY2UgY2xhc3MKegUyLjIuMXoVMTggU2VwIDIwMTggMDA6NDkgVVRDeipQYXVsIE1jR3VpcmUgPHB0bWNnQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD7pAAAAAE4pAdoDcmVmKQHaCGRhdGV0aW1lKQHaBVJMb2NrKQHaCEl0ZXJhYmxlKQHaDk11dGFibGVNYXBwaW5nKQHaC09yZGVyZWREaWN02gNBbmTaD0Nhc2VsZXNzS2V5d29yZNoPQ2FzZWxlc3NMaXRlcmFs2gpDaGFyc05vdElu2gdDb21iaW5l2gREaWN02gRFYWNo2gVFbXB0edoKRm9sbG93ZWRCedoHRm9yd2FyZNoKR29Ub0NvbHVtbtoFR3JvdXDaB0tleXdvcmTaB0xpbmVFbmTaCUxpbmVTdGFydNoHTGl0ZXJhbNoKTWF0Y2hGaXJzdNoHTm9NYXRjaNoGTm90QW552glPbmVPck1vcmXaCE9ubHlPbmNl2ghPcHRpb25hbNoCT3LaElBhcnNlQmFzZUV4Y2VwdGlvbtoTUGFyc2VFbGVtZW50RW5oYW5jZdoOUGFyc2VFeGNlcHRpb27aD1BhcnNlRXhwcmVzc2lvbtoTUGFyc2VGYXRhbEV4Y2VwdGlvbtoMUGFyc2VSZXN1bHRz2hRQYXJzZVN5bnRheEV4Y2VwdGlvbtoNUGFyc2VyRWxlbWVudNoMUXVvdGVkU3RyaW5n2hlSZWN1cnNpdmVHcmFtbWFyRXhjZXB0aW9u2gVSZWdleNoGU2tpcFRv2glTdHJpbmdFbmTaC1N0cmluZ1N0YXJ02ghTdXBwcmVzc9oFVG9rZW7aDlRva2VuQ29udmVydGVy2gVXaGl0ZdoEV29yZNoHV29yZEVuZNoJV29yZFN0YXJ02gpaZXJvT3JNb3Jl2glhbHBoYW51bXPaBmFscGhhc9oKYWxwaGFzOGJpdNoLYW55Q2xvc2VUYWfaCmFueU9wZW5UYWfaDWNTdHlsZUNvbW1lbnTaA2NvbNoSY29tbWFTZXBhcmF0ZWRMaXN02hBjb21tb25IVE1MRW50aXR52gxjb3VudGVkQXJyYXnaD2NwcFN0eWxlQ29tbWVudNoPZGJsUXVvdGVkU3RyaW5n2g9kYmxTbGFzaENvbW1lbnTaDWRlbGltaXRlZExpc3TaBmRpY3RPZtoOZG93bmNhc2VUb2tlbnPaBWVtcHR52gdoZXhudW1z2gtodG1sQ29tbWVudNoQamF2YVN0eWxlQ29tbWVudNoEbGluZdoHbGluZUVuZNoJbGluZVN0YXJ02gZsaW5lbm/aDG1ha2VIVE1MVGFnc9oLbWFrZVhNTFRhZ3PaDm1hdGNoT25seUF0Q29s2hFtYXRjaFByZXZpb3VzRXhwctoUbWF0Y2hQcmV2aW91c0xpdGVyYWzaCm5lc3RlZEV4cHLaD251bGxEZWJ1Z0FjdGlvbtoEbnVtc9oFb25lT2baB29wQXNzb2PaEm9wZXJhdG9yUHJlY2VkZW5jZdoKcHJpbnRhYmxlc9oIcHVuYzhiaXTaEnB5dGhvblN0eWxlQ29tbWVudNoMcXVvdGVkU3RyaW5n2gxyZW1vdmVRdW90ZXPaEXJlcGxhY2VIVE1MRW50aXR52gtyZXBsYWNlV2l0aNoKcmVzdE9mTGluZdoPc2dsUXVvdGVkU3RyaW5n2gZzcmFuZ2XaCXN0cmluZ0VuZNoLc3RyaW5nU3RhcnTaEHRyYWNlUGFyc2VBY3Rpb27aDXVuaWNvZGVTdHJpbmfaDHVwY2FzZVRva2Vuc9oNd2l0aEF0dHJpYnV0ZdoNaW5kZW50ZWRCbG9ja9oPb3JpZ2luYWxUZXh0Rm9y2gd1bmdyb3Vw2g1pbmZpeE5vdGF0aW9u2gtsb2NhdGVkRXhwctoJd2l0aENsYXNz2gpDbG9zZU1hdGNo2gh0b2tlbk1hcNoQcHlwYXJzaW5nX2NvbW1vbukDAAAAYwEAAAAAAAAAAAAAAAMAAAAIAAAAQwAAAHNmAAAAdAB8AHQBgwJyDnwAUwB6CnQCfACDAVcAUwAEAHQDawpyYAEAAQABAHQBfACDAaAEdAWgBqEAZAGhAn0BdAdkAoMBfQJ8AqAIZANkBIQA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bXBsZTo6CiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBkYXRlX3N0ciA9IChpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJ5ZWFyIikgKyAnLycgCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgibW9udGgiKSArICcvJyAKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJkYXkiKSkKICAgICAgICAjIGVxdWl2YWxlbnQgZm9ybToKICAgICAgICAjIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCgogICAgICAgICMgcGFyc2VTdHJpbmcgcmV0dXJucyBhIFBhcnNlUmVzdWx0cyBvYmplY3QKICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpCgogICAgICAgIGRlZiB0ZXN0KHMsIGZuPXJlcHIpOgogICAgICAgICAgICBwcmludCgiJXMgLT4gJXMiICUgKHMsIGZuKGV2YWwocykpKSkKICAgICAgICB0ZXN0KCJsaXN0KHJlc3VsdCkiKQogICAgICAgIHRlc3QoInJlc3VsdFswXSIpCiAgICAgICAgdGVzdCgicmVzdWx0Wydtb250aCddIikKICAgICAgICB0ZXN0KCJyZXN1bHQuZGF5IikKICAgICAgICB0ZXN0KCInbW9udGgnIGluIHJlc3VsdCIpCiAgICAgICAgdGVzdCgiJ21pbnV0ZXMnIGluIHJlc3VsdCIpCiAgICAgICAgdGVzdCgicmVzdWx0LmR1bXAoKSIsIHN0cikKICAgIHByaW50czo6CiAgICAgICAgbGlzdChyZXN1bHQpIC0+IFsnMTk5OScsICcvJywgJzEyJywgJy8nLCAnMzEnXQogICAgICAgIHJlc3VsdFswXSAtPiAnMTk5OScKICAgICAgICByZXN1bHRbJ21vbnRoJ10gLT4gJzEyJwogICAgICAgIHJlc3VsdC5kYXkgLT4gJzMxJwogICAgICAgICdtb250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ICAgIEV4YW1wbGU6OgogICAgICAgICAgICBkZWYgcmVtb3ZlX2ZpcnN0KHRva2Vucyk6CiAgICAgICAgICAgICAgICB0b2tlbnMucG9wKDApCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShXb3JkKG51bXMpKS5wYXJzZVN0cmluZygiMCAxMjMgMzIxIikpICMgLT4gWycwJywgJzEyMycsICczMjEnXQogICAgICAgICAgICBwcmludChPbmVPck1vcmUoV29yZChudW1zKSkuYWRkUGFyc2VBY3Rpb24ocmVtb3ZlX2ZpcnN0KS5wYXJzZVN0cmluZygiMCAxMjMgMzIxIikpICMgLT4gWycxMjMnLCAnMzIxJ10KCiAgICAgICAgICAgIGxhYmVsID0gV29yZChhbHBoYXMpCiAgICAgICAgICAgIHBhdHQgPSBsYWJlbCgiTEFCRUwiKSArIE9uZU9yTW9yZShXb3JkKG51bXMpKQogICAgICAgICAgICBwcmludChwYXR0LnBhcnNlU3RyaW5nKCJBQUIgMTIzIDMyMSIpLmR1bXAoKSkKCiAgICAgICAgICAgICMgVXNlIHBvcCgpIGluIGEgcGFyc2UgYWN0aW9uIHRvIHJlbW92ZSBuYW1lZCByZXN1bHQgKG5vdGUgdGhhdCBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIG5vdAogICAgICAgICAgICAjIHJlbW92ZWQgZnJvbSBsaXN0IGZvcm0gb2YgcmVzdWx0cykKICAgICAgICAgICAgZGVmIHJlbW92ZV9MQUJFTCh0b2tlbnMpOgogICAgICAgICAgICAgICAgdG9rZW5zLnBvcCgiTEFCRUwiKQogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VucwogICAgICAgICAgICBwYXR0LmFkZFBhcnNlQWN0aW9uKHJlbW92ZV9MQUJFTCkKICAgICAgICAgICAgcHJpbnQocGF0dC5wYXJzZVN0cmluZygiQUFCIDEyMyAzMjEiKS5kdW1wKCkpCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgWydBQUInLCAnMTIzJywgJzMyMSddCiAgICAgICAgICAgIC0gTEFCRUw6IEFBQgoKICAgICAgICAgICAgWydBQUInLCAnMTIz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AAApAnKJAAAA2gNyZXNyeQAAAHJ5AAAAcnoAAABy4gAAAM4CAABzBAAAAAYAAgB6J1BhcnNlUmVzdWx0cy5hc0xpc3QuPGxvY2Fscz4uPGxpc3Rjb21wPnL3AAAAcq4AAAByeQAAAHJ5AAAAcnoAAAByzgAAAMACAABzAgAAAAAOehNQYXJzZVJlc3VsdHMuYXNMaXN0YwEAAAAAAAAAAAAAAAIAAAAEAAAAAwAAAHM2AAAAdAByDHwAagF9AW4GfABqAn0BhwBmAWQBZAKECIkAdAOHAGYBZANkBIQIfAGDAEQAgwGDAVMAKQVhwwMAAAogICAgICAgIFJldHVybnMgdGhlIG5hbWVkIHBhcnNlIHJlc3VsdHMgYXMgYSBuZXN0ZWQgZGljdGlvbmFyeS4KCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCiAgICAgICAgICAgIAogICAgICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygnMTIvMzEvMTk5OScpCiAgICAgICAgICAgIHByaW50KHR5cGUocmVzdWx0KSwgcmVwcihyZXN1bHQpKSAjIC0+IDxjbGFzcyAncHlwYXJzaW5nLlBhcnNlUmVzdWx0cyc+IChbJzEyJywgJy8nLCAnMzEnLCAnLycsICcxOTk5J10sIHsnZGF5JzogWygnMTk5OScsIDQpXSwgJ3llYXInOiBbKCcxMicsIDApXSwgJ21vbnRoJzogWygnMzEnLCAyKV19KQogICAgICAgICAgICAKICAgICAgICAgICAgcmVzdWx0X2RpY3QgPSByZXN1bHQuYXNEaWN0KCkKICAgICAgICAgICAgcHJpbnQodHlwZShyZXN1bHRfZGljdCksIHJlcHIocmVzdWx0X2RpY3QpKSAjIC0+IDxjbGFzcyAnZGljdCc+IHsnZGF5JzogJzE5OTknLCAneWVhcic6ICcxMicsICdtb250aCc6ICczMSd9CgogICAgICAgICAgICAjIGV2ZW4gdGhvdWdo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Z2h0IG1hdGNoIGF0IGEgcGFydGljdWxhciBsb2NhdGlvbi4KCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIHNzbl9leHByID0gUmVnZXgociJcZFxkXGQtXGRcZC1cZFxkXGRcZCIpCiAgICAgICAgICAgIGhvdXNlX251bWJlcl9leHByID0gU3VwcHJlc3MoJyMnKSArIFdvcmQobnVtcywgYWxwaGFudW1zKQogICAgICAgICAgICB1c2VyX2RhdGEgPSAoR3JvdXAoaG91c2VfbnVtYmVyX2V4cHIpKCJob3VzZV9udW1iZXIiKSAKICAgICAgICAgICAgICAgICAgICAgICAgfCBHcm91cChzc25fZXhwcikoInNzbiIpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgR3JvdXAoaW50ZWdlcikoImFnZSIpKQogICAgICAgICAgICB1c2VyX2luZm8gPSBPbmVPck1vcmUodXNlcl9kYXRhKQogICAgICAgICAgICAKICAgICAgICAgICAgcmVzdWx0ID0gdXNlcl9pbmZvLnBhcnNlU3RyaW5nKCIyMiAxMTEtMjItMzMzMyAjMjIxQiIpCiAgICAgICAgICAgIGZvciBpdGVtIGluIHJlc3VsdDoKICAgICAgICAgICAgICAgIHByaW50KGl0ZW0uZ2V0TmFtZSgpLCAnOicsIGl0ZW1bMF0pCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgYWdlIDogMjIKICAgICAgICAgICAgc3NuIDogMTExLTIyLTMzMzMKICAgICAgICAgICAgaG91c2VfbnVtYmVyIDogMjIxQgogICAgICAgIE5yjAAAAHIBAAAAKQJyAQAAAHJ0AAAAKQly0AAAAHLRAAAA2hVfUGFyc2VSZXN1bHRzX19sb29rdXBy6gAAAHLZAAAA2gRuZXh0cvoAAAByBwEAAHIFAQAAKQJypQAAANoDcGFycnkAAAByeQAAAHJ6AAAA2gdnZXROYW1lQgMAAHMcAAAAABYGAQYBBgEIAQQBCgIGAQwBDP8CAhz+AgMSAnoUUGFyc2VSZXN1bHRzLmdldE5hbWVyAQAAAGMEAAAAAAAAAAAAAAALAAAA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KQoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKQogICAgICAgICAgICBudW0gPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGZ1bmMgPSBGb3J3YXJkKCkKICAgICAgICAgICAgdGVybSA9IGlkZW50IHwgbnVtIHwgR3JvdXAoJygnICsgZnVuYyArICcpJykKICAgICAgICAgICAgZnVuYyA8PD0gaWRlbnQgKyBHcm91cChPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHRlcm0pKSkKICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5wYXJzZVN0cmluZygiZm5hIGEsYiwoZm5iIGMsZCwyMDApLDEwMCIpCiAgICAgICAgICAgIHJlc3VsdC5wcHJpbnQod2lkdGg9NDApCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgWydmbmEnLAogICAgICAgICAgICAgWydhJywKICAgICAgICAgICAgICAnYicsCiAgICAgICAgICAgICAgWycoJywgJ2ZuYicsIFsnYycsICdkJywgJzIwMCddLCAnKSddLAogICAgICAgICAgICAgICcxMDAnXV0KICAgICAgICBOKQLaBnBwcmludHLOAAAAqQNypQAAAHKkAAAAcgwBAAByeQAAAHJ5AAAAcnoAAAByRgEAAJQDAABzAgAAAAAVehNQYXJzZVJlc3VsdHMucHByaW50YwEAAAAAAAAAAAAAAAEAAAAFAAAAQwAAAHMuAAAAfABqAHwAagGgAqEAfABqA2QAawlyHnwAoAOhAHAgZAB8AGoEfABqBWYEZgJTAHKIAAAAKQZy1gAAAHLZAAAActsAAABy0QAAAHLSAAAActAAAAByrgAAAHJ5AAAAcnkAAAByegAAANoMX19nZXRzdGF0ZV9frAMAAHMOAAAAAAEEAQgBFAEEAQT9Av96GVBhcnNlUmVzdWx0cy5fX2dldHN0YXRlX19jAgAAAAAAAAAAAAAABAAAAAUAAABDAAAAc04AAAB8AWQBGQB8AF8AfAFkAhkAXAR8AF8BfQJ9A3wAXwJpAHwAXwN8AGoDoAR8A6EBAQB8AmQAawlyRHQFfAKDAXwAXwZuBmQAfABfBmQAUwBy6QAAACkHctYAAABy2QAAAHLQAAAActIAAAByIAEAAHLlAAAActEAAAApBHKlAAAA2gVzdGF0ZXI9AQAAWgxpbkFjY3VtTmFtZXNyeQAAAHJ5AAAAcnoAAADaDF9fc2V0c3RhdGVfX7MDAABzFgAAAAABCgQG/QYBAgECAQQBBgEMAQgBDAJ6GVBhcnNlUmVzdWx0cy5fX3NldHN0YXRlX19jAQAAAAAAAAAAAAAAAQAAAAQAAABDAAAAcxQAAAB8AGoAfABqAXwAagJ8AGoDZgRTAHKIAAAAKQRy1gAAAHLQAAAActMAAABy1AAAAHKuAAAAcnkAAAByeQAAAHJ6AAAA2g5fX2dldG5ld2FyZ3NfX8ADAABzAgAAAAABehtQYXJzZVJlc3VsdHMuX19nZXRuZXdhcmdzX19jAQAAAAAAAAAAAAAAAQAAAAQAAABDAAAAcxgAAAB0AHQBfACDAYMBdAJ8AKADoQCDARcAUwByiAAAACkEcrYAAABytwAAAHLVAAAAcgUBAAByrgAAAHJ5AAAAcnkAAAByegAAAHK4AAAAwwMAAHMCAAAAAAF6FFBhcnNlUmVzdWx0cy5fX2Rpcl9fKQROTlRUKQFOKQFymwAAACkETkZymwAAAFQpA3KbAAAAcgEAAABUKTRylgAAAHKXAAAAcpgAAAByuQAAAHLKAAAAcn0AAABypwAAAHLEAAAAcugAAABy9AAAAHL1AAAAcvYAAABy+AAAANoLX19ub256ZXJvX19y+wAAAHL9AAAAcgABAAByAwEAAHIEAQAAcjABAAByBQEAAHIHAQAAcu4AAABy/gAAAHIGAQAAcggBAAByCgEAAHIOAQAAcuQAAAByEQEAAHISAQAAchQBAAByFQEAAHKtAAAAchkBAAByIQEAAHIjAQAAcrEAAAByrwAAAHIoAQAAcs4AAAByLgEAAHLbAAAAcjgBAAByOwEAAHI+AQAAckEBAAByRgEAAHJIAQAAckoBAABySwEAAHK4AAAAcnkAAAByeQAAAHJ5AAAAcnoAAAByJAAAAEQBAABzaAAAAAgBBCYKCRQnCAkMDQgVCAMIAQgBBAEIAQgBCAYIAwgDBAEEAwQDBAECAwQDBAMEAwgECAQIBAgFCDQKFggUCA4IEggHCA4IBQgQCAgIAwgDCgsIEAgjCAsKPQgHCCUKLQgYCAcIDQgDYwIAAAAAAAAAAAAAAAMAAAAGAAAAQwAAAHNGAAAAfAF9AmQBfAAEAAMAawByHHQAfAKDAWsAcjRuBAEAbhR8AnwAZAIYABkAZANrAnI0ZAJTAHwAfAKgAWQDZAF8AKEDGABTACkEYQQCAABSZXR1cm5zIGN1cnJlbnQgY29sdW1uIHdpdGhpbiBhIHN0cmluZywgY291bnRpbmcgbmV3bGluZXMgYXMgbGluZSBzZXBhcmF0b3JzLgogICBUaGUgZmlyc3QgY29sdW1uIGlzIG51bWJlciAxLgoKICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2luZyBiZWhhdmlvciBpcyB0byBleHBhbmQgdGFicyBpbiB0aGUgaW5wdXQgc3RyaW5nCiAgIGJlZm9yZSBzdGFydGluZyB0aGUgcGFyc2luZyBwcm9jZXNzLiAgU2VlIEx7SXtQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nfTxQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPn0gZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgb24gcGFyc2luZyBzdHJpbmdzIGNvbnRhaW5pbmcgQ3s8VEFCPn1zLCBhbmQgc3VnZ2VzdGVkIG1ldGhvZHMgdG8gbWFpbnRhaW4gYQogICBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHBhcnNlZCBzdHJpbmcsIHRoZSBwYXJzZSBsb2NhdGlvbiwgYW5kIGxpbmUgYW5kIGNvbHVtbgogICBwb3NpdGlvbnMgd2l0aGluIHRoZSBwYXJzZWQgc3RyaW5nLgogICByAQAAAHKMAAAAcjIBAAApAnLqAAAA2gVyZmluZCkDcqAAAADaBHN0cmdyjwAAAHJ5AAAAcnkAAAByegAAAHI7AAAAyAMAAHMEAAAAAAoEAWMCAAAAAAAAAAAAAAACAAAABQAAAEMAAABzEgAAAHwBoABkAWQCfAChA2QDFwBTACkEYQcCAABSZXR1cm5zIGN1cnJlbnQgbGluZSBudW1iZXIgd2l0aGluIGEgc3RyaW5nLCBjb3VudGluZyBuZXdsaW5lcyBhcyBsaW5lIHNlcGFyYXRvcnMuCiAgIFRoZSBmaXJzdCBsaW5lIGlzIG51bWJlciAxLgoKICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2luZyBi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VEZymwAAACkDTk5OKRdy1QAAANoLcGFyc2VBY3Rpb27aCmZhaWxBY3Rpb27aB3N0clJlcHLaC3Jlc3VsdHNOYW1l2gpzYXZlQXNMaXN02g5za2lwV2hpdGVzcGFjZXImAAAAcnMBAADaCndoaXRlQ2hhcnPaFWNvcHlEZWZhdWx0V2hpdGVDaGFyc9oObWF5UmV0dXJuRW1wdHnaCGtlZXBUYWJz2gtpZ25vcmVFeHByc9oFZGVidWfaC3N0cmVhbWxpbmVk2g1tYXlJbmRleEVycm9y2gZlcnJtc2faDG1vZGFsUmVzdWx0c9oMZGVidWdBY3Rpb25z2gJyZdoMY2FsbFByZXBhcnNl2g1jYWxsRHVyaW5nVHJ5KQJypQAAANoIc2F2ZWxpc3RyeQAAAHJ5AAAAcnoAAABypwAAAHgEAABzKAAAAAABCAEGAgYBBgEGAQYBCAEGAQYBBgEIAQYBBgEGAQYBBgEGAQYBBgF6FlBhcnNlckVsZW1lbnQuX19pbml0X19jAQAAAAAAAAAAAAAAAgAAAAMAAABDAAAAczwAAAB0AKAAfAChAX0BfABqAWQBZAGFAhkAfAFfAXwAagJkAWQBhQIZAHwBXwJ8AGoDcjh0BGoFfAFfBnwBUwApAmEkAwAACiAgICAgICAgTWFrZSBhIGNvcHkgb2YgdGhpcyBDe1BhcnNlckVsZW1lbnR9LiAgVXNlZnVsIGZvciBkZWZpbmluZyBkaWZmZXJlbnQgcGFyc2UgYWN0aW9ucwogICAgICAgIGZvciB0aGUgc2FtZSBwYXJzaW5nIHBhdHRlcm4sIHVzaW5nIGNvcGllcyBvZiB0aGUgb3JpZ2luYWwgcGFyc2UgZWxlbWVudC4KICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IGludCh0b2tzWzBdKSkKICAgICAgICAgICAgaW50ZWdlcksgPSBpbnRlZ2VyLmNvcHkoKS5hZGRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogdG9rc1swXSoxMDI0KSArIFN1cHByZXNzKCJLIikKICAgICAgICAgICAgaW50ZWdlck0gPSBpbnRlZ2VyLmNvcHkoKS5h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RHVyaW5nVHJ5ID0gKGRlZmF1bHQ9Q3tGYWxzZX0pIGluZGljYXRlIGlmIHBhcnNlIGFjdGlvbiBzaG91bGQgYmUgcnVuIGR1cmluZyBsb29rYWhlYWRzIGFuZCBhbHRlcm5hdGUgdGVzdGluZwoKICAgICAgICBOb3RlOiB0aGUgZGVmYXVsdCBwYXJzaW5nIGJlaGF2aW9yIGlzIHRvIGV4cGFuZCB0YWJzIGluIHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICBiZWZvcmUgc3RhcnRpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIFNlZSBMe0l7cGFyc2VTdHJpbmd9PHBhcnNlU3RyaW5nPn0gZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgICAgICBvbiBwYXJzaW5nIHN0cmluZ3MgY29udGFpbmluZyBDezxUQUI+fXMsIGFuZCBzdWdnZXN0ZWQgbWV0aG9kcyB0byBtYWludGFpbiBhCiAgICAgICAgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBwYXJzZWQgc3RyaW5nLCB0aGUgcGFyc2UgbG9jYXRpb24sIGFuZCBsaW5lIGFuZCBjb2x1bW4KICAgICAgICBwb3NpdGlvbnMgd2l0aGluIHRoZSBwYXJzZWQgc3RyaW5nLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIgKyAnLycgKyBpbnRlZ2VyICsgJy8nICsgaW50ZWdlcgoKICAgICAgICAgICAgZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKSAgIyAtPiBbJzE5OTknLCAnLycsICcxMicsICcvJywgJzMxJ10KCiAgICAgICAgICAgICMgdXNlIHBhcnNlIGFjdGlvbiB0byBjb252ZXJ0IHRvIGludHMgYXQgcGFyc2UgdGltZQogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKS5zZXRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogaW50KHRva3NbMF0pKQogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIgKyAnLycgKyBpbnRlZ2VyICsgJy8nICsgaW50ZWdlcgoKICAgICAgICAgICAgIyBub3RlIHRoYXQgaW50ZWdlciBmaWVsZHMgYXJlIG5vdyBpbnRzLCBub3Qgc3RyaW5ncwogICAgICAgICAgICBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpICAjIC0+IFsxOTk5LCAnLycsIDEyLCAnLycsIDMxXQogICAgICAgIHKMAQAARikGctUAAADaA21hcHJyAQAAcnkBAABy5AAAAHKMAQAAqQNypQAAANoDZm5zcgwBAAByeQAAAHJ5AAAAcnoAAABygwAAAOIEAABzBgAAAAAiFAEOAXocUGFyc2VyRWxlbWVudC5zZXRQYXJzZUFjdGlvbmMBAAAAAAAAAAAAAAADAAAABwAAAE8AAABzNAAAAHwABABqAHQBdAJ0A3QBfAGDAYMCgwE3AAIAXwB8AGoEcCx8AqAFZAFkAqECfABfBHwAUwApA3qzCiAgICAgICAgQWRkIG9uZSBvciBtb3JlIHBhcnNlIGFjdGlvbnMgdG8gZXhwcmVzc2lvbidzIGxpc3Qgb2YgcGFyc2UgYWN0aW9ucy4gU2VlIEx7SXtzZXRQYXJzZUFjdGlvbn08c2V0UGFyc2VBY3Rpb24+fS4KICAgICAgICAKICAgICAgICBTZWUgZXhhbXBsZXMgaW4gTHtJe2NvcHl9PGNvcHk+fS4KICAgICAgICByjAEAAEYpBnJ5AQAActUAAABynQEAAHJyAQAAcowBAABy5AAAAHKeAQAAcnkAAAByeQAAAHJ6AAAA2g5hZGRQYXJzZUFjdGlvbggFAABzBgAAAAAGHAEUAXocUGFyc2VyRWxlbWVudC5hZGRQYXJzZUFjdGlvbmMBAAAAAAAAAAAAAAAEAAAABAAAAA8AAABzXgAAAHwCoABkAWQCoQKJAnwCoABkA2QEoQJyHHQBbgJ0AokAfAFEAF0giQGHAIcBhwJmA2QFZAaECH0DfABqA6AEfAOhAQEAcSR8AGoFcFZ8AqAAZAdkBKECfABfBXwAUwApCGHTAwAAQWRkIGEgYm9vbGVhbiBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gZXhwcmVzc2lvbidzIGxpc3Qgb2YgcGFyc2UgYWN0aW9ucy4gU2VlIAogICAgICAgIEx7SXtzZXRQYXJzZUFjdGlvbn08c2V0UGFyc2VBY3Rpb24+fSBmb3IgZnVuY3Rpb24gY2FsbCBzaWduYXR1cmVzLiBVbmxpa2UgQ3tzZXRQYXJzZUFjdGlvbn0sIAogICAgICAgIGZ1bmN0aW9ucyBwYXNzZWQgdG8gQ3thZGRDb25kaXRpb259IG5lZWQgdG8gcmV0dXJuIGJvb2xlYW4gc3VjY2Vzcy9mYWlsIG9mIHRoZSBjb25kaXRpb24uCgogICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzOgogICAgICAgICAtIG1lc3NhZ2UgPSBkZWZpbmUgYSBjdXN0b20gbWVzc2FnZSB0byBiZSB1c2VkIGluIHRoZSByYWlzZWQgZXhjZXB0aW9uCiAgICAgICAgIC0gZmF0YWwgICA9IGlmIFRydWUsIHdpbGwgcmFpc2UgUGFyc2VGYXRhbEV4Y2VwdGlvbiB0byBzdG9wIHBhcnNpbmcgaW1tZWRpYXRlbHk7IG90aGVyd2lzZSB3aWxsIHJhaXNlIFBhcnNlRXhjZXB0aW9uCiAgICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKS5zZXRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogaW50KHRva3NbMF0pKQogICAgICAgICAgICB5ZWFyX2ludCA9IGludGVnZXIuY29weSgpCiAgICAgICAgICAgIHllYXJfaW50LmFkZENvbmRpdGlvbihsYW1iZGEgdG9rczogdG9rc1swXSA+PSAyMDAwLCBtZXNzYWdlPSJPbmx5IHN1cHBvcnQgeWVhcnMgMjAwMCBhbmQgbGF0ZXIiKQogICAgICAgICAgICBkYXRlX3N0ciA9IHllYXJfaW50ICsgJy8nICsgaW50ZWdlciArICcvJyArIGludGVnZXIKCiAgICAgICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikgICMgLT4gRXhjZXB0aW9uOiBPbmx5IHN1cHBvcnQgeWVhcnMgMjAwMCBhbmQgbGF0ZXIgKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQogICAgICAgINoHbWVzc2FnZXodZmFp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dC5yZXNldENhY2hl6YAAAABjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAczgAAAB0AGoBczRkAXQAXwF8AGQCawhyIHQAoAKhAHQAXwNuDHQAoAR8AKEBdABfA3QAagV0AF8GZAJTACkDYZYFAABFbmFibGVzICJwYWNrcmF0IiBwYXJzaW5nLCB3aGljaCBhZGRzIG1lbW9pemluZyB0byB0aGUgcGFyc2luZyBsb2dpYy4KICAgICAgICAgICBSZXBlYXRlZCBwYXJzZSBhdHRlbXB0cyBhdCB0aGUgc2FtZSBzdHJpbmcgbG9jYXRpb24gKHdoaWNoIGhhcHBlbnMKICAgICAgICAgICBvZnRlbiBpbiBtYW55IGNvbXBsZXggZ3JhbW1hcnMpIGNhbiBpbW1lZGlhdGVseSByZXR1cm4gYSBjYWNoZWQgdmFsdWUsCiAgICAgICAgICAgaW5zdGVhZCBvZiByZS1leGVjdXRpbmcgcGFyc2luZy92YWxpZGF0aW5nIGNvZGUuICBNZW1vaXppbmcgaXMgZG9uZSBvZgogICAgICAgICAgIGJvdGggdmFsaWQgcmVzdWx0cyBhbmQgcGFyc2luZyBleGNlcHRpb25zLgogICAgICAgICAgIAogICAgICAgICAgIFBhcmFtZXRlcnM6CiAgICAgICAgICAgIC0gY2FjaGVfc2l6ZV9saW1pdCAtIChkZWZhdWx0PUN7MTI4fSkgLSBpZiBhbiBpbnRlZ2VyIHZhbHVlIGlzIHByb3ZpZGVkCiAgICAgICAgICAgICAgd2lsbCBsaW1pdCB0aGUgc2l6ZSBvZiB0aGUgcGFja3JhdCBjYWNoZTsgaWYgTm9uZSBpcyBwYXNzZWQsIHRoZW4KICAgICAgICAgICAgICB0aGUgY2FjaGUgc2l6ZSB3aWxsIGJlIHVuYm91bmRlZDsgaWYgMCBpcyBwYXNzZWQsIHRoZSBjYWNoZSB3aWxsCiAgICAgICAgICAgICAgYmUgZWZmZWN0aXZlbHkgZGlzYWJsZWQuCiAgICAgICAgICAgIAogICAgICAgICAgIFRoaXMgc3BlZWR1cCBtYXkgYnJlYWsgZXhpc3RpbmcgcHJvZ3JhbXMgdGhhdCB1c2UgcGFyc2UgYWN0aW9ucyB0aGF0CiAgICAgICAgICAgaGF2ZSBzaWRlLWVmZmVjdHMuICBGb3IgdGhpcyByZWFzb24sIHBhY2tyYXQgcGFyc2luZyBpcyBkaXNhYmxlZCB3aGVuCiAgICAgICAgICAgeW91IGZpcnN0IGltcG9ydCBweXBhcnNpbmcuICBUbyBhY3RpdmF0ZSB0aGUgcGFja3JhdCBmZWF0dXJlLCB5b3VyCiAgICAgICAgICAgcHJvZ3JhbSBtdXN0IGNhbGwgdGhlIGNsYXNzIG1ldGhvZCBDe1BhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdCgpfS4gIElmCiAgICAgICAgICAgeW91ciBwcm9ncmFtIHVzZXMgQ3twc3ljb30gdG8gImNvbXBpbGUgYXMgeW91IGdvIiwgeW91IG11c3QgY2FsbAogICAgICAgICAgIEN7ZW5hYmxlUGFja3JhdH0gYmVmb3JlIGNhbGxpbmcgQ3twc3ljby5mdWxsKCl9LiAgSWYgeW91IGRvIG5vdCBkbyB0aGlzLAogICAgICAgICAgIFB5dGhvbiB3aWxsIGNyYXNoLiAgRm9yIGJlc3QgcmVzdWx0cywgY2FsbCBDe2VuYWJsZVBhY2tyYXQoKX0gaW1tZWRpYXRlbHkKICAgICAgICAgICBhZnRlciBpbXBvcnRpbmcgcHlwYXJzaW5nLgogICAgICAgICAgIAogICAgICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICAgICBpbXBvcnQgcHlwYXJzaW5nCiAgICAgICAgICAgICAgIHB5cGFyc2luZy5QYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXQoKQogICAgICAgIFROKQdyJgAAANoPX3BhY2tyYXRFbmFibGVkcskBAABy2wEAAHLVAQAAct4BAABymwEAACkBWhBjYWNoZV9zaXplX2xpbWl0cnkAAAByeQAAAHJ6AAAA2g1lbmFibGVQYWNrcmF0JQYAAHMMAAAAABsGAQYBCAEMAgwBehtQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXRjAwAAAAAAAAAAAAAACAAAAAoAAABDAAAAc64AAAB0AKABoQABAHwAagJzFnwAoAOhAAEAfABqBEQAXQx9A3wDoAOhAAEAcRx8AGoFczh8AaAGoQB9AXo8fACgB3wBZAGhAlwCfQR9BXwCcnJ8AKAIfAF8BKECfQR0CYMAdAqDABcAfQZ8BqAHfAF8BKECAQBXAG4wBAB0C2sKcqQBAH0HAQB6EnQAagxykIIAbgR8B4IBVwA1AGQCfQd+B1gAWQBuBlgAfAVTAGQCUwApA2FCBQAACiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuCiAgICAgICAgVGhpcyBpcyB0aGUgbWFpbiBpbnRlcmZhY2UgdG8gdGhlIGNsaWVudCBjb2RlLCBvbmNlIHRoZSBjb21wbGV0ZQogICAgICAgIGV4cHJlc3Npb24gaGFzIGJlZW4gYnVpbHQuCgogICAgICAgIElmIHlvdSB3YW50IHRoZSBncmFtbWFyIHRvIHJlcXVpcmUgdGhhdCB0aGUgZW50aXJlIGlucHV0IHN0cmluZyBiZQogICAgICAgIHN1Y2Nlc3NmdWxseSBwYXJzZWQsIHRoZW4gc2V0IEN7cGFyc2VBbGx9IHRvIFRydWUgKGVxdWl2YWxlbnQgdG8gZW5kaW5nCiAgICAgICAgdGhlIGdyYW1tYXIgd2l0aCBDe0x7U3RyaW5nRW5kKCl9fSkuCgogICAgICAgIE5vdGU6IEN7cGFyc2VTdHJpbmd9IGltcGxpY2l0bHkgY2FsbHMgQ3tleHBhbmR0YWJzKCl9IG9uIHRoZSBpbnB1dCBzdHJpbmcsCiAgICAgICAgaW4gb3JkZXIgdG8gcmVwb3J0IHByb3BlciBjb2x1bW4gbnVtYmVycyBpbiBwYXJzZSBhY3Rpb25zLgogICAgICAgIElmIHRoZSBpbnB1dCBzdHJpbmcgY29udGFpbnMgdGFicyBhbmQKICAgICAgICB0aGUgZ3JhbW1hciB1c2VzIHBhcnNlIGFjdGlvbnMgdGhhdCB1c2UgdGhlIEN7bG9jfSBhcmd1bWVudCB0byBpbmRleCBpbnRvIHRoZQogICAgICAgIHN0cmluZyBiZWluZyBwYXJzZWQsIHlvdSBjYW4gZW5zdXJlIHlvdSBoYXZlIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBpbnB1dAogICAgICAgIHN0cmluZyBieToKICAgICAgICAgLSBjYWxsaW5nIEN7cGFyc2VXaXRoVGFic30gb24geW91ciBncmFtbWFyIGJlZm9yZSBjYWxsaW5nIEN7cGFyc2VTdHJpbmd9CiAgICAgICAgICAgKHNlZSBMe0l7cGFyc2VXaXRoVGFic308cGFyc2VXaXRoVGFicz59KQogICAgICAgICAtIGRlZmluZSB5b3VyIHBhcnNlIGFjdGlvbiB1c2luZyB0aGUgZnVsbCBDeyhzLGxvYyx0b2tzKX0gc2lnbmF0dXJlLCBhbmQKICAgICAgICAgICByZWZlcmVuY2UgdGhlIGlucHV0IHN0cmluZyB1c2luZyB0aGUgcGFyc2UgYWN0aW9uJ3MgQ3tzfSBhcmd1bWVudAogICAgICAgICAtIGV4cGxpY3RseSBleHBhbmQgdGhlIHRhYnMgaW4geW91ciBpbnB1dCBzdHJpbmcgYmVmb3JlIGNhbGxpbmcKICAgICAgICAgICBDe3BhcnNlU3RyaW5nfQogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBXb3JkKCdhJykucGFyc2VTdHJpbmcoJ2FhYWFhYmFhYScpICAjIC0+IFsnYWFhYWEnXQogICAgICAgICAgICBXb3JkKCdhJykucGFyc2VTdHJpbmcoJ2FhYWFhYmFhYScsIHBhcnNlQWxsPVRydWUpICAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgZW5kIG9mIHRleHQKICAgICAgICByAQAAAE4pDXImAAAAct8BAAByhQEAANoKc3RyZWFtbGluZXKDAQAAcoIBAADaCmV4cGFuZHRhYnNymwEAAHKuAQAAcg8AAAByKwAAAHIfAAAA2hJ2ZXJib3NlX3N0YWNrdHJhY2UpCHKlAAAAclIBAADaCHBhcnNlQWxscqoBAAByoAAAAHK1AQAAWgJzZXJYAQAAcnkAAAByeQAAAHJ6AAAA2gtwYXJzZVN0cmluZ0gGAABzJAAAAAAbCAEGAQgCCgEKAQYBCAECARABBAEMAQwBEAEQAQYBBAMWAnoZUGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ2MEAAAAAAAAAAAAAAAPAAAACgAAAGMAAABzNgEAAHwAagBzDnwAoAGhAAEAfABqAkQAXQx9BHwEoAGhAAEAcRR8AGoDczR0BHwBgwGgBaEAfQF0BnwBgwF9BWQBfQZ8AGoHfQd8AGoIfQh0CaAKoQABAGQBfQl6pHwGfAVrAXL6fAl8AmsAcvp6IHwHfAF8BoMCfQp8CHwBfApkAmQDjQNcAn0LfQxXAG4cBAB0C2sKcqYBAAEAAQB8CmQEFwB9BlkAcVpYAHwLfAZrBHLwfAlkBDcAfQl8DHwKfAtmA1YAAQB8A3LqfAd8AXwGgwJ9DXwNfAZrBHLgfAt9BnHufAZkBDcAfQZx+HwLfQZxWnwKZAQXAH0GcVpXAG40BAB0DGsKkAFyMAEAfQ4BAHoUdAlqDZABchyCAG4EfA6CAVcANQBkBX0Ofg5YAFkAbgJYAGQFUwApBmGGBAAACiAgICAgICAgU2NhbiB0aGUgaW5wdXQgc3RyaW5nIGZvciBleHByZXNzaW9uIG1hdGNoZXMuICBFYWNoIG1hdGNoIHdpbGwgcmV0dXJuIHRoZQogICAgICAgIG1hdGNoaW5nIHRva2Vucywgc3RhcnQgbG9jYXRpb24sIGFuZCBlbmQgbG9jYXRpb24uICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwKICAgICAgICBDe21heE1hdGNoZXN9IGFyZ3VtZW50LCB0byBjbGlwIHNjYW5uaW5nIGFmdGVyICduJyBtYXRjaGVzIGFyZSBmb3VuZC4gIElmCiAgICAgICAgQ3tvdmVybGFwfSBpcyBzcGVjaWZpZWQsIHRoZW4gb3ZlcmxhcHBpbmcgbWF0Y2hlcyB3aWxsIGJlIHJlcG9ydGVkLgoKICAgICAgICBOb3RlIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgbG9jYXRpb25zIGFyZSByZXBvcnRlZCByZWxhdGl2ZSB0byB0aGUgc3RyaW5nCiAgICAgICAgYmVpbmcgcGFyc2VkLiAgU2VlIEx7SXtwYXJzZVN0cmluZ308cGFyc2VTdHJpbmc+fSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYXJzaW5nCiAgICAgICAgc3RyaW5ncyB3aXRoIGVtYmVkZGVkIHRhYnMuCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBzb3VyY2UgPSAic2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3IgogICAgICAgICAgICBwcmludChzb3VyY2UpCiAgICAgICAgICAgIGZvciB0b2tlbnMsc3RhcnQsZW5kIGluIFdvcmQoYWxwaGFzKS5zY2FuU3RyaW5nKHNvdXJjZSk6CiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyAnXicqKGVuZC1zdGFydCkpCiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyB0b2tlbnNbMF0pCiAgICAgICAgCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAKICAgICAgICAgICAgc2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3CiAgICAgICAgICAgIF5eXl5eCiAgICAgICAgICAgIHNsZGpmCiAgICAgICAgICAgICAgICAgICAgXl5eXl5eXgogICAgICAgICAgICAgICAgICAgIGxzZGpqa2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZGtqZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGtqc2ZkCiAgICAgICAgcgEAAABGqQFylwEAAHKMAAAATikOcoUBAABy4wEAAHKDAQAAcoIBAAByhwAAAHLkAQAAcuoAAAByrgEAAHKbAQAAciYAAABy3wEAAHIhAAAAch8AAABy5QEAACkPcqUAAAByUgEAANoKbWF4TWF0Y2hlc1oHb3ZlcmxhcHKqAQAAcq0BAAByoAAAAFoKcHJlcGFyc2VGbloHcGFyc2VGbtoHbWF0Y2hlc3K0AQAAWgduZXh0TG9jcrUBAABaB25leHRsb2NyWAEAAHJ5AAAAcnkAAAByegAAANoKc2NhblN0cmluZ3oGAABzQgAAAAAeBgEIAQoBCgIGAQwBCAEEAQYBBgEIAQQBAgEQAQIBCgEWAQ4BDgIIAQgBDAEEAQoBCAEGAgoCBgIOARIBCAEEA3oYUGFyc2VyRWxlbWVudC5zY2FuU3RyaW5nYwIAAAAAAAAAAAAAAAgAAAAKAAAAQwAAAHPgAAAAZwB9AmQBfQNkAnwAXwB6nHwAoAF8AaEBRABdWlwDfQR9BX0GfAKgAnwBfAN8BYUCGQChAQEAfARycHQDfAR0BIMCclJ8AnwEoAWhADcAfQJuHnQDfAR0BoMCcmZ8AnwENwB9Am4KfAKgAnwEoQEBAHwGfQNxGnwCoAJ8AXwDZAOFAhkAoQEBAGQEZAWEAHwCRACDAX0CZAagB3QIdAl0CnwCgwGDAqEBVwBTAAQAdAtrCnLaAQB9BwEAehJ0DGoNcsaCAG4EfAeCAVcANQBkA30HfgdYAFkAbgJYAGQDUwApB2FmAwAACiAgICAgICAgRXh0ZW5zaW9uIHRvIEN7THtzY2FuU3RyaW5nfX0sIHRvIG1vZGlmeSBtYXRjaGluZyB0ZXh0IHdpdGggbW9kaWZpZWQgdG9rZW5zIHRoYXQgbWF5CiAgICAgICAgYmUgcmV0dXJuZWQgZnJvbSBhIHBhcnNlIGFjdGlvbi4gIFRvIHVzZSBDe3RyYW5zZm9ybVN0cmluZ30sIGRlZmluZSBhIGdyYW1tYXIgYW5kCiAgICAgICAgYXR0YWNoIGEgcGFyc2UgYWN0aW9uIHRvIGl0IHRoYXQgbW9kaWZpZXMgdGhlIHJldHVybmVkIHRva2VuIGxpc3QuCiAgICAgICAgSW52b2tpbmcgQ3t0cmFuc2Zvcm1TdHJpbmcoKX0gb24gYSB0YXJnZXQgc3RyaW5nIHdpbGwgdGhlbiBzY2FuIGZvciBtYXRjaGVzLAogICAgICAgIGFuZCByZXBsYWNlIHRoZSBtYXRjaGVkIHRleHQgcGF0dGVybnMgYWNjb3JkaW5nIHRvIHRoZSBsb2dpYyBpbiB0aGUgcGFyc2UKICAgICAgICBhY3Rpb24uICBDe3RyYW5zZm9ybVN0cmluZygpfSByZXR1cm5zIHRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgc3RyaW5nLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKQogICAgICAgICAgICB3ZC5zZXRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogdG9rc1swXS50aXRsZSgpKQogICAgICAgICAgICAKICAgICAgICAgICAgcHJpbnQod2QudHJhbnNmb3JtU3RyaW5nKCJub3cgaXMgdGhlIHdpbnRlciBvZiBvdXIgZGlzY29udGVu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ICAgICAgIC0gQ3tleHByKihOb25lLG4pfSBpcyBlcXVpdmFsZW50IHRvIEN7ZXhwciooMCxuKX0KICAgICAgICAgICAgICAocmVhZCBhcyAiMCB0byBuIGluc3RhbmNlcyBvZiBDe2V4cHJ9IikKICAgICAgICAgLSBDe2V4cHIqKE5vbmUsTm9uZSl9IGlzIGVxdWl2YWxlbnQgdG8gQ3tMe1plcm9Pck1vcmV9KGV4cHIpfQogICAgICAgICAtIEN7ZXhwciooMSxOb25lKX0gaXMgZXF1aXZhbGVudCB0byBDe0x7T25lT3JNb3JlfShleHByKX0KCiAgICAgICAgTm90ZSB0aGF0IEN7ZXhwciooTm9uZSxuKX0gZG9lcyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmCiAgICAgICAgbW9yZSB0aGFuIG4gZXhwcnMgZXhpc3QgaW4gdGhlIGlucHV0IHN0cmVhbTsgdGhhdCBpcywKICAgICAgICBDe2V4cHIqKE5vbmUsbil9IGRvZXMgbm90IGVuZm9yY2UgYSBtYXhpbXVtIG51bWJlciBvZiBleHByCiAgICAgICAgb2NjdXJyZW5jZXMuICBJZiB0aGlzIGJlaGF2aW9yIGlzIGRlc2lyZWQsIHRoZW4gd3JpdGUKICAgICAgICBDe2V4cHIqKE5vbmUsbikgKyB+ZXhwcn0KICAgICAgICByAQAAACkCTk5OcnMAAAByjAAAAHo3Y2Fubm90IG11bHRpcGx5ICdQYXJzZXJFbGVtZW50JyBhbmQgKCclcycsJyVzJykgb2JqZWN0c3owY2Fubm90IG11bHRpcGx5ICdQYXJzZXJFbGVtZW50JyBhbmQgJyVzJyBvYmplY3Rzei9jYW5ub3QgbXVsdGlwbHkgUGFyc2VyRWxlbWVudCBieSBuZWdhdGl2ZSB2YWx1ZXpAc2Vjb25kIHR1cGxlIHZhbHVlIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byBmaXJzdCB0dXBsZSB2YWx1ZXorY2Fubm90IG11bHRpcGx5IFBhcnNlckVsZW1lbnQgYnkgMCBvciAoMCwwKWMBAAAAAAAAAAAAAAABAAAABQAAABMAAABzKAAAAHwAZAFrBHIcdACIAYgAfABkARgAgwEXAIMBUwB0AIgBgwFT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IDEyKSwgKGxpbmU6MSwgY29sOjEzKQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDE1KDEsMTYpCiAgICAgICAgICAgIEV4Y2VwdGlvbiByYWlzZWQ6RXhwZWN0ZWQgYWxwaGF3b3JkIChhdCBjaGFyIDE1KSwgKGxpbmU6MSwgY29sOjE2KQoKICAgICAgICBUaGUgb3V0cHV0IHNob3duIGlzIHRoYXQgcHJvZHVjZWQgYnkgdGhlIGRlZmF1bHQgZGVidWcgYWN0aW9ucyAtIGN1c3RvbSBkZWJ1ZyBhY3Rpb25zIGNhbiBiZQogICAgICAgIHNwZWNpZmllZCB1c2luZyBMe3NldERlYnVnQWN0aW9uc30uIFByaW9yIHRvIGF0dGVtcHRpbmcKICAgICAgICB0byBtYXRjaCB0aGUgQ3t3ZH0gZXhwcmVzc2lvbiwgdGhlIGRlYnVnZ2luZyBtZXNzYWdlIEN7Ik1hdGNoIDxleHBybmFtZT4gYXQgbG9jIDxuPig8bGluZT4sPGNvbD4pIn0KICAgICAgICBpcyBzaG93bi4gVGhlbiBpZiB0aGUgcGFyc2Ugc3VjY2VlZHMsIGEgQ3siTWF0Y2hlZCJ9IG1lc3NhZ2UgaXMgc2hvd24sIG9yIGFuIEN7IkV4Y2VwdGlvbiByYWlzZWQifQogICAgICAgIG1lc3NhZ2UgaXMgc2hvd24uIEFsc28gbm90ZSB0aGUgdXNlIG9mIEx7c2V0TmFtZX0gdG8gYXNzaWduIGEgaHVtYW4tcmVhZGFibGUgbmFtZSB0byB0aGUgZXhwcmVzc2lvbiwKICAgICAgICB3aGljaCBtYWtlcyBkZWJ1Z2dpbmcgYW5kIGV4Y2VwdGlvbiBtZXNzYWdlcyBlYXNpZXIgdG8gdW5kZXJzdGFuZCAtIGZvciBpbnN0YW5jZSwgdGhlIGRlZmF1bHQKICAgICAgICBuYW1lIGNyZWF0ZWQgZm9yIHRoZSBDe1dvcmR9IGV4cHJlc3Npb24gd2l0aG91dCBjYWxsaW5nIEN7c2V0TmFtZX0gaXMgQ3siVzooQUJDRC4uLikifS4KICAgICAgICBGKQVyEAIAAHJUAQAAclcBAAByWQEAAHKEAQAAKQJypQAAANoEZmxhZ3J5AAAAcnkAAAByegAAANoI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cGFyc2VTdHJpbmd9fSB3aGVuIHJ1bm5pbmcgdGVzdHMgICAgICAgICAgIAogICAgICAgICAtIGNvbW1lbnQgLSAoZGVmYXVsdD1DeycjJ30pIC0gZXhwcmVzc2lvbiBmb3IgaW5kaWNhdGluZyBlbWJlZGRlZCBjb21tZW50cyBpbiB0aGUgdGVzdCAKICAgICAgICAgICAgICBzdHJpbmc7IHBhc3MgTm9uZSB0byBkaXNhYmxlIGNvbW1lbnQgZmlsdGVyaW5nCiAgICAgICAgIC0gZnVsbER1bXAgLSAoZGVmYXVsdD1De1RydWV9KSAtIGR1bXAgcmVzdWx0cyBhcyBsaXN0IGZvbGxvd2VkIGJ5IHJlc3VsdHMgbmFtZXMgaW4gbmVzdGVkIG91dGxpbmU7CiAgICAgICAgICAgICAgaWYgRmFsc2UsIG9ubHkgZHVtcCBuZXN0ZWQgbGlzdAogICAgICAgICAtIHByaW50UmVzdWx0cyAtIChkZWZhdWx0PUN7VHJ1ZX0pIHByaW50cyB0ZXN0IG91dHB1dCB0byBzdGRvdXQKICAgICAgICAgLSBmYWlsdXJlVGVzdHMgLSAoZGVmYXVsdD1De0ZhbHNlfSkgaW5kaWNhdGVzIGlmIHRoZXNlIHRlc3RzIGFyZSBleHBlY3RlZCB0byBmYWlsIHBhcnNpbmcKCiAgICAgICAgUmV0dXJuczogYSAoc3VjY2VzcywgcmVzdWx0cykgdHVwbGUsIHdoZXJlIHN1Y2Nlc3MgaW5kaWNhdGVzIHRoYXQgYWxsIHRlc3RzIHN1Y2NlZWRlZAogICAgICAgIChvciBmYWlsZWQgaWYgQ3tmYWlsdXJlVGVzdHN9IGlzIFRydWUpLCBhbmQgdGhlIHJlc3VsdHMgY29udGFpbiBhIGxpc3Qgb2YgbGluZXMgb2YgZWFjaCAKICAgICAgICB0ZXN0J3Mgb3V0cHV0CiAgICAgICAgCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIG51bWJlcl9leHByID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIuY29weSgpCgogICAgICAgICAgICByZXN1bHQgPSBudW1iZXJfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgICAgICMgdW5zaWduZWQgaW50ZWdlcgogICAgICAgICAgICAgICAgMTAwCiAgICAgICAgICAgICAgICAjIG5lZ2F0aXZlIGludGVnZXIKICAgICAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgICAgICMgZmxvYXQgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgICAgICAjIGludGVnZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAgICAgJycnKQogICAgICAgICAgICBwcmludCgiU3VjY2VzcyIgaWYgcmVzdWx0WzBdIGVsc2UgIkZhaWxlZCEiKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHN0cmF5IGNoYXJhY3RlcgogICAgICAgICAgICAgICAgMTAwWgogICAgICAgICAgICAgICAgIyBtaXNzaW5nIGxlYWRpbmcgZGlnaXQgYmVmb3JlICcuJwogICAgICAgICAgICAgICAgLS4xMDAKICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgJy4nCiAgICAgICAgICAgICAgICAzLjE0LjE1OQogICAgICAgICAgICAgICAgJycnLCBmYWlsdXJlVGVzdHM9VHJ1ZSkKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKICAgICAgICBwcmludHM6OgogICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIFsxMDBdCgogICAgICAgICAgICAjIG5lZ2F0aXZlIGludGVnZXIKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICBbLTEwMF0KCiAgICAgICAgICAgICMgZmxvYXQgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICBbMWUtMTJdCgogICAgICAgICAgICBTdWNjZXNzCiAgICAgICAgICAgIAogICAgICAgICAgICAjIHN0cmF5IGNoYXJhY3RlcgogICAgICAgICAgICAxMDBaCiAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgMyksIChsaW5lOjEsIGNvbDo0KQoKICAgICAgICAgICAgIyBtaXNzaW5nIGxlYWRpbmcgZGlnaXQgYmVmb3JlICcuJwogICAgICAgICAgICAtLjEwMAogICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIHtyZWFsIG51bWJlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24gfCByZWFsIG51bWJlciB8IHNpZ25lZCBpbnRlZ2VyfSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCgogICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAzLjE0LjE1OQogICAgICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCAoYXQgY2hhciA0KSwgKGxpbmU6MSwgY29sOjUpCgogICAgICAgICAgICBTdWNjZXNzCgogICAgICAgIEVhY2ggdGVzdCBzdHJpbmcgbXVzdCBiZSBvbiBhIHNpbmdsZSBsaW5lLiBJZiB5b3Ugd2FudCB0byB0ZXN0IGEgc3RyaW5nIHRoYXQgc3BhbnMgbXVsdGlwbGUKICAgICAgICBsaW5lcywgY3JlYXRlIGEgdGVzdCBsaWtlIHRoaXM6OgoKICAgICAgICAgICAgZXhwci5ydW5UZXN0KHIidGhpcyBpcyBhIHRlc3RcbiBvZiBzdHJpbmdzIHRoYXQgc3BhbnMgXG4gMyBsaW5lcyIpCiAgICAgICAgCiAgICAgICAgKE5vdGUgdGhhdCB0aGlzIGlzIGEgcmF3IHN0cmluZyBsaXRlcmFsLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBsZWFkaW5nICdy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ICAgIAogICAgVGhlIHJlc3VsdHMgZnJvbSBhIHN1Y2Nlc3NmdWwgcGFyc2Ugd2lsbCBjb250YWluIHRoZSBtYXRjaGVkIHRleHQgZnJvbSB0aGUgaW5wdXQgc3RyaW5nIGFuZCB0aGUgZm9sbG93aW5nIG5hbWVkIHJlc3VsdHM6CiAgICAgLSBDe21pc21hdGNoZXN9IC0gYSBsaXN0IG9mIHRoZSBwb3NpdGlvbnMgd2l0aGluIHRoZSBtYXRjaF9zdHJpbmcgd2hlcmUgbWlzbWF0Y2hlcyB3ZXJlIGZvdW5kCiAgICAgLSBDe29yaWdpbmFsfSAtIHRoZSBvcmlnaW5hbCBtYXRjaF9zdHJpbmcgdXNlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIGlucHV0IHN0cmluZwogICAgCiAgICBJZiBDe21pc21hdGNoZXN9IGlzIGFuIGVtcHR5IGxpc3QsIHRoZW4gdGhlIG1hdGNoIHdhcyBhbiBleGFjdCBtYXRjaC4KICAgIAogICAgRXhhbXBsZTo6CiAgICAgICAgcGF0dCA9IENsb3NlTWF0Y2goIkFUQ0FUQ0dBQVRHR0EiKQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FUQ0dBQVhHR0EiKSAjIC0+IChbJ0FUQ0FUQ0dBQVhHR0EnXSwgeydtaXNtYXRjaGVzJzogW1s5XV0sICdvcmlnaW5hbCc6IFsnQVRDQVRDR0FBVEdHQSddfSkKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBWENHQUFYR0dBIikgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkICdBVENBVENHQUFUR0dBJyAod2l0aCB1cCB0byAxIG1pc21hdGNoZXMpIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKCiAgICAgICAgIyBleGFjdCBtYXRjaAogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FUQ0dBQVRHR0EiKSAjIC0+IChbJ0FUQ0FUQ0dBQVRHR0EnXSwgeydtaXNtYXRjaGVzJzogW1tdXSwgJ29yaWdpbmFsJzogWydBVENBVENHQUFUR0dBJ119KQoKICAgICAgICAjIGNsb3NlIG1hdGNoIGFsbG93aW5nIHVwIHRvIDIg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eGNlcHQgZm9yIG9uZSBvciB0d28gY2hhcmFjdGVycywgZm9yIGluc3RhbmNlLgogICAgCiAgICBMe3NyYW5nZX0gaXMgdXNlZnVsIGZvciBkZWZpbmluZyBjdXN0b20gY2hhcmFjdGVyIHNldCBzdHJpbmdzIGZvciBkZWZpbmluZyAKICAgIEN7V29yZH0gZXhwcmVzc2lvbnMsIHVzaW5nIHJhbmdlIG5vdGF0aW9uIGZyb20gcmVndWxhciBleHByZXNzaW9uIGNoYXJhY3RlciBzZXRzLgogICAgCiAgICBBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHVzZSBDe1dvcmR9IHRvIG1hdGNoIGEgc3BlY2lmaWMgbGl0ZXJhbCBzdHJpbmcsIGFzIGluIAogICAgQ3tXb3JkKCJBZGRyZXNzIil9LiBSZW1lbWJlciB0aGF0IEN7V29yZH0gdXNlcyB0aGUgc3RyaW5nIGFyZ3VtZW50IHRvIGRlZmluZQogICAgSXtzZXRzfSBvZiBtYXRjaGFibGUgY2hhcmFjdGVycy4gVGhpcyBleHByZXNzaW9uIHdvdWxkIG1hdGNoICJBZGQiLCAiQUFBIiwKICAgICJkQXJlZCIsIG9yIGFueSBvdGhlciB3b3JkIG1hZGUgdXAgb2YgdGhlIGNoYXJhY3RlcnMgJ0EnLCAnZCcsICdyJywgJ2UnLCBhbmQgJ3MnLgogICAgVG8gbWF0Y2ggYW4gZXhhY3QgbGl0ZXJhbCBzdHJpbmcsIHVzZSBMe0xpdGVyYWx9IG9yIEx7S2V5d29yZH0uCgogICAgcHlwYXJzaW5nIGluY2x1ZGVzIGhlbHBlciBzdHJpbmdzIGZvciBidWlsZGluZyBXb3JkczoKICAgICAtIEx7YWxwaGFzfQogICAgIC0gTHtudW1zfQogICAgIC0gTHthbHBoYW51bXN9CiAgICAgLSBMe2hleG51bXN9CiAgICAgLSBMe2FscGhhczhiaXR9IChhbHBoYWJldGljIGNoYXJhY3RlcnMgaW4gQVNDSUkgcmFuZ2UgMTI4LTI1NSAtIGFjY2VudGVkLCB0aWxkZWQsIHVtbGF1dGVkLCBldGMuKQogICAgIC0gTHtwdW5jOGJpdH0gKG5vbi1hbHBoYWJldGljIGNoYXJhY3RlcnMgaW4g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ICBNYXkgYmUgY29uc3RydWN0ZWQgdXNpbmcgdGhlIEN7JyYnfSBvcGVyYXRvci4KCiAgICBFeGFtcGxlOjoKICAgICAgICBjb2xvciA9IG9uZU9mKCJSRUQgT1JBTkdFIFlFTExPVyBHUkVFTiBCTFVFIFBVUlBMRSBCTEFDSyBXSElURSBCUk9XTiIpCiAgICAgICAgc2hhcGVfdHlwZSA9IG9uZU9mKCJTUVVBUkUgQ0lSQ0xFIFRSSUFOR0xFIFNUQVIgSEVYQUdPTiBPQ1RBR09OIikKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIHNoYXBlX2F0dHIgPSAic2hhcGU6IiArIHNoYXBlX3R5cGUoInNoYXBlIikKICAgICAgICBwb3NuX2F0dHIgPSAicG9zbjoiICsgR3JvdXAoaW50ZWdlcigieCIpICsgJywnICsgaW50ZWdlcigieSIpKSgicG9zbiIpCiAgICAgICAgY29sb3JfYXR0ciA9ICJjb2xvcjoiICsgY29sb3IoImNvbG9yIikKICAgICAgICBzaXplX2F0dHIgPSAic2l6ZToiICsgaW50ZWdlcigic2l6ZSIpCgogICAgICAgICMgdXNlIEVhY2ggKHVzaW5nIG9wZXJhdG9yICcmJykgdG8gYWNjZXB0IGF0dHJpYnV0ZXMgaW4gYW55IG9yZGVyIAogICAgICAgICMgKHNoYXBlIGFuZCBwb3NuIGFyZSByZXF1aXJlZCwgY29sb3IgYW5kIHNpemUgYXJlIG9wdGlvbmFsKQogICAgICAgIHNoYXBlX3NwZWMgPSBzaGFwZV9hdHRyICYgcG9zbl9hdHRyICYgT3B0aW9uYWwoY29sb3JfYXR0cikgJiBPcHRpb25hbChzaXplX2F0dHIpCgogICAgICAgIHNoYXBlX3NwZWMucnVuVGVzdHMoJycnCiAgICAgICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgICAgIHNoYXBlOiBDSVJDTEUgc2l6ZTogNTAgY29sb3I6IEJMVUUgcG9zbjogNTAsODAKICAgICAgICAgICAgY29sb3I6R1JFRU4gc2l6ZToyMCBzaGFwZTpUUklBTkdMRSBwb3NuOjIwLDQwCiAgICAgICAgICAgICcnJwogICAgICAgICAgICApCiAgICBwcmludHM6OgogICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgWydzaGFwZTonLCAnU1FVQVJFJywgJ2NvbG9yOicsICdCTEFDSycsICdwb3NuOicsIFsnMTAwJywgJywnLCAnMTIwJ11dCiAgICAgICAgLSBjb2xvcjogQkxBQ0sKICAgICAgICAtIHBvc246IFsnMTAwJywgJywnLCAnMTIwJ10KICAgICAgICAgIC0geDogMTAwCiAgICAgICAgICAtIHk6IDEyMAogICAgICAgIC0gc2hhcGU6IFNRVUFSRQoKCiAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgIFsnc2hhcGU6JywgJ0NJUkNMRScsICdzaXplOicsICc1MCcsICdjb2xvcjonLCAnQkxVRScsICdwb3NuOicsIFsnNTAnLCAnLCcsICc4MCddXQogICAgICAgIC0gY29sb3I6IEJMVUUKICAgICAgICAtIHBvc246IFsnNTAnLCAnLCcsICc4MCddCiAgICAgICAgICAtIHg6IDUwCiAgICAgICAgICAtIHk6IDgwCiAgICAgICAgLSBzaGFwZTogQ0lSQ0xFCiAgICAgICAgLSBzaXplOiA1MAoKCiAgICAgICAgY29sb3I6IEdSRUVOIHNpemU6IDIwIHNoYXBlOiBUUklBTkdMRSBwb3NuOiAyMCw0MAogICAgICAgIFsnY29sb3I6JywgJ0dSRUVOJywgJ3NpemU6JywgJzIwJywgJ3NoYXBlOicsICdUUklBTkdMRScsICdwb3NuOicsIFsnMjAnLCAnLCcsICc0MCddXQogICAgICAgIC0gY29sb3I6IEdSRUVOCiAgICAgICAgLSBwb3NuOiBbJzIwJywgJywnLCAnNDAnXQogICAgICAgICAgLSB4OiAyMAogICAgICAgICAgLSB5OiA0MAogICAgICAgIC0gc2hhcGU6IFRSSUFOR0xFCiAgICAgICAgLSBzaXplOiAyMAogICAgVGMDAAAAAAAAAAAAAAADAAAABAAAAAMA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ICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgICAgICAxMjM0NQogICAgICAgICAgICAKICAgICAgICAgICAgIyBaSVArNCBmb3JtCiAgICAgICAgICAgIDEyMTAxLTAwMDEKICAgICAgICAgICAgCiAgICAgICAgICAgICMgaW52YWxpZCBaSVAKICAgICAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICcnJykKICAgIHByaW50czo6CiAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgIDEyMzQ1CiAgICAgICAgWycxMjM0NSddCgogICAgICAgICMgWklQKzQgZm9ybQogICAgICAgIDEyMTAxLTAwMDEKICAgICAgICBbJzEyMTAxLTAwMDEnXQoKICAgICAgICAjIGludmFsaWQgWklQCiAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICBeCiAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgNSksIChsaW5lOjEsIGNvbDo2KQogICAgYwMAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHMuAAAAdAB0AXwAgwJqAnwBZAFkAo0CAQB8AGoDagR8AF8EfAJ8AF8FZAN8AF8GZABTACkETkZyMwIAAFQpB3IcAgAAch0AAABypwAAAHJTAQAAcn0BAAByEAEAAHKBAQAAKQNypQAAAHJTAQAAcgsBAAByHQIAAHJ5AAAAcnoAAABypwAAAJ0PAABzCAAAAAABFAEKAQYBehFPcHRpb25hbC5fX2luaXRfX1RjBAAAAAAAAAAAAAAABQAAAAkAAABDAAAAc3oAAAB6HHwAagBqAXwBfAJ8A2QBZAKNBFwCfQJ9BFcAblQEAHQCdANmAmsKcnABAAEAAQB8AGoEdAVrCXJofABqAGoGcl50B3wAagRnAYMBfQR8AGoEfAR8AGoAagY8AHFsfABqBGcBfQRuBGcAfQRZAG4CWAB8AnwEZgJTAHK4AgAAKQhyUwEAAHKbAQAAciEAAABy3gAAAHIQAQAA2hNfb3B0aW9uYWxOb3RNYXRjaGVkcnwBAAByJAAAACkFcqUAAAByUgEAAHKgAAAAcpYBAABytQEAAHJ5AAAAcnkAAAByegAAAHKwAQAAow8AAHMUAAAAAAECARwBEgEKAQgBDAEQAgoCCgF6Ek9wdGlvbmFsLnBhcnNlSW1wbGMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAABzNAAAAHQAfABkAYMCchB8AGoBUwB8AGoCZABrCHIuZAJ0A3wAagSDARcAZAMXAHwAXwJ8AGoCUwApBE5yzQAAAHIkAQAAcicBAABytAIAAHKuAAAAcnkAAAByeQAAAHJ6AAAAcq8AAACxDwAAcwoAAAAAAQoBBgIKARQCehBPcHRpb25hbC5fX3N0cl9fKQFUKQlylgAAAHKXAAAAcpgAAAByuQAAAHK7AgAAcqcAAABysAEAAHKvAAAAcjECAAByeQAAAHJ5AAAAch0CAAByegAAAHIdAAAAeg8AAHMIAAAACAEEIhAGCg5jAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAcywAAABlAFoBZABaAmQBWgNkCYcAZgFkBGQFhAlaBGQKZAdkCIQBWgWHAAQAWgZTACkLcioAAABh/wkAAAogICAgVG9rZW4gZm9yIHNraXBwaW5nIG92ZXIgYWxsIHVuZGVmaW5lZCB0ZXh0IHVudGlsIHRoZSBtYXRjaGVkIGV4cHJlc3Npb24gaXMgZm91bmQuCgogICAgUGFyYW1ldGVyczoKICAgICAtIGV4cHIgLSB0YXJnZXQgZXhwcmVzc2lvbiBtYXJraW5nIHRoZSBlbmQgb2YgdGhlIGRhdGEgdG8gYmUgc2tpcHBlZAogICAgIC0gaW5jbHVkZSAtIChkZWZhdWx0PUN7RmFsc2V9KSBpZiBUcnVlLCB0aGUgdGFyZ2V0IGV4cHJlc3Npb24gaXMgYWxzbyBwYXJzZWQgCiAgICAgICAgICAodGhlIHNraXBwZWQgdGV4dCBhbmQgdGFyZ2V0IGV4cHJlc3Npb24gYXJlIHJldHVybmVkIGFzIGEgMi1lbGVtZW50IGxpc3QpLgogICAgIC0gaWdub3JlIC0gKGRlZmF1bHQ9Q3tOb25lfSkgdXNlZCB0byBkZWZpbmUgZ3JhbW1hcnMgKHR5cGljYWxseSBxdW90ZWQgc3RyaW5ncyBhbmQgCiAgICAgICAgICBjb21tZW50cykgdGhhdCBtaWdodCBjb250YWluIGZhbHNlIG1hdGNoZXMgdG8gdGhlIHRhcmdldCBleHByZXNzaW9uCiAgICAgLSBmYWlsT24gLSAoZGVmYXVsdD1De05vbmV9KSBkZWZpbmUgZXhwcmVzc2lvbnMgdGhhdCBhcmUgbm90IGFsbG93ZWQgdG8gYmUgCiAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgc2tpcHBlZCB0ZXN0OyBpZiBmb3VuZCBiZWZvcmUgdGhlIHRhcmdldCBleHByZXNzaW9uIGlzIGZvdW5kLCAKICAgICAgICAgIHRoZSBTa2lwVG8gaXMgbm90IGEgbWF0Y2gKCiAgICBFeGFtcGxlOjoKICAgICAgICByZXBvcnQgPSAnJycKICAgICAgICAgICAgT3V0c3RhbmRpbmcgSXNzdWVzIFJlcG9ydCAtIDEgSmFuIDIwMDAKCiAgICAgICAgICAgICAgICMgfCBTZXZlcml0eSB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIERheXMgT3BlbgogICAgICAgICAgICAtLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KICAgICAgICAgICAgIDEwMSB8IENyaXRpY2FsIHwgSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaCAgICAgICAgICAgICAgICAgfCAgICAgICAgICA2CiAgICAgICAgICAgICAgOTQgfCBDb3NtZXRpYyB8IFNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKSAgICAgICAgIHwgICAgICAgICAxNAogICAgICAgICAgICAgIDc5IHwgTWlub3IgICAgfCBTeXN0ZW0gc2xvdyB3aGVuIHJ1bm5pbmcgdG9vIG1hbnkgcmVwb3J0cyB8ICAgICAgICAgNDcKICAgICAgICAgICAgJycnCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBTRVAgPSBTdXBwcmVzcygnfCcpCiAgICAgICAgIyB1c2UgU2tpcFRvIHRvIHNpbXBseSBtYXRjaCBldmVyeXRoaW5nIHVwIHVudGlsIHRoZSBuZXh0IFNFUAogICAgICAgICMgLSBpZ25vcmUgcXVvdGVkIHN0cmluZ3MsIHNvIHRoYXQgYSAnfCcgY2hhcmFjdGVyIGluc2lkZSBhIHF1b3RlZCBzdHJpbmcgZG9lcyBub3QgbWF0Y2gKICAgICAgICAjIC0gcGFyc2UgYWN0aW9uIHdpbGwgY2FsbCB0b2tlbi5zdHJpcCgpIGZvciBlYWNoIG1hdGNoZWQgdG9rZW4sIGkuZS4sIHRoZSBkZXNjcmlwdGlvbiBib2R5CiAgICAgICAgc3RyaW5nX2RhdGEgPSBTa2lwVG8oU0VQLCBpZ25vcmU9cXVvdGVkU3RyaW5nKQogICAgICAgIHN0cmluZ19kYXRhLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHN0ci5zdHJpcCkpCiAgICAgICAgdGlja2V0X2V4cHIgPSAoaW50ZWdlcigiaXNzdWVfbnVtIikgKyBTRVAgCiAgICAgICAgICAgICAgICAgICAgICArIHN0cmluZ19kYXRhKCJzZXYiKSArIFNFUCAKICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nX2RhdGEoImRlc2MiKSArIFNFUCAKICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlcigiZGF5c19vcGVuIikpCiAgICAgICAgCiAgICAgICAgZm9yIHRrdCBpbiB0aWNrZXRfZXhwci5zZWFyY2hTdHJpbmcocmVwb3J0KToKICAgICAgICAgICAgcHJpbnQgdGt0LmR1bXAoKQogICAgcHJpbnRzOjoKICAgICAgICBbJzEwMScsICdDcml0aWNhbCcsICdJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoJywgJzYnXQogICAgICAgIC0gZGF5c19vcGVuOiA2CiAgICAgICAgLSBkZXNjOiBJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoCiAgICAgICAgLSBpc3N1ZV9udW06IDEwMQogICAgICAgIC0gc2V2OiBDcml0aWNhbAogICAgICAgIFsnOTQnLCAnQ29zbWV0aWMnLCAiU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpIiwgJzE0J10KICAgICAgICAtIGRheXNfb3BlbjogMTQKICAgICAgICAtIGRlc2M6IFNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKQog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Y29sdW1uIGNhbiBiZSB1c2VkIGFzIGEgaXRlbSBrZXkuCgogICAgRXhhbXBsZTo6CiAgICAgICAgZGF0YV93b3JkID0gV29yZChhbHBoYXMpCiAgICAgICAgbGFiZWwgPSBkYXRhX3dvcmQgKyBGb2xsb3dlZEJ5KCc6JykKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCgogICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBsaWdodCBibHVlIHRleHR1cmU6IGJ1cmxhcCIKICAgICAgICBhdHRyX2V4cHIgPSAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCiAgICAgICAgCiAgICAgICAgIyBwcmludCBhdHRyaWJ1dGVzIGFzIHBsYWluIGdyb3VwcwogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKICAgICAgICAKICAgICAgICAjIGluc3RlYWQgb2YgT25lT3JNb3JlKGV4cHIpLCBwYXJzZSB1c2luZyBEaWN0KE9uZU9yTW9yZShHcm91cChleHByKSkpIC0gRGljdCB3aWxsIGF1dG8tYXNzaWduIG5hbWVzCiAgICAgICAgcmVzdWx0ID0gRGljdChPbmVPck1vcmUoR3JvdXAoYXR0cl9leHByKSkpLnBhcnNlU3RyaW5nKHRleHQpCiAgICAgICAgcHJpbnQocmVzdWx0LmR1bXAoKSkKICAgICAgICAKICAgICAgICAjIGFjY2VzcyBuYW1lZCBmaWVsZHMgYXMgZGljdCBlbnRyaWVzLCBvciBvdXRwdXQgYXMgZGljdAogICAgICAgIHByaW50KHJlc3VsdFsnc2hhcGUnXSkgICAgICAgIAogICAgICAgIHByaW50KHJlc3VsdC5hc0RpY3QoKSkKICAgIHByaW50czo6CiAg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AAAAcpgAAAByuQAAAHKnAAAAcgkCAAByyQIAAHJ5AAAAcnkAAAByeQAAAHJ6AAAAchwAAAAmEQAAcwgAAAAIAQQDCAMIBmMBAAAAAAAAAAAAAAACAAAACAAAAAMAAABzOgAAAHQAiACDAYkAhwBmAWQBZAKECH0BegyIAGoBfAFfAVcAbhQEAHQCawpyNAEAAQABAFkAbgJYAHwBUwApA2F0AwAACiAgICBEZWNvcmF0b3IgZm9yIGRlYnVnZ2luZyBwYXJzZSBhY3Rpb25zLiAKICAgIAogICAgV2hlbiB0aGUgcGFyc2UgYWN0aW9uIGlzIGNhbGxlZCwgdGhpcyBkZWNvcmF0b3Igd2lsbCBwcmludCBDeyI+PiBlbnRlcmluZyBJe21ldGhvZC1uYW1lfShsaW5lOkl7Y3VycmVudF9zb3VyY2VfbGluZX0sIEl7cGFyc2VfbG9jYXRpb259LCBJe21hdGNoZWRfdG9rZW5zfSkiLn0KICAgIFdoZW4gdGhlIHBhcnNlIGFjdGlvbiBjb21wbGV0ZXMsIHRoZSBkZWNvcmF0b3Igd2lsbCBwcmludCBDeyI8PCJ9IGZvbGxvd2VkIGJ5IHRoZSByZXR1cm5lZCB2YWx1ZSwgb3IgYW55IGV4Y2VwdGlvbiB0aGF0IHRoZSBwYXJzZSBhY3Rpb24gcmFpc2VkLgoKICAgIEV4YW1wbGU6OgogICAgICAgIHdkID0gV29yZChhbHBoYXMpCgogICAgICAgIEB0cmFjZVBhcnNlQWN0aW9uCiAgICAgICAgZGVmIHJlbW92ZV9kdXBsaWNhdGVfY2hhcnModG9rZW5zKToKICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4oc29ydGVkKHNldCgnJy5qb2luKHRva2VucykpKSkKCiAgICAgICAgd2RzID0gT25lT3JNb3JlKHdkKS5zZXRQYXJzZUFjdGlvbihyZW1vdmVfZHVwbGljYXRlX2NoYXJzKQogICAgICAgIHByaW50KHdkcy5wYXJzZVN0cmluZygic2xrZGpzIHNsZCBzbGRkIHNkbGYgc2RsamYiKSkKICAgIHByaW50czo6CiAgICAgICAgPj5lbnRlcmluZyByZW1vdmVfZHVwbGljYXRlX2NoYXJzKGxpbmU6ICdzbGtkanMgc2xkIHNs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gwEXAGQKFwChAVMAKQthOgMAAAogICAgSGVscGVyIHRvIGRlZmluZSBhIGNvdW50ZWQgbGlzdCBvZiBleHByZXNzaW9ucy4KICAgIFRoaXMgaGVscGVyIGRlZmluZXMgYSBwYXR0ZXJuIG9mIHRoZSBmb3JtOjoKICAgICAgICBpbnRlZ2VyIGV4cHIgZXhwciBleHByLi4uCiAgICB3aGVyZSB0aGUgbGVhZGluZyBpbnRlZ2VyIHRlbGxzIGhvdyBtYW55IGV4cHIgZXhwcmVzc2lvbnMgZm9sbG93LgogICAgVGhlIG1hdGNoZWQgdG9rZW5zIHJldHVybnMgdGhlIGFycmF5IG9mIGV4cHIgdG9rZW5zIGFzIGEgbGlzdCAtIHRoZSBsZWFkaW5nIGNvdW50IHRva2VuIGlzIHN1cHByZXNzZWQuCiAgICAKICAgIElmIEN7aW50RXhwcn0gaXMgc3BlY2lmaWVkLCBpdCBzaG91bGQgYmUgYSBweXBhcnNpbmcgZXhwcmVzc2lvbiB0aGF0IHByb2R1Y2VzIGFuIGludGVnZXIgdmFsdWUuCgogICAgRXhhbXBsZTo6CiAgICAgICAgY291bnRlZEFycmF5KFdvcmQoYWxwaGFzKSkucGFyc2VTdHJpbmcoJzIgYWIgY2QgZWYnKSAgIyAtPiBbJ2FiJywgJ2NkJ10KCiAgICAgICAgIyBpbiB0aGlzIHBhcnNlciwgdGhlIGxlYWRpbmcgaW50ZWdlciB2YWx1ZSBpcyBnaXZlbiBpbiBiaW5hcnksCiAgICAgICAgIyAnMTAnIGluZGljYXRpbmcgdGhhdCAyIHZhbHVlcyBhcmUgaW4gdGhlIGFycmF5CiAgICAgICAgYmluYXJ5Q29uc3RhbnQgPSBXb3JkKCcwMScpLnNldFBhcnNlQWN0aW9uKGxhbWJkYSB0OiBpbnQodFswXSwgMikpCiAgICAgICAgY291bnRlZEFycmF5KFdvcmQoYWxwaGFzKSwgaW50RXhwcj1iaW5hcnlDb25zdGFudCkucGFyc2VTdHJpbmcoJzEwIGFiIGNkIGVmJykgICMgLT4gWydhYicsICdjZCddCiAgICBjAwAAAAAAAAAAAAAABAAAAAUAAAATAAAAcy4AAAB8AmQBGQB9A4gAfANyIHQAdAGIAWcBfAMU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dXBwcmVzc2VkLCB0aGVyZWJ5IGxlYXZpbmcgdGhlIHNpZ25pZmljYW50IGtleSB0ZXh0LiAgVGhlIHZhbHVlCiAgICBwYXR0ZXJuIGNhbiBpbmNsdWRlIG5hbWVkIHJlc3VsdHMsIHNvIHRoYXQgdGhlIEN7RGljdH0gcmVzdWx0cyBjYW4gaW5jbHVkZSBuYW1lZCB0b2tlbgogICAgZmllbGRzLgoKICAgIEV4YW1wbGU6OgogICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBsaWdodCBibHVlIHRleHR1cmU6IGJ1cmxhcCIKICAgICAgICBhdHRyX2V4cHIgPSAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCiAgICAgICAgcHJpbnQoT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkuZHVtcCgpKQogICAgICAgIAogICAgICAgIGF0dHJfbGFiZWwgPSBsYWJlbAogICAgICAgIGF0dHJfdmFsdWUgPSBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikKCiAgICAgICAgIyBzaW1pbGFyIHRvIERpY3QsIGJ1dCBzaW1wbGVyIGNhbGwgZm9ybWF0CiAgICAgICAgcmVzdWx0ID0gZGljdE9mKGF0dHJfbGFiZWwsIGF0dHJfdmFsdWUpLnBhcnNlU3RyaW5nKHRleHQpCiAgICAgICAgcHJpbnQocmVzdWx0LmR1bXAoKSkKICAgICAgICBwcmludChyZXN1bHRbJ3NoYXBlJ10pCiAgICAgICAgcHJpbnQocmVzdWx0LnNoYXBlKSAgIyBvYmplY3QgYXR0cmlidXRlIGFjY2VzcyB3b3JrcyB0b28KICAgICAgICBwcmludChyZXN1bHQuYXNEaWN0KCkpCiAgICBwcmludHM6OgogICAgICAgIFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24nLCAndXBwZXIgbGVm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aW4gZWl0aGVyIHVwcGVyIG9yIGxvd2VyIGNhc2UsIGF0dHJpYnV0ZXMgd2l0aCBuYW1lc3BhY2VzIGFuZCB3aXRoIHF1b3RlZCBvciB1bnF1b3RlZCB2YWx1ZXMuCgogICAgRXhhbXBsZTo6CiAgICAgICAgdGV4dCA9ICc8dGQ+TW9yZSBpbmZvIGF0IHRoZSA8YSBocmVmPSJodHRwOi8vcHlwYXJzaW5nLndpa2lzcGFjZXMuY29tIj5weXBhcnNpbmc8L2E+IHdpa2kgcGFnZTwvdGQ+JwogICAgICAgICMgbWFrZUhUTUxUYWdzIHJldHVybnMgcHlwYXJzaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyB0YWdzIGFzIGEgMi10dXBsZQogICAgICAgIGEsYV9lbmQgPSBtYWtlSFRNTFRhZ3MoIkEiKQogICAgICAgIGxpbmtfZXhwciA9IGEgKyBTa2lwVG8oYV9lbmQpKCJsaW5rX3RleHQiKSArIGFfZW5kCiAgICAgICAgCiAgICAgICAgZm9yIGxpbmsgaW4gbGlua19leHByLnNlYXJjaFN0cmluZyh0ZXh0KToKICAgICAgICAgICAgIyBhdHRyaWJ1dGVzIGluIHRoZSA8QT4gdGFnIChsaWtlICJocmVmIiBzaG93biBoZXJlKSBhcmUgYWxzbyBhY2Nlc3NpYmxlIGFzIG5hbWVkIHJlc3VsdHMKICAgICAgICAgICAgcHJpbnQobGluay5saW5rX3RleHQsICctPicsIGxpbmsuaHJlZikKICAgIHByaW50czo6CiAgICAgICAgcHlwYXJzaW5nIC0+IGh0dHA6Ly9weXBhcnNpbmcud2lraXNwYWNlcy5jb20KICAgIEapAXIAAwAAqQFy/wIAAHJ5AAAAcnkAAAByegAAAHJNAAAAKBMAAHMCAAAAABFjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcwoAAAB0AHwAZAGDAlMAKQJ6ugogICAgSGVscGVyIHRvIGNvbnN0cnVjdCBvcGVuaW5nIGFuZCBjbG9zaW5nIHRhZyBleHByZXNzaW9ucyBmb3IgWE1MLCBnaXZlbiBhIHRhZyBuYW1lLiBNYXRjaGVzCiAgICB0YWdzIG9ubHkgaW4gdGhlIGdpdmVuIHVwcGVyL2xvd2VyIGNhc2UuCgogICAgRXhhbXBsZTogc2ltaWxhciB0byBMe21ha2VIVE1MVGFnc30KICAgIFRyAQMAAHICAwAAcnkAAAByeQAAAHJ6AAAAck4AAAA7EwAAcwIAAAAAB2MAAAAAAAAAAAAAAAADAAAAAwAAAA8AAABzOAAAAHwAchJ8AGQBZAGFAhkAiQBuCHwBoAChAIkAZAJkA4QAiABEAIMBiQCHAGYBZARkBYQIfQJ8AlMAKQZhPAgAAAogICAgSGVscGVyIHRvIGNyZWF0ZSBhIHZhbGlkYXRpbmcgcGFyc2UgYWN0aW9uIHRvIGJlIHVzZWQgd2l0aCBzdGFydCB0YWdzIGNyZWF0ZWQKICAgIHdpdGggQ3tMe21ha2VYTUxUYWdzfX0gb3IgQ3tMe21ha2VIVE1MVGFnc319LiBVc2UgQ3t3aXRoQXR0cmlidXRlfSB0byBxdWFsaWZ5IGEgc3RhcnRpbmcgdGFnCiAgICB3aXRoIGEgcmVxdWlyZWQgYXR0cmlidXRlIHZhbHVlLCB0byBhdm9pZCBmYWxzZSBtYXRjaGVzIG9uIGNvbW1vbiB0YWdzIHN1Y2ggYXMKICAgIEN7PFREPn0gb3IgQ3s8RElWPn0uCgogICAgQ2FsbCBDe3dpdGhBdHRyaWJ1dGV9IHdpdGggYSBzZXJpZXMgb2YgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMuIFNwZWNpZnkgdGhlIGxpc3QKICAgIG9mIGZpbHRlciBhdHRyaWJ1dGVzIG5hbWVzIGFuZCB2YWx1ZXMgYXM6CiAgICAgLSBrZXl3b3JkIGFyZ3VtZW50cywgYXMgaW4gQ3soYWxpZ249InJpZ2h0Iil9LCBvcgogICAgIC0gYXMgYW4gZXhwbGljaXQgZGljdCB3aXRoIEN7Kip9IG9wZXJhdG9yLCB3aGVuIGFuIGF0dHJpYnV0ZSBuYW1lIGlzIGFsc28gYSBQeXRob24KICAgICAgICAgIHJlc2VydmVkIHdvcmQsIGFzIGluIEN7Kip7ImNsYXNzIjoiQ3VzdG9tZXIiLCAiYWxpZ24iOiJyaWdodCJ9fQogICAgIC0gYSBsaXN0IG9mIG5hbWUtdmFsdWUgdHVwbGVzLCBhcyBpbiAoICgibnMxOmNsYXNzIiwgIkN1c3RvbWVyIiksICgibnMyOmFsaWduIiwicmlnaHQiKSApCiAgICBGb3IgYXR0cmlidXRlIG5hbWVzIHdpdGggYSBuYW1lc3BhY2UgcHJlZml4LCB5b3UgbXVzdCB1c2UgdGhlIHNlY29uZCBmb3JtLiAgQXR0cmlidXRlCiAgICBuYW1lcyBhcmUgbWF0Y2hlZCBpbnNlbnNpdGl2ZSB0byB1cHBlci9sb3dlciBjYXNlLgogICAgICAgCiAgICBJZiBqdXN0IHRlc3RpbmcgZm9yIEN7Y2xhc3N9ICh3aXRoIG9yIHdpdGhvdXQgYSBuYW1lc3BhY2UpLCB1c2UgQ3tMe3dpdGhDbGFzc319LgoKICAgIFRvIHZlcmlmeSB0aGF0IHRoZSBhdHRyaWJ1dGUgZXhpc3RzLCBidXQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgdmFsdWUsIHBhc3MKICAgIEN7d2l0aEF0dHJpYnV0ZS5BTllfVkFMVUV9IGFzIHRoZSB2YWx1ZS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBodG1sID0gJycnCiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIFNvbWUgdGV4dAogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyaWQiPjEgNCAwIDEgMDwvZGl2PgogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyYXBoIj4xLDMgMiwzIDEsMTwvZGl2PgogICAgICAgICAgICA8ZGl2PnRoaXMgaGFzIG5vIHR5cGU8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAnJycKICAgICAgICBkaXYsZGl2X2VuZCA9IG1ha2VIVE1MVGFncygiZGl2IikKCiAgICAgICAgIyBvbmx5IG1hdGNoIGRpdiB0YWcgaGF2aW5nIGEgdHlwZSBhdHRyaWJ1dGUgd2l0aCB2YWx1ZSAiZ3JpZCIKICAgICAgICBkaXZfZ3JpZCA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhBdHRyaWJ1dGUodHlwZT0iZ3JpZCIpKQogICAgICAgIGdyaWRfZXhwciA9IGRpdl9ncmlkICsgU2tpcFRvKGRpdiB8IGRpdl9lbmQpKCJib2R5IikK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fAh8DxcAgwEXAIMBFwB9EG4cdAd8BXwPFwCDAXQIfAV0CXwPgwEXAIMBFwB9EG5EfAlkBGsCkAJyOHQHfAV8DRcAfA8XAHwOFwB8DxcAgwF0CHwFfA0XAHwPFwB8DhcAfA8XAIMBFwB9EG4IdANkCoMBggFuCHQDZAuDAYIBfAuQAnJ2dAt8C3QOdA9mAoMCkAJybHwQahB8C44AAQBuCnwQoBB8C6EBAQB8D3wQoAR8DKEBfAVCAEsAfQ98D30FcR58BHwFSwB9BHwEUwApDGFECgAACiAgICBIZWxwZXIgbWV0aG9kIGZvciBjb25zdHJ1Y3RpbmcgZ3JhbW1hcnMgb2YgZXhwcmVzc2lvbnMgbWFkZSB1cCBvZgogICAgb3BlcmF0b3JzIHdvcmtpbmcgaW4gYSBwcmVjZWRlbmNlIGhpZXJhcmNoeS4gIE9wZXJhdG9ycyBtYXkgYmUgdW5hcnkgb3IKICAgIGJpbmFyeSwgbGVmdC0gb3IgcmlnaHQtYXNzb2NpYXRpdmUuICBQYXJzZSBhY3Rpb25zIGNhbiBhbHNvIGJlIGF0dGFjaGVkCiAgICB0byBvcGVyYXRvciBleHByZXNzaW9ucy4gVGhlIGdlbmVyYXRlZCBwYXJzZXIgd2lsbCBhbHNvIHJlY29nbml6ZSB0aGUgdXNlIAogICAgb2YgcGFyZW50aGVzZXMgdG8gb3ZlcnJpZGUgb3BlcmF0b3IgcHJlY2VkZW5jZXMgKHNlZSBleGFtcGxlIGJlbG93KS4KICAgIAogICAgTm90ZTogaWYgeW91IGRlZmluZSBhIGRlZXAgb3BlcmF0b3IgbGlzdCwgeW91IG1heSBzZWUgcGVyZm9ybWFuY2UgaXNzdWVzCiAgICB3aGVuIHVzaW5nIGluZml4Tm90YXRpb24uIFNlZSBMe1BhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdH0gZm9yIGEKICAgIG1lY2hhbmlzbSB0byBwb3RlbnRpYWxseSBpbXByb3ZlIHlvdXIgcGFyc2VyIHBlcmZvcm1hbmNlLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBiYXNlRXhwciAtIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBtb3N0IGJhc2ljIGVsZW1lbnQgZm9yIHRoZSBuZXN0ZWQKICAgICAtIG9wTGlzdCAtIGxpc3Qgb2YgdHVwbGVzLCBvbmUgZm9yIGVhY2ggb3BlcmF0b3IgcHJlY2VkZW5jZSBsZXZlbCBpbiB0aGUKICAgICAgZXhwcmVzc2lvbiBncmFtbWFyOyBlYWNoIHR1cGxlIGlzIG9mIHRoZSBmb3JtCiAgICAgIChvcEV4cHIsIG51bVRlcm1zLCByaWdodExlZnRBc3NvYywgcGFyc2VBY3Rpb24pLCB3aGVyZToKICAgICAgIC0gb3BFeHByIGlzIHRoZSBweXBhcnNpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9wZXJhdG9yOwogICAgICAgICAgbWF5IGFsc28gYmUgYSBzdHJpbmcsIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgTGl0ZXJhbDsKICAgICAgICAgIGlmIG51bVRlcm1zIGlzIDMsIG9wRXhwciBpcyBhIHR1cGxlIG9mIHR3byBleHByZXNzaW9ucywgZm9yIHRoZQogICAgICAgICAgdHdvIG9wZXJhdG9ycyBzZXBhcmF0aW5nIHRoZSAzIHRlcm1zCiAgICAgICAtIG51bVRlcm1zIGlzIHRoZSBudW1iZXIgb2YgdGVybXMgZm9yIHRoaXMgb3BlcmF0b3IgKG11c3QKICAgICAgICAgIGJlIDEsIDIsIG9yIDMpCiAgICAgICAtIHJpZ2h0TGVmdEFzc29jIGlzIHRoZSBpbmRpY2F0b3Igd2hldGhlciB0aGUgb3BlcmF0b3IgaXMKICAgICAgICAgIHJpZ2h0IG9yIGxlZnQgYXNzb2NpYXRpdmUsIHVzaW5nIHRoZSBweXBhcnNpbmctZGVmaW5lZAogICAgICAgICAgY29uc3RhbnRzIEN7b3BBc3NvYy5SSUdIVH0gYW5kIEN7b3BBc3NvYy5MRUZUfS4KICAgICAgIC0gcGFyc2VBY3Rpb24gaXMgdGhlIHBhcnNlIGFjdGlvbiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAgIGV4cHJlc3Npb25zIG1hdGNoaW5nIHRoaXMgb3BlcmF0b3IgZXhwcmVzc2lvbiAodGhlCiAgICAgICAgICBwYXJzZSBhY3Rpb24gdHVwbGUgbWVtYmVyIG1heSBiZSBvbWl0dGVkKTsgaWYgdGhlIHBhcnNlIGFjdGlvbgogICAgICAgICAgaXMgcGFzc2VkIGEgdHVwbGUgb3IgbGlzdCBvZiBmdW5jdGlvbnMsIHRoaXMgaXMgZXF1aXZhbGVudCB0bwogICAgICAgICAgY2FsbGluZyBDe3NldFBhcnNlQWN0aW9uKCpmbil9IChMe1BhcnNlckVsZW1lbnQuc2V0UGFyc2VBY3Rpb259KQogICAgIC0gbHBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIGxlZnQtcGFyZW50aGVzZXMgKGRlZmF1bHQ9Q3tTdXBwcmVzcygnKCcpfSkKICAgICAtIHJwYXIgLSBleHByZXNzaW9uIGZvciBtYXRjaGluZyByaWdodC1wYXJlbnRoZXNlcyAoZGVmYXVsdD1De1N1cHByZXNzKCcpJyl9KQoKICAgIEV4YW1wbGU6OgogICAgICAgICMgc2ltcGxlIGV4YW1wbGUgb2YgZm91ci1mdW5jdGlvbiBhcml0aG1ldGljIHdpdGggaW50cyBhbmQgdmFyaWFibGUgbmFtZXMKICAgICAgICBpbnRlZ2VyID0gcHlwYXJzaW5nX2NvbW1vbi5zaWduZWRfaW50ZWdlcgogICAgICAgIHZhcm5hbWUgPSBweXBhcnNpbmdfY29tbW9uLmlkZW50aWZpZXIgCiAgICAgICAgCiAgICAgICAgYXJpdGhfZXhwciA9IGluZml4Tm90YXRpb24oaW50ZWdlciB8IHZhcm5hbWUsCiAgICAgICAgICAgIFsKICAgICAgICAgICAgKCctJywgMSwgb3BBc3NvYy5SSUdIVCksCiAgICAgICAgICAgIChvbmVPZignKiAvJyksIDIsIG9wQXNzb2MuTEVGVCksCiAgICAgICAgICAgIChvbmVPZignKyAtJyksIDIsIG9wQXNzb2MuTEVGVCksCiAgICAgICAgICAgIF0pCiAgICAgICAgCiAgICAgICAgYXJpdGhfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgNSszKjYKICAgICAgICAgICAgKDUrMykqNgogICAgICAgICAgICAtMi0tMTEKICAgICAgICAgICAgJycnLCBmdWxsRHVtcD1GYWxzZSkKICAgIHByaW50czo6CiAgICAgICAgNSsz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cyB3aXRoaW4gdGhlIG5lc3RlZCBsaXN0cyAoZGVmYXVsdD1De05vbmV9KQogICAgIC0gaWdub3JlRXhwciAtIGV4cHJlc3Npb24gZm9yIGlnbm9yaW5nIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGVsaW1pdGVycyAoZGVmYXVsdD1De3F1b3RlZFN0cmluZ30pCgogICAgSWYgYW4gZXhwcmVzc2lvbiBpcyBub3QgcHJvdmlkZWQgZm9yIHRoZSBjb250ZW50IGFyZ3VtZW50LCB0aGUgbmVzdGVkCiAgICBleHByZXNzaW9uIHdpbGwgY2FwdHVyZSBhbGwgd2hpdGVzcGFjZS1kZWxpbWl0ZWQgY29udGVudCBiZXR3ZWVuIGRlbGltaXRlcnMKICAgIGFzIGEgbGlzdCBvZiBzZXBhcmF0ZSB2YWx1ZXMuCgogICAgVXNlIHRoZSBDe2lnbm9yZUV4cHJ9IGFyZ3VtZW50IHRvIGRlZmluZSBleHByZXNzaW9ucyB0aGF0IG1heSBjb250YWluCiAgICBvcGVuaW5nIG9yIGNsb3NpbmcgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBvcGVuaW5nCiAgICBvciBjbG9zaW5nIGNoYXJhY3RlcnMgZm9yIG5lc3RpbmcsIHN1Y2ggYXMgcXVvdGVkU3RyaW5nIG9yIGEgY29tbWVudAogICAgZXhwcmVzc2lvbi4gIFNwZWNpZnkgbXVsdGlwbGUgZXhwcmVzc2lvbnMgdXNpbmcgYW4gQ3tMe09yfX0gb3IgQ3tMe01hdGNoRmlyc3R9fS4KICAgIFRoZSBkZWZhdWx0IGlzIEx7cXVvdGVkU3RyaW5nfSwgYnV0IGlmIG5vIGV4cHJlc3Npb25zIGFyZSB0byBiZSBpZ25vcmVkLAogICAgdGhlbiBwYXNzIEN7Tm9uZX0gZm9yIHRoaXMgYXJndW1lbnQuCgogICAgRXhhbXBsZTo6CiAgICAgICAgZGF0YV90eXBlID0gb25lT2YoInZvaWQgaW50IHNob3J0IGxvbmcgY2hhciBmbG9hdCBkb3VibGUiKQogICAgICAgIGRlY2xfZGF0YV90eXBlID0gQ29tYmluZShkYXRhX3R5cGUgKyBPcHRpb25hbChXb3JkKCcqJykpKQogICAgICAgIGlkZW50ID0gV29yZChhbHBoYXMrJ18nLCBhbHBoYW51bXMrJ18nKQogICAgICAgIG51bWJlciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyCiAgICAgICAgYXJnID0gR3JvdXAoZGVjbF9kYXRhX3R5cGUgKyBpZGVudCkKICAgICAgICBMUEFSLFJQQVIgPSBtYXAoU3VwcHJlc3MsICIoKSIpCgogICAgICAgIGNvZGVfYm9keSA9IG5lc3RlZEV4cHIoJ3snLCAnfScsIGlnbm9yZUV4cHI9KHF1b3RlZFN0cmluZyB8IGNTdHlsZUNvbW1lbnQpKQoKICAgICAgICBjX2Z1bmN0aW9uID0gKGRlY2xfZGF0YV90eXBlKCJ0eXBlIikgCiAgICAgICAgICAgICAgICAgICAgICArIGlkZW50KCJuYW1lIikKICAgICAgICAgICAgICAgICAgICAgICsgTFBBUiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QoYXJnKSwgW10pKCJhcmdzIikgKyBSUEFSIAogICAgICAgICAgICAgICAgICAgICAgKyBjb2RlX2JvZHkoImJvZHkiKSkKICAgICAgICBjX2Z1bmN0aW9uLmlnbm9yZShjU3R5bGVDb21tZW50KQogICAgICAgIAogICAgICAgIHNvdXJjZV9jb2RlID0gJycnCiAgICAgICAgICAgIGludCBpc19vZGQoaW50IHgpIHsgCiAgICAgICAgICAgICAgICByZXR1cm4gKHglMik7IAogICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgaW50IGRlY190b19oZXgoY2hhciBoY2hhcikgeyAKICAgICAgICAgICAgICAgIGlmIChoY2hhciA+PSAnMCcgJiYgaGNoYXIgPD0gJzknKSB7IAogICAgICAgICAgICAgICAgICAgIHJldHVybiAob3JkKGhjaGFyKS1vcmQoJzAnKSk7IAogICAgICAgICAgICAgICAgfSBlbHNlIHsgCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgxMCtvcmQoaGNoYXIpLW9yZCgnQScpKTsKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0K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aGV0aGVyIGJsb2NrIG11c3QgYmUgaW5kZW50ZWQgYmV5b25kIHRoZQogICAgICAgICAgICB0aGUgY3VycmVudCBsZXZlbDsgc2V0IHRvIEZhbHNlIGZvciBibG9jayBvZiBsZWZ0LW1vc3Qgc3RhdGVtZW50cwogICAgICAgICAgICAoZGVmYXVsdD1De1RydWV9KQoKICAgIEEgdmFsaWQgYmxvY2sgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBDe2Jsb2NrU3RhdGVtZW50fS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhID0gJycnCiAgICAgICAgZGVmIEEoeik6CiAgICAgICAgICBBMQogICAgICAgICAgQiA9IDEwMAogICAgICAgICAgRyA9IEEyCiAgICAgICAgICBBMgogICAgICAgICAgQTMKICAgICAgICBCCiAgICAgICAgZGVmIEJCKGEsYixjKToKICAgICAgICAgIEJCMQogICAgICAgICAgZGVmIEJCQSgpOgogICAgICAgICAgICBiYmExCiAgICAgICAgICAgIGJiYTIKICAgICAgICAgICAgYmJhMwogICAgICAgIEMKICAgICAgICBECiAgICAgICAgZGVmIHNwYW0oeCx5KToKICAgICAgICAgICAgIGRlZiBlZ2dzKHopOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAnJycKCgogICAgICAgIGluZGVudFN0YWNrID0gWzFdCiAgICAgICAgc3RtdCA9IEZvcndhcmQoKQoKICAgICAgICBpZGVudGlmaWVyID0gV29yZChhbHBoYXMsIGFscGhhbnVtcykKICAgICAgICBmdW5jRGVjbCA9ICgiZGVmIiArIGlkZW50aWZpZXIgKyBHcm91cCggIigiICsgT3B0aW9uYWwoIGRlbGltaXRlZExpc3QoaWRlbnRpZmllcikgKSArICIpIiApICsgIjoiKQogICAgICAgIGZ1bmNfYm9keSA9IGluZGVudGVkQmxvY2soc3RtdCwgaW5kZW50U3RhY2spCiAgICAgICAgZnVuY0RlZiA9IEdyb3VwKCBmdW5jRGVjbCArIGZ1bmNfYm9keSApCgogICAgICAgIHJ2YWx1ZSA9IEZvcndhcmQoKQogICAgICAgIGZ1bmNDYWxsID0gR3JvdXAoaWRlbnRpZmllciArICIoIiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QocnZhbHVlKSkgKyAiKSIpCiAgICAgICAgcnZhbHVlIDw8IChmdW5jQ2FsbCB8IGlkZW50aWZpZXIgfCBXb3JkKG51bXMpKQogICAgICAgIGFzc2lnbm1lbnQgPSBHcm91cChpZGVudGlmaWVyICsgIj0iICsgcnZhbHVlKQogICAgICAgIHN0bXQgPDwgKCBmdW5jRGVmIHwgYXNzaWdubWVudCB8IGlkZW50aWZpZXIgKQoKICAgICAgICBtb2R1bGVfYm9keSA9IE9uZU9yTW9yZShzdG10KQoKICAgICAgICBwYXJzZVRyZWUgPSBtb2R1bGVfYm9keS5wYXJzZVN0cmluZyhkYXRhKQogICAgICAgIHBhcnNlVHJlZS5wcHJpbnQoKQogICAgcHJpbnRzOjoKICAgICAgICBbWydkZWYnLAogICAgICAgICAgJ0EnLAogICAgICAgICAgWycoJywgJ3onLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1snQTEnXSwgW1snQicsICc9JywgJzEwMCddXSwgW1snRycsICc9JywgJ0EyJ11dLCBbJ0EyJ10sIFsnQTMnXV1dLAogICAgICAgICAnQicsCiAgICAgICAgIFsnZGVmJywKICAgICAgICAgICdCQicsCiAgICAgICAgICBbJygnLCAnYScsICdiJywgJ2MnLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1snQkIxJ10sIFtbJ2RlZicsICdCQkEnLCBbJygnLCAnKSddLCAnOicsIFtbJ2JiYTEnXSwgWydiYmEyJ10sIFsnYmJhMyddXV1dXV0sCiAgICAgICAgICdDJywKICAgICAgICAgJ0QnLAogICAgICAgICBbJ2RlZicsCiAgICAgICAgICAnc3BhbScsCiAgICAgICAgICBbJygnLCAneCcsICd5JywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbWydkZWYnLCAnZWdncycsIFsnKCcsICd6JywgJyknXSwgJzonLCBbWydwYXNzJ11dXV1dXV0gCiAgICBjAwAAAAAA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VUlEPHV1aWQ+fQogICAgIC0gTHtjb21tYS1zZXBhcmF0ZWQgbGlzdDxjb21tYV9zZXBhcmF0ZWRfbGlzdD59CiAgICBQYXJzZSBhY3Rpb25zOgogICAgIC0gQ3tMe2NvbnZlcnRUb0ludGVnZXJ9fQogICAgIC0gQ3tMe2NvbnZlcnRUb0Zsb2F0fX0KICAgICAtIEN7THtjb252ZXJ0VG9EYXRlfX0KICAgICAtIEN7THtjb252ZXJ0VG9EYXRldGltZX19CiAgICAgLSBDe0x7c3RyaXBIVE1MVGFnc319CiAgICAgLSBDe0x7dXBjYXNlVG9rZW5zfX0KICAgICAtIEN7THtkb3duY2FzZVRva2Vuc319CgogICAgRXhhbXBsZTo6CiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgKzEwMAogICAgICAgICAgICAzLjE0MTU5CiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmZudW1iZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgZmxvYXQKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgKzEwMAogICAgICAgICAgICAzLjE0MTU5CiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmhleF9pbnRlZ2VyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGhleCBudW1iZXJzCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICBGRgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uZnJhY3Rpb24ucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgZnJhY3Rpb25zCiAgICAgICAgICAgIDEvMgogICAgICAgICAgICAtMy80CiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5taXhlZF9pbnRlZ2VyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIG1peGVkIGZyYWN0aW9ucwogICAgICAgICAgICAxCiAgICAgICAgICAgIDEvMgogICAgICAgICAgICAtMy80CiAgICAgICAgICAgIDEtMy80CiAgICAgICAgICAgICcnJykKCiAgICAgICAgaW1wb3J0IHV1aWQKICAgICAgICBweXBhcnNpbmdfY29tbW9uLnV1aWQuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAodXVpZC5VVUlEKSkKICAgICAgICBweXBhcnNpbmdfY29tbW9uLnV1aWQucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgdXVpZAogICAgICAgICAgICAxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgKICAgICAgICAgICAgJycnKQogICAgcHJpbnRzOjoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlCiAgICAgICAgMTAwCiAgICAgICAgWzEwMF0KCiAgICAgICAgLTEwMAogICAgICAgIFstMTAwXQoKICAgICAgICArMTAwCiAgICAgICAgWzEwMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoKICAgICAgICA2LjAyZTIzCiAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAxZS0xMgogICAgICAgIFsxZS0xMl0KCiAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyBmbG9hdAogICAgICAgIDEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgLTEwMAogICAgICAgIFstMTAwLjBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwLjBdCgogICAgICAgIDMuMTQxNTkKICAgICAgICBbMy4xNDE1OV0KCiAgICAgICAgNi4wMmUyMwogICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgMWUtMTIKICAgICAgICBbMWUtMTJdCgogICAgICAgICMgaGV4IG51bWJlcnMKICAgICAgICAxMDAKICAgICAgICBbMjU2XQoKICAgICAgICBGRgogICAgICAgIFsyNTVdCgogICAgICAgICMgZnJhY3Rpb25zCiAgICAgICAgMS8yCiAgICAgICAgWzAuNV0KCiAgICAgICAgLTMvNAogICAgICAgIFstMC43NV0KCiAgICAgICAgIyBtaXhlZCBmcmFjdGlvbnMKICAgICAgICAxCiAgICAgICAgWzFdCgogICAgICAgIDEvMgogICAgICAgIFswLjVdCgogICAgICAgIC0zLzQKICAgICAgICBbLTAuNzVdCgogICAgICAgIDEtMy80CiAgICAgICAgWzEuNzVdCgogICAgICAgICMgdXVpZAogICAgICAgIDEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OAogICAgICAgIFtVVUlEKCcxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgnKV0KICAgINoHaW50ZWdlcnoLaGV4IGludGVnZXJy5gIAAHoIWystXT9cZCt6DnNpZ25lZCBpbnRlZ2VycvkCAADaCGZyYWN0aW9uYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHMQAAAAfABkARkAfABkAhkAGwBTACkDTnIBAAAAcnQAAAByeQAAAHJ3AAAAcnkAAAByeQAAAHJ6AAAAcnsAAAC0FQAAcnwAAAB6GXB5cGFyc2luZ19jb21tb24uPGxhbWJkYT5ylgIAAHoiZnJhY3Rpb24gb3IgbWl4ZWQgaW50ZWdlci1mcmFjdGlvbnoNWystXT9cZCtcLlxkKnoLcmVhbCBudW1iZXJ6K1srLV0/XGQrKFtlRV1bKy1dP1xkK3xcLlxkKihbZUVdWystXT9cZCspPyl6JHJlYWwgbnVtYmVyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbnodWystXT9cZCtcLj9cZCooW2VFXVsrLV0/XGQrKT/aB2ZudW1iZXJypQIAANoK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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 8
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
ordered_set.cpython-38.opt-1.pyc
16.03 KB
lrw-r--r--
2022-04-21 12:45:23
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ordered_set.cpython-38.pyc
16.03 KB
lrw-r--r--
2022-04-21 12:45:23
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-38.opt-1.pyc
196.91 KB
lrw-r--r--
2022-04-21 12:45:24
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-38.pyc
196.91 KB
lrw-r--r--
2022-04-21 12:45:24
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-38.opt-1.pyc
23.85 KB
lrw-r--r--
2022-04-21 12:45:24
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-38.pyc
23.85 KB
lrw-r--r--
2022-04-21 12:45:24
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.opt-1.pyc
154 B
lrw-r--r--
2022-04-21 12:45:23
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.pyc
154 B
lrw-r--r--
2022-04-21 12:45:23
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).