1 Load data

## Read
filename <- "Data_Rezidential.RDS"   
Data <- readRDS(filename)  

1.1 Modify ACE Score to take into account that all are institutionalized

Data$CYW <- ifelse(Data$CYW == 0, 0, Data$CYW - 1) 

1.2 Percentage of individually reported ACEs out of ACE Score

indiv_ACE_sum <- rowSums(Data[, c(sprintf("sec1_%d", 1:10), sprintf("sec2_%d", 2:9))], na.rm = TRUE)
# sum(Data$CYW - indiv_ACE_sum < 0)    # 7 cases where indiv_ACE_sum > Data$CYW
## Summaries
cat("### summary individually reported")
### summary individually reported
summary(indiv_ACE_sum, na.rm = TRUE)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.000   0.000   2.000   3.209   6.000  18.000 
cat("### summary overall reported")
### summary overall reported
summary(Data$CYW, na.rm = TRUE)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.000   2.000   4.000   4.595   7.000  18.000 
# Plots
acescore_df <- data.frame(ID = Data$ID, Individual = indiv_ACE_sum, Overall = Data$CYW)
acescore_df %>%
  gather(Var, Val, -ID) %>%
    # ggviolin(., x = "Var", y = "Val", 
    #             add = c("boxplot", "mean_sd")) +
    ggerrorplot(., x = "Var", y = "Val",
            desc_stat = "mean_sd", color = "black",
            add = "violin", add.params = list(color = "darkgrey"),
            xlab = NULL, ylab = "Reported score") +
    stat_compare_means(comparisons = list( c("Individual", "Overall")), label = "p.signif")+ # Add significance levels
    stat_compare_means(label.y = 20, label.x = 0.55)

cat("### simple percent of sums of events")
### simple percent of sums of events
sum(acescore_df$Individual) / sum(acescore_df$Overall) * 100     # so they report only 70% of ACEs individually
[1] 69.85319

2 Network

## Dataframe
Ace_col_names <- c(sprintf("sec1_%d", 1:10), sprintf("sec2_%d", 2:9))
Ace_new_names <- c("divort", "incarcerare", "boala mintala", "amenintare", "umilire", 
                   "abuz sexual", "lipsuri", "abuz fizic", "adictie", "nesiguranta", 
                   "bullying", "deces", "emigrare", "boala", "violenta", 
                   "rautate", "politie", "abuz partener") 
netword_df <- Data[, c("ID", sprintf("sec1_%d", 1:10), sprintf("sec2_%d", 2:9))]
netword_df <- 
  netword_df %>%
  replace(is.na(.), 0) %>%
  rename_at(vars(Ace_col_names), ~ Ace_new_names)
## Fit eLasso net  
eLasso_net <- IsingFit::IsingFit(netword_df[, names(netword_df) != "ID"], 
                                family = "binomial",
                                AND = TRUE, gamma = 0.25, 
                                plot = TRUE, progressbar = FALSE,
                                title = "eLasso")

## Reproduce graph for community analysis (Walktrap clustering)
net_plot <- qgraph::qgraph(eLasso_net$weiadj, 
                           layout = "spring", weighted = TRUE, 
                           labels = rownames(eLasso_net$weiadj),
                           title = "eLasso - reproduced qgraph")  # put labels to avoid abbrev

# plot(net_plot)
centr_net_plot <- centralityPlot(eLasso_net$weiadj) # centrality_auto(eLasso_net$weiadj) to get matrix

## Community analysis (Walktrap clustering)
# ig_eLasso <- igraph::graph_from_adjacency_matrix(eLasso_net$weiadj, mode = "undirected" ,weighted = TRUE)
ig_eLasso <- igraph::as.igraph(net_plot)
plot(ig_eLasso, main = "eLasso - reproduced igraph")  # just check

ig_eLasso_communities <- igraph::cluster_walktrap(ig_eLasso)
ig_eLasso_commun_mem <- as.factor(ig_eLasso_communities$membership)
## Plot qgraph with community results
# Coloured
qgraph::qgraph(net_plot, 
               groups = ig_eLasso_commun_mem,
               legend.cex = 0.7,                          # borders = FALSE, pastel = TRUE,
               color = c("lightblue", "lightsalmon", "lightgreen", "lightgrey"),
               title = NULL)

