
    ":hm}                       d dl Zd dlmZmZmZmZ d dlZd dl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 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@                  jB                        Z!y)    N)
ArrayCacheArrayCacheBySymbolByIdArrayCacheBySymbolBySideArrayCacheByTimestamp)
AnyBalancesIntOrder	OrderBookPositionStrStringsTickerTrade)Client)List)ExchangeError)AuthenticationError)ArgumentsRequired)
BadRequest)	BadSymbol)NetworkError)InvalidNonce)ChecksumErrorc            
       j    e Zd Zdef fdZd Zi fdedefdZde	fdZ
ddi fded	ed
edee   fdZde	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i fded
edefdZde	fdZd Zd Zd Zde	fdZde	fdZde	fdZdddi fded	ed
edee   fdZd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!d1dZ"d1dZ#dddi fde$d	ed
edee%   fdZ&d  Z'i f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e	fd'Z/de	fd(Z0de	fd)Z1de	fd*Z2i fde	fd+Z3d1d,Z4d2d-Z5di fd.Z6i i fd/Z7i fd0Z8 xZ9S )3htx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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.dd/d0did1d2id3dd4t        t
        t        t        t        t        t        d5iid6      S )7NwsTcreateOrderWsFeditOrderWsfetchOpenOrdersWsfetchOrderWscancelOrderWscancelOrdersWscancelAllOrdersWsfetchTradesWsfetchBalanceWswatchOrderBookwatchOrderswatchTickerswatchTickerwatchTradeswatchTradesForSymbolswatchMyTrades)watchBalance
watchOHLCVapizwss://{hostname}/wszwss://{hostname}/ws/v2zwss://{hostname}/feed)publicprivatefeedz!wss://api.hbdm.com/linear-swap-wsz+wss://api.hbdm.com/linear-swap-notification)r3   r4   zwss://api.hbdm.com/wszwss://api.hbdm.com/notification)linearinversezwss://api.hbdm.com/swap-wsz$wss://api.hbdm.com/swap-notification)r7   r6   )spotfutureswapzwss://api-aws.huobi.pro/wszwss://api-aws.huobi.pro/ws/v2z wss://api.hbdm.vn/linear-swap-wsz*wss://api.hbdm.vn/linear-swap-notificationzwss://api.hbdm.vn/wszwss://api.hbdm.vn/notificationzwss://api.hbdm.vn/swap-wsz#wss://api.hbdm.vn/swap-notification)r2   zapi-aws     )
maxRetrieschecksumgunzipnamemarket.{marketId}.detail)tradesLimit
OHLCVLimitr2   r)   r   r,   exact)zbad-request200220212001201120404007)hasurlsoptions
exceptions)deep_extendsuperr   describer   r   r   )self	__class__s    F/var/www/html/turnos/venv/lib/python3.12/site-packages/ccxt/pro/htx.pyrQ   zhtx.describe   s-   c4 9 ;d u $U	
    !% $U   !% !$ t  t t  (!"  #$ !%"',  +@+C(?% /R/\+"
 /F/P,"	' /K/U,"
 /R/\+"	%! < +G+J(?% /Q/[+"
 /E/O,"	' /Q/[+"
 /J/T,"	%!$;8:<|  $""# $#
 d 6   '1 3 * ) ) * *
Eo>
 o o	    c                     | j                  | j                  | j                  dd      d      }|| j                  d<   t        |      S )N	requestIdr      )sumsafe_integerrM   str)rR   rW   s     rT   
request_idzhtx.request_id   s=    HHT..t||[!LaP	$-[!9~rU   symbolc                   K   | j                          d{    | j                  |      }|d   }| j                  | j                  di       }| j	                  |dd      }|dk(  r |d   dk7  rt        | j                  d	z         | j                  |d
|d   i      }| j                  |d   |d         }| j                  |||d|       d{   S 7 7 w)aL  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec53561-7773-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c33ab2-77ae-11ed-9966-0242ac110003

        :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]   r,   r@   rA   zmarket.{marketId}.tickertyper8   zx watchTicker() with name market.{marketId}.ticker is only allowed for spot markets, use market.{marketId}.detail insteadmarketIdidr6   )
load_marketsmarket
safe_valuerM   safe_stringr   ra   implode_paramsget_url_by_market_typesubscribe_public)rR   r]   paramsrc   rM   topicmessageHashurls           rT   watch_tickerzhtx.watch_ticker   s      !!!V$!//$,,rB  &2LM..6&>V3KTWW  (b  b  c  c))%*fTl1KL))&.&:JK**3T6RRR 	" Ss"   CCB6CCCCclientc                 ~   | j                  |di       }| j                  |d      }|j                  d      }| j                  |d      }| j                  |      }| j	                  ||      }| j                  |d      }	|	|d<   | j                  |	      |d<   |d   }
|| j                  |
<   |j                  ||       |S )	Ntickch.rX   ts	timestampdatetimer]   )rd   re   splitsafe_marketparse_tickeriso8601tickersresolve)rR   rn   messagerp   rq   partsr`   rc   tickerrt   r]   s              rT   handle_tickerzhtx.handle_ticker   s    B w3gt,##E1-!!(+""40OOGT2	'{!\\)4z!%Vvr"rU   Nsincelimitc                 T  K   | j                          d{    | j                  |      }|d   }d|d   z   dz   }| j                  |d   |d         }| j                  |||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://www.htx.com/en-us/opend/newApiPages/?id=7ec53b69-7773-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c33c21-77ae-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c33cfe-77ae-11ed-9966-0242ac110003

        :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]   market.ra   z.trade.detailr_   r6   rt   T)rb   rc   rg   rh   
newUpdatesgetLimitfilter_by_since_limit)	rR   r]   r   r   ri   rc   rk   rl   tradess	            rT   watch_tradeszhtx.watch_trades   s      !!!V$!&,.@))&.&:JK,,S&+tVTT??OOFE2E))&%TRR 	"
 Us"   B(B$AB(,B&-8B(&B(c                 6   | j                  |di       }| j                  |di       }| j                  |d      }|j                  d      }| j                  |d      }| j                  |      }|d   }	| j                  | j                  |	      }
|
7| j                  | j                  dd      }t        |      }
|
| j                  |	<   t        d	t        |            D ](  }| j                  ||   |      }|
j                  |       * |j                  |
|       |S )
Nrp   datarq   rr   rX   r]   rB   r;   r   )rd   re   rv   rw   r   rZ   rM   r   rangelenparse_tradeappendr{   )rR   rn   r|   rp   r   rq   r}   r`   rc   r]   tradesCacher   itrades                 rT   handle_tradeszhtx.handle_trades   s   * w3tVR0gt,##E1-!!(+!oodkk6:%%dllM4HE$U+K"-DKKq#d)$ 	&A$$T!Wf5Eu%	& 	{B'rU   1mc                   K   | j                          d{    | j                  |      }|d   }| j                  | j                  ||      }d|d   z   dz   |z   }| j	                  |d   |d         }	| j                  |	||d|       d{   }
| j                  r|
j                  ||      }| j                  |
||dd	      S 7 7 9w)
aj  
        watches historical candlestick data containing the open, high, low, and close price, and the volume of a market

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec53241-7773-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c3346a-77ae-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c33563-77ae-11ed-9966-0242ac110003

        :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]   r   ra   z.kline.r_   r6   r   T)	rb   rc   re   
