HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/config/__pycache__/__init__.cpython-310.pyc
o

�N�g>��@s�)dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z
ddlmZddl
ZddlZddlZddlZddlZddlZddlZddlZddlmmZddlZddlZddlZddlZddlZddlZddlZddl Zddl!Zddl"m#Z#m$Z$m%Z%m&Z&m'Z'zddl(Z(dZ)Wne*y�dZ)Ynwe�+e,�Z-ddgZ.d	Z/d
Z0ejj1�2�r�dZ3dZ4dZ5d
Z6n2ejj1�7�r�dZ3dZ4dZ5ejj8�9�Z6nejj1�:�r�dZ3dZ4dZ5ejj8�9�Z6ndZ3dZ4dZ5ejj8�9�Z6dd�Z;e<e;�d�Z=e<e;�d�Z>e�?ide@eAf�de@e<f�de@�de@�de@�de@�de@e<f�de@e<f�de@�deB�de<�deB�de<�d e@�d!eB�d"eB�d#eB�id$e@�d%eB�d&eB�d'e<�d(e@�d)e@�d*e@�d+e@�d,e@�d-e@�d.eCe@f�d/e@�d0eA�d1eB�d2e@�d3e@�d4e<��id5e@�d6e@�d7eA�d8eA�d9eB�d:eB�d;eDd�e@f�d<eB�d=eDd�e@f�d>eB�d?e@�d@eDd�e@f�dAe@�dBeA�dCeB�dDe@�dEe@��idFe@�dGeB�dHeB�dIeC�dJeC�dKeA�dLeA�dMe@�dNe@�dOeA�dPeB�dQe@�dReA�dSeA�dTeA�dUeA�dVeA��idWeA�dXeA�dYeA�dZeA�d[eA�d\eA�d]eC�d^eB�d_eB�d`eB�dae<�dbeB�dceB�dde<�dee@�dfeDd�eBf�dge<��idhe<�die<�dje<�dke<�dle<�dme<�dne@�doe@�dpeDd�e@f�dqe@�dre@�dse@�dteEe@f�dueC�dve<�dwe<�dxe<��idyeB�dzeB�d{eB�d|eB�d}eB�d~eB�deB�d�eB�d�eB�d�eBe<f�d�eB�d�e@�d�eB�d�eB�d�eB�d�eB�d�eB��id�eB�d�eF�d�eF�d�eB�d�eF�d�eB�d�eC�d�eB�d�eDd�e@f�d�eDd�e@f�d�e@�d�eBe@f�d�eA�d�eF�d�eDd�e<f�d�eB�d�eF��id�eF�d�eB�d�e<�d�e<�d�e<�d�eAe@f�d�e<�d�e<�d�eA�d�eA�d�e@�d�e@�d�e@�d�eB�d�eF�d�eF�d�eF��id�e@�d�e<�d�e<�d�e<�d�e<�d�e<�d�eDd�e<f�d�eDd�e<f�d�eDd�e<f�d�eDd�e<f�d�eDd�e<f�d�eDd�e<f�d�eDd�e<f�d�eDd�e<f�d�eDd�e<f�d�e<�d�e<��id�e<�d�e<�d�eB�d�eC�d�eB�d�eB�d�eB�d�e@�d�eB�d�eB�d�eB�d�e<�d�e<�d�e<�d�e<�d�e<�d�e<��id�e<�d�e<�d�e<�d�eB�d�eB�d�e@�d�e@�d�eB�d�e@�d�e@�d�e@�d�eA�d�eB�d�eB�d�eA�d�eB�d�e@��id�e@�d�e@�d�eA�d�eA�d�eB�d�eB�d�eA�d�eA�d�eA�d�eB�d�eA�d�e@�d�e@�d�e@�d�e@�d�eA�d�eA��id�eA�d�e@�d�e@�d�e@�d�e@�d�e@�d�eA�d�eA�d�e@�d�e@�d�eA�d�eA�d�eA�d�e<�d�eB�d�eB��de<��i�de@��deB��de<��de@��deB��de@��deB��deB��d	e@��d
eA��de@��deB��d
eC��deB��de@eAf��de@��deB��i�deA��deB��deC��deC��deB��deC��de<��deBeCf��deB��de<��deAe@f��deAe@f��deA��deB��d eB��d!eB��d"eB��i�d#eB��d$e@��d%e@��d&e<��d'eB��d(e<��d)eC��d*eB��d+eB��d,eB��d-e@��d.e@��d/eB��d0eB��d1e<��d2eA��d3e<��i�d4e<��d5e<��d6eA��d7eB��d8e@��d9e@��d:eCeAf��d;eC��d<eB��d=e@��d>e<��d?e@��d@e@��dAe@��dBe@��dCe<��dDe<��i�dEeA��dFeA��dGeB��dHe@��dIe@��dJeB��dKe@��dLe@��dMe@��dNeA��dOe<��dPeA��dQe<��dReB��dSeB��dTe<��dUeC��i�dVeC��dWeB��dXeB��dYeB��dZeB��d[e@eBf��d\eB��d]e<��d^e@��d_e<��d`e<��dae<��dbe<��dceB��ddeB��dee<��dfeF��i�dge<��dhe@��die@��djeB��dke@��dleF��dme@��dne@��doeF��dpeB��dqe@��dre@��dseB��dteB��dueB��dve@��dweA��i�dxe<��dyeB��dze<��d{eDd�e@f��d|eDd�e@f��d}eB��d~eB��deB��d�eB��d�eB��d�e<��d�e@��d�eF��d�eF��d�e<��d�e<��d�eB��i�d�eA��d�eB��d�e@��d�e@��d�e@��d�e<��d�eA��d�e<��d�e@��d�e<��d�e<��d�eB��d�eB��d�e@��d�e@��d�e@eAf��d�eCeBeDd�f��i�d�eB��d�eB��d�eB��d�eC��d�eC��d�e@��d�e@��d�e<��d�eF��d�eB��d�e<��d�eB��d�eB��d�eB��d�e@eAf��d�eCeBf��d�eC��i�d�eB��d�eB��d�eB��d�eDd�e@f��d�e@��d�eB��d�eA��d�e@eAf��d�eDd�eCf��d�eC��d�eB��d�eB��d�e<��d�e@��d�eB��d�e@��d�e@��e<e<e<e<e@e@e@�d����ZGe�?id��d��d�d��d�d��d�d��d�d��d�d��dd�dd�d�d“d�d��dd�dd�dd�dd�d"d��d\d�d#d�id �dÓd(�d��d*ejj8�9��d+ejHjI�d,ejJ�KejHjL�dĐdš�d-�d��d.i�d/ejJ�KejHjM�dš�d0g�d1d��dPg��d�d��dǐdȓ�d�d�d2ejJ�KejHjN�dš�d3ejJ�KejHjO�dš�d4d��id5�d��d6�dʓd7g�d8g��d>d�d9d�d:d�d;d�d<d�d=d�d>d�d�d��d�d˓�dd��dd�d�d��d�d̓�i�d�d͓�d�d	��dϐdГ�dd��d�dѓ�d�d͓�d�ejJ�KejHjM�dŐdӡ�d?�dԓd@d�dA�d��dBg��d�g�dE�d���d�d��d��dԓ�d�d��dאd�ejHjPgi��idF�dٓdGd�dHd�dI�d�ejHjQejHjRgi��d	�dړ�d
g��d�dؓ�dd��d�dۓ�dg��dg��d�d�g��dd��d d�dJ�d�ejHjSejHjTgi�dK�dݐd�g�dLg��idM�dߓdN�d�dO�d�g�dPd�d�e/�d�e/�d�e/�d�e/�d�e/�d�e/�d�e/�d�e/��d�d��d�d��d�d���d�d���d�d���id�d�d�d�dӐd��dԐd��d�d�d֐d��dאd��dؐd��d�e.�d�d�d�g��d�d���d�d���d�d��d�d���d�d���d�d���id�d�dސd��dߐd��d�d��d�g�d�g�d�d�d�d�d�g�d�g�d��d�e.�d�d�d�d�dQe0�dRg�d��dSg�dTg��idUg�dVg�dWg�dYg�dXg�dZg�d[g�d\g��di��di�d]i�d^d�d_d��d'd��d(�d�d`d�dad��idbd�dcd�ddd	�dee3�d�e=�dfd�dg�d�dh�d�di�d��d��d��d�d�dnejJ�KejHjU�dš�do�d�dpd�dqe#�dre$�dse%��idte'��d�e&�dui�dvd�dwd�dx�d��dyd�dzd��d-�d��d{d�d|e4�d}d�d~d�d�d�d��d��d�d�d�d��id�d�d�d��d�d�d�d�dCd�dD�d��d��d��d�d�d�d�d�d�d�d�d�i�d�d�d��d��d�d�d�g�d��d���id�d�d�d�d��d��d��d��d�d�d��d�d��d��d��dГ�de�d���d?�d���d@ejJ�KejHjQ�d��d���dAejJ�KejHjQ�d��d���dB�d��dC�d��dD�d��dE�dg��dF�dg��i�dd��d�d���dGd��dH�d���dI�d���dJd��dK�d���dL�d���dM�d���dNe.�d�ejJ�KejHjV�d	��d��d
��d3d	��d4�d���d5�d���d6g�d�d��id��dȓd�d�d�d��dOd��dQd��dYd��dZd��d[d��d]�d��d^�d��d`�d��da�d
��dbe5��d*d��dcd��ddd��dud��i�dd��dxd��d{d��d|d��d}d��dd��d�d��d�d��d��d���d��d��d��d��d��d�d��d��d�g��d�d��d��d���d��d���i�d��d���d�d��d��dۓ�d�d��d�d��d�d��d�d��d��d��d��d��d�i��d�i��d�d��d�d��d�i��dsd��d�g��d�d��ddi�d�d�d���ZWe�?id��d��d��d�d��d��d��d��d�d�d*e6�d��d�d3ejJ�KejHjOd��d4d�d��d“�d�d�d��d�d��dѓd�d�d+ejHjI�d,ejJ�KejHjL�d�d��d)�d��id/ejJ�KejHjMd��dI�d�ejHjQejHjRgi�d��d�ejHjXgi�dJ�d�ejHjSejHjTgi�dK�dݐd�g�dLg�dM�dߓdN�d�dO�d�g�dPd��d�d��d��dԓ�d�d��dאd�ejHjPgi��d	�dړ�d
g�d;d��id<d�d=d��d�dؓdFdG�dGd�d�e/�d�e/�d�e/�d�e/�d�e/�d�e/�d�e/�d�e/��d�d��d�d��d�d���d�d���i�d�d��d�d�d�d�dӐd��dԐd��d�d�d֐d��dאd��dؐd��d�e.�d�d�d�d�d�g��d�d���d�d���d�d��d�d���i�d�d���d�d��d�d�dސd��dߐd��d�d��d�g�d�g�d�d�d�d�d�g�d�g�d��d�e.�d�d�d�g�d�d��d�d���id�d��d�d�d�g�d�g�dd�d�d�d�d�d�g�d�d��d�d��d�d�d�d�d��d�d�g�d�g�dx�d��d&d��id'd	�d��dؓd��d��d�g�d�g�d�g�d��d�d�d��dd��d�d˓�dd��dd�d�d��d�d̓�d�d͓�dd��d�dѓ�i�d�d͓�dd��d
i��dd��d�d ��d�d!��dd��d"ejJ�KejHjU�d#���d$ejJ�KejHjV�d%��d[g��dg�d\g��dd��di��di��dd��di��i�d�d&��dd��d"d��d#d��d$�d���d%�d��d�ejJ�KejHjMd�dӡ�dVg��dd��d�dۓdg�d���dg��dg��d�d�g��dd��d d��d!d��i�d&�d'�dQe0�dRg�d��d2ejJ�KejHjNd��d_d��d'd�d6�dʓd7g�d8g�d9d�d?�dԓd@d��d)i��d*d��d+d��d,d��d-�d���i�d.�d(��d/d��d0d��d)d�dee3�d�e=�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dfd�dj�d*��idk�d+�dl�d,�dm�d-�dnejJ�KejHjUd��do�d�dpd�dqe#�dre$�dse%�dte'��d�e&�dui�dvd�dwd�d�ejJ�KejHjV�d.���d1�dѓd��d
��i�d2g��d3d	��d4�d���d5�d���d6g�d��d��d�d�d�g�d�g�d��d��d7d��d8�d/�dzd�d�d�d��d��d�d�d�d��id�d�d�d��d�d��d9�d��d�d	��d:i��d;i��d<d�d{d�d}d��d=ejJ�KejHjU�d0��d�d�d�d�d�d�d�d�d��d1��d@ejJ�KejHjQ�d��d���i�dAejJ�KejHjQ�d��d���dB�d��dE�dg��dF�dg��dd��d�d���dGd��dH�d���dI�d���dJd��dK�d���dL�d���dM�d���dNe.��dT�d��dUi��dVi��i�dWd��dXd�d�d�d��dȓd�d�d�d��d\d��d]�d��d^�d��d_�d���dfd��dg�dۓ�d2d��dh�d���d3�d���di�d4��djd��i�dk�d���dld	��dm�d���dn�d4��do�d5��dpd��dqejJ�KejHjU�d6���drejJ�KejHjY�d7�d8���dud��dvejJ�KejHjMd�d9���dwg��dyd��dzd�d �dÓd!d�d$d$�d%d��i�d}d��dd��d~d��dd��d�d��d:d��d��d��d��d��d��d��d��d��d�d��d��d;��d�d��d�d��d��d���d��d���d�d��i�d�i��d�i�d^d��d��d���d��d���d�d��d��d<��d�d��d�d��d�d��d�i��d�d��d�d��d�d��d�d��d�d��d�d���d=�d�d�d��d�g�d̐d�i�d�d>�
��ZZe�?id2ejJ�KejHjN�d?��dnejJ�KejHjU�d?��d�d��d�d��d�ejJ�KejHjM�d?�dӡ�d0g�d@��d��dA�d�d�d�d�dĐd˓d�d�d�d�d�d�d�d�d,ejJ�KejHjL�dĐd?��d/ejJ�KejHjM�d?��d3ejJ�KejHjO�d?���d�ii��Z[e�?id�d�d��dB��dC�d��d/ejJ�KejHjM�dD���d]�dE��dF�d���dG�dH��dId��dJd��dKd��dL�dM�dnejJ�KejHjU�dD��do�d�dpd�dqe#�dre$�dse%�e'e&iddd�di�dN���Z\e�?ejJ�KejHjV�dO�ejJ�KejHjU�dP��dȐdQ��Z]e�?ejJ�KejHjN�dR�ejHjRejHjTejHj^ejJ�KejHjU�dR��dS�dTejJ�KejHjM�dR�ejJ�KejHj_�dU�g�dV�ejJ�KejHjM�dR�dW��d�dX�d�ejJ�KejHj`�dR��dY��Zae�?d��dZi�Zbe�?d��d[i�Zc�d\�d]�Zd�d^�d_�Ze�d`�da�Zf�db�dc�Zg�dd�de�Zh�df�dg�Zi�dh�di�Zj�dj�dk�Zk�d��dl�dm�Zl�d��dn�do�Zm�d��dp�dq�Zn�dr�ds�Zo�dt�du�Zp�dv�dw�Zq�	x				�	Őd��dy�dz�Zr�d��d{�d|�Zs�	}				�d��d~�d�Zt�	��	x		�dd��d��Zu�d��d��d��Zv�	�							�dÐd��d��Zw�d��d��d��Zx�d��d��Zy�dĐd��d��Zz�d��d��d��Z{�dŐd��d��Z|�d��d��d��Z}�d��d��d��Z~�	��dƐd��d��Z�d��d��d��Z��d��d��Z��d��d��Z��d��d��Z��d��d��Z��d��d��d��Z��d��d��Z��d��d��Z�	�dǐd��d��Z��d��d��Z�	�dȐd��d��Z��dɐd��d��Z��dʐd��d��Z��d��d��Z��d��d��Z��d��d��Z�dS(�zF
All salt configuration loading and defaults should be in this module
�N)�deepcopy)�DFLT_LOG_DATEFMT�DFLT_LOG_DATEFMT_LOGFILE�DFLT_LOG_FMT_CONSOLE�DFLT_LOG_FMT_JID�DFLT_LOG_FMT_LOGFILETFz#+refs/heads/*:refs/remotes/origin/*z+refs/tags/*:refs/tags/*�<�sha256Ztcp���ZSYSTEMZipc�cCsRtrt��j}nddl}ddl}d|��i}|jj�	|�}|d}t
|ddg�S)z_
    Gather some system data and then calculate
    buffer space.

    Result is in bytes.
    rNZkernelZ	mem_totalg�������?i�)�
HAS_PSUTIL�psutilZvirtual_memory�total�platformZsalt.grains.core�system�grains�coreZ_memdata�max)Z	total_memr�saltZos_datar�r�H/opt/saltstack/salt/lib/python3.10/site-packages/salt/config/__init__.py�_gather_buffer_spaceTsrg�?�master�master_portZmaster_typeZmaster_uri_formatZsource_interface_name�source_addressZsource_ret_portZsource_publish_portZ
master_fingerZmaster_shuffleZmaster_alive_intervalZmaster_failbackZmaster_failback_intervalZmaster_sign_key_nameZmaster_sign_pubkeyZverify_master_pubkey_signZalways_verify_signatureZmaster_pubkey_signatureZmaster_use_pubkey_signatureZmaster_statsZmaster_stats_event_iterZ
syndic_fingerZ	key_cache�user�root_dir�pki_dir�id�id_function�cachedir�append_minionid_config_dirsZ
cache_jobs�	conf_file�sock_dir�sock_pool_sizeZbackup_modeZrendererZrenderer_whitelistZrenderer_blacklistZfailhardZautoload_dynamic_modules�saltenvZlock_saltenvZ	pillarenvZpillarenv_from_saltenvZ	state_topZstate_top_saltenvZstartup_statesZsls_listZsnapper_statesZsnapper_states_configZtop_fileZfile_client�localZuse_master_when_local�
file_roots�pillar_rootsZon_demand_ext_pillarZdecrypt_pillarZdecrypt_pillar_delimiterZdecrypt_pillar_defaultZdecrypt_pillar_renderersZgpg_decrypt_must_succeed�	hash_typeZoptimization_orderZdisable_modulesZdisable_returnersZwhitelist_modulesZmodule_dirsZ
returner_dirsZstates_dirsZgrains_dirsZrender_dirsZoutputter_dirs�
utils_dirs�	providersZclean_dynamic_modules�	open_mode�multiprocessingZprocess_count_maxZmine_enabledZmine_return_jobZ
mine_intervalZipc_modeZipv6Zfile_buffer_sizeZtcp_pub_portZ
tcp_pull_portZtcp_master_pub_portZtcp_master_pull_portZtcp_master_publish_pullZtcp_master_workers�log_file�	log_levelZlog_level_logfileZlog_datefmtZlog_datefmt_logfileZlog_fmt_console�log_fmt_logfile�log_granular_levels�log_rotate_max_bytes�log_rotate_backup_countZmax_event_sizeZenable_legacy_startup_events�testZ
cython_enableZenable_fqdns_grainsZenable_gpu_grainsZenable_zip_modulesZshow_timeoutZshow_jidZ
unique_jidZstate_queueZ
state_verboseZstate_outputZstate_output_diffZstate_output_profileZstate_output_pctZstate_compress_idsZstate_auto_orderZstate_eventsZacceptance_wait_timeZacceptance_wait_time_maxZrejected_retryZ
loop_intervalZ
verify_envrZpermissive_pki_accessZkey_passZsigning_key_pass�default_includeZ
update_urlZupdate_restart_servicesZ	retry_dnsZretry_dns_countZresolve_dns_fallbackZ	recon_maxZ
recon_defaultZrecon_randomizeZreturn_retry_timerZreturn_retry_timer_maxZreturn_retry_triesZevent_returnZevent_return_queueZevent_return_queue_max_secondsZevent_return_whitelistZevent_return_blacklistZevent_match_type�pidfileZrange_serverZ
tcp_keepaliveZtcp_keepalive_idleZtcp_keepalive_cntZtcp_keepalive_intvl�	interfaceZpublish_portZ	auth_modeZzmq_backlogZpub_hwm�ipc_write_bufferZreq_server_nicenessZpub_server_nicenessZfileserver_update_nicenessZmaintenance_nicenessZmworker_nicenessZmworker_queue_nicenessZevent_return_nicenessZevent_publisher_niceness�reactor_niceness�worker_threads�ret_portZ	keep_jobsZkeep_jobs_secondsZarchive_jobsZmaster_rootsZadd_proxymodule_to_optsZproxy_merge_pillar_in_optsZproxy_deep_merge_pillar_in_optsZ#proxy_merge_pillar_in_opts_strategyZproxy_mines_pillarZproxy_always_aliveZproxy_keep_aliveZproxy_keep_alive_intervalZroots_update_intervalZazurefs_update_intervalZgitfs_update_intervalZgit_pillar_update_intervalZhgfs_update_intervalZminionfs_update_intervalZs3fs_update_intervalZsvnfs_update_intervalZgit_pillar_ssl_verifyZgit_pillar_global_lockZgit_pillar_userZgit_pillar_passwordZgit_pillar_insecure_authZgit_pillar_privkeyZgit_pillar_pubkeyZgit_pillar_passphraseZgit_pillar_refspecsZgit_pillar_includesZgit_pillar_verify_configZ
gitfs_remotesZgitfs_insecure_authZ
gitfs_privkeyZgitfs_pubkeyZgitfs_passphraseZgitfs_saltenv_whitelistZgitfs_saltenv_blacklistZgitfs_ssl_verifyZgitfs_global_lockZ
gitfs_saltenvZgitfs_ref_typesZgitfs_refspecsZgitfs_disable_saltenv_mappingZhgfs_remotesZhgfs_mountpointZ	hgfs_rootZ	hgfs_baseZhgfs_branch_methodZhgfs_saltenv_whitelistZhgfs_saltenv_blacklistZ
svnfs_remotesZsvnfs_mountpointZ
svnfs_rootZsvnfs_trunkZsvnfs_branchesZ
svnfs_tagsZsvnfs_saltenv_whitelistZsvnfs_saltenv_blacklistZminionfs_envZminionfs_mountpointZminionfs_whitelistZminionfs_blacklistZ
ext_pillarZpillar_versionZpillar_optsZpillar_cacheZpillar_cache_ttlZpillar_cache_backendZ	gpg_cacheZ
gpg_cache_ttlZgpg_cache_backendZpillar_safe_render_error�pillar_source_merging_strategyZpillar_merge_listsZpillar_includes_override_slsZtop_file_merging_strategyZ	env_orderZdefault_topZping_on_rotate�peerZpreserve_minion_cache�
syndic_masterZsyndic_failoverZsyndic_forward_all_eventsZrunner_dirsZclient_acl_verifyZ
publisher_aclZpublisher_acl_blacklistZsudo_acl�
external_auth�token_expireZtoken_expire_user_overrideZ	file_recvZfile_recv_max_size�file_ignore_regex�file_ignore_glob�fileserver_backendZfileserver_followsymlinksZfileserver_ignoresymlinksZfileserver_verify_configZpermissive_acl�keep_acl_in_tokenZeauth_acl_moduleZeauth_tokensZmax_open_files�auto_acceptZautosign_timeoutZmaster_topsZmaster_tops_firstZ
order_mastersZ	job_cacheZ
ext_job_cacheZmaster_job_cacheZjob_cache_store_endtimeZminion_data_cacheZpublish_sessionZreactorZreactor_refresh_intervalZreactor_worker_threadsZreactor_worker_hwmZenginesZrunner_returns�serial�search�
nodegroupsZssh_list_nodegroupsZssh_use_home_key�key_logfileZrandom_startup_delayZwinrepo_source_dirZwinrepo_dirZwinrepo_dir_ngZwinrepo_cachefileZwinrepo_cache_expire_maxZwinrepo_cache_expire_minZwinrepo_remotesZwinrepo_remotes_ngZwinrepo_ssl_verifyZwinrepo_userZwinrepo_passwordZwinrepo_insecure_authZwinrepo_privkeyZwinrepo_pubkeyZwinrepo_passphraseZwinrepo_refspecsZmodules_max_memoryZgrains_blacklistZgrains_refresh_everyZgrains_refresh_pre_execZenable_lspciZsyndic_waitZ	jinja_envZ
jinja_sls_envZjinja_lstrip_blocksZjinja_trim_blocks�minion_id_caching�minion_id_lowercase�minion_id_remove_domainZsign_pub_messagesZkeysizeZ	transportZgather_job_timeoutZauth_timeoutZ
auth_triesZmaster_triesZ
auth_safemodeZ
random_masterZrandom_reauth_delayZsyndic_event_forward_timeoutZsyndic_jid_forward_cache_hwmZ
ssh_passwdZssh_portZssh_sudoZ
ssh_sudo_userZssh_timeoutZssh_userZssh_scan_portsZssh_scan_timeoutZssh_identities_only�ssh_log_fileZssh_config_file�ssh_merge_pillarZssh_run_pre_flightZcluster_mode�sqlite_queue_dirZ
queue_dirsZ
ping_intervalZcli_summaryZmax_minions�username�passwordZ
zmq_filteringZ	con_cacheZrotate_aes_keyZcache_sreqsZcmd_safe�rest_timeoutZ	sudo_userZhttp_connect_timeoutZhttp_request_timeoutZ
http_max_body�bootstrap_delayZproxy_merge_grains_in_moduleZminion_restart_commandZpub_retZ
proxy_hostZproxy_usernameZproxy_passwordZ
proxy_portZno_proxyZminion_jid_queue_hwm�cacheZmemcache_expire_secondsZmemcache_max_itemsZmemcache_full_cleanupZmemcache_debugZthin_extra_modsZmin_extra_mods�return�sslZmultifunc_orderedZbeacons_before_connectZscheduler_before_connectZextmod_whitelistZextmod_blacklistZdjango_auth_pathZdjango_auth_settingsZtcp_authentication_retriesZtcp_reconnect_backoffZallow_minion_key_revokeZsalt_cp_chunk_sizeZminion_sign_messagesZdrop_messages_signature_failZrequire_minion_sign_messagesZpass_to_ext_pillars�	discovery�scheduleZauth_eventsZminion_data_cache_eventsZenable_ssh_minionsZ
thoriumenvZthorium_topZnetapi_allow_raw_shell�netapi_enable_clientsZdisabled_requisitesZglobal_state_conditions�features�	fips_modeZdetect_remote_minions�remote_minions_port�pass_variable_prefix�pass_strict_fetch�pass_gnupghome�pass_dir)�maintenance_interval�fileserver_interval�request_channel_timeout�request_channel_tries�encryption_algorithm�signing_algorithm�publish_signing_algorithm�0.0.0.0r�str�default�i�Zmaster_signZpki�minionZgrains_cacheZgrains_cache_expirationi,Zgrains_deep_mergez
jinja|yaml�smartiZdiskrcrd�i�Q�extension_modules�extmodsztop.slsZstart_event_grainsZthorium_intervalZ
thorium_roots�baseZremote�merge�d�roots�libvirtZvirtkey�:ZgpgZgit_pillar_baseZgit_pillar_branchZgit_pillar_envZgit_pillar_fallbackZgit_pillar_rootZgitfs_mountpointZ
gitfs_rootZ
gitfs_baseZgitfs_fallbackZ
gitfs_userZgitfs_password)�branch�tagZsha)rr��xii�i���warning�log_fmt_jidi�fullZstate_aggregate�root�
zminion.d/*.conf�i'i�zsalt://win/repo-ng/�winZrepozrepo-ngz	winrepo.pi�:	iz-https://github.com/saltstack/salt-winrepo.gitz0https://github.com/saltstack/salt-winrepo-ng.gitZwinrepo_branchZwinrepo_fallbackzsalt-minion.pidzrange:80iZzeromq�Zrestart_on_errorZzmq_monitorg4@g �@ld�
startswithZlocalfsiz	OAEP-SHA1z
PKCS1v15-SHA1)r9r[rZrerfi��timeout�ZbranchesZtrunk�tagsryZmasterofmasters�random�syndic_log_file�syndic�syndic_pidfile�salt-syndic.pid�i��Zlocal_cacheZenforce_mine_cachei�i�i�i�zsalt-master.pidZmsgpack�keyzmaster.d/*.confZ
regen_thinZssh_priv_passwdZ22g{�G�z�?Zsshz.ssh�configZqueuesZ	dummy_pubii��)
r\r]r^r_r`rYrarbrZrg�proxy)r r6r5rozproxy.d/*.confzcloud.conf.d/*.confZssh_auth�cloudi�osZscriptzbootstrap-saltZstart_actionZenable_hard_mapsZdelete_sshkeys�deploy_scripts_search_path�cloud.deploy.d)r0r}r1r2r3rSrTrZzsalt-api.pidZapi)�api_pidfile�api_logfilerRZspmzspm.d/*.confz/etc/salt/spm.reposZ	spm_build)�CVSz.hgz.gitz.svnzpackages.db�ignore)�
spm_conf_file�formula_path�pillar_path�reactor_path�spm_logfile�spm_default_includeZspm_repos_config�
spm_cache_dir�
spm_build_dirZspm_build_excludeZspm_dbrTZ
spm_repo_dupsZ
spm_node_typeZ
spm_share_dirzcloud.profiles.d/*.confzcloud.providers.d/*.confcCsZ|��D]&\}}t|�}||kr|�|�||<t|ttf�s"g||<t||�||<q|S)z)
    Normalize file or pillar roots.
    )�itemsri�pop�
isinstance�list�tuple�_expand_glob_path)r'r%�dirsZnormalized_saltenvrrr�_normalize_roots�s
�r�cC�.t|t�st�d�dttjjg�iSt|�S)zz
    If the pillar_roots option has a key that is None then we will error out,
    just replace it with an empty list
    zDThe pillar_roots parameter is not properly formatted, using defaultsrq)	r��dict�logr|r�r�syspaths�BASE_PILLAR_ROOTS_DIRr�)r(rrr�_validate_pillar_roots�
�r�cCr�)zx
    If the file_roots option has a key that is None then we will error out,
    just replace it with an empty list
    zBThe file_roots parameter is not properly formatted, using defaultsrq)	r�r�r�r|r�rr��BASE_FILE_ROOTS_DIRr�)r'rrr�_validate_file_rootsr�r�c	CsXg}|D]%}zt�|�r|�t�|��n|�|�Wqty)|�|�Yqw|S)z[
    Applies shell globbing to a set of directories and returns
    the expanded paths
    )�globZ	has_magic�extend�append�	Exception)r'Zunglobbed_path�pathrrrr�s

��r�cCs�dd�}g}d}|��D�])\}}|tv�r6|dur5t|dur!qz
dt|vr*WqWn	ty4Ynw|dus=|durEt|turDqnt|t|�rMqt|t�rX|�d�rXqtttt	gtt	tgtt	tgttttt
tt	td�gt
ttgttgi}t
t|d�r�z-t||�|D]"}t||ur�t|t||��r�|�|�||t|�jt|j��q�Wqttfy�|�|�||t|�jt|j��Yqwt|�t|vr�qg}|D]G}z4||�|t|v�r||}	t|D]}
|
|	vr�|	�|
�q�t|t|	���r|�d�n|�d�Wq�ttf�y|�d�Yq�wd|v�r6|�|�||t|�j|t|���qt|�d	�t��rId
�|d	�|d	<|D]}t�|��qK|�rYdSdS)za
    Check that all of the types of values passed into the config are
    of the right types
    csfzt|�}Wnty|jYSw�fdd��g}�||�d�|dd��}|d|d7}|S)Nc	sR|D]$}t|t�r�||�qz|�|j�Wqty&t�d|�YqwdS)Nz:Unable to interpret type %s while validating configuration)r�r�r��__name__�AttributeErrorr�r|)�typesZ
type_tuple�item��	get_typesrrr�=s
���z;_validate_opts.<locals>.format_multi_opt.<locals>.get_typesz, r
z or )�len�	TypeErrorr��join)Z
valid_typeZ	num_typesr��retrr�r�format_multi_opt4s
�
z(_validate_opts.<locals>.format_multi_optz\Config option '{}' with value {} has an invalid type of {}, a {} is required for this optionNTF�sdb://�__call__rU�,)r��
VALID_OPTSr��boolr�rir�r�r�r��int�float�type�hasattrr��formatr��
ValueError�remove�getr�r�r|)�optsr��errors�errr��valZnf_typesZnf_typeZvalidZnfr��errorrrr�_validate_opts.s��
���
�
����
���
�
��

���
r�cCs||�di�}t|t�st�d�|�d�t|�D]"}tjd|tj	d�s0d|vr,d|kr0|dvr;t�
d|�|�|�qd	S)
a
    Ensure we're not using any invalid ssh_minion_opts. We want to make sure
    that the ssh_minion_opts does not override any pillar or fileserver options
    inherited from the master config. To add other items, modify the if
    statement in the for loop below.
    �ssh_minion_optsz#Invalidly-formatted ssh_minion_optsz
^[a-z0-9]+fs_)�flags�pillarrN)rCz7'%s' is not a valid ssh_minion_opts parameter, ignoringN)r�r�r�r�r�r�r��re�match�
IGNORECASEr|)r�r�Zopt_namerrr�_validate_ssh_minion_opts�s


��
��r�cCs:|d�|d�r
|dS|d�d�r|dSd�|�S)zH
    Append a domain to the existing id if it doesn't already exist
    r�
append_domain�.z{0[id]}.{0[append_domain]})�endswithr�)r�rrr�_append_domain�s

r�cCs\t�d|�d}tjj�|d��F}ztjj�|�pi}Wn2tjjjyN}z#d|�d|��}t�	|�|�
d�r>i}d}ntj�|��WYd}~nd}~wwWd�n1sYwY|rtd	�
|d
�}t�	|�t�||d
�t|t�s�d�
|t|��}t�	|�tj�|��d|vr�t|dt�s�t|d�|d<|Stjj�|d�|d<|S)
zR
    Read in a config file from a given path and process it into a dictionary
    zReading configuration from %sF�rz"Error parsing configuration file: z - z_schedule.confTNzRenaming to {}�	YAMLErrorzIError parsing configuration file: {} - conf should be a document, not {}.r)r��debugr�utils�files�fopenZyamlZ	safe_loadr�r�r��
exceptions�SaltConfigurationErrorr�r��replacer�r�r�ri�data�decode)r�Zappend_file_suffix_YAMLErrorr"Z	conf_optsr��messagerrr�_read_conf_file�sB

�����

�
�r�cCsP|r
tj�|�r
|S|r&|dur&tj�||�}tj�|�r&t�d||�|S|S)z�
    Return an absolute path. In case ``relative_to`` is passed and ``path`` is
    not an absolute path, we try to prepend ``relative_to`` to ``path``and if
    that path exists, return that one
    Nz;Relative path '%s' converted to existing absolute path '%s')r�r��isabsr��isfiler�r�)r��relative_toZ_abspathrrr�_absolute_paths�r�c
Cs�|duriS|dur$ddl}|�|��j�}t�d|j|j|�td}t	j
�||�}|r3t	j�
|�s5|}||kr;|}|}t	j�
|�s�|�d�}t	j�
|�r�t�d||�tjj�|d��+}tjj�|d��}	|	��|�|	���Wd�n1s|wYWd�n1s�wYi}
tjjj�|�r�zt|�}
||
d<W|
Stjjy�}zt�|�|r�t�tjjj �WYd}~|
SWYd}~|
Sd}~wwt�d	|�|
S)
z�
    Returns configuration dict from parsing either the file described by
    ``path`` or the environment variable described by ``env_var`` as YAML.
    Nrz�The function '%s()' defined in '%s' is not yet using the new 'default_path' argument to `salt.config.load_config()`. As such, the '%s' environment variable will be ignoredr"z	.templatezWriting %s based on %s�wr�zMissing configuration file: %s)!�inspectZgetframeinfo�currentframe�f_backr�r|�function�filename�DEFAULT_MASTER_OPTSr��environr�r�r�r�rr�r�r��readline�write�read�validateZis_readabler�r�r�r��sys�exit�defaults�	exitcodes�
EX_GENERIC)r��env_varZdefault_path�exit_on_config_errorsr�Zprevious_frameZenv_path�template�outZifiler�r�rrr�load_config.s\�	
���
�

���rcCsR|siS|dur
iSt|t�r|g}i}|D]�}tj�|�}tj�|�s/tj�tj�|�|�}t�|�}|s>|r>t	�
d|�t|�D]c}t	�d|�zt
|�}Wn&tjjyv}	zt	�|	�|rjt�tjjj�ni}WYd}	~	nd}	~	ww|�di�}
|
r�d|vr�|d�|
�|�dg�}|r�|�t|||��tjj�||dd�qBq|S)zf
    Parses extra configuration file(s) specified in an include list in the
    main config file.
    NzMWarning parsing configuration file: "include" path/glob '%s' matches no filesz!Including configuration from '%s'rX�includeT)r�rir�r��
expanduserr�r��dirnamer�r�r|�sortedr�r�rr�r�r�r�r�rrrr��update�include_configr��
dictupdate)r�	orig_path�verboserZ
configurationr�Zglob_matchesZfn_r�r�rXrrrr
psL

�
���r
cCs6||vo||duotj�tj�||�d�jdkS)zb
    Prepend root dir only when the key exists, has a value, and that value is
    not a URI.
    Nrrk)�urllib�parse�urlparser�r��
splitdrive�scheme)r�r�rrr�should_prepend_root_dir�s

� �rcCstj�|d�}tjj�tj�}|D]t}||vr�||}d}d}||ks,|�|tj�r4|t	|�d�}|rJ||ksB|�|tj�rJ|t	|�d�}|rQ|sQ|}n+|rX|sX|}n$|rf|rf||vrc|}n|}ntj
j��rutj�
|�dsuntj�|�r|qtj
j�||�||<qdS)zg
    Prepends the options that represent filesystem paths with value of the
    'root_dir' option.
    rNr)r�r��abspathrr��ROOT_DIR�rstrip�sepr�r�r�r�
is_windowsrr�r�)r��path_optionsrZdef_root_dirZpath_optionr�Ztmp_path_def_root_dirZtmp_path_root_dirrrr�prepend_root_dir�s4��rcCsft|t�r|g}|D]&}||dd�}t||�tj�|d�r0|dtjvr0tj�d|d�q
dS)zT
    Inserts path into python path taking into consideration 'root_dir' option.
    r)r�rr�rN)r�rirr�r��isdirr��insert)r��pathsr�rrrr�insert_system_path�s

��r!�SALT_MINION_CONFIGc
Cs|durt��}|dkrtd|d<tj�|d�s6tj�dd�}|r6tj�|d�}|r6tj�|�r6|tj|<t	||td�}	|	�d|d�}
|	�dg�}|	�
t|
|d|d	��|	�
t||d
|d	��t|	|||d�}||d<|dkr|t
|�t|�tj�|�|S)
a^
    Reads in the minion configuration file and sets up special options

    This is useful for Minion-side operations, such as the
    :py:class:`~salt.client.Caller` class, and manually running the loader
    interface.

    .. code-block:: python

        import salt.config
        minion_opts = salt.config.minion_config('/etc/salt/minion')
    Nrr5�SALT_CONFIG_DIRrlr"rF�rrT��cache_minion_id�	minion_id�__role)�DEFAULT_MINION_OPTS�copyr�r�r�r�r�r�r�rrr
�apply_minion_config�	apply_sdbr�rrZ�setup_features)
r�rrr&�ignore_config_errorsr'�role�salt_config_dir�env_config_file_path�	overridesr5rr�rrr�
minion_config�sF
��
���r3cCsPt||dd�}|�|�t|�t|�tj�|�|d<i|d<tj�|�|S)Nr)r.r/rr�)	r3rr,r�r�loaderrrZr-)r�r2r.r�rrr�mminion_config5	s
r5�SALT_PROXY_CONFIGcCsJ|durt��}|�t�tj�|d�s1tj�dd�}|r1tj�|d�}|r1tj�	|�r1|tj|<t
||td�}|�d|d�}	|�dg�}
|�t|	|d|d��|�t|
|d	|d��t||||d
�}|�d|d�}	|�dg�}
|�t|	|d|d��|�t|
|d	|d��t||||d
�}t
|�t|�tj�|�|S)aa
    Reads in the proxy minion configuration file and sets up special options

    This is useful for Minion-side operations, such as the
    :py:class:`~salt.client.Caller` class, and manually running the loader
    interface.

    .. code-block:: python

        import salt.config
        proxy_opts = salt.config.proxy_config('/etc/salt/proxy')
    Nr#r�r"r5rFr$Tr%)r)r*r�DEFAULT_PROXY_MINION_OPTSr�r�r�r�r�r�rr
r+r,r�rrZr-)r�rrr&r.r'r0r1r2r5rr�rrr�proxy_configA	sd

��
�����
���r8�SALT_MASTER_CONFIGcCsR|durt��}|durt��}i}t|||�}t|||�}|d|d<|d|d<|�|�|�|�d|�dtjj	�|�dd�|�dd	�|d
|d|d|d
|dt
|�d|�d|�dtd����|�d|d�tj�
|d|�d|d��|d|dd�}	|�|	�gd�}
dD]}t||�r�|
�|�q�t||
�tj�|�|S)Nr"Z_minion_conf_fileZ_master_conf_filer�rr�r�r�zsalt-syndic.logr/rrr>r7Zsyndic_master_portrZsyndic_userrr Zsyndic_sock_dirr#r$)r(rr6r.r/rrrr7rrr#r$r )	rr r6r#ro�
autosign_file�autoreject_file�	token_dir�autosign_grains_dir)r.rIr�)r)r*r��
master_configr3rr�rr�rr�r�r�r�rr�rrZr-)�master_config_pathZminion_config_pathZmaster_env_varZminion_env_varZminion_defaultsZmaster_defaultsr�Zmaster_optsZminion_optsZsyndic_opts�prepend_root_dirs�
config_keyrrr�
syndic_config�	s`	



������
"

�
rBcCs�ddl}|dur
|}t|t�r|�d�r|jj�||�St|t�r8|��D]\}}|dur.q%t	||�||<q%|St|t
�rRt|�D]\}}|durJqAt	||�||<qA|S)z+
    Recurse for sdb:// links for opts
    rNr�)Zsalt.utils.sdbr�rir�r�ZsdbZsdb_getr�r�r,r��	enumerate)r�Zsdb_optsrr��valuerrrr,�	s"

�r,�SALT_CLOUD_CONFIGc	
Cs8|r	tj�|�}	ntjj}	t||tj�|	d��}
|dur t�	�}|�
|
�|}
|
�
tjj|
d|dd��|
�
dg�}|
�
tjj||dd��d|
vrT|durT|
d}nd|
vrc|sc|sctj�|	d	�}t||	�}d
|
vru|duru|
d
}nd
|
vr�|s�|s�tj�|	d�}t||	�}d|
vr�|dur�|
d}nd|
vr�|s�|s�tj�|	d
�}t||	�}|
�
d|�
dd��}t|t�r�|g}t|dd��D]%\}
}tj�|�s�tj�tj�|�|�}tj�|�r�|||
<q�|�|
�q�|�tj�tj�tj�t�ddd���|
j
t|�d�|du�r|du�rtj�d��|du�r2|du�r2tj�|
�
dtj�tjjd	���}n|du�rB|du�rBtj�|�}|d=|�
|
�|}
|du�r\|du�r\tj�d��|du�rs|du�rs|
�
d
tj�tjjd��}|du�r�|du�r�tj�d��|du�r�|du�r�|
�
dtj�tjjd
��}t|
|�}d|v�r�|du�r�tj�d��|du�r�tj�tj�|�dd�}tj�|��s�t�|��r�tj�d�tj�tjjd����|d}n	|du�r�t |�}||d<|du�r�t!||�}||d<t"|�dg}t#d|��r|�d�t$||�tj%�&|�|S)z;
    Read in the Salt Cloud config and return the dict
    r�Nr5F�rrTr>r�providers_config�cloud.providers�profiles_config�cloud.profilesr�r�z..Zdeploy)r�z<Only pass `master_config` or `master_config_path`, not both.r zBOnly pass `providers_config` or `providers_config_path`, not both.z@Only pass `profiles_config` or `profiles_config_path`, not both.r+zvDo not mix the old cloud providers configuration with the passing a pre-configured providers configuration dictionary.zcloud.providers.d�*z�Do not mix the old cloud providers configuration with the new one. The providers configuration should now go in the file `{0}` or a separate `*.conf` file within `cloud.providers.d/` which is relative to `{0}`.�profilesr.)'r�r�r
rr��
CONFIG_DIRrr��DEFAULT_CLOUD_OPTSr*rr�r
r�r�r�rirCr�rr�r�r�__file__r�r��SaltCloudConfigErrorr>�apply_cloud_configr�r�r��cloud_providers_config�vm_profiles_configr,rrrZr-)r�rrr?r>Zproviders_config_pathrGZprofiles_config_pathrI�
config_dirr2rr��idx�entryr�Zproviders_confdr@rrr�cloud_config
s�
�
��

��

��

�
�����
����


�
���
	




rWcCsd|durt��}|��}|r|�|�d|vr�|d��}i|d<|��D]�\}}t|t�rm|D];}d|vr?tj�d�	|���|d}d|vrN|�
d�\}}||dvrZi|d|<|�d|��|d<||d||<q0q%t|t�r�d|vrtj�d�	|���|d}d|vr�|�
d�\}}||dvr�i|d|<|�d|��|d<||d||<q%t|�}|S)z
    Return a cloud config
    Nr+�driverzTThe cloud provider alias '{}' has an entry missing the required setting of 'driver'.rv�providerzSThe cloud provider alias '{}' has an entry missing the required setting of 'driver')
rNr*rr�r�r�rr�rPr��splitr��
old_to_new)r2rr�r+�alias�detailsZdetailrXrrrrQ�
sP

��
��rQc	Cs�d}|D]=}i}|��D]\}}||vr"|}|�dd�d}|||<q|��}|rA||d<|�di�i|d|<||d||<q|S)N)ZAWSZ
CLOUDSTACKZDIGITALOCEANZEC2ZGOGRIDZIBMSCEZJOYENTZLINODEZ	OPENSTACKZ	PARALLELSZ	RACKSPACEZSALTIFYr�rrYr+)r�rZ�lower�
setdefault)	r�r+rYZprovider_config�optr�rD�nameZ	lproviderrrrr[#s"��r[�SALT_CLOUDVM_CONFIGcCs�|durt}tj�||tj�tjjd��}|�	d|d�}|�	dg�}|�
tjj||dd��|�
tjj||dd��t|||�S)z/
    Read in the salt cloud VM config file
    NrJr5rFrFT)
�VM_CONFIG_DEFAULTSrr�rr�r�r�r�rMr�rr
�apply_vm_profiles_config)r�r+rrr2r5rrrrrSGs�rSc
Cs�|durt}|��}|r|�|�i}|��D]\}}|dvr qt|t�s.tj�d�	|���||d<|||<q|����D�]2\}}d|vr�d|dvr�|d�
d�\}	}
|	|vs_|
||	vrnt�d||d�|�
|�q=d||	|
vr~i||	|
d<|||	|
d|<|d|vr�t�d||d�|�
|�q=ttt||d�����}
||d|
�di��||i�d	�	||
�|d<|||<q=|�
d�}||vr�t�d
|||�|�
|�q=t|�|��}|�
d�tjj�||�}d|dv�r9|d|v�rt�d||d�|�
|�q=ttt||d�����}
||d|
�di��||i�d	�	||
�|d<n3|d�
d�\}	}
|	|v�sN|
||	v�r]t�d||d�|�
|�q=||	|
�di��||i�|||<q=|S)N�r"rr5rzSThe VM profiles configuration found in '{0[conf_file]}' is not in the proper format�profile�extendsrvrYz�The profile '%s' is defining '%s' as the provider. Since there is no valid configuration for that provider, the profile will be removed from the available listingrLz{0[provider]}:{1}z�The '%s' profile is trying to extend data from '%s' though '%s' is not defined in the salt profiles loaded data. Not extending and removing from listing!)rcr*rr�r�r�rr�rPr�rZr�Ztracer��next�iterr��keysr_r�rr�r�r)
r+r2rr�Zvmsr�r�rfr]r\rXrg�extendedrrrrdZs�

�
�
�
�
�

�
��
�
rd�SALT_CLOUD_PROVIDERS_CONFIGcCs�|durt}tj�||tj�tjjd��}|�	d|d�}|�	dg�}|�
tjj||dd��|�
tjj||dd��t||�S)z=
    Read in the salt cloud providers configuration file
    NrHr5rFrFT)
�PROVIDER_CONFIG_DEFAULTSrr�rr�r�r�r�rMr�rr
�apply_cloud_providers_config)r�rrr2r5rrrrrR�s�
rRc
Cs:|durt}|��}|r|�|�|����D]#\}}d|vr:t�d�t|�}|�d���D]\}}|||<q/nqi}d}|��D]r\}	}
|	dvrLqCt|
t	t
f�sW|
g}
n2t�}|
D],}d|vrld|vrkt�d	�q\|d|vr�t�d
�t
j�d�|	|���|�|d�q\|
D])}
d|
vr�d|��|
d<|d
7}|	|vr�i||	<|
d}|||	vr�|
||	|<q�qC	d}|����D]�\}}|��D]�\}}i|||d<d|vr�q�|�d�}d|v�r|�d�\}}||vr�t
j�d�|d||���||�|�v�rt
j�d�|d|||���|�d|��|d<||d<q�|�|��r1t
j�d�|d||���||v�rCt
j�d�|d||���||�|�v�rU|�d|��|d<q�d|�|�v�rid�|d|���|d<q�||d<d}q�q�|�sunq�	d}|����D]^\}}t	|���D]R}||}d|v�r��q�d|dv�r�d}�q�|�d�}|�d�\}}|�|��|���}t
jj�||�}||||<|�d��r�||||||<|||=�q��q|�s�n�qw|����D]0\}}|����D]\}}|�d��s�q�t�d|�||�|��q�||�s|�|��q�|S)z9
    Apply the loaded cloud providers configuration.
    Nr�z7Please switch to the new providers configuration syntaxr+rrerXrgziPlease check your cloud providers configuration. There's no 'driver' nor 'extends' definition referenced.z�You can only have one entry per cloud provider. For example, if you have a cloud provider configuration section named, 'production', you can only have a single entry for EC2, Joyent, Openstack, and so forth.zQThe cloud provider alias '{0}' has multiple entries for the '{1[driver]}' driver.z-only-extendable-rTFrLrvz�The '{0}' cloud provider entry in '{1}' is trying to extend data from '{2}' though '{2}' is not defined in the salt cloud providers loaded data.ztThe '{0}' cloud provider entry in '{1}' is trying to extend data from '{2}:{3}' though '{3}' is not defined in '{1}'zqThe '{}' cloud provider entry in '{}' is trying to extend from '{}' and no provider was specified. Not extending!z{}:{}z�There's at least one cloud driver under the '%s' cloud provider alias which does not have the required 'driver' setting. Removing it from the available providers listing.)rmr*rr�r�r|r[r�r�r�r��setr�rr�rPr��addrZr�rjr�rr��info)r2rr�raZsettingsZ	prov_nameZ
prov_settingsr+Z	ext_countr�r�Zhandled_providersr]rVrYZkeep_loopingZprovider_alias�entriesrXrgr\Z	ext_aliasZ
ext_driverrkrrrrn�s


������


��	��

��
�

��<�B


���'�

�rncCs0|}|dur|�|d�durt||�}|r�|r�d|vrM|ddurM||d|dvrMt|t�rA|�|d|d|���nt|d|d|�}d|dvr�|d�d�\}}||dvr�||d|vr�|d||}||vr�t|t�r�|�||���n t||�}nt|d�|dd��d	kr�t�	d
|d|d�|d|dvr�|d�|d�}	|	t
tt|	�
����}
||
vr�t|t�r�|�|
|���nt|
|�}|�r|�r||v�rt||tj�r�t
||d�}|St|t��rt||t��r|�||���|St||�}|S)aP
    Search and return a setting in a known order:

        1. In the virtual machine's configuration
        2. In the virtual machine's profile configuration
        3. In the virtual machine's provider configuration
        4. In the salt cloud configuration if global searching is enabled
        5. Return the provided default
    TNrfrLrvrXr+rrz�The '%s' cloud provider definition has more than one entry. Your VM configuration should be specifying the provider as 'driver: %s:<driver-engine>'. Since it's not, we're returning the first definition which might not be what you intended.rk)r�rr�r�rr*rZr�r�r�rhrir�rjr��
GeneratorType)ra�vm_r�rjZ
search_globalrDr\rXr]Z
alias_defsZprovider_driver_defsrrr�get_cloud_config_value�sP
 
��

��rurc	Csd|vrG|�d�\}}||dvrdS||d|vrdS|D]}|d||�|d�dur>|dur;t�d|||�dSq|d||S|d��D]=\}}|��D]4\}}	||krb||vrbqUd}
|D]}|	�|d�dur�|dur|t�d|||�d}
nqf|
r�qU|	SqMdS)zd
    Check and return the first matching and fully configured cloud provider
    configuration.
    rvr+FNTzrThe required '%s' configuration setting is missing from the '%s' driver, which is configured under the '%s' alias.)rZr�r�r|r�)r�rY�
required_keysZlog_message�aliasesr\rXr�ZdriversZprovider_detailsZ
skip_providerrrr�is_provider_configured�sP�����rxcs�dg}|�d�\}}gd�}gd�}|d||�|d||d|�|dkr;��dd	�r;|�d�|�d�n|d
krMdt|�d��vrM|�d
�|d
kr^dt����vr^|�d
�||vrq|�d�|d
krp|�d�n-|dvr{|�d�n#|dkr�gd�}	t�fdd�|	D��s�t�fdd�|	D��s�|�|	�||vr�|�d�t|�D]}
|
�vr�|�|
�q�|r�t|�D]}
|
|vr�|�|
�q�|D]}
��|
d�dur�t	�
d|
||�d	Sq�dS)z�
    Check if the requested profile contains the minimum required parameters for
    a profile.

    Required parameters include image and provider for all drivers, while some
    drivers also require size keys.

    .. versionadded:: 2015.8.0
    rYrv)�nova�
virtualboxru�	softlayer�	oneandone�profitbricks)Z
opennebulaZ	parallelsZproxmoxZscalewayr{Zsoftlayer_hw�vmwareZvsphererzrur|r}r+rL�linodeZ	clonefromFZgceZsourceImageZex_disks_gce_structr~�imageZ	datastore)rrzry)r�Zblock_device_mappingZblock_deviceZboot_volumec�g|]}|�v�qSrr��.0r�)�provider_keyrr�
<listcomp>�
�z)is_profile_configured.<locals>.<listcomp>cr�rrr�)�profile_keyrrr��
r��sizeNzsThe required '%s' configuration setting is missing from the '%s' profile, which is configured under the '%s' alias.T)rZr�r�rir�rj�anyr�r�r�r�)r�rYZprofile_namertrvr\rXZnon_image_driversZnon_size_driversZnova_image_keysr�r)r�r�r�is_profile_configured?
s`





��


�
���r�cCs6d}|��D]\}}|durt�d|||�d}q|S)z�
    Check if the driver's dependencies are available.

    .. versionadded:: 2015.8.0

    driver
        The name of the driver.

    dependencies
        The dictionary of dependencies to check.
    TFzFMissing dependency: '%s'. The %s driver requires '%s' to be installed.)r�r�r|)rXZdependenciesr�r�rDrrr�check_driver_dependencies�
s��r�c
Cs�tj�|�}z
tj�|�st�|�Wnty2}ztj�|�r"nt�d|�WYd}~nd}~wwz"tj	j
�|d��}|�|�Wd�WdS1sNwYWdStyn}z
t�d|�WYd}~dSd}~ww)z<
    Helper function, writes minion id to a cache file.
    z+Failed to create dirs to minion_id file: %sNr�zCould not cache minion ID: %s)
r�r�r
r�makedirs�OSErrorr�r�rr�r�r�r�)r'Z
cache_filer��exc�idfrrr�	_cache_id�
s&
���&���r�cCs~|�d�r	|dSddlm}t|dt�r|d}i}n't|dt�r7tt|d����\}}|dur6i}n
t	�
d�t�t
jjj�|�d�\}}|�d�sW|�|�|d<z7|�|||�}|sct�||di|��}t|t�rs|s�t	�
d||t|��t�t
jjj�t	�d	||�|WSty�t	�
d
||�t�t
jjj�YdSty�t	�
d|�t�t
jjj�YdSw)
zs
    Evaluate the function that determines the ID if the 'id_function'
    option is set and return the result
    rrNrz9'id_function' option is neither a string nor a dictionaryr�rz<Function %s returned value "%s" of type %s instead of stringz&Evaluated minion ID from module: %s %sz3Function arguments %s are incorrect for function %szFailed to load module %sr)r�Zsalt.loaderr4r�rir�rhrir�r�r�r�r�rrrrrZrZraw_mod�KeyErrorr�rqr�)r�r4Zmod_funZ
fun_kwargs�modZfunZid_mod�newidrrr�call_id_function�
sP
�

���r�cCsv|�d�}|durd|vr|�dd�\}}t�d|�|S|���d|���r9|dtd|��}t�d|�|S)z�
    Depending on the values of `minion_id_remove_domain`,
    remove all domains or a single domain from a FQDN, effectivly generating a hostname.
    rLTr�rz'Removed any domain (%s) from minion id.Nz(Removed single domain %s from minion id.)r�rZr�r��upperr�r�)r�r�Z
opt_domainZxdomainrrr�remove_domain_from_fqdns
�r�c
Cs|ddurtjj}n|d}tjj}|�tjj�r$|�tjjd�d}tj�||�	tjj
�d�}|�dd�r�zPtjj
�|��-}tjj�|�����}tjj�|�}|�tj�retjj�|�tjdd��}Wd�n1sowY|r�|d	kr�t�d
||�|dfWSWn	ty�Ynwd|vr�|�d�d
kr�t�dtj�tjjd
��|�d�r�t|�}ntjj��}|�d�r�|��}t�d|�|�d�r�t||�}d|vr�|�d�d
kr�|�d�r�t�d|d|�nt�d|�|r�|�dd�r�t ||�tjj�!|�}	||	fS)an
    Guess the id of the minion.

    If CONFIG_DIR/minion_id exists, use the cached minion ID from that file.
    If no minion id is configured, use multiple sources to find a FQDN.
    If no FQDN is found you may get an ip address.

    Returns two values: the detected ID, and a boolean value noting whether or
    not an IP address is being used for the ID.
    rNrr
r'rJTrkZ	localhostz"Using cached minion ID from %s: %sFr(rlz/Guessing ID. The id can be explicitly set in %srrKz"Changed minion id %s to lowercase.rLz-Found minion id from external function %s: %sz-Found minion id from generate_minion_id(): %s)"rr�rrMr�rZr�r�r��lstriprr�r�r�r��stringutils�
to_unicoder��strip�to_bytes�codecs�BOMZto_strr�r�r�r�r��networkZgenerate_minion_idr^r�r��is_ipv4)
r�r&rrTZid_cacher�raZbnamer�r�rrr�get_id&sd
���
���





�
r�c	s�|ddvrd|d<dS|dduri|d<dSddl}dD]E\}�|d�|�}|dur.qt|t�r=|���r=t||�sZd�|d��fd	d
�t|�D���}t	�
|�tj�
|��t||�|d|<qdS)zI
    Resolves string names to integer constant in ssl configuration.
    rV�NFNTr))�	cert_reqsZCERT_)�ssl_versionZ	PROTOCOL_zASSL option '{}' must be set to one of the following values: '{}'.z', 'csg|]	}|���r|�qSr)r�)r�r���prefixrrr��sz&_update_ssl_config.<locals>.<listcomp>)rVr�r�rir�r�r�r��dirr�r�rr�r��getattr)r�rVr�r�r�rr�r�_update_ssl_configms2����
�r�cCsl|�d�r4|�d�r#tj�|d�s!tj�|d|d�|d<dSdStj�|dtj�|��|d<dSdS)z<
    Adjusts the log_file based on the log_dir override
    Zlog_dirr.N)r�r�r�r�r��basename)r2Zdefault_log_filerrr�_adjust_log_file_override�s

����r�c	Cs�|durt��}|duri}|��}d|d<t||d�|r$|�|�d|vrH|ddur:t�d�|d|d<nt�d|d�|d|d<t|d	�D]\}}|d
vrg|d}t�d||�||d	|<qNtj	j
�tj
�tjd
��|d<d}|�d�s�|r�||d<n
t||d�\|d<}|s�d|vr�t|�|d<|�dg�D]:}	|	dvr�tj
�||	|d�}
|
||	<q�|	dkr�|	|vr�tj
�||	�}tj
�||dtj
�||	��}|||	<q�d|�dg�vr�tj
�|d�}
tj
�|
d
d|d|
d�|d<t|d�t|d�dk�rtj
�|dd�|d<|ddu|d<t|d�|d<t|d �|d <|�d!��p>tj
�|dd"�|d!<|�d#��pPtj
�|d!d$�g|d#<t||d#�gd%�}d&D]}t||��rm|�|��q`t||�d'|v�r}i|d'<|�d(d)�d*k�r�t|d(<d(|v�r�d
|d(<|d+��|d+<t |�t!|�|d,tj"j#v�r�tj$�%d-|d,�d.d/�tj"j#��d0���|d1tj"j&v�r�tj$�%d2|d1�d.d/�tj"j&��d0���|S)3z-
    Returns minion configurations dict.
    Nrlr(r.�environmentr%zxThe 'saltenv' and 'environment' minion config options cannot both be used. Ignoring 'environment' in favor of 'saltenv'.zmThe 'environment' minion config option has been renamed to 'saltenv'. Using %s as the 'saltenv' config value.rC��gitZhg�svnrl�fsz8Changed %s to %s in minion opts' fileserver_backend listr�__cliFr�r&r�r!)rr ror5r6rrr#r r��
.salt-unixr,Tr'r(rorpr*r�)rr r#ror6)r.rIZbeaconsr8rk�dynamicr)rezThe encryption algorithm '�&' is not valid. Please specify one of r�r�rfzThe signging algorithm ')'r)r*r�rr�r|rCr�rr�r�r�r�r�r�r��argvr�r�r�r�r
rZr�r�r�r!rr�r�_DFLT_IPC_WBUFFERr^r��_update_discovery_config�cryptZVALID_ENCRYPTION_ALGORITHMSr�r��VALID_SIGNING_ALGORITHMS)r2rr&r'r�rUr��new_val�using_ip_for_id�	directoryZnewdirectoryZinclude_dirZnew_include_dirZnewpath_listr@rArrrr+�s�
���� 


�����	
�


����r+cCs�|�d�dvrL|dduri|d<ddddid�}|dD]}||vr,tj�d	|����q|�d
�dkr<dD]}||=q6tjj�||ddd�|d<d
Sd
S)zS
    Update discovery config for all instances.

    :param opts:
    :return:
    rWr�Trnr{i�r�)�attempts�pause�portr��mappingzUnknown discovery option: r(rl)r�r�r�N)r�rr�r�r�rr)r�Zdiscovery_configr�rrrr�-s,�����r�c
Cs(|durt��}tj�|d�s,tj�dd�}|r,tj�|d�}|r,tj�|�r,|tj|<t||td�}|�d|d�}|�dg�}|�	t
||d|d��|�	t
||d	|d��t||�}	t|	�t
|	�|	�d
�durtt�d
i�|	d
<tjj�|	d
�r�tjj�|	d
�|	d
<t|	�tj�|	�|	S)z�
    Reads in the master configuration file and sets up default options

    This is useful for running the actual master daemon. For running
    Master-side client interfaces that need the master opts see
    :py:func:`salt.client.client_config`.
    Nr#rr"r5rFr$TrH)r�r*r�r�r�r�r�r�rrr
�apply_master_configr�r�rr�r�Zis_dictlistZrepack_dictlistr,rZr-)
r�rrrr0r1r2r5rr�rrrr>KsD

����
r>c	Cs$|durt��}|duri}|��}d|d<d|d<t||d�|r(|�|�d|�di�vr?|d	d
ur;t�d�d|d	<tjj	�
tj�
tjd��|d
<d|vrs|dduret�d�|d|d<nt�d|d�|d|d<t|d�D]\}}|dvr�|d}t�d||�||d|<qyt|d�t|d�dkr�tj�|dd�|d<tj�|dd�|d<tj�|dd�|d<|�d�p�tj�|dd�|d<|�d �p�tj�|dd!�g|d <t||d �|�d"d#�d$kr�t|d"<d"|vr�d|d"<d
}d
}|�d%��st|dd&�\|d%<}d}|�s"d'|v�r"t|�|d%<|�r-|d%d(7<gd)�}d*D]}	t|	|��r@|�|	��q3t||�|d+du|d+<|d,du|d,<t|d-�|d-<t|d.�|d.<|d/�r�t|d/t��rz|d/g}
nt|d/t��r�|d/}
g|d/<|
D]"}zt� |�|d/�|�W�q�t!�y�t�d0|�Y�q�w|d1�r�t|d1t��r�|d1g|d1<|d2d3k�r�|�d4d��r�t�d5|d6�d3|d2<|�"d7d8�|d9�#�|d9<t$|�t%|�|d:tj&j'v�rtj(�)d;|d:�d<d=�tj&j'��d>���|S)?z-
    Returns master configurations dict.
    Nrr(TZ__fs_updater.�restr?rDFznThe 'rest' external_auth backend requires 'keep_acl_in_token' to be True. Setting 'keep_acl_in_token' to True.rr�r�r%zxThe 'saltenv' and 'environment' master config options cannot both be used. Ignoring 'environment' in favor of 'saltenv'.zmThe 'environment' master config option has been renamed to 'saltenv'. Using %s as the 'saltenv' config value.rCr�r�z8Changed %s to %s in master opts' fileserver_backend listr#r r�r��tokensr<Zsyndics�
syndic_dirrorpr*r�r8rkr�rr�r�Z_master)rr r6r#ror:r;r<r�rOr=)r.rIrMr,rEr'r(rAz/Unable to parse file_ignore_regex. Skipping: %srBr:rnr=zdThe 'worker_threads' setting in '%s' cannot be lower than 3. Resetting it to the default value of 3.r"r<rmr)rgz!The  publish signging algorithm 'r�r�r�)*r�r*r�rr�r�r|rr�r�r�r�r�r�r�r�rCr�r�r�r!r�r�r�rr�rr�r�rir�r��compiler�r_r^r�r�r�r�r�r�)r2rr�rUr�r�r�Z
append_masterr@rAZignore_regexZregexrrrr��s�
� �����
�
�


�
���r��SALT_CLIENT_CONFIGc
Cs�|durt��}tjj��}tj�|�r|}d}ntj�	d�}d}d|�
dtj�|d��i}|�t
||d��tj�||�}|�t|||��d|vrYtj�tj�	|d��|d<tj�|d�r�|�
dd	�}t�|d�j|t�t���kr�tjj�|d��}	|	����|d
<Wd�n1s�wY|ddkr�d
|d<n
|ddkr�d|d<d|vr�djtjj�|d�|dd�|d<t|�tj�|�|S)a%
    Load Master configuration data

    Usage:

    .. code-block:: python

        import salt.config
        master_opts = salt.config.client_config('/etc/salt/master')

    Returns a dictionary of the Salt Master configuration file with necessary
    options needed to communicate with a locally-running Salt Master daemon.
    This function searches for client specific configurations and adds them to
    the data from the master configuration.

    This is useful for master-side operations like
    :py:class:`~salt.client.LocalClient`.
    NZsaltrc�~z.saltrcZ
token_fileZ
salt_token�rr@r��tokenr7rhz	127.0.0.1z::z::1Z
master_uriztcp://{ip}:{port}r;)�ipr�) r�r*rr�ZxdgZxdg_config_dirr�r�rr	r�r�rr>rrr��stat�st_mtime�time�mktime�	localtimer�r�r�r�r�r�Z
ip_bracketr�rZr-)
r�rrZxdg_dirZclient_config_dirZsaltrc_config_filer�Z
saltrc_configZexpireZfp_rrr�
client_config5sH����

�r�cCsdt��}|�t|t��d��|�|�dtd�|�dtd�d��t|gd��tj�	|�|S)zu
    Read in the Salt Master config file and add additional configs that
    need to be stubbed out for salt-api
    r�r�r�)r6r.)r�r�r.r6)
�DEFAULT_API_OPTSr*rr�r�r�rrrZr-)r�r�rrr�
api_config~s��r�cCs�t��}|�t�t|dtd�}|�d|d�}|�dg�}|�t||dd��|�t||dd��t||�}t||�}t	|d|d�S)	z�
    Read in the salt master config file and add additional configs that
    need to be stubbed out for spm

    .. versionadded:: 2015.8.0
    Z
SPM_CONFIGr�r�rFrFT)rr)
r�r*r�DEFAULT_SPM_OPTSrr�r
r��apply_spm_configr�)r�rr2r5rrrr�
spm_config�s
�

r�cCsX|��}t||d�|r|�|�gd�}dD]}t||�r$|�|�qt||�|S)zN
    Returns the spm configurations dict.

    .. versionadded:: 2015.8.1
    r.)r�r�r�r�r�)r�)r*r�rrr�r)r2rr�r@rArrrr��s
	

�
r�)N)NT)F)r"NFTNrl)T)r6NFTN)r9r"NN)rENNNNNNN)rbN)rlN)rTr)NNFN)r9NF)NN)r�N)��__doc__r�r��loggingr�r�r�r�r��urllib.parserr*rZ
salt.cryptrZsalt.defaults.exitcodesZsalt.exceptionsZ
salt.featuresZ
salt.syspathsZsalt.utils.dataZsalt.utils.dictupdateZsalt.utils.filesZsalt.utils.immutabletypesr�ZimmutabletypesZsalt.utils.networkZsalt.utils.pathZsalt.utils.platformZsalt.utils.stringutilsZsalt.utils.userZsalt.utils.validate.pathZsalt.utils.versionsZsalt.utils.xdgZsalt.utils.yamlZ
salt._loggingrrrrrr
r�ImportError�	getLoggerr�r�Z_DFLT_REFSPECSZDEFAULT_INTERVALZDEFAULT_HASH_TYPErrZ_DFLT_IPC_MODEZ_DFLT_FQDNS_GRAINSZ
_MASTER_TRIESZ_MASTER_USERZis_proxyrZget_userZ	is_darwinrr�r�Z_DFLT_IPC_RBUFFERZfreezerir�r�r�r�r�r�r�r�rr�r�Z
LIB_STATE_DIRZ	CACHE_DIRrMZSOCK_DIRZBASE_THORIUM_ROOTS_DIRr�ZSPM_FORMULA_PATHr�ZSPM_PILLAR_PATHZLOGS_DIRZPIDFILE_DIRr)ZBASE_MASTER_ROOTS_DIRZHOME_DIRr�r7rNr�ZSPM_REACTOR_PATHZSRV_ROOT_DIRZ	SHARE_DIRr�rcrmr�r�r�r�r�r�r�r�r�rr
rrr!r3r5r8rBr,rWrQr[rSrdrRrnrurxr�r�r�r�r�r�r�r�r+r�r>r�r�r�r�r�rrrr�<module>s�.�
��
���������"�%�'�)�,�/�2�5�8�9�<�A�C�G�I�K�T�V�Z�\�^�`�b�e�g�i�k�m�o�q�s�u�w�y�z�|�~�����������
���������������������� ��"��$��&��(��*��,��.��0��3��5��7��9��;��=��?��A��C��E��G��I��K��M��O��Q��T��V��X��Z��\��^��`��b��d��f��k��p��r��t��v��x��z��|��~�����������
���������������������������������!���$���'���)���+���-���/���1���4���7���:���;���=���@���B���E���G���H���J���M���P���T���V���X���Z���\���^���a���c���e���g���i���l���n���p���s���v���x���y���z���{���|���}���~������������������
���������������������������� ����"����'����+����-����/����0����1����2����3����4����5����6����<����=����>����?����@����A����B����C����D����E����F����K����L����M����N����O����P����Q����R����S����T����U����V����W����X����Y����Z����[����\����]����^����_����`����a����b����c����d����e����f����g����h����i����j����l����n����p����r����t����v����x����z����|����}�������������������������������������������������
��������������������������������������������������
����� �����!�����
"�����
#�����$�����%�����&�����'�����*�����,�����/�����2�����5�����9�����:�����<�����?�����B�����D�����F�����I�����K�����P�����R�����T�����V�����X�����Z�����\�����^�����_�����`�����
c�����f�����k�����m�����r�����u�����v�����w�����x�����}�����~����������������������������������������������������������	������������
������������������������������������������������������!������#������
%������'������)������+������-������/������1������7������9������<������?������A������C������E������F������G������H������I������J������K������L������M������N������O������P������Q������R������S������T������W������Y������\������]������^������`������b������c������e������g������i������k������n������q������s������u������|������~�����������������������������������������	��������������
�������������������������������������������������
�������!�������(�������+�������.�������0�������1�������3�������4�������7�������9�������;�������=�������@�������C�������G�������
K�������
O�������Q�������S�������U�������W�������Y�������[�������^�������`�������
a�������b�������d�������e�������h�������k�������m�������o�������q�������s�������u����������������	�
���
������������������� �!�"�#�$�%�&�'�(�)�*�+�,�-�.�/�0�1�5�6�7�8�9�:�;�<�=�>�?�@�A�B�C�D�E�F�G�H�I�J�K��N�O�P�Q�R�S�T�
U�V�W�X��[�\�]�^�_�`�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������	��

������
����
���������������������������������� ��!��"��#��$��%��&��'��(��)��*��+��,��-��.��/��0��1��2��3��4��5��6��7��8��9��:��;��<��=��>��?��@��A��B��C��D��E��F��G��H��I��J��K��L��M��N��O��P��Q��R��S��T��U��V��W��X��Y��Z��[��\��]��^��_��`��
a���d��e��f��
g��
h��i��j��k��l��m��n��o��p��q��r��s��t��u��v��w��x��y��z��{��|��}��~����������������������������	���
���������
��������������������������������������������������������� ���!���"���#���$���%���&���'���(���)���*���+���,���-���.����7��������	�
���
����������������� �!�"�#�$�%�&�'�(�)�*�+�-�.�/�0�1�2�3�4�5�6�7�8�9�:�;�<�=�>�?�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�
U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������	��
������
������������������������������
�������� ��!��
"��#��$��%��&��'��(��)��*��+��,��-��.��/��0��1��2��3��4��5��6��8��9��:��;��<��=��>��?��@��A��B��C��D��E��F��G��H��I��J��K��L��M��N��O��P��Q��R��S��T��U��V��W��X��Y��Z��[��\��]��^��_��`��a��b��c��d��e��f��g��h��i��j��k��l��m��n��p��q��r��s��t��u��v��
w���z��
{��
|��}��~����������������������������	���
���������
��������������������������������������������������������� ���!���"���#���$���%���&���'���(���)���*���+���,���-���.���/���0���1���2���3���4���5���6���7���8���9���:���;���<���=���>���?���@���A���B���C���D���E���F���G���H���I���J���K���L���M���N���O����`�����
��
������������!�������	�
��
���������!��
����


,B:0�B�Z�N�e?$|IN�Ai6G��92I