PHP WebShell

Текущая директория: /usr/lib/python3/dist-packages/uaclient/api/u/pro/security/fix/_common/plan/__pycache__

Просмотр файла: v1.cpython-310.pyc

o

��gP��@sddlZddlZddlmZddlmZmZddlmZmZm	Z	m
Z
mZmZddl
mZmZmZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZddl m!Z!ddl"m#Z#m$Z$dd	l%m&Z&dd
l'm(Z(m)Z)m*Z*m+Z+m,Z,dZ-dZ.d
Z/e
dde0fde0fdee0fg�Z1ej2Gdd�dej3��Z4ej2Gdd�dej3��Z5ej2Gdd�dej3��Z6ej2Gdd�dej3��Z7Gdd�de(�Z8Gdd�de(�Z9Gdd�de8�Z:Gd d!�d!e(�Z;Gd"d#�d#e8�Z<Gd$d%�d%e(�Z=Gd&d'�d'e8�Z>Gd(d)�d)e(�Z?Gd*d+�d+e8�Z@Gd,d-�d-e?�ZAGd.d/�d/e@�ZBGd0d1�d1e?�ZCGd2d3�d3e@�ZDGd4d5�d5e(�ZEGd6d7�d7e(�ZFGd8d9�d9eE�ZGGd:d;�d;e(�ZHGd<d=�d=eE�ZIGd>d?�d?e(�ZJGd@dA�dAeE�ZKGdBdC�dCe(�ZLGdDdE�dEe(�ZMGdFdG�dGeM�ZNGdHdI�dIe(�ZOGdJdK�dKe(�ZPGdLdM�dM�ZQGdNdO�dOeQ�ZR		d|dPe0dQee0dRee	e0fdSdT�ZSdUe0dVedWeee	effdXdY�ZTdUe0dVedWeee	effdZd[�ZUd\e	ed]eVdWee	e0e	e1ffd^d_�ZWd`e	ee0efdaee0ee0ee0e0fffdbee0ee0e0fffdcdd�ZXdeedbee0ee0e0fffdfdg�ZYdUe0dhe&dWeOfdidj�ZZdUe0dhe&dWePfdkdl�Z[dUe0dhe&dWeOfdmdn�Z\dUe0dhe&dWePfdodp�Z]dqe0fdrds�Z^d]eVdteVdhe&dWeVfdudv�Z_ddw�dUe0dxe0dyee0efdaee0ee0ee0e0fffdbee0ee0e0ffdhe&dWeOfdzd{�Z`dS)}�N)�defaultdict)�datetime�timezone)�Any�Dict�List�
NamedTuple�Optional�Tuple)�apt�
exceptions�messages)�CVE�CVE_OR_USN_REGEX�USN�BinaryPackageFix�CVEPackageStatus�	FixStatus�UASecurityClient�_check_cve_fixed_by_livepatch�get_affected_packages_from_usn�'get_cve_affected_source_packages_status�get_related_usns�group_by_usn_package_status�*merge_usn_released_binary_package_versions�#query_installed_source_pkg_versions)�_enabled_services)�ContractExpiryStatus�_is_attached)�UAConfig)�
DataObject�Field�IntDataValue�StringDataValue�	data_listzstandard-updates�	esm-infra�esm-apps�UnfixedPackage�source_package�binary_package�versionc@seZdZdZdZdZdZdS)�FixStepType�attach�enablezno-opzapt-upgradeN)�__name__�
__module__�__qualname__�ATTACH�ENABLE�NOOP�APT_UPGRADE�r5r5�Q/usr/lib/python3/dist-packages/uaclient/api/u/pro/security/fix/_common/plan/v1.pyr+4s
r+c@�eZdZdZdZdZdS)�FixPlanNoOpStatuszcve-already-fixed�system-not-affectedzcve-fixed-by-livepatchN)r.r/r0�
ALREADY_FIXED�NOT_AFFECTED�FIXED_BY_LIVEPATCHr5r5r5r6r8<�r8c@seZdZdZdZdS)�FixPlanAttachReasonzexpired-contract-token�required-pro-serviceN)r.r/r0�EXPIRED_CONTRACT�REQUIRED_PRO_SERVICEr5r5r5r6r>Csr>c@r7)�FixWarningTypezpackage-cannot-be-installedzsecurity-issue-not-fixedzfail-updating-esm-cacheN)r.r/r0�PACKAGE_CANNOT_BE_INSTALLED�SECURITY_ISSUE_NOT_FIXED�FAIL_UPDATING_ESM_CACHEr5r5r5r6rBIr=rBc@�FeZdZededd�ededd�ededd�gZdede	fdd	�Z
d
S)�FixPlanStep�	operationzyThe operation that would be performed to fix the issue. This can be either an attach, enable, apt-upgrade or a no-op type��doc�order�$The execution order of the operation�datazdA data object that can be either an ``AptUpgradeData``, ``AttachData``, ``EnableData``, ``NoOpData``cC�||_||_dS�N�rHrK)�selfrHrKr5r5r6�__init__g�
zFixPlanStep.__init__N�r.r/r0r!r#r"r �fields�str�intrRr5r5r5r6rGPs ����rGc@sZeZdZedee�dd�edee�dd�ededd�gZdeedeedefdd	�Z	d
S)�AptUpgradeData�binary_packagesz2A list of binary packages that need to be upgradedrI�source_packagesz2A list of source packages that need to be upgraded�pocketz4The pocket where the packages will be installed fromcC�||_||_||_dSrO�rYrZr[)rQrYrZr[r5r5r6rRs
zAptUpgradeData.__init__N�
r.r/r0r!r$r#rUrrVrRr5r5r5r6rXls0�������rXc�BeZdZede�ede�ede�gZdedef�fdd�Z	�Z
S)�FixPlanAptUpgradeSteprHrMrKc�t�jtjj|d�||_dS�NrP)�superrRr+r4�valuerM�rQrMrK��	__class__r5r6rR��
zFixPlanAptUpgradeStep.__init__)r.r/r0r!r#rXr"rUrWrR�
__classcell__r5r5rfr6r`���r`c@sReZdZededd�ededd�edee�dd�gZdedeedefdd	�Z	d
S)�
AttachData�reasonz,The reason why an attach operation is neededrI�required_servicez7The required service that requires the attach operationrZz5The source packages that require the attach operationcCr\rO�rlrZrm)rQrlrZrmr5r5r6rR�s
zAttachData.__init__N�
r.r/r0r!r#r$rUrVrrRr5r5r5r6rk�s0�������rkcr_)�FixPlanAttachSteprHrMrKcrarb)rcrRr+r1rdrMrerfr5r6rR�rhzFixPlanAttachStep.__init__)r.r/r0r!r#rkr"rUrWrRrir5r5rfr6rp�rjrpc@sBeZdZededd�edee�dd�gZdedeefdd�Z	dS)	�
EnableData�servicez$The service that needs to be enabledrIrZz:The source packages that require the service to be enabledcCrNrO�rrrZ)rQrrrZr5r5r6rR�rSzEnableData.__init__Nror5r5r5r6rq�s���
rqcr_)�FixPlanEnableSteprHrMrKcrarb)rcrRr+r2rdrMrerfr5r6rR�rhzFixPlanEnableStep.__init__)r.r/r0r!r#rqr"rUrWrRrir5r5rfr6rt�rjrtc@s*eZdZededd�gZdefdd�ZdS)�NoOpData�status�:The status of the issue when no operation can be performedrIcCs
||_dSrO�rv)rQrvr5r5r6rR�s
zNoOpData.__init__N�r.r/r0r!r#rUrVrRr5r5r5r6ru�s��rucr_)�FixPlanNoOpSteprHrMrKcrarb)rcrRr+r3rdrMrerfr5r6rR�rhzFixPlanNoOpStep.__init__)r.r/r0r!r#rur"rUrWrRrir5r5rfr6rz�rjrzcsBeZdZededd�ededd�gZdedef�fdd�Z�ZS)�NoOpLivepatchFixDatarvz8The status of the CVE when no operation can be performedrI�
patch_versionz6Version of the patch from Livepatch that fixed the CVEcst�j|d�||_dS�Nrx)rcrRr|)rQrvr|rfr5r6rRs
zNoOpLivepatchFixData.__init__)	r.r/r0r!r#rUrVrRrir5r5rfr6r{�s���
r{cr_)�FixPlanNoOpLivepatchFixSteprHrMrKc�t�j||d�dS�N)rMrK�rcrRrerfr5r6rR�z$FixPlanNoOpLivepatchFixStep.__init__)r.r/r0r!r#r{r"rUrWrRrir5r5rfr6r~	rjr~csZeZdZededd�edee�dd�ededd�gZdedeedef�fdd	�Z	�Z
S)
�NoOpAlreadyFixedDatarvrwrIrZz*The source packages that are already fixedr[z<The pocket where the packages would have been installed fromcst�j|d�||_||_dSr})rcrRrZr[)rQrvrZr[rfr5r6rR's
zNoOpAlreadyFixedData.__init__)r.r/r0r!r#r$rUrVrrRrir5r5rfr6r�s0�������r�c�BeZdZede�ede�ede�gZdede	f�fdd�Z
�ZS)�FixPlanNoOpAlreadyFixedSteprHrMrKcrr�r�rerfr5r6rR6r�z$FixPlanNoOpAlreadyFixedStep.__init__)r.r/r0r!r#r{r"rUr�rWrRrir5r5rfr6r�/rjr�c@rF)�FixPlanWarning�warning_typezThe type of warningrIrKrLrMzjA data object that represents either a ``PackageCannotBeInstalledData`` or a ``SecurityIssueNotFixedData``cCrNrO�r�rK)rQr�rKr5r5r6rRIrSzFixPlanWarning.__init__NrTr5r5r5r6r�:s���r�c@sBeZdZedee�dd�ededd�gZdeedefdd�Z	dS)	�SecurityIssueNotFixedDatarZz<A list of source packages that cannot be fixed at the momentrIrvz.The status of the CVE regarding those packagescCrNrO�rZrv)rQrZrvr5r5r6rR\rSz"SecurityIssueNotFixedData.__init__Nr^r5r5r5r6r�Ns���
r�c�BeZdZede�ede�ede�gZdedef�fdd�Z	�Z
S)�#FixPlanWarningSecurityIssueNotFixedr�rKrMc�t�jtjj|d�||_dS�Nr�)rcrRrBrDrdrM�rQrKrMrfr5r6rRh�
�
z,FixPlanWarningSecurityIssueNotFixed.__init__)r.r/r0r!r#r"r�rUrWrRrir5r5rfr6r�arjr�c@sreZdZededd�ededd�ededd�edee�d	d�ed
edd�gZdededed
edeef
dd
�Z	dS)�PackageCannotBeInstalledDatar)z+The binary package that cannot be installedrI�binary_package_versionz:The version of the binary package that cannot be installedr(z5The source package associated with the binary package�related_source_packageszPA list of source packages that come from the same pocket as the affected packager[z>The pocket where the affected package should be installed fromcCs"||_||_||_||_||_dSrO)r(r)r�r[r�)rQr)r�r(r[r�r5r5r6rR�s
	
z%PackageCannotBeInstalledData.__init__Nror5r5r5r6r�psL������"�����r�cr�)�&FixPlanWarningPackageCannotBeInstalledr�rKrMcr�r�)rcrRrBrCrdrMr�rfr5r6rR�r�z/FixPlanWarningPackageCannotBeInstalled.__init__)r.r/r0r!r#r"r�rUrWr�rRrir5r5rfr6r��rjr�c@s2eZdZede�ede�gZdedefdd�ZdS)�FailUpdatingESMCacheData�title�codecCrNrO�r�r�)rQr�r�r5r5r6rR�rSz!FailUpdatingESMCacheData.__init__Nryr5r5r5r6r��s
�r�cr�)�"FixPlanWarningFailUpdatingESMCacher�rKrMcr�r�)rcrRrBrErdrMr�rfr5r6rR�r�z+FixPlanWarningFailUpdatingESMCache.__init__)r.r/r0r!r#r"r�rUrWrRrir5r5rfr6r��rjr�c@s@eZdZededd�ededdd�gZdedeefdd	�Zd
S)�FixPlanError�msgzThe error messagerIr�FzThe message code��requiredrJcCrNrO�r�r�)rQr�r�r5r5r6rR�rSzFixPlanError.__init__N)	r.r/r0r!r#rUrVr	rRr5r5r5r6r��s
�r�c@seZdZdS)�AdditionalDataN)r.r/r0r5r5r5r6r��sr�c@sJeZdZedee�dd�edee�dd�gZdeedeefdd�Z	dS)	�USNAdditionalData�associated_cveszThe associated CVEs for the USNrI�associated_launchpad_bugsz)The associated Launchpad bugs for the USNcCrNrO�r�r�)rQr�r�r5r5r6rR��
zUSNAdditionalData.__init__Nr^r5r5r5r6r��s"���
��r�c@s�eZdZededd�ededdd�ededd	d�ed
edd�edee�dd
d�edee�dd�edee�ddd�ededdd�ede	ddd�g	Z
dddd�ded
edeedeede
ede	de
ede
eede
efdd�ZdS)�
FixPlanResultr�zThe title of the issuerI�descriptionFzThe description of the issuer��current_statusz-The current status of the issue on the system�expected_statusz'The expected status of fixing the issue�affected_packagesz-A list of package names affected by the issue�planz!A list of ``FixPlanStep`` objects�warningsz$A list of ``FixPlanWarning`` objects�errorz0A ``FixPlanError`` object, if an error occurred.�additional_datazAdditional data for the issueN)r�r�r�c	
Cs:||_||_|	|_||_||_||_||_||_||_dSrO)	r�r�r�r�r�r�r�r�r�)
rQr�r�r�r�r�r�r�r�r�r5r5r6rR's

