Sindbad~EG File Manager

Current Path : /proc/self/root/usr/lib/python3.6/site-packages/up2date_client/__pycache__/
Upload File :
Current File : //proc/self/root/usr/lib/python3.6/site-packages/up2date_client/__pycache__/rhnreg.cpython-36.pyc

3

`��g�|�@s�ddlZddlZddlZddlZddlZddlmZddlmZddlmZddlm	Z	ddlm
Z
ddlmZddlmZdd	lm
Z
dd
lmZddlmZddlmZmZdd
lmZy4ddlZddlZddlmZmZmZmZmZmZWnFe k
�r6ddl!j"Zddl#j$Ze%Ze&Ze'Ze(Ze)Ze)Ze*Z+YnXyddl,m-Z-Wne k
�rbdZ-YnXddl.Z.e.j/ddd�Z0e1e0d��s�e0j.e0_2e0j2Z3dZ4de4Z5de4Z6dZ7dZ8ddddd�Z9dd�e9j:�D�Z;dd lm<Z<e<j=�Z>ej?�Z@d!d"�ZAd#d$�ZBd%d&�ZCd'd(�ZDd)d*�ZEd+d,�ZFd-d.�ZGd/d0�ZHd1d2�ZIe(eJd3�d4d5�ZKeJd6�d7d8�ZLd�d:d;�ZMd<d=�ZNd>d?�ZOd@dA�ZPdBdC�ZQdDdE�ZRdFdG�ZSdHdI�ZTdJdK�ZUGdLdM�dM�ZVd�eJdN�dOdP�ZWdQdR�ZXdSdT�ZYdUdV�ZZdWdX�Z[e(dY�dZd[�Z\d�d\d]�Z]d^d_�Z^d`da�Z_dbdc�Z`dddddifddde�Zadfdg�Zbdhdi�Zcdjdk�Zddldm�Zedndo�Zfdpdq�Zgd�drds�ZhGdtdu�du�Zidvdw�Zjdxdy�Zkd�dzd{�Zld|d}�Zme�d~k�r�dd��Znndd�lomnZndS)��N)�up2dateUtils)�
up2dateErrors)�up2dateAuth)�	rhnserver)�pkgUtils)�
up2dateLog)�rhnreg_constants)�hardware)�convertPackagesFromHashToList)�getPlatform)�ustr�sstr)�
raise_with_tb)�ListType�	TupleType�
StringType�UnicodeType�DictType�DictionaryType)�supportzrhn-client-toolsT)Zfallback�ugettextz/etc/sysconfig/rhnz%s/rhn_register_remindz%s/hw-activation-codez/etc/pki/consumer/cert.pemz/etc/sysconfig/rhn/jwt.tokenZ
shared_pro�shared�solo�admin)zCloudLinux OS Shared ProzCloudLinux OS SharedzCloudLinux OS SolozCloudLinux OS AdmincCsi|]\}}||�qS�r)�.0�k�vrr�/usr/lib/python3.6/rhnreg.py�
<dictcomp>Gsr)�configcCs&tjdtjtjB��r"d}d}tj|tjtjB�sNtjdtjtjB�rNd}d}tjd|tj�r�tj|tjtjB�r�tjd|�tjd|�nttd	��n�tjd
tjtjB�r�tjd�nttd��d
}tj|tjtjB��stjdtjtjB��rd}tjd|�}|�r"tjd|�dS)Nz/usr/sbin/rhnsdz/usr/lib/systemd/systemz/usr/bin/systemctlz/bin/systemctlz/lib/systemd/systemz%s/rhnsd.servicez%s enable rhnsd > /dev/nullz%s start rhnsd > /dev/nullz,Warning: unable to enable rhnsd with systemdz/sbin/chkconfigz$/sbin/chkconfig rhnsd on > /dev/nullz.Warning: unable to enable rhnsd with chkconfigz
/sbin/servicez/usr/sbin/servicez%s rhnsd status > /dev/nullz%s rhnsd start > /dev/null)�os�access�R_OK�X_OK�system�print�_)Zsystemd_system_unitdirZsystemd_systemctlZservice_pathZrcrrr�
startRhnsdOs,r(cCs�tdp
d}tj|tj�siSt|d�}|j�}i}x`|D]X}|j�}|dkrPq:y|jd�\}}Wn"tk
r�t	t
j|��YnX|j�||<q:W|S)NZoemInfoFilez/etc/sysconfig/rhn/oeminfo�r��:)�cfgr!r"r#�open�	readlines�strip�split�
ValueErrorrrZOemInfoFileError)Z
configFile�fd�L�info�i�key�valuerrr�
getOemInfops 

