
    ei                         d dl Zd dlmZmZmZmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ  G d	 d
ej        j                  ZdS )    N)
ArrayCacheArrayCacheBySymbolByIdArrayCacheBySymbolBySideArrayCacheByTimestamp)AnyBoolIntOrder	OrderBookPositionStrStringsTickerTickersTrade)Client)List)ExchangeError)AuthenticationError)ArgumentsRequiredc                       e Zd Zdef fdZdefdZd-dee         de	dee         defd	Z
d
 Zi fdedefdZdi fdedefdZdefdZd.dZddi fdedededee         fdZddi fdee         dededee         fdZdefdZd.dZdddi fdededededee         f
dZddi fdeee                  dedefdZdefdZd.defdZdi fdededefdZdi fdee         dedefd Z defd!Z!i fd"Z"dddi fde#dededee         fd#Z$defd$Z%d.d%Z&dddi fdedededee'         fd&Z(d' Z)d.d(Z*dddi fde#dededee+         fd)Z,defd*Z-d.de+fd+Z.dede/fd,Z0 xZ1S )/grvtreturnc                     |                      t          t          |                                           ddddddddddddddddddiidd	d
ddd	ddddid          S )NT)wswatchTickerwatchTickerswatchTradeswatchTradesForSymbols
watchOHLCVwatchOHLCVForSymbolswatchOrderBookwatchOrderBookForSymbolswatchMyTradeswatchPositionswatchOrdersapir   z!wss://market-data.grvt.io/ws/fullzwss://trades.grvt.io/ws/full)publicMarketprivateTradingd     	v1.book.s)depthintervalchannelv1.ticker.s)r/   r.   )r#   r   	keepAlivei )hasurlsoptions	streaming)deep_extendsuperr   describe)self	__class__s    K/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/pro/grvt.pyr8   zgrvt.describe   s    dD 1 1 : : < <# $#)-"(,"&,0!%"&#  (K*H  ! #*- -  - #! !
 
 VE%?
 %?
 % % %	    clientc                 t   |                      ||          rd S | j        | j        | j        | j        | j        | j        | j        | j        | j        | j        | j        d}|                     |d          }|dk    rd S |                     |d          }| 	                    ||          }| |||           d S d S )N)r0   zv1.ticker.dz	v1.mini.dz	v1.mini.sv1.trade	v1.candler,   	v1.book.dv1.fillv1.positionv1.ordermethod	subscribestream)
handle_error_messagehandle_tickerhandle_tradeshandle_ohlcvhandle_order_bookhandle_my_tradehandle_positionhandle_ordersafe_string
safe_value)r9   r=   messagemethods
methodNamer/   rE   s          r;   handle_messagezgrvt.handle_message:   s    @ $$VW55 	F--++**//+/)
 
 %%gx88
$$F""7H55'22F67##### r<   TmessageHashesrequest	rawHashesc                    K   dd||                                  d}|rdnd}|                     | j        d         d         |         |||           d {V S )Nz2.0rF   )jsonrpcrE   paramsidr(   r)   r'   r   )
request_idwatch_multipler3   )r9   rV   rW   rX   publicOrPrivatepayloadapiParts          r;   subscribe_multiplezgrvt.subscribe_multipler   sx      !//##	
 
 %4I..9I((5)9$)?)H-Y`bklllllllllr<   c                     |                                   |                     |                     | j        dd          d          }|| j        d<   |                                  |S )N	requestIdr      )lock_idsumsafe_integerr4   	unlock_id)r9   newValues     r;   r]   zgrvt.request_id|   sW    88D--dlKKKQOO$,[!r<   symbolc                    K   |                                   d{V  |                     |          }|                     |g|                     |ddi                     d{V }||         S )a  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

        https://api-docs.grvt.io/market_data_streams/#mini-ticker-snap-feed-selector

        :param str symbol: unified symbol of the market to fetch the ticker for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `ticker structure <https://docs.ccxt.com/?id=ticker-structure>`
        NcallerMethodNamer   )load_marketsrk   watch_tickersextend)r9   rk   r[   tickerss       r;   watch_tickerzgrvt.watch_ticker   s       !!!!!!!!!V$$**F8T[[J\^kIl5m5mnnnnnnnnvr<   Nsymbolsc                   K   |t          | j        dz             d}|                     |ddd          \  }}d}|                     |ddd          \  }}|                                  d{V  |                     |          }g }g }t          dt          |                    D ]m}||         }|                     |          }	|	d	         }
