REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 63.75 KB
Close
//lib64/python3.8/logging/__pycache__/__init__.cpython-38.pyc
Text
Base64
VQ0NCgAAAABlNX9khDABAOMAAAAAAAAAAAAAAAAAAAAAKgAAAEAAAABzNgQAAGQAWgBkAWQCbAFaAWQBZAJsAloCZAFkAmwDWgNkAWQCbARaBGQBZAJsBVoFZAFkAmwGWgZkAWQCbAdaB2QBZAJsCFoIZAFkAmwJWgpkAWQDbAttDFoMAQBkAWQEbAttDVoOAQBkBWQGZAdkCGQJZApkC2QMZA1kDmQPZBBkEWQSZBNkFGQVZBZkF2QYZBlkGmQbZBxkHWQeZB9kIGQhZCJkI2QkZCVkJmQnZChkKWQqZCtkLGQtZC5nKloPZAFkAmwQWhBkL1oRZDBaEmQxWhNkMloUZQOgA6EAWhVkM1oWZDNaF2QzWhhkM1oZZDRaGmUaWhtkNVocZDZaHWUdWh5kN1ofZDhaIGQBWiFlGmQHZRxkCWUdZBdlH2QPZSBkCGUhZBNpBloiZRplG2UcZR1lHWUfZSBlIWQ5nAhaI2Q6ZCGEAFokZDtkGIQAWiVlJmUBZDyDApABcmRkPWQ+hABaJ24IZD9kQIQAWidlAmoooCllJWoqaiuhAVosZEFkQoQAWi1lEKAuoQBaL2RDZESEAFowZEVkRoQAWjFlJmUCZEeDApABc7JkSGRJhABaMm4oZQigM6EAWjRkSmRJhABaMmRLZEyEAFo1ZQJqNmUwZTVlMWRNjQMBAEcAZE5kEIQAZBBlN4MDWjhlOGE5ZE9kLIQAWjpkUGQrhABaO2RRZCaEAFo8ZQ6DAFo9Ww5HAGRSZFOEAGRTZTeDA1o+RwBkVGRVhABkVWU+gwNaP0cAZFZkV4QAZFdlPoMDWkBkWFpBZT5lQWYCZT9kWWYCZUBkWmYCZFucA1pCRwBkXGQNhABkDWU3gwNaDWUNgwBaQ0cAZF1kBoQAZAZlN4MDWkRHAGReZAyEAGQMZTeDA1pFRwBkX2RghABkYGU3gwNaRmUIoEehAFpIZwBaSWRhZGKEAFpKZGNkZIQAWktHAGRlZA6EAGQOZUaDA1pMRwBkZmQVhABkFWVMgwNaTUcAZGdkC4QAZAtlTYMDWk5HAGRoZGmEAGRpZU2DA1pPZU9lHYMBWlBlUFpRRwBkamRrhABka2U3gwNaUmRsZCeEAFpTZG1kI4QAWlRHAGRuZG+EAGRvZTeDA1pVRwBkcGQRhABkEWVGgwNaVkcAZHFkcoQAZHJlVoMDWldlVmFYRwBkc2QShABkEmU3gwNaWWVXZR2DAVpaZVplVl9aZVVlVmpagwFlVl9bZHRkGYQAWlxkhWR1ZCKEAVpdZHZkG4QAWl5lXlpfZHdkHoQAWmBkM2R4nAFkeWQfhAJaYWR6ZCqEAFpiZHtkKYQAWmNkfGQkhABaZGR9ZByEAFplZH5kJYQAWmZlGmYBZH9kHYQBWmdlSWYBZIBkKIQBWmhkAWQCbGlaaWVpoGplaKEBAQBHAGSBZBSEAGQUZUyDA1prZAJhbGSGZIJkg4QBWm1khGQahABabmQCUwAph3rCCkxvZ2dpbmcgcGFja2FnZSBmb3IgUHl0aG9uLiBCYXNlZCBvbiBQRVAgMjgyIGFuZCBjb21tZW50cyB0aGVyZXRvIGluCmNvbXAubGFuZy5weXRob24uCgpDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KClRvIHVzZSwgc2ltcGx5ICdpbXBvcnQgbG9nZ2luZycgYW5kIGxvZyBhd2F5IQrpAAAAAE4pAdoIVGVtcGxhdGUpAdoJRm9ybWF0dGVy2gxCQVNJQ19GT1JNQVTaEkJ1ZmZlcmluZ0Zvcm1hdHRlctoIQ1JJVElDQUzaBURFQlVH2gVFUlJPUtoFRkFUQUzaC0ZpbGVIYW5kbGVy2gZGaWx0ZXJyAwAAANoHSGFuZGxlctoESU5GT9oJTG9nUmVjb3Jk2gZMb2dnZXLaDUxvZ2dlckFkYXB0ZXLaBk5PVFNFVNoLTnVsbEhhbmRsZXLaDVN0cmVhbUhhbmRsZXLaBFdBUk7aB1dBUk5JTkfaDGFkZExldmVsTmFtZdoLYmFzaWNDb25maWfaD2NhcHR1cmVXYXJuaW5nc9oIY3JpdGljYWzaBWRlYnVn2gdkaXNhYmxl2gVlcnJvctoJZXhjZXB0aW9u2gVmYXRhbNoMZ2V0TGV2ZWxOYW1l2glnZXRMb2dnZXLaDmdldExvZ2dlckNsYXNz2gRpbmZv2gNsb2faDW1ha2VMb2dSZWNvcmTaDnNldExvZ2dlckNsYXNz2ghzaHV0ZG93btoEd2FybtoHd2FybmluZ9oTZ2V0TG9nUmVjb3JkRmFjdG9yedoTc2V0TG9nUmVjb3JkRmFjdG9yedoKbGFzdFJlc29ydNoPcmFpc2VFeGNlcHRpb25zeiZWaW5heSBTYWppcCA8dmluYXlfc2FqaXBAcmVkLWRvdmUuY29tPloKcHJvZHVjdGlvbnoHMC41LjEuMnoQMDcgRmVicnVhcnkgMjAxMFTpMgAAAOkoAAAA6R4AAADpFAAAAOkKAAAAKQhyBgAAAHIJAAAAcggAAAByFAAAAHIVAAAAcg0AAAByBwAAAHIRAAAAYwEAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHM0AAAAdACgAXwAoQF9AXwBZAFrCXIWfAFTAHQCoAF8AKEBfQF8AWQBawlyLHwBUwBkAnwAFgBTACkDYbQCAAAKICAgIFJldHVybiB0aGUgdGV4dHVhbCBvciBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIGxvZ2dpbmcgbGV2ZWwgJ2xldmVsJy4KCiAgICBJZiB0aGUgbGV2ZWwgaXMgb25lIG9mIHRoZSBwcmVkZWZpbmVkIGxldmVscyAoQ1JJVElDQUwsIEVSUk9SLCBXQVJOSU5HLAogICAgSU5GTywgREVCVUcpIHRoZW4geW91IGdldCB0aGUgY29ycmVzcG9uZGluZyBzdHJpbmcuIElmIHlvdSBoYXZlCiAgICBhc3NvY2lhdGVkIGxldmVscyB3aXRoIG5hbWVzIHVzaW5nIGFkZExldmVsTmFtZSB0aGVuIHRoZSBuYW1lIHlvdSBoYXZlCiAgICBhc3NvY2lhdGVkIHdpdGggJ2xldmVsJyBpcyByZXR1cm5lZC4KCiAgICBJZiBhIG51bWVyaWMgdmFsdWUgY29ycmVzcG9uZGluZyB0byBvbmUgb2YgdGhlIGRlZmluZWQgbGV2ZWxzIGlzIHBhc3NlZAogICAgaW4sIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcyByZXR1cm5lZC4KCiAgICBJZiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbGV2ZWwgaXMgcGFzc2VkIGluLCB0aGUgY29ycmVzcG9uZGluZwogICAgbnVtZXJpYyB2YWx1ZSBpcyByZXR1cm5lZC4KCiAgICBJZiBubyBtYXRjaGluZyBudW1lcmljIG9yIHN0cmluZyB2YWx1ZSBpcyBwYXNzZWQgaW4sIHRoZSBz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IGF0dHJpYnV0ZXMgLSBlLmcuIHRoZSBkZWZhdWx0IHZhbHVlIG1lbnRpb25lZAogICAgYWJvdmUgbWFrZXMgdXNlIG9mIHRoZSBmYWN0IHRoYXQgdGhlIHVzZXIncyBtZXNzYWdlIGFuZCBhcmd1bWVudHMgYXJlIHByZS0KICAgIGZvcm1hdHRlZCBpbnRvIGEgTG9nUmVjb3JkJ3MgbWVzc2FnZSBhdHRyaWJ1dGUuIEN1cnJlbnRseSwgdGhlIHVzZWZ1bAogICAgYXR0cmlidXRlcyBpbiBhIExvZ1JlY29yZCBhcmUgZGVzY3JpYmVkIGJ5OgoKICAgICUobmFtZSlzICAgICAgICAgICAgTmFtZSBvZiB0aGUgbG9nZ2VyIChsb2dnaW5nIGNoYW5uZWwpCiAgICAlKGxldmVsbm8pcyAgICAgICAgIE51bWVyaWMgbG9nZ2luZyBsZXZlbCBmb3IgdGhlIG1lc3NhZ2UgKERFQlVHLCBJTkZPLAogICAgICAgICAgICAgICAgICAgICAgICBXQVJOSU5HLCBFUlJPUiwgQ1JJVElDQUwpCiAgICAlKGxldmVsbmFtZSlzICAgICAgIFRleHQgbG9nZ2luZyBsZXZlbCBmb3IgdGhlIG1lc3NhZ2UgKCJERUJVRyIsICJJTkZPIiwKICAgICAgICAgICAgICAgICAgICAgICAgIldBUk5JTkciLCAiRVJST1IiLCAiQ1JJVElDQUwiKQogICAgJShwYXRobmFtZSlzICAgICAgICBGdWxsIHBhdGhuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSB3aGVyZSB0aGUgbG9nZ2luZwogICAgICAgICAgICAgICAgICAgICAgICBjYWxsIHdhcyBpc3N1ZWQgKGlmIGF2YWlsYWJsZSkKICAgICUoZmlsZW5hbWUpcyAgICAgICAgRmlsZW5hbWUgcG9ydGlvbiBvZiBwYXRobmFtZQogICAgJShtb2R1bGUpcyAgICAgICAgICBNb2R1bGUgKG5hbWUgcG9ydGlvbiBvZiBmaWxlbmFtZSkKICAgICUobGluZW5vKWQgICAgICAgICAgU291cmNlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBsb2dnaW5nIGNhbGwgd2FzIGlzc3VlZAogICAgICAgICAgICAg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AAYAAAAEAAAAQwAAAHNAAAAAfACgAHwBagGhAX0DfAJyHnQCoAN8AnwDoQJ9BG4edAKgA3wAagR8A6ECfQV8AGoFfAV8AWoGZgIWAH0EfARTACkBYSUEAAAKICAgICAgICBSZXR1cm4gdGhlIGNyZWF0aW9uIHRpbWUgb2YgdGhlIHNwZWNpZmllZCBMb2dSZWNvcmQgYXMgZm9ybWF0dGVkIHRleHQuCgogICAgICAgIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBmb3JtYXQoKSBieSBhIGZvcm1hdHRlciB3aGljaAogICAgICAgIHdhbnRzIHRvIG1ha2UgdXNlIG9mIGEgZm9ybWF0dGVkIHRpbWUuIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuCiAgICAgICAgaW4gZm9ybWF0dGVycyB0byBwcm92aWRlIGZvciBhbnkgc3BlY2lmaWMgcmVxdWlyZW1lbnQsIGJ1dCB0aGUKICAgICAgICBiYXNpYyBiZWhhdmlvdXIgaXMgYXMgZm9sbG93czogaWYgZGF0ZWZtdCAoYSBzdHJpbmcpIGlzIHNwZWNpZmllZCwKICAgICAgICBpdCBpcyB1c2VkIHdpdGggdGltZS5zdHJmdGltZSgpIHRvIGZvcm1hdCB0aGUgY3JlYXRpb24gdGltZSBvZiB0aGUKICAgICAgICByZWNvcmQuIE90aGVyd2lzZSwgYW4gSVNPODYwMS1saWtlIChvciBSRkMgMzMzOS1saWtlKSBmb3JtYXQgaXMgdXNlZC4KICAgICAgICBUaGUgcmVzdWx0aW5nIHN0cmluZyBpcyByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbiB1c2VzIGEgdXNlci1jb25maWd1cmFibGUKICAgICAgICBmdW5jdGlvbiB0byBjb252ZXJ0IHRoZSBjcmVhdGlvbiB0aW1lIHRvIGEgdHVwbGUuIEJ5IGRlZmF1bHQsCiAgICAgICAgdGltZS5sb2NhbHRpbWUoKSBpcyB1c2VkOyB0byBjaGFuZ2UgdGhpcyBmb3IgYSBwYXJ0aWN1bGFyIGZvcm1hdHRlcgogICAgICAgIGluc3RhbmNlLCBzZXQgdGhlICdjb252ZXJ0ZXInIGF0dHJpYnV0ZSB0byBhIGZ1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ZgIWAKEBAQB6HHQBagKgBGQHfAFqEnwBahNmAhYAoQEBAFcAbjQEAHQUawpy1gEAAQABAIIAWQBuIAQAdBVrCnL0AQABAAEAdAFqAqAEZAihAQEAWQBuAlgAVwBuFgQAdBZrCpABcg4BAAEAAQBZAG4CWABXADUAfgJ+A34EWABkAlMAKQlhRAIAAAogICAgICAgIEhhbmRsZSBlcnJvcnMgd2hpY2ggb2NjdXIgZHVyaW5nIGFuIGVtaXQoKSBjYWxsLgoKICAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGZyb20gaGFuZGxlcnMgd2hlbiBhbiBleGNlcHRpb24gaXMKICAgICAgICBlbmNvdW50ZXJlZCBkdXJpbmcgYW4gZW1pdCgpIGNhbGwuIElmIHJhaXNlRXhjZXB0aW9ucyBpcyBmYWxzZSwKICAgICAgICBleGNlcHRpb25zIGdldCBzaWxlbnRseSBpZ25vcmVkLiBUaGlzIGlzIHdoYXQgaXMgbW9zdGx5IHdhbnRlZAogICAgICAgIGZvciBhIGxvZ2dpbmcgc3lzdGVtIC0gbW9zdCB1c2VycyB3aWxsIG5vdCBjYXJlIGFib3V0IGVycm9ycyBpbgogICAgICAgIHRoZSBsb2dnaW5nIHN5c3RlbSwgdGhleSBhcmUgbW9yZSBpbnRlcmVzdGVkIGluIGFwcGxpY2F0aW9uIGVycm9ycy4KICAgICAgICBZb3UgY291bGQsIGhvd2V2ZXIsIHJlcGxhY2UgdGhpcyB3aXRoIGEgY3VzdG9tIGhhbmRsZXIgaWYgeW91IHdpc2guCiAgICAgICAgVGhlIHJlY29yZCB3aGljaCB3YXMgYmVpbmcgcHJvY2Vzc2VkIGlzIHBhc3NlZCBpbiB0byB0aGlzIG1ldGhvZC4KICAgICAgICB6Fi0tLSBMb2dnaW5nIGVycm9yIC0tLQpOegxDYWxsIHN0YWNrOgpyAQAAAHJXAAAAeh1Mb2dnZWQgZnJvbSBmaWxlICVzLCBsaW5lICVzCnoaTWVzc2FnZTogJXIKQXJndW1lbnRzOiAlcwp6d1VuYWJsZSB0byBwcmludCB0aGUgbWVzc2FnZSBhbmQgYXJndW1lbnRzIC0gcG9zc2libGUgZm9ybWF0dGluZyBlcnJvci4K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b3VyIGlzIHRvIGNyZWF0ZSBhIFN0cmVhbUhhbmRsZXIgd2hpY2ggd3JpdGVzIHRvCiAgICBzeXMuc3RkZXJyLCBzZXQgYSBmb3JtYXR0ZXIgdXNpbmcgdGhlIEJBU0lDX0ZPUk1BVCBmb3JtYXQgc3RyaW5nLCBhbmQKICAgIGFkZCB0aGUgaGFuZGxlciB0byB0aGUgcm9vdCBsb2dnZXIuCgogICAgQSBudW1iZXIgb2Ygb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgbWF5IGJlIHNwZWNpZmllZCwgd2hpY2ggY2FuIGFsdGVyCiAgICB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCgogICAgZmlsZW5hbWUgIFNwZWNpZmllcyB0aGF0IGEgRmlsZUhhbmRsZXIgYmUgY3JlYXRlZCwgdXNpbmcgdGhlIHNwZWNpZmllZAogICAgICAgICAgICAgIGZpbGVuYW1lLCByYXRoZXIgdGhhbiBhIFN0cmVhbUhhbmRsZXIuCiAgICBmaWxlbW9kZSAgU3BlY2lmaWVzIHRoZSBtb2RlIHRvIG9wZW4gdGhlIGZpbGUsIGlmIGZpbGVuYW1lIGlzIHNwZWNpZmllZAogICAgICAgICAgICAgIChpZiBmaWxlbW9kZSBpcyB1bnNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gJ2EnKS4KICAgIGZvcm1hdCAgICBVc2UgdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nIGZvciB0aGUgaGFuZGxlci4KICAgIGRhdGVmbXQgICBVc2UgdGhlIHNwZWNpZmllZCBkYXRlL3RpbWUgZm9ybWF0LgogICAgc3R5bGUgICAgIElmIGEgZm9ybWF0IHN0cmluZyBpcyBzcGVjaWZpZWQsIHVzZSB0aGlzIHRvIHNwZWNpZnkgdGhlCiAgICAgICAgICAgICAgdHlwZSBvZiBmb3JtYXQgc3RyaW5nIChwb3NzaWJsZSB2YWx1ZXMgJyUnLCAneycsICckJywgZm9yCiAgICAgICAgICAgICAgJS1mb3JtYXR0aW5nLCA6bWV0aDpgc3RyLmZvcm1hdGAgYW5kIDpjbGFzczpgc3RyaW5nLlRlbXBsYXRlYAogICAgICAgICAgICAgIC0gZGVmYXVsdHMgdG8gJyUnKS4KICAgIGxldmVsICAgICBTZXQgdGhlIHJvb3QgbG9nZ2VyIGxldmVsIHRvIHRoZSBzcGVjaWZpZWQgbGV2ZWwuCiAgICBzdHJlYW0gICAgVXNlIHRoZSBzcGVjaWZpZWQgc3RyZWFtIHRvIGluaXRpYWxpemUgdGhlIFN0cmVhbUhhbmRsZXIuIE5vdGUKICAgICAgICAgICAgICB0aGF0IHRoaXMgYXJndW1lbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggJ2ZpbGVuYW1lJyAtIGlmIGJvdGgKICAgICAgICAgICAgICBhcmUgcHJlc2VudCwgJ3N0cmVhbScgaXMgaWdub3JlZC4KICAgIGhhbmRsZXJzICBJZiBzcGVjaWZpZWQsIHRoaXMgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIGFscmVhZHkgY3JlYXRlZAogICAgICAgICAgICAgIGhhbmRsZXJzLCB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSByb290IGhhbmRsZXIuIEFueSBoYW5kbGVyCiAgICAgICAgICAgICAgaW4gdGhlIGxpc3Qgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIGZvcm1hdHRlciBhc3NpZ25lZCB3aWxsIGJlCiAgICAgICAgICAgICAgYXNzaWduZWQgdGhlIGZvcm1hdHRlciBjcmVhdGVkIGluIHRoaXMgZnVuY3Rpb24uCiAgICBmb3JjZSAgICAgSWYgdGhpcyBrZXl3b3JkICBpcyBzcGVjaWZpZWQgYXMgdHJ1ZSwgYW55IGV4aXN0aW5nIGhhbmRsZXJzCiAgICAgICAgICAgICAgYXR0YWNoZWQgdG8gdGhlIHJvb3QgbG9nZ2VyIGFyZSByZW1vdmVkIGFuZCBjbG9zZWQsIGJlZm9yZQogICAgICAgICAgICAgIGNhcnJ5aW5nIG91dCB0aGUgY29uZmlndXJhdGlvbiBhcyBzcGVjaWZpZWQgYnkgdGhlIG90aGVyCiAgICAgICAgICAgICAgYXJndW1lbnRzLgogICAgTm90ZSB0aGF0IHlvdSBjb3VsZCBzcGVjaWZ5IGEgc3RyZWFtIGNyZWF0ZWQgdXNpbmcgb3BlbihmaWxlbmFtZSwgbW9kZSkKICAgIHJhdGhlciB0aGFuIHBhc3NpbmcgdGhlIGZpbGVuYW1lIGFuZCBtb2RlIGluLiBIb3dldmVyLCBpdCBzaG91bGQgYmUKICAgIHJlbWVtYmVyZWQgdGhhdCBTdHJlYW1IYW5kbGVyIGRvZXMgbm90IGNsb3NlIGl0cyBzdHJlYW0gKHNpbmNlIGl0IG1heSBiZQogICAgdXNpbmcgc3lzLnN0ZG91dCBvciBzeXMuc3RkZXJyKSwgd2hlcmVhcyBGaWxlSGFuZGxlciBjbG9zZXMgaXRzIHN0cmVhbQogICAgd2hlbiB0aGUgaGFuZGxlciBpcyBjbG9zZWQuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjgKICAgICAgIEFkZGVkIHRoZSBgYGZvcmNlYGAgcGFyYW1ldGVyLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBBZGRlZCB0aGUgYGBzdHlsZWBgIHBhcmFtZXRlci4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgQWRkZWQgdGhlIGBgaGFuZGxlcnNgYCBwYXJhbWV0ZXIuIEEgYGBWYWx1ZUVycm9yYGAgaXMgbm93IHRocm93biBmb3IKICAgICAgIGluY29tcGF0aWJsZSBhcmd1bWVudHMgKGUuZy4gYGBoYW5kbGVyc2BgIHNwZWNpZmllZCB0b2dldGhlciB3aXRoCiAgICAgICBgYGZpbGVuYW1lYGAvYGBmaWxlbW9kZWBgLCBvciBgYGZpbGVuYW1lYGAvYGBmaWxlbW9kZWBgIHNwZWNpZmllZAogICAgICAgdG9nZXRoZXIgd2l0aCBgYHN0cmVhbWBgLCBvciBgYGhhbmRsZXJzYGAgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGgKICAgICAgIGBgc3RyZWFtYGAuCiAgICDaBWZvcmNlRk5yAQAAAHLzAAAAchQBAABybgAAAHo4J3N0cmVhbScgYW5kICdmaWxlbmFtZScgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXJ6RydzdHJlYW0nIG9yICdmaWxlbmFtZScgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCAnaGFuZGxlcnMn2ghmaWxlbW9kZXIaAQAAcsYAAAByxwAAAHK+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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 9
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
config.cpython-38.opt-1.pyc
22.64 KB
lrw-r--r--
2023-10-17 18:13:03
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
config.cpython-38.opt-2.pyc
18.62 KB
lrw-r--r--
2023-10-17 18:13:05
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
config.cpython-38.pyc
22.68 KB
lrw-r--r--
2023-10-17 18:13:00
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-38.opt-1.pyc
42.19 KB
lrw-r--r--
2023-10-17 18:13:00
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-38.opt-2.pyc
23.92 KB
lrw-r--r--
2023-10-17 18:13:05
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-38.pyc
42.19 KB
lrw-r--r--
2023-10-17 18:13:00
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.opt-1.pyc
63.72 KB
lrw-r--r--
2023-10-17 18:13:03
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.opt-2.pyc
35.74 KB
lrw-r--r--
2023-10-17 18:13:05
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.pyc
63.75 KB
lrw-r--r--
2023-10-17 18:13:00
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).