r8cCs*tjttj�r"tjt�}|jdkSdSdS)z@ Returns true if system is registred using subscription manager rFN)r!r"�	RHSM_FILEr#�stat�st_size)Zstatinforrr�rhsm_registered�s

r<cCstjtdtj�S)N�systemIdPath)r!r"r,r#rrrr�
registered�sr>cCs$tjttj�s ttd�}|j�dS)Nzw+)r!r"�REMIND_FILEr#r-�close)r2rrr�createSystemRegisterRemindFile�s
rAcCstjttj�rtjt�dS)N)r!r"r?r#�unlinkrrrr�removeSystemRegisterRemindFile�srCcCs�tjj|�}tj|tj�sdStj|tj�rLytj||d�Wn
dStj|tjtj	Bt
dd��}tj|d�}z|jt
|��Wd|j�XdS)z; Write a file to disk that is not readable by other users. Fz.saveZ0600��wNT)r!�path�dirnamer"�W_OK�F_OK�renamer-�O_WRONLY�O_CREAT�int�fdopen�writer
r@)Zsecure_fileZ
file_contentsZdir_namer2Zfd_filerrr�_write_secure_file�s
rPcCs"ttd|�}|rt�t�|S)Nr=)rPr,rC�updateRhsmStatus)�systemId�resrrr�
writeSystemId�s
rTcCsxd}tj�}|dkrdSy6tj|�}|j�}|j|�dj}t|dd��}Wn$ttj	fk
rrt
jd�dSX|S)Nz'//member[name='system_id']/value/stringr�z@systemID file doesn't have system_id field or the file is broken)r�getSystemId�libxml2ZparseDocZxpathNewContextZ	xpathEvalZcontentrM�
IndexErrorZparserError�log�log_me)Z	xpath_strrR�result�context�	system_idrrr�extract_system_id�s

r^)�token�allowTransitioncCsnddl}ddl}|jjd�s dSdd|g}|r8|jd�|j|�}|j�\}}|jdkrjtj	d||f�dS)zH
    Execute binary file which we use as hook for jwt token updates
    rNz /opt/cloudlinux/venv/bin/python3z/usr/sbin/cl-pre-jwt-updatez--new-tokenz--allow-transitionz7Pre jwt update hook failed with stdout=%s and stderr=%s)
�
subprocessr!rF�exists�append�Popen�communicate�
returncoderYrZ)r_r`rar!�cmd�p�stdout�stderrrrr�_execute_pre_jwt_update_hook�s



rk)r`cCsjddl}ddl}|jjd�s dSdg}|r4|jd�|j|�}|j�\}}|jdkrftj	d||f�dS)zH
    Execute binary file which we use as hook for jwt token updates
    rNz /opt/cloudlinux/venv/bin/python3z/usr/sbin/cl-post-jwt-updatez--allow-transitionz8Post jwt update hook failed with stdout=%s and stderr=%s)
rar!rFrbrcrdrerfrYrZ)r`rar!rgrhrirjrrr�_execute_post_jwt_update_hook�s


rlFcCs�tj�}y|jj|�}WnFtjk
r.dStjtjtjtj	fk
r^t
jtj
��dSXt||�tt|�t|�dS)z�
    Get a JWT token from CLN and save it to the file
    :param systemId: content of file `/etc/sysconfig/rhn/systemid`
    :return: None
    N)r�	RhnServerZup2dateZgetJWTTokenr�UnknownMethodExceptionZAuthenticationTicketErrorZRhnUuidUniquenessError�CommunicationErrorZ$AuthenticationOrAccountCreationErrorrY�
log_exception�sys�exc_inforkrP�	JWT_TOKENrl)rRr`Z
xmlrpm_serverr[rrr�getAndWriteJWTTokenToFile�s

rtcCstt|d�S)z=Returns True if the write is successful or False if it fails.�
)rP�HW_CODE_FILE)�hw_activation_coderrr�writeHWCodesrxcCspy"tjjd�r t�\}}||fSWntk
r6YnXt�\}}|dk	rR||fSt�\}}|dk	rl||fSdS)a�
    This function returns the UUID and virtualization type of this system, if
    it is a guest.  Otherwise, it returns None.  To figure this out, we'll
    use a number of heuristics (list in order of precedence):

       1.  Check /proc/xen/xsd_port.  If exists, we know the system is a
           host; exit.
       2.  Check SMBIOS.  If vendor='Xen' and UUID is non-zero, we know the
           system is a fully-virt guest; exit.
       3.  Check /sys/hypervisor/uuid.  If exists and is non-zero, we know
           the system is a para-virt guest; exit.
       4.  If non of the above checks worked; we know we have a
           non-xen-enabled system; exit.
    z/proc/xen/xsd_portN)NN)r!rFrb�get_fully_virt_info�IOError�get_para_virt_info)�uuid�	virt_typerrr�
