Diseño Factorial simple en arreglo completamente al azar.

Caracteristicas: 1. Único factor 2. Sin razón para bloquear

xy = expand.grid(x= seq(0,5), y = seq(0,5))
plot(xy, pch=15, cex=3, asp=1)


#FACTOR
genotipo = gl(n = 6 , k = 6, length = 36,
              labels = paste0('gen',1:6))
genotipo
 [1] gen1 gen1 gen1 gen1 gen1 gen1 gen2 gen2 gen2 gen2 gen2 gen2 gen3 gen3 gen3 gen3
[17] gen3 gen3 gen4 gen4 gen4 gen4 gen4 gen4 gen5 gen5 gen5 gen5 gen5 gen5 gen6 gen6
[33] gen6 gen6 gen6 gen6
Levels: gen1 gen2 gen3 gen4 gen5 gen6
#VARIABLE RESPUESTA 
set.seed(123)
PS = c(
  rnorm(12, 1200, 100),
  rnorm(12, 1500, 80),
  rnorm(12, 1420, 90)
)
datos = data.frame(genotipo, PS)
head(datos)

aleat = sample(36)
datos= data.frame(xy[aleat,], genotipo, PS)
head(datos)
library(ggplot2)

ggplot(datos)+
aes(x,y, fill=genotipo)+
geom_tile()

ANALISIS DESCRIPTIVO (informativo y gráfico)

#CAJAS
ggplot(datos)+
aes(genotipo, PS)+
  geom_boxplot()


#VIOLINES
ggplot(datos)+
aes(genotipo, PS)+
  geom_violin()

ANALISIS INFERENCIAL \[H_0: \mu_{g_1}= \mu_{g_2}=\mu_{g_3}=\mu_{g_4}=\mu_{g_5}=\mu_{g_6}\\ H_a : H_0\text{ es FALSA}\]

MODELO DE EFECTOS \[y_{ij} = \mu_i + \epsilon_{ij}\\ i = 1,2,3,4,5,6 ; \\ j = 1,2,3,4,5,6\]

\[y_{ij} = \text{Peso Seco del i-esimo genotipo y j-esima repetición}\\ \mu_i = \text{La media de cada i-esimo genotipo}\\ \epsilon_{ij} = \text{Residuales}\]

MODELO EN FORMA DE EFECTOS \[y_{ij} = \mu + \tau_i + \epsilon_{ij}\\ \mu = \text{Media global}\\ \tau_i= \text{Efecto de cada genotipo}\]

MODELO EN FORMA MATRICIAL \[ Y = X\beta + E \\ X = \text{matriz del diseño 36 filas y 7 columnas, 1 para la media y otra para cada genotipo (6)}\\ \beta = \text{vector de parametros (\mu; \tau_1; \tau_2; \tau_3; \tau_4; \tau_5; \tau_6)}\]

OTRA FORMA DE PLANTEAR LA HIPÓTESIS \[H_0 : \tau_1 = \tau_2 = \tau_3 = \tau_4 = \tau_5= \tau_6 \]

mod1= aov(PS ~ genotipo, data=datos)
summary(mod1)
            Df Sum Sq Mean Sq F value   Pr(>F)    
genotipo     5 502508  100502   14.22 3.67e-07 ***
Residuals   30 211996    7067                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
smod1 = summary(mod1)
smod1[[1]][1,5]
[1] 3.673791e-07
pv1 = smod1[[1]][1,5]

ifelse(pv1< 0.05,'Rechazo Ho', 'NO rechazo la Ho' )
[1] "Rechazo Ho"

Como el valor del F value es de 14,22 se puede interpretar que la variabilidad causada por los genotipos es 14,22 veces más grande que la causada por el error.

Interpretando el p-value

FORMA 1: Teniendo en cuenta que el p valor dado por la tabla de anova para este experimento es menor del 5% se recha la hipótesis nula, lo que sugiere que existen diferencias en almenos uno de los tratamientos en cuanto al peso seco.

FORMA 2: Los datos proporcionan evidencia en contra de la hipótesis nula (a favor de la alterna). Lo que dice que los tratamientos no son iguales (sin embargo no permite sacar conslusiones).

ESTIMAR EEFCTOS

#media global
mu = mean(datos$PS)
#media por genotipo
mu_i = tapply(datos$PS, datos$genotipo, mean)
#efecto por genotipo
tau_i = mu_i - mu
tau_i
      gen1       gen2       gen3       gen4       gen5       gen6 
-134.97483 -185.56951  123.96002   82.81483   22.23648   91.53300 
var_i = tapply(datos$PS, datos$genotipo, var)
boxplot(PS ~ genotipo, datos, ylim=c(1000,1800), las=1)
points(1:6, mu_i, pch=16, col='red')
abline(h = mu, lty=2, col='yellow')
segments(1:6 -.2, mu_i, 1:6- 0.2, mu , col='blue', lwd=2, lty=2)
text(1:6, rep(1700, 6), round(tau_i, 2))
text(1:6, rep(1000, 6), round(var_i, 2))

