Improved man page
This commit is contained in:
parent
cc72e7ab80
commit
8465507daf
152
man.md
152
man.md
|
@ -12,19 +12,16 @@ SYNOPSIS
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
===========
|
===========
|
||||||
|
|
||||||
**qq2clone** is a tool that uses libvirt to make creating clones of
|
**qq2clone** is a tool for creating and managing clones of QEMU/KVM
|
||||||
template QEMU/KVM machines simple. By using the copy on write feature
|
virtual machines. By using the copy on write feature of qcow2, clones of
|
||||||
for which qcow2 is named, clones of an existing virtual machine can be
|
an existing virtual machine can be made using few system resources and
|
||||||
made without inadvertently altering the original image (with caveats -
|
little time or effort.
|
||||||
read the **LIMITATIONS** section if you aren’t already familiar with how
|
|
||||||
copy on write works). **qq2clone** makes creating and managing these
|
|
||||||
clones simple and efficient.
|
|
||||||
|
|
||||||
**qq2clone** supports creating numerous clones of a template and
|
**qq2clone** supports creating numerous clones of a template and
|
||||||
performing batch operations on them - including the execution of
|
performing batch operations on them - including the execution of
|
||||||
arbitrary commands with exec. This simplifies workflows involving large
|
arbitrary commands with **qq2clone** exec. This simplifies workflows
|
||||||
numbers of virtual machines, or the frequent creation/destruction of
|
involving large numbers of virtual machines, or the frequent
|
||||||
virtual machines.
|
creation/deletion of virtual machines.
|
||||||
|
|
||||||
To easily establish graphical connections to your virtual machines,
|
To easily establish graphical connections to your virtual machines,
|
||||||
qq2clone can use virt-viewer or spicy.
|
qq2clone can use virt-viewer or spicy.
|
||||||
|
@ -34,18 +31,17 @@ OPTIONS
|
||||||
|
|
||||||
Not every option has an effect in the context of every command.
|
Not every option has an effect in the context of every command.
|
||||||
Specifying an option that has no effect in the context of the command
|
Specifying an option that has no effect in the context of the command
|
||||||
being invoked will not produce an error, it simply will not do anything
|
being invoked will not produce an error, it simply will not do anything.
|
||||||
|
|
||||||
Options are parsed left to right, and right-hand options override
|
Options are parsed left to right, and right-hand options override
|
||||||
left-hand options. The only exception is for -Q/--quieter, which *must*
|
left-hand options.
|
||||||
be the first option listed to work properly.
|
|
||||||
|
|
||||||
-c, --connection \[*URI*\]
|
-c, --connection \[*URI*\]
|
||||||
Specify a non-default connection URI: sets the value of
|
Specify a non-default connection URI: sets the value of
|
||||||
LIBVIRT\_DEFAULT\_URI
|
LIBVIRT\_DEFAULT\_URI
|
||||||
|
|
||||||
-C, --copy-disks
|
-C, --copy-disks
|
||||||
When importing or copying a template, make a (full) copy of images
|
When importing or copying a template, make a (full) copy of its image(s)
|
||||||
|
|
||||||
-f, --no-spice
|
-f, --no-spice
|
||||||
Do not attempt to connect to a virtual machine’s Spice graphics.
|
Do not attempt to connect to a virtual machine’s Spice graphics.
|
||||||
|
@ -70,17 +66,15 @@ command. Recommended only once familiar with the behavior of
|
||||||
**qq2clone**
|
**qq2clone**
|
||||||
|
|
||||||
-Q, --quieter
|
-Q, --quieter
|
||||||
This option is (currently) required to appear immediately following the
|
This option is (currently) required to appear as the first argument to
|
||||||
invocation of **qq2clone**. Suppresses all output, error message or
|
**qq2clone**. Suppresses all output, error message or otherwise, except
|
||||||
otherwise, except when running interactive commands or commands that
|
when running interactive commands or commands that require output to be
|
||||||
require output to be useful. The commands for which output is not
|
useful. Other commands will receive only an exit code as output. This
|
||||||
entirely supressed are: config list, config info, list, list-templates,
|
option is intended for calling qq2clone from a script.
|
||||||
exec, edit, modify-template edit, and check. Other commands will receive
|
|
||||||
only an exit code as output. This option is intended for calling
|
|
||||||
qq2clone from a script.
|
|
||||||
|
|
||||||
-r, --run
|
-r, --run
|
||||||
Run a clone when creating it. Overrides NORUN setting in configuration
|
Start a clone after creating it. Overrides NORUN setting in
|
||||||
|
configuration
|
||||||
|
|
||||||
-s, --storage \[*LOCATION*\]
|
-s, --storage \[*LOCATION*\]
|
||||||
When creating a clone, place new disk image file(s) at location
|
When creating a clone, place new disk image file(s) at location
|
||||||
|
@ -110,10 +104,9 @@ TYPES OF COMMAND
|
||||||
|
|
||||||
There are two main classes of commands: commands that operate directly
|
There are two main classes of commands: commands that operate directly
|
||||||
on templates, and commands that create or operate on clones of
|
on templates, and commands that create or operate on clones of
|
||||||
templates. In order to make it less likely that the user may
|
templates. To prevent unintended actions, these two command types use
|
||||||
unintentionally invoke a command of one class when they intended to
|
slightly different syntax. Commands that operate on templates use the
|
||||||
invoke one of the other, they use a different syntax. Commands that
|
syntax:
|
||||||
operate on templates use the syntax:
|
|
||||||
|
|
||||||
**qq2clone** **command** \[*template-name*\] \[*ARG*\] …
|
**qq2clone** **command** \[*template-name*\] \[*ARG*\] …
|
||||||
|
|
||||||
|
@ -121,15 +114,15 @@ while commands that operate on clones use the syntax:
|
||||||
|
|
||||||
**qq2clone** --template \[*template-name*\] **command** \[*ARG*\] …
|
**qq2clone** --template \[*template-name*\] **command** \[*ARG*\] …
|
||||||
|
|
||||||
Notice that commands operating on clones work within the context of a
|
Commands operating on clones work within the context of a template
|
||||||
template defined by the option --template/-t. Conversely, commands
|
defined by --template/-t. Conversely, commands operating on templates
|
||||||
operating on templates specify the template as an argument to the
|
specify the template as an argument to the command.
|
||||||
command. There can also be a default template defined by the TEMPLATE
|
|
||||||
configuration option, allowing the --template flag to be omitted for
|
A default template can be defined by the TEMPLATE configuration option,
|
||||||
commands that operate on clones. Commands operating on templates do not
|
allowing the --template flag to be omitted for commands that operate on
|
||||||
respect this default - the template must always be explicitly defined,
|
clones. Commands operating on templates do not respect this default -
|
||||||
further reducing the likelihood of accidentally modifying or deleting a
|
the template must always be explicitly defined, reducing the likelihood
|
||||||
template.
|
of accidentally modifying or deleting a template.
|
||||||
|
|
||||||
TEMPLATE COMMMANDS
|
TEMPLATE COMMMANDS
|
||||||
==================
|
==================
|
||||||
|
@ -220,10 +213,9 @@ For every machine in *SET*, sequentially, execute the contents of the
|
||||||
command string in an environment where the following variables are
|
command string in an environment where the following variables are
|
||||||
defined per clone: `"$uuid"`, `"$name"`, `"$disks"` (a newline delimited
|
defined per clone: `"$uuid"`, `"$name"`, `"$disks"` (a newline delimited
|
||||||
string containing the machine’s qcow2 disk device filepaths). This is
|
string containing the machine’s qcow2 disk device filepaths). This is
|
||||||
done using bash’s eval command, so be sure to put any instances of these
|
done using bash’s eval command, so contain the command string in single
|
||||||
variables in single quotes (double quotes inside the single quotes is
|
quotes to avoid unexpected behavior. If any instance of exec has a
|
||||||
best practice) or they will not be set properly. If any instance of exec
|
non-zero return value, execution stops.
|
||||||
has a non-zero return value, execution stops.
|
|
||||||
|
|
||||||
**list** \[*ARG*\]
|
**list** \[*ARG*\]
|
||||||
Without arguments, list all clones of the current template and their
|
Without arguments, list all clones of the current template and their
|
||||||
|
@ -265,13 +257,13 @@ OTHER COMMANDS
|
||||||
==============
|
==============
|
||||||
|
|
||||||
**check** \[*TEMPLATE-NAME*\]
|
**check** \[*TEMPLATE-NAME*\]
|
||||||
As described in the limitations section, there are ways that qq2clone
|
If a clone is deleted, has its UUID changed or is otherwise unavailable,
|
||||||
can lose track of a clone. If this happens, it will remain in qq2clone’s
|
it will remain in qq2clone’s database. Its ID number will remain
|
||||||
database, its ID number will remain reserved, and its image files may
|
reserved, and its image files may not be deleted and take up space doing
|
||||||
not be deleted and take up space doing nothing. The **check** command
|
nothing. The **check** command finds and fixes occurences of this
|
||||||
finds and fixes occurences of this problem. The *TEMPLATE-NAME* argument
|
problem. The *TEMPLATE-NAME* argument is optional, and restricts the
|
||||||
is optional, and restricts the check to that template and its clones.
|
check to that template and its clones. Otherwise, all templates are
|
||||||
Otherwise, all templates are checked
|
checked
|
||||||
|
|
||||||
**config** list, **config** info \[*OPTION*\], **config** edit \[*OPTION*\]
|
**config** list, **config** info \[*OPTION*\], **config** edit \[*OPTION*\]
|
||||||
List all configuration options and their current value, get info about a
|
List all configuration options and their current value, get info about a
|
||||||
|
@ -415,48 +407,18 @@ backing storage device that you can edit as you please
|
||||||
LIMITATIONS
|
LIMITATIONS
|
||||||
===========
|
===========
|
||||||
|
|
||||||
The largest limitation of **qq2clone** is that it cannot protect your
|
Understand what copy on write is. If you modify an image, you will
|
||||||
template images from the actions of other software. If nothing else
|
corrupt images using it as a backing file. If you don’t understand what
|
||||||
touches a template’s storage volumes, qq2clone can safely handle them
|
that means, use a search engine to research copy on write. To safely
|
||||||
(barring unknown bugs or bad luck during a commit-image). However, if
|
modify a template’s underlying image, use the prepare-image and
|
||||||
something else alters the image upon which a template is based, its
|
commit-image subcommands of **qq2clone** modify-template.
|
||||||
existing clones may be corrupted and future clones may behave
|
|
||||||
differently than expected. It is the user’s responsibility to understand
|
|
||||||
this aspect of copy on write and carefully manage template images.
|
|
||||||
Future updates to qq2clone may add features that give some additional
|
|
||||||
protections, but this risk is inherent to copy on write.
|
|
||||||
|
|
||||||
Libvirt has permissions errors when a storage pool is in a “hidden”
|
qq2clone uses a virtual machine’s UUID as defined in its libvirt XML
|
||||||
directory with a name beginning with “.” and qcow2 files with backing
|
file to track it. Don’t change a clone’s UUID.
|
||||||
files are involved. This may be due to apparmor, or it may be an issue
|
|
||||||
with libvirt. It is unknown how widespread this issue is, but it is the
|
|
||||||
reason that the default directory storage-qq2clone does not start with
|
|
||||||
‘.’
|
|
||||||
|
|
||||||
If the UUID of a clone is changed, qq2clone will no longer be able to
|
qq2clone does not support pool types other than directories. If there is
|
||||||
track it and will not be able to perform commands on it anymore. This
|
another pool type you wish it could use, email me at
|
||||||
will be addressed in the future using custom metadata in the libvirt
|
jgardner7289@protonmail.com and let me know.
|
||||||
domain XML. If the user undefines a domain, this will obviously cause it
|
|
||||||
to disappear from qq2clone’s perspective when it is turned off, creating
|
|
||||||
a discrepancy in its database. This can be fixed with **qq2clone**
|
|
||||||
**check**.
|
|
||||||
|
|
||||||
qq2clone can only produce clones by making qcow2 image files. The
|
|
||||||
backing file need not be qcow2, but the images produced by qq2clone
|
|
||||||
always will be. This is unlikely to ever change - levaraging the
|
|
||||||
features of qcow2 is the entire purpose of qq2clone. If it does change,
|
|
||||||
qq2clone will need a new name.
|
|
||||||
|
|
||||||
qq2clone does not support creating images in pool types other than
|
|
||||||
directories, and attempting to use a machine as a template when it has
|
|
||||||
storage volumes in a non-directory pool is likely to fail or have
|
|
||||||
unexpected results. Support for some other pool types may be added in
|
|
||||||
the future.
|
|
||||||
|
|
||||||
qq2clone currently cannot copy storage volumes when importing a template
|
|
||||||
(it just references the originals), or when copying a template. This
|
|
||||||
will change in the future, and qq2clone will also be able to handle more
|
|
||||||
complex relationships between templates, clones and their images
|
|
||||||
|
|
||||||
FILES
|
FILES
|
||||||
=====
|
=====
|
||||||
|
@ -493,19 +455,9 @@ manually, but it is more advisable to use **qq2clone**
|
||||||
BUGS
|
BUGS
|
||||||
====
|
====
|
||||||
|
|
||||||
As described in the options section, the implementation of the
|
If you find a bug, please check to see if it already appears in
|
||||||
--quieter/-Q option needs some work. Its current behavior is the easiest
|
https://git.j-g-web.com/jesse/qq2clone/issues. If not, email me at
|
||||||
functional approach without complicating the options parser, but it will
|
jgardner7289@protonmail.com.
|
||||||
eventually be modified and become better behaved. In addition to the
|
|
||||||
previously described problem, very early error messages will not be
|
|
||||||
suppressed. Most likely, the solution is to implement a better options
|
|
||||||
parser and make it the first thing to run when executing qq2clone.
|
|
||||||
However, the impact of this bug is minimal and other improvements are
|
|
||||||
likely to come before this bug fix.
|
|
||||||
|
|
||||||
If you find any worse bugs, and I’m sure I missed some, please let me
|
|
||||||
know and I will fix them as time allows. Contact me at:
|
|
||||||
jgardner7289@protonmail.com
|
|
||||||
|
|
||||||
COPYRIGHT 2021, Jesse Gardner
|
COPYRIGHT 2021, Jesse Gardner
|
||||||
=============================
|
=============================
|
||||||
|
|
132
man.pandoc
132
man.pandoc
|
@ -10,18 +10,16 @@ qq2clone - Create and manage QEMU/KVM VMs using template machines and qcow2
|
||||||
**qq2clone** [*OPTION*]... *COMMAND* [*ARG*]...
|
**qq2clone** [*OPTION*]... *COMMAND* [*ARG*]...
|
||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
**qq2clone** is a tool that uses libvirt to make creating clones
|
**qq2clone** is a tool for creating and managing clones of QEMU/KVM
|
||||||
of template QEMU/KVM machines simple. By using the copy on write feature
|
virtual machines. By using the copy on write feature of qcow2, clones of
|
||||||
for which qcow2 is named, clones of an existing virtual machine can be made
|
an existing virtual machine can be made using few system resources and
|
||||||
without inadvertently altering the original image (with caveats - read the
|
little time or effort.
|
||||||
**LIMITATIONS** section if you aren't already familiar with how copy on
|
|
||||||
write works). **qq2clone** makes creating and managing these clones simple
|
|
||||||
and efficient.
|
|
||||||
|
|
||||||
**qq2clone** supports creating numerous clones of a template and
|
**qq2clone** supports creating numerous clones of a template and
|
||||||
performing batch operations on them - including the execution of arbitrary
|
performing batch operations on them - including the execution of arbitrary
|
||||||
commands with exec. This simplifies workflows involving large numbers of
|
commands with **qq2clone** exec. This simplifies workflows involving large
|
||||||
virtual machines, or the frequent creation/destruction of virtual machines.
|
numbers of virtual machines, or the frequent creation/deletion of virtual
|
||||||
|
machines.
|
||||||
|
|
||||||
To easily establish graphical connections to your virtual machines, qq2clone
|
To easily establish graphical connections to your virtual machines, qq2clone
|
||||||
can use virt-viewer or spicy.
|
can use virt-viewer or spicy.
|
||||||
|
@ -30,18 +28,17 @@ can use virt-viewer or spicy.
|
||||||
|
|
||||||
Not every option has an effect in the context of every command. Specifying
|
Not every option has an effect in the context of every command. Specifying
|
||||||
an option that has no effect in the context of the command being invoked
|
an option that has no effect in the context of the command being invoked
|
||||||
will not produce an error, it simply will not do anything
|
will not produce an error, it simply will not do anything.
|
||||||
|
|
||||||
Options are parsed left to right, and right-hand options override
|
Options are parsed left to right, and right-hand options override
|
||||||
left-hand options. The only exception is for \-Q/\-\-quieter, which *must*
|
left-hand options.
|
||||||
be the first option listed to work properly.
|
|
||||||
|
|
||||||
\-c, \-\-connection [*URI*]
|
\-c, \-\-connection [*URI*]
|
||||||
: Specify a non-default connection URI: sets the value of
|
: Specify a non-default connection URI: sets the value of
|
||||||
LIBVIRT_DEFAULT_URI
|
LIBVIRT_DEFAULT_URI
|
||||||
|
|
||||||
\-C, \-\-copy\-disks
|
\-C, \-\-copy\-disks
|
||||||
: When importing or copying a template, make a (full) copy of images
|
: When importing or copying a template, make a (full) copy of its image(s)
|
||||||
|
|
||||||
\-f, \-\-no\-spice
|
\-f, \-\-no\-spice
|
||||||
: Do not attempt to connect to a virtual machine's Spice graphics.
|
: Do not attempt to connect to a virtual machine's Spice graphics.
|
||||||
|
@ -65,17 +62,15 @@ exiting with an error or making a safe default choice depending on the
|
||||||
command. Recommended only once familiar with the behavior of **qq2clone**
|
command. Recommended only once familiar with the behavior of **qq2clone**
|
||||||
|
|
||||||
\-Q, \-\-quieter
|
\-Q, \-\-quieter
|
||||||
: This option is (currently) required to appear immediately following the
|
: This option is (currently) required to appear as the first
|
||||||
invocation of **qq2clone**. Suppresses all output, error message or
|
argument to **qq2clone**. Suppresses all output, error message or
|
||||||
otherwise, except when running interactive commands or
|
otherwise, except when running interactive commands or
|
||||||
commands that require output to be useful. The commands for which output
|
commands that require output to be useful. Other
|
||||||
is not entirely supressed are: config list, config info, list,
|
|
||||||
list-templates, exec, edit, modify-template edit, and check. Other
|
|
||||||
commands will receive only an exit code as output. This option is intended
|
commands will receive only an exit code as output. This option is intended
|
||||||
for calling qq2clone from a script.
|
for calling qq2clone from a script.
|
||||||
|
|
||||||
\-r, \-\-run
|
\-r, \-\-run
|
||||||
: Run a clone when creating it. Overrides NORUN setting in configuration
|
: Start a clone after creating it. Overrides NORUN setting in configuration
|
||||||
|
|
||||||
\-s, \-\-storage [*LOCATION*]
|
\-s, \-\-storage [*LOCATION*]
|
||||||
: When creating a clone, place new disk image file(s) at location
|
: When creating a clone, place new disk image file(s) at location
|
||||||
|
@ -103,10 +98,9 @@ of a clone. Overrides SPICY setting in configuration
|
||||||
# TYPES OF COMMAND
|
# TYPES OF COMMAND
|
||||||
|
|
||||||
There are two main classes of commands: commands that operate directly on
|
There are two main classes of commands: commands that operate directly on
|
||||||
templates, and commands that create or operate on clones of templates. In
|
templates, and commands that create or operate on clones of templates. To
|
||||||
order to make it less likely that the user may unintentionally invoke a
|
prevent unintended actions, these two command types use slightly
|
||||||
command of one class when they intended to invoke one of the other, they
|
different syntax. Commands that operate on templates use the syntax:
|
||||||
use a different syntax. Commands that operate on templates use the syntax:
|
|
||||||
|
|
||||||
|
|
||||||
**qq2clone** **command** [*template-name*] [*ARG*] ...
|
**qq2clone** **command** [*template-name*] [*ARG*] ...
|
||||||
|
@ -115,14 +109,16 @@ while commands that operate on clones use the syntax:
|
||||||
|
|
||||||
**qq2clone** \-\-template [*template-name*] **command** [*ARG*] ...
|
**qq2clone** \-\-template [*template-name*] **command** [*ARG*] ...
|
||||||
|
|
||||||
Notice that commands operating on clones work within the context of a
|
Commands operating on clones work within the context of a
|
||||||
template defined by the option \-\-template/\-t. Conversely, commands
|
template defined by \-\-template/\-t. Conversely, commands
|
||||||
operating on templates specify the template as an argument to the
|
operating on templates specify the template as an argument to the
|
||||||
command. There can also be a default template defined by the
|
command.
|
||||||
|
|
||||||
|
A default template can be defined by the
|
||||||
TEMPLATE configuration option, allowing the \-\-template
|
TEMPLATE configuration option, allowing the \-\-template
|
||||||
flag to be omitted for commands that operate on clones. Commands
|
flag to be omitted for commands that operate on clones. Commands
|
||||||
operating on templates do not respect this default - the template must
|
operating on templates do not respect this default - the template must
|
||||||
always be explicitly defined, further reducing the likelihood of
|
always be explicitly defined, reducing the likelihood of
|
||||||
accidentally modifying or deleting a template.
|
accidentally modifying or deleting a template.
|
||||||
|
|
||||||
# TEMPLATE COMMMANDS
|
# TEMPLATE COMMMANDS
|
||||||
|
@ -212,9 +208,8 @@ the domain is running forcibly turn it off)
|
||||||
command string in an environment where the following variables are defined
|
command string in an environment where the following variables are defined
|
||||||
per clone: `"$uuid"`, `"$name"`, `"$disks"` (a newline delimited string
|
per clone: `"$uuid"`, `"$name"`, `"$disks"` (a newline delimited string
|
||||||
containing the machine's qcow2 disk device filepaths). This is done using
|
containing the machine's qcow2 disk device filepaths). This is done using
|
||||||
bash's eval command, so be sure to put any instances of these variables in
|
bash's eval command, so contain the command string in single quotes to
|
||||||
single quotes (double quotes inside the single quotes is best practice) or
|
avoid unexpected behavior. If any instance of exec has a non-zero
|
||||||
they will not be set properly. If any instance of exec has a non-zero
|
|
||||||
return value, execution stops.
|
return value, execution stops.
|
||||||
|
|
||||||
**list** [*ARG*]
|
**list** [*ARG*]
|
||||||
|
@ -256,13 +251,12 @@ domains, their state will be restored
|
||||||
# OTHER COMMANDS
|
# OTHER COMMANDS
|
||||||
|
|
||||||
**check** [*TEMPLATE-NAME*]
|
**check** [*TEMPLATE-NAME*]
|
||||||
: As described in the limitations section, there are ways that qq2clone
|
: If a clone is deleted, has its UUID changed or is otherwise unavailable,
|
||||||
can lose track of a clone. If this happens, it will remain in qq2clone's
|
it will remain in qq2clone's database. Its ID number will remain
|
||||||
database, its ID number will remain reserved, and its image files may not
|
reserved, and its image files may not be deleted and take up space doing
|
||||||
be deleted and take up space doing nothing. The **check** command
|
nothing. The **check** command finds and fixes occurences of this problem.
|
||||||
finds and fixes occurences of this problem. The *TEMPLATE-NAME* argument is
|
The *TEMPLATE-NAME* argument is optional, and restricts the check to that
|
||||||
optional, and restricts the check to that template and its clones.
|
template and its clones. Otherwise, all templates are checked
|
||||||
Otherwise, all templates are checked
|
|
||||||
|
|
||||||
**config** list, **config** info [*OPTION*], **config** edit [*OPTION*]
|
**config** list, **config** info [*OPTION*], **config** edit [*OPTION*]
|
||||||
: List all configuration options and their current value, get info about a
|
: List all configuration options and their current value, get info about a
|
||||||
|
@ -401,46 +395,18 @@ backing storage device that you can edit as you please
|
||||||
|
|
||||||
# LIMITATIONS
|
# LIMITATIONS
|
||||||
|
|
||||||
The largest limitation of **qq2clone** is that it cannot protect your
|
Understand what copy on write is. If you modify an image, you will
|
||||||
template images from the actions of other software. If nothing else
|
corrupt images using it as a backing file. If you don't understand what
|
||||||
touches a template's storage volumes, qq2clone can safely handle them
|
that means, use a search engine to research copy on write. To safely modify
|
||||||
(barring unknown bugs or bad luck during a commit-image). However,
|
a template's underlying image, use the prepare-image and commit-image
|
||||||
if something else alters the image upon which a template is based, its
|
subcommands of **qq2clone** modify-template.
|
||||||
existing clones may be corrupted and future clones may behave differently
|
|
||||||
than expected. It is the user's responsibility to understand this aspect
|
|
||||||
of copy on write and carefully manage template images. Future updates to
|
|
||||||
qq2clone may add features that give some additional protections, but this
|
|
||||||
risk is inherent to copy on write.
|
|
||||||
|
|
||||||
Libvirt has permissions errors when a storage pool is in a "hidden"
|
qq2clone uses a virtual machine's UUID as defined in its libvirt XML
|
||||||
directory with a name beginning with "." and qcow2 files with backing files
|
file to track it. Don't change a clone's UUID.
|
||||||
are involved. This may be due to apparmor, or it may be an issue with
|
|
||||||
libvirt. It is unknown how widespread this issue is, but it is the reason
|
|
||||||
that the default directory storage-qq2clone does not start with '.'
|
|
||||||
|
|
||||||
If the UUID of a clone is changed, qq2clone will no longer be able to
|
qq2clone does not support pool types other than directories. If there is
|
||||||
track it and will not be able to perform commands on it anymore. This will
|
another pool type you wish it could use, email me at
|
||||||
be addressed in the future using custom metadata in the libvirt domain
|
jgardner7289@protonmail.com and let me know.
|
||||||
XML. If the user undefines a domain, this will obviously cause it to
|
|
||||||
disappear from qq2clone's perspective when it is turned off, creating a
|
|
||||||
discrepancy in its database. This can be fixed with **qq2clone** **check**.
|
|
||||||
|
|
||||||
qq2clone can only produce clones by making qcow2 image files. The backing
|
|
||||||
file need not be qcow2, but the images produced by qq2clone always will
|
|
||||||
be. This is unlikely to ever change - levaraging the features of qcow2 is
|
|
||||||
the entire purpose of qq2clone. If it does change, qq2clone will need a
|
|
||||||
new name.
|
|
||||||
|
|
||||||
qq2clone does not support creating images in pool types other than
|
|
||||||
directories, and attempting to use a machine as a template when it has
|
|
||||||
storage volumes in a non-directory pool is likely to fail or have
|
|
||||||
unexpected results. Support for some other pool types may be added in the
|
|
||||||
future.
|
|
||||||
|
|
||||||
qq2clone currently cannot copy storage volumes when importing a template
|
|
||||||
(it just references the originals), or when copying a template. This will
|
|
||||||
change in the future, and qq2clone will also be able to handle more complex
|
|
||||||
relationships between templates, clones and their images
|
|
||||||
|
|
||||||
# FILES
|
# FILES
|
||||||
|
|
||||||
|
@ -479,19 +445,9 @@ manually, but it is more advisable to use **qq2clone** **modify-template**
|
||||||
|
|
||||||
# BUGS
|
# BUGS
|
||||||
|
|
||||||
As described in the options section, the implementation of the
|
If you find a bug, please check to see if it already appears in
|
||||||
\-\-quieter/\-Q option needs some work. Its current behavior is the
|
https://git.j-g-web.com/jesse/qq2clone/issues. If not, email me at
|
||||||
easiest functional approach without complicating the options parser, but it
|
jgardner7289@protonmail.com.
|
||||||
will eventually be modified and become better behaved. In addition to the
|
|
||||||
previously described problem, very early error messages will not be
|
|
||||||
suppressed. Most likely, the solution is to implement a better options
|
|
||||||
parser and make it the first thing to run when executing qq2clone. However,
|
|
||||||
the impact of this bug is minimal and other improvements are likely to
|
|
||||||
come before this bug fix.
|
|
||||||
|
|
||||||
If you find any worse bugs, and I'm sure I missed some, please let me know
|
|
||||||
and I will fix them as time allows. Contact me at:
|
|
||||||
jgardner7289@protonmail.com
|
|
||||||
|
|
||||||
# COPYRIGHT 2021, Jesse Gardner
|
# COPYRIGHT 2021, Jesse Gardner
|
||||||
|
|
||||||
|
|
424
qq2clone
424
qq2clone
|
@ -3214,219 +3214,219 @@ return 0
|
||||||
# ENTRY POINT, at the bottom of this file
|
# ENTRY POINT, at the bottom of this file
|
||||||
|
|
||||||
archive='
|
archive='
|
||||||
H4sIAAAAAAAAA+19C5QcV3VgzYw+o7E8kvwB2Ti4EDaewa32jP6yUFDPTI+68fw8H8sKmFZNd810
|
H4sIAAAAAAAAA+19C5QcV3VgzYw+o7E8kvwB2Ti4EDaewa3WjD6WZKGgnpkedeP5eT6SFTCtmu6a
|
||||||
oe6upj4aNYuDQMBmImvXbEjCOZucwB42sEl2MZyQYza7QcaAzVnDsQlLvAdyEAbOjiMWBLFsGUue
|
6ULdXU19NGoWB4GAzUTWrtmQhHM2OYE9bGCT7GI4IcdsdoOMAZuzhmMTlngP5CAMnB1HLAhi2TL+
|
||||||
vfe++6peVXfJZhd2N3umEuv1u+9333333XvfffcNI/nB7NhUVvt1fn3w7dqxA9P+3Tv71BS+Hf27
|
zN57331Vr6q7JLMLu5s9U4n1+t33u+++++697777hpH8YHZsKqv9Or8++O7YuRPT/t27+tQUvp39
|
||||||
dm/T+ndAlW27d+/csVvr6+/v39av6X2/Vqz4813PcHRde5fpuuYV6r1S+T/R7+DYjH4wO5adzIzo
|
d+zervXvhCrbd+/etXO31tff37+9X9P7fq1Y8ee7nuHouvYu03XNy9S7Uvk/0e/g2Ix+MDuWncyM
|
||||||
EzMDI/lBfUSwRNc9puNadk3fltLf5tdMvX/v3v6urkG73nCs+bKn9wz2AmzP3hSV6MOOaepT9py3
|
6BMzAyP5QX1EsETXIdNxLbumb0/pb/Nrpt6/d29/V9egXW841nzZ03sGewG2Z2+KSvRhxzT1KXvO
|
||||||
YDimPmz7tZLhQfuUnq8V0107sYZRO1qxavqUB3W9lD5szXllfbhi205KH7BdD2uPZnS9b1t/f9/W
|
WzAcUx+2/VrJ8KB9Ss/XiumuXVjDqB2rWDV9yoO6Xkoftua8sj5csW0npQ/Yroe1RzO63re9v79v
|
||||||
/u19/Sl9ZirT1ZU9ZjoNG5CwXL1uOlXL88yS7tl6EdDRjVpJL1mu51izvmfqUHcWhq5ioWW6uj2n
|
a/+Ovv6UPjOV6erKHjedhg1IWK5eN52q5XlmSfdsvQjo6EatpJcs13OsWd8zdag7C0NXsdAyXd2e
|
||||||
e2VoWLGKZs019ZJd9KtmDRCA6nqxbNTmrdq8bnnYe832dKNSsRfMUrqra8Ixjepsxezqmi6bsgNX
|
070yNKxYRbPmmnrJLvpVswYIQHW9WDZq81ZtXrc87L1me7pRqdgLZind1TXhmEZ1tmJ2dU2XTdmB
|
||||||
n7MdvQr46q6cL/5XMl1rvibw8oyjAFwwGnrD9h19DiZcsqtY4papPqBMI8OUvLQ+0ABka55juICV
|
q8/Zjl4FfHVXzhf/K5muNV8TeHnGMQAuGA29YfuOPgcTLtlVLHHLVB9QppFhSl5aH2gAsjXPMVzA
|
||||||
B0PRupg10zEq+oQ/CyPrI4w+IGnVPLNWEiPN+wbQ1QPiv+JIWBagvHUrVKkimq4P1XDQYDYwBNXF
|
yoOhaF3MmukYFX3Cn4WR9RFGH5C0ap5ZK4mR5n0D6OoB8a84EpYFKG/dClWqiKbrQzUcNJgNDEF1
|
||||||
eQIxAEVX913gh7Q+jZRMwMyo1ytIcOwYqUOENxM54zZXoV+NJmPUGroNbRy97tjzjlHVF8o29ux7
|
cZ5ADEDR1X0X+CGtTyMlEzAz6vUKEhw7RuoQ4c1EzrjNVehXo8kYtYZuQxtHrzv2vGNU9YWyjT37
|
||||||
ZdtxgUhVWHus6btizdJ6z5RdNblV0lCRqRVt4BAg3mwjIPUI7m4nkeI11zONUrpXP2z7etGo0Uwb
|
Xtl2XCBSFdYea/quWLO03jNlV01ulTRUZGpFGzgEiDfbCEg9grvbSaR4zfVMo5Tu1Y/Yvl40ajTT
|
||||||
usCEyM7ourB6tg2Mc6hs1vQFIGndNI4iISK0T2ERYuOYc6bj4EygI166FPFg3YHB0/q4n4SV28Rz
|
hi4wIbIzui6snm0D4xwumzV9AUhaN41jSIgI7VNYhNg45pzpODgT6IiXLkU8WHdg8LQ+7idh5Tbx
|
||||||
6mIaHuKll41jYmkVtlB2SrhBIujpPcw0zrzgAdo+QKBjMLRuzVHXC5Zb7k2FQzlm0bSOYSe+U8Su
|
nLqYhod46WXjuFhahS2UnRJukAh6eg8zjTMveIC2DxDoOAytW3PU9YLllntT4VCOWTSt49iJ7xSx
|
||||||
S7AoDlFr3vRod3FD4FbIKk2xDrNohA2hOXCdDjgWBZbYSU2vmQsCX0n0fYJ9ZHdHa/ZC0G/Jxj5d
|
6xIsikPUmjc92l3cELgVskpTrMMsGmFDaA5cpwOORYEldlLTa+aCwFcSfZ9gH9ndsZq9EPRbsrFP
|
||||||
7BnI7MLSTNvY0DOLnlg6kmYuLUnNVCjpmEinIrKPKzoHUsxaJWRSFEVISrNGG5yHED0h2sjK7lFR
|
F3sGMruwNNM2NvTMoieWjqSZS0tSMxVKOibSqYjs44rOgRSzVgmZFEURktKs0QbnIURPiDaysntM
|
||||||
ZOOaOLhfHZqeqIU7idpERoGd7FYMjzovmo5nwHShRh0KrVmrYnkWSx/smenZcj1VOqYQI65ctUvW
|
FNm4Jg7uV4emJ2rhTqI2kVFgJ7sVw6POi6bjGTBdqFGHQmvWqliexdIHe2Z6tlxPlY4pxIgrV+2S
|
||||||
HHIuEGIYwOZxo1qvQJUrdeb6xbJuSHIDpcom7TbIeRbNlwSFPmdCRzQKaFV93mLeA86woKsakAaF
|
NYecC4QYBrB5wqjWK1Dlcp25frGsG5LcQKmySbsNcp5F8yVBoc+Z0BGNAlpVn7eY94AzLOiqBqRB
|
||||||
SUiDKJ+maXdR0xgnQ4sGbaxUwGUKZ4mpBkyX1jPADAEWbhmYAapUJRuA9kC5Q50KVoFflmQD3Lpm
|
YRLSIMqnadpd1DTGydCiQRsrFXCZwlliqgHTpfUMMEOAhVsGZoAqVckGoD1Q7lCnglXglyXZALeu
|
||||||
K/4Afgdd5S3Aanpm3b1T7+nvJe0jlGGU3siOPdt6gXawvZlBFAW0ULaAoEgflwor5jxsb9JrLqlc
|
2Yo/gN9BV3kLsJqeWXfv1Hv6e0n7CGUYpTeyY8/2XqAdbG9mEEUBLZQtICjSx6XCijkP25v0mksq
|
||||||
VmwpdTmgzztI7dACquMBzpmKC8TBVTANXCsSlyBfeSLYJ+IE0xGMTntQMrpkNKK1KTWtjwwLxlGt
|
lxVbSl0O6HMbqR1aQHU8wDlTcYE4uAqmgWtF4hLkK08E+0ScYDqC0WkPSkaXjEa0NqWm9ZFhwTiq
|
||||||
5AarIORnzYb2DiqdRigdIgIkreejLIjNCHNLyF0XRDYOYlZcIfvrBghgQLAWoodKR2EdwJZXC3BZ
|
ldxgFYT8rNnQ3kGl0wilQ0SApPV8lAWxGWFuCbnrgsjGQcyKK2R/3QABDAjWQvRQ6SisA9jyagEu
|
||||||
kGwhJBzrbRzRhvWwakYlJdYYqqFOATqAFq+S5nTskl8UaJDSwKUFtsQOQBxXcN1xCZS+pPq5DSrU
|
C5IthIRjvY0j2rAeVs2opMQaQzXUKUAH0OJV0pyOXfKLAg1SGri0wJbYAYjjCq47LoHSl1Q/t0GF
|
||||||
fY80CnLKMBZWGikaQpVIiJBXBtsB1DSMBKodCemByqC5M03qWIySADgOpSlJjWO2VaLBSygPHTEF
|
uu+RRkFOGcbCSiNFQ6gSCRHyymA7gJqGkUC1IyE9UBk0d6ZJHYtREgDHoTQlqXHctko0eAnloSOm
|
||||||
0FaSEVALwpY0ouPRDKxayTpmlXzESbdnaU3FGIHlkkL5aQJXFmmTkeIph91ACnrHBIu4AfIJ5SSw
|
ANpKMgJqQdiSRnQ8moFVK1nHrZKPOOn2LK2pGCOwXFIoP03gyiJtMlI85bAbSEHvmGARN0A+oZwE
|
||||||
A3IKrDAtDFG7apTQatGLFdNwFBqLoWjXzQbGUklwJXPVbcwoKNYBjDQP6hlkeKWFqVXHlQ+2K6kj
|
dkBOgRWmhSFqV40SWi16sWIajkJjMRTtutnAWCoJrmSuuo0ZBcU6gJHmQT2DDK+0MLXquPLBdiV1
|
||||||
G6YnxCT2iPsD0Fe2iGRywWdFoffnbLTlsNPs5OiUnhkb0gfHx4by0/nxsSl9eHwSshOH82MHU/pQ
|
ZMP0hJjEHnF/APrKFpFMLvisKPT+nI22HHaanRyd0jNjQ/rg+NhQfjo/PjalD49PQnbiSH7sYEof
|
||||||
fmp6Mj8wg0VUcXR8KD+cH8wgoKurj22fFsYOcxiREFATpsiC7RzlnY6mHSwGzANnjDq0XjGKoQUS
|
yk9NT+YHZrCIKo6OD+WH84MZBHR19bHt08LYYQ4jEgJqwhRZsJ1jvNPRtIPFgHngjFGH1itGMbRA
|
||||||
ipGyXUE14RoNtkirYEECMUM5UBIbk9oJ4kjztrWZQHpG3zIh0NsCNq8JBEkJyyPAniS8MgVEXogx
|
QjFStiuoJlyjwRZpFSxIIGYoB0piY1I7QRxp3rY2E0jP6FsmBHpbwOY1gSApYXkE2JOEV6aAyAsx
|
||||||
Q99CM5k1xP6kgWVvetUEhaWbFs1YKcE+sF/A1DoGKwFcQ70I3MP5VoyFOwUHWYQLTByGFXWZapJH
|
ZuhbaCazhtifNLDsTa+aoLB006IZKyXYB/YLmFrHYSWAa6gXgXs434qxcKfgIItwgYnDsKIuU03y
|
||||||
1Z71uu3Q8pJNkJIIBIY/zgDFtcoKrpSggZItoTTA+YsFq8CG8415oFhPDiQd7O05IHAqqI/jke1d
|
qNqzXrcdWl6yCVISgcDwxxmguFZZwZUSNFCyJZQGOH+xYBXYcL4xDxTryYGkg709BwROBfVxPLK9
|
||||||
rPhoe+MIto8MDCYpF9eCddG3qINvAdsxi5KZuZ1EllEqOSaJPcPVt4Ai2IKSHKT1MaHnbaYqWkev
|
ixUfbW8cwfaRgcEk5eJasC76FnXwLWA7ZlEyM7eTyDJKJccksWe4+hZQBFtQkoO0Pi70vM1URevo
|
||||||
jttRquCeili4Ic/uEyKTTCvfcy3axqAMoXfmE6NIVrvj15rozjJW2itmKcVWF3UGYhF2tl2NN5GY
|
1XE7ShXcUxELN+TZfUJkkmnle65F2xiUIfTOfGIUyWp3/FoT3VnGSnvFLKXY6qLOQCzCzrar8SYS
|
||||||
2DW0l+doPFxYEukkFy2PtJueyGV6Dwg2s44GVI2wAyGEyM2aYGKTLIJptsC4FwQrGyoBhzk+mszY
|
E7uG9vIcjYcLSyKd5KLlkXbTE7lM7wHBZtbRgKoRdiCEELlZE0xskkUwzRYY94JgZUMl4DDHR5MZ
|
||||||
l4ujSDUSDFWyTRTs/WyLGI1Xf8AMOqFjTWgDG27EPEZ2tWq0Oaog1X0wp2Dfgdg2FQsWCVO3ir7t
|
+3JxFKlGgqFKtomCvZ9tEaPx6g+YQSd0rAltYMONmMfIrlaNNkcVpLoP5hTsOxDbpmLBImHqVtG3
|
||||||
uxUxOkgbks3AtgCp4xYHhQFTIH3PSKq1lE3GMocnUawYVhVoAkhLLb5PP2qaddwNuP7SRhPNXKmB
|
fbciRgdpQ7IZ2BYgddzioDBgCqTvGUm1lrLJWObwJIoVw6oCTQBpqcX36cdMs467Addf2miimSs1
|
||||||
0JLBg21EBopTG9Y2Zl2zBqOgboK5hV1jHTIFw7OdotWjpAM2oKlIkRaMU7FhbYUFFtaGhQpWSZxV
|
EFoyeLCNyEBxasPaxqxr1mAU1E0wt7BrrEOmYHi2U7R6lHTABjQVKdKCcSo2rK2wwMLasFDBKomz
|
||||||
yARlmwSEbLnhws6oSK6mjSzPWwZbWIY0FqEXgy0+u87CBeccmDqKLYVK9Lg8VEvTF9DZFvIN22nU
|
CpmgbJOAkC03XNgZFcnVtJHlectgC8uQxiL0YrDFZ9dZuOCcA1NHsaVQiZ6Qh2pp+gI620O+YTuN
|
||||||
n5iT05pdpKiMiTSv7JOiqwpkE3dHipVjM5eSTI9KQJbsrVTIFE+tH1YS9mwrrjTAyASmNQWLiFm4
|
+hNzclqzixSVMZHmlX1SdFWBbOLuSLFybOZSkulRCciSvZUKmeKp9cNKwp5txZUGGJnAtKZgETEL
|
||||||
pqKY7+zq0vEzekNTvmj4rjgGBPbfnFURerMIpCW6wiRxb0uOc1Gc0maW+4FILYSNaC1FTwlZnXlO
|
11QU851dXTp+Rm9oyhcN3xXHgMD+m7MqQm8WgbREV5gk7m3JcS6KU9rMcj8QqYWwEa2l6CkhqzPP
|
||||||
1EozErNNSBBf4vSDfhVqAWl4V/HB1ELxYFeohAwpxwsVOcJcod1wQnHBJ5cU25DZbM/h+SViFhlo
|
iVppRmK2CQniS5x+0K9CLSAN7yo+mFooHuwKlZAh5XihIkeYK7QbTigu+OSSYhsym+05PL9EzCID
|
||||||
DogRDJy65GHUSLQDLadEPSDLJOl8qeR5zsVeaXgHxJZKvQasRIYhWKUl4Ugh0x5dSY6BSgcFywK6
|
zQExgoFTlzyMGol2oOWUqAdkmSSdL5U8z7nYKw3vgNhSqdeAlcgwBKu0JBwpZNqjK8kxUOmgYFlA
|
||||||
LUCWKsc4QTtkSSpEdymqTilwkf2J05SOyLxjXSgcQU4J1KmDYoEOcujdQFnu4AqALSSEV61m+yBC
|
twXIUuUYJ2iHLEmF6C5F1SkFLrI/cZrSEZl3rAuFI8gpgTp1UCzQQQ69GyjLHVwBsIWE8KrVbB9E
|
||||||
0DXHWpZ4/1WItcCuSj6o9KAVCqeNlDSuAiZgRsfV4Mq9oT+BvF60oRUb3IwYzcHaRPYCa0ezUpFq
|
CLrmWMsS778KsRbYVckHlR60QuG0kZLGVcAEzOi4Gly5N/QnkNeLNrRig5sRozlYm8heYO1oVipS
|
||||||
CbvS6TRq68cscyFB2IH5kT1eNEkE3YkqM6JRPdeszEkXoCQ3ujFRc5GCDhZa0Fic3aPUTQmxlKxx
|
LWFXOp1Gbf24ZS4kCDswP7IniiaJoDtRZUY0quealTnpApTkRjcmai5S0MFCCxqLs3uUuikhlpI1
|
||||||
A13/bt9yhEtE9BbrKN1L1jq5MahqVZzyyTvGiiHgRBou5Ho6I1qo06HYgNOZ7prsBiGK4CmPWrBN
|
bqDr3+1bjnCJiN5iHaV7yVonNwZVrYpTPnnHWDEEnEjDhVxPZ0QLdToUG3A6012T3SBEETzlUQu2
|
||||||
k7TZWAACZrOIhuHaNeiN/Klo4Thk5oX2A1Z2TdhXyEw4gMucWgXKHsMTkodsrq6IGAEtF9p8KfQp
|
aZI2GwtAwGwW0TBcuwa9kT8VLRyHzLzQfsDKrgn7CpkJB3CZU6tA2eN4QvKQzdUVESOg5UKbL4U+
|
||||||
kZs4nCb6KAP0aZ/ExAt5IAw3NnRaH/C9pPrAqFWlV2hM8oQOf0JuiNOF5V5ZP5CYVM1G1j+iD3lc
|
JXITh9NEH2WAPu2TmHghD4ThxoZO6wO+l1QfGLWq9AqNSZ7Q4U/IDXG6sNzL6wcSk6rZyPpH9CGP
|
||||||
s2vJ4iXFXtjQQyHOYGw3s0kL54Dj6JaWC48r6/Aw0lb0Se4LHwUA6FgopuWY84ZTAtFOo0MjfQH1
|
a3YtWbyk2AsbeijEGYztZjZp4RxwAt3ScuFxZR0eRtqKPsl94aMAAB0LxbQcc95wSiDaaXRopC+g
|
||||||
rfBUTUPDlOKgx+7JB+4FqDKdSK2ghaM448jedKPeHKgmDmgOXiXUGFlxQId6+3RYpDJZ/+FQ4ohi
|
vhWeqmlomFIc9Ng9+cC9AFWmE6kVtHAUZxzZm27UmwPVxAHNwauEGiMrDuhQb58Oi1Qm6z8cShxR
|
||||||
HjcdcTSVfizhrkHHQqUlsZVDEGFTQR+DPBK5LVcN5pyv4QHBElcoVZRoxvw8Ukl2K88tNA+kSsut
|
zBOmI46m0o8l3DXoWKi0JLZyCCJsKuhjkEcit+WqwZzzNTwgWOIKpYoSzZifRyrJbuW5heaBVGm5
|
||||||
HDeaSBAS8ApM04t5Qz9mV/yqUK8g920HDkcss8P5CSM2FD+zjpR3Cnah+qKzRgv1tf3KFnd8AnHc
|
leNGEwlCAl6GaXoxb+jH7YpfFeoV5L7twOGIZXY4P2HEhuJn1pHyTsEuVF901mihvnZc3uKOTyCO
|
||||||
UT2JQaQds60X97U9+y50dUhnNKxd0fdI2KBpdQU7yEVDCHDYJsyhJGsIJAG6sXhHCWcDzF8xhDJF
|
O6onMYi0Y7b34r62Z9+Frg7pjIa1K/oeCRs0rS5jB7loCAEO24U5lGQNgSRANxbvKOFsgPkrhlCm
|
||||||
ULV1tAaAfYPFQFjFJHXmCP8u6boqbAwwhbaijhYiMTxIpHi7yw37Ci6BhHnQuvKaFaEnu2o4FrC9
|
CKq2jtYAsG+wGAirmKTOHOHfJV1XhY0BptBW1NFCJIYHiRRvd7lhr+ASSJgHrSuvWRF6squGYwHb
|
||||||
Lz01occOFYwwqfYB7VKhWdU8JSPYR2Qzp/RjRsUS/QG1KiCUPfKHmXrDNBy6JAnPBKGl00ixNc2m
|
+9JTE3rsUMEIk2of0C4VmlXNUzKCfUQ2c0o/blQs0R9QqwJC2SN/mKk3TMOhS5LwTBBaOo0UW9Ns
|
||||||
UA3vkYQTuCYtaXGtJE17VHOmI81kppbKnynSskzsJvKG+je+EhHCC8vt/xLBi0k8ZNVw3kIcKCdM
|
CtXwHkk4gWvSkhbXStK0RzVnOtJMZmqp/JkiLcvEbiJvqH/jKxEhvLDc/i8RvJjEQ1YN5y3EgXLC
|
||||||
sixZBIsTTPzOJ2GeYHiQg8uoAB41Ia8oS5eh4gQ/R067GlqPKAXhbNXkkJAn/QhKqr30ytuSpigN
|
JMuSRbA4wcTvfBLmCYYHObiMCuBRE/KKsnQZKk7wc+S0q6H1iFIQzlZNDgl50o+gpNpLV96WNEVp
|
||||||
F+YoPDMDGRzhd9Gn/Fkp8WcFpdkWiZy950JRITxVAg+6dBPkrwbaECvRva5wi0YPTkBCvGocJsNe
|
uDBH4ZkZyOAIv4s+5c9KiT8rKM22SOTsPReKCuGpEnjQpZsgfzXQhliJ7nWFWzR6cAIS4lXjMBn2
|
||||||
xVc4ygIOUwcXI8rTdBNaAIcxfDzMWOHJAs5dFd+lfWG4rl20pJ8KuNxA3jbnrJolXJt4EOL6QrQ6
|
Kr7CURZwmDq4GFGeppvQAjiM4eNhxgpPFnDuqvgu7QvDde2iJf1UwOUG8rY5Z9Us4drEgxDXF6LV
|
||||||
Vl1c1JZUlYTIWey/IkMGndGViqHaAuGM0noOlvsYkpxsNbdu0jqb0iZNNU1H3Rh0g4Z6gN1kOBO6
|
seriorakqiREzmL/FRky6IyuVAzVFghnlNZzsNzHkeRkq7l1k9bZlDZpqmk66sagGzTUA+wmw5nQ
|
||||||
eQt8MIF9qjbrwRO1cOJxz0CiWXFmwFXqDdm+aryLtGgVWJiszR4xQcT4KDCuWRHGhouiuVdOELSO
|
zVvggwnsU7VZD56ohROPewYSzYozA65Sb8j2VeNdpEWrwMJkbfaICSLGx4BxzYowNlwUzb1ygqB1
|
||||||
Iw6VbsP1wBYj7w/K0+j08Vzjoi4hS4RwDoaS1rfB25G8v1Higdqea9L/Su9oNCm8j7ci7MAiNqfz
|
HHGodBuuB7YYeX9Qnkanj+caF3UJWSKEczCUtL4N3o7k/Y0SD9T2XJP+V3pHo0nhfbwVYQcWsTmd
|
||||||
TrFIQ3NsA5m7Bt/zEjOQ75jN1KAVmt8gdMnCjXbQxHzSfibzkjqDAp/sdreloRiRhXghgAavP1+O
|
d4pFGppjG8jcNfiel5iBfMdspgat0PwGoUsWbrSDJuaT9jOZl9QZFPhkt7stDcWILMQLATR4/fly
|
||||||
nVFD52O1DsceJT5D6STmyVGIAbTbERoBoiN00AhHChzbyK0tzFHVCIkaB4JNcSbm8Tp6V+kgxLpb
|
7IwaOh+rdTj2KPEZSicxT45CDKDdztAIEB2hg0Y4UuDYRm5tYY6qRkjUOBBsijMxT9TRu0oHIdbd
|
||||||
Sm31sJXBnQaqqwqtyGJZINvOThz9CoNDv3h9I/iPrmQMHwW+x6oKdYWFixgxRVthFexBSVw0iOny
|
Umqrh60M7jRQXVVoRRbLAtl2duLolxkc+sXrG8F/dCVj+CjwPVZVqCssXMSIKdoKq2APSuKiQUyX
|
||||||
JRCpwplEtJA32LS0KHebuwzvuGRIgOWE8SwBYrRtaInwrEKXAowAnO3wPgn+f86vCKFSsQw4B8K6
|
L4FIFc4kooW8waalRbnb3GV4xyVDAiwnjGcJEKNtQ0uEZxW6FGAE4GyH90nw/3N+RQiVimXAORDW
|
||||||
7RTrJhlAPTYiM9a92GnCtdBTGMQnYBuOYkAhG8wd7VvibbwknMeTuXClRi9K2dGWvCroq/Hc+FVE
|
bZdYN8kA6rERmbHuxU4TroWewiA+AdtwFAMK2WDuaN8Sb+Ml4TyezIUrNXpRyo625FVBX43nxq8i
|
||||||
cAFvyPOVQyqqbM1annCdV4yF4FqcT3zNs6FuQKPYeO87K/1+iHbEUo4503vYQ5RsgQsPDF7pFQOG
|
ggt4Q56vHFJRZWvW8oTrvGIsBNfifOJrng11AxrFxnvfWen3Q7QjlnLMmd7DHqJkC1x4YPBKrxgw
|
||||||
EcMb7GaNLK9HtiheApM/hGN2fpnbM4FxiH6MhLGzCh3LdqXFpYZnVU3W91ey2V9hvp4aKhDbOcz1
|
jBjeYDdrZHk9skXxEpj8IRyz88vcngmMQ/RjJIydVehYdkdaXGp4VtVkfX85m/0K8/XUUIHYzmGu
|
||||||
qJDkNgzkWHBLK0pE9EXT9Xn06lziBduaBJAXRIm0oFhUKlmgDdiZOOc77M9WYjh4XqGP+7bwyMgC
|
R4Ukt2Egx4JbWlEioi+ars+jV+cSL9jWJIC8IEqkBcWiUskCbcDOxDnfYX+2EsPB8wp93LeFR0YW
|
||||||
lTc+sTRQoky3TfE9xEEfwiaC8yn8W8R1CXceX+8oIjjmn4cl2o1uFlbl6BGBrRm46VHsw8n7XX5p
|
qLzxiaWBEmW6bYrvIQ76EDYRnE/h3yKuS7jz+HpHEcEx/zws0W50s7AqR48IbM3ATY9iH07e7/JL
|
||||||
nnxuwipRTph8owuGJuoYU1aa48WUznx0ueg94i63anFgnmzrur7p9qZUBiRjl6hIXICM0yNDSmYb
|
8+RzE1aJcsLkG10wNFHHmLLSHC+mdOajy0XvEXe5VYsD82Rb1/VNtzelMiAZu0RF4gJknB4ZUjLb
|
||||||
jBVYemSDwJE3GDiQz71SM2PIHOwQjy34YIgmBwZdfPEuBh2BDkocN2Ci5Lbkp+JoIvJDKR52m21t
|
YKzA0iMbBI68wcCBfO6VmhlD5mCHeGzBB0M0OTDo4ot3MegIdFDiuAETJbclPxVHE5EfSvGw22xr
|
||||||
F+NggLVcq+pXYIOa4uJGXCaA4phnM7KFXKbtGka9mbCQZGsozVjXN61hQ+HKhH3Hd+p6PNTHiAUG
|
uxgHA6zlWlW/AhvUFBc34jIBFMc8m5Et5DJt1zDqzYSFJFtDaca6vmkNGwpXJuw7vlPX46E+Riww
|
||||||
wMb0K8JwE+GVumM34CDQ2ErX9cq+VuwCOQismbBybYptsYO7Lr7vKIEyKGLwA3nSgxwcCMmKgGkE
|
ADamXxGGmwiv1B27AQeBxla6rlf2tWIXyEFgzYSVa1Nsix3cdfF9RwmUQRGDH8iTHuTgQEhWBEwj
|
||||||
TjdTHB84bhJZAbCS1J0FGqGtLFxJqm6jarMkBUEUO6ioAocOLfEV0Bc2W+wGJuJSgp9ls4KGszjW
|
cLqZ4vjAcZPICoCVpO4s0AhtZeFKUnUbVZslKQii2EFFFTh0aIkvg76w2WI3MBGXEvwsmxU0nMWx
|
||||||
YlhaTWxIk6w6sazS428V/YoBItZyin7VJXEthNusUQllt6l2r8ZzCq+ivN+QlZTbgpb18VBFHKQO
|
FsPSamJDmmTViWWVHn+r6FcMELGWU/SrLolrIdxmjUoou021ezWeU3gV5f2GrKTcFrSsj4cq4iB1
|
||||||
i1eZ+YjTrO47JL1aeM1gZXxmKsqJPa9EdrhhbAO644FTG+z/IoebjHuT3jaileU15O0MWROi5r7o
|
WLzKzEecZnXfIenVwmsGK+MzU1FO7HklssMNYxvQHQ+c2mD/FzncZNyb9LYRrSyvIW9nyJoQNfdF
|
||||||
4GWDDzA4OwVDeeHGyggnPe9wj145Fs4aXWJh5KdCD6mFrI9yRKj2uoiRkNxfJ086EkwfpQmbNlRX
|
By8bfIDB2SkYygs3VkY46XmHe/TKsXDW6BILIz8VekgtZH2UI0K110WMhOT+OnnSkWD6KE3YtKG6
|
||||||
ol3mMbYCNrUQOTxKcMxewOsDh24DMVquCSM6ADtsMsOW5CMIxfaxKLdrwmHt0q6k2JKickILGu1j
|
Eu0yj7EVsKmFyOFRgmP2Al4fOHQbiNFyTRjRAdhhkxm2JB9BKLaPRbldEw5rl3YlxZYUlRNa0Ggf
|
||||||
L6hfDy5eKTbpjpJdE/QvgeIpUZQm6UbdLRPLoP3HcaYRCca4SvxCUcRIiuuVIGyBhSArQSGFy7ZF
|
e0H9enDxSrFJ20p2TdC/BIqnRFGapBt1t0wsg/Yfx5lGJBjjKvELRREjKa5XgrAFFoKsBIUULtsW
|
||||||
ZuB0bNOoXEqBZogojoLeeYodWuAz4SyQwTwmas6azapKKFTXa5LNXV17glizuCfiDg4fjUkry1Vi
|
mYHTsU2jcikFmiGiOAp65yl2aIHPhLNABvO4qDlrNqsqoVBdr0k2d3XtCWLN4p6IbRw+GpNWlqvE
|
||||||
GHANZPgbHYIcFFh8Ep2NcP5sI7x7Uo/kQjyHVkhTMA9KRDpmuRE8WugCuoMulYSLATkA1nrexOr1
|
MOAayPA3OgQ5KLD4JDob4fzZRnj3pB7JhXgOrZCmYB6UiHTMciN4tNAFdAddKgkXA3IArPW8idXr
|
||||||
Ml1kR6aoxJ2ARuPbMiGEg6mEUXCRppEoeuGwqZH6r9pkYUhCCLHhuzyAWQJi13gnG0KtKuiDVW/D
|
ZbrIjkxRiTsBjca3ZUIIB1MJo+AiTSNR9MJhUyP1X7XJwpCEEGLDd3kAswTErvFONoRaVdAHq96G
|
||||||
5sXrDTFVBUPY4sCR0kvId4Ozdqn5+qura6+IRUmM5UYyyQgIxzxm0W2qWG8MDT4m3i0E9+wJQd1C
|
zYvXG2KqCoawxYEjpZeQ7wZn7VLz9VdX114Ri5IYy41kkhEQjnncottUsd4YGnxcvFsI7tkTgrqF
|
||||||
9aPlihsJ0rQ+hROLdEGnJuBIUOwWCnVA3K1bjiUtRnQmubhjuYV4UoAIgqmJvjdoUDKBvSokqkXA
|
6kfLFTcSpGl9CicW6YJOTcCRoNgtFOqAuFu3HEtajOhMcnHHcgvxpAARBFMTfW/QoGQCe1VIVIuA
|
||||||
Dw0RRCSKCwpgQgopJHuaO8NlQi8pehBx+WB9fZgzLrOsUfOrs6YTbIHArEWnzRwdymNVmw4OQkIq
|
HxoiiEgUFxTAhBRSSPY0d4bLhF5S9CDi8sH6+jBnXGZZo+ZXZ00n2AKBWYtOmzk6lMeqNh0chIRU
|
||||||
wWysYLegJMAoKUf2sCUVDSkPoiRCv7fiEY0dOnhLSWEmkbIdqR4iQ8nlDUPkkpihaerBRYSgQeMV
|
gtlYwW5BSYBRUo7sYUsqGlIeREmEfm/FIxo7dPCWksJMImU7Uj1EhpLLG4bIJTFD09SDiwhBg8YV
|
||||||
KZAK7CgQZNKyl03wIPpLINPV1d8X2IsypFPZFmQfNAWAUBSaELqRsHa+dYvs3JgZLbiMrnRxb5lR
|
KZAK7CgQZNKyl03wIPpLINPV1d8X2IsypFPZFmQfNAWAUBSaELqRsHa+dYvs3JgZLbiMrnRxb5lR
|
||||||
pSDD0NFgDw/NwhoMJH+gIlXp9goTjY2WVG0fvYCwqyZuL1fogMCP6Aaxw+KVA+otorncc8DspRAV
|
pSDD0NFgDw/NwhoMJH+gIlXpdoWJxkZLqraPXkDYVRO3lyt0QOBHdIPYYfHKAfUW0VzuOWD2UogK
|
||||||
jLyet42KKywDk14jMMcJQwAkjS9iY6F9eNonkHwZE31wImyMqh2YGPhiRsQclECysPIImswLQVJp
|
Rl7P20bFFZaBSa8RmOOEIQCSxhexsdA+PO0TSL6MiT44ETZG1Q5MDHwxI2IOSiBZWHkETeaFIKk0
|
||||||
wDqPjeuHMpOTmbHpw7Do/Wl9IDuYmZnK6tO5rD4xOX5wMjOq56fkY6ohfXgym9XHh/XBXGbyYDaF
|
YJ3HxvXDmcnJzNj0EVj0/rQ+kB3MzExl9elcVp+YHD84mRnV81PyMdWQPjyZzerjw/pgLjN5MJvC
|
||||||
9SazWEPpieJRlQ6g1jjls/dOZ8em9Yns5Gh+ehp6GzisZyYmoPPMwEhWH8kcgpP4vYPZiWn9UC47
|
epNZrKH0RPGoSgdQa5zy2Xums2PT+kR2cjQ/PQ29DRzRMxMT0HlmYCSrj2QOw0n8nsHsxLR+OJcd
|
||||||
po9j74fygM7UdAbr58f0Q5P56fzYQeoPY14n8wdz03pufGQoO0mBsXfA4NRQn8hMTuezU4jGPfmh
|
08ex98N5QGdqOoP182P64cn8dH7sIPWHMa+T+YO5aT03PjKUnaTA2G0wODXUJzKT0/nsFKJxKD8U
|
||||||
6Jy2ZKYA6y36ofx0bnxmOsQd5pYZO6zflR8bSunZPHWUvXdiMjuF04e+86OAcBYK82ODIzNDFHM7
|
ndOWzBRgvUU/nJ/Ojc9Mh7jD3DJjR/S78mNDKT2bp46y90xMZqdw+tB3fhQQzkJhfmxwZGaIYm4H
|
||||||
AD2MjU8DmWBiUG16nCgj68reERnofzQ7CeQbm84M5EfyMCQG6Q7np8dgCCJdRmA+ODOSgUnMTE6M
|
oIex8WkgE0wMqk2PE2VkXdk7IgP9j2YngXxj05mB/EgehsQg3eH89BgMQaTLCMwHZ0YyMImZyYnx
|
||||||
T2XTgoDQB5B7Mj91lw4TYLLePZMJ+gHaQhejmbFBWqbYMuJs9cPjM6AjYNYjQ5FyJFNWH8oOZwen
|
qWxaEBD6AHJP5qfu0mECTNa7ZzJBP0Bb6GI0MzZIyxRbRpytfmR8BnQEzHpkKFKOZMrqQ9nh7OB0
|
||||||
8/fA2kJFGGVqZjTL1J6aJvKMjOhj2UHANjN5WJ/KTt6THyQqTGYnMvlJnYKRJyexl/ExlCXb0rhw
|
/hCsLVSEUaZmRrNM7alpIs/IiD6WHQRsM5NH9Kns5KH8IFFhMjuRyU/qFIw8OYm9jI+hLNmexoUD
|
||||||
wCDZe3D5Z8ZGcKaT2btnYDItmAB7yBwERkNCqmt+KA9D4+rEFz5FTaAgXPjDwELj+mjmsIh/PixZ
|
BskewuWfGRvBmU5m756BybRgAuwhcxAYDQmprvnhPAyNqxNf+BQ1gYJw4Y8AC43ro5kjIv75iGQN
|
||||||
A0aUAdJRjgB6hoyZGRhHCgwAPnlCCxBBcuDyDGVGMwezUwoD0ND8/DClT01kB/P4A8qB7WCdRwRN
|
GFEGSEc5AugZMmZmYBwpMAD45AktQATJgcszlBnNHMxOKQxAQ/Pzw5Q+NZEdzOMPKAe2g3UeETSB
|
||||||
YAPdPYNLCADuRM/AWmIPyIO8Xrj9kM/GJH/A2PEt2ROO3cx7+sj4FDHaUGY6oxPGkA5ksfZkdgzo
|
DXT3DC4hALgTPQNriT0gD/J64fZDPhuT/AFjx7dkTzh2M+/pI+NTxGhDmemMThhDOpDF2pPZMaAX
|
||||||
RVspMzg4MwnbCmtgC8BmagY2Wn5MLArOlzZyfnIo2EvEnsOZ/MjMZBODwcjjQELskhhNWRBRY6o3
|
baXM4ODMJGwrrIEtAJupGdho+TGxKDhf2sj5yaFgLxF7DmfyIzOTTQwGI48DCbFLYjRlQUSNqd4U
|
||||||
RTyg54dhqMEcr54e2bGH9RwsxUAWqmWG7snTruNxAMk802Sce2A6oskxJiq2CJDv6sqJeKUMHTKF
|
8YCeH4ahBnO8enpkxx7Rc7AUA1molhk6lKddx+MAknmmyTj3wHREk2NMVGwRIN/VlRPxShk6ZAqH
|
||||||
w3Sa9DsAD6NUHQNbhhWZSydpcpeC3qzYdYzLEqZOGKijvABja5+14Tw9lwAbH04Wwu/lu4GGEec1
|
6TTpdwAeQak6BrYMKzKXTtLkLgW9WbHrGJclTJ0wUEd5AcbWPmvDeXouATY+nCyE38t3Aw0jzmt8
|
||||||
PkZjJfQQkHu5jAcHodBFfAZpGcuLiXuh5YLHLRguFHFWKq8k1XgusmXEmzHpXvU8g2+NQrMnCJWV
|
jMZK6CEg93IZDw5CoYv4DNIylhcT90LLBY9bMFwo4qxUXkmq8Vxky4g3Y9K96nkG3xqFZk8QKiuN
|
||||||
RqHwLOji8O0ac4gyohs0rsq6FE9Ht0RYwrckeLUXvKIUzzVEfB6o/2Nmg2+dwCR32QKLhttSV9SH
|
QuFZ0MXh2zXmEGVEN2hclXUpno5uibCEb0nwai94RSmea4j4PFD/x80G3zqBSe6yBRYNt6WuqA+3
|
||||||
WybXCNlsyk28qW8JtP0WMNNrMoyubtO5hsJjKIqO5umLqwN6/IdqGygkIw6RmNRe3ugr878NDDG8
|
TK4RstmUm3hT3xJo+y1gptdkGF3dpnMNhcdQFB3N0xdXB/T4D9U2UEhGHCIxqb280VfmfxsYYnjH
|
||||||
YxIuLoz1MkRsj0GrT7HWevQ9cQM+0Qj1OBkxPBAdLpXnNZHl3Rc894ssqjBllVdTAGgZSXnF97YY
|
JFxcGOtliNgeg1afYq316HviBnyiEepxMmJ4IDpcKs9rIsu7L3juF1lUYcoqr6YA0DKS8rLvbTHw
|
||||||
ePVqLcB9ylME8XhaDjCi3F31RAONe5sN4HTCrFWXAh+iyhhQ4zFNpe0EWwdWTZxGpKZGqSK19b7g
|
6tVagPuUpwji8bQcYES5u+qJBhr3NhvA6YRZqy4FPkSVMaDGY5pK2wm2DqyaOI1ITY1SRWrrfcHr
|
||||||
9QLf55FHtkJhejJiEhCPK1zA/ZX17ZRpvhJJxftper6KZyNXThc94CrLhiENkVCNKy2Wer8Y0m4f
|
Bb7PI49shcL0ZMQkIB5XuID7lfXtlGleiaTi/TQ9X8WzkSunix5wlWXDkIZIqMblFku9Xwxptw9P
|
||||||
nj6BhV+l4SrerKf0X+bReuzNelrHN3l0nFcDNdDdJUQq3fiLN4bIVSYGhTl2DeYi3sOBwQ6yzKoI
|
n8DCr9JwFW/WU/ov82g99mY9reObPDrOq4Ea6O4SIpVu/MUbQ+QqE4PCHLsGcxHv4cBgB1lmVYR/
|
||||||
/2QkgCIS/ZkKJB4/wzCQhE4QH1uxjrJ8pDhDqEcixxWvECJxpLBLTBm6dLAGhvExYZFLZt61NxXf
|
MhJAEYn+TAUSj59hGEhCJ4iPrVjHWD5SnCHUI5HjilcIkThS2CWmDF06WAPD+LiwyCUz37E3Fd+v
|
||||||
r+jFie7XSMuijYY/LUdmYGp8BGyHkcOqybuPeIHZQPcawMtH6Mnmwm383iq+10M1QnLdrOAYwvMb
|
6MWJ7tdIy6KNhj8tR2ZganwEbIeRI6rJu494gdlA9xrAy0fpyebCbfzeKr7XQzVCct2s4BjC8xvd
|
||||||
3fr81ijw7siD0z51mOJtKgL8+KzcqONxjC6fwkhpiReNH7RmdpXPTCOxypHTXtLzrPE5uvHgS4pw
|
+vzWKPDuyIPTPnWY4m0qAvz4rNyo43GMLp/CSGmJF40ftGZ2lc9MI7HKkdNe0vOs8Tm68eBLinA4
|
||||||
OLrHZafQLGosulKn0xS5AJTXQS0x48c+woVOu3wWVxi63FoEBI6S56Fq1nyglVl1t25FuUznXde3
|
usdlp9Asaiy6UqfTFLkAlNdBLTHjxz7ChU67fBZXGLrcWgQEjpHnoWrWfKCVWXW3bkW5TOdd17fE
|
||||||
xE1r8KydX1rwXCnyDV/eUhUT5IbdgGY98n13EOfLraum06uLN8vQOZ6yK+ISoiaCwfHuF9+ZhZ6z
|
TWvwrJ1fWvBcKfINX95SFRPkht2AZj3yfXcQ58utq6bTq4s3y9A5nrIr4hKiJoLB8e4X35mFnrPw
|
||||||
8JnKlvA1h7QicCfjg3CXXinmONbbwHiGegVUAcUvURNkzOBRwmG7YZcaNVPubVRvs41gKBGpE6JA
|
mcqW8DWHtCJwJ+ODcJdeKeY41tvAeIZ6BVQBxS9RE2TM4FHCEbthlxo1U+5tVG+zjWAoEakTokD7
|
||||||
+wLVNotZufmOKOx9G95bUUwe7EBXvGF1dQ4ZwYgUtzdwecFQb0N09JxRPGo6QFER0IGPnIFDphuw
|
AtU2i1m5+Y4q7H0b3ltRTB7sQFe8YXV1DhnBiBS3N3B5wVBvQ3T0nFE8ZjpAURHQgY+cgUOmG7Cz
|
||||||
s1CS9IOt5VgV+ssaIXQCULHk+6d7gHW6un41f/+jcqxg1K1Cyf7VdNfyw7/ysnv3zqS//7JjW18f
|
UJL0g63lWBX6yxohdAJQseT7p0PAOl1dv5q//1E5XjDqVqFk/2q6a/nhX3nZvXtX0t9/2bm9rw//
|
||||||
/v2X3Tv6d23fvm0X/v2X3Tt3rPz9l/8T3/uyI8PtbW1BvkP7TQ1zZ68R+QMMP3MgbHNA26NdDf/e
|
/svunf27+3fs7Me//4LFK3//5f/A977syHB7W1uQ79B+U8PcuWtE/gDDzx4I2xzQ9mhXw783a6/X
|
||||||
rL1eWwP5VUq9ePp0ezTtDMYR7TZ3iHw8vUmLpm1KuuoK88mtj6baxrDdaiUfT3d2R1O1HY2nMzyW
|
1kB+lVIvnj7VHk07g3FEu80dIh9Pb9KiaZuSrrrMfHLro6m2MWy3WsnH013d0VRtR+PpDI+lR1dF
|
||||||
HlkVTdV2SJvOrSLfuT+W8jz7OqLt2rndZm63eX801dqjqaTnKv5vD/cXT+Pox9vdy/Xi6ZAWTeU0
|
U7Ud0qZzq8h37o+lPM++jmi7dm63mdtt3h9NtfZoKum5iv/bw/3F0zj68Xb3cL14OqRFUznNqR95
|
||||||
p37klf5Xxpvgdte9QeTj6V9o0VSOdze0W6O9+k8u7ySPl7QOF9ujqeSzOyrW7K4dd1RKW8H2849v
|
pf+V8Sa43XVvEPl4+hdaNJXj3Q3t1miv/pPLO8njJa3DpfZoKvlsW8WavWPntkppK9h+/omtJ/bc
|
||||||
Pb5n19ZdO9Kund4W4IVjIE+BOYrLcQZhcjlpjpzH8nfeOTAz+tFv2mOjb3rfv3lw+Qfedf9lSPbR
|
sfWOnWnXTm8P8MIxkKfAHMXlOIswuZw0R85j+TvvHJgZ/eg37bHRN73v3zyw/APvuv8yJPto4zoa
|
||||||
xnU0ri+XWOZv1EJ+0rRPaCfaNhJM7o2e33jgpqfMb1TnZ4yNWsL3H+C/a1rAs22t4fMJ9X8rof6O
|
15dLLPM3aiE/adontJNtGwkm90bPb9x/05PmN6rzM8ZGLeH7D/DfNS3g2bbW8PmE+r+VUH9nAnwq
|
||||||
BPhUQj9/nwA/ngDfq4W8pH7vSRj3DxP6mUqo/88T6ncnjPtnCf2cSejnzQn9rEro580J8I8kwO0E
|
oZ+/T4CfSIDv1UJeUr/3JIz7hwn9TCXU/+cJ9bsTxv2zhH7OJvTz5oR+ViX08+YE+EcS4HYCvJwA
|
||||||
eDkB/rEE+B0J8HNaa7gB9TcBN248IPJyn38A4Fta1B/l+nqsvgb77ZjleLjD+rRCfnq0gG+35vFC
|
/1gCfFsC/LzWGm5A/U3AjRsPiLzc5x8A+JYW9Ue5vh6rr8F+O245Hu6wPq2Qnx4t4NutebwQd6ZH
|
||||||
3JkeHYRjnTmNwRZaoTBftWsFOsQUCqJqy4rQ3ZCNQYsHTe/e0ZEh0y1GYGNgjiFg0K6BPemN182a
|
B+FYZ05jsIVWKMxX7VqBDjGFgqjasiJ0N2Rj0OJB07tndGTIdIsR2BiYYwgYtGtgT3rjdbOmZKEj
|
||||||
koWO3GgfMzP5ITgEgu0dAU95YDaHkJzhjho1Y94sTcEJNl+FX2EhnjeVMUYA6UylIsrcsNqIbR/1
|
N9rHzEx+CA6BYHtHwFMemM0hJGe4o0bNmDdLU3CCzVfhV1iI501ljBFAOlOpiDI3rDZi28f8+kBD
|
||||||
6wMNZUQgTxFps0szj1ueBuc8FygBRCgeLRTLRwtzcHzRHBOD9Yua65WsmkYv9uYg43j2UYTB+VCr
|
GRHIU0Ta3KGZJyxPg3OeC5QAIhSPFYrlY4U5OL5ojonB+kXN9UpWTaMXe3OQcTz7GMLgfKhVuYbp
|
||||||
cg3TQ6/NrD+nzYuf0FvxuFGYwzts6z0mNitW6wDFkZnaiJuGhzHt4Eh+YLCwLb0j+LUtvVODn/fk
|
oddm1p/T5sVP6K14wijM4R229R4TmxWrdYDiyExtxE3Dw5h2cCQ/MFjYnt4Z/Nqe3qXBz0P5yelC
|
||||||
J6cLfem96f7tSnYPrGmY60/3K7m+9PZIQ5Sv7SD3VsF/q+HfVZqQq2sIhr/Wahrlwv/r5BTlZLum
|
X3pvun+Hkt0Daxrm+tP9Sq4vvSPSEOVrO8i9VfDfavh3lSbk6hqC4a+1mka58P86OUU52a7pbUKu
|
||||||
twm5ivbjdZZ1NUrpzzDMv9Fah318gQV9G5ThTyk4f1A8ugG58iuyj88/D5b2Wu1bnO//G8yv0Z7h
|
ov14nWVdjVL6Mwzzb7TWYR9fYEHfBmX4UwrOHxSPbUCu/Irs4/PPgaW9VvsW5/v/BvNrtKc5v+M/
|
||||||
/Pb/jPlV2nnOb/srzLdrL3P/gb7h/s9cK9KNMfgJhnfG9oXMP/1WkaIOWKfsp7MKvFuBLynw1ynw
|
Y36VdoHz2/8K8+3aK9x/oG+4/7PXinRjDH6S4Z2xfSHzT71VpKgD1in76ZwC71bgSwr8dQr8ggLf
|
||||||
8wp8kwK/qMBfq8DlvkY9d6MC1xX4TQq8j/vBNWpT4HsUuKrfDijwDgWeU+CqvTehwFcr8HsVuGon
|
pMAvKfDXKnC5r1HP3ajAdQV+kwLv435wjdoU+B4Fruq3Awq8Q4HnFLhq700o8NUK/B4FrtoJRxX4
|
||||||
HFHgaxV4WYF3KvC6AlePWMcV+FUK/IQCX6/Af0eBX63AH1TgGxT4xxS4qsQ/rsBV+ftpBX6tAn9I
|
WgVeVuCdCryuwNUj1gkFfpUCP6nA1yvw31HgVyvwBxT4BgX+MQWuKvGPK3BV/n5agV+rwB9U4Ncp
|
||||||
gV+nwB9W4Ncr8DMK/DUK/HEFvlmBP6nAb9BWvpVv5fun/P3jhtf/Infyx525U6u/fweI3Q+d8dqX
|
8IcU+PUK/KwCf40Cf0yBb1bgTyjwG7SVb+Vb+f4pf/+44fW/yJ36cWfu9OrvbwOx+6GzXvvyE7lT
|
||||||
n8yd/HLno1S+vPMXaU37+fKtL0Gy4WaqX8aCnz/7/eXl5Qcp30b5p4J8O+UfCfIdlP9skF9F+U8E
|
X+58hMqXd/0irWk/X771RUg23Ez1y1jw82e+v7y8/ADl2yj/ZJBvp/zDQb6D8p8N8qso/4kgv5ry
|
||||||
+dWU/0iQX0P59wf5tZR/d5DvpLwR5NdR/u4g30X5TJC/ivL9QX495d8Q5K+m/KYg3035tiC/gfI/
|
Hwnyayj//iC/lvLvDvKdlDeC/DrK3x3kuyifCfJXUb4/yK+n/BuC/NWU3xTkuynfFuQ3UP5nr8j8
|
||||||
e1nmN4r5B/lNYv5B/hox/yB/rZh/kL9OzF/mgbr3EXWHxHpA/ve3RvOnY/kPxfL3x/J+LF+N5c1Y
|
RjH/IL9JzD/IXyPmH+SvFfMP8teJ+cs8UPdeou6QWA/I//7WaP5MLP+hWP6+WN6P5auxvBnL3xvL
|
||||||
/r5YfiaWH43ls7H8/lh+Zyy/NZa/NZb/jVj++lj+6lh+dSx/ORXNX1Dz/f8jv/jUO3OLz+RO/vD8
|
z8Tyo7F8NpbfH8vviuW3xvK3xvK/EctfH8tfHcuvjuVfTkXzF9V8///ILz75ztzi07lTP7wwMT1y
|
||||||
xPTI6dVvAo7Inb76M12Y7H8E+fz6f4Amzz0I2RdTCF39c0z2XvSuh63xVymxNdYtn91w8wlk/0c5
|
ZvWbgCNyZ67+TBcm+x9GPr/+H6DJsw9A9oUUQlf/HJO9l7zrYWv8VUpsjXXL5zbcfBLZ/xFOof7X
|
||||||
hfpfo/o7v4RJ78u5xfO5R37y1twjFztybV/NPfWydx10UOUOOpfPzhFesj3id2L/H0Ox5t8+kzu5
|
qP6uL2HS+0pu8ULu4Z+8NffwpY5c21dzT77iXQcdVLmDzuVzc4SXbI/4ndz/x1Cs+bfP5E7tn8Sf
|
||||||
fxJ/5hZ/5K3Pndo/B5ml/3Z5eXmpBMz41dU+5Nvug7aR9s8uQCH+mIF2sJkPlHKnVt3aQ/1kL/af
|
ucUfeetzp/fPQWbpv728vLxUAmb86mof8m33QttI+2cWoBB/zEA72MwHSrnTq27toX6yl/rPwvi3
|
||||||
gfFvxfEXH1v698BzX8R2Sx3wK7e4OoUFXP6hM/5rHqbCJdjBDyOXQ5PfgooC+ixAH8s+t65L13KP
|
4viLjy79e+C5L2K7pQ74lVtcncICLv/QWf81D1HhEuzgh5DLoclvQUUBfQagj2afXdela7lHs0s0
|
||||||
ZZdo+o9ln+T0aUwfyz5B2VPXP3o7UmX06dzp7JO5xW/g4B+HieROQfb0zHO5xW8jaD+CFrNncyfv
|
/UezT3D6FKaPZh+n7OnrH7kdqTL6VO5M9onc4jdw8I/DRHKnIXtm5tnc4rcRtB9Bi9lzuVP3ndM2
|
||||||
P6tt+ND7qS02eGzpc5fluIMw7rN74Z9T2SdOnmlbPJM7fd1XxDDZJe7oW5eooyXoaEnzu76IImlp
|
fOj91BYbPLr0uZfluIMw7jN74Z/T2cdPnW1bPJs7c91XxDDZJe7oWy9RR0vQ0ZLmd30RRdLSuGgT
|
||||||
XLSJVG/7EiRnc4vtJ7NPtAFygMlXBUU+e0nBxf+9k/c/0b6wBv7V/NdJnF4f4ITniWf/bRt3egoZ
|
qd72JUjO5RbbT2UfbwPkAJOvCop89iUFF//3Tt33ePvCGvhX818ncXp9gBOeJ575t23c6WlkgOGr
|
||||||
YPgqQeO9UAlIeQOQ9RtvFqBvX5JkXy9owE02c5M1osktMFqbv0GM8BRIxWfxKCOyv4kDbooM+L0u
|
BI33QiUg5Q1A1m+8WYC+/ZIk+3pBA26ymZusEU1ugdHa/A1ihCdBKj6DRxmR/U0ccFNkwO91idaP
|
||||||
0frxS82tPw8y9NlnNNkabfFn/1ZTW/85t/5d0XorztffTOUnz3RiHSg0kPT/OujmC/DPsw9Euqly
|
vdTc+vMgQ595WpOt0RZ/5m81tfWfc+vfFa234nz9zVR+6mwn1oFCA0n/r4NuvgD/PHN/pJsqdzMo
|
||||||
N4Oim9uom+tj3XwTujl3SPThwz/n7go72MUdtF+pg0+CCjnHzLkDO+gSv3sUhnn/S0BaXP4NH7xP
|
urmNurk+1s03oZvzh0UfPvxz/q6wgzu4g/bLdfBJUCHnmTl3Ygdd4nePwjDvfxFIi8u/4YP3SioD
|
||||||
UhnA7wLwsyOXlR1yev8waIylR6DgwfseVcAbEPxnTeBOBP9eDHzyxxsX778EpV1Y6kPpqewlGO72
|
+F0AfmbkZWWHnNk/DBpj6WEoeODeRxTwBgT/WRO4E8G/FwOf+vHGxftegtIuLPWh9HT2JRju9hcj
|
||||||
lyIjXQJdtXSoqcvV2OhAc5e5xfsv5hb988A7/6oHpzZzkRn80V/glGbOA+fCJM9r/tqHkcfPrSZC
|
I70EumrpcFOXq7HRgeYuc4v3Xcot+heAd/5VD05t5hIz+CO/wCnNXADOhUle0Py1DyGPn19NhPia
|
||||||
fE3tRYdelhb9H568/4dt/noQZd8BJJ79KFQDSDtBnkLIBwSkw18HkC8D5JwL2VWU/U+YLUF2tb8X
|
2osOvSwt+j88dd8P2/z1IMq+A0g881GoBpB2gjyJkA8ISIe/DiBfBsh5F7KrKPufMFuC7Gp/L1Ly
|
||||||
Kfk3tIFwfoDHYvbSyfsvtVHFT2DFfZDVKPsxzKYIp3O3QvM1BP0wQl8D2bWUfR9m18KPD3TGUO8D
|
b2gD4fwAj8XsS6fue6mNKn4CK+6DrEbZj2E2RTidvxWaryHohxH6Gsiupez7MLsWfnygM4Z6H6D+
|
||||||
1J+Oi6/TM8Aq2aeZEF9/mfjEEAzwkZfDlT57kTbweaKPdyOAgVpfBWrf1CkZeP+Ly8vn1kvRdofS
|
VFx8nZkBVsk+xYT4+ivEJ4ZggI+8Eq70uUu0gS8QfbwbAQzU+ipQ+6ZOycD7X1hePr9eirZtSuMf
|
||||||
+AfY+PT+58HWWPoU1mIOO4haGipdLOW2C6y81Ut/AJUjeB8AvB9vxvtpaPg443094b3hQw8Hu+m/
|
YOMz+58DW2PpU1iLOewgammodKmU2yGw8lYv/QFUjuB9APB+rBnvp6DhY4z39YT3hg89FOym/wpM
|
||||||
AlN+EW2ZpTe9KESPyG1+kWUZTvoUTt4/+wVJ/++8gPT/1sn7v6X521CUndqI9cQYL1xmCgRTf8Na
|
+UW0ZZbe9IIQPSK3+QWWZTjp0zh5/9wXJP2/8zzS/1un7vuW5m9HUXZ6I9YTYzz/MlMgmPob1srR
|
||||||
OdrARZw6gF6LU/zyRZr609hq6QX6fRZ/v+ViSJI+QZIfgChZ+ujFkCQ7LrcgyckXYiRJWMqzylK2
|
Bi7h1AH0Wpzily/R1J/CVkvP0+9z+Pstl0KS9AmS/ABEydJHL4Uk2flyC5Kcej5GkoSlPKcsZfvL
|
||||||
XxYk+WpAki9dEqgE7PaWF9Q1fQ9N7PTOe9aI0pefV6X+QTHtx5YWlAldBb/POWJKSJCNa+RY/Vjr
|
giRfDUjypZcEKgG7veV5dU3fQxM7s+vQGlH6ynOq1D8opv3o0oIyoavg93lHTAkJsnGNHKsfa53Z
|
||||||
9M4uAAjZ/FCktydkb70vqDzz0kth3595ngj0JZDUS+4LIYGuFbOI0Kf4fJw+zVr6T24hnbn0H8Xs
|
1QUAIZsfjPT2uOyt93mVZ158Mez7M88Rgb4EknrJfT4k0LViFhH6FJ+L06dZS//JLaQzl/6jmD0p
|
||||||
SWneTut9FnVSA/TQ6n92i5j6SehP4jT/klRLH4BfX7wVf/2tmMz5x7Lfpc1YQhKcmvlurvjN3CPP
|
zdtpvc+hTmqAHlr9z24RUz8F/Umc5l+UaukD8OuLt+KvvxWTufBo9ru0GUtIgtMz380Vv5l7+Gmw
|
||||||
gG3yJIpWEii0Ftc+j+OgzNBICzD/fH+VJFf784IzmvqAxn96YXn5ZPa7baey392XPfvej0rS/eRC
|
TZ5A0UoChdbi2udwHJQZGmkB5p/vr5Lkan9OcEZTH9D4Ty8uL5/KfrftdPa7+7Ln3vtRSbqfXAy5
|
||||||
yE3PXCBi/T50uDT8fAsOylyIUUhvptD9b2ym0LoQc6LQ4TcKChkXQgplfyEpdAR+PZY9SzSpivmc
|
6emLRKzfhw6Xhp9rwUGZizEK6c0Uuu+NzRRaF2JOFDryRkEh42JIoewvJIWOwq9Hs+eIJlUxn3NN
|
||||||
bZrPHzyXIEm+2SHJ8Y/PqVzxoxclcZo7W3wOiXMWiHN2X/aH7z0lCfLUc0SQD0KXSzsvtCBI33NI
|
8/mDZxMkyTc7JDn+8VmVK370giROc2eLzyJxzgFxzu3L/vC9pyVBnnyWCPJB6HJp18UWBOl7Fgky
|
||||||
kLn0hps/iEOCQXuA7L3MoZHT+++6WdMy9+QXv52ZyS9eyExnFi/N5E5vfQuAp0Z6L+OZbunmn8MI
|
l95w8wdxSDBoD5C9lzk8cmb/XTdrWuZQfvHbmZn84sXMdGbxpZncma1vAfDUSO/LeKZbuvnnMMLD
|
||||||
j1zu8G7u/w7biyOLPx9Z/MnQ4n/PLF/3vdzJR9tye//e/wc87739vsw7Mvdl3pkpPDoXjonjPaop
|
L3d4N/d/h+3FkcWfjyz+ZGjxv2eWr/te7tQjbbm9f+//A5733n5v5h2ZezPvzBQemQvHxPEe0ZRz
|
||||||
58TgZLjy/f/wtUW8sVHfI35v1Mdsna8rLLsGec6YJS4fMEr6JL7Vcz3KDxse/rkYx7Edyo+Kv6eT
|
YnAyXPn+f/jaIt7YqO8RvzfqY7bO1xWWXYM8Z8wSlw8YJX0S3+q5HuWHDQ//XIzj2A7lR8Xf08lM
|
||||||
mcgr1aL9Vw2vSDFNJbr+EFccFcsV/xQwjAevKcIfLt254K/j1YrGf4pSs0oVU6vjn6ssaW7Z9/BZ
|
5JVq0f6rhlekmKYSXX+IK46K5Yp/ChjGg9cU4Q+X7lzw14lqReM/RalZpYqp1fHPVZY0t+x7+Kxj
|
||||||
x9aSvVDTXOMYwOy5Oa3oGBjHqdWrru/S3wSEedx+q9ulZceHtdvJ59v2uo59n9aE/3T9T5eXUYBW
|
a8leqGmucRxg9tycVnQMjOPU6lXXd+lvAsI8br/V7dKy48Pa7eTzbXtdx75Pa8J/uv6ny8soQCsX
|
||||||
zi8v413deyG9CdInfra8/GWAfx62GN59/h1s4AlIUeLVIV2NEg7SmyB9CNIMpE9Aei+kP4bUhnQ9
|
lpfxru69kN4E6eM/W17+MsA/D1sM7z7/DjbwBKQo8eqQrkYJB+lNkD4IaQbSxyG9B9IfQ2pDuh5I
|
||||||
kP7zkKYgrYOYH4G0B/RsBdJ9IFAegPTtIK7+AtL7QbA/AekfgWr5MaR4jtjREfp4294zqbUd39j2
|
/3lIU5DWQcyPQNoDerYC6T4QKPdD+nYQV38B6X0g2B+H9I9AtfwYUjxH7OwIfbxt75nU2k5sbHvd
|
||||||
uvVrO3FchJNfHvC8A9OhtbS0oD00NKB7frK8fAQNyO6Nw92b37bhqoXOE9pbb7zzzdtvoWs7bP8O
|
+rWdOC7CyS8PeG7DdGgtLS1oDw0N6J6fLC8fRQOye+Nw9+a3bbhqofOk9tYb73zzjlvo2g7bvwP+
|
||||||
+O8IzF/lCYTjAt77UzFf+aGPGA8GDRhvC/p7st0bP9w+ePUaxgPp+T6QZ3S3IMvGAFkufxz+O3aF
|
OwrzV3kC4biA9/xUzFd+6CPGg0EDxtuC/p5s98YPtw9evYbxQHq+D+QZ3S3IsjFAlssfg/+OX6Yc
|
||||||
cjxtVhPKcexOwKUE5bdqzWPf0pbcFsuHuG1SeQnK3w7lw2r5/WH5B6H8/VD+12p5++eoApZ/Evng
|
T5vVhHIcuxNwKUH5rVrz2Le0JbfF8iFum1RegvK3Q/mwWn5fWP5BKH8/lP+1Wt7+OaqA5Z9EPrjI
|
||||||
AiugoPwzQfmXofwvofzaNqW8o6sNK2D5DwH+KeATPVL+2qB8FfDDp4B/tkTKbwjKb4Hyfwd8tSlS
|
Cigo/0xQ/mUo/0sov7ZNKe/oasMKWP5DgH8K+ESPlL82KF8F/PAp4J8tkfIbgvJboPzfAV9tipR3
|
||||||
3knlGNcxBOWfBn6j8Kbh7o3/sj3fvflfdGS79dOrst09D6we6u778Jpc956Taw92H6h178l092W6
|
UjnGdQxB+aeB3yi8abh7479sz3dv/hcd2W79zKpsd8/9q4e6+z68Jte959Tag90Hat17Mt19me6e
|
||||||
ewa69YHuzQPdGwe6O0luIL8+Cf2o9zIr38q38q18K9/Kt/KtfP+vfjIuR8bhqPHGaqrzjyDWg41j
|
gW59oHvzQPfGge5OkhvIr09AP+q9zMq38q18K9/Kt/KtfCvf/6ufjMuRcThqvLGa6vwjiPVg41jG
|
||||||
GePR83qRytgIGf8jY3BkrImMpZFxQDfFyi+8vEwh+R/noBhpU/0OB7fIGJcnuVzGqqzn45yMUZGx
|
ePS8XqQyNkLG/8gYHBlrImNpZBzQTbHyi68sU0j+xzkoRtpUv8PBLTLG5Qkul7Eq6/k4J2NUZOyG
|
||||||
G2rMB34y1mYzx3PIU+BFnp88V8iYGRkTNNEVhR9ZF8X7PKcyRkmOz2QJ6sFxhubXxqCXOf8kV1jm
|
GvOBn4y12czxHPIUeInnJ88VMmZGxgRNdEXhR9dF8b7AqYxRkuMzWYJ6cJyh+bUx6BXOP8EVljkv
|
||||||
vMTrPOc/yuUvcl6NGfpVfkG8dezr4/U+wOkEp0c4rXN6gtMHOf04pw9xeobTJzk9y+l5edji4KyN
|
8brA+Y9y+QucV2OGfpVfEG8d+/p4vQ9wOsHpUU7rnJ7k9AFOP87pg5ye5fQJTs9xekEetjg4ayOn
|
||||||
nOqc9nF6gNMJTo9wWleDun6JT8aZHRwcvFPvmZn1a56v701vT/dt7d/tU7b/t7f1pft29Arwq+iz
|
Oqd9nB7gdILTo5zW1aCuX+KTcWYHBwfv1HtmZv2a5+t70zvSfVv7d/uU7f/t7X3pvp29Avwq+uyA
|
||||||
A1Z3c4sF6oBV3dMS3hHEnUfhq7T3toSvDvZHFL4m2BdR+Npg/0ThnQFfReHrAn6MwrsCvo/Crwr2
|
1d3cYoE6YFX3tIR3BHHnUfgq7b0t4auD/RGFrwn2RRS+Ntg/UXhnwFdR+LqAH6PwroDvo/Crgv0R
|
||||||
RxS+vtmxQvCrNb0lvFs70WIdO7QN2oMt4RuD9xpR+KZAHkXh17QMRu7Qrg3i8KPw67QzLeHXB/It
|
ha9vdqwQ/GpNbwnv1k62WMcObYP2QEv4xuC9RhS+KZBHUfg1LYORO7Rrgzj8KPw67WxL+PWBfIvC
|
||||||
Cn9NINei8Ne23FcdICWkHIrCbwgfkkTgYbxxFP66Jph4v/Gz5Tgc5Xc70G3jtVF4N8MPxOBvYPiJ
|
XxPItSj8tS33VQdICSmHovAbwockEXgYbxyFv64JJt5v/Gw5Dkf53Q5023htFN7N8AMx+BsYfjIG
|
||||||
GHw3jXGj1nMgHA+/YfrdTIcq93Mm1k+D6jfT82MJ+CfN65NUdp32jlviJa3rf47qN9P/cYI3r9dT
|
301j3Kj1HAjHw2+YfjfTocr9nI3106D6zfT8WAL+SfP6JJVdp73jlnhJ6/qfo/rN9H+M4M3r9ST9
|
||||||
9O/1TfN6huFx/Le343yb+f8C/dvMb/euwjjHjdrXmD5beB93tgm4zUu8hQl9Q0K8+p1c/yOsWDdx
|
e33TvJ5meBz/He0432b+v0j/NvPbPaswznGj9jWmzxbex51tAm7zEm9hQt+QEK9+J9f/CCvWTVz/
|
||||||
/bsS6j/dIerLfXQHw48k1Hewfnvz/jrB41ZYYUq9+QDDv8aAv2b4Hyf0/9kEOL6bwNcfew5E4V+n
|
roT6T3WI+nIfbWP40YT6DtZvb95fJ3ncCitMqTfvZ/jXGPDXDP/jhP4/mwDHdxP4+mPPgSj86xRX
|
||||||
uHoYQRd5GTP7dzzuOBsc0n55JiFu/3muPxPD/2Xu/wD3L2ON17S3xrO3XfTz0G+IvHw6tzeh/j0J
|
DyPoIi9jZv+Oxx1ng0PaL08nxO0/x/VnYvi/wv0f4P5lrPGa9tZ49raLfh78DZGXT+f2JtQ/lAD3
|
||||||
cI/7+SAbEg8z/FsdKMKa5cMJqL+p/YZAn8nvdHvr9xef4v7fwgbbtUyfv0zA52sJ8J+2C/rIQST9
|
uJ8PsiHxEMO/1YEirFk+nIT6m9pvCPSZ/M60t35/8Snu/y1ssF3L9PnLBHy+lgD/abugjxxE0v+V
|
||||||
X06of02HwDMux17fIdalj+FyXd7YIfrv4/6l/bm1o3X/Ix2t51tmPteZb6VdeTyhn9/taP2O408T
|
hPrXdAg843Ls9R1iXfoYLtfljR2i/z7uX9qfWzta9z/S0Xq+ZeZznflW2pUnEvr53Y7W7zj+NKE+
|
||||||
6uMF2cYW6/K9DsG38fmeY3zaY/z2AsP7GHArw9etaj2vHqbPES6U9u7mVQJ+IgbXV7XG/65VAv84
|
XpBtbLEu3+sQfBuf73nGpz3Gb88zvI8BtzJ83arW8+ph+hzlQmnvbl4l4CdjcH1Va/zvWiXwj+M5
|
||||||
npMsl04yPsMMvy+hH5vH1XlcKf6OJ9R/IAH+SR73hhh9Psvwc6+Jwh9O6OeJBPi5BPjlBPibVot5
|
yXLpFOMzzPB7E/qxeVydx5Xi70RC/fsT4J/kcW+I0eezDD//mij8oYR+Hk+An0+Av5wAf9NqMa8J
|
||||||
TegiL+VAanXCu56i47mePzeXLmrhg56CVy0U8aUOPmIp2YX5ij1rVAol/F+3LRj+cU3+DyqU0nv6
|
XeSlHEitTnjXU3Q81/Pn5tJFLXzQU/CqhSK+1MFHLCW7MF+xZ41KoYT/67YFwz+hyf9BhVJ6T98d
|
||||||
dvW1roRvVawC/rWKRsGseU5Dm3OMqlko+dVqA5oouQL+byZEqgbvngGvQmF4MjOaLWTHhvBB0cGR
|
fa0r4VsVq4B/raJRMGue09DmHKNqFkp+tdqAJkqugP+bCZGqwbtnwKtQGJ7MjGYL2bEhfFB0cGR8
|
||||||
8YHMSGF8eHgqO12Yxr9iBNChw2OZ0fwgVI70VYoC6J0MgA6OzRSyOe43NzSJ49FdllGpFHzfKjU/
|
IDNSGB8enspOF6bxrxgBdOjIWGY0PwiVI32VogB6JwOgg2MzhWyO+80NTeJ4dJdlVCoF37dKzU+I
|
||||||
ITpwIPoKRm1BF1/8uufAAfXJTfxBk9oLvqypO4WaXaALtvDmrOCKR0XiaVC0w/ijorB0h5YtcOeI
|
DhyIvoJRW9DFF7/uOXBAfXITf9Ck9oIva+pOoWYX6IItvDkruOJRkXgaFO0w/qgoLN2pZQvcOSIn
|
||||||
nLx9Ew+Lop3AqPO2XdIGMkOFyezdrZ5ixRHlh0ZF1yd6Rt9MxStHX23FSxk5IhpwjmsXykYN7waT
|
b9/Ew6JoJzDqvG2XtIHMUGEye3erp1hxRPmhUdH1iZ7RN1PxytFXW/FSRo6IBpzj2oWyUcO7weS3
|
||||||
34pxk+BeEV9EJRM6fJelDo3Pmgr58QK9virQLaR4ghUnMIzMvFaESWiD42NjhYPj40Px12dNJLri
|
YtwkuFfEF1HJhA7fZalD47OmQn68QK+vCnQLKZ5gxQkMIzOvFWES2uD42Fjh4Pj4UPz1WROJLvsq
|
||||||
q7iAfLgt6JVWfFz1fVfC5Fq8XlOxwHdcQFHDMwJOn3Vd/g2LjvMpzBo4cWAeD3YrEL5A17mxZ3tj
|
LiAfbgt6pRUfV33flTC5Fq/XVCzwHRdQ1PCMgNNnXZd/w6LjfAqzBk4cmMeD3QqEL9B1buzZ3tj4
|
||||||
46OZ6cHcld68NdHWxIGJi5V74uhEiJbAdfx8LVoYPnpr4lZCnFgWMjiBaou91vQWLtaN77lNZG35
|
aGZ6MHe5N29NtDVxYOJi5Z44OhGiJXAdP1+LFoaP3pq4lRAnloUMTqDaYq81vYWLdeN7bhNZW770
|
||||||
0i+61fu3a8OZ6cyIeLYX7UFLu42qZ8xCCnuV0rL8RX+hoq6la7Znpudrflr+VWYFNOtbldJWEDcC
|
i271/h3acGY6MyKe7UV70NJuo+oZs5DCXqW0LH/RX6ioa+ma7Znp+Zqfln+VWQHN+laltBXEjQBl
|
||||||
lBnIb/WMeY3KyoZb1tKlRg2GEKnniBL+ey+RTAHKHLNiYEX+Va94iAUsLv5Mz9v8wzWLWtozj0OW
|
BvJbPWNeo7Ky4Za1dKlRgyFE6jmihP/eSyRTgDLHrBhYkX/VKx5iAYuLP9PzNv9wzaKW9swTkCVe
|
||||||
eDHt2LRyabPMQrlccsKc6EMIUNFC/oahjKoFnYnmwGpamv6nh2qRGIL/nQ+PE2jyST9T0t8hkF9b
|
TDs2rVzaLLNQLpecMCf6EAJUtJC/YSijakFnojmwmpam/+mhWiSG4H/nw+MEmnzSz5T0dwjk1xbL
|
||||||
LP9GLfqmLekdvPzi7oRdsfbx9/fxY1z8bx/kY+2ln+S9CePH2x+C/55fXrZle+lPkan080i3SRx/
|
v1GLvmlLegcvv7g74Y5Y+/j7+/gxLv63D/Kx9tJP8t6E8ePtD8N/zy0v27K99KfIVPp5pNskjr+h
|
||||||
QxO+Rtle+l1k+jAXyPeAsr30C1pa9M279M/IVPoz5Ren/7s14SuU1aQfR6Z3xvCP/fkE7bc14XsM
|
CV+jbC/9LjJ9iAvke0DZXvoFLS365l36Z2Qq/Znyi9P/3ZrwFcpq0o8j0ztj+Mf+fIL225rwPQb4
|
||||||
8O+Mpg9qIf7tWvP8T2uCprK99AvJVPpD4/ST8/9Dbj/Aeek/kqn0x67hNvH2n9DUvw2gNf1di7hH
|
d0bTB7QQ/3atef5nNEFT2V76hWQq/aFx+sn5/yG3H+C89B/JVPpj13CbePtPaOrfBtCa/q5F3CMS
|
||||||
JL7+fxRrL/1RMj0SI3j8z2d8KtZe+q1kGndvxds/FGsv/VsynXiF8b8Qay/P7zLNqo81W+DzxVh7
|
X/8/irWX/iiZHo0RPP7nMz4Vay/9VjKNu7fi7R+MtZf+LZlOXGH8L8Tay/O7TLPqY80W+Hwx1l6e
|
||||||
eZ6X6dWx+nH6fUWLyo9gw3F6TQL+8vt6rH3S38NIGv87sfbSTyfTj8f2T5x/f6QJG166S4P3yltb
|
52V6dax+nH5f0aLyI9hwnF6TgL/8vh5rn/T3MJLG/06svfTTyfTjsf0T598facKGl+7S4L3y1tb1
|
||||||
1++MpT/TxDvW4M+YcPuNr7L9ZU3QPriPkH/vhNtrivxQ20k6/rkm5h+/z9jMDpylVxh/TVu0fXBu
|
O2PpzzTxjjX4MybcfuOrbP+yJmgf3EfIv3fC7TVFfqjtJB3/XBPzj99nbGYHztIVxl/TFm0fnFv7
|
||||||
7YuOE28vv/V8gRHMn9tv5PY9sfrx/jbx+HF/umz/5hi81b1UbInpO8DtdZYj6IZJa83yY52Cu/od
|
ouPE28tvPV9gBPPn9hu5fU+sfry/TTx+3J8u2785Bm91LxVbYvoOcHud5Qi6YdJas/xYp+CufkdZ
|
||||||
YcH51lgwT1z+bkpo/ye8DjfGGsTbr3wr38q38q18K9/Kt/KtfCvfyrfyrXwr38r36//+J4asyacA
|
cL41FswTl7+bEtr/Ca/DjbEG8fYr38q38q18K9/Kt/KtfCvfyrfyrXwr38q38v36v/8JfgdiuQCg
|
||||||
oAAA
|
AAA=
|
||||||
'
|
'
|
||||||
|
|
||||||
#-----------------#
|
#-----------------#
|
||||||
|
|
143
qq2clone.1
143
qq2clone.1
|
@ -12,21 +12,17 @@ qcow2 images with backing files
|
||||||
[\f[I]ARG\f[R]]\&...
|
[\f[I]ARG\f[R]]\&...
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.PP
|
.PP
|
||||||
\f[B]qq2clone\f[R] is a tool that uses libvirt to make creating clones
|
\f[B]qq2clone\f[R] is a tool for creating and managing clones of
|
||||||
of template QEMU/KVM machines simple.
|
QEMU/KVM virtual machines.
|
||||||
By using the copy on write feature for which qcow2 is named, clones of
|
By using the copy on write feature of qcow2, clones of an existing
|
||||||
an existing virtual machine can be made without inadvertently altering
|
virtual machine can be made using few system resources and little time
|
||||||
the original image (with caveats \- read the \f[B]LIMITATIONS\f[R]
|
or effort.
|
||||||
section if you aren\[cq]t already familiar with how copy on write
|
|
||||||
works).
|
|
||||||
\f[B]qq2clone\f[R] makes creating and managing these clones simple and
|
|
||||||
efficient.
|
|
||||||
.PP
|
.PP
|
||||||
\f[B]qq2clone\f[R] supports creating numerous clones of a template and
|
\f[B]qq2clone\f[R] supports creating numerous clones of a template and
|
||||||
performing batch operations on them \- including the execution of
|
performing batch operations on them \- including the execution of
|
||||||
arbitrary commands with exec.
|
arbitrary commands with \f[B]qq2clone\f[R] exec.
|
||||||
This simplifies workflows involving large numbers of virtual machines,
|
This simplifies workflows involving large numbers of virtual machines,
|
||||||
or the frequent creation/destruction of virtual machines.
|
or the frequent creation/deletion of virtual machines.
|
||||||
.PP
|
.PP
|
||||||
To easily establish graphical connections to your virtual machines,
|
To easily establish graphical connections to your virtual machines,
|
||||||
qq2clone can use virt\-viewer or spicy.
|
qq2clone can use virt\-viewer or spicy.
|
||||||
|
@ -34,19 +30,17 @@ qq2clone can use virt\-viewer or spicy.
|
||||||
.PP
|
.PP
|
||||||
Not every option has an effect in the context of every command.
|
Not every option has an effect in the context of every command.
|
||||||
Specifying an option that has no effect in the context of the command
|
Specifying an option that has no effect in the context of the command
|
||||||
being invoked will not produce an error, it simply will not do anything
|
being invoked will not produce an error, it simply will not do anything.
|
||||||
.PP
|
.PP
|
||||||
Options are parsed left to right, and right\-hand options override
|
Options are parsed left to right, and right\-hand options override
|
||||||
left\-hand options.
|
left\-hand options.
|
||||||
The only exception is for \-Q/\-\-quieter, which \f[I]must\f[R] be the
|
|
||||||
first option listed to work properly.
|
|
||||||
.TP
|
.TP
|
||||||
.B \-c, \-\-connection [\f[I]URI\f[R]]
|
.B \-c, \-\-connection [\f[I]URI\f[R]]
|
||||||
Specify a non\-default connection URI: sets the value of
|
Specify a non\-default connection URI: sets the value of
|
||||||
LIBVIRT_DEFAULT_URI
|
LIBVIRT_DEFAULT_URI
|
||||||
.TP
|
.TP
|
||||||
.B \-C, \-\-copy\-disks
|
.B \-C, \-\-copy\-disks
|
||||||
When importing or copying a template, make a (full) copy of images
|
When importing or copying a template, make a (full) copy of its image(s)
|
||||||
.TP
|
.TP
|
||||||
.B \-f, \-\-no\-spice
|
.B \-f, \-\-no\-spice
|
||||||
Do not attempt to connect to a virtual machine\[cq]s Spice graphics.
|
Do not attempt to connect to a virtual machine\[cq]s Spice graphics.
|
||||||
|
@ -71,18 +65,15 @@ error or making a safe default choice depending on the command.
|
||||||
Recommended only once familiar with the behavior of \f[B]qq2clone\f[R]
|
Recommended only once familiar with the behavior of \f[B]qq2clone\f[R]
|
||||||
.TP
|
.TP
|
||||||
.B \-Q, \-\-quieter
|
.B \-Q, \-\-quieter
|
||||||
This option is (currently) required to appear immediately following the
|
This option is (currently) required to appear as the first argument to
|
||||||
invocation of \f[B]qq2clone\f[R].
|
\f[B]qq2clone\f[R].
|
||||||
Suppresses all output, error message or otherwise, except when running
|
Suppresses all output, error message or otherwise, except when running
|
||||||
interactive commands or commands that require output to be useful.
|
interactive commands or commands that require output to be useful.
|
||||||
The commands for which output is not entirely supressed are: config
|
|
||||||
list, config info, list, list\-templates, exec, edit, modify\-template
|
|
||||||
edit, and check.
|
|
||||||
Other commands will receive only an exit code as output.
|
Other commands will receive only an exit code as output.
|
||||||
This option is intended for calling qq2clone from a script.
|
This option is intended for calling qq2clone from a script.
|
||||||
.TP
|
.TP
|
||||||
.B \-r, \-\-run
|
.B \-r, \-\-run
|
||||||
Run a clone when creating it.
|
Start a clone after creating it.
|
||||||
Overrides NORUN setting in configuration
|
Overrides NORUN setting in configuration
|
||||||
.TP
|
.TP
|
||||||
.B \-s, \-\-storage [\f[I]LOCATION\f[R]]
|
.B \-s, \-\-storage [\f[I]LOCATION\f[R]]
|
||||||
|
@ -117,9 +108,8 @@ Overrides SPICY setting in configuration
|
||||||
There are two main classes of commands: commands that operate directly
|
There are two main classes of commands: commands that operate directly
|
||||||
on templates, and commands that create or operate on clones of
|
on templates, and commands that create or operate on clones of
|
||||||
templates.
|
templates.
|
||||||
In order to make it less likely that the user may unintentionally invoke
|
To prevent unintended actions, these two command types use slightly
|
||||||
a command of one class when they intended to invoke one of the other,
|
different syntax.
|
||||||
they use a different syntax.
|
|
||||||
Commands that operate on templates use the syntax:
|
Commands that operate on templates use the syntax:
|
||||||
.PP
|
.PP
|
||||||
\f[B]qq2clone\f[R] \f[B]command\f[R] [\f[I]template\-name\f[R]]
|
\f[B]qq2clone\f[R] \f[B]command\f[R] [\f[I]template\-name\f[R]]
|
||||||
|
@ -130,16 +120,17 @@ while commands that operate on clones use the syntax:
|
||||||
\f[B]qq2clone\f[R] \-\-template [\f[I]template\-name\f[R]]
|
\f[B]qq2clone\f[R] \-\-template [\f[I]template\-name\f[R]]
|
||||||
\f[B]command\f[R] [\f[I]ARG\f[R]] \&...
|
\f[B]command\f[R] [\f[I]ARG\f[R]] \&...
|
||||||
.PP
|
.PP
|
||||||
Notice that commands operating on clones work within the context of a
|
Commands operating on clones work within the context of a template
|
||||||
template defined by the option \-\-template/\-t.
|
defined by \-\-template/\-t.
|
||||||
Conversely, commands operating on templates specify the template as an
|
Conversely, commands operating on templates specify the template as an
|
||||||
argument to the command.
|
argument to the command.
|
||||||
There can also be a default template defined by the TEMPLATE
|
.PP
|
||||||
configuration option, allowing the \-\-template flag to be omitted for
|
A default template can be defined by the TEMPLATE configuration option,
|
||||||
commands that operate on clones.
|
allowing the \-\-template flag to be omitted for commands that operate
|
||||||
|
on clones.
|
||||||
Commands operating on templates do not respect this default \- the
|
Commands operating on templates do not respect this default \- the
|
||||||
template must always be explicitly defined, further reducing the
|
template must always be explicitly defined, reducing the likelihood of
|
||||||
likelihood of accidentally modifying or deleting a template.
|
accidentally modifying or deleting a template.
|
||||||
.SH TEMPLATE COMMMANDS
|
.SH TEMPLATE COMMMANDS
|
||||||
.TP
|
.TP
|
||||||
.B \f[B]copy\-template\f[R] [\f[I]CURRENT\-NAME\f[R]] [\f[I]NEW\-NAME\f[R]]
|
.B \f[B]copy\-template\f[R] [\f[I]CURRENT\-NAME\f[R]] [\f[I]NEW\-NAME\f[R]]
|
||||||
|
@ -236,9 +227,8 @@ are defined per clone: \f[C]\[dq]$uuid\[dq]\f[R],
|
||||||
\f[C]\[dq]$name\[dq]\f[R], \f[C]\[dq]$disks\[dq]\f[R] (a newline
|
\f[C]\[dq]$name\[dq]\f[R], \f[C]\[dq]$disks\[dq]\f[R] (a newline
|
||||||
delimited string containing the machine\[cq]s qcow2 disk device
|
delimited string containing the machine\[cq]s qcow2 disk device
|
||||||
filepaths).
|
filepaths).
|
||||||
This is done using bash\[cq]s eval command, so be sure to put any
|
This is done using bash\[cq]s eval command, so contain the command
|
||||||
instances of these variables in single quotes (double quotes inside the
|
string in single quotes to avoid unexpected behavior.
|
||||||
single quotes is best practice) or they will not be set properly.
|
|
||||||
If any instance of exec has a non\-zero return value, execution stops.
|
If any instance of exec has a non\-zero return value, execution stops.
|
||||||
.TP
|
.TP
|
||||||
.B \f[B]list\f[R] [\f[I]ARG\f[R]]
|
.B \f[B]list\f[R] [\f[I]ARG\f[R]]
|
||||||
|
@ -281,11 +271,10 @@ Suspend execution of every machine in \f[I]SET\f[R]
|
||||||
.SH OTHER COMMANDS
|
.SH OTHER COMMANDS
|
||||||
.TP
|
.TP
|
||||||
.B \f[B]check\f[R] [\f[I]TEMPLATE\-NAME\f[R]]
|
.B \f[B]check\f[R] [\f[I]TEMPLATE\-NAME\f[R]]
|
||||||
As described in the limitations section, there are ways that qq2clone
|
If a clone is deleted, has its UUID changed or is otherwise unavailable,
|
||||||
can lose track of a clone.
|
it will remain in qq2clone\[cq]s database.
|
||||||
If this happens, it will remain in qq2clone\[cq]s database, its ID
|
Its ID number will remain reserved, and its image files may not be
|
||||||
number will remain reserved, and its image files may not be deleted and
|
deleted and take up space doing nothing.
|
||||||
take up space doing nothing.
|
|
||||||
The \f[B]check\f[R] command finds and fixes occurences of this problem.
|
The \f[B]check\f[R] command finds and fixes occurences of this problem.
|
||||||
The \f[I]TEMPLATE\-NAME\f[R] argument is optional, and restricts the
|
The \f[I]TEMPLATE\-NAME\f[R] argument is optional, and restricts the
|
||||||
check to that template and its clones.
|
check to that template and its clones.
|
||||||
|
@ -462,52 +451,22 @@ Copy the XML of template Debian, creating a new template with the same
|
||||||
backing storage device that you can edit as you please
|
backing storage device that you can edit as you please
|
||||||
.SH LIMITATIONS
|
.SH LIMITATIONS
|
||||||
.PP
|
.PP
|
||||||
The largest limitation of \f[B]qq2clone\f[R] is that it cannot protect
|
Understand what copy on write is.
|
||||||
your template images from the actions of other software.
|
If you modify an image, you will corrupt images using it as a backing
|
||||||
If nothing else touches a template\[cq]s storage volumes, qq2clone can
|
file.
|
||||||
safely handle them (barring unknown bugs or bad luck during a
|
If you don\[cq]t understand what that means, use a search engine to
|
||||||
commit\-image).
|
research copy on write.
|
||||||
However, if something else alters the image upon which a template is
|
To safely modify a template\[cq]s underlying image, use the
|
||||||
based, its existing clones may be corrupted and future clones may behave
|
prepare\-image and commit\-image subcommands of \f[B]qq2clone\f[R]
|
||||||
differently than expected.
|
modify\-template.
|
||||||
It is the user\[cq]s responsibility to understand this aspect of copy on
|
|
||||||
write and carefully manage template images.
|
|
||||||
Future updates to qq2clone may add features that give some additional
|
|
||||||
protections, but this risk is inherent to copy on write.
|
|
||||||
.PP
|
.PP
|
||||||
Libvirt has permissions errors when a storage pool is in a
|
qq2clone uses a virtual machine\[cq]s UUID as defined in its libvirt XML
|
||||||
\[lq]hidden\[rq] directory with a name beginning with \[lq].\[rq] and
|
file to track it.
|
||||||
qcow2 files with backing files are involved.
|
Don\[cq]t change a clone\[cq]s UUID.
|
||||||
This may be due to apparmor, or it may be an issue with libvirt.
|
|
||||||
It is unknown how widespread this issue is, but it is the reason that
|
|
||||||
the default directory storage\-qq2clone does not start with `.'
|
|
||||||
.PP
|
.PP
|
||||||
If the UUID of a clone is changed, qq2clone will no longer be able to
|
qq2clone does not support pool types other than directories.
|
||||||
track it and will not be able to perform commands on it anymore.
|
If there is another pool type you wish it could use, email me at
|
||||||
This will be addressed in the future using custom metadata in the
|
jgardner7289\[at]protonmail.com and let me know.
|
||||||
libvirt domain XML.
|
|
||||||
If the user undefines a domain, this will obviously cause it to
|
|
||||||
disappear from qq2clone\[cq]s perspective when it is turned off,
|
|
||||||
creating a discrepancy in its database.
|
|
||||||
This can be fixed with \f[B]qq2clone\f[R] \f[B]check\f[R].
|
|
||||||
.PP
|
|
||||||
qq2clone can only produce clones by making qcow2 image files.
|
|
||||||
The backing file need not be qcow2, but the images produced by qq2clone
|
|
||||||
always will be.
|
|
||||||
This is unlikely to ever change \- levaraging the features of qcow2 is
|
|
||||||
the entire purpose of qq2clone.
|
|
||||||
If it does change, qq2clone will need a new name.
|
|
||||||
.PP
|
|
||||||
qq2clone does not support creating images in pool types other than
|
|
||||||
directories, and attempting to use a machine as a template when it has
|
|
||||||
storage volumes in a non\-directory pool is likely to fail or have
|
|
||||||
unexpected results.
|
|
||||||
Support for some other pool types may be added in the future.
|
|
||||||
.PP
|
|
||||||
qq2clone currently cannot copy storage volumes when importing a template
|
|
||||||
(it just references the originals), or when copying a template.
|
|
||||||
This will change in the future, and qq2clone will also be able to handle
|
|
||||||
more complex relationships between templates, clones and their images
|
|
||||||
.SH FILES
|
.SH FILES
|
||||||
.TP
|
.TP
|
||||||
.B \[ti]/.config/qq2clone
|
.B \[ti]/.config/qq2clone
|
||||||
|
@ -544,21 +503,9 @@ These can be edited manually, but it is more advisable to use
|
||||||
\f[B]edit\f[R]
|
\f[B]edit\f[R]
|
||||||
.SH BUGS
|
.SH BUGS
|
||||||
.PP
|
.PP
|
||||||
As described in the options section, the implementation of the
|
If you find a bug, please check to see if it already appears in
|
||||||
\-\-quieter/\-Q option needs some work.
|
https://git.j\-g\-web.com/jesse/qq2clone/issues.
|
||||||
Its current behavior is the easiest functional approach without
|
If not, email me at jgardner7289\[at]protonmail.com.
|
||||||
complicating the options parser, but it will eventually be modified and
|
|
||||||
become better behaved.
|
|
||||||
In addition to the previously described problem, very early error
|
|
||||||
messages will not be suppressed.
|
|
||||||
Most likely, the solution is to implement a better options parser and
|
|
||||||
make it the first thing to run when executing qq2clone.
|
|
||||||
However, the impact of this bug is minimal and other improvements are
|
|
||||||
likely to come before this bug fix.
|
|
||||||
.PP
|
|
||||||
If you find any worse bugs, and I\[cq]m sure I missed some, please let
|
|
||||||
me know and I will fix them as time allows.
|
|
||||||
Contact me at: jgardner7289\[at]protonmail.com
|
|
||||||
.SH COPYRIGHT 2021, Jesse Gardner
|
.SH COPYRIGHT 2021, Jesse Gardner
|
||||||
.PP
|
.PP
|
||||||
This file is part of qq2clone.
|
This file is part of qq2clone.
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue