
    kf                     	   d Z dZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZmZ d	d
lmZmZmZmZ ddlmZ  G d d          Z e            Z	 ddlZ ej                    dk    Z n	#  dZ Y nxY wd Z! G d d          Z" e#e"j$                  fdZ%["d Z&e'e(ffdZ)d Z* e#d          Z+e,e-fZ.d Z/ddZ0ddZ1ddZ2ddZ3d Z4d Z5d Z6d  Z7d! Z8d" Z9d# Z:dd$Z;d% Z<d& Z=d' Z>d( Z?ddl@Z@ eAe@d)          ZB[@d* ZCdd+ZDd, ZEdd-ZFdd/ZG G d0 d1eH          ZIejJ        d2k    rddlKZKddlLZLd3d4d4d5d6d6d7d7d8d9d:d:d;d<d=ZMdd?ZNndd@ZNddlOZOejP        Q                    eOjR                  ZSejP        T                    eS          reSpejP        U                    eS          ZV[O	 eR n#  ejW        d         ZRY nxY wddlXZXddlYZY	 eZZ[e[ Z\ eFe[A          s e]dBe[z            ejP        ^                    ejP        _                    e[j`                            Zaeaejb        z   ZcejP        Q                    ea          Zdedejb        z   Ze efec          Zg efee          ZheceeeaedejP        j_        ejP        j^        eji        ejb         efejb                  f	dCZjdD ZkeXjX        eYjY        eVejP        jl        fdEZmn0#  ejP        n                    eR          Z\dZ[dF ZkeXjX        fdGZmY nxY w[X[Ye\o:ejP        n                    ejP        o                    eR          d         dHz             ZpdI ZqdJ ZrdK ZsdL Zt eAedMdN           ZuddOZveduZw G dP dQ          ZxdR ZyddSZzdT Z{ddVZ|ddWl}m~Z~mZ ddXlmZ dY ZddZZdd[Zdd]ZejP        jn        fd^ZejP        j        ejP        j_        fd_ZejP        j        ejP        j_        ej        fd`ZejP        jn        ejP        j_        ejP        j        ej        fdaZddblmZ dc Zdd Zde Z G df dg          Z G dh die          Zdj Z G dk dl          Zdm Zdn ZddoZ G dp dq          Z G dr ds          Zdt Zdu Zdv Zdw ZddlZdx Zdy Zdz Zdd|ZddZd Z G d de,          Z G d de,          Zd Z G d dej                  Z G d d          ZddZd Zd Zd ZdS )z3.5.34z6Gazillions of miscellaneous internal utility functions    N)literal_eval)decodebytesencodebytes)BytesIO)md5)get_rl_tempfileget_rl_tempdir   )rl_safe_execrl_safe_evalsafer_globalsrl_extended_literal_eval)Imagec                   >    e Zd Zed             Zed             ZeZdS )	__UNSET__c                      dS )NF r       S/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/lib/utils.py__bool__z__UNSET__.__bool__   s    ur   c                      dS )Nr   r   r   r   r   __str__z__UNSET__.__str__   s    {r   N)__name__
__module____qualname__staticmethodr   r   __repr__r   r   r   r   r      sE          \  \HHHr   r   PyPyFc                 L    t          |           t          t                    k    S N)type
isFunctionvs    r   r"   r"   !   s    77d:&&&&r   c                       e Zd Zd ZdS )cc                     d S r    r   selfs    r   mzc.m%   s      r   N)r   r   r   r*   r   r   r   r&   r&   $   s        r   r&   c                 (    t          |           |k    S r    )r!   )r$   mts     r   isMethodr-   '   s    77b=r   c                 L    t          |           t          t                    k    S r    )r!   sysr#   s    r   isModuler0   +   s    77d3iir   c                 "    t          | |          S r    )
isinstance)r$   _sts     r   isSeqr4   .   s    ar   c                 ,    t          | t                    S r    r2   strr#   s    r   isNativer8   1       ar   c                     t          t          |           r| n|                     d                                                    S )Nutf8)r   isBytesencode	hexdigestss    r   	_digesterrA   9   s7    GAJJ4qqAHHV$4$455??AAAr   r;   c           	          t          | t                    r| S 	 |                     |          S #  t          dt	          |           dt	          |          d           Y d S xY w)NzasBytes(,enc=	) error: )r2   bytesr=   annotateExceptionasciir$   encs     r   asBytesrJ   <   si    !E$1HPxx}}P%((((5::::NOOOOOO	   . 2A#c           	          t          | t                    r| S 	 |                     |          S #  t          dt	          |           dt	          |          d           Y d S xY w)Nz
asUnicode(rC   rD   )r2   r7   decoderF   rG   rH   s     r   	asUnicoderN   C   si    !C"(Rxx}}RE!HHHHU3ZZZZPQQQQQQrK   c           	         t          | t                    r| S 	 t          | t                    r|                     |          nt          |           S #  t	          dt          |           dt          |          d           Y d S xY w)NzasUnicodeEx(rC   rD   )r2   r7   rE   rM   rF   rG   rH   s     r   asUnicodeExrP   J   s    !C"(T *1U 3 3?qxx}}}Q?TeAhhhhuSzzzzRSSSSSSs   8A 2Bc                 $    t          | |          S )N)rI   )rN   rH   s     r   asNativerR   Q   s    Q3r   c                 "    t          | g          S r    )rE   )is    r   int2ByterU   T   s    !::r   c                 :    t          | t          t          f          S r    )r2   r7   rE   r#   s    r   isStrrW   W   s    a#e%%%r   c                 ,    t          | t                    S r    )r2   rE   r#   s    r   r<   r<   Z   s    ar   c                 ,    t          | t                    S r    r6   r#   s    r   	isUnicoderZ   ]   r9   r   c                 ,    t          | t                    S r    r2   r!   r#   s    r   isClassr]   `   s    ar   c                    t          | t          t          t          t          t
          t          t          t          t          t          t          t          t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        f           S r    )r2   floatintr!   tuplelistdictr7   rE   complexboolslice_rl_NoneTypetypesFunctionType
LambdaTypeCodeTypeMappingProxyTypeSimpleNamespaceGeneratorType
MethodTypeBuiltinFunctionTypeBuiltinMethodType
ModuleTypeTracebackType	FrameTypeGetSetDescriptorTypeMemberDescriptorType)xs    r   isNonPrimitiveInstancerx   c   s    !U3tE$tCgdSXYe5+ENu4E,U-F 01D253MO P P P Pr   c                 .    t          | t                     S r    r\   r#   s    r   instantiatedrz   k   s    !D!!!!r   c                     t          | t                    r|                     |          S t          | t                    r| S t          |                               |          S r    )r2   r7   r=   rE   )rw   rI   s     r   bytestrr|   n   sS    !C "xx}}	Ae		 "1vv}}S!!!r   c                     t          t          j        |                                                                         d          S Nlatin1)base64_encodebytespickledumpsstriprM   )argss    r   encode_labelr   v   s4    fl400117799@@JJJr   c                 j    t          j        t          |                     d                              S r~   )r   loadsbase64_decodebytesr=   )labels    r   decode_labelr   y   s'    <*5<<+A+ABBCCCr   c                 Z    t          | t                    s|                     d          n| S zconverts first 256 unicodes 1-1r   )r2   r7   rM   r?   s    r   
rawUnicoder   |   s(    %/#%6%6=188HA=r   c                 Z    t          | t                    r|                     d          n| S r   )r2   r7   r=   r?   s    r   rawBytesr      s(    !+Ac!2!29188H9r   execc                     t          | t                    r| n8t          t          | t                    r| n|                     d                    S r~   )r2   r`   ordr7   rM   r?   s    r   char2intr      sC    Ac""[AAAc1B1B,ZAAQYHZHZ([([[r   c                 B    |j         |ur|                    |          |r    )__traceback__with_traceback)tr$   bs      r   
rl_reraiser      s(    aq!!!
Gr   c                  d    dd l }|                                 D ]\  }}t          |||           d S Nr   )builtinsitemssetattr)kwdr   kr$   s       r   rl_add_builtinsr      sE    OOOyy{{  !1 r   c                     	 | st          j        d          j        d         } ddlm} t          | |          rt          | j                  r| nd S #  Y d S xY w)Nr
   
