From c3fa929c1ebf128298261308e5b32edfa940864c Mon Sep 17 00:00:00 2001
From: Gael <Gael@WL20-0067.corp.pasteur.fr>
Date: Tue, 6 Oct 2020 11:50:20 +0200
Subject: [PATCH] tempo

---
 cute_little_R_functions.R | 4765 +++++++++++++++++++++++++++++++++++--
 fun_gg_boxplot.docx       |  Bin 102400 -> 103234 bytes
 fun_gg_scatter.docx       |  Bin 115376 -> 116458 bytes
 3 files changed, 4623 insertions(+), 142 deletions(-)

diff --git a/cute_little_R_functions.R b/cute_little_R_functions.R
index c0424ef..1e56d84 100644
--- a/cute_little_R_functions.R
+++ b/cute_little_R_functions.R
@@ -12,7 +12,7 @@
 # https://usethis.r-lib.org/ and usethat also
 # change everywhere: if( ! is.null(arg.check)){
 # BEWARE: do not forget to save the modifications in the .R file (through RSTUDIO for indentation)
-# update graphic examples with good comment, as in barplot
+# update examples with good comment, as in fun_gg_boxplot
 # Make a "first round" check for each function if required
 # Update all argument description, saying, character vector, etc.
 # check all the functions using fun_test
@@ -96,7 +96,22 @@
 # Check fun_test() (see cute_checks.docx) Ok
 # check manual: example to scan again
 # clear to go Apollo
-fun_check <- function(data, data.name = NULL, class = NULL, typeof = NULL, mode = NULL, length = NULL, prop = FALSE, double.as.integer.allowed = FALSE, options = NULL, all.options.in.data = FALSE, na.contain = FALSE, neg.values = TRUE, print = FALSE, fun.name = NULL){
+fun_check <- function(
+data, 
+data.name = NULL, 
+class = NULL, 
+typeof = NULL, 
+mode = NULL, 
+length = NULL, 
+prop = FALSE, 
+double.as.integer.allowed = FALSE, 
+options = NULL, 
+all.options.in.data = FALSE, 
+na.contain = FALSE, 
+neg.values = TRUE, 
+print = FALSE, 
+fun.name = NULL
+){
 # AIM
 # check the class, type, mode and length of the data argument
 # mainly used to check the arguments of other functions
@@ -106,8 +121,6 @@ fun_check <- function(data, data.name = NULL, class = NULL, typeof = NULL, mode
 # WARNINGS
 # The function tests what is written in arguments, even if what is written in incoherent. For instance, fun_check(data = factor(1), class = "factor", mode = "character") will return a problem, and this, what ever the object tested in the data argument, because no object can be class "factor" and mode "character" (factors are class "factor" and mode "numeric")
 # Since R >= 4.0.0, class(matrix()) returns "matrix" "array", and not "matrix" alone as before. However, use argument class = "matrix" to check for matrix object (of class "matrix" "array" in R >= 4.0.0) and use argument class = "array" to check for array object (of class "array" in R >= 4.0.0)
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# none
 # ARGUMENTS
 # data: object to test
 # data.name: character string indicating the name of the object to test. If NULL, use the name of the object assigned to the data argument
@@ -128,6 +141,10 @@ fun_check <- function(data, data.name = NULL, class = NULL, typeof = NULL, mode
 # $problem: logical. Is there any problem detected?
 # $text: the problem detected
 # $fun.name: name of the checked parameter
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# none
 # EXAMPLES
 # test <- 1:3 ; fun_check(data = test, data.name = NULL, print = TRUE, options = NULL, all.options.in.data = FALSE, class = NULL, typeof = NULL, mode = NULL, prop = TRUE, double.as.integer.allowed = FALSE, length = NULL)
 # test <- 1:3 ; fun_check(data = test, print = TRUE, class = "numeric", typeof = NULL, double.as.integer.allowed = FALSE)
@@ -384,13 +401,15 @@ return(output)
 fun_secu <- function(pos = 1, name = NULL){
 # AIM
 # verif that local variables are not present in other environments, in order to avoid scope preference usage. The fun_secu() function checks by default the parent environment. This means that when used inside a function, it checks the local environment of this function. When used in the Global environment, it would check this environment
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS
 # pos: single integer indicating the position of the environment checked (argument n of parent.frame()). VaLue 1 means one step above the fun_secu() local environment. Thus, if fun_secu() is used in the working environment, with pos ==1, variables of this env will be checked in the above envs. If fun_secu() is used in a function, with pos ==1, variables presents in the local env of the functions will be checked in the above envs (which includes the working environment (Global env)
 # name: single character string indicating the name of the function checked
 # RETURN
 # a character string of the local variables that match variables in the different environments of the R scope, or NULL if no match
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # fun_secu()
 # fun_secu(pos = 2)
@@ -463,14 +482,16 @@ return(output)
 fun_info <- function(data){
 # AIM
 # provide a full description of an object
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# none
 # ARGUMENTS
 # data: object to test
 # RETURN
 # a list containing information, depending on the class and type of data
 # if data is made of numerics, provide range, sum, mean, number of NA and number of Inf
 # please, use names(fun_info()) and remove what can be too big for easy analysis
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# none
 # EXAMPLES
 # fun_info(data = 1:3)
 # fun_info(data.frame(a = 1:2, b = ordered(factor(c("A", "B"))), stringsAsFactors = TRUE))
@@ -566,11 +587,13 @@ return(output)
 
 
 # Check OK: clear to go Apollo
-fun_head <- function(data1, n = 6, side = "l"){
+fun_head <- function(
+data1, 
+n = 6, 
+side = "l"
+){
 # AIM
 # as head() but display the left or right head of big 2D objects
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS
 # data1: any object but more dedicated for matrix, data frame or table
 # n: as in head() but for for matrix, data frame or table, number of dimension to print (10 means 10 rows and columns)
@@ -578,6 +601,10 @@ fun_head <- function(data1, n = 6, side = "l"){
 # BEWARE: other arguments of head() not used
 # RETURN
 # the head
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # obs1 = matrix(1:30, ncol = 5, dimnames = list(letters[1:6], LETTERS[1:5])) ; obs1 ; fun_head(obs1, 3)
 # obs1 = matrix(1:30, ncol = 5, dimnames = list(letters[1:6], LETTERS[1:5])) ; obs1 ; fun_head(obs1, 3, "right")
@@ -626,11 +653,13 @@ return(data1[row, col])
 
 
 # Check OK: clear to go Apollo
-fun_tail <- function(data1, n = 10, side = "l"){
+fun_tail <- function(
+data1, 
+n = 10, 
+side = "l"
+){
 # AIM
 # as tail() but display the left or right head of big 2D objects
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS
 # data1: any object but more dedicated for matrix, data frame or table
 # n: as in tail() but for for matrix, data frame or table, number of dimension to print (10 means 10 rows and columns)
@@ -638,6 +667,10 @@ fun_tail <- function(data1, n = 10, side = "l"){
 # BEWARE: other arguments of tail() not used
 # RETURN
 # the tail
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # obs1 = matrix(1:30, ncol = 5, dimnames = list(letters[1:6], LETTERS[1:5])) ; obs1 ; fun_tail(obs1, 3)
 # obs1 = matrix(1:30, ncol = 5, dimnames = list(letters[1:6], LETTERS[1:5])) ; obs1 ; fun_tail(obs1, 3, "r")
@@ -693,8 +726,6 @@ fun_comp_1d <- function(data1, data2){
 # common elements
 # common element names (except factors)
 # common levels (factors only)
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# none
 # ARGUMENTS
 # data1: vector or factor or 1D table, or 1D matrix or 1D array
 # data2: vector or factor or 1D table, or 1D matrix or 1D array
@@ -725,6 +756,10 @@ fun_comp_1d <- function(data1, data2){
 # $order2: order of all elements of data2. NULL if $same.order is FALSE
 # $identical.object: logical. Are objects identical (kind of object, element names, content, including content order)?
 # $identical.content: logical. Are content objects identical (identical elements, including order, excluding kind of object and element names)?
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# none
 # EXAMPLES
 # obs1 = 1:5 ; obs2 = 1:5 ; names(obs1) <- LETTERS[1:5] ; names(obs2) <- LETTERS[1:5] ; fun_comp_1d(obs1, obs2)
 # obs1 = 1:5 ; obs2 = 1:5 ; names(obs1) <- LETTERS[1:5] ; fun_comp_1d(obs1, obs2)
@@ -913,8 +948,6 @@ fun_comp_2d <- function(data1, data2){
 # same column number
 # potential identical rows between the 2 datasets
 # potential identical columns between the 2 datasets
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# none
 # ARGUMENTS
 # data1: matrix, data frame or table
 # data2: matrix, data frame or table
@@ -948,6 +981,10 @@ fun_comp_2d <- function(data1, data2){
 # $same.col.pos2: position in data2 of the cols identical in data1 (not considering column names). Return "TOO BIG FOR EVALUATION" if ncol(data1) * ncol(data2) > 1e10
 # $identical.object: logical. Are objects identical (including row & column names)?
 # $identical.content: logical. Are content objects identical (identical excluding row & column names)?
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# none
 # EXAMPLES
 # obs1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; obs2 = as.data.frame(matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])), stringsAsFactors = TRUE) ; obs1 ; obs2 ; fun_comp_2d(obs1, obs2)
 # obs1 = matrix(101:110, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; obs2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; obs1 ; obs2 ; fun_comp_2d(obs1, obs2)
@@ -1280,8 +1317,6 @@ fun_comp_list <- function(data1, data2){
 # same length
 # common names
 # common compartments
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# none
 # ARGUMENTS
 # data1: list
 # data2: list
@@ -1299,6 +1334,10 @@ fun_comp_list <- function(data1, data2){
 # $same.compartment.pos2: position, in data2, of the compartments identical in data1
 # $identical.object: logical. Are objects identical (kind of object, compartment names and content)?
 # $identical.content: logical. Are content objects identical (identical compartments excluding compartment names)?
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# none
 # EXAMPLES
 # obs1 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; obs2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; fun_comp_list(obs1, obs2)
 # obs1 = list(1:5, LETTERS[1:2]) ; obs2 = list(a = 1:5, b = LETTERS[1:2]) ; fun_comp_list(obs1, obs2)
@@ -1406,10 +1445,22 @@ return(output)
 # add traceback https://stackoverflow.com/questions/47414119/how-to-read-a-traceback-in-r
 
 # Check OK: clear to go Apollo
-fun_test <- function(fun, arg, val, expect.error = NULL, thread.nb = NULL, print.count = 10, plot.fun = FALSE, export = FALSE, res.path = NULL, lib.path = NULL, cute.path = "C:\\Users\\Gael\\Documents\\Git_projects\\cute_little_R_functions\\cute_little_R_functions.R"){
+fun_test <- function(
+fun, 
+arg, 
+val, 
+expect.error = NULL, 
+thread.nb = NULL, 
+print.count = 10, 
+plot.fun = FALSE, 
+export = FALSE, 
+res.path = NULL, 
+lib.path = NULL, 
+cute.path = "C:\\Users\\Gael\\Documents\\Git_projects\\cute_little_R_functions\\cute_little_R_functions.R"
+){
 # AIM
 # test combinations of argument values of a function
-# WARNING
+# WARNINGS
 # Limited to 43 arguments with at least 2 values each. The total number of arguments tested can be more if the additional arguments have a single value. The limit is due to nested "for" loops (https://stat.ethz.ch/pipermail/r-help/2008-March/157341.html), but it should not be a problem since the number of tests would be 2^43 > 8e12
 # ARGUMENTS
 # fun: character string indicating the name of the function tested (without brackets)
@@ -1425,12 +1476,8 @@ fun_test <- function(fun, arg, val, expect.error = NULL, thread.nb = NULL, print
 # cute.path: character string indicating the absolute path of the cute.R file. Will be remove when cute will be a package. Not considered if thread.nb is NULL
 # REQUIRED PACKAGES
 # lubridate
-# parallel if thread.nb argument is not NULL
+# parallel if thread.nb argument is not NULL (included in the R installation packages)
 # if the tested function is in a package, this package must be imported first (no parallelization) or must be in the classical R package folder indicated by the lib.path argument (parallelization)
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
-# fun_get_message()
-# fun_pack()
 # RETURN
 # if export is FALSE a list containing:
 # $fun: the tested function
@@ -1444,6 +1491,12 @@ fun_test <- function(fun, arg, val, expect.error = NULL, thread.nb = NULL, print
 # $sys.info: system and packages info
 # if export is TRUE 1) the same list object into a .RData file, 2) also the $data data frame into a .txt file, and 3) if expect.error is non NULL and if any discrepancy, the $data data frame into a .txt file but containing only the rows with discrepancies between expected and observed errors
 # one or several pdf if a plotting function is tested and if the plot.fun argument is TRUE
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
+# fun_get_message()
+# fun_pack()
 # EXAMPLES
 # fun_test(fun = "unique", arg = c("x", "incomparables"), val = list(x = list(1:10, c(1,1,2,8), NA), incomparable = c(TRUE, FALSE, NA)))
 # fun_test(fun = "fun_round", arg = c("data", "dec.nb", "after.lead.zero"), val = list(L1 = list(c(1, 1.0002256, 1.23568), "a", NA), L2 = list(2, c(1,3), NA), L3 = c(TRUE, FALSE, NA)))
@@ -2059,8 +2112,6 @@ cat(paste0("fun_test JOB END\n\nTIME: ", end.date, "\n\nTOTAL TIME LAPSE: ", tot
 fun_name_change <- function(data1, data2, added.string = "_modif"){
 # AIM
 # this function allow to check if a vector of character strings, like column names of a data frame, has elements present in another vector (vector of reserved words or column names of another data frame before merging)
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS
 # data1: vector of character strings to check and modify
 # data2: reference vector of character strings
@@ -2070,6 +2121,10 @@ fun_name_change <- function(data1, data2, added.string = "_modif"){
 # $data: the modified data1 (in the same order as in the initial data1)
 # $ini: the initial elements before modification. NULL if no modification
 # $post: the modified elements in the same order as in ini. NULL if no modification
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # obs1 <- c("A", "B", "C", "D") ; obs2 <- c("A", "C") ; fun_name_change(obs1, obs2)
 # obs1 <- c("A", "B", "C", "C_modif1", "D") ; obs2 <- c("A", "A_modif1", "C") ; fun_name_change(obs1, obs2) # the function checks that the new names are neither in obs1 nor in obs2 (increment the number after the added string)
@@ -2130,7 +2185,11 @@ return(output)
 
 
 # Check OK: clear to go Apollo
-fun_df_remod <- function(data, quanti.col.name = "quanti", quali.col.name = "quali"){
+fun_df_remod <- function(
+data, 
+quanti.col.name = "quanti", 
+quali.col.name = "quali"
+){
 # AIM
 # if the data frame is made of numeric columns, a new data frame is created, with the 1st column gathering all the numeric values, and the 2nd column being the name of the columns of the initial data frame. If row names were present in the initial data frame, then a new ini_rowname column is added with the names of the rows
 
@@ -2139,14 +2198,16 @@ fun_df_remod <- function(data, quanti.col.name = "quanti", quali.col.name = "qua
 
  
 
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS
 # data: data frame to convert
 # quanti.col.name: optional name for the quanti column of the new data frame
 # quali.col.name: optional name for the quali column of the new data frame
 # RETURN
 # the modified data frame
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # obs <- data.frame(col1 = (1:4)*10, col2 = c("A", "B", "A", "A"), stringsAsFactors = TRUE) ; obs ; fun_df_remod(obs)
 # obs <- data.frame(col1 = (1:4)*10, col2 = 5:8, stringsAsFactors = TRUE) ; obs ; fun_df_remod(obs, quanti.col.name = "quanti", quali.col.name = "quali")
@@ -2262,10 +2323,12 @@ fun_round <- function(data, dec.nb = 2, after.lead.zero = TRUE){
 # data: a vector of numbers (numeric or character mode)
 # dec.nb: number of required decimal digits
 # after.lead.zero: logical. If FALSE, rounding is performed for all the decimal numbers, whatever the leading zeros (e.g., 0.123 -> 0.12 and 0.00128 -> 0.00). If TRUE, dec.nb are taken after the leading zeros (e.g., 0.123 -> 0.12 and 0.00128 -> 0.0013)
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # RETURN
 # the modified vector
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # ini.options <- options()$digits ; options(digits = 8) ; cat(fun_round(data = c(NA, 10, 100.001, 333.0001254, 12312.1235), dec.nb = 2, after.lead.zero = FALSE), "\n\n") ; options(digits = ini.options)
 # ini.options <- options()$digits ; options(digits = 8) ; cat(fun_round(data = c(NA, 10, 100.001, 333.0001254, 12312.1235), dec.nb = 2, after.lead.zero = TRUE), "\n\n") ; options(digits = ini.options)
@@ -2340,12 +2403,14 @@ fun_mat_rotate <- function(data){
 # AIM
 # 90° clockwise matrix rotation
 # applied twice, the function provide the mirror matrix, according to vertical and horizontal symmetry
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS
 # data: matrix (matrix class)
 # RETURN
 # the modified matrix
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # obs <- matrix(1:10, ncol = 1) ; obs ; fun_mat_rotate(obs)
 # obs <- matrix(LETTERS[1:10], ncol = 5) ; obs ; fun_mat_rotate(obs)
@@ -2382,11 +2447,16 @@ return(data)
 
 
 # Check OK: clear to go Apollo
-fun_mat_num2color <- function(mat1, mat.hsv.h = TRUE, notch = 1, s = 1, v = 1, forced.color = NULL){
+fun_mat_num2color <- function(
+mat1, 
+mat.hsv.h = TRUE, 
+notch = 1, 
+s = 1, 
+v = 1, 
+forced.color = NULL
+){
 # AIM
 # convert a matrix made of numbers into a hexadecimal matrix for rgb colorization
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS:
 # mat1: matrix 1 of non negative numerical values that has to be colored (matrix class). NA allowed
 # mat.hsv.h: logical. Is mat1 the h of hsv colors ? (if TRUE, mat1 must be between zero and 1)
@@ -2400,6 +2470,10 @@ fun_mat_num2color <- function(mat1, mat.hsv.h = TRUE, notch = 1, s = 1, v = 1, f
 # $colored.mat: colors of mat1 in hexa
 # $problem: logical. Is any colors of forced.color overlap the colors designed by the function. NULL if forced.color = NULL
 # $text.problem: text when overlapping colors. NULL if forced.color = NULL or problem == FALSE
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # mat1 = matrix(c(1,1,1,2,1,5,9,NA), ncol = 2) ; dimnames(mat1) <- list(LETTERS[1:4], letters[1:2]) ; fun_mat_num2color(mat1, mat.hsv.h = FALSE, notch = 1, s = 1, v = 1, forced.color = NULL)
 # DEBUGGING
@@ -2520,14 +2594,16 @@ fun_mat_op <- function(mat.list, kind.of.operation = "+"){
 # j: column number
 # k: matrix number
 # z: number of matrices
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
-# fun_comp_2d()
 # ARGUMENTS:
 # mat.list: list of matrices
 # kind.of.operation: either "+" (by case addition), "-" (by case subtraction) or "*" (by case multiplication)
 # RETURN
 # the assembled matrix, with row and/or column names only if all the matrices have identical row/column names
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
+# fun_comp_2d()
 # EXAMPLES
 # mat1 = matrix(c(1,1,1,2,1,5,9,8), ncol = 2) ; mat2 = matrix(c(1,1,1,2,1,5,9,NA), ncol = 2) ; fun_mat_op(mat.list = list(mat1, mat2), kind.of.operation = "+")
 # mat1 = matrix(c(1,1,1,2,1,5,9,8), ncol = 2, dimnames = list(LETTERS[1:4], letters[1:2])) ; mat2 = matrix(c(1,1,1,2,1,5,9,NA), ncol = 2, dimnames = list(LETTERS[1:4], letters[1:2])) ; fun_mat_op(mat.list = list(mat1, mat2), kind.of.operation = "*")
@@ -2618,12 +2694,14 @@ return(output)
 fun_mat_inv <- function(mat){
 # AIM
 # return the inverse of a square matrix when solve() cannot
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS:
 # mat: a square numeric matrix without NULL, NA, Inf or single case (dimension 1, 1) of 0
 # RETURN
 # the inversed matrix
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # mat1 = matrix(c(1,1,1,2,1,5,9,8,9), ncol = 3) ; fun_mat_inv(mat = mat1) # use solve()
 # mat1 = matrix(c(0,0,0,0,0,0,0,0,0), ncol = 3) ; fun_mat_inv(mat = mat1) # use the trick
@@ -2695,8 +2773,6 @@ fun_mat_fill <- function(mat, empty.cell.string = 0, warn.print = FALSE){
 # fill this empty half part using the other symmetric half part of the matrix
 # WARNINGS
 # a plot verification using fun_gg_heatmap() is recommanded
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS:
 # mat: a numeric or character square matrix with the half part (according to the grand diagonal) filled with NA (any kind of matrix), "0" (character matrix) or 0 (numeric matrix) exclusively (not a mix of 0 and NA in the empty part)
 # empty.cell.string: a numeric, character or NA (no quotes) indicating what empty cells are filled with
@@ -2705,6 +2781,10 @@ fun_mat_fill <- function(mat, empty.cell.string = 0, warn.print = FALSE){
 # a list containing:
 # $mat: the filled matrix
 # $warn: the warning messages. Use cat() for proper display. NULL if no warning
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # mat1 = matrix(c(1,NA,NA,NA, 0,2,NA,NA, NA,3,4,NA, 5,6,7,8), ncol = 4) ; mat1 ; fun_mat_fill(mat = mat1, empty.cell.string = NA, warn.print = TRUE) # bottomleft example
 # mat1 = matrix(c(1,1,1,2, 0,2,3,0, NA,3,0,0, 5,0,0,0), ncol = 4) ; mat1 ; fun_mat_fill(mat = mat1, empty.cell.string = NA, warn.print = TRUE) # error example
@@ -2844,7 +2924,18 @@ return(list(mat = mat, warn = warn))
 ######## fun_permut() #### progressively breaks a vector order
 
 
-fun_permut <- function(data1, data2 = NULL, n = NULL, seed = NULL, print.count = 10, text.print = "", cor.method = "spearman", cor.limit = 0.2, warn.print = FALSE, lib.path = NULL){
+fun_permut <- function(
+data1, 
+data2 = NULL, 
+n = NULL, 
+seed = NULL, 
+print.count = 10, 
+text.print = "", 
+cor.method = "spearman", 
+cor.limit = 0.2, 
+warn.print = FALSE, 
+lib.path = NULL
+){
 # AIM
 # reorder the elements of the data1 vector by flipping 2 randomly selected  consecutive positions either:
 # 1) n times (when n is precised) or
@@ -2865,18 +2956,18 @@ fun_permut <- function(data1, data2 = NULL, n = NULL, seed = NULL, print.count =
 # cor.limit: a correlation limit (between 0 and 1). Ignored if data2 is not specified. Compute the correlation between data1 and data2, permute the data1 values, and stop the permutation process when the correlation between data1 and data2 decreases down below the cor limit value (0.2 by default). If cor(data1, data2) is negative, then -cor.limit is used and the process stops until the correlation between data1 and data2 increases up over cor.limit (-0.2 by default). BEWARE: write a positive cor.limit even if cor(data1, data2) is known to be negative. The function will automatically uses -cor.limit. If the initial correlation is already below cor.limit (positive correlation) or over -cor.limit (negative correlation), then the data1 value positions are completely randomized (correlation between data1 and data2 is expected to be 0)
 # warn.print: logical. Print warnings at the end of the execution? No print if no warning messages
 # lib.path: character vector specifying the absolute pathways of the directories containing the required packages if not in the default directories. Ignored if NULL
-# REQUIRED PACKAGES
-# lubridate
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
-# fun_pack()
-# fun_round()
 # RETURN
 # a list containing:
 # $data: the modified vector
 # $warn: potential warning messages (in case of negative correlation when data2 is specified). NULL if non warning message
 # $cor: a spearman correlation between the initial positions (1:length(data1) and the final positions if data2 is not specified and the final correlation between data1 and data2 otherwise, according to cor.method
 # $count: the number of loops used
+# REQUIRED PACKAGES
+# lubridate
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
+# fun_pack()
+# fun_round()
 # EXAMPLES
 # example (1) showing that for loop, used in fun_permut(), is faster than while loop
 # ini.time <- as.numeric(Sys.time()) ; count <- 0 ; for(i0 in 1:1e9){count <- count + 1} ; tempo.time <- as.numeric(Sys.time()) ; tempo.lapse <- round(lubridate::seconds_to_period(tempo.time - ini.time)) ; tempo.lapse
@@ -3229,10 +3320,26 @@ return(output)
 ######## fun_slide() #### return a computation made on a vector using a sliding window
 
 
-fun_slide <- function(data, window.size, step, from = NULL, to = NULL, fun, args = NULL, boundary = "left", parall = FALSE, thread.nb = NULL, print.count = 100, res.path = NULL, lib.path = NULL, verbose = TRUE, cute.path = "C:\\Users\\Gael\\Documents\\Git_projects\\cute_little_R_functions\\cute_little_R_functions.R"){
+fun_slide <- function(
+data, 
+window.size, 
+step, 
+from = NULL, 
+to = NULL, 
+fun, 
+args = NULL, 
+boundary = "left", 
+parall = FALSE, 
+thread.nb = NULL, 
+print.count = 100, 
+res.path = NULL, 
+lib.path = NULL, 
+verbose = TRUE, 
+cute.path = "C:\\Users\\Gael\\Documents\\Git_projects\\cute_little_R_functions\\cute_little_R_functions.R"
+){
 # AIM
 # return a computation made on a vector using a sliding window
-# WARNING
+# WARNINGS
 # The function uses two strategies, depending on the amout of memory required which depends on the data, window.size and step arguments. The first one uses lapply(), is generally fast but requires lots of memory. The second one uses a parallelized loop. The choice between the two strategies is automatic if parall argument is FALSE, and is forced toward parallelization if parall argument is TRUE
 # The parall argument forces the parallelization, which is convenient when the data argument is big, because the lapply() function is sometimes slower than the parallelization
 # ARGUMENTS
@@ -3251,19 +3358,19 @@ fun_slide <- function(data, window.size, step, from = NULL, to = NULL, fun, args
 # lib.path: character vector specifying the absolute pathways of the directories containing the required packages if not in the default directories. Ignored if NULL
 # verbose: logical. Display messages?
 # cute.path: character string indicating the absolute path of the cute.R file. Will be remove when cute will be a package. Not considered if thread.nb is NULL
-# REQUIRED PACKAGES
-# lubridate
-# parallel if parallelization is used
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
-# fun_get_message
-# fun_pack()
 # RETURN
 # a data frame containing
 #$left : the left boundary of each window (in the unit of the data argument)
 #$right : the right boundary of each window (in the unit of data argument)
 #$center : the center of each window (in the unit of data argument)
 #$value : the computed value by the fun argument in each window)
+# REQUIRED PACKAGES
+# lubridate
+# parallel if parallelization is used (included in the R installation packages)
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
+# fun_get_message
+# fun_pack()
 # EXAMPLES
 # fun_slide(data = c(1:10, 100:110, 500), window.size = 5, step = 2, fun = length, boundary = "left")
 # fun_slide(data = c(1:10, 100:110, 500), window.size = 5, step = 2, fun = length, boundary = "right") # effect of boundary argument
@@ -3607,7 +3714,14 @@ return(output)
 
 
 # Check OK: clear to go Apollo
-fun_width <- function(class.nb, inches.per.class.nb = 1, ini.window.width = 7, inch.left.space, inch.right.space, boundarie.space = 0.5){
+fun_width <- function(
+class.nb, 
+inches.per.class.nb = 1, 
+ini.window.width = 7, 
+inch.left.space, 
+inch.right.space, 
+boundarie.space = 0.5
+){
 # AIM
 # rescale the width of a window to open depending on the number of classes to plot
 # can be used for height, considering that it is as if it was a width
@@ -3618,8 +3732,6 @@ fun_width <- function(class.nb, inches.per.class.nb = 1, ini.window.width = 7, i
 # plot() or any other plotting
 # fun_post_plot() if fun_prior_plot() has been used # not for ggplot2
 # fun_close()
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS
 # class.nb: number of class to plot
 # inches.per.class.nb: number of inches per unit of class.nb. 2 means 2 inches for each boxplot for instance
@@ -3629,6 +3741,10 @@ fun_width <- function(class.nb, inches.per.class.nb = 1, ini.window.width = 7, i
 # boundarie.space: space between the right and left limits of the plotting region and the plot (0.5 means half a class width)
 # RETURN
 # the new window width in inches
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # fun_width(class.nb = 10, inches.per.class.nb = 0.2, ini.window.width = 7, inch.left.space = 1, inch.right.space = 1, boundarie.space = 0.5)
 # DEBUGGING
@@ -3670,7 +3786,18 @@ return(window.width)
 
 
 # Check OK: clear to go Apollo
-fun_open <- function(pdf = TRUE, pdf.path = "working.dir", pdf.name = "graph", width = 7, height = 7, paper = "special", pdf.overwrite = FALSE, rescale = "fixed", remove.read.only = TRUE, return.output = FALSE){
+fun_open <- function(
+pdf = TRUE, 
+pdf.path = "working.dir", 
+pdf.name = "graph", 
+width = 7, 
+height = 7, 
+paper = "special", 
+pdf.overwrite = FALSE, 
+rescale = "fixed", 
+remove.read.only = TRUE, 
+return.output = FALSE
+){
 # AIM
 # open a pdf or screen (GUI) graphic window and return initial graphic parameters
 # this order can be used:
@@ -3680,10 +3807,8 @@ fun_open <- function(pdf = TRUE, pdf.path = "working.dir", pdf.name = "graph", w
 # plot() or any other plotting
 # fun_post_plot() if fun_prior_plot() has been used # not for ggplot2
 # fun_close()
-#WARNING
+# WARNINGS
 # On Linux, use pdf = TRUE, if (GUI) graphic window is not always available, meaning that X is not installed (clusters for instance). Use X11() in R to test if available
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS:
 # pdf: logical. Use pdf display? If FALSE, a GUI is opened
 # pdf.path: where the pdf is saved (do not terminate by / or \\). Write "working.dir" if working directory is required (default). Ignored if pdf == FALSE
@@ -3701,6 +3826,10 @@ fun_open <- function(pdf = TRUE, pdf.path = "working.dir", pdf.name = "graph", w
 # $ini.par: initial par() parameters
 # $zone.ini: initial window spliting
 # $dim: dimension of the graphical device (in inches)
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # fun_open(pdf = FALSE, pdf.path = "C:/Users/Gael/Desktop", pdf.name = "graph", width = 7, height = 7, paper = "special", pdf.overwrite = FALSE, return.output = TRUE)
 # DEBUGGING
@@ -3827,13 +3956,32 @@ return(output)
 
 
 # Check OK: clear to go Apollo
-fun_prior_plot <- function(param.reinitial = FALSE, xlog.scale = FALSE, ylog.scale = FALSE, remove.label = TRUE, remove.x.axis = TRUE, remove.y.axis = TRUE, std.x.range = TRUE, std.y.range = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 3.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = FALSE){
+fun_prior_plot <- function(
+param.reinitial = FALSE, 
+xlog.scale = FALSE, 
+ylog.scale = FALSE, 
+remove.label = TRUE, 
+remove.x.axis = TRUE, 
+remove.y.axis = TRUE, 
+std.x.range = TRUE, 
+std.y.range = TRUE, 
+down.space = 1, 
+left.space = 1, 
+up.space = 1, 
+right.space = 1, 
+orient = 1, 
+dist.legend = 3.5, 
+tick.length = 0.5, 
+box.type = "n", 
+amplif.label = 1, 
+amplif.axis = 1, 
+display.extend = FALSE, 
+return.par = FALSE
+){
 # AIM
 # very convenient to erase the axes for post plot axis redrawing using fun_post_plot()
 # reinitialize and set the graphic parameters before plotting
 # CANNOT be used if no graphic device already opened
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS
 # param.reinitial: reinitialize graphic parameters before applying the new ones, as defined by the other arguments? Either TRUE or FALSE
 # xlog.scale: Log scale for the x-axis? Either TRUE or FALSE. If TRUE, erases the x-axis, except legend, for further drawing by fun_post_plot()(xlog argument of par())
@@ -3857,6 +4005,10 @@ fun_prior_plot <- function(param.reinitial = FALSE, xlog.scale = FALSE, ylog.sca
 # return.par: return graphic parameter modification?
 # RETURN
 # return graphic parameter modification
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # fun_prior_plot(param.reinitial = FALSE, xlog.scale = FALSE, ylog.scale = FALSE, remove.label = TRUE, remove.x.axis = TRUE, remove.y.axis = TRUE, std.x.range = TRUE, std.y.range = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 4.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = FALSE)
 # DEBUGGING
@@ -4000,6 +4152,8 @@ fun_scale <- function(n, lim, kind = "approx", lib.path = NULL){
 # lim: vector of 2 numbers indicating the limit range of the axis. Order of the 2 values matters (for inverted axis). Can be log transformed values
 # kind: either "approx" (approximative), "strict" (strict) or "strict.cl" (strict clean). If "approx", use the scales::trans_breaks() function to provide an easy to read scale of approximately n ticks spanning the range of the lim argument. If "strict", cut the range of the lim argument into n + 1 equidistant part and return the n numbers at each boundary. This often generates numbers uneasy to read. If "strict.cl", provide an easy to read scale of exactly n ticks, but sometimes not completely spanning the range of the lim argument
 # lib.path: character vector specifying the absolute pathways of the directories containing the required packages if not in the default directories. Ignored if NULL
+# RETURN
+# a vector of numbers
 # REQUIRED PACKAGES
 # if kind = "approx":
 # ggplot2
@@ -4007,8 +4161,6 @@ fun_scale <- function(n, lim, kind = "approx", lib.path = NULL){
 # REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
 # fun_check()
 # fun_round()
-# RETURN
-# a vector of numbers
 # EXAMPLES
 # approximate number of main ticks
 # ymin = 2 ; ymax = 3.101 ; n = 5 ; scale <- fun_scale(n = n, lim = c(ymin, ymax), kind = "approx") ; scale ; par(yaxt = "n", yaxs = "i", las = 1) ; plot(ymin:ymax, ymin:ymax, xlim = range(scale, ymin, ymax)[order(c(ymin, ymax))], ylim = range(scale, ymin, ymax)[order(c(ymin, ymax))], xlab = "DEFAULT SCALE", ylab = "NEW SCALE") ; par(yaxt = "s") ; axis(side = 2, at = scale)
@@ -4201,7 +4353,13 @@ return(output)
 ######## fun_inter_ticks() #### define coordinates of secondary ticks
 
 
-fun_inter_ticks <- function(lim, log = "log10", breaks = NULL, n = NULL, warn.print = TRUE){
+fun_inter_ticks <- function(
+lim, 
+log = "log10", 
+breaks = NULL, 
+n = NULL, 
+warn.print = TRUE
+){
 # AIM
 # define coordinates and values of secondary ticks
 # ARGUMENTS
@@ -4210,16 +4368,16 @@ fun_inter_ticks <- function(lim, log = "log10", breaks = NULL, n = NULL, warn.pr
 # breaks: mandatory vector of numbers indicating the main ticks values/positions when log argument is "no". Ignored when log argument is "log2" or "log10"
 # n: number of secondary ticks between each main tick when log argument is "no". Ignored when log argument is "log2" or "log10"
 # warn.print: logical. Print potential warning messages at the end of the execution? If FALSE, warning messages are never printed, but can still be recovered in the returned list
-# REQUIRED PACKAGES
-# none
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # RETURN
 # a list containing
 # $log: value of the log argument used
 # $coordinates: the coordinates of the secondary ticks on the axis, between the lim values
 # $values: the corresponding values associated to each coordinate (with log scale, 2^$values or 10^$values is equivalent to the labels of the axis)
 # $warn: the potential warning messages. Use cat() for proper display. NULL if no warning
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # no log scale
 # fun_inter_ticks(lim = c(-4,4), log = "no", breaks = c(-2, 0, 2), n = 3)
@@ -4383,14 +4541,41 @@ return(output)
 
 
 # Check OK: clear to go Apollo
-fun_post_plot <- function(x.side = 0, x.log.scale = FALSE, x.categ = NULL, x.categ.pos = NULL, x.lab = "", x.axis.size = 1.5, x.label.size = 1.5, x.dist.legend = 0.5, x.nb.inter.tick = 1, y.side = 0, y.log.scale = FALSE, y.categ = NULL, y.categ.pos = NULL, y.lab = "", y.axis.size = 1.5, y.label.size = 1.5, y.dist.legend = 0.5, y.nb.inter.tick = 1, text.angle = 90, tick.length = 0.5, sec.tick.length = 0.3, bg.color = NULL, grid.lwd = NULL, grid.col = "white", corner.text = "", corner.text.size = 1, just.label.add = FALSE, par.reset = FALSE, custom.par = NULL){
+fun_post_plot <- function(
+x.side = 0, 
+x.log.scale = FALSE, 
+x.categ = NULL, 
+x.categ.pos = NULL, 
+x.lab = "", 
+x.axis.size = 1.5, 
+x.label.size = 1.5, 
+x.dist.legend = 0.5, 
+x.nb.inter.tick = 1, 
+y.side = 0, 
+y.log.scale = FALSE, 
+y.categ = NULL, 
+y.categ.pos = NULL, 
+y.lab = "", 
+y.axis.size = 1.5, 
+y.label.size = 1.5, 
+y.dist.legend = 0.5, 
+y.nb.inter.tick = 1, 
+text.angle = 90, 
+tick.length = 0.5, 
+sec.tick.length = 0.3, 
+bg.color = NULL, 
+grid.lwd = NULL, 
+grid.col = "white", 
+corner.text = "", 
+corner.text.size = 1, 
+just.label.add = FALSE, 
+par.reset = FALSE, 
+custom.par = NULL
+){
 # AIM
 # redesign axis. If x.side = 0, y.side = 0, the function just adds text at topright of the graph and reset par() for next graphics and provides outputs (see below)
 # provide also positions for legend or additional text on the graph
 # use fun_prior_plot() before this function for initial inactivation of the axis drawings
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
-# fun_open() to reinitialize graph parameters if par.reset = TRUE and custom.par = NULL
 # ARGUMENTS
 # x.side: axis at the bottom (1) or top (3) of the region figure. Write 0 for no change
 # x.log.scale: Log scale for the x-axis? Either TRUE or FALSE
@@ -4446,6 +4631,11 @@ fun_post_plot <- function(x.side = 0, x.log.scale = FALSE, x.categ = NULL, x.cat
 # $y.bottom.plot.region: bottom of the plot region, in coordinates of the y-axis
 # $y.mid.plot.region: middle of the plot region, in coordinates of the y-axis
 # $text: warning text
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
+# fun_open() to reinitialize graph parameters if par.reset = TRUE and custom.par = NULL
 # EXAMPLES
 # Example of log axis with log y-axis and unmodified x-axis:
 # prior.par <- fun_prior_plot(param.reinitial = TRUE, xlog.scale = FALSE, ylog.scale = TRUE, remove.label = TRUE, remove.x.axis = FALSE, remove.y.axis = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 0.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = TRUE) ; plot(1:100, log = "y") ; fun_post_plot(y.side = 2, y.log.scale = prior.par$ylog, x.lab = "Values", y.lab = "TEST", y.axis.size = 1.25, y.label.size = 1.5, y.dist.legend = 0.7, just.label.add = ! prior.par$ann)
@@ -4751,13 +4941,15 @@ return(output)
 fun_close <- function(kind = "pdf", return.text = FALSE){
 # AIM
 # close only specific graphic windows (devices)
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS:
 # kind: vector, among c("windows", "quartz", "x11", "X11", "pdf", "bmp", "png", "tiff"), indicating the kind of graphic windows (devices) to close. BEWARE: either "windows", "quartz", "x11" or "X11" means that all the X11 GUI graphics devices will be closed, whatever the OS used
 # return.text: print text regarding the kind parameter and the devices that were finally closed?
 # RETURN
 # text regarding the kind parameter and the devices that were finally closed
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # windows() ; windows() ; pdf() ; dev.list() ; fun_close(kind = c("pdf", "x11"), return.text = TRUE) ; dev.list()
 # DEBUGGING
@@ -4832,7 +5024,12 @@ return(text)
 
 
 # Check OK: clear to go Apollo
-fun_empty_graph <- function(text = NULL, text.size = 1, title = NULL, title.size = 1.5){
+fun_empty_graph <- function(
+text = NULL, 
+text.size = 1, 
+title = NULL, 
+title.size = 1.5
+){
 # AIM
 # display an empty plot with a text in the middle of the window (for instance to specify that no plot can be drawn)
 # ARGUMENTS
@@ -4840,12 +5037,12 @@ fun_empty_graph <- function(text = NULL, text.size = 1, title = NULL, title.size
 # text.size: numeric value of the text size
 # title: character string of the graph title
 # title.size: numeric value of the title size (in points)
+# RETURN
+# an empty plot
 # REQUIRED PACKAGES
 # none
 # REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
 # fun_check()
-# RETURN
-# an empty plot
 # EXAMPLES
 # simple example
 # fun_empty_graph(text = "NO GRAPH")
@@ -4916,12 +5113,12 @@ fun_gg_palette <- function(n, kind = "std"){
 # ARGUMENTS
 # n: number of groups on the graph
 # kind: either "std" for standard gg colors, "dark" for darkened gg colors, or "light" for pastel gg colors
+# RETURN
+# the vector of hexadecimal colors
 # REQUIRED PACKAGES
 # none
 # REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
 # fun_check()
-# RETURN
-# the vector of hexadecimal colors
 # EXAMPLES
 # output of the function
 # fun_gg_palette(n = 2)
@@ -4978,17 +5175,13 @@ hcl(h = hues, l = if(kind == "std"){65}else if(kind == "dark"){35}else if(kind =
 fun_gg_just <- function(angle, pos, kind = "axis"){
 # AIM
 # provide correct justification for text labeling, depending on the chosen angle
-# WARNING
+# WARNINGS
 # justification behave differently on plot, depending whether it is used for annotayed text or for axis labelling. Indeed the latter has labelling constrained
 # Of note, a bug in ggplot2: vjust sometimes does not work, i.e., the same justification result is obtained whatever the value used. This is the case with angle = 90, pos = "top", kind = "axis". While everything is fine with angle = 90, pos = "bottom", kind = "axis". At least, everything seems fine for kind = "axis" and pos = c("left", "bottom")
 # ARGUMENTS
 # angle: integer value of the text angle, using the same rules as in ggplot2. Positive values for counterclockwise rotation: 0 for horizontal, 90 for vertical, 180 for upside down etc. Negative values for clockwise rotation: 0 for horizontal, -90 for vertical, -180 for upside down etc. 
 # pos: where text is? Either "top", "right", "bottom" or "left" of the elements to justify from
 # kind: kind of text? Either "axis" or "text". In the first case, the pos argument refers to the axis position, and in the second to annotated text (using ggplot2::annotate() or ggplot2::geom_text())
-# REQUIRED PACKAGES
-# none
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # RETURN
 # a list containing:
 # $angle: the submitted angle (value potentially reduced to fit the [-360 ; 360] interval, e.g., 460 -> 100, without impact on the final angle displayed)
@@ -4996,6 +5189,10 @@ fun_gg_just <- function(angle, pos, kind = "axis"){
 # $kind: the selected kind of text (argument kind)
 # $hjust: the horizontal justification
 # $vjust: the vertical justification
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # fun_gg_just(angle = 45, pos = "bottom")
 # fun_gg_just(angle = (360*2 + 45), pos = "left")
@@ -5170,13 +5367,13 @@ fun_gg_get_legend <- function(ggplot_built, fun.name = NULL, lib.path = NULL){
 # ggplot_built: a ggplot build object
 # fun.name: single character string indicating the name of the function using fun_gg_get_legend(). Ignored if NULL
 # lib.path: character vector specifying the absolute pathways of the directories containing the required packages if not in the default directories. Ignored if NULL
+# RETURN
+# a list of class c("gtable", "gTree", "grob", "gDesc"), providing legend information of ggplot_built objet, or NULL if the ggplot_built object has no legend
 # REQUIRED PACKAGES
 # ggplot2
 # REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
 # fun_check()
 # fun_pack()
-# RETURN
-# a list of class c("gtable", "gTree", "grob", "gDesc"), providing legend information of ggplot_built objet, or NULL if the ggplot_built object has no legend
 # EXAMPLES
 # Simple example
 # obs1 <- data.frame(time = 1:20, group = rep(c("CLASS_1", "CLASS_2"), times = 10), stringsAsFactors = TRUE) ; p <- ggplot2::ggplot() + ggplot2::geom_point(data = obs1, mapping = ggplot2::aes(x = group, y = time, fill = group)) ; fun_gg_get_legend(ggplot_built = ggplot2::ggplot_build(p))
@@ -5275,7 +5472,21 @@ return(legend)
 
 
 # Check OK: clear to go Apollo
-fun_gg_point_rast <- function(data = NULL, mapping = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, raster.width = NULL, raster.height = NULL, raster.dpi = 300, inactivate = TRUE, lib.path = NULL){
+fun_gg_point_rast <- function(
+data = NULL, 
+mapping = NULL, 
+stat = "identity", 
+position = "identity", 
+..., 
+na.rm = FALSE, 
+show.legend = NA, 
+inherit.aes = TRUE, 
+raster.width = NULL, 
+raster.height = NULL, 
+raster.dpi = 300, 
+inactivate = TRUE, 
+lib.path = NULL
+){
 # AIM
 # equivalent to ggplot2::geom_point() but in raster mode
 # use it like ggplot2::geom_point() with the main raster.dpi additional argument
@@ -5291,15 +5502,15 @@ fun_gg_point_rast <- function(data = NULL, mapping = NULL, stat = "identity", po
 # raster.dpi: resolution of the result image
 # inactivate: logical. Inactivate the fun.name argument of the fun_check() function? If TRUE, the name of the fun_check() function in error messages coming from this function. Use TRUE if fun_gg_point_rast() is used like this: eval(parse(text = "fun_gg_point_rast"))
 # lib.path: character vector specifying the absolute pathways of the directories containing the required packages if not in the default directories. Ignored if NULL
+# RETURN
+# a raster scatter plot
 # REQUIRED PACKAGES
 # ggplot2
-# grid
+# grid (included in the R installation packages)
 # Cairo
 # REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
 # fun_check()
 # fun_pack()
-# RETURN
-# a raster scatter plot
 # EXAMPLES
 # Two pdf in the current directory
 # set.seed(1) ; data1 = data.frame(x = rnorm(100000), y = rnorm(10000), stringsAsFactors = TRUE) ; fun_open(pdf.name = "Raster") ; ggplot2::ggplot() + fun_gg_point_rast(data = data1, mapping = ggplot2::aes(x = x, y = y)) ; fun_open(pdf.name = "Vectorial") ; ggplot2::ggplot() + ggplot2::geom_point(data = data1, mapping = ggplot2::aes(x = x, y = y)) ; dev.off() ; dev.off()
@@ -5428,7 +5639,29 @@ raster.dpi = raster.dpi,
 # if matrix is full of zero (or same value I guess), heatmap is complicate. Test it and error message
 
 # Check OK: clear to go Apollo
-fun_gg_heatmap <- function(data1, legend.name1 = "", low.color1 = "blue", mid.color1 = "white", high.color1 = "red", limit1 = NULL, midpoint1 = NULL, data2 = NULL, color2 = "black", alpha2 = 0.5, invert2 = FALSE, text.size = 12, title = "", title.text.size = 12, show.scale = TRUE, rotate = FALSE, return = FALSE, plot = TRUE, add = NULL, warn.print = FALSE, lib.path = NULL){
+fun_gg_heatmap <- function(
+data1, 
+legend.name1 = "", 
+low.color1 = "blue", 
+mid.color1 = "white", 
+high.color1 = "red", 
+limit1 = NULL, 
+midpoint1 = NULL, 
+data2 = NULL, 
+color2 = "black", 
+alpha2 = 0.5, 
+invert2 = FALSE, 
+text.size = 12, 
+title = "", 
+title.text.size = 12, 
+show.scale = TRUE, 
+rotate = FALSE, 
+return = FALSE, 
+plot = TRUE, 
+add = NULL, 
+warn.print = FALSE, 
+lib.path = NULL
+){
 # AIM
 # ggplot2 heatmap with the possibility to overlay a mask
 # see also:
@@ -5457,13 +5690,6 @@ fun_gg_heatmap <- function(data1, legend.name1 = "", low.color1 = "blue", mid.co
 # add: character string allowing to add more ggplot2 features (dots, lines, themes, etc.). BEWARE: (1) must start with "+" just after the simple or double opening quote (no space, end of line, carriage return, etc., allowed), (2) must finish with ")" just before the simple or double closing quote (no space, end of line, carriage return, etc., allowed) and (3) each function must be preceded by "ggplot2::" (for instance: "ggplot2::coord_flip()). If the character string contains the "ggplot2::theme" string, then internal ggplot2 theme() and theme_classic() functions will be inactivated to be reused by add. BEWARE: handle this argument with caution since added functions can create conflicts with the preexisting internal ggplot2 functions
 # warn.print: logical. Print warnings at the end of the execution? No print if no warning messages
 # lib.path: absolute path of the required packages, if not in the default folders
-# REQUIRED PACKAGES
-# ggplot2
-# reshape2
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
-# fun_pack()
-# fun_round()
 # RETURN
 # a heatmap if plot argument is TRUE
 # a list of the graph info if return argument is TRUE:
@@ -5471,6 +5697,13 @@ fun_gg_heatmap <- function(data1, legend.name1 = "", low.color1 = "blue", mid.co
 # $axes: a list of the axes info
 # $scale: the scale info (lowest, mid and highest values)
 # $warn: the warning messages. Use cat() for proper display. NULL if no warning
+# REQUIRED PACKAGES
+# ggplot2
+# reshape2
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
+# fun_pack()
+# fun_round()
 # EXAMPLES
 # fun_gg_heatmap(data1 = matrix(1:16, ncol = 4), title = "GRAPH 1")
 # fun_gg_heatmap(data1 = matrix(1:16, ncol = 4), return = TRUE)
@@ -5757,7 +5990,13 @@ return(list(data = output, axes = output$layout$panel_params[[1]], scale = c(lim
 
 
 # Check OK: clear to go Apollo
-fun_gg_empty_graph <- function(text = NULL, text.size = 12, title = NULL, title.size = 8, lib.path = NULL){
+fun_gg_empty_graph <- function(
+text = NULL, 
+text.size = 12, 
+title = NULL, 
+title.size = 8, 
+lib.path = NULL
+){
 # AIM
 # display an empty ggplot2 plot with a text in the middle of the window (for instance to specify that no plot can be drawn)
 # ARGUMENTS
@@ -5766,13 +6005,13 @@ fun_gg_empty_graph <- function(text = NULL, text.size = 12, title = NULL, title.
 # title: character string of the graph title
 # title.size: numeric value of the title size (in points)
 # lib.path: character vector specifying the absolute pathways of the directories containing the required packages if not in the default directories. Ignored if NULL
+# RETURN
+# an empty plot
 # REQUIRED PACKAGES
 # ggplot2
 # REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
 # fun_check()
 # fun_pack()
-# RETURN
-# an empty plot
 # EXAMPLES
 ### simple example
 # fun_gg_empty_graph(text = "NO GRAPH")
@@ -5840,15 +6079,44 @@ suppressWarnings(print(eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.
 
 
 # Check OK: clear to go Apollo
-fun_trim <- function(data, displayed.nb = NULL, single.value.display = FALSE, trim.method = "", trim.cutoffs = c(0.05, 0.975), interval.scale.disp = TRUE, down.space = 0.75, left.space = 0.75, up.space = 0.3, right.space = 0.25, orient = 1, dist.legend = 0.37, box.type = "l", amplif.label = 1.25, amplif.axis = 1.25, std.x.range = TRUE, std.y.range = TRUE, cex.pt = 0.2, col.box = hsv(0.55, 0.8, 0.8), x.nb.inter.tick = 4, y.nb.inter.tick = 0, tick.length = 1, sec.tick.length = 0.75, corner.text = "", amplif.legend = 1, corner.text.size = 0.75, trim.return = FALSE){
+fun_trim <- function(
+data, 
+displayed.nb = NULL, 
+single.value.display = FALSE, 
+trim.method = "", 
+trim.cutoffs = c(0.05, 
+0.975), 
+interval.scale.disp = TRUE, 
+down.space = 0.75, 
+left.space = 0.75, 
+up.space = 0.3, 
+right.space = 0.25, 
+orient = 1, 
+dist.legend = 0.37, 
+box.type = "l", 
+amplif.label = 1.25, 
+amplif.axis = 1.25, 
+std.x.range = TRUE, 
+std.y.range = TRUE, 
+cex.pt = 0.2, 
+col.box = hsv(0.55, 
+0.8, 
+0.8), 
+x.nb.inter.tick = 4, 
+y.nb.inter.tick = 0, 
+tick.length = 1, 
+sec.tick.length = 0.75, 
+corner.text = "", 
+amplif.legend = 1, 
+corner.text.size = 0.75, 
+trim.return = FALSE
+){
 # AIM
 # trim and display values from a numeric vector or matrix
 # plot 4 graphs: stripchart of values, stripchart of rank of values, histogram and normal QQPlot
 # different kinds of intervals are displayed on the top of graphes to facilitate the analysis of the variable and a trimming setting
 # the trimming interval chosen is displayed on top of graphs
 # both trimmed and not trimmed values are returned in a list
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS
 # data: values to plot (either a numeric vector or a numeric matrix)
 # displayed.nb: number of values displayed. If NULL, all the values are displayed. Otherwise, if the number of values is over displayed.nb, then displayed.nb values are displayed after random selection
@@ -5877,6 +6145,10 @@ fun_trim <- function(data, displayed.nb = NULL, single.value.display = FALSE, tr
 # amplif.legend: increase or decrease the size of the text of legend
 # corner.text.size: positive numeric. Increase or decrease the size of the text. Value 1 does not change it, 0.5 decreases by half, 2 increases by 2
 # trim.return: return the trimmed and non trimmed values? NULL returned for trimmed and non trimmed values if trim.method == ""
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # RETURN
 # a list containing:
 # $trim.method: correspond to trim.method above
@@ -6148,7 +6420,26 @@ return(output)
 
 
 # Check OK: clear to go Apollo
-fun_segmentation <- function(data1, x1, y1, x.range.split = NULL, x.step.factor = 10, y.range.split = NULL, y.step.factor = 10, error = 0, data2 = NULL, x2, y2, data2.pb.dot = "unknown", xy.cross.kind = "&", plot = FALSE, graph.in.file = FALSE, raster = TRUE, warn.print = FALSE, lib.path = NULL){
+fun_segmentation <- function(
+data1, 
+x1, 
+y1, 
+x.range.split = NULL, 
+x.step.factor = 10, 
+y.range.split = NULL, 
+y.step.factor = 10, 
+error = 0, 
+data2 = NULL, 
+x2, 
+y2, 
+data2.pb.dot = "unknown", 
+xy.cross.kind = "&", 
+plot = FALSE, 
+graph.in.file = FALSE, 
+raster = TRUE, 
+warn.print = FALSE, 
+lib.path = NULL
+){
 # AIM
 # if data1 is a data frame corresponding to the data set of a scatterplot (with a x column for x-axis values and a y column for the y-axis column), then fun_segmentation() delimits a frame around the dots cloud using a sliding window set by x.range.split and x.step.factor to frame the top and bottom part of the cloud, and set by y.range.split and y.step.factor to frame the left and right part of the cloud
 # if a second data frame is provided, corresponding to the data set of a scatterplot (with a x column for x-axis values and a y column for the y-axis column), then fun_segmentation() defines the dots of this data frame, outside of the frame of the first data frame
@@ -6175,17 +6466,6 @@ fun_segmentation <- function(data1, x1, y1, x.range.split = NULL, x.step.factor
 # raster: logical. Dots in raster mode? If FALSE, dots from each geom_point from geom argument are in vectorial mode (bigger pdf and long to display if millions of dots). If TRUE, dots from each geom_point from geom argument are in matricial mode (smaller pdf and easy display if millions of dots, but long to generate the layer). If TRUE, the region plot will be square to avoid a bug in fun_gg_point_rast(). If TRUE, solve the transparency problem with some GUI. Not considered if plot is FALSE
 # warn.print: logical. Print warnings at the end of the execution? No print if no warning messages
 # lib.path: character vector specifying the absolute pathways of the directories containing the required packages if not in the default directories. Ignored if NULL. Ignored if plot is FALSE
-# REQUIRED PACKAGES
-# ggplot2 if plot is TRUE
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
-# if plot is TRUE:
-# fun_pack()
-# fun_open()
-# fun_gg_palette()
-# fun_gg_scatter()
-# fun_gg_empty_graph()
-# fun_close()
 # RETURN
 # several graphs if plot is TRUE
 # a list containing:
@@ -6204,6 +6484,17 @@ fun_segmentation <- function(data1, x1, y1, x.range.split = NULL, x.step.factor
 # $data2.inconsistent.dot: see the warning section above
 # $axes: the x-axis and y-axis info
 # $warn: the warning messages. Use cat() for proper display. NULL if no warning
+# REQUIRED PACKAGES
+# ggplot2 if plot is TRUE
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
+# if plot is TRUE:
+# fun_pack()
+# fun_open()
+# fun_gg_palette()
+# fun_gg_scatter()
+# fun_gg_empty_graph()
+# fun_close()
 # EXAMPLES
 # example explaining the unknown and inconsistent dots, and the cross 
 
@@ -7379,19 +7670,23 @@ return(tempo.list)
 
 
 # Check OK: clear to go Apollo
-fun_pack <- function(req.package, load = FALSE, lib.path = NULL){
+fun_pack <- function(
+req.package, 
+load = FALSE, 
+lib.path = NULL
+){
 # AIM
 # check if the specified R packages are present in the computer and import them into the working environment
 # ARGUMENTS
 # req.package: character vector of package names to import
 # load: logical. Load the package into the environement (using library())? Interesting if packages are not in default folders or for checking the functions names of packages using search()
 # lib.path: optional character vector specifying the absolute pathways of the directories containing some of the listed packages in the req.package argument, if not in the default directories. Ignored if NULL
+# RETURN
+# nothing
 # REQUIRED PACKAGES
 # none
 # REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
 # fun_check()
-# RETURN
-# nothing
 # EXAMPLES
 # fun_pack(req.package = "nopackage")
 # fun_pack(req.package = "ggplot2")
@@ -7464,7 +7759,12 @@ suppressMessages(suppressWarnings(suppressPackageStartupMessages(library(req.pac
 
 
 # Check OK: clear to go Apollo
-fun_python_pack <- function(req.package, python.exec.path = NULL, lib.path = NULL, R.lib.path = NULL){
+fun_python_pack <- function(
+req.package, 
+python.exec.path = NULL, 
+lib.path = NULL, 
+R.lib.path = NULL
+){
 # AIM
 # check if the specified python packages are present in the computer (no import)
 # WARNINGS
@@ -7474,13 +7774,13 @@ fun_python_pack <- function(req.package, python.exec.path = NULL, lib.path = NUL
 # python.exec.path: optional character vector specifying the absolute pathways of the executable python file to use (associated to the packages to use). If NULL, the reticulate::import_from_path() function used in fun_python_pack() seeks for an available version of python.exe, and then uses python_config(python_version, required_module, python_versions). But might not be the correct one for the lib.path parameter specified. Thus, it is recommanded to do not leave NULL, notably when using computing clusters
 # lib.path: optional character vector specifying the absolute pathways of the directories containing some of the listed packages in the req.package argument, if not in the default directories
 # R.lib.path: absolute path of the reticulate packages, if not in the default folders
+# RETURN
+# nothing
 # REQUIRED PACKAGES
 # reticulate
 # REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
 # fun_check()
 # fun_pack()
-# RETURN
-# nothing
 # EXAMPLES
 # example of error message
 # fun_python_pack(req.package = "nopackage")
@@ -7588,13 +7888,18 @@ stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"),
 
 
 # Check OK: clear to go Apollo
-fun_report <- function(data, output = "results.txt", path = "C:/Users/Gael/Desktop/", no.overwrite = TRUE, rownames.kept = FALSE, vector.cat = FALSE, noquote = TRUE, sep = 2){
+fun_report <- function(
+data, 
+output = "results.txt", 
+path = "C:/Users/Gael/Desktop/", 
+no.overwrite = TRUE, 
+rownames.kept = FALSE, 
+vector.cat = FALSE, 
+noquote = TRUE, 
+sep = 2
+){
 # AIM
 # log file function: print a character string or a data object into a same output file
-# REQUIRED PACKAGES
-# utils
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS
 # data: object to print in the output file. If NULL, nothing is done, with no warning
 # output: name of the output file
@@ -7606,6 +7911,10 @@ fun_report <- function(data, output = "results.txt", path = "C:/Users/Gael/Deskt
 # sep: number of separating lines after printed data (must be integer)
 # RETURN
 # nothing
+# REQUIRED PACKAGES
+# utils (included in the R installation packages)
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # fun_report()
 # fun_report(data = 1:3, output = "results.txt", path = "C:/Users/Gael/Desktop", no.overwrite = TRUE, rownames.kept = FALSE, vector.cat = FALSE, noquote = FALSE, sep = 2)
@@ -7701,15 +8010,20 @@ write(sep.final, file= paste0(path, "/", output), append = TRUE) # add a sep
 
 
 # Check OK: clear to go Apollo
-fun_get_message <- function(data, kind = "error", header = TRUE, print.no = FALSE, text = NULL, env = NULL){
+fun_get_message <- function(
+data, 
+kind = "error", 
+header = TRUE, 
+print.no = FALSE, 
+text = NULL, 
+env = NULL
+){
 # AIM
 # evaluate an instruction written between "" and return the first of the error, or warning or standard (non error non warning) messages if ever exist
 # using argument print.no = FALSE, return NULL if no message, which is convenient in some cases
-# WARNING
+# WARNINGS
 # Only the first message is returned
 # Always use the env argument when fun_get_message() is used inside functions
-# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
-# fun_check()
 # ARGUMENTS
 # data: character string to evaluate
 # kind: character string. Either "error" to get error messages, or "warning" to get warning messages, or "message" to get non error and non warning messages
@@ -7719,6 +8033,10 @@ fun_get_message <- function(data, kind = "error", header = TRUE, print.no = FALS
 # env: the name of an existing environment. NULL if not required
 # RETURN
 # the message or NULL if no message and print.no is FALSE
+# REQUIRED PACKAGES
+# none
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_check()
 # EXAMPLES
 # fun_get_message(data = "wilcox.test(c(1,1,3), c(1, 2, 4), paired = TRUE)", kind = "error", print.no = TRUE, text = "IN A")
 # fun_get_message(data = "wilcox.test(c(1,1,3), c(1, 2, 4), paired = TRUE)", kind = "warning", print.no = TRUE, text = "IN A")
@@ -7872,3 +8190,4166 @@ return(output) # do not use cat() because the idea is to reuse the message
 
 
 
+# add the new NA and NULL: remain all (slitherine, cute, anova, comat)
+# complete the fun_check(): slitherine anova, comat
+
+fun_gg_boxplot <- function(
+data1, 
+y, 
+categ, 
+categ.class.order = NULL, 
+categ.color = NULL, 
+box.legend.name = NULL, 
+box.fill = FALSE, 
+box.width = 0.5, 
+box.space = 0.1, 
+box.line.size = 0.75, 
+box.notch = FALSE, 
+box.alpha = 1, 
+box.mean = TRUE, 
+box.whisker.kind = "std", 
+box.whisker.width = 0, 
+dot.color = grey(0.25), 
+dot.categ = NULL, 
+dot.categ.class.order = NULL, 
+dot.legend.name = NULL, 
+dot.tidy = FALSE, 
+dot.tidy.bin.nb = 50, 
+dot.jitter = 0.5, 
+dot.size = 3, 
+dot.alpha = 0.5, 
+dot.border.size = 0.5, 
+dot.border.color = NULL, 
+x.lab = NULL, 
+x.angle = 0, 
+y.lab = NULL, 
+y.lim = NULL, 
+y.log = "no", 
+y.tick.nb = NULL, 
+y.second.tick.nb = 1, 
+y.include.zero = FALSE, 
+y.top.extra.margin = 0.05, 
+y.bottom.extra.margin = 0.05, 
+stat.disp = "top", 
+stat.disp.mean = FALSE, 
+stat.size = 4, 
+stat.dist = 5, 
+stat.angle = 0, 
+vertical = TRUE, 
+text.size = 12, 
+title = "", 
+title.text.size = 8, 
+legend.show = TRUE, 
+legend.width = 0.5, 
+article = TRUE, 
+grid = FALSE, 
+return = FALSE, 
+return.ggplot = FALSE,
+return.gtable = TRUE,
+plot = TRUE, 
+add = NULL, 
+warn.print = FALSE, 
+lib.path = NULL
+){
+# AIM
+# plot ggplot2 boxplots + dots + means
+# for ggplot2 specifications, see: https://ggplot2.tidyverse.org/articles/ggplot2-specs.html
+# WARNINGS
+# Rows containing NA in data1[, c(y, categ)] will be removed before processing, with a warning (see below)
+# Hinges are not computed like in the classical boxplot() function of R. See https://ggplot2.tidyverse.org/reference/geom_boxplot.html
+# To have a single box, please create a factor column with a single class and specify the name of this column in the categ argument. For a single set of grouped boxes, create a factor column with a single class and specify this column in categ argument as first element (i.e., as categ1, knowing that categ2 must also be specified in this situation). See categ argument below
+# The dot.alpha argument can alter the display of the color boxes when using pdf output
+# Size arguments (box.line.size, dot.size, dot.border.size, stat.size, text.size and title.text.size) are in mm. See Hadley comment in https://stackoverflow.com/questions/17311917/ggplot2-the-unit-of-size. See also http://sape.inf.usi.ch/quick-reference/ggplot2/size). Unit object are not accepted, but conversion can be used (e.g., grid::convertUnit(grid::unit(0.2, "inches"), "mm", valueOnly = TRUE))
+# Display seems to be done twice on Windows devices (like a blink). However, no double plots on pdf devices. Thus, the blink remains mysterious
+# ARGUMENTS
+# data1: data frame containing one column of quantitative values (see the y argument below) and one or two columns of categories (see the categ argument below). Duplicated column names are not allowed
+# y: character string of the data1 column name for y-axis (column containing numeric values). Numeric values will be split according to the classes of the column names indicated in the categ argument to generate the boxes and will also be used to plot the dots
+# categ: vector of character strings of the data1 column name for categories (column of characters or factors). Must be either one or two column names. If a single column name (further referred to as categ1), then one box per class of categ1. If two column names (further referred to as categ1 and categ2), then one box per class of categ2, which form a group of boxes in each class of categ1. WARNING: no empty classes allowed. To have a single box, create a factor column with a single class and specify the name of this column in the categ argument (here, no categ2 in categ argument). For a single set of grouped boxes, create a factor column with a single class and specify this column in categ argument as first element (i.e., as categ1), in addition to the already used category (as categ2 in this situation)
+# categ.class.order: list indicating the order of the classes of categ1 and categ2 represented on the boxplot (the first compartment for categ1 and and the second for categ2). If categ.class.order == NULL, classes are represented according to the alphabetical order. Some compartments can be NULL and others not. See the categ argument for categ1 and categ2 description
+# categ.color: vector of color character string for box frames (see the categ argument for categ1 and categ2 description)
+# If categ.color == NULL, default colors of ggplot2, whatever categ1 and categ2
+# If categ.color is non-null and only categ1 in categ argument, categ.color can be either:
+# (1) a single color string. All the boxes will have this color, whatever the number of classes of categ1
+# (2) a vector of string colors, one for each class of categ1. Each color will be associated according to categ.class.order of categ1
+# (3) a vector or factor of string colors, like if it was one of the column of data1 data frame. WARNING: a single color per class of categ1 and a single class of categ1 per color must be respected
+# Integers are also accepted instead of character strings, as long as above rules about length are respected. Integers will be processed by fun_gg_palette() using the maximal integer value among all the integers in categ.color (see fun_gg_palette())
+# If categ.color is non-null and categ1 and categ2 are specified, all the rules described above will apply to categ2 instead of categ1 (colors will be determined for boxes inside a group of boxes)
+# box.legend.name: character string of the legend title. If box.legend.name is NULL, then box.legend.name <- categ1 if only categ1 is present, and box.legend.name <- categ2 if categ1 and categ2 are present in the categ argument. Write "" if no legend required. See the categ argument for categ1 and categ2 description
+# box.fill: logical. Fill the box? If TRUE, the categ.color argument will be used to generate filled boxplots (the box frames being black) as well as filled outlier dots (the dot border being controlled by the dot.border.color argument). If all the dots are plotted (argument dot.color other than NULL), they will be over the boxes. If FALSE, the categ.color argument will be used to color the box frames and the outlier dot borders. If all the dots are plotted, they will be beneath the boxes
+# box.width: single numeric value (from 0 to 1) of width of either boxes or group of boxes
+# When categ argument has a single categ1 element (i.e., separate boxes. See the categ argument for categ1 and categ2 description), then each class of categ1 is represented by a single box. In that case, box.width argument defines each box width, from 0 (no box width) to 1 (max box width), but also the space between boxes (the code uses 1 - box.width for the box spaces). Of note, xmin and xmax of the fun_gg_boxplot() output report the box boundaries (around x-axis unit 1, 2, 3, etc., for each box)
+# When categ argument has a two categ1 and categ2 elements (i.e., grouped boxes), box.width argument defines the width allocated for each set of grouped boxes, from 0 (no group width) to 1 (max group width), but also the space between grouped boxes (the code uses 1 - box.width for the spaces). Of note, xmin and xmax of the fun_gg_boxplot() output report the box boundaries (around x-axis unit 1, 2, 3, etc., for each set of grouped box)
+# box.space: single numeric value (from 0 to 1) indicating the box separation inside grouped boxes, when categ argument has a two categ1 and categ2 elements. 0 means no space and 1 means boxes shrunk to a vertical line. Ignored if categ argument has a single categ1 element
+# box.line.size: single numeric value of line width of boxes and whiskers in mm
+# box.notch: logical. Notched boxplot? It TRUE, display notched boxplot, notches corresponding approximately to the 95% confidence interval of the median (the notch interval is exactly 1.58 x Inter Quartile Range (IQR) / sqrt(n), with n the number of values that made the box). If notch intervals between two boxes do not overlap, it can be interpreted as significant median differences
+# box.alpha: single numeric value (from 0 to 1) of box transparency (full transparent to full opaque, respectively). WARNING: work only for the filling of boxes, not for the frame. See https://github.com/tidyverse/ggplot2/issues/252
+# box.mean: logical. Add mean value? If TRUE, a diamond-shaped dot, with the horizontal diagonal corresponding to the mean value, is displayed over each boxplot
+# box.whisker.kind: range of the whiskers. Either "no" (no whiskers), or "std" (length of each whisker equal to 1.5 x Inter Quartile Range (IQR)), or "max" (length of the whiskers up or down to the most distant dot)
+# box.whisker.width: single numeric value (from 0 to 1) of the whisker width, with 0 meaning no whiskers and 1 meaning a width equal to the box width
+# dot.color: vector of color character string ruling the dot colors and the dot display. See the example section below for easier understanding of the rules described here
+# If NULL, no dots plotted
+# If "same", the dots will have the same colors as the respective boxplots
+# Otherwise, as in the rule (1), (2) or (3) described in the categ.color argument, except that in the possibility (3), the rule "a single color per class of categ and a single class of categ per color", does not have to be respected (for instance, each dot can have a different color). Colors will also depend on the dot.categ argument. If dot.categ is NULL, then colors will be applied to each class of the last column name specified in categ. If dot.categ is non-NULL, colors will be applied to each class of the column name specified in dot.categ. See examples
+# dot.categ: optional single character string of a column name (further referred to as categ3) of the data1 argument. This column of data1 will be used to generate a legend for dots, in addition to the legend for boxes. See the dot.color argument for details about the way the legend is built using the two dot.categ and dot.color arguments. If NULL, no legend created and the colors of dots will depend on dot.color and categ arguments (as explained in the dot.color argument)
+# dot.categ.class.order: optional vector of character strings indicating the order of the classes of categ3 (see the dot.categ argument). If dot.categ is non-NULL and dot.categ.class.order is NULL, classes are displayed in the legend according to the alphabetical order. Ignored if dot.categ is NULL
+# dot.legend.name: optional character string of the legend title for categ3 (see the dot.categ argument). If dot.legend.name == NULL, dot.categ value is used (name of the column in data1). Write "" if no legend required. Ignored if dot.categ is NULL
+# dot.tidy: logical. Nice dot spreading? If TRUE, use the geom_dotplot() function for a nice representation. WARNING: change the true quantitative coordinates of dots (i.e., y-axis values for vertical display) because of binning. Thus, the gain in aestheticism is associated with a loss in precision that can be very important. If FALSE, dots are randomly spread on the qualitative axis, using the dot.jitter argument (see below) keeping the true quantitative coordinates
+# dot.tidy.bin.nb: positive integer indicating the number of bins (i.e., nb of separations) of the y.lim range. Each dot will then be put in one of the bin, with a diameter of the width of the bin. In other words, increase the number of bins to have smaller dots. Not considered if dot.tidy is FALSE
+# dot.jitter: numeric value (from 0 to 1) of random dot horizontal dispersion (for vertical display), with 0 meaning no dispersion and 1 meaning dispersion in the corresponding box width interval. Not considered if dot.tidy is TRUE
+# dot.size: numeric value of dot diameter in mm. Not considered if dot.tidy is TRUE
+# dot.alpha: numeric value (from 0 to 1) of dot transparency (full transparent to full opaque, respectively)
+# dot.border.size: numeric value of border dot width in mm. Write zero for no dot border. If dot.tidy is TRUE, value 0 remove the border and other values leave the border without size control (geom_doplot() feature)
+# dot.border.color: single character color string defining the color of the dot border (same color for all the dots, whatever their categories). If dot.border.color == NULL, the border color will be the same as the dot color. A single integer is also accepted instead of a character string, that will be processed by fun_gg_palette()
+# x.lab: a character string or expression for x-axis legend. If NULL, character string of categ1 (see the categ argument for categ1 and categ2 description)
+# x.angle: integer value of the text angle for the x-axis numbers, using the same rules as in ggplot2. Positive values for counterclockwise rotation: 0 for horizontal, 90 for vertical, 180 for upside down etc. Negative values for clockwise rotation: 0 for horizontal, -90 for vertical, -180 for upside down etc.
+# y.lab: a character string or expression for y-axis legend. If NULL, character string of the y argument
+# y.lim: 2 numeric values indicating the range of the y-axis. Order matters (for inverted axis). If NULL, the range of the x column name of data1 will be used. 
+# y.log: either "no", "log2" (values in the y argument column of the data1 data frame will be log2 transformed and y-axis will be log2 scaled) or "log10" (values in the y argument column of the data1 data frame will be log10 transformed and y-axis will be log10 scaled). WARNING: not possible to have horizontal boxes with a log axis, due to a bug in ggplot2 (see https://github.com/tidyverse/ggplot2/issues/881)
+# y.tick.nb: approximate number of desired values labeling the y-axis (i.e., main ticks, see the n argument of the the cute::fun_scale() function). If NULL and if y.log is "no", then the number of labeling values is set by ggplot2. If NULL and if y.log is "log2" or "log10", then the number of labeling values corresponds to all the exposant integers in the y.lim range (e.g., 10^1, 10^2 and 10^3, meaning 3 main ticks for y.lim = c(9, 1200)). WARNING: if non-NULL and if y.log is "log2" or "log10", labeling can be difficult to read (e.g., ..., 10^2, 10^2.5, 10^3, ...)
+ # y.second.tick.nb: number of desired secondary ticks between main ticks. Ignored if y.log is other than "no" (log scale plotted). Use argument return = TRUE and see $plot$y.second.tick.values to have the values associated to secondary ticks. IF NULL, no secondary ticks
+# y.include.zero: logical. Does y.lim range include 0? Ignored if y.log is "log2" or "log10"
+# y.top.extra.margin: single proportion (between 0 and 1) indicating if extra margins must be added to y.lim. If different from 0, add the range of the axis multiplied by y.top.extra.margin (e.g., abs(y.lim[2] - y.lim[1]) * y.top.extra.margin) to the top of y-axis
+# y.bottom.extra.margin: idem as y.top.extra.margin but to the bottom of y-axis
+# stat.disp: add the median number above the corresponding box. Either NULL (no number shown), "top" (at the top of the plot region) or "above" (above each box)
+# stat.disp.mean: logical. Display mean numbers instead of median numbers? Ignored if stat.disp is NULL
+# stat.size: numeric value of the stat font size in mm. Ignored if stat.disp is NULL
+# stat.dist: numeric value of the stat distance in percentage of the y-axis range (stat.dist = 5 means move the number displayed at 5% of the y-axis range). Ignored if stat.disp is NULL or "top"
+# stat.angle: integer value of the angle of stat, using the same rules as in ggplot2. Positive values for counterclockwise rotation: 0 for horizontal, 90 for vertical, 180 for upside down etc. Negative values for clockwise rotation: 0 for horizontal, -90 for vertical, -180 for upside down etc.
+# vertical: logical. Vertical boxes? WARNING: will be automatically set to TRUE if y.log argument is other than "no". Indeed, not possible to have horizontal boxes with a log axis, due to a bug in ggplot2 (see https://github.com/tidyverse/ggplot2/issues/881)
+# text.size: numeric value of the font size of the (1) axis numbers, (2) axis labels and (3) texts in the graphic legend (in mm)
+# title: character string of the graph title
+# title.text.size: numeric value of the title font size in mm
+# legend.show: logical. Show legend? Not considered if categ argument is NULL, because this already generate no legend, excepted if legend.width argument is non-NULL. In that specific case (categ is NULL, legend.show is TRUE and legend.width is non-NULL), an empty legend space is created. This can be useful when desiring graphs of exactly the same width, whatever they have legends or not
+# legend.width: single proportion (between 0 and 1) indicating the relative width of the legend sector (on the right of the plot) relative to the width of the plot. Value 1 means that the window device width is split in 2, half for the plot and half for the legend. Value 0 means no room for the legend, which will overlay the plot region. Write NULL to inactivate the legend sector. In such case, ggplot2 will manage the room required for the legend display, meaning that the width of the plotting region can vary between graphs, depending on the text in the legend
+# article: logical. If TRUE, use an article theme (article like). If FALSE, use a classic related ggplot theme. Use the add argument (e.g., add = "+ggplot2::theme_classic()" for the exact classic ggplot theme
+# grid: logical. Draw lines in the background to better read the box values? Not considered if article == FALSE (grid systematically present)
+# return: logical. Return the graph parameters?
+# return.ggplot: logical. Return the ggplot object in the output list? Ignored if return argument is FALSE. WARNING: always assign the fun_gg_boxplot() function (e.g., a <- fun_gg_boxplot()) if return.ggplot argument is TRUE, otherwise, double plotting is performed. See $ggplot in the RETURN section below for more details
+# return.gtable: logical. Return the ggplot object as gtable of grobs in the output list? Ignored if plot argument is FALSE. Indeed, the graph must be plotted to get the grobs dispositions. See $gtable in the RETURN section below for more details
+# plot: logical. Plot the graphic? If FALSE and return argument is TRUE, graphical parameters and associated warnings are provided without plotting
+# add: character string allowing to add more ggplot2 features (dots, lines, themes, facet, etc.). Ignored if NULL
+# WARNING: (1) the string must start with "+", (2) the string must finish with ")" and (3) each function must be preceded by "ggplot2::". Example: "+ ggplot2::coord_flip() + ggplot2::theme_bw()"
+# If the character string contains the "ggplot2::theme" string, then the article argument of fun_gg_boxplot() (see above) is ignored with a warning
+# Handle the add argument with caution since added functions can create conflicts with the preexisting internal ggplot2 functions
+# WARNING: the call of objects inside the quotes of add can lead to an error if the name of these objects are some of the fun_gg_scatter() arguments. Indeed, the function will use the internal argument instead of the global environment object. Example article <- "a" in the working environment and add = '+ ggplot2::ggtitle(article)'. The risk here is to have TRUE as title. To solve this, use add = '+ ggplot2::ggtitle(get("article", envir = .GlobalEnv))'
+# warn.print: logical. Print warnings at the end of the execution? ? If FALSE, warning messages are never printed, but can still be recovered in the returned list. Some of the warning messages (those delivered by the internal ggplot2 functions) are not apparent when using the argument plot = FALSE
+# lib.path: character string indicating the absolute path of the required packages (see below). if NULL, the function will use the R library default folders
+# REQUIRED PACKAGES
+# ggplot2
+# gridExtra
+# scales
+# REQUIRED FUNCTIONS FROM THE cute PACKAGE
+# fun_check()
+# fun_comp_1d()
+# fun_comp_2d()
+# fun_gg_just()
+# fun_gg_palette()
+# fun_inter_ticks()
+# fun_name_change()
+# fun_pack()
+# fun_round()
+# fun_scale()
+# RETURN
+# a boxplot if plot argument is TRUE
+# a list of the graph info if return argument is TRUE:
+# $data: the initial data with graphic information added
+# $stat: the graphic statistics (mostly equivalent to ggplot_build()$data[[2]])
+# $removed.row.nb: which rows have been removed due to NA/Inf detection in y and categ columns (NULL if no row removed)
+# $removed.rows: removed rows (NULL if no row removed)
+# $plot: the graphic box and dot coordinates
+# $dots: dot coordinates
+# $main.box: coordinates of boxes
+# $median: median coordinates
+# $sup.whisker: coordinates of top whiskers (y for base and y.end for extremities)
+# $inf.whisker: coordinates of bottom whiskers (y for base and y.end for extremities)
+# $sup.whisker.edge: coordinates of top whisker edges (x and xend)
+# $inf.whisker.edge: coordinates of bottom whisker edges(x and xend)
+# $mean: diamond mean coordinates (only if box.mean argument is TRUE)
+# $stat.display: coordinates of stat numbers (only if stat.disp argument is not NULL)
+# y.second.tick.positions: coordinates of secondary ticks (only if y.second.tick.nb argument is non-NULL or if y.log argument is different from "no")
+# y.second.tick.values: values of secondary ticks. NULL except if y.second.tick.nb argument is non-NULL or if y.log argument is different from "no")
+# $panel: the variable names used for the panels (NULL if no panels). WARNING: NA can be present according to ggplot2 upgrade to v3.3.0
+# $axes: the x-axis and y-axis info
+# $warn: the warning messages. Use cat() for proper display. NULL if no warning. WARNING: warning messages delivered by the internal ggplot2 functions are not apparent when using the argument plot = FALSE
+# $ggplot: ggplot object that can be used for reprint (use print(...$ggplot) or update (use ...$ggplot + ggplot2::...). NULL if return.ggplot argument is FALSE. Of note, a non-NULL $ggplot in the output list is sometimes annoying as the manipulation of this list prints the plot
+# $gtable: gtable object that can be used for reprint (use gridExtra::grid.arrange(...$ggplot) or with additionnal grobs (see the grob decomposition in the examples). NULL if return.ggplot argument is FALSE. Contrary to $ggplot, a non-NULL $gtable in the output list is not annoying as the manipulation of this list does not print the plot
+# EXAMPLE
+# DEBUGGING
+# set.seed(1) ; obs1 <- data.frame(Time = c(rnorm(10), rnorm(10) + 2), Categ1 = rep(c("G", "H"), each = 10), stringsAsFactors = TRUE) ; set.seed(NULL) ; obs1$Time[1:10] <- NA ; data1 = obs1 ; y = "Time" ; categ = c("Categ1") ; categ.class.order = NULL ; box.legend.name = NULL ; categ.color = c("green") ; box.fill = FALSE ; box.width = 0.5 ; box.space = 0.1 ; box.notch = FALSE ; box.line.size = 0.5 ; box.alpha = 0.5 ; box.mean = TRUE ; box.whisker.kind = "std" ; box.whisker.width = 0.5 ; dot.color = "black" ; dot.categ = "Categ1"; dot.categ.class.order = c("G", "H") ; dot.legend.name = NULL ; dot.tidy = TRUE ; dot.tidy.bin.nb = 50 ; dot.jitter = 0.25 ; dot.size = 3 ; dot.alpha = 0.5 ; dot.border.size = 0.5 ; dot.border.color = NULL ; y.lim = NULL ; y.log = "no" ; y.tick.nb = NULL ; y.second.tick.nb = NULL ; y.include.zero = FALSE ; y.top.extra.margin = 0.05 ; y.bottom.extra.margin = 0.05 ; stat.disp = NULL ; stat.disp.mean = FALSE ; stat.size = 4 ; stat.dist = 2 ; stat.angle = 0 ; x.lab = NULL ; y.lab = NULL ; vertical = TRUE ; text.size = 12 ; title = "" ; title.text.size = 8 ; legend.show = TRUE ; legend.width = 0.5 ; x.angle = 0 ; article = FALSE ; grid = FALSE ; return = TRUE ; return.ggplot = FALSE ; return.gtable = FALSE ; plot = TRUE ; add = NULL ; warn.print = FALSE ; lib.path = NULL
+# set.seed(1) ; obs1 <- data.frame(Time = c(rnorm(10), rnorm(10) + 2), Categ1 = rep(c("G", "H"), each = 10), Categ2 = rep(c("A", "B"), time = 10), Categ3 = rep(c("I", "J"), time = 10), stringsAsFactors = TRUE) ; set.seed(NULL) ; obs1$Time[1:10] <- NA ; data1 = obs1 ; y = "Time" ; categ = c("Categ1", "Categ2") ; categ.class.order = list(c("G", "H"), c("A", "B")); box.legend.name = NULL ; categ.color = c("green", "blue") ; box.fill = FALSE ; box.width = 0.5 ; box.space = 0.1 ; box.notch = FALSE ; box.line.size = 0.5 ; box.alpha = 0.5 ; box.mean = TRUE ; box.whisker.kind = "std" ; box.whisker.width = 0.5 ; dot.color = "black" ; dot.categ = "Categ1" ; dot.categ.class.order = NULL ; dot.legend.name = NULL ; dot.tidy = TRUE ; dot.tidy.bin.nb = 30 ; dot.jitter = 0.25 ; dot.size = 3 ; dot.alpha = 0.5 ; dot.border.size = 0.5 ; dot.border.color = NULL ; y.lim = NULL ; y.log = "no" ; y.tick.nb = NULL ; y.second.tick.nb = NULL ; y.include.zero = FALSE ; y.top.extra.margin = 0.05 ; y.bottom.extra.margin = 0.05 ; stat.disp = NULL ; stat.disp.mean = FALSE ; stat.size = 4 ; stat.dist = 2 ; stat.angle = 0 ; x.lab = NULL ; y.lab = NULL ; vertical = TRUE ; text.size = 12 ; title = "" ; title.text.size = 8 ; legend.show = TRUE ; legend.width = 0.5 ; x.angle = 0 ; article = FALSE ; grid = FALSE ; return = FALSE ; return.ggplot = FALSE ; return.gtable = FALSE ; plot = TRUE ; add = NULL ; warn.print = FALSE ; lib.path = NULL
+# set.seed(1) ; obs1 <- data.frame(Time = c(rnorm(10), rnorm(10) + 2), Categ1 = rep(c("G", "H"), each = 10), Categ2 = rep(c("A", "B"), time = 10), stringsAsFactors = TRUE) ; set.seed(NULL) ; data1 = obs1 ; y = "Time" ; categ = c("Categ1") ; categ.class.order = list(c("H", "G")); box.legend.name = NULL ; categ.color = c("blue") ; box.fill = FALSE ; box.width = 0.5 ; box.space = 0.1 ; box.notch = TRUE ; box.line.size = 1 ; box.alpha = 1 ; box.mean = FALSE ; box.whisker.kind = "max" ; box.whisker.width = 0 ; dot.color = "black" ; dot.categ = "Categ1" ; dot.categ.class.order = NULL ; dot.legend.name = NULL ; dot.tidy = TRUE ; dot.tidy.bin.nb = 30 ; dot.jitter = 0.25 ; dot.size = 3 ; dot.alpha = 0.5 ; dot.border.size = 0.5 ; dot.border.color = NULL ; y.lim = NULL ; y.log = "log10" ; y.tick.nb = NULL ; y.second.tick.nb = NULL ; y.include.zero = FALSE ; y.top.extra.margin = 0.05 ; y.bottom.extra.margin = 0.05 ; stat.disp = "above" ; stat.disp.mean = FALSE ; stat.size = 4 ; stat.dist = 2 ; stat.angle = 0 ; x.lab = NULL ; y.lab = NULL ; vertical = TRUE ; text.size = 12 ; title = "" ; title.text.size = 8 ; legend.width = 0.5 ; legend.show = TRUE ; x.angle = 0 ; article = FALSE ; grid = FALSE ; return = FALSE ; return.ggplot = FALSE ; return.gtable = FALSE ; plot = TRUE ; add = NULL ; warn.print = FALSE ; lib.path = NULL
+# function name
+function.name <- paste0(as.list(match.call(expand.dots = FALSE))[[1]], "()")
+arg.names <- names(formals(fun = sys.function(sys.parent(n = 2)))) # names of all the arguments
+arg.user.setting <- as.list(match.call(expand.dots = FALSE))[-1] # list of the argument settings (excluding default values not provided by the user)
+# end function name
+# required function checking
+req.function <- c(
+"fun_comp_2d", 
+"fun_gg_just", 
+"fun_gg_palette", 
+"fun_name_change", 
+"fun_pack", 
+"fun_check", 
+"fun_round", 
+"fun_scale",
+"fun_inter_ticks"
+)
+for(i1 in req.function){
+if(length(find(i1, mode = "function")) == 0){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nREQUIRED ", i1, "() FUNCTION IS MISSING IN THE R ENVIRONMENT")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}
+# end required function checking
+# reserved words to avoid bugs (names of dataframe columns used in this function)
+reserved.words <- c("categ.check", "categ.color", "dot.color", "dot.categ", "dot.max", "dot.min", "group", "PANEL", "group.check", "MEAN", "tempo.categ1", "tempo.categ2", "text.max.pos", "text.min.pos", "x", "x.y", "y", "y.check", "y_from.dot.max", "ymax", "tidy_group")
+# end reserved words to avoid bugs (used in this function)
+# argument primary checking
+# arg with no default values
+if(any(missing(data1) | missing(y) | missing(categ))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ARGUMENTS angle AND pos HAVE NO DEFAULT VALUE AND REQUIRE ONE")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# end arg with no default values
+arg.check <- NULL #
+text.check <- NULL #
+checked.arg.names <- NULL # for function debbuging: used by r_debugging_tools
+ee <- expression(arg.check <- c(arg.check, tempo$problem) , text.check <- c(text.check, tempo$text) , checked.arg.names <- c(checked.arg.names, tempo$fun.name))
+tempo <- fun_check(data = data1, class = "data.frame", na.contain = TRUE, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = y, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = categ, class = "vector", mode = "character", fun.name = function.name) ; eval(ee)
+if( ! is.null(categ.class.order)){
+tempo <- fun_check(data = categ.class.order, class = "list", fun.name = function.name) ; eval(ee)
+}
+if( ! is.null(box.legend.name)){
+tempo <- fun_check(data = box.legend.name, class = "vector", mode = "character", fun.name = function.name) ; eval(ee)
+}
+if( ! is.null(categ.color)){
+tempo1 <- fun_check(data = categ.color, class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name)
+tempo2 <- fun_check(data = categ.color, class = "factor", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.check.color <- fun_check(data = categ.color, class = "integer", double.as.integer.allowed = TRUE, na.contain = TRUE, fun.name = function.name)$problem
+if(tempo.check.color == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": categ.color ARGUMENT MUST BE A FACTOR OR CHARACTER VECTOR OR INTEGER VECTOR") # integer possible because dealt above
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+}
+tempo <- fun_check(data = box.fill, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = box.width, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = box.space, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = box.line.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = box.notch, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = box.alpha, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = box.mean, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = box.whisker.kind, options = c("no", "std", "max"), length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = box.whisker.width, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+if( ! is.null(dot.color)){
+tempo1 <- fun_check(data = dot.color, class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name)
+tempo2 <- fun_check(data = dot.color, class = "factor", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.check.color <- fun_check(data = dot.color, class = "integer", double.as.integer.allowed = TRUE, na.contain = TRUE, fun.name = function.name)$problem
+if(tempo.check.color == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.color MUST BE A FACTOR OR CHARACTER VECTOR OR INTEGER VECTOR") # integer possible because dealt above
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+}
+if( ! is.null(dot.categ)){
+tempo <- fun_check(data = dot.categ, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee)
+}
+if( ! is.null(dot.categ.class.order)){
+tempo <- fun_check(data = dot.categ.class.order, class = "vector", mode = "character", fun.name = function.name) ; eval(ee)
+}
+if( ! is.null(dot.legend.name)){
+tempo <- fun_check(data = dot.legend.name, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee)
+}
+tempo <- fun_check(data = dot.tidy, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = dot.tidy.bin.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, neg.values = FALSE, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = dot.jitter, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = dot.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = dot.alpha, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = dot.border.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee)
+if( ! is.null(dot.border.color)){
+tempo1 <- fun_check(data = dot.border.color, class = "vector", mode = "character", length = 1, fun.name = function.name)
+tempo2 <- fun_check(data = dot.border.color, class = "vector", typeof = "integer", double.as.integer.allowed = TRUE, length = 1, fun.name = function.name)
+if((tempo1$problem == TRUE & tempo2$problem == TRUE) | (tempo1$problem == FALSE & tempo2$problem == TRUE & ! (all(dot.border.color %in% colors() | grepl(pattern = "^#", dot.border.color))))){ # check that all strings of low.color start by #
+tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.border.color ARGUMENT MUST BE (1) A HEXADECIMAL COLOR STRING STARTING BY #, OR (2) A COLOR NAME GIVEN BY colors(), OR (3) AN INTEGER VALUE\nHERE IT IS: ", paste(unique(dot.border.color), collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}
+if( ! is.null(x.lab)){
+if(all(class(x.lab) %in% "expression")){ # to deal with math symbols
+tempo <- fun_check(data = x.lab, class = "expression", length = 1, fun.name = function.name) ; eval(ee)
+}else{
+tempo <- fun_check(data = x.lab, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee)
+}
+}
+tempo <- fun_check(data = x.angle, class = "vector", typeof = "integer", double.as.integer.allowed = TRUE, length = 1, neg.values = TRUE, fun.name = function.name) ; eval(ee)
+if( ! is.null(y.lab)){
+if(all(class(y.lab) %in% "expression")){ # to deal with math symbols
+tempo <- fun_check(data = y.lab, class = "expression", length = 1, fun.name = function.name) ; eval(ee)
+}else{
+tempo <- fun_check(data = y.lab, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee)
+}
+}
+if( ! is.null(y.lim)){
+tempo <- fun_check(data = y.lim, class = "vector", mode = "numeric", length = 2, fun.name = function.name) ; eval(ee)
+if(tempo$problem == FALSE & any(y.lim %in% c(Inf, -Inf))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": y.lim ARGUMENT CANNOT CONTAIN -Inf OR Inf VALUES")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+tempo <- fun_check(data = y.log, options = c("no", "log2", "log10"), length = 1, fun.name = function.name) ; eval(ee)
+if( ! is.null(y.tick.nb)){
+tempo <- fun_check(data = y.tick.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee)
+if(tempo$problem == FALSE & y.tick.nb < 0){
+tempo.cat <- paste0("ERROR IN ", function.name, ": y.tick.nb ARGUMENT MUST BE A NON NULL POSITIVE INTEGER")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+if( ! is.null(y.second.tick.nb)){
+tempo <- fun_check(data = y.second.tick.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee)
+if(tempo$problem == FALSE & y.second.tick.nb <= 0){
+tempo.cat <- paste0("ERROR IN ", function.name, ": y.second.tick.nb ARGUMENT MUST BE A NON NULL POSITIVE INTEGER")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+tempo <- fun_check(data = y.include.zero, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = y.top.extra.margin, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = y.bottom.extra.margin, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+if( ! is.null(stat.disp)){
+tempo <- fun_check(data = stat.disp, options = c("top", "above"), length = 1, fun.name = function.name) ; eval(ee)
+}
+tempo <- fun_check(data = stat.disp.mean, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = stat.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = stat.dist, class = "vector", mode = "numeric", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = stat.angle, class = "vector", typeof = "integer", double.as.integer.allowed = TRUE, length = 1, neg.values = TRUE, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = vertical, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = text.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = title, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = title.text.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = legend.show, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+if( ! is.null(legend.width)){
+tempo <- fun_check(data = legend.width, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+}
+tempo <- fun_check(data = article, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = grid, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = return, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = return.ggplot, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = return.gtable, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = plot, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+if( ! is.null(add)){
+tempo <- fun_check(data = add, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee)
+}
+tempo <- fun_check(data = warn.print, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+if( ! is.null(lib.path)){
+tempo <- fun_check(data = lib.path, class = "vector", mode = "character", fun.name = function.name) ; eval(ee)
+if(tempo$problem == FALSE){
+if( ! all(dir.exists(lib.path))){ # separation to avoid the problem of tempo$problem == FALSE and lib.path == NA
+tempo.cat <- paste0("ERROR IN ", function.name, ": DIRECTORY PATH INDICATED IN THE lib.path ARGUMENT DOES NOT EXISTS:\n", paste(lib.path, collapse = "\n"))
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+}
+if(any(arg.check) == TRUE){
+stop(paste0("\n\n================\n\n", paste(text.check[arg.check], collapse = "\n"), "\n\n================\n\n"), call. = FALSE) # == in stop() to be able to add several messages between == #
+}
+# source("C:/Users/Gael/Documents/Git_versions_to_use/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_check_dev)) # activate this line and use the function (with no arguments left as NULL) to check arguments status and if they have been checked using fun_check()
+# end argument primary checking
+# second round of checking and data preparation
+# dealing with NA arguments
+tempo.arg <- names(arg.user.setting) # values provided by the user
+tempo.log <- sapply(lapply(lapply(tempo.arg, FUN = get, env = sys.nframe(), inherit = FALSE), FUN = is.na), FUN = any) & lapply(lapply(tempo.arg, FUN = get, env = sys.nframe(), inherit = FALSE), FUN = length) == 1 # no argument provided by the user can be just NA
+if(any(tempo.log) == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ":\n", ifelse(sum(tempo.log, na.rm = TRUE) > 1, "THESE ARGUMENTS\n", "THIS ARGUMENT\n"), paste0(tempo.arg[tempo.log], collapse = "\n"),"\nCANNOT JUST BE NA")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# end dealing with NA arguments
+# dealing with NULL arguments
+tempo.arg <-c(
+"data1", 
+"y", 
+"categ", 
+"box.fill", 
+"box.width", 
+"box.space", 
+"box.line.size", 
+"box.notch", 
+"box.alpha", 
+"box.mean", 
+"box.whisker.kind", 
+"box.whisker.width", 
+# "dot.color", # inactivated because can be null
+"dot.tidy", 
+"dot.tidy.bin.nb", 
+"dot.jitter", 
+"dot.size", 
+"dot.alpha", 
+"dot.border.size", 
+"x.angle", 
+"y.log", 
+"y.include.zero", 
+"y.top.extra.margin", 
+"y.bottom.extra.margin", 
+"stat.disp.mean", 
+"stat.size", 
+"stat.dist", 
+"stat.angle", 
+"vertical", 
+"text.size", 
+"title", 
+"title.text.size", 
+"legend.show", 
+# "legend.width", # inactivated because can be null
+"article", 
+"grid", 
+"return", 
+"return.ggplot", 
+"return.gtable", 
+"plot", 
+"warn.print"
+)
+tempo.log <- sapply(lapply(tempo.arg, FUN = get, env = sys.nframe(), inherit = FALSE), FUN = is.null)
+if(any(tempo.log) == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ":\n", ifelse(sum(tempo.log, na.rm = TRUE) > 1, "THESE ARGUMENTS\n", "THIS ARGUMENT\n"), paste0(tempo.arg[tempo.log], collapse = "\n"),"\nCANNOT BE NULL")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# end dealing with NULL arguments
+ini.warning.length <- options()$warning.length
+options(warning.length = 8170)
+on.exit(exp = options(warning.length = ini.warning.length))
+warn <- NULL
+warn.count <- 0
+if(any(duplicated(names(data1)))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nDUPLICATED COLUMN NAMES OF data1 ARGUMENT NOT ALLOWED:\n", paste(names(data1)[duplicated(names(data1))], collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+if( ! (y %in% names(data1))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ny ARGUMENT MUST BE A COLUMN NAME OF data1")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else{
+tempo <- fun_check(data = data1[, y], data.name = "y COLUMN OF data1", class = "vector", mode = "numeric", na.contain = TRUE, fun.name = function.name)
+if(tempo$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ny ARGUMENT MUST BE NUMERIC COLUMN IN data1")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}
+if(length(categ) > 2){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ncateg ARGUMENT CANNOT HAVE MORE THAN 2 COLUMN NAMES OF data1")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else if( ! all(categ %in% names(data1))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ncateg ARGUMENT MUST BE COLUMN NAMES OF data1. HERE IT IS:\n", paste(categ, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# reserved word checking
+if(any(names(data1) %in% reserved.words)){
+if(any(duplicated(names(data1)))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nDUPLICATED COLUMN NAMES OF data1 ARGUMENT NOT ALLOWED:\n", paste(names(data1)[duplicated(names(data1))], collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+if( ! is.null(dot.categ)){
+if(dot.categ %in% categ){
+reserved.words <- c(reserved.words, paste0(dot.categ, "_DOT")) # paste0(dot.categ, "_DOT") is added to the reserved words because in such situation, a new column will be added to data1 that is named paste0(dot.categ, "_DOT")
+}
+}
+tempo.output <- fun_name_change(names(data1), reserved.words)
+for(i2 in 1:length(tempo.output$ini)){ # a loop to be sure to take the good ones
+names(data1)[names(data1) == tempo.output$ini[i2]] <- tempo.output$post[i2]
+if(any(y == tempo.output$ini[i2])){
+y[y == tempo.output$ini[i2]] <- tempo.output$post[i2]
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN y ARGUMENT (COLUMN NAMES OF data1 ARGUMENT),\n", tempo.output$ini[i2], " HAS BEEN REPLACED BY ", tempo.output$post[i2], "\nBECAUSE RISK OF BUG AS SOME NAMES IN y ARGUMENT ARE RESERVED WORD USED BY THE ", function.name, " FUNCTION")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# WARNING: names of y argument potentially replaced
+if(any(categ == tempo.output$ini[i2])){
+categ[categ == tempo.output$ini[i2]] <- tempo.output$post[i2]
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN categ ARGUMENT (COLUMN NAMES OF data1 ARGUMENT),\n", tempo.output$ini[i2], " HAS BEEN REPLACED BY ", tempo.output$post[i2], "\nBECAUSE RISK OF BUG AS SOME NAMES IN categ ARGUMENT ARE RESERVED WORD USED BY THE ", function.name, " FUNCTION")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# WARNING: names of categ argument potentially replaced
+if( ! is.null(dot.categ)){
+if(any(dot.categ == tempo.output$ini[i2])){
+dot.categ[dot.categ == tempo.output$ini[i2]] <- tempo.output$post[i2]
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN dot.categ ARGUMENT (COLUMN NAMES OF data1 ARGUMENT),\n", tempo.output$ini[i2], " HAS BEEN REPLACED BY ", tempo.output$post[i2], "\nBECAUSE RISK OF BUG AS SOME NAMES IN dot.categ ARGUMENT ARE RESERVED WORD USED BY THE ", function.name, " FUNCTION")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+# WARNING: names of dot.categ argument potentially replaced
+}
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") REGARDING COLUMN NAMES REPLACEMENT, THE NAMES\n", paste(tempo.output$ini, collapse = " "), "\nHAVE BEEN REPLACED BY\n", paste(tempo.output$post, collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+if( ! (is.null(add) | is.null(tempo.output$ini))){
+if(grepl(x = add, pattern = paste(tempo.output$ini, collapse = "|"))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nDETECTION OF COLUMN NAMES OF data1 IN THE add ARGUMENT STRING, THAT CORRESPOND TO RESERVED STRINGS FOR ", function.name, "\nCOLUMN NAMES HAVE TO BE CHANGED\nTHE PROBLEMATIC COLUMN NAMES ARE SOME OF THESE NAMES:\n", paste(tempo.output$ini, collapse = " "), "\nIN THE DATA FRAME OF data1 AND IN THE STRING OF add ARGUMENT, TRY TO REPLACE NAMES BY:\n", paste(tempo.output$post, collapse = " "), "\n\nFOR INFORMATION, THE RESERVED WORDS ARE:\n", paste(reserved.words, collapse = "\n"))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}
+}
+if( ! (is.null(add))){
+if(any(sapply(X = arg.names, FUN = grepl, x = add))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NAMES OF ", function.name, " ARGUMENTS DETECTED IN THE add STRING:\n", paste(arg.names[sapply(X = arg.names, FUN = grepl, x = add)], collapse = "\n"), "\nRISK OF WRONG OBJECT USAGE INSIDE ", function.name)
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+# end reserved word checking
+# verif of add
+if( ! is.null(add)){
+if( ! grepl(pattern = "^\\s*\\+", add)){ # check that the add string start by +
+tempo.cat <- paste0("ERROR IN ", function.name, ": add ARGUMENT MUST START WITH \"+\": ", paste(unique(add), collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else if( ! grepl(pattern = "(ggplot2|lemon)\\s*::", add)){ #
+tempo.cat <- paste0("ERROR IN ", function.name, ": FOR EASIER FUNCTION DETECTION, add ARGUMENT MUST CONTAIN \"ggplot2::\" OR \"lemon::\" IN FRONT OF EACH GGPLOT2 FUNCTION: ", paste(unique(add), collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else if( ! grepl(pattern = ")\\s*$", add)){ # check that the add string finished by )
+tempo.cat <- paste0("ERROR IN ", function.name, ": add ARGUMENT MUST FINISH BY \")\": ", paste(unique(add), collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}
+# end verif of add
+# management of add containing facet
+facet.categ <- NULL
+if( ! is.null(add)){
+facet.check <- TRUE
+tempo <- unlist(strsplit(x = add, split = "\\s*\\+\\s*(ggplot2|lemon)\\s*::\\s*")) #
+tempo <- sub(x = tempo, pattern = "^facet_wrap", replacement = "ggplot2::facet_wrap")
+tempo <- sub(x = tempo, pattern = "^facet_grid", replacement = "ggplot2::facet_grid")
+tempo <- sub(x = tempo, pattern = "^facet_rep", replacement = "lemon::facet_rep")
+if(any(grepl(x = tempo, pattern = "ggplot2::facet_wrap|lemon::facet_rep_wrap"))){
+tempo1 <- suppressWarnings(eval(parse(text = tempo[grepl(x = tempo, pattern = "ggplot2::facet_wrap|lemon::facet_rep_wrap")])))
+facet.categ <- names(tempo1$params$facets)
+tempo.text <- "facet_wrap OR facet_rep_wrap"
+facet.check <- FALSE
+}else if(grepl(x = add, pattern = "ggplot2::facet_grid|lemon::facet_rep_grid")){
+tempo1 <- suppressWarnings(eval(parse(text = tempo[grepl(x = tempo, pattern = "ggplot2::facet_grid|lemon::facet_rep_grid")])))
+facet.categ <- c(names(tempo1$params$rows), names(tempo1$params$cols))
+tempo.text <- "facet_grid OR facet_rep_grid"
+facet.check <- FALSE
+}
+if(facet.check == FALSE & ! all(facet.categ %in% names(data1))){ # WARNING: all(facet.categ %in% names(data1)) is TRUE when facet.categ is NULL
+tempo.cat <- paste0("ERROR IN ", function.name, "\nDETECTION OF \"", tempo.text, "\" STRING IN THE add ARGUMENT BUT PROBLEM OF VARIABLE DETECTION (COLUMN NAMES OF data1)\nTHE DETECTED VARIABLES ARE:\n", paste(facet.categ, collapse = " "), "\nTHE data1 COLUMN NAMES ARE:\n", paste(names(data1), collapse = " "), "\nPLEASE REWRITE THE add STRING AND RERUN")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}
+# end management of add containing facet
+# conversion of categ columns in data1 into factors
+for(i1 in 1:length(categ)){
+tempo1 <- fun_check(data = data1[, categ[i1]], data.name = paste0("categ NUMBER ", i1, " OF data1"), class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name)
+tempo2 <- fun_check(data = data1[, categ[i1]], data.name = paste0("categ NUMBER ", i1, " OF data1"), class = "factor", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, "\n", paste0("categ NUMBER ", i1, " OF data1"), " MUST BE A FACTOR OR CHARACTER VECTOR")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else if(tempo1$problem == FALSE){ # character vector
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN categ NUMBER ", i1, " IN data1, THE CHARACTER COLUMN HAS BEEN CONVERTED TO FACTOR, WITH LEVELS ACCORDING TO THE ALPHABETICAL ORDER")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+data1[, categ[i1]] <- factor(data1[, categ[i1]]) # if already a factor, change nothing, if characters, levels according to alphabetical order
+}
+# OK: all the categ columns of data1 are factors from here
+# end conversion of categ columns in data1 into factors
+
+
+
+# management of log scale and Inf removal
+if(any(( ! is.finite(data1[, y])) & ( ! is.na(data1[, y])))){ # is.finite also detects NA: ( ! is.finite(data1[, y])) & ( ! is.na(data1[, y])) detects only Inf
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") PRESENCE OF -Inf OR Inf VALUES IN THE ", y, " COLUMN OF THE data1 ARGUMENT AND CORRESPONDING ROWS REMOVED (SEE $removed.row.nb AND $removed.rows)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+data1.ini <- data1 # strictly identical to data1 except that in data1 y is log converted if and only if y.log != "no"
+if(y.log != "no"){
+# just check for Inf and NaN created by log conversion but data1 not modified yet because I need the non log stat values as output
+tempo1 <- ! is.finite(data1[, y]) # where are initial NA and Inf
+data1[, y] <- suppressWarnings(get(y.log)(data1[, y]))# no env = sys.nframe(), inherit = FALSE in get() because look for function in the classical scope
+if(any( ! (tempo1 | is.finite(data1[, y])))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") LOG CONVERSION INTRODUCED -Inf OR Inf OR NaN VALUES IN THE ", y, " COLUMN OF THE data1 ARGUMENT AND CORRESPONDING ROWS REMOVED (SEE $removed.row.nb AND $removed.rows)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+# Inf removal
+if(any(( ! is.finite(data1[, y])) & ( ! is.na(data1[, y])))){ # is.finite also detects NA: ( ! is.finite(data1[, y])) & ( ! is.na(data1[, y])) detects only Inf
+removed.row.nb <- which(( ! is.finite(data1[, y])) & ( ! is.na(data1[, y])))
+removed.rows <- data1.ini[removed.row.nb, ] # here data1.ini used to have the y = O rows that will be removed because of Inf creation after log transformation
+data1 <- data1[-removed.row.nb, ] #
+data1.ini <- data1.ini[-removed.row.nb, ] #
+}else{
+removed.row.nb <- NULL
+removed.rows <- data.frame(stringsAsFactors = FALSE)
+}
+# From here, data1 and data.ini have no more Inf
+# end Inf removal
+if(y.log != "no" & ! is.null(y.lim)){
+if(any(y.lim <= 0)){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ny.lim ARGUMENT CANNOT HAVE ZERO OR NEGATIVE VALUES WITH THE y.log ARGUMENT SET TO ", y.log, ":\n", paste(y.lim, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else if(any( ! is.finite(if(y.log == "log10"){log10(y.lim)}else{log2(y.lim)}))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ny.lim ARGUMENT RETURNS INF/NA WITH THE y.log ARGUMENT SET TO ", y.log, "\nAS SCALE COMPUTATION IS ", ifelse(y.log == "log10", "log10", "log2"), ":\n", paste(if(y.log == "log10"){log10(y.lim)}else{log2(y.lim)}, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}
+if(y.log != "no" & y.include.zero == TRUE){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") y.log ARGUMENT SET TO ", y.log, " AND y.include.zero ARGUMENT SET TO TRUE -> y.include.zero ARGUMENT RESET TO FALSE BECAUSE 0 VALUE CANNOT BE REPRESENTED IN LOG SCALE")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+y.include.zero <- FALSE
+}
+if(y.log != "no" & vertical == FALSE){
+vertical <- TRUE
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") BECAUSE OF A BUG IN ggplot2, CANNOT FLIP BOXES HORIZONTALLY WITH A Y.LOG SCALE -> vertical ARGUMENT RESET TO TRUE")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# end management of log scale and Inf removal
+# na detection and removal (done now to be sure of the correct length of categ)
+column.check <- unique(c(y, categ, if( ! is.null(dot.color) & ! is.null(dot.categ)){dot.categ}, if( ! is.null(facet.categ)){facet.categ})) # dot.categ because can be a 3rd column of data1, categ.color and dot.color will be tested later
+if(any(is.na(data1[, column.check]))){ # data1 used here instead of data1.ini in case of new NaN created by log conversion (neg values)
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NA DETECTED IN COLUMNS OF data1 AND CORRESPONDING ROWS REMOVED (SEE $removed.row.nb AND $removed.rows)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+for(i2 in 1:length(column.check)){
+if(any(is.na(data1[, column.check[i2]]))){
+tempo.warn <- paste0("NA REMOVAL DUE TO COLUMN ", column.check[i2], " OF data1")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n", tempo.warn)))
+}
+}
+tempo <- unique(unlist(lapply(lapply(c(data1[column.check]), FUN = is.na), FUN = which)))
+removed.row.nb <- c(removed.row.nb, tempo) # removed.row.nb created to remove Inf
+removed.rows <- rbind(removed.rows, data1.ini[tempo, ], stringsAsFactors = FALSE) # here data1.ini used to have the non NA rows that will be removed because of NAN creation after log transformation (neg values for instance)
+column.check <- column.check[ ! column.check == y] # remove y to keep quali columns
+if(length(tempo) != 0){
+data1 <- data1[-tempo, ] # WARNING tempo here and not removed.row.nb because the latter contain more numbers thant the former
+data1.ini <- data1.ini[-tempo, ] # WARNING tempo here and not removed.row.nb because the latter contain more numbers than the former
+for(i3 in 1:length(column.check)){
+if(any( ! unique(removed.rows[, column.check[i3]]) %in% unique(data1[, column.check[i3]]))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN COLUMN ", column.check[i3], " OF data1, THE FOLLOWING CLASSES HAVE DISAPPEARED AFTER NA/Inf REMOVAL (IF COLUMN USED IN THE PLOT, THIS CLASS WILL NOT BE DISPLAYED):\n", paste(unique(removed.rows[, column.check[i3]])[ ! unique(removed.rows[, column.check[i3]]) %in% unique(data1[, column.check[i3]])], collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+}
+count.categ <- 0
+for(i2 in 1:length(column.check)){
+if(column.check[i2] %in% categ){
+count.categ <- count.categ + 1
+}
+if(column.check[i2] == categ[count.categ]){
+categ.class.order[count.categ] <- list(levels(data1[, column.check[i2]])[levels(data1[, column.check[i2]]) %in% unique(data1[, column.check[i2]])]) # remove the absent color in the character vector
+data1[, column.check[i2]] <- factor(as.character(data1[, column.check[i2]]), levels = unique(categ.class.order[[count.categ]]))
+}
+if( ! is.null(dot.color) & ! is.null(dot.categ)){ # reminder : dot.categ cannot be a column name of categ anymore (because in that case dot.categ name is changed into "..._DOT"
+if(column.check[i2] == dot.categ){
+dot.categ.class.order <- levels(data1[, column.check[i2]])[levels(data1[, column.check[i2]]) %in% unique(data1[, column.check[i2]])] # remove the absent color in the character vector
+data1[, column.check[i2]] <- factor(as.character(data1[, column.check[i2]]), levels = unique(dot.categ.class.order))
+}
+}
+if(column.check[i2] %in% facet.categ){ # works if facet.categ == NULL this method should keep the order of levels when removing some levels
+tempo.levels <- levels(data1[, column.check[i2]])[levels(data1[, column.check[i2]]) %in% unique(as.character(data1[, column.check[i2]]))]
+data1[, column.check[i2]] <- factor(as.character(data1[, column.check[i2]]), levels = tempo.levels)
+}
+}
+}
+# end na detection and removal (done now to be sure of the correct length of categ)
+# From here, data1 and data.ini have no more NA or NaN in y, categ, dot.categ (if dot.color != NULL) and facet.categ
+
+
+
+if( ! is.null(categ.class.order)){
+if(length(categ.class.order) != length(categ)){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ncateg.class.order ARGUMENT MUST BE A LIST OF LENGTH EQUAL TO LENGTH OF categ\nHERE IT IS LENGTH: ", length(categ.class.order), " VERSUS ", length(categ))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else{
+for(i3 in 1:length(categ.class.order)){
+if(is.null(categ.class.order[[i3]])){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE categ.class.order COMPARTMENT ", i3, " IS NULL. ALPHABETICAL ORDER WILL BE APPLIED")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+data1[, categ[i3]] <- factor(as.character(data1[, categ[i3]])) # if already a factor, change nothing, if characters, levels according to alphabetical order
+categ.class.order[[i3]] <- levels(data1[, categ[i3]]) # character vector that will be used later
+}else{
+tempo <- fun_check(data = categ.class.order[[i3]], data.name = paste0("COMPARTMENT ", i3 , " OF categ.class.order ARGUMENT"), class = "vector", mode = "character", length = length(levels(data1[, categ[i3]])), fun.name = function.name) # length(data1[, categ[i1]) -> if data1[, categ[i1] was initially character vector, then conversion as factor after the NA removal, thus class number ok. If data1[, categ[i1] was initially factor, no modification after the NA removal, thus class number ok
+if(tempo$problem == TRUE){
+stop(paste0("\n\n================\n\n", tempo$text, "\n\n================\n\n"), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}
+if(any(duplicated(categ.class.order[[i3]]))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nCOMPARTMENT ", i3, " OF categ.class.order ARGUMENT CANNOT HAVE DUPLICATED CLASSES: ", paste(categ.class.order[[i3]], collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else if( ! (all(categ.class.order[[i3]] %in% unique(data1[, categ[i3]])) & all(unique(data1[, categ[i3]]) %in% categ.class.order[[i3]]))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nCOMPARTMENT ", i3, " OF categ.class.order ARGUMENT MUST BE CLASSES OF ELEMENT ", i3, " OF categ ARGUMENT\nHERE IT IS:\n", paste(categ.class.order[[i3]], collapse = " "), "\nFOR COMPARTMENT ", i3, " OF categ.class.order AND IT IS:\n", paste(unique(data1[, categ[i3]]), collapse = " "), "\nFOR COLUMN ", categ[i3], " OF data1")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else{
+data1[, categ[i3]] <- factor(data1[, categ[i3]], levels = categ.class.order[[i3]]) # reorder the factor
+
+}
+names(categ.class.order)[i3] <- categ[i3]
+}
+}
+}else{
+categ.class.order <- vector("list", length = length(categ))
+tempo.categ.class.order <- NULL
+for(i2 in 1:length(categ.class.order)){
+categ.class.order[[i2]] <- levels(data1[, categ[i2]])
+names(categ.class.order)[i2] <- categ[i2]
+tempo.categ.class.order <- c(tempo.categ.class.order, ifelse(i2 != 1, "\n", ""), categ.class.order[[i2]])
+}
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE categ.class.order SETTING IS NULL. ALPHABETICAL ORDER WILL BE APPLIED FOR BOX ORDERING:\n", paste(tempo.categ.class.order, collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# categ.class.order not NULL anymore (list)
+if(is.null(box.legend.name)){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE box.legend.name SETTING IS NULL. NAMES OF categ WILL BE USED: ", paste(categ, collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+box.legend.name <- categ[length(categ)] # if only categ1, then legend name of categ1, if length(categ) == 2, then legend name of categ2
+}
+# box.legend.name not NULL anymore (character string)
+# management of categ.color
+if( ! is.null(categ.color)){
+# check the nature of color
+# integer colors into gg_palette
+tempo.check.color <- fun_check(data = categ.color, class = "integer", double.as.integer.allowed = TRUE, na.contain = TRUE, fun.name = function.name)$problem
+if(tempo.check.color == FALSE){
+# convert integers into colors
+categ.color <- fun_gg_palette(max(categ.color, na.rm = TRUE))[categ.color]
+}
+# end integer colors into gg_palette
+if( ! (all(categ.color %in% colors() | grepl(pattern = "^#", categ.color)))){ # check that all strings of low.color start by #
+tempo.cat <- paste0("ERROR IN ", function.name, "\ncateg.color ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # AND/OR COLOR NAMES GIVEN BY colors(): ", paste(unique(categ.color), collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+if(any(is.na(categ.color))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") categ.color ARGUMENT CONTAINS NA")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# end check the nature of color
+# check the length of color
+categ.len <- length(categ) # if only categ1, then colors for classes of categ1, if length(categ) == 2, then colors for classes of categ2
+if(length(categ.color) == length(levels(data1[, categ[categ.len]]))){ # here length(categ.color) is equal to the different number of categ
+# data1[, categ[categ.len]] <- factor(data1[, categ[categ.len]]) # not required because sure that is is a factor
+data1 <- data.frame(data1, categ.color = data1[, categ[categ.len]], stringsAsFactors = TRUE)  # no need stringsAsFactors here for stat.nolog as factors remain factors
+data1$categ.color <- factor(data1$categ.color, labels = categ.color)
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN ", categ[categ.len], " OF categ ARGUMENT, THE FOLLOWING COLORS:\n", paste(categ.color, collapse = " "), "\nHAVE BEEN ATTRIBUTED TO THESE CLASSES:\n", paste(levels(factor(data1[, categ[categ.len]])), collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}else if(length(categ.color) == length(data1[, categ[categ.len]])){# here length(categ.color) is equal to nrow(data1) -> Modif to have length(categ.color) equal to the different number of categ (length(categ.color) == length(levels(data1[, categ[categ.len]])))
+data1 <- data.frame(data1, categ.color = categ.color, stringsAsFactors = TRUE)
+tempo.check <- unique(data1[ , c(categ[categ.len], "categ.color")])
+if( ! (nrow(tempo.check) == length(unique(categ.color)) & nrow(tempo.check) == length(unique(data1[ , categ[categ.len]])))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ncateg.color ARGUMENT HAS THE LENGTH OF data1 ROW NUMBER\nBUT IS INCORRECTLY ASSOCIATED TO EACH CLASS OF categ ", categ[categ.len], ":\n", paste(unique(mapply(FUN = "paste", data1[ ,categ[categ.len]], data1[ ,"categ.color"])), collapse = "\n"))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else{
+# data1[, categ[categ.len]] <- factor(data1[, categ[categ.len]]) # not required because sure that is is a factor
+categ.color <- unique(data1$categ.color[order(data1[, categ[categ.len]])]) # Modif to have length(categ.color) equal to the different number of categ (length(categ.color) == length(levels(data1[, categ[categ.len]])))
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") categ.color ARGUMENT HAS THE LENGTH OF data1 ROW NUMBER\nCOLORS HAVE BEEN RESPECTIVELY ASSOCIATED TO EACH CLASS OF categ ", categ[categ.len], " AS:\n", paste(levels(factor(data1[, categ[categ.len]])), collapse = " "), "\n", paste(categ.color, collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}else if(length(categ.color) == 1){
+# data1[, categ[categ.len]] <- factor(data1[, categ[categ.len]]) # not required because sure that is is a factor
+data1 <- data.frame(data1, categ.color = categ.color, stringsAsFactors = TRUE)
+categ.color <- rep(categ.color, length(levels(data1[, categ[categ.len]])))
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") categ.color ARGUMENT HAS LENGTH 1, MEANING THAT ALL THE DIFFERENT CLASSES OF ", categ[categ.len], "\n", paste(levels(factor(data1[, categ[categ.len]])), collapse = " "), "\nWILL HAVE THE SAME COLOR\n", paste(categ.color, collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}else{
+tempo.cat <- paste0("ERROR IN ", function.name, "\ncateg.color ARGUMENT MUST BE (1) LENGTH 1, OR (2) THE LENGTH OF data1 NROWS AFTER NA/Inf REMOVAL, OR (3) THE LENGTH OF THE CLASSES IN THE categ ", categ[categ.len], " COLUMN. HERE IT IS COLOR LENGTH ", length(categ.color), " VERSUS CATEG LENGTH ", length(data1[, categ[categ.len]]), " AND CATEG CLASS LENGTH ", length(unique(data1[, categ[categ.len]])), "\nPRESENCE OF NA/Inf COULD BE THE PROBLEM")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}else{
+categ.len <- length(categ) # if only categ1, then colors for classes of categ1, if length(categ) == 2, then colors for classes of categ2
+# data1[, categ[categ.len]] <- factor(data1[, categ[categ.len]]) # not required because sure that is is a factor
+categ.color <- fun_gg_palette(length(levels(data1[, categ[categ.len]])))
+data1 <- data.frame(data1, categ.color = data1[, categ[categ.len]], stringsAsFactors = TRUE)
+data1$categ.color <- factor(data1$categ.color, labels = categ.color)
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NULL categ.color ARGUMENT -> COLORS RESPECTIVELY ATTRIBUTED TO EACH CLASS OF ", categ[categ.len], " IN data1:\n", paste(categ.color, collapse = " "), "\n", paste(levels(data1[, categ[categ.len]]), collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# categ.color not NULL anymore
+categ.color <- as.character(categ.color)
+# categ.color is a character string representing the diff classes
+data1$categ.color <- factor(data1$categ.color, levels = unique(categ.color)) # ok because if categ.color is a character string, the order make class 1, class 2, etc. unique() because no duplicates allowed
+# data1$categ.color is a factor with order of levels -> categ.color
+# end management of categ.color
+# management of dot.color
+if( ! is.null(dot.color)){
+# optional legend of dot colors
+if( ! is.null(dot.categ)){
+ini.dot.categ <- dot.categ
+if( ! dot.categ %in% names(data1)){ # no need to use all() because length(dot.categ) = 1
+tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.categ ARGUMENT MUST BE A COLUMN NAME OF data1. HERE IT IS:\n", dot.categ)
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else if(dot.categ %in% categ){ # no need to use all() because length(dot.categ) = 1. Do not use dot.categ %in% categ[length(categ)] -> error
+# management of dot legend if dot.categ %in% categ (because legends with the same name are joined in ggplot2) 
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE COLUMN NAME OF data1 INDICATED IN THE dot.categ ARGUMENT (", dot.categ, ") HAS BEEN REPLACED BY ", paste0(dot.categ, "_DOT"), " TO AVOID MERGED LEGEND BY GGPLOT2")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+data1 <- data.frame(data1, dot.categ = data1[, dot.categ], stringsAsFactors = TRUE) # dot.categ is not a column name of data1 (checked above with reserved words)
+dot.categ <- paste0(dot.categ, "_DOT")
+names(data1)[names(data1) == "dot.categ"] <- dot.categ # paste0(dot.categ, "_DOT") is not a column name of data1 (checked above with reserved words)
+# tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.categ ARGUMENT CANNOT BE A COLUMN NAME OF data1 ALREADY SPECIFIED IN THE categ ARGUMENT:\n", dot.categ, "\nINDEED, dot.categ ARGUMENT IS MADE TO HAVE MULTIPLE DOT COLORS NOT RELATED TO THE BOXPLOT CATEGORIES")
+# stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+tempo1 <- fun_check(data = data1[, dot.categ], data.name = paste0(dot.categ, " COLUMN OF data1"), class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name)
+tempo2 <- fun_check(data = data1[, dot.categ], data.name = paste0(dot.categ, " COLUMN OF data1"), class = "factor", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.categ COLUMN MUST BE A FACTOR OR CHARACTER VECTOR") #
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+data1[, dot.categ] <- factor(data1[, dot.categ]) # if already a factor, change nothing, if characters, levels according to alphabetical order
+# dot.categ column of data1 is factor from here
+if( ! is.null(dot.categ.class.order)){
+if(any(duplicated(dot.categ.class.order))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.categ.class.order ARGUMENT CANNOT HAVE DUPLICATED CLASSES: ", paste(dot.categ.class.order, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else if( ! (all(dot.categ.class.order %in% levels(data1[, dot.categ])) & all(levels(data1[, dot.categ]) %in% dot.categ.class.order))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.categ.class.order ARGUMENT MUST BE CLASSES OF dot.categ ARGUMENT\nHERE IT IS:\n", paste(dot.categ.class.order, collapse = " "), "\nFOR dot.categ.class.order AND IT IS:\n", paste(levels(data1[, dot.categ]), collapse = " "), "\nFOR dot.categ COLUMN (", ini.dot.categ, ") OF data1")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else{
+data1[, dot.categ] <- factor(data1[, dot.categ], levels = dot.categ.class.order) # reorder the factor
+}
+}else{
+if(all(dot.color == "same") & length(dot.color) == 1){
+dot.categ.class.order <- unlist(categ.class.order[length(categ)])
+data1[, dot.categ] <- factor(data1[, dot.categ], levels = dot.categ.class.order) # reorder the factor
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE dot.categ.class.order SETTING IS NULL AND dot.color IS \"same\". ORDER OF categ.class.order WILL BE APPLIED FOR LEGEND DISPLAY: ", paste(dot.categ.class.order, collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}else{
+dot.categ.class.order <- sort(levels(data1[, dot.categ]))
+data1[, dot.categ] <- factor(data1[, dot.categ], levels = dot.categ.class.order) # reorder the factor
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE dot.categ.class.order SETTING IS NULL. ALPHABETICAL ORDER WILL BE APPLIED FOR LEGEND DISPLAY: ", paste(dot.categ.class.order, collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+# dot.categ.class.order not NULL anymore (character string) if dot.categ is not NULL
+if(all(dot.color == "same") & length(dot.color) == 1){
+if( ! identical(ini.dot.categ, categ[length(categ)])){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nWHEN dot.color ARGUMENT IS \"same\", THE COLUMN NAME IN dot.categ ARGUMENT MUST BE IDENTICAL TO THE LAST COLUMN NAME IN categ ARGUMENT. HERE IT IS:\ndot.categ: ", paste(ini.dot.categ, collapse = " "), "\ncateg: ", paste(categ, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else if( ! fun_comp_1d(unlist(categ.class.order[length(categ)]), dot.categ.class.order)$identical.content){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nWHEN dot.color ARGUMENT IS \"same\",\nLAST COMPARTMENT OF categ.class.order ARGUMENT AND dot.categ.class.order ARGUMENT CANNOT BE DIFFERENT:\nLAST COMPARTMENT OF categ.class.order: ", paste(unlist(categ.class.order[length(categ)]), collapse = " "), "\ndot.categ.class.order: ", paste(dot.categ.class.order, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}
+for(i3 in 1:length(categ)){
+if(identical(categ[i3], ini.dot.categ) & ! identical(unlist(categ.class.order[i3]), dot.categ.class.order) & identical(sort(unlist(categ.class.order[i3])), sort(dot.categ.class.order))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE dot.categ ARGUMENT SETTING IS PRESENT IN THE categ ARGUMENT SETTING, BUT ORDER OF THE CLASSES IS NOT THE SAME:\ncateg.class.order: ", paste(unlist(categ.class.order[i3]), collapse = " "), "\ndot.categ.class.order: ", paste(dot.categ.class.order, collapse = " "), "\nNOTE THAT ORDER OF categ.class.order IS THE ONE USED FOR THE AXIS REPRESENTATION")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+if(is.null(dot.legend.name)){
+dot.legend.name <- if(ini.dot.categ %in% categ[length(categ)]){dot.categ}else{ini.dot.categ} #
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE dot.legend.name SETTING IS NULL -> ", dot.legend.name, " WILL BE USED AS LEGEND TITLE OF DOTS")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# dot.legend.name not NULL anymore (character string)
+}else{
+if( ! is.null(dot.categ.class.order)){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE dot.categ.class.order ARGUMENT IS NOT NULL, BUT IS THE dot.categ ARGUMENT\n-> dot.categ.class.order NOT CONSIDERED AS NO LEGEND WILL BE DRAWN")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# But dot.categ.class.order will be converted to NULL below (not now)
+}
+# end optional legend of dot colors
+# check the nature of color
+# integer colors into gg_palette
+tempo.check.color <- fun_check(data = dot.color, class = "integer", double.as.integer.allowed = TRUE, na.contain = TRUE, fun.name = function.name)$problem
+if(tempo.check.color == FALSE){
+# convert integers into colors
+dot.color <- fun_gg_palette(max(dot.color, na.rm = TRUE))[dot.color]
+}
+# end integer colors into gg_palette
+if(all(dot.color == "same") & length(dot.color) == 1){
+dot.color <- categ.color # same color of the dots as the corresponding box color
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") dot.color ARGUMENT HAS BEEN SET TO \"same\"\nTHUS, DOTS WILL HAVE THE SAME COLORS AS THE CORRESPONDING BOXPLOT")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}else if( ! (all(dot.color %in% colors() | grepl(pattern = "^#", dot.color)))){ # check that all strings of low.color start by #
+tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.color ARGUMENT MUST BE (1) A HEXADECIMAL COLOR VECTOR STARTING BY #, OR (2) COLOR NAMES GIVEN BY colors(), OR (3) INTEGERS, OR THE STRING\"same\"\nHERE IT IS: ", paste(unique(dot.color), collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+if(any(is.na(dot.color))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") dot.color ARGUMENT CONTAINS NA")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# end check the nature of color
+# check the length of color
+if( ! is.null(dot.categ)){
+# optional legend of dot colors
+if(length(dot.color) > 1 & length(unique(data1[, dot.categ])) != length(dot.color)){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.color ARGUMENT IS NOT THE SAME LENGTH AS LEVELS OF dot.categ COLUMN (", dot.categ, "):\ndot.color: ", paste(dot.color, collapse = " "), "\ndot.categ LEVELS: ", paste(levels(data1[, dot.categ]), collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else if(length(dot.color) == 1 & length(dot.categ.class.order) > 1){ # to deal with single color
+dot.color <- rep(dot.color, length(dot.categ.class.order))
+}
+data1 <- data.frame(data1, dot.color = data1[, dot.categ], stringsAsFactors = TRUE)
+data1$dot.color <- factor(data1$dot.color, labels = dot.color) # do not use labels = unique(dot.color). Otherwise, we can have green1 green2 when dot.color is c("green", "green")
+dot.color <- as.character(unique(data1$dot.color[order(data1[, dot.categ])])) # reorder the dot.color character vector
+if(length(dot.color) == 1 & length(dot.categ.class.order) > 1){ # to deal with single color
+dot.color <- rep(dot.color, length(dot.categ.class.order))
+}
+tempo.check <- unique(data1[ , c(dot.categ, "dot.color")])
+if(length(unique(data1[ , "dot.color"])) > 1 & ( ! (nrow(tempo.check) == length(unique(data1[ , "dot.color"])) & nrow(tempo.check) == length(unique(data1[ , dot.categ]))))){ # length(unique(data1[ , "dot.color"])) > 1 because if only one color, can be attributed to each class of dot.categ
+tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.color ARGUMENT IS INCORRECTLY ASSOCIATED TO EACH CLASS OF dot.categ (", dot.categ, ") COLUMN:\n", paste(unique(mapply(FUN = "paste", data1[ , dot.categ], data1[ ,"dot.color"])), collapse = "\n"))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else{
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN dot.categ ARGUMENT (", ini.dot.categ, "), THE FOLLOWING COLORS OF DOTS:\n", paste(dot.color, collapse = " "), "\nHAVE BEEN ATTRIBUTED TO THESE CLASSES:\n", paste(levels(data1[, dot.categ]), collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# dot.color is a character string representing the diff classes of dot.categ
+# data1$dot.color is a factor with order of levels -> dot.categ
+# end optional legend of dot colors
+}else{
+categ.len <- length(categ) # if only categ1, then colors for classes of categ1, if length(categ) == 2, then colors for classes of categ2
+if(length(dot.color) == length(levels(data1[, categ[categ.len]]))){ # here length(dot.color) is equal to the different number of categ
+# data1[, categ[categ.len]] <- factor(data1[, categ[categ.len]]) # not required because sure that is is a factor
+data1 <- data.frame(data1, dot.color = data1[, categ[categ.len]], stringsAsFactors = TRUE)
+data1$dot.color <- factor(data1$dot.color, labels = dot.color)
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN ", categ[categ.len], " OF categ ARGUMENT, THE FOLLOWING COLORS:\n", paste(dot.color, collapse = " "), "\nHAVE BEEN ATTRIBUTED TO THESE CLASSES:\n", paste(levels(factor(data1[, categ[categ.len]])), collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}else if(length(dot.color) == length(data1[, categ[categ.len]])){# here length(dot.color) is equal to nrow(data1) -> Modif to have length(dot.color) equal to the different number of categ (length(dot.color) == length(levels(data1[, categ[categ.len]])))
+data1 <- data.frame(data1, dot.color = dot.color, stringsAsFactors = TRUE)
+}else if(length(dot.color) == 1 & ! all(dot.color == "same")){
+# data1[, categ[categ.len]] <- factor(data1[, categ[categ.len]]) # not required because sure that is is a factor
+data1 <- data.frame(data1, dot.color = dot.color, stringsAsFactors = TRUE)
+dot.color <- rep(dot.color, length(levels(data1[, categ[categ.len]])))
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") dot.color ARGUMENT HAS LENGTH 1, MEANING THAT ALL THE DIFFERENT CLASSES OF ", categ[categ.len], "\n", paste(levels(factor(data1[, categ[categ.len]])), collapse = " "), "\nWILL HAVE THE SAME COLOR\n", paste(dot.color, collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}else{
+tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.color ARGUMENT MUST BE (1) LENGTH 1, OR (2) THE LENGTH OF data1 NROWS AFTER NA/Inf REMOVAL, OR (3) THE LENGTH OF THE CLASSES IN THE categ ", categ[categ.len], " COLUMN. HERE IT IS COLOR LENGTH ", length(dot.color), " VERSUS CATEG LENGTH ", length(data1[, categ[categ.len]]), " AND CATEG CLASS LENGTH ", length(unique(data1[, categ[categ.len]])), "\nPRESENCE OF NA/Inf COULD BE THE PROBLEM")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# end check the length of color
+dot.color <- as.character(dot.color)
+# dot.color is a character string representing the diff classes
+data1$dot.color <- factor(data1$dot.color, levels = unique(dot.color)) # ok because if dot.color is a character string, the order make class 1, class 2, etc. If dot.color is a column of data1, then levels will be created, without incidence, except if dot.categ specified (see below). unique() because no duplicates allowed
+# data1$dot.color is a factor with order of levels -> dot.color
+}
+# end optional legend of dot colors
+}else if(is.null(dot.color) & ! (is.null(dot.categ) & is.null(dot.categ.class.order) & is.null(dot.legend.name))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") dot.categ OR dot.categ.class.order OR dot.legend.name ARGUMENT HAS BEEN SPECIFIED BUT dot.color ARGUMENT IS NULL (NO DOT PLOTTED)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# dot.color either NULL (no dot plotted) or character string (potentially representing the diff classes of dot.categ)
+# data1$dot.color is either NA or a factor (with order of levels -> depending on dot.categ or categ[length(categ)], or other
+if(is.null(dot.categ)){
+dot.categ.class.order <- NULL # because not used anyway
+}
+# dot.categ.class.order either NULL if dot.categ is NULL (no legend displayed) or character string (potentially representing the diff classes of dot.categ)
+# end management of dot.color
+if(is.null(dot.color) & box.fill == FALSE & dot.alpha <= 0.025){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE FOLLOWING ARGUMENTS WERE SET AS:\ndot.color = NULL (NOT ALL DOTS BUT ONLY POTENTIAL OUTLIER DOTS DISPLAYED)\nbox.fill = FALSE (NO FILLING COLOR FOR BOTH BOXES AND POTENTIAL OUTLIER DOTS)\ndot.alpha = ", fun_round(dot.alpha, 4), "\n-> POTENTIAL OUTLIER DOTS MIGHT NOT BE VISIBLE BECAUSE ALMOST TRANSPARENT")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+if(is.null(dot.color) & box.fill == FALSE & dot.border.size == 0){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nTHE FOLLOWING ARGUMENTS WERE SET AS:\ndot.color = NULL (NOT ALL DOTS BUT ONLY POTENTIAL OUTLIER DOTS DISPLAYED)\nbox.fill = FALSE (NO FILLING COLOR FOR BOTH BOXES AND POTENTIAL OUTLIER DOTS)\ndot.border.size = 0 (NO BORDER FOR POTENTIAL OUTLIER DOTS)\n-> THESE SETTINGS ARE NOT ALLOWED BECAUSE THE POTENTIAL OUTLIER DOTS WILL NOT BE VISIBLE")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# integer dot.border.color into gg_palette
+if( ! is.null(dot.border.color)){
+tempo <- fun_check(data = dot.border.color, class = "vector", typeof = "integer", double.as.integer.allowed = TRUE, length = 1, fun.name = function.name)
+if(tempo$problem == FALSE){ # convert integers into colors
+dot.border.color <- fun_gg_palette(max(dot.border.color, na.rm = TRUE))[dot.border.color]
+}
+}
+# end integer dot.border.color into gg_palette
+# na detection and removal (done now to be sure of the correct length of categ)
+column.check <- c("categ.color", if( ! is.null(dot.color)){"dot.color"}) # 
+if(any(is.na(data1[, column.check]))){ # data1 used here instead of data1.ini in case of new NaN created by log conversion (neg values)
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NA DETECTED IN COLUMNS ", paste(column.check, collapse = " "), " OF data1 AND CORRESPONDING ROWS REMOVED (SEE $removed.row.nb AND $removed.rows)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+for(i2 in 1:length(column.check)){
+if(any(is.na(data1[, column.check[i2]]))){
+tempo.warn <- paste0("NA REMOVAL DUE TO COLUMN ", column.check[i2], " OF data1")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n", tempo.warn)))
+}
+}
+tempo <- unique(unlist(lapply(lapply(c(data1[column.check]), FUN = is.na), FUN = which)))
+removed.row.nb <- c(removed.row.nb, tempo)
+removed.rows <- rbind(removed.rows, data1[tempo, ], stringsAsFactors = FALSE) # here data1 used because categorical columns tested
+if(length(tempo) != 0){
+data1 <- data1[-tempo, ] # WARNING tempo here and not removed.row.nb because the latter contain more numbers thant the former
+data1.ini <- data1.ini[-tempo, ] # WARNING tempo here and not removed.row.nb because the latter contain more numbers thant the former
+for(i3 in 1:length(column.check)){
+if(any( ! unique(removed.rows[, column.check[i3]]) %in% unique(data1[, column.check[i3]]))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN COLUMN ", column.check[i3], " OF data1, THE FOLLOWING CLASSES HAVE DISAPPEARED AFTER NA/Inf REMOVAL (IF COLUMN USED IN THE PLOT, THIS CLASS WILL NOT BE DISPLAYED):\n", paste(unique(removed.rows[, column.check[i3]])[ ! unique(removed.rows[, column.check[i3]]) %in% unique(data1[, column.check[i3]])], collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+}
+for(i2 in 1:length(column.check)){
+if(column.check[i2] == "categ.color"){
+categ.color <- levels(data1[, column.check[i2]])[levels(data1[, column.check[i2]]) %in% unique(data1[, column.check[i2]])] # remove the absent color in the character vector
+if(length(categ.color) == 1 & length(unlist(categ.class.order[length(categ)])) > 1){ # to deal with single color
+categ.color <- rep(categ.color, length(unlist(categ.class.order[length(categ)])))
+}
+data1[, column.check[i2]] <- factor(as.character(data1[, column.check[i2]]), levels = unique(categ.color))
+}
+if(column.check[i2] == "dot.color"){
+dot.color <- levels(data1[, column.check[i2]])[levels(data1[, column.check[i2]]) %in% unique(data1[, column.check[i2]])] # remove the absent color in the character vector
+if(length(dot.color) == 1 & length(dot.categ.class.order) > 1){ # to deal with single color. If dot.categ.class.order == NULL (which is systematically the case if dot.categ == NULL), no rep(dot.color, length(dot.categ.class.order)
+dot.color <- rep(dot.color, length(dot.categ.class.order))
+}
+data1[, column.check[i2]] <- factor(as.character(data1[, column.check[i2]]), levels = unique(dot.color))
+}
+}
+}
+# end na detection and removal (done now to be sure of the correct length of categ)
+# From here, data1 and data.ini have no more NA or NaN
+
+
+
+# end second round of checking and data preparation
+
+
+# package checking
+fun_pack(req.package = c(
+"ggplot2", 
+"gridExtra", 
+"scales"
+), lib.path = lib.path)
+# end package checking
+
+
+
+
+
+# main code
+# y coordinates recovery (create ini.box.coord, dot.coord and modify data1)
+if(length(categ) == 1){
+# width commputations
+box.width2 <- box.width
+box.space <- 0 # to inactivate the shrink that add space between grouped boxes, because no grouped boxes here
+# end width commputations
+# data1 check categ order for dots coordinates recovery
+data1 <- data.frame(data1, categ.check = data1[, categ[1]], stringsAsFactors = TRUE)
+data1$categ.check <- as.integer(data1$categ.check) # to check that data1[, categ[1]] and dot.coord$group are similar, during merging
+# end data1 check categ order for dots coordinates recovery
+# per box dots coordinates recovery
+tempo.gg.name <- "gg.indiv.plot."
+tempo.gg.count <- 0
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste0("ggplot2::ggplot()", if(is.null(add)){""}else{add})))) # add added here to have the facets
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, color = categ[1]), stroke = dot.border.size, size = dot.size, alpha = dot.alpha, shape = 21))
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "color", name = box.legend.name, values = if(is.null(dot.color)){rep(NA, length(unique(data1[, categ[1]])))}else if(length(dot.color) == 1){rep(dot.color, length(unique(data1[, categ[1]])))}else{dot.color}))
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_boxplot(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, fill = categ[1]), coef = if(box.whisker.kind == "no"){0}else if(box.whisker.kind == "std"){1.5}else if(box.whisker.kind == "max"){Inf})) # fill because this is what is used with geom_box # to easily have the equivalent of the grouped boxes
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "fill", name = box.legend.name, values = if(length(categ.color) == 1){rep(categ.color, length(unique(data1[, categ[1]])))}else{categ.color}))
+# end per box dots coordinates recovery
+}else if(length(categ) == 2){
+# width commputations
+box.width2 <- box.width / length(unique(data1[, categ[length(categ)]])) # real width of each box in x-axis unit, among the set of grouped box. Not relevant if no grouped boxes length(categ) == 1
+# end width commputations
+# data1 check categ order for dots coordinates recovery
+tempo.factor <- paste0(data1[order(data1[, categ[2]], data1[, categ[1]]), categ[2]], "_", data1[order(data1[, categ[2]], data1[, categ[1]]), categ[1]])
+data1 <- data.frame(data1[order(data1[, categ[2]], data1[, categ[1]]), ], categ.check = factor(tempo.factor, levels = unique(tempo.factor)), stringsAsFactors = TRUE)
+data1$categ.check <- as.integer(data1$categ.check)
+# end data1 check categ order for dots coordinates recovery
+# per box dots coordinates recovery
+tempo.gg.name <- "gg.indiv.plot."
+tempo.gg.count <- 0
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste0("ggplot2::ggplot()", if(is.null(add)){""}else{add})))) # add added here to have the facets
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, color = categ[2]), stroke = dot.border.size, size = dot.size, alpha = dot.alpha, shape = 21))
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "color", name = box.legend.name, values = if(is.null(dot.color)){rep(NA, length(unique(data1[, categ[2]])))}else if(length(dot.color) == 1){rep(dot.color, length(unique(data1[, categ[2]])))}else{dot.color}))
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_boxplot(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, fill = categ[2]), coef = if(box.whisker.kind == "no"){0}else if(box.whisker.kind == "std"){1.5}else if(box.whisker.kind == "max"){Inf})) # fill because this is what is used with geom_box # to easily have the equivalent of the grouped boxes
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "fill", name = box.legend.name, values = if(length(categ.color) == 1){rep(categ.color, length(unique(data1[, categ[2]])))}else{categ.color}))
+# end per box dots coordinates recovery
+}else{
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 1")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+if( ! is.null(stat.disp)){
+stat.just <- fun_gg_just(
+angle = stat.angle, 
+pos = ifelse(
+vertical == TRUE, 
+ifelse(stat.disp == "top", "bottom", "top"), # "bottom" because we want justification for text that are below the ref point which is the top of the graph. The opposite for "above"
+ifelse(stat.disp == "top", "left", "right") # "left" because we want justification for text that are on the left of the ref point which is the right border of the graph. The opposite for "above"
+), 
+kind = "text"
+)
+}
+# has in fact no interest because ggplot2 does not create room for geom_text()
+tempo.data.max <- data1[which.max(data1[, y]), ]
+tempo.data.max <- data.frame(tempo.data.max, label = formatC(tempo.data.max[, y], digit = 2, drop0trailing = TRUE, format = "f"), stringsAsFactors = TRUE)
+# end has in fact no interest because ggplot2 does not create room for geom_text()
+tempo.graph.info.ini <- ggplot2::ggplot_build(eval(parse(text = paste(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), if( ! is.null(stat.disp)){' + ggplot2::geom_text(data = tempo.data.max, mapping = ggplot2::aes_string(x = 1, y = y, label = "label"), size = stat.size, color = "black", angle = stat.angle, hjust = stat.just$hjust, vjust = stat.just$vjust)'})))) # added here to have room for annotation
+dot.coord <- tempo.graph.info.ini$data[[1]]
+dot.coord$x <- as.numeric(dot.coord$x) # because weird class
+dot.coord$PANEL <- as.numeric(dot.coord$PANEL) # because numbers as levels. But may be a problem is facet are reordered ?
+tempo.mean <- aggregate(x = dot.coord$y, by = list(dot.coord$group, dot.coord$PANEL), FUN = mean, na.rm = TRUE)
+names(tempo.mean)[names(tempo.mean) == "x"] <- "MEAN"
+names(tempo.mean)[names(tempo.mean) == "Group.1"] <- "BOX"
+names(tempo.mean)[names(tempo.mean) == "Group.2"] <- "PANEL"
+dot.coord <- data.frame(
+dot.coord[order(dot.coord$group, dot.coord$y), ], # dot.coord$PANEL deals below
+y.check = as.double(data1[order(data1$categ.check, data1[, y]), y]), 
+categ.check = data1[order(data1$categ.check, data1[, y]), "categ.check"], 
+dot.color = if(is.null(dot.color)){NA}else{data1[order(data1$categ.check, data1[, y]), "dot.color"]}, 
+data1[order(data1$categ.check, data1[, y]), ][categ], # avoid the renaming below
+stringsAsFactors = TRUE
+) # y.check to be sure that the order is the same between the y of data1 and the y of dot.coord
+# names(dot.coord)[names(dot.coord) == "tempo.categ1"] <- categ[1]
+if( ! is.null(dot.categ)){
+dot.coord <- data.frame(dot.coord, data1[order(data1$categ.check, data1[, y]), ][dot.categ], stringsAsFactors = TRUE) # avoid the renaming
+}
+if( ! is.null(facet.categ)){
+dot.coord <- data.frame(dot.coord, data1[order(data1$categ.check, data1[, y]), ][facet.categ], stringsAsFactors = TRUE) # for facet panels
+tempo.test <- NULL
+for(i2 in 1:length(facet.categ)){
+tempo.test <- paste0(tempo.test, ".", formatC(as.numeric(dot.coord[, facet.categ[i2]]), width = nchar(max(as.numeric(dot.coord[, facet.categ[i2]]), na.rm = TRUE)), flag = "0")) # convert factor into numeric with leading zero for proper ranking # merge the formatC() to create a new factor. The convertion to integer should recreate the correct group number. Here as.numeric is used and not as.integer in case of numeric in facet.categ (because comes from add and not checked by fun_check, contrary to categ)
+}
+tempo.test <- as.integer(factor(tempo.test))
+if( ! identical(as.integer(dot.coord$PANEL), tempo.test)){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nas.integer(dot.coord$PANEL) AND tempo.test MUST BE IDENTICAL. CODE HAS TO BE MODIFIED")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}
+if(dot.tidy == TRUE){
+if( ! is.null(dot.categ)){
+dot.coord <- data.frame(dot.coord, tidy_group = data1[order(data1$categ.check, data1[, y]), ][, dot.categ], stringsAsFactors = TRUE) # avoid the renaming
+# tidy_group_coord is to be able to fuse table when creating the table for dot coordinates
+if(dot.categ %in% categ){
+dot.coord <- data.frame(dot.coord, tidy_group_coord = dot.coord$group, stringsAsFactors = TRUE)
+}else{
+dot.coord <- data.frame(dot.coord, tidy_group_coord = as.integer(factor(paste0(
+formatC(as.integer(dot.coord[, categ[1]]), width = nchar(max(as.integer(dot.coord[, categ[1]]), na.rm = TRUE)), flag = "0"), # convert factor into numeric with leading zero for proper ranking
+".", 
+if(length(categ) == 2){formatC(as.integer(dot.coord[, categ[2]]), width = nchar(max(as.integer(dot.coord[, categ[2]]), na.rm = TRUE)), flag = "0")}, # convert factor into numeric with leading zero for proper ranking
+if(length(categ) == 2){"."}, 
+formatC(as.integer(dot.coord[, dot.categ]), width = nchar(max(as.integer(dot.coord[, dot.categ]), na.rm = TRUE)), flag = "0") # convert factor into numeric with leading zero for proper ranking
+)), stringsAsFactors = TRUE) # merge the 2 or 3 formatC() to create a new factor. The convertion to integer should recreate the correct group number
+) # for tidy dot plots
+}
+}else{
+dot.coord <- data.frame(dot.coord, tidy_group = if(length(categ) == 1){
+dot.coord[, categ]}else{as.integer(factor(paste0(
+formatC(as.integer(dot.coord[, categ[1]]), width = nchar(max(as.integer(dot.coord[, categ[1]]), na.rm = TRUE)), flag = "0"), # convert factor into numeric with leading zero for proper ranking
+".", 
+formatC(as.integer(dot.coord[, categ[2]]), width = nchar(max(as.integer(dot.coord[, categ[2]]), na.rm = TRUE)), flag = "0")# convert factor into numeric with leading zero for proper ranking
+)), stringsAsFactors = TRUE) # merge the 2 formatC() to create a new factor. The convertion to integer should recreate the correct group number
+}) # for tidy dot plots
+# tidy_group_coord is to be able to fuse table when creating the table for dot coordinates
+dot.coord <- data.frame(dot.coord, tidy_group_coord = dot.coord$group, stringsAsFactors = TRUE)
+}
+}
+if( ! (identical(dot.coord$y, dot.coord$y.check) & identical(dot.coord$group, dot.coord$categ.check))){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\n(dot.coord$y AND dot.coord$y.check) AS WELL AS (dot.coord$group AND dot.coord$categ.check) MUST BE IDENTICAL. CODE HAS TO BE MODIFIED")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else{
+if( ! identical(tempo.mean[order(tempo.mean$BOX, tempo.mean$PANEL), ]$BOX, unique(dot.coord[order(dot.coord$group, dot.coord$PANEL), c("group", "PANEL")])$group)){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\n(tempo.mean$BOX, tempo.mean$PANEL) AND (dot.coord$group, dot.coord$PANEL) MUST BE IDENTICAL. CODE HAS TO BE MODIFIED")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else{
+tempo <- unique(dot.coord[order(dot.coord$group, dot.coord$PANEL), c(categ, if( ! is.null(dot.color) & ! is.null(dot.categ)){if(dot.categ != ini.dot.categ){dot.categ}}, if( ! is.null(facet.categ)){facet.categ}), drop = FALSE])
+# names(tempo) <- paste0(names(tempo), ".mean")
+tempo.mean <- data.frame(tempo.mean[order(tempo.mean$BOX, tempo.mean$PANEL), ], tempo, stringsAsFactors = TRUE)
+}
+}
+# at that stage, categ color and dot color are correctly attributed in data1, box.coord and dot.coord
+# end y dot coordinates recovery (create ini.box.coord, dot.coord and modify data1)
+# ylim range
+if(is.null(y.lim)){
+y.lim <- tempo.graph.info.ini$layout$panel_params[[1]]$y.range # finite = TRUE removes all the -Inf and Inf except if only this. In that case, whatever the -Inf and/or Inf present, output -Inf;Inf range. Idem with NA only
+if(any(( ! is.finite(y.lim)) | is.na(y.lim)) | length(y.lim) != 2){ # kept but normally no more Inf in data1
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\ntempo.graph.info.ini$layout$panel_params[[1]]$y.range[1] CONTAINS NA OR Inf OR HAS LENGTH 1")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}else if(y.log != "no"){
+y.lim <- get(y.log)(y.lim) # no env = sys.nframe(), inherit = FALSE in get() because look for function in the classical scope
+}
+if(y.log != "no"){
+# normally this control is not necessary anymore
+if(any( ! is.finite(y.lim))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ny.lim ARGUMENT CANNOT HAVE ZERO OR NEGATIVE VALUES WITH THE y.log ARGUMENT SET TO ", y.log, ":\n", paste(y.lim, collapse = " "), "\nPLEASE, CHECK DATA VALUES (PRESENCE OF ZERO OR INF VALUES)")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}
+if(suppressWarnings(all(y.lim %in% c(Inf, -Inf)))){
+# normally this control is not necessary anymore
+tempo.cat <- paste0("ERROR IN ", function.name, " y.lim CONTAINS Inf VALUES, MAYBE BECAUSE VALUES FROM data1 ARGUMENTS ARE NA OR Inf ONLY OR BECAUSE OF LOG SCALE REQUIREMENT")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+if(suppressWarnings(any(is.na(y.lim)))){
+# normally this control is not necessary anymore
+tempo.cat <- paste0("ERROR IN ", function.name, " y.lim CONTAINS NA OR NaN VALUES, MAYBE BECAUSE VALUES FROM data1 ARGUMENTS ARE NA OR Inf ONLY OR BECAUSE OF LOG SCALE REQUIREMENT")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+y.lim.order <- order(y.lim) # to deal with inverse axis
+y.lim <- sort(y.lim)
+y.lim[1] <- y.lim[1] - abs(y.lim[2] - y.lim[1]) * ifelse(diff(y.lim.order) > 0, y.bottom.extra.margin, y.top.extra.margin) # diff(y.lim.order) > 0 medians not inversed axis
+y.lim[2] <- y.lim[2] + abs(y.lim[2] - y.lim[1]) * ifelse(diff(y.lim.order) > 0, y.top.extra.margin, y.bottom.extra.margin) # diff(y.lim.order) > 0 medians not inversed axis
+if(y.include.zero == TRUE){ # no need to check y.log != "no" because done before
+y.lim <- range(c(y.lim, 0), na.rm = TRUE, finite = TRUE) # finite = TRUE removes all the -Inf and Inf except if only this. In that case, whatever the -Inf and/or Inf present, output -Inf;Inf range. Idem with NA only
+}
+y.lim <- y.lim[y.lim.order]
+if(any(is.na(y.lim))){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 2")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# end ylim range
+
+
+
+
+
+
+# drawing
+# constant part
+tempo.gg.name <- "gg.indiv.plot."
+tempo.gg.count <- 0
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste0("ggplot2::ggplot()", if(is.null(add)){""}else{add})))) # add is directly put here to deal with additional variable of data, like when using facet_grid. No problem if add is a theme, will be dealt below
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::xlab(if(is.null(x.lab)){categ[1]}else{x.lab}))
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::ylab(if(is.null(y.lab)){y}else{y.lab}))
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::ggtitle(title))
+# text angle management
+axis.just <- fun_gg_just(angle = x.angle, pos = ifelse(vertical == TRUE, "bottom", "left"), kind = "axis")
+# end text angle management
+add.check <- TRUE
+if( ! is.null(add)){ # if add is NULL, then = 0
+if(grepl(pattern = "ggplot2\\s*::\\s*theme", add) == TRUE){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") \"ggplot2::theme\" STRING DETECTED IN THE add ARGUMENT\n-> INTERNAL GGPLOT2 THEME FUNCTIONS theme() AND theme_classic() HAVE BEEN INACTIVATED, TO BE USED BY THE USER\n-> article ARGUMENT WILL BE IGNORED")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+add.check <- FALSE
+}
+}
+if(add.check == TRUE & article == TRUE){
+# WARNING: not possible to add theme()several times. NO message but the last one overwrites the others
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::theme_classic(base_size = text.size))
+if(grid == TRUE){
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), m.gg <- ggplot2::theme(
+text = ggplot2::element_text(size = text.size), 
+plot.title = ggplot2::element_text(size = title.text.size), # stronger than text
+line = ggplot2::element_line(size = 0.5), 
+legend.key = ggplot2::element_rect(color = "white", size = 1.5), # size of the frame of the legend
+axis.line.y.left = ggplot2::element_line(colour = "black"), # draw lines for the y axis
+axis.line.x.bottom = ggplot2::element_line(colour = "black"), # draw lines for the x axis
+panel.grid.major.x = if(vertical == TRUE){NULL}else{ggplot2::element_line(colour = "grey85", size = 0.75)},
+panel.grid.major.y = if(vertical == TRUE){ggplot2::element_line(colour = "grey85", size = 0.75)}else{NULL},
+panel.grid.minor.y = if(vertical == TRUE){ggplot2::element_line(colour = "grey90", size = 0.25)}else{NULL},
+axis.text.x = if(vertical == TRUE){ggplot2::element_text(angle = axis.just$angle, hjust = axis.just$hjust, vjust = axis.just$vjust)}else{NULL},
+axis.text.y = if(vertical == TRUE){NULL}else{ggplot2::element_text(angle = axis.just$angle, hjust = axis.just$hjust, vjust = axis.just$vjust)},
+strip.background = ggplot2::element_rect(fill = NA, colour = NA) # for facet background
+))
+}else{
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), m.gg <- ggplot2::theme(
+text = ggplot2::element_text(size = text.size), 
+plot.title = ggplot2::element_text(size = title.text.size), # stronger than text
+line = ggplot2::element_line(size = 0.5), 
+legend.key = ggplot2::element_rect(color = "white", size = 1.5), # size of the frame of the legend
+axis.line.y.left = ggplot2::element_line(colour = "black"), 
+axis.line.x.bottom = ggplot2::element_line(colour = "black"),
+axis.text.x = if(vertical == TRUE){ggplot2::element_text(angle = axis.just$angle, hjust = axis.just$hjust, vjust = axis.just$vjust)}else{NULL},
+axis.text.y = if(vertical == TRUE){NULL}else{ggplot2::element_text(angle = axis.just$angle, hjust = axis.just$hjust, vjust = axis.just$vjust)},
+strip.background = ggplot2::element_rect(fill = NA, colour = NA)
+))
+}
+}else if(add.check == TRUE & article == FALSE){
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), m.gg <- ggplot2::theme(
+text = ggplot2::element_text(size = text.size), 
+plot.title = ggplot2::element_text(size = title.text.size), # stronger than text
+line = ggplot2::element_line(size = 0.5), 
+legend.key = ggplot2::element_rect(color = "white", size = 1.5), # size of the frame of the legend
+panel.background = ggplot2::element_rect(fill = "grey95"), 
+axis.line.y.left = ggplot2::element_line(colour = "black"), 
+axis.line.x.bottom = ggplot2::element_line(colour = "black"), 
+panel.grid.major.x = ggplot2::element_line(colour = "grey85", size = 0.75), 
+panel.grid.major.y = ggplot2::element_line(colour = "grey85", size = 0.75), 
+panel.grid.minor.x = ggplot2::element_blank(), 
+panel.grid.minor.y = ggplot2::element_line(colour = "grey90", size = 0.25), 
+strip.background = ggplot2::element_rect(fill = NA, colour = NA),
+axis.text.x = if(vertical == TRUE){ggplot2::element_text(angle = axis.just$angle, hjust = axis.just$hjust, vjust = axis.just$vjust)}else{NULL},
+axis.text.y = if(vertical == TRUE){NULL}else{ggplot2::element_text(angle = axis.just$angle, hjust = axis.just$hjust, vjust = axis.just$vjust)}
+))
+}
+# Contrary to fun_gg_bar(), cannot plot the boxplot right now, because I need the dots plotted first
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_boxplot(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, group = categ[length(categ)]), position = ggplot2::position_dodge(width = NULL), color = NA, width = box.width, fill = NA)) # this is to set the graph (i.e., a blanck boxplot to be able to use x coordinates to plot dots before boxes)
+# end constant part
+
+
+
+
+# graphic info recovery (including means)
+tempo.graph.info <- ggplot2::ggplot_build(eval(parse(text = paste0(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), ' + ggplot2::geom_boxplot(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, fill = categ[length(categ)]), position = ggplot2::position_dodge(width = NULL), width = box.width, notch = box.notch, coef = if(box.whisker.kind == "no"){0}else if(box.whisker.kind == "std"){1.5}else if(box.whisker.kind == "max"){Inf}) + ggplot2::scale_discrete_manual(aesthetics = "fill", name = box.legend.name, values = if(length(categ.color) == 1){rep(categ.color, length(unique(data1[, categ[length(categ)]])))}else{categ.color})')))) # will be recovered later again, when ylim will be considered
+tempo.yx.ratio <- (tempo.graph.info$layout$panel_params[[1]]$y.range[2] - tempo.graph.info$layout$panel_params[[1]]$y.range[1]) / (tempo.graph.info$layout$panel_params[[1]]$x.range[2] - tempo.graph.info$layout$panel_params[[1]]$x.range[1])
+box.coord <- tempo.graph.info$data[[2]] # to have the summary statistics of the plot. Contrary to ini.box.plot, now integrates ylim Here because can be required for stat.disp when just box are plotted
+box.coord$x <- as.numeric(box.coord$x) # because x is of special class that block comparison of values using identical
+box.coord$PANEL <- as.numeric(box.coord$PANEL) # because numbers as levels. But may be a problem is facet are reordered ?
+box.coord <- box.coord[order(box.coord$group, box.coord$PANEL), ]
+if( ! (identical(tempo.mean$BOX, box.coord$group) & identical(tempo.mean$PANEL, box.coord$PANEL))){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nidentical(tempo.mean$BOX, box.coord$group) & identical(tempo.mean$PANEL, box.coord$PANEL) DO NOT HAVE THE SAME VALUE ORDER")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else{
+# tempo <- c(categ, if( ! is.null(dot.color) & ! is.null(dot.categ)){if(dot.categ != ini.dot.categ){dot.categ}}, if( ! is.null(facet.categ)){facet.categ})
+if(any(names(tempo.mean) %in% names(box.coord))){
+names(tempo.mean)[names(tempo.mean) %in% names(box.coord)] <- paste0(names(tempo.mean)[names(tempo.mean) %in% names(box.coord)], ".mean")
+}
+box.coord <- data.frame(box.coord, tempo.mean, stringsAsFactors = TRUE)
+}
+# end graphic info recovery (including means)
+
+
+
+# stat output (will also serve for boxplot and mean display)
+# x not added know to do not have them in stat.nolog
+stat <- data.frame(
+MIN = box.coord$ymin_final, 
+QUART1 = box.coord$lower, 
+MEDIAN = box.coord$middle, 
+MEAN = box.coord$MEAN, 
+QUART3 = box.coord$upper, 
+MAX = box.coord$ymax_final, 
+WHISK_INF = box.coord$ymin, 
+BOX_INF = box.coord$lower, 
+NOTCH_INF = box.coord$notchlower, 
+NOTCH_SUP = box.coord$notchupper, 
+BOX_SUP = box.coord$upper, 
+WHISK_SUP = box.coord$ymax, 
+OUTLIERS = box.coord["outliers"], 
+tempo.mean[colnames(tempo.mean) != "MEAN"], 
+COLOR = box.coord$fill, 
+stringsAsFactors = TRUE
+) # box.coord["outliers"] written like this because it is a list. X coordinates not put now because several features to set
+names(stat)[names(stat) == "outliers"] <- "OUTLIERS"
+stat.nolog <- stat # stat.nolog ini will serve for outputs
+if(y.log != "no"){
+stat.nolog[c("MIN", "QUART1", "MEDIAN", "MEAN", "QUART3", "MAX", "WHISK_INF", "BOX_INF", "NOTCH_INF", "NOTCH_SUP", "BOX_SUP", "WHISK_SUP")] <- ifelse(y.log == "log2", 2, 10)^(stat.nolog[c("MIN", "QUART1", "MEDIAN", "MEAN", "QUART3", "MAX", "WHISK_INF", "BOX_INF", "NOTCH_INF", "NOTCH_SUP", "BOX_SUP", "WHISK_SUP")])
+stat.nolog$OUTLIERS <- lapply(stat.nolog$OUTLIERS, FUN = function(X){ifelse(y.log == "log2", 2, 10)^X})
+}
+# end stat output (will also serve for boxplot and mean display)
+
+
+
+
+
+
+# x coordinates management (for random plotting and for stat display)
+# width commputations
+width.ini <- c(box.coord$xmax - box.coord$xmin)[1] # all the box widths are equal here. Only the first one taken
+width.correct <- width.ini * box.space / 2
+if( ! (identical(stat$BOX, box.coord$group) & identical(stat$PANEL, box.coord$PANEL))){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nidentical(stat$BOX, box.coord$group) & identical(stat$PANEL, box.coord$PANEL) MUST BE IDENTICAL. CODE HAS TO BE MODIFIED")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else{
+stat <- data.frame(
+stat, 
+X = box.coord$x, 
+X_BOX_INF = box.coord$xmin + width.correct, 
+X_BOX_SUP = box.coord$xmax - width.correct, 
+X_NOTCH_INF = box.coord$x - (box.coord$x - (box.coord$xmin + width.correct)) / 2, 
+X_NOTCH_SUP = box.coord$x + (box.coord$x - (box.coord$xmin + width.correct)) / 2, 
+X_WHISK_INF = box.coord$x - (box.coord$x - (box.coord$xmin + width.correct)) * box.whisker.width, 
+X_WHISK_SUP = box.coord$x + (box.coord$x - (box.coord$xmin + width.correct)) * box.whisker.width, 
+# tempo.mean[colnames(tempo.mean) != "MEAN"], # already added above
+stringsAsFactors = TRUE
+)
+stat$COLOR <- factor(stat$COLOR, levels = unique(categ.color))
+if( ! all(stat$NOTCH_SUP < stat$BOX_SUP & stat$NOTCH_INF > stat$BOX_INF) & box.notch == TRUE){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") SOME NOTCHES ARE BEYOND BOX HINGES. TRY ARGUMENT box.notch = FALSE")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+dot.jitter <- c((box.coord$xmax - width.correct) - (box.coord$xmin + width.correct))[1] * dot.jitter # real dot.jitter. (box.coord$xmin + width.correct) - (box.coord$xmax - width.correct))[1] is the width of the box. Is equivalent to (box.coord$x - (box.coord$xmin + width.correct))[1] * 2
+# end width commputations
+if( ! is.null(dot.color)){
+# random dots
+if(dot.tidy == FALSE){
+dot.coord.rd1 <- merge(dot.coord, box.coord[c("fill", "PANEL", "group", "x")], by = c("PANEL", "group"), sort = FALSE) # rd for random. Send the coord of the boxes into the coord data.frame of the dots (in the column x.y). WARNING: by = c("PANEL", "group") without fill column because PANEL & group columns are enough as only one value of x column per group number in box.coord. Thus, no need to consider fill column
+if(nrow(dot.coord.rd1) != nrow(dot.coord)){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nTHE merge() FUNCTION DID NOT RETURN A CORRECT dot.coord.rd1 DATA FRAME. CODE HAS TO BE MODIFIED")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+set.seed(1)
+sampled.dot.jitter <- if(nrow(dot.coord.rd1) == 1){runif(n = nrow(dot.coord.rd1), min = - dot.jitter / 2, max = dot.jitter / 2)}else{sample(x = runif(n = nrow(dot.coord.rd1), min = - dot.jitter / 2, max = dot.jitter / 2), size = nrow(dot.coord.rd1), replace = FALSE)}
+dot.coord.rd2 <- data.frame(dot.coord.rd1, dot.x = dot.coord.rd1$x.y + sampled.dot.jitter, stringsAsFactors = TRUE) # set the dot.jitter thanks to runif and dot.jitter range. Then, send the coord of the boxes into the coord data.frame of the dots (in the column x.y)
+set.seed(NULL)
+if(length(categ) == 1){
+tempo.data1 <- unique(data.frame(data1[categ[1]], group = as.integer(data1[, categ[1]]), stringsAsFactors = TRUE)) # categ[1] is factor
+names(tempo.data1)[names(tempo.data1) == categ[1]] <- paste0(categ[1], ".check")
+verif <- paste0(categ[1], ".check")
+}else if(length(categ) == 2){
+tempo.data1 <- unique(
+data.frame(
+data1[c(categ[1], categ[2])], 
+group = as.integer(factor(paste0(
+formatC(as.integer(data1[, categ[2]]), width = nchar(max(as.integer(data1[, categ[2]]), na.rm = TRUE)), flag = "0"), # convert factor into numeric with leading zero for proper ranking
+".", 
+formatC(as.integer(data1[, categ[1]]), width = nchar(max(as.integer(data1[, categ[1]]), na.rm = TRUE)), flag = "0")# convert factor into numeric with leading zero for proper ranking
+)), stringsAsFactors = TRUE) # merge the 2 formatC() to create a new factor. The convertion to integer should recreate the correct group number
+)
+) # categ[2] first if categ[2] is used to make the categories in ggplot and categ[1] is used to make the x-axis
+names(tempo.data1)[names(tempo.data1) == categ[1]] <- paste0(categ[1], ".check")
+names(tempo.data1)[names(tempo.data1) == categ[2]] <- paste0(categ[2], ".check")
+verif <- c(paste0(categ[1], ".check"), paste0(categ[2], ".check"))
+}else{
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 3")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+dot.coord.rd3 <- merge(dot.coord.rd2, tempo.data1, by = intersect("group", "group"), sort = FALSE) # send the factors of data1 into coord. WARNING: I have replaced by = "group" by intersect("group", "group") because of an error due to wrong group group merging in dot.coord.rd3
+if(nrow(dot.coord.rd3) != nrow(dot.coord) | ( ! fun_comp_2d(dot.coord.rd3[categ], dot.coord.rd3[verif])$identical.content)){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nTHE merge() FUNCTION DID NOT RETURN A CORRECT dot.coord.rd3 DATA FRAME. CODE HAS TO BE MODIFIED")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# end random dots
+}
+# tidy dots
+# coordinates are recovered during plotting (see dot.coord.tidy1 below)
+# end tidy dots
+}
+# end x coordinates management (for random plotting and for stat display)
+
+
+
+
+
+# boxplot display before dot display if box.fill = TRUE
+coord.names <- NULL
+# creation of the data frame for (main box + legend) and data frame for means
+if(box.notch == FALSE){
+for(i3 in 1:length(categ)){
+if(i3 == 1){
+tempo.polygon <- data.frame(GROUPX = c(t(stat[, rep(categ[i3], 5)])), stringsAsFactors = TRUE)
+}else{
+tempo.polygon <- cbind(tempo.polygon, c(t(stat[, rep(categ[i3], 5)])), stringsAsFactors = TRUE)
+}
+}
+names(tempo.polygon) <- categ
+tempo.polygon <- data.frame(X = c(t(stat[, c("X_BOX_INF", "X_BOX_SUP", "X_BOX_SUP", "X_BOX_INF", "X_BOX_INF")])), Y = c(t(stat[, c("BOX_INF", "BOX_INF", "BOX_SUP", "BOX_SUP", "BOX_INF")])), COLOR = c(t(stat[, c("COLOR", "COLOR", "COLOR", "COLOR", "COLOR")])), BOX = as.character(c(t(stat[, c("BOX", "BOX", "BOX", "BOX", "BOX")]))), tempo.polygon, stringsAsFactors = TRUE)
+if( ! is.null(facet.categ)){
+for(i4 in 1:length(facet.categ)){
+tempo.polygon <- data.frame(tempo.polygon, c(t(stat[, c(facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4])])), stringsAsFactors = TRUE)
+names(tempo.polygon)[length(names(tempo.polygon))] <- facet.categ[i4]
+}
+}
+}else{
+for(i3 in 1:length(categ)){
+if(i3 == 1){
+tempo.polygon <- data.frame(GROUPX = c(t(stat[, rep(categ[i3], 11)])), stringsAsFactors = TRUE)
+}else{
+tempo.polygon <- cbind(tempo.polygon, c(t(stat[, rep(categ[i3], 11)])), stringsAsFactors = TRUE)
+}
+}
+names(tempo.polygon) <- categ
+tempo.polygon <- data.frame(X = c(t(stat[, c("X_BOX_INF", "X_BOX_SUP", "X_BOX_SUP", "X_NOTCH_SUP", "X_BOX_SUP", "X_BOX_SUP", "X_BOX_INF", "X_BOX_INF", "X_NOTCH_INF", "X_BOX_INF", "X_BOX_INF")])), Y = c(t(stat[, c("BOX_INF", "BOX_INF", "NOTCH_INF", "MEDIAN", "NOTCH_SUP", "BOX_SUP", "BOX_SUP", "NOTCH_SUP", "MEDIAN", "NOTCH_INF", "BOX_INF")])), COLOR = c(t(stat[, c("COLOR", "COLOR", "COLOR", "COLOR", "COLOR", "COLOR", "COLOR", "COLOR", "COLOR", "COLOR", "COLOR")])), BOX = as.character(c(t(stat[, c("BOX", "BOX", "BOX", "BOX", "BOX", "BOX", "BOX", "BOX", "BOX", "BOX", "BOX")]))), tempo.polygon, stringsAsFactors = TRUE)
+if( ! is.null(facet.categ)){
+for(i4 in 1:length(facet.categ)){
+tempo.polygon <- data.frame(tempo.polygon, c(t(stat[, c(facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4])])), stringsAsFactors = TRUE)
+names(tempo.polygon)[length(names(tempo.polygon))] <- facet.categ[i4]
+}
+}
+}
+tempo.polygon$COLOR <- factor(tempo.polygon$COLOR, levels = unique(categ.color))
+if( ! is.null(categ.class.order)){
+for(i3 in 1:length(categ)){
+tempo.polygon[, categ[i3]] <- factor(tempo.polygon[, categ[i3]], levels = categ.class.order[[i3]])
+}
+}
+# modified name of dot.categ column (e.g., "Categ1_DOT") must be included for boxplot using ridy dots
+if( ! is.null(dot.color) & ! is.null(dot.categ)){
+if(dot.categ != ini.dot.categ){
+tempo.polygon <- data.frame(tempo.polygon, GROUPX = tempo.polygon[, ini.dot.categ], stringsAsFactors = TRUE)
+names(tempo.polygon)[names(tempo.polygon) == "GROUPX"] <- dot.categ
+
+}
+}
+tempo.diamon.mean <- data.frame(X = c(t(stat[, c("X", "X_NOTCH_INF", "X", "X_NOTCH_SUP", "X")])), Y = c(t(cbind(stat["MEAN"] - (stat[, "X"] - stat[, "X_NOTCH_INF"]) * tempo.yx.ratio, stat["MEAN"], stat["MEAN"] + (stat[, "X"] - stat[, "X_NOTCH_INF"]) * tempo.yx.ratio, stat["MEAN"], stat["MEAN"] - (stat[, "X"] - stat[, "X_NOTCH_INF"]) * tempo.yx.ratio), stringsAsFactors = TRUE)), COLOR = c(t(stat[, c("COLOR", "COLOR", "COLOR", "COLOR", "COLOR")])), GROUP = c(t(stat[, c("BOX", "BOX", "BOX", "BOX", "BOX")])), stringsAsFactors = TRUE) # stringsAsFactors = TRUE for cbind() because stat["MEAN"] is a data frame. Otherwise, stringsAsFactors is not an argument for cbind() on vectors
+if( ! is.null(facet.categ)){
+for(i3 in 1:length(facet.categ)){
+tempo.diamon.mean <- data.frame(tempo.diamon.mean, c(t(stat[, c(facet.categ[i3], facet.categ[i3], facet.categ[i3], facet.categ[i3], facet.categ[i3])])), stringsAsFactors = TRUE)
+names(tempo.diamon.mean)[length(names(tempo.diamon.mean))] <- facet.categ[i3]
+}
+}
+tempo.diamon.mean$COLOR <- factor(tempo.diamon.mean$COLOR, levels = unique(categ.color))
+# end creation of the data frame for (main box + legend) and data frame for means
+if(box.fill == TRUE){
+# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_boxplot(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, color = categ[length(categ)], fill = categ[length(categ)]), position = ggplot2::position_dodge(width = NULL), width = box.width, size = box.line.size, notch = box.notch, coef = if(box.whisker.kind == "no"){0}else if(box.whisker.kind == "std"){1.5}else if(box.whisker.kind == "max"){Inf}, alpha = box.alpha, outlier.shape = if( ! is.null(dot.color)){NA}else{21}, outlier.color = if( ! is.null(dot.color)){NA}else{dot.border.color}, outlier.fill = if( ! is.null(dot.color)){NA}else{NULL}, outlier.size = if( ! is.null(dot.color)){NA}else{dot.size}, outlier.stroke = if( ! is.null(dot.color)){NA}else{dot.border.size}, outlier.alpha = if( ! is.null(dot.color)){NA}else{dot.alpha})) # the color, size, etc. of the outliers are dealt here. outlier.color = NA to do not plot outliers when dots are already plotted. Finally, boxplot redrawn (see below)
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_polygon(
+data = tempo.polygon, 
+mapping = ggplot2::aes_string(x = "X", y = "Y", group = "BOX", fill = categ[length(categ)], color = categ[length(categ)]), 
+size = box.line.size, 
+alpha = box.alpha
+))
+coord.names <- c(coord.names, "main.box")
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X, xend = X, y = BOX_SUP, yend = WHISK_SUP, group = categ[length(categ)]), color = "black", size = box.line.size, alpha = box.alpha)) # 
+coord.names <- c(coord.names, "sup.whisker")
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X, xend = X, y = BOX_INF, yend = WHISK_INF, group = categ[length(categ)]), color = "black", size = box.line.size, alpha = box.alpha)) # 
+coord.names <- c(coord.names, "inf.whisker")
+if(box.whisker.width > 0){
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X_WHISK_INF, xend = X_WHISK_SUP, y = WHISK_SUP, yend = WHISK_SUP, group = categ[length(categ)]), color = "black", size = box.line.size, alpha = box.alpha, lineend = "round")) # 
+coord.names <- c(coord.names, "sup.whisker.edge")
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X_WHISK_INF, xend = X_WHISK_SUP, y = WHISK_INF, yend = WHISK_INF, group = categ[length(categ)]), color = "black", size = box.line.size, alpha = box.alpha, lineend = "round")) # 
+coord.names <- c(coord.names, "inf.whisker.edge")
+}
+if(box.mean == TRUE){
+# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point(data = stat, mapping = ggplot2::aes_string(x = "X", y = "MEAN", group = categ[length(categ)]), shape = 23, stroke = box.line.size * 2, fill = stat$COLOR, size = box.mean.size, color = "black", alpha = box.alpha)) # group used in aesthetic to do not have it in the legend
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_polygon(
+data = tempo.diamon.mean, 
+mapping = ggplot2::aes(x = X, y = Y, group = GROUP), 
+fill = tempo.diamon.mean[, "COLOR"], 
+color = hsv(0, 0, 0, alpha = box.alpha), # outline of the polygon in black but with alpha
+size = box.line.size * 2, 
+alpha = box.alpha
+))
+coord.names <- c(coord.names, "mean")
+}
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = if(box.notch == FALSE){X_BOX_INF}else{X_NOTCH_INF}, xend = if(box.notch == FALSE){X_BOX_SUP}else{X_NOTCH_SUP}, y = MEDIAN, yend = MEDIAN, group = categ[length(categ)]), color = "black", size = box.line.size * 2, alpha = box.alpha)) # 
+coord.names <- c(coord.names, "median")
+}
+# end boxplot display before dot display if box.fill = TRUE
+
+
+
+
+
+
+# dot display
+if( ! is.null(dot.color)){
+if(dot.tidy == FALSE){
+if(is.null(dot.categ)){
+if(dot.border.size == 0){
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point(
+data = dot.coord.rd3, 
+mapping = ggplot2::aes_string(x = "dot.x", y = "y", group = categ[length(categ)]), 
+size = dot.size, 
+shape = 19, 
+color = dot.coord.rd3$dot.color, 
+alpha = dot.alpha
+)) # group used in aesthetic to do not have it in the legend. Here ggplot2::scale_discrete_manual() cannot be used because of the group easthetic
+}else{
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point(
+data = dot.coord.rd3, 
+mapping = ggplot2::aes_string(x = "dot.x", y = "y", group = categ[length(categ)]), 
+shape = 21, 
+stroke = dot.border.size, 
+color = if(is.null(dot.border.color)){dot.coord.rd3$dot.color}else{rep(dot.border.color, nrow(dot.coord.rd3))}, 
+size = dot.size, 
+fill = dot.coord.rd3$dot.color, 
+alpha = dot.alpha
+)) # group used in aesthetic to do not have it in the legend. Here ggplot2::scale_discrete_manual() cannot be used because of the group easthetic
+}
+}else{
+if(dot.border.size == 0){
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point(
+data = dot.coord.rd3, 
+mapping = ggplot2::aes_string(x = "dot.x", y = "y", alpha = dot.categ), 
+size = dot.size, 
+shape = 19, 
+color = dot.coord.rd3$dot.color
+)) # group used in aesthetic to do not have it in the legend. Here ggplot2::scale_discrete_manual() cannot be used because of the group easthetic
+}else{
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point(
+data = dot.coord.rd3, 
+mapping = ggplot2::aes_string(x = "dot.x", y = "y", alpha = dot.categ), 
+size = dot.size, 
+shape = 21, 
+stroke = dot.border.size, 
+color = if(is.null(dot.border.color)){dot.coord.rd3$dot.color}else{rep(dot.border.color, nrow(dot.coord.rd3))}, 
+fill = dot.coord.rd3$dot.color
+)) # group used in aesthetic to do not have it in the legend. Here ggplot2::scale_discrete_manual() cannot be used because of the group easthetic
+}
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "alpha", name = dot.legend.name, values = rep(dot.alpha, length(dot.categ.class.order)), guide = ggplot2::guide_legend(override.aes = list(fill = dot.color, color = if(is.null(dot.border.color)){dot.color}else{dot.border.color}, stroke = dot.border.size, alpha = dot.alpha)))) # values are the values of color (which is the border color in geom_box. WARNING: values = categ.color takes the numbers to make the colors if categ.color is a factor
+}
+coord.names <- c(coord.names, "dots")
+}else if(dot.tidy == TRUE){
+# here plot using group -> no scale
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_dotplot(
+data = dot.coord, 
+mapping = ggplot2::aes_string(x = categ[1], y = "y", group = "group"), # not dot.categ here because the classes of dot.categ create new separations
+position = ggplot2::position_dodge(width = box.width), 
+binpositions = "all", 
+binaxis = "y", 
+stackdir = "center", 
+alpha = dot.alpha, 
+fill = dot.coord$dot.color, 
+stroke = dot.border.size, 
+color = if(is.null(dot.border.color)){dot.coord$dot.color}else{rep(dot.border.color, nrow(dot.coord))}, 
+show.legend = FALSE, # WARNING: do not use show.legend = TRUE because it uses the arguments outside aes() as aesthetics (here color and fill). Thus I must find a way using ggplot2::scale_discrete_manual()
+binwidth = (y.lim[2] - y.lim[1]) / dot.tidy.bin.nb
+)) # geom_dotplot ggplot2 v3.3.0: I had to remove rev() in fill and color # very weird behavior of geom_dotplot ggplot2 v3.2.1, (1) because with aes group = (to avoid legend), the dot plotting is not good in term of coordinates, and (2) because data1 seems reorderer according to x = categ[1] before plotting. Thus, I have to use fill = dot.coord[rev(order(dot.coord[, categ[1]], decreasing = TRUE)), "dot.color"] to have the good corresponding colors # show.legend option do not remove the legend, only the aesthetic of the legend (dot, line, etc.)
+coord.names <- c(coord.names, "dots")
+if( ! is.null(dot.categ)){
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_dotplot(
+data = dot.coord, 
+mapping = ggplot2::aes_string(x = categ[1], y = "y", alpha = dot.categ), # not dot.categ here because the classes of dot.categ create new separations
+position = ggplot2::position_dodge(width = box.width), 
+binpositions = "all", 
+binaxis = "y", 
+stackdir = "center", 
+fill = NA, 
+stroke = NA, 
+color = NA, 
+# WARNING: do not use show.legend = TRUE because it uses the arguments outside aes() as aesthetics (here color and fill). Thus I must find a way using ggplot2::scale_discrete_manual()
+binwidth = (y.lim[2] - y.lim[1]) / dot.tidy.bin.nb
+)) # geom_dotplot ggplot2 v3.3.0: I had to remove rev() in fill and color # very weird behavior of geom_dotplot ggplot2 v3.2.1, (1) because with aes group = (to avoid legend), the dot plotting is not good in term of coordinates, and (2) because data1 seems reorderer according to x = categ[1] before plotting. Thus, I have to use fill = dot.coord[rev(order(dot.coord[, categ[1]], decreasing = TRUE)), "dot.color"] to have the good corresponding colors # show.legend option do not remove the legend, only the aesthetic of the legend (dot, line, etc.)
+# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "linetype", name = dot.legend.name, values = rep(1, length(categ.color)))) # values = rep("black", length(categ.color)) are the values of color (which is the border color of dots), and this modify the border color on the plot. WARNING: values = categ.color takes the numbers to make the colors if categ.color is a factor
+coord.names <- c(coord.names, "bad_remove")
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "alpha", name = dot.legend.name, values = rep(dot.alpha, length(dot.categ.class.order)), labels = dot.categ.class.order, guide = ggplot2::guide_legend(title = if(ini.dot.categ == categ[length(categ)]){dot.categ}else{ini.dot.categ}, override.aes = list(fill = levels(dot.coord$dot.color), color = if(is.null(dot.border.color)){levels(dot.coord$dot.color)}else{dot.border.color}, stroke = dot.border.size, alpha = dot.alpha)))) # values are the values of color (which is the border color in geom_box. WARNING: values = categ.color takes the numbers to make the colors if categ.color is a factor
+}
+# coordinates of tidy dots
+tempo.coord <- ggplot2::ggplot_build(eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "))))$data # to have the tidy dot coordinates
+if(length(which(sapply(tempo.coord, FUN = nrow) == nrow(data1))) > if(is.null(dot.categ)){1}else{2}){ # if(is.null(dot.categ)){1}else{2} because 1 dotplot if dot.categ is NULL and 2 dotplots is not, with the second being a blank dotplot with wrong coordinates. Thus take the first in that situation
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nMORE THAN ", if(is.null(dot.categ)){1}else{2}, " COMPARTMENT WITH NROW EQUAL TO nrow(data1) IN THE tempo.coord LIST (FOR TIDY DOT COORDINATES). CODE HAS TO BE MODIFIED")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else{
+dot.coord.tidy1 <- tempo.coord[[which(sapply(tempo.coord, FUN = nrow) == nrow(data1))[1]]] # the second being a blank dotplot with wrong coordinates. Thus take the first whatever situation
+dot.coord.tidy1$x <- as.numeric(dot.coord.tidy1$x) # because weird class
+dot.coord.tidy1$PANEL <- as.numeric(dot.coord.tidy1$PANEL) # because numbers as levels. But may be a problem is facet are reordered ?
+}
+# tempo.box.coord <- merge(box.coord, unique(dot.coord[, c("PANEL", "group", categ)]), by = c("PANEL", "group"), sort = FALSE) # not required anymore because box.coord already contains categ do not add dot.categ and tidy_group_coord here because the coordinates are for stats. Add the categ in box.coord. WARNING: by = c("PANEL", "group") without fill column because PANEL & group columns are enough as only one value of x column per group number in box.coord. Thus, no need to consider fill column
+# below inactivated because not true when dealing with dot.categ different from categ
+# if(nrow(tempo.box.coord) != nrow(box.coord)){
+# tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nTHE merge() FUNCTION DID NOT RETURN A CORRECT tempo.box.coord DATA FRAME. CODE HAS TO BE MODIFIED")
+# stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) # == in stop() to be able to add several messages between ==
+# }
+dot.coord.tidy2 <- merge(dot.coord.tidy1, box.coord[c("fill", "PANEL", "group", "x", categ)], by = c("PANEL", "group"), sort = FALSE) # send the coord of the boxes into the coord data.frame of the dots (in the column x.y).WARNING: by = c("PANEL", "group") without fill column because PANEL & group columns are enough as only one value of x column per group number in tempo.box.coord. Thus, no need to consider fill colum # DANGER: from here the fill.y and x.y (from tempo.box.coord) are not good in dot.coord.tidy2. It is ok because Categ1 Categ2 from tempo.box.coord are ok with the group column from dot.coord.tidy1. This is due to the fact that dot.coord.tidy resulting from geom_dotplot does not make the same groups as the other functions
+if(nrow(dot.coord.tidy2) != nrow(dot.coord)){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nTHE merge() FUNCTION DID NOT RETURN A CORRECT dot.coord.tidy2 DATA FRAME. CODE HAS TO BE MODIFIED")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# From here, check for dot.coord.tidy3 which wil be important for stat over the plot. WARNING: dot.categ has nothing to do here for stat coordinates. Thus, not in tempo.data1
+if(length(categ) == 1){
+tempo.data1 <- unique(data.frame(data1[categ[1]], group = as.integer(data1[, categ[1]]), stringsAsFactors = TRUE)) # categ[1] is factor
+names(tempo.data1)[names(tempo.data1) == categ[1]] <- paste0(categ[1], ".check")
+verif <- paste0(categ[1], ".check")
+}else if(length(categ) == 2){
+tempo.data1 <- unique(
+data.frame(
+data1[c(categ[1], categ[2])], 
+group = as.integer(factor(paste0(
+formatC(as.integer(data1[, categ[2]]), width = nchar(max(as.integer(data1[, categ[2]]), na.rm = TRUE)), flag = "0"), # convert factor into numeric with leading zero for proper ranking
+".", 
+formatC(as.integer(data1[, categ[1]]), width = nchar(max(as.integer(data1[, categ[1]]), na.rm = TRUE)), flag = "0")# convert factor into numeric with leading zero for proper ranking
+)), stringsAsFactors = TRUE) # merge the 2 formatC() to create a new factor. The convertion to integer should recreate the correct group number
+)
+) # categ[2] first if categ[2] is used to make the categories in ggplot and categ[1] is used to make the x-axis
+names(tempo.data1)[names(tempo.data1) == categ[1]] <- paste0(categ[1], ".check")
+names(tempo.data1)[names(tempo.data1) == categ[2]] <- paste0(categ[2], ".check")
+verif <- c(paste0(categ[1], ".check"), paste0(categ[2], ".check"))
+}else{
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 4")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+dot.coord.tidy3 <- merge(dot.coord.tidy2, tempo.data1, by = intersect("group", "group"), sort = FALSE) # send the factors of data1 into coord. WARNING: I have tested intersect("group", "group") instead of by = "group". May be come back to by = "group" in case of error. But I did this because of an error in dot.coord.rd3 above
+if(nrow(dot.coord.tidy3) != nrow(dot.coord) | ( ! fun_comp_2d(dot.coord.tidy3[categ], dot.coord.tidy3[verif])$identical.content)){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nTHE merge() FUNCTION DID NOT RETURN A CORRECT dot.coord.tidy3 DATA FRAME. CODE HAS TO BE MODIFIED")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# end coordinates of tidy dots
+}
+}
+# end dot display
+
+
+
+# boxplot display (if box.fill = FALSE, otherwise, already plotted above)
+if(box.fill == TRUE){
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "fill", name = box.legend.name, values = if(length(categ.color) == 1){rep(categ.color, length(unique(data1[, categ[length(categ)]])))}else{categ.color})) #, guide = ggplot2::guide_legend(override.aes = list(fill = levels(tempo.polygon$COLOR), color = "black")))) # values are the values of color (which is the border color in geom_box. WARNING: values = categ.color takes the numbers to make the colors if categ.color is a factor
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "color", name = box.legend.name, values = rep(hsv(0, 0, 0, alpha = box.alpha), length(unique(data1[, categ[length(categ)]]))))) # , guide = ggplot2::guide_legend(override.aes = list(color = "black", alpha = box.alpha)))) # values are the values of color (which is the border color in geom_box. WARNING: values = categ.color takes the numbers to make the colors if categ.color is a factor # outline of the polygon in black but with alpha
+}else{
+# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_boxplot(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, color = categ[length(categ)], fill = categ[length(categ)]), position = ggplot2::position_dodge(width = NULL), width = box.width, size = box.line.size, notch = box.notch, alpha = box.alpha, coef = if(box.whisker.kind == "no"){0}else if(box.whisker.kind == "std"){1.5}else if(box.whisker.kind == "max"){Inf}, outlier.shape = if( ! is.null(dot.color)){NA}else{21}, outlier.color = if( ! is.null(dot.color)){NA}else{if(dot.border.size == 0){NA}else{dot.border.color}}, outlier.fill = if( ! is.null(dot.color)){NA}else{NULL}, outlier.size = if( ! is.null(dot.color)){NA}else{dot.size}, outlier.stroke = if( ! is.null(dot.color)){NA}else{dot.border.size}, outlier.alpha = if( ! is.null(dot.color)){NA}else{dot.alpha})) # the color, size, etc. of the outliers are dealt here. outlier.color = NA to do not plot outliers when dots are already plotted
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_path(
+data = tempo.polygon, 
+mapping = ggplot2::aes_string(x = "X", y = "Y", group = "BOX", color = categ[length(categ)]), 
+size = box.line.size, 
+alpha = box.alpha, 
+lineend = "round", 
+linejoin = "round"
+))
+coord.names <- c(coord.names, "main.box")
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = if(box.notch == FALSE){X_BOX_INF}else{X_NOTCH_INF}, xend = if(box.notch == FALSE){X_BOX_SUP}else{X_NOTCH_SUP}, y = MEDIAN, yend = MEDIAN, group = categ[length(categ)]), color = stat$COLOR, size = box.line.size * 2, alpha = box.alpha)) # 
+coord.names <- c(coord.names, "median")
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X, xend = X, y = BOX_SUP, yend = WHISK_SUP, group = categ[length(categ)]), color = stat$COLOR, size = box.line.size, alpha = box.alpha)) # 
+coord.names <- c(coord.names, "sup.whisker")
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X, xend = X, y = BOX_INF, yend = WHISK_INF, group = categ[length(categ)]), color = stat$COLOR, size = box.line.size, alpha = box.alpha)) # 
+coord.names <- c(coord.names, "inf.whisker")
+if(box.whisker.width > 0){
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X_WHISK_INF, xend = X_WHISK_SUP, y = WHISK_SUP, yend = WHISK_SUP, group = categ[length(categ)]), color = stat$COLOR, size = box.line.size, alpha = box.alpha, lineend = "round")) # 
+coord.names <- c(coord.names, "sup.whisker.edge")
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X_WHISK_INF, xend = X_WHISK_SUP, y = WHISK_INF, yend = WHISK_INF, group = categ[length(categ)]), color = stat$COLOR, size = box.line.size, alpha = box.alpha, lineend = "round")) # 
+coord.names <- c(coord.names, "inf.whisker.edge")
+}
+if(box.mean == TRUE){
+# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point(data = stat, mapping = ggplot2::aes_string(x = "X", y = "MEAN", group = categ[length(categ)]), shape = 23, stroke = box.line.size * 2, color = stat$COLOR, size = box.mean.size, fill = NA, alpha = box.alpha)) # group used in aesthetic to do not have it in the legend. Here ggplot2::scale_discrete_manual() cannot be used because of the group easthetic
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_path(
+data = tempo.diamon.mean, 
+mapping = ggplot2::aes(x = X, y = Y, group = GROUP), 
+color = tempo.diamon.mean[, "COLOR"], 
+size = box.line.size * 2, 
+alpha = box.alpha, 
+lineend = "round", 
+linejoin = "round"
+))
+coord.names <- c(coord.names, "mean")
+}
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "fill", name = box.legend.name, values = rep(NA, length(unique(data1[, categ[length(categ)]]))))) #, guide = ggplot2::guide_legend(override.aes = list(color = categ.color)))) # values are the values of color (which is the border color in geom_box. WARNING: values = categ.color takes the numbers to make the colors if categ.color is a factor
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "color", name = box.legend.name, values = if(length(categ.color) == 1){rep(categ.color, length(unique(data1[, categ[length(categ)]])))}else{categ.color}, guide = ggplot2::guide_legend(override.aes = list(alpha = if(plot == TRUE & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){1}else{box.alpha})))) # , guide = ggplot2::guide_legend(override.aes = list(color = as.character(categ.color))))) # values are the values of color (which is the border color in geom_box. WARNING: values = categ.color takes the numbers to make the colors if categ.color is a factor
+if(plot == TRUE & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){ # if any Graph device already open and this device is "windows", or if no Graph device opened yet and we are on windows system -> prevention of alpha legend bug on windows using value 1
+# to avoid a bug on windows: if alpha argument is different from 1 for lines (transparency), then lines are not correctly displayed in the legend when using the R GUI (bug https://github.com/tidyverse/ggplot2/issues/2452). No bug when using a pdf
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") GRAPHIC DEVICE USED ON A WINDOWS SYSTEM ->\nTRANSPARENCY OF THE LINES IS INACTIVATED IN THE LEGEND TO PREVENT A WINDOWS DEPENDENT BUG (SEE https://github.com/tidyverse/ggplot2/issues/2452)\nTO OVERCOME THIS ON WINDOWS, USE ANOTHER DEVICE (pdf() FOR INSTANCE)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+# end boxplot display (if box.fill = FALSE, otherwise, already plotted above)
+
+
+
+
+# stat display
+# layer after dots but ok, behind dots on the plot
+if( ! is.null(stat.disp)){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NUMBERS ABOVE BOXES ARE ", ifelse(stat.disp.mean == FALSE, "MEDIANS", "MEANS"))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+if(stat.disp == "top"){
+tempo.stat <- data.frame(stat, Y = y.lim[2], stringsAsFactors = TRUE) # I had to create a data frame for geom_tex() so that facet is taken into account, (ggplot2::annotate() does not deal with facet because no data and mapping arguments). Of note, facet.categ is in tempo.stat, via tempo.mean, via dot.coord
+if(stat.disp.mean == FALSE){tempo.stat$MEDIAN <- formatC(stat.nolog$MEDIAN, digit = 2, drop0trailing = TRUE, format = "f")}else{tempo.stat$MEAN <- formatC(stat.nolog$MEAN, digit = 2, drop0trailing = TRUE, format = "f")}
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_text(
+data = tempo.stat, 
+mapping = ggplot2::aes_string(x = "X", y = "Y", label = ifelse(stat.disp.mean == FALSE, "MEDIAN", "MEAN")),
+size = stat.size, 
+color = "black", 
+angle = stat.angle, 
+hjust = stat.just$hjust, 
+vjust = stat.just$vjust
+)) # stat$X used here because identical to stat.nolog but has the X. WARNING: no need of order() for labels because box.coord$x set the order. For justification, see https://stackoverflow.com/questions/7263849/what-do-hjust-and-vjust-do-when-making-a-plot-using-ggplot
+coord.names <- c(coord.names, "stat.display")
+}else if(stat.disp == "above"){
+# stat coordinates
+if( ! is.null(dot.color)){ # for text just above max dot
+if(dot.tidy == FALSE){
+tempo.stat.ini <- dot.coord.rd3
+}else if(dot.tidy == TRUE){
+tempo.stat.ini <- dot.coord.tidy3
+tempo.stat.ini$x.y <- tempo.stat.ini$x.x # this is just to be able to use tempo.stat.ini$x.y for untidy or tidy dots (remember that dot.coord.tidy3$x.y is not good, see above)
+}
+stat.coord1 <- aggregate(x = tempo.stat.ini["y"], by = {x.env <- if(length(categ) == 1){list(tempo.stat.ini$group, tempo.stat.ini$PANEL, tempo.stat.ini$x.y, tempo.stat.ini[, categ[1]])}else if(length(categ) == 2){list(tempo.stat.ini$group, tempo.stat.ini$PANEL, tempo.stat.ini$x.y, tempo.stat.ini[, categ[1]], tempo.stat.ini[, categ[2]])} ; names(x.env) <- if(length(categ) == 1){c("group", "PANEL", "x.y", categ[1])}else if(length(categ) == 2){c("group", "PANEL", "x.y", categ[1], categ[2])} ; x.env}, FUN = min, na.rm = TRUE)
+names(stat.coord1)[names(stat.coord1) == "y"] <- "dot.min"
+stat.coord2 <- aggregate(x = tempo.stat.ini["y"], by = {x.env <- if(length(categ) == 1){list(tempo.stat.ini$group, tempo.stat.ini$PANEL, tempo.stat.ini$x.y, tempo.stat.ini[, categ[1]])}else if(length(categ) == 2){list(tempo.stat.ini$group, tempo.stat.ini$PANEL, tempo.stat.ini$x.y, tempo.stat.ini[, categ[1]], tempo.stat.ini[, categ[2]])} ; names(x.env) <- if(length(categ) == 1){c("group", "PANEL", "x.y", categ[1])}else if(length(categ) == 2){c("group", "PANEL", "x.y", categ[1], categ[2])} ; x.env}, FUN = max, na.rm = TRUE)
+names(stat.coord2) <- paste0(names(stat.coord2), "_from.dot.max")
+names(stat.coord2)[names(stat.coord2) == "y_from.dot.max"] <- "dot.max"
+stat.coord3 <- cbind(box.coord[order(box.coord$group, box.coord$PANEL), ], stat.coord1[order(stat.coord1$group, stat.coord1$x.y), ], stat.coord2[order(stat.coord2$group, stat.coord2$x.y), ], stringsAsFactors = TRUE) # 
+if( ! all(identical(round(stat.coord3$x, 9), round(as.numeric(stat.coord3$x.y), 9)))){ # as.numeric() because stat.coord3$x is class "mapped_discrete" "numeric"
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nFUSION OF box.coord, stat.coord1 AND stat.coord2 ACCORDING TO box.coord$x, stat.coord1$x.y AND stat.coord2$x.y IS NOT CORRECT. CODE HAS TO BE MODIFIED")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# text.coord <- stat.coord3[, c("x", "group", "dot.min", "dot.max")]
+# names(text.coord)[names(text.coord) == "dot.min"] <- "text.min.pos"
+#names(text.coord)[names(text.coord) == "dot.max"] <- "text.max.pos"
+box.coord <- box.coord[order(box.coord$x, box.coord$group, box.coord$PANEL), ]
+# text.coord <- text.coord[order(text.coord$x), ] # to be sure to have the two objects in the same order for x. WARNING: cannot add identical(as.integer(text.coord$group), as.integer(box.coord$group)) because with error, the correspondence between x and group is not the same
+stat.coord3 <- stat.coord3[order(stat.coord3$x, stat.coord3$group, stat.coord3$PANEL), ] # to be sure to have the two objects in the same order for x. WARNING: cannot add identical(as.integer(text.coord$group), as.integer(box.coord$group)) because with error, the correspondence between x and group is not the same
+if( ! (identical(box.coord$x, stat.coord3$x) & identical(box.coord$group, stat.coord3$group) & identical(box.coord$PANEL, stat.coord3$PANEL))){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\ntext.coord AND box.coord DO NOT HAVE THE SAME x, group AND PANEL COLUMN CONTENT")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}else{
+stat.coord3 <- box.coord
+}
+stat.coord3 <- data.frame(
+stat.coord3, 
+Y = stat.coord3[, ifelse(
+is.null(dot.color), 
+ifelse(diff(y.lim) > 0, "ymax", "ymin"), 
+ifelse(diff(y.lim) > 0, "ymax_final", "ymin_final"), 
+stringsAsFactors = TRUE)]
+) # ymax is top whisker, ymax_final is top dot
+# stat.coord3 <- data.frame(stat.coord3, Y = vector("numeric", length = nrow(stat.coord3)), stringsAsFactors = TRUE)
+# check.Y <- as.logical(stat.coord3$Y) # convert everything in Y into FALSE (because Y is full of zero)
+# end stat coordinates
+# stat display
+# performed twice: first for y values >=0, then y values < 0, because only a single value allowed for hjust anf vjust
+if(stat.disp.mean == FALSE){
+tempo.center.ref <- "middle"
+}else{
+tempo.center.ref <- "MEAN"
+}
+# if(is.null(dot.color)){
+# tempo.low.ref <- "ymin"
+# tempo.high.ref <- "ymax"
+# }else{
+# tempo.low.ref <- "ymin_final"
+# tempo.high.ref <- "ymax_final"
+# }
+# tempo.log.high <- if(diff(y.lim) > 0){stat.coord3[, tempo.center.ref] >= 0}else{stat.coord3[, tempo.center.ref] < 0}
+# tempo.log.low <- if(diff(y.lim) > 0){stat.coord3[, tempo.center.ref] < 0}else{stat.coord3[, tempo.center.ref] >= 0}
+# stat.coord3$Y[tempo.log.high] <- stat.coord3[tempo.log.high, tempo.high.ref]
+# stat.coord3$Y[tempo.log.low] <- stat.coord3[tempo.log.low, tempo.low.ref]
+# add distance
+stat.coord3$Y <- stat.coord3$Y + diff(y.lim) * stat.dist / 100
+# end add distance
+# correct median or mean text format
+if(y.log != "no"){
+stat.coord3[, tempo.center.ref] <- ifelse(y.log == "log2", 2, 10)^(stat.coord3[, tempo.center.ref])
+}
+stat.coord3[, tempo.center.ref] <- formatC(stat.coord3[, tempo.center.ref], digit = 2, drop0trailing = TRUE, format = "f")
+# end correct median or mean text format
+# if(any(tempo.log.high) == TRUE){
+# tempo.stat <- stat.coord3[tempo.log.high,]
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_text(
+data = stat.coord3, 
+mapping = ggplot2::aes_string(x = "x", y = "Y", label = tempo.center.ref),
+size = stat.size, 
+color = "black", 
+angle = stat.angle, 
+hjust = stat.just$hjust, 
+vjust = stat.just$vjust
+)) # WARNING: no need of order() for labels because box.coord$x set the order
+coord.names <- c(coord.names, "stat.display")
+# }
+# if(any(tempo.log.low) == TRUE){
+# tempo.stat <- stat.coord3[tempo.log.low,]
+# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_text(
+# data = tempo.stat, 
+# mapping = ggplot2::aes_string(x = "x", y = "Y", label = tempo.center.ref),
+# size = stat.size, 
+# color = "black", 
+# hjust = ifelse(vertical == TRUE, 0.5, 0.5 + stat.dist), 
+# vjust = ifelse(vertical == TRUE, 0.5 + stat.dist, 0.5)
+# )) # WARNING: no need of order() for labels because box.coord$x set the order
+# coord.names <- c(coord.names, "stat.display.negative")
+# }
+# end stat display
+}else{
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 5")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+}
+# end stat display
+# legend management
+if(legend.show == FALSE){ # must be here because must be before bef.final.plot <- 
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::guides(fill = FALSE, color = FALSE, alpha = FALSE)) # inactivate the initial legend
+}
+# end legend management
+
+
+
+# y scale management (cannot be before dot plot management)
+# the rescaling aspect is complicated and not intuitive. See:
+# explaination: https://github.com/tidyverse/ggplot2/issues/3948
+# the oob argument of scale_y_continuous() https://ggplot2.tidyverse.org/reference/scale_continuous.html
+# see also https://github.com/rstudio/cheatsheets/blob/master/data-visualization-2.1.pdf
+# secondary ticks
+bef.final.plot <- ggplot2::ggplot_build(eval(parse(text = paste(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), ' + if(vertical == TRUE){ggplot2::scale_y_continuous(expand = c(0, 0), limits = sort(y.lim), oob = scales::rescale_none)}else{ggplot2::coord_flip(ylim = y.lim)}')))) # here I do not need the x-axis and y-axis orientation, I just need the number of main ticks and the legend
+tempo.coord <- bef.final.plot$layout$panel_params[[1]]
+# y.second.tick.positions: coordinates of secondary ticks (only if y.second.tick.nb argument is non NULL or if y.log argument is different from "no")
+if(y.log != "no"){ # integer main ticks for log2 and log10
+tempo.scale <- (as.integer(min(y.lim, na.rm = TRUE)) - 1):(as.integer(max(y.lim, na.rm = TRUE)) + 1)
+}else{
+tempo <- if(is.null(attributes(tempo.coord$y$breaks))){tempo.coord$y$breaks}else{unlist(attributes(tempo.coord$y$breaks))}
+if(all(is.na(tempo))){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nONLY NA IN tempo.coord$y$breaks")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+tempo.scale <- fun_scale(lim = y.lim, n = ifelse(is.null(y.tick.nb), length(tempo[ ! is.na(tempo)]), y.tick.nb)) # in ggplot 3.3.0, tempo.coord$y.major_source replaced by tempo.coord$y$breaks. If fact: n = ifelse(is.null(y.tick.nb), length(tempo[ ! is.na(tempo)]), y.tick.nb)) replaced by n = ifelse(is.null(y.tick.nb), 4, y.tick.nb))
+}
+y.second.tick.values <- NULL
+y.second.tick.pos <- NULL
+if(y.log != "no"){
+tempo <- fun_inter_ticks(lim = y.lim, log = y.log)
+y.second.tick.values <- tempo$values
+y.second.tick.pos <- tempo$coordinates
+# if(vertical == TRUE){ # do not remove in case the bug is fixed
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(geom = "segment", y = y.second.tick.pos, yend = y.second.tick.pos, x = tempo.coord$x.range[1], xend = tempo.coord$x.range[1] + diff(tempo.coord$x.range) / 80))
+# }else{ # not working because of the ggplot2 bug
+# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(geom = "segment", x = y.second.tick.pos, xend = y.second.tick.pos, y = tempo.coord$y.range[1], yend = tempo.coord$y.range[1] + diff(tempo.coord$y.range) / 80))
+# }
+coord.names <- c(coord.names, "y.second.tick.positions")
+}else if(( ! is.null(y.second.tick.nb)) & y.log == "no"){
+# if(y.second.tick.nb > 0){ #inactivated because already checked before
+tempo <- fun_inter_ticks(lim = y.lim, log = y.log, breaks = tempo.scale, n = y.second.tick.nb)
+y.second.tick.values <- tempo$values
+y.second.tick.pos <- tempo$coordinates
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(
+geom = "segment", 
+y = y.second.tick.pos, 
+yend = y.second.tick.pos, 
+x = if(vertical == TRUE){tempo.coord$x.range[1]}else{tempo.coord$y.range[1]}, 
+xend = if(vertical == TRUE){tempo.coord$x.range[1] + diff(tempo.coord$x.range) / 80}else{tempo.coord$y.range[1] + diff(tempo.coord$y.range) / 80}
+))
+coord.names <- c(coord.names, "y.second.tick.positions")
+}
+# end y.second.tick.positions
+# for the ggplot2 bug with y.log, this does not work: eval(parse(text = ifelse(vertical == FALSE & y.log == "log10", "ggplot2::scale_x_continuous", "ggplot2::scale_y_continuous")))
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_y_continuous(
+breaks = tempo.scale, 
+minor_breaks = y.second.tick.pos, 
+labels = if(y.log == "log10"){scales::trans_format("identity", scales::math_format(10^.x))}else if(y.log == "log2"){scales::trans_format("identity", scales::math_format(2^.x))}else if(y.log == "no"){ggplot2::waiver()}else{tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 6") ; stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)}, # == in stop() to be able to add several messages between ==
+expand = c(0, 0), # remove space after after axis limits
+limits = sort(y.lim), # NA indicate that limits must correspond to data limits but ylim() already used
+oob = scales::rescale_none, 
+trans = ifelse(diff(y.lim) < 0, "reverse", "identity") # equivalent to ggplot2::scale_y_reverse() but create the problem of y-axis label disappearance with y.lim decreasing. Thus, do not use. Use ylim() below and after this
+))
+if(vertical == TRUE){
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::coord_cartesian(ylim = y.lim)) #problem of ggplot2::ylim() is taht it redraw new breaks # coord_cartesian(ylim = y.lim)) not used because bug -> y-axis label disappearance with y.lim decreasing # clip = "off" to have secondary ticks outside plot region does not work
+}else{
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::coord_flip(ylim = y.lim)) # clip = "off" to have secondary ticks outside plot region does not work # create the problem of y-axis label disappearance with y.lim decreasing
+
+}
+# end y scale management (cannot be before dot plot management)
+
+
+# legend management
+if( ! is.null(legend.width)){
+legend.final <- fun_gg_get_legend(ggplot_built = bef.final.plot, fun.name = function.name, lib.path = lib.path) # get legend
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::guides(fill = FALSE, color = FALSE, alpha = FALSE)) # inactivate the initial legend
+if(is.null(legend.final) & plot == TRUE){ # even if any(unlist(legend.disp)) is TRUE
+legend.final <- ggplot2::ggplot()+ggplot2::theme_void() # empty graph instead of legend
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") LEGEND REQUESTED (NON NULL categ ARGUMENT OR legend.show ARGUMENT SET TO TRUE)\nBUT IT SEEMS THAT THE PLOT HAS NO LEGEND -> EMPTY LEGEND SPACE CREATED BECAUSE OF THE NON NULL legend.width ARGUMENT\n")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+# end legend management
+
+
+# drawing
+fin.plot <- suppressMessages(suppressWarnings(eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + ")))))
+grob.save <- NULL
+if(plot == TRUE){
+# following lines inactivated because of problem in warn.recov and message.recov
+# assign("env_fun_get_message", new.env())
+# assign("tempo.gg.name", tempo.gg.name, envir = env_fun_get_message)
+# assign("tempo.gg.count", tempo.gg.count, envir = env_fun_get_message)
+# assign("add", add, envir = env_fun_get_message)
+# two next line: for the moment, I cannot prevent the warning printing
+# warn.recov <- fun_get_message(paste(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), if(is.null(add)){NULL}else{add}), kind = "warning", header = FALSE, print.no = FALSE, env = env_fun_get_message) # for recovering warnings printed by ggplot() functions
+# message.recov <- fun_get_message('print(eval(parse(text = paste(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), if(is.null(add)){NULL}else{add}))))', kind = "message", header = FALSE, print.no = FALSE, env = env_fun_get_message) # for recovering messages printed by ggplot() functions
+# if( ! (return == TRUE & return.ggplot == TRUE)){ # because return() plots when return.ggplot is TRUE # finally not used -> see return.ggplot description
+if(is.null(legend.width)){
+grob.save <- suppressMessages(suppressWarnings(gridExtra::grid.arrange(fin.plot)))
+}else{
+grob.save <-suppressMessages(suppressWarnings(gridExtra::grid.arrange(fin.plot, legend.final, ncol=2, widths=c(1, legend.width))))
+}
+# }
+# suppressMessages(suppressWarnings(print(eval(parse(text = paste(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), if(is.null(add)){NULL}else{add}))))))
+}else{
+# following lines inactivated because of problem in warn.recov and message.recov
+# message.recov <- NULL
+# warn.recov <- NULL
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") PLOT NOT SHOWN AS REQUESTED")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# end drawing
+
+
+
+# outputs
+# following lines inactivated because of problem in warn.recov and message.recov
+# if( ! (is.null(warn) & is.null(warn.recov) & is.null(message.recov))){
+# warn <- paste0(warn, "\n\n", if(length(warn.recov) > 0 | length(message.recov) > 0){paste0(paste0("MESSAGES FROM ggplot2 FUNCTIONS: ", ifelse( ! is.null(warn.recov), unique(message.recov), ""), ifelse( ! is.null(message.recov), unique(message.recov), ""), collapse = "\n\n"), "\n\n")})
+# }else if( ! (is.null(warn) & is.null(warn.recov)) & is.null(message.recov)){
+# warn <- paste0(warn, "\n\n", if(length(warn.recov) > 0){paste0(paste0("MESSAGES FROM ggplot2 FUNCTIONS: ", unique(warn.recov), collapse = "\n\n"), "\n\n")})
+# }else if( ! (is.null(warn) & is.null(message.recov)) & is.null(warn.recov)){
+# warn <- paste0(warn, "\n\n", if(length(message.recov) > 0){paste0(paste0("MESSAGES FROM ggplot2 FUNCTIONS: ", unique(message.recov), collapse = "\n\n"), "\n\n")})
+# }
+if(warn.print == TRUE & ! is.null(warn)){
+warning(paste0("FROM ", function.name, ":\n\n", warn), call. = FALSE)
+}
+if(return == TRUE){
+tempo.output <- ggplot2::ggplot_build(fin.plot)
+tempo.output$data <- tempo.output$data[-1] # remove the first data because corresponds to the initial empty boxplot
+if(length(tempo.output$data) != length(coord.names)){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nlength(tempo.output$data) AND length(coord.names) MUST BE IDENTICAL. CODE HAS TO BE MODIFIED")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE) # == in stop() to be able to add several messages between ==
+}else{
+names(tempo.output$data) <- coord.names
+tempo.output$data <- tempo.output$data[coord.names != "bad_remove"]
+}
+tempo <- tempo.output$layout$panel_params[[1]]
+output <- list(
+data = data1.ini, 
+stat = stat.nolog, 
+removed.row.nb = removed.row.nb, 
+removed.rows = removed.rows, 
+plot = c(tempo.output$data, y.second.tick.values = list(y.second.tick.values)), 
+panel = facet.categ, 
+axes = list(
+x.range = tempo$x.range, 
+x.labels = if(is.null(attributes(tempo$x$breaks))){tempo$x$breaks}else{tempo$x$scale$get_labels()}, # is.null(attributes(tempo$x$breaks)) test if it is number (TRUE) or character (FALSE)
+x.positions = if(is.null(attributes(tempo$x$breaks))){tempo$x$breaks}else{unlist(attributes(tempo$x$breaks))}, 
+y.range = tempo$y.range, 
+y.labels = if(is.null(attributes(tempo$y$breaks))){tempo$y$breaks}else{tempo$y$scale$get_labels()}, 
+y.positions = if(is.null(attributes(tempo$y$breaks))){tempo$y$breaks}else{unlist(attributes(tempo$y$breaks))}
+), 
+warn = paste0("\n", warn, "\n\n"), 
+ggplot = if(return.ggplot == TRUE){fin.plot}else{NULL}, # fin.plot plots the graph if return == TRUE
+gtable = if(return.gtable == TRUE){grob.save}else{NULL} 
+)
+return(output) # this plots the graph if return.ggplot is TRUE and if no assignment
+}
+# end outputs
+# end main code
+}
+
+
+
+
+
+
+
+
+fun_gg_scatter <- function(
+data1, 
+x, 
+y, 
+categ = NULL, 
+categ.class.order = NULL, 
+color = NULL, 
+geom = "geom_point", 
+geom.step.dir = "hv", 
+alpha = 0.5, 
+dot.size = 2, 
+dot.shape = 21, 
+dot.border.size = 0.5, 
+dot.border.color = NULL, 
+line.size = 0.5, 
+line.type = "solid", 
+x.lim = NULL, 
+x.lab = NULL, 
+x.log = "no", 
+x.tick.nb = NULL, 
+x.second.tick.nb = NULL, 
+x.include.zero = FALSE, 
+x.left.extra.margin = 0.05, 
+x.right.extra.margin = 0.05, 
+x.text.angle = 0, 
+y.lim = NULL, 
+y.lab = NULL, 
+y.log = "no", 
+y.tick.nb = NULL, 
+y.second.tick.nb = NULL, 
+y.include.zero = FALSE, 
+y.top.extra.margin = 0.05, 
+y.bottom.extra.margin = 0.05, 
+y.text.angle = 0, 
+text.size = 12, 
+title = "", 
+title.text.size = 12, 
+legend.show = TRUE, 
+legend.width = 0.5, 
+legend.name = NULL, 
+raster = FALSE, 
+raster.ratio = 1, 
+raster.threshold = NULL, 
+article = TRUE, 
+grid = FALSE, 
+return = FALSE, 
+return.ggplot = FALSE,
+return.gtable = TRUE,
+plot = TRUE, 
+add = NULL, 
+warn.print = FALSE, 
+lib.path = NULL
+){
+# AIM
+# plot ggplot2 scatterplot with the possibility to overlay dots from up to 3 different data frames (-> three different legends) and lines from up to 3 different data frames (-> three different legends) -> up to 6 overlays totally
+# for ggplot2 specifications, see: https://ggplot2.tidyverse.org/articles/ggplot2-specs.html
+# WARNINGS
+# Rows containing NA in data1[, c(x, y, categ)] will be removed before processing, with a warning (see below)
+# Size arguments (dot.size, dot.border.size, line.size, text.size and title.text.size) are in mm. See Hadley comment in https://stackoverflow.com/questions/17311917/ggplot2-the-unit-of-size. See also http://sape.inf.usi.ch/quick-reference/ggplot2/size). Unit object are not accepted, but conversion can be used (e.g., grid::convertUnit(grid::unit(0.2, "inches"), "mm", valueOnly = TRUE))
+# ARGUMENTS
+# data1: a dataframe compatible with ggplot2, or a list of data frames
+# x: single character string of the data1 column name for x-axis coordinates. If data1 is a list, then x must be a list of single character strings, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. Write NULL for each "geom_hline" in geom argument
+# y: single character string of the data1 column name for y-axis coordinates. If data1 is a list, then y must be a list of single character strings, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. Write NULL for each "geom_vline" in geom argument
+# categ: either NULL or a single character string or a list of single character strings, indicating the data1 column names to use for categories which creates legend display
+# If categ == NULL, no categories -> no legend displayed
+# If data1 is a data frame, categ must be a single character string of the data1 column name for categories
+# If data1 is a list, then categ must be a list of single character strings, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. Some of the list compartments can be NULL (no legend display for these compartments), and other not
+# categ.class.order: either (1) NULL or (2) a vector of character strings or (3) a list of these vectors, setting the order of the classes of categ in the legend display
+# If categ.class.order is NULL, classes are represented according to the alphabetical order
+# If data1 is a data frame, categ.class.order must be a vector of character strings specifying the different classes in the categ column name of data1
+# If data1 is a list, then categ.class.order must be a list of vector of character strings, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. Some of the list compartments can be NULL (alphabetical order for these compartments), and other not
+# color: either (1) NULL, or (2) a vector of character strings or integers, or (3) a list of vectors of character strings or integers
+# If color is NULL, default colors of ggplot2
+# If data1 is a data frame, color argument can be either:
+# (1) a single color string. All the dots of the corresponding data1 will have this color, whatever the categ value (NULL or not)
+# (2) if categ is non-null, a vector of string colors, one for each class of categ. Each color will be associated according to the categ.class.order argument if specified, or to the alphabetical order of categ classes otherwise
+# (3) if categ is non-null, a vector or factor of string colors, like if it was one of the column of data1 data frame. WARNING: a single color per class of categ and a single class of categ per color must be respected
+# Integers are also accepted instead of character strings, as long as above rules about length are respected. Integers will be processed by fun_gg_palette() using the max integer value among all the integers in color (see fun_gg_palette())
+# If data1 is a list, then color argument must be either: 
+# (1) a list of character strings or integers, of same size as data1, with compartment 1 related to compartment 1 of data1, etc.
+# (2) a single character string or a single integer
+# With a list (first possibility), the rules described for when data1 is a data frame apply to each compartment of the list. Some of the compartments can be NULL. In that case, a different grey color will be used for each NULL compartment. With a single value (second possibility), the same color will be used for all the dots and lines, whatever the data1 list
+# geom: single character string of the kind of plot, or a list of single character strings
+# Either:
+# "geom_point" (scatterplot)
+# "geom_line" (coordinates plotted then line connection from the lowest to highest coordinates)
+# "geom_path" (coordinates plotted then line connection respecting the order in data1)
+# "geom_step" coordinates plotted then line connection respecting the order in data1 but drawn in steps). See the geom.step.dir argument
+# "geom_hline" (horizontal line, no x value provided)
+# "geom_vline" (vertical line, no y value provided)
+# "geom_stick" (dots as vertical bars)
+# If data1 is a list, then geom must be either:
+# (1) a list of single character strings, of same size as data1, with compartment 1 related to compartment 1 of data1, etc.
+# (2) a single character string. In that case the same kind of plot will apply for the different compartments of the data1 list
+# WARNING concerning "geom_hline" or "geom_vline":
+# (1) x or y argument must be NULL, respectively
+# (2) x.lim or y.lim argument must NOT be NULL, respectively, if only these kind of lines are drawn (if other geom present, then x.lim = NULL and y.lim = NULL will generate x.lim and y.lim defined by these other geom, which is not possible with "geom_hline" or "geom_vline" alone)
+# (3) the function will draw n lines for n values in the x argument column name of the data1 data frame. If several colors required, the categ argument must be specified and the corresponding categ column name must exist in the data1 data frame with a different class name for each row
+# geom.step.dir: single character string indicating the direction when using "geom_step" of the geom argument, or a list of single character strings
+# Either:
+# "vh" (vertical then horizontal)
+# "hv" (horizontal then vertical)
+# "mid" (step half-way between adjacent x-values)
+# See https://ggplot2.tidyverse.org/reference/geom_path.html
+# If data1 is a list, then geom must be either:
+# (1) a list of single character strings, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. The value in compartments related to other geom values than "geom_step" will be ignored
+# (2) a single character string, which will be used for all the "geom_step" values of the geom argument, whatever the data1 list
+# alpha: single numeric value (from 0 to 1) of transparency. If data1 is a list, then alpha must be either (1) a list of single numeric values, of same size as data1, with compartment 1 related to compartment 1 of data1, etc., or (2) a single numeric value. In that case the same transparency will apply for the different compartments of the data1 list
+# dot.size: single numeric value of dot diameter in mm. If data1 is a list, then dot.size must be either (1) a list of single numeric values, of same size as data1, with compartment 1 related to compartment 1 of data1, etc., or (2) a single numeric value. With a list (former possibility), the value in compartments related to lines will be ignored. With a single value (latter possibility), the same dot.size will be used for all the dots, whatever the data1 list
+# dot.shape: value indicating the shape of the dots (see https://ggplot2.tidyverse.org/articles/ggplot2-specs.html) If data1 is a list, then dot.shape must be either (1) a list of single shape values, of same size as data1, with compartment 1 related to compartment 1 of data1, etc., or (2) a single shape value. With a list (former possibility), the value in compartments related to lines will be ignored. With a single value (latter possibility), the same dot.shape will be used for all the dots, whatever the data1 list
+# dot.border.size: single numeric value of border dot width in mm. Write zero for no dot border. If data1 is a list, then dot.border.size must be either (1) a list of single numeric values, of same size as data1, with compartment 1 related to compartment 1 of data1, etc., or (2) a single numeric value. With a list (former possibility), the value in compartments related to lines will be ignored. With a single value (latter possibility), the same dot.border.size will be used for all the dots, whatever the data1 list
+# dot.border.color: single character color string defining the color of the dot border (same border color for all the dots, whatever their categories). If dot.border.color == NULL, the border color will be the same as the dot color. A single integer is also accepted instead of a character string, that will be processed by fun_gg_palette()
+# line.size: single numeric value of line width in mm. If data1 is a list, then line.size must be either (1) a list of single numeric values, of same size as data1, with compartment 1 related to compartment 1 of data1, etc., or (2) a single numeric value. With a list (former possibility), the value in compartments related to dots will be ignored. With a single value (latter possibility), the same line.size will be used for all the lines, whatever the data1 list
+# line.type: value indicating the kind of lines (see https://ggplot2.tidyverse.org/articles/ggplot2-specs.html) If data1 is a list, then line.type must be either (1) a list of single line kind values, of same size as data1, with compartment 1 related to compartment 1 of data1, etc., or (2) a single line kind value. With a list (former possibility), the value in compartments related to dots will be ignored. With a single value (latter possibility), the same line.type will be used for all the lines, whatever the data1 list
+# x.lim: 2 numeric values setting the x-axis range. Order of the 2 values matters (for inverted axis). If NULL, the range of the x column name of data1 will be used
+# x.lab: a character string or expression for x-axis label. If NULL, will use the first value of x (x column name of the first data frame in data1). Warning message if the elements in x are different between data frames in data1
+# x.log: either "no", "log2" (values in the x column name of the data1 data frame will be log2 transformed and x-axis will be log2 scaled) or "log10" (values in the x column name of the data1 data frame will be log10 transformed and x-axis will be log10 scaled)
+# x.tick.nb: approximate number of desired values labeling the x-axis (i.e., main ticks, see the n argument of the the cute::fun_scale() function). If NULL and if x.log is "no", then the number of labeling values is set by ggplot2. If NULL and if x.log is "log2" or "log10", then the number of labeling values corresponds to all the exposant integers in the x.lim range (e.g., 10^1, 10^2 and 10^3, meaning 3 main ticks for x.lim = c(9, 1200)). WARNING: if non-NULL and if x.log is "log2" or "log10", labeling can be difficult to read (e.g., ..., 10^2, 10^2.5, 10^3, ...)
+# x.second.tick.nb: number of desired secondary ticks between main ticks. Ignored if x.log is other than "no" (log scale plotted). Use argument return = TRUE and see $plot$x.second.tick.values to have the values associated to secondary ticks. IF NULL, no secondary ticks
+# x.include.zero: logical. Does x.lim range include 0? Ignored if x.log is "log2" or "log10"
+# x.left.extra.margin: single proportion (between 0 and 1) indicating if extra margins must be added to x.lim. If different from 0, add the range of the axis multiplied by x.left.extra.margin (e.g., abs(x.lim[2] - x.lim[1]) * x.left.extra.margin) to the left of x-axis
+# x.right.extra.margin: idem as x.left.extra.margin but to the right of x-axis
+# x.text.angle: integer value of the text angle for the x-axis labeling values, using the same rules as in ggplot2. Use positive value for clockwise rotation: 0 for horizontal, 90 for vertical, 180 for upside down etc. Use negative values for counterclockwise rotation: 0 for horizontal, -90 for vertical, -180 for upside down etc.
+# y.lim: 2 numeric values setting the y-axis range. Order of the 2 values matters (for inverted axis). If NULL, the range of the y column name of data1 will be used
+# y.lab: a character string or expression for y-axis label. If NULL, will use the first value of y (y column name of the first data frame in data1). Warning message if the elements in y are different between data frames in data1
+# y.log: either "no", "log2" (values in the y column name of the data1 data frame will be log2 transformed and y-axis will be log2 scaled) or "log10" (values in the y column name of the data1 data frame will be log10 transformed and y-axis will be log10 scaled)
+# y.tick.nb: approximate number of desired values labeling the y-axis (i.e., main ticks, see the n argument of the the cute::fun_scale() function). If NULL and if y.log is "no", then the number of labeling values is set by ggplot2. If NULL and if y.log is "log2" or "log10", then the number of labeling values corresponds to all the exposant integers in the y.lim range (e.g., 10^1, 10^2 and 10^3, meaning 3 main ticks for y.lim = c(9, 1200)). WARNING: if non-NULL and if y.log is "log2" or "log10", labeling can be difficult to read (e.g., ..., 10^2, 10^2.5, 10^3, ...)
+# y.second.tick.nb: number of desired secondary ticks between main ticks. Ignored if y.log is other than "no" (log scale plotted). Use argument return = TRUE and see $plot$y.second.tick.values to have the values associated to secondary ticks. IF NULL, no secondary ticks
+# y.include.zero: logical. Does y.lim range include 0? Ignored if y.log is "log2" or "log10"
+# y.top.extra.margin: single proportion (between 0 and 1) indicating if extra margins must be added to y.lim. If different from 0, add the range of the axis multiplied by y.top.extra.margin (e.g., abs(y.lim[2] - y.lim[1]) * y.top.extra.margin) to the top of y-axis
+# y.bottom.extra.margin: idem as y.top.extra.margin but to the bottom of y-axis
+# y.text.angle: integer value of the text angle for the y-axis labeling values, using the same rules as in ggplot2. Use positive value for clockwise rotation: 0 for horizontal, 90 for vertical, 180 for upside down etc. Use negative values for counterclockwise rotation: 0 for horizontal, -90 for vertical, -180 for upside down etc.
+# text.size: numeric value of the font size of the (1) axis numbers and axis legends and (2) texts in the graphic legend (in mm)
+# title: character string of the graph title
+# title.text.size: numeric value of the title font size in mm
+# legend.show: logical. Show legend? Not considered if categ argument is NULL, because this already generate no legend, excepted if legend.width argument is non-NULL. In that specific case (categ is NULL, legend.show is TRUE and legend.width is non-NULL), an empty legend space is created. This can be useful when desiring graphs of exactly the same width, whatever they have legends or not
+# legend.width: single proportion (between 0 and 1) indicating the relative width of the legend sector (on the right of the plot) relative to the width of the plot. Value 1 means that the window device width is split in 2, half for the plot and half for the legend. Value 0 means no room for the legend, which will overlay the plot region. Write NULL to inactivate the legend sector. In such case, ggplot2 will manage the room required for the legend display, meaning that the width of the plotting region can vary between graphs, depending on the text in the legend
+# legend.name: character string of the legend title. If legend.name is NULL and categ argument is not NULL, then legend.name <- categ. If data1 is a list, then legend.name must be a list of character strings, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. Some of the list compartments can be NULL, and other not
+# raster: logical. Dots in raster mode? If FALSE, dots from each "geom_point" from geom argument are plotted in vectorial mode (bigger pdf and long to display if lots of dots). If TRUE, dots from each "geom_point" from geom argument are plotted in matricial mode (smaller pdf and easy display if lots of dots, but it takes time to generate the layer). If TRUE, the raster.ratio argument is used to avoid an ellipsoid representation of the dots. If TRUE, solve the transparency problem with some GUI. Overriden by the non-NULL raster.threshold argument
+# raster.ratio: single numeric value indicating the height / width ratio of the graphic device used (for instance provided by the $dim compartment in the output of the fun_open() function). The default value is 1 because by default R opens a square graphic device. But this argument has to be set when using other device dimensions. Ignored if raster == FALSE
+# raster.threshold: positive integer value indicating the limit of the dot number above which "geom_point" layers from the geom argument switch from vectorial mode to matricial mode (see the raster argument). If any layer is matricial, then the raster.ratio argument is used to avoid an ellipsoid representation of the dots. If non-NULL, it overrides the raster argument
+# article: logical. If TRUE, use an article theme (article like). If FALSE, use a classic related ggplot theme. Use the add argument (e.g., add = "+ggplot2::theme_classic()" for the exact classic ggplot theme
+# grid: logical. Draw lines in the background to better read the box values? Not considered if article == FALSE (grid systematically present)
+# return: logical. Return the graph parameters?
+# return.ggplot: logical. Return the ggplot object in the output list? Ignored if return argument is FALSE. WARNING: always assign the fun_gg_scatter() function (e.g., a <- fun_gg_scatter()) if return.ggplot argument is TRUE, otherwise, double plotting is performed. See $ggplot in the RETURN section below for more details
+# return.gtable: logical. Return the ggplot object as gtable of grobs in the output list? Ignored if plot argument is FALSE. Indeed, the graph must be plotted to get the grobs dispositions. See $gtable in the RETURN section below for more details
+# plot: logical. Plot the graphic? If FALSE and return argument is TRUE, graphical parameters and associated warnings are provided without plotting
+# add: character string allowing to add more ggplot2 features (dots, lines, themes, facet, etc.). Ignored if NULL
+# WARNING: (1) the string must start with "+", (2) the string must finish with ")" and (3) each function must be preceded by "ggplot2::". Example: "+ ggplot2::coord_flip() + ggplot2::theme_bw()"
+# If the character string contains the "ggplot2::theme" string, then the article argument of fun_gg_scatter() (see above) is ignored with a warning
+# Handle the add argument with caution since added functions can create conflicts with the preexisting internal ggplot2 functions
+# WARNING: the call of objects inside the quotes of add can lead to an error if the name of these objects are some of the fun_gg_scatter() arguments. Indeed, the function will use the internal argument instead of the global environment object. Example article <- "a" in the working environment and add = '+ ggplot2::ggtitle(article)'. The risk here is to have TRUE as title. To solve this, use add = '+ ggplot2::ggtitle(get("article", envir = .GlobalEnv))'
+# warn.print: logical. Print warnings at the end of the execution? ? If FALSE, warning messages are never printed, but can still be recovered in the returned list. Some of the warning messages (those delivered by the internal ggplot2 functions) are not apparent when using the argument plot = FALSE
+# lib.path: character string indicating the absolute path of the required packages (see below). if NULL, the function will use the R library default folders
+# REQUIRED PACKAGES
+# ggplot2
+# scales
+# if raster plots are drawn (see the raster and raster.threshold arguments):
+# Cairo
+# grid
+# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION
+# fun_gg_empty_graph()
+# fun_gg_palette()
+# fun_gg_point_rast()
+# fun_pack()
+# fun_check()
+# fun_round()
+# fun_scale()
+# fun_inter_ticks()
+# RETURN
+# a scatter plot if plot argument is TRUE
+# a list of the graph info if return argument is TRUE:
+# $data: the initial data with graphic information added. WARNING: if the x.log or y.log argument is not "no", x or y argument column of the data1 data frame are log2 or log10 converted in $data, respectively. Use 2^values or 10^$values to recover the initial values
+# $removed.row.nb: a list of the removed rows numbers in data frames (because of NA). NULL if no row removed
+# $removed.rows: a list of the removed rows in data frames (because of NA). NULL if no row removed
+# $plot: the graphic box and dot coordinates
+# $dots: dot coordinates
+# y.second.tick.positions: coordinates of secondary ticks (only if y.second.tick.nb argument is non-null or if y.log argument is different from "no")
+# y.second.tick.values: values of secondary ticks. NULL except if y.second.tick.nb argument is non-null or if y.log argument is different from "no")
+# $panel: the variable names used for the panels (NULL if no panels). WARNING: NA can be present according to ggplot2 upgrade to v3.3.0
+# $axes: the x-axis and y-axis info
+# $warn: the warning messages. Use cat() for proper display. NULL if no warning. WARNING: warning messages delivered by the internal ggplot2 functions are not apparent when using the argument plot = FALSE
+# $ggplot: ggplot object that can be used for reprint (use print($ggplot) or update (use $ggplot + ggplot2::...). NULL if return.ggplot argument is FALSE. Of note, a non-null $ggplot in the output list is sometimes annoying as the manipulation of this list prints the plot
+# $gtable: gtable object that can be used for reprint (use gridExtra::grid.arrange(...$ggplot) or with additionnal grobs (see the grob decomposition in the examples). NULL if return.ggplot argument is FALSE. Contrary to $ggplot, a non-NULL $gtable in the output list is not annoying as the manipulation of this list does not print the plot
+# EXAMPLES
+# DEBUGGING
+# set.seed(1) ; obs1 <- data.frame(km = rnorm(1000, 10, 3), time = rnorm(1000, 10, 3), group1 = rep(c("A1", "A2"), 500), stringsAsFactors = TRUE) ; obs2 <-data.frame(km = rnorm(1000, 15, 3), time = rnorm(1000, 15, 3), group2 = rep(c("G1", "G2"), 500), stringsAsFactors = TRUE) ; set.seed(NULL) ; obs1$km[2:3] <- NA ; data1 = list(L1 = obs1, L2 = obs2) ; x = list(L1 = "km", L2 = "km") ; y = list(L1 = "time", L2 = "time") ; categ = list(L1 = "group1", L2 = "group2") ; categ.class.order = NULL ; legend.name = NULL ; color = list(L1 = 4:5, L2 = 7:8) ; geom = list(L1 = "geom_point", L2 = "geom_point") ; geom.step.dir = "hv" ; alpha = list(L1 = 0.5, L2 = 0.5) ; dot.size = 3 ; dot.shape = 21 ; dot.border.size = 0.5 ; dot.border.color = NULL ; line.size = 0.5 ; line.type = "solid" ; x.lim = NULL ; x.lab = "KM" ; x.log = "no" ; x.tick.nb = 10 ; x.second.tick.nb = 1 ; x.left.extra.margin = 0 ; x.right.extra.margin = 0 ; y.lim = c(1, 25) ; y.lab = "TIME (s)" ; y.log = "no" ; y.tick.nb = 5 ; y.second.tick.nb = 2 ; y.top.extra.margin = 0 ; y.bottom.extra.margin = 0 ; x.include.zero = TRUE ; y.include.zero = TRUE ; x.text.angle = 0 ; y.text.angle = 0 ; text.size = 12 ; title = "" ; title.text.size = 8 ; legend.show = TRUE ; legend.width = 0.5 ; article = FALSE ; grid = FALSE ; raster = TRUE ; raster.ratio = 1 ; raster.threshold = NULL ; return = FALSE ; return.ggplot = FALSE ; return.gtable = FALSE ; plot = TRUE ; add = NULL ; warn.print = TRUE ; lib.path = NULL
+# data1 <- list(L1 = data.frame(a = 1:6, b = (1:6)^2, group = c("A", "A", "A", "B", "B", "B"), stringsAsFactors = TRUE), L2 = data.frame(a = (1:6)*2, b = ((1:6)^2)*2, group = c("A1", "A1", "A1", "B1", "B1", "B1"), stringsAsFactors = TRUE), L3 = data.frame(a = (1:6)*3, b = ((1:6)^2)*3, group3 = c("A4", "A5", "A6", "A7", "B4", "B5"), stringsAsFactors = TRUE)) ; data1$L1$a[3] <- NA ; data1$L1$group[5] <- NA ; data1$L3$group3[4] <- NA ; data1 ; x = list(L1 = names(data1$L1)[1], L2 = names(data1$L2)[1], L3 = NULL) ; y = list(L1 = names(data1$L1)[2], L2 = names(data1$L2)[2], L3 = "a") ; categ = list(L1 = "group", L2 = NULL, L3 = NULL) ; categ.class.order = NULL ; legend.name = NULL ; color = NULL ; geom = list(L1 = "geom_point", L2 = "geom_point", L3 = "geom_hline") ; geom.step.dir = "hv" ; alpha = list(L1 = 0.5, L2 = 0.5, L3 = 0.5) ; dot.size = 1 ; dot.shape = 21 ; dot.border.size = 0.5 ; dot.border.color = NULL ; line.size = 0.5 ; line.type = "solid" ; x.lim = c(14, 4) ; x.lab = NULL ; x.log = "log10" ; x.tick.nb = 10 ; x.second.tick.nb = 4 ; x.left.extra.margin = 0 ; x.right.extra.margin = 0 ; y.lim = c(60, 5) ; y.lab = NULL ; y.log = "log10" ; y.tick.nb = 10 ; y.second.tick.nb = 2 ; y.top.extra.margin = 0 ; y.bottom.extra.margin = 0 ; x.include.zero = TRUE ; y.include.zero = TRUE ; x.text.angle = 0 ; y.text.angle = 0 ; text.size = 12 ; title = "" ; title.text.size = 8 ; legend.show = TRUE ; legend.width = 0.5 ; article = TRUE ; grid = FALSE ; raster = FALSE ; raster.ratio = 1 ; raster.threshold = NULL ; return = TRUE ; return.ggplot = FALSE ; return.gtable = FALSE ; plot = TRUE ; add = NULL ; warn.print = TRUE ; lib.path = NULL
+# data1 <- data.frame(km = 2:7, time = (2:7)^2, group = c("A", "A", "A", "B", "B", "B"), stringsAsFactors = TRUE) ; data1 ; x = "km"; y = "time"; categ = "group" ; categ.class.order = NULL ; legend.name = NULL ; color = NULL ; geom = "geom_point" ; geom.step.dir = "hv" ; alpha = 0.1 ; dot.size = 3 ; dot.shape = 21 ; dot.border.size = 0.5 ; dot.border.color = NULL ; line.size = 0.5 ; line.type = "solid" ; x.lim = c(1,10) ; x.lab = NULL ; x.log = "log10" ; x.tick.nb = 10 ; x.second.tick.nb = 4 ; x.left.extra.margin = 0 ; x.right.extra.margin = 0 ; y.lim = NULL ; y.lab = expression(paste("TIME (", 10^-20, " s)")) ; y.log = "log10" ; y.tick.nb = 10 ; y.second.tick.nb = 2 ; y.top.extra.margin = 0 ; y.bottom.extra.margin = 0 ; x.include.zero = TRUE ; y.include.zero = TRUE ; x.text.angle = 0 ; y.text.angle = 0 ; text.size = 12 ; title = "" ; title.text.size = 8 ; legend.show = TRUE ; legend.width = 0.5 ; article = FALSE ; grid = FALSE ; raster = FALSE ; raster.ratio = 1 ; raster.threshold = NULL ; return = FALSE ; return.ggplot = FALSE ; return.gtable = FALSE ; plot = TRUE ; add = NULL ; warn.print = TRUE ; lib.path = NULL
+# function name
+function.name <- paste0(as.list(match.call(expand.dots=FALSE))[[1]], "()")
+arg.names <- names(formals(fun = sys.function(sys.parent(n = 2)))) # names of all the arguments
+arg.user.setting <- as.list(match.call(expand.dots=FALSE))[-1] # list of the argument settings (excluding default values not provided by the user)
+# end function name
+# required function checking
+req.function <- c(
+"fun_check", 
+"fun_gg_just", 
+"fun_gg_empty_graph", 
+"fun_gg_palette", 
+"fun_gg_point_rast", 
+"fun_round", 
+"fun_pack", 
+"fun_scale", 
+"fun_inter_ticks"
+)
+for(i1 in req.function){
+if(length(find(i1, mode = "function")) == 0){
+tempo.cat <- paste0("ERROR IN ", function.name, ": REQUIRED ", i1, "() FUNCTION IS MISSING IN THE R ENVIRONMENT")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE)
+}
+}
+# end required function checking
+# reserved words to avoid bugs (used in this function)
+reserved.words <- c("fake_x", "fake_y", "fake_categ")
+# end reserved words to avoid bugs (used in this function)
+# arg with no default values
+if(any(missing(data1) | missing(x) | missing(y))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ARGUMENTS angle AND pos HAVE NO DEFAULT VALUE AND REQUIRE ONE")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# end arg with no default values
+# primary argument checking
+arg.check <- NULL #
+text.check <- NULL #
+checked.arg.names <- NULL # for function debbuging: used by r_debugging_tools
+ee <- expression(arg.check <- c(arg.check, tempo$problem) , text.check <- c(text.check, tempo$text) , checked.arg.names <- c(checked.arg.names, tempo$fun.name))
+tempo1 <- fun_check(data = data1, class = "data.frame", na.contain = TRUE, fun.name = function.name)
+tempo2 <- fun_check(data = data1, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": data1 ARGUMENT MUST BE A DATA FRAME OR A LIST OF DATA FRAMES")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+if( ! is.null(x)){
+tempo1 <- fun_check(data = x, class = "vector", mode = "character", na.contain = TRUE, length = 1, fun.name = function.name)
+tempo2 <- fun_check(data = x, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": x ARGUMENT MUST BE A SINGLE CHARACTER STRING OR A LIST OF CHARACTER STRINGS")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+if( ! is.null(y)){
+tempo1 <- fun_check(data = y, class = "vector", mode = "character", na.contain = TRUE, length = 1, fun.name = function.name)
+tempo2 <- fun_check(data = y, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": y ARGUMENT MUST BE A SINGLE CHARACTER STRING OR A LIST OF CHARACTER STRINGS")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+if( ! is.null(categ)){
+tempo1 <- fun_check(data = categ, class = "vector", mode = "character", length = 1, fun.name = function.name)
+tempo2 <- fun_check(data = categ, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": categ ARGUMENT MUST BE A SINGLE CHARACTER STRING OR A LIST OF CHARACTER STRINGS")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+if( ! is.null(categ.class.order)){
+tempo1 <- fun_check(data = categ.class.order, class = "vector", mode = "character", fun.name = function.name)
+tempo2 <- fun_check(data = categ.class.order, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": categ.class.order ARGUMENT MUST BE A VECTOR OF CHARACTER STRINGS OR A LIST OF VECTOR OF CHARACTER STRINGS")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+if( ! is.null(legend.name)){
+tempo1 <- fun_check(data = legend.name, class = "vector", mode = "character", na.contain = TRUE, length = 1, fun.name = function.name)
+tempo2 <- fun_check(data = legend.name, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": legend.name ARGUMENT MUST BE A SINGLE CHARACTER STRING OR A LIST OF CHARACTER STRINGS")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+if( ! is.null(color)){
+tempo1 <- fun_check(data = color, class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name)
+tempo2 <- fun_check(data = color, class = "factor", na.contain = TRUE, fun.name = function.name)
+tempo3 <- fun_check(data = color, class = "integer", double.as.integer.allowed = TRUE, na.contain = TRUE, fun.name = function.name)
+tempo4 <- fun_check(data = color, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE & tempo3$problem == TRUE & tempo4$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": color ARGUMENT MUST BE A VECTOR (OF CHARACTER STRINGS OR INTEGERS) OR A FACTOR OR A LIST OF THESE POSSIBILITIES")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+tempo1 <- fun_check(data = geom, class = "vector", mode = "character", na.contain = FALSE, length = 1, fun.name = function.name)
+tempo2 <- fun_check(data = geom, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": geom ARGUMENT MUST BE A SINGLE CHARACTER STRING OR A LIST OF CHARACTER STRINGS")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+tempo1 <- fun_check(data = geom.step.dir, options = c("vh", "hv", "mid"), na.contain = FALSE, length = 1, fun.name = function.name)
+tempo2 <- fun_check(data = geom.step.dir, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": geom.step.dir ARGUMENT MUST BE A SINGLE CHARACTER STRING (\"vh\" OR \"hv\" OR \"mid\") OR A LIST OF THESE CHARACTER STRINGS")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+tempo1 <- fun_check(data = alpha, prop = TRUE, length = 1, fun.name = function.name)
+tempo2 <- fun_check(data = alpha, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": alpha ARGUMENT MUST BE A SINGLE NUMERIC VALUE BETWEEN 0 AND 1 OR A LIST OF SUCH VALUES")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+tempo1 <- fun_check(data = dot.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name)
+tempo2 <- fun_check(data = dot.size, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.size ARGUMENT MUST BE A SINGLE NUMERIC VALUE OR A LIST OF SINGLE NUMERIC VALUES")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+tempo1 <- fun_check(data = dot.shape, class = "vector", length = 1, fun.name = function.name)
+tempo2 <- fun_check(data = dot.shape, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.shape ARGUMENT MUST BE A SINGLE SHAPE VALUE OR A LIST OF SINGLE SHAPE VALUES (SEE https://ggplot2.tidyverse.org/articles/ggplot2-specs.html)")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+tempo1 <- fun_check(data = dot.border.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name)
+tempo2 <- fun_check(data = dot.border.size, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.border.size ARGUMENT MUST BE A SINGLE NUMERIC VALUE OR A LIST OF SINGLE NUMERIC VALUES")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+if( ! is.null(dot.border.color)){
+tempo1 <- fun_check(data = dot.border.color, class = "vector", mode = "character", length = 1, fun.name = function.name)
+tempo2 <- fun_check(data = dot.border.color, class = "vector", typeof = "integer", double.as.integer.allowed = TRUE, length = 1, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+# integer colors -> gg_palette
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.border.color MUST BE A SINGLE CHARACTER STRING OF COLOR OR A SINGLE INTEGER VALUE")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+tempo1 <- fun_check(data = line.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name)
+tempo2 <- fun_check(data = line.size, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": line.size ARGUMENT MUST BE A SINGLE NUMERIC VALUE OR A LIST OF SINGLE NUMERIC VALUES")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+tempo1 <- fun_check(data = line.type, class = "vector", typeof = "integer", double.as.integer.allowed = FALSE, length = 1, fun.name = function.name)
+tempo2 <- fun_check(data = line.type, class = "vector", mode = "character", length = 1, fun.name = function.name)
+tempo3 <- fun_check(data = line.type, class = "list", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE & tempo3$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": line.type ARGUMENT MUST BE A SINGLE LINE KIND VALUE OR A LIST OF SINGLE LINE KIND VALUES (SEE https://ggplot2.tidyverse.org/articles/ggplot2-specs.html)")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+if( ! is.null(x.lim)){
+tempo <- fun_check(data = x.lim, class = "vector", mode = "numeric", length = 2, fun.name = function.name) ; eval(ee)
+if(tempo$problem == FALSE & any(x.lim %in% c(Inf, -Inf))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": x.lim ARGUMENT CANNOT CONTAIN -Inf OR Inf VALUES")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+if( ! is.null(x.lab)){
+if(all(class(x.lab) %in% "expression")){ # to deal with math symbols
+tempo <- fun_check(data = x.lab, class = "expression", length = 1, fun.name = function.name) ; eval(ee)
+}else{
+tempo <- fun_check(data = x.lab, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee)
+}
+}
+tempo <- fun_check(data = x.log, options = c("no", "log2", "log10"), length = 1, fun.name = function.name) ; eval(ee)
+if( ! is.null(x.tick.nb)){
+tempo <- fun_check(data = x.tick.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee)
+if(tempo$problem == FALSE & x.tick.nb < 0){
+tempo.cat <- paste0("ERROR IN ", function.name, ": x.tick.nb ARGUMENT MUST BE A NON-NULL POSITIVE INTEGER")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+if( ! is.null(x.second.tick.nb)){
+tempo <- fun_check(data = x.second.tick.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee)
+if(tempo$problem == FALSE & x.second.tick.nb <= 0){
+tempo.cat <- paste0("ERROR IN ", function.name, ": x.second.tick.nb ARGUMENT MUST BE A NON-NULL POSITIVE INTEGER")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+tempo <- fun_check(data = x.include.zero, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = x.left.extra.margin, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = x.right.extra.margin, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = x.text.angle, class = "vector", typeof = "integer", double.as.integer.allowed = TRUE, length = 1, neg.values = TRUE, fun.name = function.name) ; eval(ee)
+if( ! is.null(y.lim)){
+tempo <- fun_check(data = y.lim, class = "vector", mode = "numeric", length = 2, fun.name = function.name) ; eval(ee)
+if(tempo$problem == FALSE & any(y.lim %in% c(Inf, -Inf))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": y.lim ARGUMENT CANNOT CONTAIN -Inf OR Inf VALUES")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+if( ! is.null(y.lab)){
+if(all(class(y.lab) %in% "expression")){ # to deal with math symbols
+tempo <- fun_check(data = y.lab, class = "expression", length = 1, fun.name = function.name) ; eval(ee)
+}else{
+tempo <- fun_check(data = y.lab, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee)
+}
+}
+tempo <- fun_check(data = y.log, options = c("no", "log2", "log10"), length = 1, fun.name = function.name) ; eval(ee)
+if( ! is.null(y.tick.nb)){
+tempo <- fun_check(data = y.tick.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee)
+if(tempo$problem == FALSE & y.tick.nb < 0){
+tempo.cat <- paste0("ERROR IN ", function.name, ": y.tick.nb ARGUMENT MUST BE A NON-NULL POSITIVE INTEGER")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+if( ! is.null(y.second.tick.nb)){
+tempo <- fun_check(data = y.second.tick.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee)
+if(tempo$problem == FALSE & y.second.tick.nb <= 0){
+tempo.cat <- paste0("ERROR IN ", function.name, ": y.second.tick.nb ARGUMENT MUST BE A NON-NULL POSITIVE INTEGER")
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+tempo <- fun_check(data = y.include.zero, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = y.top.extra.margin, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = y.bottom.extra.margin, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = y.text.angle, class = "vector", typeof = "integer", double.as.integer.allowed = TRUE, length = 1, neg.values = TRUE, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = text.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = title, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = title.text.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = legend.show, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+if( ! is.null(legend.width)){
+tempo <- fun_check(data = legend.width, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee)
+}
+tempo <- fun_check(data = raster, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = raster.ratio, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee)
+if( ! is.null(raster.threshold)){
+tempo <- fun_check(data = raster.threshold, class = "vector", typeof = "integer", neg.values = FALSE, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee)
+}
+tempo <- fun_check(data = article, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = grid, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = return, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = return.ggplot, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = return.gtable, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+tempo <- fun_check(data = plot, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+if( ! is.null(add)){
+tempo <- fun_check(data = add, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee)
+}
+tempo <- fun_check(data = warn.print, class = "logical", length = 1, fun.name = function.name) ; eval(ee)
+if( ! is.null(lib.path)){
+tempo <- fun_check(data = lib.path, class = "vector", mode = "character", fun.name = function.name) ; eval(ee)
+if(tempo$problem == FALSE){
+if( ! all(dir.exists(lib.path))){ # separation to avoid the problem of tempo$problem == FALSE and lib.path == NA
+tempo.cat <- paste0("ERROR IN ", function.name, ": DIRECTORY PATH INDICATED IN THE lib.path ARGUMENT DOES NOT EXISTS:\n", paste(lib.path, collapse = "\n"))
+text.check <- c(text.check, tempo.cat)
+arg.check <- c(arg.check, TRUE)
+}
+}
+}
+if(any(arg.check) == TRUE){
+stop(paste0("\n\n================\n\n", paste(text.check[arg.check], collapse = "\n"), "\n\n================\n\n"), call. = FALSE) #
+}
+# source("C:/Users/Gael/Documents/Git_versions_to_use/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_check_dev)) # activate this line and use the function (with no arguments left as NULL) to check arguments status and if they have been checked using fun_check()
+# end primary argument checking
+# second round of checking and data preparation
+# dealing with NA arguments
+tempo.arg <- names(arg.user.setting) # values provided by the user
+tempo.log <- sapply(lapply(lapply(tempo.arg, FUN = get, env = sys.nframe(), inherit = FALSE), FUN = is.na), FUN = any) & lapply(lapply(tempo.arg, FUN = get, env = sys.nframe(), inherit = FALSE), FUN = length) == 1 # no argument provided by the user can be just NA
+if(any(tempo.log) == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ":\n", ifelse(sum(tempo.log, na.rm = TRUE) > 1, "THESE ARGUMENTS\n", "THIS ARGUMENT\n"), paste0(tempo.arg[tempo.log], collapse = "\n"),"\nCANNOT JUST BE NA")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# end dealing with NA arguments
+# dealing with NULL arguments
+tempo.arg <-c(
+"data1", 
+# "x", # inactivated because of hline or vline
+# "y", # inactivated because of hline or vline
+"geom", 
+"geom.step.dir", 
+"alpha", 
+"dot.size", 
+"dot.shape", 
+"dot.border.size", 
+"line.size", 
+"line.type", 
+"x.log", 
+"x.include.zero", 
+"x.left.extra.margin", 
+"x.right.extra.margin", 
+"x.text.angle", 
+"y.log", 
+"y.include.zero", 
+"y.top.extra.margin", 
+"y.bottom.extra.margin", 
+"y.text.angle", 
+"text.size", 
+"title", 
+"title.text.size", 
+"legend.show", 
+# "legend.width", # inactivated because can be null
+"raster", 
+"raster.ratio", 
+"article", 
+"grid", 
+"return", 
+"return.ggplot", 
+"return.gtable", 
+"plot", 
+"warn.print"
+)
+tempo.log <- sapply(lapply(tempo.arg, FUN = get, env = sys.nframe(), inherit = FALSE), FUN = is.null)
+if(any(tempo.log) == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ":\n", ifelse(sum(tempo.log, na.rm = TRUE) > 1, "THESE ARGUMENTS\n", "THIS ARGUMENT\n"), paste0(tempo.arg[tempo.log], collapse = "\n"),"\nCANNOT BE NULL")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) # == in stop() to be able to add several messages between ==
+}
+# end dealing with NULL arguments
+# check list lengths (and names of data1 compartments if present)
+ini.warning.length <- options()$warning.length
+options(warning.length = 8170)
+on.exit(exp = options(warning.length = ini.warning.length))
+warn <- NULL
+warn.count <- 0
+list.color <- NULL
+list.geom <- NULL
+list.geom.step.dir <- NULL
+list.alpha <- NULL
+list.dot.size <- NULL
+list.dot.shape <- NULL
+list.dot.border.size <- NULL
+list.dot.border.color <- NULL
+list.line.size <- NULL
+list.line.type <- NULL
+if(all(class(data1) == "list")){
+if(length(data1) > 6){
+tempo.cat <- paste0("ERROR IN ", function.name, ": data1 ARGUMENT MUST BE A LIST OF 6 DATA FRAMES MAXIMUM (6 OVERLAYS MAX)")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+if(is.null(names(data1))){
+names(data1) <- paste0("L", 1:length(data1))
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NULL NAME COMPARTMENT OF data1 LIST -> NAMES RESPECTIVELY ATTRIBUTED TO EACH COMPARTMENT:\n", paste(names(data1), collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+if( ! is.null(x)){
+if( ! (all(class(x) == "list") & length(data1) == length(x))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": x ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}else{
+x <- vector("list", length(data1))
+}
+if( ! is.null(y)){
+if( ! (all(class(y) == "list") & length(data1) == length(y))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": y ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}else{
+y <- vector("list", length(data1))
+}
+if( ! is.null(categ)){
+if( ! (all(class(categ) == "list") & length(data1) == length(categ))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": categ ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+if( ! is.null(categ.class.order)){
+if( ! (all(class(categ.class.order) == "list") & length(data1) == length(categ.class.order))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": categ.class.order ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+if( ! is.null(color)){
+if( ! ((all(class(color) == "list") & length(data1) == length(color)) | ((all(mode(color) == "character") | all(mode(color) == "numeric")) & length(color) == 1))){ # list of same length as data1 or single value
+tempo.cat <- paste0("ERROR IN ", function.name, ": color ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST, OR A SINGLE CHARACTER STRING OR INTEGER")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if((all(mode(color) == "character") | all(mode(color) == "numeric")) & length(color) == 1){ # convert the single value into a list of single value
+list.color <- vector(mode = "list", length = length(data1))
+list.color[] <- color
+}
+}
+if( ! ((all(class(geom) == "list") & length(data1) == length(geom)) | (all(mode(geom) == "character") & length(geom) == 1))){ # list of same length as data1 or single value
+tempo.cat <- paste0("ERROR IN ", function.name, ": geom ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST, OR A SINGLE CHARACTER VALUE")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(all(mode(geom) == "character") & length(geom) == 1){ # convert the single value into a list of single value
+list.geom <- vector(mode = "list", length = length(data1))
+list.geom[] <- geom
+}
+if( ! ((all(class(geom.step.dir) == "list") & length(data1) == length(geom.step.dir)) | (all(mode(geom.step.dir) == "character") & length(geom.step.dir) == 1))){ # list of same length as data1 or single value
+tempo.cat <- paste0("ERROR IN ", function.name, ": geom.step.dir ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST, OR A SINGLE CHARACTER VALUE")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(all(mode(geom.step.dir) == "character") & length(geom.step.dir) == 1){ # convert the single value into a list of single value
+list.geom.step.dir <- vector(mode = "list", length = length(data1))
+list.geom.step.dir[] <- geom.step.dir
+}
+if( ! ((all(class(alpha) == "list") & length(data1) == length(alpha)) | (all(mode(alpha) == "numeric") & length(alpha) == 1))){ # list of same length as data1 or single value
+tempo.cat <- paste0("ERROR IN ", function.name, ": alpha ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST, OR A SINGLE NUMERIC VALUE")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(all(mode(alpha) == "numeric") & length(alpha) == 1){ # convert the single value into a list of single value
+list.alpha <- vector(mode = "list", length = length(data1))
+list.alpha[] <- alpha
+}
+if( ! ((all(class(dot.size) == "list") & length(data1) == length(dot.size)) | (all(mode(dot.size) == "numeric") & length(dot.size) == 1))){ # list of same length as data1 or single value
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.size ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST, OR A SINGLE NUMERIC VALUE")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(all(mode(dot.size) == "numeric") & length(dot.size) == 1){ # convert the single value into a list of single value
+list.dot.size <- vector(mode = "list", length = length(data1))
+list.dot.size[] <- dot.size
+}
+if( ! ((all(class(dot.shape) == "list") & length(data1) == length(dot.shape)) | (all(mode(dot.shape) != "list") & length(dot.shape) == 1))){ # list of same length as data1 or single value
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.shape ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST, OR A SINGLE SHAPE VALUE")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(all(mode(dot.shape) != "list") & length(dot.shape) == 1){ # convert the single value into a list of single value
+list.dot.shape <- vector(mode = "list", length = length(data1))
+list.dot.shape[] <- dot.shape
+}
+if( ! ((all(class(dot.border.size) == "list") & length(data1) == length(dot.border.size)) | (all(mode(dot.border.size) == "numeric") & length(dot.border.size) == 1))){ # list of same length as data1 or single value
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.border.size ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST, OR A SINGLE NUMERIC VALUE")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(all(mode(dot.border.size) == "numeric") & length(dot.border.size) == 1){ # convert the single value into a list of single value
+list.dot.border.size <- vector(mode = "list", length = length(data1))
+list.dot.border.size[] <- dot.border.size
+}
+if( ! is.null(dot.border.color)){
+if( ! ((all(class(dot.border.color) == "list") & length(data1) == length(dot.border.color)) | ((all(mode(dot.border.color) == "character") | all(mode(dot.border.color) == "numeric")) & length(dot.border.color) == 1))){ # list of same length as data1 or single value
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.border.color ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST, OR A SINGLE CHARACTER STRING OR INTEGER")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if((all(mode(dot.border.color) == "character") | all(mode(dot.border.color) == "numeric")) & length(dot.border.color) == 1){ # convert the single value into a list of single value
+list.dot.border.color <- vector(mode = "list", length = length(data1))
+list.dot.border.color[] <- dot.border.color
+}
+}
+if( ! ((all(class(line.size) == "list") & length(data1) == length(line.size)) | (all(mode(line.size) == "numeric") & length(line.size) == 1))){ # list of same length as data1 or single value
+tempo.cat <- paste0("ERROR IN ", function.name, ": line.size ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST, OR A SINGLE NUMERIC VALUE")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(all(mode(line.size) == "numeric") & length(line.size) == 1){ # convert the single value into a list of single value
+list.line.size <- vector(mode = "list", length = length(data1))
+list.line.size[] <- line.size
+}
+if( ! ((all(class(line.type) == "list") & length(data1) == length(line.type)) | (all(mode(line.type) != "list") & length(line.type) == 1))){ # list of same length as data1 or single value
+tempo.cat <- paste0("ERROR IN ", function.name, ": line.type ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST, OR A SINGLE LINE KIND VALUE")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(all(mode(line.type) != "list") & length(line.type) == 1){ # convert the single value into a list of single value
+list.line.type <- vector(mode = "list", length = length(data1))
+list.line.type[] <- line.type
+}
+if( ! is.null(legend.name)){
+if( ! (all(class(legend.name) == "list") & length(data1) == length(legend.name))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": legend.name ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+}
+# end check list lengths (and names of data1 compartments if present)
+# conversion into lists
+if(all(is.data.frame(data1))){
+data1 <- list(L1 = data1)
+if(all(class(x) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": x ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+x <- list(L1 = x)
+}
+if(all(class(y) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": y ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+y <- list(L1 = y)
+}
+if( ! is.null(categ)){
+if(all(class(categ) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": categ ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+categ <- list(L1 = categ)
+}
+}
+if( ! is.null(categ.class.order)){
+if(all(class(categ.class.order) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": categ.class.order ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+categ.class.order <- list(L1 = categ.class.order)
+}
+}
+if( ! is.null(color)){
+if(all(class(color) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": color ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+color <- list(L1 = color)
+}
+}
+if(all(class(geom) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": geom ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+geom <- list(L1 = geom)
+}
+if(all(class(geom.step.dir) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": geom.step.dir ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+geom.step.dir <- list(L1 = geom.step.dir)
+}
+if(all(class(alpha) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": alpha ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+alpha <- list(L1 = alpha)
+}
+if(all(class(dot.size) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.size ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+dot.size <- list(L1 = dot.size)
+}
+if(all(class(dot.shape) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.shape ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+dot.shape <- list(L1 = dot.shape)
+}
+if(all(class(dot.border.size) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.border.size ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+dot.border.size <- list(L1 = dot.border.size)
+}
+if( ! is.null(dot.border.color)){
+if(all(class(dot.border.color) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": dot.border.color ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+dot.border.color <- list(L1 = dot.border.color)
+}
+}
+if(all(class(line.size) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": line.size ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+line.size <- list(L1 = line.size)
+}
+if(all(class(line.type) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": line.type ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+line.type <- list(L1 = line.type)
+}
+if( ! is.null(legend.name)){
+if(all(class(legend.name) == "list")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": legend.name ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+legend.name <- list(L1 = legend.name)
+}
+}
+}else if( ! all(sapply(data1, FUN = "class") == "data.frame")){ # if not a data frame, data1 can only be a list, as tested above
+tempo.cat <- paste0("ERROR IN ", function.name, ": data1 ARGUMENT MUST BE A DATA FRAME OR A LIST OF DATA FRAMES")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+# single value converted into list now reattributed to the argument name
+if( ! is.null(color)){
+if( ! is.null(list.color)){
+color <- list.color
+}
+}
+if( ! is.null(list.geom)){
+geom <- list.geom
+}
+if( ! is.null(list.geom.step.dir)){
+geom.step.dir <- list.geom.step.dir
+}
+if( ! is.null(list.alpha)){
+alpha <- list.alpha
+}
+if( ! is.null(list.dot.size)){
+dot.size <- list.dot.size
+}
+if( ! is.null(list.dot.shape)){
+dot.shape <- list.dot.shape
+}
+if( ! is.null(list.dot.border.size)){
+dot.border.size <- list.dot.border.size
+}
+if( ! is.null(dot.border.color)){
+if( ! is.null(list.dot.border.color)){
+dot.border.color <- list.dot.border.color
+}
+}
+if( ! is.null(list.line.size)){
+line.size <- list.line.size
+}
+if( ! is.null(list.line.type)){
+line.type <- list.line.type
+}
+# end single value converted into list now reattributed to the argument name
+# data, x, y, geom, alpha, dot.size, shape, dot.border.size, line.size, line.type, legend.name are list now
+# if non-null, categ, categ.class.order, legend.name, color are list now
+# end conversion into lists
+# legend name filling
+if(is.null(legend.name) & ! is.null(categ)){
+legend.name <- categ
+}else if(is.null(legend.name) & is.null(categ)){
+legend.name <- vector("list", length(data1)) # null list
+}
+# legend.name not NULL anymore (list)
+# end legend name filling
+# ini categ for legend display
+fin.lg.disp <- vector("list", 6) # will be used at the end to display or not legends
+fin.lg.disp[] <- FALSE
+legend.disp <- vector("list", length(data1))
+if(is.null(categ) | legend.show == FALSE){
+legend.disp[] <- FALSE
+}else{
+for(i2 in 1:length(data1)){
+if(is.null(categ[[i2]])){
+legend.disp[[i2]] <- FALSE
+}else{
+legend.disp[[i2]] <- TRUE
+}
+}
+}
+# end ini categ for legend display
+# integer colors into gg_palette
+tempo.check.color <- NULL
+for(i1 in 1:length(data1)){
+if(any(is.na(color[[i1]]))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), ": color ARGUMENT CANNOT CONTAIN NA")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+tempo.check.color <- c(tempo.check.color, fun_check(data = color[[i1]], data.name = ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), class = "integer", double.as.integer.allowed = TRUE, na.contain = TRUE, fun.name = function.name)$problem)
+}
+tempo.check.color <- ! tempo.check.color # invert TRUE and FALSE because if integer, then problem = FALSE
+if(any(tempo.check.color == TRUE)){ # convert integers into colors
+tempo.integer <- unlist(color[tempo.check.color])
+tempo.color <- fun_gg_palette(max(tempo.integer, na.rm = TRUE))
+for(i1 in 1:length(data1)){
+if(tempo.check.color[i1] == TRUE){
+color[[i1]] <-tempo.color[color[[i1]]]
+}
+}
+}
+# end integer colors into gg_palette
+
+
+# second round of argument checking
+compart.null.color <- 0 # will be used to attribute a color when color is non-null but a compartment of color is NULL
+
+for(i1 in 1:length(data1)){
+tempo <- fun_check(data = data1[[i1]], data.name = ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), class = "data.frame", na.contain = TRUE, fun.name = function.name)
+if(tempo$problem == TRUE){
+stop(paste0("\n\n================\n\n", tempo$text, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+# reserved word checking
+if(any(names(data1[[i1]]) %in% reserved.words)){ # I do not use fun_name_change() because cannot control y before creating "fake_y". But ok because reserved are not that common
+tempo.cat <- paste0("ERROR IN ", function.name, ": COLUMN NAMES OF ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " ARGUMENT CANNOT BE ONE OF THESE WORDS\n", paste(reserved.words, collapse = " "), "\nTHESE ARE RESERVED FOR THE ", function.name, " FUNCTION")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+if( ! (is.null(add))){
+if(any(sapply(X = reserved.words, FUN = grepl, x = add))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nDETECTION OF COLUMN NAMES OF data1 IN THE add ARGUMENT STRING, THAT CORRESPOND TO RESERVED STRINGS FOR ", function.name, "\nFOLLOWING COLUMN NAMES HAVE TO BE CHANGED:\n", paste(arg.names[sapply(X = reserved.words, FUN = grepl, x = add)], collapse = "\n"), "\nFOR INFORMATION, THE RESERVED WORDS ARE:\n", paste(reserved.words, collapse = "\n"))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(any(sapply(X = arg.names, FUN = grepl, x = add))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NAMES OF ", function.name, " ARGUMENTS DETECTED IN THE add STRING:\n", paste(arg.names[sapply(X = arg.names, FUN = grepl, x = add)], collapse = "\n"), "\nRISK OF WRONG OBJECT USAGE INSIDE ", function.name)
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+# end reserved word checking
+# check of geom now because required for y argument
+tempo <- fun_check(data = geom[[i1]], data.name = ifelse(length(geom) == 1, "geom", paste0("geom NUMBER ", i1)), options = c("geom_point", "geom_line", "geom_path", "geom_step", "geom_hline", "geom_vline", "geom_stick"), length = 1, fun.name = function.name)
+if(tempo$problem == TRUE){
+stop(paste0("\n\n================\n\n", tempo$text, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+tempo <- fun_check(data = geom.step.dir[[i1]], data.name = ifelse(length(geom.step.dir) == 1, "geom.step.dir", paste0("geom.step.dir NUMBER ", i1)), options = c("vh", "hv", "mid"), length = 1, fun.name = function.name)
+if(tempo$problem == TRUE){
+stop(paste0("\n\n================\n\n", tempo$text, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+# end check of geom now because required for y argument
+if(is.null(x[[i1]])){
+if(all(geom[[i1]] != "geom_hline")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ": x ARGUMENT CANNOT BE NULL EXCEPT IF ", ifelse(length(geom) == 1, "x", paste0("geom NUMBER ", i1)), " ARGUMENT IS \"geom_hline\"\nHERE geom ARGUMENT IS: ", paste(geom[[i1]], collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+x[[i1]] <- "fake_x"
+data1[[i1]] <- cbind(data1[[i1]], fake_x = NA, stringsAsFactors = TRUE)
+data1[[i1]][, "fake_x"] <- as.numeric(data1[[i1]][, "fake_x"])
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NULL ", ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x")), " ARGUMENT ASSOCIATED TO ", ifelse(length(geom) == 1, "geom", paste0("geom NUMBER ", i1)), " ARGUMENT ", geom[[i1]], " -> FAKE COLUMN ADDED TO DATA FRAME ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", NAMED \"fake_x\" FOR FINAL DRAWING")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}else{
+if(all(geom[[i1]] == "geom_hline")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ": x ARGUMENT MUST BE NULL IF ", ifelse(length(geom) == 1, "geom", paste0("geom NUMBER ", i1)), " ARGUMENT IS \"geom_hline\"")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+tempo <- fun_check(data = x[[i1]], data.name = ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x ARGUMENT")), class = "vector", mode = "character", length = 1, fun.name = function.name)
+if(tempo$problem == TRUE){
+stop(paste0("\n\n================\n\n", tempo$text, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+if(is.null(y[[i1]])){
+if(all(geom[[i1]] != "geom_vline")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ": y ARGUMENT CANNOT BE NULL EXCEPT IF ", ifelse(length(geom) == 1, "y", paste0("geom NUMBER ", i1)), " ARGUMENT IS \"geom_vline\"\nHERE geom ARGUMENT IS: ", paste(geom[[i1]], collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+y[[i1]] <- "fake_y"
+data1[[i1]] <- cbind(data1[[i1]], fake_y = NA, stringsAsFactors = TRUE)
+data1[[i1]][, "fake_y"] <- as.numeric(data1[[i1]][, "fake_y"])
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NULL ", ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y")), " ARGUMENT ASSOCIATED TO ", ifelse(length(geom) == 1, "geom", paste0("geom NUMBER ", i1)), " ARGUMENT ", geom[[i1]], " -> FAKE COLUMN ADDED TO DATA FRAME ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", NAMED \"fake_y\" FOR FINAL DRAWING")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}else{
+if(all(geom[[i1]] == "geom_vline")){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ": y ARGUMENT MUST BE NULL IF ", ifelse(length(geom) == 1, "geom", paste0("geom NUMBER ", i1)), " ARGUMENT IS \"geom_vline\"")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+tempo <- fun_check(data = y[[i1]], data.name = ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y ARGUMENT")), class = "vector", mode = "character", length = 1, fun.name = function.name)
+if(tempo$problem == TRUE){
+stop(paste0("\n\n================\n\n", tempo$text, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+# x[[i1]] and y[[i1]] not NULL anymore
+if( ! (x[[i1]] %in% names(data1[[i1]]))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x")), " ARGUMENT MUST BE A COLUMN NAME OF ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT\nHERE IT IS: ", paste(x[[i1]], collapse = " "))))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+if( ! (y[[i1]] %in% names(data1[[i1]]))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y")), " ARGUMENT MUST BE A COLUMN NAME OF ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT\nHERE IT IS: ", paste(y[[i1]], collapse = " "))))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+tempo <- fun_check(data = data1[[i1]][, x[[i1]]], data.name = ifelse(length(x) == 1, "x ARGUMENT (AS COLUMN NAME OF data1 DATA FRAME)", paste0("ELEMENT ", i1, " OF x ARGUMENT", " (AS COLUMN NAME OF data1 DATA FRAME NUMBER ", i1, ")")), class = "vector", mode = "numeric", na.contain = TRUE, fun.name = function.name)
+if(tempo$problem == TRUE){
+stop(paste0("\n\n================\n\n", tempo$text, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+tempo <- fun_check(data = data1[[i1]][, y[[i1]]], data.name = ifelse(length(y) == 1, "y ARGUMENT (AS COLUMN NAME OF data1 DATA FRAME)", paste0("ELEMENT ", i1, " OF y ARGUMENT", " (AS COLUMN NAME OF data1 DATA FRAME NUMBER ", i1, ")")), class = "vector", mode = "numeric", na.contain = TRUE, fun.name = function.name)
+if(tempo$problem == TRUE){
+stop(paste0("\n\n================\n\n", tempo$text, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+if(x[[i1]] == "fake_x" & y[[i1]] == "fake_y"){ # because the code cannot accept to be both "fake_x" and "fake_y" at the same time
+tempo.cat <- paste0("ERROR IN ", function.name, ": CODE INCONSISTENCY 2\nTHE CODE CANNOT ACCEPT x AND y TO BE \"fake_x\" AND \"fake_y\" IN THE SAME DATA FRAME ", i1, " ")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+
+if(( ! is.null(categ)) & ( ! is.null(categ[[i1]]))){ # is.null(categ[[i1]]) works even if categ is NULL # is.null(categ[[i1]]) works even if categ is NULL # if categ[[i1]] = NULL, fake_categ will be created later on
+tempo <- fun_check(data = categ[[i1]], data.name = ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")),, class = "vector", mode = "character", length = 1, fun.name = function.name)
+if(tempo$problem == TRUE){
+stop(paste0("\n\n================\n\n", tempo$text, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+if( ! (categ[[i1]] %in% names(data1[[i1]]))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ")), " ARGUMENT MUST BE A COLUMN NAME OF ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT\nHERE IT IS: ", paste(categ[[i1]], collapse = " "))))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+tempo1 <- fun_check(data = data1[[i1]][, categ[[i1]]], data.name = ifelse(length(categ) == 1, "categ OF data1 ARGUMENT", paste0("ELEMENT ", i1, " OF categ ARGUMENT IN DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name)
+tempo2 <- fun_check(data = data1[[i1]][, categ[[i1]]], data.name = ifelse(length(categ) == 1, "categ OF data1 ARGUMENT", paste0("ELEMENT ", i1, " OF categ ARGUMENT IN DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), class = "factor", na.contain = TRUE, fun.name = function.name)
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(categ) == 1, "categ OF data1 ARGUMENT", paste0("ELEMENT ", i1, " OF categ ARGUMENT IN DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " MUST BE A FACTOR OR CHARACTER VECTOR")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(tempo1$problem == FALSE){
+data1[[i1]][, categ[[i1]]] <- factor(data1[[i1]][, categ[[i1]]]) # if already a factor, change nothing, if characters, levels according to alphabetical order
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", THE CHARACTER COLUMN HAS BEEN CONVERTED TO FACTOR")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+
+}
+if(geom[[i1]] == "geom_vline" | geom[[i1]] == "geom_hline"){
+if(length(unique(data1[[i1]][, categ[[i1]]])) != nrow(data1[[i1]])){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(geom) == 1, "geom OF data1 ARGUMENT", paste0("geom NUMBER ", i1, " OF DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " ARGUMENT IS ", geom[[i1]], ", MEANING THAT ", ifelse(length(categ) == 1, "categ OF data1 ARGUMENT", paste0("ELEMENT ", i1, " OF categ ARGUMENT IN DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " MUST HAVE A DIFFERENT CLASS PER LINE OF data1 (ONE x VALUE PER CLASS)")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+}else if(( ! is.null(categ)) & is.null(categ[[i1]])){ # is.null(categ[[i1]]) works even if categ is NULL # if categ[[i1]] = NULL, fake_categ will be created. WARNING: is.null(categ[[i1]]) means no legend display (see above), because categ has not been precised. This also means a single color for data1[[i1]]
+if(length(color[[i1]]) > 1){ # 0 means is.null(color[[i1]]) or is.null(color) and 1 is ok -> single color for data1[[i1]]
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NULL ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ")), " ARGUMENT BUT CORRESPONDING COLORS IN ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), " HAS LENGTH OVER 1\n", paste(color[[i1]], collapse = " "), "\nWHICH IS NOT COMPATIBLE WITH NULL CATEG -> COLOR RESET TO A SINGLE COLOR")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+color[[i1]] <- NULL # will provide a single color below
+}
+categ[[i1]] <- "fake_categ"
+data1[[i1]] <- cbind(data1[[i1]], fake_categ = "", stringsAsFactors = TRUE)
+# inactivated because give a different color to different "Line_" categ while a single color for all the data1[[i1]] required. Thus, put back after the color management
+# if(geom[[i1]] == "geom_hline" | geom[[i1]] == "geom_vline"){
+# data1[[i1]][, "fake_categ"] <- paste0("Line_", 1:nrow(data1[[i1]]))
+# }else{
+data1[[i1]][, "fake_categ"] <- data1[[i1]][, "fake_categ"] # as.numeric("") create a vector of NA but class numeric
+# }
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NULL ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ")), " ARGUMENT -> FOR DATA FRAME ", ifelse(length(data1) == 1, "data1 ARGUMENT:", paste0("NUMBER ", i1, " OF data1 ARGUMENT:")), "\n- FAKE \"fake_categ\" COLUMN ADDED FILLED WITH \"\"(OR WITH \"Line_...\" FOR LINES)\n- SINGLE COLOR USED FOR PLOTTING\n- NO LEGEND DISPLAYED")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# OK: if categ is not NULL, all the non-null categ columns of data1 are factors from here
+
+if( ! is.null(categ.class.order)){
+# the following check will be done several times but I prefer to keep it here, after the creation of categ
+if(is.null(categ[[i1]]) & ! is.null(categ.class.order[[i1]])){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nCOMPARTMENT ", i1, " OF categ ARGUMENT CANNOT BE NULL IF COMPARTMENT ", i1, " OF categ.class.order ARGUMENT IS NOT NULL: ", paste(categ.class.order, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+if(is.null(categ.class.order[[i1]])){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE categ.class.order COMPARTMENT ", i1, " IS NULL. ALPHABETICAL ORDER WILL BE APPLIED")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+data1[[i1]][, categ[[i1]]] <- factor(as.character(data1[[i1]][, categ[[i1]]])) # if already a factor, change nothing, if characters, levels according to alphabetical order
+categ.class.order[[i1]] <- levels(data1[[i1]][, categ[[i1]]]) # character vector that will be used later
+}else{
+tempo <- fun_check(data = categ.class.order[[i1]], data.name = paste0("COMPARTMENT ", i1 , " OF categ.class.order ARGUMENT"), class = "vector", mode = "character", length = length(levels(data1[[i1]][, categ[[i1]]])), fun.name = function.name) # length(data1[, categ[i1]) -> if data1[, categ[i1] was initially character vector, then conversion as factor after the NA removal, thus class number ok. If data1[, categ[i1] was initially factor, no modification after the NA removal, thus class number ok
+if(tempo$problem == TRUE){
+stop(paste0("\n\n================\n\n", tempo$text, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+if(any(duplicated(categ.class.order[[i1]]))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nCOMPARTMENT ", i1, " OF categ.class.order ARGUMENT CANNOT HAVE DUPLICATED CLASSES: ", paste(categ.class.order[[i1]], collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if( ! (all(categ.class.order[[i1]] %in% unique(data1[[i1]][, categ[[i1]]])) & all(unique(data1[[i1]][, categ[[i1]]]) %in% categ.class.order[[i1]]))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nCOMPARTMENT ", i1, " OF categ.class.order ARGUMENT MUST BE CLASSES OF COMPARTMENT ", i1, " OF categ ARGUMENT\nHERE IT IS:\n", paste(categ.class.order[[i1]], collapse = " "), "\nFOR COMPARTMENT ", i1, " OF categ.class.order AND IT IS:\n", paste(unique(data1[[i1]][, categ[[i1]]]), collapse = " "), "\nFOR COLUMN ", categ[[i1]], " OF data1 NUMBER ", i1)
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+data1[[i1]][, categ[[i1]]] <- factor(data1[[i1]][, categ[[i1]]], levels = categ.class.order[[i1]]) # reorder the factor
+}
+names(categ.class.order)[i1] <- categ[[i1]]
+}
+}
+# OK: if categ.class.order is not NULL, all the NULL categ.class.order columns of data1 are character from here
+
+if( ! is.null(legend.name[[i1]])){
+tempo <- fun_check(data = legend.name[[i1]], data.name = ifelse(length(legend.name) == 1, "legend.name", paste0("legend.name NUMBER ", i1)),, class = "vector", mode = "character", length = 1, fun.name = function.name)
+if(tempo$problem == TRUE){
+stop(paste0("\n\n================\n\n", tempo$text, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+if( ! is.null(color)){ # if color is NULL, will be filled later on
+# check the nature of color
+if(is.null(color[[i1]])){
+compart.null.color <- compart.null.color + 1
+color[[i1]] <- grey(compart.null.color / 8) # cannot be more than 7 overlays. Thus 7 different greys. 8/8 is excluded because white dots
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NULL COLOR IN ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), " ASSOCIATED TO ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", SINGLE COLOR ", paste(color[[i1]], collapse = " "), " HAS BEEN ATTRIBUTED")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+tempo1 <- fun_check(data = color[[i1]], data.name = ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name) # na.contain = TRUE in case of colum of data1
+tempo2 <- fun_check(data = color[[i1]], data.name = ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), class = "factor", na.contain = TRUE, fun.name = function.name) # idem
+if(tempo1$problem == TRUE & tempo2$problem == TRUE){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), " MUST BE A FACTOR OR CHARACTER VECTOR OR INTEGER VECTOR") # integer possible because dealt above
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if( ! (all(color[[i1]] %in% colors() | grepl(pattern = "^#", color[[i1]])))){ # check that all strings of low.color start by #
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), " MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # AND/OR COLOR NAMES GIVEN BY colors(): ", paste(unique(color[[i1]]), collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+if(any(is.na(color[[i1]]))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), ", THE COLORS:\n", paste(unique(color[[i1]]), collapse = " "), "\nCONTAINS NA")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# end check the nature of color
+# check the length of color
+if(is.null(categ) & length(color[[i1]]) != 1){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), " MUST BE A SINGLE COLOR IF categ IS NULL")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if( ! is.null(categ)){
+# No problem of NA management by ggplot2 because already removed
+if(categ[[i1]] == "fake_categ" & length(color[[i1]]) != 1){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), " MUST BE A SINGLE COLOR IF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IS NULL")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(length(color[[i1]]) == length(unique(data1[[i1]][, categ[[i1]]]))){ # here length(color) is equal to the different number of categ
+data1[[i1]][, categ[[i1]]] <- factor(data1[[i1]][, categ[[i1]]]) # if already a factor, change nothing, if characters, levels according to alphabetical order
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", THE FOLLOWING COLORS:\n", paste(color[[i1]], collapse = " "), "\nHAVE BEEN ATTRIBUTED TO THESE CLASSES:\n", paste(levels(factor(data1[[i1]][, categ[[i1]]])), collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}else if(length(color[[i1]]) == length(data1[[i1]][, categ[[i1]]])){# here length(color) is equal to nrow(data1[[i1]]) -> Modif to have length(color) equal to the different number of categ (length(color) == length(levels(data1[[i1]][, categ[[i1]]])))
+data1[[i1]] <- cbind(data1[[i1]], color = color[[i1]], stringsAsFactors = TRUE)
+tempo.check <- unique(data1[[i1]][ , c(categ[[i1]], "color")])
+if( ! (nrow(data1[[i1]]) == length(color[[i1]]) & nrow(tempo.check) == length(unique(data1[[i1]][ , categ[[i1]]])))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color")), " ARGUMENT HAS THE LENGTH OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), "\nBUT IS INCORRECTLY ASSOCIATED TO EACH CLASS OF THIS categ:\n", paste(unique(mapply(FUN = "paste", data1[[i1]][ ,categ[[i1]]], data1[[i1]][ ,"color"])), collapse = "\n"))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+data1[[i1]][, categ[[i1]]] <- factor(data1[[i1]][, categ[[i1]]]) # if already a factor, change nothing, if characters, levels according to alphabetical order
+color[[i1]] <- unique(color[[i1]][order(data1[[i1]][, categ[[i1]]])]) # Modif to have length(color) equal to the different number of categ (length(color) == length(levels(data1[[i1]][, categ[[i1]]])))
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count, ") FROM FUNCTION ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), " HAS THE LENGTH OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " COLUMN VALUES\nCOLORS HAVE BEEN RESPECTIVELY ASSOCIATED TO EACH CLASS OF categ AS:\n", paste(levels(factor(data1[[i1]][, categ[[i1]]])), collapse = " "), "\n", paste(color[[i1]], collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}else if(length(color[[i1]]) == 1){
+data1[[i1]][, categ[[i1]]] <- factor(data1[[i1]][, categ[[i1]]]) # if already a factor, change nothing, if characters, levels according to alphabetical order
+color[[i1]] <- rep(color[[i1]], length(levels(data1[[i1]][, categ[[i1]]])))
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", COLOR HAS LENGTH 1 MEANING THAT ALL THE DIFFERENT CLASSES OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), "\n", paste(levels(factor(data1[[i1]][, categ[[i1]]])), collapse = " "), "\nWILL HAVE THE SAME COLOR\n", paste(color[[i1]], collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}else{
+tempo.cat <- paste0("ERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), " MUST BE\n(1) LENGTH 1\nOR (2) THE LENGTH OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " COLUMN VALUES\nOR (3) THE LENGTH OF THE CLASSES IN THIS COLUMN\nHERE IT IS COLOR LENGTH ", length(color[[i1]]), " VERSUS CATEG LENGTH ", length(data1[[i1]][, categ[[i1]]]), " AND CATEG CLASS LENGTH ", length(unique(data1[[i1]][, categ[[i1]]])))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+}
+if((geom[[i1]] == "geom_hline" | geom[[i1]] == "geom_vline") & ! is.null(categ[[i1]])){ # add here after the color management, to deal with the different lines to plot inside any data[[i1]]
+if(categ[[i1]] == "fake_categ"){
+data1[[i1]][, "fake_categ"] <- factor(paste0("Line_", formatC(1:nrow(data1[[i2]]), width = nchar(nrow(data1[[i2]])), flag = "0")))
+}
+}
+tempo <- fun_check(data = alpha[[i1]], data.name = ifelse(length(alpha) == 1, "alpha", paste0("alpha NUMBER ", i1)), prop = TRUE, length = 1, fun.name = function.name)
+if(tempo$problem == TRUE){
+stop(paste0("\n\n================\n\n", tempo$text, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+# management of log scale
+if(x.log != "no"){
+data1[[i1]][, x[[i1]]] <- suppressWarnings(get(x.log)(data1[[i1]][, x[[i1]]])) # no env = sys.nframe(), inherit = FALSE in get() because look for function in the classical scope
+}
+if(y.log != "no"){
+data1[[i1]][, y[[i1]]] <- suppressWarnings(get(y.log)(data1[[i1]][, y[[i1]]])) # no env = sys.nframe(), inherit = FALSE in get() because look for function in the classical scope
+}
+# end management of log scale
+}
+if(length(data1) > 1){
+if(length(unique(unlist(x)[ ! x == "fake_x"])) > 1){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE x ARGUMENT DOES NOT CONTAIN IDENTICAL COLUMN NAMES:\n", paste(unlist(x), collapse = " "), "\nX-AXIS OVERLAYING DIFFERENT VARIABLES?")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+if(length(data1) > 1){
+if(length(unique(unlist(y)[ ! y == "fake_y"])) > 1){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE y ARGUMENT DOES NOT CONTAIN IDENTICAL COLUMN NAMES:\n", paste(unlist(y), collapse = " "), "\nY-AXIS OVERLAYING DIFFERENT VARIABLES?")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+if(sum(geom %in% "geom_point") > 3){
+tempo.cat <- paste0("ERROR IN ", function.name, ": geom ARGUMENT CANNOT HAVE MORE THAN THREE \"geom_point\" ELEMENTS")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(length(geom) - sum(geom %in% "geom_point") > 3){
+tempo.cat <- paste0("ERROR IN ", function.name, ": geom ARGUMENT CANNOT HAVE MORE THAN THREE LINE ELEMENTS")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+if(x.log != "no" & ! is.null(x.lim)){
+if(any(x.lim <= 0)){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nx.lim ARGUMENT CANNOT HAVE ZERO OR NEGATIVE VALUES WITH THE x.log ARGUMENT SET TO ", x.log, ":\n", paste(x.lim, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(any( ! is.finite(if(x.log == "log10"){log10(x.lim)}else{log2(x.lim)}))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nx.lim ARGUMENT RETURNS INF WITH THE x.log ARGUMENT SET TO ", x.log, "\nAS SCALE COMPUTATION IS ", ifelse(x.log == "log10", "log10", "log2"), ":\n", paste(if(x.log == "log10"){log10(x.lim)}else{log2(x.lim)}, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+if(x.log != "no" & x.include.zero == TRUE){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") x.log ARGUMENT SET TO ", x.log, " AND x.include.zero ARGUMENT SET TO TRUE -> x.include.zero ARGUMENT RESET TO FALSE BECAUSE 0 VALUE CANNOT BE REPRESENTED IN LOG SCALE")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+x.include.zero <- FALSE
+}
+if(y.log != "no" & ! is.null(y.lim)){
+if(any(y.lim <= 0)){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ny.lim ARGUMENT CANNOT HAVE ZERO OR NEGATIVE VALUES WITH THE y.log ARGUMENT SET TO ", y.log, ":\n", paste(y.lim, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(any( ! is.finite(if(y.log == "log10"){log10(y.lim)}else{log2(y.lim)}))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ny.lim ARGUMENT RETURNS INF WITH THE y.log ARGUMENT SET TO ", y.log, "\nAS SCALE COMPUTATION IS ", ifelse(y.log == "log10", "log10", "log2"), ":\n", paste(if(y.log == "log10"){log10(y.lim)}else{log2(y.lim)}, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+if(y.log != "no" & y.include.zero == TRUE){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") y.log ARGUMENT SET TO ", y.log, " AND y.include.zero ARGUMENT SET TO TRUE -> y.include.zero ARGUMENT RESET TO FALSE BECAUSE 0 VALUE CANNOT BE REPRESENTED IN LOG SCALE")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+y.include.zero <- FALSE
+}
+# end management of log scale
+# verif of add
+if( ! is.null(add)){
+if( ! grepl(pattern = "^\\s*\\+", add)){ # check that the add string start by +
+tempo.cat <- paste0("ERROR IN ", function.name, ": add ARGUMENT MUST START WITH \"+\": ", paste(unique(add), collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+
+}else if( ! grepl(pattern = "(ggplot2|lemon)\\s*::", add)){ #
+tempo.cat <- paste0("ERROR IN ", function.name, ": FOR EASIER FUNCTION DETECTION, add ARGUMENT MUST CONTAIN \"ggplot2::\" OR \"lemon::\" IN FRONT OF EACH GGPLOT2 FUNCTION: ", paste(unique(add), collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if( ! grepl(pattern = ")\\s*$", add)){ # check that the add string finished by )
+tempo.cat <- paste0("ERROR IN ", function.name, ": add ARGUMENT MUST FINISH BY \")\": ", paste(unique(add), collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+# end verif of add
+# management of add containing facet
+facet.categ <- NULL
+if( ! is.null(add)){
+facet.check <- TRUE
+tempo <- unlist(strsplit(x = add, split = "\\s*\\+\\s*(ggplot2|lemon)\\s*::\\s*")) #
+tempo <- sub(x = tempo, pattern = "^facet_wrap", replacement = "ggplot2::facet_wrap")
+tempo <- sub(x = tempo, pattern = "^facet_grid", replacement = "ggplot2::facet_grid")
+tempo <- sub(x = tempo, pattern = "^facet_rep", replacement = "lemon::facet_rep")
+if(length(data1) > 1 & (any(grepl(x = tempo, pattern = "ggplot2::facet_wrap|lemon::facet_rep_wrap")) | grepl(x = add, pattern = "ggplot2::facet_grid|lemon::facet_rep_grid"))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nfacet PANELS CANNOT BE USED IF MORE THAN ONE DATA FRAME IN THE data1 ARGUMENT\nPLEASE REWRITE THE add STRING AND RERUN")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+if(any(grepl(x = tempo, pattern = "ggplot2::facet_wrap|lemon::facet_rep_wrap"))){
+tempo1 <- suppressWarnings(eval(parse(text = tempo[grepl(x = tempo, pattern = "ggplot2::facet_wrap|lemon::facet_rep_wrap")])))
+facet.categ <- list(names(tempo1$params$facets)) # list of length 1
+tempo.text <- "facet_wrap OR facet_rep_wrap"
+facet.check <- FALSE
+}else if(grepl(x = add, pattern = "ggplot2::facet_grid|lemon::facet_rep_grid")){
+tempo1 <- suppressWarnings(eval(parse(text = tempo[grepl(x = tempo, pattern = "ggplot2::facet_grid|lemon::facet_rep_grid")])))
+facet.categ <- list(c(names(tempo1$params$rows), names(tempo1$params$cols))) # list of length 1
+tempo.text <- "facet_grid OR facet_rep_grid"
+facet.check <- FALSE
+}
+if(facet.check == FALSE & ! all(facet.categ %in% names(data1[[1]]))){ # WARNING: all(facet.categ %in% names(data1)) is TRUE when facet.categ is NULL
+tempo.cat <- paste0("ERROR IN ", function.name, "\nDETECTION OF \"", tempo.text, "\" STRING IN THE add ARGUMENT BUT PROBLEM OF VARIABLE DETECTION (COLUMN NAMES OF data1)\nTHE DETECTED VARIABLES ARE:\n", paste(facet.categ, collapse = " "), "\nTHE data1 COLUMN NAMES ARE:\n", paste(names(data1[[1]]), collapse = " "), "\nPLEASE REWRITE THE add STRING AND RERUN")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+}
+# if facet.categ is not NULL, it is a list of length 1 now
+# end management of add containing facet
+# end second round of argument checking
+# end second round of checking and data preparation
+
+
+
+
+
+# package checking
+fun_pack(req.package = c("ggplot2", "gridExtra"), lib.path = lib.path)
+# packages Cairo and grid tested by fun_gg_point_rast()
+# end package checking
+
+
+
+
+# main code
+# axes management
+if(is.null(x.lim)){
+if(any(unlist(mapply(FUN = "[[", data1, x, SIMPLIFY = FALSE)) %in% c(Inf, -Inf))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE x COLUMN IN data1 CONTAINS -Inf OR Inf VALUES THAT WILL NOT BE CONSIDERED IN THE PLOT RANGE")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+x.lim <- suppressWarnings(range(unlist(mapply(FUN = "[[", data1, x, SIMPLIFY = FALSE)), na.rm = TRUE, finite = TRUE)) # finite = TRUE removes all the -Inf and Inf except if only this. In that case, whatever the -Inf and/or Inf present, output -Inf;Inf range. Idem with NA only. y.lim added here. If NULL, ok if y argument has values
+}else if(x.log != "no"){
+x.lim <- get(x.log)(x.lim) # no env = sys.nframe(), inherit = FALSE in get() because look for function in the classical scope
+}
+if(x.log != "no"){
+if(any( ! is.finite(x.lim))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nx.lim ARGUMENT CANNOT HAVE ZERO OR NEGATIVE VALUES WITH THE x.log ARGUMENT SET TO ", x.log, ":\n", paste(x.lim, collapse = " "), "\nPLEASE, CHECK DATA VALUES (PRESENCE OF ZERO OR INF VALUES)")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+if(suppressWarnings(all(x.lim %in% c(Inf, -Inf)))){ # happen when x is only NULL
+if(all(unlist(geom) %in% c("geom_vline", "geom_stick"))){
+tempo.cat <- paste0("ERROR IN ", function.name, " NOT POSSIBLE TO DRAW geom_vline OR geom_stick KIND OF LINES ALONE IF x.lim ARGUMENT IS SET TO NULL, SINCE NO X-AXIS DEFINED (", ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x")), " ARGUMENT MUST BE NULL FOR THESE KIND OF LINES)")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+tempo.cat <- paste0("ERROR IN ", function.name, " x.lim ARGUMENT MADE OF NA, -Inf OR Inf ONLY: ", paste(x.lim, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+x.lim.order <- order(x.lim) # to deal with inverse axis
+# print(x.lim.order)
+x.lim <- sort(x.lim)
+x.lim[1] <- x.lim[1] - abs(x.lim[2] - x.lim[1]) * ifelse(diff(x.lim.order) > 0, x.right.extra.margin, x.left.extra.margin) # diff(x.lim.order) > 0 means not inversed axis
+x.lim[2] <- x.lim[2] + abs(x.lim[2] - x.lim[1]) * ifelse(diff(x.lim.order) > 0, x.left.extra.margin, x.right.extra.margin) # diff(x.lim.order) > 0 means not inversed axis
+if(x.include.zero == TRUE){ # no need to check x.log != "no" because done before
+x.lim <- range(c(x.lim, 0), na.rm = TRUE, finite = TRUE) # finite = TRUE removes all the -Inf and Inf except if only this. In that case, whatever the -Inf and/or Inf present, output -Inf;Inf range. Idem with NA only
+}
+x.lim <- x.lim[x.lim.order]
+if(any(is.na(x.lim))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": CODE INCONSISTENCY 3")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+if(is.null(y.lim)){
+if(any(unlist(mapply(FUN = "[[", data1, y, SIMPLIFY = FALSE)) %in% c(Inf, -Inf))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE y COLUMN IN data1 CONTAINS -Inf OR Inf VALUES THAT WILL NOT BE CONSIDERED IN THE PLOT RANGE")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+y.lim <- suppressWarnings(range(unlist(mapply(FUN = "[[", data1, y, SIMPLIFY = FALSE)), na.rm = TRUE, finite = TRUE)) # finite = TRUE removes all the -Inf and Inf except if only this. In that case, whatever the -Inf and/or Inf present, output -Inf;Inf range. Idem with NA only. y.lim added here. If NULL, ok if y argument has values
+}else if(y.log != "no"){
+y.lim <- get(y.log)(y.lim) # no env = sys.nframe(), inherit = FALSE in get() because look for function in the classical scope
+}
+if(y.log != "no"){
+if(any( ! is.finite(y.lim))){
+tempo.cat <- paste0("ERROR IN ", function.name, "\ny.lim ARGUMENT CANNOT HAVE ZERO OR NEGATIVE VALUES WITH THE y.log ARGUMENT SET TO ", y.log, ":\n", paste(y.lim, collapse = " "), "\nPLEASE, CHECK DATA VALUES (PRESENCE OF ZERO OR INF VALUES)")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+if(suppressWarnings(all(y.lim %in% c(Inf, -Inf)))){ # happen when y is only NULL
+if(all(unlist(geom) == "geom_vline")){
+tempo.cat <- paste0("ERROR IN ", function.name, " NOT POSSIBLE TO DRAW geom_vline KIND OF LINES ALONE IF y.lim ARGUMENT IS SET TO NULL, SINCE NO Y-AXIS DEFINED (", ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y")), " ARGUMENT MUST BE NULL FOR THESE KIND OF LINES)")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+tempo.cat <- paste0("ERROR IN ", function.name, " y.lim ARGUMENT MADE OF NA, -Inf OR Inf ONLY: ", paste(y.lim, collapse = " "))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+y.lim.order <- order(y.lim) # to deal with inverse axis
+y.lim <- sort(y.lim)
+y.lim[1] <- y.lim[1] - abs(y.lim[2] - y.lim[1]) * ifelse(diff(y.lim.order) > 0, y.bottom.extra.margin, y.top.extra.margin) # diff(y.lim.order) > 0 means not inversed axis
+y.lim[2] <- y.lim[2] + abs(y.lim[2] - y.lim[1]) * ifelse(diff(y.lim.order) > 0, y.top.extra.margin, y.bottom.extra.margin) # diff(y.lim.order) > 0 means not inversed axis
+if(y.include.zero == TRUE){ # no need to check y.log != "no" because done before
+y.lim <- range(c(y.lim, 0), na.rm = TRUE, finite = TRUE) # finite = TRUE removes all the -Inf and Inf except if only this. In that case, whatever the -Inf and/or Inf present, output -Inf;Inf range. Idem with NA only
+}
+y.lim <- y.lim[y.lim.order]
+if(any(is.na(y.lim))){
+tempo.cat <- paste0("ERROR IN ", function.name, ": CODE INCONSISTENCY 4")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+# end axes management
+
+
+
+
+# create a fake categ if NULL to deal with legend display
+if(is.null(categ)){
+categ <- vector("list", length(data1))
+categ[] <- "fake_categ"
+for(i2 in 1:length(data1)){
+data1[[i2]] <- cbind(data1[[i2]], fake_categ = "", stringsAsFactors = TRUE)
+if(geom[[i2]] == "geom_hline" | geom[[i2]] == "geom_vline"){
+data1[[i2]][, "fake_categ"] <- factor(paste0("Line_", 1:nrow(data1[[i2]])))
+}
+}
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NULL categ ARGUMENT -> FAKE \"fake_categ\" COLUMN ADDED TO EACH DATA FRAME OF data1, AND FILLED WITH \"\"")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# categ is not NULL anymore
+if(is.null(categ.class.order)){
+categ.class.order <- vector("list", length = length(data1))
+tempo.categ.class.order <- NULL
+for(i2 in 1:length(categ.class.order)){
+categ.class.order[[i2]] <- levels(data1[[i2]][, categ[[i2]]])
+names(categ.class.order)[i2] <- categ[[i2]]
+tempo.categ.class.order <- c(tempo.categ.class.order, ifelse(i2 != 1, "\n", ""), categ.class.order[[i2]])
+}
+if(any(unlist(legend.disp))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") THE categ.class.order SETTING IS NULL. ALPHABETICAL ORDER WILL BE APPLIED FOR CLASS ORDERING:\n", paste(tempo.categ.class.order, collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+# end create a fake categ if NULL to deal with legend display
+# categ.class.order is not NULL anymore
+
+
+# vector of color with length as in levels(categ) of data1
+if(is.null(color)){
+color <- vector("list", length(data1))
+length.categ.list <- lapply(lapply(mapply(FUN = "[[", data1, categ, SIMPLIFY = FALSE), FUN = unique), FUN = function(x){length(x[ ! is.na(x)])})
+length.categ.list[sapply(categ, FUN = "==", "fake_categ")] <- 1 # when is.null(color), a single color for all the dots or lines of data[[i1]] that contain "fake_categ" category
+total.categ.length <- sum(unlist(length.categ.list), na.rm = TRUE)
+tempo.color <- fun_gg_palette(total.categ.length)
+tempo.count <- 0
+for(i2 in 1:length(data1)){
+color[[i2]] <- tempo.color[(1:length.categ.list[[i2]]) + tempo.count]
+tempo.count <- tempo.count + length.categ.list[[i2]]
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NULL color ARGUMENT -> COLORS RESPECTIVELY ATTRIBUTED TO EACH CLASS OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i2, " OF categ ARGUMENT")), " (", categ[[i2]], ") IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i2, " OF data1 ARGUMENT")), ":\n", paste(color[[i2]], collapse = " "), "\n", paste(if(all(levels(data1[[i2]][, categ[[i2]]]) == "")){'\"\"'}else{levels(data1[[i2]][, categ[[i2]]])}, collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+# end vector of color with length as in levels(categ) of data1
+# color is not NULL anymore
+
+
+# na detection and removal
+data1.ini <- data1 # to report NA removal
+removed.row.nb <- vector("list", length = length(data1)) # to report NA removal
+removed.rows <- vector("list", length = length(data1)) # to report NA removal
+for(i1 in 1:length(data1)){
+column.check <- unlist(c( #unlist because creates a list
+if(x[[i1]] == "fake_x"){NULL}else{x[[i1]]}, 
+if(y[[i1]] == "fake_y"){NULL}else{y[[i1]]}, 
+if(is.null(categ[[i1]])){NULL}else{categ[[i1]]}, 
+if(is.null(facet.categ)){NULL}else{facet.categ}
+)) # dot.categ because can be a 3rd column of data1
+if(any(is.na(data1[[i1]][, column.check]))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NA DETECTED IN COLUMNS ", paste(column.check, collapse = " "), " OF ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " AND CORRESPONDING ROWS REMOVED (SEE $removed.row.nb AND $removed.rows)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+for(i3 in 1:length(column.check)){
+if(any(is.na(data1[[i1]][, column.check[i3]]))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") NA REMOVAL DUE TO COLUMN ", column.check[i3], " OF ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+removed.row.nb[[i1]] <- unlist(lapply(lapply(c(data1[[i1]][column.check]), FUN = is.na), FUN = which))
+removed.rows[[i1]] <- data1[[i1]][removed.row.nb[[i1]], ]
+column.check <- column.check[ ! (column.check == x[[i1]] | column.check == y[[i1]])] # remove x and y to keep quali columns
+if(length(removed.row.nb[[i1]]) != 0){
+data1[[i1]] <- data1[[i1]][-removed.row.nb[[i1]], ]
+for(i4 in 1:length(column.check)){
+if(any( ! unique(removed.rows[[i1]][, column.check[i4]]) %in% unique(data1[[i1]][, column.check[i4]]))){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") IN COLUMN ", column.check[i4], " OF ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", THE FOLLOWING CLASSES HAVE DISAPPEARED AFTER NA REMOVAL\n(IF COLUMN USED IN THE PLOT, THIS CLASS WILL NOT BE DISPLAYED):\n", paste(unique(removed.rows[[i1]][, column.check[i4]])[ ! unique(removed.rows[[i1]][, column.check[i4]]) %in% unique(data1[[i1]][, column.check[i4]])], collapse = " "))
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+if(column.check[i4] %in% categ[[i1]]){
+categ.class.order[[i1]] <- levels(data1[[i1]][, column.check[i4]])[levels(data1[[i1]][, column.check[i4]]) %in% unique(data1[[i1]][, column.check[i4]])] # remove the absent class in the categ.class.order vector
+color[[i1]] <-color[[i1]][levels(data1[[i1]][, column.check[i4]]) %in% unique(data1[[i1]][, column.check[i4]])] # remove the absent color in the character vector
+data1[[i1]][, column.check[i4]] <- factor(as.character(data1[[i1]][, column.check[i4]]), levels = unique(categ.class.order[[i1]]))
+}
+if(column.check[i4] %in% facet.categ){ # works if facet.categ == NULL this method should keep the order of levels when removing some levels
+tempo.levels <- levels(data1[[i1]][, column.check[i4]])[levels(data1[[i1]][, column.check[i4]]) %in% unique(as.character(data1[[i1]][, column.check[i4]]))]
+data1[[i1]][, column.check[i4]] <- factor(as.character(data1[[i1]][, column.check[i4]]), levels = tempo.levels)
+}
+}
+}
+}
+}else{
+removed.row.nb[[i1]] <- NULL
+removed.rows[[i1]] <- NULL
+}
+}
+# end na detection and removal
+
+
+
+# last check
+for(i1 in 1:length(data1)){
+if(categ[[i1]] != "fake_categ" & length(color[[i1]]) != length(unique(data1[[i1]][, categ[[i1]]]))){
+tempo.cat <- paste0("ERROR IN ", function.name, " LAST CHECK: ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), " MUST HAVE THE LENGTH OF LEVELS OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), "\nHERE IT IS COLOR LENGTH ", length(color[[i1]]), " VERSUS CATEG LEVELS LENGTH ", length(unique(data1[[i1]][, categ[[i1]]])))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else if(categ[[i1]] == "fake_categ" & length(color[[i1]]) != 1){
+tempo.cat <- paste0("ERROR IN ", function.name, " LAST CHECK: ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), " MUST HAVE LENGTH 1 WHEN ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IS NULL\nHERE IT IS COLOR LENGTH ", length(color[[i1]]))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+# end last check
+
+
+
+
+
+# conversion of geom_hline and geom_vline
+for(i1 in 1:length(data1)){
+if(geom[[i1]] == "geom_hline" | geom[[i1]] == "geom_vline"){
+final.data.frame <- data.frame()
+for(i3 in 1:nrow(data1[[i1]])){
+tempo.data.frame <- rbind(data1[[i1]][i3, ], data1[[i1]][i3, ], stringsAsFactors = TRUE)
+if(geom[[i1]] == "geom_hline"){
+tempo.data.frame[, x[[i1]]] <- x.lim
+}else if(geom[[i1]] == "geom_vline"){
+tempo.data.frame[, y[[i1]]] <- y.lim
+}else{
+tempo.cat <- paste0("ERROR IN ", function.name, ": CODE INCONSISTENCY 5")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+# 3 lines below inactivated because I put that above
+# if(is.null(categ[[i1]])){
+# data1[, "fake_categ"] <- paste0("Line_", i3)
+# }
+final.data.frame <- rbind(final.data.frame, tempo.data.frame, stringsAsFactors = TRUE)
+}
+data1[[i1]] <- final.data.frame
+geom[[i1]] <- "geom_line"
+if(length(color[[i1]]) == 1){
+color[[i1]] <- rep(color[[i1]], length(unique(data1[[i1]][ , categ[[i1]]])))
+}else if(length(color[[i1]]) != length(unique(data1[[i1]][ , categ[[i1]]]))){
+tempo.cat <- paste0("ERROR IN ", function.name, " geom_hline AND geom_vline CONVERSION TO FIT THE XLIM AND YLIM LIMITS OF THE DATA: ", ifelse(length(color) == 1, "color", paste0("ELEMENT NUMBER ", i1, " OF color ARGUMENT")), " MUST HAVE THE LENGTH OF LEVELS OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), "\nHERE IT IS COLOR LENGTH ", length(color[[i1]]), " VERSUS CATEG LEVELS LENGTH ", length(unique(data1[[i1]][, categ[[i1]]])))
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+}
+}
+# end conversion of geom_hline and geom_vline
+
+
+
+
+# kind of geom_point (vectorial or raster)
+scatter.kind <- vector("list", length = length(data1)) # list of same length as data1, that will be used to use either ggplot2::geom_point() (vectorial dot layer) or fun_gg_point_rast() (raster dot layer)
+fix.ratio <- FALSE
+if(is.null(raster.threshold)){
+if(raster == TRUE){
+scatter.kind[] <- "fun_gg_point_rast" # not important to fill everything: will be only used when geom == "geom_point"
+fix.ratio <- TRUE
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") RASTER PLOT GENERATED -> ASPECT RATIO OF THE PLOT REGION SET BY THE raster.ratio ARGUMENT (", fun_round(raster.ratio, 2), ") TO AVOID A BUG OF ELLIPSOID DOT DRAWING")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}else{
+scatter.kind[] <- "ggplot2::geom_point"
+}
+}else{
+for(i2 in 1:length(data1)){
+if(geom[[i2]] == "geom_point"){
+if(nrow(data1[[i2]]) <= raster.threshold){
+scatter.kind[[i2]] <- "ggplot2::geom_point"
+}else{
+scatter.kind[[i2]] <- "fun_gg_point_rast"
+fix.ratio <- TRUE
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i2, " OF data1 ARGUMENT")), " LAYER AS RASTER (NOT VECTORIAL)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+}
+if(any(unlist(scatter.kind) == "fun_gg_point_rast")){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") RASTER PLOT GENERATED -> ASPECT RATIO OF THE PLOT REGION SET BY THE raster.ratio ARGUMENT (", fun_round(raster.ratio, 2), ") TO AVOID A BUG OF ELLIPSOID DOT DRAWING")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+# end kind of geom_point (vectorial or raster)
+
+
+
+
+# no need loop part
+coord.names <- NULL
+tempo.gg.name <- "gg.indiv.plot."
+tempo.gg.count <- 0
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste0("ggplot2::ggplot()", if(is.null(add)){""}else{add})))) # add added here to have the facets
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::xlab(if(is.null(x.lab)){x[[1]]}else{x.lab}))
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::ylab(if(is.null(y.lab)){y[[1]]}else{y.lab}))
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::ggtitle(title))
+# text angle management
+x.tempo.just <- fun_gg_just(angle = x.text.angle, pos = "bottom", kind = "axis")
+y.tempo.just <- fun_gg_just(angle = y.text.angle, pos = "left", kind = "axis")
+# end text angle management
+add.check <- TRUE
+if( ! is.null(add)){ # if add is NULL, then = 0
+if(grepl(pattern = "ggplot2::theme", add) == TRUE){
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") \"ggplot2::theme\" STRING DETECTED IN THE add ARGUMENT\n-> INTERNAL GGPLOT2 THEME FUNCTIONS theme() AND theme_classic() HAVE BEEN INACTIVATED, TO BE USED BY THE USER\n-> article ARGUMENT WILL BE IGNORED\nIT IS RECOMMENDED TO USE \"+ theme(aspect.ratio = raster.ratio)\" IF RASTER MODE IS ACTIVATED")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+add.check <- FALSE
+}
+}
+if(add.check == TRUE & article == TRUE){
+# WARNING: not possible to add several times theme(). NO message but the last one overwrites the others
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::theme_classic(base_size = text.size))
+if(grid == TRUE){
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), m.gg <- ggplot2::theme(
+text = ggplot2::element_text(size = text.size), 
+plot.title = ggplot2::element_text(size = title.text.size), # stronger than text
+legend.key = ggplot2::element_rect(color = "white", size = 1.5), # size of the frame of the legend
+line = ggplot2::element_line(size = 0.5), 
+axis.line.y.left = ggplot2::element_line(colour = "black"), # draw lines for the y axis
+axis.line.x.bottom = ggplot2::element_line(colour = "black"), # draw lines for the x axis
+panel.grid.major.x = ggplot2::element_line(colour = "grey85", size = 0.75), 
+panel.grid.minor.x = ggplot2::element_line(colour = "grey90", size = 0.25), 
+panel.grid.major.y = ggplot2::element_line(colour = "grey85", size = 0.75), 
+panel.grid.minor.y = ggplot2::element_line(colour = "grey90", size = 0.25), 
+axis.text.x = ggplot2::element_text(angle = x.tempo.just$angle, hjust = x.tempo.just$hjust, vjust = x.tempo.just$vjust),
+axis.text.y = ggplot2::element_text(angle = y.tempo.just$angle, hjust = y.tempo.just$hjust, vjust = y.tempo.just$vjust), 
+aspect.ratio = if(fix.ratio == TRUE){raster.ratio}else{NULL} # for raster
+))
+}else{
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), m.gg <- ggplot2::theme(
+text = ggplot2::element_text(size = text.size), 
+plot.title = ggplot2::element_text(size = title.text.size), # stronger than text
+line = ggplot2::element_line(size = 0.5), 
+legend.key = ggplot2::element_rect(color = "white", size = 1.5), # size of the frame of the legend
+axis.line.y.left = ggplot2::element_line(colour = "black"), 
+axis.line.x.bottom = ggplot2::element_line(colour = "black"), 
+axis.text.x = ggplot2::element_text(angle = x.tempo.just$angle, hjust = x.tempo.just$hjust, vjust = x.tempo.just$vjust),
+axis.text.y = ggplot2::element_text(angle = y.tempo.just$angle, hjust = y.tempo.just$hjust, vjust = y.tempo.just$vjust), 
+aspect.ratio = if(fix.ratio == TRUE){raster.ratio}else{NULL} # for raster
+))
+}
+}else if(add.check == TRUE & article == FALSE){
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), m.gg <- ggplot2::theme(
+text = ggplot2::element_text(size = text.size), 
+plot.title = ggplot2::element_text(size = title.text.size), # stronger than text
+line = ggplot2::element_line(size = 0.5), 
+legend.key = ggplot2::element_rect(color = "white", size = 1.5), # size of the frame of the legend
+panel.background = ggplot2::element_rect(fill = "grey95"), 
+axis.line.y.left = ggplot2::element_line(colour = "black"), 
+axis.line.x.bottom = ggplot2::element_line(colour = "black"), 
+panel.grid.major.x = ggplot2::element_line(colour = "grey85", size = 0.75), 
+panel.grid.minor.x = ggplot2::element_line(colour = "grey90", size = 0.25), 
+panel.grid.major.y = ggplot2::element_line(colour = "grey85", size = 0.75), 
+panel.grid.minor.y = ggplot2::element_line(colour = "grey90", size = 0.25), 
+strip.background = ggplot2::element_rect(fill = "white", colour = "black"), 
+axis.text.x = ggplot2::element_text(angle = x.tempo.just$angle, hjust = x.tempo.just$hjust, vjust = x.tempo.just$vjust),
+axis.text.y = ggplot2::element_text(angle = y.tempo.just$angle, hjust = y.tempo.just$hjust, vjust = y.tempo.just$vjust), 
+aspect.ratio = if(fix.ratio == TRUE){raster.ratio}else{NULL} # for raster
+# do not work -> legend.position = "none" # to remove the legend completely: https://www.datanovia.com/en/blog/how-to-remove-legend-from-a-ggplot/
+))
+}
+# end no need loop part
+
+
+# loop part
+point.count <- 0
+line.count <- 0
+lg.order <- vector(mode = "list", length = 6) # order of the legend
+lg.order <- lapply(lg.order, as.numeric) # order of the legend
+lg.color <- vector(mode = "list", length = 6) # color of the legend
+lg.dot.shape <- vector(mode = "list", length = 6) # etc.
+lg.dot.size <- vector(mode = "list", length = 6) # etc.
+lg.dot.size <- lapply(lg.dot.size, as.numeric) # etc.
+lg.dot.border.size <- vector(mode = "list", length = 6) # etc.
+lg.dot.border.size <- lapply(lg.dot.border.size, as.numeric) # etc.
+lg.dot.border.color <- vector(mode = "list", length = 6) # etc.
+lg.line.size <- vector(mode = "list", length = 6) # etc.
+lg.line.size <- lapply(lg.line.size, as.numeric) # etc.
+lg.line.type <- vector(mode = "list", length = 6) # etc.
+lg.alpha <- vector(mode = "list", length = 6) # etc.
+lg.alpha <- lapply(lg.alpha, as.numeric) # etc.
+for(i1 in 1:length(data1)){
+if(geom[[i1]] == "geom_point"){
+point.count <- point.count + 1
+if(point.count == 1){
+fin.lg.disp[[1]] <- legend.disp[[point.count + line.count]]
+lg.order[[1]] <- point.count + line.count
+lg.color[[1]] <- color[[i1]]
+lg.dot.shape[[1]] <- dot.shape[[i1]]
+lg.dot.size[[1]] <- dot.size[[i1]]
+lg.dot.border.size[[1]] <- dot.border.size[[i1]]
+lg.dot.border.color[[1]] <- dot.border.color[[i1]]
+lg.alpha[[1]] <- alpha[[i1]]
+class.categ <- levels(factor(data1[[i1]][, categ[[i1]]]))
+if(plot == TRUE & fin.lg.disp[[1]] == TRUE & dot.shape[[1]] %in% 0:14 & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){ # if any Graph device already open and this device is "windows", or if no Graph device opened yet and we are on windows system -> prevention of alpha legend bug on windows using value 1
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") GRAPHIC DEVICE USED ON A WINDOWS SYSTEM ->\nTRANSPARENCY OF THE DOTS (DOT LAYER NUMBER ", point.count, ") IS INACTIVATED IN THE LEGEND TO PREVENT A WINDOWS DEPENDENT BUG (SEE https://github.com/tidyverse/ggplot2/issues/2452)\nTO OVERCOME THIS ON WINDOWS, USE ANOTHER DEVICE (pdf() FOR INSTANCE)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+lg.alpha[[1]] <- 1 # to avoid a bug on windows: if alpha argument is different from 1 for lines (transparency), then lines are not correctly displayed in the legend when using the R GUI (bug https://github.com/tidyverse/ggplot2/issues/2452). No bug when using a pdf
+}else{
+lg.alpha[[1]] <- alpha[[i1]]
+}
+for(i5 in 1:length(color[[i1]])){ # or length(class.categ). It is the same because already checked that lengths are the same
+tempo.data.frame <- data1[[i1]][data1[[i1]][, categ[[i1]]] == class.categ[i5], ]
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = scatter.kind[[i1]]))(data = tempo.data.frame, mapping = ggplot2::aes_string(x = x[[i1]], y = y[[i1]], fill = categ[[i1]]), shape = dot.shape[[i1]], size = dot.size[[i1]], stroke = dot.border.size[[i1]], color = if(is.null(dot.border.color)){color[[i1]][i5]}else{dot.border.color[[i1]]}, alpha = alpha[[i1]], show.legend = if(i5 == 1){TRUE}else{FALSE})) # WARNING: a single color allowed for color argument outside aesthetic, but here a single color for border --> loop could be inactivated but kept for commodity # legend.show option do not remove the legend, only the aesthetic of the legend (dot, line, etc.). Used here to avoid multiple layers of legend which corrupt transparency
+coord.names <- c(coord.names, paste0(geom[[i1]], ".", class.categ[i5]))
+}
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_fill_manual(name = if(is.null(legend.name)){NULL}else{legend.name[[i1]]}, values = as.character(color[[i1]]), breaks = class.categ)) # values are the values of fill, breaks reorder the classes according to class.categ in the legend, order argument of guide_legend determines the order of the different aesthetics in the legend (not order of classes). See guide_legend settings of scale_..._manual below
+}
+if(point.count == 2){
+fin.lg.disp[[2]] <- legend.disp[[point.count + line.count]]
+lg.order[[2]] <- point.count + line.count
+lg.color[[2]] <- color[[i1]]
+lg.dot.shape[[2]] <- dot.shape[[i1]]
+lg.dot.size[[2]] <- dot.size[[i1]]
+lg.dot.border.size[[2]] <- dot.border.size[[i1]]
+lg.dot.border.color[[2]] <- dot.border.color[[i1]]
+lg.alpha[[2]] <- alpha[[i1]]
+class.categ <- levels(factor(data1[[i1]][, categ[[i1]]]))
+if(plot == TRUE & fin.lg.disp[[2]] == TRUE & dot.shape[[2]] %in% 0:14 & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){ # if any Graph device already open and this device is "windows", or if no Graph device opened yet and we are on windows system -> prevention of alpha legend bug on windows using value 1
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") GRAPHIC DEVICE USED ON A WINDOWS SYSTEM ->\nTRANSPARENCY OF THE DOTS (DOT LAYER NUMBER ", point.count, ") IS INACTIVATED IN THE LEGEND TO PREVENT A WINDOWS DEPENDENT BUG (SEE https://github.com/tidyverse/ggplot2/issues/2452)\nTO OVERCOME THIS ON WINDOWS, USE ANOTHER DEVICE (pdf() FOR INSTANCE)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+lg.alpha[[2]] <- 1 # to avoid a bug on windows: if alpha argument is different from 1 for lines (transparency), then lines are not correctly displayed in the legend when using the R GUI (bug https://github.com/tidyverse/ggplot2/issues/2452). No bug when using a pdf
+}else{
+lg.alpha[[2]] <- alpha[[i1]]
+}
+for(i5 in 1:length(color[[i1]])){ # or length(class.categ). It is the same because already checked that lengths are the same
+tempo.data.frame <- data1[[i1]][data1[[i1]][, categ[[i1]]] == class.categ[i5], ]
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = scatter.kind[[i1]]))(data = tempo.data.frame, mapping = ggplot2::aes_string(x = x[[i1]], y = y[[i1]], shape = categ[[i1]]), size = dot.size[[i1]], stroke = dot.border.size[[i1]], fill = color[[i1]][i5], color = if(is.null(dot.border.color)){color[[i1]][i5]}else{dot.border.color[[i1]]}, alpha = alpha[[i1]], show.legend = FALSE)) # WARNING: a single color allowed for fill argument outside aesthetic, hence the loop # legend.show option do not remove the legend, only the aesthetic of the legend (dot, line, etc.). Used here to avoid multiple layers of legend which corrupt transparency
+coord.names <- c(coord.names, paste0(geom[[i1]], ".", class.categ[i5]))
+}
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_shape_manual(name = if(is.null(legend.name)){NULL}else{legend.name[[i1]]}, values = rep(dot.shape[[i1]], length(color[[i1]])), breaks = class.categ)) # values are the values of shape, breaks reorder the classes according to class.categ in the legend. See guide_legend settings of scale_..._manual below
+
+}
+if(point.count == 3){
+fin.lg.disp[[3]] <- legend.disp[[point.count + line.count]]
+lg.order[[3]] <- point.count + line.count
+lg.color[[3]] <- color[[i1]]
+lg.dot.shape[[3]] <- dot.shape[[i1]]
+lg.dot.size[[3]] <- dot.size[[i1]]
+lg.dot.border.size[[3]] <- dot.border.size[[i1]]
+lg.dot.border.color[[3]] <- dot.border.color[[i1]]
+lg.alpha[[3]] <- alpha[[i1]]
+class.categ <- levels(factor(data1[[i1]][, categ[[i1]]]))
+if(plot == TRUE & fin.lg.disp[[3]] == TRUE & dot.shape[[3]] %in% 0:14 & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){ # if any Graph device already open and this device is "windows", or if no Graph device opened yet and we are on windows system -> prevention of alpha legend bug on windows using value 1
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") GRAPHIC DEVICE USED ON A WINDOWS SYSTEM ->\nTRANSPARENCY OF THE DOTS (DOT LAYER NUMBER ", point.count, ") IS INACTIVATED IN THE LEGEND TO PREVENT A WINDOWS DEPENDENT BUG (SEE https://github.com/tidyverse/ggplot2/issues/2452)\nTO OVERCOME THIS ON WINDOWS, USE ANOTHER DEVICE (pdf() FOR INSTANCE)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+lg.alpha[[3]] <- 1 # to avoid a bug on windows: if alpha argument is different from 1 for lines (transparency), then lines are not correctly displayed in the legend when using the R GUI (bug https://github.com/tidyverse/ggplot2/issues/2452). No bug when using a pdf
+}else{
+lg.alpha[[3]] <- alpha[[i1]]
+}
+for(i5 in 1:length(color[[i1]])){ # or length(class.categ). It is the same because already checked that lengths are the same
+tempo.data.frame <- data1[[i1]][data1[[i1]][, categ[[i1]]] == class.categ[i5], ]
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = scatter.kind[[i1]]))(data = tempo.data.frame, mapping = ggplot2::aes_string(x = x[[i1]], y = y[[i1]], stroke = categ[[i1]]), shape = dot.shape[[i1]], size = dot.size[[i1]], fill = color[[i1]][i5], stroke = dot.border.size[[i1]], color = if(is.null(dot.border.color)){color[[i1]][i5]}else{dot.border.color[[i1]]}, alpha = alpha[[i1]], show.legend = FALSE)) # WARNING: a single color allowed for color argument outside aesthetic, hence the loop # legend.show option do not remove the legend, only the aesthetic of the legend (dot, line, etc.). Used here to avoid multiple layers of legend which corrupt transparency
+coord.names <- c(coord.names, paste0(geom[[i1]], ".", class.categ[i5]))
+}
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "stroke", name = if(is.null(legend.name)){NULL}else{legend.name[[i1]]}, values = rep(dot.border.size[[i1]], length(color[[i1]])), breaks = class.categ)) # values are the values of stroke, breaks reorder the classes according to class.categ in the legend. See guide_legend settings of scale_..._manual below
+
+}
+}else{
+line.count <- line.count + 1
+if(line.count == 1){
+fin.lg.disp[[4]] <- legend.disp[[point.count + line.count]]
+lg.order[[4]] <- point.count + line.count
+lg.color[[4]] <- color[[i1]]
+lg.line.size[[4]] <- line.size[[i1]]
+lg.line.type[[4]] <- line.type[[i1]]
+lg.alpha[[4]] <- alpha[[i1]]
+if(plot == TRUE & fin.lg.disp[[4]] == TRUE & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){ # if any Graph device already open and this device is "windows", or if no Graph device opened yet and we are on windows system -> prevention of alpha legend bug on windows using value 1
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") GRAPHIC DEVICE USED ON A WINDOWS SYSTEM ->\nTRANSPARENCY OF THE LINES (LINE LAYER NUMBER ", line.count, ") IS INACTIVATED IN THE LEGEND TO PREVENT A WINDOWS DEPENDENT BUG (SEE https://github.com/tidyverse/ggplot2/issues/2452)\nTO OVERCOME THIS ON WINDOWS, USE ANOTHER DEVICE (pdf() FOR INSTANCE)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+lg.alpha[[4]] <- 1 # to avoid a bug on windows: if alpha argument is different from 1 for lines (transparency), then lines are not correctly displayed in the legend when using the R GUI (bug https://github.com/tidyverse/ggplot2/issues/2452). No bug when using a pdf
+}else{
+lg.alpha[[4]] <- alpha[[i1]]
+}
+class.categ <- levels(factor(data1[[i1]][, categ[[i1]]]))
+for(i5 in 1:length(color[[i1]])){ # or length(class.categ). It is the same because already checked that lengths are the same
+tempo.data.frame <- data1[[i1]][data1[[i1]][, categ[[i1]]] == class.categ[i5], ]
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste0(
+"ggplot2::", 
+ifelse(geom[[i1]] == 'geom_stick', 'geom_segment', geom[[i1]]), # geom_segment because geom_stick converted to geom_segment for plotting
+"(data = tempo.data.frame, mapping = ggplot2::aes(x = ", 
+x[[i1]], 
+ifelse(geom[[i1]] == 'geom_stick', ", yend = ", ", y = "), 
+y[[i1]], 
+if(geom[[i1]] == 'geom_stick'){paste0(', xend = ', x[[i1]], ', y = ', y.lim[1])}, 
+", linetype = ", 
+categ[[i1]], 
+"), color = \"", 
+color[[i1]][i5], 
+"\", size = ", 
+line.size[[i1]], 
+ifelse(geom[[i1]] == 'geom_path', ', lineend = \"round\"', ''), 
+ifelse(geom[[i1]] == 'geom_step', paste0(', direction = \"', geom.step.dir[[i1]], '\"'), ''), 
+", alpha = ", 
+alpha[[i1]], 
+", show.legend = FALSE)"
+)))) # WARNING: a single color allowed for color argument outside aesthetic, hence the loop # legend.show option do not remove the legend, only the aesthetic of the legend (dot, line, etc.). Used here to avoid multiple layers of legend which corrupt transparency
+coord.names <- c(coord.names, paste0(geom[[i1]], ".", class.categ[i5]))
+}
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "linetype", name = if(is.null(legend.name)){NULL}else{legend.name[[i1]]}, values = rep(line.type[[i1]], length(color[[i1]])), breaks = class.categ)) # values are the values of linetype. 1 means solid. Regarding the alpha bug, I have tried different things without success: alpha in guide alone, in geom alone, in both, with different values, breaks reorder the classes according to class.categ in the legend
+}
+if(line.count == 2){
+fin.lg.disp[[5]] <- legend.disp[[point.count + line.count]]
+lg.order[[5]] <- point.count + line.count
+lg.color[[5]] <- color[[i1]]
+lg.line.size[[5]] <- line.size[[i1]]
+lg.line.type[[5]] <- line.type[[i1]]
+lg.alpha[[5]] <- alpha[[i1]]
+if(plot == TRUE & fin.lg.disp[[5]] == TRUE & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){ # if any Graph device already open and this device is "windows", or if no Graph device opened yet and we are on windows system -> prevention of alpha legend bug on windows using value 1
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") GRAPHIC DEVICE USED ON A WINDOWS SYSTEM ->\nTRANSPARENCY OF THE LINES (LINE LAYER NUMBER ", line.count, ") IS INACTIVATED IN THE LEGEND TO PREVENT A WINDOWS DEPENDENT BUG (SEE https://github.com/tidyverse/ggplot2/issues/2452)\nTO OVERCOME THIS ON WINDOWS, USE ANOTHER DEVICE (pdf() FOR INSTANCE)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+lg.alpha[[5]] <- 1 # to avoid a bug on windows: if alpha argument is different from 1 for lines (transparency), then lines are not correctly displayed in the legend when using the R GUI (bug https://github.com/tidyverse/ggplot2/issues/2452). No bug when using a pdf
+}else{
+lg.alpha[[5]] <- alpha[[i1]]
+}
+class.categ <- levels(factor(data1[[i1]][, categ[[i1]]]))
+for(i5 in 1:length(color[[i1]])){ # or length(class.categ). It is the same because already checked that lengths are the same
+tempo.data.frame <- data1[[i1]][data1[[i1]][, categ[[i1]]] == class.categ[i5], ]
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste0(
+"ggplot2::", 
+ifelse(geom[[i1]] == 'geom_stick', 'geom_segment', geom[[i1]]), # geom_segment because geom_stick converted to geom_segment for plotting
+"(data = tempo.data.frame, mapping = ggplot2::aes(x = ", 
+x[[i1]], 
+ifelse(geom[[i1]] == 'geom_stick', ", yend = ", ", y = "), 
+y[[i1]], 
+if(geom[[i1]] == 'geom_stick'){paste0(', xend = ', x[[i1]], ', y = ', y.lim[1])}, 
+", alpha = ", 
+categ[[i1]], 
+"), color = \"", 
+color[[i1]][i5], 
+"\", size = ", 
+line.size[[i1]], 
+", linetype = ", 
+ifelse(is.numeric(line.type[[i1]]), "", "\""), 
+line.type[[i1]], 
+ifelse(is.numeric(line.type[[i1]]), "", "\""), 
+ifelse(geom[[i1]] == 'geom_path', ', lineend = \"round\"', ''), 
+ifelse(geom[[i1]] == 'geom_step', paste0(', direction = \"', geom.step.dir[[i1]], '\"'), ''), 
+", show.legend = ", 
+ifelse(i5 == 1, TRUE, FALSE), 
+")"
+)))) # WARNING: a single color allowed for color argument outside aesthetic, hence the loop # legend.show option do not remove the legend, only the aesthetic of the legend (dot, line, etc.). Used here to avoid multiple layers of legend which corrupt transparency
+coord.names <- c(coord.names, paste0(geom[[i1]], ".", class.categ[i5]))
+}
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "alpha", name = if(is.null(legend.name)){NULL}else{legend.name[[i1]]}, values = rep(alpha[[i1]], length(color[[i1]])), breaks = class.categ)) # values are the values of linetype. 1 means solid. Regarding the alpha bug, I have tried different things without success: alpha in guide alone, in geom alone, in both, with different values, breaks reorder the classes according to class.categ in the legend
+}
+if(line.count == 3){
+fin.lg.disp[[6]] <- legend.disp[[point.count + line.count]]
+lg.order[[6]] <- point.count + line.count
+lg.color[[6]] <- color[[i1]]
+lg.line.size[[6]] <- line.size[[i1]]
+lg.line.type[[6]] <- line.type[[i1]]
+lg.alpha[[6]] <- alpha[[i1]]
+if(plot == TRUE & fin.lg.disp[[6]] == TRUE & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){ # if any Graph device already open and this device is "windows", or if no Graph device opened yet and we are on windows system -> prevention of alpha legend bug on windows using value 1
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") GRAPHIC DEVICE USED ON A WINDOWS SYSTEM ->\nTRANSPARENCY OF THE LINES (LINE LAYER NUMBER ", line.count, ") IS INACTIVATED IN THE LEGEND TO PREVENT A WINDOWS DEPENDENT BUG (SEE https://github.com/tidyverse/ggplot2/issues/2452)\nTO OVERCOME THIS ON WINDOWS, USE ANOTHER DEVICE (pdf() FOR INSTANCE)")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+lg.alpha[[6]] <- 1 # to avoid a bug on windows: if alpha argument is different from 1 for lines (transparency), then lines are not correctly displayed in the legend when using the R GUI (bug https://github.com/tidyverse/ggplot2/issues/2452). No bug when using a pdf
+}else{
+lg.alpha[[6]] <- alpha[[i1]]
+}
+class.categ <- levels(factor(data1[[i1]][, categ[[i1]]]))
+for(i5 in 1:length(color[[i1]])){ # or length(class.categ). It is the same because already checked that lengths are the same
+tempo.data.frame <- data1[[i1]][data1[[i1]][, categ[[i1]]] == class.categ[i5], ]
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste0("
+ggplot2::", 
+ifelse(geom[[i1]] == 'geom_stick', 'geom_segment', geom[[i1]]), # geom_segment because geom_stick converted to geom_segment for plotting
+"(data = tempo.data.frame, mapping = ggplot2::aes(x = ", 
+x[[i1]], 
+ifelse(geom[[i1]] == 'geom_stick', ", yend = ", ", y = "), 
+y[[i1]], 
+if(geom[[i1]] == 'geom_stick'){paste0(', xend = ', x[[i1]], ', y = ', y.lim[1])}, 
+", size = ", 
+categ[[i1]], 
+"), color = \"", 
+color[[i1]][i5], 
+"\", linetype = ", 
+ifelse(is.numeric(line.type[[i1]]), "", "\""), 
+line.type[[i1]], 
+ifelse(is.numeric(line.type[[i1]]), "", "\""), 
+ifelse(geom[[i1]] == 'geom_path', ', lineend = \"round\"', ''), 
+ifelse(geom[[i1]] == 'geom_step', paste0(', direction = \"', geom.step.dir[[i1]], '\"'), ''), 
+", alpha = ", 
+alpha[[i1]], 
+", show.legend = FALSE)"
+)))) # WARNING: a single color allowed for color argument outside aesthetic, hence the loop # legend.show option do not remove the legend, only the aesthetic of the legend (dot, line, etc.). Used here to avoid multiple layers of legend which corrupt transparency
+coord.names <- c(coord.names, paste0(geom[[i1]], ".", class.categ[i5]))
+}
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "size", name = if(is.null(legend.name)){NULL}else{legend.name[[i1]]}, values = rep(line.size[[i1]], length(color[[i1]])), breaks = class.categ)) # values are the values of linetype. 1 means solid. Regarding the alpha bug, I have tried different things without success: alpha in guide alone, in geom alone, in both, breaks reorder the classes according to class.categ in the legend
+}
+}
+}
+# end loop part
+
+
+
+
+# legend display
+tempo.legend.final <- 'ggplot2::guides(
+fill = if(fin.lg.disp[[1]] == TRUE){
+ggplot2::guide_legend(
+order = lg.order[[1]], 
+override.aes = list(
+fill = lg.color[[1]], 
+colour = if(lg.dot.shape[[1]] %in% 21:24 & ! is.null(dot.border.color)){lg.dot.border.color[[1]]}else{lg.color[[1]]}, # lg.dot.shape[[1]] %in% 21:24 are the only one that can be filled
+shape = lg.dot.shape[[1]], 
+size = lg.dot.size[[1]], 
+stroke = lg.dot.border.size[[1]], 
+alpha = lg.alpha[[1]], 
+linetype = 0
+)
+)
+}else{
+FALSE
+}, 
+shape = if(fin.lg.disp[[2]] == TRUE){
+ggplot2::guide_legend(
+order = lg.order[[2]], 
+override.aes = list(
+fill = lg.color[[2]], 
+colour = if(lg.dot.shape[[2]] %in% 21:24 & ! is.null(dot.border.color)){lg.dot.border.color[[2]]}else{lg.color[[2]]}, # lg.dot.shape[[2]] %in% 21:24 are the only one that can be filled
+shape = lg.dot.shape[[2]], 
+size = lg.dot.size[[2]], 
+stroke = lg.dot.border.size[[2]], 
+alpha = lg.alpha[[2]], 
+linetype = 0
+)
+)
+}else{
+FALSE
+}, 
+stroke = if(fin.lg.disp[[3]] == TRUE){
+ggplot2::guide_legend(
+order = lg.order[[3]], 
+override.aes = list(
+fill = lg.color[[3]], 
+colour = if(lg.dot.shape[[3]] %in% 21:24 & ! is.null(dot.border.color)){lg.dot.border.color[[3]]}else{lg.color[[3]]}, # lg.dot.shape[[3]] %in% 21:24 are the only one that can be filled
+shape = lg.dot.shape[[3]], 
+size = lg.dot.size[[3]], 
+stroke = lg.dot.border.size[[3]], 
+alpha = lg.alpha[[3]], 
+linetype = 0
+)
+)
+}else{
+FALSE
+}, 
+linetype = if(fin.lg.disp[[4]] == TRUE){
+ggplot2::guide_legend(
+order = lg.order[[4]], 
+override.aes = list(
+color = lg.color[[4]], 
+size = lg.line.size[[4]], 
+linetype = lg.line.type[[4]], 
+alpha = lg.alpha[[4]], 
+shape = NA
+)
+)
+}else{
+FALSE
+}, 
+alpha = if(fin.lg.disp[[5]] == TRUE){
+ggplot2::guide_legend(
+order = lg.order[[5]], 
+override.aes = list(
+color = lg.color[[5]], 
+size = lg.line.size[[5]], 
+linetype = lg.line.type[[5]], 
+alpha = lg.alpha[[5]], 
+shape = NA
+)
+)
+}else{
+FALSE
+}, 
+size = if(fin.lg.disp[[6]] == TRUE){
+ggplot2::guide_legend(
+order = lg.order[[6]], 
+override.aes = list(
+color = lg.color[[6]], 
+size = lg.line.size[[6]], 
+linetype = lg.line.type[[6]], 
+alpha = lg.alpha[[6]], 
+shape = NA
+)
+)
+}else{
+FALSE
+}
+)' # clip = "off" to have secondary ticks outside plot region does not work
+if( ! is.null(legend.width)){
+if(any(unlist(legend.disp))){ # means some TRUE
+tempo.graph.info <- suppressMessages(ggplot2::ggplot_build(eval(parse(text = paste0(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), ' + ', tempo.legend.final))))) # will be recovered later again, when ylim will be considered
+legend.final <- fun_gg_get_legend(ggplot_built = tempo.graph.info, fun.name = function.name) # get legend
+fin.lg.disp[] <- FALSE # remove all the legends. Must be done even if fin.lg.disp is not appearing in the code thenafter. Otherwise twice the legend
+if(is.null(legend.final) & plot == TRUE){ # even if any(unlist(legend.disp)) is TRUE
+legend.final <- fun_gg_empty_graph() # empty graph instead of legend
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") LEGEND REQUESTED (NON-NULL categ ARGUMENT OR legend.show ARGUMENT SET TO TRUE)\nBUT IT SEEMS THAT THE PLOT HAS NO LEGEND -> EMPTY LEGEND SPACE CREATED BECAUSE OF THE NON-NULL legend.width ARGUMENT\n")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}else if(plot == TRUE){ # means all FALSE
+legend.final <- ggplot2::ggplot()+ggplot2::theme_void() # empty graph instead of legend
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") LEGEND REQUESTED (NON-NULL categ ARGUMENT OR legend.show ARGUMENT SET TO TRUE)\nBUT IT SEEMS THAT THE PLOT HAS NO LEGEND -> EMPTY LEGEND SPACE CREATED BECAUSE OF THE NON-NULL legend.width ARGUMENT\n")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+}
+if( ! any(unlist(legend.disp))){
+fin.lg.disp[] <- FALSE # remove all the legends. Must be done even if fin.lg.disp is not appearing in the code thenafter. Otherwise twice the legend
+}
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = tempo.legend.final)))
+# end legend display
+
+
+
+
+
+# scale management
+tempo.coord <- suppressMessages(ggplot2::ggplot_build(eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + ", ' + ggplot2::scale_x_continuous(expand = c(0, 0), limits = sort(x.lim), oob = scales::rescale_none) + ggplot2::scale_y_continuous(expand = c(0, 0), limits = sort(y.lim), oob = scales::rescale_none)'))))$layout$panel_params[[1]]) # here I do not need the x-axis and y-axis orientation, I just need the number of main ticks
+# x.second.tick.positions # coordinates of secondary ticks (only if x.second.tick.nb argument is non-null or if x.log argument is different from "no")
+if(x.log != "no"){ # integer main ticks for log2 and log10
+tempo.scale <- (as.integer(min(x.lim, na.rm = TRUE)) - 1):(as.integer(max(x.lim, na.rm = TRUE)) + 1)
+}else{
+tempo <- if(is.null(attributes(tempo.coord$x$breaks))){tempo.coord$x$breaks}else{unlist(attributes(tempo.coord$x$breaks))}
+if(all(is.na(tempo))){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nONLY NA IN tempo.coord$x$breaks")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+if(length(unique(x.lim)) <= 1){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nIT SEEMS THAT X-AXIS VALUES HAVE A NULL RANGE: ", paste(x.lim, collapse = " "), "\nPLEASE, USE THE x.lim ARGUMENT WITH 2 DIFFERENT VALUES TO SOLVE THIS")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+tempo.scale <- fun_scale(lim = x.lim, n = ifelse(is.null(x.tick.nb), length(tempo[ ! is.na(tempo)]), x.tick.nb)) # in ggplot 3.3.0, tempo.coord$x.major_source replaced by tempo.coord$x$breaks. If fact: n = ifelse(is.null(x.tick.nb), length(tempo[ ! is.na(tempo)]), x.tick.nb)) replaced by n = ifelse(is.null(x.tick.nb), 4, x.tick.nb))
+}
+}
+x.second.tick.values <- NULL
+x.second.tick.pos <- NULL
+if(x.log != "no"){
+tempo <- fun_inter_ticks(lim = x.lim, log = x.log)
+x.second.tick.values <- tempo$values
+x.second.tick.pos <- tempo$coordinates
+# if(vertical == TRUE){ # do not remove in case the bug is fixed
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(
+geom = "segment", x = x.second.tick.pos, 
+xend = x.second.tick.pos, 
+y = if(diff(y.lim) > 0){tempo.coord$y.range[1]}else{tempo.coord$y.range[2]}, 
+yend = if(diff(y.lim) > 0){tempo.coord$y.range[1] + abs(diff(tempo.coord$y.range)) / 80}else{tempo.coord$y.range[2] - abs(diff(tempo.coord$y.range)) / 80}
+))
+# }else{ # not working because of the ggplot2 bug
+# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(geom = "segment", y = x.second.tick.pos, yend = x.second.tick.pos, x = tempo.coord$x.range[1], xend = tempo.coord$x.range[1] + diff(tempo.coord$x.range) / 80))
+# }
+coord.names <- c(coord.names, "x.second.tick.positions")
+}else if(( ! is.null(x.second.tick.nb)) & x.log == "no"){
+# if(x.second.tick.nb > 0){ #inactivated because already checked before
+tempo <- fun_inter_ticks(lim = x.lim, log = x.log, breaks = tempo.scale, n = x.second.tick.nb)
+x.second.tick.values <- tempo$values
+x.second.tick.pos <- tempo$coordinates
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(
+geom = "segment", 
+x = x.second.tick.pos, 
+xend = x.second.tick.pos, 
+y = if(diff(y.lim) > 0){tempo.coord$y.range[1]}else{tempo.coord$y.range[2]}, 
+yend = if(diff(y.lim) > 0){tempo.coord$y.range[1] + abs(diff(tempo.coord$y.range)) / 80}else{tempo.coord$y.range[2] - abs(diff(tempo.coord$y.range)) / 80}
+))
+coord.names <- c(coord.names, "x.second.tick.positions")
+}
+# for the ggplot2 bug with x.log, this does not work: eval(parse(text = ifelse(vertical == FALSE & x.log == "log10", "ggplot2::scale_x_continuous", "ggplot2::scale_x_continuous")))
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_x_continuous(
+breaks = tempo.scale, 
+minor_breaks = x.second.tick.pos, 
+labels = if(x.log == "log10"){scales::trans_format("identity", scales::math_format(10^.x))}else if(x.log == "log2"){scales::trans_format("identity", scales::math_format(2^.x))}else if(x.log == "no"){ggplot2::waiver()}else{tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 10") ; stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)}, 
+expand = c(0, 0), # remove space after after axis limits
+limits = sort(x.lim), # NA indicate that limits must correspond to data limits but xlim() already used
+oob = scales::rescale_none, 
+trans = ifelse(diff(x.lim) < 0, "reverse", "identity") # equivalent to ggplot2::scale_x_reverse() but create the problem of x-axis label disappearance with x.lim decreasing. Thus, do not use. Use xlim() below and after this
+))
+# end x.second.tick.positions
+# y.second.tick.positions # coordinates of secondary ticks (only if y.second.tick.nb argument is non-null or if y.log argument is different from "no")
+if(y.log != "no"){ # integer main ticks for log2 and log10
+tempo.scale <- (as.integer(min(y.lim, na.rm = TRUE)) - 1):(as.integer(max(y.lim, na.rm = TRUE)) + 1)
+}else{
+tempo <- if(is.null(attributes(tempo.coord$y$breaks))){tempo.coord$y$breaks}else{unlist(attributes(tempo.coord$y$breaks))}
+if(all(is.na(tempo))){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nONLY NA IN tempo.coord$y$breaks")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}
+if(length(unique(y.lim)) <= 1){
+tempo.cat <- paste0("ERROR IN ", function.name, "\nIT SEEMS THAT Y-AXIS VALUES HAVE A NULL RANGE: ", paste(y.lim, collapse = " "), "\nPLEASE, USE THE y.lim ARGUMENT WITH 2 DIFFERENT VALUES TO SOLVE THIS")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+tempo.scale <- fun_scale(lim = y.lim, n = ifelse(is.null(y.tick.nb), length(tempo[ ! is.na(tempo)]), y.tick.nb)) # in ggplot 3.3.0, tempo.coord$y.major_source replaced by tempo.coord$y$breaks. If fact: n = ifelse(is.null(y.tick.nb), length(tempo[ ! is.na(tempo)]), y.tick.nb)) replaced by n = ifelse(is.null(y.tick.nb), 4, y.tick.nb))
+}
+}
+y.second.tick.values <- NULL
+y.second.tick.pos <- NULL
+if(y.log != "no"){
+tempo <- fun_inter_ticks(lim = y.lim, log = y.log)
+y.second.tick.values <- tempo$values
+y.second.tick.pos <- tempo$coordinates
+# if(vertical == TRUE){ # do not remove in case the bug is fixed
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(
+geom = "segment", 
+y = y.second.tick.pos, 
+yend = y.second.tick.pos, 
+x = if(diff(x.lim) > 0){tempo.coord$x.range[1]}else{tempo.coord$x.range[2]}, 
+xend = if(diff(x.lim) > 0){tempo.coord$x.range[1] + abs(diff(tempo.coord$x.range)) / 80}else{tempo.coord$x.range[2] - abs(diff(tempo.coord$x.range)) / 80}
+))
+# }else{ # not working because of the ggplot2 bug
+# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(geom = "segment", x = y.second.tick.pos, xend = y.second.tick.pos, y = tempo.coord$y.range[1], yend = tempo.coord$y.range[1] + diff(tempo.coord$y.range) / 80))
+# }
+coord.names <- c(coord.names, "y.second.tick.positions")
+}else if(( ! is.null(y.second.tick.nb)) & y.log == "no"){
+# if(y.second.tick.nb > 0){ #inactivated because already checked before
+tempo <- fun_inter_ticks(lim = y.lim, log = y.log, breaks = tempo.scale, n = y.second.tick.nb)
+y.second.tick.values <- tempo$values
+y.second.tick.pos <- tempo$coordinates
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(
+geom = "segment", 
+y = y.second.tick.pos, 
+yend = y.second.tick.pos, 
+x = if(diff(x.lim) > 0){tempo.coord$x.range[1]}else{tempo.coord$x.range[2]}, 
+xend = if(diff(x.lim) > 0){tempo.coord$x.range[1] + abs(diff(tempo.coord$x.range)) / 80}else{tempo.coord$x.range[2] - abs(diff(tempo.coord$x.range)) / 80}
+))
+coord.names <- c(coord.names, "y.second.tick.positions")
+}
+# for the ggplot2 bug with y.log, this does not work: eval(parse(text = ifelse(vertical == FALSE & y.log == "log10", "ggplot2::scale_x_continuous", "ggplot2::scale_y_continuous")))
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_y_continuous(
+breaks = tempo.scale, 
+minor_breaks = y.second.tick.pos, 
+labels = if(y.log == "log10"){scales::trans_format("identity", scales::math_format(10^.x))}else if(y.log == "log2"){scales::trans_format("identity", scales::math_format(2^.x))}else if(y.log == "no"){ggplot2::waiver()}else{tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 10") ; stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)}, 
+expand = c(0, 0), # remove space after axis limits
+limits = sort(y.lim), # NA indicate that limits must correspond to data limits but ylim() already used
+oob = scales::rescale_none, 
+trans = ifelse(diff(y.lim) < 0, "reverse", "identity") # equivalent to ggplot2::scale_y_reverse() but create the problem of y-axis label disappearance with y.lim decreasing. Thus, do not use. Use ylim() below and after this
+))
+# end y.second.tick.positions
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::coord_cartesian(xlim = x.lim, ylim = y.lim)) # clip = "off" to have secondary ticks outside plot region. The problem is that points out of bounds are also drawn outside the plot region. Thus, I cannot use it # at that stage, x.lim and y.lim not NULL anymore
+# end scale management
+
+
+
+
+# drawing
+fin.plot <- eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + ")))
+grob.save <- NULL
+if(plot == TRUE){
+if( ! is.null(legend.width)){ # any(unlist(legend.disp)) == TRUE removed to have empty legend space # not & any(unlist(fin.lg.disp)) == TRUE here because converted to FALSE
+grob.save <- suppressMessages(suppressWarnings(gridExtra::grid.arrange(fin.plot, legend.final, ncol=2, widths=c(1, legend.width))))
+}else{
+grob.save <- suppressMessages(suppressWarnings(print(fin.plot)))
+}
+}else{
+warn.count <- warn.count + 1
+tempo.warn <- paste0("(", warn.count,") PLOT NOT SHOWN AS REQUESTED")
+warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn)))
+}
+# end drawing
+
+
+
+# outputs
+if(warn.print == TRUE & ! is.null(warn)){
+warning(paste0("FROM ", function.name, " FUNCTION:\n\n", warn), call. = FALSE) # to recover the warning messages, use return = TRUE
+}
+if(return == TRUE){
+output <- suppressMessages(ggplot2::ggplot_build(fin.plot))
+# output$data <- output$data[-1] # yes for boxplot but not for scatter # remove the first data because corresponds to the initial empty boxplot
+if(length(output$data) != length(coord.names)){
+tempo.cat <- paste0("INTERNAL CODE ERROR IN ", function.name, ": length(output$data) AND length(coord.names) MUST BE IDENTICAL. CODE HAS TO BE MODIFIED")
+stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n", ifelse(is.null(warn), "", paste0("IN ADDITION\nWARNING", ifelse(warn.count > 1, "S", ""), ":\n\n", warn))), call. = FALSE)
+}else{
+names(output$data) <- coord.names
+}
+if(is.null(unlist(removed.row.nb))){
+removed.row.nb <- NULL
+removed.rows <- NULL
+}else{
+for(i3 in 1:length(data1)){
+if( ! is.null(removed.row.nb[[i3]])){
+removed.row.nb[[i3]] <- sort(removed.row.nb[[i3]])
+removed.rows[[i3]] <- data1.ini[[i3]][removed.row.nb[[i3]], ]
+}
+}
+}
+tempo <- output$layout$panel_params[[1]]
+output <- list(
+data = data1, 
+removed.row.nb = removed.row.nb, 
+removed.rows = removed.rows, 
+plot = c(output$data, x.second.tick.values = list(x.second.tick.values), y.second.tick.values = list(y.second.tick.values)), 
+panel = facet.categ, 
+axes = list(
+x.range = tempo$x.range, 
+x.labels = if(is.null(attributes(tempo$x$breaks))){tempo$x$breaks}else{tempo$x$scale$get_labels()}, # is.null(attributes(tempo$x$breaks)) test if it is number (TRUE) or character (FALSE)
+x.positions = if(is.null(attributes(tempo$x$breaks))){tempo$x$breaks}else{unlist(attributes(tempo$x$breaks))}, 
+y.range = tempo$y.range, 
+y.labels = if(is.null(attributes(tempo$y$breaks))){tempo$y$breaks}else{tempo$y$scale$get_labels()}, 
+y.positions = if(is.null(attributes(tempo$y$breaks))){tempo$y$breaks}else{unlist(attributes(tempo$y$breaks))}
+), 
+warn = paste0("\n", warn, "\n\n"), 
+ggplot = if(return.ggplot == TRUE){fin.plot}else{NULL}, # fin.plot plots the graph if return == TRUE
+gtable = if(return.gtable == TRUE){grob.save}else{NULL} #
+)
+return(output) # this plots the graph if return.ggplot is TRUE and if no assignment
+}
+# end outputs
+# end main code
+}
+
+
+
diff --git a/fun_gg_boxplot.docx b/fun_gg_boxplot.docx
index 64dae0a05cd5ff56dd2f73537a97ce4abbb0720b..c9139e6dac99aacf3f011922579158340c73f343 100644
GIT binary patch
delta 90491
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

delta 89635
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
L*u;7m85kG<%@#{R

diff --git a/fun_gg_scatter.docx b/fun_gg_scatter.docx
index 564abb3c8a071831670da113c658ea0e4c1b3f61..c26e0b14444412f43051efe4f81b8df39809265d 100644
GIT binary patch
delta 104770
zcmdnc%KoaCeS-)mm;EN?UXv0=hU%@8<v6A4i*H+Od+>ejt^W-{%buOGHe0(qH9PN)
z>gl5USKfMlw>tSP%=hdP1+GaJ%Q$#FZ-%{}A1}kO#G`XbhV?c^F8N)PKd3T1|NHO!
zd^vHwUFvlY0^TRD%{0yGs4$yraqms?+uPS?PyQ^$<@CmPgSYLcjoZ{5-!4D>|EK-G
z&kOAre#>&K-y^Wmzryi<VrKoCvxf_A+S~HJv5b6hAj)E!KeH9D?rc53mnE-mJo(c2
zYx3o=#Wx?+NB_E_=6IkkzhiH;%#|n4-yAQBpZ()U<6a*5H*;<kziEF`___DlWcy3D
zdo675|GSV>o?YT;Q&#NtmzD3P{ok7}nSPhAe#-g#olyI^8-;W03(nfzwCJ{Tw!ap(
z@A~xl7M;_X)_*w~^hExmbluGRqU&S43qHi#eC<4a&0%lCJDtbIu{Phc-#oMVb)xp7
z+B@;QFLw@ax>+gd6vMqD$1Wo6r_dDc@HKmWbf0zO>^PwQ$o!O!;@{a9y~J*OG_(J+
zX0fMC-saz1__vhV6^Kn(Uc0DX+rCh0jkxrsiimS@Y)|Lc?uyFW_iWFb?D>0k|A;=Y
ze%=S&PF+tPzPN2O^o#eTEZMW+_xv=uuODxuYA0=Q=c(y%W?-CpMNiUP_VP)oe=&>N
z?H(VSe7k?E+v2<L=FPu*Ws&#(p9LS6-Igqo{&+Oo=%}{&o!UR<J4!C*+%Y--Q(vdP
z{_{ir<Fhxg#~7uqFF9ZJ;fqYQ@wpEV?=SywVSi59Pr2Rl*&i0{c-H;>uk@={#@)Tl
zw-YZ&U7Gq{K)zOu|4%ft{*Ap^>@U6lG$()jpLpOu&%chkNo&L7BoDn;SvU7o=$un`
z56ri2zh<4kCHnB1&z|>JKKQwzbn{ZT>mB8vK2No*-*(-0+rbsp_s%Uj7PtJa+`O5|
z$^U!&+zmFo^W9xseAM6ZZ>-Ii!>3=K`fWG6mOn?P?MQp{!U~1t;<awS_f#%B|IFdq
z*JjmiGc%%osVMxjT^YN`e)q$8e}UUOc%xEmw?4nVtT}D-T}uw93%uca>J~?CzgU0%
z)$GbCvk%1QmQD7p-+uf=z^nd+A+;BNU0kr$@%5{PUvEKZ)6I$}cxqkd@BjO$`(VM1
z%;(Fl?|gYoLNDZT;C4fc{PcyjzdmX$s%5KN&cEFHO-yO2(E`g$(UmXeHSI_;IB_)R
z_EE+izt!KAvzSWf{ad`FQpzwY{O!S3zpzcdu~Leyi67bCu3lb$<P1lw0n7S>^Y2f;
z^6}6t$C4YFpLgBO>)#|`TYFq#*Rc+Uh<sMX$S7g<A2qpk@zreNBA4F&*>zhYRz@xR
zj`pvo4>h*MG#HmnFFuoSf5R?Si}`B1e<d=-y(!kNe%P?|-xd3vJ9S$>eme8z25Z96
zmbS15e;g%rx6Je5-1YX`PnP<kd)CrDNj>+y6<!|aZ4BW}wYcg~CNaTxGY`{N_p=YL
zmT5)o`!u2Mj>3dhm%giVm^{0;yyLf#?~|JqQ{LyUwUc}6Dsfh3GUpi&t3^GtpJ}#4
z@S69&u4viZZgbSfpFP{}R8(ZL&*$1{icdBtre8R5h5J%Dk7BmViHB8{8ZCSF*883<
z58+<%+GpN-<ulVyzqD?f^Ht%w`{`0K*GXDy^OkOOD2}=zEWY+q81G)`D)u)FRmYQ^
z-?!c4-7C+v_wvn$m#WV$-uY6Y?OyNvwJLjG_ZszZw)EAeS3dqUv!TsH=(hd)IdkLr
zH+3wzniad{QAVp^*RBiB4mq!UEh23qExdB-FQo6*SE#xB?N`&94wK&Z%74DdD$A~J
zGwPrA_~yGTr#1E+{*piM@YMY@s$%6#y0T`Kg3yhqH+OVDN&LDIl`y}t-JMDL{E5>x
z68o}GJS{kRv^=fYS>J#0^w-C3DqNKI&e?za?L8CYm#Tk%G^+T%bYZSsF^_3YlKb55
z1B#1NyWiH|d>YxX{=mOp;ax^=>i@1eQEVzvyV7IIMMhp>3kJ0hJq245nc6rd)B;r1
zKJ-YGrp`F<Phx8#(=q9gTD1>{B(^FF2`|3qtzvbtxij$no2y4w`1bq~Sek5hYK?Et
zErm;$uj=eFQ8b@y@muc7qS!}oZb@A>Skf);WY9j@B|GU#bbb3=N6D_WJ_*%we)4Gs
zw?33iHQdhf`<X<6gRlFn)LZv5_xU;>U%z;E=Ji`PB~IsVW-q(H+3}Yam;Ql#ZL!3*
zz0(hTdAOq3aK#sgX<A9Uywi@%jyO2SPDF7>O7bjai^Y%EZ@=%>HYsuW;?3V8(|0q!
zh}?WrHpSiO_S-(mm<et(>aWby+|<qUsIEZm;U12c-2sk!bDv%+J9%yUUBBncc1oH|
zJMi&~tnwj~XAMGMZTB#|U7Pd#w%=~!471Gv%C*NAv>jXV@Ueo*1^%5SC$?S8<g=Pt
zyYX^4PgF*~*tC9U_D4UL?)oTQS7^~8c<$y@%TjgwC6lY3uQA<a#yjKdp?>c-_3eFc
zpS78k$<_r;Uzg+l?8&+FyZ1W!U+k2cdBJ2~!{3@yKh}RfQ}?#X%=kXz&7)i6n!mBV
z<!5<YE3~f0L&ms6{{5F-<z;tY=W1&HygdI>|7?|w-y?3aO<j94=jA1XvV<uN-+kBL
z*0q15{r5*>gLSRN^R?$HH!tPVK5?i~pue2AUhwO+Xo(K(#$9eM?$=i(I(nZ=_0eyB
zaMh*2rc<VcZ9l*4{;RG}_AaPB;BzwKS0DSGT^y684?kP6^ijkW@3U`gopar0y;=6$
zGC8~RaOE_QlP(QwKOFWJV0aMg`@?;?vTaoFx5{Ak{%aTi-|lBmZ!Rm|BHNZ#BK7vo
zn|)s%OBK|!S1$5<S$wyf?NfnBwBCWA%u+SKW-}?gH?44LX8gIj*(RFtN5G1XyD=r}
z+}AHX`{&2m0(Xadbz4~a3r=qfNO)|ZVt4;R^Wl_o3-t`o<^z(}>x9<@dI;`S-`9OT
z!|7((GP~FXSB2JXzj$P(U#I_!d$tD^)4qRbVzFjldV1y+|N4J6-2b~2%G*@7sckZD
zR*n^XAY{Cc<MNKv4F2Ia7TO+IE%GtTJCVt4YE$ciWyZV?MVdb=4v5JlU5{Npji-v;
zCT+`>Q(Di0UoDP!r{DS3M^;*>WA6hA)|M|9ZFr_T{{IqUm(qGJ<!phPg4oye<wo-j
zI`ZZpFlWk^(~Ds>I60%fBEQ8`kMB^lTJX%8xqsTypPW+v(YK$~;@j^B-##xtZ(nb?
z=V(MjRaC?D?XzB~PyeFmU>40)X4CfJ#b*Xfx$AFd*W0_5#d>F?EWY+Qtin-QVXdS_
zfk&GA|AcSbUN16qw2L&jnseyiDHW5=`)ad<(;BKbCnruyW?|H0$ei1mS^sT@xBMkG
zU$y49Jh#^-W_KSfJ0E>_j#B@X$LuE)ZZCfJ;gy@~nx75(9J2Y}oDbt>(q84iBIA1@
zPo8A9Pp#U7r>q;kK8-hzbv(ei;i~47j@o{P{s<kNFRh8!>K}G`U+ZbtdEoxQZ;2qA
z;<on(>Sh?-*?fa}`Tw|y4X^u_pN-pHe{)a9x1_xWb0$xo`n*NGq>5?3vR&WZhEMMg
zKL0Q&qR)J5SYz_d;%|n>_gR1BG{2QARQqzu`b$ptZyXnp{oj2<F@BT#&H3AWrzy^q
zS^QCpWgB~!Ry6-&J^qd?QG>2k!r5uE${uR(zaKSDG<>`xuXKGC(^FArMvInRH#lYT
z_9oVE?F&5n@r@;CmiwFa-L7vXHck(J5`I4R^q!@Qg?bLXcow?p6WezC`ro%-d=6jS
zBrow`=d$bRx0wF4Ru?x;)}PsGU)Fg+g(d#(vj(nrYTFy9zDlrgyOOR@Ft@>TP3F4v
zyAvK8pA58}@LY0#|6ixy<ptMrO+&7jZvM{vjN`GA)P{P#>b}|>=gU0`Uv924eX3$P
zQT|x4g45|r+vNA}vK}hlGiRH#yI=js#haWDGkZ#N+Rtn#v`I5~p6Bgt5p}EWgB|C>
zYc75YPwyBeENPd!m~^y7&Umlcqw@w1tP%+YJPSA)JURRw6cjY}ddIkbanAc_KG8qM
zEl0Q`b6LJeYTMp=SEt)f`?J0JrtcFLnm6y1rP{%7GFQ`D^!A-Um>a~roc)h++14fB
zIJ-D%j;+YOx@FO)lAT`_Uli>M*zh1<%HUD+702st>{nBgMZpYHs};wrR<KRjd;RN$
z`K#~U-*UV6;4=Bn!UL<=ZrUuJyF5}v`<>9XU2i%K;yCRY=QOw1ORmzty`>>6bAB<K
z{Yp2+reiKsyRJ(%1%=e>+;Rgqc~<S{O<tDoQ!#0;`RQ#l7fLV}P2Hh(LRBo4J7NAD
zYai_`wM=Qt*CaU!t4HkG;d0k)-?>Tqf}PScx1KxKd+t-1mABli)$3x6yXPqD|Jt#a
znN?hRtIPL{NsnA|rFKuNS2Hs*d=eH}<ZV64?4*^EyY)j~tx5LRudj979n{shCFknx
zi<3>>E;=wr?|@d>w)`8{>(ss;F<AOACQ6ITEBL+e-k+RuYxadr+`E0_vKq5$^QUi8
zl=<#gy5|ektn7QR_m9)flOC3*1#LEdR9K~cDr?dzZl?vm`XUcsW#9JDL5#Eh#NB7#
zJTD5YInI%FPosQhb#y5IOsPp<lwGG!+B$Kiwc4e{GmMUivYsw06o}X(u&F;~#S)IW
zx0~O+NLs-gzTUjtI^gA|ZyHIVss&q07}$evzU!3Tv^f3K+AYC*r3^J=#o`QiWn?>v
zPt;VNqTr~yM=(gjJ$r{vr-`#(oW}vq&U)!(ed;F1)Q_drEtr-Vqo-!}`OMpzTU#HN
zM*iyCwp{)9o;znJU1Md6RBkQja4MS>_~C)FAKzM+nnT;4HlAj_ZFc_4yvEPW5!PkX
zi*3{vCMSn;Fdx3RHU0hX!*!bXHgPgaxki0#?VdO7wZ(O{JSG{zJ<Ey?trn|d%-M3y
zcFWmI9-W7dzncF~_3^Q&pzJ!4`QCHXU-SPy^u=vuz^yc$zTD>;QWMh`IXtX5-7$~z
z{@&^z>m*EGMMYKfXv|IcaHJyhY187HsoH1nxlT?IS4n=Tcs%*hOa~i=dl`qNGgs<7
zVsKsmuV9kZi5{P`o?Ne#8dhmNUUW@LZW5;ti!bMi0;g$zmwlhSh9#7(beq1^S+)G)
zoE5>AHs{KJzVe)Ye9~%{SRN&9_Y=GSb$_rZUCtvnfBVkKuf?V7ca(ASu43-Yi7Ad1
zbZuNXKah*(>&>^SUn?erd<eEXlG68{v-(iuPh+0G<1Z5XoQwR+zRJax%@<v=LaJqR
zvm{s0ZCjqL4qr98uPjdNTq$<fjM@EshlTPZk=u$E3Uf3%1DIbW$J||fuXB6R<zl(5
zY`hi@!hQ-1D?GYCNCf&{slWc|T8@o}@bX$Q*~S!0u6Ng*7O$Et$}W0cY4Of1o}4RX
z6>qZDx2}F+q8GLIU8wu)-uG=n$(tu^l(c*y%9fhhx$FF?nb&!mR11QP-|dqAar?>H
z(>ZIn4*DOtC^tvpt)JD|Gw*l2+IH)$#01W*CTllHZ4J>BkZ*{(r5E5md3J7W{dc{n
zUvExdG=0DMk=OSAWfty#%jQ}$?Re4hf{{H&y5BayrrGdRjMmE&(`~}Vd+uJ2S$NUr
zb!;Yck)^;sCl4NFvEaDZs=v!_dALl7*<6`b?C-6!w?+1&@29tJom~&O(zg8RVXORY
zBzwtf(#4h@wJ%XK{(7pt{t#tgx6o>qc5l6mJ_qN#Crj=dZF~}>w&}+F3ZM6qrfXs}
zG^H<xcEmh7n~-O{UVpMn(!w9xmHxNLeBqmX|9Zx*Py5cN-JgC#HPPdhdj{*BX70VL
zbv>K9j?|>Li2vE1+M#yJqNyvzZ_#arORQUu)ck%sS>xgBd=u%z4>h`{&e+0}y0YK%
z=!a<)!u5|PpUkgtTUXQc{zvp~PU*sDHG=OaMl9go=ACr6;<eI2t<4sfYQA+=%-@&n
zvO;j-dQ~S^DfcO|yY**(iwxC%b$avZrbANB$J%;K6_V$P$w#jF)f*wgT=?Xd>fxLI
zm97p(Pclw?yesg#d_qUins-zFzhs)Y@^Si?yldiGH+RQes#hpD*7v&QwQ}BKkN5*E
zEZg4q%;aNUsp7i4;NH8hZFgQ>VKSG0c4W0xz~<Gg0&#kGOQ$ACUOMF*q*ACV^2KHC
zj@C(6A6K?Mey}^4KVijY4i1)$W_wf9>>~4@%C0@IRD5~=$2C`vOxIPZ+<hhVoomr*
zwo_paIj@%P{Tq5@dTiafdf#g@67GHx^VInh<!2a6sTe)@>3hzH;bG8nb}z9tOFUFf
zO|NRkTv~noBD-DAwjE1$U41+6eoXe}rM8cSwy<2@cG;_aO^%iB!H!Z!hV)702X@U+
zX$!jJ)Rbx7mj3I6@I9vmcb-gn=vr=YLA@a`si>=Es@k20o|lhKaXoxmXsvp^k?2<4
z%ST-TjrrUi3+f#fUrN2dp7$Hq4(qRs)x1+qzxRGsk;r?MS-QQaxbch5M8iabg+?<z
z$mCZ%(@;NKrg1_3Om5p>v!`EUYog31F!0MdFLvE=KBxS=a@mUje&5<%8f&%%&V3jA
z%VCC=WROXDTJewUr1x!~c%O!Meo~#NUtegk{^|CEPhRaPSe(JTGe#{;u_5ns@=S%@
z>rd|7CGFM6Rb=z<m1)k64G)vdYHY2tdCWB9rL+?qJ*I6nlFM8B{g=+QHR2OKM;429
zJ3kKXP_wK1@IXkx@#BXZ#}=4oX}r|id_kP)?rIMHYY`hnvmfPr+Qh4G@3Q?=jMTK^
zSJw6Q8<r+cpFOFy=G`(|o83W$!N*T5ei67#N~gB!z0bB&-%Oe&1g_(or0`zV@t$z}
z7SW4yWUjY6_X!E5o;3WsL(%=}iH#jEtlpk`5p_~5<5EQ78|zq2-NVew9%#8L#WW<@
z*&d5NEMQ{wN$5;&#kE(l>0<dyC(HX>i7~XB7MmDz<W9ZH3eh{fA9sA*73=gz=#B4v
z!>xYrS#CYI5I5eu?uzQs64t_1EFVkV@4Z#;Uo_doBst^R-;A{FG3CzMFRP~daylCw
z4hu2rs8X}Mt!HUy8Of=<I(c5ukqP=?d`43@1gR`iFg>AGEU;%o=li!O@0{(K@!D=l
zEWg9jn%6zARbs2%>Z5Iawk;C3EXw^VSWvF3)N(sIxZvc;XF*9UaU!?&s=vE6VXmUJ
z?^1<~gR0+F+$+<Q*S&r-Q8tvBzrfS>;AT6H4@<21>;8Ss-qv8z7I)`La$C{~_66=~
zD(g$0$NIU-1<1-V?_d1E^^^Q3m)pmJG}pBG+~?%C>rxZFu=l`()t~AU9`((Z{MgZd
z_|dCq=kWJu;&~l4dFOM^G!i^^JD>aHwux~U4jkS1TtNCuhDP<F9WE@=U3(;4+pq0;
zH>W>jj_IWK{d#wOHwFnrpI)M{^zQFtEmxUYS3kAPlK<#%s^n=WOSRrf$8xttex?s5
zO8Bd=eJcC+;YV`PncWigj~xxvMeC>D+_GY`!g|GqbHO*JGMCOU`u~3F<HH;d_n!Lr
zXxw~fCCAV8B*}Y=vv*(hw8OWBv>)V8a__i(YH6On+lJFAyG;zaTldSAdwhO*xQ^-E
zcSqCpx8HsX=Gak{yU{9q?y*+8%hKg5qa3q*MVp@#D(d#{-yuJ9lc(SLJf|&3t+reV
zt^dAF<FZ6ckGZwaE|=1@o;xXwQYN#e78gv~+7|SwP(4`X*tT6cp?uo&uFUefYjad+
z?MkDEpOk~w`Am8{yYV;Y+Ldv#Z<e_o(WtE!G`n7_+!r%Tic9ZLoqFNjIq$TUxA6U#
zbKA(hvZilUd&P%>;Fh%qXWH*gJHcVC{D#L`Z~q79pL;E1mEWvVej{Y-wqr+kOT239
z+=<z4>m<+3-ua<*^JUf}GV29%esP(7xW3r3Y`HprMei|{8U>#{4^Qrw5U^pJFu8j2
z9(jrS=ZQObel1_VSu*6;wlx=Ku9@j4DbW3EbMX8RF+8*99NRl}ZRHM+?AfUXcU%%n
zIuA|BE?xBCl5hNE=f}H`+FUm=)XYnoWMN>jZuaVLSGRWQ3KW-oT(4?2*{!2HZ+-2;
zWdeO}yRGIm%%9e<>x^&hWqy^L9_q8_sI2hycTm-OZ*i}l^#bEDZ&g3n!`X9Zy8m6<
zw>Wjl3d78vj9UJSQCD8CaC)S_%5s&}@w0Omu2p~RTNH7!a<fs0_L5tB5_avBDV%+8
z<(c{Ydb1`zmuz1wC-tOL@{Qi}3jbb5MzI&0E(SGUFugtbxW&}>H!c;d{2bZI8_+qk
zklW_$ak*;tIqli2KQYvwE1Tu`he@F3v}&u-+y7T8_qBaIe_Af+SKur4&r*(IY$c$c
z=_6kb<Mg`2#zjwsYmVRN(w}_e*RH#Iv#+n+9H<;!<1QY|+I{jkf6$7|WgF`pgr%Y!
zw*K|8VqT)TXyv&Lccr#%5_H*X+#vR^$4X*xLR#3yn#(+Wp-ht=FLX_;@9yjFJ{P%u
z?diHrjMLVquHc&&^H%YZN|lCyE61|v636h6U$G{E4^{-G-{NlW&+&M?!*7S3P_Ar?
zf|hWOM2tz5xvpq=ly2r`=|}-zyRL-GvSsJoZyCJ3F?G6V;DwGuIx3kypBx;$OWDi|
zOx|CTdVbJQ`TW=PLmErOf1Em3U7y}O_nX;azTGF9)o!P`{`%N#qW$FIiuT0Tw4*Zm
zo*VbCxeFS^PDyTRdLq)fC?uMF-`N|x(xwES(J^68-RQmacBbjJSglu0`sQ~d>_g5J
z-W7XN_KJP|8(XpG4M`dXMV<n8?Hb?3Gx{^1eZOL@)jhFUF|Hr-O3p>~Hky4oX<47S
zbw|2n^bLoARF0yV|IOsMnmJA>J1Op7JMF$l?31d#`x;$MZ!L7U>HJNPKGRka>h|?|
zQR)`Zu;{j{6XX?r?emnDyh=W|@6Dxmm8);(t?)Q{V9K#8^9ANtf9~48P%>nm+}bdi
zsGGM%9x%%-bvFIpY<yDQcwKtL+~bSBAI-X2pUSxZx1Yxa`6J60F<L)ep|ZiNwq;es
zlRup&E8N~>ygFyNlGpyj0aMrc@{?{Yc(9F6x&NX24i=u@b|v}^Erlf)D;Q18j<`5A
zFX6VU(b(o-UOM|vmC3QD{)FxzmLqe0yBb0c2G-_ZY)bnS_0Bu|nfil}GZHfKK0S-x
zv^Oi;O|8$8HoxF*crmDhxl-+s-;u^7%f^LsVij2H4>>h+Y?kT&%Tq0^!)(5Q<F;93
z(}JQs3Mw=DR~@x3J^W#@MNfUk%i!582i_mcmbmb>*6jDbBYKIOR>v*+9-hYP@qJfq
z-C@Z~X6eSF3Kt)~aM~!p<J{rY+I_*ia+-cRnRC8I9nLYS51epr=W;KL@^2foQnxEe
z_%C~|z_!9L{C?EIE26XKC9D%`TwPgcCh_LQ!79TetHPvSu+QiDT~lARHt)ta<r-e;
zw)xo)ijE)S*0}>3T;6fx(40S0{(gC^mKtB{a%B;tmHU^1*o{x7)V*Q%yDFN&&~L4f
zm?<B!=FLLBonQ1%nAYpdUN=rz7WBbS_=UoPJz0+JpAURLx%t}Do}?4mvv;0u%z3(Y
zUzOPYG?yRELaR*^7F}I^xu$o))~1HlEAoPNm9AK%aB=F4xJ#dm?;Z|*x8-8y7WUae
z{Fgr&KQ6f9%-mb6)IaU@o6e-nvNyF?ZgqLRoT*eOIl<u5vk)$a7av*dt?GTACiirT
zeD}_c`=aMId)}|E{O_N_=dDr{E{ziWrn}>kNWs(@FZUW8o#L5k(Nx0b`t4q6<Ewo~
zs?JXMayjJLgN&2bMM7c5B2H@?k651Ar?!~Q<NfZ1?!HIY``*2J$XPC8TS=5I=b5)t
zxCDJqG5EcGePu@6u`gZ!mWwqfE)$mvukTv_#aO6oEAMoJ)VVf??3vr&tzLeG$1kD7
zLwSt{hemc|jL{**mk0OkYHm?~@@~6@i80sCh`5u2(!t014{cg2rnU4*7TeZe$|93h
zrrbXh(4_WZmq-S?l>V$=8|07QUjKj9>0d>)ZnHM+y}$81_gyic3rT5bt#95~cDk*@
z+r{B_{l&2Kgfl$9Pg*)83)u<05SO|vaQ~j3;9RNX(-P60Zx5ugUB7#+b<)#WXZ|hP
zTsP%>_~(qZN9-<5xU`1vr^MA8)1pm7o<~V6f24GAoyDJ3eCs^8F9!vlyeAZ{v6^rD
zl@)th9<5ZL>3KctX(zA6Vu`0GgT;$KFP_>KcJ7|R<>^Zf*Q<Y;^7$>BS(*3Skn9U`
zj$Gy*`_c|~*!db<>#$S))$^j-`r`E*nQ3p5f3KbO;dT-4yfm{XnWpPz-)_Aj-uvyv
zD&cq^vnQUmbu)O6AAR_u>0On}zRw+gr<J!m9pATkPoX^9%HLluMn0HOzEV<n9*>n`
z<KxMmaYmc;Za*=+zG7ERy8oAmLW{U-vfUBKGa3(aC0w|@(*7c=#&Hg=v)|jFUtw)+
z-(Vm8@ly0kn?v>Av{e4unap_{w5yKg?DIDl7T)vw<1HTW_N~o2@#~Xca&cVIPB)*m
zUSZiwtx`QjKgM1K1sBEJ4h+3HDwB29RqAtP8fLOAVXRR4x_S~zO7Q&H=%9R|j7y9P
zS{u~*y`>VC?Kx4ldt&m=s05=oug~6`zWKtnAd%F_(xkI9davgE*?jW<{YRT7{9SsM
zN584^Qn+<u)5m?Rdt@U2_U^Xe$nP{)JhSdU@A(r`{XfXoYw!8f@#Yun?ZVX;Z%kgj
zT+&bOZGDu%E8V}Jz8`%1+<$)kx+^EYms(UTds=nH+B0LX8=I8m4=b%b>n0g~TX^e6
zvqQ+z2dtcj`}P(&2Ry8uVW1ewaC%b-!_CyqftnS6HmCaiwe`FEDy!(-f==UGI)Y~B
z&OE%IbuOvs$K>|ll`{XrR+nDP(%v!iw7a%~*;h3iw&*kNiY2Rini@Xk2}I_I|IW@d
zao=hwZCw>VXJzG8sXo0emhJwN3pC{Fg?X7aOc(nlHo-UHruxHE-!Hg-`TFfPM`IyZ
z;AeZ$!>ew;E8XqIXU6F8MkmfbDd2m<WT&IMo-1;F?YBOjdoX9C<v#I9(IoBPPntI^
zJ#WFW;;l>WqU|aRTkY<iVB@-X?(CI5fA8!ack{k4%Ul&wtR~uZ_+qQTstFP+Z%&Nv
zOW$3;nsehn1-rM-*R~!O;pC1D*1e>#wY9B7u1jMM3uD%wDcdD)oGN|)X3y5U>7m=T
z+JvM-1j0Cfw}~$am-C5~`<s3${j%#K2fOU&jY%)g^W9MDU)aBv)%c!_{yfb+UtUi7
zHQ|5vtBI!<H&!?u3@rL2xmf9+ozQ#sk5|-eW@Z@2E~&4wy?J!U!yOCHTv^V2#e!`?
z!ETjzkGcQfxIOJ%(v^2xrj#twk@#LXZQbGHOT)PuB9BP6e*a*xLV8sd`+`4vzw(zP
zN!-%b|M&iEz0AV@Q(YO{75p1g56ULQFVZ@tVeB?D@x>$S%|Ex9J@z@lv`i?i@bbql
zb-y>+UJKWKc`Utd+LiihO<!sDBt~Cp_D9(sx00ByygB21Oi`CdEWuuD!wnOGXImG&
zVLT%L;N@dgugMQZQlgnzABNw!5taLm|CxEa?>htgbKl#}a`*0Pmsu=Yp<rgL_jjr{
zlfXltq~k~Hs+f43o_I@HEG*V{Zl3x`c8=l=y{+%%WVQv*Z<F}rUVG(1efhI1<^K{+
zAAe`KOJI6}k+_RSU*PAMm`L55-#BMoVDIN|z9w-gZfS#eT1E4=MI|d(GE8oMTIw6_
zbK~bMr#G8qF3x=uaMx4r=2E^#TT0>=*L2_dVrnE@8^`$Zdb@>BsG~(lS<xy!lLaq3
z<CnEv+E+1YwVp<)MsjrN%>xh5WQ5k|GynOZEw=sYgDd=b7gm|AuD=x$n%w+U#$e90
znBHqQ)^zixEnBr}_slN;(5sCOTBR>;9<*ca|GU8LnpVX>*TosV=hh!N^!j!49P8B&
zZk?SF8LBXGj(W7A*;nQEGg7yWpZ|Ec<w@3-V`8y6=O+oLrgH3`^*A}S#b+tQL~~jH
z>0j%``wm?eQc8V(Pt!xHy6w(OPlexYJF_+mY81xWR~D_F=1_fVMi}eM6CD!DNj)8w
z8iK(#CZV(ErktL!S2#$NeYRx#FR46cW4^CvP1%k4LXYMyJGRj4-AYZFvlbzx4vEJW
zzB>8!%k1wfR$noE95B^XWr@f7BNkV>G*i=LR=KgH)E`^8idXIMzI$_OGY$E^s!sN=
zd~0BI*!jL_U0THpYuP=La#<?JqBZxtI-Jyh{2~v3=!BXx9|DSB*+00VZDC_#d}5Zp
z%@vkN-@I?xE6me^R?HMxC1jUX^(`&v1>c%8OD=?~u^DTA;k~hZrbtv?P{uN=+4o=E
zU$J@F#sAg?KE|5$R~!}}IW*ryGvs4Ser@b~&eN^a1;V)*&P)Hu)cQ4FE3NnXi?fou
zcim0b;pH=5;_cgS?%r*<ID7SV#{WkbXN$H3wLZThH8UxtYu)kH9}Awo`dFLWrXBv_
z#nB_FhfncpuNR6+KhJ00P*LoV5%g%uca^1A9{KmSpRf4AGgWpDhkX5IgC(M$*_Y0(
zIoG0-AhYG*m&3=tcxkWB*z>4Va@LF0qED>cQfu$F?srKw-5JlSwff}WD&GEh!<m_7
z&lH7C#o8h=?X#peN}fGzov@KzpuQpeRQMA44RH>avd@VfxopYBdOU-*u%gd|am(qi
z;d-17$>~|Xcjj?qF-$WlaC#nB|I99&t71-0&h%U5{Cu}p`aARd<fy&!05w}|F<p`%
zxA@u49h;&yy%jcD$S<d~aILE~JHzVbnkxDydGap=e&N{ovg@P!ei;@2GKb1Z?5F>B
zoxi!@uFTwAO}n4_c71t#EPT0L_XVeq4`(?&__MLyI=k%4o{Gu!Kl<igtNQef!}<+q
zI?Q{vtl!OBB?t5!*1q`h`mFNA^Qv0eGfy43A-ey85wED#=7X(OuRB&R|G1!QX8-hJ
zHm{EXtqC2ka@xCHJFET&uC6XNyfsPmr|;Fv{j-<7@(Mh{E@Gu9k!H=jLUm?AjX1yL
z84HIq8<J+uQ9kw~xWk*_Tz#CSxZ#Q-hZU2S7jOw?vKIfEpz-tfp?{kBe_QM>Pmr{g
zi_qR=cj}np%-mOBXIh9&-IJX3SakloGkS^QRvv2we{+2N`Grx-zOv`UV&7>25@+nx
z!aqFlIaK*-cA&l$cP-P#KFN1_oo{_4i*C>O>lLe`{O{|Lum?$ZY!tpScfOaam)(53
zLucB<D7)q#j0cU6?pnJlpsY~f-lkfHIiN1!QH26f7clo*dD$beUt9+!-aRd`VVSnL
zt;6@kdz)BVxTdQyZs7ZLVoC4rdp~l2NXl(~eslQ@Pj2&Ti{flA9iNf-`eK27_Q@@&
zx7TjI=z4gA*xMxmla9=bDL$-i(V;D)Ti@ih^hVc;NjDS^ueK7swfFs*XCD*TKFG@D
z#!dft@k;muLGHiudi=BZe9u<6(OGe6wn3et;`ct;z3gi*PhZFUcXHtC84tHx_txI~
zV7RaSO6bn|pUS*Hm3tokoT9gF-mNrUE~YOL{@<pjo7fse7w9d^3Ou$oM#n;meW`yM
zkE8CF`rYph1dm3~H<Br`Ird{t^@J$viW5fzHzdWgXqL$QTz~Yt_>Ja^&t!ZVzu5i!
z-eun8^_XFn1<&CRRhPRg8Ye`rIGyRDGkNpd>Ws;P7bicsdYq?z`kT#nR0LcO9X7or
zbMC-ypLuuQmgLR4t2=K`so}xNm&^H#H)!=ah<kNNn)0Mgt~KDU&ljyavSdowdkeko
zpSVicpQQD*UugWw;uUq%U%Pi|!-P4nC#uW`uQFn};u5GmUxn+LP|;k4GZo6~9G>wr
z^yXdGef<B8R``XTrTxqwBbTkP_L+90WaE*#6aKq2LsSD#&DqBo%Y8K3X48*Wy`=Aq
z{~sQ?yz#Gs8E1ut)J5BP*01*2X1gcz7)sQOl{nQgec3Ph=TqvDE8;uOuHMC&)-`qB
z8=brUuJQ_T=Qv_(;)9N#PCfYS!F?ltmKO{On?ANB#s?qOuI}Ds`ch7Rc3MI5owxI(
zJNU{ho1MRIG;X%p^)%&F>JsmR7Zy+aIQ^<}IDb>}gWHS!U%M4A__M)Rws0<w&2cw1
z$(boBlj<jW-a5U6HO*|%-ie+EnRe$nX$Z=!>2(PTQ<D9>N#C~dQH#crautV#n{Q0k
zT_IgELrnbm)}8Gv>pSOPk*i>7klsCw|K`D!C%$P3@JZD8&*f}V*z(%yG{e7#!vD1A
zd1&^@7&LHp_OoA^s(Z*;zB;GW?&BL%mOIDvB01LkGyI!fKYxGirVH!8ANf9)^J9WU
zL92z?oBbKq=Hhc-PqfpGdVH~Z>LL+O=7)1)X9k<c@6+Plcq4Rf)ZdjK^W-*^2Y>i#
zaa(b2`Sz*z4AgDXABMP<x4L+!<!=&C<zkx7TgoAB9Vd`<{#mEUcfKw1vfT&1&R3Ic
zuK2oOamtB<AGMYV8(gTr5V|Ag=t<4XQ@_vE>kPMV+J8&oV!r}oH)qK~Mx`9i0As&-
z$qs$*?kQDBCpjP7AD)oEwD71?_ywT`_1mtuj>>$_e45<EB-C|8FR)sj$wcU+1k=X%
zo1Qj=ZG2g+xA(KWJ=gv{iDhj!UC-!=J^1U}o3_iZqWkI2bB8)P8(*%!s8?WOvuwh%
zqrpXAo+OHXU#VI1;n0~?GZvnY&5mMv@-l7aGy$*Ow#;d<#@CK6+$K8N&se&CYl4=m
z=YO_}e14mm9H~DReOfnH{@J}X0&67GJMUB;=eUyavgvMk#FBOIW*l@3j<!5&#IJhg
zQuUej@;>%?T{Tmj8u)qMElhTnEShswoL%KW{=pY9c8n%_6DFDeTK@WupkiL?F8O+y
zn|gdq$NP+fToqd@B1@Q=mNZN18x~(osONGva~3F8>FSJ+y}`_5x9C=U%1ZD3=M%rg
zGHs{}={_A@aWsMFriu&ib_<<6!{kqTGa24IW<SPZBV_(kBKddTv&*6(vl<Q?vD{=*
zJ^V<oc8c%xO<WU{&rN!{@=Ay90xKC|u4_IUjBMrlPPJO-g-`S<`DvgMtU5`s_`R@8
z@#%W~oJB4fowa)udIFlh)I>DPus6v}6If|!p>#x7_J8+{!jH>)JRCXC`>%}Xuh7rj
zUKp0O@IL$Y`S!K{cJ^=h-EjTFGQ)zjN67*gW}V%)`h1=~vvjk=#n8uIE<BGFQ#O^I
zIq=|YLctbA5zh+ED#301{A-+)Jv=1idl!Cm4B2|NeqN-|{FleLGxmIJ75Jk5Q_^$J
z_QmV(=h=TgRMhZg#*QzIuP<@CEz59ndb2~-Dk=W{mtA*fUz%h0cgMpoSw&U695rH(
zK8Bq(?DgB_(Xp!jM`h+=ryq|QI3F~0PmPRxZ0i_&H>&DQV4lf>xjH(RrPU-?Em@cH
z<>YJuBf-c!hdy=HullgqNN^s5p4GO3PmfeZYz*7fLtmZ}ZtYvd`16HMWmn}b{!5&_
zU*lEh7My<Z-*?y5#Vr?n^;ua=V<ork-4OcZ@eSXKNk62|99zEa@L>b~8|{4|6M|=X
z*tX3QQp-)geN5p&BkO;)$vtg>H&V}Zrq=|?t$3`XmDORUI%A<CXFz?d$fm;g_S08#
z|0q87BVJ?HS%-px#d{pD{P}xv^;Iit^A}(HJ_U3qa$E{uwR+d}=d#}%CwMeH%gPf-
zvKI+$*}DHqpKJZ!wdu?Hp0ivC5tOr9Rj3%0FW(u*x$(8pwOO@E!jT7qx)+}?<?faH
zn8azxx^=%x&EospHNUFgU%qbhntJ(#M@j`t<?OHYU(&qMW*;)kUZm9YA43=agJ*pi
zn{Hm(csP3RB$ji9GOJFur%Y1xH=Zc?G$MUb@Z-$-!x`-Um!ED`bYHN}DoFOhA69p(
zmy=iC6WF2m>uJ3qqmt3_OOo-6nib;;3xzBK_)flac8=9dcF}jbcvq%lUMH{gHkSAG
z2d~d~q1f-I@W{|$$LZv2{%aPw$=~dcyc@UvbBl!cuaC@*=3fo8{kQfc--#(pc)?>k
zbziYZ09S&M^qpVdyV_d5A7Wp_;!|ANCS+W0<5DAks-%_S(OxT8yJCk&{%^A<8Nb-Z
zwwGJfbJF*If!~4g49}*9aWd*HRi11l7=3ecZhf8Mo09djxSUe=Z?_8DTWMY7v88pj
z;p5voTJ|Wg_~;ov_lcF6yR+nsnd_eF<ICp-+_rdlw9R$R_0Bt;QtMpvuCc$m-{|A9
z?~HAt&GoPLLTSfyj#($VzdYmqKd>ZXZrb+Z!nM4wI<iXcbH2MU=jHVURfhMDsaJLU
z)V#2#eLLgzdLidc=6|OilP!_4n_YH(j(w=3*5^%|3$`AqTjcFDIdH}a&xrH7JHuq`
znvz2}B(^3WG?2U%X<z)#`qR71ou_U&q<2r8KTE;wYOha$a)kH%Oy`pkQh%%kzX~;)
zN;D{zDu43G$*cd@GRgMzQ|S!HCWi9~b1Wy%my_>4TF+!+^rHSQyBo8y{Y*2nHcNN2
zD@;xcocW9&EwuWUe<IPd{O<jqja3%Q8Cx1+-D{k`F`qKec6{7=FxzKq<R`ttmD3Ck
zy;l`=nm6sorepd)7q8%r)$kQxXS{8igj@OB9f8|-?RsE%c}|$3<A;it6(1)kFUz>g
z>BE{YcRt2q)1nD++iExI)?10#$R|48J*4^5pjz|QIg_RDQg%z9>{pn!yxcQu+fEas
z;@kI|BJ$k-|GvHa_C?cQxdwmUA3VQUpG(2v>5iqRI24w?soN0${oK0hy}BF9&qv=a
zOKVa3`y=sOuyFfgl^e{<bcIBB>{a~sy-zMDN|i}nVAlU5$NBH&ZCA|S{&;Ou{f)hM
zpX67cj5?hC_^bV^{q{e@^w+G}v_>xJ_;R)v?8_GX^y|#reoSk%(3#}bZ=T(L{_wj0
z{<?ond3p7JrKReATmAZXdinbJddb@Tf93Ap>6hL6?B;^q7w-ypOxRbfz%{$dK!3K$
z9JfSH8`i*xXIc}E8pYH<FO|A&9awPjtB`G0eUEL3s-5=5l9M?P4OH0vwR6?KQ2Hl(
z=2-e-htI1_Wnv{nPPi~uTAW(M;8Ml&gkSK}w>c6Q<kenOZa$XYaL*x9UE{Mwd*GX%
zyK`7xhi<RD8)T?F@Ag?6##hxZZj@U+nXKU$ea!ObvU8ppFFze#crSZvTdxKG)q*SE
znGM?BFx;y@5LHq>=UL(9+JLb9a!bRjXVPZ4rCaFiYpc9glr=%KXpiREm-;*!K}t;b
zbIjIRNlO>T-wOHlv6<)CsySv~mvi!MT(P;-M!h95v%t01R=54*$3veo__P&v^Y{K<
zsebB`@ZHU+u^$#cy(GEFF6#4sm6wd4K4r_Tm0j#!q2QmkqMq;Z*R)`>((vxH5$bHu
z)&ASha@uZ~o5=SwmZw6uLFo79n+<Nv-;cDHW%j8D{Fza>CxO%V_q)#BdXxT(Uw^xL
z-K41uNw54~&;MTYf$hz<n?Ih<f3n|6Ds=slj>tQ;^(XU#a_&u8{X6AgKw{F*F9$yz
z`>Px3aL@Hko&x*-PdoLc>*E9#RGEC3wfA#nLCQxZ!3VSCTE8#KmpEe;bB2rS<EyP7
zR^H6o);{}_-^;DO@jkESue9FvP<ZkUkqyoNU-`a&wC1p<a*J7{^N#Nu+j3{0{I;2+
z#-8E-lZl!8Y&+L4GR@9mFkCB;7Vh}S+{gC$-ZwJ*?WrkGRwv)9+?{Q(-e?AUeQxM)
zw$nV*_DW5A%G!M`?0^qrev;#vqg}u6eV^RHQ50dr>blv+qWRU8;_C{NFUx;8rn%dq
z^-$;G*2TH}yB2pRigHM>u~ci9pTF_0Yq8Lc88WilYL$i4tyK3U9=x)g`<<GmpqcTS
zvm3U_pStyKXZd3Ny)u$IzOy8sTvYSs_#;t&F3sZh?80qL3p%d3Wo~U&s+{xO-}{YV
z_>4*4Z<PP|p_id8<<Py$(<XVg{jrjjE%nYZR$A{am0!!4_jR3!&4i-ZFIRaRzFd6H
znEzSD>h9q;X-6cuuDATm=vkqEIm`01Vac?mFZShbU3;u<m-)G~%P;M{bk6q=$1RqA
z?s*T~-FfQoM|SUbGWd9s<Kv_fh072B{H?SzsTAhec=w$z%i|oGLpljuzE59FTFd_I
z%+89rMfs=0OJ{6f{{P67x!Y<^*44aXR&bBjeW$!aa|_p@pX)CO8wR`Pm(0F?_e_)c
z;zjQ5i)9{(_{=$(`lKoC*QByVmU|w`bn`9nG3}XJG5-VG!WH#=7rp*n-&OOMW6iOv
zMNFG@e%#H7t5|e&bLzo8TRMI}_g9~;98u58DJV2Ue!lzB{MWS=viVJ`R!lkGyp8Rk
zI-4Z(n}i=uFB+b<+xD+(G;~xi`}TmT`drb|t|`WHqUrsguUjZ}wm&%i`{&hc|6cP~
zPiM~(OUrs+El?ECJ~z6jseb)5q41~!V)?)KT(!*K7NU~*BFVIhr}obK!|}Rre)mj#
z#dY-b+=(Jw>n5%Y+a;Ip)TndMY4h!OaoH}<lb9Z)95UwFQTXce#y19flh(bMG4p|0
ztV<@xL_gOf919+JgfDnD$HVh#d~MZfX-|`s)sN?1bKccnt?l2xi|Jv-{2Mvj>#KQH
z`Q?-iBrJPFTvfxqZ77xq+2*^NQD;wV(^YAqr+e9@9MYXSSIm5Ts&*^GSC;i>H&oYN
zZaVt*n9bsD&-K2q3NK4KY4-eUaQk2WVf+0$O=IUJ*E6@b`@i6wSas(>tl^IM{&oBQ
z{`p)cv&H7YcDL?593PgY9+GCVQ&@P^=elS8-pZDLT{Bc~Pg$I~aLU<7OLP9u-<zM9
zCw=_VUu}t{<zD-)Cw`eWXWbGneyxwO?&qe?y*KyOJKu{!I)%y;qb8NT*=PL!uaJW3
zM5Fmeo{SG(&MHjmDr2a*U-`hM;Z?usuLd4p^J`ak+0HHw+5Z2&jkUXqs=%j-dwJ__
zTshfZ5j?j(RQqq$Q<>0Ty<LAJcZYTFS+ueG;;OHFzFog39CWoQf3Ifz`&q=y$X$uI
zF4q<Q;jmxBQN|flWg=7MvT3pGIlk}8r}~b~lbx?&Z5LSPVz}6Bg?Uu2m}fwl-{xLE
z#rJ-fC+__bcC%1xk$nBnjsNz3-1l?&>NV=M)pqATipjtDx3a#<^`Bc>Mc=xP1%ek<
zC)a)28}M`Ex*hrx_D>R@_g7y)@!npi{fhc$MY#3<=v#5se_y5iaN>8B@6vOlt`{;#
zEcU*#L0{_bHg)B<Z2#u8zd5U#QvcjZ<7`-0rq?dR<4?F!rI!9ORl9O*=G~}=tk<3i
zt&F~Z{=&-xA3kmWy6<h!_TTmU+%@(curkbvYrE|~r}@}-o%{Am_QEH>bxZm4C>l@p
z;m%)Txi@zArkXV!ZoH{mBem>$vM)_z{dS*YQSn_fsaNqWR%ay|s_**6zbi1VwA#FM
zlVWi8mB%NnbK+uTs`TfWZkfP&KhSr(>y=|ST5r_u3*~lt<rsSSUZ=cY-}FkCdf~0s
zuTIGRY*_Km`CHnHh9uiy#Wgd2dChgN@;T$Da^-YKh*r_=<7v!SCvOS5zK5&Bcj=1I
z^zzAWTlBVfpEJBV)w*wG+|Td&PBUL>sL!rcd#TSQv*TFP1@Ft8O8&bq3)?NI(q&uZ
zwz%+O#wN~*&viH!E+|^KFks@72`!#WS8WNa?`d5n*gw54X+?MH1NR!QJH-=bAKHE7
z?5eNDR~F39&kL-~46JltT2%eh)h+aMPyBBee>*|G=^8pWO23-^KghI)*|Fu(&Bsa;
zHVDm^YkI#$gVDC7t$E5m&QDD9mRjH4^rdve=LK1tuO621u1|D!_cJnKdsepFEXPo?
zyvv6Fo@~9@{S5iuY4x|>IA!E}=FIZy+Qy-OeOYE_UA95W$0<t#W<RrU?GT^I)yutf
zx@no`^a;g#8dWCz5y(~*Fe&u3*#2(H^p^o23nv$pKI)EGwRO=+`A1Hd@?`{z@4q~H
zW6i=lyIx!tPN<BSoU7Zm^GZDzYqk;l;)^-kX0`8{SGl2XRef=`<jTNbz3XZs_>amr
z_!&A}afzPWW@EL7y)X8U$l-g3k8b_+v0eDBs@m7cHmmP7*&1p)-x*nb*ZgjE*vyu>
zjhp3h_KC`7{ip+3YpeEOeG)y{!e$E3rAsf;RFtMJzq6`;N8r5MHzU2P_j%Vo-M^=!
zy6hd-{yV#!n*DBBA9%l@{(Wco$}jSFH(Xy87@Xg?t7vjrR^_sD?-)7Wi3p$RIC#)q
ze#Q}bslsb>y{81RiAP-jx=yRW-0akxis*H9D(>gJ&P@#4Egtr2?v}tcOMg$xzxIAX
zzsb=@ldl%JALb6fx8tn4pZTSI^X^?%^Wb{>`n~n@jwOk!zTH3fZ}menrb}z;>zDdV
zyOhVX&C|c2d&=NjdfxFPjMqdS{l8l9v5av!|DGAvu?Od^XZ|1VFt6~*?8Fo1{1fwc
zotQjd;lg%}7rDQ-I`1#jeDUSy0^SS7+b3EqmJL24@TVyBzw6JvKR4M<t#OF_P;LF<
z@UqW|pTAFge_2Cqf>}^y{d0lo+|MQa^NMBV>;L*5{nEAImDsz@_g~lV5<B$W@$lb<
z70tQs+xCC|@!`A4p*sG*4S(i!3EiB#C-=6>|2f~|`xb@Y++92Kyg!Tiw_W#_<vzOm
zslzU6(z`Vo#!t+?{+iyiUCZf3bect{@ZCjkK7CEyT=e3gSjw)v<(p2dX-&)dramXt
z*z9oHsr%)!to1nwpN;a1W+pW4Il~%t*42<bFT6`$yX|}M$KKdKPs7r$R=t+lDr8nx
z$PyZ}U3`0H!N!EH?0=8=mvz}LuX=mqUrOBq?>m!@NVf3B>2}52`JUdBFlWK!neNTk
zSI%9$WbPRmM^?6e?ins-75DO@FY?57$;FhZf1FizTSMn~^RtBdBZ1b*S7MlE|F@WY
z>chDg&ksBgeEo3St&dKHugc#4QY>F$SEDjbsEyBTq4f==t5X?z<1Q>buJ4%H=ApB)
z+lluUZ=^!3h|}V##rNJ7HBabx+maZ&;9RrDhaXvHe|F5By?yfrn_U98RAvTswdYO>
zyij^;Zs6k$hQ0o(FC{JSb2!x>UY_s9!zU+YXX(HxWw-F5araU6)ld7{gx9ec-@ngV
zRpFX4rQ^HR*Fy6aDIPDc$F<YL74OHMj%2l&A*ymqN>{+{!c*Oh!|E$<lvj&;@+XKi
zJkAT3`@ET7<@!P^-p()Af)^&NeiN;-SRi}r?Z;;Jj^f*o8)vy)ICE0epV`W${^y+e
zy;DrLE^p$s`M*l%!+`^*_<sefY>>XQ`PG*NTu)do@J0Lm{Au`0Df<OeT8>##DI@#&
z!rM|ZE0wC&#!Z$Nj+^ZCds-#$mg=faiyN|fUY)(j+C9TW`6uh#Cp~A`tWGYREMs*t
zayEC#r0yiX1(W|=`C$>>axMFU$2q&83m)g{S$!^eoHK8^;IZ#$#0j?|#od#S8kha(
ztjS)rE9~wBrU$F4Gs~Xd30wOA>$X5^chQu2p)U+~CN*-deWq7(AuH~W%7Uvlj?AoE
zX8pd#9Ch~QbK@<uoL5_3f2DOPupz9tjgxEbGo8sBmzdvn^4}cb#BO`m$5TG$FW1}y
zI(%|gjh6KenoEDB$6lYmMEHiT|1G<kQ1yblnpL99g=gHnwYES1!rx}I&40~%@133|
zRWq;fo38wC3whfZrk7%=%Vm#eeq5HhE-KVewaWf#)W$UL%w=oBLjP<D+_KZ;y6$J@
z&^PJn`~S!N|9rkUWaT{Bk}9@MOKLC5UEwQEIP16AoNGzn|N7E<AuYiRUj19W_11!G
z>v9!OHUz(0C3;|`&$EYbK8R0AU*>J{{Mhm8yAj&jzt6KjS}^<kvMs8qQ)@N{@~nvr
z{S^85%s>58lO?`yTka~dHQ*+*+`IBUg<?D}zn>6uOVKsl6#gYKSHE9UziMvT>qkd7
zmVI(ve)T<T=e+;IT2=2BU#VYoeCv#p&3XH;Kl3{y=M!YvuY0=f(9~@$zy9R@J)gmD
zeqB^EY~G0~fx=H+LPg<cUA}#q@I^WD;7(<U6aW75Z)3^Yro7kii+gF`^B3=C{<Dev
z$RZ{%CuQQCl$`Z{UdyB^FkELb`0(Fm1>3g`3EPfrmj8C>xbed4Yf7bl|LI{b`CqTD
zdeg|z%t-yn4}0tMD_a*C|L62>JTPh9tGWkm$NqD&FQ30O&aOzODc9g`dPMc_%n2SR
z*dK@apIbd&<8@@qFA>q%y7yPIt&oxV%Hm=<OGBw3Y2%N7_xaU!cG)$y2fY7cYi+vT
z_`z?Mh=Z)!hx{cAP3CiJ*?%tl*>hd`_0Qjj>I2O5v)Xse^zJyKHt~|q-tC(te!g2_
zD)G_ftHedwGOOg7<`<uaMcCi+N?*KYL+VkH&X4}ad2MoQ931PL{_&`7tG9D{;s1Y1
z)Zt@0!aSn%oR@l?`|#V(i_!J^>VH2w1dBZu<vdL+zwnk#Gy1>!hNVwtaF|?3c)@?`
z&s1p%4!gp7$uxxzx99v2tjwFN{eDicY)PEw&)jowcoS3(&TjVG&g~}4aZdeUuD^`*
z{gVfIm(72snQO6R!c7lFbq!7?0ZDel2-o|s-9pzYhjwRjy!<-5S<zUKQQv&;Q{MLC
zgn}LE|Mj=({QUNFCWl0Rn~}o-Ch>O1Jy(BUxP9hF&;6R1#QNMs-PPaC7RUMY&W~JS
zc>HHE`)SLl*Tq#VXTzi?UA|-IBBOG2*9(=vsp}Tqw)=FfzGlA4g|1$=_I-6hYfsGE
zJyFb*d%gKClVF{C<*+AZ=BFNPG~SxP?={bF{qh$@Lbc1TXR6KkdhcCLxS~(=f^!o$
ztk~xs{PTa^?m4FxtL!LZtzQ_md~V;I%cf$ECjZPN@5ROWUwF#<tEjTL*z%{#kuTpi
z_bl_6_ovKq@4T9c>f2d=8Dy4bPRhG7Wj3qbS*6{(KW>>YYudiTa}T!WK9avBf2+Ou
z{|V!0uky4jV%IKQKX*<rvvKk^_Ye`8<&C*1iTgh6HwtGFnD&@0^2Ii9?GtOZ*GKPL
z_L%R6f{=7f{nfa-yEA5=xHR$8iq*v>-yLRcm-qQC9O`^6$h17Bk?pNdj$@;YWz`Or
z=eo`+?TWYg&Yjx(iMhUhQ>^Rr{PVl_U$ovaIY-uEaz}djrweLZ<7#8>&-Zx0u;u^c
zNdZlsUqq7|>sDP8%KUZEQGVse(iL?VGkdM-e;X%Mvi;5YI@|h%dw-9E)a<A?CDLcz
znq6lv%Q(O08Q<Q+F{_tl3U9Lt*I8QE_OEjr|GYi-ZQ73oMYcaYdLU9Jxk=|i#+97j
z?{?jr-@Fs_zuhj!`mBDgmce(yzh@b_bWAQyy`1#1P9|bsdtB>MiR9oySKs>6U&D2s
zw{cn;PN=WfXWJ6T^ZT;@eGjQuY?@!TE%}$yVz#T(?tA^@i%+C_pA`PTeO33@+WN1)
z%jWNz=~-gSY0EOte2Z}Eu9nN6W)^ue<i@8It+|k@^+M$Yzx;`J^Yk7`-u!(((S`5D
z^2COpGBbY&N}u9dyD?LXJLlH?XnVtJZ{{aE{NS>w4Appey8e!Ws)q+F8xNnvA#TZ<
zLh-(n6aLzKOFVj=WxCa4x5ecrrheG6<^R_pwwc9iohp217~c4>r}E+C&qkkm7p@b1
zY?<bNP)FuTPtNl#&!3!poRFDgcKq>y0R8eyFQTvVl-+#j^lFWy{AP}+3`M7`RQshp
z7n;93(&0Q$xIR{h<puwjdVkmYDp%tV@;~B({sq5!ytAZYIq&_XhIeoGo?o{iukZak
zIS$GDlW*%jd$NrC@$SDL5*_90wwKhFe$iuNaj!V|vtzq?*F$wB3$>k>US7zZ^>+S_
zgD2z7+Um9+dTs0?ClfI<vh;t(Z@WsTI6mQ%kzbFh-<IFH(obF{Mtka<<A=lQcbjpo
zdH-<o@tJQ9-E~b&nZXj?RW>6`%{kBHwdr}!KWok@FZ(=eCu94O+p;_F+@0#s?Q((L
zCEGQ}GEQ@u=dO(>zhBy$csl*5OlFtK=I4u6JW;bKa@F*GVD(+B?!)t<#SMA!SFD?*
zyk|7MI;kjdVwTE{DchDs%uZ%Lzh8^n#$ZGJr{;fCEKaRd+)^aOps*_5lKJK0<8mAf
zj5`ZAJUON#u=2w-&i}8Mep>uFe~l;i`l|S)*H-PjyJX@a&Z_u7_ose+7M>n{)#8tV
zr)<`{H3<tJM+Jnnh)k8s(ra^jb7i;NY^P_}ERV$RoU@=I>Du>md0nwQPHCIhzU=8-
zSj2R0dcJx6_6&u^b&j3?7Pll`+5dL&$1VR|-L3~$uLz(1ZNd8E8UO#Z85;;)J<@cP
zbGrqP<4hG6pB#RLe_BVF#ak7nT%Pf+m@L`<-%+CXxv$$dLE~=<{sF$$6Re9i&x}~~
zcm3f+UY`Rw?=>&ppOEEs>u}c5j~jRR@3Hhu_x$#BYusXU8TopTh>BMS|5vTdQB(hz
zt6n$R<kVS#*yJbOt529ZFRnRa>}_5VefyN<Zf_}}n>Xee+C^)%8ExM1v52o{ebtF0
zOp_${G(MI&lh42ZU(uU2-A<W8?u&LSJqmYp*{Q-?;K^0$sUR%7Cg9LwcGY{gr)Ub#
zHP^1#r_)**=Aia#ige?KdLNVBr{!%Xs-JKY*XMXLX`;3yul@Jse;=;3aW&r_T=c#}
zU$yqf$_bsB1`ZF|IutdGeSDZ7{n;fGsj`g!L%S{e?11I|9-rq_pHq@KYFZKCdthNt
zSCH?A8jF%^;&y?ijtg2^+do|PmIx7k!nz^hDvRMK)~hVXdxchUc1^Tip;n(z!583L
zP?UbeJSHjS<maHBN&&tMdY*-PoFT$b<ZT;H#N~Z>7VbO2Tw7twe0l8!vmQ*5W(-`#
zId9>t1r?4BSxg2FAHnWgqsDOLXQ}0;6>2Ap*m<k_?ks4_V(PnU8X|1*n(Zpf^7!j4
zS6Q|_ZulE6Q@G(rK;VRxtSwzl^))YNIUHNC>cNgcr%*@3P3n1}jQJi8oCi<t<-cFh
z8LE1IVaoy&JC1%;mOZ}}0^Ar<Svse3P7!qQna>{PAbC*Jwm$F_$BNAMpr%Kyj9#1v
zIF3pywk>E0Vk)q{=d9`2xu7kGsqbnj(+54NyWbM(qpRjfecR8sl*Q+OPKaisOTBX0
zq`WhQK2d#_H#IqQa`V4kKHWk?`viA_;AyT&r=_Pz$e4R+7;3oj9o04Tn6)se!;Z78
zVUe`ciNa<_o4JlPwfkl-tdw2tyXnperwN+o6`#HHo}cCFFnWHR%Oh|8rRO4AJKt`7
zxzw{Hf4Q^z<(FmdKAzw6KYjRC)wS;U9>G`ju1@pTm(~Z`9r#oAdzIpjs5cKd-_AJy
zDQtyEsQLrhw(52s$C-&&ITg;muT$t=HJSO3qQU{SD=)dlE7k=zFzX~;F_1}M3{^kA
zHoIxnWYM^UT)CSckCyJ`lu4c#a%{mpmH1t1(@a*FSmsR$$PDUXIV38{bDr_sc8i_S
zkEHbsx7R<hoRc3Y^}OZyEqTK^!WK`J{@-9a^0%m2+;1mCn9Qa_VY%0?gq^){;Pd)Z
zO#D1+{w%O(RdrG~{d#B$N2QPboTk7%9tSif5|%vb6>$zYq$%-W+Mf1c11}cSIZX#Q
z?rN)INx!>5?%|i$v!00X)QV0&EWB8Vu}5~Mx`^zP(`Q&7)w4WhJKigFinnXx-UUU>
z^<C;b%uNSYTzz@<mX4ysH@7{B3|m>$i*#xZtA<Un`My(B@8I@+o4nTl!UfuXGNzkt
zIoj4nHXAeYZxns7P}C^H&SpzBtIZatC3=o`RbH=-ld4~M_f3hOly$x0x^EZ$SFN1W
zQMUeK-ZQTEhK45t(ht>h7ya8kFS-3*PZ-acb(M!+^LNklRol!_IBP}vqm5ryr9EW5
zTU*@q@c7Pu1=|lzO7eOaqmsJyQvIWy+1pwif_FUNc&t&QQ(bCkqUT~EILAe4kHY5V
zqEQ#M7@LGEb#3|&b{edfxT&f%Yif#N3X849h2~<1;J~T^CCxW30XJqQ*PmLOlX0QL
z_JfT;VXH?)NXz1*{>s8<W?nJq?-kNI=o7*2uCjdo;#7Yv;WJ`pPWhR?T9sEH>D<mN
zyJYzmy+bla{)<>HSf4s^;x6;HpGMzwR?Fo7*9~7SwW#clSdz#(x5``F;{5WS`hPOn
zqCCrY-|xj9bM*Ey9CFzG=J?-;-jkg5DkWBXBz3AzFvdU1p51c${HNZYeR22i#PI2@
z*UQ&WwV1-lmuhj>jgK!?gW=-=*TfFC0uATP1#Qlf7Gc+q%bl8#x>A(8-6%zA_66s8
z`jO%h@$!8Ag)9qNZH@;X?)>`3N2gFQdhbQWI&)_esqgFaDpn_X-;zE5tK;D`hHXp-
z>ffJw!FWiQ@d4*NpJe%1UONdh{bN2Wg;ucH-?fQY!6u%j%x`Yw(9giXreW1i;aPc!
ztDbcjv$_@^J<SxegTYMW9-ASHs{78`4_2QRGiL9sy;1grt+eS&!T&|q<N_Gt-hF0%
z@O3}m%S5;4rajBrRjZk|OnkOVBi+?t&z)awIo0((iej@q9`=uW^FlKINx#o^E1g8s
z%{}wOr}c~eejPP8{M@O4GY2j_a(;T~rCUtfDb}{OISKxnzx-HEi6poeRoTv671yY!
zb41TCA>+dFtXCgi<aZ{!rLJ;0F;{eg@QGg0fX)J^#X2FXht9<}O=@}6s<cLB;V<{6
zg+JX}r>Ol2tdF$I`@b#hd40&aKdjv63R#wFL^Cvt=53H@GCI78)nQJ&xN7&NR^~s6
z{fE@9T(~+<agWn9-HMeLGPkqMwF+L9wKY=fqMY!P(zyL+q@C}p>?+_EvtBOf{9B*>
zVpPU|(VHo1=T=v0GO8I*c08VPc@B5aLVM9)!Td9L{;s^Bd5F1QTS2?T>9w9uSjVig
z6KtaTJb7jrN$Y=qDe9<u9e?vzjl%tZ?K=JeykFIoL%yrm=k4RQw|?(9U+c?Ct_dF)
zkNo^<x4{4E_O_etmOp&{SR7CLnSM#mv^rU<LqFl$-gBq*in+_w40d-PzEM#AyZgeN
z^D*01g8y<?FVZ<@xqVyso_gE%(CUa}=eali_bkld)mQmFzvjS`_KeBC6%uNlLV|OO
zZe~yWqgj54LF;wU)~U0D`}beS(CR4s<@(&c=5vq#v$I@@WgIq|U#B~Is~gR*SP}N+
ziubZN&Q9}oD?GH@Cnj;^6Z=}GdpkTu_?Rv}5BZX7e{fb(ZXbNGqn`g)@J+Y=28BCS
zJTqPT6CNM8<riw1QUw}MR%yHW->PNG49UDL-X{)C%vk^F)3j61p5)!zD9q9EaO3_r
zihirqFP+eoQ53Fr&2cRe<x&g^n9FLdSK03D{qU=Ug-NP~$pq2EWvc@xZ%$;*sq|lP
zAYPX5Y~i%j;5R3o=d(6VD69W?cgE|p&;MPYanCyL+I>zP_wz@uHm^Cas$u0fu_*cR
ziYn!He^ZBt;s(DL%jOt$E=|on^ZorjU9s6y^GsE|=i1vR9X>KCPv@Ry+tPDkH}2H^
zxpwElOikUjU%QNV*w0h-%zpCjMkD8W-UmFB#T}UIGAFoxVsbM2^I75KU){scj@G*>
z8=m=hU9s}unS#aU1$)%>-<2fy@piU)P2~xeI66(STkoYnGCQZZ(WN*pVcv<~wj57=
zewORT{J9Rj-BOv)!}l5oX7L<4x1RIFr$31c7`L08c=G3=!XJLQLt=foax$`$Uz^@K
zTWe@}<O!2l`^Ja6q#3@LFPSyz+lHv4F;A={>bF-Ft>ZjwvRNV5=vLBip6q;kUOx5o
z>aup@N9iBd`D;n2T=I#3X*fA4JnCHE{hw(o<c@x9Dq{b|qRDlRRis4i#TgwJO{0Y-
z;C7io<uhMR&Z_w;5-g0ohbFSWZg6C1W?)Oq7FhF~_uBiD%AuP-G)c9<%W`AS`pC6k
z=2z_V4r@BeF!`X~`R;Qo(~ft!Exv56s$JBv{@KaC>mpy-t;O;uto|f$^+THD%gf=V
z>U;kFKJ@Er%QlT_kqb#5Ye6FeKi7IlrcM%%wCUP)Cze6*%=PfOf7yNu-ss;`6=w6!
z-Kpe%chyYs?Y;5+7eD+uC1w$2{dixg<<9!4_BY>Om^JgUcbd@_>Ah*cTgsGeRbp=T
z&hbubV6(ZPuzix`jTgm@|2Hl*S{%69^j$jhdV{SW-!1yUn*ZRh^}`RJD%De#O%3>Y
zxF#o;ed{f|6SmFEU+^;bd8d}!eciCr!0v;<ejAmW+k#AWHdgm~wdj4=8+Yna__L6@
zZ#U!0uGSy+EAX>z3|}JHz1!VY!BQ-uu6v)ms&^R2X8*^YtJ7=xxiWqyZAgBoBs!s1
z?#JZcrJ4@RdKnXLmuhY}__&LmGpXusp!+)+IX<a-N8Z%SCRLr`F~9YhJNNm*c|w}r
zyj&WsmHsKBRd1^n+i`{QztKH={KKi+S0<Op8(ExeP<m9)viWiAiQgNZK3pQv!nAHG
zr^R6tk6B9R48HE=YmeTv)W7+XJ5S$c#c5wYR<C++?&1RxfrWau-I+eD-A|)*E}FYr
zmMk!+co6Qh(D`3p!7W8|f8B<JH4=tl>kWc-rgVD?>I#Jj%1zgO=2hILv52KOLDq)f
zrRj!IpP2nhpAA<3>QzML8)w=6S#{#eELlEd-LTi3)eWZW&&~7*ca4knOZoDC`s9fc
z5*&50Du-*lJXHL|>@QB8!+PdLsCvwSzq4;Qif?+%x?jV*!FWv@v(yLgW}Q_J6@(Ai
z^Y^_iSi3dr>^=wCbu$mV*5h*ipk{r0e$QV0?bSK+cKlOWd!=-X{Ly>$ht#dq?8;9H
z9c$Rc_QA_=t>(37$c-&g(aNISw~Esx7rnJJJUR0K>-s96X1y1C&u~uJ#J*o}Vx{YT
zrJVoTp>tNGZs%ELa@p$CpPj`zA9I(xa=dje-DmFa=DqdqnNKUzD|9TnzVXzhJZ$FY
zT>EeKs=u@MmhQjuuKxVR=-;m;h4Y@TJU>Bi@;aNpKerz5yW_d5OSM1qJWqmuqMF64
zPzT#xr_K3)Pd>Tz@A0osw&gc_mS|ZzHvF0RXamEA^#>U$zGzopIq_vqgN#IiX8E$;
z%lT7&&+g4z@3#6{?#|#_`?%bGn)sZ0vVyULx9B{x$GQSm;{)6usvd}{)R!;2)5;sW
z=g!PK>q?~$=cv5i^6g`&D|-&-#3XNiU#>Y3ZAKGiryV)M`9Ji7@XeF6R;>%=Q+?jL
zVK>tuj?}~EPx2=$U2GW^_F{RK?!~B$`)8bgZC#tXER6R~{??;g)=yARPrq7ue)8w%
zk1IYs;kkS#IqFCB1C?-={i{waSo2W4tv=wNc-%~jzj=%?Oa+_=R2il>%)Yd9g7eA+
z73)Hd^)ad_-sAc3j7NX3XT|UJHz%*yntl7}X@>H0-x~*Q@4fV_c_>otW*KQYabL%_
zt7j6^ZfDgx_vmiCwmHl7a_;V!jn6L@{9kijE4?z}Rn_{si#B_FOkx;+#Iygcdlll*
zRHO8|-jvsW($aHv9<ydd9=-FFdsUuax;ww*X#vaAqBab&;VKf2g{=!#+wZx@wf=<V
z_312kem<1@a%%R)N5}G8zMVK^!S{Be%?!R*#S5gk{nV%Y6K}Ww@_25_7tP-vzXi>D
zuq1H(3bWt2Kb4mM+Ijt;`ObNJ=GN@qCB%JT{dM!{+o$h8S#LIJ`zQ6vSxf%DbC|pA
z>YUWqo4YtKR+SjYGnZ{CNLyP|DUqJ>^l^uGq{(N;h>7**^&G3jHW|M;!1IA=k6guM
z^UtPIz1?o>PCk2_%&j)><*hk+afg;2*d^6^MsY^P37ItabDyTlHaD@c&Ta6V@U3Nw
z`V!ll#^)w{vr&4>S+<^|ez*JHy&4>Chkxyu{<_xpc;7$f<)`H)eQ(@Td2);Ole3XR
z`;*UYWc?gs6A*Clz#fg-R<5=^jtyLGhwiGZNO;iU9dK|$!Cltx8x@b96+L5lAiIC(
z$4|$ul~u>^w_N{Uwemr!c&luMv4xt#@sl!pO|4~;FKWoh>V|B+`6{t*>HZD%3+Gn}
zy}YdbP@Q+}msYFbu$^;^S+2E4zh*KOQkUGh`s92Sr|6US7^J$kY};ENYV9uVe1FH!
zSb;DQOl!FsAbz@OX=%voFSh3LM=HPlyIwi*non`!nP1bIs(uA+vDp0j)#V+leSeGk
zMFok4_dN|~kc#v8X8*V0q<)zl8+TlN5x3rvr_SeX;u83e{(B(ZoF8*$RdMYxi|My?
zwLUGkU9)lFxjhs2vxy`<KeI$w%TMEo*oQxwuGMV$8$TRuzfyPc_s_Je-f#cSiBqjV
z)>6!wde-$A--0zWWh-r#t(m#|^B2}Di+2k>PpmiEx$Xasd3V0$8g%-(UJrKp_X9Mf
zx3AuE(Jrws*$s86{Zavf+-{c2YL2!!hgiktum|v;7CpnDf8cdv_yiuw`tKof@<%4z
z-nwqNM{Dx$75m&a-4IebI!$hth{Z;pR3&Sj&Q9Tft1I3G*iV@we&`(+hw>EO`xEv%
zPV0LX5xH>ws;w^BNB<?+t$+Vz>dYw9g8f&;F73O;Rgc;n<Np;r!7*K<{b)7Y+}F{&
zB$w?x{^G;-13SMPO))h%EO6@oA#LI1_uU&dADCFkG@T))Y0^#>{jOJO-bVw{u60jN
zTexPO4>;Efot4>hHg0hodj&H%0c0HiY;<tzURQss-%850g1O6QGGE$u`Bz)LL{!qs
z^s8OVZkx@VQx46o7d-iQ-90@sCDQGhw(LC1y%*$mePo%g&mmJFYyr-b1=YNF;+TCW
zzqx6iF-v4aW>LD;it~)q`}bryT8j9+xMY3uMR3{6w@XFV?MaY2u)g4_>pg`dEg7~}
zGx`~=qa>vMEYLQQ)^qHRKU7~TerI#@8S8KZ<~<DS+3!8kt$Pz^_k*YWkn=NvDbCLr
zoS#jYeMV6uBj5t(OqNW4k7}n|lWiaKWS&>PG%w+M*M{mVx4WAXEY|c_8+9-Kf8gb&
z_9wLp`Ef>X`6`R29eF?Fa_&JJQGSsS0|R}p_=Qc1`2q`?78aOuYDri;5(+V>SBWV<
zSexTfSj<|?_u*D@Uda>Yio@%_ecd0YRq=Vhv)N~r)JL0{yJkK7_}ese_FB1T5x=;l
zf2~ZPXjd*+*K*z~euZ)B(dUeI3wHUd-)?t0AaH-DuEULMQa0Yx_Dy_qcIrZp?Ayj+
zTZ^|Ce(9ZU%^C@UscvEKOHN<9ezYsQes^&G^~?j00*u_Z`qkI-GU`v7nd#RVX>Y{b
zKXb3=&2xoYUTk`O?edSM;5;--H2m6=>80R)LfwHU;@0xdGuF=jdn;p)eNAt5_S}_z
z1>)_tLPn{3`$d;537caq^5f#ckjXP&#m~6>wZA7YgFicG#pY&-R{x!sx=h9Ruhg@<
za&?J_Xu5ZWYz=eLx+py7Dj%Qbi@*zuRj(};+OhQK&ZPp2_^+-NSkx|18zuW{>K4$F
zhV79T-8o;q46A6|x-&)Z>-;&1Pp)pLyr$ICwzjamW`WJ`-mul~rS}$o`m#Sx>*-59
zE@u(X!XU5BH?!ozCO@@bn7o%eJg0tDakgZ=?)Ep0lU{HL?Y#VE%Ovl)|Gx%ZeX)tX
zASBAji*2!quJvW^m%WTn53zhNT0ftmydnPRlqIY7+<bL?Wva)P&~N+sqEl~Z$$OqH
z%9&a$Q+DikQuCKL(sL36uS|=`yXM}!*RCgc(!cADo=uZjR5d3|n!<DRnzGDluQti|
zOZr+8s-M<Bo!GL5|7YqxKMs{ibA&vX8OvRDdmJ-aa;A^EM*gYUW~YwnTi@7IwBP^i
zg_wz7i`Y*dZ{WQ4?@McT?%Jhi|18}%OTBCHbGh>Z53U5%aR|yp+Hc*Y9k?*4XnBSD
zvN?+;|2Xqf;j{J)$#aSAMW4BH_3pLJSoq0DyZoVrD#tI!3;gv>b%w4jYyF(%VmGW%
z6FD4|UKp#l)VI5#?MbNftv4Hx$ErUy{}XxPS68C`+V9$-0RMf`ELS;KZRQAMW#!~D
zGL>T6Cdb1YlCq#nrqp_I-ggJrZPmSH#v1}}{jb`2Zg;6zYiVNb*~;xZ&l^MwrWGu>
zl(aGO<+b{i*JlQ%8q1X5`s$aI`nX<p3a^HAfLUE?vSxW<;pR(P(l`Dbe8z89zdo+?
zoO%7ndlD|kSuVCFUCFNOe6apX@UxR$pEn&5&3muM^(IKRnC)t_C1b*CjyT<~FZsIP
z^ho#KOIU6&x0UI&#6s7*stFTZUwWToh}7S7H?8(c!L!o`>I)uoFWzZ7n=@<Q<f!0n
z2A|I<{3wz8#wJzt>zx153rl(zW?i#f&e7uYM#Oj3@uCxVnLcYV+2|O$h;v<iEBE;H
z@rL+gN|5CzPYoG6-za~)pc|nexFC8$ZO^txCpEP?lNoQ$Sk;}l*8bM}|2xB7li0mF
zRk<E-W%qTvR=(V@zW%1fue)69FS2i+Z`%3PCSh6gnH`anpOy*4{#~!WAbat}h11LC
zb*<B5zVasHwH}}K3-)M<N4~Dw&;O_wt@-npS92S?MK~{~{mNyjRdWt9`-xkxTzpbw
zpMPDm&z`^+o*`13N|xBXdL<L-?Q^bq>7_OI=L;O?SuV9^@q{F8Za>BPyOxeAW|Qrh
zPi?!tWWUFp1Vi;x(~6>JX-?aneRINQldP*<Hgn_rFFs|locH8jt&RKC?|W7~f1oN6
z>-Y5G+pk~bUu6IPw%PXi#itwUwfj%J$+tfp<7>A0FMqnkqJLj5Z`c3yM67q+Q)!c(
z`&>WO$KAVgZ_j_{&5}NmvYYvzi+NPnJFi$DcIw!YXou>3|8iyRFVy+$mlwS((3#mV
zr@KGX<BX}<=2!nNTHczew7~J%uSYF9CnH{K9(&Z_yj%VGmnGU_H;Nx!IC#-3LT1*U
zRo7BYvf_AxOv67;OBFQap3d;8@y^8AXPFPS&r%m-^zY0`n49!N)$!kT@5r;q-sMIJ
zdh*nZwa+_}d2!zNyi<~#yN=F3c~Z~LbCdDT(~moK^S<4bEc<AtTN_-;+`Rl*j@rdV
zr(koOn{WJPo58ACvB>XE_WqOqYL~bCtC2Ld`g`ZHkg<$=Ug&Dx?oCmi8M8U;AG&-x
zA!(FgabRNdz5IM$>95B;ICj)JrDVs<ZE*ize>HDy<m>C(PD||HaNO<3ouf}`s#@Ih
zCuH&`w5^`{@OSzBoViK+elK}&b@xQO>WJiOulIH<uYGs_y>nIevvTkM{}LXR7uS5>
zpm5_h|Cgyh|Hhf`lfM7_$H%wHu~~bR>%Z=GkoUfPYMo!+Vu@wRF1c%SqK<vHJ{ppK
zKR5W*mGVjV>r2J{efzg}{;I8i_GxpM*1zEmN}Kj;MTA78_f;3|(8C>5#BL-nzbbP3
zjrOWZ^WA6ly}AG5jJV)4rK2vB^TWf_mv9{J?0FY&pnJ5+;N|<^_b1m^yLmqqTx{KA
z`aIR=pKA4|c~w`FZ!>|`4BU&~rPFgGZPC)ZM-y{)EL`@>*HN^7-_3rR+a|XpUPT$s
zOO}aBQ&jZi(>l=Caf?Yne<G;IZMR1;M6Trb-UD;m{+DV^e5d?t_GOQhiD5_C)?V{V
z3{5(EDONG=*~3|mHkWfVc>W&zx9a};2&b<$x)-(|O^lvhu2S0eH!8n`@e1eizTHkW
zf$4oyMH9Kcs;d3nyE;Ixe%24MnaQ(K?D-EdEf+extZjC(dTG5HZ^CWAm5MWOY|3d!
zN)rCl>7KFh^Wx&0*N$C~zq<3S!F}7{^K*3AGQtIBd;GH4wB^$FO(|Nl&%WBZ>(k$j
z!aIsh{+Vqw@8iyytGvec*gU=I|BX_Yg`P<dzVwbadb-RTgVv+}WLDl1lGfs^XSH~E
zM|a<n@Q9nW%QMcWzj%MD>a#Xe9LLda4lax1To+Ob_L@w)BD|N&WO>H2j2C>1|JNC;
zb?Mc7FlE|N&CvI&m-Hm1`<JJRc%Bk0TJD))$#nYG_m(djhhBEQ$PzkqPQ_y;OG!TG
zWAi=w?ZPt`XtgR|xKh2xsPJk{#Cy}9mY3>9PDUt)&t1G<e@*<!L~r%wS<lSgeA`^3
z{J!dHp2n7`x6e;E-<|HK*tdFp*}MPmcW>odb$jD}zTcBie%1YDe?KqpqQf>@b;E0V
zjcwjV{gX3}#f!)r?$%wh+{tj&j{N81bA&H)R_dnmhRr)2a$((>vL&Is7hRWxvV3Ff
ziJ9l*Us^xo{KQWAjSJUYkea=0(}87wcYd8LB2e=|KE6`wVKc9k@-bb<t>Q-x-Bfmt
zo9PzR{;@0P@q(K&{ohsR2b@<h2>oO7v#j)M)}kx3?{>#MI9mDdx@O=V_m!Q8-g16D
z_sGC3rs=ceqsnLb=AL}@o5Nn0e6O9izA1i3cHEt#iTwX2q}9s?T?n!7X;gXcwEpH>
zzD#So?=cp;mKjXpeh1QhTq|T=&V~CotS9F-ez|k6;*3a;_}cr6RduIq)4iblle=JX
z%AJaHbEOlUSvDzhuUX%3uIRwZw{k;}Pj*(m)5gZ<@l#plBqDw~)@wa@#QA^9v9q@}
zoPP52T+8uEnGbtS!vEH9ZNJm4;i0bas$Ueex_12or_Fa?_nbb-TEFSdy$b7jYKuEI
zr`4QMN}9bQdeX{&t??U!-<19O^zMefg1^wG9ocFumD5hK-C%xW*=Jk6%TRr<;rdGs
z4^DABIW^%1^M{2kH3bX5C+_=u=$gaY=e_ne$M#-mT+#UIZ$zci(n$wcAJj8FZCZ6U
zjK5gtZ!52?2jh|gk(Rytgz7f&xJGHW@iH4Q&v2ZXxT0G%fO&<W18>!&ReS$w-?+@E
z%Aq>%;6)a_H#->m)FwP))zqnFKF1>PSk>?ysAYM8_kml(B?fn4jfYEFR9RFeH}FT>
ztq^;`_TbPw?!J=@yo_sZOp|}WdaeH1q@7pl<<56h?Kj+WWBzA;UL!`(U^VBt{0n0L
z=D)fV)%NYwj^%GN`Bz_^$dYMtdv5oEzMPMt$2NxMznk^Zu)BaYdBW$gp2wx!0n49U
znfQX0)j>faAd3k!9viork?Gx(Y1Z7%a}UdLe)BlOm-zZ%!wTyOiT-Sv8*i*Bd0kQO
z$0NP<VZna^3&9N*Zwiz6_w#>yE57Ym*2K$_{Krq8baK91*ZAnzY_7Vw&(40jV7|bq
zaMt(bNw4qrF3g(tKc?@p0{`*9qHQ%zn|DX|MlIfKFLTW_Z=w3JU-8QecJ~Jzp8GlK
z;Kze?Ml8`SFK%CcP^ELuv45xH+r+I*qKsNe$EVeY$1;j~O#Z;U^zvnuE2$}whv!U?
zD`36ydip_mmUit0J6H^-omSn!q*Yb6Zq~DevV#nA<p)FmZ9aF$>3Quz(Ve$n-M%_i
zf_u6{rTpuEpWa*-dHnCw;vm1O-J$bNs~mV6wv&7QjB0;A-RP#<Ynhxc-z{5wpW8;v
zsDbBr+p^8^F6H$<yLN0k0V+WqBLqrzhn~vr-nBNZc*k?s7^BPotyE9D?loIy{oUAL
z#_<ojHoqm;EN*{&ArZ8YEMw^`v8cq{L|xyI&@GiSa#b&{j4%21cTZnz-PsbS?FQRg
zRkmke_+62sUb{Dtr+bs^%I_EBST<j1Ju~%R=w_jc`?A05#ShmjbbhTr)Oh4q*k_N<
z)SMKPI}26@nOIjpc3XThB~a*O&+U*2GINV8xWBQ<DEaxZgx#MYu_V&=x2uDNgJr==
znQe1eSPO$#1*fk|7jKB$8=YK#bMg_v>}J31VmDsB{_o<FDk|KW>fe5}y{}o-_qxiT
zB~hV&wr~nqv2}8D%@Sm-=gs?a@`|Z{mU`z>PM+GUZd<F=FZ?MG|8=S=()O8p!Py^*
z?1C=k<{pohI*2at5(!;0^WTD8?j3*f$`qpc))n_9cmMx7Dd$k+vR3hWA@AvPT70Ei
zFG_9662E&y<imbGk%WGxC&zAw@D%93_dUh%|MdX|Gsz9RKU;{3>fO5g%(cGg{lWiM
z0gbj=7j8EO2Oc=PNo{Gv|I!5v)gm7p-%0Lij@xX@F|nNOx$*V28*Xl}E9sOmndK$G
zzwUVN*R!?jn-w;xckI@l9DFh1Lf+Nczy01?Nd1Usm)hXTeE#n7my4{$zb59+m+$X=
z_alzo$iTPlOZ0b**RluL{=YuJ_U*=o-SrICqP%Tqe{GmQhwb0>Mz)?y4R=g<C;p#w
zso~4p^<h_UdKsS8(v@E}_qV81|Eb7H&;BNuZOJ<O&+gK9Ei;btd%~A<3WPpJYfUJN
zkY|naJLWiR@5z=a-X)U?Zl$I$)c&2XvLJu)#f9sgOEZ@F@LD@7^{gqJ)g}J#-MJGS
z7S@ky>oZm^OaIp6W8ye#<|>7YAMcpnU#x#WFGILiJ~sAN{cgF%d{STYe`nadt)G~G
zVfw%NxVoR;SVOH}{4%esy855J_E?tfB=M7{E>3k{nAc*H^}Tv`*&YGg9MCA}^Rj}F
ztGDjwlvK~s{T*L=d{?b#Ncp*(4YI!3U0W^9KKxm|=|DX*v$p*U|I|Ca^?i3P``mea
zYSogQr)U0ko_g2Q-L=;J_u`9B-#-2Ng#WGmugfQ&KDqpleQ&AW?PSNi6DuW`1n>WJ
z?{D~v^|syb?w)V@_`qWG>f4jIEMUI#=s@oK$=jk@zunt)TUG7bX{89=xQYj?{}Ysp
zQfIgQs=l9Rwbxg}nqQ*6<&W#f)z1(9cl-C3>%@M89qw~eUTV($e(-%@3d^>t?e}Cp
zZ#KTGwQ1Gs$5t}->*pLbY1y=T?Mq7o;cDaFw(IfxzAfKgaz8hJ%iLt+7u$a8e*JRN
z+dM<-e$CW&(C}jTe}})fZ@+x{;PzS@r|s80-tpU4*PpK5CAz@-*=LSF>d)#Io)R=;
z5Mi-zJNTZN<-PrPtK{wcrTZ2}-@N<o+TE~u^Yk{XZ^%_SAZvL?d0YRB{M*T2;=lMC
zZ(7Hx^u>SqH<n9!HaQo(mj%drex71sQ+ZnY!hO)9r0)?H{$HDaKhTVHP(PhgxZaar
zo%Om-uvo`@oxYRY_O44M^H21>@S0aszw2+$FY|Y4FN$_+D?M+%94=`Ze9zS)be^D#
zMR|szDTiLi{3VUuhZTww{loQkbk;S*x~(**FZz4R-DY#i;#Y6<&i(z()$ye98vBmO
z_T6hH?s<NA;pTlG1WsztbgC6RS?woyvbxRVp5T>)39L)|pV&I9y!Uv^H_@i!iK9xt
z>!f-%J-+5Mt+uf{AGCSIy)>wA^N<T*+ERDnmm^F6OOAPOH69;*_#raBrsL66pPBnQ
z9yK1A%hE2gG1%dS35VkmtG!Yw0`3+oJbpBHDShqHsBpUX(4&6KgvnhF<<6^`j)t(#
zIk453Md10VW<>$1)9EufB`->q>gzo@((_?I-$eh8`kJ(-b>1d(R4#J!@hv}OCD2*+
ztI}I)MpQ>rmqLwzpe}2afUNI&Imsg*XS~RmqMDN573uDN_olJYMV-<<jT=r&zIe<R
zRa$!I)yE=Nug^ES9ha1(bFg$wF*+f@vGl3&nU<agsld92y?s-}Y=0$R72Esm>y_s7
zs%E!jw`YC5*jS&lm2K@USMz{vHS3E7q)QpYH%~S!FO*1GDJ`99Z!s%q%Z=E=f6DV8
zITW`2>#T@)DxrMh9hdOdP1l}Ftcd9do2e`6JTvl!1&6rd&IgJQ_tYPYsbEZD-xR#5
zc*Ch%hoz)n^;|D~=Ga|RW9a4=X72L$qvh-s*>1IVdMl1Gg*-l8zgn<+?!k-FFA6qR
zG@t0>eEI!E$h8}(!a+XfQ<qDh2-$j+OZoS9yM+69?mMn^`j9obwb1>r!sPx}Pr5pM
zHkuzjW4&|EP2-N#C0?SeJ9xMR&rRg5mA@O~XBT^NPLl1PJM+J_Z~r86_m1D&&Iy{a
z;FTCtm><typ{yJGN80aDay|2{Nn58oPEwl&No6lDW|-wGgv@<>K(UH_;j1Zp@-3?x
z-*lchcTmfD#V!V;f?c~5U-2{TKFVI!%KiFW$y-5bu}#x%h#zuYmG;u(W_xXLYkBeg
zzZ@G}pSS*OVH8?1eR4*{`<G{q#Jk+SwDqmx*^KZt)BbEpo8UXacf#55Q}xf@*YCP?
z^69JjZiXD!w;U}vVZ?an!lKCnX?EvVed5lWWAfYnA;Uc*RfV{+PMr<={4Sn!h+ls7
z+wK#O|Cv`f9sC!+xtf)0R?<=3(@koOZ&aF{O0GQA7WA63S5q$df=kMt3#VolZZ>;k
zbklIx>N$dQ1z&9cch&r7!89JFNiVKUEvc{b`<10|;aH_Z^d{wy1Csr!nGYTroVXKf
zdST)^lO+>`EU#2{^SCVL;tLM;H=f?Z7U1fz>J8JIC(;`>q&{+Jda-PGw-49$|D^>h
zW;D${ZCub1HtEgWqi(ZS7l`pWOp;Xjr(vs8J#mu2u3BaZt`^2kzV~(tH~ZC@rp!KM
zE6X;szQ$*p=Bbsb`CXCQ&u^YB;k6{nl~G_)qsV8MlMad>#55&m80j#abnsvko6pm7
zBh<!|S-jox**+h(q6MCb$N3CWxR_P8zD!>p{&&Jk9gASjtY=fAr^l?~bZ~QYb9B4x
z-}K+^WPym^B8>%4mK>;!vAHAuHt+MJ4e_5IEHoE<{JVb1l-p(HoDwa+Q%`nox}`H!
z<g38B-~UqfJ}=*K+*0=6tiRHnljiKylUK2<3|`99b<xoCoQCPC2O^6<&kUJoe13-S
zoBL*aWw@r!^vtwXG-jST^O3RfgGZf@AMHJJW=Zk+mf~}tIy0W@8a;A7eM3}IO1C&>
zR*cf>1EPXEH+6rw_`d$YiD{jzoQKlBcBfSraC|@L%zx*fzt_v)o!$pz?gUQfDY|*s
z^!nNi_5M(mHT|Ftz|pMxkK}mYS#3Y^p#DT0-?jZSzWPr%aiUae!ifSkuEcZU7k<ug
zahsBS`ku(<ch{1_O<glW|0NWQ=%&mNa+w~KXQFtRMRM6AV;=$DPW8-sP;AHORo5q+
zXMa8a;5`2wvhj8|FYdXzw?b0C?B#iHea81vYV+?HdnkD*c|3Z3Mn%+ro>Wyuc<b`;
z>_?)(27BiBwC}$D_RG^J1;69lKQIOte2y|woavqVINVoe?XCh-;W>v7CSPQ^?k)G`
z)?8P$-@n%SExwpC(Z2q-f(VaBz0u<{dOR-kKdox|!K1{T(7Lebg!T9G085cQw^9=C
zTr@cGBw4F{QCZ;|U&Gg@6wANyBuTCgb7fqA!Fb-yuTgn+-}moZQ76QgJuz!f(6Rjs
zj&<{9oDO}=>UgVS61Zr8y7d^hQ;5K#Q|xRUfpZU;HVK4Y6mD=jZqm4FPpzCr{d%pi
zV6O#9eyQ=rn)N(W&ZmL9Uz+ouSa9cVtS!smBkM2RxpsG2&6y<iv(|w(L*KJ<pZDBx
zIJP%3bI0TbO1TCvuDKsR(suv96^r!@qZN0;mfU@LOh)?u{JrZFvt&Fk{nIx6@|Nw$
zrJi2<hI<)GDbeqqwVBDXrM*k4TI77A-pIm0D0_BZMgI5w`$JVvPD}BemQtHC_0yxg
z{M$3$ovQj|z1gVWEGmt4SM|?dmr@v9PrNh9T;lj5eBPx44Y^i%w`NAB*PCv8+49?(
z!P3%qw%?R&?*1cdZkOb|VoZ_@-g$~ik?()!#QR<nZAr--JQ=I6N;K`9^wvkJ!ji!<
z{6_sTfgV1=HlD--T$cYMf1Z-pesZ*MpNDACM^WF2rA1SMrUXs7^kzxOhD^tW7E>1K
z6#VdO{CKBqhyS@(cW24Ji`slG;F|Y?*n;Z)dR%vA9>|I3nviT1v-TRBx}nN6BdM9j
z#d5i#4`O%hPm_pWG;40!+czr0om#hVpR!X-i|2D_s~6o{snIs&;NF_d-R(!*TDS9a
z7Ce+r7kS#o>buW-LAD$Jtr%(DuRGUUaesQ}Y~=BuFSo&ApZh-kXVr{)cl3HXtIjKF
zO!?ev%vH2Iac4=P_KHWZr%3Q_+Zi;$%8U28`U&1`%X`K4E53PhYSQG(CO6!c)<2jy
zqqKRgudRd5<E-%dNCTY`8M&AnyXQ|`cxi87`;%X39-N6Pu{?QK{9gqyOjq!mUT~<U
z_>*4Z7TrpR=(T!@I$b&Gmkyj}Jh5}NULvE2hFT-z&afFQ$5aeH*@o;Be{jf<Gls#K
zqiXj=&jiEFS%K$kS4fBKfAM(zt-beVzP_dWf9+GtWm~;3PKu6a>#U!C<=pesfOm}Z
zSt2<DE#eQDvnyrKQku`UaK@q;i)N&0ENj}wdy8d}OsV2sZ>Iy9ccv6Pe!PHT#>2g#
zoyO0$-OQP@j`jMYBi|SPUOE4{`l8;vhf?Q$hHDyb4LiH@7|)08@73J@$YvQWY%V<Z
z?Dn*qS1$D5(7wo`uYYa-V_EH2zjxO=J)2drUvzQ0&h_eZ^Wqmh%A0d7LSpysBVj6>
zzNYsLotAgIRF`ny^2+xxcQ@F~-D8?yFq2u~Tf;%E>`7Us(pzVLS#@pOg{0TNBBKMD
z%BvT|OTW8*D_m1(eKoVZxa*tsws~8k&L+!eb9kgga8GN$_V44(jVxQ<i3Nu=N*`Lh
ztUjQ0hW6B>Y(YOo3>H@${&^wQWzRF#TIIqP^$j^e>;61(T_J4pG{~!Gmzv0oRUAD(
zE(J1%PS{YQsktq3M(z9SuF~}#8yEKnCW)Ng)ms(bxnJbg@6tQv6SU>u#4&wdZP(EL
z>{QNAwI4!Nna_50^0ycKR&d?_DdGEThn8s@<L$iaOP@RKsY;p^6!KK*fs(Z48*M#{
z(#!v{r$(hcShiqNQPC{687qG9$aO}ZkKeSCz2j-vRxR#|R=&8b@6uVe*Y`c%QV}1=
z6Y}Zy(FN+Z_l(xg@ttw^(A3Qa3)Y6!i!V#qZk+kxDZ`T(#qe`UOslr6KF$&%`KFIk
z<BHx#&I7WiJTKJ;R8|}Bn7cK?x3WcRnNIR7@A%{eHD*$4FPA;Y7W(;gGOwEPySeAp
zK7aq4sIzhFdmkRH1>VJL9v>Gfx|kqX{LU+DkJm-dL%Nykdi=bsuPN7Lbr+nMPmX^c
z_N8!XF<Z_m>G$@fW+gN0)=MYHZSL7-*Q8f@F8bIL?pvSOt#S=g>dP6M^O?lF-;{aD
zao&}U5uB6s((_K?^T1Aq!ZSH11R}!D?mE6|N2b@!jM)jlVzo5*wl*cy?yLSR8nF72
zn$g#s<punr*AE?R*cLU{M#Al+u-n4}k+1(fc)3Vsf=#BGRBSzyRg%$`=dTMVtTCUZ
zu_J*cylhAC_U<Xn-}Ub5K7U`&@%8t~7mo6_QL@@$W~q+fOq1UvvWf@xs8lEM+e~uW
z#Tb#XIpMFxv}Svw`SZ5^{N$PLKF{xv1}k4Y$J#&prA}K&#|KPN6-r&LnrmpvyPC6?
z^9$3=1I61vP1lcj+0<6yb6(c>S;$+<yS{}%TXueK%Gk@o^tmbZ<r){gVAkK$>r172
zqt7(V32<DSAZikS*LCZn(`G*&@q67=^V-KaNg{S(W$gaV@3fi^PPM-I-uKn_DblT9
z+E0l`%Dq&(a`}gcc<}F|%fDTmIpOHcjwt7I^WQUZ7;U%^JV&njE{8!}pnOOdvqA`u
zz`LTPljc3DhSR3#OshE@VZ?EqVdBvUp=8f`g^f=<_g>8UDCSb47IW%mu_c3L`SK1!
z=QB^cB_1aI+a_qZFY(9>X7+?59p|TU+b@$<^!k`H)5`1D-v2)?=*zoIXXhx^T3>SV
zgGHpzLoLJGt@>*=xor9rsi#*z<0aQ2BZruyH3FTIdYwiwFXnv=W{KmPko<1W#ZyAb
zjiLf2J@vY`U!G6;=pVT2>9lvB9v(dty7GfrwR(DbR!+s<c=rlJ!<}yr6c($y+c1};
zoIC#Ojz3q4LXxWgr)efzChzo`W#Z|zkd;?>+U^cX1(nMxI*Uy-HhBM^`8UOGc2z~o
zv2g884H0*3ik;NiKA)M9uBUgtM{e5=xw1Pp#qT5*Go50p_q(XvdqOtmwM=DW*xoFT
zIg1ZXkA66vU;o)M?^bbb??;EEW2-cNeOW0i{_M<@%{LlcD;K6}@43;iXzKEe#L7hR
zgG?<d-<*wq9<F<#pu>Db^z)S&%a7G%l$_gEto6;gyS;GP*7(yK+I|W;E#165bu;Th
z&kGUEZ(BU9SU%6^&_7f^yYrOTdEp65|9_7&pYLM&$zrB(R-T^jqEF9XY|3NYwvyfH
zMIV>Dn1$g<sg`-475l<j*>%;TFY<mjg5>O&6N+<_CRt}SUU%!cvF2RgF=b&_C9XS$
zL1l9{r~NjuyK`^7@|^__rfH;>yWD;8eDTLEU!=sJy)$UrBH%lDcX$1zbss#=Se2&-
z^S4}BW74m)Bh0*W`i18QRpeMQ7H^vtroFdaZ?}tJ)R`}F_hu|Ub%=xgbIqkj5%q`d
z&s>y>H_7Imd4Gy|y9%d$?zcY+I9DecUfkZjg3(1}_Ln93m%6W5Y<kccTjlt|Qa-7P
zUuMgVrR{w?rh78$vnxDLnm(_jtKRd|4%c5_=H75jO$u$A<|N>~QTFDq$i-JbN^{<C
z*W0nze&rSA%-JOh$M4LVsQv4MWcHPfJ8hzT{?Csyi=44=@=<whC1dfWzKyX~%1Tz8
z&pQ%IgRMDx7tdHJ>+`Z><|W7TzA@)@^SIO%j~(AzwYWS?kd;ODajslW=RYUAm(uO^
z30Go^Uax!mVcxtgqNa9x?yXneQ!ts!a-MPjpM%ZcdN^BtB(-w3ToUF8oF#l?X}cBM
z%joKyR}Teu#m+s!6jwUgmUFI{&$on4%Xg&kS6yLZ_c5Go+bCfUDnRXpd!BlJyD^=K
z<MGsbfjOdy_Kup<qfc!=eEa2`E7f;ze5l&rSN|a?D&=%#@-o+VKX$!3amPf>-K>Rs
zvhq@O_eEdSH+Y{{v`h--@4v9a%T<g++vc>!Oy*`yA)kpN7AraSW+(1_ePeQG(J=|p
z0JVZH+0+BoYeUxl?l*Pkn7VhzsXFUD>giwe&hqCUxg2`_x;AV6zy9+<DW^{8ANeT6
zePxnl%lf4Hyj{JMIZsC~D!87zPKed+yUtXHsWVdBHk9qV75PlVm(%}-(foC(f&Bd!
zZbZ3?@o3uwYR_Ch$>uDN<H@91k!MVdtu8&Xy0lR}{b{eE)&e6NX2ZJ;n^vA|;c|4V
zb$qr;X48v|(=6LkpC0ax{1Wsq*Zh{(-j~hW%Wu89&YYcaZ+(3?lYaQ#bNj<qmu9V<
zRa`6iAn(4|m(Rw29tLmT`dDUexni@jDCd>mm7^Kq^L%;#W>j-VD@bf?wq!oXIU!qc
zga72-zMxNw4v0vJF7Xd$kLy;b(x2E=EU0aB=cJ%$|HbpICvK&?<<2RobFvRTv#zl5
zP2@43hTTPm3bz|CGUs#G|N2?kBDZ<QgbCV5<~*FCAO7V1jj4|=be{U9Dg9*oJ%&R(
zI^m6K>lvP^O*(n|oWNbTy{mt?&-h_iV%YLsed;R98%vlipIs9v?t6Zw;u!1ov!}P`
zF1CMo*Zx`C>O18!OD!8?tN1u$H?-u1t8Z!uzuWe>#gF^kRt@n>S*fBI7mHo5U)(oa
z`HXaOh{MbSnpr7||6I5WldVEN1Zn?x`@ziL?}}ahyN8QZ_HbYSUHaybuC+2-{WRA(
zQ)YnbQ@Kue?EuH+(NA=fe@svemz=EhT4zJY!#&-xEIa~}GC!RQ+yzRqZALFYpELXF
zz;Sn7deh5t&G{BrxSF;~?A=nSvP8K4m$3ySv+$*(s!J~36uW-2Z}x<9vdJM16KYu(
zywU!W!+A2<V~h0e7a}h{EIV8L+ip$Pyl5R2|5?3m*W)Kx<z5M$%KX6n((kVp9@nJz
zu<y}P$z5tI>X~r4O)YLmEPHt(*M}Qtd{x7~wyL&^-}?OdP44{mKkZBEtrw)#^{4lI
zUsL}?_4mn(DSo`q-MEZrJac%)b}Vn99Dk+z`!<PZlQL|0oh+WVmwBZukvw9OmjA?W
zxqW(FV5ZFm?w8NoU7{~cnCZ4BdC}dO_IvCC7d$&<V9a~y&VjQ&%SGRqNWOBIxYnm_
zm&&WjOs7lzcOFxdzProIs+-@-pfx^k{o9aT0R?l{*KhvQ(lsfTW5=uAoBm&~Ybvs-
zo%iy8LA-V0GWoL-X@APk{b>KZ_`5pOk-ABrl6zL{tGgC9W#9Rf*7ZK0>-J6xtX;SI
zav4|ey@{-QAI<c8aX!Ap$f#HT*PNrC!O5AQCiJ_t+n<cNKJE0+FYj9acKl2D>7ab*
z=ik$l{X~ztO|zVkU7xjlYgu|~!JBT&?71fAn06lf{k7{w^MTWhWif4=3ufO;I&-(J
z`u4`Cmqp_GoOkREk9KQ5RGwm3VYIE=;^B;zM@DJau1E!17T=wsuuRAyJ9Om(fx9)8
ze<oP0R^GL?Y`d^@-uvr<c>x98FU#(|el~f<Hrr{}UkY!WyM*&>QevEX{bTPEtJ8su
z8LKWBzno)wd-=b6hYNP>jd$PScu;p;deN4MSLfXyue{T_@lGo5-)T;Nr-@!)#2mb7
znZxC_c|H6$a|^2Ln+lqnqJ8|`X4~3l1XUaCJS|aWaAL;2!})WUYA#E25N?y}UN2c9
z4XugzK13XQ_Nim-ny%Ey;^+0OIX>Dw;xZ5Jx}EyTv(;&;g<_kag>9yGRt?w{t_DnU
zY6bt8ubmX<zqKv$eN+3o#-eL$WVc7{&3WQu!u)z}zsbz~@A;EE=hvnu1#C1r-m~BQ
z%}2J&$Dhw}TU>hUU3jqb@~1Mt&mDO<$KvbfbDn#z_vY@~8}I&^_f%iU%+mU_S#QqG
z>HqpOtwHg^)8nfbJlD;gQST<ktL)t6Qz9ag@xVZ~uqf>PwMU2F{<S*9%a!-=-u&HD
zCjU8~Qas({%nxyvA3o7K?YkUrhRN4oefRZT%yqe+`JMv7A$|ho6D@1j$IW^C_IY5=
zA>DY>1q&yuXB<yZ6i#8*clX&*EBw|)u0HPhPOZ~5H~wd>y|!{|*16uLO)*oH+kY&t
z`Ci_1Z0VaBOp}z>8wIbiI5784Ol?QkqAnZ3!*(}bKVnY!{*NV5oc)`@?+rE8ed+Qw
zK8ZUWBa6CB+>~>pTWeFBCU4(l-Lu*34c~7A)%A1dT$4K9_;M~+_R=kT(&Cq~>}eC;
zGk5m7`V%bqbMMsz2JiWOH*Npx`0z)+FC4Wzd++4UnNgmuDm$vb^u1@WR$1Tv<m_QF
zy^9I|opxUgd*%C~>auH8!KJ?jMeV*Kx4T=kq)iGvl;Y18ZQL4`<;9n^&T6lN)?D$3
zi&w<1-<_wwb<cL&Ss}Yay}1%%b#pJeoL<xseshQJq1##YrMr($nsB=5fbJ#jPPe|z
z#&H3+SDpPjb@f}tx7T@OGT-~JdgsA@Z`OxRAN7Kis*b-+d+t)BwS2ONk+he$t?;R`
z`O?ci&QqPZy5ZiksY3IXOx$+m{q~4>?OsLpmF_ine+qurZf(2#)<;I@b-r&}3%KB#
zAGUq^dn@@}w`*+T>({5qnOr}6MDmH_+AGhKvZP+$dCnxcFsdivCF{J4YLj2~v_*VB
z!8C7n>v^V?{ih4&`GrYOh&6lE@F%vq>fiF!ug<?s+!OX|&rauE=DGzt56^AhaO&e6
z{s7mIPR@Uaug#sD;o6wxRA8@^Z2HkzUia+Je{#iI-}zR~PQ0Tp|1ENE{g%3d2Z?=2
zC+{4M<*NMszt7;@^LNEb>)b^(I=Jri<*07D@-uCD^xClf^R)j-eyiD0IxkW0<b!XY
zCS@GEJ=yZUM4l3ZtKzBN^50dWWvYMozFOLDU>s0sHbW{{`<}A!s^pwD34ihP#%FK8
zXxpQ(^S|*-Dfi94mD_4JG~b_gZsq@a&r-RamrtH{k{8ZBY26_CU*FfAg+r7p?WgX+
z16L|TRUe(-pEL7?_Vnvon;c(Ni%#HuqoELE=$2yl$iRK+j|0Dx+|BRRziQdgF2T-c
zs=qE~)l>u3|9v^DUaUH6ymZ2}V>v6zjwF42kgY2qZ}sWp;-$}npX|^M{o18}=G<3~
zC9mttO@6Mpdi2_>Fi##)ho=Se1J37F`7C2wS^uG`?5I(5fiYWZ3fq41@6YF7e!Tym
z)*MkkY26Z@1r}^_FIpd^byxp=F3!?)V&k8qzcW_MV>Bq?w3B+3bmi!Z?!_e^&wdaK
zE&Li%xNt)95*?K%)1nqXxGHt9`G;X}n4;Z*O%;*v!s}l>Hkz~co?(uRQ(eK2#H;|j
z1@(&gA+ZtuzVF}fx6d}N-PvR4#=l$Dq0kwmbo#H$n=4JKF1Yu9+b5>2m9Y2n(On%c
zq^7)=`jF&hJ3FbX<oxkfOT?B<u031v_^3#3vTNc+7ZqEZ>&f;1EZ1_+-e76pp<1|Y
z4-3ci@9K+GQtN}bL=~=WKD%<;ma{K5Z;N=f_3vH-yF1IwA5IXP;~dg{c(vkAi3xk1
zjVcY@POr?op`828ZUg^v;c1`mZ|~)teunwlhS25l59)7q%f*Fc&o!yu+2`)fwUK#c
z)yld+cJnL2zb*x~&k1uA+4<`B<(erEmq&l=-Fv~U=Hf+r0bXm)C-ooxH23fI2$$qp
z_u~I<sXH1WLhN1hJv<mv{uczk-8$tm+pJxS7RKnDeO~J>S!cXYQoi>8VY|gqg{eX-
zi+X;{%GH?jZSMSAcNV-#?f-Y=r@2PH_TGC(&mO({VD`s$BbgW;yS4Qb|1$L^#PeiT
zy`TR73EQ)({=d9$*8fcSul;AeZT*7zJzH+R>9FWMJkwZ}%{-}}Zw1SpqQf$8Hsw6q
zeJF-$#kc!%ze1`)=IQISp8Mv*#n@Z2@AKxaX;PdsudLTK&Eks9ob0^M{^+bF9|e<l
ztdQ{A($IVU{L%&QZiX)4c(dU4$BjRW%rEzEIXcnzv|#D0GxLAVn6&-kRTlY8pPiF3
zLh64@dgo@{Q2DT?OSyd>i}#cRThG0E>&GjUxv2B}&wAVQzNcdREi%;i_H4R+=mJBv
z;*r&L{~x93UbEK>Y<zp^ouHLZ>Z$EIMas@5r|N73o!)(!`0bE;w^giCd(N3I$DGm^
zDLw%{n=W)Y_=znxJg|;^dhXH9lRx(#)LUfH@q_zFy>v#&)NPBNh?c5`dEVCKx*GD$
zDZ*XxCU17wXDJ3-l>#+?nY`^RH!@?k^nB?)$o7ll)?B4tHPN@f{%ch{65dzSxX3n!
zZ(o9sbdpr0RMp+>d;c%lo2TJ?(O{G5o(!+n^mos6tdjgvFFHRBI6CF*KI7btGOvzB
z%zq6X4y?bW{NMF~?bSnjkMbr=0yjIX+wOgs7qRthr>o<K=8VTe3?H0#F*IC{Y~CxV
z5I+0NMxnDQ|6ev8{Oz+~S64((<Ka4e#jja~rZzR(HMV^3O}+iKH7sk%!MyV~tdFnF
z+b+hk@4I>^gS@`RS=NPq6Wx}xERVSF`fcm2AO$W%?%Mj4pl4l+R$R-z?k9aHz{EUW
z!|~aYGkn+P^2{{bUtf8tSM{Oh!pv8-dCR?=Uw&V;vN+{Sy8E-so6X`sEiagNY)h2M
z^4m2EY(@){-o}4*{cDxGbB_P}xM@}w-<<n1e~tFpU+XWsE(yxk(EYkb``pqwpvpoq
zo^y@n3Yp+jAL^=();s2Se+xEQac=q@jljdZgf>)sUf@^#HEy?XO8XxBl?8FC`vTW*
zpQYa0Wp?^h#+A)FERSzLz9akl$Z?*ng?qfxtP76b*kO_`{ylW{=Z2}?m%p*EnRdaF
zKjLsk>XfppljG#CSX<S7`?@;hU;~#}|BK^?&({6^F-2Pcf{sM`h3URr^(8h{r+S@!
zIX~^zVm5fU{H{<#@_xVRLD`%~LidUJiwhP+hlK0@-<dh*%*xz5r{A3X`7-kHmQo%r
zrSpaLyhW?3-=^&^f0n%M+RMV#f)QUo)$I+Mx2;yQ;lW(LuADOeDyw&&tc_U?$w@oy
ze`HaZc~42jKVHV7#(7nX;qhOtlFjv#s}^59RccvfRT=YYeUiT-&y;N++L%ou8X^RC
z2WVegoVGfo>hH6fJ=v}Ca(V(;8+_E%uFB0j=(M7BYVDRuQ`n#62S3g~)E8g;<9El$
z?d3wvD?DUn{=|0{ED1FcPstHF9J48p^Pk3y!du@3C+FAxPcXflzC`kkx6ZBkvyDHw
z)z=#sKL7H0=Q`b$N($A&Zv+4T+g9#krSF|&x2~>u=}D7crQgbR<W0Vb+uF`NR#vNa
zds>(5{6K~&PfVh<{ceB#=PA7?F6#Y~4y*bpQ(N6bB8)1EpS$tQYMd~ATk4AH(#qeh
zZ!Lc;irXCXV_U)&nFW)dZ`KN1EW$3W6P<K(Q$|AlhMY({wot9;t`~9!>zFcPjY>b7
zU9%|-DKZV1X>hkDY<=jb<5xG7pWS>aX8QZ;#h;w79kjkYPkhac-R>1)zh)=?U1k(=
za>Bpq58r3?e_46j$DZ%jW4B-1oApkY|9&rZPxeurW@YmgulKVL)y2<XGj$7mzUBI=
zl^?aA+*_Y~cHNWu1vT^kIE8sRN%ue2eRfv5_)XUd(a##oKkbOkzH(kc)*{Pb_v<6~
zs@dJ$Jj}bk{jsUO{a-%IQg|{)|JFyLXA+8TDsnSx@O&@+TUq82_p*NJtALt)-0{9D
zHws<fDV@0+=OmG>xpHq$v<*wilND>f-sic<vS#_c6*l&VCprClG^2j%;U!BpJ>d(z
z@w(>H*RvDYwzPj?=ZcoIlUa2=em$FQQSsJuT#@&8KD)WlrCfDF_r?9Y_U!r9JZb0B
z&&+Zk<kr}0?_bTcyU%Oa{HX`kw@$xdb~xAc*8{JDuGDo~f7(u;=KA6of5}C~hpl>6
zyI$;;yKe1gb#Ch6t9$M-1?{w0vQ)ADmTzG8+bH%F<=L@oxvgzNL{H5*+Rga)ygt`w
zubJ&HwM;%$sjjx&m0J~ZaZ;V`Ij5;DiYcE~%{!o|qVQ}*nCSZYS0U+_o|(Scuh^rx
zk#B<Z@+$A@b<D-F7jw5+iRn1>oxU+M;jPn+0~|scerLKETN#e`ZZe#Z(Gke@VdA4r
zJ@xnIAKBO=q_c^s%&2YN?f6GG>#no^SGec*)IuOXd!O?i#|LtT*FSU=Hmv`$Isf+=
zv1FNdvMzSlPENeD<c+N5I}SOWJ!|i2zK9WCE#Q)z6Tb8Kss}AM`Oo}*e$;cu_jZ2X
zUE2-%q-W`iTU+vdIB;?12e;opwx}nm?UC5#SN-GR(fY6XXTJVSt}y-Kvd-$iZ?DPD
zy<v8(d@anpZYQjlb|3ues{iMuYDr+9PA+Gg>zC6{{&b$a^14i3HgBa~t}cUe{OfIR
zE;G248Smj;XSufdVd&eFznJyo*J?$TX=YmQz9Gt{zq@66-=6sCe>gcO2pe)-wqxKH
zuc={B6Wh}p_jXPF#eUxP-(Op75j;~UdG1<LqRbtMimgor4pL9juO#qme)$z6kLcGJ
z&U+wpVB5mGub&AUo|(VyV8#EcnV0S>3K#p`>)3qG*l_iO&+n2J9e#64ZpXQm52Cl1
z+lW>?l;mHXc*@y8<=l4t%T6|3N0dvH6ymDqU4NIQezdz@|E`e0_Z*vRQ?u<hzfp|N
zHMw;^Ii;@NZ27TCTR(oXKf8?Wc1g;Ak7&D`nG&~xZ=1TNE;;bb%g>+3iDB+cu8W&_
z!u7ALRbMM~AngZxzs3It^<7PmclbYE$){qqtw%S<Y*yBLmP?I4ef6hZzPLC-T=!Pp
zmEx>3I{Rl8n6EeL{!wq0e)ii+`(m-UHy`R`gP$xt)ZP8#)AR)rdp}op3)q>S=8caz
zqJHP_xv=Fo-^wn|Wm;#EJSD&1|JEv@jwRpKBRUUy`FQCa@jBCY{G6h2)e)mW_s1_|
z3_O<TpXA`~QQ0b)_&$D?Qtt|mB`dEnY`bMI$1;WCg!r!y%=#vmAKUsm*UM`+?Y%ff
zGS5Nf$O*n5NvCpm?%-mdHRGIL*{)MdHh&gV^htl-roU`+t9LrPSM-n5te~RVz^zYO
ze%X;$@mq&Qo_hxU^AAW#?&3+6i<5Aj8*+Tgo+!?T5!o+4wZ+IS=TdocWyO2rpW6l0
z_t$KxR#@A2B0?tNu{guF@9Gu;yXyn^jgI|NG4ERbw(3926^{O|ZcA4bPv0`ZTGMcL
zcc0ydFQq9{bsNsfc%Itv=7Sbv*21smE^K+J=X`m2*IbEP_g>BDnA_fvpK7LYw~`iH
ztpD|-)U-dC&G$qRXZ5#5HtT;qu6~--853^%@~flknQMMFodsUTY-?`j%g;AESezhJ
ze>8D2lWhOIqQw*b1^g7UQ}tI!xRYATd0^w!?OVEh1lE1>b^9!+=<~;cxoxYm!>&^a
z1*M10iuv;N^*evr$9{dyyYs=}3#xoti{$1c$21lmJ$K?rk9I%-!_Aw$We2`8F&7p3
z?%QcJ>;AWWlJl=F%(`k5bN|sziLRQR3)KC;?3`4;{ocukDf*Y*+}zE@cu{Eak~tf$
zHT;%1?YJrGx5P#Uv2#-zr!#c~|356j;xsY1$@2DvjoZ3!CAw`~k(|C;@!+cWZ+*A8
z|NXuCda|pVSj)uAeiNV1l-iw_|MB39zNEyZ7iFhkc*K)+j?HU|bwy0}_1AU#HrTUx
z{8Eh6c|K*o*r`SJ>wBj?v$>Sd?(N<Y;LUQy{Rpdy-tFi=4`11G*jdinX>{h!{C4f|
z<A#+|-CXm({49C0t@@q5TKe==#cU30H!9r?vRDKQ`*$i^oHDrX|EhPNg<$NDUCEAT
zOATi3$&mbL#GQA1i%f8!lXvN%P@j+Iig$nZ`WoRDcq8wsG_S!a(|WenMZB7PW<qPE
zlviA}E}yz!>g(65-?bJk{&wPQXvOLFgxUph-X~UF&=x)W@4+S6Jy+i8U*zt}{*b%l
zfY^oQk>vs%S~))L`=4*UyYJI%uU+BOx5rm_-Vm}3pS-5v@@?%K%K9^udJZv2Kk7cl
zEd9ulo7?ON^8$@Mig7|$x$P`0>Q$ImEv$MnJ9g=hZSKFqoiFW|(3rl&Jmg;jZ%)K>
zulmz(K;_$!`%`yq^UW{le{6MeZ`ZOl_8-blhO#fcyNjbCc0;J4`O;qHnNQlpz0|e3
z3i2fK`)>d2cwELX>+6yok9Np5WE#tCSC-5Ap(Eyf@Mu!=<FbM~d>maHb~RjWT~yzA
z@Rid~i3dAm7kq3kzjJQ-?bly7$j;f+{E($-v$BOnhPzF<$;Ab-|5Y6x+0HSY{O8dP
z-J8oB&Mj}{UBGzyv9Z^m0P|xgW#rn&hI3{$m#ztUWn8H#HBscmsp7Q~pEd~zi2KF$
zysv2u%y`2ZTK6XP`!|P0E4J3ZUcXx4nWzt&o#s}};5QRKzf{hOySeG*UU@5NJ7>*m
zqvJKN9=&j!oxOPJIXmyoldthUg){)WzP;_*e?9M8b-LYdxqZo(f0y3b7^$^q$1<~e
z&aR6OChz9pl&NGoE`I%rTIW1RmPL)1#N;{_9b`JvbVGQq;+`9y`aXzpt<SE1_(oc9
z&RVV~iQMV+3G6ja8yFvU$$q%OIDgKP9_{z}LJQQ=Pj~U0IPx|;Q|5b%l&IL0dG&|+
zD&$w*V2lrX$7B5<@nNIvhXt*y)(;p1RQ%ch+!8#{y4h)QXCdpigNq-iw5LzEtC)B3
z&aMKn@Eu9fduzEIJRWg{FMq7mps5`bRNr*HZPVokYjg~!<*7>8ta)oxI3rN!)s30w
z`o6CzsQvt_Au=K$<q6ZCQ#@t2b0Z)AYSWG>49(DVc*qqV^KjPJn}u6SfBhD|eP*rM
z=6y$F!Sa(qS>u4{x~WHG!*@L53Qw>-QM9IjSGSHcy!nXr`M2k^uWr>i?q+$Xic73s
z>P}TxwEsg6>EP-eU$40GE@s_6Pi!&AVuJ(g-YoifU|r6ILrt+a88i;9U7pI$zHjaF
z{2gDn6tObgsp4|jzT<|<hoA<T$q&1f6P~n*Z=dJYUwGtN@SLAaC)TJR6;0pA;4}N-
z8S#$+hqup+u+<flp7XQGINl+k<tpnMJrQ1>F!B0R#~IT1G4#ssF^(^Iy|O{!(Y4?M
z4<2k0|9I!3%jLK~(-}Iy7ua}z>Q3ICGM`Ccip4zE)%J0!+R=>LFXzwOwu>YG!cvB&
z>wC3J_D;AQSCHAC-5FKzbK9q|`;%0o7smUX644GR;<{hO`Oj(FYt#8$x0hYtWAC^(
zOl!~OlXVaFovgQ5%hkA}{e8YqpY^-^Gu+>~-sbmIOy7Sw$bF(-qtuqC7|Hv!`BFE#
z45yY*RZS)NH$kFiZMJ#WU$1&49CE*1uVSygAnUz}md271f8rP4T6S%f<@M=|@4n4-
zu(yBQQvT#>Ug}j1x3U@DJjI!zr%WEdtv@-Zdhr~KPxC92xTiYRc{RFmJQ3gY-r&&v
zWykJwbmxk{Q%qxT{cgscbAhq3d+*t#Z)W?~UFuwKc)9aRc1ZQksJS{u?dv~%Ny#&r
zu5s=O*EfqPg5A2aCnO%3=9_a<M@k~+rj9)GdZlicg_qx4e~@1KcCU~4H6yi+2Rgz6
zFTDF-e<!j;^zoH*?g60_W#4y}{pY;a<$1B7clSjD%L(F>Zq&3}daXY;aqUmOhoVez
z)~s)@$Q!WkHGb4^;Hb!!8JaJy$gZ6b;B68ctH5H&Dyz-P`~1U<++#V#7Y`(C+gZcI
za?b3x(CI$m4f2)(o)g}vtJyF7VHoI=@Jaaar9BglJW;PtJHAJXee!$`eUbR<e`Rjw
zD>80;_G@X$49Rw_kZ-5+-p@<httR*LLiOF5l23O&`Ol{Cc&GXL*D06w6}|OWjto3w
zW!3lP7RxK6#@P#|u6P>0YieTkL`#l`F7|DE+%Mi<VSZk!^uvbAw)m;*_Lg^B*B*Cm
zoy~vR<vf>R+`KP8OI+&h4NatWg2q5DoL6>TTEFI+f@;+Hn;IM+dmi&Wj$pVr@!QRs
zHerh=ov$C*&YtgQ)}-XHoLh!VcrE9HSi=rQGmFYa5vz5c3e4ttcJ;vA&qDJ$T$))s
zSPjq5QQR{l{g{ohb!Ni6n|URDmH{TGCU8#ADbh_nU}JoRC7q|QS+Bf)<EQ5jF4b7S
zF&1VP_gQ(|b7gb#nF`IX%$yP?i<Es0CLTItnzruqB*F8A^+(T?_EdxNfzpQ{hJ)QR
zv(LmV=16>I)oF8T+D^CIEWw4xJc7*oqwj9+byyr`zmDBc<9nSg<DSni|1$r5T)pq{
zQk6B!|Jd7pUhuotZEf*%NrT4P`cg|HN44kMZN=033`=>wsoh%q?{8^8cy#x9)}F7g
z)bp$DjAJxjN;-+lE!?kM{>!5}@<qze1(OB28Qf<bWUI+uJn`Qi74OM)&39&=ZvR@k
zG4jDVUcuax^`!@!raiqPzLMqC{2XPAId?Aj1>|~4?QHQc@Cws&JTy^0Fe>^_y*8)V
z`L6*J7j(+pT|LjM{>EOZnE06cE1KW^pY%BY*xB@}zdS*Mb9o(?-mZ$zkC^^-f&0A^
zXGLc-e>^+wX@2#e<lp`IU;4kuC)Xb~J?*tCZufejb9Egm4~|*9P7?mblVo?x#dX@0
z(p6tQws`ezKI;C$;&#tGt2JD2|9YO4J>*({wsE^^<?<<_ds38D1&#}Ds%+_-rFT&E
z)QOtF<|X&rE$<d^Zz$W-Co!eX@x+m{PX6;^j=C&$JoMthsqLkAUd{PYQrf=j$KE+<
z=a(qGy)%*ZT%ehg;Rz=GbN<Eub}0Pfzq_DL@8Oleo!iYWxH6|Ft4J3-&^RGtvCxEl
zsrIZs;ji^OZl7Ikcx;=?$Cr)y{g*r^Oy2o?PpL<R+382y=U=|rle)pZc<#SSpR_Ob
z&ySeci2Ref?aaTPN$uN(!qv5L|2&Uud;NC3%r$?`H`o4TM4p)c?a^P~j0&qyvR`GG
z0=49quGJ3`=s9$NBdjEPR{I-q;|o8}c($?cZQHQs-z(Q6+w$sjD~`yzm8SK}ZP{tI
zNRH?4nV^~$@0eNJ9$t&wd$*Cl>{i?(p5I$91fS-=_cFzPL!!6~^P9}Ys_gG>FhnbL
zpSIb>xOEN3CAP$pW}6R9Iv$(;X4Gw+@tAWX$2Ko3r<-o-8#Xg>gxqms{~Y>eTW*Qr
zi!&3KC|zCXaN?*`VDpQP>Gg^%N0J3k9?)>QwYG}+ir%RSQoq8|m@S@aRAo*!2xI@A
zern~Tf|Y7IHU%ryG7=9ioz*(eHf3enP8X54j*q8ZxO1*2+KF+__2N76#vaGj>kGPG
z9@3d`M0a6?@~14B6;?vt4MvBhFJ6y1{_!nqeDwpL?-{4Agza5g_Gt-^_O`zL_4}OV
zEf0mT_!#~^A=txofJ4)pW1i5eLrQE5y-N4(t1U9@Q1YEJb<?^t+ww*1xCB@l7K!iJ
zB_I7j;g8e#J(s)197+=WRDbT>7`@4#agMKY)4ODzUEKT1cy<}SaGP=IaEqh4jDf+6
zwr(c2y9buCH0Rx5sBC)InZ|xsB0;<=ji-Kt;Q_G*-?=XZO8-}IRI{uR&0aoJwozaI
zrzS&UufG1$+RB$pgVzZJDOgOlIqq^o!69s;OT&u;33&`V9)uW}D@>|Q@_n^#`?lJp
z)y{J@f9=0}{?vqjjgP+WK4te=n7gCH;`Wgbh3x`@oObUH*mQ=^bh<j{e<F_)(`Hq%
zKZZt1^*bNOuM3(~sT^A2eq@*Ep{+4b^wY1{`tRGleA>@_<qEeZ^?feSx!hqk`}M6K
zy%}b$Q#6j1SQ(yq%A9JuEbyj#So!^?-k^VutQ~7@%$_IzV%_#N0yGa={;SCAtHwh4
z*Po9lschJCBI(dwv&o<Lyl$=+c;C>bmF4PL(D&kqby9std&%RSjqB!Lk*@vWb+=IT
zdv5soM^6v$H3}`Yy13<9lzJx1>G^Fcksju{M&&gR*FM+3YUF#@dsh>4(#`Dt@DC{$
z{q7u`?q@BkEMa}Oa%q%2t7OKrjCEbpm<}uyG2Fwsq1Hmhe12$n<RLlkUy(c2WJ6^y
z*z?zgx0`46--)?dU)m$X#VnCKZF=a3GELU!->x&h&^n&~w{bdW*i>fg)c!XUXW2fw
zBX&(MAuCwMN7Z!C<&*#R=Gj?F&$6Fn`|bF9`?O%^`^x{-9PMi!*dJLm^~;<@_G|jb
zzQpTSg($vi`15I^MDge4<;VRt_TKAFdm9mw#?WGIRu#VF;_hp!SAVUK2{%l;V|u2i
zpCx12`_FDi7*bblP~BS7b!~5@hPTt{N%qI3T~{dFeG_8KqPEdhDc5aj_6q6b+I9W=
zv%XiQugmWLv)!rVSX!-yA6x#l`2GAl)7EU~dsf-^r+d`~v9zMkksG~^h<;Z8_)x*A
zO-}XI*|i5A9Cm!r)XdNR@VC;RhxHHApO$|s*-(D*{c7i9^>@9W{+d;@v?Df-=f^p}
z?tg!^e=QIHw7aNs^(Xny`gvcJ7#0Z~I_>1sn9iiSPv?lz-0<5;rE;r3Uv1f57qogh
z$NDqxovy!c`hHUXh#`L>-+b4WRVKH2P5qS$4(NZ5c*|MF!6g&WwA+izwqjNIc}2t5
z^}A2(*y0@f|K6#u+dVhiw>aP0sVu)PZ^4Pw{SP!a7@se<td9}++n)E~_zRnKqu2=t
z-#$%cDR44WSi0I}ZQAS2KfWBeo+X*|xFn{i%~}OCewt_a@chdhw|6B*vtEBW|9G*7
z>ZNs8Z>w9LW%XIE|K>)R!Gv@6Yh)O=FH-j3m8MhQkvM5)-TL79l{T?9=eL+|+JB)G
zw4S0ws_*_w<+rW7D#hyfrGB@n{++T)jO$0nt^|#HHUV!JofTX5w>&Gwaqioh=e8Z3
zU2L@Q|MORCzQo*LFUs?4Ngvm>-t96q?Kjt4>9@J(e>Uyw)Rdi_y_d4o-|o8fqDg&X
zR}PO>!{Y5_AL=Engcc~>JEPLO>aJC>-C6ff^Ryd%e49VayldirAod!=jgt~p7NRRB
z?cg?4)eOG%z|Z^C6rXvf9WVa0yzWrD!PKF7LFv;a!|e=85<i<2@2*&}qFDa>t-G_H
z@-tYLd!)~fn67{C%i1Nplbob-!XMW>|JGKrzRmgTuh&->9N+bHcYXNu@Wa{FOfzHD
zWI5~#dE7#*oGf1Ve&;(Ea6L->tlW}w&wH1>Yj8`~R^B4_R)aNw{g9M+mivt(8@)?E
zynJT7^Vi%(q0iUOk~wwhd8pdbV^bH{r>rr%JWo8w{^h(K%2|>B-<Ut{KQDgw{F}}@
z54t3O>&H)>-F<GU*S{SLHhg@rw|@1V74zS`(cb>Q#fs$>?`*l{6S7~4UdaD^zOd^K
zU&n^qoBWw4gcq!e(OcjVd#ZG$&+O6}R+|3NY0(Ft?$tP7{P}pvn%~x9@4n3ZDa=ru
zTwIlRrZ=D8$guQ6Vp*vT=c{L}8V25q@7K<Ly(dq{Xo~{R-pf1{{e^OO19k2w^VqJf
zpKfxgv!=HiJT`F;G&b=MJT`G$?9`(3-wSk;1larg1RhS~Skd3X?GcmLwtdwCv5z*n
zcWzqc&YQC;XvVH1`U2Z#S^X|*ke&YUPoEF(s>jRiZ_I8Cb^rDE3w!tNW0z05%zu6C
z65riv%U&<udwS)<`um%AU$3|GNta$I_qyKUN`}ggnhSU5cBHKP|2oxb`>xyZV(m|U
zrh2~Ha#8uBnzxtK?_FQTZ8F=+*4tmK=i9j{DaP{VB-ZnvKfL7IJ8xmwy_4m;z6l(D
zGy9$2zr9OeHJuRY>oJ{T|MkvaovkS+Rok*MJ>Ng5EkAUKGiL6s4XJDRJ^vnlW>B|f
z?bSz8b}{u#rL7q&s`>Uhduh7_yVN-At^V1Uu}1IrlJm<K|J}Qn`S(#1-nhCKI=5ZV
za7t=C>0?t}Jab!w!0+8F)U=nW2{Xri{bRRbvf-Bp`)4@c;XZBnxZBcvqSLjsk4IxJ
zPI%C5$)cQZ@Zo68%IC+#iyL;>&3gGco_YSY%VoB`n{Pe*9bSJ}Vv0y_;5J|Gbzhk#
z$~veD&K7b0zf69faMxBBwqM&?R&3rbb$t0-u_c@91$@4G9sJezwak9LcDQJIihoOd
zY15(ZL$l|6ym_p<=&AWu?XPD$o-CYPwx03RgZG~HZyq@PDnFH<rNTY;+iX);3Hfh-
zX0KlLUAHQCx9bcI3r?-)ck5T5zO7$#u>V%K%i^0EW~^OZzr?3c&pKbF`ZxFe?R)>O
zUiiuU-r3U1>esg8kDT}2$}TRSF7bkM^^(93r`rzLN;KSw3yw@Y^x^BLSI^r1xp*C8
z;&$Um=3RGU=`T-N4o#iswwHGA_*b>^PyUX?#&>HPBxW=o{b{pcYH5PoN$HC^0rf$f
zJRdA&uv9y2>Si7mZEKgk&ibv6mlSW8g!@tc_1|AFI*@JKv+4iVsI|e_SLeJw&G0>J
z_0{#yyQ<Zm^PAp&f8uJsywY5!uUjhD%<1r6Sp8BYT0HqJW0%>dMT=kUQS3Rib>WsP
zo9ArvN%4NXGg0dO%$c7jE9=-@+A#mB&0)Fu`|52Zxvz2Li7IW`>8Ey0gT-j(Z2u>Y
z^IzZQy_C7Sa@D%a&3d;V|Lr`p&Q(<}&0YMiy592RYu(nVF4|J}yW~-v`{~rD9rhC~
zjGiagzKcH~$zIj{gy*N@K69aOq72r0hkwd$KP6mjW?X-1x7uR%+AlkzTrA9Z=jwcs
z{}r?NS@o|a_4+?%&*I*8CvVZ`Os4)_|9qC6_APz&hh3+N|1LAvjl~OBW*R7Oys0Zb
z|7&jM^v18QL5-Rr@iQhL-k7!h)?B$2%=tI{-&&PkET4bvPfo6vZs)uuC4YWC57CM1
z%4rsQa_MloeZ!v56Q)f&A+V#g=1%@IDW-I%Blov1e_rplJ+xtReZ$o2(q%a-a`u;Y
z@nxjG@6!wTxcHI3b8|x1ee;I(ES<hJ54Hr>Pg}^}a+WQq%`SvdzkQdZ=mxugtM0y*
zmHKY?>3-C$_bXQ}`^GE%sn|dvEwugc>V<n3Wq(TQiQuSD$?&(**YaNQ?#HxA56`}G
zou9y#e%p9)-0Ew23|56*+f3>!w%2W4nk_9eefj><7muXPk1OhkITc=c<+_@sqh#vA
z2d~;nLb405x_+5#u%#^HtycQmBZ+?m6fUXwraaJ7yeM>e$DG@@1-7r(7G`PV4}82N
z!Rf%`oP&D%qh@9_q^R6J!)0(*V(~%y#983g3~ir<PhRe6SO8wopdNW*UVTx`m%shb
zE7_;o|32z|;(C*O{~OEKQ(o>bJScxN?oLb$?>@<Tjl&0zKDhi#{I0Rn%?C=)rp3SC
zxWDnQsr;MzqjjlHM?Ger?OVa~b?WJC)9PhMw#hrpktz?dx@LalXoXeeO1_t|B8^&)
z8~nth*xI8%``z!JyYO0;N%rv-TR$~c)IUG?jAP%92l+fk{PX|SevZ8B!#ydtve;n@
z*YcX12W+RQ?B2V_M(Nbk>*u}P_wIb5HT_A}jo_Oqb547QwFU00+q);Ay6~CIf;C-h
zSDcn8Q?NXrva5wn>imcB<qf4pds4d|H1SN^&6%<OK=<8`SI%)6zV7_8Z<~dbZAS4g
z_S(GO`U%IR-NVElB{h4un9S1KIA8NGSL&j(&vu#BDbLcKH6?q-&TBWHOkmI263I2E
zHs$22M-$F`k-uWDcq_x@G0V3l<(ZfEKl$mn`||Y56U~%o-&9QtyJ_Efjy>Qx^W-jt
zuZtTzU2mU>_F~etjw)MtWBZZz(3|Vl$4cg;C%*mU7`^UTecm3OFNQM%#h4P7ZOoY|
zZ@*l}cky-AfCmSI>--A-Ce=J=F5B@?Ro=TkapKJQ$Tjn)eY>&rcXlSf-n^A|Pm;g?
z*z9xaxnHjK$>{#Hz4rng&#o6edzb&C9UtpdrkU|8UEh5dIwzHL_ZMqu_Qt$GKlaz_
zx7if0S~l;DVg8Od%eU3_I;W3q)4t^Y*0j6KLDqSp<NoFYa~v3C8~S8q&vKP~Pn^lT
z=bsaY;JMRDd*7I>D7d3@-h{_qcS2w6J=^rz#|q!yC{3BpdAM<}ePx#a{IdT&f3Aq7
zWcf@F&NZvPeS$@H)5Rrhk~5F-&%M`~De$Xw^_Ry|u~q>mV(N`v7T)|GFIK<ps!`m$
zcQ4G(99J&d_;-F8msi_KpF1T+vXPGi9{)F%ld12WJMYz(*~{0yd*z%{T@=fuU^v(B
zTjjS$`{zA>cGssq$$LqD+jgyveNQ%jn<=w{TWH~t+7F^n+2&l4UMsf3b-!4>{?~BM
z`^!&GHk}rE>rsyDAu0Yt-5;7-rvLJo^|5}NeO=`|!|##ukC~4MT^0yD$9_$?%+8>C
za!0?=)3A)Gk{sNk3~MHeRV948@_v>4hkZq+w@=U8^&|3Utm@v|>!*vyK6QIL@!is*
z+O=_?ZwAMBT==y3>GbQLey968&UmV_NuGftX3o==i`yi!I?T@qWw$@w*LJz?lrxiW
z-aobJf9i9y{`BsVxLm)t#d`X>+iiY=Wnxo3ILgGPYMoh>Ilq}XN%v=Rm{_R5DTY-F
zA&#wb7CE(A<z1(ivHq<Kd?MbR6OnRQ>GnJKV@lF<E}#A=P+0x+?di9s_si0z-&%C<
zMCap<)-`3thD$OIwJ=Tj-FSD?rb+$z$I?qzOzM^{D*W46FYda=s$|afpB?_k{BFC|
zPPu*5ZtKj9Y%gKa^^uZa%u-o{qgCZ3gQF|{&di9vSR#@g&9PN%`u6yWDXOyWjN2t1
zX<nF6ezN(tzHF&RoP?s-`e1)Qi~Ab6)ggO}?}YxWj;@aqtp0Y&VN%uB(+l$g)*~+y
zO*D_MSJ@r5WA^!dA_g{l9;Y1>-Wr<!Y3a<mp1t-5XU_PrD9GXYVb04H8`lN9yB!YP
z#>U61=-8OPw>x9Q0x?J3rl=(~x|?q43ES=3<swv^e@ckmE>L`Vhn_<HU(tPOt3+;H
z%9}Uqb=buoU&bwS*!Uy&C+WyN*1D;Cb2-Dgvn!8_DDJ6WdSLdoD;wMP9!+cZm~pD<
z)Y^s2DK`tH?>;O1&vL2oe~;C=x$Brp?tIwAcINe6A^8r`h52iL9eO;yL1C>7bJ3k=
zneiqHPk*q#4cmSBG|S0fo@@I&rnN1px@8mQSJQMWBjAXIR$ay3cyais@an5pTf@%o
z+{aUpzcuP_ebu_ZTr=m`Uy<6Y9KOHy21jbEYP!|UYkbN)abdf>q*82jcU@+U&h};7
zK7IPb$w!_F804BgJ}H{nkg{OmgsF8OSo*tJrz>1@`u!<Irz3N{mEx@!k4mffw+$0z
zHk`auqs0H~&hFVSt}BRdSt~c+G_)*c|Mr)EJI@?+d2n=&iF9v$UUjLVSo)P&TiZ6h
zyIgMWT)8i9<%QGxL==vv@Z|HZD~{4!+!`A?>uuYt=PxHenGkt;W#RjpWuRSce~z5}
zQhir~eVtr$U-#4lU8bdq0e=pCk5m=2uPlmq@GUZR-+b$OuG2z+6}wO92!73*y3P8`
zTh*ElQIR!#Hx^l3d)`06p}z6R*BEELfTpRtxK~~(tq5B2=6dxTR^Pu59vFOddR6sj
z>V|WnA0B*KbMM_6b@#@rx^hx8J|DFEz9YjfKWBFLv%j3XGE&_=R)+VnJ(9B%(6xML
zal=;sPT|uP1^oJfr@6Fq3!@ke&Ps^KRlL+`3D2sSoHFsVeeElE^EFpOzCARqFAV16
z`<L%MVWzrbrhJ8u`kK0|PxH7}-+%PH#7w!|YUYLi>-$goEN)aa?EN&=^W-{*w)dYE
zjhOr^K8J}oNAEjR8s>Lj<eV0h{%+Ai9}aixTHYM>7R4i1B-2!4c@&N{>IVP$vgYjc
zIg))kixc*{-uQFSzT<nLhh^2mn010j6zZ2;=GIG1C_eZ%rv7$;aqF{p@h3AY`J%NV
z4ozD)#oaBd+}SvyTmP%^e4kf2IxBf53n%@%@Z9)qZlOz_T%6dK=8q*t7oYFi_~ebd
zz5U;>Q+BTU^*ZC5(Xw|h=h|J06SMmH(;)U$O3uIfZ|nA2=BnJTpDMR!vv`>dKmTL*
zZEvEP>Ro(v#q=gjK6z`WCM!!AtBTmk&b_-o-_0-gW@4Enu!-gFqdyaGDCB&9dH?0-
zSD!bWIUF2g=qg~HQ@dAY$&y29FL?t@XCAav`TDFy;a!8g%2^JdrJsYAp4{hAmi)O=
zeOun=Plb8&7g^oAxa8-buYT2bUsGq7NOxGPcDWwuk-G7<{tN$)w%^B+zW&(~nABMw
z)2Xt})v77Ua{rOJQytbOm9O#8+pwD{{+OX+pZ<!Lxb?yLoSSYq6sZd<q`2p|l(jz(
z%b$>X{pe@6$tN>smW5uA(Mx^g(z3e$^0UaFkET>A#mv1VkiuxX`_S4K%fr5%F3~iU
zo~#ioUUB(m%8O%$ueR1N;m^JJ(Mas`X)#5Q{g#?9++Hl4rQzi<;c4FLvi`46yUu>H
zZsAfo;81ollGV9qqX>V&k)C?BJ4#gs=Q}pXUs$s1X9KhP!CuC14X4jssc38LQEw<e
zZpLAIZ)w8`Mdv*`HME}ixc<)H9W43s;>Clmm0yyJ^;`BeF>p24C0)@{u8*~R`FN?;
ztiCsgddx+oH*R50JiXTBbkfAy^*pj`A2)v}uRU6_dDlGk&v}{)jJDtV>9gXD(F&h{
znG1|2hs-Q%t_kSRk#}Arx3$rVaqsr8(>^W!{*3j=(yLraU&2$3{_d6)(K@cFe{Yhu
zjM$APZ41Aw)DFgH$-a9Hk6ftucQkTkeP!J-A?fbB>n4{AZ+mAjEv0?Nf@*_)D;3p~
zucseP;4bXiIk&d3`u^lVUl*n<u2M;3lbQMT$|WDU_b|)5e&0JyrCa{l`<B4^ur*W8
z&9GWIhf{1@g?5-w<%ZJb(XTlE|5}+iODgRBXPJ+Ut9o>o)EL*fys&w-oAYVb(>-sj
zZy%_C=<%F0M)+Om$~QURe!kL7N=rVZcG&o$Im;aFy1Cj`8)R?(W&hN*y-4Kms+aq3
zP3xJdzu^C*U2|Vb$h(~mN>`DY^n3qe8Q<p-S7xmXoBghYd(u_gJW<nc)*k8gmuDqD
zTfFw<@ninW-<;VpWoGNXy^9u~J$~f1-KRGZX)X^Nl20bp^F^}APja*hUb*PONz0x|
z(|B%dNDg<t(0Y8q>E0jh7X)6fjXtRR<hD%0!`D|>XCzBDY*OcrmHeH$;+tgj^rkC6
z<{mkx(J`q&``d-~Ywm$c{;`v1ud=gl{1tiq-`6)M7pwKnGM{Lb(|^P*bjJ#Vqc`V0
z{Wq^6`Q?QdHjKtq;U4embzGP)@*SIbsXSQXQHY1ud6PZ24A#F`A5x@oPb{PT26J!y
zQKq#id`#&Xs)ysXC11!Nt~$V5RvW%ts%YoUp4qa>KaZ_+dB1nL-+c9HOzi3H6)Z>B
zWN0k7H!)?Q>emS>4p-}Yc-3|vS@xAL^ncFA_V>#Sju;CpIQb)kN%Xx*k9xgDzz6XI
z){Au+e=u{NKKDFGW15wgMQgNx*$rE<KH0vyolZ+N91A_7maI<TaP){uc^BY#NooEL
z$4g2sQ9C=gd@5PD$FqChv<138hK5XmtKHj0)=fGsAgOsoNzpaeKESC<%EfcfqbWBz
zUIaPLyPoa0a4~0oxUyt_zb9MK?i&*I&MKT4i(Z`am^)!+=KZ*f878vQVU=;r>wD5y
z8CAF%mnQuQU}rxsn;#Um`*B}I5u-PY7TcUlceHOUezW`6)O|CXJ8mhuUC~;8)M)+l
zUPTtgMQnnm9k*1Pq+PBkEMgPfDsnEg!bSJ;qKOha6r>oXkGUvUKRy@cy4YRq(v06u
zYV~Q38bX&Ih%w3>o$JWCokPI;o0s=Gkz0SV5_gJjmfm;hSm)<$!E(;(r*8Pmb9_FN
z+`nZ`RX=NY;o{f+ug>_|l<p45Rtx(7bxqI2)C*g#G@8jg@_)#@)ZTyJLwhfwkn1^f
z_Rg7R+x_9NweG<`?^`(E3MwW(Z#nF|i1+z*uP$fBdbKWtxm_iPs}8Mk|H5B+dY(d>
z++*Xf%-&*4zWhFx(_ru5H`!>Oo#y=z@552-54T@^TfE28PWSd^#o289pLr!1o_}Fc
zFiA+b`SWZDbK3?3q3s`SZhVcM`|5Dd6+_u+rzey|$*(=d$T2Zb`jWjw{;khP6;HHG
z;Svv8es=RG*5AVQ;;|>M!b-?;=F`(n`cCBdEGjuWw~oU~#&7q$wB>i-)hOjox-R`)
zhgIjV^vOFM@~$DmuAH2k?&My5m%6d>3E$77wt`o0JFQo@+COo9>}?BXjePdRPqUkY
zUfWhk?BHgww-Zd9aC4gVgot@k=Uw)Qa!uCQ(_3?^Msmsd`kwixRm3k?R~@a&=Gmh7
z^T6a!$zPu@zN@nEtK*7u(tRxad&`+U=RRG$gJrMs(ckw!+|%FOVw}gD{cdToRNBUA
z-RVm&Y1v!kFY~C1IsX2}+|6n;e6vo?5bQ|q?~@4jv0#41RgfqozO!2Yoxkky$<+(4
zZM$#YcV*UOKKI%CZ)TmXS3k;;cy?RN!-_Y2?fNy0-%glRTO3Zm?)$Da^UX)kH$maQ
zKB}I(HQ}J!jnmm)?{|fL{`6*2IA4<gG>5fn)<+!Hs?FcwxK?fV4V|kDErFBkD$`;V
z=A2>sw~*t5#B_bz@7))^J*o;+na%puS#L|x=iAXG%3ogCCPh!NJ7L}uq|sN;8q0Fy
z$T7B{cNSYuZ9jeJ@rQ<1wP&fmKMLosKEC@%^A}q;)oQoP-+x>(?XP+pr*>B&DroQJ
zw_T+>|4MT1jaz<CXpV|a;EMY<EGt@$Kau{ExT>Po?X&NcmnDB@<=^vGaqYD`B>(YP
z@$|zxSD&A=x_N7g`Jd@d-*0EGIUrPDG3|GKHB-6#ZS($y6Qx2PPM<k;O!(|2v&@)D
zGQ(_d`oYOB%^q`>m~#Xz=~1g?V=0=MRXJg+@|0A=m*@SxXL8+(nZA^re~RUyKC$U*
zop+q>ZEJRYp%Z?-HEXWw-6M6^1sUv3KV09{$Fk*3#MJ&b69f`6K3q>eGJita_TuhY
z--G5_OsiMP*)i|0u%CLh&Gg6pvn`UBzV0zu^{~)^^M7xa#hua@+s>c;s8F&;F}vfn
ziO7V=4X^VjM_!1@UVg-}SeMPA;aSufPt6nO5<{e%i`UM5-Cni4wqAQ-ztiuyH@2_J
z<aM{a=)EdhU7i%1S1V%v<b}npOP8Bp^VTlQaB^Of7N?_9FX3>_Tj<Y>t9>C8>L<ya
z|Fg5cV&TJxt`B(`7GjxQMaRyUw-xt0MMWM`5c}SfVx!GDB|Ym>sV!sXGQYjY%r;w^
zUSKif<ZD=H%id_r^R{uJZNXvI?_F=+Tiww<wD-}v^PG3I-({YE7$^8nw7f9vL0sYW
zUk`80JK<dXbdJqVp<VT&tU=*DPoy2)oOb(eej&9sE%=R)?8}}zjV)FNHT(tF4}N&+
zv_W;o-482UT@}u5Q7GErZlWtXOXjJqLxCRWwkFS*H_%c&@OPfd&8c#J)j}s6!>ic7
zT9qt)E@=M3Yrbx|+GW$;mIIq_{cH_LmQ#y*RspWiYp#4=T7Sr<?emJ{mGc=-PSh7)
z@Y(uA^?|hYpX99e8w*@)I`>{usP4kg+VevE?;0ehzL9+Q=iHp|hvAXCoDP^D{$UrG
zcE5U>(dG~Om)K?qZQ>GY*m<h<Z^D%+|H{*O&!xLc^=z^Cl>eY{Y~%ka>vgQ<6HmmM
zoI5{T>GP*U?=I?}%m1*^wcauM+ijf<ZMOXz?smiqZhdiu$$Im_k21xdg*u;JGCA~L
z{%GENx%#LHNBLjR=i8~LVz1-D`&|7k)9bDCze`5%u6ix8?X|%k20e>QPC{+s2UJ&u
zKQgH9JjJl*sc{uM_lGp0dzUIVvV7RY`o3~$jIHfimOXwtZL9eh3Yk4_8SMXFZ}K4b
zx=m1TXKw%d>ZgX~wg>L--sNQJbo=`9jmuVBeu;m#O53>q41bpo<KNJkKL7jb9M}Cl
zBOTyvr@P!ERy=Ihl{aNCH<r2>OqNwlHE{5M<>Pwl!lC+JpRA3a71X-c^<3#(mAw9(
z(FKRlW6~+ji~DXW|NFH(&2}x%LdEt|DlPTC$J<&>_Do>B$NYEdxhY>BUfLU>>hnXS
zkk5NT=p?QFBae7<dR?aZyj*WrDQgt6Z*{z8>&_dx+a{%CiY-!@v$156&qH1l{mt#S
ztu$Wn2qc}py7`mj*C`b@8nc%#Q4d~zi+9?#jcmVnDe5newAa4&`p<#XGiqI-=cnI$
zZT$H8AHVt~KJSC-vY6K#T|dEZ*8Hc}?HcS2Wwe!pf<y0^^f%p=<=FfB;hPUfdv`W7
z9$mbxQA6&4EbF_d&tDep3h-pue*T#Ohxy*erP1r{UdR9T&-!m2dLZKQrLx6-rNuj*
z`OZI(Vx#UPp{scKO76sf*P^LwlD!fi^Q`Y!%FN*M%0cI8ZhZ<nSAC(w$D0CwpSWz&
zUH)Hae&&6bqqatuXBr;e6#4F6cb=B)q9R6Z_3(n~tj5C?Umk5L3S26g9CJbL;Krzp
zo6Kg$-BV|u%6D*H!qv9QtlYn>pMPxMXr;*2|Dkfqhqe0eu67q~bt>L;zo)uv)0{cJ
ziR|U|m9nPn#v!cJwXSB>PgND${_}QF{0~3LueP}dJ=58BQfFG{20jx1nzc0~s&{)F
z*VNP8@fCaJ)8+56Og=luH!)=<%k{-eS=dr|F5Zw(6rP{IURFZ(ThQ7V@s~Lk_Y(a-
zgjml$bYbPOZI@T6`4pBG^8T2vkh^zvZtw07!bLrGJDn`=-nbAv#r9f9l3o4s+Ao_6
z<c}&uR~1Xe?P)%A=DDWf^0WRoP93h!d*;4s>hoVLMG6nOv{`%g)TFy4k9s{`bMnD9
z_B%o@3yz)+Kl&+iY2`e=M#HyDY9CHaky@Siq2GlebJag)>m|>$zcsWQr!IQ7arUa0
z{;zyC$GDqvNgEw0oYmLCqPHMFE56b!v_5B+^!<w$W}JPzb%ukrVC9+_YO;wL-+Etu
zn`SNXGAAmjFgE|gL5l|SluO#`_ikoSuwi|#V>^@K-c9KP@j`q&o0eV|uIPO*x3HGU
zazerCdo#N^E7Bj#-J7`c!Q94jvDn(?pYwFz>sWtC`<+yx{>^ifQ<;E@v*g_;3{FY+
zJ(l0Azq2A_q2#U$cQW)Ji9C2J9#`fZr6RJt|IYW2zjxbjy?Qh~dWP5>o}C4OrxVP-
z?(pSZU@4=|e&)8Od57c5rIm%(M8s!UwXOWC=4@j7I{ECDPx`IwU%0Cxx4f)4`F5}A
zrEAB}Pn9-2_i*91+bJCTp0Z?0^~Y8{-Y%NDLHr_@g?eNC=Kao_W*A8?{OtX5Pe|q_
z`)!BUa-XoS{A;E!|D5ZNshLXckN9WBdI5`-zfHI@F>tT)NhfcowQO~}L&a~sYhd%-
zAzJ-@dYj+*t3Cg3yt2Q?S-+)f#pl2`+gi`-zGTkYGRt?P_rF{23vUZ$<!=1GUwdze
z1IGv5H=8ZyNu7EBrGl;gkT`?>fz#T11m-rq5Lt1&gnx#))zcey)-RlCQq!{XkF1W+
zrY;9*X9?D{$shTSDiv@vyqU$;am6jv{=pt~CV7`Eex~$}E1x7+*7_<1{gx6~`Il$n
zt;53K1XiYY+t!%3D$Z*RkULP#@ImcX{_MMf$+ryh?fgHbFv<K1y<A_~R)5f!*LV8~
z1B*u|Ll;#P@h!3YQ9WPAV}B{z!g>AYzh(Wou<n$2`qF1VCA)jH%XZJzI~0~*5&l9T
z@TgqiKR%wfrh76Be5AbEwm;mGnbxw0L)^gSQHt!5*4ts?Dv!3@<&bwRx&5-sW1pZ(
zA49C0-@cb!NzWEm$6V^{w^Z5Y%9K){KQ)i-qvyd;ap};9i#9pVjy`36`R6OWKCPTT
zNm&U-{vYE@uf3`h;c2+CQ!%Um`Obw0N-w8;2-@^`=^sxCHeJ1goi=(3m##9$On06T
z^I%uQYo>Ll=Q-SYvMWHHVQcgxj%9{3jwMJHr%N@9p6L|bBYE>x<jP$sr*4U`ZrA%#
z_oseA-o1onE;edsp7?N<?NB(t@_V(>%zw4_t>^P-?pFxcW!k>{<lCqP$%j@k=(uoR
zTe9w<k@=h1v1&)9{4d5k@-5L}&$#f0OLV41{LPtfPIexO?VbDS)JaFfc(&=gI6kan
zcaSf2<LnT4Ta$Qjm51iGlXlTRgEz=b{=59fTZJ=~lj?ssPKf@|3vRG{ta|d7^WT+8
z`2w1)44V^=Tl?F-_}Tcf(`b^l%MnI_m%4K%d-AJjoqa8)f7P8)efi0gw^G)=(K(cQ
zbQ+)M5^oC)Rqqm4mP3bkIetz(m9;l!<=IGm>p+c~G+w2&7xA`hIZJ=HU8o9D&zftq
z`;_M2eXF8Fr`HE28E$@`R^%u5aB<})sm{`y58p3bmK|~T&GTdGxmD&FE8Z}8zfHU(
z&04Q3THN~o!g>bH>l3mjGudunIb)P?(so+wkHGgVUoC~*(%imQoT{1P5@KuJeroH!
zncRiT9V@0xsF>E+@9_VbbmN&1|CUL&tkbw(zEsXm#COYi1yc!u`pidX0|aCm{4Pvf
zT;=^@VO(rR_lkQv_wJs~Diq_iR_@^SPHo0BHHY^+SubC`Uvu}wgFkZ_TGBVMn75>F
zV$f_!-_)9#WZrb}pp;!c%jG+Dn^vD&Wx2Fr1IHZ;G3n{gmzUl@$6D~X;)Hph;Z061
z*4i6QTTR{@PIHS5m0w|8TClvn=gKXg(0!NZck$N*+w2v1@sa&OxOuDO155eMTMlmU
zt=~R*sk(~Q3z3<(TxUz3=u73E^|W<<MpgYEn*jfRYtQjKdVTut?*nx$Yv#SW@%^%=
z*V{8DKI#1T&HY0dKkQ_+e>7w23u7;dN3Zv0_pZ77ym6uEgrp5|Oovrh%Py7?TEbQz
z(ehH)=0Q*OnIk?QF0DGE)TUqM&fI?>?m%4U#_;eGiJoIC1AW(UfB%tvQBODRrcEK&
z;%ud55Bnx4o=j2}elTIn>9Xg|b5{v1?N_xBxML+yEq#&AM)-`e=DHULoGZ*02ghzU
z?LM@Yb+!;sp0aSu^zLm-cgGdQ-2BXC>v&T^wSI@XhWi>8Uh|)(ERPTDbC;Bz?mbtH
zWlH2i?I(#E885g_o(S4}OLP+F)#(`y;=7zS)jWB=b?dgD?~2R4<qH%9jV_t?b1`JR
zowg?Q;E67dmVgY#wRaa>IP^ZHWn0<itCy=7wM3_%4(&N7ePLxrU%cB*qtvn%KiAXg
z#&OFR>AZETH`;eQ@%wwu?}kcdypdN~0<HXWR@*L^P_=(oOEA}gean6LTd(9N)xA%1
zQZ!wn_hSQV_4oM!dUF-_#7yyiUv+Z#3d?UP8(BnTH~V}yN?9Lpk^AS?Gmp7N_qKEY
zo2^~Ntju-uQs}m*M?OXQ;oDCdIS8(4Yu4*xc@uGzPmAv+Gkd)jAOG<Kja|+UW-j?t
zuJQczyowHKlf5EZ)5V>{9$cN&eEp_~+ce1)|NG05%T#wHiEj4Z@$%@MYw`Xfv63r=
zL$^;bbW!n2_%?OpuAh5My;T?P*^yVI(*FJI($CLo4>ekpPPsVyoNThT@&vhs@~?cP
z+cvLc7OOtZ|3SpyxmNSRwEB6r_G?4l+`bk1?Tg(**W3FyHci+#Rq)G}g_AFN_15uZ
zE%_6&F=*eOm=%@k$`2OBtQGlt;9K3F1#2qOgKxOhssH-tyP9W${liOBZrXld{%rc*
z$(waw_oTflnKNH&+R}3+lRAIY_xC@$FDGArT2^@P1}&#DufR!J?>N5Bzw)m<#kO8k
z?4Q5t5yi{15+}Co*D&U;t#;l2Ha;e8`G#4xaq(x@ls6?<i_Go(P?XX3r}~|WfMv($
z(=E4u&+Dn$bYbe-DesQo$?u=Bta8!U&FlWYj$C@ocMi*|%}Gm3wizV7)zzFQrrngk
z;PCIls;ar$jVh`nlR6K36|hYeIxwaBrtXLEMfLi|>-HPzAHK8j73+G{({bK)CbRl@
zSO2-c(aP`()5pYn`_IqfW?t2z{*dFIr`Vp!YRg<js&qGkdym(;%v>Uu+z<S@>Cv7m
z){}G+Udb2tc~t%XXXt+Gr_Hk!Ig9i^eohmw7bu<eWBc{|3+?>nZ~J2A{qKDeGf&sG
zssA*yZFK#Crw`9OWmLAy4K^xSr8(ofPT*w5&-0|d)LYKc?o?pntUMdF^xBGz{&MLG
zv6I~bo=vt=5O);V`q-<rarM-*-3!vZv%cm9yfrSH$K`pCxiOf<Pw=&$;P-#$rH$Xz
z@T(`EUV86bS_;2qd6Dzek9jQqhn8LvRA?7@pX+at-g()&UTb4T^f9ZIt1O<(`I@w`
zV&klL#cK1Wy)unYeDm{%qnuNEu|&#K<tMt^74JF8>-!$evlhGVd`4NUfJJ?dKsU3-
zkt3(V-TUtA-Q9k>p>mpGfB5A|R*z=xj7$19<?@LgwWqFIonm|@d3esTe3>otziv#6
zs=PdF=H-oPPvb9$Ui^BzzGI(?qTO<b)|!vLzm@*4cVjHy#cA#L>y*Xw&q;Up&HQ}!
zdH$5!FRNA5cCI+N$m!$j^D~Xk$|@IGcEtxfOW4m@E~#6q;j~3?$1{f=X(pH1q<6N}
zaqM8*aqOwo8NJs&k5vrx>^9mSms!PmOh7(ie%6{-%C9x;19X;#6zFZ9<9DTAI;vpv
z@oOnlrq4Baa{hwduZw2l(<N?RoRw{+Y@Nb3qy7Kgg45^aVz^hV2$km%3G{sJ@KZx;
zo1eHaW7iuMe#2F6*C)4^SzfHVt=irnvbdf5F6X2h?-siHU->=nhQnI5U2jWVRqk^L
zz4B1X;@H$MEB0ZS%Km<zJBz$h=IuB<+oHbe%KKZ3E-33J*q25dEeu&w&TYH%_9VLt
zc9&u|R_pIQd#y2W$M44P8;m**TubZy|7K@>g1{bDzx%$49Lec(3WDr7gugv@UCQ-l
z65sBCcN%9O8w5W(J9GYq6UU`<pN0Mjjz~PaVbg{y;zFeh=hu65?B3_{>J9Ikqq@~U
zk8@rNR<F15+2A6kxayit=X2j_=XmxC@kAM|W}j;jk#^7SUHw7#sF^eB7dp&nET5e7
zu8vVwv5Dbrk&kkFU|L$Ez{42#xdE&x-Q9PbwoZs+)6Qa@p?LbthItc(3msT2O#d|5
zt$*mR631_MmhnZmN$o6yXH4_e9=~C=<2CMn_x$gkSu;P@U)GUP-tS(UoWu4!scHXX
z8%D;%OZGd9^jyEcP>UU89K*kJiodMc`SX_*$8S{LU9)EW9P3i`=O4wF^c;W3zQXb6
z>Sh05-7q%UuX?7zb8D5A*j9f2rTXzr)6QtQWSh^ojxFBQd-u?drDcJ+SAsW{Kb{(9
zovAe^_utpwz00=+)H}?|^q>0w=aN_3B%jxa*(WTnk?`61CB^Gmk!hvytIuIKmt6j;
z>^UWRM^wv#IkVGWs!Xn`I&k$}YRUDtS8hGh{rR!qX}jtJ@$P@OHR9iId7rPU!nr-E
zzvh_Tw|=XivEPm#IrfLW`bT*8`^>JncU|*5<<^u=Tzq@)iTtmB7EX<4t}i>JC%*UI
zhkmE2aZ>NqI``M+=^q!GFX_gS?Z6wkUm&r8<FM7930L;2t1R3rus!|K&Uv4LHhp>~
zwCA4so&(*yTFniv|E1IxMd<FjJ)Pm*%ljWxH`N{DbdN}1-^N*Tc+o<pHRp9dMMdtG
zIU@g4GI&?IM}SP2xznX6<IcX8twmew<G#POdRJRCf#*Tbv($dZA8$Ed?=L!Zc3IcX
zasjE`dS>UkZd`rZx=QlfPPQi*oA^&}HIlXs_H@c$v1O{H!M;U{O9FSTnex}A{rkzr
z4n8)=tyf!$H$1!ZLa9gO&#V?+!L-Op`mRZP8Gf5>ILvks3=OwCYAf5@JX>>qU7>kB
z`;&&8+BHWvCjOMIu8O{q7J2;s=CyBHOCIxmmb7~v&v`?xq5Sl!{HXtJO-)%FqwH62
z-c(T3xjpgHIiJ7RJBxpWX+Cc2XwccXns@E*8>yS>?&+S7@?KKtsla0L>gg-h$t*I9
zHMqYYI;dy5M8&aYV;a}|1Qw@*KMX(EUu%6V%UVA>NFd~T@>}U?+pY;u^L@8{&#4s}
zmBI;&e!rK$sT=28B79XeH%&n(YVp<RX<1R<0@9Oi_qxR|Z(9}}pWc=Ew9%8V$J4{4
ztUCVPrnt3n*Zw~EW@mXP<3i<5opZ(twigx7Pj0@e@Ic|lg6+8iFBa;&T-dqj<%)cs
zJ&wE#cApPu*X!SKie18++xCA=Wt8sPW%BFx>}1*h{bb{jiM8hK8=nfz+4^u#+X3c1
zzvZJ>*G9%F>))<1x~4YKs_*B#wFwt@{k@r_c-QXY=A)4Y=U$$9+cRa3#^skkOz-cR
z?s50VVdr-@*1b(OOWJ-kGsRq>yr*jI?cHUoe^$m_3faKD_4m(dcJ(%H??3#%xNDyJ
zif;*fj?E5txe&E3XEEzF@BBYvOEbf6DM=LgF{RhP%nJ7xIugF>^=CiR#b-H=?>uxb
z-%5Dl^eH0m1A+^dD+=9A*?wW4>RImhs*xF<wyV@V^vym!U3_7mcy)@_)E>L7w{lf(
z8n6D)UcI*MhU(<iZ`zp3bN?*SuJ@2XqA~TpLf?)+>$sVZ;}`9n5b!xD_c!a>Z}Y?(
ztfyZ8oz7n%QI<a4P2=wwt2>@8_at1twX!gLTgxN-HMv<T`@F&96%X!hdUkJ;-wE~2
zoOR7x<gDGCeXr|WTGO_NC$H^H#TTm$H|Mt7m;|dI<G-r1_vVDJOKzn}pFE}ze|7r4
zdaJD-y;~Rd$A2tdv*9E2pWdW}`;u1OC_Hd~mHmfR)9ZhfC%e_p`xpBrNa69#S$5H1
ze%?RHTqX2jz0?ZfFTtDVO;EXDUwFv*<^9+5Si`tt7V@yYVz6Cl%yjC4=6v&g!cXEa
z?z!^O(@^l=*7K`&ZZ-0IbS`;W@4OGE%eO?eR!**QuKyRefb*E!^<Ivf?Qz{YTNlrI
zFo`*9<;f>gK0H3dt9EO`)zzywy6-21m>j*#y>N;e2j}HtBQv)b;yHI-9&1~YnfD|6
ztVB}%$wGZG?ewQnXSZKG?s$w-BKqc?!jhV`6SJP0pXdjT3<bY^F8QDB&WB}NH|@ON
zYIFDFg_j14A~NUHZ=8`PknqE8!O_#M@WGtTQ@*vjPvYx94CdT^wz_f=fBGqxv*LXd
zmnFx0D=)tKW+z*WW5wE+A@{^Cm~UNgll;0eCn3JDV{YAcW;3-3Y%IT$kD6@VXXKW4
ze}<dKe3tEon{J=@=5*cG<-qUUirv*LdYU_y)EB-yxyW1U_Cf8br&8}riS6Jh10{Q_
zPc15)i{dAw&AU-9Dd}-Ot$hF6FF9g<k!8E?F7Gc>T6g-Dg<M?Z4d0SGd13s@Eqm^I
zC34U32s^dxcW7Frt^%9E{D~prDl3&2OFvxP@lUhNTE#g?$eyE!d;h~Fo^@F#%}peQ
zuH5P?tY7r(qs;1g8p=DJTUZ$;E~`!Kd9%^#Gh^(AyP0|0%{XVDDD8P=p7d9Kh2n`O
z?FpaCV>haMl}_x*DP9`pt)zVK#Al~BA#W2N7yMR?ov`ZfHBmth{%jHPBdj+*$2{WN
zwuAH0)9%knH~D1tOXl6{`aE+-j>nD4goObNRV8nXWOhuePxpW3^EtseZT*LX%L8gI
zPpSAP^kV*$mmyc*3O?PPxOw}8jn|`kMZU!wzfEe%xcq>B5z7Q&!TB8jp8R6(E??e}
zwM1(2gQ8Nd`%hnH+FsSZm3v-!;>6$6ew~zY-S=(p{)IQ~ig(w|RetmL>+y)oS1+)=
zIP-R^{r)w_18X}H<R%+P)%$5LPf}hw<w(Wpr7|Mho@Bk<a!+IPmXynvn%JvST7z#0
z_y1l~+`IjOh9zg;*Jt~--dS<&GmFxh-A%csD-ZCpw9lPppgm9a(x0ty5tkU>HWy!i
z`88_mHjj5w(y<SPqcUpu>FCt|GW;mB>dXqSj<0w5?^e(2ziJ;9)Ewi!Eqc<8dT#lq
z7%i@;A>NaO6g@J^mwa#%nD;Qtbn%2^e4-BzM&7#^@npxAs=Qg<cRw$@u5|rRP`mM#
ze-GqWzAir`FVWj}<A~7OMvq{(=R!5$rkz36Mrjuz|0xeSW-{&CwP+<f!@+xVUb-IR
zn6J>0JCQ4<Xbq>f;O(cX%zo!hPwqacTQ73zZEgRyZz``?OgDbizu#diSb4_u+Afa@
z3EiLjCQUfKjbGz<L`+F&?SgYx4$d_S$~F%D=~vIS>5kJ)(RU6rA11#3<$p*);CT<1
zy7LLgImMdicE-=<t*MW{|356_LQkFNhRIv+<h_+$`S+)7<Hh|_%o}dA%4VBNC7M`@
zsX3pnXV<R!U7H---?)}%+oteG2HD!i4EfKF8E=~XQ=ajiZu>^Aq_2yN@_(L`zH=ka
zfTQBeda>@UNn2m!CF|HdNIf}m%{~La2b~v$lg$p)A1l**`Th5b62?11g+~t=UoZFH
zwLD7Mu%~}Q>Vn2qJ#RhvXZ>@Yo4DSs@}g3YV8l(9dFu7)>gOZoaJ^PGnVY#wR4Sq%
z#Lz#*F!bE?4Tl~^9(Vch>ww>#vSdq9+xFc29mOYmZtnWPD&kmTc>gqm%k_m_>)J0(
zZ%~`kpxE3ZwBw%Q)7hL=ZOl&0eK9i=IDULAyu<Y(|DEVf2kCc9pW8i{c4Fsd+jmX1
zdn0Y!^wmoi9qs&;RDX8L<W8f*WfGOsBVy;7^Q+F;;r!39orUeEwXD<LH9cyp7R~lB
z*D>d?=@4gSQ%`^VZgMV*db@Ks_Z*qJHF`YP^B+7ZsDJWcN1>yJh2_k$qHA{~>(8^#
zktry;p=1)O{(MnkU0mjw`#wtlTU&q5;B*iuFIcvD@ymjUS1E#OpJvvt*m=f%YS!03
zUwYI<H(nPz`ZAzo(aXOdKRej|+-_y;@tb33wSHUhN&Doytgmy`T3>okafoJ<O)Ts$
z5%sP*?eJH9>wnuT9-hYAbJcG<l<YRN@>w(Y;m*$&pEEm$f9zgp*llpv=BtI8_vbW)
zK1n5JKE?AnZ94<buHSx_O+ixSOTC0B_i>MKzck^LXzk-C=B<0Phey}pT!+5+iu<<K
zjcKor{8%{4L$ZJ3*Cn@(e&(8X_{r*Dm%^9d_$hrWS!<2@S(}6WAI!U2e|4>tTRi_q
zwCL})dGh~cgB|uQtq<ScH}PYR?|j`~f8IY~wDtQD&U>XZ)>D!5i~o@jYss%VZyz(x
zt54P0t(WJy^m>5j6RmFtDmy3tnx3)GiHCQV<S%F4B@1#H<xYtG<=->&K*P&tieF9M
z{8wFeYz@cKO)p-5Y5pqepKN7)N;9&hv*yt+nc&4Q)^9o8zv;Qv{k<m~`(A41NU$9F
zZ+ZLU9ffyo4erwq)acAekX<gld~xSbMWZ#W&#Ob;*PAfqD=@#EQna!nEN$7};GFW+
zs#mRp)?c0My7Hf;_YC$6(Ki=5dClltY?5&QlU(lWYZHAsa`@h#7fNb8oMp-RPw_|l
z#6H(MFaCI4K7HoPg)U8YaJ$LsAwzgdYov~Lx&E5que)}7i|y|2Hz_Lfew^~#_{41c
zogaBN-A)#pU+*Y%yz1KVS(#7OPnB5Joi%^2dTH|Chm6^O8<R9|$W^FL{+##z*4k&!
zcRtf!5O4Z7{L1<5Ul!g?*e}ptfA5gi1*X4ewUsh-r5jADHhejjzhX=ML<S4>#?AZn
zbFC#=KJrfA#<J{E<;qJbD>Zl7`>wn1+~%WK@zX*)CT6R)<KDLy>!;+qeCc{M_uJpK
zE=utsa*wZ1(%G_PUizAo?h9-6zfGu7KJg-W_1$HMw`VK;ELeY4V0TjUAEr;-?{EF^
z44+`vp~<5Bpy0iKM|Jc5e}#=lE9W0)e<N;k#Gv2G;+@@$=5PPo6Ztk76eXN5sQ#4q
zv(H6OS^CwqyhBrMs}B9%Z|8rqzWSNE&LIQtnU&Uo_VXqS&oe$(bg9B9`czrokCS~-
z(R)&pBW<cR4Z4gZRxp2Aa*o5#*-BpW@sGI%hqZ&!7C+~76SLJ+JGB2>WN&~$obLSV
zr$1+}O<nt__Rv#V$64Ww>5np3#(4+lEEoFd|MrX8j+FXm>Sf>9u1}Koaa#30*Q<Wk
zqnE7#UXv%atdEZOG+iHkW0v5Q2x&w4#FK(fhqZ<7@4R87eLZX6QS;lY8+m?A>RFqU
z_rT)VcMo2<n&iiktERqwq^kWX**D<LhlHd1mYu#V%P&7uJ4`BFC(ej%M!#Uj$4!A7
zYoapeEq6|^vHqVCU!jtD>^0ke50(kbUfFLDug~5$OZ`{DGM_6pW$#R7t952Q{q;NW
z#stN_%OzU*+@JGglbNeyoZtBFez|dm!>i2i$GbAKYEyg8>@)1WaEf`3zSyQC!5=p>
zyx;!t?K?q>vIjR*`+}zMNY$IK4AGkY`lQT*GqF1@XCJ;%G&k7OXu}144`cr~0lSm$
zx_d42nk`yUzi-ZcQ*M={rR&6sTDwile%|su$hrDv)s@Ocdb6BvP5E<LCyCK-@`b+z
z_1a!WtGFj!nRv1HL!irlk=?SB%2Yb#S$4MGFDUA_+xkR$R$@x_v!Ca`xk#RrJ;d~-
zF*fwkwdFS+y_5Lb`!QnXtS8G1+cRFCTwHfutaV-mv{h5Dc%td|a%i(guyoevuUnQZ
z`@Ba$b#tco!=0rwMN`a{s;hqwblzIEY35DkH+Q0Ap(EF@f$L4{zK8!{P0K1fbLFiv
zhnXw5z0=30A{y3U$6URoVA6SkC+pnwJ9!-MpG|Dxp7!wAy_ZpDbA{F>^gCuL)z5go
zC)MWHl!V+@LFePy9!)lyyUOa<&zAqyuCp@J#V7F?vn>(icH>YF((udS;g(h}EMFou
znMu-gqVoOPzlPUJOvN=lrX_4vE_f;A_>K2%mqdD0y`q>H>*CU=^0{&AL$kY8d@jA<
znt!3`_(f2&!^QHJuIHQ9djZqWuUhW3s(zLE#Jd8wWHtY+nw!2R`s`j`_s(*O$hEwl
z77aIF?JV@LHs5<)>7w(>X1o2u{|@j=Cke}MU{i8k?AMS2Zg5<=^>lUKvs<@)=X=jt
zzf#a4DYSt*c!v(FxAV%CQ=~=J90hJGO%-ur5csF$_1%=&?4)Vuy=P*RK78Bfu6?*u
zrryOjXT}NhB>ykBB-g0UsFvt$6svl`p~9rP<xq1%OZb{iTF(Dfc$f~d@ul*xNKb3x
zO>}9_-W5D&8jsOJ$IlTe2m2oF)~&S)`u(|@Y4KbQ<{NLD`?j80VlYd_deXwD&1?7k
z-M4Y&@dIIO(KodVXKbA+*<fBgch16G3H<{3PbmfU*Q9$@-B#GjpD)yW`8|f8$zJ5n
zpV*BLj&1m@cz3efREcBmC%}sb%J@xv|1UhZA$;+k48dK6jV$-ePCGUgYjEC?n{+H^
zZ$IyX6ABAY?w)j~bKR4ztQ~rMuGgJkdOKV+NI0RekY!!D$IrB;c@G;dG$@CwNifyb
z$ZTi&HCuX5y<EoOxqiy*cZ6)q%RVekh_?~(jBd<tOO>1~{PpN8O?BbaHeSO|+fsdO
z-^+F_-VbgZT${a2UB<m6QqniX)qG-JL|#Q2!^fFZ%0TBlSjt4jJb3aUxioP{9kY7-
zZ)Nu5z1&U*PoCT|dGo8YEEaYTo-|B8EVgi^m8E#^=g;+C$^X)XB9nEttn*`N+F`qP
zuB>nS;UM*HgNw(~uFGhBzb@?izJEUZtCRb$&UEZraMER8fzeO*qG0RACYnC~IoP!7
zOIn^PUkcTc(q#sXX@B2)_1&8k=|9Wg%dlPZ<Np0qqQ7zB>K{ih%y6A?Wn$HX{-tKK
z1%4!-it=f_aN&qfef6|_`8!c^9JX#pd6}o&yww^qM_!Lz`*?`8Wa-g2j~UlRfGX(H
zfS+&vtcm&hc<GJu>Fme7HG>$U40%7Zosr_>sAZU9p>U<ovc7X=t(MbD9kuALng`Q*
zHZPtt$#upF^%Z9fO;g^;Wd2+5X6O1de2=<bGxaA|aW(oChn>6GS6{uW*xbEC^S8a?
znfn)(^vWw8w%WYc{i~ny2Q&Q(ewx#}(o@rRH67W<nCbbo?@IR9l)zQ>=Y*ayewp_!
zKvDI~5uK9zsZJ@y72;C`xE<7uKJW`~@T)1G61<5+*zvaUd)_D?%NM&XdvvEisA&nA
ztD?6`ZI;F^qagKFdAVtgr>p9>R=u=ly!!izz=by6Cf+9ATYuRarA|$fdUZbJXwbx_
zwo~Pzv$s#PQd+50vZs6b<J%Fkf>TW|oOv11Is5TMMYE4@?0)A6Rqs6awDomDAYZ46
zrEw|Si8~zSWs(P`ahH{RZNIg>C(_QHZFSQ18#9Z|19X;dDcZ}BQ^=9?@qyUY=k*<2
zKfUgMZoAjWZ*-2`S%-g%(WR1*s`pdbd0ud;sd>n7C<k1Tm)r75JY3_;{zRReybbs5
zmrYxyt9Bw_%7y4%MIYCMMD5<T>3+(DKglUk#%Ge3C76jWQr(-n^52n-?(PTn2Ddfr
zVv3n@B(*qDYxkyp#@pf{cl~M~)fT_n<}J6f{@9VQLv!YBWMHglJ<H*A8@lZ0zQaV0
z6K^<Y%8Sgr@y_AtmXQ1yHDzUett|!}dnY~loU~M9k1p?#^6M1~l_&I0+tc2j>_0<s
z#r*q5&Qn*XKQ)%(dQg?UuKmj58w*M-mYhC&IWw8_qiK1M*ZZ$CKNjCi<vAC1PH10(
z{VnPG*@e3&wz|l3^cwMeU#NUqrXzXHf?ccZ0@7bS@RMA*b>^y?<@Twu`pf%+yi;EG
z-VfkBSEXjDbii+G@H9?#7Xxqa=S#gN%ZH!adg+s&*_N}9kMDd?w=kw^jmi6?`(_L5
zl7E-)>go1ABdH?zN4o^qi=&xOzmybaM27qHd)Hk_eo?R5<1C>skk+mEdhWNsx@!{z
zq&?m#1g^NhpiO~$#ZA#X<wBL_GuJcIxKv!`UQJf<;JuQw^|r(+f8C#Kw$J2>HK*7#
z3Lan+*UzkSxBV5atox>^GIY}4CNZ<K*>mS8Ena(*b(4niW3I4MM=u{+#6HV6aBZZ}
z`Pp>^)%NGO?|5FXxBK-@?DcE)IR#IiMc@8=rt|I2RbrM3$_}bpzh0{Z@!wij5VrQm
zrtRNPHhLHz3v;`0yW(o>UXAd}xnG2;U!Kl<t^Rjo(yVhfjT+?>wbx_{N3WXtdeQsX
zC*S^@YKooKai!F()t2wWbieF38x#{ZYb$L}&A%U0Q}R^p>HC1$IlGJMUm1Sfb~mu+
zv&vP;j`k}Hw#2ThHBN}xDyFjknvX|7w&dgJpe(^7TT_mTr(fM1waRw>cC&-0=5+pK
zXiwX@OVzlj*`D`I!_9enO|ttez9p`0{$%v!W%vFY^IqILns8_8`Rtv?Uh$XivFp9=
z?fz?HgG&r=+qLcaeRbCA##?syN`9$-v++6eORe@+nF5UhjoC805)Zz~TKD#_X@d5y
z-|l7I#?cc?oXxH~|NZ^!-rAkhsxwdj;yXWExZ$2{#NO&1w-}UuX|A(++41k!mY@TP
z%Pr1Wx4sV-k&n5dS#ifS^P=Bnwaor94gn(pg_Hvqo4k*Iaj9xK6Z$;nr^3rxrkk&-
zC)evAjI1$v6QUXZ+NVq0DCb?Ix~5+s$A@{UWt$JatvjW@WWLe-4Qt9%6AC95#Lnrk
z`FvM~?PFcBt(k#y+6={{iDd<;n`@NU?G|65eyYg(S3{KTti1B3mTz}^1B9Q3#bzw_
z+pbu4ae3J8-Yg}dckgcLZfu-2H?Lx;+U7XVy}DoOs~o+bUv6C@kjQdBSbfqVe#dEZ
zji&lfSeoB+{M3~YPw#{&w+k1Uay-48^`chf>^h4Tvqh{c*5+*RZn@CB{^Yc+s}3FR
z)j7ClWo}|x<vo#^ic@c$(Y*iZ=T!5BHFi_V=h!CJ{%ySW_hOsWxi2q^{XKS-toyz6
z_cH5^+c>=63Isf<*JCo+R#><qvH4MszzxZn8;zSnnq&3)dlWg%1rk%GCAVb68G5$H
zPY~F8(supzOPl6RR=>XT+D3LWp;?DTS$4ZUuKIh<abEm+zfJXZ$@<f0F?ch(pY&{P
zT+DuqVOvdG<KhEia@#g+wBI;a{t$m&>MEnTees{qP4E1>v{HZK?Uwp>_A@4a&3?a{
zkFU7CYj5`US@S<WUUuPKXKQjw{SVM4f;H#j`R0G!w^Xv~-_j5A?Qi4cF6eihP-ETy
zbLj_l1BLvy)J;4;5^kM&Rxs^wad^0jZE0qJ??GM5n-@NJ7*CdxT{z!=l^_2Rr$~8a
z)|oSekFQEj=l^J*YU6foau*w0{W7-wYRn6LlBP{s{PV+tsrzaUo)_i*-;t+zLnQv5
z-R}od#$wOTHSf58GjlVKx8&~jvt^gx1gF^f-<fh?t8nK{e^A%ChVP_>r@)2wqefrC
zDsI*s@%r;R<4ftPp3u`lpI_Us$`nnI*>plshlyE6h&d-~VVPc-_j0qKp0zc>o%I6w
z$->j3S6TkEVJ?)L(KP*>(euK&AGr2@>6foRt~c?q+55*wR|-UKdn@;8-Ghite=MCd
zovYa`*z@BJw}0NUp8JKl`r)nqI#)UNYCGtroiab!a_VHqp^dALJKS&Bchm2_%f!of
zx}TW4@k&HXI_l3|xG(knoL^@iygT_j$L!<An)+xvqiP<;%XP-KZ>N8He`?G9s^xcI
zehUbHbGNf}=hwiTdbcK>^60JAm6-zCYy0m0o|mJ2-^zE&?Co2-OfEJ&bWz+d*0+W^
zz#+U$TKmS=yKi^x=QzNw=#vNDle9GL%)?JnIo%;0xeL0~gXepStowM=HKOO%*6elf
zB6OqE|JVBnSRFFkr#NrA^z$>D?Ul;7jw)H}=}o@fFB@~la8F?+!{seY-pp_mJf>Nc
z!S>ee+y2b+;)m>o+m-I*t(fAcudVv5vtaE)XkqQDa`*nVBYD@}DEWOT=vn%A-lr*k
z=93M6d`T<0etMzesa@}SFS+*w6olzdKNtS{ibL1AdcG$r>elCTw>eF?5uf?$*|%K&
z<(GD<-(;NHc_&67XwjU%moL5a>$vsn3D4(K6=zO75_V2GyyBGVsvYTeSu5T|$Eo{W
zRcoBb`=&|NZvOLg@q#uj)v+%pOTMmB&Q=r1o;}C(-u{11k0W;mginmMUJ&r({C}Hg
za>f5Yt9Q0noi+%o@7SRc`dWNt+tTmJ{68!>6Zi{~_*0m77tB0ye`j|p{}O+-8_Ya;
zMb|3+SEXv*;&POcvbdLa*859=cK+itvKAdyvvbr+-zUFgDB-(tMsMHj!wUS4+p8LG
zb8o*aY^HVRUcd9@gtTeWFIKPlKKXg-)085o9S4s|irg;Gf7ZImIlKNUPqEcK9k<Qq
z%avV&YW^PE-m_xCevLm9(o!#QoDpr@D9LBJ!LiWn#h*nXakmtH--x;9cV63df9&VF
zKMJud>BSP!dJ{$5J;E<IYz?_3CgVMkan?#<=K8A5DkrVvE4G=RI`*jb@zP!ISN__~
zzxD5C_e&uYjxW1<^xO=qVD|D;9`$R_hCH?Y>v%lQ?qbQ=P9Hao$BC~Ca+cWbDBO|y
zV6(AlT7)upLDvJ3+y{%ZPbs~6kdpSt=HmX=vuuvxiOx<BTn=_N32!Z0<YVE#a^CXG
zMO*7M4^?v6`~Q)Vz2qFDeKa@W?b8Y7hRwyltuMRz|9HCl(>+V&ncj;|f1VWKA3SAQ
zy{6T#V?Qbv&Hpn0%D?X%dk@Y!6#0138M}?w&mEas@bdh<o}YCYxAdiV%R9>6+}*!#
zW$n|OA#)X9sRdn#(!R8%wQu&qDTWJ`W9FEheiME<`|zJ`WBu+a(ib!%^>-es_lUWD
z?ryo<|DBW4xN|1*Zc~u?u<I1#dO5xVx%H|!o6g-nP`^?0*K!{tqunx9Z`In0(%=6u
zP5)E>ZC#6JZi?sssZx8484YJVdzZY(y2*J<XRb5*g>P0l?asWc8PY0YLGpWM{(K)D
zDx`36k_Bt1Qv8w4y%x(heLB5()29a+wePt#onr3HJ70Th_X`_$>ED<4KWYf)eP9x$
zkgky4bYf;k5?f#WgHD-Pi$inTi=T@L|1<e@=J9J`lUdgmOb?wd`{(4ZLyNk${jInD
zRy#LHdVTjaAJcG;&A%sl9KH6v?EcdWqI(W2Zm5~Id&AoQMThU-x1FZ6fPcmEn?^f2
zOiye5G@lgc_x|Fe?&ll5R*PIa^Nrv3pu(*3gon$8-)PI|t_}`!)s8N&Ul8`jaKTAt
z|1WC`#R}t|cREZeerqp$`;N!^SeM1d)|2eT-rKF^nW3-q`981W=lOT8YAjrJWujI|
zUFcp%^%&clye*mDUmkp0x?nB;G2iulJGT`7YD?Do;pI{yRPpA|x3yw>pKZ}QS6+M9
zQPjrE^??I>>!voZlR`5&)oho#O<hsHOHB63^_-B`z0p^)>XtVDwKLx@;3|>tE%a;s
z(kn&3WS<)=Z#4PDb|!<RcEw^7b}NCj2N^O(4H<SD=Ep77UKf{^wN=SqJFKYbCgc2y
zsm83)EL}?P4t)~L+i^nF;d1K|bDKxC$JsJpoMfM4d^FnBiDw#rC+8b!p1y<cwEvy-
zte;{%-M_h6R;Yhxe-ZO%{+xSe9JSp~=36-4*NALfbxC%WoyUsHTNZyadGmBjhx;~z
z+mp&`yf;5RRr_bH>9aXi-?~M6&P^5mQ(?2^z+28c^A5Z{skU8Rre*!X<y`#Y6Zd{<
zxDlT*<EELWbl#SR>j$#yD&L-~Z>X?i7xcYta$C2&-tAM0(X4a-UPXP^t8)pQr04Zq
zT>K1Qk#G73pS{Y0g$7?ZkE{q)UC(rP*MYOw9|ky|<KNoOw#)6!u8M!JN>`M$PmnL2
zCD+FIkJbJktA$WtgQSH}q7%2D`<+CM&N~KHt3Ds7^=5GV)5<$H@pjYBcLy)#YrOk)
z=BsIyu;0UmHp_Y=?mwS2nb&{w4zimYnIRT;@vFZ|h2YUWVXM|GTd>9<GWQLiY_Y;|
zyYK%x(wm!kL^k>f)u?u~`u~t#RQzet!CSL6=W=~+`N;D3{$`t?obQ(l0?W&qmQOqz
zDt=eB&tF+@_J#RN`J8kb>>sz+?RLwYcZ%<!nPSSa^*vGYnrEx_*9T@Z79B0`i{d_{
z@o>>KJG~W;FR|x{v#<E|Pf&(yM+`&!qmDmuS9i7^zU*Nqb&SJmdjYGq#=`zOk>;{I
z$NdY_Lx1j1f5VfugE@jP>4C{sX~BY7pNcjrB_3F?n~y(%OQfpcp3@;a-rfJ!t=NCw
zhtuRA`$h}RjSrT;yplRGvgSkmjPK`@|IPMe{LG*I-7Lc@G@s*k`Keb%qMYun-z*r*
zS?)|cJ55?tU)E|8r-)eOde4~^Hr+nEj-3iiTl6WdwA{FH$ClGOBrcxG5-PRxTybsB
z?(Djyn{&0wmzG6mE%slk;1-tk^7CgK|B{-C0bB3s-M#O<bXth((x`TW?2CWDwAX7%
zB|rLlYfboT=i5>{+$>A$ufGYHclEZ|>I>I@-IdKUv0ibe?7_cvUwl`ot&2!D&DN2=
zbG2Zl^TTy)@3J0<a4dIt*K}zMn^X?l4W12>3C0J~8qVI}`(3b~KdJE3x+~|)Kkuk~
z(a9gaZ{f#35w;(TZ<g$fij_8g*Uy~RSCh?rw4VF;bEX-GH=JGgl&>sRm|w@fVD6Lc
z8$_e`P0(&i;%<N3b9LoA53`;r%f4@rQ%Twy^U>zCR{4)GVV<2$C*u-yzjN#t;AcIT
zo-jcn=ini+`~I;?E<wi?R0M7_-)2lY*ctIB=1Yc2yTr+Uwy?7rCVx}oYE*W(>~;&d
z=hCQonq8;<OVjRU&+O9YR?4n!=9pt!BD4Cge0#EK{R*{fUYB)+bLPI5;rF|@kkyzs
z?bnh$;YosL#KJmV5A3b3Y&dN-ZT<~$#{`E2rm#1!4;d9370=z}965dWGq!(hEgzMi
z<u~XvuKKtnWbu0!`PX7g^@Cj{ruSZnv25DUYgAPA&iT^5fO?nf#{YlCPEoSpjh`@^
zU6EaO%|uVJEq^z+^ZB3s%a<}qcIx5(>(br}sV_cu??msGl9e(ZB2OB)-}i|7a|oJh
zPuOw(hL53tqNetT1tvM`>}vekUNBc({i4pSS*u>Uh0){j!*_f$osT*s=kRTnGitl_
zc||%e>*9~1ul3wtpO0Bte_b(b?F^p4l_xG7yHS_!T^m2;(@d{Q{a<oS`U_9G1^l;=
zmY8smecB@z9o8kU8UHZ;(_Uw^ozMQ3oZ}RhCjLo_lmz~~RpU)xYna9@^Pp5V;a|j?
zo8Klb{<=1p=g8f4c{f+F=&(d^Jk&X|>U87<-38GO+hyu=ovP;d&CW{?$m^}QzP6$E
z(u+GAKOO&J`YytDvh3fRulE)9|LE}EXz}u9*U9;lqt9osIrgemZ$8SMke_mMwxxgi
zjpK_=6X!a|T^7sAHsQ9KV#9pcIc>+{_a$DnC5HDlR_*%sDs@?y_NOi1IArg<{lIxP
zobjQx>qG9GUwn&>uYA$yuiP+Y?Zf@In4Z;pcCxR(D<9u}eP)cE&>pewwTa)$=WYBN
zF=xy3$c{-}`@a@x&bL?aDT|vL$Ul2Ww$`k!lur#a11d`*&gxp-wl#mTDM+Itf5LCs
z8wxiR<ONSZFPfUFJ?q@^;-!<8-`QzbH|f>2dot&yWv`6Bb(3Z9{(4)_bGyx^)St`W
z8*}RUzGd~tr}E@FOxn5Wx%6h9z9Uw?N1WN4YBQJ=TKHL(=8I0bz4u(*Znus5{<PF@
zY&ZPUZZq#sYnaagJCWYmm!7@2S@vdW{^@xvPdoPhEeqO}5mWH|tn~pkz2Iw?CT;7R
zZCg||X<fNe-N%!HLTk4uH936uSa?A4wd1xv<x5M#R^MFYytY2s^Gbc#&5M>xPbK@L
zuf9L^mTbsRmC%2`yLe-^yJ@Tqc;&8A7ris(mmSj?p9`y=@jR6I&}M$G;=bOIKgLCp
zqOG56Ob-hmN}J`sYqFhpFJG2Tjh?seG8v6`0h`mxHFUP-$-hufdS~L}__S-%x1Ws~
zhy9o83%#nDbYbq59dBzE)qlC?8NXz=+28Obp(>^O9bB36ErKVCzT6Y_c-5V%NY`B@
z%GtJ?F7yTl^i452UEj0j)8{pTLK8x>HTQo|%~ChhS)#s5N<ZS^)9j;fT<29QrA2Ls
zdNn0rZRjtZ%AZ|HncsLn9G9J*w<syQZpHj1(^_81hU72y`n>Mute=kzqd1P$`}8Z<
zosRjgAGG?fgI(+^kL||wfA3DWSuS9)xbL8~Mkx2vZkceIa^3Ga{NhGtz2B?_>TN{S
zd4p#kNtc?+r?x-t*Zk}V%Y$od_uqM*d~flE<c&W$zDRt0?sYY5Z*aa@-HLecwQhS0
zcmGiO>$GaM?P|4O$qE0C+H{rm{A2n%Q@j56{-pCh%Z*H=mR>MjHTB)COaB}>x3|bt
zpIei}qI*{~?r^MPxKC1ftK^PZQPICFn&e}A4_*~H65D8Q{ef-WGM8!E->*)oU3GTB
z`uR&Tj;B0y;;LX454x>!Z1Ro?S(_)F^=)o-yyD!z?^l>uD8y7F@SwQ)a&fUmwBFOt
zR;Ak#>o-fEs&Ba4p8P%Y>d%XtUioJIUBFXzFawmDLHL~+hfm2ApOWz4c!S8*%Ps}B
zGOy{a=XLMu5`5cmC~n_{=?`}9EVF*pXLaQzvw(y^7@zht{RZ#SX%{3-?bfnn-n;B%
zd;EgE_OU{SbiQ+vX`0D4FFf>=UN2A55e=1Fx}v_;=WA(Y&)b+)N1H9!19KUUH11tK
z=c(<=UEj2d-itVze&rRPmsP^n{NZ%Q>!8nbzg?B*RBp+OTJmJli}Xn|1+OdH&ysM`
z|NOFBr$5I_>F||K9tqXO$DaMT*cd(cTC<8&cg2RMHY-Fe7!Di0_BgKdn&C`y<MX7p
z+nFAV%r&O1t^faBrD`*GUaq^siI{0i4!LH?o-7Zt&R;pvh|Rm$=|`N1b<^I5XYPFv
zzQ$aAc>dm*ZU^uA9K1J2V&8SS<2#P8%6)j{diDo{O7`nVBR(i4YzsZR-NJ<}v_5{J
z*XCE!<)1=}Z~E+-@ziZn`1{8G@ZkKAS-oX@?@pAOnjiRRC;#5o`c$c-j30wKKmHQC
z+4kzqLp{}~1)D4xm_#ZXC%-(l?)kHVZ86VM)}@tePCuJAqc8H=n%}aF7TNii<c!<j
z>ORQXIc2FlUvhYP<l=t!3C<?-k{7t!T#B2x=+qJGnu)%5l>K*o+T0kfa;@;RaDLV6
zj88dA#U3(s|02tj?X&c6tIe+eoh|e*=ZI&fkkprXmdbs8^|zOQcq7Ph{9C<0H%Hhe
z?@L!76pBU6{kg2%rSkuxa~XNj@j_o(7JPWHpiYL5zunsAhe}xV%G%TU=lu3}tJlTJ
zJhoOjCEKOoQD?8Y@TsFa^KSlQdG1x4*3O$QYW%>_#paFbmklR)q9)25v_7@gre0wh
z8%u$m>eppo($D74?UjqX9I9bprK@4VU|`+xpi@}v^yY@XwQtG{p56~kaa-2B&rVfw
zu6kf~=G*)09GxtuTwwO^6WpOTU0Gw^t0xlf&1-@dzsi`<s&$rau1G|_S-|qntgn2t
zzx=f?|9bw-<ohq|PyBx^YxZ{bKKJF(hyF;`3o0;vPG{-1Iq*l)@X0CL`Zg`s>O)Km
zugh)q`o}ss15_Ywd&cXtNHA#84V76L{STAaZv_X|J@mffmlKh1viAgP=`%r2E)YxM
zV>Y+UZK4~q9RHKcOZ!T!KVQFJdy;RPRrB=vcQ;Z$@Ev+$(vj45)Kg<k_Z`>i3gR)+
z@j0^d_g*Of-|&5g%m(RaxeUAckH7mHzNzKZJ6Y|>7YTdz`rd2o4CNL%zy?~?DqGil
zz{d5YjqSy?^Cg#dE}Oud`G@s#mWivJqOZG^?fF;H-_^B5S4(mhJnZDIE<O~wF8iXi
zyZ5e5^`1NCCB4{iX`fEOk!0ng2G0fUP0nxL(td1bLQzChxgg8@e~R(~OQ&_UJ9Y=<
z&PqMJD$YM@ty$dEiyXE|UveJE8JYevKh$NZ(k;!SrhN8HT&(UA?Rf>K!u^deddw60
zxoFX~`mlOlwrkJp0(UN!-}dDEN6!gI)-KeYqjIV9mTpmf(*dh@cTY3NT-*5P$UfKX
zW%q-2<!H^)U7%ye@xVg1V8g7Xku10TKL#;z1=$7jepSnjX3}{&&8XewIp5a6_Z`oY
z)vdPWCv5gV*&TCbTK37!yq~vT-Q38|AoDxynMuU^FTMNEbFn19uQ9)Whb=HRacaea
zQx%I|F7x5*JaX}E@bP-_{Ry>Me4KaIJ)5^-S>Lj0)_<&yXjw<;x#?_>y|rzdmD8aj
zFQv_IR_)6!+RVq~H}|H@r>irM9*}rl@j<<4d3DnS_qO+r%)uH=*JkujvONDJ%O>su
z+w!DiZ<ok$KRy|e<T_tCFLaan%(X$gmA78_8@stVZ)w{Vt<oi0zfKrU@v47Yz4DUd
zlfb=}+Sw`cIiB0M2pM(UZY|jrwW6wfr$+VVX;!Z<oRGIPf12MD`7QGHro)?g?yM;G
z4VV^a>+COL6=?i#b8qcTm8qXHHLol>F3W7k(~`7Ft#gx!tFggEOQA`ZGZ$T&p0-y?
zle^t(#h(K2x6@0?!}sS4{|cBYu`z3P{g<g~FNz9wGudTlq>GlbbHA5)*D7s&{^_>3
z4J98c+jh*IRa>*e;mY>{iKy}kaw|Gse7IwM=XK%c^Nv2kB?lQx8QI^ot^PJS_^-kv
z_C4D!eAzL{wX4f0{GEyU2Sz_G4lnyW^Bw2@{n=SF^(3o=(skL04Lg_|J62_{|9t7Y
z&ReH?uiB%pA8@Foq_z66^Iy`ulM>q)y7l#rw3pfI`g0cS^grLuUVEU~E@I+F_7fey
zUcS5GnHiX1)?V|}PLuaX-Hu{Om8F)QHdDOrg``~1t2wpXm-9{0sn_r3yLkuumDkVy
zw{)k^KcnNp{=aj7O;1~VZ~qi)J=QP!PeV;vHB=2RpRa%Cb)Vy(cW%n^sN>RS`F<&d
zTAdBsTQdED;(wkymoN0G2A;8RW_ZTP49bS<=K6Quosh@$hOMmqP~KAc=~pxVL@u>m
z_UK$SSDC{19rJIfz30#p+>vY(;yYjEzM=zf=;imTmW79kevUr5(>HYE3`1$dpPTDA
zH~Kcu_Ixy5;InuA!Bs*@hDTGv^m$abJ$!3-osVzIjUpcL^JgClI0uBWziHd|NoI5P
z>!(3>(T@whnHMWK9kwc)Rt2h?Z!B1xKVfN8V%LNP-#o8gxTLV{rhLs>k?$8gE~`EH
zvt)MmkASP6yN#?r?JJ%h^M1~f@;RF6+Luy23hq?xoU%05_j0vnXuVwWVY_g1xp(ib
zC792dV0MIIzq*RHn305mgicmuaEtsY@2+WEmQ}p4Vd=22QQFmK{p3p)&y()wTfh7i
zV(SXB3)ZYoJn;A9<dTp#XCDeMZ%Wi)E;YMwZ>e(H!^^4-I<|j=Q-wTRPM)7Ef05Ux
z?(tcd>z_Y<?ar$F)?d+d^~ITb<()<Ar+fU7?T%Ev`sC{V&Zhxy6U&Rm(@&K@VO`k$
zZ~l)c=QYVzpOZB9PuSls@%7|#UuKc_nws})Iq$}7x##vNx#p~7oa)MgiH|q^d!_4o
zf@4}uU8L8P8@Io|pE=*&w#u1-op0lh`kgx-GV5xs5u5Ag)a}Q5eNphktt&3bFzD8E
zMU|-QT1m|4vQ#?m@awr%!l`APPGXJB)%)-8%O;#!c3%7EB!`4s^(G4gG_DvWrslt|
zcze+Af68)qiQd#uxd(<}*LQ>$6kqjSF3z#)XZI<a%U@hfxYD(&d1bWzP2)1U=lJGX
z-<bnV-T!ON(y9uRn@(^2(|V*gaKWDt_RZ-L^?xg(<HYiJPtticXQ@qZw3W_|*Lm9}
zt^JsJ)!*^Yy)z=oK?VKNw<kZC;4XYt_FJ#QWSb}L&TcGa_aBPe_s`1AO1^P_!?d|u
zK6$SX^r;K(5q0TMS#5rM-YF)TqU*<JI=@TMv3SznZTs_}$t}Aw6WLcUD$oBB6ttcA
z@q4%BoxcqA>Jm2hE|lFhTAOWUG4Vs18MnSu&&=l%#=3uR8J*j6e3{#WgKfp~S6?sP
z<$S01R_d&#)`woY@oP4SEjeUdEzfjLar4wVnZIp!b}l%WcH)_4`tCRH`Dz@z<}a<+
zVq3k_<I)oUsW<MJep>T=<(i5YHUgS=)-_}*&b2(>%5r(`G`kD+A6u4XT~=!pY42vq
zWjbT1=BFrnIQ7*J<s;|+?n@JUEFvxQNj+|MlJT6jwwE<l;h(;IZanY)aI*j}&v&QG
zzk0bXCmoX4R$`R7Z8lv~_-fnVj)i5*L-X$}0u2&wVNcn6uu6r^)5Z1F{B$lEPZryg
zXQeIw1^i^)V=lgC+w8Ay_3l}wUga;oO)I;7CdjO2TEN?dfiJJj?lt@R?6}1|hox?z
zSJIZ4_q4^|74&6&+ofe%xUTfo@=M~JQ&m?w3WToWP(6O{_T82B3-4x5-V&W0>BOJA
zXz3fjbx-cEm0zW5pB?aOnoys1YH9Gxz7H`=7q0)h+uE!8@3xCMo>w0ml}4|suLwJ1
z{*`al_CW7dCiatM*9&zBZV{|lD8JD@_pJ7cb6>@@Zq9hHF7vwspP#MHlFL_}rn<YZ
zZoT@HBbxJ3+STmMA0y|_4(&`@8?sR}+F;!qWmWelITv}w`3}Xf*jQwgaC<!X_G@+6
zuI&8k|5Nv#N&B>OZ-L}H{%=a}XP2*RmCmYv=OPlt`@VJayxE5pciX=E^&@)e`O2g`
zpEudy-X_cZQ=gBn33<Ayb73vR_vk$n)b}ah4R^~Ia5N3pd45>x(x(4=Ch#{JMfjw5
zExdZ<&6Jw&Td!nYk>1`O*zx=RH|-@^YO^xh7TWZE=xVUtK4F)k>9nAf2jXi^E2n5}
zS--lrUihGWc3#kmi!LcA+iVWJ_;@p=_CtoD<)x4w6Q?Vy*Ub>~^iZyUG5h;*=C>Lp
zG9~)9o=r!8Zz_w^Et+}Z-M(YrcF!mdb{2@!dRDn4&9!4*yqV1@wtuM_{{_t^GQ@5+
z`8h?LchLg&V`X!v*e+Q9wsGB;G7IsybN>cPd{XE7{XM1r=kX_vfA`&<v8(r@RlzMz
zOL5C-_Zb*(eCVBfx6J0oxzx`;V<w)C{%q;f%(>#}IqvB(Ro)dxygt+g+Hpu5ES)#$
za(0xR%bNW9Q!lrugeos|-Ddat_pSLcO9S?;`OuMM#@4!Zorvh61<a1@@0{7$J~za3
zrX8C7$@Y8Kq1LGnwQtuSXmLL8_wX+N34>B!*$MF`ooAD-m24ID6*qc1Yx%*F{l!Xo
z+h^bWCf31pPf#vl>-4HamqjDjm}*9A>l;m}u%ElmB%tJHrRMCDEv30zE`LgY=6O8U
z_}*2wS$?nU<J-GDPuJz{o$o1Hb6h|0lTpyds*|br|1MdvORjc<S^Vp0;rfLoRtwJ8
zC3arQ`YKr^pi^WOy1{zm#6>|L=d4~Z)8O*+!sxQgE@j*8Ho9@>{I=iNRo3`xnS^Fn
z&lM9_^IPH;SGa79jXzjS+U>t_YM%Oe<>}SC{&Z<Xvc1Z_^7BYW*Nd<QmpOZW#dsWv
zK9x16W|PrJHlxBUqeA0}p*CI@XJ5TiAMr2V*MINNL-+Y#_Z;6@qqm!fv(CFre3H$D
zk6#uE+&FxDS+BFvv-Hg+ul5wUgl-WQ>?}WStY~)s`H^jH-%7f>f&+KmV{|>adQr?V
z?e^8O+N+jzuM*t0!7)ivhLNG<WuCL<g|PjbpUSMen7CuJpwXQ_x<%F6yeH$DqBCDx
zIP2HXdSLO`QMx_lKp|V7@dAy97N6_3CdsF>+;~v#F63x--TbOxUw=W(ovfz?H7$=H
zzl#gJQM`1~b1hD@bG@<Bn^Tg`C#ZUV`8K=s1&debgxIG>>38dcc1+-j_Tl-fU(NAo
zLN7n-w-3kUj!jpoV*DnP`jpSlKuqW6%dcnW*1K`csJAXWJ2&0Il<Aq?Cgx3x6W_I@
z_MhIQds%^N)}n-o_mw@S+^x@_s5rI$ckVaSlQ!n|g}wCwzdr8!WLEw1CV#r8)=w!e
zM+FxL<Lb7n{o9|Wb~UHDb{yJTpLzJ-{+Bu7<;gEp@5L<XzQo!udU>B|rb+yrBmwp;
zjw%CLy(Dhk>wfiJ_op#2OK#u(USt*9!t+w)x0>uHILtSd<7}|Y)^nS>@cgX(e;e(x
z73C&4us8ADY3Ad3#`q<YdnUK~^>kjQW3!_!3g?Ni`2J)nVD$ZY<U`tvPYX5gPdw4Q
ztR^9Qad!6iYw5fXif?_mxl?nddPC9kn=vzaxys&5tgmeP{dmIqll6iPFG`MxZM2Ly
z4j)q8zM$aY-Cc^4g>MKeRWB%bxTEp7E|<6s@524+tZf2Z;uX!dB6<wfhpsIT*l|F#
z$>nCPMvO&=XWOAx=80^r+<x~Q9x{pObueaV#8~Lo?Y?@g@W$Me8!Z?&{C4=3bu;MW
z_H(7PJUO?#J~C6dwEq0lIQ^@#kKSEA!|7Uo;_=D&#^;A?47Ee`D^pt5%=QX@Qu8u9
zMEmYm)%z}D_f#93g)Bel@l~$q4e5+wIj8uik;Ustg$je$lb9Z@_ZwaGid1g}D2XpS
z&2A-7^5C77!3_2QC2=G11ul8#ms{)*wlG>$sXMV-MsI<OA5VUpt6lv<mv<IV96M!h
z+<I~AR;Q2p1lv=0mp87n6+TySBUbH3ZK}zlB42m;STT#06PUlq{N(a~!{pt-um6E_
z`GHLl=bmtLKd%>UxFgTb@R4P~cjMN@cJuBfHyE^M_r2JX@K0=~-@Qv#UIJg{7X0#K
zFje@L@nFSlAw~w4#aa9*OA|wM>mxEZTvCk4d>!&A@;=}4NsnJzTTCrj`QEJOZKF`j
z;#2d&w7&(qHt^P!-w{YDuHCHiFoVPW@Y*mwcjtnseDAalny$!DJ7!Rty2+F8n9laB
z)!r9#OzQ&^Q@i?PKfkwn{qKk8A<r9W)fb|}INBWZBLi<R?@jIB^(nXNbk!{D`uFvm
zXJo%jd&>LmLbTWo;ca%U_cp~SdQ7?deDii4785?U*cZCmNqa=9PS0zQ+O)l_|89g6
z>z8Y%m)87isFDgY72ccmOZeB1;|KnnURUVjYvQc9Xw@Zym8(`-xFsZIc^prE%WB=F
z7#J???{?$J;+LXQvz{H<VP#!iTkHEZB{*!Wc)hFNME^O7U*8li;XT)O>$Q9E?~K1^
z++VBPeJjoV6ZkJf*6Cayzhj0+`2lMUxm(ii3-0T-uW9u=rk>`r!ZM)K@!*bjw^?S6
z!jbWdjnAeo4cM`!;^XbV=QKY^n`O-AWik~~HQm(sis8J1)w~BT!6BEgR^6C;kd2|k
zf+512`N97B6SL~g|M3USx~IH9z3@M4xvy`3|5mxZ%{{#$hkH~na;#=9_K*|lzgbi-
z&i!1vb#uq_HCIJA4qRkOQ1Mq=oLTeDq%%c%sa^lZbtR0y8~&b1yr0!nvFOx&r8;NE
z6Bp!;<|w>~VtVk;f`cKSX+uvYU--?-XQmiVQGfrdj(gKtyZTS%i@cs2G~CvdX*s(t
zTF*u_@#&s`b?e@9?y%?U5)gS<)^#EIU!%fqo+^Pa3NIWlG+VDXI#pF5*ud!4vhSZq
z`*x+|1cgToY|lPay`9+Fe(=5>)5QgRj<QWwPtvEVFW_q}-hK2rd&PaH8MCu=r~AjR
z%gwtZ&t80Z>JiT6_ipgkmx{bSdvf=E<0=_Ft@<ks?)z?wHFfc1Pc_MvbP|4`-K50g
zD$&)_q|~zDh-V?wA;CwpW|Zu#m>F+lqbdCOUGtUe_Sd4aBju{kA6l4{>=@(Nnmb`e
zpW$-hJ@WpBS9EWfD>pBxw!QdKCpL1@^2u7UH^WMtdc#{(tUhHJP5G{DR$tSaT_zxH
zZ&drXCu7R`%;1H~&K}qOc$FbW{`Q<j`z)L`ELVT}xT?dr{z^l~yS7S3*Dd}z>nAya
z`nc0B_Fg{LI`c@-@2ig)7=H=K@o;$A+a0*|<9E60=g;bI4@xiAuiv=L#8B=4!`qqs
ztZfr>X6UZ@wxO^3`zMC!r8@Q-^DFC3HH++i3a2t?s4p{}^G7{P`EcvH9Va$E7IJvN
zAlI^JS%>%i;GUD;-(M-aac<vLx0_XOt_gPAh1=INh52!6Zw|BbTks>1c|u{*iG-h}
zeknKjS2*vI;`w)7?_GJr`#m4;9=#3f6c(jk7vFXAXwg1}jR#r<tk0{Q?U$QqEV`(n
zUj5&}&GW+ao)~Yfx#q3C`#$4Zo~TM|&7gnHood}v<YrqtFnv^b)s=H{Z%pYmhWWx<
zZp*1?uWDU)P1B!2EuyNTQ}p$#o(-!-9n%}meYh%ladp_2Fe$%A?YKGKmU%@FnZBNI
z+o;P?;^sAR!yEPV1()j>5-dy&O58UkF4?uIlfC|P_GWP#qerzfQ;%*6k>QrOKe?m!
zT-Dd&xf>@wjrz4|PMnk1!#y)jRx2I-TX=Co(%1g&|5tC7vTRzKE^~vqrRZwT&rM|<
z9B*6sx_GKg?JwP!Ya_e7mgRkF{E{E8)lWY@(HG<sd?#JxSi5QV_vx&EbT6@MZsU+)
z)_!=ZVLQhefqK`EQ&!Fk&zkO}xo)f8?Iql4$9^;`*e+YMv7m72KZ_WSo74WRTd{xf
zmrynNP-Dq{_S>?IvU4JLS=D)7T(z-6sqvr0jQWLJd^c(JZ#;PKo!#p%v9qrH@sf#n
zd$mLLg1yGOkK9j;H^1M$+|4WSca+UX+cY2EU&V&n#=l;_albcpZGFd<dhM*dBhD?`
z8UDP@mgjd^?z=FwceDAqS_d!rldnYXzWS8X!BIC=&+U`P@uK{$Eu3K|ciX1$i6(zj
z`*~gFx2MZA$2!NWckCVZcT{I|`F{Hv{%NvR<tnA$-5nl{oyT7&3mb1btRG=2`f1;_
z?M@P9m(;6j<Sh1o%b9RlQE5xP&EwKfhi&`UnoUpRFSp$G>{I5n@`5YLt6v<yx;OD>
z=(W&r+s4NSqn@%bOc!qI-rl9|mAPoCMgiY^3qie9;h7nCN^Hc`y{Z)@JRj|oxn1$z
zm+{UvukZ6;iH1zwcST#MD#JVUO3nhIUs3rXv*T~C_`CM*L_7DkrPF@)aQ)ts`KNwi
zS=3Uu-}|milA4;oBGP%TKRfUK7Vo&NH!~Mo{1m=Bb)Tp1m5LuRYW0GWylL9|kJq>h
zwl&1;@?3P|qQ9|Xc5jvRRq3T(%l|FCqA0cLUV>7o`dzPHtyd-&YrTIdnOgDfjhy=K
zWc8QGpAW^3-o8}LY4bp?wO9yR4@hg&Kl|`=B11(@n%3Tz+}C((%p@*wPk1vkN#gts
zi__1zZ)P;BIDW|!Hr?;B*6Z_T7X~K>XP=e49V%PbUJN|6)NQhdgSJ)Qgr^Ly$Io~A
zSN*MEx;jgD(b`*cgBB~fx_RC|(&y`W;^6^fi>&vX7MA>e^OTdj@Ob4dyEd&_8>51l
zg}L>!-4<K?bx`UQTmJsZo91iXH~7D{OBL5CY%IOy)e^9+-v317Hi5>i|GDS5YQ;R+
z^3rDe`x#4G9~J-JW@BusvOmL%|D?A#L-?CrO|b$eem$t{37ve;{mYa(`PW}u<F6mn
zX#SN_yXD_~hr;0Lp`Y$6yf0fGa+GId)_&LZDj{cGV(Wdc7had~6+F9I@?`Lx#j$Hn
zsHbliSpUWQ+Fj<_TTa{gOGTD@-~MuCg2%$PV;x0*mi2Vh7uV#nc~;o0ZmeH<FlMph
zInRo)#Dy*@4s%-0-qx5eEAoWzg1DUV|8;C9+F1F;r^cwM2T9I7?R}e@Z_~{`l|L0c
z=U0D}jpV<?^!47K`Vb}6RTVRJpHBbk^42I^dr7NP%`>eIFaHhP9!uv&9j`mTiDlnL
z`+CXeqQ}g=ZTb5B&Ro+{d12%3pKK;Bp6c~PBP4zK_Os>+XHK7wHG9xDkB_&q=c4kv
zQ|FH<O<rex<gU7p@XM6T_qbm(Sp7bBulM?~t5q?U-+mj$-HDqNUFcIEHF^50*CP65
zq3aiWoZp|&uf}Kn<i+lwA2VHMPp|IknJOS7yHV=~=l7|NQrnxKh|OVZ7CEak-}NN>
z7XC*{l0`2c&exdiq2%*#_7nFK=E?Ufj4zrRaV+y$vwR-M?%eFz2}c({*_(Pr?PA0{
zpA44QQa3lQTdgfAy`Lvo-T!g^lb`jozbbp0sOm4<EMBMe|H7UEYt84=kJ?OTS~TVO
z4yXIO`%d1~3p@L$C%F1SY`kReiL?)!*sB+wTsU9o-<z#|cP%x8McNF)?8FY}dI<%#
zwK`38w>H*q_{_1e<E(h0@RN-D@=Pm2-=5PDY|VPN=-9I`4#!A?6D?P=5AM>Ltfs#4
zX}yC};Hh-2RK1DmuWnuDsm?ZG`K%fk!ePZBB;Szqi}TDwF0<vTFaPX0q`GU$Kbz#E
zicZ-Vl)8QxeCs$l`>A2DU_wjnFZJiuhLMj7Q}=Eu%bV+${@>bBbc3*S(<ApQbNz2w
zdR^c5{kpf!il;?OW9B&rZTr}jn{?;QqiIe>hpxxfw>~-Rd&<v$x7!s%%^Sv>GwPMR
zKVS1I&-IK@thz7sxIvr$sgw>!>d}&A6>`^B7B075yMAfd;(I$pr%0NId$^gLE^1k;
z>ENQ;za{)mvgM+0!q!tw0=TCXKh^60^U*PSNs4>5*~wdmlQt&uZCqK>FOhW5zO?_m
znpBdkKJ!$jEA>T=%qypEYK>7<=h-U1cAoyCRg)(!^Hn;+%e3`*Air(Wk`+bQL*i0|
zFR!y!t2!in`P#(C8?ObQd8s+`ao3dnI-)yR7MSuHpU4)Staz)XwBc3e8V%>;$#0K(
z^>5VhQ}UJdz1h4|a>3h0GO1D~8q-sb%6hsyKhOTGGxYLNuW9a%^?N-RvNv-m8gqX3
zn(^`Ti4e6TW*2^m++8r`e0T7acN0W6+6Z@+PTRfXg#Bk9&Xx1xr`+s#{Qba8+mdIU
zJM8KvRVvLa+NRVwS>X274(5ZGoO*6*oZ0dCX0?5n{h_qE-D$>8`&WD|Q*yqu?zpFj
zH|L#+X`11F3`f>?)D*04zP9pDefvV;*|TKoRI~r9njhL&{a@}_X4;~2pWS=c*&N!R
z(f4Hi#x-`Q7hC+*v_6&_zwdUs!Y?<akL8aazB|WNVLdOpT<^cy+O&;r?xz^rKdA^C
zn@%Y$5;*>=OYgQ*oORKTTgh=oZ{j7IA1^9<IAQjon4f=?l*5)jU)=XpUF#CxdB2eQ
z%+6c7;R64b<a}IIG=WdGdZDU?(+O=u7nL(&8=Ih=!jOm?+s{bf7CZOq+?(l9@`1&(
zZDbYNqF8qazd0Y2D=4Jo_;W$>>qos^oSTh8a(2ajnqbO!Y0k3acXc$J_E=|~NdNz2
zP4QGMk@{!48#>tJZM1FwoZctYA#%HFM*W<&V{4Mdr*1k?cyZt1s4oVy<MV$`KlZuK
zTQ0P><I$JAOHB$7XXi>Xy_Z}Xqc`{I#^}SoTw4vxwE384s~HxYQQyL3xH9Ba-{A%B
zHc`8Z?X10y^gFb@6=tb$j@5f=%+DB?@crNoU-rLx$ILI(JbDupdbUu3A>4|+xgq;d
zLD{|f_VayfqWkAc{G9ysc7%Syvp<=Mtq)puI)R#X$)-kKPiq{b^rSz!xBY&s-o#_)
zm~j8c8i~$B#cAhs%uhXkl_k4po|TDfqS?XMMt+ttOBWY*uSj}Y+cfX=EDs-n(2Z+X
zpW^!IqkCScbb9E_-?9Oz3r=mDtn}1=!AXk;j#oq_>*pvs?3Rt&bS-1)(ftja8?H~>
zEYI|2=iM1MdW!;%Tffs;@%Y2l!UTQe3&*P?R9+<Wefg+o=pAq(NjqitZiy9LAH??E
zRWaJ}w5M;5rEzWg^oRNtDMx-6UB6OdCUdYl;P^G=F7D??eeMZs8f-o%@5FR&&0<b-
z<=)g=7q->92Ru=%KmX~kvz-4u^J*)G*x5yg=6+XNxAjr|>e>lO-3JUe2(9C(=sv&`
zDB^#KHTXMI;I3a;UpAEF*6sNwT6p}>(WzA%FFswYSQmcfe&8>y$^ENl_N-s=Q~big
zjmPc2eelj&B9Ue@(P7Qs<XdVpOBW{Pm(MT#rDw>zG5pbito3d>jsG0$3;W|0=FhC%
zZ)+OVb?f@0&i97NSr_JaZ)B|8xPG&IW%yjhOaIoc;1lN;yvOw6dzaVpfR|e|w{&HE
zJGPVG<E3)s+(pr`^LPXguD=v}hWV;mgzEcCjSIRAt0(`-?)$4EJIf2Ladu|aPE*mF
z@h&c0J~nP))9XV)jkDBR(XIRLPPwP|wG!Mm^NBtmCHnBh-K4iUZ<AlkxvwoY><Rhu
z_|?4)f3#k&THV_J_~3j7@rKh<TK8W4a%n97v1Mg}=H}@5qmNuN^;wiX?@UjYe!o|<
z;da=|f5Cg3R$ZE2<?6(ryRvH*Z-`U;>)x!-+0tA0Z?(Sky#B<7D@OAJ6X%=v+F$Wo
zeI?`m^r)c4pLk8PSA2fC;NkRwldH|Fb4Aqa7wx`ezOq${fBxww`i;M5Sb42xc_Q>y
zsrt)hpA%7w@40<-TX|_^y=G}g+Zyv39(O&r2QBWh@-4YPX`e@LpL2fL(&|rgwPAHT
zTt9C6634{9!~Nl$mbPV<^@i)tonz~=tf^CBkeff#EB{whDf9fBwesgh4p$sI7HJkA
zAy^|WtHQaceD;c;u34e8=BqLZFi9nO<vOUW%<b(H(ledq!W4C}utkSm!>Z1&=F;oq
z!Yi)j2<BdWH$_TR)5z<WT3L>l6CeA$gMro4d6(W!*Y}U;us(PBn_<Yy%k^O=K8KzB
z!rU3Doc2q}^7n$TO5dFSE<83z-Xmx3HX+3+Z|@5iEzosIc>A9zeO_us$^M-8Th12$
z4m%?vc>ejfjo;+OKDRts%H5z{7JE>S<5@22%d<!JXvcz@UWe71F0PYf>#}y|4HPv#
zvg)tc-bo93FTDs*x?}1d?D9G5#gj$#^L9t7RV|I*^iJ-@WwBkgD;8VC-deW2&4tU<
z#BIuB^Hi5Vvma+0dmMTk$y?E*X&-xDOJ_<4OUL95mC{c)H#gm3{B<aq?bx3kd$;U;
z(C}ESVV2+Wlfv%0#i{A>h8mHllr~-w{IsDZ_iVeu@)^6fn9c2u;(z3SZ6>$R-=O9`
zg{t}^u|ID{Jo!-4zT<aGCRcyXE&B~K);jDjtl9YR)Y6U}HzEW@qIjo(n@B5{Ew(wa
zKcr)sj^0^KA0<AnvkVUG%oF_k|Nrd?Km26BXI;yjxhM1Y%zQCx+jlcxa1$tf*4(R`
zCVro`aE?oIrO`t6SFevQFvH&daW@gwi`!AV@bl@Ud7g|HuO!DTd>?!KNuK!Xw8CR6
zZ9nvhdQ|w#6Lwu}DI(G+ko(86Bl4<O*QAgY&-Ah+^Vc3xoO|!^t2r!7^|_}?P0#*5
z_m<1_xt`C@-<Q4365P-@HFzG2*wUJ1LC+>ey2NJr8!JXF&Yn_HZxiD@EvL!lVEhLU
zSIy`Xp+z=EO?@T8S3dj*?Xdc794%KQknMHpXJxDZ?o)FFue(IIJ4H0B1x{g94)Kv=
zZLxGoJ>pbwB&D;|UpUb-GS_-%YTx!#|HAL2WWUz>bL;!8lupB+SsN$WdxZRF@ay&M
znH{<{X5Ez2pHFBd?=YF>Q!jGw&XPAe9pEv>`%9;GDQO4JPL#Fzv2(^bk@JVG;@&x(
zJ$pT9bzuG-w=PLggJ)`bi|+gR8c!yE>#Eif)a>wGIPXkZ(&dT%X^I?Ybdq&C<hK^B
zi+LKDW5#36c~bH1O_l89-4{1`njFcxzH60C<}H<gDXU&4sm_l6#LjZNzA<5LUhoNd
zL-TJB_J-Q|iA1z);d~u(@p8nc6@ABVb@v8r<Mdpza<OK$!EwXf?1vueOADu{csuzj
z<&*_CPOki!TE%56apVZEp|9GE)Hi+e-Ip0DmQ8qe@l}q?dz;R%mwb_%-hMvfa&AkE
z_|Nn>@e{3H3j=g3nbW^ru;f4SwXpu8&`<M+%y)IGP2Zh8Ic2k`=9<QH>s;TvuG%$g
z+4mc@8x3a{iI>|{*9$%A-w@f}%6RSA7mYfX%X@?+AC;y1EQ;`YaO&sMGg6EK`yaWS
zUCS4>+(~d&a(-6PkEv@+gPOT#{z<*}oXMK&&At8Y2eo&1ikU_qd8m??`94nW!KS{a
z>h<4ri{mS^KEE+qtlj@Xf12ahY@OBTKWX^YpRUc$lJ9#V-Ff7GZ~JcR*L^2G-r>6Y
zfA*HB+mcUyTh06N?dFo*{xV^Y9)Hrv>07wL@w?!j*F8^cZr_?2DtBbktD`?F@1^H(
z*0balKMh*(RR8qzc7?S3P{sa`Un?Cf_h<(yO74~BsgJ&U_LLx~RkQZZt=KbZr*Afg
zSm&>?xE8VPMh&;phO(KfMGu{teY;bCo7x3K@6!nt$ySYz*56j;kF4DOEJWm;(FcdK
z89V!BCe3xq?Ya0M^5w($GL>@&mU(t;W$CRnSQ&EaTl@uOIbGJm^9!crao7K}*gZ`*
zPNw*JOf`GES3-Sx$qnCj1>LCVOI|zf1buqy`RZhFQ$zNzpuBsF57-@tG)?Y)jMPt%
zyAN)f{G17Gnj|Q_%1Zgb$z)wMrTAlng3S4Yuc!as%NLgzvEINdTXMO~x=VryVxepH
zFl!e_3U_iY(%M!U8mTyc<<rQb3!Aix_cO2J38}wX7PRCKyNM*bO~)>!W@DC&?T5Xu
zN&Qv+A#T9<&8p~|bA#>n=;b>D`Ce5VpUYY*v(Jhzr;_nk1%Ee7?U_cqd#Y)iT#-4g
zIoppggbLm}wEguZzU^}^PBczmcjt}KAJ+b!iuiZ4W}UOzTD4v1UR6ynWH5>K*U#V1
z9tZ0F)tfv_Te8t-w%_ZA6E5?7_wDkRdMp2_;?s1Fx~bOhU1PG3{tx^8b;=f(2NDsS
z;cR<c6WTPo)L%BOtZvkZtu?KR*kxuP_q%IH^20}7dvCn>bWvcx_N(_AwNp>JU-daw
zyIQfewBXIJLvnSVy&{Ku)P-L3H~tj&x~;PLocNo!?>76@-&ajjNaJ_v!82H7c1ZbK
z={M!~T&G-a?O)vAVAsR&r}oUwCuXg`=l-tz+}QguWciD*>FUldA6A!$3wMKuh)Plf
z=f2I{>-o?0c-^FPPD=Y1WWAGL5P!th<fz*3U)pJ{t=%sdc6ihy4H2d8owMa;K;UkN
zQ??~n=3V;f)Ga){ZNt2^wK=UfugOI$xSg*5{=%l+<~o-XudM51>|?KIieb>pUh(5-
z#OK4yeOtX}-py1NBW*CK9%VF$=)oY)JJx3dqf`~9XFT7vcz&AGHL0&=tIWNo`u+7@
z>1>j+_n^xwzg<(MLa$^l`aSK7YgUO&)n=``lfS>%{OPc6*Y>5~g(?o%ay?fusW&;>
zSy)<T7I5a_XJy6@KhA_yT^3&>{o_oYap^LNW5#CZHvK$wQN6aEdlJjV-M&};C~eg`
zdtQi<gOS&8shPs0E8E=MIj2kcDlx8oVc|55Swz-e-R|Yr$DASA+d8&om3#GeiAbu}
z3R|10Dz-D9f3RZj>9$L6H&0jBIU@T!^S4C(sxO(3k5(qT{c1e2=Dl+5#5uJWssw*8
z{1=dXj$dV)Uv#Iysc-K&EiZ^EZTME-Xnfu%W}=AV0<*c#zpZ_dtT*rc+uJ<_c849}
zb}{Tox-R;rDZ$LS4P^l6aNFMt;8w_S=>T{uq*?ie0?Qp!_uzU^Gh|E4yxn(Yh-`&K
z%<Ve(thGyMBE!f3Z)&rPAMM!oE&k%N?=u~Eop(%5(OUT^$!Mk5WEqcL*;;$GpGq*+
zN#~q0+qq}&^ZoLkVhO^x@8nF#sh#mML3;7huP^E^PTHc^Ipg!TPwC<;JK4YNJkG-%
zso<K~*gV%*L0Ern*oK8+J3gG^e;?iVo1y9Lns$Z760^62oJ(E9zDYg5gR|#tkg&K-
zMPrwZ@pL<zQyg0Mie(Qc>i%j<ot6Km_c6cpGM}y){L<CztnSQD+1QS8^Ik1!VgK3A
zl{o$A)LR~r^#>dl%w)K5kl~51zhY={;|ueP-WP63?tOfhX}X2xu2e_m@4_pq&%IHZ
z#(OuqwMfk8$x9La75dXl6H_wmW>0Hex9tAKujRj0BR@3S)ts@HDO^?X@=z}K)pM&;
zjkpAY{S$=m@Af&_#bmnL>Us#rF6X_A{~u{Big?)?u%zfhnA(o|DPBuj=N}gDIkK50
zgS-1kt)~*-*F)=%^PQX8%&=AOx0KkTOImZca^DlSY@SpY`#o#=rhqejGn2(P^2ZDA
zm~gdducyyLg|jYE=j@nXnmNpjt_@uold(zT!KDK?4Y=p6@7N<0yCyC8-<HS83xuNW
zZ}hG9-WoO8^MGYnmX+I8woUaPj23lN{kY<L;GX*Wt_Z(PHLH%;?dkpK5oyn8xMq&a
znb~U&pZNA_=NH?Lu@}8}hUQM=FLJ14sBYtW92UAeWYzRjI;&2}ti7`IiK}_I<*N&&
zoVUK-zNgM#8F$R<&nbTPgDYq0hhzt?)%ia0*{kZkw|BmbDPGmHnp=VSO@l?-x3GG)
zNB1`VWBYxic2eBJxM_~RI!m&ZnYJ9wdh^1Vd#fyy<g9BPQL84gDzDJ|_VHiD_2rGu
ztEa9v>t>JjXur>V@QI^pO2L<lNmE~|UA9=k@gjKA-KFb=+q0SdzJzxLT;hyeko}my
zD6uhl4%e}VO}*PCHytUo=3cP$Nlm)LvZ?Rx+SXfs$WXc_>-c8s;$qI{8*`#!m#C{a
z{g0D7#HRPrZ(plU^`levGkbMQyOv44Nywkj^_=^CRj8z({-2vynEdK%!~N$}RZa_;
zHPvhNJ6o$~;&WRM#q@s`d$_sRt04d4wH?;WFKC!8{oEn&B&)>Z_L5x})%#SQ?fH{>
ztMKjTU0t>Z>z}O*Zwr|Jp!Kcb+y1>r9+>B5i!CXVS$-v=aOY!&kJ;CjpDDVaw(zu4
z_P=exe7lvin`bn7Ev$))<JA&0WR6*7tzv$)wRq*q6UjgBg!>+C5UZJY;+Buxa&d17
z;h3f=Z)+RU<o{^DXnOo)$~uORy*|&vpMU&z%}%{2X1n>J|0i$NTk3!0=C%0hd!V~o
zUYGxsYm-L1*NxJ1Hx8*E4mNsNBj)>hb9aJpdVueQs&i3Goi3)wrT8C+?aQ=L)iKRV
zXWggtH15MAnc~jF8=i<R|7gv%(8r$t;v)I4j2qG?@iLs6w;{Z7-^BLxKIVB^8`g?@
zv9hTI8!*Z!vhp~%I*NOqtLMIZQsmto3CE=1%QGD}7B65|lsI?Au4dWp32Iw(RMyyD
z>WH0w`soT!_P7TXsnh?391(xNA<V*Wz3A%n<8MsE?{~76UU{W=<&%n&>x$nDukIOW
z_DVeZc+t|Xx%BNs3%#6>G{*)-yMzGt%=TaU`i_Z5f7(ne3z{VGK+7{SP9?8?QT2>(
zsqTIiE`r_%I+Tub&bDf^+;pyl=_tSS>xqh|j;wcQo2{^*`qX?cl}}BNSu6e~#k0gc
zKA*DsLF&e-Gklx-uHLYBe!O6M<x<1<y*Wp6Wxni8e%kp_SEJ&*ov4V6Dr>a-Kh+bg
ztnC*(91prLP3XyYJXrlrbH0er;jOIhF7?+x+?}*AJnO1crD^w(Q?BVLJ+J#b+TOh}
z<(s^4b+d!|#j2%BbJtEXXirMAkEwa};X>^f-e=_}PEX9Ri*wt5a`Mah2Q3%#slBRG
zXN^8QIko9okYZgW@7sq*I8H2*^?%(SygATnwae38;+;#vGvi-9pZ0vEewF;bXUA4$
zE;W{HsP~@VY@_NT#O;-*ZOnY%Rl)D#ti+W(KlDAS_b}QT|F3(0_{_>%4*u!$f}XW^
z#!pwe`7ZeWbA8S)wa*1q-Srn#%@F*jT{m^r{s~GIx7c@>J$cEY;IaDDrhDyntx~(X
zx$7RBs`%#n<$97uN};OY7dGGW{S5Vj-wv{GIdT2ILZM@Q{Iz?`83_>uO#c*=`M-Y9
zzTy$aUK=;5zv|L1?{62S%GclMtrdQ+aK5y=UU2!^>$;1KbhO_d_c*XLCiYxPAGfsS
zWX>Hb9D4Ue_Umx@7>bw#i)Xb4?LN1DgGrg`R5zP_GTM<TPh_g?_<M!d?f&|Ef8MME
z>yr58s)M-ilsd@P)bD?}<=wvT4)5RJYyM*Dar$l1*1CI7!cTuwk(TcLcR_B~SHJiB
z?oG8iyZ>OUw9OyY#@n;|u5e#^RJrw<MYmSn3xOz~WWj^EfAd#zTlL3FznI@(qQW=v
z?yP4A#ckxOj?7Hz+h@=vF~!`r;POgy`MiBs<pnn1D|vHJBi4JaSj7(J`tPwXXJ4r-
z_>k+p%l-R@t;ZgldVE*;e^xP1JoL8Mr#^EJqmGU558O3hd3(=qEyV_f3kx)7Fe!CE
zfAXN=`sPoOTXuFYp1S|uPUq%D((<!UZCm<ijnRa8-`HRBWZW+mT>e$=)!bzw(pvky
zWTPi_e3$n>daG_e-_g77vybZ@k>#$~RevIs-C|G4L_JRX2{WH(9+Kbmnf)#QO8Hy-
zx=(8qHgC$F?=ht{U*GbAnBs;*_AXHs+G`70A5HKTw{yzg)cq-a=I>`GH<l!%i%kpn
zlhHfzlf!c2jOFW(vn$k=8Z@x|GcfqVsWCz4dj(^5(-z~G2Fqp$UU{Kg!`4(B_V~+@
zfQ`rM<r#kKKae?ATdpMXp>2PPeA$E5u?2rCm@n<fyuD7>$nwI)&Vau1Qw%rFkEa_y
z{C3ocH)mGAqTsa95RHeN0-ZBHfBW7o$}&@=DTZHQVnIT*%!X>ahd$Bf=e<96Jv;Hm
zAx!74$M;lky$g>fMJA+2sLu~8o~tILsaI|H%)_y}v3^U`LABb4hqOPh&G)>@%&~2=
zT+=lFijU4uWB7!&eA=Pdt-7blu<+0;@f9bGi(keq>sjzgIO)C7%|-eV&$N!-xA?aq
z@zjr=pBpxQzh%(-jE(JB_t{N;abKTDyh+#{bX$qr%-|u{RIkmRAvzll@rUi1sj+0r
zAA!GWRh@}WU;4_k>wROtCau<)JAb{=gxZM*9o?+c=Qlo_Rx!D;Fiy4qct*m8Rq^i|
zCq{+Lj3|}7<??mgiK%WoZ+<$`{F{%xg5$7Qs{hyUFCE%$DW>a-j^%GP$eA`L!Em0h
zcWB+bl;`sw2+UWVvqo1%twh)@nVEUr4=It`V$y{h%T*q|nP&E%yMV90<>;*f%dmz;
z+3PQC_`nocZr|g7`$J3H<Tu>jYJt;uZl*b_{d|>V$gTFNq>JBNf4b?`l#FHf3m>kL
zT_eXR+?V(%@4V0Nm3yO3nM-YLSvl8|mp!yOF8L#uu-2=>Z#VZm4HeJmDwxiZ9>g8a
z7&>W(N|ue~XRf+^2hX{mSI>LeR=+&y&lUsU<g8hBIeD|5E%n;$`^taqs=KxBGnO4s
zQos7v^)$cP`b*xAi!+a~7UoW|_W0eIG<%-SnbiGz{O<o?>@{ClDe;%*+u!OnzhsVc
zEO6Yt>`2MNkd-xE|I?>Ud@;{=f=h{e+reY$8;vX?9Dc1kWOi7n+4lcL>D7~$H|gg^
z)VJ3@U|L=mw=Psm$L#joKWF^wyImtZu323F#dl&(aYp5xha6i!XU+T}6Qyj?=v(vN
zNL8Eb%9>X(w*;OX|JbqP0@Hfyh<ibu&HIk<rnGZ!2&g?|VKaGawpx|Ni%sf>ulAc}
zhFi>cJX+9geOXU=#+wIR3;$KD`d?h9!FF51*z9aQQ%q%0#j2x~F+bNIDLTDrvD4p^
zLH1u0K3nz7K6Q=bICqNYH-+ls_xrzWc%r*9BHwLRuT9OSvMsZPP2(hgow?869d7%f
z>O)1*B*7j{iQ<RNT+7wFUHV?E-`Dkd&BI+r(;v8V#UAK?`XSk}B-`%syamycjZ0JH
zm~ZU-+wyR(#oc;qp<2$X$3wsV+qtfA^X;dLLVCAs@;)(}MVjMrn9uHzRqnGpYQvAt
zQ2yKNeK+Q5M&C8>3+wKGtNHxE_<i{!IjMO|wx^aYeLHi)(voY2>4zNb7c01aR_K25
zUghMb&l|qZjXF5}z|O6pHXtwC(w)EJ-k0TBUH^FT{8iQojDA6OZS`MD;^q3kn%_|O
zlz$;QtJC&EUB(nCU9r$-%m;S#8`P#P+~%y{d|ArTJ9JY5i|NsGUoEbE&HQk$Y~L-N
zX+PdICUh+nGO|#}EjHhNE}_4<tHDlncWdq3E13olT<Vu{sLq|hy36dJg1DH)G1b+w
zQ>8D}-reM%vxy<fORwNnO884~`|q5r<DA~oIGN<8H#MbQ9g@@682IS?Tol*3s>dU?
z`{os<b6gU7AN}`=Nlr~$dg)imzsI{z6xh!@;p(<9FvrWLlJBM4{FH|#nYVmZ-|jf(
z`a{Atc*cCIAG}%Dcq{9Sds7^>w%^O1-~Qy|jp{z;BkNa|pU`2?4dMxyl6s@Q>{McT
zN~e}gU{12p>UR^0YV?CxW_8)Lov*zb!jp0EdFPt5PYSCN@6P^_Q6Z<>`b_?h^@~YX
z5h0V7oK~(;p8WG_<(|D;xzjDz-Co}FKZS8pCfi4CUJKqcm%aU^CEwIPTHj%v-2Ciw
z)5-@2imye_kG*oQ;F<(y$a%|O>(6vomDOAFe4Vo4%8I$7KeP<LHcggII#h6@f6t>U
z@{{+-Nd{QW4_~uT{^L51xdufG7}Nr;`6Rqb-a4N-)?!Mp-MJv|ZxcG+Up$>NgVj7i
z<?&jzD{uBK-nGKi>HMN;E3bLXk329(lgs2R_b=a2=EIUVLu6l9?B}d^;|}>{m{Akb
zebnuvLjBU{!!NT{Zg%JOZd#%)^EbKtC!5cKc}v0@xvXql<$w4z$L<X{XSyKo%f;xA
z4ytdu-FGc|QS#%JpI2G<`_j(Zswu3V8>`%Y`K+;5o_{SOqMoZ%-sf({Q}<~OT#-I;
zaZQiBEcZWFaLBQc<zZwFJ>A=G8MEu}%axlnWPGmw{`Rzf<+`kENrw|TXZUt;aj!YT
zuFau-q^khZ{0q#TqCKfU@I@of_s5)$pmt!ivFP+Z%R?WT_Vn4RHC}Hqys1?Yne)_U
z*1YSD-@Y7i)c@?2eDAhM$8C!j#aSu4HoJ0g-P`HU%IfZU(2>2RsmVEG$$|%qgA9&s
zU+}>8_Y{Aw`elWWo0J!2|47>Uvg2aB{kd7amm*V3@2?43Ep}?&<1>FP@*nGn@H5|M
zjK~s|eqK}QwW8UfeHExtSX;#L(BJ3H);51xxn2GHCO+q@v=ln~oad)`rO{vG4=O(k
z7QHJE+F)uEsg|K9`Y8O*5jnq}2Ax|UpV-c^5PGe(cUhHKd;Jo>zvjO`n3{+AYR^5{
zaKG)^d<FlT{VkpoZ=X7Ipj<F1IRAv%#rtPM*#3wwvAx$YZ)W}e?}^Vsau+N&_SgJ;
z_{e(iiCZ#PzW+R3MtQMQ#^3G7Hcqg2sp!8OpS@_l($vXb8M{MTm+jPdkY$Mc&2YWV
zMwYQ9KJ?(b9=0jJ<sIfb)$`tcn{4h;Tqpc@>w!A41!)V+Gj{!E{n5RF-)@2HzJF|;
z{ma%d{&H<_Yh+b_z;ARWfPcSJFU!AI%&($6A4kQfIX}OiW?|U)wuIx3VZ-t`?MYLQ
zwtIVj?ml-S?D}IFmu+qBtaobNqdHsKo|@mh5YwpM$Gx9>2gi;ahmU1zgxKo&js{Hd
zjanh<_0~g}*Iiqu_o3HP!G8VYUSg3Z$LF1Qe%$gp@9)3$v(+*@@8``Ds(9n6TX3DR
z^uym}mv{ZX$GmrcHUFjS3cA}*U;S0Nr1OJP+`-A7W_nUzr+sYyc42LK)%UOKu4Mk>
zeRr$z@wYuu*>l!jOMS|5g}>hO!MA0~U(M<TCdJ=awz1>Ewtw5Nu+BZcp7)Et!#~FO
zy+$?D9=@$Su~x3ItK+~1_jAYR^84jiJy;f;Z+E9=wY|sMiqATeL<GJ~T({JZ+vZN=
z?{!~%U)flsU71$W|L$RS@A2#j?>zrWSKrZ_?LN)aRNv3PeU<5~y$c*|EVo|ycU;@V
zr^3tmwts!-<vEU@w?wQHNlx}pz2H;L{%)V=-Dh{hITINd%HIqQ`R>^K|IM13Fsna|
z0b3p`cI%!xVA<Jqc5TbobFxw&?)s)Y5xes3k;1tsmY13J6V5e!ixm&7c)##ordMOI
z>3c0+AM1LRhf4R#>_wxaewS#xv%6)J7x@0h_C?j!TO!We)Q9ucDH!`-ZnoFy`g%h?
z$bO4_)Ty5iX-`wMCTeis?<iTI>y*%1AF!)nfAr(q#}sGl&AE3?W%`r+osVYQr%sHR
zrs7yAvn6&yvSX2e`T4KC=l@Qtv}bFxV`QBqB$J;!L*eZi%Wlmy7Sk$j`M(cy_E}i#
zhOGI>et^%?qBZya-0k&>d9RNcF1n^SiMuos-0k<vaopFsLh5^e?VL{Q1>Ec8^BttJ
z6K`)#Rb#iZx;X#wTq6gz`yV@_cjRn3Q&Be0#&EBDm(V<hi5)L%wda>PPN;U6Uwx+I
z%C>iXysYeR<W5)$cbzRhwP%r~k?jOgZ}UsFHz#qM72BjX&h?&C6IJi~eWu5f9Xc;&
zD6_7uzLdqfK8{N~?qvL3x2uV)w<Gx-wO#j|TU?~a&KXsCXF{oB+`$<ZhM&1Zp3K}?
zq7dp9@RM`n{}nkG#dR*1KFXJ=zhRJCbFAjZjoV!_+=`i*A0JJNRA2wASm)dH_?3?)
zuu9J;NEG7}i?9?4tI2X}pIjqXzv#Y;zM)UYy^nc~r%O|PXXt8qRX^IW*kQ_fyLTEM
zx?SpPtd3N!`uAr~SiaEZ3yMWc1M{}oe0)$hhuNkjv0~HmU)ohA$F+^mYL|YD{>UXQ
zqaM+demQ9BeD#|@)h&*&E2(F9Cvx6xxp<>Al>5h{cclv!?vd%V*u6CQzf+dfnZWw}
z5s!4)*#b)5ib{#aJ%9PG{o_xCd8>3x^f{ze1I@T@>N-#R`f8RwxczxvLw~yK0&x3t
z>2lvUl8lpo9C&hfUYl89_0}o*CRuS=<@Y^1Zr!}RVMD~t%@LJXS!Z$FnY#L>%b%=`
zl66%#_#GZher}?l`&{}>&6k=z;>i_d^+)}=H!Cl@_N;w_+2fSlPp7`WT)K4UmKzod
z^|x1?`SZ!D<k4Iyo19cO(+}sgpKL6*cd8P*z-rH4JNM|>qh*r+)Xl@x{aZ^_SIvC;
zFF8g0&bHpXbniN=^76|;IVs1EZ~5ZkTimd0x9!~Q=U0siYd5<UFwOpPFV!ndWJToF
zoe8(=dp#d%pFg#uCn93L?8JzTlPnTFWehE2G+JK?o2jR6D%<P9&+h&$Wyi0Fv$rUV
zi8V^(6{g=xW$Ac3NAHTf|JV9+dPfqZlaDQnY*?MgCBD$2UpxQo`YADY{r|qRcKZ8f
z^?wU#?c1Al*<P}lhX4G`b~9tgR_&mB#!{DS-RDe|<F21~&ZIy%V+GfCzp50o2Mq!i
zYR%gF<|-IRPVjmd(x$oRzhY18jCBWD1Z6U7aueIQcRSo*ZQ^T*6)@iI@J8{YS$g2S
z&!2YBIdzSry)4~xThwj;v-u54C!>Ql-s{=&BKlET&3c~NXYwA(R(~6qS^Har9s4&f
zJ+7c;qHAFrDZ*0kQ2#Y_&U)$TPxrFe2fb*rZmUo2nRfbU(7vOK&UoyQ5z}jDnYBL7
zZ-Rp))3=D;`+wc?cE?Ov<!e}UbYXGJj6YYNz71L_ms_|rcK02bm-&0XRrOs9;n<cY
zy|rj}8h^fA%dO8J=6iX+@5ohOR$_g>dsRaBk_oK*cilC)Z+*QzZ%h4hN3AR8Uhq5%
znO}YNz@MBsh1`!jJ^UxSSVifrU0-^dC9PQRv%oL$`R8mC4rfk2eD-sl#D+JQzpQ@$
zHShVd;<K6O<6{{l9|*-Jdn6k_`4~~(Tsuj7V%$R2>rKl}mo2`MVfv#nYz<qN-R6MX
ziW3%Q_AXee6=~2kD`~o^#Oq%sKk8W&<8#HlwbK~WZ9mM^v{6YZ_;R!R(VXjt?DDjj
zeoc9E_giUD?ZpP+zf+Z_lsJjKxb>qsCgOp_3+8m&V<qw1-xP1uX_z*NTSxNjx=Y0m
zF1oN-H|_XvV$YMOERlC#iEK2`bIF_$QKa?twnwPjlBlOSS&Zqi-qU|9k5j8(8o6>y
z{i}NiX2zFX<1V&67p;0Hz~`US;u}*cxISI#wbQgnyu>B!b*r$KJH52(kg+|p)uStW
zrc3<UwJ60=>$%|d1K!8ihdg`;8m7!VQ*^=Wu<df0z{Y~xn(cQds&e_cB_wWG{cggk
zNZm^>W@Bs8S}f?UU-HFqGXFopFOjl0?(KhEIBQ++2iPd3p1|83dDZ@ZCbN1hkUa9<
z_<_mW6)R@PPT?$>=KLi&zUf%jO0BDVKAxF(YMbrDZ&M+y*i~)6n@(R(o@@QAKF(L7
z-sjV<VsG~+dv>V(?Fip$Vq(h9mB4f{No>Zih_}xj#QEw|7x!xyPOxRL={N{)$1+`c
zWA|cpGh>v6@}`Y$FCwoPU6p!i%ss={wQ*Uc<NlRd2^Pw;lagiMi$6G@(dcN;*4v-8
z@rH(*sff}G+-=zc=2^KIZP|KAWA@mOn0F5i69U9mANlUIMt%{fDQnLGYRaCdP%q5q
zisXrjYr5q1^dqP#D<K1G%5Hfw+s-!h|7ZDKK1;mKet!xHH_hId5W|#~`adK=^;(1@
zThmq71rFP?z%|=8ofF&FXtyXN#ak#oX`l6V#!9nO^`a~H7^dCnS7$LkbFjIgA@5d5
ztkts)UhxN|Z|petsI@=l=m<Y}I!XJv=GzL{41a%_FGlN4p6zXH+|k=?xBS_1>(s>y
z9?bn65>PNjWRIhfnB&3UCP4uo0yQNbM+bbES9?mG^|Ep0LBWfrH5+f0{IFjmpMKWu
z<(f^q7Kg12<xZ_XU-+zU&h|pFuJ?`a8FaRG^%n1|(YWF$_50O>y;U;zYg!&kPSdcK
z*?dh~^yM3cPPs**pFr)~Vqwp_1y7%gH1evpF?(2D>Py_&dQ8gf!KLg;#YG<NS0Xp?
z#}_AG-EwIr&yU=Uznq^Ah|N3_G6CGEooE)EpRwyQxKUe=vsK#@4r$feS#9|j{rKoH
zd8Iw<AJ>~M6q<O-Q+3PVa;M98#24^2tf_6tcAnSAaA^Iig!`7vr~dLU@L$;W?%T%m
zb1nCG{)<Ym=MFHwAZ>E@FVi2_8|?BIl;Z1~k0=IQXZWk+u=qfIlkf+2$+Q*i@eAD+
zv3zCx`gpNpf&S)&pR<i+Hsw_BU@Si%u<hIi4?X4ST1SGtKX>yfU$1SSenxzc^!9~`
zKYh(ircdAX_|SVMJtjTrfIYG|8XBDqMN*o@vRZ?zFO_V#$mPv!7nFJA@#&3|T*c0A
zeE#`@#lv0E`~SaQ#u;^K`|SE<Eby^V+(V(_y;Y}wI9I>8X1(`!Rro8D|7_)NP3x|0
zJr;Ry_VY@HuZQD>cI<uWv6r{yiTJim9i<&>|Lc}IKL41_{8w0D&70NXZQGCUoqKb~
zRpmbQc;V#ZUw3>y_|ljEPRXnKv+c9<zp}3s&7bEwiRqBtrL9*o8{4f5?oZw4IhXx-
z&#g)CF51?t{aC?!$@b;vW!D+4RcEDsKCx-pv!gFx25fcPEN;@FzI@uP{}rumoc@_I
zZ&qf_GR~MMc6w@3&YP7yvoaB5r#cE>l&ia5*=2l~KX>YRuhrET_w={d>ul3tey*Zr
zwq59&b$P~ta`TB3qXTYtH(O*2E?NH9(Te$2d92IBz3o-YHCg?x?pbYOaQywmmhOt%
ze?xLI-(Ft0<9EjA9j<$m?{~d>YoYzR_ju+XhqQT@nd>92L~gWSQkP-BWy<HqGpA05
zC<Th`6MX3q-Ex5I|ALZ-7q=dZ?Q*U+i~SL}_N2@4`$b31BabU_tDfBP&>~~E!ttgj
z3VHKbCFcLuo$SNIQ_IAq5@~Snn1SQ1nG1x1&v0aY5wrVsc%^-zmiLN?$NUYpHU;}m
z@3Zz~s5l(I>HLomSM_$(?P1Kkvn5wNW~R)G7cLsdty3G;EO@+mW<hWAOtv>E!Aa-3
zMe0>;7?lKz?}hC<+@$cm!S4GE!IO%2Wu>|JZrCm@T2?YE{cDA5aY~hf_O!euzc;Ch
z=RB)8#bhn5|8vW%0>g<Og*QJNx^qSGJlK?ZVu^lC#nSsF(xL65Iq9}6y7NCgYCpA8
zMkV8Ep|hBG1#9x7H_P+`CZ<2Tv^q%A@u~U|zp0z*UE??S%;?x(_$N{L@T9mieA3nH
zc`s+=B_!;*q4WAlXno&NzbD$27d9s_3;Rtv_4Ci7BkP2<x72Mqz||b_F>TR=OXkjB
zX1`Ev<Gg5nZ*4=@+AY&(=uR^Ko^A8SK)`fGzcr88%j4#&&Q;gNtv2t>d@*6iB@OfF
zd9H?c`->Uc4S4GPznR#tKX+Q&_-yvw57EYK=q=dgEb7^(PjY};u$7O0E`qmURge60
z+H~rCAZ7!0p(LaME3E3N=GFCPn&RoI(zDZ9g)6O&rcarE+DOaD<nsF+VW-r-^)%Fb
z)+Btg(@)wQ_x5VgzKbg=SKh5vSIkQHKYS=D^?VX&_*ALjdR?mU$JI~me!NVyXK3_)
zcVy3&x%nGDU;O+ruIJ%RQG4ApeKVqF%OAScGkNPt?fd$#8g94G+II99<Ime}sn5i1
zOS-OxJV?|wUeQ<{r`R8RPw>*_2E8AaFJ9~9)$46L{lR|cMypD#AImaR_WtglSd@R;
zY}Z`fpD*v+_4VF3QBwZ$CFS_jjI-W-D_J);{PdBpXQd8u<~*vNt{EA)AT9KHQ?9w1
z`HC6E2Bxk$uczIdx|3z4MS`b{zNHPg5v!WIsVvft|Gyig5qm;Oj1Ag|W$1W2yMAB)
zug_1TR!%hex_SA_2T!b~)_ATmm0-zWm|k^2FRiYGk5lpr&pBbi5EgyCUpKGJTzz4k
zN9B1Bz3;M)jmMqV7_Yy?BDLz!+GhTfPP=bau-)G2IMFBV_l$gYtu0AjOAGQgh{V~f
zP1mnyK3D60<9!oHS%&&?mj|}{%<gwA+P3w0{RyG6#tqyovLCJ;|I;$t(uZOHxwNW}
z`sWr;PCZ-kdiJKx)0f{2+2&?3!_<3H*sXb%jvo1*N2`o4-SWSfQ+%<kc+oL!=lMU~
zg+HufkE><$_xl#}pYvFcVDc=nIrDTrwJ+ZPOUv(l_v(tcCV9;gM*C@p`=4G|`%~*V
z%iU8PI;sNo-X|Ki1bcD!&pz_<-o*Ga`>WeeyROvQCJ-6&SK=&7Y>K5b^SAd;6>}s4
z{(0_uT9|T%yWl!&z&7utRa>SumTk2^JMrJKy7lo-Gv56NkIXWyHkdp8RO>3+3zEW0
z1;Iybqc@(rukCzw^1QvOpM334#d>+(Do#v$`&6ClSnz6_dXt!vJR7NfpI>~Qd*tAB
z=AXabVKi=ytdl)t*F1$ZZr}IBE!^7Dlm>3xx|X&GFm6dQ4fry%^%h?vk8d`MZs^G-
z!7C!xravRDFF#oQ=x5gEh)-tR6)zjl`#e-sY+ihR+oIw)xB5FFEMGKlrq;iCy=2V{
zM)hCXt{N{}bS`ZD$i8#K0mBRI=bVyX?#sKWZX3y<t16zcfAi`uG8HC*2m2KC<P6q7
zHFFHxZsn@eqrFB_ZCXuWoNuVx5}w<j*6l&F=|7gwTc>{3Yw6dQcTQY?Qf@!bWAgqB
z8fL2VluSz&`%gMH+r)d%q_UXDO2RDlw%s%4hshLX-Sg(Di*?<sF!eLXuV+gihihdP
zH2g4qZIWi0G5OZjMO`<*)9>CQz1>N{6C+F8Lnft7<hmX5#IWYw>Saj|+;;vcxoZ8F
zxnJKq;(p3Pmwi_Chx`TouMz^k%+W(MY1e&xwIgr7&%ep69`huRtT%p8|7G%PJ!RQm
z|65xg{*k)!Z%5vmZ}x@vcuxf<@lOw0>2%I*=Yc8PH|yxHJ+J3=)YAJA>&oSdQ?+~j
z8T)IdF5}|!fQ{a+>iE^fzsoSw;*EP;;j4bnxblCROV4xbT<Wg~Z*h}-?!f4?V9m?}
zSB_`dv+pX<kgkpCZG59BSU-R1^qU6Uc?Ud>Mf<L}S$iRzojKz{liW29+wQ1kQOdPx
zjK#||E|}=QFc0PBNlytbUGw;_+8;^XfS1P?d<@hTlRmnl&55P9SEc&m+KX(?^K2)s
zV=^tQ(6f8s$$GnL;gc+fyDt`Re<bLcA;zESdhw;j)wy@N8+Y7!10KAcTJH`Xz11;M
zp1)rrB10_eXH!6V(Un+@sja(OcO5kgdQtpeyrEyW^ZvmQvpadp^G@04hiN^ZSNHgx
z^`4iOQ<lDxVOaFs>Fv%>ksB+vm8>lIwRhLMj(Nhi;$i12{fby+%s1;~%Fg!GJ0){{
z-(;n?KIe{ZRu6pj?{fIrml5|4T(4gqdUC#J%F$DQca(fB|I<)n@Uf<R>YHNgswrjx
zrj<VYUt$c3zi_=1cIkA@ygF0IOt!T2k$UwVme@JxC-LT8u1%1#+`3`Q*&>lF%R5%K
zYZe>j^GU9FT<EZC>SHeHe=7pnGhL?a{Akdg{$#oOtk8!Ge`}=H$(C>!ZZ({{LQ%xD
zUflk+@ux(|nVRiZjLSdt+WzKvC#3L7sb1*aEtUDr3^N&KvZudXf5AW?`f19eV)HQH
zZ02KH^TlufTzY?&u+KVc8JD>`s;b=!KJ+)QUE_32q*1#4#RSpYrMH&}pS80syl_%!
zmii&Lck|>*TYGX-k8~_teEY_Kmc(1;><;b`rz`87<c)I#7n$nDoqrW}PUd8AhJMz6
z_pATdMYzR}Zn}TtXj1s8*0P-^Cf~68R|;Nk@F2d?dVWa6J5l@owFji?6|);<D!)s;
zPvldLy*cTj+#bhkUULL?b@@1XZggHQds4)@MU8QRVcXL0EI-fhI`F}RmG}OH!;5MT
zRwwRDJFis#qD4jJqUj&UZ4FA<4_KM@9B7r^vHW=H{>Kip)8}|UvYx~7NW#jD`ygN9
zhN<T^p3V0E?QgK-Zt2Pp{ZPrA@9$;{eGU8i=FVl|bG7aUX`3X1|Nd_>;CGs_Vliv{
zr^C|^9TKT|d35@;h5to*DmjiVu?}_AjE;DpQ`n{PY>B}0B?9%aZIdk2Wx21r&s^~=
zb*aU?<r$4CZALM&u9JToI<M|+tGe`O{|-h=-|a2OGVA13#cy3LOAKVORjjm=yz-n)
zGRAeqp>J0t{#*Vza6+&!>7!#``|f51ImY?E4?pibl+biiJ?HyXiH$wnN@qBvw%MPn
zQ(u`R_bjcYg?CQrJaxGP^_|r`-`QdXnOAmmUi(qz_)D>B0S9vk%gc67bwPXC`9EIz
zfBdnUMV48yR(-CEOh?YNc*hUT57_nVZfNdzirJff)3(ZzYjejRF7^zoi#p=-0?+tt
zzO8@e#{0V$%pSxv7JcrvF*bSYKQaE`bi1^9KSlc*eqLA-<!mbRO4Hybt9yOZn;AEo
zqWAt>w(-ZDuZ`*(uSxlAJn>vXV}dT%mvgQMC-eO4RNoQWEunMAXY&$<uY#_;_eG8`
zT9bCdf=6KS#HTYHdfXOqT$<YP;P>0mM(au2<`sL^-1J?dZRw&d>mt3FcW>os&d!b!
z)h5Hq2WKe7o^0fpyhK~DM)OC|2i5a6n)R2a%5)jJ?wWMiB<PH1lAn-V#hk9^-OGP0
z(H0b`;^Fc=qTp%tvdC>w^ylMYGZP-Yx_$25tK8_?yb0%>j~veR@BL`r&(|X(*eECd
zq$l<AE2p*myf^kwZ{LvU@KgQgwP%(|EUKIdl>wLTStdPl@m6y0k@s=wo59-=@}%Qo
zT1!j)Jms{zi9PH^kB$kR^brd7+HlNu(u@_=mW<0<J%p4Wh$zhwny7ND{F3L9$W9L-
z<sXhJot#Uz-?W_y3Uw7jNT{C^IRg##*oi8~)`w@-cc~ce`(oG~J86b#i1MT(GQI*6
zRoqlM6GN6&sCITLvv#Q%@^q=Nao3w)UgIHjc$dy`mLwCQP8CCIzB<7}uer4*sywS$
zTOyF#WA^2luDXg6lMidMTC<_+q#4YDYMw&MKY~6iec(OsXOK##rATs@ieY=^k{Oea
z%u%uVU?F;5++WGFXTgQ9yyBioLf*UPOnh<ekK&{wZ`P%-ebt<FgyVCD`ZICQB$lH3
zGT%!IK?ga0bc7fzELrct`uMbwUWbA53&Ws;KaS7o2r;<RGhsvH<A{?RErS-F{}Xgi
z&(Ndeu*VH$B}0!H1wxJgKi&)cJ4biPp2#vzMk7We{&Tl<ce^mm(3+Z*xbcS2P1TBn
zjFtQ6|8(CnLqAO0o#TR~!1{G3TPiGGmRlUZyP*EzXYV!hwFK|7rzfR^i_UL4W*O$P
z;l2OHAdUIgC33#Mi&pM+TN#mE;hXu+`p|dvWx)$R+_#U@4&{B8!(JE9_q5;OX7-YV
z<1K6D$|XB0w102}q@8^wenw7ebFvF(+Vkd{xv3nxo=<w$e`w)0<(i;0o`)amCmcJL
zvB^V3@=du=z3cX=FJucV3Uma{U*1#l>UT!)9Bs89F@?;_3m&>EPY|{$iYafAPF^%&
zbEbu3#|Ob9lXny}rA+AOQ2&rBDef{u@QcJlmVdWfl;$+d78EioxTbpS1B2h4!`x;s
zx+FYeJvSWN-Yw7hvBFhifl{4{k42~MjvqU|sW05H=KYe%9gpj$opq{bvFE7!@Th&R
zQ~je?QitBXyc;;<=)b_gNV8kZCdWNHq}V*Ovh4R%$=`dm|7_|v*;=gEsbAu9<&<L7
z&Ymd2HySqrb!z%71zfLmC44KGdABc0@XR^p&D|?RH=f@rd&1=km$@*TeW14CEFB?N
zHqSWk4ZDjs>2_@Ij1qKDs=v)Y|Ho{u*+=9!?#njLS*+|{aav73%T=Jip`X3xn_iQk
z`X|9a?R`3rn>dV{x>krfF7aVVKij#JJ<sKWm&}rNY7vi>GE`s1`86aeHifawacT)x
zY6`1SmlfQi^uzIkvx0rc0#Wz;&D9m<B551zLs-_j+%CCvI_5{Rf${mg{q;u4`^#Ik
zk4{`xc24zUYad6HrHl4-N9`tAR_m_T^M>q;IHCm4$mwmq?Wo;!vofJfaEsEno!gja
zazs5$JM=(3L)C4v>!K45ENgRYBMmr`1h**punKNbnlPE+2}gRQ;1;D0_XE$JSk`iU
zdDAx!w7zr2*M*F~zkd=i<I(u9a=$*Rx9H=MDb~lDzxgW8pRST5u%4-R_XL4e%wH=U
z7SBCtdm-$ta{GdaGiFjjL3gD+3@7|m@%R?BxGXF~KImKX!CU3~S!+07O|04%qBE&+
z{sOs=uP4m#tY6x5RdWZ6X03q-qc^+qPf;detzFlq_wpyKJmoL^!kGIcA0uBo1DnjM
z`dw_ltV|l)?DoGrcAodm+_a5F`<93tH+iye^GTBsjj5jVKW&O_S1-%8*w41rex0=4
zW?p&TW4prG^X@+pJ*P1z{Cw0^XCJYLCpN2c3oPCou;Pk$`+WX#e*V3`!~@RGF_Z3R
zE)Cb2dTOb1#N}#^wDz>8_pa<S?V5ScPBM!<qsF6NW~1ke)QzF*=2lOWDZT$NS5{_z
z@*IX`+j|#Uneli3Dfl~eP3@BOThD*Y@}Knd^v|HZ=eknlTG|iaw0y=Mw)3oS(gW@p
z4w1%<EBzHZHRJuW=S3S%^;#PHVN2uodtHfH$1SF;6}@HoM)AOHlPwQYRy}WPvypuo
zlDnY!{;_NG>sjihdeWB${oYf+!5MqZ-R}O0@G=v-GdD%LbLw3GpLEVx_t5)X$&Q})
z>h(7J&s-_A=e?+XDfp&A;;p9lVo@^wsh696n*2Qeuino0tNoeGPb_JU50eTVFQ(6$
zdXi~L%SId1jqEO5fB1r4T;lv?E}$5+G3rF|<$87PI;+qB3zH&m*Gnxne(7-aiQ)1W
zZo)60ul!<hM);PQ$@G>@Y1a*cGGlhP-Cp&OyCV2_@&~3yMp2n|zTXKt(J$DaEL@Wn
z`N6D7>W9SY$w!;J);+X!{PN`5wSY^!@^KH|EIG#eX7;R*Rdd(Rn{%Q2O=peijLh?g
zAAS~yGTD4y@Y$x^+cG=ykLQJ3*T2!$_Gt3jeZ$WB#J3oWlKtm;=f`#@mi|1XzHSo(
z?;~D@r`NnThGt&ppY$+4y7EL4(?TxKr4g&vO*}7iA!viK<Ki3Zw*8R263;M8sNwjO
zhV+6zuHXNa+TK64UTMuujVIElg^Qmr+xEJU@6Ft~XT9!3Z!vv$F0nlL>P+P?_E#SK
ztbcRvJLkQnZr!eCHy?Twvu@WjFlN)QzM6D^Gioh^q^{>0!6nVt&NQw!zI>>A%D#1u
z4DlClxymxMS2bq+);n=oa|*A?x`tH~%{8jzAK9B!HiX$*7PS8}yB8uHTN5l=l%1Tl
z;+l8wDfRL_ZabsCEos{ovg-OIH{LhAvrFgkhODmFF`F~*t@ZTWM&sh0fq5pDi`LzL
za`KD+ZO%@$?@xmRwVyxIe(T1Ty?N6Yp7M)sCWqcQAKK@3WlpK3xapk7DgVAml^l9A
zWmU|&Yv($>mCkFONtxg(P`%_=&(*VjTf*1O+{+_AO{wH@@{XLMNv%_h!_G~gedb46
zp21u8cQ(QDD$@1MJXx)I#)nT{`BkANotMdXC+^SkQXTgPOX4&Yg4S$Y!FB0(#?tht
zfOpKb8$NpV^+}jN;p$Ba{`4iL#Qq$&V%w&j&ep9H(~|b?JK2`@J0(D=Fy@D>NLfhT
z)<9jac?b79{p8WSZ};qg)bdly?^&-b(eiE-uvs5qYpf!~mS;A#o^d;9$dgrY<MOko
z<~Uea1{El|hX1<nzVf@m)@|{uo7wjqIGVdMZsNJwI;Pu;um4>9xuRP7w&0=@Vlqut
z-+z5veWj9vFSLj~azodK-Fc5*yy<AlO?J)S(CQRE|CvX9bkinv+lKbtTcfwmF-UmU
zer)#E3l%jC<`MjtuFF;YSY6+D<>Pdgclqz-4#a<zdvWLJ-M$}>w=evvK4ITI`#-*}
ztb2b~1#`(vG^v_e`qXT9kgTM5r;4v%$dw7Rz8;^)^6pl}1J$75Lnb2Ej=ifcJ9pw;
zYwW?>I)9wKb0_o%<e022k$tCni|d-{pUQ4e*#|aFFLwsB)hSG7J<YrF%^%0#&h@X_
z+X5cdB$zHcE^Itcd$*{<TjAjIE<0GO-AisCN^X9V`|tVcch*XRhc+%#+Abu!<cUNi
zkD2u4fPmALpP7Q$GnaEmY<Ryj_l?1dsSe^Bs`dp<v*4<pqwaB_Zin<U`&dI~*^=k`
zl%1Gn27R5T*qEyszjop+F22t#aVh>!uC_4LzdZB4TU+Jfz0a%HeM^3@Z{ud=mVW6u
z^OafVJ6lds_2Q9LZ27b^v@U>ew!{05o!cD+PP*s+%HuBGb#cE<UH`+Irp0^r-8B3f
z`~5^j(u*6D_cl)cx$x(Fi9Cf<e}v+1KV3ID;J>hQ)g87w=~jj|zaK=+<l!otu$jM3
zWc$Oyj^#V+CAa4`ORP8TE0hsZvN@vmi_z?&?bL{j=dV@It1kWRC*#e^p~|HySKJ*S
zyQF{OW#c(VXKeTQA0=)TA@uSzzpsK)?azf(Rg<N7Oq{1n+x)X!bEp4vn7N)vw{@E3
znjfcrKPlfKs*<=cZjEVp_^~~n5@)`>dG_+txl5w*4snK)3hHx?J}V2n`bX(}TZM#;
zobTyxi{8X)?{1qBI$QH>+oT8g%U{`rt$lEpTeRXl+osG_&S#g)wC<K*HDwOd`^U#M
z^E|7}oE3{%4%UX(u6rS<Qo1o#V>;g?x#t{HbvQ&ryw_fG<g;0%-E`dCCwzL}ygBjO
z)4k>&a@43kt8Zm-|L=|m^?#ZR>wXj^q|`8G=mekUPv9=nsb6#aOy%Yv%lxW?hilb2
zkIj3baM5v5vkSZ7b;r(GH!NrG-#&ktudAH1!9>$a4)uWI>)StGvELMSJAK}&viqJ(
zR-JynG-=++2Lja-m%i9_aXI%Z|Eq@EwKR5Ct9tI9@Z`~P4yO6{=ZjwPUuAZ=K0Qrp
zpMNULWbXw_K1WV)e=o6GSoG^7RfE#QUi+V4NG}P!9{)l057XyIOedY<mcEoaQ}eI2
zKez5-@?ZTq4>q;_cPm?KxA|Z1J+|ZLS4@A>`SVN2kMs3S#@F3DCuy8hJHR0&aHnCP
z-?m0mj^8QS-~aOej5TF^cZ&bFzwB1G%_%YU|J1wpefa<3*r!K@xn`A)xmVdc3O=xH
zTJ@*o{o-mNznwGmuiLANX^3;{zQ5~y{c&fC;w{TP4_<p02*fSEab~l|nXA9EHcRFt
zpKIy(_RG@dT2b)bkdG&L&WWDSs{cJ{@_dsRJ~kug)w6OOg@u={wY&La!%d+jrMZ7L
zZZl|=FjB1Nof+Y%y?igjO^I_G=JxxSG%JW?zBnHD%JJBB`5T<pVXGX=f_vCZ)mQB}
z)%$f}w#%2R2N@!Fy*PZ}g1W-em$O@{j@)%9{c7@??bW%nN2}t3?Q}0W?g&5JZ^`jJ
z%R;i{|E?|Uv-9I5?IQnj2bgm6T|BQNz9*q!hup~+mWrD_|LQfKNG_Nm(Zc<a@du=J
zcG2WAqW@OYf9~F-t>0f<+B9>qfR}%WZ^7k-J3Z&7G^#!C;au=@m(c_MfD<u0M3nb)
zA2nDY@kZzv!&I*9w+RM6*xjGz2`D{U`Pof1UjNC_FE3XX-?HR+HOFUCNtMgBUp6Yy
z+jN|3XVynvSmGX(qWt#$#wV#|Q$N?giRI3}b>h}P?aiL0EVrg4o%pLUaZW<ik||%5
zU%rdnYCEy9@rTZhHMy4-T>bYwKg~u>BFEs^49U-7w{ny9X3l)R_k4Bb^<~d`f_23H
zvx$`THmS>2u2uce9`HwSd6v?OE#G48IXlz>?X3cBLs(yG*LTf4x^>|UlNs@Q8eT84
zN;SP)V8@X->w$J<&Y9hdUPRl(bp<XxS331wIO9)Sx#=(07V!I9haGt-Ja3D%%i^Ca
zw$6GbyKC=y-S>Bo@jHI{o3-{@Ew||`lk7F-X4WRvjp?&wYs}xzF0Ws(%qu>Awj4`&
z!Kci5o*iu4Z?J?;FjUE?e<Xe8#gC3K>%i+;7g$5J7!)nmnSR<_7TLUO^-lZ7Wu-1p
zKiQQD=5yzFmKPZ0ww5~_*%Y<fR8IQ)+4s-hXRW@OQCIW(L5_3&txX|{@^uyq?mO&%
zHtE0EJ?r-zr5#ISox<bHCw%pk+N1tZC7VZlM~waMy_{R0HLqvr*v&L?$ANn0oNsrZ
zAG%@kPwMfZt_wWJeGkmt(DPrZ*m&KuXPh0CUmozipU>z2h_Cx-k)henJ1@D*%Kx9Q
z{%YUL{$+O6_t0vG`B(0nEK$0pD6{p-GxxWX>e|ECAL(j)wrb*xl^^f^DO$dg|CZpQ
z+>4q1CEu=XulupzT+V(W*DBLjrE6W~KiseXR?#o_?tR_j`I$BxS_VNy0?$MW9j3K&
zh!+SPa1^-f$Z$KTf?YAP?6}&xd+VMG*lR{+F`74)-warOQ^X^Q(Pra(?hsA={5sZ|
zWh?dPq~Ds@Jb&`@hQsf69@Tzra(heN-Oq<4|JOM0S9l*Z>u<!Ljf;Zi4oo$SxhVY7
zMStcZ(R$uJo0(QkTebAl6`4D4Yp=S^p0vFocg6qno94@WS}WU=V<RQd^?K1a7KfX6
z4;k+@ypyt2(22{mYQ^&MJEujRRxO&RkzOh&C~z|BrW!v-cf+1*r{WHoCeJvbwUy}<
z{}VBTLuF5<{diMYJ7@J~_E3d3tsfH(t-TO;?5Z=r`-Z1MbLy|_dz_4Y`bLiR{&oiQ
z=|?{un9Ekq-H|irNjBqj+2yZqX{{0|jDGS{!upS1c4CRGft-Py!M(6;rkl2%D!m}i
zvTH}GhVv1B;f^<twn^trK3m!|KS0CCQ)TVvIk~T#gzGZ0b$@q$J>9%z{@o9o4X0$j
z_2hitQI^2+=~nBm6XKO;>v=1EoL{bef5TDE$f7LYW}5eLy+>W|Qq9gN{mgrOt#R*X
zGu|ThCw(5L?`iM+ES7ppe4(-N0=3eU%5!Jy-<+EG=xNX#{><H1#dC!BU1NXIwLSKq
zwCu0shdDM|;tYHR-oM~W6TW}zvEAI&7mecz%T2dx%qog&o+rD>HM;b;;jgs%BMv7X
zSa|4ZKbO07?5=zMXQ|T30m2jY4@$h-rs=jzD5X+UEoS<+jjqhK?0oMoSK6=#Y*t~?
z`q|mbxx>xT?d(#2(<^%O9^W^8`u&z)hTN0w4Jy0p^xaQ-h;FvLAjHAV!Or3Dt?=!U
z{GuC4`IE|nViT{&URj+U>g!UuNojk#e!WeH@7_4Q@chj;e2+^-l-TBceEP|EXWTdQ
zt@q4cYFx6Ao|@_JJyT2lfU5@Et(YKzHg8_PTT`?11ziuWoNMh|9D8Ar`<heBZ%*5G
zO1xmFrIFS;Z!<%SkLFL?=i~@niq@-nTbaOWsStVJN?@M#6P87jloe7${eNB*+4$<0
zy~C7xl|KwG4}Q4H;jwII|D+c7_VjYjMj?(V4hvKcswoCALD(t!Z@V(Tu>93pS-Noh
z+@(?BMr?^;ECnaeeS2hh#Ob%EWkur4O~r+ge;DU_uR5l9LHiD$!UgWedpS?8@q6~J
z{$9zhw%l!f%AxF~7q!{7eqL6u+|ukH`t*y)oB9W_iONp(@fz38_K9B3cW18Pj-B(?
za@UIqQ<MI0d1HTa;$pLRFOu2yg(JVte&zet?SSptOv|pm30IRvKkhj-Gwj&=dCrM<
zUiPj0DUiFiB5py^tKJ`Kmv&7T`Vc!UIG@GY?dcWiwSg0gUVT}qwq%{ak8*X7HGUk-
zVr*jPB)Lyp)pwZ&u^ujoIXL66e>)@J$%=>b?3n9r%sn*wBun&bJGKosgv4CMp0+c*
zy2l#8_~C%%vp;Puo)Kc{pRIqCaT%ZQyKwN_lJ{=EC#`)iTiU~OeZ!dq>%>ltmkunU
zjF*oZ9iDx6%f+-4tY5fq{ao;EuaMZJt`3g%)BSF`{lC<{xZZhn{q3I2F5lXw!qVTF
zFW(p0sJMJkRS;B~DX4qPHP!0=0fVo7*?V5-z5B&!>LGt4;=NzMbIJ05Dd(%F$)4GK
z)7w$V;*Z5~zGD5vcS{|(+jmZPh>KR$UtQmF%ccC!%LS`*w)|A%7Sm@p{(HAVT+h#4
z{(*AJp*`KXllK2vXS0>}^U`{Sgrc`>B98vu>)jlpS|<uJ<#MZCzqI$@lc)*S3gs*l
ztPOUW`JQB6DR;=|fJ6BmF|*w_j@{L-lD{ADes*ov^2Oet<8E)aXPK5WFSBNm#(k|Q
zRoQCwdY6Oz?ly}&3@ih0>|GOkn&ZZsTYF}o-oX5j`H*@z%f3AV!VgaN{;{;%UB6<r
zLj9qq{pA)+LO*`(?QFg4y~vGkYgbWqk&cp)_N4ni4mIC+QmErm#*u0)rlNj8RhC;x
zan9;vO;4mQK23H!B0B%{@un6hwLCrNJ5kAn4<q7LxaLF(r7u~vBVf(DE&O*F?`+g8
zKf!tAlHc!1jEbu(qPD%UsaV44q+<{iYGG6#YhSQP;K>&5%o8Q0?6w_q9p11csdJif
zZWIQy_Z(i^>2k9uCfP4iRD4k=^KzBPGq*~~Fg;G$I9-ByIZK#E<@5w?c0Wf836Xzt
zr*%2lyEV5@<Bt;+pRu$#ym(>2lOwEe5-zCUzRP{%U;=yoaXvns--oNV7X^fAz59Ai
zss1|W{$mzb#4Sn{Ja>8s&ARpeLX*dZD{(PiUU#n8`JSA(d)c=~k7N(~a4zFm+fw~E
z&BnTI_WYPG-woTj${#&-i@MpqBK_v);8hp>57)+VNOx>s8tUt)dic<5kym!oe6ONh
zX8#Vpt1qY)A1v{5TQj#_UFk(pqbieYaTN#6F53R8Z!p`oeswv2)R7#<1A2Q~{n<Gu
z?4SCH(Qw1Ey$KQS7nfgGPZHVDX1VQ{--*)=XTOQrRew5a@%hfDbq|=*XBAhgy*=j_
zx#_i=^nKOcd0Re6mi1n=)1DIk`Ie;7)RIFUYUlLC_T1g#v45@A^OSoRt8;^z>J}~P
zY%AE&-j;dOKlnm@{Nyb%H+LOtzmcByD|x~8PU$0e7PjtAVw|qMcHX?=%C352$Ja4&
zySC+7`P-hBdzJU_z>B0s=k9VAR{b%b@cjJ0*IqyOFTI{rXyq*^aGGtS7teu3-(Gee
z02dXpYEq#}dTEI^!Hm;R&Plz|aAKwSk6`n-4Y3~#B4*vON*3p+->`Lu?Iv&8yXEaW
zpYJJ1)HvTKb=H0D)sXiW-q!j$N3AZs@6@ZN#I@4g%=$}NUpq73zS*Z=epyymvo2Gp
z@nqSZjC=RY<)uC`{rIrLH2=TDl@lk#?F4sa{gilcxhT}~?yEa3TT7>8_x|CKez@@c
zv#WRHf4w=tzg_U+p$OeixqqbU56@rmH+cJ5rJpR7NB_&VR9}r+`|-w({5tdc@aVH{
zpC8|5f64x*Lr(VI$_f1T7iRos{5#A0U-XUZVkd<cC9ta=S??7lFeAnE+kcgBwdb?d
zS5+C+YHWV5eY5nPT1Y`}yt~!w)fY6U^at#e$UMXzAok|YV%Eosn?7EsI@qzd<;%Q!
z?>goG|5ra;&}e9KN5a`wA!Ck|{u9-VHxvCl+=V*J%HBq7i>^rRl?yAVi%Youl;cuE
z!|iuw{N)q(Y`m*$di73Xxo=5><C*B5JL!+?izgb%SnIutFuVElgp${xtpVZXUky^H
zvd08g`@|{E))tv)w_)SGxeGQn@8;b4sdd?vbM@H^re42%>d%#wo9s(@PG<?fecf)&
zX}Qsb`?Ar-BT|-??fdr3Uh&d<iAUOm4WFfUPpmxsf+zQg+U2^iBmY%hPP|^`=KQ3i
z;ugDE-N9|mnNu>W>Zb+9MoioFx4^Pb{8VOY_S~S&chvu7=S<)iP*}Nh+wYjWYa{~g
z7}n3Xcr92wxjt&1Y*OJa$(cNnK`LvHN!$#pZfHO8YT@<oaR<7e?OL$z;fuwB*E%n~
zNLcUJ%*q%be)(}hN1gt{<Igu1x9k#It)ReG$yr;vA%Df>{Ec-=QdVCUWp25bkSom^
zwCE{^kTchwlIct@k6+>!%ssG&*>dN$V_kv%(q4z6=iixYEp$$={*hXKKuPSUxog7t
z?38^{8yR&UDVRoXwBu~^T;tIm6(v`*%hplEkzG`$*g&ywXUUQ2+7rCeq+gcR`>3x{
zPU6siynI#FqSzemT^j`LmZk1nZmGAkiA~VFW5e;5rGDp<Toy;%SZ4nvC;P?HkR~bq
z0}A`3{P)CkZN8{ok@B&7etqC<{ZsZXZ7(0${WNvHYq0asg1sUchin(UGhIDZpy5Sv
zc)v>3{sb|rCz@AT?`jr0Y4Y$+{?uY<<FqVpQ~L`p+im-@jw)64PkEI3VC}E$Bhi_?
zMjn@Hl~zqS)cj+{{W()Ym+~~Jh!odZFeRO1;S^VNnf&YL#a*v&xmEkznd+cjfAggE
zdX;SvI{#$9-C4X~qosjN`PXuX@25&vdO0vDxhxiLTG+DKeOur(r@80!;|`Pt?TbEZ
zGKb%3hT0D=Id;Q!EBXcdrw6T>H+yMg!EPVxu)Nll>wTk6iRkR@F65Z>zPz&VVeRL4
z{8vI=zRtef{2=Y*oP!E0YWfZy=yVRc=(e>!%sTLVv2Bof|0J93uDyjGQa$AlkL2+1
zuL1W|Ox2)0m5KzUj*8Qh7b5;E3+}Mo;XGacRVZQo1f>=G=EoXTB>!H1cydK@(#Dt`
zU%l^^QvEL+FWcEKIPU*S`PbvUzvdrf{^h&(_bS^3{;%?-f&xFkzFRMwweoELE!Dq#
zWgh=rosUcLe3{tXsae>7)O-2$Yr(|)t1o=l8@gn@eti9W)MvrJ_bUFhXsx)m;`&yx
z+5`2sAKO;#*#En?ZrMkL6$d;{I?f0_!Wb#16m!6Fg8vR4j_F%A+&pUbuI}RRA8o((
zzG?pb%&Ot4=APFApX)anxT=)vF8twna+1t$&OHw&o;bROIY}DauZfMX%=*nSGe5O$
zU(3vjldIBZdoaISw_*M7wmQdqPX&K({L#GU-?w{<)?_ZYZj#$BUb!%9Wt5h`>t^vQ
zI=o;1M}C{^T$jzREZxucWW(+iww(KPFW-2sCf(<;(xq4K)l1p$MXdD`M8CRNuI}bY
zsoJ8W-NE>3ipa4KbJrdSt2wZ)KQ(oA#<`AUw>6*YzFqR-v6VSE?X=JFs|C(;L-Tw*
z8?0sDi3vmodNrEea_O{@_jkW_X@}|s?F*|9e6iZp5V1Ym$}{@S7U@5!#&aLX%XIjN
zd0ysBH~yFTqc4o<rvI8XJ?tM->ZkVT{Lr}kXtGm<i}$}LY^Pp5=U$O5nDz9*GVV3U
zKKQ!0JdaO{oj=D=<#O@+J+e&sO!=pd&Cbt@(~~S-rp#BcJmukoUcEZL%()-Aw{aeS
z#caja|5f^jwCt~1m7f-3hh1dvF3f#znAQJ#%T4d|6}^`~$6lQBS?Y@H39;K3WRJh7
zpIz5CdphgI_n+5Xe%UXp|GbCu*v|GX$wx0nC&%7Zx#IG~yQlHJW>8N_=9EuCK06-0
zN$zGd<deCx+;<V*Ba>t7e?B+=Pci>I?Lg7otuc)+zxBM#cpU%0`s7c&AE)MhnA>2o
zD``PfN{MEB49Cn$d7Dzs=O+(z$X_fIQQUd+j{MB}#zm$HzZ*rl%A(G)EiZj|Ba{D5
zZ<t;5AEkqir&q09?`>vy^Mm=*c9wRTpezm%UJ+Tpi$XGmuGf^OIYoF>?Kru7SCjpF
zS)Tab29ufk^>MQT<ac~w%43MB@@!z59;cDWre~}1TBYd3_s<vC8?DIM`_{wSrD0{7
z!Z)40e|w@<)#q%v)N1NgbVP91CuXbZj<HT>1eTn5)#`kvz&z+lJI}TgziT-2IQ?YS
z*iX2feIj?mKO=FaO%e5trgaUIHkqF5pC=aItFom^c6p=116`4OozuMw?Of(nxAR3F
zeBgij-((rftjB$JWd&1?q$<9i{mM5tTKI$6&0wF!zG5wF<W|?;ezLV<OI`7I8Lqd7
z%YDwaXJo6+>vpYQKl5&2{t=BuQx-4j-xl8YX;$jC1NW2<^3R>-z&88r@9hpxO!+5#
zn9f<R`(xvut4f>y9=vqR+MAn!e@^nbSj}UfeH4G+O}A>DneLvEcy4CHY>tj1Eg@d3
z{W*ypZ8|el<mBh5@jFev{-%CW_?4YYV~e<I=5fsRR+PSd@>I^fD+}vi9=^E$rHS&b
zbm6GC@0Pz5o@B4{!0PkE?K5)o`x0iBF&X>peJrJaWaIl^j<!qqbJmorulU?!UBBtM
z?P<PazrIaUy)IUE;jh%LcyHcBy<PG0iuoJlcb#%OnzJeC<2$uW_s^cm@XoJU`lEis
zlVkVJO~26O_dz<~NY7VAg|$xV6`GPlRtK5$Po0^4fm3crvFy7kEw{>Vez1PO)2-UY
z?PVz=zbe<)7)wj$MI7o}brzchSkHDx?vVELkyOz8q^!4~{_8tKj~n}M-OgUS=+3+i
zJgt>!Eou=-0`Iz#jQJMm9O07Pa4p8F<UrTSdX5W>-XaSYFi#6O#AB7vxo{=xKJS)g
z*BmZZF3I5Rlb98i9~_}$A9J!sJtIr@Jp-h#I$1kqRZ;NHt9nZodS+zp{dei$(*Bd&
z4=!~xiR}2|#A#gc@*ty^Qu~6HrD56a+uCMU|Gsd|AiI*ucdcXUGv6+UGX~k3OulP3
zi{Gginqv`Budx04gxd*!Q}tYmZeNk&N?fvIV#E{mhu0<Ae=#lRQ_&Rne3vipP-y6R
zhuy$e?o6z_L*YliTUDm+1)nE-Z+v(s?4jSDn6A%?uOh$I+^+d@xnTZYw-)y&riUG4
zyE{_q-yBpu^yD^|^4&6n!YgsHC9OSjyuxB}8+?z<tG8S5m;3dryUp7!T$%7^?G*kF
zjrn00HvKdAU+?ddu?yPpo_uq9cc-;ebHJn^jis?$_Id;}P08m@&0ID~UBEN*rseC~
zXUjj_URhZ5c<!ESYN{{ZD9tz`Dd2edP@4Gd9lu@QKbGz?{vE=i$isVi)BI&mCdBPE
zuh<l%wWjf2z1lZ{&D~s|xA}j}S5u#J+WY!7-{+kY3C?$QWh7#KwoJ5Eyw?Ap?bDx|
z^|6}&w||M!@%vrEzHgh*<7j3Pi{fctRJL0!%9=dc=L%a;%q|Y*Z9=Wuum9U_jjVgc
zws9TzJ!$3lkDniDV7T3Xd(z4)7i%B)-mYBaR-N=_#l@N{QNCa6`R?AkZn9)+)OX!0
z8A^w4?cI2DA){j69=RIx>6btG{{0biS%qox+Z`A8?9I0`dBXbPVPN*Xe~l}4oD;Vb
zWcqr4qSDlxub-|es@iqdcb%?BZ1$7i%`NTwW``Hozu3%t-%@2!>&B=jw<~@enqU1f
zc)RZ-eYpwYf9^Z(2w!_us=xPl{j>7V<y)`jnAq>Doltk+yM3m6Woylk#x_H~7uRDx
z-9NN%o5wr>T>}k8Ii*O)gh^Mo{F!{?itYNjD_))aqS&)$!r>(c*DKGxYFNtkR5?V?
z?bb}jDXiAtGY(dCfQO)x^cD9$pLBo4ekndF3FpJD?<P9FYTOYhv+9#ay7|`nmGx6i
zEvLN=%0DWx?$OUZ2h`4_Jb9b<xj=k!@b=wHm(8+%v#yiRpd+z+;%^_DbiJUq<m0Zg
zr`4?GBV9aqh`oBXPHx$nPYv2x{jnyX=JoQ!vySn-Q@e6Xd{&V4`o^$0f9=n~lT+oV
z80oC`-LhW3SNX{iJr>{7Jbd48Np<I>hM%mLj(>93#W!Bb)u_2;uE34fgVB8Kr}uw<
zV<pz_dStEjhL7CaWPO~aE=#xe7<p_CQExxJwuSrYmZ0$MEP2y@AF1!<{lv(mvQ<Fr
zlaj?Pmz6<(Zz)z?J?mkRR>@)VIx{8uEu);$>UOpFw%g~$-CYQ2PIG1ptiON0-KcFv
zcm2yk3zx2`7ao7UVd)gxo$4mId2!1=s~hI-C$>k}3-b0>7&6atpBf<KeC?7@qjo`C
zZI8}YtH@f*kdtijjaxhur|mwHzl?WonS%Ot)iV~FuNGdZDvDb>cYo^(+bLSFGJP)|
z^04?(cGIK6@%Nl1nd+Z{Z=bVc+U*GnlS}6grPME#^_RU{wlVp|GJ&%@Ce1th`jq94
zPmFrS!oNgWcY@m{>5RvAamU*RSn9W!h|ieN^Kj+V{rWueTm93PO*?<ed}hI=Y2})$
z4|Etd#X3bNpDRCA=KXSZ<HeNi6*t8mted<!>TBD&kXL)-%h`@~_#N9^wU=3{u<BZ-
z8*8ysNp*eG3i(G0*>5KKCb^t-PI+wi(KBgIug`G@XSaMq^}`?6y>px9INf)f|KWh#
zB&~AUCATGBG9Pz}jsBnMcfRfDntSJt_dA*fwDT@n5~z`~<EF;7oSQ8&BG$Ucul_!A
zzasUbg;d<<M@1!{&#o^oe{wM;<L1GFr|kym-`?zq+B=tjYyH&z)1jer?dBAwHRs<y
zUBP27b8wn>;WsCJotoaZU7i{(d=FxLnZ>uOtBY?>EMSkn*?vMxMnLAmH~x<Fv-9U?
zdA;amn<HhtbynC;3%%oZTOZv19%T9Puwc&4c}0uNWGtUv{iX4KL;e|^n}_CA?3~z^
zbKb!FOx<^;CyZS)Zc5*+k9@kQrrN6hrqY|T_2Sh{8@ii1UNb#4sxWuxPFi!&L0<5G
z>yOSC;Ueo#AD78rlQiRj_5lN@z<~Kbj;gl1vDrLZ@J^=VOzk3u#o-BuKE49?M~Wv~
zl`+@9^E%nmCjYnTkJ1^&cf!l}eYyN%*ZHHN&e1Jf|6SXYyP!HS<msZgdVclHNVAHL
zlHwqV+02IvYgKl)8Ec8vK6_SLy2hokwYk&wf!~DhadElRwa@TJ_FQ`1u6FrYQpoA^
z3BJ5{9P8y?r{^SJIVL;z*mCP>p1+S&Uf3-3;>yuKx60(sWS=?5K5P5uX(tbLM}_L1
zk8kK)eQ?glj(3-T`uw~6+hP~zf2~>dVio!OUvKk_IHLI_ck$}IySCL;dj5~RlzYu*
zUMEA=G1<bzI3@ls2L+8f+si{OoqQHshtF*?s$~!VG;#Vqp-E0W&rRQN%a(HT72Dx_
z%cxO_*;Q@#hWT2XSYO(2;=OGAeZ`u7(KXDK)0HdL8SV(ooE*FN<jF^q687pH+w6O0
zhF$&a$`9H>41a8z-^U&gJo0>2fmp?3tA2q#zOEOi@BUTJn)F}J?(YA4F0YugGXH-M
zt**F|Rk*CRCCIa+Q#+v3B19;UO<%~j!uqJW(ClrYU+NO(O7e@nc69P|@tEhC_ivf!
zkAT~{dw$MV-f?;VOp!_-zP(d!>GX12{N=5(FtsqPw=fkrr^%U~{ig3&Vbw>b%}<WA
z7+1yJE*0yTmnK#5Q#3!)WnQVAa?#Rxva7#t_p@2;q5Pxlg{PiKX26A$lK$*0EEnz{
zv<oWS{Ce&0^NGSP0e`bUPdlgj;W*Ems_nBEs9h>((OvRa_R<t}>GCz=Z+!1QnbOtv
zXWrY6&=0q6$lk73`{Xi<VG;KhDHbt?ce;{>cAN8Oe4e+R<5!)4!;X0${>+q!RDFIm
z>#x(vr1+Iz4|L2`(zJT*_xncW|B9^sUdQjcif%kNuH6l}l-+ZS*Hp`CssDqidrPML
z5aievGwb^PXESa;J=--+u&tmvUaRu{#+j1ye$1`>^mgwj<t2%eb*k%UC$N9*5Xg^S
zzvfimw{Oc-HNVWfd@=UcQY(Ls_|GR}ubh7+x$SY);(&Xn0{&=f@_jw^VmHs_0^ZsK
z-V=XVs!r)xZtfMy{Z@tL+l+dPCf(`MPayqNp2y-B^}{>t(_*tD-yH1}4S#Z>?SkV6
z(a56R!jJS%bZJBt9_Ky3Xh(g|(W5t`cHHT=@A*+w`%+&|y?w*STf1-nE4gp6J1VwO
zQZO%M_Es4sEA7UM&)4(!zi@Nzopr4y=gz8weS$$nA4^X@zT*FixoXey*}rSzv#&@;
z<<{jht+gzCmcC`~lB<4KK9@eavOqq#(P;bTt(O(N4DPXp2}p;oT+&e~*JY4;uzt=>
zM#uEC#;?=QuuNd8R%H!4Tw7MR=H9vQLJ^mKTYmVqx21aZ-udQDw_o_?a^GuKYxvJs
zHc7|trtZya=O^8~_w|)<yzEh~_T1T@Q@$}iS#){pE|YhxZ>p6F(oY-^?BZ~E-Ss?+
z@$qx^&+}5nd$f#vmc)FD&?(&^Vkq*za;oX+dbXqU_dVh_OXHozcz>VdReAdsg~nHf
zJDF5A$O>^V&(*F!zUgkkB8EvfgeMg+u^gP@bkczL{mbnJw=A6O9nvfQPd{BT!9a@L
zOo=6)@m=ge+w!fO-f!1<)F?5}=1AW6@F@#A>V%KvvrgCl@3wZ1jC}gWKMuUUd;NY`
zCGwtim_MO@?Oy4ZYH~KcCDHOi%sxK_4=-X$i&08*RZltB+g%=WyG`noWSLG+<ikT#
zpGTY({qdgl+oXhfT-S=X=Y;=TAoGvm!F}l;a}|D^vvb;iKIs1J)^@ASH*+t(jeWs(
z{`_k7?YCDQy`9p0eZAo{UCxN>s_f-Do1=?*&&^l;G|zC^oL%)MUpWrkWVHxdB&f%2
zF;_JC<9?k8-)RLw4@@m@o;t3R^)*OqX(boWR;MYuidLWNPqnjMr?GXrS*Y<c&kt{Z
zXU?i<SLPP&DG}!9SpDrp@$_p959^p-Pho%Xs;f-wo;8b4Se?bAi$}NqlS=${#Qoov
zb#p?4i^5WNpW+q!`t8m4uk~Rzjt}R~l-b=eMSi`inf9a${JYaDj@SF?IKO(D{PvlS
z_>?35^^5;GHw7GDv!g<n_lucaz(m8~jT`Tn?AjZ6PHVXnm;Lpvz29!|zKmCUkY(Aw
zH~TW1KcDUu4m(cIXR!yGif3%tJ(;1+!#w(naNYBgFN}59kH4FI{75V7e78NJ_3hg8
z>chUe-_zpiOtp^v_|Sy8-0jzy&1GggayIpM#Hpqj>s{oT)Fix7vpMIa<FkqzYWqFI
zGPu_0uicW9d~?O;HMgsdAKkX)PN2t)b4lxCwEj!HJlK)L(XVrSLGJbgV)qVaJ-&Hp
zqt;2rNg-joRsI*SEw4PR+xMke<8qz*Ots?rK(&9yE;BC$u3Olye4}Xkg<~dis*Tr}
zj1$$<4y7FQ`7qz%gwEtvzZBa<P3N@Yr#7Et%6D{}w~99^*NU}Xn^h_})pLs1{I6>q
zS2u^vkI%JP%XjWSpW?}Fi%j@Aotc_ut)Jq)V)u;;eFEmpGq>@oZ#xvdz4)Hjob4v_
zUuW5GHmu*Zc9k3V=g+Rk(wA@Dyg9&#Z;ukAr24+rZnfl{MJ0Q8wp@xhbWi5Wr2Sd-
zGOO$ZE*hWBSbWk$eQHukaos9Sr*qvlLh@}Lr=LGP6|*|@)U9p5)K$`wc0F=_BFrBp
z@nqZ9&-XKq9`yVANv1T!@4T^FZM3|t^5XWU;=b_JO6N`<tQVe9ZLxTM)B1)wA+K*=
zRRbK?-IIIp^pE;XMupZ_{PDkfY!4JvZf5_r?W&&TFYbAU94a1bciYA2eoWvvc}vJY
z;<%CDs<^6sVSE!s!=_gjb$(BoV8$O8w%G1nLea;ty0>=HmYd%nTz%{4%Jzy-p@sv@
z)<2t^nu^cQJ`>3y$5C1TMzH&O=UKNI*S1V}XW@2VCdv4OpnTaQagD3VWfl*_b4quL
zJpa0WdolZWF{b$2E!BqwOw`oh|Kw8YQDl8#+*Y?jTJ2TD-GmfFkw2RsXMO!<!t?xr
zwxES~U}MwS@ACOd4O5d38n*t3Yu?!_JX16|B<teZQ<1G(?`^yrGWGGVntJd3FE;b+
zvo$L{tAFsI?Dx|lSJp+b|9<t4*|u|j%K52X%csmcx!?a>f92%gf&VxA?Z3Fy?a9xL
zhZMH-{xiPn{pa|$r@O9wc$>a%>kt3)5$}^eRi8ig=Fz(J$aiP@|86{8_hkRNWL^!f
zJ8a9}C-(0Sd%if=Ajrt)&(Q+wl&M#PzbzEz|F`d^{q3;wL;oD@jFz?i`ud-Hdq5?l
zA6tEz(A)?mc?O2H3m6y#85kJK^NUjSi&INVGV{`l^(u06w$x_l$DS;F`<>w@f0Lbi
z*#1@WUB?~mh1uuL?$&<py-#+cyYe9w{z8x5H8FSo*M)yJl<E&>oy@Y4cgCYf_jZ?;
zmR?=u{{7!u`#(RQ{kqzJ{PW+dFTd@+{>}W^*VT{T)*pTO>D9OP_i_JU%U_@U=hxN0
zhaZ0XR8YIiw(k3{*B}3Vwg2-j|Npb?@%Qe^%gcR8|GvJU`}Xg0bMgCo|9$yT@crG}
z+rPX0kIz2*H{Y-Pcyxoj|MS_0ng3P(d-(S3!#~T<m*?yGnU}Y>ujUWG9?l<s-zxdh
z>*u%U?5qC!v*!1^pJMg-dF%AfE&qM_czf;1-ItH|hl?M7{=a(Xqd(d6ewUoIh^^UY
zdC$(q?&I5^6}^UY^4{CW-o3m3&f91EtIQkb$K`!`T>nML{$9-fKX=8m>yEyzvz)76
zzw6O;p8WWNa=TcW_wNlI&9Cb-@7eYD+k+3`=D%Lv+<$QM{P>R_!*<-6b$ot(on6t-
z^LG#Yy~_LO???M`?#g{fZ~tCze%yZlofrRpUGI3p`Rnl2_RkOhEGanuX~)ir@4w~q
z{GT6g&*ot-s%#Cf{%W!7`u^r=|9`(M`TXki?%j`nG6nalK05PyyYvp5I-8n(bw3_I
zJp8-;vh2Sn$C=$G#Xazke{Uz7FaP!R{S8HN^&cKQ;oSeD#6n(AuJ8Hx@^<bsLH2j;
z=J;RNuP?9s6~DZ_FSO{Gie3E29claie)*UA_hHxV!@S4-iD$q1eOXoP#Pss{=fn5M
zo%r2!eEIDUpWXj`a#X+3{rT$CkNweU@8$Q!$&0i7|M%*C|JQGy=G))5k9pYFpa1W^
z#KC$Kh7+Rx&i};Ee3IXPPxku94<96xe#uwec<i(0_3GX4*PnZS`RDiT(=Rmte|Pxa
zzZ$E=8vXb2bwBKvUp{<#zSQN}Tei(>+kP>h<KOg{CPth3J$dzw6`Q%H&n{p6abx92
zv&;^S^Am%1+^Na=Sh@3`kmtq^=3g_T{w+Ir?SbW^S5<Ku`(2Lk+1V>v9d;L(B>Sh<
z=~Gu*OUSgc?dwiN<wXC<lh~qh{YT!WrZXqgqnAYO^HNb;uAs@Icd_IDr|d;<r}ZoB
zlAN;pXTs0f$1J3;&z(^}DJeE+!hv+_&eJigCmlI?U)^(M&D=C$>FY;w!k!e*dK>h`
z%KBxE-{#YEy-jxCo3im|($3n`fxnEIf2dBH^L+I_kN6lX)te{X17hd=vApVg_&K|n
z-RI|5GDLTV-UzJQp7!U7P;MG${pGaS2jAARX7BvAO<?NOt4T&RS9HamTHdYqJHC~x
zBS~|YbhG{P->WKm<n|=3-qmw*V&a-dbK8Yot(@OHsxmlI`P5R7%V%O{?ep_9^?dc_
zO0HVeDO|Poj&AAET{_Q2R`2<fQR5eG(4`;A*yraM7Br7J-s$VDLs6nu_72aMByT?U
z&FT6fWheK9hv%fGt}qp{xW7^CwTt5#o_ed>*VuwzoI0d>^RwU$lbyB>F(x~vGfID*
zTP68AM$D?%VU`h-!p!si-FjIbd^OKva=QD^N=L7F7a_k$DO=yND6;wk^Ha-}T2ewi
zYOfjoF0DJrmd`66J;CHhPWujv@NG<GD;4hP>1BUR45-g?<$1orp=$ZRD{hO|&VTXC
zd(B@l?<3~t7Ul9(YLy>WdYIgOvb=74im3GTRV|D%^#@PM)jZp@eopQU8K-B9&n4>V
z1+IB>>UzvgtK|xP?z^{HEMH@(aEeP$kM-ZOqu!6-2XA;WW%toDi)9qHYAtqqa>_kG
zu(|MMNVM4g=u*#%&98PnnkjJhW5v0!&gS!Fy;G~xZwurUz1*^31FwSJ$L9?<KXx45
zc0>F6Yc{DvYa@;a)jvJ|^5Ca4O|ogG>-IW7zFt=G{wGHpyZSSa4~OoT98mfg$bYi$
zbi$H-JLG(%MQmq;UB1T|`(zsb$0bS^C0#xm8UH${YV}wnW)Zic(exKiXAaG8w&-_H
zaHtAh_wnARt2<IYRoq^;!et6y$i(#t>2sb6N=!KPbGCEB`QkDMqv<P*>sNmEnYMZM
za?OsARg2HH&3SQ)EojF(3yUiUjz9BxJX1*FZlPp@W7;dmMxTYdm{SVhmP(k#7dxo+
zADC0z>fZjrt}}f`!<s`+pZWI3<SAr^I?j16#jhgy)KahTT~jq{-s(C0dkbGyOmqkr
zn-KBi4@-JwTB5pN<+c;7A8k%Gt`M*9{~^d)ecD|iAZT4@5_`Y+oQk8<Ehe5RX7m$C
zF4*ZAbYpTi$Lt;ZTpw4SX=#s`XL#Gu?`d*(o#tvow!pCDDFHuqTsj?{Mfx`i9&J<E
zY|+f(p56R9x@+$7uMTR@+4b`OpAnqC)4lvAJMYA2Kj)+wSg&JeT|Mu$hQPdwB}ci=
z*H<2vvs`?Kw>x^L8`Jt579TF2dd_ZqYA5%Er9HcvR(}!<S);4BJ#G4?XS-I~e12@T
zDC%A2ZsBw8jTvT3*r)G!_vM0e{PI|(^DNAseXkw+!#0Z8TDe-;dOmn>yhc98irK7l
z{aZnohwREK^QxI9Rk8`3xU$aCV5yBe+xb5Xkv3NKCCrL!+eMVMN@w<lq+Tif@Z(Bv
zh)n%CleYBm29bGp%TGJpkZJt(>G_(yyDT4BpJ!3N!n^0#qp+TteYf6c@x>mz*Rbzm
z=%e1S$sZmp-m{E7NVwwK-Dv$&ch{_s+o>kv|6Jt6qblB_2Rqk(;tTeAp00f7bj5SF
z@4fd}RpVJxtajB)IbJeK-+piQ(apa*!l$gVNxE=C+2H-rg4H}nO7*tS-5xS;@~p+L
zkF($2>H6tl=)9wh(o;RRUT4?5v-r1w?D^x&EBlm{`ihGbI-|u;Z06n{UE=lT&EksG
zXGwGB?$6v57g>C=^4-~*ZN0~R?5ta(f63UKulgaQoX%*cemb&Oe|LS%0)_5qJO1CR
z)~pfI>W{FoU_GDkgUkQ;{pG(zcD@Ul-`(W#Trx^wa{A%g-q!R@HNMTy^J=?2XTF_g
zwEoHOcgx#Yj_;NH)A~VcoBT2jvy>ede%xrw-n05>GwTPAoBdNnJNryTz3qG-tPwu(
z;G$y6WzpA0i4S(XJ0rqWe>qjGzh3;$rj^+zp6ry`e?Z_zR770js=CI71$*O87TlBm
zV6QiKLvr}8O$r&uH|HGe2ztza&1{|~=QZhb)y#j)&bKj3+N5t6e3+l5`eByfgcHfj
z9td;<Wpk>0*yCNW?o)=j#Y&rVOqVMEiU_&|3%pm`&d#Ve;rKZRt?xz-YUg>|HgFr%
z%M{LYfA7GS{zLJ{sn3fQU1qSbdUl1iicAUY_THncbzt%5JGuf#|F>jJS>xWZ?L(Ep
z1l5?wi)YVy@4#{~X#a-S(u)*ZZ?6(yWt*)WSYglVveqTnVcNq@erg|TL?@iu>CIsK
zVCLHilb-LjaCr7;){bJ+8kU=u_ZA9ms*sz_xU#!Gdb-T!B+VkPzWZx$EWL5>5!?AQ
zjFEFDD^F_ledLj`=f7@4_J^4C70Wb?!*d_~u?i_DvTKsk>F0BvdQkaPz~s<tWxg}R
zMIUZ3S|8QQw)WAj+f5H6V-<WaUKE@5aN3^E$NTI`(q*qtc-Qh>s_mU@Kcn;U;vXDr
zi^~7mIlFwcSFZndVC@YL*N;XCF<sMd%Eray6^HkV9QnLXOySV#WQQrMLLJuZ{&9C&
z?w<2{3A$R}suUMI{>A2UF;1cRbd}<j$NN|~)<0>V%CtRyQ}u@x?-ZQY*UV+gwBZw*
zAf*?0Q&3iRcFwcaHtss#i#J8jd}+mcNocC{go8gDC3ZO2Wxbxdul{T7sfXE&Cmwxn
z-oDXBeT(2dMa?i-=^bqS%Tml|2douR@B7Zs#ccba>Os=ejcOee9>%&mSoI$`B0c-Z
z?~2J&etw*NM9bq@DUU+zjuIOWhU@0?%Kb+gbpr3HtIjiRS;@1fnB~L?t|amG*<K&K
zTz#2xgr++>>^OV<PTG+gF{d^4HqUjFtor?3*E}|p^9b7_{%(2k+DR`e)VMt!%ry|&
z*zjYvn{=fwzsIA{9GhdG>Qod$tNS#jT6Zp(TT{28rb18Z#D_a=D)E)e0)w`k`m;o2
z%GL>UO}QRTwPQc2_|a-tN~7~t0axd)%suMfUA;E-3amaIuN@2f%JrByZTPiW>+5E(
z->Ee9dQXGNx%(`J8qXDj*8115Tv&PH{_<O=emgJOb)=eM={p-~_ok;e7xij<Tk!50
zOW%QG#XC)>|IAa$T=>~)*Om;C^H+j`YHInt%>1ox2+!ZC7y5A)^QLEu<?emV5u9*l
zajc|JWvtsW^HarYX^rP!ik$v^slh}p{iIJ@{c(Ga3%dQA8>XC@&wTIn>aI<99u;oT
znJ;>`ar)z}0Sc|Rf9#mt`z6moDP5zm+$}hN+w7={`@trPpZ4AEIQ}8;cgCetA<m0T
zJHM+lN!C1j^savKE$$^nWzxDj@>};hD7{x@Sad~v(bu+ehXco5=H;>m3CAA1XnA<1
z?1V#~MI5B+*9W>iXI}p{uO<E2BJbYk0gu$0WA2v~hC2#m6?HZ(`N$<Q;o$e3#}cI8
zOWdgKuJJE)NjS7uZNkBw-Xi8Z&UXoM-REXs^6}pU4WS*X{kK1SG*vJBP*c;hOxn&~
zkY#p1uTF2cc0<ZNcFD=IbG=P=t~pc2)p*-QVW#o!84kaG{Hb4JV!_=}sa|9u)EeH^
zs4`EOY15RAPfbLZWPELn*s>~AC-K7_H=U%4Jm!u`maWf9;(j04)z!6k9Y^`kobc-w
z-F;W1Q&U6lS1b|FzMvANs`Z(<@5p(Hj@?qH-$omEyFc1^bHR-t&!(>HywOxJPeOW{
z^7SKXGmkeE^z=P%N%Fo`Z+chkTx?RgS)pXf^$Hca-Rrx|Uw7QvQTp=W=R3L+PHlcD
z$TP{^%|YqB-?7B5Lo#i?UHLL)pXS8M%&@S#t*ljhuW-qc&(jK}PDiHC`5?jdsH;h5
zcf}Uz>A~NwAC~jI$0`&qaL=1T<zt4qUZl-;k?<Uw|I^Og`*lum`IpJd@4D7|-#3xe
zzjJw6?G2W>^S9VCPtDjA_oME>-LAvdi47)k$8XI3_e1Vbi|L`arJD+jLhes$ZGBu`
zyzX;c(~~_9@2Z_toEEUIGkBt@z`jkBj=%n}u`;^y9OH>6KaV__d+9dUl8?1j4s6ep
zPO_ihZ9ci*Q2Y9kGukqoSqF4=CLFD-;ks47%Ku>Xxt2*cj?9#ua4a`eNPUj0`iCP&
zwt5}7{&O~$hWJ)?&3Cn%xq>R^nz{Ng%SV54ja0qJf3!^{yE08tb$O<ZNMH4rEvJoQ
z*fh05k51`*zR~9t2h-1AjE9s{6pTL#rsP|Cds}L3{XQl2Lrwmvi=XQLhkVP_mDw10
zu{mjKMLpw*2V46?_FT%{BzW}Dv;?DgZda}ISC=r|I~g8!^wG1T)t7AJBTb`HbIn<-
zVuWYw&#_&q7907M*XsQI%g&E)Dk*?kI&DcOt5?}n`5(53i}ZCqb-J^pzIDw>-Jcy3
zp9?qo9A#HFdYr>782o5&n}gJS&biAXjwUla{92{JC0*}htb1?zv}uv2il?3Z^G86T
z`FXXY{O&^&!vd<dT^2f?ym`x{$FpX9-<OtEZnQ(<{`EG7$Q^snJy>OP?TlE<gi{P2
z&+dM!EH+%Vw{o+(otgHjm5vTp@0T-d`jK^pZzE4Ew}Vo;^v%wPwX1F(J-4&yo7$&&
zxf1_R?q0LGeBN`W29tWZ(De7M#q|o^&qFr*cg}B{+RWK?hv^01{^$>l*Y6c~%&h(*
zb704hGjE@9=$UWqTR%xh@w11F$HTn~9Bw_T(p~v!>t4Y)`?H1fV~z;!o>bI3`%YZ?
zkF>bZGl8$GSdA*p%l$TL?V23)ti~kWxI#}MefADn)=d`Q&)-y?SIWNVOTGHDH&gq*
z&1wFyM|HxP%|Vs#D<70Ck9e9gF{b93<g%EQ4>3`C8$a@$jHwL{3;WtVKVj19Yfsry
zKJI%Fv$fW3r{&Vc2IlWA<ykLj&42q&cm2owmf|9d))UI7?j%2-n<BZU?YryqjgpG)
zZyx-9{^`RsV-JNxkx_C<7Q&~L+2Z)m)muj&34iP{`M5;ou8f_1=O$G2FuL4aIA?js
zqQ%9}O)MwroL`V0VV;_*yMM}0#?=q+*sovlM&LHb`77_8n=AGTb_BiEK2|mFsAlzg
ztGU4nbKh^&bd#E%u`%uAy{Wk|6<ea$eBa|;qI~Mcfr%9&QFFHbsoD4FPR}XReV=E^
zIW?U*Uw=zmPxE&~*M0X}njTMdc2%r@^Ha|*;@;(mnw&j{SGOeWDA!|LJ@MCkCclG^
zg%ldUUtxY}lN@%$bYJ_14u6})k>A*g)?J@u^WI3K@O@XvgcFrE6Apg1W}VX%JzXgH
z@z<TT2AcNn%Tyw#DO;wVTW@~Il6Ar<OPvYlv}GK`zQ0&nKV!+7)}$%2PnJfUPUcbQ
z+q`8{x!tF)!QbS(Su<_^F<z?7TkP;uR94sV=I7WhiMWRvs#%)@COvxI5F+<~3Rm&T
zrNN5KdKabG)=N&6;!T%!kU5{i$Z7MKXUS)~-9eL|N8Y_u#?0&P6r@ure17qqONl3T
ztl7QNCOmkTtc`HYFS~kP7w3v8!BqlvOacODwaNvL27NL4!6}(qu{530<FWPjQx~#=
zSz~-IPMA0)?y%AKi@RhB+rlTG`ZDkP2?kD^b^69WsoT<xZ0@lwnlmwansIOR>8Dd9
zHt5X%QR$!R`gG0pO_MJD4*h;}Ur1i*{K+1+!KUj9thtta%E`W~uB&m~qyB+x;8mC7
zl3rVnedzO7IP{tQ>aH`^2edg<?)L}g>eTFy+<G!x>-DRgr?GpkvOdiTQD}5OA^q^q
zCacbv^{czvjQ_lv^qgn^ui6`0?goWikCeX`m)5Uu*q>Q2G5wj=8;kcZRygW>j}+zU
zd_Q@`qbYy<L}zxnxQd-mIcOMpE-Oo<{`ha129|m1?3XMbuiCBI{o1kUkTu(bGiv=2
z0zu*T&IVl0Yk2Gt@~YQ#_7Ualv({eX4E}6)wpTe(^P58VrpIfaU8y({Uw-4*bCH~Y
z$b(14Qgub%TYO(XyZhr$#~%lO^Jm@soo_M8>iKoi({VF*zM3jkwARtmexq5s<#v`u
zb9|!eqc#5Y^l{anGgftIalg9t_BrM2x3)$}Ydn8aJ9n#l>iO8Wo|Yds@U8w59k#W3
z1)q7v_AuE;75-uq4u0NSdgP3M*qX~a^V-*5wz_wd**yAZXR!3cK*!eQ;b9-HoNHQd
zteTq2_)zrat~XINIj7T8S>Jn!Uq8~yc;RLq+eS%QX@PoGs~k2%D_PSChrVlV+gm;J
z9Md7z!>?zZby>Q3`N5td>H9eya|F$$r>^UK7W3%&dj`oGzuW6d3SU}i+BEYm`TUpr
z?CceL&f6X7_CEet$&P9L)04CB&;J=H@NjprbcE=6b)_DGd&{|03d5LHK6l8U(5iXn
z^ucEHg+q36^OcgO+^Y|3nbrDPOCojknQa;AKIWaL^e(Hd)Vjs}?$G07Y-I~<)PEkR
zRi1F}bEt0XQOg|fsM0m5ED1GNB+tx_nm#S{16Rmth3!|m7-!C@+@2)%ymRf1)E#RM
znpKo1RQr@^b!^h!JXOMyJ403Vp7C{oIUg^3L~Wh>oz;Ye$A*b{(HoDPdefA+pLwQ|
zb!Gw+4pgT^efEpIts5ctk}-1++qI~WbKQBl`Be)%%=@0pNJa48@4r_y!zTXfu8@84
zn|o_nwzU<gU1>XOv;E=&(TbESZ6W_eXPTXTVC~kZk-m3Z=58bV%aTXia^4+EPpn#c
ze%)CG8||yhSdLozuiSHe!&wUvedGGaPYi>j-G0s!oUrK3%T2xWh4@oG%_)!0)B2bG
z^U!Mj-16RH?~P8+o{QzSyw}S1o-+CA@5gD;eLIe<KCR&4CAaPU-@uUdzwc$bxZnNW
zKKqC1Ini?g4JJ=(=d8EMV!l)va^brncgeQh-L22v%O&T!zrWjlq`2&^^05VGOMbto
zu&;k(ClEQ4wPnklsBa8PhumddetvV{-}q_YLAju3Gk5BRS-xK3U2x|YbKs{Zu`ZU6
zmwBJ6neN|z?BnLZ>XK99Q?35!oR?=1ycc_W;hsNpj?K$?SeWd8?&G=D^PJ3LswbPo
zslL_JQdj=MBU#Xymi^=1?0K<IcAlHJchhd!6Hjy&Jg=AdadMx7*!Od`%TIo0-y4y7
zKT&_fzZyU9kVmWvlf#c!9h_4X8Lp$yXOdkpZ;|=>8tYZtYoF-3Z;;qgaz&r}yBPcW
zo!_QSS^wut-qiI~41xQsZtj*omDTd{@l<w&xz`!1`FpSbsGffEZ|3`xA8dl|FJD#s
zR(6KPx=!aQweM?PPS@{uWIXbD@9Ek%eMMbo{x+(xX4bgZ%rE<(chPR{^X1}YAGDs<
ze*0d(<K3AF75$PE4poXyIJr5f_T64TE+dQXciH)WA9T$Aqtdu<&!LXrT+=>RC`@#3
zuXTO6C+khV?}bvX<##J>%zGr>ojqo^(q(7#nmL@kd;d>9RW;*E1#8xuUG<XtrF-nt
z`5dgS|45ws)KFJo>F2BiQXguC4tqU+uFjWk(;v|gGVdglQN{P01=~K?Ji6hkZI{Jw
zfBgCJ_M@wn4y!-?{X#k7{N~BY=374RW)0tQTq2>Y%f<Q3pKfJ?8n1c|p80`kjx~?e
z<M|q$!{<#_JHPEvL{(khkB$i%TR$q--#k`co$GS3`N@>`8+kUU-+O5ubmotUibC`E
z-939ndr#|1zuv*KN#$Rvu!8qSYfG)??F^YVlO!b5LL?o%YMzTtIJJ0XV3}Z-a+GU=
z$n%|h<y@!K?F*drDfdI*+=r%O3a82+y76}YUUSjm(vRW;_bcWzPdM}W)Z(2dH?u5e
zeJWl5grjiEtRFAJe!f%fnO(5Wa96mWptP;dykd!1w)?5O1mhxQWedgX=g(v7Uv`Ya
z^YMG*GUqi-8ee}I&iUlqyYcL%qTX;nc?so^eYdlDG;MBMEeka&c9<e-ojhNB!JV_A
zay$774CSo*C3*Xc*d(TZvNKMd*DiZnuQgcbxyak2^`bWFCe!%$Fqs}${X<V)Vdm!B
z8z+5`JG*oLyQK<oFB50|eq!@$*=3i*rYs(_Lfn^co&4R>=QZ#8z;}<UE5*{IBtcnY
zzH)c^jAgx3->WehRb2mZN4oh%j{o+4#^)SYde1i%pNf23Tp!bOzG?E&wKqxvEia0C
zJiM2)>q$kv_JsO#o8vFvKDhgv8jsHQy_c&GC#NgS{62*ta8ujm_s-8nQ$EC=y}bO$
z?`!EBdZV98Iz6_jYg_SV@{DR_^{q+4dp^86J;h+B=<MGcB-V8biTCp*{+RMN&A94e
z7*EHha5<CEo6oxr?EGl+lP|L}r%fT^W!W4}t^1Q_XojA<)Sxl-QE$CQ(dmO9`L4~}
zDjd+Lao_h=$0GKl5vhKs^X@$M;IX+j=W0}3BKxKv;<{<2krVw~dk!8CYkp{*&}eZ~
z>8im__Bp0qNk64TX6*OhJn?<p?A<*F?r%|l`X*h$cjKwUTC!`3S=LAVR}76jsH}DW
z|I7`4_be`GdjDZZil2RjUER5aih2`PmkJfbjS?09Cu7`Rmd!cccQp6?q+{hrm?Lc_
z&FBcP@XKf_|J?Qb)_kQ9f#{!ir+w_L?%8@idC8^5l_oasJV!oFW@*s)R}vY$bAEJ3
zY2~-<n*tT#_7jd3o1X6akaOf#d%f2AiAP^A&z7I+^Hu7^lWL1;tgoLW7youn<61PQ
zzGS=1A{jewg^PD~>9D6CJI>a3B>ZpD#Sj0o6=uGF8-1_D)qU@5o2=*u)_1-!ee8;>
zj<3wkQm)BoW$HZSf4ItJg>0;yTHI`=OP0b>2h+~I2`gv}?`rg!w=&*w%H*)?|L!Tu
zmtNSX%#iZ&^P=e$=XWztZ#flt>sI=-Pv%oYD*o4N2prv~I45}DwvCtWojWWjU2&Xu
z!a}9V;SaC<GZUO%y3O-q#n&TEQ}-Tf2@_j=#=p>OE7OUPFS~v$J>$>W{GKJ^cTB)j
zOT&+L><ZoQgCay@X7;b`3U!NheOczhp=G1YoT9OB$+D9_Uu5ZNtlqeDUBstnQ`S7p
ziu<W{_LZ8p-Rk=GqvfgV<ap25F$VfAWLQ)qS=xB>qj1ahccssz><?s_q<rwZX}V_8
zYZjx*+C1esoNMO_Jbd3AFehBJQRBWs{O<4FufMv8oO0ir-5ygOR^ng#I)DCx-}nE1
zdv^Ei!-tpu+wK3e#cw<R`n-ATUbN5Vf4=(g>h~Xi*IqrloBz4}*3~Ju#s3`s`1obb
zAInewKDUd1I6GVY!M|q(wR_LCcZ)v=TwwlQZ~eRX$38xOeE#}<`E&L)yWf9~pYt+b
zzhD0U&*jyzGWqg-&+BdG+ugTa7=NyP_x<~Ea{KqPNL>3oHGDgN{f=FgKmShmoy+J`
zKcD}{^`{U2EI(df^W&gx@;kv|{~M3(`NV&p{c!!fea-K=)j#i^|95WxpL6xUV=I2f
z{`h8H`Ezc~@7S83v3K_W{_^!*#lC&J{$4I$U;nG{|G&pCfBpLMwBo1#{SW(pU7alO
z&R+Ii-;C>rpTA~basA~>@#*LHSA2cE`|*5vg{`Mow_mSc|L*-dy?nm<V=^<<kN^L3
z{d)WQ<>&e9KW>-4U0?Hkdif3;8<~Qik3;?*J=(AJuX|%n<GYv`N7?)Jdw&+}s+)Om
zf3?()uUG#b{{8sw!<q_<x$ztJ*B{BLD6ic0!!}H)uIiF&gjMCqiIG1!r>Xz=AGM(=
zFso9yN;3c3cZvH`o;(+q-oJVO!f#gX|Lf0lfBg6314Hi4|9Ah3PY<YM6y1Jg9^-al
z<^|Si+v_$lsx#JK^g3)H()OP9{=z5wd^f$k<8-_6)Sg0xh`>GECvS@7T$*sCw7UBC
ztx{<|MRVKdr;peBO+Ht?t7qGTJ*#}$GMoZf+(Lq8mbTsNa<y@t$bZKpE{x4+3w!^w
zpI<|@bcClii-$)RI5zf6P5$U}gD2N%15dKP*@B(^Qin{=hCVgnuRpsyI{EZb@pxuA
zL8F6GOw(-&?r<erO9ZZ;k`!<&KfH`d(_qSigDm}-P9G=oKG?FqV&UsK6QWx8wsyZ*
zXnDbUJ==zLub0S`XH1^|sQ>BbZ1b!&KD)IUHT;(*9Af03dV0Ra6iqwLEvL12@}EvS
zug&_Y?!IyTYu#4~t8e|EeEH>FmmSS*UboKwUd<+HYI*a0Nc*|pKOSz3SWx5gLTA|$
zOV*hiXG<zS+3Z_d_Fv;lZCics;xO^ax10PV=gyJlZ`$Ks^Dpd^JS1fQY+-C?XN|x9
zNA~shjy;UVjP)ibm?Do(NP3YN&3q*H{45{!Lph!kZY;QYy?>MV`I}|4{AyIb{%{F;
z^lokTX5p5MIl7UCrz6?IcHg?;d~)6@fAj2Vt|8mP)@}~iWb9I=et*C4?gut3CIZHb
zHf&6BciI2Y=9O}Z);WzF%}YBjXsSr?-7)RGSn&Q!HoMqQoAco^_4fpFc)#|_bKX3#
z!}8((N!R?;Yd`L^s(v(iQPa8YT#j|V=C>o?ZV;~d(sgQKmiFbwnCC}zUEOrbUNHo&
zo7TiXt)g&YUr}AOPIwc)Lr%YzM(-8(NFDKR)>QwPM~lC&y~wrl<frb72VJixe7m82
zUa0lKWf8~qH=FBt+0Gk@*KpMzO;7f84Xjxp)$A+OY{l}lKTuC>wMxm6r1hcP(OGRd
zA<~W??(=<Q(BiFH?juxr=q#tnt_iN6o84^FZ<>oLZrzZgF50u{MB5g|FJ-Tl*&-!*
zj@UlBH)ok|?&c}3^Bs<rCh=GCro^va%%ywec-y_U{{qoIN54t2trWHlPMt0lUcVtP
z_W9JMYM(DI607g`-&gcKGqCRKhg+62|8*aHd{29>+LkEs)2nS~upFJYC*X3z@r^xv
zA07HRa<v@G-!i`PK6k%yOXT^(@0T`hp5wRQOI-f#p&x6X_)nj-pYb-A{U+sJlM+UT
z>aEku4>0;OW!6qVaez@>27NIJ0~{=Bp3Z%c(U$4+qUl}-86B8jE}7nQkWmSg8K-YN
z$SB6Na@+KiAO+exr*j-)v}1PM$2eVa7o+g>m_v*Lkd!sO@DQUY)20K{I}R}_v0XmQ
I$iTn=0DQ?q-v9sr

delta 103794
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

-- 
GitLab