ó
    Ö›‘hB*  ã                   ót  • S r SSKrSSKrSSK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Jr   \" \S5      r\" \S5      r\" \S	5      r\" \S
5      r\" \S5      r " S S\5      r\R6                  " \\5        \" \\5       " S S\
R8                  5      5       rS rSS/rg! \ a  r\" \5      eSrCff = f)am  
A kqueue()/kevent() based implementation of the Twisted main loop.

To use this reactor, start your application specifying the kqueue reactor::

   twistd --reactor kqueue ...

To install the event loop from code (and you should do this before any
connections, listeners or connectors are added)::

   from twisted.internet import kqreactor
   kqreactor.install()
é    N)Ú	AttributeÚ	InterfaceÚdeclarationsÚimplementer)ÚmainÚ	posixbase)ÚIReactorDaemonizeÚIReactorFDSet)ÚfailureÚlogÚ	KQ_EV_ADDÚKQ_EV_DELETEÚ	KQ_EV_EOFÚKQ_FILTER_READÚKQ_FILTER_WRITEc                   ó8   • \ rS rSrSr\" S5      r\" S5      rSrg)Ú_IKQueueé*   z*
An interface for KQueue implementations.
zAn implementation of kqueue(2).zAn implementation of kevent(2).© N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   ÚkqueueÚkeventÚ__static_attributes__r   ó    Ú^C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/internet/kqreactor.pyr   r   *   s   † ññ Ð8Ó9€FÙÐ8Ó9ƒFr   r   c                   óp   • \ rS rSrSr\4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\rSrg)ÚKQueueReactoré6   a%  
A reactor that uses kqueue(2)/kevent(2) and relies on Python 2.6 or higher
which has built in support for kqueue in the select module.

@ivar _kq: A C{kqueue} which will be used to check for I/O readiness.

@ivar _impl: The implementation of L{_IKQueue} to use.

@ivar _selectables: A dictionary mapping integer file descriptors to
    instances of L{FileDescriptor} which have been registered with the
    reactor.  All L{FileDescriptor}s which are currently receiving read or
    write readiness notifications will be present as values in this
    dictionary.

@ivar _reads: A set containing integer file descriptors.  Values in this
    set will be registered with C{_kq} for read readiness notifications
    which will be dispatched to the corresponding L{FileDescriptor}
    instances in C{_selectables}.

@ivar _writes: A set containing integer file descriptors.  Values in this
    set will be registered with C{_kq} for write readiness notifications
    which will be dispatched to the corresponding L{FileDescriptor}
    instances in C{_selectables}.
