REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 58.41 KB
Close
//opt/cloudlinux/venv/lib/python3.11/site-packages/numpy/polynomial/__pycache__/laguerre.cpython-311.pyc
Text
Base64
pw0NCgAAAAC8fG9pqsYAAOMAAAAAAAAAAAAAAAAFAAAAAAAAAPOqAQAAlwBkAFoAZAFkAmwBWgJkAWQCbANtBFoFAQBkAWQDbAZtB1oHAQBkBGQFbAhtCVoKAQBkBGQGbAttDFoMAQBnAGQHogFaDWUKag4AAAAAAAAAAFoPZAiEAFoQZAmEAFoRAgBlAmoSAAAAAAAAAABkAWQEZwKmAQAAqwEAAAAAAAAAAFoTAgBlAmoSAAAAAAAAAABkAWcBpgEAAKsBAAAAAAAAAABaFAIAZQJqEgAAAAAAAAAAZARnAaYBAACrAQAAAAAAAAAAWhUCAGUCahIAAAAAAAAAAGQEZApnAqYBAACrAQAAAAAAAAAAWhZkC4QAWhdkDIQAWhhkDYQAWhlkDoQAWhpkD4QAWhtkEIQAWhxkEYQAWh1kJ2QThAFaHmQoZBSEAVofZARnAGQBZARkAWYFZBWEAVogZClkF4QBWiFkGIQAWiJkGYQAWiNkGoQAWiRkG4QAWiVkHIQAWiZkHYQAWidkHoQAWihkKmQghAFaKWQhhABaKmQihABaK2QjhABaLGQkhABaLQIARwBkJYQAZCZlDKYDAACrAwAAAAAAAAAAWi5kAlMAKSthvgQAAAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpMYWd1ZXJyZSBTZXJpZXMgKDptb2Q6YG51bXB5LnBvbHlub21pYWwubGFndWVycmVgKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBudW1iZXIgb2Ygb2JqZWN0cyAobW9zdGx5IGZ1bmN0aW9ucykgdXNlZnVsIGZvcgpkZWFsaW5nIHdpdGggTGFndWVycmUgc2VyaWVzLCBpbmNsdWRpbmcgYSBgTGFndWVycmVgIGNsYXNzIHRoYXQKZW5jYXBzdWxhdGVzIHRoZSB1c3VhbCBhcml0aG1ldGljIG9wZXJhdGlvbnMuICAoR2VuZXJhbCBpbmZvcm1hdGlvbgpvbiBob3cgdGhpcyBtb2R1bGUgcmVwcmVzZW50cyBhbmQgd29ya3Mgd2l0aCBzdWNoIHBvbHlub21pYWxzIGlzIGluIHRoZQpkb2NzdHJpbmcgZm9yIGl0cyAicGFyZW50IiBzdWItcGFja2FnZSwgYG51bXB5LnBvbHlub21pYWxgKS4KCkNsYXNzZXMKLS0tLS0tLQouLiBhdXRvc3VtbWFyeTo6CiAgIDp0b2N0cmVlOiBnZW5lcmF0ZWQvCgogICBMYWd1ZXJyZQoKQ29uc3RhbnRzCi0tLS0tLS0tLQouLiBhdXRvc3VtbWFyeTo6CiAgIDp0b2N0cmVlOiBnZW5lcmF0ZWQvCgogICBsYWdkb21haW4KICAgbGFnemVybwogICBsYWdvbmUKICAgbGFneAoKQXJpdGhtZXRpYwotLS0tLS0tLS0tCi4uIGF1dG9zdW1tYXJ5OjoKICAgOnRvY3RyZWU6IGdlbmVyYXRlZC8KCiAgIGxhZ2FkZAogICBsYWdzdWIKICAgbGFnbXVseAogICBsYWdtdWwKICAgbGFnZGl2CiAgIGxhZ3BvdwogICBsYWd2YWwKICAgbGFndmFsMmQKICAgbGFndmFsM2QKICAgbGFnZ3JpZDJkCiAgIGxhZ2dyaWQzZAoKQ2FsY3VsdXMKLS0tLS0tLS0KLi4gYXV0b3N1bW1hcnk6OgogICA6dG9jdHJlZTogZ2VuZXJhdGVkLwoKICAgbGFnZGVyCiAgIGxhZ2ludAoKTWlzYyBGdW5jdGlvbnMKLS0tLS0tLS0tLS0tLS0KLi4gYXV0b3N1bW1hcnk6OgogICA6dG9jdHJlZTogZ2VuZXJhdGVkLwoKICAgbGFnZnJvbXJvb3RzCiAgIGxhZ3Jvb3RzCiAgIGxhZ3ZhbmRlcgogICBsYWd2YW5kZXIyZAogICBsYWd2YW5kZXIzZAogICBsYWdnYXVzcwogICBsYWd3ZWlnaHQKICAgbGFnY29tcGFuaW9uCiAgIGxhZ2ZpdAogICBsYWd0cmltCiAgIGxhZ2xpbmUKICAgbGFnMnBvbHkKICAgcG9seTJsYWcKClNlZSBhbHNvCi0tLS0tLS0tCmBudW1weS5wb2x5bm9taWFsYAoK6QAAAABOKQHaFG5vcm1hbGl6ZV9heGlzX2luZGV46QEAAAApAdoJcG9seXV0aWxzKQHaC0FCQ1BvbHlCYXNlKR/aB2xhZ3plcm/aBmxhZ29uZdoEbGFneNoJbGFnZG9tYWlu2gdsYWdsaW5l2gZsYWdhZGTaBmxhZ3N1YtoHbGFnbXVseNoGbGFnbXVs2gZsYWdkaXbaBmxhZ3Bvd9oGbGFndmFs2gZsYWdkZXLaBmxhZ2ludNoIbGFnMnBvbHnaCHBvbHkybGFn2gxsYWdmcm9tcm9vdHPaCWxhZ3ZhbmRlctoGbGFnZml02gdsYWd0cmlt2ghsYWdyb290c9oITGFndWVycmXaCGxhZ3ZhbDJk2ghsYWd2YWwzZNoJbGFnZ3JpZDJk2glsYWdncmlkM2TaC2xhZ3ZhbmRlcjJk2gtsYWd2YW5kZXIzZNoMbGFnY29tcGFuaW9u2ghsYWdnYXVzc9oJbGFnd2VpZ2h0YwEAAAAAAAAAAAAAAAYAAAADAAAA844AAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB8AGcBpgEAAKsBAAAAAAAAAABcAQAAfQBkAX0BfABkAmQCZAOFAxkAAAAAAAAAAABEAF0ffQJ0BQAAAAAAAAAAAAB0BwAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAAfAKmAgAAqwIAAAAAAAAAAH0BjCB8AVMAKQRhhAMAAAogICAgcG9seTJsYWcocG9sKQoKICAgIENvbnZlcnQgYSBwb2x5bm9taWFsIHRvIGEgTGFndWVycmUgc2VyaWVzLgoKICAgIENvbnZlcnQgYW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBjb2VmZmljaWVudHMgb2YgYSBwb2x5bm9taWFsIChyZWxhdGl2ZQogICAgdG8gdGhlICJzdGFuZGFyZCIgYmFzaXMpIG9yZGVyZWQgZnJvbSBsb3dlc3QgZGVncmVlIHRvIGhpZ2hlc3QsIHRvIGFuCiAgICBhcnJheSBvZiB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBlcXVpdmFsZW50IExhZ3VlcnJlIHNlcmllcywgb3JkZXJlZAogICAgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCBkZWdyZWUuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgcG9sIDogYXJyYXlfbGlrZQogICAgICAgIDEtRCBhcnJheSBjb250YWluaW5nIHRoZSBwb2x5bm9taWFsIGNvZWZmaWNpZW50cwoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGMgOiBu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aXBsaWVkIGJ5IGBzY2xgICh0aGUKICAgIHNjYWxpbmcgZmFjdG9yIGlzIGZvciB1c2UgaW4gYSBsaW5lYXIgY2hhbmdlIG9mIHZhcmlhYmxlKS4gVGhlIGFyZ3VtZW50CiAgICBgY2AgaXMgYW4gYXJyYXkgb2YgY29lZmZpY2llbnRzIGZyb20gbG93IHRvIGhpZ2ggZGVncmVlIGFsb25nIGVhY2gKICAgIGF4aXMsIGUuZy4sIFsxLDIsM10gcmVwcmVzZW50cyB0aGUgc2VyaWVzIGBgMSpMXzAgKyAyKkxfMSArIDMqTF8yYGAKICAgIHdoaWxlIFtbMSwyXSxbMSwyXV0gcmVwcmVzZW50cyBgYDEqTF8wKHgpKkxfMCh5KSArIDEqTF8xKHgpKkxfMCh5KSArCiAgICAyKkxfMCh4KSpMXzEoeSkgKyAyKkxfMSh4KSpMXzEoeSlgYCBpZiBheGlzPTAgaXMgYGB4YGAgYW5kIGF4aXM9MSBpcwogICAgYGB5YGAuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBMYWd1ZXJyZSBzZXJpZXMgY29lZmZpY2llbnRzLiBJZiBgY2AgaXMgbXVsdGlkaW1lbnNpb25hbAogICAgICAgIHRoZSBkaWZmZXJlbnQgYXhpcyBjb3JyZXNwb25kIHRvIGRpZmZlcmVudCB2YXJpYWJsZXMgd2l0aCB0aGUKICAgICAgICBkZWdyZWUgaW4gZWFjaCBheGlzIGdpdmVuIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGluZGV4LgogICAgbSA6IGludCwgb3B0aW9uYWwKICAgICAgICBOdW1iZXIgb2YgZGVyaXZhdGl2ZXMgdGFrZW4sIG11c3QgYmUgbm9uLW5lZ2F0aXZlLiAoRGVmYXVsdDogMSkKICAgIHNjbCA6IHNjYWxhciwgb3B0aW9uYWwKICAgICAgICBFYWNoIGRpZmZlcmVudGlhdGlvbiBpcyBtdWx0aXBsaWVkIGJ5IGBzY2xgLiAgVGhlIGVuZCByZXN1bHQgaXMKICAgICAgICBtdWx0aXBsaWNhdGlvbiBieSBgYHNjbCoqbWBgLiAgVGhpcyBpcyBmb3IgdXNl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KwogICAgMipMXzEoeCkqTF8xKHkpYGAgaWYgYXhpcz0wIGlzIGBgeGBgIGFuZCBheGlzPTEgaXMgYGB5YGAuCgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2YgTGFndWVycmUgc2VyaWVzIGNvZWZmaWNpZW50cy4gSWYgYGNgIGlzIG11bHRpZGltZW5zaW9uYWwKICAgICAgICB0aGUgZGlmZmVyZW50IGF4aXMgY29ycmVzcG9uZCB0byBkaWZmZXJlbnQgdmFyaWFibGVzIHdpdGggdGhlCiAgICAgICAgZGVncmVlIGluIGVhY2ggYXhpcyBnaXZlbiBieSB0aGUgY29ycmVzcG9uZGluZyBpbmRleC4KICAgIG0gOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgT3JkZXIgb2YgaW50ZWdyYXRpb24sIG11c3QgYmUgcG9zaXRpdmUuIChEZWZhdWx0OiAxKQogICAgayA6IHtbXSwgbGlzdCwgc2NhbGFyfSwgb3B0aW9uYWwKICAgICAgICBJbnRlZ3JhdGlvbiBjb25zdGFudChzKS4gIFRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaW50ZWdyYWwgYXQKICAgICAgICBgYGxibmRgYCBpcyB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlIGxpc3QsIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kCiAgICAgICAgaW50ZWdyYWwgYXQgYGBsYm5kYGAgaXMgdGhlIHNlY29uZCB2YWx1ZSwgZXRjLiAgSWYgYGBrID09IFtdYGAgKHRoZQogICAgICAgIGRlZmF1bHQpLCBhbGwgY29uc3RhbnRzIGFyZSBzZXQgdG8gemVyby4gIElmIGBgbSA9PSAxYGAsIGEgc2luZ2xlCiAgICAgICAgc2NhbGFyIGNhbiBiZSBnaXZlbiBpbnN0ZWFkIG9mIGEgbGlzdC4KICAgIGxibmQgOiBzY2FsYXIsIG9wdGlvbmFsCiAgICAgICAgVGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBpbnRlZ3JhbC4gKERlZmF1bHQ6IDApCiAgICBzY2wgOiBzY2FsYXIsIG9wdGlvbmFsCiAgICAgICAgRm9sbG93aW5nIGVhY2ggaW50ZWdyYXRpb24gdGhlIHJlc3VsdCBpcyAqbXVsdGlwbGllZCogYnkgYHNjbGAKICAgICAgICBiZWZvcmUgdGhlIGludGVncmF0aW9uIGNvbnN0YW50IGlzIGFkZGVkLiAoRGVmYXVsdDogMSkKICAgIGF4aXMgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgQXhpcyBvdmVyIHdoaWNoIHRoZSBpbnRlZ3JhbCBpcyB0YWtlbi4gKERlZmF1bHQ6IDApLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIFMgOiBuZGFycmF5CiAgICAgICAgTGFndWVycmUgc2VyaWVzIGNvZWZmaWNpZW50cyBvZiB0aGUgaW50ZWdyYWwuCgogICAgUmFpc2VzCiAgICAtLS0tLS0KICAgIFZhbHVlRXJyb3IKICAgICAgICBJZiBgYG0gPCAwYGAsIGBgbGVuKGspID4gbWBgLCBgYG5wLm5kaW0obGJuZCkgIT0gMGBgLCBvcgogICAgICAgIGBgbnAubmRpbShzY2wpICE9IDBgYC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGxhZ2RlcgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgTm90ZSB0aGF0IHRoZSByZXN1bHQgb2YgZWFjaCBpbnRlZ3JhdGlvbiBpcyAqbXVsdGlwbGllZCogYnkgYHNjbGAuCiAgICBXaHkgaXMgdGhpcyBpbXBvcnRhbnQgdG8gbm90ZT8gIFNheSBvbmUgaXMgbWFraW5nIGEgbGluZWFyIGNoYW5nZSBvZgogICAgdmFyaWFibGUgOm1hdGg6YHUgPSBheCArIGJgIGluIGFuIGludGVncmFsIHJlbGF0aXZlIHRvIGB4YC4gIFRoZW4KICAgIDptYXRoOmBkeCA9IGR1L2FgLCBzbyBvbmUgd2lsbCBuZWVkIHRvIHNldCBgc2NsYCBlcXVhbCB0bwogICAgOm1hdGg6YDEvYWAgLSBwZXJoYXBzIG5vdCB3aGF0IG9uZSB3b3VsZCBoYXZlIGZpcnN0IHRob3VnaHQuCgogICAgQWxzbyBub3RlIHRoYXQsIGluIGdlbmVy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cyBjb252ZXJ0ZWQgdG8gYW4gYXJyYXkgb25seSBpZiBpdCBpcyBhIHR1cGxlIG9yIGEKICAgIGxpc3QsIG90aGVyd2lzZSBpdCBpcyB0cmVhdGVkIGFzIGEgc2NhbGFyLiBJbiBlaXRoZXIgY2FzZSwgZWl0aGVyIGB4YAogICAgb3IgaXRzIGVsZW1lbnRzIG11c3Qgc3VwcG9ydCBtdWx0aXBsaWNhdGlvbiBhbmQgYWRkaXRpb24gYm90aCB3aXRoCiAgICB0aGVtc2VsdmVzIGFuZCB3aXRoIHRoZSBlbGVtZW50cyBvZiBgY2AuCgogICAgSWYgYGNgIGlzIGEgMS1EIGFycmF5LCB0aGVuIGBwKHgpYCB3aWxsIGhhdmUgdGhlIHNhbWUgc2hhcGUgYXMgYHhgLiAgSWYKICAgIGBjYCBpcyBtdWx0aWRpbWVuc2lvbmFsLCB0aGVuIHRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlCiAgICB2YWx1ZSBvZiBgdGVuc29yYC4gSWYgYHRlbnNvcmAgaXMgdHJ1ZSB0aGUgc2hhcGUgd2lsbCBiZSBjLnNoYXBlWzE6XSArCiAgICB4LnNoYXBlLiBJZiBgdGVuc29yYCBpcyBmYWxzZSB0aGUgc2hhcGUgd2lsbCBiZSBjLnNoYXBlWzE6XS4gTm90ZSB0aGF0CiAgICBzY2FsYXJzIGhhdmUgc2hhcGUgKCwpLgoKICAgIFRyYWlsaW5nIHplcm9zIGluIHRoZSBjb2VmZmljaWVudHMgd2lsbCBiZSB1c2VkIGluIHRoZSBldmFsdWF0aW9uLCBzbwogICAgdGhleSBzaG91bGQgYmUgYXZvaWRlZCBpZiBlZmZpY2llbmN5IGlzIGEgY29uY2Vybi4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4IDogYXJyYXlfbGlrZSwgY29tcGF0aWJsZSBvYmplY3QKICAgICAgICBJZiBgeGAgaXMgYSBsaXN0IG9yIHR1cGxlLCBpdCBpcyBjb252ZXJ0ZWQgdG8gYW4gbmRhcnJheSwgb3RoZXJ3aXNlCiAgICAgICAgaXQgaXMgbGVmdCB1bmNoYW5nZWQgYW5kIHRyZWF0ZWQgYXMgYSBzY2FsYXIuIEluIGVpdGhlciBjYXNlLCBgeGAKICAgICAgICBvciBpdHMgZWxlbWVudHMgbXVzdCBzdXBwb3J0IGFkZGl0aW9uIGFuZCBtdWx0aXBsaWNhdGlvbiB3aXRoCiAgICAgICAgdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMgb2YgYGNgLgogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBjb2VmZmljaWVudHMgb3JkZXJlZCBzbyB0aGF0IHRoZSBjb2VmZmljaWVudHMgZm9yIHRlcm1zIG9mCiAgICAgICAgZGVncmVlIG4gYXJlIGNvbnRhaW5lZCBpbiBjW25dLiBJZiBgY2AgaXMgbXVsdGlkaW1lbnNpb25hbCB0aGUKICAgICAgICByZW1haW5pbmcgaW5kaWNlcyBlbnVtZXJhdGUgbXVsdGlwbGUgcG9seW5vbWlhbHMuIEluIHRoZSB0d28KICAgICAgICBkaW1lbnNpb25hbCBjYXNlIHRoZSBjb2VmZmljaWVudHMgbWF5IGJlIHRob3VnaHQgb2YgYXMgc3RvcmVkIGluCiAgICAgICAgdGhlIGNvbHVtbnMgb2YgYGNgLgogICAgdGVuc29yIDogYm9vbGVhbiwgb3B0aW9uYWwKICAgICAgICBJZiBUcnVlLCB0aGUgc2hhcGUgb2YgdGhlIGNvZWZmaWNpZW50IGFycmF5IGlzIGV4dGVuZGVkIHdpdGggb25lcwogICAgICAgIG9uIHRoZSByaWdodCwgb25lIGZvciBlYWNoIGRpbWVuc2lvbiBvZiBgeGAuIFNjYWxhcnMgaGF2ZSBkaW1lbnNpb24gMAogICAgICAgIGZvciB0aGlzIGFjdGlvbi4gVGhlIHJlc3VsdCBpcyB0aGF0IGV2ZXJ5IGNvbHVtbiBvZiBjb2VmZmljaWVudHMgaW4KICAgICAgICBgY2AgaXMgZXZhbHVhdGVkIGZvciBldmVyeSBlbGVtZW50IG9mIGB4YC4gSWYgRmFsc2UsIGB4YCBpcyBicm9hZGNhc3QKICAgICAgICBvdmVyIHRoZSBjb2x1bW5zIG9mIGBjYCBmb3IgdGhlIGV2YWx1YXRpb24uICBUaGlzIGtleXdvcmQgaXMgdXNlZnVsCiAgICAgICAgd2hlbiBg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SWYgYGNgIGlzIGEgMS1EIGFycmF5IGEgb25lIGlzIGltcGxpY2l0bHkgYXBwZW5kZWQgdG8gaXRzIHNoYXBlIHRvIG1ha2UKICAgIGl0IDItRC4gVGhlIHNoYXBlIG9mIHRoZSByZXN1bHQgd2lsbCBiZSBjLnNoYXBlWzI6XSArIHguc2hhcGUuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSA6IGFycmF5X2xpa2UsIGNvbXBhdGlibGUgb2JqZWN0cwogICAgICAgIFRoZSB0d28gZGltZW5zaW9uYWwgc2VyaWVzIGlzIGV2YWx1YXRlZCBhdCB0aGUgcG9pbnRzIGAoeCwgeSlgLAogICAgICAgIHdoZXJlIGB4YCBhbmQgYHlgIG11c3QgaGF2ZSB0aGUgc2FtZSBzaGFwZS4gSWYgYHhgIG9yIGB5YCBpcyBhIGxpc3QKICAgICAgICBvciB0dXBsZSwgaXQgaXMgZmlyc3QgY29udmVydGVkIHRvIGFuIG5kYXJyYXksIG90aGVyd2lzZSBpdCBpcyBsZWZ0CiAgICAgICAgdW5jaGFuZ2VkIGFuZCBpZiBpdCBpc24ndCBhbiBuZGFycmF5IGl0IGlzIHRyZWF0ZWQgYXMgYSBzY2FsYXIuCiAgICBjIDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIGNvZWZmaWNpZW50cyBvcmRlcmVkIHNvIHRoYXQgdGhlIGNvZWZmaWNpZW50IG9mIHRoZSB0ZXJtCiAgICAgICAgb2YgbXVsdGktZGVncmVlIGksaiBpcyBjb250YWluZWQgaW4gYGBjW2ksal1gYC4gSWYgYGNgIGhhcwogICAgICAgIGRpbWVuc2lvbiBncmVhdGVyIHRoYW4gdHdvIHRoZSByZW1haW5pbmcgaW5kaWNlcyBlbnVtZXJhdGUgbXVsdGlwbGUKICAgICAgICBzZXRzIG9mIGNvZWZmaWNpZW50cy4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICB2YWx1ZXMgOiBuZGFycmF5LCBjb21wYXRpYmxlIG9iamVjdAogICAgICAgIFRoZSB2YWx1ZXMgb2YgdGhlIHR3byBkaW1lbnNpb25hbCBwb2x5bm9taWFsIGF0IHBvaW50cyBmb3JtZWQgd2l0aAogICAgICAgIHBhaXJzIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZyb20gYHhgIGFuZCBgeWAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBsYWd2YWwsIGxhZ2dyaWQyZCwgbGFndmFsM2QsIGxhZ2dyaWQzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgqQNyKAAAANoGX3ZhbG5kchIAAACpA3J8AAAA2gF5cjgAAABzAwAAACAgIHItAAAAch0AAAByHQAAAIADAABzGwAAAIAA9VwBAAwOjDmVVphRoAGgMdELJdQLJdAEJXIuAAAAYwMAAAAAAAAAAAAAAAYAAAADAAAA8zoAAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB0BAAAAAAAAAAAAAB8AnwAfAGmBAAAqwQAAAAAAAAAAFMAKQFh4wYAAAogICAgRXZhbHVhdGUgYSAyLUQgTGFndWVycmUgc2VyaWVzIG9uIHRoZSBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiB4IGFuZCB5LgoKICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWVzOgoKICAgIC4uIG1hdGg6OiBwKGEsYikgPSBcc3VtX3tpLGp9IGNfe2ksan0gKiBMX2koYSkgKiBMX2ooYikKCiAgICB3aGVyZSB0aGUgcG9pbnRzIGAoYSwgYilgIGNvbnNpc3Qgb2YgYWxsIHBhaXJzIGZvcm1lZCBieSB0YWtpbmcKICAgIGBhYCBmcm9tIGB4YCBhbmQgYGJgIGZyb20gYHlgLiBUaGUgcmVzdWx0aW5nIHBvaW50cyBmb3JtIGEgZ3JpZCB3aXRoCiAgICBgeGAgaW4gdGhlIGZpcnN0IGRpbWVuc2lvbiBhbmQgYHlgIGluIHRoZSBzZWNvbmQuCgogICAgVGhlIHBhcmFtZXRlcnMgYHhgIGFuZCBgeWAgYXJlIGNvbnZlcnRlZCB0byBhcnJheXMgb25seSBpZiB0aGV5IGFyZQogICAgdHVwbGVzIG9yIGEgbGlzdHMsIG90aGVyd2lzZSB0aGV5IGFyZSB0cmVhdGVkIGFzIGEgc2NhbGFycy4gSW4gZWl0aGVyCiAgICBjYXNlLCBlaXRoZXIgYHhgIGFuZCBgeWAgb3IgdGhlaXIgZWxlbWVudHMgbXVzdCBzdXBwb3J0IG11bHRpcGxpY2F0aW9uCiAgICBhbmQgYWRkaXRpb24gYm90aCB3aXRoIHRoZW1zZWx2ZXMgYW5kIHdpdGggdGhlIGVsZW1lbnRzIG9mIGBjYC4KCiAgICBJZiBgY2AgaGFzIGZld2VyIHRoYW4gdHdvIGRpbWVuc2lvbnMsIG9uZXMgYXJlIGltcGxpY2l0bHkgYXBwZW5kZWQgdG8KICAgIGl0cyBzaGFwZSB0byBtYWtlIGl0IDItRC4gVGhlIHNoYXBlIG9mIHRoZSByZXN1bHQgd2lsbCBiZSBjLnNoYXBlWzI6XSArCiAgICB4LnNoYXBlICsgeS5zaGFwZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4LCB5IDogYXJyYXlfbGlrZSwgY29tcGF0aWJsZSBvYmplY3RzCiAgICAgICAgVGhlIHR3byBkaW1lbnNpb25hbCBzZXJpZXMgaXMgZXZhbHVhdGVkIGF0IHRoZSBwb2ludHMgaW4gdGhlCiAgICAgICAgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgYHhgIGFuZCBgeWAuICBJZiBgeGAgb3IgYHlgIGlzIGEgbGlzdCBvcgogICAgICAgIHR1cGxlLCBpdCBpcyBmaXJzdCBjb252ZXJ0ZWQgdG8gYW4gbmRhcnJheSwgb3RoZXJ3aXNlIGl0IGlzIGxlZnQKICAgICAgICB1bmNoYW5nZWQgYW5kLCBpZiBpdCBpc24ndCBhbiBuZGFycmF5LCBpdCBpcyB0cmVhdGVkIGFzIGEgc2NhbGFyLgogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBjb2VmZmljaWVudHMgb3JkZXJlZCBzbyB0aGF0IHRoZSBjb2VmZmljaWVudCBvZiB0aGUgdGVybSBvZgogICAgICAgIG11bHRpLWRlZ3JlZSBpLGogaXMgY29udGFpbmVkIGluIGBjW2ksal1gLiBJZiBgY2AgaGFzIGRpbWVuc2lvbgogICAgICAgIGdyZWF0ZXIgdGhhbiB0d28gdGhlIHJlbWFpbmluZyBpbmRpY2VzIGVudW1lcmF0ZSBtdWx0aXBsZSBzZXRzIG9mCiAgICAgICAgY29lZmZpY2llbnRzLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbHVlcyA6IG5kYXJyYXksIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgVGhlIHZhbHVlcyBvZiB0aGUgdHdvIGRpbWVuc2lvbmFsIENoZWJ5c2hldiBzZXJpZXMgYXQgcG9pbnRzIGluIHRoZQogICAgICAgIENhcnRlc2lhbiBwcm9kdWN0IG9mIGB4YCBhbmQgYHlgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbGFndmFsLCBsYWd2YWwyZCwgbGFndmFsM2QsIGxhZ2dyaWQzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgqQNyKAAAANoHX2dyaWRuZHISAAAAcoEAAABzAwAAACAgIHItAAAAch8AAAByHwAAALEDAABzGwAAAIAA9WQBAAwOjDqVZphhoBGgQdELJtQLJtAEJnIuAAAAYwQAAAAAAAAAAAAAAAcAAAADAAAA8zwAAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB0BAAAAAAAAAAAAAB8A3wAfAF8AqYFAACrBQAAAAAAAAAAUwApAWGeBgAACiAgICBFdmFsdWF0ZSBhIDMtRCBMYWd1ZXJyZSBzZXJpZXMgYXQgcG9pbnRzICh4LCB5LCB6KS4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlczoKCiAgICAuLiBtYXRoOjogcCh4LHkseikgPSBcc3VtX3tpLGosa30gY197aSxqLGt9ICogTF9pKHgpICogTF9qKHkpICogTF9rKHopCgogICAgVGhlIHBhcmFtZXRlcnMgYHhgLCBgeWAsIGFuZCBgemAgYXJlIGNvbnZlcnRlZCB0byBhcnJheXMgb25seSBpZgogICAgdGhleSBhcmUgdHVwbGVzIG9yIGEgbGlzdHMsIG90aGVyd2lzZSB0aGV5IGFyZSB0cmVhdGVkIGFzIGEgc2NhbGFycyBhbmQKICAgIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFmdGVyIGNvbnZlcnNpb24uIEluIGVpdGhlciBjYXNlLCBlaXRoZXIKICAgIGB4YCwgYHlgLCBhbmQgYHpgIG9yIHRoZWlyIGVsZW1lbnRzIG11c3Qgc3VwcG9ydCBtdWx0aXBsaWNhdGlvbiBhbmQKICAgIGFkZGl0aW9uIGJvdGggd2l0aCB0aGVtc2VsdmVzIGFuZCB3aXRoIHRoZSBlbGVtZW50cyBvZiBgY2AuCgogICAgSWYgYGNgIGhhcyBmZXdlciB0aGFuIDMgZGltZW5zaW9ucywgb25lcyBhcmUgaW1wbGljaXRseSBhcHBlbmRlZCB0byBpdHMKICAgIHNoYXBlIHRvIG1ha2UgaXQgMy1ELiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdCB3aWxsIGJlIGMuc2hhcGVbMzpdICsKICAgIHguc2hhcGUuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSwgeiA6IGFycmF5X2xpa2UsIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgVGhlIHRocmVlIGRpbWVuc2lvbmFsIHNlcmllcyBpcyBldmFsdWF0ZWQgYXQgdGhlIHBvaW50cwogICAgICAgIGAoeCwgeSwgeilgLCB3aGVyZSBgeGAsIGB5YCwgYW5kIGB6YCBtdXN0IGhhdmUgdGhlIHNhbWUgc2hhcGUuICBJZgogICAgICAgIGFueSBvZiBgeGAsIGB5YCwgb3IgYHpgIGlzIGEgbGlzdCBvciB0dXBsZSwgaXQgaXMgZmlyc3QgY29udmVydGVkCiAgICAgICAgdG8gYW4gbmRhcnJheSwgb3RoZXJ3aXNlIGl0IGlzIGxlZnQgdW5jaGFuZ2VkIGFuZCBpZiBpdCBpc24ndCBhbgogICAgICAgIG5kYXJyYXkgaXQgaXMgIHRyZWF0ZWQgYXMgYSBzY2FsYXIuCiAgICBjIDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIGNvZWZmaWNpZW50cyBvcmRlcmVkIHNvIHRoYXQgdGhlIGNvZWZmaWNpZW50IG9mIHRoZSB0ZXJtIG9mCiAgICAgICAgbXVsdGktZGVncmVlIGksaixrIGlzIGNvbnRhaW5lZCBpbiBgYGNbaSxqLGtdYGAuIElmIGBjYCBoYXMgZGltZW5zaW9uCiAgICAgICAgZ3JlYXRlciB0aGFuIDMgdGhlIHJlbWFpbmluZyBpbmRpY2VzIGVudW1lcmF0ZSBtdWx0aXBsZSBzZXRzIG9mCiAgICAgICAgY29lZmZpY2llbnRzLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbHVlcyA6IG5kYXJyYXksIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgVGhlIHZhbHVlcyBvZiB0aGUgbXVsdGlkaW1lbnNpb25hbCBwb2x5bm9taWFsIG9uIHBvaW50cyBmb3JtZWQgd2l0aAogICAgICAgIHRyaXBsZXMgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSBgeGAsIGB5YCwgYW5kIGB6YC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGxhZ3ZhbCwgbGFndmFsMmQsIGxhZ2dyaWQyZCwgbGFnZ3JpZDNkCgogICAgTm90ZXMKICAgIC0tLS0tCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS43LjAKCiAgICByfwAAAKkEcnwAAAByggAAANoBenI4AAAAcwQAAAAgICAgci0AAAByHgAAAHIeAAAA5gMAAHMdAAAAgAD1YAEADA6MOZVWmFGgAaAxoGHRCyjUCyjQBChyLgAAAGMEAAAAAAAAAAAAAAAHAAAAAwAAAPM8AAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAdAQAAAAAAAAAAAAAfAN8AHwBfAKmBQAAqwUAAAAAAAAAAFMAKQFhSwcAAAogICAgRXZhbHVhdGUgYSAzLUQgTGFndWVycmUgc2VyaWVzIG9uIHRoZSBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiB4LCB5LCBhbmQgei4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlczoKCiAgICAuLiBtYXRoOjogcChhLGIsYykgPSBcc3VtX3tpLGosa30gY197aSxqLGt9ICogTF9pKGEpICogTF9qKGIpICogTF9rKGMpCgogICAgd2hlcmUgdGhlIHBvaW50cyBgKGEsIGIsIGMpYCBjb25zaXN0IG9mIGFsbCB0cmlwbGVzIGZvcm1lZCBieSB0YWtpbmcKICAgIGBhYCBmcm9tIGB4YCwgYGJgIGZyb20gYHlgLCBhbmQgYGNgIGZyb20gYHpgLiBUaGUgcmVzdWx0aW5nIHBvaW50cyBmb3JtCiAgICBhIGdyaWQgd2l0aCBgeGAgaW4gdGhlIGZpcnN0IGRpbWVuc2lvbiwgYHlgIGluIHRoZSBzZWNvbmQsIGFuZCBgemAgaW4KICAgIHRoZSB0aGlyZC4KCiAgICBUaGUgcGFyYW1ldGVycyBgeGAsIGB5YCwgYW5kIGB6YCBhcmUgY29udmVydGVkIHRvIGFycmF5cyBvbmx5IGlmIHRoZXkKICAgIGFyZSB0dXBsZXMgb3IgYSBsaXN0cywgb3RoZXJ3aXNlIHRoZXkgYXJlIHRyZWF0ZWQgYXMgYSBzY2FsYXJzLiBJbgogICAgZWl0aGVyIGNhc2UsIGVpdGhlciBgeGAsIGB5YCwgYW5kIGB6YCBvciB0aGVpciBlbGVtZW50cyBtdXN0IHN1cHBvcnQKICAgIG11bHRpcGxpY2F0aW9uIGFuZCBhZGRpdGlvbiBib3RoIHdpdGggdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMKICAgIG9mIGBjYC4KCiAgICBJZiBgY2AgaGFzIGZld2VyIHRoYW4gdGhyZWUgZGltZW5zaW9ucywgb25lcyBhcmUgaW1wbGljaXRseSBhcHBlbmRlZCB0bwogICAgaXRzIHNoYXBlIHRvIG1ha2UgaXQgMy1ELiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdCB3aWxsIGJlIGMuc2hhcGVbMzpdICsKICAgIHguc2hhcGUgKyB5LnNoYXBlICsgei5zaGFwZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4LCB5LCB6IDogYXJyYXlfbGlrZSwgY29tcGF0aWJsZSBvYmplY3RzCiAgICAgICAgVGhlIHRocmVlIGRpbWVuc2lvbmFsIHNlcmllcyBpcyBldmFsdWF0ZWQgYXQgdGhlIHBvaW50cyBpbiB0aGUKICAgICAgICBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiBgeGAsIGB5YCwgYW5kIGB6YC4gIElmIGB4YCxgeWAsIG9yIGB6YCBpcyBhCiAgICAgICAgbGlzdCBvciB0dXBsZSwgaXQgaXMgZmlyc3QgY29udmVydGVkIHRv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aXMKICAgIHVzZWZ1bCBib3RoIGZvciBsZWFzdCBzcXVhcmVzIGZpdHRpbmcgYW5kIGZvciB0aGUgZXZhbHVhdGlvbiBvZiBhIGxhcmdlCiAgICBudW1iZXIgb2YgTGFndWVycmUgc2VyaWVzIG9mIHRoZSBzYW1lIGRlZ3JlZSBhbmQgc2FtcGxlIHBvaW50cy4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4IDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIHBvaW50cy4gVGhlIGR0eXBlIGlzIGNvbnZlcnRlZCB0byBmbG9hdDY0IG9yIGNvbXBsZXgxMjgKICAgICAgICBkZXBlbmRpbmcgb24gd2hldGhlciBhbnkgb2YgdGhlIGVsZW1lbnRzIGFyZSBjb21wbGV4LiBJZiBgeGAgaXMKICAgICAgICBzY2FsYXIgaXQgaXMgY29udmVydGVkIHRvIGEgMS1EIGFycmF5LgogICAgZGVnIDogaW50CiAgICAgICAgRGVncmVlIG9mIHRoZSByZXN1bHRpbmcgbWF0cml4LgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbmRlciA6IG5kYXJyYXkKICAgICAgICBUaGUgcHNldWRvLVZhbmRlcm1vbmRlIG1hdHJpeC4gVGhlIHNoYXBlIG9mIHRoZSByZXR1cm5lZCBtYXRyaXggaXMKICAgICAgICBgYHguc2hhcGUgKyAoZGVnICsgMSwpYGAsIHdoZXJlIFRoZSBsYXN0IGluZGV4IGlzIHRoZSBkZWdyZWUgb2YgdGhlCiAgICAgICAgY29ycmVzcG9uZGluZyBMYWd1ZXJyZSBwb2x5bm9taWFsLiAgVGhlIGR0eXBlIHdpbGwgYmUgdGhlIHNhbWUgYXMKICAgICAgICB0aGUgY29udmVydGVkIGB4YC4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBmcm9tIG51bXB5LnBvbHlub21pYWwubGFndWVycmUgaW1wb3J0IGxhZ3ZhbmRlcgogICAgPj4+IHggPSBucC5hcnJheShbMCwgMSwgMl0pCiAgICA+Pj4gbGFndmFuZGVyKHgsIDMpCiAgICBhcnJheShbWyAxLiAgICAgICAgLCAgMS4gICAgICAgICwgIDEuICAgICAgICAsICAxLiAgICAgICAgXSwKICAgICAgICAgICBbIDEuICAgICAgICAsICAwLiAgICAgICAgLCAtMC41ICAgICAgICwgLTAuNjY2NjY2NjddLAogICAgICAgICAgIFsgMS4gICAgICAgICwgLTEuICAgICAgICAsIC0xLiAgICAgICAgLCAtMC4zMzMzMzMzM11dKQoKICAgINoDZGVncgIAAAB6GGRlZyBtdXN0IGJlIG5vbi1uZWdhdGl2ZUZyBAAAACkCcl8AAAByXgAAAGcAAAAAAAAAAHJNAAAAcjQAAAByJwAAACkKcigAAAByZQAAAHJmAAAAcj8AAAByQAAAAHJpAAAAck4AAAByTwAAAHI3AAAAcmgAAAApB3J8AAAAcosAAADaBGlkZWfaBGRpbXPaBGR0eXDaAXZyPAAAAHMHAAAAICAgICAgIHItAAAAchgAAAByGAAAAFEEAABzDQEAAIAA9VgBAAwO1AsfoAOgVdELK9QLK4BE2AcLiGGCeIB43Q4Y0Bkz0Q401A400Ag05QgKjAiQEZgVoGHQCCjRCCjUCCioM9EILoBB2AwQkDGJSIg7mBGcF9ELIIBE2AsMjDeARN0ICowIkBSYVNAIItEIItQIIoBB2AsMiFGJM5ARiTeAQYBhgUTYBwuIYYJ4gHjYDxCQMYl1iAGIIYkE3REWkHGYJKARmSjRESPUESPwAAEJPfAAAQk9iEHYFBWQYZgBkWOURphBmGGZQ6AhmUegYZlL0RQoqDGoUahxqVOsNrAxsHGxNak+0RQ5uDHREzyIQYhhiUSIRN0LDYw7kHGYIZhS0Qsg1Asg0AQgci4AAABjAwAAAAAAAAAAAAAABQAAAAMAAADzSgAAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHQEAAAAAAAAAAAAAHQEAAAAAAAAAAAAAGYCfAB8AWYCfAKmAwAAqwMAAAAAAAAAAFMAKQFhjAYAAFBzZXVkby1WYW5kZXJtb25kZSBtYXRyaXggb2YgZ2l2ZW4gZGVncmVlcy4KCiAgICBSZXR1cm5zIHRoZSBwc2V1ZG8tVmFuZGVybW9uZGUgbWF0cml4IG9mIGRlZ3JlZXMgYGRlZ2AgYW5kIHNhbXBsZQogICAgcG9pbnRzIGAoeCwgeSlgLiBUaGUgcHNldWRvLVZhbmRlcm1vbmRlIG1hdHJpeCBpcyBkZWZpbmVkIGJ5CgogICAgLi4gbWF0aDo6IFZbLi4uLCAoZGVnWzFdICsgMSkqaSArIGpdID0gTF9pKHgpICogTF9qKHkpLAoKICAgIHdoZXJlIGAwIDw9IGkgPD0gZGVnWzBdYCBhbmQgYDAgPD0gaiA8PSBkZWdbMV1gLiBUaGUgbGVhZGluZyBpbmRpY2VzIG9mCiAgICBgVmAgaW5kZXggdGhlIHBvaW50cyBgKHgsIHkpYCBhbmQgdGhlIGxhc3QgaW5kZXggZW5jb2RlcyB0aGUgZGVncmVlcyBvZgogICAgdGhlIExhZ3VlcnJlIHBvbHlub21pYWxzLgoKICAgIElmIGBgViA9IGxhZ3ZhbmRlcjJkKHgsIHksIFt4ZGVnLCB5ZGVnXSlgYCwgdGhlbiB0aGUgY29sdW1ucyBvZiBgVmAKICAgIGNvcnJlc3BvbmQgdG8gdGhlIGVsZW1lbnRzIG9mIGEgMi1EIGNvZWZmaWNpZW50IGFycmF5IGBjYCBvZiBzaGFwZQogICAgKHhkZWcgKyAxLCB5ZGVnICsgMSkgaW4gdGhlIG9yZGVyCgogICAgLi4gbWF0aDo6IGNfezAwfSwgY197MDF9LCBjX3swMn0gLi4uICwgY197MTB9LCBjX3sxMX0sIGNfezEyfSAuLi4KCiAgICBhbmQgYGBucC5kb3QoViwgYy5mbGF0KWBgIGFuZCBgYGxhZ3ZhbDJkKHgsIHksIGMpYGAgd2lsbCBiZSB0aGUgc2FtZQogICAgdXAgdG8gcm91bmRvZmYuIFRoaXMgZXF1aXZhbGVuY2UgaXMgdXNlZnVsIGJvdGggZm9yIGxlYXN0IHNxdWFyZXMKICAgIGZpdHRpbmcgYW5kIGZvciB0aGUgZXZhbHVhdGlvbiBvZiBhIGxhcmdlIG51bWJlciBvZiAyLUQgTGFndWVycmUKICAgIHNlcmllcyBvZiB0aGUgc2FtZSBkZWdyZWVzIGFuZCBzYW1wbGUgcG9pbnRzLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHgsIHkgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXlzIG9mIHBvaW50IGNvb3JkaW5hdGVzLCBhbGwgb2YgdGhlIHNhbWUgc2hhcGUuIFRoZSBkdHlwZXMKICAgICAgICB3aWxsIGJlIGNvbnZlcnRlZCB0byBlaXRoZXIgZmxvYXQ2NCBvciBjb21wbGV4MTI4IGRlcGVuZGluZyBvbgogICAgICAgIHdoZXRoZXIgYW55IG9mIHRoZSBlbGVtZW50cyBhcmUgY29tcGxleC4gU2NhbGFycyBhcmUgY29udmVydGVkIHRvCiAgICAgICAgMS1EIGFycmF5cy4KICAgIGRlZyA6IGxpc3Qgb2YgaW50cwogICAgICAgIExpc3Qgb2YgbWF4aW11bSBkZWdyZWVzIG9mIHRoZSBmb3JtIFt4X2RlZywgeV9kZWddLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbmRlcjJkIDogbmRhcnJheQogICAgICAgIFRoZSBzaGFwZSBvZiB0aGUgcmV0dXJuZWQgbWF0cml4IGlzIGBgeC5zaGFwZSArIChvcmRlciwpYGAsIHdoZXJlCiAgICAgICAgOm1hdGg6YG9yZGVyID0gKGRlZ1swXSsxKSooZGVnWzFdKzEpYC4gIFRoZSBkdHlwZSB3aWxsIGJlIHRoZSBzYW1lCiAgICAgICAgYXMgdGhlIGNvbnZlcnRlZCBgeGAgYW5kIGB5YC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGxhZ3ZhbmRlciwgbGFndmFuZGVyM2QsIGxhZ3ZhbDJkLCBsYWd2YWwzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgqQNyKAAAANoPX3ZhbmRlcl9uZF9mbGF0chgAAAApA3J8AAAAcoIAAAByiwAAAHMDAAAAICAgci0AAAByIQAAAHIhAAAAjQQAAHMjAAAAgAD1ZAEADA7UCx2dea0p0B40sHG4IbBmuGPRC0LUC0LQBEJyLgAAAGMEAAAAAAAAAAAAAAAGAAAAAwAAAPNYAAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAdAQAAAAAAAAAAAAAdAQAAAAAAAAAAAAAdAQAAAAAAAAAAAAAZgN8AHwBfAJmA3wDpgMAAKsDAAAAAAAAAABTACkBYRYHAABQc2V1ZG8tVmFuZGVybW9uZGUgbWF0cml4IG9mIGdpdmVuIGRlZ3JlZXMuCgogICAgUmV0dXJucyB0aGUgcHNldWRvLVZhbmRlcm1vbmRlIG1hdHJpeCBvZiBkZWdyZWVzIGBkZWdgIGFuZCBzYW1wbGUKICAgIHBvaW50cyBgKHgsIHksIHopYC4gSWYgYGwsIG0sIG5gIGFyZSB0aGUgZ2l2ZW4gZGVncmVlcyBpbiBgeCwgeSwgemAsCiAgICB0aGVuIFRoZSBwc2V1ZG8tVmFuZGVybW9uZGUgbWF0cml4IGlzIGRlZmluZWQgYnkKCiAgICAuLiBtYXRoOjogVlsuLi4sIChtKzEpKG4rMSlpICsgKG4rMSlqICsga10gPSBMX2koeCkqTF9qKHkpKkxfayh6KSwKCiAgICB3aGVyZSBgMCA8PSBpIDw9IGxgLCBgMCA8PSBqIDw9IG1gLCBhbmQgYDAgPD0gaiA8PSBuYC4gIFRoZSBsZWFkaW5nCiAgICBpbmRpY2VzIG9mIGBWYCBpbmRleCB0aGUgcG9pbnRzIGAoeCwgeSwgeilgIGFuZCB0aGUgbGFzdCBpbmRleCBlbmNvZGVzCiAgICB0aGUgZGVncmVlcyBvZiB0aGUgTGFndWVycmUgcG9seW5vbWlhbHMuCgogICAgSWYgYGBWID0gbGFndmFuZGVyM2QoeCwgeSwgeiwgW3hkZWcsIHlkZWcsIHpkZWddKWBgLCB0aGVuIHRoZSBjb2x1bW5zCiAgICBvZiBgVmAgY29ycmVzcG9uZCB0byB0aGUgZWxlbWVudHMgb2YgYSAzLUQgY29lZmZpY2llbnQgYXJyYXkgYGNgIG9mCiAgICBzaGFwZSAoeGRlZyArIDEsIHlkZWcgKyAxLCB6ZGVnICsgMSkgaW4gdGhlIG9yZGVyCgogICAgLi4gbWF0aDo6IGNfezAwMH0sIGNfezAwMX0sIGNfezAwMn0sLi4uICwgY197MDEwfSwgY197MDExfSwgY197MDEyfSwuLi4KCiAgICBhbmQgIGBgbnAuZG90KFYsIGMuZmxhdClgYCBhbmQgYGBsYWd2YWwzZCh4LCB5LCB6LCBjKWBgIHdpbGwgYmUgdGhlCiAgICBzYW1lIHVwIHRvIHJvdW5kb2ZmLiBUaGlzIGVxdWl2YWxlbmNlIGlzIHVzZWZ1bCBib3RoIGZvciBsZWFzdCBzcXVhcmVzCiAgICBmaXR0aW5nIGFuZCBmb3IgdGhlIGV2YWx1YXRpb24gb2YgYSBsYXJnZSBudW1iZXIgb2YgMy1EIExhZ3VlcnJlCiAgICBzZXJpZXMgb2YgdGhlIHNhbWUgZGVncmVlcyBhbmQgc2FtcGxlIHBvaW50cy4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4LCB5LCB6IDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5cyBvZiBwb2ludCBjb29yZGluYXRlcywgYWxsIG9mIHRoZSBzYW1lIHNoYXBlLiBUaGUgZHR5cGVzIHdpbGwKICAgICAgICBiZSBjb252ZXJ0ZWQgdG8gZWl0aGVyIGZsb2F0NjQgb3IgY29tcGxleDEyOCBkZXBlbmRpbmcgb24gd2hldGhlcgogICAgICAgIGFueSBvZiB0aGUgZWxlbWVudHMgYXJlIGNvbXBsZXguIFNjYWxhcnMgYXJlIGNvbnZlcnRlZCB0byAxLUQKICAgICAgICBhcnJheXMuCiAgICBkZWcgOiBsaXN0IG9mIGludHMKICAgICAgICBMaXN0IG9mIG1heGltdW0gZGVncmVlcyBvZiB0aGUgZm9ybSBbeF9kZWcsIHlfZGVnLCB6X2RlZ10uCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgdmFuZGVyM2QgOiBuZGFycmF5CiAgICAgICAgVGhlIHNoYXBlIG9mIHRoZSByZXR1cm5lZCBtYXRyaXggaXMgYGB4LnNoYXBlICsgKG9yZGVyLClgYCwgd2hlcmUKICAgICAgICA6bWF0aDpgb3JkZXIgPSAoZGVnWzBdKzEpKihkZWdbMV0rMSkqKGRlZ1syXSsxKWAuICBUaGUgZHR5cGUgd2lsbAogICAgICAgIGJlIHRoZSBzYW1lIGFzIHRoZSBjb252ZXJ0ZWQgYHhgLCBgeWAsIGFuZCBgemAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBsYWd2YW5kZXIsIGxhZ3ZhbmRlcjNkLCBsYWd2YWwyZCwgbGFndmFsM2QKCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIHKRAAAAKQRyfAAAAHKCAAAAcogAAAByiwAAAHMEAAAAICAgIHItAAAAciIAAAByIgAAAMIEAABzJwAAAIAA9WYBAAwO1AsdnXmtKbVZ0B4/wCHAUcgBwBnIQ9ELUNQLUNAEUHIuAAAARmMGAAAAAAAAAAAAAAAJAAAAAwAAAPNAAAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAdAQAAAAAAAAAAAAAfAB8AXwCfAN8BHwFpgcAAKsHAAAAAAAAAABTACkBYU0VAAAKICAgIExlYXN0IHNxdWFyZXMgZml0IG9mIExhZ3VlcnJlIHNlcmllcyB0byBkYXRhLgoKICAgIFJldHVybiB0aGUgY29lZmZpY2llbnRzIG9mIGEgTGFndWVycmUgc2VyaWVzIG9mIGRlZ3JlZSBgZGVnYCB0aGF0IGlzIHRoZQogICAgbGVhc3Qgc3F1YXJlcyBmaXQgdG8gdGhlIGRhdGEgdmFsdWVzIGB5YCBnaXZlbiBhdCBwb2ludHMgYHhgLiBJZiBgeWAgaXMKICAgIDEtRCB0aGUgcmV0dXJuZWQgY29lZmZpY2llbnRzIHdpbGwgYWxzbyBiZSAxLUQuIElmIGB5YCBpcyAyLUQgbXVsdGlwbGUKICAgIGZpdHMgYXJlIGRvbmUsIG9uZSBmb3IgZWFjaCBjb2x1bW4gb2YgYHlgLCBhbmQgdGhlIHJlc3VsdGluZwogICAgY29lZmZpY2llbnRzIGFyZSBzdG9yZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgY29sdW1ucyBvZiBhIDItRCByZXR1cm4uCiAgICBUaGUgZml0dGVkIHBvbHlub21pYWwocykgYXJlIGluIHRoZSBmb3JtCgogICAgLi4gbWF0aDo6ICBwKHgpID0gY18wICsgY18xICogTF8xKHgpICsgLi4uICsgY19uICogTF9uKHgpLAoKICAgIHdoZXJlIGBgbmBgIGlzIGBkZWdgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHggOiBhcnJheV9saWtlLCBzaGFwZSAoTSwpCiAgICAgICAgeC1jb29yZGluYXRlcyBvZiB0aGUgTSBzYW1wbGUgcG9pbnRzIGBgKHhbaV0sIHlbaV0pYGAuCiAgICB5IDogYXJyYXlfbGlrZSwgc2hhcGUgKE0sKSBvciAoTSwgSykKICAgICAgICB5LWNvb3JkaW5hdGVzIG9mIHRoZSBzYW1wbGUgcG9pbnRzLiBTZXZlcmFsIGRhdGEgc2V0cyBvZiBzYW1wbGUKICAgICAgICBwb2ludHMgc2hhcmluZyB0aGUgc2FtZSB4LWNvb3JkaW5hdGVzIGNhbiBiZSBmaXR0ZWQgYXQgb25jZSBieQogICAgICAgIHBhc3NpbmcgaW4gYSAyRC1hcnJheSB0aGF0IGNvbnRhaW5zIG9uZSBkYXRhc2V0IHBlciBjb2x1bW4uCiAgICBkZWcgOiBpbnQgb3IgMS1EIGFycmF5X2xpa2UKICAgICAgICBEZWdyZWUocykgb2YgdGhlIGZpdHRpbmcgcG9seW5vbWlhbHMuIElmIGBkZWdgIGlzIGEgc2luZ2xlIGludGVnZXIKICAgICAgICBhbGwgdGVybXMgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgYGRlZ2AndGggdGVybSBhcmUgaW5jbHVkZWQgaW4gdGhlCiAgICAgICAgZml0LiBGb3IgTnVtUHkgdmVyc2lvbnMgPj0gMS4xMS4wIGEgbGlzdCBvZiBpbnRlZ2VycyBzcGVjaWZ5aW5nIHRoZQogICAgICAgIGRlZ3JlZXMgb2YgdGhlIHRlcm1zIHRvIGluY2x1ZGUgbWF5IGJlIHVzZWQgaW5zdGVhZC4KICAgIHJjb25kIDogZmxvYXQsIG9wdGlvbmFsCiAgICAgICAgUmVsYXRpdmUgY29uZGl0aW9uIG51bWJlciBvZiB0aGUgZml0LiBTaW5ndWxhciB2YWx1ZXMgc21hbGxlciB0aGFuCiAgICAgICAgdGhpcyByZWxhdGl2ZSB0byB0aGUgbGFyZ2VzdCBzaW5ndWxhciB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuIFRoZQogICAgICAgIGRlZmF1bHQgdmFsdWUgaXMgbGVuKHgpKmVwcywgd2hlcmUgZXBzIGlzIHRoZSByZWxhdGl2ZSBwcmVjaXNpb24gb2YKICAgICAgICB0aGUgZmxvYXQgdHlwZSwgYWJvdXQgMmUtMTYgaW4gbW9zdCBjYXNlcy4KICAgIGZ1bGwgOiBib29sLCBvcHRpb25hbAogICAgICAgIFN3aXRjaCBkZXRlcm1pbmluZyBuYXR1cmUgb2YgcmV0dXJuIHZhbHVlLiBXaGVuIGl0IGlzIEZhbHNlICh0aGUKICAgICAgICBkZWZhdWx0KSBqdXN0IHRoZSBjb2VmZmljaWVudHMgYXJlIHJldHVybmVkLCB3aGVuIFRydWUgZGlhZ25vc3RpYwogICAgICAgIGluZm9ybWF0aW9uIGZyb20gdGhlIHNpbmd1bGFyIHZhbHVlIGRlY29tcG9zaXRpb24gaXMgYWxzbyByZXR1cm5lZC4KICAgIHcgOiBhcnJheV9saWtlLCBzaGFwZSAoYE1gLCksIG9wdGlvbmFsCiAgICAgICAgV2VpZ2h0cy4gSWYgbm90IE5vbmUsIHRoZSB3ZWlnaHQgYGB3W2ldYGAgYXBwbGllcyB0byB0aGUgdW5zcXVhcmVkCiAgICAgICAgcmVzaWR1YWwgYGB5W2ldIC0geV9oYXRbaV1gYCBhdCBgYHhbaV1gYC4gSWRlYWxseSB0aGUgd2VpZ2h0cyBhcmUKICAgICAgICBjaG9zZW4gc28gdGhhdCB0aGUgZXJyb3JzIG9mIHRoZSBwcm9kdWN0cyBgYHdbaV0qeVtpXWBgIGFsbCBoYXZlIHRoZQogICAgICAgIHNhbWUgdmFyaWFuY2UuICBXaGVuIHVzaW5nIGludmVyc2UtdmFyaWFuY2Ugd2VpZ2h0aW5nLCB1c2UKICAgICAgICBgYHdbaV0gPSAxL3NpZ21hKHlbaV0pYGAuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGNvZWYgOiBuZGFycmF5LCBzaGFwZSAoTSwpIG9yIChNLCBLKQogICAgICAgIExhZ3VlcnJlIGNvZWZmaWNpZW50cyBvcmRlcmVkIGZyb20gbG93IHRvIGhpZ2guIElmIGB5YCB3YXMgMi1ELAogICAgICAgIHRoZSBjb2VmZmljaWVudHMgZm9yIHRoZSBkYXRhIGluIGNvbHVtbiAqayogIG9mIGB5YCBhcmUgaW4gY29sdW1uCiAgICAgICAgKmsqLgoKICAgIFtyZXNpZHVhbHMsIHJhbmssIHNpbmd1bGFyX3ZhbHVlcywgcmNvbmRdIDogbGlzdAogICAgICAgIFRoZXNlIHZhbHVlcyBhcmUgb25seSByZXR1cm5lZCBpZiBgYGZ1bGwgPT0gVHJ1ZWBgCgogICAgICAgIC0gcmVzaWR1YWxzIC0tIHN1bSBvZiBzcXVhcmVkIHJlc2lkdWFscyBvZiB0aGUgbGVhc3Qgc3F1YXJlcyBmaXQKICAgICAgICAtIHJhbmsgLS0gdGhlIG51bWVyaWNhbCByYW5rIG9mIHRoZSBzY2FsZWQgVmFuZGVybW9uZGUgbWF0cml4CiAgICAgICAgLSBzaW5ndWxhcl92YWx1ZXMgLS0gc2luZ3VsYXIgdmFsdWVzIG9mIHRoZSBzY2FsZWQgVmFuZGVybW9uZGUgbWF0cml4CiAgICAgICAgLSByY29uZCAtLSB2YWx1ZSBvZiBgcmNvbmRgLgoKICAgICAgICBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgYG51bXB5LmxpbmFsZy5sc3RzcWAuCgogICAgV2FybnMKICAgIC0tLS0tCiAgICBSYW5rV2FybmluZwogICAgICAgIFRoZSByYW5rIG9mIHRoZSBjb2VmZmljaWVudCBtYXRyaXggaW4gdGhlIGxlYXN0LXNxdWFyZXMgZml0IGlzCiAgICAgICAgZGVmaWNpZW50LiBUaGUgd2FybmluZyBpcyBvbmx5IHJhaXNlZCBpZiBgYGZ1bGwgPT0gRmFsc2VgYC4gIFRoZQogICAgICAgIHdhcm5pbmdzIGNhbiBiZSB0dXJuZWQgb2ZmIGJ5CgogICAgICAgID4+PiBpbXBvcnQgd2FybmluZ3MKICAgICAgICA+Pj4gd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBucC5SYW5rV2FybmluZykKCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIG51bXB5LnBvbHlub21pYWwucG9seW5vbWlhbC5wb2x5Zml0CiAgICBudW1weS5wb2x5bm9taWFsLmxlZ2VuZHJlLmxlZ2ZpdAogICAgbnVtcHkucG9seW5vbWlhbC5jaGVieXNoZXYuY2hlYmZpdAogICAgbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlLmhlcm1maXQKICAgIG51bXB5LnBvbHlub21pYWwuaGVybWl0ZV9lLmhlcm1lZml0CiAgICBsYWd2YWwgOiBFdmFsdWF0ZXMgYSBMYWd1ZXJyZSBzZXJpZXMuCiAgICBsYWd2YW5kZXIgOiBwc2V1ZG8gVmFuZGVybW9uZGUgbWF0cml4IG9mIExhZ3VlcnJlIHNlcmllcy4KICAgIGxhZ3dlaWdodCA6IExhZ3VlcnJlIHdlaWdodCBmdW5jdGlvbi4KICAgIG51bXB5LmxpbmFsZy5sc3RzcSA6IENvbXB1dGVzIGEgbGVhc3Qtc3F1YXJlcyBmaXQgZnJvbSB0aGUgbWF0cml4LgogICAgc2NpcHkuaW50ZXJwb2xhdGUuVW5pdmFyaWF0ZVNwbGluZSA6IENvbXB1dGVzIHNwbGluZSBmaXRzLgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgVGhlIHNvbHV0aW9uIGlzIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIExhZ3VlcnJlIHNlcmllcyBgYHBgYCB0aGF0CiAgICBtaW5pbWl6ZXMgdGhlIHN1bSBvZiB0aGUgd2VpZ2h0ZWQgc3F1YXJlZCBlcnJvcnMKCiAgICAuLiBtYXRoOjogRSA9IFxzdW1faiB3X2peMiAqIHx5X2ogLSBwKHhfail8XjIsCgogICAgd2hlcmUgdGhlIDptYXRoOmB3X2pgIGFyZSB0aGUgd2VpZ2h0cy4gVGhpcyBwcm9ibGVtIGlzIHNvbHZlZCBieQogICAgc2V0dGluZyB1cCBhcyB0aGUgKHR5cGljYWxseSkgb3ZlcmRldGVybWluZWQgbWF0cml4IGVxdWF0aW9uCgogICAgLi4gbWF0aDo6IFYoeCkgKiBjID0gdyAqIHksCgogICAgd2hlcmUgYGBWYGAgaXMgdGhlIHdlaWdodGVkIHBzZXVkbyBWYW5kZXJtb25kZSBtYXRyaXggb2YgYHhgLCBgYGNgYCBhcmUgdGhlCiAgICBjb2VmZmljaWVudHMgdG8gYmUgc29sdmVkIGZvciwgYHdgIGFyZSB0aGUgd2VpZ2h0cywgYW5kIGB5YCBhcmUgdGhlCiAgICBvYnNlcnZlZCB2YWx1ZXMuICBUaGlzIGVxdWF0aW9uIGlzIHRoZW4gc29sdmVkIHVzaW5nIHRoZSBzaW5ndWxhciB2YWx1ZQogICAgZGVjb21wb3NpdGlvbiBvZiBgYFZgYC4KCiAgICBJZiBzb21lIG9mIHRoZSBzaW5ndWxhciB2YWx1ZXMgb2YgYFZgIGFyZSBzbyBzbWFsbCB0aGF0IHRoZXkgYXJlCiAgICBuZWdsZWN0ZWQsIHRoZW4gYSBgUmFua1dhcm5pbmdgIHdpbGwgYmUgaXNzdWVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlCiAgICBjb2VmZmljaWVudCB2YWx1ZXMgbWF5IGJlIHBvb3JseSBkZXRlcm1pbmVkLiBVc2luZyBhIGxvd2VyIG9yZGVyIGZpdAogICAgd2lsbCB1c3VhbGx5IGdldCByaWQgb2YgdGhlIHdhcm5pbmcuICBUaGUgYHJjb25kYCBwYXJhbWV0ZXIgY2FuIGFsc28gYmUKICAgIHNldCB0byBhIHZhbHVlIHNtYWxsZXIgdGhhbiBpdHMgZGVmYXVsdCwgYnV0IHRoZSByZXN1bHRpbmcgZml0IG1heSBiZQogICAgc3B1cmlvdXMgYW5kIGhhdmUgbGFyZ2UgY29udHJpYnV0aW9ucyBmcm9tIHJvdW5kb2ZmIGVycm9yLgoKICAgIEZpdHMgdXNpbmcgTGFndWVycmUgc2VyaWVzIGFyZSBwcm9iYWJseSBtb3N0IHVzZWZ1bCB3aGVuIHRoZSBkYXRhIGNhbgogICAgYmUgYXBwcm94aW1hdGVkIGJ5IGBgc3FydCh3KHgpKSAqIHAoeClgYCwgd2hlcmUgYGB3KHgpYGAgaXMgdGhlIExhZ3VlcnJlCiAgICB3ZWlnaHQuIEluIHRoYXQgY2FzZSB0aGUgd2VpZ2h0IGBgc3FydCh3KHhbaV0pKWBgIHNob3VsZCBiZSB1c2VkCiAgICB0b2dldGhlciB3aXRoIGRhdGEgdmFsdWVzIGBgeVtpXS9zcXJ0KHcoeFtpXSkpYGAuIFRoZSB3ZWlnaHQgZnVuY3Rpb24gaXMKICAgIGF2YWlsYWJsZSBhcyBgbGFnd2VpZ2h0YC4KCiAgICBSZWZlcmVuY2VzCiAgICAtLS0tLS0tLS0tCiAgICAuLiBbMV0gV2lraXBlZGlhLCAiQ3VydmUgZml0dGluZyIsCiAgICAgICAgICAgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3VydmVfZml0dGluZwoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20g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cm9zIikgb2YgdGhlIHBvbHlub21pYWwKCiAgICAuLiBtYXRoOjogcCh4KSA9IFxzdW1faSBjW2ldICogTF9pKHgpLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGMgOiAxLUQgYXJyYXlfbGlrZQogICAgICAgIDEtRCBhcnJheSBvZiBjb2VmZmljaWVudHMuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgb3V0IDogbmRhcnJheQogICAgICAgIEFycmF5IG9mIHRoZSByb290cyBvZiB0aGUgc2VyaWVzLiBJZiBhbGwgdGhlIHJvb3RzIGFyZSByZWFsLAogICAgICAgIHRoZW4gYG91dGAgaXMgYWxzbyByZWFsLCBvdGhlcndpc2UgaXQgaXMgY29tcGxleC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIG51bXB5LnBvbHlub21pYWwucG9seW5vbWlhbC5wb2x5cm9vdHMKICAgIG51bXB5LnBvbHlub21pYWwubGVnZW5kcmUubGVncm9vdHMKICAgIG51bXB5LnBvbHlub21pYWwuY2hlYnlzaGV2LmNoZWJyb290cwogICAgbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlLmhlcm1yb290cwogICAgbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlX2UuaGVybWVyb290cwoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgVGhlIHJvb3QgZXN0aW1hdGVzIGFyZSBvYnRhaW5lZCBhcyB0aGUgZWlnZW52YWx1ZXMgb2YgdGhlIGNvbXBhbmlvbgogICAgbWF0cml4LCBSb290cyBmYXIgZnJvbSB0aGUgb3JpZ2luIG9mIHRoZSBjb21wbGV4IHBsYW5lIG1heSBoYXZlIGxhcmdlCiAgICBlcnJvcnMgZHVlIHRvIHRoZSBudW1lcmljYWwgaW5zdGFiaWxpdHkgb2YgdGhlIHNlcmllcyBmb3Igc3VjaAogICAgdmFsdWVzLiBSb290cyB3aXRoIG11bHRpcGxpY2l0eSBncmVhdGVyIHRoYW4gMSB3aWxsIGFsc28gc2hvdyBsYXJnZXIKICAgIGVycm9ycyBhcyB0aGUgdmFsdWUgb2YgdGhlIHNlcmll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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).