From cdd759b7a7103621b968921d833d3befe7f74cf1 Mon Sep 17 00:00:00 2001 From: jiayue_liu_biology <35744343+JiayueLiuBMI@users.noreply.github.com> Date: Thu, 2 May 2024 11:54:25 -0500 Subject: [PATCH 1/9] Update armer.rst --- docs/source/sci_api_tutorial/armer.rst | 157 +++++++++++++++++++++++-- 1 file changed, 144 insertions(+), 13 deletions(-) diff --git a/docs/source/sci_api_tutorial/armer.rst b/docs/source/sci_api_tutorial/armer.rst index 65706e4..fd8ee90 100644 --- a/docs/source/sci_api_tutorial/armer.rst +++ b/docs/source/sci_api_tutorial/armer.rst @@ -2,21 +2,152 @@ Adaptive Resource Manager (ARMer) ============================================== -Overview +Briefs ============================================== -API Config Dict +ARMer is a software tool designed to manage and allocate computational resources dynamically, according to the specific needs of various sub-tasks within a computational workflow. Its primary objective is to enhance efficiency by ensuring that resources like CPUs (Central Processing Units) and GPUs (Graphics Processing Units) are used optimally, minimizing idle time and unnecessary resource reservation. +ARMer adjusts the allocation of resources based on the demands of specific sub-tasks in a workflow. For example, certain tasks might require more GPU power due to their graphic-intensive nature, while others might rely more heavily on the CPU for processing. ARMer assesses and allocates these resources in real-time to match these requirements. +In the context of enzyme modeling using EnzyHTP, ARMer is integrated into the workflow, which includes sub-tasks like mutant generation, molecular dynamics simulations, quantum mechanical calculations, and data analysis. Each of these stages has different computing needs, which ARMer manages effectively. + +Overview of ARMer's Main Functions +============================================== +This section provides an overview of the ``ARMer`` module, which is designed to manage job queues for running jobs on a cluster and interface with different Linux resource managers like Slurm. The general workflow of ARMer involves taking job commands, compiling the submission script, submitting and monitoring the job, and recording the completion of the job. From a data flow perspective, ARMer should function similarly to ``subprocess.run()``. One of the key features of ARMer is that it allows users to add support for their own clusters by creating new ClusterInterface classes. + +#### 1. **Config Job (Submission Script Generation)** +The `config_job` function serves as the constructor for creating a `ClusterJob` instance. It's responsible for setting up the submission script, which dictates how the job will be run on the HPC cluster. Here’s what it does: + +- **Commands and Environment Setup**: It takes a set of commands (specific tasks to be performed), environmental settings (required software or libraries), and resource keywords (CPU/GPU requirements) as inputs. +- **Script Generation**: Combines these elements into a script which includes directives to the scheduler (like SLURM or PBS) on how to allocate resources and execute the computational tasks. + +#### 2. **Submit** +Once the submission script is ready, the `submit` function is used to actually queue the job in the HPC system: + +- **Script Deployment**: The submission script is placed in the appropriate directory, ready for execution. +- **Job Submission**: The script is submitted to the cluster's job queue. This function handles any necessary configurations such as setting the directory for execution or adjusting the script path if needed. +- **Monitoring Setup**: It also sets up initial parameters for job monitoring, storing the job ID and other relevant information for later reference. + +#### 3. **Monitor (Wait to End)** +Monitoring is crucial for managing jobs on an HPC cluster: + +- **Check Job Status**: This function continuously checks the state of the job (running, pending, completed, cancelled, or error). +- **Completion Detection**: It waits for the job to end, either successfully or due to an error or cancellation, and can take appropriate actions based on the job's outcome, like logging or triggering dependent processes. + +Imports +============================================== + +In order to make use of the API, we should have the API loaded. + +.. code:: python + from subprocess import run + import re + import pytest + + import clusters + from armer import * + +Execute API + +Arguments and Examples (Vanderbilt Accre) ============================================== -| This section describe a soft-enforced standard format of - the configuration dictionary used as input of all the - Science APIs. -| For example: -| ``quantum.single_point()`` needs - to know what resource/account it needs to use when running - commands through ARMer. We have a ``cluster_job_config`` - argument in this function as a dictionary obtain this information. - The format of this dictionary is soft-enforced. - -TODO + +``env_settings_list`` + Environment settings in the submission script as a list of strings for commands in each line. + + (list[str]) + + Example: + .. code:: python + >>> env_settings_list = [ + ... 'module load GCC/6.4.0-2.28 OpenMPI/2.1.1', + ... 'module load Amber/17-Python-2.7.14', + ... 'module unload Python/2.7.14 numpy/1.13.1-Python-2.7.14' + ... ] + + +``res_keywords_dict_gpu`` + Resource settings as a dictionary indicating each keyword for GPU resources. + + (dict[str, str]) + + Example: + .. code:: python + >>> res_keywords_dict_gpu = { + ... 'core_type': 'gpu', + ... 'nodes': '1', + ... 'node_cores': '1', + ... 'job_name': 'job_name', + ... 'partition': 'maxwell', + ... 'mem_per_core': '32G', + ... 'walltime': '24:00:00', + ... 'account': 'xxx' + ... } + +The res_keywords_dict_gpu is a dictionary that represents the resource settings for requesting GPU resources on a cluster. The keys in this dictionary are the resource keywords, and their corresponding values are the desired settings for those keywords. +Here's what each key-value pair means: + +'core_type': 'gpu': This specifies that the job should be run on GPU cores. It can also be set as CPU. +'nodes': '1': This requests one node for the job. +'node_cores': '1': This requests one core per node. Since we're using GPUs, we typically request only one core per node. +'job_name': 'job_name': This sets the name of the job to "job_name". You can change this to a more descriptive name for your job. +'partition': 'maxwell': This specifies that the job should be submitted to the "maxwell" partition, which is likely a partition dedicated to GPU resources. +'mem_per_core': '32G': This requests 32 GB of memory per core. +'walltime': '24:00:00': This sets the maximum walltime (execution time) for the job to 24 hours. +'account': 'xxx': This specifies the account to be charged for the job's resource usage. You would need to replace "xxx" with your actual account name. + +This dictionary can be used as the res_keywords argument when configuring a job with the ARMer module, specifically when requesting GPU resources. By passing this dictionary, the job submission script will be generated with the appropriate resource settings for running the job on GPUs. + +``env_settings_str`` + Environment settings in the submission script as a string. + + (str) + + Example: + .. code:: python + >>> env_settings_str = '''module load GCC/6.4.0-2.28 OpenMPI/2.1.1 + ... module load Amber/17-Python-2.7.14 + ... module unload Python/2.7.14 numpy/1.13.1-Python-2.7.14''' + +``res_keywords_str`` + The res_keywords_str is a string that encapsulates the resource settings for a job submission script, typically used with a job scheduler such as SLURM. + + (str) + + Example: + .. code:: python + >>> res_keywords_str = '''#!/bin/bash + ... #SBATCH --nodes=1 + ... #SBATCH --tasks-per-node=24 + ... #SBATCH --job-name=job_name + ... #SBATCH --partition=production + ... #SBATCH --mem-per-cpu=4G + ... #SBATCH --time=24:00:00 + ... #SBATCH --account=xxx + ... ''' + + +Nodes: Specifies the number of compute nodes that the job should use. Here, the job is configured to use one node. +Tasks Per Node: Indicates the number of tasks to run on each node. In this context, it usually correlates with the number of processor cores to be used per node. Here, 24 tasks (or cores) per node are requested. +Job Name: Sets a name for the job, which can be useful for identifying the job within the queue or in reports generated by the scheduler. 'job_name' can be replaced with any descriptive name you prefer. +Partition: Assigns the job to a specific group of nodes or a partition. 'production' likely refers to a partition intended for regular, production-level computations. +Memory Per CPU: Allocates memory for each CPU used by the job. Here, each CPU is assigned 4 gigabytes. +Walltime: Sets the maximum duration for which the job is allowed to run. In this example, the job is allowed to run for up to 24 hours. If the job does not complete within this time, the scheduler will terminate it. +Account: Specifies the account code to be charged for the resources consumed by the job. This is important for systems where computing resources are allocated based on a project or departmental account. 'xxx' should be replaced with the actual account identifier. + +Each of these directives begins with #SBATCH, which is specific to the SLURM scheduler. This prefix is used by SLURM to differentiate script comments from SLURM directives. These settings are crucial for correctly configuring the computational resources required by the job, ensuring it runs efficiently within the constraints of the HPC environment. + + +Support your own HPC +============================================== +ARMer is designed to be highly adaptable, not only supporting the Vanderbilt ACCRE cluster but also capable of being customized for use with other high-performance computing (HPC) systems. By developing new ClusterInterface classes, users can tailor ARMer to meet the specific requirements and configurations of virtually any HPC environment. This flexibility allows ARMer to manage and optimize computational resources across a diverse range of systems, ensuring efficient and effective use of computing power wherever it is deployed. For more details on how to implement ARMer in your own HPC system, you can start by visiting this link. + + + + + + + + + + From 1ccd689155978a2aecece46bcb87de53a0284955 Mon Sep 17 00:00:00 2001 From: Jacqueline Liu Date: Tue, 28 May 2024 03:25:42 -0700 Subject: [PATCH 2/9] Jiayue added ARMer API tutorial --- docs/figures/armer_architect.png | Bin 0 -> 146519 bytes docs/source/sci_api_tutorial/armer.rst | 350 ++++++++++++++++--------- 2 files changed, 230 insertions(+), 120 deletions(-) create mode 100644 docs/figures/armer_architect.png diff --git a/docs/figures/armer_architect.png b/docs/figures/armer_architect.png new file mode 100644 index 0000000000000000000000000000000000000000..2c6e37440bb0fc359aa25714daa8dfefcfdb476e GIT binary patch literal 146519 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�V@OIF!z=eUCnrXXx%mRBk|i8#9eb@ zgZOG#E95BxgXP6LYNz#ARa0qYV>5iV_x@1F`cig$bJUTzrvgU>{$LtiSG&shS(h06 zVn!3k@B8YU;hWtu&yrBy!_j@zJGlM3Te9H|x8!=r)3twpxNUYt{dZI6V5w+9Y*ds% zv=hOlR3}Vrn`vlFn)HBv1c3tyq8mP$W$5n-E5YgsJQUMOj9=%bBgn*eOIu;Z{PAp$ zab;axhdWXyS68Cr+bpxhQBkwO3KdcHhj<)<^=_YFkUW*lxR+aYXQqO$?SOK z&V@-$R5|jEmJo+s&{+Y&7V|G+24ZGwc}iFWY#de)hx3={A>Mc~KQ5sqofM^od}G{b zc`oCV6BtR4;kWR-r-xF0i=}j^U}eR!%%JyJ{&qh-6rR_(CifSMc7KS@izX_%>ZA9k z!0^u!uqYEZ#CVonczY=o8_xwH67WUhxWZ$T#oCBClr1N?4>E6kQ7&#`NQFd5)kn)~ z_ef;Z6GJ(cau={P&5r%Z*mJH&V-S87m%W?w8k)pSY)xXREYWA;dj86VZKggsxuT@C zhjfjgzvyx-aHrUVN>CwApfFT`VFOk6G?UaAFXcp{xtbQPBpgKbk~Eej=>=tqJgi}S z!R=Vb!`tt!x73)yllw*r{+Kjp zTQtW>INknc59NA(>tentj)^1;C$;HJ^splnRa)XL+1t)5E*GHj-ClF@7#w`P;hrlx zq_xg!eX6W@+tNB%j0^G+@}-Z-vR3?0aq3{+u-5Mbf4n+hV`&LF>fC9?y~C4-ANf|x zViHRvez-os?J0Lxl~8w>+EKw^wyFM*6H0ykjtij>F-cwfA0Y&bj8A|KC(KQI$YGqgO%V$cXzO zDoJ&3cP0`MX$_x3$AW@nhO!d$K?2>NK*$j}V3j=F@8ciJl`w0`e9W|V$pnh^8e}3* z8)VRU%T1w&R)ppQmuN`MGg#72vc%o)OdkZUp?KZC!aw68CRDQ+{%VUz&XT-jA3)DC zAzc|}fnK|q@DS?YH&TR1*T)}Bkn$zjSvy=ig+aZ=1>Y2g^~Ia7;z)7B{0Ab6ASthrh7pKC z7$?THEuxLw{fyODHBpnsFye#hisUg`uu_=;J_}y8*nGVrQ|Dy;SXnC#>iIjx4=cWW zv(Hz&l;!k=@k5;w@bYfGyD-!ws4*xhgzhd#$+px)Hu&Mpl>=ifc<`brhjYL>!<@mYl7iv>@Fo@SRQ$D` zp1atc7H92&;Ke@fGTb}0Y8*-=bWOf_IKJ2%%i_#q|3qW)ln~C5gvMT+lW`8y5Lmka zV+pNQ?kgF$?sa5d)jz}6+3mi_!q2U;-wKSkYdqlQ)ciY&B6=J&FCF5lBHAA33xlrzPf}iX355-BPfF-t@BDX7*tpfEW@UOJ(w-PO2~h z&~U%=`$tZ!G41I&m7nj?*HzDvUJ9W{n8&?oIfvFf10B=yKjnABd_?$`Ctm6o042tl~&1;69=;X37o`yREH`-0a zk{v1T)p$LTf#_S0A{mO8E5eo${KRc~q|_pUuHq5wBSeM)JP1-j9P&u{S;j~%?ATF1B0Z)u9<&{8~vHIi(OYdPJJIv=auwbz+(;jTY+t zNfc~Jgt49$PBxkOWU5!tRuy&*-KH-BW4GMBT11biY-v#}=Qz0=!b zv(na!WY;Myz#D}LZLHw`3Q6=kU zS#-y}?^jlyRC;?B!`i7L9#YaS(KgKzdXkf-kJ>RoP@)Alc%gvA(Vf-UOLZK^6N8W< z*#E`pp^S0&U1>!o0C0-EJ;6|Ri0eLkE`9L%ikj;5XsfOjEz@F2e4B=c#&1$+v2h+} zqp5UhQ&;=bEf6-RM?#d}6Z<8u< z635=`7JI*@H-vQXdPxqkplUDa9i1P?axb<|&({z?+m{pucCnP^7?WD@VdbCNzu@?w zk}mYH|ItbMyFwL1p4>}{f|n73-cu51-K*$tf?0^%<|k#-(4Oz>;T4$cb~>(1;bRL! zW7r_!s`gcQ?8CP2%Pv^dhFpl#9uF%j?>d&vw1DWZu0)3yYE<5Tg1vh_`XzTDwj#kA z`ni&C2G(9*4$?+PlpLKW)=Sp#sg3UMeUWpv<9_G2NA(loPf3tsQ+3+kU;{cjgm2D@ zmDJG=Sf;hcuPN#Gn02a9^LdCcrBg-R*$;C{@L9UtTn*Q0xR-}PfeMu_iP6tAi)ji&6j z1(#|!>#)0D=Hd0p-bDh9XG?LzQ-NyIyEJ!Q^R5%)Nd?g9>EeM8~KJ}`Ywn$Q>=@_h$W};Y$ z;_{0qWKsp~ti8g)B;q8fWEn`@Q7ls!>5-ala=<&;snrnAIYgty3sDg3=``A#+K3sl zfJ4(cwcRd>g#)dZ?|iweMLX4mRr7p1?PC4#_t=^b@?ry8k$gHT4dfUwvxy_zEz3(4 z0!`RP;5*YcWZK98;3R&b6{D#Q z%TW7)DvRS|tgk*MSW)*QjYUL(sVs!O-2X8Or^uD;CEo zJYa~k^EyJog7hy9{Fr!abX~9{th%G9#f7- z?U3+x3OIOG`)ams?~QzFffPAplU&(iUXU8%m)IL?W2OCGyaUUagYN9ujY-IquNFS(X2uafH29; zKi_BfLjyammr7SOlIZ5jRuk<0 zI*u_$x0(eB-b&E;i^@OW89@c7=_I+iCsMtBk6y$+QsA(I|ui{m2w0nG_{^R~!dlc$?I|k&Ow4 zA%hI?91brCM4HDr`^B*1jftSwyHwSaHPPEI6k$A9*7Z|#ceye8^o6SP^_WrL+TnqK z7`%#&0nT?Z&~+oyrSl8#6bj=4a%|U&{YEp*Pmv0uIC$dSG>nr20d8E+0^0vD@He9y zS?Kb!74*>+j|855mN4~>xUIF)SlTV7$F>kn>Uy?R9DQ2O?#&M7a^eRQo$Ey7R5gfb zVrBLO6+Q23*xd{r3@agGvc>Xhc9@Dh_w@G)f~n7K(3L|X6a8dOCkJrH<73cwc(l{C z%LP-#P>Ru3^$6VjK?Pg1&j<7aYr-ua)rFo+=x+5l~Ag|WX*90}8DIT#h?CIRd*u~ES+!ap=IY0)YCeoYMs zm?D@fNED4U{*)y9a<>oyeg3P^yg?ThCJW>Dvy??K)>*-Na@4r zg*3JFNIi=A-`f4T^hlLKv)|}uj79$#{1Jon&AdjCWr@#g>4B7#j+4#Mm-eP#l4qX^ zPflrRCMdv^^I!o0lpeY$zVe}h3=%zw-Wv()I4AlA&8dci9zclO7IIg6tCn&AuYz;f ztT}veVuUQ=i2<%%VxI<)pjTXPwVlVUr{QW3YbV0gt?6J5a4lzutStNx#|IlnDod?u z=2P8EH)Gz$z_2i`QxWb(2>fE$mY$W;C*WQr^6cP3wWw{}c!2I1HGvWK`U_7?eMa!C z*kw#8-3Aw8z885T%^X0wwP|AZ!T+Dy;BG>&d0boaeJFww;Z$WMsxfprOJ%DGDY|Jx zJr^e zRtz(*B{lk0xIh9a9z;5Y3LJXh1;YiiD(-tgiXoE4Jiw=tj!VIUmKCp$gP?vvG;vz{bUzr|UoL@3~!s>S??^x|Jt&YLoO;4dGM#^z3SK^4bg(KPk z2U5C4g5&h9jfguEt_LGV3|qqFDef3wEbJoQN?$~U!Fiv;oxF)K#kRic%8`_3bSGHI zwcvXhVe28xox!g;?1D%wOFpHh=pkJ~VaAw{xWVW@~ET|heeZ9`zl zG6HEU0Xw*wzPP16r(domf=@J}CNZg6sk^}h@QKNM0%ykK#-M(G$vT{wqH8jrfSz_~3)d6#n5t zk6!y}sQ^OLEHR28wuvDPJdN?Q8ALcviD~<3%e!7R-;P*~)WfP)MC}+PW`$DMZ^U9g zd>-dPC*J7+O^sMHIcj5b!tFItWbiiu@t%H!du)|fgVfUa?lU4t#Wu?=fj~qX_W2Pi zchDmN1>|B$@fcQwFZxL!E$CYb%l-;S^yL4@YV=4xh=W)RHCv($2u&I8@`2JI5D8y0 zW}=>7{#EtY0Q%ugeaFDGyM@YcVuBBf2ny?9dX$ z`q6bQU3;}-zIYCvQX#$dVe&%2`z<~j>Hhn>)+Hf%O>Zv$Uj!NoWnR_akzyBQ@)ezA zmD)`?+6zb+nnEtUBwvF}!2C;D$ca2?FBJ7$MSF%IeAr%I@angUKyXbve^L`KW~t1y z;k2jf^QGNz+&dHE5jc=+?-!5K%Ue92a60vCxSjPX<#TxvSi^UoR$GKae~$Pp@L}fE zKfr!h)MfRUjq6l(^r#!XSvTu&mFzqQS>Z`h7tPDZLo*+?=8+quZUesH zRKgLdL0%7r_iP%>2oUsxXGNOW$v}P()DB0kJ0zXi(w@Rh)&&CCIgCY74c0%|d)hW4 zy`nxCNI6$aB%AyvNgl5riJO==kLZg~hn-F#_%(m|mTiE-ioo#MF`Spzg$w|I7 z(f0$4+EJ1v&7U;UNI1QGOD%XM^g3@~zNKDgq=Vfr3WXEL z%3)pjQ@Zg`?G~?WUP)e3X^5w$S>cxZ>8l*!`P-Sj^o80TqauBPvO({^`-DUyJ*;Q_ ztyKh_KYEzA{6|i_E^m+piuMsz%gk~jQyEYSvT_2^k?aONTmYiKZ9)7!+u=4;W^{f_ zVHN`(S(YzMq7_f(0V?s<^BgfZ``d4$>`?X5iYM?&V#9BTe0RZA6*f0U=_M43-(!v9 zr@q24w9cxHPn-{Vn3k-Ym?do7Jh#|L3S=FG=0ndqtj3kxHu;S+W(x%E_}Hj-n&FAm z!~?@Y8(v#~SWPku!mLBHR5L_m*M~HV*M3N4Q*3oyH&6FxBTW4*UBNii7V`JH+S|E?VHI}Tor{3i_Y*vhL3Q>8P3hGujM#YbQ zUeUHXM|*c5$$_fvT|hP}#dgqs<_rXgaTatp`{7T4U{XAKBryClM@T3xspsxti#6p-lg=m*mP<6)^g?U&nM>}8Lgm`M~v4BQ@4mG1d{({3m83W4aY zCOPe|x1jo^^HFol^g@4wFZuR3Z{l)>e{Cu{Hu@##)1Ka3m#T3MEx{fKr?M`o4%2F4 zz4DjPD$?RjNq7GfaVQtzN@rRC_>1SkAJ8qVAPv{6!NF0GXUVw&sFyO7`yV+XP#e6slEmqr zN_sZO%d3_r$F<`34Pb4k%l0b&x^<;K%zDmC9}raz(uR85(bR>z0$l|COv4Xy2>piU zQXHd}dLZu}2TDVWG4btaz>5N>aF~^p(~EZ6M`%gg{={Z2qnBIz!QC)(D^xGN+&b_J zx|{ur0c@aiNKcL*)acQI3|=}bL>~I$=X!}+W=4}GtxyvtjoRYLiMt{Xj%D|=Z=vkd z)PC1s0nu2|mXAOj%9eSdlE_Ch$UhQ5lX*hjUe+)fx4KIJ%uv>zuYs0aHxql^pX@>v zP>2}~x?UV~4Ys?#lMtcmT3gzi+r2U!LO{L$QO#RM`hVX4j^*PSB-CQok!cWW)sCRg`#7EyXIkkEZH0xSR>irukpK;P=cRmJmqN)%3CsVfGv07gGFZT_b4nA z!Z3u#M#f$lU561<<&Y0F6h+7WsTOIVT{8F?UE2A9VM*eOKUHthZbZ$k%;O3Fm2sNK z^wOS-=LnBm*^}CY$JGtCRbxyQi*^#WRVT+xR*vg-`PfVkaQI+fdvTa&R`%Uv}|naXaSc@%8=Oo1DWthZX4KPHcoZlv?Rpv6a zXsR11&3s!=y74_dWYw$lWD-|zFZO1FFlw2(@l6Yy2UB=wJ|%GsIdLAv$P-7Akz}NN zt~V$~3jAOIhY5-Nj>E+ZM)Ozl{~QgHh3F;F^8MZB7-rR|Td)n*2@7U_k4C`t*Z9$> zfWZitnA0-Z4d5O;P&kE?=6)x>Nv{mLHUy?z}S(x;@G#LkToEnj>D;BGa5YJ`^tvJCG57?=+KJ7iIq5(8JeH_h9ING z@j#u^Xb^X~<_>64&!ST*E~(7CA-D(TGd7L+Y$uTWo3q8~5{<=TwW|Aukh@{a^&2qf zZlz|n)rYf92OVV_rs5c3u^@x0BYrOT+#L}x-H%oG_#L>_LEd15a$vSBDv^6tFJnR^ z*a}=lg_~%x2?rCwJRgRomb?TS*rk^FU?QVyBlFAA43USBHG6Vn#rJ;Kmk0BUff(cq z=Q|S*tQyrmRoIt>UyAOp&D0yM8h0o;osV?|3*M5w$QVK}Qqi>OT48~#Uv0$eG(uNn ziB8*+oZls&aNM3O`}@5gh-bPIcH0_G@kC~hL!P)cCyzO7Lbm9>Ix`OOb8M`L*&ri< zE1?2obv*qZpoHmn4 zfxY6Yd)I})0{t-V&GKjt&?@8B2Ziz2%-T+iQd3|5lwG}RhiAA_*ZzyK)=_^=Et-xz zZy$Pkam909;iOZ_j1-w|gM4t45y0%kAfbx-;peEEPEidnM5Fc@E~G8z?g$_XSE*8j z=~)Vaj>_)KA8u7%TM>r&Jc%=S2`BM2zl>silaRM-0;q!0bISqEWxSE z*%0SqQCaJ5*$9_K_YXE?e0;B4KEQ!H1SmI$EQxT(aK6*Pv<3qFnw(EC8ADu;d8w}b z%Wl_MKT6l)HEn|$!}18#)tKPOM&ZCUF?g#+NrTn)T=74a$Gbh#+!Nf|Rx!7=?$ATP zwX*^4GNI}IbRY|oIjAn;o!E%cCqvP#s`6FSN+g6_TOy2LXQnULjH891{#8l8rf(|R z!`+pW@AH>Dg<^Pmay;7ESzU>HHUyEwEPk%F?D%fz8Zw#wqu`DlEnbU6Cl4iaPdE|x z7y)}O&gsc4a0lYW%jjwa*s(Yc*vIr603vuOhv~jz^L#255l#~POwIc?E5*^>umwDr zD`484!gUgd<3?YFs894e zwV|_O+sgCK5#%Pt8eCq*qwGlzl~oKQQ^OWhEJnn}xo3t0aW~RSfKurR$8l<`Y)fgR z|NI;%0f(MWL~v{^cCbhe)4U!V^jY5V?NZhsEIf~S6L1ql#EgCyNod?=8iTJT;*_jT#T6E4QFLjy1 z+RT{Q`^dA2bPbgH3&1FB%5rbKZWF&MYkSEumwV%nTHcAT ze{DKsRO{-GbKJrK9mRGZu&{2n=e&1}8Hpku3D$OI$c4dhHkqd|pe#s-6$j4OyL60IFnnwl#8fh1b1W z#c>N5l`B;99UjOBQ8;i7RA7-s05dEi%1`+n7><14LxAC6M94or1SZ)7)0B`1 zXlr1VdLx{~ZpmPgO6io7Y2|1nChEA{I&#-Co`*ghyY*M3*M-Hs#2~q*hSf`2!(~AL zXN;<l)qb-{#m#G?K=y16vu*YIu3(y7x- zM@P7cBT04{*tb6!XwN9yKgGsbG&)(%Rd&@`AI(;DDEK#38hrk)6=Mn>ek78-UiD8% zx{&Vz)TINK&zdaH4h86nG=TgK3-%wAB%Dqyj2}Gda4)HOIvYLuDx2}2c;%Y!q9MSJ)uN;vSTTBPkQe(aUt#XS(lZ5=TzNZSkUyb#NI0~Rg~bm4x? z#=oP?lAH=_o|S$=5dDB4n$Gh*6UoAXu#6}z zK>{oX(|;}FAB>1zMomcr&@Wy(eUWUw)ar^sVBV9#WGGo_Po4jy{$wwx6=!Zse519u zHh!^IydopgH`R~W^IEU8D(q~&Hbd~217DgVO$K4F)<0_*%rpuK?~fw8u?OOB($;+x z$$S|&F14S}NnKp6^K%+st+Pmcja`x zg0TVy4+DoPxdWcVx%z3L^*u|Kj-A6zgg1Btj+(sF>}S-72dAOVF{G5;J@+g86tbIc zm#ItJ%|^p4cfv~tx7mh*ciijunYlE+Ov* z(fpkoQMq9tiU2xJ5wii^(`FjsTGfHdY5B-dvi_Fi*5WC<&c2;fY2sDGwYOlwozFuI zQyeb6uSq-3y{^Rx>%zpb?`%v?@`~JUkr_$IaRz-GUO%?Yic^PYp&QS~CVkT5dvw>27qA<}kr9?u^M~3=%c!wwl|lZM zKwbtGD_!bhsNK@mS<=dtV%##S=W&wM!&Uf$qu`oA#I4a|%nG*%{V~-AtC1lsUDO^w z8-ssHBoT*sf{2M+GS^s&O*h`7q9#>0Wd@ixN>V3^!VeVqn-VDh~eCq;9Ha9*P)Ki#(QrPfzR(+jn8HjVl_m>Wv%=9ibn8l z7U3J0yg`a;-j)0ZA*kV)Y^%WE*c?h)tTY^00ETj5sm1Lfbh33|Lc*Ndhj57Xub#d} zzh?s4r8c(CvF}ItqdC>YG@2HrjCM4)90NCY4F*Ps58w#F$=5H9%W4Bb|6>bAo;fo!0-vG+?%NKNMC;~JQ&AyEJLE+GV8aPck1Ea=>0 zi_c+hO_l1L$qR^Bgs~CLorsP<76yaE2t1YhEYEdm8<}Q%MCkD2UC|(9clvKEM1A@1 zgUzi1Ejpj+^eYb6KcT069#G{ly8c7wpi`c9DyFuk9kFXP!rqU=))sCpewO2=&7r&+c4h*pQ-vOdxNY-H-tKa`)OLUTTe#+;J7(MeB*Gx z%$IFhZE$DTm`(DQy;)XU>g*JScga(qF6X~X3hJtOQ<3lZaz8IwO--7eaTDLL81)Kf zRkv(%AfYQ)=ID}l=bJh0$eLZ2*?T)#>OJ$vIJxbHk1F(VolGORA5FG2h=4=7f!fuN z%y_Y9#iNhFSuTLsf^d(J)%2PEyR&+!DB~Igu9er&;9ESXrp{CEp{)v`- z6q{RR`XhnoR3V9R8{3mv4*MX~0CAjIIml zH6~^1HT_P6Bef<~6!4iJ-*h3s(?tUZ3w1G2FM|kn@WY(f;E~<``^aR3d4H$(89?3O ze}2CILNK9FoH_aBoaqk69jNy2xGAc!P=Co_|IgcCG4iE82scswGSLB1awgbiAjImj zA|D|5QvR(L8QXCQ7pT5PHd z-~0K7j^`hTNQ?~$v{?Imz;nPCcR|yn!!*)w?>;>6_|4JiprE=&-8IZ`!tly0C)}eM zL|{v?Te^182&@Pifhj-!+3xAB!0cxb;umd&0w}H7^|hzKbm;L8#x^pRXHf0edaWl|Mhg z4j58xdI&PIHXQ+IPKankeD}vRfqkqZ|LcK%K=_9FHyqh@`EqBX=i*>~W)BDk-|#HGdh5jpf#`4q5VXjoRi(wu!C``OKxKr z4wobAzhTmUrZErf+h+w^5AuLc`fmpc8PSDbd6 zGECK`W7GeHeE)s>zu_N9*St~xsG$y5ZNj8h2~tbd7;*al`z>VX;b4cuH{D;*j(`pc z8A}!PYE`dBA)re9KR=BI{hAmC2IlE$F+j-?2Id0{R2aIyh?rm~7K?Zc=k!bzL4n1a z`NdD&Zb^9w1oE#R2HOKOk;IkTLYM2z9HT2sf0F2->Iy$&qh%#S3WTHmDoiN$nKckr zWz?hX58IMU^P#6l9w_df$ZI{i*t@d)q4ZS9vvt2W*j6x zN4}p2;6nvpMwH@P)@M-M{Ni`iqWg|}52esFfW77bI5Tp>$^=Lljd&=#?qZ64PAOG1 z-3&=p4%)cFBQ%O(S`qV9VSC-_zn|K^K#tBa<9082RbmjD1wBB05sTN_1U>p8emoAi z{aDEluS(b^vqAy^U?8jh0Kxke+fEFL7;t7&3~+NJ)QAMuAJi%hK1ga{G) z7c)9-#dS-roTT&i8-V5eG==jg$X#IOLH&)MekZf=QGf(dUN}r#GIf@u#wkJJ&nnWfns3H8#dyks(CrIX=I%+uIB+H z(Y8oq@f*chE?o&*QjAn}6R$sw8mNnb)+0cCVde)o<`L>(5BVqlfFskUXVafD89qi| z@m9lBh=@@WA^h#ck^>ae3>zth+kkd^(WKJzQ6bU!63)c`q1ub;K4Jt;7)e!c5$~;F zN133JvvzL*oUHd`7QIxp+j~G*$^%C`i#sb)EC2Z;Y*HxEh;tiyOVdQ%9Mi=*y;{TP z>MZiYp}k6tIc@Etn+7T!)oL4ry!6bZGF!@>ne5Ffv~#~XwL08?J}5m{Mm!8U`V(re z!*W!#fWlcBT$KY3H}S8)QB65Gl_N4qhWjY^x=rzHgZlk^f(5S!ImB#y=0x1m()ML| z+sMh{LUs9O&HIYvvWA9D#mhW^_IVR^Cn8t3KZ}CLeiX?x)>}K zW*$DfoZTg2c=Hp!b$vgLW3D7O6tZk?cYL60(HgLL`Zxbr?du`hJmlK5_FzcN(}L53 z#IAdUv#U%nfhs!2it#qVp_m&ymKlPMT6XA+)5JX35z_a=rI9;&1k|4|tpKk2g>2un z6N-Kv09i+!(Dq+EFCaq2UKd3=u~5qO23UA{7ET}s%f!21F7l75@EVD)p1}Lnif$o$ z2*pR8)|7da+~02rmdO?i?Ct?Zt3nzrx0YZYaZN)@zuL{PQ>)T2|JA~+-(x7}QvJdj z(G~R-`0fD<0DpqaW*bbEE`JoA1AR6UlQT3>L{$Nst7# ze-=E7MH5Nl&yA)R>akq~V?LUxaR;>I$xxbQv@)GE?rX`v2bNAvx4|!=cwxDWt#!j+ zgmC-gP%JJ$jy2oUu8)z|s?HXXt zKLh;=@(^EsHwxi0_Ds5+RFW$(FsmBkpp$c7#To!tUT>SnyI3GzGt;RMn4)g*2v20a{5Yx7rASgFT;l_LUo zF`$u~K`a*ggUm=#2lNP6JbO89N1RGf0MO*7(gd5gGlO>_xH)njRDzWZaL(~f3psqJ zk>T`cuA{z%Yex`@KuKZ=7+Hcf=m0jdh#yRDR&m-?FSZE*W3>|O5MsfzuG%f2khf!N zWMKmC`p>R(dDT8#^Ble4RZuhJ0|%u${<<=E>mWFYS2-K^LP@N)TAaiE3!mb7yTksr z&7l0Zm{Dc0`59qmI0}tU?G&_0g`6clIJs>X2)aB^R~vQwg7Fs|apXc_<8Sll7dAPj zqyShvRpAg|%jNLDTfF_DAWMkMWhprUV3l9OxK;xJ^U6Jk=lfOTOiRCA>RIyXY>z-K zW_~UkYa!!B^@B^9&3ZCX$w?{XGYNUX6_mRYy2Q4dtlD<<06?+L;!!@$VY^$-42ubL zsMntjGnbWW$X6dT&^+>^)W-B>`#}<4yQfP$@RW4V8lSC(Ke_FOd;N5gdM@+O%JVE~ zBR?yw(9U1P0bto1hlhM$@#OdOEMm+hLQMMEhM!0$xLlf2se&A5BupGn$2Kwxp|GQV zXgLPDg_(XMH~yZl?-4@q%h~|`eLV-?&{D!0Mq{ce=Z3s!o94IE^eTUuwY>8BMV2+B zWlb4$T7e*oEv=yQ@Rd`&$RescV55JToyfH?`-p#WYuR|2WC*z@J{X+zcW2wcn|iFj z2&d)UZ7SG3Yl&AlT+Lp17q6+v*7t=i9kw>)GM_|pf2Z9Z!i<*dUNtz>`msJA*8oSU)x<;W;&09EJ z&yli_)qi98sbBVsv8Uh_n1iWqGCd_ML6`NC?59BT>&>#dOag%-^;9q{6fh+G54y=A zpmm1Q><~`QksY;HC;j7$Il6^J0bUQ3ds-C80Z%SWqc~?T9&`0As(B96f|aFQv3E=B z1zwWvG>Wg_si?s64|*H^rKFooqUD!Z7LnwU`&)pcJ(cKSprn%(x@|m(ap7iFyJEK< zRJr7_#eYkY=E*rA-ay%XY9lFdQ6M+9Oo^7c7-CXH)t#=Ub6>Wka8TsNMT515G2@Qo z(Ai|xI>SgMC3;t+^YATnHt6e7MGw&wi%{d5s%}-Q5&mvu=Ha&VdbraKnbrE$(*4qt zf?Tu2O=}C)*x`KOCnl?Cli-A)O;U)B=t9BUy+6%{I2Prud1&qd&gL~!$`^i-NJ$Qq zUH9QPhaR7Qy4x_E-Yqm^FGs&?4d+=?cMog)b)>-98eOL*r-Ud@bQIb1G<2KPNY;u* zh+){w8SOsAH$C1TOD7>-or3CXxE}60%PO@vhL|Su7}4dlmK&k+Xmqo!e@?z0&NsA2 zD%Z=RHQ%9+;nGu}&!g7&hP5D?{=3e(9#^J?zR2fEZv-It-SqvPZdkz)Q|!wUUe!*IH(T*gBR`ee(B|GJFFN07 z-k)wBLww<(iN-D75@0^m`hKA6s-L5c_=}1s=M!{pc!lJB18k?yy)tJ2%Wm3^r}-lD z)6IP7(|COA=f049N?*eO=LC}g#m&ySNHJPG?EVG#Ha^K2Vj>!&+`-M}NVaHr+2 zi%sKY)1&NYSz0JS?%mJi1po~HJ=J>z%IIp|j;Wp2Zwja#^>fVsh@@#=CSO zLUPtHE}AAztpFfwXvu3eU1f0-+Qc(8WWyX#&HE;` zrpi}PA^fyko^Y2fx0|~kG48~YyuCSS3o)>DuG+a*gvd79jkqSGjD;z*zT z&GHMIjaZfGUOM4bFS9Pq^1e$bTz6^jZDaiV{;s=YbsLLGr<(S^;bud7rxS#q_=Rgn zeWy*TXNt)o;TMudeVSnxgshwccY?bV0V7L&Fen$lX$_8vE;?`Xs$$5qYX1^SEkgOR zp~^hp*SzWl&oj_UsGhB(xxgV_?6$=}O$i~6Gu>j@isQ4jNTmI`$qYC5%bL8!_b|6? z_LD_Rk$KJGPbro-1;@``no2|hoAG?N zUoHLkC;VT+wSIRSn3Bsi@)+U>AukS9>3!p9r%JhTE)|uATK+DYHRCE)DgJ$7m@DZM zJvE#?ieSL2(^S(Huv=M#Gy4cVDlX^`@41D&F&v3XPzf>sd5%{jmK)5}T95g@Cku~jxd8Du z$rk7Xrxo7KHmGNgYth3Pd(pog)ui^z?Y!%Cz9arHksSWM9 zhRZ`x==1Au63ekvZ7x`AdLfbf#81~fU!Kn_7;oj%^-y%f$07L&4D9L2-{z+EcV3(L zVihm8!}uGJ5f5%qg*(}4o{LuNXmqzXvuJm}y(Bd|Fp+x%P{zIwp)|QS=7$_XwHKx( zT)&|GBW7-jdCbOdYh=w`Qyn3uMdt|@D>0GtF56so%Mf;*2)vmc=7WL&%MAT(@}p_V zg{x0gkwKmnM6nsf$)Xug#b5jalLJ%Odnl>5?Ci8m1NiKr*m%e?V)lvb2wDt@NaH~+2O}IMdxDpvVlABA={eE6D#(=8s}bc^>i@z zee!xMc$*OB>nrf~PV)8z-NTo>#>NC zj+p~iOx%TylTeVVT_i>(22K;xHj_j3>+)T$X>VdCtne2(KCH9rR0};n9grwJHao|9 z+?___N%LTB)7NaSdP(GGjQYokl(V6?x0YJpE`g9$Zuae(Uh=GgLlXS13B{nj02`JcO2*Y+_6v@Ub*_kL@^v9|R1)9rdTY;!btPHuoH+6( zKBCqi?or_i<6b@E3r?j+$(Rx|=NgqsmP+5rGhg|KR<-{&Ja3MkVfP=wQd-1kh#D+s z`^E7A+6BOMFyx+@L}ll?-UVC>TSv8KiVF*){qnWP)hhPn@OzamGAMzN#CWAB zt5c#SrMAavkM!_{$1j!4*KKA85t(vY5O0+t{Ah=zl1?t3l$}UjETBVtxfsWF43by& zfac~Rc+)4R%Ef&U$8o;`9>1~DCCqrc}X{z9Vb=oD1u53~L=#wGhqUcG+u z6%r7fjf=#vuXGXAjX2s6g?OIO&}}CCLy9B;S}MG}cfK!CY6n%X(^{Faqe7JrwgVb3 zW;COF_30y2IT*^bm1-mLCzY*+wa-9oa;@BEQMkd;X;fC6xnZWn-eZOUkI<9-s ztkA5)GWAxtpY78>Y=|+gNpIn^oz3zYyXmbjnVzY7&3;k!lbs=6BO@ynT-RGZmq^(h zh4!I^5bt#oaC*(YnJFetl5|JH$L;RBuAt z=Q2oCX*w+zf;Hb`bOs-Sb%)yu)0C@?kQ!oL7Z;MqeV5R~XB7KT0w3vx{TlWR?0bBK zTMH{FAVul8PidePoW7wDoA88KHJZa zF%wJ+Lp&xIykzES1+cDn?FYwGrF(N zVLWvc6KtU?v+%Gt&`HA+dDRCxHK`H8gb`8su3?=0B3M_D;0j9CYnmkBIoK}R!xS0r zv;Wy%-@eS)nw1;UL};~)$0_?=z%;nZ+s{_?Z^2Nz(u1}DK9jR640?y0vcoS6LqzV#$C6yJ}!fLm0ty8n>wFT|(0nR-PZIr$% z%T64_!r^9oQIIMiy%~zM&SEH|hx* zTUSm4A|r{gk8xAs9bZ#wR#S4f>BFQSL_fc^+4K6P?^x;O8pzY`7%K<+-8IirzW`&y zkF4+z|JIltvRtH%FO0RQJUocKD1fBmU$Bvc*}8H+R^G-c+0xhNI)o>0Xfwn`_-HW7 zMMA$q<813RXV;h`Y%labP%Ac>W?!@vTG^gq{SOKgrj_R=u37G*`?+J~)mR&BMO;~mII5!9fMy*BMjj|P@+V>G|ijakfq30Hk`BdxRC>7x!l=Z#c>4kv^2?}7oUJLgA778c@k#>5p2gQkSQjzl{td){KA7nfNPCai0u(o63xMWf2 z5U{8tD%uO|${ic{v4dH^pLCbxlmnM8e8Oxl=4dZ<4Mm#UeXMtpE^;8mDg{{wS>DU1 zA}>&Dl9Fz+n3EOdprR_!K}`17Z-Z}>YMw6#8O=*ofDgPiuCHLW?skfY!-jtBAgbW@ z=~tYuVXeRi(Rx8h7t;Nr`&Hd@GKiPnR8<2gC|ru2zLV_gB8g)N-7ntmC!v+a4PITX z%v53TiB*lacW*5_j?HpJVJN$ouf(V9_+6gPnq*jdh?QyOloUISv&Y33=~ zIjl$;g`1<`cut3$2O^?bBV5APt%hQf(T(MbWupV=r49imM4AwW!EZgV^75eXc~Mll zBV9S@j-hmNmPXKbY*HekUYJWFGkrPt`=qS2eI_UG*7xe=wPwf6_M4nU%T3WRo9O+~zXsn-Yh?Y-wuKKObp z5We`|_XdpQ?*OridmcCMslXzUT%0*>;jkZDwG3@bwXCXrSX0LjG#aFzsH|zCnJT^* z%hW^J4n#ztylULxup%&1eMd~V_(v!kM$H%#Qeh2d29ZR~&p&jY0k`mCt%T@g>_qNS zfmFi(M!kv;Yh_$>H+s3ga%DpILzqfl78EfKr^oXLNk6RmCLW2@ivx^2t8A>v$eKh; z0b$a8>p{Dc*&{n%M-;2>UZsszd=X9P6Yi&rEXzGna}X|?kJ5DaJ$fj)VxsGci6bF1 zKS^U^VN&m4H>Ds@YRvQVzm5$L5huWTrMiKr$XU9|_`*b9AEkN6T982e15(IM^1`Ng z9akl}GFaAJ?|o5+DuK4E>M<4apRT7pigkkV21GurM) zyX0%>%3!be%df-@)1zIsmq}JYq+OvMqVsbs-UqF^9ly?&NgiN^2TXN}%H8+^yKtm3Bp~Dh~^uw@1 z72o{_vLk)CgGOpi=__kx&qkF7(1HE5ax9DQGF_wZD*u`!@{NWSvr9iqjA!L0P9xFu zoD}1R#JGN_rUg#_KMT&2YN`jVF;(z$N!u(0Ws1}6A87(gO}7gM@bc-Yz$MZ{T=oh` zY)Lg}UTdJDexKWy59{<*l?^}DeYKkCs-7gX$$k#gXrI2Xg<#kHZB5sY@T-FIf$mkU zylV_8^PTy(x-okMRk#d>GnxgZXPzkL3>zB$*p^)$Zb&^WppWvf&kb!-0Ty?`kV^DU zDvnQo?to2dj567Q#dq7(reN~D4!#LwpcP?{6m{G9?- zde%e_PjLA`|JGWTLZyHw++=C7?2%YklZ znMVx;F`srmLb_h}fgO(HN2TE3lxhC7BnzEM__9mPuA44qd8)Q}@L)6b!wZUKBMuV> zANm4^Rwm`yXK4}i-#%J%;&LKUansH;v_GN?9Wh{7XB*hIhb4vHV6nGsn~PYoy7d3%08ph75Kx-I`?DH&(F0SSj!Fz5WRoQWQn75Ixb$TJbt6 zxOI?=)e63an6_BTk*Mo-+W>`P2(e(Y$k%j-=dB3~xis1!zQFkBV0QE?J8a)(DmAg&wVlALM&w~;kgsgBt-V;M zid#5&u3+t(Xj;;6(W&CtzwuqBDj_s^Kckz=$H;ayHpQWncMm75h-3z;+fvvHE~{Fr zlXYAr3~ap;-u=mq1u2=^q}w)ec%RX_&o%_UKT(YhWj*T82a6Yo#re6*!gPX=^;@e_ z^*^jdjq#c$?NDu4zzN-7goUY9FQ@cCY58klZ)glD>?Kfj)%q+al{;ooiw%qpbK}OY zPFWe(ejUJx^NPTjPNYQABamM-S#xH_a>MJsS@i9g_3H0VfXl8fXZU}jzPP!WXy#&O z-dmz_D7Bm>oyU#45gKus{SvsIu>upWXMj3C`r|G7T>5LkShtm99ED6>7d_YAS1sWj z9O)!#)G27NfwtZ+|4-8slQqMr#oAKlqE`=%Dm6=3wHeg4jdGIR`_cR)VYxx+Vii=k zRr7b^Q7ZJg>Z@p%7{uDK#2jT&i-qE+u0z zk76bxoz<0C@+}Z5KFAujkUbkwG>6o|EfaM%yf$&cDE>9; z{4K7*P$U=oSezEWbebQHnB6&-?%17k3-Ml`k0z_4h>29i9M#98!H;S~J+Pe`5#I!K z5T~{cLndQIZaQRdRMtDiwYJSVF^#`~!)<%8 zT%r&8klk*ZK54-vXoPq>cm!iiOQXiAKU(Ftt5n~lfn0SU;fJ9?^=3J&zGb1di=OEB zUlm7Ishx-Pb_eHSckHBwUg86xL*Mon3h&*(S|v?Bt&7WW!*^RC^URlsVojp9lfc?a(Fsc2o2 zA(_g*UeA>FQjiSN>qEQ8N>Ky1-@5O^g_!oKPASoumx+VSV5ElI2p7KdqOmsgYfmVP#u7TdXBm0&Pohl6~>9hds(Vr$CNk71Y1zcqaYT<{c>K3!n^-;_f z^Vo+Qu?^%RuLkJEL%yEO){4|peU=7m_6L>EpREZ(rNTv$$lOu8Q!|IvEK1f$W`7!r zFqO2P_IhS4uV6vAo~3b6#h(m+fvG?w499Spm&^v=o-%yJH z&V_+B?26Z|3D+d1Q(oG0bp=4nWQ{$ou8R`BCg2=dQFrZ{Qy>p(QLJ|7Dy6NR#$cyy zi0nRDeYI4F z>)fm!hzL_k_oBs(gx_ef9pb>{x<5(Hh37chE`fHYCcG}bl&zMl+7@wa)Dx{)rB4N$ z>w67(hS8O=Eg_kmK+sKx`r6_-7ILb-Ew;6Ul&L@T;xPQF?;;K&idIxMt<=2}Fm!j0(cXpnSv{i#jBS^2rBJw}HuLS?7< z^0e8U!7lA8Zr<=6LuU#sR!RgKtAPr^D?)GN)2n}*lE8J=Cs9@-fezKiFfd`K-B-_l4!CW;}AoZ$h5vZCr z5IOfe79+jS;rqv5IwSKNHiQHBM7ag=CWEsgaLL0y{Q;JyF&dG)2lYax$Y>)TWuaO%`VKMZGA25u$j9*;7Pto5#ofyfUL72iyC|St`;Zb2 zt7k$$KsmJgx(EoC*LxU-RlzI29aMF#a}WMCxTZl(FB6Gue|p)L-=X`)3%49nhf-Y~ z8hqJA`P;5Rjb}D22DW9JHK0ja{qUTeUDk|P0WTH~OH=p1h1*w3K(;gI@0V+7c}zHF z^R2m>m!|J-{p54m56qCHJ)tI-5i7~GB!0D?0$$ck_ZkkZvtyewg{dz|@=fTZF|;FI zUPyf!l$B-!{aFjI_EfDIURiFWw(=eI7vscn0tzVeHZi+A>EX^SiU#i5M!S1ivTncX z%kMS!8l8)dVFr)z?+Rl9o~CoXIj$at2udR2WTwa-F>H%;VF%SO9AV5a}=b4S^1|zqK}^5$=?~1a7O1*vq_=e_#Ga*G)L`Q9i)w z7ulzh|M8RV(F|4KK>Ej}=x|s&6gVtQBxaOpMqS$tB!B!1XKHHp^F#?F#kFM}q!9cL zIW@h45Y0r9|L8A^Kt>65@rh1!LCuxyJJhFhzM$|!S0hxan7{C1)z-V_KMkM?`mXJ+ z*1%h?-r}-;c)Gsy+*z&rR%Ca?Tp5yBfbnEe!?VXtmP(5iUmy&Hh=rL0MSA`U?eymk&g@PJnI+h9CJ0*q>4|;X66S;bxQ+#mQ~@G(KS!&k zeM0R@uPtdAR{PbhjV(U)HwWs?6MXKOjp~0VW%z1?kd?1N*k?M&L^x6P=r3NVom!xS zVaOhOhdl`?!%F&gp(ANNYe&vDpuBT2sw2#4NGp+*4bTiv>2Bh~W1OH?vOehnD+;oL8lHQ{9d%nAjJlTFpDc5+xSBHk!j5CBFTDD2X=P%S zESNn_sOv^hCukv2^sBsP`nT{p7jEX+@Q04BQrs~;Tvq9%Zc)hzS9Prr?X{o7oNUyp z1hkW#>VElCSBm_G8Xb@rROKqHv)TFT(QH9KybDJ{7@j*7OSy5!yCs?ZURbQ>iK^(^tUYf7+VwKZu#&&=t zFOv#BQD}uoYgELQcot}MX_#Ms6IUUI5zpvTkW%l!BZQ$?dAQaF%_#$TPGdBA@ z;HSdb#2x%K`Fa{{t4R&VH!Uyn80?_&@6Y3H!7Vq&HU|qyRwQoWV6MPXVa9R{a^Dd# zmCuLjV;Vgt@I`8bfEY zs4-RiA%Z(qhjqn~qZBnXq?DJ+V9CVf$wSN4W3b>T@&fhF$eQ$VUea(FQWyfgKg^fc z3sO<*xm-7&09hV^#CgMWSdlcUU@c7CLa?i7@mHtK-~2VK^HP2k3M4utBQdppVqcvM zZJ!`sGDB_x!XS1KR-BS_dq6_Ou)vEB?E3)>VlR0TSjpVVMPYT)@%>e)unyTl9W=PV z>JSb}f3B9&fN4QHYQLACpqpD|5vECon~4XSg;k#XKK=-|=xMG4;Z^0Bfu^wln6z zR*Q|t0ELa(gEePqk(d~W|Hd;$#*T4-xIdbFbooh<&!8Exl-9@psWraQno%x3Y!wE3*H8EJ&U6r`~pK4XR+L`5+@#Qx8 zyx3>W@)h%DWUG(rw9os(VXPXl!?{XT1wd3l_vfojTBZr&JDwF~*@bbXOgbC}d|lE{ zCSFGCnQ4o0_}bp{4^mK!0UGB{%=avKbEtJ_Wr7o;uQrj&p0M?#N`kNwHLJdU(Qd=P zu9#(^Xr~;gj!9qwz21j*$;dA%MnGD#)u)e;35WSdW?>W}t=G#sVI;)^e}jwR)vS|a ze83@&i>21qC18>5@<31pngV8vS;USyA2(2OaP@wyEeP8&Cz<}zzV>^BLnnvD{WDta z0qzKTO^p(iO%65)wO9+_aG3);s~>?~I(}LIarBUaLMbu2PjuNxQ+5{O3WIkR=o}Nl zcQHYFopj>;sP7A#i?=9=nbkYtmb)C|8dAHTit+Fle*M8$ojV@AnzNIQ)Av`M{^LAF z7Z4_$N<&NB@zEJJBCy-C6XkciT}1pV6^qY^S!aeGXLq~Opw42J%XLk}6pcb>67kOf zE`O0*d}O*WLD*&fI2Wm$l4ks?_CR8QpzppJEreTIS7Ad7FW9-L_#XrYudzK^h~}ncumjm? zLmGZt1Xe&fAS{>{Q^0Yu8iFR&aZG(l%1DHh&-OrJ`RED4`^Q`rsZiI?wG~6>C($zM z$(z0!jzLQFf8L!_68(tmeUq zU!y`$gVS9JyBhB;e7kM5aLJZTtDE5@oSC4;#91fvBP5sSdU6bs%W3RxPKl8X5S-15 z?zrEE?N+H|z5F@M%E|``vj4MTlYsOFvkcKhg+CZ_!{vq9at^ER3Z~M9p1r)==(dLILa?2n6Dl#_9F7~W}>kofay;nXb&Nia1STjvv zIr1>Q&UDXcr5STDpSysSOd}ry<@C|gUzw+DNwOOec0n}nLr9m=vUpXUWQARzf7;k6 z;l%dOo=b`6cFIi}fO>bQ%osQiAUe!>@(1CfCdGSG%$d1;HFOQ|Fm*1M|YC$Fv~w;4aCDGy0Wa_?##`~h-5aN!)~T92-cL zk+Ax^cdkD3fakP2K4QCXS^G_JXx!h1ogvU?gs@% zUyZ3a>G2%7sXp}UadRPXb*A%2k@h0F5;Nc-w%TW*oi>&J@Vs}#mt+;Xmt|iyQw*t# z-x9;jlu&oGNHmdGmw)KB3`rl3Rs1}F%U0;6l{T0ji?|%Ug*6`|_kGp)QfB>$@jV9k zCzI93_ow}I1GV*qnKP=Csa7BQehmIVJ(lVAjtZ-wLF{?ZZpHq}EJM(yJ>lVgaP^u& z$P5KfURYlwnf^M1kyhB?RSk}za9f}jlK7se^2F}?kocl<2%5vwlvx+C7)_H6S511e;3J;Pp-v0hXRNm*Lup0`^E4Uzxd%_Lm!&J-sXy7Lu}oTJp5BO5gbcTVoy)rN4EK{nt*S;_m3DpU{s1{8SHKk;eTBvio2rtTV-sI01^5RV z==B&C7xT7c(W-D*Cm+y;Yob)e{4g{v_=m_(E+?3*ZW5O|O^hO<3az6}yAr7<_}TL8 zTkzjDz4O0|;qS1ae8s35d5@E<+>VrGXl+)eO1>{d0;Acq>=7s2bD9-6E`I{Qr%mGc z2p$hicikrC(ysWf<+p%|cqdrg&5wp-;;vFEw@ylaz=J_Vdxq?Bq+p=u9b~tcJly@7 z0i;YmlAF=QJpnXP{zUc(6?_9DAWk1oSA%uCrQg3|b#6g3L2_JSa^{VQ_}H0Gv}mh- zZ`+nZ(ezVGVsEqHXOBO~x^j7g@_Horia2xZqFd3eO$UHEm0^3U*GdQVT)*|n!fx4$P>oy@#}ki&h{D=vgq7(dnW_@+ei{(XE*7w#6}`s@H&^kD z62eIwDZHaKAOEHl=t2+Xpn1>gPeb`Bn+;7CLuwrmxUe`uZOy3q5G{XDsKeYL9Wy>T z%10X(h>9LJC^zv&<{^(s61>H+|NRybxKXx_h$Ebn?65{_a%V+(VHeD4!a7$8r#) zXbESDL2po=AS&T^7(W@=hiacffquRLgGGd6XcxDzdQxR;z=p6P*iB}UoV$T5r?17O zWiB`7MlhF^1}9%D_ztt}L#f??F7bREU5V0%Z&8CT_quzqzbzuA-vxIGAQVTRwQ5$u>)r=N#UL!p=5!}*a}H)s(W@x&38J>|(;dQCzi+kR`jB0K9s9hQAfsJsF|+4!E2kW!h9KSjqv)~ z4kyNh=+QmpPS7r>QGIhTCG!#~9>5kMk2FD~_Xkl-tH%ym!Z?=1)kJy6xLH5T<2z+u zUb!raw{g9fLBi#0!IUnY)4clN+>SWm9e#9%JQcxn^M3igUKbR1FNZ3$$pa0+Zm zq1`mGRSQF{2MJE!A7~qdRx-cV4#%Z3XmGOH$=Vk8SU>bt=WBlPE1puHHpr6QlMO%l=0q7%2Nui zS`XyAWT>G5GVkSBciDUxmX7Zc1${Ry1l#r}JEQLK>3U*h$nP%n=^BYS%66}L|8W8D zlij7_v5smt7wQV$etcg3L~8$ zjxVwnuj1gc>t(HqY--6|trY0FB0m?tzactObm?3)GP0^m@2TTUeV6R^liy-YW~0qf zOetMN3Jded@7p5|_Hopt7OKfhF0nPTqE_p}I%!hrB1>IJAyZX(-)GIDwmqG?dd<$u z)MP#BgY4jBZwpm&DP`!}3dajn%0=o5HtYI}&dX#7Fp4a%QArou|GPG=bKhlkN%!e< z@iDZ7QjJ&2%2>Gslg;g(7b@%eHPkX_gF1xYhCohTxz+oGEWh7#31MuB#ddiCjp)wQ z@{83M8|j&op zs~ouaZNK=HQ=T!os9&DkwPj2r6|dF61qyl=e**J4LmVvA-W2)=kUenE%8lV22NZ4$9tL?{Nh;XX!rT&^`&f&~&^e%}H+a z;$eJN>(kiFZ>1&{oLmO`JW#4ok@VZM8&OR~KP5t+7@6(QDP=oLGduK$G?*nDF)2M_ znyk`sck5n}aqi|S9l*4@`Cf-E-ufcj#HHSqi`q5DJb>WmKE*yBX+Kelk8bo^O_N>! z{g7FFqR^z#I9?ilrwj$p_36r;?MV&BsAT9G!==`V4PTvA6&atH&a1MS_fhQGe^vL} zZJm@sjojE>tHIAh#ad}echxS9C=C)v#_3xgGEJPVtRG{DJkKZl*;w zwvF33_l!Q}i4r^CkAiXHbt*5j6Gk+Rm)0o8N2no7`{NSZ*(zP?>Rw@xlP-?f0W8zR z5OI9dVCU}Vw@=uWX@BbQx)lYpppzr4-oj+L%r_oZqq&T7YN8e1w~ zteT^Oy>epvJn476lal;KX@#p>-{Q=q2|D z2*wmo9_9aP(r@-_)iU~;Ac=9Ry=(Vo%IzFmo#)f5+93_gtIBR3qu``Ae=fK|-uzO@ zmZp_159I)~$3Rd_Xb}{`Ey75#cQ%g*jEE;K3TRei6CND82L`CDiHT zs;{I`JfAURlUKutX12G!H8^L!&QRa@&Fx)&1~;_8dZbU2d59G!4r^7Vdefz~zFI(x z^x>}22>a4+BV#uYRhItQ%_y&&ulyU0Cyib{RvnES44&L>v<0gwJ_^5@wyk?qLgV-> zURU23PpyEJ+HkG^wU3E2VY5pxQ80w?%sQSVi|^hx7s|gqYpX98FHiOJ?ZSJ={l?4g z0-)#4cs=!Vv5gkg+-~GLi$AAMZM0|9@N?W&a6f80Z{9B~ zU02;O_Dt8I3-D6)8%}+fk4Kyq3YssXeZCIsx<+po-``$$wW}6b9}O#P_vW6JG{J%G zJKYX6^hOyDROQ`5a<{uvBC38`nR{p2-`kC$e75tQ3|SsGn_1Tfc@OWN<8gvC@s5m+S2B^KZ-C z-gY$7b(eDR*_N{a--TFmI{2`?ceuOTn;+8!*}kQ>&tt*r7kf6d;P08bl=IbU(rV_| z?}_|)s+;6bRfyjEs0!WYBVErlH|_TY2I~5kKn6XEHW2?Fy0RkmEjo3j=VWH>MrZIe z!+LG$LV3HdVY9gp8`Lk3 zp(hKKNAt2xkbcQ@>tnp5-0n|tBYDr%1K3{dZOLC4ez-4Fk-=M^@#44n8$GBVhFSPn zEYcfUJeAH3S_e??BX84Wat=9XInTqJkhRvM9{d?xt3kY4DQ|dAtd)Ri#6}L0SX=Ih zLyhP8mtw%6)$#tHb^e?`+3?IqkRxP))9O@VenWyH5D>T@ZR@AG3aC%(I?-b3uSG5L ze-5+wo;7@#%Nc@}oCV~a0Q84qRU?%0Na%)+;nAEN$i^n+a&fixl2uN$T|wVD4?4|Mm%4{?r2kM z7KF?Pr17z(ze9RIaFylnEmxy0Lh;#mo_A!dD_&0^7kW%mY=nNJ-YKUz*xp}kL}KV{ z^osb`?tEY-TMHAd=aRK$DgoQV7Y0lM-<$vxSFXMYixRoAMZG`rvYBlCIDzb~5Cm${ z@N-Uyt^G*atyWOr1*eE80UtnxpOFw^S)Q@g**j_`)9^&*n=t*oXMru{SZdrbyq->8 z{EnOi7`=E=KmGaWFSlzOER0 zRvf;d%{Dh*pa2fPN6*UE!dN0s4m^B6m8$i%Y)v_-ZerExFMXMHNeRJQ_d>#-=L2|{ zRW>4}>TB%B4>fA|ilW}g+_Y!q8Z(Yb;ClNQuam(3lW>g_{GV%_X`(6`CW;*2-EO`l zU?TqWMa&|BJ3u4*w*`Ni;+bU{MkcJfK}D2aBr83WGQV2Iu^g!{wY7s-JZ>6pD{zcx z;Z$#_i~cqxyJOAT={wQ4%>*~hSOo+=x~WzE$2$dz)DZ?pfUMkwe~D(BaT-)2dz#Z{ z>S6f+kWnZC;4g9#Fi*>SMDvMhGLIW#`!i;F0b)=R9eD-ocDdg|qh`fjcLM^nfs_Cq zA*|L%w_5U?Km6u&e*g|^vpkP@gnJm-9n}qPB2U+bg!Xu4p8p_+gkJpvd-zM38YJ8l z3`!ev6aJJ>b>jxG^xhJN0=EA}yWu35^dc$ze;8jp@~wyC<0@kU`bNL~eH-Ch0e>w- z^v^$y`~Uyx|LL7>3ei2c&Txy=&qsWuCL)YCMghN?(i0}|N!BH+Q~tv?c^NP^&q>(X zQUWhZ34_pI<{y}KDqi_+#TCT;;}onauF3fbgtQ+_R`ACUXVIr1OqBp@Y5eF|I`*9Y z&*&U@8!)pS$8}8rv*XKLlvud|e8Lu<{F6_m(iH)GpM#&?*YC@z&IhCVNwWY>={+~k zWF~cF3W4Bz2Vz^M^!=d3!3Z|vvEU4}Y*ZZIUD552ey0o=g7PijVfT3CEMo$5GZ2ip z5REw&Z9TW^=F6;2HZjF%q$rrr0>0Bbx6z+!zh^gloN z*2J+;a(h5Iiu5YTMtDz^#QXeUT=*aC2EeN^1o$X56-yspen^`=TlU<(%t-+yY#@QX zYW82KnSWi5FgnHXuZ@Q|XF#~&17RdK-K8JC1fcl8kleqw>t0iDBu6CsL`Z>`NRKlB zc{xw(Us%9pJ5hV1RTkj$X7seP9hOzJ)5wf)E$KarW1bS zM$}(5ypZ7{3Wvq}&Umhj0>|j=7iIP{zkszC*73#-_XM-;e|a8N`G4>7i)&Xqy;!L)0ri(h+Oj(x&VYLy?>Z#lWirnjn{;?9D!-OAlTIm z(5CWl+nkJi@R9&Y`?=G}ZbCrGai*S+6v%&TI9n1H-Wt%3<A&3Mwmi0r>q%fHXjZ z55Q0ogxFQ-P67~)9)K%o;7=;#ziaaqG=L|>2Acm78#L(u(9mi}jtK%!ee|aGW@A~* zUTS4bv@n5Wvzw4rOe^Evt!e!D5TO1)@VY6dLDAB{;RwK=5(!hRON3dT^Jw=P{_r;r z04~Kd>#%{Nsa6occzxd?9HE~6>-)RoWd^dN&BFsrr4L9XmU;O=v7Vz}jGx9vpH444 zjA-%U;CSOZW?=n(y!qnbU}f>FH)-ld1D7h>#}5LaWWskHxDj7j$`^6CDf&exwqZHd zX5C4=M~ppwh^T|+2Czr6TQzjOq6vG1b~cBRE#=UA(!u|9YU6y8Ey%s=R#+loz+L{D zmu^sehA|z9?cavOZ>4vDscohWm#c>Wu@Ts}^&?pq4}dIBr3}dec((7^05**16!q_W zfrf6vG?==F**aZ!20vEwfl|1kY!g7&F5M{gQ1t{rB9C*YDIRl*n2;aCze_f*X&uP_ zxl{A2VzXw}&n>uf8JK=OQTBBjOCu1iGXF1LpN#z1@0&IJfZDAZ+m z|3HYhn*iKo>0>a>Z6K~0od95|Cnl_0%8?()A3_5aE>8xQ2yn*lqb2rFVZR*PUl~ax zxa|WW_SB@^ON1#WInb!HUR03zf(Fn|6U%DOExBVe7Yea2^!+A325hK` ze(8;edE0i7MgS-o#WZPG?565h+s4#i#yX~8cPe9e7c=OM%Dy!FE&dRrb-$`p_4Zzg z0I(M0jID=DgoP$V8zA!xaROrc{M83ouRy{Urqa7Usb~tcMH8q2y8!9w^VxBy!q*T- zz-oLT#;RY zTSncf1`9gNjPFv7^W~fYqx($_0OYWwCVvwUuCUy0Jh}_ykgbkm5*KF&rT&c#%Mzsm zK(D%f4}o&F3#0^fYGrmG(_M$|F9Ab;);}<(4?zdqI2&20L2ELw25bz4o?RaRw^jK6 z43Z9nTsSTJfzoAAiy^(8+Yh<6EtA7Hyogf*;Lj6azP;GHg(J^iVWHwf7y{QiwMU9J zQ<@hkxH)TzpX?Y`PsqI zhv(b=%|3r@OawW%WwvU~zXKdZh25$a+j8p3-+p)?*DE;NXuh!F!Tpm?eK9`x>|9en zT{5$Bx%IZWzGaOq{{pgGn(p)+eX2hiW>aJh&=9}4MRP9VoNe)hq|_4O{w-`y zpoYMHeaz5&jp9bem~|c=(0D7foK&C{eXk0&bidOoOl(W|Eql#j=#-LjXo4)J*Tc}IPvV>3QC>aMDNvBO1YXNI2Xglc z`Fo?s>`omZHc?Z_8^PA;2=!da^`yAr#19Ia4^(=N>4nqzLTD|yP0_3$%Etowo0SeU1i#>(QO8S0)SM|e^ zFe2|eav|BY6TM5o_uYUWeqkj5W7dVKT3UtQ);bs{tcGcv@!QEn`Vlyqeb+;tXLXko z(i5`iTYt-rCkOnV?I?N4A^J}Vb-;@iF1DR;=T4cKa^PzNP|x0POx4ri)`OR`_-8-H zCccNI+R}Qo5U=M4x^unW{s)=`Y`_0n3SW{cfUvPa?*c>y5@Tu;B*1*kNsVa@OT%YSmBKFL&5Cuue20 zukb}WzMtiVs0E%FU;iB;;@vV16f1w9TDs5l9@W5Zp}O4X zc+<|$=RQ2n>oadi+?VDkev=Ev7i#4Vs&xGF-YilvLm5++q98 zd+P|$hH-swL~;qZWZ!9#M`|6DnpN<1gzdrj(MrbKncJI)RvwaMp>+^kzaQk--QEuv z;L-c6vqipd3a~42W_eS(c8JO66N4TE(BqDBB&$GJNm%VMT{H`nf{|Q@;b%_@K=DYG zJHyI^v%Xu8*rwI!|6pq$p4tI0zWKFj;DV_UQo&f8OR(+Lmb~YBoP>Er^PK+hS?`&> zOcsz@AtDl_O7bL8Uzv!D=!_5)By#?AFT`YgSpnXsBTvNEkt!07$r;FL>?+gPi!$EN zc`$=MBRKnm%-4v2N>&2unI~xX%@o>N*U>_!LmzQ83m~3tLY{>fK^AXNs12#+s3xoa z?v9#}*)2K0JdV9A#2V$XmLq=ioLmC_@Jj>WCrfwZS(W%`p>+3Ybybk_bMp?keb(PG zT@L`IE4%l^C-1(<-zU@)KLHJi&&7b!nX_Dzwsz+)w39;Vr`R%3`O!T`#3^BJdWp`j zma{Ksi1Q$4sBAQ*Zr>MBWBZ~}&fi#&G^JR!Ht*U(0P0HeCSv&zX|o@7guMX~VE||O zwzE^U+KdCgZT!cos=*z=8xd04uFDldX1W)#weJRu3b19N^%Ib>A)jhYc(Gf520zWQ z0(fHgPEzh4DWE_Y0uq6+Vl8kl_6lQlFFd*1Et03;=Gcf{{Gn6~_35hBh@SG`@BnCpDifrRrNel_6)% zSv@t6m8+f+{>$k$7kGVPtWrF9_)XX!kUO(Q4a9wxA)UtA% z`Oyom3UW!IZ%fBDTGuS;ED+DDCL^i{#pB^@C<#=xl|TUq$)TC9d$aO{RhQeQEjX9@ZmZH1WP4bx)i>^xw{!i-~AR#G@G$@_YQUWT{AaxK9ozkLogCLEh1t=U29g3uq zk_Qlw77ieBK=SVAci(S}_ulXQ?zn&HFnDV3wdb01uC;#af^O3K?^i%db)C8O5@fzd zs;^kqiJ>4NPQ~9n1qF#1v0pbw zCbW+PZfI_OV1X#&YOR{*A8w@d$F#}*NeKyF*WE~x$-S*GUj0Zd~SYR zalMwdXGH-vcu6e!Y^$On#rgSPFpse6dE4IwN&APbCz??Xk#A5JrxY^2AM(zUR^|FD z-I$nEkbQpvPHmG`SQ?wQn`l7xvtd zWl@0e!dea3f#bw)Vnp|T*AmyRi`K-?Hd!;og66?j;`wepPF&^;`h6f_t|DEM@CF;p zTkxo4tm?*L@dU>gNf_(?tDgHDn4dchVN)SLIEILuh(d0Z7o%e&v#GsG86sX}(}Im> zL47#cy6yWCU+Ob`Yv}o=we^hpXsSK6E%lS0wh)S%YUVpdAw8`u<9>yIRft&b$6_Gl z@KlZY^NUEkZ6na1^=6M}U_+BTQ+a6AH`QsIn~W0pOd}JSTJ=v4`=lA0ryhCSR{(hX zplmNns^vA7h*}ew*lZu!^=O(()J>AuW9!vEg7kX(CX$IKP z_n${jDFMN)^n5xZ3H)_4Ctm8~ghXYg;!3aQ6dQN?<^M7@u6&Oxh!f^?(;?E#RUjTP zboqOpBsm&K#ffI^SShfgwpE)nbf!i-{&N2sIiVJ*ZmBQ@Hk+|S)DDiu^4w`+_|x#5 z`7OH7>i1b%{hphBMW2t_`(>b0{qezE?q}+0>KiPHN8uurEZzxB)0B*na5n#0&%=P* zcZ8bebz>Cvl04$Ca~}0J?@&KtB11>VE{8D@FKfoBA5%L~JNB&1`Rhq)*04xrg@K~5 z#iYf~UIxZUllGJGI!uaQ&~Kk)g*)4?q%B zX*tiar>`&F>307vG!x*=O%Wh#1-3UyCQcAM^L~1jyszCGSZ8y2%?gq5F zKUcz^gMS7W7;|=bUSnC3=VY3AAYrOn{DhdqC>5|Zw{TZKG{)g`cqZY+e~g>uNRUh_ zzq=}dyT$)A2DSbssDfIh6m3T3c}>A@c?Rz@v%o}>-{p$+McKvkm#2a1&nvUIBTL36 z4AKKQa;x}vtZbELR@x9fx#!!c^~RFEy|*St1zW_Qg3?(G=_52@)Acc5Il@(t>UIhw z@-dPeOlsx_@-Zmhq#m&yc63tSsZ7;m8@A3j@^viZ9Uvr0mA z)s3IT#XC#u4HxXmT3kl)_Gk}}57$5Y(uTe(Sz6X~rGApS?C8a8S$Ya^Rpr;Q!()~w zBc99Vg}wUG?1NhEil=Oh^{G^p_n4yL@!@jfJN(PM`94O8_Hwe@H{4SXOnj_am+pj8 zM%UsjuzH^RhSim94$$CnEOQ)4Qbol|HlAm^64UsVMV^$@={j4o#A@bL!rLuwKX5e7 zNtLT#E7Itf36@=>C&c#ti#w!N%N-e*AKBhzFN3!#vnMAVJ$|J@8aozvL+U5J&K;zJ zDU;0A5kIyaU2244c%j#wi!(_HqY7rH%*Y+Np0DcpAy{Q0F0;@P{pVyOei>$psU|(& zQq6lhbE)rR*xwVE$9#wp6<-T=vA=Gsv7TdqYWw}}{qNO?l0JP08ClGu2Jzw@j+Wwa zj;@hRqU69~dehzttDdo?0=p5uJon8DGfB{Z8N z`271P`>*nMB6%{^Xam%;TgEx&9>ilh~U_teoi3?r#dqZJIeO?waff+!)`m`aw{CKvC2vqY^^Lo( zIW~zmtd@b``TFAvi;2?t!4Co3=vc`XD!8=F1Ash}7EhHV@m;S5*yQhw;V9)^(|Q$C z%ek~SB^{$jL5r{xT>vs0D zLWBht?t@$^%o;9dL#xjlmnQJ)WdzF;JKx>|G4z`F{w1WpGW<&|2Pl1ap%mV#0`R1J z)RUJ*i{TsuNmn>+i$4+HvoL=dD0Ci;7uOP7oYR>k5g)4WpDYp0hW}nKP1OEe16|;&*=vuaU}cGQ-!PjyLO+%~0cEV(d<;ie|ieG_|Z! z>PkZsye2xZF?q%b!TFta{RLl>!E86o$Ta~G(?~RJ+|DwfK~+~m_A9Z0v%Pp(OW|44 zI{LY?AOc?txUjz(JWIuMBmOAchhx(7k@|@m{cE}h(fM!c?3PY=WXb6Rq#fNl*Qk>N z)LyE$hQ9mm8JNq!F~E9DQWvRSfuQ@$^!eIb?7o$x^mnIR>ZDc9#{xtK1j*4;UHpVz z9cHw%A^RSF&tNiA-IA)zQj@%g(|mtE)&~4;s7WercA9&{j`m2PfpzNe#h`+=x$Pd) zbWS-vNe)jWb?H45D@;6kJl_DwpHRh0=RUy4QbENEfRD8u+glHaCgM}yB!?7kDb)uA z>U1s4x9J|Jil*>VD-CWu)+T1%6U4=WOwzAAM$&>xcEqZuGWCA$HDbZ&Oa)t$6xrug zBP;82@3tP*pr~vN9p*XPITp54CFwp&3GbO2$CPWK-bjzWBfI)mG1dC=R6qCR4xs^U zmNgUc+oeA-lBTILA->;pKA;ULrXO^7j=Ek?`CN{J+Z;?)hcaCtS?z73Rb$#PVH-_i z=bYZAJQ}5|0rNpPF6>op)c4M-8pvUPd#fnV1h}qg#}QY%#IzX`u_~`wJ<)7ckFX^O zvWr;wovu|Yzbd91vUAjFDWUQEhg17eqFVgcj2hL;=;-+y^%0Nt*oV41Jl%3}Pd1!) z`qMujb9i5MMdZMLIK!Ceihp@pv^qXHQ$glCda%h)9}p;Jqi@(;1Tc!^@_?DNVXX=` zCe)kFCX<0|M%|JO-I2>KOZxBZZ?Usnw;^(DbVr(k%O! zLQ9sENSH<*YkGs@uD1zG^+e4aX`Qe2 zR;wB7O2_^_?IJx(FsVIW*hOQi&N!=^yes znd1wkIn!0GHcyRJ1oIo6v8F(_+rNaH-0{9@Q#u@ES?H5U#|bBEp@*W->)6%eH~ zjn`7uk*Ur-i|YRB`QzG-HSeV)5qCl-2X0TruAZ>z@AXl#jX2G32)Hg5Crjew1iX14 z$g;Y(9_ext^W6Cgb+Tvj#XB9j)W`C@4hTLKt4)<7 zIPC&&oBVUyiT_JT_yy_ZkdW|iuW_6Ut=L>h_j+$wki^uKiN@Bf5!M%) zDVz*d+E0uPGDfyNPJ5l@eFhXJA&u=Dlu#$f)rR#`WI6YX{Kmwzl>E#)2xwp`#@Jf9 z$?OJAhF;gDwaj@t=y;wwf9m5!mgT%J-9i<9p8r~11}g)dFs#G}}zU%hKSH`X#z_fX63bGS| z)&G+L|Cbx&9T$xHRUBOIogjhChRKd&=EM0&_$kRv>Q4cp6Fy*kPvffFiZWWB3h-Y& zbu2ESD+1Q0$*;_7CAdc%Q$3D^nk&#WEva|*yWQ_L6Pc;a>^O8HK5_T_uwA+zQ?jx> zm|um?ZCAGN?+T5WvHE2KN36uAH|#< z(lP(L(3q-bPRUW+iUQq=eC@%d+;3GotC@#b>J|rXllvo0$K1gr_%}zUa#f%Rb%IxO zY|a4l+HRZkVYJ=P-#!+TV$SUYECyUV92EQ9>AYn@qWM8T=DZf`zs&iG8DHl?7nEPn*fh}LjnHBC zcf}~Lc(XOx)ot63A8jN_N;%ca&Mpc57WsmCQ+xVSy;ni{dwBw%@YS}dv>24#f#fYv zSmqkqr3(s(bcqxFK~J{t(x5dVW69tCRPZ8d{^N%OP=TSUOBp$E_lTOa_osUCl8Rkz z_NU^g{vglUX?@?l*kHO?mS~&7@`0+g7bMRxG9pQ$KO%niXaoIB#d%d8s0Q79;8F|& zCQ0BN1U)f}>D=l5QT z{1fo~jGtETRY=Ophx3~`LGn)aYX%)EigzaaYpt~3E0WkO!pi%D2Q!Gj|HJwdg8P0s|NIm# zG~)=XOR;@RM z>fUQ3)8YOIePN!!rn^X05r!*m2K(OL!T9V^Atk+=mV2y<_gkbkU&UXRkO#1a9E@;> zX`Yt9;TdV;=ecsI2cALeUu*N2pMr4dL+#*AO=eFu86Z6X)_=jN|pV1mL@a z86yWF-ahpd;7bK<8_{hw|olhNQ2b^4b& zBCW`@wM0qu8`n==bcbK(S99I1`s!+emjtRBiXkaj80u@^|I)|Fr zt-cU@ZD@7Tc=yH;G;8guS`bi--&S0O=5tNzfzK6Y?CJlE=HkB!$p2+bh-I1f9#W{+ zKvH9(6%SrRi^Y-OObWOm<_0{o@7@H9Q3EMatT4{px3fkWQALeuNZbZ)FMeolNaJ#v zPCrkstI>eAa#`3acO|Rx<~Ho7y9W8Im>8;zNK)~e#4*nn2(k%Ygva1MHPlGF zL2N%PP30g;Ax*6cYn;?kcA#RUz4|%+JF&K6N)c7Bx|moh*UiVQdubO!Z@-mqc~bITt$Sz%-$~3B}W`A826O(s>^A$Pgi!2R{WZ-bc*Zf&(`*&E1?Uo41=P zIg_M|56h)m-zF?V0;7ghs_{K<4PYqICPBIkgI==a#kY?$@zLZ3d0XiFhU^j8`+6og z(Pl@%pMAMbjkOf;2*JX$65ScFSG+B0oTU0`q0gK zQYtok;Y0JBri!j$Ap1T63*WaajCF=L=RC8%rK}E`l6leK_X*r%dhTC*^lf;dax>w` z^6cET=CE3^IH9YKDo znzPc_cvm^sEnt3tpJUxG{WifFDBKQI{yFZPVDL+w)$td46n4rkc>=scQ{|>0wI=tb zjdJmj(4Zxz`KhNP@mBYPWFs6!!sl^NS=OO}(^%d(H@(^)IHw5Iba~x;=;=$o6El~} z2WX~;T&;d#QJY=*6EM1$$2sw*P8 z5kwK4Fjs;xww>;UkEkv}6nL)3b+2bLz;|H;zh^g#bk{DLTj=Yn(z`}*6>c!@!#(U~ zK!0yZo2C%h3(YUjhAu5QYHl(UkBBY!W2s~OJ-p^D3oq^IW}$u| z1e1pe^G7VOC?I`79I9&r6H!rWne&HL{&kQ=)azMbyMeE5ZLIw~2p2E>jOJuu!@~uh z{1}SIr;wyNx-c?|Q;*GntZ@XcOgoQnl7JmE^Z(c}xEQPt4%*0mNOtqX1fqWKp}vOV z-{o}kAWWUfUqqARtspr)S`XMJe?^{=_)TV7!r-_)uU%bIc&+ElD~eIN%+UEge7Brrby(S_O(YoaNugM&ekXD?j(I^OB; zI7NM$`LPWbT#W2}ra=Yh5yk#vP?#(xLX#n)+BB*2fn|b#Pqf28cBAxaUoFvX9U~iB zS{NM;8uDXwjc}@;g0tH-@S;|0w*jZ9u4wM&uwRTR46_DCCcYpGmn4el9L0t2eC(tk zP>X-w4!IJPXMz%NQv4pv6or7uOHY(J<~ib2)Lf|Pe!g>g;r>l=_kC57*r(4fOog!y=D10A%}>L2)lUUU<7 z%kI-9NW@zwviOjP4q^4g$QaapH*VNpSG$KqDJ;pmHM}#du0;irUljMUT9&zM=d7^q zIxcHd9;}fZ#h7L9p#v*28@UMVhb^%^wyR*rd;UM7+Si~!wUjrg^E{)wWm$2eZot>< zFtp_};EF}PrG?!r6T_RHwD8uG8N1S39syv=4qvSh)XPkiE+=N z_3r=}!sZl$5FyEUa~z2?q5HrEfRv_dyEv?-?`Q$1WtMS=deNHK&97+WJo>X|@#-k1 z4CxLGzLlyJGNoI6nZguWgAa-+AqSHgFm|{&oAftpHT>wU4D^;@TQ7W{$a9&g9OPA- z4ni5`KZmkP!fdQ~C^!oEf*2FSJu#vmeJ3sJ$>6WA7mAsaJ*}X_n@;!(;S}yxUua@< zcS~<}>+JDN-Q5;V7VlP~^I79_`K_SUckWZ|jGDtmg<^+6Lmy8S%tP|+-XysX2Zd{& zreMBZK=aThvRnI=PN#?N`b;Xqc^#D2WQMXU-+l_FOo&y~L@Hq6a=U`zC@~m%tuQPU z2OYY^wfn&}=yk*+$#H1FS;xnoH4xj+%{PIx?yj)c%egXQ)h&>=Ro@u*v~*l)w*!w` zXl`T6Xjlr=2VB+Wt+2<#HyC)3H6M;R?ZtCF)mJJlkZTd@K<&_*X%{IpGU|cFiT%%u zGcKZE%W_M3<^#?{+nD$kvF)%U|FHVf4qO!pOnO3D*In)kiKn->E8;n8>N`te1-LcS z2}b$q;TRf1EKFl)&~FblwiysSAv&{D52)#pC2$_S-Ky{l&;Fhy)v`!V@cbPm)e(a{ zQLc>Iy~{G2^z#C9L?Px2n?SPxU#CPVMK~U zX|%7BakmIz#`m$1@xmNTlMj=5Ywi>DLr)4JL=2g&-m(FN0=YNe+*Q``MwcOo?AL- z0@u9qXp)}Vr=$I8({b?r@LxIDCGaHGZ%t=*eJQ7(&iu@gZ*eKD)pS^0Tjl&$DFVCf zcoRft@n>6W=Sp{IMdakE>YQ<4+io-Ne`8}?vF15{~f)TbcvY9zTH zCki&L2h;e`g@~`MPn8tDDrlAvjRJG_aOooCW+Zm+8!P9Bu5Us)8?NN!BfCW0;!gd& zW=}0Jt4h5xV(WO$z4%C3TG{2SMwwZfM|Byvp!`zh=DL|&NR{btAHjtwM0`DUr6p9* zGSQPoUB}_Bsfg(Jrbnx)rDwOR1NAm)C7TYthf%zqVYnFWd*@P!e-HC_R6v8+&*>SK zxunpu#5tSI^~JDq4_oP_;o>sPg+FgakLsv%L=aIcDnEYBFmI3~tCSdrJMk*Rm3pym z(yG~B1LoC%QkcdO)*KI=d;0$T_wrE+({HT#;n8n*Wz?7My$}oY);5dXuWXZAl>VYO zQiLp-*ZuA`j=4E+`HptIN8DF32R(wnWr>JTyP;YeN0Qd%dXx{EpU&R`v0b6jROjDT z+P??*Tm{Pn4Q?{a%b-J2Bz@e7%)B5YZzt_S=H4mrlQwM4JHEo3!C_y0&l_ey`cZ_r zlvlh3_;xcwrbpjIxSw5f@qBG~bL$<$WUxzj4h>E_aG9EAS^AmAikrI|4L}1aYLY`3 zQn%I(T58wS2Uxawz91Ck{l5S7E@GO(&LM}4aWSv{{Aq{Q#Qwid%{w>#{dKx+-x8x` zY+knPmG7?PFbe|J1mB3*e-fzu2}?Vv5gY@ci=YXV7Rq?2%rEF{5=wXVFW3lrlUTL%{EHiJc@0fVN{#j^6q5~S zZR=C$?&on2Crz_n2H|3qKNB1NS1*9;x4>x`2`6vkP8fu8mr{_s++&aMlc>N3M{SZ^eIO)JT@G)5u1Fu*brncF~k@qLU37Klzx! zosz3h=gB=7Xe(mb88QeLb^!)#HF%sBIoz5J$y8$(`!>Ets(^hXUEGM5!fwccDFTv!Al<;3Uf7Z z2)PyrpU1*tX79(tZx->e+_M+`cFfn&s~N+5JguD(ZJ#$% zL2h!tEdMJ8-)+Pq`l`&INgU01l7M1cfSuWCAL(wEnaJXdvzGZow%9k~=L@vngNp1@ zc_FP6QoX(hX}lDI=BN+80Q|mur-s4_H7HKisM1}M=NT3@mP%CuAw5Om|Ac*G(EIeR zAl1T812*8FdwJ$V`*j9BP=>A{q>PzvqqhpMWqhuX3VCX^=MQ37cwvx9QhKS$<{Kz`mN;AHe3T(vVO|Mi_C{33aInM3YS@TABq=J(Zvard8hQVg3(CS4nTb8WZh^E=?TvnYR}v z)*-&0d#QT%scZIl(-IOA?}ySDqaJ71zHON}WhqueXLG1xM1sR>lP~RNL5X>N&B{p0F zebrvdzpBN1H}OA%$0*!zlkE|=Z67g@2*hcnI#Q(dV07Z$gZHF1 zSOwLD#dTTk0(wkXRJB4n1Q9o(`EA}r*$O(OTm;v3aB995xUMP0*ayY3ri+YrMYs-q z=Sj}FCw(3976;|tdN@&I+0DPK&zYrvk>Dg>LNd4YmXZV+#PLH*_%7I^AO0I!U>tG7 z`lR}DNcjH@bkdIZ>96V?u;|)Y1|#U5g#bBM_jffnD{@RcM}fX;uf9~-s3;xRKH0~! zBHkLHNZy3o|@g&=+C<9&@^_vdd9uIwb#IT8Ki|CE|6g~ z2z6M$Ar21f<%a+1$aA~!=>zR{jPB2DekNiQ?6#{fkQh|UrI1-p@nT5v=@ZnBfNsNt zH0E*8G>XIW>{q;qu;Jt6>s;ob|Ev9x*;+&O4-@`vDCP&%*X=N0NyUI*)8ty2NO+NB;YYgf-ZqE=rbXA-&x;h$7tMduX@lzW-)v@o;?QAT9Ip(> zOY9sfO^kPxn8E&7##J)lI@(CeO`Q9V)49167?bF#=e7qF%xV1+R~N>em}D zy!AtOg60Lz=b#dT0)&nEWiA;=&JB{90Y?9i%)`bj;qL0lp{>*wuyOh~+7Ha?Ug<2L zCF)q7^W@~SH{X4ImIp5UT^$GYQem2PQGG)CbFQ&_c}Q^sO-osP&~tjKse?P%z=JFV zh}sZ^=XJB`*53KieET8f06&Cg=aQAgdWnPgFD>{#L5`#iTqKKMH_UH%2=eVI2)%3V zzV4C%PfYLbWN<6Skzt`7vf?42Vfg*uRvrSD1-L zdxvD!^3urFGPgl`>EJ^C@qBho(SM>+IufPOdrpERdi~Sp2to|)|1B{z#6v`xXD;3g zkLcaKHe&VZvHGU<#ftSqr7FUFD0iCx^BJen?(OGh6l&kZQufdK!KNbuqnChw+zc3Py9`E{8_{x3p^;8RS!NGhV} z6k^73X7tR~NRX%bD~py8wQ`r5*By72?zZtQ(pX0yyry!XJA6GGv3vXFLXo4`bnil zV~zX}9Rf4(kC!hT>zIpp=yR{XV^KVz^RoS!cOw$NQdw*{;RDpkBBhlnS?GYI2)R zLPu91kMu_&nwTxuJ5YvWss*95B^Vk%li>FP@rD$g&&}oQ>EoS3@Jg+G;Av?$#R}~; zfF1&EU01&C>ULge-zg?|jSv~VVzv7$vo)_}O1p&D8OflO9mf86;P#~8f}ptiGrHx; z>ag?8y;(=+7p=4|KSC(By`EI^;bu?KE|q18-THgod$|!!sc>*_v+!c0kTj%E&N*Ly zbPh^rmic{$JRGSJkd>wms@A$X4k+@&{v7QSis&}*;C$ir)7{I+^ezQ~+!h{H<~PUS zHXBoi`dBj_7Z8L(hyZU?o-+?|kTcm*9*zMtrQ=~qJ0Zep_>=}tdH3_l5rp}g4e>C$ zq!)mdcbfyHPuxOX7j%S%nTy8k>*rAER;jeua^Zg78Zva}C{*N#$M1%e@*x!R4~ywr z->6;irvv;f_t}r$OsKp%iW~{(!F_9B+Hw7gK@VvG`@+Z(*08fbzli_jBQ<%~ zwwq{|YN5THf&SEk zZmG6UhoHixPC8Tiab?7d`%^1MOZjhv6XiK(WyIeNcra+%58;X9F;2NZ=1RCU;F#4zSeuH6mp&a3blIFF+{8v>z3+FPi7Am zRs3)f3&B$(6DUTUpYLV03p()x{M-jcT7jna5^oeLsV}ATAkCxK@fx76mvEbQ;WX2$E90{9hMQt`q#W{Qmy#1DqRLoS$1 zGZcqX7@YJOgc`BBFVn6-d7g52SG0@vpt(YZdKJw~Io&$)>?ctZfu7*86C=v5wan>}7Wr-!VgO+0IwG zs-9`J5{;;V(~np2Yu&jtmY72tmK1cJLj$disQC&&A7ANl#IV00Y zIg{<3rGwP(pF-Su?1`TEuiIxMj)_;YaqaO#9j{EGRUgiv?Y`x!4#6-&sHtN7I685b zcXpgg>iZ+VisOZEg7I20Aewl`y2{ZGqU4&qX8nwCF~4;akGuhTJz%{yOlUNQxt9Y~ zbE?%UTwR1}bNZ!Aq;K;GxHH})z}3=8|3|QKzgTs@`&6W>{}F!EOHYB+*A(Ic@AV>V z)sTN)O+tox+?xE~H*?p%(ijMO4b!~8ZIHBlq3@O7Qu z=~9XC_@YhU4jt=%87T;Io!z5TgoV>E+0*eOH=cyd6mIKM2cdRAq4Rh}>Q4LR#Y*a@ z^cxuE4#=EP$f3@`=BIFuYn{W+j78@d~HA z*bkW=#W~uJANIVec}wfB?2`ClU6P+XnHGNN^=+Lu@GD<NQwE}9N^aV4to+V!zE>$s@p3iP`m+LuPP-V^X#-@XYV(_@;H);egWy_?1c5@ zp*6i-5G0}0x2y=Qq{af)HqepYZ=N7%svV`|@!TrpaNHpb)iWMD@oN#%MW`aTivhM9&A(8j6l4y`$C)ujktJ$%QlO0g zu}{TT9+uJS(K&q|AyU1jEM6xTJN?n6-x zK!}w`@4T!IcIbnJ3urWM)4-2p?K<0q0b0#TB85vBEq${3sZeqZ_KFLTq^bpyFW!ud zw*XO2ob(I`wf@skO`_Aw^gXDmZ2}q$_E<1ZH_6C3!S$Z$A7xqw!r^YIJZVsvX0<3n z^je#VNP})^Q5H{6>*uT%X~5THCkoK@f=#4CQcm~kuwOXsg~9Z6ud{hZKG^iaZST&B zMJfQ+&f1T(H;wD>?@kfcmt4bkZwo#PExu%?Es$R5u&YRx3sR$F|A-jE^3|GNh5Hxg zdIskLH2G4K1i1r@0atGvOqH6n{(iunW+#R|l7%mtE@^`r@-VB>VfDUorj4A)iNd4$ z{tIsBh=Qy*luK2kwaTeQT{}SJ38j=2+jfGXpxceeh9ST}K{#mWyInCz zt?2j|j_L`-K_Ba6>=;}g7<}WjW8f^|3#V*^4?L=;s1nN*8~}mqZegk_ zsj1WUZ-!GcTd$cw7z{5vc2c8^sVw8EWJ`L_#tAs~DqWKoEG8ZM2Uqvz9{*;v`ucvf z3&+(U{Nwm%?;3^7!2;KzzCoWqe;aXG@&`PY5~Tppacf-3TM^Gy7CSe zge7VCs)Kl(!NNNXrAX#2R{ESQNLUy)CSWVP2AqtUKfY@^v^+fh#)o^*%5Wz&?tZJ| zjo|Xwy8orjN@E7#mzLb(5@rXPsxR3>!13E-$ff zdM)R(7U9@Ac%+ecJGc1uykpI_E_PkcmhrwBlK+8-krrx;6F>XYqm%rb#7qRqVN&sM zuBQ2Vtu;)nj=~!ig`ldsn7#v=~;j?=*GQk zPG4KsyYwm5L|K`G^d{D|7Q>PfRRDDtkjag8W%2_M*fkDoWsQsZ>0Ecx4`dysvrZ+! zcn=0;Cea#^@3qN{RGKWl_hmZXCE3>GFerpl@qer!BE~;qkod`X?aEuxG4%lVW(+Fx z{%>Fls9~lP9~48cg>^GJA?-Dpy?Sq~j6FRq4>VSI7)3?TZLdY~%N|^F&@?{@RZa~r z*#fnjrsAaN__(AgpeNw3~^cvlN{QbA~dPt{BM}kmX)pt zRU6yi(CXxJ?-Q%RlDh|}_GzrwD|*e4EEMZ@RHLy z?bbE`)7-eXdKZmIkUcW*e~e7r!bKQH0pwqo2gA&TPJ=T25Qp}yH*fW`0=D95CjP0} z{P2K3`^rf8%0j#=(?Z&7w`5+0dljN;WwuX!DBAYVtQh5e?XNeULuI;SPVHQC4Fi%h zT*FloVu3?|xZlNNXxV8yz1!5F%eLtU(3Qx>FJ(#Iu{#-tOF7atDYdD!2-DMDyKEU$ zo1nAP%Ew8lioGVi(YR6XYneS7kMX<)$7@hN8^z)X zj>n*6XJ-sNlO;)<4xc`ld61>a3_I??0=a7Lq(teYWN*9aNl?CB%*oS@WNc!)`Dy-9 zvt-p|w7%I!^wp3}jjUtgpOzvH7PlCO9X~Sh61-5X+VqvL!fX|uy!`Dx_nU^%dp9b* zqpV$nv{d2YDvYhy(W4=w_09OjW%-Mr7d*q;iTd#y@5*s8De>dCA6d@i-3xzMt=v45 zvw_XO?TQgtCOf%*#q!R>vo7m1buq_zV3f#!H${5M#-EH|6CXq;i+!z|JE1yiM9nC8 zy0@4(s|z<()cUyaZhKb-$vQO8%iy$wg3=6PMs}vBMYR`J7n4NOFy(NR+KgI{+$qz! zSL=L>?8ZX^^r+N^#?$`R@zbXpCL)sy@d@ywJ8xSY^Jrsk3+!XkbcFdwTv54X(y-y$ znurct`$tLM7J9DnWXk4#j83odMyGzEn2II-E?s_PA!1R*#i;N_wH#7!E*GqUHX`qh<4EvQ>7r@G^cf^r z^@>8nwqS_c;{0O>&kW9aIq!P>oCK( z#?BU6-`HT-`v;Wo-h5CDaj(QM=Xd z*N5p2ks5t`F7KKgKd5XPZY0191AfIiB&G#TB&ni$2{(n5uTPh_d40M5zMn$;)z(M- z2o-TP7JIQk$I7Ot59xOTpaxBcB3}d$*$E$o8QYe{P1RXbYP*#+QavXW16ek+f<5#O z`hru^ySHVB5aWJzDGuGG$zTA%^A-;JGJlB=GV2y=NLydET>EOz>(!s4@;GUn3Q}~$ zC^@E!kD#UjW>C5FU5%ILedrsf3H6g##ix!Bt|;^_yuq7GAcBjAdQF{;=&U<#+mUr| zWlw;@EOaWtvf`4M)!AeDP8j2F-J-co-8J8(qHteT!W3<+9pu|_uuOM(M#wQuvB^Yu znQSNjW0)}e>*~v#OMrIDruytN)?B|0dk!;?kCk)33&!Tx_7s1qlJ#QpIs4tlrKBzBJ!@U7xpFGTqAk26Xu}%)8~iY$}ZuN zj>{~dALAo_A;%yu&z6`Sanzb#Gd4%2h4>AMsB7PY(S(ftS&qqA!L2CnlGM*n$P)CQ z75wQ=iF09DuRF)iR1*#-3_@nYgM5`9c->GcH8+bDo7|P~J{PT6(c{??a&9>HoSc53 zKc>ddjB@FL66Q4tx7~;J$3t=iU7|C#(JXN)BB1-CU6J@8L!}CvojTLx%oXDM63YYm zL0h-&d#|>w62K?QUDVAOnw903MrUaX;BV(W*BMzwhsbno3YS1TH8(zQ*Gp7e$uvZ8 zc|CcfpyE3!L<9HtdUP>QTQng0xp1@wBZmALVK8qlacsTZ;XE|KKMe|J2?wEu2=v1| zcxwQ53Ba;H;NS0@*3geVnFTI0hY)c!#^G-Ck5)Q&8Eg1JMOI$7Je`6GV zxaD7Q^gg}?k4}ca%w4uOjrm6HK?Kbx`hj)cnNCugHa3T7R}=5Z+1ptz(z%?RPA*;% zoy_0F@nvwM0*=Sd!`8RG2F$YR6DgYEVu5OIC7({mOH%CYKehHOUu~pMMu|}zN?_Fx z>m;&0Q+UUjcUS-7wQO#dWm%bRd%vPms1QohF(o}&ZLC`@u=-lKe&^vP(|KvNedS*% zr@X$CU#zl*atW4RW3$6}%y>BKYa5P}h2XVt>x9bOAYE|S>$&d8mKwNqx8_Te*D<3E z6?W)(QzLt>Lvm^*T$t((z2{b{;T8h>*q$}2)hwEd1i5(+A$^s3-37J_k_q|#?Wc2HyFc_xho{4D!i3S2~A4~=@QohgxtwC^Q z8N+`2u)Hq4OlW>$NFS-AR>*-AOI}&3 z%gWX8G3@V{v4Id`od)Nv6-IQ5AzX!N8Xqkd{S6)db5``edcpUSFER_Pc9OjKLQhYX zR_9y3;^@l{l7*c+4nvu?2y#JeMHlA_821p~{CC+R*7K!C&>8TmXxh zrF-{}zy+$Hx5AA;WXT}4S4E$tUSk{NE;Sl5AJ5!d@pLET{yHcG5`Lg(JOnYm2FQVk zioE8BITF(ZDbw|Onb%8jJ8+#kex_l6$_||nF37Mk>N1D@rouc7x7;&8nw4LP&T%<3 zI9mcs^~+55`pe>^+@`GJHef(Z$gNq| zy`uNZlE;f0f6pTRP5w1Ypz}7v%(7&lUFhLC6%q5yp5Gq{gO#F=B@ zoW{{f%9N8>Jmk26R0y`VP{`X0N?nP{#nSyxy0mTEdhegFFtFEuZw*b|kU)q=46cqI zN7%@_$}^{|cFn$~0Y-j-U$?aG^F{c*#M|HJ;)mI%H`+(@NoLcs&z#tBdWoA>n`)@y z95_j(&xk7#sP&2s8cyRg=Pr{oEeTV7E zV^4U0^-tN0it(sBn4n5{$;31?VF+K*hk`znz&qhtMp0_}%ED(vo#2e7H-Yhs$yYT6 z^tHgn4X0k*7o(!;ktC!D+`cLzFe8IZH|i~l!6xsDvfSbq7%q&_Qa+>&FMzR!gAIEi zMmr9=KDM_f6neU}&(oQ^8gl4w)9byZ)8OFj@2gS1%`SZMxhM@ALkPRc`Rc}7q51Q_ zg_nV^xjAzpZ@~CjsSNAaO#d|V-6rV5QMSPy!!Pwam=4BiXJ&#CET!#tIC=L520k#d3+YFed!| zP@+apGc2izgFB!)XO#GC{K2bn)aHS}wqf!oGVy{Z*1>ML!;-8Wj8`8*->4&x z2G>Kw9qC*6DQ(4`m-kr$_a2#0@6$uIv8anTRmtn~t~<;8Xh2n$;(cG|@rt#ZazEj4 zi70rT{IHHC@qmL>S&9N4_2H8za)G|%dj9taTJM^ISvt%F&&9%b0>xdueBimE7~drVqi0QA6DP%1EW&( zlg>t7z)r|Y;=s)_5^hpIFvQ((E54QhyOV0m<4X~M*8(%wAfQx=Obf5XMa+x+ly7>? zG)#DJ4)41d72~@O8Jpft%I{(p!%^X|^)e~E4iLNY)~O;#V_*Ir;T;k3jqjCsl8K7A zfft=h6a)K=J)o8+lhF7Ck82$+)(_{jo4#?!s4bDD1Cx*-$}?Uf6m`?iP=U<7TUZmO zN=od2FOhdn`O!<#2M^6mg@eRwkQE8#kiqdLp|(A-X%gZC*<*sqB`QQw)qg~PsaFPw zGfu8{STq)jeS>Mp;nImp4JkLsI3mTj)Kg}cq;8#d5Gmg4XasYOH4H}B&c09`wubEG ziIeTg5-vT)L5Jry?kDL_M3}UfnHh{3Mgz4wpniPDC8R3xbZkk{#{N+miL!ZlYTf1s z{Go7y<*gvXt9=AseG{ZM87j_+W`%i{9WK}4-aNQyg6&uN?f9DEzAnT);8~#B1SoB4|xNFFJ3t2F<1*7NWAca{cq(o*;6a zJ$r?7Be3v{J!DPaPbkf(EIbpk8>o@^y%*4a&NzP9y?(7}@Ra?jKkYeLD`-H&*++Py zy&LVCG50lA%W;&v>gYEJirdjqT^%c@O;qH?74Ee!wniv}K>Fu=JOJhWw znJPM36=_;J-oc}u@-eYvq1LU9^eNj3@FBniBKd_0QG8jQzI?Zz88X3c+oh}YsB{e5 ze-9FC8MtCs_&Pp`86U2;h;u>a_9bi2W(#+bOy#H3VYWY}m|xYL4yG!HBKMH()m4^) zmAILbDKo`%h>%ewk^3AxMjn-{?`GY0akCG3734i&XQ{c-Of*$<@qs|z)tbK`yRv~O zEH`Y^@G}^T=6;^wgpwTYdX-R3BmJ8DdXlU!bH}gy96vtL=qrFx!lo)x)Mnxd%ozk~ zR$gB~t_BD;4q%q#lRjyVUZPshVB{SAMiMLB?S3J1`klTcHX^8>zanG(Q=8dk6<%?l z!jWgOC#+aNwzx8oH&U9s_j_{iGUp0Qz|t%H%s!zb-$8ZXi{6_Qc;e4HGZH52`Rp?> zy2~lFuKGRMDBVfP==U)uvosolPjT1bHw8!*R^G4=ZIB~*=_CA}zSVz=i`Y+a%i}-c zrU_Rh{cC1PU-K^f_xdSRYf}@t8xOylAMVEd$&<}VpyIadg6H8V(P!gxEU+6I^V5lY zFo^R#Va?QyKcPd*u`b6TFVt%{uKq8o&cdz9H*Wh2x*JA!h&0kMy4#>bY6wUpNDXNi zjfB)F5u_O*El5hI3?&>t8Udx8fbV>c_j!-w{SUU?*RJcjzvp>=P9TdX{a7xsvz<{u z*@@h}eIGR@is`1S0|aT*%dPs&RfUU(Cv!RqnZ}n-pUhEj3yd~;fg|`w<*&x%faQ@Z zIFHc1rO`j~{}!PMGt9=3OoG%5UGxI_3A95e%ymtk zGs~ywfV|8wQK2WHtl9)CTKm+#QbE60nn9>~tBD9X_0B?;s$p{ofTnvJ>hz9wIRNOb z#C1VE+uqUl+-eWHR#et3{p8PD)f~umhxGd6Rj;7p1wf%i0e+8@@>Ft^)iLt0s^mav ziyX;j*>qPgTQd|A+TL{@vjEStRfTg$G*O&&KahYGNYBay$G_Hn4?8dn69ET6Y2OHq z=<&ayl+M&ACj-G-;0HLN2_Kny2bF=}k6=dfgCk62vher3i*07EKim3FZ;8QQhl9)I z@yGEZcny}ErV(?BzbRNhTY^yX_*zPEH)u9E{U-Cdij5knjia2`S$uo6H^salOpBnb z=FInNS;60`R{?^14w}~ARRC;_p}Sue83O>b`guADPC#!s(>34dMaodD*@0pjKpHXV zt7Vh+L?NZFvQ!`Vb=A+yDfodEZ9wH;R?InGfiNbqL||duCgPxtsa2&_w&#D}jvu@w zl;jU$V%Ab$T?3EGZI==Ltn8N9tmVt0aB`d*>3f>ez=-tDOrZiS9n2DdW1NQ8_|?gI z4HN}9>C6~QG%{I{pCX@bHqydqL Im5^ye-I{v!q|G1Qb;VIbBvlt$3e3h;t%DC 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 literal 0 HcmV?d00001 diff --git a/docs/source/sci_api_tutorial/armer.rst b/docs/source/sci_api_tutorial/armer.rst index fd8ee90..de6427c 100644 --- a/docs/source/sci_api_tutorial/armer.rst +++ b/docs/source/sci_api_tutorial/armer.rst @@ -4,150 +4,260 @@ Briefs ============================================== +In this API named ``Adaptive Resource Manager (ARMer)``, the primary objective is to enhance efficiency by ensuring that resources like CPUs (Central Processing Units) and GPUs (Graphics Processing Units) are used optimally, minimizing idle time and unnecessary resource reservation. +In the context of enzyme modeling using EnzyHTP, ARMer is integrated into the workflow, which includes sub-tasks like mutant generation, molecular dynamics simulations, quantum mechanical calculations, and data analysis. +Using commands implemented in the ARMer Python library, the workflow script configures, submits, and monitors new jobs in HPC clusters that pertain to the actual need of computing resources in a subtask of the workflow. +This is in sharp contrast to the fixed resource allocation scheme where maximal computing resources are requested. + +.. dropdown:: :fa:`eye,mr-1` Click to learn more about ARMer's architechture + + The ARMer Python library consists of two classes: the job class and the HPC class. + + The job class (called ClusterJob in the code) defines properties and functions that are associated with job configuration, submission, and dynamic monitoring of job completion. + + The HPC class (subclasses of ClusterInterface in the code) supports the job class with properties and functions to mediate shell input/output in the user’s local HPC where ARMer is deployed. The HPC class files are stored in a folder named “cluster”. In the folder, _interface.py defines an abstract HPC class as the code interface and accre.py defines an example concrete HPC class we made for our local HPC at Vanderbilt. Users can create new files under this folder defining new concrete HPC classes to easily modify ARMer Python library to be compatible with their local HPC cluster. The instances of the HPC class are used as input for generating the Job instance. The methods of the HPC class are used by the Job instance through the HPC instance to interface with the corresponding local HPC cluster. The new HPC class user defines is required to fulfill the code interfaced defined by the abstract HPC class in _interface.py to make sure they are compatible with the Job class. It is enforced by requiring (by the Job class) all HPC classes to inherit the abstract HPC class so that the new HPC class has to define some required methods (otherwise python will raise an error). + + Then, the ARMer library enables the “workflow script” to run shell commands on other computational nodes these commands are wrapped in the job scripts in the HPC clusters. + +The workflow of ARMer +============================================== -ARMer is a software tool designed to manage and allocate computational resources dynamically, according to the specific needs of various sub-tasks within a computational workflow. Its primary objective is to enhance efficiency by ensuring that resources like CPUs (Central Processing Units) and GPUs (Graphics Processing Units) are used optimally, minimizing idle time and unnecessary resource reservation. -ARMer adjusts the allocation of resources based on the demands of specific sub-tasks in a workflow. For example, certain tasks might require more GPU power due to their graphic-intensive nature, while others might rely more heavily on the CPU for processing. ARMer assesses and allocates these resources in real-time to match these requirements. -In the context of enzyme modeling using EnzyHTP, ARMer is integrated into the workflow, which includes sub-tasks like mutant generation, molecular dynamics simulations, quantum mechanical calculations, and data analysis. Each of these stages has different computing needs, which ARMer manages effectively. +.. panels:: -Overview of ARMer's Main Functions -============================================== -This section provides an overview of the ``ARMer`` module, which is designed to manage job queues for running jobs on a cluster and interface with different Linux resource managers like Slurm. The general workflow of ARMer involves taking job commands, compiling the submission script, submitting and monitoring the job, and recording the completion of the job. From a data flow perspective, ARMer should function similarly to ``subprocess.run()``. One of the key features of ARMer is that it allows users to add support for their own clusters by creating new ClusterInterface classes. + :column: col-lg-12 col-md-12 col-sm-12 col-xs-12 p-2 text-left -#### 1. **Config Job (Submission Script Generation)** -The `config_job` function serves as the constructor for creating a `ClusterJob` instance. It's responsible for setting up the submission script, which dictates how the job will be run on the HPC cluster. Here’s what it does: + .. image:: ../../figures/armer_architect.png + :width: 100% + :alt: single_point_api_io + | -- **Commands and Environment Setup**: It takes a set of commands (specific tasks to be performed), environmental settings (required software or libraries), and resource keywords (CPU/GPU requirements) as inputs. -- **Script Generation**: Combines these elements into a script which includes directives to the scheduler (like SLURM or PBS) on how to allocate resources and execute the computational tasks. +For most of the users, even though the flowchart contains 3 parts, the attention should only be focused on the `Job configuration`, which will be elaborated in the next section. -#### 2. **Submit** -Once the submission script is ready, the `submit` function is used to actually queue the job in the HPC system: +.. dropdown:: :fa:`eye,mr-1` Click to learn more about `Job Submission` + + With the job object instantiated, a job script for the required task can be generated and then submitted by the submit() method. Notably, the format of the job script, the submission commands, and other HPCdependent information are obtained from the HPC class object that is instantiated and passed to the `cluster` argument. -- **Script Deployment**: The submission script is placed in the appropriate directory, ready for execution. -- **Job Submission**: The script is submitted to the cluster's job queue. This function handles any necessary configurations such as setting the directory for execution or adjusting the script path if needed. -- **Monitoring Setup**: It also sets up initial parameters for job monitoring, storing the job ID and other relevant information for later reference. -#### 3. **Monitor (Wait to End)** -Monitoring is crucial for managing jobs on an HPC cluster: +.. dropdown:: :fa:`eye,mr-1` Click to learn more about `Dynamic monitoring` + + Once the job has been submitted, a job ID is added to the object by the function. By tracing the job ID, the “workflow script” can monitor the status of a job object in the queue, and mediate the status by killing, holding, or releasing the job. Notably, the capability of dynamically monitoring the job completion status is vital to high-throughput modeling workflow. + This is because the workflow involves multiple different types of simulation subtasks that must be sequentially operated. + + Two methods have been implemented to achieve dynamic monitoring, they are: wait_to_end() and wait_to_array_end() methods. The wait_to_end() method checks the status of a job in the job queue within a certain period of time (i.e., every 30 s) and exits upon the detection of messages that indicate job completion, error, or cancellation. The wait_to_array_end() method takes multiple job objects and submits them in one job array. Similarly, this method also monitors the status of all jobs in the array regularly and dynamically appends new jobs to the array up to the maximal capacity (i.e., array size). -- **Check Job Status**: This function continuously checks the state of the job (running, pending, completed, cancelled, or error). -- **Completion Detection**: It waits for the job to end, either successfully or due to an error or cancellation, and can take appropriate actions based on the job's outcome, like logging or triggering dependent processes. +Implementation of ARMer in EnzyHTP enables an if_cluster_job option for all computationally insensitive functions (like MD, QM, and free energy calculation). With this option turned on, the subsections that requires a lot of computing power can achieve adaptive resource allocation. -Imports +Input/Output ============================================== +As described in the previous section, only the `Job configuration` requires specific input from different users. +These inputs will be parsed and the output will be passed down to submission and monitoring. +To correctly prepare for the input and output, the user needs to identify the local HPC first. -In order to make use of the API, we should have the API loaded. +Input +------------------------------------------------ -.. code:: python - from subprocess import run - import re - import pytest +``res_keywords`` + configures computing resources for the job. - import clusters - from armer import * + .. admonition:: How to obtain -Execute API + This should refer to the guidelines for each institution's HPC submission syntax. If you need to support your local HPC cluster, please refer to the `Quick Start: 2. Support Your Local Cluster` page from the menu bar on the left. -Arguments and Examples (Vanderbilt Accre) -============================================== + .. dropdown:: :fa:`eye,mr-1` Click here to learn more about ACCRE if you are a Vanderbilt User -``env_settings_list`` - Environment settings in the submission script as a list of strings for commands in each line. - - (list[str]) - - Example: - .. code:: python - >>> env_settings_list = [ - ... 'module load GCC/6.4.0-2.28 OpenMPI/2.1.1', - ... 'module load Amber/17-Python-2.7.14', - ... 'module unload Python/2.7.14 numpy/1.13.1-Python-2.7.14' - ... ] - - -``res_keywords_dict_gpu`` - Resource settings as a dictionary indicating each keyword for GPU resources. - - (dict[str, str]) - - Example: - .. code:: python - >>> res_keywords_dict_gpu = { - ... 'core_type': 'gpu', - ... 'nodes': '1', - ... 'node_cores': '1', - ... 'job_name': 'job_name', - ... 'partition': 'maxwell', - ... 'mem_per_core': '32G', - ... 'walltime': '24:00:00', - ... 'account': 'xxx' - ... } - -The res_keywords_dict_gpu is a dictionary that represents the resource settings for requesting GPU resources on a cluster. The keys in this dictionary are the resource keywords, and their corresponding values are the desired settings for those keywords. -Here's what each key-value pair means: - -'core_type': 'gpu': This specifies that the job should be run on GPU cores. It can also be set as CPU. -'nodes': '1': This requests one node for the job. -'node_cores': '1': This requests one core per node. Since we're using GPUs, we typically request only one core per node. -'job_name': 'job_name': This sets the name of the job to "job_name". You can change this to a more descriptive name for your job. -'partition': 'maxwell': This specifies that the job should be submitted to the "maxwell" partition, which is likely a partition dedicated to GPU resources. -'mem_per_core': '32G': This requests 32 GB of memory per core. -'walltime': '24:00:00': This sets the maximum walltime (execution time) for the job to 24 hours. -'account': 'xxx': This specifies the account to be charged for the job's resource usage. You would need to replace "xxx" with your actual account name. - -This dictionary can be used as the res_keywords argument when configuring a job with the ARMer module, specifically when requesting GPU resources. By passing this dictionary, the job submission script will be generated with the appropriate resource settings for running the job on GPUs. - -``env_settings_str`` - Environment settings in the submission script as a string. - - (str) - - Example: - .. code:: python - >>> env_settings_str = '''module load GCC/6.4.0-2.28 OpenMPI/2.1.1 - ... module load Amber/17-Python-2.7.14 - ... module unload Python/2.7.14 numpy/1.13.1-Python-2.7.14''' - -``res_keywords_str`` - The res_keywords_str is a string that encapsulates the resource settings for a job submission script, typically used with a job scheduler such as SLURM. - - (str) - - Example: - .. code:: python - >>> res_keywords_str = '''#!/bin/bash - ... #SBATCH --nodes=1 - ... #SBATCH --tasks-per-node=24 - ... #SBATCH --job-name=job_name - ... #SBATCH --partition=production - ... #SBATCH --mem-per-cpu=4G - ... #SBATCH --time=24:00:00 - ... #SBATCH --account=xxx - ... ''' - - -Nodes: Specifies the number of compute nodes that the job should use. Here, the job is configured to use one node. -Tasks Per Node: Indicates the number of tasks to run on each node. In this context, it usually correlates with the number of processor cores to be used per node. Here, 24 tasks (or cores) per node are requested. -Job Name: Sets a name for the job, which can be useful for identifying the job within the queue or in reports generated by the scheduler. 'job_name' can be replaced with any descriptive name you prefer. -Partition: Assigns the job to a specific group of nodes or a partition. 'production' likely refers to a partition intended for regular, production-level computations. -Memory Per CPU: Allocates memory for each CPU used by the job. Here, each CPU is assigned 4 gigabytes. -Walltime: Sets the maximum duration for which the job is allowed to run. In this example, the job is allowed to run for up to 24 hours. If the job does not complete within this time, the scheduler will terminate it. -Account: Specifies the account code to be charged for the resources consumed by the job. This is important for systems where computing resources are allocated based on a project or departmental account. 'xxx' should be replaced with the actual account identifier. - -Each of these directives begins with #SBATCH, which is specific to the SLURM scheduler. This prefix is used by SLURM to differentiate script comments from SLURM directives. These settings are crucial for correctly configuring the computational resources required by the job, ensuring it runs efficiently within the constraints of the HPC environment. - - -Support your own HPC -============================================== -ARMer is designed to be highly adaptable, not only supporting the Vanderbilt ACCRE cluster but also capable of being customized for use with other high-performance computing (HPC) systems. By developing new ClusterInterface classes, users can tailor ARMer to meet the specific requirements and configurations of virtually any HPC environment. This flexibility allows ARMer to manage and optimize computational resources across a diverse range of systems, ensuring efficient and effective use of computing power wherever it is deployed. For more details on how to implement ARMer in your own HPC system, you can start by visiting this link. + `core_type`: This specifies that the job should be run on GPU/CPU cores. + + `nodes`: How many nodes needed to request for the job. + `node_cores`: How many cores needed for each node. If GPU is used, usually only one core per node will be requested. + `job_name`: This sets the name of the job to "job_name". You can change this to a more descriptive name for your job. + `partition`: This specifies that the job should be submitted to a specific partition, which is likely a partition dedicated to GPU resources. + + `mem_per_core`: This requests a number of gigabytes of memory per core. + + `walltime`: This sets the maximum walltime (execution time) for the job. '24:00:00' means 24 hours. + + `account``: This specifies the account to be charged for the job's resource usage. +``commands`` + Commands refers to the target shell commands for running external software for a specific enzyme modeling sub-task. + + .. admonition:: How to obtain + The ARMer tool is integrated with other `APIs `_ that requires the ARMer Config. No changes need to be made by users. + +``env_settings`` + env_settings states environment settings of external software (e.g., env_settings = ‘’’module load Gaussian/16.B.01’’’). + + .. admonition:: How to obtain + + Same as `commands`, different subtasks require different environments. + +Output +------------------------------------------------ +A job script will be generated by the “workflow script” using commands implemented in ARMer. +Arguments +============================================== + +.. dropdown:: :fa:`eye,mr-1` Click to see full argument explanations + + 1. For Job Configuration: + + ``commands`` + refers to the target shell commands for running external software for a specific enzyme modeling sub-task + + ``cluster`` + refers to an HPC class object that contains miscellaneous details about user’s local HPC + + ``env_settings`` + states environment settings of external software + + ``res_keywords`` + configures computing resources for the job (including parameters such as `core_type`, `nodes`,`nodes_core`,etc), which can be referenced from `Input/Output <#input-output>`_ section. + + ``jobs`` + a list of ClusterJob object to be execute + + ``period`` + the time cycle for detect job state (Unit: second) + + + 2. For Job Submission: + + ``sub_dir`` + dir for submission. commands in the sub script usually run under this dir. + + ``script_path`` + path for submission script generation. + (default: sub_dir/submit.cmd; will be sub_dir/submit_#.cmd if the file exists. # is a growing index) + + + 3. For Job Monitoring: + + There are two functions: "wait_to_end" (single submission) and "wait_to_array_end" (array submission) + + ``period`` + the time cycle for update job state change (Unit: s) + + The following arguments are array submission only: + + ``jobs`` + a list of ClusterJob object to be execute + + ``array_size`` + + how many jobs are allowed to submit simultaneously. + + (e.g. 5 for 100 jobs means run 20 groups. All groups will be submitted and + in each group, submit the next job only after the previous one finishes.) + + ``sub_dir`` + (default: self.sub_dir) + + submission directory for all jobs in the array. + + Overwrite existing self.sub_dir in the job obj + + * you can set the self value during config_job to make each job different + + ``sub_scirpt_path`` + (default: self.sub_script_path) + + path of the submission script. Overwrite existing self.sub_script_path in the job obj + + * you can set the self value during config_job to make each job different + + +Example Code +============================================== +1. Code to generate job submission script (single and array submission) +--------------------------------------------------------- + +.. admonition:: How input is prepared + (See `Details <#input-output>`_) + +.. code:: python + + from armer import ClusterJob + import clusters - + cluster = clusters.accre.Accre() + + # For a single submission + job = clusterJob.config job( + commands = "g16 < xxx.gjf > xxx.out", + cluster = cluster, + env_settings = cluster.G16_ENV['CPU'], + + res_keywords = {'core_type' : 'cpu', + 'nodes' : '1', + 'nodes_core' : '8', + 'job_name' : 'TEST', + 'partition' : 'production', + 'mem_per_core' : '3G', + 'walltime': '24:00:00', + 'account' : 'xxx' + } + ) + job.submit(sub_dir="./") + job.wait_to_end(period=10) + + # For array submission, 10 submissions in this case + jobs = [] + + for i in range(10): + jobs.append(ClusterJob.config_job( + commands = "g16 < xxx.gjf > xxx.out", + cluster = cluster, + env_settings = cluster.G16_ENV['CPU'], + res_keywords = {'core_type' : 'cpu', + 'nodes' : '1', + 'nodes_core' : '8', + 'job_name' : 'TEST', + 'partition' : 'production', + 'mem_per_core' : '3G', + 'walltime': '24:00:00', + 'account' : 'xxx' + }, + sub_dir="./") + ) + ClusterJob.wait_to_array_end(jobs, period = 30, array_size = 5) + +2. Sample job scripts that performs QM calculations +--------------------------------------------------------- + +For ACCRE users, the SBATCH submission scripts will be generated first with the inputs provided above. Then the env_setting and commands will be tailored to specific tasks, in this case, the QM calculation using Gaussian16. +The job script is generated by the "workflow script" inplemented in ARMer. + +.. code:: bash + + #!/bin/bash + #SBATCH--nodes-1 + #SBATCH --cpus-per-task=8 + + #SBATCH--job-name=EHTP OMcluster + #SBATCH--partition=production + #SBATOH--mem-per-cpu-36 + #SBATCH--time 24:80;80 + #SBATCH --account=xxx + + module load Gaussian/16.8.61 # env_setting + mkdir $TMPDIR/SLURM_JOB_ID + export GAUSS_SCRDIR=$TMPDIR/$SLURM_J0B_ID + + g16 < ./QM_cluster/qm_cluster_1.gjf> ./QM cluster/qm_cluster_1.out # commands + rm -rf $TMPDIR/$SLURM_J0B_ID + + +Reference: +Shao, Q., Jiang, Y., & Yang, Z. J. (2023). ENZYHTP computational directed evolution with Adaptive Resource Allocation. Journal of Chemical Information and Modeling, 63(17), 5650–5659. https://doi.org/10.1021/acs.jcim.3c00618 + + +Author: Jiayue Liu ; Qianzhen Shao From 37d99d2b367c2ed9f7d8a1acfd003331660d87b5 Mon Sep 17 00:00:00 2001 From: Jacqueline Liu Date: Wed, 12 Jun 2024 14:19:55 +0800 Subject: [PATCH 3/9] revised ARMer tutorial --jiayue 0611 --- docs/source/sci_api_tutorial/armer.rst | 334 ++++++++++++++----------- 1 file changed, 183 insertions(+), 151 deletions(-) diff --git a/docs/source/sci_api_tutorial/armer.rst b/docs/source/sci_api_tutorial/armer.rst index de6427c..6de47e0 100644 --- a/docs/source/sci_api_tutorial/armer.rst +++ b/docs/source/sci_api_tutorial/armer.rst @@ -6,8 +6,8 @@ Briefs ============================================== In this API named ``Adaptive Resource Manager (ARMer)``, the primary objective is to enhance efficiency by ensuring that resources like CPUs (Central Processing Units) and GPUs (Graphics Processing Units) are used optimally, minimizing idle time and unnecessary resource reservation. In the context of enzyme modeling using EnzyHTP, ARMer is integrated into the workflow, which includes sub-tasks like mutant generation, molecular dynamics simulations, quantum mechanical calculations, and data analysis. -Using commands implemented in the ARMer Python library, the workflow script configures, submits, and monitors new jobs in HPC clusters that pertain to the actual need of computing resources in a subtask of the workflow. This is in sharp contrast to the fixed resource allocation scheme where maximal computing resources are requested. +For specific details, please refer to the `original paper ` linked. .. dropdown:: :fa:`eye,mr-1` Click to learn more about ARMer's architechture @@ -19,115 +19,64 @@ This is in sharp contrast to the fixed resource allocation scheme where maximal Then, the ARMer library enables the “workflow script” to run shell commands on other computational nodes these commands are wrapped in the job scripts in the HPC clusters. -The workflow of ARMer -============================================== +.. dropdown:: :fa:`eye,mr-1` Click to learn more about ARMer's workflow -.. panels:: + The workflow of ARMer + ============================================== - :column: col-lg-12 col-md-12 col-sm-12 col-xs-12 p-2 text-left + .. panels:: - .. image:: ../../figures/armer_architect.png - :width: 100% - :alt: single_point_api_io - | + :column: col-lg-12 col-md-12 col-sm-12 col-xs-12 p-2 text-left -For most of the users, even though the flowchart contains 3 parts, the attention should only be focused on the `Job configuration`, which will be elaborated in the next section. + .. image:: ../../figures/armer_architect.png + :width: 100% + :alt: single_point_api_io + | -.. dropdown:: :fa:`eye,mr-1` Click to learn more about `Job Submission` - - With the job object instantiated, a job script for the required task can be generated and then submitted by the submit() method. Notably, the format of the job script, the submission commands, and other HPCdependent information are obtained from the HPC class object that is instantiated and passed to the `cluster` argument. -.. dropdown:: :fa:`eye,mr-1` Click to learn more about `Dynamic monitoring` - - Once the job has been submitted, a job ID is added to the object by the function. By tracing the job ID, the “workflow script” can monitor the status of a job object in the queue, and mediate the status by killing, holding, or releasing the job. Notably, the capability of dynamically monitoring the job completion status is vital to high-throughput modeling workflow. - This is because the workflow involves multiple different types of simulation subtasks that must be sequentially operated. - - Two methods have been implemented to achieve dynamic monitoring, they are: wait_to_end() and wait_to_array_end() methods. The wait_to_end() method checks the status of a job in the job queue within a certain period of time (i.e., every 30 s) and exits upon the detection of messages that indicate job completion, error, or cancellation. The wait_to_array_end() method takes multiple job objects and submits them in one job array. Similarly, this method also monitors the status of all jobs in the array regularly and dynamically appends new jobs to the array up to the maximal capacity (i.e., array size). - -Implementation of ARMer in EnzyHTP enables an if_cluster_job option for all computationally insensitive functions (like MD, QM, and free energy calculation). With this option turned on, the subsections that requires a lot of computing power can achieve adaptive resource allocation. - -Input/Output +Three Main Functions of ARMer ============================================== -As described in the previous section, only the `Job configuration` requires specific input from different users. -These inputs will be parsed and the output will be passed down to submission and monitoring. -To correctly prepare for the input and output, the user needs to identify the local HPC first. - -Input ------------------------------------------------- - -``res_keywords`` - configures computing resources for the job. - - .. admonition:: How to obtain - - This should refer to the guidelines for each institution's HPC submission syntax. If you need to support your local HPC cluster, please refer to the `Quick Start: 2. Support Your Local Cluster` page from the menu bar on the left. - - .. dropdown:: :fa:`eye,mr-1` Click here to learn more about ACCRE if you are a Vanderbilt User - - `core_type`: This specifies that the job should be run on GPU/CPU cores. - - `nodes`: How many nodes needed to request for the job. - - `node_cores`: How many cores needed for each node. If GPU is used, usually only one core per node will be requested. - - `job_name`: This sets the name of the job to "job_name". You can change this to a more descriptive name for your job. - - `partition`: This specifies that the job should be submitted to a specific partition, which is likely a partition dedicated to GPU resources. - - `mem_per_core`: This requests a number of gigabytes of memory per core. - - `walltime`: This sets the maximum walltime (execution time) for the job. '24:00:00' means 24 hours. - - `account``: This specifies the account to be charged for the job's resource usage. +The ARMer tool contains three main functions: config job (i.e.: submission script, etc.), submit, monitor (i.e.: wait_to_end) -``commands`` - Commands refers to the target shell commands for running external software for a specific enzyme modeling sub-task. - - .. admonition:: How to obtain +1. Config Job (Submission Script Generation) - The ARMer tool is integrated with other `APIs `_ that requires the ARMer Config. No changes need to be made by users. - -``env_settings`` - env_settings states environment settings of external software (e.g., env_settings = ‘’’module load Gaussian/16.B.01’’’). - - .. admonition:: How to obtain - - Same as `commands`, different subtasks require different environments. - + The config_job function serves as the constructor for creating a ClusterJob instance. It's responsible for setting up the submission script, which dictates how the job will be run on the HPC cluster. -Output ------------------------------------------------- -A job script will be generated by the “workflow script” using commands implemented in ARMer. +.. dropdown:: :fa:`eye,mr-1` Click here to learn what it does: + * Commands and Environment Setup: It takes a set of commands (specific tasks to be performed), environmental settings (required software or libraries), and resource keywords (CPU/GPU requirements) as inputs. -Arguments -============================================== + * Script Generation: Combines these elements into a script which includes directives to the scheduler (like SLURM or PBS) on how to allocate resources and execute the computational tasks. -.. dropdown:: :fa:`eye,mr-1` Click to see full argument explanations - - 1. For Job Configuration: + * Dynamic Allocation: This approach allows the script to be tailored for specific tasks within the workflow, optimizing resource use. +.. dropdown:: :fa:`eye,mr-1` Click here to learn about the arguments in Job Configuration: ``commands`` refers to the target shell commands for running external software for a specific enzyme modeling sub-task ``cluster`` refers to an HPC class object that contains miscellaneous details about user’s local HPC - + ``env_settings`` states environment settings of external software ``res_keywords`` configures computing resources for the job (including parameters such as `core_type`, `nodes`,`nodes_core`,etc), which can be referenced from `Input/Output <#input-output>`_ section. - + ``jobs`` a list of ClusterJob object to be execute ``period`` the time cycle for detect job state (Unit: second) - + +2. Job Submission + + With the job object instantiated, a job script for the required task can be generated and then submitted by the submit() method. - 2. For Job Submission: + Notably, the format of the job script, the submission commands, and other HPC dependent information are obtained from the HPC class object that is instantiated and passed to the `cluster` argument. + +.. dropdown:: :fa:`eye,mr-1` Click here to learn about the arguments in Job Submission: ``sub_dir`` dir for submission. commands in the sub script usually run under this dir. @@ -135,10 +84,17 @@ Arguments ``script_path`` path for submission script generation. (default: sub_dir/submit.cmd; will be sub_dir/submit_#.cmd if the file exists. # is a growing index) - - - 3. For Job Monitoring: + + +3. Dynamic Monitoring + Once the job has been submitted, a job ID is added to the object by the function. By tracing the job ID, the “workflow script” can monitor the status of a job object in the queue, and mediate the status by killing, holding, or releasing the job. + +.. dropdown:: :fa:`eye,mr-1` Click to learn more about `Dynamic monitoring` + The capability of dynamically monitoring the job completion status is vital to high-throughput modeling workflow because the workflow involves multiple different types of simulation subtasks that must be sequentially operated. + Two methods have been implemented to achieve dynamic monitoring, they are: wait_to_end() and wait_to_array_end() methods. The wait_to_end() method checks the status of a job in the job queue within a certain period of time (i.e., every 30 s) and exits upon the detection of messages that indicate job completion, error, or cancellation. The wait_to_array_end() method takes multiple job objects and submits them in one job array. Similarly, this method also monitors the status of all jobs in the array regularly and dynamically appends new jobs to the array up to the maximal capacity (i.e., array size). + +.. dropdown:: :fa:`eye,mr-1` Click to learn more about the arguments in Dynamic monitoring There are two functions: "wait_to_end" (single submission) and "wait_to_array_end" (array submission) ``period`` @@ -171,89 +127,165 @@ Arguments path of the submission script. Overwrite existing self.sub_script_path in the job obj * you can set the self value during config_job to make each job different + + + +For most users, only the `Job configuration` requires specific input from different users. +The first step involves configuring a job using the config_job method. This method prepares the submission script by specifying the commands to be executed, environmental settings, and resource requirements. + +.. admonition:: Here is the `cluster_job_config` dictionary + + These parameters are specified under the argument `res_keywords`. + + `core_type`: This specifies that the job should be run on GPU/CPU cores. + + `nodes`: How many nodes needed to request for the job. + + `node_cores`: How many cores needed for each node. If GPU is used, usually only one core per node will be requested. + + `job_name`: This sets the name of the job to "job_name". You can change this to a more descriptive name for your job. + + `partition`: This specifies that the job should be submitted to a specific partition, which is likely a partition dedicated to GPU resources. + + `mem_per_core`: This requests a number of gigabytes of memory per core. + + `walltime`: This sets the maximum walltime (execution time) for the job. '24:00:00' means 24 hours. + `account``: This specifies the account to be charged for the job's resource usage. -Example Code -============================================== +These inputs will be parsed and the output will be passed down to submission and monitoring. +To correctly prepare for the input and output, the user needs to identify the local HPC first. This should refer to the guidelines for each institution's HPC submission syntax. If you need to support your local HPC cluster, please refer to the `Quick Start: 2. Support Your Local Cluster` page from the menu bar on the left. -1. Code to generate job submission script (single and array submission) ---------------------------------------------------------- -.. admonition:: How input is prepared - (See `Details <#input-output>`_) +How ARMer is used in EnzyHTP APIs +------------------------------------------------ + +1. Developer Integration with Science APIs + + Developers using EnzyHTP can directly leverage ARMer's capabilities through the platform's APIs. -.. code:: python + In EnzyHTP, ARMer is integrated into the workflow, which includes sub-tasks like mutant generation, molecular dynamics simulations, quantum mechanical calculations, and data analysis. + Each subtask was a seperate science API that has different computing needs, which ARMer manages effectively. - from armer import ClusterJob - import clusters - - cluster = clusters.accre.Accre() - - # For a single submission - job = clusterJob.config job( - commands = "g16 < xxx.gjf > xxx.out", - cluster = cluster, - env_settings = cluster.G16_ENV['CPU'], - - res_keywords = {'core_type' : 'cpu', - 'nodes' : '1', - 'nodes_core' : '8', - 'job_name' : 'TEST', - 'partition' : 'production', - 'mem_per_core' : '3G', - 'walltime': '24:00:00', - 'account' : 'xxx' - } - ) - job.submit(sub_dir="./") - job.wait_to_end(period=10) - - # For array submission, 10 submissions in this case - jobs = [] - - for i in range(10): - jobs.append(ClusterJob.config_job( - commands = "g16 < xxx.gjf > xxx.out", - cluster = cluster, - env_settings = cluster.G16_ENV['CPU'], - res_keywords = {'core_type' : 'cpu', - 'nodes' : '1', - 'nodes_core' : '8', - 'job_name' : 'TEST', - 'partition' : 'production', - 'mem_per_core' : '3G', - 'walltime': '24:00:00', - 'account' : 'xxx' - }, - sub_dir="./") + Developers can utilize ARMer to tailor the computational resources specifically for the task at hand, whether it involves intensive CPU usage for molecular dynamics simulations or GPU resources for more complex quantum mechanical calculations. + + +2. User Interaction via Configured API + For users, the interaction with ARMer is streamlined through configurations exposed by API developers: + + Cluster Job Configuration Dictionary: This dictionary (cluster_job_config) shown above is provided by the API developers and exposes various configurable options that users can set according to their specific requirements. It includes parameters such as cluster type, environmental settings, and resource keywords. + + Simplified Job Submission: Users don’t need to manage complex cluster configurations directly. Instead, they provide necessary parameters through a high-level interface, simplifying the computational aspects of enzyme modeling. + + +Input +------------------------------------------------ + In the context of ARMer and EnzyHTP, the cluster is an object that represents a specific HPC cluster configuration. This object is usually an instance of a class that implements the ClusterInterface or a similar interface that ARMer can interact with. + In EnzyHTP, the input for ARMer should be all kinds of "clusters", for example, clusters for MD sampling, clusters for QM caluclations, etc. + +.. dropdown:: :fa:`eye,mr-1` Click here to see examples + + .. admonition:: Example: how cluster_job_config is used in MD simulation sampling + (See `<#Example-code> for more examples`_) + + .. code:: python + + #Building MD Parameterization: + param_method = interface.amber.build_md_parameterizer( + ncaa_param_lib_path=f"{DATA_DIR}ncaa_lib", + force_fields=[ + "leaprc.protein.ff14SB", + "leaprc.gaff", + "leaprc.water.tip3p", + ], ) - ClusterJob.wait_to_array_end(jobs, period = 30, array_size = 5) -2. Sample job scripts that performs QM calculations ---------------------------------------------------------- + #Preparing Constraints: + mut_constraints = [] + for cons in md_constraints: + mut_constraints.append(cons(mutant_stru)) + + #Configuring Cluster Job Settings: Sets up the configuration for the job submission to the cluster, specifically tailoring it for GPU-intensive tasks required in MD simulations. + md_cluster_job_config = { + "cluster" : Accre(), + "res_keywords" : { + "account" : "csb_gpu_acc", + "partition" : "pascal" + } + } + + # Executes the equilibrium molecular dynamics sampling using the specified structure and parameters. + md_result = equi_md_sampling( + stru = mutant_stru, + param_method = param_method, + cluster_job_config = md_cluster_job_config, #The job configuration for submitting this task to the cluster. + job_check_period=10, + prod_constrain=mut_constraints, + prod_time=md_length, + record_period=md_length*0.1, + work_dir=f"{mutant_dir}/MD/" + ) -For ACCRE users, the SBATCH submission scripts will be generated first with the inputs provided above. Then the env_setting and commands will be tailored to specific tasks, in this case, the QM calculation using Gaussian16. -The job script is generated by the "workflow script" inplemented in ARMer. +Example Code +============================================== -.. code:: bash +Calculate single point energy for a QM cluster +--------------------------------------------------------- - #!/bin/bash - #SBATCH--nodes-1 - #SBATCH --cpus-per-task=8 +In this example, we perform single point energy calculation for a QM region and for each snapshot from an ensemble of substrates of Kemp Eliminase. - #SBATCH--job-name=EHTP OMcluster - #SBATCH--partition=production - #SBATOH--mem-per-cpu-36 - #SBATCH--time 24:80;80 - #SBATCH --account=xxx +Note: This is a snippt of a workflow that illustrate how `cluster_job_config` is used in the QM single point Science API.Please refer to the specific API for more details. - module load Gaussian/16.8.61 # env_setting - mkdir $TMPDIR/SLURM_JOB_ID - export GAUSS_SCRDIR=$TMPDIR/$SLURM_J0B_ID +.. code:: python - g16 < ./QM_cluster/qm_cluster_1.gjf> ./QM cluster/qm_cluster_1.out # commands - rm -rf $TMPDIR/$SLURM_J0B_ID - + qm_level_of_theory = QMLevelOfTheory( + basis_set="3-21G", + method="hf", + ) + + # MD sampling results + md_result = equi_md_sampling( + stru = mutant_stru, + param_method = param_method, + parallel_runs = 1, + cluster_job_config = md_cluster_job_config, + job_check_period=10, + prod_constrain=mut_constraints, + prod_time=md_length, + record_period=md_length*0.1, + work_dir=f"{mutant_dir}/MD/" + )[0] + + # Specifies how the QM calculations should be run on the HPC + qm_cluster_job_config = { + "cluster" : Accre(), + "res_keywords" : { + + 'core_type' : 'cpu', + 'nodes' : '1', + 'nodes_core' : '8', + 'job_name' : 'TEST', + 'partition' : 'production', + 'mem_per_core' : '3G', + 'walltime': '24:00:00', + "account" : "yang_lab_csb", + } + + # QM Calculation Function Call: + qm_results = single_point( + stru=md_result, + engine="gaussian", + method=qm_level_of_theory, + regions=["resi 101+254"], + cluster_job_config=qm_cluster_job_config, + job_check_period=60, + job_array_size=20, + work_dir=f"{mutant_dir}/QM_SPE/", + ) + +Please note that for QM and MD the `cluster_job_config`` is different. + +This example neatly encapsulates the end-to-end process from configuring and running MD simulations to performing targeted QM calculations, all managed via ARMer for efficient resource use in a high-performance computing environment. Reference: Shao, Q., Jiang, Y., & Yang, Z. J. (2023). ENZYHTP computational directed evolution with Adaptive Resource Allocation. Journal of Chemical Information and Modeling, 63(17), 5650–5659. https://doi.org/10.1021/acs.jcim.3c00618 From 7784a223283d10f72f05028301d8dcfc0d07f12d Mon Sep 17 00:00:00 2001 From: Jacqueline Liu Date: Wed, 12 Jun 2024 14:38:13 +0800 Subject: [PATCH 4/9] revised ARMer tutorial --jiayue 0611 --- docs/source/sci_api_tutorial/armer.rst | 37 ++++++++++++++------------ 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/docs/source/sci_api_tutorial/armer.rst b/docs/source/sci_api_tutorial/armer.rst index 6de47e0..7130b11 100644 --- a/docs/source/sci_api_tutorial/armer.rst +++ b/docs/source/sci_api_tutorial/armer.rst @@ -5,9 +5,8 @@ Briefs ============================================== In this API named ``Adaptive Resource Manager (ARMer)``, the primary objective is to enhance efficiency by ensuring that resources like CPUs (Central Processing Units) and GPUs (Graphics Processing Units) are used optimally, minimizing idle time and unnecessary resource reservation. -In the context of enzyme modeling using EnzyHTP, ARMer is integrated into the workflow, which includes sub-tasks like mutant generation, molecular dynamics simulations, quantum mechanical calculations, and data analysis. This is in sharp contrast to the fixed resource allocation scheme where maximal computing resources are requested. -For specific details, please refer to the `original paper ` linked. +For specific details, please refer to the `original paper`linked (https://doi.org/10.1021/acs.jcim.3c00618). .. dropdown:: :fa:`eye,mr-1` Click to learn more about ARMer's architechture @@ -37,9 +36,10 @@ For specific details, please refer to the `original paper for more examples`_) + (See Example Code for more examples) .. code:: python @@ -234,7 +237,7 @@ Calculate single point energy for a QM cluster In this example, we perform single point energy calculation for a QM region and for each snapshot from an ensemble of substrates of Kemp Eliminase. -Note: This is a snippt of a workflow that illustrate how `cluster_job_config` is used in the QM single point Science API.Please refer to the specific API for more details. +Note: This is a snippt of a workflow that illustrate how `cluster_job_config` is used in the QM single point Science API. Please refer to the specific API for more details. .. code:: python @@ -271,7 +274,7 @@ Note: This is a snippt of a workflow that illustrate how `cluster_job_config` is "account" : "yang_lab_csb", } - # QM Calculation Function Call: + # QM Calculation Function Call qm_results = single_point( stru=md_result, engine="gaussian", @@ -285,7 +288,7 @@ Note: This is a snippt of a workflow that illustrate how `cluster_job_config` is Please note that for QM and MD the `cluster_job_config`` is different. -This example neatly encapsulates the end-to-end process from configuring and running MD simulations to performing targeted QM calculations, all managed via ARMer for efficient resource use in a high-performance computing environment. +This example encapsulates the end-to-end process from configuring and running MD simulations to performing targeted QM calculations, all managed via ARMer for efficient resource use in a high-performance computing environment. Reference: Shao, Q., Jiang, Y., & Yang, Z. J. (2023). ENZYHTP computational directed evolution with Adaptive Resource Allocation. Journal of Chemical Information and Modeling, 63(17), 5650–5659. https://doi.org/10.1021/acs.jcim.3c00618 From acb009122be2c6de58b58b454f212342ba299ec1 Mon Sep 17 00:00:00 2001 From: Jacqueline Liu Date: Thu, 20 Jun 2024 15:50:01 +0800 Subject: [PATCH 5/9] Jiayue updated ARMer.rst 0619 --- docs/source/sci_api_tutorial/armer.rst | 138 +++++++++---------------- 1 file changed, 50 insertions(+), 88 deletions(-) diff --git a/docs/source/sci_api_tutorial/armer.rst b/docs/source/sci_api_tutorial/armer.rst index 7130b11..885f8df 100644 --- a/docs/source/sci_api_tutorial/armer.rst +++ b/docs/source/sci_api_tutorial/armer.rst @@ -6,7 +6,7 @@ Briefs ============================================== In this API named ``Adaptive Resource Manager (ARMer)``, the primary objective is to enhance efficiency by ensuring that resources like CPUs (Central Processing Units) and GPUs (Graphics Processing Units) are used optimally, minimizing idle time and unnecessary resource reservation. This is in sharp contrast to the fixed resource allocation scheme where maximal computing resources are requested. -For specific details, please refer to the `original paper`linked (https://doi.org/10.1021/acs.jcim.3c00618). +For specific details, please refer to the `ARMer paper `_. .. dropdown:: :fa:`eye,mr-1` Click to learn more about ARMer's architechture @@ -36,12 +36,12 @@ For specific details, please refer to the `original paper`linked (https://doi.or Three Main Functions of ARMer ============================================== -The ARMer tool contains three main functions: config job (i.e.: submission script, etc.), submit, monitor (i.e.: wait_to_end). +The ARMer tool contains three main functions: config job (i.e.: submission script, etc.), submit, monitor (i.e.: ``wait_to_end``). -1. Job Configuration +1. ``config_job`` ------------------------------------------------ - The config_job function serves as the constructor for creating a ClusterJob instance. It's responsible for setting up the submission script, which dictates how the job will be run on the HPC cluster. + The ``config_job`` function serves as the constructor for creating a ClusterJob instance. It's responsible for setting up the submission script, which dictates how the job will be run on the HPC cluster. .. dropdown:: :fa:`eye,mr-1` Click here to learn what it does: @@ -71,7 +71,7 @@ The ARMer tool contains three main functions: config job (i.e.: submission scrip ``period`` the time cycle for detect job state (Unit: second) -2. Job Submission +2. ``submit`` ------------------------------------------------ With the job object instantiated, a job script for the required task can be generated and then submitted by the submit() method. @@ -86,7 +86,7 @@ The ARMer tool contains three main functions: config job (i.e.: submission scrip (default: sub_dir/submit.cmd; will be sub_dir/submit_#.cmd if the file exists. # is a growing index) -3. Dynamic Monitoring +3. ``get_job_state`` ------------------------------------------------ Once the job has been submitted, a job ID is added to the object by the function. By tracing the job ID, the “workflow script” can monitor the status of a job object in the queue, and mediate the status by killing, holding, or releasing the job. @@ -133,35 +133,11 @@ The ARMer tool contains three main functions: config job (i.e.: submission scrip -For most users, only the `Job configuration` requires specific input from different users. -The first step involves configuring a job using the config_job method. This method prepares the submission script by specifying the commands to be executed, environmental settings, and resource requirements. - -.. admonition:: Here is the `cluster_job_config` dictionary - - These parameters are specified under the argument `res_keywords`. - - `core_type`: This specifies that the job should be run on GPU/CPU cores. - - `nodes`: How many nodes needed to request for the job. - - `node_cores`: How many cores needed for each node. If GPU is used, usually only one core per node will be requested. - - `job_name`: This sets the name of the job to "job_name". You can change this to a more descriptive name for your job. - - `partition`: This specifies that the job should be submitted to a specific partition, which is likely a partition dedicated to GPU resources. - - `mem_per_core`: This requests a number of gigabytes of memory per core. - - `walltime`: This sets the maximum walltime (execution time) for the job. '24:00:00' means 24 hours. - - `account``: This specifies the account to be charged for the job's resource usage. - - -The correct input for these parameters should refer to the guidelines for each institution's HPC submission syntax. If you need to support your local HPC cluster, please refer to the `Quick Start: 2. Support Your Local Cluster` page from the menu bar on the left. +cluster_job_config +============================================== -How ARMer is used in EnzyHTP APIs ------------------------------------------------- +However, none of the function will be directly access by user in normal EnzyHTP workflows. They are used by developers in APIs of EnzyHTP. But all of the APIs that uses ARMer will expose an input that allow users to config the resource. .. dropdown:: :fa:`eye,mr-1` Developer Integration with Science APIs` @@ -181,53 +157,36 @@ How ARMer is used in EnzyHTP APIs Simplified Job Submission: Users don’t need to manage complex cluster configurations directly. Instead, they provide necessary parameters through a high-level interface, simplifying the computational aspects of enzyme modeling. -Input ------------------------------------------------- - In EnzyHTP, the cluster is an object that represents a specific HPC cluster configuration. This object is usually an instance of a class that implements the ClusterInterface or a similar interface that ARMer can interact with. - The input for ARMer should be all kinds of "clusters", for example, clusters for MD sampling, clusters for QM caluclations, etc. - -.. dropdown:: :fa:`eye,mr-1` Click here to see example use - - .. admonition:: Example: how cluster_job_config is used in MD simulation sampling - (See Example Code for more examples) - - .. code:: python - - #Building MD Parameterization: - param_method = interface.amber.build_md_parameterizer( - ncaa_param_lib_path=f"{DATA_DIR}ncaa_lib", - force_fields=[ - "leaprc.protein.ff14SB", - "leaprc.gaff", - "leaprc.water.tip3p", - ], - ) - - #Preparing Constraints: - mut_constraints = [] - for cons in md_constraints: - mut_constraints.append(cons(mutant_stru)) - - #Configuring Cluster Job Settings: Sets up the configuration for the job submission to the cluster, specifically tailoring it for GPU-intensive tasks required in MD simulations. - md_cluster_job_config = { - "cluster" : Accre(), - "res_keywords" : { - "account" : "csb_gpu_acc", - "partition" : "pascal" - } - } +Specifically, only the `Job configuration` requires specific input from different users. + +The first step involves configuring a job using the config_job method. This method prepares the submission script by specifying the commands to be executed, environmental settings, and resource requirements. + +.. admonition:: Here is the `cluster_job_config` dictionary + + These parameters are specified under the argument ``res_keywords``. + + ``core_type``: This specifies that the job should be run on GPU/CPU cores. + + ``nodes``: How many nodes needed to request for the job. + + ``node_cores``: How many cores needed for each node. If GPU is used, usually only one core per node will be requested. + + ``job_name``: This sets the name of the job to "job_name". You can change this to a more descriptive name for your job. + + ``partition``: This specifies that the job should be submitted to a specific partition, which is likely a partition dedicated to GPU resources. + + ``mem_per_core``: This requests a number of gigabytes of memory per core. + + ``walltime``: This sets the maximum walltime (execution time) for the job. '24:00:00' means 24 hours. + + ``account``: This specifies the account to be charged for the job's resource usage. + - # Executes the equilibrium molecular dynamics sampling using the specified structure and parameters. - md_result = equi_md_sampling( - stru = mutant_stru, - param_method = param_method, - cluster_job_config = md_cluster_job_config, #The job configuration for submitting this task to the cluster. - job_check_period=10, - prod_constrain=mut_constraints, - prod_time=md_length, - record_period=md_length*0.1, - work_dir=f"{mutant_dir}/MD/" - ) + Besides ``res_keywords``, ``cluster`` is an object that represents a specific HPC cluster configuration. This object is usually an instance of a class that implements the ClusterInterface or a similar interface that ARMer can interact with. + For example, the key to ``cluster`` is ``Accre()`` at vanderbilt since the Advanced Computing Center for Research and Education (ACCRE) is the gateway to HPC at Vanderbilt University. + +The correct input for these parameters should refer to the guidelines for each institution's HPC submission syntax. If you need to support your local HPC cluster, please refer to the `Quick Start: 2. Support Your Local Cluster` page from the menu bar on the left. + Example Code ============================================== @@ -235,16 +194,21 @@ Example Code Calculate single point energy for a QM cluster --------------------------------------------------------- -In this example, we perform single point energy calculation for a QM region and for each snapshot from an ensemble of substrates of Kemp Eliminase. +This example illustrates how to effectively prepare and use the ``cluster_job_config`` for computational tasks in a workflow that includes MD and QM. +The focus here is on setting up the configuration to efficiently utilize computational resources on a High-Performance Computing (HPC) system. +For more comprehensive details on running QM calculations, please refer to the QM cluster tutorial. -Note: This is a snippt of a workflow that illustrate how `cluster_job_config` is used in the QM single point Science API. Please refer to the specific API for more details. +.. admonition:: How ``qm_cluster_job_config`` is prepared -.. code:: python + ``cluster`` + speicify which HPC you are using + (See `Details <#cluster_job_config>`_) - qm_level_of_theory = QMLevelOfTheory( - basis_set="3-21G", - method="hf", - ) + ``res_keywords`` + defined the parameters that tailor to the HPC you are using + (See `Details <#cluster_job_config>`_) + +.. code:: python # MD sampling results md_result = equi_md_sampling( @@ -263,7 +227,6 @@ Note: This is a snippt of a workflow that illustrate how `cluster_job_config` is qm_cluster_job_config = { "cluster" : Accre(), "res_keywords" : { - 'core_type' : 'cpu', 'nodes' : '1', 'nodes_core' : '8', @@ -274,7 +237,6 @@ Note: This is a snippt of a workflow that illustrate how `cluster_job_config` is "account" : "yang_lab_csb", } - # QM Calculation Function Call qm_results = single_point( stru=md_result, engine="gaussian", From a204052bb83f2b1b5b44a4cb75aa99682fd852d9 Mon Sep 17 00:00:00 2001 From: Jacqueline Liu Date: Fri, 28 Jun 2024 18:40:46 +0800 Subject: [PATCH 6/9] Jiayue updated ARMer.rst 0626 --- docs/figures/armer_config.png | Bin 0 -> 56728 bytes docs/figures/armer_monitor.png | Bin 0 -> 33111 bytes docs/figures/armer_submit.png | Bin 0 -> 28111 bytes docs/source/sci_api_tutorial/armer.rst | 27 +++++++++++++++++++++++-- 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 docs/figures/armer_config.png create mode 100644 docs/figures/armer_monitor.png create mode 100644 docs/figures/armer_submit.png diff --git a/docs/figures/armer_config.png b/docs/figures/armer_config.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2bc0cb98d2cadc36302f87940cae09ffaadced GIT binary patch literal 56728 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 RZ7lewAbVXV_p<)u{{!cb_W}R_ literal 0 HcmV?d00001 diff --git a/docs/figures/armer_monitor.png b/docs/figures/armer_monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..06c5cd428eef487e9747f02dbf4df00ec929cdeb GIT binary patch literal 33111 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 nDgQbIf2sWI5dU|FSk$dk6}^ Date: Fri, 28 Jun 2024 19:06:33 +0800 Subject: [PATCH 7/9] Jiayue updated ARMer.rst 0626 --- docs/source/sci_api_tutorial/armer.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/source/sci_api_tutorial/armer.rst b/docs/source/sci_api_tutorial/armer.rst index 899153e..8c42e08 100644 --- a/docs/source/sci_api_tutorial/armer.rst +++ b/docs/source/sci_api_tutorial/armer.rst @@ -118,11 +118,9 @@ The ARMer tool contains three main functions: config job (i.e.: submission scrip The capability of dynamically monitoring the job completion status is vital to high-throughput modeling workflow because the workflow involves multiple different types of simulation subtasks that must be sequentially operated. - Two methods have been implemented to achieve dynamic monitoring, they are: wait_to_end() and wait_to_array_end() methods. The wait_to_end() method checks the status of a job in the job queue within a certain period of time (i.e., every 30 s) and exits upon the detection of messages that indicate job completion, error, or cancellation. The wait_to_array_end() method takes multiple job objects and submits them in one job array. Similarly, this method also monitors the status of all jobs in the array regularly and dynamically appends new jobs to the array up to the maximal capacity (i.e., array size). + Two methods have been implemented to achieve dynamic monitoring, they are: ``wait_to_end()`` and ``wait_to_array_end()`` methods. The ``wait_to_end()`` method checks the status of a job in the job queue within a certain period of time (i.e., every 30 s) and exits upon the detection of messages that indicate job completion, error, or cancellation. The ``wait_to_array_end()`` method takes multiple job objects and submits them in one job array. Similarly, this method also monitors the status of all jobs in the array regularly and dynamically appends new jobs to the array up to the maximal capacity (i.e., array size). .. dropdown:: :fa:`eye,mr-1` Click to learn more about the arguments in Dynamic monitoring - - There are two functions: "wait_to_end" (single submission) and "wait_to_array_end" (array submission) ``period`` the time cycle for update job state change (Unit: s) From 13d60913d9e99c331806a5c6a70c9289a0d7f197 Mon Sep 17 00:00:00 2001 From: Jacqueline Liu Date: Fri, 12 Jul 2024 16:49:24 -0400 Subject: [PATCH 8/9] Jiayue updated ARMer.rst 0712 --- docs/source/sci_api_tutorial/armer.rst | 44 ++++++++++++++++---------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/docs/source/sci_api_tutorial/armer.rst b/docs/source/sci_api_tutorial/armer.rst index 8c42e08..091cb57 100644 --- a/docs/source/sci_api_tutorial/armer.rst +++ b/docs/source/sci_api_tutorial/armer.rst @@ -153,7 +153,7 @@ The ARMer tool contains three main functions: config job (i.e.: submission scrip * you can set the self value during config_job to make each job different - +**Specifically, only the ``Job configuration`` requires specific input from different users.** cluster_job_config ============================================== @@ -178,29 +178,32 @@ However, none of the function will be directly access by user in normal EnzyHTP Simplified Job Submission: Users don’t need to manage complex cluster configurations directly. Instead, they provide necessary parameters through a high-level interface, simplifying the computational aspects of enzyme modeling. -Specifically, only the `Job configuration` requires specific input from different users. -The first step involves configuring a job using the config_job method. This method prepares the submission script by specifying the commands to be executed, environmental settings, and resource requirements. + .. admonition:: Here is the `cluster_job_config` dictionary - These parameters are specified under the argument ``res_keywords``. + These parameters are specified under the argument ``res_keywords``. + + **These keywords are build-in keywords in EnzyHTP, which are not the same as the keywords of SLURM or other job scheduling system.** - ``core_type``: This specifies that the job should be run on GPU/CPU cores. + ``res_keywords``: - ``nodes``: How many nodes needed to request for the job. + ``core_type``: This specifies that the job should be run on GPU/CPU cores. - ``node_cores``: How many cores needed for each node. If GPU is used, usually only one core per node will be requested. + ``nodes``: How many nodes needed to request for the job. - ``job_name``: This sets the name of the job to "job_name". You can change this to a more descriptive name for your job. + ``node_cores``: How many cores needed for each node. If GPU is used, usually only one core per node will be requested. - ``partition``: This specifies that the job should be submitted to a specific partition, which is likely a partition dedicated to GPU resources. - - ``mem_per_core``: This requests a number of gigabytes of memory per core. - - ``walltime``: This sets the maximum walltime (execution time) for the job. '24:00:00' means 24 hours. - - ``account``: This specifies the account to be charged for the job's resource usage. + ``job_name``: This sets the name of the job to "job_name". You can change this to a more descriptive name for your job. + + ``partition``: This specifies that the job should be submitted to a specific partition, which is likely a partition dedicated to GPU resources. + + ``mem_per_core``: This requests a number of gigabytes of memory per core. + + ``walltime``: This sets the maximum walltime (execution time) for the job. '24:00:00' means 24 hours. + + ``account``: This specifies the account to be charged for the job's resource usage. Besides ``res_keywords``, ``cluster`` is an object that represents a specific HPC cluster configuration. This object is usually an instance of a class that implements the ClusterInterface or a similar interface that ARMer can interact with. @@ -231,6 +234,15 @@ For more comprehensive details on running QM calculations, please refer to the Q .. code:: python + # Specifies how the MD calculations should be run on the HPC + md_cluster_job_config = { + "cluster" : Accre(), + "res_keywords" : { + "account" : "csb_gpu_acc", + "partition" : "pascal" + } + } + # MD sampling results md_result = equi_md_sampling( stru = mutant_stru, @@ -269,7 +281,7 @@ For more comprehensive details on running QM calculations, please refer to the Q work_dir=f"{mutant_dir}/QM_SPE/", ) -Please note that for QM and MD the `cluster_job_config`` is different. +Please note that for QM and MD, the `cluster_job_config` is different. This example encapsulates the end-to-end process from configuring and running MD simulations to performing targeted QM calculations, all managed via ARMer for efficient resource use in a high-performance computing environment. From 067540fd0fbfd5631b47759ea9b29109df80b203 Mon Sep 17 00:00:00 2001 From: Jacqueline Liu Date: Mon, 15 Jul 2024 08:43:20 -0400 Subject: [PATCH 9/9] Jiayue updated ARMer.rst 0715 --- docs/source/sci_api_tutorial/armer.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/source/sci_api_tutorial/armer.rst b/docs/source/sci_api_tutorial/armer.rst index 091cb57..af5523c 100644 --- a/docs/source/sci_api_tutorial/armer.rst +++ b/docs/source/sci_api_tutorial/armer.rst @@ -153,7 +153,10 @@ The ARMer tool contains three main functions: config job (i.e.: submission scrip * you can set the self value during config_job to make each job different -**Specifically, only the ``Job configuration`` requires specific input from different users.** + + +**Specifically, only the** ``cluster_job_config`` **that links to the** ``config_job`` **function requires specific input from different users.** + cluster_job_config ============================================== @@ -175,7 +178,7 @@ However, none of the function will be directly access by user in normal EnzyHTP Cluster Job Configuration Dictionary: This dictionary (cluster_job_config) shown above is provided by the API developers and exposes various configurable options that users can set according to their specific requirements. It includes parameters such as cluster type, environmental settings, and resource keywords. - Simplified Job Submission: Users don’t need to manage complex cluster configurations directly. Instead, they provide necessary parameters through a high-level interface, simplifying the computational aspects of enzyme modeling. + Simplified Job Submission: Users don't need to manage complex cluster configurations directly. Instead, they provide necessary parameters through a high-level interface, simplifying the computational aspects of enzyme modeling. @@ -187,7 +190,7 @@ However, none of the function will be directly access by user in normal EnzyHTP **These keywords are build-in keywords in EnzyHTP, which are not the same as the keywords of SLURM or other job scheduling system.** - ``res_keywords``: + ``res_keywords``: ``core_type``: This specifies that the job should be run on GPU/CPU cores.