+
    üÐjˆ1  ã                  ó®  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIHtH	t	 ^ RI
Ht ^ RIHtHtHtHt ^ RIHt ^ RIHtHt ^ RIHtHt ^ R	IHtHtHt ^ R
IHt ^ RI H!t! ^ RI"H#t# ]'       d   ^ RI$H%t% ]! ]]PL                  ]PN                  ]PP                  4       ! R R]PR                  4      4       t*]! ]PV                  4       ! R R]]*4      4       t,R# )z
UDP support for IOCP reactor
)ÚannotationsN)ÚTYPE_CHECKINGÚOptional)Úimplementer)ÚaddressÚdeferÚerrorÚ
interfaces)ÚMulticastMixin)ÚisIPAddressÚisIPv6Address)ÚabstractÚiocpsupport)ÚERROR_CONNECTION_REFUSEDÚERROR_IO_PENDINGÚERROR_PORT_UNREACHABLE)ÚIReadWriteHandle)ÚAbstractDatagramProtocol)Úlog)ÚIOCPReactorc                  ó  € ] tR t^#t$ RtR]R&   ]P                  t]P                  t
RtRtR]R&   R#R R	 lltR
 tR R ltR tR tR R ltR tR tR tR tR tR$R ltR tR tR tR tR tR$R ltR tR t R t!R  t"R! t#R"t$R# )%ÚPortz¸
UDP port, listening for packets.

@ivar addressFamily: L{socket.AF_INET} or L{socket.AF_INET6}, depending on
    whether this port is listening on an IPv4 address or an IPv6 address.
r   ÚreactorFNzOptional[int]Ú_realPortNumberc               ó0   € V ^8„  d   QhRRRRRRRRRR	R
R/# )é   ÚportÚintÚprotor   Ú	interfaceÚstrÚmaxPacketSizer   úIOCPReactor | NoneÚreturnÚNone© )Úformats   "ÚB/usr/lib/python3/dist-packages/twisted/internet/iocpreactor/udp.pyÚ__annotate__ÚPort.__annotate__:   sN   € ÷ Cñ CàðCð (ðCð ð	Cð
 ðCð $ðCð 
ñCó    c                óÈ  € Wn         W n        W@n        W0n        V P	                  4        RV n        V P                  4        \        P                  P                  W4       \        P                  ! V P                  V P                  4      p\        P                  ! VP                  4       4      p\!        V4      V n        \!        \$        P&                  ! R4      4      V n        R# )z.
Initialize with a numeric port to listen on.
NÚi)r   ÚprotocolÚreadBufferSizer   Ú	setLogStrÚ_connectedAddrÚ_setAddressFamilyr   Ú
FileHandleÚ__init__ÚsocketÚaddressFamilyÚ
socketTypeÚ_iocpÚ
maxAddrLenÚfilenoÚ	bytearrayÚaddressBufferÚstructÚcalcsizeÚaddressLengthBuffer)Úselfr   r   r   r!   r   ÚsktÚaddrLens   &&&&&&  r'   r3   ÚPort.__init__:   sž   € ð Œ	ØŒØ+ÔØ"ŒØ�‰ÔØ"ˆÔØ×ÑÔ ä×Ñ×$Ñ$ TÔ3ä�mŠm˜D×.Ñ.°·±Ó@ˆÜ×"Ò" 3§:¡:£<Ó0ˆÜ& wÓ/ˆÔä#,¬V¯_ª_¸SÓ-AÓ#BˆÖ r*   c                ó4  € \        V P                  4      '       d   \        P                  V n        R# \        V P                  4      '       d   \        P                  V n        R# V P                  '       d"   \        P                  ! V P                  R4      hR# )z(
Resolve address family for the socket.
znot an IPv4 or IPv6 addressN)	r   r   r4   ÚAF_INET6r5   r   ÚAF_INETr   ÚInvalidAddressError©r?   s   &r'   r1   ÚPort._setAddressFamilyU   se   € ô ˜Ÿ™×(Ò(Ü!'§¡ˆDÖÜ˜Ÿ™×(Ò(Ü!'§¡ˆDÖØ�^�^ˆ^Ü×+Ò+Ø—‘Ð =óð ñ r*   c               ó   € V ^8„  d   QhRR/# )r   r#   r    r%   )r&   s   "r'   r(   r)   b   s   € ÷ @ñ @˜#ñ @r*   c                	ó    € V P                   e(   RV P                  P                   RV P                    R2# RV P                  P                   R2# )NÚ<z on Ú>z not connected>)r   r-   Ú	__class__rG   s   &r'   Ú__repr__ÚPort.__repr__b   sO   € Ø×ÑÒ+Ø�t—}‘}×.Ñ.Ð/¨t°D×4HÑ4HÐ3IÈÐKÐKà�t—}‘}×.Ñ.Ð/¨Ð?Ð?r*   c                ó   € V P                   # )z
Return a socket object.
)r4   rG   s   &r'   Ú	getHandleÚPort.getHandleh   ó   € ð �{‰{Ðr*   c                óF   € V P                  4        V P                  4        R# )z°
Create and bind my socket, and begin listening on it.

This is called on unserialization, and must be called after creating a
server to begin listening on the specified port.
N)Ú_bindSocketÚ_connectToProtocolrG   s   &r'   ÚstartListeningÚPort.startListeningn   s   € ð 	×ÑÔØ×ÑÖ!r*   c               ó   € V ^8„  d   QhRR/# ©r   r#   zsocket.socketr%   )r&   s   "r'   r(   r)   x   s   € ÷ Nñ N˜mñ Nr*   c                	ób   € V P                   P                  V P                  V P                  4      # ©N)r   ÚcreateSocketr5   r6   rG   s   &r'   r]   ÚPort.createSocketx   s#   € Ø�|‰|×(Ñ(¨×);Ñ);¸T¿_¹_ÓMÐMr*   c                	óü  €  V P                  4       pVP                  V P                  V P                  34       TP                  4       ^,          T n        \        P                  ! T P                  T P                  4      : RT P                  : 24       RT n        Yn        T P                  P                  T n        R #   \         d2   p\
        P                  ! T P                  T P                  T4      hR p?ii ; i)Nz starting on T)r]   Úbindr   r   ÚOSErrorr   ÚCannotListenErrorÚgetsocknamer   r   ÚmsgÚ_getLogPrefixr-   Ú	connectedr4   r9   ÚgetFileHandle)r?   r@   Úles   &  r'   rU   ÚPort._bindSocket{   sÂ   € ð	IØ×#Ñ#Ó%ˆCØ�H‰H�d—n‘n d§i¡iÐ0Ô1ð  #Ÿ™Ó0°Õ3ˆÔä�Šà×!Ñ! $§-¡-Ö0°$×2FÓ2FðHô	