# Greyscale
qgraph::qgraph(net_plot, 
               groups = ig_eLasso_commun_mem,
               edge.color = "black", fade = TRUE,
               legend.cex = 0.7,                          
               color = c("grey90", "grey59", "grey35", "white"),
               title = NULL)

NA
NA



3 Session Info

R version 3.5.2 (2018-12-20)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=Romanian_Romania.1250  LC_CTYPE=Romanian_Romania.1250    LC_MONETARY=Romanian_Romania.1250 LC_NUMERIC=C                     
[5] LC_TIME=Romanian_Romania.1250    

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

other attached packages:
 [1] bindrcpp_0.2.2             igraph_1.2.4.1             qgraph_1.5                 IsingFit_0.3.1             car_3.0-2                 
 [6] carData_3.0-2              RColorBrewer_1.1-2         corrplot_0.84              GGally_1.4.0               Hmisc_4.1-1               
[11] Formula_1.2-3              survival_2.43-3            lattice_0.20-38            rio_0.5.16                 scales_1.0.0              
[16] ggpubr_0.2                 magrittr_1.5               PerformanceAnalytics_1.5.2 xts_0.11-2                 zoo_1.8-4                 
[21] tadaatoolbox_0.16.1        summarytools_0.9.3         broom_0.5.1                psycho_0.4.91              psych_1.8.10              
[26] plyr_1.8.4                 forcats_0.3.0              stringr_1.3.1              dplyr_0.7.8                purrr_0.2.5               
[31] readr_1.3.0                tidyr_0.8.2                tibble_1.4.2               ggplot2_3.2.0              tidyverse_1.2.1           
[36] papaja_0.1.0.9842          kableExtra_1.1.0           knitr_1.24                 pacman_0.5.1              

loaded via a namespace (and not attached):
  [1] estimability_1.3       SparseM_1.77           lavaan_0.6-4           coda_0.19-2            nonnest2_0.5-2         acepack_1.4.1         
  [7] dygraphs_1.1.1.6       multcomp_1.4-10        data.table_1.12.2      rpart_4.1-13           inline_0.3.15          RCurl_1.95-4.11       
 [13] generics_0.0.2         callr_3.1.1            TH.data_1.0-9          webshot_0.5.1          xml2_1.2.0             lubridate_1.7.4       
 [19] httpuv_1.4.5           StanHeaders_2.18.1-10  assertthat_0.2.1       d3Network_0.5.2.1      viridis_0.5.1          xfun_0.8              
 [25] hms_0.4.2              bayesplot_1.6.0        evaluate_0.14          promises_1.0.1         readxl_1.1.0           htmlwidgets_1.3       
 [31] mcmc_0.9-5             reshape_0.8.8          stats4_3.5.2           crosstalk_1.0.0        backports_1.1.3        pbivnorm_0.6.0        
 [37] markdown_0.9           ggcorrplot_0.1.3       MCMCpack_1.4-4         rapportools_1.0        pwr_1.2-2              quantreg_5.38         
 [43] abind_1.4-5            withr_2.1.2            pryr_0.1.4             checkmate_1.8.5        emmeans_1.3.1          sna_2.4               
 [49] fdrtool_1.2.15         prettyunits_1.0.2      mnormt_1.5-5           cluster_2.0.7-1        mi_1.0                 lazyeval_0.2.1        
 [55] crayon_1.3.4           ellipse_0.4.1          labeling_0.3           glmnet_2.0-18          pkgconfig_2.0.2        nlme_3.1-137          
 [61] ggm_2.3                nnet_7.3-12            bindr_0.1.1            rlang_0.3.0.1          miniUI_0.1.1.1         colourpicker_1.0      
 [67] MatrixModels_0.4-1     sandwich_2.5-1         modelr_0.1.2           cellranger_1.1.0       tcltk_3.5.2            matrixStats_0.54.0    
 [73] Matrix_1.2-15          loo_2.1.0              boot_1.3-20            base64enc_0.1-3        whisker_0.3-2          ggridges_0.5.1        
 [79] processx_3.2.1         png_0.1-7              viridisLite_0.3.0      rjson_0.2.20           bitops_1.0-6           pander_0.6.3          
 [85] arm_1.10-1             jpeg_0.1-8             shinystan_2.5.0        ggsignif_0.4.0         threejs_0.3.1          compiler_3.5.2        
 [91] rstantools_1.5.1       lme4_1.1-19            cli_1.0.1              lmerTest_3.0-1         pbapply_1.3-4          ps_1.2.1              
 [97] htmlTable_1.12         MASS_7.3-51.1          tidyselect_0.2.5       stringi_1.2.4          sem_3.1-9              pixiedust_0.8.6       
[103] yaml_2.2.0             latticeExtra_0.6-28    grid_3.5.2             manipulate_1.0.1       tools_3.5.2            parallel_3.5.2        
[109] matrixcalc_1.0-3       rstudioapi_0.8         foreach_1.4.4          foreign_0.8-71         gridExtra_2.3          BDgraph_2.53          
[115] digest_0.6.18          shiny_1.2.0            nortest_1.0-4          quadprog_1.5-5         ppcor_1.1              Rcpp_1.0.2            
[121] BayesFactor_0.9.12-4.2 later_0.7.5            httr_1.4.0             rsconnect_0.8.15       colorspace_1.3-2       blavaan_0.3-5         
[127] rvest_0.3.2            splines_3.5.2          expm_0.999-3           shinythemes_1.1.2      MuMIn_1.42.1           xtable_1.8-3          
[133] rstanarm_2.18.2        jsonlite_1.6           nloptr_1.2.1           corpcor_1.6.9          rstan_2.19.2           glasso_1.10           
[139] nFactors_2.3.3         R6_2.4.0               pillar_1.3.1           htmltools_0.3.6        mime_0.6               glue_1.3.1            
[145] minqa_1.2.4            DT_0.5                 codetools_0.2-15       pkgbuild_1.0.2         mvtnorm_1.0-11         network_1.13.0.1      
[151] numDeriv_2016.8-1      huge_1.2.7             curl_4.0               DescTools_0.99.28      gtools_3.8.1           magick_2.0            
[157] zip_1.0.0              shinyjs_1.0            openxlsx_4.1.0         CompQuadForm_1.4.3     rmarkdown_1.14         statnet.common_4.1.4  
[163] munsell_0.5.0          iterators_1.0.10       haven_2.1.1            reshape2_1.4.3         gtable_0.2.0          
 

A work by Claudiu Papasteri

claudiu.papasteri@gmail.com

 

