
    ji              $           d Z ddlZddlZddlmZ ddlZddlmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZmZ ddlmZ d	d
lmZmZmZmZ d	dlmZmZ d	dlmZmZ  ej        e           Z! ed          Z"de#de$fdZ%de#de&e#e#f         fdZ'e"(                    dg d          	 	 	 	 ddee# ej)        d          f         dee$ ej*        dd          f         deedz   ej*        dd          f         d ee$ ej*        d!d"          f         d#eddfd$            Z+de#de$fd%Z,e"(                    d&g d'          	 	 	 	 	 	 ddee#dz   ej)        d(          f         d)ee$ ej*        d*d+d,          f         d-ee$ ej*        d.d/          f         d0ee$ ej*        d1d2d3          f         d4ed#eddfd5            Z-d6e#dz  d4e#dz  d)e$d-e$d0e$d#e#dz  ddfd7Z.de#d)e$d-e$d0e$d#e#dz  ddfd8Z/e"(                    d9d:d;g          	 ddee# ej)        d<          f         d#eddfd=            Z0e"(                    d>g d?          	 	 	 ddee# ej)        d<          f         d@ee$ ej*        dAdBdC          f         dDee$ ej*        dEdF          f         d#eddf
dG            Z1e"(                    dHg dI          	 	 	 	 	 	 ddee# ej)        dJ          f         d0ee$ ej*        d1d2dK          f         d@ee$ ej*        dAdBdC          f         dLee$ ej*        dMdN          f         dOee2e#         dz   ej*        dP          f         dQee2e#         dz   ej*        dR          f         d#eddfdS            Z3e"(                    dTg dU          	 ddVee# ej)        dW          f         dXee# ej)        dY          f         d#eddfdZ            Z4e"(                    d[g d\          	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd]ee#dz   ej)        d^          f         d_ee#dz   ej)        d`          f         d>ee$ ej*        da          f         dbee$ ej*        dcdd          f         deee$ ej*        dfdg          f         dhee#dz   ej*        di          f         djee#dz   ej*        dk          f         dLee$ ej*        dMdl          f         dOee2e#         dz   ej*        dm          f         dQee2e#         dz   ej*        dn          f         doee#dz   ej*        dp          f         dqee$ ej*        drds          f         dtee$ ej*        dudv          f         dwee$ ej*        dxdydz          f         d#eddf d{            Z5e"(                    d|g d}          	 	 dd~ee# ej)        d          f         dee#dz   ej)        d          f         d#eddfd            Z6dS )z7Contains commands to interact with buckets via the CLI.    N)	Annotated)logging)BUCKET_PREFIX
BucketFileFilterMatcher_is_bucket_path_parse_bucket_path_split_bucket_id_and_prefix)SoftTemporaryDirectorydisable_progress_bars   )REPO_REGIONS   )	SearchOptTokenOpt
get_hf_apityper_factory)format_sizeprint_file_listing)OutputFormatWithAutooutz"Commands to interact with buckets.)helppathreturnc                 ,    |                      d          S )Nzhf://)
startswithr   s    ^/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/huggingface_hub/cli/buckets.py_is_hf_handler   5   s    ??7###    argumentc                     |                      t                    rt          |           S 	 t          |           S # t          $ r t	          d|  dt           d          w xY w)zParse a bucket argument accepting both 'namespace/name(/prefix)' and 'hf://buckets/namespace/name(/prefix)'.

    Returns:
        tuple: (bucket_id, prefix) where bucket_id is "namespace/bucket_name" and prefix may be empty string.
    zInvalid bucket argument: -. Must be in format namespace/bucket_name or znamespace/bucket_name)r   r   r	   r
   
ValueError)r!   s    r   _parse_bucket_argumentr%   9   s     =)) ,!(+++
*8444 
 
 
8 8 8 8 8 8
 
 	

s	   : &A create)zhf buckets create my-bucketz hf buckets create user/my-bucketz-hf buckets create hf://buckets/user/my-bucketz*hf buckets create user/my-bucket --privatez+hf buckets create user/my-bucket --exist-okz,hf buckets create user/my-bucket --region us)nameexamplesF	bucket_idzTBucket ID: bucket_name, namespace/bucket_name, or hf://buckets/namespace/bucket_nameprivatez	--privatezCreate a private bucket.regionz--regionzdCloud region in which to create the bucket. Can be one of 'us' or 'eu'. Requires Team plan or above.exist_okz
--exist-okz3Do not raise an error if the bucket already exists.tokenc                    t          |          }|                     t                    rk	 t          |           \  }}n3# t          $ r&}t          j        t          |                    d}~ww xY w|r t          j        d|  dt           d          |} |                    | |r|nd||          }	t          j
        d|	j        |	j                   dS )	zCreate a new bucket.r-   Nz-Cannot specify a prefix for bucket creation: . Use namespace/bucket_name or namespace/bucket_name.)r*   r+   r,   zBucket created)handleurl)r   r   r   r%   r$   typerBadParameterstrcreate_bucketr   resultr2   r3   )