zFixPlanResult.__init__)r.r/r0r!r#r$rGr�r�r�rUrVrr	rRr5r5r5r6r��s����������;�������	�

��r�c@sDeZdZededd�edee�ddd�gZdedeefdd	�Zd
S)�FixPlanUSNResult�target_usn_planz-A ``FixPlanResult`` object for the target USNrI�related_usns_planFz8A list of ``FixPlanResult`` objects for the related USNsr�cCrNrO�r�r�)rQr�r�r5r5r6rRNr�zFixPlanUSNResult.__init__N)	r.r/r0r!r�r$rUrrRr5r5r5r6r�?s$�����r�c
@s�eZdZ		ddedeedeeedeefdd�Zded	eee	ffd
d�Z
ded	eee	ffd
d�Zdedeefdd�Z
deee	ffdd�Zdefdd�Zedd��ZdS)�FixPlanNr�r�r�r�cCs<d|_||_||_||_||_g|_g|_d|_t�|_	dS)N�)
rKr�r�r�r��	fix_steps�fix_warningsr�r�r�)rQr�r�r�r�r5r5r6rRYszFixPlan.__init__rHrMcCs�d}|tjkrt|jt�|�d�}nH|tjkr"t|jt�|�d�}n8|tj	krPd|vr6t
|jt�|�d�}n$d|vrEt|jt
�|�d�}nt|jt�|�d�}n
t|jt�|�d�}|j�|�|jd7_dS)N�rKrMr|rZr�)r+r1rprKrk�	from_dictr2rtrqr3r~r{r�r�rzrur`rXr��append)rQrHrM�fix_stepr5r5r6�
register_stepjs4
�
�
����zFixPlan.register_stepr�cCsvd}|tjkrt|jt�|�d�}n|tjkr"t|jt�|�d�}n
t	|jt
�|�d�}|j�|�|jd7_dS)Nr�r�)
rBrDr�rKr�r�rCr�r�r�r�r�r�)rQr�rM�fix_warningr5r5r6�register_warning�s"
�
��zFixPlan.register_warning�	error_msg�
error_codecCst||d�|_dS)Nr�)r�r�)rQr�r�r5r5r6�register_error�szFixPlan.register_errorr�cC�tdi|��|_dS�Nr5)r�r��rQr�r5r5r6�register_additional_data�r�z FixPlan.register_additional_data�returncCs^|jrdSt|j�dkr"t|jdt�r"|jdjjdkr"tjj	j
S|jr*tjj	j
Stj
j	j
S)Nr�r�rr9)r��lenr��
isinstancerzrMrvr�SYSTEM_NOT_AFFECTEDrdr�r��SYSTEM_STILL_VULNERABLE�SYSTEM_NON_VULNERABLE�rQr5r5r6�_get_expected_status�s�


zFixPlan._get_expected_statuscCs.t|j|j|��|j|j|j|j|j|j	d�	S)N)	r�r�r�r�r�r�r�r�r�)
r�r�r�r�r�r�r�r�r�r�r�r5r5r6�fix_plan�s�zFixPlan.fix_plan�NN)r.r/r0rVr	rrRr+rrr�rBr�r�r�r��propertyr�r5r5r5r6r�Xs6���
�
��

�%�

�r�c@s"eZdZdeeeffdd�ZdS)�
USNFixPlanr�cCr�r�)r�r�r�r5r5r6r��r�z#USNFixPlan.register_additional_dataN)r.r/r0rrVrr�r5r5r5r6r��sr�r�r�r�cCs,|rd|��vrt|||d�St|||d�S)N�cve�r�r�r�)�lowerr�r�r�r5r5r6�get_fix_plan�s��r��issue_id�clientr�c
CsRz|j|d�}|j}W||fStjy(}z
|jdkr"tj|d��|�d}~ww)N)�cve_id��r�)�get_cve�noticesr�SecurityAPIErrorr��SecurityIssueNotFound)r�r�r��usns�er5r5r6�
_get_cve_data�s�
��r�c
Csrz
|j|d�}t||�}Wntjy'}z
|jdkr!tj|d��|�d}~ww|jds5tjd|dd��||fS)N)�	notice_idr�r��release_packagesz+metadata defines no fixed package versions.�)r��issue�
extra_info)�
get_noticerrr�r�r��response�SecurityAPIMetadataError)r�r��usnr�r�r5r5r6�
_get_usn_data�s 
��
�r��binary_pkgs�check_esm_cachecCslg}g}t|�D])}tj|j|d�}|r$t�|j|�dkr$|�|j�q|�t|j|j|jd��q||fS)N)r�r)r(r)r*)	�sortedr�get_pkg_candidate_version�
binary_pkg�version_compare�
fixed_versionr�r'�
source_pkg)r�r��upgrade_pkgs�unfixed_pkgsr��candidate_versionr5r5r6�_get_upgradable_pkgs	s,������r��pkg_status_group�usn_released_pkgs�installed_pkgsc	Cs�tt�}tt�}|D]C\}}||j�||f�||��D].\}}|�|i�}	||	vr-q|	�|i��dd�}
t�|
|�dkrL||j�t|||
d��qq
||fS)Nr*r�r)r�r�r�)	r�list�
pocket_sourcer��items�getrr�r)r�r�r��binary_pocket_pkgs�src_pocket_pkgs�src_pkg�
pkg_statusr�r*�usn_released_srcr�r5r5r6�,_get_upgradable_package_candidates_by_pocket(s,�
����rr�cCsN|js|jS|jD]}|j��}|D]
}||vr|jSqq	|jdjS)Nr)r�r�r��keysr�)r�r��notice�usn_pkgs�pkgr5r5r6�_get_cve_descriptionFs

��r�cfgc

Cs�t|�\}}|r#t|d�}tjjj|_|jtj	t
jj|d�d�|jSt
|d�}t�}z
t||d�\}}Wn'tjtjfy\}	zt|d�}|j|	j|	jd�|jWYd}	~	Sd}	~	wwt||d�}
t|id�}t||�}t|||
|||d	�S)
N�r�)rvr|�rHrM�r�r�r��r�r�)r��installed_packages��beta_pockets)r��issue_description�affected_pkg_statusr�r�r)rr�rr�rdr�r�r�r+r3r8r<r�rrr�rr�r�r��msg_coderrr�_generate_fix_plan)
r�r�livepatch_cve_statusr|r�r�r�r�r�r�rr��cve_descriptionr5r5r6�
_fix_plan_cveVsR�
��
�
����
�rc
CsFt|d�}t�}z
t||d�\}}Wn+tjtjfy=}zt|d�}|j|j|j	d�t
|jgd�WYd}~Sd}~wwt||d�}t
|gid�}	|jsPgn|j|jsWgn|jd�}
t||j||	|||
d	�}g}|D]0}t||d�}t
|gid�}	|js�gn|j|js�gn|jd�}
|�t|j|j||	|||
d	��qlt
||d�S)
Nrrr	r
r�)r�rrr�)r�rrr�r�rr�)rrr�rr�r�r�r�r�rr�r�rr�cves_ids�
referencesrr�r��id)
r�rr�r�r��related_usnsr�r�rr�r�r�r�r5r5r6�
_fix_plan_usn�sx
�
�������
������rcCsR|rt�t|�s t|d�}tjj|d�}|j|j|j	d�|j
S|��}t||�S)Nr	r�r
)
�re�matchrr�r
�INVALID_SECURITY_ISSUE�formatr�r��namer��upperr�r�rr�r�r5r5r6�fix_plan_cve�s

r$cCsZ|rt�t|�s$t|d�}tjj|d�}|j|j|j	d�t
|jgd�S|��}t
||�S)Nr	r�r
r�)rrrr�r
rr r�r�r!r�r�r"rr#r5r5r6�fix_plan_usn�s
�
r%r[cCs.|tjkrtS|tjkrtS|tjkrtS|SrO)r
�'SECURITY_UBUNTU_STANDARD_UPDATES_POCKET�STANDARD_UPDATES_POCKET�SECURITY_UA_INFRA_POCKET�ESM_INFRA_POCKET�SECURITY_UA_APPS_POCKET�ESM_APPS_POCKET)r[r5r5r6�get_pocket_short_name�s


r,�esm_cache_updatedcCsL|r$|s$t|�js$t��}|durdSt�tj�}||}|jdkr$dSdS)NT�F)	r�is_attachedr�get_apt_cache_datetimer�nowr�utc�days)r�r-r�last_apt_updater1�time_since_updater5r5r6�_should_update_esm_cache�s���
r6)r�rrcCst|�}tt�}d}	t||tt|����d�}
|r|
�|�|dkr7tjj	j
|
_|
jt
jdtjj	id�|
jStjj	j
|
_t||�}t|���D]'\}}
|dkrg|
jtjdd�|
D�|d	�d
�tjj	j
|
_qHt|
||�\}}qH|su|
jStjtjtjfD�]}||}||}dd�|D�}t|�}|s�|r�tjj	j
|
_|
jt
jtjj	||d�d�q}|tjk}t ||	|�r�z	t!�"|�d
}	Wn,t#y�}z tj$j%t&|dt'|��d�}|
jtj(|j
|j)d�d
�WYd}~nd}~wwt*||�\}}|�rtjj	j
|
_|D]}|
jtj+|j,|j-|j.||d�d
�q�|tjk�rt|tjk�r"d}nd}t/|�j0�s7|
jt
j1d||d�d�nt/|�j2}|t3j4j	k�rP|
jt
j1t5j6j	|d�d�t7|�j8�pWg}|�rbdd�|D�ng}||v�rt|
jt
j9||d�d�|
jt
j:|||d�d�q}|
jS)NFr�rrvr
�releasedcS�g|]\}}|�qSr5r5��.0r��_r5r5r6�
<listcomp>4s�z&_generate_fix_plan.<locals>.<listcomp>r�)r�rMcSr8r5r5r9r5r5r6r<Qs)rvrZr[Tr�)r�r�)r)r�r(r�r[r%r&r?rn)rlrZcSsg|]}|j�qSr5)r!)r:rrr5r5r6r<�srsr]);r�rr�r�r�rr�rr�rdr�r�r�r+r3r8r;r�r�rr�r�rBrDrr
r&r(r*r,r�r:r6r�update_esm_caches�	Exception�E_UPDATING_ESM_CACHEr �getattrrVrEr!r�rCr)r*r(rr/r1�contract_statusr�ACTIVEr>r@r�enabled_servicesr2r4)r�rrr�r�rr��countr�r-r��pkg_status_groups�status_valuer�r�r[�
pkg_src_groupr��source_pkgs�pocket_namer�r�r�r�r��unfixed_pkg�service_to_check�contract_expiry_statusrC�enabled_services_namesr5r5r6r
s
�

�����
���
�����
�����
������
	����
����	rr�)a�enumr�collectionsrrr�typingrrrrr	r
�uaclientrrr
�'uaclient.api.u.pro.security.fix._commonrrrrrrrrrrrrrr�-uaclient.api.u.pro.status.enabled_services.v1r�(uaclient.api.u.pro.status.is_attached.v1rr�uaclient.configr�uaclient.data_typesr r!r"r#r$r'r)r+rVr'�unique�Enumr+r8r>rBrGrXr`rkrprqrtrurzr{r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��boolr�rrrrr$r%r,r6rr5r5r5r6�<module>s @
��

3Ks���

���
���
���
���
��
�1I���
����
����	�

Выполнить команду


Для локальной разработки. Не используйте в интернете!