ð
 ˆŒØŒØ!Ÿ[™[×/Ñ/ˆÖøô ô 	IÜ×)Ò)¨$¯.©.¸$¿)¹)ÀRÓHÐHûð	Iús   ‚7B? Â?C;Ã
,C6Ã6C;c                	ó’   € V P                   P                  V 4       V P                  4        V P                  P	                  V 4       R # r\   )r-   ÚmakeConnectionÚstartReadingr   ÚaddActiveHandlerG   s   &r'   rV   ÚPort._connectToProtocol�   s2   € Ø�‰×$Ñ$ TÔ*Ø×ÑÔØ�‰×$Ñ$ TÖ*r*   c                	ór   € V P                   '       d%   V P                  WV4       V P                  4        R # R # r\   )ÚreadingÚ
handleReadÚdoRead©r?   ÚrcÚdataÚevts   &&&&r'   ÚcbReadÚPort.cbRead”   s'   € Ø�<�<ˆ<Ø�O‰O˜B cÔ*Ø�K‰KŽMñ r*   c                	óB  € V\         P                  \         P                  \        \        39   d1   V P
                  '       d   V P                  P                  4        R# R# V'       d@   \        P                  ! R \         P                  P                  VR4      : RV: R24       R#  V P                  P                  \        VP                  RV 4      \        P                   ! VP"                  4      4       R#   \$         d    \        P&                  ! 4         R# i ; i)zerror in recvfrom -- zunknown errorz (Ú)N)ÚerrnoÚWSAECONNREFUSEDÚWSAECONNRESETr   r   r0   r-   ÚconnectionRefusedr   rd   Ú	errorcodeÚgetÚdatagramReceivedÚbytesÚbuffr7   ÚmakesockaddrÚ	addr_buffÚBaseExceptionÚerrrs   s   &&&&r'   rq   ÚPort.handleRead™   sÉ   € ØÜ×!Ñ!Ü×ÑÜ$Ü"ð	
