1 Define functions

2 Read data

# Astea sunt datele scoase din taskul cu aranjarea screenshoturilor din filmul vizionat la SEM. Sunt aici toti participantii, si cei tineri, care nu au facut EEG (extensia lor de la ID este semc), si cei varstnici, care au si EEG (extensia lor e doar sem). Am adaugat in id si referinte la conditia experimentala, astfel ca cei care au ns in id au facut non-social (vizionat film singuri, fara sa faca Oglina), cei cu n sunt in conditia neutra (vizionat film cu o persoana straina alaturi, fara sa fi facut oglinda) si cei cu p au facut condizia pozitiva social (Oglinda si vizionarea filmului alaturi de instructor). Asa ca, de ex, al 10lea participant din lotul comportamental de tineri care a fost in grupul pozitiv social arata cam asa: 7semc p .
# In fisier gasesti datele scoase de computer in prima fila si pe a doua fila ai si genurile si varstele pt fiecare id. Sunt in ordinea cronologica, nu numerica. In prima fila am lasat si doua inregistrari facute ca probe pt ca mai aveau in partea din dreapta a tabelului niste date, ma gandesc ca poate au legatura cu modul de scorare, asa ca nu le-am sters.

ids_pattern_young <- ".*semc.*"
ids_pattern_old <- "^(?=.*sem)(?!.*semc).*$"    

# Stad
demo_df <- rio::import("taskmaginiSEM.xlsx", which = "Varsta-Gen")
demo_df$id <- tolower(trimws(demo_df$id))
sum(duplicated(demo_df$id)) == 0
[1] TRUE
stad_df <- rio::import("taskmaginiSEM.xlsx", which = "stad")
stad_df$id <- tolower(trimws(stad_df$id))

stad_df <-
  stad_df %>%
  select(-varsta, -gen) %>% 
  left_join(demo_df, by = "id") %>% 
  mutate(
    young = stringr::str_detect(id, ids_pattern_young),
    old = stringr::str_detect(id, ids_pattern_old)  
  ) %>% 
  separate(id, into = c("id2", "cond"), sep = " ", remove = FALSE) %>% 
  relocate(id, cond, varsta, gen, everything()) %>% 
  group_by(id) %>%
  mutate(trial_cycl = cumsum(c(1, diff(trialNo) < 0)))  %>%
  ungroup() %>%
  relocate(trial_cycl, .after = trialNo) %>%
  rowwise() %>%
  mutate(
    score = sum(
      correct1 == chosen1,
      correct2 == chosen2,
      correct3 == chosen3,
      correct4 == chosen4,
      correct5 == chosen5
    )          
  )

# stad_df %>%
#   filter(trial_cycl == 2) %>%
#   print(n = Inf)

stad_df %>%
  count(id, cond, varsta, gen) %>%
  print(n = Inf)

2.1 Nonparametric

stad_df %>%
  filter(old) %>%
  group_by(id, cond) %>%
  summarise(score = sum(score)) %>%
  ungroup() %>% 
  ggstatsplot::ggbetweenstats(
    x = cond,
    y = score,
    outlier.label = id,
    type = "np",
    title = "Elderly"
  )


stad_df %>%
  filter(young) %>%
  group_by(id, cond) %>%
  summarise(score = sum(score)) %>%
  ungroup() %>% 
  ggstatsplot::ggbetweenstats(
    x = cond,
    y = score,
    outlier.label = id,
    type = "np",
    title = "General Sample"
  )

2.2 Parametric

stad_df %>%
  filter(old) %>%
  group_by(id, cond) %>%
  summarise(score = sum(score)) %>%
  ungroup() %>% 
  ggstatsplot::ggbetweenstats(
    x = cond,
    y = score,
    outlier.label = id,
    type = "p",
    title = "Elderly"
  )


stad_df %>%
  filter(young) %>%
  group_by(id, cond) %>%
  summarise(score = sum(score)) %>%
  ungroup() %>% 
  ggstatsplot::ggbetweenstats(
    x = cond,
    y = score,
    outlier.label = id,
    type = "p",
    title = "General Sample"
  )


3 Session Info