__loader__r   )zipimporter)r/   	_getframe	f_globals	zipimportr   r2   len_files)ldrr   s     r   zipImportedr      sn     	;-"",\:C)))))) [11Oc#*ooOss4Otts   AA A.ttfc                 4   ddl m}m}m} ddlm} |                                }g }|j        }| D ]g} ||          s ||          D ]M}	 |||	          }	 ||	          r4|r'|	                                                    |          r ||	           Nh|S )Nr   )isfileisdirjoin)listdir)	os.pathr   r   r   osr   lowerappendendswith)
dirListextr   r   	path_joinr   RADfns
             r   
_findFilesr      s    8888888888
))++C
A	A K KuQxx!'!** 	K 	KB1RBvbzzJ3J"((***=*=c*B*BJQQrUUU	K Hr   c                   F    e Zd Zd Zd Zd Zd Zd ZddZd Z	d	 Z
d
 ZdS )CIDictc                 d    |D ]}|                      |           |                      |           d S r    )update)r)   r   kwdsas       r   __init__zCIDict.__init__   s5    %%At{{1~~~~Dr   c                 D    |                                 D ]
\  }}|| |<   d S r    )r   )r)   r   r   r$   s       r   r   zCIDict.update   s)    7799))CAad1gg))r   c                 x    	 |                                 }n#  Y nxY wt                              | ||           d S r    )r   rc   __setitem__r)   r   r$   s      r   r   zCIDict.__setitem__   sB    			AA	Da"""""    c                 r    	 |                                 }n#  Y nxY wt                              | |          S r    )r   rc   __getitem__r)   r   s     r   r   zCIDict.__getitem__   :    			AA	DQ'''r   c                 r    	 |                                 }n#  Y nxY wt                              | |          S r    )r   rc   __delitem__r   s     r   r   zCIDict.__delitem__   r   r   Nc                 8    	 | |         S # t           $ r |cY S w xY wr    )KeyError)r)   r   dvs      r   getz
CIDict.get   s4    	7N 	 	 	III	s   
 c                 (    	 | |          dS #  Y dS xY w)NTFr   r   s     r   __contains__zCIDict.__contains__   s%    	GG4	55s    c                 b    	 |                                 }n#  Y nxY wt          j        | |f|z    S r    )r   rc   popr)   r   r   s      r   r   z
CIDict.pop   s9    			AA	Dx4(1*&&r   c                 b    	 |                                 }n#  Y nxY wt          j        | |f|z    S r    )r   rc   
setdefaultr   s      r   r   zCIDict.setdefault   s9    			AA	D$q!--r   r    )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s          * * *# # #( ( (( ( (     ' ' '. . . . .r   r   mac)oglezBMP )r   EPSF)r   GIFf)r   JPEG)ttxtPICT)r   PNGf)r   z.PPM)r   TIFF)CAROzPDF )MSIETEXT)BMPEPSr   GIFJPGr   PCTr   PNGPPMTIFr   PDFHTMLr   c                     	 ||.|,	 t           |                                         \  }}n#  Y d S xY wt          j        |                               ||           t          j        |            d S #  Y d S xY wr    )_KNOWN_MAC_EXTuppermacfsFSSpecSetCreatorType
macostoolstouched)filenamecreatorcodefiletyper   s       r   markfilenamer      s    		"h&63?,:399;;,G)KFFL""11+hGGGx(((((	DDs"   A2 ", A2 1A2 ?A2 2A7c                     d S r    r   )r   r   r   s      r   r   r      s    r   )r   z#can't handle compact distro type %rc
                 2    ||                      d|                    }  ||           }
|
||fv rdS |
                    |          rd| t          d         fS |
                    |          rd| t          d         fS  | |                      }t	          |          }|
                    |          rA| |d                             |          rd| ||	z   d         fS |t	          |           k    rdS t
          j                            |            | fS )z3if the name starts with a known prefix strip it off/)r
    r
   N)replace
startswith_archivepfxlen_archivedirpfxlenr   r   pathisabs)r   _archivepfx_archivedirpfx_archive_archivediros_path_normpathos_path_normcase	os_getcwdos_sep
os_sep_lennfncwdns                r   __startswith_rlr    s*    bjjV4455r"";x(((>>+&&DqNOO1D/D(D>>.))J!B7H7I7I4J2J+Jyy{{++HH>># 	'!""v  ((EBq|}}4E1E*E#b''zz$$7==$$$R''r   c                 ,    t          |           d         S )Nr
   )r  r   s    r   _startswith_rlr  3  s    r""1%%r   c                 2   t          |           \  }} ||          }|s|g k    rq|t          t          t          |fdt          t	          ||fdt          t
          j                                                                                          z  }|S )Nc                 $     |t           |           S r    )r  )rw   r   pjoins      r   <lambda>zrl_glob.<locals>.<lambda>:  s    eeKPQ>R>R r   c                      || |          S r    r   )rw   pfnfnmatchs      r   r  zrl_glob.<locals>.<lambda>:  s.      BI  BI  JK  LO  BP  BP r   )r  rb   mapr  filter__rl_loader__r   keys)patternglobr  _RL_DIRr  r&   r  rs           r   rl_globr'  6  s     ))3DII 	v2c[uRRRSWX^lox  `P  `P  `P  QU  Vc  Vj  Vo  Vo  Vq  Vq  Qr  Qr  Ys  Ys  Tt  Tt  u  u  v  v  vAr   c                     | S r    r   r  s    r   r  r  ?  s    	r   c                      ||           S r    r   )r#  r$  s     r   r'  r'  A  s    tG}}r   .pyc                      t           S )z*return truth if a file system distribution_isFSDr   r   r   isFileSystemDistror.  F  s    Mr   c                      t            S )z.return truth if not a file system distributionr,  r   r   r   isCompactDistror0  J  s
    :r   c                      t           S )z1return truth if a source file system distribution)_isFSSDr   r   r   isSourceDistror3  N  s    Nr   c                     t           j                            t           j                            t           j                            |                               S r    )r   r  normcaseabspathnormpath)ps    r   normalize_pathr9  R  s6    7BGOOBG,<,<Q,?,?@@AAAr   invalidate_cachesc                      d S r    r   r   r   r   r  r  U  s    T r   c                    d t           j        D             }|rOt          |t          t          f          r|n|fD ]-}|r)t          |          }||vr|                    d|           .|rGddt          d          fD ]3}||v r-|rt          d|z             |                    |           ||v -4n-t          j
                    }||vr|                    d|           t           j        }	 |t           _        t                       |rt                       t          d           t          dt          |           z             t          dt          t          j
                              z             t          d	t          t           j                  z             t          d
