REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 60.65 KB
Close
/proc/self/root/opt/cloudlinux/venv/lib/python3.11/site-packages/numpy/polynomial/__pycache__/hermite.cpython-311.pyc
Text
Base64
pw0NCgAAAAC8fG9pIs0AAOMAAAAAAAAAAAAAAAAFAAAAAAAAAPOwAQAAlwBkAFoAZAFkAmwBWgJkAWQCbANtBFoFAQBkAWQDbAZtB1oHAQBkBGQFbAhtCVoKAQBkBGQGbAttDFoMAQBnAGQHogFaDWUKag4AAAAAAAAAAFoPZAiEAFoQZAmEAFoRAgBlAmoSAAAAAAAAAABkCmQEZwKmAQAAqwEAAAAAAAAAAFoTAgBlAmoSAAAAAAAAAABkAWcBpgEAAKsBAAAAAAAAAABaFAIAZQJqEgAAAAAAAAAAZARnAaYBAACrAQAAAAAAAAAAWhUCAGUCahIAAAAAAAAAAGQBZAtnAqYBAACrAQAAAAAAAAAAWhZkDIQAWhdkDYQAWhhkDoQAWhlkD4QAWhpkEIQAWhtkEYQAWhxkEoQAWh1kKWQUhAFaHmQqZBWEAVofZARnAGQBZARkAWYFZBaEAVogZCtkGIQBWiFkGYQAWiJkGoQAWiNkG4QAWiRkHIQAWiVkHYQAWiZkHoQAWidkH4QAWihkLGQhhAFaKWQihABaKmQjhABaK2QkhABaLGQlhABaLWQmhABaLgIARwBkJ4QAZChlDKYDAACrAwAAAAAAAAAAWi9kAlMAKS1h/QQAAAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpIZXJtaXRlIFNlcmllcywgIlBoeXNpY2lzdHMiICg6bW9kOmBudW1weS5wb2x5bm9taWFsLmhlcm1pdGVgKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBudW1iZXIgb2Ygb2JqZWN0cyAobW9zdGx5IGZ1bmN0aW9ucykgdXNlZnVsIGZvcgpkZWFsaW5nIHdpdGggSGVybWl0ZSBzZXJpZXMsIGluY2x1ZGluZyBhIGBIZXJtaXRlYCBjbGFzcyB0aGF0CmVuY2Fwc3VsYXRlcyB0aGUgdXN1YWwgYXJpdGhtZXRpYyBvcGVyYXRpb25zLiAgKEdlbmVyYWwgaW5mb3JtYXRpb24Kb24gaG93IHRoaXMgbW9kdWxlIHJlcHJlc2VudHMgYW5kIHdvcmtzIHdpdGggc3VjaCBwb2x5bm9taWFscyBpcyBpbiB0aGUKZG9jc3RyaW5nIGZvciBpdHMgInBhcmVudCIgc3ViLXBhY2thZ2UsIGBudW1weS5wb2x5bm9taWFsYCkuCgpDbGFzc2VzCi0tLS0tLS0KLi4gYXV0b3N1bW1hcnk6OgogICA6dG9jdHJlZTogZ2VuZXJhdGVkLwoKICAgSGVybWl0ZQoKQ29uc3RhbnRzCi0tLS0tLS0tLQouLiBhdXRvc3VtbWFyeTo6CiAgIDp0b2N0cmVlOiBnZW5lcmF0ZWQvCgogICBoZXJtZG9tYWluCiAgIGhlcm16ZXJvCiAgIGhlcm1vbmUKICAgaGVybXgKCkFyaXRobWV0aWMKLS0tLS0tLS0tLQouLiBhdXRvc3VtbWFyeTo6CiAgIDp0b2N0cmVlOiBnZW5lcmF0ZWQvCgogICBoZXJtYWRkCiAgIGhlcm1zdWIKICAgaGVybW11bHgKICAgaGVybW11bAogICBoZXJtZGl2CiAgIGhlcm1wb3cKICAgaGVybXZhbAogICBoZXJtdmFsMmQKICAgaGVybXZhbDNkCiAgIGhlcm1ncmlkMmQKICAgaGVybWdyaWQzZAoKQ2FsY3VsdXMKLS0tLS0tLS0KLi4gYXV0b3N1bW1hcnk6OgogICA6dG9jdHJlZTogZ2VuZXJhdGVkLwoKICAgaGVybWRlcgogICBoZXJtaW50CgpNaXNjIEZ1bmN0aW9ucwotLS0tLS0tLS0tLS0tLQouLiBhdXRvc3VtbWFyeTo6CiAgIDp0b2N0cmVlOiBnZW5lcmF0ZWQvCgogICBoZXJtZnJvbXJvb3RzCiAgIGhlcm1yb290cwogICBoZXJtdmFuZGVyCiAgIGhlcm12YW5kZXIyZAogICBoZXJtdmFuZGVyM2QKICAgaGVybWdhdXNzCiAgIGhlcm13ZWlnaHQKICAgaGVybWNvbXBhbmlvbgogICBoZXJtZml0CiAgIGhlcm10cmltCiAgIGhlcm1saW5lCiAgIGhlcm0ycG9seQogICBwb2x5Mmhlcm0KClNlZSBhbHNvCi0tLS0tLS0tCmBudW1weS5wb2x5bm9taWFsYAoK6QAAAABOKQHaFG5vcm1hbGl6ZV9heGlzX2luZGV46QEAAAApAdoJcG9seXV0aWxzKQHaC0FCQ1BvbHlCYXNlKR/aCGhlcm16ZXJv2gdoZXJtb25l2gVoZXJteNoKaGVybWRvbWFpbtoIaGVybWxpbmXaB2hlcm1hZGTaB2hlcm1zdWLaCGhlcm1tdWx42gdoZXJtbXVs2gdoZXJtZGl22gdoZXJtcG932gdoZXJtdmFs2gdoZXJtZGVy2gdoZXJtaW502gloZXJtMnBvbHnaCXBvbHkyaGVybdoNaGVybWZyb21yb290c9oKaGVybXZhbmRlctoHaGVybWZpdNoIaGVybXRyaW3aCWhlcm1yb290c9oHSGVybWl0ZdoJaGVybXZhbDJk2gloZXJtdmFsM2TaCmhlcm1ncmlkMmTaCmhlcm1ncmlkM2TaDGhlcm12YW5kZXIyZNoMaGVybXZhbmRlcjNk2g1oZXJtY29tcGFuaW9u2gloZXJtZ2F1c3PaCmhlcm13ZWlnaHRjAQAAAAAAAAAAAAAABgAAAAMAAADzygAAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHwAZwGmAQAAqwEAAAAAAAAAAFwBAAB9AHQFAAAAAAAAAAAAAHwApgEAAKsBAAAAAAAAAABkAXoKAAB9AWQCfQJ0BwAAAAAAAAAAAAB8AWQDZAOmAwAAqwMAAAAAAAAAAEQAXSV9A3QJAAAAAAAAAAAAAHQLAAAAAAAAAAAAAHwCpgEAAKsBAAAAAAAAAAB8AHwDGQAAAAAAAAAAAKYCAACrAgAAAAAAAAAAfQKMJnwCUwApBGGLAwAACiAgICBwb2x5Mmhlcm0ocG9sKQoKICAgIENvbnZlcnQgYSBwb2x5bm9taWFsIHRvIGEgSGVybWl0ZSBzZXJpZXMuCgogICAgQ29udmVydCBhbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIGNvZWZmaWNpZW50cyBvZiBhIHBvbHlub21pYWwgKHJlbGF0aXZlCiAgICB0byB0aGUgInN0YW5kYXJkIiBiYXNpcykgb3JkZXJlZCBmcm9tIGxvd2VzdCBkZWdyZWUgdG8gaGlnaGVzdCwgdG8gYW4KICAgIGFycmF5IG9mIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIGVxdWl2YWxlbnQgSGVybWl0ZSBzZXJpZXMsIG9yZGVyZWQKICAgIGZyb20gbG93ZXN0IHRvIGhp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ZmljaWVudCBvZiB0aGUgbGFzdCB0ZXJtIGlzIG5vdCBnZW5lcmFsbHkgMSBmb3IgbW9uaWMKICAgIHBvbHlub21pYWxzIGluIEhlcm1pdGUgZm9ybS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICByb290cyA6IGFycmF5X2xpa2UKICAgICAgICBTZXF1ZW5jZSBjb250YWluaW5nIHRoZSByb290cy4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBvdXQgOiBuZGFycmF5CiAgICAgICAgMS1EIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIElmIGFsbCByb290cyBhcmUgcmVhbCB0aGVuIGBvdXRgIGlzIGEKICAgICAgICByZWFsIGFycmF5LCBpZiBzb21lIG9mIHRoZSByb290cyBhcmUgY29tcGxleCwgdGhlbiBgb3V0YCBpcyBjb21wbGV4CiAgICAgICAgZXZlbiBpZiBhbGwgdGhlIGNvZWZmaWNpZW50cyBpbiB0aGUgcmVzdWx0IGFyZSByZWFsIChzZWUgRXhhbXBsZXMKICAgICAgICBiZWxvdykuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBudW1weS5wb2x5bm9taWFsLnBvbHlub21pYWwucG9seWZyb21yb290cwogICAgbnVtcHkucG9seW5vbWlhbC5sZWdlbmRyZS5sZWdmcm9tcm9vdHMKICAgIG51bXB5LnBvbHlub21pYWwubGFndWVycmUubGFnZnJvbXJvb3RzCiAgICBudW1weS5wb2x5bm9taWFsLmNoZWJ5c2hldi5jaGViZnJvbXJvb3RzCiAgICBudW1weS5wb2x5bm9taWFsLmhlcm1pdGVfZS5oZXJtZWZyb21yb290cwoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20gbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlIGltcG9ydCBoZXJtZnJvbXJvb3RzLCBoZXJtdmFsCiAgICA+Pj4gY29lZiA9IGhlcm1mcm9tcm9vdHMoKC0xLCAwLCAxKSkKICAgID4+PiBoZXJtdmFsKCgtMSwgMCwgMSksIGNvZWYpCiAgICBhcnJheShbMC4sICAw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c3VsdCBpcyBtdWx0aXBsaWVkIGJ5IGBzY2xgICh0aGUKICAgIHNjYWxpbmcgZmFjdG9yIGlzIGZvciB1c2UgaW4gYSBsaW5lYXIgY2hhbmdlIG9mIHZhcmlhYmxlKS4gVGhlIGFyZ3VtZW50CiAgICBgY2AgaXMgYW4gYXJyYXkgb2YgY29lZmZpY2llbnRzIGZyb20gbG93IHRvIGhpZ2ggZGVncmVlIGFsb25nIGVhY2gKICAgIGF4aXMsIGUuZy4sIFsxLDIsM10gcmVwcmVzZW50cyB0aGUgc2VyaWVzIGBgMSpIXzAgKyAyKkhfMSArIDMqSF8yYGAKICAgIHdoaWxlIFtbMSwyXSxbMSwyXV0gcmVwcmVzZW50cyBgYDEqSF8wKHgpKkhfMCh5KSArIDEqSF8xKHgpKkhfMCh5KSArCiAgICAyKkhfMCh4KSpIXzEoeSkgKyAyKkhfMSh4KSpIXzEoeSlgYCBpZiBheGlzPTAgaXMgYGB4YGAgYW5kIGF4aXM9MSBpcwogICAgYGB5YGAuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBIZXJtaXRlIHNlcmllcyBjb2VmZmljaWVudHMuIElmIGBjYCBpcyBtdWx0aWRpbWVuc2lvbmFsIHRoZQogICAgICAgIGRpZmZlcmVudCBheGlzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50IHZhcmlhYmxlcyB3aXRoIHRoZSBkZWdyZWUgaW4KICAgICAgICBlYWNoIGF4aXMgZ2l2ZW4gYnkgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXguCiAgICBtIDogaW50LCBvcHRpb25hbAogICAgICAgIE51bWJlciBvZiBkZXJpdmF0aXZlcyB0YWtlbiwgbXVzdCBiZSBub24tbmVnYXRpdmUuIChEZWZhdWx0OiAxKQogICAgc2NsIDogc2NhbGFyLCBvcHRpb25hbAogICAgICAgIEVhY2ggZGlmZmVyZW50aWF0aW9uIGlzIG11bHRpcGxpZWQgYnkgYHNjbGAuICBUaGUgZW5kIHJlc3VsdCBpcwogICAgICAgIG11bHRpcGxpY2F0aW9uIGJ5IGBgc2NsKiptYGAuICBUaGlzIGlzIGZvciB1c2UgaW4gYSBsaW5lYXIgY2hhbmdlIG9mCiAgICAgICAgdmFyaWFibGUuIChEZWZhdWx0OiAxKQogICAgYXhpcyA6IGludCwgb3B0aW9uYWwKICAgICAgICBBeGlzIG92ZXIgd2hpY2ggdGhlIGRlcml2YXRpdmUgaXMgdGFrZW4uIChEZWZhdWx0OiAwKS4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS43LjAKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBkZXIgOiBuZGFycmF5CiAgICAgICAgSGVybWl0ZSBzZXJpZXMgb2YgdGhlIGRlcml2YXRpdmUuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBoZXJtaW50CgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBJbiBnZW5lcmFsLCB0aGUgcmVzdWx0IG9mIGRpZmZlcmVudGlhdGluZyBhIEhlcm1pdGUgc2VyaWVzIGRvZXMgbm90CiAgICByZXNlbWJsZSB0aGUgc2FtZSBvcGVyYXRpb24gb24gYSBwb3dlciBzZXJpZXMuIFRodXMgdGhlIHJlc3VsdCBvZiB0aGlzCiAgICBmdW5jdGlvbiBtYXkgYmUgInVuaW50dWl0aXZlLCIgYWxiZWl0IGNvcnJlY3Q7IHNlZSBFeGFtcGxlcyBzZWN0aW9uCiAgICBiZWxvdy4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBmcm9tIG51bXB5LnBvbHlub21pYWwuaGVybWl0ZSBpbXBvcnQgaGVybWRlcgogICAgPj4+IGhlcm1kZXIoWyAxLiAsICAwLjUsICAwLjUsICAwLjVdKQogICAgYXJyYXkoWzEuLCAyLiwgMy5dKQogICAgPj4+IGhlcm1kZXIoWy0wLjUsICAxLi8yLiwgIDEuLzguLCAgMS4vMTIuLCAgMS4vMTYuXSwgbT0yKQogICAgYXJyYXkoWzEuLCAyLiwgMy5dKQoKICAgIHIEAAAAVKkC2gVuZG1pbtoEY29wefoNP2JCaEhpSWxMcVFwUHoXdGhlIG9yZGVyIG9mIGRlcml2YXRpb276CHRoZSBheGlzcgIAAAB6LFRoZSBvcmRlciBvZiBkZXJpdmF0aW9u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YXhpcz0wIGlzIGBgeGBgIGFuZCBheGlzPTEgaXMgYGB5YGAuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBIZXJtaXRlIHNlcmllcyBjb2VmZmljaWVudHMuIElmIGMgaXMgbXVsdGlkaW1lbnNpb25hbCB0aGUKICAgICAgICBkaWZmZXJlbnQgYXhpcyBjb3JyZXNwb25kIHRvIGRpZmZlcmVudCB2YXJpYWJsZXMgd2l0aCB0aGUgZGVncmVlIGluCiAgICAgICAgZWFjaCBheGlzIGdpdmVuIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGluZGV4LgogICAgbSA6IGludCwgb3B0aW9uYWwKICAgICAgICBPcmRlciBvZiBpbnRlZ3JhdGlvbiwgbXVzdCBiZSBwb3NpdGl2ZS4gKERlZmF1bHQ6IDEpCiAgICBrIDoge1tdLCBsaXN0LCBzY2FsYXJ9LCBvcHRpb25hbAogICAgICAgIEludGVncmF0aW9uIGNvbnN0YW50KHMpLiAgVGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBpbnRlZ3JhbCBhdAogICAgICAgIGBgbGJuZGBgIGlzIHRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUgbGlzdCwgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQKICAgICAgICBpbnRlZ3JhbCBhdCBgYGxibmRgYCBpcyB0aGUgc2Vjb25kIHZhbHVlLCBldGMuICBJZiBgYGsgPT0gW11gYCAodGhlCiAgICAgICAgZGVmYXVsdCksIGFsbCBjb25zdGFudHMgYXJlIHNldCB0byB6ZXJvLiAgSWYgYGBtID09IDFgYCwgYSBzaW5nbGUKICAgICAgICBzY2FsYXIgY2FuIGJlIGdpdmVuIGluc3RlYWQgb2YgYSBsaXN0LgogICAgbGJuZCA6IHNjYWxhciwgb3B0aW9uYWwKICAgICAgICBUaGUgbG93ZXIgYm91bmQgb2YgdGhlIGludGVncmFsLiAoRGVmYXVsdDogMCkKICAgIHNjbCA6IHNjYWxhciwgb3B0aW9uYWwKICAgICAgICBGb2xsb3dpbmcgZWFjaCBpbnRlZ3JhdGlvbiB0aGUgcmVzdWx0IGlzICptdWx0aXBsaWVkKiBieSBgc2NsYAogICAgICAgIGJlZm9yZSB0aGUgaW50ZWdyYXRpb24gY29uc3RhbnQgaXMgYWRkZWQuIChEZWZhdWx0OiAxKQogICAgYXhpcyA6IGludCwgb3B0aW9uYWwKICAgICAgICBBeGlzIG92ZXIgd2hpY2ggdGhlIGludGVncmFsIGlzIHRha2VuLiAoRGVmYXVsdDogMCkuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgUyA6IG5kYXJyYXkKICAgICAgICBIZXJtaXRlIHNlcmllcyBjb2VmZmljaWVudHMgb2YgdGhlIGludGVncmFsLgoKICAgIFJhaXNlcwogICAgLS0tLS0tCiAgICBWYWx1ZUVycm9yCiAgICAgICAgSWYgYGBtIDwgMGBgLCBgYGxlbihrKSA+IG1gYCwgYGBucC5uZGltKGxibmQpICE9IDBgYCwgb3IKICAgICAgICBgYG5wLm5kaW0oc2NsKSAhPSAwYGAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBoZXJtZGVyCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBOb3RlIHRoYXQgdGhlIHJlc3VsdCBvZiBlYWNoIGludGVncmF0aW9uIGlzICptdWx0aXBsaWVkKiBieSBgc2NsYC4KICAgIFdoeSBpcyB0aGlzIGltcG9ydGFudCB0byBub3RlPyAgU2F5IG9uZSBpcyBtYWtpbmcgYSBsaW5lYXIgY2hhbmdlIG9mCiAgICB2YXJpYWJsZSA6bWF0aDpgdSA9IGF4ICsgYmAgaW4gYW4gaW50ZWdyYWwgcmVsYXRpdmUgdG8gYHhgLiAgVGhlbgogICAgOm1hdGg6YGR4ID0gZHUvYWAsIHNvIG9uZSB3aWxsIG5lZWQgdG8gc2V0IGBzY2xgIGVxdWFsIHRvCiAgICA6bWF0aDpgMS9hYCAtIHBlcmhhcHMgbm90IHdoYXQgb25lIHdvdWxkIGhhdmUgZmlyc3QgdGhvdWdodC4KCiAgICBBbHNvIG5vdGUgdGhhdCwgaW4gZ2VuZXJhbCwgdGhlIHJlc3VsdCBvZiBpbnRlZ3JhdGluZyBh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cyBvZiBsZW5ndGggYG4gKyAxYCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZToKCiAgICAuLiBtYXRoOjogcCh4KSA9IGNfMCAqIEhfMCh4KSArIGNfMSAqIEhfMSh4KSArIC4uLiArIGNfbiAqIEhfbih4KQoKICAgIFRoZSBwYXJhbWV0ZXIgYHhgIGlzIGNvbnZlcnRlZCB0byBhbiBhcnJheSBvbmx5IGlmIGl0IGlzIGEgdHVwbGUgb3IgYQogICAgbGlzdCwgb3RoZXJ3aXNlIGl0IGlzIHRyZWF0ZWQgYXMgYSBzY2FsYXIuIEluIGVpdGhlciBjYXNlLCBlaXRoZXIgYHhgCiAgICBvciBpdHMgZWxlbWVudHMgbXVzdCBzdXBwb3J0IG11bHRpcGxpY2F0aW9uIGFuZCBhZGRpdGlvbiBib3RoIHdpdGgKICAgIHRoZW1zZWx2ZXMgYW5kIHdpdGggdGhlIGVsZW1lbnRzIG9mIGBjYC4KCiAgICBJZiBgY2AgaXMgYSAxLUQgYXJyYXksIHRoZW4gYHAoeClgIHdpbGwgaGF2ZSB0aGUgc2FtZSBzaGFwZSBhcyBgeGAuICBJZgogICAgYGNgIGlzIG11bHRpZGltZW5zaW9uYWwsIHRoZW4gdGhlIHNoYXBlIG9mIHRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUKICAgIHZhbHVlIG9mIGB0ZW5zb3JgLiBJZiBgdGVuc29yYCBpcyB0cnVlIHRoZSBzaGFwZSB3aWxsIGJlIGMuc2hhcGVbMTpdICsKICAgIHguc2hhcGUuIElmIGB0ZW5zb3JgIGlzIGZhbHNlIHRoZSBzaGFwZSB3aWxsIGJlIGMuc2hhcGVbMTpdLiBOb3RlIHRoYXQKICAgIHNjYWxhcnMgaGF2ZSBzaGFwZSAoLCkuCgogICAgVHJhaWxpbmcgemVyb3MgaW4gdGhlIGNvZWZmaWNpZW50cyB3aWxsIGJlIHVzZWQgaW4gdGhlIGV2YWx1YXRpb24sIHNvCiAgICB0aGV5IHNob3VsZCBiZSBhdm9pZGVkIGlmIGVmZmljaWVuY3kgaXMgYSBjb25jZXJuLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHggOiBhcnJheV9saWtlLCBjb21wYXRpYmxlIG9iamVjdAogICAgICAgIElmIGB4YCBpcyBhIGxpc3Qgb3IgdHVwbGUsIGl0IGlzIGNvbnZlcnRlZCB0byBhbiBuZGFycmF5LCBvdGhlcndpc2UKICAgICAgICBpdCBpcyBsZWZ0IHVuY2hhbmdlZCBhbmQgdHJlYXRlZCBhcyBhIHNjYWxhci4gSW4gZWl0aGVyIGNhc2UsIGB4YAogICAgICAgIG9yIGl0cyBlbGVtZW50cyBtdXN0IHN1cHBvcnQgYWRkaXRpb24gYW5kIG11bHRpcGxpY2F0aW9uIHdpdGgKICAgICAgICB0aGVtc2VsdmVzIGFuZCB3aXRoIHRoZSBlbGVtZW50cyBvZiBgY2AuCiAgICBjIDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIGNvZWZmaWNpZW50cyBvcmRlcmVkIHNvIHRoYXQgdGhlIGNvZWZmaWNpZW50cyBmb3IgdGVybXMgb2YKICAgICAgICBkZWdyZWUgbiBhcmUgY29udGFpbmVkIGluIGNbbl0uIElmIGBjYCBpcyBtdWx0aWRpbWVuc2lvbmFsIHRoZQogICAgICAgIHJlbWFpbmluZyBpbmRpY2VzIGVudW1lcmF0ZSBtdWx0aXBsZSBwb2x5bm9taWFscy4gSW4gdGhlIHR3bwogICAgICAgIGRpbWVuc2lvbmFsIGNhc2UgdGhlIGNvZWZmaWNpZW50cyBtYXkgYmUgdGhvdWdodCBvZiBhcyBzdG9yZWQgaW4KICAgICAgICB0aGUgY29sdW1ucyBvZiBgY2AuCiAgICB0ZW5zb3IgOiBib29sZWFuLCBvcHRpb25hbAogICAgICAgIElmIFRydWUsIHRoZSBzaGFwZSBvZiB0aGUgY29lZmZpY2llbnQgYXJyYXkgaXMgZXh0ZW5kZWQgd2l0aCBvbmVzCiAgICAgICAgb24gdGhlIHJpZ2h0LCBvbmUgZm9yIGVhY2ggZGltZW5zaW9uIG9mIGB4YC4gU2NhbGFycyBoYXZlIGRpbWVuc2lvbiAwCiAgICAgICAgZm9yIHRoaXMgYWN0aW9uLiBUaGUgcmVzdWx0IGlzIHRoYXQgZXZlcnkgY29sdW1uIG9mIGNvZWZmaWNpZW50cyBpbgogICAgICAgIGBjYCBpcyBldmFs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c2UsIGVpdGhlciBgeGAKICAgIGFuZCBgeWAgb3IgdGhlaXIgZWxlbWVudHMgbXVzdCBzdXBwb3J0IG11bHRpcGxpY2F0aW9uIGFuZCBhZGRpdGlvbiBib3RoCiAgICB3aXRoIHRoZW1zZWx2ZXMgYW5kIHdpdGggdGhlIGVsZW1lbnRzIG9mIGBjYC4KCiAgICBJZiBgY2AgaXMgYSAxLUQgYXJyYXkgYSBvbmUgaXMgaW1wbGljaXRseSBhcHBlbmRlZCB0byBpdHMgc2hhcGUgdG8gbWFrZQogICAgaXQgMi1ELiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdCB3aWxsIGJlIGMuc2hhcGVbMjpdICsgeC5zaGFwZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4LCB5IDogYXJyYXlfbGlrZSwgY29tcGF0aWJsZSBvYmplY3RzCiAgICAgICAgVGhlIHR3byBkaW1lbnNpb25hbCBzZXJpZXMgaXMgZXZhbHVhdGVkIGF0IHRoZSBwb2ludHMgYCh4LCB5KWAsCiAgICAgICAgd2hlcmUgYHhgIGFuZCBgeWAgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlLiBJZiBgeGAgb3IgYHlgIGlzIGEgbGlzdAogICAgICAgIG9yIHR1cGxlLCBpdCBpcyBmaXJzdCBjb252ZXJ0ZWQgdG8gYW4gbmRhcnJheSwgb3RoZXJ3aXNlIGl0IGlzIGxlZnQKICAgICAgICB1bmNoYW5nZWQgYW5kIGlmIGl0IGlzbid0IGFuIG5kYXJyYXkgaXQgaXMgdHJlYXRlZCBhcyBhIHNjYWxhci4KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2YgY29lZmZpY2llbnRzIG9yZGVyZWQgc28gdGhhdCB0aGUgY29lZmZpY2llbnQgb2YgdGhlIHRlcm0KICAgICAgICBvZiBtdWx0aS1kZWdyZWUgaSxqIGlzIGNvbnRhaW5lZCBpbiBgYGNbaSxqXWBgLiBJZiBgY2AgaGFzCiAgICAgICAgZGltZW5zaW9uIGdyZWF0ZXIgdGhhbiB0d28gdGhlIHJlbWFpbmluZyBpbmRpY2VzIGVudW1lcmF0ZSBtdWx0aXBsZQogICAgICAgIHNldHMgb2YgY29lZmZpY2llbnRzLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbHVlcyA6IG5kYXJyYXksIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgVGhlIHZhbHVlcyBvZiB0aGUgdHdvIGRpbWVuc2lvbmFsIHBvbHlub21pYWwgYXQgcG9pbnRzIGZvcm1lZCB3aXRoCiAgICAgICAgcGFpcnMgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSBgeGAgYW5kIGB5YC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGhlcm12YWwsIGhlcm1ncmlkMmQsIGhlcm12YWwzZCwgaGVybWdyaWQzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgqQNyKAAAANoGX3ZhbG5kchIAAACpA3J+AAAA2gF5cjkAAABzAwAAACAgIHIwAAAAch0AAAByHQAAAIIDAABzGwAAAIAA9VwBAAwOjDmVV5hhoBGgQdELJtQLJtAEJnIxAAAAYwMAAAAAAAAAAAAAAAYAAAADAAAA8zoAAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB0BAAAAAAAAAAAAAB8AnwAfAGmBAAAqwQAAAAAAAAAAFMAKQFh0gYAAAogICAgRXZhbHVhdGUgYSAyLUQgSGVybWl0ZSBzZXJpZXMgb24gdGhlIENhcnRlc2lhbiBwcm9kdWN0IG9mIHggYW5kIHkuCgogICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZXM6CgogICAgLi4gbWF0aDo6IHAoYSxiKSA9IFxzdW1fe2ksan0gY197aSxqfSAqIEhfaShhKSAqIEhfaihiKQoKICAgIHdoZXJlIHRoZSBwb2ludHMgYChhLCBiKWAgY29uc2lzdCBvZiBhbGwgcGFpcnMgZm9ybWVkIGJ5IHRha2luZwogICAgYGFgIGZyb20gYHhgIGFuZCBgYmAgZnJvbSBgeWAuIFRoZSByZXN1bHRpbmcgcG9pbnRzIGZvcm0gYSBncmlkIHdpdGgKICAgIGB4YCBpbiB0aGUgZmlyc3QgZGltZW5zaW9uIGFuZCBgeWAgaW4gdGhlIHNlY29uZC4KCiAgICBUaGUgcGFyYW1ldGVycyBgeGAgYW5kIGB5YCBhcmUgY29udmVydGVkIHRvIGFycmF5cyBvbmx5IGlmIHRoZXkgYXJlCiAgICB0dXBsZXMgb3IgYSBsaXN0cywgb3RoZXJ3aXNlIHRoZXkgYXJlIHRyZWF0ZWQgYXMgYSBzY2FsYXJzLiBJbiBlaXRoZXIKICAgIGNhc2UsIGVpdGhlciBgeGAgYW5kIGB5YCBvciB0aGVpciBlbGVtZW50cyBtdXN0IHN1cHBvcnQgbXVsdGlwbGljYXRpb24KICAgIGFuZCBhZGRpdGlvbiBib3RoIHdpdGggdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMgb2YgYGNgLgoKICAgIElmIGBjYCBoYXMgZmV3ZXIgdGhhbiB0d28gZGltZW5zaW9ucywgb25lcyBhcmUgaW1wbGljaXRseSBhcHBlbmRlZCB0bwogICAgaXRzIHNoYXBlIHRvIG1ha2UgaXQgMi1ELiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdCB3aWxsIGJlIGMuc2hhcGVbMjpdICsKICAgIHguc2hhcGUuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSA6IGFycmF5X2xpa2UsIGNvbXBhdGlibGUgb2JqZWN0cwogICAgICAgIFRoZSB0d28gZGltZW5zaW9uYWwgc2VyaWVzIGlzIGV2YWx1YXRlZCBhdCB0aGUgcG9pbnRzIGluIHRoZQogICAgICAgIENhcnRlc2lhbiBwcm9kdWN0IG9mIGB4YCBhbmQgYHlgLiAgSWYgYHhgIG9yIGB5YCBpcyBhIGxpc3Qgb3IKICAgICAgICB0dXBsZSwgaXQgaXMgZmlyc3QgY29udmVydGVkIHRvIGFuIG5kYXJyYXksIG90aGVyd2lzZSBpdCBpcyBsZWZ0CiAgICAgICAgdW5jaGFuZ2VkIGFuZCwgaWYgaXQgaXNuJ3QgYW4gbmRhcnJheSwgaXQgaXMgdHJlYXRlZCBhcyBhIHNjYWxhci4KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2YgY29lZmZpY2llbnRzIG9yZGVyZWQgc28gdGhhdCB0aGUgY29lZmZpY2llbnRzIGZvciB0ZXJtcyBvZgogICAgICAgIGRlZ3JlZSBpLGogYXJlIGNvbnRhaW5lZCBpbiBgYGNbaSxqXWBgLiBJZiBgY2AgaGFzIGRpbWVuc2lvbgogICAgICAgIGdyZWF0ZXIgdGhhbiB0d28gdGhlIHJlbWFpbmluZyBpbmRpY2VzIGVudW1lcmF0ZSBtdWx0aXBsZSBzZXRzIG9mCiAgICAgICAgY29lZmZpY2llbnRzLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbHVlcyA6IG5kYXJyYXksIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgVGhlIHZhbHVlcyBvZiB0aGUgdHdvIGRpbWVuc2lvbmFsIHBvbHlub21pYWwgYXQgcG9pbnRzIGluIHRoZSBDYXJ0ZXNpYW4KICAgICAgICBwcm9kdWN0IG9mIGB4YCBhbmQgYHlgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgaGVybXZhbCwgaGVybXZhbDJkLCBoZXJtdmFsM2QsIGhlcm1ncmlkM2QKCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIKkDcigAAADaB19ncmlkbmRyEgAAAHKEAAAAcwMAAAAgICByMAAAAHIfAAAAch8AAACzAwAAcxsAAACAAPVkAQAMDow6lWeYcaAhoFHRCyfUCyfQBCdyMQAAAGMEAAAAAAAAAAAAAAAHAAAAAwAAAPM8AAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAdAQAAAAAAAAAAAAAfAN8AHwBfAKmBQAAqwUAAAAAAAAAAFMAKQFhoQYAAAogICAgRXZhbHVhdGUgYSAzLUQgSGVybWl0ZSBzZXJpZXMgYXQgcG9pbnRzICh4LCB5LCB6KS4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlczoKCiAgICAuLiBtYXRoOjogcCh4LHkseikgPSBcc3VtX3tpLGosa30gY197aSxqLGt9ICogSF9pKHgpICogSF9qKHkpICogSF9rKHopCgogICAgVGhlIHBhcmFtZXRlcnMgYHhgLCBgeWAsIGFuZCBgemAgYXJlIGNvbnZlcnRlZCB0byBhcnJheXMgb25seSBpZgogICAgdGhleSBhcmUgdHVwbGVzIG9yIGEgbGlzdHMsIG90aGVyd2lzZSB0aGV5IGFyZSB0cmVhdGVkIGFzIGEgc2NhbGFycyBhbmQKICAgIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFmdGVyIGNvbnZlcnNpb24uIEluIGVpdGhlciBjYXNlLCBlaXRoZXIKICAgIGB4YCwgYHlgLCBhbmQgYHpgIG9yIHRoZWlyIGVsZW1lbnRzIG11c3Qgc3VwcG9ydCBtdWx0aXBsaWNhdGlvbiBhbmQKICAgIGFkZGl0aW9uIGJvdGggd2l0aCB0aGVtc2VsdmVzIGFuZCB3aXRoIHRoZSBlbGVtZW50cyBvZiBgY2AuCgogICAgSWYgYGNgIGhhcyBmZXdlciB0aGFuIDMgZGltZW5zaW9ucywgb25lcyBhcmUgaW1wbGljaXRseSBhcHBlbmRlZCB0byBpdHMKICAgIHNoYXBlIHRvIG1ha2UgaXQgMy1ELiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdCB3aWxsIGJlIGMuc2hhcGVbMzpdICsKICAgIHguc2hhcGUuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSwgeiA6IGFycmF5X2xpa2UsIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgVGhlIHRocmVlIGRpbWVuc2lvbmFsIHNlcmllcyBpcyBldmFsdWF0ZWQgYXQgdGhlIHBvaW50cwogICAgICAgIGAoeCwgeSwgeilgLCB3aGVyZSBgeGAsIGB5YCwgYW5kIGB6YCBtdXN0IGhhdmUgdGhlIHNhbWUgc2hhcGUuICBJZgogICAgICAgIGFueSBvZiBgeGAsIGB5YCwgb3IgYHpgIGlzIGEgbGlzdCBvciB0dXBsZSwgaXQgaXMgZmlyc3QgY29udmVydGVkCiAgICAgICAgdG8gYW4gbmRhcnJheSwgb3RoZXJ3aXNlIGl0IGlzIGxlZnQgdW5jaGFuZ2VkIGFuZCBpZiBpdCBpc24ndCBhbgogICAgICAgIG5kYXJyYXkgaXQgaXMgIHRyZWF0ZWQgYXMgYSBzY2FsYXIuCiAgICBjIDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIGNvZWZmaWNpZW50cyBvcmRlcmVkIHNvIHRoYXQgdGhlIGNvZWZmaWNpZW50IG9mIHRoZSB0ZXJtIG9mCiAgICAgICAgbXVsdGktZGVncmVlIGksaixrIGlzIGNvbnRhaW5lZCBpbiBgYGNbaSxqLGtdYGAuIElmIGBjYCBoYXMgZGltZW5zaW9uCiAgICAgICAgZ3JlYXRlciB0aGFuIDMgdGhlIHJlbWFpbmluZyBpbmRpY2VzIGVudW1lcmF0ZSBtdWx0aXBsZSBzZXRzIG9mCiAgICAgICAgY29lZmZpY2llbnRzLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbHVlcyA6IG5kYXJyYXksIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgVGhlIHZhbHVlcyBvZiB0aGUgbXVsdGlkaW1lbnNpb25hbCBwb2x5bm9taWFsIG9uIHBvaW50cyBmb3JtZWQgd2l0aAogICAgICAgIHRyaXBsZXMgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSBgeGAsIGB5YCwgYW5kIGB6YC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGhlcm12YWwsIGhlcm12YWwyZCwgaGVybWdyaWQyZCwgaGVybWdyaWQzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgcoIAAACpBHJ+AAAAcoUAAADaAXpyOQAAAHMEAAAAICAgIHIwAAAAch4AAAByHgAAAOgDAABzHQAAAIAA9WABAAwOjDmVV5hhoBGgQaBx0Qsp1Asp0AQpcjEAAABjBAAAAAAAAAAAAAAABwAAAAMAAADzPAAAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHQEAAAAAAAAAAAAAHwDfAB8AXwCpgUAAKsFAAAAAAAAAABTACkBYU4HAAAKICAgIEV2YWx1YXRlIGEgMy1EIEhlcm1pdGUgc2VyaWVzIG9uIHRoZSBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiB4LCB5LCBhbmQgei4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlczoKCiAgICAuLiBtYXRoOjogcChhLGIsYykgPSBcc3VtX3tpLGosa30gY197aSxqLGt9ICogSF9pKGEpICogSF9qKGIpICogSF9rKGMpCgogICAgd2hlcmUgdGhlIHBvaW50cyBgKGEsIGIsIGMpYCBjb25zaXN0IG9mIGFsbCB0cmlwbGVzIGZvcm1lZCBieSB0YWtpbmcKICAgIGBhYCBmcm9tIGB4YCwgYGJgIGZyb20gYHlgLCBhbmQgYGNgIGZyb20gYHpgLiBUaGUgcmVzdWx0aW5nIHBvaW50cyBmb3JtCiAgICBhIGdyaWQgd2l0aCBgeGAgaW4gdGhlIGZpcnN0IGRpbWVuc2lvbiwgYHlgIGluIHRoZSBzZWNvbmQsIGFuZCBgemAgaW4KICAgIHRoZSB0aGlyZC4KCiAgICBUaGUgcGFyYW1ldGVycyBgeGAsIGB5YCwgYW5kIGB6YCBhcmUgY29udmVydGVkIHRvIGFycmF5cyBvbmx5IGlmIHRoZXkKICAgIGFyZSB0dXBsZXMgb3IgYSBsaXN0cywgb3RoZXJ3aXNlIHRoZXkgYXJlIHRyZWF0ZWQgYXMgYSBzY2FsYXJzLiBJbgogICAgZWl0aGVyIGNhc2UsIGVpdGhlciBgeGAsIGB5YCwgYW5kIGB6YCBvciB0aGVpciBlbGVtZW50cyBtdXN0IHN1cHBvcnQKICAgIG11bHRpcGxpY2F0aW9uIGFuZCBhZGRpdGlvbiBib3RoIHdpdGggdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMKICAgIG9mIGBjYC4KCiAgICBJZiBgY2AgaGFzIGZld2VyIHRoYW4gdGhyZWUgZGltZW5zaW9ucywgb25lcyBhcmUgaW1wbGljaXRseSBhcHBlbmRlZCB0bwogICAgaXRzIHNoYXBlIHRvIG1ha2UgaXQgMy1ELiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdCB3aWxsIGJlIGMuc2hhcGVbMzpdICsKICAgIHguc2hhcGUgKyB5LnNoYXBlICsgei5zaGFwZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4LCB5LCB6IDogYXJyYXlfbGlrZSwgY29tcGF0aWJsZSBvYmplY3RzCiAgICAgICAgVGhlIHRocmVlIGRpbWVuc2lvbmFsIHNlcmllcyBpcyBldmFsdWF0ZWQgYXQgdGhl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IGFycmF5IGBgViA9IGhlcm12YW5kZXIoeCwgbilgYCwgdGhlbiBgYG5wLmRvdChWLCBjKWBgIGFuZAogICAgYGBoZXJtdmFsKHgsIGMpYGAgYXJlIHRoZSBzYW1lIHVwIHRvIHJvdW5kb2ZmLiBUaGlzIGVxdWl2YWxlbmNlIGlzCiAgICB1c2VmdWwgYm90aCBmb3IgbGVhc3Qgc3F1YXJlcyBmaXR0aW5nIGFuZCBmb3IgdGhlIGV2YWx1YXRpb24gb2YgYSBsYXJnZQogICAgbnVtYmVyIG9mIEhlcm1pdGUgc2VyaWVzIG9mIHRoZSBzYW1lIGRlZ3JlZSBhbmQgc2FtcGxlIHBvaW50cy4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4IDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIHBvaW50cy4gVGhlIGR0eXBlIGlzIGNvbnZlcnRlZCB0byBmbG9hdDY0IG9yIGNvbXBsZXgxMjgKICAgICAgICBkZXBlbmRpbmcgb24gd2hldGhlciBhbnkgb2YgdGhlIGVsZW1lbnRzIGFyZSBjb21wbGV4LiBJZiBgeGAgaXMKICAgICAgICBzY2FsYXIgaXQgaXMgY29udmVydGVkIHRvIGEgMS1EIGFycmF5LgogICAgZGVnIDogaW50CiAgICAgICAgRGVncmVlIG9mIHRoZSByZXN1bHRpbmcgbWF0cml4LgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbmRlciA6IG5kYXJyYXkKICAgICAgICBUaGUgcHNldWRvLVZhbmRlcm1vbmRlIG1hdHJpeC4gVGhlIHNoYXBlIG9mIHRoZSByZXR1cm5lZCBtYXRyaXggaXMKICAgICAgICBgYHguc2hhcGUgKyAoZGVnICsgMSwpYGAsIHdoZXJlIFRoZSBsYXN0IGluZGV4IGlzIHRoZSBkZWdyZWUgb2YgdGhlCiAgICAgICAgY29ycmVzcG9uZGluZyBIZXJtaXRlIHBvbHlub21pYWwuICBUaGUgZHR5cGUgd2lsbCBiZSB0aGUgc2FtZSBhcwogICAgICAgIHRoZSBjb252ZXJ0ZWQgYHhgLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20gbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlIGltcG9ydCBoZXJtdmFuZGVyCiAgICA+Pj4geCA9IG5wLmFycmF5KFstMSwgMCwgMV0pCiAgICA+Pj4gaGVybXZhbmRlcih4LCAzKQogICAgYXJyYXkoW1sgMS4sIC0yLiwgIDIuLCAgNC5dLAogICAgICAgICAgIFsgMS4sICAwLiwgLTIuLCAtMC5dLAogICAgICAgICAgIFsgMS4sICAyLiwgIDIuLCAtNC5dXSkKCiAgICByLQAAAHICAAAAehhkZWcgbXVzdCBiZSBub24tbmVnYXRpdmVGcgQAAAApAnJhAAAAcmAAAADnAAAAAAAAAAByTwAAAHI2AAAAcicAAAApCnIoAAAAcmcAAAByaAAAAHJAAAAAckEAAAByawAAAHJQAAAAclEAAAByKwAAAHJqAAAAKQhyfgAAAHItAAAA2gRpZGVn2gRkaW1z2gRkdHlw2gF2coAAAAByLwAAAHMIAAAAICAgICAgICByMAAAAHIYAAAAchgAAABTBAAAcwUBAACAAPVYAQAMDtQLH6ADoFXRCyvUCyuARNgHC4hhgniAeN0OGNAZM9EONNQONNAINOUICowIkBGYFaBh0Ago0Qgo1AgoqDPRCC6AQdgMEJAxiUiIO5gRnBfRCyCARNgLDIw3gETdCAqMCJAUmFTQCCLRCCLUCCKAQdgLDIhRiTOQEYk3gEGAYYFE2AcLiGGCeIB42A0OiHGJU4gC2A8RiAGIIYkE3REWkHGYJKARmSjRESPUESPwAAEJNPAAAQk0iEHYFBWQYZgBkWOURpgykUmgAaAhoEGhI6QGqAGoMahxqTWpCdEgMtEUMohBiGGJRIhE3QsNjDuQcZghmFLRCyDUCyDQBCByMQAAAGMDAAAAAAAAAAAAAAAFAAAAAwAAAPNKAAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAdAQAAAAAAAAAAAAAdAQAAAAAAAAAAAAAZgJ8AHwBZgJ8AqYDAACrAwAAAAAAAAAAUwApAWGQBgAAUHNldWRvLVZhbmRlcm1vbmRlIG1hdHJpeCBvZiBnaXZlbiBkZWdyZWVzLgoKICAgIFJldHVybnMgdGhlIHBzZXVkby1WYW5kZXJtb25kZSBtYXRyaXggb2YgZGVncmVlcyBgZGVnYCBhbmQgc2FtcGxlCiAgICBwb2ludHMgYCh4LCB5KWAuIFRoZSBwc2V1ZG8tVmFuZGVybW9uZGUgbWF0cml4IGlzIGRlZmluZWQgYnkKCiAgICAuLiBtYXRoOjogVlsuLi4sIChkZWdbMV0gKyAxKSppICsgal0gPSBIX2koeCkgKiBIX2ooeSksCgogICAgd2hlcmUgYDAgPD0gaSA8PSBkZWdbMF1gIGFuZCBgMCA8PSBqIDw9IGRlZ1sxXWAuIFRoZSBsZWFkaW5nIGluZGljZXMgb2YKICAgIGBWYCBpbmRleCB0aGUgcG9pbnRzIGAoeCwgeSlgIGFuZCB0aGUgbGFzdCBpbmRleCBlbmNvZGVzIHRoZSBkZWdyZWVzIG9mCiAgICB0aGUgSGVybWl0ZSBwb2x5bm9taWFscy4KCiAgICBJZiBgYFYgPSBoZXJtdmFuZGVyMmQoeCwgeSwgW3hkZWcsIHlkZWddKWBgLCB0aGVuIHRoZSBjb2x1bW5zIG9mIGBWYAogICAgY29ycmVzcG9uZCB0byB0aGUgZWxlbWVudHMgb2YgYSAyLUQgY29lZmZpY2llbnQgYXJyYXkgYGNgIG9mIHNoYXBlCiAgICAoeGRlZyArIDEsIHlkZWcgKyAxKSBpbiB0aGUgb3JkZXIKCiAgICAuLiBtYXRoOjogY197MDB9LCBjX3swMX0sIGNfezAyfSAuLi4gLCBjX3sxMH0sIGNfezExfSwgY197MTJ9IC4uLgoKICAgIGFuZCBgYG5wLmRvdChWLCBjLmZsYXQpYGAgYW5kIGBgaGVybXZhbDJkKHgsIHksIGMpYGAgd2lsbCBiZSB0aGUgc2FtZQogICAgdXAgdG8gcm91bmRvZmYuIFRoaXMgZXF1aXZhbGVuY2UgaXMgdXNlZnVsIGJvdGggZm9yIGxlYXN0IHNxdWFyZXMKICAgIGZpdHRpbmcgYW5kIGZvciB0aGUgZXZhbHVhdGlvbiBvZiBhIGxhcmdlIG51bWJlciBvZiAyLUQgSGVybWl0ZQogICAgc2VyaWVzIG9mIHRoZSBzYW1lIGRlZ3JlZXMgYW5kIHNhbXBsZSBwb2ludHMuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheXMgb2YgcG9pbnQgY29vcmRpbmF0ZXMsIGFsbCBvZiB0aGUgc2FtZSBzaGFwZS4gVGhlIGR0eXBlcwogICAgICAgIHdpbGwgYmUgY29udmVydGVkIHRvIGVpdGhlciBmbG9hdDY0IG9yIGNvbXBsZXgxMjggZGVwZW5kaW5nIG9uCiAgICAgICAgd2hldGhlciBhbnkgb2YgdGhlIGVsZW1lbnRzIGFyZSBjb21wbGV4LiBTY2FsYXJzIGFyZSBjb252ZXJ0ZWQgdG8gMS1ECiAgICAgICAgYXJyYXlzLgogICAgZGVnIDogbGlzdCBvZiBpbnRzCiAgICAgICAgTGlzdCBvZiBtYXhpbXVtIGRlZ3JlZXMgb2YgdGhlIGZvcm0gW3hfZGVnLCB5X2RlZ10uCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgdmFuZGVyMmQgOiBuZGFycmF5CiAgICAgICAgVGhlIHNoYXBlIG9mIHRoZSByZXR1cm5lZCBtYXRyaXggaXMgYGB4LnNoYXBlICsgKG9yZGVyLClgYCwgd2hlcmUKICAgICAgICA6bWF0aDpgb3JkZXIgPSAoZGVnWzBdKzEpKihkZWdbMV0rMSlgLiAgVGhlIGR0eXBlIHdpbGwgYmUgdGhlIHNhbWUKICAgICAgICBhcyB0aGUgY29udmVydGVkIGB4YCBhbmQgYHlgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgaGVybXZhbmRlciwgaGVybXZhbmRlcjNkLCBoZXJtdmFsMmQsIGhlcm12YWwzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgqQNyKAAAANoPX3ZhbmRlcl9uZF9mbGF0chgAAAApA3J+AAAAcoUAAAByLQAAAHMDAAAAICAgcjAAAAByIQAAAHIhAAAAkAQAAHMjAAAAgAD1ZAEADA7UCx2deq060B42uBG4QbgGwAPRC0TUC0TQBERyMQAAAGMEAAAAAAAAAAAAAAAGAAAAAwAAAPNYAAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAdAQAAAAAAAAAAAAAdAQAAAAAAAAAAAAAdAQAAAAAAAAAAAAAZgN8AHwBfAJmA3wDpgMAAKsDAAAAAAAAAABTACkBYRoHAABQc2V1ZG8tVmFuZGVybW9uZGUgbWF0cml4IG9mIGdpdmVuIGRlZ3JlZXMuCgogICAgUmV0dXJucyB0aGUgcHNldWRvLVZhbmRlcm1vbmRlIG1hdHJpeCBvZiBkZWdyZWVzIGBkZWdgIGFuZCBzYW1wbGUKICAgIHBvaW50cyBgKHgsIHksIHopYC4gSWYgYGwsIG0sIG5gIGFyZSB0aGUgZ2l2ZW4gZGVncmVlcyBpbiBgeCwgeSwgemAsCiAgICB0aGVuIFRoZSBwc2V1ZG8tVmFuZGVybW9uZGUgbWF0cml4IGlzIGRlZmluZWQgYnkKCiAgICAuLiBtYXRoOjogVlsuLi4sIChtKzEpKG4rMSlpICsgKG4rMSlqICsga10gPSBIX2koeCkqSF9qKHkpKkhfayh6KSwKCiAgICB3aGVyZSBgMCA8PSBpIDw9IGxgLCBgMCA8PSBqIDw9IG1gLCBhbmQgYDAgPD0gaiA8PSBuYC4gIFRoZSBsZWFkaW5nCiAgICBpbmRpY2VzIG9mIGBWYCBpbmRleCB0aGUgcG9pbnRzIGAoeCwgeSwgeilgIGFuZCB0aGUgbGFzdCBpbmRleCBlbmNvZGVzCiAgICB0aGUgZGVncmVlcyBvZiB0aGUgSGVybWl0ZSBwb2x5bm9taWFscy4KCiAgICBJZiBgYFYgPSBoZXJtdmFuZGVyM2QoeCwgeSwgeiwgW3hkZWcsIHlkZWcsIHpkZWddKWBgLCB0aGVuIHRoZSBjb2x1bW5zCiAgICBvZiBgVmAgY29ycmVzcG9uZCB0byB0aGUgZWxlbWVudHMgb2YgYSAzLUQgY29lZmZpY2llbnQgYXJyYXkgYGNgIG9mCiAgICBzaGFwZSAoeGRlZyArIDEsIHlkZWcgKyAxLCB6ZGVnICsgMSkgaW4gdGhlIG9yZGVyCgogICAgLi4gbWF0aDo6IGNfezAwMH0sIGNfezAwMX0sIGNfezAwMn0sLi4uICwgY197MDEwfSwgY197MDExfSwgY197MDEyfSwuLi4KCiAgICBhbmQgIGBgbnAuZG90KFYsIGMuZmxhdClgYCBhbmQgYGBoZXJtdmFsM2QoeCwgeSwgeiwgYylgYCB3aWxsIGJlIHRoZQogICAgc2FtZSB1cCB0byByb3VuZG9mZi4gVGhpcyBlcXVpdmFsZW5jZSBpcyB1c2VmdWwgYm90aCBmb3IgbGVhc3Qgc3F1YXJlcwogICAgZml0dGluZyBhbmQgZm9yIHRoZSBldmFsdWF0aW9uIG9mIGEgbGFyZ2UgbnVtYmVyIG9mIDMtRCBIZXJtaXRlCiAgICBzZXJpZXMgb2YgdGhlIHNhbWUgZGVncmVlcyBhbmQgc2FtcGxlIHBvaW50cy4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4LCB5LCB6IDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5cyBvZiBwb2ludCBjb29yZGluYXRlcywgYWxsIG9mIHRoZSBzYW1lIHNoYXBlLiBUaGUgZHR5cGVzIHdpbGwKICAgICAgICBiZSBjb252ZXJ0ZWQgdG8gZWl0aGVyIGZsb2F0NjQgb3IgY29tcGxleDEyOCBkZXBlbmRpbmcgb24gd2hldGhlcgogICAgICAgIGFueSBvZiB0aGUgZWxlbWVudHMgYXJlIGNvbXBsZXguIFNjYWxhcnMgYXJlIGNvbnZlcnRlZCB0byAxLUQKICAgICAgICBhcnJheXMuCiAgICBkZWcgOiBsaXN0IG9mIGludHMKICAgICAgICBMaXN0IG9mIG1heGltdW0gZGVncmVlcyBvZiB0aGUgZm9ybSBbeF9kZWcsIHlfZGVnLCB6X2RlZ10uCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgdmFuZGVyM2QgOiBuZGFycmF5CiAgICAgICAgVGhlIHNoYXBlIG9mIHRoZSByZXR1cm5lZCBtYXRyaXggaXMgYGB4LnNoYXBlICsgKG9yZGVyLClgYCwgd2hlcmUKICAgICAgICA6bWF0aDpgb3JkZXIgPSAoZGVnWzBdKzEpKihkZWdbMV0rMSkqKGRlZ1syXSsxKWAuICBUaGUgZHR5cGUgd2lsbAogICAgICAgIGJlIHRoZSBzYW1lIGFzIHRoZSBjb252ZXJ0ZWQgYHhgLCBgeWAsIGFuZCBgemAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBoZXJtdmFuZGVyLCBoZXJtdmFuZGVyM2QsIGhlcm12YWwyZCwgaGVybXZhbDNkCgogICAgTm90ZXMKICAgIC0tLS0tCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS43LjAKCiAgICBylAAAACkEcn4AAAByhQAAAHKLAAAAci0AAABzBAAAACAgICByMAAAAHIiAAAAciIAAADFBAAAcycAAACAAPVmAQAMDtQLHZ16rTq1etAeQsBRyAHIMcBJyHPRC1PUC1PQBFNyMQAAAEZjBgAAAAAAAAAAAAAACQAAAAMAAADzQAAAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHQEAAAAAAAAAAAAAHwAfAF8AnwDfAR8BaYHAACrBwAAAAAAAAAAUwApAWEhFQAACiAgICBMZWFzdCBzcXVhcmVzIGZpdCBvZiBIZXJtaXRlIHNlcmllcyB0byBkYXRhLgoKICAgIFJldHVybiB0aGUgY29lZmZpY2llbnRzIG9mIGEgSGVybWl0ZSBzZXJpZXMgb2YgZGVncmVlIGBkZWdgIHRoYXQgaXMgdGhlCiAgICBsZWFzdCBzcXVhcmVzIGZpdCB0byB0aGUgZGF0YSB2YWx1ZXMgYHlgIGdpdmVuIGF0IHBvaW50cyBgeGAuIElmIGB5YCBpcwogICAgMS1EIHRoZSByZXR1cm5lZCBjb2VmZmljaWVudHMgd2lsbCBhbHNvIGJlIDEtRC4gSWYgYHlgIGlzIDItRCBtdWx0aXBsZQogICAgZml0cyBhcmUgZG9uZSwgb25lIGZvciBlYWNoIGNvbHVtbiBvZiBgeWAsIGFuZCB0aGUgcmVzdWx0aW5nCiAgICBjb2VmZmljaWVudHMgYXJlIHN0b3JlZCBpbiB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW5zIG9mIGEgMi1EIHJldHVybi4KICAgIFRoZSBmaXR0ZWQgcG9seW5vbWlhbChzKSBhcmUgaW4gdGhlIGZvcm0KCiAgICAuLiBtYXRoOjogIHAoeCkgPSBjXzAgKyBjXzEgKiBIXzEoeCkgKyAuLi4gKyBjX24gKiBIX24oeCksCgogICAgd2hlcmUgYG5gIGlzIGBkZWdgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHggOiBhcnJheV9saWtlLCBzaGFwZSAoTSwpCiAgICAgICAgeC1jb29yZGluYXRlcyBvZiB0aGUgTSBzYW1wbGUgcG9pbnRzIGBgKHhbaV0sIHlbaV0pYGAuCiAgICB5IDogYXJyYXlfbGlrZSwgc2hhcGUgKE0sKSBvciAoTSwgSykKICAgICAgICB5LWNvb3JkaW5hdGVzIG9mIHRoZSBzYW1wbGUgcG9pbnRzLiBTZXZlcmFsIGRhdGEgc2V0cyBvZiBzYW1wbGUKICAgICAgICBwb2ludHMgc2hhcmluZyB0aGUgc2FtZSB4LWNvb3JkaW5hdGVzIGNhbiBiZSBmaXR0ZWQgYXQgb25jZSBieQogICAgICAgIHBhc3NpbmcgaW4gYSAyRC1hcnJheSB0aGF0IGNvbnRhaW5zIG9uZSBkYXRhc2V0IHBlciBjb2x1bW4uCiAgICBkZWcgOiBpbnQgb3IgMS1EIGFycmF5X2xpa2UKICAgICAgICBEZWdyZWUocykgb2YgdGhlIGZpdHRpbmcgcG9seW5vbWlhbHMuIElmIGBkZWdgIGlzIGEgc2luZ2xlIGludGVnZXIKICAgICAgICBhbGwgdGVybXMgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgYGRlZ2AndGggdGVybSBhcmUgaW5jbHVkZWQgaW4gdGhlCiAgICAgICAgZml0LiBGb3IgTnVtUHkgdmVyc2lvbnMgPj0gMS4xMS4wIGEgbGlzdCBvZiBpbnRlZ2VycyBzcGVjaWZ5aW5nIHRoZQogICAgICAgIGRlZ3JlZXMgb2YgdGhlIHRlcm1zIHRvIGluY2x1ZGUgbWF5IGJlIHVzZWQgaW5zdGVhZC4KICAgIHJjb25kIDogZmxvYXQsIG9wdGlvbmFsCiAgICAgICAgUmVsYXRpdmUgY29uZGl0aW9uIG51bWJlciBvZiB0aGUgZml0LiBTaW5ndWxhciB2YWx1ZXMgc21hbGxlciB0aGFuCiAgICAgICAgdGhpcyByZWxhdGl2ZSB0byB0aGUgbGFyZ2VzdCBzaW5ndWxhciB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuIFRoZQogICAgICAgIGRlZmF1bHQgdmFsdWUgaXMgbGVuKHgpKmVwcywgd2hlcmUgZXBzIGlzIHRoZSByZWxhdGl2ZSBwcmVjaXNpb24gb2YKICAgICAgICB0aGUgZmxvYXQgdHlwZSwgYWJvdXQgMmUtMTYgaW4gbW9zdCBjYXNlcy4KICAgIGZ1bGwgOiBib29sLCBvcHRpb25hbAogICAgICAgIFN3aXRjaCBkZXRlcm1pbmluZyBuYXR1cmUgb2YgcmV0dXJuIHZhbHVlLiBXaGVuIGl0IGlzIEZhbHNlICh0aGUKICAgICAgICBkZWZhdWx0KSBqdXN0IHRoZSBjb2VmZmljaWVudHMgYXJlIHJldHVybmVkLCB3aGVuIFRydWUgZGlhZ25vc3RpYwogICAgICAgIGluZm9ybWF0aW9uIGZyb20gdGhlIHNpbmd1bGFyIHZhbHVlIGRlY29tcG9zaXRpb24gaXMgYWxzbyByZXR1cm5lZC4KICAgIHcgOiBhcnJheV9saWtlLCBzaGFwZSAoYE1gLCksIG9wdGlvbmFsCiAgICAgICAgV2VpZ2h0cy4gSWYgbm90IE5vbmUsIHRoZSB3ZWlnaHQgYGB3W2ldYGAgYXBwbGllcyB0byB0aGUgdW5zcXVhcmVkCiAgICAgICAgcmVzaWR1YWwgYGB5W2ldIC0geV9oYXRbaV1gYCBhdCBgYHhbaV1gYC4gSWRlYWxseSB0aGUgd2VpZ2h0cyBhcmUKICAgICAgICBjaG9zZW4gc28gdGhhdCB0aGUgZXJyb3JzIG9mIHRoZSBwcm9kdWN0cyBgYHdbaV0qeVtpXWBgIGFsbCBoYXZlIHRoZQogICAgICAgIHNhbWUgdmFyaWFuY2UuICBXaGVuIHVzaW5nIGludmVyc2UtdmFyaWFuY2Ugd2VpZ2h0aW5nLCB1c2UKICAgICAgICBgYHdbaV0gPSAxL3NpZ21hKHlbaV0pYGAuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGNvZWYgOiBuZGFycmF5LCBzaGFwZSAoTSwpIG9yIChNLCBLKQogICAgICAgIEhlcm1pdGUgY29lZmZpY2llbnRzIG9yZGVyZWQgZnJvbSBsb3cgdG8gaGlnaC4gSWYgYHlgIHdhcyAyLUQsCiAgICAgICAgdGhlIGNvZWZmaWNpZW50cyBmb3IgdGhlIGRhdGEgaW4gY29sdW1uIGsgIG9mIGB5YCBhcmUgaW4gY29sdW1uCiAgICAgICAgYGtgLgoKICAgIFtyZXNpZHVhbHMsIHJhbmssIHNpbmd1bGFyX3ZhbHVlcywgcmNvbmRdIDogbGlzdAogICAgICAgIFRoZXNlIHZhbHVlcyBhcmUgb25seSByZXR1cm5lZCBpZiBgYGZ1bGwgPT0gVHJ1ZWBgCgogICAgICAgIC0gcmVzaWR1YWxzIC0tIHN1bSBvZiBzcXVhcmVkIHJlc2lkdWFscyBvZiB0aGUgbGVhc3Qgc3F1YXJlcyBmaXQKICAgICAgICAtIHJhbmsgLS0gdGhlIG51bWVyaWNhbCByYW5rIG9mIHRoZSBzY2FsZWQgVmFuZGVybW9uZGUgbWF0cml4CiAgICAgICAgLSBzaW5ndWxhcl92YWx1ZXMgLS0gc2luZ3VsYXIgdmFsdWVzIG9mIHRoZSBzY2FsZWQgVmFuZGVybW9uZGUgbWF0cml4CiAgICAgICAgLSByY29uZCAtLSB2YWx1ZSBvZiBgcmNvbmRgLgoKICAgICAgICBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgYG51bXB5LmxpbmFsZy5sc3RzcWAuCgogICAgV2FybnMKICAgIC0tLS0tCiAgICBSYW5rV2FybmluZwogICAgICAgIFRoZSByYW5rIG9mIHRoZSBjb2VmZmljaWVudCBtYXRyaXggaW4gdGhlIGxlYXN0LXNxdWFyZXMgZml0IGlzCiAgICAgICAgZGVmaWNpZW50LiBUaGUgd2FybmluZyBpcyBvbmx5IHJhaXNlZCBpZiBgYGZ1bGwgPT0gRmFsc2VgYC4gIFRoZQogICAgICAgIHdhcm5pbmdzIGNhbiBiZSB0dXJuZWQgb2ZmIGJ5CgogICAgICAgID4+PiBpbXBvcnQgd2FybmluZ3MKICAgICAgICA+Pj4gd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBucC5SYW5rV2FybmluZykKCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIG51bXB5LnBvbHlub21pYWwuY2hlYnlzaGV2LmNoZWJmaXQKICAgIG51bXB5LnBvbHlub21pYWwubGVnZW5kcmUubGVnZml0CiAgICBudW1weS5wb2x5bm9taWFsLmxhZ3VlcnJlLmxhZ2ZpdAogICAgbnVtcHkucG9seW5vbWlhbC5wb2x5bm9taWFsLnBvbHlmaXQKICAgIG51bXB5LnBvbHlub21pYWwuaGVybWl0ZV9lLmhlcm1lZml0CiAgICBoZXJtdmFsIDogRXZhbHVhdGVzIGEgSGVybWl0ZSBzZXJpZXMuCiAgICBoZXJtdmFuZGVyIDogVmFuZGVybW9uZGUgbWF0cml4IG9mIEhlcm1pdGUgc2VyaWVzLgogICAgaGVybXdlaWdodCA6IEhlcm1pdGUgd2VpZ2h0IGZ1bmN0aW9uCiAgICBudW1weS5saW5hbGcubHN0c3EgOiBDb21wdXRlcyBhIGxlYXN0LXNxdWFyZXMgZml0IGZyb20gdGhlIG1hdHJpeC4KICAgIHNjaXB5LmludGVycG9sYXRlLlVuaXZhcmlhdGVTcGxpbmUgOiBDb21wdXRlcyBzcGxpbmUgZml0cy4KCiAgICBOb3RlcwogICAgLS0tLS0KICAgIFRoZSBzb2x1dGlvbiBpcyB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBIZXJtaXRlIHNlcmllcyBgcGAgdGhhdAogICAgbWluaW1pemVzIHRoZSBzdW0gb2YgdGhlIHdlaWdodGVkIHNxdWFyZWQgZXJyb3JzCgogICAgLi4gbWF0aDo6IEUgPSBcc3VtX2ogd19qXjIgKiB8eV9qIC0gcCh4X2opfF4yLAoKICAgIHdoZXJlIHRoZSA6bWF0aDpgd19qYCBhcmUgdGhlIHdlaWdodHMuIFRoaXMgcHJvYmxlbSBpcyBzb2x2ZWQgYnkKICAgIHNldHRpbmcgdXAgdGhlICh0eXBpY2FsbHkpIG92ZXJkZXRlcm1pbmVkIG1hdHJpeCBlcXVhdGlvbgoKICAgIC4uIG1hdGg6OiBWKHgpICogYyA9IHcgKiB5LAoKICAgIHdoZXJlIGBWYCBpcyB0aGUgd2VpZ2h0ZWQgcHNldWRvIFZhbmRlcm1vbmRlIG1hdHJpeCBvZiBgeGAsIGBjYCBhcmUgdGhlCiAgICBjb2VmZmljaWVudHMgdG8gYmUgc29sdmVkIGZvciwgYHdgIGFyZSB0aGUgd2VpZ2h0cywgYHlgIGFyZSB0aGUKICAgIG9ic2VydmVkIHZhbHVlcy4gIFRoaXMgZXF1YXRpb24gaXMgdGhlbiBzb2x2ZWQgdXNpbmcgdGhlIHNpbmd1bGFyIHZhbHVlCiAgICBkZWNvbXBvc2l0aW9uIG9mIGBWYC4KCiAgICBJZiBzb21lIG9mIHRoZSBzaW5ndWxhciB2YWx1ZXMgb2YgYFZgIGFyZSBzbyBzbWFsbCB0aGF0IHRoZXkgYXJlCiAgICBuZWdsZWN0ZWQsIHRoZW4gYSBgUmFua1dhcm5pbmdgIHdpbGwgYmUgaXNzdWVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlCiAgICBjb2VmZmljaWVudCB2YWx1ZXMgbWF5IGJlIHBvb3JseSBkZXRlcm1pbmVkLiBVc2luZyBhIGxvd2VyIG9yZGVyIGZpdAogICAgd2lsbCB1c3VhbGx5IGdldCByaWQgb2YgdGhlIHdhcm5pbmcuICBUaGUgYHJjb25kYCBwYXJhbWV0ZXIgY2FuIGFsc28gYmUKICAgIHNldCB0byBhIHZhbHVlIHNtYWxsZXIgdGhhbiBpdHMgZGVmYXVsdCwgYnV0IHRoZSByZXN1bHRpbmcgZml0IG1heSBiZQogICAgc3B1cmlvdXMgYW5kIGhhdmUgbGFyZ2UgY29udHJpYnV0aW9ucyBmcm9tIHJvdW5kb2ZmIGVycm9yLgoKICAgIEZpdHMgdXNpbmcgSGVybWl0ZSBzZXJpZXMgYXJlIHByb2JhYmx5IG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgY2FuIGJlCiAgICBhcHByb3hpbWF0ZWQgYnkgYGBzcXJ0KHcoeCkpICogcCh4KWBgLCB3aGVyZSBgdyh4KWAgaXMgdGhlIEhlcm1pdGUKICAgIHdlaWdodC4gSW4gdGhhdCBjYXNlIHRoZSB3ZWlnaHQgYGBzcXJ0KHcoeFtpXSkpYGAgc2hvdWxkIGJlIHVzZWQKICAgIHRvZ2V0aGVyIHdpdGggZGF0YSB2YWx1ZXMgYGB5W2ldL3NxcnQodyh4W2ldKSlgYC4gVGhlIHdlaWdodCBmdW5jdGlvbiBpcwogICAgYXZhaWxhYmxlIGFzIGBoZXJtd2VpZ2h0YC4KCiAgICBSZWZlcmVuY2VzCiAgICAtLS0tLS0tLS0tCiAgICAuLiBbMV0gV2lraXBlZGlhLCAiQ3VydmUgZml0dGluZyIsCiAgICAgICAgICAgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3VydmVfZml0dGluZwoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZy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Y2hlYnlzaGV2LmNoZWJyb290cwogICAgbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlX2UuaGVybWVyb290cwoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgVGhlIHJvb3QgZXN0aW1hdGVzIGFyZSBvYnRhaW5lZCBhcyB0aGUgZWlnZW52YWx1ZXMgb2YgdGhlIGNvbXBhbmlvbgogICAgbWF0cml4LCBSb290cyBmYXIgZnJvbSB0aGUgb3JpZ2luIG9mIHRoZSBjb21wbGV4IHBsYW5lIG1heSBoYXZlIGxhcmdlCiAgICBlcnJvcnMgZHVlIHRvIHRoZSBudW1lcmljYWwgaW5zdGFiaWxpdHkgb2YgdGhlIHNlcmllcyBmb3Igc3VjaAogICAgdmFsdWVzLiBSb290cyB3aXRoIG11bHRpcGxpY2l0eSBncmVhdGVyIHRoYW4gMSB3aWxsIGFsc28gc2hvdyBsYXJnZXIKICAgIGVycm9ycyBhcyB0aGUgdmFsdWUgb2YgdGhlIHNlcmllcyBuZWFyIHN1Y2ggcG9pbnRzIGlzIHJlbGF0aXZlbHkKICAgIGluc2Vuc2l0aXZlIHRvIGVycm9ycyBpbiB0aGUgcm9vdHMuIElzb2xhdGVkIHJvb3RzIG5lYXIgdGhlIG9yaWdpbiBjYW4KICAgIGJlIGltcHJvdmVkIGJ5IGEgZmV3IGl0ZXJhdGlvbnMgb2YgTmV3dG9uJ3MgbWV0aG9kLgoKICAgIFRoZSBIZXJtaXRlIHNlcmllcyBiYXNpcyBwb2x5bm9taWFscyBhcmVuJ3QgcG93ZXJzIG9mIGB4YCBzbyB0aGUKICAgIHJlc3VsdHMgb2YgdGhpcyBmdW5jdGlvbiBtYXkgc2VlbSB1bmludHVpdGl2ZS4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBmcm9tIG51bXB5LnBvbHlub21pYWwuaGVybWl0ZSBpbXBvcnQgaGVybXJvb3RzLCBoZXJtZnJvbXJvb3RzCiAgICA+Pj4gY29lZiA9IGhlcm1mcm9tcm9vdHMoWy0xLCAwLCAxXSkKICAgID4+PiBjb2VmCiAgICBhcnJheShbMC4gICAsICAwLjI1ICwgIDAuICAgLCAgMC4xMjVdKQogICAgPj4+IGhlcm1yb290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QW4gSGVybWl0ZSBzZXJpZXMgY2xhc3MuCgogICAgVGhlIEhlcm1pdGUgY2xhc3MgcHJvdmlkZXMgdGhlIHN0YW5kYXJkIFB5dGhvbiBudW1lcmljYWwgbWV0aG9kcwogICAgJysnLCAnLScsICcqJywgJy8vJywgJyUnLCAnZGl2bW9kJywgJyoqJywgYW5kICcoKScgYXMgd2VsbCBhcyB0aGUKICAgIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMgbGlzdGVkIGluIHRoZSBgQUJDUG9seUJhc2VgIGRvY3VtZW50YXRpb24uCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgY29lZiA6IGFycmF5X2xpa2UKICAgICAgICBIZXJtaXRlIGNvZWZmaWNpZW50cyBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIGRlZ3JlZSwgaS5lLAogICAgICAgIGBgKDEsIDIsIDMpYGAgZ2l2ZXMgYGAxKkhfMCh4KSArIDIqSF8xKFgpICsgMypIXzIoeClgYC4KICAgIGRvbWFpbiA6ICgyLCkgYXJyYXlfbGlrZSwgb3B0aW9uYWwKICAgICAgICBEb21haW4gdG8gdXNlLiBUaGUgaW50ZXJ2YWwgYGBbZG9tYWluWzBdLCBkb21haW5bMV1dYGAgaXMgbWFwcGVkCiAgICAgICAgdG8gdGhlIGludGVydmFsIGBgW3dpbmRvd1swXSwgd2luZG93WzFdXWBgIGJ5IHNoaWZ0aW5nIGFuZCBzY2FsaW5nLgogICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFstMSwgMV0uCiAgICB3aW5kb3cgOiAoMiwpIGFycmF5X2xpa2UsIG9wdGlvbmFsCiAgICAgICAgV2luZG93LCBzZWUgYGRvbWFpbmAgZm9yIGl0cyB1c2UuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFstMSwgMV0uCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNi4wCiAgICBzeW1ib2wgOiBzdHIsIG9wdGlvbmFsCiAgICAgICAgU3ltYm9sIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSBpbiBzdHJpbmcKICAgICAgICByZXByZXNlbnRh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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 10
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
chebyshev.cpython-311.pyc
72.84 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
hermite.cpython-311.pyc
60.65 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
hermite_e.cpython-311.pyc
60.42 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
laguerre.cpython-311.pyc
58.41 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
legendre.cpython-311.pyc
59.03 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
polynomial.cpython-311.pyc
55.05 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
polyutils.cpython-311.pyc
32.05 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
setup.cpython-311.pyc
873 B
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_polybase.cpython-311.pyc
48.85 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-311.pyc
7.02 KB
lrw-r--r--
2026-02-06 08:07:28
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).