R version 4.2.2 (2022-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 8.1 x64 (build 9600)

Matrix products: default

locale:
[1] LC_COLLATE=Romanian_Romania.1252  LC_CTYPE=Romanian_Romania.1252    LC_MONETARY=Romanian_Romania.1252
[4] LC_NUMERIC=C                      LC_TIME=Romanian_Romania.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] report_0.5.7            ggpubr_0.6.0            ggstatsplot_0.11.0.9000 psych_2.3.3            
 [5] lubridate_1.9.2         forcats_1.0.0           stringr_1.5.0           dplyr_1.1.1            
 [9] purrr_1.0.1             readr_2.1.4             tidyr_1.3.0             tibble_3.2.1           
[13] ggplot2_3.4.2           tidyverse_2.0.0         rio_0.5.29              conflicted_1.2.0       
[17] fs_1.6.1                papaja_0.1.1            tinylabels_0.2.3        pacman_0.5.3           

loaded via a namespace (and not attached):
  [1] readxl_1.4.2           backports_1.4.1        workflows_1.1.3        splines_4.2.2         
  [5] gmp_0.7-1              listenv_0.9.0          kSamples_1.2-9         rstantools_2.3.1      
  [9] SuppDists_1.1-9.7      digest_0.6.31          foreach_1.5.2          htmltools_0.5.5       
 [13] yardstick_1.1.0        parsnip_1.0.4          fansi_1.0.4            magrittr_2.0.3        
 [17] memoise_2.0.1          tune_1.1.0             paletteer_1.5.0        tzdb_0.4.0            
 [21] openxlsx_4.2.5.2       recipes_1.0.5          globals_0.16.2         modelr_0.1.11         
 [25] gower_1.0.1            RcppParallel_5.1.7     hardhat_1.3.0          timechange_0.2.0      
 [29] rsample_1.1.1          dials_1.2.0            colorspace_2.1-0       ggrepel_0.9.3         
 [33] haven_2.5.2            xfun_0.38              prismatic_1.1.1        crayon_1.5.2          
 [37] jsonlite_1.8.4         lme4_1.1-33            zeallot_0.1.0          survival_3.4-0        
 [41] iterators_1.0.14       glue_1.6.2             gtable_0.3.3           ipred_0.9-14          
 [45] emmeans_1.8.6          MatrixModels_0.5-1     sjstats_0.18.2         sjmisc_2.8.9          
 [49] statsExpressions_1.5.0 car_3.1-2              Rmpfr_0.9-1            future.apply_1.10.0   
 [53] abind_1.4-5            scales_1.2.1           mvtnorm_1.1-3          PMCMRplus_1.9.6       
 [57] rstatix_0.7.2          ggeffects_1.2.2        Rcpp_1.0.10            xtable_1.8-4          
 [61] performance_0.10.3     GPfit_1.0-8            foreign_0.8-83         lava_1.7.2.1          
 [65] prodlim_2023.03.31     datawizard_0.7.1       farver_2.1.1           pkgconfig_2.0.3       
 [69] multcompView_0.1-8     sass_0.4.6             nnet_7.3-18            here_1.0.1            
 [73] utf8_1.2.3             labeling_0.4.2         tidyselect_1.2.0       rlang_1.1.0           
 [77] DiceDesign_1.9         effectsize_0.8.3       munsell_0.5.0          cellranger_1.1.0      
 [81] tools_4.2.2            cachem_1.0.6           cli_3.6.1              generics_0.1.3        
 [85] sjlabelled_1.2.0       broom_1.0.4            evaluate_0.21          fastmap_1.1.0         
 [89] BWStest_0.2.2          yaml_2.3.7             rematch2_2.1.2         knitr_1.42            
 [93] zip_2.2.2              pbapply_1.7-0          future_1.32.0          nlme_3.1-160          
 [97] leaps_3.1              xml2_1.3.3             correlation_0.8.4      compiler_4.2.2        