t          d| z            dt          t          j                            d| z                                 t          dt          |          z             t          d           t          j        |           |t           _        t                       |r t          dt!          |          z             S S # t"          $ r6 t%          d| dt           j        dt          j
                               Y n` t%          dt'          t          j                    d                   d| dt           j        dt          j
                               Y nxY w|t           _        t                       |r!t          dt!          |          z             dS dS # |t           _        t                       |r t          dt!          |          z             w w xY w)zEDynamically imports possible packagized module, or raises ImportErrorc                 ,    g | ]}t          |          S r   )r9  ).0r8  s     r   
<listcomp>z#recursiveImport.<locals>.<listcomp>Y  s     000!N1000r   r   r  .zremoved "%s" from pathz++++++++++++++++++++z+++++ modulename=%sz+++++ cwd=%sz+++++ sys.path=%sz+++++ os.paths.isfile(z./%s.pyz)=z+++++ opath=%sz--------------------z===== restore sys.path=%szCould not import z
using sys.path z in cwd=z
Exception r
   z while importing N)r/   r  r2   rb   ra   r9  insertprintremover   getcwd_importlib_invalidate_cachesrG   r   	importlibimport_modulereprImportErrorrF   r7   exc_info)
modulenamebaseDirnoCWDdebugr  r8  opaths          r   recursiveImportrP  W  s   00sx000D 3&wU|<<L7* 	3 	3A 3"1%%D==$++a"2"2"2 S,,- 	 	At))=% 81 <===A t))	
 IKKD==KK! HE=$&&& 	GGG&MMM'%
*;*;;<<<.5#5#55666%ch7888EE)J:N4O4O4O4OQVWYW^WeWefopzfzW{W{Q|Q|Q|}~~~"U5\\1222&MMM&z22 $&&& 	=-U;<<<<	=    

3888BIKKK1 	 	 	 	 	JCLNN1%&&&&


3888BIKKKI 	J 	J 	J 	J 	J $&&& 	=-U;<<<<<	= 	= $&&& 	=-U;<<<<	=s&   +EI- -=L	*M ,AL	M >N	c                       e Zd ZdZd ZdS )ArgvDictValuezGA type to allow clients of getArgvDict to specify a conversion functionc                 "    || _         || _        d S r    )valuefunc)r)   rT  rU  s      r   r   zArgvDictValue.__init__  s    
			r   N)r   r   r   __doc__r   r   r   r   rR  rR    s)        QQ    r   rR  c                     d }t           j        dd         }i }|                                 D ]\  }}t          |t                    r|j        |j        }}nd}d}|dz   }|D ]W}	|	                    |          r@|	t          |          d         }
|	                    |	            |||
|          ||<   d} nX|s ||||          ||<   |S )z Builds a dictionary from its keyword arguments with overrides from sys.argv.
        Attempts to be smart about conversions, but the value can be an instance
        of ArgDictValue to allow specifying a conversion function.
    c                    |r ||          } nt          |           r|} nt          | t                    rt          |          } nt          | t                    rt          |          } nt          | t                    rt	          t          |          i           } nUt          | t                    rt          t          |          i           } n"t          d|dt          |                     | S )NzCan't convert string z to )	rW   r2   r_   r`   rb   r   ra   	TypeErrorr!   )r$   avrU  s      r   handleValuez getArgvDict.<locals>.handleValue  s     	PRAAQxx PAe$$ 	P"IIAc"" PGGAd## Pb))"--Ae$$ P,r**2..i222d1ggg NOOOr   r
   Nr   =)
r/   argvr   r2   rR  rT  rU  r  r   rC  )kwr[  r   r   r   r$   rU  handledker   rZ  s              r   getArgvDictra    s   
  $ 	A
A

 5 51a&& 	gqvtAADsU 	 	A||B s2wwxx["{1R--! 4{{1Qt44!Hr   c                    	 ddl m} | Bt          j                            t          j                            t                    d          }  ||           S # t          $ r}t          |          dk    r Y d }~d S d }~ww xY w)Nr   )Hyphenzhyphen.mashedzNo module named pyHnj)	reportlab.lib.pyHnjrc  r   r  r   dirname__file__rI  r7   )hDictrc  errMsgs      r   getHyphenaterri    s    ......=RW__X-F-F W W%ve}}   v;;///ttttts   AA 
B !A;;B c                     	 | j         j        }|                    d          }|dk    r||dz   d         S |S # t          $ r t	          |           cY S w xY w)zReturn a shortened class namer@  r   r
   N)	__class__r   rfindAttributeErrorr7   )r)   namerT   s      r   
_classNamero    sl    ~&
**S//a44QqSTT
"   4yys   38 8 AAr   c                 L   d|vrd|z   }	 t          | |          S # t          $ r~ t          st           t	          |           } t                              |           }d|vr0t          j        dk    r |                    t          j        d          }t          |          cY S w xY w)Nr&  r   
)
openIOErrorr-  r!  r  get_datar   linesepr  r   )rn  moder@   s      r   open_for_read_by_namerw    s    
$s4x	D   1]*E d##""4((d??rz4//QYYrz$5O5Oqzzs    BB#"B#)unquoteurlparse)urlopenc                 D    t          |                                           S r    )rz  read)rn  s    r   	rlUrlReadr}    s    4==r   c                 .   t           fdddlmm rYdd l}dd lfd}|                    d                    dd                    t          |                    df                    dfd
	}|t                      d<    || |          S )Nc                    	 |                      dd          \  }}n# t          $ r t          dd          w xY w|sd}|                    d          }|dk    r$d||d	         vr||dz   d	         }|d	|         }nd
}|dk    r#t	          |                    d                    }n ||                              d          }|S )zUse "data" URL.,r
   z
