404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@13.59.50.105: ~ $
3

\�me�N�	@szUdZddlZddlZddlZddlZddlmZddlmZddl	m
Z
mZmZddl
mZddlmZddlmZmZdd	lmZd
Zed�ZdgZd
ddeeeed�gegd�Zeee�ZdZeje�ZdZeje�Zejde�ZdZ dZ!d0Z"d1Z#ej$e%�Z&dd�Z'dd�Z(dd�Z)d2d d!�Z*d3d"d#�Z+d4d$d%�Z,e-e-dd&�d'd(�Z.d5d)d*�Z/d+d,�Z0e-eee1dd-�d.d/�Z2dS)6z-Mounts: Configure mount points and swap files�N)�
whitespace)�dedent)�subp�
type_utils�util)�Cloud)�Config)�
MetaSchema�get_meta_doc)�PER_INSTANCEa�	This module can add or remove mountpoints from ``/etc/fstab`` as well as
configure swap. The ``mounts`` config key takes a list of fstab entries to add.
Each entry is specified as a list of ``[ fs_spec, fs_file, fs_vfstype,
fs_mntops, fs-freq, fs_passno ]``. For more information on these options,
consult the manual for ``/etc/fstab``. When specifying the ``fs_spec``, if the
device name starts with one of ``xvd``, ``sd``, ``hd``, or ``vd``, the leading
``/dev`` may be omitted.

Any mounts that do not appear to either an attached block device or network
resource will be skipped with a log like "Ignoring nonexistent mount ...".

Cloud-init will attempt to add the following mount directives if available and
unconfigured in `/etc/fstab`::

    mounts:
        - ["ephemeral0", "/mnt", "auto","defaults,nofail,x-systemd.requires=cloud-init.service", "0", "2"]
        - ["swap", "none", "swap", "sw", "0", "0"]

In order to remove a previously listed mount, an entry can be added to
the `mounts` list containing ``fs_spec`` for the device to be removed but no
mountpoint (i.e. ``[ swap ]`` or ``[ swap, null ]``).

The ``mount_default_fields`` config key allows default values to be specified
for the fields in a ``mounts`` entry that are not specified, aside from the
``fs_spec`` and the ``fs_file`` fields. If specified, this must be a list
containing 6 values. It defaults to::

    mount_default_fields: [none, none, "auto","defaults,nofail,x-systemd.requires=cloud-init.service", "0", "2"]

Non-systemd init systems will vary in ``mount_default_fields``.

Swap files can be configured by setting the path to the swap file to create
with ``filename``, the size of the swap file with ``size`` maximum size of
the swap file if using an ``size: auto`` with ``maxsize``. By default no
swap file is created.

.. note::
    If multiple mounts are specified where a subsequent mount's mountpoint is
    inside of a previously declared mount's mountpoint (i.e. the 1st mount has
    a mountpoint of ``/abc`` and the 2nd mount has a mountpoint of
    ``/abc/def``) then this will not work as expected - ``cc_mounts`` first
    creates the directories for all the mountpoints **before** it starts to
    perform any mounts and so the sub-mountpoint directory will not be created
    correctly inside the parent mountpoint.

    For systems using util-linux's ``mount`` program this issue can be
    worked around by specifying ``X-mount.mkdir`` as part of a ``fs_mntops``
    value for the subsequent mount entry.
a<    # Mount ephemeral0 with "noexec" flag, /dev/sdc with mount_default_fields,
    # and /dev/xvdh with custom fs_passno "0" to avoid fsck on the mount.
    # Also provide an automatically sized swap with a max size of 10485760
    # bytes.
    mounts:
        - [ /dev/ephemeral0, /mnt, auto, "defaults,noexec" ]
        - [ sdc, /opt/data ]
        - [ xvdh, /opt/data, auto, "defaults,nofail", "0", "0" ]
    mount_default_fields: [None, None, auto, "defaults,nofail", "0", "2"]
    swap:
        filename: /my/swapfile
        size: auto
        maxsize: 10485760
    �allZ	cc_mountsZMountsz%Configure mount points and swap filesz�        # Create a 2 GB swap file at /swapfile using human-readable values
        swap:
            filename: /swapfile
            size: 2G
            maxsize: 2G
        )�id�name�title�description�distrosZexamplesZ	frequencyZactivate_by_schema_keysz&^([x]{0,1}[shv]d[a-z][0-9]*|sr[0-9]+)$z^.+:.*z[%s]+z
