� ���g[j���ddlmZddlmZddlZddlZddlZddlZddlZddl Z ddl Z n #e $rdZ YnwxYw ddl Z n #e $rdZ YnwxYwddl mZddl mZddl mZddl mZejd ��ZGd �d ej��ZdS) �)� b64encode)�JSONDecodeErrorN�)� base_client)� exceptions)�packet)�payloadzengineio.clientc��eZdZdZ dd�Zd�Zd�Zdd�Zd �Zdd �Z d �Z d �Z d�Z d�Z d�Zd�Z dd�Zd�Zd�Zd�Zd�ZdS)�Clienta�An Engine.IO client. This class implements a fully compliant Engine.IO web client with support for websocket and long-polling transports. :param logger: To enable logging set to ``True`` or pass a logger object to use. To disable logging set to ``False``. The default is ``False``. Note that fatal errors are logged even when ``logger`` is ``False``. :param json: An alternative json module to use for encoding and decoding packets. Custom json modules must have ``dumps`` and ``loads`` functions that are compatible with the standard library versions. :param request_timeout: A timeout in seconds for requests. The default is 5 seconds. :param http_session: an initialized ``requests.Session`` object to be used when sending requests to the server. Use it if you need to add special client options such as proxy servers, SSL certificates, custom CA bundle, etc. :param ssl_verify: ``True`` to verify SSL certificates, or ``False`` to skip SSL certificate verification, allowing connections to servers with self signed certificates. The default is ``True``. :param handle_sigint: Set to ``True`` to automatically handle disconnection when the process is interrupted, or to ``False`` to leave interrupt handling to the calling application. Interrupt handling can only be enabled when the client instance is created in the main thread. :param websocket_extra_options: Dictionary containing additional keyword arguments passed to ``websocket.create_connection()``. :param timestamp_requests: If ``True`` a timestamp is added to the query string of Socket.IO requests as a cache-busting measure. Set to ``False`` to disable. N� engine.ioc�L��|jdkrtd���ddg�|�7t|t��r|g}�fd�|D��}|std���|p�|_|���|_t|d|jd z��||pi|��S) a�Connect to an Engine.IO server. :param url: The URL of the Engine.IO server. It can include custom query string parameters if required by the server. :param headers: A dictionary with custom headers to send with the connection request. :param transports: The list of allowed transports. Valid transports are ``'polling'`` and ``'websocket'``. If not given, the polling transport is connected first, then an upgrade to websocket is attempted. :param engineio_path: The endpoint where the Engine.IO server is installed. The default value is appropriate for most cases. Example usage:: eio = engineio.Client() eio.connect('http://localhost:5000') � disconnectedz%Client is not in a disconnected state�polling� websocketNc���g|]}|�v�|�� S�r)�.0� transport�valid_transportss ��_/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/engineio/client.py� <listcomp>z"Client.connect.<locals>.<listcomp>Ys.���<�<�<� �&�*:�:�:�$�:�:�:�zNo valid transports provided� _connect_r)�state� ValueError� isinstance�str� transports� create_queue�queue�getattr)�self�url�headersr� engineio_pathrs @r�connectzClient.connect>s����* �:�� '� '��D�E�E� E�%�{�3�� � !��*�c�*�*� *�(�\� �<�<�<�<�Z�<�<�<�J�� A� �!?�@�@�@�$�8�(8����&�&�(�(�� �>�w�t�[�4�?�1�+=�=�>�>� ���B� �/�/� /rc�J�|jr|j���dSdS)z�Wait until the connection with the server ends. Client applications can use this function to block the main thread during the life of the connection. N)�read_loop_task�join)r"s r�waitz Client.waitbs4�� � � '� � � $� $� &� &� &� &� &� '� 'rc�l�|�tjtj|�����dS)aSend a message to the server. :param data: The data to send to the server. Data can be of type ``str``, ``bytes``, ``list`` or ``dict``. If a ``list`` or ``dict``, the data will be serialized as JSON. ��dataN)� _send_packetr�Packet�MESSAGE)r"r-s r�sendz Client.sendks/�� ���&�-���T�B�B�B�C�C�C�C�CrFc��|jdkr�|�tjtj����|j�d��d|_|�d|p |jj d���|j dkr|j � ��|s|j ���d|_ tj�|��n#t$$rYnwxYw|���dS) z�Disconnect from the server. :param abort: If set to ``True``, do not wait for background tasks associated with the connection to end. � connectedN� disconnecting� disconnectF�� run_asyncrr)rr.rr/�CLOSEr �put�_trigger_event�reason�CLIENT_DISCONNECT�current_transport�ws�closer(r)r�connected_clients�remover�_reset)r"�abortr;s rr5zClient.disconnectts�� �:�� $� $� � � �f�m�F�L�9�9� :� :� :� �J�N�N�4� � � �(�D�J� � � � � &� G�$�+�*G�*/� � 1� 1� 1��%��4�4��� � ����� +��#�(�(�*�*�*�'�D�J� ��-�4�4�T�:�:�:�:��� � � ��� ���� � � � � � � � s� C)�) C6�5C6c�^�tj|||d���}|���|S)a�Start a background task. This is a utility function that applications can use to start a background task. :param target: the target function to execute. :param args: arguments to pass to the function. :param kwargs: keyword arguments to pass to the function. This function returns an object that represents the background task, on which the ``join()`` method can be invoked to wait for the task to complete. T)�target�args�kwargs�daemon)� threading�Thread�start)r"rErFrG�ths r�start_background_taskzClient.start_background_task�s6��� �V�$�v�%)�+�+�+�� ��� � � �� rrc�*�tj|��S)z'Sleep for the requested amount of time.)�time�sleep)r"�secondss rrPz Client.sleep�s���z�'�"�"�"rc�J�tj|i|��}tj|_|S)zCreate a queue object.)r �Queue�Empty)r"rFrG�qs rrzClient.create_queue�s$�� �K�� (�� (� (���+����rc�$�tj|i|��S)zCreate an event object.)rI�Event)r"rFrGs r� create_eventzClient.create_event�s�����/��/�/�/rc���t�|j�d��dS|�||d��|_|j�d|jz��|�d|j|���z||j���}|�t|t��r*|� ��tj |pd���|jdks |jd kri|� �� |���}n#t $rd}YnwxYwtj d �|j��|��� t%j|j�d ��� ��}n##t,$rtj d ��d�wxYw|jd}|jt2jkrtj d���|j�dt|j��z��|jd|_|jd|_t=|jd��dz |_t=|jd��dz |_ d|_!|xjd|jzz c_d|_"tFj$�%|��|�&dd���|jdd�D]}|�'|���d|jvr"d|j(vr|�)|||��rdS|�*|j+��|_,|�*|j-��|_.dS)z<Establish a long-polling connection to the Engine.IO server.Nz?requests package is not installed -- cannot send HTTP requests!rz!Attempting polling connection to �GET)r$�timeoutz Connection refused by the server���,z,Unexpected status code {} in server response�utf-8��encoded_payloadzUnexpected response from serverrz"OPEN packet not returned by serverz!Polling connection accepted with �sid�upgrades� pingInterval�@�@� pingTimeout�&sid=r3r&Fr6rr)/�requests�logger�error�_get_engineio_url�base_url�info� _send_request�_get_url_timestamp�request_timeoutrrrBr�ConnectionError� status_code�jsonr�formatr �Payload�content�decoder�packets� packet_typer�OPENr-rarb�int� ping_interval� ping_timeoutr=rrr@�appendr:�_receive_packetr�_connect_websocketrM� _write_loop�write_loop_task�_read_loop_pollingr() r"r#r$r%�r�arg�p� open_packet�pkts r�_connect_pollingzClient._connect_polling�s��� � � �K� � �4� 5� 5� 5� �F��.�.�s�M�9�M�M�� � � ���<�t�}�L�M�M�M� � � � �4�=�4�#:�#:�#<�#<�<�g��(� � *� *�� �9� �1�c�*�*�9� �K�K�M�M�M��,��7�7�9�9� 9� �=�3� � �!�-�3�"6�"6� �K�K�M�M�M� ��f�f�h�h����"� � � ����� �����,�>�E�E��M�#�#�$'�)�)� )� =���� �0@�0@��0I�0I�J�J�J�A�A��� =� =� =��,�1�3�3�8<� =� =�����i��l� � � "�f�k� 1� 1��,�4�6�6� 6� � ��� /�#�k�6F�2G�2G� G� I� I� I��#�E�*���#�(��4�� � ��!1�.�!A�B�B�V�K���� � 0�� ?�@�@�6�I���!*��� � � ��4�8�+�+� � � �� ��%�,�,�T�2�2�2� ���I���7�7�7��9�Q�R�R�=� &� &�C� � � �� %� %� %� %� �$�-� '� '�K�4�?�,J�,J��&�&�s�G�]�C�C� ��� $�9�9�$�:J�K�K���"�8�8� � #�%�%����s�D� D*�)D*�-F � F)c��t�|j�d��dS|�||d��}|jr-|j�d|z��d}|d|jzz }n&d}||_|j�d|z��d}i}|j�r�d �d �|jj D����}|� ��D].\}} |� ��d kr|r|d z }|| z }||=n�/d |vr�|jj ��t|jj t��std ���d�|jj d|jj d���d��} t%| ���d��} d| z|d <t|jjt��r)|jjd|jjdd�|d<n|jjrd|jji|d<|jjr�d} |�d��r>|jj�d|jj�d����} n=|jj�d|jj�d����} | r]t0j�d| vr| nd| z��} | j|d<| j|d<| js| jr| j| jfnd|d<t|jjt@��r,d|vr|jj|dd <n%d |jji|d<n|jjsd|_!|j!s=d|vr(|d�"d!tFj$i��nd!tFj$i|d<|�"|j%�&d"i����||d"<||d <d|d#<|j'|d$<|�"|j%�� tj(||�)��zfi|��} nS#tTtVtj,f$r4|r|j�-d%��YdSt]j*d&���wxYw|�r�t_j0t^j1d'�(�����} | �2|��n@#tf$r3}|j�-d)tA|����Yd}~dSd}~wwxYw | �4��}n@#tf$r3}|j�-d*tA|����Yd}~dSd}~wwxYwt_j0|�+��}|j5t^j6ks |j7d'kr|j�-d,��dSt_j0t^j8�����} | �2|��n@#tf$r3}|j�-d)tA|����Yd}~dSd}~wwxYwd|_9|j�d-���ne | �4��}n6#tf$r)}t]j*d.tA|��z���d}~wwxYwt_j0|�+��}|j5t^j:krt]j*d/���|j�d0tA|j7��z��|j7d1|_|j7d2|_;ty|j7d3��d4z |_=ty|j7d5��d4z |_>d|_9d6|_?t�jA�B|��|�Cd7d�8��| |_D|jD�E|j=|j>z��|�F|jG��|_H|�F|jI��|_JdS)9z?Establish or upgrade to a WebSocket connection with the server.NzKwebsocket-client package not installed, only polling transport is availableFrz Attempting WebSocket upgrade to Trfz#Attempting WebSocket connection to z; c�0�g|]}|j�d|j����S)�=)�name�value)r�cookies rrz-Client._connect_websocket.<locals>.<listcomp>s@��!B�!B�!B�%+�%+�K�!@�!@�&�,�!@�!@�!B�!B�!Brr�� Authorizationz&Only basic authentication is supportedz{}:{}rrr^zBasic )�certfile�keyfile�ssloptr�zws://r>�http�wss�httpsz://z scheme://�http_proxy_host�http_proxy_port�http_proxy_auth�ca_certs� cert_reqs�header�enable_multithreadr[z*WebSocket upgrade failed: connection errorzConnection error�prober,z7WebSocket upgrade failed: unexpected send exception: %sz7WebSocket upgrade failed: unexpected recv exception: %s��encoded_packetz(WebSocket upgrade failed: no PONG packetz WebSocket upgrade was successfulzUnexpected recv exception: zno OPEN packetz#WebSocket connection accepted with rarbrcrdrer3r&r6)Krrhrirjrarlrkr�r)�cookies�items�lower�authr�tuplerrs�encoderrv�cert�proxies� startswith�get�urllib�parse�urlparse�hostname�port�username�password�verifyr� ssl_verify�update�ssl� CERT_NONE�websocket_extra_options�popro�create_connectionrnrp�OSError�WebSocketException�warningrrr/�PINGr1� Exception�recvrx�PONGr-�UPGRADEr=ryrbrzr{r|rrr@r}r:r>� settimeoutrMr�r��_read_loop_websocketr()r"r#r$r%� websocket_url�upgrader�� extra_optionsr�r�� basic_auth� proxy_url� parsed_urlr>r��er�r�s rrzClient._connect_websocket�s �� � � �K� � �?� @� @� @��5��.�.�s�M�;�O�O� � �8� G� �K� � �2�]�B� D� D� D��G� �W�t�x�/� /�M�M��G�)�D�M� �K� � �5� �E� G� G� G� ��� � �9�9 (��i�i�!B�!B�/3�y�/@�!B�!B�!B�C�C�G�!(����� � � ����<�<�>�>�X�-�-��(��4����u�$�G�����E� .��g�-�-�$�)�.�2L�!�$�)�.�%�8�8�O�$�%M�N�N�N�$�^�^��I�N�1�%�t�y�~�a�'8�:�:�:@�&��/�/��&�z�2�2�9�9�'�B�B� �+3�j�+@���(��$�)�.�%�0�0� G� $� ��q� 1�#�y�~�a�0�+2�+2� �h�'�'���� G�+5�t�y�~�*F� �h�'��y� � #� � � �+�+�G�4�4�?� $� � 1� 5� 5��d�i�/�3�3�F�;�;�!=�!=�I�I�!%� � 1� 5� 5��t�y�0�4�4�W�=�=�!?�!?�I�� #�!'��!6�!6�%*�i�%7�%7� � �(�9�4�"6�"6�J�8B�7J�M�"3�4�7A��M�"3�4�&�.�"�2<�2E�"��,�j�.A�B�B�!�"�"3�4� �$�)�*�C�0�0� (��}�,�,�:>�)�:J�M�(�+�J�7�7�/9�4�9�;K�.L�M�(�+�+��Y�%� (�"'����� G��=�(�(��h�'�.�.� �S�]�/K�L�L�L�L�+6�� �*F� �h�'� ���t�3�7�7��"�E�E�F�F�F�")� �h��")� �h��.2� �*�+�#'�#7� �i� ����T�9�:�:�:� E��,��� 7� 7� 9� 9�9�L�L�=J�L�L�B�B����)�*F�G� E� E� E�� E�� �#�#�@�B�B�B��u�u� �0�1C�D�D�D�  E���� �2 <�� �f�k��8�8�8�?�?�A�A�A� ����� � � � ��� � � �� �#�#�M���F�F�����u�u�u�u�u�����  ����  ��G�G�I�I����� � � �� �#�#�M���F�F�����u�u�u�u�u�����  ���� �-�q�1�1�1�C���&�+�-�-���W�1D�1D�� �#�#�>�@�@�@��u�� �f�n�-�-�4�4�6�6�A� ����� � � � ��� � � �� �#�#�M���F�F�����u�u�u�u�u�����  ���� &1�D� "� �K� � �?� @� @� @� @� <��G�G�I�I����� <� <� <� �0�1�C��F�F�:�<�<�<����� <����!�-�q�9�9�9�K��&�&�+�5�5� �0�1A�B�B�B� �K� � �5��K�<L�8M�8M�M� O� O� O�"�'��.�D�H�'�,�Z�8�D�M�!$�[�%5�n�%E�!F�!F��!O�D� � #�K�$4�]�$C� D� D�v� M�D� �%0�D� "�$�D�J� � )� 0� 0�� 6� 6� 6� � � � �U� � ;� ;� ;���� ����4�-��0A�A�B�B�B� $�9�9�$�:J�K�K���"�8�8� � %�'�'����tsr�$'Q � 8R�R�S+�+ T(�5(T#�#T(�,U� U>� (U9�9U>�X� Y�#(Y�Y�=Z� [�$[�[c���|jttj��krtj|jnd}|j�d|t |jt��s|jnd��|jtj kr|� d|jd���d S|jtj kr9|� tj tj|j����d S|jtjkr#|�d|jj���d S|jtjkrd S|j�d|j��d S) z(Handle incoming packets from the server.�UNKNOWNzReceived packet %s data %s�<binary>�messageTr6)rCr;z%Received unexpected packet of type %sN)rx�lenr� packet_namesrhrlrr-�bytesr0r:r�r.r/r�r8r5r;�SERVER_DISCONNECT�NOOPri)r"r�� packet_names rr~zClient._receive_packet�sO�����V�%8�!9�!9�9�9��)�#�/�:�:�?H� � � ��� (�+�&�s�x��7�7� G�C�H�H�Z� I� I� I� �?�f�n� ,� ,� � � � �3�8�t� � D� D� D� D� D� �_�� � +� +� � � �f�m�F�K���B�B� C� C� C� C� C� �_�� � ,� ,� �O�O�$�t�{�/L�O� M� M� M� M� M� �_�� � +� +� �D� �K� � �E�!�o� /� /� /� /� /rc���|jdkrdS|j�|��|j�dt j|jt|j t��s|j nd��dS)z(Queue a packet to be sent to the server.r3NzSending packet %s data %sr�) rr r9rhrlrr�rxrr-r�)r"r�s rr.zClient._send_packet�s{�� �:�� $� $� �F� � ���s���� � ��� '� � ��� 0�&�s�x��7�7� G�C�H�H�Z� I� I� I� I� Irc�@�|j�tj��|_|js d|j_ |j�|||||���S#tjj$r6}|j� d|||��t|��cYd}~Sd}~wwxYw)NF)r$r-r[z+HTTP %s request to %s failed with error %s.) r�rg�Sessionr�r��requestr�RequestExceptionrhrlr)r"�methodr#r$�bodyr[�excs rrmzClient._send_request�s��� �9� � �(�*�*�D�I��� %�$�D�I� � ��9�$�$�V�S�'��-4�%�6�6� 6���"�3� � � � �K� � �J�#�S�#� /� /� /��s�8�8�O�O�O�O�O�O����� ���s�A�B�'+B�B�Bc�f�|�dd��}||jvr�|r|j|j|g|�R�S |j||�S#t$r2|dkr*t |��dkr|j|��cYS�wxYw#|j�|dz��YdSxYwdS)zInvoke an event handler.r7Fr5rz handler errorN)r��handlersrM� TypeErrorr�rh� exception)r"�eventrFrGr7s rr:zClient._trigger_event�s����J�J�{�E�2�2� � �D�M� !� !�� D�1�t�1�$�-��2F�N��N�N�N�N� D� "�3�t�}�U�3�T�:�:��$�"�"�"� �L�0�0� #�D� � �Q���$8�4�=��#7�#9�#9�9�9�9�!�"�����D��K�)�)�%�2B�*B�C�C�C�C�C�C����! "� !s#�A � 8B �B �B � B � B.c� �|jdk�r�|j�r�|j�d|jz��|�d|j|���zt|j|j ��dz���}|�t|t��r7|j� |pd��|j �d��n�|jdks |jd kr;|j� d |j��|j �d��n� t!j|j�d ��� ��}nD#t($r7|j� d ��|j �d��Yn6wxYw|jD]}|�|���|jdkr|j���|jr3|j�d��|j���|jdkrg|�d|jjd��� t6j�|��n#t($rYnwxYw|���|j�d��dS)z-Read packets by polling the Engine.IO server.r3zSending polling GET request to rZ��r[N�*Connection refused by the server, abortingr\r]�6Unexpected status code %s in server response, abortingr^r_z'Unexpected packet from server, aborting�"Waiting for write loop task to endr5Fr6�Exiting read loop task)rr�rhrlrkrmrn�maxr{r|rrr�r r9rqr rtrurvrrwr~r)r:r;�TRANSPORT_ERRORrr@rArB)r"r�r�r�s rr�zClient._read_loop_polling�s����j�K�'�'�D�,@�'� �K� � �1�D�M�A� C� C� C��"�"��t�}�t�'>�'>�'@�'@�@��D�.��0A�B�B�Q�F�#�H�H�A��y�J�q�#�.�.�y�� �#�#��E�E�G�G�G�� ���t�$�$�$���}�s�"�"�a�m�s�&:�&:�� �#�#�%9�:;�-�I�I�I�� ���t�$�$�$�� ��O�A�I�4D�4D�W�4M�4M�N�N�N����� � � �� �#�#�=�?�?�?�� ���t�$�$�$���  ���� �y� *� *���$�$�S�)�)�)�)�1�j�K�'�'�D�,@�'�4 � � (� �K� � �A� B� B� B� � � %� %� '� '� '� �:�� $� $� � � � �d�k�.I�*/� � 1� 1� 1� ��-�4�4�T�:�:�:�:��� � � ��� ���� �K�K�M�M�M� � ���1�2�2�2�2�2s$�$-E�>F�F�0I� I�Ic��|jdk�rd} |j���}t|��dkr|jjst j����n#t j$r8|j� d��|j � d��Y�njt j$r8|j� d��|j � d��Y�n%t$r�}t|��tur&|jdkr|j�d��n(|j�dt#|����|j � d��Yd}~n�d}~wwxYw t%j|� ��}nY#t$rL}|j�d t#|����|j � d��Yd}~n)d}~wwxYw|�|��|jdk��|jr3|j�d ��|j���|jdkrg|�d |jjd ��� t4j�|��n#t:$rYnwxYw|���|j�d��dS)z5Read packets from the Engine.IO WebSocket connection.r3Nrz*Server has stopped communicating, aborting�)WebSocket connection was closed, aborting� z)WebSocket connection is closing, abortingz1Unexpected error receiving packet: "%s", abortingr�z0Unexpected error decoding packet: "%s", abortingr�r5Fr6r�)rr>r�r�r3r�"WebSocketConnectionClosedException�WebSocketTimeoutExceptionrhr�r r9r��typer��errnorlrrr/r~r�r)r:r;r�rr@rArrB)r"r�r�r�s rr�zClient._read_loop_websocket�s���j�K�'�'��A� ��G�L�L�N�N���q�6�6�Q�;�;�t�w�'8�;�#�F�H�H�H����6� � � �� �#�#�@�B�B�B�� ���t�$�$�$����?� � � �� �#�#�?�A�A�A�� ���t�$�$�$���� � � ���7�7�g�%�%�!�'�Q�,�,��K�$�$�C�E�E�E�E��K�$�$�K��A��� � � �� ���t�$�$�$���������� ���� ��m�1�5�5�5����� � � �� � � �F��A���P�P�P�� ���t�$�$�$����������  ���� � � �� %� %� %�E�j�K�'�'�H � � (� �K� � �A� B� B� B� � � %� %� '� '� '� �:�� $� $� � � � �d�k�.I�*/� � 1� 1� 1� ��-�4�4�T�:�:�:�:��� � � ��� ���� �K�K�M�M�M� � ���1�2�2�2�2�2sR�A A�AE9�#AE9�( E9�1A>E4�4E9�=F� G)�AG$�$G)�5J� J"�!J"c��|jdk�r�t|j|j��dz}d} |j�|���g}n0#|jj$r|j�d��Y�n?wxYw|dgkr|j� ��g}ns |� |j�d�����n#|jj$rYn1wxYw|d �$|dd �}|j� ��n�r|s�n�|j d kr�tj |� ��}|�d |j|���d di|j���}|D]}|j� ���|�t%|t&��r|j�|pd��n�|jdks |jdkr(|j�d|j��d|_n�n� |D]k}|���}|jr|j�|��n|j�|��|j� ���ln<#t6jt:t<f$r|j�d��YnwxYw|jdk���|j�d��dS)zhThis background task sends packages to the server as they are pushed to the send queue. r3r�Nr�zpacket queue is empty, abortingTF)�block�����r)rw�POSTz Content-Typez text/plain)r�r$r[r�r\r]r�r�zExiting write loop task) rr�r{r|r r�rTrhri� task_doner}r=r rtrmrkr�rorrr�rqr��binaryr>� send_binaryr1rr��BrokenPipeErrorr�rl)r"r[rwr�r�r�r�s rr�zClient._write_loop-sK���j�K�'�'��$�,�d�.?�@�@�1�D�G��G� ��:�>�>�'�>�:�:�;�����:�#� � � �� �!�!�"C�D�D�D��� �����4�&� � �� �$�$�&�&�&���������t�z�~�~�E�~�'B�'B�C�C�C�C���:�+�����������r�{�*�")�#�2�#�,��� �,�,�.�.�.���� ���%��2�2��O�G�4�4�4���&�&��D�M���� � �+�\�:� �0�'�2�2��#�+�+�C��J�(�(�*�*�*�*��9� �1�c� 2� 2�9��K�'�'��I�I�K�K�K���=�3�&�&�!�-�3�*>�*>��K�'�'�)=�>?�m�M�M�M�+/�D�(�� +?� �&�/�/��),�������:�9� �G�/�/��?�?�?�?� �G�L�L��8�8�8�� �,�,�.�.�.�.� /��"�D�'��2�����K�'�'�C�E�E�E��E� ����m�j�K�'�'�v � ���2�3�3�3�3�3s6�A � )A7�6A7�.C�C �C �>A.I-�-6J&�%J&)NNr )FN)r)NNN)�__name__� __module__� __qualname__�__doc__r&r*r1r5rMrPrrXr�rr~r.rmr:r�r�r�rrrr r sS������"�"�F59�)�"/�"/�"/�"/�H'�'�'�D�D�D�����0���&#�#�#�#���� 0�0�0�;%�;%�;%�zd�d�d�L/�/�/�&I�I�I�37�� � � � �D�D�D�*'3�'3�'3�R13�13�13�f?4�?4�?4�?4�?4rr )�base64r� engineio.jsonr�loggingr r�rIrOr�rg� ImportErrorr�rrrr � getLogger�default_logger� BaseClientr rrr�<module>rsj��������)�)�)�)�)�)����� � � � � � � � ����� � � � � � � � ���O�O�O�O�������H�H�H�����������������I�I�I�����������������������������"��"�#4�5�5��R 4�R 4�R 4�R 4�R 4�[� #�R 4�R 4�R 4�R 4�R 4s�+�5�5�>�A�A
Memory