
    =	f                        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 d dl	 d dl
 d dlmZmZmZmZ d dlmZ ddl  ej&                  d      Z	 d dlmZ d dl d dlmZ e j<                  d    d
k(  re j<                  d   dk  reZ d Z!dZ"d
Z#dZ$dZ%dZ&dZ'dZ(dZ)d Z*dZ+dZ,d Z-dZ.d
Z/ G d de0      Z1 G d de2      Z3y# e$ r& ej9                  d	        e j:                  d       Y w xY w)    N)BytesIO)*)deviceutilspmlcodes)cups   hpmudext)cdllz;Marvell fax support requires python-ctypes module. Exiting!         	   
            i   c                       e Zd ZdddedfdZd ZddZd Zd Zd Z	 e
e	e      Zd	 Zd
 Z e
ee      Zd Zd Z	 	 	 ddZy)MarvellFaxDeviceNFc                    t         j                  | |||||       d | _        d | _        	 t	        j
                  d      }t        j                  |dz         }t        j                  j                  |      s!t        j                  j                  ||      }n|}t        j                  j                  |      }	t        j                  j                  |	      \  }
}|
dz   }t        j                  d|z         ddlm} |j#                         }|j%                         |j&                  k7  r|t        j)                  d|z         t        j+                  d       d}| j,                  j/                  ||t0        t        j2                  d	      |d
       t5        j6                  d       y t9        j:                  |      | _        y # t>        $ rA}t        j)                  d|j@                  z         t5        j6                  d       Y d }~y d }~ww xY w)Nz
hp-sendfaxz/hp-sendfaxz/fax/plugins/fax_marvell.sozLoad the library %s
r   )pluginhandlerz9Loading %s failed. Try after installing plugin libraries
zSRun "hp-plugin" to installa plugin libraries if you are not automatically prompted
USERzPlugin is not installedr
   z Loading fax_marvell failed (%s)
)!	FaxDevice__init__send_fax_threadupload_log_threadr   whichosreadlinkpathisabsjoinrealpathsplitlogdebug	installerr   PluginHandle	getStatusPLUGIN_INSTALLEDerrorinfoservice	SendEventEVENT_FAX_FAILED_MISSING_PLUGINgetenvsysexitr   LoadLibrarylibfax_marvellErrormsg)self
device_uriprinter_namecallbackfax_typedisable_dbussendfax_pathsendfax_a_pathsendfax_f_pathsendfax_abs_pathheadtaillib_namer   	pluginObjjob_ides                    "/usr/share/hplip/fax/marvellfax.pyr   zMarvellFaxDevice.__init__M   s   
 	4'#X'	)
  $!%	 ;;|4L[[m)CDN77==0$&GGLL~$N>$2>!ww//?77==)9:LT499HII-89/%224I""$(F(FF		VX``aqr&&z<A`bdbkbklrbsu{  ~W  X&*&6&6x&@# 	II9AEEABHHQKK	s   E;G &G 	H
7HHc                      y)NF )r8   s    rH   isAuthRequiredzMarvellFaxDevice.isAuthRequiredv   s        c           
      D   t         dz  } |dddddddd      }| j                  j                  |||||t        |            }t	        |      }		 t
        j                  |	j                         d       | j                  |	       |S #  t
        j                  |	d       Y -xY w)N   r       )	c_intr5   create_packetbyref
memoryviewr&   log_datatobyteswriteMarvellFax)
r8   msg_typeparam1param2statusdata_lenint_array_8i_bufresultbufs
             rH   send_packet_for_messagez(MarvellFaxDevice.send_packet_for_message~   s    aiAq!Q1a3$$228VVVU]_dej_kl	"LL+ 	S! 	"LLb!s   $B Bc                     t               }| j                  d|d      r	 | j                  d|d      r|j                         }t        j	                  d|z         t        j                  |d       |S )NrO   r   timeoutz.response_for_message (%d): response packet is
)r   readMarvellFaxgetvaluer&   r'   rT   )r8   rW   ret_bufs      rH   read_response_for_messagez*MarvellFaxDevice.read_response_for_message   so    )!!"gr!:  !!"gr!: ""$ 			ChNOWb!rL   c           
         t         j                  d|z         t               }t        dz  } |dddddddd      }t        dz  } |       }t        dz  } |       }t        j                         }	d|	d   |	d   |	d   |	d	   |	d
   |	d   fz  }t         j                  d       t         j                  |       | j                  j                  t        ddddt        |            }