|                    |
d
z   t          |          z              |                    d|	d         z              n||d}| 
                    ||                     ||          |           d{V }| j        ri }|||d         <   |S |                     | j        d|          S )a  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list

        https://docs.backpack.exchange/#tag/Streams/Public/Ticker

        :param str[] symbols: unified symbol of the market to fetch the ticker for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `ticker structure <https://docs.ccxt.com/?id=ticker-structure>`
        Nz) watchTickers requires a symbols argumentr   r/   r0   r.   r+   r   r\   @ticker::rk   rG   	selectors)r   r\   handle_option_and_paramsrn   market_symbolsrangelenmarketappendstrrb   rp   
newUpdatesfilter_by_arrayrq   )r9   rs   r[   r/   r.   rX   rV   irk   r}   marketIdrW   tickerrq   s                 r;   ro   zgrvt.watch_tickers   s      ?#DG.Y$YZZZ77PY[hii88Q[]`aa&!!!!!!!!!%%g..	q#g,,'' 	@ 	@AQZF[[((Fd|HX^c(mm;<<<  fX.>!>????"
 
 ..}dkk&RY>Z>Z\effffffff? 	G(.GF8$%N##DL(GDDDr<   c                 d   |                      |di           }|                     |d          }|                    d          }|                     |d          }|                     |d           }|d         }|                     ||          }	|	| j        |<   |                    |	d|z              d S )Nfeedselectorru   r   rk   rv   )	safe_dictrP   splitsafe_marketparse_ws_tickerrq   resolve)
r9   r=   rR   datar   partsr   r}   rk   r   s
             r;   rI   zgrvt.handle_ticker   s    Z ~~gvr22##GZ88s####E1--!!(D11!%%dF33%VvzF233333r<   c                 .    |                      ||          S N)parse_ticker)r9   rR   r}   s      r;   r   zgrvt.parse_ws_ticker  s      &111r<   sincelimitc                 D   K   |                      |g|||           d{V S )a*  
        watches information on multiple trades made in a market

        https://api-docs.grvt.io/market_data_streams/#trade_1

        :param str symbol: unified market symbol of the market trades were made in
        :param int [since]: the earliest time in ms to fetch orders for
        :param int [limit]: the maximum number of trade structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/?id=trade-structure>`
        N)watch_trades_for_symbols)r9   rk   r   r   r[   s        r;   watch_tradeszgrvt.watch_trades  s6       22F8UE6RRRRRRRRRr<   c                   K   |                                   d{V  |                     |          }g }g }t          dt          |                    D ]w}||         }|                     |          }	|	d         }
|                     |dd          }|                    |
dz   |z              |                    d|	d         z              xd	|d
}|                     ||                     ||          |           d{V }| j	        rB| 
                    |d          }|                     |d          }|                    ||          }|                     |||dd          S )a]  
        get the list of most recent trades for a list of symbols

        https://api-docs.grvt.io/market_data_streams/#trade_1

        :param str[] symbols: unified symbol of the market to fetch trades for
        :param int [since]: timestamp in ms of the earliest trade to fetch
        :param int [limit]: the maximum amount of trades to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param str [params.limit]: 50, 200, 500, 1000(default 50)
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/?id=public-trades>`
        Nr   r\   r   2   ru   trade::rk   r?   rw   	timestampT)rn   rz   r{   r|   r}   rh   r~   rb   rp   r   rQ   rP   getLimitfilter_by_since_limit)r9   rs   r   r   r[   rX   rV   r   rk   r}   r   limitRawrW   tradesfirsttradeSymbols                   r;   r   zgrvt.watch_trades_for_symbols   s      !!!!!!!!!%%g..	q#g,,'' 	? 	?AQZF[[((Fd|H(("==HX^h6777  VH-=!=>>>> "
 
 ..}dkk&RY>Z>Z\effffffff? 	8OOFA..E**5(;;KOOK77E))&%TRRRr<   c                 
   |                      |di           }|                     |d          }|                    d          }|                     |d          }|                     |d           }|d         }|| j        vr3|                     | j        dd          }	t          |	          | j        |<   |                     |          }