data errorzbad data URLztext/plain;charset=US-ASCII;r   r\  Nr  base64rG   zlatin-1)split
ValueErrorrs  rl  r   r=   )urlrx  typdatasemiencodings         r   
datareaderz!open_for_read.<locals>.datareader  s    	8		#q))IC 	8 	8 	8,777	8 	0/Cyy~~199CJ..4677|Hete*CCHx%dkk'&:&:;;DD74==''	22Ds    7r   )trustedHoststrustedSchemesc                 v     j         |           } |                     d          r
| dd         n	| d d         S )Nz(?s:   i)	translater  )r@   r  s    r   xrezopen_for_read.<locals>.xre  s@    !!!$$All622>1QrT77#2#>r   r  z^(?:|z)\Zr   c                    t          | d          r| S 	 t          | |          S #  	 Ut          |           }|d         r>|d         dv s                    |d                   r
|d         v st	          d          t           | dd                                         dk    rnt          |                     cY S #  t          d	| z            xY wxY w)
z)attempt to open a file or URL for readingr|  Nr   )r  filer
   zAttempted untrusted host access   zdata:zCannot open resource "%s")	hasattrrw  ry  matchr  r   r   r}  rs  )rn  rv  purlr  r  r  s      r   open_for_readz$open_for_read.<locals>.open_for_read  s   4,
	B(d333	BB+#D>>DAw LaO)C)C|GYGYZ^_`ZaGbGb)Cimnoip  uC  jC  jC()JKKK Vd2A2hnn.>.>.G.G

YX\]]^^^^^B9D@AAAs!   % CBC =C CCr  r   )
rx  reportlab.rl_configr  r  rer  compiler   r  globals)	rn  rv  r  r  r  r  r  r  r  s	        @@@@r   r  r    s   
 !(    6 A@@@@@@@ *	? 	? 	? 	? 	? zz"''6 #S)>)> ? ? &+( #) #) * *B B B B B B B B "/GIIo=d###r   c                     t          | |          }| |ur@t          |d          r0|5  |                                cd d d            S # 1 swxY w Y   d S |                                S )N__exit__)r  r  r|  )rn  rv  fs      r   open_and_readr    s    d4  A1}}:..} 	 	6688	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 vvxxs   AAAr   c                 H    t          | |                              d          S Nrq  )r  r  )rn  rv  s     r   open_and_readlinesr     s     d##))$///r   c                     t          | d          rdS  ||           rdS t          st          dS t          |           } | t	          t          j                                                  v S )Nr|  TF)r  r-  r!  r  rb   r   r"  )r   os_path_isfiles     r   	rl_isfiler  #  sh    r&&$$~b&$$4&uu			Bm*//112222r   c                 |    ||           rdS t           st          dS t           ||                     } |                     t          j                  s| t          j        z  } t          t          t          | fdt          t          j	        
                                                                        dk    S )NTFc                 ,    |                      |          S r    )r  )rw   pns     r   r  zrl_isdir.<locals>.<lambda>/  s    1<<+;+; r   r   )r-  r!  r  r   r   sepr   rb   r   r   r"  )r  os_path_isdirr  s      r   rl_isdirr  *  s    }R%4&uu	((,,	-	-B;;rv,bftFr;;;DAUAZAZA\A\<]<]^^__``abbbr   c                 ,     |           st           st           |           S t           |                                           t          j                  s t          j        z    fdt          j                                        D             S )Nc                 h    g | ].}|                               |t                    d          /S r    )r  r   )r>  rw   r  s     r   r?  zrl_listdir.<locals>.<listcomp>5  s8    QQQAR@P@PQAc"gghhKQQQr   )r-  r!  r  r   r   r  r   r"  )r  r  r  
os_listdirs   `   r   
rl_listdirr  1  s    }RRFRm&;JJrNN=R	((,,	-	-B;;rv,bfQQQQ!5!:!:!<!<QQQQr   c                 h    ||           st           st           ||           S t           ||                     }	 t          j        |         }n# t          $ r  ||           cY S w xY w|d         }|d         } ||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ddf	          S )Nr     	      i           ?   r
   r   )r-  r!  r  r   r   )	r  r  r  os_path_getmtimetime_mktimer8  er@   ds	            r   rl_getmtimer  7  s    ~bYVY}'<EUEUVXEYEY>Y''++,,A$ # $ $ $#####$	!A	!A;!Q$d*AqD#:afaeT\1a4QU+WXY]W]`aVabcdefghiiis   A A)(A))utilc                    dD ]t}t           j                            || |z             }t           j                            |          r0t	          j        | |          }|j                                        c S ut          d          )N)r*  z.pywz.pyoz.pycz.pydzno suitable file found)	r   r  r   r   importlib_utilspec_from_file_locationloaderload_modulerI  )rn  dirr   r  specs        r   __rl_get_module__r  C  s    2 - -w||CS))7>>$ 	-!9$tDDD;**,,,,,	- .
/
//r   c                 n   | t           j        v r t           j        |          }t           j        | = nd }	 	 t          | |          |r|t           j        | <   S S #  t                      rdd l}t          |          }|dk    s| rt          pBt          j        	                    t          |
                    dt          j                            }|                    |          }|                    |           cY |r|t           j        | <   S S t          | d|d          xY w# |r|t           j        | <   w xY w)Nr   r@  r   [])r/   modulesr  r0  r   r  r
  r   r  r   r  r  r   r  rI  )rn  r  omr   zis        r   rl_get_moduler  K  sI   s{[K&
	5$T#.. %2s{4  %	5   ,    $S))Cx*s78jBGLLRUR]R]^abdbhRiRi<j<j**3//~~d++++ %2s{4  % $$$sss3444%2s{4 %%%%s$   A B D5D! 	DD! !D4c                 Z    	 t          | t          j                  S # t          $ r Y dS w xY wr   )r2   r   rm  )ims    r   _isPILImager  `  s;    "U[)))   qqs    
**c                       e Zd ZdZi ZdZddZd Zd Ze	d             Z
e	dd            Zd Zd	 Zd
 Zd Zd Zd ZdS )ImageReaderz%Wraps up PIL to get data from bitmapsNc                    t          |t                    r|j        | _        d S || _        || _        d | _        d | _        d | _        d | _        d | _	        t          |          rY|| _        t          |dd           | _        	 | j        j        | _        d S # t          $ r dt          |           z  | _        Y d S w xY w	 ddlm} |dk    rt#          d          t%          |d          }t          |t&                    s8|t'          |                                          }}|                                 ~|| _        |                     | j                  | _        t          |t.                    r|nt1          |          | j        _        |                     | j                   t          | j        dd           dk    r| j        | _        d S d S #  t9          d	|d
|                                            Y d S xY w)NfpzPILIMAGE_%dr   )imageReaderFlagszYimageReaderFlags values other than 0 are no longer supported; all images are interned nowr   formatr   z

fileName=z
 identity=)r2   r  __dict___identfileName_image_width_height_transparent_datar  getattrr  rm  idr  r  r  r  r   r|  close_read_imager7   rH  check_pil_image_size_jpeg_fhjpeg_fhrF   identity)r)   r  identr  r  tfps         r   r   zImageReader.__init__j  s   h{++ 	$-DMF ! 
x   	Z"DKhtD11DG9 $ 4! 9 9 9 -4 89Z@@@@@@#q(($  &A  B  B  B"8C00!"g..  '"''))"4"4CIIKKK"..tw773=hs3K3K'_xxQUV^Q_Q_$))$+6664;x55v==#'=DLLL >=Z!!xxx"XYYYYYYs   B !B:9B:>DG )G<c                     | j         }t          |          s t          t          | dd          dd          }| j        }d| j        j        dt          t          |                     |rd|z  pd|rd|z  pdd	S )
z9try to return information that will identify the instancer  Nrn  r  @z	 ident=%rr  z filename=%rr  )r  rW   r  r  rk  r   hexr  )r)   r   r  s      r   r  zImageReader.identity  s    ]Ryy 	>d400==B $ 7 7 7BtHHeFeQ\_dQdFkikFkln  mI  uC  FH  uH  mO  MO  mO  mO  P  	Pr   c                 *    t          j        |          S r    )r   rr  r)   r  s     r   r  zImageReader._read_image  s    z"~~r   c                     | j         }|d S |j        \  }}|j        }t          d|dk    rdndt	          |          z  |z  |z  dz	            }||k    rt          d|d|d|d|d	|d
          d S )Nr
   1      zPIL  z x z image would use z > z bytes)_max_image_sizesizerv  maxr   MemoryError)clsr  max_image_sizewhr*   r  s          r   r  z ImageReader.check_pil_image_size  s    ,!66w1G1AsFFqq#a&&!3A59::+./aa!!!DDDI J J J r   c                 H    || _         |ddlm}  || j                   d S d S )Nr   )register_reset)r  r  r  set_max_image_size)r  r  r  s      r   r  zImageReader.set_max_image_size  sC    ,%::::::N3122222 &%r   c                 >    | j         }|                    d           |S r   )r  seekr  s     r   r  zImageReader._jpeg_fh  s    W



	r   c                     d S r    r   r(   s    r   r  zImageReader.jpeg_fh  s    tr   c                 l    | j         | j        | j        j        \  | _         | _        | j         | j        fS r    )r  r  r  r  r(   s    r   getSizezImageReader.getSize  s3    K4<#7(,(8%DKT\**r   c                 l   	 | j         yd| _        | j        }|j        x}| _        |dv rt	          t
          dd                              d          r|                                 t          |	                                |dk    rdnd                   | _        |dd	         }|
                    |          }|| _        n|d
