§
    æ˜ºh†f  ã                   ó|  — 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 d dl	m
Z
 d dlmZmZmZmZmZmZmZmZ d dlmZ d dlZd dlmZ d dlmZ d d	lmZ d d
lmZ d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z(  ej)        e*¦  «        Z+ G d„ de(¦  «        Z, G d„ dee¦  «        Z- G d„ de-¦  «        Z. G d„ de-¦  «        Z/ G d„ de-¦  «        Z0 G d„ de¦  «        Z1 G d„ de-¦  «        Z2 G d„ de-¦  «        Z3 G d„ de-¦  «        Z4 G d„ d e-¦  «        Z5 G d!„ d"e-¦  «        Z6 G d#„ d$e-¦  «        Z7 G d%„ d&e-¦  «        Z8dS )'é    N)ÚABC)ÚStringIO)ÚPath)ÚAnyÚDictÚIteratorÚListÚMappingÚOptionalÚSequenceÚUnion)Úurlparse)ÚDocument)Úget_from_dict_or_env)Ú
BaseLoader)ÚBlob)ÚAmazonTextractPDFParserÚDocumentIntelligenceParserÚPDFMinerParserÚPDFPlumberParserÚPyMuPDFParserÚPyPDFium2ParserÚPyPDFParser)ÚUnstructuredFileLoaderc                   ó   — e Zd ZdZdefd„ZdS )ÚUnstructuredPDFLoadera  Load `PDF` files using `Unstructured`.

    You can run the loader in one of two modes: "single" and "elements".
    If you use "single" mode, the document will be returned as a single
    langchain Document object. If you use "elements" mode, the unstructured
    library will split the document into elements such as Title and NarrativeText.
    You can pass in additional unstructured kwargs after mode to apply
    different unstructured settings.

    Examples
    --------
    from langchain_community.document_loaders import UnstructuredPDFLoader

    loader = UnstructuredPDFLoader(
        "example.pdf", mode="elements", strategy="fast",
    )
    docs = loader.load()

    References
    ----------
    https://unstructured-io.github.io/unstructured/bricks.html#partition-pdf
    Úreturnc                 ó6   — ddl m}  |dd| j        i| j        ¤ŽS )Nr   )Úpartition_pdfÚfilename© )Úunstructured.partition.pdfr   Ú	file_pathÚunstructured_kwargs)Úselfr   s     úp/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/document_loaders/pdf.pyÚ_get_elementsz#UnstructuredPDFLoader._get_elements8   s4   € Ø<Ð<Ð<Ð<Ð<Ð<àˆ}ÐQÐQ d¤nÐQ¸Ô8PÐQÐQÐQó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r'   r!   r(   r&   r   r       s@   € € € € € ðð ð.R˜tð Rð Rð Rð Rð Rð Rr(   r   c                   ó˜   — e Zd ZdZddœdedee         fd„Zdd„Ze	d	ede
fd
„¦   «         Ze	d	ede
fd„¦   «         Zedefd„¦   «         ZdS )ÚBasePDFLoaderz³Base Loader class for `PDF` files.

    If the file is a web path, it will download it to a temporary file, use it, then
        clean up the temporary file after completion.
    N©Úheadersr#   r0   c                óè  — || _         d| _        || _        d| j         v r)t          j                             | j         ¦  «        | _         t          j                             | j         ¦  «        �sJ|                      | j         ¦  «        �r/t          j	        ¦   «         | _
        t          j                             | j         ¦  «        \  }}t          j                             | j
        j        d|› �¦  «        }| j         | _        |                      | j         ¦  «        s›t          j        | j         | j        ¬¦  «        }|j        dk    rt%          d|j        z  ¦  «        ‚t'          |d¬¦  «        5 }|                     |j        ¦  «         ddd¦  «         n# 1 swxY w Y   t-          |¦  «        | _         dS dS t          j                             | j         ¦  «        st%          d	| j         z  ¦  «        ‚dS )
zÑInitialize with a file path.

        Args:
            file_path: Either a local, S3 or web path to a PDF file.
            headers: Headers to use for GET request to download a file from a web path.
        Nú~Útmpr/   éÈ   z3Check the url of your file; returned status code %sÚwb)Úmodez'File path %s is not a valid file or url)r#   Úweb_pathr0   ÚosÚpathÚ
expanduserÚisfileÚ_is_valid_urlÚtempfileÚTemporaryDirectoryÚtemp_dirÚsplitextÚjoinÚnameÚ
_is_s3_urlÚrequestsÚgetÚstatus_codeÚ
ValueErrorÚopenÚwriteÚcontentÚstr)r%   r#   r0   Ú_ÚsuffixÚtemp_pdfÚrÚfs           r&   Ú__init__zBasePDFLoader.__init__E   só  € ð #ˆŒØˆŒØˆŒØ�$”.Ð Ð ÝœW×/Ò/°´Ñ?Ô?ˆDŒNõ Œw�~Š~˜dœnÑ-Ô-ñ 	Y°$×2DÒ2DÀTÄ^Ñ2TÔ2Tñ 	YÝ$Ô7Ñ9Ô9ˆDŒMÝœ×(Ò(¨¬Ñ8Ô8‰IˆAˆvÝ”w—|’| D¤MÔ$6¸¸f¸¸ÑGÔGˆHØ œNˆDŒMØ—?’? 4¤>Ñ2Ô2ð 
/Ý”L ¤¸¼ÐFÑFÔF�Ø”= CÒ'Ð'Ý$ØMØœ-ñ(ñô ð õ
 ˜(¨Ð.Ñ.Ô.ð '°!Ø—G’G˜AœIÑ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'å!$ X¡¤�”��ð
/ð 
/õ ”—’ ¤Ñ/Ô/ð 	YÝÐFÈÌÑWÑXÔXÐXð	Yð 	Ys   Å-FÆFÆFr   c                 ó\   — t          | d¦  «        r| j                             ¦   «          d S d S )Nr?   )Úhasattrr?   Úcleanup©r%   s    r&   Ú__del__zBasePDFLoader.__del__f   s8   € Ý�4˜Ñ$Ô$ð 	$ØŒM×!Ò!Ñ#Ô#Ð#Ð#Ð#ð	$ð 	$r(   Úurlc                 óp   — t          | ¦  «        }t          |j        ¦  «        ot          |j        ¦  «        S )zCheck if the url is valid.)r   ÚboolÚnetlocÚscheme)rW   Úparseds     r&   r<   zBasePDFLoader._is_valid_urlj   s.   € õ ˜#‘”ˆÝ�F”MÑ"Ô"Ð:¥t¨F¬MÑ':Ô':Ð:r(   c                 óp   — 	 t          | ¦  «        }|j        dk    r	|j        rdS dS # t          $ r Y dS w xY w)zcheck if the url is S3Ús3TF)r   r[   rZ   rG   )rW   Úresults     r&   rC   zBasePDFLoader._is_s3_urlp   sR   € ð	Ý˜c‘]”]ˆFØŒ} Ò$Ð$¨¬Ð$Ø�tØ�5øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‚!' §
5´5c                 ó,   — | j         �| j         n| j        S ©N)r7   r#   rU   s    r&   ÚsourcezBasePDFLoader.source{   s   € à $¤Ð 9ˆtŒ}ˆ}¸t¼~ÐMr(   )r   N)r)   r*   r+   r,   rK   r   r   rQ   rV   ÚstaticmethodrY   r<   rC   Úpropertyrb   r!   r(   r&   r.   r.   >   sü   € € € € € ðð ð EIð Yð Yð Y #ð Y°8¸D´>ð Yð Yð Yð YðB$ð $ð $ð $ð ð;˜3ð ; 4ð ;ð ;ð ;ñ „\ð;ð
 ð˜ð  ð ð ð ñ „\ðð ðN˜ð Nð Nð Nñ „XðNð Nð Nr(   r.   c                   ó*   — e Zd ZdZdee         fd„ZdS )ÚOnlinePDFLoaderzLoad online `PDF`.r   c                 ól   — t          t          | j        ¦  «        ¦  «        }|                     ¦   «         S )zLoad documents.)r   rK   r#   Úload)r%   Úloaders     r&   rh   zOnlinePDFLoader.loadƒ   s'   € å&¥s¨4¬>Ñ':Ô':Ñ;Ô;ˆØ�{Š{‰}Œ}Ðr(   N)r)   r*   r+   r,   r	   r   rh   r!   r(   r&   rf   rf   €   s9   € € € € € ØÐð�d˜8”nð ð ð ð ð ð r(   rf   c                   ó˜   ‡ — e Zd ZdZ	 	 	 ddedeeeef                  dee         de	ddf
ˆ fd	„Z
dee         fd
„Zdee         fd„Zˆ xZS )ÚPyPDFLoaderzqLoad PDF using pypdf into list of documents.

    Loader chunks by page and stores page numbers in metadata.
    NFr#   Úpasswordr0   Úextract_imagesr   c                 óÀ   •— 	 ddl }n# t          $ r t          d¦  «        ‚w xY wt          ¦   «                              ||¬¦  «         t	          ||¬¦  «        | _        dS )úInitialize with a file path.r   NzCpypdf package not found, please install it with `pip install pypdf`r/   )rl   rm   )ÚpypdfÚImportErrorÚsuperrQ   r   Úparser)r%   r#   rl   r0   rm   rp   Ú	__class__s         €r&   rQ   zPyPDFLoader.__init__�   sz   ø€ ð	ØˆLˆLˆLˆLøÝð 	ð 	ð 	ÝØXñô ð ð	øøøõ 	‰Œ×Ò˜¨GÐÑ4Ô4Ð4Ý!¨8ÀNÐSÑSÔSˆŒˆˆó   ƒ ˆ"c                 óD   — t          |                      ¦   «         ¦  «        S ©zLoad given path as pages.©ÚlistÚ	lazy_loadrU   s    r&   rh   zPyPDFLoader.load    ó   € å�D—N’NÑ$Ô$Ñ%Ô%Ð%r(   c              #   ó  K  — | j         rAt          j        t          | j        d¦  «                             ¦   «         | j         ¬¦  «        }nt          j        | j        ¦  «        }| j                             |¦  «        E d{V —† dS ©úLazy load given path as pages.Úrb©r9   N©	r7   r   Ú	from_datarH   r#   ÚreadÚ	from_pathrs   Úparse©r%   Úblobs     r&   rz   zPyPDFLoader.lazy_load¤   ó�   è è € ð Œ=ð 	2Ý”>¥$ t¤~°tÑ"<Ô"<×"AÒ"AÑ"CÔ"CÈ$Ì-ÐXÑXÔXˆDˆDå”> $¤.Ñ1Ô1ˆDØ”;×$Ò$ TÑ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*r(   )NNF)r)   r*   r+   r,   rK   r   r   Úbytesr   rY   rQ   r	   r   rh   r   rz   Ú__classcell__©rt   s   @r&   rk   rk   ‰   så   ø€ € € € € ðð ð 15Ø"&Ø$ðTð TàðTð ˜5  e Ô,Ô-ðTð ˜$”ð	Tð
 ðTð 
ðTð Tð Tð Tð Tð Tð"&�d˜8”nð &ð &ð &ð &ð+à	�(Ô	ð+ð +ð +ð +ð +ð +ð +ð +r(   rk   c                   ót   ‡ — e Zd ZdZdddœdedee         defˆ fd„Zd	e	e
         fd
