O conjunto de dados a seguir consiste nos resultados do teste de inteligência de Wechsler aplicado em \(n = 37\) adultos. O teste é dividido em 4 componentes:

Para cada componente uma pontuação é atribuída.

Carregando o conjunto de dados

wechsler <- read.csv("~/Documents/Cursos_GET_UFF/20241GET00126A1/Datasets/wechsler.csv")
# eliminamos a primeira coluna ID
wechsler_data <- wechsler[,-1]
wechsler_data

Medidas resumo

summary(wechsler_data)
      info            sim             arith      
 Min.   : 6.00   Min.   : 3.000   Min.   : 5.00  
 1st Qu.:10.00   1st Qu.: 7.000   1st Qu.: 9.00  
 Median :13.00   Median :10.000   Median :11.00  
 Mean   :12.57   Mean   : 9.568   Mean   :11.49  
 3rd Qu.:15.00   3rd Qu.:12.000   3rd Qu.:14.00  
 Max.   :19.00   Max.   :18.000   Max.   :17.00  
      pict       
 Min.   : 3.000  
 1st Qu.: 7.000  
 Median : 8.000  
 Mean   : 7.973  
 3rd Qu.: 9.000  
 Max.   :11.000  

Boxplots

boxplot(wechsler_data)

Gráfico de dispersão múltiplo

pairs(wechsler_data, pch = 19)

Gráfico de correlações

O gráfico de correlações (veja também a matriz de correlações) mostra uma correlação positiva entre todos os pares de variáveis, variando de fraca a moderada para quase todas as variáveis. Em particular, a variável sim e info apresentam uma correlação forte, ao passo que as variáveis sime pict a correlação é muito fraca.

# Gráfico de correlações
corrplot(cor(wechsler_data), method = "square", order = "hclust", tl.col='black', tl.cex=.75) 

Matriz de correlações

cor(wechsler_data)
           info        sim     arith       pict
info  1.0000000 0.77152974 0.5658260 0.31816370
sim   0.7715297 1.00000000 0.5129451 0.08135234
arith 0.5658260 0.51294508 1.0000000 0.27987766
pict  0.3181637 0.08135234 0.2798777 1.00000000

Gráficos de Densidades

par(mfrow=c(2,2))
nvar <- ncol(wechsler_data)
nomes<-names(wechsler_data)
for (i in 1:ncol(wechsler_data)) {
  plot(density(wechsler_data[,i]), main = paste("Densidade de",nomes[i]))
}

Verificando a normalidade univariada

Q-Q plots

par(mfrow=c(2,2))
for (j in 1:nvar)
{
  qqPlot(scale(wechsler_data[,j]),dist="norm",mean=0,sd=1,col.lines=1,grid="FALSE",
         xlab="quantil da N(0,1)",ylab=nomes[j],cex=1.2,pch=20,id=FALSE)
}

Para verificar a normalidade univariada usaremos os testes de de Shapiro-Wilks e Anderson-Darling. Ambos os testes não rejeitaram a suposição de normalidade de cada variável.

Teste de Shapiro-Wilks

# Shapiro Wilks Test
shapiro.test(wechsler_data$info)

    Shapiro-Wilk normality test

data:  wechsler_data$info
W = 0.96546, p-value = 0.299
shapiro.test(wechsler_data$sim)

    Shapiro-Wilk normality test

data:  wechsler_data$sim
W = 0.97208, p-value = 0.4677
shapiro.test(wechsler_data$arith)

    Shapiro-Wilk normality test

data:  wechsler_data$arith
W = 0.96511, p-value = 0.2917
shapiro.test(wechsler_data$pict)

    Shapiro-Wilk normality test

data:  wechsler_data$pict
W = 0.95116, p-value = 0.1051

Teste de Anderson-Darling

# Anderson-Darling Test 
ad.test(wechsler_data$info)

    Anderson-Darling normality test

data:  wechsler_data$info
A = 0.49948, p-value = 0.1967
ad.test(wechsler_data$sim)

    Anderson-Darling normality test

data:  wechsler_data$sim
A = 0.40481, p-value = 0.3367
ad.test(wechsler_data$arith)

    Anderson-Darling normality test

