
    h%                     *   d Z ddlZddlmZ ddlmZmZmZ ddl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! ddl"m#Z#m$Z$ ddl%m&Z& dd	l'm(Z( dd
l)m*Z* 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/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNi dOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpi dqdrdsdtdudvdwdxdydzd{d|d}d~dd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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dddddddd dZ+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/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDi dEdFdGdHdId(dJd*dKd,dLd.dMd0dNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dai dbdcdddedfdg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dddddddd d$d"dbddddʐddddZ,dddddZ-dddddZ.dddddZ/dddZ0dddZ1dddddddddZ2dddddddddZ3dddddZ4 ed           ed           ed           ed          dZ5 G d de          Z6 G d de          Z7 G d de7          Z8 G d de7          Z9 G dÄ de7          Z: G dń de7          Z; G dǄ de7          Z< G dɄ de7          Z=g dˢZ> G d̄ de          Z? ee:e?dΐϦ            ee?e	j@                    G dЄ de          ZA G d҄ de7          ZB G dԄ de7          ZC G dք de7          ZD G d؄ de7          ZE G dڄ de7          ZF G d܄ de7          ZG G dބ de7          ZH G d d8e7          ZI G d de7          ZJ G d de          ZK G d de          ZL G d d:e7          ZM G d de7          ZN G d de7          ZO G d de7          ZP G d dre7          ZQ G d d~e7          ZR G d de7          ZS G d de7          ZT G d de7          ZUeQeSeReOePeUeTdZVd ZW G d dde7          ZX G d de          ZY G d de          ZZ G d de          Z[ G d d>e7          Z\ddiZ]dddZ^ G d d<e7          Z_ G d  de7          Z` G d de          Za G d dea          Zb G d dea          Zc G d dea          Zd G d dea          Zed	d
dddZfefg                    d  ehdd'          D                        efg                    d  ehd'd          D                        efg                    d  ehdd          D                         G d dea          Zi G d dea          Zj G d dea          ZkecececebedeeejejejeiekdZld Zm G d de7          Zn G d den          Zo G d den          Zpd d!d"d#d$d%d&Zqeqg                    d'  ehd(d          D                        dd)d*d+Zrerg                    d,  ehd-d          D                         G d. d/e          Zs G d0 d1e          Zt G d2 d3e          Zui d4eDd5eEd6eFd7eGd8eHd9eId:eMd;e_d<e\d=e8d>e8d?e8d@e8dAe8dBe8dCe8dDe8eXeJeNe`e9e9e9e9e9e9e9e9dEZvdF ZwdG Zx G dH dIe          Zy G dJ dKe          Zz e$j{        ez            G dL dMe          Z| e$j{        e|           dS (N  z
PNIO RPC endpoints
    N)UUID)PacketRawbind_layers)conf)BitField	ByteFieldBitEnumFieldByteEnumFieldConditionalFieldFieldLenFieldFieldListFieldIntFieldIntEnumFieldLenFieldMACFieldPadFieldPacketFieldPacketListFieldShortEnumField
ShortFieldStrFixedLenFieldStrLenField	UUIDField
XByteField	XIntFieldXShortEnumFieldXShortField)DceRpc4DceRpc4Payload)EField)	bytes_hex)RandUUID   AlarmNotification_High   AlarmNotification_Low   IODWriteReqHeader	   IODReadReqHeader   DiagnosisData   ExpectedIdentificationData   RealIdentificationData   SubsituteValue   RecordInputDataObjectElement   RecordOutputDataObjectElement   ARData   LogBookData   APIData   SRLData    zI&M0!   zI&M1"   zI&M2#   zI&M3$   zI&M40   zI&M0FilterDataSubmodule1   zI&M0FilterDataModule2   zI&M0FilterDataDevice  
ARBlockReq  IOCRBlockReq  AlarmCRBlockReq  ExpectedSubmoduleBlockReqi  PrmServerBlockReqi  MCRBlockReqi  ARRPCBlockReqi  ARVendorBlockReqi	  IRInfoBlocki
  SRInfoBlocki  
ARFSUBlock  IODBlockReq_connect_end  IODBlockReq_plug  IOXBlockReq_connect  IOXBlockReq_plug  ReleaseBlockReq  IOXBlockReq_companion  IOXBlockReq_rt_class_3  IODBlockReq_connect_begini  SubmoduleListBlocki   PDPortDataChecki  PdevData  PDPortDataAdjusti  
PDSyncDatai  IsochronousModeDatai  PDIRDatai  PDIRGlobalDatai  PDIRFrameDatai  PDIRBeginEndData	  AdjustDomainBoundaryi
  SubBlock_check_Peersi  SubBlock_check_LineDelayi  SubBlock_check_MAUType  AdjustMAUTypei  PDPortDataReal  AdjustMulticastBoundaryi  PDInterfaceMrpDataAdjusti  PDInterfaceMrpDataReali  PDInterfaceMrpDataChecki  PDPortMrpDataAdjusti  PDPortMrpDataReali  MrpManagerParamsi  MrpClientParamsi  MrpRingStateData  AdjustLinkStatei  CheckLinkStatei  CheckSyncDifferencei  CheckMAUTypeDifferencei   PDPortFODataReali!  FiberOpticManufacturerSpecifici"  PDPortFODataAdjusti#  PDPortFODataCheck$  AdjustPeerToPeerBoundary%  AdjustDCPBoundaryi&  AdjustPreambleLengthi(  FiberOpticDiagnosisInfoi*  PDIRSubframeDatai+  SubframeBlocki-  
PDTimeDatai0  PDNCDataChecki1  MrpInstanceDataAdjustBlocki2  MrpInstanceDataRealBlocki3  MrpInstanceDataCheckBlocki@  PDInterfaceDataRealiP  PDInterfaceAdjustiQ  PDPortStatistici   MultipleBlockHeaderi  COContainerContenti   RecordDataReadQueryi   FSHelloBlocki  FSParameterBlocki  PDInterfaceFSUDataAdjusti	  ARFSUDataAdjusti   AutoConfigurationi  AutoConfigurationCommunicationi  AutoConfigurationConfigurationi  AutoConfigurationIsochronousi 
  UploadBLOBQueryi
  
UploadBLOBi
  NestedDiagnosisInfoi   MaintenanceItemi  UploadRecordi  iParameterItemi  RetrieveRecordi  RetrieveAllRecordi  AlarmAckHigh  AlarmAckLow  IODWriteResHeader	  IODReadResHeader  
