ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3
 f6                 @   s   d Z ddlZddlZddlZddlZdddgZG dd deZdZdZ	dZ
d	Zd
ZG dd dZdd ZG dd dZG dd dZG dd dZG dd dZdd ZG dd dZG dd dZG dd dZdd ZdS )zMacintosh binhex compression/decompression.

easy interface:
binhex(inputfilename, outputfilename)
hexbin(inputfilename, outputfilename)
    NbinhexhexbinErrorc               @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   +/opt/alt/python36/lib64/python3.6/binhex.pyr      s      i   @      c               @   s   e Zd Zdd ZdS )FInfoc             C   s   d| _ d| _d| _d S )Nz????r   )TypeCreatorFlags)selfr   r   r	   __init__0   s    zFInfo.__init__N)r   r   r   r   r   r   r   r	   r   /   s   r   c             C   st   t  }tj| d2}|jd}d|kr,d|_|jdd |j }W d Q R X tjj	| \}}|j
ddd}|||dfS )	Nrbi   r   ZTEXT   :-r
   )r   ioopenreadr   seektellospathsplitreplace)namefinfofpdataZdsizedirfiler   r   r	   getfileinfo5   s    
r&   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
openrsrcc             G   s   d S )Nr   )r   argsr   r   r	   r   C   s    zopenrsrc.__init__c             G   s   dS )N    r   )r   r(   r   r   r	   r   F   s    zopenrsrc.readc             G   s   d S )Nr   )r   r(   r   r   r	   writeI   s    zopenrsrc.writec             C   s   d S )Nr   )r   r   r   r	   closeL   s    zopenrsrc.closeN)r   r   r   r   r   r*   r+   r   r   r   r	   r'   B   s   r'   c               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )_Hqxcoderenginez(Write data to the coder in 3-byte chunksc             C   s    || _ d| _d| _td | _d S )Nr)   r
   )ofpr#   hqxdataLINELENlinelen)r   r-   r   r   r	   r   R   s    z_Hqxcoderengine.__init__c             C   sh   | j | | _ t| j }|d d }| j d | }| j |d  | _ |sHd S | jtj| | _| jd d S )N   r   )r#   lenr.   binasciib2a_hqx_flush)r   r#   ZdatalenZtodor   r   r	   r*   X   s    
z_Hqxcoderengine.writec             C   sv   d}xF|t | j| j krJ|| j }| jj| j|| d  t| _|}qW | j|d  | _|rr| jj| jd  d S )Nr      
s   :
)r2   r.   r0   r-   r*   r/   )r   ZforcefirstZlastr   r   r	   r5   c   s    
z_Hqxcoderengine._flushc             C   s6   | j r| jtj| j  | _| jd | jj  | `d S )Nr
   )r#   r.   r3   r4   r5   r-   r+   )r   r   r   r	   r+   n   s
    

z_Hqxcoderengine.closeN)r   r   r   __doc__r   r*   r5   r+   r   r   r   r	   r,   O   s
   r,   c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	_Rlecoderenginez4Write data to the RLE-coder in suitably large chunksc             C   s   || _ d| _d S )Nr)   )r-   r#   )r   r-   r   r   r	   r   x   s    z_Rlecoderengine.__init__c             C   s@   | j | | _ t| j tk rd S tj| j }| jj| d| _ d S )Nr)   )r#   r2   REASONABLY_LARGEr3   rlecode_hqxr-   r*   )r   r#   rledatar   r   r	   r*   |   s    z_Rlecoderengine.writec             C   s0   | j rtj| j }| jj| | jj  | `d S )N)r#   r3   r;   r-   r*   r+   )r   r<   r   r   r	   r+      s
    
