
    h$                    *&   d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZ ddlmZ ddlmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; dd	l<m=Z= e
j>        rdd
l?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZFmGZGmHZHmIZI dddddddZJi 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/d0d1d2d3d4d5i d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadb
ZKi ddcdddedfdgdhdid0djd"dkd$dldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddēddddȜZLi ddɓdddʓdfd˓dd͓ddϓddѓddӓddՓddדddٓddۓddݓddߓdddddddddddZMddddddddZNddddddddZOdddZPddd dddZQdddddZRd	d
ddZSi ddddf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-ZTi ddd.dfd/dΐd0d֐ddddd1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-ZUd2d3d4d5d6d7d8d9ZVi ddd:dfd;dΐd<dd=dd>dd?dd@dAdBdCdDdEdFdGdHdIdJdKdLdMdNddOddPd dQdRdSdTZWi dddUdfdVd̐dWdΐdXdАdYdҐdZdԐd[d֐d\dڐd]dd^dd_d`dadbdcdddedfdgdhdidސdjdkdldmZXi ZY G dn doe          ZZ G dp d\e          Z[ G dq dae          Z\ G dr dse          Z] G dt dXe          Z^ G du d[e          Z_ G dv dee          Z` G dw dxe          Za G dy dze'          Zb G d{ dWe          Zc G d| d}e          Zd G d~ dVe          Ze G d de          Zf G d dge          Zg G d dZe          Zh G d d_e          Zi G d d^e          Zj G d d]e          ZkekeYd<    G d dYe          Zl G d de          Zm G d de          Zn G d de          Zoi 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 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 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 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Zpd,d+d*d)d'd%d#d!ddddZqddddddddZr G d d e          Zs G d! d"e          Zt eesetd#            G d$ d%e          Zu eeseudА#            G d& d'e          Zv eesevdd#            G d( d)e          Zw eesewdҐ#            G d* d+e          Zx ed,di dd-ddd.dfd/d̐d0dΐd1dd2d3d4d5d6d7d8dd9d:d;d<d=d>d?d@dAdBdCdDdEdFdGi dHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdl           e edmd          dn            e e# edod          dp f e/dodqdr s          dt f e.dodqdu s          dv f e'dog exdw s          dx fg e-dodqdy                    dz            e ed{dd|d}dd~          d            e edddddd~          d           gex_y         G d de          Zz G d de          Z{ eese{dؐ#            G d de          Z| eese|dڐ#            G d de          Z} eese}dܐ#            G d de          Z~ eese~dސ#            G d de          Z eesedf#            G d de          Z eesedԐ#            G d de          Z eesed#            G d de          Z eesed`#            G d de          Z eesed#            G d deG          Z G d de          Z eesedb#            G d de          Z eesed#            G d de          Z G d deG          Z G d dce          Z G d de          Z G d de          Z G d de          Z G d de          ZdeHj        fdeHj        fgZd Z G d deD          Z G d de          Z G d de          Z G d de          Z eeedd            G d de          Z G d deG          Z G d de          Z G d de          Z G d deeG          Z eeedæ            G dĄ de          Z eeeddƦ            G dǄ de          Z eeedfƦ            G dɄ de          Z eeed̐Ʀ            G d˄ de          Z eeedАƦ            G d̈́ de          Z eeedҐƦ            G dτ de          Z eeedԐƦ            G dф de          Z eeed֐Ʀ            G dӄ deeG          Z eeedddզ            G dք deeG          Z eeeddæ            G d؄ deeG          Z eeeddddզ            G dڄ de          Z eeedfæ            G d܄ de          Z eeedfddզ            G dބ deeG          Z eeed̐æ            G d de          Z eeedddզ            G d de          Z eeedΐæ            G d de          Z eeedddզ            G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d  de          Z G d de          Z G d de          Z G d de          Z G d d	e          Z G d
 deG          ZddddddZ G d deeG          Z eeedАæ            G d deeG          Z eeedddզ            G d de          Z eeedҐæ            G d de          Z eeedddզ            G d deeG          Z eeed֐æ            G d deeG          Z eeedddզ            G d deeG          Z eeedؐæ            G d  d!e          Z eeedddզ            G d" d#e          Z eeedæ            G d$ d%e          Z eeedddզ            G d& d'e          Z eeedؐæ            G d( d)e          Z G d* d+e&          Z G d, d-eeG          Z eeedܐæ            G d. d/e          Z G d0 d1e          Z G d2 d3e          Z G d4 d5e          Z G d6 d7e          Z G d8 d9e          Z G d: d;e          Z G d< d=e&          Z G d> d?eeG          Z eeedddզ            G d@ dAeeG          Z eeedæ            G dB dCeeG          Z eeedddզ            G dD dEe          Z eeedæ            G dF dGeeG          Z eeedddզ            G dH dIe          Z G dJ dKe          ZېdLdMdNdOdZܐdPdQdRdSdTdUdVdWdXZ G dY dZeeG          Z eeedæ            G d[ d\eeG          Z eeedddզ            G d] d^eeG          Z eeed`æ            G d_ d`e          Z eeed`ddզ            G da dbe          Z G dc dde          Z G de dfe          Z G dg dhe          Z G di dje          Z G dk dle          Z G dm dne          Z G do dpe'          Z G dq dre          Z	 dydtZ G du dve=          Z G dw dxe;          ZdS (z  z
SMB (Server Message Block), also known as CIFS - version 2

.. note::
    You will find more complete documentation for this layer over at
    `SMB <https://scapy.readthedocs.io/en/latest/layers/smb.html>`_
    N)select_objects)confcrypto_validator)log_runtime)Packetbind_layersbind_top_down)'ByteEnumField	ByteFieldConditionalFieldFieldLenFieldFieldListField	FlagValue
FlagsFieldIP6FieldIPFieldIntField
LEIntFieldLEIntEnumFieldLELongFieldLenFieldLEShortEnumFieldLEShortFieldMultipleTypeFieldPadFieldPacketFieldPacketLenFieldPacketListFieldReversePadFieldScalingFieldShortEnumField
ShortFieldStrFieldUtf16StrFixedLenFieldStrLenFieldStrLenFieldUtf16StrNullFieldUtf16ThreeBytesFieldUTCTimeField	UUIDFieldXLEIntFieldXLELongFieldXLEShortFieldXStrLenFieldXStrFixedLenFieldYesNoByteField)DefaultSession)StreamSocket)SP800108_KDFCTR)GSSAPI_BLOB)
NBTSession)_NTLMPayloadField_NTLMPayloadPacket
_NTLM_ENUM_NTLM_post_buildz	SMB 2.002zSMB 2.1z	SMB 2.???zSMB 3.0z	SMB 3.0.2z	SMB 3.1.1)    i         STATUS_SUCCESSi  STATUS_PENDINGi  STATUS_NOTIFY_CLEANUP  STATUS_NOTIFY_ENUM_DIRi2  ERROR_PASSWORD_EXPIREDi3  ERROR_ACCOUNT_DISABLEDi  ERROR_TRUST_FAILURE       STATUS_BUFFER_OVERFLOWl       STATUS_NO_MORE_FILESl   -    STATUS_STOPPED_ON_SYMLINKl     SEC_E_LOGON_DENIEDl     SEC_E_MESSAGE_ALTEREDl     SEC_E_OUT_OF_SEQUENCEl       STATUS_INVALID_INFO_CLASSl       STATUS_INFO_LENGTH_MISMATCH       STATUS_INVALID_PARAMETERl       STATUS_NO_SUCH_FILE       STATUS_MORE_PROCESSING_REQUIREDl   "    STATUS_ACCESS_DENIEDl   3    STATUS_OBJECT_NAME_INVALIDl   4    STATUS_OBJECT_NAME_NOT_FOUNDl   C    STATUS_SHARING_VIOLATIONl   a    STATUS_PRIVILEGE_NOT_HELDl   d    STATUS_NO_SUCH_USERl   m    STATUS_LOGON_FAILUREl   n    STATUS_ACCOUNT_RESTRICTIONl   q    STATUS_PASSWORD_EXPIREDl   r    STATUS_ACCOUNT_DISABLEDl       STATUS_INSUFFICIENT_RESOURCESl       STATUS_FILE_IS_A_DIRECTORYl       STATUS_NOT_SUPPORTEDl       STATUS_NETWORK_NAME_DELETEDl       STATUS_BAD_NETWORK_NAMEl       STATUS_CANCELLEDSTATUS_INVALID_COMPUTER_NAMESTATUS_FILE_CLOSEDSTATUS_LOGON_TYPE_NOT_GRANTEDSTATUS_NO_TRUST_SAM_ACCOUNTSTATUS_FS_DRIVER_REQUIREDSTATUS_USER_SESSION_DELETEDSTATUS_CONNECTION_DISCONNECTEDSTATUS_NOT_FOUNDSTATUS_PATH_NOT_COVEREDSTATUS_NETWORK_SESSION_EXPIRED)
l   "   l   (   l   [   l      l      l      l      l   %   l   W   l   \   IO_REPARSE_TAG_RESERVED_ZERO   IO_REPARSE_TAG_RESERVED_ONE   IO_REPARSE_TAG_RESERVED_TWOl     @ IO_REPARSE_TAG_MOUNT_POINTIO_REPARSE_TAG_HSMIO_REPARSE_TAG_DRIVE_EXTENDERIO_REPARSE_TAG_HSM2l       IO_REPARSE_TAG_SISl       IO_REPARSE_TAG_WIMl   	    IO_REPARSE_TAG_CSVl   
    IO_REPARSE_TAG_DFSl       IO_REPARSE_TAG_FILTER_MANAGERl     @ IO_REPARSE_TAG_SYMLINKl     @ IO_REPARSE_TAG_IIS_CACHEl       IO_REPARSE_TAG_DFSRl       IO_REPARSE_TAG_DEDUPl       IO_REPARSE_TAG_APPXSTRMl       IO_REPARSE_TAG_NFSl       IO_REPARSE_TAG_FILE_PLACEHOLDERl       IO_REPARSE_TAG_DFMl       IO_REPARSE_TAG_WOFl       IO_REPARSE_TAG_WCIl      IO_REPARSE_TAG_WCI_1l     @ IO_REPARSE_TAG_GLOBAL_REPARSEl       IO_REPARSE_TAG_CLOUDl      IO_REPARSE_TAG_CLOUD_1l       IO_REPARSE_TAG_CLOUD_2l   0   IO_REPARSE_TAG_CLOUD_3l   @   IO_REPARSE_TAG_CLOUD_4l   P   IO_REPARSE_TAG_CLOUD_5l   `   IO_REPARSE_TAG_CLOUD_6l   p   IO_REPARSE_TAG_CLOUD_7l      IO_REPARSE_TAG_CLOUD_8l     IO_REPARSE_TAG_CLOUD_9l      IO_REPARSE_TAG_CLOUD_Al   0  IO_REPARSE_TAG_CLOUD_Bl   @  IO_REPARSE_TAG_CLOUD_Cl   P  IO_REPARSE_TAG_CLOUD_Dl   `  IO_REPARSE_TAG_CLOUD_El   p  IO_REPARSE_TAG_CLOUD_Fl       IO_REPARSE_TAG_APPEXECLINKl       IO_REPARSE_TAG_PROJFSl     @ IO_REPARSE_TAG_LX_SYMLINKl       IO_REPARSE_TAG_STORAGE_SYNCl     @ IO_REPARSE_TAG_WCI_TOMBSTONEl        IO_REPARSE_TAG_UNHANDLEDl   !    IO_REPARSE_TAG_ONEDRIVEl   "  @ IO_REPARSE_TAG_PROJFS_TOMBSTONEl   #    IO_REPARSE_TAG_AF_UNIXl   $    IO_REPARSE_TAG_LX_FIFOl   %    IO_REPARSE_TAG_LX_CHRIO_REPARSE_TAG_LX_BLKIO_REPARSE_TAG_WCI_LINKIO_REPARSE_TAG_WCI_LINK_1)l   &    l   '  @ l   ' @ SMB2_NEGOTIATESMB2_SESSION_SETUPSMB2_LOGOFF   SMB2_TREE_CONNECT   SMB2_TREE_DISCONNECT   SMB2_CREATE   
SMB2_CLOSE   
SMB2_FLUSH   	SMB2_READ	   
SMB2_WRITE
   	SMB2_LOCK   
SMB2_IOCTL   SMB2_CANCEL   	SMB2_ECHO   SMB2_QUERY_DIRECTORY   SMB2_CHANGE_NOTIFY   SMB2_QUERY_INFOSMB2_SET_INFOSMB2_OPLOCK_BREAK)      #SMB2_PREAUTH_INTEGRITY_CAPABILITIESSMB2_ENCRYPTION_CAPABILITIESSMB2_COMPRESSION_CAPABILITIES!SMB2_NETNAME_NEGOTIATE_CONTEXT_IDSMB2_TRANSPORT_CAPABILITIES SMB2_RDMA_TRANSFORM_CAPABILITIESSMB2_SIGNING_CAPABILITIES)rp   rr   r   r   r   r   r   DFSLEASING	LARGE_MTUMULTI_CHANNELPERSISTENT_HANDLESDIRECTORY_LEASING
ENCRYPTION)rp   rr   r   r   r       @   SIGNING_ENABLEDSIGNING_REQUIREDrp   rr   NoneLZNT1LZ77zLZ77 + Huffman
Pattern_V1)r   rp   rr   r   r   AES-128-CCMzAES-128-GCMzAES-256-CCMzAES-256-GCMrp   rr   r   r   zHMAC-SHA256AES-CMACzAES-GMACr   rp   rr   FILE_READ_DATAFILE_WRITE_DATAFILE_APPEND_DATAFILE_READ_EAFILE_WRITE_EAr   FILE_DELETE_CHILDr   FILE_EXECUTE   FILE_READ_ATTRIBUTES   FILE_WRITE_ATTRIBUTES   DELETE   READ_CONTROL   	WRITE_DAC   WRITE_OWNER   SYNCHRONIZE   ACCESS_SYSTEM_SECURITY   MAXIMUM_ALLOWED   GENERIC_ALLGENERIC_EXECUTEGENERIC_WRITEGENERIC_READ)       @        FILE_LIST_DIRECTORYFILE_ADD_FILEFILE_ADD_SUBDIRECTORYFILE_TRAVERSEDISKTREEPRINTQDEVICEIPC
CLUSTER_FSCLUSTER_SOFSCLUSTER_DFS)r   rp   rr   r   r         FILE_ATTRIBUTE_READONLYFILE_ATTRIBUTE_HIDDENFILE_ATTRIBUTE_SYSTEMFILE_ATTRIBUTE_DIRECTORYFILE_ATTRIBUTE_ARCHIVEFILE_ATTRIBUTE_NORMALFILE_ATTRIBUTE_TEMPORARY   FILE_ATTRIBUTE_SPARSE_FILE   FILE_ATTRIBUTE_REPARSE_POINT   FILE_ATTRIBUTE_COMPRESSED   FILE_ATTRIBUTE_OFFLINE    "FILE_ATTRIBUTE_NOT_CONTENT_INDEXED @  FILE_ATTRIBUTE_ENCRYPTED   FILE_ATTRIBUTE_INTEGRITY_STREAMFILE_ATTRIBUTE_NO_SCRUB_DATAFILE_ATTRIBUTE_RECALL_ON_OPENFILE_ATTRIBUTE_PINNEDFILE_ATTRIBUTE_UNPINNED$FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS)r     @ FileDirectoryInformationFileFullDirectoryInformationFileBothDirectoryInformationFileBasicInformationFileStandardInformationFileInternalInformationFileEaInformationFileAccessInformationFileRenameInformationFilePositionInformationFileModeInformationr   FileAlignmentInformationr   FileAllInformation"   FileNetworkOpenInformation%   FileIdBothDirectoryInformation&   FileIdFullDirectoryInformationFileNamesInformationFileNormalizedNameInformationFileIdExtdDirectoryInformation)0   <   c                   P    e Zd Z edddd           eddd           gZd	 ZdS )
FILE_NAME_INFORMATIONFileNameLengthNFileName<I	length_offmt c                     | j         S NrH  pkts    U/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/smb2.py<lambda>zFILE_NAME_INFORMATION.<lambda>  s	    AS     length_fromc                     t           j        S rP  r   padding_layerselfss     rT  default_payload_classz+FILE_NAME_INFORMATION.default_payload_class      !!rV  )__name__
__module____qualname__r   r&   fields_descr_   rV  rT  rG  rG    sZ        &
MMMR5S5STTTK
" " " " "rV  rG  c                   2    e Zd Z eddde          gZd ZdS )r5  AccessFlagsr   c                     t           j        S rP  rZ  r\  s     rT  r_  z+FileAccessInformation.default_payload_class  r`  rV  N)ra  rb  rc  r   SMB2_ACCESS_FLAGS_FILErd  r_  re  rV  rT  r5  r5    s>        
=!S*@AAK" " " " "rV  c                   F    e Zd Z eddddddddd	d
ddd
          gZd ZdS )r9  rg  r   FILE_BYTE_ALIGNMENTFILE_WORD_ALIGNMENTFILE_LONG_ALIGNMENTFILE_QUAD_ALIGNMENTFILE_OCTA_ALIGNMENTFILE_32_BYTE_ALIGNMENTFILE_64_BYTE_ALIGNMENTFILE_128_BYTE_ALIGNMENTFILE_256_BYTE_ALIGNMENTFILE_512_BYTE_ALIGNMENT)
r   rp   r   r   r      ?         i  c                     t           j        S rP  rZ  r\  s     rT  r_  z.FileAlignmentInformation.default_payload_class  r`  rV  N)ra  rb  rc  r   rd  r_  re  rV  rT  r9  r9    sg        1111144555 	
 	
K&" " " " "rV  c                   J    e Zd Z edddd           eddd           gZdS )	FileAlternateNameInformationrH  NrI  rJ  rK  rV  c                     | j         S rP  rQ  rR  s    rT  rU  z%FileAlternateNameInformation.<lambda>  	    #BT rV  rW  )ra  rb  rc  r   r&   rd  re  rV  rT  r|  r|    sE        &
MMMS6T6TUUUKKKrV  r|  c            
           e Zd Z edddg dd           edddg dd           edddg dd           ed	ddg dd           ed
dde           edd          gZd ZdS )r1  CreationTimeN<QiA  rp   rp   r   r   r       cArM  epochcustom_scalingLastAccessTimeLastWriteTime
ChangeTimeFileAttributesr   rh  Reservedr   c                     t           j        S rP  rZ  r\  s     rT  r_  z*FileBasicInformation.default_payload_class  r`  rV  )	ra  rb  rc  r)   r   r  r   rd  r_  re  rV  rT  r1  r1    s        '''	
 	
 	
 	'''	
 	
 	
 	'''	
 	
 	
 	'''	
 	
 	
 	