get_virt_infos


r~cCsVy<tdd�}|j�}|j�|j�jdd�jd�}d}||fStk
rPYnXdS)	z�
    This function checks /sys/hypervisor/uuid to see if the system is a
    para-virt guest.  It returns a (uuid, virt_type) tuple.
    z/sys/hypervisor/uuidr)�-r*z
ZparaN)NN)r-�readr@�lower�replace�rstriprz)Z	uuid_filer|r}rrrr{Cs
r{cCs@tj�}tj�}|j�dkr8|j�jdd�}d}||fSdSdS)z�
    This function looks in the SMBIOS area to determine if this is a
    fully-virt guest.  It returns a (uuid, virt_type) tuple.
    Zxenrr*ZfullyN)NN)r	Z
dmi_vendorZdmi_system_uuidr�r�)Zvendorr|r}rrrryUsrycCstd|�}t|�td�kS)Nz0x%sr)�eval�long)r|rrr�
_is_host_uuidcsr�cCstj�}|jj�S)N)rrm�registrationZwelcome_message)�srrr�welcomeTextgsr�cCstj�}|jj�dS)N)rrmZcapabilitiesZvalidate)r�rrr�getCapsmsr�cCstj�}|jj||�S)N)rrmr�Zreserve_user)�username�passwordr�rrr�reserveUserrsr�c@sfeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�RegistrationResultNcCsB||_||_||_||_||_t|�dkr2||_nd|_||_dS)Nr)�	_systemId�	_channels�_failedChannels�_systemSlots�_failedSystemSlots�len�_universalActivationKey�rawDict)�selfrR�channelsZfailedChannels�systemSlotsZfailedSystemSlotsZuniversalActivationKeyr�rrr�__init__xszRegistrationResult.__init__cCs|jS)N)r�)r�rrrrV�szRegistrationResult.getSystemIdcCs|jS)N)r�)r�rrr�getChannels�szRegistrationResult.getChannelscCs|jS)N)r�)r�rrr�getFailedChannels�sz$RegistrationResult.getFailedChannelscCs|jS)N)r�)r�rrr�getSystemSlots�sz!RegistrationResult.getSystemSlotscs�fdd��jD�S)Ncsg|]}�j|��qSr)�_getSlotDescription)rr�)r�rr�
<listcomp>�sz@RegistrationResult.getSystemSlotDescriptions.<locals>.<listcomp>)r�)r�r)r�r�getSystemSlotDescriptions�sz,RegistrationResult.getSystemSlotDescriptionscs�fdd��jD�S)Ncsg|]}�j|��qSr)�_getFailedSlotDescription)rr�)r�rrr��szFRegistrationResult.getFailedSystemSlotDescriptions.<locals>.<listcomp>)r�)r�r)r�r�getFailedSystemSlotDescriptions�sz2RegistrationResult.getFailedSystemSlotDescriptionscCs|jS)z5Returns None if no universal activation key was used.)r�)r�rrr�getUniversalActivationKey�sz,RegistrationResult.getUniversalActivationKeycCst|j�dkot|j�dkS)z�Returns True if the system was subscribed to at least one channel
        and was given any type of system slot so it will get updates. In other
        words, returns True if the system will be getting at least basic
        updates.

        r)r�r�r�)r�rrr�hasBaseAndUpdates�s	z$RegistrationResult.hasBaseAndUpdatescCs&|dkrtjdtjS|j|�SdS)N�virtualization_host� )r�VIRTZVIRT_FAILEDr�)r��slotrrrr��sz,RegistrationResult._getFailedSlotDescriptioncCs$|dkrtjS|dkrtjS|SdS)NZenterprise_entitledr�)rZ