timeframesrg   rh   r   r   r   )rR   r]   	timeframer   r   ri   rc   intervalrk   rl   ohlcvs              rT   watch_ohlcvzhtx.watch_ohlcv  s      !!!V$!##DOOY	J&,.:XE))&.&:JK++CdFSS??NN651E))%q$GG 	" Ts"   CCA5CC8CCc                 x   | j                  |d      }|j                  d      }| j                  |d      }| j                  |      }|d   }| j                  |d      }| j                  |      }	| j	                  | j
                  |i       | j
                  |<   | j	                  | j
                  |   |	      }
|
:| j                  | j                  dd      }t        |      }
|
| j
                  |   |	<   | j	                  |d      }| j                  ||      }|
j                  |       |j                  |
|       y )	Nrq   rr   rX   r]   r<   rC   r;   rp   )re   rv   rw   find_timeframerd   ohlcvsrZ   rM   r   parse_ohlcvr   r{   )rR   rn   r|   rq   r}   r`   rc   r]   r   r   storedr   rp   parseds                 rT   handle_ohlcvzhtx.handle_ohlcv-  s   " gt,##E1-!!(+!##E1-''1	"oodkk62FFV!4i@>%%dllL$GE*51F-3DKK	*w/!!$/fvr"rU   c                 2  K   | j                          d{    | j                  |      }|d   }ddg}|	|d   rdnd}| j                  ||      st        | j                  dz         d}|d   rd|d   z   d	z   t        |      z   }nd|d   z   d
z   t        |      z   dz   }| j                  |d   |d   dd      }| j                  }|d   s| j                  |      }d|d<   d}| j                  |||||       d{   }	|	j                         S 7 7 w)a  

        https://huobiapi.github.io/docs/dm/v1/en/#subscribe-market-depth-data
        https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#subscribe-incremental-market-depth-data
        https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-subscribe-incremental-market-depth-data

        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
        :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
        Nr]         r8   z8 watchOrderBook market accepts limits of 20 and 150 onlyr   ra   z.mbp.z.depth.size_z
.high_freqr_   r6   FTincremental	data_type)rb   rc   in_arrayr   ra   r[   rg   handle_order_book_subscriptionextendrh   r   )
rR   r]   r   ri   rc   allowedLimitsrk   rl   method	orderbooks
             rT   watch_order_bookzhtx.watch_order_bookP  s@     !!!V$!S	
 =!&>CrE}}UM2*d dee&>#fTl2W<s5zIK#fTl2^Cc%jPS__K))&.&:JESWX44f~[[(F"/F;F//V[&RXYY	  1 	". Zs"   DDC'D>D?DDc                 0   | j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }	 | j                  |   }| j                  |d      }	|j                  }
| j                  |
di       }| j                  |	|      }| j                  |d      }| j                  |d      }| j                  |	d	      }||d
<   | j                  |d      }||d<   | j                  |d      }| j                  ||      }|j                  ||       |||k  r| j                  ddd      }| j                  |dd      }||k  ri||j                  v r| j                  |d      }| j                  d||z
        }||d<   ||j                  |<   | j                  || j                  |||       y t        | j                  dz   |z   dz   t        |      z   dz         |j!                  |       t#        dt%        |
            D ]  }| j'                  ||
|           g |_        || j                  |<   |j                  ||       y y # t(        $ r6}|j                  |= | j                  |= |j+                  ||       Y d }~y d }~ww xY w)Nr]   rk   ra   lastTimestampr   r   rp   
prevSeqNumseqNumnoncers   r   r)   r=   r<   numAttemptsrX   r;   zC failed to synchronize WebSocket feed with the snapshot for symbol z in z	 attempts)re   rZ   
orderbooksrd   cacheparse_order_book
order_bookr{   handle_optionsubscriptionsrY   delaywatch_order_book_snapshotr   ra   r[   resetr   r   handle_order_book_message	Exceptionreject)rR   rn   r|   subscriptionr]   rk   ra   r   r   r   messagesfirstMessagesnapshotrp   sequencer   snapshotTimestampsnapshotLimitsnapshotOrderBookmaxAttemptsr   	delayTimer   es                           rT   handle_order_book_snapshotzhtx.handle_order_book_snapshotw  s   , !!,9&&|]Cgt,)),H)	*/I??7F3D H??8Q;L,,T6:H??<8D((|<H%%dH5E %HW $ 1 1'4 @,=L) --lGDM $- HNN,b1 eh&6"001A<QRS"//mQO,"f&:&::&*hh{A&>$(HHT=CT3T$U	6A]3<H,,[9

9d.L.LfV]_kl 'tww1v'vy'  CI  (I  LO  P[  L\  (\  _j  (j  k  k)q#h-0 HA2268A;GH"$	*3'y+6! ;"  	*$$[1'MM![))	*s    
E4I ?BI 	J,JJc           	      X  K   | j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }| j                  |dd      }	| j                  |      }
| j	                  |
d   |
d	   d
d      }| j                         }||d}||||||	|| j                  d}	 | j                  |||||       d {   }|j                         S 7 # t        $ r)}|j                  |= |j                  ||       Y d }~y d }~ww xY ww)Nrk   r]   r   rs   ri   r   r   r_   r6   FT)reqra   )ra   rk   r]   r   ri   r   r   r   )re   rZ   rd   rc   rg   r\   r   watchr   r   r   r   )rR   rn   r|   r   rk   r]   r   rt   ri   attemptsrc   rl   rW   requestsnapshotSubscriptionr   r   s                    rT   r   zhtx.watch_order_book_snapshot  sD    &&|]C!!,9!!,8%%gt4	x8$$\=!DV$))&.&:JESWXOO%	
 &#&55	&
	*"jji)MabbI??$$ c 	*$$[1MM![))	*sB   CD*C5 C3C5 2D*3C5 5	D'>D"D*"D''D*c                 p    | j                  |d      }| j                  |d      }|j                  ||       y )Nr   rX   )
safe_floatstore)rR   booksidedeltapriceamounts        rT   handle_deltazhtx.handle_delta  s0    q)*uf%rU   c                 b    t        dt        |            D ]  }| j                  |||           y )Nr   )r   r   r   )rR   r   deltasr   s       rT   handle_deltaszhtx.handle_deltas  s0    q#f+& 	3Ahq	2	3rU   c                    | j                  |d      }|j                  d      }| j                  |d      }| j                  |      }|d   }| j                  |   }| j                  |di       }	| j                  |	d      }
| j                  |	d      }| j                  |	d      }| j                  |	d	      }| j                  |d
      }|dk(  r)| j                  |	||      }|j                  |       ||d<   |G||d   kD  r?| j                  ddd      }|r*t        | j                  dz   | j                  |      z         |d   xr ||d   k(  }|d   xr |dz
  |d   k(  }|s|rs| j                  |	dg       }| j                  |	dg       }| j                  |d   |       | j                  |d   |       |r|
n||d<   ||d<   | j                  |      |d<   y y )Nrq   rr   rX   r]   rp   r   r   eventversionrs   r   r   r)   r>   T r8   contractasksbidsrt   ru   )rd   rv   re   rw   r   rZ   r   r   r   r   ra   orderbook_checksum_messager   ry   )rR   rn   r|   rq   r}   r`   rc   r]   r   rp   r   r   r   r   rt   r   r>   spotConditonnonSpotConditionr   r   s                        rT   r   zhtx.handle_order_book_message  s   F __Wd+##E1-!!(+!OOF+	w3""42&&t\:
  w/##D)4%%gt4	J,,T69EHOOH%!(Ig"
