ó
    Ö›‘hkO  ã                  ó´  • S r SSKJr  SSKrSSKrSSKrSSKJrJrJ	r	  SSK
JrJr  SSKJrJrJrJrJr  SSKJrJr  SSKJrJr  SS	KJr  SS
KJrJr  SSKJ r J!r!J"r"J#r#J$r$  SSK%J&r&  SSK'J(r(  SSK)J*r+J,r,J-r-J.r.J/r/J0r0J1r1  SSK2J3r3J4r4J5r5   SSK6J7r8  \8r9\(       a  SSK;J<r<  \ \Rz                  \"\R|                  0r?\" \&\R€                  \R‚                  5       " S S\R„                  \1\,5      5       rC\9b  \" \C\Rˆ                  5         " S S\-\.\C5      rE " S S\C5      rF " S S\+5      r*\" \RŽ                  5       " S S\1\5      5       rHg! \: a    Sr9 NÄf = f)z
TCP support for IOCP reactor
é    )ÚannotationsN)ÚTYPE_CHECKINGÚOptionalÚUnion)ÚclassImplementsÚimplementer)ÚaddressÚdeferÚerrorÚ
interfacesÚmain)Ú	_LogOwnerÚisIPv6Address)ÚIPv4AddressÚIPv6Address)Ú	IProtocol)ÚabstractÚiocpsupport)ÚERROR_CONNECTION_REFUSEDÚERROR_IO_PENDINGÚERROR_NETWORK_UNREACHABLEÚSO_UPDATE_ACCEPT_CONTEXTÚSO_UPDATE_CONNECT_CONTEXT)ÚIReadWriteHandle)ÚProtocol)Ú	ConnectorÚ_AbortingMixinÚ_BaseBaseClientÚ_BaseTCPClientÚ_getsocknameÚ_resolveIPv6Ú_SocketCloser)ÚfailureÚlogÚreflect)ÚstartTLS)ÚIOCPReactorc                  ó¬   • \ rS rSrSrSrSS jrS rS rS r	S	 r
S
 rS rS rS rS rS rS rS r\b  SS jrS rS rSS jrS rS rS rS rSrg)Ú
Connectioné<   zÎ
@ivar TLS: C{False} to indicate the connection is in normal TCP mode,
    C{True} to indicate that TLS has been started and that operations must
    be routed through the L{TLSMemoryBIOProtocol} instance.
