
    ":h                         d dl Zd dlmZmZ d dl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y)    N)
ArrayCacheArrayCacheBySymbolById)AnyBalancesIntOrder	OrderBookStrTickerTrade)Client)List)AuthenticationError)
BadRequest)ChecksumErrorc            
           e Zd Zdef fdZi fdZi fdZd Zddi fdede	d	e
fd
Z fdZd ZdefdZdefdZdefdZi fd	edefdZddi fd	edededee   fdZdi fd	ededefdZdddi fd	e
dededee   fdZi fdefdZdefdZd2dZd2dZ defdZ!dedefdZ"d2dZ#defd Z$defd!Z%defd"Z&defd#Z'defd$Z(d%efd&Z)d' Z*d( Z+defd)Z,d* Z-defd+Z.defd,Z/defd-Z0defd.Z1defd/Z2defd0Z3d1 Z4 xZ5S )3poloniexfuturesreturnc                     | j                  t        t        |          i ddddddddddddd	dd
dddddddddddddddddddddd dddddiiddddiddiddddddi dd d!d"d#d$      S )%NwsTcancelAllOrdersWsFcancelOrdersWscancelOrderWscreateOrderWseditOrderWsfetchBalanceWsfetchOpenOrdersWsfetchOrderWsfetchTradesWs
watchOHLCVwatchOrderBookwatchTickerwatchTickerswatchTradeswatchTradesForSymbolswatchBalance)watchOrderswatchMyTradeswatchPositionwatchPositionsapiz)wss://futures-apiws.poloniex.com/endpoint  method/contractMarket/ticker/contractMarket/tradeOrders/contractMarket/level2      )r-   snapshotDelaysnapshotMaxRetrieschecksum)tradesLimitordersLimitr"   r'   r!   streamLimitstreamBySubscriptionsHashstreamIndexi0u  g       @)	keepAlivemaxPingPongMisses)hasurlsoptions	streaming)deep_extendsuperr   describe)self	__class__s    R/var/www/html/turnos/venv/lib/python3.12/site-packages/ccxt/pro/poloniexfutures.pyrD   zpoloniexfutures.describe   sn   ot E Gd#U !%  	
   u !% $U    e !$ t  t  (!" #$  $!&!%"'+0 E  $#6  ;  7%&*+ $	#  !-/!#( #%(a4J
 4 4	    c                    K   |rdnd}| j                  | j                  di       }||v r||   }| d {   S | j                  | j                  ||      ||<   || j                  d<   ||   }| d {   S 7 B7 w)Nprivatepublicr?   )
