REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 55.65 KB
Close
/opt/hc_python/lib/python3.12/site-packages/sqlalchemy/ext/asyncio/__pycache__/scoping.cpython-312.pyc
Text
Base64
yw0NCgAAAAD5ke9na80AAOMAAAAAAAAAAAAAAAAJAAAAAAAAAfPCAgAAlwBkAGQBbABtAVoBAQBkAGQCbAJtA1oDAQBkAGQDbAJtBFoEAQBkAGQEbAJtBVoFAQBkAGQFbAJtBloGAQBkAGQGbAJtB1oHAQBkAGQHbAJtCFoIAQBkAGQIbAJtCVoJAQBkAGQJbAJtCloKAQBkAGQKbAJtC1oLAQBkAGQLbAJtDFoMAQBkAGQMbAJtDVoNAQBkAGQNbAJtDloOAQBkAGQObAJtD1oPAQBkD2QQbBBtEVoRAQBkD2QRbBBtEloSAQBkD2QSbBBtE1oTAQBkE2QUbBRtFVoWAQBkE2QVbBRtF1oXAQBkE2QWbBhtGVoZAQBkE2QXbBdtGloaAQBkE2QYbBdtG1obAQBkE2QZbBdtHFocAQBkE2QabBdtHVodAQBlDXKcZA9kG2webR9aHwEAZA9kHGwgbSFaIQEAZA9kHWwgbSJaIgEAZA9kHmwQbSNaIwEAZBNkH2webSRaJAEAZBNkIGwebSVaJQEAZBNkIWwebSZaJgEAZBNkImwebSdaJwEAZBNkI2webShaKAEAZBNkJGwebSlaKQEAZBNkJWwqbStaKwEAZBNkJmwqbSxaLAEAZBNkJ2wtbS5aLgEAZBNkKGwvbTBaMAEAZBNkKWwvbTFaMQEAZBNkKmwvbTJaMgEAZBNkK2wzbTRaNAEAZBNkLGwYbTVaNQEAZBNkLWwYbTZaNgEAZBNkLmwYbTdaNwEAZBNkL2wYbThaOAEAZBNkMGw5bTpaOgEAZBNkMWw7bTxaPAEAZBNkMmw9bT5aPgEAZBNkM2w/bUBaQAEAZBNkNGw/bUFaQQEAAgBlDmQ1ZQOsNqsCAAAAAAAAWkICAGUaZRNkN2Q4ZwBkOaIBZwBkOqIBZwBkO6IBZDxnAaw9qwcAAAAAAAACAEcAZD6EAGQ/ZQVlERkAAACrAwAAAAAAAKsAAAAAAAAAWkN5QClB6QAAAAApAdoLYW5ub3RhdGlvbnMpAdoDQW55KQHaCENhbGxhYmxlKQHaB0dlbmVyaWMpAdoISXRlcmFibGUpAdoISXRlcmF0b3IpAdoIT3B0aW9uYWwpAdoIb3ZlcmxvYWQpAdoIU2VxdWVuY2UpAdoFVHVwbGUpAdoEVHlwZSkB2g1UWVBFX0NIRUNLSU5HKQHaB1R5cGVWYXIpAdoFVW5pb27pAQAAACkB2gNfQVMpAdoSYXN5bmNfc2Vzc2lvbm1ha2VyKQHaDEFzeW5jU2Vzc2lvbukDAAAAKQHaA2V4YykB2gR1dGlsKQHaB1Nlc3Npb24pAdoUY3JlYXRlX3Byb3h5X21ldGhvZHMpAdoOU2NvcGVkUmVnaXN0cnkpAdoEd2FybikB2g93YXJuX2RlcHJlY2F0ZWQpAdoPQXN5bmNDb25uZWN0aW9uKQHaC0FzeW5jUmVzdWx0KQHaEUFzeW5jU2NhbGFyUmVzdWx0KQHaF0FzeW5jU2Vzc2lvblRyYW5zYWN0aW9uKQHaCkNvbm5lY3Rpb24pAdoMQ3Vyc29yUmVzdWx0KQHaBkVuZ2luZSkB2gZSZXN1bHQpAdoDUm93KQHaClJvd01hcHBpbmcpAdoVX0NvcmVBbnlFeGVjdXRlUGFyYW1zKQHaG0NvcmVFeGVjdXRlT3B0aW9uc1BhcmFtZXRlcikB2gxTY2FsYXJSZXN1bHQpAdoQX0lkZW50aXR5S2V5VHlwZSkB2gJfTykB2hpPcm1FeGVjdXRlT3B0aW9uc1BhcmFtZXRlcikB2glPUk1PcHRpb24pAdoOX0JpbmRBcmd1bWVudHMpAdoOX0VudGl0eUJpbmRLZXkpAdoTX1BLSWRlbnRpdHlBcmd1bWVudCkB2gxfU2Vzc2lvbkJpbmQpAdoKRXhlY3V0YWJsZSkB2gpVcGRhdGVCYXNlKQHaDUNsYXVzZUVsZW1lbnQpAdoSRm9yVXBkYXRlUGFyYW1ldGVyKQHaEFR5cGVkUmV0dXJuc1Jvd3PaAl9UKQHaBWJvdW5keh46Y2xhc3M6YF9hc3luY2lvLkFzeW5jU2Vzc2lvbmB6LjpjbGFzczpgX2FzeW5jaW8uc2NvcGluZy5hc3luY19zY29wZWRfc2Vzc2lvbmApA9oJY2xvc2VfYWxs2g5vYmplY3Rfc2Vzc2lvbtoMaWRlbnRpdHlfa2V5KR7aDF9fY29udGFpbnNfX9oIX19pdGVyX1/aBmFjbG9zZdoDYWRk2gdhZGRfYWxs2gViZWdpbtoMYmVnaW5fbmVzdGVk2gVjbG9zZdoFcmVzZXTaBmNvbW1pdNoKY29ubmVjdGlvbtoGZGVsZXRl2gdleGVjdXRl2gZleHBpcmXaCmV4cGlyZV9hbGzaB2V4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AIIeJwGgASUEoQUnAWMDAAAAAAAAAAAAAAAEAAAAAwAAAfM8AAAAlwB8AGoAAAAAAAAAAAAAAAAAAAAAAAAAagMAAAAAAAAAAAAAAAAAAAAAAAB8AXwCrAGrAgAAAAAAAFMAKQJh9AQAAFBsYWNlIGFuIG9iamVjdCBpbnRvIHRoaXMgOmNsYXNzOmBfb3JtLlNlc3Npb25gLgoKICAgICAgICAuLiBjb250YWluZXI6OiBjbGFzc19iYXNlcwoKICAgICAgICAgICAgUHJveGllZCBmb3IgdGhlIDpjbGFzczpgX2FzeW5jaW8uQXN5bmNTZXNzaW9uYCBjbGFzcyBvbgogICAgICAgICAgICBiZWhhbGYgb2YgdGhlIDpjbGFzczpgX2FzeW5jaW8uc2NvcGluZy5hc3luY19zY29wZWRfc2Vzc2lvbmAgY2xhc3MuCgogICAgICAgIC4uIGNvbnRhaW5lcjo6IGNsYXNzX2Jhc2VzCgogICAgICAgICAgICBQcm94aWVkIGZvciB0aGUgOmNsYXNzOmBfb3JtLlNlc3Npb25gIGNsYXNzIG9uCiAgICAgICAgICAgIGJlaGFsZiBvZiB0aGUgOmNsYXNzOmBfYXN5bmNpby5Bc3luY1Nlc3Npb25gIGNsYXNzLgoKICAgICAgICBPYmplY3RzIHRoYXQgYXJlIGluIHRoZSA6dGVybTpgdHJhbnNpZW50YCBzdGF0ZSB3aGVuIHBhc3NlZCB0byB0aGUKICAgICAgICA6bWV0aDpgX29ybS5TZXNzaW9uLmFkZGAgbWV0aG9kIHdpbGwgbW92ZSB0byB0aGUKICAgICAgICA6dGVybTpgcGVuZGluZ2Agc3RhdGUsIHVudGlsIHRoZSBuZXh0IGZsdXNoLCBhdCB3aGljaCBwb2ludCB0aGV5CiAgICAgICAgd2lsbCBtb3ZlIHRvIHRoZSA6dGVybTpgcGVyc2lzdGVudGAgc3RhdGUuCgogICAgICAgIE9iamVjdHMgdGhhdCBhcmUgaW4gdGhlIDp0ZXJtOmBkZXRhY2hlZGAgc3RhdGUgd2hlbiBwYXNzZWQgdG8gdGhlCiAgICAgICAgOm1ldGg6YF9vcm0uU2Vzc2lvbi5hZGRgIG1ldGhvZCB3aWxsIG1vdmUgdG8gdGhlIDp0ZXJtOmBwZXJz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VGhlIHVuZGVybHlpbmcgOmNsYXNzOmBfb3JtLlNlc3Npb25gIHdpbGwgcGVyZm9ybSB0aGUKICAgICAgICAiYmVnaW4iIGFjdGlvbiB3aGVuIHRoZSA6Y2xhc3M6YF9hc3luY2lvLkFzeW5jU2Vzc2lvblRyYW5zYWN0aW9uYAogICAgICAgIG9iamVjdCBpcyBlbnRlcmVkOjoKCiAgICAgICAgICAgIGFzeW5jIHdpdGggYXN5bmNfc2Vzc2lvbi5iZWdpbigpOgogICAgICAgICAgICAgICAgLi4uICAjIE9STSB0cmFuc2FjdGlvbiBpcyBiZWd1bgoKICAgICAgICBOb3RlIHRoYXQgZGF0YWJhc2UgSU8gd2lsbCBub3Qgbm9ybWFsbHkgb2NjdXIgd2hlbiB0aGUgc2Vzc2lvbi1sZXZlbAogICAgICAgIHRyYW5zYWN0aW9uIGlzIGJlZ3VuLCBhcyBkYXRhYmFzZSB0cmFuc2FjdGlvbnMgYmVnaW4gb24gYW4KICAgICAgICBvbi1kZW1hbmQgYmFzaXMuICBIb3dldmVyLCB0aGUgYmVnaW4gYmxvY2sgaXMgYXN5bmMgdG8gYWNjb21tb2RhdGUKICAgICAgICBmb3IgYSA6bWV0aDpgX29ybS5TZXNzaW9uRXZlbnRzLmFmdGVyX3RyYW5zYWN0aW9uX2NyZWF0ZWAKICAgICAgICBldmVudCBob29rIHRoYXQgbWF5IHBlcmZvcm0gSU8uCgogICAgICAgIEZvciBhIGdlbmVyYWwgZGVzY3JpcHRpb24gb2YgT1JNIGJlZ2luLCBzZWUKICAgICAgICA6bWV0aDpgX29ybS5TZXNzaW9uLmJlZ2luYC4KCgogICAgICAgICkCcnUAAAByQQAAAHJ0AAAAcwEAAAAgcm8AAAByQQAAAHoaYXN5bmNfc2NvcGVkX3Nlc3Npb24uYmVnaW5iAQAAcxcAAACAAPA2ABAUj32JfdcPItEPItMPJNAIJHJxAAAAYwEAAAAAAAAAAAAAAAIAAAADAAAB8zYAAACXAHwAagAAAAAAAAAAAAAAAAAAAAAAAABqAwAAAAAAAAAAAAAAAAAAAAAAAKsAAAAAAAAAUwApAWG1AgAAUmV0dXJuIGFuIDpjbGFzczpgX2FzeW5jaW8uQXN5bmNTZXNzaW9u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IG9mIHRoZSA6Y2xhc3M6YF9hc3luY2lvLnNjb3BpbmcuYXN5bmNfc2NvcGVkX3Nlc3Npb25gIGNsYXNzLgoKICAgICAgICAuLiBjb250YWluZXI6OiBjbGFzc19iYXNlcwoKICAgICAgICAgICAgUHJveGllZCBmb3IgdGhlIDpjbGFzczpgX29ybS5TZXNzaW9uYCBjbGFzcyBvbgogICAgICAgICAgICBiZWhhbGYgb2YgdGhlIDpjbGFzczpgX2FzeW5jaW8uQXN5bmNTZXNzaW9uYCBjbGFzcy4KCiAgICAgICAgTWFya3MgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gaW5zdGFuY2UgYXMgb3V0IG9mIGRhdGUuIFdoZW4gYW4gZXhwaXJlZAogICAgICAgIGF0dHJpYnV0ZSBpcyBuZXh0IGFjY2Vzc2VkLCBhIHF1ZXJ5IHdpbGwgYmUgaXNzdWVkIHRvIHRoZQogICAgICAgIDpjbGFzczpgLlNlc3Npb25gIG9iamVjdCdzIGN1cnJlbnQgdHJhbnNhY3Rpb25hbCBjb250ZXh0IGluIG9yZGVyIHRvCiAgICAgICAgbG9hZCBhbGwgZXhwaXJlZCBhdHRyaWJ1dGVzIGZvciB0aGUgZ2l2ZW4gaW5zdGFuY2UuICAgTm90ZSB0aGF0CiAgICAgICAgYSBoaWdobHkgaXNvbGF0ZWQgdHJhbnNhY3Rpb24gd2lsbCByZXR1cm4gdGhlIHNhbWUgdmFsdWVzIGFzIHdlcmUKICAgICAgICBwcmV2aW91c2x5IHJlYWQgaW4gdGhhdCBzYW1lIHRyYW5zYWN0aW9uLCByZWdhcmRsZXNzIG9mIGNoYW5nZXMKICAgICAgICBpbiBkYXRhYmFzZSBzdGF0ZSBvdXRzaWRlIG9mIHRoYXQgdHJhbnNhY3Rpb24uCgogICAgICAgIFRvIGV4cGlyZSBhbGwgb2JqZWN0cyBpbiB0aGUgOmNsYXNzOmAuU2Vzc2lvbmAgc2ltdWx0YW5lb3VzbHksCiAgICAgICAgdXNlIDptZXRoOmBTZXNzaW9uLmV4cGlyZV9hbGxgLgoKICAgICAgICBUaGUgOmNsYXNzOmAuU2Vzc2lvbmAgb2JqZWN0J3MgZGVmYXVsdCBiZWhhdmlvciBpcyB0bwogICAgICAgIGV4cGlyZSBhbGwgc3RhdGUgd2hlbmV2ZXIgdGhlIDptZXRoOmBTZXNzaW9uLnJvbGxiYWNrYAogICAgICAgIG9yIDptZXRoOmBTZXNzaW9uLmNvbW1pdGAgbWV0aG9kcyBhcmUgY2FsbGVkLCBzbyB0aGF0IG5ldwogICAgICAgIHN0YXRlIGNhbiBiZSBsb2FkZWQgZm9yIHRoZSBuZXcgdHJhbnNhY3Rpb24uICAgRm9yIHRoaXMgcmVhc29uLAogICAgICAgIGNhbGxpbmcgOm1ldGg6YFNlc3Npb24uZXhwaXJlYCBvbmx5IG1ha2VzIHNlbnNlIGZvciB0aGUgc3BlY2lmaWMKICAgICAgICBjYXNlIHRoYXQgYSBub24tT1JNIFNRTCBzdGF0ZW1lbnQgd2FzIGVtaXR0ZWQgaW4gdGhlIGN1cnJlbnQKICAgICAgICB0cmFuc2FjdGlvbi4KCiAgICAgICAgOnBhcmFtIGluc3RhbmNlOiBUaGUgaW5zdGFuY2UgdG8gYmUgcmVmcmVzaGVkLgogICAgICAgIDpwYXJhbSBhdHRyaWJ1dGVfbmFtZXM6IG9wdGlvbmFsIGxpc3Qgb2Ygc3RyaW5nIGF0dHJpYnV0ZSBuYW1lcwogICAgICAgICAgaW5kaWNhdGluZyBhIHN1YnNldCBvZiBhdHRyaWJ1dGVzIHRvIGJlIGV4cGlyZWQuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOnJlZjpgc2Vzc2lvbl9leHBpcmVgIC0gaW50cm9kdWN0b3J5IG1hdGVyaWFsCgogICAgICAgICAgICA6bWV0aDpgLlNlc3Npb24uZXhwaXJlYAoKICAgICAgICAgICAgOm1ldGg6YC5TZXNzaW9uLnJlZnJlc2hgCgogICAgICAgICAgICA6bWV0aDpgX29ybS5RdWVyeS5wb3B1bGF0ZV9leGlzdGluZ2AKCgoKICAgICAgICApAdoPYXR0cmlidXRlX25hbWVzKQJydQAAAHJJAAAAKQNybQAAAHKJAAAAcqgAAABzAwAAACAgIHJvAAAAckkAAAB6G2FzeW5jX3Njb3BlZF9zZXNzaW9uLmV4cGlyZVUCAABzHwAAAIAA8GgBABAUj32JfdcPI9EPI6BIuG/QDyPTD07QCE5ycQAAAGMBAAAAAAAAAAAAAAACAAAAAwAAAfM2AAAAlwB8AGoAAAAAAAAAAAAAAAAAAAAAAAAAagMAAAAAAAAAAAAAAAAAAAAAAACrAAAAAAAAAFMAKQFhJQYAAEV4cGlyZXMgYWxsIHBlcnNpc3RlbnQgaW5zdGFuY2VzIHdpdGhpbiB0aGlzIFNlc3Npb24uCgogICAgICAgIC4uIGNvbnRhaW5lcjo6IGNsYXNzX2Jhc2VzCgogICAgICAgICAgICBQcm94aWVkIGZvciB0aGUgOmNsYXNzOmBfYXN5bmNpby5Bc3luY1Nlc3Npb25gIGNsYXNzIG9uCiAgICAgICAgICAgIGJlaGFsZiBvZiB0aGUgOmNsYXNzOmBfYXN5bmNpby5zY29waW5nLmFzeW5jX3Njb3BlZF9zZXNzaW9uYCBjbGFzcy4KCiAgICAgICAgLi4gY29udGFpbmVyOjogY2xhc3NfYmFzZXMKCiAgICAgICAgICAgIFByb3hpZWQgZm9yIHRoZSA6Y2xhc3M6YF9vcm0uU2Vzc2lvbmAgY2xhc3Mgb24KICAgICAgICAgICAgYmVoYWxmIG9mIHRoZSA6Y2xhc3M6YF9hc3luY2lvLkFzeW5jU2Vzc2lvbmAgY2xhc3MuCgogICAgICAgIFdoZW4gYW55IGF0dHJpYnV0ZXMgb24gYSBwZXJzaXN0ZW50IGluc3RhbmNlIGlzIG5leHQgYWNjZXNzZWQsCiAgICAgICAgYSBxdWVyeSB3aWxsIGJlIGlzc3VlZCB1c2luZyB0aGUKICAgICAgICA6Y2xhc3M6YC5TZXNzaW9uYCBvYmplY3QncyBjdXJyZW50IHRyYW5zYWN0aW9uYWwgY29udGV4dCBpbiBvcmRlciB0bwogICAgICAgIGxvYWQgYWxsIGV4cGlyZWQgYXR0cmlidXRlcyBmb3IgdGhlIGdpdmVuIGluc3RhbmNlLiAgIE5vdGUgdGhhdAogICAgICAgIGEgaGlnaGx5IGlzb2xhdGVkIHRyYW5zYWN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzYW1lIHZhbHVlcyBhcyB3ZXJlCiAgICAgICAgcHJldmlvdXNseSByZWFkIGluIHRoYXQgc2FtZSB0cmFuc2FjdGlvbiwgcmVnYXJkbGVzcyBvZiBjaGFuZ2VzCiAgICAgICAgaW4gZGF0YWJhc2Ugc3RhdGUgb3V0c2lkZSBvZiB0aGF0IHRyYW5zYWN0aW9uLgoKICAgICAgICBUbyBleHBpcmUgaW5kaXZpZHVhbCBvYmplY3RzIGFuZCBpbmRpdmlkdWFsIGF0dHJpYnV0ZXMKICAgICAgICBvbiB0aG9zZSBvYmplY3RzLCB1c2UgOm1ldGg6YFNlc3Npb24uZXhwaXJlYC4KCiAgICAgICAgVGhlIDpjbGFzczpgLlNlc3Npb25gIG9iamVjdCdzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8KICAgICAgICBleHBpcmUgYWxsIHN0YXRlIHdoZW5ldmVyIHRoZSA6bWV0aDpgU2Vzc2lvbi5yb2xsYmFja2AKICAgICAgICBvciA6bWV0aDpgU2Vzc2lvbi5jb21taXRgIG1ldGhvZHMgYXJlIGNhbGxlZCwgc28gdGhhdCBuZXcKICAgICAgICBzdGF0ZSBjYW4gYmUgbG9hZGVkIGZvciB0aGUgbmV3IHRyYW5zYWN0aW9uLiAgIEZvciB0aGlzIHJlYXNvbiwKICAgICAgICBjYWxsaW5nIDptZXRoOmBTZXNzaW9uLmV4cGlyZV9hbGxgIGlzIG5vdCB1c3VhbGx5IG5lZWRlZCwKICAgICAgICBhc3N1bWluZyB0aGUgdHJhbnNhY3Rpb24gaXMgaXNvbGF0ZWQuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOnJlZjpgc2Vzc2lvbl9leHBpcmVgIC0gaW50cm9kdWN0b3J5IG1hdGVyaWFsCgogICAgICAgICAgICA6bWV0aDpgLlNlc3Npb24uZXhwaXJlYAoKICAgICAgICAgICAgOm1ldGg6YC5TZXNzaW9uLnJlZnJlc2hgCgogICAgICAgICAgICA6bWV0aDpgX29ybS5RdWVyeS5wb3B1bGF0ZV9leGlzdGluZ2AKCgoKICAgICAgICApAnJ1AAAAckoAAABydAAAAHMBAAAAIHJvAAAAckoAAAB6H2FzeW5jX3Njb3BlZF9zZXNzaW9uLmV4cGlyZV9hbGyLAgAAcxgAAACAAPBaAQAQFI99iX3XDyfRDyfTDynQCClycQAAAGMCAAAAAAAAAAAAAAADAAAAAwAAAfM4AAAAlwB8AGoAAAAAAAAA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Kipub3QqKiB1c2VmdWwgYXMgYW4gb3ZlcnJpZGUgdGFyZ2V0LAogICAgICAgICAgICBpbiBjb250cmFzdCB0byB0aGF0IG9mIHRoZSA6bWV0aDpgX29ybS5TZXNzaW9uLmdldF9iaW5kYCBtZXRob2QuCiAgICAgICAgICAgIFRoZSBleGFtcGxlIGJlbG93IGlsbHVzdHJhdGVzIGhvdyB0byBpbXBsZW1lbnQgY3VzdG9tCiAgICAgICAgICAgIDptZXRoOmBfb3JtLlNlc3Npb24uZ2V0X2JpbmRgIHNjaGVtZXMgdGhhdCB3b3JrIHdpdGgKICAgICAgICAgICAgOmNsYXNzOmAuQXN5bmNTZXNzaW9uYCBhbmQgOmNsYXNzOmAuQXN5bmNFbmdpbmVgLgoKICAgICAgICBUaGUgcGF0dGVybiBpbnRyb2R1Y2VkIGF0IDpyZWY6YHNlc3Npb25fY3VzdG9tX3BhcnRpdGlvbmluZ2AKICAgICAgICBpbGx1c3RyYXRlcyBob3cgdG8gYXBwbHkgYSBjdXN0b20gYmluZC1sb29rdXAgc2NoZW1lIHRvIGEKICAgICAgICA6Y2xhc3M6YF9vcm0uU2Vzc2lvbmAgZ2l2ZW4gYSBzZXQgb2YgOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAgb2JqZWN0cy4KICAgICAgICBUbyBhcHBseSBhIGNvcnJlc3BvbmRpbmcgOm1ldGg6YF9vcm0uU2Vzc2lvbi5nZXRfYmluZGAgaW1wbGVtZW50YXRpb24KICAgICAgICBmb3IgdXNlIHdpdGggYSA6Y2xhc3M6YC5Bc3luY1Nlc3Npb25gIGFuZCA6Y2xhc3M6YC5Bc3luY0VuZ2luZWAKICAgICAgICBvYmplY3RzLCBjb250aW51ZSB0byBzdWJjbGFzcyA6Y2xhc3M6YF9vcm0uU2Vzc2lvbmAgYW5kIGFwcGx5IGl0IHRvCiAgICAgICAgOmNsYXNzOmAuQXN5bmNTZXNzaW9uYCB1c2luZwogICAgICAgIDpwYXJhbXJlZjpgLkFzeW5jU2Vzc2lvbi5zeW5jX3Nlc3Npb25fY2xhc3NgLiBUaGUgaW5uZXIgbWV0aG9kIG11c3QKICAgICAgICBjb250aW51ZSB0byByZXR1cm4gOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAgaW5zdGFuY2VzLCB3aGljaCBjYW4gYmUKICAgICAgICBhY3F1aXJlZCBmcm9tIGEgOmNsYXNzOmBfYXN5bmNpby5Bc3luY0VuZ2luZWAgdXNpbmcgdGhlCiAgICAgICAgOmF0dHI6YF9hc3luY2lvLkFzeW5jRW5naW5lLnN5bmNfZW5naW5lYCBhdHRyaWJ1dGU6OgoKICAgICAgICAgICAgIyB1c2luZyBleGFtcGxlIGZyb20gIkN1c3RvbSBWZXJ0aWNhbCBQYXJ0aXRpb25pbmciCgoKICAgICAgICAgICAgaW1wb3J0IHJhbmRvbQoKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15LmV4dC5hc3luY2lvIGltcG9ydCBBc3luY1Nlc3Npb24KICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15LmV4dC5hc3luY2lvIGltcG9ydCBjcmVhdGVfYXN5bmNfZW5naW5lCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteS5leHQuYXN5bmNpbyBpbXBvcnQgYXN5bmNfc2Vzc2lvbm1ha2VyCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteS5vcm0gaW1wb3J0IFNlc3Npb24KCiAgICAgICAgICAgICMgY29uc3RydWN0IGFzeW5jIGVuZ2luZXMgdy8gYXN5bmMgZHJpdmVycwogICAgICAgICAgICBlbmdpbmVzID0gewogICAgICAgICAgICAgICAgImxlYWRlciI6IGNyZWF0ZV9hc3luY19lbmdpbmUoInNxbGl0ZSthaW9zcWxpdGU6Ly8vbGVhZGVyLmRiIiksCiAgICAgICAgICAgICAgICAib3RoZXIiOiBjcmVhdGVfYXN5bmNfZW5naW5lKCJzcWxpdGUrYWlvc3FsaXRlOi8vL290aGVyLmRiIiksCiAgICAgICAgICAgICAgICAiZm9sbG93ZXIxIjogY3JlYXRlX2FzeW5jX2VuZ2luZSgic3FsaXRlK2Fpb3NxbGl0ZTovLy9mb2xsb3dlcjEuZGIiKSwKICAgICAgICAgICAgICAgICJmb2xsb3dlcjIiOiBjcmVhdGVfYXN5bmNfZW5naW5lKCJzcWxpdGUrYWlvc3FsaXRlOi8vL2ZvbGxvd2VyMi5kYiIpLAogICAgICAgICAgICB9CgoKICAgICAgICAgICAgY2xhc3MgUm91dGluZ1Nlc3Npb24oU2Vzc2lvbik6CiAgICAgICAgICAgICAgICBkZWYgZ2V0X2JpbmQoc2VsZiwgbWFwcGVyPU5vbmUsIGNsYXVzZT1Ob25lLCAqKmt3KToKICAgICAgICAgICAgICAgICAgICAjIHdpdGhpbiBnZXRfYmluZCgpLCByZXR1cm4gc3luYyBlbmdpbmVzCiAgICAgICAgICAgICAgICAgICAgaWYgbWFwcGVyIGFuZCBpc3N1YmNsYXNzKG1hcHBlci5jbGFzc18sIE15T3RoZXJDbGFzcyk6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmdpbmVzWyJvdGhlciJdLnN5bmNfZW5naW5lCiAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9mbHVzaGluZyBvciBpc2luc3RhbmNlKGNsYXVzZSwgKFVwZGF0ZSwgRGVsZXRlKSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmdpbmVzWyJsZWFkZXIiXS5zeW5jX2VuZ2luZQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmdpbmVzWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tLmNob2ljZShbImZvbGxvd2VyMSIsICJmb2xsb3dlcjIiXSkKICAgICAgICAgICAgICAgICAgICAgICAgXS5zeW5jX2VuZ2luZQoKCiAgICAgICAgICAgICMgYXBwbHkgdG8gQXN5bmNTZXNzaW9uIHVzaW5nIHN5bmNfc2Vzc2lvbl9jbGFzcwogICAgICAgICAgICBBc3luY1Nlc3Npb25NYWtlciA9IGFzeW5jX3Nlc3Npb25tYWtlcihzeW5jX3Nlc3Npb25fY2xhc3M9Um91dGluZ1Nlc3Npb24pCgogICAgICAgIFRoZSA6bWV0aDpgX29ybS5TZXNzaW9uLmdldF9iaW5kYCBtZXRob2QgaXMgY2FsbGVkIGluIGEgbm9uLWFzeW5jaW8sCiAgICAgICAgaW1wbGljaXRseSBub24tYmxvY2tpbmcgY29udGV4dCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgT1JNIGV2ZW50IGhvb2tzCiAgICAgICAgYW5kIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnZva2VkIHZpYSA6bWV0aDpgLkFzeW5jU2Vzc2lvbi5ydW5fc3luY2AsIHNvCiAgICAgICAgcm91dGluZXMgdGhhdCB3aXNoIHRvIHJ1biBTUUwgY29tbWFuZHMgaW5zaWRlIG9mCiAgICAgICAgOm1ldGg6YF9vcm0uU2Vzc2lvbi5nZXRfYmluZGAgY2FuIGNvbnRpbnVlIHRvIGRvIHNvIHVzaW5nCiAgICAgICAgYmxvY2tpbmctc3R5bGUgY29kZSwgd2hpY2ggd2lsbCBiZSB0cmFuc2xhdGVkIHRvIGltcGxpY2l0bHkgYXN5bmMgY2FsbHMKICAgICAgICBhdCB0aGUgcG9pbnQgb2YgaW52b2tpbmcgSU8gb24gdGhlIGRhdGFiYXNlIGRyaXZlcnMuCgoKICAgICAgICApA9oGbWFwcGVy2gZjbGF1c2VyWgAAAHJ3AAAAKQJydQAAAHJOAAAAKQVybQAAAHKvAAAAcrAAAAByWgAAAHJ+AAAAcwUAAAAgICAgIHJvAAAAck4AAAB6HWFzeW5jX3Njb3BlZF9zZXNzaW9uLmdldF9iaW5k9wIAAHMyAAAAgADwbAIAECaIdI99iX3XDyXRDyXwAAIQCtgTGaAmqHTxAwIQCtg3OfEDAhAK8AACCQpycQAAAGMDAAAAAAAAAAAAAAAEAAAAAwAAAfM8AAAAlwB8AGoAAAAAAAAAAAAAAAAAAAAAAAAAagMAAAAAAAAAAAAAAAAAAAAAAAB8AXwCrAGrAgAAAAAAAFMAKQJhnwsAAFJldHVybiBgYFRydWVgYCBpZiB0aGUgZ2l2ZW4gaW5zdGFuY2UgaGFzIGxvY2FsbHkKICAgICAgICBtb2RpZmllZCBhdHRyaWJ1dGVzLgoKICAgICAgICAuLiBjb250YWluZXI6OiBjbGFzc19iYXNlcwoKICAgICAgICAgICAgUHJveGllZCBmb3IgdGhlIDpjbGFzczpgX2FzeW5jaW8uQXN5bmNTZXNzaW9uYCBjbGFzcyBvbgogICAgICAgICAgICBiZWhhbGYgb2YgdGhlIDpjbGFzczpgX2FzeW5jaW8uc2NvcGluZy5hc3luY19zY29wZWRfc2Vzc2lvbmAgY2xhc3MuCgogICAgICAgIC4uIGNvbnRhaW5lcjo6IGNsYXNzX2Jhc2VzCgogICAgICAgICAgICBQcm94aWVkIGZvciB0aGUgOmNsYXNzOmBfb3JtLlNlc3Npb25gIGNsYXNzIG9uCiAgICAgICAgICAgIGJlaGFsZiBvZiB0aGUgOmNsYXNzOmBfYXN5bmNpby5Bc3luY1Nlc3Npb25gIGNsYXNzLgoKICAgICAgICBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGhpc3RvcnkgZm9yIGVhY2ggaW5zdHJ1bWVudGVkCiAgICAgICAgYXR0cmlidXRlIG9uIHRoZSBpbnN0YW5jZSBhbmQgcGVyZm9ybXMgYSBjb21wYXJpc29uIG9mIHRoZSBjdXJyZW50CiAgICAgICAgdmFsdWUgdG8gaXRzIHByZXZpb3VzbHkgZmx1c2hlZCBvciBjb21taXR0ZWQgdmFsdWUsIGlmIGFueS4KCiAgICAgICAgSXQgaXMgaW4gZWZmZWN0IGEgbW9yZSBleHBlbnNpdmUgYW5kIGFjY3VyYXRlCiAgICAgICAgdmVyc2lvbiBvZiBjaGVja2luZyBmb3IgdGhlIGdpdmVuIGluc3RhbmNlIGluIHRoZQogICAgICAgIDphdHRyOmAuU2Vzc2lvbi5kaXJ0eWAgY29sbGVjdGlvbjsgYSBmdWxsIHRlc3QgZm9yCiAgICAgICAgZWFjaCBhdHRyaWJ1dGUncyBuZXQgImRpcnR5IiBzdGF0dXMgaXMgcGVyZm9ybWVkLgoKICAgICAgICBFLmcuOjoKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmlzX21vZGlmaWVkKHNvbWVvYmplY3QpCgogICAgICAgIEEgZmV3IGNhdmVhdHMgdG8gdGhpcyBtZXRob2QgYXBwbHk6CgogICAgICAgICogSW5zdGFuY2VzIHByZXNlbnQgaW4gdGhlIDphdHRyOmAuU2Vzc2lvbi5kaXJ0eWAgY29sbGVjdGlvbiBtYXkKICAgICAgICAgIHJlcG9ydCBgYEZhbHNlYGAgd2hlbiB0ZXN0ZWQgd2l0aCB0aGlzIG1ldGhvZC4gIFRoaXMgaXMgYmVjYXVzZQogICAgICAgICAgdGhlIG9iamVjdCBtYXkgaGF2ZSByZWNlaXZlZCBjaGFuZ2UgZXZlbnRzIHZpYSBhdHRyaWJ1dGUgbXV0YXRpb24sCiAgICAgICAgICB0aHVzIHBsYWNpbmcgaXQgaW4gOmF0dHI6YC5TZXNzaW9uLmRpcnR5YCwgYnV0IHVsdGltYXRlbHkgdGhlIHN0YXRlCiAgICAgICAgICBpcyB0aGUgc2FtZSBhcyB0aGF0IGxvYWRlZCBmcm9tIHRoZSBkYXRhYmFzZSwgcmVzdWx0aW5nIGluIG5vIG5ldAogICAgICAgICAgY2hhbmdlIGhlcmUuCiAgICAgICAgKiBTY2FsYXIgYXR0cmlidXRlcyBtYXkgbm90IGhhdmUgcmVjb3JkZWQgdGhlIHByZXZpb3VzbHkgc2V0CiAgICAgICAgICB2YWx1ZSB3aGVuIGEgbmV3IHZhbHVlIHdhcyBhcHBsaWVkLCBpZiB0aGUgYXR0cmlidXRlIHdhcyBub3QgbG9hZGVkLAogICAgICAgICAgb3Igd2FzIGV4cGlyZWQsIGF0IHRoZSB0aW1lIHRoZSBuZXcgdmFsdWUgd2FzIHJlY2VpdmVkIC0gaW4gdGhlc2UKICAgICAgICAgIGNhc2VzLCB0aGUgYXR0cmlidXRlIGlzIGFzc3VtZWQgdG8gaGF2ZSBhIGNoYW5nZSwgZXZlbiBpZiB0aGVyZSBpcwogICAgICAgICAgdWx0aW1hdGVseSBubyBuZXQgY2hhbmdlIGFnYWluc3QgaXRzIGRhdGFiYXNlIHZhbHVlLiBTUUxBbGNoZW15IGluCiAgICAgICAgICBtb3N0IGNhc2VzIGRvZXMgbm90IG5lZWQgdGhlICJvbGQiIHZhbHVlIHdoZW4gYSBzZXQgZXZlbnQgb2NjdXJzLCBzbwogICAgICAgICAgaXQgc2tpcHMgdGhlIGV4cGVuc2Ugb2YgYSBTUUwgY2FsbCBpZiB0aGUgb2xkIHZhbHVlIGlzbid0IHByZXNlbnQsCiAgICAgICAgICBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGFuIFVQREFURSBvZiB0aGUgc2NhbGFyIHZhbHVlIGlzCiAgICAgICAgICB1c3VhbGx5IG5lZWRlZCwgYW5kIGluIHRob3NlIGZldyBjYXNlcyB3aGVyZSBpdCBpc24ndCwgaXMgbGVzcwogICAgICAgICAgZXhwZW5zaXZlIG9uIGF2ZXJhZ2UgdGhhbiBpc3N1aW5nIGEgZGVmZW5zaXZlIFNFTEVDVC4KCiAgICAgICAgICBUaGUgIm9sZCIgdmFsdWUgaXMgZmV0Y2hlZCB1bmNvbmRpdGlvbmFsbHkgdXBvbiBzZXQgb25seSBpZiB0aGUKICAgICAgICAgIGF0dHJpYnV0ZSBjb250YWluZXIgaGFzIHRoZSBgYGFjdGl2ZV9oaXN0b3J5YGAgZmxhZyBzZXQgdG8gYGBUcnVlYGAuCiAgICAgICAgICBUaGlzIGZsYWcgaXMgc2V0IHR5cGljYWxseSBmb3IgcHJpbWFyeSBrZXkgYXR0cmlidXRlcyBhbmQgc2NhbGFyCiAgICAgICAgICBvYmplY3QgcmVmZXJlbmNlcyB0aGF0IGFyZSBub3QgYSBzaW1wbGUgbWFueS10by1vbmUuICBUbyBzZXQgdGhpcwogICAgICAgICAgZmxhZyBmb3IgYW55IGFyYml0cmFyeSBtYXBwZWQgY29sdW1uLCB1c2UgdGhlIGBgYWN0aXZlX2hpc3RvcnlgYAogICAgICAgICAgYXJndW1lbnQgd2l0aCA6ZnVuYzpgLmNvbHVtbl9wcm9wZXJ0eWAuCgogICAgICAgIDpwYXJhbSBpbnN0YW5jZTogbWFwcGVkIGluc3RhbmNlIHRvIGJlIHRlc3RlZCBmb3IgcGVuZGluZyBjaGFuZ2VzLgogICAgICAgIDpwYXJhbSBpbmNsdWRlX2NvbGxlY3Rpb25zOiBJbmRpY2F0ZXMgaWYgbXVsdGl2YWx1ZWQgY29sbGVjdGlvbnMKICAgICAgICAgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBvcGVyYXRpb24uICBTZXR0aW5nIHRoaXMgdG8gYGBGYWxzZWBgIGlzIGEKICAgICAgICAgd2F5IHRvIGRldGVjdCBvbmx5IGxvY2FsLWNvbHVtbiBiYXNlZCBwcm9wZXJ0aWVzIChpLmUuIHNjYWxhciBjb2x1bW5zCiAgICAgICAgIG9yIG1hbnktdG8tb25lIGZvcmVpZ24ga2V5cykgdGhhdCB3b3VsZCByZXN1bHQgaW4gYW4gVVBEQVRF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AAByWgAAAHoZYXN5bmNfc2NvcGVkX3Nlc3Npb24uYmluZCYFAABzDgAAAIAA4B0hiASPDYkN1QgacnEAAABjAQAAAAAAAAAAAAAAAQAAAAMAAAHzLgAAAJcAfABqAAAAAAAAAAAAAAAAAAAAAAAAAGoCAAAAAAAAAAAAAAAAAAAAAAAAUwApAWG1BAAAVGhlIHNldCBvZiBhbGwgcGVyc2lzdGVudCBpbnN0YW5jZXMgY29uc2lkZXJlZCBkaXJ0eS4KCiAgICAgICAgLi4gY29udGFpbmVyOjogY2xhc3NfYmFzZXMKCiAgICAgICAgICAgIFByb3hpZWQgZm9yIHRoZSA6Y2xhc3M6YF9hc3luY2lvLkFzeW5jU2Vzc2lvbmAgY2xhc3MKICAgICAgICAgICAgb24gYmVoYWxmIG9mIHRoZSA6Y2xhc3M6YF9hc3luY2lvLnNjb3BpbmcuYXN5bmNfc2NvcGVkX3Nlc3Npb25gIGNsYXNzLgoKICAgICAgICAuLiBjb250YWluZXI6OiBjbGFzc19iYXNlcwoKICAgICAgICAgICAgUHJveGllZCBmb3IgdGhlIDpjbGFzczpgX29ybS5TZXNzaW9uYCBjbGFzcwogICAgICAgICAgICBvbiBiZWhhbGYgb2YgdGhlIDpjbGFzczpgX2FzeW5jaW8uQXN5bmNTZXNzaW9uYCBjbGFzcy4KCiAgICAgICAgRS5nLjo6CgogICAgICAgICAgICBzb21lX21hcHBlZF9vYmplY3QgaW4gc2Vzc2lvbi5kaXJ0eQoKICAgICAgICBJbnN0YW5jZXMgYXJlIGNvbnNpZGVyZWQgZGlydHkgd2hlbiB0aGV5IHdlcmUgbW9kaWZpZWQgYnV0IG5vdAogICAgICAgIGRlbGV0ZWQuCgogICAgICAgIE5vdGUgdGhhdCB0aGlzICdkaXJ0eScgY2FsY3VsYXRpb24gaXMgJ29wdGltaXN0aWMnOyBtb3N0CiAgICAgICAgYXR0cmlidXRlLXNldHRpbmcgb3IgY29sbGVjdGlvbiBtb2RpZmljYXRpb24gb3BlcmF0aW9ucyB3aWxsCiAgICAgICAgbWFyayBhbiBpbnN0YW5jZSBhcyAnZGlydHknIGFuZCBwbGFjZSBpdCBpbiB0aGlzIHNldCwgZXZlbiBpZgog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ZWRfc2Vzc2lvbmAgY2xhc3MuCgogICAgICAgIC4uIGNvbnRhaW5lcjo6IGNsYXNzX2Jhc2VzCgogICAgICAgICAgICBQcm94aWVkIGZvciB0aGUgOmNsYXNzOmBfb3JtLlNlc3Npb25gIGNsYXNzCiAgICAgICAgICAgIG9uIGJlaGFsZiBvZiB0aGUgOmNsYXNzOmBfYXN5bmNpby5Bc3luY1Nlc3Npb25gIGNsYXNzLgoKICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDEuNCBUaGUgOmNsYXNzOmBfb3JtLlNlc3Npb25gIG5vIGxvbmdlciBiZWdpbnMKICAgICAgICAgICBhIG5ldyB0cmFuc2FjdGlvbiBpbW1lZGlhdGVseSwgc28gdGhpcyBhdHRyaWJ1dGUgd2lsbCBiZSBGYWxzZQogICAgICAgICAgIHdoZW4gdGhlIDpjbGFzczpgX29ybS5TZXNzaW9uYCBpcyBmaXJzdCBpbnN0YW50aWF0ZWQuCgogICAgICAgICJwYXJ0aWFsIHJvbGxiYWNrIiBzdGF0ZSB0eXBpY2FsbHkgaW5kaWNhdGVzIHRoYXQgdGhlIGZsdXNoIHByb2Nlc3MKICAgICAgICBvZiB0aGUgOmNsYXNzOmBfb3JtLlNlc3Npb25gIGhhcyBmYWlsZWQsIGFuZCB0aGF0IHRoZQogICAgICAgIDptZXRoOmBfb3JtLlNlc3Npb24ucm9sbGJhY2tgIG1ldGhvZCBtdXN0IGJlIGVtaXR0ZWQgaW4gb3JkZXIgdG8KICAgICAgICBmdWxseSByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLgoKICAgICAgICBJZiB0aGlzIDpjbGFzczpgX29ybS5TZXNzaW9uYCBpcyBub3QgaW4gYSB0cmFuc2FjdGlvbiBhdCBhbGwsIHRoZQogICAgICAgIDpjbGFzczpgX29ybS5TZXNzaW9uYCB3aWxsIGF1dG9iZWdpbiB3aGVuIGl0IGlzIGZpcnN0IHVzZWQsIHNvIGluIHRoaXMKICAgICAgICBjYXNlIDphdHRyOmBfb3JtLlNlc3Npb24uaXNfYWN0aXZlYCB3aWxsIHJldHVybiBUcnVlLgoKICAgICAgICBPdGhlcndpc2UsIGlmIHRoaXMgOmNsYXNzOmBf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d2l0aGluIHRoZSBgYHdpdGg6YGAgYmxvY2sKICAgICAgICB3aWxsIG5vdCBiZSBzdWJqZWN0IHRvIGZsdXNoZXMgb2NjdXJyaW5nIHVwb24gcXVlcnkKICAgICAgICBhY2Nlc3MuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIGluaXRpYWxpemluZyBhIHNlcmllcwogICAgICAgIG9mIG9iamVjdHMgd2hpY2ggaW52b2x2ZSBleGlzdGluZyBkYXRhYmFzZSBxdWVyaWVzLAogICAgICAgIHdoZXJlIHRoZSB1bmNvbXBsZXRlZCBvYmplY3Qgc2hvdWxkIG5vdCB5ZXQgYmUgZmx1c2hlZC4KCgoKICAgICAgICApAnJ1AAAAcmEAAABydAAAAHMBAAAAIHJvAAAAcmEAAAB6IWFzeW5jX3Njb3BlZF9zZXNzaW9uLm5vX2F1dG9mbHVzaMgFAABzFQAAAIAA8EIBABAUj32JfdcPKdEPKdAIKXJxAAAAYwEAAAAAAAAAAAAAAAEAAAADAAAB8y4AAACXAHwAagAAAAAAAAAAAAAAAAAAAAAAAABqAgAAAAAAAAAAAAAAAAAAAAAAAFMAKQFh5QIAAEEgdXNlci1tb2RpZmlhYmxlIGRpY3Rpb25hcnkuCgogICAgICAgIC4uIGNvbnRhaW5lcjo6IGNsYXNzX2Jhc2VzCgogICAgICAgICAgICBQcm94aWVkIGZvciB0aGUgOmNsYXNzOmBfYXN5bmNpby5Bc3luY1Nlc3Npb25gIGNsYXNzCiAgICAgICAgICAgIG9uIGJlaGFsZiBvZiB0aGUgOmNsYXNzOmBfYXN5bmNpby5zY29waW5nLmFzeW5jX3Njb3BlZF9zZXNzaW9uYCBjbGFzcy4KCiAgICAgICAgLi4gY29udGFpbmVyOjogY2xhc3NfYmFzZXMKCiAgICAgICAgICAgIFByb3hpZWQgZm9yIHRoZSA6Y2xhc3M6YF9vcm0uU2Vzc2lvbmAgY2xhc3MKICAgICAgICAgICAgb24gYmVoYWxmIG9mIHRoZSA6Y2xhc3M6YF9hc3luY2lvLkFzeW5jU2Vzc2lvbmAgY2xhc3MuCgogICAgICAgIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoaXMgZGljdGlvbmFyeSBjYW4gYmUgcG9wdWxhdGVkIHVzaW5nIHRoZQogICAgICAgIGBgaW5mb2BgIGFyZ3VtZW50IHRvIHRoZSA6Y2xhc3M6YC5TZXNzaW9uYCBjb25zdHJ1Y3RvciBvcgogICAgICAgIDpjbGFzczpgLnNlc3Npb25tYWtlcmAgY29uc3RydWN0b3Igb3IgZmFjdG9yeSBtZXRob2RzLiAgVGhlIGRpY3Rpb25hcnkKICAgICAgICBoZXJlIGlzIGFsd2F5cyBsb2NhbCB0byB0aGlzIDpjbGFzczpgLlNlc3Npb25gIGFuZCBjYW4gYmUgbW9kaWZpZWQKICAgICAgICBpbmRlcGVuZGVudGx5IG9mIGFsbCBvdGhlciA6Y2xhc3M6YC5TZXNzaW9uYCBvYmplY3RzLgoKCgogICAgICAgICkCcnUAAAByYgAAAHJ0AAAAcwEAAAAgcm8AAAByYgAAAHoZYXN5bmNfc2NvcGVkX3Nlc3Npb24uaW5mb+sFAABzFAAAAIAA8DAAEBSPfYl91w8h0Q8h0AghcnEAAABjAQAAAAAAAAAAAAAAAwAAAIMAAAHzRgAAAEsAAQCXAHQBAAAAAAAAAABqAgAAAAAAAAAAAAAAAAAAAAAAAKsAAAAAAAAAgwBkAXsDAACWApcDhgUFAFMANwCMBK0DdwEpAmGqAQAAQ2xvc2UgYWxsIDpjbGFzczpgX2FzeW5jaW8uQXN5bmNTZXNzaW9uYCBzZXNzaW9ucy4KCiAgICAgICAgLi4gY29udGFpbmVyOjogY2xhc3NfYmFzZXMKCiAgICAgICAgICAgIFByb3hpZWQgZm9yIHRoZSA6Y2xhc3M6YF9hc3luY2lvLkFzeW5jU2Vzc2lvbmAgY2xhc3Mgb24KICAgICAgICAgICAgYmVoYWxmIG9mIHRoZSA6Y2xhc3M6YF9hc3luY2lvLnNjb3BpbmcuYXN5bmNfc2NvcGVkX3Nlc3Npb25gIGNsYXNzLgoKICAgICAgICAuLiBkZXByZWNhdGVkOjogMi4wIFRoZSA6bWV0aDpgLkFzeW5jU2Vzc2lvbi5jbG9zZV9hbGxgIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gIFBsZWFzZSByZWZlciB0byA6ZnVuYzpgX2FzeW5jaW8uY2xv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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 7
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
base.cpython-312.pyc
10.92 KB
lrw-r--r--
2025-04-04 08:02:02
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
engine.cpython-312.pyc
56.03 KB
lrw-r--r--
2025-04-04 08:02:02
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
exc.cpython-312.pyc
1015 B
lrw-r--r--
2025-04-04 08:02:02
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
result.cpython-312.pyc
36.60 KB
lrw-r--r--
2025-04-04 08:02:02
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
scoping.cpython-312.pyc
55.65 KB
lrw-r--r--
2025-04-04 08:02:02
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
session.cpython-312.pyc
69.78 KB
lrw-r--r--
2025-04-04 08:02:02
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-312.pyc
955 B
lrw-r--r--
2025-04-04 08:02:02
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).