ô 
ð ×"×"Ð"Ø—‘×/Ñ/Ö1ñ #çÜ�G‹Gä—?‘?×&Ñ& r¨?Ö;»RðAöð
Ø—‘×.Ñ.Ü˜#Ÿ(™( 5 D˜/Ó*¬E×,>Ò,>¸s¿}¹}Ó,Möøô !ô Ü—’—	ðús   Â(AC: Ã: DÄDc                	ó–  € \         P                  ! V P                  V 4      pV P                  ^ ,          ;Vn        pV P
                  ;Vn        pV P                  ;Vn        p\         P                  ! V P                  4       W#WA4      w  rVV'       d8   V\        8w  d+   V P                  P                  ^ V P                  WVV4       R# R# R# ©é    N)r7   ÚEventrw   Ú_readBuffersrƒ   r;   r…   r>   Úaddr_len_buffÚrecvfromrg   r   r   Ú	callLater)r?   rv   rƒ   r…   rŽ   rt   ru   s   &      r'   rr   ÚPort.doRead¯   s¤   € Ü�kŠk˜$Ÿ+™+ tÓ,ˆà×+Ñ+¨AÕ.Ð.ˆŒ�4Ø$(×$6Ñ$6Ð6ˆŒ˜	Ø,0×,DÑ,DÐDˆÔ˜MÜ—>’>Ø×ÑÓ  $°=ó
‰ˆ÷ �"Ô(Ô(ð �L‰L×"Ñ" 1 d§k¡k°2¸SÖAñ )‰2r*   c                óÚ  € V P                   '       d2   VRV P                   39   g   Q h V P                  P                  V4      # VR8w  g   Q h\#        V^ ,          4      '       gE   \%        V^ ,          4      '       g-   V^ ,          R8w  d   \        P&                  ! V^ ,          R4      h\#        V^ ,          4      '       d>   V P(                  \        P*                  8X  d   \        P&                  ! V^ ,          R4      h\%        V^ ,          4      '       d>   V P(                  \        P,                  8X  d   \        P&                  ! V^ ,          R4      h V P                  P/                  W4      #   \         d¿   pTP                  ^ ,          pT\
        P                  8X  d   T P                  T4      u Rp?# T\
        P                  8X  d   \        P                  ! R4      hT\
        P                  \
        P                  \        \        39   d!   T P                  P!                  4         Rp?R# h Rp?ii ; i  \         d¥   pTP                  ^ ,          pT\
        P                  8X  d   T P                  Y4      u Rp?# T\
        P                  8X  d   \        P                  ! R4      hT\
        P                  \
        P                  \        \        39   d    Rp?R# h Rp?ii ; i)z^
Write a datagram.

@param addr: should be a tuple (ip, port), can be None in connected
mode.
Nzmessage too longz<broadcast>z0write() only accepts IP addresses, not hostnamesz*IPv6 port write() called with IPv4 addressz*IPv4 port write() called with IPv6 address)r0   r4   Úsendra   Úargsr{   ÚWSAEINTRÚwriteÚWSAEMSGSIZEr   ÚMessageLengthErrorr|   r}   r   r   r-   r~   r   r   rF   r5   rD   rE   Úsendto)r?   ÚdatagramÚaddrÚseÚnos   &&&  r'   r–   Ú
Port.writeÁ   sO  € ð ××ÐØ˜D $×"5Ñ"5Ð6Ô6Ð6Ð6ðØ—{‘{×'Ñ'¨Ó1Ð1ð" ˜4”<Ð�<ä  Q¥×(Ò(Ü% d¨1¥g×.Ò.Ø˜•G˜}Ô,ä×/Ò/Ø˜•GÐOóð ô ˜4 �7×#Ò#¨×(:Ñ(:¼f¿o¹oÔ(MÜ×/Ò/Ø˜•GÐIóð ô ˜T !�W×%Ò%¨$×*<Ñ*<ÄÇÁÔ*NÜ×/Ò/Ø˜•GÐIóð ðØ—{‘{×)Ñ)¨(Ó9Ð9øôE ô Ø—W‘W˜Q•Z�ØœŸ™Ô'ØŸ:™: hÓ/Õ/Øœ5×,Ñ,Ô,Ü×2Ò2Ð3EÓFÐFØÜ×)Ñ)Ü×'Ñ'Ü,Ü*ð	ô ð —M‘M×3Ñ3×5Ò5àûðûôF ô Ø—W‘W˜Q•Z�ØœŸ™Ô'ØŸ:™: hÓ5Õ5Øœ5×,Ñ,Ô,Ü×2Ò2Ð3EÓFÐFØÜ×)Ñ)Ü×'Ñ'Ü,Ü*ð	ô õ àûð#úsU   ©E/ ÅH; Å/H8Å:8H3Æ2H8Æ8A4H3È2H3È3H8È;K*É8K%É>K*ÊAK%Ë$K%Ë%K*c                	óH   € V P                  R P                  V4      V4       R# )r*   N)r–   Újoin)r?   Úseqr›   s   &&&r'   ÚwriteSequenceÚPort.writeSequence  s   € Ø�
‰
�3—8‘8˜C“= $Ö'r*   c                óú   € V P                   '       d   \        R4      h\        V4      '       g)   \        V4      '       g   \        P
                  ! VR4      hW3V n         V P                  P                  W34       R# )z
'Connect' to remote server.
z\already connected, reconnecting is not currently supported (talk to itamar if you want this)znot an IPv4 or IPv6 address.N)r0   ÚRuntimeErrorr   r   r   rF   r4   Úconnect)r?   Úhostr   s   &&&r'   r¦   ÚPort.connect  sk   € ð ××ÐÜð4óð ô ˜4× Ò ¬°t×)<Ò)<Ü×+Ò+¨DÐ2PÓQÐQØ#˜lˆÔØ�‰×Ñ˜T˜LÖ)r*   c                	óÐ   € V P                  4        V P                  P                  V 4       V P                  '       d)   V P                  P	                  ^ V P
                  4       R# R# rŠ   )ÚstopReadingr   ÚremoveActiveHandlerf   r�   ÚconnectionLostrG   s   &r'   Ú_loseConnectionÚPort._loseConnection  sH   € Ø×ÑÔØ�‰×'Ñ'¨Ô-Ø�>�>ˆ>Ø�L‰L×"Ñ" 1 d×&9Ñ&9Ö:ñ r*   c                	ó†   € V P                   '       d   \        P                  ! 4       ;qn        MR pV P	                  4        V# r\   )rf   r   ÚDeferredÚdr­   )r?   Úresults   & r'   ÚstopListeningÚPort.stopListening  s2   € Ø�>�>ˆ>Ü#ŸnšnÓ.Ð.ˆF•VàˆFØ×ÑÔØˆr*   c                	ó`   € \         P                  ! R \        ^R7       V P                  4        R# )z-Please use stopListening() to disconnect port)Ú