#ZnEEQ=KB" " " " "rV  c                   .    e Zd Z edd          gZd ZdS )r4  EaSizer   c                     t           j        S rP  rZ  r\  s     rT  r_  z'FileEaInformation.default_payload_class  r`  rV  N)ra  rb  rc  r   rd  r_  re  rV  rT  r4  r4    s9        
8QK" " " " "rV  c                       e Zd Z edddg dd           edddg dd           edddg dd           ed	ddg dd           ed
d           edd           eddde           edd          gZd Z	dS )r<  r  Nr  r  r  r  r  r  r  AllocationSizer   	EndOfFiler   r  r   rh  	Reserved2c                     t           j        S rP  rZ  r\  s     rT  r_  z0FileNetworkOpenInformation.default_payload_class  r`  rV  )
ra  rb  rc  r)   r   r   r  r   rd  r_  re  rV  rT  r<  r<    s       '''	
 	
 	
 	'''	
 	
 	
 	'''	
 	
 	
 	'''	
 	
 	
 	$d++K##
#ZnEEa  A!KF" " " " "rV  c                      e Zd Z edd           edd          gej        dd         ej        dd         ddd         z   ej        d         gz   z    eddd	d
           e edde	          d fg edd                     e
dd           e
dd           eddd           e ed
dd           d          gz   Zd ZdS )FILE_BOTH_DIR_INFORMATIONNextN	FileIndexr   r   r   rH  rJ  rI  rM  rL  r  c                     | j         j        S rP  )r  r  rR  s    rT  rU  z"FILE_BOTH_DIR_INFORMATION.<lambda>1  s    C$6$S rV  ShortNameLength	Reserved1	ShortNamerV     length   .c                     | j         S rP  rQ  rR  s    rT  rU  z"FILE_BOTH_DIR_INFORMATION.<lambda>;  s	    c>P rV  rW  r   )alignc                     t           j        S rP  rZ  r\  s     rT  r_  z/FILE_BOTH_DIR_INFORMATION.default_payload_classB  r`  rV  )ra  rb  rc  r   r<  rd  r   r   r   REPARSE_TAGSr   r$   r   r&   r_  re  rV  rT  r  r    sm        Jvt$$J{A&&	

 '22A26(4QqS9$$B$?@)5a89:	
 M*DdjQQQ 'xLAASS 
8Q''  I'++Ik1%%[#b999H  2P2P   	  #
 	
 H" " " " "rV  r  c                       e Zd Zd ZdS )_NextPacketListFieldc                    d}t          |          D ]j\  }}|                     ||          }|j        C|t          |          dz
  k    r-t	          j        dt          |                    |dd          z   }||z  }k||z   S )NrV  rp   rJ  r   )	enumeratei2mr  lenstructpack)r]  rS  r^  valresivxs           rT  addfieldz_NextPacketListField.addfieldG  s    cNN 	 	DAqa  Av~!s3xx!|"3"3Kc!ff--!""51HCC3wrV  N)ra  rb  rc  r  re  rV  rT  r  r  F  s#            rV  r  c                   .    e Zd Z edg ed          gZdS )r0  files  	max_countN)ra  rb  rc  r  r  rd  re  rV  rT  r0  r0  R  6        %		
 	
 	
KKKrV  c                   J    e Zd Zej        dd         ej        d         gz   ZdS )FILE_FULL_DIR_INFORMATIONNr   r  )ra  rb  rc  r  rd  re  rV  rT  r  r  `  s5        +7<!-b1@ KKKrV  r  c                   .    e Zd Z edg ed          gZdS )r/  r  r  r  N)ra  rb  rc  r  r  rd  re  rV  rT  r/  r/  f  r  rV  c                   |    e Zd Zej        dd          edd           edd          ej        d         gz   Zd ZdS )FILE_ID_BOTH_DIR_INFORMATIONNr   r  r   FileIdr  c                     t           j        S rP  rZ  r\  s     rT  r_  z2FILE_ID_BOTH_DIR_INFORMATION.default_payload_class{  r`  rV  )ra  rb  rc  r  rd  r   r   r_  re  rV  rT  r  r  t  sh        +7<[!$$Ha  !-b1@ K" " " " "rV  r  c                   .    e Zd Z edg ed          gZdS )r>  r  r  r  N)ra  rb  rc  r  r  rd  re  rV  rT  r>  r>    s6        (		
 	
 	
KKKrV  c                   .    e Zd Z edd          gZd ZdS )r3  IndexNumberr   c                     t           j        S rP  rZ  r\  s     rT  r_  z-FileInternalInformation.default_payload_class  r`  rV  Nra  rb  rc  r   rd  r_  re  rV  rT  r3  r3    s9        M1%%K" " " " "rV  c                   @    e Zd Z eddddddddd	d
          gZd ZdS )r8  Moder   rh  FILE_WRITE_TROUGHFILE_SEQUENTIAL_ONLYFILE_NO_INTERMEDIATE_BUFFERINGFILE_SYNCHRONOUS_IO_ALERTFILE_SYNCHRONOUS_IO_NONALERTFILE_DELETE_ON_CLOSE)rr   r   r   r   r   r   c                     t           j        S rP  rZ  r\  s     rT  r_  z)FileModeInformation.default_payload_class  r`  rV  N)ra  rb  rc  r   rd  r_  re  rV  rT  r8  r8    s^        
/2<7:2 		
 	
K " " " " "rV  c                   .    e Zd Z edd          gZd ZdS )r7  CurrentByteOffsetr   c                     t           j        S rP  rZ  r\  s     rT  r_  z-FilePositionInformation.default_payload_class  r`  rV  Nr  re  rV  rT  r7  r7    s:        '++K" " " " "rV  c            	           e Zd Z edd           eddd           edd           ed	dd
d           ed
dd           gZd Z	d Z
dS )r6  ReplaceIfExistsFr  rV  r   r  RootDirectoryr   rH  rI  rJ  rK  c                     | j         S rP  rQ  rR  s    rT  rU  zFileRenameInformation.<lambda>  r~  rV  rW  c                 b    t          |          dk     r|dt          |          z
  dz  z  }||z   S )Nr      r  r]  rS  pays      rT  
post_buildz FileRenameInformation.post_build  s6    s88b== BSMW,,CSyrV  c                     t           j        S rP  rZ  r\  s     rT  r_  z+FileRenameInformation.default_payload_class  r`  rV  N)ra  rb  rc  r0   r/   r   r   r&   rd  r  r_  re  rV  rT  r6  r6    s        (%00*c!444OQ''&ZTJJJS6T6TUUUK  " " " " "rV  c            	           e Zd Z edd           edd           edd           edd           edd           ed	d          gZd
 ZdS )r2  r  r   r  r   NumberOfLinksrp   DeletePending	Directoryr  c                     t           j        S rP  rZ  r\  s     rT  r_  z-FileStandardInformation.default_payload_class  r`  rV  N)	ra  rb  rc  r   r   r   r"   rd  r_  re  rV  rT  r2  r2    s        $d++K##
?A&&	/1%%	+q!!
:q!!K" " " " "rV  c            	           e Zd Z edd           edddd           edd           ed	d
           eddd           gZdS )FileStreamInformationr  r   StreamNameLengthN
StreamNamerJ  rK  
StreamSizeStreamAllocationSizer   s   ::$DATAc                     | j         S rP  )r  rR  s    rT  rU  zFileStreamInformation.<lambda>  s	    c>R rV  rW  )ra  rb  rc  r   r   r   r&   rd  re  rV  rT  r  r    sz        
61($,DQQQL!$$*D11*2R2R	
 	
 	
KKKrV  r  c                   2    e Zd Z eddd          gZd ZdS )WINNT_SID_IDENTIFIER_AUTHORITYValues        r   r  c                     t           j        S rP  rZ  r]  payloads     rT  r_  z4WINNT_SID_IDENTIFIER_AUTHORITY.default_payload_class  r`  rV  N)ra  rb  rc  r$   rd  r_  re  rV  rT  r  r    s@        "=aHHHK" " " " "rV  r  c                       e Zd Z edd           edddd           ed e            e           edd	g ed
d	          d           gZ	d Z
 ej        d          Zed             Zd ZdS )	WINNT_SIDRevisionrp   SubAuthorityCountNSubAuthorityBcount_ofrM  IdentifierAuthorityr   rN  c                     | j         S rP  )r  rR  s    rT  rU  zWINNT_SID.<lambda>  	    3#8 rV  
count_fromc                     t           j        S rP  rZ  r  s     rT  r_  zWINNT_SID.default_payload_class  r`  rV  z^S-(\d)-(\d+)((?:-\d+)*)$c                    t           j                            |           }|st          d          |                                \  }}}t          t          |          t          t          j        dt          |                    dd                    d |dd          	                    d          D                       S )	NzInvalid SID format !>Qrr   )r  c                 ,    g | ]}t          |          S re  )int.0r  s     rT  
<listcomp>z%WINNT_SID.fromstr.<locals>.<listcomp>%  s    FFFQ#a&&FFFrV  rp   -)r  r  r  )
r  _SID_REGmatch
ValueErrorgroupsr  r  r  r  split)r  mrev	authoritysubauthoritys        rT  fromstrzWINNT_SID.fromstr  s    $$Q'' 	53444'(xxzz$YXX >k$I77;! ! ! GF,qrr*:*@*@*E*EFFF
 
 
 	
rV  c           	          d| j         dt          j        dd| j        j        z             d         | j        r'dd                    d | j        D                       z  ndS )	NzS-r  r  s     r   z-%sc              3   4   K   | ]}t          |          V  d S rP  )strr  s     rT  	<genexpr>z$WINNT_SID.summary.<locals>.<genexpr>,  s(      @@c!ff@@@@@@rV  rN  )r  r  unpackr  r  r  joinr]  s    rT  summaryzWINNT_SID.summary(  st     MMMM$d.F.L LMMaPP USXX@@d.?@@@@@@@
 	
rV  )ra  rb  rc  r   r   r   r  r   r   rd  r_  recompiler  staticmethodr  r  re  rV  rT  r  r    s        	*a  )4.cRRR!**,,*	
 	

 	CJr188		
 	
 	
K " " " rz677H
 
 \

 
 
 
 
rV  r  zS-1-0-0zNull SIDzS-1-1-0EveryonezS-1-2-0LocalzS-1-2-1zConsole LogonzS-1-3-0zCreator Owner IDzS-1-3-1zCreator Group IDzS-1-3-2zOwner ServerzS-1-3-3zGroup ServerzS-1-3-4zOwner RightszS-1-4zNon-unique AuthorityzS-1-5zNT Authorityz
S-1-5-80-0zAll ServiceszS-1-5-1Dialupz	S-1-5-113zLocal accountz	S-1-5-114z0Local account and member of Administrators groupzS-1-5-2NetworkzS-1-5-3BatchzS-1-5-4InteractivezS-1-5-6ServicezS-1-5-7zAnonymous LogonzS-1-5-8ProxyzS-1-5-9zEnterprise Domain ControllerszS-1-5-10SelfzS-1-5-11zAuthenticated UserszS-1-5-12zRestricted CodezS-1-5-13zTerminal Server UserzS-1-5-14zRemote Interactive LogonzS-1-5-15zThis OrganizationzS-1-5-17IUSRzS-1-5-18zSystem (or LocalSystem)zS-1-5-19zNT Authority (LocalService)zS-1-5-20zNetwork ServicezS-1-5-32-544AdministratorszS-1-5-32-545UserszS-1-5-32-546GuestszS-1-5-32-547zPower UserszS-1-5-32-548zAccount OperatorszS-1-5-32-549zServer OperatorszS-1-5-32-550zPrint OperatorszS-1-5-32-551zBackup OperatorszS-1-5-32-552ReplicatorszS-1-5-32-554z*Builtin\Pre-Windows 2000 Compatible AccesszS-1-5-32-555zBuiltin\Remote Desktop UserszS-1-5-32-556z'Builtin\Network Configuration OperatorszS-1-5-32-557z&Builtin\Incoming Forest Trust BuilderszS-1-5-32-558z!Builtin\Performance Monitor UserszS-1-5-32-559zBuiltin\Performance Log UserszS-1-5-32-560z*Builtin\Windows Authorization Access GroupzS-1-5-32-561z'Builtin\Terminal Server License ServerszS-1-5-32-562zBuiltin\Distributed COM UserszS-1-5-32-568zBuiltin\IIS_IUSRSzS-1-5-32-569zBuiltin\Cryptographic OperatorszS-1-5-32-573zBuiltin\Event Log ReaderszS-1-5-32-574z'Builtin\Certificate Service DCOM AccesszS-1-5-32-575z!Builtin\RDS Remote Access ServerszS-1-5-32-576zBuiltin\RDS Endpoint ServerszS-1-5-32-577zBuiltin\RDS Management ServerszS-1-5-32-578zBuiltin\Hyper-V AdministratorszS-1-5-32-579z+Builtin\Access Control Assistance OperatorszS-1-5-32-580zBuiltin\Remote Management UserszS-1-5-32-581zBuiltin\Default AccountzS-1-5-32-582zBuiltin\Storage Replica AdminszS-1-5-32-583zBuiltin\Device OwnerszS-1-5-64-10zNTLM AuthenticationzS-1-5-64-14zSChannel AuthenticationzS-1-5-64-21zDigest AuthenticationzS-1-5-80z
NT Servicez
S-1-5-83-0z#NT VIRTUAL MACHINE\Virtual Machines
WRITE_DACL)r  r  r  r   r   r   r   r   r   r   r   OBJECT_INHERITCONTAINER_INHERITNO_PROPAGATE_INHERITINHERIT_ONLYINHERITED_ACESUCCESSFUL_ACCESSFAILED_ACCESS)rp   rr   r   r   r   r   r   c            	           e Zd Z edd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'           ed(dde           ed)d*d+d, -          gZd. Zd1d/Z	d1d0Z
d*S )2WINNT_ACE_HEADERAceTyper   ACCESS_ALLOWEDrp   ACCESS_DENIEDrr   SYSTEM_AUDITr   SYSTEM_ALARMr   ACCESS_ALLOWED_COMPOUNDr   ACCESS_ALLOWED_OBJECTr   ACCESS_DENIED_OBJECTr   SYSTEM_AUDIT_OBJECTr   SYSTEM_ALARM_OBJECTr   ACCESS_ALLOWED_CALLBACKr   ACCESS_DENIED_CALLBACKr   ACCESS_ALLOWED_CALLBACK_OBJECTr   ACCESS_DENIED_CALLBACK_OBJECTr   SYSTEM_AUDIT_CALLBACKr   SYSTEM_ALARM_CALLBACKr   SYSTEM_AUDIT_CALLBACK_OBJECTr   SYSTEM_ALARM_CALLBACK_OBJECTSYSTEM_MANDATORY_LABELSYSTEM_RESOURCE_ATTRIBUTESYSTEM_SCOPED_POLICY_ID)r   r      AceFlagsAceSizeN<Hc                     | dz   S Nr   re  r  s    rT  rU  zWINNT_ACE_HEADER.<lambda>  s
    QU rV  )rM  adjustc                 J    |d | j         dz
           || j         dz
  d          fS rM  )rJ  )r]  ps     rT  extract_paddingz WINNT_ACE_HEADER.extract_padding  s1    #4<!##$aq(8(:(:&;;;rV  c           
      j   | j         j                                        }| j         j        }|%t	          |t          ddd|          j                  }t          t	          | j        g d                    }t          | j         dd          }t          | j         dd          }d}t          | j         d          rqg }| j         j        j        D ]/}	|	j        d	v r|                    d
          }
|                    d
          }|	                    d          }|	j        dv r |                    d| d| d|
 d           t|                    | d| d|
            |	j        dv rD|                    d
          }|	                    d          }|                    | |            |	j        dv r%fd|                     |	                     |	j        dk    rt#          d|	j        z            t%          |          dk    rt#          d          d|d         z  }||||||dS )zz
        Return the ACE data as usable data.

        :param accessMask: context-specific flags for the ACE Mask.
        NrN  r   r   )OICINPIOIDSAFA
ObjectTypeInheritedObjectTypeApplicationData)r                                    r  z%TokenType%)rg  rh  (z) z () )
                              )rp   rr   r   r   r   r  P   Q               c                     | j         dv r
d| j        z  S | j         dk    r)dd                    fd| j        D                       z  S t          | j                  S )N)r   r  z"%s"rv  z({%s}),c              3   .   K   | ]} |          V  d S rP  re  )r  r  lits     rT  r  z<WINNT_ACE_HEADER.extractData.<locals>.lit.<locals>.<genexpr>  s+      6P6P!ss1vv6P6P6P6P6P6PrV  )	TokenTypevaluer  r  )ctr  s    rT  r  z)WINNT_ACE_HEADER.extractData.<locals>.lit  sf    <<77#)BH#44\T11#+chh6P6P6P6Prx6P6P6P.P.P#PP#&rx==0rV  zUnhandled token type %srp   zIncomplete SDDL !(%s))ace-flags-string
sid-stringmaskobject-guidinherited-object-guid	cond-expr)r  Sidr  Maskr   r   namesr  rI  getattrhasattrr]  Tokensr  popsprintfappendr  r  )r]  
accessMask
sid_stringr  ace_flag_stringobject_guidinherit_object_guid	cond_exprr  r  t1t0ttr  s                @rT  extractDatazWINNT_ACE_HEADER.extractData  s    \%--//
| !T:b!R#D#D#JKKDdm%O%O%OPP
 
 dlL"==%dl4I2NN	4<!233 *	(Cl29 $O $O< $  
 BBM22B||33

#8r#8#8R#8#82#8#8#89999