[101] rstudioapi_0.14        curl_5.0.0             ggsignif_0.6.4         gt_0.9.0              
[105] lhs_1.1.6              bslib_0.4.2            stringi_1.7.12         parameters_0.21.0     
[109] lattice_0.20-45        Matrix_1.5-1           nloptr_2.0.3           vctrs_0.6.2           
[113] pillar_1.9.0           lifecycle_1.0.3        furrr_0.3.1            jquerylib_0.1.4       
[117] estimability_1.4.1     data.table_1.14.8      insight_0.19.1         patchwork_1.1.2       
[121] R6_2.5.1               backpipe_0.2.3         BayesFactor_0.9.12-4.4 parallelly_1.35.0     
[125] codetools_0.2-18       boot_1.3-28.1          MASS_7.3-58.1          rprojroot_2.0.3       
[129] withr_2.5.0            mnormt_2.1.1           bayestestR_0.13.1      parallel_4.2.2        
[133] hms_1.1.3              grid_4.2.2             rpart_4.1.19           timeDate_4022.108     
[137] sjPlot_2.8.14          coda_0.19-4            class_7.3-20           minqa_1.2.5           
[141] rmarkdown_2.22         carData_3.0-5          usemodels_0.2.0.9000  
 

A work by Claudiu Papasteri

 

