Pacotes

pacman::p_load(knitr,
kableExtra,
tidyverse,
janitor,
summarytools,
DataExplorer,
readxl,
tableone,
psych,
stringr,
apaTable,
arsenal,
likert,
apaTables,
compareGroups,
olsrr,
ez,
ggstatsplot)

importat base

library(readxl)
ds <- read_excel("C:/Users/Lucas VDC/Meu Drive/Graduação Psicologia/Extensão tratamento de dados/dupla rota/Banco de dados Dupla Tarefa - pra siac.xlsx")
View(ds)

Codificação e Consolidação dos dados

ds <- clean_names(ds)

ds %>% names
 [1] "sexo"                                "idade"                              
 [3] "wcst_categorias_completadas"         "wcst_total_de_erros"                
 [5] "andar_velocidade_m_s"                "tempo_de_reacao_s_fluencia"         
 [7] "tempo_de_reacao_s_subtracao_seriado" "tempo_de_reacao_s_trilhas_a"        
 [9] "tempo_de_reacao_s_trilhas_b"         "velocidade_m_s_andar_bandeja"       
[11] "tempo_de_reacao_s_andar_fluencia"    "velocidade_m_s_andar_fluencia"      
[13] "tempo_de_reacao_s_andar_seriado"     "velocidade_m_s_andar_seriado"       
[15] "tempo_de_reacao_s_andar_trilhas_a"   "velocidade_m_s_andar_trilhas_a"     
[17] "tempo_de_reacao_s_andar_trilhas_b"   "velocidade_m_s_andar_trilhas_b"     
ds <- ds %>% mutate(sexo = as.factor(sexo))

ds <- ds %>% mutate(velocidade_m_s_andar_bandeja = as.numeric(velocidade_m_s_andar_bandeja        ))

Tabela descritiva

ds %>%
  select(sexo:velocidade_m_s_andar_trilhas_b) %>%
  tableby(~ ., data = .,
          control = tableby.control(
            total       = FALSE,
            test        = FALSE,
            numeric.stats = c("meansd","range"),
            cat.stats     = c("countpct"),
            stats.labels  = list(meansd = "Média (DP)", range = "Variação"),
            digits      = 2,        # casas p/ números
            digits.pct  = 1,        # casas p/ %
            format.pct  = TRUE
          )) %>%
  summary(text = TRUE)
Overall (N=15)
sexo
- Feminino 7 (46.7%)
- Masculino 8 (53.3%)
idade
- Média (DP) 69.33 (8.41)
- Variação 52.00 - 85.00
wcst_categorias_completadas
- Média (DP) 2.87 (2.33)
- Variação 0.00 - 6.00
wcst_total_de_erros
- Média (DP) 57.00 (24.74)
- Variação 14.00 - 83.00
andar_velocidade_m_s
- Média (DP) 1.04 (0.20)
- Variação 0.76 - 1.42
tempo_de_reacao_s_fluencia
- Média (DP) 3.26 (1.01)
- Variação 1.50 - 5.00
tempo_de_reacao_s_subtracao_seriado
- Média (DP) 13.51 (9.31)
- Variação 5.00 - 33.33
tempo_de_reacao_s_trilhas_a
- Média (DP) 0.65 (0.10)
- Variação 0.54 - 0.83
tempo_de_reacao_s_trilhas_b
- Média (DP) 6.26 (5.86)
- Variação 0.76 - 20.00
velocidade_m_s_andar_bandeja
- Média (DP) 1.05 (0.16)
- Variação 0.76 - 1.40
tempo_de_reacao_s_andar_fluencia
- Média (DP) 2.75 (3.23)
- Variação 0.61 - 11.90
velocidade_m_s_andar_fluencia
- Média (DP) 0.85 (0.17)
- Variação 0.56 - 1.25
tempo_de_reacao_s_andar_seriado
- Média (DP) 9.48 (15.21)
- Variação 0.00 - 62.50
velocidade_m_s_andar_seriado
- Média (DP) 0.75 (0.18)
- Variação 0.47 - 1.10
tempo_de_reacao_s_andar_trilhas_a
- Média (DP) 15.02 (27.81)
- Variação 0.40 - 100.00
velocidade_m_s_andar_trilhas_a
- Média (DP) 1.03 (0.20)
- Variação 0.65 - 1.40
tempo_de_reacao_s_andar_trilhas_b
- Média (DP) 23.51 (32.86)
- Variação 10.00 - 133.33
velocidade_m_s_andar_trilhas_b
- Média (DP) 1.65 (3.15)
- Variação 0.54 - 13.00
NA