b#4#42#4#4#4#45555\ &   BM22BJJ"{b{{++++\ &  
1 1 1 1 1 JJss2ww''''\T))$%>%MNNN3xx1}} !4555QI /$&%8"
 
 	
rV  c                    |                      |          }d}| j        dv rsddddd| j                 }dd	                    d
 ||d         |t          |d                   t          |d                   |d         |d         fD                       z  S ddddddddd| j                 }dd	                    d ||d         |t          |d                   t          |d                   |d         |d         fD                       z  S )z
        Return SDDL
        )r  rN  )r   r   r   r   XAXDXUZAzD:(%s);c              3      K   | ]}||V  	d S rP  re  r  s     rT  r  z*WINNT_ACE_HEADER.toSDDL.<locals>.<genexpr>  4         }  %}}} rV  r  r  r  r  r  ADAUOAODOUMLSP)r   rp   rr   r   r   r   r   rH  r  c              3      K   | ]}||V  	d S rP  re  r  s     rT  r  z*WINNT_ACE_HEADER.toSDDL.<locals>.<genexpr>5  r  rV  )r  r3  r  r  )r]  r  data
ace_rightsconditional_ace_typeace_types         rT  toSDDLzWINNT_ACE_HEADER.toSDDL  s    :66
<///	$ $
 l$     -/0"D/00D!89::\*[)     " 	 	 l	H    !/0"D/00D!89::\*[)     rV  rP  )ra  rb  rc  r
   r   WINNT_ACE_FLAGSr   rd  rR  r  r  re  rV  rT  r2  r2    s       &o n n	
 / - , + + / . 6 5 - -  4!" 4#$ /1/)  	
 	
4 	
		
 	
 	Dd??CCCC"KH< < <C
 C
 C
 C
L5 5 5 5 5 5rV  r2  c                   T    e Zd Z eddde           ed e            e          gZdS )WINNT_ACCESS_ALLOWED_ACEr  r   rh  r  N)ra  rb  rc  r   _WINNT_ACCESS_MASKr   r  rd  re  rV  rT  r  r  H  s@        
61c#566E99;;	22KKKrV  r  )r3  c            
           e Zd Z eddde           edddddd           e edd	ej        
          d            e edd	ej        
          d            ed e	            e	          gZ
d	S )WINNT_ACCESS_ALLOWED_OBJECT_ACEr  r   rh  FlagsOBJECT_TYPE_PRESENTINHERITED_OBJECT_TYPE_PRESENTr   r[  Nuuid_fmtc                     | j         j        S rP  )r  r  rR  s    rT  rU  z(WINNT_ACCESS_ALLOWED_OBJECT_ACE.<lambda>c  s    	5 rV  r\  c                     | j         j        S rP  )r  r  rR  s    rT  rU  z(WINNT_ACCESS_ALLOWED_OBJECT_ACE.<lambda>g  s    	? rV  r  )ra  rb  rc  r   r  r   r*   	FORMAT_LEr   r  rd  re  rV  rT  r  r  U  s        
61c#566
1; 		
 	
 	IlD93FGGG55	
 	
 	I+TI<OPPP??	
 	
 	E99;;	22'KKKrV  r  c                       e Zd Zej        ZdS )WINNT_ACCESS_DENIED_ACENra  rb  rc  r  rd  re  rV  rT  r  r  s          *6KKKrV  r  c                       e Zd Zej        ZdS )WINNT_ACCESS_DENIED_OBJECT_ACENra  rb  rc  r  rd  re  rV  rT  r  r  }  s        1=KKKrV  r  c                       e Zd Zd ZdS )$WINNT_APPLICATION_DATA_LITERAL_TOKENc                     t           j        S rP  rZ  r  s     rT  r_  z:WINNT_APPLICATION_DATA_LITERAL_TOKEN.default_payload_class  r`  rV  N)ra  rb  rc  r_  re  rV  rT  r  r    s#        " " " " "rV  r  r  zPadding tokenzSigned int8zSigned int16zSigned int32zSigned int64Unicoder  zOctet Stringrv  	Compositerw  SIDz==r^  z!=r_  <r`  z<=ra  >rb  z>=rc  Containsrd  Any_ofre  Not_Containsrf  
Not_Any_ofro  	Member_ofrp  Device_Member_ofrq  Member_of_Anyrr  Device_Member_of_Any   Not_Member_ofrs  Not_Device_Member_ofrt  Not_Member_of_Anyru  Not_Device_Member_of_Anyrl  Existsrm  
Not_Existsrg  z&&rh  z||rn  !rx  zLocal attributery  zUser AttributezResource AttributezDevice Attribute)rz  r{  r  c                     | j         dv S )N)r   r  rx  ry  rz  r{  rv  r  rR  s    rT  rU  rU        CM &
 
 rV  r  c                     | j         dv S Nr   r  rR  s    rT  rU  rU    s     2 ! rV  rV  c                     | j         S rP  r  rR  s    rT  rU  rU    s    3: rV  rW  c                     | j         dv S )N)r   rx  ry  rz  r{  r  rR  s    rT  rU  rU    s     2 ! rV  c                     | j         S rP  r  rR  s    rT  rU  rU    s    cj rV  c                     | j         dk    S Nr  r  rR  s    rT  rU  rU         5 rV  c                     | j         S rP  r  rR  s    rT  rU  rU    s    CJ rV  c                     | j         dk    S )Nrv  r  rR  s    rT  rU  rU    r  rV  r  c                     | j         dv S )N)rp   rr   r   r   r   r  rx  ry  rz  r{  rv  r  rR  s    rT  rU  rU    s    CM &
 
 rV  sign+r  rp   rr   r   c                     | j         dv S r  r  rR  s    rT  rU  rU    r  rV  baseOctalDecimalHexadecimalc                     | j         dv S r  r  rR  s    rT  rU  rU    r  rV  c                   J    e Zd Z eddd           edg e          gZd ZdS )WINNT_APPLICATION_DATAMagics   artxr   r  r  c                     t           j        S rP  rZ  r  s     rT  r_  z,WINNT_APPLICATION_DATA.default_payload_class  r`  rV  N)ra  rb  rc  r$   r   r  rd  r_  re  rV  rT  r  r  
  sX        "5a@@@0	
 	
K" " " " "rV  r  c                   J    e Zd Zej         ed e            e          gz   ZdS )!WINNT_ACCESS_ALLOWED_CALLBACK_ACEr]  N)ra  rb  rc  r  rd  r   r  re  rV  rT  r  r    sA        *655779O	
 	
: KKKrV  r  c                       e Zd Zej        ZdS ) WINNT_ACCESS_DENIED_CALLBACK_ACEN)ra  rb  rc  r  rd  re  rV  rT  r  r  )  s        3?KKKrV  r  c                   J    e Zd Zej         ed e            e          gz   ZdS )(WINNT_ACCESS_ALLOWED_CALLBACK_OBJECT_ACEr]  N)ra  rb  rc  r  rd  r   r  re  rV  rT  r   r   3  sB        1=55779O	
 	
A KKKrV  r   c                   J    e Zd Zej         ed e            e          gz   ZdS )'WINNT_ACCESS_DENIED_CALLBACK_OBJECT_ACEr]  N)ra  rb  rc  r  rd  r   r  re  rV  rT  r  r  A  sB        0<55779O	
 	
@ KKKrV  r  c                       e Zd Zej        ZdS )WINNT_SYSTEM_AUDIT_ACENr  re  rV  rT  r  r  O  r  rV  r  c                       e Zd Zej        ZdS )WINNT_SYSTEM_AUDIT_OBJECT_ACENr  re  rV  rT  r  r  Y  s        1=KKKrV  r  c                   J    e Zd Zej         ed e            e          gz   ZdS )WINNT_SYSTEM_AUDIT_CALLBACK_ACEr]  N)ra  rb  rc  r  rd  r   r  re  rV  rT  r  r  d  sA        (455779O	
 	
8 KKKrV  r  c                       e Zd Zej        ZdS ) WINNT_SYSTEM_MANDATORY_LABEL_ACEN)ra  rb  rc  r  rd  re  rV  rT  r
  r
  r  s        (4KKKrV  r
  c                       e Zd Zej        ZdS )&WINNT_SYSTEM_AUDIT_CALLBACK_OBJECT_ACEN)ra  rb  rc  r  rd  re  rV  rT  r  r  |  s        /;KKKrV  r  c                   "   e Zd ZdZ edd           eddddddd	d
d           edd           edddddddddd           edd           edg  edd          d            e	dd  e
 edd          d           gd           gZd!S )"$CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1Data
NameOffsetr   	ValueType#CLAIM_SECURITY_ATTRIBUTE_TYPE_INT64$CLAIM_SECURITY_ATTRIBUTE_TYPE_UINT64$CLAIM_SECURITY_ATTRIBUTE_TYPE_STRING!CLAIM_SECURITY_ATTRIBUTE_TYPE_SID%CLAIM_SECURITY_ATTRIBUTE_TYPE_BOOLEAN*CLAIM_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING)rp   rr   r   r   r   r   r  r  rh  (CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE-CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE*CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY,CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT!CLAIM_SECURITY_ATTRIBUTE_DISABLED"CLAIM_SECURITY_ATTRIBUTE_MANDATORY)rp   rr   r   r   r   r   
ValueCountValueOffsetsrN  c                     | j         S rP  r  rR  s    rT  rU  z-CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1.<lambda>  s    #. rV  r  c                     d| j         dz  z   S )Nr   r   r!  rR  s    rT  rU  z-CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1.<lambda>  s    S^a// rV  NamerV  c                     | j         S rP  )r  rR  s    rT  rU  z-CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1.<lambda>  s     rV  Offsetoffset_nameN)ra  rb  rc  _NTLM_PAYLOAD_FIELD_NAMEr   r   r   r   r   r6   r   r#   rd  re  rV  rT  r  r    s/       %
<##=>>;?D 	
 	
 	Z##
BGDF;< 		
 	
 	
<##B

2q 1 1>X>X	
 	
 	
 	//  !M&#....  !	
 	
 	
A,KKKrV  r  c                   J    e Zd Zej         ed e            e          gz   ZdS )#WINNT_SYSTEM_RESOURCE_ATTRIBUTE_ACEAttributeDataN)ra  rb  rc  r  rd  r   r  re  rV  rT  r*  r*    sA        *600220	
 	
: KKKrV  r*  c                       e Zd Zej        ZdS )!WINNT_SYSTEM_SCOPED_POLICY_ID_ACENr  re  rV  rT  r-  r-    r  rV  r-  rH  c                       e Zd Z edd           edd           edddd d	
           edddd	           edd           edg ed           gZd Z	dS )	WINNT_ACLAclRevisionrr   Sbz1r   AclSizeNAcesc                     |dz   S )Nr   re  )_r  s     rT  rU  zWINNT_ACL.<lambda>  s
    1r6 rV  rK  )rL  rO  rM  AceCountr  Sbz2c                     | j         S rP  )r6  rR  s    rT  rU  zWINNT_ACL.<lambda>  s    3< rV  r  c                 $    d | j         D             S )Nc                 6    g | ]}|                                 S re  )r  r  s     rT  r  z$WINNT_ACL.toSDDL.<locals>.<listcomp>  s     ...q

...rV  )r3  r  s    rT  r  zWINNT_ACL.toSDDL  s    ..DI....rV  )
ra  rb  rc  r   r   r"   r   r2  rd  r  re  rV  rT  r/  r/    s        	-##	&$tv6I6It	
 	
 	
 	j$TBBB
61//		
 	
 	
K / / / / /rV  r/  c                      e Zd ZdZdZ edd           edd           edddg d	           ed
d           edd           edd           edd           ede e	 e
d e            e          d            e	 e
d e            e          d            e	 e
d e            e          d            e	 e
d e            e          d           gd          gZdS )SECURITY_DESCRIPTOR   r  r  rp   r1  r   Control)OWNER_DEFAULTEDGROUP_DEFAULTEDDACL_PRESENTDACL_DEFAULTEDSACL_PRESENTSACL_DEFAULTEDDACL_TRUSTEDSERVER_SECURITYDACL_COMPUTEDSACL_COMPUTEDDACL_AUTO_INHERITEDSACL_AUTO_INHERITEDDACL_PROTECTEDSACL_PROTECTEDRM_CONTROL_VALIDSELF_RELATIVEOwnerSidOffsetGroupSidOffset
SACLOffset
DACLOffsetOwnerSidc                     | j         S rP  )rP  rR  s    rT  rU  zSECURITY_DESCRIPTOR.<lambda>  	     2 rV  GroupSidc                     | j         S rP  )rQ  rR  s    rT  rU  zSECURITY_DESCRIPTOR.<lambda>  rV  rV  SACLc                     | j         j        S rP  )r>  rD  rR  s    rT  rU  zSECURITY_DESCRIPTOR.<lambda>       8 rV  DACLc                     | j         j        S rP  )r>  rB  rR  s    rT  rU  zSECURITY_DESCRIPTOR.<lambda>  r[  rV  r%  r&  N)ra  rb  rc  OFFSETr(  r   r   r   r6   r   r   r  r/  rd  re  rV  rT  r<  r<    s       F%	*d##	&$
  		
 	
. 	
#Q''
#Q''
<##
<##  K
IIKKCC22  ! K
IIKKCC22  ! K		Y??88  ! K		Y??88 $ !+	
 	
 	
=5KKKrV  r<  c                   z   e Zd Z ed e            e           ed e            e           ed e            e           ed e            e           ed e            e           ed e	            e	           ed e
            e
           ed e            e           ed	 e            e          g	Zd
S )r:  BasicInformationStandardInformationInternalInformationEaInformationAccessInformationPositionInformationModeInformationAlignmentInformationNameInformationN)ra  rb  rc  r   r1  r2  r3  r4  r5  r7  r8  r9  rG  rd  re  rV  rT  r:  r:  '  s7       &(<(<(>(>@TUU!#:#:#<#<>U	
 	
 	!#:#:#<#<>U	
 	
 	O%6%6%8%8:KLL!6!6!8!8:O	
 	
 	!#:#:#<#<>U	
 	
 	%':':'<'<>QRR"$<$<$>$>@X	
 	
 	%'<'<'>'>@UVV'KKKrV  c                       e Zd Z eddd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,           ed-d.           ed/d0d1d23           ed1d4d5 6          gZd0S )7FileFsAttributeInformationFileSystemAttributesi rh  r   FILE_SUPPORTS_USN_JOURNALr   FILE_SUPPORTS_OPEN_BY_FILE_ID   !FILE_SUPPORTS_EXTENDED_ATTRIBUTESr-  FILE_SUPPORTS_HARD_LINKS    FILE_SUPPORTS_TRANSACTIONSr   FILE_SEQUENTIAL_WRITE_ONCEr   FILE_READ_ONLY_VOLUMEr   FILE_NAMED_STREAMSr   FILE_SUPPORTS_ENCRYPTIONr   FILE_SUPPORTS_OBJECT_IDSr&  FILE_VOLUME_IS_COMPRESSEDr   FILE_SUPPORTS_REMOTE_STORAGEr   FILE_SUPPORTS_REPARSE_POINTSr   FILE_SUPPORTS_SPARSE_FILESr   FILE_VOLUME_QUOTASr   FILE_FILE_COMPRESSIONr   FILE_PERSISTENT_ACLSFILE_UNICODE_ON_DISKFILE_CASE_PRESERVED_NAMESFILE_CASE_SENSITIVE_SEARCHFILE_SUPPORT_INTEGRITY_STREAMSFILE_SUPPORTS_BLOCK_REFCOUNTINGFILE_SUPPORTS_SPARSE_VDL)r   rr   rp   r  r  r   MaximumComponentNameLengthry  FileSystemNameLengthNFileSystemNamerJ  rK  s   NTFSc                     | j         S rP  )r  rR  s    rT  rU  z#FileFsAttributeInformation.<lambda>g  s	    s?W rV  rW  )ra  rb  rc  r   r   r   r&   rd  re  rV  rT  rj  rj  B  s       
"7; ? 6	
 8 8 3 0 6 6 7 : : 8 0  3!" 2#$ 378<=6/  		
 	
< 	
/55"D4D$	
 	
 	
 	g3W3W	
 	
 	
G&KKKrV  rj  c                   j    e Zd Z edd           edd           edd           edd          gZd	S )
FileFsSizeInformationTotalAllocationUnitsi   AvailableAllocationUnitsr   SectorsPerAllocationUnitr   BytesPerSectorr  N)ra  rb  rc  r   r   rd  re  rV  rT  r  r  o  sU        *H55.88
-q11
#S))	KKKrV  r  c            	           e Zd Z edddg dd           edd           ed	d           ed
d           edd           edd          gZdS )FileFsVolumeInformationVolumeCreationTimeNr  r  r  r  VolumeSerialNumberr   VolumeLabelLengthSupportsObjectsrp   r  VolumeLabel   C)ra  rb  rc  r)   r   r   r'   rd  re  rV  rT  r  r  {  s         '''	
 	
 	
 	
'++
&**	#Q''	*a  -..KKKrV  r  c                       e Zd Z edd           edddddddd	d
ddddd           edddd           eddd            eddd           gZd Z	dS )FILE_NOTIFY_INFORMATIONNextEntryOffsetr   ActionFILE_ACTION_ADDEDFILE_ACTION_REMOVEDFILE_ACTION_MODIFIEDFILE_ACTION_RENAMED_OLD_NAMEFILE_ACTION_RENAMED_NEW_NAMEFILE_ACTION_ADDED_STREAMFILE_ACTION_REMOVED_STREAMFILE_ACTION_MODIFIED_STREAMFILE_ACTION_REMOVED_BY_DELETEFILE_ACTION_ID_NOT_TUNNELLED"FILE_ACTION_TUNNELLED_ID_COLLISION)rp   rr   r   r   r   r   r   r   r   r   r   rH  NrI  rJ  rK  rV  c                     | j         S rP  rQ  rN  s    rT  rU  z FILE_NOTIFY_INFORMATION.<lambda>  	    @P rV  rW  padc                 2    | j         r| j         | j        z
  ndS Nr   )r  rH  rN  s    rT  rU  z FILE_NOTIFY_INFORMATION.<lambda>  s#    :;:KR"Q%555QR rV  c                     t           j        S rP  rZ  r\  s     rT  r_  z-FILE_NOTIFY_INFORMATION.default_payload_class  r`  rV  )
ra  rb  rc  r   r   r   r&   r%   rd  r_  re  rV  rT  r  r    s        "A&&/12::689;:@ 	
 	
" 	 		
 	
 	
 	S6P6PQQQ 	
 	
 	