ARBlockRes  IOCRBlockRes  AlarmCRBlockResi  ModuleDiffBlocki  PrmServerBlockResi  ARServerBlockResi  ARRPCBlockResi  ARVendorBlockResIODBlockRes_connect_endIODBlockRes_plugIOXBlockRes_connectIOXBlockRes_plugReleaseBlockResIOXBlockRes_companionIOXBlockRes_rt_class_3IODBlockRes_connect_begin)  i  i  i  i  i  i  i     "ExpectedIdentificationData_subslotRealIdentificationData_subsloti
  Diagnosis_channel_subsloti  Diagnosis_all_subsloti  Diagnosis_Maintenance_subsloti  'Maintenance_required_in_channel_subsloti  'Maintenance_demanded_in_channel_subsloti  ,Maintenance_required_in_all_channels_subsloti  ,Maintenance_demanded_in_all_channels_subsloti  SubstitueValue_subsloti   PDIRSubframeData_subsloti(  $RecordInputDataObjectElement_subsloti)  %RecordOutputDataObjectElement_subsloti*  PDPortDataReal_subsloti+  PDPortDataCheck_subsloti,  PDIRData_subsloti-  Expected_PDSyncData_subsloti/  PDPortDataAdjust_subsloti0  IsochronousModeData_subsloti1  Expected_PDTimeData_subslotiP  PDInterfaceMrpDataReal_subslotiQ  PDInterfaceMrpDataCheck_subslotiR   PDInterfaceMrpDataAdjust_subslotiS  PDPortMrpDataAdjust_subslotiT  PDPortMrpDataReal_subsloti`  PDPortFODataReal_subslotia  PDPortFODataCheck_subslotib  PDPortFODataAdjust_subslotip  PdNCDataCheck_subslotiq  PDInterfaceAdjust_subslotir  PDPortStatistic_subsloti  PDInterfaceDataReal_subsloti  !Expected_PDInterfaceFSUDataAdjusti  Energy_saving_profile_record_0i  CombinedObjectContaineri   Sequence_events_profile_record_0i  i  i  i  i     z Expect edIdentificationData_sloti  zRealId entificationData_sloti
  zDiagno sis_channel_sloti  Diagnosis_all_sloti  Diagnosis_Maintenance_sloti  $Maintenance_required_in_channel_sloti  $Maintenance_demanded_in_channel_sloti  )Maintenance_required_in_all_channels_sloti  )Maintenance_demanded_in_all_channels_sloti   ExpectedIdentificationData_ARi  RealIdentificationData_ARi  ModuleDiffBlock_ARi
  Diagnosis_channel_ARi  Diagnosis_all_ARi  Diagnosis_Maintenance_ARi  "Maintenance_required_in_channel_ARi  "Maintenance_demanded_in_channel_ARi  'Maintenance_required_in_all_channels_ARi  'Maintenance_demanded_in_all_channels_AR@  WriteMultipleiP  ARFSUDataAdjust_ARi   RealIdentificationData_APIi
  Diagnosis_channel_APIi  Diagnosis_all_APIi  Diagnosis_Maintenance_APIi  #Maintenance_required_in_channel_APIi  #Maintenance_demanded_in_channel_API(Maintenance_required_in_all_channels_API(Maintenance_demanded_in_all_channels_API
ARData_APIDiagnosis_Maintenance_devicezI&M0FilterData
PDRealDataPDExpectedData
GSD_uploadNested_Diagnosis_infoTrigger_index_CMSM)i  i  i   i  i   i!  i0  i1  i@  iA  iB  iP  i`  ia  i  IOCARSingleIOSARIOCARSingle_RT_CLASS_3IOCARSR)r$      r,   r@   InputCROutputCRMulticastProviderCRMulticastConsumerCR)r$   r&         
RT_CLASS_1
RT_CLASS_2
RT_CLASS_3RT_CLASS_UDPRadioz1000-BaseT-FD)r      NonezPolymeric-Optical-Fiber)r      ReservedUpDownTestingUnknownDormant
NotPresentLowerLayerDown)r   r$   r&   r  r     r     zDisabled/DiscardingBlocking	ListeningLearning
ForwardingBrokenzCopper cablezFiber optic cablezRadio communication)r   r$   r&   r  z$dea00001-6c97-11d1-8271-00a02442df7dz$dea00002-6c97-11d1-8271-00a02442df7dz$dea00003-6c97-11d1-8271-00a02442df7dz$dea00004-6c97-11d1-8271-00a02442df7d)UUID_IO_DeviceInterfaceUUID_IO_ControllerInterfaceUUID_IO_SupervisorInterface UUID_IO_ParameterServerInterfacec                   v    e Zd ZdZ edde           edd           edd           edd          gZd	 Z	dS )
BlockHeaderz2Abstract packet to centralize block headers fields
block_typeNblock_lengthblock_version_highr$   block_version_lowr   c                     t                      NNotImplementedErrorclsnamebasesdcts       Z/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/pnio_rpc.py__new__zBlockHeader.__new__N      !###    )
__name__
__module____qualname____doc__r   BLOCK_TYPES_ENUMr   r	   fields_descrI   rK  rH  r:  r:  E  sq        <<|T+;<<
>4((	&**	%q))	K$ $ $ $ $rK  r:  c                   J    e Zd ZdZe eddd           gZdZd Zd Z	d	 Z
d
S )Blockz#A generic block packet for PNIO RPCload c                     | j         dz
  S )Nr&   r<  pkts    rH  <lambda>zBlock.<lambda>V  s    8H18L rK  length_fromr   c                     | j         =t          |          dz
  }|d d         t          j        d|          z   |dd          z   }t	          j        | ||          S )Nr  r&   !H)r<  lenstructpackr   
post_build)selfppaylengths       rH  rc  zBlock.post_build[  sZ    $VVaZF"1"D&111AabbE9A q#...rK  c                 R    |                                  }|d |         ||d          fS r@  )payload_length)rd  srg  s      rH  extract_paddingzBlock.extract_paddingd  s0     $$&&&z1VWW:%%rK  c                     dS )zK A function for each block, to determine the length of
        the payload r   rR  rd  s    rH  ri  zBlock.payload_lengthj  s	     qrK  N)rL  rM  rN  rO  r:  r   rQ  r;  rc  rk  ri  rR  rK  rH  rT  rT  R  sp        --FB,L,LMMMK
 J/ / /& & &    rK  rT  c                   V   e Zd ZdZe eddd           edd           edd	           ed
d	           e	dd	d           e	dd	d           e	dd	d           e	dd	d           e	dd	d           e	dd	d           e	dd	d           e	dd	d           edd	          gZ
d Zd ZdS )IODControlReqzIODControl request blockpaddingrV  r&   rg  ARUUIDN
SessionKeyr   AlarmSequenceNumberControlCommand_reservedr*   ControlCommand_PrmBeginr$   !ControlCommand_ReadyForRT_CLASS_3 ControlCommand_ReadyForCompanionControlCommand_DoneControlCommand_ReleaseControlCommand_ApplicationReadyControlCommand_PrmEndControlBlockPropertiesc                    | j         H| j        r"t          j        dd          |dd          z   }n| j        r!t          j        dd          |dd          z   }n| j        r!t          j        dd          |dd          z   }n| j        r!t          j        dd          |dd          z   }n| j        rM| j        dk    r!t          j        dd          |dd          z   }ntt          j        dd	          |dd          z   }nS| j	        rL| j        dk    r!t          j        dd
          |dd          z   }n t          j        dd          |dd          z   }t                              | ||          S )Nr_  re   r&   rc   ra   r_   r   r]   r[   rY   rW   )r;  rv  ra  rb  rw  rx  rz  r{  rt  r|  rT  rc  rd  re  rf  s      rH  rc  zIODControlReq.post_build  s~   ?"+ :Kf--!""57 :Kf--!""56 :Kf--!""5, :Kf--!""55 	:+a//D&11AabbE9AAD&11AabbE9AA+ :+a//D&11AabbE9AAD&11AabbE9Aa---rK  c                     t                      }dD ]+}|                    ||                     |                     ,| j        dz   |_        |S )Generate the response block of this request.
        Careful: it only sets the fields which can be set from the request
        )rr  rs  rt  r   )IODControlRessetfieldvalgetfieldvalr;  rd  resfields      rH  get_responsezIODControlReq.get_response  sT     ooD 	< 	<EOOE4#3#3E#:#:;;;;61