z_Rlecoderengine.closeN)r   r   r   r8   r   r*   r+   r   r   r   r	   r9   u   s   r9   c               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )BinHexc       
   	   C   s   |\}}}}d}t |tr.|}tj|d}d}yR|jd t|}	t|	| _d| _|d kr`t	 }|| _
|| _| j|| t| _W n   |r|j   Y nX d S )NFwbTs0   (This file must be converted with BinHex 4.0):r   )
isinstancestrr   r   r*   r,   r9   r-   crcr   dlenrlen
_writeinfo_DID_HEADERstater+   )
r   Zname_finfo_dlen_rlenr-   r    r!   rB   rC   Zclose_on_errorZofnameZhqxerr   r   r	   r      s*    



zBinHex.__init__c             C   s   t |}|dkrtdt|g|jd d }|j|j }}t|trR|jd}t|trf|jd}|| }tj	d|j
}tj	d| j| j}	|| | |	 }
| j|
 | j  d S )N?   zFilename too longzlatin-1    z>hz>ii)r2   r   bytesencoder   r   r?   r@   structpackr   rB   rC   _write	_writecrc)r   r    r!   nldtpZcrZd2Zd3Zd4infor   r   r	   rD      s    




zBinHex._writeinfoc             C   s    t j|| j| _| jj| d S )N)r3   crc_hqxrA   r-   r*   )r   r#   r   r   r	   rM      s    zBinHex._writec             C   s4   | j dk rd}nd}| jjtj|| j  d| _ d S )Nr   z>hz>H)rA   r-   r*   rK   rL   )r   Zfmtr   r   r	   rN      s
    
zBinHex._writecrcc             C   s0   | j tkrtd| jt| | _| j| d S )NzWriting data at the wrong time)rF   rE   r   rB   r2   rM   )r   r#   r   r   r	   r*      s    
zBinHex.writec             C   s,   | j dkrtd| jf | j  t| _d S )Nr   zIncorrect data size, diff=%r)rB   r   rC   rN   	_DID_DATArF   )r   r   r   r	   
close_data   s    
zBinHex.close_datac             C   sB   | j tk r| j  | j tkr$td| jt| | _| j| d S )Nz'Writing resource data at the wrong time)rF   rT   rU   r   rC   r2   rM   )r   r#   r   r   r	   
write_rsrc   s    

zBinHex.write_rsrcc             C   sx   | j d krd S zJ| j tk r"| j  | j tkr4td| jdkrNtd| jf | j  W d d | _ | j}| `|j  X d S )NzClose at the wrong timer   z$Incorrect resource-datasize, diff=%r)rF   rT   rU   r   rC   rN   r-   r+   )r   r-   r   r   r	   r+      s    



zBinHex.closeN)r   r   r   r   rD   rM   rN   r*   rU   rV   r+   r   r   r   r	   r=      s   
r=   c          
   C   s   t | }t||}tj| d.}x|jd}|s2P |j| q"W |j  W dQ R X t| d}x|jd}|snP |j| q^W |j	  |j	  dS )zEbinhex(infilename, outfilename): create binhex-encoded copy of a filer   i  N)
r&   r=   r   r   r   r*   rU   r'   rV   r+   )inpoutr!   r-   ifprP   r   r   r	   r      s"    

 

 c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	_Hqxdecoderenginez*Read data via the decoder in 4-byte chunksc             C   s   || _ d| _d S )Nr   )rY   eof)r   rY   r   r   r	   r     s    z_Hqxdecoderengine.__init__c             C   s   d}|}x|dkr| j r|S |d d d }| jj|}xRytj|\}| _ P W n tjk
rf   Y nX | jjd}|std|| }q:W || }|t| }| r
| j  r
tdq
W |S )z&Read at least wtd bytes (or until EOF)r)   r   r   r1      r
   zPremature EOF on binhex file)r[   rY   r   r3   Za2b_hqxZ
Incompleter   r2   )r   ZtotalwtdZdecdatawtdr#   Z
decdatacurnewdatar   r   r	   r     s,    
 z_Hqxdecoderengine.readc             C   s   | j j  d S )N)rY   r+   )r   r   r   r	   r+   %  s    z_Hqxdecoderengine.closeN)r   r   r   r8   r   r   r+   r   r   r   r	   rZ      s    rZ   c               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )_RledecoderenginezRead data via the RLE-coderc             C   s   || _ d| _d| _d| _d S )Nr)   r   )rY   