MANAGEMENTr�)r�r�rrrr��s
z&RegistrationResult._getSlotDescription)N)�__name__�
__module__�__qualname__r�rVr�r�r�r�r�r�r�r�r�rrrrr�ws

r�)�human_readablec	CsFd}tjj|�sdSt|�� }|j�jd�}|r4|St|SQRXdS)Nz/opt/cloudlinux/cl_editionrru)r!rFrbr-r�r/�_human_readable_to_product)r�Zedition_cache_file�fZraw_editionrrr�getServerEdition�s
r�cCslddlm}m}tjjd�s"t��d}||d||d�}dd�|j�D�\}}|rVt��t|d	d�j	d
��S)Nr)rd�PIPEz/opt/cloudlinux/venv/binzZ/opt/cloudlinux/venv/bin/python3 -c "from clcommon.cpapi import cpusers; print(cpusers())"T)�shellrirjcSsg|]}|j�j��qSr)�decoder/)rr[rrrr��sz.get_users_count_from_cllib.<locals>.<listcomp>�z, ���)
rardr�r!rFrbr1rer�r0)rdr�rgZprocess�output�errorsrrr�get_users_count_from_cllib�sr�cCsddlm}|�}t|j��S)Nr)�ClPwd)Zup2date_client.clpwdr�r�Zget_uid_dict)r��pwdrrr�get_users_count_generic�sr�cCs*y
t�}Wntk
r$t�}YnX|S)N)r��	Exceptionr�)Zusers_countrrr�countServerUsers�s

r�cCsTyt|�}WnPtjk
rH}ztd|j�tjd�WYdd}~Xntjk
r\dSXt�}|d}||krxdS|r�tdj	t
|t
|d��td�tjd�|�sPtjj�s�td�td�t
|�dt
|�d	�}d
dd�}|j
|�}	|	dk	�rHt�}
|
|	k�r4td||�d
|
�d��tjd�n|�d||�d�}t|�dS)Nz%sr��editionz�WARNING: Automatic registration in yum transactions is only available when edition matches the provided license. Your current edition is {current_edition} and your license is {new_edition}.)Zcurrent_editionZnew_editionz0Run clnreg_ks manually to complete registration.aError: interactive input required for edition migration, but tool is running in non-interactive mode. Please try running the tool again in interactive shell or add `--migrate-silently` flag to accept allquestions and perform the edition migration silently.za edition installed on your server does not match license you are trying to register server with: zh. Migration is required. You may lose access to the services which are not supported by the new edition.�)rrz@The license you are trying to register with allows a maximum of z% hosting accounts which is less than z) users detected on this server. Aborting.zG Also, the license you are trying to register with allows a maximum of zM hosting accounts. Make sure that your system complies with this requirement.)�checkKeyrror&�errmsgrq�exitrnr��format�_product_to_human_readable�stdin�isatty�getr��_askConfirmation)�
activationKeyZ
strictEditionZsilentMigrationZlicenseInformation�eZcurrentEditionZlicenseEdition�messageZedition_to_users_limitZlicense_users_limitZusers_on_serverrrr�checkLicenseKey�sB




r�)�confirmationMessagecCs2t|�td�}|j�dkr.td�tjd�dS)zS
    Prints message and makes sure that client is ready for edition migration.
    z Do you want to continue? [N/y]: �yzAborted.r�N)r&�inputr�rqr�)r�Zresponserrrr�s
r�cCs�|dkr|dkstd��|tj�tj�tj�d�}tj�}|dk	rJ||d<|rlx|j�D]\}}	|	||<qXW|rz||d<n||d<||d<|dk	r�||d<n(tj	j
d	�r�d
ntj	j
d�r�dnd
|d<tdr�tt
j��|d<tj�}
|
jj|�}|S)ziWrapper for the old xmlrpc to register a system. Activates subscriptions
    if a reg num is given.

    Nz)username and password usage is deprecated)Zprofile_nameZ
os_releaseZrelease_nameZarchitecturer]r_r�r�r�z/etc/cloudlinux-edition-solorz/etc/cloudlinux-edition-adminrr�supportsSMBIOS�smbios)�AssertionErrorr�
getVersion�getOSRelease�getArchrrV�itemsr!rFrbr,�_encode_charactersr	�
get_smbiosrrmr�Z
new_system)r�r��profileNamer_�otherr�Z	auth_dictZ
system_id_xmlr6�itemr��retrrr�registerSystem)s2