vr|j        dk    rk|j        dk    r`d|j        v rW|
                    d          }t          |	                                d                   | _        |
                    d          }n|
                    d          }d| _         t          |d          r|j        n|j                    | _         | j         S #  t!          d|                                 z             Y dS xY w)z'Return byte array of RGB data as stringN)LARGBAVERSIONr  z1.1.7r  r  r
   )LRGBCMYKr   Ptransparencyr  tobytesz
identity=%s)r  _dataAr  rv  r  r   r  loadr  r  convertr  infor  r  tostringrF   r  )r)   r  rv  nms       r   
getRGBDatazImageReader.getRGBData  s   	?z!"[#%7*ty=((uYr22==gFF "			"-bhhjjdFllPQ.R"S"SDKcrcBBB "DII!333y%''BGSLL^rw=V=VZZ//&1"((**Q-&@&@ZZ..ZZ.. %DISGB	,B,BSbjjVV
:	?odmmoo=>>>>>>s   FF
 
&F3c                 ^    |                                  \  }}|||                                 fS r    )r  r  )r)   widthheights      r   getImageDatazImageReader.getImageData  s*    vfdoo////r   c                     d| j         j        v rP| j         j        d         dz  }| j         j        }	 |j        }n#  	 |j        }n	#  Y Y d S xY wY nxY w|||dz            S d S )Nr  r  )r  r  paletter  )r)   r  r  s      r   getTransparentzImageReader.getTransparent  s    T[---;+N;a?Lk)G !/  %lGG 444 G <Q6774s&   9 AAAA
A
Ar    )r   r   r   rV  _cacher  r   r  r  classmethodr  r  r  r  r  r  r  r  r   r   r   r  r  f  s        ++FO%Z %Z %Z %ZNP P P   J J [J 3 3 3 [3  
  + + +
? ? ?60 0 0    r   r  c                       e Zd ZdS )LazyImageReaderN)r   r   r   r   r   r   r!  r!    s        Dr   r!  c                     	 |                                  S # t          $ r$ t          |                                            cY S w xY w)z<Get width, height and RGB pixels from image file.  Wraps PIL)r  rm  r  )imageFileNames    r   r  r    sT    9))+++ 9 9 9=))66888889s    +AAc                       e Zd ZdZd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d Zd ZeeeedZd Zd Zd Zd Zd ZdS )	DebugMemoa  Intended as a simple report back encapsulator

    Typical usages:
        
    1. To record error data::
        
        dbg = DebugMemo(fn='dbgmemo.dbg',myVar=value)
        dbg.add(anotherPayload='aaaa',andagain='bbb')
        dbg.dump()

    2. To show the recorded info::
        
        dbg = DebugMemo(fn='dbgmemo.dbg',mode='r')
        dbg.load()
        dbg.show()

    3. To re-use recorded information::
        
        dbg = DebugMemo(fn='dbgmemo.dbg',mode='r')
            dbg.load()
        myTestFunc(dbg.payload('myVar'),dbg.payload('andagain'))

    In addition to the payload variables the dump records many useful bits
    of information which are also printed in the show() method.
    rl_dbgmemo.dbgr  r
   r   Nc           
      h
   dd l }|| _        |st          j        | _        n-t	          |d          r|| _        nt          |d          | _        |dk    rd S i x| _        }	|rVt          j                    dk    r?dd l}
t                      }|

                    d |           |                                |	d<   t          j                    }t          j        |          }t          j                            |          }|rt          j        |          pd}t          j                            t          j                            t          j        d                             }d}d }	 dd l}|                    t*                              d                    }|d         }n#  Y nxY wt          j        t1                                                    }|                                 |	                    i d	t9          j        t9          j        t9          j                                        d
t          j        dt          j         dtC          t          j"                  dt          j#        dt          j$        dt          j%        dt          j        dt          j        d|d|&                                d|d|dt          j'        dtQ          t          dd          dtQ          t          dd          dtQ          t          dd          tQ          t          dd          d)                    dgfd|D             z             tU          t*                    ||d            t          d!ft          d"ffD ]>\  }}|D ]6}t	          ||          r$	  tQ          ||                      |	|<   /#  Y 3xY w7?||k    r3	 |	                    |t          j        |          d#           n#  Y nxY w|r~t          j                            t          j        d                   }t          j        +                    |          r0	 |t          |d$          ,                                f|	d%<   n#  Y nxY wi }t          j-        .                                D ]w\  }|d&k    s"|d'k    s|d d(         d)k    s|d d*         d+k    rJfd,d-D             }d. |D             r0|d         gd/ |d0d          D             z   }t_          |          ||<   x||	d1<   i | j        d2<   | 0                    |           d S )3Nr   writer  )NNN__tracebackz???zmeta_data.marproject_versiongmtplatformversion
hexversion
executableexec_prefixprefixr  r]  r  hostnamelcwdlpcwd	byteordermaxint
maxunicodez????api_versionversion_infowinverz
			r  c                 *    g | ]}|d |         S )r\  r   )r>  r   envs     r   r?  z&DebugMemo.__init__.<locals>.<listcomp>?  s)    <]<]<]VW#a&&=Q<]<]<]r   )r:  environmentr!  project_meta_datar*  )getwindowsversiongetfilesystemencoding)unamectermidgetgidgetuidgetegidgeteuidgetlogin	getgroupsgetpgrpgetpidgetppid)exedlexedr&  __script	reportlabrlextra
   z
reportlab.r  zrlextra.c                 2    g | ]}t          |d           S r    )r  )r>  rw   r*   s     r   r?  z&DebugMemo.__init__.<locals>.<listcomp>_  s%    VVV1WQq&&VVVr   )__version____path__rf  c                     g | ]}||S r   r   r>  _fs     r   r?  z&DebugMemo.__init__.<locals>.<listcomp>`  s    )))2b)B)))r   c                     g | ]}||S r   r   rV  s     r   r?  z&DebugMemo.__init__.<locals>.<listcomp>a  s    !;!;!;!;"!;!;!;r   r
   __module_versions	__payload)1socketr   r/   stdoutr  rr  storerJ  	tracebackr   	print_excgetvaluer   rD  r   r  re  r6  r]  marshalr   r!  rt  environrb   r"  sortr   timeasctimegmtimer,  r-  r  r.  r/  r0  r1  gethostnamer5  r  r   rH  r   r|  r  r   ra   _add)r)   r   rv  	getScriptr  capture_tracebackr\  r^  r[  r]  r^  r@   r  r3  pcwdr4  rL  r*  mdra  KMr   r   module_versionsr  r$   r<  r*   s                              @@r   r   zDebugMemo.__init__  sp    	/*DKKvg&& /$"6#..99ff
