Blame Manuals/en/Html/Repository/repository_44.html

4c79b5
4c79b5
<html>
09d4f2
09d4f2
09d4f2
The CentOS Artwork Repository exists to organize and automate The
09d4f2
CentOS Project corporate visual identity (, to
09d4f2
start on).
4c79b5
6c4982
Copyright C 2009, 2010 Alain Reguera Delgado. All rights
4c79b5
reserved.
4c79b5
4c79b5
Permission is granted to copy, distribute and/or modify this document
4c79b5
under the terms of the GNU Free Documentation License, Version 1.2 or
4c79b5
any later version published by the Free Software Foundation; with no
4c79b5
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
4c79b5
copy of the license is included in the section entitled GNU Free
4c79b5
Documentation License.  
4c79b5
-->
49b888
4c79b5
4c79b5
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
4c79b5
            Karl Berry  <karl@freefriends.org>
4c79b5
            Olaf Bachmann <obachman@mathematik.uni-kl.de>
4c79b5
            and many others.
4c79b5
Maintained by: Many creative people <dev@texi2html.cvshome.org>
4c79b5
Send bugs and suggestions to <users@texi2html.cvshome.org>
4c79b5
4c79b5
-->
4c79b5
<head>
c6292c
<title>CentOS Artwork Repository: 3.41 trunk/Scripts/Bash/Functions/Path</title>
4c79b5
c6292c
<meta name="description" content="CentOS Artwork Repository: 3.41 trunk/Scripts/Bash/Functions/Path">
c6292c
<meta name="keywords" content="CentOS Artwork Repository: 3.41 trunk/Scripts/Bash/Functions/Path">
4c79b5
<meta name="resource-type" content="document">
4c79b5
<meta name="distribution" content="global">
4c79b5
<meta name="Generator" content="texi2html 1.76">
4c79b5
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4c79b5
<style type="text/css">
4c79b5
1e9202
@import "/home/centos/artwork/trunk/Identity/Models/Css/Texi2html/common.css";
4c79b5
4c79b5
a.summary-letter {text-decoration: none}
4c79b5
pre.display {font-family: serif}
4c79b5
pre.format {font-family: serif}
4c79b5
pre.menu-comment {font-family: serif}
4c79b5
pre.menu-preformatted {font-family: serif}
4c79b5
pre.smalldisplay {font-family: serif; font-size: smaller}
4c79b5
pre.smallexample {font-size: smaller}
4c79b5
pre.smallformat {font-family: serif; font-size: smaller}
4c79b5
pre.smalllisp {font-size: smaller}
4c79b5
span.sansserif {font-family:sans-serif; font-weight:normal;}
4c79b5
ul.toc {list-style: none}
4c79b5
-->
4c79b5
</style>
4c79b5
4c79b5
4c79b5
</head>
4c79b5
4c79b5
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
4c79b5
4c79b5
035049
[ < ]
035049
[ > ]
4c79b5
   
4c79b5
[ << ]
4c79b5
[ Up ]
c6292c
[ >> ]
4c79b5
   
4c79b5
   
4c79b5
   
4c79b5
   
4c79b5
[Top]
4c79b5
[Contents]
c6292c
[Index]
4c79b5
[ ? ]
4c79b5
c6292c
035049
c6292c

3.41 trunk/Scripts/Bash/Functions/Path

b0644c
b0644c
035049
e37211

3.41.1 Goals

e37211
c6292c

This section exists to organize files related to path

c6292c
functiontionality of <tt>`centos-art.sh'</tt> script.  The path
c6292c
functionality of <tt>`centos-art.sh'</tt> script standardizes movement,
c6292c
syncronization, branching, tagging, and general file maintainance
c6292c
inside the repository. 
c6292c

63f275
035049
e37211

3.41.2 Description

e37211
c6292c

"CentOS like trees, has roots, trunk, branches, leaves and

c6292c
flowers.  Day by day they work together in freedom, ruled by the laws
c6292c
of nature and open standards, to show the beauty of its
c6292c
existence."
c6292c

035049
49b888
c6292c

3.41.2.1 Repository layout

273af8
c6292c

The repository layout describes organization of files and directories

c6292c
inside the repository. The repository layout provides the standard
c6292c
backend required for automation scripts to work correctly. If such
c6292c
layout changes unexpectedly, automation scripts may confuse themselves
c6292c
and stop doing what we expect from them to do.
c6292c

c6292c

As convenction, inside CentOS Artwork Repository, we organize files

c6292c
and directories, related to CentOS corporate visual identity, under
c6292c
three top level directories named <tt>`trunk/'</tt>, <tt>`branches/'</tt>, and
c6292c
<tt>`tags/'</tt>. 
c6292c

c6292c
c6292c

trunk/Identity/Models/Img/Scripts/Bash/Functions/Path/figure-6

273af8
c6292c

Figure 3.10: The CentOS Artwork Repository layout.

c6292c
c6292c

c6292c

The <tt>`trunk/'</tt> directory (see section trunk) organizes the main

c6292c
development line of CentOS corporate visual identity. Inside
c6292c
<tt>`trunk/'</tt> directory structure, the CentOS corporate visual
c6292c
identity concepts are implemented using directories.  There is one
c6292c
directory level for each relevant concept inside the repository. The
c6292c
<tt>`trunk/'</tt> directory structure is mainly used to develop CentOS
c6292c
corporate visual identity.
c6292c

c6292c

The <tt>`branches/'</tt> directory (see section branches) oranizes parallel

c6292c
development lines to <tt>`trunk/'</tt> directory. The <tt>`branches/'</tt>
c6292c
directory is used to set points in time where develpment lines are
c6292c
devided one from another taking separte and idependent lives that
c6292c
share a common past from the point they were devided on. The
c6292c
<tt>`branches/'</tt> directory is mainly used to perform quality assurance
c6292c
on CentOS corporate visual identity.
c6292c

c6292c

The <tt>`tags/'</tt> directory (see section tags) organizes parallel frozen

c6292c
lines to <tt>`branches/'</tt> directory.  The parallel frozen lines are
c6292c
immutable, nothing change inside them once they has been created.  The
c6292c
<tt>`tags/'</tt> directory is mainly used to publish final releases of
c6292c
CentOS corporate visual identity.
c6292c

c6292c

The CentOS Artwork Repository layout is firmly grounded on a

c6292c
Subversion base.  Subversion (http://subversion.tigris.org) is a
c6292c
version control system, which allows you to keep old versions of files
c6292c
and directories (usually source code), keep a log of who, when, and
c6292c
why changes occurred, etc., like CVS, RCS or SCCS.  Subversion keeps a
c6292c
single copy of the master sources.  This copy  is called the source
c6292c
"repository"; it contains all the information to permit extracting
c6292c
previous versions of those files at any time.
c6292c

273af8
49b888
c6292c

3.41.2.2 Repository name convenctions

c6292c
c6292c

Repository name convenctions help us to maintain consistency of names

c6292c
inside the repository.
c6292c

c6292c

Repository name convenctions are applied to files and directories

c6292c
inside the repository layout. As convenction, inside the repository
c6292c
layout, file names are all written in lowercase
c6292c
(<samp>`01-welcome.png'</samp>, <samp>`splash.png'</samp>, <samp>`anaconda_header.png'</samp>,
c6292c
etc.) and directory names are all written capitalized (e.g.,
c6292c
<samp>`Identity'</samp>, <samp>`Themes'</samp>, <samp>`Motifs'</samp>, <samp>`TreeFlower'</samp>,
c6292c
etc.).
c6292c

c6292c

Repository name convenctions are implemented inside the

c6292c
cli_getRepoName function of <tt>`centos-art.sh'</tt> script. With
c6292c
cli_getRepoName function we reduce the amount of commands and
c6292c
convenctions you need to remember concentrating them in just one
c6292c
single place you can look for fixes and improvements.
c6292c

c6292c
c6292c
c6292c

3.41.2.3 Repository work flow

c6292c
c6292c

Repository work flow describes the steps and time intervals used to

c6292c
produce CentOS corporate visual identity inside CentOS Artwork
c6292c
Repository.  
c6292c

c6292c

To illustrate repository work flow let's consider themes' development

c6292c
cycle. 
c6292c

c6292c

Initially, we start working themes on their trunk development line

c6292c
(e.g., <tt>`trunk/Identity/Themes/Motifs/TreeFlower/'</tt>), here we
c6292c
design background images and propagate them to different visual
c6292c
manifestations using one theme's model as reference.
c6292c

c6292c

Later, when the theme is considered "ready" for implementation (i.e.

c6292c
all visual manifestations have been already set), we create a branch
c6292c
for it (e.g., <tt>`branches/Identity/Themes/Motifs/TreeFlower/1/'</tt>).
c6292c
Once the branch has been created, we forget that branch and continue
c6292c
working the trunk development line while others (e.g., an artwork
c6292c
quality assurance team) test the new branch for tunning it up. 
c6292c

c6292c

Once the branch has been tunned up, and considered "ready" for

c6292c
release, it is freezed under <tt>`tags/'</tt> directory (e.g.,
c6292c
<tt>`tags/Identity/Themes/Motifs/TreeFower/1.0/'</tt>) for packagers,
c6292c
webmasters, promoters, and anyone who needs images from that CentOS
c6292c
theme the tag was created for.
c6292c

c6292c

Both branches and tags, inside CentOS Artwork Repository, use

c6292c
numerical values to identify themselves under the same location.
c6292c
Branches start at one (i.e., <samp>`1'</samp>) and increment one unit for each
c6292c
branch created from the same trunk development line.  Tags start at
c6292c
zero (i.e., <samp>`0'</samp>) and increment one unit for each tag created from
c6292c
the same branch development line.
c6292c

c6292c
c6292c

trunk/Identity/Models/Img/Scripts/Bash/Functions/Path/figure-1

c6292c
c6292c

Figure 3.11: Name convention for tags and branches creation.

c6292c
c6292c

c6292c

As proposition, it would be convenient not to freeze trunk development

c6292c
lines using tags or anything else.  If you think you need to freeze a
c6292c
trunk development line, create a branch for it and then freeze that
c6292c
branch instead.  
c6292c

c6292c

The trunk development line may introduce problems we cannot see

c6292c
immediatly. Certainly, the high changable nature of trunk development
c6292c
line complicates finding and fixing such problems. On the other hand,
c6292c
the branched development lines provides a less changable area where
c6292c
only small fixes/corrections are commited up to repository. 
c6292c

c6292c

If others find and fix bugs inside the branched development line, we

c6292c
could merge such changes/experiences back to trunk development line
c6292c
(not visversa) in order for future branches, created from trunk, to
c6292c
benefit.
c6292c

c6292c

Time intervals used to create branches and tags may vary, just as

c6292c
different needs may arrive. For example, consider the release schema
c6292c
of CentOS distribution: one major release every 2 years, security
c6292c
updates every 6 months, support for 7 years long. Each time a CentOS
c6292c
distribution is released, specially if it is a major release, there is
c6292c
a theme need in order to cover CentOS distribution artwork
c6292c
requirements. At this point, is where CentOS Artwork Repository comes
c6292c
up to scene. 
c6292c

c6292c

Before releasing a new major release of CentOS distribution you can

c6292c
create a branch for one of several theme development lines available
c6292c
inside the CentOS Artwork Repository, perform quality assurance on it,
c6292c
and later, freeze that branch using tags. Once a the theme branch has
c6292c
been frozen (under <tt>`tags/'</tt> directory), CentOS Packagers (the
c6292c
persons who build CentOS distribution) can use that frozen branch as
c6292c
source location to fulfill CentOS distribution artwork needs.
c6292c

c6292c
c6292c
c6292c

3.41.2.4 Parallel directories

c6292c
c6292c

Inside CentOS Artwork Repository, parallel directories are simple

c6292c
directory entries built from a common parent directory and placed in a
c6292c
location different to that, the common parent directory is placed on.
c6292c
Parallel directories are useful to create branches, tags,
c6292c
translations, documentation, pre-rendering configuration script, and
c6292c
similar directory structures.
c6292c

c6292c

Parallel directories take their structure from one unique parent

c6292c
directory. Inside CentOS Artwork Repository, this unique parent
c6292c
directory is under <tt>`trunk/Identity'</tt> location.  The
c6292c
<tt>`trunk/Identity'</tt> location must be considered the reference for
c6292c
whatever information you plan to create inside the repository.
c6292c

c6292c

In some circumstances, parallel directories may be created removing

c6292c
uncommon information from their paths. Uncommon path information
c6292c
refers to those directory levels in the path which are not common for
c6292c
other parallel directories.  For example, when rendering
c6292c
<tt>`trunk/Identity/Themes/Motifs/TreeFlower/Distro'</tt> directory
c6292c
structure, the <tt>`centos-art.sh'</tt> script removes the
c6292c
<tt>`Motifs/TreeFlower/'</tt> directory levels from path, in order to
c6292c
build the parallel directory used to retrived translations, and
c6292c
pre-rendering configuration scripts required by render
c6292c
functionality.
c6292c

c6292c

Another example where parallel directory removes the uncommon path

c6292c
information is when we use the help functionality. This time,
c6292c
<tt>`centos-art.sh'</tt> script uses parallel directory information
c6292c
(without uncommon directory levels) to build the documentation entry
c6292c
required by Texinfo to store documentation entries inside the
c6292c
repository.
c6292c

c6292c
c6292c

trunk/Identity/Models/Img/Scripts/Bash/Functions/Path/figure-3

c6292c
c6292c

Figure 3.12: Parallel directories removing uncommon information.

c6292c
c6292c

c6292c

Othertimes, parallel directories may add uncommon information to their

c6292c
paths. This is the case we use to create branches and tags. When we
c6292c
create branches and tags, a numerical identifier is added to parallel
c6292c
directory structure path. The place where the numerical identifier is
c6292c
set on is relevant to corporate visual identity structure and should
c6292c
be carefully considered where it will be.
c6292c

c6292c
c6292c

trunk/Identity/Models/Img/Scripts/Bash/Functions/Path/figure-4

c6292c
c6292c

Figure 3.13: Parallel directories adding uncommon information.

c6292c
c6292c

c6292c

When one parent directory changes, all their related parallel

c6292c
directories need to be changed too. This is required in order for
c6292c
parallel directories to match the new parent directory structure.  In
c6292c
the other hand, parallel directories should never be modified by no
c6292c
reason but to satisfy their parent directory structure. Liberal change
c6292c
of parallel directories may suppress the conceptual idea they were
c6292c
initially created for.
c6292c

c6292c
c6292c

trunk/Identity/Models/Img/Scripts/Bash/Functions/Path/figure-5

c6292c
c6292c

Figure 3.14: Wrong construction of parallel directories.

c6292c
c6292c

c6292c
c6292c
c6292c

3.41.2.5 Syncronizing path information

c6292c
c6292c

Creating parallel directories is very useful to keep repository

c6292c
organized. But, what would happen to functionalities like help
c6292c
(WARNING: The <samp>`trunk Scripts Bash Functions Help'</samp> documentation entry no longer exists.) that rely on parent
c6292c
directory structures to create documentation entries (using parallel
c6292c
directory structures) if one of those parent directory structures
c6292c
suddenly changes after the documentation entry has been already
c6292c
created for it? 
c6292c

c6292c

Well, at this point, functionalities like help may confuse

c6292c
themselves if path information is not updated.  Such functionalities
c6292c
work with parent directory structure as reference; if a parent
c6292c
directory changes, the functionalities dont't even note it because
c6292c
they work with the last parent directory structure available in the
c6292c
repository, no matter what it is. 
c6292c

c6292c

In the specific case of documentation (the help functionality),

c6292c
the problem mentioned above provokes that older parent directories,
c6292c
already documented, remain inside documentation directory structures
c6292c
as long as you get your hands into the documentation directory
c6292c
structure (<tt>`trunk/Manuals'</tt>) and remove what must be removed to
c6292c
match the new parent directory structure.
c6292c

c6292c

There is no way for help, and similar functionalities that use

c6292c
parent directories as reference, to know when and how directory
c6292c
movements take place inside the repository. Such information is
c6292c
available only when movement actions, like thoses achived by
c6292c
rm or mv commands, take place inside the
c6292c
repository. So, is there, at the moment of moving files, when we need
c6292c
to syncronize parallel directories with their unique parent directory
c6292c
structure.
c6292c

c6292c

Syncronizing parallel directories with their respecitive parent

c6292c
directory implies moving files inside the repository, i.e. we need to,
c6292c
firstly, rebuild the path information for each parallel directory
c6292c
inside the repository, using the current path of its parent directory
c6292c
as reference, and later, use the new path information to move each old
c6292c
parallel directory from its old location to its new location based on
c6292c
an updated path information.
c6292c

c6292c

As CentOS Artwork Repository is built over a version control system,

c6292c
file movements inside the repository are considered repository
c6292c
changes. In order for these repository changes to be versioned, we
c6292c
need to, firstly, add changes related files into version control
c6292c
system, and later, use commands from the version control system to
c6292c
move those files already versioned.  This configuration makes possible
c6292c
for everyone to know about changes details inside the repository; and
c6292c
if needed, revert or update them back to a previous revision.
c6292c

c6292c

Finally, once all file corrections have been already made, the

c6292c
syncronization action takes care of updating path references inside
c6292c
related files. Updating path references inside related files is
c6292c
specially important for documentation files where documentation nodes
c6292c
are built using repository path information as reference.
c6292c

c6292c
c6292c
c6292c

3.41.2.6 What is the right location to store it?

c6292c
c6292c

Occasionly, you may find that new corporate visual identity components

c6292c
need to be added to the repository. If that is your case, the first
c6292c
question you need to ask yourself, before start to create directories
c6292c
blindly all over, is: What is the right location to store it?
c6292c

c6292c

The CentOS Community (http://wiki.centos.org/GettingHelp) is the

c6292c
best place to find answers to your question, but going there with
c6292c
hands empty is not good idea. It may give the impression you don't
c6292c
really care about. Instead, consider the following suggestions to find
c6292c
your own comprehension and so, make your propositions based on it.
c6292c

c6292c

When looking the correct place to store new files, to bear in mind the

c6292c
corporate visual identity structure used inside the CentOS Artwork
c6292c
Repository (see section trunk/Identity) would be probaly the best advice
c6292c
we could offer to you, the rest is just matter of choosing appropriate
c6292c
names.  To illustrate this desition process let's consider the
c6292c
<tt>`trunk/Identity/Themes/Motifs/TreeFlower/Distro/'</tt> directory as
c6292c
example. It is the main development line of CentOS distribution visual
c6292c
manifestation, using TreeFlower's artistic motif, inside themes of
c6292c
CentOS corporate visual identity. 
c6292c

c6292c

When building parent directory structures, you may find that reaching

c6292c
an acceptable location may take some time, and as it happens most of
c6292c
time, when you find it, that may be not a definite solution. There are
c6292c
many concepts that you need to play with, in order to find a result
c6292c
that match the conceptual idea you try to implement in the new
c6292c
directory location. To know which these concepts are, split the
c6292c
location in words and read its documentation entry from less specific
c6292c
to more specific.
c6292c

c6292c

For example, the

c6292c
<tt>`trunk/Identity/Themes/Motifs/TreeFlower/Distro/'</tt> location
c6292c
evolved through several months of contant work and there is no certain
c6292c
it won't change in the future, even it fixes quite well the concept we
c6292c
are trying to implement.  The concepts used in
c6292c
<tt>`trunk/Identity/Themes/Distro/Motifs/TreeFlower/Distro/'</tt> location
c6292c
are described in the following commands, respectively:
c6292c

c6292c
centos-art help --read=turnk/
c6292c
centos-art help --read=turnk/Identity/
c6292c
centos-art help --read=turnk/Identity/Themes/
c6292c
centos-art help --read=turnk/Identity/Themes/Motifs/
c6292c
centos-art help --read=turnk/Identity/Themes/Motifs/TreeFlower/
c6292c
centos-art help --read=turnk/Identity/Themes/Motifs/TreeFlower/Distro/
c6292c
c6292c

Other location concepts can be found similary as we did above, just

c6292c
change the location we used above by the one you are trying to know
c6292c
concepts for.
c6292c

c6292c
c6292c
c6292c

3.41.3 Usage

c6292c
c6292c
c6292c
centos-art path --copy=SRC --to=DST
c6292c

Use this command to duplicate <tt>`SRC'</tt> in working copy,

c6292c
remembering history. In this command, <tt>`SRC'</tt> and
c6292c
<tt>`DST'</tt> can each be either a working copy (WC) path or
c6292c
URL:
c6292c

c6292c
c6292c
<samp>`WC -> WC'</samp>
c6292c

Copy and schedule for addition (with history).

c6292c

c6292c
c6292c
<samp>`WC -> URL'</samp>
c6292c

Immediately commit a copy of WC to URL.

c6292c

c6292c
c6292c
<samp>`URL -> WC'</samp>
c6292c

Check out URL into WC, schedule for addition.

c6292c

c6292c
c6292c
<samp>`URL -> URL'</samp>
c6292c

Complete server-side copy; used to branch and tag.

c6292c

c6292c
c6292c
c6292c

This command is an interface for Subversion's copy command.

c6292c
Options related to Subversion's copy command can be passed
c6292c
from third argument on. For example to specify a log message use the
c6292c
<samp>`--message'</samp> option as follow:
c6292c

c6292c
centos-art path --copy=URL/SRC --to=URL/DST --message 'Copy url/src to url/dst'
c6292c
c6292c

For more information on Subversion's copy functionality,

c6292c
run the command: svn help copy | less.
c6292c

c6292c
c6292c
centos-art path --move=SRC --to=DST
c6292c

Move and/or rename something in working copy or repository. In this

c6292c
command, SRC and DST can both be working copy (WC) paths or URLs: 
c6292c

c6292c
c6292c
<samp>`WC -> WC'</samp>
c6292c

Move and schedule for addition (with history).

c6292c

c6292c
<samp>`URL -> URL'</samp>
c6292c

Complete server-side rename.

c6292c

c6292c
c6292c
c6292c

This command is an interface for Subversion's move command.

c6292c
Options related to Subversion's move command can be passed
c6292c
from third argument on. For example to specify a log message use the
c6292c
<samp>`--message'</samp> option as follow:
c6292c

c6292c
centos-art path --move=URL/SRC --to=URL/DST --message 'Move url/src to url/dst'
c6292c
c6292c

For more information on Subversion's move functionality,

c6292c
run the command: svn help move | less.
c6292c

c6292c
c6292c
centos-art path --delete='SRC'
c6292c

Use this command to remove files and directories from version control.

c6292c
In this command, <tt>`SRC'</tt> can be a working copy (WC) path or URL. 
c6292c

c6292c
c6292c
<samp>`WC'</samp>
c6292c

Each item specified by a PATH is scheduled for deletion upon the next

c6292c
commit.  Files, and directories that have not been committed, are
c6292c
immediately removed from the working copy.  PATHs that are, or
c6292c
contain, unversioned or modified items will not be removed unless the
c6292c
<samp>`--force'</samp> option is given.
c6292c

c6292c
c6292c
<samp>`URL'</samp>
c6292c

Each item specified by a URL is deleted from the repository via an

c6292c
immediate commit.
c6292c

c6292c
c6292c
c6292c

This command is an interface for Subversion's delete

c6292c
command. Options related to Subversion's delete can be
c6292c
passed from third argument on. For example to specify a log message
c6292c
use the <samp>`--message'</samp> as follow:
c6292c

c6292c
centos-art path --delete='URL' --message 'Delete url.'
c6292c
c6292c

For more information on Subversion's delete functionality,

c6292c
run the command: svn help delete | less.
c6292c

c6292c
c6292c
centos-art path --sync='SRC'
c6292c

Use this command to syncronize path information inside working copy.

c6292c
This command is automatically used after moving or renaming parent
c6292c
directories.  In this command, <tt>`SRC'</tt> is a working copy path
c6292c
inside <tt>`trunk/Identity/'</tt> location, considered the parent
c6292c
directory you want to syncronize path information for.
c6292c

c6292c
c6292c
c6292c
c6292c
54264c

3.41.4 See also

4c79b5
c6292c
c6292c
3.36 trunk/Scripts/Bash  
c6292c
c6292c
3.37 trunk/Scripts/Bash/Functions  
c6292c
c6292c
4c79b5
4c79b5
4c79b5
c6292c
[ < ]
c6292c
[ > ]
4c79b5
   
4c79b5
[ << ]
035049
[ Up ]
c6292c
[ >> ]
4c79b5
4c79b5

4c79b5
 <font size="-1">
49b888
  This document was generated on December, 5 2010 using texi2html 1.76.
4c79b5
 </font>
4c79b5
 
4c79b5
4c79b5

4c79b5
</body>
4c79b5
</html>