data:  wechsler_data$arith
A = 0.3597, p-value = 0.431
ad.test(wechsler_data$pict)

    Anderson-Darling normality test

data:  wechsler_data$pict
A = 0.65581, p-value = 0.08014

Verificando a normalidade multivariada

A fim de verificar a normalidade multivariada dos dados, usamos que a forma quadrática \(d_i^2 = n(\mathbf{X}_i - \bar{\mathbf{X}})^\top\mathbf{S}^{-1}(\mathbf{X}_i - \bar{\mathbf{X}})\) pode ser aproximada por uma \(\chi^2_p\) sob a suposição de normalidade multivariada e \((n-p)\) suficientemente grande. A continuação, apresentamos o Q-Q plot da forma quadrática \(d^2 = \{d_1^2,\ldots,d_{37}^2\}\) e uma \(\chi^2_{4}\). Observa-se no Q-Q plot um desvio da forma quadrática da distribuição \(\chi^2\).

n <- nrow(wechsler_data)
nvar <- ncol(wechsler_data)
vmu <- colMeans(wechsler_data)
mcov <- cov(wechsler_data)
# forma quadrática
d2 <- n*mahalanobis(wechsler_data,center=vmu,cov=mcov)
qqPlot(d2,dist="chisq",df=nvar,col.lines=1,grid="FALSE",
       xlab="quantil da distribuição qui-quadrado",
       ylab=TeX("$d^2$"),
       cex=1.2, 
       pch = 20,
       id = FALSE)

O teste de Kolmogorov-Smirnov, rejeitou a hipótese de que a forma quadrática provem de uma distribuição qui-quadrado, como sugerido pelo Q-Q plot. Contudo, isso pode se dever ao fato que temos um tamanho de amostra pequeno e \(p\) não muito grande, consequentemente teremos uma aproximação “pobre”. Neste caso, mais testes precisam ser realizados.

ks.test(d2,"pchisq",nvar)

    Exact one-sample Kolmogorov-Smirnov test

data:  d2
D = 0.97294, p-value < 2.2e-16
alternative hypothesis: two-sided

Teste de Mardia para normalidade multivariada

O teste de Mardia (1970) é uma generalização do teste univariado baseado em skewness e kurtosis. As estatísticas do teste são formuladas em termos de

\[skew = b_{1,p} = \frac{1}{n^2} \sum_{i=1}^n\sum_{j=1}^n [(\mathbf{X}_i - \bar{\mathbf{X}})^\top\hat{\mathbf{\Sigma}}(\mathbf{X}_j - \bar{\mathbf{X}})]^3;\]

\[kurt = b_{2,p} = \frac{1}{n} \sum_{i=1}^n [(\mathbf{X}_i - \bar{\mathbf{X}})^\top\hat{\mathbf{\Sigma}}(\mathbf{X}_i - \bar{\mathbf{X}})]^2,\]

em que \(\hat{\mathbf{\Sigma}} = \mathbf{S}_n\) é o estimador por máxima verossimilhança de \(\mathbf{\Sigma}\).

Pelos resultados obtidos, não rejeitamos a hipótese de normal multivariada nos dados.

Mardia_Test<-mardia(wechsler_data)
Mardia_Test$mv.test

Elipses de 95% de confiança

Para cada par de variáveies construímos elipses de 95% de confiança. Podemos usar essas elipses para testar se o vetor de médias populacional (de cada par de variáveis) é igual ou não a determinado valor a um nivel de significância do 5%.

Por exemplo, suponha que queremos testar a um nível de significância del 5% se \(\boldsymbol{\mu}^\top\) = [info = 10, sim = 15], “basta” plotar a observação \(\boldsymbol{\mu}_0^\top=[10,15]\) e verificar se “cai” dentro da primeira elipse de confiança no painel acima. Pode-se notar que neste caso, rejeitamos \(H_0: \boldsymbol{\mu} = \boldsymbol{\mu}_0\).