c                 óÖ   • Xl         U R                   R                  5       U l        [        5       U l        [        5       U l        0 U l        [        R                  R                  U 5        g)aF  
Initialize kqueue object, file descriptor tracking dictionaries, and
the base class.

See:
    - http://docs.python.org/library/select.html
    - www.freebsd.org/cgi/man.cgi?query=kqueue
    - people.freebsd.org/~jlemon/papers/kqueue.pdf

@param _kqueueImpl: The implementation of L{_IKQueue} to use. A
    hook for testing.
N)
Ú_implr   Ú_kqÚsetÚ_readsÚ_writesÚ_selectablesr   ÚPosixReactorBaseÚ__init__)ÚselfÚ_kqueueImpls     r   r+   ÚKQueueReactor.__init__Q   sK   € ð !Œ
Ø—:‘:×$Ñ$Ó&ˆŒÜ“eˆŒÜ“uˆŒØˆÔÜ×"Ñ"×+Ñ+¨DÕ1r   c                 ót   • U R                   R                  U R                  R                  XU5      /SS5        g)z�
Private method for changing kqueue registration on a given FD
filtering for events given filter/op. This will never block and
returns nothing.
r   N)r%   Úcontrolr$   r   )r,   ÚfdÚfilterÚops       r   Ú_updateRegistrationÚ!KQueueReactor._updateRegistratione   s.   € ð 	�‰×Ñ˜$Ÿ*™*×+Ñ+¨B¸Ó;Ð<¸aÀÕCr   c                 óF   • U R                   R                  5         SU l         g)z1
Implement L{IReactorDaemonize.beforeDaemonize}.
N)r%   Úclose)r,   s    r   ÚbeforeDaemonizeÚKQueueReactor.beforeDaemonizem   s   € ð 	�‰�‰ÔØˆ�r   c                 óú   • U R                   R                  5       U l        U R                   H  nU R	                  U[
        [        5        M      U R                   H  nU R	                  U[        [        5        M      g)z0
Implement L{IReactorDaemonize.afterDaemonize}.
N)	r$   r   r%   r'   r4   r   r   r(   r   ©r,   r1   s     r   ÚafterDaemonizeÚKQueueReactor.afterDaemonize}   sX   € ð —:‘:×$Ñ$Ó&ˆŒØ—+”+ˆBØ×$Ñ$ R¬¼ÖCñ à—,”,ˆBØ×$Ñ$ R¬¼)ÖDò r   c                 óJ  • UR                  5       nX R                  ;  aF   U R                  U[        [        5        XR                  U'   U R                  R                  U5        gg! [
         a     N7f = f! XR                  U'   U R                  R                  U5        f = f)z'
Implement L{IReactorFDSet.addReader}.
N)Úfilenor'   r4   r   r   ÚOSErrorr)   Úadd)r,   Úreaderr1   s      r   Ú	addReaderÚKQueueReactor.addReader‹   sŠ   € ð �]‰]‹_ˆØ—[‘[Ó ð$Ø×(Ñ(¨¬^¼YÔGð )/×!Ñ! "Ñ%Ø—‘—‘ Õ#ð !øô ó Ùðûð )/×!Ñ! "Ñ%Ø—‘—‘ Õ#úó#   ¡A' Á'
A4Á1A7 Á3A4Á4A7 Á7+B"c                 óJ  • UR                  5       nX R                  ;  aF   U R                  U[        [        5        XR                  U'   U R                  R                  U5        gg! [
         a     N7f = f! XR                  U'   U R                  R                  U5        f = f)z'
Implement L{IReactorFDSet.addWriter}.
N)r?   r(   r4   r   r   r@   r)   rA   )r,   Úwriterr1   s      r   Ú	addWriterÚKQueueReactor.addWriter™   sŽ   € ð �]‰]‹_ˆØ—\‘\Ó!ð%Ø×(Ñ(¨¬_¼iÔHð )/×!Ñ! "Ñ%Ø—‘× Ñ  Õ$ð "øô ó Ùðûð )/×!Ñ! "Ñ%Ø—‘× Ñ  Õ$úrE   c                 ó¨  • Sn UR                  5       nUS:X  a,  U R                  R                  5        H  u  p4XL d  M  Sn  O   gX0R                  ;   a\  U R                  R                  U5        X0R                  ;  a  U R                  U	 U(       d   U R                  U[        [        5        ggg! [         a    Sn N¬f = f! [         a     gf = f)z*
Implement L{IReactorFDSet.removeReader}.
FéÿÿÿÿTN)r?   ÚBaseExceptionr)   Úitemsr'   Úremover(   r4   r   r   r@   )r,   rB   ÚwasLostr1   Úfdess        r   ÚremoveReaderÚKQueueReactor.removeReader§   sÐ   € ð ˆð	Ø—‘“ˆBð �‹8Ø ×-Ñ-×3Ñ3Ö5‘�Ø”>Ø"�GÙñ 6ð
 Ø—‘ÓØ�K‰K×Ñ˜rÔ"ØŸ™Ó%Ø×%Ñ% bÐ)ÞðØ×,Ñ,¨R´ÄÕNð ð	 øô ó 	ØŠBð	ûô  ó Ùðúó#   „B2 ÂC Â2CÃ CÃ
