o
     ã›[¦w  ã                   @   sd  d dl Z d dlm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
Z
d dlZd dlmZmZ d dlmZmZmZmZ d dlmZmZ d dlZzd dlZW n eyc   d dlmZ Y nw zd dlmZ W n eyy   d dlZY nw zd dlm Z! W n ey�   d dl!Z!Y nw zd dlm"Z# W n ey§   d dl$m"Z# Y nw e %d¡Z&e'e(e)ej* +d¡ƒƒZ,e,d	k rÀed
ƒ‚e -d¡Z.zd dl/Z/W n eyÖ   dZ/Y nw zd dl0m1Z1 W n eyê   dZ1Y nw zd dl0m2Z2 W n eyþ   dZ2Y nw d dl3m4Z4 G dd„ de5ƒZ6dd„ Z7dd„ Z8�d�dd„Z9dd„ Z:�d‚dd„Z;e6�d�dd„ƒZ<�d�dd„Z=ed  Z>d!e Z?d"d"d"d#d#d$d$d%d%d&d&d'd'd(d(d)œZ@d%d#d(d'd&d%d#d"d*d+œ	ZAd$ZBe6�dƒd-d.„ƒZCe6d/d0„ ƒZDe6d1d2„ ƒZEd3d4„ ZFe6d5d6„ ƒZGd7d8„ ZHd aId9d:„ ZJeeeeed;œZKefd<d=„ZLd>e	jMv ZNeN�r ejOejOfZPnejOe
jQfZPG d?d@„ d@e5ƒZRe %dAejSejTB ¡ZUG dBdC„ dCƒZVdDdE„ ZWi dFedGdHdIƒ“dJedKdLdMƒ“dNedOdPdQƒ“dRedSdTdUƒ“dVedWdWdWƒ“dXed dQdQƒ“dYedZdQd[ƒ“d\edOdQdQƒ“d]ed^d_d`ƒ“daedbdbdcƒ“ddedQdedfƒ“dged d d ƒ“dhedQdTdiƒ“djed d dQƒ“dkedldmdnƒ“doedpdqdqƒ“dredsdtduƒ“i dvedGdHdIƒ“dwedxdxdxƒ“dyedWdWdWƒ“dzed d d ƒ“d{ed|d}d~ƒ“dedxdxdxƒ“d€edZdQd ƒ“d�ed‚dƒd„ƒ“d…edQdZd†ƒ“d‡edˆd‰dŠƒ“d‹edQdPdcƒ“dŒedcd�dŽƒ“d�ed dQdQƒ“d�ed d d‘ƒ“d’ed d‘d‘ƒ“d“edtd”d•ƒ“d–ed—d—d—ƒ“¥i d˜ed dˆd ƒ“d™ed—d—d—ƒ“dšed›dœd�ƒ“džed‘d d‘ƒ“dŸed d�d¡ƒ“d¢edQd£d ƒ“d¤ed¥d¦d§ƒ“d¨ed‘d d ƒ“d©edªd«d¬ƒ“d­ed®d¯d®ƒ“d°ed±d²d‘ƒ“d³ed¡d´d´ƒ“dµed¡d´d´ƒ“d¶ed d·d¸ƒ“d¹edºd d»ƒ“d¼edQd�d½ƒ“d¾ed d¿dQƒ“¥i dÀedƒdƒdƒƒ“dÁedƒdƒdƒƒ“dÂed„dÃdQƒ“dÄedÅdÆdÆƒ“dÇedQdSdOƒ“dÈedÆd‘dÆƒ“dÉedQd dQƒ“dÊedcdcdcƒ“dËedPdPdQƒ“dÌedQdUd ƒ“dÍedÎdpdÏƒ“dÐedÑdÑdÑƒ“dÒedWdWdWƒ“dÓed dÑd ƒ“dÔedÕdQd¡ƒ“dÖedÑdÑdÑƒ“d×edKdLdMƒ“¥i dØedxdxdxƒ“dÙedOdQdOƒ“dÚedQdƒdÛƒ“dÜedGdHdIƒ“dÝedWdWdWƒ“dÞedGdHdIƒ“dßedidàdàƒ“dáedâd dãƒ“däedxdxdåƒ“dæed d d ƒ“dçedQdQdOƒ“dèedOdéd£ƒ“dêedédédSƒ“dëedQdOdbƒ“dìedídîd ƒ“dïedQdSdiƒ“dðedÕdñdéƒ“¥i dòedOdÑdÑƒ“dóedôdQdQƒ“dõedSdSd‚ƒ“döed»d»d»ƒ“d÷edÃdødÃƒ“dùed»d»d»ƒ“dúedQdûdüƒ“dýedQd~d¬ƒ“dþedÏdÅdÿƒ“�d edud·dSƒ“�de�d�dd¥ƒ“�de�d�dd¥ƒ“�de�ddfdsƒ“�dedQdQdôƒ“�ded dQd ƒ“�d	ed¦did¦ƒ“�d
edSdOdéƒ“¥i �dedQd dQƒ“�dedÑd d ƒ“�de�ddidÿƒ“�ded d diƒ“�de�dd d»ƒ“�ded½�d�dƒ“�dedŽ�d�dƒ“�de�d�ddøƒ“�ded dS�dƒ“�ded±d¸d§ƒ“�de�d�d �d!ƒ“�d"edGdHdIƒ“�d#ed d d ƒ“�d$e�d%�d%�dƒ“�d&edbdQdSƒ“�d'edQde�d(ƒ“�d)edQde�d*ƒ“¥i �d+edQdsdÕƒ“�d,ed d dÑƒ“�d-e�d.dbdéƒ“�d/edÑdÑd ƒ“�d0ed��d1�d2ƒ“�d3edQdpd ƒ“�d4edQ�d5d ƒ“�d6edÎ�d�d7ƒ“�d8edø�d9dÿƒ“�d:e�d;�d<�d;ƒ“�d=e�d>dødøƒ“�d?e�d�dd½ƒ“�d@edQ�dA�dBƒ“�dCedQdÎ�dDƒ“�dEedi�d!�dFƒ“�dGedQ�dH�dIƒ“�dJe�dKd~�dKƒ“¥i �dLe�ddôdéƒ“�dMedÑd dÑƒ“�dNedQd d ƒ“�dOed¯d®d®ƒ“�dPe�dQdƒ�d(ƒ“�dRed‘�d5�dSƒ“�dTedSdÑ�dUƒ“�dVe�dW�dX�dYƒ“�dZedGdHdIƒ“�d[e�d\d‘�d]ƒ“�d^edQdbdøƒ“�d_ed~�d`�daƒ“�dbe�dH�dH�dHƒ“�dcedud·dTƒ“�dde�de�dfdiƒ“�dge�ddÑdÃƒ“�dhe�ddÑdÃƒ“¥i �diedQdSdSƒ“�djed dQdZƒ“�dke�dldãdÛƒ“�dmed‚dÛd£ƒ“�dned dÑdÑƒ“�doedñd¿dñƒ“�dpe�dq�dq�dqƒ“�dredGdHdIƒ“�dsedxdxdxƒ“�dtedGdHdIƒ“�duedWdWdWƒ“�dvedQ�dw�dxƒ“�dye�dzdô�d{ƒ“�d|edødãdøƒ“�d}edbds�dƒ“�d~edQdQdQƒ“�dedbdbdbƒ“¥edxdxdxƒed d d ƒed d d ƒedQdQd ƒe�ddid¦ƒ�d€œ¥ZXdS („  é    N)Úcopy)ÚColorÚtoColor)ÚTA_LEFTÚ	TA_CENTERÚTA_RIGHTÚ
TA_JUSTIFY)ÚinchÚcm)ÚunquotezS^.*?rgb[a]?[(]([0-9]+).*?([0-9]+).*?([0-9]+)(?:.*?(?:[01]\.(?:[0-9]+)))?[)].*?[ ]*$Ú.)é   é   z!Reportlab Version 2.1+ is needed!Ú	xhtml2pdf)ÚrenderPM)Ú	renderSVG)Ú
httpConfigc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Úmemoizedaü  
    A kwargs-aware memoizer, better than the one in python :)

    Don't pass in too large kwargs, since this turns them into a tuple of
    tuples. Also, avoid mutable types (as usual for memoizers)

    What this does is to create a dictionnary of {(*parameters):return value},
    and uses it as a cache for subsequent calls to the same method.
    It is especially useful for functions that don't rely on external variables
    and that are called often. It's a perfect match for our getSize etc...
    c                 C   s$   i | _ || _| jj| _| jj| _d S ©N)ÚcacheÚfuncÚ__doc__Ú__name__)Úselfr   © r   ú@/var/www/html/env/lib/python3.10/site-packages/xhtml2pdf/util.pyÚ__init__b   s   
