REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 63.76 KB
Close
//opt/alt/python38/lib64/python3.8/logging/__pycache__/__init__.cpython-38.pyc
Text
Base64
VQ0NCgAAAAATadtmhDABAOMAAAAAAAAAAAAAAAAAAAAAKgAAAEAAAABzNgQAAGQAWgBkAWQCbAFaAWQBZAJsAloCZAFkAmwDWgNkAWQCbARaBGQBZAJsBVoFZAFkAmwGWgZkAWQCbAdaB2QBZAJsCFoIZAFkAmwJWgpkAWQDbAttDFoMAQBkAWQEbAttDVoOAQBkBWQGZAdkCGQJZApkC2QMZA1kDmQPZBBkEWQSZBNkFGQVZBZkF2QYZBlkGmQbZBxkHWQeZB9kIGQhZCJkI2QkZCVkJmQnZChkKWQqZCtkLGQtZC5nKloPZAFkAmwQWhBkL1oRZDBaEmQxWhNkMloUZQOgA6EAWhVkM1oWZDNaF2QzWhhkM1oZZDRaGmUaWhtkNVocZDZaHWUdWh5kN1ofZDhaIGQBWiFlGmQHZRxkCWUdZBdlH2QPZSBkCGUhZBNpBloiZRplG2UcZR1lHWUfZSBlIWQ5nAhaI2Q6ZCGEAFokZDtkGIQAWiVlJmUBZDyDApABcmRkPWQ+hABaJ24IZD9kQIQAWidlAmoooCllJWoqaiuhAVosZEFkQoQAWi1lEKAuoQBaL2RDZESEAFowZEVkRoQAWjFlJmUCZEeDApABc7JkSGRJhABaMm4oZQigM6EAWjRkSmRJhABaMmRLZEyEAFo1ZQJqNmUwZTVlMWRNjQMBAEcAZE5kEIQAZBBlN4MDWjhlOGE5ZE9kLIQAWjpkUGQrhABaO2RRZCaEAFo8ZQ6DAFo9Ww5HAGRSZFOEAGRTZTeDA1o+RwBkVGRVhABkVWU+gwNaP0cAZFZkV4QAZFdlPoMDWkBkWFpBZT5lQWYCZT9kWWYCZUBkWmYCZFucA1pCRwBkXGQNhABkDWU3gwNaDWUNgwBaQ0cAZF1kBoQAZAZlN4MDWkRHAGReZAyEAGQMZTeDA1pFRwBkX2RghABkYGU3gwNaRmUIoEehAFpIZwBaSWRhZGKEAFpKZGNkZIQAWktHAGRlZA6EAGQOZUaDA1pMRwBkZmQVhABkFWVMgwNaTUcAZGdkC4QAZAtlTYMDWk5HAGRoZGmEAGRpZU2DA1pPZU9lHYMBWlBlUFpRRwBkamRrhABka2U3gwNaUmRsZCeEAFpTZG1kI4QAWlRHAGRuZG+EAGRvZTeDA1pVRwBkcGQRhABkEWVGgwNaVkcAZHFkcoQAZHJlVoMDWldlVmFYRwBkc2QShABkEmU3gwNaWWVXZR2DAVpaZVplVl9aZVVlVmpagwFlVl9bZHRkGYQAWlxkhWR1ZCKEAVpdZHZkG4QAWl5lXlpfZHdkHoQAWmBkM2R4nAFkeWQfhAJaYWR6ZCqEAFpiZHtkKYQAWmNkfGQkhABaZGR9ZByEAFplZH5kJYQAWmZlGmYBZH9kHYQBWmdlSWYBZIBkKIQBWmhkAWQCbGlaaWVpoGplaKEBAQBHAGSBZBSEAGQUZUyDA1prZAJhbGSGZIJkg4QBWm1khGQahABabmQCUwAph3rCCkxvZ2dpbmcgcGFja2FnZSBmb3IgUHl0aG9uLiBCYXNlZCBvbiBQRVAgMjgyIGFuZCBjb21tZW50cyB0aGVyZXRvIGluCmNvbXAubGFuZy5weXRob24uCgpDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KClRvIHVzZSwgc2ltcGx5ICdpbXBvcnQgbG9nZ2luZycgYW5kIGxvZyBhd2F5IQrpAAAAAE4pAdoIVGVtcGxhdGUpAdoJRm9ybWF0dGVy2gxCQVNJQ19GT1JNQVTaEkJ1ZmZlcmluZ0Zvcm1hdHRlctoIQ1JJVElDQUzaBURFQlVH2gVFUlJPUtoFRkFUQUzaC0ZpbGVIYW5kbGVy2gZGaWx0ZXJyAwAAANoHSGFuZGxlctoESU5GT9oJTG9nUmVjb3Jk2gZMb2dnZXLaDUxvZ2dlckFkYXB0ZXLaBk5PVFNFVNoLTnVsbEhhbmRsZXLaDVN0cmVhbUhhbmRsZXLaBFdBUk7aB1dBUk5JTkfaDGFkZExldmVsTmFtZdoLYmFzaWNDb25maWfaD2NhcHR1cmVXYXJuaW5nc9oIY3JpdGljYWzaBWRlYnVn2gdkaXNhYmxl2gVlcnJvctoJZXhjZXB0aW9u2gVmYXRhbNoMZ2V0TGV2ZWxOYW1l2glnZXRMb2dnZXLaDmdldExvZ2dlckNsYXNz2gRpbmZv2gNsb2faDW1ha2VMb2dSZWNvcmTaDnNldExvZ2dlckNsYXNz2ghzaHV0ZG93btoEd2FybtoHd2FybmluZ9oTZ2V0TG9nUmVjb3JkRmFjdG9yedoTc2V0TG9nUmVjb3JkRmFjdG9yedoKbGFzdFJlc29ydNoPcmFpc2VFeGNlcHRpb25zeiZWaW5heSBTYWppcCA8dmluYXlfc2FqaXBAcmVkLWRvdmUuY29tPloKcHJvZHVjdGlvbnoHMC41LjEuMnoQMDcgRmVicnVhcnkgMjAxMFTpMgAAAOkoAAAA6R4AAADpFAAAAOkKAAAAKQhyBgAAAHIJAAAAcggAAAByFAAAAHIVAAAAcg0AAAByBwAAAHIRAAAAYwEAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHM0AAAAdACgAXwAoQF9AXwBZAFrCXIWfAFTAHQCoAF8AKEBfQF8AWQBawlyLHwBUwBkAnwAFgBTACkDYbQCAAAKICAgIFJldHVybiB0aGUgdGV4dHVhbCBvciBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIGxvZ2dpbmcgbGV2ZWwgJ2xldmVsJy4KCiAgICBJZiB0aGUgbGV2ZWwgaXMgb25lIG9mIHRoZSBwcmVkZWZpbmVkIGxldmVscyAoQ1JJVElDQUwsIEVSUk9SLCBXQVJOSU5HLAogICAgSU5GTywgREVCVUcpIHRoZW4geW91IGdldCB0aGUgY29ycmVzcG9uZGluZyBzdHJpbmcuIElmIHlvdSBoYXZlCiAgICBhc3NvY2lhdGVkIGxldmVscyB3aXRoIG5hbWVzIHVzaW5nIGFkZExldmVsTmFtZSB0aGVuIHRoZSBuYW1lIHlvdSBoYXZlCiAgICBhc3NvY2lhdGVkIHdpdGggJ2xldmVsJyBpcyByZXR1cm5lZC4KCiAgICBJZiBhIG51bWVyaWMgdmFsdWUgY29ycmVzcG9uZGluZyB0byBvbmUgb2YgdGhlIGRlZmluZWQgbGV2ZWxzIGlzIHBhc3NlZAogICAgaW4sIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcyByZXR1cm5lZC4KCiAgICBJZiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbGV2ZWwgaXMgcGFzc2VkIGluLCB0aGUgY29ycmVzcG9uZGluZwogICAgbnVtZXJpYyB2YWx1ZSBpcyByZXR1cm5lZC4KCiAgICBJZiBubyBtYXRjaGluZyBudW1lcmljIG9yIHN0cmluZyB2YWx1ZSBpcyBwYXNzZWQgaW4sIHRoZSBz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dGhlIExvZ1JlY29yZCBhdHRyaWJ1dGVzIC0gZS5nLiB0aGUgZGVmYXVsdCB2YWx1ZSBtZW50aW9uZWQKICAgIGFib3ZlIG1ha2VzIHVzZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSB1c2VyJ3MgbWVzc2FnZSBhbmQgYXJndW1lbnRzIGFyZSBwcmUtCiAgICBmb3JtYXR0ZWQgaW50byBhIExvZ1JlY29yZCdzIG1lc3NhZ2UgYXR0cmlidXRlLiBDdXJyZW50bHksIHRoZSB1c2VmdWwKICAgIGF0dHJpYnV0ZXMgaW4gYSBMb2dSZWNvcmQgYXJlIGRlc2NyaWJlZCBieToKCiAgICAlKG5hbWUpcyAgICAgICAgICAgIE5hbWUgb2YgdGhlIGxvZ2dlciAobG9nZ2luZyBjaGFubmVsKQogICAgJShsZXZlbG5vKXMgICAgICAgICBOdW1lcmljIGxvZ2dpbmcgbGV2ZWwgZm9yIHRoZSBtZXNzYWdlIChERUJVRywgSU5GTywKICAgICAgICAgICAgICAgICAgICAgICAgV0FSTklORywgRVJST1IsIENSSVRJQ0FMKQogICAgJShsZXZlbG5hbWUpcyAgICAgICBUZXh0IGxvZ2dpbmcgbGV2ZWwgZm9yIHRoZSBtZXNzYWdlICgiREVCVUciLCAiSU5GTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJXQVJOSU5HIiwgIkVSUk9SIiwgIkNSSVRJQ0FMIikKICAgICUocGF0aG5hbWUpcyAgICAgICAgRnVsbCBwYXRobmFtZSBvZiB0aGUgc291cmNlIGZpbGUgd2hlcmUgdGhlIGxvZ2dpbmcKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbCB3YXMgaXNzdWVkIChpZiBhdmFpbGFibGUpCiAgICAlKGZpbGVuYW1lKXMgICAgICAgIEZpbGVuYW1lIHBvcnRpb24gb2YgcGF0aG5hbWUKICAgICUobW9kdWxlKXMgICAgICAgICAgTW9kdWxlIChuYW1lIHBvcnRpb24gb2YgZmlsZW5hbWUpCiAgICAlKGxpbmVubylkICAgICAgICAgIFNvdXJjZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgbG9nZ2luZyBjYWxsIHdhcyBpc3N1ZWQK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ZGMDAAAAAAAAAAAAAAAGAAAABAAAAEMAAABzQAAAAHwAoAB8AWoBoQF9A3wCch50AqADfAJ8A6ECfQRuHnQCoAN8AGoEfAOhAn0FfABqBXwFfAFqBmYCFgB9BHwEUwApAWElBAAACiAgICAgICAgUmV0dXJuIHRoZSBjcmVhdGlvbiB0aW1lIG9mIHRoZSBzcGVjaWZpZWQgTG9nUmVjb3JkIGFzIGZvcm1hdHRlZCB0ZXh0LgoKICAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGZyb20gZm9ybWF0KCkgYnkgYSBmb3JtYXR0ZXIgd2hpY2gKICAgICAgICB3YW50cyB0byBtYWtlIHVzZSBvZiBhIGZvcm1hdHRlZCB0aW1lLiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbgogICAgICAgIGluIGZvcm1hdHRlcnMgdG8gcHJvdmlkZSBmb3IgYW55IHNwZWNpZmljIHJlcXVpcmVtZW50LCBidXQgdGhlCiAgICAgICAgYmFzaWMgYmVoYXZpb3VyIGlzIGFzIGZvbGxvd3M6IGlmIGRhdGVmbXQgKGEgc3RyaW5nKSBpcyBzcGVjaWZpZWQsCiAgICAgICAgaXQgaXMgdXNlZCB3aXRoIHRpbWUuc3RyZnRpbWUoKSB0byBmb3JtYXQgdGhlIGNyZWF0aW9uIHRpbWUgb2YgdGhlCiAgICAgICAgcmVjb3JkLiBPdGhlcndpc2UsIGFuIElTTzg2MDEtbGlrZSAob3IgUkZDIDMzMzktbGlrZSkgZm9ybWF0IGlzIHVzZWQuCiAgICAgICAgVGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gdXNlcyBhIHVzZXItY29uZmlndXJhYmxlCiAgICAgICAgZnVuY3Rpb24gdG8gY29udmVydCB0aGUgY3JlYXRpb24gdGltZSB0byBhIHR1cGxlLiBCeSBkZWZhdWx0LAogICAgICAgIHRpbWUubG9jYWx0aW1lKCkgaXMgdXNlZDsgdG8gY2hhbmdlIHRoaXMgZm9yIGEgcGFydGljdWxhciBmb3JtYXR0ZXIKICAgICAgICBpbnN0YW5jZSwgc2V0IHRoZSAnY29udmVydGVyJyBhdHRy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ZWZhdWx0IGJlaGF2aW91ciBpcyB0byBjcmVhdGUgYSBTdHJlYW1IYW5kbGVyIHdoaWNoIHdyaXRlcyB0bwogICAgc3lzLnN0ZGVyciwgc2V0IGEgZm9ybWF0dGVyIHVzaW5nIHRoZSBCQVNJQ19GT1JNQVQgZm9ybWF0IHN0cmluZywgYW5kCiAgICBhZGQgdGhlIGhhbmRsZXIgdG8gdGhlIHJvb3QgbG9nZ2VyLgoKICAgIEEgbnVtYmVyIG9mIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIG1heSBiZSBzcGVjaWZpZWQsIHdoaWNoIGNhbiBhbHRlcgogICAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgoKICAgIGZpbGVuYW1lICBTcGVjaWZpZXMgdGhhdCBhIEZpbGVIYW5kbGVyIGJlIGNyZWF0ZWQsIHVzaW5nIHRoZSBzcGVjaWZpZWQKICAgICAgICAgICAgICBmaWxlbmFtZSwgcmF0aGVyIHRoYW4gYSBTdHJlYW1IYW5kbGVyLgogICAgZmlsZW1vZGUgIFNwZWNpZmllcyB0aGUgbW9kZSB0byBvcGVuIHRoZSBmaWxlLCBpZiBmaWxlbmFtZSBpcyBzcGVjaWZpZWQKICAgICAgICAgICAgICAoaWYgZmlsZW1vZGUgaXMgdW5zcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvICdhJykuCiAgICBmb3JtYXQgICAgVXNlIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZyBmb3IgdGhlIGhhbmRsZXIuCiAgICBkYXRlZm10ICAgVXNlIHRoZSBzcGVjaWZpZWQgZGF0ZS90aW1lIGZvcm1hdC4KICAgIHN0eWxlICAgICBJZiBhIGZvcm1hdCBzdHJpbmcgaXMgc3BlY2lmaWVkLCB1c2UgdGhpcyB0byBzcGVjaWZ5IHRoZQogICAgICAgICAgICAgIHR5cGUgb2YgZm9ybWF0IHN0cmluZyAocG9zc2libGUgdmFsdWVzICclJywgJ3snLCAnJCcsIGZvcgogICAgICAgICAgICAgICUtZm9ybWF0dGluZywgOm1ldGg6YHN0ci5mb3JtYXRgIGFuZCA6Y2xhc3M6YHN0cmluZy5UZW1wbGF0ZWAKICAgICAgICAgICAgICAtIGRlZmF1bHRzIHRvICclJykuCiAgICBsZXZlbCAgICAgU2V0IHRoZSByb290IGxvZ2dlciBsZXZlbCB0byB0aGUgc3BlY2lmaWVkIGxldmVsLgogICAgc3RyZWFtICAgIFVzZSB0aGUgc3BlY2lmaWVkIHN0cmVhbSB0byBpbml0aWFsaXplIHRoZSBTdHJlYW1IYW5kbGVyLiBOb3RlCiAgICAgICAgICAgICAgdGhhdCB0aGlzIGFyZ3VtZW50IGlzIGluY29tcGF0aWJsZSB3aXRoICdmaWxlbmFtZScgLSBpZiBib3RoCiAgICAgICAgICAgICAgYXJlIHByZXNlbnQsICdzdHJlYW0nIGlzIGlnbm9yZWQuCiAgICBoYW5kbGVycyAgSWYgc3BlY2lmaWVkLCB0aGlzIHNob3VsZCBiZSBhbiBpdGVyYWJsZSBvZiBhbHJlYWR5IGNyZWF0ZWQKICAgICAgICAgICAgICBoYW5kbGVycywgd2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgcm9vdCBoYW5kbGVyLiBBbnkgaGFuZGxlcgogICAgICAgICAgICAgIGluIHRoZSBsaXN0IHdoaWNoIGRvZXMgbm90IGhhdmUgYSBmb3JtYXR0ZXIgYXNzaWduZWQgd2lsbCBiZQogICAgICAgICAgICAgIGFzc2lnbmVkIHRoZSBmb3JtYXR0ZXIgY3JlYXRlZCBpbiB0aGlzIGZ1bmN0aW9uLgogICAgZm9yY2UgICAgIElmIHRoaXMga2V5d29yZCAgaXMgc3BlY2lmaWVkIGFzIHRydWUsIGFueSBleGlzdGluZyBoYW5kbGVycwogICAgICAgICAgICAgIGF0dGFjaGVkIHRvIHRoZSByb290IGxvZ2dlciBhcmUgcmVtb3ZlZCBhbmQgY2xvc2VkLCBiZWZvcmUKICAgICAgICAgICAgICBjYXJyeWluZyBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gYXMgc3BlY2lmaWVkIGJ5IHRoZSBvdGhlcgogICAgICAgICAgICAgIGFyZ3VtZW50cy4KICAgIE5vdGUgdGhhdCB5b3UgY291bGQgc3BlY2lmeSBhIHN0cmVhbSBjcmVhdGVkIHVzaW5nIG9wZW4oZmlsZW5hbWUsIG1vZGUpCiAgICByYXRoZXIgdGhhbiBwYXNzaW5nIHRoZSBmaWxlbmFtZSBhbmQgbW9kZSBpbi4gSG93ZXZlciwgaXQgc2hvdWxkIGJlCiAgICByZW1lbWJlcmVkIHRoYXQgU3RyZWFtSGFuZGxlciBkb2VzIG5vdCBjbG9zZSBpdHMgc3RyZWFtIChzaW5jZSBpdCBtYXkgYmUKICAgIHVzaW5nIHN5cy5zdGRvdXQgb3Igc3lzLnN0ZGVyciksIHdoZXJlYXMgRmlsZUhhbmRsZXIgY2xvc2VzIGl0cyBzdHJlYW0KICAgIHdoZW4gdGhlIGhhbmRsZXIgaXMgY2xvc2VkLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy44CiAgICAgICBBZGRlZCB0aGUgYGBmb3JjZWBgIHBhcmFtZXRlci4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgQWRkZWQgdGhlIGBgc3R5bGVgYCBwYXJhbWV0ZXIuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIEFkZGVkIHRoZSBgYGhhbmRsZXJzYGAgcGFyYW1ldGVyLiBBIGBgVmFsdWVFcnJvcmBgIGlzIG5vdyB0aHJvd24gZm9yCiAgICAgICBpbmNvbXBhdGlibGUgYXJndW1lbnRzIChlLmcuIGBgaGFuZGxlcnNgYCBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aAogICAgICAgYGBmaWxlbmFtZWBgL2BgZmlsZW1vZGVgYCwgb3IgYGBmaWxlbmFtZWBgL2BgZmlsZW1vZGVgYCBzcGVjaWZpZWQKICAgICAgIHRvZ2V0aGVyIHdpdGggYGBzdHJlYW1gYCwgb3IgYGBoYW5kbGVyc2BgIHNwZWNpZmllZCB0b2dldGhlciB3aXRoCiAgICAgICBgYHN0cmVhbWBgLgogICAg2gVmb3JjZUZOcgEAAABy8wAAAHIUAQAAcm4AAAB6OCdzdHJlYW0nIGFuZCAnZmlsZW5hbWUnIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyekcnc3RyZWFtJyBvciAnZmlsZW5hbWUnIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggJ2hhbmRsZXJzJ9oIZmlsZW1vZGVyGgEA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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.65 KB
lrw-r--r--
2024-09-23 11:26:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
config.cpython-38.opt-2.pyc
18.64 KB
lrw-r--r--
2024-09-23 11:26:27
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
config.cpython-38.pyc
22.69 KB
lrw-r--r--
2024-09-23 11:26:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-38.opt-1.pyc
42.20 KB
lrw-r--r--
2024-09-23 11:26:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-38.opt-2.pyc
23.93 KB
lrw-r--r--
2024-09-23 11:26:27
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-38.pyc
42.20 KB
lrw-r--r--
2024-09-23 11:26:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.opt-1.pyc
63.73 KB
lrw-r--r--
2024-09-23 11:26:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.opt-2.pyc
35.75 KB
lrw-r--r--
2024-09-23 11:26:27
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.pyc
63.76 KB
lrw-r--r--
2024-09-23 11:26:25
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).