| j                  j                  | j                  t        |      |t        |            }
t        |      }t        |      }t        dd      D ]=  }	 |j!                  t        |j#                         |         j%                  d             ? t        dd      D ]=  }	 |j!                  t        |j#                         |         j%                  d             ? |j'                         }t         j                  d       t         j)                  |d       | j+                  |       t               }| j-                  d|d      r	 | j-                  d|d      r|j'                         }| j/                          | j                  j1                  |      }t         j                  d|z         t         j                  d       |S #  |j!                  t        ||                Y xY w#  |j!                  ||          Y hxY w)NzK************************* setPhoneNum (%s) START **************************rN   r   4     %4d%02d%02d%02d%02d%02dr
   r         r   Date and Time string is ==>rO   utf-8z9setPhoneNum: send SET_FAX_SETTINGS message and data ===> T  r   rb   zsetPhoneNum: response is %dzD************************* setPhoneNum END **************************)r&   r'   r   rP   c_chartime	localtimer5   rQ   SET_FAX_SETTINGSrR   create_fax_settings_packetstation_namestrrS   rangewriterU   encodere   rT   rV   rd   closeMarvellFaxextract_response)r8   numset_buf	int_arrayr]   
char_arrayc_buf
date_arraydate_buftr^   msg_buf	msg_c_bufirf   responses                   rH   setPhoneNumzMarvellFaxDevice.setPhoneNum   s   		_beef)AI	!Q1aAq1c\
b[
<NN,!adAaD!A$!aPQd/SS		/0		($$223CQ1aQVW\Q]^$$??@Q@QSVWZS[]eglmrgstU#u%	q" 	/A/c'//"3A"67>>wGH	/
 q# 	-A-c)"3"3"5a"89@@IJ	- ""$		MNWc"W%)!!"gr!:  !!"gr!:""$&&77@		/(:;		XY//c'!*o.-y|,s   :J5:K5KK3c           
      n   t         dz  } |dddddddd      } |dddddddd      }t        j                  d       | j                  j	                  t
        ddddt        |            }t        |      }| j                  |       t               }| j                  d|d      r	 | j                  d|d      r|j                         }| j                          | j                  j                  |      }t        j                  d|z         | j                  j                  ||      }t               }t        dd      D ]&  }	||	   s		 |j!                  t#        ||	                ( |j                         }t        j                  d	|z         t        j                  d
       t#        |      S #  Y uxY w)NrN   r   z=******************** getPhoneNum START **********************   r   rb   zcreate_packet: response is %dr   zgetPhoneNum: ph_num_buf=%s z;******************** getPhoneNum END **********************)rP   r&   r'   r5   rQ   GET_FAX_SETTINGSrR   rS   rV   r   rd   re   r{   r|   extract_phone_numberrx   ry   rw   )
r8   r\   r]   ph_bufr^   r_   rf   r   
ph_num_bufr   s
             rH   getPhoneNumzMarvellFaxDevice.getPhoneNum   s   aiAq!Q1a3Q1aAq!4		QR$$223CQ1aQVW\Q]^S!)!!#w!;  !!#w!;""$&&77@		1H<=&&;;GVLY
q! 	Aay##Cq	N3	  ((*
		/:>?		OP:s   	F00F4c           
          t         j                  d|z         t        dz  } |dddddddd      }t               }t        dz  } |       }t        dz  } |       }t        j                         }	d|	d   |	d   |	d   |	d	   |	d
   |	d   fz  }t         j                  d       t         j                  |       | j                  j                  t        ddddt        |            }
	 | j                  j                  || j                  |t        |            }