„Zd	ee
         fd„Zˆ xZS )ÚPyPDFium2Loaderz;Load `PDF` using `pypdfium2` and chunks at character level.NF©r0   rm   r#   r0   rm   c                óx   •— t          ¦   «                              ||¬¦  «         t          |¬¦  «        | _        dS )ro   r/   ©rm   N)rr   rQ   r   rs   )r%   r#   r0   rm   rt   s       €r&   rQ   zPyPDFium2Loader.__init__²   s8   ø€ õ 	‰Œ×Ò˜¨GÐÑ4Ô4Ð4Ý%°^ÐDÑDÔDˆŒˆˆr(   r   c                 óD   — t          |                      ¦   «         ¦  «        S rw   rx   rU   s    r&   rh   zPyPDFium2Loader.load½   r{   r(   c              #   ó  K  — | j         rAt          j        t          | j        d¦  «                             ¦   «         | j         ¬¦  «        }nt          j        | j        ¦  «        }| j                             |¦  «        E d{V —† dS r}   r�   r†   s     r&   rz   zPyPDFium2Loader.lazy_loadÁ   rˆ   r(   ©r)   r*   r+   r,   rK   r   r   rY   rQ   r	   r   rh   r   rz   rŠ   r‹   s   @r&   r�   r�   ¯   sÀ   ø€ € € € € ØEÐEð #'Ø$ð	Eð 	Eð 	Eàð	Eð ˜$”ð		Eð
 ð	Eð 	Eð 	Eð 	Eð 	Eð 	Eð&�d˜8”nð &ð &ð &ð &ð+à	�(Ô	ð+ð +ð +ð +ð +ð +ð +ð +r(   r�   c                   óv   — e Zd ZdZ	 	 	 	 	 ddededededed	efd
„Zededefd„¦   «         Z	de
e         fd„ZdS )ÚPyPDFDirectoryLoaderz…Load a directory with `PDF` files using `pypdf` and chunks at character level.

    Loader also stores page numbers in metadata.
    ú**/[!.]*.pdfFr9   ÚglobÚsilent_errorsÚload_hiddenÚ	recursiverm   c                 óZ   — || _         || _        || _        || _        || _        || _        d S ra   )r9   r—   r™   rš   r˜   rm   )r%   r9   r—   r˜   r™   rš   rm   s          r&   rQ   zPyPDFDirectoryLoader.__init__Ò   s7   € ð ˆŒ	ØˆŒ	Ø&ˆÔØ"ˆŒØ*ˆÔØ,ˆÔÐÐr(   r   c                 ó@   — t          d„ | j        D ¦   «         ¦  «         S )Nc              3   ó@   K  — | ]}|                      d ¦  «        V — ŒdS )ú.N©Ú
startswith)Ú.0Úparts     r&   ú	<genexpr>z3PyPDFDirectoryLoader._is_visible.<locals>.<genexpr>ä   s.   è è € ÐCÐC°�t—’ sÑ+Ô+ÐCÐCÐCÐCÐCÐCr(   )ÚanyÚpartsr€   s    r&   Ú_is_visiblez PyPDFDirectoryLoader._is_visibleâ   s$   € åÐCÐC¸¼
ÐCÑCÔCÑCÔCÐCÐCr(   c                 ó‚  — t          | j        ¦  «        }g }| j        r|                     | j        ¦  «        n|                     | j        ¦  «        }|D ]ê}|                     ¦   «         rÔ|                      |                     |¦  «        ¦  «        s| j        r¥	 t          t          |¦  «        | j        ¬¦  «        }|                     ¦   «         }|D ]}t          |¦  «        |j        d<   Œ|                     |¦  «         Œ¯# t          $ r.}| j        rt"                               |¦  «         n|‚Y d }~Œâd }~ww xY wŒë|S )Nr�   rb   )r   r9   rš   Úrglobr—   Úis_filer¦   Úrelative_tor™   rk   rK   rm   rh   ÚmetadataÚextendÚ	Exceptionr˜   ÚloggerÚwarning)	r%   ÚpÚdocsÚitemsÚiri   Úsub_docsÚdocÚes	            r&   rh   zPyPDFDirectoryLoader.loadæ   sO  € Ý�”‰OŒOˆØˆØ&*¤nÐK�—’˜œ	Ñ"Ô"Ð"¸!¿&º&ÀÄÑ:KÔ:KˆØð 	$ð 	$ˆAØ�yŠy‰{Œ{ð $Ø×#Ò# A§M¢M°!Ñ$4Ô$4Ñ5Ô5ð $¸Ô9Ið $ð
$Ý!,­S°©V¬VÀDÔDWÐ!XÑ!XÔ!X˜Ø#)§;¢;¡=¤=˜Ø#+ð <ð <˜CÝ58¸±V´V˜CœL¨Ñ2Ð2ØŸš HÑ-Ô-Ð-Ð-øÝ$ð $ð $ð $ØÔ-ð $Ý"ŸNšN¨1Ñ-Ô-Ð-Ð-à"#˜Gð .Ð-Ð-Ð-Ð-øøøøð$øøøøð
 ˆs   ÂA(DÄ
D;Ä$D6Ä6D;N)r–   FFFF)r)   r*   r+   r,   rK   rY   rQ   rc   r   r¦   r	   r   rh   r!   r(   r&   r•   r•   Ì   sÕ   € € € € € ðð ð #Ø#Ø!ØØ$ð-ð -àð-ð ð-ð ð	-ð
 ð-ð ð-ð ð-ð -ð -ð -ð  ðD˜$ð D 4ð Dð Dð Dñ „\ðDð�d˜8”nð ð ð ð ð ð r(   r•   c                   ó~   ‡ — e Zd ZdZddddœdedee         ded	ed
df
ˆ fd„Zd
e	e
         fd„Zd
ee
         fd„Zˆ xZS )ÚPDFMinerLoaderz"Load `PDF` files using `PDFMiner`.NFT)r0   rm   Úconcatenate_pagesr#   r0   rm   r¹   r   c                óÄ   •— 	 ddl m} n# t          $ r t          d¦  «        ‚w xY wt          ¦   «                              ||¬¦  «         t          ||¬¦  «        | _        dS )a  Initialize with file path.

        Args:
            extract_images: Whether to extract images from PDF.
            concatenate_pages: If True, concatenate all PDF pages into one a single
                               document. Otherwise, return one document per page.
        r   )Úextract_textúO`pdfminer` package not found, please install it with `pip install pdfminer.six`r/   )rm   r¹   N)Úpdfminer.high_levelr»   rq   rr   rQ   r   rs   )r%   r#   r0   rm   r¹   r»   rt   s         €r&   rQ   zPDFMinerLoader.__init__þ   sŽ   ø€ ð	Ø8Ð8Ð8Ð8Ð8Ð8Ð8øÝð 	ð 	ð 	Ýð-ñô ð ð	øøøõ 	‰Œ×Ò˜¨GÐÑ4Ô4Ð4Ý$Ø)Ð=Nð
ñ 
ô 
ˆŒˆˆó   ƒ
 Š$c                 óD   — t          |                      ¦   «         ¦  «        S )zEagerly load the content.rx   rU   s    r&   rh   zPDFMinerLoader.load  r{   r(   c              #   ó  K  — | j         rAt          j        t          | j        d¦  «                             ¦   «         | j         ¬¦  «        }nt          j        | j        ¦  «        }| j                             |¦  «        E d{V —† dS )zLazily load documents.r   r€   Nr�   r†   s     r&   rz   zPDFMinerLoader.lazy_load  rˆ   r(   r“   r‹   s   @r&   r¸   r¸   û   sÌ   ø€ € € € € Ø,Ð,ð #'Ø$Ø"&ð
ð 
ð 
àð
ð ˜$”ð	
ð
 ð
ð  ð
ð 
ð
ð 
ð 
ð 
ð 
ð 
ð8&�d˜8”nð &ð &ð &ð &ð+à	�(Ô	ð+ð +ð +ð +ð +ð +ð +ð +r(   r¸   c                   óV   ‡ — e Zd ZdZddœdedee         fˆ fd„Zdee	         fd„Z
ˆ xZS )	ÚPDFMinerPDFasHTMLLoaderz2Load `PDF` files as HTML content using `PDFMiner`.Nr/   r#   r0   c                ó˜   •— 	 ddl m} n# t          $ r t          d¦  «        ‚w xY wt          ¦   «                              ||¬¦  «         dS )ro   r   ©Úextract_text_to_fpr¼   r/   N)r½   rÅ   rq   rr   rQ   )r%   r#   r0   rÅ   rt   s       €r&   rQ   z PDFMinerPDFasHTMLLoader.__init__,  st   ø€ ð	Ø>Ð>Ð>Ð>Ð>Ð>Ð>øÝð 	ð 	ð 	Ýð-ñô ð ð	øøøõ 	‰Œ×Ò˜¨GÐÑ4Ô4Ð4Ð4Ð4r¾   r   c                 ó:  — ddl m} ddlm} ddlm} t          ¦   «         } || j        d¦  «        5 } |||d |¦   «         d¬¦  «         d	d	d	¦  «         n# 1 swxY w Y   d
| j        €| j        n| j        i}t          | 
                    ¦   «         |¬¦  «        gS )ú
Load file.r   rÄ   )ÚLAParams)Úopen_filenamer   Ú Úhtml)ÚcodecÚlaparamsÚoutput_typeNrb   ©Úpage_contentr«   )r½   rÅ   Úpdfminer.layoutrÈ   Úpdfminer.utilsrÉ   r   r#   r7   r   Úgetvalue)r%   rÅ   rÈ   rÉ   Úoutput_stringÚfpr«   s          r&   rh   zPDFMinerPDFasHTMLLoader.load8  s  € à:Ð:Ð:Ð:Ð:Ð:Ø,Ð,Ð,Ð,Ð,Ð,Ø0Ð0Ð0Ð0Ð0Ð0å ™
œ
ˆØˆ]˜4œ>¨4Ñ0Ô0ð 	°BØÐØØØØ!˜™œØ"ðñ ô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ¨¬Ð(=�d”n�nÀ4Ä=ð
ˆõ  m×&<Ò&<Ñ&>Ô&>ÈÐRÑRÔRÐSÐSs   ²AÁAÁA)r)   r*   r+   r,   rK   r   r   rQ   r	   r   rh   rŠ   r‹   s   @r&   rÂ   rÂ   )  sŠ   ø€ € € € € Ø<Ð<àDHð 
5ð 
5ð 
5 #ð 
5°8¸D´>ð 
5ð 
5ð 
5ð 
5ð 
5ð 
5ðT�d˜8”nð Tð Tð Tð Tð Tð Tð Tð Tr(   rÂ   c                   óh   ‡ — e Zd ZdZdddœdedee         deded	df
ˆ fd
„Z	ded	e
e         fd„Zˆ xZS )ÚPyMuPDFLoaderz!Load `PDF` files using `PyMuPDF`.NFrŽ   r#   r0   rm   Úkwargsr   c                ó°   •— 	 ddl }n# t          $ r t          d¦  «        ‚w xY wt          ¦   «                              ||¬¦  «         || _        || _        dS )ro   r   NzI`PyMuPDF` package not found, please install it with `pip install pymupdf`r/   )Úfitzrq   rr   rQ   rm   Útext_kwargs)r%   r#   r0   rm   rØ   rÚ   rt   s         €r&   rQ   zPyMuPDFLoader.__init__P  sz   ø€ ð	ØˆKˆKˆKˆKøÝð 	ð 	ð 	Ýð(ñô ð ð	øøøõ
 	‰Œ×Ò˜¨GÐÑ4Ô4Ð4Ø,ˆÔØ!ˆÔÐÐru   c                 óp  — |rt                                d|› d�¦  «         i | j        ¥|¥}t          || j        ¬¦  «        }| j        rAt          j        t          | j	        d¦  «         
                    ¦   «         | j        ¬¦  «        }nt          j        | j	        ¦  «        }|                     |¦  «        S )rÇ   zReceived runtime arguments zd. Passing runtime args to `load` is deprecated. Please pass arguments during initialization instead.)rÛ   rm   r   r€   )r®   r¯   rÛ   r   rm   r7   r   r‚   rH   r#   rƒ   r„   r…   )r%   rØ   rÛ   rs   r‡   s        r&   rh   zPyMuPDFLoader.loadd  sÉ   € àð 	Ý�NŠNðX¨fð Xð Xð Xñô ð ð
 5˜Ô)Ð4¨VÐ4ˆÝØ#°DÔ4Gð
ñ 
ô 
ˆð Œ=ð 	2Ý”>¥$ t¤~°tÑ"<Ô"<×"AÒ"AÑ"CÔ"CÈ$Ì-ÐXÑXÔXˆDˆDå”> $¤.Ñ1Ô1ˆDØ�|Š|˜DÑ!Ô!Ð!r(   )r)   r*   r+   r,   rK   r   r   rY   r   rQ   r	   r   rh   rŠ   r‹   s   @r&   r×   r×   M  s¯   ø€ € € € € Ø+Ð+ð #'Ø$ð"ð "ð "àð"ð ˜$”ð	"ð
 ð"ð ð"ð 