5!KF" " " " "rV  r  BufferOffsetLenc                 4    t          | |||t                    S )z:Util function to build the offset and populate the lengthsconfig)r9   _SMB2_CONFIG)r]  rQ  
pay_offsetfieldss       rT  _SMB2_post_buildr    s    D!ZMMMMrV  c                   F    e Zd ZdZdZ edd           edd          gZdS )	DirectTCPz
Direct TCPi zeror   LENGTHN)ra  rb  rc  name	MAXLENGTHr   r(   rd  re  rV  rT  r  r    s:        DI9VQ''4)H)HIKKKrV  r  c                       e Zd ZdZ eddd           edd           edd           ed	de           ed
de	           edd           e
dddddddddd           edd           edd           e edd          d            e edd          d            e edd          d            edd           eddd           gZd!Z fd"Zd%d$Z xZS )&SMB2_HeaderzSMB2 HeaderStarts   SMBr   StructureSizer   CreditCharger   StatusCommandCreditRequestr  rh  SMB2_FLAGS_SERVER_TO_REDIRSMB2_FLAGS_ASYNC_COMMANDSMB2_FLAGS_RELATED_OPERATIONSSMB2_FLAGS_SIGNEDSMB2_FLAGS_DFS_OPERATIONSSMB2_FLAGS_REPLAY_OPERATION)rp   rr   r   r   r   r  NextCommandMIDAsyncIdc                     | j         j        S rP  r  r  rR  s    rT  rU  zSMB2_Header.<lambda>  s    393U rV  PIDc                     | j         j         S rP  r  rR  s    rT  rU  zSMB2_Header.<lambda>      CI>> rV  TIDc                     | j         j         S rP  r  rR  s    rT  rU  zSMB2_Header.<lambda>  r  rV  	SessionIdSecuritySignaturer   r  ))rS   rp   )rG   r   )rG   r   )rG   r   )rP   r   )rB   r   c                 >   | j         j        r,| j        dk    r!| j        | j        ft          j        vrt          S | j        dk    r| j         j        rt          S t          S | j        dk    r| j         j        rt          S t          S | j        dk    r| j         j        rt          S t          S | j        dk    r| j         j        rt          S t          S | j        dk    r| j         j        rt          S t           S | j        dk    r| j         j        rt"          S t$          S | j        dk    r| j         j        rt&          S t(          S | j        dk    r| j         j        rt*          S t,          S | j        d	k    r| j         j        rt.          S t0          S | j        d
k    rt2          S | j        dk    r| j         j        rt4          S t6          S | j        dk    r| j         j        rt8          S t:          S | j        dk    r| j         j        rt<          S t>          S | j        dk    r| j         j        rt@          S tB          S | j        dk    r| j         j        rtD          S tF          S | j        dk    r| j         j        rtH          S tJ          S tM          t          |           '                    |          S )Nr   rp   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   )(r  r  r  r  r  _SMB2_OK_RETURNCODESSMB2_Error_Response SMB2_Negotiate_Protocol_ResponseSMB2_Negotiate_Protocol_RequestSMB2_Session_Setup_ResponseSMB2_Session_Setup_RequestSMB2_Session_Logoff_ResponseSMB2_Session_Logoff_RequestSMB2_Tree_Connect_ResponseSMB2_Tree_Connect_RequestSMB2_Tree_Disconnect_ResponseSMB2_Tree_Disconnect_RequestSMB2_Create_ResponseSMB2_Create_RequestSMB2_Close_ResponseSMB2_Close_RequestSMB2_Read_ResponseSMB2_Read_RequestSMB2_Write_ResponseSMB2_Write_RequestSMB2_Cancel_RequestSMB2_Echo_ResponseSMB2_Echo_RequestSMB2_Query_Directory_ResponseSMB2_Query_Directory_RequestSMB2_Change_Notify_ResponseSMB2_Change_Notify_RequestSMB2_Query_Info_ResponseSMB2_Query_Info_RequestSMB2_Set_Info_ResponseSMB2_Set_Info_RequestSMB2_IOCTL_ResponseSMB2_IOCTL_Requestsuperguess_payload_class)r]  r  	__class__s     rT  r  zSMB2_Header.guess_payload_class  s   :0 	+T[J5N5NT\*+2RRR**<6!!z4 87722\V##z4 322--\V##z4 433..\V##z4 211,,\V##z4 544//\V##z4 ,++&&\V##z4 +**%%\V##z4 *))$$\V##z4 +**%%\V##&&\V##z4 *))$$\V##z4 544//\V##z4 322--\V##z4 0//**\V##z4 .--((\V##z4 +**%%[$'';;GDDDrV  Nc                    d| _         t          |           }t          |          dk    rt          j        d           |S |dv r1|dk    r||t          d          nd}d|v rmd	d
lm}  ||          }t          j	        d| j
                  t          j	        d|rd	nd| j        dk    rdnd	z            z   }|                    |d|          }	nd|v r^d	dlm}
 d	dlm} |
                    |                    |                    }|                    |           |                                }	nd|v r/d	dlm}  ||                              |          }	|	d d         }	nft1          d          |dv r/d	dlm}  ||                              |          }	|	d d         }	n$t          j        d|z             |d d         dz   }	|	| _         t3          j        |dd                    | _        d S )Ns                   r   z Cannot sign invalid SMB packet !)r<   r=   r>   r>   z1SMB 3.1.1 needs a SigningAlgorithmId and IsClientr   GMACr   )AESGCMr  rJ  rp   r   r  rV  CMAC)cmac)
algorithmsHMAC)Hmac_SHA256r   zUnknown SigningAlgorithmId)r;   r:   z%Unknown SMB Version %s ! Cannot sign.r?  )load)r  bytesr  r   warning	Exception+cryptography.hazmat.primitives.ciphers.aeadr  r  r  r  r  encryptcryptography.hazmat.primitivesr  &cryptography.hazmat.primitives.ciphersr  r  AESupdatefinalizescapy.layers.tls.crypto.h_macr  digestr  r   	raw_layerr  )r]  dialectSigningSessionKeySigningAlgorithmIdIsClientr^  r  aesgcmnoncesigr  r  cr  s                 rT  r  zSMB2_Header.signG  sn   !-$KKq66R<< BCCCH...&  %-1A#$WXXX 2B &0"+++NNNNNN 122D$(33fk")QQ4<1;L;LiiRST7 7  nnUC33---??????MMMMMMIIjnn->??@@jjll---EEEEEE!k"344;;A>>#2#h !=>>>(((AAAAAA+/0077::Ccrc(CC G' QRRRDSD'L(C!$~1RSS6222rV  NN)ra  rb  rc  r  r$   r   r   STATUS_ERREFr   SMB2_COMr   r+   r   r   r   r/   rd  r  r  r  __classcell__r  s   @rT  r  r    s       D*a00_b))^Q''xL11Ax00_a((
86;/79 		
 	
 	M1%%E1K	1%%'U'U	
 	
 	Jua  >>	
 	
 	Jua  >>	
 	

 	K##-q<<<K&KPCE CE CE CE CEJ.3 .3 .3 .3 .3 .3 .3 .3rV  r  c                   .     e Zd Z fdZd Z fdZ xZS )_SMB2_Payloadc                 L   | j         rst          | j         t                    rY| j         j        rM| j         j        dt	          | j                  z   z
  }|r'|                     |d |                    ||d          }t          t          |           	                    |           d S Nr   )

underlayer
isinstancer  r  r  raw_packet_cacheadd_payloadr  r  do_dissect_payload)r]  r^  padlenr  s      rT  r%  z _SMB2_Payload.do_dissect_payloady  s    ? 	#z$/;GG 	#* #4SAV=W=W8WX #$$QwwZ000&''
AmT""55a88888rV  c                     t          |t                    o*| j        |j        k    o| j        |j        k    p
| j        dk    S )Nr  )r"  r  r  r  )r]  others     rT  answersz_SMB2_Payload.answers  sD    um,, F%/1F.D$,"2D	
rV  c                     | j         r-t          | j         t                    r| j         j        rt          S t	          t
          |                               |          S rP  )r!  r"  r  r  r  r  r  )r]  r^  r  s     rT  r  z!_SMB2_Payload.guess_payload_class  sQ    ? 	#z$/;GG 	#* #""]D))==a@@@rV  )ra  rb  rc  r%  r)  r  r  r  s   @rT  r  r  x  si        9 9 9 9 9
 
 
A A A A A A A A ArV  r  c            	           e Zd ZdZdgZdZ edd           edd           edd           ed	d
dd           e	ddd           gZ
d
S )r  r  NTStatuszSMB2 Error Responser  r   ErrorContextCountr   r  	ByteCountNrJ  	ErrorDatar  rV  c                     | j         S rP  )r.  rR  s    rT  rU  zSMB2_Error_Response.<lambda>  s    s} rV  rW  )ra  rb  rc  r  	__slots__r  r-   r   r   r.   rd  re  rV  rT  r  r    s        GI Dot,,	%q))	*a  k4T[III[#3L3LMMMKKKrV  r  )r  c            
           e Zd Z eddddd           edd           e edd	          d
 fg edd	                     e e	ddd          d           gZ
d Zd	S )MOVE_DST_IPADDRTyperp   IPv4IPv6r   r  r   	IPAddressNc                     | j         dk    S Nrr   r4  rR  s    rT  rU  zMOVE_DST_IPADDR.<lambda>  s    sx1} rV  r  rV  r   r  c                     | j         dk    S Nrp   r:  rR  s    rT  rU  zMOVE_DST_IPADDR.<lambda>  s    A rV  c                     t           j        S rP  rZ  r  s     rT  r_  z%MOVE_DST_IPADDR.default_payload_class  r`  rV  )ra  rb  rc  r   r   r   r   r   r   r$   rd  r_  re  rV  rT  r3  r3    s         	vqf"8"899Qh{D))+D+DEFGK&&	
 	
 	[#b999%%	
 	
K" " " " "rV  r3  c                       e Zd ZdZdZ edd           eddddi           edd	           ed
d	           edd           e	ddddi           e
dd	dd           edg ed            edd  eddd           g          g	Zd Zd	S )*SMB2_Error_Share_Redirect_Context_Responsez%Share Redirect Error Context ResponseBufferr  rD  NotificationTyper   SHARE_MOVE_NOTIFICATIONResourceNameBufferOffsetNResourceNameLenr  r   
TargetTypeIPIPAddrCountrJ  IPAddrMoveListrM  r  c                     | j         S rP  )rG  rR  s    rT  rU  z3SMB2_Error_Share_Redirect_Context_Response.<lambda>      3? rV  r  c                 6    dt          | j                  dz  z   S r  )r  rH  rR  s    rT  rU  z3SMB2_Error_Share_Redirect_Context_Response.<lambda>  s    S!344r99 rV  ResourceNamerV  c                     | j         S rP  )rD  rR  s    rT  rU  z3SMB2_Error_Share_Redirect_Context_Response.<lambda>  	    AT rV  rW  c                 `    t          | |dt          | j                  dz  z   ddi          |z   S )Nr  rM  r   )r  r  rH  r  s      rT  r  z5SMB2_Error_Share_Redirect_Context_Response.post_build  sH     S,--22"A	  
	
rV  )ra  rb  rc  r  r(  r+   r   r   r"   r!   r   r   r3  r6   r&   rd  r  re  rV  rT  r?  r?    s       2D'OT**)1q2K.LMM.55
$d++
:q!!|QD	22mTt>NOOO22		
 	
 	
 	99  "C5T5T  	
 	
K2
 
 
 
 
rV  r?  c            
           e Zd Z edddd           edddd	d
           e ed e            e          d fg eddd                     gZ	dS )SMB2_Error_ContextResponseErrorDatalengthNrJ  ErrorContextDatar  ErrorIdr   DEFAULTSHARE_REDIRECT)r   SRdrc                     | j         dk    S )NrX  )rU  rR  s    rT  rU  z#SMB2_Error_ContextResponse.<lambda>  s    z 9 rV  rV  c                     | j         S rP  )rS  rR  s    rT  rU  z#SMB2_Error_ContextResponse.<lambda>  rO  rV  rW  )
ra  rb  rc  r   r   r   r   r?  r.   rd  re  rV  rT  rR  rR    s        '4CUVVVy!@P%Q%QRR  K*BBDDB 
 :9	 L"C5T5T  	
 	
KKKrV  rR  c                   d    e Zd ZdZ edde           eddd           edd          gZd	 Z	dS )
SMB2_Negotiate_ContextzSMB2 Negotiate ContextContextTyper   
DataLengthNrK  )rM  r  c                     t           j        S rP  rZ  r  s     rT  r_  z,SMB2_Negotiate_Context.default_payload_class	  r`  rV  )
ra  rb  rc  r  r   SMB2_NEGOTIATE_CONTEXT_TYPESr   r   rd  r_  re  rV  rT  r\  r\    se        #D-IJJt...QK" " " " "rV  r\  c                      e Zd ZdZdZdZ edd           edddd	
           eddde	           e
dd           eddde           eddej                   edd           e
dd           edd           ed	dg edde          d            edd  edg  e edde          d          d           g          gZd ZdS )r  zSMB2 Negotiate Protocol Requestr   r@  r  $   DialectCountNrK  DialectsrI  SecurityModer?  r  Capabilitiesrh  
ClientGUIDr  NegotiateContextsBufferOffsetNegotiateContextsCountr  r:   rN  c                     | j         S rP  )rc  rR  s    rT  rU  z(SMB2_Negotiate_Protocol_Request.<lambda>!  s	    3#3 rV  r  c                 6    dt          | j                  dz  z   S )Nd   rr   )r  rd  rR  s    rT  rU  z(SMB2_Negotiate_Protocol_Request.<lambda>%  s    #cl"3"3a"77 rV  NegotiateContextsContextr   c                     | j         S rP  ri  rR  s    rT  rU  z(SMB2_Negotiate_Protocol_Request.<lambda>/  	    3+E rV  c           	          t          | |dt          | j                  dz  z   ddidt          j        t          j        z  fdt          j        fg          |z   S )Nrl  rr   rm     r  Countr  )r9   r  rd  r8   r^  PAD8COUNTr  s      rT  r  z*SMB2_Negotiate_Protocol_Request.post_build5  sp     #dm,,q00' $Z%6%HIj./   	
rV  )ra  rb  rc  r  r  r(  r-   r   r   SMB2_SECURITY_MODEr   SMB2_CAPABILITIESr*   r  r+   r"   r   r   SMB_DIALECTSr6   r   r   r\  rd  r  re  rV  rT  r  r    sz       ,DG'ot,,ndzJJJ
>1c+=>>Z##
>1c+<==	,i.ABBB3T::-t44
;""HRl3333		
 	
 	
 	77 '#O#It5KLL   FE  	
 	
%"KH
 
 
 
 
rV  r  )r  c                       e Zd ZdZ edddd           edddd	           edd
g eddd
di          d            eddd           gZd Z	dS )#SMB2_Preauth_Integrity_Capabilitiesz#SMB2 Preauth Integrity CapabilitiesHashAlgorithmCountNrK  HashAlgorithmsrI  
SaltLengthSaltr  rp   rN  r   SHA-512c                     | j         S rP  )r|  rR  s    rT  rU  z,SMB2_Preauth_Integrity_Capabilities.<lambda>c  s	    3#9 rV  r  c                     | j         S rP  )r~  rR  s    rT  rU  z,SMB2_Preauth_Integrity_Capabilities.<lambda>e  s     rV  rW  c                     t           j        S rP  rZ  r  s     rT  r_  z9SMB2_Preauth_Integrity_Capabilities.default_payload_classh  r`  rV  )
ra  rb  rc  r  r   r   r   r.   rd  r_  re  rV  rT  r{  r{  Q  s        0D 	*DdEUVVVlDdfEEEH I  :9	
 	
 	
 	VR-G-GHHH%K*" " " " "rV  r{  )r]  c            
       n    e Zd ZdZ edddd           eddg edd	e          d
           gZd Z	dS )SMB2_Encryption_CapabilitieszSMB2 Encryption CapabilitiesCipherCountNrK  CiphersrI  rp   rN  r   c                     | j         S rP  )r  rR  s    rT  rU  z%SMB2_Encryption_Capabilities.<lambda>  rK  rV  r  c                     t           j        S rP  rZ  r  s     rT  r_  z2SMB2_Encryption_Capabilities.default_payload_class  r`  rV  )
ra  rb  rc  r  r   r   r   SMB2_ENCRYPTION_CIPHERSrd  r_  re  rV  rT  r  r  s  s        )D 	mTtiHHHH' 
 32		
 		
 		
	K " " " " "rV  r  c                       e Zd ZdZ edddd           edd           ed	dd
dd           edd edde	          d           gZ
d ZdS )SMB2_Compression_CapabilitieszSMB2 Compression CapabilitiesCompressionAlgorithmCountNrK  CompressionAlgorithmsrI  Paddingr   r  'SMB2_COMPRESSION_CAPABILITIES_FLAG_NONE*SMB2_COMPRESSION_CAPABILITIES_FLAG_CHAINEDr   rp   rN  c                     | j         S rP  )r  rR  s    rT  rU  z&SMB2_Compression_Capabilities.<lambda>  s	    3#@ rV  r  c                     t           j        S rP  rZ  r  s     rT  r_  z3SMB2_Compression_Capabilities.default_payload_class  r`  rV  )ra  rb  rc  r  r   r"   r   r   r   SMB2_COMPRESSION_ALGORITHMSrd  r_  re  rV  rT  r  r    s        *D',		
 	
 	
 	
9c""EH 	
 	
 	#R&ABB@@		
 	
 	