safe_valuer@   spawnnegotiate_helper)rE   privateChannelparams	connectIdr?   storedFuturefutures          rG   	negotiatezpoloniexfutures.negotiateI   s     !/IX	t||VR8	?L%%% **T%:%:NFSY#Vi| & s!   2A;A7=A;2A93A;9A;c                   K   d }|rdnd}	 |r| j                  |       d {   }n| j                  |       d {   }| j                  |di       }| j                  |dg       }| j                  |d      }| j                  |d      }| j	                  |d      }	| j	                  |d      }
|	d	z   | j                  |
||d
      z   }| j                  |      }||_        |S 7 7 # t        $ rJ}| j                  | j                  d   |      }|j                  |       | j                  d   |= Y d }~y d }~ww xY ww)NrJ   rK   datainstanceServersr   pingIntervalendpointtoken?)rZ   rO   rQ   r?   )privatePostBulletPrivatepublicPostBulletPublicrL   safe_integersafe_string	urlencodeclientr<   	Exceptionr@   reject)rE   rO   rP   responserQ   rV   rW   firstInstanceServerrX   rY   rZ   resultra   erS   s                  rG   rN   z poloniexfutures.negotiate_helperX   sN    !/IX	'	0!%!>!>v!FF& "&!<!<V!DD??8VR8D"ood4ErJO"&///1"E,,-@.QL''(;ZHH$$T73E^dnn"0&6 ' F
 [[(F+FMC G& E  	0__T\\&%99EFMM!V$Y/		0sP   	D>C( C$C( C&B&C( #D>$C( &C( (	D;1A D61D>6D;;D>c                 ~    | j                  | j                  | j                  dd      d      }|| j                  d<   |S )N	requestIdr      )sumr^   r@   )rE   ri   s     rG   
request_idzpoloniexfutures.request_id   s9    HHT..t||[!LaP	$-[!rH   Nname	isPrivatesymbolc                   K   | j                  |       d{   }|| j                  |      }|d   }|d|z   z  }|}	| j                  ||	       d{   }
| j                         }|d||d|
d}d|i}||}n| j	                  ||      }| j	                  ||      }| j                  ||	|||       d{   S 7 7 i7 w)a  
 @ignore
        Connects to a websocket channel
        :param str name: name of the channel and suscriptionHash
        :param bool isPrivate: True for the authenticated url, False for the public url
        :param str symbol: is required for all public channels, not required for private channels(except position)
        :param dict subscription: subscription parameters
        :param dict [params]: extra parameters specific to the poloniex api
        :returns dict: data from the websocket stream
        Nid:	subscribeT)rq   typetopicrO   rd   tunnelId)rT   marketstreamrl   extendwatch)rE   rm   rn   ro   subscriptionrP   urlrw   marketIdmessageHashrv   ri   rs   subscriptionRequestrequests                  rG   rs   zpoloniexfutures.subscribe   s      NN9--[[(Fd|HC(N"DS+66OO%	' 
	 )%
 .L;;':LIL++i0ZZ['4ATUUU1 . 7$ Vs4   CB;;CB=A"C6B?7C=C?Cc                 L    i | j                   d<   t        t        |   ||       y )Nr:   )r@   rC   r   on_close)rE   ra   errorrF   s      rG   r   zpoloniexfutures.on_close   s#    4601ot-fe<rH   c                   K   | j                  | j                  di       }| j                  ||      }|| j                  | j                  dd      }| j                  | j                  d      }|dz   }||z  }|| j                  d<   | j	                  |      }d|z   }|| j                  d   |<   d|z   }	|	d|d	d
}
|	| j
                  d}| j                  ||	|
|	|       d {    |S 7 w)Nr:   r;   r6   r9   rj   zstream-ztunnel:
openTunnelT)rq   rt   newTunnelIdrd   )rq   r-   )rL   r@   r_   r^   number_to_stringhandle_new_streamrz   )rE   r|   subscriptionHashr:   rx   r;   r9   normalizedIndexstreamIndexStringr~   r   r{   s               rG   rx   zpoloniexfutures.stream   s    $(OODLLB]_a$b!!!";=MN>++DLL-LK//$,,FK%/K)K7O*5DLL' $ 5 5o F!22FJPDLL456FG#f,K!$% 	G "00"L **S+w\RRR Ss   CC*!C("C*ra   c                     | j                  |d      }| j                  |d      }| j                  i |      | j                  |<   y )Nro   limit)r_   r^   
order_book
orderbooks)rE   ra   messager{   ro   r   s         rG   handle_order_book_subscriptionz.poloniexfutures.handle_order_book_subscription   s?    !!,9!!,8"&//"e"<rH   c                     | j                  |d      }| j                  |j                  d      }| j                  ||i       }| j                  |d      }|
 ||||       |S )Nrq   r-   )r_   index_bysubscriptionsrL   )rE   ra   r   rq   subscriptionsByIdr{   r-   s          rG   handle_subscription_statusz*poloniexfutures.handle_subscription_status   sg     gt, MM&*>*>E'8"bAx867L1rH   c                 L    | j                  |d      }|j                  ||       y )Nrq   r_   resolve)rE   ra   r   r{   r~   s        rG   r   z!poloniexfutures.handle_new_stream   s$     &&w5w,rH   c                    K   | j                          d{    | j                  |      }d}| j                  |d|d|       d{   S 7 47 w)a  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

        https://api-docs.poloniex.com/futures/websocket/public#get-real-time-symbol-ticker

        :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>`
        Nr.   F)load_marketsro   rs   )rE   ro   rP   rm   s       rG   watch_tickerzpoloniexfutures.watch_ticker   sS      !!!V$'^^D%vFFF 	" Gs!   AA/AAAAsincer   c                   K   | j                          d{    | j                  | j                  d      }| j                  |dd      }| j	                  |dd|      \  }}| j                  |      }| j                  |d|d|       d{   }| j                  r|j                  ||      }| j                  |||dd      S 7 7 9w)	a>  
        get the list of most recent trades for a particular symbol

        https://api-docs.poloniex.com/futures/websocket/public#full-matching-engine-datalevel-3

        :param str symbol: 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
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
        Nr$   r-   z/contractMarket/executionrm   F	timestampT)
r   rL   r@   r_   handle_option_and_paramsro   rs   
newUpdatesgetLimitfilter_by_since_limit)rE   ro   r   r   rP   r@   rm   tradess           rG   watch_tradeszpoloniexfutures.watch_trades   s      !!!//$,,>3NO44VXvtTfV$~~dE64HH??OOFE2E))&%TRR 	"
 Is"   CCA3C
C8CCc                   K   | j                          d{    | j                  | j                  d      }| j                  |dd      }| j	                  |dd|      \  }}|dk(  r;|9|dk7  r|dk7  rt        | j                  dz         |d	| j                  |      z   z  }||| j                  d
}| j                  |d|||       d{   }|j                         S 7 7 w)a  
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

        https://api-docs.poloniex.com/futures/websocket/public#level-2-market-data

        :param str symbol: unified symbol of the market to fetch the order book for
        :param int [limit]: not used by poloniexfutures watchOrderBook
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param str [params.method]: the method to use. Defaults to /contractMarket/level2 can also be /contractMarket/level3v2 to receive the raw stream of orders
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
        Nr!   r-   r0   rm   r1   2   z[ watchOrderBook limit argument must be none, 5 or 50 if using method /contractMarket/level2Depth)ro   r   r-   F)r   rL   r@   r_   r   r   rq   r   r   rs   r   )rE   ro   r   rP   r@   rm   r{   	orderbooks           rG   watch_order_bookz poloniexfutures.watch_order_book  s      !!!//$,,0@A3KL44VXvtTf++0Azerk   ,I  "I  J  JGd33E:::D99

 ..uflFSS	   	" Ts"   C"CB2C"	C 
C" C"c                   K   | j                          d{    | j                  | j                  d      }| j                  |dd      }| j	                  |ddd|       d{   }| j
                  r|j                  ||      }| j                  ||||      }t        |      }|dk(  r| j                  ||||       d{   S |S 7 7 f7 
w)a  
        watches information on multiple orders made by the user

        https://api-docs.poloniex.com/futures/websocket/user-messages#private-messages

        :param str symbol: filter by 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
        :param str [params.method]: the method to use will default to /contractMarket/tradeOrders. Set to /contractMarket/advancedOrders to watch stop orders
        :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        Nr'   r-   r/   Tr   )
r   rL   r@   r_   rs   r   r   filter_by_symbol_since_limitlenwatch_orders)	rE   ro   r   r   rP   r@   rm   orderslengths	            rG   r   zpoloniexfutures.watch_orders,  s      !!!//$,,>3PQ~~dD$fEE??OOFE2E22665%PVQ;**65%HHH 	" F Is5   CCAC"C	#AC CC	CCc                    K   | j                          d{    d}| j                  |ddd|       d{   S 7 #7 w)a|  
        watch balance and get the amount of funds available for trading or funds locked in orders

        https://api-docs.poloniex.com/futures/websocket/user-messages#account-balance-events

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
        N/contractAccount/walletT)r   rs   )rE   rP   rm   s      rG   watch_balancezpoloniexfutures.watch_balanceE  sB      !!!(^^D$dFCCC 	"Cs   >:><>>c                 z   | j                  |di       }| j                  |d      }|| j                  |      }|d   }d|z   }| j                  | j                  |      }|7| j	                  | j
                  dd      }	t        |	      }|| j                  |<   |j                  |       |j                  ||       |S )NrV   ro   z/contractMarket/execution:r7   r,   )	rL   r_   parse_ws_trader   r^   r@   r   appendr   )
rE   ra   r   rV   r}   tradero   r~   storedr7   s
             rG   handle_tradezpoloniexfutures.handle_tradeR  s    * w3##D(3''-E8_F6AK__T[[&9F~"//mTR#K0&,F#MM% NN6;/rH   c                    | j                  |d      }| j                  ||      }| j                  |dd      }| j                  || j                  |d      | j                  |d      || j	                  |      | j                  |dd      d | j                  |d      d | j                  |d      | j                  |d	d
      d d d|      S )Nro   tsư>tradeIdtakerOrderIdmakerOrderIdsideprice	matchSizesizeinforq   ro   r   datetimeorderrt   r   takerOrMakerr   amountcostfee)r_   safe_marketsafe_integer_product
safe_tradeiso8601safe_string_2)rE   r   rw   r}   r   s        rG   r   zpoloniexfutures.parse_ws_tradev  s    $ ##E84!!(F3--eT8D	""5)4&&vx8"Y/''~~N$$UF3 %%eW5((VD 
  	rH   c                    | j                  |d      }| j                  |d      }| j                  || j                  |d      | j                  ||      || j	                  |      | j                  |d      | j                  |d      | j                  |d      | j                  |d      | j                  |d      | j                  |d	      d d | j                  |d
      | j                  |d      dd|      S )N	tradeTimero   r   orderIdrt   r   	matchRoler   tradeAmounttradeFeefeeCurrency)rater   currencyr   )r^   r_   r   safe_symbolr   safe_string_lower)rE   r   rw   r   r}   s        rG   parse_ws_order_tradez$poloniexfutures.parse_ws_order_trade  s    : %%e[9	##E84""5)4&&x8"Y/%%eY7**5&9$$UF3 225+F%%eW5&&um<((
; ,,UMB 
$ % 	rH   c                    | j                  |di       }| j                  }|.| j                  | j                  d      }t	        |      }|| _        d}| j                  |      }|j                  |       |j                  ||       |S )NrV   r8   r/   )rL   r   r^   r@   r   parse_ws_orderr   r   )rE   ra   r   rV   r   r   r~   parseds           rG   handle_orderzpoloniexfutures.handle_order  s    f w3>%%dllMBE+E2F DK3$$T*fv{+rH   statusrt   c                 l    dddd}| j                  ||      }|dddd}| j                  |||      }|S )z
 @ignore
        :param str status: "match", "open", "done"
        :param str type: "open", "match", "filled", "canceled", "update"
        :returns str:
        canceledclosed)r   cancelfilledopen)r   matchdone)r_   )rE   r   rt   typesparsedStatusstatusess         rG   parse_order_statusz"poloniexfutures.parse_order_status  sZ     # 

 ''t4 H
  ++HffELrH   c           	         | j                  |d      }| j                  |d      }| j                  |d      }| j                  |ddd      }| j                  |d      }| j                  |d      }| j                  i d	|d| j                  ||      d
|d|d|d| j	                  |      dd d| j                  |d      dd dd d| j                  |d      d| j                  |dd      d| j                  |d      dd d| j                  |d      dd dd | j                  |d      | j                  |d      | j                  ||      d d d      S )Nr   	clientOidro   	orderTimer   r   r   rt   r   rq   clientOrderIdr   r   lastTradeTimestamp	orderTypetimeInForcepostOnlyr   r   
orderPrice	stopPricetriggerPricer   r   r   average
filledSize
remainSize)r   	remainingr   r   r   )r_   safe_integer_product_2
safe_orderr   r   r   r   )	rE   r   rw   rq   r   r}   r   r   messageTypes	            rG   r   zpoloniexfutures.parse_ws_order#  s   H eY/((<##E84//{D(S	!!%2&&uf5  
E 
d&&x8 
 " 
 ]	 

  
 Y/ 
 !$ 
 D$$UK8 
 4 
  
 D$$UF3 
 T''wE 
 ))%= 
 D 
 d&&uf5 
  D! 
" t# 
$ &&ul;))%>--fkB- 
  	rH   c                     | j                  |di       }| j                  |d      }| j                  |      }|2| j                  |      }|| j                  |<   |j                  ||       |S )NrV   ru   )rL   r_   get_symbol_from_topicparse_tickertickersr   )rE   ra   r   rV   r~   ro   tickers          rG   handle_tickerzpoloniexfutures.handle_tickerf  sp    B w3&&w8++K8&&t,F#)DLL NN6;/rH   c                 |    | j                  |d      }| j                  |d      }|dk(  ry |j                  ||       y )Nru   subjectreceivedr   )rE   ra   r   r~   r  s        rG   handle_l3_order_bookz$poloniexfutures.handle_l3_order_book  sB    X &&w8""7I6j w,rH   c                     | j                  |d      }|j                  d      dk\  }|r| j                  ||       y | j                  ||       y )Nru   r   r   )r_   findhande_l2_snapshothandle_l2_order_book)rE   ra   r   ru   
isSnapshots        rG   handle_level_2zpoloniexfutures.handle_level_2  sO       '2ZZ(A-
""673!!&'2rH   c                    | j                  |di       }| j                  |dd      }| j                  |      }| j                  | j                  |      }|2| j	                  i       | j                  |<   | j                  |   }||d<   | j                  |d      }|kt        |j                        }| j                  ddd      }	||	k(  r"d	}
| j                  | j                  ||||
i        |j                  j                  |       y 	 | j                  ||       |j                  ||       y # t        $ r)}| j                  |= |j                  ||       Y d }~y d }~ww xY w)
NrV   ru    ro   noncer!   r3   r1   r   )rL   r_   r  r   r   r^   r   cachehandle_optionrM   load_order_bookr   handle_deltar   rb   rc   )rE   ra   r   rV   r~   ro   	orderBookr  cacheLengthr3   r   rg   s               rG   r  z$poloniexfutures.handle_l2_order_book  sM   ( w3&&w<++K8OODOOV<	&*oob&9DOOF#/I"(Ih!!)W5=ioo.K ../?RSTMm+

4//feUWXOO""4(	*i.NN9k2 	*'MM![))	*s   $D- -	E6EEc                 $   | j                  |di       }| j                  |dd      }| j                  |      }| j                  |d      }| j	                  |||dd      }| j                  |      }|| j                  |<   |j                  ||       y )NrV   ru   r  r   bidsasks)rL   r_   r  r^   parse_order_bookr   r   r   )	rE   ra   r   rV   r~   ro   r   snapshotr   s	            rG   r  z!poloniexfutures.hande_l2_snapshot  s    2 w3&&w<++K8%%dK8	((vy&&QOOH-	"+y+.rH   ru   c                 j    |j                  d      }| j                  |d      }| j                  |      S )Nrr   rj   )splitr_   r   )rE   ru   
splitTopicr}   s       rG   r  z%poloniexfutures.get_symbol_from_topic#  s3    [[%
##J2))rH   c                    | j                  |d      }| j                  |d      }| j                  |d      }||dz   kD  ryt        dt        |            D ]%  }||   }| j                  |d      }||dz
  k(  s#|c S  t        |      S )Nr   r  sequencerj   r6   )rL   r^   ranger   )	rE   r   r  
firstDeltar  firstDeltaSequenceideltar"  s	            rG   get_cache_indexzpoloniexfutures.get_cache_index(  s    __UA.
!!)W5!..z:F	)q#e*% 	A!HE((
;H1$		
 5zrH   c                    | j                  |d      }| j                  |d      }| j                  |d      }||kD  ry ||k7  r?| j                  ddd      }|r*t        | j                  dz   | j	                  d      z         | j                  |d	      }t        d
t        |            D ]o  }||   }	|	j                  d      }
| j                  |
d
      }| j                  |
d      }| j                  |
d      }|dk(  r|d   n|d   }|j                  ||       q | j                  |d      }||d<   | j                  |      |d<   ||d<   y )Nr"  lastSequencer  r!   r5   T r  changesr   ,rj      buyr  r  r   r   )r^   r  r   rq   orderbook_checksum_message	safe_listr#  r   r  safe_numberr_   storer   )rE   r   r'  r"  r*  r  r5   r,  r&  changesplitChanger   r   r   orderBookSider   s                   rG   r  zpoloniexfutures.handle_delta5  sc    $$UJ7((?!!)W58L ))*:JMH#DGGcMD4S4STV4W$WXX..	2q#g,' 	-AQZF ,,s+K$$[!4E##K3D##K3D26%-If-iPVFWMt,	- %%e[9	!*	+ $Y 7	*%	'rH   c                     | j                  |dg       }d}| j                  |d      }| j                  |      }|d   }| j                  |      | j                  |<   |j                  | j                  |   |       |S )NrV   r   r   code)rL   r_   r   parse_ws_balancebalancer   )rE   ra   r   rV   r~   
currencyIdr   r8  s           rG   handle_balancezpoloniexfutures.handle_balanceV  sz    < w3/%%dJ7
==,!2248Tt||D);7rH   c                    | j                  |d      }||| j                  |      d}| j                  |d      }| j                  |      }| j	                         }| j                  |d      |d<   |||<   | j                  |      S )Nr   )r   r   r   r   availableBalancefree)r^   r   r_   safe_currency_codeaccountsafe_balance)rE   rd   r   rf   r;  r8  
newAccounts          rG   r9  z poloniexfutures.parse_ws_balance}  s     %%h<	"Y/

 %%h
;
&&z2\\^
!--h8JK
6!t  ((rH   c                     |S N rE   ra   r   s      rG   handle_system_statusz$poloniexfutures.handle_system_status  s	     rH   c                    | j                  |d      }| j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  d}| j                  ||      }|
 |||       y y )Nr  )authr  r   updater   level2r  zsnapshot.24hr   orderChange	stopOrderzavailableBalance.changezorderMargin.change)	r_   handle_authenticater	  r  r  r   r   r<  rL   )rE   ra   r   r  methodsr-   s         rG   handle_subjectzpoloniexfutures.handle_subject  s    ""7I6,,11--//--))(( ..&&,,**'+':':"&"5"5
 '267# rH   c                 >    t        | j                               }|ddS )Nping)rq   rt   )strrl   )rE   ra   rq   s      rG   rS  zpoloniexfutures.ping  s#    "#
 	
rH   c                 0    | j                         |_        |S rE  )millisecondslastPongrG  s      rG   handle_pongzpoloniexfutures.handle_pong  s    ++-rH   c                 &    |j                  |       y rE  )rc   rG  s      rG   handle_error_messagez$poloniexfutures.handle_error_message  s     	grH   c                     | j                  |d      }| j                  | j                  | j                  | j                  | j
                  d}| j                  ||      }|
 |||       y y )Nrt   )welcomeackr   pongr   )r_   rH  r   rQ  rX  rZ  rL   )rE   ra   r   rt   rP  r-   s         rG   handle_messagezpoloniexfutures.handle_message  so    00022**$$..
 $/67# rH   c                 ,   | j                  |d      }| j                  |d      }d}|r|j                  ||       |S t        | j                  dz   | j	                  |      z         }|j                  ||       ||j                  v r|j                  |= |S )NrV   successauthenticatedr+  )rL   r   r   rq   jsonrc   r   )rE   ra   r   rV   ra  r~   r   s          rG   rO  z#poloniexfutures.handle_authenticate  s     w///$	2%NN7K0 	 (#		'8J(JKEMM%-f222((5rH   rE  )6__name__
__module____qualname__r   rD   rT   rN   rl   rT  boolr
   rs   r   rx   r   r   r   r   r   r   r   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r(  r  r<  r9  rH  rQ  rS  rX  rZ  r_  rO  __classcell__)rF   s   @rG   r   r      s9   5# 5n 68  =? +Z
 IM[_hj #VC #VD #V# #VJ=4=V =
 - - 68 G GF G <@d[] S SS S Sbfglbm S, @DB !S ! !S\ !8 04$UYbd  C s imnsit 2 *, D D"6 "H#J1f=6 =~ C ,AF(F (T1-6 1-f3V 3$**6 **X /  /D*3 *
&B%V %N)66 $V $*
6 
& 	6 	$V $rH   r   )ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   ccxt.base.typesr   r   r   r   r	   r
   r   r   !ccxt.async_support.base.ws.clientr   typingr   ccxt.base.errorsr   r   r   async_supportr   rF  rH   rG   <module>rq     s?     O T T T 4  0 ' *\d((88 \rH   