ð"ð "ð "ð "ð "ð "ð("˜Sð " T¨(¤^ð "ð "ð "ð "ð "ð "ð "ð "r(   r×   c                   ó  ‡ — e Zd ZdZ	 	 	 	 ddededed	ed
eeee	f                  de	ddfˆ fd„Z
edeeef         fd„¦   «         Zedefd„¦   «         Zedefd„¦   «         Zdefd„Zdeddfd„Zdedefd„Zdedefd„Zdee         fd„Zˆ xZS )ÚMathpixPDFLoaderz)Load `PDF` files using `Mathpix` service.Úmdéô  FNr#   Úprocessed_file_formatÚmax_wait_time_secondsÚshould_clean_pdfÚextra_request_datarØ   r   c                 ó,  •— t          |dd¦  «        | _        t          |dd¦  «        | _        |                     dd¦  «         |                     dd¦  «          t	          ¦   «         j        |fi |¤Ž || _        |�|ni | _        || _        || _	        dS )aç  Initialize with a file path.

        Args:
            file_path: a file for loading.
            processed_file_format: a format of the processed file. Default is "md".
            max_wait_time_seconds: a maximum time to wait for the response from
             the server. Default is 500.
            should_clean_pdf: a flag to clean the PDF file. Default is False.
            extra_request_data: Additional request data.
            **kwargs: additional keyword arguments.
        Úmathpix_api_keyÚMATHPIX_API_KEYÚmathpix_api_idÚMATHPIX_API_IDN)
r   ræ   rè   Úpoprr   rQ   rá   rä   râ   rã   )r%   r#   rá   râ   rã   rä   rØ   rt   s          €r&   rQ   zMathpixPDFLoader.__init__|  s¾   ø€ õ(  4ØÐ%Ð'8ñ 
ô  
ˆÔõ 3ØÐ$Ð&6ñ
ô 
ˆÔð
 	�
Š
Ð$ dÑ+Ô+Ð+Ø�
Š
Ð# TÑ*Ô*Ð*à�‰ŒÔ˜Ð-Ð- fÐ-Ð-Ð-Ø%:ˆÔ"à"4Ð"@ÐÐÀbð 	Ôð &;ˆÔ"Ø 0ˆÔÐÐr(   c                 ó    — | j         | j        dœS )N)Úapp_idÚapp_key)rè   ræ   rU   s    r&   Ú_mathpix_headersz!MathpixPDFLoader._mathpix_headers£  s   € àÔ-¸$Ô:NÐOÐOÐOr(   c                 ó   — dS )Nzhttps://api.mathpix.com/v3/pdfr!   rU   s    r&   rW   zMathpixPDFLoader.url§  s   € à/Ð/r(   c                 óR   — d| j         dii| j        ¥}dt          j        |¦  «        iS )NÚconversion_formatsTÚoptions_json)rá   rä   ÚjsonÚdumps)r%   Úoptionss     r&   ÚdatazMathpixPDFLoader.data«  s:   € ð ! 4Ô#=¸tÐ"Dð
àÔ%ð
ˆð ¥¤
¨7Ñ 3Ô 3Ð4Ð4r(   c                 óL  — t          | j        d¦  «        5 }d|i}t          j        | j        | j        || j        ¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     ¦   «         }d|v rt          d|d         › �¦  «        ‚d|v r
|d         }|S t          d¦  «        ‚)Nr   Úfile)r0   Úfilesrö   ÚerrorzMathpix request failed: Úpdf_idzUnable to send PDF to Mathpix.)	rH   r#   rD   ÚpostrW   rî   rö   ró   rG   )r%   rP   rù   ÚresponseÚresponse_datarû   s         r&   Úsend_pdfzMathpixPDFLoader.send_pdf³  sô   € Ý�$”. $Ñ'Ô'ð 	¨1Ø˜Q�KˆEÝ”}Ø” $Ô"7¸uÈ4Ì9ðñ ô ˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
 !Ÿš™œˆØ�mÐ#Ð#ÝÐP¸ÀgÔ8NÐPÐPÑQÔQÐQØ�}Ð$Ð$Ø" 8Ô,ˆFØˆMåÐ=Ñ>Ô>Ð>s   –,AÁAÁArû   c                 ó  — | j         dz   |z   }t          d| j        d¦  «        D ]ß}t          j        || j        ¬¦  «        }|                     ¦   «         }|                     dd¦  «        }|                     dd¦  «        }|�%d|› �}|�|d	|d
         › d�z  }t          |¦  «        ‚|                     dd¦  «        }	|	dk    r dS |	dk    rt          d¦  «        ‚t          d|	› d�¦  «         t          j
        d¦  «         Œàt          ‚)zmWait for processing to complete.

        Args:
            pdf_id: a PDF id.

        Returns: None
        ú/r   é   r/   rú   NÚ
error_infoz%Unable to retrieve PDF from Mathpix: z (Úidú)ÚstatusÚ	completedz#Unable to retrieve PDF from MathpixzStatus: z$, waiting for processing to complete)rW   Úrangerâ   rD   rE   rî   ró   rG   ÚprintÚtimeÚsleepÚTimeoutError)
r%   rû   rW   rL   rý   rþ   rú   r  Ú	error_msgr  s
             r&   Úwait_for_processingz$MathpixPDFLoader.wait_for_processingÂ  s4  € ð Œh˜‰n˜vÑ%ˆÝ�q˜$Ô4°aÑ8Ô8ð 	ð 	ˆAÝ”| C°Ô1FÐGÑGÔGˆHØ$ŸMšM™OœOˆMð "×%Ò% g¨tÑ4Ô4ˆEØ&×*Ò*¨<¸Ñ>Ô>ˆJàÐ ØKÀEÐKÐK�	àÐ)ØÐ!9 j°Ô&6Ð!9Ð!9Ð!9Ñ9�Iå  Ñ+Ô+Ð+à"×&Ò& x°Ñ6Ô6ˆFà˜Ò$Ð$Ø��Ø˜7Ò"Ð"å Ð!FÑGÔGÐGåÐM ÐMÐMÐMÑNÔNÐNÝ”