t!        |      }t!        |      }t#        dd      D ]=  }	 |j%                  t'        |j)                         |         j+                  d             ? t#        dd      D ]=  }	 |j%                  t'        |j)                         |         j+                  d             ? |j-                         }t         j                  d       t         j/                  |d       | j1                  |       t               }| j3                  d|d      r	 | j3                  d|d      r|j-                         }| j5                          | j                  j7                  |      }t         j                  d|z         t         j                  d       |S # t        t        f$ r t         j                  d       Y w xY w#  |j%                  ||          Y xY w#  |j%                  ||          Y xY w)NzM************************* setStationName(%s) START **************************rN   r   ri   rj   rk   r
   r   rl   rm   r   rn   zUnicode ErrorrO   ro   z7setStationName: SET_FAX_SETTINGS message and data ===> rp   r   rb   zsetStationName: response is %dzG************************* setStationName END **************************)r&   r'   rP   r   rq   rr   rs   r5   rQ   rt   rR   ru   	phone_numUnicodeEncodeErrorUnicodeDecodeErrorr,   rS   rx   ry   rw   rU   rz   re   rT   rV   rd   r{   r|   )r8   namer   r]   r~   r   r   r   r   r   r^   r   r   r   rf   r   s                   rH   setStationNamezMarvellFaxDevice.setStationName   s   		adhhiAI	!Q1aAq1)c\
b[
<NN,!adAaD!A$!aPQd/SS		/0		($$223CQ1aQVW\Q]^	'((CCD$..ZbdijodpqF U#u%	q" 	*A*c'//"3A"67>>wGH	*
 q# 	,A,c)"3"3"5a"89@@IJ	,
 ""$		KLWc"W%)!!"gr!:  !!"gr!:""$&&77@		2X=>		[\A "#56 	'IIo&	'*gaj),il+s*   $1J- ;:K:K4-$KKK14Lc           
         t         dz  } |dddddddd      }t        d      }t        j                  d       | j                  j                  t        ddddt        |            }t        |      }| j                  |       t               }| j                  d|d      r	 | j                  d|d      r|j                         }| j                          | j                  j                  |      }t        j                  d|z         | j                  j                  ||      }t        j                  d	|j                   |fz         t        j                  d
       |j                   j#                  d      S )NrN   r      zI************************* getStationName START **************************r   r   rb   zgetStationName: response is %dz.getStationName: station_name=%s ; result is %dzG************************* getStationName END **************************ro   )rP   create_string_bufferr&   r'   r5   rQ   r   rR   rS   rV   r   rd   re   r{   r|   extract_station_namevaluedecode)r8   r   r]   st_bufr^   r_   rf   r   s           rH   getStationNamezMarvellFaxDevice.getStationName4  sL   AI	!Q1aAq1%c*		]^$$223CQ1aQVW\Q]^S! )!!#w!;  !!#w!; ""$&&77@		2X=>$$99'6J		BfllTZE[[\		[\||""7++rL   c           
         t         dz  } |dddddddd      }t        j                  d       t        d      }t	               }t	               }t
        dz  } |       }t        j                         }d|d   |d   |d   |d	   |d
   |d   fz  }t        j                  d       t        j                  |       | j                  j                  t        ddddt        |            }	t        |      }
t        dd      D ](  }	 |j                  |
j                         ||dz           * |j                  |j                          |j#                         }| j%                  |       | j'                  d|d      r	 | j'                  d|d      r|j#                         }| j)                          | j                  j+                  |      }t        j                  d|z         |S #  |j                  |
|          Y xY w)NrN   r   zI************************* setDateAndTime START **************************ri   rj   rk   r
   r   rl   rm   r   rn      rO   rb   zsetDateAndTime: response is %d)rP   r&   r'   r   r   rq   rr   rs   r5   rQ   rt   rR   rS   rx   ry   rU   rawre   rV   rd   r{   r|   )r8   r   r]   r   r~   rf   r   r   r   r^   r   r   r   s                rH   setDateAndTimezMarvellFaxDevice.setDateAndTime[  s   AI	!Q1aAq1		]^$S)))b[
<NN,!adAaD!A$!aPQd/SS		/0		($$223CQ1aQVW\Q]^ U#q" 	*A*goo/!A#67	* 	eii ""$W%!!"gq!9  !!"gq!9""$&&77@		2X=>*gaj)s    %G""G:c           
         t         j                  d       t        dz  } |dddddddd      }t        d      }| j                  j	                  t
        ddddt        |            }t        |      }| j                  |       t               }| j                  d|d      r	 | j                  d|d      r|j                         }| j                          | j                  j                  |      }t         j                  d|z         |S )NzM************************* getFaxDeviceState: START **************************rN   r   rO   r   rb   z!getFaxDeviceState: response is %d)r&   r'   rP   r5   rQ   REQUEST_FAX_STATUSrR   rS   rV   r   rd   re   r{   r|   )r8   r   r]   rX   r^   r_   rf   r   s           rH   getFaxDeviceStatez"MarvellFaxDevice.getFaxDeviceState  s    		abAI	!Q1aAq1q$$223Eq!QPQSXY^S_`S!)!!"gq!9  !!"gq!9""$&&77@		5@ArL   c
                     | j                         s?t        | | j                  |||||||||	      | _        | j                  j	                          yy)NTF)isSendFaxActiveMarvellFaxSendThreadr.   r   start)