hipótese 1: diferença na velocidade normal e com tarefa secundária

# Pacotes necessários
library(dplyr)
library(effectsize)

# Comparar velocidade normal vs. velocidades com tarefas secundárias
# Lista de variáveis de interesse
tarefas <- c("velocidade_m_s_andar_bandeja",
             "velocidade_m_s_andar_fluencia",
             "velocidade_m_s_andar_seriado",
             "velocidade_m_s_andar_trilhas_a",
             "velocidade_m_s_andar_trilhas_b")

# Loop para rodar t-teste pareado + d de Cohen
resultados <- lapply(tarefas, function(var){
  teste <- t.test(ds$andar_velocidade_m_s, ds[[var]], paired = TRUE)
  efeito <- cohens_d(ds$andar_velocidade_m_s, ds[[var]], paired = TRUE)
  
  tibble(
    Comparação = paste("andar_velocidade_m_s vs", var),
    Media_sem_tarefa = mean(ds$andar_velocidade_m_s, na.rm = TRUE),
    Media_com_tarefa = mean(ds[[var]], na.rm = TRUE),
    t = unname(teste$statistic),
    gl = teste$parameter,
    p_valor = teste$p.value,
    cohen_d = efeito$Cohens_d,
    interpretacao = efeito$Interpretation
  )
}) %>% bind_rows()

# Visualizar resultados
print(resultados, n = Inf)
NA

hipótese 2: à medida que aumenta a demanda cognitiva (DT), haverá redução no desempenho motor em relação à condição de tarefa única, configurando uma correlação negativa entre os desempenhos.


# Selecionar variáveis de interesse
dt_vars <- c("velocidade_m_s_andar_bandeja",
             "velocidade_m_s_andar_fluencia",
             "velocidade_m_s_andar_seriado",
             "velocidade_m_s_andar_trilhas_a",
             "velocidade_m_s_andar_trilhas_b")

# Rodar correlação de Pearson entre TU e cada DT
resultados_cor <- lapply(dt_vars, function(var){
  teste <- cor.test(ds$andar_velocidade_m_s, ds[[var]], method = "pearson")
  
  tibble(
    Comparacao = paste("TU vs", var),
    r = unname(teste$estimate),
    IC_inf = teste$conf.int[1],
    IC_sup = teste$conf.int[2],
    p_valor = teste$p.value
  )
}) %>% bind_rows()

# Visualizar resultados
print(resultados_cor, n = Inf)
NA

gráfico

library(ggplot2)
library(ggpubr)

# Lista de variáveis DT
dt_vars <- c("velocidade_m_s_andar_bandeja",
             "velocidade_m_s_andar_fluencia",
             "velocidade_m_s_andar_seriado",
             "velocidade_m_s_andar_trilhas_a",
             "velocidade_m_s_andar_trilhas_b")

# Criar gráficos em loop
graficos <- lapply(dt_vars, function(var){
  ggplot(ds, aes_string(x = "andar_velocidade_m_s", y = var)) +
    geom_point(size = 2, alpha = 0.7) +
    geom_smooth(method = "lm", se = TRUE, color = "blue") +
    stat_cor(method = "pearson", label.x.npc = "left", label.y.npc = "top") +
    labs(x = "Velocidade da marcha (Tarefa Única, m/s)",
         y = paste("Velocidade da marcha com", gsub("velocidade_m_s_andar_", "", var), "(m/s)")) +
    theme_bw(base_size = 12)
})

# Exibir primeiro gráfico
graficos[[1]]


graficos[[2]]


# Se quiser ver todos de uma vez, pode usar patchwork ou cowplot:
library(patchwork)
 wrap_plots(graficos)

agora utilizando o tempo de reação

library(dplyr)

# Variáveis de interesse
tempo_vars_tu <- c("tempo_de_reacao_s_fluencia",
                   "tempo_de_reacao_s_trilhas_a",
                   "tempo_de_reacao_s_trilhas_b")

tempo_vars_dt <- c("tempo_de_reacao_s_andar_fluencia",
                   "tempo_de_reacao_s_andar_trilhas_a",
                   "tempo_de_reacao_s_andar_trilhas_b")

# Correlações TU x DT
resultados_tempo <- list(
  cor.test(ds$tempo_de_reacao_s_fluencia, ds$tempo_de_reacao_s_andar_fluencia, method = "pearson"),
  cor.test(ds$tempo_de_reacao_s_trilhas_a, ds$tempo_de_reacao_s_andar_trilhas_a, method = "pearson"),
  cor.test(ds$tempo_de_reacao_s_trilhas_b, ds$tempo_de_reacao_s_andar_trilhas_b, method = "pearson")
)

# Organizar em tabela
tabela_tempo <- tibble(
  Comparação = c("Fluência vs. Andar fluência",
                 "Trilhas A vs. Andar trilhas A",
                 "Trilhas B vs. Andar trilhas B"),
  r = sapply(resultados_tempo, function(x) unname(x$estimate)),
  IC_inf = sapply(resultados_tempo, function(x) x$conf.int[1]),
  IC_sup = sapply(resultados_tempo, function(x) x$conf.int[2]),
  p_valor = sapply(resultados_tempo, function(x) x$p.value)
)

print(tabela_tempo)
NA