˜1‘”��ÝÐr(   c                 ó¾   — |                       |¦  «         | j        › d|› d| j        › �}t          j        || j        ¬¦  «        }|j                             d¦  «        S )Nr  rž   r/   zutf-8)r  rW   rá   rD   rE   rî   rJ   Údecode)r%   rû   rW   rý   s       r&   Úget_processed_pdfz"MathpixPDFLoader.get_processed_pdfç  sd   € Ø× Ò  Ñ(Ô(Ð(Ø”ÐAÐA˜FÐAÐA TÔ%?ÐAÐAˆÝ”< ¨TÔ-BÐCÑCÔCˆØÔ×&Ò& wÑ/Ô/Ð/r(   Úcontentsc                 ób  — d                      d„ |                     d¦  «        D ¦   «         ¦  «        }|                     dd¦  «                             dd¦  «        }|                     dd¦  «                             d	d
¦  «                             dd¦  «                             dd¦  «        }|S )ziClean the PDF file.

        Args:
            contents: a PDF file contents.

        Returns:

        ú
c                 ó<   — g | ]}|                      d ¦  «        °|‘ŒS )z![]rŸ   )r¡   Úlines     r&   ú
<listcomp>z.MathpixPDFLoader.clean_pdf.<locals>.<listcomp>÷  s)   € ÐQÐQÐQ�d¸$¿/º/È%Ñ:PÔ:PÐQˆTÐQÐQÐQr(   z	\section{z# Ú}rÊ   z\$ú$z\%ú%z\(ú(z\)r  )rA   ÚsplitÚreplace)r%   r  s     r&   Ú	clean_pdfzMathpixPDFLoader.clean_pdfí  s©   € ð —9’9ØQÐQ˜hŸnšn¨TÑ2Ô2ÐQÑQÔQñ
ô 
ˆð ×#Ò# L°$Ñ7Ô7×?Ò?ÀÀRÑHÔHˆð ×Ò˜U CÑ(Ô(ßŠW�U˜CÑ Ô ßŠW�U˜CÑ Ô ßŠW�U˜CÑ Ô ð	 	ð ˆr(   c                 óÐ   — |                       ¦   «         }|                      |¦  «        }| j        r|                      |¦  «        }| j        | j        |dœ}t          ||¬¦  «        gS )N)rb   r#   rû   rÏ   )rÿ   r  rã   r  rb   r   )r%   rû   r  r«   s       r&   rh   zMathpixPDFLoader.load  sg   € Ø—’‘”ˆØ×)Ò)¨&Ñ1Ô1ˆØÔ ð 	0Ø—~’~ hÑ/Ô/ˆHØ"œk¸¼ÈvÐVÐVˆÝ h¸ÐBÑBÔBÐCÐCr(   )rß   rà   FN)r)   r*   r+   r,   rK   ÚintrY   r   r   r   rQ   rd   rî   rW   Údictrö   rÿ   r  r  r  r	   r   rh   rŠ   r‹   s   @r&   rÞ   rÞ   y  sÔ  ø€ € € € € Ø3Ð3ð
 &*Ø%(Ø!&Ø7;ð%1ð %1àð%1ð  #ð%1ð  #ð	%1ð
 ð%1ð % T¨#¨s¨(¤^Ô4ð%1ð ð%1ð 
ð%1ð %1ð %1ð %1ð %1ð %1ðN ðP $ s¨C x¤.ð Pð Pð Pñ „XðPð ð0�Sð 0ð 0ð 0ñ „Xð0ð ð5�dð 5ð 5ð 5ñ „Xð5ð?˜#ð ?ð ?ð ?ð ?ð#¨#ð #°$ð #ð #ð #ð #ðJ0¨ð 0°ð 0ð 0ð 0ð 0ð #ð ¨#ð ð ð ð ð.D�d˜8”nð Dð Dð Dð Dð Dð Dð Dð Dr(   rÞ   c                   ó†   ‡ — e Zd ZdZ	 	 	 	 ddedeeeef                  dedee	         ded	dfˆ fd
„Z
d	ee         fd„Zˆ xZS )ÚPDFPlumberLoaderz$Load `PDF` files using `pdfplumber`.NFr#   rÛ   Údeduper0   rm   r   c                 óÂ   •— 	 ddl }n# t          $ r t          d¦  «        ‚w xY wt          ¦   «                              ||¬¦  «         |pi | _        || _        || _        dS )ro   r   NzMpdfplumber package not found, please install it with `pip install pdfplumber`r/   )Ú
pdfplumberrq   rr   rQ   rÛ   r$  rm   )r%   r#   rÛ   r$  r0   rm   r&  rt   s          €r&   rQ   zPDFPlumberLoader.__init__  sŠ   ø€ ð	ØÐÐÐÐøÝð 	ð 	ð 	Ýð+ñô ð ð	øøøõ 	‰Œ×Ò˜¨GÐÑ4Ô4Ð4Ø&Ð,¨"ˆÔØˆŒØ,ˆÔÐÐru   c                 ó0  — t          | j        | j        | j        ¬¦  «        }| j        rAt          j        t          | j        d¦  «         	                    ¦   «         | j        ¬¦  «        }nt          j
        | j        ¦  «        }|                     |¦  «        S )rÇ   )rÛ   r$  rm   r   r€   )r   rÛ   r$  rm   r7   r   r‚   rH   r#   rƒ   r„   r…   )r%   rs   r‡   s      r&   rh   zPDFPlumberLoader.load&  sˆ   € õ "ØÔ(Ø”;ØÔ.ð
ñ 
ô 
ˆð
 Œ=ð 	2Ý”>¥$ t¤~°tÑ"<Ô"<×"AÒ"AÑ"CÔ"CÈ$Ì-ÐXÑXÔXˆDˆDå”> $¤.Ñ1Ô1ˆDØ�|Š|˜DÑ!Ô!Ð!r(   )NFNF)r)   r*   r+   r,   rK   r   r
   r   rY   r   rQ   r	   r   rh   rŠ   r‹   s   @r&   r#  r#    sÁ   ø€ € € € € Ø.Ð.ð
 48ØØ"&Ø$ð-ð -àð-ð ˜g c¨3 hÔ/Ô0ð-ð ð	-ð
 ˜$”ð-ð ð-ð 
ð-ð -ð -ð -ð -ð -ð,"�d˜8”nð "ð "ð "ð "ð "ð "ð "ð "r(   r#  c                   óö   ‡ — e Zd ZdZ	 	 	 	 	 	 ddedeee                  dee         dee         dee         dee         d	ee         d
dfˆ fd„Z	d
e
e         fd„Zd
ee         fd„Zeded
efd„¦   «         Zˆ xZS )ÚAmazonTextractPDFLoadera  Load `PDF` files from a local file system, HTTP or S3.

    To authenticate, the AWS client uses the following methods to
    automatically load credentials:
    https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html

    If a specific credential profile should be used, you must pass
    the name of the profile from the ~/.aws/credentials file that is to be used.

    Make sure the credentials / roles used have the required policies to
    access the Amazon Textract service.

    Example:
        .. code-block:: python
            from langchain_community.document_loaders import AmazonTextractPDFLoader
            loader = AmazonTextractPDFLoader(
                file_path="s3://pdfs/myfile.pdf"
            )
            document = loader.load()
    Nr#   Útextract_featuresÚclientÚcredentials_profile_nameÚregion_nameÚendpoint_urlr0   r   c                 ó  •‡— t          ¦   «                              ||¬¦  «         	 ddlŠn# t          $ r t	          d¦  «        ‚w xY w|rˆfd„|D ¦   «         }ng }|s|s|rŠ	 ddl}	|�|	                     |¬¦  «        }
n|	                     ¦   «         }
i }|r||d<   |r||d<    |
j        di |¤Ž}n:# t          $ r t	          d
¦  «        ‚t          $ r}t          d¦  «        |‚d}~ww xY wt          ||¬¦  «        | _        dS )as  Initialize the loader.

        Args:
            file_path: A file, url or s3 path for input file
            textract_features: Features to be used for extraction, each feature
                               should be passed as a str that conforms to the enum
                               `Textract_Features`, see `amazon-textract-caller` pkg
            client: boto3 textract client (Optional)
            credentials_profile_name: AWS profile name, if not default (Optional)
            region_name: AWS region, eg us-east-1 (Optional)
            endpoint_url: endpoint url for the textract service (Optional)

        r/   r   NztCould not import amazon-textract-caller python package. Please install it with `pip install amazon-textract-caller`.c                 ó*   •— g | ]}‰j         |         ‘ŒS r!   )ÚTextract_Features)r¡   ÚxÚtcs     €r&   r  z4AmazonTextractPDFLoader.__init__.<locals>.<listcomp>l  s!   ø€ ÐKÐKÐK°A˜Ô,¨QÔ/ÐKÐKÐKr(   )Úprofile_namer-  r.  ÚtextractzRCould not import boto3 python package. Please install it with `pip install boto3`.z‚Could not load credentials to authenticate with AWS client. Please check that credentials in the specified profile name are valid.)r*  r+  )r5  )rr   rQ   Útextractcallerrq   ÚModuleNotFoundErrorÚboto3ÚSessionr+  r­   rG   r   rs   )r%   r#   r*  r+  r,  r-  r.  r0   Úfeaturesr8  ÚsessionÚclient_paramsr¶   r3  rt   s                @€r&   rQ   z AmazonTextractPDFLoader.__init__K  s©  øø€ õ. 	‰Œ×Ò˜¨GÐÑ4Ô4Ð4ð	Ø'Ð'Ð'Ð'Ð'øÝð 	ð 	ð 	Ý%ðOñô ð ð	øøøð
 ð 	ØKÐKÐKÐKÐ9JÐKÑKÔKˆHˆHàˆHà#ð 	 {ð 	°lð 	ðØ���à+Ð7Ø#ŸmšmÐ9Q˜mÑRÔR�G�Gð $Ÿmšm™oœo�Gà "�Øð ?Ø3>�M -Ñ0Øð AØ4@�M .Ñ1à'˜œÐDÐD°mÐDÐD��øåð ð ð Ý)ðBñô ð õ ð ð ð Ý ð.ñô ð ð	øøøøðøøøõ .ÀÐQWÐXÑXÔXˆŒˆˆs"   §, ¬AÁ#AB2 Â2"C)ÃC$Ã$C)c                 óD   — t          |                      ¦   «         ¦  «        S rw   rx   rU   s    r&   rh   zAmazonTextractPDFLoader.load�  r{   r(   c              #   óV  K  — | j         r0|                      | j         ¦  «        rt          | j         ¬¦  «        }nOt          j        | j        ¦  «        }t
                               |¦  «        dk    rt          d|j        › d�¦  «        ‚| j	         
                    |¦  «        E d{V —† dS )zLazy load documentsr€   é   z	the file zŒ is a multi-page document,                     but not stored on S3.                     Textract requires multi-page documents to be on S3.N)r7   rC   r   r„   r#   r)  Ú_get_number_of_pagesrG   r9   rs   r…   r†   s     r&   rz   z!AmazonTextractPDFLoader.lazy_load“  sÃ   è è € ð Œ=ð 		˜TŸ_š_¨T¬]Ñ;Ô;ð 		Ý˜Tœ]Ð+Ñ+Ô+ˆDˆDå”> $¤.Ñ1Ô1ˆDÝ&×;Ò;¸DÑAÔAÀAÒEÐEÝ ðI ¤	ð Ið Ið Iñô ð ð ”;×$Ò$ TÑ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*r(   r‡   c                 ó&  — 	 dd l }ddlm}m} n# t          $ r t          d¦  «        ‚w xY w| j        dk    rW|                      ¦   «         5 }|                     |¦  «        }t          |j
        ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S | j        dk    rXd}|                     |                      ¦   «         ¦  «        }t          |                     |¦  «        ¦  «        D ]
\  }}|dz  }Œ|S | j        dv rdS t          d| j        › �¦  «        ‚)	Nr   )ÚImageÚImageSequencezcCould not import pypdf or Pilloe python package. Please install it with `pip install pypdf Pillow`.zapplication/pdfz
image/tiffr?  )z	image/pngz
image/jpegzunsupported mime type: )rp   ÚPILrB  rC  rq   r7  ÚmimetypeÚas_bytes_ioÚ	PdfReaderÚlenÚpagesrH   Úas_bytesÚ	enumerater   rG   )	r‡   rp   rB  rC  Úinput_pdf_fileÚ
pdf_readerÚ	num_pagesÚimgrL   s	            r&   r@  z,AmazonTextractPDFLoader._get_number_of_pages¨  s“  € ð	ØˆLˆLˆLØ0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0øåð 	ð 	ð 	Ý%ðEñô ð ð	øøøð
 Œ=Ð-Ò-Ð-Ø×!Ò!Ñ#Ô#ð - ~Ø"Ÿ_š_¨^Ñ<Ô<�
Ý˜:Ô+Ñ,Ô,ð-ð -ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð -ð -ð Œ]˜lÒ*Ð*ØˆIØ—*’*˜TŸ]š]™_œ_Ñ-Ô-ˆCÝ! -×"8Ò"8¸Ñ"=Ô"=Ñ>Ô>ð ð ‘��1Ø˜Q‘�	�	ØÐØŒ]Ð9Ð9Ð9Ø�1åÐF°t´}ÐFÐFÑGÔGÐGs   ‚ �)Á)BÂBÂB)NNNNNN)r)   r*   r+   r,   rK   r   r   r   r   rQ   r	   r   rh   r   rz   rc   r   r   r@  rŠ   r‹   s   @r&   r)  r)  5  sb  ø€ € € € € ðð ð0 6:Ø $Ø26Ø%)Ø&*Ø"&ðBYð BYàðBYð $ H¨S¤MÔ2ðBYð ˜”ð	BYð
 #+¨3¤-ðBYð ˜c”]ðBYð ˜s”mðBYð ˜$”ðBYð 
ðBYð BYð BYð BYð BYð BYðH&�d˜8”nð &ð &ð &ð &ð+à	�(Ô	ð+ð +ð +ð +ð* ðH 4ð H¨Cð Hð Hð Hñ „\ðHð Hð Hð Hð Hr(   r)  c                   óz   ‡ — e Zd ZdZ	 	 ddedededee         ddf
ˆ fd	„Zde	e
         fd
„Zdee
         fd„Zˆ xZS )ÚDocumentIntelligenceLoaderz,Loads a PDF with Azure Document Intelligenceúprebuilt-documentNr#   r+  Úmodelr0   r   c                 óz   •— t          ||¬¦  «        | _        t          ¦   «                              ||¬¦  «         dS )aŸ  
        Initialize the object for file processing with Azure Document Intelligence
        (formerly Form Recognizer).

        This constructor initializes a DocumentIntelligenceParser object to be used
        for parsing files using the Azure Document Intelligence API. The load method
        generates a Document node including metadata (source blob and page number)
        for each page.

        Parameters:
        -----------
        file_path : str
            The path to the file that needs to be parsed.
        client: Any
            A DocumentAnalysisClient to perform the analysis of the blob
        model : str
            The model name or ID to be used for form recognition in Azure.

        Examples:
        ---------
        >>> obj = DocumentIntelligenceLoader(
        ...     file_path="path/to/file",
        ...     client=client,
        ...     model="prebuilt-document"
        ... )
        )r+  rS  r/   N)r   rs   rr   rQ   )r%   r#   r+  rS  r0   rt   s        €r&   rQ   z#DocumentIntelligenceLoader.__init__Æ  s=   ø€ õD 1¸ÀeÐLÑLÔLˆŒÝ‰Œ×Ò˜¨GÐÑ4Ô4Ð4Ð4Ð4r(   c                 óD   — t          |                      ¦   «         ¦  «        S rw   rx   rU   s    r&   rh   zDocumentIntelligenceLoader.loadë  r{   r(   c              #   ó|   K  — t          j        | j        ¦  «        }| j                             |¦  «        E d{V —† dS )r~   N)r   r„   r#   rs   r…   r†   s     r&   rz   z$DocumentIntelligenceLoader.lazy_loadï  sG   è è € õ Œ~˜dœnÑ-Ô-ˆØ”;×$Ò$ TÑ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*r(   )rR  N)r)   r*   r+   r,   rK   r   r   r   rQ   r	   r   rh   r   rz   rŠ   r‹   s   @r&   rQ  rQ  Ã  sÅ   ø€ € € € € Ø6Ð6ð )Ø"&ð#5ð #5àð#5ð ð#5ð ð	#5ð
 ˜$”ð#5ð 
ð#5ð #5ð #5ð #5ð #5ð #5ðJ&�d˜8”nð &ð &ð &ð &ð+à	�(Ô	ð+ð +ð +ð +ð +ð +ð +ð +r(   rQ  )9ró   Úloggingr8   r=   r
  Úabcr   Úior   Úpathlibr   Útypingr   r   r   r	   r
   r   r   r   Úurllib.parser   rD   Úlangchain_core.documentsr   Úlangchain_core.utilsr   Ú)langchain_community.document_loaders.baser   Ú1langchain_community.document_loaders.blob_loadersr   Ú0langchain_community.document_loaders.parsers.pdfr   r   r   r   r   r   r   Ú1langchain_community.document_loaders.unstructuredr   Ú	getLoggerÚ__file__r®   r   r.   rf   rk   r�   r•   r¸   rÂ   r×   rÞ   r#  r)  rQ  r!   r(   r&   ú<module>re     sø  ðØ €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ !Ð !Ð !Ð !Ð !Ð !à €€€Ø -Ð -Ð -Ð -Ð -Ð -Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5à @Ð @Ð @Ð @Ð @Ð @Ø BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð UÐ TÐ TÐ TÐ TÐ Tà	ˆÔ	˜8Ñ	$Ô	$€ðRð Rð Rð Rð RÐ2ñ Rô Rð Rð<?Nð ?Nð ?Nð ?Nð ?N�J ñ ?Nô ?Nð ?NðDð ð ð ð �mñ ô ð ð#+ð #+ð #+ð #+ð #+�-ñ #+ô #+ð #+ðL+ð +ð +ð +ð +�mñ +ô +ð +ð:,ð ,ð ,ð ,ð ,˜:ñ ,ô ,ð ,ð^++ð ++ð ++ð ++ð ++�]ñ ++ô ++ð ++ð\!Tð !Tð !Tð !Tð !T˜mñ !Tô !Tð !TðH'"ð '"ð '"ð '"ð '"�Mñ '"ô '"ð '"ðXQDð QDð QDð QDð QD�}ñ QDô QDð QDðh%"ð %"ð %"ð %"ð %"�}ñ %"ô %"ð %"ðPKHð KHð KHð KHð KH˜mñ KHô KHð KHð\1+ð 1+ð 1+ð 1+ð 1+ ñ 1+ô 1+ð 1+ð 1+ð 1+r(   