REVISIÓN DE SUPUESTOS \[H_0: \sigma^2_{g1} = \sigma^2_{g2} = \sigma^2_{g3} = \sigma^2_{g4} = \sigma^2_{g5} = \sigma^2_{g6} =\]

\[H_0: \epsilon \sim N(0, \sigma^2_e)\] La diferencia entre lo estimado y lo calculado es lo que se conoce como residual

Lo residuales deben de tener forma de distribución normal y una varianza muy parecida o incluso igual.

hist(mod1$residuals)

var_res = tapply(mod1$residuals, datos$genotipo, var)
#TEST DE BARTLETT
#PRUEBA ESTADÍSTICA QUE  PERMITE VER SI LAS VARIANZAS SON IGUALES
bartlett.test(mod1$residuals, datos$genotipo)

    Bartlett test of homogeneity of variances

data:  mod1$residuals and datos$genotipo
Bartlett's K-squared = 5.5895, df = 5, p-value = 0.3482

Como el p valor para la prueba de igualdad de varianzas es de 34,82 que es mayor al 5, hay evidencia cientifica para determinar que las varianzas son diferentes entre sí. Como el p valor para la prueba de igualdad de varianzas es mayor al 5% estadísticamente se pueden considerar iguales.

#PRUEBA DE SHAPIRO
#NORMALIDAD DE RESIDUOS
shapiro.test(mod1$residuals)

    Shapiro-Wilk normality test

data:  mod1$residuals
W = 0.97311, p-value = 0.5164

como el p valor en la prueba de normalidad es de 51.64% (>5%) se considera que los residuales siguen una distribución normal

COMPARACIÓN DE MEDIAS POSTERIOR AL ANALISIS DE VARIANZA

#PRUEBA DE TUCKEY
#(máxima diferencia de tukey)
par(mar = c(4, 6, 3, 1))
tt = TukeyHSD(mod1, 'genotipo')
plot(tt, las = 1)
abline(v=0, lty=2, col= 'red', lwd=2)

tt
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = PS ~ genotipo, data = datos)

$genotipo
                 diff         lwr       upr     p adj
gen2-gen1  -50.594675 -198.214230  97.02488 0.8995877
gen3-gen1  258.934855  111.315300 406.55441 0.0001225
gen4-gen1  217.789664   70.170110 365.40922 0.0012678
gen5-gen1  157.211312    9.591757 304.83087 0.0316170
gen6-gen1  226.507827   78.888272 374.12738 0.0007764
gen3-gen2  309.529530  161.909976 457.14908 0.0000068
gen4-gen2  268.384340  120.764785 416.00389 0.0000713
gen5-gen2  207.805987   60.186433 355.42554 0.0022109
gen6-gen2  277.102502  129.482947 424.72206 0.0000433
gen4-gen3  -41.145191 -188.764745 106.47436 0.9557570
gen5-gen3 -101.723543 -249.343098  45.89601 0.3163216
gen6-gen3  -32.427028 -180.046583 115.19253 0.9841426
gen5-gen4  -60.578352 -208.197907  87.04120 0.8096942
gen6-gen4    8.718162 -138.901392 156.33772 0.9999711
gen6-gen5   69.296515  -78.323040 216.91607 0.7103650

Si están tocados por la linea del medio (0) se puede interpretar que no hay diferencia entre sí. En el tt cuado hay valores que tienen un p valor (p adj) mayor al 5% se puede interpretar que no difieren (son iguales)

library(agricolae)
#PRUEBA DE DUNCAN

dt= duncan.test(mod1, 'genotipo', console = T)

Study: mod1 ~ "genotipo"

Duncan's new multiple range test
for PS 

Mean Square Error:  7066.534 

genotipo,  means

Alpha: 0.05 ; DF Error: 30 

Critical Range
        2         3         4         5         6 
 99.11886 104.16376 107.43409 109.76839 111.53078 

Means with the same letter are not significantly different.
plot(dt)

Cuando las letras son iguales se pueden considerar genotipos iguales.

DISEÑO 1 (INCUMPLIMIENTO DE SUPUESTOS)

#FACTOR
genotipo = gl(n = 6, k = 6, length = 36,
              labels = paste0('gen', 1:6))

#VARIABLE RESPUESTA
set.seed(123)
PS = c(
  rnorm(12, 1200, 120),
  rnorm(12, 1500, 100),
  rnorm(12, 1420, 250)
)

datos = data.frame(genotipo, PS)
head(datos)
NA
ggplot(datos) + 
  aes(genotipo, PS) + 
  geom_boxplot()

mod1b = aov(PS ~ genotipo, datos)
smod1b = summary(mod1b)
mod1b
Call:
   aov(formula = PS ~ genotipo, data = datos)

Terms:
                genotipo Residuals
Sum of Squares  627711.6  701125.9
Deg. of Freedom        5        30

Residual standard error: 152.8753
Estimated effects may be unbalanced
shapiro.test(mod1b$residuals)

    Shapiro-Wilk normality test

data:  mod1b$residuals
W = 0.98349, p-value = 0.8558
bartlett.test(mod1b$residuals , datos$genotipo)

    Bartlett test of homogeneity of variances

data:  mod1b$residuals and datos$genotipo
Bartlett's K-squared = 12.401, df = 5, p-value = 0.02969

Como se rechaza la hipótesis de igualdad de varianzas (bartlett), se incumple el supuesto, lo cual complica la interpretación.

ANALISIS DE VARIANZA PARA UN DISEÑO FACTORIAL SIMPLE EN ARREGLO COMPLETAMENTE AL AZAR, EN PRESENCIA DE HETEROCEASTICIDAD (varianzas desiguales).

Top de idealidad:

  1. one way.
  2. welsh
  3. kruskal
mod1c = oneway.test(PS ~ genotipo, datos)
mod1c

    One-way analysis of means (not assuming equal variances)

data:  PS and genotipo
F = 8.6764, num df = 5.000, denom df = 13.702, p-value = 0.0006918

(qué hacer) cuando se incumple la normalidad e igualdad de varianzas

ANÁLISIS DE VARIANZA NO PARAMÉTRICO PARA UN DISEÑO DE ARREGLO FACTORIAL SIMPLE COMPLETAMENTE AL AZAR

\[H_0: R_1 = R_2 = R_3 = R_4 = R_5 = R_6\]

#KRUSKAL TEST
#trabaja con los rangos de los valores y no con los valores reales de los datos.
mod1d= kruskal.test(PS, genotipo)
mod1d

    Kruskal-Wallis rank sum test

data:  PS and genotipo
Kruskal-Wallis chi-squared = 17.204, df = 5, p-value = 0.004128

Comparación de rangos promedios posterior a kruskal.wallis

library(PMCMRplus)
kwAllPairsNemenyiTest(PS, genotipo)

    Pairwise comparisons using Tukey-Kramer-Nemenyi all-pairs test with Tukey-Dist approximation

data: PS and genotipo
     gen1  gen2  gen3  gen4  gen5 
gen2 0.998 -     -     -     -    
gen3 0.172 0.058 -     -     -    
gen4 0.443 0.205 0.995 -     -    
gen5 0.807 0.533 0.883 0.993 -    
gen6 0.046 0.012 0.995 0.904 0.587

P value adjustment method: single-step
alternative hypothesis: two.sided
library(FSA)
dunnTest(PS, genotipo)
Dunn (1964) Kruskal-Wallis multiple comparison
  p-values adjusted with the Holm method.
rangos = rank(PS, ties.method = 'average')
rangos
 [1]  4  7 16  8  9 19 11  2  3  6 15 10 27 25 21 35 28 13 29 22 17 24 18 20 12  1
[27] 32 23  5 36 26 14 34 33 31 30
boxplot(rangos ~ genotipo)

ANALISIS DE VARIANZA PERMUTACIONAL

library(RVAideMemoire)
#Simula repeticiones
perm.anova(PS ~ genotipo, data = datos, nperm = 999 )

  |                                                                                
  |                                                                          |   0%
  |                                                                                
  |=                                                                         |   1%
  |                                                                                
  |=                                                                         |   2%
  |                                                                                
  |==                                                                        |   3%
  |                                                                                
  |===                                                                       |   4%
  |                                                                                
  |====                                                                      |   5%
  |                                                                                
  |====                                                                      |   6%
  |                                                                                
  |=====                                                                     |   7%
  |                                                                                
  |======                                                                    |   8%
  |                                                                                
  |=======                                                                   |   9%
  |                                                                                
  |=======                                                                   |  10%
  |                                                                                
  |========                                                                  |  11%
  |                                                                                
  |=========                                                                 |  12%
  |                                                                                
  |==========                                                                |  13%
  |                                                                                
  |==========                                                                |  14%
  |                                                                                
  |===========                                                               |  15%
  |                                                                                
  |============                                                              |  16%
  |                                                                                
  |=============                                                             |  17%
  |                                                                                
  |=============                                                             |  18%
  |                                                                                
  |==============                                                            |  19%
  |                                                                                
  |===============                                                           |  20%
  |                                                                                
  |================                                                          |  21%
  |                                                                                
  |================                                                          |  22%
  |                                                                                
  |=================                                                         |  23%
  |                                                                                
  |==================                                                        |  24%
  |                                                                                
  |==================                                                        |  25%
  |                                                                                
  |===================                                                       |  26%
  |                                                                                
  |====================                                                      |  27%
  |                                                                                
  |=====================                                                     |  28%
  |                                                                                
  |=====================                                                     |  29%
  |                                                                                
  |======================                                                    |  30%
  |                                                                                
  |=======================                                                   |  31%
  |                                                                                
  |========================                                                  |  32%
  |                                                                                
  |========================                                                  |  33%
  |                                                                                
  |=========================                                                 |  34%
  |                                                                                
  |==========================                                                |  35%
  |                                                                                
  |===========================                                               |  36%
  |                                                                                
  |===========================                                               |  37%
  |                                                                                
  |============================                                              |  38%
  |                                                                                
  |=============================                                             |  39%
  |                                                                                
  |==============================                                            |  40%
  |                                                                                
  |==============================                                            |  41%
  |                                                                                
  |===============================                                           |  42%
  |                                                                                
  |================================                                          |  43%
  |                                                                                
  |=================================                                         |  44%
  |                                                                                
  |=================================                                         |  45%
  |                                                                                
  |==================================                                        |  46%
  |                                                                                
  |===================================                                       |  47%
  |                                                                                
  |====================================                                      |  48%
  |                                                                                
  |====================================                                      |  49%
  |                                                                                
  |=====================================                                     |  50%
  |                                                                                
  |======================================                                    |  51%
  |                                                                                
  |======================================                                    |  52%
  |                                                                                
  |=======================================                                   |  53%
  |                                                                                
  |========================================                                  |  54%
  |                                                                                
  |=========================================                                 |  55%
  |                                                                                
  |=========================================                                 |  56%
  |                                                                                
  |==========================================                                |  57%
  |                                                                                
  |===========================================                               |  58%
  |                                                                                
  |============================================                              |  59%
  |                                                                                
  |============================================                              |  60%
  |                                                                                
  |=============================================                             |  61%
  |                                                                                
  |==============================================                            |  62%
  |                                                                                
  |===============================================                           |  63%
  |                                                                                
  |===============================================                           |  64%
  |                                                                                
  |================================================                          |  65%
  |                                                                                
  |=================================================                         |  66%
  |                                                                                
  |==================================================                        |  67%
  |                                                                                
  |==================================================                        |  68%
  |                                                                                
  |===================================================                       |  69%
  |                                                                                
  |====================================================                      |  70%
  |                                                                                
  |=====================================================                     |  71%
  |                                                                                
  |=====================================================                     |  72%
  |                                                                                
  |======================================================                    |  73%
  |                                                                                
  |=======================================================                   |  74%
  |                                                                                
  |========================================================                  |  75%
  |                                                                                
  |========================================================                  |  76%
  |                                                                                
  |=========================================================                 |  77%
  |                                                                                
  |==========================================================                |  78%
  |                                                                                
  |==========================================================                |  79%
  |                                                                                
  |===========================================================               |  80%
  |                                                                                
  |============================================================              |  81%
  |                                                                                
  |=============================================================             |  82%
  |                                                                                
  |=============================================================             |  83%
  |                                                                                
  |==============================================================            |  84%
  |                                                                                
  |===============================================================           |  85%
  |                                                                                
  |================================================================          |  86%
  |                                                                                
  |================================================================          |  87%
  |                                                                                
  |=================================================================         |  88%
  |                                                                                
  |==================================================================        |  89%
  |                                                                                
  |===================================================================       |  90%
  |                                                                                
  |===================================================================       |  91%
  |                                                                                
  |====================================================================      |  92%
  |                                                                                
  |=====================================================================     |  93%
  |                                                                                
  |======================================================================    |  94%
  |                                                                                
  |======================================================================    |  95%
  |                                                                                
  |=======================================================================   |  96%
  |                                                                                
  |========================================================================  |  97%
  |                                                                                
  |========================================================================= |  98%
  |                                                                                
  |========================================================================= |  99%
  |                                                                                
  |==========================================================================| 100%
Permutation Analysis of Variance Table

Response: PS
999 permutations
          Sum Sq Df Mean Sq F value Pr(>F)    
genotipo  627712  5  125542  5.3717  0.001 ***
Residuals 701126 30   23371                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Rechaza la hipotesis nula y determina que los genotipos son diferentes