| j        |         }|	                    |
           |
                    |d|z              d S )	Nr   r   ru   r   rk   tradesLimit  r   )r   rP   r   r   r   rh   r4   r   parse_ws_trader~   r   )r9   r=   rR   r   r   r   r   r}   rk   r   parsedstoreds               r;   rJ   zgrvt.handle_tradesC  s    . ~~gvr22##GZ88s####E1--!!(D11!$+%%%%dlM4HHE",U"3"3DK$$T**V$fvy6122222r<   c                 .    |                      ||          S r   parse_trader9   trader}   s      r;   r   zgrvt.parse_ws_tradeh      v...r<   1m	timeframec                    K   |                                   d{V  |                     |          }d|d<   |                     ||gg|||           d{V }||         |         S )a  
        watches historical candlestick data containing the open, high, low, and close price, and the volume of a market

        https://api-docs.grvt.io/market_data_streams/#candlestick_1

        :param str symbol: unified symbol of the market to fetch OHLCV data for
        :param str timeframe: the length of time each candle represents
        :param int [since]: timestamp in ms of the earliest candle to fetch
        :param int [limit]: the maximum amount of candles to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns int[][]: A list of candles ordered, open, high, low, close, volume
        Nr    rm   )rn   rk   watch_ohlcv_for_symbols)r9   rk   r   r   r   r[   results          r;   watch_ohlcvzgrvt.watch_ohlcvl  s       !!!!!!!!!V$$%1!"33fi5H4I5RWY_````````f~i((r<   symbolsAndTimeframesc                   K   |                                   d{V  g }g }t          dt          |                    D ]}||         }|                     |d          }	|                     |	          }
|
d         }|                     |dd          }|                     | j        ||          }|                    |dz   |z   dz              |                    d|
d	         z   d
z   |z              d|d}|                     ||                     ||          |           d{V \  }}}| j	        r|
                    ||          }|                     |||dd          }|                     |||          S )a  
        watches historical candlestick data containing the open, high, low, and close price, and the volume of a market

        https://api-docs.grvt.io/market_data_streams/#candlestick_1

        :param str[][] symbolsAndTimeframes: array of arrays containing unified symbols and timeframes to fetch OHLCV data for, example [['BTC/USDT', '1m'], ['LTC/USDT', '5m']]
        :param int [since]: timestamp in ms of the earliest candle to fetch
        :param int [limit]: the maximum amount of candles to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: A list of candles ordered, open, high, low, close, volume
        Nr   r\   re   1ru   -TRADEohlcv::rk   ::r@   rw   T)rn   r{   r|   rP   r}   