r�cCstj�}|jj|�}|S)zG
    Check the activation key and return it's edition and customer
    )rrmr�Z
license_check)r�r�r�rrrr�Xsr�cCsly,tj�}|j|dddd�}tj|dd�}Wntjk
rBdSXy|j�Wntjk
rfYnXdS)Nzcom.redhat.SubscriptionManagerz/EntitlementStatusF)Z
introspectz0com.redhat.SubscriptionManager.EntitlementStatus)Zdbus_interface)�dbusZ	SystemBusZProxyObjectClassZ	InterfaceZ
DBusExceptionZcheck_status)ZbusZvalidity_objZvalidity_ifacerrrrQcs
rQcCs�tj�}tj�}tj�}tj�}d}y|jj|||||�}Wn@tj	k
r|t
j�d}|jdkrvt
tj|j��n�YnX|S)Nr��c)rrmrr�r�Z
getReleaser�Zavailable_eus_channels�	xmlrpclibZFaultrqrrZ	faultCoderrZ
DelayErrorZfaultString)r�r�r�Zserver_archZserver_versionZserver_releaseZavailableChannelsr�rrr�getAvailableChannelsxs 

r�c
	Cs$|dkri}|r6|dkst�|dks(t�|dk	sZt�n$|dk	sBt�|dk	sNt�|dksZt�x|j�D]}|dksdt�qdWtdr�ttj��|d<tj�}|r�|jj	|t
j�t
j�t
j
�||�}n$|jj|t
j�t
j�t
j
�|||�}tjd	|�t|d
|d|d|d
|d|d|d�}	|	S)a�Uses the new xmlrpcs to register a system. Returns a dict instead of just
    system id.

    The main differences between this and registerSystem and that this doesn't
    do activation and does child channel subscriptions if possible. See the
    documentation for the xmlrpc handlers in backend for more detail.

    If nothing is going to be in other, it can be {} or None.

    New in RHEL 5.

    N�registration_number�org_id�	virt_uuidr}�channelr�r�zReturned:
%sr]r�Zfailed_channelsZsystem_slotsZfailed_system_slotsZuniversal_activation_key)r�)r�r�r�r}r�)r��keysr,r�r	r�rrmr�Znew_system_activation_keyrr�r�r�Znew_system_user_passrY�	log_debugr�)
r�r�r�Zpackagesr�r�r6r�r4r[rrr�registerSystem2�sNr�cCstdS)NZsupportsEUS)r,rrrr�server_supports_eus�sr�cCsdS)Nr)rRZhardwareListrrr�sendHardware�sr�cCsdS)Nr)rRZpackageListrrr�sendPackages�sr�cCstdk	rtj�dS)N)rZrefresh)rRrrr�sendVirtInfo�sr�cCstj�}t|jj|��dS)N)rrmr&r�Z
list_packages)rRr�rrr�listPackages�sr�cCs�tj|�\}}}}}}|dks&|dkrDd|}tj|�\}}}}}}|d	krVtjd��|dksn|dksn|dkrrd}tj||||||f�}|S)
zzRaises up2dateErrors.InvalidProtocolError if the server url has a
    protocol specified and it's not http or https.

    Nr*zhttps://�https�httpzCYou specified an invalid protocol. Only https and http are allowed.�/z/XMLRPC)r�r�)�urlparserZInvalidProtocolErrorZ
urlunparse)�serverZprotocol�hostrFZ
parametersZqueryZfragmentIdentifierrrr�makeNiceServerUrl�s
r�cCsdS)zdReturns 'hosted' if the url points to a known hosted server. Otherwise
    returns 'satellite'.
    Z	satelliter)Z	serverUrlrrr�
getServerTypesr�c@sBeZdZdZdZiifdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�ActivationResultrr�cCs||_||_||_||_dS)zschannels and systemSlots are dicts where the key/value pairs are
        label (string) / quantity (int).

        N)�_status�_regNumr�r�)r�ZstatusZregistrationNumberr�r�rrrr�szActivationResult.__init__cCs|jS)N)r�)r�rrr�	getStatus$szActivationResult.getStatuscCs|jS)N)r�)r�rrr�getRegistrationNumber'sz&ActivationResult.getRegistrationNumbercCs|jS)z7Returns a dict- the key/value pairs are label/quantity.)r�)r�rrr�getChannelsActivated*sz%ActivationResult.getChannelsActivatedcCs|jS)z7Returns a dict- the key/value pairs are label/quantity.)r�)r�rrr�getSystemSlotsActivated.sz(ActivationResult.getSystemSlotsActivatedN)
