From b7b9839f806630703488059a27ad77c65d8fd208 Mon Sep 17 00:00:00 2001 From: KiprasKancys Date: Thu, 28 Jul 2016 12:27:50 +0200 Subject: [PATCH 1/4] code for model on spark --- Popularity/Kipras/pyspark/groupAndSum.py | 12 ++ Popularity/Kipras/pyspark/pyspark_ml.py | 159 +++++++++++++++ Popularity/Kipras/pyspark/rollOnSpark.sh | 249 +++++++++++++++++++++++ Popularity/Kipras/pyspark/run.sh | 52 +++++ Popularity/Kipras/week_5/plot_SPARK.png | Bin 0 -> 94189 bytes 5 files changed, 472 insertions(+) create mode 100644 Popularity/Kipras/pyspark/groupAndSum.py create mode 100644 Popularity/Kipras/pyspark/pyspark_ml.py create mode 100644 Popularity/Kipras/pyspark/rollOnSpark.sh create mode 100644 Popularity/Kipras/pyspark/run.sh create mode 100644 Popularity/Kipras/week_5/plot_SPARK.png diff --git a/Popularity/Kipras/pyspark/groupAndSum.py b/Popularity/Kipras/pyspark/groupAndSum.py new file mode 100644 index 0000000..5c41a7c --- /dev/null +++ b/Popularity/Kipras/pyspark/groupAndSum.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +import sys +import pandas + +fileName = sys.argv[1] + +df = pandas.read_csv(fileName) +grouped = df.groupby("model") + +grouped.sum().to_csv(fileName) + diff --git a/Popularity/Kipras/pyspark/pyspark_ml.py b/Popularity/Kipras/pyspark/pyspark_ml.py new file mode 100644 index 0000000..122c45d --- /dev/null +++ b/Popularity/Kipras/pyspark/pyspark_ml.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python + +# File : pyspark_ml.py +# Author : Kipras Kancys +# Description: pysmark model + +# system modules +import time +import argparse + +# pyspark modules +from pyspark import SparkContext +from pyspark.sql import SQLContext, Row +from pyspark.sql.types import StructType, StructField, LongType + +from pyspark.ml import Pipeline +from pyspark.ml.feature import StringIndexer, VectorIndexer, Binarizer +from pyspark.ml.classification import RandomForestClassifier + +from pyspark.ml.evaluation import MulticlassClassificationEvaluator + +from pyspark.mllib.regression import LabeledPoint + +class OptionParser(): + def __init__(self): + "User based option parser" + self.parser = argparse.ArgumentParser(prog='PROG', description=__doc__) + self.parser.add_argument("--clf", action="store", + dest="clf", default="", help="Classifier to use") + self.parser.add_argument("--train", action="store", + dest="ftrain", default="", help="Input train file") + self.parser.add_argument("--valid", action="store", + dest="fvalid", default="", help="Input validation file") + self.parser.add_argument("--prediction", action="store", + dest="fprediction", default="output.txt", help="Output file for predictions") + +class SparkLogger(object): + "Control Spark Logger" + def __init__(self, ctx): + self.logger = ctx._jvm.org.apache.log4j + self.rlogger = self.logger.LogManager.getRootLogger() + + def set_level(self, level): + "Set Spark Logger level" + self.rlogger.setLevel(getattr(self.logger.Level, level)) + + def lprint(self, stream, msg): + "Print message via Spark Logger to given stream" + getattr(self.rlogger, stream)(msg) + + def info(self, msg): + "Print message via Spark Logger to info stream" + self.lprint('info', msg) + + def error(self, msg): + "Print message via Spark Logger to error stream" + self.lprint('error', msg) + + def warning(self, msg): + "Print message via Spark Logger to warning stream" + self.lprint('warning', msg) + +def prepData(sqlContext, ctx, fname): + "Load, add label col and convert data into label and feature type dataframe (needed for MLlib)" + + lines = ctx.textFile(fname) + parts = lines.map(lambda l: l.split(",")) + + # to set col names: + newColumns = parts.first() + parts = parts.filter(lambda x:x !=newColumns) + df = parts.toDF() + oldColumns = df.schema.names + df = reduce(lambda df, idx: df.withColumnRenamed(oldColumns[idx], newColumns[idx]), xrange(len(oldColumns)), df) + + # make labeled points, needed for algorithms to work + temp = df.map(lambda row: LabeledPoint(row[-1], row[:-1])) + temp = sqlContext.createDataFrame(temp, ['features','label']) + + return df,temp + +def indexData(df): + "Add index to dataframe, needed for joining columns" + schema = StructType(df.schema.fields[:] + [StructField("index", LongType(), False)]) + row_with_index = Row("row", "index") + return (df.rdd.zipWithIndex() + .map(lambda ri: row_with_index(*list(ri[0]) + [ri[1]])) + .toDF(schema)) + +def toCSVLine(data): + return ','.join(str(d) for d in data) + +def RFC(): + return RandomForestClassifier(labelCol="indexed") + +def model(classifier, ftrain, fvalid, fprediction): + + startTime = time.time() + + ctx = SparkContext(appName="model_on_Spark") + sqlContext = SQLContext(ctx) + logger = SparkLogger(ctx) + logger.set_level('ERROR') + + # load and prepare training and validation data + rawTrain, train = prepData(sqlContext, ctx, ftrain) + rawValid, valid = prepData(sqlContext, ctx, fvalid) + + # is needed to join columns + valid = indexData(valid) + rawValid = indexData(rawValid) + + classifiers = { + "RandomForestClassifier" : RFC + } + + clf = classifiers[classifier]() + + labelIndexer = StringIndexer(inputCol="label", outputCol="indexed") + featureIndexer = VectorIndexer(inputCol="features", outputCol="indexedFeatures") + + # train and predict + pipeline = Pipeline(stages=[labelIndexer, featureIndexer, clf]) + model = pipeline.fit(train) + + predictions = model.transform(valid) + + # write to file: + + subsetPrediction = predictions.select("prediction", "index") + subsetValidData = rawValid.select("dataset", "index") + + output = (subsetValidData + .join(subsetPrediction, subsetPrediction.index == subsetValidData.index) + .drop("index") + .drop("index")) + + lines = output.map(toCSVLine) + lines.saveAsTextFile('output') + + evaluator = MulticlassClassificationEvaluator( + labelCol="label", predictionCol="prediction", metricName="precision") + accuracy = evaluator.evaluate(predictions) + print "Test Error = %g" % (1.0 - accuracy) + + executionTime = time.time() - startTime + row=classifier+','+str(executionTime) + ctx.parallelize([row]).saveAsTextFile("timing") + +def main(): + "Main function" + + optmgr = OptionParser() + opts = optmgr.parser.parse_args() + + model(opts.clf, opts.ftrain, opts.fvalid, opts.fprediction) + +if __name__ == '__main__': + main() diff --git a/Popularity/Kipras/pyspark/rollOnSpark.sh b/Popularity/Kipras/pyspark/rollOnSpark.sh new file mode 100644 index 0000000..ba30141 --- /dev/null +++ b/Popularity/Kipras/pyspark/rollOnSpark.sh @@ -0,0 +1,249 @@ +#!/bin/bash + +# date : 2016 04 01 +# author : Mantas Briliauskas < m dot briliauskas eta gmail dot com > +# SPARK part author : Kipras Kancys < kipras dot kan eta gmail dot com > +# description : prep data, perform rolling forecast on SPARK, record results and plot + +# main script settings +use_log=0 +use_ensemble=0 +plot_result=1 + +# dataframe selection options + +data=("old" "new") + +old_path=/afs/cern.ch/user/v/valya/public/analytics/data_old +new_path=/afs/cern.ch/user/v/valya/public/analytics/data + +# rolling forecast +train_start=20160526 +train_end=20160601 +train_max_trail_days=0 # length of training data, use 0 for fixed start date +valid_step_days=7 # iteration step length +valid_step_data_ext=5 # validation data extension to period starting[train_end+1] + # ending [train_end+1+valid_step_days+valid_step_data_ext] + # needed to catch the data within the period, default +5 +valid_end=20160622 # stop date. use future date like 20200101 to run until data + +# other options +#classifiers=("XGBClassifier" "RandomForestClassifier" "SGDClassifier" "pca_rfc" "pca_sgd" "pca_xgb") +classifiers=("RandomForestClassifier") + +drops="campain,creation_date,tier_name,dataset_access_type,dataset_id,energy,flown_with,idataset,last_modification_date,last_modified_by,mcmevts,mcmpid,mcmtype,nseq,pdataset,physics_group_name,prep_id,pwg,this_dataset,rnaccess,rnusers,rtotcpu,s_0,s_1,s_2,s_3,s_4,totcpu,wct,cpu,xtcrosssection,processed_ds_name,processing_version" + +scorer="tpr,tnr" +plot_file="graph.png" +result_file="result_out.csv" +running_time_file="model_running.csv" + +finished="no" # iteration indicator + +# merges old or new data +merge_period_data() { + # merge_period_data {old;new} date_start date_end file_out {train;valid} + pref=$1; __train_start=$2; __train_end=$3; __fout=$4 __tag=$5 + dol='$' + path=`eval "echo \"${dol}${pref}_path\""` + files=`get_file_list $path $__train_start $__train_end` + #echo "[$pref] $tag files: $files" + merge_csv --fin=$files --fout=$__fout +} + +# prepares iteration training data +prepare_train_data() { + # prepare_train_data {old,new} date_train_end + pref=$1; __train_end=$2 + dol='$' + path=`eval "echo \"${dol}${pref}_path\""` + if [ -f ${pref}_train.csv.gz ]; then + if [ $train_max_trail_days -ne 0 ]; then + __train_start=`newdate --date=$__train_end --step=-$train_max_trail_days` + echo "[$pref] Merging training data... [$__train_start, $__train_end]" + merge_period_data $pref $__train_start $__train_end ${pref}_train.csv.gz + else + echo "[$pref] Merging training and validation data..." + tfiles="${pref}_train.csv.gz,${pref}_valid.csv.gz" + merge_csv --fin=$tfiles --fout="_${pref}_train.csv.gz" + mv "_${pref}_train.csv.gz" ${pref}_train.csv.gz + fi + else + echo "[$pref] Merging init training data... ($train_start $__train_end)" + merge_period_data $pref $train_start $train_end ${pref}_train.csv.gz + fi + # transformation performed after validation data is known +} + +# returns difference between dates +dates_diff() { + # dates_diff date1 date2 + ## ======== + ## test results: filter files from dir with 169 dataframe files + ## python 15s (calc only diff of numbers) : `python -c "print $2-$1"` + ## awk 2-3s (calc only diff of numbers) : `awk "BEGIN {print $2-$1}"` + ## perl 3s (calc only diff of numbers) : `perl -e "${dol}d=$d2-$d1; print \"${dol}d\";"` + ## perl/posix 9s (exact diff of dates) : `perl -e "use Date::Parse; use POSIX; ${dol}d1=str2time(\"$d1\"); ${dol}d2=str2time(\"$d2\"); ${dol}d3=floor((${dol}d2-${dol}d1)/(24*60*60)); print \"${dol}d3\";"` + ## exact diff is not needed for now, enabling awk + ###### + d1=$1; d2=$2 + dol='$' + d=`awk "BEGIN {print $2-$1}"` + echo "$d" +} + +# produces a list of dataframes to work with +get_file_list() { + # get_file_list data_path start_date end_date + if [ $# -ne 3 ]; then echo "ERROR in get_file_list(). Given params: $@"; exit 1; fi + path=$1; start_date=$2; end_date=$3; + files="" + for f in `ls $path | egrep "\.csv\.gz$"`; do + st=`echo $f | awk '{z=split($1,a,"/"); split(a[z],b,"."); n=split(b[1],c,"-"); print c[n-1]}'` + en=`echo $f | awk '{z=split($1,a,"/"); split(a[z],b,"."); n=split(b[1],c,"-"); print c[n]}'` + diff_st=`dates_diff $start_date $st` + diff_en=`dates_diff $en $end_date` + if [ $diff_st -ge 0 -a $diff_en -ge 0 ]; then + files="$path/$f,$files" + fi + done + if [ -n "$files" ]; then + echo ${files::${#files}-1} + else + echo "" + fi +} + +# checks consistency of train and valid data +column_count_check() { + # column_count_check {old,new} train_clf_file valid_clf_file + pref=$1 + f1=$2 #usually train_clf.csv.gz + f2=$3 #usually valid_clf.csv.gz + hdiff=`headers_diff $f1 $f2` + if [ ! "${#hdiff}" -le 0 ]; then + endl=$'\n' + echo "[$pref] Error: different number of attributes. Difference:$endl$hdiff" + exit 1 + fi +} + + +run_model_on_hadoop(){ + #ssh to analytix and run script + + { + ssh -o "StrictHostKeyChecking no" analytix << EOF + cd spark + bash run.sh $1 $2 $3 $4 $5 +EOF + } || { + echo 'Failed to run, fixing know hosts' + sed -i "/\b\(analytix\)\b/d" /afs/cern.ch/user/k/kkancys/.ssh/known_hosts + ssh -o "StrictHostKeyChecking no" analytix << EOF + cd spark + bash run.sh $1 $2 $3 $4 $5 +EOF + } +} + + +# predicts, verifies, and stores the result +predict_and_write() { + # predict_and_measure {old,new} classifier validation_start_date + pref=$1; clf=$2; valid_start=$3 + + # model --learner=$clf --idcol=id --target=target --train-file="${pref}_train_clf.csv.gz" --newdata="${pref}_valid_clf.csv.gz" --scaler=StandardScaler --predict="${pref}_${clf}.txt" --split=0 --timeout=$running_time_file #--proba + + run_model_on_hadoop $clf "${pref}_train_clf.csv.gz" "${pref}_valid_clf.csv.gz" "${pref}_${clf}.txt" $running_time_file + + out=`check_prediction --fin="${pref}_valid_clf.csv.gz" --fpred="${pref}_${clf}.txt" --scorer=$scorer --plain-output` #--threshold=0.5` + # do not uncomment if ensembler used + #rm "${pref}_${clf}.txt" + echo "[$pref] to csv: $out" + echo "$pref,$clf,$valid_start,$out" >> "$result_file" +} + +# ensemble part +ensemble_and_write() { + # ensemble_and_write (old|new) validation_file validation_start_date + pref=$1; fvalid=$2; valid_start=$3 + echo "[$pref] Collecting ensemble..." + ensemble_predictions --fbeg="${pref}_" --fout="${pref}_Ensemble.txt" + out=`check_prediction --fin="${pref}_valid_clf.csv.gz" --fpred="${pref}_Ensemble.txt" --scorer=$scorer --plain-output` + echo "[$pref] to csv: $out" + echo "$pref,Ensemble,$valid_start,$out" >> "$result_file" +} + +# result file preparation +prepare_out_csv() { + echo "dftype,clf,date,$scorer" > "$result_file" +} + +##### MAIN ITERATION ##### + +# predicts and measures performance, then concats train and valid data +iteration() { + # usage : iteration {old,new} date_train_end + pref=$1; __train_end=$2; __valid_start=`newdate --date=$2 --step=1` + dol='$' + echo "[$pref] Separation date: $__valid_start" + vdata_step=`python -c "print($valid_step_days+$valid_step_data_ext)"` + __valid_end=`newdate --date=$__valid_start --step=$vdata_step` + path=`eval "echo \"${dol}${pref}_path\""` + vfiles=`get_file_list $path $__valid_start $__valid_end` + if [[ ! -z "${vfiles// }" ]] || [[ "$__valid_end" -gt $valid_end ]]; then + prepare_train_data $pref $__train_end + echo "[$pref] Validation files: \"$vfiles\"" + echo "[$pref] Preparing validation, transforming all data..." + merge_csv --fin=$vfiles --fout=${pref}_valid.csv.gz + __drops=`find_drops --file1=${pref}_train.csv.gz --file2=${pref}_valid.csv.gz --drops=$drops` + logstr=""; if [ $use_log -eq 1 ]; then logstr="--log-thr=100000"; fi #logstr="--log-all" + transform_csv --fin=${pref}_train.csv.gz --fout=${pref}_train_clf.csv.gz --target=naccess --target-thr=10 --drops=$__drops $logstr + transform_csv --fin=${pref}_valid.csv.gz --fout=${pref}_valid_clf.csv.gz --target=naccess --target-thr=10 --drops=$__drops $logstr + echo "[$pref] Data is prepared. Verifying..." + if [ $use_log -ne 1 ]; then + verify_dfr --file1=${pref}_train.csv.gz --file2=${pref}_train_clf.csv.gz + verify_dfr --file1=${pref}_valid.csv.gz --file2=${pref}_valid_clf.csv.gz + fi + column_count_check $pref ${pref}_train_clf.csv.gz ${pref}_valid_clf.csv.gz + echo "[$pref] Predicting, writing data ..." + for clf in "${classifiers[@]}"; do + predict_and_write $pref $clf $__valid_start + done + if [ $use_ensemble -eq 1 ]; then + ensemble_and_write $pref ${pref}_valid_clf.csv.gz $__valid_start + fi + else + finished="yes" + fi +} + +# prepares result file +prepare_out_csv $result_file + +echo "model,running_time_s" > $running_time_file + + +for d in "${data[@]}"; do + if [ -f "${d}_train.csv.gz" ]; then rm "${d}_train.csv.gz"; fi + finished="no" + n=1 + __train_end=$train_end + while [ "$finished" == "no" ]; do + echo "===== Starting iteration << $n >> ===== |`date +'%Y-%m-%d %T'`|" + iteration $d $__train_end + __train_end=`newdate --date=$__train_end --step=$valid_step_days` + ((n+=1)) + if [ `newdate --date=$__train_end --step=$valid_step_days` -gt $valid_end ]; then + break + fi + done + echo "[$d] Work done." +done + +python groupAndSum.py $running_time_file + +if [ $plot_result -eq 1 ]; then + csv_to_graph --fin=$result_file --fout=$plot_file --timein=$running_time_file --x-eq --col-rb +fi diff --git a/Popularity/Kipras/pyspark/run.sh b/Popularity/Kipras/pyspark/run.sh new file mode 100644 index 0000000..d3af0dc --- /dev/null +++ b/Popularity/Kipras/pyspark/run.sh @@ -0,0 +1,52 @@ +#!/bin/sh +# Author: Kipras Kancys +# A script to move data to HDFS, submit a spark job and retrieve results + +pyscript=pyspark_ml.py + +clf=$1 # classifier +ftrain=$2 # train data file +fvalid=$3 # valid data file +foutput=$4 # output file +ftime=$5 # time file + +if $(hadoop fs -test -f $ftrain); then + echo "Train data file already exist on HDFS DFS" +else + hdfs dfs -copyFromLocal $ftrain $ftrain + echo "Train data file was copied to HDFS DFS"; +fi + +if $(hadoop fs -test -f $fvalid); then + echo "Validation data file already exist on HDFS DFS" +else + hdfs dfs -copyFromLocal $fvalid $fvalid + echo "Validation data file was copied to HDFS DFS"; +fi + +PYSPARK_PYTHON='/afs/cern.ch/user/v/valya/public/python27' \ + spark-submit \ + --master yarn-client \ + --executor-memory 2g \ + --driver-class-path '/usr/lib/hive/lib/*' \ + --driver-java-options '-Dspark.executor.extraClassPath=/usr/lib/hive/lib/*' \ + $pyscript --clf $clf --train=$ftrain --valid=$fvalid + +# get files from HDFS +hdfs dfs -copyToLocal output . +hdfs dfs -copyToLocal timing . + +hdfs dfs -rm -R output +hdfs dfs -rm -R timing +hdfs dfs -rm $ftrain +hdfs dfs -rm $fvalid + +# write results to output file +echo "dataset,prediction" > $foutput #header +find ./output -name 'part*' | while read line; do cat "$line" >> $foutput; done +rm -rf output + +# write time result to time file +find ./timing -name 'part*' | while read line; do cat "$line" >> $ftime; done +rm -rf timing + diff --git a/Popularity/Kipras/week_5/plot_SPARK.png b/Popularity/Kipras/week_5/plot_SPARK.png new file mode 100644 index 0000000000000000000000000000000000000000..12b151059d7946ebf85e33f5dff2de2da9cb9e96 GIT binary patch literal 94189 zcmcG$c|4Wd8$P^KA~KXjW(_h`6f!H6NTJA(AyZM3u`;WS5rt+YQ-;c{kXcbthRn*C znPi@MucyxZJ?HoP<9*-#`JB(G-QLe$&syug@9VnmYd!wzN0n%(Sg1%O5{>d9#bYEA zc{Pc&vXyc*-s$>$yc_>pWiPL+Nr{&$rI{c8zQ*Q|u04rFXH5LJB3>@el0@PnDJ$;R zyc|CC)k*(IKPSbH%Df#L7@HLzY>iIKIFuIT6XI`mZPQxwN2z;6O#Oxi8~5xk6;oh7 zT>oCIp4-QZ_w{p)cY2mi?j93^s;{h{WxaB3O}^VuA=4|->smS6`ssL^%lGkjUi4&& zf4;)5>DR5GU-!o=L11IGzuzA(yQ0mKfBf4zjh#A*+c*F5`amAg_ve)qvrnyi^v4(d zc$oyF82g(&PYHQ!TyR{|t^hXxW=Q^W#Wl`2&zI+inTg!W!&1G_+jz6#GnRfEQXD437 zG|0-z_BEzPf9QOFxFN|P)uuyU%Xh!i%{AO!iPyM(8%tEk7BR7npPwEnc`V~%v%KVX z@7}$_qM{XB4h9zXMtIP2Mf-8AUr%=7!pJnsVHFiBd}=iV1B2!Lgap31so?Xs%V_h?owOVr9P#?uyFc9B z6`W>Xo^LO_S5$P;K;do6s|#&ToZcFd^4`;i`zT2FRegpk`!|+}?n-9h=-TsPK{5UB9Uem#w)q+mfL=Nw=Py8z^W~u{piu7 zRn^t|iEBHJnZ?A$Di3zsN!;0Sa`lA^7s7TKaeR(bQ<9e_bDrp1fn~#Vc79fqdpl6~ z%wDE<;|{%3eN~an!X~Q%Z``PUdW02Y*thd;SFtzsvDaQ+tKN0nvB@}Vc7!i2&0i3g zl8V;PwzH^-S(9X#$A6xIo}Pr6Sy-AMNy*4i^rm9`G1*|$RrgGrs*F>@E@q;+re^(~ z(-r$7WZj-5CkLy^&aNt0ntLW+vHfVc=e27q9UL60Qj8U_)wd|+HdPAq@T}gV6y&A9 z)7QsmwP$!qwprB~Mq}Td`-)o_h}-n9NP|Q_ZU#I<&9A zeeslu3E9e(D>JN`b~otkKHr$aUAC8NH}#@@@23N|`L(bwy|@*8cylQtWL$g<^PD4( z#j5aXC$Z(vbW-aVxXYADm}Q9s{G(c$jeEAH>1q@ycqOf`*+jU^`$Up{v1n9We5FtN9% zhMIVd@?C>WMJ#JpX(#EgAX$CQVN6X;wfK@{8+5TOh+P4{NbEVq0|&Tyc_|Txr5OK) zX7W|5o?rs}0t3C0lXsN{a|Xx9^LqLCY?hQ{DOeagoUe8=8N)I!zw_3gVS9>IQ<}WY zIvMwc%NQN!nNQ(Yo<8NlBuA$#mEK^*=qNChYuKV4NI>@_?4M>B@`Uc^3FWgIAFq@v zdHa?e*^XJnfjB^dNQ&Uso2xy)o4_3*^6|l{}JKOT|ywKjgWnp~B z=~-C=eCarQnx}|gcztQt)NqS$d;6({xxwTg6BBQum4a<1`ZOvYh*Ecz1()@Ij*C5? z7o6xbP*ZOW)tT58ck~Rmf!Is?m3Wn@##MJyK*z(KU+Ha}7JgCG1z1_|lctCLFh& z9MHl~b*5L!9&dcQ|Jv#rVP%>%{MBZ=?>FYV&AZ5bid69RQsrSl{$V*9LoftTG4kh5>$Lh}|0@dWr0jEk)aIDyIC$sgd$Z1k+3^vFFP+Vm^Yu{& zsEIYy^5s79Lhts7i&f_v|Kg&eNcDNGsU`Oao}=Nss;a88jg=QH!$LwfKY#J!?Pyn7 zKyL82Z)V2E#@wGCNofb(TE|E;Ki*liBzhB2cjx1_0P1`R3C^a_vZ|`6{er5B<@Hli0xLh*@%bUODn$9 zpTZMTBHBEb4Kx#u9pGNlh(5@dF*-H1(QR(x{bYFB{7`zO;^N#S;~l>FuiP#b_j@O% z+dK}R$Bx;8sXBD@=tg<7i37-k49SLhAgZe*E~l z4I8$4(Rbc8a$i?kT3RFQMQ`%BadNNz>x;wJ%1*GQdF*CoWu;bA zt2B}ENz;9@Lr{>2kmk&DOoOS{5jHJC<{vg_`9_{d^VpX3Bq}P3$okK9QakfCEt} zHucQ2T10Lk-3$*8ypTV;8n1Y*XB%lbq~ojHKZQ$BF?=C;zI-WmFp&9*ZC7dD;5P0L z4D;i3zKc$+jS;8Cq-K0d6;0gx~rs7BeNOpe0xbUc)YjL z6f;-#`E%$J4YLplS?`dFN=UPWl$3zg^w&#m_!fkW zpPVNLl$VXN?aWDq$Q`lfckbMwGJT8$s%z}#K3|dl5y@OV*-*yf+_}Sp>2lSJJJZU} zp^QjLNqLJsefrcdAYkRqTXEPXMO9Vm+}Z#PCoX%KO(Lz4)aQ<-rI&e@TT(Jdy;t{@wSmRivnt6l($YWPZ;vSa@PR7Nd9oPeyLIng ze9DoYk-qz*q0YwZ435}_(AMo17S`w!YGumSrzId(u8`woB+uqqX5{&mq^cx?*ZOT| zIGv;J7dO8=&uU_7x{j4q!0qjKEM!eu#r;p_yYEjp<|E-pB2D$xzj#=@>%QYa?S3mO z!SAhk0h#9-I+4WtkdyL-1r2gG)bNc zmm&4F=1EPBv<07hWz9J2OyBLjn0+=?P8&-;k0fNd;VUhcR!(t5+sk1~*TFYWvH?~gr1!Rf4tJ^W*AtQc8^29xgP z#z`X3Yu|PZhdb+JBrD4_&CBkWbw7Kn-kum6>s}R#| z=zXPT-jZ8Rv29l4;?VQAJwv0p&XZK9PoJi8lJr=TPSVf5S{A1J+ZbX z^Hak$43bL09B=Up_Nt!{%+{mx;j!wGRI)Uxu2}DI(nG z_%H#Zv%L{rDA-hk80>XmRhFKf9s*PWUHa0niX9qsb9E)kx1fHO`iEY?YN`p@cj1j& z2h9Ysk4TQqj}(*u{GtY7916i4GBIjhSC-v(P7k+G09XR67JvQ9J~}$ui2Mgw4G8SX zA>+*JTD-%nFmThJ7;$zswiKWj*W{B=uQLi1zj?EYhll4_>eU2-L#7R>KWAZ4h!1163G4ts5z;F|OWJ9a9~i*2i(hp;13Nnn@H5b#N!646 zNCYL=$s{vrzL1v7{zwfLRZp(SyZc{fn75zm9ja`KxI3|=&l74~=(&QDnmY9RHeJ(q z*B2$L%Ltfh@ij*j*mM+Gj%|=({rWKLOPz1lxQ@Nw&Mb9NFg!e5J^CQcmwY#=G738& zl{WwmDVIhJ9R_OGfW?K>-+%bfw7u|3W12a2K1vDO;t6AM2?=BvmJ=sVNGx@WF6|{T zZ`u@zL^ZQG-IfX%D`=FTt6nB1CbpX7ePIwZbHmcs)|J>W`ni`iI!f9-mKXQ74QFI# zGP*bL?F5AKyK%$Y$LC;>^d=S-{;y9#=!8T?-x4e4D0uSZ$(W~4Hwy}?>P?|c>gPFY zIqS7HHZmg_Q?(pWRQxvoc*X9y_eAW~KiAE&=^(Ri%fA7eSCl5o4&M zsI3ql6Wt!_KvX}q$I=>E{bq&*KyGC3W*o8soo28j03lbXsi^@t9_~j8q!9=^8R+)RBi`HJ@d` zi$2&spPwG-3fPsu54FO!qnLbQtb7+y_k2V^|3-eKtkt>cI z`KTXJ@!D-(OkP1@d@->LX-*^0+0lD*L|&du5T{&FOw3jw-YAvZ{6ZokZ*m+5k!=DH z=e;>{OiWBjPtPs39|)uPwe!>EC{&a@z^EKu=Z9ZmM_XNqIBHgKR5OQs_3F(#cF^qH zxwA3HQ2=Y=1NK2=to{)O(hn?HCm?HMmhBenFIiU(1Z?Eqx>YeJc`FZ($-A4};&$IC zO-xLFRLU*4qdwfeewPp=0Jv=+3V8YY9#%_as`FaIkaBTYPxZ0%CXh0DP0bCM3zCP& zvg@lBu$3gEf}q29cN+J8dgN5f?e)%fq_(>H3Q!)vtbbph1)GH3DjzWQ zd|#XAatSEW6k+Ul{d#e0o(rKbkR%GOgx!vf-4?_qag~COgG*L6ztQC4rAtbHF<==K zLv00|00*TgX+qXt#QV9|n}aSs6_T*rU;A8_fynm&iKE1=pn72~wqwO(^UFSdq_MTN zy(i-$M$ABA;XcfIkIRiqsFcKXY~D;JEG(>(ewxOM9&qeVZO=siXA7{4D^z1KWSlk& zj{IClYc#TyB_$pDxKKC+@@T23)*}ZySs#x(%ARWWem(H@8lg19h9^(BjLpnqg#6z^ z1Q~mzY5JqRsIz=mL6{*>=t&1;{>UR!?-kwW`nMaOJNK;Wbbn2(Ji^d_hME~4i$2E zH!EoEhhpwWb~X3s@^xH70?0J@_-}Avzmtn@s5uaEK}WA zC3y6Km$TUG1?Si|AQDm+9~RK)-9wojX^JpkNElSb!W;+}xZ~)q6CI zlL&`&6OT_z(#MsDDw%fb^LBQ2dI4h*N!goTel4f0euhQ0{Mj-BCXN5-P#|Us9E0ye z7~dA`2=BXh@6HS+7sQA)d6bQgk24%Rc#v2F*Tu;OlcKBSQD8#yl-#ZPZUXsBbLR-o zM|?B!#0!2vPo7BytO+9&!YCAcltM*<_ei_VX;R*@-F3UXo2sCT051hyW*h>av9%9` z@*MF>N=hO)4gN>atnAWVUi8>Hj2ACnlm|OwW?{JwN_`z#S+DaWyTNlH9Ex3~H@xwA z8#}x8$gA3Z67v#kxZh;k_d>W~!iL2Vf#2;W?ow|QqzBfloSgZ0>Ue;c!9@TThTqHoJKXQ^kxHqMNfdR47 zwu^I)-se%Ic)-gP!Hm3vgM;tMy5$s$YF`XT9tZ$^@P_%Tzl6-Jv5#4j^A% ziO>(Ye*J1*US6@zU96HsGqSJ=Sa+7o^v?AR45L%SC&eWtH})~>2H#%PXWeTZ2-whp zIfNkNtIAV;iwR}TJDHs6ME#nb&|o|I`~9&6_}%PwAGcLgJQlV_Ix0F^*rJNd+Z@I9 z*yRw7CfhWQmGACXW@LyU-q;_CoiDydLH7f{v~~M-CJVNvsC>FKHAylO7UjUceI%l+ z;g8%hGVHtWuf6pB%at29Zq)8Pw{y4e5eSKzI(KH*EI{7{U}DWUTc^^YbD=HYJ2doo zzU@XIdNR3%A1etd3stJGzuy>$!{YPP8?{fNnlxtHZzpcDjMIY)yE>Rt?$hKsr+uZN zx0>uD6B6#5N-G)}86gna@cVC3(Fim^XiL~v$M3ak8W}|}ysC03S_)ruI`I?M)h4jW+ zYHE?(@ z%92!jm6ae!Kte-hx0(KKz$WJot$5;QJ%Bt5H#he^Vbj$FngHpmeR1-YdZHg^pMn-8Zr`&O zwPiK8V$ihpl>h0m4@Y|5@ViV6Y0NYQUcY{9W@Uyr$^fLO4#Z@Z$Fl5WS+@sWXLL`V zWCgU2H+U@uwfPEB{T7PjR3UJO9ipkgn_!Fq0S zab|#h8ylOO^%3H>WGFfoZTT{18*}B=#Z}orfmc{+q-v{O-0ithz+VbA$RWhfPH(5 z%^tDQU_Nl)Z|kcy1X&IloUwcP@}-2`x{Vv}^v;*p*Nc^9S$r64LK<@zX=TSK4?u#o zMJjR~*S$HtfByj`r7q~X1e$&zVtG|fZgB&44*!IET6%iA!u{Rm^b8E4UA<`_%_F(X zLxF*Tr_9aC@g7+wr<}VqEt~kw-o}flcTQN8urNa2=YseR{tTL2<08Cm+qSaLY$!$;)pc!ge)^eYAX!s}B?Ch3>3|R~onX{6K7gn9tw{v15{s#%RudP6i;F(C{PY<~IGP__!qq?+5#<0Si+RO+1650z-;h$?q3#d5xN3ip9{$a~4JU zy-vt6W8LLWrL!PLoshPEjE|Q3VcAn8j_LOw>)OLQ)fV z9N2)uL(j=c$E}z&axE$)B?VgHOOfyr)D6g$VVj2q1fb9W@v)%2^9I+(&Z7Z_H-*Nh zgW*YyEE{C!qaxZe~I8Mh%MwE%jy*NJDFmsDC>Rb1AoP-##-xZwl?5s#lUwn;|72 zQ(go00o(S0pv0HakBx}XB0qEH40>tkH87AiBeeJM;bZNL8|toVRWc zw8a|zZ<7w1nD46Bmo7lCr?$4XPI>wAPU)(Zo={&*Pz?w*WoT$9#dX#W(5|Gu{^h>; zN_P&(Tg1@Nac=MHqxA6bu>6vqE7=Mp7m4jfsDrqdwGeKxbN4AIP+YZt^Sc*7q2Csg zJr%x#G+hL>2<+(Xr8c*_XTpKYN&x5R(VeECpn&AThF+(3;|MZp$G2}@=p~ncVQD35 z?)Rl--!Qeuc>-M-i$Y{VC^*1F*4VANNm@OFL*?jxraDiaU4WqVGwWAAzJXxMu9EZp zFeL}YotRCOt(wYtBag*xH{#ZsZD8CzLNm)ZP|=Z{mrT@Dl(@}2JO}$PBB>vIBX{^4 z?A5DR5wp(Vw%;C2?YYn@O|-UNL)Lxz&d*O}?^N$LCFQ=#J*h^-ayXX3+>plvTyVRz z8^Wcu4=p(p^HTJ z%`UrG&cNX7v>OYi&57S;-C|#Lv;|NPND@`Hev-q~1Oej!@~i6VykEbTf<%y%BFo3O zhKN}Jy@`p5AKiD2I?-91<#^5Y$j-ft1BH7n4Grkl6@XHK=kw@wb_@?2+$`URd+1D6 z!#zZGrr35JB+|z{5zF;}`V=5C8P;D}K$=xrIHfMG#r7!0-tqqN!zL>`I}%M)+@rch z9QxvojXM2Cs;U*f;_SGRK4X^O5|A%Y`exici7WK|hWbiiRG`g+>gx1IA4z)Kb$^IN zK?QfX(;Ubqu^u_J7|TxxzS5U}kg)qcjAxPehmA{3VJz#|*aA_xh;-1`kj(j5+KG&G zd1*m{0MW6B?{1tp2KUQti=oeOy~K+n>Cr)`+J~01v8m}bsH^+6wV4F8lQf&%mlkH3 zWt>F@8j^znXHFr(5w$gFjg9&4O;A~5JkYY^>~z4L*=@hRk0+Ga9EX!XfBsDL{oW#v z3GQ%NTF3@+dES^}e2re-4<3U^V2zhnO`9|QgMv1qALr%m-R&$0@-6Jpr|xa4^+Hdp zB3vT9unZXc&dk8GZphPbuprdZsUUo52y;1AQa$64nP{G z&IkrUAxJZ{*jRH^>Gk+XXQ-O&IwTT8q+x=F#9!ZtS)h8RQ>s{idI7cB3khDid}4C4 z8de3O{E=*?hIC_MVt6wW&?5tv1Ygf{o8O2=096a%Btco4pK_I5w6Q6?zvs-&n>Ri8 zocY8hEW8d_McjQs982PhwiRQUIXpQ0qm6Me32E$qQ&zSGY8h^gs{DwmD%yT0pSV># zl443WDmaMNbgVfLo=)aj#*0IZS0JRU1j>N{K=^xGfzk6(T!PW(wC&K=^lKHZPQ;BN zy&PjbfBt;m;9zev&+A;t?!LZ0*WgFlpGrzrBF`#9n0yi)eGTb~kj3%0Vu)7s%*=l1 zw-mm6M+xcB_tB$AH9Aw@zY5&wQo&|t_V@SCf^Z0oO|xao7A@aUfvJ8X(ggV2a&k_> zM!}=@I1oM8w|HHScwIT& zXgBLY*Q^#UzK&u0(J(_b6jFqERaI3Xd<^uPHu-}WM*$xJ(W?e64u5^kggaQ^N@ZB5 z(LV{c_XMCVkv6*O=UnpfC%8G=3h&;1l~Asg&?j> ze}OvA#?Ef9DngrrFplcfxG9^bbG;9^XZ6i$-P3N)LzqS=9U;xRSm9lUx$2kghVfR- zR1;&&@tyBd(*uHnN|BTiL01?BPPD@%a4j;Dn_vU7ZgcHO7=%bwEQTaT@gpO} zPRA+x2AvpTt41NBwXK(LT(TP7WfL?HYSN(nEC8>e(Z__li|vk#j0AL1K>t_X3Oi>D zmd_ySlWBF-fyVSRYW{L`JqmfBqBFj25foet7lXE6a?E2T<#MGLdYLxe9~doXA&w9X zkPwpw)M^>$9j5vdCF!QP2OK#neCHlf5N`||1Z%?mmVrj1>rF#Cq^4E|jx^3@xC8VA zIr=Ru9uQ(4x(0`WL{KyBd;-Z|qTalxJy>qZ^Tmtv)knSJ!&oKk%!20m)|o?rl}DSJ zx;Cy{aUI8w(DH7|HEV83s&KDDGQW;RFohIK@bm-K^$2siSiWi3m_vpei+ez5El%uK3HfyLXw8R6Jom zF&V6XaR?5hSe4rdIhPAmW4S7d?hqE2bzOZ z)U+e?U573g9NUEnGCo>MF@I~>sySm#p35|m#92fvJjtmyo*M7@=ob{^lbR|F&K&@4 z`4r3;q}@I?{a;`2g&gGt2(2<-T~~K|ZV=7SXt*xoHKJFqU%y@mbrr^`l@Kz#A)geF z-lujpLZ=frJb6Iq`T=CU*odMUB9NgPCDL9~@h_g(LhinP5o?rnarnW+94ZDfwI{Y~ zqSiAXxK&P}{f>mr1HWF!$Vf2WRZ&|5huRb9FU+Wd{91{t0OZ%QOK!Nqy7$D4>1$L6 zqVchsj$HCqeH(QJQ#UxbHMI z%|b80Bogg%;^NPB_dvIoM~-VQgNy*_vO3%T45Y7;&z~94e$W#CgoHDS&RM^s`=i~S zWbCZ(W+Z2z<=c*ZQ?}Ga=KTR+Q&L`j*tzBfFQH%Iv$z!|OBenJsI%=T7+Aoi5rtlb zop(#Bs&0l-c1HpRCDLB0rJr{=rj%=xz|^C#D6~B$DUIn(I^@RN#e*P<-LDIPH;us; z-mYh@etqZ=$-zN#zjlN8a_L!Bo)$WVk}HX{U61md7<|3FUf?%mO%AYp>NX8)=vqW? zyA=I-SYM)|`eY5U?H8IKvuGTU&B(|Q0vBy;YI3XUy0f9RwH2lU-^3EGAA_X>UfJqu ze~f0}+M?gwshxdpPBTBaOM_^xMt1D$>%Tn|_qg}di@@q=Q!VyVDVNzX?#I$=iUT*f zu77mB(q+>p@36zFs&DYy8qZGb0A}8QJoN5_LJl&Bl3Zl4slV{cmxXJbMqfwitT*%X{Sm={M!YOyY>5N(ek$bIi7R>gcbDz!W#~&> z$HIa)d8xI&Z5clkJid;%cX;>(KIKQ{H7zh%>>AJ6t7Srubv__s?+kqD?Cgcv_WV zc^sy?gL*IoiPt{Uro-q`UcD-V7!d0SaH%-loJo*2m{*j`x2xXsga@!clb#I8q6ods zw%G+aF*tcKcYg8v{Vj*ogksW zC`3*t3^@;d$!5TgoB0;1Mk0Os^l1hdL>RP^tyc@(v2f^i;K^B+MmSKkiD{2DUA_e3 zUa&aD`pxdAu(Q)3ryaDGM3R$}Q++5#Lqf7!N!W`YKYk28R7BVn`)jsgqE~|omx03i zBLQ`Ez74o1?Ua_`0fzmX%ZieUihm;WHxKw6b8Jkmh9jk7ELnu&uG69J_g0p%e%7E# zy2%~Q%je5h*G`4M)3@)P&$Es&fJC5vAqi-cD5Pb0uU zoxsFM8z(F%UTA5rre))OyBocJ1dOs;PFuD;MVtHl4$>2F7hpSi1RE@B=q2+Ug5?{E z#z8cU?ca!jJHtLxh)}|HfgnOZnW8bBlAeAI-etHaiCzj~vZ$m)!8zwOY9z@M?XGCk zvLKQtpw1SsN`P2qSyyp*P}d@0`|m*mJdl3+V>?_;5D+^dACo+x8b>275Y!9{zi$2d zkS(p4D*;s%Eh3m28wpEa))XP`ft`{_=c5gDYW}7T5}}` zTQ(&(0T$p_q9*_=7;7NdIl7grm6esD-s-%x+5~fH5CE})kr5|}o`WNZu&4D&PQ$>; z;VQWOgUS|>J`A-NGM5kN#ka-_aKHy~$RrAdtL$gT&EuQ}yh!^W z4ukPdP1q*{im% zwPlOwa)*i+JrUnXRfKmA{b1st0ZuiPl|^GO0CKX3h>8->2BA-QO9(L>&VQowNrL&U z2q0+%i7+MsdXq?14Gl`@=*K!z(6V^~Nutn@NKi49PMzYyUVti61@9bo(@GLj2OP6% z(DwF0sX*(R_$`#K+qAu7W8H_tr7j(HHfd>YWiZWuoarA`X z4A_^*R9*zIpXjS5wiI?hwPP;aXbCotl@%0LqS?8Eq@$}FiPWR=>PB#I8CvTasU~mb z*~hVDeV^m#;0588+5h+<92+o1wgX#Hl|#S0j;>QDlw!h6hTH?&0MV9JQEP8QPXLC& zeHIqHgnNT%OG9V4CplR_7X(uQA$M=ArbdV8o`(&ChJWGwZD(WIS~`1dP{kNY!6>G^ zA4MoBW4(Vk#6-(aimYu6pYL(WSG|^Xdw!})wS2GFbJHj|E9ueNE7Ue}BS(9fF!~Up z?Mv&gR9s!}C!Uv>ngvnQnr%2kbekGJ_~^ZtHk@+QEo=CcUm3-=@2rAx7)uIO;@Ez9Ix zYi^o{vlN>U6eZv{Rav%O(y!X!K|(nAKm+WNwDy2Qx4pgH6H1+qo*w^mR-BIMsf-9l zOmv`Wf^xnR6x?R!hcVn7n;V$$zHNw5*!(3*B_!{R4c!;1NT6;0OuA6AYE!o3W-FVy?G#b zd=s~qX0A1?1*m%DBpe1Kzk2Oj>_q~+0Y3quU#+dhS+GBFsJdi_#Co&R<8fwx3zoS8EhbZ30aU z)Ot8!j#fjUi?Vr+mOF&6LkhuyhPgU=Oq`s-&}52GuF;9P27?srAvW_<=V9E80`Abs zuvka5mKu_cm}Z>O?nZNYWfqj{3_*L|hYPSQ?uTT6v6QFoJeRcRz<~oDFzFS-M|vIk zt|xm0@mkc@#z|y=?Ck8~oC@yqo`HjqE}guETdxGlQ4J3bslUE>9^reC|4wo283h zsAVM2Iyn&Sx23tkT||Qkll2C=1SK-$bG=Lz<1y8Jqsm6$fO%8X(@G{Ln*n6nySro6 z-*A8kV!qqIeOrYOBf5>D!bnU-4ly_JVaI=!wEB{@4&9W#npkT0`Qg0@>JRf4!4xB- zqgSGF0k|BEPKckse-U;s!5uB-E3u%k@34}7GDA!-VbKf@_Jv}NJ>ZRv5)HROymm4N zzzrqg*f8xM95e-gM<%_Jp1y}L2E7HCX2-M_!f^AzrVeZrCvAN2j|9HNX#_%C1mcuP zI&R%if%J&tScVmX^@T)O;FZP4b6%nVqst@iG!~O#g+5vQi5D!uMS-9bn$J!gnLA|; zyTj$#v294nG4FMzN80E}MAsd3DrRwFsEGl^`N!1Mo#xXU2R(?Ra0$mLa4UqVoH(PQ zPU$fYIOcs#(03BVAtOdo1LAE5_$^6Yfdd-;|lPAc+H#s zm)taGwxD+xgksqRIgC*1?hyD6`>_PuHfDQnS7#@HD=To!nLy*D`>QFKq*hf-l{?-G zc;4#h67^*W9b3fj8@SGr2Gps}!`&o)`3Dy5x zyLHCv9;svubzL~VglxIcI<+V}Zo4ouI{k8_M$q1!jOgL~CF>xivoSnU5dpvZO-$*9 zqwK{0W~X%=OAmiBV?_@oAjoa1M~-OOZdK%rtBA;}h&Vv}HeMfo{4mb?`8k|Il-eyK z;&tcFM)a6zcJ10_ads?Zy&G>rLP8^wD+=@}3yb&xn_n=}ulD*~?I(Y5Z(uy)U>I?d z4(z@;n$4pRP z^vN%eeOpuW`Lh=LC#6_mjC)d-k`havEYDZX;?OL-t7a=?=x~;)hx3b~=H~yQ*>4pA zet@PSfkda9meKw^YPxn#4oZquW6J(IZu)hMlq1>$-m~g*6>GrFZw=V+$nsa~q-gz8 z_59*v+W)FHP|{8jGaXCzmqWp^Hv`J)u@sv8e>v}~NmUo$5&4s~ZmdpFWZiQ*Fj3)& z;4cwCL%Hbh3o00O-2b$(F+R^r{Zr*p)I9b-H=`Lv!!D^=$F08cr{MU{q4@>T{vvpP z9h$nCS;}vF;AbC>Sa5#t`~|z{-`{bz79Tq?`tkAc+iL{=-Hl5w|fB*&0HY>&O{IxM>Ne?V-Y*G~pt>l% zDj7gw34i`*LV8w~_}VGrA4G^=A*C9y}UDc)?Bylruzl_1o=Ps%avCTg#`uGcC1;tw`@ z#J9$9_7skmI%r-KFuTc3eu3*R6#HZy_j+8$O+-AL`nClun&4u8UPhPNi`4EDIIks| zMYg<)el=3d2YNZlCSO{Kl%@a$-wi9dJtsDBiS{oqhb+%8XMFo|H)3tx+6xQXyp;=^ zR(K{__^phKOC(x!@m_%F;(~$?5+&D0tq=Y+vvcj6j~e+%g~=(OWTZ(oAJ?=}C5dG0 zS$dzjJn!M{p_eVFJ*H+@_|onMovUyyajdHP>8Q3%t}y%edo-KO4k<}~H7CC?I z^J6C;SkliV@0(#6<@LpaNY+FyE3@Q`>|C%uAbIo7v8-YjXYQ6W-{oXl#=bE*z0$t; zrBnT0+|X^t@$Tlr)Zx3;eC2yrru9Vgv%ol!&={h&Uur&QqIPq5;Pdta76uC4-h;&( zp53-iHjw62%@si1`tsUUW$x6Lb4R~-ZD7+M(%i&>wk^G$9-#xrYvR!ZDjDcGokEM9 zP>X|qMN-1EA@btkzH8s#Wf|oizM{^v>~SSSHPw5r)hy_?K~K1-^5M=(*4=EhzhwnEl^j!aJo?L?#1X}BbNnx%e`dUAB|TS9QkqPPbGMVw6y;J zC9zVkT?<f5S(+e*+sOZ3^$?cZnt#dFzpthW)jx|eKnF~%|CoqB^zZBNIqLqtPk%!Qe(@Vr zl%1k~D}#SLazllC?}12F$}(ceUMv=?>$FH_l)Ws92j?-iCHYPtVAKQAwg z{O`~r(Kq~k*09lkzBKsEPWQwRcj0X!5Eb|IsR{aW@rHSlI3b6_$Ty&2_E_x2gCB5k znmi{b2Qo|<+DGGGry=PP-Cp$NpFmJ1tp9cyYu2vy0+WJp2QlnAIc{FP8ep&&vHlz%Lm@E|!k`Hy>3*FYm%>km{Cxtw}wSwpwMX=$00_iX3WlTW_| z@82FLM6L3JLL^gAzSb8!Fz}RLb*3vwhz8W1S=U3B#!5hWX*ei?nghv|9MSKO`$9(AODUWTDrRT2L=Xe z;cJ2*+z$?z)$Rm^_WZ|iiQ`bxHQe0tcJJODcI#H;bgRp*6g6~j?CkBefEZR%(DnsM zeOK4hdw@ex+{%)de>@o*AIBB>k{g~unZwg96hc1HQE@o;ao@guJK^MB!+RqlfUHlq za8bH7`W~gH{oXHhW%9$$31d#l6(o{STzP)+msb}e@QWfiTmAOUn?5DExm!?(H(Z|7 zadCNFpJeb1wwVFg{k8S=!ykJrIl191Ut(fnPP|0N4PN)6|!rZd}=-3yH13x6PP8wJCi?Ax-k!E1D~H@Cjf zO+U!MqpA*jrM4Td4f)4=!X*x?Rz=dySFI^7l40jbF>Lad9a7j%^0b+8eRxEPq#s%C z(}!L~{ki14r^`zt%XhXee!o=k`Q(MXSPbiMi0oY77IryzeLgMT!u)D1^j9H4lJiir)trCbjk#1SIUAly~WY37IH z~0mB(di0v}HlFsu&A*+Owk*=@E;ncs|PY8#lCY{z&iSNi>8K3k7%}zHU{n zuCC@TgAbUZwc$RDFSKQA*~EoxRPF84@jAL3uM(0EI%f%1kwy5|>g@ zxenidG+0z(N{Tw9sVaCd94cj|^^29rNTf4ek7+TIEF7A+t5-(1dhdKfgrO@>y>Q9NDI2sh4w}c?($WDOHP+bdSBh9zdki>KTPbP{o+}1C9CQMURU|L^{pb23d48K zt6V~}OfSbF0p5qF#BbBd&O9L=WdM~L_m?|*P`L)npb#YGzHqtS?NRnCkKZ{65z;rcG5cg0FJ~}!MN!NLlV2J>&#UrkfH9;%kr%u zp`lXJD_=f+dXOVHu4J^Ssi`?vV!}yNHbRXfSn1=(kK8SQ?OHf6m-Zquaz97#_8-@C z3lNKSP$3mwW@co(>l%&6iGQ=#4TD-}#`s#Hp>*ksBb->D85{Or5#N|HpqO^}-cL-4AH2L%N#fNI z8z#$*mUe%;ZH(r`2~0ThLvu@uD9%MKF7(PZ!0f+OIqvAAV-5}(SUXXqk)xIKg)8ae zV`C3M^rW`q4&|HfrPlnA?Ralv&30>XN2Q6Wq6;i`};=FB-*Rp+{QdGJMyEbNI&Dp+#Po9%gcJvf+7qO^CM52x^nlTGsS#oJtCs&2zS zv4N4%Tyk~3BIi^jgNt~-Z1G=$Z>n9^gf6F$cx02X%$&vjx#@_wbIHRCZ`rcaWao$O z9ephLd7y55=L{KZyNN-CTTD4eZwPW3^!z@Tw)w~Cw#E{9%zyjiDm9O}zxFcyl8B?YuBu**peou|!@Yy8K)FZz*w9qjjZu>{!&qgacOeUGF&b zydzgk(bJ5ns8GGJY0p6jq;*gV9dR)9s8N3k9&o}gVW+q&_s7+(mMB(Z^NWc|NhcH( zu0d2~WMys9;@qfz+LhawX)cBC5f|H+&&Fhfw+;GAWF5#zl)epv)q$I&^4*k3ZSh24 zNsoFFnPh0lipVSwQR@qq1`E!@u5`t1Y;0@-rrLAgzhn~@az}({d`^xYj2~-j^TOD81|CC69F~G0hy=lN1E&V->grg8 zPVGBXiXADieY?`G{27x|Ey(j)@VPvHE@)u?QIvnzE+~_EIRhnRB+o7zH40>dFUDW8 zW}j{$B~_UR+uKUHql<0BmlfQ2Z6}Fz_v*Z#Odr`@>R|g+x?uaFZX4n0TRZ39MtQC= zS|;Bo6!0_4hF|?lo$%$BWZS{RQ~G;CCdHk~OQR-A3Vy4?*pF7J{QY}j_7(eoPFo?L zPV$gEv3*GU#21$MKd&QcpYkJ;6kb^vyx~9IsZF>|jJ1%SJ*a1T{)o~(dSWd|HdKGf zEo?r0HW|6O(x2DSd;R+W&*K!#@0E@uPX5Otl1|YoIEd@1ss{E`QvMp&(IRK_pX*H` z6{otn-07$E6cAD*CJrzCzNZh55%uK?H<9A;YL~aQ-9zM7yuey>VLaC`XC=4y?@Nf$qS4RgGgCq3TSE)uR`yqM_&lBudpE}CZeb3^uJAn z7hGJtzgUqql9{dN0V6>nBcV z-|$@f;?Fuv;$jmO4fw~@EY7{X_xFL823KMZehn0ju803}A(E%W+UgDq*@(*jp2`-u zX8&#c#noSi_Wrv5uc`5*9&WyUMv| zSN=6KVt5+PzfCSl=w}#+iq`$xm^aPg!jW#zo zzyIIs^%pGpzY*4qr&Or^OYG9qMqEh$M}##BNBsRAiw|KmzvqAxCr_UHm)rYoYceu1 z{U3G|BO~MgAqQw`hW*>D7I#cK{}$fArleiItMubP_Sg;PTW5dGWQPUX_hSFOc7U+| zHV>r2pE)c%obBIsmsiP1@;~+uyW}^~zwf9ckMywc#6It^a4%^4w|)3qIxa8Y^WOuk zPbPxnzhWOO;NN4v<<*({e~)zQ96kgC5mUeKr43Ab0o#8?8Q9PNVIH8Z|Jyu(lpOZ$ z^H}KOoNT{FH{io+t&Ua0v9L^!<)xc$L~Vr8R)C+M0LeACwkYLK=I+Xy2*I(G1fY5W zSy@9E0ftg4;W-g;ow1q3!EpE)@VE-2ck`Sc3$}pZ0uXuupSVY!J$v>UM>lKh>o=Ba zmBiqb_3uNXWSVx+xBN@uqoK+CRZkTrmS-cDtLZ#u6wo9(j0!!sIO35U60+Xl(pSeT zZUpB;aZXFyjekmjQm=CO@Mk=E&9-Pfe{rhi0Ujj>*GBZ*oU^%^8970G`MYl3x|*7VTgDP7p9R7@agZ-8Y{OTF&qqRHrlu~wFnE0e&C5Di zGLxYP%b4Dc+$yNM?tSnSX(FI@k^OF=7g$Xfg*dwO+`gT1P_ZaKYjWv z9=OpA!2#XS2|N`|B?PDzizSLB@XW=eIdzm&i!Yyv zTz%=DWM(n3VF>b!zQi^jo`EvCrBs}|h6(uzx}xN*%hgJp{W$2PqO82eYOv*1G7fVj z16Aq&$c4v&8Ll5^!)bE^%(|sm#X|ZkD09-dQA)%U>dtXj>9r$K) zw<0krhiqVHXSdTQ)C{*rmS@in*i-=YuPhVUyZ2dU<|ONM_GCT52>IdjQ-;~jc__7P z1H^hbge*bJU`C7s^9;jXg9I5hQ;=!bqRsa^Uib$xC7n8Iru``X#fu|o;!)?44M7A4rLG@3Xm4Kc17OgB~SSlNgA-sEEj+zmU2qiT__o zos<1Lv53m;!DXL2ltlhc>6F|Ha7IAKYE$syu6R2NiW@LeX)8Hh(fWR|_mpFba z^<5IdXkg1eVcg)D6&nlyjV+zkDVhIiYLJ(gmoi%oPh{bjk;zjKJ87%-YI@|(Nm->V z-$oC7qs`Gqtrrp25uc#DFf6rV=ES;TybNrkJeGPrPJl1F&$qO#ez^nBf5H)*Kmy~Fk~#@?_j#Ac?BQ8gS>+lSgOl;lo#PN# zxXWf-Wf4th;Sgb8qS#3CywDXhPdN=Zxijz=0Vsz*XreFLe4x$aaZ=vPaVC550|o{O zKjB+fh}%??@FQv6r*+SI4StY|6~4{6H-G4^%qR1XV(%O<(F~j+T%0MBtCt$djXv|( z>0qVwcwo$U0kahz-+|!rw$7hDO@rrv5D5l?DkQCS;+1$Zs0fZa5h6#(#JerQ7BIQ< z^YLjoJLmB8^M4zkm3J>{0u>Ise?I|!Q426Oz1J6C;DJS7`vurx9gM}X+CFb4!<$=g zuuGkQn1n2Q*1`hqy%=Pv*MB2HMKmiN3RfFUiQgqIg_#<2&O_Ji^M~64nXoEAV%n0T zW@z}>&d!cVXK;xeMQfIzhfs-D&WnhN`79hu!y_lpf6dXtneB}4x#LIk#y$u@|Du`| zCb(xmp1;t5$IOV}z$Lr%W%Yj&HsGl%=i#Q&!rn|vOCu)j_T9Ts01OQ#jf>2uCOLb( zbpJz4aS0D-88tPz_~Fy1dSq_ZvckIrzcQiwzGdnOwN&bFg4pkzyz^;Ub{6>`gwAD~ zO$v4_bn&bB@ zLHf(3e?jE)INtMr0AYBD$iIRxjgu$M{ti_oU0%NZ%NRUUh*mW$q}tH$ZsXa?uq_(c zv}qeU5s!DNL9&IXO75#;g8}k$e@ffoU3oD82#GjFOVlBpEZEh%jg)k8B+vT~sHvr8 z{=Y~lMdQCz*XsTy9KbjM3HIXmFMJV|aV{fy+IaS7!NB0)%K6;?s_(70a|B5wNswTr zap$~$nHyHzjsfSr9=eCXi|Jb{9*`u=e%qo?P$jlx^GK-W@p>1cDtfXaTCKXE4&Po!c zjgTbmy?)O#TsN++>-&2=e&2t7-Pe8JF4X5e&ht2r<8{1_*Nahkz|PQUB{?!J>&lWe zcvjj=7S5g>-QBIl=nI(%`oGpE>&A9`Z*H`-GYqRNFfFM#6}vuv)q&t-``DZ> zm*a9v#(Jkxp9C+SZa3d9EN4Qf!J2X2sgbs855{K9G%@*X_UiS~OP)RQM?QBqa^$zh zjr(jy>&>jP*Pxz@!)?pMw@Jmh78X6}?;)=l@&{5Fbg&u^%nB}=`|MZnZCkpcL}K?& zfNKB{jlXqGb0eEUZZ-qj*TeE1+yV{>=F4Zkd_J01T(Uv8$OsK%&HLHru;dN)zcNaviHzhOgeJqK3v319|7 z_sFI%y7yL6Qu^R}2syi}#wtBQniif-m)t(b1PgV{pOx+##L&l!^-cml6qOT^iy|m3 zWfh%9zW2JPht=ua+zpe`faUac8(o{(O+4x7hspdZFdScMhZ6u>d+}*G4 z-P@Qm5Y+VXv+=bhofhwrvU3@{eAhoi&Fu+5hS4DVSDENq4S7{GQZ8M-JZ#Br33%kB zRq&XWREZOf#Uo-blB0Euo3yqnxRP4)S@4oMwX4Miwbo`Aq&e4VDDC|NN?Q8(`SW>j zbkAp5e!G=6wzBNNh~#3;G}n=4mpnDyEFQ;6T&udDd^vquxTK@Q{J(3cp(~%%k6y5& zZt+hpz<2yi|52MGPf|nZll;KvG&Sx2`L4j{-WARNqw18B%{}pZ z9SSry^atWJG%V#mYFpB$|A03j1yc0?xln&T;D0IWo7-n5`2B$%j7U2211tE6NA2C` zvh-)=PGtX&=P+f;zM7uH57chKf>r-KuV{%49s25zXOe7j`OPnZnzV1InZeGV2ly{V zPp#hoK2;0#ACFrx{+IIOmviIilKQ1m_-78#zjNn1H7+T#XT#r5`TqfPKS6|{=>Pn@ zP^08v&YSOjz<5W&cSp><{=U_A1EouQ2rti&Bd}ekaU^_4@;+ z&e>ekPyVslusryWZSXH3T0;#ZBgfyb>hsq)Fp^)d>P1LV>mTn~QJcQOzps=}1s4Ai z4nP}f3I{vR{C>K#Xs%nA8H#HNFdUa3E@wHFVYg_g`QvU5TzGRT{f~K|GxUqkl9pR# z+*)jr-u*yFrCE&r&a<)#CP|80>cMEzDyXwxl7jpX9XfQK;h}>?jAp0qwYQ%~vy1pW zHW_C8d6IMr+W!0d;*pUQa9*s2=R?;o+bSN)qGO#)5yZ@=uOc8G$Ov0A|GlGrEBXIo zNBt}u*7Q?$aVm~E?_RZ6gs~djq@Z}LL)8mF9;qzjX%@JH&UNW`CksOZ3^xD z`G5V=pV4%ZiUQF?lFnPSiDx}>u*SG#(jh>garP)>NCkTjVGKpqzMbN_C2x<@{J3%R zrcLT7e_|Z{@^h08_u%5DIj9yMrv@CxESq2x2q_mh3xbmXOf<+_t_S0H|Kk)q;3C@p zeGv`qBK@oLT5u@jelKXqnX8ADzV?2FXaGq;qH^)kHEyd>4=cG_zQK8fu{$^y|9pDx zc9|>%ipz9B#uG#I?I{gKf3ktx=FyC+hrIo*OTrb6}jnlspx*)FgN*J`)59z z*wI&2O-+|I-8q3FHgen#MP=h|IvqP^0BgE)0*zUIZw^BQzDXGc8%tA9(h^J?86b6a zd&b+5fp14PZrph6w-yZcOrAbH>tMvZ#OTb5ppVBQWvc%|fYkX#cF|esl67B?S66yn z;=?lgzR$XF>C)t?{OMI^8L?|{lgHWz76kZ{Q%Y8>v`u!M*Ripzw^7$3>AMPOidy7! zbeO*u8xE((` z17z?uHTc~5^LwV3UrtKioZ2jDV}jAIkj3PQZ=DnfKlX>ebrncqz@X})chLYCf6-?g zj$O2^G7l__ALE%i`lY^yZ1m&9E44!`-0L?x-NN+1zFQ8aaebp^&zgm}MCWQ!NR~~J zGWW8EC1AmZnafhkvaKo$gnm$+*4hi#h-C9LSsJvu*}+ixJBLqvi5^<*aH##Wd90nw zL|H`U8}`;5b-4@3C#+^9)xgN8nfXz`yR=t~6~u%~<|oJMzN_sgD)nva)=jr-^f!o1 z)5}rE>~vU(OBf@sXU5(XB_7@%(uTU%mTX0Y{uEMdTGY3(%!3PF0041aduNnjP%2`8 zXWpbka^@dorX3$N2Jna1Jb(Q7ofL4xjpAD>>eZM{f6EWAx9R@{XtM3;m4JW+0Ji?= zZHxc<7p~B*&u;AchUUW!z)VI}m77H1!ht;cMUq=NUSk{6185bt$B|hOE>j1q_zrpWUmQ$6^>2yDzCC;X zqwfpAR8zXpTq-P##QWDzH2r)q_V?c*YdiPz8cHf`en#~gQm%mm|D&6VU`@!sXA7-c zv{+taUTK)(4nXp2XEiY0bI$Kc$&5vbO@I8324Va^x|#&Bnx4atwCR`j%ddC0B8dJu1pQF0|c-;4*^djA9jQ(2>tX0dFHTA%Lw5=IL zttsnls4*>K*&mPQe>vmN3Mwbn4PrSe-0&wqC4wK*^TBL)cG*FSf}mUWv$0DFI{LIT$3{jtWn zPB{CsE{TU$_aCJPV*WKfhac>Uo;|~B3bOCA%P#-1e(a>o|G0+P=Xvqf>s;|fO4ff= z@({KDeQ{kUnfs6G?O#BQhT(;otc~ARm&@A8fAsGkJctmhYv+Itr(tYq18B`f&ApYZ ztQWAM?JJs<%3u9)b!$eG4Z;aI9<4zSv-JJGfde)t`={6} zWQOz=Em)Dn@892))a7$XQF4>7v$eD?CMGUw)w=Z;0Lj2qd*vg?j(JkQOgtnkmw<5j ziBB>L3?3iqj5-H*rciQ2<>i>*&cY^M zLu;3Q(80*G!`+~{u3`9D&{4mIRoSpN(&6XD3TTn|(!_le#q0^hLLgYf1iUPSC>WCe z;2-VuZ)p6{ZXChlQ_v6%%nB`Qi2@Z2*U^WrV^Jv*GZICef>XC!&G`kW`TaqUR&3wi zK&;$%z9CaHkPSH6O$R-vLuVaEl}-$Ike^>&RsB|g`Tc(^z#_)ify4H_;jV9y;Z=P| z1@s%259zf(CT$|`6FNAP3=9kobrVSb*ADcuH|y$?p^fY~WZm1_w+BO{CD*NZX#ERG zc@~WjIm@quAq^WKyd;|Zl>8Sd2?bRENdu>iIZ*zpyN;6Ew|+3#c0N^5j|5jm<-~jM zUgIitBV*(F>gxAD?v`1`Pl2JyKY~6E4OVn?1k;rPNM6~jNt5;nRVsQ4qiSXJVhb%e#S}ZpsV-#Td!ET(yTbo)k0QRzs#&9h9ikWfSra#a%Yzo z>!$l>)YvZmnRIla8=Mf7yMwvsSYw;K4i$y|VXv<(y;nN{k@s;GZyTu1fcp=3qD}&u zKqpb^Qq8&F!p;5Pu>FyAZ-ieV?r};VY_CJL$Ns7}wU*aCB^MW$VYK2ilS3A=NUtJQ zbCEqeDNQ%C@L>nz&o>j+Hu;_WJ9e{tM^hz-@G~?Hj@xe?7zLyIzMN*T!@B9=NALfj z0KC~=Q{Q;w!F0ug`EmN;rnxJe=XtxIAG7^)U7gfr-@57)PR@s9LdKwr@lkc+f z=|3r@s>3ygJmRuQEGU z*IlR7-?q#@@Y9JkEoEd*p=7ZNTL{rv8wPKvKT5{qb~T-eFU4CGWNco-t`OvnNiVxP zsGLSW=K>%NvXqxDTp-raQE;gpF8p4cot*{KMi@|`Hu(kRGq=isw<4Az;1H61x5=Ti zwB4U%6gnw3K(!=6v1Q9w|OdS zn$38k4D2t5@^11wr>`l53PQD&hAM>nHH~KUy@}J9U4S zc~74_QILIiNqBp$)bAf7ZR~P-YsIqsdkLPsl-Kw$p0spi`}=7PC24>1#H$O0cb5v! zt5r<0^-$5#H7s%L5mHr^o~7BU_s5Eq&-?nTy-evjUH{g4^#^!{ZzkFLKJkw4RHN6$KvHW_T4K9Bm& zt5D9Gk`_3{(JRm-u~(~>X{&)DJX5tUhv*n6_jD`My;#sBJ+X~$g`c01m+soEYyDSM zB_*W9s$I+*Q_}oEY+=fk7cM(zIV8_ok+rWpZP={3DW9r)7@Z6m3+h(!%Czb292)R5 zY1XQ(&ef4#l^-?t#Mx!zdyO?Rh?Y;W)vyh-47^k{M|;>r<24m)?|t4UyGr-jN#)Hh z@%Mu4*E-HBT0Coociz3suu98}w4_$2c0YHRIl`^PWK-tA!_VE0J$E1Fk-E$@t01XC zRvXo`Ssy%-EO!*;_%usd#bl5~GV$e)p&&tA?_QkK`B1)(!LX^DJgTzJ^gS9DuweSy zMJAKHuYNOJ7~q|_*0@>L$gY9bN*6*um0v6M9+&aFew<^-xiyuAmn*_Tvqre31y#0d zV==xsCPDjkrH$p1gO#zPx?P-R6!`7fypN$puPZZ+($psCPq!VmKswFiPF1DT?37?* z%Y^Y(i9xz?r>s8=o28zXvb|wKY*^H*lm7XtNh>o)oRGZrHdwR94F4FHA4iWECK7GS zBc+>?W6z!pw+lY^{`QNFyB|JX7&^A^(|gKAn`C=!%IZG8K-zd!g-%h{r-PBtl*13a ztg;LnkUj0d+fkJlMkXn(o%5(tCh4r)%(RrNI|?^m%ruOZ%B(7ie0j^WNmhczr}qjI z7MtuDSLQ7nw!!-Ih!e@PeDn-7-gcN)&-_7rcH)Vr*-`bkOqsoC(X%Ztx>R%FnVAdk zd}id^DQRQnu zZ=OT!OgE|h#bK8QTpfC1V3)C9lJm-4N_Cvo{JaXDdQ1%1ajGKLuBfUkeMDA=^5gCy z7P>>Wheow5S5i<KB-`!#XjgM7@7Oc#hL9T6Qj{BK zs`w;UUjDBue&Kd+b2}gi&fTR^*h|qXfUB%mkroXv*B^Gw1AnVwwE&Ut*y>9 z65oDxz%SM16J2@vml;*Tr(-81d7t+#+q$@eS(rtI$NV`VX0#DfNns3=Ce<)({l{Aov>SZL)>T^X#KP(>nKI>VApD zGe@zFqGopLIO?CHhYv4Tl&S0^reStmPLB1MZTnSy`{EASm2)dxEhNuxtKP33uiSb7 z*3D5D7ihZ*2jtZji^(Bqs`+;s$eWf{x#?Qv>_pDy0>hP;NF-!rWaY>7ngp-mH5FZ* zD(h1fu<9~7ixRKi?Uur4J6gB^zD-5U3i{j8f>g?QmlAz))M!ixM zi{k3+MygC2tX^o|ccYV9vMmi?(iaqB1E;Tg+b6YX{^}2pnnn+ngr}}&GKjCYr@zx^ zr;ABQBid|`Zlmx~7?7T5Tk=#_Fsk8)SJRfmsw&SttanxWk3u}4*Y`?cE=1Tzg$N`= z#_Ihwk2-c115vIhdY{s*_%fdz9}QvpoLXg$gH!u<0e$|D-1c=haKn8mI&5^kDw0wv z+!mXEY=u$oXh?Q#RC?fc%52|<{#c>SojbR4+3WvNhl1{_;R&nvWW}S$RohGx2+Cr9$ij182Q{ zwPSI3oL_(OTdNv|*jJSfBpc0oW7onvRjqRQ7&}AFGD})E(&razj2ScLk#!fQ^T;t} zeRU?PqZCxODY>i<4WlCv!H|ceSiNJ~(duz(&MLYhKc_N%8WhP`zS!yZv$D5bC$E&n z`u-Aq-eIv#$;X4WCjGB3W1X7An6WpOPhPZUjVt`b*e0Si@Un)jP}X^i6zA9Da@N&id|AqK7I<2mun9QUTp|C{Zi@d1*K5YIdUr|@$1fEil!K#(TH^#MWIDes9OAXyMdwMtFZE?VT+>H)JZ(; z7k*0;uvw%A)n94O!;Qp@^(hEKg4qpYd>*N^(BBs&@+=5Kj|SUTtS_M(A~;8o*hJR` zHh8Z|V)Abodeu~;q6;j>3-U1@S_4mhe&KtGQ@|ha`Q1ZqZeA!nYNiw=nnaqtLC>!6 zKw974y-PGBCpE}Uy8j(AswbCLTcfPhIBjP&Tl81X#t-C=?(Bace@N=oltSN)dNBhi z^;dlVCqD4D%|3F7x=Pli*O6^6@d_($IyyETqh+)uy_vLdv1i=y@>DnNzj-a}`@na* z{^qIHUgQchQdf+^BOtzJ@rC+NB|IDTyh! zO`BRhR+r~P#I%Je;?+nFM zk*}kp`XX~&v(FEgIar;o`nr15w*419_w9ZZhN;USOS?|*o0~fIg3h_20sZHdU$gh9 zuT_&g)_m(a_NYPVemBMPtIZBb`+5moibva@xCLDZ8P|M$!!LUV@I8n2fa1Nlu4j2Q za?O-8b<|!Kzi2#Gs{D3=xzTEEKUIF9b+-i1zKequ;h^3_u1;51mnr)*b|pEI;{-~E z(>Grz`-gOW406XeNYZg(u)JA6WX~b%%5g79?i#VtD}2#$}H#LEjslu z8~)-T`komXRZK)58K~>d-}hyL7ho{^h5cM4V%e3oZZpO+2E}_}^bBT~Mo%_;nU7=; z{Jk{;P(ob4X_G#2q1`tV3T33*B1+v{KvD}r*rd^D4PTmbaV(X739VPJEP9wuSg7GH zc$L#0$UnZBj-@AlD8rx*qhvRX zIk{b&^s27XMGeu|+a)dkoR5w}SB#I@l+irqj`PK0EA{q;<^~^LSa_eMSy;F2ld_p zrC7L)!!gicoxBON4KoX3?uqPg0!#10oQr=kgnoUkQ)ncx=S<%flkl2)&IymX`NQyV zJ9d2heV61WrFx+KEYi1WX?Cb3@>Bgo(=sxiqEmViaX{nHk{(F*onpod8Ae%jsu>Mm zb3o|gvM<&|eqnkl7b--Z8Ax6u5QGC#KjW~9;mBa0;&WqCkMxb1*r zFF!<^Z*4_K;hr2D>x2mb#>V#{0EzGA|2%QS!5b>-^8A4kFis6d$!lSk+Zxyzi{;&z zT?vIie7g#c!;Co%`vNZ#VR($MVXcPJ(&y0>6)5mP-6GHxpo zzFQDkR0y8_Mu_xQ>ty=-7a3)p%Swaxg}|*zN$yJQV;{MU7$|{P^AV1Ey-v23=vFeMh9Ao;tUnMFn2e$<#*-bmGDQD)kqRk2&F{rWGwxn#JD*Why_4%Oj! zJwmg_1u_X{r;|{($6D!zRODZ>vJo84CFD(O6O0WE`UoL*QKOi}G2x)Whm{3u{ccSWS)I4+_?^q!q${4FLi`B_qu8>|;UI3wu24mmL1@cW^LW%0Di@{eC- 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 H`p^FXWlX+` literal 0 HcmV?d00001 From bca227570064b0ea8e823e4ff9ae497274ced250 Mon Sep 17 00:00:00 2001 From: Kipras Date: Thu, 28 Jul 2016 12:40:24 +0200 Subject: [PATCH 2/4] Update work_flow.md --- Popularity/Kipras/work_flow.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Popularity/Kipras/work_flow.md b/Popularity/Kipras/work_flow.md index b7b19b5..7963ffd 100644 --- a/Popularity/Kipras/work_flow.md +++ b/Popularity/Kipras/work_flow.md @@ -1,6 +1,21 @@ Summer student (2016) -### Week 3 +### Week 5 + +28 Jul 2016 + +- Got the final output. Very low TP rate (need to investigate it) and high execution time(need to improve it). + +25-27 Jul 2016 + +- Combining roll script and model on spark. +- Model output file formatting +- Retrieving files from HDFS and merging them +- Time measuring and producing proper format results file +- Ssh analytix problem +- Fixing paths + +### Week 4 20-22 Jul 2016 From 4ccae63dc4b7b3d4c1b7b5317596ec45ff9f3fb0 Mon Sep 17 00:00:00 2001 From: Kipras Date: Wed, 3 Aug 2016 15:10:04 +0200 Subject: [PATCH 3/4] Updated drops --- Popularity/DCAFPilot/src/scripts/roll2.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Popularity/DCAFPilot/src/scripts/roll2.sh b/Popularity/DCAFPilot/src/scripts/roll2.sh index b138eb9..af801bb 100755 --- a/Popularity/DCAFPilot/src/scripts/roll2.sh +++ b/Popularity/DCAFPilot/src/scripts/roll2.sh @@ -28,7 +28,7 @@ valid_end=20170101 # stop date. use future date like 20200101 to run un # other options classifiers=("AdaBoostClassifier" "BaggingClassifier" "DecisionTreeClassifier" "ExtraTreesClassifier" "GradientBoostingClassifier" "XGBClassifier" "KNeighborsClassifier" "RandomForestClassifier" "RidgeClassifier" "SGDClassifier") #classifiers=("KNeighborsClassifier" "RidgeClassifier" "BaggingClassifier") -drops="nusers,totcpu,rnaccess,rnusers,rtotcpu,nsites,s_0,s_1,s_2,s_3,s_4,wct" +drops="campain,creation_date,tier_name,dataset_access_type,dataset_id,energy,flown_with,idataset,last_modification_date,last_modified_by,mcmevts,mcmpid,mcmtype,nseq,pdataset,physics_group_name,prep_id,primary_ds_name,primary_ds_type,processed_ds_name,processing_version,pwg,this_dataset,rnaccess,rnusers,rtotcpu,s_0,s_1,s_2,s_3,s_4,totcpu,wct,cpu,xtcrosssection" scorer="tpr,tnr" plot_file="graph.png" result_file="result_out.csv" From d0cc7cc1e41f7f1b0e4c47d0b54fa64fe492f4df Mon Sep 17 00:00:00 2001 From: KiprasKancys Date: Wed, 3 Aug 2016 17:53:54 +0200 Subject: [PATCH 4/4] Revert "Updated drops" This reverts commit 4ccae63dc4b7b3d4c1b7b5317596ec45ff9f3fb0. --- Popularity/DCAFPilot/src/scripts/roll2.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Popularity/DCAFPilot/src/scripts/roll2.sh b/Popularity/DCAFPilot/src/scripts/roll2.sh index af801bb..b138eb9 100755 --- a/Popularity/DCAFPilot/src/scripts/roll2.sh +++ b/Popularity/DCAFPilot/src/scripts/roll2.sh @@ -28,7 +28,7 @@ valid_end=20170101 # stop date. use future date like 20200101 to run un # other options classifiers=("AdaBoostClassifier" "BaggingClassifier" "DecisionTreeClassifier" "ExtraTreesClassifier" "GradientBoostingClassifier" "XGBClassifier" "KNeighborsClassifier" "RandomForestClassifier" "RidgeClassifier" "SGDClassifier") #classifiers=("KNeighborsClassifier" "RidgeClassifier" "BaggingClassifier") -drops="campain,creation_date,tier_name,dataset_access_type,dataset_id,energy,flown_with,idataset,last_modification_date,last_modified_by,mcmevts,mcmpid,mcmtype,nseq,pdataset,physics_group_name,prep_id,primary_ds_name,primary_ds_type,processed_ds_name,processing_version,pwg,this_dataset,rnaccess,rnusers,rtotcpu,s_0,s_1,s_2,s_3,s_4,totcpu,wct,cpu,xtcrosssection" +drops="nusers,totcpu,rnaccess,rnusers,rtotcpu,nsites,s_0,s_1,s_2,s_3,s_4,wct" scorer="tpr,tnr" plot_file="graph.png" result_file="result_out.csv"