rK  )rL  rM  rN  rO  r:  r   r   r   r   r   rQ  rc  r  rR  rK  rH  ro  ro  r  s%       ""Bq111	(D!!
<##)1--*Aq11*Aq114a;;3Q::&1--)1a002Aq99(!Q//,a00K$. . ..	 	 	 	 	rK  ro  c                   N   e Zd ZdZe eddd           edd           edd	           ed
d	           e	dd	d           e	dd	d           e	dd	d           e	dd	d           e	ddd           e	dd	d           e	dd	d           e	dd	d           edd	          gZ
dZdS )r  zIODControl response blockrp  rV  r&   rq  rr  Nrs  r   rt  ru  r*   rv  r$   rw  rx  ry  rz  r{  r|  r}  r   )rL  rM  rN  rO  r:  r   r   r   r   r   rQ  r;  rR  rK  rH  r  r    s       ##Bq111	(D!!
<##)1--*Aq11*Aq114a;;3Q::&1--)1a002Aq99(!Q//,a00K& JJJrK  r  c                       e Zd ZdZe edd           edd           edd           edd           edd           e	d	d
d           e
dde           eddd           e	dd
d          g
ZdZd Zd ZdS )IODWriteReqzIODWrite request blockseqNumr   rr  NAPI
slotNumbersubslotNumberrp  rV  r&   rq  indexrecordDataLengthIfmt	RWPaddingr8   r(   c                     | j         S r@  r  rm  s    rH  ri  zIODWriteReq.payload_length      $$rK  c                 ~    t                      }dD ]+}|                    ||                     |                     ,|S )r  r  rr  r  r  r  r  )IODWriteResr  r  r  s      rH  r  zIODWriteReq.get_response  sH     mm0 	< 	<EOOE4#3#3E#:#:;;;;
rK  rL  rM  rN  rO  r:  r   r   r   r   r   r   IOD_WRITE_REQ_INDEXr   rQ  r;  ri  r  rR  rK  rH  r  r    s          
8Q	(D!!	%L!$$OQ''Bq111$788#Ts333b444K J% % %    rK  r  c                   6   e Zd ZdZe edd           edd           edd           edd           edd           e	d	d
d           e
dde           eddd           edd           edd           edddg           e	dd
d          gZdZdS )r  zIODWrite response blockr  r   rr  Nr  r  r  rp  rV  r&   rq  r  r  r  r  additionalValue1additionalValue2statusOKr  r,   r   )rL  rM  rN  rO  r:  r   r   r   r   r   r   r  r   r   rQ  r;  rR  rK  rH  r  r    s        !!
8Q	(D!!	%L!$$OQ''Bq111$788#Ts333&**&**Xq4&))b444K  JJJrK  r  c                       e Zd ZdZe edd           edd           edd           edd           edd           e	d	d
d           e
dde           eddd           e	dd
d          g
ZdZd Zd ZdS )
IODReadReqzIODRead request blockr  r   rr  Nr  r  r  rp  rV  r&   rq  r  r  r  r  r  r8   r*   c                     | j         S r@  r  rm  s    rH  ri  zIODReadReq.payload_length
  r  rK  c                 ~    t                      }dD ]+}|                    ||                     |                     ,|S )Nr  )
IODReadResr  r  r  s      rH  r  zIODReadReq.get_response  sF    ll0 	< 	<EOOE4#3#3E#:#:;;;;
rK  r  rR  rK  rH  r  r    s        
8Q	(D!!	%L!$$OQ''Bq111$788#Ts333b444K J% % %    rK  r  c                      e Zd ZdZe edd           edd           edd           edd           edd           e	d	d
d           e
dde           eddd           edd           edd           e	dd
d          gZdZdS )r  zIODRead response blockr  r   rr  Nr  r  r  rp  rV  r&   rq  r  r  r  r  r  r  r  r2   r   )rL  rM  rN  rO  r:  r   r   r   r   r   r   r  r   rQ  r;  rR  rK  rH  r  r    s          
8Q	(D!!	%L!$$OQ''Bq111$788#Ts333&**&**b444K JJJrK  r  )No_F_WD_Time2_No_F_iPar_CRCNo_F_WD_Time2_F_iPar_CRCF_WD_Time2_No_F_iPar_CRCF_WD_Time2_F_iPar_CRC
reserved_4
reserved_5
reserved_6
reserved_7c                      e Zd ZdZdZ eddd           eddd           edddg d	           ed
ddg d           eddd           eddd           edddg d           eddde           eddd           eddd           edd           edd           e	dd           e
d  e	dd                     e
d  edd                     edd          gZeddiiZdS ) FParametersBlockz F-Parameters configuration blockzF-Parameters BlockF_Prm_Flag1_Reserved_7r   r$   
F_CRC_SeedF_CRC_Lengthr&   )zCRC-24depreciatedzCRC-32reservedF_SIL)SIL_1SIL_2SIL_3No_SILF_Check_iParF_Check_SeqNrF_Par_Version)V1V2
reserved_2
reserved_3
F_Block_IDr  F_Prm_Flag2_ReservedF_PassivationF_Source_Add
F_Dest_Add	F_WD_Timec                 :    |                      d          dz  dk    S )Nr  r  r&   r  re  s    rH  r[  zFParametersBlock.<lambda>G      1==66>%G rK  F_WD_Time_2condfldc                 :    |                      d          dz  dk    S )Nr  r.  r$   r  r  s    rH  r[  zFParametersBlock.<lambda>J  r  rK  
F_iPar_CRC	F_Par_CRCr  r%  N)rL  rM  rN  rO  rE  r   r
   F_PARAMETERS_BLOCK_IDr   r   r   r   rQ  r  overload_fieldsrR  rK  rH  r  r  /  s       **D 	)1a00q!$$^QDDD	F 	FWa$I$I$IJJA&&!Q'' 	_a===	? 	?\1a)>??'A..!Q''NA&&L!$$
;""GG
=!,,	. 	. 	. 	GG	,**	, 	, 	, 	K##5K: 	U
OOOrK  r  r%  )r  c                       e Zd ZdZd ZdS )PadFieldWithLenz<PadField which handles the i2len function to include paddingc                 j    | j                             ||          }||                     ||          z   S )z9get the length of the field, including the padding length)r  i2lenpadlen)rd  rZ  valfld_lens       rH  r  zPadFieldWithLen.i2len]  s0    (..c**Wc2222rK  N)rL  rM  rN  rO  r  rR  rK  rH  r  r  Z  s)        FF3 3 3 3 3rK  r  c                   V   e Zd ZdZe edd           edd           edd           edd	           ed
d	           e	ddd           e
dde           edddd           e	ddd           edg  e edde          d          d           gZdZdZdZd	Zd	Zd Zd ZdS )IODWriteMultipleReqzIODWriteMultiple requestr  r   rr  Nr      r    r  rp  rV  r&   rq  r  r  r  blocksr  	length_ofr  r8   r  c                     | j         S r@  r  rY  s    rH  r[  zIODWriteMultipleReq.<lambda>r  	    s/C rK  r\  r(   r  c                 ,   | j         +|d d         t          j        dd          z   |dd          z   }|                     d          \  }}|                    | |          dk    rt          |d                   }|j                            ||           }|dk    re|d |          }| j        St          j	        d|d	d
                   d         }||z  }|d d	         t          j        d|          z   |d
d          z   }t          j        | ||          S )Nr&   r_  <   r  r  r   z!IrD   (   )r<  ra  rb  getfield_and_vali2countr`  r  r  r  unpackr   rc  )rd  re  rf  r  r  rg  pads          rH  rc  zIODWriteMultipleReq.post_build{  s    $"1"D"---!""5A ((22S;;tS!!A%%R\\F)""6400CQwweteH(0 -a2h77:C3JC#2#T3!7!77!BCC&@A q#...rK  c                 ,   t                      }dD ]+}|                    ||                     |                     ,g }|                     d          D ])}|                    |                                           *|                    d|           |S )r  r  r  )IODWriteMultipleResr  r  appendr  )rd  r  r  
res_blocksblocks        rH  r  z IODWriteMultipleReq.get_response  s     "##0 	< 	<EOOE4#3#3E#:#:;;;; 
%%h// 	4 	4Ee00223333*---
rK  )rL  rM  rN  rO  r:  r   r   r   r   r   r   r  r   r   r  r   r  rQ  r;  r  r  r  r  rc  r  rR  rK  rH  r  r  c  s9       ""
8Q	(D!!	%$$L&))OV,,Bq111$788($C8LLLb444x&{{2t['I'I1MM#C#C	E 	E 	EK  JE
CJM/ / /*    rK  r  c                   v   e Zd ZdZe edd           edd           edd           edd	           ed
d	           e	ddd           e
dde           edddd           edd           edd           edddg           e	ddd           edg  edde          d           gZdZdZd ZdS )r  zIODWriteMultiple responser  r   rr  Nr  r  r  r  r  rp  rV  r&   rq  r  r  r  r  r  r  r  r  r  r  r,   c                     | j         S r@  r  rY  s    rH  r[  zIODWriteMultipleRes.<lambda>  r  rK  r\  r   r  c                     | j         +|d d         t          j        dd          z   |dd          z   }t          j        | ||          S )Nr&   r_  r  r  )r<  ra  rb  r   rc  r  s      rH  rc  zIODWriteMultipleRes.post_build  sM     $"1"D"---!""5A q#...rK  )rL  rM  rN  rO  r:  r   r   r   r   r   r   r  r   r   r   r   r  rQ  r;  r  rc  rR  rK  rH  r  r    sA       ##
8Q	(D!!	%$$L&))OV,,Bq111$788($C8LLL&**&**Xq4&))b444x[[T;%G%G#C#C	E 	E 	EK$ JE/ / / / /rK  r  c                   r   e Zd ZdZe edd           edd           eddd           ed	dd
           edd           eddd           edd           edd           edd           edd           edd           edd           edd           edd           edd          gZdZ	dS )IM0Blockz Identification and Maintenance 0VendorIDHighr   VendorIDLowOrderIDrV  r2   rq  IMSerialNumberr,   IMHardwareRevisionIMSWRevisionPrefixVr$   !IMSWRevisionFunctionalEnhancementIMSWRevisionBugFixIMSWRevisionInternalChangeIMRevisionCounterIMProfileIDIMProfileSpecificTypeIMVersionMajorIMVersionMinorIMSupportedr@   N)
rL  rM  rN  rO  r:  r	   r   r   rQ  r;  rR  rK  rH  r  r    s"       **	.$''	-&&Br222)2b999
'++-s1===	5q99	&**	.22
&**
=!$$
*A..	"A&&	"A&&
=#&&!K& JJJrK  r  c                   P    e Zd ZdZe eddd           eddd          gZdZd	S )
IM1Blockz Identification and Maintenance 1IMTagFunctionrV  r@   rq  IMTagLocationr6   rA   NrL  rM  rN  rO  r:  r   rQ  r;  rR  rK  rH  r
  r
    sO        **"R888"R888K JJJrK  r
  c                   6    e Zd ZdZe eddd          gZdZdS )IM2Blockz Identification and Maintenance 2IMDaterV  r,   rq  rB   Nr  rR  rK  rH  r  r    s:        **2b111K
 JJJrK  r  c                   6    e Zd ZdZe eddd          gZdZdS )IM3Blockz Identification and Maintenance 3IMDescriptorrV  6   rq  rC   Nr  rR  rK  rH  r  r    s:        **B777K
 JJJrK  r  c                   4    e Zd ZdZe eddd          gZdZdS )IM4Blockz Identification and Maintenance 4IMSignaturerV  r  rD   Nr  rR  rK  rH  r  r    s7        **B//K
 JJJrK  r  c                      e Zd ZdZe edde           edd           edd           e	dd           ed	d           e
d
dd           edddddg           e
ddd           e
ddd           e
ddd           edddg d           edddddg           e
ddd           edddddg           e
ddd           eddddd i           ed!d"           ed#d$           ed%dd&d'(           ed'd)d* +          gZd,Zd- ZdS ).rI   z&Application relationship block requestARTyper$   rr  Nrs  r   CMInitiatorMacAddCMInitiatorObjectUUID#ARProperties_PullModuleAlarmAllowedARProperties_StartupModeLegacyAdvancedARProperties_reserved_3r  ARProperties_reserved_2   #ARProperties_AcknowledgeCompanionARARProperties_CompanionARr&   )	Single_ARFirst_ARCompanion_ARr  ARProperties_DeviceAccessExpectedSubmoduleControlled_by_IO_device_appARProperties_reserved_1r  "ARProperties_ParametrizationServerExternal_PrmServerCM_Initator&ARProperties_SupervisorTakeoverAllowedARProperties_StateActive CMInitiatorActivityTimeoutFactori  CMInitiatorUDPRTPort针  StationNameLengthHCMInitiatorStationNamer  rV  c                     | j         S r@  )r5  rY  s    rH  r[  zARBlockReq.<lambda>&  s	    C,A rK  r\  rH   c                 ~    t                      }dD ]+}|                    ||                     |                     ,|S )r  )r  rr  rs  )r   r  r  r  s      rH  r  zARBlockReq.get_response+  sF     ll7 	< 	<EOOE4#3#3E#:#:;;;;
rK  )rL  rM  rN  rO  r:  r   AR_TYPEr   r   r   r   r
   r   r   rQ  r;  r  rR  rK  rH  rI   rI     s       00!W--	(D!!
<##$d++	)40061==/A
+	- 	-*Aq11*Ar2261==/AJJJ	L 	L0!Q)+HI	K 	K*Aq1191a*M:	< 	<91a@@)1a!X??
5t<<
)622)4S 8	: 	: 	:,b A A	C 	C 	C7K> J    rK  c            	           e Zd ZdZe edde           edd           edd           e	dd           ed	d
          gZ
dZdS )r   z'Application relationship block responser  r$   rr  Nrs  r   CMResponderMacAddCMResponderUDPRTPortr4  r   )rL  rM  rN  rO  r:  r   r:  r   r   r   rQ  r;  rR  rK  rH  r   r   5  st        11!W--	(D!!
<##$d++
)622K JJJrK  c                   b    e Zd ZdZdZ edd           edd           edd          gZd ZdS )	IOCRAPIObjectz:API item descriptor used in API description of IOCR blockszAPI item
SlotNumberr   SubslotNumberFrameOffsetc                 
    d |fS r@  rR  rd  rj  s     rH  rk  zIOCRAPIObject.extract_paddingM      QwrK  N)	rL  rM  rN  rO  rE  r   r   rQ  rk  rR  rK  rH  r?  r?  D  sb        DDDL!$$OQ''
=!$$K    rK  r?  c            
           e Zd ZdZdZ edd           eddd           edg ed 	           ed
dd           edg ed 	          gZ	d Z
dS )IOCRAPIz"API description used in IOCR blockr  r   NumberOfIODataObjectsNIODataObjects)count_ofc                     | j         S r@  )rH  r  s    rH  r[  zIOCRAPI.<lambda>Y  s	    Q-D rK  
count_fromNumberOfIOCSIOCSsc                     | j         S r@  )rN  r  s    rH  r[  zIOCRAPI.<lambda>]      Q^ rK  c                 
    d |fS r@  rR  rD  s     rH  rk  zIOCRAPI.extract_padding`  rE  rK  )rL  rM  rN  rO  rE  r   r   r   r?  rQ  rk  rR  rK  rH  rG  rG  Q  s        ,,D	%-t.	0 	0 	0]#D#D	F 	F 	Fnd&	( 	( 	(]#;#;	= 	= 	=
K    rK  rG  c                   ,   e Zd ZdZe edde           edd           edd           eddd	           ed
dd           eddd           e	ddde
           edd           edd           edd           edd           edd           edd           edd           edd           edd           e	ddd dd!i           ed"dd           ed#dd$           ed%d&           ed'd&d(d)*           ed)g ed+ ,          gZd-Zd. Zd&S )/rK   z(IO Connection Relationship block requestIOCRTyper$   IOCRReferenceLTr4  IOCRProperties_reserved3r   r(   IOCRProperties_reserved2   IOCRProperties_reserved1r*   IOCRProperties_RTClassr  
DataLengthr  FrameIDr   SendClockFactorr@   ReductionRatioPhaseSequenceFrameSendOffsetr  WatchdogFactor
   DataHoldFactorIOCRTagHeader_IOUserPriorityr  r  IOCRPriorityIOCRTagHeader_reservedIOCRTagHeader_IOCRVLANIDr"  IOCRMulticastMACAddNNumberOfAPIsr6  APIsr  rJ  c                     | j         S r@  rk  r  s    rH  r[  zIOCRBlockReq.<lambda>  rQ  rK  rL  rJ   c                 ~    t                      }dD ]+}|                    ||                     |                     ,|S )r  )rT  rU  r]  )r   r  r  r  s      rH  r  zIOCRBlockReq.get_response  sF     nn= 	< 	<EOOE4#3#3E#:#:;;;;
rK  )rL  rM  rN  rO  r:  r   	IOCR_TYPEr   r   r
   IOCR_BLOCK_REQ_IOCR_PROPERTIESr   r   r   r   r   rG  rQ  r;  r  rR  rK  rH  rK   rK   d  s       22
Ay11OQ''D&!!+Q22+Q33+Q22-q!3	5 	5
<$$Iv&&
$b))
#R((
7A
:q!!	#Z00
#R((
#R((3Q(	* 	*)1a00+Q33&--ndfEEEG#;#;	= 	= 	=7K> J    rK  c                   `    e Zd ZdZe edde           edd           edd          gZdZ	dS )	r   z)IO Connection Relationship block responserT  r$   rU  r]  r   r   N)
rL  rM  rN  rO  r:  r   rq  r   rQ  r;  rR  rK  rH  r   r     sT        33
Ay11OQ''Iv&&	K JJJrK  c                   `    e Zd Ze eddd           edde           edd          gZdZ	d	S )
r   rp  rV  r&   rq  	LinkStater   AdjustPropertiesr   N)
rL  rM  rN  r:  r   r   LINKSTATE_LINKr   rQ  r;  rR  rK  rH  r   r     sU        Bq111Q77
%q))	K JJJrK  c            
           e Zd Ze eddd           edd           edd           e edd          d          gZd	Z	d
S )r   padding1rV  r&   rq  peerToPeerBoundaryr   adjustPropertiespadding2r   N
rL  rM  rN  r:  r   r   r   r   rQ  r;  rR  rK  rH  r   r     so        R222%q))
%q))J**A..K JJJrK  c                       e Zd Ze eddd           eddddd	           ed
dddd	           edd           e edd          d          gZdZ	dS )rs   ry  rV  r&   rq  DomainBoundaryIngressr   zNo BlockrT  r   r$   DomainBoundaryEgressr{  r|  rr   N)
rL  rM  rN  r:  r   r   r   r   rQ  r;  rR  rK  rH  rs   rs     s        R222,a2
 2
 	 	 	+Q1
 1
 	 	 	
%q))J**A..K JJJrK  c            
           e Zd Ze eddd           edd           edd           e edd          d          gZd	Z	d
S )r{   ry  rV  r&   rq  MulticastAddressr   r{  r|  rz   Nr}  rR  rK  rH  r{   r{     so        R222#Q''
%q))J**A..K JJJrK  c                   p    e Zd Ze e edd          d           edde           edd          gZdZ	dS )	AdjustMauTyperp  r   r&   MAUTyper$   r{  rw   N)
rL  rM  rN  r:  r   r   r   MAU_TYPErQ  r;  rR  rK  rH  r  r    s[        Iq))1--	1h//
%q))	K JJJrK  r  c                   p    e Zd Ze e edd          d           edde           edd          gZdZ	dS )AdjustMauTypeExtensionrp  r   r&   MAUTypeExtensionr{  )  N)
rL  rM  rN  r:  r   r   r   MAU_EXTENSIONrQ  r;  rR  rK  rH  r  r    s\        Iq))1--*A}==
%q))	K JJJrK  r  c            
           e Zd Ze eddd           edd           edd           e edd          d          gZd	Z	d
S )r   ry  rV  r&   rq  dcpBoundaryr   r{  r|  r   Nr}  rR  rK  rH  r   r     sn        R222""
%q))J**A..K JJJrK  )rr   rw   rz   r   r   r   r  c                     t           }t          j        d| d d                   d         }|t          v rt          |         } || g|R i |S )Nr_  r&   r   )rT  ra  r  PDPORT_ADJUST_BLOCK_ASSOCIATION_pktargskargsrD  btypes        rH  _guess_pdportadjust_blockr     s[    
CM$RaR))!,E///-e43t$d$$$e$$$rK  c            
       |    e Zd Ze eddd           edd           edd           edg ed	 
          gZdZ	dS )rk   rp  rV  r&   rq  r  r   r  r  c                     | j         S r@  rX  r  s    rH  r[  zPDPortDataAdjust.<lambda>  s    an rK  r\  rj   N)
rL  rM  rN  r:  r   r   r   r  rQ  r;  rR  rK  rH  rk   rk   
  ss        Bq111L!$$OQ''"&?$<$<	> 	> 	>K JJJrK  c                       e Zd ZdZdZ eddddd           edd           ed	d           ed
d          gZd Z	dS ) ExpectedSubmoduleDataDescriptionz&Description of the data of a submodulezData DescriptionDataDescriptionr   InputOutput)r$   r&   SubmoduleDataLength
LengthIOCS
LengthIOPSc                 
    d |fS r@  rR  rD  s     rH  rk  z0ExpectedSubmoduleDataDescription.extract_padding"  rE  rK  N)
rL  rM  rN  rO  rE  r   r   r	   rQ  rk  rR  rK  rH  r  r    s}        00D)1'h.G.GHH
(!,,	,""	,""	K    rK  r  c                      e Zd ZdZdZ edd           edd           edd           eddd           ed	dd
           eddd
           eddd
           eddd
           e	dddg d           e
dg ed           g
Zd ZdS )r)  z=Description of a submodule in an API of an expected submodule	SubmodulerA  r   SubmoduleIdentNumberSubmoduleProperties_reserved_2SubmoduleProperties_reserved_1r&   SubmoduleProperties_DiscardIOXSr$   3SubmoduleProperties_ReduceOutputSubmoduleDataLength2SubmoduleProperties_ReduceInputSubmoduleDataLengthSubmoduleProperties_SharedInputSubmoduleProperties_Type)NO_IOINPUTOUTPUTINPUT_OUTPUTr  c                      | j         dk    rdndS )Nr  r&   r$   )r  r  s    rH  r[  zExpectedSubmodule.<lambda>7  s    a&@A&E&E1 rK  rL  c                 
    d |fS r@  rR  rD  s     rH  rk  z!ExpectedSubmodule.extract_padding;  rE  rK  N)rL  rM  rN  rO  rE  r   r   r   r   r
   r   r  rQ  rk  rR  rK  rH  r)  r)  &  s       GGDOQ''	(!,,
3Q7711a882Aq99F1MMEq!LL2Aq99/AAAA	C 	Cr#CLL	
 	
 	
K$    rK  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d	d
           ed
g e	d           gZ
d ZdS )ExpectedSubmoduleAPIz7Description of an API in the expected submodules blocksr  r   r@  ModuleIdentNumberModulePropertiesNumberOfSubmodulesNr6  
Submodulesrm  c                     | j         S r@  )r  r  s    rH  r[  zExpectedSubmoduleAPI.<lambda>J  s	    Q-A rK  rL  c                 
    d |fS r@  rR  rD  s     rH  rk  z$ExpectedSubmoduleAPI.extract_paddingM  rE  rK  )rL  rM  rN  rO  rE  r   r   r   r   r)  rQ  rk  rR  rK  rH  r  r  ?  s        AAD	%L!$$	%q))&***Dc+	- 	- 	-b*;#A#A	C 	C 	C	K    rK  r  c                   \    e Zd ZdZe edddd           edg ed           gZd	Z	d
 Z
dS )rO   z Expected submodule block requestrk  Nr6  rl  rm  c                     | j         S r@  ro  r  s    rH  r[  z"ExpectedSubmoduleBlockReq.<lambda>W  rQ  rK  rL  rN   c                     dS )r  NrR  rm  s    rH  r  z&ExpectedSubmoduleBlockReq.get_response\  s	     trK  )rL  rM  rN  rO  r:  r   r   r  rQ  r;  r  rR  rK  rH  rO   rO   Q  sq        **ndfEEE$8#;#;	= 	= 	=K J    rK  AlarmCRRTA_CLASS_1RTA_CLASS_UDPr  c                   <   e Zd ZdZe edde           edd           eddd           e	ddde
           ed	dd
           eddd           edd           edd           edd           edd           edd           edd          gZdZd Zd ZdS )rM   zAlarm CR block requestAlarmCRTyper$   rV  r4  AlarmCRProperties_Priorityr   AlarmCRProperties_TransportAlarmCRProperties_Reserved1r6   AlarmCRProperties_Reserved2r(   RTATimeoutFactor
RTARetriesr  LocalAlarmReferenceMaxAlarmDataLength   AlarmCRTagHeaderHighr   AlarmCRTagHeaderLowi   rL   c                     | j         dk    r+|d d         t          j        dd          z   |dd          z   }t                              | ||          S )Nr$   r(   r_  i   rd  )r  ra  rb  rT  rc  r  s      rH  rc  zAlarmCRBlockReq.post_build  sS    +s22"1"D&111AbccF:Aa---rK  c                     t                      }dD ]+}|                    ||                     |                     ,| j        dz   |_        |S )r  )r  r  r   )r   r  r  r;  r  s      rH  r  zAlarmCRBlockReq.get_response  sV     ; 	< 	<EOOE4#3#3E#:#:;;;;61
rK  N)rL  rM  rN  rO  r:  r   ALARM_CR_TYPEr   r   r
   ALARM_CR_TRANSPORTrQ  r;  rc  r  rR  rK  rH  rM   rM   m  s         q-88
4  -q!442Aq:LMM.266.155
%v..
<((
(&11
'00
)622
(&11K  J. . .	 	 	 	 	rK  c                   \    e Zd Ze edde           edd           edd          gZdZdS )r   r  r$   r  r   r  r   N)	rL  rM  rN  r:  r   r  r   rQ  r;  rR  rK  rH  r   r     sP        q-88
(!,,
'++	K JJJrK  c                   F    e Zd Z edd           edde          gZd ZdS )	AlarmItemUserStructureIdentifierr   rU  rV  c                 
    d |fS r@  rR  rD  s     rH  rk  zAlarmItem.extract_padding  rE  rK  N)rL  rM  rN  r   r   r   rQ  rk  rR  rK  rH  r  r    sK        -q11FB$$K
    rK  r  c                   Z    e Zd Z edd          e eddd           edd          gZdS )	r   r  r   rp  rV  r&   rq  MaintenanceStatusNrL  rM  rN  r   r:  r   r   rQ  rR  rK  rH  r   r     sM        -q11Bq111	%q))	KKKrK  c                       e Zd Z edd           edd           edd           edd           ed  edd                     ed	  ed
d                     ed  edd                    gZdS )DiagnosisItemr  r   ChannelNumberChannelPropertiesChannelErrorTypec                 0    |                      d          dv S Nr  )r     r  r  s    rH  r[  zDiagnosisItem.<lambda>      1==)BCC H    rK  ExtChannelErrorTyper  c                 0    |                      d          dv S r  r  r  s    rH  r[  zDiagnosisItem.<lambda>  r  rK  ExtChannelAddValuec                 4    |                      d          dk    S )Nr  r  r  r  s    rH  r[  zDiagnosisItem.<lambda>  s    1==)BCCvM rK  QualifiedChannelQualifierN)rL  rM  rN  r   r   r   rQ  rR  rK  rH  r  r    s        -q11OQ'''++&**   1155	7 	7 	7 	   	.22	4 	4 	4 	MM	5q99	; 	; 	;KKKrK  r  c                   p    e Zd Z edd          e eddd           edd           edd          gZd	S )
UploadRetrievalItemr  r   rp  rV  r&   rq  URRecordIndexURRecordLengthNr  rR  rK  rH  r  r    s\        -q11Bq111	/1%%	"A&&KKKrK  r  c            
           e Zd Z edd          e eddd           edd           edd           ed	d           ed
d          gZdS )r   r  r   rp  rV  r&   rq  iPar_Req_HeaderMax_Segm_SizeTransfer_IndexTotal_iPar_SizeNr  rR  rK  rH  r   r     s|        -q11Bq111	#Q''	/1%%	"A&&	#Q''KKKrK  PE_PowerOff
PE_OperatePE_SleepModeWOLPE_ReadyToOperate)r            c                 :    i | ]}|d                      |          S )zPE_EnergySavingMode_{})format.0is     rH  
<dictcomp>r    s9     7 7 7 ! 7>>qAA 7 7 7rK  c                     i | ]}|d S r&  rR  r  s     rH  r  r        EEEaAzEEErK  r  c                     i | ]}|d S r  rR  r  s     rH  r  r    r  rK     r  c                   B    e Zd Z edd          e edde          gZdS )PE_AlarmItemr  r   PE_OperationalModeN)rL  rM  rN  r   r:  r   PE_OPERATIONAL_MODErQ  rR  rK  rH  r  r    s;        -q11*A/BCCKKKrK  r  c                   >    e Zd Z edd           edd          gZdS )RS_AlarmItemr  r   RS_AlarmInfoN)rL  rM  rN  r   rQ  rR  rK  rH  r  r    s4        -q11NA&&KKKrK  r  c            
           e Zd Z edd           edd           edd           edd           edd           eddd	 
          gZdS )PRAL_AlarmItemr  r   r  PRAL_ChannelPropertiesPRAL_ReasonPRAL_ExtReasonPRAL_ReasonAddValuerV  c                     | j         dz
  S )Nrd  )r`  )xs    rH  r[  zPRAL_AlarmItem.<lambda>  s     rK  r\  N)rL  rM  rN  r   r   rQ  rR  rK  rH  r
  r
    s        -q11OQ'',a00M1%%$a(()2 3 3	5 	5 	5KKKrK  r
  )80008002800381008200820183008301830283108320c                     t           }t          | d d                                       d          }|t          v rt          |         } || g|R i |S )Nr&   utf8)r  r"   decodePNIO_RPC_ALARM_ASSOCIATIONr  s        rH  _guess_alarm_payloadr     s`    