zmemoized.__init__c                 O   sj   t t |¡ƒ}||f}z|| jvr| j|i |¤Ž}|| j|< | j| W S  ty4   | j|i |¤Ž Y S w r   )ÚtupleÚsixÚ	iteritemsr   r   Ú	TypeError)r   ÚargsÚkwargsÚ	args_plusÚkeyÚresr   r   r   Ú__call__h   s   

þzmemoized.__call__N)r   Ú
__module__Ú__qualname__r   r   r&   r   r   r   r   r   T   s    r   c                  C   sT   ddl } d}t ¡ \}}}|  ||¡|  ||¡ }ddd |dd… ¡|d f  S )z2
    Helper to get a nice traceback as string
    r   NzTraceback (innermost last):
z%-20s %sú éÿÿÿÿ)Ú	tracebackÚsysÚexc_infoÚ	format_tbÚformat_exception_onlyÚjoin)r+   ÚlimitÚ_typeÚvalueÚtbÚ_listr   r   r   ÚErrorMsgw   s   

ÿþr6   c                 C   s   t | ƒttfvr| gS t| ƒS r   )ÚtypeÚlistr   )r3   r   r   r   ÚtoList†   s   r9   c                 C   s`   |}|D ])\}}|}|du rg }nt |tƒs|g}||v r-| d|| ¡ t| |||Ž ƒ qdS )a'  
    Allows to apply one function to set of keys cheching if key is in container,
    also trasform ccs key to report lab keys.

    extras = Are extra params for func, it will be call like func(*[param1, param2]) 

    obj = frag
    keys = [(reportlab, css), ... ]
    container = cssAttr
    Nr   )Ú
isinstancer8   ÚinsertÚsetattr)ÚobjÚkeysÚ	containerr   ÚextrasÚcpextrasÚ	reportlabÚcssr   r   r   Útransform_attrsŒ   s   
þ€ørD   c                 C   sT   |D ]%}t ||ƒrt||ƒnd}|du r!t|tƒr!||v r!|| }t| ||ƒ qdS )zt
    Allows copy a list of attributes from object2 to object1.
    Useful for copy ccs attributes to fragment  
    N)ÚhasattrÚgetattrr:   Údictr<   )Úobj1Úobj2ÚattrsÚattrr3   r   r   r   Ú
copy_attrs§   s   ürL   Fc                 C   s&   |D ]}|r
t |ƒ}t| ||ƒ qdS )z<
    Allows set the same value to a list of attributes 
    N)r   r<   )r=   rJ   r3   Ú_copyrK   r   r   r   Ú	set_value³   s
   ýrN   c                 C   sÒ   t | tƒr| S t| ƒ ¡  ¡ } | dks| dkr|S | tv r!t|  S |  d¡rGt| ƒdkrGd| d  | d  | d  | d  | d  | d  } nt 	| ¡rcdd	„ t 	| ¡ 
¡ D ƒ\}}}d
|||f } n	 t| |ƒS )z[
    Convert to color value.
    This returns a Color object instance from a text bit.
    ÚtransparentÚnoneú#é   r   r   é   c                 S   ó   g | ]}t |ƒ‘qS r   )Úint©Ú.0Úxr   r   r   Ú
<listcomp>Ð   ó    zgetColor.<locals>.<listcomp>z#%02x%02x%02x)r:   r   ÚstrÚstripÚlowerÚCOLOR_BY_NAMEÚ
startswithÚlenÚrgb_reÚsearchÚgroupsr   )r3   ÚdefaultÚrÚgÚbr   r   r   ÚgetColor½   s,   
ÿÿÿÿ

rh   c                 C   s   | rt | ƒ ¡ dvr| S |S )N)rP   Úhidden©r[   r]   ©r3   rd   r   r   r   ÚgetBorderStyleÙ   s   rl   g      $@gUUUUUU…?g      à?g      è?g      ð?g      ô?g      ø?g      ü?ç       @)Ú1zxx-smallzx-smallÚ2ÚsmallÚ3ÚmediumÚ4ÚlargeÚ5zx-largeÚ6zxx-largeÚ7z	xxx-largeg      Ð?)	ÚlargerÚsmallerz+4z+3z+2z+1z-1z-2z-3ç        c              	   C   sV  �z”| }| du r|W S t | ƒtu r| W S t| tƒrt| ƒW S t | ƒttfv r+d | ¡} t| ƒ ¡  	¡  
dd¡} | dd… dkrLt| dd…  ¡ ƒt W S | dd… dkrat| dd…  ¡ ƒt W S | dd… dkrvt| dd…  ¡ ƒt W S | dd… d	kr‹t| dd
…  ¡ ƒt W S | dd… dkržt| dd…  ¡ ƒW S | dd… dkr³t| dd…  ¡ ƒd W S | dd… dkrÈt| dd…  ¡ ƒt W S | dd… dkrÝt| dd…  ¡ ƒt W S | dv räW dS |�rv| dd… dkrüt| dd…  ¡ ƒ| W S | dd… dk�rt| dd…  ¡ ƒ|d  W S | dd… dk�r,|t| dd…  ¡ ƒ d W S | dv �r4|W S | tv �rP|�rFtt|t|   ƒW S tt|t|   ƒW S | tv �rl|�rbtt|t|   ƒW S tt|t|   ƒW S tt|t| ƒ ƒW S zt| ƒ} W n t�y�   t d| ¡ | Y W S w td| ƒW S  t�yª   tjd||dd� | Y S w )a  
    Converts strings to standard sizes.
    That is the function taking a string of CSS size ('12pt', '1cm' and so on)
    and converts it into a float in a standard unit (in our case, points).

    >>> getSize('12pt')
    12.0
    >>> getSize('1cm')
    28.346456692913385
    NÚ ú,r   éþÿÿÿr
   ÚmmÚinr	   éüÿÿÿÚptÚpcg      (@Úpxr*   Úi)rP   Ú0Úautorz   ÚemÚexrm   ú%g      Y@)ÚnormalÚinheritzgetSize: Not a float %rr   zgetSize %r %rr   )r-   )r7   Úfloatr:   rU   r   r8   r0   r[   r\   r]   Úreplacer
   r~   r	   Údpi96Ú_relativeSizeTableÚmaxÚMIN_FONT_SIZEÚ_absoluteSizeTableÚ
ValueErrorÚlogÚwarnÚ	Exception)r3   ÚrelativeÚbaserd   Úoriginalr   r   r   ÚgetSize  st   






þþrš   c                 C   s€   |\}}| dk r||  } |dk r|| }|dur:|dur:|dkr&||  | }|dkr0|| | }| || | ||fS | || fS )zž
    As a stupid programmer I like to use the upper left
    corner of the document as the 0,0 coords therefore
    we need to do some fancy calculations
    r   Nr   )rX   ÚyÚwÚhÚpagesizeÚaxÚayr   r   r   Ú	getCoordsO  s   r¡   c                 C   sF   t | ƒ ¡ } t| ƒdkrtdƒ‚dd„ | D ƒ\}}}}t|||||ƒS )zÁ
    Parse sizes by corners in the form:
    <X-Left> <Y-Upper> <Width> <Height>
    The last to values with negative values are interpreted as offsets form
    the right and lower border.
    rR   zbox not defined right wayc                 S   rT   r   ©rš   ©rW   Úposr   r   r   rY   p  rZ   zgetBox.<locals>.<listcomp>©r[   Úsplitr`   r–   r¡   )Úboxrž   rX   r›   rœ   r�   r   r   r   ÚgetBoxe  s
   r¨   c           
      C   s†  |   dg ¡}t|ƒdkrdd„ |D ƒS t|   dd¡ƒ}t|   dd¡ƒ}t|   dd¡ƒ}t|   d	d¡ƒ}d