LS0tDQp0aXRsZTogIkRFIG1hcnRlcyAxOCBhYnJpbCAyMDIzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQpBdXRob3I6ICJBbmRyw6lzIEZlbGlwZSBIaW5jYXBpw6kgQ2FzdGHDsWVkYSINCkRhdGU6IDE4LzA0LzIwMjMNCkNsYXNzOiAiIg0KLS0tDQpEaXNlw7FvIEZhY3RvcmlhbCBzaW1wbGUgZW4gYXJyZWdsbyBjb21wbGV0YW1lbnRlIGFsIGF6YXIuDQoNCipDYXJhY3RlcmlzdGljYXMqOiANCjEuIMOabmljbyBmYWN0b3IgDQoyLiBTaW4gcmF6w7NuIHBhcmEgYmxvcXVlYXINCg0KYGBge3J9DQp4eSA9IGV4cGFuZC5ncmlkKHg9IHNlcSgwLDUpLCB5ID0gc2VxKDAsNSkpDQpwbG90KHh5LCBwY2g9MTUsIGNleD0zLCBhc3A9MSkNCg0KI0ZBQ1RPUg0KZ2Vub3RpcG8gPSBnbChuID0gNiAsIGsgPSA2LCBsZW5ndGggPSAzNiwNCiAgICAgICAgICAgICAgbGFiZWxzID0gcGFzdGUwKCdnZW4nLDE6NikpDQpnZW5vdGlwbw0KDQojVkFSSUFCTEUgUkVTUFVFU1RBIA0Kc2V0LnNlZWQoMTIzKQ0KUFMgPSBjKA0KICBybm9ybSgxMiwgMTIwMCwgMTAwKSwNCiAgcm5vcm0oMTIsIDE1MDAsIDgwKSwNCiAgcm5vcm0oMTIsIDE0MjAsIDkwKQ0KKQ0KZGF0b3MgPSBkYXRhLmZyYW1lKGdlbm90aXBvLCBQUykNCmhlYWQoZGF0b3MpDQoNCmFsZWF0ID0gc2FtcGxlKDM2KQ0KZGF0b3M9IGRhdGEuZnJhbWUoeHlbYWxlYXQsXSwgZ2Vub3RpcG8sIFBTKQ0KaGVhZChkYXRvcykNCmBgYA0KDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQpnZ3Bsb3QoZGF0b3MpKw0KYWVzKHgseSwgZmlsbD1nZW5vdGlwbykrDQpnZW9tX3RpbGUoKQ0KDQpgYGANCg0KQU5BTElTSVMgREVTQ1JJUFRJVk8gKGluZm9ybWF0aXZvIHkgZ3LDoWZpY28pDQpgYGB7cn0NCiNDQUpBUw0KZ2dwbG90KGRhdG9zKSsNCmFlcyhnZW5vdGlwbywgUFMpKw0KICBnZW9tX2JveHBsb3QoKQ0KDQojVklPTElORVMNCmdncGxvdChkYXRvcykrDQphZXMoZ2Vub3RpcG8sIFBTKSsNCiAgZ2VvbV92aW9saW4oKQ0KDQpgYGANCg0KQU5BTElTSVMgSU5GRVJFTkNJQUwNCiQkSF8wOiBcbXVfe2dfMX09IFxtdV97Z18yfT1cbXVfe2dfM309XG11X3tnXzR9PVxtdV97Z181fT1cbXVfe2dfNn1cXA0KSF9hIDogSF8wXHRleHR7IGVzIEZBTFNBfSQkDQoNCg0KDQpNT0RFTE8gREUgRUZFQ1RPUw0KJCR5X3tpan0gPSBcbXVfaSArIFxlcHNpbG9uX3tpan1cXA0KaSA9IDEsMiwzLDQsNSw2IDsgXFwNCmogPSAxLDIsMyw0LDUsNiQkDQoNCg0KDQokJHlfe2lqfSA9IFx0ZXh0e1Blc28gU2VjbyBkZWwgaS1lc2ltbyBnZW5vdGlwbyB5IGotZXNpbWEgcmVwZXRpY2nDs259XFwNClxtdV9pID0gXHRleHR7TGEgbWVkaWEgZGUgY2FkYSBpLWVzaW1vIGdlbm90aXBvfVxcDQpcZXBzaWxvbl97aWp9ID0gXHRleHR7UmVzaWR1YWxlc30kJA0KDQoNCg0KTU9ERUxPIEVOIEZPUk1BIERFIEVGRUNUT1MNCiQkeV97aWp9ID0gXG11ICsgXHRhdV9pICsgXGVwc2lsb25fe2lqfVxcDQpcbXUgPSBcdGV4dHtNZWRpYSBnbG9iYWx9XFwNClx0YXVfaT0gXHRleHR7RWZlY3RvIGRlIGNhZGEgZ2Vub3RpcG99JCQNCg0KDQoNCg0KTU9ERUxPIEVOIEZPUk1BIE1BVFJJQ0lBTA0KJCQgWSA9IFhcYmV0YSArIEUgXFwNClggPSAgXHRleHR7bWF0cml6IGRlbCBkaXNlw7FvIDM2IGZpbGFzIHkgNyBjb2x1bW5hcywgMSBwYXJhIGxhIG1lZGlhIHkgb3RyYSBwYXJhIGNhZGEgZ2Vub3RpcG8gKDYpfVxcDQpcYmV0YSA9IFx0ZXh0e3ZlY3RvciBkZSBwYXJhbWV0cm9zIChcbXU7IFx0YXVfMTsgXHRhdV8yOyBcdGF1XzM7IFx0YXVfNDsgXHRhdV81OyBcdGF1XzYpfSQkDQoNCg0KDQpPVFJBIEZPUk1BIERFIFBMQU5URUFSIExBIEhJUMOTVEVTSVMNCiQkSF8wIDogXHRhdV8xID0gXHRhdV8yID0gXHRhdV8zID0gXHRhdV80ID0gXHRhdV81PSBcdGF1XzYgJCQNCmBgYHtyfQ0KbW9kMT0gYW92KFBTIH4gZ2Vub3RpcG8sIGRhdGE9ZGF0b3MpDQpzdW1tYXJ5KG1vZDEpDQpzbW9kMSA9IHN1bW1hcnkobW9kMSkNCnNtb2QxW1sxXV1bMSw1XQ0KcHYxID0gc21vZDFbWzFdXVsxLDVdDQoNCmlmZWxzZShwdjE8IDAuMDUsJ1JlY2hhem8gSG8nLCAnTk8gcmVjaGF6byBsYSBIbycgKQ0KYGBgDQpDb21vIGVsIHZhbG9yIGRlbCBGIHZhbHVlIGVzIGRlIDE0LDIyICBzZSBwdWVkZSBpbnRlcnByZXRhciBxdWUgbGEgdmFyaWFiaWxpZGFkIGNhdXNhZGEgcG9yIGxvcyBnZW5vdGlwb3MgZXMgMTQsMjIgdmVjZXMgbcOhcyBncmFuZGUgcXVlIGxhIGNhdXNhZGEgcG9yIGVsIGVycm9yLiAgDQoNCipJbnRlcnByZXRhbmRvIGVsIHAtdmFsdWUqDQoNCkZPUk1BIDE6DQpUZW5pZW5kbyBlbiBjdWVudGEgcXVlIGVsIHAgdmFsb3IgZGFkbyBwb3IgbGEgdGFibGEgZGUgYW5vdmEgcGFyYSBlc3RlIGV4cGVyaW1lbnRvIGVzIG1lbm9yIGRlbCA1JSBzZSByZWNoYSBsYSBoaXDDs3Rlc2lzIG51bGEsIGxvIHF1ZSBzdWdpZXJlIHF1ZSBleGlzdGVuIGRpZmVyZW5jaWFzIGVuIGFsbWVub3MgdW5vIGRlIGxvcyB0cmF0YW1pZW50b3MgZW4gY3VhbnRvIGFsIHBlc28gc2Vjby4gDQoNCkZPUk1BIDI6DQpMb3MgZGF0b3MgcHJvcG9yY2lvbmFuIGV2aWRlbmNpYSBlbiBjb250cmEgZGUgbGEgaGlww7N0ZXNpcyBudWxhIChhIGZhdm9yIGRlIGxhIGFsdGVybmEpLiBMbyBxdWUgZGljZSBxdWUgbG9zIHRyYXRhbWllbnRvcyBubyBzb24gaWd1YWxlcyAoc2luIGVtYmFyZ28gbm8gcGVybWl0ZSBzYWNhciBjb25zbHVzaW9uZXMpLiANCg0KDQoNCkVTVElNQVIgRUVGQ1RPUw0KYGBge3J9DQojbWVkaWEgZ2xvYmFsDQptdSA9IG1lYW4oZGF0b3MkUFMpDQojbWVkaWEgcG9yIGdlbm90aXBvDQptdV9pID0gdGFwcGx5KGRhdG9zJFBTLCBkYXRvcyRnZW5vdGlwbywgbWVhbikNCiNlZmVjdG8gcG9yIGdlbm90aXBvDQp0YXVfaSA9IG11X2kgLSBtdQ0KdGF1X2kNCmBgYA0KYGBge3J9DQp2YXJfaSA9IHRhcHBseShkYXRvcyRQUywgZGF0b3MkZ2Vub3RpcG8sIHZhcikNCmJveHBsb3QoUFMgfiBnZW5vdGlwbywgZGF0b3MsIHlsaW09YygxMDAwLDE4MDApLCBsYXM9MSkNCnBvaW50cygxOjYsIG11X2ksIHBjaD0xNiwgY29sPSdyZWQnKQ0KYWJsaW5lKGggPSBtdSwgbHR5PTIsIGNvbD0neWVsbG93JykNCnNlZ21lbnRzKDE6NiAtLjIsIG11X2ksIDE6Ni0gMC4yLCBtdSAsIGNvbD0nYmx1ZScsIGx3ZD0yLCBsdHk9MikNCnRleHQoMTo2LCByZXAoMTcwMCwgNiksIHJvdW5kKHRhdV9pLCAyKSkNCnRleHQoMTo2LCByZXAoMTAwMCwgNiksIHJvdW5kKHZhcl9pLCAyKSkNCg0KYGBgDQoNClJFVklTScOTTiBERSBTVVBVRVNUT1MNCiQkSF8wOiBcc2lnbWFeMl97ZzF9ID0gXHNpZ21hXjJfe2cyfSA9IFxzaWdtYV4yX3tnM30gPSBcc2lnbWFeMl97ZzR9ID0gXHNpZ21hXjJfe2c1fSA9IFxzaWdtYV4yX3tnNn0gPSQkDQoNCiQkSF8wOiBcZXBzaWxvbiBcc2ltIE4oMCwgXHNpZ21hXjJfZSkkJA0KTGEgZGlmZXJlbmNpYSBlbnRyZSBsbyBlc3RpbWFkbyB5IGxvIGNhbGN1bGFkbyBlcyBsbyBxdWUgc2UgY29ub2NlIGNvbW8gKnJlc2lkdWFsKg0KDQpMbyByZXNpZHVhbGVzIGRlYmVuIGRlIHRlbmVyIGZvcm1hIGRlIGRpc3RyaWJ1Y2nDs24gbm9ybWFsIHkgdW5hIHZhcmlhbnphIG11eSBwYXJlY2lkYSBvIGluY2x1c28gaWd1YWwuDQoNCmBgYHtyfQ0KaGlzdChtb2QxJHJlc2lkdWFscykNCnZhcl9yZXMgPSB0YXBwbHkobW9kMSRyZXNpZHVhbHMsIGRhdG9zJGdlbm90aXBvLCB2YXIpDQpgYGANCmBgYHtyfQ0KI1RFU1QgREUgQkFSVExFVFQNCiNQUlVFQkEgRVNUQUTDjVNUSUNBIFFVRSAgUEVSTUlURSBWRVIgU0kgTEFTIFZBUklBTlpBUyBTT04gSUdVQUxFUw0KYmFydGxldHQudGVzdChtb2QxJHJlc2lkdWFscywgZGF0b3MkZ2Vub3RpcG8pDQpgYGANCkNvbW8gZWwgcCB2YWxvciBwYXJhIGxhIHBydWViYSBkZSBpZ3VhbGRhZCBkZSB2YXJpYW56YXMgZXMgZGUgMzQsODIgcXVlIGVzIG1heW9yIGFsIDUsIGhheSBldmlkZW5jaWEgY2llbnRpZmljYSBwYXJhIGRldGVybWluYXIgcXVlIGxhcyB2YXJpYW56YXMgc29uIGRpZmVyZW50ZXMgZW50cmUgc8OtLg0KQ29tbyBlbCBwIHZhbG9yIHBhcmEgbGEgcHJ1ZWJhIGRlIGlndWFsZGFkIGRlIHZhcmlhbnphcyBlcyBtYXlvciBhbCA1JSBlc3RhZMOtc3RpY2FtZW50ZSBzZSBwdWVkZW4gY29uc2lkZXJhciBpZ3VhbGVzLg0KDQpgYGB7cn0NCiNQUlVFQkEgREUgU0hBUElSTw0KI05PUk1BTElEQUQgREUgUkVTSURVT1MNCnNoYXBpcm8udGVzdChtb2QxJHJlc2lkdWFscykNCmBgYA0KY29tbyBlbCBwIHZhbG9yIGVuIGxhIHBydWViYSBkZSBub3JtYWxpZGFkIGVzIGRlIDUxLjY0JSAoPjUlKSBzZSBjb25zaWRlcmEgcXVlIGxvcyByZXNpZHVhbGVzIHNpZ3VlbiB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwNCg0KQ09NUEFSQUNJw5NOIERFIE1FRElBUyBQT1NURVJJT1IgQUwgQU5BTElTSVMgREUgVkFSSUFOWkENCmBgYHtyfQ0KI1BSVUVCQSBERSBUVUNLRVkNCiMobcOheGltYSBkaWZlcmVuY2lhIGRlIHR1a2V5KQ0KcGFyKG1hciA9IGMoNCwgNiwgMywgMSkpDQp0dCA9IFR1a2V5SFNEKG1vZDEsICdnZW5vdGlwbycpDQpwbG90KHR0LCBsYXMgPSAxKQ0KYWJsaW5lKHY9MCwgbHR5PTIsIGNvbD0gJ3JlZCcsIGx3ZD0yKQ0KdHQNCg0KYGBgDQoNClNpIGVzdMOhbiB0b2NhZG9zIHBvciBsYSBsaW5lYSBkZWwgbWVkaW8gKDApIHNlIHB1ZWRlIGludGVycHJldGFyIHF1ZSBubyBoYXkgZGlmZXJlbmNpYSBlbnRyZSBzw60uIA0KRW4gZWwgdHQgY3VhZG8gaGF5IHZhbG9yZXMgcXVlIHRpZW5lbiB1biBwIHZhbG9yIChwIGFkaikgbWF5b3IgYWwgNSUgc2UgcHVlZGUgaW50ZXJwcmV0YXIgcXVlIG5vIGRpZmllcmVuIChzb24gaWd1YWxlcykNCmBgYHtyfQ0KbGlicmFyeShhZ3JpY29sYWUpDQpgYGANCmBgYHtyfQ0KI1BSVUVCQSBERSBEVU5DQU4NCg0KZHQ9IGR1bmNhbi50ZXN0KG1vZDEsICdnZW5vdGlwbycsIGNvbnNvbGUgPSBUKQ0KcGxvdChkdCkNCg0KYGBgDQpDdWFuZG8gbGFzIGxldHJhcyBzb24gaWd1YWxlcyBzZSBwdWVkZW4gY29uc2lkZXJhciBnZW5vdGlwb3MgaWd1YWxlcy4gDQoNCg0KRElTRcORTyAxIChJTkNVTVBMSU1JRU5UTyBERSBTVVBVRVNUT1MpDQpgYGB7cn0NCiNGQUNUT1INCmdlbm90aXBvID0gZ2wobiA9IDYsIGsgPSA2LCBsZW5ndGggPSAzNiwNCiAgICAgICAgICAgICAgbGFiZWxzID0gcGFzdGUwKCdnZW4nLCAxOjYpKQ0KDQojVkFSSUFCTEUgUkVTUFVFU1RBDQpzZXQuc2VlZCgxMjMpDQpQUyA9IGMoDQogIHJub3JtKDEyLCAxMjAwLCAxMjApLA0KICBybm9ybSgxMiwgMTUwMCwgMTAwKSwNCiAgcm5vcm0oMTIsIDE0MjAsIDI1MCkNCikNCg0KZGF0b3MgPSBkYXRhLmZyYW1lKGdlbm90aXBvLCBQUykNCmhlYWQoZGF0b3MpDQoNCmBgYA0KYGBge3J9DQpnZ3Bsb3QoZGF0b3MpICsgDQogIGFlcyhnZW5vdGlwbywgUFMpICsgDQogIGdlb21fYm94cGxvdCgpDQpgYGANCg0KYGBge3J9DQptb2QxYiA9IGFvdihQUyB+IGdlbm90aXBvLCBkYXRvcykNCnNtb2QxYiA9IHN1bW1hcnkobW9kMWIpDQptb2QxYg0KDQpgYGANCg0KYGBge3J9DQpzaGFwaXJvLnRlc3QobW9kMWIkcmVzaWR1YWxzKQ0KYmFydGxldHQudGVzdChtb2QxYiRyZXNpZHVhbHMgLCBkYXRvcyRnZW5vdGlwbykNCg0KYGBgDQpDb21vIHNlIHJlY2hhemEgbGEgaGlww7N0ZXNpcyBkZSBpZ3VhbGRhZCBkZSB2YXJpYW56YXMgKGJhcnRsZXR0KSwgc2UgaW5jdW1wbGUgZWwgc3VwdWVzdG8sIGxvIGN1YWwgY29tcGxpY2EgbGEgaW50ZXJwcmV0YWNpw7NuLiANCg0KQU5BTElTSVMgREUgVkFSSUFOWkEgUEFSQSBVTiBESVNFw5FPIEZBQ1RPUklBTCBTSU1QTEUgRU4gQVJSRUdMTyBDT01QTEVUQU1FTlRFIEFMIEFaQVIsIEVOIFBSRVNFTkNJQSBERSBIRVRFUk9DRUFTVElDSURBRCAodmFyaWFuemFzIGRlc2lndWFsZXMpLg0KDQoqVG9wIGRlIGlkZWFsaWRhZDoqDQoNCjEuIG9uZSB3YXkuDQoyLiB3ZWxzaA0KMy4ga3J1c2thbA0KYGBge3J9DQptb2QxYyA9IG9uZXdheS50ZXN0KFBTIH4gZ2Vub3RpcG8sIGRhdG9zKQ0KbW9kMWMNCg0KYGBgDQoqKHF1w6kgaGFjZXIpKg0KY3VhbmRvIHNlIGluY3VtcGxlIGxhIG5vcm1hbGlkYWQgZSBpZ3VhbGRhZCBkZSB2YXJpYW56YXMgDQoNCkFOw4FMSVNJUyBERSBWQVJJQU5aQSBOTyBQQVJBTcOJVFJJQ08gUEFSQSBVTiBESVNFw5FPIERFIEFSUkVHTE8gRkFDVE9SSUFMIFNJTVBMRSBDT01QTEVUQU1FTlRFIEFMIEFaQVINCg0KJCRIXzA6IFJfMSA9IFJfMiA9IFJfMyA9IFJfNCA9IFJfNSA9IFJfNiQkDQpgYGB7cn0NCiNLUlVTS0FMIFRFU1QNCiN0cmFiYWphIGNvbiBsb3MgcmFuZ29zIGRlIGxvcyB2YWxvcmVzIHkgbm8gY29uIGxvcyB2YWxvcmVzIHJlYWxlcyBkZSBsb3MgZGF0b3MuDQptb2QxZD0ga3J1c2thbC50ZXN0KFBTLCBnZW5vdGlwbykNCm1vZDFkDQoNCmBgYA0KQ29tcGFyYWNpw7NuIGRlIHJhbmdvcyBwcm9tZWRpb3MgcG9zdGVyaW9yIGEga3J1c2thbC53YWxsaXMNCmBgYHtyfQ0KbGlicmFyeShQTUNNUnBsdXMpDQprd0FsbFBhaXJzTmVtZW55aVRlc3QoUFMsIGdlbm90aXBvKQ0KYGBgDQpgYGB7cn0NCmxpYnJhcnkoRlNBKQ0KZHVublRlc3QoUFMsIGdlbm90aXBvKQ0KYGBgDQoNCmBgYHtyfQ0KcmFuZ29zID0gcmFuayhQUywgdGllcy5tZXRob2QgPSAnYXZlcmFnZScpDQpyYW5nb3MNCmBgYA0KYGBge3J9DQpib3hwbG90KHJhbmdvcyB+IGdlbm90aXBvKQ0KYGBgDQoNCkFOQUxJU0lTIERFIFZBUklBTlpBIFBFUk1VVEFDSU9OQUwNCmBgYHtyfQ0KbGlicmFyeShSVkFpZGVNZW1vaXJlKQ0KYGBgDQpgYGB7cn0NCiNTaW11bGEgcmVwZXRpY2lvbmVzDQpwZXJtLmFub3ZhKFBTIH4gZ2Vub3RpcG8sIGRhdGEgPSBkYXRvcywgbnBlcm0gPSA5OTkgKQ0KYGBgDQpSZWNoYXphIGxhIGhpcG90ZXNpcyBudWxhIHkgZGV0ZXJtaW5hIHF1ZSBsb3MgZ2Vub3RpcG9zIHNvbiBkaWZlcmVudGVzDQo=