Cd2A2h&&v..E***(/3t$d$$$e$$$rK  c                       e Zd Ze edd           edd           edd           edd           edd           edd           edd           ed	g e          g	Z	d
S )AlarmNotificationPDU	AlarmTyper   r  r@  rA  r  SubmoduleIdentNUmberAlarmSpecifierAlarmPayloadN)
rL  rM  rN  r:  r   r   r   r   r   rQ  rR  rK  rH  r"  r"    s         	
;""	%
<##
?A&&	%q))	(!,,$a((,@AAKKKrK  r"  c                       e Zd ZdZdS )r%   r$   NrL  rM  rN  r;  rR  rK  rH  r%   r%   ,          JJJrK  c                       e Zd ZdZdS )r'   r&   Nr(  rR  rK  rH  r'   r'   0  r)  rK  RTA_TYPE_DATARTA_TYPE_NACKRTA_TYPE_ACKRTA_TYPE_ERRRTA_TYPE_FREQRTA_TYPE_FRSP)r$   r&   r  r  r.  r  c                     i | ]}|d S r  rR  r  s     rH  r  r  <  s    ???a???rK  r/  z	Version 1z	Version 2)r   r$   r&   c                     i | ]}|d S r  rR  r  s     rH  r  r  D  s    BBB1JBBBrK  r  c                       e Zd Z edd           edd           eddde           eddde           eddd           ed	d           ed
d           edd          gZ	d Z
dS )PNIORealTimeAcyclicPDUHeaderAlarmDstEndpointr   AlarmSrcEndpointPDUTypeTyper  PDUTypeVersionAddFlagsr(   
SendSeqNum	AckSeqNum
VarPartLenc                     t                      r@  rA  rC  s       rH  rI  z$PNIORealTimeAcyclicPDUHeader.__new__T  rJ  rK  N)rL  rM  rN  r   r
   PDU_TYPE_TYPEPDU_TYPE_VERSIONr   r   rQ  rI  rR  rK  rH  r4  r4  G  s         	
%q))
%q))]Aq-88%q!-=>>Q""L!$$K##L!$$
K$ $ $ $ $rK  r4  c                   ,    e Zd Ze edde          gZdS )	Alarm_LowRTA_SDUN)rL  rM  rN  r4  r   r'   rQ  rR  rK  rH  rA  rA  X  s*        $It%:;;KKKrK  rA  c                   ,    e Zd Ze edde          gZdS )
Alarm_HighrB  N)rL  rM  rN  r4  r   r%   rQ  rR  rK  rH  rD  rD  _  s*        $It%;<<KKKrK  rD  00200021002200230024010101020103010401100111011201130114011601170118)020281018102810381108111811281138114811681178118c                    t           }| d d         dk    r| dd         dk    rt          }nt          }n| d d         dk    rt          }n| d d         dk    r| dd         dk    rt          }n^t
          }nV| d d         dk    rt          }n@t          | d d                                       d	          }|t          v rt          |         } || g|R i |S )
Nr&   s    rB   rD   s   @s    	s   s   	r  )
rT  r  r  r  r  r  r  r"   r  PNIO_RPC_BLOCK_ASSOCIATIONr  s        rH  _guess_block_classrd    s    
C BQBx;2;(""%CCCC	bqb[	 	 	bqb[	 	 2;(""%CCCC	bqb[	 	  $rr(##**622...,U3C3t$d$$$e$$$rK  c                 d    	 | j         j        }n# t          $ r Y dS w xY w|dk    rdS |dk    rdS dS )z8determine the symbol for the endianness of a the DCE/RPC!r   >r$   <)
underlayerendianAttributeError)rZ  
endiannesss     rH  dce_rpc_endiannessrm    sZ    ^*

    ss	
 Qs	qsss    
c                       e Zd ZdZ e edddd          e           e edddd          e           e ed	d
          e           e edddd          e           edg e	d           gZ
d ZdS )NDRDataz@Base NDRData to centralize some fields. It can't be instantiatedargs_lengthNr  r  r  endianness_from	max_countoffsetr   actual_countc                     | j         S r@  )rp  r  s    rH  r[  zNDRData.<lambda>  s    am rK  r\  c                     t                      r@  rA  rC  s       rH  rI  zNDRData.__new__  rJ  rK  )rL  rM  rN  rO  r!   r   rm  r   r   rd  rQ  rI  rR  rK  rH  ro  ro    s       JJM-3(KKK.	0 	0 	0 	M+tIII.	0 	0 	0 	HXq!!.	0 	0 	0 	M.$C8LLL.	0 	0 	0 	"&8$;$;	= 	= 	=K"$ $ $ $ $rK  ro  c                       e Zd ZdZ e edddd          e          egZe	 e
d          ed	         d
diZed             ZdS )PNIOServiceReqPDUzPNIO PDU for RPC Requestargs_maxNr  r  r  rq  dea00000-6c97-11d1-8271-******r5  r   objectif_idptypec                 n    |j         dk    r)t          |j                                      d          rdS dS )heuristic guess_payload_classr   dea00000-6c97-11d1-8271-TFr  strr}  
startswithrD  rZ  rpcs      rH  
can_handlezPNIOServiceReqPDU.can_handle  8     9>>CJ**+EFF 4urK  )rL  rM  rN  rO  r!   r   rm  ro  rQ  r   r#   RPC_INTERFACE_UUIDr  classmethodr  rR  rK  rH  ry  ry    s        ""M*dxHHH.	0 	0 	0 		K 	h?@@'(AB
 
	O   [  rK  ry  c                       e Zd ZdZ e edddg          e          egZe	 e
d          ed         dd	iZed
             ZdS )PNIOServiceResPDUzPNIO PDU for RPC Responser  r   r  rq  r{  r6  r&   r|  c                 n    |j         dk    r)t          |j                                      d          rdS dS )r  r&   r  TFr  r  s      rH  r  zPNIOServiceResPDU.can_handle  r  rK  N)rL  rM  rN  rO  r!   r   rm  ro  rQ  r   r#   r  r  r  r  rR  rK  rH  r  r    s        ##||Ha$001	3 	3 	3K 	h?@@'-/ 
 

O   [  rK  r  )}rO  ra  uuidr   scapy.packetr   r   r   scapy.configr   scapy.fieldsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scapy.layers.dcerpcr   r    scapy.contrib.rtps.common_typesr!   scapy.compatr"   scapy.volatiler#   rP  r  r:  rq  rr  r  r  rw  LINKSTATE_PORT
MEDIA_TYPEr  r:  rT  ro  r  r  r  r  r  r  r  padding_layerr  r  r  r  r
  r  r  r  rI   r   r?  rG  rK   r   r   r   rs   r{   r  r  r   r  r  rk   r  r)  r  rO   r  r  rM   r   r  r   r  r  r   r  updateranger  r  r
  r  r   r"  r%   r'   r>  r?  r4  rA  rD  rc  rd  rm  ro  ry  register_possible_payloadr  rR  rK  rH  <module>r     s`           1 1 1 1 1 1 1 1 1 1      C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C
 8 7 7 7 7 7 7 7 2 2 2 2 2 2 " " " " " " # # # # # #@
$@
#@ @ 	@
 O@ (@ $@ @ *@ +@ H@ M@ I@ I@ F@  F!@" F#@ @$ F%@& F'@( %)@* "+@, "-@. L/@0 N1@2 3@4 '5@6 7@8 M9@: O;@< =@> M?@@ MA@B LC@D %E@ @ @F G@H !I@J K@L M@N #O@P $Q@R 'S@T  U@V W@X JY@Z [@\ L]@^ !_@` Ja@b c@d Oe@f g@ @ @h "i@j "k@l &m@n $o@p Oq@r s@t %u@v &w@x $y@z %{@| !}@~ @@ A@B C@D E@F G@H I@ @ @J !K@L $M@N O@P ,Q@R  S@T U@V &W@X Y@Z "[@\ %]@^ _@` Oa@b Lc@d Oe@f (g@h &i@j 'k@ @ @l !m@n o@p q@r !s@t  u@v !w@x Ny@z {@| &}@~ @@ A@B ,C@D ,E@F *G@H I@J LK@L !M@ @ @N O@P NQ@R S@T U@V W@X NY@Z M[@\ ]@^ _@` La@b Nc@d e@f g@h i@j k@l Om@n o@ @p &!#$'@ @ @ FT
0T
,T 'T #	T
 +T 5T 5T :T :T $T &T 2T 3T $T %T  !T" )#T T$ &%T& )'T( ))T* ,+T, --T. ./T0 )1T2 '3T4 &5T6 '7T8 (9T: #;T< '=T> %?T@ )ATB /CTD ,ET T TF %GTH .ITJ FKTL FMTN FOTP FQTR FSTT .UTV *WTX %YTZ  [T\ (]T^ 2_T` 2aTb 7cTd 7eTf +gT T Th 'iTj  kTl "mTn oTp &qTr 0sTt 0uTv 5wTx 5yTz O{T|  }T~ (T@ #ATB CTD 'ETF 1GTH 1IT TJ 76*# gT T T p $	  !!	 	 
				" "    %  	 	 !	 	 


	 
  $t$JKK344344344  
$ 
$ 
$ 
$ 
$& 
$ 
$ 
$    F   @4 4 4 4 4E 4 4 4n    E   8    %   >    %   ,       6       &   # # # # #v # # #L K) 8 8 8 8 d0 1 1 13 3 3 3 3h 3 3 3; ; ; ; ;% ; ; ;|/ / / / /% / / /B    u   2    u       u       u       u   * * * * * * * *Z       
 
 
 
 
F 
 
 
    f   &* * * * *5 * * *Z	 	 	 	 	5 	 	 	    e   	 	 	 	 	u 	 	 	    5   &	 	 	 	 	e 	 	 	    E       U   	 	 	 	 	 	 	 	 !#$"# # % % %
 
 
 
 
u 
 
 
    v          2    6   $       & I
 
	  $ $ $ $ $e $ $ $N    e              i       I   (    )   	 	 	 	 	Y 	 	 	 


	      7 7%*U3%5%57 7 7 8 8 8   EE55t3D3DEEE F F F   EE55t3D3DEEE F F F    9       9   	 	 	 	 	Y 	 	 	    % % %    5       1       0   
 




    ??UU4->->??? @ @ @ 

  
   BBdD0A0ABBB C C C$ $ $ $ $6 $ $ $"              #
H# H# H	#
 H# H# J# L# O# %# M# M# M#  M!#" M##$ M%#& M'#( M)#*  E# # # L% % %>  "$ $ $ $ $f $ $ $.       : ) (): ; ; ;       : ) (): ; ; ; ; ;rK  