mu0 = c(10,15) # (info,sim)
i=1;j=2
plot(ellipse::ellipse(x = rho[i,j],
                      scale = c(sqrt(var[i]),sqrt(var[j])),
                      centre = c(vmu[i],vmu[j]),
                      level = 0.95
                      ),
     type = "l",
     xlab = nomes[i],
     ylab = nomes[j])
lines(vmu[i],vmu[j], pch = 8, col = "red", type = "p")
lines(mu0[i],mu0[j], pch = 15, col = "blue", type = "p")
text(10,16,"mu0")

LS0tCnRpdGxlOiAiQW7DoWxpc2UgZG9zIGRhZG9zIGRvIFRlc3RlIGRlIFdlY2hzbGVyIChXQUlTKSIKYXV0aG9yOiBKYWltZSBVdHJpYSAtIEFuw6FsaXNlIE11bHRpdmFyaWFkYSBkZSBEYWRvcyAoR0VUMDAxMjYpCm91dHB1dDogaHRtbF9ub3RlYm9vawplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCk8gY29uanVudG8gZGUgZGFkb3MgYSBzZWd1aXIgY29uc2lzdGUgbm9zIHJlc3VsdGFkb3MgZG8gX3Rlc3RlIGRlIGludGVsaWfDqm5jaWEgZGUgV2VjaHNsZXJfIGFwbGljYWRvIGVtICRuID0gMzckIGFkdWx0b3MuIE8gdGVzdGUgw6kgZGl2aWRpZG8gZW0gNCBjb21wb25lbnRlczoKCi0gSW5mb3JtYcOnw6NvIChpbmZvKQotIFNpbWlsYXJpZGFkZXMgKHNpbSkKLSBBcml0bcOpdGljYSAoYXJpdGgpCi0gQ29tcGxldGHDp8OjbyBkZSBpbWFnZW0gKHBpY3QpCgpQYXJhIGNhZGEgY29tcG9uZW50ZSB1bWEgcG9udHVhw6fDo28gw6kgYXRyaWJ1w61kYS4gCgpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KIyBsaWJyYXJpYXMKbGlicmFyeShub3J0ZXN0KQpsaWJyYXJ5KGNvcnJwbG90KQpsaWJyYXJ5KGNhcikKbGlicmFyeShlbGxpcHNlKQpsaWJyYXJ5KG12bm9ybWFsVGVzdCkKbGlicmFyeShsYXRleDJleHApCmBgYAoKIyBDYXJyZWdhbmRvIG8gY29uanVudG8gZGUgZGFkb3MKCmBgYHtyfQp3ZWNoc2xlciA8LSByZWFkLmNzdigifi9Eb2N1bWVudHMvQ3Vyc29zX0dFVF9VRkYvMjAyNDFHRVQwMDEyNkExL0RhdGFzZXRzL3dlY2hzbGVyLmNzdiIpCiMgZWxpbWluYW1vcyBhIHByaW1laXJhIGNvbHVuYSBJRAp3ZWNoc2xlcl9kYXRhIDwtIHdlY2hzbGVyWywtMV0Kd2VjaHNsZXJfZGF0YQpgYGAKCiMgTWVkaWRhcyByZXN1bW8KCmBgYHtyfQpzdW1tYXJ5KHdlY2hzbGVyX2RhdGEpCmBgYAoKCiMgQm94cGxvdHMKCmBgYHtyfQpib3hwbG90KHdlY2hzbGVyX2RhdGEpCmBgYAoKCiMgR3LDoWZpY28gZGUgZGlzcGVyc8OjbyBtw7psdGlwbG8KCmBgYHtyfQpwYWlycyh3ZWNoc2xlcl9kYXRhLCBwY2ggPSAxOSkKYGBgCgojIEdyw6FmaWNvIGRlIGNvcnJlbGHDp8O1ZXMKCk8gZ3LDoWZpY28gZGUgY29ycmVsYcOnw7VlcyAodmVqYSB0YW1iw6ltIGEgbWF0cml6IGRlIGNvcnJlbGHDp8O1ZXMpIG1vc3RyYSB1bWEgY29ycmVsYcOnw6NvIHBvc2l0aXZhIGVudHJlIHRvZG9zIG9zIHBhcmVzIGRlIHZhcmnDoXZlaXMsIHZhcmlhbmRvIGRlIGZyYWNhIGEgbW9kZXJhZGEgcGFyYSBxdWFzZSB0b2RhcyBhcyB2YXJpw6F2ZWlzLiBFbSBwYXJ0aWN1bGFyLCBhIHZhcmnDoXZlbCBgc2ltYCBlIGBpbmZvYCBhcHJlc2VudGFtIHVtYSBjb3JyZWxhw6fDo28gZm9ydGUsIGFvIHBhc3NvIHF1ZSBhcyB2YXJpw6F2ZWlzIGBzaW1gZSBgcGljdGAgYSBjb3JyZWxhw6fDo28gw6kgbXVpdG8gZnJhY2EuCgpgYGB7cn0KIyBHcsOhZmljbyBkZSBjb3JyZWxhw6fDtWVzCmNvcnJwbG90KGNvcih3ZWNoc2xlcl9kYXRhKSwgbWV0aG9kID0gInNxdWFyZSIsIG9yZGVyID0gImhjbHVzdCIsIHRsLmNvbD0nYmxhY2snLCB0bC5jZXg9Ljc1KSAKYGBgCiMgTWF0cml6IGRlIGNvcnJlbGHDp8O1ZXMKCmBgYHtyfQpjb3Iod2VjaHNsZXJfZGF0YSkKYGBgCgoKIyBHcsOhZmljb3MgZGUgRGVuc2lkYWRlcyAKCmBgYHtyfQpwYXIobWZyb3c9YygyLDIpKQpudmFyIDwtIG5jb2wod2VjaHNsZXJfZGF0YSkKbm9tZXM8LW5hbWVzKHdlY2hzbGVyX2RhdGEpCmZvciAoaSBpbiAxOm5jb2wod2VjaHNsZXJfZGF0YSkpIHsKICBwbG90KGRlbnNpdHkod2VjaHNsZXJfZGF0YVssaV0pLCBtYWluID0gcGFzdGUoIkRlbnNpZGFkZSBkZSIsbm9tZXNbaV0pKQp9CmBgYAoKIyBWZXJpZmljYW5kbyBhIG5vcm1hbGlkYWRlIHVuaXZhcmlhZGEKCiMjIFEtUSBwbG90cyAKCgpgYGB7cn0KcGFyKG1mcm93PWMoMiwyKSkKZm9yIChqIGluIDE6bnZhcikKewogIHFxUGxvdChzY2FsZSh3ZWNoc2xlcl9kYXRhWyxqXSksZGlzdD0ibm9ybSIsbWVhbj0wLHNkPTEsY29sLmxpbmVzPTEsZ3JpZD0iRkFMU0UiLAogICAgICAgICB4bGFiPSJxdWFudGlsIGRhIE4oMCwxKSIseWxhYj1ub21lc1tqXSxjZXg9MS4yLHBjaD0yMCxpZD1GQUxTRSkKfQpgYGAKCgpQYXJhIHZlcmlmaWNhciBhIG5vcm1hbGlkYWRlIHVuaXZhcmlhZGEgdXNhcmVtb3Mgb3MgdGVzdGVzIGRlIGRlIFNoYXBpcm8tV2lsa3MgZSBBbmRlcnNvbi1EYXJsaW5nLiBBbWJvcyBvcyB0ZXN0ZXMgbsOjbyByZWplaXRhcmFtIGEgc3Vwb3Npw6fDo28gZGUgbm9ybWFsaWRhZGUgZGUgY2FkYSB2YXJpw6F2ZWwuIAoKIyMgVGVzdGUgZGUgU2hhcGlyby1XaWxrcwoKYGBge3J9CiMgU2hhcGlybyBXaWxrcyBUZXN0CnNoYXBpcm8udGVzdCh3ZWNoc2xlcl9kYXRhJGluZm8pCnNoYXBpcm8udGVzdCh3ZWNoc2xlcl9kYXRhJHNpbSkKc2hhcGlyby50ZXN0KHdlY2hzbGVyX2RhdGEkYXJpdGgpCnNoYXBpcm8udGVzdCh3ZWNoc2xlcl9kYXRhJHBpY3QpCmBgYAoKIyMgVGVzdGUgZGUgQW5kZXJzb24tRGFybGluZwoKYGBge3J9CiMgQW5kZXJzb24tRGFybGluZyBUZXN0IAphZC50ZXN0KHdlY2hzbGVyX2RhdGEkaW5mbykKYWQudGVzdCh3ZWNoc2xlcl9kYXRhJHNpbSkKYWQudGVzdCh3ZWNoc2xlcl9kYXRhJGFyaXRoKQphZC50ZXN0KHdlY2hzbGVyX2RhdGEkcGljdCkKYGBgCgojIFZlcmlmaWNhbmRvIGEgbm9ybWFsaWRhZGUgbXVsdGl2YXJpYWRhCgpBIGZpbSBkZSB2ZXJpZmljYXIgYSBub3JtYWxpZGFkZSBtdWx0aXZhcmlhZGEgZG9zIGRhZG9zLCB1c2Ftb3MgcXVlIGEgZm9ybWEgcXVhZHLDoXRpY2EgJGRfaV4yID0gbihcbWF0aGJme1h9X2kgLSBcYmFye1xtYXRoYmZ7WH19KV5cdG9wXG1hdGhiZntTfV57LTF9KFxtYXRoYmZ7WH1faSAtIFxiYXJ7XG1hdGhiZntYfX0pJCBwb2RlIHNlciBhcHJveGltYWRhIHBvciB1bWEgJFxjaGleMl9wJCBzb2IgYSBzdXBvc2nDp8OjbyBkZSBub3JtYWxpZGFkZSBtdWx0aXZhcmlhZGEgZSAkKG4tcCkkIHN1ZmljaWVudGVtZW50ZSBncmFuZGUuIEEgY29udGludWHDp8OjbywgYXByZXNlbnRhbW9zIG8gUS1RIHBsb3QgZGEgZm9ybWEgcXVhZHLDoXRpY2EgJGReMiA9IFx7ZF8xXjIsXGxkb3RzLGRfezM3fV4yXH0kIGUgdW1hICRcY2hpXjJfezR9JC4gT2JzZXJ2YS1zZSBubyBRLVEgcGxvdCB1bSBkZXN2aW8gZGEgZm9ybWEgcXVhZHLDoXRpY2EgZGEgZGlzdHJpYnVpw6fDo28gJFxjaGleMiQuICAKCmBgYHtyfQpuIDwtIG5yb3cod2VjaHNsZXJfZGF0YSkKbnZhciA8LSBuY29sKHdlY2hzbGVyX2RhdGEpCnZtdSA8LSBjb2xNZWFucyh3ZWNoc2xlcl9kYXRhKQptY292IDwtIGNvdih3ZWNoc2xlcl9kYXRhKQojIGZvcm1hIHF1YWRyw6F0aWNhCmQyIDwtIG4qbWFoYWxhbm9iaXMod2VjaHNsZXJfZGF0YSxjZW50ZXI9dm11LGNvdj1tY292KQpxcVBsb3QoZDIsZGlzdD0iY2hpc3EiLGRmPW52YXIsY29sLmxpbmVzPTEsZ3JpZD0iRkFMU0UiLAogICAgICAgeGxhYj0icXVhbnRpbCBkYSBkaXN0cmlidWnDp8OjbyBxdWktcXVhZHJhZG8iLAogICAgICAgeWxhYj1UZVgoIiRkXjIkIiksCiAgICAgICBjZXg9MS4yLCAKICAgICAgIHBjaCA9IDIwLAogICAgICAgaWQgPSBGQUxTRSkKYGBgCgpPIHRlc3RlIGRlIEtvbG1vZ29yb3YtU21pcm5vdiwgcmVqZWl0b3UgYSBoaXDDs3Rlc2UgZGUgcXVlIGEgZm9ybWEgcXVhZHLDoXRpY2EgcHJvdmVtIGRlIHVtYSBkaXN0cmlidWnDp8OjbyBxdWktcXVhZHJhZG8sIGNvbW8gc3VnZXJpZG8gcGVsbyBRLVEgcGxvdC4gQ29udHVkbywgaXNzbyBwb2RlIHNlIGRldmVyIGFvIGZhdG8gcXVlIHRlbW9zIHVtIHRhbWFuaG8gZGUgYW1vc3RyYSAqcGVxdWVubyogZSAkcCQgbsOjbyBtdWl0byBncmFuZGUsIGNvbnNlcXVlbnRlbWVudGUgdGVyZW1vcyB1bWEgYXByb3hpbWHDp8OjbyAicG9icmUiLiBOZXN0ZSBjYXNvLCBtYWlzIHRlc3RlcyBwcmVjaXNhbSBzZXIgcmVhbGl6YWRvcy4gIAoKCmBgYHtyfQprcy50ZXN0KGQyLCJwY2hpc3EiLG52YXIpCmBgYAoKCiMgVGVzdGUgZGUgTWFyZGlhIHBhcmEgbm9ybWFsaWRhZGUgbXVsdGl2YXJpYWRhCgpPIHRlc3RlIGRlIE1hcmRpYSAoMTk3MCkgw6kgdW1hIGdlbmVyYWxpemHDp8OjbyBkbyB0ZXN0ZSB1bml2YXJpYWRvIGJhc2VhZG8gZW0gKnNrZXduZXNzKiBlICprdXJ0b3NpcyouIEFzIGVzdGF0w61zdGljYXMgZG8gdGVzdGUgc8OjbyBmb3JtdWxhZGFzIGVtIHRlcm1vcyBkZQoKJCRza2V3ID0gYl97MSxwfSA9IFxmcmFjezF9e25eMn0gXHN1bV97aT0xfV5uXHN1bV97aj0xfV5uIFsoXG1hdGhiZntYfV9pIC0gXGJhcntcbWF0aGJme1h9fSleXHRvcFxoYXR7XG1hdGhiZntcU2lnbWF9fShcbWF0aGJme1h9X2ogLSBcYmFye1xtYXRoYmZ7WH19KV1eMzskJAoKJCRrdXJ0ID0gYl97MixwfSA9IFxmcmFjezF9e259IFxzdW1fe2k9MX1ebiBbKFxtYXRoYmZ7WH1faSAtIFxiYXJ7XG1hdGhiZntYfX0pXlx0b3BcaGF0e1xtYXRoYmZ7XFNpZ21hfX0oXG1hdGhiZntYfV9pIC0gXGJhcntcbWF0aGJme1h9fSldXjIsJCQKCmVtIHF1ZSAkXGhhdHtcbWF0aGJme1xTaWdtYX19ID0gXG1hdGhiZntTfV9uJCDDqSBvIGVzdGltYWRvciBwb3IgbcOheGltYSB2ZXJvc3NpbWlsaGFuw6dhIGRlICRcbWF0aGJme1xTaWdtYX0kLiAKClBlbG9zIHJlc3VsdGFkb3Mgb2J0aWRvcywgbsOjbyByZWplaXRhbW9zIGEgaGlww7N0ZXNlIGRlIG5vcm1hbCBtdWx0aXZhcmlhZGEgbm9zIGRhZG9zLiAKCmBgYHtyfQpNYXJkaWFfVGVzdDwtbWFyZGlhKHdlY2hzbGVyX2RhdGEpCk1hcmRpYV9UZXN0JG12LnRlc3QKYGBgCgojIEVsaXBzZXMgZGUgOTUlIGRlIGNvbmZpYW7Dp2EKClBhcmEgY2FkYSBwYXIgZGUgdmFyacOhdmVpZXMgY29uc3RydcOtbW9zIGVsaXBzZXMgZGUgOTUlIGRlIGNvbmZpYW7Dp2EuIFBvZGVtb3MgdXNhciBlc3NhcyBlbGlwc2VzIHBhcmEgKnRlc3Rhciogc2UgbyB2ZXRvciBkZSBtw6lkaWFzIHBvcHVsYWNpb25hbCAoZGUgY2FkYSBwYXIgZGUgdmFyacOhdmVpcykgw6kgaWd1YWwgb3UgbsOjbyBhIGRldGVybWluYWRvIHZhbG9yIGEgdW0gbml2ZWwgZGUgc2lnbmlmaWPDom5jaWEgZG8gNSUuIAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KcmhvIDwtIGNvcih3ZWNoc2xlcl9kYXRhKQp2YXIgPC0gZGlhZyhtY292KQpwYXIobWZyb3c9YygyLDMpKQpmb3IgKGkgaW4gMToobnZhci0xKSl7CiAgZm9yIChqIGluIChpKzEpOm52YXIpewpwbG90KGVsbGlwc2U6OmVsbGlwc2UoeCA9IHJob1tpLGpdLAogICAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBjKHNxcnQodmFyW2ldKSxzcXJ0KHZhcltqXSkpLAogICAgICAgICAgICAgICAgICAgICAgY2VudHJlID0gYyh2bXVbaV0sdm11W2pdKSwKICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gMC45NQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICB0eXBlID0gImwiLAogICAgIHhsYWIgPSBub21lc1tpXSwKICAgICB5bGFiID0gbm9tZXNbal0pCmxpbmVzKHZtdVtpXSx2bXVbal0sIHBjaCA9IDgsIGNvbCA9ICJyZWQiLCB0eXBlID0gInAiKQpwb2ludHMod2VjaHNsZXJfZGF0YVssaV0sd2VjaHNsZXJfZGF0YVssal0sCiAgICAgICBwY2g9MjAsCiAgICAgICBjZXg9MS4yLAogICAgICAgY2V4LmxhYj0xLjIsCiAgICAgICBjZXguYXhpcz0xLjIsCiAgICAgICBjb2w9ImRhcmtncmVlbiIpCiAgIH0KfQpgYGAKUG9yIGV4ZW1wbG8sIHN1cG9uaGEgcXVlIHF1ZXJlbW9zIHRlc3RhciBhIHVtIG7DrXZlbCBkZSBzaWduaWZpY8OibmNpYSBkZWwgNSUgc2UgJFxib2xkc3ltYm9se1xtdX1eXHRvcCQgPSBbYGluZm9gID0gMTAsIGBzaW1gID0gMTVdLCAiYmFzdGEiIHBsb3RhciBhIG9ic2VydmHDp8OjbyAkXGJvbGRzeW1ib2x7XG11fV8wXlx0b3A9WzEwLDE1XSQgZSB2ZXJpZmljYXIgc2UgImNhaSIgZGVudHJvIGRhIHByaW1laXJhIGVsaXBzZSBkZSBjb25maWFuw6dhIG5vIHBhaW5lbCBhY2ltYS4gUG9kZS1zZSBub3RhciBxdWUgbmVzdGUgY2FzbywgcmVqZWl0YW1vcyAkSF8wOiBcYm9sZHN5bWJvbHtcbXV9ID0gXGJvbGRzeW1ib2x7XG11fV8wJC4gICAKCmBgYHtyfQptdTAgPSBjKDEwLDE1KSAjIChpbmZvLHNpbSkKaT0xO2o9MgpwbG90KGVsbGlwc2U6OmVsbGlwc2UoeCA9IHJob1tpLGpdLAogICAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBjKHNxcnQodmFyW2ldKSxzcXJ0KHZhcltqXSkpLAogICAgICAgICAgICAgICAgICAgICAgY2VudHJlID0gYyh2bXVbaV0sdm11W2pdKSwKICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gMC45NQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICB0eXBlID0gImwiLAogICAgIHhsYWIgPSBub21lc1tpXSwKICAgICB5bGFiID0gbm9tZXNbal0pCmxpbmVzKHZtdVtpXSx2bXVbal0sIHBjaCA9IDgsIGNvbCA9ICJyZWQiLCB0eXBlID0gInAiKQpsaW5lcyhtdTBbaV0sbXUwW2pdLCBwY2ggPSAxNSwgY29sID0gImJsdWUiLCB0eXBlID0gInAiKQp0ZXh0KDEwLDE2LCJtdTAiKQpgYGAKCg==