!K0" " " " "rV  r  c                   2    e Zd ZdZ edd          gZd ZdS )!SMB2_Netname_Negotiate_Context_IDz!SMB2 Netname Negotiate Context IDNetNamerN  c                     t           j        S rP  rZ  r  s     rT  r_  z7SMB2_Netname_Negotiate_Context_ID.default_payload_class  r`  rV  N)ra  rb  rc  r  r#   rd  r_  re  rV  rT  r  r    s<        .D =B//0K" " " " "rV  r  c                   :    e Zd ZdZ edddddi          gZd ZdS )	SMB2_Transport_CapabilitieszSMB2 Transport Capabilitiesr  r   rh  rp   $SMB2_ACCEPT_TRANSPORT_LEVEL_SECURITYc                     t           j        S rP  rZ  r  s     rT  r_  z1SMB2_Transport_Capabilities.default_payload_class  r`  rV  N)ra  rb  rc  r  r   rd  r_  re  rV  rT  r  r    sR        (D
B		
 	
	K" " " " "rV  r  c                       e Zd ZdZ edddd           edd           ed	d           edd ed
ddddd          d           gZ	d Z
dS ) SMB2_RDMA_Transform_Capabilitiesz SMB2 RDMA Transform CapabilitiesTransformCountNrK  RDMATransformIdsrI  r  r   r  rN  SMB2_RDMA_TRANSFORM_NONESMB2_RDMA_TRANSFORM_ENCRYPTIONSMB2_RDMA_TRANSFORM_SIGNINGr   c                     | j         S rP  )r  rR  s    rT  rU  z)SMB2_RDMA_Transform_Capabilities.<lambda>  s	    3#5 rV  r  c                     t           j        S rP  rZ  r  s     rT  r_  z6SMB2_RDMA_Transform_Capabilities.default_payload_class  r`  rV  )ra  rb  rc  r  r   r   r   r   r   rd  r_  re  rV  rT  r  r    s        -D&$ASTTT[!$$
;""6<9   65	
 	
 	
	K(" " " " "rV  r  c            
       l    e Zd ZdZ edddd           edd edde          d	 
          gZd Z	dS )SMB2_Signing_CapabilitieszSMB2 Signing CapabilitiesSigningAlgorithmCountNrK  SigningAlgorithmsrI  rN  r   c                     | j         S rP  )r  rR  s    rT  rU  z"SMB2_Signing_Capabilities.<lambda>	  s	    3#< rV  r  c                     t           j        S rP  rZ  r  s     rT  r_  z/SMB2_Signing_Capabilities.default_payload_class		  r`  rV  )
ra  rb  rc  r  r   r   r   SMB2_SIGNING_ALGORITHMSrd  r_  re  rV  rT  r  r    s        &D#Tt>Q	
 	
 	
 	' 
 =<		
 		
 		
	K " " " " "rV  r  c                      e Zd ZdZdZdZdZ edd           eddde	           e
d	de           ed
d           eddej                   eddde           edd           edd           edd           edddg dd           edddg dd           edd           edd           edd           ede edded            ed g  e ed!de          d"          d# $          gdd g%          gZd& ZdS )'r  z SMB2 Negotiate Protocol Responser   r   r@  r  A   re  r?  DialectRevisionri  NGUIDr  rf  rh  MaxTransactionSizer   MaxReadSizeMaxWriteSize
ServerTimer  r  r  r  ServerStartTimeSecurityBlobBufferOffsetSecurityBlobLenrh  SecurityBlobc                     | j         S rP  )r  rN  s    rT  rU  z)SMB2_Negotiate_Protocol_Response.<lambda>;	  s	    !*; rV  rW  rm  rn  r   c                     | j         S rP  rp  rR  s    rT  rU  z)SMB2_Negotiate_Protocol_Response.<lambda>E	  rq  rV  r  force_orderc           
         t          | || j        ddddt          j        t          j        t          j        z  dfg          }t	          | dd           rD| j        =|d d         t          j        dt          | j	                            z   |dd          z   }t	          | d	d           rD| j
        =|d d
         t          j        dt          | j                            z   |dd          z   }||z   S )N8   rE  )r  rm  r  r  r  :   rK  rm  r   r   )r9   r^  r8   ru  r  r  r  r  r  r  ri  rm  r  s      rT  r  z+SMB2_Negotiate_Protocol_Response.post_buildL	  s   K "%'  #(2(9-7->-P 
 
 
$ 4.. 	V#+#2#hT3t7H3I3I!J!JJSQSQTQTXU4,d33 	Y*2"1"gD#d6L2M2M N NNQTUVUWUWQXXSyrV  )ra  rb  rc  r  r  r^  r(  r-   r   rw  r   ry  r   r*   r  rx  r   r)   r+   r6   r   r4   r   r   r   r\  rd  r  re  rV  rT  r  r  	  s       -DGF'ot,,
>1c+=>>*C>>-t44	&#	(;<<<
>1c+<==
'//
=%((
>5))'''	
 	
 	
 	'''	
 	
 	
 	0$77&--3T::" ; ;	   '#O#It5KLL   FE  $ ()<=+	
 	
 	
93Kj    rV  r  )r  r  c                      e Zd ZdZdZdZdZ edd           eddd	d
g           eddd	e	           eddde
           edd           edd           edd           edd           ede edde          g          g	Zd ZdS )r  zSMB2 Session Setup Requestrp   X   r@  r     r  r   SMB2_SESSION_FLAG_BINDINGre  rf  rh  Channelr  Nr  PreviousSessionIdr  c                 :    t          | || j        ddi          |z   S )Nr  r   r  r^  r  s      rT  r  z%SMB2_Session_Setup_Request.post_build	  s5     "B	  
	
rV  )ra  rb  rc  r  r  r^  r(  r-   r   rw  rx  r   r   r,   r6   r   r4   rd  r  re  rV  rT  r  r  s	  s        'DGF'ot,,
7Ar$?#@AA
>1b*<==
>1c+<==
9a  0$77&--(!,,ND+>>	
 	
K$
 
 
 
 
rV  r  c                        e Zd ZdZdZdZdZ edd           eddd	d
ddd           edd           e	dd           e
de edde          g          gZ fdZ fdZd Z xZS )r  zSMB2 Session Setup Responserp   H   r@  r  r   SessionFlagsr   r?  IS_GUESTIS_NULLENCRYPT_DATErp   rr   r   SecurityBufferOffsetNSecurityLenSecurityc                     |dk    r7t          t          |                               d          pdgd         d         S t          t          |                               |          S )Nr  r@  r  r   rp   )r  r  __getattr__)r]  attrr  s     rT  r  z'SMB2_Session_Setup_Response.__getattr__	  sl    >!!1488DDXNN " >   0$77CCDIIIrV  c                     |dk    r,t          t          |                               dd|fg          S t          t          |                               ||          S )Nr  r@  r  )r  r  setfieldval)r]  r  r  r  s      rT  r  z'SMB2_Session_Setup_Response.setfieldval	  sa    >!!4d;;GGJ,-   0$77CCD#NNNrV  c                 :    t          | || j        ddi          |z   S )Nr  r   r  r  s      rT  r  z&SMB2_Session_Setup_Response.post_build	  s5     	  
	
rV  )ra  rb  rc  r  r  r^  r(  r-   r   r   r6   r   r4   rd  r  r  r  r  r  s   @rT  r  r  	  s       (DGF'os++
"!& 			
 		
 	,d33]D))Jk::	
 	
K.J J J J JO O O O O
 
 
 
 
 
 
rV  r  c                   F    e Zd ZdZdZ edd           edd          gZdS )r  SMB2 LOGOFF Requestrr   r  r   reservedr   Nra  rb  rc  r  r  r-   r"   rd  re  rV  rT  r  r  	  =         DGos++
:q!!KKKrV  r  c                   F    e Zd ZdZdZ edd           edd          gZdS )r  r  rr   r  r   r  r   Nr  re  rV  rT  r  r  	  r  rV  r  c                       e Zd ZdZdZdZdZ edd           eddd	g d
           edd           e	dd           e
de edd          g          gZd ZdS )r  zSMB2 TREE_CONNECT Requestr   r  r@  r  r   r  r   r?  )CLUSTER_RECONNECTREDIRECT_TO_OWNEREXTENSION_PRESENTPathBufferOffsetNPathLenPathrV  c                 :    t          | || j        ddi          |z   S )Nr  r   r  r  s      rT  r  z$SMB2_Tree_Connect_Request.post_build$
  5     A	  
	
rV  )ra  rb  rc  r  r  r^  r(  r-   r   r   r6   r#   rd  r  re  rV  rT  r  r  
  s        &DGF'os++
KKK		
 	
 	($//Y%%fc**	
 	
K&
 
 
 
 
rV  r  c                       e Zd ZdZdZ edd           eddddd	d
           edd           eddddddddddddddddddd           eddddd d!d"d#d$d%           ed&dde	          gZ
d'S )(r  zSMB2 TREE_CONNECT Responser   r  r   	ShareTyper   DISKPIPEPRINTr  r  
ShareFlagsrD  rh  AUTO_CACHINGVDO_CACHING
NO_CACHINGr   DFS_ROOTRESTRICT_EXCLUSIVE_OPENSFORCE_SHARED_DELETEALLOW_NAMESPACE_CACHINGACCESS_BASED_DIRECTORY_ENUMFORCE_LEVELII_OPLOCKENABLE_HASH_V1ENABLE_HASH_V2ENCRYPT_DATAIDENTITY_REMOTINGCOMPRESS_DATA)r   r   rD  rp   rr   r   r  r  r  r   r"  r$  r&  r   r   rf  CONTINUOUS_AVAILABILITYSCALEOUTCLUSTER
ASYMMETRICr  )r   r   r   r   r   r   MaximalAccessN)ra  rb  rc  r  r  r-   r
   r   r   rj  rd  re  rV  rT  r  r  <
  s        'DGot,,k1V6&Q&QRR	*a  
*)(!&61592,,*/+ 		
 	
, 	
!5&%(/ 		
 	
 	
?As,BCCO(KKKrV  r  c                   F    e Zd ZdZdZ edd           edd          gZdS )r  zSMB2 TREE_DISCONNECT Requestr   r  r  r   Nra  rb  rc  r  r  r-   rd  re  rV  rT  r  r  o
  s=        )DGos++j!$$KKKrV  r  c                   F    e Zd ZdZdZ edd           edd          gZdS )r  zSMB2 TREE_DISCONNECT Responser   r  r  r   Nr  re  rV  rT  r  r  }
  s=        *DGos++j!$$KKKrV  r  c                   J    e Zd Z edd           edd          gZd Zd ZdS )SMB2_FILEID
Persistentr   Volatilec                 &    | j         | j        z   dz  S r   )r  r  r  s    rT  __hash__zSMB2_FILEID.__hash__
  s    ."44rV  c                     t           j        S rP  rZ  r  s     rT  r_  z!SMB2_FILEID.default_payload_class
  r`  rV  N)ra  rb  rc  r,   rd  r
  r_  re  rV  rT  r  r  
  sT        <a00,,z12M2MNK5 5 5" " " " "rV  r  c                   ,    e Zd Z eddd          gZdS )#SMB2_CREATE_DURABLE_HANDLE_RESPONSEr  s           r   r  Nra  rb  rc  r/   rd  re  rV  rT  r  r  
  s*        *k!<<<KKKrV  r  c                   D    e Zd Z edde           eddde          gZdS ))SMB2_CREATE_QUERY_MAXIMAL_ACCESS_RESPONSEQueryStatusr   r  rh  N)ra  rb  rc  r   r  r   rj  rd  re  rV  rT  r  r  
  s:        }a66
?As,BCCKKKrV  r  c                   X    e Zd Z edd           edd           eddd          gZdS )	SMB2_CREATE_QUERY_ON_DISK_ID
DiskFileIdr   VolumeIdr  rV  r   r  N)ra  rb  rc  r,   r/   rd  re  rV  rT  r  r  
  sH        \1%%Z##*c"555KKKrV  r  c            
           e Zd Z edd           eddddddd	           ed
ddddd           edd          gZdS )SMB2_CREATE_RESPONSE_LEASELeaseKeyN
LeaseStater   rh  SMB2_LEASE_READ_CACHINGSMB2_LEASE_HANDLE_CACHINGSMB2_LEASE_WRITE_CACHINGr  
LeaseFlagsr   !SMB2_LEASE_FLAG_BREAK_IN_PROGRESS$SMB2_LEASE_FLAG_PARENT_LEASE_KEY_SETrr   r   LeaseDuration)ra  rb  rc  r*   r   r   rd  re  rV  rT  r  r  
  s        	*d##
/10 			
 		
 	
9< 		
 	
 	OQ''+KKKrV  r  c                   V    e Zd Ze edd           edd           edd          gZdS )SMB2_CREATE_RESPONSE_LEASE_V2ParentLeaseKeyNEpochr   r  )ra  rb  rc  r  r*   r   rd  re  rV  rT  r#  r#  
  sF        "	"D))Wa  Z##	KKKrV  r#  c                   F    e Zd Z edd           edddddi          gZdS )&SMB2_CREATE_DURABLE_HANDLE_RESPONSE_V2Timeoutr   r  rh  rr   SMB2_DHANDLE_FLAG_PERSISTENTN)ra  rb  rc  r   r   rd  re  rV  rT  r'  r'  
  sG        
9a  
4		
 	

KKKrV  r'  c                   ,    e Zd Z eddd          gZdS )"SMB2_CREATE_DURABLE_HANDLE_REQUESTDurableRequestrV  r   r  Nr  re  rV  rT  r+  r+  
  s+        *C;;;KKKrV  r+  c                   :    e Zd Z ed e            e          gZdS )$SMB2_CREATE_DURABLE_HANDLE_RECONNECTr  N)ra  rb  rc  r   r  rd  re  rV  rT  r.  r.  
  s,        FKKMM;77KKKrV  r.  c                   (    e Zd Z edd          gZdS )(SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQUEST	Timestampr   Nra  rb  rc  r   rd  re  rV  rT  r0  r0  
  $        K##KKKrV  r0  c                   (    e Zd Z edd          gZdS )SMB2_CREATE_ALLOCATION_SIZEr  r   Nr2  re  rV  rT  r5  r5  
  s%        $a((KKKrV  r5  c                   (    e Zd Z edd          gZdS )SMB2_CREATE_TIMEWARP_TOKENr1  r   Nr2  re  rV  rT  r7  r7  
  r3  rV  r7  c                       e Zd ZegZdS )SMB2_CREATE_REQUEST_LEASEN)ra  rb  rc  r  rd  re  rV  rT  r9  r9     s        "KKKrV  r9  c                       e Zd ZegZdS )SMB2_CREATE_REQUEST_LEASE_V2N)ra  rb  rc  r#  rd  re  rV  rT  r;  r;    s        %KKKrV  r;  c                   R    e Zd Ze eddd           eddej                  gZdS )	%SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2r  rV  r   r  
CreateGuidr   r  N)ra  rb  rc  r'  r/   r*   r  rd  re  rV  rT  r=  r=    sD        .*c!444	,i.ABBBKKKrV  r=  c            	       |    e Zd Z ed e            e           eddej                   edddddi          gZd	S )
'SMB2_CREATE_DURABLE_HANDLE_RECONNECT_V2r  r>  r   r  r  rh  rr   r)  N)	ra  rb  rc  r   r  r*   r  r   rd  re  rV  rT  r@  r@    sf        Hkkmm[99	,i.ABBB
4		
 	
KKKrV  r@  c                   X    e Zd Z edd           edd           eddd          gZd	S )
SMB2_CREATE_APP_INSTANCE_IDr  r=  r  r   AppInstanceIdrV  r   r  N)ra  rb  rc  r-   r   r/   rd  re  rV  rT  rB  rB  #  sH        ot,,Z##/3r:::KKKrV  rB  c                       e Zd Z edd           edd           edd           edd           edd          gZdS )	 SMB2_CREATE_APP_INSTANCE_VERSIONr  r  r  r   r  AppInstanceVersionHighAppInstanceVersionLowN)ra  rb  rc  r-   r   r   r   rd  re  rV  rT  rE  rE  +  sb        ot,,Z##
9a  ,a00+Q//KKKrV  rE  c                   H   e Zd ZdZdZdZ edd           edd           edd           e	dd	           ed
d           edd           e
de e eddd           d           eddej        d           gddg           eddd           gZd Zd Zd ZdS )SMB2_Create_ContextzSMB2 CREATE CONTEXTr   r@  r  NNameBufferOffsetNameLenr  r   DataBufferOffsetDataLenr#  rV  c                     | j         S rP  )rK  rR  s    rT  rU  zSMB2_Create_Context.<lambda>E      S[ rV  rW  r   r  c                     | j         S rP  rM  rR  s    rT  rU  zSMB2_Create_Context.<lambda>J  s    #+ rV  r  r  c                 x    | j         r2| j         t          | j        | j        z   | j        | j        z             z
  ndS r  )r  maxrL  rM  rJ  rK  rN  s    rT  rU  zSMB2_Create_Context.<lambda>R  sJ     v	#a(194a6H196TUUV V  rV  c                 P   | j         s|S 	 t          | j        t                    rnt          t
          t          t          t          t          t          t          t          t          t          d| j                 }| j        dk    r| j         dk    rt           }nft          | j        t"                    rJt$          t&          t          t(          t*          d| j                 }| j        dk    r| j         dk    rt,          }n|S n# t.          $ r |cY S w xY w || j        j                  | _        |S )N)   DHnQs   DHnCs   AISi   MxAcs   TWrp   QFid   RqLs   DH2Qs   DH2Cs   EjJF.Mts   з;VO{RJrX  r   )rU  rV  rW  rX  rY  )rM  r"  parentr  r+  r.  r5  r0  r7  r  r9  r=  r@  rB  rE  r#  r;  r  r  r  r  r'  r#  KeyErrorr  r  )r]  r^  data_clss      rT  post_dissectz SMB2_Create_Context.post_dissect[  s&   | 	H	$+':;; ?A8E796BDD_Gg  ) 9''DL2,=,=;HDK)=>> @F97C  ) 9''DL2,=,=<H 	 	 	HHH	HTY^,,	s   C-C: :D	D	c                     t           j        S rP  rZ  r]  r5  s     rT  r_  z)SMB2_Create_Context.default_payload_class  r`  rV  c           
          t          | || j        ddddt          j        t          j        t          j        z  dfdt          j        fg          |z   S )Nr   r   )r#  r  r  r  r  )r9   r^  r8   ru  LENr  s      rT  r  zSMB2_Create_Context.post_build  sx       '$.$5$.$5
$G  JN+	  & '	
rV  )ra  rb  rc  r  r^  r(  r   r-   r   r"   r6   r   r%   r   r   r  rd  r]  r_  r  re  rV  rT  rI  rI  5  sU        DF'
64  ($//Y%%
:q!!($//
9d##K9P9PQQQ 
 D$.>U>U  	  (	
 	
 	
 	 		
 		
 		
- KD$ $ $L" " "
 
 
 
 
rV  rI  SMB2_OPLOCK_LEVEL_NONESMB2_OPLOCK_LEVEL_IISMB2_OPLOCK_LEVEL_EXCLUSIVESMB2_OPLOCK_LEVEL_BATCHSMB2_OPLOCK_LEVEL_LEASE)r   rp   r   r   ry  c                   f   e Zd ZdZdZdZdZ edd           edd           e	d	de
           ed
dddddd           edd           edd           eddde           eddde           eddddddd           edddddd d!d"d#           ed$ddi dd%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdI           edJdK           edLdK           edMdK           edNdK           ede edOdP           edQg edR S          g          gZdT ZdKS )Ur  zSMB2 CREATE Requestr   x   r@  r  9   r  r   RequestedOplockLevelImpersonationLevel	AnonymousIdentificationImpersonationDelegater   rp   rr   r   SmbCreateFlagsr  DesiredAccessrh  r  r   ShareAccessFILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETEr  CreateDispositionrp   FILE_SUPERSEDE	FILE_OPENFILE_CREATEFILE_OPEN_IFFILE_OVERWRITEFILE_OVERWRITE_IF)r   rp   rr   r   r   r   CreateOptionsFILE_DIRECTORY_FILErr   FILE_WRITE_THROUGHr   r  r   r  r   r  r   r  r   FILE_NON_DIRECTORY_FILEr   FILE_COMPLETE_IF_OPLOCKEDr  FILE_RANDOM_ACCESSr   r  r"  FILE_OPEN_BY_FILE_IDr$  FILE_OPEN_FOR_BACKUP_INTENTr&  FILE_NO_COMPRESSIONr  FILE_OPEN_REMOTE_INSTANCEr   FILE_OPEN_REQUIRING_OPLOCKr   FILE_DISALLOW_EXCLUSIVEr   FILE_RESERVE_OPFILTERFILE_OPEN_REPARSE_POINTFILE_OPEN_NO_RECALLFILE_OPEN_FOR_FREE_SPACE_QUERY)rq  r-  rn  rJ  NrK  CreateContextsBufferOffsetCreateContextsLenr#  rV  CreateContextsc                     | j         S rP  r  rR  s    rT  rU  zSMB2_Create_Request.<lambda>  	    C,A rV  rW  c                 l    t          |          dk    r|dz  }t          | || j        ddd          |z   S )Nr  r  ,   rD  )r#  r  r  r  r^  r  s      rT  r  zSMB2_Create_Request.post_build  sS    s88t7NC&( 	  		
rV  )ra  rb  rc  r  r  r^  r(  r-   r   r
   SMB2_OPLOCK_LEVELSr   r   r   rj  r  r   r+   r   r6   r#   r  rI  rd  r  re  rV  rT  r  r    s        DGF'ot,,	+q!!,a1CDD ',+&	 		
 		
 	$a((J""
?As,BCC
#ZnEE
-./ 			
 		
 	,')*,/ 	
 	
 	
10 2 <	
 7 : 5 7 0 2 2 9 1 7 8  5!" 3#$ 61<)  		
 	
6 	($//Y%%0$77
&--fc**$$$' A A	  	
 	
OTKl
 
 
 
 
rV  r  c                   "   e Zd ZdZdZdZdZ edd           edde	           e
d	dd
ddi           eddddddd          e ed e            e           edd           edd           ede edg ed           g          g	Zd ZdS )r  zSMB2 CREATE Responser      r@  r  Y   OplockLevelr   r  r  rp   SMB2_CREATE_FLAG_REPARSEPOINTCreateActionFILE_SUPERSEDEDFILE_OPENEDFILE_CREATEDFILE_OVERWRITENrp  r  r  Nr  r  c                     | j         S rP  r  rR  s    rT  rU  zSMB2_Create_Response.<lambda><  r  rV  rW  c                 :    t          | || j        ddi          |z   S )Nr  rv  r  r  s      rT  r  zSMB2_Create_Response.post_buildB  s5     $b	  
	
rV  )ra  rb  rc  r  r  r^  r(  r-   r
   r  r   r   r<  r   r  r+   r   r6   r  rI  rd  r  re  rV  rT  r  r    s        !DGF'ot,,mQ(:;;
7ArD*I#JKK-)*-	 		
 		
 	#Hkkmm[990$77
&--$$$' A A	  	
 	
%K@
 
 
 
 
rV  r  c                       e Zd ZdZdZ edd           eddddg           ed	d           ed
 e	            e	          gZ
dS )r  zSMB2 CLOSE Requestr   r  r  r  r   r?   SMB2_CLOSE_FLAG_POSTQUERY_ATTRIBr  r  Nra  rb  rc  r  r  r-   r   r   r   r  rd  re  rV  rT  r  r  V  sk        DGot,,
7As%G$HII
:q!!Hkkmm[99	KKKrV  r  c                       e Zd ZdZdZdZdZdZdZdZ	 e
dd           eddddg           ed	d          gej        d
d         z   Zd
S )r  zSMB2 CLOSE Responser   r   r  rE  r  r?  r  r  Nr   )ra  rb  rc  r  r  r  r  r  r  r  r-   r   r   r<  rd  re  rV  rT  r  r  j  s         DGNLNMJot,,
7As%G$HII
:q!! 	#.rr2	3KKKrV  r  c                   v   e Zd ZdZdZdZdZ edd           edd           e	d	dd
ddd           e
dd           edd           ed e            e           e
dd           eddddddd           e
dd           edd           edd           ede eddd            g          gZd! ZdS )"r  zSMB2 READ Requestr   p   r@  r  1   r  r   r  r  SMB2_READFLAG_READ_UNBUFFERED SMB2_READFLAG_REQUEST_COMPRESSEDr   Lengthi  r%  r  MinimumCountr  SMB2_CHANNEL_NONESMB2_CHANNEL_RDMA_V1SMB2_CHANNEL_RDMA_V1_INVALIDATESMB2_CHANNEL_RDMA_TRANSFORMrp  RemainingBytesReadChannelInfoBufferOffsetNReadChannelInfoLenReadChannelInforV  c                     | j         S rP  )r  rR  s    rT  rU  zSMB2_Read_Request.<lambda>  s	    C,B rV  rW  c                 j    t          |          dk    r|dz  }t          | || j        ddi          |z   S )NrD  r  r  r  r  r  s      rT  r  zSMB2_Read_Request.post_build  sM    s88t7NC%r	  
	
rV  )ra  rb  rc  r  r  r^  r(  r-   r   r   r   r   r   r  r   r   r6   r%   rd  r  re  rV  rT  r  r    sd       DGF'ot,,	)T""
58 		
 	
 	
8T""Ha  Hkkmm[99
>1%%/2=9	 		
 		
 	
#Q''2D99)400% B B  
	
 
	
;(KT
 
 
 
 
rV  r  c                       e Zd ZdZdZdZdZ edd           edd           e	d	d           e	d
d           e
dddddi           ede eddd           g          gZd ZdS )r  zSMB2 READ Responser   rv  r@  r  r   rL  NrM  DataRemainingr   r  rh  rp   %SMB2_READFLAG_RESPONSE_RDMA_TRANSFORMr  rV  c                     | j         S rP  rQ  rR  s    rT  rU  zSMB2_Read_Response.<lambda>  s    ck rV  rW  c                 :    t          | || j        ddi          |z   S )Nr  rr   r  r  s      rT  r  zSMB2_Read_Response.post_build  r  rV  )ra  rb  rc  r  r  r^  r(  r-   r   r   r   r6   r%   rd  r  re  rV  rT  r  r    s        DGF'ot,,'..
9d##
?A&&
=		
 	
 	[2I2IJJJK	
 	
K(
 
 
 
 
rV  r  c                   |   e Zd ZdZdZdZdZ edd           edd           e	d	d           e
d
d           ed e            e           eddddddd           e	dd           edd           edd           edddddd           ede eddd            eddd            g          gZd! ZdS )"r  zSMB2 WRITE Requestr   r  r@  r  r  rL  NrM  r%  r   r  r  r  r  r  r  rp  r  WriteChannelInfoBufferOffsetWriteChannelInfoLenr  rh  SMB2_WRITEFLAG_WRITE_THROUGHSMB2_WRITEFLAG_WRITE_UNBUFFEREDr   r  rV  c                     | j         S rP  rQ  rR  s    rT  rU  zSMB2_Write_Request.<lambda>%  s     rV  rW  WriteChannelInfoc                     | j         S rP  )r  rR  s    rT  rU  zSMB2_Write_Request.<lambda>)  s	    C,C rV  c                 <    t          | || j        ddd          |z   S )Nrr   (   )r  r  r  r  s      rT  r  zSMB2_Write_Request.post_build/  s;     (* 	  		
rV  )ra  rb  rc  r  r  r^  r(  r-   r   r   r   r   r  r   r   r6   r%   rd  r  re  rV  rT  r  r     sn       DGF'ot,,'..
9d##Ha  Hkkmm[99/2=9	 		
 		
 	
#Q''3T::*D11
:= 		
 	
 	FC5L5LMMM& C C  	
 	
9(KT
 
 
 
 
rV  r  c            	           e Zd ZdZdZ edd           edd           edd           edd           ed	d           ed
d          gZdS )r  zSMB2 WRITE Responser   r  r   r  r   rt  	Remainingr  r  N)	ra  rb  rc  r  r  r-   r   r   rd  re  rV  rT  r  r  H  s{         DGot,,Z##
7A
;""3Q77*A..KKKrV  r  c                   F    e Zd ZdZdZ edd           edd          gZdS )r  zSMB2 ECHO Requestr   r  r   r  r   Nra  rb  rc  r  r  r-   r   rd  re  rV  rT  r  r  Z  s=        DGos++Z##KKKrV  r  c                   F    e Zd ZdZdZ edd           edd          gZdS )r  zSMB2 ECHO Responser   r  r   r  r   Nr  re  rV  rT  r  r  l  s=        DGos++Z##KKKrV  r  c                   B    e Zd ZdZ edd           edd          gZdS )r  zSMB2 CANCEL Requestr  r   r  r   N)ra  rb  rc  r  r-   r   rd  re  rV  rT  r  r    s8         Dos++Z##KKKrV  r  c                       e Zd ZdZej        dd         ej        dd         ddd         z   ej        d         gz   ZdS )	*SMB2_IOCTL_Validate_Negotiate_Info_Request"SMB2 IOCTL Validate Negotiate Infor   r   rp   r   Nr  r   )ra  rb  rc  r  r  rd  re  rV  rT  r  r    sZ        /D'3AaC8
)
5ac
:44R4
@	A*6q9
:	; KKrV  r  c                       e Zd Zd ZdS )"_SMB2_IOCTL_Request_PacketLenFieldc                     |j         dk    rt          |          S |j         dk    rt          |          S |j         dk    rt          |          S t	          j        |          S )N  dB	 )CtlCoder  SMB2_IOCTL_REQ_GET_DFS_ReferralSMB2_IOCTL_OFFLOAD_READ_Requestr   r  r]  rS  r  s      rT  m2iz&_SMB2_IOCTL_Request_PacketLenField.m2i  sc    ;*$$=a@@@[J&&21555[J&&21555~a   rV  Nra  rb  rc  r  re  rV  rT  r  r    #        ! ! ! ! !rV  r  c                      e Zd ZdZdZdZdZdddZ edd	           e	d
d           e
dd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,           ed- e            e           ed.d/           ed0d/           ed1d           ed2d/           ed3d/           ed4d5           ed6dd7d8d9i           ed:d           ede ed;d/ej        d< =           ed>d/ej        d? =          g          gZd@ Zd/S )Ar  zSMB2 IOCTL Requestr   rh  r@  )InputLenalias)	OutputLenr  )IntputCountOutputCountr  ri  r  r   r  r  FSCTL_DFS_GET_REFERRALSi@ FSCTL_PIPE_PEEKi  FSCTL_PIPE_WAITi FSCTL_PIPE_TRANSCEIVEi@ FSCTL_SRV_COPYCHUNKid@ FSCTL_SRV_ENUMERATE_SNAPSHOTSix  FSCTL_SRV_REQUEST_RESUME_KEYiA FSCTL_SRV_READ_HASHi FSCTL_SRV_COPYCHUNK_WRITEi FSCTL_LMR_REQUEST_RESILIENCY "FSCTL_QUERY_NETWORK_INTERFACE_INFOi 	 FSCTL_SET_REPARSE_POINTi FSCTL_DFS_GET_REFERRALS_EXi	 FSCTL_FILE_LEVEL_TRIMr  FSCTL_VALIDATE_NEGOTIATE_INFOr  FSCTL_OFFLOAD_READr  InputBufferOffsetNr  MaxInputResponseOutputBufferOffsetr  MaxOutputResponser  r  rh  rp   SMB2_0_IOCTL_IS_FSCTLr  Inputc                     | j         S rP  r  rR  s    rT  rU  zSMB2_IOCTL_Request.<lambda>  s    3< rV  rW  Outputc                     | j         S rP  r  rR  s    rT  rU  zSMB2_IOCTL_Request.<lambda>      CM rV  c                 <    t          | || j        ddd          |z   S )Nr  rb  r  r  r  r  s      rT  r  zSMB2_IOCTL_Request.post_build  ;       	  		
rV  )ra  rb  rc  r  r  r^  r(  deprecated_fieldsr-   r   r   r   r  r   r   r6   r  r   r  rd  r  re  rV  rT  r  r    s`       DGF',- 
 	ot,,Z##5- - 3	
 1 ; : 1 7 : @ 5 8 3 ;  0!	
 	
, 	Hkkmm[99
&--
:t$$
%q))
'..
;%%
&--
7AsZ1H$IJJ
;""22T4>?W?W   32N 9 9	  	
	
 	
E1Kf
 
 
 
 
rV  r  c                   ,   e Zd Z eddddd           edd           e edd	          d
            e eddd          d            e edd          d            e e	dd	          d            e edd          d           gZ
d Zd	S )SOCKADDR_STORAGEFamilyrr   r5  r6  )rr      Portr   IPv4AdddressNc                     | j         dk    S r9  r  rR  s    rT  rU  zSOCKADDR_STORAGE.<lambda>      
f, rV  r  rV  r   r  c                     | j         dk    S r9  r  rR  s    rT  rU  zSOCKADDR_STORAGE.<lambda>  r  rV  FlowInfoc                     | j         dk    S Nr  r  rR  s    rT  rU  zSOCKADDR_STORAGE.<lambda>      
g- rV  IPv6Addressc                     | j         dk    S r  r  rR  s    rT  rU  zSOCKADDR_STORAGE.<lambda>  r  rV  ScopeIdc                     | j         dk    S r  r  rR  s    rT  rU  zSOCKADDR_STORAGE.<lambda>  r  rV  c                     t           j        S rP  rZ  r_  s     rT  r_  z&SOCKADDR_STORAGE.default_payload_class  r`  rV  )ra  rb  rc  r   r"   r   r   r$   r   r   rd  r_  re  rV  rT  r  r    s       6FF+K+KLL
61GND)),,	
 	
 	ZQ777,,	
 	

 	Jz1%%--	
 	
 	H]D))--	
 	
 	Jy!$$--	
 	
+K6" " " " "rV  r  c            
           e Zd Z edd           edd           edddddd	           ed
d           edddd           ed e            e          gZd Z	dS )NETWORK_INTERFACE_INFOr  NIfIndexrp   
Capabilityrh  RSS_CAPABLERDMA_CAPABLEr   r  r   	LinkSpeedl    d(	 r  zbit/s)rM  unitSockAddr_Storagec                     t           j        S rP  rZ  r_  s     rT  r_  z,NETWORK_INTERFACE_INFO.default_payload_class.  r`  rV  )
ra  rb  rc  r   r   r    r   r  rd  r_  re  rV  rT  r  r    s        
64  
9a  
)* 		
 	
 	
:q!![+4gFFF&(8(8(:(:<LMMK"" " " " "rV  r  c                   .    e Zd ZdZ edg e          gZdS )!SMB2_IOCTL_Network_Interface_Infoz*SMB2 IOCTL Network Interface Info response
interfacesN)ra  rb  rc  r  r  r  rd  re  rV  rT  r#  r#  2  s-        7D\2/EFFKKKrV  r#  c                   b    e Zd ZdZej        dd         ddd         ej        dd         z   ZdS )+SMB2_IOCTL_Validate_Negotiate_Info_Responser  r   r   Nr  rp   r   )ra  rb  rc  r  r  rd  re  rV  rT  r&  r&  <  sI        /D(4QqS9$$B$?
*
6aC
	
 KKrV  r&  c            	           e Zd ZdZ edd           edd           edd           edd           edd           ed	d          gZd
S )r  zSMB2 IOCTL OFFLOAD_READ Requestr  r   r  r   TokenTimeToLiver  
FileOffset
CopyLengthN)ra  rb  rc  r  r   r   rd  re  rV  rT  r  r  I  su        ,D
?D))
7A
$a((
:q!!L!$$L!$$KKKrV  r  c                   z    e Zd Z eddddi           edd           edddd	
           ed	dd          gZdS )STORAGE_OFFLOAD_TOKENr  l     $STORAGE_OFFLOAD_TOKEN_TYPE_ZERO_DATAr  r   TokenIdLengthNrK  TokenIdr  rV  i  r  )ra  rb  rc  r   r   r   r$   rd  re  rV  rT  r,  r,  X  sq        B	
 	
 	Z##otKKKC444KKKrV  r,  c                       e Zd ZdZ edd           edddddi           ed	d           ed
 e            e          gZ	dS ) SMB2_IOCTL_OFFLOAD_READ_Responsez SMB2 IOCTL OFFLOAD_READ Responser  r;   r  r   rh  rp   /OFFLOAD_READ_FLAG_ALL_ZERO_BEYOND_CURRENT_RANGETransferLengthTokenN)
ra  rb  rc  r  r   r   r   r   r,  rd  re  rV  rT  r1  r1  j  sz        -D
?E**
M		
 	
 	$a((G22446KLLKKKrV  r1  c                       e Zd Zd ZdS )#_SMB2_IOCTL_Response_PacketLenFieldc                     |j         dk    rt          |          S |j         dk    rt          |          S |j         dk    rt          |          S t	          j        |          S )Nr  r  r  )r  r&  r#   SMB2_IOCTL_RESP_GET_DFS_Referralr   r  r  s      rT  r  z'_SMB2_IOCTL_Response_PacketLenField.m2i  sc    ;*$$>qAAA[J&&4Q777[J&&3A666~a   rV  Nr  re  rV  rT  r6  r6  ~  r  rV  r6  c                       e Zd ZdZdZdZdZdZdZe	j
        dd         e	j
        d	d
         z   e	j
        dd         z    ede eddej        d            eddej        d           g          gz   Z
d ZdS )r  zSMB2 IOCTL Responser   r  r@  r  r   Nr   r   r   r   r   r  c                     | j         S rP  r  rR  s    rT  rU  zSMB2_IOCTL_Response.<lambda>  s     rV  rW  r  c                     | j         S rP  r  rR  s    rT  rU  zSMB2_IOCTL_Response.<lambda>  s     rV  c                 <    t          | || j        ddd          |z   S )Nr  r   r  r  r  s      rT  r  zSMB2_IOCTL_Response.post_build  r  rV  )ra  rb  rc  r  r  r^  r(  r  r  r  rd  r6   r6  r   r  r  re  rV  rT  r  r    s         DGF'M&rr*

(1
-	.

(B
/	0 77$<$<	   87 $=$=	   
	
 4
 
 
 
 
rV  r  c                   (   e Zd ZdZdZdZdZ edd           edde	           e
d	d
dddddd           edd
           ed e            e           edd           edd           edd           ede edd          g          g	Zd ZdS )r  zSMB2 QUERY DIRECTORY Requestr   `   r@  r  !   FileInformationClassrp   r  r   r  SMB2_RESTART_SCANSSMB2_RETURN_SINGLE_ENTRYSMB2_INDEX_SPECIFIEDSMB2_REOPEN)rp   rr   r   r   r  r  FileNameBufferOffsetNFileNameLenOutputBufferLengthi  rI  rV  c                 :    t          | || j        ddi          |z   S )NrI  r  r  r  s      rT  r  z'SMB2_Query_Directory_Request.post_build  s5     	  
	