stacklevelN)ÚwarningsÚwarnÚDeprecationWarningr³   rG   s   &r'   ÚloseConnectionÚPort.loseConnection!  s%   € Ü�ŠØ;ÜØõ	
ð
 	×ÑÖr*   c                ór  € \         P                  ! RV P                  ,          4       RV n        \        P                  P                  W4       V P                  P                  4        V P                  P                  4        V =V =
\        V R4      '       d    V P                  P                  R4       V =R# R# )z
Cleans up my socket.
z(UDP Port %s Closed)Nr±   )r   rd   r   r   r2   r¬   r-   ÚdoStopr4   Úcloserg   Úhasattrr±   Úcallback)r?   Úreasons   &&r'   r¬   ÚPort.connectionLost)  sŠ   € ô 	�ŠÐ&¨×)=Ñ)=Õ=Ô>Ø#ˆÔÜ×Ñ×*Ñ*¨4Ô8Ø�‰×ÑÔØ�‰×ÑÔØˆKØÐÜ�4˜×ÒØ�F‰F�O‰O˜DÔ!Ø’ñ r*   c                óX   € V P                  V P                  4      pRV,          V n        R# )z@
Initialize the C{logstr} attribute to be used by C{logPrefix}.
z%s (UDP)N)re   r-   Úlogstr)r?   Ú	logPrefixs   & r'   r/   ÚPort.setLogStr8  s$   € ð ×&Ñ& t§}¡}Ó5ˆ	Ø  9Õ,ˆŽr*   c                ó   € V P                   # )z;
Returns the name of my class, to prefix log entries with.
)rÄ   rG   s   &r'   rÅ   ÚPort.logPrefix?  rS   r*   c                ó$  € V P                   P                  4       pV P                  \         P                  8X  d   \        P
                  ! R.VO5!  # V P                  \         P                  8X  d    \        P                  ! R.VR,          O5!  # R# )zŒ
Return the local address of the UDP connection

@returns: the local address of the UDP connection
@rtype: L{IPv4Address} or L{IPv6Address}
ÚUDP:Nr   NN)r4   rc   r5   rE   r   ÚIPv4AddressrD   ÚIPv6Address)r?   r›   s   & r'   ÚgetHostÚPort.getHostE  so   € ð �{‰{×&Ñ&Ó(ˆØ×Ñ¤§¡Ô/Ü×&Ò& uÐ4¨tÓ4Ð4Ø×Ñ¤6§?¡?Ô2Ü×&Ò& uÐ:°°RµÓ:Ð:ñ 3r*   c                óx   € V P                   P                  \         P                  \         P                  V4       R# )z‹
Set whether this port may broadcast. This is disabled by default.