r8   phone_num_listfax_file_listcover_messagecover_re
cover_funcpreserve_formattingr:   update_queueevent_queues
             rH   	sendFaxeszMarvellFaxDevice.sendFaxes  sW     ##%#7dllN\i4A8Z4G4@,4?	$AD    &&(rL   )r   r   r   r    r   NFr   NN)__name__
__module____qualname__FAX_TYPE_NONEr   rK   r`   rg   r   r   propertyr   r   r   rv   r   r   r   rJ   rL   rH   r   r   K   su    "&T'#'R&2jF k2I
5p,> NN;L(`2 SUKM15rL   r   c                       e Zd Z	 	 ddZd Zy)r   Nc                 D    t         j                  | |||||||||	|
|       y )N)FaxSendThreadr   )r8   devr.   r   r   r   r   r   r   r:   r   r   s               rH   r   zMarvellFaxSendThread.__init__  s-     	tS'>=Hj2E<	6rL   c                     d}d}d}d}d}d}d}d}d	}	d
}
d}d}
d}d}d}| j                         }d }d }|}g | _        ||k7  r| j                         rt        j	                  d       |}t        j	                  d|z         ||k(  r1t        j                  d       | j                  t        ddf       |}nt||k(  r1t        j	                  d       | j                  t        ddf       |}n>||k(  r1t        j                  d       | j                  t        ddf       |}n||k(  r1t        j                  d       | j                  t        ddf       |}n||k(  rt        j	                  ddz         |}	 	 | j                  j                          	 | j                  j                  | _        | j                  j                  | _        | j                  j'                          nD||k(  r+t        j	                  ddz         | j)                  |      }n||k(  r+t        j	                  ddz         | j+                  |      }n||k(  rt        j	                  ddz         |	}	 t-        |      }| j                  t.        d|d   f       |d   }|d   j1                  d       }t        j	                  d!|d"|       | j                  d d  | _        nT||	k(  r+t        j	                  d$dz         | j7                        }n$||
k(  r+t        j	                  d%dz         | j9                  |      }
n||k(  r1t        j	                  d&dz         t        j	                  d'       |}
n||k(  
r6t        j	                  d(dz         |}| j;                         }d}d}d)}d*}d}d}d+}d}d}d}d	} d
}!d}"d}#d}$d}%d,}&t<        }'|}(|(|k7  
r^| j                         rt        j                  d-       |}(|&r5| j?                         })|)t<        k7  rt        j                  d.|)z         |}(|}t        j	                  d/||(|'fz         |(|k(  rd,}&|$}(|}	nN|(|k(  rt        j                  d0       d,}&|$}(|}	n,|(|k(  rt        j                  d1       d,}&|$}(|}	n
|(|k(  rt        j	                  d2       d,}&|$}(|}n|(|k(  rWt        j	                  d3dz         |}(	 | j                  j                          | j                  j@                  tB        k(  r|}(n|(|k(  rTt        j	                  d3dz         |}(	 t-        |      }*|*d   | _"        t        j	                  d4| jD                  z         n3|(|k(  rt        j	                  d6dz         |}(	 t        | jD                  d7      }+	 |+jI                  tJ              },| jM                  |,      \
  }-}.}/}0}1}2}3}4}5}6|-d9k7  rt        j                  d:       |}(n t        j	                  d;|-|.|/|0|1|2|3|4fz         | j                  j?                         }7|7dk(  rt        j	                  d<       nXt        j	                  d=       |}(n?|(|k(  rRt        j	                  d>dz         |}(tO        jP                  | jD                        tR           }8|8tJ        z
  tT        /z  z
  }9t        j	                  d?|8z         t        j	                  d@|9z         | j                  jW                  tX        |9ddd      }:|:rt        j	                  dA|:z         |}(nut        j	                  dB       | j                  j[                  tX              };| j                  j\                  j_                  |;      }<|<rt        j	                  dC|<z         |}(nt        j	                  dD       n|(|k(  rnt        j	                  dEdz         | }(| j                  jW                  t`              }:|:rt        j	                  dF|:z         |}(nt        j	                  dG       nt|(| k(  rt        j	                  dHdz         |!}(tc        dI      }=te               }>d }?| j                  j\                  jg                  |?||=      }@|>ji                  |=jj                         |>jm                         }>| j                  jo                  |>       n|(|!k(  r|"}(n|(|"k(  rJt        j	                  dJdz         |#}(t<        }'te               }AtO        jP                  | jD                        tR           }8|8tJ        z
  tT        /z  z
  }Btq        |/      D ]  }C| j                         rtr        }'|'tr        k(  r n,	 +jI                  tT              },| ju                  |,      \  }D}E}F}G}H}6t        j	                  dK|D|E|F|G|Hfz         Aji                  |+jI                  |G             |+jI                  |H      }I|Ajw                  d       |G}Jd}KJdkD  r	 AjI                  tx              }LLdk(  rt        j                  dL       tr        }'n| j                         rtr        }'t        j                  dM       nKtx        z  }K	 | j                  jW                  tz        dddt}        L            }:|:rt        j	                  dN|:z         tr        }'nt        j	                  dO       | j                  jo                  L       Jtx        z
  }J|JdkD  rAj                  d       |Ajw                  d        nv|(|#k(  rt        j	                  dQdz         |$}(| j                  jW                  tz        dd|'d      }:|:r t        j	                  dR|:z         tr        }'nt        j	                  dO       | j                  j[                  t`              };| j                  j\                  j_                  |;      }<|<rt        j	                  dS|<z         tr        }'nt        j	                  dT       |'rt        j	                  dU       t        j                  dV       nS|(|$k(  rMt        j	                  dWdz         |}(| j                  jW                  t        dd|'d      }:|:rt        j	                  dX|:z         tr        }'nt        j	                  dY       | j                  j[                  t              };| j                  j\                  j_                  |;      }<|<rt        j	                  dZ|<z         tr        }'nt        j	                  d[       |'t<        k7  rt        j                  d\       |}(	 +j'                          t        j                  dV       | j                  j'                          |(|k7  r	n||k(  r}t        j	                  d]dz         | j                  rWt        j	                  d^| jD                  z         	 tO        j                  | jD                         t        j	                  d_       |}||k7  ry y # t"        $ r t        j                  d       |}Y w xY w# t"        $ r/}t        j                  d|j$                  z         |}Y d }~d }~ww xY w# | j                  j'                          w xY w# t2        $ r |}t        j	                  d#       Y w xY w# t"        $ r/}t        j                  d|j$                  z         |}(Y d }~nd }~ww xY w# t2        $ r t        j	                  d5       |}(Y w xY w# tF        $ r t        j                  d8       |}(Y w xY w# tF        $ r t        j                  d8       |}(Y w xY w# tF        $ r t        j                  d8       tr        }'Y dw xY w# tF        $ r t        j                  d8       tr        }'Y w xY w# t"        $ r t        j                  dP       tr        }'Y w xY w# t        $ r Y w xY w# t        $ r t        j	                  d`       Y w xY w)aNr   r            (   2   <   F   P   Z   d   n   x      z***** Job is Cancelled.z *************** STATE=(%d, 0, 0)zAborted by user.r   zSuccess.zError, aborting.zDevice busy, aborting.z%s State: Get sender infoz********************z*Getting station-name and phone_num failed!zUnable to open device (%s).z!%s State: Pre-render non-G3 filesz%s State: Get total page countz%s State: Next recipientr   faxasciizrecipient is z num is zLast recipient.z%s State: Render cover pagez%s State: Handle single filez%s State: Merge multiple filesz)Not merging the files for Marvell supportz%s State: Send fax      #   FzFax send aborted.zDevice is in error state=%dz&*********  FAX_SEND_STATE=(%d, %d, %d)zFax send error.zFax device busy.zFax send success.z%s State: Open devicez***** file name is : %s...zfile(s) are sent to the devicez%s State: Check idlerbzUnable to read fax file.s   hplip_g3zInvalid file header. Bad magic.zTMagic=%s Version=%d Total Pages=%d hDPI=%d vDPI=%d Size=%d Resolution=%d Encoding=%dzState: device status is zero z!State: device status is non-zero z%s State: Request startz#### file_len = %dz#### tx_data_len = %dz(Sending start fax request failed with %dz#Successfully sent start fax requestz start-fax request failed with %dzstart-fax request is successfulz%s State: Send data requestz(Sending send-data request failed with %dz"Successfully sent send-fax requestz%s State: Set paramsD   z%s State: Send pagesz%Page=%d PPR=%d RPP=%d BPP=%d Thumb=%dzNo data!zJob is cancelled. Aborting...z-Sending fax-data-block request failed with %dz(Successfully sent fax-data-block requestzChannel write error.z'%s State: Send end-of-file-data requestz,Sending fax-data-block packet failed with %dzsend-fax request failed with %dzsend-fax request is successfulz