Yw5G(G))*:JMH#DGGcMD4S4STZ4[$[\\f~L:79K+K!*-U7Q;)GBT3T+??44D??44Dy0$7y0$7+7WIg%.Ik"$(LL$;Ij! ,rU   c                 l   | j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }|j                  d      }| j                  |d      }| j                  |      }	|	| j                  vrT| j                  |d      }
|
j                  d      }| j                  |d      }| j                  i |      | j                  |	<   | j                  |	   }|!|d   |j                  j                  |       y | j                  ||       |j                  ||       y )	Nrq   rp   r   rr   rX   r<   _r   )re   	safe_dictrv   safe_symbolr   rZ   r   r   r   r   r{   )rR   rn   r|   rk   rp   r   rq   r}   r`   r]   size	sizePartsr   r   s                 rT   handle_order_bookzhtx.handle_order_bookI  s   \ &&w5~~gv.  w/gt,##E1-!!(+$//)##E1-D

3I%%i3E&*oob%&@DOOF#OOF+	M	' 2 :OO""7+**67;NN9k2rU   c                     | j                  |d      }| j                  |      }| j                  |d      }| j                  i |      | j                  |<   |d   r| j                  | j                  |||       y y )Nr]   r   r8   )re   rc   rZ   r   r   spawnr   )rR   rn   r|   r   r]   rc   r   s          rT   r   z"htx.handle_order_book_subscription  sq    !!,9V$!!,8"&//"e"<&>JJt55vwU rU   c                   K   | j                          | j                          d{    d}d}d}d}d}	d}
d}|*| j                  |      }|d   }|d   }|d   rdnd}|d   }nu| j                  | j                  dd	      }| j                  |d|      }| j                  | j                  d
dd      }| j                  |d
|      }| j                  |dd
g      }|d	k(  rUd}|C| j                  | j                  ddd      }| j                  |d|      }| j                  |d      }d|z   dz   |z   }|}	n@| j                  ||||      }| j                  |d      }	| j                  |d      }|dz   dz   }| j                  |	||||       d{   }
| j                  r|
j                  ||      }| j                  |
|||d      S 7 7 :w)aK  
        watches information on multiple trades made by the user

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec53dd5-7773-11ed-9966-0242ac110003

        :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
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
        N*r]   r_   r6   r7   lowercaseIddefaultTyper8   subTypedefaultSubTyper/   mode0ztrade.clearing##r   rX   :r   T)check_required_credentialsrb   rc   re   rM   safe_string_2omit"get_order_channel_and_message_hashsubscribe_privater   r   filter_by_symbol_since_limit)rR   r]   r   r   ri   r_   r`   rc   rk   channelr   r   r   channelAndMessageHashorderMessageHashs                  rT   watch_my_tradeszhtx.watch_my_trades  s     	'')!!![[(FH%F&>D"("2h	Gm,H##DLL-HD##FFD9D((yBRT\]G&&vy'BGYYv	':;F6>D|))$,,QTU''=66208;cADHK!G$($K$KDRY[aci$j!&&'<a@G#//0EqI +S07:K--g{D'SYZZ??OOFE2E00tTTM 	"F [s"   $G	GE%G	G8G	G	c                    d }d }| j                  | j                  dd      }| j                  |d|      }| j                  |d      }||d   j                         nd }||d   nd }	|}
|
}|dk(  r=| j                  |dd      }|dk(  r|
dz   n|
}|}||d	|z   z  }|}||gS |d	z   d
z   }||gS |dk(  r*|	|
d	z   |	j                         z   }|}||gS |
d	z   d
z   }||gS ||
d	z   |z   }|}||gS |
d	z   d
z   }||gS )N	orderTypeordersr   baseIdr6   margincross_crossrr   r   r9   )re   rM   r   lower)rR   r_   r   rc   ri   rk   r   r  
marketCoder  prefix
marginModemarginPrefixs                rT   r   z&htx.get_order_channel_and_message_hash  s   $$T\\;I	$$V[)D	6;/7=7IVM*002PT
&,&8!th))&(GDJ1;w1F6H,VL&K%sZ//%" %% ',s2 %% X! 3,7% %% !3,, %% % 3,3% %% !3,,%%rU   c                   K   | j                          d{    d}d}d}d}|*| j                  |      }|d   }|d   }|d   }|d   rdnd}nu| j                  | j                  dd	      }| j                  |d|      }| j	                  | j                  d
dd      }| j                  |d
|      }| j                  |dd
g      }d}	d}
|d	k(  rd|z   }	|	}
n8| j                  ||||      }| j                  |d      }
| j                  |d      }	| j                  |
|	|||       d{   }| j                  r|j                  ||      }| j                  |||dd      S 7 G7 :w)aK  
        watches information on multiple orders made by the user

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec53c8f-7773-11ed-9966-0242ac110003

        :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>`
        Nr   r]   r_   r   r6   r7   r   r8   r   r   zorders#r   rX   rt   T)rb   rc   re   rM   r   r   r   r   r   r   r   )rR   r]   r   r   ri   r_   r   rc   suffixrk   r   r   r  s                rT   watch_orderszhtx.watch_orders  s     !!![[(FH%F&>DM*F"("2h	G##DLL-HD##FFD9D((yBRT\]G&&vy'BGYYv	':;F6>(61K!G$($K$KDRY[aci$j!&&'<a@G**+@!DK--g{D'SYZZ??OOFE2E))&%TRR; 	"4 [s"   E"EDE"%E &8E" E"c                    | j                  |dd      }| j                  |d      }| j                  |d      }|| j                  |d      }| j                  |      }d }|| j                  |d      }|dk(  r| j	                  ||      }	| j                  |	d      }
|	g}| j                  | j                  |d	d
d            }| j                  |d      }| j                  |d      }|
|||d   | j                  |      | j                  |      d}|}n| j                  ||      }n| j                  ||      }| j                  |dg       }t        |      }|dkD  rO|||d}| j                  |d      | j                  |d      | j                  |d      d}| j                  |||       | j                  -| j                  | j                  dd      }t        |      | _
        | j                  }|j                  |       |j                  | j                  |       |j!                  d|d   z   d      }| j#                  |d      }|j!                  d|z   d      }|j                  | j                  |       y )Nrq   rj   r   contract_coder]   	eventTyper   orderorderStatusstatusclosedexecAmt	remainAmt)ra   r   r  r]   filled	remainingr   )r   rq   r]   ra   r_   side)r  r_   r  ordersLimitr;   rr   r    r  )r   rd   re   rw   parse_order_tradeparse_order_statusparse_numberparse_ws_orderr   handle_my_trader  rZ   rM   r   r   r{   replacesafe_string_lower)rR   rn   r|   rk   r   r`   rc   parsedOrderr  parsedTradeorderIdr   r  r  r  r  	rawTradestradesLengthtradesObjectextendTradeParamsr   cachedOrdersgenericMessageHashlowerCaseBaseIds                           rT   handle_orderzhtx.handle_order  s   R (($@w/##G_=''h7H!!(+(({;IG# #44T6B**;@%001C1CD-Yack1lm))$	: ,,T;?	!$$$X."//7!%!2!29!= $"11$? --gv>K"=Iy>La'%&& "--k4@ ,,[&A ,,[&A+! $$V\;LM;;%%dllM4HE07DK{{K(t{{K0 )00vm7L1LbQ00B/77o8MrRt{{$67rU   c                 8   | j                  |dd      }| j                  |d      }| j                  |dd      }| j                  ||      }| j	                  ||      }| j                  |dd      }| j                  | j                  |dd	            }| j                  |d
d      }	| j                  |dd      }
| j                  |dd      }| j                  |d      }| j                  |d      }| j                  |d      }d }|&| j                  |d      }|| j                  |      d}| j                  |d      }| j                  |d      }g }||j                  d      }| j                  |d      }|| j                  |d      }| j                  |d      }|| j                  |d      }| j                  |d      }| j                  i d|d|	d|
d|d | j                  |      d!|d	|d|d|d"d d#d d$|d|d%|d&|d'd d(||||d)|      S )*NlastActTimers   orderCreateTimer  r]   	orderSizevolumer  r  r)  order_idclientOrderIdclient_order_id
orderPricer   r  r_   fee	fee_assetcostcurrencytrade_avg_pricer   -rX   order_price_typer   	direction
orderValueinfora   rt   ru   lastTradeTimestamptimeInForcepostOnlyr  r   r  r  r>  )r;  averager   )safe_integer_2rZ   r   rw   r   r!  re   safe_currency_coderd   rv   r&  
safe_orderry   )rR   r  rc   rF  createdr`   r]   r   r  ra   r8  r   r  typeSidefeeCostr;  feeCurrencyIdavgPricer*  typeSidePartsr_   r  r>  s                          rT   r#  zhtx.parse_ws_order  s   d "00tL##E+<=%%e_hG!!(F3!!(F3##E;A((););E=RZ)[\y*=**5/CTU""5,@!!%3##E62""5%0 ,,UK@M 33MBC ##E+<=OOE73	$NN3/M%%mQ7<##E+=>D%%mQ7<##E;7D|4  
E 
" 
 ] 
 	 

 W- 
 !"4 
 f 
 f 
 D 
 4 
  
 D 
 U 
 f 
 f 
  ! 
" D# 
$ ) 
* + 	rU   c                    | j                  d |      }|d   }| j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }	d }
|	|	j                  d      }|d	   }
|d
   }	| j	                  |d      }d }||rdnd}| j                  ||| j                  |      ||||	||
||d d d|      S )Nr]   tradeId
tradePricetradeVolumer)  	tradeTimer_   rA  r   rX   	aggressortakermakerrE  rt   ru   r]   ra   r  r_   takerOrMakerr  r   r   r>  r;  )rw   re   rZ   rv   rd   
safe_tradery   )rR   r   rc   r]   rT  r   r   r  rt   r_   r  	typePartsrX  r\  s                 rT   r   zhtx.parse_order_tradei  s%   * !!$/!""5)4  5!!%7  	2%%e[9	v.

3IQ<DQ<DOOE;7	 &/7WL"Y/( 
  	rU   symbolsc                   K   | j                          d{    d}d}| j                  |      s%| j                  |      }ddj                  |      z   }d}d}||d   }|d   rdnd}n4| j	                  d||      \  }}|d	k(  rd
}| j                  |dd|      \  }}| j                  |      }d}	| j                  d|d      \  }	}|dk(  }
| j                  ||
d      }|	dz   |z   }|	dk(  rdnd}| j                  |||||       d{   }| j                  r|S | j                  | j                  |   |	   |||d      S 7 *7 :w)a  

        https://www.huobi.com/en-in/opend/newApiPages/?id=8cb7de1c-77b5-11ed-9966-0242ac110003
        https://www.huobi.com/en-in/opend/newApiPages/?id=8cb7df0f-77b5-11ed-9966-0242ac110003
        https://www.huobi.com/en-in/opend/newApiPages/?id=28c34a7d-77ae-11ed-9966-0242ac110003
        https://www.huobi.com/en-in/opend/newApiPages/?id=5d5156b5-77b6-11ed-9966-0242ac110003

        watch all open positions. Note: huobi has one channel for each marginMode and type
        :param str[]|None symbols: list of unified market symbols
 @param since
 @param limit
        :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_   r6   r7   watchPositionsr8   r9   r   r  T
:positionszpositions_cross.*zpositions.*F)rb   is_emptyget_market_from_symbolsjoinhandle_market_type_and_paramshandle_option_and_paramsmarket_symbolshandle_margin_mode_and_paramsrg   r   r   filter_by_symbols_since_limit	positions)rR   r_  r   r   ri   rc   rk   r_   r   r  isLinearrl   r   newPositionss                 rT   watch_positionszhtx.watch_positions  s     !!!}}W%11':F'!22K&>D"("2h	G==>NPVX^_LD&v~";;FDTV_ahiOGV%%g.
!??@PRXZab
Fx'))$$? </+=*4*?%m!33G[$PWY_``??11$..2Ej2QSZ\achjopp5 	". as"   EE C1EE	8EEc                    |j                   }| j                  |dd      }|dk(  rdnd}| j                  i | _        | j                  | j                  |      }|i | j                  |<   | j                  ||      }|t	               | j                  |   |<   | j                  |   |   }| j                  |dg       }	g }
| j                  |d      }t        dt        |	            D ]S  }|	|   }| j                  |      }||d	<   | j                  |      |d
<   |
j                  |       |j                  |       U | j                  ||dz         }t        dt        |            D ]f  }||   }|j                  d      }|d   }|j                  d      }| j                  |
d|d      }| j                  |      rU|j                  ||       h |j                  |
|dz          y )Nrj   r  positions_crossr  isolatedr   rs   r   rt   ru   z:positions::ra  rX   rb  r]   Frd  )rl   re   rm  rd   r   rZ   r   r   parse_positionry   r   find_message_hashesrv   filter_by_arrayre  r{   )rR   rn   r|   rl   rj   r  clientPositionsclientMarginModePositionsr   rawPositionsro  rt   r   rawPositionpositionmessageHashesrk   r}   symbolsStringr_  rm  s                        rT   handle_positionszhtx.handle_positions  s   H jj  '26!&*;!;W*
>>!DN//$..#>""$DNN3$(OOOZ$P!$,.F.HDNN3
+s#J/w;%%gt4	q#l+, 	#A&q/K**;7H$-H[!#'<<	#:HZ )LL"	# 00n9TUq#m,- 	7A'*K%%d+E!!HM#))#.G,,\8WeTI==+y+6	7 	|Z,%>?rU   c                   K   d}| j                  dd|      \  }}d}| j                  dd|d      \  }}| j                  |ddd      }| j                  |ddg      }| j	                          d{    d}d}d}|dk(  r:| j                  | j                  ddd	      }| j                  |d|      }d
|z   }|}n| j                  |d      }	| j                  |d      }
|	| j                  |	      nd}|
| j                  |
      nd}| j                  |dd      }| j                  |g d      }d}|}|dk(  rT|rd}|}|dz   dz   }n{|dk(  r|dz   n|}|}|dk(  r|	|d|d   z   z  }|}nX|dz   dz   }nO||dz   |d   z   }|}n?|dz   dz   }n6|dk(  r||d|d   z   z  }|}n!|dz   dz   }n||d|d   z   z  }|}n|dz   dz   }|||d}| j                  ||||||       d{   S 7 v7 w)a  
        watch balance and get the amount of funds available for trading or funds locked in orders

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec52e28-7773-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=10000084-77b7-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=8cb7dcca-77b5-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c34995-77ae-11ed-9966-0242ac110003

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
        Nr0   r6   isUnifiedAccountunifiedFr8   r   2zaccounts.update#r]   r?  r  r  )r?  r]   r  accountsaccounts_unifyrr   usdtr	  rs  ra   r   r9   )r_   r   r  )rh  handle_sub_type_and_paramssafe_value_2r   rb   r   rM   re   rc   r?  r   )rR   ri   r_   r   r  rk   r   r  r   r]   r?  rc   currencyCoder  subscriptionParamss                  rT   watch_balancezhtx.watch_balance  s     99.$PVWf99.$PVX`a,,V5GTYZ6$6	#BC!!!