LS0tDQp0aXRsZTogIjxicj4gUmV6aWRlbnRpYWwiIA0Kc3VidGl0bGU6ICJOZXR3b3JrIEFuYWx5c2lzIg0KYXV0aG9yOiAiPGJyPiBDbGF1ZGl1IFBhcGFzdGVyaSINCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVtICVZJylgIg0Kb3V0cHV0OiANCiAgICBodG1sX25vdGVib29rOg0KICAgICAgICAgICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgICAgICAgICB0b2M6IHRydWUNCiAgICAgICAgICAgIHRvY19kZXB0aDogMg0KICAgICAgICAgICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgICAgICAgICB0aGVtZTogc3BhY2VsYWINCiAgICAgICAgICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbA0KICAgICAgICAgICAgZmlnX3dpZHRoOiAxMA0KICAgICAgICAgICAgZmlnX2hlaWdodDogOQ0KICAgICMgcGRmX2RvY3VtZW50OiANCiAgICAjICAgICAgICAgdG9jOiB0cnVlDQogICAgIyAgICAgICAgIHRvY19kZXB0aDogMg0KICAgICMgICAgICAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICAgICAgICAgICMgZm9udHNpemU6IDExcHQNCiAgICAgICAgICAgICMgZ2VvbWV0cnk6IG1hcmdpbj0xaW4NCiAgICAgICAgICAgICMgZmlnX3dpZHRoOiA3DQogICAgICAgICAgICAjIGZpZ19oZWlnaHQ6IDYNCiAgICAgICAgICAgICMgZmlnX2NhcHRpb246IHRydWUNCiAgICAjIGdpdGh1Yl9kb2N1bWVudDogDQogICAgICAgICAgICAjIHRvYzogdHJ1ZQ0KICAgICAgICAgICAgIyB0b2NfZGVwdGg6IDINCiAgICAgICAgICAgICMgaHRtbF9wcmV2aWV3OiBmYWxzZQ0KICAgICAgICAgICAgIyBmaWdfd2lkdGg6IDUNCiAgICAgICAgICAgICMgZmlnX2hlaWdodDogNQ0KICAgICAgICAgICAgIyBkZXY6IGpwZWcNCi0tLQ0KDQoNCjwhLS0gU2V0dXAgLS0+DQoNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCiMga2ludHIgb3B0aW9ucw0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBjb21tZW50ID0gIiMiLA0KICBjb2xsYXBzZSA9IFRSVUUsDQogIGVjaG8gPSBUUlVFLCANCiAgY2FjaGUgPSBUUlVFLCANCiAgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UgICAjIFdIRU4gTk9URUJPT0sgSVMgRklOSVNIRUQgLi4uIHVudGlsIHRoZW4gbGVhdmU6IHdhcm5pbmcgPSBUUlVFLCBtZXNzYWdlID0gVFJVRSAgICAgICAgDQopDQoNCiMgR2VuZXJhbCBSIG9wdGlvbnMgYW5kIGluZm8NCnNldC5zZWVkKDExMSkgICAgICAgICAgICAgICAjIGluIGNhc2Ugd2UgdXNlIHJhbmRvbWl6ZWQgcHJvY2VkdXJlcyAgICAgICANCm9wdGlvbnMoc2NpcGVuID0gOTk5KSAgICAgICAjIHBvc2l0aXZlIHZhbHVlcyBiaWFzIHRvd2FyZHMgZml4ZWQgYW5kIG5lZ2F0aXZlIHRvd2FyZHMgc2NpZW50aWZpYyBub3RhdGlvbg0KDQojIExvYWQgcGFja2FnZXMNCmlmICghcmVxdWlyZSgicGFjbWFuIikpIGluc3RhbGwucGFja2FnZXMoInBhY21hbiIpDQpwYWNrYWdlcyA8LSBjKA0KICAia25pdHIiLCAia2FibGVFeHRyYSIsICJwYXBhamEiLCAgDQogICJ0aWR5dmVyc2UiLCAicGx5ciIsICAgICAgDQogICJwc3ljaCIsICJwc3ljaG8iLCAgICAgICAgICAgDQogICJicm9vbSIsICJzdW1tYXJ5dG9vbHMiLCAidGFkYWF0b29sYm94IiwgIlBlcmZvcm1hbmNlQW5hbHl0aWNzIiwgICAgICAgICAgDQogICJnZ3Bsb3QyIiwgImdncHViciIsICJzY2FsZXMiLCAgICAgICAgDQogICJyaW8iLA0KICAiSG1pc2MiLCANCiAgIkdHYWxseSIsICJjb3JycGxvdCIsICJSQ29sb3JCcmV3ZXIiLCANCiAgImNhciIsDQogICJJc2luZ0ZpdCIsICJxZ3JhcGgiLCAiaWdyYXBoIiAgICAgIyBmb3IgbmV0d29yayBhbmFseXNlcw0KICAjICwgLi4uDQopDQpwYWNtYW46OnBfbG9hZChjaGFyID0gcGFja2FnZXMpDQoNCiMgVGhlbWVzIGZvciBnZ3Bsb3QyIHBsb3RpbmcgKGhlcmUgdXNlZCBBUEEgc3R5bGUpDQp0aGVtZV9zZXQodGhlbWVfYXBhKCkpDQpgYGANCg0KYGBge3Igd29ya2luZ19kaXJlY3RvcnksIGluY2x1ZGUgPSBGQUxTRX0NCiMgaWYgbmVlZGVkDQojIHdkID0gIi4vUmV6aWRlbnRpYWwiDQojIHNldHdkKHdkKQ0KYGBgDQoNCg0KPCEtLSBSRVBPUlQgLS0+DQoNCiMgTG9hZCBkYXRhDQoNCmBgYHtyIHJkc19kYXRhLCByZXN1bHRzID0gJ2hpZGUnLCBjYWNoZS5leHRyYSA9IGZpbGUuaW5mbygiRGF0YV9SZXppZGVudGlhbC5SRFMiKX0NCiMjIFJlYWQNCmZpbGVuYW1lIDwtICJEYXRhX1JlemlkZW50aWFsLlJEUyIgICANCg0KRGF0YSA8LSByZWFkUkRTKGZpbGVuYW1lKSAgDQpgYGANCg0KDQojIyBNb2RpZnkgQUNFIFNjb3JlIHRvIHRha2UgaW50byBhY2NvdW50IHRoYXQgYWxsIGFyZSBpbnN0aXR1dGlvbmFsaXplZA0KDQpgYGB7ciBkZXJpdmVkX2RhdGEsIGRlcGVuZHNvbiA9ICJyZHNfZGF0YSJ9DQpEYXRhJENZVyA8LSBpZmVsc2UoRGF0YSRDWVcgPT0gMCwgMCwgRGF0YSRDWVcgLSAxKSANCmBgYA0KDQoNCiMjIFBlcmNlbnRhZ2Ugb2YgaW5kaXZpZHVhbGx5IHJlcG9ydGVkIEFDRXMgb3V0IG9mIEFDRSBTY29yZQ0KDQpgYGB7ciBwZXJjX2luZGl2QUNFfQ0KaW5kaXZfQUNFX3N1bSA8LSByb3dTdW1zKERhdGFbLCBjKHNwcmludGYoInNlYzFfJWQiLCAxOjEwKSwgc3ByaW50Zigic2VjMl8lZCIsIDI6OSkpXSwgbmEucm0gPSBUUlVFKQ0KIyBzdW0oRGF0YSRDWVcgLSBpbmRpdl9BQ0Vfc3VtIDwgMCkgICAgIyA3IGNhc2VzIHdoZXJlIGluZGl2X0FDRV9zdW0gPiBEYXRhJENZVw0KDQojIyBTdW1tYXJpZXMNCmNhdCgiIyMjIHN1bW1hcnkgaW5kaXZpZHVhbGx5IHJlcG9ydGVkIikNCnN1bW1hcnkoaW5kaXZfQUNFX3N1bSwgbmEucm0gPSBUUlVFKQ0KY2F0KCIjIyMgc3VtbWFyeSBvdmVyYWxsIHJlcG9ydGVkIikNCnN1bW1hcnkoRGF0YSRDWVcsIG5hLnJtID0gVFJVRSkNCg0KIyBQbG90cw0KYWNlc2NvcmVfZGYgPC0gZGF0YS5mcmFtZShJRCA9IERhdGEkSUQsIEluZGl2aWR1YWwgPSBpbmRpdl9BQ0Vfc3VtLCBPdmVyYWxsID0gRGF0YSRDWVcpDQphY2VzY29yZV9kZiAlPiUNCiAgZ2F0aGVyKFZhciwgVmFsLCAtSUQpICU+JQ0KICAgICMgZ2d2aW9saW4oLiwgeCA9ICJWYXIiLCB5ID0gIlZhbCIsIA0KICAgICMgICAgICAgICAgICAgYWRkID0gYygiYm94cGxvdCIsICJtZWFuX3NkIikpICsNCiAgICBnZ2Vycm9ycGxvdCguLCB4ID0gIlZhciIsIHkgPSAiVmFsIiwNCiAgICAgICAgICAgIGRlc2Nfc3RhdCA9ICJtZWFuX3NkIiwgY29sb3IgPSAiYmxhY2siLA0KICAgICAgICAgICAgYWRkID0gInZpb2xpbiIsIGFkZC5wYXJhbXMgPSBsaXN0KGNvbG9yID0gImRhcmtncmV5IiksDQogICAgICAgICAgICB4bGFiID0gTlVMTCwgeWxhYiA9ICJSZXBvcnRlZCBzY29yZSIpICsNCiAgICBzdGF0X2NvbXBhcmVfbWVhbnMoY29tcGFyaXNvbnMgPSBsaXN0KCBjKCJJbmRpdmlkdWFsIiwgIk92ZXJhbGwiKSksIGxhYmVsID0gInAuc2lnbmlmIikrICMgQWRkIHNpZ25pZmljYW5jZSBsZXZlbHMNCiAgICBzdGF0X2NvbXBhcmVfbWVhbnMobGFiZWwueSA9IDIwLCBsYWJlbC54ID0gMC41NSkNCg0KDQpjYXQoIiMjIyBzaW1wbGUgcGVyY2VudCBvZiBzdW1zIG9mIGV2ZW50cyIpDQpzdW0oYWNlc2NvcmVfZGYkSW5kaXZpZHVhbCkgLyBzdW0oYWNlc2NvcmVfZGYkT3ZlcmFsbCkgKiAxMDAgICAgICMgc28gdGhleSByZXBvcnQgb25seSA3MCUgb2YgQUNFcyBpbmRpdmlkdWFsbHkNCg0KDQpgYGANCg0KDQojIE5ldHdvcmsNCg0KYGBge3IgQUNFX25ldH0NCiMjIERhdGFmcmFtZQ0KQWNlX2NvbF9uYW1lcyA8LSBjKHNwcmludGYoInNlYzFfJWQiLCAxOjEwKSwgc3ByaW50Zigic2VjMl8lZCIsIDI6OSkpDQpBY2VfbmV3X25hbWVzIDwtIGMoImRpdm9ydCIsICJpbmNhcmNlcmFyZSIsICJib2FsYSBtaW50YWxhIiwgImFtZW5pbnRhcmUiLCAidW1pbGlyZSIsIA0KICAgICAgICAgICAgICAgICAgICJhYnV6IHNleHVhbCIsICJsaXBzdXJpIiwgImFidXogZml6aWMiLCAiYWRpY3RpZSIsICJuZXNpZ3VyYW50YSIsIA0KICAgICAgICAgICAgICAgICAgICJidWxseWluZyIsICJkZWNlcyIsICJlbWlncmFyZSIsICJib2FsYSIsICJ2aW9sZW50YSIsIA0KICAgICAgICAgICAgICAgICAgICJyYXV0YXRlIiwgInBvbGl0aWUiLCAiYWJ1eiBwYXJ0ZW5lciIpIA0KDQpuZXR3b3JkX2RmIDwtIERhdGFbLCBjKCJJRCIsIHNwcmludGYoInNlYzFfJWQiLCAxOjEwKSwgc3ByaW50Zigic2VjMl8lZCIsIDI6OSkpXQ0KbmV0d29yZF9kZiA8LSANCiAgbmV0d29yZF9kZiAlPiUNCiAgcmVwbGFjZShpcy5uYSguKSwgMCkgJT4lDQogIHJlbmFtZV9hdCh2YXJzKEFjZV9jb2xfbmFtZXMpLCB+IEFjZV9uZXdfbmFtZXMpDQoNCiMjIEZpdCBlTGFzc28gbmV0ICANCmVMYXNzb19uZXQgPC0gSXNpbmdGaXQ6OklzaW5nRml0KG5ldHdvcmRfZGZbLCBuYW1lcyhuZXR3b3JkX2RmKSAhPSAiSUQiXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCA9IFRSVUUsIGdhbW1hID0gMC4yNSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3QgPSBUUlVFLCBwcm9ncmVzc2JhciA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJlTGFzc28iKQ0KDQojIyBSZXByb2R1Y2UgZ3JhcGggZm9yIGNvbW11bml0eSBhbmFseXNpcyAoV2Fsa3RyYXAgY2x1c3RlcmluZykNCm5ldF9wbG90IDwtIHFncmFwaDo6cWdyYXBoKGVMYXNzb19uZXQkd2VpYWRqLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dCA9ICJzcHJpbmciLCB3ZWlnaHRlZCA9IFRSVUUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gcm93bmFtZXMoZUxhc3NvX25ldCR3ZWlhZGopLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiZUxhc3NvIC0gcmVwcm9kdWNlZCBxZ3JhcGgiKSAgIyBwdXQgbGFiZWxzIHRvIGF2b2lkIGFiYnJldg0KIyBwbG90KG5ldF9wbG90KQ0KY2VudHJfbmV0X3Bsb3QgPC0gY2VudHJhbGl0eVBsb3QoZUxhc3NvX25ldCR3ZWlhZGopICMgY2VudHJhbGl0eV9hdXRvKGVMYXNzb19uZXQkd2VpYWRqKSB0byBnZXQgbWF0cml4DQoNCiMjIENvbW11bml0eSBhbmFseXNpcyAoV2Fsa3RyYXAgY2x1c3RlcmluZykNCiMgaWdfZUxhc3NvIDwtIGlncmFwaDo6Z3JhcGhfZnJvbV9hZGphY2VuY3lfbWF0cml4KGVMYXNzb19uZXQkd2VpYWRqLCBtb2RlID0gInVuZGlyZWN0ZWQiICx3ZWlnaHRlZCA9IFRSVUUpDQppZ19lTGFzc28gPC0gaWdyYXBoOjphcy5pZ3JhcGgobmV0X3Bsb3QpDQpwbG90KGlnX2VMYXNzbywgbWFpbiA9ICJlTGFzc28gLSByZXByb2R1Y2VkIGlncmFwaCIpICAjIGp1c3QgY2hlY2sNCmlnX2VMYXNzb19jb21tdW5pdGllcyA8LSBpZ3JhcGg6OmNsdXN0ZXJfd2Fsa3RyYXAoaWdfZUxhc3NvKQ0KaWdfZUxhc3NvX2NvbW11bl9tZW0gPC0gYXMuZmFjdG9yKGlnX2VMYXNzb19jb21tdW5pdGllcyRtZW1iZXJzaGlwKQ0KDQojIyBQbG90IHFncmFwaCB3aXRoIGNvbW11bml0eSByZXN1bHRzDQojIENvbG91cmVkDQpxZ3JhcGg6OnFncmFwaChuZXRfcGxvdCwgDQogICAgICAgICAgICAgICBncm91cHMgPSBpZ19lTGFzc29fY29tbXVuX21lbSwNCiAgICAgICAgICAgICAgIGxlZ2VuZC5jZXggPSAwLjcsICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJvcmRlcnMgPSBGQUxTRSwgcGFzdGVsID0gVFJVRSwNCiAgICAgICAgICAgICAgIGNvbG9yID0gYygibGlnaHRibHVlIiwgImxpZ2h0c2FsbW9uIiwgImxpZ2h0Z3JlZW4iLCAibGlnaHRncmV5IiksDQogICAgICAgICAgICAgICB0aXRsZSA9IE5VTEwpDQojIEdyZXlzY2FsZQ0KcWdyYXBoOjpxZ3JhcGgobmV0X3Bsb3QsIA0KICAgICAgICAgICAgICAgZ3JvdXBzID0gaWdfZUxhc3NvX2NvbW11bl9tZW0sDQogICAgICAgICAgICAgICBlZGdlLmNvbG9yID0gImJsYWNrIiwgZmFkZSA9IFRSVUUsDQogICAgICAgICAgICAgICBsZWdlbmQuY2V4ID0gMC43LCAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICBjb2xvciA9IGMoImdyZXk5MCIsICJncmV5NTkiLCAiZ3JleTM1IiwgIndoaXRlIiksDQogICAgICAgICAgICAgICB0aXRsZSA9IE5VTEwpDQogICAgICAgICAgICAgIA0KICAgICAgICAgICAgICANCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0KPCEtLSBTZXNzaW9uIEluZm8gYW5kIExpY2Vuc2UgLS0+DQoNCjxicj4NCg0KPGJyPg0KDQojIFNlc3Npb24gSW5mbw0KYGBge3Igc2Vzc2lvbl9pbmZvLCBlY2hvID0gRkFMU0UsIHJlc3VsdHMgPSAnbWFya3VwJ30NCnNlc3Npb25JbmZvKCkgICAgDQpgYGANCg0KPCEtLSBGb290ZXIgLS0+DQombmJzcDsNCjxociAvPg0KPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPkEgd29yayBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vQ2xhdWRpdVBhcGFzdGVyaS8iPkNsYXVkaXUgUGFwYXN0ZXJpPC9hPjwvcD4NCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICM4MDgwODA7Ij48ZW0+Y2xhdWRpdS5wYXBhc3RlcmlAZ21haWwuY29tPC9lbT48L3NwYW4+PC9wPg0KJm5ic3A7DQo=