FNc                ó|   • [         R                  R                  X5        Xl        UR                  U l        X l        g ©N)r   Ú
FileHandleÚ__init__ÚsocketÚfilenoÚgetFileHandleÚprotocol)ÚselfÚsockÚprotoÚreactors       ÚdC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/internet/iocpreactor/tcp.pyr.   ÚConnection.__init__F   s,   € Ü×Ñ×$Ñ$ TÔ3ØŒØ!Ÿ[™[ˆÔØ�ó    c                ó   • U R                   $ r,   )r/   ©r3   s    r7   Ú	getHandleÚConnection.getHandleL   s   € Ø�{‰{Ðr9   c                óÖ   • [        U[        5      (       a  O8[        U[        5      (       a  [        U5      nO[        S[	        U5      -   5      eU R
                  R                  U5        g)zH
@param rbuffer: Data received.
@type rbuffer: L{bytes} or L{bytearray}
z%data must be bytes or bytearray, not N)Ú
isinstanceÚbytesÚ	bytearrayÚ	TypeErrorÚtyper2   ÚdataReceived)r3   Úrbuffers     r7   rD   ÚConnection.dataReceivedO   sQ   € ô
 �gœu×%Ñ%ØÜ˜¤×+Ñ+ä˜G“n‰GäÐCÄdÈ7ÃmÑSÓTÐTà�‰×"Ñ" 7Õ+r9   c                óL   • [         R                  " U R                  5       X5      $ r,   )Ú_iocpÚrecvr1   )r3   ÚbufflistÚevts      r7   ÚreadFromHandleÚConnection.readFromHandle^   s   € Ü�zŠz˜$×,Ñ,Ó.°Ó>Ð>r9   c                óš   • [        U5      n[        R                  " U R                  5       USU R                   R                  5       U5      $ )zv
Send C{buff} to current file handle using C{_iocp.send}. The buffer
sent is limited to a size of C{self.SEND_LIMIT}.
r   )Ú
memoryviewrH   Úsendr1   Ú
SEND_LIMITÚtobytes)r3   ÚbuffrK   Ú	writeViews       r7   ÚwriteToHandleÚConnection.writeToHandlea   sC   € ô
 ˜tÓ$ˆ	Ü�zŠzØ×ÑÓ  )¨A°·±Ð"@×"HÑ"HÓ"JÈCó
ð 	
r9   c                óf  •  U R                   R                  S5        [        R                  " U R
                  S 5      nU(       a   UR                  5         g g ! [         a     NGf = f! [         a>    [        R                  " 5       n[        R                  " 5         U R                  U5         g f = f)Né   )r/   ÚshutdownÚOSErrorr   ÚIHalfCloseableProtocolr2   ÚwriteConnectionLostÚBaseExceptionr#   ÚFailurer$   ÚerrÚconnectionLost)r3   ÚpÚfs      r7   Ú_closeWriteConnectionÚ Connection._closeWriteConnectionk   s‘   € ð	Ø�K‰K× Ñ  Ô#ô ×-Ò-¨d¯m©m¸TÓBˆÞð'Ø×%Ñ%Õ'ð øô ó 	Ùð	ûô !ó 'Ü—O’OÓ%�Ü—’”	Ø×#Ñ# AÖ&ð'ús$   ‚A ÁA( Á
A%Á$A%Á(AB0Â/B0c                ó,  • [         R                  " U R                  S 5      nU(       a   UR                  5         g U R                  U5        g ! [         a<    [
        R                  " 5         U R                  [        R                  " 5       5         g f = fr,   )
r   r[   r2   ÚreadConnectionLostr]   r$   r_   r`   r#   r^   )r3   Úreasonra   s      r7   rf   ÚConnection.readConnectionLosty   sk   € Ü×-Ò-¨d¯m©m¸TÓBˆÞð7Ø×$Ñ$Õ&ð
 ×Ñ Õ'øô	 !ó 7Ü—’”	Ø×#Ñ#¤G§O¢OÓ$5Ö6ð7ús   ªA ÁABÂBc                ó,  • U R                   (       a  g [        R                  R                  X5        US L =(       d$    UR	                  [
        R                  5      (       + nU R                  U5        U R                  nU ?U ?	U ?
UR                  U5        g r,   )Údisconnectedr   r-   r`   Úcheckr   ÚConnectionAbortedÚ_closeSocketr2   r/   r1   )r3   rg   ÚisCleanr2   s       r7   r`   ÚConnection.connectionLost„   sw   € Ø××ØÜ×Ñ×*Ñ*¨4Ô8Ø˜D�.×M¨¯©´U×5LÑ5LÓ(MÔ$MˆØ×Ñ˜'Ô"Ø—=‘=ˆØˆMØˆKØÐØ×Ñ Õ'r9   c                ó   • U R                   $ )z>
Return the prefix to log with when I own the logging thread.
)Úlogstrr;   s    r7   Ú	logPrefixÚConnection.logPrefix�   ó   € ð �{‰{Ðr9   c                ó„   • [        U R                  R                  [        R                  [        R                  5      5      $ r,   )Úboolr/   Ú
getsockoptÚIPPROTO_TCPÚTCP_NODELAYr;   s    r7   ÚgetTcpNoDelayÚConnection.getTcpNoDelay–   s*   € Ü�D—K‘K×*Ñ*¬6×+=Ñ+=¼v×?QÑ?QÓRÓSÐSr9   c                óv   • U R                   R                  [         R                  [         R                  U5        g r,   )r/   Ú
setsockoptrx   ry   ©r3   Úenableds     r7   ÚsetTcpNoDelayÚConnection.setTcpNoDelay™   s$   € Ø�‰×Ñœv×1Ñ1´6×3EÑ3EÀwÕOr9   c                ó„   • [        U R                  R                  [        R                  [        R                  5      5      $ r,   )rv   r/   rw   Ú
SOL_SOCKETÚSO_KEEPALIVEr;   s    r7   ÚgetTcpKeepAliveÚConnection.getTcpKeepAliveœ   s*   € Ü�D—K‘K×*Ñ*¬6×+<Ñ+<¼f×>QÑ>QÓRÓSÐSr9   c                óv   • U R                   R                  [         R                  [         R                  U5        g r,   )r/   r}   rƒ   r„   r~   s     r7   ÚsetTcpKeepAliveÚConnection.setTcpKeepAliveŸ   s$   € Ø�‰×Ñœv×0Ñ0´&×2EÑ2EÀwÕOr9   c                ó:   • [        XU[        R                  5        g)z!
@see: L{ITLSTransport.startTLS}
N)Ú	_startTLSr   r-   )r3   ÚcontextFactoryÚnormals      r7   r&   ÚConnection.startTLS¤   s   € ô �d¨F´H×4GÑ4GÕHr9   c                óÀ   • U R                   (       a  gU R                  (       a  U R                  R                  U5        g[        R
                  R                  X5        g)zÊ
Write some data, either directly to the underlying handle or, if TLS
has been started, to the L{TLSMemoryBIOProtocol} for it to encrypt and
send.

@see: L{twisted.internet.interfaces.ITransport.write}
N)rj   ÚTLSr2   Úwriter   r-   )r3   Údatas     r7   r‘   ÚConnection.writeª   s=   € ð ××ØØ�8�8Ø�M‰M×Ñ Õ%ä×Ñ×%Ñ% dÕ1r9   c                óÀ   • U R                   (       a  gU R                  (       a  U R                  R                  U5        g[        R
                  R                  X5        g)zÒ
Write some data, either directly to the underlying handle or, if TLS
has been started, to the L{TLSMemoryBIOProtocol} for it to encrypt and
send.

@see: L{twisted.internet.interfaces.ITransport.writeSequence}
N)rj   r�   r2   ÚwriteSequencer   r-   )r3   Úiovecs     r7   r•   ÚConnection.writeSequence¹   s=   € ð ××ØØ�8�8Ø�M‰M×'Ñ'¨Õ.ä×Ñ×-Ñ-¨dÕ:r9   c                óâ   • U R                   (       a?  U R                  (       a-  U R                  (       d  U R                  R	                  5         ggg[
        R                  R	                  X5        g)zŽ
Close the underlying handle or, if TLS has been started, first shut it
down.

@see: L{twisted.internet.interfaces.ITransport.loseConnection}
N)r�   Ú	connectedÚdisconnectingr2   ÚloseConnectionr   r-   )r3   rg   s     r7   r›   ÚConnection.loseConnectionÈ   sG   € ð �8�8Ø�~�~ d×&8×&8Ø—‘×,Ñ,Õ.ð '9ˆ~ô ×Ñ×.Ñ.¨tÕ<r9   c                óž   • U R                   (       a  U R                  R                  X5        g[        R                  R                  XU5        g)zK
Register a producer.

If TLS is enabled, the TLS connection handles this.
N)r�   r2   ÚregisterProducerr   r-   )r3   ÚproducerÚ	streamings      r7   rž   ÚConnection.registerProducerÕ   s5   € ð �8�8ð
 �M‰M×*Ñ*¨8Õ?ä×Ñ×0Ñ0°ÀÕKr9   c                óš   • U R                   (       a  U R                  R                  5         g[        R                  R                  U 5        g)zM
Unregister a producer.

If TLS is enabled, the TLS connection handles this.
N)r�   r2   ÚunregisterProducerr   r-   r;   s    r7   r£   ÚConnection.unregisterProducerä   s/   € ð �8�8Ø�M‰M×,Ñ,Õ.ä×Ñ×2Ñ2°4Õ8r9   c                ó   • g r,   © r;   s    r7   ÚgetHostÚConnection.getHostï   ó   € àr9   c                ó   • g r,   r¦   r;   s    r7   ÚgetPeerÚConnection.getPeeró   r©   r9   )r1   r2   r/   r,   )T)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r�   r.   r<   rD   rL   rU   rc   rf   r`   rr   rz   r€   r…   rˆ   r‹   r&   r‘   r•   r›   rž   r£   r§   r«   Ú__static_attributes__r¦   r9   r7   r)   r)   <   s…   † ñð €Côòò,ò?ò
ò'ò	(ò
(òòTòPòTòPð Ñô	Iò2ò;ô=òLò	9òõr9   r)   c                  ót   • \ rS rSrSr\R                  r\R                  r	Sr
\rS rS rS rS rS rS	 rS
rg)ÚClientéü   zª
@ivar _tlsClientDefault: Always C{True}, indicating that this is a client
    connection, and by default when TLS is negotiated this class will act as
    a TLS client.
Tc                óJ   • Uc  SnXPl         [        R                  " XX#XE5        g )N)Ú r   )r6   r   r.   )r3   ÚhostÚportÚbindAddressÚ	connectorr6   s         r7   r.   ÚClient.__init__	  s$   € àÑØ!ˆKØŒÜ×Ò ¨D¸yÕRr9   c                ób   • U R                   R                  U R                  U R                  5      $ )zL
Create a socket registered with the IOCP reactor.

@see: L{_BaseTCPClient}
)r6   ÚcreateSocketÚaddressFamilyÚ
socketTyper;   s    r7   ÚcreateInternetSocketÚClient.createInternetSocket  s%   € ð �|‰|×(Ñ(¨×);Ñ);¸T¿_¹_ÓMÐMr9   c                ó   • U ? U ?g)zv
Clean up potentially circular references to the socket and to its
C{getFileHandle} method.

@see: L{_BaseBaseClient}
N)r/   r1   r;   s    r7   Ú_collectSocketDetailsÚClient._collectSocketDetails  s   € ð ˆK˜Ñ+r9   c                ó:   • U R                   R                  U 5        g)zF
Remove the active handle from the reactor.

@see: L{_BaseBaseClient}
N)r6   ÚremoveActiveHandler;   s    r7   Ú_stopReadingAndWritingÚClient._stopReadingAndWriting!  s   € ð 	�‰×'Ñ'¨Õ-r9   c           	     óä  • U(       a[  [         R                  X5      nU R                  [        R                  " U[
        R                  R                  US5      45      5        g U R                  R                  [        R                  [        [        R                  " SU R                  R                  5       5      5        U R                  R                  U R!                  5       5      U l        SU l        U R'                  U R"                  5      nUS-   U l        U R"                  c   [+        5       U l        U R-                  5         g U R"                  R/                  U 5        U R1                  5         g )NzUnknown errorÚPTz,client)ÚconnectExErrorsÚgetÚfailIfNotConnectedr   ÚgetConnectErrorÚerrnoÚ	errorcoder/   r}   rƒ   r   ÚstructÚpackr0   r»   ÚbuildProtocolr«   r2   r™   Ú_getLogPrefixrq   r   r›   ÚmakeConnectionÚstartReading)r3   Úrcr’   rK   rr   s        r7   Ú	cbConnectÚClient.cbConnect)  s  € ÞÜ ×$Ñ$ RÓ,ˆBØ×#Ñ#Ü×%Ò% r¬5¯?©?×+>Ñ+>¸rÀ?Ó+SÐ&TÓUõð �K‰K×"Ñ"Ü×!Ñ!Ü)Ü—’˜C §¡×!3Ñ!3Ó!5Ó6ôð
 !ŸN™N×8Ñ8¸¿¹»ÓHˆDŒMØ!ˆDŒNØ×*Ñ*¨4¯=©=Ó9ˆIØ# iÑ/ˆDŒKØ�}‰}Ñ$ô !)£
�”à×#Ñ#Õ%à—‘×,Ñ,¨TÔ2Ø×!Ñ!Õ#r9   c                óŽ  • [        U S5      (       d  g [        R                  (       d   eU R                  R	                  U 5        [        R
                  " U R                  U 5      n[        R                  " U R                  R                  5       U R                  U5      nU(       a  U[        :w  a  U R                  USU5        g g g )Nr»   r   )ÚhasattrrH   Úhave_connectexr6   ÚaddActiveHandleÚEventrÙ   Úconnectr/   r0   ÚrealAddressr   )r3   rK   rØ   s      r7   Ú	doConnectÚClient.doConnectG  s�   € Ü�t˜[×)Ñ)ð Ü×#×#Ð#Ð#Ø�‰×$Ñ$ TÔ*Ü�kŠk˜$Ÿ.™.¨$Ó/ˆä�]Š]˜4Ÿ;™;×-Ñ-Ó/°×1AÑ1AÀ3ÓGˆÞ�"Ô(Ó(Ø�N‰N˜2˜q #Õ&ð )ˆ2r9   )r™   rq   r2   r6   N)r­   r®   r¯   r°   r±   r/   ÚAF_INETr¿   ÚSOCK_STREAMrÀ   Ú_tlsClientDefaultr)   Ú_commonConnectionr.   rÁ   rÄ   rÈ   rÙ   râ   r²   r¦   r9   r7   r´   r´   ü   sI   † ñð —N‘N€MØ×#Ñ#€JàÐØ"ÐòSòNò,ò.ò$õ<'r9   r´   c                  óT   • \ rS rSrSrSr            S
S jrSS jrS rS r	Sr
g	)ÚServeriU  a:  
Serverside socket-stream connection class.

I am a serverside network connection transport; a socket which came from an
accept() on a server.

@ivar _tlsClientDefault: Always C{False}, indicating that this is a server
    connection, and by default when TLS is negotiated this class will act as
    a TLS server.
Fc                ó¦  • [         R                  XX&5        X@l        X0l        XPl        U R                  U R                  5      nU SU SU R                  R                   3U l        SR                  U R                  R                  R                  U R                  U R                  R                  5      U l        SU l        U R                  5         g)zå
Server(sock, protocol, client, server, sessionno)

Initialize me with a socket, a protocol, a descriptor for my peer (a
tuple of host, port describing the other end of the connection), an
instance of Port, and a session number.
Ú,z<{} #{} on {}>TN)r)   r.   Ú
serverAddrÚ
clientAddrÚ	sessionnorÕ   r2   r¸   rq   ÚformatÚ	__class__r­   r¹   Úrepstrr™   r×   )r3   r4   r2   rí   rì   rî   r6   rr   s           r7   r.   ÚServer.__init__c  s¨   € ô  	×Ñ˜D¨Ô:Ø$ŒØ$ŒØ"ŒØ×&Ñ& t§}¡}Ó5ˆ	Ø"˜ 1 Y K¨q°·±×1EÑ1EÐ0FÐGˆŒØ+×2Ñ2Ø�M‰M×#Ñ#×,Ñ,Ø�N‰NØ�O‰O× Ñ ó
ˆŒð
 ˆŒØ×ÑÕr9   c                ó   • U R                   $ )z-
