1 R setup and required packages

library(pacman)
pacman::p_load(
  rio,
  ggplot2,
  dplyr,
  survey,
  hexbin,
  psych,
  DT,
  plotly,
  DataExplorer,
  tableone,
  jtools,
  ggstance,
  MatchIt,
  Publish,
  tidyverse,
  Hmisc,
  mice,
  VIM,
  corrplot,
  sjPlot,
  codebook,
  officer,
  flextable,
  pander
)

2 Loading and formatting the dataset

The dataset of the Swiss Health Interview survey (SHIS) were anonymised prior to the analysis (for further information) and permission to analyse and publish the restults was obtained through a contract with the Swiss Federal Statistical Office (SFSO).

2.1 Load and subset cross sectional data (\(\geqq\) 60 years of age)

dat <- rio::import("shs_2007_2012_2017_combined.dta") # SHIS Data
dat <- subset(dat, alter >= 60)

2.2 Formatting

  • Factorize: levels(), labels()
  • Dichotomize
  • Categorize

2.2.1 Outcome variables

dat$fall <- factor(
  dat$taltp01,
  levels = c(1, 2),
  labels = c("fall last 12 months", "no fall last 12 months")
)

# integrate no fall (0) into variable taltp02 (fall_count)
dat$fall_count_4 <- dat$taltp02
dat$fall_count_4[dat$taltp01==2] <- 0

dat$fall_count <- factor(
  dat$fall_count_4,
  levels = c(0, 1, 2, 3),
  labels = c(
    "no fall last 12 months",
    "1 fall last 12 months",
    "2 falls last 12 months",
    "more then 2 falls last 12 months"
  )
)

dat$fall_count_collapsed <- fct_collapse(dat$fall_count, two_falls_or_more = c("2 falls last 12 months", "more then 2 falls last 12 months"), no_or_one_fall = c("no fall last 12 months", "1 fall last 12 months"))


outcome_fall <- c("fall")
outcome_fall_count <- c("fall_count")
outcome_fall_count_collapsed <- c("fall_count_collapsed")
c(outcome_fall, outcome_fall_count, outcome_fall_count_collapsed)
## [1] "fall"                 "fall_count"           "fall_count_collapsed"

2.2.2 Exposure variables

dat$gender <- factor(dat$sex,
                     levels = c(1, 2),
                     labels = c("man", "woman"))

exposure_variable <- c("gender")
exposure_variable
## [1] "gender"

2.2.3 Socio-economic variable

dat$education <- factor(
  dat$ausbild3,
  levels = c(1, 2, 3),
  labels = c(
    "compulsory education",
    "upper secondary education",
    "tertiary education"
  )
)

socio_economic_covariate <- c("education")
socio_economic_covariate
## [1] "education"

2.2.4 Socio-demographic variables

dat$urban_rural <- factor(dat$stala,
                          levels = c(1, 2),
                          labels = c("urban area", "rural area"))

dat$nationality <- factor(dat$nation2,
                          levels = c(1, 2),
                          labels = c("swiss", "foreigner"))

dat$language <- factor(
  dat$sprache,
  levels = c(1, 2, 3),
  labels = c("german", "french", "italian")
)

socio_demographic_covariate <- c("urban_rural", "nationality", "language")
socio_demographic_covariate
## [1] "urban_rural" "nationality" "language"

2.2.5 Biological variables

# categorize age in 3 groups
dat$age_cut[dat$alter < 70] <- "60-69"
dat$age_cut[dat$alter >= 70 & dat$alter < 80] <- "70-79"
dat$age_cut[dat$alter >= 80] <- "80+"
dat$age_cut <- as.factor(dat$age_cut)
# Set reference category
dat$age_cut <- relevel(dat$age_cut, ref = "60-69")

dat$age <- dat$alter

# Functional limitations (vision, hearing, speech, walking)
dat$FL <- factor(
  dat$limfonc,
  levels = c(1, 2, 3, 4),
  labels = c(
    "No difficulty",
    "Slight difficulty",
    "Great difficulty",
    "Inability"
  )
)

# Categorize bmi into 4 groups
dat$bmi_cut[dat$bmi < 18.5] <- "underweight"
dat$bmi_cut[dat$bmi >= 18.5 & dat$bmi < 25] <- "normal weight"
dat$bmi_cut[dat$bmi >= 25 & dat$bmi < 30] <- "overweight"
dat$bmi_cut[dat$bmi >= 30] <- "obesity"
dat$bmi_cut <- as.factor(dat$bmi_cut)
dat$bmi_cut <- relevel(dat$bmi_cut, ref = "normal weight") # set reference for normal weight class

# Self-perceived health status
dat$SHS <- factor(
  dat$tsubg_allyears,
  levels = c(1, 2, 3, 4, 5),
  labels = c("very good", "good", "average", "poor", "very poor")
) 

# Self-perceived health status for models (collapse very good and good)

dat$SHS_collapsed <- factor(
  dat$tsubg_allyears,
  levels = c(1, 2, 3, 4, 5),
  labels = c("very good", "good", "average", "poor", "very poor")
) 

dat$SHS_collapsed <- fct_collapse(dat$SHS_collapsed, good = c("very good", "good"))



dat$diabetes <- factor(dat$diabete,
                       levels = c(1, 2),
                       labels = c("yes", "no"))
# Set reference category
dat$diabetes <- relevel(dat$diabetes, ref = "no")

dat$osteoarthritis <- factor(dat$tkran10c,
                             levels = c(1, 2),
                             labels = c("yes", "no"))
# Set reference category
dat$osteoarthritis <- relevel(dat$osteoarthritis, ref = "no")

dat$heart_attack <- factor(dat$tkran10f,
                           levels = c(1, 2),
                           labels = c("yes", "no"))
# Set reference category
dat$heart_attack <- relevel(dat$heart_attack, ref = "no")

dat$stroke <- factor(dat$tkran10g,
                     levels = c(1, 2),
                     labels = c("yes", "no"))
# Set reference category
dat$stroke <- relevel(dat$stroke, ref = "no")

dat$urinary_incontinence <- factor(dat$tkran10j,
                                   levels = c(1, 2),
                                   labels = c("yes", "no"))
# Set reference category
dat$urinary_incontinence <- relevel(dat$urinary_incontinence, ref = "no")

dat$osteoporosis <- factor(dat$tkran10d,
                           levels = c(1, 2),
                           labels = c("yes", "no"))
# Set reference category
dat$osteoporosis <- relevel(dat$osteoporosis, ref = "no")


biological_covariates <- c("age_cut", "age", "FL", "bmi_cut", "bmi", "SHS", "diabetes", "osteoarthritis", "heart_attack", "stroke", "urinary_incontinence", "osteoporosis")
biological_covariates
##  [1] "age_cut"              "age"                  "FL"                  
##  [4] "bmi_cut"              "bmi"                  "SHS"                 
##  [7] "diabetes"             "osteoarthritis"       "heart_attack"        
## [10] "stroke"               "urinary_incontinence" "osteoporosis"

2.2.6 Behavioral variables

# Physical activity (weekly)
dat$activity <- factor(
  dat$actphy3,
  levels = c(1, 2, 3),
  labels = c("inactive", "partially active", "active")
)

dat$alcohol <- factor(
  dat$alcchron3,
  levels = c(1, 2, 3),
  labels = c("abstinent", "low risk", "moderate or increased risk")
)

dat$smoke <- factor(
  dat$tabac3,
  levels = c(1, 2, 3),
  labels = c("no smoker", "former smoker", "smoker")
)

behavioral_covariate <- c("activity", "alcohol", "smoke")
behavioral_covariate
## [1] "activity" "alcohol"  "smoke"

2.2.7 Stratae variable

dat$strata <- factor(
  dat$kanton,
  levels = c(1:27),
  labels = c(
    "Zurich",
    "Bern",
    "Lucerne",
    "Uri",
    "Schwyz",
    "Obwalden",
    "Nidwalden",
    "Glarus",
    "Zug",
    "Fribourg",
    "Solothurn",
    "Basel-City",
    "Basel-Country",
    "Schaffhausen",
    "Appenzell Ausserrhoden",
    "Appenzell Innerrhoden",
    "St. Gallen",
    "Graubünden",
    "Aargau",
    "Thurgau",
    "Tessin",
    "Vaud",
    "Wallis",
    "Neuchâtel",
    "Geneva",
    "Jura",
    "Liechstenstein"
  )
)

strata <- c("strata")
strata
## [1] "strata"

2.2.8 Weight variable

dat$weight <- dat$wght

weight <- c("weight")
weight
## [1] "weight"
  • Get variable names
variable_names <-
  c(
    "fall",
    "fall_count",
    "gender",
    "education",
    "language",
    "urban_rural",
    "nationality",
    "smoke",
    "FL",
    "bmi_cut",
    "bmi",
    "age_cut",
    "age",
    "SHS",
    "diabetes",
    "osteoarthritis",
    "heart_attack",
    "stroke",
    "urinary_incontinence",
    "osteoporosis",
    "activity",
    "alcohol",
    "strata",
    "weight"
  )
variable_names_fall <-   c(
    "fall",
    "gender",
    "education",
    "language",
    "urban_rural",
    "nationality",
    "smoke",
    "FL",
    "bmi_cut",
    "bmi",
    "age_cut",
    "age",
    "SHS",
    "diabetes",
    "osteoarthritis",
    "heart_attack",
    "stroke",
    "urinary_incontinence",
    "osteoporosis",
    "activity",
    "alcohol",
    "strata",
    "weight"
  )
variable_names_fall_count <-  c(
    "fall_count",
    "gender",
    "education",
    "language",
    "urban_rural",
    "nationality",
    "smoke",
    "FL",
    "bmi_cut",
    "bmi",
    "age_cut",
    "age",
    "SHS",
    "diabetes",
    "osteoarthritis",
    "heart_attack",
    "stroke",
    "urinary_incontinence",
    "osteoporosis",
    "activity",
    "alcohol",
    "strata",
    "weight"
  )

variable_names_nogender <-
  c(
    "fall",
    "fall_count",
    "education",
    "language",
    "urban_rural",
    "nationality",
    "smoke",
    "FL",
    "bmi_cut",
    "bmi",
    "age_cut",
    "age",
    "SHS",
    "diabetes",
    "osteoarthritis",
    "heart_attack",
    "stroke",
    "urinary_incontinence",
    "osteoporosis",
    "activity",
    "alcohol",
    "strata",
    "weight"
  )

2.3 Subset the dataset (year, sex)

dat_07 <- subset(dat, intjahr == 2007)
dat_12 <- subset(dat, intjahr == 2012)
dat_17 <- subset(dat, intjahr == 2017) # for further analysis
dat_17_m <- subset(dat_17, gender == "man")
dat_17_f <- subset(dat_17, gender == "woman")

2.4 Variable selection:

dat_17_select <- select(dat_17, variable_names)
dat_17_select_m <- select(dat_17_m, variable_names)
dat_17_select_f <- select(dat_17_f, variable_names)
DataExplorer::plot_str(dat_17_select, print_network = TRUE)

2.5 Codebook (Metadata)

codebook_dat_17_select<-codebook::codebook_table(dat_17_select)

3 Summary (unweighted) sample

3.1 Check missing values

The variable diabetes has the most missing values because of a proxy question (the question was not asked because of a previous question). For the further calculations, the complete-case-analysis was applied, as this procedure was also used in previous studies. Therefor missing values were excluded because their types cannot be identified according to the classes of Rubin et al. [1].

DataExplorer::plot_missing(dat_17_select, title = "Missing values SHIS 2017")

DataExplorer::plot_missing(dat_17_select_m, title = "Missing values SHIS (male) 2017")

DataExplorer::plot_missing(dat_17_select_f, title = "Missing values SHIS (female) 2017")

  • Missing-pattern over all variables
mice::md.pattern(dat_17_select)

  • Missing-pattern in fall, bmi, osteoarthritis, alcohol, activity, diabetes:
mice::md.pattern(select(dat_17_select, "fall", "bmi", "osteoarthritis", "alcohol", "activity", "diabetes")) # select variables with over 0.5% missing values

  • Missing values in age - bmi (histogram)
VIM::histMiss(dat_17_select[, c("age", "bmi")])

3.2 Descriptive statistics

3.2.1 Summary table of the data

dat_17_select_describe <- Hmisc::describe(dat_17_select)
Hmisc::html(dat_17_select_describe, size = 80, title = "SHIS dataset 2017")
dat_17_select

24 Variables   6882 Observations

fall
nmissingdistinct
6870122
 Value         fall last 12 months no fall last 12 months
 Frequency                    1638                   5232
 Proportion                  0.238                  0.762
 

fall_count
image
nmissingdistinct
6857254
 Value                no fall last 12 months            1 fall last 12 months
 Frequency                              5232                             1059
 Proportion                            0.763                            0.154
                                                                             
 Value                2 falls last 12 months more then 2 falls last 12 months
 Frequency                               313                              253
 Proportion                            0.046                            0.037
 

gender
nmissingdistinct
688202
 Value        man woman
 Frequency   3214  3668
 Proportion 0.467 0.533
 

education
image
nmissingdistinct
6853293
 Value           compulsory education upper secondary education
 Frequency                       1510                      3583
 Proportion                     0.220                     0.523
                                     
 Value             tertiary education
 Frequency                       1760
 Proportion                     0.257
 

language
image
nmissingdistinct
688203
 Value       german  french italian
 Frequency     4704    1642     536
 Proportion   0.684   0.239   0.078
 

urban_rural
nmissingdistinct
688202
 Value      urban area rural area
 Frequency        4688       2194
 Proportion      0.681      0.319
 

nationality
nmissingdistinct
688202
 Value          swiss foreigner
 Frequency       6096       786
 Proportion     0.886     0.114
 

smoke
image
nmissingdistinct
688113
 Value          no smoker former smoker        smoker
 Frequency           3374          2358          1149
 Proportion         0.490         0.343         0.167
 

FL
image
nmissingdistinct
6864184
 Value          No difficulty Slight difficulty  Great difficulty         Inability
 Frequency               5307              1196               222               139
 Proportion             0.773             0.174             0.032             0.020
 

bmi_cut
image
nmissingdistinct
6806764
 Value      normal weight       obesity    overweight   underweight
 Frequency           3047          1029          2571           159
 Proportion         0.448         0.151         0.378         0.023
 

bmi
image
nmissingdistinctInfoMeanGmd.05.10.25.50.75.90.95
6806761753125.824.86119.4920.5822.8625.3028.2931.2533.70
lowest : 15.17963 15.42700 15.58957 15.62500 15.78084 , highest: 64.45312 65.23438 65.74839 67.95225 68.24298
age_cut
image
nmissingdistinct
688203
 Value      60-69 70-79   80+
 Frequency   3298  2489  1095
 Proportion 0.479 0.362 0.159
 

age
image
nmissingdistinctInfoMeanGmd.05.10.25.50.75.90.95
68820400.99870.988.87160616470768286
lowest : 60 61 62 63 64 , highest: 95 96 97 98 103
SHS
image
nmissingdistinct
687755
lowest :very goodgood average poor very poor
highest:very goodgood average poor very poor
 Value      very good      good   average      poor very poor
 Frequency       1846      3234      1419       310        68
 Proportion     0.268     0.470     0.206     0.045     0.010
 

diabetes
nmissingdistinct
61697132
 Value        no  yes
 Frequency  5553  616
 Proportion  0.9  0.1
 

osteoarthritis
nmissingdistinct
6824582
 Value         no   yes
 Frequency   4541  2283
 Proportion 0.665 0.335
 

heart_attack
nmissingdistinct
687842
 Value         no   yes
 Frequency   6796    82
 Proportion 0.988 0.012
 

stroke
nmissingdistinct
687482
 Value         no   yes
 Frequency   6814    60
 Proportion 0.991 0.009
 

urinary_incontinence
nmissingdistinct
6871112
 Value         no   yes
 Frequency   6161   710
 Proportion 0.897 0.103
 

osteoporosis
nmissingdistinct
6805772
 Value         no   yes
 Frequency   6217   588
 Proportion 0.914 0.086
 

activity
image
nmissingdistinct
63884943
 Value              inactive partially active           active
 Frequency               786              941             4661
 Proportion            0.123            0.147            0.730
 

alcohol
image
nmissingdistinct
65623203
 Value                       abstinent                   low risk
 Frequency                        1075                       5075
 Proportion                      0.164                      0.773
                                      
 Value      moderate or increased risk
 Frequency                         412
 Proportion                      0.063
 

strata
image
nmissingdistinct
6882026
lowest :Zurich Bern Lucerne Uri Schwyz
highest:Vaud Wallis NeuchâtelGeneva Jura

weight
image
nmissingdistinctInfoMeanGmd.05.10.25.50.75.90.95
688208671288187 54.22102.66165.07246.19370.91542.97626.74
lowest : 45.90269 48.23451 48.93422 49.12796 49.93771
highest:1265.798231332.501511340.808481408.214351571.58855

3.2.2 Missing value plot

dat_17_select_describe_plot <- plot(dat_17_select_describe)
dat_17_select_describe_plot$Categorical

dat_17_select_describe_plot$Continuous

3.2.3 Variables stratified by fall

tableone::CreateTableOne(data = dat_17_select, strata = "fall", includeNA = TRUE)
##                                      Stratified by fall
##                                       fall last 12 months
##   n                                     1638             
##   fall (%)                                               
##      fall last 12 months                1638 (100.0)     
##      no fall last 12 months                0 (  0.0)     
##      NA                                    0 (  0.0)     
##   fall_count (%)                                         
##      no fall last 12 months                0 (  0.0)     
##      1 fall last 12 months              1059 ( 64.7)     
##      2 falls last 12 months              313 ( 19.1)     
##      more then 2 falls last 12 months    253 ( 15.4)     
##      NA                                   13 (  0.8)     
##   gender = woman (%)                     899 ( 54.9)     
##   education (%)                                          
##      compulsory education                343 ( 20.9)     
##      upper secondary education           842 ( 51.4)     
##      tertiary education                  445 ( 27.2)     
##      NA                                    8 (  0.5)     
##   language (%)                                           
##      german                             1147 ( 70.0)     
##      french                              395 ( 24.1)     
##      italian                              96 (  5.9)     
##   urban_rural = rural area (%)           533 ( 32.5)     
##   nationality = foreigner (%)            148 (  9.0)     
##   smoke (%)                                              
##      no smoker                           803 ( 49.0)     
##      former smoker                       577 ( 35.2)     
##      smoker                              258 ( 15.8)     
##      NA                                    0 (  0.0)     
##   FL (%)                                                 
##      No difficulty                      1178 ( 71.9)     
##      Slight difficulty                   321 ( 19.6)     
##      Great difficulty                     81 (  4.9)     
##      Inability                            52 (  3.2)     
##      NA                                    6 (  0.4)     
##   bmi_cut (%)                                            
##      normal weight                       743 ( 45.4)     
##      obesity                             255 ( 15.6)     
##      overweight                          582 ( 35.5)     
##      underweight                          42 (  2.6)     
##      NA                                   16 (  1.0)     
##   bmi (mean (SD))                      25.74 (4.72)      
##   age_cut (%)                                            
##      60-69                               681 ( 41.6)     
##      70-79                               615 ( 37.5)     
##      80+                                 342 ( 20.9)     
##   age (mean (SD))                      72.22 (8.33)      
##   SHS (%)                                                
##      very good                           370 ( 22.6)     
##      good                                735 ( 44.9)     
##      average                             408 ( 24.9)     
##      poor                                102 (  6.2)     
##      very poor                            23 (  1.4)     
##      NA                                    0 (  0.0)     
##   diabetes (%)                                           
##      no                                 1275 ( 77.8)     
##      yes                                 160 (  9.8)     
##      NA                                  203 ( 12.4)     
##   osteoarthritis (%)                                     
##      no                                  968 ( 59.1)     
##      yes                                 658 ( 40.2)     
##      NA                                   12 (  0.7)     
##   heart_attack (%)                                       
##      no                                 1615 ( 98.6)     
##      yes                                  22 (  1.3)     
##      NA                                    1 (  0.1)     
##   stroke (%)                                             
##      no                                 1611 ( 98.4)     
##      yes                                  25 (  1.5)     
##      NA                                    2 (  0.1)     
##   urinary_incontinence (%)                               
##      no                                 1392 ( 85.0)     
##      yes                                 245 ( 15.0)     
##      NA                                    1 (  0.1)     
##   osteoporosis (%)                                       
##      no                                 1445 ( 88.2)     
##      yes                                 164 ( 10.0)     
##      NA                                   29 (  1.8)     
##   activity (%)                                           
##      inactive                            213 ( 13.0)     
##      partially active                    224 ( 13.7)     
##      active                             1074 ( 65.6)     
##      NA                                  127 (  7.8)     
##   alcohol (%)                                            
##      abstinent                           244 ( 14.9)     
##      low risk                           1212 ( 74.0)     
##      moderate or increased risk           95 (  5.8)     
##      NA                                   87 (  5.3)     
##   strata (%)                                             
##      Zurich                              164 ( 10.0)     
##      Bern                                160 (  9.8)     
##      Lucerne                              84 (  5.1)     
##      Uri                                  30 (  1.8)     
##      Schwyz                               72 (  4.4)     
##      Obwalden                             30 (  1.8)     
##      Nidwalden                             8 (  0.5)     
##      Glarus                                9 (  0.5)     
##      Zug                                   7 (  0.4)     
##      Fribourg                             67 (  4.1)     
##      Solothurn                            29 (  1.8)     
##      Basel-City                           29 (  1.8)     
##      Basel-Country                        77 (  4.7)     
##      Schaffhausen                         10 (  0.6)     
##      Appenzell Ausserrhoden               71 (  4.3)     
##      Appenzell Innerrhoden                 2 (  0.1)     
##      St. Gallen                           73 (  4.5)     
##      Graubünden                           88 (  5.4)     
##      Aargau                               99 (  6.0)     
##      Thurgau                              77 (  4.7)     
##      Tessin                               91 (  5.6)     
##      Vaud                                127 (  7.8)     
##      Wallis                               82 (  5.0)     
##      Neuchâtel                            31 (  1.9)     
##      Geneva                               86 (  5.3)     
##      Jura                                 35 (  2.1)     
##      Liechstenstein                        0 (  0.0)     
##   weight (mean (SD))                  298.06 (180.81)    
##                                      Stratified by fall
##                                       no fall last 12 months p      test
##   n                                     5232                            
##   fall (%)                                                      NaN     
##      fall last 12 months                   0 (  0.0)                    
##      no fall last 12 months             5232 (100.0)                    
##      NA                                    0 (  0.0)                    
##   fall_count (%)                                             <0.001     
##      no fall last 12 months             5232 (100.0)                    
##      1 fall last 12 months                 0 (  0.0)                    
##      2 falls last 12 months                0 (  0.0)                    
##      more then 2 falls last 12 months      0 (  0.0)                    
##      NA                                    0 (  0.0)                    
##   gender = woman (%)                    2760 ( 52.8)          0.139     
##   education (%)                                               0.322     
##      compulsory education               1163 ( 22.2)                    
##      upper secondary education          2736 ( 52.3)                    
##      tertiary education                 1312 ( 25.1)                    
##      NA                                   21 (  0.4)                    
##   language (%)                                                0.003     
##      german                             3550 ( 67.9)                    
##      french                             1242 ( 23.7)                    
##      italian                             440 (  8.4)                    
##   urban_rural = rural area (%)          1657 ( 31.7)          0.530     
##   nationality = foreigner (%)            635 ( 12.1)          0.001     
##   smoke (%)                                                   0.549     
##      no smoker                          2566 ( 49.0)                    
##      former smoker                      1775 ( 33.9)                    
##      smoker                              890 ( 17.0)                    
##      NA                                    1 (  0.0)                    
##   FL (%)                                                     <0.001     
##      No difficulty                      4123 ( 78.8)                    
##      Slight difficulty                   870 ( 16.6)                    
##      Great difficulty                    141 (  2.7)                    
##      Inability                            86 (  1.6)                    
##      NA                                   12 (  0.2)                    
##   bmi_cut (%)                                                 0.440     
##      normal weight                      2299 ( 43.9)                    
##      obesity                             774 ( 14.8)                    
##      overweight                         1984 ( 37.9)                    
##      underweight                         117 (  2.2)                    
##      NA                                   58 (  1.1)                    
##   bmi (mean (SD))                      25.84 (4.47)           0.445     
##   age_cut (%)                                                <0.001     
##      60-69                              2611 ( 49.9)                    
##      70-79                              1870 ( 35.7)                    
##      80+                                 751 ( 14.4)                    
##   age (mean (SD))                      70.58 (7.66)          <0.001     
##   SHS (%)                                                    <0.001     
##      very good                          1474 ( 28.2)                    
##      good                               2493 ( 47.6)                    
##      average                            1009 ( 19.3)                    
##      poor                                206 (  3.9)                    
##      very poor                            45 (  0.9)                    
##      NA                                    5 (  0.1)                    
##   diabetes (%)                                                0.002     
##      no                                 4272 ( 81.7)                    
##      yes                                 455 (  8.7)                    
##      NA                                  505 (  9.7)                    
##   osteoarthritis (%)                                         <0.001     
##      no                                 3566 ( 68.2)                    
##      yes                                1622 ( 31.0)                    
##      NA                                   44 (  0.8)                    
##   heart_attack (%)                                            0.814     
##      no                                 5169 ( 98.8)                    
##      yes                                  60 (  1.1)                    
##      NA                                    3 (  0.1)                    
##   stroke (%)                                                  0.005     
##      no                                 5191 ( 99.2)                    
##      yes                                  35 (  0.7)                    
##      NA                                    6 (  0.1)                    
##   urinary_incontinence (%)                                   <0.001     
##      no                                 4761 ( 91.0)                    
##      yes                                 461 (  8.8)                    
##      NA                                   10 (  0.2)                    
##   osteoporosis (%)                                           <0.001     
##      no                                 4763 ( 91.0)                    
##      yes                                 424 (  8.1)                    
##      NA                                   45 (  0.9)                    
##   activity (%)                                                0.062     
##      inactive                            572 ( 10.9)                    
##      partially active                    717 ( 13.7)                    
##      active                             3580 ( 68.4)                    
##      NA                                  363 (  6.9)                    
##   alcohol (%)                                                 0.375     
##      abstinent                           828 ( 15.8)                    
##      low risk                           3857 ( 73.7)                    
##      moderate or increased risk          317 (  6.1)                    
##      NA                                  230 (  4.4)                    
##   strata (%)                                                    NaN     
##      Zurich                              595 ( 11.4)                    
##      Bern                                455 (  8.7)                    
##      Lucerne                             229 (  4.4)                    
##      Uri                                 133 (  2.5)                    
##      Schwyz                              226 (  4.3)                    
##      Obwalden                            106 (  2.0)                    
##      Nidwalden                            14 (  0.3)                    
##      Glarus                                9 (  0.2)                    
##      Zug                                  35 (  0.7)                    
##      Fribourg                            218 (  4.2)                    
##      Solothurn                            86 (  1.6)                    
##      Basel-City                           64 (  1.2)                    
##      Basel-Country                       245 (  4.7)                    
##      Schaffhausen                         20 (  0.4)                    
##      Appenzell Ausserrhoden              181 (  3.5)                    
##      Appenzell Innerrhoden                 3 (  0.1)                    
##      St. Gallen                          273 (  5.2)                    
##      Graubünden                          259 (  5.0)                    
##      Aargau                              305 (  5.8)                    
##      Thurgau                             251 (  4.8)                    
##      Tessin                              414 (  7.9)                    
##      Vaud                                333 (  6.4)                    
##      Wallis                              246 (  4.7)                    
##      Neuchâtel                           151 (  2.9)                    
##      Geneva                              253 (  4.8)                    
##      Jura                                128 (  2.4)                    
##      Liechstenstein                        0 (  0.0)                    
##   weight (mean (SD))                  284.95 (174.02)         0.008

3.2.4 Univariate distribution

3.2.4.1 Bar chart (by frequency)

DataExplorer::plot_bar(dat_17_select)

3.2.4.2 Bar chart by fall

DataExplorer::plot_bar(dat_17_select)

3.2.4.3 Histogram

  • age and bmi
plot_histogram(dat_17_select[, c("age", "bmi")])

3.2.4.4 QQ-Plot

  • age and bmi
qq_data <- dat_17_select[, c("age", "bmi")]

DataExplorer::plot_qq(qq_data)

# Quantile-Quantile plot to visualize the deviation from probability distribution.
  • bmi seems skewed on both tails, apply a simple log transformation
log_qq_data <- DataExplorer::update_columns(qq_data, 2, function(x) log(x + 1))
plot_qq(log_qq_data["bmi"])

3.2.5 Correlation Analysis

plot_correlation(na.omit(dat_17_select[, c("age", "bmi")]), type = "c") #only continuous

plot_correlation(na.omit(dat_17_select[variable_names_fall]), type = "d", maxcat = 5L, geom_text_args = (size = 0.05)) #only descrete
## 1 features with more than 5 categories ignored!
## strata: 26 categories

# Bivariate Summaries Computed Separately by a Series of Predictors
var.summ <- spearman2(fall~ ., data = na.omit(dat_17_select[variable_names_fall]))
plot(var.summ, cex = 0.8)

3.2.5.1 Identify collinear predictors

# Variable Clustering:  
# hclust hierarchical clustering function
# default is squared Spearman correlation coefficients
# to detect monotonic but nonlinear relationships
var.cluster <- Hmisc::varclus(~., data = dat_17_select[c(
    "fall",
    "gender",
    "education",
    "language",
    "urban_rural",
    "nationality",
    "smoke",
    "FL",
    "bmi_cut",
    "bmi",
    "age_cut",
    "age",
    "SHS",
    "diabetes",
    "osteoarthritis",
    "heart_attack",
    "stroke",
    "urinary_incontinence",
    "osteoporosis",
    "activity",
    "alcohol")])
# var.cluster
plot(var.cluster, abbrev=FALSE, cex = 0.8)

3.2.6 Boxplots

# Visualize the distribution of all continuous features based on fall with a boxplot
DataExplorer::plot_boxplot(dat_17_select, by = "fall")

3.2.7 Control of the dataframe size, i.e. extent of missing values

dat_17_select_fall <- select(dat_17, variable_names_fall) # create dataset without fall_count variable
dat_17_select_fall_count <- select(dat_17, variable_names_fall_count) # create dataset without fall variable

dat_17_select_no_missing_fall <- as.data.frame(na.omit(dat_17_select_fall))
dat_17_select_no_missing_fall_count <- as.data.frame(na.omit(dat_17_select_fall_count))

dim(dat_17_select) # all variables with missings
## [1] 6882   24
dim(dat_17_select_fall) # all variables fall dataset
## [1] 6882   23
dim(dat_17_select_fall_count) # all variables count_fall dataset
## [1] 6882   23
dim(dat_17_select_no_missing_fall) # without missings fall dataset
## [1] 5833   23
dim(dat_17_select_no_missing_fall_count) # without missings fall_count dataset; Lot of missings are due to no questioning if no fall has happened.
## [1] 5822   23

4 Surveydesign

4.1 Creating/subset (weighted) survey.design-object

  • (year, sex)
wdat<-svydesign(id = ~idno, strata = ~kanton, weights = ~wght, nest = T, data = dat)
wdat_07<-svydesign(id = ~idno, strata = ~kanton, weights = ~wght, nest = T, data = dat_07)
wdat_12<-svydesign(id = ~idno, strata = ~kanton, weights = ~wght, nest = T, data = dat_12)
wdat_17<-svydesign(id = ~idno, strata = ~kanton, weights = ~wght, nest = T, data = dat_17)
wdat_17_m <- subset(wdat_17, gender =="man")
wdat_17_f <- subset(wdat_17, gender == "woman")

4.2 Variable selection

  • Same as previous in the (unweighted) dataset

5 Summary weighted statistics

5.1 Falls by sex SHIS 2007, 2012, 2017

fall_year_gender_svy <- svyby(formula = ~fall, 
      by = ~intjahr + gender, 
      design = wdat, 
      FUN = svymean, 
      na.rm = TRUE, 
      keep.names = FALSE)
# datatable(fall_year_gender_svy, filter = 'top')
dodge <- position_dodge(width=0.9)

fall_year_gender_svy_1<-ggplot(data = fall_year_gender_svy, mapping = aes(x = factor(intjahr), y = `fallfall last 12 months`, ymin = `fallfall last 12 months`-(2*`se.fallfall last 12 months`), ymax = `fallfall last 12 months`+(2*`se.fallfall last 12 months`), fill = gender)) +
   geom_bar(position="dodge", stat="identity") + 
   labs(y =  "Prop_fall", x = "Year") + 
   geom_errorbar(width = 0.2, size = 3, position = dodge) + labs(fill = "Gender")
fall_year_gender_svy_2<-fall_year_gender_svy_1 + theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(fall_year_gender_svy_2)

5.2 Table 1

The following steps are used to create Table 1 of the publication.

For each variable of interest, the number of respondents in each group, the (weighted) percentages of the population in each group and the (weighted) percentages of the population with the outcome of interest per group were calculated separatly for men and women. For all weighted confidence intervals for proportions, the Rao-Scott method was used [2]. Since it uses a scaled chi-squared distribution for the log-likelihood from a binomial distribution, it can be more accurate near 0 and 1. For this purpose, the function svyciprop() from the package survey by Thomas Lumley was used [3].

5.2.1 Summary row total

options(width = 500)
Row_1<-svyCreateTableOne(vars = "fall", data = wdat_17, includeNA = TRUE)
print(Row_1, showAllLevels = TRUE, includeNA = TRUE, contDigit = 1)
##           
##            level                  Overall          
##   n                               1982204.6        
##   fall (%) fall last 12 months     488220.1 (24.6) 
##            no fall last 12 months 1490847.5 (75.2) 
##            <NA>                      3137.1 ( 0.2)

5.2.2 Summary row total men & women

# total fall
Row_1_CI_fall<- svyciprop(formula = ~I(fall == "fall last 12 months"),
          design = wdat_17,
          na.rm = TRUE,
          method = "li")
Row_1_CI_fall
##                                         2.5% 97.5%
## I(fall == "fall last 12 months") 0.247 0.235  0.26
# total woman
Row_1_CI_woman<- svyciprop(formula = ~I(gender == "woman"),
          design = wdat_17,
          na.rm = TRUE,
          method = "li")
Row_1_CI_woman
##                             2.5% 97.5%
## I(gender == "woman") 0.533 0.520  0.55
# total man
Row_1_CI_man<- svyciprop(formula = ~I(gender == "man"),
          design = wdat_17,
          na.rm = TRUE,
          method = "li")
Row_1_CI_man
##                           2.5% 97.5%
## I(gender == "man") 0.467 0.453  0.48
# Proportion fall % (CI 95) by gender
tab_amount_fall_tot_gender <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ gender,
  design = wdat_17,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_tot_gender
##   gender I(fall == "fall last 12 months")      ci_l      ci_u
## 1    man                        0.2367221 0.2196090 0.2544236
## 2  woman                        0.2554283 0.2389467 0.2723890

5.2.3 Summary (unweighted) sample (n)

options(width = 500)

sample_size_gender<- tableone::CreateTableOne(data = dat_17_select, strata = "gender", includeNA = TRUE)
sample_size_gendera<-print(sample_size_gender, showAllLevels = TRUE, includeNA = TRUE, contDigit = 0)
##                           Stratified by gender
##                            level                            man           woman         p      test
##   n                                                         3214          3668                     
##   fall (%)                 fall last 12 months               739 ( 23.0)   899 ( 24.5)   0.103     
##                            no fall last 12 months           2472 ( 76.9)  2760 ( 75.2)             
##                            <NA>                                3 (  0.1)     9 (  0.2)             
##   fall_count (%)           no fall last 12 months           2472 ( 76.9)  2760 ( 75.2)  <0.001     
##                            1 fall last 12 months             450 ( 14.0)   609 ( 16.6)             
##                            2 falls last 12 months            132 (  4.1)   181 (  4.9)             
##                            more then 2 falls last 12 months  147 (  4.6)   106 (  2.9)             
##                            <NA>                               13 (  0.4)    12 (  0.3)             
##   gender (%)               man                              3214 (100.0)     0 (  0.0)  <0.001     
##                            woman                               0 (  0.0)  3668 (100.0)             
##   education (%)            compulsory education              462 ( 14.4)  1048 ( 28.6)  <0.001     
##                            upper secondary education        1548 ( 48.2)  2035 ( 55.5)             
##                            tertiary education               1194 ( 37.1)   566 ( 15.4)             
##                            <NA>                               10 (  0.3)    19 (  0.5)             
##   language (%)             german                           2262 ( 70.4)  2442 ( 66.6)   0.003     
##                            french                            723 ( 22.5)   919 ( 25.1)             
##                            italian                           229 (  7.1)   307 (  8.4)             
##   urban_rural (%)          urban area                       2180 ( 67.8)  2508 ( 68.4)   0.646     
##                            rural area                       1034 ( 32.2)  1160 ( 31.6)             
##   nationality (%)          swiss                            2770 ( 86.2)  3326 ( 90.7)  <0.001     
##                            foreigner                         444 ( 13.8)   342 (  9.3)             
##   smoke (%)                no smoker                        1190 ( 37.0)  2184 ( 59.5)  <0.001     
##                            former smoker                    1397 ( 43.5)   961 ( 26.2)             
##                            smoker                            626 ( 19.5)   523 ( 14.3)             
##                            <NA>                                1 (  0.0)     0 (  0.0)             
##   FL (%)                   No difficulty                    2491 ( 77.5)  2816 ( 76.8)   0.023     
##                            Slight difficulty                 574 ( 17.9)   622 ( 17.0)             
##                            Great difficulty                   81 (  2.5)   141 (  3.8)             
##                            Inability                          59 (  1.8)    80 (  2.2)             
##                            <NA>                                9 (  0.3)     9 (  0.2)             
##   bmi_cut (%)              normal weight                    1195 ( 37.2)  1852 ( 50.5)  <0.001     
##                            obesity                           541 ( 16.8)   488 ( 13.3)             
##                            overweight                       1438 ( 44.7)  1133 ( 30.9)             
##                            underweight                        16 (  0.5)   143 (  3.9)             
##                            <NA>                               24 (  0.7)    52 (  1.4)             
##   bmi (mean (SD))                                             27 (4)        25 (5)      <0.001     
##   age_cut (%)              60-69                            1515 ( 47.1)  1783 ( 48.6)   0.015     
##                            70-79                            1216 ( 37.8)  1273 ( 34.7)             
##                            80+                               483 ( 15.0)   612 ( 16.7)             
##   age (mean (SD))                                             71 (8)        71 (8)       0.301     
##   SHS (%)                  very good                         854 ( 26.6)   992 ( 27.0)   0.002     
##                            good                             1533 ( 47.7)  1701 ( 46.4)             
##                            average                           617 ( 19.2)   802 ( 21.9)             
##                            poor                              165 (  5.1)   145 (  4.0)             
##                            very poor                          41 (  1.3)    27 (  0.7)             
##                            <NA>                                4 (  0.1)     1 (  0.0)             
##   diabetes (%)             no                               2517 ( 78.3)  3036 ( 82.8)  <0.001     
##                            yes                               377 ( 11.7)   239 (  6.5)             
##                            <NA>                              320 ( 10.0)   393 ( 10.7)             
##   osteoarthritis (%)       no                               2401 ( 74.7)  2140 ( 58.3)  <0.001     
##                            yes                               788 ( 24.5)  1495 ( 40.8)             
##                            <NA>                               25 (  0.8)    33 (  0.9)             
##   heart_attack (%)         no                               3156 ( 98.2)  3640 ( 99.2)  <0.001     
##                            yes                                56 (  1.7)    26 (  0.7)             
##                            <NA>                                2 (  0.1)     2 (  0.1)             
##   stroke (%)               no                               3178 ( 98.9)  3636 ( 99.1)   0.575     
##                            yes                                32 (  1.0)    28 (  0.8)             
##                            <NA>                                4 (  0.1)     4 (  0.1)             
##   urinary_incontinence (%) no                               2925 ( 91.0)  3236 ( 88.2)   0.001     
##                            yes                               284 (  8.8)   426 ( 11.6)             
##                            <NA>                                5 (  0.2)     6 (  0.2)             
##   osteoporosis (%)         no                               3123 ( 97.2)  3094 ( 84.4)  <0.001     
##                            yes                                70 (  2.2)   518 ( 14.1)             
##                            <NA>                               21 (  0.7)    56 (  1.5)             
##   activity (%)             inactive                          306 (  9.5)   480 ( 13.1)  <0.001     
##                            partially active                  398 ( 12.4)   543 ( 14.8)             
##                            active                           2284 ( 71.1)  2377 ( 64.8)             
##                            <NA>                              226 (  7.0)   268 (  7.3)             
##   alcohol (%)              abstinent                         303 (  9.4)   772 ( 21.0)  <0.001     
##                            low risk                         2540 ( 79.0)  2535 ( 69.1)             
##                            moderate or increased risk        214 (  6.7)   198 (  5.4)             
##                            <NA>                              157 (  4.9)   163 (  4.4)             
##   strata (%)               Zurich                            355 ( 11.0)   405 ( 11.0)     NaN     
##                            Bern                              295 (  9.2)   323 (  8.8)             
##                            Lucerne                           160 (  5.0)   153 (  4.2)             
##                            Uri                                73 (  2.3)    91 (  2.5)             
##                            Schwyz                            140 (  4.4)   158 (  4.3)             
##                            Obwalden                           71 (  2.2)    65 (  1.8)             
##                            Nidwalden                           9 (  0.3)    13 (  0.4)             
##                            Glarus                              4 (  0.1)    14 (  0.4)             
##                            Zug                                19 (  0.6)    23 (  0.6)             
##                            Fribourg                          140 (  4.4)   146 (  4.0)             
##                            Solothurn                          53 (  1.6)    62 (  1.7)             
##                            Basel-City                         47 (  1.5)    46 (  1.3)             
##                            Basel-Country                     155 (  4.8)   167 (  4.6)             
##                            Schaffhausen                       14 (  0.4)    16 (  0.4)             
##                            Appenzell Ausserrhoden            121 (  3.8)   131 (  3.6)             
##                            Appenzell Innerrhoden               1 (  0.0)     4 (  0.1)             
##                            St. Gallen                        167 (  5.2)   180 (  4.9)             
##                            Graubünden                        167 (  5.2)   181 (  4.9)             
##                            Aargau                            198 (  6.2)   206 (  5.6)             
##                            Thurgau                           161 (  5.0)   167 (  4.6)             
##                            Tessin                            213 (  6.6)   292 (  8.0)             
##                            Vaud                              198 (  6.2)   264 (  7.2)             
##                            Wallis                            153 (  4.8)   175 (  4.8)             
##                            Neuchâtel                          84 (  2.6)    99 (  2.7)             
##                            Geneva                            139 (  4.3)   201 (  5.5)             
##                            Jura                               77 (  2.4)    86 (  2.3)             
##                            Liechstenstein                      0 (  0.0)     0 (  0.0)             
##   weight (mean (SD))                                         288 (174)     288 (177)     0.908
# To export to Excel-format
# write.csv2(sample_size_gendera, "sample_size.csv")

5.2.4 Summary (weighted) population (N) for men & women

  • to get the missing values (NA):
Row_2_NA<-svyCreateTableOne(vars = c(variable_names), strata = "gender", data = wdat_17, includeNA = TRUE, test = TRUE) # with NA
Row_2_NAa<- print(Row_2_NA, showAllLevels = TRUE, includeNA = TRUE, contDigit = 0)
##                           Stratified by gender
##                            level                            man               woman              p      test
##   n                                                         924880.1          1057324.6                     
##   fall (%)                 fall last 12 months              218797.0 ( 23.7)   269423.1 ( 25.5)      NA     
##                            no fall last 12 months           705481.0 ( 76.3)   785366.5 ( 74.3)             
##                            <NA>                                602.1 (  0.1)     2535.0 (  0.2)             
##   fall_count (%)           no fall last 12 months           705481.0 ( 76.3)   785366.5 ( 74.3)      NA     
##                            1 fall last 12 months            132989.4 ( 14.4)   181678.0 ( 17.2)             
##                            2 falls last 12 months            40660.7 (  4.4)    56386.0 (  5.3)             
##                            more then 2 falls last 12 months  42134.1 (  4.6)    30567.1 (  2.9)             
##                            <NA>                               3614.9 (  0.4)     3326.9 (  0.3)             
##   gender (%)               man                              924880.1 (100.0)        0.0 (  0.0)  <0.001     
##                            woman                                 0.0 (  0.0)  1057324.6 (100.0)             
##   education (%)            compulsory education             119633.0 ( 12.9)   286475.7 ( 27.1)      NA     
##                            upper secondary education        441111.5 ( 47.7)   600107.3 ( 56.8)             
##                            tertiary education               360739.5 ( 39.0)   164653.2 ( 15.6)             
##                            <NA>                               3396.1 (  0.4)     6088.3 (  0.6)             
##   language (%)             german                           704489.9 ( 76.2)   765618.4 ( 72.4)   0.001     
##                            french                           179829.5 ( 19.4)   237021.1 ( 22.4)             
##                            italian                           40560.7 (  4.4)    54685.0 (  5.2)             
##   urban_rural (%)          urban area                       683856.2 ( 73.9)   779943.5 ( 73.8)   0.884     
##                            rural area                       241023.8 ( 26.1)   277381.1 ( 26.2)             
##   nationality (%)          swiss                            794615.9 ( 85.9)   946493.5 ( 89.5)  <0.001     
##                            foreigner                        130264.2 ( 14.1)   110831.0 ( 10.5)             
##   smoke (%)                no smoker                        335647.1 ( 36.3)   637343.1 ( 60.3)      NA     
##                            former smoker                    400072.5 ( 43.3)   273965.2 ( 25.9)             
##                            smoker                           188631.9 ( 20.4)   146016.2 ( 13.8)             
##                            <NA>                                528.6 (  0.1)        0.0 (  0.0)             
##   FL (%)                   No difficulty                    727412.3 ( 78.6)   802495.0 ( 75.9)      NA     
##                            Slight difficulty                155641.7 ( 16.8)   185432.4 ( 17.5)             
##                            Great difficulty                  22074.8 (  2.4)    40791.2 (  3.9)             
##                            Inability                         17144.7 (  1.9)    25970.9 (  2.5)             
##                            <NA>                               2606.6 (  0.3)     2635.1 (  0.2)             
##   bmi_cut (%)              normal weight                    351786.3 ( 38.0)   531072.9 ( 50.2)      NA     
##                            obesity                          147513.6 ( 15.9)   144292.0 ( 13.6)             
##                            overweight                       413869.7 ( 44.7)   328003.5 ( 31.0)             
##                            underweight                        4190.7 (  0.5)    39596.1 (  3.7)             
##                            <NA>                               7519.8 (  0.8)    14359.9 (  1.4)             
##   bmi (mean (SD))                                                 27 (4)             25 (5)      <0.001     
##   age_cut (%)              60-69                            451660.1 ( 48.8)   480787.8 ( 45.5)   0.001     
##                            70-79                            329497.6 ( 35.6)   371310.7 ( 35.1)             
##                            80+                              143722.4 ( 15.5)   205226.0 ( 19.4)             
##   age (mean (SD))                                                 71 (8)             72 (8)      <0.001     
##   SHS (%)                  very good                        247212.1 ( 26.7)   281898.3 ( 26.7)      NA     
##                            good                             441164.0 ( 47.7)   488525.9 ( 46.2)             
##                            average                          174930.5 ( 18.9)   235278.6 ( 22.3)             
##                            poor                              46282.0 (  5.0)    44699.5 (  4.2)             
##                            very poor                         13663.7 (  1.5)     6819.4 (  0.6)             
##                            <NA>                               1627.8 (  0.2)      102.9 (  0.0)             
##   diabetes (%)             no                               726010.8 ( 78.5)   858516.6 ( 81.2)      NA     
##                            yes                              107190.7 ( 11.6)    74067.4 (  7.0)             
##                            <NA>                              91678.6 (  9.9)   124740.6 ( 11.8)             
##   osteoarthritis (%)       no                               698865.0 ( 75.6)   616134.9 ( 58.3)      NA     
##                            yes                              217081.2 ( 23.5)   431274.7 ( 40.8)             
##                            <NA>                               8933.9 (  1.0)     9915.0 (  0.9)             
##   heart_attack (%)         no                               908635.9 ( 98.2)  1048664.2 ( 99.2)      NA     
##                            yes                               15331.6 (  1.7)     8237.2 (  0.8)             
##                            <NA>                                912.6 (  0.1)      423.2 (  0.0)             
##   stroke (%)               no                               913585.6 ( 98.8)  1046222.6 ( 98.9)      NA     
##                            yes                                9359.6 (  1.0)     9809.0 (  0.9)             
##                            <NA>                               1934.9 (  0.2)     1293.1 (  0.1)             
##   urinary_incontinence (%) no                               842202.1 ( 91.1)   924960.9 ( 87.5)      NA     
##                            yes                               80472.2 (  8.7)   130696.2 ( 12.4)             
##                            <NA>                               2205.8 (  0.2)     1667.5 (  0.2)             
##   osteoporosis (%)         no                               900173.6 ( 97.3)   889870.5 ( 84.2)      NA     
##                            yes                               18375.3 (  2.0)   150618.8 ( 14.2)             
##                            <NA>                               6331.2 (  0.7)    16835.3 (  1.6)             
##   activity (%)             inactive                          88197.6 (  9.5)   147599.3 ( 14.0)      NA     
##                            partially active                 113122.0 ( 12.2)   150020.1 ( 14.2)             
##                            active                           662528.5 ( 71.6)   671214.2 ( 63.5)             
##                            <NA>                              61032.1 (  6.6)    88490.9 (  8.4)             
##   alcohol (%)              abstinent                         92020.4 (  9.9)   216784.0 ( 20.5)      NA     
##                            low risk                         731840.6 ( 79.1)   731121.1 ( 69.1)             
##                            moderate or increased risk        58119.0 (  6.3)    53580.6 (  5.1)             
##                            <NA>                              42900.0 (  4.6)    55838.9 (  5.3)             
##   strata (%)               Zurich                           172107.8 ( 18.6)   188351.4 ( 17.8)     NaN     
##                            Bern                             123872.8 ( 13.4)   136660.2 ( 12.9)             
##                            Lucerne                           46051.1 (  5.0)    42902.9 (  4.1)             
##                            Uri                                4039.1 (  0.4)     4856.4 (  0.5)             
##                            Schwyz                            16132.8 (  1.7)    18273.4 (  1.7)             
##                            Obwalden                           4135.9 (  0.4)     3900.0 (  0.4)             
##                            Nidwalden                          5419.5 (  0.6)     7831.4 (  0.7)             
##                            Glarus                             1938.1 (  0.2)     7771.6 (  0.7)             
##                            Zug                               11024.6 (  1.2)    13410.8 (  1.3)             
##                            Fribourg                          30090.9 (  3.3)    30296.2 (  2.9)             
##                            Solothurn                         31508.0 (  3.4)    39188.1 (  3.7)             
##                            Basel-City                        26443.4 (  2.9)    25383.1 (  2.4)             
##                            Basel-Country                     38618.3 (  4.2)    41310.1 (  3.9)             
##                            Schaffhausen                       8547.9 (  0.9)     9750.0 (  0.9)             
##                            Appenzell Ausserrhoden             7319.1 (  0.8)     7715.8 (  0.7)             
##                            Appenzell Innerrhoden               513.7 (  0.1)     2289.8 (  0.2)             
##                            St. Gallen                        58586.3 (  6.3)    64713.9 (  6.1)             
##                            Graubünden                        25590.9 (  2.8)    27379.6 (  2.6)             
##                            Aargau                            80607.4 (  8.7)    85534.6 (  8.1)             
##                            Thurgau                           30519.8 (  3.3)    32154.6 (  3.0)             
##                            Tessin                            37902.7 (  4.1)    52241.7 (  4.9)             
##                            Vaud                              59681.6 (  6.5)    85426.9 (  8.1)             
##                            Wallis                            40443.8 (  4.4)    44553.2 (  4.2)             
##                            Neuchâtel                         15314.2 (  1.7)    19187.4 (  1.8)             
##                            Geneva                            39840.4 (  4.3)    56552.9 (  5.3)             
##                            Jura                               8629.7 (  0.9)     9688.5 (  0.9)             
##                            Liechstenstein                        0.0 (  0.0)        0.0 (  0.0)             
##   weight (mean (SD))                                             393 (206)          397 (218)     0.696
# To export to Excel-format
# write.csv2(Row_2_NAa, file = "Row_2NA.csv")
  • to get the t-test mean of weighted characteristics men vs. women:
Row_2<-svyCreateTableOne(vars = c(variable_names), strata = "gender", data = wdat_17, includeNA = FALSE, test = TRUE) # without NA and t-test gender
Row_2a<-print(Row_2, showAllLevels = TRUE, includeNA = FALSE, contDigit = 0)
##                           Stratified by gender
##                            level                            man               woman              p      test
##   n                                                         924880.1          1057324.6                     
##   fall (%)                 fall last 12 months              218797.0 ( 23.7)   269423.1 ( 25.5)   0.130     
##                            no fall last 12 months           705481.0 ( 76.3)   785366.5 ( 74.5)             
##   fall_count (%)           no fall last 12 months           705481.0 ( 76.6)   785366.5 ( 74.5)  <0.001     
##                            1 fall last 12 months            132989.4 ( 14.4)   181678.0 ( 17.2)             
##                            2 falls last 12 months            40660.7 (  4.4)    56386.0 (  5.3)             
##                            more then 2 falls last 12 months  42134.1 (  4.6)    30567.1 (  2.9)             
##   gender (%)               man                              924880.1 (100.0)        0.0 (  0.0)  <0.001     
##                            woman                                 0.0 (  0.0)  1057324.6 (100.0)             
##   education (%)            compulsory education             119633.0 ( 13.0)   286475.7 ( 27.3)  <0.001     
##                            upper secondary education        441111.5 ( 47.9)   600107.3 ( 57.1)             
##                            tertiary education               360739.5 ( 39.1)   164653.2 ( 15.7)             
##   language (%)             german                           704489.9 ( 76.2)   765618.4 ( 72.4)   0.001     
##                            french                           179829.5 ( 19.4)   237021.1 ( 22.4)             
##                            italian                           40560.7 (  4.4)    54685.0 (  5.2)             
##   urban_rural (%)          urban area                       683856.2 ( 73.9)   779943.5 ( 73.8)   0.884     
##                            rural area                       241023.8 ( 26.1)   277381.1 ( 26.2)             
##   nationality (%)          swiss                            794615.9 ( 85.9)   946493.5 ( 89.5)  <0.001     
##                            foreigner                        130264.2 ( 14.1)   110831.0 ( 10.5)             
##   smoke (%)                no smoker                        335647.1 ( 36.3)   637343.1 ( 60.3)  <0.001     
##                            former smoker                    400072.5 ( 43.3)   273965.2 ( 25.9)             
##                            smoker                           188631.9 ( 20.4)   146016.2 ( 13.8)             
##   FL (%)                   No difficulty                    727412.3 ( 78.9)   802495.0 ( 76.1)   0.007     
##                            Slight difficulty                155641.7 ( 16.9)   185432.4 ( 17.6)             
##                            Great difficulty                  22074.8 (  2.4)    40791.2 (  3.9)             
##                            Inability                         17144.7 (  1.9)    25970.9 (  2.5)             
##   bmi_cut (%)              normal weight                    351786.3 ( 38.3)   531072.9 ( 50.9)  <0.001     
##                            obesity                          147513.6 ( 16.1)   144292.0 ( 13.8)             
##                            overweight                       413869.7 ( 45.1)   328003.5 ( 31.4)             
##                            underweight                        4190.7 (  0.5)    39596.1 (  3.8)             
##   bmi (mean (SD))                                                 27 (4)             25 (5)      <0.001     
##   age_cut (%)              60-69                            451660.1 ( 48.8)   480787.8 ( 45.5)   0.001     
##                            70-79                            329497.6 ( 35.6)   371310.7 ( 35.1)             
##                            80+                              143722.4 ( 15.5)   205226.0 ( 19.4)             
##   age (mean (SD))                                                 71 (8)             72 (8)      <0.001     
##   SHS (%)                  very good                        247212.1 ( 26.8)   281898.3 ( 26.7)   0.001     
##                            good                             441164.0 ( 47.8)   488525.9 ( 46.2)             
##                            average                          174930.5 ( 18.9)   235278.6 ( 22.3)             
##                            poor                              46282.0 (  5.0)    44699.5 (  4.2)             
##                            very poor                         13663.7 (  1.5)     6819.4 (  0.6)             
##   diabetes (%)             no                               726010.8 ( 87.1)   858516.6 ( 92.1)  <0.001     
##                            yes                              107190.7 ( 12.9)    74067.4 (  7.9)             
##   osteoarthritis (%)       no                               698865.0 ( 76.3)   616134.9 ( 58.8)  <0.001     
##                            yes                              217081.2 ( 23.7)   431274.7 ( 41.2)             
##   heart_attack (%)         no                               908635.9 ( 98.3)  1048664.2 ( 99.2)   0.007     
##                            yes                               15331.6 (  1.7)     8237.2 (  0.8)             
##   stroke (%)               no                               913585.6 ( 99.0)  1046222.6 ( 99.1)   0.764     
##                            yes                                9359.6 (  1.0)     9809.0 (  0.9)             
##   urinary_incontinence (%) no                               842202.1 ( 91.3)   924960.9 ( 87.6)  <0.001     
##                            yes                               80472.2 (  8.7)   130696.2 ( 12.4)             
##   osteoporosis (%)         no                               900173.6 ( 98.0)   889870.5 ( 85.5)  <0.001     
##                            yes                               18375.3 (  2.0)   150618.8 ( 14.5)             
##   activity (%)             inactive                          88197.6 ( 10.2)   147599.3 ( 15.2)  <0.001     
##                            partially active                 113122.0 ( 13.1)   150020.1 ( 15.5)             
##                            active                           662528.5 ( 76.7)   671214.2 ( 69.3)             
##   alcohol (%)              abstinent                         92020.4 ( 10.4)   216784.0 ( 21.6)  <0.001     
##                            low risk                         731840.6 ( 83.0)   731121.1 ( 73.0)             
##                            moderate or increased risk        58119.0 (  6.6)    53580.6 (  5.4)             
##   strata (%)               Zurich                           172107.8 ( 18.6)   188351.4 ( 17.8)     NaN     
##                            Bern                             123872.8 ( 13.4)   136660.2 ( 12.9)             
##                            Lucerne                           46051.1 (  5.0)    42902.9 (  4.1)             
##                            Uri                                4039.1 (  0.4)     4856.4 (  0.5)             
##                            Schwyz                            16132.8 (  1.7)    18273.4 (  1.7)             
##                            Obwalden                           4135.9 (  0.4)     3900.0 (  0.4)             
##                            Nidwalden                          5419.5 (  0.6)     7831.4 (  0.7)             
##                            Glarus                             1938.1 (  0.2)     7771.6 (  0.7)             
##                            Zug                               11024.6 (  1.2)    13410.8 (  1.3)             
##                            Fribourg                          30090.9 (  3.3)    30296.2 (  2.9)             
##                            Solothurn                         31508.0 (  3.4)    39188.1 (  3.7)             
##                            Basel-City                        26443.4 (  2.9)    25383.1 (  2.4)             
##                            Basel-Country                     38618.3 (  4.2)    41310.1 (  3.9)             
##                            Schaffhausen                       8547.9 (  0.9)     9750.0 (  0.9)             
##                            Appenzell Ausserrhoden             7319.1 (  0.8)     7715.8 (  0.7)             
##                            Appenzell Innerrhoden               513.7 (  0.1)     2289.8 (  0.2)             
##                            St. Gallen                        58586.3 (  6.3)    64713.9 (  6.1)             
##                            Graubünden                        25590.9 (  2.8)    27379.6 (  2.6)             
##                            Aargau                            80607.4 (  8.7)    85534.6 (  8.1)             
##                            Thurgau                           30519.8 (  3.3)    32154.6 (  3.0)             
##                            Tessin                            37902.7 (  4.1)    52241.7 (  4.9)             
##                            Vaud                              59681.6 (  6.5)    85426.9 (  8.1)             
##                            Wallis                            40443.8 (  4.4)    44553.2 (  4.2)             
##                            Neuchâtel                         15314.2 (  1.7)    19187.4 (  1.8)             
##                            Geneva                            39840.4 (  4.3)    56552.9 (  5.3)             
##                            Jura                               8629.7 (  0.9)     9688.5 (  0.9)             
##                            Liechstenstein                        0.0 (  0.0)        0.0 (  0.0)             
##   weight (mean (SD))                                             393 (206)          397 (218)     0.696
# To export to Excel-format
# write.csv2(Row_2a, file = "Row_2.csv")

5.2.5 Summary proportion (%) and confidence interval (CI 95%) of population (weighted number of people) by characteristic

5.2.5.1 Men

# men
# education
Row_4_compulsory_education_m<- svyciprop(formula = ~I(education == "compulsory education"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_compulsory_education_m*100)[1]
## I(education == "compulsory education") 
##                               12.98265
Row_4_compulsory_education_m_CI = attr(Row_4_compulsory_education_m,"ci")
Row_4_compulsory_education_m_CI*100
##     2.5%    97.5% 
## 11.70425 14.33665
Row_4_upper_secondary_education_m <- svyciprop(formula = ~I(education == "upper secondary education"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_upper_secondary_education_m*100)[1]
## I(education == "upper secondary education") 
##                                    47.86968
Row_4_upper_secondary_education_m_CI = attr(Row_4_upper_secondary_education_m,"ci")
Row_4_upper_secondary_education_m_CI*100
##     2.5%    97.5% 
## 45.85509 49.88890
Row_4_tertiary_education_m <- svyciprop(formula = ~I(education == "tertiary education"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_tertiary_education_m*100)[1]
## I(education == "tertiary education") 
##                             39.14767
Row_4_tertiary_education_m_CI = attr(Row_4_tertiary_education_m,"ci")
Row_4_tertiary_education_m_CI*100
##     2.5%    97.5% 
## 37.17234 41.14697
# language
Row_4_german_m<- svyciprop(formula = ~I(language == "german"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_german_m*100)[1]
## I(language == "german") 
##                76.17094
Row_4_german_m_CI = attr(Row_4_german_m,"ci")
Row_4_german_m_CI*100
##     2.5%    97.5% 
## 74.92261 77.39002
Row_4_french_m <- svyciprop(formula = ~I(language == "french"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_french_m*100)[1]
## I(language == "french") 
##                19.44355
Row_4_french_m_CI = attr(Row_4_french_m,"ci")
Row_4_french_m_CI*100
##     2.5%    97.5% 
## 18.30687 20.61485
Row_4_italian_m <- svyciprop(formula = ~I(language == "italian"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_italian_m*100)[1]
## I(language == "italian") 
##                 4.385509
Row_4_italian_m_CI = attr(Row_4_italian_m,"ci")
Row_4_italian_m_CI*100
##     2.5%    97.5% 
## 3.908192 4.898342
# urban_rural
Row_4_urban_area_m<- svyciprop(formula = ~I(urban_rural == "urban area"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_urban_area_m*100)[1]
## I(urban_rural == "urban area") 
##                       73.93999
Row_4_urban_area_m_CI = attr(Row_4_urban_area_m,"ci")
Row_4_urban_area_m_CI*100
##     2.5%    97.5% 
## 72.28104 75.55456
Row_4_rural_arean_m <- svyciprop(formula = ~I(urban_rural == "rural area"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_rural_arean_m*100)[1]
## I(urban_rural == "rural area") 
##                       26.06001
Row_4_rural_arean_m_CI = attr(Row_4_rural_arean_m,"ci")
Row_4_rural_arean_m_CI*100
##     2.5%    97.5% 
## 24.44544 27.71896
# nationality
Row_4_swiss_m<- svyciprop(formula = ~I(nationality == "swiss"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_swiss_m*100)[1]
## I(nationality == "swiss") 
##                  85.91556
Row_4_swiss_m_CI = attr(Row_4_swiss_m,"ci")
Row_4_swiss_m_CI*100
##     2.5%    97.5% 
## 84.47532 87.27814
Row_4_foreigner_m <- svyciprop(formula = ~I(nationality == "foreigner"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_foreigner_m*100)[1]
## I(nationality == "foreigner") 
##                      14.08444
Row_4_foreigner_m_CI = attr(Row_4_foreigner_m,"ci")
Row_4_foreigner_m_CI*100
##     2.5%    97.5% 
## 12.72186 15.52468
# smoke              
Row_4_no_smoker_m<- svyciprop(formula = ~I(smoke == "no smoker"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_no_smoker_m*100)[1]
## I(smoke == "no smoker") 
##                36.31163
Row_4_no_smoker_m_CI = attr(Row_4_no_smoker_m,"ci")
Row_4_no_smoker_m_CI*100
##     2.5%    97.5% 
## 34.39143 38.26136
Row_4_former_smoker_m <- svyciprop(formula = ~I(smoke == "former smoker"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_former_smoker_m*100)[1]
## I(smoke == "former smoker") 
##                    43.28143
Row_4_former_smoker_m_CI = attr(Row_4_former_smoker_m,"ci")
Row_4_former_smoker_m_CI*100
##     2.5%    97.5% 
## 41.28173 45.29581
Row_4_smoker_m <- svyciprop(formula = ~I(smoke == "smoker"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_smoker_m*100)[1]
## I(smoke == "smoker") 
##             20.40694
Row_4_smoker_m_CI = attr(Row_4_smoker_m,"ci")
Row_4_smoker_m_CI*100
##     2.5%    97.5% 
## 18.79218 22.08762
# FL
Row_4_FL_no_difficulty_m<- svyciprop(formula = ~I(FL == "No difficulty"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_FL_no_difficulty_m*100)[1]
## I(FL == "No difficulty") 
##                 78.87165
Row_4_FL_no_difficulty_m_CI = attr(Row_4_FL_no_difficulty_m,"ci")
Row_4_FL_no_difficulty_m_CI*100
##     2.5%    97.5% 
## 77.24392 80.44041
Row_4_FL_slight_difficulty_m <- svyciprop(formula = ~I(FL == "Slight difficulty"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_FL_slight_difficulty_m*100)[1]
## I(FL == "Slight difficulty") 
##                     16.87587
Row_4_FL_slight_difficulty_m_CI = attr(Row_4_FL_slight_difficulty_m,"ci")
Row_4_FL_slight_difficulty_m_CI*100
##     2.5%    97.5% 
## 15.45430 18.36403
Row_4_FL_great_difficulty_m<- svyciprop(formula = ~I(FL == "Great difficulty"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_FL_great_difficulty_m*100)[1]
## I(FL == "Great difficulty") 
##                    2.393518
Row_4_FL_great_difficulty_m_CI = attr(Row_4_FL_great_difficulty_m,"ci")
Row_4_FL_great_difficulty_m_CI*100
##     2.5%    97.5% 
## 1.832830 3.055305
Row_4_FL_inability_m<- svyciprop(formula = ~I(FL == "Inability"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_FL_inability_m*100)[1]
## I(FL == "Inability") 
##             1.858958
Row_4_FL_inability_m_CI = attr(Row_4_FL_inability_m,"ci")
Row_4_FL_inability_m_CI*100
##     2.5%    97.5% 
## 1.374362 2.443602
# bmi_cut
Row_4_normal_weight_m<- svyciprop(formula = ~I(bmi_cut == "normal weight"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_normal_weight_m*100)[1]
## I(bmi_cut == "normal weight") 
##                      38.34768
Row_4_normal_weight_m_CI = attr(Row_4_normal_weight_m,"ci")
Row_4_normal_weight_m_CI*100
##     2.5%    97.5% 
## 36.37449 40.34678
Row_4_obesity_m <- svyciprop(formula = ~I(bmi_cut == "obesity"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_obesity_m*100)[1]
## I(bmi_cut == "obesity") 
##                16.08022
Row_4_obesity_m_CI = attr(Row_4_obesity_m,"ci")
Row_4_obesity_m_CI*100
##     2.5%    97.5% 
## 14.63571 17.59820
Row_4_overweight_m<- svyciprop(formula = ~I(bmi_cut == "overweight"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_overweight_m*100)[1]
## I(bmi_cut == "overweight") 
##                   45.11529
Row_4_overweight_m_CI = attr(Row_4_overweight_m,"ci")
Row_4_overweight_m_CI*100
##     2.5%    97.5% 
## 43.10301 47.13826
Row_4_underweight_m <- svyciprop(formula = ~I(bmi_cut == "underweight"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_underweight_m*100)[1]
## I(bmi_cut == "underweight") 
##                   0.4568165
Row_4_underweight_m_CI = attr(Row_4_underweight_m,"ci")
Row_4_underweight_m_CI*100
##      2.5%     97.5% 
## 0.2555068 0.7427229
# age_cut
Row_4_age_cut_60to64_m<- svyciprop(formula = ~I(age_cut == "60-69"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_age_cut_60to64_m*100)[1]
## I(age_cut == "60-69") 
##              48.83445
Row_4_age_cut_60to64_m_CI = attr(Row_4_age_cut_60to64_m,"ci")
Row_4_age_cut_60to64_m_CI*100
##     2.5%    97.5% 
## 46.81092 50.86053
Row_4_age_cut_65to74_m <- svyciprop(formula = ~I(age_cut == "70-79"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_age_cut_65to74_m*100)[1]
## I(age_cut == "70-79") 
##              35.62598
Row_4_age_cut_65to74_m_CI = attr(Row_4_age_cut_65to74_m,"ci")
Row_4_age_cut_65to74_m_CI*100
##     2.5%    97.5% 
## 33.73542 37.54687
Row_4_age_cut_75_m<- svyciprop(formula = ~I(age_cut == "80+"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_age_cut_75_m*100)[1]
## I(age_cut == "80+") 
##            15.53957
Row_4_age_cut_75_m_CI = attr(Row_4_age_cut_75_m,"ci")
Row_4_age_cut_75_m_CI*100
##     2.5%    97.5% 
## 14.10949 17.04501
# SHS     
Row_4_SHS_very_good_m<- svyciprop(formula = ~I(SHS == "very good"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_SHS_very_good_m*100)[1]
## I(SHS == "very good") 
##              26.77622
Row_4_SHS_very_good_m_CI = attr(Row_4_SHS_very_good_m,"ci")
Row_4_SHS_very_good_m_CI*100
##     2.5%    97.5% 
## 24.99203 28.61213
Row_4_SHS_good_m<- svyciprop(formula = ~I(SHS == "good"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_SHS_good_m*100)[1]
## I(SHS == "good") 
##         47.78369
Row_4_SHS_good_m_CI = attr(Row_4_SHS_good_m,"ci")
Row_4_SHS_good_m_CI*100
##     2.5%    97.5% 
## 45.76562 49.80660
Row_4_SHS_average_m <- svyciprop(formula = ~I(SHS == "average"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_SHS_average_m*100)[1]
## I(SHS == "average") 
##            18.94721
Row_4_SHS_average_m_CI = attr(Row_4_SHS_average_m,"ci")
Row_4_SHS_average_m_CI*100
##     2.5%    97.5% 
## 17.40730 20.55379
Row_4_SHS_poor_m<- svyciprop(formula = ~I(SHS == "poor"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_SHS_poor_m*100)[1]
## I(SHS == "poor") 
##         5.012931
Row_4_SHS_poor_m_CI = attr(Row_4_SHS_poor_m,"ci")
Row_4_SHS_poor_m_CI*100
##     2.5%    97.5% 
## 4.176222 5.948335
Row_4_SHS_very_poor_m<- svyciprop(formula = ~I(SHS == "very poor"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_SHS_very_poor_m*100)[1]
## I(SHS == "very poor") 
##               1.47995
Row_4_SHS_very_poor_m_CI = attr(Row_4_SHS_very_poor_m,"ci")
Row_4_SHS_very_poor_m_CI*100
##     2.5%    97.5% 
## 1.031493 2.040422
# diabetes
Row_4_diabetes_yes_m<- svyciprop(formula = ~I(diabetes == "yes"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_diabetes_yes_m*100)[1]
## I(diabetes == "yes") 
##             12.86492
Row_4_diabetes_yes_m_CI = attr(Row_4_diabetes_yes_m,"ci")
Row_4_diabetes_yes_m_CI*100
##     2.5%    97.5% 
## 11.48906 14.32980
Row_4_diabetes_no_m <- svyciprop(formula = ~I(diabetes == "no"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_diabetes_no_m*100)[1]
## I(diabetes == "no") 
##            87.13508
Row_4_diabetes_no_m_CI = attr(Row_4_diabetes_no_m,"ci")
Row_4_diabetes_no_m_CI*100
##     2.5%    97.5% 
## 85.67020 88.51094
# osteoarthritis
Row_4_osteoarthritis_yes_m<- svyciprop(formula = ~I(osteoarthritis == "yes"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_osteoarthritis_yes_m*100)[1]
## I(osteoarthritis == "yes") 
##                   23.70022
Row_4_osteoarthritis_yes_m_CI = attr(Row_4_osteoarthritis_yes_m,"ci")
Row_4_osteoarthritis_yes_m_CI*100
##     2.5%    97.5% 
## 22.03221 25.42395
Row_4_osteoarthritis_no_m <- svyciprop(formula = ~I(osteoarthritis == "no"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_osteoarthritis_no_m*100)[1]
## I(osteoarthritis == "no") 
##                  76.29978
Row_4_osteoarthritis_no_m_CI = attr(Row_4_osteoarthritis_no_m,"ci")
Row_4_osteoarthritis_no_m_CI*100
##     2.5%    97.5% 
## 74.57605 77.96779
# heart_attack
Row_4_heart_attack_yes_m<- svyciprop(formula = ~I(heart_attack == "yes"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_heart_attack_yes_m*100)[1]
## I(heart_attack == "yes") 
##                 1.659322
Row_4_heart_attack_yes_m_CI = attr(Row_4_heart_attack_yes_m,"ci")
Row_4_heart_attack_yes_m_CI*100
##     2.5%    97.5% 
## 1.199294 2.222010
Row_4_heart_attack_no_m <- svyciprop(formula = ~I(heart_attack == "no"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_heart_attack_no_m*100)[1]
## I(heart_attack == "no") 
##                98.34068
Row_4_heart_attack_no_m_CI = attr(Row_4_heart_attack_no_m,"ci")
Row_4_heart_attack_no_m_CI*100
##     2.5%    97.5% 
## 97.77799 98.80071
# stroke
Row_4_stroke_yes_m<- svyciprop(formula = ~I(stroke == "yes"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_stroke_yes_m*100)[1]
## I(stroke == "yes") 
##           1.014104
Row_4_stroke_yes_m_CI = attr(Row_4_stroke_yes_m,"ci")
Row_4_stroke_yes_m_CI*100
##      2.5%     97.5% 
## 0.6663048 1.4644590
Row_4_stroke_no_m <- svyciprop(formula = ~I(stroke == "no"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_stroke_no_m*100)[1]
## I(stroke == "no") 
##           98.9859
Row_4_stroke_no_m_CI = attr(Row_4_stroke_no_m,"ci")
Row_4_stroke_no_m_CI*100
##     2.5%    97.5% 
## 98.53554 99.33370
# urinary_incontinence
Row_4_urinary_incontinence_yes_m<- svyciprop(formula = ~I(urinary_incontinence == "yes"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_urinary_incontinence_yes_m*100)[1]
## I(urinary_incontinence == "yes") 
##                         8.721623
Row_4_urinary_incontinence_yes_m_CI = attr(Row_4_urinary_incontinence_yes_m,"ci")
Row_4_urinary_incontinence_yes_m_CI*100
##     2.5%    97.5% 
## 7.653567 9.874844
Row_4_urinary_incontinence_no_m <- svyciprop(formula = ~I(urinary_incontinence == "no"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_urinary_incontinence_no_m*100)[1]
## I(urinary_incontinence == "no") 
##                        91.27838
Row_4_urinary_incontinence_no_m_CI = attr(Row_4_urinary_incontinence_no_m,"ci")
Row_4_urinary_incontinence_no_m_CI*100
##     2.5%    97.5% 
## 90.12516 92.34643
# osteoporosis
Row_4_osteoporosis_yes_m<- svyciprop(formula = ~I(osteoporosis == "yes"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_osteoporosis_yes_m*100)[1]
## I(osteoporosis == "yes") 
##                  2.00047
Row_4_osteoporosis_yes_m_CI = attr(Row_4_osteoporosis_yes_m,"ci")
Row_4_osteoporosis_yes_m_CI*100
##     2.5%    97.5% 
## 1.521314 2.568718
Row_4_osteoporosis_no_m <- svyciprop(formula = ~I(osteoporosis == "no"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_osteoporosis_no_m*100)[1]
## I(osteoporosis == "no") 
##                97.99953
Row_4_osteoporosis_no_m_CI = attr(Row_4_osteoporosis_no_m,"ci")
Row_4_osteoporosis_no_m_CI*100
##     2.5%    97.5% 
## 97.43128 98.47869
# activity
Row_4_inactive_m<- svyciprop(formula = ~I(activity == "inactive"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_inactive_m*100)[1]
## I(activity == "inactive") 
##                  10.20985
Row_4_inactive_m_CI = attr(Row_4_inactive_m,"ci")
Row_4_inactive_m_CI*100
##      2.5%     97.5% 
##  8.993919 11.517827
Row_4_partially_active_m <- svyciprop(formula = ~I(activity == "partially active"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_partially_active_m*100)[1]
## I(activity == "partially active") 
##                          13.09512
Row_4_partially_active_m_CI = attr(Row_4_partially_active_m,"ci")
Row_4_partially_active_m_CI*100
##     2.5%    97.5% 
## 11.74245 14.53181
Row_4_active_m<- svyciprop(formula = ~I(activity == "active"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_active_m*100)[1]
## I(activity == "active") 
##                76.69503
Row_4_active_m_CI = attr(Row_4_active_m,"ci")
Row_4_active_m_CI*100
##     2.5%    97.5% 
## 74.90727 78.42136
# alcohol
Row_4_alcohol_abstinent_m<- svyciprop(formula = ~I(alcohol == "abstinent"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_alcohol_abstinent_m*100)[1]
## I(alcohol == "abstinent") 
##                  10.43339
Row_4_alcohol_abstinent_m_CI = attr(Row_4_alcohol_abstinent_m,"ci")
Row_4_alcohol_abstinent_m_CI*100
##      2.5%     97.5% 
##  9.177882 11.784710
Row_4_alcohol_low_risk_m<- svyciprop(formula = ~I(alcohol == "low risk"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_alcohol_low_risk_m*100)[1]
## I(alcohol == "low risk") 
##                   82.977
Row_4_alcohol_low_risk_m_CI = attr(Row_4_alcohol_low_risk_m,"ci")
Row_4_alcohol_low_risk_m_CI*100
##     2.5%    97.5% 
## 81.35704 84.51919
Row_4_alcohol_moderate_or_increased_risk_m<- svyciprop(formula = ~I(alcohol == "moderate or increased risk"),
          design = wdat_17_m,
          na.rm = TRUE,
          method = "li")
(Row_4_alcohol_moderate_or_increased_risk_m*100)[1]
## I(alcohol == "moderate or increased risk") 
##                                   6.589606
Row_4_alcohol_moderate_or_increased_risk_m_CI = attr(Row_4_alcohol_moderate_or_increased_risk_m,"ci")
Row_4_alcohol_moderate_or_increased_risk_m_CI*100
##     2.5%    97.5% 
## 5.611971 7.666292

5.2.5.2 Women

# women
## education
Row_4_compulsory_education_f<- svyciprop(formula = ~I(education == "compulsory education"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_compulsory_education_f*100)[1]
## I(education == "compulsory education") 
##                               27.25132
Row_4_compulsory_education_f_CI = attr(Row_4_compulsory_education_f,"ci")
Row_4_compulsory_education_f_CI*100
##     2.5%    97.5% 
## 25.60385 28.94136
Row_4_upper_secondary_education_f <- svyciprop(formula = ~I(education == "upper secondary education"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_upper_secondary_education_f*100)[1]
## I(education == "upper secondary education") 
##                                    57.08586
Row_4_upper_secondary_education_f_CI = attr(Row_4_upper_secondary_education_f,"ci")
Row_4_upper_secondary_education_f_CI*100
##     2.5%    97.5% 
## 55.20178 58.95636
Row_4_tertiary_education_f <- svyciprop(formula = ~I(education == "tertiary education"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_tertiary_education_f*100)[1]
## I(education == "tertiary education") 
##                             15.66282
Row_4_tertiary_education_f_CI = attr(Row_4_tertiary_education_f,"ci")
Row_4_tertiary_education_f_CI*100
##     2.5%    97.5% 
## 14.31736 17.07407
# language
Row_4_german_f<- svyciprop(formula = ~I(language == "german"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_german_f*100)[1]
## I(language == "german") 
##                72.41092
Row_4_german_f_CI = attr(Row_4_german_f,"ci")
Row_4_german_f_CI*100
##     2.5%    97.5% 
## 71.25977 73.54258
Row_4_french_f <- svyciprop(formula = ~I(language == "french"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_french_f*100)[1]
## I(language == "french") 
##                22.41707
Row_4_french_f_CI = attr(Row_4_french_f,"ci")
Row_4_french_f_CI*100
##     2.5%    97.5% 
## 21.35928 23.49905
Row_4_italian_f <- svyciprop(formula = ~I(language == "italian"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_italian_f*100)[1]
## I(language == "italian") 
##                 5.172018
Row_4_italian_f_CI = attr(Row_4_italian_f,"ci")
Row_4_italian_f_CI*100
##     2.5%    97.5% 
## 4.747738 5.619434
# urban_rural
Row_4_urban_area_f<- svyciprop(formula = ~I(urban_rural == "urban area"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_urban_area_f*100)[1]
## I(urban_rural == "urban area") 
##                       73.76576
Row_4_urban_area_f_CI = attr(Row_4_urban_area_f,"ci")
Row_4_urban_area_f_CI*100
##     2.5%    97.5% 
## 72.21985 75.27350
Row_4_rural_arean_f <- svyciprop(formula = ~I(urban_rural == "rural area"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_rural_arean_f*100)[1]
## I(urban_rural == "rural area") 
##                       26.23424
Row_4_rural_arean_f_CI = attr(Row_4_rural_arean_f,"ci")
Row_4_rural_arean_f_CI*100
##     2.5%    97.5% 
## 24.72650 27.78015
# nationality
Row_4_swiss_f<- svyciprop(formula = ~I(nationality == "swiss"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_swiss_f*100)[1]
## I(nationality == "swiss") 
##                  89.51778
Row_4_swiss_f_CI = attr(Row_4_swiss_f,"ci")
Row_4_swiss_f_CI*100
##     2.5%    97.5% 
## 88.29170 90.66488
Row_4_foreigner_f <- svyciprop(formula = ~I(nationality == "foreigner"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_foreigner_f*100)[1]
## I(nationality == "foreigner") 
##                      10.48222
Row_4_foreigner_f_CI = attr(Row_4_foreigner_f,"ci")
Row_4_foreigner_f_CI*100
##      2.5%     97.5% 
##  9.335124 11.708297
# smoke              
Row_4_no_smoker_f<- svyciprop(formula = ~I(smoke == "no smoker"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_no_smoker_f*100)[1]
## I(smoke == "no smoker") 
##                60.27885
Row_4_no_smoker_f_CI = attr(Row_4_no_smoker_f,"ci")
Row_4_no_smoker_f_CI*100
##     2.5%    97.5% 
## 58.41183 62.12614
Row_4_former_smoker_f <- svyciprop(formula = ~I(smoke == "former smoker"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_former_smoker_f*100)[1]
## I(smoke == "former smoker") 
##                    25.91118
Row_4_former_smoker_f_CI = attr(Row_4_former_smoker_f,"ci")
Row_4_former_smoker_f_CI*100
##     2.5%    97.5% 
## 24.26261 27.60649
Row_4_smoker_f <- svyciprop(formula = ~I(smoke == "smoker"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_smoker_f*100)[1]
## I(smoke == "smoker") 
##             13.80997
Row_4_smoker_f_CI = attr(Row_4_smoker_f,"ci")
Row_4_smoker_f_CI*100
##     2.5%    97.5% 
## 12.56373 15.12251
# FL
Row_4_FL_no_difficulty_f<- svyciprop(formula = ~I(FL == "No difficulty"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_FL_no_difficulty_f*100)[1]
## I(FL == "No difficulty") 
##                 76.08828
Row_4_FL_no_difficulty_f_CI = attr(Row_4_FL_no_difficulty_f,"ci")
Row_4_FL_no_difficulty_f_CI*100
##     2.5%    97.5% 
## 74.40957 77.71478
Row_4_FL_slight_difficulty_f <- svyciprop(formula = ~I(FL == "Slight difficulty"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_FL_slight_difficulty_f*100)[1]
## I(FL == "Slight difficulty") 
##                      17.5817
Row_4_FL_slight_difficulty_f_CI = attr(Row_4_FL_slight_difficulty_f,"ci")
Row_4_FL_slight_difficulty_f_CI*100
##     2.5%    97.5% 
## 16.14397 19.08387
Row_4_FL_great_difficulty_f<- svyciprop(formula = ~I(FL == "Great difficulty"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_FL_great_difficulty_f*100)[1]
## I(FL == "Great difficulty") 
##                    3.867598
Row_4_FL_great_difficulty_f_CI = attr(Row_4_FL_great_difficulty_f,"ci")
Row_4_FL_great_difficulty_f_CI*100
##     2.5%    97.5% 
## 3.183639 4.638955
Row_4_FL_inability_f<- svyciprop(formula = ~I(FL == "Inability"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_FL_inability_f*100)[1]
## I(FL == "Inability") 
##             2.462422
Row_4_FL_inability_f_CI = attr(Row_4_FL_inability_f,"ci")
Row_4_FL_inability_f_CI*100
##     2.5%    97.5% 
## 1.856840 3.183637
# bmi_cut
Row_4_normal_weight_f<- svyciprop(formula = ~I(bmi_cut == "normal weight"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_normal_weight_f*100)[1]
## I(bmi_cut == "normal weight") 
##                      50.91955
Row_4_normal_weight_f_CI = attr(Row_4_normal_weight_f,"ci")
Row_4_normal_weight_f_CI*100
##     2.5%    97.5% 
## 49.00546 52.83185
Row_4_obesity_f <- svyciprop(formula = ~I(bmi_cut == "obesity"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_obesity_f*100)[1]
## I(bmi_cut == "obesity") 
##                 13.8348
Row_4_obesity_f_CI = attr(Row_4_obesity_f,"ci")
Row_4_obesity_f_CI*100
##     2.5%    97.5% 
## 12.51322 15.23102
Row_4_overweight_f<- svyciprop(formula = ~I(bmi_cut == "overweight"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_overweight_f*100)[1]
## I(bmi_cut == "overweight") 
##                   31.44915
Row_4_overweight_f_CI = attr(Row_4_overweight_f,"ci")
Row_4_overweight_f_CI*100
##     2.5%    97.5% 
## 29.70096 33.23310
Row_4_underweight_f <- svyciprop(formula = ~I(bmi_cut == "underweight"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_underweight_f*100)[1]
## I(bmi_cut == "underweight") 
##                    3.796499
Row_4_underweight_f_CI = attr(Row_4_underweight_f,"ci")
Row_4_underweight_f_CI*100
##     2.5%    97.5% 
## 3.129617 4.548016
# age_cut
Row_4_age_cut_60to64_f<- svyciprop(formula = ~I(age_cut == "60-69"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_age_cut_60to64_f*100)[1]
## I(age_cut == "60-69") 
##              45.47211
Row_4_age_cut_60to64_f_CI = attr(Row_4_age_cut_60to64_f,"ci")
Row_4_age_cut_60to64_f_CI*100
##     2.5%    97.5% 
## 43.59342 47.35944
Row_4_age_cut_65to74_f <- svyciprop(formula = ~I(age_cut == "70-79"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_age_cut_65to74_f*100)[1]
## I(age_cut == "70-79") 
##              35.11795
Row_4_age_cut_65to74_f_CI = attr(Row_4_age_cut_65to74_f,"ci")
Row_4_age_cut_65to74_f_CI*100
##     2.5%    97.5% 
## 33.31109 36.95368
Row_4_age_cut_75_f<- svyciprop(formula = ~I(age_cut == "80+"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_age_cut_75_f*100)[1]
## I(age_cut == "80+") 
##            19.40993
Row_4_age_cut_75_f_CI = attr(Row_4_age_cut_75_f,"ci")
Row_4_age_cut_75_f_CI*100
##     2.5%    97.5% 
## 17.87821 21.00539
# SHS     
Row_4_SHS_very_good_f<- svyciprop(formula = ~I(SHS == "very good"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_SHS_very_good_f*100)[1]
## I(SHS == "very good") 
##              26.66407
Row_4_SHS_very_good_f_CI = attr(Row_4_SHS_very_good_f,"ci")
Row_4_SHS_very_good_f_CI*100
##     2.5%    97.5% 
## 25.01644 28.35604
Row_4_SHS_good_f<- svyciprop(formula = ~I(SHS == "good"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_SHS_good_f*100)[1]
## I(SHS == "good") 
##         46.20847
Row_4_SHS_good_f_CI = attr(Row_4_SHS_good_f,"ci")
Row_4_SHS_good_f_CI*100
##     2.5%    97.5% 
## 44.31668 48.10755
Row_4_SHS_average_f <- svyciprop(formula = ~I(SHS == "average"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_SHS_average_f*100)[1]
## I(SHS == "average") 
##            22.25442
Row_4_SHS_average_f_CI = attr(Row_4_SHS_average_f,"ci")
Row_4_SHS_average_f_CI*100
##     2.5%    97.5% 
## 20.69361 23.86910
Row_4_SHS_poor_f<- svyciprop(formula = ~I(SHS == "poor"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_SHS_poor_f*100)[1]
## I(SHS == "poor") 
##         4.228014
Row_4_SHS_poor_f_CI = attr(Row_4_SHS_poor_f,"ci")
Row_4_SHS_poor_f_CI*100
##     2.5%    97.5% 
## 3.478123 5.073572
Row_4_SHS_very_poor_f<- svyciprop(formula = ~I(SHS == "very poor"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_SHS_very_poor_f*100)[1]
## I(SHS == "very poor") 
##             0.6450267
Row_4_SHS_very_poor_f_CI = attr(Row_4_SHS_very_poor_f,"ci")
Row_4_SHS_very_poor_f_CI*100
##      2.5%     97.5% 
## 0.4156183 0.9457708
# diabetes
Row_4_diabetes_yes_f<- svyciprop(formula = ~I(diabetes == "yes"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_diabetes_yes_f*100)[1]
## I(diabetes == "yes") 
##             7.942166
Row_4_diabetes_yes_f_CI = attr(Row_4_diabetes_yes_f,"ci")
Row_4_diabetes_yes_f_CI*100
##     2.5%    97.5% 
## 6.857244 9.125631
Row_4_diabetes_no_f <- svyciprop(formula = ~I(diabetes == "no"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_diabetes_no_f*100)[1]
## I(diabetes == "no") 
##            92.05783
Row_4_diabetes_no_f_CI = attr(Row_4_diabetes_no_f,"ci")
Row_4_diabetes_no_f_CI*100
##     2.5%    97.5% 
## 90.87437 93.14276
# osteoarthritis
Row_4_osteoarthritis_yes_f<- svyciprop(formula = ~I(osteoarthritis == "yes"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_osteoarthritis_yes_f*100)[1]
## I(osteoarthritis == "yes") 
##                   41.17536
Row_4_osteoarthritis_yes_f_CI = attr(Row_4_osteoarthritis_yes_f,"ci")
Row_4_osteoarthritis_yes_f_CI*100
##     2.5%    97.5% 
## 39.30930 43.05849
Row_4_osteoarthritis_no_f <- svyciprop(formula = ~I(osteoarthritis == "no"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_osteoarthritis_no_f*100)[1]
## I(osteoarthritis == "no") 
##                  58.82464
Row_4_osteoarthritis_no_f_CI = attr(Row_4_osteoarthritis_no_f,"ci")
Row_4_osteoarthritis_no_f_CI*100
##     2.5%    97.5% 
## 56.94151 60.69070
# heart_attack
Row_4_heart_attack_yes_f<- svyciprop(formula = ~I(heart_attack == "yes"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_heart_attack_yes_f*100)[1]
## I(heart_attack == "yes") 
##                0.7793696
Row_4_heart_attack_yes_f_CI = attr(Row_4_heart_attack_yes_f,"ci")
Row_4_heart_attack_yes_f_CI*100
##      2.5%     97.5% 
## 0.4672237 1.2054567
Row_4_heart_attack_no_f <- svyciprop(formula = ~I(heart_attack == "no"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_heart_attack_no_f*100)[1]
## I(heart_attack == "no") 
##                99.22063
Row_4_heart_attack_no_f_CI = attr(Row_4_heart_attack_no_f,"ci")
Row_4_heart_attack_no_f_CI*100
##     2.5%    97.5% 
## 98.79454 99.53278
# stroke
Row_4_stroke_yes_f<- svyciprop(formula = ~I(stroke == "yes"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_stroke_yes_f*100)[1]
## I(stroke == "yes") 
##          0.9288504
Row_4_stroke_yes_f_CI = attr(Row_4_stroke_yes_f,"ci")
Row_4_stroke_yes_f_CI*100
##      2.5%     97.5% 
## 0.5908282 1.3748218
Row_4_stroke_no_f <- svyciprop(formula = ~I(stroke == "no"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_stroke_no_f*100)[1]
## I(stroke == "no") 
##          99.07115
Row_4_stroke_no_f_CI = attr(Row_4_stroke_no_f,"ci")
Row_4_stroke_no_f_CI*100
##     2.5%    97.5% 
## 98.62518 99.40917
# urinary_incontinence
Row_4_urinary_incontinence_yes_f<- svyciprop(formula = ~I(urinary_incontinence == "yes"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_urinary_incontinence_yes_f*100)[1]
## I(urinary_incontinence == "yes") 
##                         12.38055
Row_4_urinary_incontinence_yes_f_CI = attr(Row_4_urinary_incontinence_yes_f,"ci")
Row_4_urinary_incontinence_yes_f_CI*100
##     2.5%    97.5% 
## 11.11915 13.72010
Row_4_urinary_incontinence_no_f <- svyciprop(formula = ~I(urinary_incontinence == "no"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_urinary_incontinence_no_f*100)[1]
## I(urinary_incontinence == "no") 
##                        87.61945
Row_4_urinary_incontinence_no_f_CI = attr(Row_4_urinary_incontinence_no_f,"ci")
Row_4_urinary_incontinence_no_f_CI*100
##     2.5%    97.5% 
## 86.27990 88.88085
# osteoporosis
Row_4_osteoporosis_yes_f<- svyciprop(formula = ~I(osteoporosis == "yes"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_osteoporosis_yes_f*100)[1]
## I(osteoporosis == "yes") 
##                 14.47577
Row_4_osteoporosis_yes_f_CI = attr(Row_4_osteoporosis_yes_f,"ci")
Row_4_osteoporosis_yes_f_CI*100
##     2.5%    97.5% 
## 13.17181 15.84818
Row_4_osteoporosis_no_f <- svyciprop(formula = ~I(osteoporosis == "no"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_osteoporosis_no_f*100)[1]
## I(osteoporosis == "no") 
##                85.52423
Row_4_osteoporosis_no_f_CI = attr(Row_4_osteoporosis_no_f,"ci")
Row_4_osteoporosis_no_f_CI*100
##     2.5%    97.5% 
## 84.15182 86.82819
# activity
Row_4_inactive_f<- svyciprop(formula = ~I(activity == "inactive"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_inactive_f*100)[1]
## I(activity == "inactive") 
##                  15.23474
Row_4_inactive_f_CI = attr(Row_4_inactive_f,"ci")
Row_4_inactive_f_CI*100
##     2.5%    97.5% 
## 13.82513 16.71949
Row_4_partially_active_f <- svyciprop(formula = ~I(activity == "partially active"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_partially_active_f*100)[1]
## I(activity == "partially active") 
##                          15.48461
Row_4_partially_active_f_CI = attr(Row_4_partially_active_f,"ci")
Row_4_partially_active_f_CI*100
##     2.5%    97.5% 
## 14.11078 16.92818
Row_4_active_f<- svyciprop(formula = ~I(activity == "active"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_active_f*100)[1]
## I(activity == "active") 
##                69.28064
Row_4_active_f_CI = attr(Row_4_active_f,"ci")
Row_4_active_f_CI*100
##     2.5%    97.5% 
## 67.44248 71.07889
# alcohol
Row_4_alcohol_abstinent_f<- svyciprop(formula = ~I(alcohol == "abstinent"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_alcohol_abstinent_f*100)[1]
## I(alcohol == "abstinent") 
##                  21.64624
Row_4_alcohol_abstinent_f_CI = attr(Row_4_alcohol_abstinent_f,"ci")
Row_4_alcohol_abstinent_f_CI*100
##     2.5%    97.5% 
## 20.07156 23.27820
Row_4_alcohol_low_risk_f<- svyciprop(formula = ~I(alcohol == "low risk"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_alcohol_low_risk_f*100)[1]
## I(alcohol == "low risk") 
##                 73.00365
Row_4_alcohol_low_risk_f_CI = attr(Row_4_alcohol_low_risk_f,"ci")
Row_4_alcohol_low_risk_f_CI*100
##     2.5%    97.5% 
## 71.26769 74.69396
Row_4_alcohol_moderate_or_increased_risk_f<- svyciprop(formula = ~I(alcohol == "moderate or increased risk"),
          design = wdat_17_f,
          na.rm = TRUE,
          method = "li")
(Row_4_alcohol_moderate_or_increased_risk_f*100)[1]
## I(alcohol == "moderate or increased risk") 
##                                   5.350114
Row_4_alcohol_moderate_or_increased_risk_f_CI = attr(Row_4_alcohol_moderate_or_increased_risk_f,"ci")
Row_4_alcohol_moderate_or_increased_risk_f_CI*100
##     2.5%    97.5% 
## 4.567451 6.212154

5.2.6 Summary proportion (%) and CI 95% of population with falls by characteristic

5.2.6.1 Men

# men
# education
tab_amount_fall_education_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ education,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_education_m*100
##   education I(fall == "fall last 12 months")     ci_l     ci_u
## 1        NA                         19.85768 15.66504 24.54853
## 2        NA                         22.77108 20.40425 25.25952
## 3        NA                         26.21775 23.31754 29.26283
# language
tab_amount_fall_language_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ language,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_language_m*100
##   language I(fall == "fall last 12 months")     ci_l     ci_u
## 1       NA                         24.22165 22.16252 26.36338
## 2       NA                         22.65386 19.46623 26.06824
## 3       NA                         18.64615 13.57350 24.54846
# urban_rural
tab_amount_fall_urban_rural_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ urban_rural,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_urban_rural_m*100
##   urban_rural I(fall == "fall last 12 months")     ci_l     ci_u
## 1          NA                         23.38946 21.35948 25.50444
## 2          NA                         24.47442 21.39538 27.73868
# nationality
tab_amount_fall_nationality_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ nationality,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_nationality_m*100
##   nationality I(fall == "fall last 12 months")     ci_l     ci_u
## 1          NA                         24.86303 22.98294 26.80875
## 2          NA                         16.41364 12.70048 20.64099
# smoke              
tab_amount_fall_smoke_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ smoke,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_smoke_m*100
##   smoke I(fall == "fall last 12 months")     ci_l     ci_u
## 1    NA                         23.07225 20.35888 25.94328
## 2    NA                         24.71608 22.06310 27.50309
## 3    NA                         22.59429 18.90181 26.59605
# FL
tab_amount_fall_FL_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ FL,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_FL_m*100
##   FL I(fall == "fall last 12 months")     ci_l     ci_u
## 1 NA                         22.81874 20.88739 24.83004
## 2 NA                         24.11051 20.32016 28.19325
## 3 NA                         40.53428 27.98901 53.97527
## 4 NA                         34.39144 21.18945 49.46500
# bmi_cut
tab_amount_fall_bmi_cut_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ bmi_cut,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_bmi_cut_m*100
##   bmi_cut I(fall == "fall last 12 months")     ci_l     ci_u
## 1      NA                         23.56776 20.79323 26.50166
## 2      NA                         24.87046 20.59600 29.50056
## 3      NA                         23.41424 20.91458 26.04388
## 4      NA                         38.10953 11.14708 71.77210
# age_cut
tab_amount_fall_age_cut_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ age_cut,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_age_cut_m*100
##   age_cut I(fall == "fall last 12 months")     ci_l     ci_u
## 1      NA                         21.72215 19.32382 24.25527
## 2      NA                         24.02362 21.24775 26.95396
## 3      NA                         28.99578 24.43703 33.85649
# SHS     
tab_amount_fall_SHS_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ SHS,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_SHS_m*100
##   SHS I(fall == "fall last 12 months")     ci_l     ci_u
## 1  NA                         22.01380 18.72610 25.55495
## 2  NA                         23.46568 21.04619 26.00627
## 3  NA                         24.63606 20.78396 28.77936
## 4  NA                         29.47983 21.68690 38.17040
## 5  NA                         31.19853 16.01732 49.77763
# diabetes
tab_amount_fall_diabetes_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ diabetes,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_diabetes_m*100
##   diabetes I(fall == "fall last 12 months")     ci_l     ci_u
## 1       NA                         23.08905 21.17181 25.08355
## 2       NA                         27.55444 22.38761 33.15648
# osteoarthritis
tab_amount_fall_osteoarthritis_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ osteoarthritis,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_osteoarthritis_m*100
##   osteoarthritis I(fall == "fall last 12 months")     ci_l     ci_u
## 1             NA                         21.98076 20.05555 23.99026
## 2             NA                         29.19377 25.54539 33.03017
# heart_attack
tab_amount_fall_heart_attack_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ heart_attack,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_heart_attack_m*100
##   heart_attack I(fall == "fall last 12 months")     ci_l     ci_u
## 1           NA                         23.58210 21.85908 25.36516
## 2           NA                         30.41774 16.81601 46.84486
# stroke
tab_amount_fall_stroke_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ stroke,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_stroke_m*100
##   stroke I(fall == "fall last 12 months")     ci_l     ci_u
## 1     NA                         23.55358 21.83642 25.33049
## 2     NA                         33.30601 15.16562 55.69365
# urinary_incontinence
tab_amount_fall_urinary_incontinence_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ urinary_incontinence,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_urinary_incontinence_m*100
##   urinary_incontinence I(fall == "fall last 12 months")     ci_l     ci_u
## 1                   NA                         22.62365 20.86522 24.44900
## 2                   NA                         35.38263 28.95637 42.18273
# osteoporosis
tab_amount_fall_osteoporosis_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ osteoporosis,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_osteoporosis_m*100
##   osteoporosis I(fall == "fall last 12 months")     ci_l     ci_u
## 1           NA                         23.37635 21.64873 25.16521
## 2           NA                         35.91822 23.39578 49.89099
# activity
tab_amount_fall_activity_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ activity,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_activity_m*100
##   activity I(fall == "fall last 12 months")     ci_l     ci_u
## 1       NA                         25.91317 20.24444 32.17836
## 2       NA                         25.46715 20.65547 30.71525
## 3       NA                         23.36547 21.34844 25.46656
# alcohol
tab_amount_fall_alcohol_m <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ alcohol,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_alcohol_m*100
##   alcohol I(fall == "fall last 12 months")     ci_l     ci_u
## 1      NA                         20.88088 15.76847 26.69494
## 2      NA                         24.26244 22.31688 26.28137
## 3      NA                         23.73551 17.53584 30.78590

5.2.6.2 Women

# women
# education
tab_amount_fall_education_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ education,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_education_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   education I(fall == "fall last 12 months")     ci_l     ci_u
## 1        NA                         25.58549 22.51454 28.82678
## 2        NA                         25.39804 23.19951 27.68358
## 3        NA                         25.50011 21.46293 29.83901
# language
tab_amount_fall_language_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ language,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_language_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   language I(fall == "fall last 12 months")     ci_l     ci_u
## 1       NA                         25.78792 23.75072 27.89763
## 2       NA                         26.25770 23.24247 29.42942
## 3       NA                         19.03335 14.56549 24.11140
# urban_rural
tab_amount_fall_urban_rural_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ urban_rural,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_urban_rural_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   urban_rural I(fall == "fall last 12 months")     ci_l     ci_u
## 1          NA                         25.47602 23.52489 27.49498
## 2          NA                         25.73064 22.73116 28.89076
# nationality
tab_amount_fall_nationality_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ nationality,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_nationality_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   nationality I(fall == "fall last 12 months")     ci_l     ci_u
## 1          NA                         25.83928 24.09431 27.63698
## 2          NA                         22.99168 18.16858 28.34136
# smoke              
tab_amount_fall_smoke_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ smoke,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_smoke_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   smoke I(fall == "fall last 12 months")     ci_l     ci_u
## 1    NA                         25.15711 23.04109 27.35494
## 2    NA                         27.88961 24.55621 31.39442
## 3    NA                         22.83275 18.91841 27.09036
# FL
tab_amount_fall_FL_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ FL,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_FL_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   FL I(fall == "fall last 12 months")     ci_l     ci_u
## 1 NA                         23.10017 21.30097 24.96718
## 2 NA                         31.27858 27.04272 35.73394
## 3 NA                         37.88652 28.68745 47.71052
## 4 NA                         38.04728 25.54567 51.72266
# bmi_cut
tab_amount_fall_bmi_cut_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ bmi_cut,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_bmi_cut_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   bmi_cut I(fall == "fall last 12 months")     ci_l     ci_u
## 1      NA                         26.60158 24.22806 29.06869
## 2      NA                         25.17228 20.88206 29.81314
## 3      NA                         24.03888 21.20875 27.02954
## 4      NA                         25.41585 17.67966 34.35905
# age_cut
tab_amount_fall_age_cut_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ age_cut,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_age_cut_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   age_cut I(fall == "fall last 12 months")     ci_l     ci_u
## 1      NA                         20.31848 18.18715 22.56698
## 2      NA                         26.53584 23.72813 29.47611
## 3      NA                         35.95031 31.63216 40.42583
# SHS     
tab_amount_fall_SHS_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ SHS,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_SHS_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   SHS I(fall == "fall last 12 months")     ci_l     ci_u
## 1  NA                         20.45410 17.55242 23.57529
## 2  NA                         23.52557 21.18924 25.97418
## 3  NA                         33.36065 29.63385 37.23149
## 4  NA                         36.42046 27.12977 46.44554
## 5  NA                         40.16408 20.22265 62.65513
# diabetes
tab_amount_fall_diabetes_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ diabetes,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_diabetes_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   diabetes I(fall == "fall last 12 months")     ci_l     ci_u
## 1       NA                         24.22775 22.45181 26.06476
## 2       NA                         29.65368 22.95672 36.99295
# osteoarthritis
tab_amount_fall_osteoarthritis_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ osteoarthritis,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_osteoarthritis_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   osteoarthritis I(fall == "fall last 12 months")     ci_l     ci_u
## 1             NA                         22.38463 20.33455 24.52785
## 2             NA                         30.11422 27.40807 32.91592
# heart_attack
tab_amount_fall_heart_attack_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ heart_attack,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_heart_attack_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   heart_attack I(fall == "fall last 12 months")      ci_l     ci_u
## 1           NA                         25.52858 23.872841 27.23274
## 2           NA                         25.64959  9.652918 48.07335
# stroke
tab_amount_fall_stroke_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ stroke,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_stroke_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   stroke I(fall == "fall last 12 months")     ci_l     ci_u
## 1     NA                         25.31564 23.66355 27.01663
## 2     NA                         51.67638 29.11522 73.77259
# urinary_incontinence
tab_amount_fall_urinary_incontinence_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ urinary_incontinence,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_urinary_incontinence_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   urinary_incontinence I(fall == "fall last 12 months")     ci_l     ci_u
## 1                   NA                         24.12366 22.40599 25.89880
## 2                   NA                         35.79056 30.51328 41.30843
# osteoporosis
tab_amount_fall_osteoporosis_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ osteoporosis,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_osteoporosis_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   osteoporosis I(fall == "fall last 12 months")     ci_l     ci_u
## 1           NA                         24.82317 23.04898 26.65583
## 2           NA                         27.33264 22.98785 31.98564
# activity
tab_amount_fall_activity_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ activity,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_activity_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   activity I(fall == "fall last 12 months")     ci_l     ci_u
## 1       NA                         30.43798 25.77617 35.38436
## 2       NA                         24.75886 20.56238 29.30033
## 3       NA                         23.78882 21.81281 25.84308
# alcohol
tab_amount_fall_alcohol_f <- svyby(
  formula = ~I(fall == "fall last 12 months"),
  by = ~ alcohol,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
tab_amount_fall_alcohol_f*100
## Warning in Ops.factor(left, right): '*' not meaningful for factors
##   alcohol I(fall == "fall last 12 months")     ci_l     ci_u
## 1      NA                         26.42494 22.72913 30.35595
## 2      NA                         24.90682 22.96970 26.91346
## 3      NA                         22.66173 16.22787 30.09730

5.2.7 Summary intergroupdifference - test

  • Intergroupdifference (Prop fall % by subset of groups)

    • \(svychi^2-test\) \(Pearson's\_x^2\) with Rao & Scott adjustment
  • svychisq() computes first and second-order Rao-Scott corrections to the Pearson chisquared test, and two Wald-type tests. The default (statistic=”F”) is the Rao-Scott second-order correction. The p-values are computed with a Satterthwaite approximation to the distribution. The alternative statistic=“Chisq” adjusts the Pearson chisquared statistic by a design effect estimate and then compares it to the chisquared distribution it would have under simple random sampling” [2].

Here a description of Prof Thomas Lumley

  • Fall - Sex
# men vs women
survey::svychisq(~fall + gender, wdat_17)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + gender, wdat_17)
F = 2.2946, ndf = 1, ddf = 6856, p-value = 0.1299

5.2.7.1 Men

# men

# education
survey::svychisq(~fall + education, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + education, wdat_17_m)
F = 3.0815, ndf = 1.9979, ddf = 6369.4265, p-value = 0.04601
# language
survey::svychisq(~fall + language, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + language, wdat_17_m)
F = 1.473, ndf = 1.9237, ddf = 6132.8699, p-value = 0.2298
# urban_rural
survey::svychisq(~fall + urban_rural, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + urban_rural, wdat_17_m)
F = 0.31923, ndf = 1, ddf = 3188, p-value = 0.5721
# nationality
survey::svychisq(~fall + nationality, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + nationality, wdat_17_m)
F = 11.349, ndf = 1, ddf = 3188, p-value = 0.0007641
# smoke
survey::svychisq(~fall + smoke, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + smoke, wdat_17_m)
F = 0.53085, ndf = 1.9989, ddf = 6372.3946, p-value = 0.588
# FL
survey::svychisq(~fall + FL, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + FL, wdat_17_m)
F = 4.3154, ndf = 2.9936, ddf = 9543.7307, p-value = 0.004803
# bmi_cut
survey::svychisq(~fall + bmi_cut, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + bmi_cut, wdat_17_m)
F = 0.53968, ndf = 2.9671, ddf = 9459.0986, p-value = 0.6531
# bmi
# survey::svychisq(~fall + bmi, wdat_17_m)
# age_cut
survey::svychisq(~fall + age_cut, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + age_cut, wdat_17_m)
F = 4.0318, ndf = 1.9994, ddf = 6373.9621, p-value = 0.0178
# age
# survey::svychisq(~fall + age, wdat_17_m)
# SHS
survey::svychisq(~fall + SHS, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + SHS, wdat_17_m)
F = 1.0713, ndf = 3.9886, ddf = 12715.5751, p-value = 0.3687
# diabetes
survey::svychisq(~fall + diabetes, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + diabetes, wdat_17_m)
F = 2.5506, ndf = 1, ddf = 3188, p-value = 0.1104
# osteoarthritis
survey::svychisq(~fall + osteoarthritis, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + osteoarthritis, wdat_17_m)
F = 12.231, ndf = 1, ddf = 3188, p-value = 0.0004765
# heart_attack
survey::svychisq(~fall + heart_attack, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + heart_attack, wdat_17_m)
F = 0.95028, ndf = 1, ddf = 3188, p-value = 0.3297
# stroke
survey::svychisq(~fall + stroke, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + stroke, wdat_17_m)
F = 1.2191, ndf = 1, ddf = 3188, p-value = 0.2696
# urinary_incontinence
survey::svychisq(~fall + urinary_incontinence, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + urinary_incontinence, wdat_17_m)
F = 16.584, ndf = 1, ddf = 3188, p-value = 4.768e-05
# osteoporosis
survey::svychisq(~fall + osteoporosis, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + osteoporosis, wdat_17_m)
F = 4.3965, ndf = 1, ddf = 3188, p-value = 0.03609
# activity
survey::svychisq(~fall + activity, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + activity, wdat_17_m)
F = 0.55522, ndf = 1.9975, ddf = 6368.1113, p-value = 0.5738
# alcohol
survey::svychisq(~fall + alcohol, wdat_17_m)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + alcohol, wdat_17_m)
F = 0.64744, ndf = 1.9887, ddf = 6339.9501, p-value = 0.5226

5.2.7.2 Women

# women

# education
survey::svychisq(~fall + education, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + education, wdat_17_f)
F = 0.0046757, ndf = 1.9996, ddf = 7282.6569, p-value = 0.9953
# language
survey::svychisq(~fall + language, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + language, wdat_17_f)
F = 2.3529, ndf = 1.9077, ddf = 6947.7606, p-value = 0.09784
# urban_rural
survey::svychisq(~fall + urban_rural, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + urban_rural, wdat_17_f)
F = 0.018618, ndf = 1, ddf = 3642, p-value = 0.8915
# nationality
survey::svychisq(~fall + nationality, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + nationality, wdat_17_f)
F = 1.0103, ndf = 1, ddf = 3642, p-value = 0.3149
# smoke
survey::svychisq(~fall + smoke, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + smoke, wdat_17_f)
F = 1.8053, ndf = 1.9927, ddf = 7257.4910, p-value = 0.1646
# FL
survey::svychisq(~fall + FL, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + FL, wdat_17_f)
F = 8.5626, ndf = 2.982, ddf = 10860.306, p-value = 1.183e-05
# bmi_cut
survey::svychisq(~fall + bmi_cut, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + bmi_cut, wdat_17_f)
F = 0.6055, ndf = 2.9971, ddf = 10915.3607, p-value = 0.6112
# bmi
# survey::svychisq(~fall + bmi, wdat_17_f)
# age_cut
survey::svychisq(~fall + age_cut, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + age_cut, wdat_17_f)
F = 22.791, ndf = 1.994, ddf = 7262.329, p-value = 1.437e-10
# age
# survey::svychisq(~fall + age, wdat_17_f)
# SHS
survey::svychisq(~fall + SHS, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + SHS, wdat_17_f)
F = 10.194, ndf = 3.9156, ddf = 14260.6820, p-value = 4.138e-08
# diabetes
survey::svychisq(~fall + diabetes, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + diabetes, wdat_17_f)
F = 2.4123, ndf = 1, ddf = 3642, p-value = 0.1205
# osteoarthritis
survey::svychisq(~fall + osteoarthritis, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + osteoarthritis, wdat_17_f)
F = 19.622, ndf = 1, ddf = 3642, p-value = 9.713e-06
# heart_attack
survey::svychisq(~fall + heart_attack, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + heart_attack, wdat_17_f)
F = 0.00017813, ndf = 1, ddf = 3642, p-value = 0.9894
# stroke
survey::svychisq(~fall + stroke, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + stroke, wdat_17_f)
F = 7.7581, ndf = 1, ddf = 3642, p-value = 0.005375
# urinary_incontinence
survey::svychisq(~fall + urinary_incontinence, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + urinary_incontinence, wdat_17_f)
F = 19.218, ndf = 1, ddf = 3642, p-value = 1.199e-05
# osteoporosis
survey::svychisq(~fall + osteoporosis, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + osteoporosis, wdat_17_f)
F = 1.0785, ndf = 1, ddf = 3642, p-value = 0.2991
# activity
survey::svychisq(~fall + activity, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + activity, wdat_17_f)
F = 3.5277, ndf = 1.9994, ddf = 7281.7001, p-value = 0.02944
# alcohol
survey::svychisq(~fall + alcohol, wdat_17_f)

    Pearson's X^2: Rao & Scott adjustment

data:  survey::svychisq(~fall + alcohol, wdat_17_f)
F = 0.48448, ndf = 1.9963, ddf = 7270.6664, p-value = 0.6157

5.3 Univariate models

Univariate logistic models separately for men and women.

5.3.1 Men

# men

# education
uni_education_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ education,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_education_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3201
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.004
## Pseudo-R² (McFadden) = 0.003
## AIC =   NA 
## 
## -------------------------------------------------------------------------
##                                exp(Est.)    2.5%   97.5%   t val.       p
## ---------------------------- ----------- ------- ------- -------- -------
## (Intercept)                        0.248   0.188   0.327   -9.813   0.000
## educationupper secondary           1.190   0.872   1.624    1.097   0.273
## education                                                                
## educationtertiary                  1.434   1.043   1.971    2.221   0.026
## education                                                                
## -------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_education_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_education_m")

# language
uni_language_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ language,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_language_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3211
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.001
## Pseudo-R² (McFadden) = 0.001
## AIC =   NA 
## 
## -------------------------------------------------------------------
##                         exp(Est.)    2.5%   97.5%    t val.       p
## --------------------- ----------- ------- ------- --------- -------
## (Intercept)                 0.320   0.285   0.358   -19.542   0.000
## languagefrench              0.916   0.735   1.142    -0.778   0.437
## languageitalian             0.717   0.491   1.046    -1.724   0.085
## -------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.001
# jtools::plot_summs(uni_language_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_language_m")

# urban_rural
uni_urban_rural_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ urban_rural,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_urban_rural_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3211
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = -0.000
## Pseudo-R² (McFadden) = -0.000
## AIC =   NA 
## 
## -------------------------------------------------------------------------
##                               exp(Est.)    2.5%   97.5%    t val.       p
## --------------------------- ----------- ------- ------- --------- -------
## (Intercept)                       0.305   0.272   0.343   -20.114   0.000
## urban_ruralrural area             1.061   0.863   1.305     0.565   0.572
## -------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.001
# jtools::plot_summs(uni_urban_rural_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_urban_rural_m")

# nationality
uni_nationality_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ nationality,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_nationality_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3211
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.007
## Pseudo-R² (McFadden) = 0.004
## AIC =   NA 
## 
## ------------------------------------------------------------------------
##                              exp(Est.)    2.5%   97.5%    t val.       p
## -------------------------- ----------- ------- ------- --------- -------
## (Intercept)                      0.331   0.299   0.367   -21.177   0.000
## nationalityforeigner             0.593   0.437   0.806    -3.339   0.001
## ------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.001
# jtools::plot_summs(uni_nationality_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_nationality_m")

# smoke
uni_smoke_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ smoke,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_smoke_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3210
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.001
## Pseudo-R² (McFadden) = 0.000
## AIC =   NA 
## 
## ----------------------------------------------------------------------
##                            exp(Est.)    2.5%   97.5%    t val.       p
## ------------------------ ----------- ------- ------- --------- -------
## (Intercept)                    0.300   0.256   0.351   -15.015   0.000
## smokeformer smoker             1.095   0.883   1.357     0.826   0.409
## smokesmoker                    0.973   0.743   1.275    -0.197   0.844
## ----------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_smoke_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_smoke_m")

# FL
uni_FL_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ FL,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_FL_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3202
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.007
## Pseudo-R² (McFadden) = 0.004
## AIC =   NA 
## 
## -----------------------------------------------------------------------
##                             exp(Est.)    2.5%   97.5%    t val.       p
## ------------------------- ----------- ------- ------- --------- -------
## (Intercept)                     0.296   0.264   0.331   -21.343   0.000
## FLSlight difficulty             1.075   0.844   1.369     0.582   0.560
## FLGreat difficulty              2.306   1.336   3.980     2.999   0.003
## FLInability                     1.773   0.951   3.307     1.801   0.072
## -----------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.001
# jtools::plot_summs(uni_FL_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_FL_m")

# bmi_cut
uni_bmi_cut_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ bmi_cut,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_bmi_cut_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3188
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.002
## Pseudo-R² (McFadden) = 0.001
## AIC =   NA 
## 
## ----------------------------------------------------------------------
##                            exp(Est.)    2.5%   97.5%    t val.       p
## ------------------------ ----------- ------- ------- --------- -------
## (Intercept)                    0.308   0.263   0.361   -14.560   0.000
## bmi_cutobesity                 1.074   0.806   1.429     0.486   0.627
## bmi_cutoverweight              0.991   0.801   1.227    -0.079   0.937
## bmi_cutunderweight             1.997   0.646   6.169     1.202   0.230
## ----------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_bmi_cut_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_bmi_cut_m")

# bmi
uni_bmi_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ bmi,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_bmi_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3188
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.001
## Pseudo-R² (McFadden) = 0.001
## AIC =   NA 
## 
## --------------------------------------------------------------
##                     exp(Est.)    2.5%   97.5%   t val.       p
## ----------------- ----------- ------- ------- -------- -------
## (Intercept)             0.288   0.152   0.547   -3.809   0.000
## bmi                     1.003   0.979   1.027    0.244   0.807
## --------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_bmi_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_bmi_m")

# age_cut
uni_age_cut_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ age_cut,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_age_cut_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3211
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.005
## Pseudo-R² (McFadden) = 0.003
## AIC =   NA 
## 
## ----------------------------------------------------------------
##                      exp(Est.)    2.5%   97.5%    t val.       p
## ------------------ ----------- ------- ------- --------- -------
## (Intercept)              0.278   0.240   0.321   -17.334   0.000
## age_cut70-79             1.139   0.921   1.410     1.201   0.230
## age_cut80+               1.472   1.123   1.928     2.803   0.005
## ----------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.001
# jtools::plot_summs(uni_age_cut_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_age_cut_m")

# age
uni_age_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ age,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_age_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3211
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.005
## Pseudo-R² (McFadden) = 0.003
## AIC =   NA 
## 
## --------------------------------------------------------------
##                     exp(Est.)    2.5%   97.5%   t val.       p
## ----------------- ----------- ------- ------- -------- -------
## (Intercept)             0.090   0.036   0.221   -5.245   0.000
## age                     1.018   1.005   1.030    2.736   0.006
## --------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.001
# jtools::plot_summs(uni_age_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_age_m")

# SHS     
uni_SHS_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ SHS,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_SHS_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3207
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.003
## Pseudo-R² (McFadden) = 0.002
## AIC =   NA 
## 
## ----------------------------------------------------------------
##                      exp(Est.)    2.5%   97.5%    t val.       p
## ------------------ ----------- ------- ------- --------- -------
## (Intercept)              0.282   0.231   0.344   -12.477   0.000
## SHSgood                  1.086   0.853   1.384     0.669   0.503
## SHSaverage               1.158   0.864   1.552     0.982   0.326
## SHSpoor                  1.481   0.952   2.303     1.743   0.081
## SHSvery poor             1.606   0.732   3.524     1.183   0.237
## ----------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_SHS_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_SHS_m")

# SHS_collapsed     
uni_SHS_collapsed_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ SHS_collapsed,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_SHS_collapsed_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3207
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.003
## Pseudo-R² (McFadden) = 0.002
## AIC =   NA 
## 
## --------------------------------------------------------------------------
##                                exp(Est.)    2.5%   97.5%    t val.       p
## ---------------------------- ----------- ------- ------- --------- -------
## (Intercept)                        0.298   0.266   0.334   -20.936   0.000
## SHS_collapsedaverage               1.098   0.861   1.400     0.752   0.452
## SHS_collapsedpoor                  1.404   0.932   2.116     1.621   0.105
## SHS_collapsedvery poor             1.523   0.706   3.284     1.073   0.283
## --------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_SHS_collapsed_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_SHS_m")

# diabetes
uni_diabetes_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ diabetes,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_diabetes_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 2892
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.001
## Pseudo-R² (McFadden) = 0.000
## AIC =   NA 
## 
## ---------------------------------------------------------------
##                     exp(Est.)    2.5%   97.5%    t val.       p
## ----------------- ----------- ------- ------- --------- -------
## (Intercept)             0.300   0.269   0.335   -21.420   0.000
## diabetesyes             1.267   0.947   1.695     1.594   0.111
## ---------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.001
# jtools::plot_summs(uni_diabetes_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_diabetes_m")

# osteoarthritis
uni_osteoarthritis_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ osteoarthritis,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_osteoarthritis_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3187
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.010
## Pseudo-R² (McFadden) = 0.006
## AIC =   NA 
## 
## ---------------------------------------------------------------------
##                           exp(Est.)    2.5%   97.5%    t val.       p
## ----------------------- ----------- ------- ------- --------- -------
## (Intercept)                   0.282   0.251   0.316   -21.651   0.000
## osteoarthritisyes             1.463   1.181   1.813     3.485   0.000
## ---------------------------------------------------------------------
## 
## Estimated dispersion parameter = 0.999
# jtools::plot_summs(uni_osteoarthritis_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_osteoarthritis_m")

# heart_attack
uni_heart_attack_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ heart_attack,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_heart_attack_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3209
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.001
## Pseudo-R² (McFadden) = 0.000
## AIC =   NA 
## 
## -------------------------------------------------------------------
##                         exp(Est.)    2.5%   97.5%    t val.       p
## --------------------- ----------- ------- ------- --------- -------
## (Intercept)                 0.309   0.280   0.340   -23.697   0.000
## heart_attackyes             1.417   0.701   2.863     0.970   0.332
## -------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_heart_attack_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_heart_attack_m")

# stroke
uni_stroke_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ stroke,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_stroke_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3207
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.002
## Pseudo-R² (McFadden) = 0.001
## AIC =   NA 
## 
## ---------------------------------------------------------------
##                     exp(Est.)    2.5%   97.5%    t val.       p
## ----------------- ----------- ------- ------- --------- -------
## (Intercept)             0.308   0.280   0.339   -23.790   0.000
## strokeyes               1.621   0.682   3.851     1.094   0.274
## ---------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_stroke_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_stroke_m")

# urinary_incontinence
uni_urinary_incontinence_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ urinary_incontinence,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_urinary_incontinence_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3206
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.011
## Pseudo-R² (McFadden) = 0.007
## AIC =   NA 
## 
## ---------------------------------------------------------------------------
##                                 exp(Est.)    2.5%   97.5%    t val.       p
## ----------------------------- ----------- ------- ------- --------- -------
## (Intercept)                         0.292   0.264   0.324   -23.550   0.000
## urinary_incontinenceyes             1.873   1.379   2.543     4.021   0.000
## ---------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_urinary_incontinence_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_urinary_incontinence_m")

# osteoporosis
uni_osteoporosis_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ osteoporosis,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_osteoporosis_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3192
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.003
## Pseudo-R² (McFadden) = 0.002
## AIC =   NA 
## 
## -------------------------------------------------------------------
##                         exp(Est.)    2.5%   97.5%    t val.       p
## --------------------- ----------- ------- ------- --------- -------
## (Intercept)                 0.305   0.277   0.337   -23.709   0.000
## osteoporosisyes             1.837   1.032   3.271     2.067   0.039
## -------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_osteoporosis_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_osteoporosis_m")

# activity
uni_activity_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ activity,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_activity_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 2987
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = -0.007
## Pseudo-R² (McFadden) = -0.004
## AIC =   NA 
## 
## ---------------------------------------------------------------------------
##                                  exp(Est.)    2.5%   97.5%   t val.       p
## ------------------------------ ----------- ------- ------- -------- -------
## (Intercept)                          0.350   0.256   0.477   -6.637   0.000
## activitypartially active             0.977   0.650   1.469   -0.112   0.911
## activityactive                       0.872   0.626   1.214   -0.813   0.416
## ---------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.005
# jtools::plot_summs(uni_activity_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_activity_m")

# alcohol
uni_alcohol_m <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ alcohol,
    design = wdat_17_m,
    family = quasibinomial(logit)
  )
jtools::summ(uni_alcohol_m,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3055
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = -0.004
## Pseudo-R² (McFadden) = -0.002
## AIC =   NA 
## 
## -----------------------------------------------------------------------------
##                                    exp(Est.)    2.5%   97.5%   t val.       p
## -------------------------------- ----------- ------- ------- -------- -------
## (Intercept)                            0.264   0.190   0.367   -7.922   0.000
## alcohollow risk                        1.214   0.858   1.717    1.095   0.274
## alcoholmoderate or increased           1.179   0.721   1.928    0.657   0.511
## risk                                                                         
## -----------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.003
# jtools::plot_summs(uni_alcohol_m, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_alcohol_m")

5.3.2 Women

# women

# education
uni_education_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ education,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_education_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3640
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.001
## Pseudo-R² (McFadden) = 0.001
## AIC =   NA 
## 
## --------------------------------------------------------------------------
##                                exp(Est.)    2.5%   97.5%    t val.       p
## ---------------------------- ----------- ------- ------- --------- -------
## (Intercept)                        0.344   0.291   0.406   -12.630   0.000
## educationupper secondary           0.990   0.808   1.214    -0.095   0.924
## education                                                                 
## educationtertiary                  0.996   0.756   1.311    -0.032   0.975
## education                                                                 
## --------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_education_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_education_f")

# language
uni_language_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ language,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_language_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3659
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.002
## Pseudo-R² (McFadden) = 0.001
## AIC =   NA 
## 
## -------------------------------------------------------------------
##                         exp(Est.)    2.5%   97.5%    t val.       p
## --------------------- ----------- ------- ------- --------- -------
## (Intercept)                 0.347   0.312   0.387   -19.127   0.000
## languagefrench              1.025   0.845   1.243     0.248   0.804
## languageitalian             0.676   0.488   0.938    -2.341   0.019
## -------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_language_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_language_f")

# urban_rural
uni_urban_rural_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ urban_rural,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_urban_rural_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3659
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = -0.000
## Pseudo-R² (McFadden) = -0.000
## AIC =   NA 
## 
## -------------------------------------------------------------------------
##                               exp(Est.)    2.5%   97.5%    t val.       p
## --------------------------- ----------- ------- ------- --------- -------
## (Intercept)                       0.342   0.308   0.380   -20.126   0.000
## urban_ruralrural area             1.013   0.836   1.228     0.136   0.891
## -------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_urban_rural_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_urban_rural_f")

# nationality
uni_nationality_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ nationality,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_nationality_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3659
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.001
## Pseudo-R² (McFadden) = 0.000
## AIC =   NA 
## 
## ------------------------------------------------------------------------
##                              exp(Est.)    2.5%   97.5%    t val.       p
## -------------------------- ----------- ------- ------- --------- -------
## (Intercept)                      0.348   0.318   0.382   -22.362   0.000
## nationalityforeigner             0.857   0.634   1.158    -1.004   0.315
## ------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_nationality_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_nationality_f")

# smoke
uni_smoke_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ smoke,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_smoke_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3659
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.002
## Pseudo-R² (McFadden) = 0.001
## AIC =   NA 
## 
## ----------------------------------------------------------------------
##                            exp(Est.)    2.5%   97.5%    t val.       p
## ------------------------ ----------- ------- ------- --------- -------
## (Intercept)                    0.336   0.300   0.377   -18.661   0.000
## smokeformer smoker             1.151   0.937   1.412     1.341   0.180
## smokesmoker                    0.880   0.680   1.140    -0.968   0.333
## ----------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_smoke_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_smoke_f")

# FL
uni_FL_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ FL,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_FL_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3650
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.015
## Pseudo-R² (McFadden) = 0.009
## AIC =   NA 
## 
## -----------------------------------------------------------------------
##                             exp(Est.)    2.5%   97.5%    t val.       p
## ------------------------- ----------- ------- ------- --------- -------
## (Intercept)                     0.300   0.271   0.333   -22.845   0.000
## FLSlight difficulty             1.515   1.208   1.901     3.589   0.000
## FLGreat difficulty              2.031   1.341   3.074     3.347   0.001
## FLInability                     2.044   1.168   3.579     2.503   0.012
## -----------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_FL_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_FL_f")

# bmi_cut
uni_bmi_cut_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ bmi_cut,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_bmi_cut_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3608
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.000
## Pseudo-R² (McFadden) = 0.000
## AIC =   NA 
## 
## ----------------------------------------------------------------------
##                            exp(Est.)    2.5%   97.5%    t val.       p
## ------------------------ ----------- ------- ------- --------- -------
## (Intercept)                    0.362   0.320   0.410   -16.050   0.000
## bmi_cutobesity                 0.928   0.711   1.212    -0.547   0.585
## bmi_cutoverweight              0.873   0.713   1.069    -1.316   0.188
## bmi_cutunderweight             0.940   0.597   1.482    -0.266   0.791
## ----------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.001
# jtools::plot_summs(uni_bmi_cut_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_bmi_cut_f")

# bmi
uni_bmi_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ bmi,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_bmi_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3608
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = -0.000
## Pseudo-R² (McFadden) = -0.000
## AIC =   NA 
## 
## --------------------------------------------------------------
##                     exp(Est.)    2.5%   97.5%   t val.       p
## ----------------- ----------- ------- ------- -------- -------
## (Intercept)             0.417   0.260   0.669   -3.628   0.000
## bmi                     0.992   0.974   1.011   -0.822   0.411
## --------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.001
# jtools::plot_summs(uni_bmi_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_bmi_f")

# age_cut
uni_age_cut_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ age_cut,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_age_cut_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3659
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.025
## Pseudo-R² (McFadden) = 0.015
## AIC =   NA 
## 
## ----------------------------------------------------------------
##                      exp(Est.)    2.5%   97.5%    t val.       p
## ------------------ ----------- ------- ------- --------- -------
## (Intercept)              0.255   0.223   0.292   -19.803   0.000
## age_cut70-79             1.417   1.159   1.731     3.406   0.001
## age_cut80+               2.201   1.742   2.781     6.616   0.000
## ----------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_age_cut_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_age_cut_f")

# age
uni_age_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ age,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_age_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3659
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.023
## Pseudo-R² (McFadden) = 0.014
## AIC =   NA 
## 
## --------------------------------------------------------------
##                     exp(Est.)    2.5%   97.5%   t val.       p
## ----------------- ----------- ------- ------- -------- -------
## (Intercept)             0.030   0.014   0.065   -8.828   0.000
## age                     1.034   1.023   1.045    6.176   0.000
## --------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.001
# jtools::plot_summs(uni_age_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_age_f")

# SHS     
uni_SHS_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ SHS,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_SHS_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3658
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.021
## Pseudo-R² (McFadden) = 0.013
## AIC =   NA 
## 
## ----------------------------------------------------------------
##                      exp(Est.)    2.5%   97.5%    t val.       p
## ------------------ ----------- ------- ------- --------- -------
## (Intercept)              0.257   0.214   0.309   -14.391   0.000
## SHSgood                  1.196   0.952   1.503     1.541   0.123
## SHSaverage               1.947   1.514   2.504     5.187   0.000
## SHSpoor                  2.228   1.413   3.512     3.449   0.001
## SHSvery poor             2.610   1.107   6.153     2.193   0.028
## ----------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.001
# jtools::plot_summs(uni_SHS_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_SHS_f")

# SHS_collapsed     
uni_SHS_collapsed_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ SHS_collapsed,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_SHS_collapsed_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3658
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.020
## Pseudo-R² (McFadden) = 0.012
## AIC =   NA 
## 
## --------------------------------------------------------------------------
##                                exp(Est.)    2.5%   97.5%    t val.       p
## ---------------------------- ----------- ------- ------- --------- -------
## (Intercept)                        0.289   0.259   0.322   -22.598   0.000
## SHS_collapsedaverage               1.734   1.417   2.122     5.344   0.000
## SHS_collapsedpoor                  1.984   1.291   3.050     3.126   0.002
## SHS_collapsedvery poor             2.325   1.000   5.409     1.959   0.050
## --------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.001
# jtools::plot_summs(uni_SHS_collapsed_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_model_SHS_m")

# diabetes
uni_diabetes_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ diabetes,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_diabetes_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3270
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.022
## Pseudo-R² (McFadden) = 0.013
## AIC =   NA 
## 
## ---------------------------------------------------------------
##                     exp(Est.)    2.5%   97.5%    t val.       p
## ----------------- ----------- ------- ------- --------- -------
## (Intercept)             0.320   0.290   0.353   -22.716   0.000
## diabetesyes             1.318   0.929   1.870     1.549   0.121
## ---------------------------------------------------------------
## 
## Estimated dispersion parameter = 0.988
# jtools::plot_summs(uni_diabetes_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_diabetes_f")

# osteoarthritis
uni_osteoarthritis_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ osteoarthritis,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_osteoarthritis_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3627
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.012
## Pseudo-R² (McFadden) = 0.007
## AIC =   NA 
## 
## ---------------------------------------------------------------------
##                           exp(Est.)    2.5%   97.5%    t val.       p
## ----------------------- ----------- ------- ------- --------- -------
## (Intercept)                   0.288   0.256   0.325   -20.201   0.000
## osteoarthritisyes             1.494   1.250   1.786     4.417   0.000
## ---------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_osteoarthritis_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_osteoarthritis_f")

# heart_attack
uni_heart_attack_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ heart_attack,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_heart_attack_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3657
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = -0.000
## Pseudo-R² (McFadden) = -0.000
## AIC =   NA 
## 
## -------------------------------------------------------------------
##                         exp(Est.)    2.5%   97.5%    t val.       p
## --------------------- ----------- ------- ------- --------- -------
## (Intercept)                 0.343   0.314   0.374   -23.751   0.000
## heart_attackyes             1.006   0.396   2.559     0.013   0.989
## -------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_heart_attack_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_heart_attack_f")

# stroke
uni_stroke_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ stroke,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_stroke_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3655
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.004
## Pseudo-R² (McFadden) = 0.003
## AIC =   NA 
## 
## ---------------------------------------------------------------
##                     exp(Est.)    2.5%   97.5%    t val.       p
## ----------------- ----------- ------- ------- --------- -------
## (Intercept)             0.339   0.310   0.370   -23.917   0.000
## strokeyes               3.155   1.345   7.398     2.642   0.008
## ---------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_stroke_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_stroke_f")

# urinary_incontinence
uni_urinary_incontinence_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ urinary_incontinence,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_urinary_incontinence_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3653
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.011
## Pseudo-R² (McFadden) = 0.006
## AIC =   NA 
## 
## ---------------------------------------------------------------------------
##                                 exp(Est.)    2.5%   97.5%    t val.       p
## ----------------------------- ----------- ------- ------- --------- -------
## (Intercept)                         0.318   0.289   0.350   -23.546   0.000
## urinary_incontinenceyes             1.753   1.361   2.259     4.344   0.000
## ---------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_urinary_incontinence_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_urinary_incontinence_f")

# osteoporosis
uni_osteoporosis_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ osteoporosis,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_osteoporosis_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3604
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.002
## Pseudo-R² (McFadden) = 0.001
## AIC =   NA 
## 
## -------------------------------------------------------------------
##                         exp(Est.)    2.5%   97.5%    t val.       p
## --------------------- ----------- ------- ------- --------- -------
## (Intercept)                 0.330   0.300   0.364   -22.477   0.000
## osteoporosisyes             1.139   0.891   1.457     1.038   0.299
## -------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1
# jtools::plot_summs(uni_osteoporosis_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_osteoporosis_f")

# activity
uni_activity_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ activity,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_activity_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3393
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.023
## Pseudo-R² (McFadden) = 0.014
## AIC =   NA 
## 
## ---------------------------------------------------------------------------
##                                  exp(Est.)    2.5%   97.5%   t val.       p
## ------------------------------ ----------- ------- ------- -------- -------
## (Intercept)                          0.438   0.349   0.549   -7.154   0.000
## activitypartially active             0.752   0.543   1.042   -1.714   0.087
## activityactive                       0.713   0.554   0.918   -2.626   0.009
## ---------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 0.989
# jtools::plot_summs(uni_activity_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_activity_f")

# alcohol
uni_alcohol_f <-
  survey::svyglm(
    I(fall=="fall last 12 months") ~ alcohol,
    design = wdat_17_f,
    family = quasibinomial(logit)
  )
jtools::summ(uni_alcohol_f,exp = TRUE, confint = TRUE, digits = 3)
## MODEL INFO:
## Observations: 3498
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.015
## Pseudo-R² (McFadden) = 0.009
## AIC =   NA 
## 
## ------------------------------------------------------------------------------
##                                    exp(Est.)    2.5%   97.5%    t val.       p
## -------------------------------- ----------- ------- ------- --------- -------
## (Intercept)                            0.359   0.295   0.437   -10.245   0.000
## alcohollow risk                        0.923   0.739   1.154    -0.701   0.484
## alcoholmoderate or increased           0.816   0.525   1.267    -0.906   0.365
## risk                                                                          
## ------------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 0.992
# jtools::plot_summs(uni_alcohol_f, exp = TRUE, colors = "Rainbow", legend.title = "unadjusted_fodel_alcohol_f")
jtools::summ(uni_FL_f, exp = TRUE, confint = TRUE, digits = 4)
## MODEL INFO:
## Observations: 3650
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.0147
## Pseudo-R² (McFadden) = 0.0088
## AIC =    NA 
## 
## ---------------------------------------------------------------------------
##                             exp(Est.)     2.5%    97.5%     t val.        p
## ------------------------- ----------- -------- -------- ---------- --------
## (Intercept)                    0.3004   0.2709   0.3330   -22.8449   0.0000
## FLSlight difficulty            1.5152   1.2075   1.9012     3.5887   0.0003
## FLGreat difficulty             2.0305   1.3411   3.0745     3.3465   0.0008
## FLInability                    2.0444   1.1678   3.5791     2.5029   0.0124
## ---------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 1.0003

5.4 Trend test for prevalence of falls

5.4.1 Men

After checking summary table, following variables get a trend test of prevalence of falls:

  • education
## CochranArmitageTest
## creating matrix for education 
camatrix_education_m <- matrix(c(0.1985768*119633, 0.2277108*441112, 0.2621775*360740, 0.8014232*119633, 0.7722892*441112, 0.7378225*360740), byrow=TRUE, nrow=2, dimnames=list(fall=0:1, education=1:3))
dimnames(camatrix_education_m) <- list(
  fall = c("yes", "no"),
  education = c("primary", "secondary", "tertiary")
)
camatrix_education_m
##      education
## fall   primary secondary  tertiary
##   yes 23756.34    100446  94577.91
##   no  95876.66    340666 266162.09
## test with CochranArmitageTest function
DescTools::CochranArmitageTest(camatrix_education_m)

    Cochran-Armitage test for trend

data:  camatrix_education_m
Z = 49.397, dim = 3, p-value < 2.2e-16
alternative hypothesis: two.sided
DescTools::CochranArmitageTest(camatrix_education_m, "increasing")

    Cochran-Armitage test for trend

data:  camatrix_education_m
Z = 49.397, dim = 3, p-value = 1
alternative hypothesis: increasing
DescTools::CochranArmitageTest(camatrix_education_m, "decreasing")

    Cochran-Armitage test for trend

data:  camatrix_education_m
Z = 49.397, dim = 3, p-value < 2.2e-16
alternative hypothesis: decreasing
## test with prop_trend_test function
rstatix::prop_trend_test(camatrix_education_m)
## # A tibble: 1 x 6
##        n statistic     p p.signif    df method               
## *  <dbl>     <dbl> <dbl> <chr>    <dbl> <chr>                
## 1 921485     2440.     0 ****         1 Chi-square trend test
## test with prop.trend.test function
fallers_education_m <- c(0.1985768*119633, 0.2277108*441112, 0.2621775*360740)
nofallers_education_m <- c( 0.8014232*119633, 0.7722892*441112, 0.7378225*360740)
prop.trend.test(fallers_education_m, nofallers_education_m)

    Chi-squared Test for Trend in Proportions

data:  fallers_education_m out of nofallers_education_m ,
 using scores: 1 2 3
X-squared = 4609.3, df = 1, p-value < 2.2e-16
  • age_cut
## CochranArmitageTest
## creating matrix for age_cut 
camatrix_age_cut_m <- matrix(c(451660.1*0.2172215,329497.6*0.2402362, 143722.4*0.2899578, 0.7827785*451660.1, 0.7597638*329497.6, 0.7100422*143722.4), byrow=TRUE, nrow=2, dimnames=list(fall=0:1, age_cut=1:3))
dimnames(camatrix_age_cut_m) <- list(
  fall = c("yes", "no"),
  age_cut = c("60-69", "70-79", "80+")
)
camatrix_age_cut_m
##      age_cut
## fall      60-69     70-79       80+
##   yes  98110.28  79157.25  41673.43
##   no  353549.82 250340.35 102048.97
## test with CochranArmitageTest function
DescTools::CochranArmitageTest(camatrix_age_cut_m)

    Cochran-Armitage test for trend

data:  camatrix_age_cut_m
Z = 55.156, dim = 3, p-value < 2.2e-16
alternative hypothesis: two.sided
DescTools::CochranArmitageTest(camatrix_age_cut_m, "increasing")

    Cochran-Armitage test for trend

data:  camatrix_age_cut_m
Z = 55.156, dim = 3, p-value = 1
alternative hypothesis: increasing
DescTools::CochranArmitageTest(camatrix_age_cut_m, "decreasing")

    Cochran-Armitage test for trend

data:  camatrix_age_cut_m
Z = 55.156, dim = 3, p-value < 2.2e-16
alternative hypothesis: decreasing
  • SHS
## CochranArmitageTest
## creating matrix for SHS 
camatrix_SHS_m <- matrix(c(247212*0.220138, 441164*0.2346568, 174931*0.2463606, 46282*0.2947983, 13664*0.3119853, 0.779862*247212, 0.7653432*441164, 0.7536394*174931, 0.7052017*46282, 0.6880147*13664), byrow=TRUE, nrow=2, dimnames=list(fall=0:1, SHS=1:5))
dimnames(camatrix_SHS_m) <- list(
  fall = c("yes", "no"),
  SHS = c("very good", "good", "average", "poor", "very poor")
)
camatrix_SHS_m
##      SHS
## fall  very good     good   average     poor very poor
##   yes  54420.76 103522.1  43096.11 13643.85  4262.967
##   no  192791.24 337641.9 131834.89 32638.15  9401.033
## test with CochranArmitageTest function
DescTools::CochranArmitageTest(camatrix_SHS_m)

    Cochran-Armitage test for trend

data:  camatrix_SHS_m
Z = 39.235, dim = 5, p-value < 2.2e-16
alternative hypothesis: two.sided
DescTools::CochranArmitageTest(camatrix_SHS_m, "increasing")

    Cochran-Armitage test for trend

data:  camatrix_SHS_m
Z = 39.235, dim = 5, p-value = 1
alternative hypothesis: increasing
DescTools::CochranArmitageTest(camatrix_SHS_m, "decreasing")

    Cochran-Armitage test for trend

data:  camatrix_SHS_m
Z = 39.235, dim = 5, p-value < 2.2e-16
alternative hypothesis: decreasing

5.4.2 Women

After checking summary table, following variables get a trend-test of prevalence of falls:

  • FL
## CochranArmitageTest
## creating matrix for FL 
camatrix_FL_f <- matrix(c(802495*0.2310017, 185432*0.3127858, 40791*0.3788652, 25971*0.3804728, 802495*0.7689983, 185432*0.6872142, 40791*0.6211348, 25971*0.6195272), byrow=TRUE, nrow=2, dimnames=list(fall=0:1, FL=1:4))
dimnames(camatrix_FL_f) <- list(
  fall = c("yes", "no"),
  FL = c("no difficulties", "slight difficulties", "great difficulties", "inability")
)
camatrix_FL_f
##      FL
## fall  no difficulties slight difficulties great difficulties inability
##   yes        185377.7             58000.5           15454.29  9881.259
##   no         617117.3            127431.5           25336.71 16089.741
## test with CochranArmitageTest function
DescTools::CochranArmitageTest(camatrix_FL_f)

    Cochran-Armitage test for trend

data:  camatrix_FL_f
Z = 102.73, dim = 4, p-value < 2.2e-16
alternative hypothesis: two.sided
DescTools::CochranArmitageTest(camatrix_FL_f, "increasing")

    Cochran-Armitage test for trend

data:  camatrix_FL_f
Z = 102.73, dim = 4, p-value = 1
alternative hypothesis: increasing
DescTools::CochranArmitageTest(camatrix_FL_f, "decreasing")

    Cochran-Armitage test for trend

data:  camatrix_FL_f
Z = 102.73, dim = 4, p-value < 2.2e-16
alternative hypothesis: decreasing
  • age_cut
## CochranArmitageTest
## creating matrix for age_cut 
camatrix_age_cut_f <- matrix(c(480788*0.2031848, 371311*0.2653584, 205226*0.3595031, 480788*0.7968152, 371311*0.7346416, 205226*0.6404969), byrow=TRUE, nrow=2, dimnames=list(fall=0:1, age_cut=1:3))
dimnames(camatrix_age_cut_f) <- list(
  fall = c("yes", "no"),
  age_cut = c("60-69", "70-79", "80+")
)
camatrix_age_cut_f
##      age_cut
## fall      60-69     70-79       80+
##   yes  97688.81  98530.49  73779.38
##   no  383099.19 272780.51 131446.62
## test with CochranArmitageTest function
DescTools::CochranArmitageTest(camatrix_age_cut_f)

    Cochran-Armitage test for trend

data:  camatrix_age_cut_f
Z = 135.94, dim = 3, p-value < 2.2e-16
alternative hypothesis: two.sided
DescTools::CochranArmitageTest(camatrix_age_cut_f, "increasing")

    Cochran-Armitage test for trend

data:  camatrix_age_cut_f
Z = 135.94, dim = 3, p-value = 1
alternative hypothesis: increasing
DescTools::CochranArmitageTest(camatrix_age_cut_f, "decreasing")

    Cochran-Armitage test for trend

data:  camatrix_age_cut_f
Z = 135.94, dim = 3, p-value < 2.2e-16
alternative hypothesis: decreasing
  • SHS
## CochranArmitageTest
## creating matrix for SHS 
camatrix_SHS_f <- matrix(c(281898*0.204541, 488526*0.2352557, 235279*0.3336065, 44700*0.3642046, 6819*0.4016408, 281898*0.795459, 488526*0.7647443, 235279*0.6663935, 44700*0.6357954, 6819*0.5983592), byrow=TRUE, nrow=2, dimnames=list(fall=0:1, SHS=1:5))
dimnames(camatrix_SHS_f) <- list(
  fall = c("yes", "no"),
  SHS = c("very good", "good", "average", "poor", "very poor")
)
camatrix_SHS_f
##      SHS
## fall  very good     good  average     poor very poor
##   yes   57659.7 114928.5  78490.6 16279.95  2738.789
##   no   224238.3 373597.5 156788.4 28420.05  4080.211
## test with CochranArmitageTest function
DescTools::CochranArmitageTest(camatrix_SHS_f)

    Cochran-Armitage test for trend

data:  camatrix_SHS_f
Z = 120.05, dim = 5, p-value < 2.2e-16
alternative hypothesis: two.sided
DescTools::CochranArmitageTest(camatrix_SHS_f, "increasing")

    Cochran-Armitage test for trend

data:  camatrix_SHS_f
Z = 120.05, dim = 5, p-value = 1
alternative hypothesis: increasing
DescTools::CochranArmitageTest(camatrix_SHS_f, "decreasing")

    Cochran-Armitage test for trend

data:  camatrix_SHS_f
Z = 120.05, dim = 5, p-value < 2.2e-16
alternative hypothesis: decreasing

5.5 Multivariate models, model integration by covariate groups

Multivariate logistic regression models were calculated for both men and women, characterised by the agglomerative inclusion of the socio-demographic, biological and behavioural covariate groups. In this way, three regression models result per gender.

5.5.1 Men

  • socio_economic_covariate & socio_demographic_covariate:
Model_socio_economic_socio_demographic_1_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language, 
               design = wdat_17_m,
               family = quasibinomial(logit))
Model_socio_economic_socio_demographic_1_ma<- jtools::summ(Model_socio_economic_socio_demographic_1_m,exp = TRUE, vifs = TRUE, confint = TRUE, digits = 6)
Model_socio_economic_socio_demographic_1_ma
## MODEL INFO:
## Observations: 3201
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.011211
## Pseudo-R² (McFadden) = 0.006836
## AIC =      NA 
## 
## ------------------------------------------------------------------------------------------------
##                                exp(Est.)       2.5%      97.5%      t val.          p        VIF
## ---------------------------- ----------- ---------- ---------- ----------- ---------- ----------
## (Intercept)                     0.294871   0.212749   0.408694   -7.332554   0.000000           
## educationupper secondary        1.042592   0.751690   1.446073    0.249893   0.802686   1.162608
## education                                                                                       
## educationtertiary               1.260577   0.900159   1.765304    1.347773   0.177828   1.162608
## education                                                                                       
## urban_ruralrural area           1.068080   0.867743   1.314669    0.621444   0.534352   1.017359
## nationalityforeigner            0.631289   0.456083   0.873800   -2.773302   0.005582   1.152385
## languagefrench                  0.952702   0.764280   1.187577   -0.430944   0.666539   1.013671
## languageitalian                 0.767277   0.523550   1.124466   -1.358420   0.174427   1.013671
## ------------------------------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 0.999636
  • socio_economic_covariate & socio_demographic_covariate & biological_covariates:
  • SHS-Variable factor: “very good and good” get combined
Model_socio_economic_socio_demographic_biological_1_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis, 
               design = wdat_17_m,
               family = quasibinomial(logit))
Model_socio_economic_socio_demographic_biological_1_ma<- jtools::summ(Model_socio_economic_socio_demographic_biological_1_m,exp = TRUE, vifs = TRUE, confint = TRUE, digits = 6)
Model_socio_economic_socio_demographic_biological_1_ma
## MODEL INFO:
## Observations: 2828
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.042516
## Pseudo-R² (McFadden) = 0.026209
## AIC =      NA 
## 
## -------------------------------------------------------------------------------------------------
##                                 exp(Est.)       2.5%      97.5%      t val.          p        VIF
## ----------------------------- ----------- ---------- ---------- ----------- ---------- ----------
## (Intercept)                      0.199805   0.128419   0.310873   -7.140391   0.000000           
## educationupper secondary         1.136667   0.780902   1.654513    0.668801   0.503678   1.233670
## education                                                                                        
## educationtertiary                1.362527   0.923694   2.009843    1.559746   0.118934   1.233670
## education                                                                                        
## urban_ruralrural area            1.123140   0.897690   1.405211    1.015840   0.309794   1.029986
## nationalityforeigner             0.645481   0.448115   0.929772   -2.351028   0.018791   1.192418
## languagefrench                   0.852573   0.668861   1.086746   -1.288123   0.197810   1.059940
## languageitalian                  0.710992   0.467573   1.081137   -1.595134   0.110796   1.059940
## age_cut70-79                     1.060741   0.842915   1.334857    0.502808   0.615139   1.113286
## age_cut80+                       1.393211   1.028964   1.886398    2.144622   0.032070   1.113286
## FLSlight difficulty              1.064687   0.815822   1.389468    0.461434   0.644523   1.194495
## FLGreat difficulty               2.308789   1.181437   4.511883    2.447713   0.014438   1.194495
## FLInability                      1.271891   0.523131   3.092351    0.530578   0.595753   1.194495
## bmi_cutobesity                   1.179584   0.860098   1.617746    1.024821   0.305537   1.138953
## bmi_cutoverweight                1.081343   0.858068   1.362716    0.662746   0.507548   1.138953
## bmi_cutunderweight               1.522016   0.431365   5.370237    0.652944   0.513846   1.138953
## SHS_collapsedaverage             0.942092   0.711960   1.246609   -0.417443   0.676387   1.377553
## SHS_collapsedpoor                0.876788   0.522881   1.470233   -0.498569   0.618123   1.377553
## SHS_collapsedvery poor           1.067305   0.464738   2.451143    0.153551   0.877975   1.377553
## diabetesyes                      1.197038   0.880426   1.627507    1.147462   0.251289   1.098968
## osteoarthritisyes                1.299990   1.023252   1.651572    2.148173   0.031786   1.084873
## heart_attackyes                  1.536092   0.673878   3.501495    1.021057   0.307316   1.036031
## strokeyes                        1.548223   0.514002   4.663397    0.776971   0.437242   1.069099
## urinary_incontinenceyes          1.689601   1.184689   2.409707    2.895634   0.003813   1.102968
## osteoporosisyes                  1.739026   0.971133   3.114103    1.861426   0.062790   1.058181
## -------------------------------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 0.997454
  • socio_economic_covariate & socio_demographic_covariate & biological_covariates & behavioral_covariate:
Model_socio_economic_socio_demographic_biological_behavioral_1_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke, 
               design = wdat_17_m,
               family = quasibinomial(logit))
Model_socio_economic_socio_demographic_biological_behavioral_1_ma<- jtools::summ(Model_socio_economic_socio_demographic_biological_behavioral_1_m,exp = TRUE, vifs = TRUE, confint = TRUE, digits = 6)
Model_socio_economic_socio_demographic_biological_behavioral_1_ma
## MODEL INFO:
## Observations: 2768
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.042970
## Pseudo-R² (McFadden) = 0.026494
## AIC =      NA 
## 
## ----------------------------------------------------------------------------------------------------
##                                    exp(Est.)       2.5%      97.5%      t val.          p        VIF
## -------------------------------- ----------- ---------- ---------- ----------- ---------- ----------
## (Intercept)                         0.158913   0.080449   0.313906   -5.295964   0.000000           
## educationupper secondary            1.174047   0.798276   1.726704    0.815250   0.415001   1.269988
## education                                                                                           
## educationtertiary                   1.386633   0.930822   2.065649    1.607437   0.108075   1.269988
## education                                                                                           
## urban_ruralrural area               1.114032   0.887463   1.398446    0.930836   0.352021   1.039235
## nationalityforeigner                0.681316   0.471351   0.984810   -2.041393   0.041308   1.249889
## languagefrench                      0.840052   0.656178   1.075451   -1.382841   0.166827   1.083117
## languageitalian                     0.698974   0.458844   1.064772   -1.667714   0.095488   1.083117
## age_cut70-79                        1.036558   0.818032   1.313461    0.297240   0.766306   1.242023
## age_cut80+                          1.351552   0.984185   1.856047    1.861461   0.062787   1.242023
## FLSlight difficulty                 1.073057   0.818427   1.406907    0.510184   0.609964   1.252043
## FLGreat difficulty                  2.338672   1.183314   4.622094    2.444209   0.014580   1.252043
## FLInability                         1.239215   0.505666   3.036894    0.468975   0.639125   1.252043
## bmi_cutobesity                      1.137540   0.824992   1.568496    0.786233   0.431800   1.188105
## bmi_cutoverweight                   1.060622   0.837726   1.342826    0.488960   0.624909   1.188105
## bmi_cutunderweight                  1.501284   0.403750   5.582306    0.606400   0.544300   1.188105
## SHS_collapsedaverage                0.924504   0.694210   1.231197   -0.537036   0.591287   1.514232
## SHS_collapsedpoor                   0.903522   0.528076   1.545897   -0.370254   0.711222   1.514232
## SHS_collapsedvery poor              1.079794   0.463211   2.517116    0.177786   0.858904   1.514232
## diabetesyes                         1.162885   0.849664   1.591572    0.942478   0.346032   1.114410
## osteoarthritisyes                   1.289375   1.010250   1.645621    2.041890   0.041259   1.101873
## heart_attackyes                     1.595019   0.691984   3.676510    1.095801   0.273263   1.037301
## strokeyes                           1.691612   0.554417   5.161371    0.923620   0.355766   1.064558
## urinary_incontinenceyes             1.713025   1.194064   2.457536    2.923182   0.003493   1.114426
## osteoporosisyes                     1.920661   1.072780   3.438673    2.196383   0.028149   1.078834
## activitypartially active            1.186220   0.760831   1.849449    0.753645   0.451128   1.301776
## activityactive                      0.970302   0.660305   1.425835   -0.153517   0.878002   1.301776
## alcohollow risk                     1.202038   0.817038   1.768455    0.934164   0.350302   1.224839
## alcoholmoderate or increased        1.355957   0.795630   2.310898    1.119474   0.263037   1.224839
## risk                                                                                                
## smokeformer smoker                  1.130223   0.888919   1.437031    0.999018   0.317875   1.182758
## smokesmoker                         1.042427   0.772414   1.406829    0.271660   0.785904   1.182758
## ----------------------------------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 0.997324

5.5.1.1 Model comparison male

export_summs(Model_socio_economic_socio_demographic_1_m, Model_socio_economic_socio_demographic_biological_1_m, Model_socio_economic_socio_demographic_biological_behavioral_1_m, coefs = c("Secondary education" = "educationupper secondary education", "Tertiary education" = "educationtertiary education", "Rural area" = "urban_rural", "Foreigner" = "nationality", "French" = "languagefrench", "Italian" = "languageitalian", "70-79" = "age_cut70-79", "80+" = "age_cut80+", "Slight difficulty (FL)" = "FLSlight difficulty", "Great difficulty (FL)" = "FLGreat difficulty", "Inability (FL)" = "FLInability", "Obesity" = "bmi_cutobesity", "Overweight" = "bmi_cutoverweight", "Underweight" = "bmi_cutunderweight", "Average (SHS)" = "SHS_collapsedaverage", "Poor (SHS)" = "SHS_collapsedpoor", "Very poor (SHS)" = "SHS_collapsedvery poor", "Diabetes" = "diabetes", "Osteoarthritis" = "osteoarthritis", "Heart attack" = "heart_attack", "Stroke" = "stroke", "Urinary incontinence" = "urinary_incontinence", "Osteoporosis" = "osteoporosis", "Partially active" = "activitypartially active", "Active" = "activityactive", "Alcohol low risk" = "alcohollow risk", "Alcohol moderate/increased risk" = "alcoholmoderate or increased risk", "Former smoker" = "smokeformer smoker", "Smoker" = "smokesmoker"), exp = TRUE, scale = TRUE, error_format = "({conf.low}-{conf.high})", to.file = "docx", file.name = "Multivariate_1-3_male.docx")
Model 1Model 2Model 3
Secondary education1.04   1.14   1.17   
(0.75-1.45)  (0.78-1.65)  (0.80-1.73)  
Tertiary education1.26   1.36   1.39   
(0.90-1.77)  (0.92-2.01)  (0.93-2.07)  
Rural area1.07   1.12   1.11   
(0.87-1.31)  (0.90-1.41)  (0.89-1.40)  
Foreigner0.63 **0.65 * 0.68 * 
(0.46-0.87)  (0.45-0.93)  (0.47-0.98)  
French0.95   0.85   0.84   
(0.76-1.19)  (0.67-1.09)  (0.66-1.08)  
Italian0.77   0.71   0.70   
(0.52-1.12)  (0.47-1.08)  (0.46-1.06)  
70-79      1.06   1.04   
      (0.84-1.33)  (0.82-1.31)  
80+      1.39 * 1.35   
      (1.03-1.89)  (0.98-1.86)  
Slight difficulty (FL)      1.06   1.07   
      (0.82-1.39)  (0.82-1.41)  
Great difficulty (FL)      2.31 * 2.34 * 
      (1.18-4.51)  (1.18-4.62)  
Inability (FL)      1.27   1.24   
      (0.52-3.09)  (0.51-3.04)  
Obesity      1.18   1.14   
      (0.86-1.62)  (0.82-1.57)  
Overweight      1.08   1.06   
      (0.86-1.36)  (0.84-1.34)  
Underweight      1.52   1.50   
      (0.43-5.37)  (0.40-5.58)  
Average (SHS)      0.94   0.92   
      (0.71-1.25)  (0.69-1.23)  
Poor (SHS)      0.88   0.90   
      (0.52-1.47)  (0.53-1.55)  
Very poor (SHS)      1.07   1.08   
      (0.46-2.45)  (0.46-2.52)  
Diabetes      1.20   1.16   
      (0.88-1.63)  (0.85-1.59)  
Osteoarthritis      1.30 * 1.29 * 
      (1.02-1.65)  (1.01-1.65)  
Heart attack      1.54   1.60   
      (0.67-3.50)  (0.69-3.68)  
Stroke      1.55   1.69   
      (0.51-4.66)  (0.55-5.16)  
Urinary incontinence      1.69 **1.71 **
      (1.18-2.41)  (1.19-2.46)  
Osteoporosis      1.74   1.92 * 
      (0.97-3.11)  (1.07-3.44)  
Partially active            1.19   
            (0.76-1.85)  
Active            0.97   
            (0.66-1.43)  
Alcohol low risk            1.20   
            (0.82-1.77)  
Alcohol moderate/increased risk            1.36   
            (0.80-2.31)  
Former smoker            1.13   
            (0.89-1.44)  
Smoker            1.04   
            (0.77-1.41)  
N3201      2828      2768      
R2                  
All continuous predictors are mean-centered and scaled by 1 standard deviation. *** p < 0.001; ** p < 0.01; * p < 0.05.
publication_layout=theme_bw()+
theme(panel.grid.major=element_blank(),
    panel.grid.minor=element_blank(),
    panel.border=element_blank(),
    axis.line=element_line(),
    text=element_text(family='Times New Roman'),
    legend.title=element_blank(), 
    axis.text=element_text(size=10),
    axis.title=element_text(size=12),
    legend.text = element_text(size = 12))


plot_summs(Model_socio_economic_socio_demographic_1_m, Model_socio_economic_socio_demographic_biological_1_m, Model_socio_economic_socio_demographic_biological_behavioral_1_m, coefs = c("Secondary education" = "educationupper secondary education", "Tertiary education" = "educationtertiary education", "Rural area" = "urban_rural", "Foreigner" = "nationality", "French" = "languagefrench", "Italian" = "languageitalian", "70-79" = "age_cut70-79", "80+" = "age_cut80+", "Slight difficulty (FL)" = "FLSlight difficulty", "Great difficulty (FL)" = "FLGreat difficulty", "Inability (FL)" = "FLInability", "Obesity" = "bmi_cutobesity", "Overweight" = "bmi_cutoverweight", "Underweight" = "bmi_cutunderweight", "Average (SHS)" = "SHS_collapsedaverage", "Poor (SHS)" = "SHS_collapsedpoor", "Very poor (SHS)" = "SHS_collapsedvery poor", "Diabetes" = "diabetes", "Osteoarthritis" = "osteoarthritis", "Heart attack" = "heart_attack", "Stroke" = "stroke", "Urinary incontinence" = "urinary_incontinence", "Osteoporosis" = "osteoporosis", "Partially active" = "activitypartially active", "Active" = "activityactive", "Alcohol low risk" = "alcohollow risk", "Alcohol moderate/increased risk" = "alcoholmoderate or increased risk", "Former smoker" = "smokeformer smoker", "Smoker" = "smokesmoker"), scale = TRUE, plot.distributions = FALSE, exp = TRUE) + coord_cartesian(xlim = c(0, NA)) + scale_x_continuous(breaks = c(0.1, 0.2, 0.5, 1, 2, 5, 10), limits=c(0.1, 10)) + coord_trans(x="log10") + publication_layout + labs(x = "\n aOR \n ", y = NULL)

5.5.2 Women

  • socio_economic_covariate & socio_demographic_covariate:
Model_socio_economic_socio_demographic_1_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language, 
               design = wdat_17_f,
               family = quasibinomial(logit))
Model_socio_economic_socio_demographic_1_fa<- jtools::summ(Model_socio_economic_socio_demographic_1_f,exp = TRUE, vifs = TRUE, confint = TRUE, digits = 6)
Model_socio_economic_socio_demographic_1_fa
## MODEL INFO:
## Observations: 3640
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.003353
## Pseudo-R² (McFadden) = 0.002007
## AIC =      NA 
## 
## ------------------------------------------------------------------------------------------------
##                                exp(Est.)       2.5%      97.5%      t val.          p        VIF
## ---------------------------- ----------- ---------- ---------- ----------- ---------- ----------
## (Intercept)                     0.361929   0.293195   0.446775   -9.457973   0.000000           
## educationupper secondary        0.963205   0.778560   1.191641   -0.345255   0.729923   1.121088
## education                                                                                       
## educationtertiary               0.973588   0.735943   1.287971   -0.187476   0.851298   1.121088
## education                                                                                       
## urban_ruralrural area           0.994207   0.816429   1.210696   -0.057802   0.953910   1.055647
## nationalityforeigner            0.854778   0.623665   1.171534   -0.975627   0.329315   1.078425
## languagefrench                  1.013741   0.833640   1.232753    0.136754   0.891233   1.036373
## languageitalian                 0.683901   0.492011   0.950629   -2.261305   0.023800   1.036373
## ------------------------------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 0.999914
  • socio_economic_covariate & socio_demographic_covariate & biological_covariates:
  • SHS-Variable factor: “very good and good” get combined
Model_socio_economic_socio_demographic_biological_1_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis, 
               design = wdat_17_f,
               family = quasibinomial(logit))
Model_socio_economic_socio_demographic_biological_1_fa<- jtools::summ(Model_socio_economic_socio_demographic_biological_1_f,exp = TRUE, vifs = TRUE, confint = TRUE, digits = 6)
Model_socio_economic_socio_demographic_biological_1_fa
## MODEL INFO:
## Observations: 3156
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.082383
## Pseudo-R² (McFadden) = 0.051194
## AIC =      NA 
## 
## ---------------------------------------------------------------------------------------------------
##                                 exp(Est.)       2.5%       97.5%       t val.          p        VIF
## ----------------------------- ----------- ---------- ----------- ------------ ---------- ----------
## (Intercept)                      0.167475   0.123007    0.228019   -11.349129   0.000000           
## educationupper secondary         1.202547   0.942648    1.534103     1.484568   0.137760   1.216235
## education                                                                                          
## educationtertiary                1.362430   0.981175    1.891828     1.846499   0.064915   1.216235
## education                                                                                          
## urban_ruralrural area            1.198368   0.964181    1.489436     1.631167   0.102956   1.054207
## nationalityforeigner             0.942866   0.638679    1.391929    -0.296024   0.767232   1.100032
## languagefrench                   0.920950   0.735912    1.152513    -0.719602   0.471824   1.107236
## languageitalian                  0.592316   0.415361    0.844657    -2.892334   0.003850   1.107236
## age_cut70-79                     1.380904   1.106771    1.722936     2.858472   0.004285   1.152481
## age_cut80+                       2.098496   1.577972    2.790725     5.095987   0.000000   1.152481
## FLSlight difficulty              1.187261   0.912234    1.545207     1.276719   0.201797   1.398322
## FLGreat difficulty               1.477915   0.851459    2.565284     1.388420   0.165109   1.398322
## FLInability                      0.934081   0.405688    2.150689    -0.160260   0.872687   1.398322
## bmi_cutobesity                   0.801148   0.581248    1.104242    -1.354269   0.175749   1.266738
## bmi_cutoverweight                0.809819   0.641510    1.022285    -1.774548   0.076070   1.266738
## bmi_cutunderweight               0.958735   0.573927    1.601550    -0.160967   0.872130   1.266738
## SHS_collapsedaverage             1.434019   1.111861    1.849520     2.776745   0.005524   1.482412
## SHS_collapsedpoor                1.527280   0.894295    2.608295     1.550840   0.121042   1.482412
## SHS_collapsedvery poor           1.882548   0.646359    5.483005     1.159863   0.246194   1.482412
## diabetesyes                      1.087878   0.738837    1.601813     0.426681   0.669641   1.134409
## osteoarthritisyes                1.460976   1.185806    1.800001     3.560591   0.000376   1.143368
## heart_attackyes                  0.479147   0.130169    1.763727    -1.106557   0.268571   1.084565
## strokeyes                        3.274561   0.861884   12.441064     1.741718   0.081657   1.038618
## urinary_incontinenceyes          1.236390   0.910831    1.678313     1.360942   0.173631   1.129313
## osteoporosisyes                  0.803351   0.606177    1.064663    -1.523891   0.127638   1.095982
## ---------------------------------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 0.983845
  • socio_economic_covariate & socio_demographic_covariate & biological_covariates & behavioral_covariate:
Model_socio_economic_socio_demographic_biological_behavioral_1_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke, 
               design = wdat_17_f,
               family = quasibinomial(logit))
Model_socio_economic_socio_demographic_biological_behavioral_1_fa<- jtools::summ(Model_socio_economic_socio_demographic_biological_behavioral_1_f,exp = TRUE, vifs = TRUE, confint = TRUE, digits = 6)
Model_socio_economic_socio_demographic_biological_behavioral_1_fa
## MODEL INFO:
## Observations: 3065
## Dependent Variable: I(fall == "fall last 12 months")
## Type: Analysis of complex survey design 
##  Family: quasibinomial 
##  Link function: logit 
## 
## MODEL FIT:
## Pseudo-R² (Cragg-Uhler) = 0.091564
## Pseudo-R² (McFadden) = 0.057122
## AIC =      NA 
## 
## -----------------------------------------------------------------------------------------------------
##                                    exp(Est.)       2.5%       97.5%      t val.          p        VIF
## -------------------------------- ----------- ---------- ----------- ----------- ---------- ----------
## (Intercept)                         0.163618   0.101916    0.262677   -7.494836   0.000000           
## educationupper secondary            1.234831   0.961700    1.585534    1.653778   0.098277   1.258383
## education                                                                                            
## educationtertiary                   1.385087   0.986703    1.944318    1.882607   0.059850   1.258383
## education                                                                                            
## urban_ruralrural area               1.192011   0.953765    1.489769    1.543871   0.122725   1.075028
## nationalityforeigner                0.977425   0.664534    1.437637   -0.115992   0.907666   1.103011
## languagefrench                      0.934645   0.743847    1.174383   -0.580174   0.561841   1.137404
## languageitalian                     0.611793   0.426773    0.877026   -2.674083   0.007534   1.137404
## age_cut70-79                        1.383365   1.102491    1.735794    2.802623   0.005101   1.276296
## age_cut80+                          2.142949   1.586329    2.894880    4.966913   0.000001   1.276296
## FLSlight difficulty                 1.172889   0.895107    1.536878    1.156404   0.247608   1.483496
## FLGreat difficulty                  1.303189   0.734267    2.312920    0.904706   0.365693   1.483496
## FLInability                         0.920788   0.392071    2.162493   -0.189446   0.849756   1.483496
## bmi_cutobesity                      0.756321   0.543548    1.052386   -1.657026   0.097619   1.319778
## bmi_cutoverweight                   0.819288   0.646719    1.037905   -1.651667   0.098707   1.319778
## bmi_cutunderweight                  0.856635   0.506354    1.449231   -0.576845   0.564088   1.319778
## SHS_collapsedaverage                1.448427   1.115040    1.881493    2.775836   0.005540   1.530794
## SHS_collapsedpoor                   1.583383   0.925745    2.708198    1.678208   0.093410   1.530794
## SHS_collapsedvery poor              1.903134   0.649625    5.575395    1.173398   0.240729   1.530794
## diabetesyes                         1.030284   0.694861    1.527624    0.148460   0.881989   1.146133
## osteoarthritisyes                   1.461684   1.183817    1.804773    3.528566   0.000424   1.140394
## heart_attackyes                     0.488241   0.128345    1.857337   -1.051717   0.293014   1.112289
## strokeyes                           3.500293   0.798676   15.340455    1.661787   0.096660   1.065701
## urinary_incontinenceyes             1.250249   0.920242    1.698601    1.428380   0.153286   1.137360
## osteoporosisyes                     0.794171   0.596006    1.058224   -1.573555   0.115695   1.106902
## activitypartially active            0.870268   0.601316    1.259514   -0.736704   0.461360   1.345886
## activityactive                      0.887059   0.649162    1.212138   -0.752298   0.451931   1.345886
## alcohollow risk                     1.034832   0.800311    1.338077    0.261127   0.794012   1.172462
## alcoholmoderate or increased        0.787736   0.471645    1.315667   -0.911678   0.362011   1.172462
## risk                                                                                                 
## smokeformer smoker                  1.378179   1.089051    1.744067    2.670061   0.007625   1.153834
## smokesmoker                         1.043433   0.767888    1.417855    0.271765   0.785821   1.153834
## -----------------------------------------------------------------------------------------------------
## 
## Estimated dispersion parameter = 0.982569

5.5.2.1 Model comparison women

export_summs(Model_socio_economic_socio_demographic_1_f, Model_socio_economic_socio_demographic_biological_1_f, Model_socio_economic_socio_demographic_biological_behavioral_1_f, coefs = c("Secondary education" = "educationupper secondary education", "Tertiary education" = "educationtertiary education", "Rural area" = "urban_rural", "Foreigner" = "nationality", "French" = "languagefrench", "Italian" = "languageitalian", "70-79" = "age_cut70-79", "80+" = "age_cut80+", "Slight difficulty (FL)" = "FLSlight difficulty", "Great difficulty (FL)" = "FLGreat difficulty", "Inability (FL)" = "FLInability", "Obesity" = "bmi_cutobesity", "Overweight" = "bmi_cutoverweight", "Underweight" = "bmi_cutunderweight", "Average (SHS)" = "SHS_collapsedaverage", "Poor (SHS)" = "SHS_collapsedpoor", "Very poor (SHS)" = "SHS_collapsedvery poor", "Diabetes" = "diabetes", "Osteoarthritis" = "osteoarthritis", "Heart attack" = "heart_attack", "Stroke" = "stroke", "Urinary incontinence" = "urinary_incontinence", "Osteoporosis" = "osteoporosis", "Partially active" = "activitypartially active", "Active" = "activityactive", "Alcohol low risk" = "alcohollow risk", "Alcohol moderate/increased risk" = "alcoholmoderate or increased risk", "Former smoker" = "smokeformer smoker", "Smoker" = "smokesmoker"), exp = TRUE, scale = TRUE, error_format = "({conf.low}-{conf.high})", to.file = "docx", file.name = "Multivariate_1-3_female.docx")
Model 1Model 2Model 3
Secondary education0.96  1.20    1.23    
(0.78-1.19) (0.94-1.53)   (0.96-1.59)   
Tertiary education0.97  1.36    1.39    
(0.74-1.29) (0.98-1.89)   (0.99-1.94)   
Rural area0.99  1.20    1.19    
(0.82-1.21) (0.96-1.49)   (0.95-1.49)   
Foreigner0.85  0.94    0.98    
(0.62-1.17) (0.64-1.39)   (0.66-1.44)   
French1.01  0.92    0.93    
(0.83-1.23) (0.74-1.15)   (0.74-1.17)   
Italian0.68 *0.59 ** 0.61 ** 
(0.49-0.95) (0.42-0.84)   (0.43-0.88)   
70-79     1.38 ** 1.38 ** 
     (1.11-1.72)   (1.10-1.74)   
80+     2.10 ***2.14 ***
     (1.58-2.79)   (1.59-2.89)   
Slight difficulty (FL)     1.19    1.17    
     (0.91-1.55)   (0.90-1.54)   
Great difficulty (FL)     1.48    1.30    
     (0.85-2.57)   (0.73-2.31)   
Inability (FL)     0.93    0.92    
     (0.41-2.15)   (0.39-2.16)   
Obesity     0.80    0.76    
     (0.58-1.10)   (0.54-1.05)   
Overweight     0.81    0.82    
     (0.64-1.02)   (0.65-1.04)   
Underweight     0.96    0.86    
     (0.57-1.60)   (0.51-1.45)   
Average (SHS)     1.43 ** 1.45 ** 
     (1.11-1.85)   (1.12-1.88)   
Poor (SHS)     1.53    1.58    
     (0.89-2.61)   (0.93-2.71)   
Very poor (SHS)     1.88    1.90    
     (0.65-5.48)   (0.65-5.58)   
Diabetes     1.09    1.03    
     (0.74-1.60)   (0.69-1.53)   
Osteoarthritis     1.46 ***1.46 ***
     (1.19-1.80)   (1.18-1.80)   
Heart attack     0.48    0.49    
     (0.13-1.76)   (0.13-1.86)   
Stroke     3.27    3.50    
     (0.86-12.44)   (0.80-15.34)   
Urinary incontinence     1.24    1.25    
     (0.91-1.68)   (0.92-1.70)   
Osteoporosis     0.80    0.79    
     (0.61-1.06)   (0.60-1.06)   
Partially active            0.87    
            (0.60-1.26)   
Active            0.89    
            (0.65-1.21)   
Alcohol low risk            1.03    
            (0.80-1.34)   
Alcohol moderate/increased risk            0.79    
            (0.47-1.32)   
Former smoker            1.38 ** 
            (1.09-1.74)   
Smoker            1.04    
            (0.77-1.42)   
N3640     3156       3065       
R2                   
All continuous predictors are mean-centered and scaled by 1 standard deviation. *** p < 0.001; ** p < 0.01; * p < 0.05.
plot_summs(Model_socio_economic_socio_demographic_1_f, Model_socio_economic_socio_demographic_biological_1_f, Model_socio_economic_socio_demographic_biological_behavioral_1_f, coefs = c("Secondary education" = "educationupper secondary education", "Tertiary education" = "educationtertiary education", "Rural area" = "urban_rural", "Foreigner" = "nationality", "French" = "languagefrench", "Italian" = "languageitalian", "70-79" = "age_cut70-79", "80+" = "age_cut80+", "Slight difficulty (FL)" = "FLSlight difficulty", "Great difficulty (FL)" = "FLGreat difficulty", "Inability (FL)" = "FLInability", "Obesity" = "bmi_cutobesity", "Overweight" = "bmi_cutoverweight", "Underweight" = "bmi_cutunderweight", "Average (SHS)" = "SHS_collapsedaverage", "Poor (SHS)" = "SHS_collapsedpoor", "Very poor (SHS)" = "SHS_collapsedvery poor", "Diabetes" = "diabetes", "Osteoarthritis" = "osteoarthritis", "Heart attack" = "heart_attack", "Stroke" = "stroke", "Urinary incontinence" = "urinary_incontinence", "Osteoporosis" = "osteoporosis", "Partially active" = "activitypartially active", "Active" = "activityactive", "Alcohol low risk" = "alcohollow risk", "Alcohol moderate/increased risk" = "alcoholmoderate or increased risk", "Former smoker" = "smokeformer smoker", "Smoker" = "smokesmoker"), scale = TRUE, plot.distributions = FALSE, exp = TRUE) + publication_layout + labs(x = "\n AOR \n ", y = NULL) + coord_cartesian(xlim = c(0, NA)) + scale_x_continuous(limits=c(0.1, 20), breaks = c(0, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20)) + coord_trans(x="log10") + publication_layout + labs(x = "\n aOR \n ", y = NULL)

5.5.3 Model comparison men vs. women

  • Model with socio_economic_covariate & socio_demographic_covariate & biological_covariates & behavioral_covariate:
export_summs(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_1_f, exp = TRUE, scale = TRUE, error_format = "[{conf.low}, {conf.high}]")
Model 1Model 2
(Intercept)0.18 ***0.20 ***
[0.09, 0.35]   [0.13, 0.32]   
educationupper secondary education1.17    1.23    
[0.80, 1.73]   [0.96, 1.59]   
educationtertiary education1.39    1.39    
[0.93, 2.07]   [0.99, 1.94]   
urban_rural1.11    1.19    
[0.89, 1.40]   [0.95, 1.49]   
nationality0.68 *  0.98    
[0.47, 0.98]   [0.66, 1.44]   
languagefrench0.84    0.93    
[0.66, 1.08]   [0.74, 1.17]   
languageitalian0.70    0.61 ** 
[0.46, 1.06]   [0.43, 0.88]   
age_cut70-791.04    1.38 ** 
[0.82, 1.31]   [1.10, 1.74]   
age_cut80+1.35    2.14 ***
[0.98, 1.86]   [1.59, 2.89]   
FLSlight difficulty1.07    1.17    
[0.82, 1.41]   [0.90, 1.54]   
FLGreat difficulty2.34 *  1.30    
[1.18, 4.62]   [0.73, 2.31]   
FLInability1.24    0.92    
[0.51, 3.04]   [0.39, 2.16]   
bmi_cutobesity1.14    0.76    
[0.82, 1.57]   [0.54, 1.05]   
bmi_cutoverweight1.06    0.82    
[0.84, 1.34]   [0.65, 1.04]   
bmi_cutunderweight1.50    0.86    
[0.40, 5.58]   [0.51, 1.45]   
SHS_collapsedaverage0.92    1.45 ** 
[0.69, 1.23]   [1.12, 1.88]   
SHS_collapsedpoor0.90    1.58    
[0.53, 1.55]   [0.93, 2.71]   
SHS_collapsedvery poor1.08    1.90    
[0.46, 2.52]   [0.65, 5.58]   
diabetes1.16    1.03    
[0.85, 1.59]   [0.69, 1.53]   
osteoarthritis1.29 *  1.46 ***
[1.01, 1.65]   [1.18, 1.80]   
heart_attack1.60    0.49    
[0.69, 3.68]   [0.13, 1.86]   
stroke1.69    3.50    
[0.55, 5.16]   [0.80, 15.34]   
urinary_incontinence1.71 ** 1.25    
[1.19, 2.46]   [0.92, 1.70]   
osteoporosis1.92 *  0.79    
[1.07, 3.44]   [0.60, 1.06]   
activitypartially active1.19    0.87    
[0.76, 1.85]   [0.60, 1.26]   
activityactive0.97    0.89    
[0.66, 1.43]   [0.65, 1.21]   
alcohollow risk1.20    1.03    
[0.82, 1.77]   [0.80, 1.34]   
alcoholmoderate or increased risk1.36    0.79    
[0.80, 2.31]   [0.47, 1.32]   
smokeformer smoker1.13    1.38 ** 
[0.89, 1.44]   [1.09, 1.74]   
smokesmoker1.04    1.04    
[0.77, 1.41]   [0.77, 1.42]   
N2768       3065       
R2              
All continuous predictors are mean-centered and scaled by 1 standard deviation. *** p < 0.001; ** p < 0.01; * p < 0.05.
plot_summs(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_1_f, coefs = c("Secondary education" = "educationupper secondary education", "Tertiary education" = "educationtertiary education", "Rural area" = "urban_rural", "Foreigner" = "nationality", "French" = "languagefrench", "Italian" = "languageitalian", "70-79" = "age_cut70-79", "80+" = "age_cut80+", "Slight difficulty (FL)" = "FLSlight difficulty", "Great difficulty (FL)" = "FLGreat difficulty", "Inability (FL)" = "FLInability", "Obesity" = "bmi_cutobesity", "Overweight" = "bmi_cutoverweight", "Underweight" = "bmi_cutunderweight", "Average (SHS)" = "SHS_collapsedaverage", "Poor (SHS)" = "SHS_collapsedpoor", "Very poor (SHS)" = "SHS_collapsedvery poor", "Diabetes" = "diabetes", "Osteoarthritis" = "osteoarthritis", "Heart attack" = "heart_attack", "Stroke" = "stroke", "Urinary incontinence" = "urinary_incontinence", "Osteoporosis" = "osteoporosis", "Partially active" = "activitypartially active", "Active" = "activityactive", "Alcohol low risk" = "alcohollow risk", "Alcohol moderate/increased risk" = "alcoholmoderate or increased risk", "Former smoker" = "smokeformer smoker", "Smoker" = "smokesmoker"), scale = TRUE, plot.distributions = FALSE, exp = TRUE) + publication_layout + labs(x = "\n AOR \n ", y = NULL) + coord_cartesian(xlim = c(0, NA)) + scale_x_continuous(limits=c(0.1, 20), breaks = c(0, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20)) + coord_trans(x="log10") + publication_layout + labs(x = "\n aOR \n ", y = NULL)

5.6 Interactions in male and female Model 3

  • Interaction terms with age categories (\(age\_categories * x\))

    \(x = education, urban\_rural, nationality, language, FL, bmi\_cut, SHS\_collapsed, diabetes,\\ osteoarthritis, heart\_attack, stroke, urinary\_incontinence, osteoporosis, activity, alcohol, \\smoke\)

5.6.1 Men

# education 
Model_socio_economic_socio_demographic_biological_behavioral_interactions_1_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + education * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# jtools::summ(Model_socio_economic_socio_demographic_biological_behavioral_interactions_1_m, exp = TRUE, confint = TRUE, digits = 3)

# model comparison and LR-test p < 0.05
Interaction_LRT_age_education_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_1_m)

# urban_rural
Model_socio_economic_socio_demographic_biological_behavioral_interactions_2_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + urban_rural * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_urban_rural_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_2_m)

# nationality
Model_socio_economic_socio_demographic_biological_behavioral_interactions_3_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + nationality * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_nationality_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_3_m)

# language
Model_socio_economic_socio_demographic_biological_behavioral_interactions_4_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + language * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_language_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_4_m)

# FL 
Model_socio_economic_socio_demographic_biological_behavioral_interactions_5_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + FL * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_FL_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_5_m)

# bmi_cut
Model_socio_economic_socio_demographic_biological_behavioral_interactions_6_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + bmi_cut * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_bmi_cut_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_6_m)

# SHS_collapsed 
Model_socio_economic_socio_demographic_biological_behavioral_interactions_7_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + SHS_collapsed * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_SHS_collapsed_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_7_m)

# diabetes
Model_socio_economic_socio_demographic_biological_behavioral_interactions_8_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + diabetes * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_diabetes_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_8_m)

# osteoarthritis
Model_socio_economic_socio_demographic_biological_behavioral_interactions_9_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + osteoarthritis * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_osteoarthritis_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_9_m)

# heart_attack
Model_socio_economic_socio_demographic_biological_behavioral_interactions_10_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + heart_attack * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_heart_attack_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_10_m)

# stroke
Model_socio_economic_socio_demographic_biological_behavioral_interactions_11_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + stroke * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_stroke_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_11_m)

# urinary_incontinence
Model_socio_economic_socio_demographic_biological_behavioral_interactions_12_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + urinary_incontinence * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_urinary_incontinence_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_12_m)

# osteoporosis 
Model_socio_economic_socio_demographic_biological_behavioral_interactions_13_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + osteoporosis * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_osteoporosis_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_13_m)

# activity
Model_socio_economic_socio_demographic_biological_behavioral_interactions_14_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + activity * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_activity_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_14_m)

# alcohol
Model_socio_economic_socio_demographic_biological_behavioral_interactions_15_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + alcohol * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_alcohol_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_15_m)

# smoke
Model_socio_economic_socio_demographic_biological_behavioral_interactions_16_m <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + smoke * I(age_cut), 
               design = wdat_17_m,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_smoke_m<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_m, Model_socio_economic_socio_demographic_biological_behavioral_interactions_16_m)


Interaction_age_m <- round(c(Interaction_LRT_age_education_m$p, Interaction_LRT_age_urban_rural_m$p, Interaction_LRT_age_nationality_m$p, Interaction_LRT_age_language_m$p, Interaction_LRT_age_FL_m$p, Interaction_LRT_age_bmi_cut_m$p, Interaction_LRT_age_SHS_collapsed_m$p, Interaction_LRT_age_diabetes_m$p, Interaction_LRT_age_osteoarthritis_m$p, Interaction_LRT_age_heart_attack_m$p, Interaction_LRT_age_stroke_m$p, Interaction_LRT_age_urinary_incontinence_m$p, Interaction_LRT_age_osteoporosis_m$p, Interaction_LRT_age_activity_m$p, Interaction_LRT_age_alcohol_m$p, Interaction_LRT_age_smoke_m$p), 3)

Interaction_names<- c("Education level", "Residential area", "Nationality", "Language region", "Functional limitations", "BMI group", "Self-perceived health status", "Diabetes", "Osteoarthritis", "Heart attack", "Stroke", "Urinary incontinence", "Osteoporosis", "Physical activity", "Chronic alcohol consumption", "Smoking (smoker)")

Interaction_age_table_m <- data.frame(Interaction_names, Interaction_age_m)
knitr::kable(Interaction_age_table_m, col.names = c('Age categories * Variable', '$P$'), caption = "Likelihood Ratio Test and $P$-value for the
addition of the interactions to the Main Effects Model 3")
Likelihood Ratio Test and \(P\)-value for the addition of the interactions to the Main Effects Model 3
Age categories * Variable \(P\)
Education level 0.566
Residential area 0.412
Nationality 0.279
Language region 0.748
Functional limitations 0.369
BMI group 0.480
Self-perceived health status 0.033
Diabetes 0.515
Osteoarthritis 0.352
Heart attack 0.971
Stroke 0.270
Urinary incontinence 0.048
Osteoporosis 0.337
Physical activity 0.664
Chronic alcohol consumption 0.056
Smoking (smoker) 0.534

5.6.2 Women

# education 
Model_socio_economic_socio_demographic_biological_behavioral_interactions_1_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + education * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# jtools::summ(Model_socio_economic_socio_demographic_biological_behavioral_interactions_1_f, exp = TRUE, confint = TRUE, digits = 3)

# model comparison and LR-test p < 0.05
Interaction_LRT_age_education_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_1_f)

# urban_rural
Model_socio_economic_socio_demographic_biological_behavioral_interactions_2_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + urban_rural * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_urban_rural_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_2_f)

# nationality
Model_socio_economic_socio_demographic_biological_behavioral_interactions_3_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + nationality * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_nationality_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_3_f)

# language
Model_socio_economic_socio_demographic_biological_behavioral_interactions_4_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + language * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_language_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_4_f)

# FL 
Model_socio_economic_socio_demographic_biological_behavioral_interactions_5_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + FL * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_FL_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_5_f)

# bmi_cut
Model_socio_economic_socio_demographic_biological_behavioral_interactions_6_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + bmi_cut * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_bmi_cut_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_6_f)

# SHS_collapsed 
Model_socio_economic_socio_demographic_biological_behavioral_interactions_7_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + SHS_collapsed * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_SHS_collapsed_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_7_f)

# diabetes
Model_socio_economic_socio_demographic_biological_behavioral_interactions_8_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + diabetes * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_diabetes_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_8_f)

# osteoarthritis
Model_socio_economic_socio_demographic_biological_behavioral_interactions_9_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + osteoarthritis * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_osteoarthritis_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_9_f)

# heart_attack
Model_socio_economic_socio_demographic_biological_behavioral_interactions_10_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + heart_attack * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_heart_attack_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_10_f)

# stroke
Model_socio_economic_socio_demographic_biological_behavioral_interactions_11_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + stroke * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_stroke_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_11_f)

# urinary_incontinence
Model_socio_economic_socio_demographic_biological_behavioral_interactions_12_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + urinary_incontinence * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_urinary_incontinence_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_12_f)

# osteoporosis 
Model_socio_economic_socio_demographic_biological_behavioral_interactions_13_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + osteoporosis * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_osteoporosis_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_13_f)

# activity
Model_socio_economic_socio_demographic_biological_behavioral_interactions_14_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + activity * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_activity_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_14_f)

# alcohol
Model_socio_economic_socio_demographic_biological_behavioral_interactions_15_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + alcohol * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_alcohol_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_15_f)

# smoke
Model_socio_economic_socio_demographic_biological_behavioral_interactions_16_f <- svyglm(I(fall=="fall last 12 months") ~ education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + smoke * I(age_cut), 
               design = wdat_17_f,
               family = quasibinomial(logit))

# model comparison and LR-test p < 0.05
Interaction_LRT_age_smoke_f<-anova(Model_socio_economic_socio_demographic_biological_behavioral_1_f, Model_socio_economic_socio_demographic_biological_behavioral_interactions_16_f)


Interaction_age_f <- round(c(Interaction_LRT_age_education_f$p, Interaction_LRT_age_urban_rural_f$p, Interaction_LRT_age_nationality_f$p, Interaction_LRT_age_language_f$p, Interaction_LRT_age_FL_f$p, Interaction_LRT_age_bmi_cut_f$p, Interaction_LRT_age_SHS_collapsed_f$p, Interaction_LRT_age_diabetes_f$p, Interaction_LRT_age_osteoarthritis_f$p, Interaction_LRT_age_heart_attack_f$p, Interaction_LRT_age_stroke_f$p, Interaction_LRT_age_urinary_incontinence_f$p, Interaction_LRT_age_osteoporosis_f$p, Interaction_LRT_age_activity_f$p, Interaction_LRT_age_alcohol_f$p, Interaction_LRT_age_smoke_f$p), 3)

Interaction_age_table_f <- data.frame(Interaction_names, Interaction_age_f)
knitr::kable(Interaction_age_table_f, col.names = c('Age categories * Variable', '$P$'), caption = "Likelihood Ratio Test and $P$-value for the
addition of the interactions to the Main Effects Model 3")
Likelihood Ratio Test and \(P\)-value for the addition of the interactions to the Main Effects Model 3
Age categories * Variable \(P\)
Education level 0.259
Residential area 0.642
Nationality 0.123
Language region 0.520
Functional limitations 0.967
BMI group 0.606
Self-perceived health status 0.613
Diabetes 0.828
Osteoarthritis 0.768
Heart attack 0.892
Stroke 0.073
Urinary incontinence 0.613
Osteoporosis 0.992
Physical activity 0.026
Chronic alcohol consumption 0.126
Smoking (smoker) 0.550

5.7 Interaction genderunspecific Model

  • Interaction terms with sex (\(age\_categories * x\))

    \(x = education, urban\_rural, nationality, language, age\_cut, FL, bmi\_cut, SHS\_collapsed, diabetes,\\ osteoarthritis, heart\_attack, stroke, urinary\_incontinence, osteoporosis, activity, alcohol, \\smoke\)

# education
Model_socio_economic_socio_demographic_biological_behavioral_1 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke, 
               design = wdat_17,
               family = quasibinomial(logit))

Model_socio_economic_socio_demographic_biological_behavioral_interactions_1 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + education *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))
# jtools::summ(Model_socio_economic_socio_demographic_biological_behavioral_interactions_1,exp = TRUE, confint = TRUE, digits = 3)

Interaction_LRT_sex_education <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_1)

# urban_rural
Model_socio_economic_socio_demographic_biological_behavioral_interactions_2 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + urban_rural *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_urban_rural <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_2)

# nationality
Model_socio_economic_socio_demographic_biological_behavioral_interactions_3 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + nationality *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_nationality <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_3)

# language
Model_socio_economic_socio_demographic_biological_behavioral_interactions_4 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + language *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_language <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_4)

# age_cut
Model_socio_economic_socio_demographic_biological_behavioral_interactions_5 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + age_cut *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_age_cut <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_5)

# FL
Model_socio_economic_socio_demographic_biological_behavioral_interactions_6 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + FL *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_FL <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_6)

# bmi_cut
Model_socio_economic_socio_demographic_biological_behavioral_interactions_7 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + bmi_cut *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_bmi_cut <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_7)

# SHS_collapsed
Model_socio_economic_socio_demographic_biological_behavioral_interactions_8 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + SHS_collapsed *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_SHS_collapsed <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_8)

# diabetes
Model_socio_economic_socio_demographic_biological_behavioral_interactions_9 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + diabetes *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_diabetes <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_9)

# osteoarthritis
Model_socio_economic_socio_demographic_biological_behavioral_interactions_10 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + osteoarthritis *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_osteoarthritis <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_10)

# heart_attack
Model_socio_economic_socio_demographic_biological_behavioral_interactions_11 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + heart_attack *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_heart_attack <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_11)

# stroke
Model_socio_economic_socio_demographic_biological_behavioral_interactions_12 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + stroke *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_stroke <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_12)

# urinary_incontinence
Model_socio_economic_socio_demographic_biological_behavioral_interactions_13 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + urinary_incontinence *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_urinary_incontinence <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_13)

# osteoporosis
Model_socio_economic_socio_demographic_biological_behavioral_interactions_14 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + osteoporosis *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_osteoporosis <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_14)

# activity
Model_socio_economic_socio_demographic_biological_behavioral_interactions_15 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + activity *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_activity <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_15)

# alcohol
Model_socio_economic_socio_demographic_biological_behavioral_interactions_16 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + alcohol *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_alcohol <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_16)

# smoke
Model_socio_economic_socio_demographic_biological_behavioral_interactions_17 <- svyglm(I(fall=="fall last 12 months") ~ sex + education + urban_rural + nationality + language + age_cut + FL + bmi_cut + SHS_collapsed + diabetes + osteoarthritis + heart_attack + stroke + urinary_incontinence + osteoporosis + activity + alcohol + smoke + smoke *I(sex), 
               design = wdat_17,
               family = quasibinomial(logit))

Interaction_LRT_sex_smoke <- anova(Model_socio_economic_socio_demographic_biological_behavioral_1, Model_socio_economic_socio_demographic_biological_behavioral_interactions_17)

Interaction_names_1<- c("Education level", "Residential area", "Nationality", "Language region", "Age categories", "Functional limitations", "BMI group", "Self-perceived health status", "Diabetes", "Osteoarthritis", "Heart attack", "Stroke", "Urinary incontinence", "Osteoporosis", "Physical activity", "Chronic alcohol consumption", "Smoking (smoker)")

Interaction_sex <- round(c(Interaction_LRT_sex_education$p, Interaction_LRT_sex_urban_rural$p, Interaction_LRT_sex_nationality$p, Interaction_LRT_sex_language$p, Interaction_LRT_sex_age_cut$p, Interaction_LRT_sex_FL$p, Interaction_LRT_sex_bmi_cut$p, Interaction_LRT_sex_SHS_collapsed$p, Interaction_LRT_sex_diabetes$p, Interaction_LRT_sex_osteoarthritis$p, Interaction_LRT_sex_heart_attack$p, Interaction_LRT_sex_stroke$p, Interaction_LRT_sex_urinary_incontinence$p, Interaction_LRT_sex_osteoporosis$p, Interaction_LRT_sex_activity$p, Interaction_LRT_sex_alcohol$p, Interaction_LRT_sex_smoke$p), 3)

Interaction_sex_table <- data.frame(Interaction_names_1, Interaction_sex)
knitr::kable(Interaction_sex_table, col.names = c('Sex * Variable', '$P$'), caption = "Likelihood Ratio Test and $P$-value for the
addition of the interactions to the Main Effects Model 3")
Likelihood Ratio Test and \(P\)-value for the addition of the interactions to the Main Effects Model 3
Sex * Variable \(P\)
Education level 0.868
Residential area 0.876
Nationality 0.176
Language region 0.770
Age categories 0.064
Functional limitations 0.565
BMI group 0.349
Self-perceived health status 0.182
Diabetes 0.805
Osteoarthritis 0.349
Heart attack 0.191
Stroke 0.371
Urinary incontinence 0.457
Osteoporosis 0.054
Physical activity 0.404
Chronic alcohol consumption 0.365
Smoking (smoker) 0.432

5.8 Analysis of fall count

5.8.1 Prevalence of multiple falls by characteristic

  • \(y = fall\_count\) (levels: 1,2,3,4; no fall, 1 fall, two falls, more then two falls)

  • \(y = fall\_count\_collapsed\) is used in this analysis and is generated by dichotomization from \(fall\_count\) (1,2 = no fall or 1; 3,4 = two falls or more)

  • Where \(y\) represents the dependent variable

  • Due to the scope of this publication, the analysis was limited to the prevalence of multiple falls estimation.

5.8.1.1 Men

  • education
tab_amount_fall_count_collapsed_education_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ education,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_education_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            7.9  5.0 11.6
## 2                                            8.4  6.9 10.2
## 3                                           10.1  8.2 12.3
  • urban_rural
tab_amount_fall_count_collapsed_urban_rural_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ urban_rural,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_urban_rural_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.6  7.3 10.1
## 2                                           10.0  7.9 12.5
  • nationality
tab_amount_fall_count_collapsed_nationality_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ nationality,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_nationality_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            9.6  8.4 11.0
## 2                                            5.0  2.9  7.9
  • language
tab_amount_fall_count_collapsed_language_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ language,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_language_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.9  7.5 10.4
## 2                                            9.3  7.1 11.7
## 3                                            9.8  6.2 14.5
  • age_cut
tab_amount_fall_count_collapsed_age_cut_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ age_cut,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_age_cut_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.0  6.5  9.8
## 2                                            8.5  6.7 10.6
## 3                                           13.1  9.8 16.9
  • FL
tab_amount_fall_count_collapsed_FL_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ FL,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_FL_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            7.9  6.7  9.3
## 2                                           11.2  8.6 14.2
## 3                                           26.0 15.2 39.3
## 4                                           13.6  5.6 25.8
  • bmi_cut
tab_amount_fall_count_collapsed_bmi_cut_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ bmi_cut,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_bmi_cut_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.6  6.8 10.6
## 2                                            9.6  6.7 13.2
## 3                                            9.2  7.5 11.0
## 4                                           15.8  1.7 47.5
  • SHS
tab_amount_fall_count_collapsed_SHS_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ SHS,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_SHS_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            6.4  4.6  8.6
## 2                                            8.7  7.1 10.6
## 3                                           11.8  9.0 15.1
## 4                                           11.8  6.9 18.3
## 5                                           19.4  7.9 36.0
  • diabetes
tab_amount_fall_count_collapsed_diabetes_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ diabetes,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_diabetes_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.9  7.6 10.3
## 2                                            9.0  6.1 12.5
  • osteoarthritis
tab_amount_fall_count_collapsed_osteoarthritis_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ osteoarthritis,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_osteoarthritis_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.1  6.8  9.5
## 2                                           11.8  9.3 14.6
  • heart_attack
tab_amount_fall_count_collapsed_heart_attack_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ heart_attack,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_heart_attack_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.9  7.8 10.2
## 2                                           13.0  4.6 26.7
  • stroke
tab_amount_fall_count_collapsed_stroke_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ stroke,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_stroke_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            9.0  7.8 10.2
## 2                                            9.6  2.4 23.5
  • urinary_incontinence
tab_amount_fall_count_collapsed_urinary_incontinence_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ urinary_incontinence,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_urinary_incontinence_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.4  7.3  9.6
## 2                                           15.5 10.7 21.3
  • osteoporosis
tab_amount_fall_count_collapsed_osteoporosis_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ osteoporosis,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_osteoporosis_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.8  7.6 10.0
## 2                                           17.1  8.7 28.6
  • activity
tab_amount_fall_count_collapsed_activity_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ activity,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_activity_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                           11.9  7.9 16.9
## 2                                           10.8  7.5 14.8
## 3                                            8.3  7.0  9.8
  • alcohol
tab_amount_fall_count_collapsed_alcohol_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ alcohol,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_alcohol_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            6.9  3.8 11.2
## 2                                            9.4  8.1 10.8
## 3                                            8.2  4.7 12.9
  • smoke
tab_amount_fall_count_collapsed_smoke_m <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ smoke,
  design = wdat_17_m,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_smoke_m[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            9.3  7.5 11.3
## 2                                            8.8  7.1 10.7
## 3                                            8.8  6.3 11.8

5.8.1.2 Women

  • education
tab_amount_fall_count_collapsed_education_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ education,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_education_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.6  6.8 10.7
## 2                                            7.7  6.4  9.2
## 3                                            9.4  6.8 12.5
  • urban_rural
tab_amount_fall_count_collapsed_urban_rural_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ urban_rural,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_urban_rural_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.2  7.0  9.5
## 2                                            8.4  6.5 10.4
  • nationality
tab_amount_fall_count_collapsed_nationality_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ nationality,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_nationality_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.4  7.3  9.5
## 2                                            7.4  4.7 10.8
  • language
tab_amount_fall_count_collapsed_language_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ language,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_language_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.2  7.0  9.6
## 2                                            8.4  6.6 10.4
## 3                                            8.1  5.2 11.9
  • age_cut
tab_amount_fall_count_collapsed_age_cut_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ age_cut,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_age_cut_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            6.8  5.5  8.2
## 2                                            8.1  6.4 10.1
## 3                                           11.9  9.2 15.1
  • FL
tab_amount_fall_count_collapsed_FL_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ FL,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_FL_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            6.4  5.3  7.5
## 2                                           12.8  9.7 16.3
## 3                                           18.1 11.7 25.9
## 4                                           17.3  9.3 27.9
  • bmi_cut
tab_amount_fall_count_collapsed_bmi_cut_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ bmi_cut,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_bmi_cut_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            7.7  6.3  9.4
## 2                                            7.4  5.3 10.1
## 3                                            8.7  6.9 10.8
## 4                                           11.2  5.9 18.5
  • SHS
tab_amount_fall_count_collapsed_SHS_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ SHS,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_SHS_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            4.8  3.4  6.6
## 2                                            6.7  5.3  8.2
## 3                                           13.1 10.5 16.0
## 4                                           18.4 11.4 27.2
## 5                                           30.7 13.0 53.5
  • diabetes
tab_amount_fall_count_collapsed_diabetes_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ diabetes,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_diabetes_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            7.4  6.3  8.6
## 2                                           11.9  7.4 17.7
  • osteoarthritis
tab_amount_fall_count_collapsed_osteoarthritis_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ osteoarthritis,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_osteoarthritis_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            6.1  5.0  7.4
## 2                                           11.4  9.5 13.4
  • heart_attack
tab_amount_fall_count_collapsed_heart_attack_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ heart_attack,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_heart_attack_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.3  7.2  9.4
## 2                                            5.7  0.6 19.3
  • stroke
tab_amount_fall_count_collapsed_stroke_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ stroke,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_stroke_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.1  7.0  9.2
## 2                                           29.0 11.9 51.5
  • urinary_incontinence
tab_amount_fall_count_collapsed_urinary_incontinence_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ urinary_incontinence,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_urinary_incontinence_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            7.1  6.1  8.2
## 2                                           16.4 12.5 20.9
  • osteoporosis
tab_amount_fall_count_collapsed_osteoporosis_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ osteoporosis,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_osteoporosis_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            7.8  6.7  9.0
## 2                                           10.5  7.6 13.8
  • activity
tab_amount_fall_count_collapsed_activity_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ activity,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_activity_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                           10.9  7.9 14.4
## 2                                            9.6  6.6 13.2
## 3                                            7.0  5.8  8.2
  • alcohol
tab_amount_fall_count_collapsed_alcohol_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ alcohol,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_alcohol_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.5  6.2 11.2
## 2                                            7.9  6.7  9.2
## 3                                            6.9  3.6 11.6
  • smoke
tab_amount_fall_count_collapsed_smoke_f <- svyby(formula = ~I(fall_count_collapsed=="two_falls_or_more"),
  by = ~ smoke,
  design = wdat_17_f,
  FUN = svyciprop,
  na.rm = TRUE,
  keep.names = FALSE,
  vartype="ci",
  method = "likelihood"
)
round(tab_amount_fall_count_collapsed_smoke_f[,2:4],3)*100
##   I(fall_count_collapsed == "two_falls_or_more") ci_l ci_u
## 1                                            8.0  6.7  9.3
## 2                                            9.4  7.2 12.0
## 3                                            7.4  5.1 10.2

6 References

1.
RUBIN DB. Inference and missing data. Biometrika. 1976;63: 581–592. doi:10.1093/biomet/63.3.581
2.
Rao JNK, Scott AJ. On chi-squared tests for multiway contingency tables with cell proportions estimated from survey data. The Annals of Statistics. 1984;12. doi:10.1214/aos/1176346391
3.
Lumley T. Complex surveys. 2010. doi:10.1002/9780470580066

7 Appendix

In the appendix, we report a printout of all R packages used in the analysis and their versions to facilitate the reproducibility of the analysis/results.

7.1 Appendix

pander(sessionInfo(), compact = TRUE)

R version 4.0.2 (2020-06-22)

Platform: x86_64-w64-mingw32/x64 (64-bit)

locale: LC_COLLATE=German_Switzerland.1252, LC_CTYPE=German_Switzerland.1252, LC_MONETARY=German_Switzerland.1252, LC_NUMERIC=C and LC_TIME=German_Switzerland.1252

attached base packages: grid, stats, graphics, grDevices, utils, datasets, methods and base

other attached packages: pander(v.0.6.4), flextable(v.0.7.0), officer(v.0.4.1), codebook(v.0.9.2), sjPlot(v.2.8.9), corrplot(v.0.90), VIM(v.6.1.1), colorspace(v.1.4-1), mice(v.3.13.0), Hmisc(v.4.5-0), Formula(v.1.2-4), lattice(v.0.20-45), forcats(v.0.5.1), stringr(v.1.4.0), purrr(v.0.3.4), readr(v.2.0.2), tidyr(v.1.1.4), tibble(v.3.1.5), tidyverse(v.1.3.1), Publish(v.2020.12.23), prodlim(v.2019.11.13), MatchIt(v.4.3.0), ggstance(v.0.3.5), jtools(v.2.1.4), tableone(v.0.13.0), DataExplorer(v.0.8.2), plotly(v.4.9.4.1), DT(v.0.19), psych(v.2.1.9), hexbin(v.1.28.2), survey(v.4.1-1), survival(v.3.2-13), Matrix(v.1.3-4), dplyr(v.1.0.7), ggplot2(v.3.3.5), rio(v.0.5.27) and pacman(v.0.5.1)

loaded via a namespace (and not attached): utf8(v.1.2.2), tidyselect(v.1.1.1), lme4(v.1.1-27.1), htmlwidgets(v.1.5.4), ranger(v.0.13.1), munsell(v.0.5.0), codetools(v.0.2-18), effectsize(v.0.5), future(v.1.22.1), withr(v.2.4.2), highr(v.0.9), knitr(v.1.30), uuid(v.0.1-4), rstudioapi(v.0.13), DescTools(v.0.99.43), robustbase(v.0.93-9), vcd(v.1.4-8), listenv(v.0.8.0), labeling(v.0.4.2), emmeans(v.1.7.0), repr(v.1.1.3), mnormt(v.2.0.2), farver(v.2.1.0), datawizard(v.0.2.1), coda(v.0.19-4), parallelly(v.1.28.1), vctrs(v.0.3.8), generics(v.0.1.0), TH.data(v.1.1-0), xfun(v.0.26), R6(v.2.5.1), assertthat(v.0.2.1), networkD3(v.0.4), scales(v.1.1.1), multcomp(v.1.4-17), nnet(v.7.3-16), rootSolve(v.1.8.2.3), gtable(v.0.3.0), globals(v.0.14.0), lmom(v.2.8), sandwich(v.3.0-1), rlang(v.0.4.11), systemfonts(v.1.0.4), splines(v.4.0.2), rstatix(v.0.7.0), lazyeval(v.0.2.2), broom(v.0.7.9), checkmate(v.2.0.0), reshape2(v.1.4.4), yaml(v.2.2.1), abind(v.1.4-5), modelr(v.0.1.8), crosstalk(v.1.1.1), backports(v.1.2.1), tools(v.4.0.2), lava(v.1.6.10), ellipsis(v.0.3.2), jquerylib(v.0.1.4), RColorBrewer(v.1.1-2), proxy(v.0.4-26), plyr(v.1.8.6), Rcpp(v.1.0.7), base64enc(v.0.1-3), rpart(v.4.1-15), viridis(v.0.6.2), zoo(v.1.8-9), haven(v.2.4.3), cluster(v.2.1.2), fs(v.1.5.0), magrittr(v.2.0.1), data.table(v.1.14.2), openxlsx(v.4.2.4), lmtest(v.0.9-38), reprex(v.2.0.1), tmvnsim(v.1.0-2), mvtnorm(v.1.1-2), sjmisc(v.2.8.7), hms(v.1.1.1), evaluate(v.0.14), xtable(v.1.8-4), sjstats(v.0.18.1), jpeg(v.0.1-9), broom.mixed(v.0.2.7), readxl(v.1.3.1), gridExtra(v.2.3), ggeffects(v.1.1.1), compiler(v.4.0.2), crayon(v.1.4.1), minqa(v.1.2.4), htmltools(v.0.5.2), tzdb(v.0.1.2), expm(v.0.999-6), Exact(v.3.0), lubridate(v.1.7.10), DBI(v.1.1.1), sjlabelled(v.1.1.8), dbplyr(v.2.1.1), MASS(v.7.3-54), boot(v.1.3-28), car(v.3.0-11), cli(v.3.0.1), mitools(v.2.4), huxtable(v.5.4.0), parallel(v.4.0.2), insight(v.0.14.4), igraph(v.1.2.6), pkgconfig(v.2.0.3), foreign(v.0.8-81), laeken(v.0.5.2), skimr(v.2.1.3), sp(v.1.4-5), xml2(v.1.3.2), bslib(v.0.3.0), estimability(v.1.3), rvest(v.1.0.1), digest(v.0.6.25), parameters(v.0.14.0), rmarkdown(v.2.11), cellranger(v.1.1.0), htmlTable(v.2.2.1), gld(v.2.6.2), gdtools(v.0.2.4), curl(v.4.3.2), commonmark(v.1.7), nloptr(v.1.2.2.2), lifecycle(v.1.0.1), nlme(v.3.1-153), jsonlite(v.1.7.2), carData(v.3.0-4), viridisLite(v.0.4.0), fansi(v.0.5.0), labelled(v.2.8.0), pillar(v.1.6.3), fastmap(v.1.1.0), httr(v.1.4.2), DEoptimR(v.1.0-9), glue(v.1.4.2), bayestestR(v.0.11.0), zip(v.2.2.0), png(v.0.1-7), class(v.7.3-19), stringi(v.1.7.5), sass(v.0.4.0), performance(v.0.8.0), latticeExtra(v.0.6-29), e1071(v.1.7-9) and future.apply(v.1.8.1)


  1. Email: | Department of Health Professions, Bern University of Applied Sciences, Bern, Switzerland: BFH | ORCiD: ID↩︎

LS0tDQp0aXRsZTogPiANCiAgU2V4IERpZmZlcmVuY2VzIGluIEZhbGxzIEFtb25nIHRoZSBFbGRlcmx5IENvbW11bml0eS1Ed2VsbGluZyBTd2lzcyBQb3B1bGF0aW9uOg0KICBBIFBvcHVsYXRpb24tQmFzZWQgQ3Jvc3MtU2VjdGlvbmFsIFN1cnZleQ0KYXV0aG9yOg0KICBuYW1lOiAnQW5kcmkgTy4gR2VyYmVyIF5bRW1haWw6IGFuZHJpLmdlcmJlckBnbXguY2ggfCBEZXBhcnRtZW50IG9mIEhlYWx0aCBQcm9mZXNzaW9ucywgQmVybiBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMsIEJlcm4sIFN3aXR6ZXJsYW5kOiA8YSBocmVmPSJodHRwczovL3d3dy5iZmguY2gvZGUvP2djbGlkPUNqMEtDUWp3bDdxU0JoRC1BUklzQUN2VjFYMlBMZC1QZGZqQ1FETUJxS1B2QWZ6WGlGRkFISEFhSm1pWkpHeWRJS2FvVDkyWC1BaXVTNEVhQWdaNkVBTHdfd2NCIj5CRkg8L2E+IHwgT1JDaUQ6IDxhIGhyZWY9Imh0dHBzOi8vb3JjaWQub3JnLzAwMDAtMDAwMi05NzkzLTA0MVgiPklEPC9hPl0nDQogIGFmZmlsaWF0aW9uOiBEZXBhcnRtZW50IG9mIEhlYWx0aCBQcm9mZXNzaW9ucywgQmVybiBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMsIEJlcm4sIFN3aXR6ZXJsYW5kDQogIGZvb3Rub3RlOiBDb3JyZXNwb25kaW5nIGF1dGhvcg0KZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRoZW1lOiBzaW1wbGV4DQogICAgcGFnZWRfZGY6IHllcw0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICBpbmNsdWRlczoNCiAgICBpbl9oZWFkZXI6IHN0cnVjdHVyZS50ZXgNCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQpiaWJsaW9ncmFwaHk6IHJlZmVyZW5jZXMuYmliDQpjc2w6IHBsb3Mtb25lLmNzbA0KbGluay1jaXRhdGlvbnM6IHRydWUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQojIFIgc2V0dXAgYW5kIHJlcXVpcmVkIHBhY2thZ2VzDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHBhY21hbikNCnBhY21hbjo6cF9sb2FkKA0KICByaW8sDQogIGdncGxvdDIsDQogIGRwbHlyLA0KICBzdXJ2ZXksDQogIGhleGJpbiwNCiAgcHN5Y2gsDQogIERULA0KICBwbG90bHksDQogIERhdGFFeHBsb3JlciwNCiAgdGFibGVvbmUsDQogIGp0b29scywNCiAgZ2dzdGFuY2UsDQogIE1hdGNoSXQsDQogIFB1Ymxpc2gsDQogIHRpZHl2ZXJzZSwNCiAgSG1pc2MsDQogIG1pY2UsDQogIFZJTSwNCiAgY29ycnBsb3QsDQogIHNqUGxvdCwNCiAgY29kZWJvb2ssDQogIG9mZmljZXIsDQogIGZsZXh0YWJsZSwNCiAgcGFuZGVyDQopDQpgYGANCg0KIyBMb2FkaW5nIGFuZCBmb3JtYXR0aW5nIHRoZSBkYXRhc2V0DQoNClRoZSBkYXRhc2V0IG9mIHRoZSBTd2lzcyBIZWFsdGggSW50ZXJ2aWV3IHN1cnZleSAoU0hJUykgd2VyZSBhbm9ueW1pc2VkIHByaW9yIHRvIHRoZSBhbmFseXNpcyAoZm9yIFtmdXJ0aGVyIGluZm9ybWF0aW9uXShodHRwczovL2RhbS1hcGkuYmZzLmFkbWluLmNoL2h1Yi9hcGkvZGFtL2Fzc2V0cy8xNDgzOTMzMi9tYXN0ZXIpKSBhbmQgcGVybWlzc2lvbiB0byBhbmFseXNlIGFuZCBwdWJsaXNoIHRoZSByZXN0dWx0cyB3YXMgb2J0YWluZWQgdGhyb3VnaCBhIGNvbnRyYWN0IHdpdGggdGhlIFN3aXNzIEZlZGVyYWwgU3RhdGlzdGljYWwgT2ZmaWNlIChTRlNPKS4NCg0KIyMgTG9hZCBhbmQgc3Vic2V0IGNyb3NzIHNlY3Rpb25hbCBkYXRhICgkXGdlcXEkIDYwIHllYXJzIG9mIGFnZSkNCg0KYGBge3J9DQpkYXQgPC0gcmlvOjppbXBvcnQoInNoc18yMDA3XzIwMTJfMjAxN19jb21iaW5lZC5kdGEiKSAjIFNISVMgRGF0YQ0KZGF0IDwtIHN1YnNldChkYXQsIGFsdGVyID49IDYwKQ0KYGBgDQoNCiMjIEZvcm1hdHRpbmcgey50YWJzZXR9DQoNCi0gICBGYWN0b3JpemU6IGxldmVscygpLCBsYWJlbHMoKQ0KLSAgIERpY2hvdG9taXplDQotICAgQ2F0ZWdvcml6ZQ0KDQohW1tSaXNrIGZhY3RvciBtb2RlbCBmb3IgZmFsbHMgaW4gb2xkZXIgYWdlIFdIT10oaHR0cHM6Ly93d3cud2hvLmludC9wdWJsaWNhdGlvbnMvaS9pdGVtLzk3ODkyNDE1NjM1MzYpXShSaXNrJTIwZmFjdG9yJTIwbW9kZWwlMjBmb3IlMjBmYWxscyUyMGluJTIwb2xkZXIlMjBhZ2UlMjBXSE8uUE5HKQ0KDQojIyMgT3V0Y29tZSB2YXJpYWJsZXMNCg0KYGBge3J9DQpkYXQkZmFsbCA8LSBmYWN0b3IoDQogIGRhdCR0YWx0cDAxLA0KICBsZXZlbHMgPSBjKDEsIDIpLA0KICBsYWJlbHMgPSBjKCJmYWxsIGxhc3QgMTIgbW9udGhzIiwgIm5vIGZhbGwgbGFzdCAxMiBtb250aHMiKQ0KKQ0KDQojIGludGVncmF0ZSBubyBmYWxsICgwKSBpbnRvIHZhcmlhYmxlIHRhbHRwMDIgKGZhbGxfY291bnQpDQpkYXQkZmFsbF9jb3VudF80IDwtIGRhdCR0YWx0cDAyDQpkYXQkZmFsbF9jb3VudF80W2RhdCR0YWx0cDAxPT0yXSA8LSAwDQoNCmRhdCRmYWxsX2NvdW50IDwtIGZhY3RvcigNCiAgZGF0JGZhbGxfY291bnRfNCwNCiAgbGV2ZWxzID0gYygwLCAxLCAyLCAzKSwNCiAgbGFiZWxzID0gYygNCiAgICAibm8gZmFsbCBsYXN0IDEyIG1vbnRocyIsDQogICAgIjEgZmFsbCBsYXN0IDEyIG1vbnRocyIsDQogICAgIjIgZmFsbHMgbGFzdCAxMiBtb250aHMiLA0KICAgICJtb3JlIHRoZW4gMiBmYWxscyBsYXN0IDEyIG1vbnRocyINCiAgKQ0KKQ0KDQpkYXQkZmFsbF9jb3VudF9jb2xsYXBzZWQgPC0gZmN0X2NvbGxhcHNlKGRhdCRmYWxsX2NvdW50LCB0d29fZmFsbHNfb3JfbW9yZSA9IGMoIjIgZmFsbHMgbGFzdCAxMiBtb250aHMiLCAibW9yZSB0aGVuIDIgZmFsbHMgbGFzdCAxMiBtb250aHMiKSwgbm9fb3Jfb25lX2ZhbGwgPSBjKCJubyBmYWxsIGxhc3QgMTIgbW9udGhzIiwgIjEgZmFsbCBsYXN0IDEyIG1vbnRocyIpKQ0KDQoNCm91dGNvbWVfZmFsbCA8LSBjKCJmYWxsIikNCm91dGNvbWVfZmFsbF9jb3VudCA8LSBjKCJmYWxsX2NvdW50IikNCm91dGNvbWVfZmFsbF9jb3VudF9jb2xsYXBzZWQgPC0gYygiZmFsbF9jb3VudF9jb2xsYXBzZWQiKQ0KYyhvdXRjb21lX2ZhbGwsIG91dGNvbWVfZmFsbF9jb3VudCwgb3V0Y29tZV9mYWxsX2NvdW50X2NvbGxhcHNlZCkNCmBgYA0KDQojIyMgRXhwb3N1cmUgdmFyaWFibGVzDQoNCmBgYHtyLGVjaG8gPSBUUlVFfQ0KZGF0JGdlbmRlciA8LSBmYWN0b3IoZGF0JHNleCwNCiAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoMSwgMiksDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJtYW4iLCAid29tYW4iKSkNCg0KZXhwb3N1cmVfdmFyaWFibGUgPC0gYygiZ2VuZGVyIikNCmV4cG9zdXJlX3ZhcmlhYmxlDQpgYGANCg0KIyMjIFNvY2lvLWVjb25vbWljIHZhcmlhYmxlDQoNCmBgYHtyfQ0KZGF0JGVkdWNhdGlvbiA8LSBmYWN0b3IoDQogIGRhdCRhdXNiaWxkMywNCiAgbGV2ZWxzID0gYygxLCAyLCAzKSwNCiAgbGFiZWxzID0gYygNCiAgICAiY29tcHVsc29yeSBlZHVjYXRpb24iLA0KICAgICJ1cHBlciBzZWNvbmRhcnkgZWR1Y2F0aW9uIiwNCiAgICAidGVydGlhcnkgZWR1Y2F0aW9uIg0KICApDQopDQoNCnNvY2lvX2Vjb25vbWljX2NvdmFyaWF0ZSA8LSBjKCJlZHVjYXRpb24iKQ0Kc29jaW9fZWNvbm9taWNfY292YXJpYXRlDQpgYGANCg0KIyMjIFNvY2lvLWRlbW9ncmFwaGljIHZhcmlhYmxlcw0KDQpgYGB7cn0NCmRhdCR1cmJhbl9ydXJhbCA8LSBmYWN0b3IoZGF0JHN0YWxhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKDEsIDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJ1cmJhbiBhcmVhIiwgInJ1cmFsIGFyZWEiKSkNCg0KZGF0JG5hdGlvbmFsaXR5IDwtIGZhY3RvcihkYXQkbmF0aW9uMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygxLCAyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygic3dpc3MiLCAiZm9yZWlnbmVyIikpDQoNCmRhdCRsYW5ndWFnZSA8LSBmYWN0b3IoDQogIGRhdCRzcHJhY2hlLA0KICBsZXZlbHMgPSBjKDEsIDIsIDMpLA0KICBsYWJlbHMgPSBjKCJnZXJtYW4iLCAiZnJlbmNoIiwgIml0YWxpYW4iKQ0KKQ0KDQpzb2Npb19kZW1vZ3JhcGhpY19jb3ZhcmlhdGUgPC0gYygidXJiYW5fcnVyYWwiLCAibmF0aW9uYWxpdHkiLCAibGFuZ3VhZ2UiKQ0Kc29jaW9fZGVtb2dyYXBoaWNfY292YXJpYXRlDQpgYGANCg0KIyMjIEJpb2xvZ2ljYWwgdmFyaWFibGVzDQoNCmBgYHtyLGVjaG8gPSBUUlVFfQ0KIyBjYXRlZ29yaXplIGFnZSBpbiAzIGdyb3Vwcw0KZGF0JGFnZV9jdXRbZGF0JGFsdGVyIDwgNzBdIDwtICI2MC02OSINCmRhdCRhZ2VfY3V0W2RhdCRhbHRlciA+PSA3MCAmIGRhdCRhbHRlciA8IDgwXSA8LSAiNzAtNzkiDQpkYXQkYWdlX2N1dFtkYXQkYWx0ZXIgPj0gODBdIDwtICI4MCsiDQpkYXQkYWdlX2N1dCA8LSBhcy5mYWN0b3IoZGF0JGFnZV9jdXQpDQojIFNldCByZWZlcmVuY2UgY2F0ZWdvcnkNCmRhdCRhZ2VfY3V0IDwtIHJlbGV2ZWwoZGF0JGFnZV9jdXQsIHJlZiA9ICI2MC02OSIpDQoNCmRhdCRhZ2UgPC0gZGF0JGFsdGVyDQoNCiMgRnVuY3Rpb25hbCBsaW1pdGF0aW9ucyAodmlzaW9uLCBoZWFyaW5nLCBzcGVlY2gsIHdhbGtpbmcpDQpkYXQkRkwgPC0gZmFjdG9yKA0KICBkYXQkbGltZm9uYywNCiAgbGV2ZWxzID0gYygxLCAyLCAzLCA0KSwNCiAgbGFiZWxzID0gYygNCiAgICAiTm8gZGlmZmljdWx0eSIsDQogICAgIlNsaWdodCBkaWZmaWN1bHR5IiwNCiAgICAiR3JlYXQgZGlmZmljdWx0eSIsDQogICAgIkluYWJpbGl0eSINCiAgKQ0KKQ0KDQojIENhdGVnb3JpemUgYm1pIGludG8gNCBncm91cHMNCmRhdCRibWlfY3V0W2RhdCRibWkgPCAxOC41XSA8LSAidW5kZXJ3ZWlnaHQiDQpkYXQkYm1pX2N1dFtkYXQkYm1pID49IDE4LjUgJiBkYXQkYm1pIDwgMjVdIDwtICJub3JtYWwgd2VpZ2h0Ig0KZGF0JGJtaV9jdXRbZGF0JGJtaSA+PSAyNSAmIGRhdCRibWkgPCAzMF0gPC0gIm92ZXJ3ZWlnaHQiDQpkYXQkYm1pX2N1dFtkYXQkYm1pID49IDMwXSA8LSAib2Jlc2l0eSINCmRhdCRibWlfY3V0IDwtIGFzLmZhY3RvcihkYXQkYm1pX2N1dCkNCmRhdCRibWlfY3V0IDwtIHJlbGV2ZWwoZGF0JGJtaV9jdXQsIHJlZiA9ICJub3JtYWwgd2VpZ2h0IikgIyBzZXQgcmVmZXJlbmNlIGZvciBub3JtYWwgd2VpZ2h0IGNsYXNzDQoNCiMgU2VsZi1wZXJjZWl2ZWQgaGVhbHRoIHN0YXR1cw0KZGF0JFNIUyA8LSBmYWN0b3IoDQogIGRhdCR0c3ViZ19hbGx5ZWFycywNCiAgbGV2ZWxzID0gYygxLCAyLCAzLCA0LCA1KSwNCiAgbGFiZWxzID0gYygidmVyeSBnb29kIiwgImdvb2QiLCAiYXZlcmFnZSIsICJwb29yIiwgInZlcnkgcG9vciIpDQopIA0KDQojIFNlbGYtcGVyY2VpdmVkIGhlYWx0aCBzdGF0dXMgZm9yIG1vZGVscyAoY29sbGFwc2UgdmVyeSBnb29kIGFuZCBnb29kKQ0KDQpkYXQkU0hTX2NvbGxhcHNlZCA8LSBmYWN0b3IoDQogIGRhdCR0c3ViZ19hbGx5ZWFycywNCiAgbGV2ZWxzID0gYygxLCAyLCAzLCA0LCA1KSwNCiAgbGFiZWxzID0gYygidmVyeSBnb29kIiwgImdvb2QiLCAiYXZlcmFnZSIsICJwb29yIiwgInZlcnkgcG9vciIpDQopIA0KDQpkYXQkU0hTX2NvbGxhcHNlZCA8LSBmY3RfY29sbGFwc2UoZGF0JFNIU19jb2xsYXBzZWQsIGdvb2QgPSBjKCJ2ZXJ5IGdvb2QiLCAiZ29vZCIpKQ0KDQoNCg0KZGF0JGRpYWJldGVzIDwtIGZhY3RvcihkYXQkZGlhYmV0ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygxLCAyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygieWVzIiwgIm5vIikpDQojIFNldCByZWZlcmVuY2UgY2F0ZWdvcnkNCmRhdCRkaWFiZXRlcyA8LSByZWxldmVsKGRhdCRkaWFiZXRlcywgcmVmID0gIm5vIikNCg0KZGF0JG9zdGVvYXJ0aHJpdGlzIDwtIGZhY3RvcihkYXQkdGtyYW4xMGMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoMSwgMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoInllcyIsICJubyIpKQ0KIyBTZXQgcmVmZXJlbmNlIGNhdGVnb3J5DQpkYXQkb3N0ZW9hcnRocml0aXMgPC0gcmVsZXZlbChkYXQkb3N0ZW9hcnRocml0aXMsIHJlZiA9ICJubyIpDQoNCmRhdCRoZWFydF9hdHRhY2sgPC0gZmFjdG9yKGRhdCR0a3JhbjEwZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoMSwgMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJ5ZXMiLCAibm8iKSkNCiMgU2V0IHJlZmVyZW5jZSBjYXRlZ29yeQ0KZGF0JGhlYXJ0X2F0dGFjayA8LSByZWxldmVsKGRhdCRoZWFydF9hdHRhY2ssIHJlZiA9ICJubyIpDQoNCmRhdCRzdHJva2UgPC0gZmFjdG9yKGRhdCR0a3JhbjEwZywNCiAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoMSwgMiksDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJ5ZXMiLCAibm8iKSkNCiMgU2V0IHJlZmVyZW5jZSBjYXRlZ29yeQ0KZGF0JHN0cm9rZSA8LSByZWxldmVsKGRhdCRzdHJva2UsIHJlZiA9ICJubyIpDQoNCmRhdCR1cmluYXJ5X2luY29udGluZW5jZSA8LSBmYWN0b3IoZGF0JHRrcmFuMTBqLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKDEsIDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJ5ZXMiLCAibm8iKSkNCiMgU2V0IHJlZmVyZW5jZSBjYXRlZ29yeQ0KZGF0JHVyaW5hcnlfaW5jb250aW5lbmNlIDwtIHJlbGV2ZWwoZGF0JHVyaW5hcnlfaW5jb250aW5lbmNlLCByZWYgPSAibm8iKQ0KDQpkYXQkb3N0ZW9wb3Jvc2lzIDwtIGZhY3RvcihkYXQkdGtyYW4xMGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKDEsIDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygieWVzIiwgIm5vIikpDQojIFNldCByZWZlcmVuY2UgY2F0ZWdvcnkNCmRhdCRvc3Rlb3Bvcm9zaXMgPC0gcmVsZXZlbChkYXQkb3N0ZW9wb3Jvc2lzLCByZWYgPSAibm8iKQ0KDQoNCmJpb2xvZ2ljYWxfY292YXJpYXRlcyA8LSBjKCJhZ2VfY3V0IiwgImFnZSIsICJGTCIsICJibWlfY3V0IiwgImJtaSIsICJTSFMiLCAiZGlhYmV0ZXMiLCAib3N0ZW9hcnRocml0aXMiLCAiaGVhcnRfYXR0YWNrIiwgInN0cm9rZSIsICJ1cmluYXJ5X2luY29udGluZW5jZSIsICJvc3Rlb3Bvcm9zaXMiKQ0KYmlvbG9naWNhbF9jb3ZhcmlhdGVzDQpgYGANCg0KIyMjIEJlaGF2aW9yYWwgdmFyaWFibGVzDQoNCmBgYHtyfQ0KIyBQaHlzaWNhbCBhY3Rpdml0eSAod2Vla2x5KQ0KZGF0JGFjdGl2aXR5IDwtIGZhY3RvcigNCiAgZGF0JGFjdHBoeTMsDQogIGxldmVscyA9IGMoMSwgMiwgMyksDQogIGxhYmVscyA9IGMoImluYWN0aXZlIiwgInBhcnRpYWxseSBhY3RpdmUiLCAiYWN0aXZlIikNCikNCg0KZGF0JGFsY29ob2wgPC0gZmFjdG9yKA0KICBkYXQkYWxjY2hyb24zLA0KICBsZXZlbHMgPSBjKDEsIDIsIDMpLA0KICBsYWJlbHMgPSBjKCJhYnN0aW5lbnQiLCAibG93IHJpc2siLCAibW9kZXJhdGUgb3IgaW5jcmVhc2VkIHJpc2siKQ0KKQ0KDQpkYXQkc21va2UgPC0gZmFjdG9yKA0KICBkYXQkdGFiYWMzLA0KICBsZXZlbHMgPSBjKDEsIDIsIDMpLA0KICBsYWJlbHMgPSBjKCJubyBzbW9rZXIiLCAiZm9ybWVyIHNtb2tlciIsICJzbW9rZXIiKQ0KKQ0KDQpiZWhhdmlvcmFsX2NvdmFyaWF0ZSA8LSBjKCJhY3Rpdml0eSIsICJhbGNvaG9sIiwgInNtb2tlIikNCmJlaGF2aW9yYWxfY292YXJpYXRlDQpgYGANCg0KIyMjIFN0cmF0YWUgdmFyaWFibGUNCg0KYGBge3J9DQpkYXQkc3RyYXRhIDwtIGZhY3RvcigNCiAgZGF0JGthbnRvbiwNCiAgbGV2ZWxzID0gYygxOjI3KSwNCiAgbGFiZWxzID0gYygNCiAgICAiWnVyaWNoIiwNCiAgICAiQmVybiIsDQogICAgIkx1Y2VybmUiLA0KICAgICJVcmkiLA0KICAgICJTY2h3eXoiLA0KICAgICJPYndhbGRlbiIsDQogICAgIk5pZHdhbGRlbiIsDQogICAgIkdsYXJ1cyIsDQogICAgIlp1ZyIsDQogICAgIkZyaWJvdXJnIiwNCiAgICAiU29sb3RodXJuIiwNCiAgICAiQmFzZWwtQ2l0eSIsDQogICAgIkJhc2VsLUNvdW50cnkiLA0KICAgICJTY2hhZmZoYXVzZW4iLA0KICAgICJBcHBlbnplbGwgQXVzc2VycmhvZGVuIiwNCiAgICAiQXBwZW56ZWxsIElubmVycmhvZGVuIiwNCiAgICAiU3QuIEdhbGxlbiIsDQogICAgIkdyYXViw7xuZGVuIiwNCiAgICAiQWFyZ2F1IiwNCiAgICAiVGh1cmdhdSIsDQogICAgIlRlc3NpbiIsDQogICAgIlZhdWQiLA0KICAgICJXYWxsaXMiLA0KICAgICJOZXVjaMOidGVsIiwNCiAgICAiR2VuZXZhIiwNCiAgICAiSnVyYSIsDQogICAgIkxpZWNoc3RlbnN0ZWluIg0KICApDQopDQoNCnN0cmF0YSA8LSBjKCJzdHJhdGEiKQ0Kc3RyYXRhDQpgYGANCg0KIyMjIFdlaWdodCB2YXJpYWJsZQ0KDQpgYGB7cn0NCmRhdCR3ZWlnaHQgPC0gZGF0JHdnaHQNCg0Kd2VpZ2h0IDwtIGMoIndlaWdodCIpDQp3ZWlnaHQNCmBgYA0KDQotICAgR2V0IHZhcmlhYmxlIG5hbWVzDQoNCmBgYHtyfQ0KdmFyaWFibGVfbmFtZXMgPC0NCiAgYygNCiAgICAiZmFsbCIsDQogICAgImZhbGxfY291bnQiLA0KICAgICJnZW5kZXIiLA0KICAgICJlZHVjYXRpb24iLA0KICAgICJsYW5ndWFnZSIsDQogICAgInVyYmFuX3J1cmFsIiwNCiAgICAibmF0aW9uYWxpdHkiLA0KICAgICJzbW9rZSIsDQogICAgIkZMIiwNCiAgICAiYm1pX2N1dCIsDQogICAgImJtaSIsDQogICAgImFnZV9jdXQiLA0KICAgICJhZ2UiLA0KICAgICJTSFMiLA0KICAgICJkaWFiZXRlcyIsDQogICAgIm9zdGVvYXJ0aHJpdGlzIiwNCiAgICAiaGVhcnRfYXR0YWNrIiwNCiAgICAic3Ryb2tlIiwNCiAgICAidXJpbmFyeV9pbmNvbnRpbmVuY2UiLA0KICAgICJvc3Rlb3Bvcm9zaXMiLA0KICAgICJhY3Rpdml0eSIsDQogICAgImFsY29ob2wiLA0KICAgICJzdHJhdGEiLA0KICAgICJ3ZWlnaHQiDQogICkNCnZhcmlhYmxlX25hbWVzX2ZhbGwgPC0gICBjKA0KICAgICJmYWxsIiwNCiAgICAiZ2VuZGVyIiwNCiAgICAiZWR1Y2F0aW9uIiwNCiAgICAibGFuZ3VhZ2UiLA0KICAgICJ1cmJhbl9ydXJhbCIsDQogICAgIm5hdGlvbmFsaXR5IiwNCiAgICAic21va2UiLA0KICAgICJGTCIsDQogICAgImJtaV9jdXQiLA0KICAgICJibWkiLA0KICAgICJhZ2VfY3V0IiwNCiAgICAiYWdlIiwNCiAgICAiU0hTIiwNCiAgICAiZGlhYmV0ZXMiLA0KICAgICJvc3Rlb2FydGhyaXRpcyIsDQogICAgImhlYXJ0X2F0dGFjayIsDQogICAgInN0cm9rZSIsDQogICAgInVyaW5hcnlfaW5jb250aW5lbmNlIiwNCiAgICAib3N0ZW9wb3Jvc2lzIiwNCiAgICAiYWN0aXZpdHkiLA0KICAgICJhbGNvaG9sIiwNCiAgICAic3RyYXRhIiwNCiAgICAid2VpZ2h0Ig0KICApDQp2YXJpYWJsZV9uYW1lc19mYWxsX2NvdW50IDwtICBjKA0KICAgICJmYWxsX2NvdW50IiwNCiAgICAiZ2VuZGVyIiwNCiAgICAiZWR1Y2F0aW9uIiwNCiAgICAibGFuZ3VhZ2UiLA0KICAgICJ1cmJhbl9ydXJhbCIsDQogICAgIm5hdGlvbmFsaXR5IiwNCiAgICAic21va2UiLA0KICAgICJGTCIsDQogICAgImJtaV9jdXQiLA0KICAgICJibWkiLA0KICAgICJhZ2VfY3V0IiwNCiAgICAiYWdlIiwNCiAgICAiU0hTIiwNCiAgICAiZGlhYmV0ZXMiLA0KICAgICJvc3Rlb2FydGhyaXRpcyIsDQogICAgImhlYXJ0X2F0dGFjayIsDQogICAgInN0cm9rZSIsDQogICAgInVyaW5hcnlfaW5jb250aW5lbmNlIiwNCiAgICAib3N0ZW9wb3Jvc2lzIiwNCiAgICAiYWN0aXZpdHkiLA0KICAgICJhbGNvaG9sIiwNCiAgICAic3RyYXRhIiwNCiAgICAid2VpZ2h0Ig0KICApDQoNCnZhcmlhYmxlX25hbWVzX25vZ2VuZGVyIDwtDQogIGMoDQogICAgImZhbGwiLA0KICAgICJmYWxsX2NvdW50IiwNCiAgICAiZWR1Y2F0aW9uIiwNCiAgICAibGFuZ3VhZ2UiLA0KICAgICJ1cmJhbl9ydXJhbCIsDQogICAgIm5hdGlvbmFsaXR5IiwNCiAgICAic21va2UiLA0KICAgICJGTCIsDQogICAgImJtaV9jdXQiLA0KICAgICJibWkiLA0KICAgICJhZ2VfY3V0IiwNCiAgICAiYWdlIiwNCiAgICAiU0hTIiwNCiAgICAiZGlhYmV0ZXMiLA0KICAgICJvc3Rlb2FydGhyaXRpcyIsDQogICAgImhlYXJ0X2F0dGFjayIsDQogICAgInN0cm9rZSIsDQogICAgInVyaW5hcnlfaW5jb250aW5lbmNlIiwNCiAgICAib3N0ZW9wb3Jvc2lzIiwNCiAgICAiYWN0aXZpdHkiLA0KICAgICJhbGNvaG9sIiwNCiAgICAic3RyYXRhIiwNCiAgICAid2VpZ2h0Ig0KICApDQpgYGANCg0KIyMgU3Vic2V0IHRoZSBkYXRhc2V0ICgqeWVhciwgc2V4KikNCg0KYGBge3J9DQpkYXRfMDcgPC0gc3Vic2V0KGRhdCwgaW50amFociA9PSAyMDA3KQ0KZGF0XzEyIDwtIHN1YnNldChkYXQsIGludGphaHIgPT0gMjAxMikNCmRhdF8xNyA8LSBzdWJzZXQoZGF0LCBpbnRqYWhyID09IDIwMTcpICMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMNCmRhdF8xN19tIDwtIHN1YnNldChkYXRfMTcsIGdlbmRlciA9PSAibWFuIikNCmRhdF8xN19mIDwtIHN1YnNldChkYXRfMTcsIGdlbmRlciA9PSAid29tYW4iKQ0KYGBgDQoNCiMjIFZhcmlhYmxlIHNlbGVjdGlvbjoNCg0KYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZGF0XzE3X3NlbGVjdCA8LSBzZWxlY3QoZGF0XzE3LCB2YXJpYWJsZV9uYW1lcykNCmRhdF8xN19zZWxlY3RfbSA8LSBzZWxlY3QoZGF0XzE3X20sIHZhcmlhYmxlX25hbWVzKQ0KZGF0XzE3X3NlbGVjdF9mIDwtIHNlbGVjdChkYXRfMTdfZiwgdmFyaWFibGVfbmFtZXMpDQpEYXRhRXhwbG9yZXI6OnBsb3Rfc3RyKGRhdF8xN19zZWxlY3QsIHByaW50X25ldHdvcmsgPSBUUlVFKQ0KYGBgDQoNCiMjIENvZGVib29rIChNZXRhZGF0YSkNCg0KYGBge3J9DQpjb2RlYm9va19kYXRfMTdfc2VsZWN0PC1jb2RlYm9vazo6Y29kZWJvb2tfdGFibGUoZGF0XzE3X3NlbGVjdCkNCmBgYA0KDQojIFN1bW1hcnkgKHVud2VpZ2h0ZWQpIHNhbXBsZQ0KDQojIyBDaGVjayBtaXNzaW5nIHZhbHVlcw0KDQpUaGUgdmFyaWFibGUgYGRpYWJldGVzYCBoYXMgdGhlIG1vc3QgbWlzc2luZyB2YWx1ZXMgYmVjYXVzZSBvZiBhIHByb3h5IHF1ZXN0aW9uICh0aGUgcXVlc3Rpb24gd2FzIG5vdCBhc2tlZCBiZWNhdXNlIG9mIGEgcHJldmlvdXMgcXVlc3Rpb24pLiBGb3IgdGhlIGZ1cnRoZXIgY2FsY3VsYXRpb25zLCB0aGUgY29tcGxldGUtY2FzZS1hbmFseXNpcyB3YXMgYXBwbGllZCwgYXMgdGhpcyBwcm9jZWR1cmUgd2FzIGFsc28gdXNlZCBpbiBwcmV2aW91cyBzdHVkaWVzLiBUaGVyZWZvciBtaXNzaW5nIHZhbHVlcyB3ZXJlIGV4Y2x1ZGVkIGJlY2F1c2UgdGhlaXIgdHlwZXMgY2Fubm90IGJlIGlkZW50aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBjbGFzc2VzIG9mIFJ1YmluIGV0IGFsLiBbQHJ1YmluMTk3Nl0uDQoNCmBgYHtyIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRX0NCkRhdGFFeHBsb3Jlcjo6cGxvdF9taXNzaW5nKGRhdF8xN19zZWxlY3QsIHRpdGxlID0gIk1pc3NpbmcgdmFsdWVzIFNISVMgMjAxNyIpDQpEYXRhRXhwbG9yZXI6OnBsb3RfbWlzc2luZyhkYXRfMTdfc2VsZWN0X20sIHRpdGxlID0gIk1pc3NpbmcgdmFsdWVzIFNISVMgKG1hbGUpIDIwMTciKQ0KRGF0YUV4cGxvcmVyOjpwbG90X21pc3NpbmcoZGF0XzE3X3NlbGVjdF9mLCB0aXRsZSA9ICJNaXNzaW5nIHZhbHVlcyBTSElTIChmZW1hbGUpIDIwMTciKQ0KYGBgDQoNCi0gICBNaXNzaW5nLXBhdHRlcm4gb3ZlciBhbGwgdmFyaWFibGVzDQoNCmBgYHtyIHJlc3VsdHM9J2hpZGUnfQ0KbWljZTo6bWQucGF0dGVybihkYXRfMTdfc2VsZWN0KQ0KYGBgDQoNCi0gICBNaXNzaW5nLXBhdHRlcm4gaW4gZmFsbCwgYm1pLCBvc3Rlb2FydGhyaXRpcywgYWxjb2hvbCwgYWN0aXZpdHksIGRpYWJldGVzOg0KDQpgYGB7ciByZXN1bHRzPSdoaWRlJ30NCm1pY2U6Om1kLnBhdHRlcm4oc2VsZWN0KGRhdF8xN19zZWxlY3QsICJmYWxsIiwgImJtaSIsICJvc3Rlb2FydGhyaXRpcyIsICJhbGNvaG9sIiwgImFjdGl2aXR5IiwgImRpYWJldGVzIikpICMgc2VsZWN0IHZhcmlhYmxlcyB3aXRoIG92ZXIgMC41JSBtaXNzaW5nIHZhbHVlcw0KYGBgDQoNCi0gICBNaXNzaW5nIHZhbHVlcyBpbiBhZ2UgLSBibWkgKGhpc3RvZ3JhbSkNCg0KYGBge3J9DQpWSU06Omhpc3RNaXNzKGRhdF8xN19zZWxlY3RbLCBjKCJhZ2UiLCAiYm1pIildKQ0KYGBgDQoNCiMjIERlc2NyaXB0aXZlIHN0YXRpc3RpY3Mgey50YWJzZXR9DQoNCiMjIyBTdW1tYXJ5IHRhYmxlIG9mIHRoZSBkYXRhDQoNCmBgYHtyIHdhcm5pbmcgPSBGQUxTRX0NCmRhdF8xN19zZWxlY3RfZGVzY3JpYmUgPC0gSG1pc2M6OmRlc2NyaWJlKGRhdF8xN19zZWxlY3QpDQpIbWlzYzo6aHRtbChkYXRfMTdfc2VsZWN0X2Rlc2NyaWJlLCBzaXplID0gODAsIHRpdGxlID0gIlNISVMgZGF0YXNldCAyMDE3IikNCmBgYA0KDQojIyMgTWlzc2luZyB2YWx1ZSBwbG90DQoNCmBgYHtyfQ0KZGF0XzE3X3NlbGVjdF9kZXNjcmliZV9wbG90IDwtIHBsb3QoZGF0XzE3X3NlbGVjdF9kZXNjcmliZSkNCmRhdF8xN19zZWxlY3RfZGVzY3JpYmVfcGxvdCRDYXRlZ29yaWNhbA0KZGF0XzE3X3NlbGVjdF9kZXNjcmliZV9wbG90JENvbnRpbnVvdXMNCmBgYA0KDQojIyMgVmFyaWFibGVzIHN0cmF0aWZpZWQgYnkgZmFsbA0KDQpgYGB7cn0NCnRhYmxlb25lOjpDcmVhdGVUYWJsZU9uZShkYXRhID0gZGF0XzE3X3NlbGVjdCwgc3RyYXRhID0gImZhbGwiLCBpbmNsdWRlTkEgPSBUUlVFKQ0KYGBgDQoNCiMjIyBVbml2YXJpYXRlIGRpc3RyaWJ1dGlvbg0KDQojIyMjIEJhciBjaGFydCAoYnkgZnJlcXVlbmN5KQ0KDQpgYGB7cn0NCkRhdGFFeHBsb3Jlcjo6cGxvdF9iYXIoZGF0XzE3X3NlbGVjdCkNCmBgYA0KDQojIyMjIEJhciBjaGFydCBieSBmYWxsDQoNCmBgYHtyfQ0KRGF0YUV4cGxvcmVyOjpwbG90X2JhcihkYXRfMTdfc2VsZWN0KQ0KYGBgDQoNCiMjIyMgSGlzdG9ncmFtDQoNCi0gICBhZ2UgYW5kIGJtaQ0KDQpgYGB7ciBlY2hvPVRSVUV9DQpwbG90X2hpc3RvZ3JhbShkYXRfMTdfc2VsZWN0WywgYygiYWdlIiwgImJtaSIpXSkNCmBgYA0KDQojIyMjIFFRLVBsb3QNCg0KLSAgIGFnZSBhbmQgYm1pDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0V9DQpxcV9kYXRhIDwtIGRhdF8xN19zZWxlY3RbLCBjKCJhZ2UiLCAiYm1pIildDQoNCkRhdGFFeHBsb3Jlcjo6cGxvdF9xcShxcV9kYXRhKQ0KIyBRdWFudGlsZS1RdWFudGlsZSBwbG90IHRvIHZpc3VhbGl6ZSB0aGUgZGV2aWF0aW9uIGZyb20gcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uLg0KYGBgDQoNCi0gICBibWkgc2VlbXMgc2tld2VkIG9uIGJvdGggdGFpbHMsIGFwcGx5IGEgc2ltcGxlIGxvZyB0cmFuc2Zvcm1hdGlvbg0KDQpgYGB7ciBlY2hvPVRSVUUsIHdhcm5pbmc9RkFMU0V9DQpsb2dfcXFfZGF0YSA8LSBEYXRhRXhwbG9yZXI6OnVwZGF0ZV9jb2x1bW5zKHFxX2RhdGEsIDIsIGZ1bmN0aW9uKHgpIGxvZyh4ICsgMSkpDQpwbG90X3FxKGxvZ19xcV9kYXRhWyJibWkiXSkNCmBgYA0KDQojIyMgQ29ycmVsYXRpb24gQW5hbHlzaXMNCg0KYGBge3J9DQpwbG90X2NvcnJlbGF0aW9uKG5hLm9taXQoZGF0XzE3X3NlbGVjdFssIGMoImFnZSIsICJibWkiKV0pLCB0eXBlID0gImMiKSAjb25seSBjb250aW51b3VzDQpgYGANCg0KYGBge3IgZmlnMSwgZmlnLmhlaWdodCA9IDEwLCBmaWcud2lkdGggPSAxMCwgd2FybmluZz1GQUxTRX0NCnBsb3RfY29ycmVsYXRpb24obmEub21pdChkYXRfMTdfc2VsZWN0W3ZhcmlhYmxlX25hbWVzX2ZhbGxdKSwgdHlwZSA9ICJkIiwgbWF4Y2F0ID0gNUwsIGdlb21fdGV4dF9hcmdzID0gKHNpemUgPSAwLjA1KSkgI29ubHkgZGVzY3JldGUNCmBgYA0KDQpgYGB7cn0NCiMgQml2YXJpYXRlIFN1bW1hcmllcyBDb21wdXRlZCBTZXBhcmF0ZWx5IGJ5IGEgU2VyaWVzIG9mIFByZWRpY3RvcnMNCnZhci5zdW1tIDwtIHNwZWFybWFuMihmYWxsfiAuLCBkYXRhID0gbmEub21pdChkYXRfMTdfc2VsZWN0W3ZhcmlhYmxlX25hbWVzX2ZhbGxdKSkNCnBsb3QodmFyLnN1bW0sIGNleCA9IDAuOCkNCmBgYA0KDQojIyMjIElkZW50aWZ5IGNvbGxpbmVhciBwcmVkaWN0b3JzDQoNCmBgYHtyfQ0KIyBWYXJpYWJsZSBDbHVzdGVyaW5nOiAgDQojIGhjbHVzdCBoaWVyYXJjaGljYWwgY2x1c3RlcmluZyBmdW5jdGlvbg0KIyBkZWZhdWx0IGlzIHNxdWFyZWQgU3BlYXJtYW4gY29ycmVsYXRpb24gY29lZmZpY2llbnRzDQojIHRvIGRldGVjdCBtb25vdG9uaWMgYnV0IG5vbmxpbmVhciByZWxhdGlvbnNoaXBzDQp2YXIuY2x1c3RlciA8LSBIbWlzYzo6dmFyY2x1cyh+LiwgZGF0YSA9IGRhdF8xN19zZWxlY3RbYygNCiAgICAiZmFsbCIsDQogICAgImdlbmRlciIsDQogICAgImVkdWNhdGlvbiIsDQogICAgImxhbmd1YWdlIiwNCiAgICAidXJiYW5fcnVyYWwiLA0KICAgICJuYXRpb25hbGl0eSIsDQogICAgInNtb2tlIiwNCiAgICAiRkwiLA0KICAgICJibWlfY3V0IiwNCiAgICAiYm1pIiwNCiAgICAiYWdlX2N1dCIsDQogICAgImFnZSIsDQogICAgIlNIUyIsDQogICAgImRpYWJldGVzIiwNCiAgICAib3N0ZW9hcnRocml0aXMiLA0KICAgICJoZWFydF9hdHRhY2siLA0KICAgICJzdHJva2UiLA0KICAgICJ1cmluYXJ5X2luY29udGluZW5jZSIsDQogICAgIm9zdGVvcG9yb3NpcyIsDQogICAgImFjdGl2aXR5IiwNCiAgICAiYWxjb2hvbCIpXSkNCiMgdmFyLmNsdXN0ZXINCnBsb3QodmFyLmNsdXN0ZXIsIGFiYnJldj1GQUxTRSwgY2V4ID0gMC44KQ0KYGBgDQoNCiMjIyBCb3hwbG90cw0KDQpgYGB7ciB3YXJuaW5nPUZBTFNFfQ0KIyBWaXN1YWxpemUgdGhlIGRpc3RyaWJ1dGlvbiBvZiBhbGwgY29udGludW91cyBmZWF0dXJlcyBiYXNlZCBvbiBmYWxsIHdpdGggYSBib3hwbG90DQpEYXRhRXhwbG9yZXI6OnBsb3RfYm94cGxvdChkYXRfMTdfc2VsZWN0LCBieSA9ICJmYWxsIikNCmBgYA0KDQojIyMgQ29udHJvbCBvZiB0aGUgZGF0YWZyYW1lIHNpemUsIGkuZS4gZXh0ZW50IG9mIG1pc3NpbmcgdmFsdWVzDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCmRhdF8xN19zZWxlY3RfZmFsbCA8LSBzZWxlY3QoZGF0XzE3LCB2YXJpYWJsZV9uYW1lc19mYWxsKSAjIGNyZWF0ZSBkYXRhc2V0IHdpdGhvdXQgZmFsbF9jb3VudCB2YXJpYWJsZQ0KZGF0XzE3X3NlbGVjdF9mYWxsX2NvdW50IDwtIHNlbGVjdChkYXRfMTcsIHZhcmlhYmxlX25hbWVzX2ZhbGxfY291bnQpICMgY3JlYXRlIGRhdGFzZXQgd2l0aG91dCBmYWxsIHZhcmlhYmxlDQoNCmRhdF8xN19zZWxlY3Rfbm9fbWlzc2luZ19mYWxsIDwtIGFzLmRhdGEuZnJhbWUobmEub21pdChkYXRfMTdfc2VsZWN0X2ZhbGwpKQ0KZGF0XzE3X3NlbGVjdF9ub19taXNzaW5nX2ZhbGxfY291bnQgPC0gYXMuZGF0YS5mcmFtZShuYS5vbWl0KGRhdF8xN19zZWxlY3RfZmFsbF9jb3VudCkpDQoNCmRpbShkYXRfMTdfc2VsZWN0KSAjIGFsbCB2YXJpYWJsZXMgd2l0aCBtaXNzaW5ncw0KZGltKGRhdF8xN19zZWxlY3RfZmFsbCkgIyBhbGwgdmFyaWFibGVzIGZhbGwgZGF0YXNldA0KZGltKGRhdF8xN19zZWxlY3RfZmFsbF9jb3VudCkgIyBhbGwgdmFyaWFibGVzIGNvdW50X2ZhbGwgZGF0YXNldA0KZGltKGRhdF8xN19zZWxlY3Rfbm9fbWlzc2luZ19mYWxsKSAjIHdpdGhvdXQgbWlzc2luZ3MgZmFsbCBkYXRhc2V0DQpkaW0oZGF0XzE3X3NlbGVjdF9ub19taXNzaW5nX2ZhbGxfY291bnQpICMgd2l0aG91dCBtaXNzaW5ncyBmYWxsX2NvdW50IGRhdGFzZXQ7IExvdCBvZiBtaXNzaW5ncyBhcmUgZHVlIHRvIG5vIHF1ZXN0aW9uaW5nIGlmIG5vIGZhbGwgaGFzIGhhcHBlbmVkLg0KYGBgDQoNCiMgU3VydmV5ZGVzaWduDQoNCiMjIENyZWF0aW5nL3N1YnNldCAod2VpZ2h0ZWQpIHN1cnZleS5kZXNpZ24tb2JqZWN0DQoNCi0gICAoKnllYXIsIHNleCkqDQoNCmBgYHtyfQ0Kd2RhdDwtc3Z5ZGVzaWduKGlkID0gfmlkbm8sIHN0cmF0YSA9IH5rYW50b24sIHdlaWdodHMgPSB+d2dodCwgbmVzdCA9IFQsIGRhdGEgPSBkYXQpDQp3ZGF0XzA3PC1zdnlkZXNpZ24oaWQgPSB+aWRubywgc3RyYXRhID0gfmthbnRvbiwgd2VpZ2h0cyA9IH53Z2h0LCBuZXN0ID0gVCwgZGF0YSA9IGRhdF8wNykNCndkYXRfMTI8LXN2eWRlc2lnbihpZCA9IH5pZG5vLCBzdHJhdGEgPSB+a2FudG9uLCB3ZWlnaHRzID0gfndnaHQsIG5lc3QgPSBULCBkYXRhID0gZGF0XzEyKQ0Kd2RhdF8xNzwtc3Z5ZGVzaWduKGlkID0gfmlkbm8sIHN0cmF0YSA9IH5rYW50b24sIHdlaWdodHMgPSB+d2dodCwgbmVzdCA9IFQsIGRhdGEgPSBkYXRfMTcpDQp3ZGF0XzE3X20gPC0gc3Vic2V0KHdkYXRfMTcsIGdlbmRlciA9PSJtYW4iKQ0Kd2RhdF8xN19mIDwtIHN1YnNldCh3ZGF0XzE3LCBnZW5kZXIgPT0gIndvbWFuIikNCmBgYA0KDQojIyBWYXJpYWJsZSBzZWxlY3Rpb24NCg0KLSAgIFNhbWUgYXMgcHJldmlvdXMgaW4gdGhlICh1bndlaWdodGVkKSBkYXRhc2V0DQoNCiMgU3VtbWFyeSB3ZWlnaHRlZCBzdGF0aXN0aWNzDQoNCiMjIEZhbGxzIGJ5IHNleCBTSElTIDIwMDcsIDIwMTIsICoqMjAxNyoqDQoNCmBgYHtyfQ0KZmFsbF95ZWFyX2dlbmRlcl9zdnkgPC0gc3Z5YnkoZm9ybXVsYSA9IH5mYWxsLCANCiAgICAgIGJ5ID0gfmludGphaHIgKyBnZW5kZXIsIA0KICAgICAgZGVzaWduID0gd2RhdCwgDQogICAgICBGVU4gPSBzdnltZWFuLCANCiAgICAgIG5hLnJtID0gVFJVRSwgDQogICAgICBrZWVwLm5hbWVzID0gRkFMU0UpDQojIGRhdGF0YWJsZShmYWxsX3llYXJfZ2VuZGVyX3N2eSwgZmlsdGVyID0gJ3RvcCcpDQpkb2RnZSA8LSBwb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjkpDQoNCmZhbGxfeWVhcl9nZW5kZXJfc3Z5XzE8LWdncGxvdChkYXRhID0gZmFsbF95ZWFyX2dlbmRlcl9zdnksIG1hcHBpbmcgPSBhZXMoeCA9IGZhY3RvcihpbnRqYWhyKSwgeSA9IGBmYWxsZmFsbCBsYXN0IDEyIG1vbnRoc2AsIHltaW4gPSBgZmFsbGZhbGwgbGFzdCAxMiBtb250aHNgLSgyKmBzZS5mYWxsZmFsbCBsYXN0IDEyIG1vbnRoc2ApLCB5bWF4ID0gYGZhbGxmYWxsIGxhc3QgMTIgbW9udGhzYCsoMipgc2UuZmFsbGZhbGwgbGFzdCAxMiBtb250aHNgKSwgZmlsbCA9IGdlbmRlcikpICsNCiAgIGdlb21fYmFyKHBvc2l0aW9uPSJkb2RnZSIsIHN0YXQ9ImlkZW50aXR5IikgKyANCiAgIGxhYnMoeSA9ICAiUHJvcF9mYWxsIiwgeCA9ICJZZWFyIikgKyANCiAgIGdlb21fZXJyb3JiYXIod2lkdGggPSAwLjIsIHNpemUgPSAzLCBwb3NpdGlvbiA9IGRvZGdlKSArIGxhYnMoZmlsbCA9ICJHZW5kZXIiKQ0KZmFsbF95ZWFyX2dlbmRlcl9zdnlfMjwtZmFsbF95ZWFyX2dlbmRlcl9zdnlfMSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpDQpnZ3Bsb3RseShmYWxsX3llYXJfZ2VuZGVyX3N2eV8yKQ0KYGBgDQoNCiMjIFRhYmxlIDEgey50YWJzZXR9DQoNClRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIHVzZWQgdG8gY3JlYXRlICpUYWJsZSAxKiBvZiB0aGUgcHVibGljYXRpb24uDQoNCkZvciBlYWNoIHZhcmlhYmxlIG9mIGludGVyZXN0LCB0aGUgbnVtYmVyIG9mIHJlc3BvbmRlbnRzIGluIGVhY2ggZ3JvdXAsIHRoZSAod2VpZ2h0ZWQpIHBlcmNlbnRhZ2VzIG9mIHRoZSBwb3B1bGF0aW9uIGluIGVhY2ggZ3JvdXAgYW5kIHRoZSAod2VpZ2h0ZWQpIHBlcmNlbnRhZ2VzIG9mIHRoZSBwb3B1bGF0aW9uIHdpdGggdGhlIG91dGNvbWUgb2YgaW50ZXJlc3QgcGVyIGdyb3VwIHdlcmUgY2FsY3VsYXRlZCBzZXBhcmF0bHkgZm9yIG1lbiBhbmQgd29tZW4uIEZvciBhbGwgd2VpZ2h0ZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMgZm9yIHByb3BvcnRpb25zLCB0aGUgUmFvLVNjb3R0IG1ldGhvZCB3YXMgdXNlZCBbQHJhbzE5ODRdLiBTaW5jZSBpdCB1c2VzIGEgc2NhbGVkIGNoaS1zcXVhcmVkIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIGxvZy1saWtlbGlob29kIGZyb20gYSBiaW5vbWlhbCBkaXN0cmlidXRpb24sIGl0IGNhbiBiZSBtb3JlIGFjY3VyYXRlIG5lYXIgMCBhbmQgMS4gRm9yIHRoaXMgcHVycG9zZSwgdGhlIGZ1bmN0aW9uIFtgc3Z5Y2lwcm9wKClgXShodHRwczovL3d3dy5yZG9jdW1lbnRhdGlvbi5vcmcvcGFja2FnZXMvc3VydmV5L3ZlcnNpb25zLzQuMS0xL3RvcGljcy9zdnljaXByb3ApIGZyb20gdGhlIHBhY2thZ2UgW3N1cnZleV0oaHR0cDovL2NyYW4uZmhjcmMub3JnL3dlYi9wYWNrYWdlcy9zdXJ2ZXkvaW5kZXguaHRtbCkgYnkgVGhvbWFzIEx1bWxleSB3YXMgdXNlZCBbQGx1bWxleTIwMTBdLg0KDQojIyMgU3VtbWFyeSByb3cgdG90YWwNCg0KYGBge3J9DQpvcHRpb25zKHdpZHRoID0gNTAwKQ0KUm93XzE8LXN2eUNyZWF0ZVRhYmxlT25lKHZhcnMgPSAiZmFsbCIsIGRhdGEgPSB3ZGF0XzE3LCBpbmNsdWRlTkEgPSBUUlVFKQ0KcHJpbnQoUm93XzEsIHNob3dBbGxMZXZlbHMgPSBUUlVFLCBpbmNsdWRlTkEgPSBUUlVFLCBjb250RGlnaXQgPSAxKQ0KYGBgDQoNCiMjIyBTdW1tYXJ5IHJvdyB0b3RhbCBtZW4gJiB3b21lbg0KDQpgYGB7cn0NCiMgdG90YWwgZmFsbA0KUm93XzFfQ0lfZmFsbDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTcsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQpSb3dfMV9DSV9mYWxsDQoNCiMgdG90YWwgd29tYW4NClJvd18xX0NJX3dvbWFuPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShnZW5kZXIgPT0gIndvbWFuIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xNywNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNClJvd18xX0NJX3dvbWFuDQoNCiMgdG90YWwgbWFuDQpSb3dfMV9DSV9tYW48LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGdlbmRlciA9PSAibWFuIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xNywNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNClJvd18xX0NJX21hbg0KDQojIFByb3BvcnRpb24gZmFsbCAlIChDSSA5NSkgYnkgZ2VuZGVyDQp0YWJfYW1vdW50X2ZhbGxfdG90X2dlbmRlciA8LSBzdnlieSgNCiAgZm9ybXVsYSA9IH5JKGZhbGwgPT0gImZhbGwgbGFzdCAxMiBtb250aHMiKSwNCiAgYnkgPSB+IGdlbmRlciwNCiAgZGVzaWduID0gd2RhdF8xNywNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF90b3RfZ2VuZGVyDQpgYGANCg0KIyMjIFN1bW1hcnkgKHVud2VpZ2h0ZWQpIHNhbXBsZSAoKm4qKQ0KDQpgYGB7cn0NCm9wdGlvbnMod2lkdGggPSA1MDApDQoNCnNhbXBsZV9zaXplX2dlbmRlcjwtIHRhYmxlb25lOjpDcmVhdGVUYWJsZU9uZShkYXRhID0gZGF0XzE3X3NlbGVjdCwgc3RyYXRhID0gImdlbmRlciIsIGluY2x1ZGVOQSA9IFRSVUUpDQpzYW1wbGVfc2l6ZV9nZW5kZXJhPC1wcmludChzYW1wbGVfc2l6ZV9nZW5kZXIsIHNob3dBbGxMZXZlbHMgPSBUUlVFLCBpbmNsdWRlTkEgPSBUUlVFLCBjb250RGlnaXQgPSAwKQ0KIyBUbyBleHBvcnQgdG8gRXhjZWwtZm9ybWF0DQojIHdyaXRlLmNzdjIoc2FtcGxlX3NpemVfZ2VuZGVyYSwgInNhbXBsZV9zaXplLmNzdiIpDQpgYGANCg0KIyMjIFN1bW1hcnkgKHdlaWdodGVkKSBwb3B1bGF0aW9uIChOKSBmb3IgbWVuICYgd29tZW4NCg0KLSAgIHRvIGdldCB0aGUgbWlzc2luZyB2YWx1ZXMgKE5BKToNCg0KYGBge3J9DQpSb3dfMl9OQTwtc3Z5Q3JlYXRlVGFibGVPbmUodmFycyA9IGModmFyaWFibGVfbmFtZXMpLCBzdHJhdGEgPSAiZ2VuZGVyIiwgZGF0YSA9IHdkYXRfMTcsIGluY2x1ZGVOQSA9IFRSVUUsIHRlc3QgPSBUUlVFKSAjIHdpdGggTkENClJvd18yX05BYTwtIHByaW50KFJvd18yX05BLCBzaG93QWxsTGV2ZWxzID0gVFJVRSwgaW5jbHVkZU5BID0gVFJVRSwgY29udERpZ2l0ID0gMCkNCiMgVG8gZXhwb3J0IHRvIEV4Y2VsLWZvcm1hdA0KIyB3cml0ZS5jc3YyKFJvd18yX05BYSwgZmlsZSA9ICJSb3dfMk5BLmNzdiIpDQpgYGANCg0KLSAgIHRvIGdldCB0aGUgdC10ZXN0IG1lYW4gb2Ygd2VpZ2h0ZWQgY2hhcmFjdGVyaXN0aWNzIG1lbiB2cy4gd29tZW46DQoNCmBgYHtyfQ0KUm93XzI8LXN2eUNyZWF0ZVRhYmxlT25lKHZhcnMgPSBjKHZhcmlhYmxlX25hbWVzKSwgc3RyYXRhID0gImdlbmRlciIsIGRhdGEgPSB3ZGF0XzE3LCBpbmNsdWRlTkEgPSBGQUxTRSwgdGVzdCA9IFRSVUUpICMgd2l0aG91dCBOQSBhbmQgdC10ZXN0IGdlbmRlcg0KUm93XzJhPC1wcmludChSb3dfMiwgc2hvd0FsbExldmVscyA9IFRSVUUsIGluY2x1ZGVOQSA9IEZBTFNFLCBjb250RGlnaXQgPSAwKQ0KIyBUbyBleHBvcnQgdG8gRXhjZWwtZm9ybWF0DQojIHdyaXRlLmNzdjIoUm93XzJhLCBmaWxlID0gIlJvd18yLmNzdiIpDQpgYGANCg0KIyMjIFN1bW1hcnkgcHJvcG9ydGlvbiAoJSkgYW5kIGNvbmZpZGVuY2UgaW50ZXJ2YWwgKENJIDk1JSkgb2YgcG9wdWxhdGlvbiAod2VpZ2h0ZWQgbnVtYmVyIG9mIHBlb3BsZSkgYnkgY2hhcmFjdGVyaXN0aWMNCg0KIyMjIyBNZW4NCg0KYGBge3J9DQojIG1lbg0KIyBlZHVjYXRpb24NClJvd180X2NvbXB1bHNvcnlfZWR1Y2F0aW9uX208LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGVkdWNhdGlvbiA9PSAiY29tcHVsc29yeSBlZHVjYXRpb24iKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfY29tcHVsc29yeV9lZHVjYXRpb25fbSoxMDApWzFdDQpSb3dfNF9jb21wdWxzb3J5X2VkdWNhdGlvbl9tX0NJID0gYXR0cihSb3dfNF9jb21wdWxzb3J5X2VkdWNhdGlvbl9tLCJjaSIpDQpSb3dfNF9jb21wdWxzb3J5X2VkdWNhdGlvbl9tX0NJKjEwMA0KDQpSb3dfNF91cHBlcl9zZWNvbmRhcnlfZWR1Y2F0aW9uX20gPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShlZHVjYXRpb24gPT0gInVwcGVyIHNlY29uZGFyeSBlZHVjYXRpb24iKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfdXBwZXJfc2Vjb25kYXJ5X2VkdWNhdGlvbl9tKjEwMClbMV0NClJvd180X3VwcGVyX3NlY29uZGFyeV9lZHVjYXRpb25fbV9DSSA9IGF0dHIoUm93XzRfdXBwZXJfc2Vjb25kYXJ5X2VkdWNhdGlvbl9tLCJjaSIpDQpSb3dfNF91cHBlcl9zZWNvbmRhcnlfZWR1Y2F0aW9uX21fQ0kqMTAwDQoNClJvd180X3RlcnRpYXJ5X2VkdWNhdGlvbl9tIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoZWR1Y2F0aW9uID09ICJ0ZXJ0aWFyeSBlZHVjYXRpb24iKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfdGVydGlhcnlfZWR1Y2F0aW9uX20qMTAwKVsxXQ0KUm93XzRfdGVydGlhcnlfZWR1Y2F0aW9uX21fQ0kgPSBhdHRyKFJvd180X3RlcnRpYXJ5X2VkdWNhdGlvbl9tLCJjaSIpDQpSb3dfNF90ZXJ0aWFyeV9lZHVjYXRpb25fbV9DSSoxMDANCg0KIyBsYW5ndWFnZQ0KUm93XzRfZ2VybWFuX208LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGxhbmd1YWdlID09ICJnZXJtYW4iKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfZ2VybWFuX20qMTAwKVsxXQ0KUm93XzRfZ2VybWFuX21fQ0kgPSBhdHRyKFJvd180X2dlcm1hbl9tLCJjaSIpDQpSb3dfNF9nZXJtYW5fbV9DSSoxMDANCg0KUm93XzRfZnJlbmNoX20gPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShsYW5ndWFnZSA9PSAiZnJlbmNoIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X2ZyZW5jaF9tKjEwMClbMV0NClJvd180X2ZyZW5jaF9tX0NJID0gYXR0cihSb3dfNF9mcmVuY2hfbSwiY2kiKQ0KUm93XzRfZnJlbmNoX21fQ0kqMTAwDQoNClJvd180X2l0YWxpYW5fbSA8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGxhbmd1YWdlID09ICJpdGFsaWFuIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X2l0YWxpYW5fbSoxMDApWzFdDQpSb3dfNF9pdGFsaWFuX21fQ0kgPSBhdHRyKFJvd180X2l0YWxpYW5fbSwiY2kiKQ0KUm93XzRfaXRhbGlhbl9tX0NJKjEwMA0KDQojIHVyYmFuX3J1cmFsDQpSb3dfNF91cmJhbl9hcmVhX208LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKHVyYmFuX3J1cmFsID09ICJ1cmJhbiBhcmVhIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X3VyYmFuX2FyZWFfbSoxMDApWzFdDQpSb3dfNF91cmJhbl9hcmVhX21fQ0kgPSBhdHRyKFJvd180X3VyYmFuX2FyZWFfbSwiY2kiKQ0KUm93XzRfdXJiYW5fYXJlYV9tX0NJKjEwMA0KDQpSb3dfNF9ydXJhbF9hcmVhbl9tIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkodXJiYW5fcnVyYWwgPT0gInJ1cmFsIGFyZWEiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfcnVyYWxfYXJlYW5fbSoxMDApWzFdDQpSb3dfNF9ydXJhbF9hcmVhbl9tX0NJID0gYXR0cihSb3dfNF9ydXJhbF9hcmVhbl9tLCJjaSIpDQpSb3dfNF9ydXJhbF9hcmVhbl9tX0NJKjEwMA0KDQojIG5hdGlvbmFsaXR5DQpSb3dfNF9zd2lzc19tPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShuYXRpb25hbGl0eSA9PSAic3dpc3MiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfc3dpc3NfbSoxMDApWzFdDQpSb3dfNF9zd2lzc19tX0NJID0gYXR0cihSb3dfNF9zd2lzc19tLCJjaSIpDQpSb3dfNF9zd2lzc19tX0NJKjEwMA0KDQpSb3dfNF9mb3JlaWduZXJfbSA8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKG5hdGlvbmFsaXR5ID09ICJmb3JlaWduZXIiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfZm9yZWlnbmVyX20qMTAwKVsxXQ0KUm93XzRfZm9yZWlnbmVyX21fQ0kgPSBhdHRyKFJvd180X2ZvcmVpZ25lcl9tLCJjaSIpDQpSb3dfNF9mb3JlaWduZXJfbV9DSSoxMDANCg0KIyBzbW9rZSAgICAgICAgICAgICAgDQpSb3dfNF9ub19zbW9rZXJfbTwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoc21va2UgPT0gIm5vIHNtb2tlciIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9ub19zbW9rZXJfbSoxMDApWzFdDQpSb3dfNF9ub19zbW9rZXJfbV9DSSA9IGF0dHIoUm93XzRfbm9fc21va2VyX20sImNpIikNClJvd180X25vX3Ntb2tlcl9tX0NJKjEwMA0KDQpSb3dfNF9mb3JtZXJfc21va2VyX20gPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShzbW9rZSA9PSAiZm9ybWVyIHNtb2tlciIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9mb3JtZXJfc21va2VyX20qMTAwKVsxXQ0KUm93XzRfZm9ybWVyX3Ntb2tlcl9tX0NJID0gYXR0cihSb3dfNF9mb3JtZXJfc21va2VyX20sImNpIikNClJvd180X2Zvcm1lcl9zbW9rZXJfbV9DSSoxMDANCg0KUm93XzRfc21va2VyX20gPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShzbW9rZSA9PSAic21va2VyIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X3Ntb2tlcl9tKjEwMClbMV0NClJvd180X3Ntb2tlcl9tX0NJID0gYXR0cihSb3dfNF9zbW9rZXJfbSwiY2kiKQ0KUm93XzRfc21va2VyX21fQ0kqMTAwDQoNCiMgRkwNClJvd180X0ZMX25vX2RpZmZpY3VsdHlfbTwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoRkwgPT0gIk5vIGRpZmZpY3VsdHkiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfRkxfbm9fZGlmZmljdWx0eV9tKjEwMClbMV0NClJvd180X0ZMX25vX2RpZmZpY3VsdHlfbV9DSSA9IGF0dHIoUm93XzRfRkxfbm9fZGlmZmljdWx0eV9tLCJjaSIpDQpSb3dfNF9GTF9ub19kaWZmaWN1bHR5X21fQ0kqMTAwDQoNClJvd180X0ZMX3NsaWdodF9kaWZmaWN1bHR5X20gPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShGTCA9PSAiU2xpZ2h0IGRpZmZpY3VsdHkiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfRkxfc2xpZ2h0X2RpZmZpY3VsdHlfbSoxMDApWzFdDQpSb3dfNF9GTF9zbGlnaHRfZGlmZmljdWx0eV9tX0NJID0gYXR0cihSb3dfNF9GTF9zbGlnaHRfZGlmZmljdWx0eV9tLCJjaSIpDQpSb3dfNF9GTF9zbGlnaHRfZGlmZmljdWx0eV9tX0NJKjEwMA0KDQpSb3dfNF9GTF9ncmVhdF9kaWZmaWN1bHR5X208LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKEZMID09ICJHcmVhdCBkaWZmaWN1bHR5IiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X0ZMX2dyZWF0X2RpZmZpY3VsdHlfbSoxMDApWzFdDQpSb3dfNF9GTF9ncmVhdF9kaWZmaWN1bHR5X21fQ0kgPSBhdHRyKFJvd180X0ZMX2dyZWF0X2RpZmZpY3VsdHlfbSwiY2kiKQ0KUm93XzRfRkxfZ3JlYXRfZGlmZmljdWx0eV9tX0NJKjEwMA0KDQpSb3dfNF9GTF9pbmFiaWxpdHlfbTwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoRkwgPT0gIkluYWJpbGl0eSIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9GTF9pbmFiaWxpdHlfbSoxMDApWzFdDQpSb3dfNF9GTF9pbmFiaWxpdHlfbV9DSSA9IGF0dHIoUm93XzRfRkxfaW5hYmlsaXR5X20sImNpIikNClJvd180X0ZMX2luYWJpbGl0eV9tX0NJKjEwMA0KDQojIGJtaV9jdXQNClJvd180X25vcm1hbF93ZWlnaHRfbTwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoYm1pX2N1dCA9PSAibm9ybWFsIHdlaWdodCIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9ub3JtYWxfd2VpZ2h0X20qMTAwKVsxXQ0KUm93XzRfbm9ybWFsX3dlaWdodF9tX0NJID0gYXR0cihSb3dfNF9ub3JtYWxfd2VpZ2h0X20sImNpIikNClJvd180X25vcm1hbF93ZWlnaHRfbV9DSSoxMDANCg0KUm93XzRfb2Jlc2l0eV9tIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoYm1pX2N1dCA9PSAib2Jlc2l0eSIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9vYmVzaXR5X20qMTAwKVsxXQ0KUm93XzRfb2Jlc2l0eV9tX0NJID0gYXR0cihSb3dfNF9vYmVzaXR5X20sImNpIikNClJvd180X29iZXNpdHlfbV9DSSoxMDANCg0KUm93XzRfb3ZlcndlaWdodF9tPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShibWlfY3V0ID09ICJvdmVyd2VpZ2h0IiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X292ZXJ3ZWlnaHRfbSoxMDApWzFdDQpSb3dfNF9vdmVyd2VpZ2h0X21fQ0kgPSBhdHRyKFJvd180X292ZXJ3ZWlnaHRfbSwiY2kiKQ0KUm93XzRfb3ZlcndlaWdodF9tX0NJKjEwMA0KDQpSb3dfNF91bmRlcndlaWdodF9tIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoYm1pX2N1dCA9PSAidW5kZXJ3ZWlnaHQiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfdW5kZXJ3ZWlnaHRfbSoxMDApWzFdDQpSb3dfNF91bmRlcndlaWdodF9tX0NJID0gYXR0cihSb3dfNF91bmRlcndlaWdodF9tLCJjaSIpDQpSb3dfNF91bmRlcndlaWdodF9tX0NJKjEwMA0KDQojIGFnZV9jdXQNClJvd180X2FnZV9jdXRfNjB0bzY0X208LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGFnZV9jdXQgPT0gIjYwLTY5IiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X2FnZV9jdXRfNjB0bzY0X20qMTAwKVsxXQ0KUm93XzRfYWdlX2N1dF82MHRvNjRfbV9DSSA9IGF0dHIoUm93XzRfYWdlX2N1dF82MHRvNjRfbSwiY2kiKQ0KUm93XzRfYWdlX2N1dF82MHRvNjRfbV9DSSoxMDANCg0KUm93XzRfYWdlX2N1dF82NXRvNzRfbSA8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGFnZV9jdXQgPT0gIjcwLTc5IiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X2FnZV9jdXRfNjV0bzc0X20qMTAwKVsxXQ0KUm93XzRfYWdlX2N1dF82NXRvNzRfbV9DSSA9IGF0dHIoUm93XzRfYWdlX2N1dF82NXRvNzRfbSwiY2kiKQ0KUm93XzRfYWdlX2N1dF82NXRvNzRfbV9DSSoxMDANCg0KUm93XzRfYWdlX2N1dF83NV9tPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShhZ2VfY3V0ID09ICI4MCsiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfYWdlX2N1dF83NV9tKjEwMClbMV0NClJvd180X2FnZV9jdXRfNzVfbV9DSSA9IGF0dHIoUm93XzRfYWdlX2N1dF83NV9tLCJjaSIpDQpSb3dfNF9hZ2VfY3V0Xzc1X21fQ0kqMTAwDQoNCiMgU0hTICAgICANClJvd180X1NIU192ZXJ5X2dvb2RfbTwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoU0hTID09ICJ2ZXJ5IGdvb2QiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfU0hTX3ZlcnlfZ29vZF9tKjEwMClbMV0NClJvd180X1NIU192ZXJ5X2dvb2RfbV9DSSA9IGF0dHIoUm93XzRfU0hTX3ZlcnlfZ29vZF9tLCJjaSIpDQpSb3dfNF9TSFNfdmVyeV9nb29kX21fQ0kqMTAwDQoNClJvd180X1NIU19nb29kX208LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKFNIUyA9PSAiZ29vZCIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9TSFNfZ29vZF9tKjEwMClbMV0NClJvd180X1NIU19nb29kX21fQ0kgPSBhdHRyKFJvd180X1NIU19nb29kX20sImNpIikNClJvd180X1NIU19nb29kX21fQ0kqMTAwDQoNClJvd180X1NIU19hdmVyYWdlX20gPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShTSFMgPT0gImF2ZXJhZ2UiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfU0hTX2F2ZXJhZ2VfbSoxMDApWzFdDQpSb3dfNF9TSFNfYXZlcmFnZV9tX0NJID0gYXR0cihSb3dfNF9TSFNfYXZlcmFnZV9tLCJjaSIpDQpSb3dfNF9TSFNfYXZlcmFnZV9tX0NJKjEwMA0KDQpSb3dfNF9TSFNfcG9vcl9tPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShTSFMgPT0gInBvb3IiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfU0hTX3Bvb3JfbSoxMDApWzFdDQpSb3dfNF9TSFNfcG9vcl9tX0NJID0gYXR0cihSb3dfNF9TSFNfcG9vcl9tLCJjaSIpDQpSb3dfNF9TSFNfcG9vcl9tX0NJKjEwMA0KDQpSb3dfNF9TSFNfdmVyeV9wb29yX208LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKFNIUyA9PSAidmVyeSBwb29yIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X1NIU192ZXJ5X3Bvb3JfbSoxMDApWzFdDQpSb3dfNF9TSFNfdmVyeV9wb29yX21fQ0kgPSBhdHRyKFJvd180X1NIU192ZXJ5X3Bvb3JfbSwiY2kiKQ0KUm93XzRfU0hTX3ZlcnlfcG9vcl9tX0NJKjEwMA0KDQojIGRpYWJldGVzDQpSb3dfNF9kaWFiZXRlc195ZXNfbTwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoZGlhYmV0ZXMgPT0gInllcyIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9kaWFiZXRlc195ZXNfbSoxMDApWzFdDQpSb3dfNF9kaWFiZXRlc195ZXNfbV9DSSA9IGF0dHIoUm93XzRfZGlhYmV0ZXNfeWVzX20sImNpIikNClJvd180X2RpYWJldGVzX3llc19tX0NJKjEwMA0KDQpSb3dfNF9kaWFiZXRlc19ub19tIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoZGlhYmV0ZXMgPT0gIm5vIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X2RpYWJldGVzX25vX20qMTAwKVsxXQ0KUm93XzRfZGlhYmV0ZXNfbm9fbV9DSSA9IGF0dHIoUm93XzRfZGlhYmV0ZXNfbm9fbSwiY2kiKQ0KUm93XzRfZGlhYmV0ZXNfbm9fbV9DSSoxMDANCg0KIyBvc3Rlb2FydGhyaXRpcw0KUm93XzRfb3N0ZW9hcnRocml0aXNfeWVzX208LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKG9zdGVvYXJ0aHJpdGlzID09ICJ5ZXMiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfb3N0ZW9hcnRocml0aXNfeWVzX20qMTAwKVsxXQ0KUm93XzRfb3N0ZW9hcnRocml0aXNfeWVzX21fQ0kgPSBhdHRyKFJvd180X29zdGVvYXJ0aHJpdGlzX3llc19tLCJjaSIpDQpSb3dfNF9vc3Rlb2FydGhyaXRpc195ZXNfbV9DSSoxMDANCg0KUm93XzRfb3N0ZW9hcnRocml0aXNfbm9fbSA8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKG9zdGVvYXJ0aHJpdGlzID09ICJubyIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9vc3Rlb2FydGhyaXRpc19ub19tKjEwMClbMV0NClJvd180X29zdGVvYXJ0aHJpdGlzX25vX21fQ0kgPSBhdHRyKFJvd180X29zdGVvYXJ0aHJpdGlzX25vX20sImNpIikNClJvd180X29zdGVvYXJ0aHJpdGlzX25vX21fQ0kqMTAwDQoNCiMgaGVhcnRfYXR0YWNrDQpSb3dfNF9oZWFydF9hdHRhY2tfeWVzX208LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGhlYXJ0X2F0dGFjayA9PSAieWVzIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X2hlYXJ0X2F0dGFja195ZXNfbSoxMDApWzFdDQpSb3dfNF9oZWFydF9hdHRhY2tfeWVzX21fQ0kgPSBhdHRyKFJvd180X2hlYXJ0X2F0dGFja195ZXNfbSwiY2kiKQ0KUm93XzRfaGVhcnRfYXR0YWNrX3llc19tX0NJKjEwMA0KDQpSb3dfNF9oZWFydF9hdHRhY2tfbm9fbSA8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGhlYXJ0X2F0dGFjayA9PSAibm8iKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfaGVhcnRfYXR0YWNrX25vX20qMTAwKVsxXQ0KUm93XzRfaGVhcnRfYXR0YWNrX25vX21fQ0kgPSBhdHRyKFJvd180X2hlYXJ0X2F0dGFja19ub19tLCJjaSIpDQpSb3dfNF9oZWFydF9hdHRhY2tfbm9fbV9DSSoxMDANCg0KIyBzdHJva2UNClJvd180X3N0cm9rZV95ZXNfbTwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoc3Ryb2tlID09ICJ5ZXMiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfc3Ryb2tlX3llc19tKjEwMClbMV0NClJvd180X3N0cm9rZV95ZXNfbV9DSSA9IGF0dHIoUm93XzRfc3Ryb2tlX3llc19tLCJjaSIpDQpSb3dfNF9zdHJva2VfeWVzX21fQ0kqMTAwDQoNClJvd180X3N0cm9rZV9ub19tIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoc3Ryb2tlID09ICJubyIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9zdHJva2Vfbm9fbSoxMDApWzFdDQpSb3dfNF9zdHJva2Vfbm9fbV9DSSA9IGF0dHIoUm93XzRfc3Ryb2tlX25vX20sImNpIikNClJvd180X3N0cm9rZV9ub19tX0NJKjEwMA0KDQojIHVyaW5hcnlfaW5jb250aW5lbmNlDQpSb3dfNF91cmluYXJ5X2luY29udGluZW5jZV95ZXNfbTwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkodXJpbmFyeV9pbmNvbnRpbmVuY2UgPT0gInllcyIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF91cmluYXJ5X2luY29udGluZW5jZV95ZXNfbSoxMDApWzFdDQpSb3dfNF91cmluYXJ5X2luY29udGluZW5jZV95ZXNfbV9DSSA9IGF0dHIoUm93XzRfdXJpbmFyeV9pbmNvbnRpbmVuY2VfeWVzX20sImNpIikNClJvd180X3VyaW5hcnlfaW5jb250aW5lbmNlX3llc19tX0NJKjEwMA0KDQpSb3dfNF91cmluYXJ5X2luY29udGluZW5jZV9ub19tIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkodXJpbmFyeV9pbmNvbnRpbmVuY2UgPT0gIm5vIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X3VyaW5hcnlfaW5jb250aW5lbmNlX25vX20qMTAwKVsxXQ0KUm93XzRfdXJpbmFyeV9pbmNvbnRpbmVuY2Vfbm9fbV9DSSA9IGF0dHIoUm93XzRfdXJpbmFyeV9pbmNvbnRpbmVuY2Vfbm9fbSwiY2kiKQ0KUm93XzRfdXJpbmFyeV9pbmNvbnRpbmVuY2Vfbm9fbV9DSSoxMDANCg0KIyBvc3Rlb3Bvcm9zaXMNClJvd180X29zdGVvcG9yb3Npc195ZXNfbTwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkob3N0ZW9wb3Jvc2lzID09ICJ5ZXMiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfb3N0ZW9wb3Jvc2lzX3llc19tKjEwMClbMV0NClJvd180X29zdGVvcG9yb3Npc195ZXNfbV9DSSA9IGF0dHIoUm93XzRfb3N0ZW9wb3Jvc2lzX3llc19tLCJjaSIpDQpSb3dfNF9vc3Rlb3Bvcm9zaXNfeWVzX21fQ0kqMTAwDQoNClJvd180X29zdGVvcG9yb3Npc19ub19tIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkob3N0ZW9wb3Jvc2lzID09ICJubyIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9vc3Rlb3Bvcm9zaXNfbm9fbSoxMDApWzFdDQpSb3dfNF9vc3Rlb3Bvcm9zaXNfbm9fbV9DSSA9IGF0dHIoUm93XzRfb3N0ZW9wb3Jvc2lzX25vX20sImNpIikNClJvd180X29zdGVvcG9yb3Npc19ub19tX0NJKjEwMA0KDQojIGFjdGl2aXR5DQpSb3dfNF9pbmFjdGl2ZV9tPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShhY3Rpdml0eSA9PSAiaW5hY3RpdmUiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfaW5hY3RpdmVfbSoxMDApWzFdDQpSb3dfNF9pbmFjdGl2ZV9tX0NJID0gYXR0cihSb3dfNF9pbmFjdGl2ZV9tLCJjaSIpDQpSb3dfNF9pbmFjdGl2ZV9tX0NJKjEwMA0KDQpSb3dfNF9wYXJ0aWFsbHlfYWN0aXZlX20gPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShhY3Rpdml0eSA9PSAicGFydGlhbGx5IGFjdGl2ZSIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9wYXJ0aWFsbHlfYWN0aXZlX20qMTAwKVsxXQ0KUm93XzRfcGFydGlhbGx5X2FjdGl2ZV9tX0NJID0gYXR0cihSb3dfNF9wYXJ0aWFsbHlfYWN0aXZlX20sImNpIikNClJvd180X3BhcnRpYWxseV9hY3RpdmVfbV9DSSoxMDANCg0KUm93XzRfYWN0aXZlX208LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGFjdGl2aXR5ID09ICJhY3RpdmUiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfYWN0aXZlX20qMTAwKVsxXQ0KUm93XzRfYWN0aXZlX21fQ0kgPSBhdHRyKFJvd180X2FjdGl2ZV9tLCJjaSIpDQpSb3dfNF9hY3RpdmVfbV9DSSoxMDANCg0KDQojIGFsY29ob2wNClJvd180X2FsY29ob2xfYWJzdGluZW50X208LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGFsY29ob2wgPT0gImFic3RpbmVudCIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9hbGNvaG9sX2Fic3RpbmVudF9tKjEwMClbMV0NClJvd180X2FsY29ob2xfYWJzdGluZW50X21fQ0kgPSBhdHRyKFJvd180X2FsY29ob2xfYWJzdGluZW50X20sImNpIikNClJvd180X2FsY29ob2xfYWJzdGluZW50X21fQ0kqMTAwDQoNClJvd180X2FsY29ob2xfbG93X3Jpc2tfbTwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoYWxjb2hvbCA9PSAibG93IHJpc2siKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfYWxjb2hvbF9sb3dfcmlza19tKjEwMClbMV0NClJvd180X2FsY29ob2xfbG93X3Jpc2tfbV9DSSA9IGF0dHIoUm93XzRfYWxjb2hvbF9sb3dfcmlza19tLCJjaSIpDQpSb3dfNF9hbGNvaG9sX2xvd19yaXNrX21fQ0kqMTAwDQoNClJvd180X2FsY29ob2xfbW9kZXJhdGVfb3JfaW5jcmVhc2VkX3Jpc2tfbTwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoYWxjb2hvbCA9PSAibW9kZXJhdGUgb3IgaW5jcmVhc2VkIHJpc2siKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfYWxjb2hvbF9tb2RlcmF0ZV9vcl9pbmNyZWFzZWRfcmlza19tKjEwMClbMV0NClJvd180X2FsY29ob2xfbW9kZXJhdGVfb3JfaW5jcmVhc2VkX3Jpc2tfbV9DSSA9IGF0dHIoUm93XzRfYWxjb2hvbF9tb2RlcmF0ZV9vcl9pbmNyZWFzZWRfcmlza19tLCJjaSIpDQpSb3dfNF9hbGNvaG9sX21vZGVyYXRlX29yX2luY3JlYXNlZF9yaXNrX21fQ0kqMTAwDQpgYGANCg0KIyMjIyBXb21lbg0KDQpgYGB7cn0NCiMgd29tZW4NCiMjIGVkdWNhdGlvbg0KUm93XzRfY29tcHVsc29yeV9lZHVjYXRpb25fZjwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoZWR1Y2F0aW9uID09ICJjb21wdWxzb3J5IGVkdWNhdGlvbiIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9jb21wdWxzb3J5X2VkdWNhdGlvbl9mKjEwMClbMV0NClJvd180X2NvbXB1bHNvcnlfZWR1Y2F0aW9uX2ZfQ0kgPSBhdHRyKFJvd180X2NvbXB1bHNvcnlfZWR1Y2F0aW9uX2YsImNpIikNClJvd180X2NvbXB1bHNvcnlfZWR1Y2F0aW9uX2ZfQ0kqMTAwDQoNClJvd180X3VwcGVyX3NlY29uZGFyeV9lZHVjYXRpb25fZiA8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGVkdWNhdGlvbiA9PSAidXBwZXIgc2Vjb25kYXJ5IGVkdWNhdGlvbiIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF91cHBlcl9zZWNvbmRhcnlfZWR1Y2F0aW9uX2YqMTAwKVsxXQ0KUm93XzRfdXBwZXJfc2Vjb25kYXJ5X2VkdWNhdGlvbl9mX0NJID0gYXR0cihSb3dfNF91cHBlcl9zZWNvbmRhcnlfZWR1Y2F0aW9uX2YsImNpIikNClJvd180X3VwcGVyX3NlY29uZGFyeV9lZHVjYXRpb25fZl9DSSoxMDANCg0KUm93XzRfdGVydGlhcnlfZWR1Y2F0aW9uX2YgPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShlZHVjYXRpb24gPT0gInRlcnRpYXJ5IGVkdWNhdGlvbiIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF90ZXJ0aWFyeV9lZHVjYXRpb25fZioxMDApWzFdDQpSb3dfNF90ZXJ0aWFyeV9lZHVjYXRpb25fZl9DSSA9IGF0dHIoUm93XzRfdGVydGlhcnlfZWR1Y2F0aW9uX2YsImNpIikNClJvd180X3RlcnRpYXJ5X2VkdWNhdGlvbl9mX0NJKjEwMA0KDQojIGxhbmd1YWdlDQpSb3dfNF9nZXJtYW5fZjwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkobGFuZ3VhZ2UgPT0gImdlcm1hbiIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9nZXJtYW5fZioxMDApWzFdDQpSb3dfNF9nZXJtYW5fZl9DSSA9IGF0dHIoUm93XzRfZ2VybWFuX2YsImNpIikNClJvd180X2dlcm1hbl9mX0NJKjEwMA0KDQpSb3dfNF9mcmVuY2hfZiA8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGxhbmd1YWdlID09ICJmcmVuY2giKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfZnJlbmNoX2YqMTAwKVsxXQ0KUm93XzRfZnJlbmNoX2ZfQ0kgPSBhdHRyKFJvd180X2ZyZW5jaF9mLCJjaSIpDQpSb3dfNF9mcmVuY2hfZl9DSSoxMDANCg0KUm93XzRfaXRhbGlhbl9mIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkobGFuZ3VhZ2UgPT0gIml0YWxpYW4iKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfaXRhbGlhbl9mKjEwMClbMV0NClJvd180X2l0YWxpYW5fZl9DSSA9IGF0dHIoUm93XzRfaXRhbGlhbl9mLCJjaSIpDQpSb3dfNF9pdGFsaWFuX2ZfQ0kqMTAwDQoNCiMgdXJiYW5fcnVyYWwNClJvd180X3VyYmFuX2FyZWFfZjwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkodXJiYW5fcnVyYWwgPT0gInVyYmFuIGFyZWEiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfdXJiYW5fYXJlYV9mKjEwMClbMV0NClJvd180X3VyYmFuX2FyZWFfZl9DSSA9IGF0dHIoUm93XzRfdXJiYW5fYXJlYV9mLCJjaSIpDQpSb3dfNF91cmJhbl9hcmVhX2ZfQ0kqMTAwDQoNClJvd180X3J1cmFsX2FyZWFuX2YgPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SSh1cmJhbl9ydXJhbCA9PSAicnVyYWwgYXJlYSIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9ydXJhbF9hcmVhbl9mKjEwMClbMV0NClJvd180X3J1cmFsX2FyZWFuX2ZfQ0kgPSBhdHRyKFJvd180X3J1cmFsX2FyZWFuX2YsImNpIikNClJvd180X3J1cmFsX2FyZWFuX2ZfQ0kqMTAwDQoNCiMgbmF0aW9uYWxpdHkNClJvd180X3N3aXNzX2Y8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKG5hdGlvbmFsaXR5ID09ICJzd2lzcyIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9zd2lzc19mKjEwMClbMV0NClJvd180X3N3aXNzX2ZfQ0kgPSBhdHRyKFJvd180X3N3aXNzX2YsImNpIikNClJvd180X3N3aXNzX2ZfQ0kqMTAwDQoNClJvd180X2ZvcmVpZ25lcl9mIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkobmF0aW9uYWxpdHkgPT0gImZvcmVpZ25lciIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9mb3JlaWduZXJfZioxMDApWzFdDQpSb3dfNF9mb3JlaWduZXJfZl9DSSA9IGF0dHIoUm93XzRfZm9yZWlnbmVyX2YsImNpIikNClJvd180X2ZvcmVpZ25lcl9mX0NJKjEwMA0KDQojIHNtb2tlICAgICAgICAgICAgICANClJvd180X25vX3Ntb2tlcl9mPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShzbW9rZSA9PSAibm8gc21va2VyIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X25vX3Ntb2tlcl9mKjEwMClbMV0NClJvd180X25vX3Ntb2tlcl9mX0NJID0gYXR0cihSb3dfNF9ub19zbW9rZXJfZiwiY2kiKQ0KUm93XzRfbm9fc21va2VyX2ZfQ0kqMTAwDQoNClJvd180X2Zvcm1lcl9zbW9rZXJfZiA8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKHNtb2tlID09ICJmb3JtZXIgc21va2VyIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X2Zvcm1lcl9zbW9rZXJfZioxMDApWzFdDQpSb3dfNF9mb3JtZXJfc21va2VyX2ZfQ0kgPSBhdHRyKFJvd180X2Zvcm1lcl9zbW9rZXJfZiwiY2kiKQ0KUm93XzRfZm9ybWVyX3Ntb2tlcl9mX0NJKjEwMA0KDQpSb3dfNF9zbW9rZXJfZiA8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKHNtb2tlID09ICJzbW9rZXIiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfc21va2VyX2YqMTAwKVsxXQ0KUm93XzRfc21va2VyX2ZfQ0kgPSBhdHRyKFJvd180X3Ntb2tlcl9mLCJjaSIpDQpSb3dfNF9zbW9rZXJfZl9DSSoxMDANCg0KIyBGTA0KUm93XzRfRkxfbm9fZGlmZmljdWx0eV9mPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShGTCA9PSAiTm8gZGlmZmljdWx0eSIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9GTF9ub19kaWZmaWN1bHR5X2YqMTAwKVsxXQ0KUm93XzRfRkxfbm9fZGlmZmljdWx0eV9mX0NJID0gYXR0cihSb3dfNF9GTF9ub19kaWZmaWN1bHR5X2YsImNpIikNClJvd180X0ZMX25vX2RpZmZpY3VsdHlfZl9DSSoxMDANCg0KUm93XzRfRkxfc2xpZ2h0X2RpZmZpY3VsdHlfZiA8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKEZMID09ICJTbGlnaHQgZGlmZmljdWx0eSIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9GTF9zbGlnaHRfZGlmZmljdWx0eV9mKjEwMClbMV0NClJvd180X0ZMX3NsaWdodF9kaWZmaWN1bHR5X2ZfQ0kgPSBhdHRyKFJvd180X0ZMX3NsaWdodF9kaWZmaWN1bHR5X2YsImNpIikNClJvd180X0ZMX3NsaWdodF9kaWZmaWN1bHR5X2ZfQ0kqMTAwDQoNClJvd180X0ZMX2dyZWF0X2RpZmZpY3VsdHlfZjwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoRkwgPT0gIkdyZWF0IGRpZmZpY3VsdHkiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfRkxfZ3JlYXRfZGlmZmljdWx0eV9mKjEwMClbMV0NClJvd180X0ZMX2dyZWF0X2RpZmZpY3VsdHlfZl9DSSA9IGF0dHIoUm93XzRfRkxfZ3JlYXRfZGlmZmljdWx0eV9mLCJjaSIpDQpSb3dfNF9GTF9ncmVhdF9kaWZmaWN1bHR5X2ZfQ0kqMTAwDQoNClJvd180X0ZMX2luYWJpbGl0eV9mPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShGTCA9PSAiSW5hYmlsaXR5IiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X0ZMX2luYWJpbGl0eV9mKjEwMClbMV0NClJvd180X0ZMX2luYWJpbGl0eV9mX0NJID0gYXR0cihSb3dfNF9GTF9pbmFiaWxpdHlfZiwiY2kiKQ0KUm93XzRfRkxfaW5hYmlsaXR5X2ZfQ0kqMTAwDQoNCiMgYm1pX2N1dA0KUm93XzRfbm9ybWFsX3dlaWdodF9mPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShibWlfY3V0ID09ICJub3JtYWwgd2VpZ2h0IiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X25vcm1hbF93ZWlnaHRfZioxMDApWzFdDQpSb3dfNF9ub3JtYWxfd2VpZ2h0X2ZfQ0kgPSBhdHRyKFJvd180X25vcm1hbF93ZWlnaHRfZiwiY2kiKQ0KUm93XzRfbm9ybWFsX3dlaWdodF9mX0NJKjEwMA0KDQpSb3dfNF9vYmVzaXR5X2YgPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShibWlfY3V0ID09ICJvYmVzaXR5IiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X29iZXNpdHlfZioxMDApWzFdDQpSb3dfNF9vYmVzaXR5X2ZfQ0kgPSBhdHRyKFJvd180X29iZXNpdHlfZiwiY2kiKQ0KUm93XzRfb2Jlc2l0eV9mX0NJKjEwMA0KDQpSb3dfNF9vdmVyd2VpZ2h0X2Y8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGJtaV9jdXQgPT0gIm92ZXJ3ZWlnaHQiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfb3ZlcndlaWdodF9mKjEwMClbMV0NClJvd180X292ZXJ3ZWlnaHRfZl9DSSA9IGF0dHIoUm93XzRfb3ZlcndlaWdodF9mLCJjaSIpDQpSb3dfNF9vdmVyd2VpZ2h0X2ZfQ0kqMTAwDQoNClJvd180X3VuZGVyd2VpZ2h0X2YgPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShibWlfY3V0ID09ICJ1bmRlcndlaWdodCIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF91bmRlcndlaWdodF9mKjEwMClbMV0NClJvd180X3VuZGVyd2VpZ2h0X2ZfQ0kgPSBhdHRyKFJvd180X3VuZGVyd2VpZ2h0X2YsImNpIikNClJvd180X3VuZGVyd2VpZ2h0X2ZfQ0kqMTAwDQoNCiMgYWdlX2N1dA0KUm93XzRfYWdlX2N1dF82MHRvNjRfZjwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoYWdlX2N1dCA9PSAiNjAtNjkiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfYWdlX2N1dF82MHRvNjRfZioxMDApWzFdDQpSb3dfNF9hZ2VfY3V0XzYwdG82NF9mX0NJID0gYXR0cihSb3dfNF9hZ2VfY3V0XzYwdG82NF9mLCJjaSIpDQpSb3dfNF9hZ2VfY3V0XzYwdG82NF9mX0NJKjEwMA0KDQpSb3dfNF9hZ2VfY3V0XzY1dG83NF9mIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoYWdlX2N1dCA9PSAiNzAtNzkiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfYWdlX2N1dF82NXRvNzRfZioxMDApWzFdDQpSb3dfNF9hZ2VfY3V0XzY1dG83NF9mX0NJID0gYXR0cihSb3dfNF9hZ2VfY3V0XzY1dG83NF9mLCJjaSIpDQpSb3dfNF9hZ2VfY3V0XzY1dG83NF9mX0NJKjEwMA0KDQpSb3dfNF9hZ2VfY3V0Xzc1X2Y8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGFnZV9jdXQgPT0gIjgwKyIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9hZ2VfY3V0Xzc1X2YqMTAwKVsxXQ0KUm93XzRfYWdlX2N1dF83NV9mX0NJID0gYXR0cihSb3dfNF9hZ2VfY3V0Xzc1X2YsImNpIikNClJvd180X2FnZV9jdXRfNzVfZl9DSSoxMDANCg0KIyBTSFMgICAgIA0KUm93XzRfU0hTX3ZlcnlfZ29vZF9mPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShTSFMgPT0gInZlcnkgZ29vZCIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9TSFNfdmVyeV9nb29kX2YqMTAwKVsxXQ0KUm93XzRfU0hTX3ZlcnlfZ29vZF9mX0NJID0gYXR0cihSb3dfNF9TSFNfdmVyeV9nb29kX2YsImNpIikNClJvd180X1NIU192ZXJ5X2dvb2RfZl9DSSoxMDANCg0KUm93XzRfU0hTX2dvb2RfZjwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoU0hTID09ICJnb29kIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X1NIU19nb29kX2YqMTAwKVsxXQ0KUm93XzRfU0hTX2dvb2RfZl9DSSA9IGF0dHIoUm93XzRfU0hTX2dvb2RfZiwiY2kiKQ0KUm93XzRfU0hTX2dvb2RfZl9DSSoxMDANCg0KUm93XzRfU0hTX2F2ZXJhZ2VfZiA8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKFNIUyA9PSAiYXZlcmFnZSIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9TSFNfYXZlcmFnZV9mKjEwMClbMV0NClJvd180X1NIU19hdmVyYWdlX2ZfQ0kgPSBhdHRyKFJvd180X1NIU19hdmVyYWdlX2YsImNpIikNClJvd180X1NIU19hdmVyYWdlX2ZfQ0kqMTAwDQoNClJvd180X1NIU19wb29yX2Y8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKFNIUyA9PSAicG9vciIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9TSFNfcG9vcl9mKjEwMClbMV0NClJvd180X1NIU19wb29yX2ZfQ0kgPSBhdHRyKFJvd180X1NIU19wb29yX2YsImNpIikNClJvd180X1NIU19wb29yX2ZfQ0kqMTAwDQoNClJvd180X1NIU192ZXJ5X3Bvb3JfZjwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoU0hTID09ICJ2ZXJ5IHBvb3IiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfU0hTX3ZlcnlfcG9vcl9mKjEwMClbMV0NClJvd180X1NIU192ZXJ5X3Bvb3JfZl9DSSA9IGF0dHIoUm93XzRfU0hTX3ZlcnlfcG9vcl9mLCJjaSIpDQpSb3dfNF9TSFNfdmVyeV9wb29yX2ZfQ0kqMTAwDQoNCiMgZGlhYmV0ZXMNClJvd180X2RpYWJldGVzX3llc19mPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShkaWFiZXRlcyA9PSAieWVzIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X2RpYWJldGVzX3llc19mKjEwMClbMV0NClJvd180X2RpYWJldGVzX3llc19mX0NJID0gYXR0cihSb3dfNF9kaWFiZXRlc195ZXNfZiwiY2kiKQ0KUm93XzRfZGlhYmV0ZXNfeWVzX2ZfQ0kqMTAwDQoNClJvd180X2RpYWJldGVzX25vX2YgPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShkaWFiZXRlcyA9PSAibm8iKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfZGlhYmV0ZXNfbm9fZioxMDApWzFdDQpSb3dfNF9kaWFiZXRlc19ub19mX0NJID0gYXR0cihSb3dfNF9kaWFiZXRlc19ub19mLCJjaSIpDQpSb3dfNF9kaWFiZXRlc19ub19mX0NJKjEwMA0KDQojIG9zdGVvYXJ0aHJpdGlzDQpSb3dfNF9vc3Rlb2FydGhyaXRpc195ZXNfZjwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkob3N0ZW9hcnRocml0aXMgPT0gInllcyIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9vc3Rlb2FydGhyaXRpc195ZXNfZioxMDApWzFdDQpSb3dfNF9vc3Rlb2FydGhyaXRpc195ZXNfZl9DSSA9IGF0dHIoUm93XzRfb3N0ZW9hcnRocml0aXNfeWVzX2YsImNpIikNClJvd180X29zdGVvYXJ0aHJpdGlzX3llc19mX0NJKjEwMA0KDQpSb3dfNF9vc3Rlb2FydGhyaXRpc19ub19mIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkob3N0ZW9hcnRocml0aXMgPT0gIm5vIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X29zdGVvYXJ0aHJpdGlzX25vX2YqMTAwKVsxXQ0KUm93XzRfb3N0ZW9hcnRocml0aXNfbm9fZl9DSSA9IGF0dHIoUm93XzRfb3N0ZW9hcnRocml0aXNfbm9fZiwiY2kiKQ0KUm93XzRfb3N0ZW9hcnRocml0aXNfbm9fZl9DSSoxMDANCg0KIyBoZWFydF9hdHRhY2sNClJvd180X2hlYXJ0X2F0dGFja195ZXNfZjwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoaGVhcnRfYXR0YWNrID09ICJ5ZXMiKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfaGVhcnRfYXR0YWNrX3llc19mKjEwMClbMV0NClJvd180X2hlYXJ0X2F0dGFja195ZXNfZl9DSSA9IGF0dHIoUm93XzRfaGVhcnRfYXR0YWNrX3llc19mLCJjaSIpDQpSb3dfNF9oZWFydF9hdHRhY2tfeWVzX2ZfQ0kqMTAwDQoNClJvd180X2hlYXJ0X2F0dGFja19ub19mIDwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoaGVhcnRfYXR0YWNrID09ICJubyIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9oZWFydF9hdHRhY2tfbm9fZioxMDApWzFdDQpSb3dfNF9oZWFydF9hdHRhY2tfbm9fZl9DSSA9IGF0dHIoUm93XzRfaGVhcnRfYXR0YWNrX25vX2YsImNpIikNClJvd180X2hlYXJ0X2F0dGFja19ub19mX0NJKjEwMA0KDQojIHN0cm9rZQ0KUm93XzRfc3Ryb2tlX3llc19mPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShzdHJva2UgPT0gInllcyIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9zdHJva2VfeWVzX2YqMTAwKVsxXQ0KUm93XzRfc3Ryb2tlX3llc19mX0NJID0gYXR0cihSb3dfNF9zdHJva2VfeWVzX2YsImNpIikNClJvd180X3N0cm9rZV95ZXNfZl9DSSoxMDANCg0KUm93XzRfc3Ryb2tlX25vX2YgPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShzdHJva2UgPT0gIm5vIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X3N0cm9rZV9ub19mKjEwMClbMV0NClJvd180X3N0cm9rZV9ub19mX0NJID0gYXR0cihSb3dfNF9zdHJva2Vfbm9fZiwiY2kiKQ0KUm93XzRfc3Ryb2tlX25vX2ZfQ0kqMTAwDQoNCiMgdXJpbmFyeV9pbmNvbnRpbmVuY2UNClJvd180X3VyaW5hcnlfaW5jb250aW5lbmNlX3llc19mPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SSh1cmluYXJ5X2luY29udGluZW5jZSA9PSAieWVzIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X3VyaW5hcnlfaW5jb250aW5lbmNlX3llc19mKjEwMClbMV0NClJvd180X3VyaW5hcnlfaW5jb250aW5lbmNlX3llc19mX0NJID0gYXR0cihSb3dfNF91cmluYXJ5X2luY29udGluZW5jZV95ZXNfZiwiY2kiKQ0KUm93XzRfdXJpbmFyeV9pbmNvbnRpbmVuY2VfeWVzX2ZfQ0kqMTAwDQoNClJvd180X3VyaW5hcnlfaW5jb250aW5lbmNlX25vX2YgPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SSh1cmluYXJ5X2luY29udGluZW5jZSA9PSAibm8iKSwNCiAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgbmEucm0gPSBUUlVFLA0KICAgICAgICAgIG1ldGhvZCA9ICJsaSIpDQooUm93XzRfdXJpbmFyeV9pbmNvbnRpbmVuY2Vfbm9fZioxMDApWzFdDQpSb3dfNF91cmluYXJ5X2luY29udGluZW5jZV9ub19mX0NJID0gYXR0cihSb3dfNF91cmluYXJ5X2luY29udGluZW5jZV9ub19mLCJjaSIpDQpSb3dfNF91cmluYXJ5X2luY29udGluZW5jZV9ub19mX0NJKjEwMA0KDQojIG9zdGVvcG9yb3Npcw0KUm93XzRfb3N0ZW9wb3Jvc2lzX3llc19mPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShvc3Rlb3Bvcm9zaXMgPT0gInllcyIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9vc3Rlb3Bvcm9zaXNfeWVzX2YqMTAwKVsxXQ0KUm93XzRfb3N0ZW9wb3Jvc2lzX3llc19mX0NJID0gYXR0cihSb3dfNF9vc3Rlb3Bvcm9zaXNfeWVzX2YsImNpIikNClJvd180X29zdGVvcG9yb3Npc195ZXNfZl9DSSoxMDANCg0KUm93XzRfb3N0ZW9wb3Jvc2lzX25vX2YgPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShvc3Rlb3Bvcm9zaXMgPT0gIm5vIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X29zdGVvcG9yb3Npc19ub19mKjEwMClbMV0NClJvd180X29zdGVvcG9yb3Npc19ub19mX0NJID0gYXR0cihSb3dfNF9vc3Rlb3Bvcm9zaXNfbm9fZiwiY2kiKQ0KUm93XzRfb3N0ZW9wb3Jvc2lzX25vX2ZfQ0kqMTAwDQoNCiMgYWN0aXZpdHkNClJvd180X2luYWN0aXZlX2Y8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGFjdGl2aXR5ID09ICJpbmFjdGl2ZSIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9pbmFjdGl2ZV9mKjEwMClbMV0NClJvd180X2luYWN0aXZlX2ZfQ0kgPSBhdHRyKFJvd180X2luYWN0aXZlX2YsImNpIikNClJvd180X2luYWN0aXZlX2ZfQ0kqMTAwDQoNClJvd180X3BhcnRpYWxseV9hY3RpdmVfZiA8LSBzdnljaXByb3AoZm9ybXVsYSA9IH5JKGFjdGl2aXR5ID09ICJwYXJ0aWFsbHkgYWN0aXZlIiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X3BhcnRpYWxseV9hY3RpdmVfZioxMDApWzFdDQpSb3dfNF9wYXJ0aWFsbHlfYWN0aXZlX2ZfQ0kgPSBhdHRyKFJvd180X3BhcnRpYWxseV9hY3RpdmVfZiwiY2kiKQ0KUm93XzRfcGFydGlhbGx5X2FjdGl2ZV9mX0NJKjEwMA0KDQpSb3dfNF9hY3RpdmVfZjwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoYWN0aXZpdHkgPT0gImFjdGl2ZSIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9hY3RpdmVfZioxMDApWzFdDQpSb3dfNF9hY3RpdmVfZl9DSSA9IGF0dHIoUm93XzRfYWN0aXZlX2YsImNpIikNClJvd180X2FjdGl2ZV9mX0NJKjEwMA0KDQoNCiMgYWxjb2hvbA0KUm93XzRfYWxjb2hvbF9hYnN0aW5lbnRfZjwtIHN2eWNpcHJvcChmb3JtdWxhID0gfkkoYWxjb2hvbCA9PSAiYWJzdGluZW50IiksDQogICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgIG5hLnJtID0gVFJVRSwNCiAgICAgICAgICBtZXRob2QgPSAibGkiKQ0KKFJvd180X2FsY29ob2xfYWJzdGluZW50X2YqMTAwKVsxXQ0KUm93XzRfYWxjb2hvbF9hYnN0aW5lbnRfZl9DSSA9IGF0dHIoUm93XzRfYWxjb2hvbF9hYnN0aW5lbnRfZiwiY2kiKQ0KUm93XzRfYWxjb2hvbF9hYnN0aW5lbnRfZl9DSSoxMDANCg0KUm93XzRfYWxjb2hvbF9sb3dfcmlza19mPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShhbGNvaG9sID09ICJsb3cgcmlzayIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9hbGNvaG9sX2xvd19yaXNrX2YqMTAwKVsxXQ0KUm93XzRfYWxjb2hvbF9sb3dfcmlza19mX0NJID0gYXR0cihSb3dfNF9hbGNvaG9sX2xvd19yaXNrX2YsImNpIikNClJvd180X2FsY29ob2xfbG93X3Jpc2tfZl9DSSoxMDANCg0KUm93XzRfYWxjb2hvbF9tb2RlcmF0ZV9vcl9pbmNyZWFzZWRfcmlza19mPC0gc3Z5Y2lwcm9wKGZvcm11bGEgPSB+SShhbGNvaG9sID09ICJtb2RlcmF0ZSBvciBpbmNyZWFzZWQgcmlzayIpLA0KICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICBuYS5ybSA9IFRSVUUsDQogICAgICAgICAgbWV0aG9kID0gImxpIikNCihSb3dfNF9hbGNvaG9sX21vZGVyYXRlX29yX2luY3JlYXNlZF9yaXNrX2YqMTAwKVsxXQ0KUm93XzRfYWxjb2hvbF9tb2RlcmF0ZV9vcl9pbmNyZWFzZWRfcmlza19mX0NJID0gYXR0cihSb3dfNF9hbGNvaG9sX21vZGVyYXRlX29yX2luY3JlYXNlZF9yaXNrX2YsImNpIikNClJvd180X2FsY29ob2xfbW9kZXJhdGVfb3JfaW5jcmVhc2VkX3Jpc2tfZl9DSSoxMDANCmBgYA0KDQojIyMgU3VtbWFyeSBwcm9wb3J0aW9uICglKSBhbmQgQ0kgOTUlIG9mIHBvcHVsYXRpb24gd2l0aCBmYWxscyBieSBjaGFyYWN0ZXJpc3RpYw0KDQojIyMjIE1lbg0KDQpgYGB7ciB3YXJuaW5nPUZBTFNFfQ0KDQojIG1lbg0KIyBlZHVjYXRpb24NCnRhYl9hbW91bnRfZmFsbF9lZHVjYXRpb25fbSA8LSBzdnlieSgNCiAgZm9ybXVsYSA9IH5JKGZhbGwgPT0gImZhbGwgbGFzdCAxMiBtb250aHMiKSwNCiAgYnkgPSB+IGVkdWNhdGlvbiwNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0KdGFiX2Ftb3VudF9mYWxsX2VkdWNhdGlvbl9tKjEwMA0KDQojIGxhbmd1YWdlDQp0YWJfYW1vdW50X2ZhbGxfbGFuZ3VhZ2VfbSA8LSBzdnlieSgNCiAgZm9ybXVsYSA9IH5JKGZhbGwgPT0gImZhbGwgbGFzdCAxMiBtb250aHMiKSwNCiAgYnkgPSB+IGxhbmd1YWdlLA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQp0YWJfYW1vdW50X2ZhbGxfbGFuZ3VhZ2VfbSoxMDANCg0KIyB1cmJhbl9ydXJhbA0KdGFiX2Ftb3VudF9mYWxsX3VyYmFuX3J1cmFsX20gPC0gc3Z5YnkoDQogIGZvcm11bGEgPSB+SShmYWxsID09ICJmYWxsIGxhc3QgMTIgbW9udGhzIiksDQogIGJ5ID0gfiB1cmJhbl9ydXJhbCwNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0KdGFiX2Ftb3VudF9mYWxsX3VyYmFuX3J1cmFsX20qMTAwDQoNCiMgbmF0aW9uYWxpdHkNCnRhYl9hbW91bnRfZmFsbF9uYXRpb25hbGl0eV9tIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gbmF0aW9uYWxpdHksDQogIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF9uYXRpb25hbGl0eV9tKjEwMA0KDQojIHNtb2tlICAgICAgICAgICAgICANCnRhYl9hbW91bnRfZmFsbF9zbW9rZV9tIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gc21va2UsDQogIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF9zbW9rZV9tKjEwMA0KDQojIEZMDQp0YWJfYW1vdW50X2ZhbGxfRkxfbSA8LSBzdnlieSgNCiAgZm9ybXVsYSA9IH5JKGZhbGwgPT0gImZhbGwgbGFzdCAxMiBtb250aHMiKSwNCiAgYnkgPSB+IEZMLA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQp0YWJfYW1vdW50X2ZhbGxfRkxfbSoxMDANCg0KIyBibWlfY3V0DQp0YWJfYW1vdW50X2ZhbGxfYm1pX2N1dF9tIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gYm1pX2N1dCwNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0KdGFiX2Ftb3VudF9mYWxsX2JtaV9jdXRfbSoxMDANCg0KIyBhZ2VfY3V0DQp0YWJfYW1vdW50X2ZhbGxfYWdlX2N1dF9tIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gYWdlX2N1dCwNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0KdGFiX2Ftb3VudF9mYWxsX2FnZV9jdXRfbSoxMDANCg0KIyBTSFMgICAgIA0KdGFiX2Ftb3VudF9mYWxsX1NIU19tIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gU0hTLA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQp0YWJfYW1vdW50X2ZhbGxfU0hTX20qMTAwDQoNCiMgZGlhYmV0ZXMNCnRhYl9hbW91bnRfZmFsbF9kaWFiZXRlc19tIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gZGlhYmV0ZXMsDQogIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF9kaWFiZXRlc19tKjEwMA0KDQojIG9zdGVvYXJ0aHJpdGlzDQp0YWJfYW1vdW50X2ZhbGxfb3N0ZW9hcnRocml0aXNfbSA8LSBzdnlieSgNCiAgZm9ybXVsYSA9IH5JKGZhbGwgPT0gImZhbGwgbGFzdCAxMiBtb250aHMiKSwNCiAgYnkgPSB+IG9zdGVvYXJ0aHJpdGlzLA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQp0YWJfYW1vdW50X2ZhbGxfb3N0ZW9hcnRocml0aXNfbSoxMDANCg0KIyBoZWFydF9hdHRhY2sNCnRhYl9hbW91bnRfZmFsbF9oZWFydF9hdHRhY2tfbSA8LSBzdnlieSgNCiAgZm9ybXVsYSA9IH5JKGZhbGwgPT0gImZhbGwgbGFzdCAxMiBtb250aHMiKSwNCiAgYnkgPSB+IGhlYXJ0X2F0dGFjaywNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0KdGFiX2Ftb3VudF9mYWxsX2hlYXJ0X2F0dGFja19tKjEwMA0KDQojIHN0cm9rZQ0KdGFiX2Ftb3VudF9mYWxsX3N0cm9rZV9tIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gc3Ryb2tlLA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQp0YWJfYW1vdW50X2ZhbGxfc3Ryb2tlX20qMTAwDQoNCiMgdXJpbmFyeV9pbmNvbnRpbmVuY2UNCnRhYl9hbW91bnRfZmFsbF91cmluYXJ5X2luY29udGluZW5jZV9tIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gdXJpbmFyeV9pbmNvbnRpbmVuY2UsDQogIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF91cmluYXJ5X2luY29udGluZW5jZV9tKjEwMA0KDQojIG9zdGVvcG9yb3Npcw0KdGFiX2Ftb3VudF9mYWxsX29zdGVvcG9yb3Npc19tIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gb3N0ZW9wb3Jvc2lzLA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQp0YWJfYW1vdW50X2ZhbGxfb3N0ZW9wb3Jvc2lzX20qMTAwDQoNCiMgYWN0aXZpdHkNCnRhYl9hbW91bnRfZmFsbF9hY3Rpdml0eV9tIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gYWN0aXZpdHksDQogIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF9hY3Rpdml0eV9tKjEwMA0KDQojIGFsY29ob2wNCnRhYl9hbW91bnRfZmFsbF9hbGNvaG9sX20gPC0gc3Z5YnkoDQogIGZvcm11bGEgPSB+SShmYWxsID09ICJmYWxsIGxhc3QgMTIgbW9udGhzIiksDQogIGJ5ID0gfiBhbGNvaG9sLA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQp0YWJfYW1vdW50X2ZhbGxfYWxjb2hvbF9tKjEwMA0KYGBgDQoNCiMjIyMgV29tZW4NCg0KYGBge3J9DQojIHdvbWVuDQojIGVkdWNhdGlvbg0KdGFiX2Ftb3VudF9mYWxsX2VkdWNhdGlvbl9mIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gZWR1Y2F0aW9uLA0KICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQp0YWJfYW1vdW50X2ZhbGxfZWR1Y2F0aW9uX2YqMTAwDQoNCiMgbGFuZ3VhZ2UNCnRhYl9hbW91bnRfZmFsbF9sYW5ndWFnZV9mIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gbGFuZ3VhZ2UsDQogIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF9sYW5ndWFnZV9mKjEwMA0KDQojIHVyYmFuX3J1cmFsDQp0YWJfYW1vdW50X2ZhbGxfdXJiYW5fcnVyYWxfZiA8LSBzdnlieSgNCiAgZm9ybXVsYSA9IH5JKGZhbGwgPT0gImZhbGwgbGFzdCAxMiBtb250aHMiKSwNCiAgYnkgPSB+IHVyYmFuX3J1cmFsLA0KICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQp0YWJfYW1vdW50X2ZhbGxfdXJiYW5fcnVyYWxfZioxMDANCg0KIyBuYXRpb25hbGl0eQ0KdGFiX2Ftb3VudF9mYWxsX25hdGlvbmFsaXR5X2YgPC0gc3Z5YnkoDQogIGZvcm11bGEgPSB+SShmYWxsID09ICJmYWxsIGxhc3QgMTIgbW9udGhzIiksDQogIGJ5ID0gfiBuYXRpb25hbGl0eSwNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0KdGFiX2Ftb3VudF9mYWxsX25hdGlvbmFsaXR5X2YqMTAwDQoNCiMgc21va2UgICAgICAgICAgICAgIA0KdGFiX2Ftb3VudF9mYWxsX3Ntb2tlX2YgPC0gc3Z5YnkoDQogIGZvcm11bGEgPSB+SShmYWxsID09ICJmYWxsIGxhc3QgMTIgbW9udGhzIiksDQogIGJ5ID0gfiBzbW9rZSwNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0KdGFiX2Ftb3VudF9mYWxsX3Ntb2tlX2YqMTAwDQoNCiMgRkwNCnRhYl9hbW91bnRfZmFsbF9GTF9mIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gRkwsDQogIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF9GTF9mKjEwMA0KDQojIGJtaV9jdXQNCnRhYl9hbW91bnRfZmFsbF9ibWlfY3V0X2YgPC0gc3Z5YnkoDQogIGZvcm11bGEgPSB+SShmYWxsID09ICJmYWxsIGxhc3QgMTIgbW9udGhzIiksDQogIGJ5ID0gfiBibWlfY3V0LA0KICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQp0YWJfYW1vdW50X2ZhbGxfYm1pX2N1dF9mKjEwMA0KDQojIGFnZV9jdXQNCnRhYl9hbW91bnRfZmFsbF9hZ2VfY3V0X2YgPC0gc3Z5YnkoDQogIGZvcm11bGEgPSB+SShmYWxsID09ICJmYWxsIGxhc3QgMTIgbW9udGhzIiksDQogIGJ5ID0gfiBhZ2VfY3V0LA0KICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQp0YWJfYW1vdW50X2ZhbGxfYWdlX2N1dF9mKjEwMA0KDQojIFNIUyAgICAgDQp0YWJfYW1vdW50X2ZhbGxfU0hTX2YgPC0gc3Z5YnkoDQogIGZvcm11bGEgPSB+SShmYWxsID09ICJmYWxsIGxhc3QgMTIgbW9udGhzIiksDQogIGJ5ID0gfiBTSFMsDQogIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF9TSFNfZioxMDANCg0KIyBkaWFiZXRlcw0KdGFiX2Ftb3VudF9mYWxsX2RpYWJldGVzX2YgPC0gc3Z5YnkoDQogIGZvcm11bGEgPSB+SShmYWxsID09ICJmYWxsIGxhc3QgMTIgbW9udGhzIiksDQogIGJ5ID0gfiBkaWFiZXRlcywNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0KdGFiX2Ftb3VudF9mYWxsX2RpYWJldGVzX2YqMTAwDQoNCiMgb3N0ZW9hcnRocml0aXMNCnRhYl9hbW91bnRfZmFsbF9vc3Rlb2FydGhyaXRpc19mIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gb3N0ZW9hcnRocml0aXMsDQogIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF9vc3Rlb2FydGhyaXRpc19mKjEwMA0KDQojIGhlYXJ0X2F0dGFjaw0KdGFiX2Ftb3VudF9mYWxsX2hlYXJ0X2F0dGFja19mIDwtIHN2eWJ5KA0KICBmb3JtdWxhID0gfkkoZmFsbCA9PSAiZmFsbCBsYXN0IDEyIG1vbnRocyIpLA0KICBieSA9IH4gaGVhcnRfYXR0YWNrLA0KICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQp0YWJfYW1vdW50X2ZhbGxfaGVhcnRfYXR0YWNrX2YqMTAwDQoNCiMgc3Ryb2tlDQp0YWJfYW1vdW50X2ZhbGxfc3Ryb2tlX2YgPC0gc3Z5YnkoDQogIGZvcm11bGEgPSB+SShmYWxsID09ICJmYWxsIGxhc3QgMTIgbW9udGhzIiksDQogIGJ5ID0gfiBzdHJva2UsDQogIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF9zdHJva2VfZioxMDANCg0KIyB1cmluYXJ5X2luY29udGluZW5jZQ0KdGFiX2Ftb3VudF9mYWxsX3VyaW5hcnlfaW5jb250aW5lbmNlX2YgPC0gc3Z5YnkoDQogIGZvcm11bGEgPSB+SShmYWxsID09ICJmYWxsIGxhc3QgMTIgbW9udGhzIiksDQogIGJ5ID0gfiB1cmluYXJ5X2luY29udGluZW5jZSwNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0KdGFiX2Ftb3VudF9mYWxsX3VyaW5hcnlfaW5jb250aW5lbmNlX2YqMTAwDQoNCiMgb3N0ZW9wb3Jvc2lzDQp0YWJfYW1vdW50X2ZhbGxfb3N0ZW9wb3Jvc2lzX2YgPC0gc3Z5YnkoDQogIGZvcm11bGEgPSB+SShmYWxsID09ICJmYWxsIGxhc3QgMTIgbW9udGhzIiksDQogIGJ5ID0gfiBvc3Rlb3Bvcm9zaXMsDQogIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF9vc3Rlb3Bvcm9zaXNfZioxMDANCg0KIyBhY3Rpdml0eQ0KdGFiX2Ftb3VudF9mYWxsX2FjdGl2aXR5X2YgPC0gc3Z5YnkoDQogIGZvcm11bGEgPSB+SShmYWxsID09ICJmYWxsIGxhc3QgMTIgbW9udGhzIiksDQogIGJ5ID0gfiBhY3Rpdml0eSwNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0KdGFiX2Ftb3VudF9mYWxsX2FjdGl2aXR5X2YqMTAwDQoNCiMgYWxjb2hvbA0KdGFiX2Ftb3VudF9mYWxsX2FsY29ob2xfZiA8LSBzdnlieSgNCiAgZm9ybXVsYSA9IH5JKGZhbGwgPT0gImZhbGwgbGFzdCAxMiBtb250aHMiKSwNCiAgYnkgPSB+IGFsY29ob2wsDQogIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnRhYl9hbW91bnRfZmFsbF9hbGNvaG9sX2YqMTAwDQpgYGANCg0KIyMjIFN1bW1hcnkgaW50ZXJncm91cGRpZmZlcmVuY2UgLSB0ZXN0DQoNCi0gICBJbnRlcmdyb3VwZGlmZmVyZW5jZSAoUHJvcCBmYWxsICUgYnkgc3Vic2V0IG9mIGdyb3VwcykNCg0KICAgIC0gICAkc3Z5Y2hpXjItdGVzdCQgJFBlYXJzb24nc1xfeF4yJCB3aXRoIFJhbyAmIFNjb3R0IGFkanVzdG1lbnQNCg0KLSAgICJgc3Z5Y2hpc3EoKWAgY29tcHV0ZXMgZmlyc3QgYW5kIHNlY29uZC1vcmRlciBSYW8tU2NvdHQgY29ycmVjdGlvbnMgdG8gdGhlIFBlYXJzb24gY2hpc3F1YXJlZCB0ZXN0LCBhbmQgdHdvIFdhbGQtdHlwZSB0ZXN0cy4gVGhlIGRlZmF1bHQgKHN0YXRpc3RpYz0iRiIpIGlzIHRoZSBSYW8tU2NvdHQgc2Vjb25kLW9yZGVyIGNvcnJlY3Rpb24uIFRoZSBwLXZhbHVlcyBhcmUgY29tcHV0ZWQgd2l0aCBhIFNhdHRlcnRod2FpdGUgYXBwcm94aW1hdGlvbiB0byB0aGUgZGlzdHJpYnV0aW9uLiBUaGUgYWx0ZXJuYXRpdmUgc3RhdGlzdGljPSJDaGlzcSIgYWRqdXN0cyB0aGUgUGVhcnNvbiBjaGlzcXVhcmVkIHN0YXRpc3RpYyBieSBhIGRlc2lnbiBlZmZlY3QgZXN0aW1hdGUgYW5kIHRoZW4gY29tcGFyZXMgaXQgdG8gdGhlIGNoaXNxdWFyZWQgZGlzdHJpYnV0aW9uIGl0IHdvdWxkIGhhdmUgdW5kZXIgc2ltcGxlIHJhbmRvbSBzYW1wbGluZyIgW0ByYW8xOTg0XS4NCg0KIVtIZXJlIGEgZGVzY3JpcHRpb24gb2YgUHJvZiBUaG9tYXMgTHVtbGV5XShzdnljaGkuUE5HKQ0KDQotICAgRmFsbCAtIFNleA0KDQpgYGB7cn0NCiMgbWVuIHZzIHdvbWVuDQpzdXJ2ZXk6OnN2eWNoaXNxKH5mYWxsICsgZ2VuZGVyLCB3ZGF0XzE3KQ0KYGBgDQoNCiMjIyMgTWVuDQoNCmBgYHtyfQ0KIyBtZW4NCg0KIyBlZHVjYXRpb24NCnN1cnZleTo6c3Z5Y2hpc3EofmZhbGwgKyBlZHVjYXRpb24sIHdkYXRfMTdfbSkNCiMgbGFuZ3VhZ2UNCnN1cnZleTo6c3Z5Y2hpc3EofmZhbGwgKyBsYW5ndWFnZSwgd2RhdF8xN19tKQ0KIyB1cmJhbl9ydXJhbA0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIHVyYmFuX3J1cmFsLCB3ZGF0XzE3X20pDQojIG5hdGlvbmFsaXR5DQpzdXJ2ZXk6OnN2eWNoaXNxKH5mYWxsICsgbmF0aW9uYWxpdHksIHdkYXRfMTdfbSkNCiMgc21va2UNCnN1cnZleTo6c3Z5Y2hpc3EofmZhbGwgKyBzbW9rZSwgd2RhdF8xN19tKQ0KIyBGTA0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIEZMLCB3ZGF0XzE3X20pDQojIGJtaV9jdXQNCnN1cnZleTo6c3Z5Y2hpc3EofmZhbGwgKyBibWlfY3V0LCB3ZGF0XzE3X20pDQojIGJtaQ0KIyBzdXJ2ZXk6OnN2eWNoaXNxKH5mYWxsICsgYm1pLCB3ZGF0XzE3X20pDQojIGFnZV9jdXQNCnN1cnZleTo6c3Z5Y2hpc3EofmZhbGwgKyBhZ2VfY3V0LCB3ZGF0XzE3X20pDQojIGFnZQ0KIyBzdXJ2ZXk6OnN2eWNoaXNxKH5mYWxsICsgYWdlLCB3ZGF0XzE3X20pDQojIFNIUw0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIFNIUywgd2RhdF8xN19tKQ0KIyBkaWFiZXRlcw0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIGRpYWJldGVzLCB3ZGF0XzE3X20pDQojIG9zdGVvYXJ0aHJpdGlzDQpzdXJ2ZXk6OnN2eWNoaXNxKH5mYWxsICsgb3N0ZW9hcnRocml0aXMsIHdkYXRfMTdfbSkNCiMgaGVhcnRfYXR0YWNrDQpzdXJ2ZXk6OnN2eWNoaXNxKH5mYWxsICsgaGVhcnRfYXR0YWNrLCB3ZGF0XzE3X20pDQojIHN0cm9rZQ0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIHN0cm9rZSwgd2RhdF8xN19tKQ0KIyB1cmluYXJ5X2luY29udGluZW5jZQ0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIHVyaW5hcnlfaW5jb250aW5lbmNlLCB3ZGF0XzE3X20pDQojIG9zdGVvcG9yb3Npcw0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIG9zdGVvcG9yb3Npcywgd2RhdF8xN19tKQ0KIyBhY3Rpdml0eQ0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIGFjdGl2aXR5LCB3ZGF0XzE3X20pDQojIGFsY29ob2wNCnN1cnZleTo6c3Z5Y2hpc3EofmZhbGwgKyBhbGNvaG9sLCB3ZGF0XzE3X20pDQpgYGANCg0KIyMjIyBXb21lbg0KDQpgYGB7cn0NCiMgd29tZW4NCg0KIyBlZHVjYXRpb24NCnN1cnZleTo6c3Z5Y2hpc3EofmZhbGwgKyBlZHVjYXRpb24sIHdkYXRfMTdfZikNCiMgbGFuZ3VhZ2UNCnN1cnZleTo6c3Z5Y2hpc3EofmZhbGwgKyBsYW5ndWFnZSwgd2RhdF8xN19mKQ0KIyB1cmJhbl9ydXJhbA0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIHVyYmFuX3J1cmFsLCB3ZGF0XzE3X2YpDQojIG5hdGlvbmFsaXR5DQpzdXJ2ZXk6OnN2eWNoaXNxKH5mYWxsICsgbmF0aW9uYWxpdHksIHdkYXRfMTdfZikNCiMgc21va2UNCnN1cnZleTo6c3Z5Y2hpc3EofmZhbGwgKyBzbW9rZSwgd2RhdF8xN19mKQ0KIyBGTA0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIEZMLCB3ZGF0XzE3X2YpDQojIGJtaV9jdXQNCnN1cnZleTo6c3Z5Y2hpc3EofmZhbGwgKyBibWlfY3V0LCB3ZGF0XzE3X2YpDQojIGJtaQ0KIyBzdXJ2ZXk6OnN2eWNoaXNxKH5mYWxsICsgYm1pLCB3ZGF0XzE3X2YpDQojIGFnZV9jdXQNCnN1cnZleTo6c3Z5Y2hpc3EofmZhbGwgKyBhZ2VfY3V0LCB3ZGF0XzE3X2YpDQojIGFnZQ0KIyBzdXJ2ZXk6OnN2eWNoaXNxKH5mYWxsICsgYWdlLCB3ZGF0XzE3X2YpDQojIFNIUw0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIFNIUywgd2RhdF8xN19mKQ0KIyBkaWFiZXRlcw0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIGRpYWJldGVzLCB3ZGF0XzE3X2YpDQojIG9zdGVvYXJ0aHJpdGlzDQpzdXJ2ZXk6OnN2eWNoaXNxKH5mYWxsICsgb3N0ZW9hcnRocml0aXMsIHdkYXRfMTdfZikNCiMgaGVhcnRfYXR0YWNrDQpzdXJ2ZXk6OnN2eWNoaXNxKH5mYWxsICsgaGVhcnRfYXR0YWNrLCB3ZGF0XzE3X2YpDQojIHN0cm9rZQ0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIHN0cm9rZSwgd2RhdF8xN19mKQ0KIyB1cmluYXJ5X2luY29udGluZW5jZQ0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIHVyaW5hcnlfaW5jb250aW5lbmNlLCB3ZGF0XzE3X2YpDQojIG9zdGVvcG9yb3Npcw0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIG9zdGVvcG9yb3Npcywgd2RhdF8xN19mKQ0KIyBhY3Rpdml0eQ0Kc3VydmV5OjpzdnljaGlzcSh+ZmFsbCArIGFjdGl2aXR5LCB3ZGF0XzE3X2YpDQojIGFsY29ob2wNCnN1cnZleTo6c3Z5Y2hpc3EofmZhbGwgKyBhbGNvaG9sLCB3ZGF0XzE3X2YpDQoNCmBgYA0KDQojIyBVbml2YXJpYXRlIG1vZGVscyB7LnRhYnNldH0NCg0KVW5pdmFyaWF0ZSBsb2dpc3RpYyBtb2RlbHMgc2VwYXJhdGVseSBmb3IgbWVuIGFuZCB3b21lbi4NCg0KIyMjIE1lbg0KDQpgYGB7cn0NCiMgbWVuDQoNCiMgZWR1Y2F0aW9uDQp1bmlfZWR1Y2F0aW9uX20gPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uLA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX2VkdWNhdGlvbl9tLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX2VkdWNhdGlvbl9tLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX21vZGVsX2VkdWNhdGlvbl9tIikNCg0KIyBsYW5ndWFnZQ0KdW5pX2xhbmd1YWdlX20gPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gbGFuZ3VhZ2UsDQogICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfbGFuZ3VhZ2VfbSxleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV9sYW5ndWFnZV9tLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX21vZGVsX2xhbmd1YWdlX20iKQ0KDQojIHVyYmFuX3J1cmFsDQp1bmlfdXJiYW5fcnVyYWxfbSA8LQ0KICBzdXJ2ZXk6OnN2eWdsbSgNCiAgICBJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiB1cmJhbl9ydXJhbCwNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV91cmJhbl9ydXJhbF9tLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX3VyYmFuX3J1cmFsX20sIGV4cCA9IFRSVUUsIGNvbG9ycyA9ICJSYWluYm93IiwgbGVnZW5kLnRpdGxlID0gInVuYWRqdXN0ZWRfbW9kZWxfdXJiYW5fcnVyYWxfbSIpDQoNCiMgbmF0aW9uYWxpdHkNCnVuaV9uYXRpb25hbGl0eV9tIDwtDQogIHN1cnZleTo6c3Z5Z2xtKA0KICAgIEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IG5hdGlvbmFsaXR5LA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX25hdGlvbmFsaXR5X20sZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQojIGp0b29sczo6cGxvdF9zdW1tcyh1bmlfbmF0aW9uYWxpdHlfbSwgZXhwID0gVFJVRSwgY29sb3JzID0gIlJhaW5ib3ciLCBsZWdlbmQudGl0bGUgPSAidW5hZGp1c3RlZF9tb2RlbF9uYXRpb25hbGl0eV9tIikNCg0KIyBzbW9rZQ0KdW5pX3Ntb2tlX20gPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gc21va2UsDQogICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfc21va2VfbSxleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV9zbW9rZV9tLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX21vZGVsX3Ntb2tlX20iKQ0KDQojIEZMDQp1bmlfRkxfbSA8LQ0KICBzdXJ2ZXk6OnN2eWdsbSgNCiAgICBJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBGTCwNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV9GTF9tLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX0ZMX20sIGV4cCA9IFRSVUUsIGNvbG9ycyA9ICJSYWluYm93IiwgbGVnZW5kLnRpdGxlID0gInVuYWRqdXN0ZWRfbW9kZWxfRkxfbSIpDQoNCiMgYm1pX2N1dA0KdW5pX2JtaV9jdXRfbSA8LQ0KICBzdXJ2ZXk6OnN2eWdsbSgNCiAgICBJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBibWlfY3V0LA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX2JtaV9jdXRfbSxleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV9ibWlfY3V0X20sIGV4cCA9IFRSVUUsIGNvbG9ycyA9ICJSYWluYm93IiwgbGVnZW5kLnRpdGxlID0gInVuYWRqdXN0ZWRfbW9kZWxfYm1pX2N1dF9tIikNCg0KIyBibWkNCnVuaV9ibWlfbSA8LQ0KICBzdXJ2ZXk6OnN2eWdsbSgNCiAgICBJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBibWksDQogICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfYm1pX20sZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQojIGp0b29sczo6cGxvdF9zdW1tcyh1bmlfYm1pX20sIGV4cCA9IFRSVUUsIGNvbG9ycyA9ICJSYWluYm93IiwgbGVnZW5kLnRpdGxlID0gInVuYWRqdXN0ZWRfbW9kZWxfYm1pX20iKQ0KDQojIGFnZV9jdXQNCnVuaV9hZ2VfY3V0X20gPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gYWdlX2N1dCwNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV9hZ2VfY3V0X20sZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQojIGp0b29sczo6cGxvdF9zdW1tcyh1bmlfYWdlX2N1dF9tLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX21vZGVsX2FnZV9jdXRfbSIpDQoNCiMgYWdlDQp1bmlfYWdlX20gPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gYWdlLA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX2FnZV9tLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX2FnZV9tLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX21vZGVsX2FnZV9tIikNCg0KIyBTSFMgICAgIA0KdW5pX1NIU19tIDwtDQogIHN1cnZleTo6c3Z5Z2xtKA0KICAgIEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IFNIUywNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV9TSFNfbSxleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV9TSFNfbSwgZXhwID0gVFJVRSwgY29sb3JzID0gIlJhaW5ib3ciLCBsZWdlbmQudGl0bGUgPSAidW5hZGp1c3RlZF9tb2RlbF9TSFNfbSIpDQoNCiMgU0hTX2NvbGxhcHNlZCAgICAgDQp1bmlfU0hTX2NvbGxhcHNlZF9tIDwtDQogIHN1cnZleTo6c3Z5Z2xtKA0KICAgIEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IFNIU19jb2xsYXBzZWQsDQogICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfU0hTX2NvbGxhcHNlZF9tLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX1NIU19jb2xsYXBzZWRfbSwgZXhwID0gVFJVRSwgY29sb3JzID0gIlJhaW5ib3ciLCBsZWdlbmQudGl0bGUgPSAidW5hZGp1c3RlZF9tb2RlbF9TSFNfbSIpDQoNCiMgZGlhYmV0ZXMNCnVuaV9kaWFiZXRlc19tIDwtDQogIHN1cnZleTo6c3Z5Z2xtKA0KICAgIEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGRpYWJldGVzLA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX2RpYWJldGVzX20sZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQojIGp0b29sczo6cGxvdF9zdW1tcyh1bmlfZGlhYmV0ZXNfbSwgZXhwID0gVFJVRSwgY29sb3JzID0gIlJhaW5ib3ciLCBsZWdlbmQudGl0bGUgPSAidW5hZGp1c3RlZF9tb2RlbF9kaWFiZXRlc19tIikNCg0KIyBvc3Rlb2FydGhyaXRpcw0KdW5pX29zdGVvYXJ0aHJpdGlzX20gPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gb3N0ZW9hcnRocml0aXMsDQogICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfb3N0ZW9hcnRocml0aXNfbSxleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV9vc3Rlb2FydGhyaXRpc19tLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX21vZGVsX29zdGVvYXJ0aHJpdGlzX20iKQ0KDQojIGhlYXJ0X2F0dGFjaw0KdW5pX2hlYXJ0X2F0dGFja19tIDwtDQogIHN1cnZleTo6c3Z5Z2xtKA0KICAgIEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGhlYXJ0X2F0dGFjaywNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV9oZWFydF9hdHRhY2tfbSxleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV9oZWFydF9hdHRhY2tfbSwgZXhwID0gVFJVRSwgY29sb3JzID0gIlJhaW5ib3ciLCBsZWdlbmQudGl0bGUgPSAidW5hZGp1c3RlZF9tb2RlbF9oZWFydF9hdHRhY2tfbSIpDQoNCiMgc3Ryb2tlDQp1bmlfc3Ryb2tlX20gPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gc3Ryb2tlLA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX3N0cm9rZV9tLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX3N0cm9rZV9tLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX21vZGVsX3N0cm9rZV9tIikNCg0KIyB1cmluYXJ5X2luY29udGluZW5jZQ0KdW5pX3VyaW5hcnlfaW5jb250aW5lbmNlX20gPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gdXJpbmFyeV9pbmNvbnRpbmVuY2UsDQogICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfdXJpbmFyeV9pbmNvbnRpbmVuY2VfbSxleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV91cmluYXJ5X2luY29udGluZW5jZV9tLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX21vZGVsX3VyaW5hcnlfaW5jb250aW5lbmNlX20iKQ0KDQojIG9zdGVvcG9yb3Npcw0KdW5pX29zdGVvcG9yb3Npc19tIDwtDQogIHN1cnZleTo6c3Z5Z2xtKA0KICAgIEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IG9zdGVvcG9yb3NpcywNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV9vc3Rlb3Bvcm9zaXNfbSxleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV9vc3Rlb3Bvcm9zaXNfbSwgZXhwID0gVFJVRSwgY29sb3JzID0gIlJhaW5ib3ciLCBsZWdlbmQudGl0bGUgPSAidW5hZGp1c3RlZF9tb2RlbF9vc3Rlb3Bvcm9zaXNfbSIpDQoNCiMgYWN0aXZpdHkNCnVuaV9hY3Rpdml0eV9tIDwtDQogIHN1cnZleTo6c3Z5Z2xtKA0KICAgIEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGFjdGl2aXR5LA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX2FjdGl2aXR5X20sZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQojIGp0b29sczo6cGxvdF9zdW1tcyh1bmlfYWN0aXZpdHlfbSwgZXhwID0gVFJVRSwgY29sb3JzID0gIlJhaW5ib3ciLCBsZWdlbmQudGl0bGUgPSAidW5hZGp1c3RlZF9tb2RlbF9hY3Rpdml0eV9tIikNCg0KIyBhbGNvaG9sDQp1bmlfYWxjb2hvbF9tIDwtDQogIHN1cnZleTo6c3Z5Z2xtKA0KICAgIEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGFsY29ob2wsDQogICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfYWxjb2hvbF9tLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX2FsY29ob2xfbSwgZXhwID0gVFJVRSwgY29sb3JzID0gIlJhaW5ib3ciLCBsZWdlbmQudGl0bGUgPSAidW5hZGp1c3RlZF9tb2RlbF9hbGNvaG9sX20iKQ0KYGBgDQoNCiMjIyBXb21lbg0KDQpgYGB7cn0NCiMgd29tZW4NCg0KIyBlZHVjYXRpb24NCnVuaV9lZHVjYXRpb25fZiA8LQ0KICBzdXJ2ZXk6OnN2eWdsbSgNCiAgICBJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24sDQogICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfZWR1Y2F0aW9uX2YsZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQojIGp0b29sczo6cGxvdF9zdW1tcyh1bmlfZWR1Y2F0aW9uX2YsIGV4cCA9IFRSVUUsIGNvbG9ycyA9ICJSYWluYm93IiwgbGVnZW5kLnRpdGxlID0gInVuYWRqdXN0ZWRfZm9kZWxfZWR1Y2F0aW9uX2YiKQ0KDQojIGxhbmd1YWdlDQp1bmlfbGFuZ3VhZ2VfZiA8LQ0KICBzdXJ2ZXk6OnN2eWdsbSgNCiAgICBJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBsYW5ndWFnZSwNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV9sYW5ndWFnZV9mLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX2xhbmd1YWdlX2YsIGV4cCA9IFRSVUUsIGNvbG9ycyA9ICJSYWluYm93IiwgbGVnZW5kLnRpdGxlID0gInVuYWRqdXN0ZWRfZm9kZWxfbGFuZ3VhZ2VfZiIpDQoNCiMgdXJiYW5fcnVyYWwNCnVuaV91cmJhbl9ydXJhbF9mIDwtDQogIHN1cnZleTo6c3Z5Z2xtKA0KICAgIEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IHVyYmFuX3J1cmFsLA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX3VyYmFuX3J1cmFsX2YsZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQojIGp0b29sczo6cGxvdF9zdW1tcyh1bmlfdXJiYW5fcnVyYWxfZiwgZXhwID0gVFJVRSwgY29sb3JzID0gIlJhaW5ib3ciLCBsZWdlbmQudGl0bGUgPSAidW5hZGp1c3RlZF9mb2RlbF91cmJhbl9ydXJhbF9mIikNCg0KIyBuYXRpb25hbGl0eQ0KdW5pX25hdGlvbmFsaXR5X2YgPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gbmF0aW9uYWxpdHksDQogICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfbmF0aW9uYWxpdHlfZixleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV9uYXRpb25hbGl0eV9mLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX2ZvZGVsX25hdGlvbmFsaXR5X2YiKQ0KDQojIHNtb2tlDQp1bmlfc21va2VfZiA8LQ0KICBzdXJ2ZXk6OnN2eWdsbSgNCiAgICBJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBzbW9rZSwNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV9zbW9rZV9mLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX3Ntb2tlX2YsIGV4cCA9IFRSVUUsIGNvbG9ycyA9ICJSYWluYm93IiwgbGVnZW5kLnRpdGxlID0gInVuYWRqdXN0ZWRfZm9kZWxfc21va2VfZiIpDQoNCiMgRkwNCnVuaV9GTF9mIDwtDQogIHN1cnZleTo6c3Z5Z2xtKA0KICAgIEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IEZMLA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX0ZMX2YsZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQojIGp0b29sczo6cGxvdF9zdW1tcyh1bmlfRkxfZiwgZXhwID0gVFJVRSwgY29sb3JzID0gIlJhaW5ib3ciLCBsZWdlbmQudGl0bGUgPSAidW5hZGp1c3RlZF9mb2RlbF9GTF9mIikNCg0KIyBibWlfY3V0DQp1bmlfYm1pX2N1dF9mIDwtDQogIHN1cnZleTo6c3Z5Z2xtKA0KICAgIEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGJtaV9jdXQsDQogICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfYm1pX2N1dF9mLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX2JtaV9jdXRfZiwgZXhwID0gVFJVRSwgY29sb3JzID0gIlJhaW5ib3ciLCBsZWdlbmQudGl0bGUgPSAidW5hZGp1c3RlZF9mb2RlbF9ibWlfY3V0X2YiKQ0KDQojIGJtaQ0KdW5pX2JtaV9mIDwtDQogIHN1cnZleTo6c3Z5Z2xtKA0KICAgIEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGJtaSwNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV9ibWlfZixleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV9ibWlfZiwgZXhwID0gVFJVRSwgY29sb3JzID0gIlJhaW5ib3ciLCBsZWdlbmQudGl0bGUgPSAidW5hZGp1c3RlZF9mb2RlbF9ibWlfZiIpDQoNCiMgYWdlX2N1dA0KdW5pX2FnZV9jdXRfZiA8LQ0KICBzdXJ2ZXk6OnN2eWdsbSgNCiAgICBJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBhZ2VfY3V0LA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX2FnZV9jdXRfZixleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV9hZ2VfY3V0X2YsIGV4cCA9IFRSVUUsIGNvbG9ycyA9ICJSYWluYm93IiwgbGVnZW5kLnRpdGxlID0gInVuYWRqdXN0ZWRfZm9kZWxfYWdlX2N1dF9mIikNCg0KIyBhZ2UNCnVuaV9hZ2VfZiA8LQ0KICBzdXJ2ZXk6OnN2eWdsbSgNCiAgICBJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBhZ2UsDQogICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfYWdlX2YsZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQojIGp0b29sczo6cGxvdF9zdW1tcyh1bmlfYWdlX2YsIGV4cCA9IFRSVUUsIGNvbG9ycyA9ICJSYWluYm93IiwgbGVnZW5kLnRpdGxlID0gInVuYWRqdXN0ZWRfZm9kZWxfYWdlX2YiKQ0KDQojIFNIUyAgICAgDQp1bmlfU0hTX2YgPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gU0hTLA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX1NIU19mLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX1NIU19mLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX2ZvZGVsX1NIU19mIikNCg0KIyBTSFNfY29sbGFwc2VkICAgICANCnVuaV9TSFNfY29sbGFwc2VkX2YgPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gU0hTX2NvbGxhcHNlZCwNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV9TSFNfY29sbGFwc2VkX2YsZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQojIGp0b29sczo6cGxvdF9zdW1tcyh1bmlfU0hTX2NvbGxhcHNlZF9mLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX21vZGVsX1NIU19tIikNCg0KIyBkaWFiZXRlcw0KdW5pX2RpYWJldGVzX2YgPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZGlhYmV0ZXMsDQogICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfZGlhYmV0ZXNfZixleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV9kaWFiZXRlc19mLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX2ZvZGVsX2RpYWJldGVzX2YiKQ0KDQojIG9zdGVvYXJ0aHJpdGlzDQp1bmlfb3N0ZW9hcnRocml0aXNfZiA8LQ0KICBzdXJ2ZXk6OnN2eWdsbSgNCiAgICBJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBvc3Rlb2FydGhyaXRpcywNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV9vc3Rlb2FydGhyaXRpc19mLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX29zdGVvYXJ0aHJpdGlzX2YsIGV4cCA9IFRSVUUsIGNvbG9ycyA9ICJSYWluYm93IiwgbGVnZW5kLnRpdGxlID0gInVuYWRqdXN0ZWRfZm9kZWxfb3N0ZW9hcnRocml0aXNfZiIpDQoNCiMgaGVhcnRfYXR0YWNrDQp1bmlfaGVhcnRfYXR0YWNrX2YgPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gaGVhcnRfYXR0YWNrLA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX2hlYXJ0X2F0dGFja19mLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX2hlYXJ0X2F0dGFja19mLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX2ZvZGVsX2hlYXJ0X2F0dGFja19mIikNCg0KIyBzdHJva2UNCnVuaV9zdHJva2VfZiA8LQ0KICBzdXJ2ZXk6OnN2eWdsbSgNCiAgICBJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBzdHJva2UsDQogICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfc3Ryb2tlX2YsZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQojIGp0b29sczo6cGxvdF9zdW1tcyh1bmlfc3Ryb2tlX2YsIGV4cCA9IFRSVUUsIGNvbG9ycyA9ICJSYWluYm93IiwgbGVnZW5kLnRpdGxlID0gInVuYWRqdXN0ZWRfZm9kZWxfc3Ryb2tlX2YiKQ0KDQojIHVyaW5hcnlfaW5jb250aW5lbmNlDQp1bmlfdXJpbmFyeV9pbmNvbnRpbmVuY2VfZiA8LQ0KICBzdXJ2ZXk6OnN2eWdsbSgNCiAgICBJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiB1cmluYXJ5X2luY29udGluZW5jZSwNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV91cmluYXJ5X2luY29udGluZW5jZV9mLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX3VyaW5hcnlfaW5jb250aW5lbmNlX2YsIGV4cCA9IFRSVUUsIGNvbG9ycyA9ICJSYWluYm93IiwgbGVnZW5kLnRpdGxlID0gInVuYWRqdXN0ZWRfZm9kZWxfdXJpbmFyeV9pbmNvbnRpbmVuY2VfZiIpDQoNCiMgb3N0ZW9wb3Jvc2lzDQp1bmlfb3N0ZW9wb3Jvc2lzX2YgPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gb3N0ZW9wb3Jvc2lzLA0KICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KQ0KICApDQpqdG9vbHM6OnN1bW0odW5pX29zdGVvcG9yb3Npc19mLGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KIyBqdG9vbHM6OnBsb3Rfc3VtbXModW5pX29zdGVvcG9yb3Npc19mLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX2ZvZGVsX29zdGVvcG9yb3Npc19mIikNCg0KIyBhY3Rpdml0eQ0KdW5pX2FjdGl2aXR5X2YgPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gYWN0aXZpdHksDQogICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpDQogICkNCmp0b29sczo6c3VtbSh1bmlfYWN0aXZpdHlfZixleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCiMganRvb2xzOjpwbG90X3N1bW1zKHVuaV9hY3Rpdml0eV9mLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX2ZvZGVsX2FjdGl2aXR5X2YiKQ0KDQojIGFsY29ob2wNCnVuaV9hbGNvaG9sX2YgPC0NCiAgc3VydmV5OjpzdnlnbG0oDQogICAgSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gYWxjb2hvbCwNCiAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkNCiAgKQ0KanRvb2xzOjpzdW1tKHVuaV9hbGNvaG9sX2YsZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQojIGp0b29sczo6cGxvdF9zdW1tcyh1bmlfYWxjb2hvbF9mLCBleHAgPSBUUlVFLCBjb2xvcnMgPSAiUmFpbmJvdyIsIGxlZ2VuZC50aXRsZSA9ICJ1bmFkanVzdGVkX2ZvZGVsX2FsY29ob2xfZiIpDQpgYGANCg0KYGBge3J9DQpqdG9vbHM6OnN1bW0odW5pX0ZMX2YsIGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSA0KQ0KYGBgDQoNCiMjIFRyZW5kIHRlc3QgZm9yIHByZXZhbGVuY2Ugb2YgZmFsbHMgey50YWJzZXR9DQoNCi0gICBbQ29jaHJhbkFybWl0YWdlVGVzdCgpXShodHRwczovL3JkcnIuaW8vY3Jhbi9EZXNjVG9vbHMvbWFuL0NvY2hyYW5Bcm1pdGFnZVRlc3QuaHRtbCkNCi0gICBbcHJvcF90cmVuZF90ZXN0KCldKGh0dHBzOi8vcmRyci5pby9jcmFuL3JzdGF0aXgvbWFuL3Byb3BfdHJlbmRfdGVzdC5odG1sKQ0KLSAgIFtwcm9wLnRyZW5kLnRlc3QoKV0oaHR0cHM6Ly93d3cucmRvY3VtZW50YXRpb24ub3JnL3BhY2thZ2VzL3N0YXRzL3ZlcnNpb25zLzMuNi4yL3RvcGljcy9wcm9wLnRyZW5kLnRlc3QpDQoNCiMjIyBNZW4NCg0KQWZ0ZXIgY2hlY2tpbmcgc3VtbWFyeSB0YWJsZSwgZm9sbG93aW5nIHZhcmlhYmxlcyBnZXQgYSB0cmVuZCB0ZXN0IG9mIHByZXZhbGVuY2Ugb2YgZmFsbHM6DQoNCi0gICBlZHVjYXRpb24NCg0KYGBge3J9DQojIyBDb2NocmFuQXJtaXRhZ2VUZXN0DQojIyBjcmVhdGluZyBtYXRyaXggZm9yIGVkdWNhdGlvbiANCmNhbWF0cml4X2VkdWNhdGlvbl9tIDwtIG1hdHJpeChjKDAuMTk4NTc2OCoxMTk2MzMsIDAuMjI3NzEwOCo0NDExMTIsIDAuMjYyMTc3NSozNjA3NDAsIDAuODAxNDIzMioxMTk2MzMsIDAuNzcyMjg5Mio0NDExMTIsIDAuNzM3ODIyNSozNjA3NDApLCBieXJvdz1UUlVFLCBucm93PTIsIGRpbW5hbWVzPWxpc3QoZmFsbD0wOjEsIGVkdWNhdGlvbj0xOjMpKQ0KZGltbmFtZXMoY2FtYXRyaXhfZWR1Y2F0aW9uX20pIDwtIGxpc3QoDQogIGZhbGwgPSBjKCJ5ZXMiLCAibm8iKSwNCiAgZWR1Y2F0aW9uID0gYygicHJpbWFyeSIsICJzZWNvbmRhcnkiLCAidGVydGlhcnkiKQ0KKQ0KY2FtYXRyaXhfZWR1Y2F0aW9uX20NCiMjIHRlc3Qgd2l0aCBDb2NocmFuQXJtaXRhZ2VUZXN0IGZ1bmN0aW9uDQpEZXNjVG9vbHM6OkNvY2hyYW5Bcm1pdGFnZVRlc3QoY2FtYXRyaXhfZWR1Y2F0aW9uX20pDQpEZXNjVG9vbHM6OkNvY2hyYW5Bcm1pdGFnZVRlc3QoY2FtYXRyaXhfZWR1Y2F0aW9uX20sICJpbmNyZWFzaW5nIikNCkRlc2NUb29sczo6Q29jaHJhbkFybWl0YWdlVGVzdChjYW1hdHJpeF9lZHVjYXRpb25fbSwgImRlY3JlYXNpbmciKQ0KDQojIyB0ZXN0IHdpdGggcHJvcF90cmVuZF90ZXN0IGZ1bmN0aW9uDQpyc3RhdGl4Ojpwcm9wX3RyZW5kX3Rlc3QoY2FtYXRyaXhfZWR1Y2F0aW9uX20pDQoNCiMjIHRlc3Qgd2l0aCBwcm9wLnRyZW5kLnRlc3QgZnVuY3Rpb24NCmZhbGxlcnNfZWR1Y2F0aW9uX20gPC0gYygwLjE5ODU3NjgqMTE5NjMzLCAwLjIyNzcxMDgqNDQxMTEyLCAwLjI2MjE3NzUqMzYwNzQwKQ0Kbm9mYWxsZXJzX2VkdWNhdGlvbl9tIDwtIGMoIDAuODAxNDIzMioxMTk2MzMsIDAuNzcyMjg5Mio0NDExMTIsIDAuNzM3ODIyNSozNjA3NDApDQpwcm9wLnRyZW5kLnRlc3QoZmFsbGVyc19lZHVjYXRpb25fbSwgbm9mYWxsZXJzX2VkdWNhdGlvbl9tKQ0KYGBgDQoNCi0gICBhZ2VfY3V0DQoNCmBgYHtyfQ0KIyMgQ29jaHJhbkFybWl0YWdlVGVzdA0KIyMgY3JlYXRpbmcgbWF0cml4IGZvciBhZ2VfY3V0IA0KY2FtYXRyaXhfYWdlX2N1dF9tIDwtIG1hdHJpeChjKDQ1MTY2MC4xKjAuMjE3MjIxNSwzMjk0OTcuNiowLjI0MDIzNjIsIDE0MzcyMi40KjAuMjg5OTU3OCwgMC43ODI3Nzg1KjQ1MTY2MC4xLCAwLjc1OTc2MzgqMzI5NDk3LjYsIDAuNzEwMDQyMioxNDM3MjIuNCksIGJ5cm93PVRSVUUsIG5yb3c9MiwgZGltbmFtZXM9bGlzdChmYWxsPTA6MSwgYWdlX2N1dD0xOjMpKQ0KZGltbmFtZXMoY2FtYXRyaXhfYWdlX2N1dF9tKSA8LSBsaXN0KA0KICBmYWxsID0gYygieWVzIiwgIm5vIiksDQogIGFnZV9jdXQgPSBjKCI2MC02OSIsICI3MC03OSIsICI4MCsiKQ0KKQ0KY2FtYXRyaXhfYWdlX2N1dF9tDQojIyB0ZXN0IHdpdGggQ29jaHJhbkFybWl0YWdlVGVzdCBmdW5jdGlvbg0KRGVzY1Rvb2xzOjpDb2NocmFuQXJtaXRhZ2VUZXN0KGNhbWF0cml4X2FnZV9jdXRfbSkNCkRlc2NUb29sczo6Q29jaHJhbkFybWl0YWdlVGVzdChjYW1hdHJpeF9hZ2VfY3V0X20sICJpbmNyZWFzaW5nIikNCkRlc2NUb29sczo6Q29jaHJhbkFybWl0YWdlVGVzdChjYW1hdHJpeF9hZ2VfY3V0X20sICJkZWNyZWFzaW5nIikNCmBgYA0KDQotICAgU0hTDQoNCmBgYHtyfQ0KIyMgQ29jaHJhbkFybWl0YWdlVGVzdA0KIyMgY3JlYXRpbmcgbWF0cml4IGZvciBTSFMgDQpjYW1hdHJpeF9TSFNfbSA8LSBtYXRyaXgoYygyNDcyMTIqMC4yMjAxMzgsIDQ0MTE2NCowLjIzNDY1NjgsIDE3NDkzMSowLjI0NjM2MDYsIDQ2MjgyKjAuMjk0Nzk4MywgMTM2NjQqMC4zMTE5ODUzLCAwLjc3OTg2MioyNDcyMTIsIDAuNzY1MzQzMio0NDExNjQsIDAuNzUzNjM5NCoxNzQ5MzEsIDAuNzA1MjAxNyo0NjI4MiwgMC42ODgwMTQ3KjEzNjY0KSwgYnlyb3c9VFJVRSwgbnJvdz0yLCBkaW1uYW1lcz1saXN0KGZhbGw9MDoxLCBTSFM9MTo1KSkNCmRpbW5hbWVzKGNhbWF0cml4X1NIU19tKSA8LSBsaXN0KA0KICBmYWxsID0gYygieWVzIiwgIm5vIiksDQogIFNIUyA9IGMoInZlcnkgZ29vZCIsICJnb29kIiwgImF2ZXJhZ2UiLCAicG9vciIsICJ2ZXJ5IHBvb3IiKQ0KKQ0KY2FtYXRyaXhfU0hTX20NCiMjIHRlc3Qgd2l0aCBDb2NocmFuQXJtaXRhZ2VUZXN0IGZ1bmN0aW9uDQpEZXNjVG9vbHM6OkNvY2hyYW5Bcm1pdGFnZVRlc3QoY2FtYXRyaXhfU0hTX20pDQpEZXNjVG9vbHM6OkNvY2hyYW5Bcm1pdGFnZVRlc3QoY2FtYXRyaXhfU0hTX20sICJpbmNyZWFzaW5nIikNCkRlc2NUb29sczo6Q29jaHJhbkFybWl0YWdlVGVzdChjYW1hdHJpeF9TSFNfbSwgImRlY3JlYXNpbmciKQ0KYGBgDQoNCiMjIyBXb21lbg0KDQpBZnRlciBjaGVja2luZyBzdW1tYXJ5IHRhYmxlLCBmb2xsb3dpbmcgdmFyaWFibGVzIGdldCBhIHRyZW5kLXRlc3Qgb2YgcHJldmFsZW5jZSBvZiBmYWxsczoNCg0KLSAgIEZMDQoNCmBgYHtyfQ0KIyMgQ29jaHJhbkFybWl0YWdlVGVzdA0KIyMgY3JlYXRpbmcgbWF0cml4IGZvciBGTCANCmNhbWF0cml4X0ZMX2YgPC0gbWF0cml4KGMoODAyNDk1KjAuMjMxMDAxNywgMTg1NDMyKjAuMzEyNzg1OCwgNDA3OTEqMC4zNzg4NjUyLCAyNTk3MSowLjM4MDQ3MjgsIDgwMjQ5NSowLjc2ODk5ODMsIDE4NTQzMiowLjY4NzIxNDIsIDQwNzkxKjAuNjIxMTM0OCwgMjU5NzEqMC42MTk1MjcyKSwgYnlyb3c9VFJVRSwgbnJvdz0yLCBkaW1uYW1lcz1saXN0KGZhbGw9MDoxLCBGTD0xOjQpKQ0KZGltbmFtZXMoY2FtYXRyaXhfRkxfZikgPC0gbGlzdCgNCiAgZmFsbCA9IGMoInllcyIsICJubyIpLA0KICBGTCA9IGMoIm5vIGRpZmZpY3VsdGllcyIsICJzbGlnaHQgZGlmZmljdWx0aWVzIiwgImdyZWF0IGRpZmZpY3VsdGllcyIsICJpbmFiaWxpdHkiKQ0KKQ0KY2FtYXRyaXhfRkxfZg0KIyMgdGVzdCB3aXRoIENvY2hyYW5Bcm1pdGFnZVRlc3QgZnVuY3Rpb24NCkRlc2NUb29sczo6Q29jaHJhbkFybWl0YWdlVGVzdChjYW1hdHJpeF9GTF9mKQ0KRGVzY1Rvb2xzOjpDb2NocmFuQXJtaXRhZ2VUZXN0KGNhbWF0cml4X0ZMX2YsICJpbmNyZWFzaW5nIikNCkRlc2NUb29sczo6Q29jaHJhbkFybWl0YWdlVGVzdChjYW1hdHJpeF9GTF9mLCAiZGVjcmVhc2luZyIpDQpgYGANCg0KLSAgIGFnZV9jdXQNCg0KYGBge3J9DQojIyBDb2NocmFuQXJtaXRhZ2VUZXN0DQojIyBjcmVhdGluZyBtYXRyaXggZm9yIGFnZV9jdXQgDQpjYW1hdHJpeF9hZ2VfY3V0X2YgPC0gbWF0cml4KGMoNDgwNzg4KjAuMjAzMTg0OCwgMzcxMzExKjAuMjY1MzU4NCwgMjA1MjI2KjAuMzU5NTAzMSwgNDgwNzg4KjAuNzk2ODE1MiwgMzcxMzExKjAuNzM0NjQxNiwgMjA1MjI2KjAuNjQwNDk2OSksIGJ5cm93PVRSVUUsIG5yb3c9MiwgZGltbmFtZXM9bGlzdChmYWxsPTA6MSwgYWdlX2N1dD0xOjMpKQ0KZGltbmFtZXMoY2FtYXRyaXhfYWdlX2N1dF9mKSA8LSBsaXN0KA0KICBmYWxsID0gYygieWVzIiwgIm5vIiksDQogIGFnZV9jdXQgPSBjKCI2MC02OSIsICI3MC03OSIsICI4MCsiKQ0KKQ0KY2FtYXRyaXhfYWdlX2N1dF9mDQojIyB0ZXN0IHdpdGggQ29jaHJhbkFybWl0YWdlVGVzdCBmdW5jdGlvbg0KRGVzY1Rvb2xzOjpDb2NocmFuQXJtaXRhZ2VUZXN0KGNhbWF0cml4X2FnZV9jdXRfZikNCkRlc2NUb29sczo6Q29jaHJhbkFybWl0YWdlVGVzdChjYW1hdHJpeF9hZ2VfY3V0X2YsICJpbmNyZWFzaW5nIikNCkRlc2NUb29sczo6Q29jaHJhbkFybWl0YWdlVGVzdChjYW1hdHJpeF9hZ2VfY3V0X2YsICJkZWNyZWFzaW5nIikNCmBgYA0KDQotICAgU0hTDQoNCmBgYHtyfQ0KIyMgQ29jaHJhbkFybWl0YWdlVGVzdA0KIyMgY3JlYXRpbmcgbWF0cml4IGZvciBTSFMgDQpjYW1hdHJpeF9TSFNfZiA8LSBtYXRyaXgoYygyODE4OTgqMC4yMDQ1NDEsIDQ4ODUyNiowLjIzNTI1NTcsIDIzNTI3OSowLjMzMzYwNjUsIDQ0NzAwKjAuMzY0MjA0NiwgNjgxOSowLjQwMTY0MDgsIDI4MTg5OCowLjc5NTQ1OSwgNDg4NTI2KjAuNzY0NzQ0MywgMjM1Mjc5KjAuNjY2MzkzNSwgNDQ3MDAqMC42MzU3OTU0LCA2ODE5KjAuNTk4MzU5MiksIGJ5cm93PVRSVUUsIG5yb3c9MiwgZGltbmFtZXM9bGlzdChmYWxsPTA6MSwgU0hTPTE6NSkpDQpkaW1uYW1lcyhjYW1hdHJpeF9TSFNfZikgPC0gbGlzdCgNCiAgZmFsbCA9IGMoInllcyIsICJubyIpLA0KICBTSFMgPSBjKCJ2ZXJ5IGdvb2QiLCAiZ29vZCIsICJhdmVyYWdlIiwgInBvb3IiLCAidmVyeSBwb29yIikNCikNCmNhbWF0cml4X1NIU19mDQojIyB0ZXN0IHdpdGggQ29jaHJhbkFybWl0YWdlVGVzdCBmdW5jdGlvbg0KRGVzY1Rvb2xzOjpDb2NocmFuQXJtaXRhZ2VUZXN0KGNhbWF0cml4X1NIU19mKQ0KRGVzY1Rvb2xzOjpDb2NocmFuQXJtaXRhZ2VUZXN0KGNhbWF0cml4X1NIU19mLCAiaW5jcmVhc2luZyIpDQpEZXNjVG9vbHM6OkNvY2hyYW5Bcm1pdGFnZVRlc3QoY2FtYXRyaXhfU0hTX2YsICJkZWNyZWFzaW5nIikNCmBgYA0KDQojIyBNdWx0aXZhcmlhdGUgbW9kZWxzLCBtb2RlbCBpbnRlZ3JhdGlvbiBieSBjb3ZhcmlhdGUgZ3JvdXBzIHsudGFic2V0fQ0KDQpNdWx0aXZhcmlhdGUgbG9naXN0aWMgcmVncmVzc2lvbiBtb2RlbHMgd2VyZSBjYWxjdWxhdGVkIGZvciBib3RoIG1lbiBhbmQgd29tZW4sIGNoYXJhY3RlcmlzZWQgYnkgdGhlIGFnZ2xvbWVyYXRpdmUgaW5jbHVzaW9uIG9mIHRoZSBgc29jaW8tZGVtb2dyYXBoaWNgLCBgYmlvbG9naWNhbGAgYW5kIGBiZWhhdmlvdXJhbCBjb3ZhcmlhdGUgZ3JvdXBzYC4gSW4gdGhpcyB3YXksIHRocmVlIHJlZ3Jlc3Npb24gbW9kZWxzIHJlc3VsdCBwZXIgZ2VuZGVyLg0KDQojIyMgTWVuDQoNCi0gICBgc29jaW9fZWNvbm9taWNfY292YXJpYXRlYCAmIGBzb2Npb19kZW1vZ3JhcGhpY19jb3ZhcmlhdGVgOg0KDQpgYGB7cn0NCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljXzFfbSA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfMV9tYTwtIGp0b29sczo6c3VtbShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY18xX20sZXhwID0gVFJVRSwgdmlmcyA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSA2KQ0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfMV9tYQ0KYGBgDQoNCi0gICBgc29jaW9fZWNvbm9taWNfY292YXJpYXRlYCAmIGBzb2Npb19kZW1vZ3JhcGhpY19jb3ZhcmlhdGVgICYgYGJpb2xvZ2ljYWxfY292YXJpYXRlc2A6DQotICAgU0hTLVZhcmlhYmxlIGZhY3RvcjogInZlcnkgZ29vZCBhbmQgZ29vZCIgZ2V0IGNvbWJpbmVkDQoNCmBgYHtyfQ0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF8xX20gPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF8xX21hPC0ganRvb2xzOjpzdW1tKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfMV9tLGV4cCA9IFRSVUUsIHZpZnMgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gNikNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfMV9tYQ0KYGBgDQoNCi0gICBgc29jaW9fZWNvbm9taWNfY292YXJpYXRlYCAmIGBzb2Npb19kZW1vZ3JhcGhpY19jb3ZhcmlhdGVgICYgYGJpb2xvZ2ljYWxfY292YXJpYXRlc2AgJiBgYmVoYXZpb3JhbF9jb3ZhcmlhdGVgOg0KDQpgYGB7cn0NCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX20gPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UsIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9tYTwtIGp0b29sczo6c3VtbShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9tLGV4cCA9IFRSVUUsIHZpZnMgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gNikNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX21hDQpgYGANCg0KIyMjIyBNb2RlbCBjb21wYXJpc29uIG1hbGUNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmV4cG9ydF9zdW1tcyhNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY18xX20sIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfMV9tLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9tLCBjb2VmcyA9IGMoIlNlY29uZGFyeSBlZHVjYXRpb24iID0gImVkdWNhdGlvbnVwcGVyIHNlY29uZGFyeSBlZHVjYXRpb24iLCAiVGVydGlhcnkgZWR1Y2F0aW9uIiA9ICJlZHVjYXRpb250ZXJ0aWFyeSBlZHVjYXRpb24iLCAiUnVyYWwgYXJlYSIgPSAidXJiYW5fcnVyYWwiLCAiRm9yZWlnbmVyIiA9ICJuYXRpb25hbGl0eSIsICJGcmVuY2giID0gImxhbmd1YWdlZnJlbmNoIiwgIkl0YWxpYW4iID0gImxhbmd1YWdlaXRhbGlhbiIsICI3MC03OSIgPSAiYWdlX2N1dDcwLTc5IiwgIjgwKyIgPSAiYWdlX2N1dDgwKyIsICJTbGlnaHQgZGlmZmljdWx0eSAoRkwpIiA9ICJGTFNsaWdodCBkaWZmaWN1bHR5IiwgIkdyZWF0IGRpZmZpY3VsdHkgKEZMKSIgPSAiRkxHcmVhdCBkaWZmaWN1bHR5IiwgIkluYWJpbGl0eSAoRkwpIiA9ICJGTEluYWJpbGl0eSIsICJPYmVzaXR5IiA9ICJibWlfY3V0b2Jlc2l0eSIsICJPdmVyd2VpZ2h0IiA9ICJibWlfY3V0b3ZlcndlaWdodCIsICJVbmRlcndlaWdodCIgPSAiYm1pX2N1dHVuZGVyd2VpZ2h0IiwgIkF2ZXJhZ2UgKFNIUykiID0gIlNIU19jb2xsYXBzZWRhdmVyYWdlIiwgIlBvb3IgKFNIUykiID0gIlNIU19jb2xsYXBzZWRwb29yIiwgIlZlcnkgcG9vciAoU0hTKSIgPSAiU0hTX2NvbGxhcHNlZHZlcnkgcG9vciIsICJEaWFiZXRlcyIgPSAiZGlhYmV0ZXMiLCAiT3N0ZW9hcnRocml0aXMiID0gIm9zdGVvYXJ0aHJpdGlzIiwgIkhlYXJ0IGF0dGFjayIgPSAiaGVhcnRfYXR0YWNrIiwgIlN0cm9rZSIgPSAic3Ryb2tlIiwgIlVyaW5hcnkgaW5jb250aW5lbmNlIiA9ICJ1cmluYXJ5X2luY29udGluZW5jZSIsICJPc3Rlb3Bvcm9zaXMiID0gIm9zdGVvcG9yb3NpcyIsICJQYXJ0aWFsbHkgYWN0aXZlIiA9ICJhY3Rpdml0eXBhcnRpYWxseSBhY3RpdmUiLCAiQWN0aXZlIiA9ICJhY3Rpdml0eWFjdGl2ZSIsICJBbGNvaG9sIGxvdyByaXNrIiA9ICJhbGNvaG9sbG93IHJpc2siLCAiQWxjb2hvbCBtb2RlcmF0ZS9pbmNyZWFzZWQgcmlzayIgPSAiYWxjb2hvbG1vZGVyYXRlIG9yIGluY3JlYXNlZCByaXNrIiwgIkZvcm1lciBzbW9rZXIiID0gInNtb2tlZm9ybWVyIHNtb2tlciIsICJTbW9rZXIiID0gInNtb2tlc21va2VyIiksIGV4cCA9IFRSVUUsIHNjYWxlID0gVFJVRSwgZXJyb3JfZm9ybWF0ID0gIih7Y29uZi5sb3d9LXtjb25mLmhpZ2h9KSIsIHRvLmZpbGUgPSAiZG9jeCIsIGZpbGUubmFtZSA9ICJNdWx0aXZhcmlhdGVfMS0zX21hbGUuZG9jeCIpDQoNCnB1YmxpY2F0aW9uX2xheW91dD10aGVtZV9idygpKw0KdGhlbWUocGFuZWwuZ3JpZC5tYWpvcj1lbGVtZW50X2JsYW5rKCksDQogICAgcGFuZWwuZ3JpZC5taW5vcj1lbGVtZW50X2JsYW5rKCksDQogICAgcGFuZWwuYm9yZGVyPWVsZW1lbnRfYmxhbmsoKSwNCiAgICBheGlzLmxpbmU9ZWxlbWVudF9saW5lKCksDQogICAgdGV4dD1lbGVtZW50X3RleHQoZmFtaWx5PSdUaW1lcyBOZXcgUm9tYW4nKSwNCiAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpLCANCiAgICBheGlzLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9MTApLA0KICAgIGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTIpLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMikpDQoNCg0KcGxvdF9zdW1tcyhNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY18xX20sIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfMV9tLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9tLCBjb2VmcyA9IGMoIlNlY29uZGFyeSBlZHVjYXRpb24iID0gImVkdWNhdGlvbnVwcGVyIHNlY29uZGFyeSBlZHVjYXRpb24iLCAiVGVydGlhcnkgZWR1Y2F0aW9uIiA9ICJlZHVjYXRpb250ZXJ0aWFyeSBlZHVjYXRpb24iLCAiUnVyYWwgYXJlYSIgPSAidXJiYW5fcnVyYWwiLCAiRm9yZWlnbmVyIiA9ICJuYXRpb25hbGl0eSIsICJGcmVuY2giID0gImxhbmd1YWdlZnJlbmNoIiwgIkl0YWxpYW4iID0gImxhbmd1YWdlaXRhbGlhbiIsICI3MC03OSIgPSAiYWdlX2N1dDcwLTc5IiwgIjgwKyIgPSAiYWdlX2N1dDgwKyIsICJTbGlnaHQgZGlmZmljdWx0eSAoRkwpIiA9ICJGTFNsaWdodCBkaWZmaWN1bHR5IiwgIkdyZWF0IGRpZmZpY3VsdHkgKEZMKSIgPSAiRkxHcmVhdCBkaWZmaWN1bHR5IiwgIkluYWJpbGl0eSAoRkwpIiA9ICJGTEluYWJpbGl0eSIsICJPYmVzaXR5IiA9ICJibWlfY3V0b2Jlc2l0eSIsICJPdmVyd2VpZ2h0IiA9ICJibWlfY3V0b3ZlcndlaWdodCIsICJVbmRlcndlaWdodCIgPSAiYm1pX2N1dHVuZGVyd2VpZ2h0IiwgIkF2ZXJhZ2UgKFNIUykiID0gIlNIU19jb2xsYXBzZWRhdmVyYWdlIiwgIlBvb3IgKFNIUykiID0gIlNIU19jb2xsYXBzZWRwb29yIiwgIlZlcnkgcG9vciAoU0hTKSIgPSAiU0hTX2NvbGxhcHNlZHZlcnkgcG9vciIsICJEaWFiZXRlcyIgPSAiZGlhYmV0ZXMiLCAiT3N0ZW9hcnRocml0aXMiID0gIm9zdGVvYXJ0aHJpdGlzIiwgIkhlYXJ0IGF0dGFjayIgPSAiaGVhcnRfYXR0YWNrIiwgIlN0cm9rZSIgPSAic3Ryb2tlIiwgIlVyaW5hcnkgaW5jb250aW5lbmNlIiA9ICJ1cmluYXJ5X2luY29udGluZW5jZSIsICJPc3Rlb3Bvcm9zaXMiID0gIm9zdGVvcG9yb3NpcyIsICJQYXJ0aWFsbHkgYWN0aXZlIiA9ICJhY3Rpdml0eXBhcnRpYWxseSBhY3RpdmUiLCAiQWN0aXZlIiA9ICJhY3Rpdml0eWFjdGl2ZSIsICJBbGNvaG9sIGxvdyByaXNrIiA9ICJhbGNvaG9sbG93IHJpc2siLCAiQWxjb2hvbCBtb2RlcmF0ZS9pbmNyZWFzZWQgcmlzayIgPSAiYWxjb2hvbG1vZGVyYXRlIG9yIGluY3JlYXNlZCByaXNrIiwgIkZvcm1lciBzbW9rZXIiID0gInNtb2tlZm9ybWVyIHNtb2tlciIsICJTbW9rZXIiID0gInNtb2tlc21va2VyIiksIHNjYWxlID0gVFJVRSwgcGxvdC5kaXN0cmlidXRpb25zID0gRkFMU0UsIGV4cCA9IFRSVUUpICsgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKDAsIE5BKSkgKyBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYygwLjEsIDAuMiwgMC41LCAxLCAyLCA1LCAxMCksIGxpbWl0cz1jKDAuMSwgMTApKSArIGNvb3JkX3RyYW5zKHg9ImxvZzEwIikgKyBwdWJsaWNhdGlvbl9sYXlvdXQgKyBsYWJzKHggPSAiXG4gYU9SIFxuICIsIHkgPSBOVUxMKQ0KYGBgDQoNCiMjIyBXb21lbg0KDQotICAgYHNvY2lvX2Vjb25vbWljX2NvdmFyaWF0ZWAgJiBgc29jaW9fZGVtb2dyYXBoaWNfY292YXJpYXRlYDoNCg0KYGBge3J9DQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY18xX2YgPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljXzFfZmE8LSBqdG9vbHM6OnN1bW0oTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfMV9mLGV4cCA9IFRSVUUsIHZpZnMgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gNikNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljXzFfZmENCmBgYA0KDQotICAgYHNvY2lvX2Vjb25vbWljX2NvdmFyaWF0ZWAgJiBgc29jaW9fZGVtb2dyYXBoaWNfY292YXJpYXRlYCAmIGBiaW9sb2dpY2FsX2NvdmFyaWF0ZXNgOg0KLSAgIFNIUy1WYXJpYWJsZSBmYWN0b3I6ICJ2ZXJ5IGdvb2QgYW5kIGdvb2QiIGdldCBjb21iaW5lZA0KDQpgYGB7cn0NCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfMV9mIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcywgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfMV9mYTwtIGp0b29sczo6c3VtbShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsXzFfZixleHAgPSBUUlVFLCB2aWZzID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDYpDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsXzFfZmENCmBgYA0KDQotICAgYHNvY2lvX2Vjb25vbWljX2NvdmFyaWF0ZWAgJiBgc29jaW9fZGVtb2dyYXBoaWNfY292YXJpYXRlYCAmIGBiaW9sb2dpY2FsX2NvdmFyaWF0ZXNgICYgYGJlaGF2aW9yYWxfY292YXJpYXRlYDoNCg0KYGBge3J9DQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9mIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfZmE8LSBqdG9vbHM6OnN1bW0oTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfZixleHAgPSBUUlVFLCB2aWZzID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDYpDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9mYQ0KYGBgDQoNCiMjIyMgTW9kZWwgY29tcGFyaXNvbiB3b21lbg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZXhwb3J0X3N1bW1zKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljXzFfZiwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF8xX2YsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX2YsIGNvZWZzID0gYygiU2Vjb25kYXJ5IGVkdWNhdGlvbiIgPSAiZWR1Y2F0aW9udXBwZXIgc2Vjb25kYXJ5IGVkdWNhdGlvbiIsICJUZXJ0aWFyeSBlZHVjYXRpb24iID0gImVkdWNhdGlvbnRlcnRpYXJ5IGVkdWNhdGlvbiIsICJSdXJhbCBhcmVhIiA9ICJ1cmJhbl9ydXJhbCIsICJGb3JlaWduZXIiID0gIm5hdGlvbmFsaXR5IiwgIkZyZW5jaCIgPSAibGFuZ3VhZ2VmcmVuY2giLCAiSXRhbGlhbiIgPSAibGFuZ3VhZ2VpdGFsaWFuIiwgIjcwLTc5IiA9ICJhZ2VfY3V0NzAtNzkiLCAiODArIiA9ICJhZ2VfY3V0ODArIiwgIlNsaWdodCBkaWZmaWN1bHR5IChGTCkiID0gIkZMU2xpZ2h0IGRpZmZpY3VsdHkiLCAiR3JlYXQgZGlmZmljdWx0eSAoRkwpIiA9ICJGTEdyZWF0IGRpZmZpY3VsdHkiLCAiSW5hYmlsaXR5IChGTCkiID0gIkZMSW5hYmlsaXR5IiwgIk9iZXNpdHkiID0gImJtaV9jdXRvYmVzaXR5IiwgIk92ZXJ3ZWlnaHQiID0gImJtaV9jdXRvdmVyd2VpZ2h0IiwgIlVuZGVyd2VpZ2h0IiA9ICJibWlfY3V0dW5kZXJ3ZWlnaHQiLCAiQXZlcmFnZSAoU0hTKSIgPSAiU0hTX2NvbGxhcHNlZGF2ZXJhZ2UiLCAiUG9vciAoU0hTKSIgPSAiU0hTX2NvbGxhcHNlZHBvb3IiLCAiVmVyeSBwb29yIChTSFMpIiA9ICJTSFNfY29sbGFwc2VkdmVyeSBwb29yIiwgIkRpYWJldGVzIiA9ICJkaWFiZXRlcyIsICJPc3Rlb2FydGhyaXRpcyIgPSAib3N0ZW9hcnRocml0aXMiLCAiSGVhcnQgYXR0YWNrIiA9ICJoZWFydF9hdHRhY2siLCAiU3Ryb2tlIiA9ICJzdHJva2UiLCAiVXJpbmFyeSBpbmNvbnRpbmVuY2UiID0gInVyaW5hcnlfaW5jb250aW5lbmNlIiwgIk9zdGVvcG9yb3NpcyIgPSAib3N0ZW9wb3Jvc2lzIiwgIlBhcnRpYWxseSBhY3RpdmUiID0gImFjdGl2aXR5cGFydGlhbGx5IGFjdGl2ZSIsICJBY3RpdmUiID0gImFjdGl2aXR5YWN0aXZlIiwgIkFsY29ob2wgbG93IHJpc2siID0gImFsY29ob2xsb3cgcmlzayIsICJBbGNvaG9sIG1vZGVyYXRlL2luY3JlYXNlZCByaXNrIiA9ICJhbGNvaG9sbW9kZXJhdGUgb3IgaW5jcmVhc2VkIHJpc2siLCAiRm9ybWVyIHNtb2tlciIgPSAic21va2Vmb3JtZXIgc21va2VyIiwgIlNtb2tlciIgPSAic21va2VzbW9rZXIiKSwgZXhwID0gVFJVRSwgc2NhbGUgPSBUUlVFLCBlcnJvcl9mb3JtYXQgPSAiKHtjb25mLmxvd30te2NvbmYuaGlnaH0pIiwgdG8uZmlsZSA9ICJkb2N4IiwgZmlsZS5uYW1lID0gIk11bHRpdmFyaWF0ZV8xLTNfZmVtYWxlLmRvY3giKQ0KDQpwbG90X3N1bW1zKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljXzFfZiwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF8xX2YsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX2YsIGNvZWZzID0gYygiU2Vjb25kYXJ5IGVkdWNhdGlvbiIgPSAiZWR1Y2F0aW9udXBwZXIgc2Vjb25kYXJ5IGVkdWNhdGlvbiIsICJUZXJ0aWFyeSBlZHVjYXRpb24iID0gImVkdWNhdGlvbnRlcnRpYXJ5IGVkdWNhdGlvbiIsICJSdXJhbCBhcmVhIiA9ICJ1cmJhbl9ydXJhbCIsICJGb3JlaWduZXIiID0gIm5hdGlvbmFsaXR5IiwgIkZyZW5jaCIgPSAibGFuZ3VhZ2VmcmVuY2giLCAiSXRhbGlhbiIgPSAibGFuZ3VhZ2VpdGFsaWFuIiwgIjcwLTc5IiA9ICJhZ2VfY3V0NzAtNzkiLCAiODArIiA9ICJhZ2VfY3V0ODArIiwgIlNsaWdodCBkaWZmaWN1bHR5IChGTCkiID0gIkZMU2xpZ2h0IGRpZmZpY3VsdHkiLCAiR3JlYXQgZGlmZmljdWx0eSAoRkwpIiA9ICJGTEdyZWF0IGRpZmZpY3VsdHkiLCAiSW5hYmlsaXR5IChGTCkiID0gIkZMSW5hYmlsaXR5IiwgIk9iZXNpdHkiID0gImJtaV9jdXRvYmVzaXR5IiwgIk92ZXJ3ZWlnaHQiID0gImJtaV9jdXRvdmVyd2VpZ2h0IiwgIlVuZGVyd2VpZ2h0IiA9ICJibWlfY3V0dW5kZXJ3ZWlnaHQiLCAiQXZlcmFnZSAoU0hTKSIgPSAiU0hTX2NvbGxhcHNlZGF2ZXJhZ2UiLCAiUG9vciAoU0hTKSIgPSAiU0hTX2NvbGxhcHNlZHBvb3IiLCAiVmVyeSBwb29yIChTSFMpIiA9ICJTSFNfY29sbGFwc2VkdmVyeSBwb29yIiwgIkRpYWJldGVzIiA9ICJkaWFiZXRlcyIsICJPc3Rlb2FydGhyaXRpcyIgPSAib3N0ZW9hcnRocml0aXMiLCAiSGVhcnQgYXR0YWNrIiA9ICJoZWFydF9hdHRhY2siLCAiU3Ryb2tlIiA9ICJzdHJva2UiLCAiVXJpbmFyeSBpbmNvbnRpbmVuY2UiID0gInVyaW5hcnlfaW5jb250aW5lbmNlIiwgIk9zdGVvcG9yb3NpcyIgPSAib3N0ZW9wb3Jvc2lzIiwgIlBhcnRpYWxseSBhY3RpdmUiID0gImFjdGl2aXR5cGFydGlhbGx5IGFjdGl2ZSIsICJBY3RpdmUiID0gImFjdGl2aXR5YWN0aXZlIiwgIkFsY29ob2wgbG93IHJpc2siID0gImFsY29ob2xsb3cgcmlzayIsICJBbGNvaG9sIG1vZGVyYXRlL2luY3JlYXNlZCByaXNrIiA9ICJhbGNvaG9sbW9kZXJhdGUgb3IgaW5jcmVhc2VkIHJpc2siLCAiRm9ybWVyIHNtb2tlciIgPSAic21va2Vmb3JtZXIgc21va2VyIiwgIlNtb2tlciIgPSAic21va2VzbW9rZXIiKSwgc2NhbGUgPSBUUlVFLCBwbG90LmRpc3RyaWJ1dGlvbnMgPSBGQUxTRSwgZXhwID0gVFJVRSkgKyBwdWJsaWNhdGlvbl9sYXlvdXQgKyBsYWJzKHggPSAiXG4gQU9SIFxuICIsIHkgPSBOVUxMKSArIGNvb3JkX2NhcnRlc2lhbih4bGltID0gYygwLCBOQSkpICsgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cz1jKDAuMSwgMjApLCBicmVha3MgPSBjKDAsIDAuMSwgMC4yLCAwLjUsIDEsIDIsIDUsIDEwLCAyMCkpICsgY29vcmRfdHJhbnMoeD0ibG9nMTAiKSArIHB1YmxpY2F0aW9uX2xheW91dCArIGxhYnMoeCA9ICJcbiBhT1IgXG4gIiwgeSA9IE5VTEwpDQpgYGANCg0KIyMjIE1vZGVsIGNvbXBhcmlzb24gbWVuIHZzLiB3b21lbg0KDQotICAgTW9kZWwgd2l0aCBgc29jaW9fZWNvbm9taWNfY292YXJpYXRlYCAmIGBzb2Npb19kZW1vZ3JhcGhpY19jb3ZhcmlhdGVgICYgYGJpb2xvZ2ljYWxfY292YXJpYXRlc2AgJiBgYmVoYXZpb3JhbF9jb3ZhcmlhdGVgOg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZXhwb3J0X3N1bW1zKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX20sIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX2YsIGV4cCA9IFRSVUUsIHNjYWxlID0gVFJVRSwgZXJyb3JfZm9ybWF0ID0gIlt7Y29uZi5sb3d9LCB7Y29uZi5oaWdofV0iKQ0KDQpwbG90X3N1bW1zKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX20sIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX2YsIGNvZWZzID0gYygiU2Vjb25kYXJ5IGVkdWNhdGlvbiIgPSAiZWR1Y2F0aW9udXBwZXIgc2Vjb25kYXJ5IGVkdWNhdGlvbiIsICJUZXJ0aWFyeSBlZHVjYXRpb24iID0gImVkdWNhdGlvbnRlcnRpYXJ5IGVkdWNhdGlvbiIsICJSdXJhbCBhcmVhIiA9ICJ1cmJhbl9ydXJhbCIsICJGb3JlaWduZXIiID0gIm5hdGlvbmFsaXR5IiwgIkZyZW5jaCIgPSAibGFuZ3VhZ2VmcmVuY2giLCAiSXRhbGlhbiIgPSAibGFuZ3VhZ2VpdGFsaWFuIiwgIjcwLTc5IiA9ICJhZ2VfY3V0NzAtNzkiLCAiODArIiA9ICJhZ2VfY3V0ODArIiwgIlNsaWdodCBkaWZmaWN1bHR5IChGTCkiID0gIkZMU2xpZ2h0IGRpZmZpY3VsdHkiLCAiR3JlYXQgZGlmZmljdWx0eSAoRkwpIiA9ICJGTEdyZWF0IGRpZmZpY3VsdHkiLCAiSW5hYmlsaXR5IChGTCkiID0gIkZMSW5hYmlsaXR5IiwgIk9iZXNpdHkiID0gImJtaV9jdXRvYmVzaXR5IiwgIk92ZXJ3ZWlnaHQiID0gImJtaV9jdXRvdmVyd2VpZ2h0IiwgIlVuZGVyd2VpZ2h0IiA9ICJibWlfY3V0dW5kZXJ3ZWlnaHQiLCAiQXZlcmFnZSAoU0hTKSIgPSAiU0hTX2NvbGxhcHNlZGF2ZXJhZ2UiLCAiUG9vciAoU0hTKSIgPSAiU0hTX2NvbGxhcHNlZHBvb3IiLCAiVmVyeSBwb29yIChTSFMpIiA9ICJTSFNfY29sbGFwc2VkdmVyeSBwb29yIiwgIkRpYWJldGVzIiA9ICJkaWFiZXRlcyIsICJPc3Rlb2FydGhyaXRpcyIgPSAib3N0ZW9hcnRocml0aXMiLCAiSGVhcnQgYXR0YWNrIiA9ICJoZWFydF9hdHRhY2siLCAiU3Ryb2tlIiA9ICJzdHJva2UiLCAiVXJpbmFyeSBpbmNvbnRpbmVuY2UiID0gInVyaW5hcnlfaW5jb250aW5lbmNlIiwgIk9zdGVvcG9yb3NpcyIgPSAib3N0ZW9wb3Jvc2lzIiwgIlBhcnRpYWxseSBhY3RpdmUiID0gImFjdGl2aXR5cGFydGlhbGx5IGFjdGl2ZSIsICJBY3RpdmUiID0gImFjdGl2aXR5YWN0aXZlIiwgIkFsY29ob2wgbG93IHJpc2siID0gImFsY29ob2xsb3cgcmlzayIsICJBbGNvaG9sIG1vZGVyYXRlL2luY3JlYXNlZCByaXNrIiA9ICJhbGNvaG9sbW9kZXJhdGUgb3IgaW5jcmVhc2VkIHJpc2siLCAiRm9ybWVyIHNtb2tlciIgPSAic21va2Vmb3JtZXIgc21va2VyIiwgIlNtb2tlciIgPSAic21va2VzbW9rZXIiKSwgc2NhbGUgPSBUUlVFLCBwbG90LmRpc3RyaWJ1dGlvbnMgPSBGQUxTRSwgZXhwID0gVFJVRSkgKyBwdWJsaWNhdGlvbl9sYXlvdXQgKyBsYWJzKHggPSAiXG4gQU9SIFxuICIsIHkgPSBOVUxMKSArIGNvb3JkX2NhcnRlc2lhbih4bGltID0gYygwLCBOQSkpICsgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cz1jKDAuMSwgMjApLCBicmVha3MgPSBjKDAsIDAuMSwgMC4yLCAwLjUsIDEsIDIsIDUsIDEwLCAyMCkpICsgY29vcmRfdHJhbnMoeD0ibG9nMTAiKSArIHB1YmxpY2F0aW9uX2xheW91dCArIGxhYnMoeCA9ICJcbiBhT1IgXG4gIiwgeSA9IE5VTEwpDQpgYGANCg0KIyMgSW50ZXJhY3Rpb25zIGluIG1hbGUgYW5kIGZlbWFsZSBNb2RlbCAzIHsudGFic2V0fQ0KDQotICAgSW50ZXJhY3Rpb24gdGVybXMgd2l0aCBhZ2UgY2F0ZWdvcmllcyAoJGFnZVxfY2F0ZWdvcmllcyAqIHgkKQ0KDQogICAgJHggPSBlZHVjYXRpb24sIHVyYmFuXF9ydXJhbCwgbmF0aW9uYWxpdHksIGxhbmd1YWdlLCBGTCwgYm1pXF9jdXQsIFNIU1xfY29sbGFwc2VkLCBkaWFiZXRlcyxcXCBvc3Rlb2FydGhyaXRpcywgaGVhcnRcX2F0dGFjaywgc3Ryb2tlLCB1cmluYXJ5XF9pbmNvbnRpbmVuY2UsIG9zdGVvcG9yb3NpcywgYWN0aXZpdHksIGFsY29ob2wsIFxcc21va2UkDQoNCiMjIyBNZW4NCg0KYGBge3J9DQojIGVkdWNhdGlvbiANCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMV9tIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgZWR1Y2F0aW9uICogSShhZ2VfY3V0KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KIyBqdG9vbHM6OnN1bW0oTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xX20sIGV4cCA9IFRSVUUsIGNvbmZpbnQgPSBUUlVFLCBkaWdpdHMgPSAzKQ0KDQojIG1vZGVsIGNvbXBhcmlzb24gYW5kIExSLXRlc3QgcCA8IDAuMDUNCkludGVyYWN0aW9uX0xSVF9hZ2VfZWR1Y2F0aW9uX208LWFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX20sIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMV9tKQ0KDQojIHVyYmFuX3J1cmFsDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzJfbSA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIHVyYmFuX3J1cmFsICogSShhZ2VfY3V0KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KIyBtb2RlbCBjb21wYXJpc29uIGFuZCBMUi10ZXN0IHAgPCAwLjA1DQpJbnRlcmFjdGlvbl9MUlRfYWdlX3VyYmFuX3J1cmFsX208LWFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX20sIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMl9tKQ0KDQojIG5hdGlvbmFsaXR5DQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzNfbSA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIG5hdGlvbmFsaXR5ICogSShhZ2VfY3V0KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KIyBtb2RlbCBjb21wYXJpc29uIGFuZCBMUi10ZXN0IHAgPCAwLjA1DQpJbnRlcmFjdGlvbl9MUlRfYWdlX25hdGlvbmFsaXR5X208LWFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX20sIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfM19tKQ0KDQojIGxhbmd1YWdlDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzRfbSA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIGxhbmd1YWdlICogSShhZ2VfY3V0KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KIyBtb2RlbCBjb21wYXJpc29uIGFuZCBMUi10ZXN0IHAgPCAwLjA1DQpJbnRlcmFjdGlvbl9MUlRfYWdlX2xhbmd1YWdlX208LWFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX20sIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfNF9tKQ0KDQojIEZMIA0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc181X20gPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBGTCAqIEkoYWdlX2N1dCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCiMgbW9kZWwgY29tcGFyaXNvbiBhbmQgTFItdGVzdCBwIDwgMC4wNQ0KSW50ZXJhY3Rpb25fTFJUX2FnZV9GTF9tPC1hbm92YShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9tLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzVfbSkNCg0KIyBibWlfY3V0DQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzZfbSA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIGJtaV9jdXQgKiBJKGFnZV9jdXQpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQojIG1vZGVsIGNvbXBhcmlzb24gYW5kIExSLXRlc3QgcCA8IDAuMDUNCkludGVyYWN0aW9uX0xSVF9hZ2VfYm1pX2N1dF9tPC1hbm92YShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9tLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzZfbSkNCg0KIyBTSFNfY29sbGFwc2VkIA0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc183X20gPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBTSFNfY29sbGFwc2VkICogSShhZ2VfY3V0KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KIyBtb2RlbCBjb21wYXJpc29uIGFuZCBMUi10ZXN0IHAgPCAwLjA1DQpJbnRlcmFjdGlvbl9MUlRfYWdlX1NIU19jb2xsYXBzZWRfbTwtYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfbSwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc183X20pDQoNCiMgZGlhYmV0ZXMNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfOF9tIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgZGlhYmV0ZXMgKiBJKGFnZV9jdXQpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQojIG1vZGVsIGNvbXBhcmlzb24gYW5kIExSLXRlc3QgcCA8IDAuMDUNCkludGVyYWN0aW9uX0xSVF9hZ2VfZGlhYmV0ZXNfbTwtYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfbSwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc184X20pDQoNCiMgb3N0ZW9hcnRocml0aXMNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfOV9tIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgb3N0ZW9hcnRocml0aXMgKiBJKGFnZV9jdXQpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQojIG1vZGVsIGNvbXBhcmlzb24gYW5kIExSLXRlc3QgcCA8IDAuMDUNCkludGVyYWN0aW9uX0xSVF9hZ2Vfb3N0ZW9hcnRocml0aXNfbTwtYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfbSwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc185X20pDQoNCiMgaGVhcnRfYXR0YWNrDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzEwX20gPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBoZWFydF9hdHRhY2sgKiBJKGFnZV9jdXQpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQojIG1vZGVsIGNvbXBhcmlzb24gYW5kIExSLXRlc3QgcCA8IDAuMDUNCkludGVyYWN0aW9uX0xSVF9hZ2VfaGVhcnRfYXR0YWNrX208LWFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX20sIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTBfbSkNCg0KIyBzdHJva2UNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTFfbSA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIHN0cm9rZSAqIEkoYWdlX2N1dCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCiMgbW9kZWwgY29tcGFyaXNvbiBhbmQgTFItdGVzdCBwIDwgMC4wNQ0KSW50ZXJhY3Rpb25fTFJUX2FnZV9zdHJva2VfbTwtYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfbSwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xMV9tKQ0KDQojIHVyaW5hcnlfaW5jb250aW5lbmNlDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzEyX20gPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyB1cmluYXJ5X2luY29udGluZW5jZSAqIEkoYWdlX2N1dCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCiMgbW9kZWwgY29tcGFyaXNvbiBhbmQgTFItdGVzdCBwIDwgMC4wNQ0KSW50ZXJhY3Rpb25fTFJUX2FnZV91cmluYXJ5X2luY29udGluZW5jZV9tPC1hbm92YShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9tLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzEyX20pDQoNCiMgb3N0ZW9wb3Jvc2lzIA0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xM19tIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgb3N0ZW9wb3Jvc2lzICogSShhZ2VfY3V0KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KIyBtb2RlbCBjb21wYXJpc29uIGFuZCBMUi10ZXN0IHAgPCAwLjA1DQpJbnRlcmFjdGlvbl9MUlRfYWdlX29zdGVvcG9yb3Npc19tPC1hbm92YShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9tLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzEzX20pDQoNCiMgYWN0aXZpdHkNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTRfbSA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIGFjdGl2aXR5ICogSShhZ2VfY3V0KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KIyBtb2RlbCBjb21wYXJpc29uIGFuZCBMUi10ZXN0IHAgPCAwLjA1DQpJbnRlcmFjdGlvbl9MUlRfYWdlX2FjdGl2aXR5X208LWFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX20sIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTRfbSkNCg0KIyBhbGNvaG9sDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzE1X20gPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBhbGNvaG9sICogSShhZ2VfY3V0KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KIyBtb2RlbCBjb21wYXJpc29uIGFuZCBMUi10ZXN0IHAgPCAwLjA1DQpJbnRlcmFjdGlvbl9MUlRfYWdlX2FsY29ob2xfbTwtYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfbSwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xNV9tKQ0KDQojIHNtb2tlDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzE2X20gPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBzbW9rZSAqIEkoYWdlX2N1dCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xN19tLA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCiMgbW9kZWwgY29tcGFyaXNvbiBhbmQgTFItdGVzdCBwIDwgMC4wNQ0KSW50ZXJhY3Rpb25fTFJUX2FnZV9zbW9rZV9tPC1hbm92YShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9tLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzE2X20pDQoNCg0KSW50ZXJhY3Rpb25fYWdlX20gPC0gcm91bmQoYyhJbnRlcmFjdGlvbl9MUlRfYWdlX2VkdWNhdGlvbl9tJHAsIEludGVyYWN0aW9uX0xSVF9hZ2VfdXJiYW5fcnVyYWxfbSRwLCBJbnRlcmFjdGlvbl9MUlRfYWdlX25hdGlvbmFsaXR5X20kcCwgSW50ZXJhY3Rpb25fTFJUX2FnZV9sYW5ndWFnZV9tJHAsIEludGVyYWN0aW9uX0xSVF9hZ2VfRkxfbSRwLCBJbnRlcmFjdGlvbl9MUlRfYWdlX2JtaV9jdXRfbSRwLCBJbnRlcmFjdGlvbl9MUlRfYWdlX1NIU19jb2xsYXBzZWRfbSRwLCBJbnRlcmFjdGlvbl9MUlRfYWdlX2RpYWJldGVzX20kcCwgSW50ZXJhY3Rpb25fTFJUX2FnZV9vc3Rlb2FydGhyaXRpc19tJHAsIEludGVyYWN0aW9uX0xSVF9hZ2VfaGVhcnRfYXR0YWNrX20kcCwgSW50ZXJhY3Rpb25fTFJUX2FnZV9zdHJva2VfbSRwLCBJbnRlcmFjdGlvbl9MUlRfYWdlX3VyaW5hcnlfaW5jb250aW5lbmNlX20kcCwgSW50ZXJhY3Rpb25fTFJUX2FnZV9vc3Rlb3Bvcm9zaXNfbSRwLCBJbnRlcmFjdGlvbl9MUlRfYWdlX2FjdGl2aXR5X20kcCwgSW50ZXJhY3Rpb25fTFJUX2FnZV9hbGNvaG9sX20kcCwgSW50ZXJhY3Rpb25fTFJUX2FnZV9zbW9rZV9tJHApLCAzKQ0KDQpJbnRlcmFjdGlvbl9uYW1lczwtIGMoIkVkdWNhdGlvbiBsZXZlbCIsICJSZXNpZGVudGlhbCBhcmVhIiwgIk5hdGlvbmFsaXR5IiwgIkxhbmd1YWdlIHJlZ2lvbiIsICJGdW5jdGlvbmFsIGxpbWl0YXRpb25zIiwgIkJNSSBncm91cCIsICJTZWxmLXBlcmNlaXZlZCBoZWFsdGggc3RhdHVzIiwgIkRpYWJldGVzIiwgIk9zdGVvYXJ0aHJpdGlzIiwgIkhlYXJ0IGF0dGFjayIsICJTdHJva2UiLCAiVXJpbmFyeSBpbmNvbnRpbmVuY2UiLCAiT3N0ZW9wb3Jvc2lzIiwgIlBoeXNpY2FsIGFjdGl2aXR5IiwgIkNocm9uaWMgYWxjb2hvbCBjb25zdW1wdGlvbiIsICJTbW9raW5nIChzbW9rZXIpIikNCg0KSW50ZXJhY3Rpb25fYWdlX3RhYmxlX20gPC0gZGF0YS5mcmFtZShJbnRlcmFjdGlvbl9uYW1lcywgSW50ZXJhY3Rpb25fYWdlX20pDQprbml0cjo6a2FibGUoSW50ZXJhY3Rpb25fYWdlX3RhYmxlX20sIGNvbC5uYW1lcyA9IGMoJ0FnZSBjYXRlZ29yaWVzICogVmFyaWFibGUnLCAnJFAkJyksIGNhcHRpb24gPSAiTGlrZWxpaG9vZCBSYXRpbyBUZXN0IGFuZCAkUCQtdmFsdWUgZm9yIHRoZQ0KYWRkaXRpb24gb2YgdGhlIGludGVyYWN0aW9ucyB0byB0aGUgTWFpbiBFZmZlY3RzIE1vZGVsIDMiKQ0KYGBgDQoNCiMjIyBXb21lbg0KDQpgYGB7cn0NCiMgZWR1Y2F0aW9uIA0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xX2YgPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBlZHVjYXRpb24gKiBJKGFnZV9jdXQpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQojIGp0b29sczo6c3VtbShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzFfZiwgZXhwID0gVFJVRSwgY29uZmludCA9IFRSVUUsIGRpZ2l0cyA9IDMpDQoNCiMgbW9kZWwgY29tcGFyaXNvbiBhbmQgTFItdGVzdCBwIDwgMC4wNQ0KSW50ZXJhY3Rpb25fTFJUX2FnZV9lZHVjYXRpb25fZjwtYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfZiwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xX2YpDQoNCiMgdXJiYW5fcnVyYWwNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMl9mIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgdXJiYW5fcnVyYWwgKiBJKGFnZV9jdXQpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQojIG1vZGVsIGNvbXBhcmlzb24gYW5kIExSLXRlc3QgcCA8IDAuMDUNCkludGVyYWN0aW9uX0xSVF9hZ2VfdXJiYW5fcnVyYWxfZjwtYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfZiwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18yX2YpDQoNCiMgbmF0aW9uYWxpdHkNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfM19mIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgbmF0aW9uYWxpdHkgKiBJKGFnZV9jdXQpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQojIG1vZGVsIGNvbXBhcmlzb24gYW5kIExSLXRlc3QgcCA8IDAuMDUNCkludGVyYWN0aW9uX0xSVF9hZ2VfbmF0aW9uYWxpdHlfZjwtYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfZiwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18zX2YpDQoNCiMgbGFuZ3VhZ2UNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfNF9mIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgbGFuZ3VhZ2UgKiBJKGFnZV9jdXQpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQojIG1vZGVsIGNvbXBhcmlzb24gYW5kIExSLXRlc3QgcCA8IDAuMDUNCkludGVyYWN0aW9uX0xSVF9hZ2VfbGFuZ3VhZ2VfZjwtYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfZiwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc180X2YpDQoNCiMgRkwgDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzVfZiA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIEZMICogSShhZ2VfY3V0KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KIyBtb2RlbCBjb21wYXJpc29uIGFuZCBMUi10ZXN0IHAgPCAwLjA1DQpJbnRlcmFjdGlvbl9MUlRfYWdlX0ZMX2Y8LWFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX2YsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfNV9mKQ0KDQojIGJtaV9jdXQNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfNl9mIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgYm1pX2N1dCAqIEkoYWdlX2N1dCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCiMgbW9kZWwgY29tcGFyaXNvbiBhbmQgTFItdGVzdCBwIDwgMC4wNQ0KSW50ZXJhY3Rpb25fTFJUX2FnZV9ibWlfY3V0X2Y8LWFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX2YsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfNl9mKQ0KDQojIFNIU19jb2xsYXBzZWQgDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzdfZiA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIFNIU19jb2xsYXBzZWQgKiBJKGFnZV9jdXQpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQojIG1vZGVsIGNvbXBhcmlzb24gYW5kIExSLXRlc3QgcCA8IDAuMDUNCkludGVyYWN0aW9uX0xSVF9hZ2VfU0hTX2NvbGxhcHNlZF9mPC1hbm92YShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9mLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzdfZikNCg0KIyBkaWFiZXRlcw0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc184X2YgPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBkaWFiZXRlcyAqIEkoYWdlX2N1dCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCiMgbW9kZWwgY29tcGFyaXNvbiBhbmQgTFItdGVzdCBwIDwgMC4wNQ0KSW50ZXJhY3Rpb25fTFJUX2FnZV9kaWFiZXRlc19mPC1hbm92YShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9mLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzhfZikNCg0KIyBvc3Rlb2FydGhyaXRpcw0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc185X2YgPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBvc3Rlb2FydGhyaXRpcyAqIEkoYWdlX2N1dCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCiMgbW9kZWwgY29tcGFyaXNvbiBhbmQgTFItdGVzdCBwIDwgMC4wNQ0KSW50ZXJhY3Rpb25fTFJUX2FnZV9vc3Rlb2FydGhyaXRpc19mPC1hbm92YShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9mLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzlfZikNCg0KIyBoZWFydF9hdHRhY2sNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTBfZiA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIGhlYXJ0X2F0dGFjayAqIEkoYWdlX2N1dCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xN19mLA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCiMgbW9kZWwgY29tcGFyaXNvbiBhbmQgTFItdGVzdCBwIDwgMC4wNQ0KSW50ZXJhY3Rpb25fTFJUX2FnZV9oZWFydF9hdHRhY2tfZjwtYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfZiwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xMF9mKQ0KDQojIHN0cm9rZQ0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xMV9mIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgc3Ryb2tlICogSShhZ2VfY3V0KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KIyBtb2RlbCBjb21wYXJpc29uIGFuZCBMUi10ZXN0IHAgPCAwLjA1DQpJbnRlcmFjdGlvbl9MUlRfYWdlX3N0cm9rZV9mPC1hbm92YShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9mLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzExX2YpDQoNCiMgdXJpbmFyeV9pbmNvbnRpbmVuY2UNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTJfZiA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICogSShhZ2VfY3V0KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KIyBtb2RlbCBjb21wYXJpc29uIGFuZCBMUi10ZXN0IHAgPCAwLjA1DQpJbnRlcmFjdGlvbl9MUlRfYWdlX3VyaW5hcnlfaW5jb250aW5lbmNlX2Y8LWFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX2YsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTJfZikNCg0KIyBvc3Rlb3Bvcm9zaXMgDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzEzX2YgPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBvc3Rlb3Bvcm9zaXMgKiBJKGFnZV9jdXQpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQojIG1vZGVsIGNvbXBhcmlzb24gYW5kIExSLXRlc3QgcCA8IDAuMDUNCkludGVyYWN0aW9uX0xSVF9hZ2Vfb3N0ZW9wb3Jvc2lzX2Y8LWFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX2YsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTNfZikNCg0KIyBhY3Rpdml0eQ0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xNF9mIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgYWN0aXZpdHkgKiBJKGFnZV9jdXQpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQojIG1vZGVsIGNvbXBhcmlzb24gYW5kIExSLXRlc3QgcCA8IDAuMDUNCkludGVyYWN0aW9uX0xSVF9hZ2VfYWN0aXZpdHlfZjwtYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzFfZiwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xNF9mKQ0KDQojIGFsY29ob2wNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTVfZiA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIGFsY29ob2wgKiBJKGFnZV9jdXQpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQojIG1vZGVsIGNvbXBhcmlzb24gYW5kIExSLXRlc3QgcCA8IDAuMDUNCkludGVyYWN0aW9uX0xSVF9hZ2VfYWxjb2hvbF9mPC1hbm92YShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMV9mLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzE1X2YpDQoNCiMgc21va2UNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTZfZiA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIHNtb2tlICogSShhZ2VfY3V0KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KIyBtb2RlbCBjb21wYXJpc29uIGFuZCBMUi10ZXN0IHAgPCAwLjA1DQpJbnRlcmFjdGlvbl9MUlRfYWdlX3Ntb2tlX2Y8LWFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xX2YsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTZfZikNCg0KDQpJbnRlcmFjdGlvbl9hZ2VfZiA8LSByb3VuZChjKEludGVyYWN0aW9uX0xSVF9hZ2VfZWR1Y2F0aW9uX2YkcCwgSW50ZXJhY3Rpb25fTFJUX2FnZV91cmJhbl9ydXJhbF9mJHAsIEludGVyYWN0aW9uX0xSVF9hZ2VfbmF0aW9uYWxpdHlfZiRwLCBJbnRlcmFjdGlvbl9MUlRfYWdlX2xhbmd1YWdlX2YkcCwgSW50ZXJhY3Rpb25fTFJUX2FnZV9GTF9mJHAsIEludGVyYWN0aW9uX0xSVF9hZ2VfYm1pX2N1dF9mJHAsIEludGVyYWN0aW9uX0xSVF9hZ2VfU0hTX2NvbGxhcHNlZF9mJHAsIEludGVyYWN0aW9uX0xSVF9hZ2VfZGlhYmV0ZXNfZiRwLCBJbnRlcmFjdGlvbl9MUlRfYWdlX29zdGVvYXJ0aHJpdGlzX2YkcCwgSW50ZXJhY3Rpb25fTFJUX2FnZV9oZWFydF9hdHRhY2tfZiRwLCBJbnRlcmFjdGlvbl9MUlRfYWdlX3N0cm9rZV9mJHAsIEludGVyYWN0aW9uX0xSVF9hZ2VfdXJpbmFyeV9pbmNvbnRpbmVuY2VfZiRwLCBJbnRlcmFjdGlvbl9MUlRfYWdlX29zdGVvcG9yb3Npc19mJHAsIEludGVyYWN0aW9uX0xSVF9hZ2VfYWN0aXZpdHlfZiRwLCBJbnRlcmFjdGlvbl9MUlRfYWdlX2FsY29ob2xfZiRwLCBJbnRlcmFjdGlvbl9MUlRfYWdlX3Ntb2tlX2YkcCksIDMpDQoNCkludGVyYWN0aW9uX2FnZV90YWJsZV9mIDwtIGRhdGEuZnJhbWUoSW50ZXJhY3Rpb25fbmFtZXMsIEludGVyYWN0aW9uX2FnZV9mKQ0Ka25pdHI6OmthYmxlKEludGVyYWN0aW9uX2FnZV90YWJsZV9mLCBjb2wubmFtZXMgPSBjKCdBZ2UgY2F0ZWdvcmllcyAqIFZhcmlhYmxlJywgJyRQJCcpLCBjYXB0aW9uID0gIkxpa2VsaWhvb2QgUmF0aW8gVGVzdCBhbmQgJFAkLXZhbHVlIGZvciB0aGUNCmFkZGl0aW9uIG9mIHRoZSBpbnRlcmFjdGlvbnMgdG8gdGhlIE1haW4gRWZmZWN0cyBNb2RlbCAzIikNCmBgYA0KDQojIyBJbnRlcmFjdGlvbiBnZW5kZXJ1bnNwZWNpZmljIE1vZGVsDQoNCi0gICBJbnRlcmFjdGlvbiB0ZXJtcyB3aXRoIHNleCAoJGFnZVxfY2F0ZWdvcmllcyAqIHgkKQ0KDQogICAgJHggPSBlZHVjYXRpb24sIHVyYmFuXF9ydXJhbCwgbmF0aW9uYWxpdHksIGxhbmd1YWdlLCBhZ2VcX2N1dCwgRkwsIGJtaVxfY3V0LCBTSFNcX2NvbGxhcHNlZCwgZGlhYmV0ZXMsXFwgb3N0ZW9hcnRocml0aXMsIGhlYXJ0XF9hdHRhY2ssIHN0cm9rZSwgdXJpbmFyeVxfaW5jb250aW5lbmNlLCBvc3Rlb3Bvcm9zaXMsIGFjdGl2aXR5LCBhbGNvaG9sLCBcXHNtb2tlJA0KDQpgYGB7cn0NCiMgZWR1Y2F0aW9uDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMSA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gc2V4ICsgZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3LA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMSA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gc2V4ICsgZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIGVkdWNhdGlvbiAqSShzZXgpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTcsDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCiMganRvb2xzOjpzdW1tKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMSxleHAgPSBUUlVFLCBjb25maW50ID0gVFJVRSwgZGlnaXRzID0gMykNCg0KSW50ZXJhY3Rpb25fTFJUX3NleF9lZHVjYXRpb24gPC0gYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzEsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMSkNCg0KIyB1cmJhbl9ydXJhbA0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18yIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBzZXggKyBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgdXJiYW5fcnVyYWwgKkkoc2V4KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3LA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCkludGVyYWN0aW9uX0xSVF9zZXhfdXJiYW5fcnVyYWwgPC0gYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzEsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMikNCg0KIyBuYXRpb25hbGl0eQ0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18zIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBzZXggKyBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgbmF0aW9uYWxpdHkgKkkoc2V4KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3LA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCkludGVyYWN0aW9uX0xSVF9zZXhfbmF0aW9uYWxpdHkgPC0gYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzEsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMykNCg0KIyBsYW5ndWFnZQ0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc180IDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBzZXggKyBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgbGFuZ3VhZ2UgKkkoc2V4KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3LA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCkludGVyYWN0aW9uX0xSVF9zZXhfbGFuZ3VhZ2UgPC0gYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzEsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfNCkNCg0KIyBhZ2VfY3V0DQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzUgPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IHNleCArIGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBhZ2VfY3V0ICpJKHNleCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xNywNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQpJbnRlcmFjdGlvbl9MUlRfc2V4X2FnZV9jdXQgPC0gYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzEsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfNSkNCg0KIyBGTA0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc182IDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBzZXggKyBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgRkwgKkkoc2V4KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3LA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCkludGVyYWN0aW9uX0xSVF9zZXhfRkwgPC0gYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzEsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfNikNCg0KIyBibWlfY3V0DQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzcgPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IHNleCArIGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBibWlfY3V0ICpJKHNleCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xNywNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQpJbnRlcmFjdGlvbl9MUlRfc2V4X2JtaV9jdXQgPC0gYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzEsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfNykNCg0KIyBTSFNfY29sbGFwc2VkDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzggPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IHNleCArIGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBTSFNfY29sbGFwc2VkICpJKHNleCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xNywNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQpJbnRlcmFjdGlvbl9MUlRfc2V4X1NIU19jb2xsYXBzZWQgPC0gYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzEsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfOCkNCg0KIyBkaWFiZXRlcw0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc185IDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBzZXggKyBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgZGlhYmV0ZXMgKkkoc2V4KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3LA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCkludGVyYWN0aW9uX0xSVF9zZXhfZGlhYmV0ZXMgPC0gYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzEsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfOSkNCg0KIyBvc3Rlb2FydGhyaXRpcw0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xMCA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gc2V4ICsgZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIG9zdGVvYXJ0aHJpdGlzICpJKHNleCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xNywNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQpJbnRlcmFjdGlvbl9MUlRfc2V4X29zdGVvYXJ0aHJpdGlzIDwtIGFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzEwKQ0KDQojIGhlYXJ0X2F0dGFjaw0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xMSA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gc2V4ICsgZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIGhlYXJ0X2F0dGFjayAqSShzZXgpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTcsDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KSW50ZXJhY3Rpb25fTFJUX3NleF9oZWFydF9hdHRhY2sgPC0gYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzEsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTEpDQoNCiMgc3Ryb2tlDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzEyIDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBzZXggKyBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgc3Ryb2tlICpJKHNleCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xNywNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQpJbnRlcmFjdGlvbl9MUlRfc2V4X3N0cm9rZSA8LSBhbm92YShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMSwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xMikNCg0KIyB1cmluYXJ5X2luY29udGluZW5jZQ0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xMyA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gc2V4ICsgZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICpJKHNleCksIA0KICAgICAgICAgICAgICAgZGVzaWduID0gd2RhdF8xNywNCiAgICAgICAgICAgICAgIGZhbWlseSA9IHF1YXNpYmlub21pYWwobG9naXQpKQ0KDQpJbnRlcmFjdGlvbl9MUlRfc2V4X3VyaW5hcnlfaW5jb250aW5lbmNlIDwtIGFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzEzKQ0KDQojIG9zdGVvcG9yb3Npcw0KTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xNCA8LSBzdnlnbG0oSShmYWxsPT0iZmFsbCBsYXN0IDEyIG1vbnRocyIpIH4gc2V4ICsgZWR1Y2F0aW9uICsgdXJiYW5fcnVyYWwgKyBuYXRpb25hbGl0eSArIGxhbmd1YWdlICsgYWdlX2N1dCArIEZMICsgYm1pX2N1dCArIFNIU19jb2xsYXBzZWQgKyBkaWFiZXRlcyArIG9zdGVvYXJ0aHJpdGlzICsgaGVhcnRfYXR0YWNrICsgc3Ryb2tlICsgdXJpbmFyeV9pbmNvbnRpbmVuY2UgKyBvc3Rlb3Bvcm9zaXMgKyBhY3Rpdml0eSArIGFsY29ob2wgKyBzbW9rZSArIG9zdGVvcG9yb3NpcyAqSShzZXgpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTcsDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KSW50ZXJhY3Rpb25fTFJUX3NleF9vc3Rlb3Bvcm9zaXMgPC0gYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzEsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTQpDQoNCiMgYWN0aXZpdHkNCk1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTUgPC0gc3Z5Z2xtKEkoZmFsbD09ImZhbGwgbGFzdCAxMiBtb250aHMiKSB+IHNleCArIGVkdWNhdGlvbiArIHVyYmFuX3J1cmFsICsgbmF0aW9uYWxpdHkgKyBsYW5ndWFnZSArIGFnZV9jdXQgKyBGTCArIGJtaV9jdXQgKyBTSFNfY29sbGFwc2VkICsgZGlhYmV0ZXMgKyBvc3Rlb2FydGhyaXRpcyArIGhlYXJ0X2F0dGFjayArIHN0cm9rZSArIHVyaW5hcnlfaW5jb250aW5lbmNlICsgb3N0ZW9wb3Jvc2lzICsgYWN0aXZpdHkgKyBhbGNvaG9sICsgc21va2UgKyBhY3Rpdml0eSAqSShzZXgpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTcsDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KSW50ZXJhY3Rpb25fTFJUX3NleF9hY3Rpdml0eSA8LSBhbm92YShNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfMSwgTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsX2ludGVyYWN0aW9uc18xNSkNCg0KIyBhbGNvaG9sDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzE2IDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBzZXggKyBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgYWxjb2hvbCAqSShzZXgpLCANCiAgICAgICAgICAgICAgIGRlc2lnbiA9IHdkYXRfMTcsDQogICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKGxvZ2l0KSkNCg0KSW50ZXJhY3Rpb25fTFJUX3NleF9hbGNvaG9sIDwtIGFub3ZhKE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF8xLCBNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzE2KQ0KDQojIHNtb2tlDQpNb2RlbF9zb2Npb19lY29ub21pY19zb2Npb19kZW1vZ3JhcGhpY19iaW9sb2dpY2FsX2JlaGF2aW9yYWxfaW50ZXJhY3Rpb25zXzE3IDwtIHN2eWdsbShJKGZhbGw9PSJmYWxsIGxhc3QgMTIgbW9udGhzIikgfiBzZXggKyBlZHVjYXRpb24gKyB1cmJhbl9ydXJhbCArIG5hdGlvbmFsaXR5ICsgbGFuZ3VhZ2UgKyBhZ2VfY3V0ICsgRkwgKyBibWlfY3V0ICsgU0hTX2NvbGxhcHNlZCArIGRpYWJldGVzICsgb3N0ZW9hcnRocml0aXMgKyBoZWFydF9hdHRhY2sgKyBzdHJva2UgKyB1cmluYXJ5X2luY29udGluZW5jZSArIG9zdGVvcG9yb3NpcyArIGFjdGl2aXR5ICsgYWxjb2hvbCArIHNtb2tlICsgc21va2UgKkkoc2V4KSwgDQogICAgICAgICAgICAgICBkZXNpZ24gPSB3ZGF0XzE3LA0KICAgICAgICAgICAgICAgZmFtaWx5ID0gcXVhc2liaW5vbWlhbChsb2dpdCkpDQoNCkludGVyYWN0aW9uX0xSVF9zZXhfc21va2UgPC0gYW5vdmEoTW9kZWxfc29jaW9fZWNvbm9taWNfc29jaW9fZGVtb2dyYXBoaWNfYmlvbG9naWNhbF9iZWhhdmlvcmFsXzEsIE1vZGVsX3NvY2lvX2Vjb25vbWljX3NvY2lvX2RlbW9ncmFwaGljX2Jpb2xvZ2ljYWxfYmVoYXZpb3JhbF9pbnRlcmFjdGlvbnNfMTcpDQoNCkludGVyYWN0aW9uX25hbWVzXzE8LSBjKCJFZHVjYXRpb24gbGV2ZWwiLCAiUmVzaWRlbnRpYWwgYXJlYSIsICJOYXRpb25hbGl0eSIsICJMYW5ndWFnZSByZWdpb24iLCAiQWdlIGNhdGVnb3JpZXMiLCAiRnVuY3Rpb25hbCBsaW1pdGF0aW9ucyIsICJCTUkgZ3JvdXAiLCAiU2VsZi1wZXJjZWl2ZWQgaGVhbHRoIHN0YXR1cyIsICJEaWFiZXRlcyIsICJPc3Rlb2FydGhyaXRpcyIsICJIZWFydCBhdHRhY2siLCAiU3Ryb2tlIiwgIlVyaW5hcnkgaW5jb250aW5lbmNlIiwgIk9zdGVvcG9yb3NpcyIsICJQaHlzaWNhbCBhY3Rpdml0eSIsICJDaHJvbmljIGFsY29ob2wgY29uc3VtcHRpb24iLCAiU21va2luZyAoc21va2VyKSIpDQoNCkludGVyYWN0aW9uX3NleCA8LSByb3VuZChjKEludGVyYWN0aW9uX0xSVF9zZXhfZWR1Y2F0aW9uJHAsIEludGVyYWN0aW9uX0xSVF9zZXhfdXJiYW5fcnVyYWwkcCwgSW50ZXJhY3Rpb25fTFJUX3NleF9uYXRpb25hbGl0eSRwLCBJbnRlcmFjdGlvbl9MUlRfc2V4X2xhbmd1YWdlJHAsIEludGVyYWN0aW9uX0xSVF9zZXhfYWdlX2N1dCRwLCBJbnRlcmFjdGlvbl9MUlRfc2V4X0ZMJHAsIEludGVyYWN0aW9uX0xSVF9zZXhfYm1pX2N1dCRwLCBJbnRlcmFjdGlvbl9MUlRfc2V4X1NIU19jb2xsYXBzZWQkcCwgSW50ZXJhY3Rpb25fTFJUX3NleF9kaWFiZXRlcyRwLCBJbnRlcmFjdGlvbl9MUlRfc2V4X29zdGVvYXJ0aHJpdGlzJHAsIEludGVyYWN0aW9uX0xSVF9zZXhfaGVhcnRfYXR0YWNrJHAsIEludGVyYWN0aW9uX0xSVF9zZXhfc3Ryb2tlJHAsIEludGVyYWN0aW9uX0xSVF9zZXhfdXJpbmFyeV9pbmNvbnRpbmVuY2UkcCwgSW50ZXJhY3Rpb25fTFJUX3NleF9vc3Rlb3Bvcm9zaXMkcCwgSW50ZXJhY3Rpb25fTFJUX3NleF9hY3Rpdml0eSRwLCBJbnRlcmFjdGlvbl9MUlRfc2V4X2FsY29ob2wkcCwgSW50ZXJhY3Rpb25fTFJUX3NleF9zbW9rZSRwKSwgMykNCg0KSW50ZXJhY3Rpb25fc2V4X3RhYmxlIDwtIGRhdGEuZnJhbWUoSW50ZXJhY3Rpb25fbmFtZXNfMSwgSW50ZXJhY3Rpb25fc2V4KQ0Ka25pdHI6OmthYmxlKEludGVyYWN0aW9uX3NleF90YWJsZSwgY29sLm5hbWVzID0gYygnU2V4ICogVmFyaWFibGUnLCAnJFAkJyksIGNhcHRpb24gPSAiTGlrZWxpaG9vZCBSYXRpbyBUZXN0IGFuZCAkUCQtdmFsdWUgZm9yIHRoZQ0KYWRkaXRpb24gb2YgdGhlIGludGVyYWN0aW9ucyB0byB0aGUgTWFpbiBFZmZlY3RzIE1vZGVsIDMiKQ0KDQpgYGANCg0KIyMgQW5hbHlzaXMgb2YgZmFsbCBjb3VudA0KDQojIyMgUHJldmFsZW5jZSBvZiBtdWx0aXBsZSBmYWxscyBieSBjaGFyYWN0ZXJpc3RpYyB7LnRhYnNldH0NCg0KLSAgICR5ID0gZmFsbFxfY291bnQkIChsZXZlbHM6IDEsMiwzLDQ7IG5vIGZhbGwsIDEgZmFsbCwgdHdvIGZhbGxzLCBtb3JlIHRoZW4gdHdvIGZhbGxzKQ0KDQotICAgJHkgPSBmYWxsXF9jb3VudFxfY29sbGFwc2VkJCBpcyB1c2VkIGluIHRoaXMgYW5hbHlzaXMgYW5kIGlzIGdlbmVyYXRlZCBieSBkaWNob3RvbWl6YXRpb24gZnJvbSAkZmFsbFxfY291bnQkICgxLDIgPSBubyBmYWxsIG9yIDE7IDMsNCA9IHR3byBmYWxscyBvciBtb3JlKQ0KDQotICAgV2hlcmUgJHkkIHJlcHJlc2VudHMgdGhlIGRlcGVuZGVudCB2YXJpYWJsZQ0KDQotICAgRHVlIHRvIHRoZSBzY29wZSBvZiB0aGlzIHB1YmxpY2F0aW9uLCB0aGUgYW5hbHlzaXMgd2FzIGxpbWl0ZWQgdG8gdGhlIHByZXZhbGVuY2Ugb2YgbXVsdGlwbGUgZmFsbHMgZXN0aW1hdGlvbi4NCg0KIyMjIyBNZW4NCg0KLSAgIGVkdWNhdGlvbg0KDQpgYGB7cn0NCnRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfZWR1Y2F0aW9uX20gPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IGVkdWNhdGlvbiwNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9lZHVjYXRpb25fbVssMjo0XSwzKSoxMDANCmBgYA0KDQotICAgdXJiYW5fcnVyYWwNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX3VyYmFuX3J1cmFsX20gPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IHVyYmFuX3J1cmFsLA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQpyb3VuZCh0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX3VyYmFuX3J1cmFsX21bLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIG5hdGlvbmFsaXR5DQoNCmBgYHtyfQ0KdGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9uYXRpb25hbGl0eV9tIDwtIHN2eWJ5KGZvcm11bGEgPSB+SShmYWxsX2NvdW50X2NvbGxhcHNlZD09InR3b19mYWxsc19vcl9tb3JlIiksDQogIGJ5ID0gfiBuYXRpb25hbGl0eSwNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9uYXRpb25hbGl0eV9tWywyOjRdLDMpKjEwMA0KYGBgDQoNCi0gICBsYW5ndWFnZQ0KDQpgYGB7cn0NCnRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfbGFuZ3VhZ2VfbSA8LSBzdnlieShmb3JtdWxhID0gfkkoZmFsbF9jb3VudF9jb2xsYXBzZWQ9PSJ0d29fZmFsbHNfb3JfbW9yZSIpLA0KICBieSA9IH4gbGFuZ3VhZ2UsDQogIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnJvdW5kKHRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfbGFuZ3VhZ2VfbVssMjo0XSwzKSoxMDANCmBgYA0KDQotICAgYWdlX2N1dA0KDQpgYGB7cn0NCnRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfYWdlX2N1dF9tIDwtIHN2eWJ5KGZvcm11bGEgPSB+SShmYWxsX2NvdW50X2NvbGxhcHNlZD09InR3b19mYWxsc19vcl9tb3JlIiksDQogIGJ5ID0gfiBhZ2VfY3V0LA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQpyb3VuZCh0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2FnZV9jdXRfbVssMjo0XSwzKSoxMDANCmBgYA0KDQotICAgRkwNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX0ZMX20gPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IEZMLA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQpyb3VuZCh0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX0ZMX21bLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIGJtaV9jdXQNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2JtaV9jdXRfbSA8LSBzdnlieShmb3JtdWxhID0gfkkoZmFsbF9jb3VudF9jb2xsYXBzZWQ9PSJ0d29fZmFsbHNfb3JfbW9yZSIpLA0KICBieSA9IH4gYm1pX2N1dCwNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9ibWlfY3V0X21bLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIFNIUw0KDQpgYGB7cn0NCnRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfU0hTX20gPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IFNIUywNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9TSFNfbVssMjo0XSwzKSoxMDANCmBgYA0KDQotICAgZGlhYmV0ZXMNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2RpYWJldGVzX20gPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IGRpYWJldGVzLA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQpyb3VuZCh0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2RpYWJldGVzX21bLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIG9zdGVvYXJ0aHJpdGlzDQoNCmBgYHtyfQ0KdGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9vc3Rlb2FydGhyaXRpc19tIDwtIHN2eWJ5KGZvcm11bGEgPSB+SShmYWxsX2NvdW50X2NvbGxhcHNlZD09InR3b19mYWxsc19vcl9tb3JlIiksDQogIGJ5ID0gfiBvc3Rlb2FydGhyaXRpcywNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9vc3Rlb2FydGhyaXRpc19tWywyOjRdLDMpKjEwMA0KYGBgDQoNCi0gICBoZWFydF9hdHRhY2sNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2hlYXJ0X2F0dGFja19tIDwtIHN2eWJ5KGZvcm11bGEgPSB+SShmYWxsX2NvdW50X2NvbGxhcHNlZD09InR3b19mYWxsc19vcl9tb3JlIiksDQogIGJ5ID0gfiBoZWFydF9hdHRhY2ssDQogIGRlc2lnbiA9IHdkYXRfMTdfbSwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnJvdW5kKHRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfaGVhcnRfYXR0YWNrX21bLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIHN0cm9rZQ0KDQpgYGB7cn0NCnRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfc3Ryb2tlX20gPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IHN0cm9rZSwNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9zdHJva2VfbVssMjo0XSwzKSoxMDANCmBgYA0KDQotICAgdXJpbmFyeV9pbmNvbnRpbmVuY2UNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX3VyaW5hcnlfaW5jb250aW5lbmNlX20gPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IHVyaW5hcnlfaW5jb250aW5lbmNlLA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQpyb3VuZCh0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX3VyaW5hcnlfaW5jb250aW5lbmNlX21bLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIG9zdGVvcG9yb3Npcw0KDQpgYGB7cn0NCnRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfb3N0ZW9wb3Jvc2lzX20gPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IG9zdGVvcG9yb3NpcywNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9vc3Rlb3Bvcm9zaXNfbVssMjo0XSwzKSoxMDANCmBgYA0KDQotICAgYWN0aXZpdHkNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2FjdGl2aXR5X20gPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IGFjdGl2aXR5LA0KICBkZXNpZ24gPSB3ZGF0XzE3X20sDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQpyb3VuZCh0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2FjdGl2aXR5X21bLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIGFsY29ob2wNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2FsY29ob2xfbSA8LSBzdnlieShmb3JtdWxhID0gfkkoZmFsbF9jb3VudF9jb2xsYXBzZWQ9PSJ0d29fZmFsbHNfb3JfbW9yZSIpLA0KICBieSA9IH4gYWxjb2hvbCwNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9hbGNvaG9sX21bLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIHNtb2tlDQoNCmBgYHtyfQ0KdGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9zbW9rZV9tIDwtIHN2eWJ5KGZvcm11bGEgPSB+SShmYWxsX2NvdW50X2NvbGxhcHNlZD09InR3b19mYWxsc19vcl9tb3JlIiksDQogIGJ5ID0gfiBzbW9rZSwNCiAgZGVzaWduID0gd2RhdF8xN19tLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9zbW9rZV9tWywyOjRdLDMpKjEwMA0KYGBgDQoNCiMjIyMgV29tZW4NCg0KLSAgIGVkdWNhdGlvbg0KDQpgYGB7cn0NCnRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfZWR1Y2F0aW9uX2YgPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IGVkdWNhdGlvbiwNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9lZHVjYXRpb25fZlssMjo0XSwzKSoxMDANCmBgYA0KDQotICAgdXJiYW5fcnVyYWwNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX3VyYmFuX3J1cmFsX2YgPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IHVyYmFuX3J1cmFsLA0KICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQpyb3VuZCh0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX3VyYmFuX3J1cmFsX2ZbLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIG5hdGlvbmFsaXR5DQoNCmBgYHtyfQ0KdGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9uYXRpb25hbGl0eV9mIDwtIHN2eWJ5KGZvcm11bGEgPSB+SShmYWxsX2NvdW50X2NvbGxhcHNlZD09InR3b19mYWxsc19vcl9tb3JlIiksDQogIGJ5ID0gfiBuYXRpb25hbGl0eSwNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9uYXRpb25hbGl0eV9mWywyOjRdLDMpKjEwMA0KYGBgDQoNCi0gICBsYW5ndWFnZQ0KDQpgYGB7cn0NCnRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfbGFuZ3VhZ2VfZiA8LSBzdnlieShmb3JtdWxhID0gfkkoZmFsbF9jb3VudF9jb2xsYXBzZWQ9PSJ0d29fZmFsbHNfb3JfbW9yZSIpLA0KICBieSA9IH4gbGFuZ3VhZ2UsDQogIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnJvdW5kKHRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfbGFuZ3VhZ2VfZlssMjo0XSwzKSoxMDANCmBgYA0KDQotICAgYWdlX2N1dA0KDQpgYGB7cn0NCnRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfYWdlX2N1dF9mIDwtIHN2eWJ5KGZvcm11bGEgPSB+SShmYWxsX2NvdW50X2NvbGxhcHNlZD09InR3b19mYWxsc19vcl9tb3JlIiksDQogIGJ5ID0gfiBhZ2VfY3V0LA0KICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQpyb3VuZCh0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2FnZV9jdXRfZlssMjo0XSwzKSoxMDANCmBgYA0KDQotICAgRkwNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX0ZMX2YgPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IEZMLA0KICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQpyb3VuZCh0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX0ZMX2ZbLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIGJtaV9jdXQNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2JtaV9jdXRfZiA8LSBzdnlieShmb3JtdWxhID0gfkkoZmFsbF9jb3VudF9jb2xsYXBzZWQ9PSJ0d29fZmFsbHNfb3JfbW9yZSIpLA0KICBieSA9IH4gYm1pX2N1dCwNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9ibWlfY3V0X2ZbLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIFNIUw0KDQpgYGB7cn0NCnRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfU0hTX2YgPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IFNIUywNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9TSFNfZlssMjo0XSwzKSoxMDANCmBgYA0KDQotICAgZGlhYmV0ZXMNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2RpYWJldGVzX2YgPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IGRpYWJldGVzLA0KICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQpyb3VuZCh0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2RpYWJldGVzX2ZbLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIG9zdGVvYXJ0aHJpdGlzDQoNCmBgYHtyfQ0KdGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9vc3Rlb2FydGhyaXRpc19mIDwtIHN2eWJ5KGZvcm11bGEgPSB+SShmYWxsX2NvdW50X2NvbGxhcHNlZD09InR3b19mYWxsc19vcl9tb3JlIiksDQogIGJ5ID0gfiBvc3Rlb2FydGhyaXRpcywNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9vc3Rlb2FydGhyaXRpc19mWywyOjRdLDMpKjEwMA0KYGBgDQoNCi0gICBoZWFydF9hdHRhY2sNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2hlYXJ0X2F0dGFja19mIDwtIHN2eWJ5KGZvcm11bGEgPSB+SShmYWxsX2NvdW50X2NvbGxhcHNlZD09InR3b19mYWxsc19vcl9tb3JlIiksDQogIGJ5ID0gfiBoZWFydF9hdHRhY2ssDQogIGRlc2lnbiA9IHdkYXRfMTdfZiwNCiAgRlVOID0gc3Z5Y2lwcm9wLA0KICBuYS5ybSA9IFRSVUUsDQogIGtlZXAubmFtZXMgPSBGQUxTRSwNCiAgdmFydHlwZT0iY2kiLA0KICBtZXRob2QgPSAibGlrZWxpaG9vZCINCikNCnJvdW5kKHRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfaGVhcnRfYXR0YWNrX2ZbLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIHN0cm9rZQ0KDQpgYGB7cn0NCnRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfc3Ryb2tlX2YgPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IHN0cm9rZSwNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9zdHJva2VfZlssMjo0XSwzKSoxMDANCmBgYA0KDQotICAgdXJpbmFyeV9pbmNvbnRpbmVuY2UNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX3VyaW5hcnlfaW5jb250aW5lbmNlX2YgPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IHVyaW5hcnlfaW5jb250aW5lbmNlLA0KICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQpyb3VuZCh0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX3VyaW5hcnlfaW5jb250aW5lbmNlX2ZbLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIG9zdGVvcG9yb3Npcw0KDQpgYGB7cn0NCnRhYl9hbW91bnRfZmFsbF9jb3VudF9jb2xsYXBzZWRfb3N0ZW9wb3Jvc2lzX2YgPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IG9zdGVvcG9yb3NpcywNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9vc3Rlb3Bvcm9zaXNfZlssMjo0XSwzKSoxMDANCmBgYA0KDQotICAgYWN0aXZpdHkNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2FjdGl2aXR5X2YgPC0gc3Z5YnkoZm9ybXVsYSA9IH5JKGZhbGxfY291bnRfY29sbGFwc2VkPT0idHdvX2ZhbGxzX29yX21vcmUiKSwNCiAgYnkgPSB+IGFjdGl2aXR5LA0KICBkZXNpZ24gPSB3ZGF0XzE3X2YsDQogIEZVTiA9IHN2eWNpcHJvcCwNCiAgbmEucm0gPSBUUlVFLA0KICBrZWVwLm5hbWVzID0gRkFMU0UsDQogIHZhcnR5cGU9ImNpIiwNCiAgbWV0aG9kID0gImxpa2VsaWhvb2QiDQopDQpyb3VuZCh0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2FjdGl2aXR5X2ZbLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIGFsY29ob2wNCg0KYGBge3J9DQp0YWJfYW1vdW50X2ZhbGxfY291bnRfY29sbGFwc2VkX2FsY29ob2xfZiA8LSBzdnlieShmb3JtdWxhID0gfkkoZmFsbF9jb3VudF9jb2xsYXBzZWQ9PSJ0d29fZmFsbHNfb3JfbW9yZSIpLA0KICBieSA9IH4gYWxjb2hvbCwNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9hbGNvaG9sX2ZbLDI6NF0sMykqMTAwDQpgYGANCg0KLSAgIHNtb2tlDQoNCmBgYHtyfQ0KdGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9zbW9rZV9mIDwtIHN2eWJ5KGZvcm11bGEgPSB+SShmYWxsX2NvdW50X2NvbGxhcHNlZD09InR3b19mYWxsc19vcl9tb3JlIiksDQogIGJ5ID0gfiBzbW9rZSwNCiAgZGVzaWduID0gd2RhdF8xN19mLA0KICBGVU4gPSBzdnljaXByb3AsDQogIG5hLnJtID0gVFJVRSwNCiAga2VlcC5uYW1lcyA9IEZBTFNFLA0KICB2YXJ0eXBlPSJjaSIsDQogIG1ldGhvZCA9ICJsaWtlbGlob29kIg0KKQ0Kcm91bmQodGFiX2Ftb3VudF9mYWxsX2NvdW50X2NvbGxhcHNlZF9zbW9rZV9mWywyOjRdLDMpKjEwMA0KYGBgDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIFJlZmVyZW5jZXMNCg0KOjo6IHsjcmVmc30NCjo6Og0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyBBcHBlbmRpeA0KDQpJbiB0aGUgYXBwZW5kaXgsIHdlIHJlcG9ydCBhIHByaW50b3V0IG9mIGFsbCBSIHBhY2thZ2VzIHVzZWQgaW4gdGhlIGFuYWx5c2lzIGFuZCB0aGVpciB2ZXJzaW9ucyB0byBmYWNpbGl0YXRlIHRoZSByZXByb2R1Y2liaWxpdHkgb2YgdGhlIGFuYWx5c2lzL3Jlc3VsdHMuDQoNCiMjIEFwcGVuZGl4DQoNCmBgYHtyfQ0KcGFuZGVyKHNlc3Npb25JbmZvKCksIGNvbXBhY3QgPSBUUlVFKQ0KYGBgDQo=