pre_bufferpost_bufferr[   )r   rY   r   r   r	   r   +  s    z_Rledecoderengine.__init__c             C   sD   |t | jkr"| j|t | j  | jd | }| j|d  | _|S )N)r2   ra   _fill)r   r]   rvr   r   r	   r   1  s
    z_Rledecoderengine.readc             C   s   | j | jj|d  | _ | jjr>| jtj| j  | _d| _ d S t| j }| j dd  td t krl|d }nX| j dd  tkr|d }n<| j d	d  td kr|d }n| j d
d tkrn|d }| jtj| j d |  | _| j |d  | _ d S )Nr\   r)   r1   rH   r
   r   rf   re   )	r`   rY   r   r[   ra   r3   Zrledecode_hqxr2   RUNCHAR)r   r]   Zmarkr   r   r	   rb   8  s&    



z_Rledecoderengine._fillc             C   s   | j j  d S )N)rY   r+   )r   r   r   r	   r+   [  s    z_Rledecoderengine.closeN)r   r   r   r8   r   r   rb   r+   r   r   r   r	   r_   (  s
   #r_   c               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )HexBinc             C   sj   t |trtj|d}x.|jd}|s.td|dkr8q|dkrP qW t|}t|| _d| _	| j
  d S )Nr   r
   zNo binhex data found      :r   )r?   r@   r   r   r   r   rZ   r_   rY   rA   _readheader)r   rY   ZchZhqxifpr   r   r	   r   _  s    


zHexBin.__init__c             C   s    | j j|}tj|| j| _|S )N)rY   r   r3   rS   rA   )r   r2   r#   r   r   r	   _readu  s    zHexBin._readc             C   sN   t jd| jjdd d@ }| jd@ | _|| jkrDtd| j|f d| _d S )Nz>hr   r   i  zCRC error, computed %x, read %x)rK   unpackrY   r   rA   r   )r   Zfilecrcr   r   r	   	_checkcrcz  s    
zHexBin._checkcrcc             C   s   | j d}| j t|}| j d}| j  |dd }|dd }tjd|dd d }tjd	|dd
 d | _tjd	|d
d d | _|| _t | _|| j_	|| j_
|| j_t| _d S )Nr
   r\   r      	   z>h   r   z>l      ro   rp   rq   rr   rs   )rl   ordrn   rK   rm   rB   rC   FNamer   r   r   r   rE   rF   )r   r2   ZfnameresttypeZcreatorflagsr   r   r	   rk     s    

zHexBin._readheaderc             G   sn   | j tkrtd|r,|d }t|| j}n| j}d}x&t||k r\|| j|t|  }q8W | j| | _|S )NzRead data at wrong timer   r)   )rF   rE   r   minrB   r2   rl   )r   nrc   r   r   r	   r     s    
zHexBin.readc             C   s6   | j tkrtd| jr$| j| j}| j  t| _ d S )Nzclose_data at wrong time)rF   rE   r   rB   rl   rn   rT   )r   dummyr   r   r	   rU     s    
zHexBin.close_datac             G   sZ   | j tkr| j  | j tkr$td|r>|d }t|| j}n| j}| j| | _| j|S )Nz Read resource data at wrong timer   )rF   rE   rU   rT   r   ry   rC   rl   )r   rz   r   r   r	   	read_rsrc  s    

zHexBin.read_rsrcc             C   sD   | j d krd S z| jr"| j| j}| j  W d d | _ | jj  X d S )N)rF   rC   r|   rn   rY   r+   )r   r{   r   r   r	   r+     s    
zHexBin.closeN)r   r   r   r   rl   rn   rk   r   rU   r|   r+   r   r   r   r	   rh   ^  s   
rh   c          
   C   s   t | }|j}|s|j}tj|d&}x|jd}|s8P |j| q(W W dQ R X |j  |jd}|rt	|d}|j| x|jd}|sP |j| q|W |j
  |j
  dS )z6hexbin(infilename, outfilename) - Decode binhexed filer>   i  N)rh   r   ru   r   r   r   r*   rU   r|   r'   r+   )rW   rX   rY   r!   r-   rP   r   r   r	   r     s,    
 



 )r8   r   r   rK   r3   __all__	Exceptionr   rE   rT   r:   r/   rg   r   r&   r'   r,   r9   r=   r   rZ   r_   rh   r   r   r   r   r	   <module>   s,   
&^*6h