A string representation of this connection.
)rñ   r;   s    r7   Ú__repr__ÚServer.__repr__�  rt   r9   c                ó   • U R                   $ )z?
Returns an IPv4Address.

This indicates the server's address.
)rì   r;   s    r7   r§   ÚServer.getHost‡  ó   € ð �‰Ðr9   c                ó   • U R                   $ )z?
Returns an IPv4Address.

This indicates the client's address.
)rí   r;   s    r7   r«   ÚServer.getPeer�  rø   r9   )rí   r™   rq   rñ   rì   rî   N)r4   zsocket.socketr2   r   rí   úUnion[IPv4Address, IPv6Address]rì   rû   rî   Úintr6   r'   ©ÚreturnÚstr)r­   r®   r¯   r°   r±   ræ   r.   rô   r§   r«   r²   r¦   r9   r7   ré   ré   U  s]   † ñ	ð Ððàðð ðð 4ð	ð
 4ðð ðð ôô<òõr9   ré   c                  ó   • \ rS rSrS rSrg)r   i˜  c                ón   • [        U R                  U R                  U R                  X R                  5      $ r,   )r´   r¸   r¹   rº   r6   r;   s    r7   Ú_makeTransportÚConnector._makeTransport™  s%   € Ü�d—i‘i §¡¨D×,<Ñ,<¸dÇLÁLÓQÐQr9   r¦   N)r­   r®   r¯   r°   r  r²   r¦   r9   r7   r   r   ˜  s   † õRr9   r   c                  ó  • \ rS rSr% SrSrSr\R                  r	\R                  r\R                  rSrSrS\S'   SrSS jrSS	 jrS
 r\R.                  " \R2                  5      4S jr\rS rS rS rS rS r S r!S r"Sr#g)ÚPorti�  Fr   NzOptional[int]Ú_realPortNumberÚTCPc                ó¶   • Xl         X l        X0l        X@l        XPl        [        U5      (       a+  [        R                  U l        [        R                  U l        g g r,   )r¹   ÚfactoryÚbacklogÚ	interfacer6   r   r/   ÚAF_INET6r¿   r	   r   Ú_addressType)r3   r¹   r	  r
  r  r6   s         r7   r.   ÚPort.__init__±  sE   € ØŒ	ØŒØŒØ"ŒØŒÜ˜×#Ñ#Ü!'§¡ˆDÔÜ '× 3Ñ 3ˆDÕð $r9   c                óò   • U R                   b;  SR                  U R                  U R                  R                  U R                   5      $ SR                  U R                  U R                  R                  5      $ )Nz<{} of {} on {}>z<{} of {} (not listening)>)r  rï   rð   r	  r;   s    r7   rô   ÚPort.__repr__»  sg   € Ø×ÑÑ+Ø%×,Ñ,Ø—‘Ø—‘×&Ñ&Ø×$Ñ$óð ð 0×6Ñ6Ø—‘Ø—‘×&Ñ&óð r9   c                óÒ  •  U R                   R                  U R                  U R                  5      nU R                  [        R
                  :X  a!  [        U R                  U R                  5      nOU R                  U R                  4nUR                  U5        [        R                  " UR                  5       5      U l        UR#                  5       S   U l        [&        R(                  " U R+                  U R,                  5      < SU R$                  < 35        U R,                  R/                  5         UR1                  U R2                  5        SU l        SU l        U R                   R9                  U 5        Xl        U R                  R                  U l        U R=                  5         g ! [         a1  n[        R                  " U R                  U R                  U5      eS nAff = f)NrX   z starting on TF)r6   r¾   r¿   rÀ   r/   r  r!   r  r¹   ÚbindrZ   r   ÚCannotListenErrorrH   Ú
maxAddrLenr0   ÚaddrLenÚgetsocknamer  r$   ÚmsgrÕ   r	  ÚdoStartÚlistenr
  r™   rj   rÞ   r1   ÚdoAccept)r3   ÚsktÚaddrÚles       r7   ÚstartListeningÚPort.startListeningÈ  s[  € ð		IØ—,‘,×+Ñ+¨D×,>Ñ,>ÀÇÁÓPˆCà×!Ñ!¤V§_¡_Ó4Ü# D§N¡N°D·I±IÓ>‘àŸ™¨¯	©	Ð2�Ø�H‰H�TŒNô ×'Ò'¨¯
©
«Ó5ˆŒð  #Ÿ™Ó0°Ñ3ˆÔä�Šà×!Ñ! $§,¡,Ö/°×1EÓ1EðGô	
ð
 	�‰×ÑÔØ�
‰
�4—<‘<Ô ØˆŒØ!ˆÔØ�‰×$Ñ$ TÔ*ØŒØ!Ÿ[™[×/Ñ/ˆÔØ�‰�øô+ ó 	IÜ×)Ò)¨$¯.©.¸$¿)¹)ÀRÓHÐHûð	Iús   ‚BF+ Æ+
G&Æ5,G!Ç!G&c                óÎ   • SU l         U R                  (       aM  [        R                  " 5       U l        U R
                  R                  SU R                  U5        U R                  $ g)z¾
Stop accepting connections on this port.

This will shut down my socket and call self.connectionLost().
It returns a deferred which will fire successfully when the
port is actually closed.
Tr   N)rš   r™   r
   ÚDeferredÚdeferredr6   Ú	callLaterr`   )r3   ÚconnDones     r7   r›   ÚPort.loseConnectionè  sL   € ð "ˆÔØ�>�>Ü!ŸNšNÓ,ˆDŒMØ�L‰L×"Ñ" 1 d×&9Ñ&9¸8ÔDØ—=‘=Ð ð r9   c                óf   • [         R                  " SU R                   SU R                   S35        g)z
Log message for closing port
Ú(z Port z Closed)N)r$   r  Ú_typer  r;   s    r7   Ú_logConnectionLostMsgÚPort._logConnectionLostMsgø  s*   € ô 	�Š�!�D—J‘J�<˜v d×&:Ñ&:Ð%;¸8ÐDÕEr9   c                óÜ  • U R                  5         SU l        Sn[        U S5      (       a  U R                  nU ?SU l        U R
                  R                  U 5        SU l        U R                  S5        U ?	U ?
 U R                  R                  5         SU l        Ub  UR                  S5        gg! [         a2    SU l        Ub&  UR!                  ["        R$                  " 5       5         ge f = f)z
Cleans up the socket.
Nr"  TF)r)  r  rÜ   r"  rj   r6   rÇ   r™   rm   r/   r1   r	  ÚdoStoprš   Úcallbackr]   Úerrbackr#   r^   )r3   rg   Úds      r7   r`   ÚPort.connectionLostþ  sÛ   € ð 	×"Ñ"Ô$Ø#ˆÔØˆÜ�4˜×$Ñ$Ø—‘ˆAØ�à ˆÔØ�‰×'Ñ'¨Ô-ØˆŒØ×Ñ˜$ÔØˆKØÐð	!Ø�L‰L×ÑÔ!ð "'ˆDÔØ‰}Ø—
‘
˜4Õ ð øô ó 	Ø!&ˆDÔØ‰}Ø—	‘	œ'Ÿ/š/Ó+Ö,àð	ús   Á8B/ Â/8C+Ã)C+c                óV   • [         R                  " U R                  R                  5      $ )z;
Returns the name of my class, to prefix log entries with.
)r%   Úqualr	  rð   r;   s    r7   rr   ÚPort.logPrefix  s   € ô �|Š|˜DŸL™L×2Ñ2Ó3Ð3r9   c                óN   • U R                   " S/[        U R                  5      Q76 $ )zN
Returns an IPv4Address or IPv6Address.