r�r�r��
ACTIVATED_NOW�ALREADY_USEDr�r�r�r�r�rrrrr�sr�cGs�g}x�|D]�}t|�}|tkr(t|�}nZ|tkrDtdd�|D��}n>|tkr\dd�|D�}n&|tksl|tkr�tdd�|j	�D��}|j
|�q
Wt|�dkr�|dSt|�SdS)	u� All the data we gathered from dmi, bios, gudev are in utf-8,
            we need to convert characters beyond ord(127) - e.g ® to unicode.
        css|]}t|�VqdS)N)r�)rr5rrr�	<genexpr><sz%_encode_characters.<locals>.<genexpr>cSsg|]}t|��qSr)r�)rr5rrrr�>sz&_encode_characters.<locals>.<listcomp>cSsg|]\}}t||��qSr)r�)r�name�valrrrr�@sr�rN)�typerrr�tuplerrr�dictr�rcr�)�argsr[r�Z	item_typerrrr�2s

r�cCs�d}d}d}ytj�}t|�}Wn$tjd�tjtj��YnX|dk	r�y.t|||�}|j	�t
jkrz|j�}t
|�Wn>tjk
r�tjd�Yn tjk
r�tjd�YnX|S)NzMThere was an error while reading the hardware info from the bios. Traceback:
z<There are are no entitlements associated with this hardware.z,The hardware id was not recognized as valid.)r	Zget_hal_system_and_smbiosr�rYrZrprqrr�activateHardwareInfor�r�r�r�rxrZNotEntitlingErrorr�ZInvalidRegistrationNumberError)Zloginr�ZactivateHWResult�hardwareInforwrrr�_activate_hardwareHs*

rc
Cs�i}|rd|i}tj�}|jj||||�}|d}|d}tjd|�|dkr\ttj|�S|dkrpttj|�Sd|}	t	j
|	��dS)	z�Tries to activate an entitlement linked to the hardware info that we
    read from the bios.

    Returns an ActivationResult.
    Can raise:
        Invalid number.
        Hardware info is not entitling.
        Communication errors, etc

    r�Zstatus_coder�zServer returned status code %srr�zNThe server returned unknown status code %s while activating the hardware info.N)rrmr�Zactivate_hardware_inforYr�r�r�r�rro)
r�r�rZorgIdr�r�r[Z
statusCodeZregNumr�rrrrds 
rcCsdtjdtjtjB�rVddlm}m}|dg|||d�}tdd�|jj	�|j
j	��n
tjd�dS)Nz/usr/sbin/rhn_checkr)rdr�)r�rirjcSs
tj|�S)N)rYrZ)�xrrr�<lambda>�sz$spawnRhnCheckForUI.<locals>.<lambda>z Warning: unable to run rhn_check)
r!r"r#r$rardr��maprir.rjrYrZ)rdr�rhrrr�spawnRhnCheckForUI�s
rZdebcCsdS)z.On Debian no extra action for plugin is neededr�r)r�rrrrrr�pluginEnable�sr)r)F)F)NNNNNN)N)N)pr!rqr��base64rWZup2date_clientrrrrrrrr	Zup2date_client.rhnPackageInfor
Zup2date_client.pkgplatformrZrhn.i18nrr
Zrhn.tbrr�r��typesrrrrrr�ImportErrorZurllib.parse�parseZ
xmlrpc.clientZclient�listr�bytes�strrrMr�Zvirtualizationr�gettextZtranslation�t�hasattrrr'Z	SYSID_DIRr?rvr9rsr�r�r�r ZinitUp2dateConfigr,ZinitLogrYr(r8r<r>rArCrPrTr^�boolrkrlrtrxr~r{ryr�r�r�r�r�r�r�r�r�r�r�r�r�rQr�r�r�r�r�r�r�r�r�r�r�rrrrZup2date_client.pmPluginrrrr�<module>	s�$



!

,?>
-;


"



Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists