>From 53167523bc190125fb175e2f67ef9600018b9111 Mon Sep 17 00:00:00 2001 From: George Clemmer Date: Thu, 17 Mar 2016 20:13:05 -0400 Subject: [PATCH] doc: "Introduction" revise and add figure. * doc.am: add figure. * doc/guix.texi: ("Introduction"): revise and add figure. Describe key components and features from top-down. Introduce key components and terminology. ("various other sections") Align terminology: build daemon, the store, per-user profile, system profile. * doc/images/introduction.dot: figure source, included for reference. * doc/images/introduction.png: figure, commiting 'dot -Tpng' output because doc.am DOT_OPTIONS makes a mess of it. Alternative: more mods to doc.am. --- doc.am | 3 +- doc/guix.texi | 168 ++++++++++++++++++++++++++++---------------- doc/images/introduction.dot | 107 ++++++++++++++++++++++++++++ doc/images/introduction.png | Bin 0 -> 28524 bytes 4 files changed, 217 insertions(+), 61 deletions(-) create mode 100644 doc/images/introduction.dot create mode 100644 doc/images/introduction.png diff --git a/doc.am b/doc.am index a1eabad..ca3a222 100644 --- a/doc.am +++ b/doc.am @@ -61,7 +61,8 @@ doc/os-config-%.texi: gnu/system/examples/%.tmpl infoimagedir = $(infodir)/images dist_infoimage_DATA = \ $(DOT_FILES:%.dot=%.png) \ - doc/images/coreutils-size-map.png + doc/images/coreutils-size-map.png \ + doc/images/introduction.png # Try hard to obtain an image size and aspect that's reasonable for inclusion # in an Info or PDF document. diff --git a/doc/guix.texi b/doc/guix.texi index b36be05..4fb01b6 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -249,55 +249,100 @@ Coding Style @node Introduction @chapter Introduction -GNU address@hidden'' is pronounced like ``geeks'', or ``ɡiːks'' -using the international phonetic alphabet (IPA).} is a functional -package management tool for the GNU system. Package management consists -of all activities that relate to building packages from sources, -honoring their build-time and run-time dependencies, -installing packages in user environments, upgrading installed packages -to new versions or rolling back to a previous set, removing unused -software packages, etc. address@hidden purpose address@hidden Guix +The purpose of GNU address@hidden'' is pronounced like +``geeks'', or ``ɡiːks'' using the international phonetic alphabet +(IPA).} is to allow users to easily install, upgrade, and remove address@hidden term ``free'' here refers to the address@hidden://www.gnu.org/philosophy/free-sw.html,freedom provided to +users of that software}.} GNU and non-GNU software. address@hidden functional package management -The term @dfn{functional} refers to a specific package management -discipline pioneered by Nix (@pxref{Acknowledgments}). -In Guix, the package build and installation process is seen -as a function, in the mathematical sense. That function takes inputs, -such as build scripts, a compiler, and libraries, and -returns an installed package. As a pure function, its result depends -solely on its inputs---for instance, it cannot refer to software or -scripts that were not explicitly passed as inputs. A build function -always produces the same result when passed a given set of inputs. It -cannot alter the environment of the running system in -any way; for instance, it cannot create, modify, or delete files outside -of its build and installation directories. This is achieved by running -build processes in isolated environments (or @dfn{containers}), where only their -explicit inputs are visible. - address@hidden store -The result of package build functions is @dfn{cached} in the file -system, in a special directory called @dfn{the store} (@pxref{The -Store}). Each package is installed in a directory of its own in the -store---by default under @file{/gnu/store}. The directory name contains -a hash of all the inputs used to build that package; thus, changing an -input yields a different directory name. - -This approach is the foundation for the salient features of Guix: support -for transactional package upgrade and rollback, per-user installation, and -garbage collection of packages (@pxref{Features}). - -Guix has a command-line interface, which allows users to build, install, -upgrade, and remove packages, as well as a Scheme programming interface. +Guix can be installed stand-alone (@pxref{System Installation}) or on +top of an exiting GNU/Linux system (@pxref{Installation}). +When installed stand-alone, Guix provides a distribution of the GNU +System consisting entirely of free GNU and non-GNU software, the address@hidden System Distribution} or @dfn{GuixSD}, (@pxref{GNU +Distribution}). @cindex Guix System Distribution @cindex GuixSD -Last but not least, Guix is used to build a distribution of the GNU -system, with many GNU and non-GNU free software packages. The Guix -System Distribution, or address@hidden, takes advantage of the core -properties of Guix at the system level. With GuixSD, users address@hidden all aspects of the operating system configuration, and -Guix takes care of instantiating that configuration in a reproducible, -stateless fashion. @xref{GNU Distribution}. + +Key Guix components and features are shown and discussed below: + address@hidden/introduction,6in,,Guix Feature Diagram.} + address@hidden substitutes address@hidden build daemon +Guix uses a @dfn{build daemon} to build and install software packages +(@pxref{Setting Up the Daemon}). Packages can be built using developer +source code or installed using pre-built package @dfn{substitutes} from +elsewhere, for example from the Guix Hydra build farm, address@hidden (@pxref{Substitutes}). This frees users from +dependence on others while providing the benefits of using pre-built +packages if they are available. + address@hidden the store +Guix installs software packages in a special directory, @dfn{the store}, +by default @file{/gnu/store}. address@hidden per-user profile +When a user installs packages, Guix makes them available to that user by +creating a @dfn{per-user profile} of symbolic links into the store +(@pxref{Features}). When GuixSD is installed, the packages one would +expect for basic user and administrator tasks (plus additional +globally-installed packages, if any) are made available in the address@hidden profile} (@pxref{Using the Configuration System}). address@hidden system profile + address@hidden system services address@hidden system configuration +When Guix is installed on an existing GNU/Linux system, the existing +system's package manager provides the system profile and system +services. In GuixSD, Guix @dfn{system configuration} manages the system +profile and system services and supports declarative configuration, +transactional instantiation, and rollback. Installed either way, Guix +can produce GuixSD virtual machines, disk images, and disk installs +(@pxref{System Configuration}). + address@hidden package management +Guix @dfn{package management} differs from typical GNU/Linux package +management by focusing on users instead of system administrators. Guix +enables each user to independently configure, install, upgrade, or +rollback packages for their own use. This allows users to create +software environments that extend, update, or replace the packages in +the system profile (@pxref{Package Management}). This, in turn, frees +system administrators from the requirement to meet all user's needs with +the system profile. + +Guix includes command-line interfaces for package management +(@pxref{Invoking guix package}) and system configuration +(@pxref{Invoking guix system}). Guix provides an emacs user interface +for package management, system configuration, and package recipes +(@pxref{Emacs Interface}). Guix is implemented primarily in GNU Guile +and provides Scheme application programming interfaces (APIs) +(@pxref{Programming Interface}) and utilities (@pxref{Utilities}) that +simplify software packaging. + address@hidden functional package management +Key Guix features, such as @emph{declarative} system configuration, +transactional upgrade/rollback, and garbage collection, are implemented +using a functional package management approach. The term address@hidden refers to a specific package management discipline +pioneered by Nix (@pxref{Acknowledgments}) in which the package build +and installation process is seen as a function, in the mathematical +sense. That function takes inputs, such as build scripts, a compiler, +and libraries, and returns an installed package. As a pure function, +its result depends solely on its inputs---for instance, it cannot refer +to software or scripts that were not explicitly passed as inputs. A +build function always produces the same result when passed a given set +of inputs. It cannot alter the environment of the running system in any +way; for instance, it cannot create, modify, or delete files outside of +its build and installation directories. This is achieved by running +build processes in isolated environments (or @dfn{containers}), where +only their explicit inputs are visible. The result of package build +functions is @dfn{cached} in a directory of its own. The directory name +contains a hash of all the inputs used to build that package; thus, +changing an input yields a different directory name. @c ********************************************************************* @node Installation @@ -308,10 +353,9 @@ GNU Guix is available for download from its website at software requirements of Guix, as well as how to install it and get ready to use it. -Note that this section is concerned with the installation of the package -manager, which can be done on top of a running GNU/Linux system. If, -instead, you want to install the complete GNU operating system, address@hidden Installation}. +Note that this section describes how to install Guix on top of a running +GNU/Linux system. If, instead, you want a stand-alone install of the +complete GNU operating system, @pxref{System Installation}. @menu * Binary Installation:: Getting Guix running in no time! @@ -578,7 +622,7 @@ used as well as version numbers of the dependencies @node Setting Up the Daemon @section Setting Up the Daemon address@hidden daemon address@hidden build daemon Operations such as building a package or running the garbage collector are all performed by a specialized process, the @dfn{build daemon}, on behalf of clients. Only the daemon may access the store and its @@ -1178,8 +1222,9 @@ own directory---something that resembles (note that Guix comes with an Emacs extension to shorten those file names, @pxref{Emacs Prettify}.) address@hidden per-user profile Instead of referring to these directories, users have their own address@hidden, which points to the packages that they actually want to address@hidden profile}, which points to the packages that they actually want to use. These profiles are stored within each user's home directory, at @code{$HOME/.guix-profile}. @@ -2935,11 +2980,11 @@ with @code{build-expression->derivation} (@pxref{Derivations, @node The Store @section The Store address@hidden store address@hidden the store @cindex store items @cindex store paths -Conceptually, the @dfn{store} is the place where derivations that have +Conceptually, @dfn{the store} is the place where derivations that have been built successfully are stored---by default, @file{/gnu/store}. Sub-directories in the store are referred to as @dfn{store items} or sometimes @dfn{store paths}. The store has an associated database that @@ -5600,8 +5645,8 @@ users of that software}.}. The distribution can be installed on its own (@pxref{System Installation}), but it is also possible to install Guix as a package manager on top of an installed GNU/Linux system (@pxref{Installation}). To distinguish -between the two, we refer to the standalone distribution as the Guix -System Distribution, or GuixSD. +between the two, we refer to the standalone distribution as the @dfn{Guix +System Distribution}, or @dfn{GuixSD.} The distribution provides core GNU packages such as GNU libc, GCC, and Binutils, as well as many GNU and non-GNU applications. The complete @@ -5662,9 +5707,8 @@ to join! @xref{Contributing}, for information about how you can help. @node System Installation @section System Installation address@hidden Guix System Distribution -This section explains how to install the Guix System Distribution -on a machine. The Guix package manager can +This section explains how to make a stand-alone installation of Guix +on a machine. Guix can also be installed on top of a running GNU/Linux system, @pxref{Installation}. @@ -6118,7 +6162,9 @@ fields), and how to @dfn{instantiate} the operating system using @unnumberedsubsubsec Globally-Visible Packages @vindex %base-packages address@hidden system profile The @code{packages} field lists packages that will be globally visible +(included in the @dfn{system profile}) on the system, for all user accounts---i.e., in every user's @code{PATH} environment variable---in addition to the per-user profiles (@pxref{Invoking guix package}). The @var{%base-packages} variable @@ -6350,8 +6396,9 @@ For instance, a valid value may look like this: A string denoting the contents of the @file{/etc/issue} file, which is displayed when users log in on a text console. address@hidden system profile @item @code{packages} (default: @var{%base-packages}) -The set of packages installed in the global profile, which is accessible +The set of packages installed in the system profile, which is accessible at @file{/run/current-system/profile}. The default set includes core utilities and it is good practice to @@ -7222,7 +7269,7 @@ gateway. Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network management daemon that aims to simplify wired and wireless networking. -This service adds the @var{wicd} package to the global profile, providing +This service adds the @var{wicd} package to the system profile, providing several commands to interact with the daemon and configure networking: @command{wicd-client}, a graphical user interface, and the @command{wicd-cli} and @command{wicd-curses} user interfaces. @@ -10235,6 +10282,7 @@ executable file names, passed as gexps, and adds them to the set of setuid-root programs on the system (@pxref{Setuid Programs}). @end defvr address@hidden system profile @defvr {Scheme Variable} profile-service-type Type of the service that populates the @dfn{system profile}---i.e., the programs under @file{/run/current-system/profile}. Other services can diff --git a/doc/images/introduction.dot b/doc/images/introduction.dot new file mode 100644 index 0000000..4828725 --- /dev/null +++ b/doc/images/introduction.dot @@ -0,0 +1,107 @@ +// Guix intro figure showing GuixSD, Guix on GNU/Linux, Hydra, etc. +digraph G { + compound=true + size="6,6" + edge [fontname = helvetica fontsize=18] + graph [fontname = helvetica fontsize=18] + node [fontname = helvetica fontsize=18] + ranksep="0.8 equally" + // Developer + Hydra + { node + [shape=box style = filled + fillcolor="white" color = transparent] + pkgsource [label = "Source\nCode"] + substitutes [label = "Package\nSubstitutes"] + } + subgraph cluster_pkgsource { + label = "Developer" + labelloc = "t" + style = filled fillcolor=azure2 color = transparent + pkgsource + } + subgraph cluster_hydra { + label = "Guix Hydra" + style = filled fillcolor= gold color = transparent + substitutes + } + // GuixSD + { node + [shape=box style = filled fillcolor=white color = transparent] + spkgs [label = "System\nProfile"] + guix2 [label="Guix"] + u1pkgs [label = "Per-user\nProfile"] + user [label = "User" fillcolor=pink] + } + { node + [shape=box style ="filled" + fillcolor=gold color = transparent] + guixd [label = "Build Daemon"] + guixs [label = "System Services"] + } + subgraph cluster_guixSD { + label = "Guix System Distribution (GuixSD)" + labelloc = "t" + style = filled fillcolor= azure2 color = transparent + user -> guix2 + user -> u1pkgs + user -> spkgs + subgraph cluster_guixstore { + label = "The Store" + labeljust = "l" + labelloc = "b" + style = filled fillcolor= gold color = transparent + { rank=same guix2 -> u1pkgs -> spkgs [style=invis]} + } + guix2 -> guixd + u1pkgs -> guixd [dir = back ltail=cluster_guixstore ] + spkgs -> guixs [dir = none ltail=cluster_guixstore ] + } + // Guix on GNU/Linux + { node + [shape=box style = filled + fillcolor="white" color = transparent] + du1pkgs [label = "Per-user\nProfile"] + duser [label = "User" fillcolor=pink] + guix [label="Guix"] + dpkgs [label = "System\nProfile"] + } + { node + [shape=box style ="filled" + fillcolor=gold color = transparent] + guixd2 [label = "Build Daemon"] + } + { node [shape=box style = filled fillcolor=darkseagreen2 color = transparent] + debs [label = "System Services"] + } + subgraph cluster_guixdeb { + label = "Guix Installed on GNU/Linux" + labelloc = "t" + style = filled fillcolor= azure2 color = transparent + duser -> dpkgs + duser -> guix + duser -> du1pkgs + subgraph cluster_debstore { + label = "The Store" + labeljust = "l" + labelloc = "b" + style = filled fillcolor= gold color = transparent + du1pkgs + guix + } + { rank=same guixd2 -> debs [style=invis] } + du1pkgs -> guixd2 [dir = back ltail=cluster_debstore ] + guix -> guixd2 + subgraph cluster_deb { + label = "GNU/Linux" + labelloc = "b" + style = filled fillcolor=darkseagreen2 color = transparent + dpkgs -> debs [dir = none ltail=cluster_deb ] + } + } + // connections between Source, Hydra Guix & GuixSD + pkgsource -> substitutes [lhead=cluster_hydra ltail=cluster_pkgsource] + pkgsource -> guixd [ltail=cluster_pkgsource] + pkgsource -> guixd2 [ltail=cluster_pkgsource] + substitutes -> guixd [ltail=cluster_hydra] + substitutes -> guixd2 [ltail=cluster_hydra] +} diff --git a/doc/images/introduction.png b/doc/images/introduction.png new file mode 100644 index 0000000000000000000000000000000000000000..95db85fcd12f318fe20f7c1cd60d70ea9a37e2bb GIT binary patch literal 28524 zcmaI;1yq$?+&zkdph$y&bcu9#x6<8>address@hidden zIpaUxcc^3U&address@hidden)-UF7&iN3cq#%ikM1TYX1A{6p^+5#&=7k9O_vY(Y;LpYhDKYTZ zD`Q#74=_*9|7A88#K6Fi!AO4)RdY|>Uv$&L?jihpa-^JxECE~bQf*6W4hW5C0m**mtsOZcWq+FxH+ address@hidden|P748ff4#v{k8KCI?gI}{Zhq{CKs^8dc==iJPSTJDeT address@hidden;Oz#*_L^aNKHC`c2>gBw-|0gHZ(KQlXPWML7U(#S7( address@hidden<7&U}Pb9|0UG_T)$j;$#<@Ghu zw6x(?=wA`2X3+@)8!T; z!)address@hidden(^!quGw&gSl0;D$DS_TX)`Z~+sP^n=kH9{0617`3xm(>az)wA%K&address@hidden)7R5k%+wA6FX4u>x>HAQ) zcOW09lD9Kag!43CAzti~A?y`zBp1L%BIw=Q8AV~GS4x1hxM-zZfadfqK+64wO?b7q address@hidden;c(Z-hw|)3etqHlNW%zX)address@hidden<1R=cg!GhGQ=UtZ7H8+LP3 zE%P5fw6zb^wS38>M1v<8zWp84oW5Q9`XPR|YCc_N+f$|2iW%YGawy`8)address@hidden z*-3rRF}cePx0n4MVON5iy>99>nZx#SXDgkkAKTjMyxf(VJ|N}~CU-3zwIYbz6jiHKA6_S5M*6($(F&Q#7kWSw#B=)$#zllRho0IPa>7dyveu zHWXHKp)}kT$UB~I70O!R&dx0Cvj%S%9JF=q>r=h@@~Z*A$d$42&eKVcT8UbS-PHlb zeS+c6WUDayix)FB4kl%L{5*V)>r2f7HcoXB=o(W~B};z-Wozv!&F8s5_#hGq3$>EM address@hidden(ko;address@hidden;RC*Ttd~XAIIcBe{%6e zArCg%z#T|Nu!92+4&address@hidden@address@hidden address@hiddenaddress@hidden>@hv? zt0lv4I6IEMo)G7y>GGZ29;C(nk;u-?t^Mk7^WpYla#>{i)k{{#;}wQ^+4uooFDN!e zcSM0_sm{#Ij8cUPr8%R{htHqsU|`p~S-qfY7ks!Q83hV~NV)H+&-N-zs=h2ef7?>I zVMfNgcQ88(4V*AGDV*y^{BHjHJ;VaPA_`J}A>address@hidden zr>9%%w;HT3%Z*?Es%n)?-d`JHnmS)6Qy>ve&qDFnU-p&##phDExf%GB$lBz2LD%Ey z0n!j{EJfxIW zY1Uv2ClW~Xd5J3`iAItuQK|address@hidden>OwWn%V{IggYyiRvK5GH z?B;SSQ1q+5%uR_WGxvm>jrB&oAJ`-i&Y=P^*SXjz31KsH^j6$DlTpZ!RK2_9x(kdw zpM$-97{vEH-;FWz*sHNY>~;1MkBQ)O%WtaX1{L#kdUIfZwmxR%=B%=5WUT*Z11bSa zuAQN)^=y0V)BQIUNaxUE+9)@I%sd(~kK=KsXQb(Mx}f(&address@hidden(hqW3jb$pzlDab z(I|=&QubH=K9UhH?5{f!FKVUb*U_Gaddress@hidden z-8Zf4JmH4Y{yLovxB9IZ%6GNv&5Kfak2?oHJ?PoPd3zqEJ=EzwkA&2iG&;i z`o;^eI6x}(^=a3fbfgPvlQeR5w&V^y#-t6pOsqXzf%A~uOAM746MKP(h}gNnD*DJ7%{fpXs1ZU8D^mH=E<}r-1E|5hYvC<-_HOh;n90bkcmMy(x|&ojA&~ z?X$HTCzxaoyWyN*^m>;wDw(`!(#wM!*{egEI2jdHl{&v860o!9(B+Jn1m zj-Id%5Ex90jc_dOBj~d9^bM{@>Dyj|Nj-+SeP5cAyG7-a1o=B=ejYb_onf00$glH^ zJ>LoleWAnI7}NSx&address@hidden(UVgteC=%P_L%|Ufx}-XD4oO&AYP5fchJWJq~J;asOaa?AiHqCP0$- zICgil^#>FM6H`(u$v9#sv$7VNeD&9tIjQRxANxbN4xByh8V#jB+D!*BmX_E%xouyT z>Zk8p=D?%OI%t`PHj1UNLt~*xg%dbq|q^)>seQq=A%rOi^kO-xkY0u&Py5mLZZU6x8Rr5W)@address@hidden)A(c>Umrdul*5%K zLGBi4hEbw+>bUQ3JNLgugBBY}0+nPi!KBA=Wrj6>+ws>&RsI8mKkwaa7gbuheFzhi address@hidden;)Bm2;%LACggvH7&FZCT5dBmYZw6b$b%}_!GNrYB+pZAvM$CY^%OIj#xf} zy5M2m<`NmQQw_%?G;&d_S&vIN;HF!9I`k6FV+TW#G9(address@hidden>s(0 zxPL6nY=#o0V{*}Q{*G<}1-iNlE>knu?FzFull43E3?REhvDb9ga2g zSLQ2hDyU&QTpd~5^?DG1UYhA6Xlia{)^$Is^wy$*Z>~j^nks^1C=Yb|zV#lx2K%oS zEiKMFQ>Y+aeBIewIGd|#=no9HvT%|u=Y-EI4DkX0qy$Z$h{rYbuARQ^m&lUW=#q>address@hidden> zD=GzO}RcL=OsZZyM^{cl9eULN~AzPwq=+tJ6>%q=ai(tm(UV;gJ!{_O$ z(%}7x68)5xB-ZCRH9=%&Uci9sI698!3Hm1 zGq+Cg`O4n~3tb|MN76cl9BUgJXUPTe8Er_(B+zygB4XvDee5-TdV1`sppevR`W!cr zwJ}g<)address@hidden)EQnk-Wi1iP4D_#^OT85)`=z3|address@hidden;?2 address@hidden>UH< address@hidden<3XbNXT&3C_vD%eL3*(01^ZDJTc3%;@nYEdi z?cqXPa4PFwn)9r^O(eq>0)HxH;#3WzV-F_21S5Xb|7pZ;address@hidden|8ZHPTSa8 zMMbs#X)address@hidden>6Bo|(=zX(TP zukbAO(J&B~{=?Y*%Pln*O`PSOgM$M+JUj*_W?M%v`pNO}N{phA5p)8=v*W-fD%$%i z+d=WSluSHdD1!n2O!NvvIF%o^FB`&address@hidden(r21Fp$6u`y(address@hidden>y@ z`^S&address@hidden`tBMtSq*O`Xf$+hBB3Dh7to zQr%kUIt6lo(vJ|+LW#`IMK1{tWQMlBbV)P)JhYDY(n%=QC6!L$t+LY6tMhiPX47T* zsXPuZ=;`T$Q1IJlDontwp`~!yWLu5r!`$C&XEZ%M-U)bLM_ymMr>3Q`>p`OWOa**y zW3xa0dKc4oeNek>address@hidden;sfHt3vGueS4j zxR_4mbNLxY$ZZ~``RhaOJN(b9>u+z$m6u+4orGg4%Cu0p;8BUDm=+qN0IowvnJx~1 zqtRMB!`q9!U=_#)IA!>kFaJSQsf~?|k55lkT9*d~eo011Dv;Q*!?K<;1?6QdTEt#DY5 address@hidden<6A%!n^SP_JeNa|buB)s2WMflm5YH7)O+`f|d-L{f(UA!V6Q~W$_u$}4 zuPa-alG4(O+FEKlI;1?65U|pJIg-}%HS$-aS{UEO&1J6i|&;`|f_UWytr zFf#5gHS_!2p0A$oj(2u-Iow}61Ox=^jO8JN7mdbprSI>KTEW6I9M-%4fh~Zswy~+G address@hidden)B9pt&sZzqWwl)Ee)9=Na zU7pQtQYFlvkj$ik2nyj7AWKycl}f=)rsS>nHz2O z^K+3z`UFBBtWZEu&}y;>N6_>9)6Qs?=hJ=w88(wKMiu5L$7`KS1D|w~>yYeAG+w3% z9=Bvfqk%g72W~UHMJ)ku24VtE3S}mX`~LFl!cnUs9XL?&Q;J;z~10MBTaLib9PFr4dKW*1K83nulfObdG$ zEHBiR)g_ASi~W(&z#_Xvb}nCWG2?f&H3wVvQZz<)t`!$OPbAa^_lsQZ-FK=7`sJxV zaRFIMn=Q{toDHY;mlljIDyktK=l&b9*st7n+L!q+;eJ1^_-^^JzMp=C8kgtN|i$BNEuN(>o#SGIrL*ly~a;~YV znfaOMA|*0KX>*HX0Rw8vlZ(address@hidden(address@hidden z!V!SijQx;8my22ZH*|rTQHS-tDVIh0LsyQ)address@hidden z44A*&{mHqe^-zb^ts~5)6T)->zv0P7H%mTmj5`J5gljCsz<(gGcP1cMwzjrByuAPZ zn8`jTymwrjkYpm+PO_zHAjcX~WRxzOu>address@hidden z>2W-)hQu8N2Q>address@hidden zW#bvz1_whKb!$e;^!b_e>O{JJ;^d(zV@&*aml17*uu;fzy(address@hidden zCV?~^R}{|kINL%Y=EDZvqvhdJ7aQp%XbdK+?SV7%^D&8uz1Jt}H;0W!_Rh|xryG6X zlWJ)c3=c<)jEv9C!q?YVn{8nGgTO1hHb1JmOrSa address@hidden(6>kDvOcy&Dv$(4lrAe2;address@hidden zoV55oLj787^?ex(KCHt_sos)IJ=o}hO+ZbaK_}_0t*!s~L?k3=hHI}03JT8tHiBc+ zse)MnWpJWITh-?!4Rg|RB}Exb5*7Gi3{8J{(address@hidden;AWB(cLCgAe_FsE@ zrNXq=OiWDJOA;O}qHgpt;CjFJ9>address@hidden)eFxGVmi4s`*dCMsE>}=ytloUfd>address@hidden^pqw z{()1tEV`yk;5`;G8O3p7=+?a4_DH%}&(;vbYt*6Y5=2E$sW=_`E!zw~E(Y`G~@ zYB7leFG};8#65oS#I4VfSN!(EWO%JBmO-6v`cIXOs!4WE5{DUGajk9F)D)NE3DOwG zqB6x58B=&*r3Jg$6hrA!Mr35>|_arL{KjLus-f z+FWfd@;A( z)W88()=K2B6J#;+H()address@hidden)o3!Phv5KKTBZh z%F|-~W;@?L7ENjBHx!V>UZ28*oBm1QdDGql{O56QDJCXfF}*%m#R~zfi9Tq6mlKdz z%QcyP014&Z^^l&Ob|FK=S?PrLmovzGhEe{&e z!_}d2v|%6C2}^Nnn%}v1b9p`Nwoq?_FNGq#YRi z5OvvjCBRAR)Yvk*(1fN5B>address@hidden;address@hidden;fH`vLu); z>_g{4^w!)wmQMYrexoa^+o4{RRZHZx?VbihY01vntc6PO3z0Cus0mwQU`d9(OE^yn address@hidden;^p6IYUmxi;address@hiddenDw8P6U|address@hidden>@9fa2Y?2^px>+mRbsPT ztYHK*rtxmT%g`haX{bGXCk|QPV#rV9&address@hidden zGmp!Cd~$N~cZ(r!0k)address@hidden(7Zs;0|#Moli4NAh?S|nie<~dQ! z`19q?73>xUF_|=FlehHB^$CMPJt%dAkdD4~5H^4sp3Tm*2kD z+cGVqiTb+y;q)OzOw82lOOGjtR~$nJ3Bv$i|Ik8#PFr+)z{S> zUrZaGfuM;=O=WQ5X(zNoR6t%!=sPFi{35Z(address@hidden(AdT<;BwE z<_59K?S+53J`?%5yU+_z_luau@)d%{ombs>;rsV1N3kXeG<98q6k_fRs0BH!Y10ZxNXF*86A*1oTs*yGsy~Z#t6(address@hidden; zLd3FG##?;A3N4_V*1Zp2SBdO41mjzSU`Jz|address@hidden z#adt_M#>E8+rKV0o}i)WkQQ+Kl^c8INm$q)fP6QxitU*Vmn*55Az%auJ_fCtlF=oq zHzBHd751xQLXX!b{jszZE;address@hidden;0lf!L15lZX-vPy3t98&n!lA z(F&A6OA(ZoRxmFqXa34=zH&OuuM(WYZ55)*U1Gp!&dC|Mvtt=f%pVjH5di|FWOuxv z()-5Ipv9XOT!NgjZTCB^YA#wA8R#az{Qm1El-f)Qe5qox&i?1`dC2?^o4r&^&E-MF address@hiddenmF?{wP-0zN_xAebclciDrF``vE}SOjIvTfKyv8LfPQ9|} address@hiddenK`dE%U8V6+XQBKu1NG zy%9IcA)3k7U+9se;c_2|f#HNS%}a$w*MlFSq3_w)RG>;or2)|(address@hidden|@+ z!BuGhA_;#0{2cXy`>};3$8FNuW=`x8;B*gN%BV zu9UyO;PHgSFDf+&uc=hc-)fuv;6cn=4qkpzd(bQApP76W5&zp*_i?SSFO}CRQOKvk z78%Ds0F;^xZ^^JVQ9Yt(n+CWG;(xGXSqKge-+}vKO}&_fn>&GzNcu-7LwXN|2s;gz$9N~WW0lJ9c8y4s8LVsWP|^e9Yv-%9VuIWok#8ft=?CCN)ko6j)L zEfLOIzE*0k)Y`3Ho6nqxPr2aQ`TyQknnf1Ee~J28WY9s2Ro=x+wydKsm0qLdM_O9i zKeH-k6eJx`A&`>!6DWl5|3cP#^3d{>fCY&-ikgyjcsc=y#177mpxH`?bV3>ul9T(v z9D*n0T{qkxOD(<+=f2&#kXuEV-S9K|l9}1$iz%BHue{4%$(6hMHnq=e5-)address@hidden zk`8A8g5t`YjXL$tUB_qvoHcsz$CylS{A2sTu9(Vrejj*eOGK_Idoxmoy&;Y5_B3*vh{Y>3jTWngD4;E%R+C_Yr+((bK`=i{MO|MQYoD3Al7l)!LS7Nw| zbk);zt(G3gD~oLMo)Uy=&=}P#+Uh3tyU)r%O-u|(2l2VTe{e&`fbvvf;=w?|^$!so_ty(UKlwhD zyz5MTeo%u6KmoD^6rlohM02fG@i;Ll%b>aRG(address@hidden&p*GpTv$r%B=u4DjaMSAtol~bCvh<@=8k(bi&>j zewDLbND};XB~&v1^4HY2t`sBdnvZ|SUexSsE^;AjC-`VXAS+m}Daddress@hiddenjrjWy-f9eH2_2B=jR`? zl#apdyVqimr91=HE88U#hbQ38gC!Xb-jX6#_)5hmVn^Bv_Deim&dwZwuQk29Jg6_nZq5JuUVJiMk*rAZj*{K_KGrL5U9(Mb;e4`H!pQ57&3eid1ue|^*=H9!kSOi&l7address@hidden z%5FIw5bh9hS|address@hidden(d69aPxzN1q=kfDn address@hidden(e!QkA)!97dQ71niw<Ys|2gA{6JG8dAL0rS!nQx5$(urp)x$~HD%jk)Tet>@Oc+-6oBr;`Bl}EEGIQ@ zetgXlN?}PIvmC2&s3KJr~pI&roj}(XlrL;address@hidden zSI+TeN)address@hidden<5YdEtZ+UL3GasTPR61eUvr4J?ohvu?{~`x||s;0rpZ%TI_| z{1rPFoC$U><{HfUT^Ll558u1DKHlO=hcIh3I^s)S+F8t13Awj8;YTyc66=Hy;-FVZ z^U=8A)fXwFy+SSQ`p(?oxHet-dFEbrG$LC0~r`BzE8+tKlBt(address@hidden address@hidden>8}00s=lQ4z9ye?F>plnobWxfs9tBub$VNI#Lq{FWesFR2{UJxH z9OQkB71*{)?}tpxq?p&address@hidden)Y)9nWXfdt{Wt!;y3+FihPP?y zdq**gkF8kwRJngufu`NUb&A!a6Yn`{EazHhr$(RByO#0^qYXM~wE5}w^48)pDj099 z27d#W+%VaM!}|address@hiddenW=b1{in|address@hidden>address@hidden@pE}Vf4RY address@hidden~W=BITZXSm%3-^5_O1Zxhdy-~PGp2W962 zR`9!v)>U}Fv`1u*Y`qShd;r=Ue_zoE_^|s94$5)<+Q&AWDKdikK!^lU%ZC0Iqv|!4 z-7Z(address@hidden@6k>address@hidden()cq}799Q!g?MQbsf8pVf_ zgYgHAL_p)g+6XOg(P&s}-M8J&i>J=)v#KmdV4+`bxLhSZzXgls6xq*u+>address@hidden z_W_2k5APgIyFq?C{Y|address@hidden>emAG4U*8jFUNUAD z<`luHO~C3jee^oh7+mgiTTF(address@hidden zy+~~p+zN+f>~i;e!uUL7HGMSVyl+~hp$I6;u+Vu-^I%aqqB({Tz-n|O|M8(?bY8!Qicl!iH)xqArS2HP&PJIo`JUq}- zgC?fg7W8eG^PKO)_$tK1%#ha{*l-Lp5I5;Q(cL$^DZ}dH)q6r z2QaW7Bqdd=ER{j~2UOkj%nRtc;{j&lbR?7aQ2Hm7Mc5b0hM&6%#G_u>>4&2JK549F z+7ebw*lmV0{qO2Ux}W|Jl0A&KkI%{3nQA#uDDj_VcSlDyfGUCZfdy!{rsifubo2t> zhg+D5LgjCTG?Odcot++1k)Jge|address@hidden>E2 zV%8tq*3}jG`*%RfTn8S|gG}t~BEEftLnYuK+a4+Q%TQhPhZ5R;_y7-N`>m^G zcCL3;E(z&?JrfclA)EJEx2c7o12S0)mp1$Az>>c9_UDfunSkE_)address@hidden zuKQYg`ueo0`6!~IqEHi_FtMypfBj*d_h&Hc_0mnW`}+Fi5?Nq1H8uMam`4D7&B(Il zoXm*b-`{t?In5KTr445ukDupN8^6K&Q{L0=jmBAo78w_ZBcIFx+}KPd`i=38Zb#W_ zbii`)address@hidden;NBFxrkT99> z)nYJF6!=_gZ5P*$S3AB323EN2X}Az+mg%jQw?4KnFJ}N98VgXdV7>rkCU{}_uU}j{ z?ExVa%u$8P>address@hiddenAs!9|uZp#A$3Yyy-18c?_Pms>L?i#45qw2ZRp1L#YTV-ZKK address@hidden@cis>65eNqKHqMr>1KNxFo**~sbv&q+|i97N6>FDTeX+;Fy5Peo7 zCiBnmdjy(bxBbdrSm<=QA~2SKF`92=$&}ItXxQi^0xKXSK%}%hJ$l`q?*gmxdrHc{ z#6-O4m>7HkcNV{=w1;(PAQD(address@hidden;O`Xq80u1>%aZ|KZSg5VOY%i zu`l+j>;%LfdHDG$V)|Iv*>address@hidden;nc1%)k;*L)# address@hiddenrB*rkfuFT$MV7INyywKN(KSsSl)Av zG{8Gi$R}cj^K8FxJz5(2hJZfP?8Ob*dX_5nWM_zmhKBRb=vNRzj)x1p&v-PMqpiI? address@hidden>`F1JPia{*ftN|IbqdAVKC&zf3IdG*gmMp3KPd1kPQ zI||ZN*W&h+Uj~r$S{He-#y#-<6dVe0&5- zK3<v+E48$=K(DN4ev3ZbRXI?BP{)totg_oMO9?s# address@hidden|{WYvak$v1U19tZtc?nA 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 address@hidden@lmZ3LYPvtB>XzY=OK#V-&ax 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 address@hidden)address@hiddenaddress@hidden)y$rEGAWDy= address@hidden)address@hidden zv-<@)address@hidden(&address@hidden@ z5nniLu1ktxk`0t;YdZo3hO}zAv6}oVXe7y~L0oc8Rb8G>address@hidden@MD}`>EsE address@hidden@)6=2OKAq}>D}jg6Ir0eOD6Z~auWYjD4GM132X{8hxt$MrC6og_RQ1+EE$$2aWmdaOUTF!xbU(6ct-B)3qXpOvvu_3 zZzm&(L6RYr(1x}3IjLOM<#s1R+VnahZ;srz)4hmZ^$S<~EKs_Cx;lR-WRR4rUjOuk==nbKz--nXc$TcDj-koy*Y2KMO1X0dqvm6EKbpZS%PzpL zUT1({0*fCvGVWaqjdt}ziiR@)5wBN=3!`A}Ywo!m94GO_Dg+>%f#HEuWzy>H;&D7D z(HH_5Jfmx|address@hidden@xbzBN~7A_as$&Ar#r*|!+ zVjUh{+bj(*LnGNseSL=>9zFB-Qhxnn^SyBhRo7rO8AzI_8u(WOUcZX^qR^f~e!1US address@hidden>K`swIwQqwL3a-FH2 zrkM^Gn)8lEsy}%4zh=6B;6m`cG6hN^h9rR$5TdGYU?6fHhCgs|ZakkaTY7$FR+uu+ z_a&5;paA>5G}|C7%%rW2WT`#F;address@hidden&2_Lzeq`C51VD2Y_EJ2Ci2{i9ZIt&<_Jaw zmDsfx%`1Uv!_P0$CSS4WShq0>$ijLfNkWcJH%gakL)c7UyL=ouryOi-^U=Ggd^zN* zH4b%_AiYjx*?`~&9bk^_Z=KqRcsc5jeg?JhwfNpE3`d(address@hidden|8X?L!`V zdNJ5Ivu*C|;FFQj-F*U{$%}B}JwD~Es7fZCUqz0a$H$M}_o}6TO{^Jk@@3cb)d_qb address@hidden(U-2M;address@hidden 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 z>{>$wRDn&}95(address@hidden;v;v;-TqT^jbL;Ljm}_t=F|u&a(address@hidden< z=9aKj9IZ%vvq};fOB%L`l(B}~*ND-Uv0G&VB6ON~mP}%=Ssf4WOWUM1q(!mLkOM`3 zV0mr*iBP9m><%B5(p3eg-YhA_ugUT4W-ZJ8;oRgMRp*+S{y5#kX}#>&qh9Tw67T-; zc20Jf=K>Gy)kPe}`%saBgjXKQ&5oY;XuJ(lzA;PQh${5?kgt>6cf*O}M!C|=LlPNZ zik>YWu-MUQ53NVAwe;nX3;GeokLkAGJf(Wvqe-aMsEvHAkfnoA7SC(address@hidden z$F(}~sKoJD%gUVInyC;Z_U<=zUisbmqmnhX6(y7Jzmo6do-RNCXxfqYumfXJlb{~Z z%d$ZJq+ILdu+4Uu8b|ND7JRu!CtwvB9snOfSW;mF>wt)lkzz>LxC12)address@hidden address@hidden)HWaia&HP4y`8l><4n&address@hidden zsZ&cL#LL7j4t8g{b4UBV0+meZE((D^V--=lT3&4>8>address@hidden<%KS}KxXf^O#78-Ky#mC zn)address@hidden);sPEqr%};s`orUcHqY)VH+b0m;Ub-{T_PJ+31gPz|a<#{~*oLMAv>eUnDX?{^M#{hNt(!W; zNJxJxg=w7acd|<*#8*$&1Py1)address@hiddenaddress@hidden|7Loei94TitVP%p2m>c3b`BIK5Hm0ybOqAitFe++x)>*)$kQY*vOhLG1YcnZa}ljNM-s|lhV0ea~j ztd+gMZRC)-n|4{W1fa+>T; zpZSG7v$)h?ha>VGOVWB;Se+R%s&%$ZX)YW1)XTr+UKH+un-J>address@hidden zY7%|g4^uzXZGx>c#qxOnt(address@hidden|address@hidden zq7e2PP7MQfi&3sDuLZ*S0k-)W7TVc&address@hidden<;R#%wdK z!j>{>)address@hidden@Dl8+D=c!92PHH%o6#mT7&&o{lZnKC^TX0cX6kd z<&kN)|F8JG;YkZ_wEc9K7&BElRVYonvNh&address@hidden)J%bM7$eR0 zQ+K~sPzHBJ!X8H~;m{7^&rVBRzSk{xy3*$^6HBDt!z;N2Pt*Hwc2|N^^8$IojlP$)1_=T%; zKQpP0SwRnC&$&a>^j->O3TWQuI9y23%2mfAs<#aW#I1@@>93WC$Jjd~wZ({0Mltr1 zD+b>4J>address@hidden< zHhyM^8p61mV9=yqPGrJBpNncW-ZeB z`EU2L*LeM}-+wt2SUL9_FRCN;H|address@hidden|pO7xTaj!v&`_C~>TfRKQjV^23N25YI zm^7Wo<`8^!7v2W{LZus>;(v#1>*ipD&)6FUwROL85awX}Z+QCuw*&g$Hfg;HU%hnW zl?-lVEn!$Dg4FoJut!p%xk#-FS$-Iv1Ea>address@hidden;+(x}h4cm_qaDJsT-SJo=?^ z5e|P&FuS&F&address@hidden(56!T}|XCp?|address@hidden(Q-RX^h6i}BSeAr*# z>C?0S?hrTHSC3VznIn>?x~0bN{|3%MNy+#YLv#cMJyW>|pcromaFuXyWQ;ZRKG(?p zw|9GmLVWV_zZ<^&address@hidden