This indicates the server's address.
r  )r  r    r/   r;   s    r7   r§   ÚPort.getHost#  s#   € ð × Ò  ÐC¬°d·k±kÓ)BÒCÐCr9   c                óŽ   • U R                  X5        U R                  (       d#  U R                  (       d  U R                  5         g g g r,   )ÚhandleAcceptrš   rj   r  )r3   rØ   r’   rK   s       r7   ÚcbAcceptÚPort.cbAccept+  s2   € Ø×Ñ˜"Ô"Ø×"×" d×&7×&7Ø�M‰M�Oð '8Ð"r9   c           	     óh  • U R                   (       d  U R                  (       a  gU(       a>  [        R                  " S[        R
                  R                  US5      < SU< S35        gUR                  R                  [        R                  [        [        R                  " SU R                  R                  5       5      5        [        R                   " UR                  R                  5       UR"                  5      u  p4nX0R$                  :X  d   eSUS   ;   a,  ['        US   R)                  S5      S	   5      nUS   US	   SU4nSUS   ;   a,  ['        US   R)                  S5      S	   5      nUS   US	   SU4nU R*                  R-                  U R.                  " S
/UQ76 5      nUc  UR                  R1                  5         gU R2                  nUS	-   U l        [5        UR                  UU R.                  " S
/UQ76 U R.                  " S
/UQ76 UU R6                  5      n	UR9                  U	5        g)NFz#Could not accept new connection -- zunknown errorz (Ú)rË   Ú%r   rX   r  T)rš   rj   r$   r  rÐ   rÑ   rÍ   Únewsktr}   r/   rƒ   r   rÒ   rÓ   r0   rH   Úget_accept_addrsrS   r¿   rü   Úsplitr	  rÔ   r  Úcloserî   ré   r6   rÖ   )
r3   rØ   rK   ÚfamilyÚlAddrÚrAddrÚscoper2   ÚsÚ	transports
             r7   r7  ÚPort.handleAccept0  sç  € Ø×× ×!2×!2Øö Ü�G‹Gä—?‘?×&Ñ& r¨?Ö;»RðAôð ð �J‰J×!Ñ!Ü×!Ñ!Ü(Ü—’˜C §¡×!3Ñ!3Ó!5Ó6ôô
 $)×#9Ò#9¸#¿*¹*×:KÑ:KÓ:MÈsÏxÉxÓ#XÑ ˆF˜5Ø×/Ñ/Ó/Ð/Ð/ð �e˜A‘h‹Ü˜E !™HŸN™N¨3Ó/°Ñ2Ó3�Ø˜q™ 5¨¡8¨Q°Ð6�Ø�e˜A‘h‹Ü˜E !™HŸN™N¨3Ó/°Ñ2Ó3�Ø˜q™ 5¨¡8¨Q°Ð6�à—|‘|×1Ñ1°$×2CÒ2CÀEÐ2RÈEÒ2RÓSˆHØÑØ—
‘
× Ñ Ô"ð ð —N‘N�Ø!" Q¡�”Ü"Ø—J‘JØØ×%Ò% eÐ4¨eÒ4Ø×%Ò% eÐ4¨eÒ4ØØ—L‘Ló�	ð ×'Ñ'¨	Ô2Ør9   c                ó¼  • [         R                  " U R                  U 5      n[        SU R                  S-   -  5      =Ul        nU R                  R                  U R                  U R                  5      =Ul
        n[         R                  " U R                  R                  5       UR                  5       X!5      nU(       a  U[        :w  a  U R                  XA5        g g g )Né   é   )rH   rß   r8  rA   r  rS   r6   r¾   r¿   rÀ   r=  Úacceptr/   r0   r   r7  )r3   rK   rS   r=  rØ   s        r7   r  ÚPort.doAcceptc  sª   € Ü�kŠk˜$Ÿ-™-¨Ó.ˆô $ A¨¯©¸Ñ):Ñ$;Ó<Ð<ˆŒ�4à"Ÿl™l×7Ñ7Ø×Ñ §¡ó
ð 	
ˆŒ
�Vô �\Š\˜$Ÿ+™+×,Ñ,Ó.°·±³ÀÓKˆæ�"Ô(Ó(Ø×Ñ˜bÕ&ð )ˆ2r9   )r  r  r  r¿   r
  r™   r"  rj   rš   r	  r1   r  r¹   r6   rî   r/   )é2   r·   Nrý   )$r­   r®   r¯   r°   r™   rj   rš   r/   rä   r¿   rå   rÀ   r	   r   r  rî   r  Ú__annotations__r(  r.   rô   r  r#   r^   r   ÚCONNECTION_DONEr›   ÚstopListeningr)  r`   rr   r§   r8  r7  r  r²   r¦   r9   r7   r  r  �  sž   ‡ à€IØ€LØ€MØ—N‘N€MØ×#Ñ#€JØ×&Ñ&€LØ€Ið &*€O�]Ó)ð €Eô4ôòð@ '.§o¢o°d×6JÑ6JÓ&Kô !ð #€MòFò!ò>4òDòò
1õf'r9   r  )Ir±   Ú
__future__r   rÐ   r/   rÒ   Útypingr   r   r   Úzope.interfacer   r   Útwisted.internetr	   r
   r   r   r   Útwisted.internet.abstractr   r   Útwisted.internet.addressr   r   Útwisted.internet.interfacesr   Útwisted.internet.iocpreactorr   r   rH   Ú"twisted.internet.iocpreactor.constr   r   r   r   r   Ú'twisted.internet.iocpreactor.interfacesr   Útwisted.internet.protocolr   Útwisted.internet.tcpr   ÚTCPConnectorr   r   r   r    r!   r"   Útwisted.pythonr#   r$   r%   Útwisted.internet._newtlsr&   Ú
__startTLSr‹   ÚImportErrorÚ$twisted.internet.iocpreactor.reactorr'   ÚWSAECONNREFUSEDÚWSAENETUNREACHrÌ   ÚITCPTransportÚISystemHandler-   r)   ÚITLSTransportr´   ré   ÚIListeningPortr  r¦   r9   r7   Ú<module>ri     s[  ðñõ #ã Û Û ß 1Ñ 1ç 7ç DÕ Dß >ß =Ý 1ß G÷õ õ EÝ .÷÷ ñ ÷ 1Ñ 0ðÝ?ð €Iæå@ð ˜e×3Ñ3Ø˜u×3Ñ3ð€ñ Ð˜z×7Ñ7¸×9QÑ9QÓRôx�×$Ñ$ m°^ó xó Sðxðv ÑÙ�J 
× 8Ñ 8Ô9ôV'ˆ_˜n¨jô V'ôr@ˆZô @ôFR�ô Rñ
 ˆZ×&Ñ&Ó'ôQ'ˆ=˜)ó Q'ó (ñQ'øðe ó Ø‚Iðús   Â
E ÅEÅE