r)   r*   r+   r,   r-   api	parsed_idprefixe
bucket_urls
             r   r&   r&   J   s   T 5
!
!
!CM** 
	- 6y A AIvv 	- 	- 	-$SVV,,,	- 	$W	 W W1>W W W   	""",	 #  J J
(9z~NNNNNNs   ? 
A/	!A**A/c                 |    |                      t                    r| t          t                    d         }n| }d|v S )zFCheck if argument is a bucket ID (namespace/name) vs just a namespace.N/)r   r   len)r!   r   s     r   _is_bucket_idrA      sA    =)) M**,,-$;r    z	list | ls)
zhf buckets listzhf buckets list huggingfacez$hf buckets list --search "my-prefix"zhf buckets list user/my-bucketz!hf buckets list user/my-bucket -Rz!hf buckets list user/my-bucket -hz%hf buckets list user/my-bucket --treez(hf buckets list user/my-bucket --tree -hz+hf buckets list hf://buckets/user/my-bucketz%hf buckets list user/my-bucket/sub -RzyNamespace (user or org) to list buckets, or bucket ID (namespace/bucket_name(/prefix) or hf://buckets/...) to list files.human_readablez--human-readablez-hz$Show sizes in human readable format.as_treez--treez3List files in tree format (only for listing files).	recursivez--recursivez-Rz0List files recursively (only for listing files).searchc                     | duot          |           }|r,|t          j        d          t          | ||||           dS t	          | |||||           dS )zList buckets or files in a bucket.

    When called with no argument or a namespace, lists buckets.
    When called with a bucket ID (namespace/bucket_name), lists files in the bucket.
    Nz'Cannot use --search when listing files.)r!   rB   rC   rD   r-   )	namespacerE   rB   rC   rD   r-   )rA   r4   r5   _list_files_list_buckets)r!   rB   rC   rD   rE   r-   is_file_modes          r   list_cmdrK      s    r 4'CM(,C,CL 
$%NOOO)	
 	
 	
 	
 	
 	
 	)	
 	
 	
 	
 	
 	
r    rG   c                    |rt          j        d          |rt          j        d          | K|                     t                    r1| t	          t                    d         } |                     d          } t          |          }fd|                    | |          D             }t          j	        |ddd	
           dS )zList buckets in a namespace.z'Cannot use --tree when listing buckets.z,Cannot use --recursive when listing buckets.Nr?   r/   c                     g | ]:}|j         |j        rt          |j                  n|j        |j        |j        d ;S ))idr*   sizetotal_files
created_at)rN   r*   r   rO   rP   rQ   ).0bucketrB   s     r   
<listcomp>z!_list_buckets.<locals>.<listcomp>   se     	 	 	  )~@N_K^<<<TZT_!- +	
 	
	 	 	r    )rG   rE   right)rO   rP   )
alignments)
r4   r5   r   r   r@   rstripr   list_bucketsr   table)rG   rE   rB   rC   rD   r-   r9   itemss     `     r   rI   rI      s      L !JKKK Q !OPPP !5!5m!D!Dc-00223	$$S))	
5
!
!
!C	 	 	 	 &&6&JJ	 	 	E Ie I IJJJJJJr    c                    |r.t           j        t          j        k    rt	          j        d          t          |          }	 t          |           \  }}n3# t          $ r&}t	          j        t          |                    d}~ww xY wt          |                    ||pd|                    }	t          |	|||           dS )zList files in a bucket.z%Cannot use --tree with --format json.r/   Nr;   rD   )rB   rC   rD   )r   moder   jsonr4   r5   r   r%   r$   r6   listlist_bucket_treer   )
r!   rB   rC   rD   r-   r9   r)   r;   r<   rZ   s
             r   rH   rH     s      J383888 !HIII
5
!
!
!C)28<<	66 ) ) ) Q((() >T 	 	
 	
 E u^WXabbbbbbs   A 
B!B  Binfozhf buckets info user/my-bucketz+hf buckets info hf://buckets/user/my-bucketzFBucket ID: namespace/bucket_name or hf://buckets/namespace/bucket_namec                 
   t          |          }	 t          |           \  }}n3# t          $ r&}t          j        t          |                    d}~ww xY w|                    |          }t          j        |d           dS )zGet info about a bucket.r/   NrN   )id_key)	r   r%   r$   r4   r5   r6   bucket_infor   dict)r)   r-   r9   r:   _r<   rS   s          r   ra   ra   $  s    " 5
!
!
!C)-i88	11 ) ) ) Q((() __Y''FHVD!!!!!!s   % 
A!AAdelete)z hf buckets delete user/my-bucketz-hf buckets delete hf://buckets/user/my-bucketz&hf buckets delete user/my-bucket --yesz-hf buckets delete user/my-bucket --missing-okyesz--yesz-yzSkip confirmation prompt.
missing_okz--missing-okz3Do not raise an error if the bucket does not exist.c                    |                      t                    rl	 t          |           \  }}n3# t          $ r&}t	          j        t          |                    d}~ww xY w|r t	          j        d|  dt           d          |} n$d| vr t	          j        d|  dt           d          t          j        d|  d	|
           t          |          }|
                    | |           t          j        d|            dS )zDelete a bucket.

    This deletes the entire bucket and all its contents. Use `hf buckets rm` to remove individual files.
    Nz-Cannot specify a prefix for bucket deletion: r0   r1   r?   zInvalid bucket ID: r#   z(Are you sure you want to delete bucket ''?rh   r/   )ri   zBucket deleted)r)   )r   r   r%   r$   r4   r5   r6   r   confirmr   delete_bucketr8   )r)   rh   ri   r-   r:   r;   r<   r9   s           r   rg   rg   @  sj   J M** 
	- 6y A AIvv 	- 	- 	-$SVV,,,	- 	$W	 W W1>W W W   			I		 a) a a;Ha a a
 
 	

 KH9HHHcRRRR
5
!
!
!CiJ777J9555555s   / 
A!AAzremove | rm)z)hf buckets remove user/my-bucket/file.txtz2hf buckets rm hf://buckets/user/my-bucket/file.txtz.hf buckets rm user/my-bucket/logs/ --recursivez:hf buckets rm user/my-bucket --recursive --include "*.tmp"z8hf buckets rm user/my-bucket/data/ --recursive --dry-runzBucket path: namespace/bucket_name/path or hf://buckets/namespace/bucket_name/path. With --recursive, namespace/bucket_name is also accepted to target all files.z0Remove files recursively under the given prefix.dry_runz	--dry-runz8Preview what would be deleted without actually deleting.includezQInclude only files matching pattern (can specify multiple). Requires --recursive.excludezLExclude files matching pattern (can specify multiple). Requires --recursive.c                    	 t          |           \  }n3# t          $ r&}t          j        t	          |                    d}~ww xY w|dk    r|st          j        d d d          |s|r|st          j        d          t          |          }	|r*t          j        d          }
g }|	                    |	                    d	          pdd
          D ]R}t          |t                    r;|                    |           |
                    dt          |           d           S|
                    dt          |           d           |s|r t!          ||          fd|D             }n|}d |D             }t#          d |D                       }t%          |d
          }|st          j        d           dS t          |           d| }|sP|sNt          j        d                    d |D                                  t          j        d| d dd           |rMt          j        d                    fd|D                                  t          j        d| d           dS |	                    |           t          j        d | d d!t          |          |"           dS |	                    d	          }|st          j        d#          |r7t          j        d$t0            d	|            t          j        d%           dS t          j        d&| d' d|           |	                    |g           t          j        d(|)           dS )*zbRemove files from a bucket.

    To delete an entire bucket, use `hf buckets delete` instead.
    N z?No file path specified. To remove files, provide a path (e.g. 'zd/FILE') or use --recursive to remove all files. To delete the entire bucket, use `hf buckets delete z`.z,--include and --exclude require --recursive.r/   zListing files from remoter?   Tr\   zListing files from remote (z files))include_patternsexclude_patternsc                 H    g | ]}                     |j                  |S  )matchesr   )rR   fmatchers     r   rT   zremove.<locals>.<listcomp>  s,    MMM1W__QV5L5LMQMMMr    c                     g | ]	}|j         
S rw   r   rR   ry   s     r   rT   zremove.<locals>.<listcomp>  s    444af444r    c              3   $   K   | ]}|j         V  d S N)rO   r|   s     r   	<genexpr>zremove.<locals>.<genexpr>  s$      77A777777r    )rB   zNo files to remove.z file(s) totaling 
c              3       K   | ]	}d | V  
dS )z  Nrw   )rR   r   s     r   r   zremove.<locals>.<genexpr>  s(      BBt{D{{BBBBBBr    zRemove z from 'rk   Frl   c              3   6   K   | ]}d t             d| V  dS )delete: r?   N)r   )rR   r   r)   s     r   r   zremove.<locals>.<genexpr>  s:      ccPTK-KKKTKKccccccr    z
(dry run) z would be removed.)rg   zRemoved ')r)   files_deletedrO   zFile path cannot be empty.r   z"(dry run) 1 file would be removed.zRemove 'z' from 'zFile removed)r   r)   )r%   r$   r4   r5   r6   r   r   statusr`   rW   
isinstancer   appendupdater@   doner   sumr   textjoinrm   batch_bucket_filesr8   r   )r!   rD   rh   ro   rp   rq   r-   r;   r<   r9   r   	all_filesitemmatched_files
file_paths
total_sizesize_strcount_label	file_pathr)   rz   s                      @@r   remover   }  s\   z)28<<	66 ) ) ) Q((() ||I| R R RDMR R R
 
 	
 	 Q7 QI Q !OPPP
5
!
!
!C <H788&(	((==%%- ) 
 
 	U 	UD
 $
++ U  &&&SC	NNSSSTTTI#i..IIIJJJ 	&g 	&#WwWWWGMMMM	MMMMM%M44m444
7777777
z$??? 	H*+++FZFFHFF 	P7 	PHTYYBBzBBBBBCCCKC+CCiCCCOOOO 	HTYYccccXbcccccdddHA+AAABBBFy<<<
7{779777j//		
 	
 	
 	
 	
 	
 MM#&&	 	C$%ABBB 	HFFyFF9FFGGGH9:::F?y??)???SIIIIy)===
>	YGGGGGGs    
A!AAmove)z/hf buckets move user/old-bucket user/new-bucketz/hf buckets move user/my-bucket my-org/my-bucketzIhf buckets move hf://buckets/user/old-bucket hf://buckets/user/new-bucketfrom_idzMSource bucket ID: namespace/bucket_name or hf://buckets/namespace/bucket_nameto_idzRDestination bucket ID: namespace/bucket_name or hf://buckets/namespace/bucket_namec                 R   t          |           \  }}|r t          j        d|  dt           d          t          |          \  }}|r t          j        d| dt           d          t	          |          }|                    ||           t          j        d||           dS )z2Move (rename) a bucket to a new name or namespace.z)Cannot specify a prefix for bucket move: r0   r1   r/   )r   r   zBucket movedN)r%   r4   r5   r   r   move_bucketr   r8   )r   r   r-   parsed_from_idfrom_prefixparsed_to_id	to_prefixr9   s           r   r   r   
  s    2 #9"A"ANK 
 S S S-:S S S
 
 	
 5U;;L) 
 S S S-:S S S
 
 	

 5
!
!
!COON,O???J~~\JJJJJJr    sync)z2hf buckets sync ./data hf://buckets/user/my-bucketz2hf buckets sync hf://buckets/user/my-bucket ./dataz;hf buckets sync ./data hf://buckets/user/my-bucket --deletez^hf buckets sync hf://buckets/user/my-bucket ./data --include "*.safetensors" --exclude "*.tmp"zIhf buckets sync ./data hf://buckets/user/my-bucket --plan sync-plan.jsonlz'hf buckets sync --apply sync-plan.jsonlz<hf buckets sync ./data hf://buckets/user/my-bucket --dry-runzChf buckets sync ./data hf://buckets/user/my-bucket --dry-run | jq .sourcezKSource path: local directory or hf://buckets/namespace/bucket_name(/prefix)destzPDestination path: local directory or hf://buckets/namespace/bucket_name(/prefix)z/Delete destination files not present in source.ignore_timesz--ignore-timesz;Skip files only based on size, ignoring modification times.ignore_sizesz--ignore-sizesz<Skip files only based on modification times, ignoring sizes.planz=Save sync plan to JSONL file for review instead of executing.applyz#Apply a previously saved plan file.z5Print sync plan to stdout as JSONL without executing.z6Include files matching pattern (can specify multiple).z6Exclude files matching pattern (can specify multiple).filter_fromz(Read include/exclude patterns from file.existingz
--existingzASkip creating new files on receiver (only update existing files).ignore_existingz--ignore-existingzCSkip updating files that exist on receiver (only create new files).verbosez	--verbosez-vz%Show detailed logging with reasoning.c                     t          |          }|                    | ||||||||	|
||||t          j                               |r-t          j                    st          j        d| d           dS dS dS )z0Sync files between local directory and a bucket.r/   )r   r   rg   r   r   r   r   rp   rq   r   r   r   ro   r   quietzRun `hf buckets sync --apply z` to execute this plan.N)r   sync_bucketr   is_quiethint)r   r   rg   r   r   r   r   ro   rp   rq   r   r   r   r   r-   r9   s                   r   r   r   <  s    X 5
!
!
!COO!!'lnn    "  PCLNN PNNNNOOOOOP P P Pr    cp)z5hf buckets cp hf://buckets/user/my-bucket/config.jsonz=hf buckets cp hf://buckets/user/my-bucket/config.json ./data/zDhf buckets cp hf://buckets/user/my-bucket/config.json my-config.jsonz7hf buckets cp hf://buckets/user/my-bucket/config.json -z8hf buckets cp my-config.json hf://buckets/user/my-bucketz>hf buckets cp my-config.json hf://buckets/user/my-bucket/logs/zKhf buckets cp my-config.json hf://buckets/user/my-bucket/remote-config.jsonz7hf buckets cp - hf://buckets/user/my-bucket/config.jsonzchf buckets cp hf://buckets/user/my-bucket/logs hf://buckets/user/archive-bucket/  # nests logs/ dirzihf buckets cp hf://buckets/user/my-bucket/logs/ hf://buckets/user/archive-bucket/  # copies contents onlyzehf buckets cp hf://datasets/user/my-dataset/processed/ hf://buckets/user/my-bucket/dataset/processed/srczMSource: local file, any hf:// handle (model, dataset, bucket), or - for stdindstz@Destination: local path, bucket hf://... handle, or - for stdoutc                 
   t          |          }t          |           }|duot          |          }t          |           }|duot          |          }| dk    }|dk    }	|rf|rd	 |                    | |           n3# t          $ r&}
t          j        t          |
                    d}
~
ww xY wt          j	        d| |           dS |s.|s,|s*|t          j        d          t          j        d          |r|st          j        d          |rC|rAt          |          \  }}|d	k    s|                    d
          rt          j        d          |	r|st          j        d          |s5|s3t          j                            |           rt          j        d          |rGt          |           \  }}|d	k    s|                    d
          rt          j        d          |                    d
d          d         }|	rt!                      5  t#                      5 }t          j                            ||          }|                    |||fg           t)          |d          5 }|                    d          x}r;t,          j        j                            |           |                    d          x};ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   dS dS ||}nvt          j                            |          s4|                    t          j                  s|                    d
          r!t          j                            ||          }n|}t          j                            |          }|rt          j        |d           |                    |||fg           t          j	        d| |           dS |rht          |          \  }}t,          j        j                                        }|                    |||fg           t          j	        dd|           dS t          j                            |           st          j        d|            t          |          \  }}|d	k    r t          j                             |           }n:|                    d
          r#|t          j                             |           z   }n|}|                    || |fg           t          j	        d| tB           | d
|            dS )zCopy files to or from buckets.r/   N-Copied)r   r   z2Missing destination. Provide a bucket path as DST.z;One of SRC or DST must be a bucket path (hf://buckets/...).z+Stdin upload requires a bucket destination.rs   r?   zAStdin upload requires a full destination path including filename.z"Cannot pipe to stdout for uploads.zNSource must be a file, not a directory. Use `hf buckets sync` for directories.zJSource path must include a file name, not just a bucket or directory path.r   rbi HT)r,   
Downloaded)addUploadedstdinzSource file not found: )"r   r   r   
copy_filesr$   r4   r5   r6   r   r8   r	   endswithosr   isdirrsplitr   r   r   download_bucket_filesopenreadsysstdoutbufferwritesepdirnamemakedirsr   r   isfilebasenamer   )r   r   r-   r9   	src_is_hf	dst_is_hfsrc_is_bucketdst_is_bucketsrc_is_stdindst_is_stdoutr<   rf   r;   r)   filenametmp_dirtmp_pathry   chunk
local_path
parent_dirremote_pathdatas                          r   r   r     sK   4 5
!
!
!Cc""I46M#$6$6I#C((MtO<(<(<M#:L3JM  Y 	-NN3$$$$ 	- 	- 	-$SVV,,,	- 	
8#....  ` `| `;$%YZZZ !^___ PM P !NOOO j j&s++	6R<<6??3//<$%hiii G] G !EFFF s s"'--2D2D s !qrrr  9Y.s33	6R<<6??3//<$%qrrr==a((, 	> '(( ; ;+-- ;!w||GX>>H--i68:L9MNNNh-- ;'(vvj'9'99e ;J-33E::: ()vvj'9'99e ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; {%

s## !s||BF';'; !s||C?P?P !W\\#x88

 
 44J 7J6666%%i6:2F1GHHHJ|*======	 Y!3C!8!8	;y$$&&yk/B.CDDD
:7444444 w~~c"" 	F$%Ds%D%DEEE.s33	6R<<'**3//KK__S!! 	! 27#3#3C#8#88KK Ky[/A.BCCC
:3},Wi,W,W+,W,WXXXXXXst   &A= =
B-!B((B-K<%A
K%/AKK%KK%KK%K<%K)	)K<,K)	-K<<L L )FNFN)NFFFNNr~   )FFN)FFFNNN)NNFFFNNFNNNFFFN)NN)7__doc__r   r   typingr   r4   huggingface_hubr   huggingface_hub._bucketsr   r   r   r   r	   r
   huggingface_hub.utilsr   r   hf_apir   
_cli_utilsr   r   r   r   _file_listingr   r   _outputr   r   
get_logger__name__loggerbuckets_clir6   boolr   tupler%   commandArgumentOptionr&   rA   rK   rI   rH   ra   rg   r_   r   r   r   r   rw   r    r   <module>r      sF   > = 				 



        # # # # # #                      
 " ! ! ! ! !            ; : : : : : : : . . . . . . . . 
	H	%	% m!EFFF$ $ $ $ $ $
S 
U38_ 
 
 
 
" 	    
 
0 	 	 	93O 3Og	
 	
 	
	3O +	
 	
 	
	3O tw	
 	
 	
	3O* F	
 	
 	
	+3O8 93O: 
;3O 3O 3O
 
3OlC D     	     0 	 	 	 	E>
 >
d
W	
 	
 	
	>
 7	
 	
 	
	>
$ F	
 	
 	
	%>
2 C	
 	
 	
	3>
B C>
D E>
F 
G>
 >
 >
 >
B KTz K$J K  K 	 K
  K : K 
 K  K  K  KFccc c 	c
 :c 
c c c c: 	(5    " "Y	
 	
 	
	" " 
" " " "* 	     . 	 	-16 16Y	
 	
 	
	16 
,	
 	
 	
	
16 F	
 	
 	
	16, -16. 
/16 16 16 16h 	    	 	6 	 	 	 	 	[@H @Ha	
 	
 	
	@H C	
 	
 	
	@H$ 
,	
 	
 	
	
%@H4 K	
 	
 	
	5@HB S	Dd	
 	
 	
	C@HN S	D_	
 	
 	
	O@HZ [@H\ 
]@H @H @H	 	@HF 	     * "K "K`	
 	
 	
	"K e	
 	
 	
	"K "K 
"K "K "K "KT 		 	 	   & 	 	 	 	 	 	 	 	 	 	 	 	 	 	yrP rPd
^	
 	
 	
	rP d
c	
 	
 	
	rP B	
 	
 	
	rP& N	
 	
 	
	'rP4 O	
 	
 	
	5rPB d
P	
 	
 	
	CrPN d
6	
 	
 	
	OrPZ H	
 	
 	
	[rPh S	DI	
 	
 	
	irPt S	DI	
 	
 	
	urP@ d
;	
 	
 	
	ArPL T	
 	
 	
	MrPZ V	
 	
 	
	[rPh 8	
 	
 	
	irPx yrPz 
{rP rP rP rPt 	     , 	lY lY	^U^!pqqqq
lY 
d
NEN(jkkkk
	lY lY 
lY lY lY!  lY lY lYr    