/etc/fstabzcomment=cloudconfig���cCs:|d
krdSx(dD] }|j|�r|jd�dkrdSqWd	S)
N�ami�root�swapT�	ephemeral�ebs�:�F)rrr)rr���)�
startswith�find)rZenumname�r�/usr/lib/python3.6/cc_mounts.py�is_meta_device_name�s
r!cCstj|�rdSdS)NTF)�NETWORK_NAME_RE�match)rrrr �is_network_device�s
r$cCsHt|�d|fd|fg}x(|D] }d||f}tjj|�r |Sq WdS)Nzp%sz-part%sz%s%s)�str�os�path�exists)�device_path�partition_numberZpotential_suffixes�suffixZpotential_partition_devicerrr �_get_nth_partition_for_device�s
r,cCsXtjj|�jd�d}tjjd|�}|dk	rLtjj|tjj|�jd�d�}tjj|�S)N�/rz/sys/block/rr)r&r'�realpath�split�joinr()r)�partition_pathZdevice_nameZsys_pathrrr �_is_block_device�sr2cCs
tjd|�|}|dkr&d}tjd�t|�r2|Stj|�\}}|}|rj|j||�}||krjtjd||�t|�r�||�}|s�dS|jd�s�d|f}tjd||�ntj	|�r�d|f}d}|dkr�t
|d	�}nt
||�}|dkr�dSt||��r|dk	�r|S|SdS)
Nz+Attempting to determine the real name of %sr�
ephemeral0z2Adjusted mount option from ephemeral to ephemeral0zMapped device alias %s to %sr-z/dev/%szMapped metadata name %s to %sr)�LOG�debugr$rZexpand_dotted_devname�getr!r�DEVICE_NAME_REr#r,r2)Z	startnameZtransformer�aliasesZdevnamer)r*Zorigr1rrr �sanitize_devname�sD





r9cCsh|dkrtj�d}|d}d||d�}|dkr>|dkr>|}nd|r�tj|�}|j|j}||d<|dkr|tt|d�|�}q�||dkr�t|d�}n|dkr�|}||d<|dtkr�|}n,|d	tkr�dt}nt	t
j|t��t}t||�}||d
<i}	x<|j�D]0\}
}t
|t��r.d|t|	|
<n||	|
<�qWtjd|	d
|	d
|	d|	d|	d�|S)N�totalrZna)�avail�max_in�memr;�g�������?�max��sizez%s MBzCsuggest %s swap for %s memory with '%s' disk given max=%s [max=%s]'r=r<)r�read_meminfor&�statvfs�f_frsize�f_bfree�min�int�GB�round�mathZsqrt�items�
isinstance�MBr4r5)�memsize�maxsize�fsysZsugg_max�inforCr;ZminsizerAZpinfo�k�vrrr �suggested_swapsize�sJ



rT)�fnamerA�returncsd���fdd�}tjj|�}tj|�tj|�d��dkr`tjddd|g�tjd	d
|g��dkr�tj�dkr�|||d�n>y|||d�Wn,tjk
r�t	j
d�|||d�YnXtjj|�r�tj|d�ytjd|g�Wn$tjk
�rtj
|��YnXdS)zSize is in MiB.z6Failed to create swapfile '%s' of size %sMB via %s: %scs�tjd|�|�|dkr*ddd||g}n|dkrHddd|dd	|g}ytj|d
d�WnBtjk
r�}z$tj�||||�tj|��WYdd}~XnXdS)Nz3Creating swapfile in '%s' on fstype '%s' using '%s'�	fallocatez-lz%sM�ddzif=/dev/zerozof=%szbs=1Mzcount=%sT)Zcapture)r4r5r�ProcessExecutionErrorrQr�del_file)rUrA�method�cmd�e)�errmsg�fstyperr �create_swap!s&

z$create_swapfile.<locals>.create_swaprZbtrfs�truncatez-s�0Zchattrz+CZxfsr>�rXrWz4fallocate swap creation failed, will attempt with ddi�ZmkswapN)r>rc)r&r'�dirnamer�
ensure_dirZget_mount_inforZkernel_versionrYr4rQr(�chmodrZ)rUrAr`�swap_dirr)r^r_r �create_swapfiles,


