HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //proc/thread-self/root/lib/python3.6/site-packages/S3/__pycache__/CloudFront.cpython-36.pyc
3

�9peӒ�@s�ddlmZddlZddlZddlZddlmZddlmZddlm	Z	m
Z
mZmZyddl
jjZWnek
r�ddljZYnXddlmZddlmZdd	lmZmZdd
lmZmZmZddlmZmZmZm Z m!Z!m"Z"ddl#m$Z$m%Z%m&Z&m'Z'dd
l(m)Z)ddl*m*Z*m+Z+ddl,m,Z,ddl-m-Z-ej.d+kZ/dZ0dde0iZ1dd�Z2dd�Z3Gdd�de4�Z5Gdd�de4�Z6Gdd�de4�Z7Gdd �d e4�Z8Gd!d"�d"e4�Z9Gd#d$�d$e4�Z:Gd%d&�d&e4�Z;Gd'd(�d(e4�Z<Gd)d*�d*e4�Z=dS),�)�absolute_importN)�defaultdict)�datetime)�debug�info�warning�error�)�S3)�Config)�CloudFrontError�ParameterError)�EX_OK�
EX_GENERAL�
EX_PARTIAL)�getTreeFromXml�appendXmlTextNode�getDictFromTree�dateS3toPython�encode_to_s3�decode_from_s3)�getBucketFromHostname�getHostnameFromBucket�deunicodise�convertHeaderTupleListToDict)�sign_string_v2)�S3Uri�S3UriS3)�ConnMan)�
SortedDict�z
2010-11-01z/%(api_ver)s/distribution�api_vercCstjj|d�dS)N�
)�sys�stdout�write)�message�r'� /usr/lib/python3.6/CloudFront.py�output,sr)cCs"d|jd�}td||f�dS)Nz%s:�z%s %s)�ljustr))Zlabelr&r'r'r(�
pretty_output/sr,c@s$eZdZdd�Zdd�Zdd�ZdS)�DistributionSummarycCs&|jdkrtd|j��|j|�dS)Nr-z1Expected <DistributionSummary /> xml, got: <%s />)�tag�
ValueError�parse)�self�treer'r'r(�__init__Es
zDistributionSummary.__init__cCsTt|�|_|jdj�dk|jd<d|jkrPt|jd�tkrP|jdg|jd<dS)N�Enabled�true�CNAME)rr�lower�type�list)r1r2r'r'r(r0Js
zDistributionSummary.parsecCstd|jd�S)Nzcf://%s�Id)rr)r1r'r'r(�uriPszDistributionSummary.uriN)�__name__�
__module__�__qualname__r3r0r;r'r'r'r(r-4sr-c@seZdZdd�Zdd�ZdS)�DistributionListcCs.t|�}|jdkr td|j��|j|�dS)Nr?z.Expected <DistributionList /> xml, got: <%s />)rr.r/r0)r1�xmlr2r'r'r(r3_s
zDistributionList.__init__cCsPt|�|_|jdj�dk|jd<g|_x"|jd�D]}|jjt|��q4WdS)N�IsTruncatedr5z.//DistributionSummary)rrr7�
dist_summs�findall�appendr-)r1r2Z	dist_summr'r'r(r0es

zDistributionList.parseN)r<r=r>r3r0r'r'r'r(r?Ssr?c@s$eZdZdd�Zdd�Zdd�ZdS)�DistributioncCs.t|�}|jdkr td|j��|j|�dS)NrEz*Expected <Distribution /> xml, got: <%s />)rr.r/r0)r1r@r2r'r'r(r3{s
zDistribution.__init__cCs8t|�|_t|jd�|jd<t|jd�d�|jd<dS)NZLastModifiedTimez.//DistributionConfig)r2�DistributionConfig)rrrrF�find)r1r2r'r'r(r0�s
zDistribution.parsecCstd|jd�S)Nzcf://%sr:)rr)r1r'r'r(r;�szDistribution.uriN)r<r=r>r3r0r;r'r'r'r(rEns
rEc@sFeZdZdZddeiZddd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dS)rFzq<DistributionConfig><S3Origin><DNSName/></S3Origin><CallerReference/><Enabled>true</Enabled></DistributionConfig>z0http://cloudfront.amazonaws.com/doc/%(api_ver)s/r!NcCsD|dkrtj}|dkrt|�}|jdkr6td|j��|j|�dS)NrFz0Expected <DistributionConfig /> xml, got: <%s />)rF�EMPTY_CONFIGrr.r/r0)r1r@r2r'r'r(r3�s
zDistributionConfig.__init__cCst|�|_|jdj�dk|jd<d|jkr6g|jd<t|jd�tkrZ|jdg|jd<dd�|jdD�|jd<d|jkr�d|jd<d|jkr�d|jd<|jd	�}|r�t|d
�}t|d�\|d<}|s�td|d�td
|�|jd<n
d|jd<dS)Nr4r5r6cSsg|]}|j��qSr')r7)�.0�cnamer'r'r(�
<listcomp>�sz,DistributionConfig.parse.<locals>.<listcomp>�Comment��DefaultRootObjectz
.//Loggingr�Bucketz%Logging to unparsable bucket name: %szs3://%(Bucket)s/%(Prefix)s�Logging)	rrr7r8r9rCrrr)r1r2Z
logging_nodesZlogging_dict�successr'r'r(r0�s&







zDistributionConfig.parsecCstjd�}tj|jd<tdd|�}td|jdd|�td|jd|�x"|jdD]}td|j�|�qVW|jdr�td|jd|�td	t|jd	�j�|�t|jd
�r�td
t|jd
�|�|jd�rtjd�}tdt	|jdj
��|�td
|jdj�|�|j|�|S)NrF�xmlns�S3OriginrM�DNSName�CallerReferencer6rLr4rNrPrOZPrefix)
�ET�ElementrFrRZattribrrr7�strr�bucket�objectrD)r1r2Zs3orgrJZ
logging_elr'r'r(�get_printable_tree�s$



z%DistributionConfig.get_printable_treecCsttj|j���S)N)rrV�tostringr[)r1r'r'r(�__unicode__�szDistributionConfig.__unicode__cCs(trtj|j�dd�Stj|j��SdS)N�unicode)�encoding)�PY3rVr\r[)r1r'r'r(�__str__�szDistributionConfig.__str__)NN)r<r=r>rH�cloudfront_api_versionrRr3r0r[r]rar'r'r'r(rF�s
rFc@s$eZdZdd�Zdd�Zdd�ZdS)�InvalidationcCs.t|�}|jdkr td|j��|j|�dS)Nrcz*Expected <Invalidation /> xml, got: <%s />)rr.r/r0)r1r@r2r'r'r(r3�s
zInvalidation.__init__cCst|�|_dS)N)rr)r1r2r'r'r(r0�szInvalidation.parsecCs
t|j�S)N)rXr)r1r'r'r(ra�szInvalidation.__str__N)r<r=r>r3r0rar'r'r'r(rc�srcc@s$eZdZdd�Zdd�Zdd�ZdS)�InvalidationListcCs.t|�}|jdkr td|j��|j|�dS)Nrdz.Expected <InvalidationList /> xml, got: <%s />)rr.r/r0)r1r@r2r'r'r(r3s
zInvalidationList.__init__cCst|�|_dS)N)rr)r1r2r'r'r(r0szInvalidationList.parsecCs
t|j�S)N)rXr)r1r'r'r(raszInvalidationList.__str__N)r<r=r>r3r0rar'r'r'r(rd�srdc@sDeZdZddgfdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�ZdS)�InvalidationBatchNcCsL|r||_n,|sd}d|tjtj�d�tjdd�f|_g|_|j|�dS)N�0z%s.%s.%sz%Y%m%d%H%M%Si�i')�	referencer�strftimeZnow�randomZrandint�paths�add_objects)r1rg�distributionrjr'r'r(r3#szInvalidationBatch.__init__cCs|jj|�dS)N)rj�extend)r1rjr'r'r(rk/szInvalidationBatch.add_objectscCs|jS)N)rg)r1r'r'r(�
get_reference2szInvalidationBatch.get_referencecCsXtjd�}x:|jD]0}t|�dks.|ddkr6d|}td||�qWtd|j|�|S)Nrer	r�/�PathrU)rVrWrj�lenrrg)r1r2�pathr'r'r(r[5s
z$InvalidationBatch.get_printable_treecCsttj|j���S)N)rrVr\r[)r1r'r'r(r]>szInvalidationBatch.__unicode__cCs(trtj|j�dd�Stj|j��SdS)Nr^)r_)r`rVr\r[)r1r'r'r(raAszInvalidationBatch.__str__)	r<r=r>r3rkrnr[r]rar'r'r'r(res	rec@seZdZddd�ddd�ddd�ddd�ddd�ddd�dd	d�dd	d�dd
d�d�	ZdZd
d�Zdd�Zgdddfdd�Zggddddfdd�Zdd�Z	dd�Z
dd�Zd/dd�Zdd�Z
dd �Zd!d"�Zd0d#d$�Zd1d%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�ZdS)2�
CloudFrontZPOSTrM)�method�resourceZDELETEz/%(dist_id)sZGETz/%(dist_id)s/configZPUTz/%(dist_id)s/invalidationz(/%(dist_id)s/invalidation/%(request_id)s)	�
CreateDist�
DeleteDist�GetList�GetDistInfo�
GetDistConfig�
SetDistConfig�
Invalidate�GetInvalList�GetInvalInfoNcCs
||_dS)N)�config)r1rr'r'r(r3XszCloudFront.__init__cCs4|jd�}t|d�|d<|djdr0td��|S)Nrx�data�	dist_listrAz3List is truncated. Ask s3cmd author to add support.)�send_requestr?r�NotImplementedError)r1�responser'r'r(rx_s

zCloudFront.GetListc
Cs�t�}d|jd<|j�|jdd<t|�|jd<||jd<|dkrR|j�|jd<n
||jd<x0|D](}|jdj|�d	krb|jdj|�qbW|r�t|�|jd
<t|�}td|�|j	d|d
�}	t
|	d�|	d<|	S)NTr4rSrTrUrNrLr6rrPz&CreateDistribution(): request_body: %srv)�bodyr�rl)rFrZ	host_namerXZ
public_url�countrDrrr�rE)
r1r;�
cnames_add�comment�logging�default_root_object�dist_configrJ�request_bodyr�r'r'r(�CreateDistributiongs$



zCloudFront.CreateDistributioncCs|jdkrtd|��td|�|j|�}|d}	|dkrF||	jd<|dkrX||	jd<|dkrj||	jd<x0|D](}
|	jdj|
�d	krp|	jdj|
�qpWx6|D].}
x(|	jdj|
�d	kr�|	jdj|
�q�Wq�W|dkr�|d
kr�d
|	jd<nt|�|	jd<|j||	|dd
�}|S)N�cfzExpected CFUri instead of: %szChecking current status of %sr�r4rLrNr6rFrP�headers�etag)	r8r/rrzr�rD�removerr{)r1�cfurir��
cnames_remover��enabledr�r�r��dcrJr'r'r(�ModifyDistribution|s.






zCloudFront.ModifyDistributioncCs�|jdkrtd|��td|�|j|�}|djdr�td�d|djd<|j||d|dd	�}td
�td�xN|j|�}|d}|jd
dkr�|jddkr�td�Ptd�tjd�q|Wt	dd�}|dd	|d<|j
d|j�|d�}|S)Nr�zExpected CFUri instead of: %szChecking current status of %sr�r4z)Distribution is ENABLED. Disabling first.Fr�r�z,Waiting for Distribution to become disabled.z+This may take several minutes, please wait.rl�StatusZDeployedzDistribution is now disabledzStill waiting...�
T)�ignore_casezif-matchrw)�dist_idr�)r8r/rrzr{rry�time�sleeprr�r�)r1r�r��dr�r'r'r(�DeleteDistribution�s0



zCloudFront.DeleteDistributioncCs<|jdkrtd|��|jd|j�d�}t|d�|d<|S)Nr�zExpected CFUri instead of: %sry)r�r�rl)r8r/r�r�rE)r1r�r�r'r'r(ry�s

zCloudFront.GetDistInfocCs<|jdkrtd|��|jd|j�d�}t|d�|d<|S)Nr�zExpected CFUri instead of: %srz)r�r�r�)r8r/r�r�rF)r1r�r�r'r'r(rz�s

zCloudFront.GetDistConfigcCsn|dkr"td�|j|�dd}td|�t|�}td|�tdd�}||d<|jd	|j�||d
�}|S)Nz1SetDistConfig(): Etag not set. Fetching it first.r�r�zSetDistConfig(): Etag = %sz!SetDistConfig(): request_body: %sT)r�zif-matchr{)r�r�r�)rrzrXrr�r�)r1r�r�r�r�r�r�r'r'r(r{�s

zCloudFront.SetDistConfigcCs�|dk	rx|s|rxg}d|}xT|D]L}|j|�s:||krf|rH|j|�|rp|j|dt|���q$|j|�q$W|}|j|�}	t|�dk�ryZtj�}
tt|
�d��}|jtdj	|�d��WdQRXt
dt|��t
d|
�Wntk
r�YnXtd��g}x�|	D]�}
t
|
j�|d�}td	|�|jd
|
j�t|�d�}|
j�|d<|d
dk�r~t|d�j}|d|d<td|�|j|��qW|S)Nroi��wr"z2Request to invalidate %d paths (max 999 supported)z"All the paths are now saved in: %szToo many paths to invalidate)rlrjz%InvalidateObjects(): request_body: %sr|)r�r�r��status��r�r:�
request_idz!InvalidateObjects(): response: %s)�endswithrDrq�get_dist_name_for_bucket�UtilsZ	mktmpfile�openrr%�joinr�	Exceptionr
rer�rr�rXrcr)r1r;rj�default_index_file�invalidate_default_index_on_cf�#invalidate_default_index_root_on_cfZ	new_pathsZdefault_index_suffixrr�cfurisZtmp_filename�fpZ	responsesr�Z
invalbatchr��
inval_infor'r'r(�InvalidateObjects�sF


"
zCloudFront.InvalidateObjectscCs<|jdkrtd|��|jd|j�d�}t|d�|d<|S)Nr�zExpected CFUri instead of: %sr})r�r��
inval_list)r8r/r�r�rd)r1r�r�r'r'r(r}�s

zCloudFront.GetInvalListcCsV|jdkrtd|��|j�dkr*td��|jd|j�|j�d�}t|d�|d<|S)Nr�zExpected CFUri instead of: %szExpected CFUri with Request IDr~)r�r�r��inval_status)r8r/r�r�r�rc)r1r�r�r'r'r(r~s
zCloudFront.GetInvalInfoc
Csj|dkr|jj}|dkr"tdd�}|j|}|r8d|d<|j||||�}|j�}	td|d|df�|	jj|d|d||d�|	jj	�}
i}|
j
|d	<|
j|d
<t|
j
��|d<|
j�|d<tj|	�td|�|d	d
k�rBt|�}|�r>td||f�td|j|��tj|j|��|j||||dd�S|�|d	dk�s^|d	dk�rft|��|S)NT)r�z
text/plainzcontent-typezsend_request(): %s %srtrur�r��reasonr�zCloudFront: response: %ri�z Retrying failed request: %s (%s)zWaiting %d sec...r	)r��retries��i+)r�max_retriesr�
operations�create_request�get_connectionr�c�requestZgetresponser�r�rZ
getheaders�readrZputrr�
_fail_waitr�r�r�)
r1Zop_namer�r�r�r�r��	operationr��connZ
http_responser��er'r'r(r�s<





zCloudFront.send_requestcCs�t|d||d�}|s$tdd�}d|krFd|kr@|d|d<|d=d|krbtjdtj��|d<t|jj�dkr�|jj�|jj|d	<|j	|�}d
|jj
d||d<i}||d<||d
<|d|d<|S)Nru)r�r�T)r�Zdatez
x-amz-datez%a, %d %b %Y %H:%M:%S +0000rzx-amz-security-tokenzAWS �:Z
Authorizationr�rt)�cloudfront_resourcerr�rhZgmtimerqrZaccess_tokenZrole_refresh�sign_requestZ
access_key)r1r�r�r�r�ru�	signaturer�r'r'r(r�6s(


zCloudFront.create_requestcCs,|d}ttt|���}td||f�|S)Nz
x-amz-datez"CloudFront.sign_request('%s') = %s)rrrr)r1r�Zstring_to_signr�r'r'r(r�SszCloudFront.sign_requestcCstj|jjdd�}|S)NT)Zssl)r�getrZcloudfront_host)r1r�r'r'r(r�YszCloudFront.get_connectioncCs|jj|ddS)Nr	r )rr�)r1r�r'r'r(r�]szCloudFront._fail_waitcCsH|jdkr|gS|jdkr&td|��td|�tjdkr�|j�}it_x�|djD]�}d}d|jkr�t|jdd�d	}n8d
|jkrVt|jd
d�d	}|dt	|j
���}nqVtjj|d�dkr�t�tj|<tj|j
|j��qVWtdtj�ytj|j
�Stk
�rB}zt|�td|��WYdd}~XnXdS)
Nr��s3z,CloudFront or S3 URI required instead of: %sz_get_dist_name_for_bucket(%r)r�rMrSrTr�CustomOriginz
dist_list: %sz>Unable to translate S3 URI to CloudFront distribution name: %s)r8r
rrsr�rxrBrrrqrYr��set�addr;r�)r1r;r�r�Z
distListIndexr�r'r'r(r�as2




z#CloudFront.get_dist_name_for_bucket)N)NNNNN)NNN)r<r=r>r�r�r3rxr�r�r�ryrzr{r�r}r~r�r�r�r�r�r�r'r'r'r(rsIs:

.
%
rsc@szeZdZdZGdd�de�Ze�Zedd��Zedd��Z	edd	��Z
ed
d��Zedd
��Zedd��Z
edd��ZdS)�Cmdz3
    Class that implements CloudFront commands
    c@s4eZdZgZgZdZdZdZdZdd�Z	dd�Z
dS)zCmd.OptionsNcCsdd�t|�D�S)NcSsg|]}|jd�r|�qS)Zcf_)�
startswith)rI�optr'r'r(rK�sz+Cmd.Options.option_list.<locals>.<listcomp>)�dir)r1r'r'r(�option_list�szCmd.Options.option_listcCsttj||�dS)N)�setattrr��options)r1Zoption�valuer'r'r(�
update_option�szCmd.Options.update_option)r<r=r>�
cf_cnames_add�cf_cnames_remove�
cf_comment�	cf_enable�
cf_logging�cf_default_root_objectr�r�r'r'r'r(�Options�sr�cCs8tt��}g}x$|D]}|jt|��}|j|�qW|S)N)rsrr�rrm)�argsr�r��argZurisr'r'r(�_parse_args�s

zCmd._parse_argscCstt��}|s�|j�}x�|djD]�}d|jkrFtj|jdd�}n"d|jkrdd|jdd}nd}td|�td|j��td	|jd	�d
|jkr�tddj	|jd
��td
|jd
�td|jd�t
d�q"W�n0tj|�}�x"|D�]}|j
|�}|d}|jd}d|jk�r6tj|jdd�}n$d|jk�rVd|jdd}nd}td|�td|j��td	|jd	�d
|jk�r�tddj	|jd
��td
|jd
�td|jd�td|jd�td|jd�td|jd�p�d�td|dd�q�WdS)Nr�rSrTr�z
http://%s/z	<unknown>�Origin�DistId�
DomainNamer6�CNAMEsz, r�r4rMrlrFrLZDfltRootObjectrNrPZDisabled�Etagr�r�)rsrrxrBrr�httpurl_to_s3urir,r;r�r)r�r�ry)r�r�r�r��originr�r�r�r'r'r(r�sL








zCmd.infocCsptt��}g}xX|D]P}t|�}|jdkr6td|��|j�rJtd|��|j�sZtd��|j|�qW|sttd��x�|D]�}td|�|j	|t
jjt
jj
t
jjt
jjd�}|d}|jd	}td
�tdtj|jdd
��td|j��td|jd�tddj|jd��td|jd�td|jd�td|jd�td|jd�td|dd�qzWdS)Nr�z@Distribution can only be created from a s3:// URI instead of: %sz4Use s3:// URI with a bucket name only instead of: %sz3CloudFront can only handle lowercase-named buckets.zNo valid bucket names foundzCreating distribution from: %s)r�r�r�r�rlrFzDistribution created:r�rSrTr�r�r�z, r6rLr�r4rNr�r�r�)rsrrr8r
rZZis_dns_compatiblerDrr�r�r�r�r�r�r�r)r,rr�r;r�)r�r�Zbucketsr�r;r�r�r�r'r'r(�create�s>




z
Cmd.createcCs\tt��}tj|�}xB|D]:}|j|�}|ddkrHtd||df�td|�qWdS)Nr�i�z(Distribution %s could not be deleted: %sr�zDistribution %s deleted)rsrr�r�r�rr))r�r�r�r�r�r'r'r(�delete�s



z
Cmd.deletecCsjtt��}t|�dkrtd��ytj|�d}Wntk
rLtd��YnX|j|tjj	tjj
tjjtjjtjj
tjjd�}|ddkr�td||d	f�td
|�|j|�}|d}|jd}td
tj|jdd��td|j��td|jd�td|jd�tddj|jd��td|jd�td|jd�td|jd�td|dd�dS)Nr	z7Too many parameters. Modify one Distribution at a time.rz No valid Distribution URI found.)r�r�r�r�r�r�r�i�z)Distribution %s could not be modified: %sr�zDistribution modified: %srlrFr�rSrTr�r�r�r�z, r6rLr4rNr�r�r�)rsrrqr
r�r��
IndexErrorr�r�r�r�r�r�r�r�rr)ryrr,rr�r;r�)r�r�r�r�r�r�r'r'r(�modify�s:


z
Cmd.modifycCs8tt��}tj|�}g}x�|D]x}|j�r:|jt|��q|j|�}y:x4|djdD]"}|jdj	d|j
�|dg��qVWWqtk
r�wYqXqWx�|D]�}t|�}|j
|�}|dj}	|	dd}
t|
t�r�t|
�nd	}td
t|��td|	d�td|	d
�td|�td|	dd�td�q�WdS)Nr�ZInvalidationSummaryrozcf:/r:r�rerpr	�URIr��CreatedZ
CreateTimezNr of pathsZ	ReferencerUrM)rsrr�r�r�rDrXr}rr�r�r�rr~�
isinstancer9rqr,r))r�r�r�Zrequestsr�r��iZreqr��strjZnr_of_pathsr'r'r(�	invalinfos0



&



z
Cmd.invalinfocsFt�}t|�}t|�}tt�}xL|D]D}t|�}|j�}|sBd}n|ddkrV|d7}||j�j|�q$Wt	}g}	x�|j
�D]�\�}
td��}tt|j
|���}d}
|js�|jr�|j||j�}|r�|d}
|
s�d}
|j�r��fdd�|
D�}td|�q~|	j�|
|||
f�q~W|j�r*td	�t	Sd
}d}x�|	D]�\�}
}}}
|�sVtd�nd
}|j||
|
|j|j�}|j�}tdt|��td|�tdt|
��xl|D]d}|d}|dk�r�tdd|�t}�q�|d}|d7}tdd�td|�tdd||f��q�W|t	k�r8|j�r8td�P�q8W|t	k�rB|�rBt}|S)N�*r	rozs3://%sZindex_documentcsg|]}tj�|��qSr')rZcompose_uri)rIrr)rYr'r(rK[sz"Cmd.invalidate.<locals>.<listcomp>z[--dry-run] Would invalidate %rz Exiting now because of --dry-runrTrMFr�r�zNr of pathsr�r�r�z
Failed: %dr�r�Z	RequestIdZInfoz,Check progress with: s3cmd cfinvalinfo %s/%sz&Exiting now because of --stop-on-error���)rrsr
rr9rrZrYrDr�items�next�iterr�r�r�Zwebsite_infoZbucket_locationZdry_runr)rr�r�r,rXrqrZ
stop_on_errorrr)r�Zcfgr�r�Zbucket_pathsr�r;Zuobject�retZparamsrjZbase_urir�r�Z
info_responseZ
fulluri_pathsZ
nb_success�first�resultsr��resultZresult_coder�r')rYr(�
invalidate9s~






zCmd.invalidateN)r<r=r>�__doc__rZr�r��staticmethodr�rr�r�r�r�r�r'r'r'r(r��s	,"
 r�)r r)>Z
__future__rr#r�ri�collectionsrrr�rrrrZxml.etree.ElementTreeZetreeZElementTreerV�ImportErrorZelementtree.ElementTreer
rZ
Exceptionsrr
Z	ExitCodesrrrZ	BaseUtilsrrrrrrr�rrrrZCryptorrrrr�version_infor`rbr�r)r,rZr-r?rErFrcrdrersr�r'r'r'r(�<module>
sH 
T1@