From f9554f28a16cd4190980108d90fedb9c61be5f42 Mon Sep 17 00:00:00 2001 From: hollorol Date: Sat, 16 Sep 2017 14:41:21 +0200 Subject: [PATCH] solve the old file(con,"r") problem, and many more --- RBBGCMuso/DESCRIPTION | 4 +- RBBGCMuso/R/calibMuso.R | 23 +- RBBGCMuso/R/otherUsefullFunctions.R | 36 +++ RBBGCMuso/R/plotMuso.R | 36 +-- RBBGCMuso/R/rungetMuso.R | 20 +- RBBGCMuso/R/rungettanul.R | 336 ++++++++++++++-------------- RBBGCMuso/R/setupMuso.R | 95 ++++---- RBBGCMuso/man/plotMuso.Rd | 2 +- RBBGCMuso_0.3.2.0-0.tar.gz | Bin 0 -> 50560 bytes 9 files changed, 320 insertions(+), 232 deletions(-) create mode 100644 RBBGCMuso_0.3.2.0-0.tar.gz diff --git a/RBBGCMuso/DESCRIPTION b/RBBGCMuso/DESCRIPTION index f84f3cc..0f5f082 100644 --- a/RBBGCMuso/DESCRIPTION +++ b/RBBGCMuso/DESCRIPTION @@ -1,6 +1,6 @@ Package: RBBGCMuso Title: An R package for BiomeBGC-MuSo ecosystem modelling -Version: 0.3.1.0-1 +Version: 0.3.2.0-0 Authors@R: person("Roland", "Hollo's", , "hollorol@gmail.com", role = c("aut", "cre")) Description: What the package does (one paragraph). Depends: R (>= 2.10) @@ -15,5 +15,5 @@ Imports: Maintainer: Roland Hollo's RoxygenNote: 6.0.1 Suggests: knitr, - rmarkdown + rmarkdown, VignetteBuilder: knitr diff --git a/RBBGCMuso/R/calibMuso.R b/RBBGCMuso/R/calibMuso.R index 895fc32..6e994a4 100644 --- a/RBBGCMuso/R/calibMuso.R +++ b/RBBGCMuso/R/calibMuso.R @@ -1,4 +1,4 @@ -#' calibMuso +t#' calibMuso #' #' This function changes the epc file and after that runs the BBGC-MuSo model and reads in its outputfile in a very structured way. #' @@ -91,8 +91,18 @@ calibMuso <- function(settings,parameters=NULL, timee="d", debugging=FALSE, logf if(length(logspinup)==0){ return("Modell Failure")#in that case the modell did not create even a logfile } + + if(length(logspinup)>1){ + spincrash<-TRUE + } else { + if(identical(tail(readLines(paste(outputloc,logspinup,sep="/"),-1),1),character(0))){ + spincrash<-TRUE + } else { + spincrash<-(tail(readLines(paste(outputloc,logspinup,sep="/"),-1),1)!=1) + } + } - spincrash<-tail(readLines(paste(outputloc,logspinup,sep="/"),-1),1)==0 #If the last line in the logfile is 0 There are mistakes so the spinup crashes + #If the last line in the logfile is 0 There are mistakes so the spinup crashes if(!spincrash){##If spinup did not crashed, run the normal run. @@ -150,11 +160,16 @@ calibMuso <- function(settings,parameters=NULL, timee="d", debugging=FALSE, logf } } -##if errorsign is 1 there is error, if it is 0 everything ok + ##if errorsign is 1 there is error, if it is 0 everything ok + perror[is.na(perror)]<-0 if(length(perror)>sum(perror)){ errorsign <- 1 } else { - errorsign <- 0 + if(spincrash){ + errorsign <- 1 + } else { + errorsign <- 0 + } } diff --git a/RBBGCMuso/R/otherUsefullFunctions.R b/RBBGCMuso/R/otherUsefullFunctions.R index b15f8dc..19f9acd 100644 --- a/RBBGCMuso/R/otherUsefullFunctions.R +++ b/RBBGCMuso/R/otherUsefullFunctions.R @@ -133,3 +133,39 @@ file.path2<-function(str1, str2){ return(file.path(str1,str2)) } } + +numFactors <- function(x,type="pos"){ + x <- as.integer(abs(x)) + div <- seq_len(x) + posdiv <- div[x%%div==0L] + negdiv <- posdiv*-1 + alldiv <- c(negdiv,posdiv) + switch(type,"pos"=return(posdiv),"neg"=return(negdiv),"all"=return(alldiv)) +} + +niceMatrixLayoutForPlots <- function(n){ + if(n==0){ + return(cat("Ther is nothing to do with 0 graph")) + } + n <- as.integer(n) + factors <- numFactors(n) + if(length(factors)==2){ + return(n)} + sqrtn <- round(sqrt(n)) + num1 <- factors[which(min(abs(factors-sqrtn))==abs(factors-sqrtn))[1]] + num2 <- n/num1 + return(c(num1,num2)) +} + +truncNorm<-function(N,mean, sd, min, max){ +n=0 +randomNorm<-rep(NA,N) +while(n<=N){ + transNorm<-rnorm(1,mean,sd) + if((transNorm>min)&(transNormnumVari)|(variable<1)){ - return(print(paste("The variable parameter must be between 1 and ",numVari))) - } + if(is.numeric(variable)){ + if((variable>numVari)|(variable<1)){ + return(print(paste("The variable parameter must be between 1 and ",numVari))) + } - plot(musoData[,variable],pch=20,col = "dark blue",xlab=xlab_muso,ylab=colnames(musoData)[variable]) - } else { - if(variable=="all"){ + plot(musoData[,variable],pch=20,col = "dark blue",xlab=xlab_muso,ylab=colnames(musoData)[variable]) + } else { + if(variable=="all"){ - musoData <- rbind((1:ncol(musoData)),musoData) #creating the column indexes - par(mfrow = c(2,numVari/2)) + musoData <- rbind(1:numVari,musoData) #creating the column indexes + par(mfrow = niceMatrixLayoutForPlots(numVari)) - apply(musoData, 2, function(x) plot(x[2:length(x)],pch=20,col="dark blue",xlab=xlab_muso,ylab = colnames(musoData)[x[1]])) - return(print("Everything was Ok. ;)")) - } else { + apply(musoData, 2, function(x) plot(x[2:length(x)],pch=20,col="dark blue",xlab=xlab_muso,ylab = colnames(musoData)[x[1]])) + par(mfrow=c(1,1)) + return(print("Everything was Ok. ;)")) + } else { return(print("The variable option is the coloumn number of the output data-matrix, so it must be numeric, of if you want to plot the whole data matrix set it \"all\"")) - } + } + - } + } diff --git a/RBBGCMuso/R/rungetMuso.R b/RBBGCMuso/R/rungetMuso.R index e1b680a..57e91d3 100644 --- a/RBBGCMuso/R/rungetMuso.R +++ b/RBBGCMuso/R/rungetMuso.R @@ -87,7 +87,18 @@ rungetMuso <- function(settings, timee="d", debugging=FALSE, logfilename=NULL, k return("Modell Failure")#in that case the modell did not create even a logfile } - spincrash<-tail(readLines(paste(outputloc,logspinup,sep="/"),-1),1)==0 #If the last line in the logfile is 0 There are mistakes so the spinup crashes + + if(length(logspinup)>1){ + spincrash<-TRUE + } else { + if(identical(tail(readLines(paste(outputloc,logspinup,sep="/"),-1),1),character(0))){ + spincrash<-TRUE + } else { + spincrash<-(tail(readLines(paste(outputloc,logspinup,sep="/"),-1),1)!=1) + } + } + + if(!spincrash){##If spinup did not crashed, run the normal run. @@ -145,8 +156,13 @@ rungetMuso <- function(settings, timee="d", debugging=FALSE, logfilename=NULL, k ##if errorsign is 1 there is error, if it is 0 everything ok if(length(perror)>sum(perror)){ errorsign <- 1 + } else { - errorsign <- 0 + if(spincrash){ + errorsign <- 1 + } else { + errorsign <- 0 + } } diff --git a/RBBGCMuso/R/rungettanul.R b/RBBGCMuso/R/rungettanul.R index 51899e5..480aaf1 100644 --- a/RBBGCMuso/R/rungettanul.R +++ b/RBBGCMuso/R/rungettanul.R @@ -1,240 +1,240 @@ -rungetMuso <- function(settings, timee="d", debugging=FALSE, logfilename=NULL, keepEpc=FALSE, export=FALSE, silent=FALSE, aggressive=FALSE, leapYear=FALSE){ +## rungetMuso <- function(settings, timee="d", debugging=FALSE, logfilename=NULL, keepEpc=FALSE, export=FALSE, silent=FALSE, aggressive=FALSE, leapYear=FALSE){ -########################################################################## -###########################Set local variables######################## -######################################################################## +## ########################################################################## +## ###########################Set local variables######################## +## ######################################################################## - Linuxp <-(Sys.info()[1]=="Linux") - ##Copy the variables from settings - inputloc <- settings$inputloc - outputloc <- settings$outputloc - executable <- settings$executable - ininput <- settings$ininput - epc <- settings$epcinput - calibrationpar <- settings$calibrationpar - whereAmI<-getwd() +## Linuxp <-(Sys.info()[1]=="Linux") +## ##Copy the variables from settings +## inputloc <- settings$inputloc +## outputloc <- settings$outputloc +## executable <- settings$executable +## ininput <- settings$ininput +## epc <- settings$epcinput +## calibrationpar <- settings$calibrationpar +## whereAmI<-getwd() -############################################################# -############################spinup run############################ -########################################################## +## ############################################################# +## ############################spinup run############################ +## ########################################################## - ##Sometimes a bug occure due to logfiles and controlfiles in the input loc directory +## ##Sometimes a bug occure due to logfiles and controlfiles in the input loc directory - if(silent!=TRUE){ - if(length(grep("(dayout$)|(log$)",list.files(inputloc)))>0){ - cat(" \n \n WARMING: there is a log or dayout file nearby the ini files, that may cause problemes. \n \n If you want to avoid that possible problemes, please copy the log or dayout files into a save place, and after do a cleanupMuso(), or delete these manually, or run the rungetMuso(), with the agressive=TRUE parameter \n \n") +## if(silent!=TRUE){ +## if(length(grep("(dayout$)|(log$)",list.files(inputloc)))>0){ +## cat(" \n \n WARMING: there is a log or dayout file nearby the ini files, that may cause problemes. \n \n If you want to avoid that possible problemes, please copy the log or dayout files into a save place, and after do a cleanupMuso(), or delete these manually, or run the rungetMuso(), with the agressive=TRUE parameter \n \n") - } +## } - } +## } - if(aggressive==TRUE){ - cleanupMuso(location=outputloc) - } +## if(aggressive==TRUE){ +## cleanupMuso(location=outputloc) +## } - ##We change the working directory becase of the model, but we want to avoid sideeffects, so we save the current location and after that we will change everything to it. +## ##We change the working directory becase of the model, but we want to avoid sideeffects, so we save the current location and after that we will change everything to it. - ## Set the working directory to the inputloc temporary. - setwd(inputloc) +## ## Set the working directory to the inputloc temporary. +## setwd(inputloc) - ##Run the model for the spinup run. +## ##Run the model for the spinup run. - if(silent){#silenc mode - if(Linuxp){ - #In this case, in linux machines - system(paste(executable,ininput[1],"> /dev/null",sep=" ")) - } else { - #In windows machines there is a show.output.on.console option - system(paste(executable,ininput[1],sep=" "),show.output.on.console = FALSE) - } +## if(silent){#silenc mode +## if(Linuxp){ +## #In this case, in linux machines +## system(paste(executable,ininput[1],"> /dev/null",sep=" ")) +## } else { +## #In windows machines there is a show.output.on.console option +## system(paste(executable,ininput[1],sep=" "),show.output.on.console = FALSE) +## } - } else { - system(paste(executable,ininput[1],sep=" ")) - } +## } else { +## system(paste(executable,ininput[1],sep=" ")) +## } - logspinup<-list.files(outputloc)[grep("log$",list.files(outputloc))]#load the logfiles - if(length(logspinup)==0){ - return("Modell Failure")#in that case the modell did not create even a logfile - } +## logspinup<-list.files(outputloc)[grep("log$",list.files(outputloc))]#load the logfiles +## if(length(logspinup)==0){ +## return("Modell Failure")#in that case the modell did not create even a logfile +## } - spincrash<-tail(readLines(paste(outputloc,logspinup,sep="/"),-1),1)==0 #If the last line in the logfile is 0 There are mistakes so the spinup crashes +## spincrash<-tail(readLines(paste(outputloc,logspinup,sep="/"),-1),1)==0 #If the last line in the logfile is 0 There are mistakes so the spinup crashes - if(!spincrash){##If spinup did not crashed, run the normal run. +## if(!spincrash){##If spinup did not crashed, run the normal run. -##################################################################### -###########################normal run######################### -################################################################# +## ##################################################################### +## ###########################normal run######################### +## ################################################################# - ##for the sake of safe we set the location again - setwd(inputloc) +## ##for the sake of safe we set the location again +## setwd(inputloc) - if(silent){ - if(Linuxp){ - system(paste(executable,ininput[2],"> /dev/null",sep=" ")) - } else { - system(paste(executable,ininput[2],sep=" "),show.output.on.console = FALSE) - } +## if(silent){ +## if(Linuxp){ +## system(paste(executable,ininput[2],"> /dev/null",sep=" ")) +## } else { +## system(paste(executable,ininput[2],sep=" "),show.output.on.console = FALSE) +## } - } else { - system(paste(executable,ininput[2],sep=" ")) - } +## } else { +## system(paste(executable,ininput[2],sep=" ")) +## } - ##read the output +## ##read the output - switch(timee, - "d"=(Reva<-getdailyout(settings)), - "m"=(Reva<-getmonthlyout(settings)), - "y"=(Reva<-getyearlyout(settings)) - ) - } +## switch(timee, +## "d"=(Reva<-getdailyout(settings)), +## "m"=(Reva<-getmonthlyout(settings)), +## "y"=(Reva<-getyearlyout(settings)) +## ) +## } - logfiles <- list.files(outputloc)[grep("log$",list.files(outputloc))]#creating a vector for logfilenames +## logfiles <- list.files(outputloc)[grep("log$",list.files(outputloc))]#creating a vector for logfilenames -############################################### -#############LOG SECTION####################### -############################################### +## ############################################### +## #############LOG SECTION####################### +## ############################################### - perror<-as.numeric(as.vector(lapply(paste(outputloc,logfiles,sep="/"),function(x) tail(readLines(x,-1),1)))) #vector of spinup and normalrun error +## perror<-as.numeric(as.vector(lapply(paste(outputloc,logfiles,sep="/"),function(x) tail(readLines(x,-1),1)))) #vector of spinup and normalrun error - if((debugging=="stamplog")|(debugging==TRUE)){#If debugging option turned on - ##If log or ERROR directory does not exists create it! - dirName<-paste(inputloc,"LOG",sep="") - dirERROR<-paste(inputloc,"ERROR",sep="") +## if((debugging=="stamplog")|(debugging==TRUE)){#If debugging option turned on +## ##If log or ERROR directory does not exists create it! +## dirName<-paste(inputloc,"LOG",sep="") +## dirERROR<-paste(inputloc,"ERROR",sep="") - if(!dir.exists(dirName)){ - dir.create(dirName) - } +## if(!dir.exists(dirName)){ +## dir.create(dirName) +## } - if(!dir.exists(dirERROR)){ - dir.create(dirERROR) - } - } +## if(!dir.exists(dirERROR)){ +## dir.create(dirERROR) +## } +## } - ##if errorsign is 1 there is error, if it is 0 everything ok - if(length(perror)>sum(perror)){ - errorsign <- 1 - } else { - errorsign <- 0 - } +## ##if errorsign is 1 there is error, if it is 0 everything ok +## if(length(perror)>sum(perror)){ +## errorsign <- 1 +## } else { +## errorsign <- 0 +## } - if(keepEpc){#if keepepc option tured on +## if(keepEpc){#if keepepc option tured on - if(length(unique(dirname(epc)))>1){ - print("Why are you playing with my nervs? Seriously? You hold your epc-s in different folders?") - } else { - epcdir <- dirname(epc[1]) +## if(length(unique(dirname(epc)))>1){ +## print("Why are you playing with my nervs? Seriously? You hold your epc-s in different folders?") +## } else { +## epcdir <- dirname(epc[1]) - WRONGEPC<-paste(inputloc,"WRONGEPC",sep="") - EPCS<-paste(inputloc,"EPCS",sep="") +## WRONGEPC<-paste(inputloc,"WRONGEPC",sep="") +## EPCS<-paste(inputloc,"EPCS",sep="") - if(!dir.exists(WRONGEPC)){ - dir.create(WRONGEPC) - } +## if(!dir.exists(WRONGEPC)){ +## dir.create(WRONGEPC) +## } - if(!dir.exists(EPCS)){ - dir.create(EPCS) - } +## if(!dir.exists(EPCS)){ +## dir.create(EPCS) +## } - epcfiles <- list.files(epcdir)[grep("epc$",list.files(epcdir))] - stampnum<-stamp(EPCS) - lapply(epcfiles,function (x) file.copy(from = paste(epcdir,"/",x,sep=""),to=paste(EPCS,"/",(stampnum+1),"-",x,sep=""))) - if(errorsign==1){ - lapply(epcfiles,function (x) file.copy(from = paste(EPCS,"/",(stampnum+1),"-",x,sep=""), to=WRONGEPC)) - } +## epcfiles <- list.files(epcdir)[grep("epc$",list.files(epcdir))] +## stampnum<-stamp(EPCS) +## lapply(epcfiles,function (x) file.copy(from = paste(epcdir,"/",x,sep=""),to=paste(EPCS,"/",(stampnum+1),"-",x,sep=""))) +## if(errorsign==1){ +## lapply(epcfiles,function (x) file.copy(from = paste(EPCS,"/",(stampnum+1),"-",x,sep=""), to=WRONGEPC)) +## } - } - } +## } +## } - if(debugging=="stamplog"){ - stampnum<-stamp(dirName) - if(inputloc==outputloc){ - lapply( logfiles, function (x) file.rename(from=paste(outputloc,x, sep=""), to=paste(dirName, "/",(stampnum+1),"-",x,sep=""))) +## if(debugging=="stamplog"){ +## stampnum<-stamp(dirName) +## if(inputloc==outputloc){ +## lapply( logfiles, function (x) file.rename(from=paste(outputloc,x, sep=""), to=paste(dirName, "/",(stampnum+1),"-",x,sep=""))) - } else { - lapply( logfiles, function (x) file.rename(from=paste(outputloc,x, sep="/"), to=paste(dirName, "/",(stampnum+1),"-",x,sep=""))) - } +## } else { +## lapply( logfiles, function (x) file.rename(from=paste(outputloc,x, sep="/"), to=paste(dirName, "/",(stampnum+1),"-",x,sep=""))) +## } - if(errorsign==1){ - lapply( logfiles, function (x) file.copy(from=paste(dirName, "/",(stampnum+1),"-",x,sep=""), to=dirERROR ))} +## if(errorsign==1){ +## lapply( logfiles, function (x) file.copy(from=paste(dirName, "/",(stampnum+1),"-",x,sep=""), to=dirERROR ))} - } else { if(debugging){ - if(is.null(logfilename)){ +## } else { if(debugging){ +## if(is.null(logfilename)){ - if(inputloc==outputloc){ - lapply( logfiles, function (x) file.rename(from=paste(outputloc,x, sep=""), to=paste(dirName,"/", x, sep=""))) - } else { - lapply( logfiles, function (x) file.rename(from=paste(outputloc,x, sep="/"), to=paste(dirName,"/", x, sep=""))) - } +## if(inputloc==outputloc){ +## lapply( logfiles, function (x) file.rename(from=paste(outputloc,x, sep=""), to=paste(dirName,"/", x, sep=""))) +## } else { +## lapply( logfiles, function (x) file.rename(from=paste(outputloc,x, sep="/"), to=paste(dirName,"/", x, sep=""))) +## } - if(errorsign==1){ - lapply( logfiles, function (x) file.rename(from=paste(dirName,"/", x, sep=""), to=dirERROR)) - } +## if(errorsign==1){ +## lapply( logfiles, function (x) file.rename(from=paste(dirName,"/", x, sep=""), to=dirERROR)) +## } - } else { +## } else { - if(inputloc==outputloc){#These are very ugly solutions for a string problem: inputloc: "./", if outputloc equalent of inputloc, it ends with "/", the string manipulation can not handle this. The better solution is easy, but I dont have enough time(Roland Hollo's) - lapply( logfiles, function (x) file.rename(from=paste(outputloc,x, sep=""), to=paste(dirName, "/",logfilename,"-",x,sep=""))) - } else { - lapply( logfiles, function (x) file.rename(from=paste(outputloc,x, sep="/"), to=paste(dirName, "/",logfilename,"-",x,sep=""))) - } +## if(inputloc==outputloc){#These are very ugly solutions for a string problem: inputloc: "./", if outputloc equalent of inputloc, it ends with "/", the string manipulation can not handle this. The better solution is easy, but I dont have enough time(Roland Hollo's) +## lapply( logfiles, function (x) file.rename(from=paste(outputloc,x, sep=""), to=paste(dirName, "/",logfilename,"-",x,sep=""))) +## } else { +## lapply( logfiles, function (x) file.rename(from=paste(outputloc,x, sep="/"), to=paste(dirName, "/",logfilename,"-",x,sep=""))) +## } - if(errorsign==1){ - lapply( logfiles, function (x) file.rename(from=paste(dirName, "/",logfilename,"-",x,sep=""), to=dirERROR)) - } - } +## if(errorsign==1){ +## lapply( logfiles, function (x) file.rename(from=paste(dirName, "/",logfilename,"-",x,sep=""), to=dirERROR)) +## } +## } - }} +## }} - cleanupMuso(location=outputloc) - if(errorsign==1){ - return("Modell Failure") - } +## cleanupMuso(location=outputloc) +## if(errorsign==1){ +## return("Modell Failure") +## } - if(timee=="d"){ - colnames(Reva) <- unlist(settings$outputvars[[1]]) - } else { - if(timee=="y") - colnames(Reva) <- unlist(settings$outputvars[[2]]) - } +## if(timee=="d"){ +## colnames(Reva) <- unlist(settings$outputvars[[1]]) +## } else { +## if(timee=="y") +## colnames(Reva) <- unlist(settings$outputvars[[2]]) +## } - if(leapYear){ - Reva <- corrigMuso(settings,Reva) - rownames(Reva) <- musoDate(settings) - } else { - rownames(Reva) <- musoDate(settings, corrigated=FALSE) - } +## if(leapYear){ +## Reva <- corrigMuso(settings,Reva) +## rownames(Reva) <- musoDate(settings) +## } else { +## rownames(Reva) <- musoDate(settings, corrigated=FALSE) +## } - if(export!=FALSE){ - setwd(whereAmI) +## if(export!=FALSE){ +## setwd(whereAmI) - ## switch(fextension(export), - ## "csv"=(write.csv(Reva,export)), - ## "xlsx"=(), - ## "odt"= +## ## switch(fextension(export), +## ## "csv"=(write.csv(Reva,export)), +## ## "xlsx"=(), +## ## "odt"= - ## ) - write.csv(Reva,export) +## ## ) +## write.csv(Reva,export) - } else{ - setwd(whereAmI) - return(Reva)} -} +## } else{ +## setwd(whereAmI) +## return(Reva)} +## } diff --git a/RBBGCMuso/R/setupMuso.R b/RBBGCMuso/R/setupMuso.R index e2f05fd..d5ac5c2 100644 --- a/RBBGCMuso/R/setupMuso.R +++ b/RBBGCMuso/R/setupMuso.R @@ -33,39 +33,40 @@ #' executable, calibrationpar, outputloc, outputname, inputloc, ininput, metinput, epcinput,thininput,CO2input, mowinput, grazinput, harvinput, plouginput, fertinput, irrinput, nitinput, inputfiles, numdata, startyear, numyears, outputvars #' @export setupMuso <- function(executable=NULL, - parallel = F, - calibrationpar =c(1), - outputloc=NULL, - inputloc=NULL, - metinput=NULL, - CO2input=NULL, - plantinput=NULL, - thininput=NULL, - mowinput=NULL, - grazinput=NULL, - harvinput=NULL, - plouginput=NULL, - fertinput=NULL, - irrinput=NULL, - nitinput=NULL, - ininput=NULL, - epcinput=NULL - ){ + parallel = F, + calibrationpar =c(1), + outputloc=NULL, + inputloc=NULL, + metinput=NULL, + CO2input=NULL, + plantinput=NULL, + thininput=NULL, + mowinput=NULL, + grazinput=NULL, + harvinput=NULL, + plouginput=NULL, + fertinput=NULL, + irrinput=NULL, + nitinput=NULL, + ininput=NULL, + epcinput=NULL, + mapData=NULL + ){ Linuxp <-(Sys.info()[1]=="Linux") if(is.null(inputloc)){ inputloc<- "./" } else { - inp <- unlist(strsplit(inputloc,"")) #This is the charactervector of the given imput location + inp <- unlist(strsplit(inputloc,"")) #This is the charactervector of the given imput location - if(inp[length(inp)]!="/"){ - inp<-c(inp,"/") - inputloc <- paste(inp,collapse = "") - rm(inp) - }# If inp not ends in / paste one at the end, then make a string, that will be the new inputloc + if(inp[length(inp)]!="/"){ + inp<-c(inp,"/") + inputloc <- paste(inp,collapse = "") + rm(inp) + }# If inp not ends in / paste one at the end, then make a string, that will be the new inputloc - ##Example: "a/b/c ==> a/b/c/" + ##Example: "a/b/c ==> a/b/c/" } inichangedp <- FALSE @@ -223,16 +224,34 @@ setupMuso <- function(executable=NULL, inifiles[[2]][grep("do IRRIGATION",inifiles[[2]])]<-paste(irrinput[2],"do IRRIGATION",sep="") }} - c<-grep("DAILY_OUTPUT",inifiles[[2]])+1 - numVar<-as.numeric(unlist(strsplit(inifiles[[2]][c],"[\ \t]"))[1]) - dailyVarCodes<-inifiles[[2]][(c+1):(c+numVar)] - dailyVarnames<-lapply(dailyVarCodes, function(x) musoMapping(unlist(strsplit(x,"[\ \t]"))[1])) + if(is.null(mapData)){ + + c<-grep("DAILY_OUTPUT",inifiles[[2]])+1 + numVar<-as.numeric(unlist(strsplit(inifiles[[2]][c],"[\ \t]"))[1]) + dailyVarCodes<-inifiles[[2]][(c+1):(c+numVar)] + dailyVarnames<-lapply(dailyVarCodes, function(x) musoMapping(unlist(strsplit(x,"[\ \t]"))[1])) - c<-grep("ANNUAL_OUTPUT",inifiles[[2]])+1 - numVar<-as.numeric(unlist(strsplit(inifiles[[2]][c],"[\ \t]"))[1]) - annualVarCodes<-inifiles[[2]][(c+1):(c+numVar)] - annualVarnames<-lapply(annualVarCodes, function(x) musoMapping(unlist(strsplit(x,"[\ \t]"))[1])) - outputvars<-list(dailyVarnames,annualVarnames) + c<-grep("ANNUAL_OUTPUT",inifiles[[2]])+1 + numVar<-as.numeric(unlist(strsplit(inifiles[[2]][c],"[\ \t]"))[1]) + annualVarCodes<-inifiles[[2]][(c+1):(c+numVar)] + annualVarnames<-lapply(annualVarCodes, function(x) musoMapping(unlist(strsplit(x,"[\ \t]"))[1])) + outputvars<-list(dailyVarnames,annualVarnames)} else { + + c<-grep("DAILY_OUTPUT",inifiles[[2]])+1 + numVar<-as.numeric(unlist(strsplit(inifiles[[2]][c],"[\ \t]"))[1]) + dailyVarCodes<-inifiles[[2]][(c+1):(c+numVar)] + dailyVarnames<-lapply(dailyVarCodes, function(x) musoMapping(unlist(strsplit(x,"[\ \t]"))[1],mapData)) + + c<-grep("ANNUAL_OUTPUT",inifiles[[2]])+1 + numVar<-as.numeric(unlist(strsplit(inifiles[[2]][c],"[\ \t]"))[1]) + annualVarCodes<-inifiles[[2]][(c+1):(c+numVar)] + annualVarnames<-lapply(annualVarCodes, function(x) musoMapping(unlist(strsplit(x,"[\ \t]"))[1],mapData)) + outputvars<-list(dailyVarnames,annualVarnames) + + + + } + if(is.null(executable)){ @@ -246,18 +265,18 @@ setupMuso <- function(executable=NULL, } outputname <- unlist(strsplit(inifiles[[2]][grep("OUTPUT_CONTROL",inifiles[[2]])+1],"[\ \t]"))[1] - ## outputname <- unlist(strsplit(grep("output",grep("prefix",inifiles[[2]],value=TRUE),value=TRUE),"[\ \t]"))[1] + ## outputname <- unlist(strsplit(grep("output",grep("prefix",inifiles[[2]],value=TRUE),value=TRUE),"[\ \t]"))[1] ##THIS IS AN UGLY SOLUTION, WHICH NEEDS AN UPGRADE!!! FiXED (2017.09.11) ## outputname <- unlist(strsplit(grep("prefix for output files",inifiles[[2]],value=TRUE),"[\ \t]"))[1] if(is.null(outputname)){ cat("I cannot find outputname, in your default ini file \n Please make sure that the line wich contains the name alse contains the prefix and the outmut keywords!") -} -## outputname<-unlist(read.table(ininput[2],skip=93,nrows = 1))[1] + } + ## outputname<-unlist(read.table(ininput[2],skip=93,nrows = 1))[1] if(is.null(outputloc)){ - ## outputloc<-paste((rev(rev(unlist(strsplit(outputname,"/")))[-1])),collapse="/") + ## outputloc<-paste((rev(rev(unlist(strsplit(outputname,"/")))[-1])),collapse="/") outputloc <- dirname(outputname) } diff --git a/RBBGCMuso/man/plotMuso.Rd b/RBBGCMuso/man/plotMuso.Rd index 800637b..738e9f1 100644 --- a/RBBGCMuso/man/plotMuso.Rd +++ b/RBBGCMuso/man/plotMuso.Rd @@ -38,5 +38,5 @@ It depends on the export parameter. The function returns with a matrix with the This function runs the BBGC-MuSo model and reads in its outputfile in a very structured way, and after that plot the results automaticly } \author{ -Roland Hollos +Roland Hollos, Dora Hidy } diff --git a/RBBGCMuso_0.3.2.0-0.tar.gz b/RBBGCMuso_0.3.2.0-0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..9d304117146925c680b6aa7fef5b0fe6660ba34f GIT binary patch literal 50560 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℘n4J(;)X6b2#Ga#=;opK0$6}RzxWUBup_yUN!7hP? z*c+DpoCR&8*2)C4T;9f}SvZhL)$Yiain&s85fJdIG%oAz` zDM~#A8ViXG+})Y4wnp3W_0!1RJ^ki-d%{4aL8iG4RFe*O{O7TK-7p&t2 z;4CyXF%!sSN`cf>MGYmu@P<|2anb9sTDDC&QI@bYDy#hbd`}h0=$ect2*OzS7BkFM7I9#DRs{R}SLQ1j)+1 z;j1gGy4N+p=AOM7us3IA?Quu#tn}{mND%j{dj?}1shLesV9zaP;}r2CUS@et=5iET zFBH*@i&-q@@>r|ghK@Fg?+9fx#e6okdoo{GVl%=Mwfpy^wXKy|b!gxE63g-9{S3$b zE!C4Ji}6Ik2L2CZY^7MLW-DYg!c^8vl}`VVa(4aV$(HiD$Nex-|~|VL4sL}w`{nEqLt-HT8J^6@f->? z)aDlGXo&tTQqO`u7~Tgu+JI(~8N|0W7xXum&)-PIW+Bz`E9qxp##$ty7W`xeIh$b$ zE4pHXamZ&kAX{Yu4$^##LXnZ%wU5%%Iy4)uTgYW}c?e=b8o4awGFt*| zpuP?X_v}n3QXeAwBN7V#M-dI5Ag>Tw2Nq>Z?dRiu{KO`1KG_C_gq(g6S1A(SjDBH@|K$+ninB zyC7jHNazJu^ehZ0#Rb4QLZ{_O_m=f!!OCF*n24Z}B2Vyx^R zh(9~0v9fn-!h%F6z>`j+KH%hI_2IZOG(njXV?N{>-HrAIBD zGQw9*nGp=9^j+*z#`fkZW25VoxxaDBSlB+LuVq>l_inE%D;B1zKaBw_v+!b9Aj z|K+OWe}P0#Q;GyEWb2VI&92FEDQd!kxwpP@&HX?BFaFHUe=}3h@d|+b=RfXsk#0Eu zNz&`aagu=Z-|g|-KmV^%{wL#hB7+l*leMA%bFK)+5uttyT^t16Xft!{rfo526!IS= zRd>CE^Esk!Ht!s>wuuf*A11AnX?I%_^ccx|W+z)sF!U5Z7PdxdbgWrz77ylAaNL}J zERAMmnUW^@RT?v&4mD%usT#H5#T@_)low1HsDsME6{AH$ASlf~ zWuw8_<5{a#21U2i7&ptolwF`zbUmBKSKM4;Go1tVre#`US;0IQDXV>md6{Jpx50!3 z;Hj1kt2>u44cCNj3o2S5o89jQThlI`leG&HX4l>68OrorOtZ`e0FWWP zB*0Ac2B!DsLb^3Q&sM^mjM_{!GpJ3BDQjE-B#9$4qm|BV<^(hHfXS^{O0P|uae>(^ z)tZsYLCZ!Zz&uklTzl!NtZ}{%=A)P;#+s$WA{?Z{Wle}>NszjDH6R3;0%C-vfeB7) z%Z#vjv~p?Q5Mux{%O1y@_g&3kwq`ZRh`N1loYqIVzL3!mW-;s;)wSl6Fh!Xq&*lvM zdLD(vOIl$A2j0`V|IMuH)+7QeGcfkJG4?=^?ln9pJ@hf&2YXDH!5-&Lu!lRue#kpu z5555QFt@)R?&{Zr?tR_&($}Ni_`3YM*L%quE5~xf>y=;WrYC{Duda1nex>WN-RFA$ zWv<76nX5I_?&QhJteUCS^^1fwjSg&4p#NbiR+LkcM|nCSXw1sq_q`tSvRCU~(aDpR zJ6=r#4cMj-Q=0q0>EworP0MaE(+%cYof%_nzM9)YM1Ax?0bXF&Os%2aCbTt+v%C^+yk*<-p%cHek}dv{OleRN6e<@vqj zMYxZ0BkbiPtFe`%Uj=w{yW}`7qg^?^>t0um?V3hyO6++HA7;IVZ)N}M_pl}R@2%{A z>E1rK?aiWV_qtkdzdQA2wJkT-uIzEg-BPBVzuoS#MR*+TPP?OAXm?d_v)e!H>2UYh zUFjuu_v!|_LtbBZsJrVHuI4$!t#t=pS+~!9b;o&G-N852{U}^hxBvAoKcoxl_8_`- z3vtCV-}kzd?!X)A4!j`jNA)hceMQ3$`xd$-SI`}f!>;n>bNk&qca&@Aj&|qVkIaR0 z``>u=qjlBXUN^NJ@)oNf&JA;i2KsZd;|FICef#!y+E#GSDhmug7wH8o-c54l7XGCt?%O>^?{4h>wz~y)r zc;DTX70?E)DrYxl+m5ImeR`j~H=w`u z7X#PrZnkM)Qs~Md_#Me!{i$X#z{|Mwob*;G^u6k%;>GOGf*GwP12eD$?DWWx>^?xC zpXrk~dnj_y=*WRPv}U2ztDzyGpk;sA)}ZJPY8ggujP&>uYsAU??O1wngbuTg!((gg zNSH;vSg_isl-3rs=?ugk6IgmwG~`Nj>_H>vnq|oY_H1Mso@HUys=&3-T`JDD=3L*; z4$>7N0MBd&_-mK%5BB_@8UHzvVPOBJ#86jL|9iY7q22#Uk|YfLhWCFG&inQM)%Xe4 zTYfxHJ5{J*Z~nu-y5^^!^8@tro$vhY4~(Dxy6v{xa<`d3fiL{z_aFGwOP9a(xa(i> zdySXAlgNG3|JS#F)n)g5=%MEy&A;f8-?|}kYb5$}Kltb?e(R0d>5Jd^vv1_T{#^c< z{}+7tweJ-EyV&~lqfec92f_d6YXYy*fN#k`L*W9ocKJ^?odE28;hEDwAD_&Cg_`kjM zqc07u^3VLOH~c09_es}1@U{nLcmD5BzTw61{Izf1ow(8Z|J&|-|1X@m>xev-?=rG zt=yjZt8f0`C$X*ZAHU-B|N62^m;U?mZ$0E;Kl_;2o!36}FRs7lFCR$QuD$-b54!D| zt+$={{(t}V`S1M0^w+-nS2sjnedA-}53{{y^+Bt@@a((Z`oFIKx0gQV2I1?EJ@XSE z_WtAzq47WZ{_6ej|Hgm*!RPhhmI`d9w^h0pkh(V3?{`uQjR{uAGP z?>GPRKmYh?|4{qr%k!&u-Sv&fzl3|~(;swq;!A@6+Lzt-8&CTFwO{^?5C7~>Z-4eV zTxq=dr)S@G>F>Fp@UC?of3x!4x2?SBJx@#hqdoGa|2}vA-=F%sPk3_rUEC{P{`b8P zUh}qBzwGTFwEe~To1&HeryqCwzg>P(G1%xnF7pT9cK%}>f7k6lans4?{qn^p{pWA< zQFprh(1%@DOMFKZe&u)DcH7#6ANIB6YKY8XgPrvYq z3+cB!TKf68?fQq^^}B!hu;(@@{?WwRtN-lAo$%jWAAG@UADX}Od8tPQ9#nm9^;yhg zUXZol{SntaFS@4Z`q*usmT_~_D^1W?IVBvw_o$}?Q3rN_ekVH z{?%vP`GOt(`uAU7YTJJ0XI@u&z}o8XUUSVaHm-ZsT_^tewg*4@mGI{k--?7j_IIy- zz{OYo-e-U1-8bG1Cd!J*G0BCW_1?zoUii3=e)@cp-+0|S9u-gU3=@9d3Jk9xpUf8(cL{E07q?ccuR zd(Y<|`P832^Q>21oIIO;!k^|h&Lf+D_aB#E`IGOt>p!9|a6aVGkH7rW&-#k| z+4N7p{3DHX#4rD4Hh<5Zzx^4SrW>D+h4F{j-qwBPLx1x{C%*K!r#|x+wog6&SHJwh zxAp$(zhC#=pV|8615f`{#(nYBk<_r3EU{`o)q_VkNqZhFA4z4dPACqD68 z@A$3oA3GoRkaIu#Gx2Ngx%uLsee2R4Pk!$^Kht~X=f3tQ_k3~GeCAXCK{>*oN^q$}S`-dfx4}bW>e`@@%pZvxN&xc?5fYqnG>;d6ZsfRt~o)@0D z=~WE#^c%N7MLvmq@$=obm)me>6N>akGQV$cmMLK+o~V?{qon^wh!F%sjs~A z?ytn2`hn!lH+_Tu_!s}wck}u1$}NH0Narv@lQ^e=ww72HeSXOmyTzxJAkaMxV>;?3<}^?ms| z-|avDfOnn$#AiPG@sEDu4}@>N<2}E5`c0?a^2YDH=~M4$f8tHw|F^py@T%%XuJPx8 z>-+xXY0r7zFMaxX4|c!cfe(Mzo1b#`x4!wIC%^tzZ~EX@{^MtV<4?c-%;)Z$UjO1J zJ}`a7Q_}zIQ~Ae!==HBU{k2a#=X1~e#QIyFeDg=iH;=zJlw0q2`6rWp`5o{6+durq zD{i>>)OX(Oeahdt-}KBUKjq`EfB9c=FTLmUjlm6%lL+apeQ8pWA%% zjo1Ht_3mpE*E5Yr%HfxM?F~OQ{PKri_?dSzpY6QwWs`k>%-|A@7{jxuY6?k;wRql z^vGj={`%tT4Uv@_Z~W!LN589n^@G3jx_cfSdEKLa^`pYp%O9})(swEkyW{bXOmBRe zej&fs`0jVM{`bdz<2OG+JpUPweAOEUcR!J<{nOL`fc$Xa`a7TgkcU3`iO*Mm;`O(^ z;cL%(@T=bcfJa>aov*8}sQtnFfA5XV`(OO<-&=b^`u9Ko55M$hYx$pgdj6)h8(;O& z6A!rl#s|Or!@sie=IvXa6nV4s*|qC;zG-{qPrPUF?DxL=+oxYuUVXgd`qR{eKKaK# zN1c506V}!W*Z#~6Sit$W(og@y&3D{F|I&*-`Xbk({^ImQUU1!s>;Hc1fq@%7?MlD; zH6MTH2fqEDv;X(*$v=MU(SP{B|1bO9&w0}y>p%WazIXY%e6?azTiu}Pk!<*p1FS0jnBU4X0CVLt6%s}UwPTO`YhW&yqf($;2r({*h%zJ+Cbm|@(`0sO{ zC13kQ_g8PWzj5PJ&-?RRYhQZdx6>a}Klg{zS3GfiGyTrLzV2e;i|=|j_G`jR-})~f z`~3T35Bci19`ZYXeENeoO-oN&6>t2dPd(&?U;O;P{osKge&HwI-WfjY_Kfh&r~JpK z|3i59`H$rM-VcPYy#arj=fA&E9ew0&5Bkat*FPxosz3=x)#m{{9i;sNx`!f&tM&d6{-2H)f-S*KTx8L-bi>>h=zxsJMuz&T% z58V0h@lU_W@z}3F_tYaE@I=7qxBth5H(h!i_j4ED>LspuZa(~|r-vUkxc1{uKQ(y9 zCqJ|O=;!61`FQN6hb2~n0gCv`*PU@Z>rs!o`*Bao-}R`wA9VNK4|;X}K`(pJGv4)) z7x}mko&U9Gf24EMTP}a&SHGNi(8vFFO;eD7!e;nr8aGAjlA|1SLEU3U#1x_bRn zJF+X>y*Bp~ovoLC_U7lm?A33+>#ntpH?U$(2ulVQjQ$PH$pZ}b&`P9EnJ??$2 z>A8ph`~P{+KZM@Ky!{0){q9HK@byo=r})C;ZEv{gP4y357k-WHMdv^MkVk!~_~bX< zo?}nkRC@T^*B<=!XFmN=pZ@aShX*epk9)RRN6!LASg+NFoy`I+;{^N)DT`~L3F z>5Z3tjf>wr>VNH;mw)b0U;BX3=tgn$=7(H=`@{RMc>OE>^xAWGyqf&_BmVRGfBcfn z_n-613on1#KYlay)w>FR@O&GWdT5lp{`zqEw%}uK6T8p-_vZV)JyoC3`P#34>RaEG zp7hnpBR_S@_PhLVww^e6;otnzyI-3R*B<+gPrdbxPx^yXFMs$G`q#YYW{c!jX?$v^p}(%<~mUw`5DOP_t~qa&F2?B=^Z`JkV8a{lX|d9CvH z>xIx?v>y{sz2Vm%^vQc(^@#_4D*Y|=lQ5bC-o z|7MrE?YE!$lRxnb@9%z^4}bH)k9yKGwm)!V`bput9~F81clbyDPVtrpJeGgTsnYX* zLww@aFTe6d-+S-BzwY|~`+)YTzr7B>{ufvOw*KdDek=B^Co}aozUe99Zz+Rsz5PF) zFn;m(-+SG4*FEA_KcC5DoRP=uM1WOu3o<@HmDg?m`Ypf}z>(ntf7O1E`<1mg{Mq68pD6wu+d~2K z-Sw-l3djBo_#U5s)}P$K{ltG=xaTon4Bqy~zxxf}QT_jh%6A#;zVI=jlkauA_dfsa zbRz%XOW?ShgzNt<+>KvjbKmd(U&Zwwjs8QvDZnk{O^K1O*7<)D_b$-itU|DPZJ3m;nlMdpS7_}W+BvtsM~)!IED2|WKR5&WmV`UL82H->Mx z{%y_^>)c0@f0^Ehl28BKP4BR|u?OGyUqAVtpZW72wCcV;D%d~#@6Wn(n)~?M0-t!> zyVwV8J@6fm{}TDoU-rN6&#wCr^N8T+fxq;B6PDZTC;20N`7A5PoOt=Mcg-EK6TfQdjNf+9^W&I56Iu2@89@&bEN7XoH4 zi-l;B;f3bKQZc&WySxHNxMIB2GHi5V78g#GdN#oCDvW#5qpHPTPtSTpcU1=E6Segz zx!4EyTCY$f2M zaYS8<;J$MXWp|osVkUibhJDC0C?fz37#AjZP$pg0Cbw8tv8|yL$0L^N$TnH*8An~^ zb=WH_%;!+nBruHfg8iWrv!GTF1&AF45=0%PoL*Vkuw~#WW|)^ohQUORY~BXcDWW%ASkZtm#Hvk)3(x{(3TlZeC}KIHekYof z0Mk4RUKpvX?_4rr?u18$1KP>rj1F)REEqJ9 z0BFjM06BYb?xSP>8;!{Z{JUveS-JDhJ1IuKCq6df{}(&nhG zF|pkVp5388IBlD-@|_TSwLm&GkD)^&Xt6zn6Tuv+F3SMlsY1s%whMvS1eI)Cw$&OW zMd?c+bGB^k7^Smi^7cnsbE?QV1CF?J0CE=*xekP8SfnU!Esf#qSMg3Z;Hwev%sy0F$#l)ii#!xT-lZ369pwJ4^`PDVW4X;D2G zoUf=d=61SBkIzl|d|sE=N&39R`n}4{d4T-~8SB2a|8U&n+U@^&UH8ZTUzMM;C&JlK zv6hPq3w4B!ux);7qT8&KB`w^l={!8I)iY3w zNiwT!sS3B@TgA?;teizk>D-)ZK8tA&!CRS@_`YV~=nb{0A*DTCJ-4Ez_}Bz?nFvgQ zty#LUbrjPK6gv>oC>gtX+t64B$?gOeiFgy)ymZU&`pUU%4d2P}UERE6_%jRzH- zXKcLfENW&`i>d|>?Dlm%Xc{~Rh2Y!s{Dm{<5r)}lm=#fiY3GoRn5ASyq217m)MM(= z89xQ(tpnfm=xxw(ueqr`(qY}CTfk7zzl1~;)ZE&FY5jG1zPkd_e47wufi6tXuw}bh zgX(4o<>i&jXI9Q)8X_U0PXH%evjNc1^EP<`EZ?!M#W!1^ehUs~V*^lKGb$|v0lIY+ zTI?_tplws^vl69mLK7b1d{?7Bjc{P(fP2vZPXnq@U7lWOK|cVns|Bai z+QNv12s>?S0KLD^05A~*g$I_Kv;-qghYkL}z6iH|;$opw26yQN0UaUC1{wFE-Tt!) zPM218i zn{9Awl4IbQwUcL?k#T=*;8^Xg+Sh<~OWeB3uby6AUAM3GZ(VJokCyt4H3>i@N^20> z{+9Dh|E#3Vjtsm#%9x{lFhwuIB7-gK>+}5!XLxRHuql9VaO!UXv6T%+R!w*Ymr;gz ztpt>0TU+F*Q`*-uJleB~4C*!PcG-@tudiQhNWiJOe0c_8YfW*;TIcZi;~4{32>>gd zRh9rNL100*)_3Qn3sw+}!7M9+z=Fd9y$-epGYZ@;U`+==-{ro2Yj7DJ_1LQy9TmYm zKm;hfdb_Zyl?Pv1i#684XhAzzx{!$2&U?JR3m6bIva%*nz&L=je-oIGQlJTwM}hXX zEWC2N1VKW1%M3=EVUAkU@g{8no4rfPGK6bWJ8Y#P{EP(YDGD%qoUDsH2-hCP*G=pX z0QLufRdkdO4F2eEN#_R_W&l2|3mh#K2<;6Fq7I^!1za=Zdn>8wwSm#f`3q;(X2;GP z%8W@hy36~}UEYuGihWDoi|BeoCTZmZNDJD+_bsgTiUXo;_EovHb`iMnf^vEl9gSOc zh#Uvh_i4oe%bs3n;PUzzWs8!UNY8?I(6wh5djW_!v#V{fe_+!9>juLpm)C)~0Ag}C z19jFWj*(+*Ocv)E_;(5?A^adiBAI2?HH7<#j>A)@M*1i1@p4{2tn}zCItka3)}fImPUuy&4DD2yLQMjVHFYRDoeR zUSOG1r)CdPnq=z(n4x3+B53&Lt<{_DJ){1*{pQu1O*#hbtLIiPj{u!nlM0tE&8PsO z9c}?Kp&1S4rqhA117x0=+P8XZ<4sv@0L=(kVW{JNV*uv+V9WRl0Us`4e*Ge-tboUG ztm|iFjT7~+=FG6x0=%hDaR-!2IyxEgqO`GbroRQb69TlhdKO!?_xHdd9O=3~)c%RB zS@-(LBrviw+G{8&3=AMxk;H|f!ZHP>b}Is`>alIr*MqgOW8xShh8{!nrw@8y3>Ll& zN2ShY1}fB9zc}9P=C{BMaDWe&EyEh3upz55@;5fz1c>arNMksx3qT}_R+U9qpell)LOl4ic#35 zs&%L?b|+c8gY8Kdw$6_nD)@WBpt7XvtrG@98kHm*Z3C#g+Z$`Ec6qZc^1|BcC1883 zuHSyUyb79X7`SNM3jUo2MT3_>aZNLTkpsSmzbmjMcFTONjhRJHjTQihX^(mMm^U8t z>)KOk%QC%S2?+>mtrHr4r2&yH&&aq1DPj^t0W)7Y3*H(Ws_41}JUXwyq`)%U=v!$qK-zPYNjuOnt5uv?}%CTFN1zR>H6eKw#}}UNdqatLb$Sd9;@mO-Q7-K%lWQ4A)@UE9u({D^7Dk`exILpIVEwXY zgM{@$8#okR2yUSBS+l(U^)e7^x}XA2>^K@4Wc3W>TC;85G~c+jtRp>}I68$**!yc~ zI7kRXW-EMt1_hEgCo-Er0)SszaEy`l%i!ZCFys`phP{{}^gxR4|oMzZT?G~7?ua$x2lN&+EZ-^!c^Bmi}8J}dVrV97%B z87k`x7%x!M=We#A;U}Qh;QMpBI{+%c$CtBP^RS(nhsr>JWVe8nGH9Q*@W(d5Ng7Qy zK&#ZLQ!J!e>Vn}0Fz7Mhpfdnu$?(7Lpy3LL$qJfrF=tOjQL~mwodA4j(i+V9%&m(9 zhY!)ffy0StyeS3OFHQhf&!jgSDohOtXk*$4=}lI9-2-#gzNE~2P3iLGur_%B5rAO? zTAu+I1B{q<>}cTScTbZY)Y0}@UT@8wapcXJpfMS&ncEtGQRWemb4#lvG$zn%=D-Lq zYZw`>&AQatM4z?Utvtk*$p<=i@|#j*Sr_)Ki6OuZdlUiIOM2bJlJ&Jct+kxUdTv&_wo33Rq)ip$$Xk%^`C3`pn#m8R6i-BvS(>%+JV&Hr6Y^z@gY5AyfmG zswIh|)dbL0O{%+k8TB05VxeITKZdu?M}YRzz6A6sY)s_|>=SNmBOA=2g2%A11t1`* z<*oi&$f0WUSlNmJgAhnK8Knb;x5AxKfrAL;maYV#T!Cg4e2N=S4TPT1szC9tzkwKD z7=t#_i_+PERghrqLou9L?M~ur7?shByPYoeQ;{dTrnitn1zn>ev>y zYTxFXVz|^77wb!wHk9?tx_0Q#eEj{)l7ZDM(TrXOI1dUm!wsK*Yk-zf=H(2q3#D@l zvd1oMLK9+3zPv~I{=&1qR=y8i24n?FW~b2EmRSHAb4LTHejqA#JGQ*BY6cgtU_+8+ z#bRyk?D?miyI?2_t^z7Ch&%#{cQ_`^fMJ*GEmS&C7xrem;v85w^4g+{fdqq7a^ z+>G@t5=(1X7pP;nLf!ZjJ~Y-=rk;imgEet2hhb> ztk*Ke>Py<_TIy9uE?y8=DPBycwkDeFKcoNM>Hvz;Yw|km%Xr4G>7Nk92r?C}qZtcE zXEcvOTh?1$19tzVr>(D<%RuY5uG)uo?fH%CtLxBXQEy#S?a*l+uAd$rel6_ODP>d9 zwj7LgNBGFHiZy$i%fm%UdCU6xj5aU!LJz|aSK;c)3_Yu70m{yuh5L->R_!_(piW0m z&SLN_kU(4gO?1z12(GzUKAxF-PG{gkROZawvYXB@sKlDJxI@;dt?VY(WefJV)HBMa zw)eVq(Lnm?p`$Z8J(-_F4hcvepf=B-RU6BU0Rn7p0?nG4D`rkOt!?X@CH+`mOI86T zYU@U#>8|MPELuGlT{P{#>!kDZ;$rsh73{{E1eYMsXp>(6JdV6_g=*wA^sie1>}mk& zdt(&CMBrjZikB4@&|&@J9xv8b!`ZaHg_ja3hGkYAqVD;f*|QGZc$<|ob-z(wQ7F2F zs?7SGJzHDVcJ4p}deylNy)E&wrcc?eiB84qhdtmNyY%vQD0;(cz zHMNHvKTcCpN9}L%3#EcEd}mA0p7H{(#EmyFld-t`c~*c3+Uja=6Zx&x^VG&Puu;FD z|8;Ko@3?Tws`kEQDR9Tq5}7<&g1G&5#ty{HCj1Mej`l93zg%;kA6H>*F0c`W3CHZ0 z)+`lnS-A_qP&6M^dS^c^&Ce8E?^ zlghC01-$D+F&?j?Z?H8j-VXsKO4C5QB#Zv2EuA3n@}%FsB5^e&O^+b*o19E zL~DRdbiDEij8%EW8@ymR3GmAZ^2!~s8D4-_451Fubx8<#7+C@M0(Zb-xCa%4A4x*{ z2-yHew}HS!zP%I%5H<$Xl$opoaO~oQbpjf66}fYicPZ&_{~y~1pLBxap5~; zfIBo$8Frw;alq_@;1BqMzJd|Z9XNwf!biw+R3AQOVW9@EXdikove@!bE2Ii2NS0;p z&|b~HFTS_bUwEjMq~KB<>=uv#yg?9OzN{~KTx8OxFLq8-P@bQ~kT^%u1`2S^rqYD8 z_8Djd$1Y_8RnD!O7L~HOdfBlcJCTyzOF65TN|(BqQkT^3rBdn=cPY9K8qoUA=>7HK z)v6-AVpf#q1-}7L_YVD9T1$tBESDfrE+LX!LIk;_k>e7;&Lx1hOBx|A8ECv@pzhKf z$}i0kwgYkDGF)umE#{>yL>z-6K>sbn zs%8WM^GCCTF4)hfcxdJ{V29dPRXQCBCj!OD9r*~-UCWw5w7K;(vXkt$-@bt?B|xRr z6}1FN3rrO7X&to5gNML)+oKVDKX6QDSq2(^&_+3BTzSyC3gk2;25EOINAi(;n5msfPopN#h!JE zAXt<&~%r;oCV(aC8!QB0cC$llQ@?&#c~N*B9|11I7RGV8c`Cw68e&U zOyH8{6kTFi^hXv|iDn^Q)2z}G8Tcs#HRk#u2&ae68E|F-mokAnpbBlW(jD+K0J)1k zKutvflR*hKbSI~6G9}0xz!Ky+6yph#M>m0p6_^b@{1eC% zg*{`|gAU4R8&3AeXJB$|*fMIhM~yc|JfpNu+k8$Zd<&mRO<)$MqV!%8^yCKbhDgR6!P6qC9e;+w;4n<}fe0)X6>76tKU2Y4pIdokx8rBs?{ zC|gLo8xcIwK2fp*7NKa-Ve5gS$Qwc(w{S~uXq?0*0U?F&h{bpKrq6gs?tbSo-nn+a za~kj5i|?G9e&d~I_dBCM>hzG80a0{vTH<=$&YK)I_z!$oM`ZyDQKb1Ijc}*)CRo5g zF+5QPyxGyl*dUko4iZA^hT&y+-`#2L9NL)~F`b)k9Wb-7g;V^*O_0JQNnZ6_mA%HSdQdn6YO~DZ%UK{f{6SFM)?*o-(rzcz;JL-jvOdEk=t}}~Lt9R_o#5eJtqLV5 zdN8@cLya!X9l!fE2b?~DVmOo~Z#R1KhF-$9tcVt1Zb}N<{B$7tWpbeA@uduBctRd)fv=nj|PwEHztZ_`40(Z}7mL06g5{8K9Aje*19u1sPZy4Hj5b z0RL2XL`~%R_;`nHk+Uq^BWX-vu+My}ya12voz`yewKS?ov&nhLD%Ro)^LaVmZ-b56 zPD4hvRMZ4B?(X$~;03?XCmej*T@#ILc~#u3O3YX7J8Ufi{3FeJqSS8z4m@om&)5LW z@W3VbXd%>maSJBU-No~Wu%1K!S`X9C39X!kJO(sk|J;w!No#G-Z0_u&zH9cQaOip; z==Af~XR$s+y$a83b@_999>qS3fw!p0fhV$OMUU}dw%#ZP0bM!UA{I}AfhQ}Fbq;Y@ zTSLksK7Mr0ZENtMqirU!=8kY{1(uxSHi{qSG`CK8fH&}xh z&j50;9+!hJ2ebK+GZ|}&0q~P4lvqN+{KN4nb?w^VRuGENC}X-|&_8M4vGX)-gFeGG^7Ls3r2_KH-mKdAXIOlqr% zo!}_vBehX;$c{|S|#0e|40m|+kV39cPm4$ogVK8cRVxl zgotQn)K4}NF8}r@;L5nzNN#8s@K7%-%E=HHaRPbaX5%d{+pJdF)&9ii>lIoFrz;zX zc(Z`-$X=Pwc&Bv_$S52b6%&(m8~l?~q0w;a z!{YfNO$W-ulG-h$urM`c*(640N|j-@EtI{*dL>k4$9Aq69Bpq8Gk#f=B-e<}R#S{B zRC76wqqp6DpD3vLfX6FV^J=!I#D@gKCz7o+-xHatZUR1@Q*y`rQ< zS5;00n_*XaBv(>_W+q(1vqi~`%Op1>yU~1!t4g?^c1`lJmcQb4yZeJ;YD_Y!T5V3p z^svgio&J$C5g(52>a^Z+bC}Z|l!->JJ(*0fVOD6neAyVF>yV-gasUgL8w%lKvSdT{ z*5z@!7zf|&)i^omcH=30;Aic1FNsZ@w3A{|5!}y_l9<^pl)7%VDv)%Z4v}avqEmlKwRA7ved4wcp(d zMObz+9^;f;Nk+Y6%11}yQguA=WAcRdNyB)}wY|fU11aa5bb_N)g!V^WB-xLQ5n}5PSEX42I2vM9Moz*+HxpVFLaa?Q}Vk?srDcaRE^&+0C~W~ z+xdQ1E;o~*k?Li#oe86kYh+D!x?CdL3^k*{o$?sqed?B{bvYIfD?PFyb?sPA;M8h{ zXlLL!BE`B&GDADoP8x0YZ7rTu@TYp z)%@YnHW*H*)b9|DhQf~$1zK?X8yQfsBXtR{r%!a^4SPCR2quZfb~lGfqUdkeD%-hj zCR7hQ>Aq3oS_ zi@~C|tP+%$RD)$f_EXtLuvUs?+rud44Uw@-G~8}_fjQC0^hhu{a`94kyD%J*1ej3O zt~=7s+xx6LJEpx=SFGZ%Rd+BclOEyj8lF$s`$>|R76@f~Fd6wr!)%V2M!kbfFQeF} z_3#c$PKFa2%T0aW>`)yxl?s^WQA#3`yZw4E9ppHC`P%2_65pCDAw2;HYjnOEb z6d2!_a8LbYqdN^NBvvhUr`fJN@bqOR>T)qmqvHiKyXA6u7`vBNt2sd(d1GTABh)L^ zIx`IghQ3A|Xpsn?&*GGysTBG`#;s1}MrbhXVtCl=2Vx{V%wz>hNh?^Yo5c!tmE0~@ z7}8UvMjRKeH*nTF^m^ReMJyd)x6{38T^S_;K_~-hfgy`dCDog{{i^DYPGzrMEORke z(8GD#ve&Kh^^qJN`L;uo?Sju)Y1Ex1f@&AN4W|b$7RQ`N2-<^9U=&nIZ@%yJy8U+7 zAjSLGOpKr>z3R@87HZj03NI7{!G%|*vfnqvq~H|5Rp`{5uGCJzM`plOOO++DDn>b9 zBGLbGvd`R}zBiBvd%gYvPPzRU2IYewwZ|gPvDrwpjI(xU-$?;;IFL#8+-k{Zw^#Bb zIu~m0)Us+-0&|97asz*5z>f1y*HHE)(qy_j~MmB(mC30cFFKNo}40yrt6Oplt9rnPSQDhSGS%vbmxf<>j zgU%ee6E1{?`WJ&RkIkA$@Q|h5OLNcc|rD;?e5aBI}!8F z;!y56v)QoR%;qvexI4Ay!YyD7F%`*g=V&$?r~KT|lB@l^3; z_(sPirq~2V5fw7%*>TZ3Owp|rBzv_rbV&)Jyi?D+{7rrgOr{Q)(&L&+Qp%_j+$juj zzzmIvJKf>9A>Z*|6Yk`8^6Z%u$Vr*Pk7d+c}|3Wg4ClT<{7Mo#A$RK&e>8%QZZ$hPO@o>{%9I zdmHK!GF~2Gx%OCX^xXcIGmV8ytwbRP#z}ZMF6Xmz>0n?dLitBwBJ3r`9$w{&Q;C+! z)eN;mP{DGO%=zt2ADdMMN;m7BI`ipRaT|{`$ed&ct*S%G?q`Bir!N%aIP0%_$VgNOV8w|)mroZWVCa$dPHrc^!?&1ppcZt^_&!VzOWVU_W1KI=wx^!p zPM{ekeVJj=o%58lvHVUss^%r%FzoaXQzKu%BgZh{32c{y(6piiMqyvQ%0|duoy|0+ z4NrzFw*(Jir|Hzpq4Hul78)h&Sx>k`_{W)&KM}Vz(XPhpBp%P(smV_ zRGXzhGr-jwn52+gDw8QNTvqDi6JLx=;T~T#+g4-afX|-8i3XiYmdH+kjkWzLHKuaI zD&_Y~gc|T?M?tr1l-~)2;+zm|kV;;m`XN87a9A)>0IqW(jW<(%7aIe{&yK*xNMW0= zRHrgQC|Pm{xCVF;(@NS?Z%EnP(A6(`e352?%L_%EY;aS6=3&S+9^}F$uiHhDp4_&t z5Qr39_G#4P_3Hd@sm(<;DFaMKK$xNu%a^LSClhZ^wj*s-r31wd z9`_`MMN)9}=rX(AYUje~YGX*YabW*UfVm(JQUzSG4~u>1d)K8*-9KpqPeGut@lLnm zq$0U`*+&i~DN<3kJC#awN^G}#Wj6=R_nOn5&E+N|DQO>yPAWsj>1kq;3O9<%h%5kR z;y8|BNZiM5=L=;@sQ|-hNMaK1Au{b6Sse!YlTyH$8sb8I;u%c%ChOy<>Co-MnnbhU z8Bm#$lq%A8yD!IONxsCgJ8ZYi0N!!~GbBdz6q}880eIf} zkR=tjo2_<${t0HM%~-1pGy^-tdyQU?$qMmNGleOf9V;rHH0LXZC@zo=2mB=FO{RHm zMJYGTwwherZ7+8#)wtAXa^fJ{cKbX`mZ&D9$x3Nl*{& z(697KfgGqR)#yuJUooeaJp~Uk7b?{bZ^;%~YfkFb-Y*Nd~aq zG$&HgYJu;yt1i{m_IeUDmhZc&?e3&sN`*&Qb-0rVXmX?TW3#3zNn(5y@+5h&-<$TQ zZVWJ(9UFSXW0{bmaN$U-2AEJRNe+Sy;950e6B!uGWINcIRt2F8c!%SvRSX*vp8P1j z(^3K{CR6XnNh&D?Dth!MP#loTB3;ONATl@kRzjz@;fL}H=H2n(U4% zsXm_U7N>O)XJ}v0l^W4>30U~CHW6}Ro*bJJqIf{^D3xe#TxGLD-%nMhB8k^ZSvKs8 zsneQVND~x5xq*!P5-FwQ$K;AV zmvLo)$Rhl0UtHbx*ZWY%R7uRQ)a{&rCkIf@mCDgPT<~ch8&l&XUulX8+bS}ckZa|XIv$FJ6sNtH>v!GBz_?T& za`usr!#zq>^82}9!QW8iv7Av9$s^#n&tA`Te7#OLwM|L&UcJY8?HHUxRZvo}r%9>Y z#}aJ5N2Ed?XT>kGgF-Ri3)kA7y3aSU2lBuN#n=*&BRi@zC5WEl2fC!LlHAY*+>qeN z$70#ZbUGena_Pu+Gw8~)X-_KM2&blDJRTf0lwoi@D0RgC4kpBbvDm;#vh0&e@nKB$ z5IM}39TuT(DfCN&RFroPQoI{Xc|pjMMNy2)`9PNIiXocp@gmN8Br@LMnB=sfWT;8s z6ZPjZyh@7B5f!OeYeEa#3gIQZiqo6q2LoZxMh)-*j%cYNIrFlAyrAKvSGebj*J_3J(l&DVejGsPo44-XA3 zw6CXR0h0apQnH*Ll&L|7bv0Qs=i`K&jKT5k$A4bB9ff!sm#So_kJHt>eFA0!TXj-x zXQkyNdEeMO^yQ{Qg6rcPRRTa$C1551zbu9gn-kwK<--~TE&)L?;V^$nz;e?T8PNF7 z?e*EqfTcT!;`ex+R~y0Jj>5(8om4XDugh7oofWH7hQ$gaH%m~RVpymp1vS3ouCl79 zL6@D4R=F{f{57JX#I|b+K8+_ar#B(x1v(qTz$~Yf*3>ts%LBX1AMR#db~iTc*C$?# z6DUcYP?#{84w|uGrYzD^R9j>TxJ7o%KHQNAdwrOnrhRg!5s@*U zok(^4SU*knNJ+)qtqk;wyzDTA^__`)Hc=_l96(>pKkCugFv~l=ghILHEY%$r!|hJh zN4iOM(xI{{-J)vMZC|6}A0|a-Zj$N7$*H}$;~^Nf?&b=?+PK2A)7sE$PgJl-5m*>% ze#b5FLw~n1o%kqXSROVePIqsJN$kj3;u@Hb02Il$-9@5YAc{j@K37u;!>Om~p_szL7&2sIUbWdF?YU@>|tEk$0hMWyYI%Q7@lcN3%J`mB#I?}*wva2%kHG7B1cJ| zr^E)mbxz>GfQFR@=a%sd*(Ld^vq5f;%F{3*RqSfT+ZxLgDT=xL4a`gA{R2YcCA;10 z9QU(!A6MguDM{E}D()SIt6q1u*HGwfN#*%&H#$^&fa|z+A20dSo*c!Nr)s+&wdWi8 zL9fxra~v1y_bM#8?eZiUPaC}8x^Ax$>c~BRrakITMs2m`tpKiJJUyHhn4F&=8oqSg zRhMJHGK`0~I8eU+ZYbL(rgD2idx1{LH&{k(_wuUUM>HrI@Pda3h{=Y~_ppA_6Ke-u zY@NlU>`v7a?+()i&X*N-b_h3s5_gM4uMr|Do)j~2GNl|IWE)B$?+wvHutcWqML%Zm zdOS{=suO9^MRW#{X_W_P#W`9jQ*D2b%?`s!Kf};TG4Ab6tGG1v)Z@uatHJ_Pq(|B9 zna;%9&NeXrPCu@eg3Wra2-IN=>j8VlPLd5i-zyZYtob_e%+xTsu+bcZ=2lvi=QG3}_epr___lS0=Yi;Xf;Imc8KzpsoB z0%>XBQj5cqG9|b930arQ*->#+aVJ@(F#sx|KJHV@bXZZmt$MqbC8)lV#<0pbUl<4l zxSSURHtvA!2&{8^81_;U>74qBTqU#3VN)j28~`T({!^0M^~8=83GhBo+DX0liV zBf1Syo)!g9f>p?BVMzB!lTOj;jSu~TOJM5T^+qb|;jkLc6@|W2%66+_wbG9&Qb_K3 zeS=}CU2hC0u39#hb*0;JA?qhIC9&W3*TzM659_4_w=7ki)$|}8WxY9nY|`;isa%Z1 za4+qj(5gKsq;~R3ahk%CDcVV9CTzx!)rqL9pB-{hjLXCnc0hN-5m(%YVQN=sdSo~5 zXX~zdL@kumc-QGkNiFw|T=Ay6li2pe?^a!u+uIE`SfQS*4Eu$mGqvrRvV3mR8P|X? zXyisY%$1J>B599XYVQO_fzDO5ZQR+huq_wbS!_7yMlmdsBZPz<*kvAPgp7ujW`qc` zdcOo+&I&=sJs@}|CKI04AYZg&u@)JVrd$Kq5X1n(>}m{~mU8w$jCaPigLYr7F~sXo zevLEjUbl#+aNl?s&x9ypuw7E9bhb=L3^x@hAj8Hrx)Apa{Vusr_x$x-5Nj4&L2q_I z6a}$GDA5+-rQ;2W&Tw__1WPJO$)^N_-1fNQQ*u(;&XL>2YE32Z9uMK+UBh;8Fv|A4 zUhmGZ(Q+s2jq12pFjtw)?V6-hNU4l$1)duYk($j6SILIlu-=6^Uryq6a(m@)=)hOX;We{vP#eTjp z=>1R>>j*K%H|D-syy>&03TnrdVQrL?yR zoaDg>uUDpShE(IU9E$++z16~U9afj}OS{*K}qV?H^HdF?)rT#v;^b~=nr2sNJwH^}G^ z_tYc6R!jL@m{4h|In3S*w~~O)lP=%2d$TxB5<5yLOZG!8p^m4xqM9b%nO;d93gK>; zCK#^isg|4H(LXrnu-VWZo54m6XjgHrHrF=-s{E6{qD5Ob+hqkfz4Efc6K1hK04%! z^<22n+KC0~(P{qb_}xWsm2462W;I$4`*9d+7>IPE#ZE!p>4ie8Hma*^t-@GG7^kXT zC8G-P3_i1gzHQ*E*i{X8-094RJGvRK%U4lj)qE!t2?l98osLY4_;e?qt>TgXb~imL zWr-d&@y0sUv?@=N1dFGrwy0L@<&nR@7ANW;8l%P}$(5Y>QJ_dyMwMuf6R_IUH|Ih~zmTwjWF(S9VA_n?N%UXkdl} zVnI38?D|P5-kER&pKzvpTxy)GR44vnXc|Rdw&(BW+%XAcd4B|h|fYjiHvk{LXS zc~e2B$M0h^xmssOmiuE_#@KFUn#r)!uIL6HqyqmXc<^5+9H>-epx$#idvyr>s%kjU z1imMc@i;4Xg5WW~8mFp7UwJ3vVP#J>;HnBqsWHyCb(kHc~_PNUln)yvyFKME!lN zruHfk%^Ch>QCbhUY3&6z$hKY>Ov&Y z$>xH?>YyvQ{Ty6x@+zHLJUF3yb-~@mI0cxjxt&fbG!jcG7y{>4F>Xjq>oQ!wm?}as z5Og_Hou)tG1$sDL&)CNp9ZGhIa$Q2(mfV{N=-oOQMB-*8JCmo0fs%6YM z#s{2YkL*-aJEedcRIACI+K;dtN)7V?PkcmBz~^y=nwgl}Gj<31(!@7R6e6u`F5dR4 zZgr;=3ku%Jq`(BhM^9_C-7ICN`K+&+=oGRXn@w&53X%=~#6_d+7r=L^l*;b}YEe&= zQeA(;<^(!4+5 zZP8`E(rArDraVxXp#q&7Ri=Zr7#|_UjxQG;JKH0mWs~XnkJC0zrL)a-<2k(5t;R=k zeGCJB;c~G;kPW4yR#SbMXfO$XxEW%q!KjDul@uo?Vg$9__jsFRxle9m8AfWmYLVcG zj^%R{#dwN4K}v3P(s<9~kG1oDm1q#xP3VEFryP7I%8ZL{H}Vd zl-Ehns*7tV#F(zfm|nj$VY}s6u<1&U>+%>dFp?Zlv?^jMlp zri(;4fbIBzW|-DscxZdb$i+x2F-cF;Ox7FNE@RU*-iK(fcJ4sav9d{Op zEn>hyh1%6rOc4V+kzj)XUSH7}4diew#N@}yzH$cYslFZK#A=lskNxl* zLDSjrt5SL5Cz$+r&dYm_bNnqI94(^vEA#|%E@L|j&4V>>2}LoVlc+%?KPEhYbQbH z;&yLMX0xpw7nc>nz(4`K0QIBC?MgV)f?M@hiHt;k}B>56(Q*N z0J-h2dy=tsY+M|1Q$ML@aJ$bfRs8WrKU$1t1{sdx>LX{%Ee)N0mLn%v!|Qd|hjD() zF*2D_NUt3ifJhg7!`#$69cL%~oql92QY_r>rNe=p6kZH8L{|>mVVSyAil?eP=kpV+ z>TS83&S|-4cVm%lxf2!YvX@l}yR+(-qz1^vSw{5+lDQ5Y z?lAdMJ?6Dfd^xWZjCClu?QDk$G2w)rijZYeaPwFsuC@!qG)1bSGfqrttlHpOE}v(R zEqPVoZsIg1c*1rMHUtL2*gjzexTZO&aWS#MWs!T8{a~z{lctoFibjyV@SV-N!|P zMdyT9hm|B*fm>wuT+2n~)4{CN9b|kAy*-?cfgX)l8#`14g+``}A}J?biFhDc@a;V( z6x@%C&UOaNbjD4>>%wTR-l&%b!T4Z;2@+uM5Shn41QsiYiey|WcE>WF4~$~=VTu(P zmiFd}62`f4Q42|AoPLJDTpj@!xFZ^f`YZ+fmj=VSF?uHv*a>te-f7fRz>B0HItTU` zUk4Me8BF=Tb!wag{cLBOwO}CJj(dF`PZH>yTBhKwx-p->fCn2%wn(;AycV_R3qCp& z2o|cOoy=#kgepw&Y9$`74vKWN>`xUXwc#H%IxYZL!4+p)exhmT;=)v&vaUQ=PgS#& z2e_+&F{{{9ZhjJFi@l1!mkPQ<1+SNFO{Z!lm+Ep%q>vC?{%W$O4!dr;t4146ew?*u z%dsX^6a%9iR_MQ;l)@Y9-g=wai%b|Pex33$i>@5Vmp#bCFw>gNA}Cj$*>)$1Uf3O=Bfjd z??r+^%!8*ng51VaR0<aTG*K5i%KUNTv;%fR^>)oQtj zJdxA_Fs9-HKg9Eb9mgUVJI>1iUnuM?HhfC4#41@XUJxm~;UD5Y7o98zI(AIVgzXVr zCEK}>-~*zvHgu{k))fS{ZvwF?ITLMITnh=;kPkVX?rli4oHjnBVQOINA=6fG7nH zDLjUe8+u)}DNPo;d@Q3*^8sH~whw`>@v&K`y1cbSGz3HY(QiDL!|;+H4~#NEc1Keg zMkQ;0AH7qIio>p7hDYYWT=N3U$_cuLWx{C~VisxwN3-tjjpR%?#oN{RPKXJG$AxLI z>7*JN0;t+{UUZ86fxqOb%afYW#=V}FE7_83T+J2bfs#;iRm_e>f&JSnck9It-Bv)g zDdzR2vZ!dJI%wLXK(G%9N%DFNxt;1LH1htqhC;UO{&u#5(@d;ei-lvUOs`!91YvV+ z(F+X=X;e$cnVK&=trj9!w~rDwlZ8^Ro)buq7>R{p z7y}dVMFnQU3|)DA;teIX$GIFqVoXht(vCY&h*qR1u!?{`2z5u9@0R<(?YHOJF6ck_?bCV*V`yi(78N;0%oL*Taxc#D zC59?;&5l^9jCvEv=T|Gem>ctZs4P)cTse~BCWS$_*mt@WA{A~4BHpJeLU+ZHMxmdavf8%T&`HgGW{fAIqhCMYl)prc(6=Jf;HUJt&~lsZcTL zOb)xzR8qyIw4G2Jjd&j$g)>TrPbM2-k6LNbBO%4R)G+S#OZg!=b@_7fDTWQ5;o!(4 zR~p%#cMxlKd`d`i=L=pws*s&2ON88GECdV{pE9lSTr;x`U}*HmE@vGc?SU~R{$bXQ zwSvW%E0fwudMc$X8yfHAeZv@A9MpGW?PNLID*_*)pLO+pkzjK;7JrO*Kk4=W`?VPf zOE|Eyh(QzJh)Ts$7!LNjns1Db}Q2>Cb}se_}e}^ z+O&mXbncyypAmQ1op4MldoUJ40oQq}c)p~>fM^}2x)Zy~PO{BJt`_F~{$M!lt47Cc zj}1szGxlS)4$k52nFxuP-EQA*2OBI&cH8;1eLNhD`ivZQ1#06C*-$2Q zwweo#d@x`v2io>yE;x!Emlo`Us0{h1a3M6AH|r! znH_t#w=>ML#Yj9iErYohvnLrzPgGd>sL4#yO~7jRO57vuFt z!UMDp&^&(HKS^XmQRgW59Fk0 zP7=JUkCUVbJeqvR!z9~m2lgE-2+&_@)hf~LLaj$it~!jVi|28s?{qQkLT2oN_)>B} z1S(#Cwl#JWfcq4@Si;lzbdZMQEu~05hIuBk6qZTZo19=d(x0I{Z3u5P>9cd(ARRBt zM0%PjCL3i8!`$78yN-J@!62~vXmP{_T-}0D?2}`ckIu!~MUjxoQkm+PDvi8YVtSK0 zSIOqH&7ip5#3?_pEUA839dNE_jZp)UBhn_-Ecj)qCikkTVqbK^wa@}bH!*iC6`cT^ zF_+81$R)MO<+s~DY={^7C21fylT=eohf@=u(n+fwHlMKbBA@h<6>n$k#h6A9qt#p# zv!{Xc(X|l%g5DNCko2JN3JL zY9Sdd3Tc;I9sb@k~2Tjv!bS-dQE18L@_?hk}p8nz=v#;j8YSa>-E~xORu( z)qJ)lE48$@J{@`bK}?R|m0^Wbr~aIOI`(AaNn$!~`Wf7w_qMyV#JBzGl=fssO(}}= zI8KGSV*=~PWe(?Mj~r7X<3zjAtfs3TIiDt~jiMyTOgAJnd@e81@rM;ovgZbVRmkOV zv71b_JUr%}hV4=+kc^U{;V_pbhors2WeQZc-*vfEFF7TqT(hrwCZ0N(@Q>YPJYmnq zw=3?fZ11t-bXjc(z*c0V0_z#Mn4A|Ni^;ZwO&>5c#ybPHRFVhmuoq5Op&2SnD|-n;|>)S zCkD(vf5bheeOxbBbH>|t_s)nJG7=Ws!FV#)uXwz*R9H}jZMq=1{ob56Fpw!P5fNIr z)Jt(?z&Zqzse1gAV%eP|B(kYiLg5_km-|?aO)|8qzznfYPKwzPF(_4s{sBc z^CP#{?pL_+4mrT8F~03{u?p4|70g@jCUb)l=WVBDr5$#27&EY|WTh7H2g+EyFT`6e ziuDIN_;%9GPVJsjyYFe2LhW2dQTl!kllu`57Vb~+(g;^rrJLFY9(v6OJih@>`oSD$ zVp5@z8%kK18pbQRdN!q&SZ70sPQ7e0ivEeSFQi(f9hb@~Ky(!+RF?Io zJQKILLlP}vkZNozIiIhQOI4i}f7aU?w?_e%a`oygCldlr)Z29cGn)>TCnd~h7sk%& z5crZ657kVmcAvX#AJQIT(4m|$;0cYUgI1+qt>pTNbUTOnd&$~x=w;c!gkcIqKgM-E zm_YOrF)rxw@Y&p8+UogZ5>2z7MoLzlQgzTK#OOrDgJpS}sAYQHZp$_FJBLH3)MjF} zVPxoLBXo}S_#3H)ZxUtHbUY*Rqc9_-M`PTTc8@ul8Z8hRub9nx zgdGJBQUdRmZxHmm z6*bc+sboG^_a%VYHz?;?)9I9;lwPGFSG^^`U0JCsgx&taSRn9ZvRrn0RKDIxFcOuM zGJ+EDHtjizu>+fJ==J!9ezz(n2C2|UPNl}>da@8#t6Vi-XQsf_1MXf@jbpu0xgiMU z?#SbhL{ectUQ}ytvK*UwfvH$iLf#^bscvw6ffx_t3=izZOvu|R(f)c@_4+dEv_%i{ zEZNSxTK=%;7VBQZhZp$XFscyTG%8MLEL~>tsK+Ue%YuwWGD^tlB)Evz>zxuMFJL3N zUoW>@N!HJG|Nr)$wySMp>3;UF*yDR|3&q%$ZP|v~yqL2qa! zjN$O#pP7A=WH2-dp@rJ#v_ZSl?(FW&?9A-!%(~a^xF6GnMt3g??RLMj!<>b~-o;M( z%Gf%qb-GT_UuxG*B7akq_e;Dx+&~L7v8Y*dhlZK>jTOy!|wXw=ach=_wQab?erCh z0;`|vsk6O5OuOx)!;PcCJKJ4S-yQ8ITMN$lX?^$Y*?zkBZom8M+NzQG3+YAkO&EQ+ zIDpOgZD)Km9PF*{uQ%Dy-d{*twcdKeHIpFOS=u|=U#ZpJeOTYKgP;Qv@ZJKDqj$Q{ zT(Ftz8CGrKJt4TvbVdhcrV zXp4;+z5dR-rMFxC&&Kdq+8>`>4A%VSes{}WMK{PJ?o&BwY-o+?xzDxGv^xXJ34tnRcHwX68&X%?Pc_Z~YfTO$Hedp!S>z;DGtYxmQ zFLb)rD`syAH^}DtQqQf~n-{BZ-q)I&>CT2{w%dC(d&6{_=mvRmHdBS)$?3g{gYy-;-=RU*8El?;t?qX1UH@=xw4QcfUo0HF zr#7XV2kWeHVV*BI+l_Y}m{pMBQ``B9QGe2JcyxHDgNu#ySf@vJRINUbT z4f5O=Vf2Ty-s)gG9KJc&?>Aq4Znl?RZ=r49)uU!siR#8n8b4yxqS+#x`7@To@=i!6{&Gy?t=2A}3Dq#uS!5GK$h zOQYw%tw7iCuP!D-8q@0U6%nr$*G9F;^IORgbD)=(Pq2P&UXDt^&cAy8OClm8|B}S` zzaimyq@I;A7<3tCIT;p;d8Fs^b3YnPtFp)5v?`1bKdo*!wFU%&WLn*5YRxI5_O!Y) zHm%0;r_~Io6;BAX_~MEC@)Qy$ZG7K(OVF;^~H$VFuPxgsP*pjx`r_wQJ1Q%))&v-bU40!T6cJYgB}PNx1d62 zTHW+nxRnJ=r{reUxTUVus^2dQ`0|-;+V@MHzI&8P9@nA$LJna}zyMBZuNGN0|~ zT&iAeH2xl#x|(8YP|}^<)4y7}1woe@xAE88 zfL!`p&1biM%SPJx3c0jXonF~!e%*xLwkdV1&4-xKBE{E)A_f0)os}!tD;^7pMMSEl zywdyQKr8Ud?2sj8;;Dar^c;Bj?>Z%;VMqobgE5juW?vRrZo49MTRl$XF2;4kza=A>l<2*N5>=AJ{ekm4KpjJtY+3*&34yp zcDtQcr{3laWB)-N^d`82U+R*p(kIk* zSfPaHw znFgK_%o8VboCOq9$6N83urVk-KF^uP?bW;)=#J;@!kyTo2nD91CNwy6<1j$DuSyc` zY+kP}-)La@P;{gG7=RB6szfHca0E;4&~w`7B}QJxVwVxqX;;oPNi0y>W$@aevSQ9`_%NNgPqEAmQT%)UsrHIoBrm4o3r?Xil}1 zrJ>`92*7}Rr)o3Y(j7{&=bh=bz(N5ijclR>TOOm63(sdo_sLX)S#j2?9)Ms}SC<+W#z=93cm&}PHKY9SO7(?y++5 z`;g@7c(O;{COn+0yq-DS!%YcuHDU@&2g`(>feCkEDn?e!8J&;JaUhme_aqr0jd}%R> z6}<69t_)>>WqS|+2YW5`DCShf6rW?AC{)6=D8OQ*ABVn3hZ@r}kwH`NJmCKKRf1>5SlcwJMgw^0SWk-+rT{7q z4R%e=+%HS-LrhVc#zBQB*fB9D9_l98P{?r_KLG8J=U4{-E=#*e?;23CvD`q%ih8Yt z@R9R3P|jW4Om{*tC;UZN1cx)bY|G`1$UO%)SDq6z#rWmdnQqs|Ov;g$+tIKszMq6>N0P=X_|uKKxGF>?fn}-=>?Z&$%om8BF9^HtNS9Gs|4oLbwy6 zIfx^9DN%I?Iws17ATRUYxLnG$p&YP6@_{*piQ+l#^E#gt(sJbzvP_Aj(M|dzZ&ZkZ zQVPs9$EDGA6{?7%kJ)!ZwlHv}_b_0!F*=CS0l6yhENNokW zEVBm_R6*}D#pWeS$;Kq3(+1hOc`ca~)kkMkNYG%Pe; zRxl_iJ$q4%kS~LT6I-a>p#oq3{DzT=zGi%T_Pdk+JJxuszlp|f_K@;F2>X)%n`WEy z|0Yz=`2VBh|2`nnuIp3H@^c8Kd491>F#TegNApE6;=rl`V)Aq*IM%d>NNAjOTr6bZhs46 zHptKw(X1s3S3$H!8$^|?WP6KjN;Z+5#fXhUp6|$aVMgTPjFn_|4}Lmz$4()v&mRh5vJeDzbl7 zl(YM0=20#gr;H545do|m3r>UwMDko3nOVU3dv#*B;O$=9EXXsWw~JeN|6(0DZa}nC`3;2<&0gdpt@vB=R5J%H5MTbn7B7%g2AU9qJh`ULpV^uJGtgW zpW-+wgBn_3A{IdgT#pV=VdJ`IxmJeB2$7MY{|xA8=yH>cLP8j5okJ3UtOCo2DjZ*& znHg~Qo6i3SG!Z_nK-u@V1KcV9wY2}gX?FPef4gPQ`2SPm|9R}vJHSMt*aIdC$vh1`uDB#2c&+~-QC+J@kPSQV= zepmYcO7gd_(SQD~1#eGZmXW6noD&EDRI3lm2a5FXvJH6x@}TzLhPMBhZIkPNjmFIW z`xNZI8A54-FBA!KFBC~)&&s$t_s<;lWkf5z=KA_TuOj^Qu*d-=srqLv!Ti<@nt(;e z`I`|y<}g9kM}8z$q<>t$RrE`~&+ET;(SO5eYx?h)O{9ObW6b=&o&x$CEr0mpJXv@410K@VVg(s8S-hL;F^O-_W3Z zzn6J60e!!_ytzBP)xrf>oQNy^m%9Hcub~MUV-99%zM`(P!lRFmLado9kIVBpe+e;@ z+!a~y&YWkNoAV=pK{TbUY#9&CWb;I@U03)=SL9_%@gCEc!}9jD>W$7Cc*P7ItofC} z6x|}Y;Vb8aFah?S;oc|#dI)ra~W}2W3sw)d{~I4>WY^=t4Hw$%78>^9HF;KKf8}vy~)6s z5ljw?VCok+#mI%nW6K^*MpWL+Lq3;qTOth{v4iy|2oCVOT3Ww$_^A&v#L0-mZyrNC z;xVGJ8#=Hc!5|sVi6?lN|KH5i_$c@P4S741J=py}vu;fKf3!O@``=U9|20Atgn)dh zkOUA5y=!_v;a$D;Uw7qr5VrO7oZqg~|E3j1FvSn&|62#KU!MQA3{d^~{Xb)-|360i zAD4492IZK5EGw{ptV}R~Vp)#1-?8vAEJO(aM9#O-1?- zQr`wS^O`0)J@d?Tg{pO|0AS-6%a_1zCb8V_4@H9zfW~PO5cs;8Viz+ zytyx^MY&}t1|iy<6UBGAcz#hI{{%_kCi(}Z@*(5@)mxeUU($cuXw2mQr$hgMP!lXb zln5@6FDcM86wL{%%5}1aO%*6uyvOY&XbF*bXbMCu%~by^ss3x}AM+R8d-%^g<9~wM z&*lG4!!Tg)=l1`WF{A&-NBq z0hK{Kg_ZwWM9^aV&(gI3q1U5+mWok7i!np*_t*g57|`T92LZh)_^0~d3Unqf^@E8k zfI9xCfPsl{aXk#45+;B$Xd(xA$|~L;A2D>#M5sxlUVumj0JSX<1&^Nr@a5<6OrQ?9 zH4nWe6ffdg&}Q;C3-bB5jTktKK6+>L(MKN)^ufcYKE*JUv%sp~Gq7qQ`rupVjYmsseH?=lYDXROf5WGGTC z=m0^b9y%3aR&fxXYysGf+DV11hOtG~U1$7#PECvQe@+g0IRC#EUiOs!|AuLF#Qo2i z{{IN&|2+Ok4InGhIzXXFXaR*HDfee(6COWLAn5;JCh*T9<H&!Wvfto>gLEDw18XVi@>{!6J3j^L?Z2lRe(7lVmd{ z9pJN!TU=nyhd(cbh+WLS6hSM{WFMg0yhr%Dh{Rq_82prIU8hI2fSK*w7Dmh+*xa#6 z3MK`8W`sVPA~GWEJ&D?tvi^D3EQ0X}5M8Dvr4iqVF%=kguRZBiHz)_o<{Xd#yfESy zx1jVhkh&J3@jJ)u!%|?a4Bb1IbG+vb*`W`U=dv)ES4qvF-M$-ec}fT@g+ywInAZYK zqB^LvRY=(Q%kaloMVhSS=1nyV|0e!`0oYn=FMVZR1_N~cLyD{BZ9ySlpE zV=3U&SZR|y@g8txt^HK81O|l5+e4gISEdG#H&Mi(GT%qZ{jM(e0c7=*EoVh*j(80+ zKP{p!OD+<=j5}gDZ~-x8dH}M*fbRMhpgRIB1U_-qMTy)BzD&$k3|K$}PhSoUek5Wm zd_5Q$;}?L)=fRgllR;9sDbA{H*bT(3Bz{f)t6etRh@p?r5hH$Pwc~Al}84BUoQ5v;t&a;&d=W;322Ciph)54Vc zQzULvf|J&oDq6nDRHusGGb>8)s1UU+<Njq|K;#U831)r zW&z9>2@~K4X@$^E!0Ma=@9DUK`7Q5}BzXQv z?v(kxv3PbQ`6}N1ELWnf~_(>Hk{%rwN40IKj1Y!4vK+ic^j)6uXki!St(tDo@zc4K6iF z{}DPDQs-VxKzHT;X&Tq^e|I{w_)m|J{%?=}Ucjy#D=3yqpRkEiP0YFCxnvyCXJx6A zOo`-*?_6E#mv~f9>GPal_7wt~|_xN?s^ zGB+HNF;uj3hhqgb?C%ciUD?v|LGk%9P*J#&5N5U#z1E0-norFX!|%xdvuJ4d83pi9 z=KnSu&1R?Fs-yg8nzQ_mkCFf182|4YR%zaUQ;p#NH`T~J;9Aw3==KlaiUDi{ll%T~ z12<7yf-b1qQ#OZ*_r$%pEE3TS^f%^CmyOV-~XFRF*?2j97u^}p@>A8o$!{J&!~ zp}c{mv;F@eev6BXCBEY>lk&b?bh3*D<&xm{`HB@@QZC`n0p-Ur*%`AcPs%ZWT$a~v zmI(;*@re_Tg5~95;(LE6Y$~ZgmdW!HA^-WL8h(QZ$7?|nk1vZrToqnh3kGgLFHc~j zjhB~oFOx69{snvW<=*bA#qL!JM_5vo!g%B1As^}+6Ech)`o8oyu)Wj~JG{JD!m8wj zJd}g&a?IO_Fr$J>zu;oL!Cso=GD*u%E8>fQ;$3@wW5#0QYKfiTpX!88+~hniOxdwM zMg%>UL~(fLIyeeq1LB50VaeFT8w`{tWR53_9Z~Cqi8~-+Bod?Xo5KN1#kq4n3JL0C z*dO=TgRgu%$h;FIp{gyHN{i$@9x~#&CBrj9H$WG{0d&NmZrwsad7JQ#awrt_pru|= zcxR90NAq%LM~p}e2yZV_%h6LTTi6}p!DCEbgkb`cZbjmoQt4m+A{u?(fM!}My$_S@ zMhQRTwCp$(w`1k8<8d}Frta_d)ddHOdqwuV5RVIb;hC5aCOju~00oo-V+W6^Lk=@u zVI?2PFdXsqPF;DsL~~Ul;exdoXBSIyqTDg3NtkJuLWN2Ie0&4J9Ag)-8n(D*!@uLX z>hP#ucgW{vhtF)ObkmZ8G#sJlphA6Il%B<0o39BvUf|F{LWJdx0R@F{%gZxA0PZg^ z7F`2f@=xU~D?-aA)nd}?lK~!g8=;oGv#oS8^Ln=Nc+$Lh{V0|BK}(?rPA^7@g+#~(0mmZ zZ}jXZ*dCmpu6V4%Ib+$V&&xmS%f>vuT`H+7QZ$ek>^Nk$C1@0NtYawqLl!LKov>q^ zy~CBwjp7Xb=?R)_kIzY9N=0N@YGiSm-|12$0OH18CpIbttKg} pne|q)-8GxtZl~3$H@lq%z&TT6X202Q_WO$8{{!Hp&I|zj0sulVRmT7T literal 0 HcmV?d00001