U 	03C!C!C		AQ'''#$::<<E- IKKz#ws##)D))2Uwrwsx{;;<<	NNN}}]33ODDEEB01OO	Dj
sxxzz

	 t|DK	,D,DEE "CL!3; %c#.&9&9 %cn	
 &s !#*   s #F$6$6$8$8    $S] !'#l6"B"B &ws='H'H  'N6(J(J!" #*#hv">">'1t<]<]<]<][\<]<]<]7]'^'^)-m)<)<-/+:+   	 	 	0 BC   	 	CAa   1Q<< #/71Q<<>>a	 99dRZ5E5EGGHHHH 	!--Bw~~b!! )+DCLL,=,=,?,?(@E*%%D;$$&& 	2 	2CAa+~~I3B31E1E2A2PZIZIZVVVV0UVVV))))) 21!;!;qu!;!;!;;A).qOA&%4!""$
;		"s0   '9F! !F%N44N8*O/ /O3'Q/ /Q3c                 ^    | j         d         }|                                D ]
\  }}|||<   d S NrZ  )r]  r   )r)   r   payloadr   r$   s        r   rh  zDebugMemo._addg  s>    *[)GGII 	 	DAqGAJJ	 	r   c                 0    |                      |           d S r    )rh  )r)   r^  s     r   addzDebugMemo.addl  s    		"r   c                    	 |                                 }t          j        | j        |           d S #  | j                                        }t                      }|                                D ],\  }}	 t          j        ||i|           #  d|z  ||<   Y *xY w|                    |d           t          j        ||           Y d S xY w)Nz<unpicklable object %r>r   )tellr   dumpr]  copyr   r   r  )r)   r  posSffr   r$   s          r   _dumpzDebugMemo._dumpo  s    	CK
1%%%%%		jooAyyBwwyy 9 9!9K1b))))94q8AaDDDFF3qMMMK!s"   .2 AC
5BC

B0C
c                     t          | j        d          }	 |                     |           |                                 d S # |                                 w xY w)Nwb)rr  r   r|  r  r)   r  s     r   rw  zDebugMemo.dump~  J    	JJqMMMGGIIIIIAGGIIII   A Ac                 p    t                      }|                     |           |                                S r    )r   r|  r`  r  s     r   r   zDebugMemo.dumps  s(    II

1zz||r   c                 8    t          j        |          | _        d S r    )r   r  r]  r  s     r   _loadzDebugMemo._load  s    [^^


r   c                     t          | j        d          }	 |                     |           |                                 d S # |                                 w xY w)Nrb)rr  r   r  r  r  s     r   r  zDebugMemo.load  r  r  c                 J    |                      t          |                     d S r    )r  r   )r)   r@   s     r   r   zDebugMemo.loads  s     

71::r   c           
         |                      |dd                     t          |                                          }|                                 |D ]}||         x}}t	          |t
                    r|d         }	 t          |           t          j        |         }t          |dd           |k    rdpd}n#  d }d}Y nxY w|                      d|d|d	|d
           d S )N   r   rS  SAME	DIFFERENTz??????unknown??????z   = z ())
_writelnrb   r"  rc  r2   ra   
__import__r/   r  r  )r)   r   r$   rm  vkvk0r*   r  s           r   _show_module_versionszDebugMemo._show_module_versions  s    aeNN	 
	7 
	7AtOB"U##02a5S*1KNAmD1136A6P[*)MMMaaa11156666
	7 
	7s   ?:B::Cc                 N    |                      d|d|dd          d           d S )Nz###################r  r  z##################)r  )r)   r   whats      r   _bannerzDebugMemo._banner  s1    ddd1QRR555QRRRRRr   c                 2    |                      |d           d S )NzStart  r  r   s     r   _startzDebugMemo._start      Qy!!!!!r   c                 2    |                      |d           d S )NzFinish r  r   s     r   _finishzDebugMemo._finish  r  r   c                     |                      |           |                     |           |                     |           d S r    )r  r  r  r   s      r   _show_lineszDebugMemo._show_lines  s6    AaQr   c                     |dt           j                            |d                   }|                     ||d                    d S )Nr  r   r
   )r   r  basenamer  r   s      r   
_show_filezDebugMemo._show_file  sG    qq))!A$///01Q4     r   c                     |rKdd l }|                     |           |                     || j                   |                     |           d S d S r   )pprintr  r\  r  )r)   r   r$   r  s       r   _show_payloadzDebugMemo._show_payload  sU     	MMMKKNNNMM!DK(((LLOOOOO		 	r   c           
      p   dD ]}	 |gj         }t          |           t          j        |         } ||j                   dD ]0}t          ||          r ||dt          ||                     1n#   |d           Y nxY w|                     dd                    |j	                  z              d S )N)	_rl_accel	_renderPMsgmloppyRXPpyRXPU_imagingr   )rS  r  _versionr-  r\  z	not foundr  )
r   r  r/   r  rf  r  r  r  r   __self__)r)   mnr   r*   vns        r   _show_extensionszDebugMemo._show_extensions  s    X 	4 	4B	DK2KO!*H 8 8Bq}} 8RRR"67778+MM#chhqz2223333	4 	4s   A,A33B)rY  rZ  r)  rN  c                    t          | j                                                  }|                                 |D ]P}|t          | j                                                  vr&|                     |dd| j        |                    Q|D ]M}|t          | j                                                  v r# | j        |         | || j        |                    N|                                  d S )N15r  )rb   r]  r"  rc  specialsr  r  )r)   rm  r   s      r   showzDebugMemo.show  s    ""##	 	d 	dAT]//112222DMMRSRSRSRSTXT^_`TaTaBb4c4c4c 	W 	WAD++--....0@a0@a
ST0V0V0Vr   c                 (    | j         d         |         S rq  r]  r)   rn  s     r   rr  zDebugMemo.payload      z+&t,,r   c                 &    || j         d         |<   d S rq  r  )r)   rn  rT  s      r   r   zDebugMemo.__setitem__  s    (-
;%%%r   c                 (    | j         d         |         S rq  r  r  s     r   r   zDebugMemo.__getitem__  r  r   c                 @    | j                             |dz              d S r  )r\  r(  )r)   msgs     r   r  zDebugMemo._writeln  s"    #d(#####r   )r&  r  r
   r   r
   N)r   r   r   rV  r   rh  rt  r|  rw  r   r  r  r   r  r  r  r  r  r  r  r  r  r  rr  r   r   r  r   r   r   r%  r%    s        2Y Y Y Yv  
        
$ $ $    7 7 7 S S S" " "" " "  
! ! !  4 4 4 &;**& H
     - - -. . .- - -$ $ $ $ $r   r%  c                 f    | D ]-}t          |          rt          ||           " ||           .d S r    )r4   _flatten)r
  r   rw   s      r   r  r    sF      88 	Xa]]]]adddd r   c                 4    g }t          | |j                   |S )z'recursively flatten the list or tuple L)r  r   )r
  r   s     r   flattenr    s    
AQqxHr   c                 \    	  | t          j        |          j                  }|r|S |dz  },)zPapply func to the locals at each stack frame till func returns a non false valuer
   )r/   r   f_locals)rU  depth_s      r   find_localsr    s:    Du%%.//Qh
r   c                       e Zd Zd Zd ZdS )_FmtSelfDictc                 "    || _         || _        d S r    )obj_overrideArgs)r)   r  overrideArgss      r   r   z_FmtSelfDict.__init__  s    )r   c                     	 | j         |         S # t          $ r= 	 | j        j        |         cY S # t          $ r t	          | j        |          cY cY S w xY ww xY wr    )r  r   r  r  r  r   s     r   r   z_FmtSelfDict.__getitem__  s    	+%a(( 	+ 	+ 	++x(++++ + + +tx*******+	+s)    
A.AAAAAN)r   r   r   r   r   r   r   r   r  r    s2        * * *+ + + + +r   r  c                       e Zd ZdZd ZdS )FmtSelfDictz mixin to provide the _fmt methodc                 ,    t          | |          }||z  S r    )r  )r)   fmtr  r   s       r   _fmtzFmtSelfDict._fmt	  s    |,,Qwr   N)r   r   r   rV  r  r   r   r   r  r    s)        **    r   r  c                    g } |d          }g }| }|                                  D ]j} ||          }||z   |z   |k    s|g k    r|                    |           ||z   |z   }=|                    d                    |                     |g}|}k|g k    r(|                    d                    |                     |S )Nr  )r  r   r   )	txtmWSWr
  wsOr  r   lts	            r   _simpleSplitr    s    
A	CB
A	AYY[[  RUUR47B;;!R%%HHQKKKBAAHHSXXa[[!!!AAA"uuahhsxx{{###Hr   c                     ddl m t          |                               d          }||ffd	}|r-g }|D ]&}|                    t          |||                     '|}|S )Nr   )stringWidthrq  c                      | ||          S r    r   )textfNfSr  s      r   r  zsimpleSplit.<locals>.<lambda>!  s    D"b0I0I r   )reportlab.pdfbase.pdfmetricsr  rN   r  extendr  )	r  fontNamefontSizemaxWidthlinesr  r
  lr  s	           @r   simpleSplitr    s    888888dOO!!%((E!h	I	I	I	I	IB  	2 	2AHH\!HR001111Lr   c                     ddl m} | | S t          |           r|                     d          } ||           } |                     dd          } |                     dd          } |                     d	d
          } | S )zEscapes once onlyr   )escapeNr;   	&amp;amp;&amp;&amp;gt;&gt;&amp;lt;&lt;)xml.sax.saxutilsr  r<   rM   r  )r  r  r@   s      r   escapeTextOncer  )  s    ''''''|t}}-$++f--a6$<<D<<X..D<<W--D<<W--DKr   c                     t          |           r| S t          D ] }	 |                     |          c S #  Y xY wt          d| z            )Nz(cannot convert %r to filesystem encoding)rZ   fsEncodingsrM   r  )r   rI   s     r   fileName2FSEncr  5  sa    }} 
 	 	Cyy~~%%%
?"D
E
EEs   37c                     t          j        dg| dg          }t          j        |d          \  }}}	  ||            ||            ||           n# t          $ r Y nw xY wt	          |||          S )a  
    Loop over a collection with look-ahead and look-back.
    
    From Thomas Guest, 
    http://wordaligned.org/articles/zippy-triples-served-with-python
    
    Seriously useful looping tool (Google "zippy triples")
    lets you loop a collection and see the previous and next items,
    which get set to None at the ends.
    
    To be used in layout algorithms where one wants a peek at the
    next item coming down the pipe.

    Nr  )	itertoolschainteeStopIterationzip)r   r  prevthisnexts        r   prev_this_nextr  A  s      _dVUTF33F }VQ//D$T


T


T



   tT4   s   !A 
A"!A"c                    t          |           r|                     d          } t          |           dz
  }| dz  } d}dg}||k    r| |         dk    r^| |dz            dk    r|dxx         dz  cc<   |dz  }nO|d                                         |d<   ||k    r|                    d           n|dxx         | |         z  cc<   |dz  }||k    |d                                         |d<   |S )a  
    Splits the string s at every unescaped comma and returns the result as a list.
    To escape a comma, double it. Individual items are stripped.
    To avoid the ambiguity of 3 successive commas to denote a comma at the beginning
    or end of an item, add a space between the item seperator and the escaped comma.
    
    >>> commasplit(u'a,b,c') == [u'a', u'b', u'c']
    True
    >>> commasplit('a,, , b , c    ') == [u'a,', u'b', u'c']
    True
    >>> commasplit(u'a, ,,b, c') == [u'a', u',b', u'c']
    r;   r
   r  r   r  r  r	  )r<   rM   r   r   r   )r@   r  rT   r&  s       r   
commasplitr  [  s    qzz'qxx''1AqAIA	A
eA
Q$$Q4::1vt||"tQ""a44#bEEEQqTMEEE	1 Q$$ bEKKMMAbEHr   c                 @    d                     d | D                       S )a  
    Inverse of commasplit, except that whitespace around items is not conserved.
    Adds more whitespace than needed for simplicity and performance.
    
    >>> commasplit(commajoin(['a', 'b', 'c'])) == [u'a', u'b', u'c']
    True
    >>> commasplit((commajoin([u'a,', u' b ', u'c'])) == [u'a,', u'b', u'c']
    True
    >>> commasplit((commajoin([u'a ', u',b', u'c'])) == [u'a', u',b', u'c'] 
    r  c                 `    g | ]+}d t          |                              dd          z   d z   ,S )r  r  z,,)rN   r  )r>  rT   s     r   r?  zcommajoin.<locals>.<listcomp>  s8    SSS1till224???$FSSSr   )r   )r  s    r   	commajoinr  {  s&     99SSPQSSSTTTr   Tc                 6   |rt           j        j        pt           j        j        } ||           r| S t           j        j        }t           j                            |           s |D ]} |||           } ||          r|c S |rt          d| d|          | S )z*search for relative files in likely placeszcannot locate z with paths=)r   r  r   r   r   r  r  )r   pathsr   failexistsr  r8  r  s           r   findInPathsr    s    &7"'-Fvbzz"9GLE7==  	 	A%"++Cvc{{ 


L::"""UUKLLLIr   r  r  c                     t          j                    \  }}}t          | ||                    d | t	          |          |fD                                 |           dS )z,add msg to the args of an existing exceptionc              3      K   | ]}||V  	d S r    r   )r>  r  s     r   	<genexpr>z$annotateException.<locals>.<genexpr>  s'      BB1BQBBBBBBr   N)r/   rJ  r   r   r7   )r  rI   postMsgr  r   r$   r   s          r   rF   rF     s]    
,..EAaq388BBSVVG(<BBBCCDDQGGGGGr   c                 f   |                      dd          } |                      dd          } |                      dd          } |                      dd          } |                      dd	          } |                      dd          } |                      dd          } |                      dd          } | S )
zEnsure XML output is escaped just once, irrespective of input

    >>> escapeOnce('A & B')
    'A &amp; B'
    >>> escapeOnce('C &amp; D')
    'C &amp; D'
    >>> escapeOnce('E &amp;amp; F')
    'E &amp; F'

    &r  r  r  r  r  r  z&amp;#z&#)r  )r  s    r   
escapeOncer    s     <<W%%D
 <<W--D<<
F++D<<
F++D<<$''D <<W--D<<
F++D<<
F++DKr   c                       e Zd ZdZd ZdS )IdentStrz,useful for identifying things that get splitc                     t          |t                    r5|j        }|d dt          t	          |                    z             }|dz  }nd}|d|z  z  }t                              | |          }||_        |S )Nr  r
   r   z[%d])r2   r  _IdentStr__incr   r7   __new__)r  rT  incr)   s       r   r  zIdentStr.__new__  s{    eH%% 	+C-Qs3s88}}_--.E1HCCC#{{3u%%
r   Nr   r   r   rV  r  r   r   r   r  r    s)        66
 
 
 
 
r   r  c                       e Zd ZdZd ZdS )RLStringzallows specification of extra properties of a string using a dictionary of extra attributes
    eg fontName = RLString('proxima-nova-bold',
                    svgAttrs=dict(family='"proxima-nova"',weight='bold'))
    c                     t                               | |          }|                                D ]\  }}t          |||           |S r    )r7   r  r   r   )r  r$   r   r)   r   s        r   r  zRLString.__new__  sJ    {{3q!!::<< 	 	CAaD1r   Nr  r   r   r   r  r    s-             r   r  c                 N    t          |           s|                     d          } | S )zEforce filename strings to unicode so python can handle encoding stuffr;   )rZ   rM   r?   s    r   makeFileNamer    s&    Q<< HHVHr   c                   *    e Zd ZdZd Zd Zd Zd ZdS )FixedOffsetTZz&Fixed offset in minutes east from UTC.c                 J    t          j        ||          | _        || _        d S )N)hoursminutes)datetime	timedelta_FixedOffsetTZ__offset_FixedOffsetTZ__name)r)   r  r*   rn  s       r   r   zFixedOffsetTZ.__init__  s$     *a@@@r   c                     | j         S r    )r"  r)   dts     r   	utcoffsetzFixedOffsetTZ.utcoffset  s
    }r   c                     | j         S r    )r#  r%  s     r   tznamezFixedOffsetTZ.tzname  s
    {r   c                 *    t          j        d          S r   )r   r!  r%  s     r   dstzFixedOffsetTZ.dst  s    !!$$$r   N)r   r   r   rV  r   r'  r)  r+  r   r   r   r  r    sV        00      % % % % %r   r  c                   B    e Zd ZddZed             Zed             ZdS )	TimeStampNc                 *   |ddl m} t          j                            dd                                          }|s|r3|rt          |          nd}t          j        |          }dx}}d| _	        nit          j                    }t          t          j        |                    }t          t          j        dz            }t          j        dz  d	z  }d| _	        || _        || _        t          |          d d
         | _        || _        || _        d S )Nr   )	invariantSOURCE_DATE_EPOCHr  g   6AUTCg      @i  <   r  )r  r/  r   rb  r   r   r`   rd  rf  r)  ra   	localtimetimezoner   r  YMDhmsdhhdmm)r)   r/  r   r  r6  r7  s         r   r   zTimeStamp.__init__  s   555555JNN.r2288:: 
	 
	,AAQBMC#DKK	At~a(())Bdmv.//C=4'2-CDKBiimr   c                     | j         rCt          j                            | j        t	          | j        | j        | j                             S t          j                                        S r    )r)  r   fromtimestampr   r  r6  r7  nowr(   s    r   r   zTimeStamp.datetime  sR    ; 	+$2246-QUQYZ^Ze:f:fggg$((***r   c                 4    t          j        | j                  S r    )rd  re  r  r(   s    r   re  zTimeStamp.asctime  s    |DG$$$r   r    )r   r   r   r   propertyr   re  r   r   r   r-  r-    s^           * + + X+ % % X% % %r   r-  c                 V   t          |          s"t          dt          |           d|          t          |          }|                                }|st          dt          |           z            |r|d         dvrdnd}t          d||i t          |           	          S )
z/Can call down into e.g. object1.object2[4].attrzinvalid recursive access of r@  zempty recursive access of %sr   z[.(r  r  )r  )gr  )rW   rY  rH  rR   r   r  r   rc   )r  rn  r>  dots       r   recursiveGetAttrr@    s    ;;_iitTWyyyyY]Y](^___D>>D::<<DMz"@499"LMMM
6$q'..##BC<33tt,dsmmmDDDDr   c                    |                     d          }t          |          dk    rt          | ||           dS d                    |dd                   }|d         }t	          | |          }t          |||           dS )z7Can call down into e.g. object1.object2[4].attr = valuer@  r
   Nr	  )r  r   r   r   r@  )r  rn  rT  tokensmostlastparents          r   recursiveSetAttrrF    s     ZZ__F
6{{aT5!!!!!xxss$$bz!#t,,e$$$$$r   c                    |                     d          }t          |          dk    rt          | |           d S d                    |d d                   }|d         }t	          | |          }t          ||           d S )Nr@  r
   r	  )r  r   delattrr   r@  )r  rn  rB  rC  rD  rE  s         r   recursiveDelAttrrI    s    ZZ__F
6{{aTxxss$$bz!#t,,r   c              #      K   d}t          |           }||k     rR	 |                     d|          }| ||         V  |dz   }| sdS n# t          $ r | |d         V  Y dS w xY w||k     PdS dS )z:yield sublists of L separated by None; the Nones disappearr   Nr
   )r   indexr  )r
  rT   r  js       r   yieldNoneSplitsrM  $  s      	AAA
A##	QAAaC&LLL!AOeeO 	 	 	ABB%KKKEE	 A######s   )A A! A!)r;   r    )r   )NNr   )NN)Nr   r   r  )r   )r   )TF)r;   r  r  )rS  rV  r   r   r/   rd  rh   r   rF  astr   r  r   r   r   r   ior   hashlibr   reportlab.lib.rltempfiler   r	   r   r   r   r   PILr   r   r,  python_implementationisPyPyr"   r&   r!   r*   r-   r0   ra   rb   r4   r8   rg   r7   rE   strTypesrA   rJ   rN   rP   rR   rU   rW   r<   rZ   r]   rx   rz   r|   r   r   r   r   r   r  rl_execr   r   r   r   r   rc   r   rn  r   r   r   r   rO  r  re  rf  __RL_DIRr  r6  r%  r]  r$  r  r   r!  r-  NotImplementedErrorr5  r7  archiver
  r  r  r  r	  r   r  r  rD  r  r  r   r'  r   splitextr2  r.  r0  r3  r9  rE  rP  
haveImagesrR  ra  ri  ro  rw  urllib.parserx  ry  urllib.requestrz  r}  r  r  r  r  r   r  r   r  getmtimemktimer  r  r  r  r  r  r  r!  r  r%  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rF   r  r  r  r  tzinfor  r-  r@  rF  rI  rM  r   r   r   <module>ra     s   D 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8       W W W W W W W W             D D D D D D D D ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^              IKK	OOO+X+--v5FFFFF' ' '        $qs))          t       T$ZZ;B B BP P P PR R R RT T T T         & & &         P P P" " "" " " "K K KD D D> > >: : : 
'(6
"
"\ \ \     
      6. 6. 6. 6. 6.T 6. 6. 6.p 7e 
 
N 
 
 
 
 
       	+	,	,
h,HI0I0IHHx{HHH        1MF;=))) Y!!"G-"WXXXw 0 01F G GHHHRV#K'//(++K 26)NS%%NN++ +#1% +%'W%5%'W%5 i6!$RV( ( ( (.& & & "YwVXV]Vb     W^^H%%FM  !Y      '

IRW^^BG$4$4X$>$>q$A5$HII      B B B  'wy1D\\RR ,= ,= ,= ,=\ $
       * * *X         + * * * * * * * " " " " " "     8$ 8$ 8$ 8$t   0 0 0 0 !# 3 3 3 3 !gmRW=M c c c c !#rw?O[][e R R R R #%'."'BRdfdkdt  BF  BM 	j 	j 	j 	j - , , , , ,0 0 0& & &*  @ @ @ @ @ @ @ @D	 	 	 	 	k 	 	 	9 9 9t$ t$ t$ t$ t$ t$ t$ t$l  
     + + + + + + + +         "	 	 	
 
 
	F 	F 	F    ! ! !4  @U U U   H H H H
  6    s   	 	 	 	 	s 	 	 	  % % % % %HO % % % % % % % % % % %BE E E E
% 
% 
%      s%   -B B?G GC2K +K?