LS0tDQp0aXRsZTogIjxicj4gU1RBRCBTRU0iIA0Kc3VidGl0bGU6ICJJbml0aWFsIEFuYWx5c2lzIg0KYXV0aG9yOiAiPGJyPiBDbGF1ZGl1IFBhcGFzdGVyaSINCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVtICVZJylgIg0Kb3V0cHV0OiANCiAgICBodG1sX25vdGVib29rOg0KICAgICAgICAgICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgICAgICAgICB0b2M6IHRydWUNCiAgICAgICAgICAgIHRvY19kZXB0aDogMg0KICAgICAgICAgICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgICAgICAgICB0aGVtZTogc3BhY2VsYWINCiAgICAgICAgICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbA0KICAgICAgICAgICAgZmlnX3dpZHRoOiAxMA0KICAgICAgICAgICAgZmlnX2hlaWdodDogOQ0KICAgICMgcGRmX2RvY3VtZW50OiANCiAgICAgICAgICAgICMgdG9jOiB0cnVlDQogICAgICAgICAgICAjIHRvY19kZXB0aDogMg0KICAgICAgICAgICAgIyBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICAgICAgICAgICMgZm9udHNpemU6IDExcHQNCiAgICAgICAgICAgICMgZ2VvbWV0cnk6IG1hcmdpbj0xaW4NCiAgICAgICAgICAgICMgZmlnX3dpZHRoOiA3DQogICAgICAgICAgICAjIGZpZ19oZWlnaHQ6IDYNCiAgICAgICAgICAgICMgZmlnX2NhcHRpb246IHRydWUNCiAgICAjIGdpdGh1Yl9kb2N1bWVudDogDQogICAgICAgICAgICAjIHRvYzogdHJ1ZQ0KICAgICAgICAgICAgIyB0b2NfZGVwdGg6IDINCiAgICAgICAgICAgICMgaHRtbF9wcmV2aWV3OiBmYWxzZQ0KICAgICAgICAgICAgIyBmaWdfd2lkdGg6IDUNCiAgICAgICAgICAgICMgZmlnX2hlaWdodDogNQ0KICAgICAgICAgICAgIyBkZXY6IGpwZWcNCi0tLQ0KDQoNCjwhLS0gU2V0dXAgLS0+DQoNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQojIEdlbmVyYWwgUiBvcHRpb25zDQpzZXQuc2VlZCgxMTEpICAgICAgICAgICAgICAgIyBpbiBjYXNlIHdlIHVzZSByYW5kb21pemVkIHByb2NlZHVyZXMgICAgICAgDQpvcHRpb25zKHNjaXBlbiA9IDk5OSkgICAgICAgIyBwb3NpdGl2ZSB2YWx1ZXMgYmlhcyB0b3dhcmRzIGZpeGVkIGFuZCBuZWdhdGl2ZSB0b3dhcmRzIHNjaWVudGlmaWMgbm90YXRpb24NCm9wdGlvbnMocmVwb3MgPSBjKGdldE9wdGlvbigicmVwb3MiKVsiQ1JBTiJdLCBDUkFOZXh0cmEgPSAiaHR0cHM6Ly9taXJyb3IuY2xpZW50dnBzLmNvbS9DUkFOLyIpKSAgIyB1c2UgQ1JBTiBhcyBkZWZhdWx0LCBzZXQgQ1JBTmV4dHJhIHRvIE7DvHJuYmVyZyBtaXJyb3INCg0KDQppZiAoIXJlcXVpcmUoInBhY21hbiIpKSBpbnN0YWxsLnBhY2thZ2VzKCJwYWNtYW4iLCBkZXBlbmRlbmNpZXMgPSBUUlVFKQ0KcGFja2FnZXMgPC0gYygNCiAgInBhcGFqYSIsDQogICJoZXJlIiwgImZzIiwNCiAgImNvbmZsaWN0ZWQiLA0KICAicmlvIiwNCiAgInRpZHl2ZXJzZSIsIA0KICAicHN5Y2giLCAgICAgICAgICANCiAgInJzdGF0aXgiLCAiZ2dzdGF0c3Bsb3QiLA0KICAiZ2dwbG90MiIsICJnZ3B1YnIiLCAic2NhbGVzIiwNCiAgInJlcG9ydCINCiAgIyAsIC4uLg0KKQ0KcGFjbWFuOjpwX2xvYWQoY2hhciA9IHBhY2thZ2VzKQ0KDQojIFNldCBoZXJlIHRvIFJub3RlYm9vayBkaXJlY3RvcnkNCmhlcmU6OnNldF9oZXJlKCkNCnVubG9hZE5hbWVzcGFjZSgiaGVyZSIpICAgICAgICAgICAgICAgICAgICMgbmVlZCBuZXcgUiBzZXNzaW9uIG9yIHVubG9hZCBuYW1lc3BhY2UgZm9yIC5oZXJlIGZpbGUgdG8gdGFrZSBwcmVjZWRlbmNlIG92ZXIgLlJwcm9qDQpub3RlYm9va19uYW1lIDwtIGZzOjpwYXRoX2ZpbGUoaGVyZTo6aGVyZSgpKQ0KDQojIFNvbHZlIGNvbmZsaWN0cyBpbiBmYXZvciBvZiB0aWR5dmVyc2UNCmNvbmZsaWN0ZWQ6OmNvbmZsaWN0X3ByZWZlcigiZmlsdGVyIiwgd2lubmVyID0gImRwbHlyIikNCmNvbmZsaWN0ZWQ6OmNvbmZsaWN0X3ByZWZlcigic2VsZWN0Iiwgd2lubmVyID0gImRwbHlyIikNCmNvbmZsaWN0ZWQ6OmNvbmZsaWN0X3ByZWZlcigic2xpY2UiLCB3aW5uZXIgPSAiZHBseXIiKQ0KY29uZmxpY3RlZDo6Y29uZmxpY3RfcHJlZmVyKCJyZW5hbWUiLCB3aW5uZXIgPSAiZHBseXIiKQ0KY29uZmxpY3RlZDo6Y29uZmxpY3RfcHJlZmVyKCJjb3VudCIsIHdpbm5lciA9ICJkcGx5ciIpDQoNCiMgU2V0IGtpbnRyIG9wdGlvbnMgaW5jbHVkaW5nIHJvb3QuZGlyIHBvaW50aW5nIHRvIHRoZSAuaGVyZSBmaWxlIGluIFJub3RlYm9vayBkaXJlY3RvcnkNCmtuaXRyOjpvcHRzX2NodW5rJHNldCgNCiAgcm9vdC5kaXIgPSBoZXJlOjpoZXJlKCksDQogICNmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMS8zLCANCiAgY29tbWVudCA9ICIjIiwNCiAgY29sbGFwc2UgPSBUUlVFLA0KICBlY2hvID0gVFJVRSwgd2FybmluZyA9IFRSVUUsIG1lc3NhZ2UgPSBUUlVFLCBjYWNoZSA9IFRSVUUgICAgICAgIyBlY2hvID0gRmFsc2UgZm9yIGdpdGh1Yl9kb2N1bWVudCwgYnV0IHdpbGwgYmUgZm9sZGVkIGluIGh0bWxfbm90ZWJvb2sNCikNCg0KIyBUaGVtZXMgZm9yIGdncGxvdDIgcGxvdHRpbmcgKGhlcmUgdXNlZCBBUEEgc3R5bGUpDQp0aGVtZV9zZXQocGFwYWphOjp0aGVtZV9hcGEoKSkNCmBgYA0KDQoNCg0KPCEtLSBGdW5jdGlvbnMgLS0+DQoNCiMgRGVmaW5lIGZ1bmN0aW9ucw0KDQpgYGB7cn0NCmBgYA0KDQoNCjwhLS0gUmVwb3J0IC0tPg0KDQojIFJlYWQgZGF0YQ0KDQpgYGB7ciwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiMgQXN0ZWEgc3VudCBkYXRlbGUgc2NvYXNlIGRpbiB0YXNrdWwgY3UgYXJhbmphcmVhIHNjcmVlbnNob3R1cmlsb3IgZGluIGZpbG11bCB2aXppb25hdCBsYSBTRU0uIFN1bnQgYWljaSB0b3RpIHBhcnRpY2lwYW50aWksIHNpIGNlaSB0aW5lcmksIGNhcmUgbnUgYXUgZmFjdXQgRUVHIChleHRlbnNpYSBsb3IgZGUgbGEgSUQgZXN0ZSBzZW1jKSwgc2kgY2VpIHZhcnN0bmljaSwgY2FyZSBhdSBzaSBFRUcgKGV4dGVuc2lhIGxvciBlIGRvYXIgc2VtKS4gQW0gYWRhdWdhdCBpbiBpZCBzaSByZWZlcmludGUgbGEgY29uZGl0aWEgZXhwZXJpbWVudGFsYSwgYXN0ZmVsIGNhIGNlaSBjYXJlIGF1IG5zIGluIGlkIGF1IGZhY3V0IG5vbi1zb2NpYWwgKHZpemlvbmF0IGZpbG0gc2luZ3VyaSwgZmFyYSBzYSBmYWNhIE9nbGluYSksIGNlaSBjdSBuIHN1bnQgaW4gY29uZGl0aWEgbmV1dHJhICh2aXppb25hdCBmaWxtIGN1IG8gcGVyc29hbmEgc3RyYWluYSBhbGF0dXJpLCBmYXJhIHNhIGZpIGZhY3V0IG9nbGluZGEpIHNpIGNlaSBjdSBwIGF1IGZhY3V0IGNvbmRpemlhIHBveml0aXZhIHNvY2lhbCAoT2dsaW5kYSBzaSB2aXppb25hcmVhIGZpbG11bHVpIGFsYXR1cmkgZGUgaW5zdHJ1Y3RvcikuIEFzYSBjYSwgZGUgZXgsIGFsIDEwbGVhIHBhcnRpY2lwYW50IGRpbiBsb3R1bCBjb21wb3J0YW1lbnRhbCBkZSB0aW5lcmkgY2FyZSBhIGZvc3QgaW4gZ3J1cHVsIHBveml0aXYgc29jaWFsIGFyYXRhIGNhbSBhc2E6IDdzZW1jIHAgLg0KIyBJbiBmaXNpZXIgZ2FzZXN0aSBkYXRlbGUgc2NvYXNlIGRlIGNvbXB1dGVyIGluIHByaW1hIGZpbGEgc2kgcGUgYSBkb3VhIGZpbGEgYWkgc2kgZ2VudXJpbGUgc2kgdmFyc3RlbGUgcHQgZmllY2FyZSBpZC4gU3VudCBpbiBvcmRpbmVhIGNyb25vbG9naWNhLCBudSBudW1lcmljYS4gSW4gcHJpbWEgZmlsYSBhbSBsYXNhdCBzaSBkb3VhIGlucmVnaXN0cmFyaSBmYWN1dGUgY2EgcHJvYmUgcHQgY2EgbWFpIGF2ZWF1IGluIHBhcnRlYSBkaW4gZHJlYXB0YSBhIHRhYmVsdWx1aSBuaXN0ZSBkYXRlLCBtYSBnYW5kZXNjIGNhIHBvYXRlIGF1IGxlZ2F0dXJhIGN1IG1vZHVsIGRlIHNjb3JhcmUsIGFzYSBjYSBudSBsZS1hbSBzdGVycy4NCg0KaWRzX3BhdHRlcm5feW91bmcgPC0gIi4qc2VtYy4qIg0KaWRzX3BhdHRlcm5fb2xkIDwtICJeKD89LipzZW0pKD8hLipzZW1jKS4qJCIgICAgDQoNCiMgU3RhZA0KZGVtb19kZiA8LSByaW86OmltcG9ydCgidGFza21hZ2luaVNFTS54bHN4Iiwgd2hpY2ggPSAiVmFyc3RhLUdlbiIpDQpkZW1vX2RmJGlkIDwtIHRvbG93ZXIodHJpbXdzKGRlbW9fZGYkaWQpKQ0Kc3VtKGR1cGxpY2F0ZWQoZGVtb19kZiRpZCkpID09IDANCg0Kc3RhZF9kZiA8LSByaW86OmltcG9ydCgidGFza21hZ2luaVNFTS54bHN4Iiwgd2hpY2ggPSAic3RhZCIpDQpzdGFkX2RmJGlkIDwtIHRvbG93ZXIodHJpbXdzKHN0YWRfZGYkaWQpKQ0KDQpzdGFkX2RmIDwtDQogIHN0YWRfZGYgJT4lDQogIHNlbGVjdCgtdmFyc3RhLCAtZ2VuKSAlPiUgDQogIGxlZnRfam9pbihkZW1vX2RmLCBieSA9ICJpZCIpICU+JSANCiAgbXV0YXRlKA0KICAgIHlvdW5nID0gc3RyaW5ncjo6c3RyX2RldGVjdChpZCwgaWRzX3BhdHRlcm5feW91bmcpLA0KICAgIG9sZCA9IHN0cmluZ3I6OnN0cl9kZXRlY3QoaWQsIGlkc19wYXR0ZXJuX29sZCkgIA0KICApICU+JSANCiAgc2VwYXJhdGUoaWQsIGludG8gPSBjKCJpZDIiLCAiY29uZCIpLCBzZXAgPSAiICIsIHJlbW92ZSA9IEZBTFNFKSAlPiUgDQogIHJlbG9jYXRlKGlkLCBjb25kLCB2YXJzdGEsIGdlbiwgZXZlcnl0aGluZygpKSAlPiUgDQogIGdyb3VwX2J5KGlkKSAlPiUNCiAgbXV0YXRlKHRyaWFsX2N5Y2wgPSBjdW1zdW0oYygxLCBkaWZmKHRyaWFsTm8pIDwgMCkpKSAgJT4lDQogIHVuZ3JvdXAoKSAlPiUNCiAgcmVsb2NhdGUodHJpYWxfY3ljbCwgLmFmdGVyID0gdHJpYWxObykgJT4lDQogIHJvd3dpc2UoKSAlPiUNCiAgbXV0YXRlKA0KICAgIHNjb3JlID0gc3VtKA0KICAgICAgY29ycmVjdDEgPT0gY2hvc2VuMSwNCiAgICAgIGNvcnJlY3QyID09IGNob3NlbjIsDQogICAgICBjb3JyZWN0MyA9PSBjaG9zZW4zLA0KICAgICAgY29ycmVjdDQgPT0gY2hvc2VuNCwNCiAgICAgIGNvcnJlY3Q1ID09IGNob3NlbjUNCiAgICApICAgICAgICAgIA0KICApDQoNCiMgc3RhZF9kZiAlPiUNCiMgICBmaWx0ZXIodHJpYWxfY3ljbCA9PSAyKSAlPiUNCiMgICBwcmludChuID0gSW5mKQ0KDQpzdGFkX2RmICU+JQ0KICBjb3VudChpZCwgY29uZCwgdmFyc3RhLCBnZW4pICU+JQ0KICBwcmludChuID0gSW5mKQ0KYGBgDQoNCiMjIE5vbnBhcmFtZXRyaWMNCg0KYGBge3IsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpzdGFkX2RmICU+JQ0KICBmaWx0ZXIob2xkKSAlPiUNCiAgZ3JvdXBfYnkoaWQsIGNvbmQpICU+JQ0KICBzdW1tYXJpc2Uoc2NvcmUgPSBzdW0oc2NvcmUpKSAlPiUNCiAgdW5ncm91cCgpICU+JSANCiAgZ2dzdGF0c3Bsb3Q6OmdnYmV0d2VlbnN0YXRzKA0KICAgIHggPSBjb25kLA0KICAgIHkgPSBzY29yZSwNCiAgICBvdXRsaWVyLmxhYmVsID0gaWQsDQogICAgdHlwZSA9ICJucCIsDQogICAgdGl0bGUgPSAiRWxkZXJseSINCiAgKQ0KDQpzdGFkX2RmICU+JQ0KICBmaWx0ZXIoeW91bmcpICU+JQ0KICBncm91cF9ieShpZCwgY29uZCkgJT4lDQogIHN1bW1hcmlzZShzY29yZSA9IHN1bShzY29yZSkpICU+JQ0KICB1bmdyb3VwKCkgJT4lIA0KICBnZ3N0YXRzcGxvdDo6Z2diZXR3ZWVuc3RhdHMoDQogICAgeCA9IGNvbmQsDQogICAgeSA9IHNjb3JlLA0KICAgIG91dGxpZXIubGFiZWwgPSBpZCwNCiAgICB0eXBlID0gIm5wIiwNCiAgICB0aXRsZSA9ICJHZW5lcmFsIFNhbXBsZSINCiAgKQ0KYGBgDQoNCiMjIFBhcmFtZXRyaWMNCg0KYGBge3IsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpzdGFkX2RmICU+JQ0KICBmaWx0ZXIob2xkKSAlPiUNCiAgZ3JvdXBfYnkoaWQsIGNvbmQpICU+JQ0KICBzdW1tYXJpc2Uoc2NvcmUgPSBzdW0oc2NvcmUpKSAlPiUNCiAgdW5ncm91cCgpICU+JSANCiAgZ2dzdGF0c3Bsb3Q6OmdnYmV0d2VlbnN0YXRzKA0KICAgIHggPSBjb25kLA0KICAgIHkgPSBzY29yZSwNCiAgICBvdXRsaWVyLmxhYmVsID0gaWQsDQogICAgdHlwZSA9ICJwIiwNCiAgICB0aXRsZSA9ICJFbGRlcmx5Ig0KICApDQoNCnN0YWRfZGYgJT4lDQogIGZpbHRlcih5b3VuZykgJT4lDQogIGdyb3VwX2J5KGlkLCBjb25kKSAlPiUNCiAgc3VtbWFyaXNlKHNjb3JlID0gc3VtKHNjb3JlKSkgJT4lDQogIHVuZ3JvdXAoKSAlPiUgDQogIGdnc3RhdHNwbG90OjpnZ2JldHdlZW5zdGF0cygNCiAgICB4ID0gY29uZCwNCiAgICB5ID0gc2NvcmUsDQogICAgb3V0bGllci5sYWJlbCA9IGlkLA0KICAgIHR5cGUgPSAicCIsDQogICAgdGl0bGUgPSAiR2VuZXJhbCBTYW1wbGUiDQogICkNCmBgYA0KDQoNCg0KPCEtLSBTZXNzaW9uIEluZm8gYW5kIExpY2Vuc2UgLS0+DQoNCjxicj4NCg0KIyBTZXNzaW9uIEluZm8NCmBgYHtyIHNlc3Npb25faW5mbywgZWNobyA9IEZBTFNFLCByZXN1bHRzID0gJ21hcmt1cCd9DQpzZXNzaW9uSW5mbygpICAgIA0KYGBgDQoNCjwhLS0gRm9vdGVyIC0tPg0KJm5ic3A7DQo8aHIgLz4NCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij5BIHdvcmsgYnkgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0NsYXVkaXVQYXBhc3RlcmkvIj5DbGF1ZGl1IFBhcGFzdGVyaTwvYT48L3A+DQo8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjODA4MDgwOyI+PGVtPmNsYXVkaXUucGFwYXN0ZXJpQGdtYWlsLmNvbTwvZW0+PC9zcGFuPjwvcD4NCiZuYnNwOw0K