@param enabled: Whether the port may broadcast.
@type enabled: L{bool}
N)r4   Ú
setsockoptÚ
SOL_SOCKETÚSO_BROADCAST)r?   Úenableds   &&r'   ÚsetBroadcastAllowedÚPort.setBroadcastAllowedR  s&   € ð 	�‰×Ñœv×0Ñ0´&×2EÑ2EÀwÖOr*   c                ó„   € \        V P                  P                  \        P                  \        P                  4      4      # )zs
Checks if broadcast is currently allowed on this port.

@return: Whether this port may broadcast.
@rtype: L{bool}
)Úboolr4   Ú
getsockoptrÑ   rÒ   rG   s   &r'   ÚgetBroadcastAllowedÚPort.getBroadcastAllowed[  s,   € ô �D—K‘K×*Ñ*¬6×+<Ñ+<¼f×>QÑ>QÓRÓSÐSr*   )r0   r   r;   r5   r>   rf   r±   rg   r   rÄ   r   r-   r.   r4   )Ú é    Nr\   )%Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r4   rE   r5   Ú
SOCK_DGRAMr6   ÚdynamicReadBuffersr   r3   r1   rN   rQ   rW   r]   rU   rV   rw   rq   rr   r–   r¢   r¦   r­   r³   rº   r¬   r/   rÅ   rÍ   rÔ   rÙ   Ú__static_attributes__r%   r*   r'   r   r   #   s¯   ‡ ñð ÓØ—N‘N€MØ×"Ñ"€JØÐð &*€O�]Ó)÷Cò6õ@òò"õNò0ò(+ò
ò
ò,Bô$?òB(ò*ò;òòôò-òò;òPöTr*   r   c                  ó6   € ] tR tRtRtR	R R lltR R ltRtR# )
ÚMulticastPortie  z&
UDP Port that supports multicasting.
Nc               ó4   € V ^8„  d   QhRRRRRRRRRR	R
RRR/# )r   r   r   r   r   r   r    r!   r   r"   ÚlistenMultipler×   r#   r$   r%   )r&   s   "r'   r(   ÚMulticastPort.__annotate__k  sP   € ÷ 
-ñ 
-àð
-ð (ð
-ð ð	
-ð
 ð
-ð $ð
-ð ð
-ð 
ñ
-r*   c                	ó@   € \         P                  WW#WE4       W`n        R # r\   )r   r3   ré   )r?   r   r   r   r!   r   ré   s   &&&&&&&r'   r3   ÚMulticastPort.__init__k  s   € ô 	�‰�d %°MÔKØ,Ör*   c               ó   € V ^8„  d   QhRR/# rZ   r%   )r&   s   "r'   r(   rê   w  s   € ÷ ñ ˜mñ r*   c                	ó<  € \         P                  V 4      pV P                  '       du   VP                  \        P
                  \        P                  ^4       \        \        R4      '       d0   VP                  \        P
                  \        P                  ^4       V# )é   ÚSO_REUSEPORT)	r   r]   ré   rÐ   r4   rÑ   ÚSO_REUSEADDRr¿   rð   )r?   r@   s   & r'   r]   ÚMulticastPort.createSocketw  sh   € Ü×Ñ Ó%ˆØ××ÐØ�N‰Nœ6×,Ñ,¬f×.AÑ.AÀ1ÔEÜ”v˜~×.Ò.Ø—‘œv×0Ñ0´&×2EÑ2EÀqÔIØˆ
r*   )ré   )rÛ   rÜ   NF)rÝ   rÞ   rß   rà   rá   r3   r]   rå   r%   r*   r'   rç   rç   e  s   † ñ÷
-÷ñ r*   rç   )-rá   Ú
__future__r   r{   r4   r<   r·   Útypingr   r   Úzope.interfacer   Útwisted.internetr   r   r   r	   Útwisted.internet._multicastr
   Útwisted.internet.abstractr   r   Útwisted.internet.iocpreactorr   r   r7   Ú"twisted.internet.iocpreactor.constr   r   r   Ú'twisted.internet.iocpreactor.interfacesr   Útwisted.internet.protocolr   Útwisted.pythonr   Ú$twisted.internet.iocpreactor.reactorr   ÚIListeningPortÚIUDPTransportÚISystemHandler2   r   ÚIMulticastTransportrç   r%   r*   r'   Ú<module>r     s¿   ðñõ #ã Û Û Û ß *å &ç >Ó >Ý 6ß @ß G÷ñ õ
 EÝ >Ý çÝ@ñ ØØ×ÑØ×ÑØ×Ñó	ôyTˆ8×Ñó yTóðyTñx	 ˆZ×+Ñ+Ó,ô�N Dó ó -òr*   