Exiting...r
   z%s State: End the jobz)Sending end-fax-job packet failed with %dz%Successfully sent end-fax-job requestz"end-fax-job request failed with %dz!end-fax-job request is successfulz1An error occurred! setting fax_send_state to DONEz%s State: CleanupzRemoving merged file: %sRemovedz	Not found)Inext_recipient_genrendered_file_listcheck_for_cancelr&   r'   r,   write_queueSTATUS_IDLESTATUS_COMPLETEDSTATUS_ERRORSTATUS_BUSYr   openrv   sender_namer   
sender_faxr6   r7   close
pre_rendercount_pagesnextSTATUS_SENDING_TO_RECIPIENTrz   StopIterationrecipient_file_list
cover_pagesingle_filenext_file_genSUCCESSr   device_stateDEVICE_STATE_NOT_FOUNDfIOErrorreadFILE_HEADER_SIZEdecode_fax_headerr   statST_SIZEPAGE_HEADER_SIZEr`   START_FAX_JOBrg   r5   r|   SEND_FAX_JOBr   r   create_job_settings_packetry   r   re   rV   rx   FAILUREdecode_page_headerseekFAX_DATA_BLOCK_SIZEFAX_DATA_BLOCKlentruncater2   r3   END_FAX_JOB	NameErrorrr   sleepremove_temp_fileremoveOSError)Mr8   
STATE_DONESTATE_ABORTEDSTATE_SUCCESS
STATE_BUSYSTATE_READ_SENDER_INFOSTATE_PRERENDERSTATE_COUNT_PAGESSTATE_NEXT_RECIPIENTSTATE_COVER_PAGESTATE_SINGLE_FILESTATE_MERGE_FILESSTATE_SEND_FAXSTATE_CLEANUPSTATE_ERRORnext_recipientrec_namerec_numstaterG   	recipient	next_fileFAX_SEND_STATE_DONEFAX_SEND_STATE_SUCCESSFAX_SEND_STATE_ABORTFAX_SEND_STATE_ERRORFAX_SEND_STATE_BUSYFAX_SEND_STATE_DEVICE_OPENFAX_SEND_STATE_NEXT_FILEFAX_SEND_STATE_CHECK_IDLE FAX_SEND_STATE_START_JOB_REQUESTFAX_SEND_STATE_SEND_JOB_REQUESTFAX_SEND_STATE_SET_PARAMSFAX_SEND_STATE_SEND_FAX_HEADERFAX_SEND_STATE_SEND_FILE_DATAFAX_SEND_STATE_END_FILE_DATAFAX_SEND_STATE_END_JOB_REQUEST"FAX_SEND_STATE_GET_LOG_INFORMATIONmonitor_statecurrent_statefax_send_state	fax_statefax_fileffheadermagicversiontotal_pageshort_dpivert_dpi	page_size
resolutionencoding	reserved1	reserved2	dev_statefile_lentx_data_len	ret_valuerf   dev_responser   r~   no_dataret_valpagebytes_to_readppage_numpprrpp	b_to_readthumbnail_bytes	thumbnailbytes_to_write
total_readdatasM                                                                                rH   runzMarvellFaxSendThread.run  s   

!#!002&"$z!$$&		34%II85@A%		,-  +q"!56% -'		*%  "2Ar!:;% +%		,-  ,2!67% *$		23  +q"!56% 00		5@A'%0
0/3xx/D/DD,.2hh.@.@DO HHNN$ /)		=HI(9: ++		:fEF(()=> ..		4?@( $^ 4I$$&A1iPVFW%XY(0H'.55g>GIIXwOP ,0+B+B1+E( **		76BC	2 ++		8FCD((8++		:fEF		EF&.(		.&9:, ..0	&'#)+&')$')$&(#-/*+-(,.)35024/,.)13.02-/2,14.582 % '!;$(;;,,.		"56)=$$($:$:$<	$/II&Ci&OP-AN$/E IIF.ZhjwIxxy%)==(-)G -'+??		"34(-)G +'+>>		"45(-)G *'+AA		"56(-)G 4'+EE		"9V"DE)AF HHMMO
  $xx448NN1E (+CC		"9V"DE)BB(,YX&.qkTV YY'Cdff'LM (+DD		"8F"CD)I%!%dffd!3B%%'WW-=%>F JNI_I_`fIgGwXx&)Y K/II&GH-ANII&|$g{HhPY[egop'q r %)HH$>$>$@	%N99%DE99%HI,?> (+KK		";v"FG)H#%77466?7#;&.1A&AEUVaEa&b		"6"AB		"9K"GH$(HH$D$D]T_abdegh$i	$99%OR[%[\,@>99%JK%)XX%G%G%V7*.((*A*A*R*RSZ*[<*!ii(J\(YZ/Cn!ii(IJ'+JJ		"?6"JK)B$(HH$D$D\$R	$99%OR[%[\,@>99%IJ (+DD		"8F"CD)G 4R 8"))"&"&(("9"9"T"TU\^egl"meii0")"2"2"4009 (+II)F'+HH		"8F"CD)E(/&y#%77466?7#;(03C(CGWXcGc(d!&{!3 @)A#44607,7 %))+1A)B !% 7 7 ? VHc3	?I  II&M'/c9o&V'W X !JJrwwy'9:(*(@I IIaL-6N)*J#1A#5 ,*.))4G*H4 #'"*#&99Z#83:=#("&"7"7"93:=#&99-L#M#()-@@z )/3xx/O/OP^`acdfgilmqir/s9&/&)ii0_bk0k&l6=m&)ii0Z&[#'88#;#;D#A 1?AT0T~G $2A#5J !MM!, IIaLA@)F (+GG		"Kv"VW)G$(HH$D$D^UVXY[hjk$l	$99%SV_%_`+2=99%OP%)XX%G%G%U7*.((*A*A*R*RSZ*[<*!ii(IL(XY.5m!ii(HI+!ii5!hhqk (+II		"9V"DE)A$(HH$D$D[RSUVXegh$i	$99%PS\%\]+2=99%LM%)XX%G%G%T7*.((*A*A*R*RSZ*[<*!ii(L|([\.5m!ii(KL(G399%XY,?>!HHJ 

1({ %(;;@	 -'		-89((II8466AB/		$&&)		), #O z!X  % 0II&RS$/E0 ! ,		"?!%%"GH +, HHNN$4 % )EII/0|  % BII&Caee&KL-ANB  - B YY'GI.A^B  ' %II&@A-AN$%  ' %II&@A-AN$%B $+ ) #		*D E07 ()& '.  ,#&99-G#H3:=#+ ,6 ',  )#&99-C#D3:=#( )v  ) ! !  # /		+./s  :y 6x4 'Az5 { 57| |> %}% 6~~78A=""A@ 54A@ 4 yz yz 	z$$zz zz z25 {{	|%$|| |;:|;> }"!}"% ~	~	$~43~47$"$A@
@	A@
@	A@@A@@A@?@>A@?r   )r   r   r   r   rL  rJ   rL   rH   r   r     s    UZAE6A#rL   r   )4r2   r   os.pathstructrr   	threadingior   r   base.g
base.codesbaser   r   r   r   prntr	   r   
import_extr   ctypesr   ctypes.utilutilcuImportErrorr&   r,   r3   version_infobufferrS   r   r   r   GET_FAX_LOG_ENTRYr   rt   CLEAR_FAX_STATUSr   r   r   r   r   TTI_NONETTI_PREPENDED_TO_IMAGETTI_OVERLAYED_ON_IMAGEr   r   r   r   rJ   rL   rH   <module>rb     s  .  	         * *  5J'
 A! 0 0 3a 7J      

    hy h^K#= K#[  IIKLCHHQKs   C (C/.C/