timeframesr~   rb   rp   r   r   r   create_ohlcv_object)r9   r   r   r   r[   rX   rV   r   r   symbolStringr}   r   unfiedTimeframetimeframeIdrW   rk   r   r   filtereds                      r;   r   zgrvt.watch_ohlcv_for_symbols  s      !!!!!!!!!	q#23344 	X 	XA'*D++D!44L[[..Fd|H"..tQ<<O**4?O_]]KX^k9HDEEE  VH-=!=!D!VWWWW!"
 
 +/*A*A-QUQ\Q\]celQmQmox*y*y$y$y$y$y$y$y!	6? 	3OOFE22E--feUAtLL''	8DDDr<   c                 
   |                      |di           }|                     |d          }|                    d          }|                     |d          }|                     |d           }|d         }|                     |d          }	|	                    dd          }
|                     |
          }d	|z   d
z   |z   }|                     | j        |i           | j        |<   || j        |         vr4|                     ddd          }t          |          | j        |         |<   | j        |         |         }| 
                    ||          }|                    |           |||g}|                    ||           d S )Nr   r   ru   r   rk   re   r    r   r   r    r   r   )r   rP   r   r   replacefind_timeframerQ   ohlcvshandle_optionr   parse_ws_ohlcvr~   r   )r9   r=   rR   r   r   r   r   r}   rk   
secondPartr   r   messageHashr   r   r   resolveDatas                    r;   rK   zgrvt.handle_ohlcv  s   * ~~gvr22##GZ88s####E1--!!(D11!%%eQ//
 ((266''44	&(4/);"oodk62FFFT[000&&|WdCCE-B5-I-IDK	*V$Y/$$T622fy&1{K00000r<   c                 .    |                      ||          S r   )parse_ohlcv)r9   ohlcvr}   s      r;   r   zgrvt.parse_ws_ohlcv  r   r<   c                    K   |                                   d{V  |                     |          }|                     |g||           d{V S )a  
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

        https://api-docs.grvt.io/market_data_streams/#orderbook-snap
        https://api-docs.grvt.io/market_data_streams/#orderbook-delta

        :param str symbol: unified symbol of the market to fetch the order book for
        :param int [limit]: the maximum amount of order book entries to return.
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/?id=order-book-structure>` indexed by market symbols
        N)rn   rk   watch_order_book_for_symbols)r9   rk   r   r[   s       r;   watch_order_bookzgrvt.watch_order_book  si       !!!!!!!!!V$$66xOOOOOOOOOr<   c                 &  K   |                                   d{V  d}|                     |ddd          \  }}|dk    }t          |          }|dk    rt          | j        dz             ||                     |ddd	          \  }}d}|                     |dd
d          \  }}|                     |          }|r|dz   |z   n|}g }	g }
t          dt          |                    D ]`}||         }|                     |          }|d         }|	                    |dz   |z              |
                    d|d         z              a||	d}| 	                    |
| 
                    ||          |	           d{V }|                                S )ab  
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

        https://api-docs.grvt.io/market_data_streams/#orderbook-snap
        https://api-docs.grvt.io/market_data_streams/#orderbook-delta

        :param str[] symbols: unified array of symbols
        :param int [limit]: the maximum amount of order book entries to return.
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/?id=order-book-structure>` indexed by market symbols
        Nr"   r/   rA   r,   r   zA watchOrderBookForSymbols() requires a non-empty array of symbolsr   r*   r.   r+   -r\   ru   orderbook::rk   rw   )rn   ry   r|   r   r\   rz   r{   r}   r~   rb   rp   r   )r9   rs   r   r[   r/   
isSnapshotsymbolsLengthr.   	extraPartrX   rV   r   rk   r}   r   rW   	orderbooks                    r;   r   z!grvt.watch_order_book_for_symbols  s      !!!!!!!!!77@PR[]hii+
GA#DG.q$qrrr= 99&BRT[]`aaME688AQS]_bcc&%%g..0:HX^e++		q#g,,'' 	C 	CAQZF[[((Fd|HX^i7888  1A!ABBBB"
 
 11-WV\A]A]_hiiiiiiii	   r<   c           	         |                      |di           }|                     |d          }|                    d          }|                     |d          }|                     |d           }|d         }|                     |dd          }	|| j        vr|                                 | j        |<   | j        |         }
|                     |d          }|                     |d	          }|d
k    }|dk    }|s|r1|                     |||	dddd          }|
	                    |           n| 
                    |dg           }| 
                    |dg           }|                     |
d         |dd           |                     |
d         |dd           |	|
d<   |                     |	          |
d<   ||
d<   d|z   }|
| j        |<   |                    |
|           d S )Nr   r   ru   r   rk   
event_timegư>sequence_numberrG   r,   bidsaskspricesizer   datetimenoncer   )r   rP   r   r   safe_integer_product
orderbooks
order_bookrh   parse_order_bookreset	safe_listhandle_deltas_with_keysiso8601r   )r9   r=   rR   r   r   r   r   r}   rk   r   r   sequenceNumberrG   isSnapshotChannelisSnapshotMessagesnapshotr   r   r   s                      r;   rL   zgrvt.handle_order_book  s   6 ~~gvr22##GZ88s####E1--!!(D11!--dL(KK	$/))&*oo&7&7DOF#OF+	**74EFF!!'844"k1*a/ 		< 1 		<,,T69ffV]_effHOOH%%%%>>$33D>>$33D((6):D'6RRR((6):D'6RRR%.Ik"$(LL$;$;Ij!+	'#f,"+y+.....r<   c                   K   |                                   |                                  d {V  |                     | j        di           }|                     |d          }||                     | j        d          }|                     | j        d          }||t          | j        dz             ddd||diii}|                     |           |                     | j	        d	         d         d
                    d S d S )Nr   tokenAuthAccountIdAuthCookieValuezJ : at first, you need to authenticate with exchange using signIn() method.r4   headers)CookiezX-Grvt-Account-Idr'   r)   )
check_required_credentialssign_inr   r4   rP   r   r\   extend_exchange_optionsr=   r3   )r9   r[   	wsOptionsauthenticated	accountIdcookieValuedefaultOptionss          r;   authenticatezgrvt.authenticate>  s;     '')))llnn..tR@@	((G<< ((GGI**4<9JKKK"i&7)$'  5A  +A  B  B  B!&11:$ $ 	$N ((888KK	%(./?@AAAAA! ! r<   c                 |  K   |                      |          }|                                  d{V  |                                  d{V  g }g }|U|                     |          }|                    |dz   |d         z              |                    d|d         z              n*|                    d           |                    |           d|d}	|                     ||                     |	|          |d	           d{V }
| j        r|
                    ||          }| 	                    |
||d
d          S )am  
        watches information on multiple trades made by the user

        https://api-docs.grvt.io/trading_streams/#fill

        :param str symbol: unified market symbol of the market trades were made in
        :param int [since]: the earliest time in ms to fetch trades for
        :param int [limit]: the maximum number of trade structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param boolean [params.unifiedMargin]: use unified margin account
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/?id=trade-structure>`
        Nr   r\   
myTrades::rk   myTradesrB   rw   Fr   T)
getSubAccountIdrn   r   r}   r~   rb   rp   r   r   r   )r9   rk   r   r   r[   subAccountIdrV   rX   r}   rW   r   s              r;   watch_my_tradeszgrvt.watch_my_tradesU  sx      ++F33!!!!!!!!!!!!!!!!!!	[[((F\C/&,>???  x0@!@AAAA  ,,,\***"
 
 ..}dkk'SY>Z>Z\ikpqqqqqqqq? 	3OOFE22E))&%TRRRr<   c                 ~   |                      |di           }| j        0|                     | j        dd          }t	          |          | _        |                     |          }| j                            |           |                    | j        d|d         z              |                    | j        d           d S )Nr   r   r   r   rk   r   )r   r   rh   r4   r   parse_ws_my_trader~   r   )r9   r=   rR   r   r   r   s         r;   rM   zgrvt.handle_my_tradew  s    H ~~gvr22= %%dlM4HHE2599DM&&t,,U###t}lU8_&DEEEt}j11111r<   c                 .    |                      ||          S r   r   r   s      r;   r  zgrvt.parse_ws_my_trade  s    v...r<   c                   K   |                      |          }|                                  d{V  |                                  d{V  |                     |          }g }g }|}t	          dt          |                    D ]^}||         }	|                     |	          }
|                    |dz   |
d         z              |                    d|
d         z              _n*|                    d           |                    |           d|d	}|                     || 	                    ||          |d
           d{V }| j
        r|S |                     | j        |||d          S )a  

        https://api-docs.grvt.io/trading_streams/#positions

        watch all open positions
        :param str[] [symbols]: list of unified market symbols
        :param int [since]: the earliest time in ms to fetch positions for
        :param int [limit]: the maximum number of positions to retrieve
        :param dict params: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
        Nr   r   r\   positions::rk   	positionsrC   rw   FT)r   r   rn   rz   r{   r|   r}   r~   rb   rp   r   filter_by_symbols_since_limitr  )r9   rs   r   r   r[   r   rX   rV   r   rk   r}   rW   newPositionss                r;   watch_positionszgrvt.watch_positions  s      ++F33!!!!!!!!!!!!!!!!!!%%g..	1c'll++ G G V,,  !3fTl!BCCC$$]VH5E%EFFFF	G   ---\***#"
 
 "44]DKKPWY_D`D`bkmrssssssss? 	 11$.'5RWY]^^^r<   c                 |   | j         t                      | _         |                     |d          }|                     |          }|                     |d          }| j                             |           g }|                    |           |                    |d|z              |                    |d           d S )Nr   rk   r  r  )r  r   r   parse_ws_positionrP   r~   r   )r9   r=   rR   r   positionrk   r  s          r;   rN   zgrvt.handle_position  s    : >!577DN~~gv..))$//!!(H55h'''H%%%|]V%;<<<|[11111r<   c                 .    |                      ||          S r   )parse_position)r9   r  r}   s      r;   r
  zgrvt.parse_ws_position  s    ""8V444r<   c                 |  K   |                      |          }|                                  d{V  |                                  d{V  g }g }|+|                    d           |                    |           nT|                     |          }|                    d|d         z              |                    |dz   |d         z              d|d}	|                     ||                     |	|          |d	           d{V }
| j        r|
                    ||          }| 	                    |
|||d
          S )a4  
        watches information on multiple orders made by the user

        https://api-docs.grvt.io/trading_streams/#order_1-feed-selector

        :param str symbol: unified market symbol of the market orders were made in
        :param int [since]: the earliest time in ms to fetch orders for
        :param int [limit]: the maximum number of order structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `order structures <https://docs.ccxt.com/?id=order-structure>`
        Norderszorder::rk   r   r\   rD   rw   FT)
r   rn   r   r~   r}   rb   rp   r   r   filter_by_symbol_since_limit)r9   rk   r   r   r[   r   rV   rX   r}   rW   r  s              r;   watch_orderszgrvt.watch_orders  sw      ++F33!!!!!!!!!!!!!!!!!!	>  ***\****[[((F  VH-=!=>>>\C/&,>??? "
 
 ..}dkk'SY>Z>Z\eglmmmmmmmm? 	3OOFE22E00tTTTr<   c                    |                      |d          }| j        0|                     | j        dd          }t	          |          | _        |                     |          }| j                            |           |                    | j        d           |                     | j        |d         d d d          }|                    |d|d         z              d S )Nr   ordersLimitr   r  rk   Tzorders::)	r   r  rh   r4   r   parse_ws_orderr~   r   r  )r9   r=   rR   r   r   orderordersForSymbols          r;   rO   zgrvt.handle_order  s    B ~~gv..;%%dlM4HHE077DK##D))5!!!t{H---;;DKxZ^`dfjkk
U8_(DEEEEEr<   c                 .    |                      ||          S r   )parse_order)r9   r  r}   s      r;   r  zgrvt.parse_ws_orderc  r   r<   c                    |                      |d          }|                     |d          }||                     |          }| j        dz   |z   }|                     |d          }|                     | j        d         ||           |                     | j        d         ||           |                     | j        d         ||           t          | j        dz   |z             dS )Nerrorcode rR   exactbroadF)r   rP   jsonr\   throw_exactly_matched_exception
exceptionsthrow_broadly_matched_exceptionr   )r9   r=   responser  	errorCodebodyfeedbackrR   s           r;   rH   zgrvt.handle_error_messageg  s     x11$$UF33	 99X&&Dw}t+H&&ui88G001I9V^___001I7T\]]]001I7T\]]]# 4555ur<   )Tr   )2__name__
__module____qualname__r   r8   r   rU   r   r   dictrb   r]   r   rr   r   r   ro   rI   r   r	   r   r   r   rJ   r   listr   r   rK   r   r   r   r   rL   r   r   r   rM   r  r   r  rN   r
  r
   r  rO   r  r   rH   __classcell__)r:   s   @r;   r   r      s       &# & & & & & &P6$V 6$ 6$ 6$ 6$pm md3i m$ m[_`c[d m  @C m m m m   68   F     6:" #E #E7 #E #E #E #E #EJU4F U4 U4 U4 U4n2 2 2 2 <@d[] S S SS S Sbfglbm S S S S OSaenp !S !Sd3i !S !S[^ !Suyz  vA !S !S !S !SF#3F #3 #3 #3 #3J/ / / / ?CQUdhqs ) ) ) )3 )^a )x|  ~B  yC ) ) ) )& aesw  AC  E  E$tCy/  EZ]  Emp  E  E  E  ED'16 '1 '1 '1 '1R/ /D / / / / @DB P PS P PS\ P P P P  SW_a &! &!$s) &!C &!fo &! &! &! &!P6/ 6/ 6/ 6/ 6/p )+ B B B B. 37TX\eg  S  SC  Ss  SRU  Slpqvlw  S  S  S  SD+2f +2 +2 +2 +2Z/ / / / 8<$]ajl "_ "_W "_C "_WZ "_quv~q "_ "_ "_ "_H&2 &2 &2P5 5 5 5 04$UYbd U U UC Us Uimnsit U U U UBIF6 IF IF IF IFV/ /E / / / /6         r<   r   )ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   r   r   ccxt.base.typesr   r   r	   r
   r   r   r   r   r   r   r   !ccxt.async_support.base.ws.clientr   typingr   ccxt.base.errorsr   r   r   async_supportr    r<   r;   <module>r6     sG       A  A  A  A  A  A  A  A  A  A  A  A l l l l l l l l l l l l l l l l l l l l l l l l l l 4 4 4 4 4 4       * * * * * * 0 0 0 0 0 0 . . . . . .m m m m m4" m m m m mr<   