rhcCs�tjj|�}t|�j�dkrdytj�d}Wntk
rJtj	d�dSXtj
|�t|||d�}tt|d��}|s�tj	d�dStj
tj	d	t||gd
�|S)z�
    fname: full path string of filename to setup
    size: the size to create. set to "auto" for recommended
    maxsize: the maximum size
    �autor:z)Not creating swap: failed to read meminfoN)rPrOrNrrz'Not creating swap: suggested size was 0zSetting up swap file)�msg�func�argsi)r&r'rdr%�lowerrrB�IOErrorr4r5rerTrGZlog_timerh)rUrArOrgrNZmibsizerrr �setup_swapfileVs(


rocCsZt|t�stjd�dS|jdd�}|jdd�}|jdd�}|oB|sRtjd�dStjj|�r�tjjd	�sztjd
|�|SyFx4t	j
d	�j�D]"}|j|d�r�tjd|�|Sq�Wtjd
|�Wn t
k
r�tjd|�|SXyBt|t�o�|dk�rt	j|�}t|t��rt	j|�}t|||d�St
k
�rT}ztjd|�WYdd}~XnXdS)zahandle the swap config, calling setup_swap if necessary.
    return None or (filename, size)
    z%input for swap config was not a dict.N�filenamez	/swap.imgrArrOzno need to setup swapz/proc/swapsz:swap file %s exists, but no /proc/swaps exists, being safe� zswap file %s already in usez+swap file %s exists, but not in /proc/swapsz.swap file %s exists. Error reading /proc/swapsri)rUrArOzfailed to setup swap: %s)rL�dictr4�warningr6r5r&r'r(r�	load_file�
splitlinesr�	Exceptionr%Zhuman2bytesro)ZswapcfgrUrArO�liner]rrr �handle_swapcfgxsD




rx)r�cfg�cloudrlrVc$
sXd}|jj�}|rd}ddd|ddg}|jd|�}ddd|d	ddgd
dd
dddgg}g}d
|krj|d
}tjd|�g}	i}
g}tjjt�r�xdt	j
t�j�D]R}t|kr�|j
|�q�ytj|�}
Wntk
r�YnX||
|
d<|	j
|�q�W|jdi�}�xtt|��D�]}t||t��sFtjd|dtj||���qt||d�}t||j|d�}||k�r~tjd||�|dk�r�tjd|��qn ||
k�r�tjd||
|��q|||d<xJtt||��D]6}|||dk�r�q�nt|||�|||<�q�W�qWx�tt|��D]�}x^tt|��D]N}t||�|k�rb||j
||�n"|||dk�r8|||||<�q8W||ddk�r&x8t|�D],}||d||dk�r�d||d<�q�W�q&Wx�|D]�}|d}t||j|d�}||k�rtjd||�|dk�r2tjd|��q�n ||
k�rRtjd||
|��q�||d<d}x&|D]}|d|dk�rdd}P�qdW|�r�tjd|��q�|j
|��q�Wg}x8|D]0}|ddk�r�tjd|d�n
|j
|��q�Wt|jd
i��}|�r|j
|dd
dddg�t|�dk�r2tjd�dSg}d}d}g}xb|D]Z}d|d	tf|d	<|dd
k�rrd}|djd ��r�|j
|d�|j
d!j|���qHWd"d#�t	j�j �D�}xX|D]P}yt	j!|�Wn$tk
�r�t	j"td$|�YnX|�r�||k�r�d}�q�Wd%d#�|D��d&d#�|D���fd'd#��D��fd(d#��D�}|	j#|�d)d*j|	�} t	j$t| �g}!|�r�|!j
d+d,g�t|�dk�r�tjd-�ntjd.|�d}|�r�|!j
d/d,g�|�r�|!j
d0d1g�d2}"xj|!D]b}#d3d4j|#�}"yt%j%|#�tj|"d5�Wn2t%j&k
�rLtj|"d6�t	j"t|"d6�YnX�q�WdS)7Nzdefaults,nobootwaitz=defaults,nofail,x-systemd.requires=cloud-init.service,_netdevrirb�2Zmount_default_fieldsr3z/mnt�rZnone�sw�mountszmounts configuration is %sr�device_aliasesz,Mount option %s not a list, got a %s insteadr)r8zchanged %s => %sz#Ignoring nonexistent named mount %sz&Device %s already defined in fstab: %szchanged default device %s => %sz+Ignoring nonexistent default named mount %sFTz-Not including %s, already previously includedz$Skipping nonexistent device named %sz No modifications to fstab neededz%s,%srr-�	cSs g|]\}}d|kr|d�qS)Z
mountpointr)�.0rRrSrrr �
<listcomp>Jszhandle.<locals>.<listcomp>z Failed to make '%s' config-mountcSsg|]}tjd|��qS)rq)�WS�sub)r��nrrr r�WscSsg|]}tjd|��qS)rq)r�r�)r�r�rrr r�Xscsg|]}|�krd|�qS)z- r)r�Zdrop)�saddsrr r�Zscsg|]}|�krd|�qS)z+ r)r��add)�sdropsrr r�[sz%s
�
Zswaponz-azNo changes to /etc/fstab made.zChanges to fstab: %sZmountZ	systemctlz
daemon-reloadz#Activating swap and mounts with: %szActivate mounts: %s:rqZPASSZFAIL)'Zdistro�uses_systemdr6r4r5r&r'r(�
FSTAB_PATHrrtru�MNT_COMMENT�appendr�r/rv�range�lenrL�listrsrZobj_namer%r9Zdevice_name_to_devicerQrxrr0r~rKreZlogexc�extendZ
write_filerrY)$rryrzrlZdef_mnt_optsr�ZdefvalsZdefmntsZcfgmntZfstab_linesZ
fstab_devsZ
fstab_removedrwZtoksr�i�startZ	sanitized�jZdefmntZ
cfgmnt_hasZcfgmZactlist�xZswapretZcc_linesZneedswapZneed_mount_all�dirsZmount_points�dZsops�contentsZ
activate_cmdsZfmtr\r)r�r�r �handle�s"





