spluspy 2.2.0__tar.gz → 2.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {spluspy-2.2.0 → spluspy-2.2.1}/PKG-INFO +3 -2
- {spluspy-2.2.0 → spluspy-2.2.1}/pyproject.toml +2 -2
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/__init__.py +2 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/__version__.py +1 -1
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/crypto/libssl.py +11 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/version.py +1 -1
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/client/client.py +9 -1
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/utils/logger.py +115 -1
- {spluspy-2.2.0 → spluspy-2.2.1}/.gitignore +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/CHANGELOG.md +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/CONTRIBUTING.md +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/Dockerfile +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/LICENSE +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/MANIFEST.in +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/README.md +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/README.rst +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/01_hello_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/02_echo_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/03_command_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/04_private_only.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/05_group_only.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/06_regex_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/07_user_filter.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/08_combined_filters.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/09_inline_keyboard.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/10_reply_keyboard.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/11_message_actions.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/12_media_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/13_fsm_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/14_plugin_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/15_middleware_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/16_scheduler_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/17_conversation.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/18_chat_management.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/19_event_types.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/20_sync_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/21_album_handler.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/22_download_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/23_url_button.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/24_string_session.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/25_error_handling.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/25_working_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/26_message_entities.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/27_search_messages.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/28_poll_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/29_dice_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/30_cache_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/31_reaction_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/32_mark_read_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/33_context_manager.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/34_user_info.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/35_chat_info.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/36_forward_copy.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/37_admin_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/38_media_filters.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/39_status_bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/40_delete_detection.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/41_read_detection.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/42_raw_events.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/43_poll_handler.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/44_reaction_handler.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/45_typing_handler.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/46_get_messages.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/47_iter_messages.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/48_get_members.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/49_resolve_username.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/examples/50_invoke.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/setup.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/_updates/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/_updates/entitycache.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/_updates/messagebox.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/_updates/session.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/account.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/auth.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/bots.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/buttons.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/chats.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/dialogs.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/downloads.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/messageparse.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/messages.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/soroushclient.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/telegrambaseclient.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/updates.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/uploads.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/client/users.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/crypto/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/crypto/aes.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/crypto/aesctr.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/crypto/authkey.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/crypto/cdndecrypter.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/crypto/factorization.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/crypto/rsa.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/custom.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/errors/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/errors/common.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/errors/rpcbaseerrors.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/errors/rpcerrorlist.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/events/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/events/album.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/events/callbackquery.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/events/chataction.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/events/common.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/events/inlinequery.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/events/messagedeleted.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/events/messageedited.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/events/messageread.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/events/newmessage.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/events/raw.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/events/userupdate.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/extensions/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/extensions/binaryreader.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/extensions/html.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/extensions/markdown.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/extensions/messagepacker.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/functions.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/helpers.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/hints.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/authenticator.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/connection/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/connection/connection.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/connection/http.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/connection/tcpabridged.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/connection/tcpfull.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/connection/tcpintermediate.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/connection/tcpmtproxy.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/connection/tcpobfuscated.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/connection/websocket.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/mtprotoplainsender.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/mtprotosender.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/mtprotostate.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/network/requeststate.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/password.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/requestiter.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/sessions/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/sessions/abstract.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/sessions/memory.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/sessions/sqlite.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/sessions/string.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/sync.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/alltlobjects.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/core/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/core/gzippacked.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/core/messagecontainer.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/core/rpcresult.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/core/tlmessage.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/adminlogevent.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/button.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/chatgetter.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/conversation.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/dialog.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/draft.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/file.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/forward.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/inlinebuilder.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/inlineresult.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/inlineresults.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/inputsizedfile.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/message.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/messagebutton.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/participantpermissions.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/qrlogin.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/sendergetter.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/custom/types.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/account.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/auth.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/bots.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/channels.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/chatlists.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/conference.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/contacts.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/folders.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/help.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/langpack.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/messages.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/payments.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/phone.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/photos.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/premium.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/stats.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/stories.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/thirdParty.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/updates.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/upload.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/functions/users.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/patched/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/tlobject.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/account.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/auth.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/bots.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/channels.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/chatlists.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/conference.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/contacts.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/help.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/messages.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/payments.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/phone.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/photos.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/premium.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/stats.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/stickers.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/storage.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/stories.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/thirdParty.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/update.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/updates.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/upload.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/tl/types/users.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/types.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/_engine/utils.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/admin.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/afk.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/cli.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/client/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/client/chat_mixin.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/client/conversation.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/client/media_mixin.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/compat.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/config.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/errors/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/errors/exceptions.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/events/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/events/album.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/events/base.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/events/callback.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/events/chat_action.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/events/edited.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/events/inline.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/events/message.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/events/message_deleted.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/events/message_read.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/events/user_update.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/filters/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/filters/filters.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/fsm/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/fsm/state.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/middleware/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/middleware/base.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/middleware/rate_limit.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/mirror.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/models/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/models/bot.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/models/chat.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/models/enums.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/models/media.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/models/message.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/models/objects.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/models/user.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/network/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/network/client.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/network/connection.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/network/http_client.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/network/mtproto.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/network/protocols.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/network/spluspy_adapter.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/network/transport.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/plugins/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/plugins/loader.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/py.typed +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/scheduler/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/scheduler/scheduler.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/session/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/session/base.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/session/memory.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/session/sqlite.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/session/string.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/storage/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/storage/base.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/storage/entity_cache.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/storage/memory.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/storage/postgres.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/storage/redis.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/storage/sqlite.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/sync/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/sync/client.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/utils/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/utils/batch.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/utils/cache.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/utils/chat_lock.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/utils/file_transfer.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/utils/helpers.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/utils/rate_limiter.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/utils/resolver.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/spluspy/utils/version_check.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/__init__.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/test_client.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/test_filters.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/test_fsm.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/test_fsm_enhanced.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/test_middleware.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/test_rate_limiter.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/test_resolver.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/test_scheduler.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/test_session.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/test_storage.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/test_types.py +0 -0
- {spluspy-2.2.0 → spluspy-2.2.1}/tests/test_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: spluspy
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.1
|
|
4
4
|
Summary: A modern async Python library for interacting with Soroush Plus
|
|
5
5
|
Project-URL: Homepage, https://github.com/Itskillmaster/spluspy
|
|
6
6
|
Project-URL: Documentation, https://github.com/Itskillmaster/spluspy#readme
|
|
@@ -25,12 +25,12 @@ Classifier: Typing :: Typed
|
|
|
25
25
|
Requires-Python: >=3.10
|
|
26
26
|
Requires-Dist: aiohttp>=3.9.0
|
|
27
27
|
Requires-Dist: aiosqlite>=0.19.0
|
|
28
|
-
Requires-Dist: cryptg
|
|
29
28
|
Requires-Dist: pyaes>=1.6
|
|
30
29
|
Requires-Dist: rsa>=4.7
|
|
31
30
|
Provides-Extra: all
|
|
32
31
|
Requires-Dist: asyncpg>=0.27.0; extra == 'all'
|
|
33
32
|
Requires-Dist: black>=23.0; extra == 'all'
|
|
33
|
+
Requires-Dist: cryptg; extra == 'all'
|
|
34
34
|
Requires-Dist: mypy>=1.0; extra == 'all'
|
|
35
35
|
Requires-Dist: orjson>=3.9.0; extra == 'all'
|
|
36
36
|
Requires-Dist: pytest-asyncio>=0.21; extra == 'all'
|
|
@@ -51,6 +51,7 @@ Requires-Dist: asyncpg>=0.27.0; extra == 'postgres'
|
|
|
51
51
|
Provides-Extra: redis
|
|
52
52
|
Requires-Dist: redis>=4.0; extra == 'redis'
|
|
53
53
|
Provides-Extra: speed
|
|
54
|
+
Requires-Dist: cryptg; extra == 'speed'
|
|
54
55
|
Requires-Dist: orjson>=3.9.0; extra == 'speed'
|
|
55
56
|
Requires-Dist: uvloop>=0.19.0; (sys_platform != 'win32') and extra == 'speed'
|
|
56
57
|
Description-Content-Type: text/markdown
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "spluspy"
|
|
7
|
-
version = "2.2.
|
|
7
|
+
version = "2.2.1"
|
|
8
8
|
description = "A modern async Python library for interacting with Soroush Plus"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -39,11 +39,11 @@ dependencies = [
|
|
|
39
39
|
"aiohttp>=3.9.0",
|
|
40
40
|
"pyaes>=1.6",
|
|
41
41
|
"rsa>=4.7",
|
|
42
|
-
"cryptg",
|
|
43
42
|
]
|
|
44
43
|
|
|
45
44
|
[project.optional-dependencies]
|
|
46
45
|
speed = [
|
|
46
|
+
"cryptg",
|
|
47
47
|
"orjson>=3.9.0",
|
|
48
48
|
"uvloop>=0.19.0; sys_platform != 'win32'",
|
|
49
49
|
]
|
|
@@ -71,6 +71,7 @@ from spluspy.network.protocols import IAdapter, ITransport, IStorage, IEventDisp
|
|
|
71
71
|
from spluspy.network.spluspy_adapter import BaseAdapter, SpluspyAdapter, TelethonAdapter, create_adapter
|
|
72
72
|
from spluspy.utils.logger import (
|
|
73
73
|
setup_logging,
|
|
74
|
+
setup_errors_only_logging,
|
|
74
75
|
get_logger,
|
|
75
76
|
set_level,
|
|
76
77
|
log,
|
|
@@ -157,6 +158,7 @@ __all__ = [
|
|
|
157
158
|
"MessageMirror",
|
|
158
159
|
"MessageScheduler",
|
|
159
160
|
"setup_logging",
|
|
161
|
+
"setup_errors_only_logging",
|
|
160
162
|
"get_logger",
|
|
161
163
|
"set_level",
|
|
162
164
|
"log",
|
|
@@ -147,6 +147,17 @@ try:
|
|
|
147
147
|
except OSError:
|
|
148
148
|
_libssl = None
|
|
149
149
|
|
|
150
|
+
# Check if required functions exist in the loaded library
|
|
151
|
+
_has_aes_functions = False
|
|
152
|
+
if _libssl:
|
|
153
|
+
try:
|
|
154
|
+
_libssl.AES_set_encrypt_key
|
|
155
|
+
_libssl.AES_set_decrypt_key
|
|
156
|
+
_libssl.AES_ige_encrypt
|
|
157
|
+
_has_aes_functions = True
|
|
158
|
+
except AttributeError:
|
|
159
|
+
_libssl = None
|
|
160
|
+
|
|
150
161
|
if not _libssl:
|
|
151
162
|
decrypt_ige = None
|
|
152
163
|
encrypt_ige = None
|
|
@@ -390,6 +390,8 @@ class Client(MediaMixin, ChatManagementMixin):
|
|
|
390
390
|
log_level: Python logging level (default ``CRITICAL`` = silent).
|
|
391
391
|
log_file: Optional log file path; ``None`` for console-only.
|
|
392
392
|
log_dir: Directory for log file storage.
|
|
393
|
+
errors_only: If ``True``, only show ERROR/CRITICAL logs on console,
|
|
394
|
+
suppressing noisy warnings (WebSocket, reconnect, etc.).
|
|
393
395
|
|
|
394
396
|
Attributes:
|
|
395
397
|
middleware: :class:`MiddlewareManager` for adding middleware.
|
|
@@ -422,13 +424,19 @@ class Client(MediaMixin, ChatManagementMixin):
|
|
|
422
424
|
log_level: int = logging.CRITICAL,
|
|
423
425
|
log_file: Optional[str] = None,
|
|
424
426
|
log_dir: str = "logs",
|
|
427
|
+
errors_only: bool = False,
|
|
425
428
|
) -> None:
|
|
426
429
|
# session_string takes highest precedence
|
|
427
430
|
if session_string is not None:
|
|
428
431
|
session = session_string
|
|
429
432
|
elif session_name is not None:
|
|
430
433
|
session = session_name
|
|
431
|
-
setup_logging(
|
|
434
|
+
setup_logging(
|
|
435
|
+
level=log_level,
|
|
436
|
+
log_file=log_file,
|
|
437
|
+
log_dir=log_dir,
|
|
438
|
+
errors_only=errors_only,
|
|
439
|
+
)
|
|
432
440
|
self.session = self._resolve_session(session)
|
|
433
441
|
self.api_id = api_id
|
|
434
442
|
self.api_hash = api_hash
|
|
@@ -78,6 +78,67 @@ class FileFormatter(logging.Formatter):
|
|
|
78
78
|
)
|
|
79
79
|
|
|
80
80
|
|
|
81
|
+
# ============================================================
|
|
82
|
+
# Log filters
|
|
83
|
+
# ============================================================
|
|
84
|
+
|
|
85
|
+
# Keywords that indicate noisy/reconnect-related messages
|
|
86
|
+
_NOISY_KEYWORDS = (
|
|
87
|
+
"reconnect",
|
|
88
|
+
"disconnect",
|
|
89
|
+
"connection lost",
|
|
90
|
+
"connection restored",
|
|
91
|
+
"connection monitor",
|
|
92
|
+
"stale auth",
|
|
93
|
+
"auth key",
|
|
94
|
+
"closing current connection",
|
|
95
|
+
"keeping alive",
|
|
96
|
+
"keepalive",
|
|
97
|
+
"transport returned None",
|
|
98
|
+
"update loop crashed",
|
|
99
|
+
"update loop exited",
|
|
100
|
+
"resuming event loop",
|
|
101
|
+
"resetting webSocket",
|
|
102
|
+
"websocket reconnect",
|
|
103
|
+
"connected to",
|
|
104
|
+
"connected via",
|
|
105
|
+
"disconnected",
|
|
106
|
+
"attempt %d at connecting",
|
|
107
|
+
"automatic reconnection",
|
|
108
|
+
"max reconnection",
|
|
109
|
+
"reconnecting in",
|
|
110
|
+
"reconnected successfully",
|
|
111
|
+
"re-synced event handlers",
|
|
112
|
+
"server closed the connection",
|
|
113
|
+
"websocket closed while reading",
|
|
114
|
+
"connection closed while receiving data",
|
|
115
|
+
"asking for the current state",
|
|
116
|
+
"successfully fetched missed updates",
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class ReconnectFilter(logging.Filter):
|
|
121
|
+
"""Filter that only passes reconnect-related log messages."""
|
|
122
|
+
|
|
123
|
+
def filter(self, record: logging.LogRecord) -> bool:
|
|
124
|
+
msg = record.getMessage().lower()
|
|
125
|
+
return any(kw in msg for kw in _NOISY_KEYWORDS)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
class ErrorsOnlyFilter(logging.Filter):
|
|
129
|
+
"""Filter that passes only ERROR and CRITICAL logs, suppressing noisy warnings/info."""
|
|
130
|
+
|
|
131
|
+
def filter(self, record: logging.LogRecord) -> bool:
|
|
132
|
+
# Always pass ERROR and CRITICAL
|
|
133
|
+
if record.levelno >= logging.ERROR:
|
|
134
|
+
return True
|
|
135
|
+
# For WARNING/INFO, check if it's a noisy message
|
|
136
|
+
msg = record.getMessage().lower()
|
|
137
|
+
if any(kw in msg for kw in _NOISY_KEYWORDS):
|
|
138
|
+
return False
|
|
139
|
+
return True
|
|
140
|
+
|
|
141
|
+
|
|
81
142
|
# ============================================================
|
|
82
143
|
# Logging configuration
|
|
83
144
|
# ============================================================
|
|
@@ -95,6 +156,8 @@ def setup_logging(
|
|
|
95
156
|
backup_count: int = 5,
|
|
96
157
|
use_color: bool = True,
|
|
97
158
|
console_output: bool = True,
|
|
159
|
+
reconnect_only: bool = False,
|
|
160
|
+
errors_only: bool = False,
|
|
98
161
|
) -> None:
|
|
99
162
|
"""Set up the SplusPy logging system.
|
|
100
163
|
|
|
@@ -106,6 +169,8 @@ def setup_logging(
|
|
|
106
169
|
backup_count: Number of backup files.
|
|
107
170
|
use_color: Use colors in terminal output.
|
|
108
171
|
console_output: Show logs in console.
|
|
172
|
+
reconnect_only: If True, only show reconnect-related logs on console.
|
|
173
|
+
errors_only: If True, only show ERROR/CRITICAL logs, suppress noisy warnings.
|
|
109
174
|
"""
|
|
110
175
|
global _CONFIGURED, _LOG_FILE # noqa: PLW0603
|
|
111
176
|
|
|
@@ -127,7 +192,14 @@ def setup_logging(
|
|
|
127
192
|
# Console handler
|
|
128
193
|
if console_output:
|
|
129
194
|
console_handler = logging.StreamHandler(sys.stderr)
|
|
130
|
-
|
|
195
|
+
if errors_only:
|
|
196
|
+
console_handler.setLevel(TRACE) # Capture all, filter by content
|
|
197
|
+
console_handler.addFilter(ErrorsOnlyFilter())
|
|
198
|
+
elif reconnect_only:
|
|
199
|
+
console_handler.setLevel(TRACE) # Capture all, filter by content
|
|
200
|
+
console_handler.addFilter(ReconnectFilter())
|
|
201
|
+
else:
|
|
202
|
+
console_handler.setLevel(level)
|
|
131
203
|
console_handler.setFormatter(ColorFormatter(use_color=use_color))
|
|
132
204
|
root.addHandler(console_handler)
|
|
133
205
|
|
|
@@ -280,3 +352,45 @@ def log() -> logging.Logger:
|
|
|
280
352
|
if _default_logger is None:
|
|
281
353
|
_default_logger = get_logger()
|
|
282
354
|
return _default_logger
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def setup_reconnect_logging(
|
|
358
|
+
log_file: Optional[str] = None,
|
|
359
|
+
use_color: bool = True,
|
|
360
|
+
) -> None:
|
|
361
|
+
"""Convenience function: only show reconnect-related logs on console.
|
|
362
|
+
|
|
363
|
+
All logs still go to the file (if log_file is set), but console only
|
|
364
|
+
shows connection/disconnection/reconnect messages.
|
|
365
|
+
|
|
366
|
+
Example:
|
|
367
|
+
>>> from spluspy.utils.logger import setup_reconnect_logging
|
|
368
|
+
>>> setup_reconnect_logging(log_file="bot.log")
|
|
369
|
+
"""
|
|
370
|
+
setup_logging(
|
|
371
|
+
level="WARNING", # doesn't matter, ReconnectFilter controls output
|
|
372
|
+
log_file=log_file,
|
|
373
|
+
use_color=use_color,
|
|
374
|
+
reconnect_only=True,
|
|
375
|
+
)
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
def setup_errors_only_logging(
|
|
379
|
+
log_file: Optional[str] = None,
|
|
380
|
+
use_color: bool = True,
|
|
381
|
+
) -> None:
|
|
382
|
+
"""Convenience function: only show ERROR/CRITICAL logs on console.
|
|
383
|
+
|
|
384
|
+
Suppresses all noisy warnings (WebSocket, reconnect, etc.) while still
|
|
385
|
+
showing actual errors. All logs still go to file if log_file is set.
|
|
386
|
+
|
|
387
|
+
Example:
|
|
388
|
+
>>> from spluspy.utils.logger import setup_errors_only_logging
|
|
389
|
+
>>> setup_errors_only_logging(log_file="bot.log")
|
|
390
|
+
"""
|
|
391
|
+
setup_logging(
|
|
392
|
+
level="TRACE",
|
|
393
|
+
log_file=log_file,
|
|
394
|
+
use_color=use_color,
|
|
395
|
+
errors_only=True,
|
|
396
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|