| v r^t| d
 ƒ}d| v rNt| d ƒ}|||  }nd| v r^t| d ƒ}|||  }d| v r‰t| d ƒ}	d| v ryt| d ƒ}|||	  }nd	| v r‰t| d	 ƒ}|||	  }|t|   dd¡ƒ7 }|t|   dd¡ƒ7 }|t|   dd¡ƒ7 }|t|   dd¡ƒ7 }|||  }	|||  }|||	|fS )zeCalculate dimensions of a frame

    Returns left, top, width and height of the frame in points.
    z-pdf-frame-boxrR   c                 S   rT   r   r¢   rV   r   r   r   rY   {  rZ   z&getFrameDimensions.<locals>.<listcomp>Útopr   ÚleftÚbottomÚrightÚheightÚwidthz
margin-topzmargin-leftzmargin-bottomzmargin-right)Úgetr`   rš   )
ÚdataÚ
page_widthÚpage_heightr§   r©   rª   r«   r¬   r­   r®   r   r   r   ÚgetFrameDimensionst  s<   r³   c                 C   sB   t | ƒ ¡ } t| ƒdkrtdƒ‚dd„ | D ƒ\}}t||dd|ƒS )z
    Pair of coordinates
    r   zposition not defined right wayc                 S   rT   r   r¢   r£   r   r   r   rY   ¢  rZ   zgetPos.<locals>.<listcomp>Nr¥   )Úpositionrž   rX   r›   r   r   r   ÚgetPosš  s
   rµ   c                 C   s   t | ƒ ¡ dv S )z Is it a boolean? )r›   Úyesrn   Útruerj   )Úsr   r   r   ÚgetBool¦  s   r¹   c                   C   s   t d7 a tt ƒS )z Unique ID r   )Ú_uidr[   r   r   r   r   ÚgetUID®  s   r»   )rª   ÚcenterÚmiddler¬   Újustifyc                 C   s   t  t| ƒ ¡ |¡S r   )Ú_alignmentsr¯   r[   r]   rk   r   r   r   ÚgetAlign¾  ó   rÀ   zgoogle.appenginec                   @   sV   e Zd ZdZeZdZdefdd„Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚpisaTempFileaY  
    A temporary file implementation that uses memory unless
    either capacity is breached or fileno is requested, at which
    point a real temporary file will be created and the relevant
    details returned

    If capacity is -1 the second strategy will never be used.

    Inspired by:
    http://code.activestate.com/recipes/496744/
    i (  r{   c                 C   sh   || _ tt|ƒ| j kƒ| _z
| j| j ƒ | _W n ty'   | jd ƒ | _Y nw |  |¡ |  d¡ dS )zæCreates a TempFile object containing the specified buffer.
        If capacity is specified, we use a real temporary file once the
        file gets larger than that size.  Otherwise, the data is stored
        in memory.
        r   N)	ÚcapacityrU   r`   ÚstrategyÚ
STRATEGIESÚ	_delegateÚ
IndexErrorÚwriteÚseek)r   ÚbufferrÃ   r   r   r   r   ß  s   þ
zpisaTempFile.__init__c                 C   s\   | j dkr,z| jd ƒ }| |  ¡ ¡ || _d| _ t d| j¡ W dS    d| _Y dS dS )zd
        Switch to next startegy. If an error occured,
        stay with the first strategy
        r   r   zCreated temporary file %sr*   N)	rÄ   rÅ   rÈ   ÚgetvaluerÆ   r”   r•   ÚnamerÃ   )r   Únew_delegater   r   r   ÚmakeTempFileñ  s   
øzpisaTempFile.makeTempFilec                 C   s   |   ¡  | jS )z,
        Get a named temporary file
        )rÎ   rÌ   ©r   r   r   r   ÚgetFileName  s   zpisaTempFile.getFileNamec                 C   s   |   ¡  | j ¡ S )z‰
        Forces this buffer to use a temporary file as the underlying.
        object and returns the fileno associated with it.
        )rÎ   rÆ   ÚfilenorÏ   r   r   r   rÑ   	  s   
zpisaTempFile.filenoc                 C   sN   | j dkr
| j ¡ S | j ¡  | j d¡ | j ¡ }t|tjƒs%| 	d¡}|S )zb
        Get value of file. Work around for second strategy.
        Always returns bytes
        r   úutf-8)
rÄ   rÆ   rË   ÚflushrÉ   Úreadr:   r   Úbinary_typeÚencode)r   r3   r   r   r   rË     s   




zpisaTempFile.getvaluec                 C   s|   | j dkr+| jdkr+t|ƒ}|| j krd}n|  dd¡ |  ¡ | | j k}|r+|  ¡  t|tjƒs6| 	d¡}| j
 |¡ dS )zV
        If capacity != -1 and length of file > capacity it is time to switch
        r   Tr   rÒ   N)rÃ   rÄ   r`   rÉ   ÚtellrÎ   r:   r   rÕ   rÖ   rÆ   rÈ   )r   r3   Ú	len_valueÚneeds_new_strategyr   r   r   rÈ      s   
ÿ
zpisaTempFile.writec                 C   s6   zt | j|ƒW S  ty   d| jj|f }t|ƒ‚w )Nz!object '%s' has no attribute '%s')rF   rÆ   ÚAttributeErrorÚ	__class__r   )r   rÌ   Úer   r   r   Ú__getattr__5  s   
ÿüzpisaTempFile.__getattr__N)r   r'   r(   r   rÅ   ÚCAPACITYr   rÎ   rÐ   rÑ   rË   rÈ   rÝ   r   r   r   r   rÂ   Í  s    rÂ   z2^data:(?P<mime>[a-z]+/[a-z]+);base64,(?P<data>.*)$c                   @   sB   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚpisaFileObjectz
    XXX
    Nc              
   C   sj  || _ d | _d | _d | _d | _d | _d | _|ptƒ }t|ƒtkr%| 	d¡}t
 d||¡ | d¡rNt |¡}| d¡| _t| d¡ƒ d¡}t |¡| _d S |r\t |¡js\t |¡}nt |¡}t
 d ||jf¡¡ |jdkrŸ|r‚| d¡r‚t ||d	d … ¡}t |¡}| ¡  d
d¡ d¡d | _| ¡ | _|| _d S |jdv �rst
 d |¡¡ |rµt ||¡}t
 d |¡¡ t || d¡d … ¡\}}| d¡rÚt j!|fi t"¤Ž}	nt  #|¡}	|	 $d|¡ |	 %¡ }
|
j&|
j'fdk�r*|
 (d
d¡ d¡d | _|| _t
 d¡ |
 (d¡dk�r!dd l)}|j*dt+ ,|
 -¡ ¡d�| _d S t.|
 -¡ ƒ| _d S t
 d |
j&|
j'f¡¡ zt |¡}W n tj/�yZ } zt
 0d |¡¡ W Y d }~d S d }~ww | ¡  d
d¡ d¡d | _| ¡ | _|| _d S t
 d¡ |�r†t1j2 3t1j2 4||¡¡}t1j2 5|¡�r³|| _|| _|  6|¡ | j�r«| j d¡�r«t7|dƒ| _d S t7|dƒ| _d S d S )NrÒ   zFileObject %r, Basepath: %rzdata:Úmimer°   zURLParts: {}Úfileú/r   zContent-Typer{   ú;r   )ÚhttpÚhttpsz#Sending request for {} with httplibzUri parsed: {}z//zhttps://ÚGET)éÈ   ÚOKÚherezcontent-encodingÚgzipÚrb)ÚmodeÚfileobjzReceived non-200 status: {}zCould not process uri: {}z-Unrecognized scheme, assuming local file pathÚtextre   )8ÚbasepathÚmimetyperá   r°   ÚuriÚlocalÚtmp_filer[   r7   Údecoder”   Údebugr_   Ú_rx_datauriÚmatchÚgroupÚurllib_unquoterÖ   Úbase64Ú	b64decodeÚurlparseÚschemeÚformatÚurljoinÚurllib2ÚurlopenÚinfor¯   r¦   ÚgeturlÚ	splithostÚfindÚhttplibÚHTTPSConnectionr   ÚHTTPConnectionÚrequestÚgetresponseÚstatusÚreasonÚ	getheaderrê   ÚGzipFiler   ÚStringIOrÔ   rÂ   Ú	HTTPErrorÚerrorÚosÚpathÚnormpathr0   ÚisfileÚsetMimeTypeByNameÚopen)r   rñ   rï   ÚmÚb64ÚurlPartsÚurlResponseÚserverr  ÚconnÚr1rê   rÜ   r   r   r   r   I  s¨   






ÿÿ



ÿÿ
ÿÿ€þÿÿ



÷zpisaFileObject.__init__c                 C   s(   | j d ur| j S | jd urt| jƒS d S r   )rá   r°   rÂ   rÏ   r   r   r   ÚgetFile³  s
   


zpisaFileObject.getFilec                 C   sf   |   ¡ rd S | jrt| jƒS | js/t ¡ | _| jr"t | j| j¡ n| j 	|  
¡ ¡ | j ¡  | jjS r   )ÚnotFoundrò   r[   ró   ÚtempfileÚNamedTemporaryFilerá   ÚshutilÚcopyfileobjrÈ   ÚgetDatarÓ   rÌ   rÏ   r   r   r   ÚgetNamedFileº  s   


zpisaFileObject.getNamedFilec                 C   sx   | j d ur| j S | jd ur:z
| j ¡ | _ W | j S    | jr9| j d¡r9t| jjdƒ| _| j ¡  d¡| _ Y | j S ‚ d S )Nrî   rë   rÒ   )r°   rá   rÔ   rð   r_   r  rÌ   rô   rÏ   r   r   r   r%  È  s   

úÿzpisaFileObject.getDatac                 C   s   | j d u o	| jd u S r   )rá   r°   rÏ   r   r   r   r   ×  rÁ   zpisaFileObject.notFoundc                 C   s8   t  |¡d }|durt  |¡d  d¡d | _dS dS )z Guess the mime type r   Nrã   )Ú	mimetypesÚ
guess_typer¦   rð   )r   rÌ   rð   r   r   r   r  Ú  s   ÿz pisaFileObject.setMimeTypeByNamer   )
r   r'   r(   r   r   r  r&  r%  r   r  r   r   r   r   rß   C  s    
jrß   c                  O   s   t | i |¤Ž}| ¡ rd S |S r   )rß   r   )ÚaÚkwrá   r   r   r   r  á  s   r  ÚactiveborderéÔ   éÐ   rç   Úactivecaptioné
   é$   éj   Ú	alicebluegŒöx!î?gy=˜ï?r   Úantiquewhiteg/R(__ï?gÑ<€E~}í?gŒ…!rúúê?Úappworkspaceé€   ÚaquaÚ
aquamarinegš{HøÞßß?g‡à¸Œ›šê?ÚazureÚ
backgroundé:   én   é¥   Úbeigeg]¤P¾¾î?g]3ùf››ë?ÚbisquegJzZ�œì?g¬Rz¦—˜è?ÚblackÚblanchedalmondg Q¡º¹é?ÚblueÚ
bluevioletg¿)¬TPQá?gå}Í‘•Å?g•eˆc]\ì?ÚbrowngŒ£rµ´ä?g§<ºÅ?Ú	burlywoodgH‰]ÛÛë?gkÖßç?gº„Coñðà?Ú
buttonfaceÚbuttonhighlightéÿ   ÚbuttonshadowÚ
buttontextÚ	cadetbluegŒÊÂ×××?gá
(ÔÓã?gºõšä?ÚcaptiontextÚ
chartreuseÚ	chocolategº×I}YZê?gÑË(–[ZÚ?gŒöx!¾?Úcoralg£¼Ô?Úcornflowerblueg.py¬Ù?gÈ	F³²â?g‡Q<¾½í?ÚcornsilkÚcrimsongvþÓ´?gŒöx!Î?ÚcyanÚdarkblueg%®c\qqá?ÚdarkcyanÚdarkgoldenrodgT ŒgÐÐà?g#¿~ˆ¦?Údarkgrayg÷Ì’ 55å?Ú	darkgreenÚdarkgreyÚ	darkkhakig%�»¶·ç?gRb×ööæ?g<õHƒÛÚÚ?ÚdarkmagentaÚdarkolivegreengF]kïSUÕ?gíóå™—Ç?Ú
darkorangeg‹2d’‘á?Ú
darkorchidg333333ã?gˆ»zÉ?gš™™™™™é?ÚdarkredÚ
darksalmong46<=í?gšë4ÒÒâ?g÷™�žÞ?Údarkseagreeng�×ƒIññá?gÖÿ9Ì——ç?Údarkslateblueg÷[;QÒ?g%W@¡žÎ?Údarkslategraygá
(ÔÓÓ?ÚdarkslategreyÚdarkturquoisegO®)�ÙÙé?gkGqŽ::ê?Ú
darkvioletgb…[>’’â?g!\…zzê?Údeeppinkgõ‚Osrâ?Údeepskybluegò˜�Êø÷ç?ÚdimgrayÚdimgreyÚ
dodgerblueg÷[;Qâ?Ú	firebrickg3¤ŠâUVæ?gó =EÁ?ÚfloralwhiteÚforestgreenÚfuchsiaÚ	gainsboroÚ
ghostwhiteÚgoldÚ	goldenrodg¨ip[[ë?gÎüjÀ?Úgrayg3ÂÛƒà?ÚgraytextÚgreenÚgreenyellowgbö²í´µå?ÚgreyÚ	highlightÚhighlighttextÚhoneydewÚhotpinkgé¸Ù•–æ?ÚinactiveborderÚinactivecaptionÚinactivecaptiontextÚ	indianredgTâ:Æ×?Úindigog.ŽÊMÔÒÒ?géÖkzPPà?Úinfobackgroundéá   ÚinfotextÚivoryÚkhakig �¨PÝÜì?ÚlavenderÚlavenderblushÚ	lawngreeng�1w-!ß?gäf¸ŸŸï?ÚlemonchiffonÚ	lightbluegò	Ùyë?Ú
lightcoralÚ	lightcyangÈ\Tì?ÚlightgoldenrodyellowÚ	lightgrayÚ
lightgreengÖáè*ÝÝí?Ú	lightgreyÚ	lightpinkgŸÍªÏÕÖæ?g§­Á88è?ÚlightsalmonÚlightseagreeng]QJVUå?ÚlightskyblueÚlightslategraygíÕÇCßÝÝ?g	^á?ÚlightslategreyÚlightsteelblueg~�úëæ?ÚlightyellowÚlimeÚ	limegreenÚlinenÚmagentaÚmaroonÚmediumaquamarinegš™™™™™Ù?Ú
mediumblueÚmediumorchidg ë©ÕWWç?ÚmediumpurplegßPølÜ?g£ x|{ë?Úmediumseagreeng™(Bêvvæ?g~q©J[\Ü?ÚmediumslatebluegÃ(ßÞÞ?gÃ¹†Ú?Úmediumspringgreeng™·ê:TSã?ÚmediumturquoiseÚmediumvioletredgÈëÁ¤øøè?g§<ºµ?gp³x±°à?ÚmenuÚmenutextÚmidnightbluegˆ»z¹?Ú	mintcreamÚ	mistyroseg/áÐ[<<ì?ÚmoccasingO=Òà¶¶æ?ÚnavajowhiteÚnavyÚoldlacegJëo	À¿ï?ÚoliveÚ	olivedrabgAG«ZÒÑá?g‹2d’‘Á?ÚorangeÚ	orangeredg¿)¬TPQÑ?Úorchidg<õHƒÛÚê?Úpalegoldenrodgµ£8Gí?Ú	palegreengÍ®{+ã?g•Öß€ï?Úpaleturquoiseg.ÿ!ýöõå?ÚpalevioletredÚ
papayawhipg<f 2þýí?gÖp‘{ººê?Ú	peachpuffgºfòÍ67ç?ÚperugûZ—¡ŸÏ?ÚpinkgA)Z¹è?g3â‘xyé?ÚplumgÃ·°n¼»ë?Ú
powderblueÚpurpleÚredÚ	rosybrownÚ	royalbluegéÖkzPPÐ?Úsaddlebrowngû–9]³?ÚsalmongJzZ�œÜ?Ú
sandybrowngx'Ÿžî?g%»””ä?gX9ÒØ?Ú	scrollbarÚseagreengTâ:ÆÇ?g±†‹ÜÓÕÕ?ÚseashellÚsiennag<š$–”Ô?g¡Ø
š–Æ?ÚsilverÚskyblueÚ	slatebluegpìÙs™šÚ?gé¸Ù•–Ö?Ú	slategrayÚ	slategreyÚsnowÚspringgreenÚ	steelblueg‹2d’‘Ñ?ÚtanÚtealÚthistleÚthreeddarkshadowé@   Ú
threedfaceÚthreedhighlightÚthreedlightshadowÚthreedshadowÚtomatogbg
�×ØØ?g*SÌAÐÑÑ?Ú	turquoisegÎüjÐ?gÃ¹†ê?ÚvioletÚwheatÚwhiteÚ
whitesmoke)ÚwindowÚwindowframeÚ
windowtextÚyellowÚyellowgreenr   )F)r   Nrz   )Yrú   r   Úloggingr'  Úos.pathr  Úrer#  Ústringr,   r!  rB   Úreportlab.lib.colorsr   r   Úreportlab.lib.enumsr   r   r   r   Úreportlab.lib.unitsr	   r
   r   r  ÚImportErrorÚhttp.clientÚclientÚurllib.requestr	  r   Úurllib.parseÚparserü   r   rù   ÚurllibÚcompilera   r   ÚmaprU   ÚVersionr¦   Ú_reportlab_versionÚ	getLoggerr”   ÚPyPDF2Úreportlab.graphicsr   r   Úxhtml2pdf.config.httpconfigr   Úobjectr   r6   r9   rD   rL   rN   rh   rl   r~   rŽ   r’   r�   r‘   rš   r¡   r¨   r³   rµ   r¹   rº   r»   r¿   rÀ   ÚmodulesÚGAEÚBytesIOrÅ   r"  rÂ   ÚMÚDOTALLrö   rß   r  r^   r   r   r   r   Ú<module>   sj  ÿÿÿÿÿ
ÿÿÿ#
ñ÷K

&
û	
þþrÿ ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ì5Ë6Ê7É8È9Ç:Æ;Å<Ä=Ã>Â?Á@ÀA¿B¾C½D¼E»FºG¹H¸I·J¶KµL´M³N²O±P°Q¯R®S­T¬U«VªW©X¨Y§Z¦[¥\¤]£^¢_¡` aŸbžc�dœe›fšg™h˜i—j–k•l”m“n’o‘p�q�rŽs�tŒu‹vŠw‰xˆy‡z†{…|„}ƒ~‚�  �ÿ  �þ  �ý  �ü  �û  �ú  �ù  �ø 	 �÷ 
 �ö  �õ  �ô  �ó  �ò  �ñ  �ð  �ï  �î  �í  �ì  �ë  �ê  �é  �è  �ç  �æ  �å  �ä  �ã  �â  �á   �à ! �ß " �Þ # �Ý $ �Ü % �Û & �Ú ' �Ù ( �Ø ) �× * �Ö + �Õ 
,


 �Ð