6>%%dllNFCPD##FFD9D1D8K!G%%fh7F''
;H-3-?T[[(dF7?7K4==2RVL))&(GDJYYv'GHFF K("#-F"(K$slV3G 4>3HVh.vF"(K!Z/!-'3+==K&1G '-slS&8G (3&,sl\$5G&GG*1K '-slS&8G!+3d);#;;K)G %slS0G %3#55K)G %slS0G $
 ++G[$QWYklllK 	"J ms%   A-G*/G%0E0G* G(!G*(G*c                 
   | j                  |d      }| j                  |dg       }| j                  |d| j                  |d            }|| j                  d<   | j	                  |      | j                  d<   || j                  d<   || j                  |d      }| j                  |      }| j                         }| j                  |d	      |d
<   | j                  |d      |d<   || j                  |<   | j                  | j                        | _        |j                  | j                  |       y t        |      }	|	dk(  ry | j                  |di       }
| j                  |d      }|j                  d      }| j                  |d      }| j                  |j                  ||dz         }|E| j                  |
dd      }|d|j                         z   z  }| j                  |j                  |      }| j                  |d      }| j                  |d      }|dk(  r| j                  |
d      }| j                  |      }| j                  |
d      }| j                         }| j                  |
d      |d
<   ||d<   || j                  |<   | j                  | j                        | _        |j                  | j                  d       n|dk(  r| j                  |d      }|dk(  r|dk(  rdnd}| j                  |
|g       }t        |      }|dkD  r?t        dt        |            D ]  }||   }| j                  |dd       }| j!                  |      }| j                  |d      }| j#                  |      }| j                  |d!|d"         }|h| j                         }| j                  |d#d$      |d
<   | j                  |d      |d<   i }|||<   |d   }| j                  |      | j                  |<    nYt        dt        |            D ]  }||   }| j                         }| j                  |d#d$      |d
<   | j                  |d      |d<   | j                  |dd      }| j                  |      }|| j                  |<   | j                  | j                        | _         nt        dt        |            D ]  }||   }| j                  |d      }| j                  |      }| j                         }| j                  |d$      |d
<   | j                  |d      |d<   || j                  |<   | j                  | j                        | _         |j                  | j                  |       y )%Nrq   r   
changeTimers   rt   ru   rE  r?  	availablefreebalancetotalr   rj   rr   z.*margin_assetr]   r_   r   r  margin_frozenwithdraw_availableusedr6   r  r  r9   futures_contract_detailcontract_detailr  margin_accountsettlecodemargin_balancemargin_available)re   rd   rZ   r  ry   rK  accountsafe_balancer{   r   rv   r  r   r   r
  r   rw   safe_currency) rR   rn   r|   r   r   rt   