$













r�ii@)N)N)NNN)NN)3�__doc__ZloggingrJr&�re�stringr�textwraprZ	cloudinitrrrZcloudinit.cloudrZcloudinit.configrZcloudinit.config.schemar	r
Zcloudinit.settingsrZMODULE_DESCRIPTIONZexampler�metaZDEVICE_NAME_FILTER�compiler7ZNETWORK_NAME_FILTERr"r�r�r�rMrHZ	getLogger�__name__r4r!r$r,r2r9rTr%rhrorxr�r�rrrr �<module>	s\5





1
9:
"0

Filemanager

Name Type Size Permission Actions
__init__.cpython-36.opt-1.pyc File 128 B 0644
__init__.cpython-36.pyc File 128 B 0644
cc_ansible.cpython-36.opt-1.pyc File 8.63 KB 0644
cc_ansible.cpython-36.pyc File 8.63 KB 0644
cc_apk_configure.cpython-36.opt-1.pyc File 4.51 KB 0644
cc_apk_configure.cpython-36.pyc File 4.51 KB 0644
cc_apt_configure.cpython-36.opt-1.pyc File 30.42 KB 0644
cc_apt_configure.cpython-36.pyc File 30.42 KB 0644
cc_apt_pipelining.cpython-36.opt-1.pyc File 2.44 KB 0644
cc_apt_pipelining.cpython-36.pyc File 2.44 KB 0644
cc_bootcmd.cpython-36.opt-1.pyc File 2.51 KB 0644
cc_bootcmd.cpython-36.pyc File 2.51 KB 0644
cc_byobu.cpython-36.opt-1.pyc File 3.04 KB 0644
cc_byobu.cpython-36.pyc File 3.04 KB 0644
cc_ca_certs.cpython-36.opt-1.pyc File 7.05 KB 0644
cc_ca_certs.cpython-36.pyc File 7.05 KB 0644
cc_chef.cpython-36.opt-1.pyc File 9.13 KB 0644
cc_chef.cpython-36.pyc File 9.13 KB 0644
cc_disable_ec2_metadata.cpython-36.opt-1.pyc File 1.72 KB 0644
cc_disable_ec2_metadata.cpython-36.pyc File 1.72 KB 0644
cc_disk_setup.cpython-36.opt-1.pyc File 23.1 KB 0644
cc_disk_setup.cpython-36.pyc File 23.1 KB 0644
cc_fan.cpython-36.opt-1.pyc File 2.74 KB 0644
cc_fan.cpython-36.pyc File 2.74 KB 0644
cc_final_message.cpython-36.opt-1.pyc File 3.07 KB 0644
cc_final_message.cpython-36.pyc File 3.07 KB 0644
cc_growpart.cpython-36.opt-1.pyc File 15.91 KB 0644
cc_growpart.cpython-36.pyc File 15.91 KB 0644
cc_grub_dpkg.cpython-36.opt-1.pyc File 4.92 KB 0644
cc_grub_dpkg.cpython-36.pyc File 4.92 KB 0644
cc_install_hotplug.cpython-36.opt-1.pyc File 3.25 KB 0644
cc_install_hotplug.cpython-36.pyc File 3.25 KB 0644
cc_keyboard.cpython-36.opt-1.pyc File 1.98 KB 0644
cc_keyboard.cpython-36.pyc File 1.98 KB 0644
cc_keys_to_console.cpython-36.opt-1.pyc File 3.11 KB 0644
cc_keys_to_console.cpython-36.pyc File 3.11 KB 0644
cc_landscape.cpython-36.opt-1.pyc File 4.71 KB 0644
cc_landscape.cpython-36.pyc File 4.71 KB 0644
cc_locale.cpython-36.opt-1.pyc File 1.58 KB 0644
cc_locale.cpython-36.pyc File 1.58 KB 0644
cc_lxd.cpython-36.opt-1.pyc File 13.04 KB 0644
cc_lxd.cpython-36.pyc File 13.04 KB 0644
cc_mcollective.cpython-36.opt-1.pyc File 4.24 KB 0644
cc_mcollective.cpython-36.pyc File 4.24 KB 0644
cc_migrator.cpython-36.opt-1.pyc File 2.92 KB 0644
cc_migrator.cpython-36.pyc File 2.92 KB 0644
cc_mounts.cpython-36.opt-1.pyc File 14.08 KB 0644
cc_mounts.cpython-36.pyc File 14.08 KB 0644
cc_ntp.cpython-36.opt-1.pyc File 13.15 KB 0644
cc_ntp.cpython-36.pyc File 13.15 KB 0644
cc_package_update_upgrade_install.cpython-36.opt-1.pyc File 3.78 KB 0644
cc_package_update_upgrade_install.cpython-36.pyc File 3.78 KB 0644
cc_phone_home.cpython-36.opt-1.pyc File 4.1 KB 0644
cc_phone_home.cpython-36.pyc File 4.1 KB 0644
cc_power_state_change.cpython-36.opt-1.pyc File 6.24 KB 0644
cc_power_state_change.cpython-36.pyc File 6.24 KB 0644
cc_puppet.cpython-36.opt-1.pyc File 9.46 KB 0644
cc_puppet.cpython-36.pyc File 9.46 KB 0644
cc_reset_rmc.cpython-36.opt-1.pyc File 3.59 KB 0644
cc_reset_rmc.cpython-36.pyc File 3.59 KB 0644
cc_resizefs.cpython-36.opt-1.pyc File 7.02 KB 0644
cc_resizefs.cpython-36.pyc File 7.02 KB 0644
cc_resolv_conf.cpython-36.opt-1.pyc File 4.27 KB 0644
cc_resolv_conf.cpython-36.pyc File 4.27 KB 0644
cc_rh_subscription.cpython-36.opt-1.pyc File 12.06 KB 0644
cc_rh_subscription.cpython-36.pyc File 12.06 KB 0644
cc_rightscale_userdata.cpython-36.opt-1.pyc File 2.77 KB 0644
cc_rightscale_userdata.cpython-36.pyc File 2.77 KB 0644
cc_rsyslog.cpython-36.opt-1.pyc File 10.34 KB 0644
cc_rsyslog.cpython-36.pyc File 10.34 KB 0644
cc_runcmd.cpython-36.opt-1.pyc File 2.43 KB 0644
cc_runcmd.cpython-36.pyc File 2.43 KB 0644
cc_salt_minion.cpython-36.opt-1.pyc File 4.36 KB 0644
cc_salt_minion.cpython-36.pyc File 4.36 KB 0644
cc_scripts_per_boot.cpython-36.opt-1.pyc File 1.4 KB 0644
cc_scripts_per_boot.cpython-36.pyc File 1.4 KB 0644
cc_scripts_per_instance.cpython-36.opt-1.pyc File 1.57 KB 0644
cc_scripts_per_instance.cpython-36.pyc File 1.57 KB 0644
cc_scripts_per_once.cpython-36.opt-1.pyc File 1.51 KB 0644
cc_scripts_per_once.cpython-36.pyc File 1.51 KB 0644
cc_scripts_user.cpython-36.opt-1.pyc File 1.58 KB 0644
cc_scripts_user.cpython-36.pyc File 1.58 KB 0644
cc_scripts_vendor.cpython-36.opt-1.pyc File 2.04 KB 0644
cc_scripts_vendor.cpython-36.pyc File 2.04 KB 0644
cc_seed_random.cpython-36.opt-1.pyc File 4.07 KB 0644
cc_seed_random.cpython-36.pyc File 4.07 KB 0644
cc_set_hostname.cpython-36.opt-1.pyc File 4 KB 0644
cc_set_hostname.cpython-36.pyc File 4 KB 0644
cc_set_passwords.cpython-36.opt-1.pyc File 8.4 KB 0644
cc_set_passwords.cpython-36.pyc File 8.4 KB 0644
cc_snap.cpython-36.opt-1.pyc File 5.94 KB 0644
cc_snap.cpython-36.pyc File 5.94 KB 0644
cc_spacewalk.cpython-36.opt-1.pyc File 2.87 KB 0644
cc_spacewalk.cpython-36.pyc File 2.87 KB 0644
cc_ssh.cpython-36.opt-1.pyc File 11.02 KB 0644
cc_ssh.cpython-36.pyc File 11.02 KB 0644
cc_ssh_authkey_fingerprints.cpython-36.opt-1.pyc File 3.54 KB 0644
cc_ssh_authkey_fingerprints.cpython-36.pyc File 3.54 KB 0644
cc_ssh_import_id.cpython-36.opt-1.pyc File 3.85 KB 0644
cc_ssh_import_id.cpython-36.pyc File 3.85 KB 0644
cc_timezone.cpython-36.opt-1.pyc File 1.24 KB 0644
cc_timezone.cpython-36.pyc File 1.24 KB 0644
cc_ubuntu_advantage.cpython-36.opt-1.pyc File 12.42 KB 0644
cc_ubuntu_advantage.cpython-36.pyc File 12.42 KB 0644
cc_ubuntu_autoinstall.cpython-36.opt-1.pyc File 3.89 KB 0644
cc_ubuntu_autoinstall.cpython-36.pyc File 3.89 KB 0644
cc_ubuntu_drivers.cpython-36.opt-1.pyc File 3.63 KB 0644
cc_ubuntu_drivers.cpython-36.pyc File 3.63 KB 0644
cc_update_etc_hosts.cpython-36.opt-1.pyc File 4.3 KB 0644
cc_update_etc_hosts.cpython-36.pyc File 4.3 KB 0644
cc_update_hostname.cpython-36.opt-1.pyc File 3.01 KB 0644
cc_update_hostname.cpython-36.pyc File 3.01 KB 0644
cc_users_groups.cpython-36.opt-1.pyc File 7.58 KB 0644
cc_users_groups.cpython-36.pyc File 7.58 KB 0644
cc_wireguard.cpython-36.opt-1.pyc File 8.39 KB 0644
cc_wireguard.cpython-36.pyc File 8.39 KB 0644
cc_write_files.cpython-36.opt-1.pyc File 5.61 KB 0644
cc_write_files.cpython-36.pyc File 5.61 KB 0644
cc_write_files_deferred.cpython-36.opt-1.pyc File 1.73 KB 0644
cc_write_files_deferred.cpython-36.pyc File 1.73 KB 0644
cc_yum_add_repo.cpython-36.opt-1.pyc File 6.03 KB 0644
cc_yum_add_repo.cpython-36.pyc File 6.03 KB 0644
cc_zypper_add_repo.cpython-36.opt-1.pyc File 5.66 KB 0644
cc_zypper_add_repo.cpython-36.pyc File 5.66 KB 0644
modules.cpython-36.opt-1.pyc File 7.31 KB 0644
modules.cpython-36.pyc File 7.31 KB 0644
schema.cpython-36.opt-1.pyc File 39.45 KB 0644
schema.cpython-36.pyc File 39.45 KB 0644