CÃCc                 ó¨  • Sn UR                  5       nUS:X  a,  U R                  R                  5        H  u  p4XL d  M  Sn  O   gX0R                  ;   a\  U R                  R                  U5        X0R                  ;  a  U R                  U	 U(       d   U R                  U[        [        5        ggg! [         a    Sn N¬f = f! [         a     gf = f)z*
Implement L{IReactorFDSet.removeWriter}.
FrK   TN)r?   rL   r)   rM   r(   rN   r'   r4   r   r   r@   )r,   rG   rO   r1   rP   s        r   ÚremoveWriterÚKQueueReactor.removeWriterÁ   sÐ   € ð ˆð	Ø—‘“ˆBð �‹8Ø ×-Ñ-×3Ñ3Ö5‘�Ø”>Ø"�GÙñ 6ð
 Ø—‘ÓØ�L‰L×Ñ Ô#ØŸ™Ó$Ø×%Ñ% bÐ)ÞðØ×,Ñ,¨R´Ä,ÕOð ð	 øô ó 	ØŠBð	ûô  ó ÙðúrS   c                 óÖ   • U R                  U R                   Vs/ s H  oR                  U   PM     snU R                   Vs/ s H  oR                  U   PM     sn5      $ s  snf s  snf )z'
Implement L{IReactorFDSet.removeAll}.
)Ú
_removeAllr'   r)   r(   r;   s     r   Ú	removeAllÚKQueueReactor.removeAllÛ   sY   € ð �‰Ø-1¯[ª[Ó9ª[ r×Ñ˜rÔ"©[Ñ9Ø-1¯\ª\Ó:ª\ r×Ñ˜rÔ"©\Ñ:ó
ð 	
ùÚ9ùÚ:s   šA!ÁA&
c                 ó^   • U R                    Vs/ s H  oR                  U   PM     sn$ s  snf )z(
Implement L{IReactorFDSet.getReaders}.
)r'   r)   r;   s     r   Ú
getReadersÚKQueueReactor.getReadersä   s)   € ð 15·²Ó<²¨"×!Ñ! "Ô%±Ñ<Ð<ùÒ<ó   �*c                 ó^   • U R                    Vs/ s H  oR                  U   PM     sn$ s  snf )z(
Implement L{IReactorFDSet.getWriters}.
)r(   r)   r;   s     r   Ú
getWritersÚKQueueReactor.getWritersê   s)   € ð 15·²Ó=²¨"×!Ñ! "Ô%±Ñ=Ð=ùÒ=r^   c                 ó�  • Uc  Sn U R                   R                  / [        U R                  5      U5      nU R                  nU H7  nUR                  n U R                  U   n[        R                  " XtXvU5        M9     g! [         a)  nUR
                  [
        R                  :X  a   SnAge SnAff = f! [         a     M  f = f)z!
Poll the kqueue for new events.
Né   )r%   r0   Úlenr)   r@   ÚerrnoÚEINTRÚ_doWriteOrReadÚidentr   ÚcallWithLoggerÚKeyError)r,   ÚtimeoutÚeventsÚeÚ_drdwÚeventr1   Ú
selectables           r   ÚdoKEventÚKQueueReactor.doKEventð   s¿   € ð ‰?ØˆGð		Ø—X‘X×%Ñ% b¬#¨d×.?Ñ.?Ó*@À'ÓJˆFð ×#Ñ#ˆÛˆEØ—‘ˆBðMØ!×.Ñ.¨rÑ2�
ô ×"Ò" :°jÀeÖLò øô ó 	ð �w‰wœ%Ÿ+™+Ó%Üàûð	ûô ó ò ðús/   ‡0B ÁB7Â
B4ÂB/Â.B/Â/B4Â7
CÃCc                 ó4  • SnSnUR                   UR                  UR                  UR                  4u  pgp‰U[        -  (       a  U(       a  U	(       a  [
        R                  nO` UR                  5       S:X  a  Sn[        R                  nO8U[        :X  a  SnUR                  5       nU[        :X  a  SnUR                  5       nU(       a  U R'                  XU5        gg! [         a/    [        R                   " 5       n["        R$                  " US5         NSf = f)zz
Private method called when a FD is ready for reading, writing or was
lost. Do the work and raise errors where necessary.
NFrK   TzSAn exception was raised from application code while processing a reactor selectable)r2   ÚflagsÚdataÚfflagsr   r   ÚCONNECTION_LOSTr?   r   Ú_NO_FILEDESCr   ÚdoReadr   ÚdoWriterL   r   ÚFailurer   ÚerrÚ_disconnectSelectable)
r,   rp   r1   ro   ÚwhyÚinReadr2   rt   ru   rv   s
             r   rg   ÚKQueueReactor._doWriteOrRead  sø   € ð
 ˆØˆà�L‰LØ�K‰KØ�J‰JØ�L‰Lð	)
Ñ%ˆ˜ð ”9×¦®&Ü×&Ñ&‰CðØ×$Ñ$Ó&¨"Ó,Ø"�FÜ#×0Ñ0‘Cà¤Ó/Ø!%˜Ø(×/Ñ/Ó1˜Ø¤Ó0Ø!&˜Ø(×0Ñ0Ó2˜ö Ø×&Ñ& z¸Õ?ð øô !ó ô —o’oÓ'�Ü—’Øð=öð	ús   Á$&C Â8C Ã6DÄD)r$   r%   r'   r)   r(   N)r   r   r   r   r   Úselectr+   r4   r8   r<   rC   rH   rQ   rU   rY   r\   r`   rq   rg   ÚdoIterationr   r   r   r   r!   r!   6   sY   † ñð2 $*ô 2ò(Dòò Eò$ò%òò4ò4
ò=ò>òMò<'@ðR ƒKr   r!   c                  ó4   • [        5       n SSKJn  U" U 5        g)z
Install the kqueue() reactor.
r   )ÚinstallReactorN)r!   Útwisted.internet.mainr„   )Úpr„   s     r   Úinstallr‡   :  s   € ô 	‹€AÝ4á�1Õr   r‡   ) r   re   r�   Úzope.interfacer   r   r   r   Útwisted.internetr   r   Útwisted.internet.interfacesr	   r
   Útwisted.pythonr   r   Úgetattrr   r   r   r   r   ÚAttributeErrorrm   ÚImportErrorr   ÚdirectlyProvidesr*   r!   r‡   Ú__all__r   r   r   Ú<module>r‘      sß   ðñ
ó Û ç JÓ Jç ,ß Hß 'ðñ
 ˜ Ó,€IÙ˜6 >Ó2€LÙ˜ Ó,€IÙ˜VÐ%5Ó6€NÙ˜fÐ&7Ó8€Oô
:ˆyô :ð × Ò ˜f hÔ /ñ ˆ]Ð-Ó.ô@�I×.Ñ.ó @ó /ð@òFð ˜IÐ
&�øð} ó Ù
�a‹.Ðûðús   °-B$ Â$B7Â*B2Â2B7