currencyIdr  r  
dataLengthfirstrj   
splitTopicrk   r   r_   r   marginAssetmarginFrozenunifiedAccountr  	fieldNamebalancesbalancesLengthr   r  r`   rc   r?  accountsByCoder]   isolatedBalances                                    rT   handle_balancezhtx.handle_balanceh  sR   f ""7D1w3%%dL$:K:KGUY:Z[	$-[!#'<<	#:Z #V))$
;J**:6DllnG"..t[AGFO#//i@GG!(DLL,,T\\:DLNN4<<1 TJQOOD!R0E$$Wg6ES)J**:q9K,,V-A-A;P[^bPbcL# "//~xP
sZ%5%5%777#v/C/C[Q##L&9D&&|Y?G(( #..unE..{;#//G!%)-)9)9%AU)Vv&)5v&%3T"#00>t||-=>H$)),AW$>Bh>N 9UfI#uiDH%(]N%)!&q#h-!8 YA&.qkG'+'9'9'?Td'eH%)%5%5h%?F)-)9)9'>)RJ'+'9'9*'EH#'#3#3FHhvFV#WD  $/*.,,.262D2DWN^`r2s262B2B7O2\797>t 4)/)97;7H7H7XV 4#Y( #1c$i0 G*.q'"&,,.*.*:*:?L\^p*q*.*:*:?O*\%)%7%7Ya%b
#66zB-4T*'+'8'8'FG q#d), CA"1gG!%!1!1'8!DJ22:>D"llnG&*&6&6w@R&SGFO&*&6&6w&PGFO)0DLL&#'#4#4T\\#BDLC NN4<<5rU   c                     | j                  |d      }| j                  |j                  d      }| j                  ||      }|<| j                  |d      }| ||||       y ||j                  v r|j                  |= y y y )Nra   r   )re   index_byr   rd   )rR   rn   r|   ra   subscriptionsByIdr   r   s          rT   handle_subscription_statuszhtx.handle_subscription_statusH  s     gt, MM&*>*>E'8"=#__\8<F!vw5V)))((, * $rU   c                     |S N rR   rn   r|   s      rT   handle_system_statuszhtx.handle_system_status]  s	     rU   c                    | j                  |dd      }|j                  d      }| j                  |d      }|dk(  r| j                  |d      }| j                  | j                  | j                  | j                  | j                  | j
                  | j                  d}| j                  ||      }|
 |||       y |j                  d      }	| j                  |	dd      }
|
d	k(  r| j                  ||       y |
j                  d
      dk\  r| j                  ||       y |
dk(  r| j                  ||       y | j                  |d      }|dk(  r| j                  |dd      }|j                  d      dk\  r| j                  ||       |j                  d      dk\  r| j                  ||       |j                  d      dk\  r| j                  ||       y y y )Nrq   r  rr   r   rc      )depthmbpdetailbbor~   r   kliner   ztrade.clearingzaccounts.updater  opnotifyrj   r  rm  )rd   rv   re   r   r   r   r   r$  findr  r1  r~  )rR   rn   r|   rq   r}   r_   
methodNamemethodsr   privatePartsprivateTyper  rj   s                rT   handle_subjectzhtx.handle_subjectj  s   ^ __WdB/q)8))%3J//--,,)),,++**G __Wj9F!vw'xx}&&|Q;**  1-.!30("fg.gt,>$$Wgr:Ezz(#q(!!&'2zz)$)##FG4zz+&!+%%fg6 , rU   c                 \  K   	 | j                  |d      }||j                  d|i       d {    y | j                  |d      }|dk(  rC| j                  |d      }| j                  |d      }|j                  dd|id       d {    y | j                  |d      }|dk(  r/| j                  |d      }|j                  d|d       d {    y y 7 7 N7 
# t        $ rE}t        | j                  d	z   | j                  |      z         }	|j                  |	       Y d }~y d }~ww xY ww)
Npingpongactionr   rs   )r  r   r  )r  rs   z pong failed )	rZ   sendre   rd   r   r   ra   jsonr   )
rR   rn   r|   r  r  r   pingTsr  r   errors
             rT   r  zhtx.pong  s.    	 $$Wf5Dkk64.111%%gx8Fw7**46kkVdF^"LMMM!!'40BV|**7D9kkv">???  2 N
 @ 	  ?!:TYYq\!IJELL	 sz   D,*C CC D,AC C	C D,A C CC D,C C C 	D)$;D$D,$D))D,c                 >    | j                  | j                  ||       y r  )r   r  r  s      rT   handle_pingzhtx.handle_ping  s    

499fg.rU   c                 D    |j                   d   }|j                  |       y )Nauth)futuresr{   )rR   rn   r|   promises       rT   handle_authenticatezhtx.handle_authenticate  s    * ..( rU   c                    | j                  |d      }|dk(  r| j                  |d      }| j                  |j                  d      }| j                  ||      }|_| j                  |d      }	 | j	                  | j
                  d   d   || j                  |             t        | j                  |            y| j                  |d	d      }
|
Z|
d
k7  rU|
dk7  rP| j                  dz   | j                  |      z   }	 | j	                  | j
                  d   d   |
|       t        |      |S # t        $ r[}| j                  |d      }	|j                  ||	       |j                  ||       ||j                  v r|j                  |= Y d }~yd }~ww xY w# t        $ r`}t        |t              r4|j                  |d       d}||j                  v r|j                  |= Y d }~y|j                  |       Y d }~|S d }~ww xY w)Nr  r  ra   zerr-coder   rD   rk   Fr  200r   r   r  )re   r  r   rd   throw_exactly_matched_exceptionrN   r  r   r   r   r   ra   
isinstancer   )rR   rn   r|   r  ra   r  r   	errorCoder   rk   r  feedbackr   s                rT   handle_error_messagezhtx.handle_error_message  s   @ !!'84W!!'40B $f.B.BD I??+<bAL' ,,WjA	5889Nw9WYbdhdmdmnudvw'		'(:;; !!'6:>$%-dckww}tyy'99H%44T__T5J75SUY[cd#H-- - ! 5"&"2"2<"OKMM![1MM!R(V111"0045  %a!45MM!V,#F!5!55"008 MM!$$%s8   -AD+ ;.F +	F4AF

F	G;?G6G66G;c                 d   | j                  ||      rd|v r| j                  ||       y d|v rB| j                  |d      }|dk(  r| j                  ||       y |dk(  r| j                  ||       y d|v r.|d   dk(  r| j	                  ||       y | j                  ||       y d|v rr| j                  |d      }|dk(  r| j                  ||       y |dk(  r| j	                  ||       y |dk(  r| j                  ||       y |dk(  r| j                  ||       y d|v r| j                  ||       y y y )	Nra   r  r  subrq   r  r  r  )r  r  re   r  r  r  )rR   rn   r|   r  r  s        rT   handle_messagezhtx.handle_messageX  s]   $$VW5Z w//@7"))'8<V#$$VW5U?33FGDw4=F*,,VW= ''8w%%gt4<$$VW5<,,VW=;33FGD>''8   1 !] 6rU   c                    | j                   -| j                  | j                  dd      }t        |      | _         | j                   }| j	                  |d      }|z| j                  |d      }|T| j                  |      }| j	                  |d      }	|	.|j                  |       |j                  | j                   |       y y | j                  |dg       }
| j                  |d      }| j                  |      }t        dt        |
            D ]<  }|
|   }| j                  ||      }| j                  ||      }|j                  |       > |dz   d	z   }|j                  | j                   |       |j                  d
|d   z   d      }| j                  |d      }|j                  d
|z   d      }|dz   d	z   }|j                  | j                   |       y y )NrB   r;   rq   r   r]   r   r   r   r   rr   r   r  r  )myTradesrZ   rM   r   re   rd   parse_ws_trader   r{   rc   r   r   r   r   r%  r&  )rR   rn   r|   extendParamsr   cachedTradesrk   r   r   r]   r*  r`   rc   r   r   r(  
tradesHashgenericOrderHashr0  genericTradesHashs                       rT   r$  zhtx.handle_my_trade  s   h == %%dllM4HE259DM}}&&w5"??7F3D,,T2))&(;% ''/NN4==+> & !OOGXrB	??7H=X.q#i.1 5A%aLE"&"2"25&"AK"&++k<"HK ''45 )3.8
t}}j9 $/#6#6sVM=R7RTV#W "&"8"8"J#3#;#;C/<QSU#V $4s$:W$D!t}}.?@C #rU   c                    | j                  | j                  |d            }| j                  |dd      }| j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }	| j	                  |      }| j                  |d	      }
| j                  |d
      }d }||rdnd}d }g }|
#|
j                  d      }| j                  |d      }d }| j                  | j                  |d            }|| j                  |d      |d}| j                  ||	| j                  |	      ||||||||d |d|      S )Nr]   r  	orderSiderT  rU  rV  r)  rW  r  rX  rY  rZ  rA  rX   feeCurrencytransactFeer=  r[  )
r   re   r   rZ   rc   rd   rv   rK  r]  ry   )rR   r   rc   r]   r  rT  r   r   r  rt   r  rX  r\  r_   orderTypePartsr;  r  s                    rT   r  zhtx.parse_ws_trade  s   2 !!$"2"25("CD!!%=""5)4  5!!%7  	2%%e[9	V$$$UK8	OOE;7	 &/7WL &__S1N##NA6D--d.>.>um.TU"((>'C "Y/( 
  	rU   c                    | j                  | j                  dd      }d| j                  i}d }d }|dk(  rk|r| j                  d   d   |   d   d   }n9|r| j                  d   d   |   d   d   }n| j                  d   d   |   d   d   }| j	                  ||      }|S | j                  d   d   |   |   }	|r|	d   n|	d	   }
|r|
d   n|
d   }|S )
Nr2   hostnamer8   r   r4   r5   r3   r6   r7   )re   rM   r  rL   rf   )rR   r_   rn  	isPrivateisFeedr2   r  hostnameURLrl   baseUrl
subTypeUrls              rT   rg   zhtx.get_url_by_market_typeH  s   t||UE:$dmm46>"ii.t4S9&A)L"&))E"24"8"=f"Ef"MK"&))E"24"8"=f"Eh"OK%%k8<C
 
 ii&t,S1$7G.6*GI<NJ+4*Y'*X:NC
rU   c                    K   | j                         }||d}||||d}|||d<   | j                  ||| j                  ||      ||       d {   S 7 w)N)r  ra   )ra   rk   r]   ri   r   )r\   r   r   )	rR   rl   r]   rk   r   ri   rW   r   r   s	            rT   rh   zhtx.subscribe_public\  sp     OO%	

 &	
 %+L"ZZ[$++gv2NP[]ijjjjs   AAAAc                   K   | j                         }|||d}| j                  ||      }	d }
|dk(  rd|d}
nd||d}
|dk(  }| j                  ||d      }|dk(  r| j                  d   d   n| j                  d   d	   }|||d
}| j	                  |       d {    | j                  ||| j                  |
|      ||	       d {   S 7 17 w)Nra   rk   ri   r8   r  )r  rq   )r  rj   cidr6   T	hostnamesr   )r_   rl   r  )r\   r   rg   rL   authenticater   )rR   r   rk   r_   subtyperi   r  rW   r   extendedSubsriptionr   rn  rl   r  
authParamss                  rT   r   zhtx.subscribe_privatel  s    OO%	&

 #kk,8JK6>G   G
 h&))$$?6:fn499[)&1499U`KablKm 


 
+++ZZ[$++gv2NPWYlmmm 	,ms$   BCC,CCCCc                   K   | j                  |d      }| j                  |d      }| j                  |d      }|||t        | j                  dz         | j                          d}|j	                  d|z   d      }| j                  |      }|j                  |      }| j                  |j                  |      }	|	+| j                  | j                         d      }
d }|d	k(  r| j                  d
d|
d}n| j                  d
d|
d}| j                  |      }| j                  |      }dj                  d|||g      }| j                  | j!                  |      | j!                  | j"                        t$        j&                  d      }d }|d	k(  rd| j                  d
d|
|d}|ddd}ndd| j                  d
d|
|d}| j)                         }|||d}| j+                  |||||       | d {   S 7 w)Nrl   r  r_   z8 authenticate requires a url, hostname and type argumentr  zwss://r  Tr8   
HmacSHA256z2.1)	accessKeysignatureMethodsignatureVersionrt   r  )AccessKeyIdSignatureMethodSignatureVersion	Timestamp
GETbase64r2   )authTyper  r  r  rt   	signaturer   )ri   r  rq   )r  r_   r   r  r  r  	Signaturer  )re   r   ra   r   r%  rn   r9   rd   r   ymdhmsmillisecondsapiKeykeysort	urlencoderg  hmacencodesecrethashlibsha256r\   r   )rR   ri   rl   r  r_   rk   relativePathrn   r9   authenticatedrt   signatureParamsr  payloadr  r   	newParamsrW   r   s                      rT   r  zhtx.authenticate  s    vu-##FJ7/;(*dl#DGG.h$hii''){{8h#6;S!{+(<(<kJ D$5$5$7=I"Ov~!%'3(-!*	# $(;;'3(+!*	# #ll?;O>>/2Dii, EFG		$++g"6DKK8PRYR`R`bjkIGv~ %!%'3(-!*!*#	 (#  !!#';;'3(+!*!* )I* "L
 JJsK+|L||s   G-G6/G40G6r  )TFF):__name__
__module____qualname__r   rQ   r\   r[   r   rm   r   r   r	   r   r   r   r   listr   r   r   r   r   r   r   r   r   r   r   r   r  r   r
   r  r1  r#  r   r   r   rp  r~  r   r  r  r  r  r  r  r  r  r  r  r$  r  rg   rh   r   r  __classcell__)rS   s   @rT   r   r      s   p# pd
 68 S SF S,-F -^ <@d[] S SS S Sbfglbm S0%F %N 8<$]ajl H HC HWZ Hquvzq{ H4!#6 !#F @DB %!S %! %!S\ %!NC* C*J D&
3`< `<D?3 ?3BVV V 37TX\eg 3UC 3Us 3URU 3Ulpqvlw 3Uj HLTV "&H 04$UYbd )S )SC )Ss )Simnsit )SVh86 h8TgR4l 8<$]ajl )qW )qC )qWZ )qquv~q )qVC@J *, Wm Wmr^6V ^6@- -*6 v7V v7p 2/& /!& !0@6 @DP2V P2d EG ZAf ZAx@D( GKSU k  SUik n> )+ ArU   r   )"ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   r   r   r  ccxt.base.typesr   r   r	   r
   r   r   r   r   r   r   !ccxt.async_support.base.ws.clientr   typingr   ccxt.base.errorsr   r   r   r   r   r   r   r   async_supportr   r  rU   rT   <module>r&     sZ     A  A  g g g 4  * 0 . ' & ) ) *v"$


 
  v"rU   