h3: relação a própria percepção do paciente em relação a sua performance

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQ0KLS0tDQoNCiMgUGFjb3Rlcw0KDQoNCmBgYCB7ciBwYWNrYWdlcyB9DQpwYWNtYW46OnBfbG9hZChrbml0ciwNCmthYmxlRXh0cmEsDQp0aWR5dmVyc2UsDQpqYW5pdG9yLA0Kc3VtbWFyeXRvb2xzLA0KRGF0YUV4cGxvcmVyLA0KcmVhZHhsLA0KdGFibGVvbmUsDQpwc3ljaCwNCnN0cmluZ3IsDQphcGFUYWJsZSwNCmFyc2VuYWwsDQpsaWtlcnQsDQphcGFUYWJsZXMsDQpjb21wYXJlR3JvdXBzLA0Kb2xzcnIsDQpleiwNCmdnc3RhdHNwbG90KQ0KYGBgDQoNCj4gaW1wb3J0YXQgYmFzZQ0KDQpgYGB7cn0NCmxpYnJhcnkocmVhZHhsKQ0KZHMgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvTHVjYXMgVkRDL01ldSBEcml2ZS9HcmFkdWHDp8OjbyBQc2ljb2xvZ2lhL0V4dGVuc8OjbyB0cmF0YW1lbnRvIGRlIGRhZG9zL2R1cGxhIHJvdGEvQmFuY28gZGUgZGFkb3MgRHVwbGEgVGFyZWZhIC0gcHJhIHNpYWMueGxzeCIpDQpWaWV3KGRzKQ0KYGBgDQoNCiMgQ29kaWZpY2HDp8OjbyBlIENvbnNvbGlkYcOnw6NvIGRvcyBkYWRvcw0KDQpgYGB7cn0NCmRzIDwtIGNsZWFuX25hbWVzKGRzKQ0KDQpkcyAlPiUgbmFtZXMNCg0KYGBgDQoNCmBgYHtyfQ0KZHMgPC0gZHMgJT4lIG11dGF0ZShzZXhvID0gYXMuZmFjdG9yKHNleG8pKQ0KDQpkcyA8LSBkcyAlPiUgbXV0YXRlKHZlbG9jaWRhZGVfbV9zX2FuZGFyX2JhbmRlamEgPSBhcy5udW1lcmljKHZlbG9jaWRhZGVfbV9zX2FuZGFyX2JhbmRlamEgICAgICAgICkpDQpgYGANCg0KIyMgVGFiZWxhIGRlc2NyaXRpdmENCg0KYGBge3J9DQpkcyAlPiUNCiAgc2VsZWN0KHNleG86dmVsb2NpZGFkZV9tX3NfYW5kYXJfdHJpbGhhc19iKSAlPiUNCiAgdGFibGVieSh+IC4sIGRhdGEgPSAuLA0KICAgICAgICAgIGNvbnRyb2wgPSB0YWJsZWJ5LmNvbnRyb2woDQogICAgICAgICAgICB0b3RhbCAgICAgICA9IEZBTFNFLA0KICAgICAgICAgICAgdGVzdCAgICAgICAgPSBGQUxTRSwNCiAgICAgICAgICAgIG51bWVyaWMuc3RhdHMgPSBjKCJtZWFuc2QiLCJyYW5nZSIpLA0KICAgICAgICAgICAgY2F0LnN0YXRzICAgICA9IGMoImNvdW50cGN0IiksDQogICAgICAgICAgICBzdGF0cy5sYWJlbHMgID0gbGlzdChtZWFuc2QgPSAiTcOpZGlhIChEUCkiLCByYW5nZSA9ICJWYXJpYcOnw6NvIiksDQogICAgICAgICAgICBkaWdpdHMgICAgICA9IDIsICAgICAgICAjIGNhc2FzIHAvIG7Dum1lcm9zDQogICAgICAgICAgICBkaWdpdHMucGN0ICA9IDEsICAgICAgICAjIGNhc2FzIHAvICUNCiAgICAgICAgICAgIGZvcm1hdC5wY3QgID0gVFJVRQ0KICAgICAgICAgICkpICU+JQ0KICBzdW1tYXJ5KHRleHQgPSBUUlVFKQ0KYGBgDQoNCiMgaGlww7N0ZXNlIDE6IGRpZmVyZW7Dp2EgbmEgdmVsb2NpZGFkZSBub3JtYWwgZSBjb20gdGFyZWZhIHNlY3VuZMOhcmlhDQoNCmBgYHtyfQ0KIyBQYWNvdGVzIG5lY2Vzc8Ohcmlvcw0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZWZmZWN0c2l6ZSkNCg0KIyBDb21wYXJhciB2ZWxvY2lkYWRlIG5vcm1hbCB2cy4gdmVsb2NpZGFkZXMgY29tIHRhcmVmYXMgc2VjdW5kw6FyaWFzDQojIExpc3RhIGRlIHZhcmnDoXZlaXMgZGUgaW50ZXJlc3NlDQp0YXJlZmFzIDwtIGMoInZlbG9jaWRhZGVfbV9zX2FuZGFyX2JhbmRlamEiLA0KICAgICAgICAgICAgICJ2ZWxvY2lkYWRlX21fc19hbmRhcl9mbHVlbmNpYSIsDQogICAgICAgICAgICAgInZlbG9jaWRhZGVfbV9zX2FuZGFyX3NlcmlhZG8iLA0KICAgICAgICAgICAgICJ2ZWxvY2lkYWRlX21fc19hbmRhcl90cmlsaGFzX2EiLA0KICAgICAgICAgICAgICJ2ZWxvY2lkYWRlX21fc19hbmRhcl90cmlsaGFzX2IiKQ0KDQojIExvb3AgcGFyYSByb2RhciB0LXRlc3RlIHBhcmVhZG8gKyBkIGRlIENvaGVuDQpyZXN1bHRhZG9zIDwtIGxhcHBseSh0YXJlZmFzLCBmdW5jdGlvbih2YXIpew0KICB0ZXN0ZSA8LSB0LnRlc3QoZHMkYW5kYXJfdmVsb2NpZGFkZV9tX3MsIGRzW1t2YXJdXSwgcGFpcmVkID0gVFJVRSkNCiAgZWZlaXRvIDwtIGNvaGVuc19kKGRzJGFuZGFyX3ZlbG9jaWRhZGVfbV9zLCBkc1tbdmFyXV0sIHBhaXJlZCA9IFRSVUUpDQogIA0KICB0aWJibGUoDQogICAgQ29tcGFyYcOnw6NvID0gcGFzdGUoImFuZGFyX3ZlbG9jaWRhZGVfbV9zIHZzIiwgdmFyKSwNCiAgICBNZWRpYV9zZW1fdGFyZWZhID0gbWVhbihkcyRhbmRhcl92ZWxvY2lkYWRlX21fcywgbmEucm0gPSBUUlVFKSwNCiAgICBNZWRpYV9jb21fdGFyZWZhID0gbWVhbihkc1tbdmFyXV0sIG5hLnJtID0gVFJVRSksDQogICAgdCA9IHVubmFtZSh0ZXN0ZSRzdGF0aXN0aWMpLA0KICAgIGdsID0gdGVzdGUkcGFyYW1ldGVyLA0KICAgIHBfdmFsb3IgPSB0ZXN0ZSRwLnZhbHVlLA0KICAgIGNvaGVuX2QgPSBlZmVpdG8kQ29oZW5zX2QsDQogICAgaW50ZXJwcmV0YWNhbyA9IGVmZWl0byRJbnRlcnByZXRhdGlvbg0KICApDQp9KSAlPiUgYmluZF9yb3dzKCkNCg0KIyBWaXN1YWxpemFyIHJlc3VsdGFkb3MNCnByaW50KHJlc3VsdGFkb3MsIG4gPSBJbmYpDQoNCmBgYA0KDQojIGhpcMOzdGVzZSAyOiDDoCBtZWRpZGEgcXVlIGF1bWVudGEgYSBkZW1hbmRhIGNvZ25pdGl2YSAoRFQpLCBoYXZlcsOhIHJlZHXDp8OjbyBubyBkZXNlbXBlbmhvIG1vdG9yIGVtIHJlbGHDp8OjbyDDoCBjb25kacOnw6NvIGRlIHRhcmVmYSDDum5pY2EsIGNvbmZpZ3VyYW5kbyB1bWEgY29ycmVsYcOnw6NvIG5lZ2F0aXZhIGVudHJlIG9zIGRlc2VtcGVuaG9zLg0KDQpgYGB7cn0NCg0KIyBTZWxlY2lvbmFyIHZhcmnDoXZlaXMgZGUgaW50ZXJlc3NlDQpkdF92YXJzIDwtIGMoInZlbG9jaWRhZGVfbV9zX2FuZGFyX2JhbmRlamEiLA0KICAgICAgICAgICAgICJ2ZWxvY2lkYWRlX21fc19hbmRhcl9mbHVlbmNpYSIsDQogICAgICAgICAgICAgInZlbG9jaWRhZGVfbV9zX2FuZGFyX3NlcmlhZG8iLA0KICAgICAgICAgICAgICJ2ZWxvY2lkYWRlX21fc19hbmRhcl90cmlsaGFzX2EiLA0KICAgICAgICAgICAgICJ2ZWxvY2lkYWRlX21fc19hbmRhcl90cmlsaGFzX2IiKQ0KDQojIFJvZGFyIGNvcnJlbGHDp8OjbyBkZSBQZWFyc29uIGVudHJlIFRVIGUgY2FkYSBEVA0KcmVzdWx0YWRvc19jb3IgPC0gbGFwcGx5KGR0X3ZhcnMsIGZ1bmN0aW9uKHZhcil7DQogIHRlc3RlIDwtIGNvci50ZXN0KGRzJGFuZGFyX3ZlbG9jaWRhZGVfbV9zLCBkc1tbdmFyXV0sIG1ldGhvZCA9ICJwZWFyc29uIikNCiAgDQogIHRpYmJsZSgNCiAgICBDb21wYXJhY2FvID0gcGFzdGUoIlRVIHZzIiwgdmFyKSwNCiAgICByID0gdW5uYW1lKHRlc3RlJGVzdGltYXRlKSwNCiAgICBJQ19pbmYgPSB0ZXN0ZSRjb25mLmludFsxXSwNCiAgICBJQ19zdXAgPSB0ZXN0ZSRjb25mLmludFsyXSwNCiAgICBwX3ZhbG9yID0gdGVzdGUkcC52YWx1ZQ0KICApDQp9KSAlPiUgYmluZF9yb3dzKCkNCg0KIyBWaXN1YWxpemFyIHJlc3VsdGFkb3MNCnByaW50KHJlc3VsdGFkb3NfY29yLCBuID0gSW5mKQ0KDQpgYGANCg0KDQo+IGdyw6FmaWNvDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnZ3B1YnIpDQoNCiMgTGlzdGEgZGUgdmFyacOhdmVpcyBEVA0KZHRfdmFycyA8LSBjKCJ2ZWxvY2lkYWRlX21fc19hbmRhcl9iYW5kZWphIiwNCiAgICAgICAgICAgICAidmVsb2NpZGFkZV9tX3NfYW5kYXJfZmx1ZW5jaWEiLA0KICAgICAgICAgICAgICJ2ZWxvY2lkYWRlX21fc19hbmRhcl9zZXJpYWRvIiwNCiAgICAgICAgICAgICAidmVsb2NpZGFkZV9tX3NfYW5kYXJfdHJpbGhhc19hIiwNCiAgICAgICAgICAgICAidmVsb2NpZGFkZV9tX3NfYW5kYXJfdHJpbGhhc19iIikNCg0KIyBDcmlhciBncsOhZmljb3MgZW0gbG9vcA0KZ3JhZmljb3MgPC0gbGFwcGx5KGR0X3ZhcnMsIGZ1bmN0aW9uKHZhcil7DQogIGdncGxvdChkcywgYWVzX3N0cmluZyh4ID0gImFuZGFyX3ZlbG9jaWRhZGVfbV9zIiwgeSA9IHZhcikpICsNCiAgICBnZW9tX3BvaW50KHNpemUgPSAyLCBhbHBoYSA9IDAuNykgKw0KICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgY29sb3IgPSAiYmx1ZSIpICsNCiAgICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLngubnBjID0gImxlZnQiLCBsYWJlbC55Lm5wYyA9ICJ0b3AiKSArDQogICAgbGFicyh4ID0gIlZlbG9jaWRhZGUgZGEgbWFyY2hhIChUYXJlZmEgw5puaWNhLCBtL3MpIiwNCiAgICAgICAgIHkgPSBwYXN0ZSgiVmVsb2NpZGFkZSBkYSBtYXJjaGEgY29tIiwgZ3N1YigidmVsb2NpZGFkZV9tX3NfYW5kYXJfIiwgIiIsIHZhciksICIobS9zKSIpKSArDQogICAgdGhlbWVfYncoYmFzZV9zaXplID0gMTIpDQp9KQ0KDQojIEV4aWJpciBwcmltZWlybyBncsOhZmljbw0KZ3JhZmljb3NbWzFdXQ0KDQpncmFmaWNvc1tbMl1dDQoNCiMgU2UgcXVpc2VyIHZlciB0b2RvcyBkZSB1bWEgdmV6LCBwb2RlIHVzYXIgcGF0Y2h3b3JrIG91IGNvd3Bsb3Q6DQpsaWJyYXJ5KHBhdGNod29yaykNCiB3cmFwX3Bsb3RzKGdyYWZpY29zKQ0KDQpgYGANCg0KIyBhZ29yYSB1dGlsaXphbmRvIG8gdGVtcG8gZGUgcmVhw6fDo28NCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KDQojIFZhcmnDoXZlaXMgZGUgaW50ZXJlc3NlDQp0ZW1wb192YXJzX3R1IDwtIGMoInRlbXBvX2RlX3JlYWNhb19zX2ZsdWVuY2lhIiwNCiAgICAgICAgICAgICAgICAgICAidGVtcG9fZGVfcmVhY2FvX3NfdHJpbGhhc19hIiwNCiAgICAgICAgICAgICAgICAgICAidGVtcG9fZGVfcmVhY2FvX3NfdHJpbGhhc19iIikNCg0KdGVtcG9fdmFyc19kdCA8LSBjKCJ0ZW1wb19kZV9yZWFjYW9fc19hbmRhcl9mbHVlbmNpYSIsDQogICAgICAgICAgICAgICAgICAgInRlbXBvX2RlX3JlYWNhb19zX2FuZGFyX3RyaWxoYXNfYSIsDQogICAgICAgICAgICAgICAgICAgInRlbXBvX2RlX3JlYWNhb19zX2FuZGFyX3RyaWxoYXNfYiIpDQoNCiMgQ29ycmVsYcOnw7VlcyBUVSB4IERUDQpyZXN1bHRhZG9zX3RlbXBvIDwtIGxpc3QoDQogIGNvci50ZXN0KGRzJHRlbXBvX2RlX3JlYWNhb19zX2ZsdWVuY2lhLCBkcyR0ZW1wb19kZV9yZWFjYW9fc19hbmRhcl9mbHVlbmNpYSwgbWV0aG9kID0gInBlYXJzb24iKSwNCiAgY29yLnRlc3QoZHMkdGVtcG9fZGVfcmVhY2FvX3NfdHJpbGhhc19hLCBkcyR0ZW1wb19kZV9yZWFjYW9fc19hbmRhcl90cmlsaGFzX2EsIG1ldGhvZCA9ICJwZWFyc29uIiksDQogIGNvci50ZXN0KGRzJHRlbXBvX2RlX3JlYWNhb19zX3RyaWxoYXNfYiwgZHMkdGVtcG9fZGVfcmVhY2FvX3NfYW5kYXJfdHJpbGhhc19iLCBtZXRob2QgPSAicGVhcnNvbiIpDQopDQoNCiMgT3JnYW5pemFyIGVtIHRhYmVsYQ0KdGFiZWxhX3RlbXBvIDwtIHRpYmJsZSgNCiAgQ29tcGFyYcOnw6NvID0gYygiRmx1w6puY2lhIHZzLiBBbmRhciBmbHXDqm5jaWEiLA0KICAgICAgICAgICAgICAgICAiVHJpbGhhcyBBIHZzLiBBbmRhciB0cmlsaGFzIEEiLA0KICAgICAgICAgICAgICAgICAiVHJpbGhhcyBCIHZzLiBBbmRhciB0cmlsaGFzIEIiKSwNCiAgciA9IHNhcHBseShyZXN1bHRhZG9zX3RlbXBvLCBmdW5jdGlvbih4KSB1bm5hbWUoeCRlc3RpbWF0ZSkpLA0KICBJQ19pbmYgPSBzYXBwbHkocmVzdWx0YWRvc190ZW1wbywgZnVuY3Rpb24oeCkgeCRjb25mLmludFsxXSksDQogIElDX3N1cCA9IHNhcHBseShyZXN1bHRhZG9zX3RlbXBvLCBmdW5jdGlvbih4KSB4JGNvbmYuaW50WzJdKSwNCiAgcF92YWxvciA9IHNhcHBseShyZXN1bHRhZG9zX3RlbXBvLCBmdW5jdGlvbih4KSB4JHAudmFsdWUpDQopDQoNCnByaW50KHRhYmVsYV90ZW1wbykNCg0KYGBgDQoNCg0KIyBoMzogcmVsYcOnw6NvIGEgcHLDs3ByaWEgcGVyY2Vww6fDo28gZG8gcGFjaWVudGUgZW0gcmVsYcOnw6NvIGEgc3VhIHBlcmZvcm1hbmNlDQoNCg0KDQoNCg0KDQo=