rV  )ra  rb  rc  r  r  r^  r(  r-   r
   FileInformationClassesr   r   r   r  r   r6   r#   rd  r  re  rV  rT  r  r    s       )DGF'ot,,,c3IJJ
*0,#	 	
	
 
	
 	
;""Hkkmm[99+T22]D))
'//(F]]:s-K-K,LMM'K,
 
 
 
 
rV  r  c                       e Zd ZdZdZdZdZ edd           edd           e	d	d           e
de ed
dd           g          gZd ZdS )r  zSMB2 QUERY DIRECTORY Responser   r  r@  r  r   r  Nr  r  rV  c                     | j         S rP  r  rR  s    rT  rU  z&SMB2_Query_Directory_Response.<lambda>       rV  rW  c                 :    t          | || j        ddi          |z   S Nr  rr   r  r  s      rT  r  z(SMB2_Query_Directory_Response.post_build
  5     a	  
	
rV  ra  rb  rc  r  r  r^  r(  r-   r   r   r6   r$   rd  r  re  rV  rT  r  r    s        *DGF'os++)400
;%% ! 3<U<UVVV	
 	
	K
 
 
 
 
rV  r  c                       e Zd ZdZdZ edd           eddddd	i           ed
d           ed e	            e	           edddddddddddddddd           edd          gZ
dS )r  zSMB2 CHANGE NOTIFY Requestr   r  r   r  r   r?  rp   SMB2_WATCH_TREErG  r  r  CompletionFilterrh  FILE_NOTIFY_CHANGE_FILE_NAMEFILE_NOTIFY_CHANGE_DIR_NAMEFILE_NOTIFY_CHANGE_ATTRIBUTESFILE_NOTIFY_CHANGE_SIZEFILE_NOTIFY_CHANGE_LAST_WRITEFILE_NOTIFY_CHANGE_LAST_ACCESSFILE_NOTIFY_CHANGE_CREATIONFILE_NOTIFY_CHANGE_EAFILE_NOTIFY_CHANGE_SECURITYFILE_NOTIFY_CHANGE_STREAM_NAMEFILE_NOTIFY_CHANGE_STREAM_SIZEFILE_NOTIFY_CHANGE_STREAM_WRITE)rp   rr   r   r   r   r   r   r   r   r  r  r  r  Nr  re  rV  rT  r  r  #  s        'DGot,,
)		
 	
 	
'..Hkkmm[99
:9;5;<939<<= 		
 	
& 	
:q!!? KKKrV  r  c                       e Zd ZdZdZdZdZ edd           edd           e	d	d           e
de ed
g ed d          g          gZd ZdS )r  zSMB2 CHANGE NOTIFY Responser   r  r@  r  r   r  Nr  r  c                     | j         S rP  r  rR  s    rT  rU  z$SMB2_Change_Notify_Response.<lambda>c  r   rV  r  )rX  r  c                 :    t          | || j        ddi          |z   S rN  r  r  s      rT  r  z&SMB2_Change_Notify_Response.post_buildj  rO  rV  )ra  rb  rc  r  r  r^  r(  r-   r   r   r6   r  r  rd  r  re  rV  rT  r  r  R  s        (DGF'os++)400
;%%$$+ 9 9"  	
 	
	K&
 
 
 
 
rV  r  c                   z    e Zd Z edd           eddd           eddd 	           ed
dd 	          gZdS )FILE_GET_QUOTA_INFORMATIONr  r   	SidLengthNr  )rL  rV  c                     | j         S rP  )re  rN  s    rT  rU  z#FILE_GET_QUOTA_INFORMATION.<lambda>  s    ak rV  rW  r  c                 2    | j         r| j         | j        z
  ndS r  )r  re  rN  s    rT  rU  z#FILE_GET_QUOTA_INFORMATION.<lambda>  s!    565FM"Q[00A rV  )ra  rb  rc  r   r   r%   rd  re  rV  rT  rd  rd    su        "A&&k45999E3,A,ABBB 	
 	
 	
	KKKrV  rd  c                   &   e Zd Z edd           edd           edd           edd           edd           edd           edd	d
            e edg e	d           d f edd	d           d fg e
dd	d                    gZdS )SMB2_Query_Quota_InfoReturnSingler   ReturnBooleanr  SidListLengthStartSidLengthStartSidOffsetr  rV  c                     | j         S rP  )rn  rN  s    rT  rU  zSMB2_Query_Quota_Info.<lambda>  s	    a6F rV  rW  	SidBufferc                     | j         S rP  rl  rN  s    rT  rU  zSMB2_Query_Quota_Info.<lambda>  s    ao rV  c                     | j         S rP  rr  rN  s    rT  rU  zSMB2_Query_Quota_Info.<lambda>  s    ao rV  c                     | j         S rP  rm  rN  s    rT  rU  zSMB2_Query_Quota_Info.<lambda>  r  rV  c                     | j         S rP  ru  rN  s    rT  rU  zSMB2_Query_Quota_Info.<lambda>  s	    a. rV  r  N)ra  rb  rc  r   r"   r   r%   r   r   rd  r$   rd  re  rV  rT  ri  ri    s       	.!$$	/1%%
:q!!
?A&&
#Q''
#Q''E3,F,FGGG $O#2$=$=	   .-  K#S6P6P   /.	" [#a888%	
 	
KKKrV  ri  SMB2_0_INFO_FILESMB2_0_INFO_FILESYSTEMSMB2_0_INFO_SECURITYSMB2_0_INFO_QUOTAOWNER_SECURITY_INFORMATIONGROUP_SECURITY_INFORMATIONDACL_SECURITY_INFORMATIONSACL_SECURITY_INFORMATIONLABEL_SECURITY_INFORMATIONATTRIBUTE_SECURITY_INFORMATIONSCOPE_SECURITY_INFORMATIONBACKUP_SECURITY_INFORMATION)rp   rr   r   r   r   r   r   r   c                      e Zd ZdZdZdZdZ edd           edde	           ed	de
           ed
d           edd           edd           eddde           eddddddd           ed e            e           ede e edded           d fg eddd                     g          g
Zd ZdS )r  zSMB2 QUERY INFO Requestr   h   r@  r  )   InfoTyper   FileInfoClassrG  r  Nr  AdditionalInformationrh  r  SL_RESTART_SCANSL_RETURN_SINGLE_ENTRYSL_INDEX_SPECIFIEDr  r  r  c                     | j         S rP  r  rR  s    rT  rU  z SMB2_Query_Info_Request.<lambda>  s     rV  rW  c                     | j         dk    S rM  r  rR  s    rT  rU  z SMB2_Query_Info_Request.<lambda>      (< rV  rV  c                     | j         S rP  r  rR  s    rT  rU  z SMB2_Query_Info_Request.<lambda>  s    cl rV  c                 :    t          | || j        ddi          |z   S )Nr  r   r  r  s      rT  r  z"SMB2_Query_Info_Request.post_build  s5     Q	  
	
rV  )ra  rb  rc  r  r  r^  r(  r-   r
   SMB2_INFO_TYPErI  r   r+   r   SMB2_ADDITIONAL_INFORMATIONr   r  r6   r   r   ri  r%   rd  r  re  rV  rT  r  r    s       $DGF'ot,,	
 	

 	oq*@AA
'++'..
:t$$
#'		
 	
 	
-40 			
 		
 	Hkkmm[99!! ,O ' $ 5,D,D	   =<	  K:R:RSSS 	
 	
91Kf
 
 
 
 
rV  r  c                       e Zd ZdZdZdZdZ edd           edd           e	d	d           e
de ed
dd           g          gZd ZdS )r  zSMB2 QUERY INFO Responser   r  r@  r  r   r  Nr  r  rV  c                     | j         S rP  r  rR  s    rT  rU  z!SMB2_Query_Info_Response.<lambda>!  rL  rV  rW  c                 :    t          | || j        ddi          |z   S rN  r  r  s      rT  r  z#SMB2_Query_Info_Response.post_build&  rO  rV  rP  re  rV  rT  r  r    s        %DGF'os++)400
;%% ! 3<U<UVVV	
 	
	K
 
 
 
 
rV  r  c                   n   e Zd ZdZdZdZdZ edd           edde	           ed	de
           ed
d           edd           eddde           ed e            e           ede e eddd d           d f edded           d fg eddd                     g          gZd ZdS )r  SMB2 SET INFO Requestr   r>  r@  r  r?  r  r   r  rM  NrL  r  rh  r  r  c                 f    t                              |j        t          j                  |           S rP  )_FileInformationClassesgetr  r   r  )r  _parents     rT  rU  zSMB2_Set_Info_Request.<lambda>a  s.    3J3N3N$+$94>4" 4""#4% 4% rV  c                     | j         S rP  rQ  rR  s    rT  rU  zSMB2_Set_Info_Request.<lambda>d       rV  rW  c                     | j         dk    S r<  r  rR  s    rT  rU  zSMB2_Set_Info_Request.<lambda>f  r  rV  c                     | j         S rP  rQ  rR  s    rT  rU  zSMB2_Set_Info_Request.<lambda>n  r  rV  c                     | j         dk    S rM  r  rR  s    rT  rU  zSMB2_Set_Info_Request.<lambda>p  r  rV  rV  c                     | j         S rP  rQ  rR  s    rT  rU  zSMB2_Set_Info_Request.<lambda>s  rO  rV  c                 :    t          | || j        ddi          |z   S )Nr  r   r  r  s      rT  r  z SMB2_Set_Info_Request.post_buildy  r  rV  )ra  rb  rc  r  r  r^  r(  r-   r
   r  rI  r   r+   r   r  r   r  r6   r   r   r   ri  r%   rd  r  re  rV  rT  r  r  @  s       "DGF'ot,,	
 	

 	oq*@AA
9d##&--
#'		
 	
 	Hkkmm[99!! +N & $!% !% -D,C   =< ,O & $ 5,C,C	   =<	0  K9P9PQQQ3  	
  	
#2Kh
 
 
 
 
rV  r  c                   0    e Zd ZdZdZ edd          gZdS )r  r  r   r  rr   Nr  re  rV  rT  r  r    s.        "DGot,,KKKrV  r  c            
           e Zd ZdZ eddd           edd           edde           eddd	d
d           edd          gZ	dS )!SMB2_Compression_Transform_Headerz!SMB2 Compression Transform Headerr  s   SMBr   OriginalCompressedSegmentSizer   CompressionAlgorithmr  SMB2_COMPRESSION_FLAG_NONESMB2_COMPRESSION_FLAG_CHAINEDr  Offset_or_LengthN)
ra  rb  rc  r  r$   r   r   r  r+   rd  re  rV  rT  r  r    s        .D*a00
2C88/4OPP47 	
 	
 	&**KKKrV  r  c                   >    e Zd Z edd           edd          gZdS )r  MaxReferralLevelr   RequestFileNamerN  N)ra  rb  rc  r   r'   rd  re  rV  rT  r  r    s6        '+++R00KKKrV  r  c            	           e Zd Z edd           eddddd            ed	d
ddd           edd
           edd          gZedd            Z	d Z
dS )DFS_REFERRALVersionrp   SizeNrK  	ShareNamec                     |dz   S )Nr   re  )rS  r  s     rT  rU  zDFS_REFERRAL.<lambda>  s    QRUVQV rV  )rM  rL  rO  
ServerTyper   non-rootrootr  ReferralEntryFlagsrN  c                     |r]t          |          dk    rJt          j        d|d d                   d         }|dk    rt          S |dk    rt          S |dk    rt
          S | S )Nrr   rK  r   rp   r   r   )r  r  r  r  DFS_REFERRAL_V3DFS_REFERRAL_V4)cls_pktargskargsversions        rT  dispatch_hookzDFS_REFERRAL.dispatch_hook  sh     	'CIINNmD$rr(33A6G!||##A&&A&&
rV  c                     t           j        S rP  rZ  r\  s     rT  r_  z"DFS_REFERRAL.default_payload_class  r`  rV  rP  )ra  rb  rc  r   r   r   r'   rd  classmethodr  r_  re  rV  rT  r  r    s        Y""DdkBVBV	
 	
 	
 	qjV*D*DEE)1--+r**K 	 	 	 [	" " " " "rV  r  c                      e Zd Z edd           edd           eddddd	           ed
ddddd           edd           e edd          d            e edd          d            e edd          d            e eddd          d            e edd          d            e edd          d            e edd          d             e e	d!dd" #          d$           gZ
d% ZdS )&r  r  r   r  Nr  r   r  r  r  r  r?  NameListReferralTargetSetBoundaryr   
TimeToLivei,  DFSPathOffsetc                     | j         j         S rP  r  r  rR  s    rT  rU  zDFS_REFERRAL_V3.<lambda>      C2CC rV  DFSAlternatePathOffsetc                     | j         j         S rP  r  rR  s    rT  rU  zDFS_REFERRAL_V3.<lambda>  r  rV  NetworkAddressOffsetc                     | j         j         S rP  r  rR  s    rT  rU  zDFS_REFERRAL_V3.<lambda>  r  rV  ServiceSiteGuidr   r  c                     | j         j         S rP  r  rR  s    rT  rU  zDFS_REFERRAL_V3.<lambda>  r  rV  SpecialNameOffsetc                     | j         j        S rP  r  rR  s    rT  rU  zDFS_REFERRAL_V3.<lambda>      .? rV  NumberOfExpandedNamesc                     | j         j        S rP  r  rR  s    rT  rU  zDFS_REFERRAL_V3.<lambda>   r  rV  ExpandedNameOffsetc                     | j         j        S rP  r  rR  s    rT  rU  zDFS_REFERRAL_V3.<lambda>  r  rV  r  c                     | j         dz
  S )Nr   r  rR  s    rT  rU  zDFS_REFERRAL_V3.<lambda>  s    B rV  rW  c                     | j         j        S rP  r  rR  s    rT  rU  zDFS_REFERRAL_V3.<lambda>  r  rV  c                     | j         8|d d         t          j        dt          |                    z   |dd          z   }||z   S )Nrr   rK  r   )r  r  r  r  r  s      rT  r  zDFS_REFERRAL_V3.post_build  sE    9bqb'FKc#hh777#abb'ACSyrV  )ra  rb  rc  r   r   r   r   r   r$   r%   rd  r  re  rV  rT  r  r    s       Y""VT""qjV*D*DEE
 *+ 		
 	
 	
<%%L$//CC	
 	
 	L1488CC	
 	
 	L/66CC	
 	
 	."===CC	
 	

 	L,d33??	
 	
 	L0$77??	
 	
 	L-t44??	
 	
 	K	45N5NOOO??	
 	
Y0Kd    rV  r  c                       e Zd ZdZdS )r  r   N)ra  rb  rc  r  re  rV  rT  r  r    s        GGGrV  r  c                   T    e Zd Z edd           edd           edd          gZdS )DFS_REFERRAL_ENTRY0DFSPathrN  DFSAlternatePathNetworkAddressN)ra  rb  rc  r'   rd  re  rV  rT  r  r    sG        )R((,b11*B//KKKrV  r  c            	       T    e Zd Z edd           edg  edd                    gZdS )DFS_REFERRAL_ENTRY1SpecialNamerN  ExpandedNameN)ra  rb  rc  r'   r   rd  re  rV  rT  r  r    sJ        -,,b"%%	
 	
KKKrV  r  c                       e Zd Zd Zd ZdS )_DFS_Referrals_BufferFieldc           	         g }t          d |j        D                       }|j        D ]}|j        j        st          }nt
          }t          d||j        d |j        D             d          }|                    ||          \  }}	|	                    ||	          }	|
                     |di d |	D                        ||j        z  }d|fS )	Nc              3   $   K   | ]}|j         V  d S rP  r  r  s     rT  r  z6_DFS_Referrals_BufferField.getfield.<locals>.<genexpr>-  s$      99QV999999rV  rN  c                     g | ]	}|j         
S re  r  r  s     rT  r  z7_DFS_Referrals_BufferField.getfield.<locals>.<listcomp>9      ===QV===rV  r%  r  r'  c                 ,    i | ]}|d          |d         S r  re  r  s     rT  
<dictcomp>z7_DFS_Referrals_BufferField.getfield.<locals>.<dictcomp>?  s"    !;!;!;!A$!!;!;!;rV  rV  re  )sumReferralEntriesr  r  r  r  r6   rd  getfieldi2hr  r  )
r]  rS  r^  resultsoffsetrefr  fldremainvalss
             rT  r  z#_DFS_Referrals_BufferField.getfield+  s    99S%899999& 	 	C): *))#==S_===$  C <<Q//LFD773%%DNN33<<!;!;d!;!;!;<<===chFFG|rV  c                   	 t          d |j        D                       }t          |          D ]\  }		 |j        |         }n# t          $ r d }Y nw xY wt	          d|	j        d 	j        D             d          }	fd	j        D             }|                    ||          }||                    |d|          z  }|t          |          z  }|S )Nc              3   4   K   | ]}t          |          V  d S rP  r  r  s     rT  r  z6_DFS_Referrals_BufferField.addfield.<locals>.<genexpr>D  s(      99SVV999999rV  rN  c                     g | ]	}|j         
S re  r  r  s     rT  r  z7_DFS_Referrals_BufferField.addfield.<locals>.<listcomp>N  r  rV  r%  r  c                 H    g | ]}|j         t          |j                   fS re  )r  r  )r  r  r  s     rT  r  z7_DFS_Referrals_BufferField.addfield.<locals>.<listcomp>R  s,    TTTSsxch!7!78TTTrV  rV  )	r  r  r  r[  r6   rd  h2ir  r  )
r]  rS  r^  r  r  r  r  r  valuesr  s
            @rT  r  z#_DFS_Referrals_BufferField.addfieldC  s
   99S%899999oo 	 	FAs)!,   #==S_===$  C UTTTCOTTTFWWS&))Fc3///Ac#hhFFs   AAAN)ra  rb  rc  r  r  re  rV  rT  r  r  *  s2          0    rV  r  c                       e Zd Z edd           edddd           eddd	d
ddd           edg ed            edg           gZ	d Z
dS )r8  PathConsumedr   NumberOfReferralsNrK  r  rI  ReferralHeaderFlagsrh  ReferralServersStorageServersTargetFailbackr  c                     | j         S rP  )r  rR  s    rT  rU  z)SMB2_IOCTL_RESP_GET_DFS_Referral.<lambda>k  r  rV  r  ReferralBufferc                 `   dddddd}t          d | j        D                       }d}t          | j        | j                  D ]\  }}|j        D ]}|||j                 z   }	|                    |j        dz             H|                    |j                  r.|d |	         t          j        d|          z   ||	d	z   d          z   }|t          |
                    | d
|                    |j                                      z  }|t          |          z  }|t          |          z  }||z   S )Nr   r   r   )r  r  r  r  r  c              3   4   K   | ]}t          |          V  d S rP  r  r  s     rT  r  z>SMB2_IOCTL_RESP_GET_DFS_Referral.post_build.<locals>.<genexpr>  s(      >>AQ>>>>>>rV  r   r%  rK  rr   rV  )r  r  zipr	  rd  r  getfieldvalr  r  r  r  )
r]  rS  r  offsets
dataoffsetentryoffsetr  bufr  offs
             rT  r  z+SMB2_IOCTL_RESP_GET_DFS_Referral.post_buildp  sO     " 
 
 >>)=>>>>>
D0$2EFF 		$ 		$HC V V!GCH$55??38h#677?COOHE E? dsd)fk$
&C&CCc#PQ'))nTCc#,,tS#//#(:S:S"T"TUUU

#c(("J3s88#KKSyrV  )ra  rb  rc  r   r   r   r   r  r  rd  r  re  rV  rT  r8  r8  Y  s        ^Q'')4TDUVVV
!-,, 			
 		
 	88		
 	
 	
 	#"#3R88'K,    rV  r8  r  c                 j    dt           j        i|         } || |z                                             S )z.
    Update the PreauthIntegrityHashValue
    r  )hashlibsha512r  )PreauthIntegrityHashValuer^  HashIdhashers       rT  $SMB2computePreauthIntegrityHashValuer    s7     (0F6+a/0077999rV  c                   ^     e Zd ZdZ fdZd fd	Zd	 fd	Zeej	        fd            Z
 xZS )
SMBStreamSocketz\
    A modified StreamSocket to dissect SMB compounded requests
    [MS-SMB2] 3.3.5.2.7
    c                     t          j                    | _        t                      | _         t          t          |           j        |i | d S rP  )collectionsdequequeue
SMBSessionsessionr  r  __init__)r]  r  kwargsr  s      rT  r"  zSMBStreamSocket.__init__  sF     &((
!||-ot$$-t>v>>>>>rV  Nc                    | j         r| j                                         S t          t          |                               |          }||t
          |v rs|t
                   j        }t
          |v rX|t
                   }|j                                         | j         	                    |           |j
        sn|j        }t
          |v X| j                            |          S rP  )r  popleftr  r  recvr  r  r!  remove_payloadr  r  r!  in_pkt)r]  r  rS  r  r  s       rT  r&  zSMBStreamSocket.recv  s     : 	(:%%'''OT**//22?{c11k"*C$$+&--///
!!#&&& k $$ |""3'''rV  Fc                     | j                             ||          D ]$} t          t          |           j        |fi |c S d S )N)
Compounded)r!  out_pktr  r  send)r]  r  r*  r#  rS  r  s        rT  r,  zSMBStreamSocket.send  s`    <''j'AA 	D 	DC45$//4SCCFCCCCC	D 	DrV  c                 n    t          d | D                       rd | D             S t          | |          S )Nc              3   8   K   | ]}t          |d d          V  dS )r  N)r  r  s     rT  r  z)SMBStreamSocket.select.<locals>.<genexpr>  s.      ::Qwq'4((::::::rV  c                 J    g | ] }t          |t                    |j        |!S re  )r"  r  r  r  s     rT  r  z*SMBStreamSocket.select.<locals>.<listcomp>  s.    UUU!*Q*H*HUQWUAUUUrV  )r  )anyr   )socketsr  s     rT  selectzSMBStreamSocket.select  sI    ::'::::: 	VUUwUUUUgf5555rV  rP  F)ra  rb  rc  __doc__r"  r&  r,  r  r   recv_poll_rater2  r  r  s   @rT  r  r    s         
? ? ? ? ?
( ( ( ( ( ("D D D D D D #2 6 6 6 \6 6 6 6 6rV  r  c                   b     e Zd ZdZ fdZed             Zd Zd Zd Z	ddZ
d	ef fd
Z xZS )r   z,
    A SMB session within a TCP socket.
    c                    d | _         |                    dd           | _        |                    dd           | _        i | _        g | _        d| _        d| _        d| _        d | _	        d| _
        d| _        d| _        t          j        d          | _        d | _        d | _        d | _        t$          j        rt$          j        D ]}d | j        |<    t)          t*          |           j        |i | d S )	Nssp
sspcontextr:   r   r  r   r   r   )
smb_headerr  r8  r9  sniffsspcontextsCompoundQueueDialectCreditsre  SMBSessionKeyPreauthIntegrityHashIdCipherIdr  osurandomr  #ConnectionPreauthIntegrityHashValue SessionPreauthIntegrityHashValuer   winssps_passiver  r   r"  )r]  r  r#  r8  r  s       rT  r"  zSMBSession.__init__  s    ::eT** **\488 "!&/#%",JrNN	37004-04- 	2+ 2 2-1%c**(j$($9&99999rV  c                 x   t          | j        dd           sd S | j        dk    rc| j        dk    r
d}| j        }nd}d}d| j        v rd}nd	| j        v rd
}nt
          t          | j        j        d d         |||          | _        d S | j        dk    r| j        j        d d         | _        d S t          d          )N
SessionKeyr<   r>   s   SMBSigningKey s   SMB2AESCMAC s   SmbSign 256r   128r   r   r;   z
Hmmm ? >:()	r  r9  r=  rE  rA  r  r3   rH  r?  )r]  labelpreauth_hashLs       rT  computeSMBSessionKeyzSMBSession.computeSMBSessionKey  s    td;; 	F<6!!|v%%,#D*-%%$-''  !0*3B3/	" "D \V##!%!;CRC!@D\***rV  c                     | j         r?| j         dk    r6| j        d| _        |D ]'}t          | j        || j                  | _        $d S d S d S )Nr>   s@                                                                   r  )r=  rD  r  r@  )r]  negopktsnegopkts      rT  computeSMBConnectionPreauthz&SMBSession.computeSMBConnectionPreauth  s    < 	DLF22 7?;G8#  8@#:   88	 	22 rV  c                     | j         rD| j         dk    r;| j        | j        | _        |D ]'}t          | j        || j                  | _        $d S d S d S )Nr>   rP  )r=  rE  rD  r  r@  )r]  sesspktssesspkts      rT  computeSMBSessionPreauthz#SMBSession.computeSMBSessionPreauth  s    < 	DLF224< < 5 $  8=#:   55	 	22 rV  c                     |S )z%
        Incoming SMB packet
        re  )r]  rS  s     rT  r(  zSMBSession.in_pkt,  s	     
rV  Fc                 Z   t           |v r| j        r|t                    }|rOt          |t                              }| dz  }|r|                    d|z             ||z   |t                    _        | j        rW| j        rP| j        dk    rE|t                    }|xj        dz  c_        |	                    | j        | j        | j
        d           |r| j                            |           g S | j        r7t          j        d | j                  |z  }| j                                         |gS )aC  
        Outgoing SMB packet

        :param pkt: the packet to send
        :param Compound: if True, will be stack to be send with the next
                         un-compounded packet

        Handles:
         - handle compounded requests (if any): [MS-SMB2] 3.3.5.2.7
         - handles signing (if required)
        r   r  r   r  F)r  r  c                     | |z  S rP  re  )r  ys     rT  rU  z$SMBSession.out_pkt.<locals>.<lambda>d  s
    A rV  )r  r<  r  r$  r  r=  r?  re  r  r  r  r  	functoolsreduceclear)r]  rS  r*  r  r&  smbs         rT  r+  zSMBSession.out_pkt2  sT    #! '+& ? S-..!'Q 6OOGf$4555/5K ,| 
 2 
t7HA7M7M+&		00		L&'+'>"      /"))#...	 % /#*+=+=t?QRRUXXC&,,...urV  rS  c                     t          t          |                               |          }|t          |v r|                     |          S |S rP  )r  r   processr  r(  )r]  rS  r  s     rT  ra  zSMBSession.processh  sF    J%%--c22?{c11;;s###
rV  r3  )ra  rb  rc  r4  r"  r   rN  rS  rW  r(  r+  r   ra  r  r  s   @rT  r   r     s         : : : : :6 + + +<  "  (  4 4 4 4l6          rV  r   )r  )r4  r  r\  r  rB  r  r  scapy.automatonr   scapy.configr   r   scapy.errorr   scapy.packetr   r   r	   scapy.fieldsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   scapy.sessionsr1   scapy.supersocketr2   crypto_validscapy.libs.rfc3961r3   scapy.layers.gssapir4   scapy.layers.netbiosr5   scapy.layers.ntlmr6   r7   r8   r9   ry  r  r  r  r`  rx  rw  r  r  r  rj  SMB2_ACCESS_FLAGS_DIRECTORYSRVSVC_SHARE_TYPESr  rI  r  rG  r5  r9  r|  r1  r4  r<  r  r  r0  r  r/  r  r>  r3  r8  r7  r6  r2  r  r  r  WELL_KNOWN_SIDSr  r  r2  r  r  r  r  r  rd  r  r  r  r   r  r  r  r  r
  r  r  r*  r-  r/  r<  r:  rj  r  r  r  r^  ra  r  r  r  r  r  r  r3  r?  rR  r\  r  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r'  r+  r.  r0  r5  r7  r9  r;  r=  r@  rB  rE  rI  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r&  r  r,  r1  r6  r  r  r  r  r  rd  ri  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r8  r  r  r   re  rV  rT  <module>rq     sB4             				 				  * * * * * * / / / / / / / / # # # # # # ; ; ; ; ; ; ; ; ; ;( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (R * ) ) ) ) ) * * * * * * 3222222 + + + + + + + + + + + +             - - - '- (	-
 (- (- %- (- &- +- $- '- '- +- --  *!-" %#- -$ 1%-& &'-( ,)-* .+-, *--. +/-0 %1-2 &3-4 ,5-6 )7-8 )9-: /;-< ,=-> &?-@ -A-B )C-D "E- -F /$/-+-0")0Y- - -`7.7-7 -7 ,	7
 $7 /7 %7 $7 $7 $7 $7 /7 (7 *7 %7  &!7" )#7 7$ $%7& 1'7( $)7* $+7, $-7. &/70 /172 &374 (576 (778 (97: (;7< (=7> (?7@ (A7B (C7D (E7 7 7F (G7H (I7J (K7L (M7N (O7P (Q7R ,S7T 'U7V +W7X -Y7Z .[7\ *]7^ )_7` 1a7b (c7d (e7f 'g7 7h ()+m7 7 7t

  M 	
 " M L L K L K L M K "   !" #$ '  0 2*+/).'     $#   
      	      ! " 	
  #  & '      (  !!" #$ ")   0% ' 	
   # & '      (  !!" #$ ")   2   )' ' *	
 ( ' * , . + ( 4 * 1 .  /!" '#$ *6'  0
$
( 	
( 	
 	
 	
# 	
# 	
 	
! 	
! 	
# 	
 	
$ 	
 	
& 	
*  	
*!" 	
 #$ *
*'   *  " " " " "F " " "" " " " "F " " "" " " " "v " " "6    6   #" #" #" #" #"6 #" #" #"R" " " " " " " "%" %" %" %" %" %" %" %"V&" &" &" &" &" &" &" &"R	 	 	 	 	? 	 	 	    6              6   " " " " "6 " " "    V   " " " " "f " " "" " " " "& " " "0" " " " "f " " "" " " " "F " " "* !6  " " " " "f " " ""	 	 	 	 	F 	 	 	" " " " "V " " "+
 +
 +
 +
 +
 +
 +
 +
`HzH zH w	H
 H !H !H ~H ~H ~H #H ^H .H xH  !H" C#H$ y%H& w'H H( })H* y+H,  -H. w/H0 .1H2 3H4 %5H6 !7H8 &9H: *;H< #=H> ?H@ )AHB -CHD !EHF $GHH GIH H HJ HKHL MMHN 'OHP &QHR %SHT &UHV MWHX AYHZ 3[H\ >]H^ =_H` 8aHb 4cHd AeHf >gHh 4iHj (kH H Hl 6mHn 0oHp >qHr 8sHt 3uHv 5wHx 5yHz B{H| 6}H~ .H@ 5AHB ,CHD (EHF ,GHH *IHJ KHL .MH HN 8OH H\ !!(  & 

 



 d d d d dv d d dT    v    6 E E E E    f   0 =t L L L L7 7 7 7 7f 7 7 7 5t D D D D> > > > >V > > > <d K K K K" " " " "6 " " " M	)	
/)	
 -)	
 .	)	

 .)	
 .)	
 ))	
 .)	
 +)	
 %)	
 $)	
 $)	
 #)	
 $)	
  #!)	
" $#)	
$ *%)	
& (')	
 )	
( .))	
* ,+)	
, +-)	
. $/)	
0 /1)	
2 (3)	
4 /5)	
6 (7)	
8 %9)	
: ,;)	
> (?)	
@ ,A)	
B $C)	
D $E)	
F #G)	
J #K)	
L "M)	
 )	
N '$Q)	
 )	
 )	
- -\ 
8Q	
 	
	 	   K++  %$Wc?U?UVVV   K:P:PQQQ55
 $OGR1U0F0FH H H55+8 Wc!444;	
 	
>	
 	
A# #H fa"
 "
 	 	
	
 	
  fa"
 "
 	 	
	
 	
 Wy4 $ 0z" " " " "V " " ""        ? N N N N@ @ @ @ @v @ @ @ > M M M M    v    FPT U U U U    f    Et T T T T7 7 7 7 7V 7 7 7 4d C C C C> > > > >F > > >
 ;T J J J J    f    =t L L L L5 5 5 5 5v 5 5 5 > M M M M< < < < <V < < < Dd S S S S
. . . . .+= . . .h    &    A4 P P P P
7 7 7 7 7 7 7 7 ? N N N N
/ / / / / / / /08 8 8 8 8, 8 8 8|       6' ' ' ' ' ' ' 'Z    F       f   (%" %" %" %" %"f %" %" %"R Z&'
JNN N NJ J J J J
 J J Jg3 g3 g3 g3 g3& g3 g3 g3TA A A A AF A A A8
 
 
 
 
- 
 
 
 k.a 8 8 8 8
" " " " "f " " "((
 (
 (
 (
 (
1C (
 (
 (
\       2	" 	" 	" 	" 	"V 	" 	" 	"8
 8
 8
 8
 8
m5G 8
 8
 8
v #   " " " " "& " " "6 ?V   " " " " "6 " " ", "$@f U U U U
" " " " "F " " "< "$Av V V V V
" " " " " " " " =6   " " " " "& " " "" "$?V T T T T
" " " " "v " " "4 <&   " " " " " " " ", "$=6 R R R R
T T T T T}6H T T Tn $
	   #
 #
 #
 #
 #
0B #
 #
 #
L    8
 8
 8
 8
 8
-1C 8
 8
 8
v 
	       -           =     
	   $
 $
 $
 $
 $
/A $
 $
 $
N    + + + + + + + +\ k5vQ O O O O
    =    k7 H H H H
    M    k8&PQ R R R R" " " " "& " " "    &              6          4    F       V   "           6       v       &                     6       F       f       &       v   f
 f
 f
 f
 f
, f
 f
 f
X #
 
'
#
#  k
 k
 k
 k
 k
-); k
 k
 k
\ k. ? ? ? ?1
 1
 1
 1
 1
=*< 1
 1
 1
h k/q I I I I
           3 3 3 3 3- 3 3 3 
	   >
 >
 >
 >
 >
'9 >
 >
 >
B    %
 %
 %
 %
 %
(: %
 %
 %
P 
	   <
 <
 <
 <
 <
(: <
 <
 <
~    
 
 
 
 
- 
 
 
 k.a H H H H
                   
	       -              ! ! ! ! ! ! ! !I
 I
 I
 I
 I
(: I
 I
 I
X    " " " " "v " " "@" " " " "V " " ",           &   	 	 	 	 	f 	 	 	    F   $    v   (! ! ! ! !. ! ! !.
 .
 .
 .
 .
-); .
 .
 .
b 
	   '
 '
 '
 '
 '
=2D '
 '
 '
T     
 
 
 
 
M3E 
 
 
D !
	   # # # # # # # #L    $
 $
 $
 $
 $
-1C $
 $
 $
N 
	              F   B 
"
 
	  -,++,0,-	 	 D
 D
 D
 D
 D
m-? D
 D
 D
N    
 
 
 
 
}.@ 
 
 
D 
	   E
 E
 E
 E
 E
M+= E
 E
 E
P        ]    
	          *    f   " " " " "6 " " "67 7 7 7 7l 7 7 7t    o       &       &   , , , , , , , ,^3 3 3 3 3v 3 3 3t *3	: 	: 	: 	:$6 $6 $6 $6 $6l $6 $6 $6Ne e e e e e e e e erV  