Setup


knitr::opts_chunk$set(message = FALSE, warning = FALSE, error = FALSE)

library(readxl)
library(biostatUZH)
library(dplyr)
library(tableone)
library(knitr)
library(captioner)
library(beeswarm)
library(readr)
library(ggplot2)
library(reshape2)
library(tidyr)
library(ggpubr)
library(graphics)
library(ggbeeswarm)
library(jcolors)
library(pals)
library(ggsci)
library(Hmisc)
library(stringr)

kableone <- function(x, ...) {
  capture.output(x <- print(x))
  knitr::kable(x, ...)
}

All.Volumes <- read_csv("Encephalic structures_volumes.csv")
Parsed with column specification:
cols(
  .default = col_double(),
  Gender = col_character(),
  Handedness = col_character()
)
See spec(...) for full column specifications.
All.Volumes$ID <- as.factor(All.Volumes$ID)
All.Volumes$Gender <- as.factor(All.Volumes$Gender)
All.Volumes$Handedness <- as.factor(All.Volumes$Handedness)

Baseline Data


Baseline.data <- CreateTableOne(vars = c("Age (years)", "Handedness"), 
               data = All.Volumes, strat = c("Gender"))
Baseline.data <- print(Baseline.data)
                         Stratified by Gender
                          f              m             p      test
  n                          14             16                    
  Age (years) (mean (SD)) 37.79 (13.04)  38.31 (16.91)  0.925     
  Handedness = right (%)     14 (100.0)     15 (93.8)   1.000     

kable(Baseline.data)

f m p test
n 14 16
Age (years) (mean (SD)) 37.79 (13.04) 38.31 (16.91) 0.925
Handedness = right (%) 14 (100.0) 15 (93.8) 1.000

NA

Total encephalic volume (w/o ventricles)


summary(All.Volumes$`Total encephalic volume (without ventricles)`)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 921292  999649 1108766 1093437 1187487 1274242 
Total.encephalic.volume <- CreateTableOne(vars = c("Total encephalic volume (without ventricles)"), 
                                                  data = All.Volumes)
Total.encephalic.volume.stratified.gender <- CreateTableOne(vars = c("Total encephalic volume (without ventricles)"), 
                                                   strata = c("Gender"), data = All.Volumes)
Total.encephalic.volume <- print(Total.encephalic.volume)
                                                          
                                                           Overall               
  n                                                                30            
  Total encephalic volume (without ventricles) (mean (SD)) 1093437.27 (111353.18)
Total.encephalic.volume.stratified.gender <- print(Total.encephalic.volume.stratified.gender)
                                                          Stratified by Gender
                                                           f                     m                     p      test
  n                                                                14                    16                       
  Total encephalic volume (without ventricles) (mean (SD)) 1024921.71 (89784.56) 1153388.38 (93652.70)  0.001     

Total.encephalic.volume.RSD <- round((111353.18/1093437.27)*100,1)
Total.encephalic.volume.stratified.gender.female.RDS <- round((89784.56/1024921.71)*100,1)
Total.encephalic.volume.stratified.gender.male.RSD <- round((93652.70/1153388.38)*100,1)

kable(Total.encephalic.volume)

Overall
n 30
Total encephalic volume (without ventricles) (mean (SD)) 1093437.27 (111353.18)

kable(Total.encephalic.volume.RSD)

x
10.2

kable(Total.encephalic.volume.stratified.gender)

f m p test
n 14 16
Total encephalic volume (without ventricles) (mean (SD)) 1024921.71 (89784.56) 1153388.38 (93652.70) 0.001

kable(Total.encephalic.volume.stratified.gender.female.RDS)

x
8.8

kable(Total.encephalic.volume.stratified.gender.male.RSD)

x
8.1

NA

Total.encephalic.volume.plot <-  ggplot(All.Volumes, aes(x= Gender, y = `Total encephalic volume (without ventricles)`))  +
  geom_quasirandom(aes(color = `Age (years)`), alpha = 1, size = 2, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  geom_boxplot(aes(fill = Gender), alpha = 0.5, size = 0.3, width = 0.35, outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  xlab("Gender") + ylab("") +
  theme_minimal() +
  coord_flip() +
  ggtitle("TOTAL ENCEPHALIC VOLUME (mm3)") +
  theme(plot.title = element_text(hjust = 0.5))
Total.encephalic.volume.plot
ggsave("Total.encephalic.volume.plot.pdf", plot = Total.encephalic.volume.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.encephalic.volume.Age.plot <-  ggplot(All.Volumes, aes(y=`Total encephalic volume (without ventricles)`, x = `Age (years)`))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 0.8, shape = 16) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender, group = Gender), method='lm', se = F, alpha = 0.2,linetype = "longdash", size = 0.3, weight = 0.3) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  stat_cor(method = "pearson", label.y = 1250000, label.x = 65, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME encephalon") +
  theme(plot.title = element_text(hjust = 0.5))
Total.encephalic.volume.Age.plot
ggsave("Total.encephalic.volume.Age.plot.pdf", plot = Total.encephalic.volume.Age.plot, width = 8, height = 6, units = "in", dpi = 600)

Topographic overview

Absolute Volumes


Frontal.lobe <- All.Volumes$`Total volume frontal pole`+
                       All.Volumes$`Total volume F1`+
                       All.Volumes$`Total volume F2`+
                       All.Volumes$`Total volume F3 orbital`+
                       All.Volumes$`Total volume F3 triangular`+
                       All.Volumes$`Total volume F3 opercular`+
                       All.Volumes$`Total volume anterior orbital`+
                       All.Volumes$`Total volume posterior orbital`+
                       All.Volumes$`Total volume medial orbital`+
                       All.Volumes$`Total volume lateral orbital`+
                       All.Volumes$`Total volume rectus`+
                       All.Volumes$`Total volume rostral`
  
Central.lobe <- (All.Volumes$`Total volume PreC`+
                       All.Volumes$`Total volume PostC`+
                       All.Volumes$`Total volume ParaC lobule`+
                       All.Volumes$`Total volume SubC gyrus`)
  
Parietal.lobe <- (All.Volumes$`Total volume SPL`+
                       All.Volumes$`Total volume SMG`+
                       All.Volumes$`Total volume ANG`+
                       All.Volumes$`Total volume Precuneus`)

Occipital.lobe <- (All.Volumes$`Total volume Cuneus`+
                       All.Volumes$`Total volume O1`+
                       All.Volumes$`Total volume O2`+
                       All.Volumes$`Total volume O3`+
                       All.Volumes$`Total volume occipital pole`+
                       All.Volumes$`Total volume lingual`)

Temporal.lobe <- (All.Volumes$`Total volume fusiform`+
                       All.Volumes$`Total volume T1`+
                       All.Volumes$`Total volume T2`+
                       All.Volumes$`Total volume T3`+
                       All.Volumes$`Total volume Planum temporale`+
                       All.Volumes$`Total volume Planum polare`+
                       All.Volumes$`Total volume temporal pole`)

Insular.lobe <- (All.Volumes$`Total volume short insular gyri`+
                       All.Volumes$`Total volume long insular gyri`)

Limbic.lobe <- (All.Volumes$`Total volume SCA`+
                       All.Volumes$`Total volume PHG`+
                       All.Volumes$`Total volume ant cingulate`+
                       All.Volumes$`Total volume mid cingulate`+
                       All.Volumes$`Total volume post cingulate`+
                       All.Volumes$`Total volume hippocampus` +
                       All.Volumes$`Total volume amygdala`)

Basal.ganglia <- (All.Volumes$`Total volume caudate`+
                       All.Volumes$`Total volume putamen`+
                       All.Volumes$`Total volume pallidum`)

Diencephalon <- (All.Volumes$`Total volume hypothalamus`+
                        All.Volumes$`Total volume thalamus`)

Brainstem <- (All.Volumes$`Total volume brainstem`)

Cerebellum <- (All.Volumes$`Total volume cerebellum`)

Topographic.overview.absolute <- as.data.frame(cbind(Frontal.lobe,
                                       Central.lobe,
                                       Parietal.lobe,
                                       Occipital.lobe,
                                       Temporal.lobe,
                                       Insular.lobe,
                                       Limbic.lobe,
                                       Basal.ganglia,
                                       Diencephalon,
                                       Brainstem,
                                       Cerebellum))

Topographic.overview.absolute$Gender <- All.Volumes$Gender
Topographic.overview.absolute$Age <- All.Volumes$`Age (years)`

Table.topographic.overview.absolute <- CreateTableOne(vars = c("Frontal.lobe","Central.lobe", "Parietal.lobe", "Occipital.lobe", "Temporal.lobe", "Insular.lobe","Limbic.lobe","Basal.ganglia", "Diencephalon","Brainstem","Cerebellum"), 
               data = Topographic.overview.absolute)

Table.topographic.overview.absolute.stratified.gender <- CreateTableOne(vars = c("Frontal.lobe","Central.lobe", "Parietal.lobe", "Occipital.lobe", "Temporal.lobe", "Insular.lobe","Limbic.lobe","Basal.ganglia", "Diencephalon","Brainstem","Cerebellum"), 
               strata = c("Gender"), data = Topographic.overview.absolute)

Table.topographic.overview.absolute <- print(Table.topographic.overview.absolute, contDigits = 10)
                            
                             Overall                             
  n                                         30                   
  Frontal.lobe (mean (SD))   199479.6000000000 (24675.6628190333)
  Central.lobe (mean (SD))    81517.1333333333 (9207.9403392916) 
  Parietal.lobe (mean (SD))  129215.8000000000 (16770.1086592001)
  Occipital.lobe (mean (SD))  75910.6000000000 (8884.5868496884) 
  Temporal.lobe (mean (SD))  116476.8666666667 (13867.9503836608)
  Insular.lobe (mean (SD))    24547.4333333333 (3014.6818175256) 
  Limbic.lobe (mean (SD))     75816.2000000000 (9372.2558407689) 
  Basal.ganglia (mean (SD))   22117.1000000000 (2978.7042930639) 
  Diencephalon (mean (SD))    22568.8333333333 (2268.6469016504) 
  Brainstem (mean (SD))       28072.4000000000 (3292.5882450929) 
  Cerebellum (mean (SD))     116732.9666666667 (12623.3422659915)
Table.topographic.overview.absolute.stratified.gender <- print(Table.topographic.overview.absolute.stratified.gender,contDigits = 10)
                            Stratified by Gender
                             f                                    m                                    p      test
  n                                         14                                   16                               
  Frontal.lobe (mean (SD))   186347.1428571429 (19261.7710658549) 210970.5000000000 (23533.5837446545)  0.004     
  Central.lobe (mean (SD))    76746.0714285714 (8368.0106308239)   85691.8125000000 (7962.2542303776)   0.006     
  Parietal.lobe (mean (SD))  120829.0000000000 (15805.5035546288) 136554.2500000000 (14287.2790994880)  0.008     
  Occipital.lobe (mean (SD))  70930.2142857143 (5286.0529724429)   80268.4375000000 (9218.7441080207)   0.002     
  Temporal.lobe (mean (SD))  109341.7142857143 (9773.9892290993)  122720.1250000000 (14139.7363241564)  0.006     
  Insular.lobe (mean (SD))    22746.3571428571 (2320.9156882291)   26123.3750000000 (2688.0316435389)   0.001     
  Limbic.lobe (mean (SD))     71384.9285714286 (8462.9316293904)   79693.5625000000 (8566.6449439575)   0.013     
  Basal.ganglia (mean (SD))   21022.8571428571 (2275.7467703234)   23074.5625000000 (3251.1485143715)   0.058     
  Diencephalon (mean (SD))    21697.2857142857 (1746.7271121717)   23331.4375000000 (2444.7618280383)   0.047     
  Brainstem (mean (SD))       26807.6428571429 (3260.5798117499)   29179.0625000000 (2991.0450229254)   0.047     
  Cerebellum (mean (SD))     111616.6428571429 (12960.7820253560) 121209.7500000000 (10801.8819810871)  0.035     
write.csv(Table.topographic.overview.absolute, "Table.topographic.overview.absolute.csv")
write.csv(Table.topographic.overview.absolute.stratified.gender, "Table.topographic.overview.absolute.stratified.gender.csv")

Table.topographic.overview.absolute.RSD <- as.data.frame(Table.topographic.overview.absolute)
Table.topographic.overview.absolute.RSD <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.topographic.overview.absolute.RSD[-1,]),
                                                                       ' (',fixed=TRUE)))
Table.topographic.overview.absolute.RSD <- data.frame(cbind(str_replace_all(Table.topographic.overview.absolute.RSD$X1, "[ ]", ""),
                                                            str_replace_all(Table.topographic.overview.absolute.RSD$X2, "[)]", "")))
Table.topographic.overview.absolute.RSD$X1 <- as.character(Table.topographic.overview.absolute.RSD$X1)
Table.topographic.overview.absolute.RSD$X2 <- as.character(Table.topographic.overview.absolute.RSD$X2)
Table.topographic.overview.absolute.RSD <- as.data.frame(sapply(Table.topographic.overview.absolute.RSD, as.numeric))
Table.topographic.overview.absolute.RSD <- as.data.frame(Table.topographic.overview.absolute.RSD$X2/Table.topographic.overview.absolute.RSD$X1)
Table.topographic.overview.absolute.RSD <- round(Table.topographic.overview.absolute.RSD * 100, 1)


Table.topographic.overview.absolute.stratified.gender.RSD <- as.data.frame(Table.topographic.overview.absolute.stratified.gender)
Table.topographic.overview.absolute.stratified.gender.RSD <- select(Table.topographic.overview.absolute.stratified.gender.RSD, - c(p, test))

Table.topographic.overview.absolute.stratified.gender.RSD.female <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.topographic.overview.absolute.stratified.gender.RSD[-1, "f"]),
                                                                       ' (',fixed=TRUE)))
Table.topographic.overview.absolute.stratified.gender.RSD.female <- data.frame(cbind(str_replace_all(Table.topographic.overview.absolute.stratified.gender.RSD.female$X1, "[ ]", ""),
                                                            str_replace_all(Table.topographic.overview.absolute.stratified.gender.RSD.female$X2, "[)]", "")))
Table.topographic.overview.absolute.stratified.gender.RSD.female$X1 <- as.character(Table.topographic.overview.absolute.stratified.gender.RSD.female$X1)
Table.topographic.overview.absolute.stratified.gender.RSD.female$X2 <- as.character(Table.topographic.overview.absolute.stratified.gender.RSD.female$X2)
Table.topographic.overview.absolute.stratified.gender.RSD.female <- as.data.frame(sapply(Table.topographic.overview.absolute.stratified.gender.RSD.female, as.numeric))
Table.topographic.overview.absolute.stratified.gender.RSD.female <- as.data.frame(Table.topographic.overview.absolute.stratified.gender.RSD.female$X2/Table.topographic.overview.absolute.stratified.gender.RSD.female$X1)
Table.topographic.overview.absolute.stratified.gender.RSD.female <- round(Table.topographic.overview.absolute.stratified.gender.RSD.female * 100, 1)

Table.topographic.overview.absolute.stratified.gender.RSD.male <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.topographic.overview.absolute.stratified.gender.RSD[-1, "m"]),
                                                                       ' (',fixed=TRUE)))
Table.topographic.overview.absolute.stratified.gender.RSD.male <- data.frame(cbind(str_replace_all(Table.topographic.overview.absolute.stratified.gender.RSD.male$X1, "[ ]", ""),
                                                            str_replace_all(Table.topographic.overview.absolute.stratified.gender.RSD.male$X2, "[)]", "")))
Table.topographic.overview.absolute.stratified.gender.RSD.male$X1 <- as.character(Table.topographic.overview.absolute.stratified.gender.RSD.male$X1)
Table.topographic.overview.absolute.stratified.gender.RSD.male$X2 <- as.character(Table.topographic.overview.absolute.stratified.gender.RSD.male$X2)
Table.topographic.overview.absolute.stratified.gender.RSD.male <- as.data.frame(sapply(Table.topographic.overview.absolute.stratified.gender.RSD.male, as.numeric))
Table.topographic.overview.absolute.stratified.gender.RSD.male <- as.data.frame(Table.topographic.overview.absolute.stratified.gender.RSD.male$X2/Table.topographic.overview.absolute.stratified.gender.RSD.male$X1)
Table.topographic.overview.absolute.stratified.gender.RSD.male <- round(Table.topographic.overview.absolute.stratified.gender.RSD.male * 100, 1)

kable(Table.topographic.overview.absolute)

Overall
n 30
Frontal.lobe (mean (SD)) 199479.6000000000 (24675.6628190333)
Central.lobe (mean (SD)) 81517.1333333333 (9207.9403392916)
Parietal.lobe (mean (SD)) 129215.8000000000 (16770.1086592001)
Occipital.lobe (mean (SD)) 75910.6000000000 (8884.5868496884)
Temporal.lobe (mean (SD)) 116476.8666666667 (13867.9503836608)
Insular.lobe (mean (SD)) 24547.4333333333 (3014.6818175256)
Limbic.lobe (mean (SD)) 75816.2000000000 (9372.2558407689)
Basal.ganglia (mean (SD)) 22117.1000000000 (2978.7042930639)
Diencephalon (mean (SD)) 22568.8333333333 (2268.6469016504)
Brainstem (mean (SD)) 28072.4000000000 (3292.5882450929)
Cerebellum (mean (SD)) 116732.9666666667 (12623.3422659915)

kable(Table.topographic.overview.absolute.RSD)

Table.topographic.overview.absolute.RSDX2/Table.topographic.overview.absolute.RSDX1
12.4
11.3
13.0
11.7
11.9
12.3
12.4
13.5
10.1
11.7
10.8

kable(Table.topographic.overview.absolute.stratified.gender)

f m p test
n 14 16
Frontal.lobe (mean (SD)) 186347.1428571429 (19261.7710658549) 210970.5000000000 (23533.5837446545) 0.004
Central.lobe (mean (SD)) 76746.0714285714 (8368.0106308239) 85691.8125000000 (7962.2542303776) 0.006
Parietal.lobe (mean (SD)) 120829.0000000000 (15805.5035546288) 136554.2500000000 (14287.2790994880) 0.008
Occipital.lobe (mean (SD)) 70930.2142857143 (5286.0529724429) 80268.4375000000 (9218.7441080207) 0.002
Temporal.lobe (mean (SD)) 109341.7142857143 (9773.9892290993) 122720.1250000000 (14139.7363241564) 0.006
Insular.lobe (mean (SD)) 22746.3571428571 (2320.9156882291) 26123.3750000000 (2688.0316435389) 0.001
Limbic.lobe (mean (SD)) 71384.9285714286 (8462.9316293904) 79693.5625000000 (8566.6449439575) 0.013
Basal.ganglia (mean (SD)) 21022.8571428571 (2275.7467703234) 23074.5625000000 (3251.1485143715) 0.058
Diencephalon (mean (SD)) 21697.2857142857 (1746.7271121717) 23331.4375000000 (2444.7618280383) 0.047
Brainstem (mean (SD)) 26807.6428571429 (3260.5798117499) 29179.0625000000 (2991.0450229254) 0.047
Cerebellum (mean (SD)) 111616.6428571429 (12960.7820253560) 121209.7500000000 (10801.8819810871) 0.035

kable(Table.topographic.overview.absolute.stratified.gender.RSD.female)

Table.topographic.overview.absolute.stratified.gender.RSD.femaleX2/Table.topographic.overview.absolute.stratified.gender.RSD.femaleX1
10.3
10.9
13.1
7.5
8.9
10.2
11.9
10.8
8.1
12.2
11.6

kable(Table.topographic.overview.absolute.stratified.gender.RSD.male)

Table.topographic.overview.absolute.stratified.gender.RSD.maleX2/Table.topographic.overview.absolute.stratified.gender.RSD.maleX1
11.2
9.3
10.5
11.5
11.5
10.3
10.7
14.1
10.5
10.3
8.9

NA

Topographic.overview.absolute <- select(Topographic.overview.absolute, - c(Gender, Age))
Topographic.overview.absolute.plotdata <- gather(Topographic.overview.absolute, "anatomical.structure", "relative.volume")
Topographic.overview.absolute.plotdata$Gender <- All.Volumes$Gender
Topographic.overview.absolute.plotdata$Age <- All.Volumes$`Age (years)`

Topographic.overview.absolute.plotdata$Gender <- factor(Topographic.overview.absolute.plotdata$Gender, levels = c("f", "m"), c("f", "m"))
Topographic.overview.absolute.plotdata$anatomical.structure <- factor(Topographic.overview.absolute.plotdata$anatomical.structure, levels = rev(c("Frontal.lobe", "Central.lobe", "Parietal.lobe", "Occipital.lobe", "Temporal.lobe", "Insular.lobe", "Limbic.lobe", "Basal.ganglia", "Diencephalon", "Brainstem", "Cerebellum")), rev(c("Frontal lobe", "Central lobe", "Parietal lobe", "Occipital lobe", "Temporal lobe", "Insular lobe", "Limbic lobe", "Basal ganglia", "Diencephalon", "Brainstem", "Cerebellum")))

Topographic.overview.absolute.plot <-  ggplot(Topographic.overview.absolute.plotdata, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Absolute volume (in %)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("TOPOGRAPHIC OVERVIEW") +
  theme(plot.title = element_text(hjust = 0.5))

Topographic.overview.absolute.plot
ggsave("Topographic.overview.absolute.plot.pdf", plot = Topographic.overview.absolute.plot, width = 12, height = 6, units = "in", dpi = 600)


Topographic.overview.absolute$Gender <- All.Volumes$Gender
Topographic.overview.absolute$Age <- All.Volumes$`Age (years)`

Total.frontal.lobe.Age.plot <-  ggplot(Topographic.overview.absolute, aes(y=Frontal.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 230000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME frontal lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Total.frontal.lobe.Age.plot
ggsave("TO.Total.frontal.lobe.Age.plot.pdf", plot = Total.frontal.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.central.lobe.Age.plot <-  ggplot(Topographic.overview.absolute, aes(y=Central.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 97000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME central lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Total.central.lobe.Age.plot
ggsave("TO.Total.central.lobe.Age.plot.pdf", plot = Total.central.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.parietal.lobe.Age.plot <-  ggplot(Topographic.overview.absolute, aes(y=Parietal.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 145000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME parietal lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Total.parietal.lobe.Age.plot
ggsave("TO.Total.parietal.lobe.Age.plot.pdf", plot = Total.parietal.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.occipital.lobe.Age.plot <-  ggplot(Topographic.overview.absolute, aes(y=Occipital.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 86000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME occipital lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Total.occipital.lobe.Age.plot
ggsave("TO.Total.occipital.lobe.Age.plot.pdf", plot = Total.occipital.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.temporal.lobe.Age.plot <-  ggplot(Topographic.overview.absolute, aes(y=Temporal.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 86000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME temporal lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Total.temporal.lobe.Age.plot
ggsave("TO.Total.temporal.lobe.Age.plot.pdf", plot = Total.temporal.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.insular.lobe.Age.plot <-  ggplot(Topographic.overview.absolute, aes(y=Insular.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 29000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME insular lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Total.insular.lobe.Age.plot
ggsave("TO.Total.insular.lobe.Age.plot.pdf", plot = Total.insular.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.limbic.lobe.Age.plot <-  ggplot(Topographic.overview.absolute, aes(y=Limbic.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 82000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME limbic lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Total.limbic.lobe.Age.plot
ggsave("TO.Total.limbic.lobe.Age.plot.pdf", plot = Total.limbic.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Basal.ganglia.Age.plot <-  ggplot(Topographic.overview.absolute, aes(y=Basal.ganglia, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 24000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME basal ganglia") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Basal.ganglia.Age.plot
ggsave("TO.Total.Basal.ganglia.Age.plot.pdf", plot = Total.Basal.ganglia.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Diencephalon.Age.plot <-  ggplot(Topographic.overview.absolute, aes(y=Diencephalon, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 25000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME diencephalon") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Diencephalon.Age.plot
ggsave("TO.Total.Diencephalon.Age.plot.pdf", plot = Total.Diencephalon.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Brainstem.Age.plot <-  ggplot(Topographic.overview.absolute, aes(y=Brainstem, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 33000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME brainstem") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Brainstem.Age.plot
ggsave("TO.Total.Brainstem.Age.plot.pdf", plot = Total.Brainstem.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Cerebellum.Age.plot <-  ggplot(Topographic.overview.absolute, aes(y=Cerebellum, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 122000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME cerebellum") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Cerebellum.Age.plot
ggsave("TO.Total.Cerebellum.Age.plot.pdf", plot = Total.Cerebellum.Age.plot, width = 8, height = 6, units = "in", dpi = 600)

Relative Volumes


Topographic.overview.absolute <- select(Topographic.overview.absolute, - c(Gender, Age))
Topographic.overview.relative1 <- (100 * (Topographic.overview.absolute/All.Volumes$`Total encephalic volume (without ventricles)`))

Topographic.overview.relative2 <- CreateTableOne(vars = c("Frontal.lobe","Central.lobe", "Parietal.lobe", "Occipital.lobe", "Temporal.lobe", "Insular.lobe","Limbic.lobe","Basal.ganglia", "Diencephalon","Brainstem","Cerebellum"), 
               data = Topographic.overview.relative1)
Topographic.overview.relative1$Gender <- All.Volumes$Gender
Topographic.overview.relative.stratified.gender <- CreateTableOne(vars = c("Frontal.lobe","Central.lobe", "Parietal.lobe", "Occipital.lobe", "Temporal.lobe", "Insular.lobe","Limbic.lobe","Basal.ganglia", "Diencephalon","Brainstem","Cerebellum"), 
                strata = c("Gender"), data = Topographic.overview.relative1)

Topographic.overview.relative2 <- print(Topographic.overview.relative2, quote = FALSE, contDigits = 10)
                            
                             Overall                     
  n                                     30               
  Frontal.lobe (mean (SD))   18.2262527269 (0.9597402604)
  Central.lobe (mean (SD))    7.4652325684 (0.5232606277)
  Parietal.lobe (mean (SD))  11.8153299902 (0.8890245686)
  Occipital.lobe (mean (SD))  6.9466013623 (0.4663487454)
  Temporal.lobe (mean (SD))  10.6576458547 (0.7070314916)
  Insular.lobe (mean (SD))    2.2473539433 (0.1834431574)
  Limbic.lobe (mean (SD))     6.9273443947 (0.3816087377)
  Basal.ganglia (mean (SD))   2.0288505705 (0.2308767019)
  Diencephalon (mean (SD))    2.0690086186 (0.1329050351)
  Brainstem (mean (SD))       2.5737214227 (0.2369790952)
  Cerebellum (mean (SD))     10.7318266204 (1.1655208385)
Topographic.overview.relative.stratified.gender <- print(Topographic.overview.relative.stratified.gender, quote = FALSE, contDigits = 10)
                            Stratified by Gender
                             f                            m                            p      test
  n                                     14                           16                           
  Frontal.lobe (mean (SD))   18.1736795014 (0.7427106379) 18.2722542992 (1.1392494000)  0.784     
  Central.lobe (mean (SD))    7.4860247454 (0.4299043550)  7.4470394134 (0.6069744522)  0.843     
  Parietal.lobe (mean (SD))  11.7665136761 (0.7842958817) 11.8580442651 (0.9953713153)  0.784     
  Occipital.lobe (mean (SD))  6.9414616026 (0.4870496255)  6.9510986521 (0.4634964636)  0.956     
  Temporal.lobe (mean (SD))  10.6703456390 (0.3193451746) 10.6465335435 (0.9369070117)  0.929     
  Insular.lobe (mean (SD))    2.2226928694 (0.1710334769)  2.2689323829 (0.1965780744)  0.501     
  Limbic.lobe (mean (SD))     6.9547003947 (0.3570504302)  6.9034078946 (0.4120018041)  0.720     
  Basal.ganglia (mean (SD))   2.0548417724 (0.1820952611)  2.0061082688 (0.2704344168)  0.573     
  Diencephalon (mean (SD))    2.1204998650 (0.1057097871)  2.0239537780 (0.1408028261)  0.045     
  Brainstem (mean (SD))       2.6191165363 (0.2600478612)  2.5340006983 (0.2153131486)  0.335     
  Cerebellum (mean (SD))     10.9282585511 (1.2213015050) 10.5599486811 (1.1252066685)  0.397     

Table.topographic.overview.relative.RSD <- as.data.frame(Topographic.overview.relative2)
Table.topographic.overview.relative.RSD <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.topographic.overview.relative.RSD[-1,]),
                                                                       ' (',fixed=TRUE)))
Table.topographic.overview.relative.RSD <- data.frame(cbind(str_replace_all(Table.topographic.overview.relative.RSD$X1, "[ ]", ""),
                                                            str_replace_all(Table.topographic.overview.relative.RSD$X2, "[)]", "")))
Table.topographic.overview.relative.RSD$X1 <- as.character(Table.topographic.overview.relative.RSD$X1)
Table.topographic.overview.relative.RSD$X2 <- as.character(Table.topographic.overview.relative.RSD$X2)
Table.topographic.overview.relative.RSD <- as.data.frame(sapply(Table.topographic.overview.relative.RSD, as.numeric))
Table.topographic.overview.relative.RSD <- as.data.frame(Table.topographic.overview.relative.RSD$X2/Table.topographic.overview.relative.RSD$X1)
Table.topographic.overview.relative.RSD <- round(Table.topographic.overview.relative.RSD*100, 1)

Table.topographic.overview.relative.stratified.gender.RSD <- as.data.frame(Topographic.overview.relative.stratified.gender)
Table.topographic.overview.relative.stratified.gender.RSD <- select(Table.topographic.overview.relative.stratified.gender.RSD, - c(p, test))

Table.topographic.overview.relative.stratified.gender.RSD.female <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.topographic.overview.relative.stratified.gender.RSD[-1, "f"]),
                                                                       ' (',fixed=TRUE)))
Table.topographic.overview.relative.stratified.gender.RSD.female <- data.frame(cbind(str_replace_all(Table.topographic.overview.relative.stratified.gender.RSD.female$X1, "[ ]", ""),
                                                            str_replace_all(Table.topographic.overview.relative.stratified.gender.RSD.female$X2, "[)]", "")))
Table.topographic.overview.relative.stratified.gender.RSD.female$X1 <- as.character(Table.topographic.overview.relative.stratified.gender.RSD.female$X1)
Table.topographic.overview.relative.stratified.gender.RSD.female$X2 <- as.character(Table.topographic.overview.relative.stratified.gender.RSD.female$X2)
Table.topographic.overview.relative.stratified.gender.RSD.female <- as.data.frame(sapply(Table.topographic.overview.relative.stratified.gender.RSD.female, as.numeric))
Table.topographic.overview.relative.stratified.gender.RSD.female <- as.data.frame(Table.topographic.overview.relative.stratified.gender.RSD.female$X2/Table.topographic.overview.relative.stratified.gender.RSD.female$X1)
Table.topographic.overview.relative.stratified.gender.RSD.female <- round(Table.topographic.overview.relative.stratified.gender.RSD.female*100, 1)

Table.topographic.overview.relative.stratified.gender.RSD.male <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.topographic.overview.relative.stratified.gender.RSD[-1, "m"]),
                                                                       ' (',fixed=TRUE)))
Table.topographic.overview.relative.stratified.gender.RSD.male <- data.frame(cbind(str_replace_all(Table.topographic.overview.relative.stratified.gender.RSD.male$X1, "[ ]", ""),
                                                            str_replace_all(Table.topographic.overview.relative.stratified.gender.RSD.male$X2, "[)]", "")))
Table.topographic.overview.relative.stratified.gender.RSD.male$X1 <- as.character(Table.topographic.overview.relative.stratified.gender.RSD.male$X1)
Table.topographic.overview.relative.stratified.gender.RSD.male$X2 <- as.character(Table.topographic.overview.relative.stratified.gender.RSD.male$X2)
Table.topographic.overview.relative.stratified.gender.RSD.male <- as.data.frame(sapply(Table.topographic.overview.relative.stratified.gender.RSD.male, as.numeric))
Table.topographic.overview.relative.stratified.gender.RSD.male <- as.data.frame(Table.topographic.overview.relative.stratified.gender.RSD.male$X2/Table.topographic.overview.relative.stratified.gender.RSD.male$X1)
Table.topographic.overview.relative.stratified.gender.RSD.male <- round(Table.topographic.overview.relative.stratified.gender.RSD.male*100, 1)

kable(Topographic.overview.relative2)

Overall
n 30
Frontal.lobe (mean (SD)) 18.2262527269 (0.9597402604)
Central.lobe (mean (SD)) 7.4652325684 (0.5232606277)
Parietal.lobe (mean (SD)) 11.8153299902 (0.8890245686)
Occipital.lobe (mean (SD)) 6.9466013623 (0.4663487454)
Temporal.lobe (mean (SD)) 10.6576458547 (0.7070314916)
Insular.lobe (mean (SD)) 2.2473539433 (0.1834431574)
Limbic.lobe (mean (SD)) 6.9273443947 (0.3816087377)
Basal.ganglia (mean (SD)) 2.0288505705 (0.2308767019)
Diencephalon (mean (SD)) 2.0690086186 (0.1329050351)
Brainstem (mean (SD)) 2.5737214227 (0.2369790952)
Cerebellum (mean (SD)) 10.7318266204 (1.1655208385)

kable(Table.topographic.overview.relative.RSD)

Table.topographic.overview.relative.RSDX2/Table.topographic.overview.relative.RSDX1
5.3
7.0
7.5
6.7
6.6
8.2
5.5
11.4
6.4
9.2
10.9

kable(Topographic.overview.relative.stratified.gender)

f m p test
n 14 16
Frontal.lobe (mean (SD)) 18.1736795014 (0.7427106379) 18.2722542992 (1.1392494000) 0.784
Central.lobe (mean (SD)) 7.4860247454 (0.4299043550) 7.4470394134 (0.6069744522) 0.843
Parietal.lobe (mean (SD)) 11.7665136761 (0.7842958817) 11.8580442651 (0.9953713153) 0.784
Occipital.lobe (mean (SD)) 6.9414616026 (0.4870496255) 6.9510986521 (0.4634964636) 0.956
Temporal.lobe (mean (SD)) 10.6703456390 (0.3193451746) 10.6465335435 (0.9369070117) 0.929
Insular.lobe (mean (SD)) 2.2226928694 (0.1710334769) 2.2689323829 (0.1965780744) 0.501
Limbic.lobe (mean (SD)) 6.9547003947 (0.3570504302) 6.9034078946 (0.4120018041) 0.720
Basal.ganglia (mean (SD)) 2.0548417724 (0.1820952611) 2.0061082688 (0.2704344168) 0.573
Diencephalon (mean (SD)) 2.1204998650 (0.1057097871) 2.0239537780 (0.1408028261) 0.045
Brainstem (mean (SD)) 2.6191165363 (0.2600478612) 2.5340006983 (0.2153131486) 0.335
Cerebellum (mean (SD)) 10.9282585511 (1.2213015050) 10.5599486811 (1.1252066685) 0.397

kable(Table.topographic.overview.relative.stratified.gender.RSD.female)

Table.topographic.overview.relative.stratified.gender.RSD.femaleX2/Table.topographic.overview.relative.stratified.gender.RSD.femaleX1
4.1
5.7
6.7
7.0
3.0
7.7
5.1
8.9
5.0
9.9
11.2

kable(Table.topographic.overview.relative.stratified.gender.RSD.male)

Table.topographic.overview.relative.stratified.gender.RSD.maleX2/Table.topographic.overview.relative.stratified.gender.RSD.maleX1
6.2
8.2
8.4
6.7
8.8
8.7
6.0
13.5
7.0
8.5
10.7

NA

Topographic.overview.relative1 <- select(Topographic.overview.relative1, - c(Gender))
Topographic.overview.relative.plotdata <- gather(Topographic.overview.relative1, "anatomical.structure", "relative.volume")
Topographic.overview.relative.plotdata$Gender <- All.Volumes$Gender
Topographic.overview.relative.plotdata$Age <- All.Volumes$`Age (years)`

Topographic.overview.relative.plotdata$Gender <- factor(Topographic.overview.relative.plotdata$Gender, levels = c("f", "m"), c("f", "m"))
Topographic.overview.relative.plotdata$anatomical.structure <- factor(Topographic.overview.relative.plotdata$anatomical.structure, levels = rev(c("Frontal.lobe", "Central.lobe", "Parietal.lobe", "Occipital.lobe", "Temporal.lobe", "Insular.lobe", "Limbic.lobe", "Basal.ganglia", "Diencephalon", "Brainstem", "Cerebellum")), rev(c("Frontal lobe", "Central lobe", "Parietal lobe", "Occipital lobe", "Temporal lobe", "Insular lobe", "Limbic lobe", "Basal ganglia", "Diencephalon", "Brainstem", "Cerebellum")))

Topographic.overview.relative.plot <-  ggplot(Topographic.overview.relative.plotdata, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Relative volume (in %)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("TOPOGRAPHIC OVERVIEW") +
  theme(plot.title = element_text(hjust = 0.5))

Topographic.overview.relative.plot
ggsave("Topographic.overview.relative.plot.pdf", plot = Topographic.overview.relative.plot, width = 12, height = 6, units = "in", dpi = 600)


Topographic.overview.relative1$Gender <- All.Volumes$Gender
Topographic.overview.relative1$Age <- All.Volumes$`Age (years)`

Relative.frontal.lobe.Age.plot <-  ggplot(Topographic.overview.relative1, aes(y=Frontal.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 19.3, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME frontal lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.frontal.lobe.Age.plot
ggsave("TOR.Relative.frontal.lobe.Age.plot.pdf", plot = Relative.frontal.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Central.lobe.Age.plot <-  ggplot(Topographic.overview.relative1, aes(y=Central.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 9.7, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME central lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Central.lobe.Age.plot
ggsave("TOR.Relative.Central.lobe.Age.plot.pdf", plot = Relative.Central.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Parietal.lobe.Age.plot <-  ggplot(Topographic.overview.relative1, aes(y=Parietal.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 13.2, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME parietal lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Parietal.lobe.Age.plot
ggsave("TOR.Relative.Parietal.lobe.Age.plot.pdf", plot = Relative.Parietal.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Occipital.lobe.Age.plot <-  ggplot(Topographic.overview.relative1, aes(y=Occipital.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 7.6, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME occipital lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Occipital.lobe.Age.plot
ggsave("TOR.Relative.Occipital.lobe.Age.plot.pdf", plot = Relative.Occipital.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Temporal.lobe.Age.plot <-  ggplot(Topographic.overview.relative1, aes(y=Temporal.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 8.6, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME temporal lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Temporal.lobe.Age.plot
ggsave("TOR.Relative.Temporal.lobe.Age.plot.pdf", plot = Relative.Temporal.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Insular.lobe.Age.plot <-  ggplot(Topographic.overview.relative1, aes(y=Insular.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2.05, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME insular lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Insular.lobe.Age.plot
ggsave("TOR.Relative.Insular.lobe.Age.plot.pdf", plot = Relative.Insular.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Limbic.lobe.Age.plot <-  ggplot(Topographic.overview.relative1, aes(y=Limbic.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 7.7, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME limbic lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Limbic.lobe.Age.plot
ggsave("TOR.Relative.Limbic.lobe.Age.plot.pdf", plot = Relative.Limbic.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Basal.ganglia.Age.plot <-  ggplot(Topographic.overview.relative1, aes(y=Basal.ganglia, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2.25, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME basal ganglia") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Basal.ganglia.Age.plot
ggsave("TOR.Relative.Basal.ganglia.Age.plot.pdf", plot = Relative.Basal.ganglia.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Diencephalon.Age.plot <-  ggplot(Topographic.overview.relative1, aes(y=Diencephalon, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2.25, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME diencephalon") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Diencephalon.Age.plot
ggsave("TOR.Relative.Diencephalon.Age.plot.pdf", plot = Relative.Diencephalon.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Brainstem.Age.plot <-  ggplot(Topographic.overview.relative1, aes(y=Brainstem, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 3.18, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME brainstem") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Brainstem.Age.plot
ggsave("TOR.Relative.Brainstem.Age.plot.pdf", plot = Relative.Brainstem.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Cerebellum.Age.plot <-  ggplot(Topographic.overview.relative1, aes(y=Cerebellum, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 12.7, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME cerebellum") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Cerebellum.Age.plot
ggsave("TOR.Relative.Cerebellum.Age.plot.pdf", plot = Relative.Cerebellum.Age.plot, width = 8, height = 6, units = "in", dpi = 600)

The Prosencephalon

Absolute Volumes


Frontal.pole <- All.Volumes$`Total volume frontal pole`
F1 <- All.Volumes$`Total volume F1`
F2 <- All.Volumes$`Total volume F2`
F3.orbital <- All.Volumes$`Total volume F3 orbital`
F3.triangular <- All.Volumes$`Total volume F3 triangular`
F3.opercular <- All.Volumes$`Total volume F3 opercular`
Anterior.orbital <- All.Volumes$`Total volume anterior orbital`
Medial.orbital <- All.Volumes$`Total volume medial orbital`
Lateral.orbital <- All.Volumes$`Total volume lateral orbital`
Posterior.orbital <- All.Volumes$`Total volume posterior orbital`
Rectus <- All.Volumes$`Total volume rectus`
Rostral <- All.Volumes$`Total volume rostral`

Precentral <- All.Volumes$`Total volume PreC`
Postcentral <- All.Volumes$`Total volume PostC`
Paracentral.lobule <- All.Volumes$`Total volume ParaC lobule`
Subcentral <- All.Volumes$`Total volume SubC gyrus`

SPL <- All.Volumes$`Total volume SPL`
SMG <- All.Volumes$`Total volume SMG`
ANG <- All.Volumes$`Total volume ANG`
Precuneus <- All.Volumes$`Total volume Precuneus`

Cuneus <- All.Volumes$`Total volume Cuneus`
O1 <- All.Volumes$`Total volume O1`
O2 <- All.Volumes$`Total volume O2`
O3 <- All.Volumes$`Total volume O3`
Occipital.pole <- All.Volumes$`Total volume occipital pole`
Lingual <- All.Volumes$`Total volume lingual`

Fusiform <- All.Volumes$`Total volume fusiform`
Temporal.pole <- All.Volumes$`Total volume T1`
T1 <- All.Volumes$`Total volume T2`
T2 <- All.Volumes$`Total volume T3`
T3 <- All.Volumes$`Total volume Planum temporale`
Planum.temporale <- All.Volumes$`Total volume Planum polare`
Planum.polare <- All.Volumes$`Total volume temporal pole`

Short.insular <- All.Volumes$`Total volume short insular gyri`
Long.insular <- All.Volumes$`Total volume long insular gyri`

SCA <- All.Volumes$`Total volume SCA`
Cingulate.anterior <- All.Volumes$`Total volume ant cingulate`
Cingulate.middle <- All.Volumes$`Total volume mid cingulate`
Cingulate.posterior <- All.Volumes$`Total volume post cingulate`
PHG <- All.Volumes$`Total volume PHG`
Hippocampus <- All.Volumes$`Total volume hippocampus`
Amygdala <- All.Volumes$`Total volume amygdala`

Corpus.callosum <- All.Volumes$`Total volume corpus callosum`

Claustrum <- All.Volumes$`Total volume claustrum`
Putamen <- All.Volumes$`Total volume putamen`
Caudate <- All.Volumes$`Total volume caudate`
Globus.pallidum <- All.Volumes$`Total volume pallidum`
Internal.capsule <- All.Volumes$`Total volume internal capsule`
Innominate.substance <- All.Volumes$`Total volume substantia innominata`
Hypothalamus <- All.Volumes$`Total volume hypothalamus`
Thalamus <- All.Volumes$`Total volume thalamus`

Prosencephalon.absolute <- as.data.frame(cbind(
  Frontal.pole,
  F1,
  F2,
  F3.orbital, 
  F3.triangular, 
  F3.opercular, 
  Anterior.orbital, 
  Medial.orbital, 
  Lateral.orbital, 
  Posterior.orbital,
  Rectus, 
  Rostral, 
  Precentral, 
  Postcentral, 
  Paracentral.lobule, 
  Subcentral, 
  SPL, 
  SMG, 
  ANG, 
  Precuneus,
  Cuneus, 
  O1,
  O2, 
  O3, 
  Occipital.pole, 
  Lingual, 
  Fusiform, 
  Temporal.pole, 
  T1,
  T2, 
  T3, 
  Planum.temporale, 
  Planum.polare, 
  Short.insular, 
  Long.insular, 
  SCA, 
  Cingulate.anterior, 
  Cingulate.middle, 
  Cingulate.posterior, 
  PHG, 
  Hippocampus, 
  Amygdala, 
  Corpus.callosum, 
  Claustrum, 
  Putamen, 
  Caudate, 
  Globus.pallidum, 
  Internal.capsule,
  Innominate.substance, 
  Hypothalamus,
  Thalamus
))

Prosencephalon.absolute$Gender <- All.Volumes$Gender

Table.Prosencephalon.absolute <- CreateTableOne(
  vars = c("Frontal.pole",
  "F1",
  "F2",
  "F3.orbital", 
  "F3.triangular", 
  "F3.opercular", 
  "Anterior.orbital", 
  "Medial.orbital", 
  "Lateral.orbital", 
  "Posterior.orbital",
  "Rectus", 
  "Rostral", 
  "Precentral", 
  "Postcentral", 
  "Paracentral.lobule", 
  "Subcentral", 
  "SPL", 
  "SMG", 
  "ANG", 
  "Precuneus",
  "Cuneus", 
  "O1",
  "O2", 
  "O3", 
  "Occipital.pole", 
  "Lingual", 
  "Fusiform", 
  "Temporal.pole", 
  "T1",
  "T2", 
  "T3", 
  "Planum.temporale", 
  "Planum.polare", 
  "Short.insular", 
  "Long.insular", 
  "SCA", 
  "Cingulate.anterior", 
  "Cingulate.middle", 
  "Cingulate.posterior", 
  "PHG", 
  "Hippocampus", 
  "Amygdala", 
  "Corpus.callosum", 
  "Claustrum", 
  "Putamen", 
  "Caudate", 
  "Globus.pallidum", 
  "Internal.capsule",
  "Innominate.substance", 
  "Hypothalamus",
  "Thalamus"),
  data = Prosencephalon.absolute)

Table.Prosencephalon.absolute.stratified.gender <- CreateTableOne(
  vars = c("Frontal.pole",
  "F1",
  "F2",
  "F3.orbital", 
  "F3.triangular", 
  "F3.opercular", 
  "Anterior.orbital", 
  "Medial.orbital", 
  "Lateral.orbital", 
  "Posterior.orbital",
  "Rectus", 
  "Rostral", 
  "Precentral", 
  "Postcentral", 
  "Paracentral.lobule", 
  "Subcentral", 
  "SPL", 
  "SMG", 
  "ANG", 
  "Precuneus",
  "Cuneus", 
  "O1",
  "O2", 
  "O3", 
  "Occipital.pole", 
  "Lingual", 
  "Fusiform", 
  "Temporal.pole", 
  "T1",
  "T2", 
  "T3", 
  "Planum.temporale", 
  "Planum.polare", 
  "Short.insular", 
  "Long.insular", 
  "SCA", 
  "Cingulate.anterior", 
  "Cingulate.middle", 
  "Cingulate.posterior", 
  "PHG", 
  "Hippocampus", 
  "Amygdala", 
  "Corpus.callosum", 
  "Claustrum", 
  "Putamen", 
  "Caudate", 
  "Globus.pallidum", 
  "Internal.capsule",
  "Innominate.substance", 
  "Hypothalamus",
  "Thalamus"),
  strata = c("Gender"),
  data = Prosencephalon.absolute)

Table.Prosencephalon.absolute <- print(Table.Prosencephalon.absolute, contDigits = 2)
                                  
                                   Overall           
  n                                      30          
  Frontal.pole (mean (SD))          4710.60 (976.19) 
  F1 (mean (SD))                   68776.43 (9196.02)
  F2 (mean (SD))                   58458.30 (7689.55)
  F3.orbital (mean (SD))            3916.57 (613.82) 
  F3.triangular (mean (SD))        11688.77 (1898.88)
  F3.opercular (mean (SD))         13949.13 (2022.23)
  Anterior.orbital (mean (SD))      3349.47 (604.18) 
  Medial.orbital (mean (SD))        7566.23 (1369.20)
  Lateral.orbital (mean (SD))       6063.57 (1102.27)
  Posterior.orbital (mean (SD))     7420.67 (1341.23)
  Rectus (mean (SD))                9986.63 (4584.25)
  Rostral (mean (SD))               3593.23 (379.75) 
  Precentral (mean (SD))           39114.37 (4348.35)
  Postcentral (mean (SD))          22307.97 (3280.88)
  Paracentral.lobule (mean (SD))   14036.93 (1769.85)
  Subcentral (mean (SD))            6057.87 (1027.51)
  SPL (mean (SD))                  33315.33 (4452.27)
  SMG (mean (SD))                  30707.70 (4785.83)
  ANG (mean (SD))                  34333.43 (4760.76)
  Precuneus (mean (SD))            30859.33 (4302.66)
  Cuneus (mean (SD))               10063.17 (1461.83)
  O1 (mean (SD))                    9149.23 (1312.27)
  O2 (mean (SD))                   15786.67 (2399.63)
  O3 (mean (SD))                    9263.87 (1668.79)
  Occipital.pole (mean (SD))       11367.23 (1511.90)
  Lingual (mean (SD))              20280.43 (2733.84)
  Fusiform (mean (SD))             22196.20 (3298.55)
  Temporal.pole (mean (SD))        25353.77 (3578.13)
  T1 (mean (SD))                   27247.23 (3925.33)
  T2 (mean (SD))                   23693.10 (3139.43)
  T3 (mean (SD))                    5010.53 (871.47) 
  Planum.temporale (mean (SD))      3078.07 (770.86) 
  Planum.polare (mean (SD))         9897.97 (1847.85)
  Short.insular (mean (SD))        15405.47 (2108.68)
  Long.insular (mean (SD))          9141.97 (1881.34)
  SCA (mean (SD))                   2394.33 (662.65) 
  Cingulate.anterior (mean (SD))   14419.77 (2135.23)
  Cingulate.middle (mean (SD))     17135.30 (2613.59)
  Cingulate.posterior (mean (SD))  20174.30 (2957.84)
  PHG (mean (SD))                  10443.13 (1652.70)
  Hippocampus (mean (SD))           8127.77 (952.70) 
  Amygdala (mean (SD))              3121.60 (469.63) 
  Corpus.callosum (mean (SD))       3311.90 (552.40) 
  Claustrum (mean (SD))             1344.90 (417.64) 
  Putamen (mean (SD))              11264.80 (1661.91)
  Caudate (mean (SD))               7779.73 (1318.33)
  Globus.pallidum (mean (SD))       3072.57 (592.30) 
  Internal.capsule (mean (SD))     10616.47 (1548.67)
  Innominate.substance (mean (SD))  2687.93 (322.72) 
  Hypothalamus (mean (SD))          7962.50 (917.36) 
  Thalamus (mean (SD))             14606.33 (1462.98)
Table.Prosencephalon.absolute.stratified.gender <- print(Table.Prosencephalon.absolute.stratified.gender, contDigits = 2)
                                  Stratified by Gender
                                   f                  m                  p      test
  n                                      14                 16                      
  Frontal.pole (mean (SD))          4369.21 (705.73)   5009.31 (1098.53)  0.072     
  F1 (mean (SD))                   64718.00 (8455.20) 72327.56 (8527.23)  0.021     
  F2 (mean (SD))                   55366.50 (7297.68) 61163.62 (7171.64)  0.037     
  F3.orbital (mean (SD))            3665.71 (565.37)   4136.06 (584.21)   0.034     
  F3.triangular (mean (SD))        10845.50 (1038.66) 12426.62 (2189.00)  0.020     
  F3.opercular (mean (SD))         12752.21 (1540.15) 14996.44 (1828.47)  0.001     
  Anterior.orbital (mean (SD))      3087.00 (244.87)   3579.12 (730.22)   0.023     
  Medial.orbital (mean (SD))        6973.14 (558.72)   8085.19 (1654.78)  0.024     
  Lateral.orbital (mean (SD))       5590.57 (456.44)   6477.44 (1333.01)  0.025     
  Posterior.orbital (mean (SD))     6845.21 (546.20)   7924.19 (1624.75)  0.025     
  Rectus (mean (SD))                8721.00 (747.46)  11094.06 (6110.83)  0.161     
  Rostral (mean (SD))               3413.07 (295.50)   3750.88 (382.52)   0.012     
  Precentral (mean (SD))           36944.14 (3427.70) 41013.31 (4258.04)  0.008     
  Postcentral (mean (SD))          20938.00 (3435.44) 23506.69 (2701.43)  0.030     
  Paracentral.lobule (mean (SD))   13361.57 (1785.89) 14627.88 (1579.10)  0.049     
  Subcentral (mean (SD))            5502.36 (885.64)   6543.94 (906.29)   0.004     
  SPL (mean (SD))                  31813.43 (4849.58) 34629.50 (3740.81)  0.084     
  SMG (mean (SD))                  28640.79 (4365.75) 32516.25 (4504.07)  0.024     
  ANG (mean (SD))                  31864.79 (4552.43) 36493.50 (3897.76)  0.006     
  Precuneus (mean (SD))            28510.00 (3788.70) 32915.00 (3700.31)  0.003     
  Cuneus (mean (SD))                9355.07 (1040.46) 10682.75 (1521.76)  0.010     
  O1 (mean (SD))                    8298.50 (925.51)   9893.62 (1149.08) <0.001     
  O2 (mean (SD))                   14683.57 (1913.46) 16751.88 (2414.54)  0.016     
  O3 (mean (SD))                    8261.00 (1177.06) 10141.38 (1556.68)  0.001     
  Occipital.pole (mean (SD))       10666.64 (1017.58) 11980.25 (1631.86)  0.015     
  Lingual (mean (SD))              19665.43 (2166.02) 20818.56 (3117.94)  0.256     
  Fusiform (mean (SD))             20947.07 (2857.52) 23289.19 (3350.86)  0.050     
  Temporal.pole (mean (SD))        23479.07 (2923.96) 26994.12 (3345.51)  0.005     
  T1 (mean (SD))                   24988.57 (2642.33) 29223.56 (3848.44)  0.002     
  T2 (mean (SD))                   22875.64 (2875.80) 24408.38 (3273.84)  0.187     
  T3 (mean (SD))                    4531.00 (734.14)   5430.12 (773.80)   0.003     
  Planum.temporale (mean (SD))      2714.57 (409.79)   3396.12 (878.68)   0.013     
  Planum.polare (mean (SD))         9805.79 (1645.78)  9978.62 (2058.92)  0.803     
  Short.insular (mean (SD))        14652.79 (1336.31) 16064.06 (2461.22)  0.066     
  Long.insular (mean (SD))          8093.57 (1221.68) 10059.31 (1904.19)  0.003     
  SCA (mean (SD))                   2108.21 (542.11)   2644.69 (671.54)   0.024     
  Cingulate.anterior (mean (SD))   13500.14 (2193.65) 15224.44 (1778.78)  0.025     
  Cingulate.middle (mean (SD))     16044.50 (2245.99) 18089.75 (2598.50)  0.030     
  Cingulate.posterior (mean (SD))  18885.71 (2679.94) 21301.81 (2790.00)  0.023     
  PHG (mean (SD))                  10013.00 (1197.43) 10819.50 (1927.25)  0.187     
  Hippocampus (mean (SD))           7823.93 (712.09)   8393.62 (1074.12)  0.103     
  Amygdala (mean (SD))              3009.43 (469.08)   3219.75 (462.25)   0.227     
  Corpus.callosum (mean (SD))       3319.00 (580.49)   3305.69 (545.72)   0.949     
  Claustrum (mean (SD))             1189.93 (305.72)   1480.50 (462.80)   0.056     
  Putamen (mean (SD))              10793.64 (1243.13) 11677.06 (1900.52)  0.149     
  Caudate (mean (SD))               7368.07 (931.75)   8139.94 (1520.25)  0.111     
  Globus.pallidum (mean (SD))       2861.14 (330.56)   3257.56 (710.86)   0.066     
  Internal.capsule (mean (SD))     10153.14 (1654.93) 11021.88 (1373.90)  0.127     
  Innominate.substance (mean (SD))  2639.07 (362.97)   2730.69 (288.08)   0.448     
  Hypothalamus (mean (SD))          7507.07 (671.29)   8361.00 (934.61)   0.008     
  Thalamus (mean (SD))             14190.21 (1205.08) 14970.44 (1605.09)  0.148     
write.csv(Table.Prosencephalon.absolute, "Table.Prosencephalon.absolute.csv")
write.csv(Table.Prosencephalon.absolute.stratified.gender, "Table.Prosencephalon.absolute.stratified.gender.csv")

Table.Prosencephalon.absolute.RSD <- as.data.frame(Table.Prosencephalon.absolute)
Table.Prosencephalon.absolute.RSD <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Prosencephalon.absolute.RSD[-1,]),
                                                                       ' (',fixed=TRUE)))
Table.Prosencephalon.absolute.RSD <- data.frame(cbind(str_replace_all(Table.Prosencephalon.absolute.RSD$X1, "[ ]", ""),
                                                            str_replace_all(Table.Prosencephalon.absolute.RSD$X2, "[)]", "")))
Table.Prosencephalon.absolute.RSD$X1 <- as.character(Table.Prosencephalon.absolute.RSD$X1)
Table.Prosencephalon.absolute.RSD$X2 <- as.character(Table.Prosencephalon.absolute.RSD$X2)
Table.Prosencephalon.absolute.RSD <- as.data.frame(sapply(Table.Prosencephalon.absolute.RSD, as.numeric))
Table.Prosencephalon.absolute.RSD <- as.data.frame(Table.Prosencephalon.absolute.RSD$X2/Table.Prosencephalon.absolute.RSD$X1)
Table.Prosencephalon.absolute.RSD <- round(Table.Prosencephalon.absolute.RSD * 100, 1)


Table.Prosencephalon.absolute.stratified.gender.RSD <- as.data.frame(Table.Prosencephalon.absolute.stratified.gender)
Table.Prosencephalon.absolute.stratified.gender.RSD <- select(Table.Prosencephalon.absolute.stratified.gender.RSD, - c(p, test))

Table.Prosencephalon.absolute.stratified.gender.RSD.female <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Prosencephalon.absolute.stratified.gender.RSD[-1, "f"]),
                                                                       ' (',fixed=TRUE)))
Table.Prosencephalon.absolute.stratified.gender.RSD.female <- data.frame(cbind(str_replace_all(Table.Prosencephalon.absolute.stratified.gender.RSD.female$X1, "[ ]", ""),
                                                            str_replace_all(Table.Prosencephalon.absolute.stratified.gender.RSD.female$X2, "[)]", "")))
Table.Prosencephalon.absolute.stratified.gender.RSD.female$X1 <- as.character(Table.Prosencephalon.absolute.stratified.gender.RSD.female$X1)
Table.Prosencephalon.absolute.stratified.gender.RSD.female$X2 <- as.character(Table.Prosencephalon.absolute.stratified.gender.RSD.female$X2)
Table.Prosencephalon.absolute.stratified.gender.RSD.female <- as.data.frame(sapply(Table.Prosencephalon.absolute.stratified.gender.RSD.female, as.numeric))
Table.Prosencephalon.absolute.stratified.gender.RSD.female <- as.data.frame(Table.Prosencephalon.absolute.stratified.gender.RSD.female$X2/Table.Prosencephalon.absolute.stratified.gender.RSD.female$X1)
Table.Prosencephalon.absolute.stratified.gender.RSD.female <- round(Table.Prosencephalon.absolute.stratified.gender.RSD.female * 100, 1)

Table.Prosencephalon.absolute.stratified.gender.RSD.male <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Prosencephalon.absolute.stratified.gender.RSD[-1, "m"]),
                                                                       ' (',fixed=TRUE)))
Table.Prosencephalon.absolute.stratified.gender.RSD.male <- data.frame(cbind(str_replace_all(Table.Prosencephalon.absolute.stratified.gender.RSD.male$X1, "[ ]", ""),
                                                            str_replace_all(Table.Prosencephalon.absolute.stratified.gender.RSD.male$X2, "[)]", "")))
Table.Prosencephalon.absolute.stratified.gender.RSD.male$X1 <- as.character(Table.Prosencephalon.absolute.stratified.gender.RSD.male$X1)
Table.Prosencephalon.absolute.stratified.gender.RSD.male$X2 <- as.character(Table.Prosencephalon.absolute.stratified.gender.RSD.male$X2)
Table.Prosencephalon.absolute.stratified.gender.RSD.male <- as.data.frame(sapply(Table.Prosencephalon.absolute.stratified.gender.RSD.male, as.numeric))
Table.Prosencephalon.absolute.stratified.gender.RSD.male <- as.data.frame(Table.Prosencephalon.absolute.stratified.gender.RSD.male$X2/Table.Prosencephalon.absolute.stratified.gender.RSD.male$X1)
Table.Prosencephalon.absolute.stratified.gender.RSD.male <- round(Table.Prosencephalon.absolute.stratified.gender.RSD.male * 100, 1)

kable(Table.Prosencephalon.absolute)

Overall
n 30
Frontal.pole (mean (SD)) 4710.60 (976.19)
F1 (mean (SD)) 68776.43 (9196.02)
F2 (mean (SD)) 58458.30 (7689.55)
F3.orbital (mean (SD)) 3916.57 (613.82)
F3.triangular (mean (SD)) 11688.77 (1898.88)
F3.opercular (mean (SD)) 13949.13 (2022.23)
Anterior.orbital (mean (SD)) 3349.47 (604.18)
Medial.orbital (mean (SD)) 7566.23 (1369.20)
Lateral.orbital (mean (SD)) 6063.57 (1102.27)
Posterior.orbital (mean (SD)) 7420.67 (1341.23)
Rectus (mean (SD)) 9986.63 (4584.25)
Rostral (mean (SD)) 3593.23 (379.75)
Precentral (mean (SD)) 39114.37 (4348.35)
Postcentral (mean (SD)) 22307.97 (3280.88)
Paracentral.lobule (mean (SD)) 14036.93 (1769.85)
Subcentral (mean (SD)) 6057.87 (1027.51)
SPL (mean (SD)) 33315.33 (4452.27)
SMG (mean (SD)) 30707.70 (4785.83)
ANG (mean (SD)) 34333.43 (4760.76)
Precuneus (mean (SD)) 30859.33 (4302.66)
Cuneus (mean (SD)) 10063.17 (1461.83)
O1 (mean (SD)) 9149.23 (1312.27)
O2 (mean (SD)) 15786.67 (2399.63)
O3 (mean (SD)) 9263.87 (1668.79)
Occipital.pole (mean (SD)) 11367.23 (1511.90)
Lingual (mean (SD)) 20280.43 (2733.84)
Fusiform (mean (SD)) 22196.20 (3298.55)
Temporal.pole (mean (SD)) 25353.77 (3578.13)
T1 (mean (SD)) 27247.23 (3925.33)
T2 (mean (SD)) 23693.10 (3139.43)
T3 (mean (SD)) 5010.53 (871.47)
Planum.temporale (mean (SD)) 3078.07 (770.86)
Planum.polare (mean (SD)) 9897.97 (1847.85)
Short.insular (mean (SD)) 15405.47 (2108.68)
Long.insular (mean (SD)) 9141.97 (1881.34)
SCA (mean (SD)) 2394.33 (662.65)
Cingulate.anterior (mean (SD)) 14419.77 (2135.23)
Cingulate.middle (mean (SD)) 17135.30 (2613.59)
Cingulate.posterior (mean (SD)) 20174.30 (2957.84)
PHG (mean (SD)) 10443.13 (1652.70)
Hippocampus (mean (SD)) 8127.77 (952.70)
Amygdala (mean (SD)) 3121.60 (469.63)
Corpus.callosum (mean (SD)) 3311.90 (552.40)
Claustrum (mean (SD)) 1344.90 (417.64)
Putamen (mean (SD)) 11264.80 (1661.91)
Caudate (mean (SD)) 7779.73 (1318.33)
Globus.pallidum (mean (SD)) 3072.57 (592.30)
Internal.capsule (mean (SD)) 10616.47 (1548.67)
Innominate.substance (mean (SD)) 2687.93 (322.72)
Hypothalamus (mean (SD)) 7962.50 (917.36)
Thalamus (mean (SD)) 14606.33 (1462.98)

kable(Table.Prosencephalon.absolute.RSD)

Table.Prosencephalon.absolute.RSDX2/Table.Prosencephalon.absolute.RSDX1
20.7
13.4
13.2
15.7
16.2
14.5
18.0
18.1
18.2
18.1
45.9
10.6
11.1
14.7
12.6
17.0
13.4
15.6
13.9
13.9
14.5
14.3
15.2
18.0
13.3
13.5
14.9
14.1
14.4
13.3
17.4
25.0
18.7
13.7
20.6
27.7
14.8
15.3
14.7
15.8
11.7
15.0
16.7
31.1
14.8
16.9
19.3
14.6
12.0
11.5
10.0

kable(Table.Prosencephalon.absolute.stratified.gender)

f m p test
n 14 16
Frontal.pole (mean (SD)) 4369.21 (705.73) 5009.31 (1098.53) 0.072
F1 (mean (SD)) 64718.00 (8455.20) 72327.56 (8527.23) 0.021
F2 (mean (SD)) 55366.50 (7297.68) 61163.62 (7171.64) 0.037
F3.orbital (mean (SD)) 3665.71 (565.37) 4136.06 (584.21) 0.034
F3.triangular (mean (SD)) 10845.50 (1038.66) 12426.62 (2189.00) 0.020
F3.opercular (mean (SD)) 12752.21 (1540.15) 14996.44 (1828.47) 0.001
Anterior.orbital (mean (SD)) 3087.00 (244.87) 3579.12 (730.22) 0.023
Medial.orbital (mean (SD)) 6973.14 (558.72) 8085.19 (1654.78) 0.024
Lateral.orbital (mean (SD)) 5590.57 (456.44) 6477.44 (1333.01) 0.025
Posterior.orbital (mean (SD)) 6845.21 (546.20) 7924.19 (1624.75) 0.025
Rectus (mean (SD)) 8721.00 (747.46) 11094.06 (6110.83) 0.161
Rostral (mean (SD)) 3413.07 (295.50) 3750.88 (382.52) 0.012
Precentral (mean (SD)) 36944.14 (3427.70) 41013.31 (4258.04) 0.008
Postcentral (mean (SD)) 20938.00 (3435.44) 23506.69 (2701.43) 0.030
Paracentral.lobule (mean (SD)) 13361.57 (1785.89) 14627.88 (1579.10) 0.049
Subcentral (mean (SD)) 5502.36 (885.64) 6543.94 (906.29) 0.004
SPL (mean (SD)) 31813.43 (4849.58) 34629.50 (3740.81) 0.084
SMG (mean (SD)) 28640.79 (4365.75) 32516.25 (4504.07) 0.024
ANG (mean (SD)) 31864.79 (4552.43) 36493.50 (3897.76) 0.006
Precuneus (mean (SD)) 28510.00 (3788.70) 32915.00 (3700.31) 0.003
Cuneus (mean (SD)) 9355.07 (1040.46) 10682.75 (1521.76) 0.010
O1 (mean (SD)) 8298.50 (925.51) 9893.62 (1149.08) <0.001
O2 (mean (SD)) 14683.57 (1913.46) 16751.88 (2414.54) 0.016
O3 (mean (SD)) 8261.00 (1177.06) 10141.38 (1556.68) 0.001
Occipital.pole (mean (SD)) 10666.64 (1017.58) 11980.25 (1631.86) 0.015
Lingual (mean (SD)) 19665.43 (2166.02) 20818.56 (3117.94) 0.256
Fusiform (mean (SD)) 20947.07 (2857.52) 23289.19 (3350.86) 0.050
Temporal.pole (mean (SD)) 23479.07 (2923.96) 26994.12 (3345.51) 0.005
T1 (mean (SD)) 24988.57 (2642.33) 29223.56 (3848.44) 0.002
T2 (mean (SD)) 22875.64 (2875.80) 24408.38 (3273.84) 0.187
T3 (mean (SD)) 4531.00 (734.14) 5430.12 (773.80) 0.003
Planum.temporale (mean (SD)) 2714.57 (409.79) 3396.12 (878.68) 0.013
Planum.polare (mean (SD)) 9805.79 (1645.78) 9978.62 (2058.92) 0.803
Short.insular (mean (SD)) 14652.79 (1336.31) 16064.06 (2461.22) 0.066
Long.insular (mean (SD)) 8093.57 (1221.68) 10059.31 (1904.19) 0.003
SCA (mean (SD)) 2108.21 (542.11) 2644.69 (671.54) 0.024
Cingulate.anterior (mean (SD)) 13500.14 (2193.65) 15224.44 (1778.78) 0.025
Cingulate.middle (mean (SD)) 16044.50 (2245.99) 18089.75 (2598.50) 0.030
Cingulate.posterior (mean (SD)) 18885.71 (2679.94) 21301.81 (2790.00) 0.023
PHG (mean (SD)) 10013.00 (1197.43) 10819.50 (1927.25) 0.187
Hippocampus (mean (SD)) 7823.93 (712.09) 8393.62 (1074.12) 0.103
Amygdala (mean (SD)) 3009.43 (469.08) 3219.75 (462.25) 0.227
Corpus.callosum (mean (SD)) 3319.00 (580.49) 3305.69 (545.72) 0.949
Claustrum (mean (SD)) 1189.93 (305.72) 1480.50 (462.80) 0.056
Putamen (mean (SD)) 10793.64 (1243.13) 11677.06 (1900.52) 0.149
Caudate (mean (SD)) 7368.07 (931.75) 8139.94 (1520.25) 0.111
Globus.pallidum (mean (SD)) 2861.14 (330.56) 3257.56 (710.86) 0.066
Internal.capsule (mean (SD)) 10153.14 (1654.93) 11021.88 (1373.90) 0.127
Innominate.substance (mean (SD)) 2639.07 (362.97) 2730.69 (288.08) 0.448
Hypothalamus (mean (SD)) 7507.07 (671.29) 8361.00 (934.61) 0.008
Thalamus (mean (SD)) 14190.21 (1205.08) 14970.44 (1605.09) 0.148

kable(Table.Prosencephalon.absolute.stratified.gender.RSD.female)

Table.Prosencephalon.absolute.stratified.gender.RSD.femaleX2/Table.Prosencephalon.absolute.stratified.gender.RSD.femaleX1
16.2
13.1
13.2
15.4
9.6
12.1
7.9
8.0
8.2
8.0
8.6
8.7
9.3
16.4
13.4
16.1
15.2
15.2
14.3
13.3
11.1
11.2
13.0
14.2
9.5
11.0
13.6
12.5
10.6
12.6
16.2
15.1
16.8
9.1
15.1
25.7
16.2
14.0
14.2
12.0
9.1
15.6
17.5
25.7
11.5
12.6
11.6
16.3
13.8
8.9
8.5

kable(Table.Prosencephalon.absolute.stratified.gender.RSD.male)

Table.Prosencephalon.absolute.stratified.gender.RSD.maleX2/Table.Prosencephalon.absolute.stratified.gender.RSD.maleX1
21.9
11.8
11.7
14.1
17.6
12.2
20.4
20.5
20.6
20.5
55.1
10.2
10.4
11.5
10.8
13.8
10.8
13.9
10.7
11.2
14.2
11.6
14.4
15.3
13.6
15.0
14.4
12.4
13.2
13.4
14.3
25.9
20.6
15.3
18.9
25.4
11.7
14.4
13.1
17.8
12.8
14.4
16.5
31.3
16.3
18.7
21.8
12.5
10.5
11.2
10.7

NA

Prosencephalon.absolute <- select(Prosencephalon.absolute, - c(Gender))
Prosencephalon.absolute1 <- Prosencephalon.absolute[,-c(41:51)]
Prosencephalon.absolute2 <- Prosencephalon.absolute[, c(41:51)]

names.anatomical.structures.temporary <- c("Frontal.pole",
  "F1",
  "F2",
  "F3.orbital", 
  "F3.triangular", 
  "F3.opercular", 
  "Anterior.orbital", 
  "Medial.orbital", 
  "Lateral.orbital", 
  "Posterior.orbital",
  "Rectus", 
  "Rostral", 
  "Precentral", 
  "Postcentral", 
  "Paracentral.lobule", 
  "Subcentral", 
  "SPL", 
  "SMG", 
  "ANG", 
  "Precuneus",
  "Cuneus", 
  "O1",
  "O2", 
  "O3", 
  "Occipital.pole", 
  "Lingual", 
  "Fusiform", 
  "Temporal.pole", 
  "T1",
  "T2", 
  "T3", 
  "Planum.temporale", 
  "Planum.polare", 
  "Short.insular", 
  "Long.insular", 
  "SCA", 
  "Cingulate.anterior", 
  "Cingulate.middle", 
  "Cingulate.posterior", 
  "PHG")

names.anatomical.structures.definitive <- c("Frontal pole",
  "F1",
  "F2",
  "F3 orbital", 
  "F3 triangular", 
  "F3 opercular", 
  "Anterior orbital", 
  "Medial orbital", 
  "Lateral orbital", 
  "Posterior orbital",
  "Rectus", 
  "Rostral", 
  "Precentral", 
  "Postcentral", 
  "Paracentral lobule", 
  "Subcentral", 
  "SPL", 
  "SMG", 
  "ANG", 
  "Precuneus",
  "Cuneus", 
  "O1",
  "O2", 
  "O3", 
  "Occipital pole", 
  "Lingual", 
  "Fusiform", 
  "Temporal pole", 
  "T1",
  "T2", 
  "T3", 
  "Planum temporale", 
  "Planum polare", 
  "Short insular", 
  "Long insular", 
  "SCA", 
  "Cingulate anterior", 
  "Cingulate middle", 
  "Cingulate posterior", 
  "PHG")


Prosencephalon.absolute.plotdata1 <- gather(Prosencephalon.absolute1, "anatomical.structure", "relative.volume")
Prosencephalon.absolute.plotdata1$Gender <- All.Volumes$Gender
Prosencephalon.absolute.plotdata1$Age <- All.Volumes$`Age (years)`
Prosencephalon.absolute.plotdata1$Gender <- factor(Prosencephalon.absolute.plotdata1$Gender, levels = c("f", "m"), c("f", "m"))

Prosencephalon.absolute.plotdata1$anatomical.structure <- factor(Prosencephalon.absolute.plotdata1$anatomical.structure, 
                                                                levels = rev(c(names.anatomical.structures.temporary)), rev(c(names.anatomical.structures.definitive)))

Prosencephalon.absolute.plot1 <-  ggplot(Prosencephalon.absolute.plotdata1, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Absolute volume (in mm3)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("CEREBRAL GYRI") +
  theme(plot.title = element_text(hjust = 0.5))

Prosencephalon.absolute.plot1
ggsave("Prosencephalon.absolute.plot1.pdf", plot = Prosencephalon.absolute.plot1, width = 14, height = 12, units = "in", dpi = 600)


names.anatomical.structures.temporary <- c(
  "Corpus.callosum", 
  "Claustrum", 
  "Putamen", 
  "Caudate", 
  "Globus.pallidum", 
  "Internal.capsule",
  "Innominate.substance", 
  "Hypothalamus",
  "Thalamus", 
  "Hippocampus", 
  "Amygdala")

names.anatomical.structures.definitive <- c(
  "Corpus callosum", 
  "Claustrum", 
  "Putamen", 
  "Caudate", 
  "Globus pallidum", 
  "Internal capsule",
  "Innominate substance", 
  "Hypothalamus",
  "Thalamus",
  "Hippocampus", 
  "Amygdala")

Prosencephalon.absolute.plotdata2 <- gather(Prosencephalon.absolute2, "anatomical.structure", "relative.volume")
Prosencephalon.absolute.plotdata2$Gender <- All.Volumes$Gender
Prosencephalon.absolute.plotdata2$Age <- All.Volumes$`Age (years)`

Prosencephalon.absolute.plotdata2$Gender <- factor(Prosencephalon.absolute.plotdata2$Gender, levels = c("f", "m"), c("f", "m"))
Prosencephalon.absolute.plotdata2$anatomical.structure <- factor(Prosencephalon.absolute.plotdata2$anatomical.structure, 
                                                                levels = rev(c(names.anatomical.structures.temporary)), rev(c(names.anatomical.structures.definitive)))

Prosencephalon.absolute.plot2 <-  ggplot(Prosencephalon.absolute.plotdata2, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Absolute volume (in mm3)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("CENTRAL PROSENCEPHALON") +
  theme(plot.title = element_text(hjust = 0.5))

Prosencephalon.absolute.plot2
ggsave("Prosencephalon.absolute.plot2.pdf", plot = Prosencephalon.absolute.plot2, width = 10, height = 6, units = "in", dpi = 600)


Prosencephalon.absolute$Gender <- All.Volumes$Gender
Prosencephalon.absolute$Age <- All.Volumes$`Age (years)`

Total.Frontal.pole.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Frontal.pole, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 6700, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME frontal pole") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Frontal.pole.Age.plot
ggsave("Total.Frontal.pole.Age.plot.pdf", plot = Total.Frontal.pole.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.F1.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=F1, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 77000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME F1") +
  theme(plot.title = element_text(hjust = 0.5))
Total.F1.Age.plot
ggsave("Total.F1.Age.plot.pdf", plot = Total.F1.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.F2.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=F2, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 72000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME F2") +
  theme(plot.title = element_text(hjust = 0.5))
Total.F2.Age.plot
ggsave("Total.F2.Age.plot.pdf", plot = Total.F2.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.F3.orbital.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=F3.orbital, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 4600, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME F3 orbital") +
  theme(plot.title = element_text(hjust = 0.5))
Total.F3.orbital.Age.plot
ggsave("Total.F3.orbital.Age.plot.pdf", plot = Total.F3.orbital.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.F3.triangular.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=F3.triangular, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 13300, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME F3 triangular") +
  theme(plot.title = element_text(hjust = 0.5))
Total.F3.triangular.Age.plot
ggsave("Total.F3.triangular.Age.plot.pdf", plot = Total.F3.triangular.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.F3.opercular.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=F3.opercular, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 17300, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME F3 opercular") +
  theme(plot.title = element_text(hjust = 0.5))
Total.F3.opercular.Age.plot
ggsave("Total.F3.opercular.Age.plot.pdf", plot = Total.F3.opercular.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Anterior.orbital.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Anterior.orbital, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 5200, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME anterior orbital") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Anterior.orbital.Age.plot
ggsave("Total.Anterior.orbital.Age.plot.pdf", plot = Total.Anterior.orbital.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Medial.orbital.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Medial.orbital, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 10500, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME medial orbital") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Medial.orbital.Age.plot
ggsave("Total.Medial.orbital.Age.plot.pdf", plot = Total.Medial.orbital.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Lateral.orbital.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Lateral.orbital, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 8200, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME lateral orbital") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Lateral.orbital.Age.plot
ggsave("Total.Lateral.orbital.Age.plot.pdf", plot = Total.Lateral.orbital.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Posterior.orbital.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Posterior.orbital, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 10200, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME posterior orbital") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Posterior.orbital.Age.plot
ggsave("Total.Posterior.orbital.Age.plot.pdf", plot = Total.Posterior.orbital.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Rectus.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Rectus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 22000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME rectus") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Rectus.Age.plot
ggsave("Total.Rectus.Age.plot.pdf", plot = Total.Rectus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Rostral.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Rostral, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 4300, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME rostral") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Rostral.Age.plot
ggsave("Total.Rostral.Age.plot.pdf", plot = Total.Rostral.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Precentral.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Precentral, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 48000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME precentral") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Precentral.Age.plot
ggsave("Total.Precentral.Age.plot.pdf", plot = Total.Precentral.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Postcentral.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Postcentral, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 26500, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME postcentral") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Postcentral.Age.plot
ggsave("Total.Postcentral.Age.plot.pdf", plot = Total.Postcentral.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Paracentral.lobule.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Paracentral.lobule, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 17200, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME paracentral lobule") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Paracentral.lobule.Age.plot
ggsave("Total.Paracentral.lobule.Age.plot.pdf", plot = Total.Paracentral.lobule.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Subcentral.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Subcentral, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 7200, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME subcentral") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Subcentral.Age.plot
ggsave("Total.Subcentral.Age.plot.pdf", plot = Total.Subcentral.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.SPL.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=SPL, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 38000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME superior parietal lobule") +
  theme(plot.title = element_text(hjust = 0.5))
Total.SPL.Age.plot
ggsave("Total.SPL.Age.plot.pdf", plot = Total.SPL.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.SMG.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=SMG, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 36000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME supramarginal") +
  theme(plot.title = element_text(hjust = 0.5))
Total.SMG.Age.plot
ggsave("Total.SMG.Age.plot.pdf", plot = Total.SMG.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.ANG.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=ANG, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 38000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME angular") +
  theme(plot.title = element_text(hjust = 0.5))
Total.ANG.Age.plot
ggsave("Total.ANG.Age.plot.pdf", plot = Total.ANG.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Precuneus.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Precuneus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 33000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME precuneus") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Precuneus.Age.plot
ggsave("Total.Precuneus.Age.plot.pdf", plot = Total.Precuneus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Cuneus.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Cuneus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 11700, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME cuneus") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Cuneus.Age.plot
ggsave("Total.Cuneus.Age.plot.pdf", plot = Total.Cuneus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.O1.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=O1, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 11200, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME O1") +
  theme(plot.title = element_text(hjust = 0.5))
Total.O1.Age.plot
ggsave("Total.O1.Age.plot.pdf", plot = Total.O1.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.O2.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=O2, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 18000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME O2") +
  theme(plot.title = element_text(hjust = 0.5))
Total.O2.Age.plot
ggsave("Total.O2.Age.plot.pdf", plot = Total.O2.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.O3.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=O3, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 11500, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME O3") +
  theme(plot.title = element_text(hjust = 0.5))
Total.O3.Age.plot
ggsave("Total.O3.Age.plot.pdf", plot = Total.O3.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Occipital.pole.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Occipital.pole, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 13200, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME occipital pole") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Occipital.pole.Age.plot
ggsave("Total.Occipital.pole.Age.plot.pdf", plot = Total.Occipital.pole.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Lingual.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Lingual, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 25000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME lingual") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Lingual.Age.plot
ggsave("Total.Lingual.Age.plot.pdf", plot = Total.Lingual.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Fusiform.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Fusiform, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 26000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME fusiform") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Fusiform.Age.plot
ggsave("Total.Fusiform.Age.plot.pdf", plot = Total.Fusiform.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Temporal.pole.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Temporal.pole, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 31000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME temporal pole") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Temporal.pole.Age.plot
ggsave("Total.Temporal.pole.Age.plot.pdf", plot = Total.Temporal.pole.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.T1.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=T1, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 31000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME T1") +
  theme(plot.title = element_text(hjust = 0.5))
Total.T1.Age.plot
ggsave("Total.T1.Age.plot.pdf", plot = Total.T1.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.T2.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=T2, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 29000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME T2") +
  theme(plot.title = element_text(hjust = 0.5))
Total.T2.Age.plot
ggsave("Total.T2.Age.plot.pdf", plot = Total.T2.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.T3.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=T3, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 6100, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME T3") +
  theme(plot.title = element_text(hjust = 0.5))
Total.T3.Age.plot
ggsave("Total.T3.Age.plot.pdf", plot = Total.T3.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Planum.temporale.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Planum.temporale, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 4100, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME planum temporale") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Planum.temporale.Age.plot
ggsave("Total.Planum.temporale.Age.plot.pdf", plot = Total.Planum.temporale.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Planum.polare.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Planum.polare, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 13300, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME planum polare") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Planum.polare.Age.plot
ggsave("Total.Planum.polare.Age.plot.pdf", plot = Total.Planum.polare.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Short.insular.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Short.insular, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 19000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME short insular") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Short.insular.Age.plot
ggsave("Total.Short.insular.Age.plot.pdf", plot = Total.Short.insular.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Long.insular.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Long.insular, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 12000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME long insular") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Long.insular.Age.plot
ggsave("Total.Long.insular.Age.plot.pdf", plot = Total.Long.insular.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.SCA.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=SCA, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 3800, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME subcallosal area") +
  theme(plot.title = element_text(hjust = 0.5))
Total.SCA.Age.plot
ggsave("Total.SCA.Age.plot.pdf", plot = Total.SCA.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Cingulate.anterior.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Cingulate.anterior, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 17300, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME cingulate anterior") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Cingulate.anterior.Age.plot
ggsave("Total.Cingulate.anterior.Age.plot.pdf", plot = Total.Cingulate.anterior.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Cingulate.middle.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Cingulate.middle, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 20300, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME cingulate middle") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Cingulate.middle.Age.plot
ggsave("Total.Cingulate.middle.Age.plot.pdf", plot = Total.Cingulate.middle.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Cingulate.posterior.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Cingulate.posterior, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 24300, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME cingulate posterior") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Cingulate.posterior.Age.plot
ggsave("Total.Cingulate.posterior.Age.plot.pdf", plot = Total.Cingulate.posterior.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.PHG.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=PHG, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 14000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME PHG") +
  theme(plot.title = element_text(hjust = 0.5))
Total.PHG.Age.plot
ggsave("Total.PHG.Age.plot.pdf", plot = Total.PHG.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Hippocampus.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Hippocampus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 9700, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME hippocampus") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Hippocampus.Age.plot
ggsave("Total.Hippocampus.Age.plot.pdf", plot = Total.Hippocampus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Amygdala.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Amygdala, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 3600, label.x = 60, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME amygdala") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Amygdala.Age.plot
ggsave("Total.Amygdala.Age.plot.pdf", plot = Total.Amygdala.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Corpus.callosum.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Corpus.callosum, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 4100, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME corpus callosum") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Corpus.callosum.Age.plot
ggsave("Total.Corpus.callosum.Age.plot.pdf", plot = Total.Corpus.callosum.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Claustrum.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Claustrum, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2100, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME claustrum") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Claustrum.Age.plot
ggsave("Total.Claustrum.Age.plot.pdf", plot = Total.Claustrum.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Putamen.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Putamen, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 12300, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME putamen") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Putamen.Age.plot
ggsave("Total.Putamen.Age.plot.pdf", plot = Total.Putamen.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Caudate.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Caudate, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 10200, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME caudate") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Caudate.Age.plot
ggsave("Total.Caudate.Age.plot.pdf", plot = Total.Caudate.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Globus.pallidum.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Globus.pallidum, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 4200, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME globus pallidum") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Globus.pallidum.Age.plot
ggsave("Total.Globus.pallidum.Age.plot.pdf", plot = Total.Globus.pallidum.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Internal.capsule.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Internal.capsule, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 12200, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME internal capsule") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Internal.capsule.Age.plot
ggsave("Total.Internal.capsule.Age.plot.pdf", plot = Total.Internal.capsule.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Innominate.substance.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Innominate.substance, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 3180, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME innominate substance") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Innominate.substance.Age.plot
ggsave("Total.Innominate.substance.Age.plot.pdf", plot = Total.Innominate.substance.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Hypothalamus.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Hypothalamus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 9200, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME hypothalamus") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Hypothalamus.Age.plot
ggsave("Total.Hypothalamus.Age.plot.pdf", plot = Total.Hypothalamus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Thalamus.Age.plot <-  ggplot(Prosencephalon.absolute, aes(y=Thalamus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 17000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME thalamus") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Thalamus.Age.plot
ggsave("Total.Thalamus.Age.plot.pdf", plot = Total.Thalamus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)

Relative Volumes


#Prosencephalon.absolute <- select(Prosencephalon.absolute, - c(Gender))
Prosencephalon.relative <- (100 * (Prosencephalon.absolute/All.Volumes$`Total encephalic volume (without ventricles)`))
‘/’ not meaningful for factors
Prosencephalon.relative1 <- Prosencephalon.relative[,-c(41:51)]
Prosencephalon.relative2 <- Prosencephalon.relative[, c(41:51)]

Table.Prosencephalon.relative <- CreateTableOne(
  vars = c("Frontal.pole",
  "F1",
  "F2",
  "F3.orbital", 
  "F3.triangular", 
  "F3.opercular", 
  "Anterior.orbital", 
  "Medial.orbital", 
  "Lateral.orbital", 
  "Posterior.orbital",
  "Rectus", 
  "Rostral", 
  "Precentral", 
  "Postcentral", 
  "Paracentral.lobule", 
  "Subcentral", 
  "SPL", 
  "SMG", 
  "ANG", 
  "Precuneus",
  "Cuneus", 
  "O1",
  "O2", 
  "O3", 
  "Occipital.pole", 
  "Lingual", 
  "Fusiform", 
  "Temporal.pole", 
  "T1",
  "T2", 
  "T3", 
  "Planum.temporale", 
  "Planum.polare", 
  "Short.insular", 
  "Long.insular", 
  "SCA", 
  "Cingulate.anterior", 
  "Cingulate.middle", 
  "Cingulate.posterior", 
  "PHG", 
  "Hippocampus", 
  "Amygdala", 
  "Corpus.callosum", 
  "Claustrum", 
  "Putamen", 
  "Caudate", 
  "Globus.pallidum", 
  "Internal.capsule",
  "Innominate.substance", 
  "Hypothalamus",
  "Thalamus"),
  data = Prosencephalon.relative)

Prosencephalon.relative$Gender <- All.Volumes$Gender
Table.Prosencephalon.relative.stratified.gender <- CreateTableOne(
  vars = c("Frontal.pole",
  "F1",
  "F2",
  "F3.orbital", 
  "F3.triangular", 
  "F3.opercular", 
  "Anterior.orbital", 
  "Medial.orbital", 
  "Lateral.orbital", 
  "Posterior.orbital",
  "Rectus", 
  "Rostral", 
  "Precentral", 
  "Postcentral", 
  "Paracentral.lobule", 
  "Subcentral", 
  "SPL", 
  "SMG", 
  "ANG", 
  "Precuneus",
  "Cuneus", 
  "O1",
  "O2", 
  "O3", 
  "Occipital.pole", 
  "Lingual", 
  "Fusiform", 
  "Temporal.pole", 
  "T1",
  "T2", 
  "T3", 
  "Planum.temporale", 
  "Planum.polare", 
  "Short.insular", 
  "Long.insular", 
  "SCA", 
  "Cingulate.anterior", 
  "Cingulate.middle", 
  "Cingulate.posterior", 
  "PHG", 
  "Hippocampus", 
  "Amygdala", 
  "Corpus.callosum", 
  "Claustrum", 
  "Putamen", 
  "Caudate", 
  "Globus.pallidum", 
  "Internal.capsule",
  "Innominate.substance", 
  "Hypothalamus",
  "Thalamus"),
  strata = c("Gender"),
  data = Prosencephalon.relative)

Table.Prosencephalon.relative <- print(Table.Prosencephalon.relative, contDigits = 10)
                                  
                                   Overall                    
  n                                          30               
  Frontal.pole (mean (SD))         0.4308161280 (0.0735790922)
  F1 (mean (SD))                   6.2797984283 (0.3863873818)
  F2 (mean (SD))                   5.3376497465 (0.3212511986)
  F3.orbital (mean (SD))           0.3580350033 (0.0400757488)
  F3.triangular (mean (SD))        1.0712810271 (0.1454267486)
  F3.opercular (mean (SD))         1.2780793248 (0.1499873117)
  Anterior.orbital (mean (SD))     0.3058239406 (0.0373903676)
  Medial.orbital (mean (SD))       0.6908155982 (0.0847676556)
  Lateral.orbital (mean (SD))      0.5536005086 (0.0684027573)
  Posterior.orbital (mean (SD))    0.6775656621 (0.0832782152)
  Rectus (mean (SD))               0.9134375442 (0.4012168421)
  Rostral (mean (SD))              0.3293498153 (0.0250770666)
  Precentral (mean (SD))           3.5870207286 (0.3013356393)
  Postcentral (mean (SD))          2.0375742862 (0.1796109149)
  Paracentral.lobule (mean (SD))   1.2872489540 (0.1404521846)
  Subcentral (mean (SD))           0.5533885997 (0.0701240033)
  SPL (mean (SD))                  3.0512299837 (0.2995764614)
  SMG (mean (SD))                  2.8054702345 (0.2963151197)
  ANG (mean (SD))                  3.1401508432 (0.2974069556)
  Precuneus (mean (SD))            2.8184789289 (0.2195354334)
  Cuneus (mean (SD))               0.9218075932 (0.1105395289)
  O1 (mean (SD))                   0.8363347713 (0.0794530354)
  O2 (mean (SD))                   1.4412036853 (0.1395067116)
  O3 (mean (SD))                   0.8459452532 (0.1135967778)
  Occipital.pole (mean (SD))       1.0401371468 (0.0957630116)
  Lingual (mean (SD))              1.8611729124 (0.2307977883)
  Fusiform (mean (SD))             2.0313915705 (0.2297491283)
  Temporal.pole (mean (SD))        2.3163307043 (0.1969989384)
  T1 (mean (SD))                   2.4899711225 (0.2314929390)
  T2 (mean (SD))                   2.1710340083 (0.2222231589)
  T3 (mean (SD))                   0.4573538448 (0.0569894934)
  Planum.temporale (mean (SD))     0.2805395089 (0.0570436553)
  Planum.polare (mean (SD))        0.9110250954 (0.1711155137)
  Short.insular (mean (SD))        1.4149000524 (0.1765065390)
  Long.insular (mean (SD))         0.8324538909 (0.1196168331)
  SCA (mean (SD))                  0.2170797247 (0.0471724812)
  Cingulate.anterior (mean (SD))   1.3176948779 (0.1348973794)
  Cingulate.middle (mean (SD))     1.5637867547 (0.1479091119)
  Cingulate.posterior (mean (SD))  1.8413310529 (0.1454271384)
  PHG (mean (SD))                  0.9563118242 (0.1171393527)
  Hippocampus (mean (SD))          0.7446874971 (0.0621830878)
  Amygdala (mean (SD))             0.2864526632 (0.0401036938)
  Corpus.callosum (mean (SD))      0.3039193139 (0.0468123806)
  Claustrum (mean (SD))            0.1228498024 (0.0358816349)
  Putamen (mean (SD))              1.0344949954 (0.1388220008)
  Caudate (mean (SD))              0.7138494977 (0.1087637962)
  Globus.pallidum (mean (SD))      0.2805060774 (0.0391642507)
  Internal.capsule (mean (SD))     0.9724042811 (0.1172447094)
  Innominate.substance (mean (SD)) 0.2477217623 (0.0361218477)
  Hypothalamus (mean (SD))         0.7289368930 (0.0482037353)
  Thalamus (mean (SD))             1.3400717256 (0.1017134094)
Table.Prosencephalon.relative.stratified.gender <- print(Table.Prosencephalon.relative.stratified.gender, contDigits = 10)
                                  Stratified by Gender
                                   f                           m                           p      test
  n                                          14                          16                           
  Frontal.pole (mean (SD))         0.4282337280 (0.0713377035) 0.4330757280 (0.0777473097)  0.861     
  F1 (mean (SD))                   6.3006329062 (0.3639376668) 6.2615682601 (0.4160375339)  0.788     
  F2 (mean (SD))                   5.3883848936 (0.3077446428) 5.2932564928 (0.3360665361)  0.428     
  F3.orbital (mean (SD))           0.3571578969 (0.0385677622) 0.3588024714 (0.0425977851)  0.913     
  F3.triangular (mean (SD))        1.0636322212 (0.1197364194) 1.0779737323 (0.1684052590)  0.793     
  F3.opercular (mean (SD))         1.2495682579 (0.1574229154) 1.3030265083 (0.1435004821)  0.339     
  Anterior.orbital (mean (SD))     0.3017582832 (0.0164770413) 0.3093813908 (0.0493827496)  0.586     
  Medial.orbital (mean (SD))       0.6815918090 (0.0371181605) 0.6988864137 (0.1120228996)  0.586     
  Lateral.orbital (mean (SD))      0.5464232617 (0.0304519052) 0.5598805996 (0.0902891005)  0.600     
  Posterior.orbital (mean (SD))    0.6691168234 (0.0367863500) 0.6849583960 (0.1100474777)  0.612     
  Rectus (mean (SD))               0.8532393638 (0.0662940918) 0.9661109520 (0.5486963089)  0.452     
  Rostral (mean (SD))              0.3339400566 (0.0264801278) 0.3253333540 (0.0239001532)  0.357     
  Precentral (mean (SD))           3.6104693496 (0.2468897213) 3.5665031852 (0.3489460002)  0.697     
  Postcentral (mean (SD))          2.0354425348 (0.1884559911) 2.0394395687 (0.1777112761)  0.953     
  Paracentral.lobule (mean (SD))   1.3045162856 (0.1438324556) 1.2721400388 (0.1403115272)  0.538     
  Subcentral (mean (SD))           0.5355965755 (0.0569946874) 0.5689566208 (0.0783433358)  0.199     
  SPL (mean (SD))                  3.0950976636 (0.2771645426) 3.0128457637 (0.3218134493)  0.463     
  SMG (mean (SD))                  2.7870612121 (0.2560750682) 2.8215781290 (0.3351530207)  0.756     
  ANG (mean (SD))                  3.1074492113 (0.3335758333) 3.1687647712 (0.2696241186)  0.582     
  Precuneus (mean (SD))            2.7769055892 (0.2074598065) 2.8548556011 (0.2298977990)  0.341     
  Cuneus (mean (SD))               0.9162725007 (0.1085944316) 0.9266507992 (0.1155395028)  0.803     
  O1 (mean (SD))                   0.8107747580 (0.0725777711) 0.8586997830 (0.0805991452)  0.100     
  O2 (mean (SD))                   1.4338278528 (0.1550060300) 1.4476575387 (0.1292605063)  0.792     
  O3 (mean (SD))                   0.8091809468 (0.1170210398) 0.8781140214 (0.1035122305)  0.098     
  Occipital.pole (mean (SD))       1.0453411723 (0.1129383712) 1.0355836245 (0.0814121997)  0.786     
  Lingual (mean (SD))              1.9260643720 (0.2287149262) 1.8043928852 (0.2242302480)  0.153     
  Fusiform (mean (SD))             2.0431163714 (0.2142611581) 2.0211323697 (0.2490441211)  0.799     
  Temporal.pole (mean (SD))        2.2887424248 (0.1717974683) 2.3404704489 (0.2193601055)  0.483     
  T1 (mean (SD))                   2.4388032912 (0.1640313381) 2.5347429750 (0.2751451068)  0.265     
  T2 (mean (SD))                   2.2309720524 (0.1865495819) 2.1185882198 (0.2429535202)  0.171     
  T3 (mean (SD))                   0.4422376645 (0.0597357531) 0.4705805025 (0.0527885654)  0.179     
  Planum.temporale (mean (SD))     0.2652397597 (0.0370145950) 0.2939267894 (0.0685126147)  0.174     
  Planum.polare (mean (SD))        0.9612340750 (0.1660219988) 0.8670922381 (0.1682532577)  0.135     
  Short.insular (mean (SD))        1.4338625682 (0.1204101258) 1.3983078510 (0.2168811526)  0.591     
  Long.insular (mean (SD))         0.7888303012 (0.0888448680) 0.8706245319 (0.1322545191)  0.060     
  SCA (mean (SD))                  0.2044625144 (0.0441130883) 0.2281197836 (0.0483429862)  0.175     
  Cingulate.anterior (mean (SD))   1.3135641868 (0.1439613708) 1.3213092326 (0.1311107677)  0.879     
  Cingulate.middle (mean (SD))     1.5619775543 (0.1253223665) 1.5653698051 (0.1693469993)  0.951     
  Cingulate.posterior (mean (SD))  1.8380656367 (0.1343469675) 1.8441882921 (0.1588299348)  0.911     
  PHG (mean (SD))                  0.9762747018 (0.0728687435) 0.9388443063 (0.1457024489)  0.392     
  Hippocampus (mean (SD))          0.7655342036 (0.0635206138) 0.7264466289 (0.0567298899)  0.086     
  Amygdala (mean (SD))             0.2948215970 (0.0466054982) 0.2791298460 (0.0332319267)  0.293     
  Corpus.callosum (mean (SD))      0.3231162484 (0.0427646174) 0.2871219961 (0.0447975428)  0.033     
  Claustrum (mean (SD))            0.1157108693 (0.0257804133) 0.1290963689 (0.0427077348)  0.316     
  Putamen (mean (SD))              1.0552049804 (0.1037510009) 1.0163737585 (0.1648596697)  0.454     
  Caudate (mean (SD))              0.7197152028 (0.0745225273) 0.7087170058 (0.1341534632)  0.788     
  Globus.pallidum (mean (SD))      0.2799215892 (0.0302657494) 0.2810175045 (0.0465933809)  0.941     
  Internal.capsule (mean (SD))     0.9899260573 (0.1268862057) 0.9570727269 (0.1099341721)  0.454     
  Innominate.substance (mean (SD)) 0.2587625040 (0.0391948981) 0.2380611133 (0.0312707598)  0.119     
  Hypothalamus (mean (SD))         0.7337200336 (0.0472119392) 0.7247516451 (0.0502044289)  0.620     
  Thalamus (mean (SD))             1.3867798315 (0.0776479089) 1.2992021329 (0.1046820913)  0.016     

Table.Prosencephalon.relative.RSD <- as.data.frame(Table.Prosencephalon.relative)
Table.Prosencephalon.relative.RSD <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Prosencephalon.relative.RSD[-1,]),
                                                                       ' (',fixed=TRUE)))
Table.Prosencephalon.relative.RSD <- data.frame(cbind(str_replace_all(Table.Prosencephalon.relative.RSD$X1, "[ ]", ""),
                                                            str_replace_all(Table.Prosencephalon.relative.RSD$X2, "[)]", "")))
Table.Prosencephalon.relative.RSD$X1 <- as.character(Table.Prosencephalon.relative.RSD$X1)
Table.Prosencephalon.relative.RSD$X2 <- as.character(Table.Prosencephalon.relative.RSD$X2)
Table.Prosencephalon.relative.RSD <- as.data.frame(sapply(Table.Prosencephalon.relative.RSD, as.numeric))
Table.Prosencephalon.relative.RSD <- as.data.frame(Table.Prosencephalon.relative.RSD$X2/Table.Prosencephalon.relative.RSD$X1)
Table.Prosencephalon.relative.RSD <- round(Table.Prosencephalon.relative.RSD * 100, 1)


Table.Prosencephalon.relative.stratified.gender.RSD <- as.data.frame(Table.Prosencephalon.relative.stratified.gender)
Table.Prosencephalon.relative.stratified.gender.RSD <- select(Table.Prosencephalon.relative.stratified.gender.RSD, - c(p, test))

Table.Prosencephalon.relative.stratified.gender.RSD.female <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Prosencephalon.relative.stratified.gender.RSD[-1, "f"]),
                                                                       ' (',fixed=TRUE)))
Table.Prosencephalon.relative.stratified.gender.RSD.female <- data.frame(cbind(str_replace_all(Table.Prosencephalon.relative.stratified.gender.RSD.female$X1, "[ ]", ""),
                                                            str_replace_all(Table.Prosencephalon.relative.stratified.gender.RSD.female$X2, "[)]", "")))
Table.Prosencephalon.relative.stratified.gender.RSD.female$X1 <- as.character(Table.Prosencephalon.relative.stratified.gender.RSD.female$X1)
Table.Prosencephalon.relative.stratified.gender.RSD.female$X2 <- as.character(Table.Prosencephalon.relative.stratified.gender.RSD.female$X2)
Table.Prosencephalon.relative.stratified.gender.RSD.female <- as.data.frame(sapply(Table.Prosencephalon.relative.stratified.gender.RSD.female, as.numeric))
Table.Prosencephalon.relative.stratified.gender.RSD.female <- as.data.frame(Table.Prosencephalon.relative.stratified.gender.RSD.female$X2/Table.Prosencephalon.relative.stratified.gender.RSD.female$X1)
Table.Prosencephalon.relative.stratified.gender.RSD.female <- round(Table.Prosencephalon.relative.stratified.gender.RSD.female * 100, 1)

Table.Prosencephalon.relative.stratified.gender.RSD.male <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Prosencephalon.relative.stratified.gender.RSD[-1, "m"]),
                                                                       ' (',fixed=TRUE)))
Table.Prosencephalon.relative.stratified.gender.RSD.male <- data.frame(cbind(str_replace_all(Table.Prosencephalon.relative.stratified.gender.RSD.male$X1, "[ ]", ""),
                                                            str_replace_all(Table.Prosencephalon.relative.stratified.gender.RSD.male$X2, "[)]", "")))
Table.Prosencephalon.relative.stratified.gender.RSD.male$X1 <- as.character(Table.Prosencephalon.relative.stratified.gender.RSD.male$X1)
Table.Prosencephalon.relative.stratified.gender.RSD.male$X2 <- as.character(Table.Prosencephalon.relative.stratified.gender.RSD.male$X2)
Table.Prosencephalon.relative.stratified.gender.RSD.male <- as.data.frame(sapply(Table.Prosencephalon.relative.stratified.gender.RSD.male, as.numeric))
Table.Prosencephalon.relative.stratified.gender.RSD.male <- as.data.frame(Table.Prosencephalon.relative.stratified.gender.RSD.male$X2/Table.Prosencephalon.relative.stratified.gender.RSD.male$X1)
Table.Prosencephalon.relative.stratified.gender.RSD.male <- round(Table.Prosencephalon.relative.stratified.gender.RSD.male * 100, 1)

kable(Table.Prosencephalon.relative)

Overall
n 30
Frontal.pole (mean (SD)) 0.4308161280 (0.0735790922)
F1 (mean (SD)) 6.2797984283 (0.3863873818)
F2 (mean (SD)) 5.3376497465 (0.3212511986)
F3.orbital (mean (SD)) 0.3580350033 (0.0400757488)
F3.triangular (mean (SD)) 1.0712810271 (0.1454267486)
F3.opercular (mean (SD)) 1.2780793248 (0.1499873117)
Anterior.orbital (mean (SD)) 0.3058239406 (0.0373903676)
Medial.orbital (mean (SD)) 0.6908155982 (0.0847676556)
Lateral.orbital (mean (SD)) 0.5536005086 (0.0684027573)
Posterior.orbital (mean (SD)) 0.6775656621 (0.0832782152)
Rectus (mean (SD)) 0.9134375442 (0.4012168421)
Rostral (mean (SD)) 0.3293498153 (0.0250770666)
Precentral (mean (SD)) 3.5870207286 (0.3013356393)
Postcentral (mean (SD)) 2.0375742862 (0.1796109149)
Paracentral.lobule (mean (SD)) 1.2872489540 (0.1404521846)
Subcentral (mean (SD)) 0.5533885997 (0.0701240033)
SPL (mean (SD)) 3.0512299837 (0.2995764614)
SMG (mean (SD)) 2.8054702345 (0.2963151197)
ANG (mean (SD)) 3.1401508432 (0.2974069556)
Precuneus (mean (SD)) 2.8184789289 (0.2195354334)
Cuneus (mean (SD)) 0.9218075932 (0.1105395289)
O1 (mean (SD)) 0.8363347713 (0.0794530354)
O2 (mean (SD)) 1.4412036853 (0.1395067116)
O3 (mean (SD)) 0.8459452532 (0.1135967778)
Occipital.pole (mean (SD)) 1.0401371468 (0.0957630116)
Lingual (mean (SD)) 1.8611729124 (0.2307977883)
Fusiform (mean (SD)) 2.0313915705 (0.2297491283)
Temporal.pole (mean (SD)) 2.3163307043 (0.1969989384)
T1 (mean (SD)) 2.4899711225 (0.2314929390)
T2 (mean (SD)) 2.1710340083 (0.2222231589)
T3 (mean (SD)) 0.4573538448 (0.0569894934)
Planum.temporale (mean (SD)) 0.2805395089 (0.0570436553)
Planum.polare (mean (SD)) 0.9110250954 (0.1711155137)
Short.insular (mean (SD)) 1.4149000524 (0.1765065390)
Long.insular (mean (SD)) 0.8324538909 (0.1196168331)
SCA (mean (SD)) 0.2170797247 (0.0471724812)
Cingulate.anterior (mean (SD)) 1.3176948779 (0.1348973794)
Cingulate.middle (mean (SD)) 1.5637867547 (0.1479091119)
Cingulate.posterior (mean (SD)) 1.8413310529 (0.1454271384)
PHG (mean (SD)) 0.9563118242 (0.1171393527)
Hippocampus (mean (SD)) 0.7446874971 (0.0621830878)
Amygdala (mean (SD)) 0.2864526632 (0.0401036938)
Corpus.callosum (mean (SD)) 0.3039193139 (0.0468123806)
Claustrum (mean (SD)) 0.1228498024 (0.0358816349)
Putamen (mean (SD)) 1.0344949954 (0.1388220008)
Caudate (mean (SD)) 0.7138494977 (0.1087637962)
Globus.pallidum (mean (SD)) 0.2805060774 (0.0391642507)
Internal.capsule (mean (SD)) 0.9724042811 (0.1172447094)
Innominate.substance (mean (SD)) 0.2477217623 (0.0361218477)
Hypothalamus (mean (SD)) 0.7289368930 (0.0482037353)
Thalamus (mean (SD)) 1.3400717256 (0.1017134094)

kable(Table.Prosencephalon.relative.RSD)

Table.Prosencephalon.relative.RSDX2/Table.Prosencephalon.relative.RSDX1
17.1
6.2
6.0
11.2
13.6
11.7
12.2
12.3
12.4
12.3
43.9
7.6
8.4
8.8
10.9
12.7
9.8
10.6
9.5
7.8
12.0
9.5
9.7
13.4
9.2
12.4
11.3
8.5
9.3
10.2
12.5
20.3
18.8
12.5
14.4
21.7
10.2
9.5
7.9
12.2
8.4
14.0
15.4
29.2
13.4
15.2
14.0
12.1
14.6
6.6
7.6

kable(Table.Prosencephalon.relative.stratified.gender)

f m p test
n 14 16
Frontal.pole (mean (SD)) 0.4282337280 (0.0713377035) 0.4330757280 (0.0777473097) 0.861
F1 (mean (SD)) 6.3006329062 (0.3639376668) 6.2615682601 (0.4160375339) 0.788
F2 (mean (SD)) 5.3883848936 (0.3077446428) 5.2932564928 (0.3360665361) 0.428
F3.orbital (mean (SD)) 0.3571578969 (0.0385677622) 0.3588024714 (0.0425977851) 0.913
F3.triangular (mean (SD)) 1.0636322212 (0.1197364194) 1.0779737323 (0.1684052590) 0.793
F3.opercular (mean (SD)) 1.2495682579 (0.1574229154) 1.3030265083 (0.1435004821) 0.339
Anterior.orbital (mean (SD)) 0.3017582832 (0.0164770413) 0.3093813908 (0.0493827496) 0.586
Medial.orbital (mean (SD)) 0.6815918090 (0.0371181605) 0.6988864137 (0.1120228996) 0.586
Lateral.orbital (mean (SD)) 0.5464232617 (0.0304519052) 0.5598805996 (0.0902891005) 0.600
Posterior.orbital (mean (SD)) 0.6691168234 (0.0367863500) 0.6849583960 (0.1100474777) 0.612
Rectus (mean (SD)) 0.8532393638 (0.0662940918) 0.9661109520 (0.5486963089) 0.452
Rostral (mean (SD)) 0.3339400566 (0.0264801278) 0.3253333540 (0.0239001532) 0.357
Precentral (mean (SD)) 3.6104693496 (0.2468897213) 3.5665031852 (0.3489460002) 0.697
Postcentral (mean (SD)) 2.0354425348 (0.1884559911) 2.0394395687 (0.1777112761) 0.953
Paracentral.lobule (mean (SD)) 1.3045162856 (0.1438324556) 1.2721400388 (0.1403115272) 0.538
Subcentral (mean (SD)) 0.5355965755 (0.0569946874) 0.5689566208 (0.0783433358) 0.199
SPL (mean (SD)) 3.0950976636 (0.2771645426) 3.0128457637 (0.3218134493) 0.463
SMG (mean (SD)) 2.7870612121 (0.2560750682) 2.8215781290 (0.3351530207) 0.756
ANG (mean (SD)) 3.1074492113 (0.3335758333) 3.1687647712 (0.2696241186) 0.582
Precuneus (mean (SD)) 2.7769055892 (0.2074598065) 2.8548556011 (0.2298977990) 0.341
Cuneus (mean (SD)) 0.9162725007 (0.1085944316) 0.9266507992 (0.1155395028) 0.803
O1 (mean (SD)) 0.8107747580 (0.0725777711) 0.8586997830 (0.0805991452) 0.100
O2 (mean (SD)) 1.4338278528 (0.1550060300) 1.4476575387 (0.1292605063) 0.792
O3 (mean (SD)) 0.8091809468 (0.1170210398) 0.8781140214 (0.1035122305) 0.098
Occipital.pole (mean (SD)) 1.0453411723 (0.1129383712) 1.0355836245 (0.0814121997) 0.786
Lingual (mean (SD)) 1.9260643720 (0.2287149262) 1.8043928852 (0.2242302480) 0.153
Fusiform (mean (SD)) 2.0431163714 (0.2142611581) 2.0211323697 (0.2490441211) 0.799
Temporal.pole (mean (SD)) 2.2887424248 (0.1717974683) 2.3404704489 (0.2193601055) 0.483
T1 (mean (SD)) 2.4388032912 (0.1640313381) 2.5347429750 (0.2751451068) 0.265
T2 (mean (SD)) 2.2309720524 (0.1865495819) 2.1185882198 (0.2429535202) 0.171
T3 (mean (SD)) 0.4422376645 (0.0597357531) 0.4705805025 (0.0527885654) 0.179
Planum.temporale (mean (SD)) 0.2652397597 (0.0370145950) 0.2939267894 (0.0685126147) 0.174
Planum.polare (mean (SD)) 0.9612340750 (0.1660219988) 0.8670922381 (0.1682532577) 0.135
Short.insular (mean (SD)) 1.4338625682 (0.1204101258) 1.3983078510 (0.2168811526) 0.591
Long.insular (mean (SD)) 0.7888303012 (0.0888448680) 0.8706245319 (0.1322545191) 0.060
SCA (mean (SD)) 0.2044625144 (0.0441130883) 0.2281197836 (0.0483429862) 0.175
Cingulate.anterior (mean (SD)) 1.3135641868 (0.1439613708) 1.3213092326 (0.1311107677) 0.879
Cingulate.middle (mean (SD)) 1.5619775543 (0.1253223665) 1.5653698051 (0.1693469993) 0.951
Cingulate.posterior (mean (SD)) 1.8380656367 (0.1343469675) 1.8441882921 (0.1588299348) 0.911
PHG (mean (SD)) 0.9762747018 (0.0728687435) 0.9388443063 (0.1457024489) 0.392
Hippocampus (mean (SD)) 0.7655342036 (0.0635206138) 0.7264466289 (0.0567298899) 0.086
Amygdala (mean (SD)) 0.2948215970 (0.0466054982) 0.2791298460 (0.0332319267) 0.293
Corpus.callosum (mean (SD)) 0.3231162484 (0.0427646174) 0.2871219961 (0.0447975428) 0.033
Claustrum (mean (SD)) 0.1157108693 (0.0257804133) 0.1290963689 (0.0427077348) 0.316
Putamen (mean (SD)) 1.0552049804 (0.1037510009) 1.0163737585 (0.1648596697) 0.454
Caudate (mean (SD)) 0.7197152028 (0.0745225273) 0.7087170058 (0.1341534632) 0.788
Globus.pallidum (mean (SD)) 0.2799215892 (0.0302657494) 0.2810175045 (0.0465933809) 0.941
Internal.capsule (mean (SD)) 0.9899260573 (0.1268862057) 0.9570727269 (0.1099341721) 0.454
Innominate.substance (mean (SD)) 0.2587625040 (0.0391948981) 0.2380611133 (0.0312707598) 0.119
Hypothalamus (mean (SD)) 0.7337200336 (0.0472119392) 0.7247516451 (0.0502044289) 0.620
Thalamus (mean (SD)) 1.3867798315 (0.0776479089) 1.2992021329 (0.1046820913) 0.016

kable(Table.Prosencephalon.relative.stratified.gender.RSD.female)

Table.Prosencephalon.relative.stratified.gender.RSD.femaleX2/Table.Prosencephalon.relative.stratified.gender.RSD.femaleX1
16.7
5.8
5.7
10.8
11.3
12.6
5.5
5.4
5.6
5.5
7.8
7.9
6.8
9.3
11.0
10.6
9.0
9.2
10.7
7.5
11.9
9.0
10.8
14.5
10.8
11.9
10.5
7.5
6.7
8.4
13.5
14.0
17.3
8.4
11.3
21.6
11.0
8.0
7.3
7.5
8.3
15.8
13.2
22.3
9.8
10.4
10.8
12.8
15.1
6.4
5.6

kable(Table.Prosencephalon.relative.stratified.gender.RSD.male)

Table.Prosencephalon.relative.stratified.gender.RSD.maleX2/Table.Prosencephalon.relative.stratified.gender.RSD.maleX1
18.0
6.6
6.3
11.9
15.6
11.0
16.0
16.0
16.1
16.1
56.8
7.3
9.8
8.7
11.0
13.8
10.7
11.9
8.5
8.1
12.5
9.4
8.9
11.8
7.9
12.4
12.3
9.4
10.9
11.5
11.2
23.3
19.4
15.5
15.2
21.2
9.9
10.8
8.6
15.5
7.8
11.9
15.6
33.1
16.2
18.9
16.6
11.5
13.1
6.9
8.1

NA

Prosencephalon.relative1 <- select(Prosencephalon.relative1, - c(Age))

names.anatomical.structures.temporary <- c("Frontal.pole",
  "F1",
  "F2",
  "F3.orbital", 
  "F3.triangular", 
  "F3.opercular", 
  "Anterior.orbital", 
  "Medial.orbital", 
  "Lateral.orbital", 
  "Posterior.orbital",
  "Rectus", 
  "Rostral", 
  "Precentral", 
  "Postcentral", 
  "Paracentral.lobule", 
  "Subcentral", 
  "SPL", 
  "SMG", 
  "ANG", 
  "Precuneus",
  "Cuneus", 
  "O1",
  "O2", 
  "O3", 
  "Occipital.pole", 
  "Lingual", 
  "Fusiform", 
  "Temporal.pole", 
  "T1",
  "T2", 
  "T3", 
  "Planum.temporale", 
  "Planum.polare", 
  "Short.insular", 
  "Long.insular", 
  "SCA", 
  "Cingulate.anterior", 
  "Cingulate.middle", 
  "Cingulate.posterior", 
  "PHG")

names.anatomical.structures.definitive <- c("Frontal pole",
  "F1",
  "F2",
  "F3 orbital", 
  "F3 triangular", 
  "F3 opercular", 
  "Anterior orbital", 
  "Medial orbital", 
  "Lateral orbital", 
  "Posterior orbital",
  "Rectus", 
  "Rostral", 
  "Precentral", 
  "Postcentral", 
  "Paracentral lobule", 
  "Subcentral", 
  "SPL", 
  "SMG", 
  "ANG", 
  "Precuneus",
  "Cuneus", 
  "O1",
  "O2", 
  "O3", 
  "Occipital pole", 
  "Lingual", 
  "Fusiform", 
  "Temporal pole", 
  "T1",
  "T2", 
  "T3", 
  "Planum temporale", 
  "Planum polare", 
  "Short insular", 
  "Long insular", 
  "SCA", 
  "Cingulate anterior", 
  "Cingulate middle", 
  "Cingulate posterior", 
  "PHG")

Prosencephalon.relative.plotdata1 <- gather(Prosencephalon.relative1, "anatomical.structure", "relative.volume")
Prosencephalon.relative.plotdata1$Gender <- All.Volumes$Gender
Prosencephalon.relative.plotdata1$Age <- All.Volumes$`Age (years)`

Prosencephalon.relative.plotdata1$Gender <- factor(Prosencephalon.relative.plotdata1$Gender, levels = c("f", "m"), c("f", "m"))
Prosencephalon.relative.plotdata1$anatomical.structure <- factor(Prosencephalon.relative.plotdata1$anatomical.structure, 
                                                                levels = rev(c(names.anatomical.structures.temporary)), rev(c(names.anatomical.structures.definitive)))

Prosencephalon.relative.plot1 <-  ggplot(Prosencephalon.relative.plotdata1, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Relative volume (in %)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("CEREBRAL GYRI") +
  theme(plot.title = element_text(hjust = 0.5))

Prosencephalon.relative.plot1
ggsave("Prosencephalon.relative.plot1.pdf", plot = Prosencephalon.relative.plot1, width = 14, height = 12, units = "in", dpi = 600)


names.anatomical.structures.temporary <- c(
  "Corpus.callosum", 
  "Claustrum", 
  "Putamen", 
  "Caudate", 
  "Globus.pallidum", 
  "Internal.capsule",
  "Innominate.substance", 
  "Hypothalamus",
  "Thalamus", 
  "Hippocampus", 
  "Amygdala")

names.anatomical.structures.definitive <- c(
  "Corpus callosum", 
  "Claustrum", 
  "Putamen", 
  "Caudate", 
  "Globus pallidum", 
  "Internal capsule",
  "Innominate substance", 
  "Hypothalamus",
  "Thalamus",
  "Hippocampus", 
  "Amygdala")

Prosencephalon.relative.plotdata2 <- gather(Prosencephalon.relative2, "anatomical.structure", "relative.volume")
Prosencephalon.relative.plotdata2$Gender <- All.Volumes$Gender
Prosencephalon.relative.plotdata2$Age <- All.Volumes$`Age (years)`

Prosencephalon.relative.plotdata2$Gender <- factor(Prosencephalon.relative.plotdata2$Gender, levels = c("f", "m"), c("f", "m"))
Prosencephalon.relative.plotdata2$anatomical.structure <- factor(Prosencephalon.relative.plotdata2$anatomical.structure, 
                                                                levels = rev(c(names.anatomical.structures.temporary)), rev(c(names.anatomical.structures.definitive)))

Prosencephalon.relative.plot2 <-  ggplot(Prosencephalon.relative.plotdata2, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Relative volume (in %)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("CENTRAL PROSENCEPHALON") +
  theme(plot.title = element_text(hjust = 0.5))

Prosencephalon.relative.plot2
ggsave("Prosencephalon.relative.plot2.pdf", plot = Prosencephalon.relative.plot2, width = 10, height = 6, units = "in", dpi = 600)


#Prosencephalon.relative$Gender <- All.Volumes$Gender
Prosencephalon.relative$Age <- All.Volumes$`Age (years)`

Relative.Frontal.pole.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Frontal.pole, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.57, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME frontal pole") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Frontal.pole.Age.plot
ggsave("Relative.Frontal.pole.Age.plot.pdf", plot = Relative.Frontal.pole.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.F1.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=F1, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 6.6, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME F1") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.F1.Age.plot
ggsave("Relative.F1.Age.plot.pdf", plot = Relative.F1.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.F2.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=F2, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 5.95, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME F2") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.F2.Age.plot
ggsave("Relative.F2.Age.plot.pdf", plot = Relative.F2.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.F3.orbital.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=F3.orbital, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.41, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME F3 orbital") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.F3.orbital.Age.plot
ggsave("Relative.F3.orbital.Age.plot.pdf", plot = Relative.F3.orbital.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.F3.triangular.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=F3.triangular, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.22, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME F3 triangular") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.F3.triangular.Age.plot
ggsave("Relative.F3.triangular.Age.plot.pdf", plot = Relative.F3.triangular.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.F3.opercular.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=F3.opercular, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.65, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME F3 opercular") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.F3.opercular.Age.plot
ggsave("Relative.F3.opercular.Age.plot.pdf", plot = Relative.F3.opercular.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Anterior.orbital.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Anterior.orbital, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.385, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME anterior orbital") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Anterior.orbital.Age.plot
ggsave("Relative.Anterior.orbital.Age.plot.pdf", plot = Relative.Anterior.orbital.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Medial.orbital.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Medial.orbital, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.87, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME medial orbital") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Medial.orbital.Age.plot
ggsave("Relative.Medial.orbital.Age.plot.pdf", plot = Relative.Medial.orbital.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Lateral.orbital.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Lateral.orbital, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.67, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME lateral orbital") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Lateral.orbital.Age.plot
ggsave("Relative.Lateral.orbital.Age.plot.pdf", plot = Relative.Lateral.orbital.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Posterior.orbital.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Posterior.orbital, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.82, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME posterior orbital") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Posterior.orbital.Age.plot
ggsave("Relative.Posterior.orbital.Age.plot.pdf", plot = Relative.Posterior.orbital.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Rectus.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Rectus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.8, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME rectus") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Rectus.Age.plot
ggsave("Relative.Rectus.Age.plot.pdf", plot = Relative.Rectus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Rostral.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Rostral, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.41, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME rostral") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Rostral.Age.plot
ggsave("Relative.Rostral.Age.plot.pdf", plot = Relative.Rostral.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Precentral.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Precentral, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 4.6, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME precentral") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Precentral.Age.plot
ggsave("Relative.Precentral.Age.plot.pdf", plot = Relative.Precentral.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Postcentral.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Postcentral, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2.45, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME postcentral") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Postcentral.Age.plot
ggsave("Relative.Postcentral.Age.plot.pdf", plot = Relative.Postcentral.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Paracentral.lobule.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Paracentral.lobule, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.62, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME paracentral lobule") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Paracentral.lobule.Age.plot
ggsave("Relative.Paracentral.lobule.Age.plot.pdf", plot = Relative.Paracentral.lobule.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Subcentral.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Subcentral, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.66, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME subcentral") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Subcentral.Age.plot
ggsave("Relative.Subcentral.Age.plot.pdf", plot = Relative.Subcentral.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.SPL.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=SPL, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 3.5, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME SPL") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.SPL.Age.plot
ggsave("Relative.SPL.Age.plot.pdf", plot = Relative.SPL.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.SMG.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=SMG, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 3.3, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME supramarginal") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.SMG.Age.plot
ggsave("Relative.SMG.Age.plot.pdf", plot = Relative.SMG.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.ANG.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=ANG, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 3.4, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME angular") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.ANG.Age.plot
ggsave("Relative.ANG.Age.plot.pdf", plot = Relative.ANG.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Precuneus.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Precuneus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 3.05, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME precuneus") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Precuneus.Age.plot
ggsave("Relative.Precuneus.Age.plot.pdf", plot = Relative.Precuneus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Cuneus.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Cuneus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.07, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME cuneus") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Cuneus.Age.plot
ggsave("Relative.Cuneus.Age.plot.pdf", plot = Relative.Cuneus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.O1.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=O1, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.97, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME O1") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.O1.Age.plot
ggsave("Relative.O1.Age.plot.pdf", plot = Relative.O1.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.O2.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=O2, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.62, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME O2") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.O2.Age.plot
ggsave("Relative.O2.Age.plot.pdf", plot = Relative.O2.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.O3.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=O3, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.02, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME O3") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.O3.Age.plot
ggsave("Relative.O3.Age.plot.pdf", plot = Relative.O3.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Occipital.pole.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Occipital.pole, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.17, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME occipital pole") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Occipital.pole.Age.plot
ggsave("Relative.Occipital.pole.Age.plot.pdf", plot = Relative.Occipital.pole.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Lingual.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Lingual, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2.3, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME lingual") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Lingual.Age.plot
ggsave("Relative.Lingual.Age.plot.pdf", plot = Relative.Lingual.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Fusiform.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Fusiform, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2.28, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME fusiform") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Fusiform.Age.plot
ggsave("Relative.Fusiform.Age.plot.pdf", plot = Relative.Fusiform.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Temporal.pole.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Temporal.pole, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2.7, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME temporal pole") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Temporal.pole.Age.plot
ggsave("Relative.Temporal.pole.Age.plot.pdf", plot = Relative.Temporal.pole.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.T1.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=T1, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2.75, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME T1") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.T1.Age.plot
ggsave("Relative.T1.Age.plot.pdf", plot = Relative.T1.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.T2.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=T2, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2.43, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME T2") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.T2.Age.plot
ggsave("Relative.T2.Age.plot.pdf", plot = Relative.T2.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.T3.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=T3, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.51, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME T3") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.T3.Age.plot
ggsave("Relative.T3.Age.plot.pdf", plot = Relative.T3.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Planum.temporale.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Planum.temporale, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.335, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME planum temporale") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Planum.temporale.Age.plot
ggsave("Relative.Planum.temporale.Age.plot.pdf", plot = Relative.Planum.temporale.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Planum.polare.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Planum.polare, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.18, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME planum polare") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Planum.polare.Age.plot
ggsave("Relative.Planum.polare.Age.plot.pdf", plot = Relative.Planum.polare.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Short.insular.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Short.insular, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.85, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME short insular") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Short.insular.Age.plot
ggsave("Relative.Short.insular.Age.plot.pdf", plot = Relative.Short.insular.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Long.insular.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Long.insular, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.97, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME long insular") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Long.insular.Age.plot
ggsave("Relative.Long.insular.Age.plot.pdf", plot = Relative.Long.insular.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.SCA.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=SCA, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.33, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME subcallosal area") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.SCA.Age.plot
ggsave("Relative.SCA.Age.plot.pdf", plot = Relative.SCA.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Cingulate.anterior.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Cingulate.anterior, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.57, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME cingulate anterior") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Cingulate.anterior.Age.plot
ggsave("Relative.Cingulate.anterior.Age.plot.pdf", plot = Relative.Cingulate.anterior.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Cingulate.middle.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Cingulate.middle, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.75, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME cingulate middle") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Cingulate.middle.Age.plot
ggsave("Relative.Cingulate.middle.Age.plot.pdf", plot = Relative.Cingulate.middle.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Cingulate.posterior.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Cingulate.posterior, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2.05, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME cingulate posterior") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Cingulate.posterior.Age.plot
ggsave("Relative.Cingulate.posterior.Age.plot.pdf", plot = Relative.Cingulate.posterior.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.PHG.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=PHG, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.15, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME PHG") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.PHG.Age.plot
ggsave("Relative.PHG.Age.plot.pdf", plot = Relative.PHG.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Hippocampus.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Hippocampus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.77, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME hippocampus") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Hippocampus.Age.plot
ggsave("Relative.Hippocampus.Age.plot.pdf", plot = Relative.Hippocampus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Amygdala.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Amygdala, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.335, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME amygdala") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Amygdala.Age.plot
ggsave("Relative.Amygdala.Age.plot.pdf", plot = Relative.Amygdala.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Corpus.callosum.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Corpus.callosum, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.36, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME corpus callosum") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Corpus.callosum.Age.plot
ggsave("Relative.Corpus.callosum.Age.plot.pdf", plot = Relative.Corpus.callosum.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Claustrum.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Claustrum, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.18, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME claustrum") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Claustrum.Age.plot
ggsave("Relative.Claustrum.Age.plot.pdf", plot = Relative.Claustrum.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Putamen.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Putamen, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.15, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME putamen") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Putamen.Age.plot
ggsave("Relative.Putamen.Age.plot.pdf", plot = Relative.Putamen.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Caudate.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Caudate, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.87, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME caudate") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Caudate.Age.plot
ggsave("Relative.Caudate.Age.plot.pdf", plot = Relative.Caudate.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Globus.pallidum.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Globus.pallidum, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.335, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME globus pallidum") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Globus.pallidum.Age.plot
ggsave("Relative.Globus.pallidum.Age.plot.pdf", plot = Relative.Globus.pallidum.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Internal.capsule.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Internal.capsule, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.125, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME internal capsule") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Internal.capsule.Age.plot
ggsave("Relative.Internal.capsule.Age.plot.pdf", plot = Relative.Internal.capsule.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Innominate.substance.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Innominate.substance, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.31, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME innominate substance") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Innominate.substance.Age.plot
ggsave("Relative.Innominate.substance.Age.plot.pdf", plot = Relative.Innominate.substance.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Hypothalamus.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Hypothalamus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.78, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME hypothalamus") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Hypothalamus.Age.plot
ggsave("Relative.Hypothalamus.Age.plot.pdf", plot = Relative.Hypothalamus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Thalamus.Age.plot <-  ggplot(Prosencephalon.relative, aes(y=Thalamus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.47, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME thalamus") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Thalamus.Age.plot
ggsave("Relative.Thalamus.Age.plot.pdf", plot = Relative.Thalamus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)

Brainstem and Cerebellum

Absolute Volumes


Mesencephalon <- All.Volumes$Mesencephalon
Pons <- All.Volumes$Pons
Medulla.oblongata <- All.Volumes$`Medulla oblongata`
  
Cerebellar.peduncles <- All.Volumes$`Total volume cerebellar peduncles`

Vermis <- All.Volumes$`Total volume vermis`
Hemisphere <- All.Volumes$`Total volume cerebellar hemisphere`

Anterior.lobe <- (All.Volumes$Central+All.Volumes$Culmen+All.Volumes$`Total volume ala lobuli centralis`+All.Volumes$`Total volume AQL`)
Medial.lobe <- (All.Volumes$Declive+All.Volumes$Folium+All.Volumes$`Total volume PQL`+All.Volumes$`Total volume SSL`)
Posterior.lobe <- (All.Volumes$Tuber+All.Volumes$Pyramid+All.Volumes$Uvula+All.Volumes$`Total volume inferior semilunar /gracile`+All.Volumes$`Total volume biventer`+All.Volumes$`Total volume tonsilla`)
Flocculonodular.lobe <- (All.Volumes$Nodule+All.Volumes$`Total volume flocculus`) 

Central <- All.Volumes$Central
Culmen <- All.Volumes$Culmen
Declive <- All.Volumes$Declive
Folium <- All.Volumes$Folium
Tuber <- All.Volumes$Tuber
Pyramid <- All.Volumes$Pyramid
Uvula <- All.Volumes$Uvula
Nodule <- All.Volumes$Nodule

Ala.lobuli.centralis <- All.Volumes$`Total volume ala lobuli centralis`
AQL <- All.Volumes$`Total volume AQL`
PQL <- All.Volumes$`Total volume PQL`
SSL <-  All.Volumes$`Total volume SSL`
ISL.gracile <- All.Volumes$`Total volume inferior semilunar /gracile`
Biventer <- All.Volumes$`Total volume biventer`
Tonsilla <- All.Volumes$`Total volume tonsilla`
Flocculus <- All.Volumes$`Total volume flocculus`

Brainstem.Cerebellum.absolute <- as.data.frame(cbind(
Mesencephalon,
Pons,
Medulla.oblongata, 
Cerebellar.peduncles, 
Vermis, 
Hemisphere, 
Anterior.lobe, 
Medial.lobe, 
Posterior.lobe, 
Flocculonodular.lobe, 
Central, 
Culmen, 
Declive, 
Folium, 
Tuber,
Pyramid, 
Uvula, 
Nodule,
Ala.lobuli.centralis,
AQL,
PQL,
SSL,
ISL.gracile, 
Biventer,
Tonsilla, 
Flocculus 
))

Brainstem.Cerebellum.absolute$Gender <- All.Volumes$Gender

Table.Brainstem.Cerebellum.absolute <- CreateTableOne(
  vars = c("Mesencephalon",
"Pons",
"Medulla.oblongata", 
"Cerebellar.peduncles", 
"Vermis", 
"Hemisphere", 
"Anterior.lobe", 
"Medial.lobe", 
"Posterior.lobe", 
"Flocculonodular.lobe", 
"Central", 
"Culmen", 
"Declive", 
"Folium", 
"Tuber",
"Pyramid", 
"Uvula", 
"Nodule",
"Ala.lobuli.centralis",
"AQL",
"PQL",
"SSL",
"ISL.gracile", 
"Biventer",
"Tonsilla", 
"Flocculus"),
  data = Brainstem.Cerebellum.absolute)

Table.Brainstem.Cerebellum.absolute.stratified.gender <- CreateTableOne(
  vars = c("Mesencephalon",
"Pons",
"Medulla.oblongata", 
"Cerebellar.peduncles", 
"Vermis", 
"Hemisphere", 
"Anterior.lobe", 
"Medial.lobe", 
"Posterior.lobe", 
"Flocculonodular.lobe", 
"Central", 
"Culmen", 
"Declive", 
"Folium", 
"Tuber",
"Pyramid", 
"Uvula", 
"Nodule",
"Ala.lobuli.centralis",
"AQL",
"PQL",
"SSL",
"ISL.gracile", 
"Biventer",
"Tonsilla", 
"Flocculus"), 
strata = c("Gender"),
data = Brainstem.Cerebellum.absolute)

Table.Brainstem.Cerebellum.absolute <- print(Table.Brainstem.Cerebellum.absolute, contDigits = 10)
                                  
                                   Overall                             
  n                                               30                   
  Mesencephalon (mean (SD))         10045.5666666667 (1460.5845472071) 
  Pons (mean (SD))                  15286.1333333333 (2216.2026505953) 
  Medulla.oblongata (mean (SD))      2740.8333333333 (367.7611746898)  
  Cerebellar.peduncles (mean (SD))   6780.7000000000 (962.4036413925)  
  Vermis (mean (SD))                 5946.8333333333 (804.8236938367)  
  Hemisphere (mean (SD))           110786.1333333333 (12111.5249865098)
  Anterior.lobe (mean (SD))         32232.8666666667 (4775.6684076923) 
  Medial.lobe (mean (SD))           28791.7000000000 (4414.8219407996) 
  Posterior.lobe (mean (SD))        54644.6666666667 (7773.0127844438) 
  Flocculonodular.lobe (mean (SD))   1063.7000000000 (150.3644193973)  
  Central (mean (SD))                 481.9666666667 (125.1868901733)  
  Culmen (mean (SD))                 2183.6000000000 (359.9041634888)  
  Declive (mean (SD))                1030.5333333333 (188.4987392866)  
  Folium (mean (SD))                  440.1000000000 (120.4701565563)  
  Tuber (mean (SD))                   387.0333333333 (97.0319831145)   
  Pyramid (mean (SD))                 426.6333333333 (201.7137752521)  
  Uvula (mean (SD))                   784.6666666667 (129.0771844294)  
  Nodule (mean (SD))                  212.5000000000 (35.1290723495)   
  Ala.lobuli.centralis (mean (SD))  11993.7666666667 (2880.0725647388) 
  AQL (mean (SD))                   17573.5333333333 (3822.1072607455) 
  PQL (mean (SD))                   13124.4333333333 (2598.2643767070) 
  SSL (mean (SD))                   14196.6333333333 (2513.7768875200) 
  ISL.gracile (mean (SD))           34930.4333333333 (6197.6310695872) 
  Biventer (mean (SD))              12163.3000000000 (3786.6815073268) 
  Tonsilla (mean (SD))               5952.6000000000 (1337.6721571446) 
  Flocculus (mean (SD))               851.2000000000 (139.2406500297)  
Table.Brainstem.Cerebellum.absolute.stratified.gender <- print(Table.Brainstem.Cerebellum.absolute.stratified.gender, contDigits = 10)
                                  Stratified by Gender
                                   f                                    m                                    p      test
  n                                               14                                   16                               
  Mesencephalon (mean (SD))          9763.7857142857 (1207.3040645983)   10292.1250000000 (1649.9104167601)   0.332     
  Pons (mean (SD))                  14388.7142857143 (2400.8001688082)   16071.3750000000 (1758.1127713166)   0.036     
  Medulla.oblongata (mean (SD))      2654.9285714286 (273.5303285914)     2816.0000000000 (428.6288215539)    0.238     
  Cerebellar.peduncles (mean (SD))   6442.8571428571 (696.4864411009)     7076.3125000000 (1081.9140889337)   0.071     
  Vermis (mean (SD))                 5729.2857142857 (698.0237408979)     6137.1875000000 (864.4103361059)    0.170     
  Hemisphere (mean (SD))           105887.2142857143 (12510.9148234564) 115072.6875000000 (10293.0357214235)  0.036     
  Anterior.lobe (mean (SD))         30952.2142857143 (5066.7219440425)   33353.4375000000 (4355.9895617988)   0.174     
  Medial.lobe (mean (SD))           28501.7142857143 (4694.7263282010)   29045.4375000000 (4293.3716660103)   0.743     
  Posterior.lobe (mean (SD))        51123.5000000000 (7944.6905807009)   57725.6875000000 (6357.0069447684)   0.017     
  Flocculonodular.lobe (mean (SD))   1039.6428571429 (171.7814385705)     1084.7500000000 (130.8604855052)    0.422     
  Central (mean (SD))                 494.1428571429 (138.8357397696)      471.3125000000 (115.4727781774)    0.627     
  Culmen (mean (SD))                 2090.3571428571 (300.4288235539)     2265.1875000000 (396.2178220373)    0.189     
  Declive (mean (SD))                1009.5000000000 (222.2752105629)     1048.9375000000 (158.4354626759)    0.577     
  Folium (mean (SD))                  429.9285714286 (104.0461911370)      449.0000000000 (135.9975489975)    0.673     
  Tuber (mean (SD))                   359.0714285714 (74.5442194898)       411.5000000000 (109.6290715702)    0.143     
  Pyramid (mean (SD))                 368.1428571429 (137.8856031660)      477.8125000000 (237.0651721222)    0.140     
  Uvula (mean (SD))                   768.3571428571 (121.3416075148)      798.9375000000 (137.7860509389)    0.527     
  Nodule (mean (SD))                  210.4285714286 (32.6937168410)       214.3125000000 (38.1046257034)     0.768     
  Ala.lobuli.centralis (mean (SD))  11410.7857142857 (3163.7587717672)   12503.8750000000 (2601.3639210999)   0.308     
  AQL (mean (SD))                   16956.9285714286 (3679.3877096037)   18113.0625000000 (3980.5670026392)   0.418     
  PQL (mean (SD))                   12835.1428571429 (3258.6597022311)   13377.5625000000 (1924.1673513064)   0.577     
  SSL (mean (SD))                   14227.1428571429 (2163.5692325821)   14169.9375000000 (2856.2831901792)   0.952     
  ISL.gracile (mean (SD))           33388.7857142857 (6276.2341866707)   36279.3750000000 (5996.8659134029)   0.208     
  Biventer (mean (SD))              10529.6428571429 (3581.7178217924)   13592.7500000000 (3454.4626113671)   0.024     
  Tonsilla (mean (SD))               5709.5000000000 (1079.5718346427)    6165.3125000000 (1531.6471620992)   0.361     
  Flocculus (mean (SD))               829.2142857143 (158.8619035376)      870.4375000000 (121.5126708071)    0.428     
write.csv(Table.Brainstem.Cerebellum.absolute, "Table.Brainstem.Cerebellum.absolute.csv")
write.csv(Table.Brainstem.Cerebellum.absolute.stratified.gender, "Table.Brainstem.Cerebellum.absolute.stratified.gender.csv")

Table.Brainstem.Cerebellum.absolute.RSD <- as.data.frame(Table.Brainstem.Cerebellum.absolute)
Table.Brainstem.Cerebellum.absolute.RSD <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Brainstem.Cerebellum.absolute.RSD[-1,]),' (',fixed=TRUE)))
Table.Brainstem.Cerebellum.absolute.RSD <- data.frame(cbind(str_replace_all(Table.Brainstem.Cerebellum.absolute.RSD$X1, "[ ]", ""),
                                                            str_replace_all(Table.Brainstem.Cerebellum.absolute.RSD$X2, "[)]", "")))
Table.Brainstem.Cerebellum.absolute.RSD$X1 <- as.character(Table.Brainstem.Cerebellum.absolute.RSD$X1)
Table.Brainstem.Cerebellum.absolute.RSD$X2 <- as.character(Table.Brainstem.Cerebellum.absolute.RSD$X2)
Table.Brainstem.Cerebellum.absolute.RSD <- as.data.frame(sapply(Table.Brainstem.Cerebellum.absolute.RSD, as.numeric))
Table.Brainstem.Cerebellum.absolute.RSD <- as.data.frame(Table.Brainstem.Cerebellum.absolute.RSD$X2/Table.Brainstem.Cerebellum.absolute.RSD$X1)
Table.Brainstem.Cerebellum.absolute.RSD <- round(Table.Brainstem.Cerebellum.absolute.RSD * 100, 1)


Table.Prosencephalon.absolute.stratified.gender.RSD <- as.data.frame(Table.Brainstem.Cerebellum.absolute.stratified.gender)
Table.Prosencephalon.absolute.stratified.gender.RSD <- select(Table.Prosencephalon.absolute.stratified.gender.RSD, - c(p, test))

Table.Prosencephalon.absolute.stratified.gender.RSD.female <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Prosencephalon.absolute.stratified.gender.RSD[-1, "f"]),
                                                                       ' (',fixed=TRUE)))
Table.Prosencephalon.absolute.stratified.gender.RSD.female <- data.frame(cbind(str_replace_all(Table.Prosencephalon.absolute.stratified.gender.RSD.female$X1, "[ ]", ""),
                                                            str_replace_all(Table.Prosencephalon.absolute.stratified.gender.RSD.female$X2, "[)]", "")))
Table.Prosencephalon.absolute.stratified.gender.RSD.female$X1 <- as.character(Table.Prosencephalon.absolute.stratified.gender.RSD.female$X1)
Table.Prosencephalon.absolute.stratified.gender.RSD.female$X2 <- as.character(Table.Prosencephalon.absolute.stratified.gender.RSD.female$X2)
Table.Prosencephalon.absolute.stratified.gender.RSD.female <- as.data.frame(sapply(Table.Prosencephalon.absolute.stratified.gender.RSD.female, as.numeric))
Table.Prosencephalon.absolute.stratified.gender.RSD.female <- as.data.frame(Table.Prosencephalon.absolute.stratified.gender.RSD.female$X2/Table.Prosencephalon.absolute.stratified.gender.RSD.female$X1)
Table.Prosencephalon.absolute.stratified.gender.RSD.female <- round(Table.Prosencephalon.absolute.stratified.gender.RSD.female * 100, 1)

Table.Prosencephalon.absolute.stratified.gender.RSD.male <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Prosencephalon.absolute.stratified.gender.RSD[-1, "m"]),
                                                                       ' (',fixed=TRUE)))
Table.Prosencephalon.absolute.stratified.gender.RSD.male <- data.frame(cbind(str_replace_all(Table.Prosencephalon.absolute.stratified.gender.RSD.male$X1, "[ ]", ""),
                                                            str_replace_all(Table.Prosencephalon.absolute.stratified.gender.RSD.male$X2, "[)]", "")))
Table.Prosencephalon.absolute.stratified.gender.RSD.male$X1 <- as.character(Table.Prosencephalon.absolute.stratified.gender.RSD.male$X1)
Table.Prosencephalon.absolute.stratified.gender.RSD.male$X2 <- as.character(Table.Prosencephalon.absolute.stratified.gender.RSD.male$X2)
Table.Prosencephalon.absolute.stratified.gender.RSD.male <- as.data.frame(sapply(Table.Prosencephalon.absolute.stratified.gender.RSD.male, as.numeric))
Table.Prosencephalon.absolute.stratified.gender.RSD.male <- as.data.frame(Table.Prosencephalon.absolute.stratified.gender.RSD.male$X2/Table.Prosencephalon.absolute.stratified.gender.RSD.male$X1)
Table.Prosencephalon.absolute.stratified.gender.RSD.male <- round(Table.Prosencephalon.absolute.stratified.gender.RSD.male * 100, 1)

kable(Table.Brainstem.Cerebellum.absolute)

Overall
n 30
Mesencephalon (mean (SD)) 10045.5666666667 (1460.5845472071)
Pons (mean (SD)) 15286.1333333333 (2216.2026505953)
Medulla.oblongata (mean (SD)) 2740.8333333333 (367.7611746898)
Cerebellar.peduncles (mean (SD)) 6780.7000000000 (962.4036413925)
Vermis (mean (SD)) 5946.8333333333 (804.8236938367)
Hemisphere (mean (SD)) 110786.1333333333 (12111.5249865098)
Anterior.lobe (mean (SD)) 32232.8666666667 (4775.6684076923)
Medial.lobe (mean (SD)) 28791.7000000000 (4414.8219407996)
Posterior.lobe (mean (SD)) 54644.6666666667 (7773.0127844438)
Flocculonodular.lobe (mean (SD)) 1063.7000000000 (150.3644193973)
Central (mean (SD)) 481.9666666667 (125.1868901733)
Culmen (mean (SD)) 2183.6000000000 (359.9041634888)
Declive (mean (SD)) 1030.5333333333 (188.4987392866)
Folium (mean (SD)) 440.1000000000 (120.4701565563)
Tuber (mean (SD)) 387.0333333333 (97.0319831145)
Pyramid (mean (SD)) 426.6333333333 (201.7137752521)
Uvula (mean (SD)) 784.6666666667 (129.0771844294)
Nodule (mean (SD)) 212.5000000000 (35.1290723495)
Ala.lobuli.centralis (mean (SD)) 11993.7666666667 (2880.0725647388)
AQL (mean (SD)) 17573.5333333333 (3822.1072607455)
PQL (mean (SD)) 13124.4333333333 (2598.2643767070)
SSL (mean (SD)) 14196.6333333333 (2513.7768875200)
ISL.gracile (mean (SD)) 34930.4333333333 (6197.6310695872)
Biventer (mean (SD)) 12163.3000000000 (3786.6815073268)
Tonsilla (mean (SD)) 5952.6000000000 (1337.6721571446)
Flocculus (mean (SD)) 851.2000000000 (139.2406500297)

kable(Table.Brainstem.Cerebellum.absolute.RSD)

Table.Brainstem.Cerebellum.absolute.RSDX2/Table.Brainstem.Cerebellum.absolute.RSDX1
14.5
14.5
13.4
14.2
13.5
10.9
14.8
15.3
14.2
14.1
26.0
16.5
18.3
27.4
25.1
47.3
16.4
16.5
24.0
21.7
19.8
17.7
17.7
31.1
22.5
16.4

kable(Table.Brainstem.Cerebellum.absolute.stratified.gender)

f m p test
n 14 16
Mesencephalon (mean (SD)) 9763.7857142857 (1207.3040645983) 10292.1250000000 (1649.9104167601) 0.332
Pons (mean (SD)) 14388.7142857143 (2400.8001688082) 16071.3750000000 (1758.1127713166) 0.036
Medulla.oblongata (mean (SD)) 2654.9285714286 (273.5303285914) 2816.0000000000 (428.6288215539) 0.238
Cerebellar.peduncles (mean (SD)) 6442.8571428571 (696.4864411009) 7076.3125000000 (1081.9140889337) 0.071
Vermis (mean (SD)) 5729.2857142857 (698.0237408979) 6137.1875000000 (864.4103361059) 0.170
Hemisphere (mean (SD)) 105887.2142857143 (12510.9148234564) 115072.6875000000 (10293.0357214235) 0.036
Anterior.lobe (mean (SD)) 30952.2142857143 (5066.7219440425) 33353.4375000000 (4355.9895617988) 0.174
Medial.lobe (mean (SD)) 28501.7142857143 (4694.7263282010) 29045.4375000000 (4293.3716660103) 0.743
Posterior.lobe (mean (SD)) 51123.5000000000 (7944.6905807009) 57725.6875000000 (6357.0069447684) 0.017
Flocculonodular.lobe (mean (SD)) 1039.6428571429 (171.7814385705) 1084.7500000000 (130.8604855052) 0.422
Central (mean (SD)) 494.1428571429 (138.8357397696) 471.3125000000 (115.4727781774) 0.627
Culmen (mean (SD)) 2090.3571428571 (300.4288235539) 2265.1875000000 (396.2178220373) 0.189
Declive (mean (SD)) 1009.5000000000 (222.2752105629) 1048.9375000000 (158.4354626759) 0.577
Folium (mean (SD)) 429.9285714286 (104.0461911370) 449.0000000000 (135.9975489975) 0.673
Tuber (mean (SD)) 359.0714285714 (74.5442194898) 411.5000000000 (109.6290715702) 0.143
Pyramid (mean (SD)) 368.1428571429 (137.8856031660) 477.8125000000 (237.0651721222) 0.140
Uvula (mean (SD)) 768.3571428571 (121.3416075148) 798.9375000000 (137.7860509389) 0.527
Nodule (mean (SD)) 210.4285714286 (32.6937168410) 214.3125000000 (38.1046257034) 0.768
Ala.lobuli.centralis (mean (SD)) 11410.7857142857 (3163.7587717672) 12503.8750000000 (2601.3639210999) 0.308
AQL (mean (SD)) 16956.9285714286 (3679.3877096037) 18113.0625000000 (3980.5670026392) 0.418
PQL (mean (SD)) 12835.1428571429 (3258.6597022311) 13377.5625000000 (1924.1673513064) 0.577
SSL (mean (SD)) 14227.1428571429 (2163.5692325821) 14169.9375000000 (2856.2831901792) 0.952
ISL.gracile (mean (SD)) 33388.7857142857 (6276.2341866707) 36279.3750000000 (5996.8659134029) 0.208
Biventer (mean (SD)) 10529.6428571429 (3581.7178217924) 13592.7500000000 (3454.4626113671) 0.024
Tonsilla (mean (SD)) 5709.5000000000 (1079.5718346427) 6165.3125000000 (1531.6471620992) 0.361
Flocculus (mean (SD)) 829.2142857143 (158.8619035376) 870.4375000000 (121.5126708071) 0.428

kable(Table.Prosencephalon.absolute.stratified.gender.RSD.female)

Table.Prosencephalon.absolute.stratified.gender.RSD.femaleX2/Table.Prosencephalon.absolute.stratified.gender.RSD.femaleX1
12.4
16.7
10.3
10.8
12.2
11.8
16.4
16.5
15.5
16.5
28.1
14.4
22.0
24.2
20.8
37.5
15.8
15.5
27.7
21.7
25.4
15.2
18.8
34.0
18.9
19.2

kable(Table.Prosencephalon.absolute.stratified.gender.RSD.male)

Table.Prosencephalon.absolute.stratified.gender.RSD.maleX2/Table.Prosencephalon.absolute.stratified.gender.RSD.maleX1
16.0
10.9
15.2
15.3
14.1
8.9
13.1
14.8
11.0
12.1
24.5
17.5
15.1
30.3
26.6
49.6
17.2
17.8
20.8
22.0
14.4
20.2
16.5
25.4
24.8
14.0

NA

Brainstem.Cerebellum.absolute <- select(Brainstem.Cerebellum.absolute, - c(Gender))
Brainstem.Cerebellum.absolute1 <- Brainstem.Cerebellum.absolute[,c(1:10)]
Brainstem.Cerebellum.absolute2 <- Brainstem.Cerebellum.absolute[,-c(1:10)]

names.anatomical.structures.temporary <- c("Mesencephalon",
"Pons",
"Medulla.oblongata", 
"Cerebellar.peduncles", 
"Vermis", 
"Hemisphere", 
"Anterior.lobe", 
"Medial.lobe", 
"Posterior.lobe", 
"Flocculonodular.lobe")

names.anatomical.structures.definitive <- c("Mesencephalon",
"Pons",
"Medulla oblongata", 
"Cerebellar peduncles", 
"Vermis", 
"Hemisphere", 
"Anterior lobe", 
"Medial lobe", 
"Posterior lobe", 
"Flocculonodular lobe")

Brainstem.Cerebellum.absolute.plotdata1 <- gather(Brainstem.Cerebellum.absolute1, "anatomical.structure", "relative.volume")
Brainstem.Cerebellum.absolute.plotdata1$Gender <- All.Volumes$Gender
Brainstem.Cerebellum.absolute.plotdata1$Age <- All.Volumes$`Age (years)`

Brainstem.Cerebellum.absolute.plotdata1$Gender <- factor(Brainstem.Cerebellum.absolute.plotdata1$Gender, levels = c("f", "m"), c("f", "m"))
Brainstem.Cerebellum.absolute.plotdata1$anatomical.structure <- factor(Brainstem.Cerebellum.absolute.plotdata1$anatomical.structure, 
                                                                levels = rev(c(names.anatomical.structures.temporary)), rev(c(names.anatomical.structures.definitive)))

Brainstem.Cerebellum.absolute.plot1 <-  ggplot(Brainstem.Cerebellum.absolute.plotdata1, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Absolute volume (in mm3)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("BRAINSTEM & CEREBELLUM") +
  theme(plot.title = element_text(hjust = 0.5))

Brainstem.Cerebellum.absolute.plot1
ggsave("Brainstem.Cerebellum.absolute.plot1.pdf", plot = Brainstem.Cerebellum.absolute.plot1, width = 12, height = 6, units = "in", dpi = 600)


names.anatomical.structures.temporary <- c(
"Central", 
"Culmen", 
"Declive", 
"Folium", 
"Tuber",
"Pyramid", 
"Uvula", 
"Nodule",
"Ala.lobuli.centralis",
"AQL",
"PQL",
"SSL",
"ISL.gracile", 
"Biventer",
"Tonsilla", 
"Flocculus")

names.anatomical.structures.definitive <- c(
"Central", 
"Culmen", 
"Declive", 
"Folium", 
"Tuber",
"Pyramid", 
"Uvula", 
"Nodule",
"Ala lobuli centralis",
"AQL",
"PQL",
"SSL",
"ISL/gracile", 
"Biventer",
"Tonsilla", 
"Flocculus")

Brainstem.Cerebellum.absolute.plotdata2 <- gather(Brainstem.Cerebellum.absolute2, "anatomical.structure", "relative.volume")
Brainstem.Cerebellum.absolute.plotdata2$Gender <- All.Volumes$Gender
Brainstem.Cerebellum.absolute.plotdata2$Age <- All.Volumes$`Age (years)`

Brainstem.Cerebellum.absolute.plotdata2$Gender <- factor(Brainstem.Cerebellum.absolute.plotdata2$Gender, levels = c("f", "m"), c("f", "m"))
Brainstem.Cerebellum.absolute.plotdata2$anatomical.structure <- factor(Brainstem.Cerebellum.absolute.plotdata2$anatomical.structure, 
                                                                levels = rev(c(names.anatomical.structures.temporary)), rev(c(names.anatomical.structures.definitive)))

Brainstem.Cerebellum.absolute.plot2 <-  ggplot(Brainstem.Cerebellum.absolute.plotdata2, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Absolute volume (in mm3)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("CEREBELLAR LOBES & LOBULES") +
  theme(plot.title = element_text(hjust = 0.5))

Brainstem.Cerebellum.absolute.plot2
ggsave("Brainstem.Cerebellum.absolute.plot2.pdf", plot = Brainstem.Cerebellum.absolute.plot2, width = 12, height = 6, units = "in", dpi = 600)


Brainstem.Cerebellum.absolute$Gender <- All.Volumes$Gender
Brainstem.Cerebellum.absolute$Age <- All.Volumes$`Age (years)`

Total.Mesencephalon.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Mesencephalon, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 11700, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME mesencephalon") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Mesencephalon.Age.plot
ggsave("Total.Mesencephalon.Age.plot.pdf", plot = Total.Mesencephalon.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Pons.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Pons, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 20500, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME pons") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Pons.Age.plot
ggsave("Total.Pons.Age.plot.pdf", plot = Total.Pons.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Medulla.oblongata.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Medulla.oblongata, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 3300, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME medulla oblongata") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Medulla.oblongata.Age.plot
ggsave("Total.Medulla.oblongata.Age.plot.pdf", plot = Total.Medulla.oblongata.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Cerebellar.peduncles.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Cerebellar.peduncles, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 8700, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME cerebellar peduncles") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Cerebellar.peduncles.Age.plot
ggsave("Total.Cerebellar.peduncles.Age.plot.pdf", plot = Total.Cerebellar.peduncles.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Vermis.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Vermis, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 7200, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME vermis") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Vermis.Age.plot
ggsave("Total.Vermis.Age.plot.pdf", plot = Total.Vermis.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Hemisphere.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Hemisphere, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 123000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME hemisphere") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Hemisphere.Age.plot
ggsave("Total.Hemisphere.Age.plot.pdf", plot = Total.Hemisphere.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Anterior.lobe.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Anterior.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 36000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME anterior lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Anterior.lobe.Age.plot
ggsave("Total.Anterior.lobe.Age.plot.pdf", plot = Total.Anterior.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Medial.lobe.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Medial.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 31000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME medial lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Medial.lobe.Age.plot
ggsave("Total.Medial.lobe.Age.plot.pdf", plot = Total.Medial.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Posterior.lobe.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Posterior.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 66000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME posterior lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Posterior.lobe.Age.plot
ggsave("Total.Posterior.lobe.Age.plot.pdf", plot = Total.Posterior.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Flocculonodular.lobe.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Flocculonodular.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1250, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME flocculonodular lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Flocculonodular.lobe.Age.plot
ggsave("Total.Flocculonodular.lobe.Age.plot.pdf", plot = Total.Flocculonodular.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Central.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Central, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 770, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME central") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Central.Age.plot
ggsave("Total.Central.Age.plot.pdf", plot = Total.Central.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Culmen.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Culmen, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2600, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME CULMEN") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Culmen.Age.plot
ggsave("Total.Culmen.Age.plot.pdf", plot = Total.Culmen.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Declive.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Declive, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1250, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME DECLIVE") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Declive.Age.plot
ggsave("Total.Declive.Age.plot.pdf", plot = Total.Declive.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Folium.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Folium, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 630, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME FOLIUM") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Folium.Age.plot
ggsave("Total.Folium.Age.plot.pdf", plot = Total.Folium.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Tuber.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Tuber, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 570, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME TUBER") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Tuber.Age.plot
ggsave("Total.Tuber.Age.plot.pdf", plot = Total.Tuber.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Pyramid.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Pyramid, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 700, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME PYRAMID") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Pyramid.Age.plot
ggsave("Total.Pyramid.Age.plot.pdf", plot = Total.Pyramid.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Uvula.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Uvula, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1030, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME UVULA") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Uvula.Age.plot
ggsave("Total.Uvula.Age.plot.pdf", plot = Total.Uvula.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Nodule.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Nodule, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 230, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME NODULE") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Nodule.Age.plot
ggsave("Total.Nodule.Age.plot.pdf", plot = Total.Nodule.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Ala.lobuli.centralis.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Ala.lobuli.centralis, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 16000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME ALA LOBULI CENTRALIS") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Ala.lobuli.centralis.Age.plot
ggsave("Total.Ala.lobuli.centralis.Age.plot.pdf", plot = Total.Ala.lobuli.centralis.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.AQL.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=AQL, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 21000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME AQL") +
  theme(plot.title = element_text(hjust = 0.5))
Total.AQL.Age.plot
ggsave("Total.AQL.Age.plot.pdf", plot = Total.AQL.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.PQL.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=PQL, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 15500, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME PQL") +
  theme(plot.title = element_text(hjust = 0.5))
Total.PQL.Age.plot
ggsave("Total.PQL.Age.plot.pdf", plot = Total.PQL.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.SSL.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=SSL, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 15500, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME SSL") +
  theme(plot.title = element_text(hjust = 0.5))
Total.SSL.Age.plot
ggsave("Total.SSL.Age.plot.pdf", plot = Total.SSL.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.ISL.gracile.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=ISL.gracile, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 42000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME ISL/gracile") +
  theme(plot.title = element_text(hjust = 0.5))
Total.ISL.gracile.Age.plot
ggsave("Total.ISL.gracile.Age.plot.pdf", plot = Total.ISL.gracile.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Biventer.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Biventer, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 21000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME biventer") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Biventer.Age.plot
ggsave("Total.Biventer.Age.plot.pdf", plot = Total.Biventer.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Tonsilla.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Tonsilla, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 7700, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME tonsilla") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Tonsilla.Age.plot
ggsave("Total.Tonsilla.Age.plot.pdf", plot = Total.Tonsilla.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Total.Flocculus.Age.plot <-  ggplot(Brainstem.Cerebellum.absolute, aes(y=Flocculus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1050, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME flocculus") +
  theme(plot.title = element_text(hjust = 0.5))
Total.Flocculus.Age.plot
ggsave("Total.Flocculus.Age.plot.pdf", plot = Total.Flocculus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)

Relative Volumes


#Brainstem.Cerebellum.absolute <- select(Brainstem.Cerebellum.absolute, - c(Age, Gender))
Brainstem.Cerebellum.relative <- (100 * (Brainstem.Cerebellum.absolute/All.Volumes$`Total encephalic volume (without ventricles)`))
‘/’ not meaningful for factors
Brainstem.Cerebellum.relative1 <- Brainstem.Cerebellum.relative[,c(1:10)]
Brainstem.Cerebellum.relative2 <- Brainstem.Cerebellum.relative[,-c(1:10)]

Table.Brainstem.Cerebellum.relative <- CreateTableOne(
  vars = c("Mesencephalon",
"Pons",
"Medulla.oblongata", 
"Cerebellar.peduncles", 
"Vermis", 
"Hemisphere", 
"Anterior.lobe", 
"Medial.lobe", 
"Posterior.lobe", 
"Flocculonodular.lobe", 
"Central", 
"Culmen", 
"Declive", 
"Folium", 
"Tuber",
"Pyramid", 
"Uvula", 
"Nodule",
"Ala.lobuli.centralis",
"AQL",
"PQL",
"SSL",
"ISL.gracile", 
"Biventer",
"Tonsilla", 
"Flocculus"),
  data = Brainstem.Cerebellum.relative)

Brainstem.Cerebellum.relative$Gender <- All.Volumes$Gender

Table.Brainstem.Cerebellum.relative.stratified.gender <- CreateTableOne(
  vars = c("Mesencephalon",
"Pons",
"Medulla.oblongata", 
"Cerebellar.peduncles", 
"Vermis", 
"Hemisphere", 
"Anterior.lobe", 
"Medial.lobe", 
"Posterior.lobe", 
"Flocculonodular.lobe", 
"Central", 
"Culmen", 
"Declive", 
"Folium", 
"Tuber",
"Pyramid", 
"Uvula", 
"Nodule",
"Ala.lobuli.centralis",
"AQL",
"PQL",
"SSL",
"ISL.gracile", 
"Biventer",
"Tonsilla", 
"Flocculus"),
strata = c("Gender"),
  data = Brainstem.Cerebellum.relative)

Table.Brainstem.Cerebellum.relative <- print(Table.Brainstem.Cerebellum.relative, contDigits = 10)
                                  
                                   Overall                     
  n                                           30               
  Mesencephalon (mean (SD))         0.9207623291 (0.1105191701)
  Pons (mean (SD))                  1.4005625067 (0.1727801503)
  Medulla.oblongata (mean (SD))     0.2524061308 (0.0357809075)
  Cerebellar.peduncles (mean (SD))  0.6213805087 (0.0717960379)
  Vermis (mean (SD))                0.5465728045 (0.0706767901)
  Hemisphere (mean (SD))           10.1852538324 (1.1214009177)
  Anterior.lobe (mean (SD))         2.9710945895 (0.4958752121)
  Medial.lobe (mean (SD))           2.6417850797 (0.3687226983)
  Posterior.lobe (mean (SD))        5.0206290086 (0.6951742366)
  Flocculonodular.lobe (mean (SD))  0.0983188189 (0.0174019012)
  Central (mean (SD))               0.0444979014 (0.0120965572)
  Culmen (mean (SD))                0.2006556434 (0.0318361517)
  Declive (mean (SD))               0.0945552953 (0.0166943131)
  Folium (mean (SD))                0.0405176202 (0.0111004272)
  Tuber (mean (SD))                 0.0355347542 (0.0084832011)
  Pyramid (mean (SD))               0.0389858949 (0.0169198532)
  Uvula (mean (SD))                 0.0722229678 (0.0122092488)
  Nodule (mean (SD))                0.0196238560 (0.0037047686)
  Ala.lobuli.centralis (mean (SD))  1.1040297116 (0.2737967502)
  AQL (mean (SD))                   1.6219113332 (0.3797422298)
  PQL (mean (SD))                   1.2023063114 (0.2187152577)
  SSL (mean (SD))                   1.3044058528 (0.2289872084)
  ISL.gracile (mean (SD))           3.2205673072 (0.6269680120)
  Biventer (mean (SD))              1.1070477516 (0.3117981715)
  Tonsilla (mean (SD))              0.5462703329 (0.1165790011)
  Flocculus (mean (SD))             0.0786949629 (0.0155073243)
Table.Brainstem.Cerebellum.relative.stratified.gender <- print(Table.Brainstem.Cerebellum.relative.stratified.gender, contDigits = 10)
                                  Stratified by Gender
                                   f                            m                            p      test
  n                                           14                           16                           
  Mesencephalon (mean (SD))         0.9547649875 (0.1034767729)  0.8910100029 (0.1109575365)  0.116     
  Pons (mean (SD))                  1.4035711394 (0.1967402245)  1.3979299532 (0.1554158961)  0.931     
  Medulla.oblongata (mean (SD))     0.2607569676 (0.0330361387)  0.2450991485 (0.0375138378)  0.238     
  Cerebellar.peduncles (mean (SD))  0.6310216888 (0.0701223453)  0.6129444762 (0.0744412960)  0.501     
  Vermis (mean (SD))                0.5614348351 (0.0700918934)  0.5335685277 (0.0708028232)  0.289     
  Hemisphere (mean (SD))           10.3668103244 (1.1765578929) 10.0263919019 (1.0834401354)  0.416     
  Anterior.lobe (mean (SD))         3.0346127423 (0.5156137908)  2.9155162059 (0.4877717301)  0.521     
  Medial.lobe (mean (SD))           2.7827036278 (0.3948805255)  2.5184813501 (0.3048895712)  0.048     
  Posterior.lobe (mean (SD))        5.0087783797 (0.7749481080)  5.0309983090 (0.6431165505)  0.932     
  Flocculonodular.lobe (mean (SD))  0.1022078567 (0.0181582471)  0.0949159108 (0.0165298769)  0.259     
  Central (mean (SD))               0.0484920828 (0.0133583251)  0.0410029928 (0.0100163605)  0.091     
  Culmen (mean (SD))                0.2045461757 (0.0285689132)  0.1972514276 (0.0350094972)  0.541     
  Declive (mean (SD))               0.0983933628 (0.0195622332)  0.0911969862 (0.0134679064)  0.246     
  Folium (mean (SD))                0.0418471653 (0.0093337522)  0.0393542682 (0.0126343898)  0.549     
  Tuber (mean (SD))                 0.0353483403 (0.0083807937)  0.0356978664 (0.0088429783)  0.913     
  Pyramid (mean (SD))               0.0367053806 (0.0154573992)  0.0409813449 (0.0183657952)  0.499     
  Uvula (mean (SD))                 0.0754553918 (0.0127880168)  0.0693945969 (0.0113216555)  0.179     
  Nodule (mean (SD))                0.0207119244 (0.0037738611)  0.0186717962 (0.0034814791)  0.135     
  Ala.lobuli.centralis (mean (SD))  1.1123470528 (0.2881107524)  1.0967520380 (0.2699453959)  0.879     
  AQL (mean (SD))                   1.6692274310 (0.4046689735)  1.5805097476 (0.3646286798)  0.533     
  PQL (mean (SD))                   1.2462629933 (0.2677358247)  1.1638442147 (0.1642482748)  0.311     
  SSL (mean (SD))                   1.3962001064 (0.2267285630)  1.2240858809 (0.2051269225)  0.038     
  ISL.gracile (mean (SD))           3.2680364313 (0.5872772943)  3.1790318236 (0.6761064068)  0.705     
  Biventer (mean (SD))              1.0339684324 (0.3635994447)  1.1709921559 (0.2530448256)  0.236     
  Tonsilla (mean (SD))              0.5592644032 (0.1111017647)  0.5349005213 (0.1236204433)  0.577     
  Flocculus (mean (SD))             0.0814959323 (0.0161449011)  0.0762441146 (0.0150096453)  0.364     

Table.Brainstem.Cerebellum.relative.RSD <- as.data.frame(Table.Brainstem.Cerebellum.relative)
Table.Brainstem.Cerebellum.relative.RSD <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Brainstem.Cerebellum.relative.RSD[-1,]),
                                                                       ' (',fixed=TRUE)))
Table.Brainstem.Cerebellum.relative.RSD <- data.frame(cbind(str_replace_all(Table.Brainstem.Cerebellum.relative.RSD$X1, "[ ]", ""),
                                                            str_replace_all(Table.Brainstem.Cerebellum.relative.RSD$X2, "[)]", "")))
Table.Brainstem.Cerebellum.relative.RSD$X1 <- as.character(Table.Brainstem.Cerebellum.relative.RSD$X1)
Table.Brainstem.Cerebellum.relative.RSD$X2 <- as.character(Table.Brainstem.Cerebellum.relative.RSD$X2)
Table.Brainstem.Cerebellum.relative.RSD <- as.data.frame(sapply(Table.Brainstem.Cerebellum.relative.RSD, as.numeric))
Table.Brainstem.Cerebellum.relative.RSD <- as.data.frame(Table.Brainstem.Cerebellum.relative.RSD$X2/Table.Brainstem.Cerebellum.relative.RSD$X1)
Table.Brainstem.Cerebellum.relative.RSD <- round(Table.Brainstem.Cerebellum.relative.RSD * 100, 1)


Table.Brainstem.Cerebellum.relative.stratified.gender.RSD <- as.data.frame(Table.Brainstem.Cerebellum.relative.stratified.gender)
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD <- select(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD, - c(p, test))

Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD[-1, "f"]),
                                                                       ' (',fixed=TRUE)))
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female <- data.frame(cbind(str_replace_all(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female$X1, "[ ]", ""),
                                                            str_replace_all(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female$X2, "[)]", "")))
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female$X1 <- as.character(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female$X1)
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female$X2 <- as.character(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female$X2)
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female <- as.data.frame(sapply(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female, as.numeric))
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female <- as.data.frame(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female$X2/Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female$X1)
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female <- round(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female * 100, 1)

Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD[-1, "m"]),
                                                                       ' (',fixed=TRUE)))
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male <- data.frame(cbind(str_replace_all(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male$X1, "[ ]", ""),
                                                            str_replace_all(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male$X2, "[)]", "")))
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male$X1 <- as.character(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male$X1)
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male$X2 <- as.character(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male$X2)
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male <- as.data.frame(sapply(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male, as.numeric))
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male <- as.data.frame(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male$X2/Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male$X1)
Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male <- round(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male * 100, 1)

kable(Table.Brainstem.Cerebellum.relative)

Overall
n 30
Mesencephalon (mean (SD)) 0.9207623291 (0.1105191701)
Pons (mean (SD)) 1.4005625067 (0.1727801503)
Medulla.oblongata (mean (SD)) 0.2524061308 (0.0357809075)
Cerebellar.peduncles (mean (SD)) 0.6213805087 (0.0717960379)
Vermis (mean (SD)) 0.5465728045 (0.0706767901)
Hemisphere (mean (SD)) 10.1852538324 (1.1214009177)
Anterior.lobe (mean (SD)) 2.9710945895 (0.4958752121)
Medial.lobe (mean (SD)) 2.6417850797 (0.3687226983)
Posterior.lobe (mean (SD)) 5.0206290086 (0.6951742366)
Flocculonodular.lobe (mean (SD)) 0.0983188189 (0.0174019012)
Central (mean (SD)) 0.0444979014 (0.0120965572)
Culmen (mean (SD)) 0.2006556434 (0.0318361517)
Declive (mean (SD)) 0.0945552953 (0.0166943131)
Folium (mean (SD)) 0.0405176202 (0.0111004272)
Tuber (mean (SD)) 0.0355347542 (0.0084832011)
Pyramid (mean (SD)) 0.0389858949 (0.0169198532)
Uvula (mean (SD)) 0.0722229678 (0.0122092488)
Nodule (mean (SD)) 0.0196238560 (0.0037047686)
Ala.lobuli.centralis (mean (SD)) 1.1040297116 (0.2737967502)
AQL (mean (SD)) 1.6219113332 (0.3797422298)
PQL (mean (SD)) 1.2023063114 (0.2187152577)
SSL (mean (SD)) 1.3044058528 (0.2289872084)
ISL.gracile (mean (SD)) 3.2205673072 (0.6269680120)
Biventer (mean (SD)) 1.1070477516 (0.3117981715)
Tonsilla (mean (SD)) 0.5462703329 (0.1165790011)
Flocculus (mean (SD)) 0.0786949629 (0.0155073243)

kable(Table.Brainstem.Cerebellum.relative.RSD)

Table.Brainstem.Cerebellum.relative.RSDX2/Table.Brainstem.Cerebellum.relative.RSDX1
12.0
12.3
14.2
11.6
12.9
11.0
16.7
14.0
13.8
17.7
27.2
15.9
17.7
27.4
23.9
43.4
16.9
18.9
24.8
23.4
18.2
17.6
19.5
28.2
21.3
19.7

kable(Table.Brainstem.Cerebellum.relative.stratified.gender)

f m p test
n 14 16
Mesencephalon (mean (SD)) 0.9547649875 (0.1034767729) 0.8910100029 (0.1109575365) 0.116
Pons (mean (SD)) 1.4035711394 (0.1967402245) 1.3979299532 (0.1554158961) 0.931
Medulla.oblongata (mean (SD)) 0.2607569676 (0.0330361387) 0.2450991485 (0.0375138378) 0.238
Cerebellar.peduncles (mean (SD)) 0.6310216888 (0.0701223453) 0.6129444762 (0.0744412960) 0.501
Vermis (mean (SD)) 0.5614348351 (0.0700918934) 0.5335685277 (0.0708028232) 0.289
Hemisphere (mean (SD)) 10.3668103244 (1.1765578929) 10.0263919019 (1.0834401354) 0.416
Anterior.lobe (mean (SD)) 3.0346127423 (0.5156137908) 2.9155162059 (0.4877717301) 0.521
Medial.lobe (mean (SD)) 2.7827036278 (0.3948805255) 2.5184813501 (0.3048895712) 0.048
Posterior.lobe (mean (SD)) 5.0087783797 (0.7749481080) 5.0309983090 (0.6431165505) 0.932
Flocculonodular.lobe (mean (SD)) 0.1022078567 (0.0181582471) 0.0949159108 (0.0165298769) 0.259
Central (mean (SD)) 0.0484920828 (0.0133583251) 0.0410029928 (0.0100163605) 0.091
Culmen (mean (SD)) 0.2045461757 (0.0285689132) 0.1972514276 (0.0350094972) 0.541
Declive (mean (SD)) 0.0983933628 (0.0195622332) 0.0911969862 (0.0134679064) 0.246
Folium (mean (SD)) 0.0418471653 (0.0093337522) 0.0393542682 (0.0126343898) 0.549
Tuber (mean (SD)) 0.0353483403 (0.0083807937) 0.0356978664 (0.0088429783) 0.913
Pyramid (mean (SD)) 0.0367053806 (0.0154573992) 0.0409813449 (0.0183657952) 0.499
Uvula (mean (SD)) 0.0754553918 (0.0127880168) 0.0693945969 (0.0113216555) 0.179
Nodule (mean (SD)) 0.0207119244 (0.0037738611) 0.0186717962 (0.0034814791) 0.135
Ala.lobuli.centralis (mean (SD)) 1.1123470528 (0.2881107524) 1.0967520380 (0.2699453959) 0.879
AQL (mean (SD)) 1.6692274310 (0.4046689735) 1.5805097476 (0.3646286798) 0.533
PQL (mean (SD)) 1.2462629933 (0.2677358247) 1.1638442147 (0.1642482748) 0.311
SSL (mean (SD)) 1.3962001064 (0.2267285630) 1.2240858809 (0.2051269225) 0.038
ISL.gracile (mean (SD)) 3.2680364313 (0.5872772943) 3.1790318236 (0.6761064068) 0.705
Biventer (mean (SD)) 1.0339684324 (0.3635994447) 1.1709921559 (0.2530448256) 0.236
Tonsilla (mean (SD)) 0.5592644032 (0.1111017647) 0.5349005213 (0.1236204433) 0.577
Flocculus (mean (SD)) 0.0814959323 (0.0161449011) 0.0762441146 (0.0150096453) 0.364

kable(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.female)

Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.femaleX2/Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.femaleX1
10.8
14.0
12.7
11.1
12.5
11.3
17.0
14.2
15.5
17.8
27.5
14.0
19.9
22.3
23.7
42.1
16.9
18.2
25.9
24.2
21.5
16.2
18.0
35.2
19.9
19.8

kable(Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.male)

Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.maleX2/Table.Brainstem.Cerebellum.relative.stratified.gender.RSD.maleX1
12.5
11.1
15.3
12.1
13.3
10.8
16.7
12.1
12.8
17.4
24.4
17.7
14.8
32.1
24.8
44.8
16.3
18.6
24.6
23.1
14.1
16.8
21.3
21.6
23.1
19.7

NA

names.anatomical.structures.temporary <- c("Mesencephalon",
"Pons",
"Medulla.oblongata", 
"Cerebellar.peduncles", 
"Vermis", 
"Hemisphere", 
"Anterior.lobe", 
"Medial.lobe", 
"Posterior.lobe", 
"Flocculonodular.lobe")

names.anatomical.structures.definitive <- c("Mesencephalon",
"Pons",
"Medulla oblongata", 
"Cerebellar peduncles", 
"Vermis", 
"Hemisphere", 
"Anterior lobe", 
"Medial lobe", 
"Posterior lobe", 
"Flocculonodular lobe")

Brainstem.Cerebellum.relative.plotdata1 <- gather(Brainstem.Cerebellum.relative1, "anatomical.structure", "relative.volume")
Brainstem.Cerebellum.relative.plotdata1$Gender <- All.Volumes$Gender
Brainstem.Cerebellum.relative.plotdata1$Age <- All.Volumes$`Age (years)`

Brainstem.Cerebellum.relative.plotdata1$Gender <- factor(Brainstem.Cerebellum.relative.plotdata1$Gender, levels = c("f", "m"), c("f", "m"))
Brainstem.Cerebellum.relative.plotdata1$anatomical.structure <- factor(Brainstem.Cerebellum.relative.plotdata1$anatomical.structure, 
                                                                levels = rev(c(names.anatomical.structures.temporary)), rev(c(names.anatomical.structures.definitive)))

Brainstem.Cerebellum.relative.plot1 <-  ggplot(Brainstem.Cerebellum.relative.plotdata1, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Relative volume (in %)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("BRAINSTEM & CEREBELLUM") +
  theme(plot.title = element_text(hjust = 0.5))

Brainstem.Cerebellum.relative.plot1
ggsave("Brainstem.Cerebellum.relative.plot1.pdf", plot = Brainstem.Cerebellum.relative.plot1, width = 12, height = 6, units = "in", dpi = 600)


names.anatomical.structures.temporary <- c(
"Central", 
"Culmen", 
"Declive", 
"Folium", 
"Tuber",
"Pyramid", 
"Uvula", 
"Nodule",
"Ala.lobuli.centralis",
"AQL",
"PQL",
"SSL",
"ISL.gracile", 
"Biventer",
"Tonsilla", 
"Flocculus")

names.anatomical.structures.definitive <- c(
"Central", 
"Culmen", 
"Declive", 
"Folium", 
"Tuber",
"Pyramid", 
"Uvula", 
"Nodule",
"Ala lobuli centralis",
"AQL",
"PQL",
"SSL",
"ISL/gracile", 
"Biventer",
"Tonsilla", 
"Flocculus")

Brainstem.Cerebellum.relative.plotdata2 <- gather(Brainstem.Cerebellum.relative2, "anatomical.structure", "relative.volume")
Brainstem.Cerebellum.relative.plotdata2$Gender <- All.Volumes$Gender
Brainstem.Cerebellum.relative.plotdata2$Age <- All.Volumes$`Age (years)`

Brainstem.Cerebellum.relative.plotdata2$Gender <- factor(Brainstem.Cerebellum.relative.plotdata2$Gender, levels = c("f", "m"), c("f", "m"))
Brainstem.Cerebellum.relative.plotdata2$anatomical.structure <- factor(Brainstem.Cerebellum.relative.plotdata2$anatomical.structure, 
                                                                levels = rev(c(names.anatomical.structures.temporary)), rev(c(names.anatomical.structures.definitive)))

Brainstem.Cerebellum.relative.plot2 <-  ggplot(Brainstem.Cerebellum.relative.plotdata2, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Relative volume (in %)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("CEREBELLAR LOBES & LOBULES") +
  theme(plot.title = element_text(hjust = 0.5))

Brainstem.Cerebellum.relative.plot2
ggsave("Brainstem.Cerebellum.relative.plot2.pdf", plot = Brainstem.Cerebellum.relative.plot2, width = 12, height = 6, units = "in", dpi = 600)


#Brainstem.Cerebellum.relative$Gender <- All.Volumes$Gender
Brainstem.Cerebellum.relative$Age <- All.Volumes$`Age (years)`

Relative.Mesencephalon.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Mesencephalon, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.02, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME mesencephalon") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Mesencephalon.Age.plot
ggsave("Relative.Mesencephalon.Age.plot.pdf", plot = Relative.Mesencephalon.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Pons.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Pons, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.93, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME pons") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Pons.Age.plot
ggsave("Relative.Pons.Age.plot.pdf", plot = Relative.Pons.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Medulla.oblongata.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Medulla.oblongata, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.33, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME medulla oblongata") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Medulla.oblongata.Age.plot
ggsave("Relative.Medulla.oblongata.Age.plot.pdf", plot = Relative.Medulla.oblongata.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Cerebellar.peduncles.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Cerebellar.peduncles, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.83, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME cerebellar peduncle") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Cerebellar.peduncles.Age.plot
ggsave("Relative.Cerebellar.peduncles.Age.plot.pdf", plot = Relative.Cerebellar.peduncles.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Vermis.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Vermis, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.67, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME vermis") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Vermis.Age.plot
ggsave("Relative.Vermis.Age.plot.pdf", plot = Relative.Vermis.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Hemisphere.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Hemisphere, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 11.7, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME hemisphere") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Hemisphere.Age.plot
ggsave("Relative.Hemisphere.Age.plot.pdf", plot = Relative.Hemisphere.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Anterior.lobe.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Anterior.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 3.6, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME anterior lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Anterior.lobe.Age.plot
ggsave("Relative.Anterior.lobe.Age.plot.pdf", plot = Relative.Anterior.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Medial.lobe.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Medial.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 3.1, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME medial lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Medial.lobe.Age.plot
ggsave("Relative.Medial.lobe.Age.plot.pdf", plot = Relative.Medial.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Posterior.lobe.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Posterior.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 6.6, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME posterior lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Posterior.lobe.Age.plot
ggsave("Relative.Posterior.lobe.Age.plot.pdf", plot = Relative.Posterior.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Flocculonodular.lobe.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Flocculonodular.lobe, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.121, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME flocculonodular lobe") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Flocculonodular.lobe.Age.plot
ggsave("Relative.Flocculonodular.lobe.Age.plot.pdf", plot = Relative.Flocculonodular.lobe.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Central.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Central, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.072, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME CENTRAL") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Central.Age.plot
ggsave("Relative.Central.Age.plot.pdf", plot = Relative.Central.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Culmen.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Culmen, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.228, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME CULMEN") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Culmen.Age.plot
ggsave("Relative.Culmen.Age.plot.pdf", plot = Relative.Culmen.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Declive.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Declive, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.13, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME DECLIVE") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Declive.Age.plot
ggsave("Relative.Declive.Age.plot.pdf", plot = Relative.Declive.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Folium.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Folium, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.062, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME FOLIUM") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Folium.Age.plot
ggsave("Relative.Folium.Age.plot.pdf", plot = Relative.Folium.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Tuber.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Tuber, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.052, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME TUBER") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Tuber.Age.plot
ggsave("Relative.Tuber.Age.plot.pdf", plot = Relative.Tuber.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Pyramid.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Pyramid, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.062, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME PYRAMID") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Pyramid.Age.plot
ggsave("Relative.Pyramid.Age.plot.pdf", plot = Relative.Pyramid.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Uvula.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Uvula, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.097, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME UVULA") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Uvula.Age.plot
ggsave("Relative.Uvula.Age.plot.pdf", plot = Relative.Uvula.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Nodule.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Nodule, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.023, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME NODULE") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Nodule.Age.plot
ggsave("Relative.Nodule.Age.plot.pdf", plot = Relative.Nodule.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Ala.lobuli.centralis.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Ala.lobuli.centralis, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.45, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME ALA LOBULI CENTRALIS") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Ala.lobuli.centralis.Age.plot
ggsave("Relative.Ala.lobuli.centralis.Age.plot.pdf", plot = Relative.Ala.lobuli.centralis.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.AQL.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=AQL, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.7, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2.1, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME AQL") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.AQL.Age.plot
ggsave("Relative.AQL.Age.plot.pdf", plot = Relative.AQL.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.PQL.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=PQL, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.55, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME PQL") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.PQL.Age.plot
ggsave("Relative.PQL.Age.plot.pdf", plot = Relative.PQL.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.SSL.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=SSL, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.55, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME SSL") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.SSL.Age.plot
ggsave("Relative.SSL.Age.plot.pdf", plot = Relative.SSL.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.ISL.gracile.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=ISL.gracile, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 4.2, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME ISL/GRACILE") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.ISL.gracile.Age.plot
ggsave("Relative.ISL.gracile.Age.plot.pdf", plot = Relative.ISL.gracile.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Biventer.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Biventer, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.7, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME BIVENTER") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Biventer.Age.plot
ggsave("Relative.Biventer.Age.plot.pdf", plot = Relative.Biventer.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Tonsilla.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Tonsilla, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.72, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME TONSILLA") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Tonsilla.Age.plot
ggsave("Relative.Tonsilla.Age.plot.pdf", plot = Relative.Tonsilla.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Flocculus.Age.plot <-  ggplot(Brainstem.Cerebellum.relative, aes(y=Flocculus, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", linetype = "longdash", size = 0.5, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.5, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.105, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME FLOCCULUS") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Flocculus.Age.plot
ggsave("Relative.Flocculus.Age.plot.pdf", plot = Relative.Flocculus.Age.plot, width = 8, height = 6, units = "in", dpi = 600)

The Ventricular System

Absolute Volumes


Total.volume.ventricles <- All.Volumes$`Total volume ventricles`
LV.total <-  All.Volumes$`Total volume lateral ventricles`
LV.frontal.horn <- All.Volumes$`Total volume frontal horn`
LV.body <- All.Volumes$`Total volume body of LV`
LV.atrium <- All.Volumes$`Total volume atrium`
LV.occipital.horn <- All.Volumes$`Total volume occipital horn`
LV.temporal.horn <- All.Volumes$`Total volume temporal horn`
Third.ventricle <- All.Volumes$`3rd ventricle`
Fourth.ventricle.total <- All.Volumes$`4th ventricle`
Apex <- All.Volumes$`Apex of 4th`
Lateral.recess <- All.Volumes$`Total volume lateral recess`
Obex <- All.Volumes$`Obex of 4th`
Fastigium <- All.Volumes$Fastigium

Ventricles.absolute <- as.data.frame(cbind(
Total.volume.ventricles,
LV.total,
LV.frontal.horn,
LV.body, 
LV.atrium, 
LV.occipital.horn, 
LV.temporal.horn, 
Third.ventricle, 
Fourth.ventricle.total,
Apex,
Lateral.recess,
Obex,
Fastigium
))

Ventricles.absolute$Gender <- All.Volumes$Gender

Table.Ventricles.absolute <- CreateTableOne(
  vars = c("Total.volume.ventricles",
"LV.total",
"LV.frontal.horn",
"LV.body", 
"LV.atrium", 
"LV.occipital.horn", 
"LV.temporal.horn", 
"Third.ventricle", 
"Fourth.ventricle.total",
"Apex",
"Lateral.recess",
"Obex",
"Fastigium"),
  data = Ventricles.absolute)

Table.Ventricles.absolute.stratified.gender <- CreateTableOne(
  vars = c("Total.volume.ventricles",
"LV.total",
"LV.frontal.horn",
"LV.body", 
"LV.atrium", 
"LV.occipital.horn", 
"LV.temporal.horn", 
"Third.ventricle", 
"Fourth.ventricle.total",
"Apex",
"Lateral.recess",
"Obex",
"Fastigium"),
strata = c("Gender"),
  data = Ventricles.absolute)

Table.Ventricles.absolute <- print(Table.Ventricles.absolute, contDigits = 10)
                                     
                                      Overall                            
  n                                                 30                   
  Total.volume.ventricles (mean (SD)) 21184.5666666667 (16714.0388331514)
  LV.total (mean (SD))                18429.8333333333 (15998.6774174991)
  LV.frontal.horn (mean (SD))          6124.0666666667 (5138.9726528205) 
  LV.body (mean (SD))                  4852.4333333333 (4797.8072123759) 
  LV.atrium (mean (SD))                5499.3666666667 (5464.3878193472) 
  LV.occipital.horn (mean (SD))        1093.7000000000 (1013.8288691205) 
  LV.temporal.horn (mean (SD))          860.3333333333 (619.2339724560)  
  Third.ventricle (mean (SD))          1134.4000000000 (807.5322391344)  
  Fourth.ventricle.total (mean (SD))   1620.4000000000 (345.0322923418)  
  Apex (mean (SD))                      162.8333333333 (45.5911994936)   
  Lateral.recess (mean (SD))            198.6666666667 (46.2708169989)   
  Obex (mean (SD))                      174.4000000000 (109.4032717156)  
  Fastigium (mean (SD))                 199.3333333333 (53.8640263379)   
Table.Ventricles.absolute.stratified.gender <- print(Table.Ventricles.absolute.stratified.gender, contDigits = 10)
                                     Stratified by Gender
                                      f                                   m                                   p      test
  n                                                 14                                  16                               
  Total.volume.ventricles (mean (SD)) 19612.2857142857 (16045.3969552189) 22560.3125000000 (17681.6478029952)  0.638     
  LV.total (mean (SD))                17214.2857142857 (15961.2766090000) 19493.4375000000 (16476.3998614938)  0.704     
  LV.frontal.horn (mean (SD))          6001.6428571429 (5667.2323133437)   6231.1875000000 (4816.2291365583)   0.905     
  LV.body (mean (SD))                  4804.7857142857 (5434.6698035508)   4894.1250000000 (4347.6185492750)   0.960     
  LV.atrium (mean (SD))                4547.0714285714 (3755.7582347087)   6332.6250000000 (6626.9495031022)   0.381     
  LV.occipital.horn (mean (SD))        1175.2857142857 (1256.6319104025)   1022.3125000000 (779.0714745773)    0.688     
  LV.temporal.horn (mean (SD))          685.4285714286 (400.5451504917)    1013.3750000000 (740.7818279809)    0.151     
  Third.ventricle (mean (SD))           847.3571428571 (371.9043729742)    1385.5625000000 (998.3400201501)    0.068     
  Fourth.ventricle.total (mean (SD))   1550.7142857143 (294.6558432037)    1681.3750000000 (382.6409761992)    0.309     
  Apex (mean (SD))                      153.0000000000 (44.1047703682)      171.4375000000 (46.5130358072)     0.277     
  Lateral.recess (mean (SD))            195.2857142857 (45.7391072723)      201.6250000000 (48.0220435495)     0.715     
  Obex (mean (SD))                      179.5714285714 (109.0622364917)     169.8750000000 (113.0698161904)    0.813     
  Fastigium (mean (SD))                 194.2142857143 (54.4880771312)      203.8125000000 (54.6835974798)     0.635     
write.csv(Table.Ventricles.absolute, "Table.Ventricles.absolute.csv")
write.csv(Table.Ventricles.absolute.stratified.gender, "Table.Ventricles.absolute.stratified.gender.csv")

Table.Ventricles.absolute.RSD <- as.data.frame(Table.Ventricles.absolute)
Table.Ventricles.absolute.RSD <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Ventricles.absolute.RSD[-1,]),' (',fixed=TRUE)))
Table.Ventricles.absolute.RSD <- data.frame(cbind(str_replace_all(Table.Ventricles.absolute.RSD$X1, "[ ]", ""),
                                                            str_replace_all(Table.Ventricles.absolute.RSD$X2, "[)]", "")))
Table.Ventricles.absolute.RSD$X1 <- as.character(Table.Ventricles.absolute.RSD$X1)
Table.Ventricles.absolute.RSD$X2 <- as.character(Table.Ventricles.absolute.RSD$X2)
Table.Ventricles.absolute.RSD <- as.data.frame(sapply(Table.Ventricles.absolute.RSD, as.numeric))
Table.Ventricles.absolute.RSD <- as.data.frame(Table.Ventricles.absolute.RSD$X2/Table.Ventricles.absolute.RSD$X1)
Table.Ventricles.absolute.RSD <- round(Table.Ventricles.absolute.RSD * 100, 1)


Table.Ventricles.absolute.stratified.gender.RSD <- as.data.frame(Table.Ventricles.absolute.stratified.gender)
Table.Ventricles.absolute.stratified.gender.RSD <- select(Table.Ventricles.absolute.stratified.gender.RSD, - c(p, test))

Table.Ventricles.absolute.stratified.gender.RSD.female <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Ventricles.absolute.stratified.gender.RSD[-1, "f"]),
                                                                       ' (',fixed=TRUE)))
Table.Ventricles.absolute.stratified.gender.RSD.female <- data.frame(cbind(str_replace_all(Table.Ventricles.absolute.stratified.gender.RSD.female$X1, "[ ]", ""),
                                                            str_replace_all(Table.Ventricles.absolute.stratified.gender.RSD.female$X2, "[)]", "")))
Table.Ventricles.absolute.stratified.gender.RSD.female$X1 <- as.character(Table.Ventricles.absolute.stratified.gender.RSD.female$X1)
Table.Ventricles.absolute.stratified.gender.RSD.female$X2 <- as.character(Table.Ventricles.absolute.stratified.gender.RSD.female$X2)
Table.Ventricles.absolute.stratified.gender.RSD.female <- as.data.frame(sapply(Table.Ventricles.absolute.stratified.gender.RSD.female, as.numeric))
Table.Ventricles.absolute.stratified.gender.RSD.female <- as.data.frame(Table.Ventricles.absolute.stratified.gender.RSD.female$X2/Table.Ventricles.absolute.stratified.gender.RSD.female$X1)
Table.Ventricles.absolute.stratified.gender.RSD.female <- round(Table.Ventricles.absolute.stratified.gender.RSD.female * 100, 1)

Table.Ventricles.absolute.stratified.gender.RSD.male <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Ventricles.absolute.stratified.gender.RSD[-1, "m"]),
                                                                       ' (',fixed=TRUE)))
Table.Ventricles.absolute.stratified.gender.RSD.male <- data.frame(cbind(str_replace_all(Table.Ventricles.absolute.stratified.gender.RSD.male$X1, "[ ]", ""),
                                                            str_replace_all(Table.Ventricles.absolute.stratified.gender.RSD.male$X2, "[)]", "")))
Table.Ventricles.absolute.stratified.gender.RSD.male$X1 <- as.character(Table.Ventricles.absolute.stratified.gender.RSD.male$X1)
Table.Ventricles.absolute.stratified.gender.RSD.male$X2 <- as.character(Table.Ventricles.absolute.stratified.gender.RSD.male$X2)
Table.Ventricles.absolute.stratified.gender.RSD.male <- as.data.frame(sapply(Table.Ventricles.absolute.stratified.gender.RSD.male, as.numeric))
Table.Ventricles.absolute.stratified.gender.RSD.male <- as.data.frame(Table.Ventricles.absolute.stratified.gender.RSD.male$X2/Table.Ventricles.absolute.stratified.gender.RSD.male$X1)
Table.Ventricles.absolute.stratified.gender.RSD.male <- round(Table.Ventricles.absolute.stratified.gender.RSD.male * 100, 1)

kable(Table.Ventricles.absolute)

Overall
n 30
Total.volume.ventricles (mean (SD)) 21184.5666666667 (16714.0388331514)
LV.total (mean (SD)) 18429.8333333333 (15998.6774174991)
LV.frontal.horn (mean (SD)) 6124.0666666667 (5138.9726528205)
LV.body (mean (SD)) 4852.4333333333 (4797.8072123759)
LV.atrium (mean (SD)) 5499.3666666667 (5464.3878193472)
LV.occipital.horn (mean (SD)) 1093.7000000000 (1013.8288691205)
LV.temporal.horn (mean (SD)) 860.3333333333 (619.2339724560)
Third.ventricle (mean (SD)) 1134.4000000000 (807.5322391344)
Fourth.ventricle.total (mean (SD)) 1620.4000000000 (345.0322923418)
Apex (mean (SD)) 162.8333333333 (45.5911994936)
Lateral.recess (mean (SD)) 198.6666666667 (46.2708169989)
Obex (mean (SD)) 174.4000000000 (109.4032717156)
Fastigium (mean (SD)) 199.3333333333 (53.8640263379)

kable(Table.Ventricles.absolute.RSD)

Table.Ventricles.absolute.RSDX2/Table.Ventricles.absolute.RSDX1
78.9
86.8
83.9
98.9
99.4
92.7
72.0
71.2
21.3
28.0
23.3
62.7
27.0

kable(Table.Ventricles.absolute.stratified.gender)

f m p test
n 14 16
Total.volume.ventricles (mean (SD)) 19612.2857142857 (16045.3969552189) 22560.3125000000 (17681.6478029952) 0.638
LV.total (mean (SD)) 17214.2857142857 (15961.2766090000) 19493.4375000000 (16476.3998614938) 0.704
LV.frontal.horn (mean (SD)) 6001.6428571429 (5667.2323133437) 6231.1875000000 (4816.2291365583) 0.905
LV.body (mean (SD)) 4804.7857142857 (5434.6698035508) 4894.1250000000 (4347.6185492750) 0.960
LV.atrium (mean (SD)) 4547.0714285714 (3755.7582347087) 6332.6250000000 (6626.9495031022) 0.381
LV.occipital.horn (mean (SD)) 1175.2857142857 (1256.6319104025) 1022.3125000000 (779.0714745773) 0.688
LV.temporal.horn (mean (SD)) 685.4285714286 (400.5451504917) 1013.3750000000 (740.7818279809) 0.151
Third.ventricle (mean (SD)) 847.3571428571 (371.9043729742) 1385.5625000000 (998.3400201501) 0.068
Fourth.ventricle.total (mean (SD)) 1550.7142857143 (294.6558432037) 1681.3750000000 (382.6409761992) 0.309
Apex (mean (SD)) 153.0000000000 (44.1047703682) 171.4375000000 (46.5130358072) 0.277
Lateral.recess (mean (SD)) 195.2857142857 (45.7391072723) 201.6250000000 (48.0220435495) 0.715
Obex (mean (SD)) 179.5714285714 (109.0622364917) 169.8750000000 (113.0698161904) 0.813
Fastigium (mean (SD)) 194.2142857143 (54.4880771312) 203.8125000000 (54.6835974798) 0.635

kable(Table.Ventricles.absolute.stratified.gender.RSD.female)

Table.Ventricles.absolute.stratified.gender.RSD.femaleX2/Table.Ventricles.absolute.stratified.gender.RSD.femaleX1
81.8
92.7
94.4
113.1
82.6
106.9
58.4
43.9
19.0
28.8
23.4
60.7
28.1

kable(Table.Ventricles.absolute.stratified.gender.RSD.male)

Table.Ventricles.absolute.stratified.gender.RSD.maleX2/Table.Ventricles.absolute.stratified.gender.RSD.maleX1
78.4
84.5
77.3
88.8
104.6
76.2
73.1
72.1
22.8
27.1
23.8
66.6
26.8

NA

Ventricles.absolute <- select(Ventricles.absolute, - c(Gender))
Ventricles.absolute.red <- select(Ventricles.absolute, - c(Total.volume.ventricles))

names.anatomical.structures.temporary <- c("LV.total",
"LV.frontal.horn",
"LV.body", 
"LV.atrium", 
"LV.occipital.horn", 
"LV.temporal.horn", 
"Third.ventricle", 
"Fourth.ventricle.total",
"Apex",
"Lateral.recess",
"Obex",
"Fastigium")

names.anatomical.structures.definitive <- c("LV- Total",
"LV - Frontal horn",
"LV - Body", 
"LV - Atrium", 
"LV - Occipital horn", 
"LV - Temporal horn", 
"Third ventricle", 
"Fourth ventricle - Total",
"Apex",
"Lateral recess",
"Obex",
"Fastigium")

Ventricles.absolute.plotdata <- gather(Ventricles.absolute.red, "anatomical.structure", "relative.volume")
Ventricles.absolute.plotdata$Gender <- All.Volumes$Gender
Ventricles.absolute.plotdata$Age <- All.Volumes$`Age (years)`

Ventricles.absolute.plotdata$Gender <- factor(Ventricles.absolute.plotdata$Gender, levels = c("f", "m"), c("f", "m"))
Ventricles.absolute.plotdata$anatomical.structure <- factor(Ventricles.absolute.plotdata$anatomical.structure, 
                                                                levels = rev(c(names.anatomical.structures.temporary)), rev(c(names.anatomical.structures.definitive)))

Ventricles.absolute.plot <-  ggplot(Ventricles.absolute.plotdata, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Absolute volume (in mm3)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("VENTRICULAR SYSTEM") +
  theme(plot.title = element_text(hjust = 0.5))

Ventricles.absolute.plot
ggsave("Ventricles.absolute.plot.pdf", plot = Ventricles.absolute.plot, width = 12, height = 5, units = "in", dpi = 600)


Total.ventricles.Age.plot <-  ggplot(All.Volumes, aes(y=`Total volume ventricles`, x = `Age (years)`))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 82000, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME total ventricular system") +
  theme(plot.title = element_text(hjust = 0.5))
Total.ventricles.Age.plot
ggsave("Total.Total.ventricles.Age.plot.pdf", plot = Total.ventricles.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Lateral.ventricle.Age.plot <- ggplot(All.Volumes, aes(y=`Total volume lateral ventricles`, x = `Age (years)`))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 72000, label.x = 65, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME lateral ventricles") +
  theme(plot.title = element_text(hjust = 0.5))
Lateral.ventricle.Age.plot
ggsave("Total.Lateral.ventricle.Age.plot.pdf", plot = Lateral.ventricle.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Lateral.ventricle.frontal.horn.Age.plot <- ggplot(All.Volumes, aes(y=`Total volume frontal horn`, x = `Age (years)`))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 21000, label.x = 65, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME frontal horn") +
  theme(plot.title = element_text(hjust = 0.5))
Lateral.ventricle.frontal.horn.Age.plot
ggsave("Total.Lateral.ventricle.frontal.horn.Age.plot.pdf", plot = Lateral.ventricle.frontal.horn.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Lateral.ventricle.body.Age.plot <- ggplot(All.Volumes, aes(y=`Total volume body of LV`, x = `Age (years)`))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 19000, label.x = 65, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME body") +
  theme(plot.title = element_text(hjust = 0.5))
Lateral.ventricle.body.Age.plot
ggsave("Total.Lateral.ventricle.body.Age.plot.pdf", plot = Lateral.ventricle.body.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Lateral.ventricle.atrium.Age.plot <- ggplot(All.Volumes, aes(y=`Total volume atrium`, x = `Age (years)`))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 24000, label.x = 65, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME atrium") +
  theme(plot.title = element_text(hjust = 0.5))
Lateral.ventricle.atrium.Age.plot
ggsave("Total.Lateral.ventricle.atrium.Age.plot.pdf", plot = Lateral.ventricle.atrium.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Lateral.ventricle.occipital.horn.Age.plot <- ggplot(All.Volumes, aes(y=`Total volume occipital horn`, x = `Age (years)`))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 4100, label.x = 65, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME occipital horn") +
  theme(plot.title = element_text(hjust = 0.5))
Lateral.ventricle.occipital.horn.Age.plot
ggsave("Total.Lateral.ventricle.occipital.horn.Age.plot.pdf", plot = Lateral.ventricle.occipital.horn.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Lateral.ventricle.temporal.horn.Age.plot <- ggplot(All.Volumes, aes(y=`Total volume temporal horn`, x = `Age (years)`))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 3100, label.x = 65, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME temporal horn") +
  theme(plot.title = element_text(hjust = 0.5))
Lateral.ventricle.temporal.horn.Age.plot
ggsave("Total.Lateral.ventricle.temporal.horn.Age.plot.pdf", plot = Lateral.ventricle.temporal.horn.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Third.ventricle.Age.plot <- ggplot(All.Volumes, aes(y =`3rd ventricle`, x = `Age (years)`))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 4250, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME third ventricle") +
  theme(plot.title = element_text(hjust = 0.5))
Third.ventricle.Age.plot
ggsave("Total.Third.ventricle.Age.plot.pdf", plot = Third.ventricle.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Fourth.ventricle.Age.plot <- ggplot(All.Volumes, aes(y =`4th ventricle`, x = `Age (years)`))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2700, label.x = 70, color = "dodgerblue4") +
  ylab("Volume in mm3") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("ABSOLUTE VOLUME fourth ventricle") +
  theme(plot.title = element_text(hjust = 0.5))
Fourth.ventricle.Age.plot
ggsave("Total.Fourth.ventricle.Age.plot.pdf", plot = Fourth.ventricle.Age.plot, width = 8, height = 6, units = "in", dpi = 600)

Relative Volumes 1: Normalized to Total Encephalic Volume


#Ventricles.absolute <- select(Ventricles.absolute, - c(Gender))
Total.ventricular.volume.relative <- (100 * (Ventricles.absolute$Total.volume.ventricles/All.Volumes$`Total encephalic volume (without ventricles)`))

Ventricles.relative <- (100 * (Ventricles.absolute[, -1]/All.Volumes$`Total encephalic volume (without ventricles)`))

Table.Ventricles.relative <- cbind(Total.ventricular.volume.relative, Ventricles.relative)

Table.Ventricles.relative$Gender <- All.Volumes$Gender

Table.Ventricles.relative1 <- CreateTableOne(
  vars = c("Total.ventricular.volume.relative",
"LV.total",
"LV.frontal.horn",
"LV.body", 
"LV.atrium", 
"LV.occipital.horn", 
"LV.temporal.horn", 
"Third.ventricle", 
"Fourth.ventricle.total",
"Apex",
"Lateral.recess",
"Obex",
"Fastigium"),
  data = Table.Ventricles.relative)

Table.Ventricles.relative.stratified.gender <- CreateTableOne(
  vars = c("Total.ventricular.volume.relative",
"LV.total",
"LV.frontal.horn",
"LV.body", 
"LV.atrium", 
"LV.occipital.horn", 
"LV.temporal.horn", 
"Third.ventricle", 
"Fourth.ventricle.total",
"Apex",
"Lateral.recess",
"Obex",
"Fastigium"),
strata = c("Gender"),
  data = Table.Ventricles.relative)

Table.Ventricles.relative1 <- print(Table.Ventricles.relative1, contDigits = 10)
                                               
                                                Overall                    
  n                                                       30               
  Total.ventricular.volume.relative (mean (SD)) 1.9273127232 (1.5160752528)
  LV.total (mean (SD))                          1.6743917636 (1.4458630666)
  LV.frontal.horn (mean (SD))                   0.5544339978 (0.4457583254)
  LV.body (mean (SD))                           0.4411089345 (0.4277559363)
  LV.atrium (mean (SD))                         0.4999720439 (0.5129573777)
  LV.occipital.horn (mean (SD))                 0.0992362568 (0.0919251551)
  LV.temporal.horn (mean (SD))                  0.0796461516 (0.0609277346)
  Third.ventricle (mean (SD))                   0.1036226244 (0.0756082790)
  Fourth.ventricle.total (mean (SD))            0.1493055163 (0.0331934574)
  Apex (mean (SD))                              0.0149830331 (0.0042490310)
  Lateral.recess (mean (SD))                    0.0182578178 (0.0041320330)
  Obex (mean (SD))                              0.0159650951 (0.0097282418)
  Fastigium (mean (SD))                         0.0183133305 (0.0048392615)
Table.Ventricles.relative.stratified.gender <- print(Table.Ventricles.relative.stratified.gender, contDigits = 10)
                                               Stratified by Gender
                                                f                           m                           p      test
  n                                                       14                          16                           
  Total.ventricular.volume.relative (mean (SD)) 1.8554635462 (1.3268579426) 1.9901807530 (1.7055469213)  0.813     
  LV.total (mean (SD))                          1.6208567323 (1.3239504826) 1.7212349160 (1.5866708182)  0.853     
  LV.frontal.horn (mean (SD))                   0.5647158943 (0.4689867048) 0.5454373384 (0.4397126405)  0.908     
  LV.body (mean (SD))                           0.4491770751 (0.4459306767) 0.4340493115 (0.4257907279)  0.925     
  LV.atrium (mean (SD))                         0.4293273395 (0.3142686102) 0.5617861603 (0.6437228077)  0.490     
  LV.occipital.horn (mean (SD))                 0.1112826435 (0.1145831457) 0.0886956685 (0.0685889424)  0.512     
  LV.temporal.horn (mean (SD))                  0.0663469710 (0.0375726047) 0.0912829346 (0.0751259289)  0.271     
  Third.ventricle (mean (SD))                   0.0826068089 (0.0357482716) 0.1220114630 (0.0957687648)  0.158     
  Fourth.ventricle.total (mean (SD))            0.1520088916 (0.0289166876) 0.1469400629 (0.0373186717)  0.684     
  Apex (mean (SD))                              0.0150095263 (0.0043100506) 0.0149598516 (0.0043363600)  0.975     
  Lateral.recess (mean (SD))                    0.0190608542 (0.0040699140) 0.0175551609 (0.0041862858)  0.328     
  Obex (mean (SD))                              0.0174969331 (0.0102282698) 0.0146247369 (0.0093911238)  0.429     
  Fastigium (mean (SD))                         0.0189991246 (0.0050327628) 0.0177132608 (0.0047435307)  0.477     

Table.Ventricles.relative1.RSD <- as.data.frame(Table.Ventricles.relative1)
Table.Ventricles.relative1.RSD <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Ventricles.relative1.RSD[-1,]),
                                                                       ' (',fixed=TRUE)))
Table.Ventricles.relative1.RSD <- data.frame(cbind(str_replace_all(Table.Ventricles.relative1.RSD$X1, "[ ]", ""),
                                                            str_replace_all(Table.Ventricles.relative1.RSD$X2, "[)]", "")))
Table.Ventricles.relative1.RSD$X1 <- as.character(Table.Ventricles.relative1.RSD$X1)
Table.Ventricles.relative1.RSD$X2 <- as.character(Table.Ventricles.relative1.RSD$X2)
Table.Ventricles.relative1.RSD <- as.data.frame(sapply(Table.Ventricles.relative1.RSD, as.numeric))
Table.Ventricles.relative1.RSD <- as.data.frame(Table.Ventricles.relative1.RSD$X2/Table.Ventricles.relative1.RSD$X1)
Table.Ventricles.relative1.RSD <- round(Table.Ventricles.relative1.RSD * 100, 1)


Table.Ventricles.relative.stratified.gender.RSD <- as.data.frame(Table.Ventricles.relative.stratified.gender)
Table.Ventricles.relative.stratified.gender.RSD <- select(Table.Ventricles.relative.stratified.gender.RSD, - c(p, test))

Table.Ventricles.relative.stratified.gender.RSD.female <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Ventricles.relative.stratified.gender.RSD[-1, "f"]),
                                                                       ' (',fixed=TRUE)))
Table.Ventricles.relative.stratified.gender.RSD.female <- data.frame(cbind(str_replace_all(Table.Ventricles.relative.stratified.gender.RSD.female$X1, "[ ]", ""),
                                                            str_replace_all(Table.Ventricles.relative.stratified.gender.RSD.female$X2, "[)]", "")))
Table.Ventricles.relative.stratified.gender.RSD.female$X1 <- as.character(Table.Ventricles.relative.stratified.gender.RSD.female$X1)
Table.Ventricles.relative.stratified.gender.RSD.female$X2 <- as.character(Table.Ventricles.relative.stratified.gender.RSD.female$X2)
Table.Ventricles.relative.stratified.gender.RSD.female <- as.data.frame(sapply(Table.Ventricles.relative.stratified.gender.RSD.female, as.numeric))
Table.Ventricles.relative.stratified.gender.RSD.female <- as.data.frame(Table.Ventricles.relative.stratified.gender.RSD.female$X2/Table.Ventricles.relative.stratified.gender.RSD.female$X1)
Table.Ventricles.relative.stratified.gender.RSD.female <- round(Table.Ventricles.relative.stratified.gender.RSD.female * 100, 1)

Table.Ventricles.relative.stratified.gender.RSD.male <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Ventricles.relative.stratified.gender.RSD[-1, "m"]),
                                                                       ' (',fixed=TRUE)))
Table.Ventricles.relative.stratified.gender.RSD.male <- data.frame(cbind(str_replace_all(Table.Ventricles.relative.stratified.gender.RSD.male$X1, "[ ]", ""),
                                                            str_replace_all(Table.Ventricles.relative.stratified.gender.RSD.male$X2, "[)]", "")))
Table.Ventricles.relative.stratified.gender.RSD.male$X1 <- as.character(Table.Ventricles.relative.stratified.gender.RSD.male$X1)
Table.Ventricles.relative.stratified.gender.RSD.male$X2 <- as.character(Table.Ventricles.relative.stratified.gender.RSD.male$X2)
Table.Ventricles.relative.stratified.gender.RSD.male <- as.data.frame(sapply(Table.Ventricles.relative.stratified.gender.RSD.male, as.numeric))
Table.Ventricles.relative.stratified.gender.RSD.male <- as.data.frame(Table.Ventricles.relative.stratified.gender.RSD.male$X2/Table.Ventricles.relative.stratified.gender.RSD.male$X1)
Table.Ventricles.relative.stratified.gender.RSD.male <- round(Table.Ventricles.relative.stratified.gender.RSD.male * 100, 1)

kable(Table.Ventricles.relative1)

Overall
n 30
Total.ventricular.volume.relative (mean (SD)) 1.9273127232 (1.5160752528)
LV.total (mean (SD)) 1.6743917636 (1.4458630666)
LV.frontal.horn (mean (SD)) 0.5544339978 (0.4457583254)
LV.body (mean (SD)) 0.4411089345 (0.4277559363)
LV.atrium (mean (SD)) 0.4999720439 (0.5129573777)
LV.occipital.horn (mean (SD)) 0.0992362568 (0.0919251551)
LV.temporal.horn (mean (SD)) 0.0796461516 (0.0609277346)
Third.ventricle (mean (SD)) 0.1036226244 (0.0756082790)
Fourth.ventricle.total (mean (SD)) 0.1493055163 (0.0331934574)
Apex (mean (SD)) 0.0149830331 (0.0042490310)
Lateral.recess (mean (SD)) 0.0182578178 (0.0041320330)
Obex (mean (SD)) 0.0159650951 (0.0097282418)
Fastigium (mean (SD)) 0.0183133305 (0.0048392615)

kable(Table.Ventricles.relative1.RSD)

Table.Ventricles.relative1.RSDX2/Table.Ventricles.relative1.RSDX1
78.7
86.4
80.4
97.0
102.6
92.6
76.5
73.0
22.2
28.4
22.6
60.9
26.4

kable(Table.Ventricles.relative.stratified.gender)

f m p test
n 14 16
Total.ventricular.volume.relative (mean (SD)) 1.8554635462 (1.3268579426) 1.9901807530 (1.7055469213) 0.813
LV.total (mean (SD)) 1.6208567323 (1.3239504826) 1.7212349160 (1.5866708182) 0.853
LV.frontal.horn (mean (SD)) 0.5647158943 (0.4689867048) 0.5454373384 (0.4397126405) 0.908
LV.body (mean (SD)) 0.4491770751 (0.4459306767) 0.4340493115 (0.4257907279) 0.925
LV.atrium (mean (SD)) 0.4293273395 (0.3142686102) 0.5617861603 (0.6437228077) 0.490
LV.occipital.horn (mean (SD)) 0.1112826435 (0.1145831457) 0.0886956685 (0.0685889424) 0.512
LV.temporal.horn (mean (SD)) 0.0663469710 (0.0375726047) 0.0912829346 (0.0751259289) 0.271
Third.ventricle (mean (SD)) 0.0826068089 (0.0357482716) 0.1220114630 (0.0957687648) 0.158
Fourth.ventricle.total (mean (SD)) 0.1520088916 (0.0289166876) 0.1469400629 (0.0373186717) 0.684
Apex (mean (SD)) 0.0150095263 (0.0043100506) 0.0149598516 (0.0043363600) 0.975
Lateral.recess (mean (SD)) 0.0190608542 (0.0040699140) 0.0175551609 (0.0041862858) 0.328
Obex (mean (SD)) 0.0174969331 (0.0102282698) 0.0146247369 (0.0093911238) 0.429
Fastigium (mean (SD)) 0.0189991246 (0.0050327628) 0.0177132608 (0.0047435307) 0.477

kable(Table.Ventricles.relative.stratified.gender.RSD.female)

Table.Ventricles.relative.stratified.gender.RSD.femaleX2/Table.Ventricles.relative.stratified.gender.RSD.femaleX1
71.5
81.7
83.0
99.3
73.2
103.0
56.6
43.3
19.0
28.7
21.4
58.5
26.5

kable(Table.Ventricles.relative.stratified.gender.RSD.male)

Table.Ventricles.relative.stratified.gender.RSD.maleX2/Table.Ventricles.relative.stratified.gender.RSD.maleX1
85.7
92.2
80.6
98.1
114.6
77.3
82.3
78.5
25.4
29.0
23.8
64.2
26.8

NA

names.anatomical.structures.temporary <- c("LV.total",
"LV.frontal.horn",
"LV.body", 
"LV.atrium", 
"LV.occipital.horn", 
"LV.temporal.horn", 
"Third.ventricle", 
"Fourth.ventricle.total",
"Apex",
"Lateral.recess",
"Obex",
"Fastigium")

names.anatomical.structures.definitive <- c("LV- Total",
"LV - Frontal horn",
"LV - Body", 
"LV - Atrium", 
"LV - Occipital horn", 
"LV - Temporal horn", 
"Third ventricle", 
"Fourth ventricle - Total",
"Apex",
"Lateral recess",
"Obex",
"Fastigium")

Ventricles.relative.plotdata <- gather(Ventricles.relative, "anatomical.structure", "relative.volume")
Ventricles.relative.plotdata$Gender <- All.Volumes$Gender
Ventricles.relative.plotdata$Age <- All.Volumes$`Age (years)`

Ventricles.relative.plotdata$Gender <- factor(Ventricles.relative.plotdata$Gender, levels = c("f", "m"), c("f", "m"))
Ventricles.relative.plotdata$anatomical.structure <- factor(Ventricles.relative.plotdata$anatomical.structure, 
                                                                levels = rev(c(names.anatomical.structures.temporary)), rev(c(names.anatomical.structures.definitive)))

Ventricles.relative1.plot <-  ggplot(Ventricles.relative.plotdata, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Relative volume (in %)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("VENTRICULAR SYSTEM") +
  theme(plot.title = element_text(hjust = 0.5))

Ventricles.relative1.plot
ggsave("Ventricles.relative1.plot.pdf", plot = Ventricles.relative1.plot, width = 12, height = 5, units = "in", dpi = 600)


Ventricles.relative$Gender <- All.Volumes$Gender
Ventricles.relative$Age <- All.Volumes$`Age (years)`
Ventricles.relative$Total.ventricular <- Total.ventricular.volume.relative

Relative.Total.ventricular.Age.plot <-  ggplot(Ventricles.relative, aes(y=Total.ventricular, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 8.2, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME total ventricular system (E)") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Total.ventricular.Age.plot
ggsave("Relative.Total.ventricular.Age.plot.pdf", plot = Relative.Total.ventricular.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.LV.total.Age.plot <-  ggplot(Ventricles.relative, aes(y=LV.total, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 7.2, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME lateral ventricles (E)") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.LV.total.Age.plot
ggsave("Relative.LV.total.Age.plot.pdf", plot = Relative.LV.total.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.LV.frontal.horn.Age.plot <-  ggplot(Ventricles.relative, aes(y=LV.frontal.horn, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.9, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME frontal horn (E)") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.LV.frontal.horn.Age.plot
ggsave("Relative.LV.frontal.horn.Age.plot.pdf", plot = Relative.LV.frontal.horn.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.LV.body.Age.plot <-  ggplot(Ventricles.relative, aes(y=LV.body, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 1.9, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME body (E)") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.LV.body.Age.plot
ggsave("Relative.LV.body.Age.plot.pdf", plot = Relative.LV.body.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.LV.atrium.Age.plot <-  ggplot(Ventricles.relative, aes(y=LV.atrium, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 2.4, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME atrium (E)") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.LV.atrium.Age.plot
ggsave("Relative.LV.atrium.Age.plot.pdf", plot = Relative.LV.atrium.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.LV.occipital.horn.Age.plot <-  ggplot(Ventricles.relative, aes(y=LV.occipital.horn, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.37, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME occipital horn (E)") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.LV.occipital.horn.Age.plot
ggsave("Relative.LV.occipital.horn.Age.plot.pdf", plot = Relative.LV.occipital.horn.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.LV.temporal.horn.Age.plot <-  ggplot(Ventricles.relative, aes(y=LV.temporal.horn, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.28, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME temporal horn (E)") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.LV.temporal.horn.Age.plot
ggsave("Relative.LV.temporal.horn.Age.plot.pdf", plot = Relative.LV.temporal.horn.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Third.ventricle.Age.plot <-  ggplot(Ventricles.relative, aes(y=Third.ventricle, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.47, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME third ventricle (E)") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Third.ventricle.Age.plot
ggsave("Relative.Third.ventricle.Age.plot.pdf", plot = Relative.Third.ventricle.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


Relative.Fourth.ventricle.total.Age.plot <-  ggplot(Ventricles.relative, aes(y=Fourth.ventricle.total, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 0.26, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME fourth ventricle (E)") +
  theme(plot.title = element_text(hjust = 0.5))
Relative.Fourth.ventricle.total.Age.plot
ggsave("Relative.Fourth.ventricle.total.Age.plot.pdf", plot = Relative.Fourth.ventricle.total.Age.plot, width = 8, height = 6, units = "in", dpi = 600)

Relative Volumes 2: Normalized to Total Ventricular Volume


#Ventricles.absolute <- select(Ventricles.absolute, - c(Gender))
#Total.ventricular.volume.relative <- (100 * (Ventricles.absolute$Total.volume.ventricles/All.Volumes$`Total encephalic volume (without ventricles)`))

Ventricles.relative.V <- (100 * (Ventricles.absolute[, -1]/Total.volume.ventricles))

Table.Ventricles.relative.V <- Ventricles.relative.V

Table.Ventricles.relative.V$Gender <- All.Volumes$Gender

Table.Ventricles.relative.V.1 <- CreateTableOne(
  vars = c("LV.total",
"LV.frontal.horn",
"LV.body", 
"LV.atrium", 
"LV.occipital.horn", 
"LV.temporal.horn", 
"Third.ventricle", 
"Fourth.ventricle.total",
"Apex",
"Lateral.recess",
"Obex",
"Fastigium"),
  data = Table.Ventricles.relative.V)

Table.Ventricles.relative.V.stratified.gender <- CreateTableOne(
  vars = c("LV.total",
"LV.frontal.horn",
"LV.body", 
"LV.atrium", 
"LV.occipital.horn", 
"LV.temporal.horn", 
"Third.ventricle", 
"Fourth.ventricle.total",
"Apex",
"Lateral.recess",
"Obex",
"Fastigium"),
strata = c("Gender"),
  data = Table.Ventricles.relative.V)

Table.Ventricles.relative.V.1 <- print(Table.Ventricles.relative.V.1, contDigits = 10)
                                    
                                     Overall                     
  n                                             30               
  LV.total (mean (SD))               83.2019241187 (6.8352468610)
  LV.frontal.horn (mean (SD))        28.1033071294 (4.6967677272)
  LV.body (mean (SD))                21.1173441521 (4.9285078989)
  LV.atrium (mean (SD))              24.1985317285 (5.9615108255)
  LV.occipital.horn (mean (SD))       4.9538082192 (2.6076054839)
  LV.temporal.horn (mean (SD))        4.8294159930 (2.7406173762)
  Third.ventricle (mean (SD))         6.0195881402 (1.7866435917)
  Fourth.ventricle.total (mean (SD)) 10.7788178347 (5.5922504933)
  Apex (mean (SD))                    1.1099936692 (0.6736993658)
  Lateral.recess (mean (SD))          1.3060807781 (0.6557212781)
  Obex (mean (SD))                    1.1389316903 (0.8450359678)
  Fastigium (mean (SD))               1.3124771989 (0.6617054188)
Table.Ventricles.relative.V.stratified.gender <- print(Table.Ventricles.relative.V.stratified.gender, contDigits = 10)
                                    Stratified by Gender
                                     f                            m                            p      test
  n                                             14                           16                           
  LV.total (mean (SD))               82.9014835540 (8.2210783349) 83.4648096127 (5.6208437624)  0.826     
  LV.frontal.horn (mean (SD))        28.7486156433 (4.3258459503) 27.5386621798 (5.0697128006)  0.491     
  LV.body (mean (SD))                21.5355720813 (6.0195063390) 20.7513947142 (3.9053473560)  0.671     
  LV.atrium (mean (SD))              22.9934302143 (4.6642173365) 25.2529955534 (6.8785301050)  0.309     
  LV.occipital.horn (mean (SD))       5.3475006354 (2.7639521142)  4.6093273550 (2.5007651169)  0.449     
  LV.temporal.horn (mean (SD))        4.2757800011 (1.9524248970)  5.3138474860 (3.2682007737)  0.309     
  Third.ventricle (mean (SD))         5.4244625196 (1.9402082378)  6.5403230583 (1.5129745442)  0.088     
  Fourth.ventricle.total (mean (SD)) 11.6741098633 (6.5598775626)  9.9954373097 (4.6652485061)  0.422     
  Apex (mean (SD))                    1.1864994023 (0.7826748904)  1.0430511527 (0.5799465405)  0.570     
  Lateral.recess (mean (SD))          1.4379087032 (0.7630568986)  1.1907313436 (0.5442810149)  0.311     
  Obex (mean (SD))                    1.3338238640 (0.9841474404)  0.9684010383 (0.6889767649)  0.244     
  Fastigium (mean (SD))               1.4478393571 (0.7744449436)  1.1940353105 (0.5428226641)  0.303     

Table.Ventricles.relative.V.1.RSD <- as.data.frame(Table.Ventricles.relative.V.1)
Table.Ventricles.relative.V.1.RSD <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Ventricles.relative.V.1.RSD[-1,]),
                                                                       ' (',fixed=TRUE)))
Table.Ventricles.relative.V.1.RSD <- data.frame(cbind(str_replace_all(Table.Ventricles.relative.V.1.RSD$X1, "[ ]", ""),
                                                            str_replace_all(Table.Ventricles.relative.V.1.RSD$X2, "[)]", "")))
Table.Ventricles.relative.V.1.RSD$X1 <- as.character(Table.Ventricles.relative.V.1.RSD$X1)
Table.Ventricles.relative.V.1.RSD$X2 <- as.character(Table.Ventricles.relative.V.1.RSD$X2)
Table.Ventricles.relative.V.1.RSD <- as.data.frame(sapply(Table.Ventricles.relative.V.1.RSD, as.numeric))
Table.Ventricles.relative.V.1.RSD <- as.data.frame(Table.Ventricles.relative.V.1.RSD$X2/Table.Ventricles.relative.V.1.RSD$X1)
Table.Ventricles.relative.V.1.RSD <- round(Table.Ventricles.relative.V.1.RSD * 100, 1)


Table.Ventricles.relative.V.stratified.gender.RSD <- as.data.frame(Table.Ventricles.relative.V.stratified.gender)
Table.Ventricles.relative.V.stratified.gender.RSD <- select(Table.Ventricles.relative.V.stratified.gender.RSD, - c(p, test))

Table.Ventricles.relative.V.stratified.gender.RSD.female <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Ventricles.relative.V.stratified.gender.RSD[-1, "f"]),
                                                                       ' (',fixed=TRUE)))
Table.Ventricles.relative.V.stratified.gender.RSD.female <- data.frame(cbind(str_replace_all(Table.Ventricles.relative.V.stratified.gender.RSD.female$X1, "[ ]", ""),
                                                            str_replace_all(Table.Ventricles.relative.V.stratified.gender.RSD.female$X2, "[)]", "")))
Table.Ventricles.relative.V.stratified.gender.RSD.female$X1 <- as.character(Table.Ventricles.relative.V.stratified.gender.RSD.female$X1)
Table.Ventricles.relative.V.stratified.gender.RSD.female$X2 <- as.character(Table.Ventricles.relative.V.stratified.gender.RSD.female$X2)
Table.Ventricles.relative.V.stratified.gender.RSD.female <- as.data.frame(sapply(Table.Ventricles.relative.V.stratified.gender.RSD.female, as.numeric))
Table.Ventricles.relative.V.stratified.gender.RSD.female <- as.data.frame(Table.Ventricles.relative.V.stratified.gender.RSD.female$X2/Table.Ventricles.relative.V.stratified.gender.RSD.female$X1)
Table.Ventricles.relative.V.stratified.gender.RSD.female <- round(Table.Ventricles.relative.V.stratified.gender.RSD.female * 100, 1)

Table.Ventricles.relative.V.stratified.gender.RSD.male <- data.frame(do.call('rbind', 
                                                              strsplit(as.character(Table.Ventricles.relative.V.stratified.gender.RSD[-1, "m"]),
                                                                       ' (',fixed=TRUE)))
Table.Ventricles.relative.V.stratified.gender.RSD.male <- data.frame(cbind(str_replace_all(Table.Ventricles.relative.V.stratified.gender.RSD.male$X1, "[ ]", ""),
                                                            str_replace_all(Table.Ventricles.relative.V.stratified.gender.RSD.male$X2, "[)]", "")))
Table.Ventricles.relative.V.stratified.gender.RSD.male$X1 <- as.character(Table.Ventricles.relative.V.stratified.gender.RSD.male$X1)
Table.Ventricles.relative.V.stratified.gender.RSD.male$X2 <- as.character(Table.Ventricles.relative.V.stratified.gender.RSD.male$X2)
Table.Ventricles.relative.V.stratified.gender.RSD.male <- as.data.frame(sapply(Table.Ventricles.relative.V.stratified.gender.RSD.male, as.numeric))
Table.Ventricles.relative.V.stratified.gender.RSD.male <- as.data.frame(Table.Ventricles.relative.V.stratified.gender.RSD.male$X2/Table.Ventricles.relative.V.stratified.gender.RSD.male$X1)
Table.Ventricles.relative.V.stratified.gender.RSD.male <- round(Table.Ventricles.relative.V.stratified.gender.RSD.male * 100, 1)

kable(Table.Ventricles.relative.V.1)

Overall
n 30
LV.total (mean (SD)) 83.2019241187 (6.8352468610)
LV.frontal.horn (mean (SD)) 28.1033071294 (4.6967677272)
LV.body (mean (SD)) 21.1173441521 (4.9285078989)
LV.atrium (mean (SD)) 24.1985317285 (5.9615108255)
LV.occipital.horn (mean (SD)) 4.9538082192 (2.6076054839)
LV.temporal.horn (mean (SD)) 4.8294159930 (2.7406173762)
Third.ventricle (mean (SD)) 6.0195881402 (1.7866435917)
Fourth.ventricle.total (mean (SD)) 10.7788178347 (5.5922504933)
Apex (mean (SD)) 1.1099936692 (0.6736993658)
Lateral.recess (mean (SD)) 1.3060807781 (0.6557212781)
Obex (mean (SD)) 1.1389316903 (0.8450359678)
Fastigium (mean (SD)) 1.3124771989 (0.6617054188)

kable(Table.Ventricles.relative.V.1.RSD)

Table.Ventricles.relative.V.1.RSDX2/Table.Ventricles.relative.V.1.RSDX1
8.2
16.7
23.3
24.6
52.6
56.7
29.7
51.9
60.7
50.2
74.2
50.4

kable(Table.Ventricles.relative.V.stratified.gender)

f m p test
n 14 16
LV.total (mean (SD)) 82.9014835540 (8.2210783349) 83.4648096127 (5.6208437624) 0.826
LV.frontal.horn (mean (SD)) 28.7486156433 (4.3258459503) 27.5386621798 (5.0697128006) 0.491
LV.body (mean (SD)) 21.5355720813 (6.0195063390) 20.7513947142 (3.9053473560) 0.671
LV.atrium (mean (SD)) 22.9934302143 (4.6642173365) 25.2529955534 (6.8785301050) 0.309
LV.occipital.horn (mean (SD)) 5.3475006354 (2.7639521142) 4.6093273550 (2.5007651169) 0.449
LV.temporal.horn (mean (SD)) 4.2757800011 (1.9524248970) 5.3138474860 (3.2682007737) 0.309
Third.ventricle (mean (SD)) 5.4244625196 (1.9402082378) 6.5403230583 (1.5129745442) 0.088
Fourth.ventricle.total (mean (SD)) 11.6741098633 (6.5598775626) 9.9954373097 (4.6652485061) 0.422
Apex (mean (SD)) 1.1864994023 (0.7826748904) 1.0430511527 (0.5799465405) 0.570
Lateral.recess (mean (SD)) 1.4379087032 (0.7630568986) 1.1907313436 (0.5442810149) 0.311
Obex (mean (SD)) 1.3338238640 (0.9841474404) 0.9684010383 (0.6889767649) 0.244
Fastigium (mean (SD)) 1.4478393571 (0.7744449436) 1.1940353105 (0.5428226641) 0.303

kable(Table.Ventricles.relative.V.stratified.gender.RSD.female)

Table.Ventricles.relative.V.stratified.gender.RSD.femaleX2/Table.Ventricles.relative.V.stratified.gender.RSD.femaleX1
9.9
15.0
28.0
20.3
51.7
45.7
35.8
56.2
66.0
53.1
73.8
53.5

kable(Table.Ventricles.relative.V.stratified.gender.RSD.male)

Table.Ventricles.relative.V.stratified.gender.RSD.maleX2/Table.Ventricles.relative.V.stratified.gender.RSD.maleX1
6.7
18.4
18.8
27.2
54.3
61.5
23.1
46.7
55.6
45.7
71.1
45.5

NA

names.anatomical.structures.temporary <- c("LV.total",
"LV.frontal.horn",
"LV.body", 
"LV.atrium", 
"LV.occipital.horn", 
"LV.temporal.horn", 
"Third.ventricle", 
"Fourth.ventricle.total",
"Apex",
"Lateral.recess",
"Obex",
"Fastigium")

names.anatomical.structures.definitive <- c("LV- Total",
"LV - Frontal horn",
"LV - Body", 
"LV - Atrium", 
"LV - Occipital horn", 
"LV - Temporal horn", 
"Third ventricle", 
"Fourth ventricle - Total",
"Apex",
"Lateral recess",
"Obex",
"Fastigium")

Ventricles.relative.V.plotdata <- gather(Ventricles.relative.V, "anatomical.structure", "relative.volume")
Ventricles.relative.V.plotdata$Gender <- All.Volumes$Gender
Ventricles.relative.V.plotdata$Age <- All.Volumes$`Age (years)`

Ventricles.relative.V.plotdata$Gender <- factor(Ventricles.relative.V.plotdata$Gender, levels = c("f", "m"), c("f", "m"))
Ventricles.relative.V.plotdata$anatomical.structure <- factor(Ventricles.relative.V.plotdata$anatomical.structure, 
                                                                levels = rev(c(names.anatomical.structures.temporary)), rev(c(names.anatomical.structures.definitive)))

Ventricles.relative2.plot <-  ggplot(Ventricles.relative.V.plotdata, aes(x=anatomical.structure, y = relative.volume))  +
  stat_summary(alpha = 0.3, fun = mean, geom = "bar", width = 0.3, fill = "gray50") + 
  geom_boxplot(aes(fill = Gender), alpha = 0.5, width = 0.4, size = 0.2, position = position_dodge(width = 0.6), 
               outlier.shape = NA, color = "gray30") +
  scale_fill_manual(values = c("chartreuse4", "orangered2")) +
  geom_quasirandom(aes(color = Age), size = 0.7, alpha = 0.8, shape = 16, position = "dodge") +
  scale_color_continuous(low = "steelblue1", high = "red4") +
  xlab("") + ylab("Relative volume (in %)") +
  theme_minimal() +
  coord_flip() +
  ggtitle("VENTRICULAR SYSTEM") +
  theme(plot.title = element_text(hjust = 0.5))

Ventricles.relative2.plot
ggsave("Ventricles.relative2.plot.pdf", plot = Ventricles.relative2.plot, width = 12, height = 5, units = "in", dpi = 600)


Ventricles.relative.V$Gender <- All.Volumes$Gender
Ventricles.relative.V$Age <- All.Volumes$`Age (years)`

V.Relative.LV.total.Age.plot <-  ggplot(Ventricles.relative.V, aes(y=LV.total, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 102, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME lateral ventricles (V)") +
  theme(plot.title = element_text(hjust = 0.5))
V.Relative.LV.total.Age.plot
ggsave("V.Relative.LV.total.Age.plot.pdf", plot = V.Relative.LV.total.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


V.Relative.LV.frontal.horn.Age.plot <-  ggplot(Ventricles.relative.V, aes(y=LV.frontal.horn, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 39, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME frontal horn (V)") +
  theme(plot.title = element_text(hjust = 0.5))
V.Relative.LV.frontal.horn.Age.plot
ggsave("V.Relative.LV.frontal.horn.Age.plot.pdf", plot = V.Relative.LV.frontal.horn.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


V.Relative.LV.body.Age.plot <-  ggplot(Ventricles.relative.V, aes(y=LV.body, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 33, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME body (V)") +
  theme(plot.title = element_text(hjust = 0.5))
V.Relative.LV.body.Age.plot
ggsave("V.Relative.LV.body.Age.plot.pdf", plot = V.Relative.LV.body.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


V.Relative.LV.atrium.Age.plot <-  ggplot(Ventricles.relative.V, aes(y=LV.atrium, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 43, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME atrium (V)") +
  theme(plot.title = element_text(hjust = 0.5))
V.Relative.LV.atrium.Age.plot
ggsave("V.Relative.LV.atrium.Age.plot.pdf", plot = V.Relative.LV.atrium.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


V.Relative.LV.occipital.horn.Age.plot <-  ggplot(Ventricles.relative.V, aes(y=LV.occipital.horn, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 11, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME occipital horn (V)") +
  theme(plot.title = element_text(hjust = 0.5))
V.Relative.LV.occipital.horn.Age.plot
ggsave("V.Relative.LV.occipital.horn.Age.plot.pdf", plot = V.Relative.LV.occipital.horn.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


V.Relative.LV.temporal.horn.Age.plot <-  ggplot(Ventricles.relative.V, aes(y=LV.temporal.horn, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 16, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME temporal horn (V)") +
  theme(plot.title = element_text(hjust = 0.5))
V.Relative.LV.temporal.horn.Age.plot
ggsave("V.Relative.LV.temporal.horn.Age.plot.pdf", plot = V.Relative.LV.temporal.horn.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


V.Relative.Third.ventricle.Age.plot <-  ggplot(Ventricles.relative.V, aes(y=Third.ventricle, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 9.2, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME third ventricle (E)") +
  theme(plot.title = element_text(hjust = 0.5))
V.Relative.Third.ventricle.Age.plot
ggsave("V.Relative.Third.ventricle.Age.plot.pdf", plot = V.Relative.Third.ventricle.Age.plot, width = 8, height = 6, units = "in", dpi = 600)


V.Relative.Fourth.ventricle.total.Age.plot <-  ggplot(Ventricles.relative.V, aes(y=Fourth.ventricle.total, x = Age))  +
  geom_point(aes(color = Gender), size = 1.5, alpha = 1, shape = 16) +
  scale_color_manual(values = c("chartreuse4", "orangered2")) +
  geom_smooth(method='lm', alpha = 0.2, colour = "dodgerblue4", size = 0.8, weight = 0.3) +
  geom_smooth(aes(color = Gender), method='lm', se = F, alpha = 0.2, linetype = "longdash", size = 0.3, weight = 0.3) +
  stat_cor(method = "pearson", label.y = 17, label.x = 70, color = "dodgerblue4") +
  ylab("Relative Volume (in %)") + xlab("Age (in years)") +
  theme_minimal() +
  ggtitle("RELATIVE VOLUME fourth ventricle (E)") +
  theme(plot.title = element_text(hjust = 0.5))
V.Relative.Fourth.ventricle.total.Age.plot
ggsave("V.Relative.Fourth.ventricle.total.Age.plot.pdf", plot = V.Relative.Fourth.ventricle.total.Age.plot, width = 8, height = 6, units = "in", dpi = 600)

LS0tCnRpdGxlOiAiU3RhdGlzdGljYWwgY29kZSIKc3VidGl0bGU6ICJUb3BvZ3JhcGhpYyB2b2x1bWUtc3RhbmRhcmRpemF0aW9uIGF0bGFzIG9mIHRoZSBodW1hbiBicmFpbiIKYXV0aG9yOiAiQWtlcmV0IGV0IGFsLiAyMDIwIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIFNldHVwCgpgYGB7ciBTZXR1cCwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIGVycm9yID0gRkFMU0V9Cgprbml0cjo6b3B0c19jaHVuayRzZXQobWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIGVycm9yID0gRkFMU0UpCgpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShiaW9zdGF0VVpIKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHRhYmxlb25lKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGNhcHRpb25lcikKbGlicmFyeShiZWVzd2FybSkKbGlicmFyeShyZWFkcikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHJlc2hhcGUyKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KGdncHVicikKbGlicmFyeShncmFwaGljcykKbGlicmFyeShnZ2JlZXN3YXJtKQpsaWJyYXJ5KGpjb2xvcnMpCmxpYnJhcnkocGFscykKbGlicmFyeShnZ3NjaSkKbGlicmFyeShIbWlzYykKbGlicmFyeShzdHJpbmdyKQoKa2FibGVvbmUgPC0gZnVuY3Rpb24oeCwgLi4uKSB7CiAgY2FwdHVyZS5vdXRwdXQoeCA8LSBwcmludCh4KSkKICBrbml0cjo6a2FibGUoeCwgLi4uKQp9CgpgYGAKCmBgYHtyIExvYWQgYW5kIGZvcm1hdCBkYXRhfQoKQWxsLlZvbHVtZXMgPC0gcmVhZF9jc3YoIkVuY2VwaGFsaWMgc3RydWN0dXJlc192b2x1bWVzLmNzdiIpCkFsbC5Wb2x1bWVzJElEIDwtIGFzLmZhY3RvcihBbGwuVm9sdW1lcyRJRCkKQWxsLlZvbHVtZXMkR2VuZGVyIDwtIGFzLmZhY3RvcihBbGwuVm9sdW1lcyRHZW5kZXIpCkFsbC5Wb2x1bWVzJEhhbmRlZG5lc3MgPC0gYXMuZmFjdG9yKEFsbC5Wb2x1bWVzJEhhbmRlZG5lc3MpCgpgYGAKCiMgQmFzZWxpbmUgRGF0YQoKYGBge3IgQmFzaWMgRGF0YSBTdW1tYXJ5fQoKQmFzZWxpbmUuZGF0YSA8LSBDcmVhdGVUYWJsZU9uZSh2YXJzID0gYygiQWdlICh5ZWFycykiLCAiSGFuZGVkbmVzcyIpLCAKICAgICAgICAgICAgICAgZGF0YSA9IEFsbC5Wb2x1bWVzLCBzdHJhdCA9IGMoIkdlbmRlciIpKQpCYXNlbGluZS5kYXRhIDwtIHByaW50KEJhc2VsaW5lLmRhdGEpCgpgYGAKCmBgYHtyIFRhYmxlIDF9CgprYWJsZShCYXNlbGluZS5kYXRhKQoKYGBgCgojIFRvdGFsIGVuY2VwaGFsaWMgdm9sdW1lICh3L28gdmVudHJpY2xlcykKCmBgYHtyIFRvdGFsIEVuY2VwaGFsaWMgVm9sdW1lfQoKc3VtbWFyeShBbGwuVm9sdW1lcyRgVG90YWwgZW5jZXBoYWxpYyB2b2x1bWUgKHdpdGhvdXQgdmVudHJpY2xlcylgKQpUb3RhbC5lbmNlcGhhbGljLnZvbHVtZSA8LSBDcmVhdGVUYWJsZU9uZSh2YXJzID0gYygiVG90YWwgZW5jZXBoYWxpYyB2b2x1bWUgKHdpdGhvdXQgdmVudHJpY2xlcykiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEFsbC5Wb2x1bWVzKQpUb3RhbC5lbmNlcGhhbGljLnZvbHVtZS5zdHJhdGlmaWVkLmdlbmRlciA8LSBDcmVhdGVUYWJsZU9uZSh2YXJzID0gYygiVG90YWwgZW5jZXBoYWxpYyB2b2x1bWUgKHdpdGhvdXQgdmVudHJpY2xlcykiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0YSA9IGMoIkdlbmRlciIpLCBkYXRhID0gQWxsLlZvbHVtZXMpClRvdGFsLmVuY2VwaGFsaWMudm9sdW1lIDwtIHByaW50KFRvdGFsLmVuY2VwaGFsaWMudm9sdW1lKQpUb3RhbC5lbmNlcGhhbGljLnZvbHVtZS5zdHJhdGlmaWVkLmdlbmRlciA8LSBwcmludChUb3RhbC5lbmNlcGhhbGljLnZvbHVtZS5zdHJhdGlmaWVkLmdlbmRlcikKCmBgYAoKYGBge3IgVG90YWwgRW5jZXBoYWxpYyBWb2x1bWVzIHJlbGF0aXZlIHN0YW5kYXJkIGRldmlhdGlvbnN9CgpUb3RhbC5lbmNlcGhhbGljLnZvbHVtZS5SU0QgPC0gcm91bmQoKDExMTM1My4xOC8xMDkzNDM3LjI3KSoxMDAsMSkKVG90YWwuZW5jZXBoYWxpYy52b2x1bWUuc3RyYXRpZmllZC5nZW5kZXIuZmVtYWxlLlJEUyA8LSByb3VuZCgoODk3ODQuNTYvMTAyNDkyMS43MSkqMTAwLDEpClRvdGFsLmVuY2VwaGFsaWMudm9sdW1lLnN0cmF0aWZpZWQuZ2VuZGVyLm1hbGUuUlNEIDwtIHJvdW5kKCg5MzY1Mi43MC8xMTUzMzg4LjM4KSoxMDAsMSkKCmBgYAoKYGBge3IgVG90YWwgRW5jZXBoYWxpYyBWb2x1bWU6IFRhYmxlc30KCmthYmxlKFRvdGFsLmVuY2VwaGFsaWMudm9sdW1lKQprYWJsZShUb3RhbC5lbmNlcGhhbGljLnZvbHVtZS5SU0QpCmthYmxlKFRvdGFsLmVuY2VwaGFsaWMudm9sdW1lLnN0cmF0aWZpZWQuZ2VuZGVyKQprYWJsZShUb3RhbC5lbmNlcGhhbGljLnZvbHVtZS5zdHJhdGlmaWVkLmdlbmRlci5mZW1hbGUuUkRTKQprYWJsZShUb3RhbC5lbmNlcGhhbGljLnZvbHVtZS5zdHJhdGlmaWVkLmdlbmRlci5tYWxlLlJTRCkKCmBgYAoKYGBge3IgVG90YWwgRW5jZXBoYWxpYyBWb2x1bWU6IEFic29sdXRlIFZvbHVtZXMgYW5kIEdlbmRlciBQbG90fQoKVG90YWwuZW5jZXBoYWxpYy52b2x1bWUucGxvdCA8LSAgZ2dwbG90KEFsbC5Wb2x1bWVzLCBhZXMoeD0gR2VuZGVyLCB5ID0gYFRvdGFsIGVuY2VwaGFsaWMgdm9sdW1lICh3aXRob3V0IHZlbnRyaWNsZXMpYCkpICArCiAgZ2VvbV9xdWFzaXJhbmRvbShhZXMoY29sb3IgPSBgQWdlICh5ZWFycylgKSwgYWxwaGEgPSAxLCBzaXplID0gMiwgc2hhcGUgPSAxNiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgc2NhbGVfY29sb3JfY29udGludW91cyhsb3cgPSAic3RlZWxibHVlMSIsIGhpZ2ggPSAicmVkNCIpICsKICBnZW9tX2JveHBsb3QoYWVzKGZpbGwgPSBHZW5kZXIpLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDAuMywgd2lkdGggPSAwLjM1LCBvdXRsaWVyLnNoYXBlID0gTkEsIGNvbG9yID0gImdyYXkzMCIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICB4bGFiKCJHZW5kZXIiKSArIHlsYWIoIiIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgZ2d0aXRsZSgiVE9UQUwgRU5DRVBIQUxJQyBWT0xVTUUgKG1tMykiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLmVuY2VwaGFsaWMudm9sdW1lLnBsb3QKZ2dzYXZlKCJUb3RhbC5lbmNlcGhhbGljLnZvbHVtZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5lbmNlcGhhbGljLnZvbHVtZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKYGBgCgpgYGB7ciBUb3RhbCBFbmNlcGhhbGljIFZvbHVtZTogQWJzb2x1dGUgVm9sdW1lcyBhbmQgQWdlIFBsb3R9CgpUb3RhbC5lbmNlcGhhbGljLnZvbHVtZS5BZ2UucGxvdCA8LSAgZ2dwbG90KEFsbC5Wb2x1bWVzLCBhZXMoeT1gVG90YWwgZW5jZXBoYWxpYyB2b2x1bWUgKHdpdGhvdXQgdmVudHJpY2xlcylgLCB4ID0gYEFnZSAoeWVhcnMpYCkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDAuOCwgc2hhcGUgPSAxNikgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyLCBncm91cCA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEyNTAwMDAsIGxhYmVsLnggPSA2NSwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgZW5jZXBoYWxvbiIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuZW5jZXBoYWxpYy52b2x1bWUuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5lbmNlcGhhbGljLnZvbHVtZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuZW5jZXBoYWxpYy52b2x1bWUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpgYGAKCgojIFRvcG9ncmFwaGljIG92ZXJ2aWV3CgojIyBBYnNvbHV0ZSBWb2x1bWVzCgpgYGB7ciBUb3BvZ3JhcGhpYyBPdmVydmlldzogQWJzb2x1dGUgVm9sdW1lc30KCkZyb250YWwubG9iZSA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIGZyb250YWwgcG9sZWArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBGMWArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBGMmArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBGMyBvcmJpdGFsYCsKICAgICAgICAgICAgICAgICAgICAgICBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIEYzIHRyaWFuZ3VsYXJgKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgRjMgb3BlcmN1bGFyYCsKICAgICAgICAgICAgICAgICAgICAgICBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIGFudGVyaW9yIG9yYml0YWxgKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgcG9zdGVyaW9yIG9yYml0YWxgKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgbWVkaWFsIG9yYml0YWxgKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgbGF0ZXJhbCBvcmJpdGFsYCsKICAgICAgICAgICAgICAgICAgICAgICBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIHJlY3R1c2ArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSByb3N0cmFsYAogIApDZW50cmFsLmxvYmUgPC0gKEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgUHJlQ2ArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBQb3N0Q2ArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBQYXJhQyBsb2J1bGVgKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgU3ViQyBneXJ1c2ApCiAgClBhcmlldGFsLmxvYmUgPC0gKEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgU1BMYCsKICAgICAgICAgICAgICAgICAgICAgICBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIFNNR2ArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBBTkdgKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgUHJlY3VuZXVzYCkKCk9jY2lwaXRhbC5sb2JlIDwtIChBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIEN1bmV1c2ArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBPMWArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBPMmArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBPM2ArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBvY2NpcGl0YWwgcG9sZWArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBsaW5ndWFsYCkKClRlbXBvcmFsLmxvYmUgPC0gKEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgZnVzaWZvcm1gKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgVDFgKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgVDJgKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgVDNgKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgUGxhbnVtIHRlbXBvcmFsZWArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBQbGFudW0gcG9sYXJlYCsKICAgICAgICAgICAgICAgICAgICAgICBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIHRlbXBvcmFsIHBvbGVgKQoKSW5zdWxhci5sb2JlIDwtIChBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIHNob3J0IGluc3VsYXIgZ3lyaWArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBsb25nIGluc3VsYXIgZ3lyaWApCgpMaW1iaWMubG9iZSA8LSAoQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBTQ0FgKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgUEhHYCsKICAgICAgICAgICAgICAgICAgICAgICBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIGFudCBjaW5ndWxhdGVgKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgbWlkIGNpbmd1bGF0ZWArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBwb3N0IGNpbmd1bGF0ZWArCiAgICAgICAgICAgICAgICAgICAgICAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBoaXBwb2NhbXB1c2AgKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgYW15Z2RhbGFgKQoKQmFzYWwuZ2FuZ2xpYSA8LSAoQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBjYXVkYXRlYCsKICAgICAgICAgICAgICAgICAgICAgICBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIHB1dGFtZW5gKwogICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgcGFsbGlkdW1gKQoKRGllbmNlcGhhbG9uIDwtIChBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIGh5cG90aGFsYW11c2ArCiAgICAgICAgICAgICAgICAgICAgICAgIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgdGhhbGFtdXNgKQoKQnJhaW5zdGVtIDwtIChBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIGJyYWluc3RlbWApCgpDZXJlYmVsbHVtIDwtIChBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIGNlcmViZWxsdW1gKQoKVG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUgPC0gYXMuZGF0YS5mcmFtZShjYmluZChGcm9udGFsLmxvYmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENlbnRyYWwubG9iZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyaWV0YWwubG9iZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2NjaXBpdGFsLmxvYmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBvcmFsLmxvYmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3VsYXIubG9iZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGltYmljLmxvYmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2FsLmdhbmdsaWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpZW5jZXBoYWxvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhaW5zdGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZXJlYmVsbHVtKSkKClRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlJEdlbmRlciA8LSBBbGwuVm9sdW1lcyRHZW5kZXIKVG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUkQWdlIDwtIEFsbC5Wb2x1bWVzJGBBZ2UgKHllYXJzKWAKClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlIDwtIENyZWF0ZVRhYmxlT25lKHZhcnMgPSBjKCJGcm9udGFsLmxvYmUiLCJDZW50cmFsLmxvYmUiLCAiUGFyaWV0YWwubG9iZSIsICJPY2NpcGl0YWwubG9iZSIsICJUZW1wb3JhbC5sb2JlIiwgIkluc3VsYXIubG9iZSIsIkxpbWJpYy5sb2JlIiwiQmFzYWwuZ2FuZ2xpYSIsICJEaWVuY2VwaGFsb24iLCJCcmFpbnN0ZW0iLCJDZXJlYmVsbHVtIiksIAogICAgICAgICAgICAgICBkYXRhID0gVG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUpCgpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlciA8LSBDcmVhdGVUYWJsZU9uZSh2YXJzID0gYygiRnJvbnRhbC5sb2JlIiwiQ2VudHJhbC5sb2JlIiwgIlBhcmlldGFsLmxvYmUiLCAiT2NjaXBpdGFsLmxvYmUiLCAiVGVtcG9yYWwubG9iZSIsICJJbnN1bGFyLmxvYmUiLCJMaW1iaWMubG9iZSIsIkJhc2FsLmdhbmdsaWEiLCAiRGllbmNlcGhhbG9uIiwiQnJhaW5zdGVtIiwiQ2VyZWJlbGx1bSIpLCAKICAgICAgICAgICAgICAgc3RyYXRhID0gYygiR2VuZGVyIiksIGRhdGEgPSBUb3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZSkKClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlIDwtIHByaW50KFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLCBjb250RGlnaXRzID0gMTApClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyIDwtIHByaW50KFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLGNvbnREaWdpdHMgPSAxMCkKCndyaXRlLmNzdihUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZSwgIlRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLmNzdiIpCndyaXRlLmNzdihUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlciwgIlRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLmNzdiIpCgpgYGAKCmBgYHtyIFRvcG9ncmFwaGljIE92ZXJ2aWV3OiBBYnNvbHV0ZSBWb2x1bWVzIHJlbGF0aXZlIHN0YW5kYXJkIGRldmlhdGlvbnN9CgpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5SU0QgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuUlNEIDwtIGRhdGEuZnJhbWUoZG8uY2FsbCgncmJpbmQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzcGxpdChhcy5jaGFyYWN0ZXIoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuUlNEWy0xLF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcsZml4ZWQ9VFJVRSkpKQpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5SU0QgPC0gZGF0YS5mcmFtZShjYmluZChzdHJfcmVwbGFjZV9hbGwoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuUlNEJFgxLCAiWyBdIiwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuUlNEJFgyLCAiWyldIiwgIiIpKSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuUlNEJFgxIDwtIGFzLmNoYXJhY3RlcihUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5SU0QkWDEpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLlJTRCRYMiA8LSBhcy5jaGFyYWN0ZXIoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuUlNEJFgyKQpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5SU0QgPC0gYXMuZGF0YS5mcmFtZShzYXBwbHkoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuUlNELCBhcy5udW1lcmljKSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuUlNEJFgyL1RhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLlJTRCRYMSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuUlNEIDwtIHJvdW5kKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLlJTRCAqIDEwMCwgMSkKCgpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlcikKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNEIDwtIHNlbGVjdChUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QsIC0gYyhwLCB0ZXN0KSkKClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gZGF0YS5mcmFtZShkby5jYWxsKCdyYmluZCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnNwbGl0KGFzLmNoYXJhY3RlcihUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0RbLTEsICJmIl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcsZml4ZWQ9VFJVRSkpKQpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlIDwtIGRhdGEuZnJhbWUoY2JpbmQoc3RyX3JlcGxhY2VfYWxsKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEsICJbIF0iLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlX2FsbChUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgyLCAiWyldIiwgIiIpKSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMSA8LSBhcy5jaGFyYWN0ZXIoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMiA8LSBhcy5jaGFyYWN0ZXIoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMikKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSBhcy5kYXRhLmZyYW1lKHNhcHBseShUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlLCBhcy5udW1lcmljKSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSBhcy5kYXRhLmZyYW1lKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIvVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSByb3VuZChUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlICogMTAwLCAxKQoKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gZGF0YS5mcmFtZShkby5jYWxsKCdyYmluZCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnNwbGl0KGFzLmNoYXJhY3RlcihUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0RbLTEsICJtIl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcsZml4ZWQ9VFJVRSkpKQpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSA8LSBkYXRhLmZyYW1lKGNiaW5kKHN0cl9yZXBsYWNlX2FsbChUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMSwgIlsgXSIsICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3JlcGxhY2VfYWxsKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgyLCAiWyldIiwgIiIpKSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgxKQpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMiA8LSBhcy5jaGFyYWN0ZXIoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIGFzLmRhdGEuZnJhbWUoc2FwcGx5KFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlLCBhcy5udW1lcmljKSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMi9UYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gcm91bmQoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgKiAxMDAsIDEpCgpgYGAKCmBgYHtyIFRvcG9ncmFwaGljIE92ZXJ2aWV3OiBBYnNvbHV0ZSBWb2x1bWVzIFRhYmxlc30KCmthYmxlKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlKQprYWJsZShUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5SU0QpCmthYmxlKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyKQprYWJsZShUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlKQprYWJsZShUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSkKCmBgYAoKYGBge3IgVG9wb2dyYXBoaWMgT3ZlcnZpZXc6IEFic29sdXRlIFZvbHVtZXMgYW5kIEdlbmRlciBQbG90fQoKVG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUgPC0gc2VsZWN0KFRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLCAtIGMoR2VuZGVyLCBBZ2UpKQpUb3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5wbG90ZGF0YSA8LSBnYXRoZXIoVG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUsICJhbmF0b21pY2FsLnN0cnVjdHVyZSIsICJyZWxhdGl2ZS52b2x1bWUiKQpUb3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5wbG90ZGF0YSRHZW5kZXIgPC0gQWxsLlZvbHVtZXMkR2VuZGVyClRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnBsb3RkYXRhJEFnZSA8LSBBbGwuVm9sdW1lcyRgQWdlICh5ZWFycylgCgpUb3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5wbG90ZGF0YSRHZW5kZXIgPC0gZmFjdG9yKFRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnBsb3RkYXRhJEdlbmRlciwgbGV2ZWxzID0gYygiZiIsICJtIiksIGMoImYiLCAibSIpKQpUb3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5wbG90ZGF0YSRhbmF0b21pY2FsLnN0cnVjdHVyZSA8LSBmYWN0b3IoVG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUucGxvdGRhdGEkYW5hdG9taWNhbC5zdHJ1Y3R1cmUsIGxldmVscyA9IHJldihjKCJGcm9udGFsLmxvYmUiLCAiQ2VudHJhbC5sb2JlIiwgIlBhcmlldGFsLmxvYmUiLCAiT2NjaXBpdGFsLmxvYmUiLCAiVGVtcG9yYWwubG9iZSIsICJJbnN1bGFyLmxvYmUiLCAiTGltYmljLmxvYmUiLCAiQmFzYWwuZ2FuZ2xpYSIsICJEaWVuY2VwaGFsb24iLCAiQnJhaW5zdGVtIiwgIkNlcmViZWxsdW0iKSksIHJldihjKCJGcm9udGFsIGxvYmUiLCAiQ2VudHJhbCBsb2JlIiwgIlBhcmlldGFsIGxvYmUiLCAiT2NjaXBpdGFsIGxvYmUiLCAiVGVtcG9yYWwgbG9iZSIsICJJbnN1bGFyIGxvYmUiLCAiTGltYmljIGxvYmUiLCAiQmFzYWwgZ2FuZ2xpYSIsICJEaWVuY2VwaGFsb24iLCAiQnJhaW5zdGVtIiwgIkNlcmViZWxsdW0iKSkpCgpUb3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS5wbG90IDwtICBnZ3Bsb3QoVG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUucGxvdGRhdGEsIGFlcyh4PWFuYXRvbWljYWwuc3RydWN0dXJlLCB5ID0gcmVsYXRpdmUudm9sdW1lKSkgICsKICBzdGF0X3N1bW1hcnkoYWxwaGEgPSAwLjMsIGZ1biA9IG1lYW4sIGdlb20gPSAiYmFyIiwgd2lkdGggPSAwLjMsIGZpbGwgPSAiZ3JheTUwIikgKyAKICBnZW9tX2JveHBsb3QoYWVzKGZpbGwgPSBHZW5kZXIpLCBhbHBoYSA9IDAuNSwgd2lkdGggPSAwLjQsIHNpemUgPSAwLjIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjYpLCAKICAgICAgICAgICAgICAgb3V0bGllci5zaGFwZSA9IE5BLCBjb2xvciA9ICJncmF5MzAiKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9xdWFzaXJhbmRvbShhZXMoY29sb3IgPSBBZ2UpLCBzaXplID0gMC43LCBhbHBoYSA9IDAuOCwgc2hhcGUgPSAxNiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgc2NhbGVfY29sb3JfY29udGludW91cyhsb3cgPSAic3RlZWxibHVlMSIsIGhpZ2ggPSAicmVkNCIpICsKICB4bGFiKCIiKSArIHlsYWIoIkFic29sdXRlIHZvbHVtZSAoaW4gJSkiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBjb29yZF9mbGlwKCkgKwogIGdndGl0bGUoIlRPUE9HUkFQSElDIE9WRVJWSUVXIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQoKVG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUucGxvdApnZ3NhdmUoIlRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnBsb3QucGRmIiwgcGxvdCA9IFRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLnBsb3QsIHdpZHRoID0gMTIsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKYGBgCgpgYGB7ciBUb3BvZ3JhcGhpYyBPdmVydmlldzogQWJzb2x1dGUgVm9sdW1lcyBhbmQgQWdlIFBsb3R9CgpUb3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZSRHZW5kZXIgPC0gQWxsLlZvbHVtZXMkR2VuZGVyClRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlJEFnZSA8LSBBbGwuVm9sdW1lcyRgQWdlICh5ZWFycylgCgpUb3RhbC5mcm9udGFsLmxvYmUuQWdlLnBsb3QgPC0gIGdncGxvdChUb3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZSwgYWVzKHk9RnJvbnRhbC5sb2JlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDIzMDAwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBmcm9udGFsIGxvYmUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLmZyb250YWwubG9iZS5BZ2UucGxvdApnZ3NhdmUoIlRPLlRvdGFsLmZyb250YWwubG9iZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuZnJvbnRhbC5sb2JlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuY2VudHJhbC5sb2JlLkFnZS5wbG90IDwtICBnZ3Bsb3QoVG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUsIGFlcyh5PUNlbnRyYWwubG9iZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA5NzAwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBjZW50cmFsIGxvYmUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLmNlbnRyYWwubG9iZS5BZ2UucGxvdApnZ3NhdmUoIlRPLlRvdGFsLmNlbnRyYWwubG9iZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuY2VudHJhbC5sb2JlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwucGFyaWV0YWwubG9iZS5BZ2UucGxvdCA8LSAgZ2dwbG90KFRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLCBhZXMoeT1QYXJpZXRhbC5sb2JlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDE0NTAwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBwYXJpZXRhbCBsb2JlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5wYXJpZXRhbC5sb2JlLkFnZS5wbG90Cmdnc2F2ZSgiVE8uVG90YWwucGFyaWV0YWwubG9iZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwucGFyaWV0YWwubG9iZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLm9jY2lwaXRhbC5sb2JlLkFnZS5wbG90IDwtICBnZ3Bsb3QoVG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUsIGFlcyh5PU9jY2lwaXRhbC5sb2JlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDg2MDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIG9jY2lwaXRhbCBsb2JlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5vY2NpcGl0YWwubG9iZS5BZ2UucGxvdApnZ3NhdmUoIlRPLlRvdGFsLm9jY2lwaXRhbC5sb2JlLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5vY2NpcGl0YWwubG9iZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLnRlbXBvcmFsLmxvYmUuQWdlLnBsb3QgPC0gIGdncGxvdChUb3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZSwgYWVzKHk9VGVtcG9yYWwubG9iZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA4NjAwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSB0ZW1wb3JhbCBsb2JlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC50ZW1wb3JhbC5sb2JlLkFnZS5wbG90Cmdnc2F2ZSgiVE8uVG90YWwudGVtcG9yYWwubG9iZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwudGVtcG9yYWwubG9iZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLmluc3VsYXIubG9iZS5BZ2UucGxvdCA8LSAgZ2dwbG90KFRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLCBhZXMoeT1JbnN1bGFyLmxvYmUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMjkwMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgaW5zdWxhciBsb2JlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5pbnN1bGFyLmxvYmUuQWdlLnBsb3QKZ2dzYXZlKCJUTy5Ub3RhbC5pbnN1bGFyLmxvYmUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLmluc3VsYXIubG9iZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLmxpbWJpYy5sb2JlLkFnZS5wbG90IDwtICBnZ3Bsb3QoVG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUsIGFlcyh5PUxpbWJpYy5sb2JlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDgyMDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGxpbWJpYyBsb2JlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5saW1iaWMubG9iZS5BZ2UucGxvdApnZ3NhdmUoIlRPLlRvdGFsLmxpbWJpYy5sb2JlLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5saW1iaWMubG9iZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkJhc2FsLmdhbmdsaWEuQWdlLnBsb3QgPC0gIGdncGxvdChUb3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZSwgYWVzKHk9QmFzYWwuZ2FuZ2xpYSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAyNDAwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBiYXNhbCBnYW5nbGlhIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5CYXNhbC5nYW5nbGlhLkFnZS5wbG90Cmdnc2F2ZSgiVE8uVG90YWwuQmFzYWwuZ2FuZ2xpYS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuQmFzYWwuZ2FuZ2xpYS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkRpZW5jZXBoYWxvbi5BZ2UucGxvdCA8LSAgZ2dwbG90KFRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLCBhZXMoeT1EaWVuY2VwaGFsb24sIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMjUwMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgZGllbmNlcGhhbG9uIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5EaWVuY2VwaGFsb24uQWdlLnBsb3QKZ2dzYXZlKCJUTy5Ub3RhbC5EaWVuY2VwaGFsb24uQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkRpZW5jZXBoYWxvbi5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkJyYWluc3RlbS5BZ2UucGxvdCA8LSAgZ2dwbG90KFRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLCBhZXMoeT1CcmFpbnN0ZW0sIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMzMwMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgYnJhaW5zdGVtIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5CcmFpbnN0ZW0uQWdlLnBsb3QKZ2dzYXZlKCJUTy5Ub3RhbC5CcmFpbnN0ZW0uQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkJyYWluc3RlbS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkNlcmViZWxsdW0uQWdlLnBsb3QgPC0gIGdncGxvdChUb3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZSwgYWVzKHk9Q2VyZWJlbGx1bSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxMjIwMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgY2VyZWJlbGx1bSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuQ2VyZWJlbGx1bS5BZ2UucGxvdApnZ3NhdmUoIlRPLlRvdGFsLkNlcmViZWxsdW0uQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkNlcmViZWxsdW0uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpgYGAKCiMjIFJlbGF0aXZlIFZvbHVtZXMKCmBgYHtyIFRvcG9ncmFwaGljIE92ZXJ2aWV3OiBSZWxhdGl2ZSBWb2x1bWVzfQoKVG9wb2dyYXBoaWMub3ZlcnZpZXcuYWJzb2x1dGUgPC0gc2VsZWN0KFRvcG9ncmFwaGljLm92ZXJ2aWV3LmFic29sdXRlLCAtIGMoR2VuZGVyLCBBZ2UpKQpUb3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZTEgPC0gKDEwMCAqIChUb3BvZ3JhcGhpYy5vdmVydmlldy5hYnNvbHV0ZS9BbGwuVm9sdW1lcyRgVG90YWwgZW5jZXBoYWxpYyB2b2x1bWUgKHdpdGhvdXQgdmVudHJpY2xlcylgKSkKClRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMiA8LSBDcmVhdGVUYWJsZU9uZSh2YXJzID0gYygiRnJvbnRhbC5sb2JlIiwiQ2VudHJhbC5sb2JlIiwgIlBhcmlldGFsLmxvYmUiLCAiT2NjaXBpdGFsLmxvYmUiLCAiVGVtcG9yYWwubG9iZSIsICJJbnN1bGFyLmxvYmUiLCJMaW1iaWMubG9iZSIsIkJhc2FsLmdhbmdsaWEiLCAiRGllbmNlcGhhbG9uIiwiQnJhaW5zdGVtIiwiQ2VyZWJlbGx1bSIpLCAKICAgICAgICAgICAgICAgZGF0YSA9IFRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMSkKVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUxJEdlbmRlciA8LSBBbGwuVm9sdW1lcyRHZW5kZXIKVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIgPC0gQ3JlYXRlVGFibGVPbmUodmFycyA9IGMoIkZyb250YWwubG9iZSIsIkNlbnRyYWwubG9iZSIsICJQYXJpZXRhbC5sb2JlIiwgIk9jY2lwaXRhbC5sb2JlIiwgIlRlbXBvcmFsLmxvYmUiLCAiSW5zdWxhci5sb2JlIiwiTGltYmljLmxvYmUiLCJCYXNhbC5nYW5nbGlhIiwgIkRpZW5jZXBoYWxvbiIsIkJyYWluc3RlbSIsIkNlcmViZWxsdW0iKSwgCiAgICAgICAgICAgICAgICBzdHJhdGEgPSBjKCJHZW5kZXIiKSwgZGF0YSA9IFRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMSkKClRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMiA8LSBwcmludChUb3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZTIsIHF1b3RlID0gRkFMU0UsIGNvbnREaWdpdHMgPSAxMCkKVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIgPC0gcHJpbnQoVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIsIHF1b3RlID0gRkFMU0UsIGNvbnREaWdpdHMgPSAxMCkKCmBgYAoKCmBgYHtyIFRvcG9ncmFwaGljIE92ZXJ2aWV3OiBSZWxhdGl2ZSBWb2x1bWVzIHJlbGF0aXZlIHN0YW5kYXJkIGRldmlhdGlvbnN9CgpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5SU0QgPC0gYXMuZGF0YS5mcmFtZShUb3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZTIpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLlJTRCA8LSBkYXRhLmZyYW1lKGRvLmNhbGwoJ3JiaW5kJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryc3BsaXQoYXMuY2hhcmFjdGVyKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLlJTRFstMSxdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICgnLGZpeGVkPVRSVUUpKSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuUlNEIDwtIGRhdGEuZnJhbWUoY2JpbmQoc3RyX3JlcGxhY2VfYWxsKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLlJTRCRYMSwgIlsgXSIsICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3JlcGxhY2VfYWxsKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLlJTRCRYMiwgIlspXSIsICIiKSkpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLlJTRCRYMSA8LSBhcy5jaGFyYWN0ZXIoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuUlNEJFgxKQpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5SU0QkWDIgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLlJTRCRYMikKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuUlNEIDwtIGFzLmRhdGEuZnJhbWUoc2FwcGx5KFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLlJTRCwgYXMubnVtZXJpYykpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLlJTRCA8LSBhcy5kYXRhLmZyYW1lKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLlJTRCRYMi9UYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5SU0QkWDEpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLlJTRCA8LSByb3VuZChUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5SU0QqMTAwLCAxKQoKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRCA8LSBzZWxlY3QoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELCAtIGMocCwgdGVzdCkpCgpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlIDwtIGRhdGEuZnJhbWUoZG8uY2FsbCgncmJpbmQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzcGxpdChhcy5jaGFyYWN0ZXIoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNEWy0xLCAiZiJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICgnLGZpeGVkPVRSVUUpKSkKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSBkYXRhLmZyYW1lKGNiaW5kKHN0cl9yZXBsYWNlX2FsbChUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgxLCAiWyBdIiwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMiwgIlspXSIsICIiKSkpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gYXMuZGF0YS5mcmFtZShzYXBwbHkoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSwgYXMubnVtZXJpYykpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgyL1RhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gcm91bmQoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSoxMDAsIDEpCgpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSA8LSBkYXRhLmZyYW1lKGRvLmNhbGwoJ3JiaW5kJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryc3BsaXQoYXMuY2hhcmFjdGVyKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRFstMSwgIm0iXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAoJyxmaXhlZD1UUlVFKSkpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIGRhdGEuZnJhbWUoY2JpbmQoc3RyX3JlcGxhY2VfYWxsKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgxLCAiWyBdIiwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIsICJbKV0iLCAiIikpKQpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMSA8LSBhcy5jaGFyYWN0ZXIoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEpClRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgyIDwtIGFzLmNoYXJhY3RlcihUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMikKVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gYXMuZGF0YS5mcmFtZShzYXBwbHkoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUsIGFzLm51bWVyaWMpKQpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSA8LSBhcy5kYXRhLmZyYW1lKFRhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgyL1RhYmxlLnRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgxKQpUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSA8LSByb3VuZChUYWJsZS50b3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSoxMDAsIDEpCgpgYGAKCmBgYHtyIFRvcG9ncmFwaGljIE92ZXJ2aWV3OiBSZWxhdGl2ZSBWb2x1bWVzIFRhYmxlc30KCmthYmxlKFRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMikKa2FibGUoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuUlNEKQprYWJsZShUb3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlcikKa2FibGUoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSkKa2FibGUoVGFibGUudG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUpCgpgYGAKCmBgYHtyIFRvcG9ncmFwaGljIG92ZXJ3aWV3OiBSZWxhdGl2ZSBWb2x1bWVzIGFuZCBHZW5kZXIgUGxvdH0KClRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMSA8LSBzZWxlY3QoVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUxLCAtIGMoR2VuZGVyKSkKVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUucGxvdGRhdGEgPC0gZ2F0aGVyKFRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMSwgImFuYXRvbWljYWwuc3RydWN0dXJlIiwgInJlbGF0aXZlLnZvbHVtZSIpClRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnBsb3RkYXRhJEdlbmRlciA8LSBBbGwuVm9sdW1lcyRHZW5kZXIKVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUucGxvdGRhdGEkQWdlIDwtIEFsbC5Wb2x1bWVzJGBBZ2UgKHllYXJzKWAKClRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnBsb3RkYXRhJEdlbmRlciA8LSBmYWN0b3IoVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUucGxvdGRhdGEkR2VuZGVyLCBsZXZlbHMgPSBjKCJmIiwgIm0iKSwgYygiZiIsICJtIikpClRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnBsb3RkYXRhJGFuYXRvbWljYWwuc3RydWN0dXJlIDwtIGZhY3RvcihUb3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5wbG90ZGF0YSRhbmF0b21pY2FsLnN0cnVjdHVyZSwgbGV2ZWxzID0gcmV2KGMoIkZyb250YWwubG9iZSIsICJDZW50cmFsLmxvYmUiLCAiUGFyaWV0YWwubG9iZSIsICJPY2NpcGl0YWwubG9iZSIsICJUZW1wb3JhbC5sb2JlIiwgIkluc3VsYXIubG9iZSIsICJMaW1iaWMubG9iZSIsICJCYXNhbC5nYW5nbGlhIiwgIkRpZW5jZXBoYWxvbiIsICJCcmFpbnN0ZW0iLCAiQ2VyZWJlbGx1bSIpKSwgcmV2KGMoIkZyb250YWwgbG9iZSIsICJDZW50cmFsIGxvYmUiLCAiUGFyaWV0YWwgbG9iZSIsICJPY2NpcGl0YWwgbG9iZSIsICJUZW1wb3JhbCBsb2JlIiwgIkluc3VsYXIgbG9iZSIsICJMaW1iaWMgbG9iZSIsICJCYXNhbCBnYW5nbGlhIiwgIkRpZW5jZXBoYWxvbiIsICJCcmFpbnN0ZW0iLCAiQ2VyZWJlbGx1bSIpKSkKClRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlLnBsb3QgPC0gIGdncGxvdChUb3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5wbG90ZGF0YSwgYWVzKHg9YW5hdG9taWNhbC5zdHJ1Y3R1cmUsIHkgPSByZWxhdGl2ZS52b2x1bWUpKSAgKwogIHN0YXRfc3VtbWFyeShhbHBoYSA9IDAuMywgZnVuID0gbWVhbiwgZ2VvbSA9ICJiYXIiLCB3aWR0aCA9IDAuMywgZmlsbCA9ICJncmF5NTAiKSArIAogIGdlb21fYm94cGxvdChhZXMoZmlsbCA9IEdlbmRlciksIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNCwgc2l6ZSA9IDAuMiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNiksIAogICAgICAgICAgICAgICBvdXRsaWVyLnNoYXBlID0gTkEsIGNvbG9yID0gImdyYXkzMCIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3F1YXNpcmFuZG9tKGFlcyhjb2xvciA9IEFnZSksIHNpemUgPSAwLjcsIGFscGhhID0gMC44LCBzaGFwZSA9IDE2LCBwb3NpdGlvbiA9ICJkb2RnZSIpICsKICBzY2FsZV9jb2xvcl9jb250aW51b3VzKGxvdyA9ICJzdGVlbGJsdWUxIiwgaGlnaCA9ICJyZWQ0IikgKwogIHhsYWIoIiIpICsgeWxhYigiUmVsYXRpdmUgdm9sdW1lIChpbiAlKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgZ2d0aXRsZSgiVE9QT0dSQVBISUMgT1ZFUlZJRVciKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCgpUb3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZS5wbG90Cmdnc2F2ZSgiVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUucGxvdC5wZGYiLCBwbG90ID0gVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUucGxvdCwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpgYGAKCmBgYHtyIFRvcG9ncmFwaGljIG92ZXJ2aWV3OiBSZWxhdGl2ZSBWb2x1bWVzIGFuZCBBZ2UgUGxvdH0KClRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMSRHZW5kZXIgPC0gQWxsLlZvbHVtZXMkR2VuZGVyClRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMSRBZ2UgPC0gQWxsLlZvbHVtZXMkYEFnZSAoeWVhcnMpYAoKUmVsYXRpdmUuZnJvbnRhbC5sb2JlLkFnZS5wbG90IDwtICBnZ3Bsb3QoVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUxLCBhZXMoeT1Gcm9udGFsLmxvYmUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMTkuMywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBmcm9udGFsIGxvYmUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLmZyb250YWwubG9iZS5BZ2UucGxvdApnZ3NhdmUoIlRPUi5SZWxhdGl2ZS5mcm9udGFsLmxvYmUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLmZyb250YWwubG9iZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkNlbnRyYWwubG9iZS5BZ2UucGxvdCA8LSAgZ2dwbG90KFRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMSwgYWVzKHk9Q2VudHJhbC5sb2JlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDkuNywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBjZW50cmFsIGxvYmUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkNlbnRyYWwubG9iZS5BZ2UucGxvdApnZ3NhdmUoIlRPUi5SZWxhdGl2ZS5DZW50cmFsLmxvYmUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkNlbnRyYWwubG9iZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlBhcmlldGFsLmxvYmUuQWdlLnBsb3QgPC0gIGdncGxvdChUb3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZTEsIGFlcyh5PVBhcmlldGFsLmxvYmUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMTMuMiwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBwYXJpZXRhbCBsb2JlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5QYXJpZXRhbC5sb2JlLkFnZS5wbG90Cmdnc2F2ZSgiVE9SLlJlbGF0aXZlLlBhcmlldGFsLmxvYmUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLlBhcmlldGFsLmxvYmUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5PY2NpcGl0YWwubG9iZS5BZ2UucGxvdCA8LSAgZ2dwbG90KFRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMSwgYWVzKHk9T2NjaXBpdGFsLmxvYmUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gNy42LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIG9jY2lwaXRhbCBsb2JlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5PY2NpcGl0YWwubG9iZS5BZ2UucGxvdApnZ3NhdmUoIlRPUi5SZWxhdGl2ZS5PY2NpcGl0YWwubG9iZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuT2NjaXBpdGFsLmxvYmUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5UZW1wb3JhbC5sb2JlLkFnZS5wbG90IDwtICBnZ3Bsb3QoVG9wb2dyYXBoaWMub3ZlcnZpZXcucmVsYXRpdmUxLCBhZXMoeT1UZW1wb3JhbC5sb2JlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDguNiwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSB0ZW1wb3JhbCBsb2JlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5UZW1wb3JhbC5sb2JlLkFnZS5wbG90Cmdnc2F2ZSgiVE9SLlJlbGF0aXZlLlRlbXBvcmFsLmxvYmUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLlRlbXBvcmFsLmxvYmUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5JbnN1bGFyLmxvYmUuQWdlLnBsb3QgPC0gIGdncGxvdChUb3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZTEsIGFlcyh5PUluc3VsYXIubG9iZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAyLjA1LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIGluc3VsYXIgbG9iZSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuSW5zdWxhci5sb2JlLkFnZS5wbG90Cmdnc2F2ZSgiVE9SLlJlbGF0aXZlLkluc3VsYXIubG9iZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuSW5zdWxhci5sb2JlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuTGltYmljLmxvYmUuQWdlLnBsb3QgPC0gIGdncGxvdChUb3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZTEsIGFlcyh5PUxpbWJpYy5sb2JlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDcuNywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBsaW1iaWMgbG9iZSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuTGltYmljLmxvYmUuQWdlLnBsb3QKZ2dzYXZlKCJUT1IuUmVsYXRpdmUuTGltYmljLmxvYmUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkxpbWJpYy5sb2JlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuQmFzYWwuZ2FuZ2xpYS5BZ2UucGxvdCA8LSAgZ2dwbG90KFRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMSwgYWVzKHk9QmFzYWwuZ2FuZ2xpYSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAyLjI1LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIGJhc2FsIGdhbmdsaWEiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkJhc2FsLmdhbmdsaWEuQWdlLnBsb3QKZ2dzYXZlKCJUT1IuUmVsYXRpdmUuQmFzYWwuZ2FuZ2xpYS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuQmFzYWwuZ2FuZ2xpYS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkRpZW5jZXBoYWxvbi5BZ2UucGxvdCA8LSAgZ2dwbG90KFRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMSwgYWVzKHk9RGllbmNlcGhhbG9uLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDIuMjUsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgZGllbmNlcGhhbG9uIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5EaWVuY2VwaGFsb24uQWdlLnBsb3QKZ2dzYXZlKCJUT1IuUmVsYXRpdmUuRGllbmNlcGhhbG9uLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5EaWVuY2VwaGFsb24uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5CcmFpbnN0ZW0uQWdlLnBsb3QgPC0gIGdncGxvdChUb3BvZ3JhcGhpYy5vdmVydmlldy5yZWxhdGl2ZTEsIGFlcyh5PUJyYWluc3RlbSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAzLjE4LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIGJyYWluc3RlbSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuQnJhaW5zdGVtLkFnZS5wbG90Cmdnc2F2ZSgiVE9SLlJlbGF0aXZlLkJyYWluc3RlbS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuQnJhaW5zdGVtLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuQ2VyZWJlbGx1bS5BZ2UucGxvdCA8LSAgZ2dwbG90KFRvcG9ncmFwaGljLm92ZXJ2aWV3LnJlbGF0aXZlMSwgYWVzKHk9Q2VyZWJlbGx1bSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxMi43LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIGNlcmViZWxsdW0iKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkNlcmViZWxsdW0uQWdlLnBsb3QKZ2dzYXZlKCJUT1IuUmVsYXRpdmUuQ2VyZWJlbGx1bS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuQ2VyZWJlbGx1bS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKCmBgYAoKCiMgVGhlIFByb3NlbmNlcGhhbG9uCgojIyBBYnNvbHV0ZSBWb2x1bWVzCgpgYGB7ciBUaGUgUHJvc2VuY2VwaGFsb246IEFic29sdXRlIFZvbHVtZXN9CgpGcm9udGFsLnBvbGUgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBmcm9udGFsIHBvbGVgCkYxIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgRjFgCkYyIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgRjJgCkYzLm9yYml0YWwgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBGMyBvcmJpdGFsYApGMy50cmlhbmd1bGFyIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgRjMgdHJpYW5ndWxhcmAKRjMub3BlcmN1bGFyIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgRjMgb3BlcmN1bGFyYApBbnRlcmlvci5vcmJpdGFsIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgYW50ZXJpb3Igb3JiaXRhbGAKTWVkaWFsLm9yYml0YWwgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBtZWRpYWwgb3JiaXRhbGAKTGF0ZXJhbC5vcmJpdGFsIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgbGF0ZXJhbCBvcmJpdGFsYApQb3N0ZXJpb3Iub3JiaXRhbCA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIHBvc3RlcmlvciBvcmJpdGFsYApSZWN0dXMgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSByZWN0dXNgClJvc3RyYWwgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSByb3N0cmFsYAoKUHJlY2VudHJhbCA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIFByZUNgClBvc3RjZW50cmFsIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgUG9zdENgClBhcmFjZW50cmFsLmxvYnVsZSA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIFBhcmFDIGxvYnVsZWAKU3ViY2VudHJhbCA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIFN1YkMgZ3lydXNgCgpTUEwgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBTUExgClNNRyA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIFNNR2AKQU5HIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgQU5HYApQcmVjdW5ldXMgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBQcmVjdW5ldXNgCgpDdW5ldXMgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBDdW5ldXNgCk8xIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgTzFgCk8yIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgTzJgCk8zIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgTzNgCk9jY2lwaXRhbC5wb2xlIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgb2NjaXBpdGFsIHBvbGVgCkxpbmd1YWwgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBsaW5ndWFsYAoKRnVzaWZvcm0gPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBmdXNpZm9ybWAKVGVtcG9yYWwucG9sZSA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIFQxYApUMSA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIFQyYApUMiA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIFQzYApUMyA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIFBsYW51bSB0ZW1wb3JhbGVgClBsYW51bS50ZW1wb3JhbGUgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBQbGFudW0gcG9sYXJlYApQbGFudW0ucG9sYXJlIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgdGVtcG9yYWwgcG9sZWAKClNob3J0Lmluc3VsYXIgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBzaG9ydCBpbnN1bGFyIGd5cmlgCkxvbmcuaW5zdWxhciA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIGxvbmcgaW5zdWxhciBneXJpYAoKU0NBIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgU0NBYApDaW5ndWxhdGUuYW50ZXJpb3IgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBhbnQgY2luZ3VsYXRlYApDaW5ndWxhdGUubWlkZGxlIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgbWlkIGNpbmd1bGF0ZWAKQ2luZ3VsYXRlLnBvc3RlcmlvciA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIHBvc3QgY2luZ3VsYXRlYApQSEcgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBQSEdgCkhpcHBvY2FtcHVzIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgaGlwcG9jYW1wdXNgCkFteWdkYWxhIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgYW15Z2RhbGFgCgpDb3JwdXMuY2FsbG9zdW0gPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBjb3JwdXMgY2FsbG9zdW1gCgpDbGF1c3RydW0gPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBjbGF1c3RydW1gClB1dGFtZW4gPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBwdXRhbWVuYApDYXVkYXRlIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgY2F1ZGF0ZWAKR2xvYnVzLnBhbGxpZHVtIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgcGFsbGlkdW1gCkludGVybmFsLmNhcHN1bGUgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBpbnRlcm5hbCBjYXBzdWxlYApJbm5vbWluYXRlLnN1YnN0YW5jZSA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIHN1YnN0YW50aWEgaW5ub21pbmF0YWAKSHlwb3RoYWxhbXVzIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgaHlwb3RoYWxhbXVzYApUaGFsYW11cyA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIHRoYWxhbXVzYAoKUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUgPC0gYXMuZGF0YS5mcmFtZShjYmluZCgKICBGcm9udGFsLnBvbGUsCiAgRjEsCiAgRjIsCiAgRjMub3JiaXRhbCwgCiAgRjMudHJpYW5ndWxhciwgCiAgRjMub3BlcmN1bGFyLCAKICBBbnRlcmlvci5vcmJpdGFsLCAKICBNZWRpYWwub3JiaXRhbCwgCiAgTGF0ZXJhbC5vcmJpdGFsLCAKICBQb3N0ZXJpb3Iub3JiaXRhbCwKICBSZWN0dXMsIAogIFJvc3RyYWwsIAogIFByZWNlbnRyYWwsIAogIFBvc3RjZW50cmFsLCAKICBQYXJhY2VudHJhbC5sb2J1bGUsIAogIFN1YmNlbnRyYWwsIAogIFNQTCwgCiAgU01HLCAKICBBTkcsIAogIFByZWN1bmV1cywKICBDdW5ldXMsIAogIE8xLAogIE8yLCAKICBPMywgCiAgT2NjaXBpdGFsLnBvbGUsIAogIExpbmd1YWwsIAogIEZ1c2lmb3JtLCAKICBUZW1wb3JhbC5wb2xlLCAKICBUMSwKICBUMiwgCiAgVDMsIAogIFBsYW51bS50ZW1wb3JhbGUsIAogIFBsYW51bS5wb2xhcmUsIAogIFNob3J0Lmluc3VsYXIsIAogIExvbmcuaW5zdWxhciwgCiAgU0NBLCAKICBDaW5ndWxhdGUuYW50ZXJpb3IsIAogIENpbmd1bGF0ZS5taWRkbGUsIAogIENpbmd1bGF0ZS5wb3N0ZXJpb3IsIAogIFBIRywgCiAgSGlwcG9jYW1wdXMsIAogIEFteWdkYWxhLCAKICBDb3JwdXMuY2FsbG9zdW0sIAogIENsYXVzdHJ1bSwgCiAgUHV0YW1lbiwgCiAgQ2F1ZGF0ZSwgCiAgR2xvYnVzLnBhbGxpZHVtLCAKICBJbnRlcm5hbC5jYXBzdWxlLAogIElubm9taW5hdGUuc3Vic3RhbmNlLCAKICBIeXBvdGhhbGFtdXMsCiAgVGhhbGFtdXMKKSkKClByb3NlbmNlcGhhbG9uLmFic29sdXRlJEdlbmRlciA8LSBBbGwuVm9sdW1lcyRHZW5kZXIKClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlIDwtIENyZWF0ZVRhYmxlT25lKAogIHZhcnMgPSBjKCJGcm9udGFsLnBvbGUiLAogICJGMSIsCiAgIkYyIiwKICAiRjMub3JiaXRhbCIsIAogICJGMy50cmlhbmd1bGFyIiwgCiAgIkYzLm9wZXJjdWxhciIsIAogICJBbnRlcmlvci5vcmJpdGFsIiwgCiAgIk1lZGlhbC5vcmJpdGFsIiwgCiAgIkxhdGVyYWwub3JiaXRhbCIsIAogICJQb3N0ZXJpb3Iub3JiaXRhbCIsCiAgIlJlY3R1cyIsIAogICJSb3N0cmFsIiwgCiAgIlByZWNlbnRyYWwiLCAKICAiUG9zdGNlbnRyYWwiLCAKICAiUGFyYWNlbnRyYWwubG9idWxlIiwgCiAgIlN1YmNlbnRyYWwiLCAKICAiU1BMIiwgCiAgIlNNRyIsIAogICJBTkciLCAKICAiUHJlY3VuZXVzIiwKICAiQ3VuZXVzIiwgCiAgIk8xIiwKICAiTzIiLCAKICAiTzMiLCAKICAiT2NjaXBpdGFsLnBvbGUiLCAKICAiTGluZ3VhbCIsIAogICJGdXNpZm9ybSIsIAogICJUZW1wb3JhbC5wb2xlIiwgCiAgIlQxIiwKICAiVDIiLCAKICAiVDMiLCAKICAiUGxhbnVtLnRlbXBvcmFsZSIsIAogICJQbGFudW0ucG9sYXJlIiwgCiAgIlNob3J0Lmluc3VsYXIiLCAKICAiTG9uZy5pbnN1bGFyIiwgCiAgIlNDQSIsIAogICJDaW5ndWxhdGUuYW50ZXJpb3IiLCAKICAiQ2luZ3VsYXRlLm1pZGRsZSIsIAogICJDaW5ndWxhdGUucG9zdGVyaW9yIiwgCiAgIlBIRyIsIAogICJIaXBwb2NhbXB1cyIsIAogICJBbXlnZGFsYSIsIAogICJDb3JwdXMuY2FsbG9zdW0iLCAKICAiQ2xhdXN0cnVtIiwgCiAgIlB1dGFtZW4iLCAKICAiQ2F1ZGF0ZSIsIAogICJHbG9idXMucGFsbGlkdW0iLCAKICAiSW50ZXJuYWwuY2Fwc3VsZSIsCiAgIklubm9taW5hdGUuc3Vic3RhbmNlIiwgCiAgIkh5cG90aGFsYW11cyIsCiAgIlRoYWxhbXVzIiksCiAgZGF0YSA9IFByb3NlbmNlcGhhbG9uLmFic29sdXRlKQoKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIgPC0gQ3JlYXRlVGFibGVPbmUoCiAgdmFycyA9IGMoIkZyb250YWwucG9sZSIsCiAgIkYxIiwKICAiRjIiLAogICJGMy5vcmJpdGFsIiwgCiAgIkYzLnRyaWFuZ3VsYXIiLCAKICAiRjMub3BlcmN1bGFyIiwgCiAgIkFudGVyaW9yLm9yYml0YWwiLCAKICAiTWVkaWFsLm9yYml0YWwiLCAKICAiTGF0ZXJhbC5vcmJpdGFsIiwgCiAgIlBvc3Rlcmlvci5vcmJpdGFsIiwKICAiUmVjdHVzIiwgCiAgIlJvc3RyYWwiLCAKICAiUHJlY2VudHJhbCIsIAogICJQb3N0Y2VudHJhbCIsIAogICJQYXJhY2VudHJhbC5sb2J1bGUiLCAKICAiU3ViY2VudHJhbCIsIAogICJTUEwiLCAKICAiU01HIiwgCiAgIkFORyIsIAogICJQcmVjdW5ldXMiLAogICJDdW5ldXMiLCAKICAiTzEiLAogICJPMiIsIAogICJPMyIsIAogICJPY2NpcGl0YWwucG9sZSIsIAogICJMaW5ndWFsIiwgCiAgIkZ1c2lmb3JtIiwgCiAgIlRlbXBvcmFsLnBvbGUiLCAKICAiVDEiLAogICJUMiIsIAogICJUMyIsIAogICJQbGFudW0udGVtcG9yYWxlIiwgCiAgIlBsYW51bS5wb2xhcmUiLCAKICAiU2hvcnQuaW5zdWxhciIsIAogICJMb25nLmluc3VsYXIiLCAKICAiU0NBIiwgCiAgIkNpbmd1bGF0ZS5hbnRlcmlvciIsIAogICJDaW5ndWxhdGUubWlkZGxlIiwgCiAgIkNpbmd1bGF0ZS5wb3N0ZXJpb3IiLCAKICAiUEhHIiwgCiAgIkhpcHBvY2FtcHVzIiwgCiAgIkFteWdkYWxhIiwgCiAgIkNvcnB1cy5jYWxsb3N1bSIsIAogICJDbGF1c3RydW0iLCAKICAiUHV0YW1lbiIsIAogICJDYXVkYXRlIiwgCiAgIkdsb2J1cy5wYWxsaWR1bSIsIAogICJJbnRlcm5hbC5jYXBzdWxlIiwKICAiSW5ub21pbmF0ZS5zdWJzdGFuY2UiLCAKICAiSHlwb3RoYWxhbXVzIiwKICAiVGhhbGFtdXMiKSwKICBzdHJhdGEgPSBjKCJHZW5kZXIiKSwKICBkYXRhID0gUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUpCgpUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSA8LSBwcmludChUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgY29udERpZ2l0cyA9IDIpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyIDwtIHByaW50KFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLCBjb250RGlnaXRzID0gMikKCndyaXRlLmNzdihUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgIlRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLmNzdiIpCndyaXRlLmNzdihUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlciwgIlRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLmNzdiIpCgpgYGAKCmBgYHtyIFRoZSBQcm9zZW5jZXBoYWxvbjogQWJzb2x1dGUgVm9sdW1lcyByZWxhdGl2ZSBzdGFuZGFyZCBkZXZpYXRpb25zfQoKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLlJTRCA8LSBkYXRhLmZyYW1lKGRvLmNhbGwoJ3JiaW5kJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryc3BsaXQoYXMuY2hhcmFjdGVyKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLlJTRFstMSxdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICgnLGZpeGVkPVRSVUUpKSkKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuUlNEIDwtIGRhdGEuZnJhbWUoY2JpbmQoc3RyX3JlcGxhY2VfYWxsKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLlJTRCRYMSwgIlsgXSIsICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3JlcGxhY2VfYWxsKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLlJTRCRYMiwgIlspXSIsICIiKSkpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLlJTRCRYMSA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuUlNEJFgxKQpUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5SU0QkWDIgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLlJTRCRYMikKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuUlNEIDwtIGFzLmRhdGEuZnJhbWUoc2FwcGx5KFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLlJTRCwgYXMubnVtZXJpYykpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLlJTRCA8LSBhcy5kYXRhLmZyYW1lKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLlJTRCRYMi9UYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5SU0QkWDEpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLlJTRCA8LSByb3VuZChUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5SU0QgKiAxMDAsIDEpCgoKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRCA8LSBzZWxlY3QoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELCAtIGMocCwgdGVzdCkpCgpUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlIDwtIGRhdGEuZnJhbWUoZG8uY2FsbCgncmJpbmQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzcGxpdChhcy5jaGFyYWN0ZXIoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNEWy0xLCAiZiJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICgnLGZpeGVkPVRSVUUpKSkKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSBkYXRhLmZyYW1lKGNiaW5kKHN0cl9yZXBsYWNlX2FsbChUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgxLCAiWyBdIiwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMiwgIlspXSIsICIiKSkpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gYXMuZGF0YS5mcmFtZShzYXBwbHkoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSwgYXMubnVtZXJpYykpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgyL1RhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gcm91bmQoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSAqIDEwMCwgMSkKClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIGRhdGEuZnJhbWUoZG8uY2FsbCgncmJpbmQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzcGxpdChhcy5jaGFyYWN0ZXIoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNEWy0xLCAibSJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICgnLGZpeGVkPVRSVUUpKSkKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gZGF0YS5mcmFtZShjYmluZChzdHJfcmVwbGFjZV9hbGwoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEsICJbIF0iLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlX2FsbChUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMiwgIlspXSIsICIiKSkpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgxIDwtIGFzLmNoYXJhY3RlcihUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMSkKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgyKQpUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSA8LSBhcy5kYXRhLmZyYW1lKHNhcHBseShUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSwgYXMubnVtZXJpYykpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIvVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIHJvdW5kKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlICogMTAwLCAxKQoKYGBgCgpgYGB7ciBUaGUgUHJvc2VuY2VwaGFsb246IEFic29sdXRlIFZvbHVtZXMgVGFibGVzfQoKa2FibGUoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUpCmthYmxlKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLlJTRCkKa2FibGUoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIpCmthYmxlKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUpCmthYmxlKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlKQoKYGBgCgpgYGB7ciBUaGUgUHJvc2VuY2VwaGFsb25fR3lyaTogQWJzb2x1dGUgVm9sdW1lcyBhbmQgR2VuZGVyIFBsb3R9CgpQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSA8LSBzZWxlY3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIC0gYyhHZW5kZXIpKQpQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZTEgPC0gUHJvc2VuY2VwaGFsb24uYWJzb2x1dGVbLC1jKDQxOjUxKV0KUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUyIDwtIFByb3NlbmNlcGhhbG9uLmFic29sdXRlWywgYyg0MTo1MSldCgpuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMudGVtcG9yYXJ5IDwtIGMoIkZyb250YWwucG9sZSIsCiAgIkYxIiwKICAiRjIiLAogICJGMy5vcmJpdGFsIiwgCiAgIkYzLnRyaWFuZ3VsYXIiLCAKICAiRjMub3BlcmN1bGFyIiwgCiAgIkFudGVyaW9yLm9yYml0YWwiLCAKICAiTWVkaWFsLm9yYml0YWwiLCAKICAiTGF0ZXJhbC5vcmJpdGFsIiwgCiAgIlBvc3Rlcmlvci5vcmJpdGFsIiwKICAiUmVjdHVzIiwgCiAgIlJvc3RyYWwiLCAKICAiUHJlY2VudHJhbCIsIAogICJQb3N0Y2VudHJhbCIsIAogICJQYXJhY2VudHJhbC5sb2J1bGUiLCAKICAiU3ViY2VudHJhbCIsIAogICJTUEwiLCAKICAiU01HIiwgCiAgIkFORyIsIAogICJQcmVjdW5ldXMiLAogICJDdW5ldXMiLCAKICAiTzEiLAogICJPMiIsIAogICJPMyIsIAogICJPY2NpcGl0YWwucG9sZSIsIAogICJMaW5ndWFsIiwgCiAgIkZ1c2lmb3JtIiwgCiAgIlRlbXBvcmFsLnBvbGUiLCAKICAiVDEiLAogICJUMiIsIAogICJUMyIsIAogICJQbGFudW0udGVtcG9yYWxlIiwgCiAgIlBsYW51bS5wb2xhcmUiLCAKICAiU2hvcnQuaW5zdWxhciIsIAogICJMb25nLmluc3VsYXIiLCAKICAiU0NBIiwgCiAgIkNpbmd1bGF0ZS5hbnRlcmlvciIsIAogICJDaW5ndWxhdGUubWlkZGxlIiwgCiAgIkNpbmd1bGF0ZS5wb3N0ZXJpb3IiLCAKICAiUEhHIikKCm5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy5kZWZpbml0aXZlIDwtIGMoIkZyb250YWwgcG9sZSIsCiAgIkYxIiwKICAiRjIiLAogICJGMyBvcmJpdGFsIiwgCiAgIkYzIHRyaWFuZ3VsYXIiLCAKICAiRjMgb3BlcmN1bGFyIiwgCiAgIkFudGVyaW9yIG9yYml0YWwiLCAKICAiTWVkaWFsIG9yYml0YWwiLCAKICAiTGF0ZXJhbCBvcmJpdGFsIiwgCiAgIlBvc3RlcmlvciBvcmJpdGFsIiwKICAiUmVjdHVzIiwgCiAgIlJvc3RyYWwiLCAKICAiUHJlY2VudHJhbCIsIAogICJQb3N0Y2VudHJhbCIsIAogICJQYXJhY2VudHJhbCBsb2J1bGUiLCAKICAiU3ViY2VudHJhbCIsIAogICJTUEwiLCAKICAiU01HIiwgCiAgIkFORyIsIAogICJQcmVjdW5ldXMiLAogICJDdW5ldXMiLCAKICAiTzEiLAogICJPMiIsIAogICJPMyIsIAogICJPY2NpcGl0YWwgcG9sZSIsIAogICJMaW5ndWFsIiwgCiAgIkZ1c2lmb3JtIiwgCiAgIlRlbXBvcmFsIHBvbGUiLCAKICAiVDEiLAogICJUMiIsIAogICJUMyIsIAogICJQbGFudW0gdGVtcG9yYWxlIiwgCiAgIlBsYW51bSBwb2xhcmUiLCAKICAiU2hvcnQgaW5zdWxhciIsIAogICJMb25nIGluc3VsYXIiLCAKICAiU0NBIiwgCiAgIkNpbmd1bGF0ZSBhbnRlcmlvciIsIAogICJDaW5ndWxhdGUgbWlkZGxlIiwgCiAgIkNpbmd1bGF0ZSBwb3N0ZXJpb3IiLCAKICAiUEhHIikKCgpQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5wbG90ZGF0YTEgPC0gZ2F0aGVyKFByb3NlbmNlcGhhbG9uLmFic29sdXRlMSwgImFuYXRvbWljYWwuc3RydWN0dXJlIiwgInJlbGF0aXZlLnZvbHVtZSIpClByb3NlbmNlcGhhbG9uLmFic29sdXRlLnBsb3RkYXRhMSRHZW5kZXIgPC0gQWxsLlZvbHVtZXMkR2VuZGVyClByb3NlbmNlcGhhbG9uLmFic29sdXRlLnBsb3RkYXRhMSRBZ2UgPC0gQWxsLlZvbHVtZXMkYEFnZSAoeWVhcnMpYApQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5wbG90ZGF0YTEkR2VuZGVyIDwtIGZhY3RvcihQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5wbG90ZGF0YTEkR2VuZGVyLCBsZXZlbHMgPSBjKCJmIiwgIm0iKSwgYygiZiIsICJtIikpCgpQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5wbG90ZGF0YTEkYW5hdG9taWNhbC5zdHJ1Y3R1cmUgPC0gZmFjdG9yKFByb3NlbmNlcGhhbG9uLmFic29sdXRlLnBsb3RkYXRhMSRhbmF0b21pY2FsLnN0cnVjdHVyZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSByZXYoYyhuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMudGVtcG9yYXJ5KSksIHJldihjKG5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy5kZWZpbml0aXZlKSkpCgpQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5wbG90MSA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLnBsb3RkYXRhMSwgYWVzKHg9YW5hdG9taWNhbC5zdHJ1Y3R1cmUsIHkgPSByZWxhdGl2ZS52b2x1bWUpKSAgKwogIHN0YXRfc3VtbWFyeShhbHBoYSA9IDAuMywgZnVuID0gbWVhbiwgZ2VvbSA9ICJiYXIiLCB3aWR0aCA9IDAuMywgZmlsbCA9ICJncmF5NTAiKSArIAogIGdlb21fYm94cGxvdChhZXMoZmlsbCA9IEdlbmRlciksIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNCwgc2l6ZSA9IDAuMiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNiksIAogICAgICAgICAgICAgICBvdXRsaWVyLnNoYXBlID0gTkEsIGNvbG9yID0gImdyYXkzMCIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3F1YXNpcmFuZG9tKGFlcyhjb2xvciA9IEFnZSksIHNpemUgPSAwLjcsIGFscGhhID0gMC44LCBzaGFwZSA9IDE2LCBwb3NpdGlvbiA9ICJkb2RnZSIpICsKICBzY2FsZV9jb2xvcl9jb250aW51b3VzKGxvdyA9ICJzdGVlbGJsdWUxIiwgaGlnaCA9ICJyZWQ0IikgKwogIHhsYWIoIiIpICsgeWxhYigiQWJzb2x1dGUgdm9sdW1lIChpbiBtbTMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgY29vcmRfZmxpcCgpICsKICBnZ3RpdGxlKCJDRVJFQlJBTCBHWVJJIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQoKUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUucGxvdDEKZ2dzYXZlKCJQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5wbG90MS5wZGYiLCBwbG90ID0gUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUucGxvdDEsIHdpZHRoID0gMTQsIGhlaWdodCA9IDEyLCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKCmBgYAoKYGBge3IgVGhlIFByb3NlbmNlcGhhbG9uX0NlbnRyYWwgU3RydWN0dXJlczogQWJzb2x1dGUgVm9sdW1lcyBhbmQgR2VuZGVyIFBsb3R9CgpuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMudGVtcG9yYXJ5IDwtIGMoCiAgIkNvcnB1cy5jYWxsb3N1bSIsIAogICJDbGF1c3RydW0iLCAKICAiUHV0YW1lbiIsIAogICJDYXVkYXRlIiwgCiAgIkdsb2J1cy5wYWxsaWR1bSIsIAogICJJbnRlcm5hbC5jYXBzdWxlIiwKICAiSW5ub21pbmF0ZS5zdWJzdGFuY2UiLCAKICAiSHlwb3RoYWxhbXVzIiwKICAiVGhhbGFtdXMiLCAKICAiSGlwcG9jYW1wdXMiLCAKICAiQW15Z2RhbGEiKQoKbmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLmRlZmluaXRpdmUgPC0gYygKICAiQ29ycHVzIGNhbGxvc3VtIiwgCiAgIkNsYXVzdHJ1bSIsIAogICJQdXRhbWVuIiwgCiAgIkNhdWRhdGUiLCAKICAiR2xvYnVzIHBhbGxpZHVtIiwgCiAgIkludGVybmFsIGNhcHN1bGUiLAogICJJbm5vbWluYXRlIHN1YnN0YW5jZSIsIAogICJIeXBvdGhhbGFtdXMiLAogICJUaGFsYW11cyIsCiAgIkhpcHBvY2FtcHVzIiwgCiAgIkFteWdkYWxhIikKClByb3NlbmNlcGhhbG9uLmFic29sdXRlLnBsb3RkYXRhMiA8LSBnYXRoZXIoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUyLCAiYW5hdG9taWNhbC5zdHJ1Y3R1cmUiLCAicmVsYXRpdmUudm9sdW1lIikKUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUucGxvdGRhdGEyJEdlbmRlciA8LSBBbGwuVm9sdW1lcyRHZW5kZXIKUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUucGxvdGRhdGEyJEFnZSA8LSBBbGwuVm9sdW1lcyRgQWdlICh5ZWFycylgCgpQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5wbG90ZGF0YTIkR2VuZGVyIDwtIGZhY3RvcihQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5wbG90ZGF0YTIkR2VuZGVyLCBsZXZlbHMgPSBjKCJmIiwgIm0iKSwgYygiZiIsICJtIikpClByb3NlbmNlcGhhbG9uLmFic29sdXRlLnBsb3RkYXRhMiRhbmF0b21pY2FsLnN0cnVjdHVyZSA8LSBmYWN0b3IoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUucGxvdGRhdGEyJGFuYXRvbWljYWwuc3RydWN0dXJlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IHJldihjKG5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy50ZW1wb3JhcnkpKSwgcmV2KGMobmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLmRlZmluaXRpdmUpKSkKClByb3NlbmNlcGhhbG9uLmFic29sdXRlLnBsb3QyIDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUucGxvdGRhdGEyLCBhZXMoeD1hbmF0b21pY2FsLnN0cnVjdHVyZSwgeSA9IHJlbGF0aXZlLnZvbHVtZSkpICArCiAgc3RhdF9zdW1tYXJ5KGFscGhhID0gMC4zLCBmdW4gPSBtZWFuLCBnZW9tID0gImJhciIsIHdpZHRoID0gMC4zLCBmaWxsID0gImdyYXk1MCIpICsgCiAgZ2VvbV9ib3hwbG90KGFlcyhmaWxsID0gR2VuZGVyKSwgYWxwaGEgPSAwLjUsIHdpZHRoID0gMC40LCBzaXplID0gMC4yLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC42KSwgCiAgICAgICAgICAgICAgIG91dGxpZXIuc2hhcGUgPSBOQSwgY29sb3IgPSAiZ3JheTMwIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fcXVhc2lyYW5kb20oYWVzKGNvbG9yID0gQWdlKSwgc2l6ZSA9IDAuNywgYWxwaGEgPSAwLjgsIHNoYXBlID0gMTYsIHBvc2l0aW9uID0gImRvZGdlIikgKwogIHNjYWxlX2NvbG9yX2NvbnRpbnVvdXMobG93ID0gInN0ZWVsYmx1ZTEiLCBoaWdoID0gInJlZDQiKSArCiAgeGxhYigiIikgKyB5bGFiKCJBYnNvbHV0ZSB2b2x1bWUgKGluIG1tMykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBjb29yZF9mbGlwKCkgKwogIGdndGl0bGUoIkNFTlRSQUwgUFJPU0VOQ0VQSEFMT04iKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCgpQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5wbG90MgpnZ3NhdmUoIlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnBsb3QyLnBkZiIsIHBsb3QgPSBQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5wbG90Miwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpgYGAKCmBgYHtyIFRoZSBQcm9zZW5jZXBoYWxvbjogQWJzb2x1dGUgVm9sdW1lcyBhbmQgQWdlIFBsb3R9CgpQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSRHZW5kZXIgPC0gQWxsLlZvbHVtZXMkR2VuZGVyClByb3NlbmNlcGhhbG9uLmFic29sdXRlJEFnZSA8LSBBbGwuVm9sdW1lcyRgQWdlICh5ZWFycylgCgpUb3RhbC5Gcm9udGFsLnBvbGUuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9RnJvbnRhbC5wb2xlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDY3MDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgZnJvbnRhbCBwb2xlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5Gcm9udGFsLnBvbGUuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5Gcm9udGFsLnBvbGUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkZyb250YWwucG9sZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkYxLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PUYxLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDc3MDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIEYxIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5GMS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkYxLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5GMS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkYyLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PUYyLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDcyMDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIEYyIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5GMi5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkYyLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5GMi5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkYzLm9yYml0YWwuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9RjMub3JiaXRhbCwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA0NjAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIEYzIG9yYml0YWwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLkYzLm9yYml0YWwuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5GMy5vcmJpdGFsLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5GMy5vcmJpdGFsLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuRjMudHJpYW5ndWxhci5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLCBhZXMoeT1GMy50cmlhbmd1bGFyLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEzMzAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIEYzIHRyaWFuZ3VsYXIiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLkYzLnRyaWFuZ3VsYXIuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5GMy50cmlhbmd1bGFyLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5GMy50cmlhbmd1bGFyLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuRjMub3BlcmN1bGFyLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PUYzLm9wZXJjdWxhciwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxNzMwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBGMyBvcGVyY3VsYXIiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLkYzLm9wZXJjdWxhci5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkYzLm9wZXJjdWxhci5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuRjMub3BlcmN1bGFyLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuQW50ZXJpb3Iub3JiaXRhbC5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLCBhZXMoeT1BbnRlcmlvci5vcmJpdGFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDUyMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgYW50ZXJpb3Igb3JiaXRhbCIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuQW50ZXJpb3Iub3JiaXRhbC5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkFudGVyaW9yLm9yYml0YWwuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkFudGVyaW9yLm9yYml0YWwuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5NZWRpYWwub3JiaXRhbC5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLCBhZXMoeT1NZWRpYWwub3JiaXRhbCwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxMDUwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBtZWRpYWwgb3JiaXRhbCIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuTWVkaWFsLm9yYml0YWwuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5NZWRpYWwub3JiaXRhbC5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuTWVkaWFsLm9yYml0YWwuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5MYXRlcmFsLm9yYml0YWwuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9TGF0ZXJhbC5vcmJpdGFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDgyMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgbGF0ZXJhbCBvcmJpdGFsIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5MYXRlcmFsLm9yYml0YWwuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5MYXRlcmFsLm9yYml0YWwuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkxhdGVyYWwub3JiaXRhbC5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLlBvc3Rlcmlvci5vcmJpdGFsLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PVBvc3Rlcmlvci5vcmJpdGFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEwMjAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIHBvc3RlcmlvciBvcmJpdGFsIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5Qb3N0ZXJpb3Iub3JiaXRhbC5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlBvc3Rlcmlvci5vcmJpdGFsLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5Qb3N0ZXJpb3Iub3JiaXRhbC5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLlJlY3R1cy5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLCBhZXMoeT1SZWN0dXMsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMjIwMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgcmVjdHVzIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5SZWN0dXMuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5SZWN0dXMuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLlJlY3R1cy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLlJvc3RyYWwuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9Um9zdHJhbCwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA0MzAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIHJvc3RyYWwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLlJvc3RyYWwuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5Sb3N0cmFsLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5Sb3N0cmFsLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuUHJlY2VudHJhbC5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLCBhZXMoeT1QcmVjZW50cmFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDQ4MDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIHByZWNlbnRyYWwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLlByZWNlbnRyYWwuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5QcmVjZW50cmFsLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5QcmVjZW50cmFsLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuUG9zdGNlbnRyYWwuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9UG9zdGNlbnRyYWwsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMjY1MDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgcG9zdGNlbnRyYWwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLlBvc3RjZW50cmFsLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuUG9zdGNlbnRyYWwuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLlBvc3RjZW50cmFsLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuUGFyYWNlbnRyYWwubG9idWxlLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PVBhcmFjZW50cmFsLmxvYnVsZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxNzIwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBwYXJhY2VudHJhbCBsb2J1bGUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLlBhcmFjZW50cmFsLmxvYnVsZS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlBhcmFjZW50cmFsLmxvYnVsZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuUGFyYWNlbnRyYWwubG9idWxlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuU3ViY2VudHJhbC5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLCBhZXMoeT1TdWJjZW50cmFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDcyMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgc3ViY2VudHJhbCIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuU3ViY2VudHJhbC5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlN1YmNlbnRyYWwuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLlN1YmNlbnRyYWwuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5TUEwuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9U1BMLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDM4MDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIHN1cGVyaW9yIHBhcmlldGFsIGxvYnVsZSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuU1BMLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuU1BMLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5TUEwuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5TTUcuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9U01HLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDM2MDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIHN1cHJhbWFyZ2luYWwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLlNNRy5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlNNRy5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuU01HLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuQU5HLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PUFORywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAzODAwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBhbmd1bGFyIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5BTkcuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5BTkcuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkFORy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLlByZWN1bmV1cy5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLCBhZXMoeT1QcmVjdW5ldXMsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMzMwMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgcHJlY3VuZXVzIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5QcmVjdW5ldXMuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5QcmVjdW5ldXMuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLlByZWN1bmV1cy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkN1bmV1cy5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLCBhZXMoeT1DdW5ldXMsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMTE3MDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgY3VuZXVzIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5DdW5ldXMuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5DdW5ldXMuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkN1bmV1cy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLk8xLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PU8xLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDExMjAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIE8xIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5PMS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLk8xLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5PMS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLk8yLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PU8yLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDE4MDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIE8yIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5PMi5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLk8yLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5PMi5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLk8zLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PU8zLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDExNTAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIE8zIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5PMy5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLk8zLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5PMy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLk9jY2lwaXRhbC5wb2xlLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PU9jY2lwaXRhbC5wb2xlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEzMjAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIG9jY2lwaXRhbCBwb2xlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5PY2NpcGl0YWwucG9sZS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLk9jY2lwaXRhbC5wb2xlLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5PY2NpcGl0YWwucG9sZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkxpbmd1YWwuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9TGluZ3VhbCwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAyNTAwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBsaW5ndWFsIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5MaW5ndWFsLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuTGluZ3VhbC5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuTGluZ3VhbC5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkZ1c2lmb3JtLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PUZ1c2lmb3JtLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDI2MDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGZ1c2lmb3JtIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5GdXNpZm9ybS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkZ1c2lmb3JtLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5GdXNpZm9ybS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLlRlbXBvcmFsLnBvbGUuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9VGVtcG9yYWwucG9sZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAzMTAwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSB0ZW1wb3JhbCBwb2xlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5UZW1wb3JhbC5wb2xlLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuVGVtcG9yYWwucG9sZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuVGVtcG9yYWwucG9sZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLlQxLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PVQxLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDMxMDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIFQxIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5UMS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlQxLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5UMS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLlQyLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PVQyLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDI5MDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIFQyIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5UMi5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlQyLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5UMi5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLlQzLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PVQzLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDYxMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgVDMiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLlQzLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuVDMuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLlQzLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuUGxhbnVtLnRlbXBvcmFsZS5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLCBhZXMoeT1QbGFudW0udGVtcG9yYWxlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDQxMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgcGxhbnVtIHRlbXBvcmFsZSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuUGxhbnVtLnRlbXBvcmFsZS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlBsYW51bS50ZW1wb3JhbGUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLlBsYW51bS50ZW1wb3JhbGUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5QbGFudW0ucG9sYXJlLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PVBsYW51bS5wb2xhcmUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMTMzMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgcGxhbnVtIHBvbGFyZSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuUGxhbnVtLnBvbGFyZS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlBsYW51bS5wb2xhcmUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLlBsYW51bS5wb2xhcmUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5TaG9ydC5pbnN1bGFyLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PVNob3J0Lmluc3VsYXIsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMTkwMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgc2hvcnQgaW5zdWxhciIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuU2hvcnQuaW5zdWxhci5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlNob3J0Lmluc3VsYXIuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLlNob3J0Lmluc3VsYXIuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5Mb25nLmluc3VsYXIuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9TG9uZy5pbnN1bGFyLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEyMDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGxvbmcgaW5zdWxhciIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuTG9uZy5pbnN1bGFyLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuTG9uZy5pbnN1bGFyLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5Mb25nLmluc3VsYXIuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5TQ0EuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9U0NBLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDM4MDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgc3ViY2FsbG9zYWwgYXJlYSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuU0NBLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuU0NBLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5TQ0EuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5DaW5ndWxhdGUuYW50ZXJpb3IuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9Q2luZ3VsYXRlLmFudGVyaW9yLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDE3MzAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGNpbmd1bGF0ZSBhbnRlcmlvciIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuQ2luZ3VsYXRlLmFudGVyaW9yLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuQ2luZ3VsYXRlLmFudGVyaW9yLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5DaW5ndWxhdGUuYW50ZXJpb3IuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5DaW5ndWxhdGUubWlkZGxlLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PUNpbmd1bGF0ZS5taWRkbGUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMjAzMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgY2luZ3VsYXRlIG1pZGRsZSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuQ2luZ3VsYXRlLm1pZGRsZS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkNpbmd1bGF0ZS5taWRkbGUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkNpbmd1bGF0ZS5taWRkbGUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5DaW5ndWxhdGUucG9zdGVyaW9yLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PUNpbmd1bGF0ZS5wb3N0ZXJpb3IsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMjQzMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgY2luZ3VsYXRlIHBvc3RlcmlvciIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuQ2luZ3VsYXRlLnBvc3Rlcmlvci5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkNpbmd1bGF0ZS5wb3N0ZXJpb3IuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkNpbmd1bGF0ZS5wb3N0ZXJpb3IuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5QSEcuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9UEhHLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDE0MDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIFBIRyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuUEhHLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuUEhHLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5QSEcuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5IaXBwb2NhbXB1cy5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLCBhZXMoeT1IaXBwb2NhbXB1cywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA5NzAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGhpcHBvY2FtcHVzIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5IaXBwb2NhbXB1cy5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkhpcHBvY2FtcHVzLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5IaXBwb2NhbXB1cy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkFteWdkYWxhLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PUFteWdkYWxhLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDM2MDAsIGxhYmVsLnggPSA2MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgYW15Z2RhbGEiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLkFteWdkYWxhLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuQW15Z2RhbGEuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkFteWdkYWxhLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuQ29ycHVzLmNhbGxvc3VtLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PUNvcnB1cy5jYWxsb3N1bSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA0MTAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGNvcnB1cyBjYWxsb3N1bSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuQ29ycHVzLmNhbGxvc3VtLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuQ29ycHVzLmNhbGxvc3VtLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5Db3JwdXMuY2FsbG9zdW0uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5DbGF1c3RydW0uQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9Q2xhdXN0cnVtLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDIxMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgY2xhdXN0cnVtIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5DbGF1c3RydW0uQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5DbGF1c3RydW0uQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkNsYXVzdHJ1bS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLlB1dGFtZW4uQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9UHV0YW1lbiwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxMjMwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBwdXRhbWVuIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5QdXRhbWVuLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuUHV0YW1lbi5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuUHV0YW1lbi5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkNhdWRhdGUuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9Q2F1ZGF0ZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxMDIwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBjYXVkYXRlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5DYXVkYXRlLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuQ2F1ZGF0ZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuQ2F1ZGF0ZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkdsb2J1cy5wYWxsaWR1bS5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLCBhZXMoeT1HbG9idXMucGFsbGlkdW0sIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gNDIwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBnbG9idXMgcGFsbGlkdW0iKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLkdsb2J1cy5wYWxsaWR1bS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkdsb2J1cy5wYWxsaWR1bS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuR2xvYnVzLnBhbGxpZHVtLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuSW50ZXJuYWwuY2Fwc3VsZS5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLmFic29sdXRlLCBhZXMoeT1JbnRlcm5hbC5jYXBzdWxlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEyMjAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGludGVybmFsIGNhcHN1bGUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLkludGVybmFsLmNhcHN1bGUuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5JbnRlcm5hbC5jYXBzdWxlLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5JbnRlcm5hbC5jYXBzdWxlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuSW5ub21pbmF0ZS5zdWJzdGFuY2UuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9SW5ub21pbmF0ZS5zdWJzdGFuY2UsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMzE4MCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBpbm5vbWluYXRlIHN1YnN0YW5jZSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuSW5ub21pbmF0ZS5zdWJzdGFuY2UuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5Jbm5vbWluYXRlLnN1YnN0YW5jZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuSW5ub21pbmF0ZS5zdWJzdGFuY2UuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5IeXBvdGhhbGFtdXMuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgYWVzKHk9SHlwb3RoYWxhbXVzLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDkyMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgaHlwb3RoYWxhbXVzIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5IeXBvdGhhbGFtdXMuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5IeXBvdGhhbGFtdXMuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkh5cG90aGFsYW11cy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLlRoYWxhbXVzLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUsIGFlcyh5PVRoYWxhbXVzLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDE3MDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIHRoYWxhbXVzIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5UaGFsYW11cy5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlRoYWxhbXVzLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5UaGFsYW11cy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKCmBgYAoKIyMgUmVsYXRpdmUgVm9sdW1lcwoKYGBge3IgVGhlIFByb3NlbmNlcGhhbG9uOiBSZWxhdGl2ZSBWb2x1bWVzfQoKI1Byb3NlbmNlcGhhbG9uLmFic29sdXRlIDwtIHNlbGVjdChQcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZSwgLSBjKEdlbmRlcikpClByb3NlbmNlcGhhbG9uLnJlbGF0aXZlIDwtICgxMDAgKiAoUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUvQWxsLlZvbHVtZXMkYFRvdGFsIGVuY2VwaGFsaWMgdm9sdW1lICh3aXRob3V0IHZlbnRyaWNsZXMpYCkpClByb3NlbmNlcGhhbG9uLnJlbGF0aXZlMSA8LSBQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZVssLWMoNDE6NTEpXQpQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZTIgPC0gUHJvc2VuY2VwaGFsb24ucmVsYXRpdmVbLCBjKDQxOjUxKV0KClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlIDwtIENyZWF0ZVRhYmxlT25lKAogIHZhcnMgPSBjKCJGcm9udGFsLnBvbGUiLAogICJGMSIsCiAgIkYyIiwKICAiRjMub3JiaXRhbCIsIAogICJGMy50cmlhbmd1bGFyIiwgCiAgIkYzLm9wZXJjdWxhciIsIAogICJBbnRlcmlvci5vcmJpdGFsIiwgCiAgIk1lZGlhbC5vcmJpdGFsIiwgCiAgIkxhdGVyYWwub3JiaXRhbCIsIAogICJQb3N0ZXJpb3Iub3JiaXRhbCIsCiAgIlJlY3R1cyIsIAogICJSb3N0cmFsIiwgCiAgIlByZWNlbnRyYWwiLCAKICAiUG9zdGNlbnRyYWwiLCAKICAiUGFyYWNlbnRyYWwubG9idWxlIiwgCiAgIlN1YmNlbnRyYWwiLCAKICAiU1BMIiwgCiAgIlNNRyIsIAogICJBTkciLCAKICAiUHJlY3VuZXVzIiwKICAiQ3VuZXVzIiwgCiAgIk8xIiwKICAiTzIiLCAKICAiTzMiLCAKICAiT2NjaXBpdGFsLnBvbGUiLCAKICAiTGluZ3VhbCIsIAogICJGdXNpZm9ybSIsIAogICJUZW1wb3JhbC5wb2xlIiwgCiAgIlQxIiwKICAiVDIiLCAKICAiVDMiLCAKICAiUGxhbnVtLnRlbXBvcmFsZSIsIAogICJQbGFudW0ucG9sYXJlIiwgCiAgIlNob3J0Lmluc3VsYXIiLCAKICAiTG9uZy5pbnN1bGFyIiwgCiAgIlNDQSIsIAogICJDaW5ndWxhdGUuYW50ZXJpb3IiLCAKICAiQ2luZ3VsYXRlLm1pZGRsZSIsIAogICJDaW5ndWxhdGUucG9zdGVyaW9yIiwgCiAgIlBIRyIsIAogICJIaXBwb2NhbXB1cyIsIAogICJBbXlnZGFsYSIsIAogICJDb3JwdXMuY2FsbG9zdW0iLCAKICAiQ2xhdXN0cnVtIiwgCiAgIlB1dGFtZW4iLCAKICAiQ2F1ZGF0ZSIsIAogICJHbG9idXMucGFsbGlkdW0iLCAKICAiSW50ZXJuYWwuY2Fwc3VsZSIsCiAgIklubm9taW5hdGUuc3Vic3RhbmNlIiwgCiAgIkh5cG90aGFsYW11cyIsCiAgIlRoYWxhbXVzIiksCiAgZGF0YSA9IFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlKQoKUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUkR2VuZGVyIDwtIEFsbC5Wb2x1bWVzJEdlbmRlcgpUYWJsZS5Qcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlciA8LSBDcmVhdGVUYWJsZU9uZSgKICB2YXJzID0gYygiRnJvbnRhbC5wb2xlIiwKICAiRjEiLAogICJGMiIsCiAgIkYzLm9yYml0YWwiLCAKICAiRjMudHJpYW5ndWxhciIsIAogICJGMy5vcGVyY3VsYXIiLCAKICAiQW50ZXJpb3Iub3JiaXRhbCIsIAogICJNZWRpYWwub3JiaXRhbCIsIAogICJMYXRlcmFsLm9yYml0YWwiLCAKICAiUG9zdGVyaW9yLm9yYml0YWwiLAogICJSZWN0dXMiLCAKICAiUm9zdHJhbCIsIAogICJQcmVjZW50cmFsIiwgCiAgIlBvc3RjZW50cmFsIiwgCiAgIlBhcmFjZW50cmFsLmxvYnVsZSIsIAogICJTdWJjZW50cmFsIiwgCiAgIlNQTCIsIAogICJTTUciLCAKICAiQU5HIiwgCiAgIlByZWN1bmV1cyIsCiAgIkN1bmV1cyIsIAogICJPMSIsCiAgIk8yIiwgCiAgIk8zIiwgCiAgIk9jY2lwaXRhbC5wb2xlIiwgCiAgIkxpbmd1YWwiLCAKICAiRnVzaWZvcm0iLCAKICAiVGVtcG9yYWwucG9sZSIsIAogICJUMSIsCiAgIlQyIiwgCiAgIlQzIiwgCiAgIlBsYW51bS50ZW1wb3JhbGUiLCAKICAiUGxhbnVtLnBvbGFyZSIsIAogICJTaG9ydC5pbnN1bGFyIiwgCiAgIkxvbmcuaW5zdWxhciIsIAogICJTQ0EiLCAKICAiQ2luZ3VsYXRlLmFudGVyaW9yIiwgCiAgIkNpbmd1bGF0ZS5taWRkbGUiLCAKICAiQ2luZ3VsYXRlLnBvc3RlcmlvciIsIAogICJQSEciLCAKICAiSGlwcG9jYW1wdXMiLCAKICAiQW15Z2RhbGEiLCAKICAiQ29ycHVzLmNhbGxvc3VtIiwgCiAgIkNsYXVzdHJ1bSIsIAogICJQdXRhbWVuIiwgCiAgIkNhdWRhdGUiLCAKICAiR2xvYnVzLnBhbGxpZHVtIiwgCiAgIkludGVybmFsLmNhcHN1bGUiLAogICJJbm5vbWluYXRlLnN1YnN0YW5jZSIsIAogICJIeXBvdGhhbGFtdXMiLAogICJUaGFsYW11cyIpLAogIHN0cmF0YSA9IGMoIkdlbmRlciIpLAogIGRhdGEgPSBQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSkKClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlIDwtIHByaW50KFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBjb250RGlnaXRzID0gMTApClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyIDwtIHByaW50KFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLCBjb250RGlnaXRzID0gMTApCgpgYGAKCmBgYHtyIFRoZSBQcm9zZW5jZXBoYWxvbjogUmVsYXRpdmUgVm9sdW1lcyByZWxhdGl2ZSBzdGFuZGFyZCBkZXZpYXRpb25zfQoKVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLlJTRCA8LSBkYXRhLmZyYW1lKGRvLmNhbGwoJ3JiaW5kJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryc3BsaXQoYXMuY2hhcmFjdGVyKFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLlJTRFstMSxdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICgnLGZpeGVkPVRSVUUpKSkKVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuUlNEIDwtIGRhdGEuZnJhbWUoY2JpbmQoc3RyX3JlcGxhY2VfYWxsKFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLlJTRCRYMSwgIlsgXSIsICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3JlcGxhY2VfYWxsKFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLlJTRCRYMiwgIlspXSIsICIiKSkpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLlJTRCRYMSA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuUlNEJFgxKQpUYWJsZS5Qcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5SU0QkWDIgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLlJTRCRYMikKVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuUlNEIDwtIGFzLmRhdGEuZnJhbWUoc2FwcGx5KFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLlJTRCwgYXMubnVtZXJpYykpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLlJTRCA8LSBhcy5kYXRhLmZyYW1lKFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLlJTRCRYMi9UYWJsZS5Qcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5SU0QkWDEpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLlJTRCA8LSByb3VuZChUYWJsZS5Qcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5SU0QgKiAxMDAsIDEpCgoKVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRCA8LSBzZWxlY3QoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELCAtIGMocCwgdGVzdCkpCgpUYWJsZS5Qcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlIDwtIGRhdGEuZnJhbWUoZG8uY2FsbCgncmJpbmQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzcGxpdChhcy5jaGFyYWN0ZXIoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNEWy0xLCAiZiJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICgnLGZpeGVkPVRSVUUpKSkKVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSBkYXRhLmZyYW1lKGNiaW5kKHN0cl9yZXBsYWNlX2FsbChUYWJsZS5Qcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgxLCAiWyBdIiwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMiwgIlspXSIsICIiKSkpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gYXMuZGF0YS5mcmFtZShzYXBwbHkoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSwgYXMubnVtZXJpYykpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS5Qcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgyL1RhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gcm91bmQoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSAqIDEwMCwgMSkKClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIGRhdGEuZnJhbWUoZG8uY2FsbCgncmJpbmQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzcGxpdChhcy5jaGFyYWN0ZXIoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNEWy0xLCAibSJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICgnLGZpeGVkPVRSVUUpKSkKVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gZGF0YS5mcmFtZShjYmluZChzdHJfcmVwbGFjZV9hbGwoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEsICJbIF0iLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlX2FsbChUYWJsZS5Qcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMiwgIlspXSIsICIiKSkpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgxIDwtIGFzLmNoYXJhY3RlcihUYWJsZS5Qcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMSkKVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgyKQpUYWJsZS5Qcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSA8LSBhcy5kYXRhLmZyYW1lKHNhcHBseShUYWJsZS5Qcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSwgYXMubnVtZXJpYykpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIvVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEpClRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIHJvdW5kKFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlICogMTAwLCAxKQoKYGBgCgpgYGB7ciBUaGUgUHJvc2VuY2VwaGFsb246IFJlbGF0aXZlIFZvbHVtZXMgVGFibGVzfQoKa2FibGUoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUpCmthYmxlKFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLlJTRCkKa2FibGUoVGFibGUuUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIpCmthYmxlKFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUpCmthYmxlKFRhYmxlLlByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlKQoKYGBgCgpgYGB7ciBUaGUgUHJvc2VuY2VwaGFsb25fR3lyaTogUmVsYXRpdmUgVm9sdW1lcyBhbmQgR2VuZGVyIFBsb3R9CgpQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZTEgPC0gc2VsZWN0KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlMSwgLSBjKEFnZSkpCgpuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMudGVtcG9yYXJ5IDwtIGMoIkZyb250YWwucG9sZSIsCiAgIkYxIiwKICAiRjIiLAogICJGMy5vcmJpdGFsIiwgCiAgIkYzLnRyaWFuZ3VsYXIiLCAKICAiRjMub3BlcmN1bGFyIiwgCiAgIkFudGVyaW9yLm9yYml0YWwiLCAKICAiTWVkaWFsLm9yYml0YWwiLCAKICAiTGF0ZXJhbC5vcmJpdGFsIiwgCiAgIlBvc3Rlcmlvci5vcmJpdGFsIiwKICAiUmVjdHVzIiwgCiAgIlJvc3RyYWwiLCAKICAiUHJlY2VudHJhbCIsIAogICJQb3N0Y2VudHJhbCIsIAogICJQYXJhY2VudHJhbC5sb2J1bGUiLCAKICAiU3ViY2VudHJhbCIsIAogICJTUEwiLCAKICAiU01HIiwgCiAgIkFORyIsIAogICJQcmVjdW5ldXMiLAogICJDdW5ldXMiLCAKICAiTzEiLAogICJPMiIsIAogICJPMyIsIAogICJPY2NpcGl0YWwucG9sZSIsIAogICJMaW5ndWFsIiwgCiAgIkZ1c2lmb3JtIiwgCiAgIlRlbXBvcmFsLnBvbGUiLCAKICAiVDEiLAogICJUMiIsIAogICJUMyIsIAogICJQbGFudW0udGVtcG9yYWxlIiwgCiAgIlBsYW51bS5wb2xhcmUiLCAKICAiU2hvcnQuaW5zdWxhciIsIAogICJMb25nLmluc3VsYXIiLCAKICAiU0NBIiwgCiAgIkNpbmd1bGF0ZS5hbnRlcmlvciIsIAogICJDaW5ndWxhdGUubWlkZGxlIiwgCiAgIkNpbmd1bGF0ZS5wb3N0ZXJpb3IiLCAKICAiUEhHIikKCm5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy5kZWZpbml0aXZlIDwtIGMoIkZyb250YWwgcG9sZSIsCiAgIkYxIiwKICAiRjIiLAogICJGMyBvcmJpdGFsIiwgCiAgIkYzIHRyaWFuZ3VsYXIiLCAKICAiRjMgb3BlcmN1bGFyIiwgCiAgIkFudGVyaW9yIG9yYml0YWwiLCAKICAiTWVkaWFsIG9yYml0YWwiLCAKICAiTGF0ZXJhbCBvcmJpdGFsIiwgCiAgIlBvc3RlcmlvciBvcmJpdGFsIiwKICAiUmVjdHVzIiwgCiAgIlJvc3RyYWwiLCAKICAiUHJlY2VudHJhbCIsIAogICJQb3N0Y2VudHJhbCIsIAogICJQYXJhY2VudHJhbCBsb2J1bGUiLCAKICAiU3ViY2VudHJhbCIsIAogICJTUEwiLCAKICAiU01HIiwgCiAgIkFORyIsIAogICJQcmVjdW5ldXMiLAogICJDdW5ldXMiLCAKICAiTzEiLAogICJPMiIsIAogICJPMyIsIAogICJPY2NpcGl0YWwgcG9sZSIsIAogICJMaW5ndWFsIiwgCiAgIkZ1c2lmb3JtIiwgCiAgIlRlbXBvcmFsIHBvbGUiLCAKICAiVDEiLAogICJUMiIsIAogICJUMyIsIAogICJQbGFudW0gdGVtcG9yYWxlIiwgCiAgIlBsYW51bSBwb2xhcmUiLCAKICAiU2hvcnQgaW5zdWxhciIsIAogICJMb25nIGluc3VsYXIiLCAKICAiU0NBIiwgCiAgIkNpbmd1bGF0ZSBhbnRlcmlvciIsIAogICJDaW5ndWxhdGUgbWlkZGxlIiwgCiAgIkNpbmd1bGF0ZSBwb3N0ZXJpb3IiLCAKICAiUEhHIikKClByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnBsb3RkYXRhMSA8LSBnYXRoZXIoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUxLCAiYW5hdG9taWNhbC5zdHJ1Y3R1cmUiLCAicmVsYXRpdmUudm9sdW1lIikKUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUucGxvdGRhdGExJEdlbmRlciA8LSBBbGwuVm9sdW1lcyRHZW5kZXIKUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUucGxvdGRhdGExJEFnZSA8LSBBbGwuVm9sdW1lcyRgQWdlICh5ZWFycylgCgpQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5wbG90ZGF0YTEkR2VuZGVyIDwtIGZhY3RvcihQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5wbG90ZGF0YTEkR2VuZGVyLCBsZXZlbHMgPSBjKCJmIiwgIm0iKSwgYygiZiIsICJtIikpClByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnBsb3RkYXRhMSRhbmF0b21pY2FsLnN0cnVjdHVyZSA8LSBmYWN0b3IoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUucGxvdGRhdGExJGFuYXRvbWljYWwuc3RydWN0dXJlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IHJldihjKG5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy50ZW1wb3JhcnkpKSwgcmV2KGMobmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLmRlZmluaXRpdmUpKSkKClByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnBsb3QxIDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUucGxvdGRhdGExLCBhZXMoeD1hbmF0b21pY2FsLnN0cnVjdHVyZSwgeSA9IHJlbGF0aXZlLnZvbHVtZSkpICArCiAgc3RhdF9zdW1tYXJ5KGFscGhhID0gMC4zLCBmdW4gPSBtZWFuLCBnZW9tID0gImJhciIsIHdpZHRoID0gMC4zLCBmaWxsID0gImdyYXk1MCIpICsgCiAgZ2VvbV9ib3hwbG90KGFlcyhmaWxsID0gR2VuZGVyKSwgYWxwaGEgPSAwLjUsIHdpZHRoID0gMC40LCBzaXplID0gMC4yLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC42KSwgCiAgICAgICAgICAgICAgIG91dGxpZXIuc2hhcGUgPSBOQSwgY29sb3IgPSAiZ3JheTMwIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fcXVhc2lyYW5kb20oYWVzKGNvbG9yID0gQWdlKSwgc2l6ZSA9IDAuNywgYWxwaGEgPSAwLjgsIHNoYXBlID0gMTYsIHBvc2l0aW9uID0gImRvZGdlIikgKwogIHNjYWxlX2NvbG9yX2NvbnRpbnVvdXMobG93ID0gInN0ZWVsYmx1ZTEiLCBoaWdoID0gInJlZDQiKSArCiAgeGxhYigiIikgKyB5bGFiKCJSZWxhdGl2ZSB2b2x1bWUgKGluICUpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgY29vcmRfZmxpcCgpICsKICBnZ3RpdGxlKCJDRVJFQlJBTCBHWVJJIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQoKUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUucGxvdDEKZ2dzYXZlKCJQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5wbG90MS5wZGYiLCBwbG90ID0gUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUucGxvdDEsIHdpZHRoID0gMTQsIGhlaWdodCA9IDEyLCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKCmBgYAoKYGBge3IgVGhlIFByb3NlbmNlcGhhbG9uX0NlbnRyYWwgU3RydWN0dXJlczogUmVsYXRpdmUgVm9sdW1lcyBhbmQgR2VuZGVyIFBsb3R9CgpuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMudGVtcG9yYXJ5IDwtIGMoCiAgIkNvcnB1cy5jYWxsb3N1bSIsIAogICJDbGF1c3RydW0iLCAKICAiUHV0YW1lbiIsIAogICJDYXVkYXRlIiwgCiAgIkdsb2J1cy5wYWxsaWR1bSIsIAogICJJbnRlcm5hbC5jYXBzdWxlIiwKICAiSW5ub21pbmF0ZS5zdWJzdGFuY2UiLCAKICAiSHlwb3RoYWxhbXVzIiwKICAiVGhhbGFtdXMiLCAKICAiSGlwcG9jYW1wdXMiLCAKICAiQW15Z2RhbGEiKQoKbmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLmRlZmluaXRpdmUgPC0gYygKICAiQ29ycHVzIGNhbGxvc3VtIiwgCiAgIkNsYXVzdHJ1bSIsIAogICJQdXRhbWVuIiwgCiAgIkNhdWRhdGUiLCAKICAiR2xvYnVzIHBhbGxpZHVtIiwgCiAgIkludGVybmFsIGNhcHN1bGUiLAogICJJbm5vbWluYXRlIHN1YnN0YW5jZSIsIAogICJIeXBvdGhhbGFtdXMiLAogICJUaGFsYW11cyIsCiAgIkhpcHBvY2FtcHVzIiwgCiAgIkFteWdkYWxhIikKClByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnBsb3RkYXRhMiA8LSBnYXRoZXIoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUyLCAiYW5hdG9taWNhbC5zdHJ1Y3R1cmUiLCAicmVsYXRpdmUudm9sdW1lIikKUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUucGxvdGRhdGEyJEdlbmRlciA8LSBBbGwuVm9sdW1lcyRHZW5kZXIKUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUucGxvdGRhdGEyJEFnZSA8LSBBbGwuVm9sdW1lcyRgQWdlICh5ZWFycylgCgpQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5wbG90ZGF0YTIkR2VuZGVyIDwtIGZhY3RvcihQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5wbG90ZGF0YTIkR2VuZGVyLCBsZXZlbHMgPSBjKCJmIiwgIm0iKSwgYygiZiIsICJtIikpClByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnBsb3RkYXRhMiRhbmF0b21pY2FsLnN0cnVjdHVyZSA8LSBmYWN0b3IoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUucGxvdGRhdGEyJGFuYXRvbWljYWwuc3RydWN0dXJlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IHJldihjKG5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy50ZW1wb3JhcnkpKSwgcmV2KGMobmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLmRlZmluaXRpdmUpKSkKClByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLnBsb3QyIDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUucGxvdGRhdGEyLCBhZXMoeD1hbmF0b21pY2FsLnN0cnVjdHVyZSwgeSA9IHJlbGF0aXZlLnZvbHVtZSkpICArCiAgc3RhdF9zdW1tYXJ5KGFscGhhID0gMC4zLCBmdW4gPSBtZWFuLCBnZW9tID0gImJhciIsIHdpZHRoID0gMC4zLCBmaWxsID0gImdyYXk1MCIpICsgCiAgZ2VvbV9ib3hwbG90KGFlcyhmaWxsID0gR2VuZGVyKSwgYWxwaGEgPSAwLjUsIHdpZHRoID0gMC40LCBzaXplID0gMC4yLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC42KSwgCiAgICAgICAgICAgICAgIG91dGxpZXIuc2hhcGUgPSBOQSwgY29sb3IgPSAiZ3JheTMwIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fcXVhc2lyYW5kb20oYWVzKGNvbG9yID0gQWdlKSwgc2l6ZSA9IDAuNywgYWxwaGEgPSAwLjgsIHNoYXBlID0gMTYsIHBvc2l0aW9uID0gImRvZGdlIikgKwogIHNjYWxlX2NvbG9yX2NvbnRpbnVvdXMobG93ID0gInN0ZWVsYmx1ZTEiLCBoaWdoID0gInJlZDQiKSArCiAgeGxhYigiIikgKyB5bGFiKCJSZWxhdGl2ZSB2b2x1bWUgKGluICUpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgY29vcmRfZmxpcCgpICsKICBnZ3RpdGxlKCJDRU5UUkFMIFBST1NFTkNFUEhBTE9OIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQoKUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUucGxvdDIKZ2dzYXZlKCJQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZS5wbG90Mi5wZGYiLCBwbG90ID0gUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUucGxvdDIsIHdpZHRoID0gMTAsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKYGBgCgpgYGB7ciBUaGUgUHJvc2VuY2VwaGFsb246IFJlbGF0aXZlIFZvbHVtZXMgYW5kIEFnZSBQbG90fQoKI1Byb3NlbmNlcGhhbG9uLnJlbGF0aXZlJEdlbmRlciA8LSBBbGwuVm9sdW1lcyRHZW5kZXIKUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUkQWdlIDwtIEFsbC5Wb2x1bWVzJGBBZ2UgKHllYXJzKWAKClJlbGF0aXZlLkZyb250YWwucG9sZS5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1Gcm9udGFsLnBvbGUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMC41NywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBmcm9udGFsIHBvbGUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkZyb250YWwucG9sZS5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkZyb250YWwucG9sZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuRnJvbnRhbC5wb2xlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuRjEuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9RjEsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gNi42LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIEYxIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5GMS5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkYxLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5GMS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkYyLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PUYyLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDUuOTUsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgRjIiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkYyLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuRjIuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkYyLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuRjMub3JiaXRhbC5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1GMy5vcmJpdGFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuNDEsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgRjMgb3JiaXRhbCIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuRjMub3JiaXRhbC5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkYzLm9yYml0YWwuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkYzLm9yYml0YWwuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5GMy50cmlhbmd1bGFyLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PUYzLnRyaWFuZ3VsYXIsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMS4yMiwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBGMyB0cmlhbmd1bGFyIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5GMy50cmlhbmd1bGFyLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuRjMudHJpYW5ndWxhci5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuRjMudHJpYW5ndWxhci5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkYzLm9wZXJjdWxhci5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1GMy5vcGVyY3VsYXIsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMS42NSwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBGMyBvcGVyY3VsYXIiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkYzLm9wZXJjdWxhci5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkYzLm9wZXJjdWxhci5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuRjMub3BlcmN1bGFyLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuQW50ZXJpb3Iub3JiaXRhbC5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1BbnRlcmlvci5vcmJpdGFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuMzg1LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIGFudGVyaW9yIG9yYml0YWwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkFudGVyaW9yLm9yYml0YWwuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5BbnRlcmlvci5vcmJpdGFsLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5BbnRlcmlvci5vcmJpdGFsLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuTWVkaWFsLm9yYml0YWwuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9TWVkaWFsLm9yYml0YWwsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMC44NywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBtZWRpYWwgb3JiaXRhbCIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuTWVkaWFsLm9yYml0YWwuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5NZWRpYWwub3JiaXRhbC5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuTWVkaWFsLm9yYml0YWwuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5MYXRlcmFsLm9yYml0YWwuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9TGF0ZXJhbC5vcmJpdGFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuNjcsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgbGF0ZXJhbCBvcmJpdGFsIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5MYXRlcmFsLm9yYml0YWwuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5MYXRlcmFsLm9yYml0YWwuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkxhdGVyYWwub3JiaXRhbC5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlBvc3Rlcmlvci5vcmJpdGFsLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PVBvc3Rlcmlvci5vcmJpdGFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuODIsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgcG9zdGVyaW9yIG9yYml0YWwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLlBvc3Rlcmlvci5vcmJpdGFsLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuUG9zdGVyaW9yLm9yYml0YWwuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLlBvc3Rlcmlvci5vcmJpdGFsLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuUmVjdHVzLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PVJlY3R1cywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxLjgsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgcmVjdHVzIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5SZWN0dXMuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5SZWN0dXMuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLlJlY3R1cy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlJvc3RyYWwuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9Um9zdHJhbCwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAwLjQxLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIHJvc3RyYWwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLlJvc3RyYWwuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5Sb3N0cmFsLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5Sb3N0cmFsLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuUHJlY2VudHJhbC5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1QcmVjZW50cmFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDQuNiwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBwcmVjZW50cmFsIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5QcmVjZW50cmFsLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuUHJlY2VudHJhbC5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuUHJlY2VudHJhbC5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlBvc3RjZW50cmFsLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PVBvc3RjZW50cmFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDIuNDUsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgcG9zdGNlbnRyYWwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLlBvc3RjZW50cmFsLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuUG9zdGNlbnRyYWwuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLlBvc3RjZW50cmFsLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuUGFyYWNlbnRyYWwubG9idWxlLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PVBhcmFjZW50cmFsLmxvYnVsZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxLjYyLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIHBhcmFjZW50cmFsIGxvYnVsZSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuUGFyYWNlbnRyYWwubG9idWxlLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuUGFyYWNlbnRyYWwubG9idWxlLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5QYXJhY2VudHJhbC5sb2J1bGUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5TdWJjZW50cmFsLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PVN1YmNlbnRyYWwsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMC42NiwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBzdWJjZW50cmFsIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5TdWJjZW50cmFsLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuU3ViY2VudHJhbC5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuU3ViY2VudHJhbC5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlNQTC5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1TUEwsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMy41LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIFNQTCIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuU1BMLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuU1BMLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5TUEwuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5TTUcuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9U01HLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDMuMywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBzdXByYW1hcmdpbmFsIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5TTUcuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5TTUcuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLlNNRy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkFORy5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1BTkcsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMy40LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIGFuZ3VsYXIiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkFORy5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkFORy5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuQU5HLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuUHJlY3VuZXVzLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PVByZWN1bmV1cywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAzLjA1LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIHByZWN1bmV1cyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuUHJlY3VuZXVzLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuUHJlY3VuZXVzLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5QcmVjdW5ldXMuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5DdW5ldXMuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9Q3VuZXVzLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEuMDcsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgY3VuZXVzIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5DdW5ldXMuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5DdW5ldXMuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkN1bmV1cy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLk8xLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PU8xLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuOTcsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgTzEiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLk8xLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuTzEuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLk8xLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuTzIuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9TzIsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMS42MiwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBPMiIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuTzIuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5PMi5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuTzIuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5PMy5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1PMywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxLjAyLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIE8zIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5PMy5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLk8zLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5PMy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLk9jY2lwaXRhbC5wb2xlLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PU9jY2lwaXRhbC5wb2xlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEuMTcsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgb2NjaXBpdGFsIHBvbGUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLk9jY2lwaXRhbC5wb2xlLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuT2NjaXBpdGFsLnBvbGUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLk9jY2lwaXRhbC5wb2xlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuTGluZ3VhbC5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1MaW5ndWFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDIuMywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBsaW5ndWFsIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5MaW5ndWFsLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuTGluZ3VhbC5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuTGluZ3VhbC5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkZ1c2lmb3JtLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PUZ1c2lmb3JtLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDIuMjgsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgZnVzaWZvcm0iKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkZ1c2lmb3JtLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuRnVzaWZvcm0uQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkZ1c2lmb3JtLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuVGVtcG9yYWwucG9sZS5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1UZW1wb3JhbC5wb2xlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDIuNywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSB0ZW1wb3JhbCBwb2xlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5UZW1wb3JhbC5wb2xlLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuVGVtcG9yYWwucG9sZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuVGVtcG9yYWwucG9sZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlQxLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PVQxLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDIuNzUsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgVDEiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLlQxLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuVDEuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLlQxLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuVDIuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9VDIsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMi40MywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBUMiIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuVDIuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5UMi5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuVDIuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5UMy5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1UMywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAwLjUxLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIFQzIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5UMy5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLlQzLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5UMy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlBsYW51bS50ZW1wb3JhbGUuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9UGxhbnVtLnRlbXBvcmFsZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAwLjMzNSwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBwbGFudW0gdGVtcG9yYWxlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5QbGFudW0udGVtcG9yYWxlLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuUGxhbnVtLnRlbXBvcmFsZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuUGxhbnVtLnRlbXBvcmFsZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlBsYW51bS5wb2xhcmUuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9UGxhbnVtLnBvbGFyZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxLjE4LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIHBsYW51bSBwb2xhcmUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLlBsYW51bS5wb2xhcmUuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5QbGFudW0ucG9sYXJlLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5QbGFudW0ucG9sYXJlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuU2hvcnQuaW5zdWxhci5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1TaG9ydC5pbnN1bGFyLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEuODUsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgc2hvcnQgaW5zdWxhciIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuU2hvcnQuaW5zdWxhci5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLlNob3J0Lmluc3VsYXIuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLlNob3J0Lmluc3VsYXIuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5Mb25nLmluc3VsYXIuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9TG9uZy5pbnN1bGFyLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuOTcsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgbG9uZyBpbnN1bGFyIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5Mb25nLmluc3VsYXIuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5Mb25nLmluc3VsYXIuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkxvbmcuaW5zdWxhci5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlNDQS5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1TQ0EsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMC4zMywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBzdWJjYWxsb3NhbCBhcmVhIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5TQ0EuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5TQ0EuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLlNDQS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkNpbmd1bGF0ZS5hbnRlcmlvci5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1DaW5ndWxhdGUuYW50ZXJpb3IsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMS41NywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBjaW5ndWxhdGUgYW50ZXJpb3IiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkNpbmd1bGF0ZS5hbnRlcmlvci5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkNpbmd1bGF0ZS5hbnRlcmlvci5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuQ2luZ3VsYXRlLmFudGVyaW9yLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuQ2luZ3VsYXRlLm1pZGRsZS5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1DaW5ndWxhdGUubWlkZGxlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEuNzUsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgY2luZ3VsYXRlIG1pZGRsZSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuQ2luZ3VsYXRlLm1pZGRsZS5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkNpbmd1bGF0ZS5taWRkbGUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkNpbmd1bGF0ZS5taWRkbGUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5DaW5ndWxhdGUucG9zdGVyaW9yLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PUNpbmd1bGF0ZS5wb3N0ZXJpb3IsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMi4wNSwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBjaW5ndWxhdGUgcG9zdGVyaW9yIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5DaW5ndWxhdGUucG9zdGVyaW9yLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuQ2luZ3VsYXRlLnBvc3Rlcmlvci5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuQ2luZ3VsYXRlLnBvc3Rlcmlvci5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlBIRy5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1QSEcsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMS4xNSwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBQSEciKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLlBIRy5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLlBIRy5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuUEhHLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuSGlwcG9jYW1wdXMuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9SGlwcG9jYW1wdXMsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuNSwgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMC43NywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBoaXBwb2NhbXB1cyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuSGlwcG9jYW1wdXMuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5IaXBwb2NhbXB1cy5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuSGlwcG9jYW1wdXMuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5BbXlnZGFsYS5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1BbXlnZGFsYSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAwLjMzNSwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBhbXlnZGFsYSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuQW15Z2RhbGEuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5BbXlnZGFsYS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuQW15Z2RhbGEuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5Db3JwdXMuY2FsbG9zdW0uQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9Q29ycHVzLmNhbGxvc3VtLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuMzYsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgY29ycHVzIGNhbGxvc3VtIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5Db3JwdXMuY2FsbG9zdW0uQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5Db3JwdXMuY2FsbG9zdW0uQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkNvcnB1cy5jYWxsb3N1bS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkNsYXVzdHJ1bS5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1DbGF1c3RydW0sIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMC4xOCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBjbGF1c3RydW0iKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkNsYXVzdHJ1bS5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkNsYXVzdHJ1bS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuQ2xhdXN0cnVtLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuUHV0YW1lbi5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1QdXRhbWVuLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEuMTUsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgcHV0YW1lbiIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuUHV0YW1lbi5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLlB1dGFtZW4uQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLlB1dGFtZW4uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5DYXVkYXRlLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PUNhdWRhdGUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMC44NywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBjYXVkYXRlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5DYXVkYXRlLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuQ2F1ZGF0ZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuQ2F1ZGF0ZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkdsb2J1cy5wYWxsaWR1bS5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1HbG9idXMucGFsbGlkdW0sIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMC4zMzUsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgZ2xvYnVzIHBhbGxpZHVtIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5HbG9idXMucGFsbGlkdW0uQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5HbG9idXMucGFsbGlkdW0uQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkdsb2J1cy5wYWxsaWR1bS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkludGVybmFsLmNhcHN1bGUuQWdlLnBsb3QgPC0gIGdncGxvdChQcm9zZW5jZXBoYWxvbi5yZWxhdGl2ZSwgYWVzKHk9SW50ZXJuYWwuY2Fwc3VsZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxLjEyNSwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBpbnRlcm5hbCBjYXBzdWxlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5JbnRlcm5hbC5jYXBzdWxlLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuSW50ZXJuYWwuY2Fwc3VsZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuSW50ZXJuYWwuY2Fwc3VsZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLklubm9taW5hdGUuc3Vic3RhbmNlLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PUlubm9taW5hdGUuc3Vic3RhbmNlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuMzEsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgaW5ub21pbmF0ZSBzdWJzdGFuY2UiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLklubm9taW5hdGUuc3Vic3RhbmNlLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuSW5ub21pbmF0ZS5zdWJzdGFuY2UuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLklubm9taW5hdGUuc3Vic3RhbmNlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuSHlwb3RoYWxhbXVzLkFnZS5wbG90IDwtICBnZ3Bsb3QoUHJvc2VuY2VwaGFsb24ucmVsYXRpdmUsIGFlcyh5PUh5cG90aGFsYW11cywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAwLjc4LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIGh5cG90aGFsYW11cyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuSHlwb3RoYWxhbXVzLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuSHlwb3RoYWxhbXVzLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5IeXBvdGhhbGFtdXMuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5UaGFsYW11cy5BZ2UucGxvdCA8LSAgZ2dwbG90KFByb3NlbmNlcGhhbG9uLnJlbGF0aXZlLCBhZXMoeT1UaGFsYW11cywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxLjQ3LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIHRoYWxhbXVzIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5UaGFsYW11cy5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLlRoYWxhbXVzLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5UaGFsYW11cy5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKCmBgYAoKIyBCcmFpbnN0ZW0gYW5kIENlcmViZWxsdW0KCiMjIEFic29sdXRlIFZvbHVtZXMKCmBgYHtyIEJyYWluc3RlbSBhbmQgQ2VyZWJlbGx1bTogQWJzb2x1dGUgVm9sdW1lc30KCk1lc2VuY2VwaGFsb24gPC0gQWxsLlZvbHVtZXMkTWVzZW5jZXBoYWxvbgpQb25zIDwtIEFsbC5Wb2x1bWVzJFBvbnMKTWVkdWxsYS5vYmxvbmdhdGEgPC0gQWxsLlZvbHVtZXMkYE1lZHVsbGEgb2Jsb25nYXRhYAogIApDZXJlYmVsbGFyLnBlZHVuY2xlcyA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIGNlcmViZWxsYXIgcGVkdW5jbGVzYAoKVmVybWlzIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgdmVybWlzYApIZW1pc3BoZXJlIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgY2VyZWJlbGxhciBoZW1pc3BoZXJlYAoKQW50ZXJpb3IubG9iZSA8LSAoQWxsLlZvbHVtZXMkQ2VudHJhbCtBbGwuVm9sdW1lcyRDdWxtZW4rQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBhbGEgbG9idWxpIGNlbnRyYWxpc2ArQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBBUUxgKQpNZWRpYWwubG9iZSA8LSAoQWxsLlZvbHVtZXMkRGVjbGl2ZStBbGwuVm9sdW1lcyRGb2xpdW0rQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBQUUxgK0FsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgU1NMYCkKUG9zdGVyaW9yLmxvYmUgPC0gKEFsbC5Wb2x1bWVzJFR1YmVyK0FsbC5Wb2x1bWVzJFB5cmFtaWQrQWxsLlZvbHVtZXMkVXZ1bGErQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBpbmZlcmlvciBzZW1pbHVuYXIgL2dyYWNpbGVgK0FsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgYml2ZW50ZXJgK0FsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgdG9uc2lsbGFgKQpGbG9jY3Vsb25vZHVsYXIubG9iZSA8LSAoQWxsLlZvbHVtZXMkTm9kdWxlK0FsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgZmxvY2N1bHVzYCkgCgpDZW50cmFsIDwtIEFsbC5Wb2x1bWVzJENlbnRyYWwKQ3VsbWVuIDwtIEFsbC5Wb2x1bWVzJEN1bG1lbgpEZWNsaXZlIDwtIEFsbC5Wb2x1bWVzJERlY2xpdmUKRm9saXVtIDwtIEFsbC5Wb2x1bWVzJEZvbGl1bQpUdWJlciA8LSBBbGwuVm9sdW1lcyRUdWJlcgpQeXJhbWlkIDwtIEFsbC5Wb2x1bWVzJFB5cmFtaWQKVXZ1bGEgPC0gQWxsLlZvbHVtZXMkVXZ1bGEKTm9kdWxlIDwtIEFsbC5Wb2x1bWVzJE5vZHVsZQoKQWxhLmxvYnVsaS5jZW50cmFsaXMgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBhbGEgbG9idWxpIGNlbnRyYWxpc2AKQVFMIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgQVFMYApQUUwgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBQUUxgClNTTCA8LSAgQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBTU0xgCklTTC5ncmFjaWxlIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgaW5mZXJpb3Igc2VtaWx1bmFyIC9ncmFjaWxlYApCaXZlbnRlciA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIGJpdmVudGVyYApUb25zaWxsYSA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIHRvbnNpbGxhYApGbG9jY3VsdXMgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBmbG9jY3VsdXNgCgpCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSA8LSBhcy5kYXRhLmZyYW1lKGNiaW5kKApNZXNlbmNlcGhhbG9uLApQb25zLApNZWR1bGxhLm9ibG9uZ2F0YSwgCkNlcmViZWxsYXIucGVkdW5jbGVzLCAKVmVybWlzLCAKSGVtaXNwaGVyZSwgCkFudGVyaW9yLmxvYmUsIApNZWRpYWwubG9iZSwgClBvc3Rlcmlvci5sb2JlLCAKRmxvY2N1bG9ub2R1bGFyLmxvYmUsIApDZW50cmFsLCAKQ3VsbWVuLCAKRGVjbGl2ZSwgCkZvbGl1bSwgClR1YmVyLApQeXJhbWlkLCAKVXZ1bGEsIApOb2R1bGUsCkFsYS5sb2J1bGkuY2VudHJhbGlzLApBUUwsClBRTCwKU1NMLApJU0wuZ3JhY2lsZSwgCkJpdmVudGVyLApUb25zaWxsYSwgCkZsb2NjdWx1cyAKKSkKCkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlJEdlbmRlciA8LSBBbGwuVm9sdW1lcyRHZW5kZXIKClRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlIDwtIENyZWF0ZVRhYmxlT25lKAogIHZhcnMgPSBjKCJNZXNlbmNlcGhhbG9uIiwKIlBvbnMiLAoiTWVkdWxsYS5vYmxvbmdhdGEiLCAKIkNlcmViZWxsYXIucGVkdW5jbGVzIiwgCiJWZXJtaXMiLCAKIkhlbWlzcGhlcmUiLCAKIkFudGVyaW9yLmxvYmUiLCAKIk1lZGlhbC5sb2JlIiwgCiJQb3N0ZXJpb3IubG9iZSIsIAoiRmxvY2N1bG9ub2R1bGFyLmxvYmUiLCAKIkNlbnRyYWwiLCAKIkN1bG1lbiIsIAoiRGVjbGl2ZSIsIAoiRm9saXVtIiwgCiJUdWJlciIsCiJQeXJhbWlkIiwgCiJVdnVsYSIsIAoiTm9kdWxlIiwKIkFsYS5sb2J1bGkuY2VudHJhbGlzIiwKIkFRTCIsCiJQUUwiLAoiU1NMIiwKIklTTC5ncmFjaWxlIiwgCiJCaXZlbnRlciIsCiJUb25zaWxsYSIsIAoiRmxvY2N1bHVzIiksCiAgZGF0YSA9IEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlKQoKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIgPC0gQ3JlYXRlVGFibGVPbmUoCiAgdmFycyA9IGMoIk1lc2VuY2VwaGFsb24iLAoiUG9ucyIsCiJNZWR1bGxhLm9ibG9uZ2F0YSIsIAoiQ2VyZWJlbGxhci5wZWR1bmNsZXMiLCAKIlZlcm1pcyIsIAoiSGVtaXNwaGVyZSIsIAoiQW50ZXJpb3IubG9iZSIsIAoiTWVkaWFsLmxvYmUiLCAKIlBvc3Rlcmlvci5sb2JlIiwgCiJGbG9jY3Vsb25vZHVsYXIubG9iZSIsIAoiQ2VudHJhbCIsIAoiQ3VsbWVuIiwgCiJEZWNsaXZlIiwgCiJGb2xpdW0iLCAKIlR1YmVyIiwKIlB5cmFtaWQiLCAKIlV2dWxhIiwgCiJOb2R1bGUiLAoiQWxhLmxvYnVsaS5jZW50cmFsaXMiLAoiQVFMIiwKIlBRTCIsCiJTU0wiLAoiSVNMLmdyYWNpbGUiLCAKIkJpdmVudGVyIiwKIlRvbnNpbGxhIiwgCiJGbG9jY3VsdXMiKSwgCnN0cmF0YSA9IGMoIkdlbmRlciIpLApkYXRhID0gQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUpCgpUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSA8LSBwcmludChUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSwgY29udERpZ2l0cyA9IDEwKQpUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlciA8LSBwcmludChUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlciwgY29udERpZ2l0cyA9IDEwKQoKd3JpdGUuY3N2KFRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLCAiVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuY3N2IikKd3JpdGUuY3N2KFRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLCAiVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuY3N2IikKCmBgYAoKYGBge3IgQnJhaW5zdGVtIGFuZCBDZXJlYmVsbHVtOiBBYnNvbHV0ZSBWb2x1bWVzIHJlbGF0aXZlIHN0YW5kYXJkIGRldmlhdGlvbnN9CgpUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5SU0QgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuUlNEIDwtIGRhdGEuZnJhbWUoZG8uY2FsbCgncmJpbmQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzcGxpdChhcy5jaGFyYWN0ZXIoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuUlNEWy0xLF0pLCcgKCcsZml4ZWQ9VFJVRSkpKQpUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5SU0QgPC0gZGF0YS5mcmFtZShjYmluZChzdHJfcmVwbGFjZV9hbGwoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuUlNEJFgxLCAiWyBdIiwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuUlNEJFgyLCAiWyldIiwgIiIpKSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuUlNEJFgxIDwtIGFzLmNoYXJhY3RlcihUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5SU0QkWDEpClRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLlJTRCRYMiA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuUlNEJFgyKQpUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5SU0QgPC0gYXMuZGF0YS5mcmFtZShzYXBwbHkoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuUlNELCBhcy5udW1lcmljKSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuUlNEJFgyL1RhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLlJTRCRYMSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuUlNEIDwtIHJvdW5kKFRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLlJTRCAqIDEwMCwgMSkKCgpUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlcikKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNEIDwtIHNlbGVjdChUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QsIC0gYyhwLCB0ZXN0KSkKClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gZGF0YS5mcmFtZShkby5jYWxsKCdyYmluZCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnNwbGl0KGFzLmNoYXJhY3RlcihUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0RbLTEsICJmIl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcsZml4ZWQ9VFJVRSkpKQpUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlIDwtIGRhdGEuZnJhbWUoY2JpbmQoc3RyX3JlcGxhY2VfYWxsKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEsICJbIF0iLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlX2FsbChUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgyLCAiWyldIiwgIiIpKSkKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMSA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMSkKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMiA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMikKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSBhcy5kYXRhLmZyYW1lKHNhcHBseShUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlLCBhcy5udW1lcmljKSkKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSBhcy5kYXRhLmZyYW1lKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIvVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMSkKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSByb3VuZChUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlICogMTAwLCAxKQoKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gZGF0YS5mcmFtZShkby5jYWxsKCdyYmluZCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnNwbGl0KGFzLmNoYXJhY3RlcihUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0RbLTEsICJtIl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcsZml4ZWQ9VFJVRSkpKQpUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSA8LSBkYXRhLmZyYW1lKGNiaW5kKHN0cl9yZXBsYWNlX2FsbChUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMSwgIlsgXSIsICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3JlcGxhY2VfYWxsKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgyLCAiWyldIiwgIiIpKSkKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgxKQpUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMiA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIpClRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIGFzLmRhdGEuZnJhbWUoc2FwcGx5KFRhYmxlLlByb3NlbmNlcGhhbG9uLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlLCBhcy5udW1lcmljKSkKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMi9UYWJsZS5Qcm9zZW5jZXBoYWxvbi5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMSkKVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gcm91bmQoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgKiAxMDAsIDEpCgpgYGAKCmBgYHtyIEJyYWluc3RlbSBhbmQgQ2VyZWJlbGx1bTogQWJzb2x1dGUgVm9sdW1lcyBUYWJsZXN9CgprYWJsZShUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSkKa2FibGUoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUuUlNEKQprYWJsZShUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlcikKa2FibGUoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSkKa2FibGUoVGFibGUuUHJvc2VuY2VwaGFsb24uYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUpCgpgYGAKCmBgYHtyIEJyYWluc3RlbSBhbmQgQ2VyZWJlbGx1bTogQWJzb2x1dGUgVm9sdW1lcyBhbmQgR2VuZGVyIFBsb3QgMX0KCkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlIDwtIHNlbGVjdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSwgLSBjKEdlbmRlcikpCkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlMSA8LSBCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZVssYygxOjEwKV0KQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUyIDwtIEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlWywtYygxOjEwKV0KCm5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy50ZW1wb3JhcnkgPC0gYygiTWVzZW5jZXBoYWxvbiIsCiJQb25zIiwKIk1lZHVsbGEub2Jsb25nYXRhIiwgCiJDZXJlYmVsbGFyLnBlZHVuY2xlcyIsIAoiVmVybWlzIiwgCiJIZW1pc3BoZXJlIiwgCiJBbnRlcmlvci5sb2JlIiwgCiJNZWRpYWwubG9iZSIsIAoiUG9zdGVyaW9yLmxvYmUiLCAKIkZsb2NjdWxvbm9kdWxhci5sb2JlIikKCm5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy5kZWZpbml0aXZlIDwtIGMoIk1lc2VuY2VwaGFsb24iLAoiUG9ucyIsCiJNZWR1bGxhIG9ibG9uZ2F0YSIsIAoiQ2VyZWJlbGxhciBwZWR1bmNsZXMiLCAKIlZlcm1pcyIsIAoiSGVtaXNwaGVyZSIsIAoiQW50ZXJpb3IgbG9iZSIsIAoiTWVkaWFsIGxvYmUiLCAKIlBvc3RlcmlvciBsb2JlIiwgCiJGbG9jY3Vsb25vZHVsYXIgbG9iZSIpCgpCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5wbG90ZGF0YTEgPC0gZ2F0aGVyKEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlMSwgImFuYXRvbWljYWwuc3RydWN0dXJlIiwgInJlbGF0aXZlLnZvbHVtZSIpCkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLnBsb3RkYXRhMSRHZW5kZXIgPC0gQWxsLlZvbHVtZXMkR2VuZGVyCkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLnBsb3RkYXRhMSRBZ2UgPC0gQWxsLlZvbHVtZXMkYEFnZSAoeWVhcnMpYAoKQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUucGxvdGRhdGExJEdlbmRlciA8LSBmYWN0b3IoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUucGxvdGRhdGExJEdlbmRlciwgbGV2ZWxzID0gYygiZiIsICJtIiksIGMoImYiLCAibSIpKQpCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5wbG90ZGF0YTEkYW5hdG9taWNhbC5zdHJ1Y3R1cmUgPC0gZmFjdG9yKEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLnBsb3RkYXRhMSRhbmF0b21pY2FsLnN0cnVjdHVyZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSByZXYoYyhuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMudGVtcG9yYXJ5KSksIHJldihjKG5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy5kZWZpbml0aXZlKSkpCgpCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5wbG90MSA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLnBsb3RkYXRhMSwgYWVzKHg9YW5hdG9taWNhbC5zdHJ1Y3R1cmUsIHkgPSByZWxhdGl2ZS52b2x1bWUpKSAgKwogIHN0YXRfc3VtbWFyeShhbHBoYSA9IDAuMywgZnVuID0gbWVhbiwgZ2VvbSA9ICJiYXIiLCB3aWR0aCA9IDAuMywgZmlsbCA9ICJncmF5NTAiKSArIAogIGdlb21fYm94cGxvdChhZXMoZmlsbCA9IEdlbmRlciksIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNCwgc2l6ZSA9IDAuMiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNiksIAogICAgICAgICAgICAgICBvdXRsaWVyLnNoYXBlID0gTkEsIGNvbG9yID0gImdyYXkzMCIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3F1YXNpcmFuZG9tKGFlcyhjb2xvciA9IEFnZSksIHNpemUgPSAwLjcsIGFscGhhID0gMC44LCBzaGFwZSA9IDE2LCBwb3NpdGlvbiA9ICJkb2RnZSIpICsKICBzY2FsZV9jb2xvcl9jb250aW51b3VzKGxvdyA9ICJzdGVlbGJsdWUxIiwgaGlnaCA9ICJyZWQ0IikgKwogIHhsYWIoIiIpICsgeWxhYigiQWJzb2x1dGUgdm9sdW1lIChpbiBtbTMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgY29vcmRfZmxpcCgpICsKICBnZ3RpdGxlKCJCUkFJTlNURU0gJiBDRVJFQkVMTFVNIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQoKQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUucGxvdDEKZ2dzYXZlKCJCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5wbG90MS5wZGYiLCBwbG90ID0gQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUucGxvdDEsIHdpZHRoID0gMTIsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKYGBgCgpgYGB7ciBCcmFpbnN0ZW0gYW5kIENlcmViZWxsdW06IEFic29sdXRlIFZvbHVtZXMgYW5kIEdlbmRlciBQbG90IDJ9CgpuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMudGVtcG9yYXJ5IDwtIGMoCiJDZW50cmFsIiwgCiJDdWxtZW4iLCAKIkRlY2xpdmUiLCAKIkZvbGl1bSIsIAoiVHViZXIiLAoiUHlyYW1pZCIsIAoiVXZ1bGEiLCAKIk5vZHVsZSIsCiJBbGEubG9idWxpLmNlbnRyYWxpcyIsCiJBUUwiLAoiUFFMIiwKIlNTTCIsCiJJU0wuZ3JhY2lsZSIsIAoiQml2ZW50ZXIiLAoiVG9uc2lsbGEiLCAKIkZsb2NjdWx1cyIpCgpuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMuZGVmaW5pdGl2ZSA8LSBjKAoiQ2VudHJhbCIsIAoiQ3VsbWVuIiwgCiJEZWNsaXZlIiwgCiJGb2xpdW0iLCAKIlR1YmVyIiwKIlB5cmFtaWQiLCAKIlV2dWxhIiwgCiJOb2R1bGUiLAoiQWxhIGxvYnVsaSBjZW50cmFsaXMiLAoiQVFMIiwKIlBRTCIsCiJTU0wiLAoiSVNML2dyYWNpbGUiLCAKIkJpdmVudGVyIiwKIlRvbnNpbGxhIiwgCiJGbG9jY3VsdXMiKQoKQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUucGxvdGRhdGEyIDwtIGdhdGhlcihCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZTIsICJhbmF0b21pY2FsLnN0cnVjdHVyZSIsICJyZWxhdGl2ZS52b2x1bWUiKQpCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5wbG90ZGF0YTIkR2VuZGVyIDwtIEFsbC5Wb2x1bWVzJEdlbmRlcgpCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5wbG90ZGF0YTIkQWdlIDwtIEFsbC5Wb2x1bWVzJGBBZ2UgKHllYXJzKWAKCkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLnBsb3RkYXRhMiRHZW5kZXIgPC0gZmFjdG9yKEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLnBsb3RkYXRhMiRHZW5kZXIsIGxldmVscyA9IGMoImYiLCAibSIpLCBjKCJmIiwgIm0iKSkKQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUucGxvdGRhdGEyJGFuYXRvbWljYWwuc3RydWN0dXJlIDwtIGZhY3RvcihCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5wbG90ZGF0YTIkYW5hdG9taWNhbC5zdHJ1Y3R1cmUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gcmV2KGMobmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLnRlbXBvcmFyeSkpLCByZXYoYyhuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMuZGVmaW5pdGl2ZSkpKQoKQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUucGxvdDIgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5wbG90ZGF0YTIsIGFlcyh4PWFuYXRvbWljYWwuc3RydWN0dXJlLCB5ID0gcmVsYXRpdmUudm9sdW1lKSkgICsKICBzdGF0X3N1bW1hcnkoYWxwaGEgPSAwLjMsIGZ1biA9IG1lYW4sIGdlb20gPSAiYmFyIiwgd2lkdGggPSAwLjMsIGZpbGwgPSAiZ3JheTUwIikgKyAKICBnZW9tX2JveHBsb3QoYWVzKGZpbGwgPSBHZW5kZXIpLCBhbHBoYSA9IDAuNSwgd2lkdGggPSAwLjQsIHNpemUgPSAwLjIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjYpLCAKICAgICAgICAgICAgICAgb3V0bGllci5zaGFwZSA9IE5BLCBjb2xvciA9ICJncmF5MzAiKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9xdWFzaXJhbmRvbShhZXMoY29sb3IgPSBBZ2UpLCBzaXplID0gMC43LCBhbHBoYSA9IDAuOCwgc2hhcGUgPSAxNiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgc2NhbGVfY29sb3JfY29udGludW91cyhsb3cgPSAic3RlZWxibHVlMSIsIGhpZ2ggPSAicmVkNCIpICsKICB4bGFiKCIiKSArIHlsYWIoIkFic29sdXRlIHZvbHVtZSAoaW4gbW0zKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgZ2d0aXRsZSgiQ0VSRUJFTExBUiBMT0JFUyAmIExPQlVMRVMiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCgpCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5wbG90MgpnZ3NhdmUoIkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLnBsb3QyLnBkZiIsIHBsb3QgPSBCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZS5wbG90Miwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpgYGAKCmBgYHtyIEJyYWluc3RlbSBhbmQgQ2VyZWJlbGx1bTogQWJzb2x1dGUgVm9sdW1lcyBhbmQgQWdlIFBsb3R9CgpCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSRHZW5kZXIgPC0gQWxsLlZvbHVtZXMkR2VuZGVyCkJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlJEFnZSA8LSBBbGwuVm9sdW1lcyRgQWdlICh5ZWFycylgCgpUb3RhbC5NZXNlbmNlcGhhbG9uLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUsIGFlcyh5PU1lc2VuY2VwaGFsb24sIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMTE3MDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgbWVzZW5jZXBoYWxvbiIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuTWVzZW5jZXBoYWxvbi5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLk1lc2VuY2VwaGFsb24uQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLk1lc2VuY2VwaGFsb24uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5Qb25zLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUsIGFlcyh5PVBvbnMsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMjA1MDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgcG9ucyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuUG9ucy5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlBvbnMuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLlBvbnMuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5NZWR1bGxhLm9ibG9uZ2F0YS5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLCBhZXMoeT1NZWR1bGxhLm9ibG9uZ2F0YSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAzMzAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIG1lZHVsbGEgb2Jsb25nYXRhIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5NZWR1bGxhLm9ibG9uZ2F0YS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLk1lZHVsbGEub2Jsb25nYXRhLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5NZWR1bGxhLm9ibG9uZ2F0YS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkNlcmViZWxsYXIucGVkdW5jbGVzLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUsIGFlcyh5PUNlcmViZWxsYXIucGVkdW5jbGVzLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDg3MDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgY2VyZWJlbGxhciBwZWR1bmNsZXMiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLkNlcmViZWxsYXIucGVkdW5jbGVzLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuQ2VyZWJlbGxhci5wZWR1bmNsZXMuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkNlcmViZWxsYXIucGVkdW5jbGVzLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuVmVybWlzLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUsIGFlcyh5PVZlcm1pcywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA3MjAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIHZlcm1pcyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuVmVybWlzLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuVmVybWlzLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5WZXJtaXMuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5IZW1pc3BoZXJlLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUsIGFlcyh5PUhlbWlzcGhlcmUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMTIzMDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGhlbWlzcGhlcmUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLkhlbWlzcGhlcmUuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5IZW1pc3BoZXJlLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5IZW1pc3BoZXJlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuQW50ZXJpb3IubG9iZS5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLCBhZXMoeT1BbnRlcmlvci5sb2JlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDM2MDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGFudGVyaW9yIGxvYmUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLkFudGVyaW9yLmxvYmUuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5BbnRlcmlvci5sb2JlLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5BbnRlcmlvci5sb2JlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuTWVkaWFsLmxvYmUuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSwgYWVzKHk9TWVkaWFsLmxvYmUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMzEwMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgbWVkaWFsIGxvYmUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLk1lZGlhbC5sb2JlLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuTWVkaWFsLmxvYmUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLk1lZGlhbC5sb2JlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuUG9zdGVyaW9yLmxvYmUuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSwgYWVzKHk9UG9zdGVyaW9yLmxvYmUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gNjYwMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgcG9zdGVyaW9yIGxvYmUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLlBvc3Rlcmlvci5sb2JlLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuUG9zdGVyaW9yLmxvYmUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLlBvc3Rlcmlvci5sb2JlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuRmxvY2N1bG9ub2R1bGFyLmxvYmUuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSwgYWVzKHk9RmxvY2N1bG9ub2R1bGFyLmxvYmUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMTI1MCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBmbG9jY3Vsb25vZHVsYXIgbG9iZSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuRmxvY2N1bG9ub2R1bGFyLmxvYmUuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5GbG9jY3Vsb25vZHVsYXIubG9iZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuRmxvY2N1bG9ub2R1bGFyLmxvYmUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5DZW50cmFsLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUsIGFlcyh5PUNlbnRyYWwsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gNzcwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGNlbnRyYWwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLkNlbnRyYWwuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5DZW50cmFsLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5DZW50cmFsLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuQ3VsbWVuLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUsIGFlcyh5PUN1bG1lbiwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDI2MDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgQ1VMTUVOIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5DdWxtZW4uQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5DdWxtZW4uQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkN1bG1lbi5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkRlY2xpdmUuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSwgYWVzKHk9RGVjbGl2ZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEyNTAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgREVDTElWRSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuRGVjbGl2ZS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkRlY2xpdmUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkRlY2xpdmUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5Gb2xpdW0uQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSwgYWVzKHk9Rm9saXVtLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuNSwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuNSwgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gNjMwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIEZPTElVTSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuRm9saXVtLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuRm9saXVtLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5Gb2xpdW0uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5UdWJlci5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLCBhZXMoeT1UdWJlciwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDU3MCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBUVUJFUiIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuVHViZXIuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5UdWJlci5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuVHViZXIuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5QeXJhbWlkLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUsIGFlcyh5PVB5cmFtaWQsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0IiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA3MDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgUFlSQU1JRCIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuUHlyYW1pZC5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlB5cmFtaWQuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLlB5cmFtaWQuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5VdnVsYS5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLCBhZXMoeT1VdnVsYSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEwMzAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgVVZVTEEiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLlV2dWxhLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuVXZ1bGEuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLlV2dWxhLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuTm9kdWxlLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUsIGFlcyh5PU5vZHVsZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDIzMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBOT0RVTEUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLk5vZHVsZS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLk5vZHVsZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuTm9kdWxlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuQWxhLmxvYnVsaS5jZW50cmFsaXMuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSwgYWVzKHk9QWxhLmxvYnVsaS5jZW50cmFsaXMsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0IiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxNjAwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBBTEEgTE9CVUxJIENFTlRSQUxJUyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuQWxhLmxvYnVsaS5jZW50cmFsaXMuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5BbGEubG9idWxpLmNlbnRyYWxpcy5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuQWxhLmxvYnVsaS5jZW50cmFsaXMuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5BUUwuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSwgYWVzKHk9QVFMLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuNSwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuNSwgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMjEwMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgQVFMIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5BUUwuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5BUUwuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkFRTC5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLlBRTC5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLCBhZXMoeT1QUUwsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0IiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxNTUwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSBQUUwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLlBRTC5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlBRTC5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVG90YWwuUFFMLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuU1NMLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUsIGFlcyh5PVNTTCwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDE1NTAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIFNTTCIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuU1NMLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuU1NMLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5TU0wuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpUb3RhbC5JU0wuZ3JhY2lsZS5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLCBhZXMoeT1JU0wuZ3JhY2lsZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDQyMDAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIElTTC9ncmFjaWxlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5JU0wuZ3JhY2lsZS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLklTTC5ncmFjaWxlLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5JU0wuZ3JhY2lsZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkJpdmVudGVyLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUsIGFlcyh5PUJpdmVudGVyLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuNSwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuNSwgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMjEwMDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgYml2ZW50ZXIiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLkJpdmVudGVyLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuQml2ZW50ZXIuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFRvdGFsLkJpdmVudGVyLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVG90YWwuVG9uc2lsbGEuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSwgYWVzKHk9VG9uc2lsbGEsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0IiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA3NzAwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIHRvbnNpbGxhIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpUb3RhbC5Ub25zaWxsYS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlRvbnNpbGxhLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5Ub25zaWxsYS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClRvdGFsLkZsb2NjdWx1cy5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLmFic29sdXRlLCBhZXMoeT1GbG9jY3VsdXMsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0IiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxMDUwLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGZsb2NjdWx1cyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVG90YWwuRmxvY2N1bHVzLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuRmxvY2N1bHVzLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC5GbG9jY3VsdXMuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpgYGAKCiMjIFJlbGF0aXZlIFZvbHVtZXMKCmBgYHtyIEJyYWluc3RlbSBhbmQgQ2VyZWJlbGx1bTogUmVsYXRpdmUgVm9sdW1lc30KCiNCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5hYnNvbHV0ZSA8LSBzZWxlY3QoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUsIC0gYyhBZ2UsIEdlbmRlcikpCkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlIDwtICgxMDAgKiAoQnJhaW5zdGVtLkNlcmViZWxsdW0uYWJzb2x1dGUvQWxsLlZvbHVtZXMkYFRvdGFsIGVuY2VwaGFsaWMgdm9sdW1lICh3aXRob3V0IHZlbnRyaWNsZXMpYCkpCkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlMSA8LSBCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZVssYygxOjEwKV0KQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUyIDwtIEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlWywtYygxOjEwKV0KClRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlIDwtIENyZWF0ZVRhYmxlT25lKAogIHZhcnMgPSBjKCJNZXNlbmNlcGhhbG9uIiwKIlBvbnMiLAoiTWVkdWxsYS5vYmxvbmdhdGEiLCAKIkNlcmViZWxsYXIucGVkdW5jbGVzIiwgCiJWZXJtaXMiLCAKIkhlbWlzcGhlcmUiLCAKIkFudGVyaW9yLmxvYmUiLCAKIk1lZGlhbC5sb2JlIiwgCiJQb3N0ZXJpb3IubG9iZSIsIAoiRmxvY2N1bG9ub2R1bGFyLmxvYmUiLCAKIkNlbnRyYWwiLCAKIkN1bG1lbiIsIAoiRGVjbGl2ZSIsIAoiRm9saXVtIiwgCiJUdWJlciIsCiJQeXJhbWlkIiwgCiJVdnVsYSIsIAoiTm9kdWxlIiwKIkFsYS5sb2J1bGkuY2VudHJhbGlzIiwKIkFRTCIsCiJQUUwiLAoiU1NMIiwKIklTTC5ncmFjaWxlIiwgCiJCaXZlbnRlciIsCiJUb25zaWxsYSIsIAoiRmxvY2N1bHVzIiksCiAgZGF0YSA9IEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlKQoKQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUkR2VuZGVyIDwtIEFsbC5Wb2x1bWVzJEdlbmRlcgoKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIgPC0gQ3JlYXRlVGFibGVPbmUoCiAgdmFycyA9IGMoIk1lc2VuY2VwaGFsb24iLAoiUG9ucyIsCiJNZWR1bGxhLm9ibG9uZ2F0YSIsIAoiQ2VyZWJlbGxhci5wZWR1bmNsZXMiLCAKIlZlcm1pcyIsIAoiSGVtaXNwaGVyZSIsIAoiQW50ZXJpb3IubG9iZSIsIAoiTWVkaWFsLmxvYmUiLCAKIlBvc3Rlcmlvci5sb2JlIiwgCiJGbG9jY3Vsb25vZHVsYXIubG9iZSIsIAoiQ2VudHJhbCIsIAoiQ3VsbWVuIiwgCiJEZWNsaXZlIiwgCiJGb2xpdW0iLCAKIlR1YmVyIiwKIlB5cmFtaWQiLCAKIlV2dWxhIiwgCiJOb2R1bGUiLAoiQWxhLmxvYnVsaS5jZW50cmFsaXMiLAoiQVFMIiwKIlBRTCIsCiJTU0wiLAoiSVNMLmdyYWNpbGUiLCAKIkJpdmVudGVyIiwKIlRvbnNpbGxhIiwgCiJGbG9jY3VsdXMiKSwKc3RyYXRhID0gYygiR2VuZGVyIiksCiAgZGF0YSA9IEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlKQoKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUgPC0gcHJpbnQoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUsIGNvbnREaWdpdHMgPSAxMCkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIgPC0gcHJpbnQoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIsIGNvbnREaWdpdHMgPSAxMCkKCmBgYAoKYGBge3IgQnJhaW5zdGVtIGFuZCBDZXJlYmVsbHVtOiBSZWxhdGl2ZSBWb2x1bWVzIHJlbGF0aXZlIHN0YW5kYXJkIGRldmlhdGlvbnN9CgpUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5SU0QgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuUlNEIDwtIGRhdGEuZnJhbWUoZG8uY2FsbCgncmJpbmQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzcGxpdChhcy5jaGFyYWN0ZXIoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuUlNEWy0xLF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcsZml4ZWQ9VFJVRSkpKQpUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5SU0QgPC0gZGF0YS5mcmFtZShjYmluZChzdHJfcmVwbGFjZV9hbGwoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuUlNEJFgxLCAiWyBdIiwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuUlNEJFgyLCAiWyldIiwgIiIpKSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuUlNEJFgxIDwtIGFzLmNoYXJhY3RlcihUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5SU0QkWDEpClRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLlJTRCRYMiA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuUlNEJFgyKQpUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5SU0QgPC0gYXMuZGF0YS5mcmFtZShzYXBwbHkoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuUlNELCBhcy5udW1lcmljKSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuUlNEJFgyL1RhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLlJTRCRYMSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuUlNEIDwtIHJvdW5kKFRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLlJTRCAqIDEwMCwgMSkKCgpUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlcikKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNEIDwtIHNlbGVjdChUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QsIC0gYyhwLCB0ZXN0KSkKClRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gZGF0YS5mcmFtZShkby5jYWxsKCdyYmluZCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnNwbGl0KGFzLmNoYXJhY3RlcihUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0RbLTEsICJmIl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcsZml4ZWQ9VFJVRSkpKQpUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlIDwtIGRhdGEuZnJhbWUoY2JpbmQoc3RyX3JlcGxhY2VfYWxsKFRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEsICJbIF0iLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlX2FsbChUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgyLCAiWyldIiwgIiIpKSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMSA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMiA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMikKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSBhcy5kYXRhLmZyYW1lKHNhcHBseShUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlLCBhcy5udW1lcmljKSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSBhcy5kYXRhLmZyYW1lKFRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIvVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSByb3VuZChUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlICogMTAwLCAxKQoKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gZGF0YS5mcmFtZShkby5jYWxsKCdyYmluZCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnNwbGl0KGFzLmNoYXJhY3RlcihUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0RbLTEsICJtIl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcsZml4ZWQ9VFJVRSkpKQpUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSA8LSBkYXRhLmZyYW1lKGNiaW5kKHN0cl9yZXBsYWNlX2FsbChUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMSwgIlsgXSIsICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3JlcGxhY2VfYWxsKFRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgyLCAiWyldIiwgIiIpKSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgxKQpUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMiA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIpClRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIGFzLmRhdGEuZnJhbWUoc2FwcGx5KFRhYmxlLkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlLCBhcy5udW1lcmljKSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMi9UYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMSkKVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gcm91bmQoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgKiAxMDAsIDEpCgpgYGAKCmBgYHtyIEJyYWluc3RlbSBhbmQgQ2VyZWJlbGx1bTogUmVsYXRpdmUgVm9sdW1lcyBUYWJsZXN9CgprYWJsZShUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZSkKa2FibGUoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuUlNEKQprYWJsZShUYWJsZS5CcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlcikKa2FibGUoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSkKa2FibGUoVGFibGUuQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUpCgpgYGAKCmBgYHtyIEJyYWluc3RlbSBhbmQgQ2VyZWJlbGx1bTogUmVsYXRpdmUgVm9sdW1lcyBhbmQgR2VuZGVyIFBsb3QgMX0KCm5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy50ZW1wb3JhcnkgPC0gYygiTWVzZW5jZXBoYWxvbiIsCiJQb25zIiwKIk1lZHVsbGEub2Jsb25nYXRhIiwgCiJDZXJlYmVsbGFyLnBlZHVuY2xlcyIsIAoiVmVybWlzIiwgCiJIZW1pc3BoZXJlIiwgCiJBbnRlcmlvci5sb2JlIiwgCiJNZWRpYWwubG9iZSIsIAoiUG9zdGVyaW9yLmxvYmUiLCAKIkZsb2NjdWxvbm9kdWxhci5sb2JlIikKCm5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy5kZWZpbml0aXZlIDwtIGMoIk1lc2VuY2VwaGFsb24iLAoiUG9ucyIsCiJNZWR1bGxhIG9ibG9uZ2F0YSIsIAoiQ2VyZWJlbGxhciBwZWR1bmNsZXMiLCAKIlZlcm1pcyIsIAoiSGVtaXNwaGVyZSIsIAoiQW50ZXJpb3IgbG9iZSIsIAoiTWVkaWFsIGxvYmUiLCAKIlBvc3RlcmlvciBsb2JlIiwgCiJGbG9jY3Vsb25vZHVsYXIgbG9iZSIpCgpCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5wbG90ZGF0YTEgPC0gZ2F0aGVyKEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlMSwgImFuYXRvbWljYWwuc3RydWN0dXJlIiwgInJlbGF0aXZlLnZvbHVtZSIpCkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnBsb3RkYXRhMSRHZW5kZXIgPC0gQWxsLlZvbHVtZXMkR2VuZGVyCkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnBsb3RkYXRhMSRBZ2UgPC0gQWxsLlZvbHVtZXMkYEFnZSAoeWVhcnMpYAoKQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUucGxvdGRhdGExJEdlbmRlciA8LSBmYWN0b3IoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUucGxvdGRhdGExJEdlbmRlciwgbGV2ZWxzID0gYygiZiIsICJtIiksIGMoImYiLCAibSIpKQpCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5wbG90ZGF0YTEkYW5hdG9taWNhbC5zdHJ1Y3R1cmUgPC0gZmFjdG9yKEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnBsb3RkYXRhMSRhbmF0b21pY2FsLnN0cnVjdHVyZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSByZXYoYyhuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMudGVtcG9yYXJ5KSksIHJldihjKG5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy5kZWZpbml0aXZlKSkpCgpCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5wbG90MSA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnBsb3RkYXRhMSwgYWVzKHg9YW5hdG9taWNhbC5zdHJ1Y3R1cmUsIHkgPSByZWxhdGl2ZS52b2x1bWUpKSAgKwogIHN0YXRfc3VtbWFyeShhbHBoYSA9IDAuMywgZnVuID0gbWVhbiwgZ2VvbSA9ICJiYXIiLCB3aWR0aCA9IDAuMywgZmlsbCA9ICJncmF5NTAiKSArIAogIGdlb21fYm94cGxvdChhZXMoZmlsbCA9IEdlbmRlciksIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNCwgc2l6ZSA9IDAuMiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNiksIAogICAgICAgICAgICAgICBvdXRsaWVyLnNoYXBlID0gTkEsIGNvbG9yID0gImdyYXkzMCIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3F1YXNpcmFuZG9tKGFlcyhjb2xvciA9IEFnZSksIHNpemUgPSAwLjcsIGFscGhhID0gMC44LCBzaGFwZSA9IDE2LCBwb3NpdGlvbiA9ICJkb2RnZSIpICsKICBzY2FsZV9jb2xvcl9jb250aW51b3VzKGxvdyA9ICJzdGVlbGJsdWUxIiwgaGlnaCA9ICJyZWQ0IikgKwogIHhsYWIoIiIpICsgeWxhYigiUmVsYXRpdmUgdm9sdW1lIChpbiAlKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgZ2d0aXRsZSgiQlJBSU5TVEVNICYgQ0VSRUJFTExVTSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKCkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnBsb3QxCmdnc2F2ZSgiQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUucGxvdDEucGRmIiwgcGxvdCA9IEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnBsb3QxLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKCmBgYAoKYGBge3IgQnJhaW5zdGVtIGFuZCBDZXJlYmVsbHVtOiBSZWxhdGl2ZSBWb2x1bWVzIGFuZCBHZW5kZXIgUGxvdCAyfQoKbmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLnRlbXBvcmFyeSA8LSBjKAoiQ2VudHJhbCIsIAoiQ3VsbWVuIiwgCiJEZWNsaXZlIiwgCiJGb2xpdW0iLCAKIlR1YmVyIiwKIlB5cmFtaWQiLCAKIlV2dWxhIiwgCiJOb2R1bGUiLAoiQWxhLmxvYnVsaS5jZW50cmFsaXMiLAoiQVFMIiwKIlBRTCIsCiJTU0wiLAoiSVNMLmdyYWNpbGUiLCAKIkJpdmVudGVyIiwKIlRvbnNpbGxhIiwgCiJGbG9jY3VsdXMiKQoKbmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLmRlZmluaXRpdmUgPC0gYygKIkNlbnRyYWwiLCAKIkN1bG1lbiIsIAoiRGVjbGl2ZSIsIAoiRm9saXVtIiwgCiJUdWJlciIsCiJQeXJhbWlkIiwgCiJVdnVsYSIsIAoiTm9kdWxlIiwKIkFsYSBsb2J1bGkgY2VudHJhbGlzIiwKIkFRTCIsCiJQUUwiLAoiU1NMIiwKIklTTC9ncmFjaWxlIiwgCiJCaXZlbnRlciIsCiJUb25zaWxsYSIsIAoiRmxvY2N1bHVzIikKCkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnBsb3RkYXRhMiA8LSBnYXRoZXIoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUyLCAiYW5hdG9taWNhbC5zdHJ1Y3R1cmUiLCAicmVsYXRpdmUudm9sdW1lIikKQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUucGxvdGRhdGEyJEdlbmRlciA8LSBBbGwuVm9sdW1lcyRHZW5kZXIKQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUucGxvdGRhdGEyJEFnZSA8LSBBbGwuVm9sdW1lcyRgQWdlICh5ZWFycylgCgpCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5wbG90ZGF0YTIkR2VuZGVyIDwtIGZhY3RvcihCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZS5wbG90ZGF0YTIkR2VuZGVyLCBsZXZlbHMgPSBjKCJmIiwgIm0iKSwgYygiZiIsICJtIikpCkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnBsb3RkYXRhMiRhbmF0b21pY2FsLnN0cnVjdHVyZSA8LSBmYWN0b3IoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUucGxvdGRhdGEyJGFuYXRvbWljYWwuc3RydWN0dXJlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IHJldihjKG5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy50ZW1wb3JhcnkpKSwgcmV2KGMobmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLmRlZmluaXRpdmUpKSkKCkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnBsb3QyIDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUucGxvdGRhdGEyLCBhZXMoeD1hbmF0b21pY2FsLnN0cnVjdHVyZSwgeSA9IHJlbGF0aXZlLnZvbHVtZSkpICArCiAgc3RhdF9zdW1tYXJ5KGFscGhhID0gMC4zLCBmdW4gPSBtZWFuLCBnZW9tID0gImJhciIsIHdpZHRoID0gMC4zLCBmaWxsID0gImdyYXk1MCIpICsgCiAgZ2VvbV9ib3hwbG90KGFlcyhmaWxsID0gR2VuZGVyKSwgYWxwaGEgPSAwLjUsIHdpZHRoID0gMC40LCBzaXplID0gMC4yLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC42KSwgCiAgICAgICAgICAgICAgIG91dGxpZXIuc2hhcGUgPSBOQSwgY29sb3IgPSAiZ3JheTMwIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fcXVhc2lyYW5kb20oYWVzKGNvbG9yID0gQWdlKSwgc2l6ZSA9IDAuNywgYWxwaGEgPSAwLjgsIHNoYXBlID0gMTYsIHBvc2l0aW9uID0gImRvZGdlIikgKwogIHNjYWxlX2NvbG9yX2NvbnRpbnVvdXMobG93ID0gInN0ZWVsYmx1ZTEiLCBoaWdoID0gInJlZDQiKSArCiAgeGxhYigiIikgKyB5bGFiKCJSZWxhdGl2ZSB2b2x1bWUgKGluICUpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgY29vcmRfZmxpcCgpICsKICBnZ3RpdGxlKCJDRVJFQkVMTEFSIExPQkVTICYgTE9CVUxFUyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKCkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnBsb3QyCmdnc2F2ZSgiQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUucGxvdDIucGRmIiwgcGxvdCA9IEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLnBsb3QyLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKCmBgYAoKYGBge3IgQnJhaW5zdGVtIGFuZCBDZXJlYmVsbHVtOiBSZWxhdGl2ZSBWb2x1bWVzIGFuZCBBZ2UgUGxvdH0KCiNCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZSRHZW5kZXIgPC0gQWxsLlZvbHVtZXMkR2VuZGVyCkJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlJEFnZSA8LSBBbGwuVm9sdW1lcyRgQWdlICh5ZWFycylgCgpSZWxhdGl2ZS5NZXNlbmNlcGhhbG9uLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUsIGFlcyh5PU1lc2VuY2VwaGFsb24sIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMS4wMiwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBtZXNlbmNlcGhhbG9uIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5NZXNlbmNlcGhhbG9uLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuTWVzZW5jZXBoYWxvbi5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuTWVzZW5jZXBoYWxvbi5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlBvbnMuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZSwgYWVzKHk9UG9ucywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxLjkzLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIHBvbnMiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLlBvbnMuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5Qb25zLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5Qb25zLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuTWVkdWxsYS5vYmxvbmdhdGEuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZSwgYWVzKHk9TWVkdWxsYS5vYmxvbmdhdGEsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMC4zMywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBtZWR1bGxhIG9ibG9uZ2F0YSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuTWVkdWxsYS5vYmxvbmdhdGEuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5NZWR1bGxhLm9ibG9uZ2F0YS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuTWVkdWxsYS5vYmxvbmdhdGEuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5DZXJlYmVsbGFyLnBlZHVuY2xlcy5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLCBhZXMoeT1DZXJlYmVsbGFyLnBlZHVuY2xlcywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAwLjgzLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIGNlcmViZWxsYXIgcGVkdW5jbGUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkNlcmViZWxsYXIucGVkdW5jbGVzLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuQ2VyZWJlbGxhci5wZWR1bmNsZXMuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkNlcmViZWxsYXIucGVkdW5jbGVzLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuVmVybWlzLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUsIGFlcyh5PVZlcm1pcywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAwLjY3LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIHZlcm1pcyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuVmVybWlzLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuVmVybWlzLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5WZXJtaXMuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5IZW1pc3BoZXJlLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUsIGFlcyh5PUhlbWlzcGhlcmUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMTEuNywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBoZW1pc3BoZXJlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5IZW1pc3BoZXJlLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuSGVtaXNwaGVyZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuSGVtaXNwaGVyZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkFudGVyaW9yLmxvYmUuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZSwgYWVzKHk9QW50ZXJpb3IubG9iZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAzLjYsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgYW50ZXJpb3IgbG9iZSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuQW50ZXJpb3IubG9iZS5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkFudGVyaW9yLmxvYmUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkFudGVyaW9yLmxvYmUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5NZWRpYWwubG9iZS5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLCBhZXMoeT1NZWRpYWwubG9iZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAzLjEsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgbWVkaWFsIGxvYmUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLk1lZGlhbC5sb2JlLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuTWVkaWFsLmxvYmUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLk1lZGlhbC5sb2JlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuUG9zdGVyaW9yLmxvYmUuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZSwgYWVzKHk9UG9zdGVyaW9yLmxvYmUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gNi42LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIHBvc3RlcmlvciBsb2JlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5Qb3N0ZXJpb3IubG9iZS5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLlBvc3Rlcmlvci5sb2JlLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5Qb3N0ZXJpb3IubG9iZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkZsb2NjdWxvbm9kdWxhci5sb2JlLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUsIGFlcyh5PUZsb2NjdWxvbm9kdWxhci5sb2JlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuMTIxLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIGZsb2NjdWxvbm9kdWxhciBsb2JlIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5GbG9jY3Vsb25vZHVsYXIubG9iZS5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkZsb2NjdWxvbm9kdWxhci5sb2JlLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5GbG9jY3Vsb25vZHVsYXIubG9iZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkNlbnRyYWwuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZSwgYWVzKHk9Q2VudHJhbCwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuMDcyLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIENFTlRSQUwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkNlbnRyYWwuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5DZW50cmFsLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5DZW50cmFsLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuQ3VsbWVuLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUsIGFlcyh5PUN1bG1lbiwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuMjI4LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIENVTE1FTiIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuQ3VsbWVuLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuQ3VsbWVuLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5DdWxtZW4uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5EZWNsaXZlLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUsIGFlcyh5PURlY2xpdmUsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0IiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAwLjEzLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIERFQ0xJVkUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkRlY2xpdmUuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5EZWNsaXZlLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5EZWNsaXZlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuRm9saXVtLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUsIGFlcyh5PUZvbGl1bSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuMDYyLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIEZPTElVTSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuRm9saXVtLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuRm9saXVtLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5Gb2xpdW0uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5UdWJlci5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLCBhZXMoeT1UdWJlciwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuMDUyLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIFRVQkVSIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5UdWJlci5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLlR1YmVyLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5UdWJlci5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlB5cmFtaWQuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZSwgYWVzKHk9UHlyYW1pZCwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuMDYyLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIFBZUkFNSUQiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLlB5cmFtaWQuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5QeXJhbWlkLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5QeXJhbWlkLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuVXZ1bGEuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZSwgYWVzKHk9VXZ1bGEsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0IiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAwLjA5NywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBVVlVMQSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuVXZ1bGEuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5VdnVsYS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuVXZ1bGEuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5Ob2R1bGUuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZSwgYWVzKHk9Tm9kdWxlLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuNSwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuNSwgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMC4wMjMsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgTk9EVUxFIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5Ob2R1bGUuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5Ob2R1bGUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLk5vZHVsZS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkFsYS5sb2J1bGkuY2VudHJhbGlzLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUsIGFlcyh5PUFsYS5sb2J1bGkuY2VudHJhbGlzLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuNSwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuNSwgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMS40NSwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBBTEEgTE9CVUxJIENFTlRSQUxJUyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuQWxhLmxvYnVsaS5jZW50cmFsaXMuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5BbGEubG9idWxpLmNlbnRyYWxpcy5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuQWxhLmxvYnVsaS5jZW50cmFsaXMuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5BUUwuQWdlLnBsb3QgPC0gIGdncGxvdChCcmFpbnN0ZW0uQ2VyZWJlbGx1bS5yZWxhdGl2ZSwgYWVzKHk9QVFMLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjcsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDIuMSwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBBUUwiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkFRTC5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkFRTC5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuQVFMLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuUFFMLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUsIGFlcyh5PVBRTCwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEuNTUsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgUFFMIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5QUUwuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5QUUwuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLlBRTC5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlNTTC5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLCBhZXMoeT1TU0wsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0IiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC41LCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAxLjU1LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIFNTTCIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuU1NMLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuU1NMLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5TU0wuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5JU0wuZ3JhY2lsZS5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLCBhZXMoeT1JU0wuZ3JhY2lsZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDQuMiwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBJU0wvR1JBQ0lMRSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuSVNMLmdyYWNpbGUuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5JU0wuZ3JhY2lsZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuSVNMLmdyYWNpbGUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5CaXZlbnRlci5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLCBhZXMoeT1CaXZlbnRlciwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEuNywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBCSVZFTlRFUiIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuQml2ZW50ZXIuQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5CaXZlbnRlci5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuQml2ZW50ZXIuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5Ub25zaWxsYS5BZ2UucGxvdCA8LSAgZ2dwbG90KEJyYWluc3RlbS5DZXJlYmVsbHVtLnJlbGF0aXZlLCBhZXMoeT1Ub25zaWxsYSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuNzIsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgVE9OU0lMTEEiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLlRvbnNpbGxhLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuVG9uc2lsbGEuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLlRvbnNpbGxhLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuRmxvY2N1bHVzLkFnZS5wbG90IDwtICBnZ3Bsb3QoQnJhaW5zdGVtLkNlcmViZWxsdW0ucmVsYXRpdmUsIGFlcyh5PUZsb2NjdWx1cywgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjUsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDAuMTA1LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIEZMT0NDVUxVUyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuRmxvY2N1bHVzLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuRmxvY2N1bHVzLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5GbG9jY3VsdXMuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpgYGAKCiMgVGhlIFZlbnRyaWN1bGFyIFN5c3RlbQoKIyMgQWJzb2x1dGUgVm9sdW1lcwoKYGBge3IgVGhlIFZlbnRyaWN1bGFyIFN5c3RlbTogQWJzb2x1dGUgVm9sdW1lc30KClRvdGFsLnZvbHVtZS52ZW50cmljbGVzIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgdmVudHJpY2xlc2AKTFYudG90YWwgPC0gIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgbGF0ZXJhbCB2ZW50cmljbGVzYApMVi5mcm9udGFsLmhvcm4gPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBmcm9udGFsIGhvcm5gCkxWLmJvZHkgPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBib2R5IG9mIExWYApMVi5hdHJpdW0gPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSBhdHJpdW1gCkxWLm9jY2lwaXRhbC5ob3JuIDwtIEFsbC5Wb2x1bWVzJGBUb3RhbCB2b2x1bWUgb2NjaXBpdGFsIGhvcm5gCkxWLnRlbXBvcmFsLmhvcm4gPC0gQWxsLlZvbHVtZXMkYFRvdGFsIHZvbHVtZSB0ZW1wb3JhbCBob3JuYApUaGlyZC52ZW50cmljbGUgPC0gQWxsLlZvbHVtZXMkYDNyZCB2ZW50cmljbGVgCkZvdXJ0aC52ZW50cmljbGUudG90YWwgPC0gQWxsLlZvbHVtZXMkYDR0aCB2ZW50cmljbGVgCkFwZXggPC0gQWxsLlZvbHVtZXMkYEFwZXggb2YgNHRoYApMYXRlcmFsLnJlY2VzcyA8LSBBbGwuVm9sdW1lcyRgVG90YWwgdm9sdW1lIGxhdGVyYWwgcmVjZXNzYApPYmV4IDwtIEFsbC5Wb2x1bWVzJGBPYmV4IG9mIDR0aGAKRmFzdGlnaXVtIDwtIEFsbC5Wb2x1bWVzJEZhc3RpZ2l1bQoKVmVudHJpY2xlcy5hYnNvbHV0ZSA8LSBhcy5kYXRhLmZyYW1lKGNiaW5kKApUb3RhbC52b2x1bWUudmVudHJpY2xlcywKTFYudG90YWwsCkxWLmZyb250YWwuaG9ybiwKTFYuYm9keSwgCkxWLmF0cml1bSwgCkxWLm9jY2lwaXRhbC5ob3JuLCAKTFYudGVtcG9yYWwuaG9ybiwgClRoaXJkLnZlbnRyaWNsZSwgCkZvdXJ0aC52ZW50cmljbGUudG90YWwsCkFwZXgsCkxhdGVyYWwucmVjZXNzLApPYmV4LApGYXN0aWdpdW0KKSkKClZlbnRyaWNsZXMuYWJzb2x1dGUkR2VuZGVyIDwtIEFsbC5Wb2x1bWVzJEdlbmRlcgoKVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZSA8LSBDcmVhdGVUYWJsZU9uZSgKICB2YXJzID0gYygiVG90YWwudm9sdW1lLnZlbnRyaWNsZXMiLAoiTFYudG90YWwiLAoiTFYuZnJvbnRhbC5ob3JuIiwKIkxWLmJvZHkiLCAKIkxWLmF0cml1bSIsIAoiTFYub2NjaXBpdGFsLmhvcm4iLCAKIkxWLnRlbXBvcmFsLmhvcm4iLCAKIlRoaXJkLnZlbnRyaWNsZSIsIAoiRm91cnRoLnZlbnRyaWNsZS50b3RhbCIsCiJBcGV4IiwKIkxhdGVyYWwucmVjZXNzIiwKIk9iZXgiLAoiRmFzdGlnaXVtIiksCiAgZGF0YSA9IFZlbnRyaWNsZXMuYWJzb2x1dGUpCgpUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyIDwtIENyZWF0ZVRhYmxlT25lKAogIHZhcnMgPSBjKCJUb3RhbC52b2x1bWUudmVudHJpY2xlcyIsCiJMVi50b3RhbCIsCiJMVi5mcm9udGFsLmhvcm4iLAoiTFYuYm9keSIsIAoiTFYuYXRyaXVtIiwgCiJMVi5vY2NpcGl0YWwuaG9ybiIsIAoiTFYudGVtcG9yYWwuaG9ybiIsIAoiVGhpcmQudmVudHJpY2xlIiwgCiJGb3VydGgudmVudHJpY2xlLnRvdGFsIiwKIkFwZXgiLAoiTGF0ZXJhbC5yZWNlc3MiLAoiT2JleCIsCiJGYXN0aWdpdW0iKSwKc3RyYXRhID0gYygiR2VuZGVyIiksCiAgZGF0YSA9IFZlbnRyaWNsZXMuYWJzb2x1dGUpCgpUYWJsZS5WZW50cmljbGVzLmFic29sdXRlIDwtIHByaW50KFRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUsIGNvbnREaWdpdHMgPSAxMCkKVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlciA8LSBwcmludChUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLCBjb250RGlnaXRzID0gMTApCgp3cml0ZS5jc3YoVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZSwgIlRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuY3N2IikKd3JpdGUuY3N2KFRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIsICJUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLmNzdiIpCgpgYGAKCmBgYHtyIFRoZSBWZW50cmljdWxhciBTeXN0ZW06IEFic29sdXRlIFZvbHVtZXMgcmVsYXRpdmUgc3RhbmRhcmQgZGV2aWF0aW9uc30KClRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZSkKVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5SU0QgPC0gZGF0YS5mcmFtZShkby5jYWxsKCdyYmluZCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnNwbGl0KGFzLmNoYXJhY3RlcihUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLlJTRFstMSxdKSwnICgnLGZpeGVkPVRSVUUpKSkKVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5SU0QgPC0gZGF0YS5mcmFtZShjYmluZChzdHJfcmVwbGFjZV9hbGwoVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5SU0QkWDEsICJbIF0iLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlX2FsbChUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLlJTRCRYMiwgIlspXSIsICIiKSkpClRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuUlNEJFgxIDwtIGFzLmNoYXJhY3RlcihUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLlJTRCRYMSkKVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5SU0QkWDIgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuUlNEJFgyKQpUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLlJTRCA8LSBhcy5kYXRhLmZyYW1lKHNhcHBseShUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLlJTRCwgYXMubnVtZXJpYykpClRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5SU0QkWDIvVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5SU0QkWDEpClRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuUlNEIDwtIHJvdW5kKFRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuUlNEICogMTAwLCAxKQoKClRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlcikKVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QgPC0gc2VsZWN0KFRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELCAtIGMocCwgdGVzdCkpCgpUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gZGF0YS5mcmFtZShkby5jYWxsKCdyYmluZCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnNwbGl0KGFzLmNoYXJhY3RlcihUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRFstMSwgImYiXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAoJyxmaXhlZD1UUlVFKSkpClRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSBkYXRhLmZyYW1lKGNiaW5kKHN0cl9yZXBsYWNlX2FsbChUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEsICJbIF0iLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlX2FsbChUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIsICJbKV0iLCAiIikpKQpUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMSkKVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgyIDwtIGFzLmNoYXJhY3RlcihUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIpClRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSBhcy5kYXRhLmZyYW1lKHNhcHBseShUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUsIGFzLm51bWVyaWMpKQpUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIvVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgxKQpUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gcm91bmQoVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlICogMTAwLCAxKQoKVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSA8LSBkYXRhLmZyYW1lKGRvLmNhbGwoJ3JiaW5kJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryc3BsaXQoYXMuY2hhcmFjdGVyKFRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNEWy0xLCAibSJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICgnLGZpeGVkPVRSVUUpKSkKVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSA8LSBkYXRhLmZyYW1lKGNiaW5kKHN0cl9yZXBsYWNlX2FsbChUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgxLCAiWyBdIiwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwoVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMiwgIlspXSIsICIiKSkpClRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEpClRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIpClRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gYXMuZGF0YS5mcmFtZShzYXBwbHkoVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSwgYXMubnVtZXJpYykpClRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgyL1RhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEpClRhYmxlLlZlbnRyaWNsZXMuYWJzb2x1dGUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gcm91bmQoVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSAqIDEwMCwgMSkKCmBgYAoKYGBge3IgVGhlIFZlbnRyaWN1bGFyIFN5c3RlbTogQWJzb2x1dGUgVm9sdW1lcyBUYWJsZXN9CgprYWJsZShUYWJsZS5WZW50cmljbGVzLmFic29sdXRlKQprYWJsZShUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLlJTRCkKa2FibGUoVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlcikKa2FibGUoVGFibGUuVmVudHJpY2xlcy5hYnNvbHV0ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlKQprYWJsZShUYWJsZS5WZW50cmljbGVzLmFic29sdXRlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlKQoKYGBgCgpgYGB7ciBUaGUgVmVudHJpY3VsYXIgU3lzdGVtOiBBYnNvbHV0ZSBWb2x1bWVzIGFuZCBHZW5kZXIgUGxvdH0KClZlbnRyaWNsZXMuYWJzb2x1dGUgPC0gc2VsZWN0KFZlbnRyaWNsZXMuYWJzb2x1dGUsIC0gYyhHZW5kZXIpKQpWZW50cmljbGVzLmFic29sdXRlLnJlZCA8LSBzZWxlY3QoVmVudHJpY2xlcy5hYnNvbHV0ZSwgLSBjKFRvdGFsLnZvbHVtZS52ZW50cmljbGVzKSkKCm5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy50ZW1wb3JhcnkgPC0gYygiTFYudG90YWwiLAoiTFYuZnJvbnRhbC5ob3JuIiwKIkxWLmJvZHkiLCAKIkxWLmF0cml1bSIsIAoiTFYub2NjaXBpdGFsLmhvcm4iLCAKIkxWLnRlbXBvcmFsLmhvcm4iLCAKIlRoaXJkLnZlbnRyaWNsZSIsIAoiRm91cnRoLnZlbnRyaWNsZS50b3RhbCIsCiJBcGV4IiwKIkxhdGVyYWwucmVjZXNzIiwKIk9iZXgiLAoiRmFzdGlnaXVtIikKCm5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy5kZWZpbml0aXZlIDwtIGMoIkxWLSBUb3RhbCIsCiJMViAtIEZyb250YWwgaG9ybiIsCiJMViAtIEJvZHkiLCAKIkxWIC0gQXRyaXVtIiwgCiJMViAtIE9jY2lwaXRhbCBob3JuIiwgCiJMViAtIFRlbXBvcmFsIGhvcm4iLCAKIlRoaXJkIHZlbnRyaWNsZSIsIAoiRm91cnRoIHZlbnRyaWNsZSAtIFRvdGFsIiwKIkFwZXgiLAoiTGF0ZXJhbCByZWNlc3MiLAoiT2JleCIsCiJGYXN0aWdpdW0iKQoKVmVudHJpY2xlcy5hYnNvbHV0ZS5wbG90ZGF0YSA8LSBnYXRoZXIoVmVudHJpY2xlcy5hYnNvbHV0ZS5yZWQsICJhbmF0b21pY2FsLnN0cnVjdHVyZSIsICJyZWxhdGl2ZS52b2x1bWUiKQpWZW50cmljbGVzLmFic29sdXRlLnBsb3RkYXRhJEdlbmRlciA8LSBBbGwuVm9sdW1lcyRHZW5kZXIKVmVudHJpY2xlcy5hYnNvbHV0ZS5wbG90ZGF0YSRBZ2UgPC0gQWxsLlZvbHVtZXMkYEFnZSAoeWVhcnMpYAoKVmVudHJpY2xlcy5hYnNvbHV0ZS5wbG90ZGF0YSRHZW5kZXIgPC0gZmFjdG9yKFZlbnRyaWNsZXMuYWJzb2x1dGUucGxvdGRhdGEkR2VuZGVyLCBsZXZlbHMgPSBjKCJmIiwgIm0iKSwgYygiZiIsICJtIikpClZlbnRyaWNsZXMuYWJzb2x1dGUucGxvdGRhdGEkYW5hdG9taWNhbC5zdHJ1Y3R1cmUgPC0gZmFjdG9yKFZlbnRyaWNsZXMuYWJzb2x1dGUucGxvdGRhdGEkYW5hdG9taWNhbC5zdHJ1Y3R1cmUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gcmV2KGMobmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLnRlbXBvcmFyeSkpLCByZXYoYyhuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMuZGVmaW5pdGl2ZSkpKQoKVmVudHJpY2xlcy5hYnNvbHV0ZS5wbG90IDwtICBnZ3Bsb3QoVmVudHJpY2xlcy5hYnNvbHV0ZS5wbG90ZGF0YSwgYWVzKHg9YW5hdG9taWNhbC5zdHJ1Y3R1cmUsIHkgPSByZWxhdGl2ZS52b2x1bWUpKSAgKwogIHN0YXRfc3VtbWFyeShhbHBoYSA9IDAuMywgZnVuID0gbWVhbiwgZ2VvbSA9ICJiYXIiLCB3aWR0aCA9IDAuMywgZmlsbCA9ICJncmF5NTAiKSArIAogIGdlb21fYm94cGxvdChhZXMoZmlsbCA9IEdlbmRlciksIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNCwgc2l6ZSA9IDAuMiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNiksIAogICAgICAgICAgICAgICBvdXRsaWVyLnNoYXBlID0gTkEsIGNvbG9yID0gImdyYXkzMCIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3F1YXNpcmFuZG9tKGFlcyhjb2xvciA9IEFnZSksIHNpemUgPSAwLjcsIGFscGhhID0gMC44LCBzaGFwZSA9IDE2LCBwb3NpdGlvbiA9ICJkb2RnZSIpICsKICBzY2FsZV9jb2xvcl9jb250aW51b3VzKGxvdyA9ICJzdGVlbGJsdWUxIiwgaGlnaCA9ICJyZWQ0IikgKwogIHhsYWIoIiIpICsgeWxhYigiQWJzb2x1dGUgdm9sdW1lIChpbiBtbTMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgY29vcmRfZmxpcCgpICsKICBnZ3RpdGxlKCJWRU5UUklDVUxBUiBTWVNURU0iKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCgpWZW50cmljbGVzLmFic29sdXRlLnBsb3QKZ2dzYXZlKCJWZW50cmljbGVzLmFic29sdXRlLnBsb3QucGRmIiwgcGxvdCA9IFZlbnRyaWNsZXMuYWJzb2x1dGUucGxvdCwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gNSwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpgYGAKCmBgYHtyIFRoZSBWZW50cmljdWxhciBTeXN0ZW06IEFic29sdXRlIFZvbHVtZXMgYW5kIEFnZSBQbG90fQoKVG90YWwudmVudHJpY2xlcy5BZ2UucGxvdCA8LSAgZ2dwbG90KEFsbC5Wb2x1bWVzLCBhZXMoeT1gVG90YWwgdm9sdW1lIHZlbnRyaWNsZXNgLCB4ID0gYEFnZSAoeWVhcnMpYCkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA4MjAwMCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSB0b3RhbCB2ZW50cmljdWxhciBzeXN0ZW0iKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRvdGFsLnZlbnRyaWNsZXMuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5Ub3RhbC52ZW50cmljbGVzLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBUb3RhbC52ZW50cmljbGVzLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKTGF0ZXJhbC52ZW50cmljbGUuQWdlLnBsb3QgPC0gZ2dwbG90KEFsbC5Wb2x1bWVzLCBhZXMoeT1gVG90YWwgdm9sdW1lIGxhdGVyYWwgdmVudHJpY2xlc2AsIHggPSBgQWdlICh5ZWFycylgKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDcyMDAwLCBsYWJlbC54ID0gNjUsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGxhdGVyYWwgdmVudHJpY2xlcyIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKTGF0ZXJhbC52ZW50cmljbGUuQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5MYXRlcmFsLnZlbnRyaWNsZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gTGF0ZXJhbC52ZW50cmljbGUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpMYXRlcmFsLnZlbnRyaWNsZS5mcm9udGFsLmhvcm4uQWdlLnBsb3QgPC0gZ2dwbG90KEFsbC5Wb2x1bWVzLCBhZXMoeT1gVG90YWwgdm9sdW1lIGZyb250YWwgaG9ybmAsIHggPSBgQWdlICh5ZWFycylgKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDIxMDAwLCBsYWJlbC54ID0gNjUsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGZyb250YWwgaG9ybiIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKTGF0ZXJhbC52ZW50cmljbGUuZnJvbnRhbC5ob3JuLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuTGF0ZXJhbC52ZW50cmljbGUuZnJvbnRhbC5ob3JuLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBMYXRlcmFsLnZlbnRyaWNsZS5mcm9udGFsLmhvcm4uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpMYXRlcmFsLnZlbnRyaWNsZS5ib2R5LkFnZS5wbG90IDwtIGdncGxvdChBbGwuVm9sdW1lcywgYWVzKHk9YFRvdGFsIHZvbHVtZSBib2R5IG9mIExWYCwgeCA9IGBBZ2UgKHllYXJzKWApKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMTkwMDAsIGxhYmVsLnggPSA2NSwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgYm9keSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKTGF0ZXJhbC52ZW50cmljbGUuYm9keS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkxhdGVyYWwudmVudHJpY2xlLmJvZHkuQWdlLnBsb3QucGRmIiwgcGxvdCA9IExhdGVyYWwudmVudHJpY2xlLmJvZHkuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpMYXRlcmFsLnZlbnRyaWNsZS5hdHJpdW0uQWdlLnBsb3QgPC0gZ2dwbG90KEFsbC5Wb2x1bWVzLCBhZXMoeT1gVG90YWwgdm9sdW1lIGF0cml1bWAsIHggPSBgQWdlICh5ZWFycylgKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDI0MDAwLCBsYWJlbC54ID0gNjUsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIGF0cml1bSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKTGF0ZXJhbC52ZW50cmljbGUuYXRyaXVtLkFnZS5wbG90Cmdnc2F2ZSgiVG90YWwuTGF0ZXJhbC52ZW50cmljbGUuYXRyaXVtLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBMYXRlcmFsLnZlbnRyaWNsZS5hdHJpdW0uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpMYXRlcmFsLnZlbnRyaWNsZS5vY2NpcGl0YWwuaG9ybi5BZ2UucGxvdCA8LSBnZ3Bsb3QoQWxsLlZvbHVtZXMsIGFlcyh5PWBUb3RhbCB2b2x1bWUgb2NjaXBpdGFsIGhvcm5gLCB4ID0gYEFnZSAoeWVhcnMpYCkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA0MTAwLCBsYWJlbC54ID0gNjUsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIG9jY2lwaXRhbCBob3JuIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpMYXRlcmFsLnZlbnRyaWNsZS5vY2NpcGl0YWwuaG9ybi5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkxhdGVyYWwudmVudHJpY2xlLm9jY2lwaXRhbC5ob3JuLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBMYXRlcmFsLnZlbnRyaWNsZS5vY2NpcGl0YWwuaG9ybi5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKCkxhdGVyYWwudmVudHJpY2xlLnRlbXBvcmFsLmhvcm4uQWdlLnBsb3QgPC0gZ2dwbG90KEFsbC5Wb2x1bWVzLCBhZXMoeT1gVG90YWwgdm9sdW1lIHRlbXBvcmFsIGhvcm5gLCB4ID0gYEFnZSAoeWVhcnMpYCkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAzMTAwLCBsYWJlbC54ID0gNjUsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlZvbHVtZSBpbiBtbTMiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiQUJTT0xVVEUgVk9MVU1FIHRlbXBvcmFsIGhvcm4iKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCkxhdGVyYWwudmVudHJpY2xlLnRlbXBvcmFsLmhvcm4uQWdlLnBsb3QKZ2dzYXZlKCJUb3RhbC5MYXRlcmFsLnZlbnRyaWNsZS50ZW1wb3JhbC5ob3JuLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBMYXRlcmFsLnZlbnRyaWNsZS50ZW1wb3JhbC5ob3JuLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVGhpcmQudmVudHJpY2xlLkFnZS5wbG90IDwtIGdncGxvdChBbGwuVm9sdW1lcywgYWVzKHkgPWAzcmQgdmVudHJpY2xlYCwgeCA9IGBBZ2UgKHllYXJzKWApKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gNDI1MCwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJWb2x1bWUgaW4gbW0zIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIkFCU09MVVRFIFZPTFVNRSB0aGlyZCB2ZW50cmljbGUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClRoaXJkLnZlbnRyaWNsZS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLlRoaXJkLnZlbnRyaWNsZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVGhpcmQudmVudHJpY2xlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKRm91cnRoLnZlbnRyaWNsZS5BZ2UucGxvdCA8LSBnZ3Bsb3QoQWxsLlZvbHVtZXMsIGFlcyh5ID1gNHRoIHZlbnRyaWNsZWAsIHggPSBgQWdlICh5ZWFycylgKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDI3MDAsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiVm9sdW1lIGluIG1tMyIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJBQlNPTFVURSBWT0xVTUUgZm91cnRoIHZlbnRyaWNsZSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKRm91cnRoLnZlbnRyaWNsZS5BZ2UucGxvdApnZ3NhdmUoIlRvdGFsLkZvdXJ0aC52ZW50cmljbGUuQWdlLnBsb3QucGRmIiwgcGxvdCA9IEZvdXJ0aC52ZW50cmljbGUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpgYGAKCiMjIFJlbGF0aXZlIFZvbHVtZXMgMTogTm9ybWFsaXplZCB0byBUb3RhbCBFbmNlcGhhbGljIFZvbHVtZQoKYGBge3IgVGhlIFZlbnRyaWN1bGFyIFN5c3RlbTogUmVsYXRpdmUgVm9sdW1lcyAxfQoKI1ZlbnRyaWNsZXMuYWJzb2x1dGUgPC0gc2VsZWN0KFZlbnRyaWNsZXMuYWJzb2x1dGUsIC0gYyhHZW5kZXIpKQpUb3RhbC52ZW50cmljdWxhci52b2x1bWUucmVsYXRpdmUgPC0gKDEwMCAqIChWZW50cmljbGVzLmFic29sdXRlJFRvdGFsLnZvbHVtZS52ZW50cmljbGVzL0FsbC5Wb2x1bWVzJGBUb3RhbCBlbmNlcGhhbGljIHZvbHVtZSAod2l0aG91dCB2ZW50cmljbGVzKWApKQoKVmVudHJpY2xlcy5yZWxhdGl2ZSA8LSAoMTAwICogKFZlbnRyaWNsZXMuYWJzb2x1dGVbLCAtMV0vQWxsLlZvbHVtZXMkYFRvdGFsIGVuY2VwaGFsaWMgdm9sdW1lICh3aXRob3V0IHZlbnRyaWNsZXMpYCkpCgpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlIDwtIGNiaW5kKFRvdGFsLnZlbnRyaWN1bGFyLnZvbHVtZS5yZWxhdGl2ZSwgVmVudHJpY2xlcy5yZWxhdGl2ZSkKClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUkR2VuZGVyIDwtIEFsbC5Wb2x1bWVzJEdlbmRlcgoKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZTEgPC0gQ3JlYXRlVGFibGVPbmUoCiAgdmFycyA9IGMoIlRvdGFsLnZlbnRyaWN1bGFyLnZvbHVtZS5yZWxhdGl2ZSIsCiJMVi50b3RhbCIsCiJMVi5mcm9udGFsLmhvcm4iLAoiTFYuYm9keSIsIAoiTFYuYXRyaXVtIiwgCiJMVi5vY2NpcGl0YWwuaG9ybiIsIAoiTFYudGVtcG9yYWwuaG9ybiIsIAoiVGhpcmQudmVudHJpY2xlIiwgCiJGb3VydGgudmVudHJpY2xlLnRvdGFsIiwKIkFwZXgiLAoiTGF0ZXJhbC5yZWNlc3MiLAoiT2JleCIsCiJGYXN0aWdpdW0iKSwKICBkYXRhID0gVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZSkKClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIgPC0gQ3JlYXRlVGFibGVPbmUoCiAgdmFycyA9IGMoIlRvdGFsLnZlbnRyaWN1bGFyLnZvbHVtZS5yZWxhdGl2ZSIsCiJMVi50b3RhbCIsCiJMVi5mcm9udGFsLmhvcm4iLAoiTFYuYm9keSIsIAoiTFYuYXRyaXVtIiwgCiJMVi5vY2NpcGl0YWwuaG9ybiIsIAoiTFYudGVtcG9yYWwuaG9ybiIsIAoiVGhpcmQudmVudHJpY2xlIiwgCiJGb3VydGgudmVudHJpY2xlLnRvdGFsIiwKIkFwZXgiLAoiTGF0ZXJhbC5yZWNlc3MiLAoiT2JleCIsCiJGYXN0aWdpdW0iKSwKc3RyYXRhID0gYygiR2VuZGVyIiksCiAgZGF0YSA9IFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUpCgpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlMSA8LSBwcmludChUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlMSwgY29udERpZ2l0cyA9IDEwKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyIDwtIHByaW50KFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIsIGNvbnREaWdpdHMgPSAxMCkKCmBgYAoKYGBge3IgVGhlIFZlbnRyaWN1bGFyIFN5c3RlbTogUmVsYXRpdmUgVm9sdW1lcyAxIHJlbGF0aXZlIHN0YW5kYXJkIGRldmlhdGlvbnN9CgpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlMS5SU0QgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlMSkKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZTEuUlNEIDwtIGRhdGEuZnJhbWUoZG8uY2FsbCgncmJpbmQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzcGxpdChhcy5jaGFyYWN0ZXIoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZTEuUlNEWy0xLF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcsZml4ZWQ9VFJVRSkpKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlMS5SU0QgPC0gZGF0YS5mcmFtZShjYmluZChzdHJfcmVwbGFjZV9hbGwoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZTEuUlNEJFgxLCAiWyBdIiwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZTEuUlNEJFgyLCAiWyldIiwgIiIpKSkKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZTEuUlNEJFgxIDwtIGFzLmNoYXJhY3RlcihUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlMS5SU0QkWDEpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUxLlJTRCRYMiA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZTEuUlNEJFgyKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlMS5SU0QgPC0gYXMuZGF0YS5mcmFtZShzYXBwbHkoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZTEuUlNELCBhcy5udW1lcmljKSkKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZTEuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZTEuUlNEJFgyL1RhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUxLlJTRCRYMSkKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZTEuUlNEIDwtIHJvdW5kKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUxLlJTRCAqIDEwMCwgMSkKCgpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRCA8LSBhcy5kYXRhLmZyYW1lKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNEIDwtIHNlbGVjdChUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRCwgLSBjKHAsIHRlc3QpKQoKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlIDwtIGRhdGEuZnJhbWUoZG8uY2FsbCgncmJpbmQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzcGxpdChhcy5jaGFyYWN0ZXIoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0RbLTEsICJmIl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcsZml4ZWQ9VFJVRSkpKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gZGF0YS5mcmFtZShjYmluZChzdHJfcmVwbGFjZV9hbGwoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgxLCAiWyBdIiwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgyLCAiWyldIiwgIiIpKSkKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgxIDwtIGFzLmNoYXJhY3RlcihUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMiA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgyKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gYXMuZGF0YS5mcmFtZShzYXBwbHkoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlLCBhcy5udW1lcmljKSkKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgyL1RhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMSkKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlIDwtIHJvdW5kKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSAqIDEwMCwgMSkKClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gZGF0YS5mcmFtZShkby5jYWxsKCdyYmluZCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnNwbGl0KGFzLmNoYXJhY3RlcihUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRFstMSwgIm0iXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAoJyxmaXhlZD1UUlVFKSkpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gZGF0YS5mcmFtZShjYmluZChzdHJfcmVwbGFjZV9hbGwoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMSwgIlsgXSIsICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3JlcGxhY2VfYWxsKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIsICJbKV0iLCAiIikpKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgxIDwtIGFzLmNoYXJhY3RlcihUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgxKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgyIDwtIGFzLmNoYXJhY3RlcihUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgyKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIGFzLmRhdGEuZnJhbWUoc2FwcGx5KFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUsIGFzLm51bWVyaWMpKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMi9UYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgxKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIHJvdW5kKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgKiAxMDAsIDEpCgpgYGAKCmBgYHtyIFRoZSBWZW50cmljdWxhciBTeXN0ZW06IFJlbGF0aXZlIFZvbHVtZXMgMSBUYWJsZXN9CgprYWJsZShUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlMSkKa2FibGUoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZTEuUlNEKQprYWJsZShUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyKQprYWJsZShUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUpCmthYmxlKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUpCgpgYGAKCmBgYHtyIFRoZSBWZW50cmljdWxhciBTeXN0ZW06IFJlbGF0aXZlIFZvbHVtZXMgMSBhbmQgR2VuZGVyIFBsb3R9CgpuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMudGVtcG9yYXJ5IDwtIGMoIkxWLnRvdGFsIiwKIkxWLmZyb250YWwuaG9ybiIsCiJMVi5ib2R5IiwgCiJMVi5hdHJpdW0iLCAKIkxWLm9jY2lwaXRhbC5ob3JuIiwgCiJMVi50ZW1wb3JhbC5ob3JuIiwgCiJUaGlyZC52ZW50cmljbGUiLCAKIkZvdXJ0aC52ZW50cmljbGUudG90YWwiLAoiQXBleCIsCiJMYXRlcmFsLnJlY2VzcyIsCiJPYmV4IiwKIkZhc3RpZ2l1bSIpCgpuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMuZGVmaW5pdGl2ZSA8LSBjKCJMVi0gVG90YWwiLAoiTFYgLSBGcm9udGFsIGhvcm4iLAoiTFYgLSBCb2R5IiwgCiJMViAtIEF0cml1bSIsIAoiTFYgLSBPY2NpcGl0YWwgaG9ybiIsIAoiTFYgLSBUZW1wb3JhbCBob3JuIiwgCiJUaGlyZCB2ZW50cmljbGUiLCAKIkZvdXJ0aCB2ZW50cmljbGUgLSBUb3RhbCIsCiJBcGV4IiwKIkxhdGVyYWwgcmVjZXNzIiwKIk9iZXgiLAoiRmFzdGlnaXVtIikKClZlbnRyaWNsZXMucmVsYXRpdmUucGxvdGRhdGEgPC0gZ2F0aGVyKFZlbnRyaWNsZXMucmVsYXRpdmUsICJhbmF0b21pY2FsLnN0cnVjdHVyZSIsICJyZWxhdGl2ZS52b2x1bWUiKQpWZW50cmljbGVzLnJlbGF0aXZlLnBsb3RkYXRhJEdlbmRlciA8LSBBbGwuVm9sdW1lcyRHZW5kZXIKVmVudHJpY2xlcy5yZWxhdGl2ZS5wbG90ZGF0YSRBZ2UgPC0gQWxsLlZvbHVtZXMkYEFnZSAoeWVhcnMpYAoKVmVudHJpY2xlcy5yZWxhdGl2ZS5wbG90ZGF0YSRHZW5kZXIgPC0gZmFjdG9yKFZlbnRyaWNsZXMucmVsYXRpdmUucGxvdGRhdGEkR2VuZGVyLCBsZXZlbHMgPSBjKCJmIiwgIm0iKSwgYygiZiIsICJtIikpClZlbnRyaWNsZXMucmVsYXRpdmUucGxvdGRhdGEkYW5hdG9taWNhbC5zdHJ1Y3R1cmUgPC0gZmFjdG9yKFZlbnRyaWNsZXMucmVsYXRpdmUucGxvdGRhdGEkYW5hdG9taWNhbC5zdHJ1Y3R1cmUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gcmV2KGMobmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLnRlbXBvcmFyeSkpLCByZXYoYyhuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMuZGVmaW5pdGl2ZSkpKQoKVmVudHJpY2xlcy5yZWxhdGl2ZTEucGxvdCA8LSAgZ2dwbG90KFZlbnRyaWNsZXMucmVsYXRpdmUucGxvdGRhdGEsIGFlcyh4PWFuYXRvbWljYWwuc3RydWN0dXJlLCB5ID0gcmVsYXRpdmUudm9sdW1lKSkgICsKICBzdGF0X3N1bW1hcnkoYWxwaGEgPSAwLjMsIGZ1biA9IG1lYW4sIGdlb20gPSAiYmFyIiwgd2lkdGggPSAwLjMsIGZpbGwgPSAiZ3JheTUwIikgKyAKICBnZW9tX2JveHBsb3QoYWVzKGZpbGwgPSBHZW5kZXIpLCBhbHBoYSA9IDAuNSwgd2lkdGggPSAwLjQsIHNpemUgPSAwLjIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjYpLCAKICAgICAgICAgICAgICAgb3V0bGllci5zaGFwZSA9IE5BLCBjb2xvciA9ICJncmF5MzAiKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9xdWFzaXJhbmRvbShhZXMoY29sb3IgPSBBZ2UpLCBzaXplID0gMC43LCBhbHBoYSA9IDAuOCwgc2hhcGUgPSAxNiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgc2NhbGVfY29sb3JfY29udGludW91cyhsb3cgPSAic3RlZWxibHVlMSIsIGhpZ2ggPSAicmVkNCIpICsKICB4bGFiKCIiKSArIHlsYWIoIlJlbGF0aXZlIHZvbHVtZSAoaW4gJSkiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBjb29yZF9mbGlwKCkgKwogIGdndGl0bGUoIlZFTlRSSUNVTEFSIFNZU1RFTSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKClZlbnRyaWNsZXMucmVsYXRpdmUxLnBsb3QKZ2dzYXZlKCJWZW50cmljbGVzLnJlbGF0aXZlMS5wbG90LnBkZiIsIHBsb3QgPSBWZW50cmljbGVzLnJlbGF0aXZlMS5wbG90LCB3aWR0aCA9IDEyLCBoZWlnaHQgPSA1LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKCmBgYAoKYGBge3IgVGhlIFZlbnRyaWN1bGFyIFN5c3RlbTogUmVsYXRpdmUgVm9sdW1lcyAxIGFuZCBBZ2UgUGxvdH0KClZlbnRyaWNsZXMucmVsYXRpdmUkR2VuZGVyIDwtIEFsbC5Wb2x1bWVzJEdlbmRlcgpWZW50cmljbGVzLnJlbGF0aXZlJEFnZSA8LSBBbGwuVm9sdW1lcyRgQWdlICh5ZWFycylgClZlbnRyaWNsZXMucmVsYXRpdmUkVG90YWwudmVudHJpY3VsYXIgPC0gVG90YWwudmVudHJpY3VsYXIudm9sdW1lLnJlbGF0aXZlCgpSZWxhdGl2ZS5Ub3RhbC52ZW50cmljdWxhci5BZ2UucGxvdCA8LSAgZ2dwbG90KFZlbnRyaWNsZXMucmVsYXRpdmUsIGFlcyh5PVRvdGFsLnZlbnRyaWN1bGFyLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDguMiwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSB0b3RhbCB2ZW50cmljdWxhciBzeXN0ZW0gKEUpIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5Ub3RhbC52ZW50cmljdWxhci5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLlRvdGFsLnZlbnRyaWN1bGFyLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBSZWxhdGl2ZS5Ub3RhbC52ZW50cmljdWxhci5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkxWLnRvdGFsLkFnZS5wbG90IDwtICBnZ3Bsb3QoVmVudHJpY2xlcy5yZWxhdGl2ZSwgYWVzKHk9TFYudG90YWwsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gNy4yLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIGxhdGVyYWwgdmVudHJpY2xlcyAoRSkiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkxWLnRvdGFsLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuTFYudG90YWwuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkxWLnRvdGFsLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuTFYuZnJvbnRhbC5ob3JuLkFnZS5wbG90IDwtICBnZ3Bsb3QoVmVudHJpY2xlcy5yZWxhdGl2ZSwgYWVzKHk9TFYuZnJvbnRhbC5ob3JuLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEuOSwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBmcm9udGFsIGhvcm4gKEUpIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5MVi5mcm9udGFsLmhvcm4uQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5MVi5mcm9udGFsLmhvcm4uQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkxWLmZyb250YWwuaG9ybi5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLkxWLmJvZHkuQWdlLnBsb3QgPC0gIGdncGxvdChWZW50cmljbGVzLnJlbGF0aXZlLCBhZXMoeT1MVi5ib2R5LCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEuOSwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBib2R5IChFKSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuTFYuYm9keS5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkxWLmJvZHkuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkxWLmJvZHkuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5MVi5hdHJpdW0uQWdlLnBsb3QgPC0gIGdncGxvdChWZW50cmljbGVzLnJlbGF0aXZlLCBhZXMoeT1MVi5hdHJpdW0sIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMi40LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIGF0cml1bSAoRSkiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLkxWLmF0cml1bS5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkxWLmF0cml1bS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuTFYuYXRyaXVtLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuTFYub2NjaXBpdGFsLmhvcm4uQWdlLnBsb3QgPC0gIGdncGxvdChWZW50cmljbGVzLnJlbGF0aXZlLCBhZXMoeT1MVi5vY2NpcGl0YWwuaG9ybiwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAwLjM3LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIG9jY2lwaXRhbCBob3JuIChFKSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuTFYub2NjaXBpdGFsLmhvcm4uQWdlLnBsb3QKZ2dzYXZlKCJSZWxhdGl2ZS5MVi5vY2NpcGl0YWwuaG9ybi5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuTFYub2NjaXBpdGFsLmhvcm4uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpSZWxhdGl2ZS5MVi50ZW1wb3JhbC5ob3JuLkFnZS5wbG90IDwtICBnZ3Bsb3QoVmVudHJpY2xlcy5yZWxhdGl2ZSwgYWVzKHk9TFYudGVtcG9yYWwuaG9ybiwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAwLjI4LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIHRlbXBvcmFsIGhvcm4gKEUpIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpSZWxhdGl2ZS5MVi50ZW1wb3JhbC5ob3JuLkFnZS5wbG90Cmdnc2F2ZSgiUmVsYXRpdmUuTFYudGVtcG9yYWwuaG9ybi5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuTFYudGVtcG9yYWwuaG9ybi5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClJlbGF0aXZlLlRoaXJkLnZlbnRyaWNsZS5BZ2UucGxvdCA8LSAgZ2dwbG90KFZlbnRyaWNsZXMucmVsYXRpdmUsIGFlcyh5PVRoaXJkLnZlbnRyaWNsZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSAwLjQ3LCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIHRoaXJkIHZlbnRyaWNsZSAoRSkiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClJlbGF0aXZlLlRoaXJkLnZlbnRyaWNsZS5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLlRoaXJkLnZlbnRyaWNsZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gUmVsYXRpdmUuVGhpcmQudmVudHJpY2xlLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKUmVsYXRpdmUuRm91cnRoLnZlbnRyaWNsZS50b3RhbC5BZ2UucGxvdCA8LSAgZ2dwbG90KFZlbnRyaWNsZXMucmVsYXRpdmUsIGFlcyh5PUZvdXJ0aC52ZW50cmljbGUudG90YWwsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMC4yNiwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBmb3VydGggdmVudHJpY2xlIChFKSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKUmVsYXRpdmUuRm91cnRoLnZlbnRyaWNsZS50b3RhbC5BZ2UucGxvdApnZ3NhdmUoIlJlbGF0aXZlLkZvdXJ0aC52ZW50cmljbGUudG90YWwuQWdlLnBsb3QucGRmIiwgcGxvdCA9IFJlbGF0aXZlLkZvdXJ0aC52ZW50cmljbGUudG90YWwuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpgYGAKCiMjIFJlbGF0aXZlIFZvbHVtZXMgMjogTm9ybWFsaXplZCB0byBUb3RhbCBWZW50cmljdWxhciBWb2x1bWUKCmBgYHtyIFRoZSBWZW50cmljdWxhciBTeXN0ZW06IFJlbGF0aXZlIFZvbHVtZXMgMn0KCiNWZW50cmljbGVzLmFic29sdXRlIDwtIHNlbGVjdChWZW50cmljbGVzLmFic29sdXRlLCAtIGMoR2VuZGVyKSkKI1RvdGFsLnZlbnRyaWN1bGFyLnZvbHVtZS5yZWxhdGl2ZSA8LSAoMTAwICogKFZlbnRyaWNsZXMuYWJzb2x1dGUkVG90YWwudm9sdW1lLnZlbnRyaWNsZXMvQWxsLlZvbHVtZXMkYFRvdGFsIGVuY2VwaGFsaWMgdm9sdW1lICh3aXRob3V0IHZlbnRyaWNsZXMpYCkpCgpWZW50cmljbGVzLnJlbGF0aXZlLlYgPC0gKDEwMCAqIChWZW50cmljbGVzLmFic29sdXRlWywgLTFdL1RvdGFsLnZvbHVtZS52ZW50cmljbGVzKSkKClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuViA8LSBWZW50cmljbGVzLnJlbGF0aXZlLlYKClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuViRHZW5kZXIgPC0gQWxsLlZvbHVtZXMkR2VuZGVyCgpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuMSA8LSBDcmVhdGVUYWJsZU9uZSgKICB2YXJzID0gYygiTFYudG90YWwiLAoiTFYuZnJvbnRhbC5ob3JuIiwKIkxWLmJvZHkiLCAKIkxWLmF0cml1bSIsIAoiTFYub2NjaXBpdGFsLmhvcm4iLCAKIkxWLnRlbXBvcmFsLmhvcm4iLCAKIlRoaXJkLnZlbnRyaWNsZSIsIAoiRm91cnRoLnZlbnRyaWNsZS50b3RhbCIsCiJBcGV4IiwKIkxhdGVyYWwucmVjZXNzIiwKIk9iZXgiLAoiRmFzdGlnaXVtIiksCiAgZGF0YSA9IFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVikKClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi5zdHJhdGlmaWVkLmdlbmRlciA8LSBDcmVhdGVUYWJsZU9uZSgKICB2YXJzID0gYygiTFYudG90YWwiLAoiTFYuZnJvbnRhbC5ob3JuIiwKIkxWLmJvZHkiLCAKIkxWLmF0cml1bSIsIAoiTFYub2NjaXBpdGFsLmhvcm4iLCAKIkxWLnRlbXBvcmFsLmhvcm4iLCAKIlRoaXJkLnZlbnRyaWNsZSIsIAoiRm91cnRoLnZlbnRyaWNsZS50b3RhbCIsCiJBcGV4IiwKIkxhdGVyYWwucmVjZXNzIiwKIk9iZXgiLAoiRmFzdGlnaXVtIiksCnN0cmF0YSA9IGMoIkdlbmRlciIpLAogIGRhdGEgPSBUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYpCgpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuMSA8LSBwcmludChUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuMSwgY29udERpZ2l0cyA9IDEwKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIgPC0gcHJpbnQoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLCBjb250RGlnaXRzID0gMTApCgpgYGAKCmBgYHtyIFRoZSBWZW50cmljdWxhciBTeXN0ZW06IFJlbGF0aXZlIFZvbHVtZXMgMiByZWxhdGl2ZSBzdGFuZGFyZCBkZXZpYXRpb25zfQoKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLjEuUlNEIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLjEpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi4xLlJTRCA8LSBkYXRhLmZyYW1lKGRvLmNhbGwoJ3JiaW5kJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryc3BsaXQoYXMuY2hhcmFjdGVyKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi4xLlJTRFstMSxdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICgnLGZpeGVkPVRSVUUpKSkKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLjEuUlNEIDwtIGRhdGEuZnJhbWUoY2JpbmQoc3RyX3JlcGxhY2VfYWxsKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi4xLlJTRCRYMSwgIlsgXSIsICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3JlcGxhY2VfYWxsKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi4xLlJTRCRYMiwgIlspXSIsICIiKSkpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi4xLlJTRCRYMSA8LSBhcy5jaGFyYWN0ZXIoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLjEuUlNEJFgxKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuMS5SU0QkWDIgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi4xLlJTRCRYMikKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLjEuUlNEIDwtIGFzLmRhdGEuZnJhbWUoc2FwcGx5KFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi4xLlJTRCwgYXMubnVtZXJpYykpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi4xLlJTRCA8LSBhcy5kYXRhLmZyYW1lKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi4xLlJTRCRYMi9UYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuMS5SU0QkWDEpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi4xLlJTRCA8LSByb3VuZChUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuMS5SU0QgKiAxMDAsIDEpCgoKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRCA8LSBhcy5kYXRhLmZyYW1lKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi5zdHJhdGlmaWVkLmdlbmRlcikKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRCA8LSBzZWxlY3QoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRCwgLSBjKHAsIHRlc3QpKQoKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gZGF0YS5mcmFtZShkby5jYWxsKCdyYmluZCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnNwbGl0KGFzLmNoYXJhY3RlcihUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNEWy0xLCAiZiJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICgnLGZpeGVkPVRSVUUpKSkKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUgPC0gZGF0YS5mcmFtZShjYmluZChzdHJfcmVwbGFjZV9hbGwoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEsICJbIF0iLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlX2FsbChUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMiwgIlspXSIsICIiKSkpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgxIDwtIGFzLmNoYXJhY3RlcihUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSRYMSkKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlJFgyKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSA8LSBhcy5kYXRhLmZyYW1lKHNhcHBseShUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSwgYXMubnVtZXJpYykpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlIDwtIGFzLmRhdGEuZnJhbWUoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDIvVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5mZW1hbGUkWDEpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlIDwtIHJvdW5kKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi5zdHJhdGlmaWVkLmdlbmRlci5SU0QuZmVtYWxlICogMTAwLCAxKQoKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlIDwtIGRhdGEuZnJhbWUoZG8uY2FsbCgncmJpbmQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzcGxpdChhcy5jaGFyYWN0ZXIoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRFstMSwgIm0iXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAoJyxmaXhlZD1UUlVFKSkpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSA8LSBkYXRhLmZyYW1lKGNiaW5kKHN0cl9yZXBsYWNlX2FsbChUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEsICJbIF0iLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlX2FsbChUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIsICJbKV0iLCAiIikpKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDEgPC0gYXMuY2hhcmFjdGVyKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSRYMSkKVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgyIDwtIGFzLmNoYXJhY3RlcihUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIpClRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi5zdHJhdGlmaWVkLmdlbmRlci5SU0QubWFsZSA8LSBhcy5kYXRhLmZyYW1lKHNhcHBseShUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUsIGFzLm51bWVyaWMpKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gYXMuZGF0YS5mcmFtZShUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUkWDIvVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlJFgxKQpUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELm1hbGUgPC0gcm91bmQoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlICogMTAwLCAxKQoKYGBgCgpgYGB7ciBUaGUgVmVudHJpY3VsYXIgU3lzdGVtOiBSZWxhdGl2ZSBWb2x1bWVzIDIgVGFibGVzfQoKa2FibGUoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLjEpCmthYmxlKFRhYmxlLlZlbnRyaWNsZXMucmVsYXRpdmUuVi4xLlJTRCkKa2FibGUoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyKQprYWJsZShUYWJsZS5WZW50cmljbGVzLnJlbGF0aXZlLlYuc3RyYXRpZmllZC5nZW5kZXIuUlNELmZlbWFsZSkKa2FibGUoVGFibGUuVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnN0cmF0aWZpZWQuZ2VuZGVyLlJTRC5tYWxlKQoKYGBgCgpgYGB7ciBUaGUgVmVudHJpY3VsYXIgU3lzdGVtOiBSZWxhdGl2ZSBWb2x1bWVzIDIgYW5kIEdlbmRlciBQbG90fQoKbmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLnRlbXBvcmFyeSA8LSBjKCJMVi50b3RhbCIsCiJMVi5mcm9udGFsLmhvcm4iLAoiTFYuYm9keSIsIAoiTFYuYXRyaXVtIiwgCiJMVi5vY2NpcGl0YWwuaG9ybiIsIAoiTFYudGVtcG9yYWwuaG9ybiIsIAoiVGhpcmQudmVudHJpY2xlIiwgCiJGb3VydGgudmVudHJpY2xlLnRvdGFsIiwKIkFwZXgiLAoiTGF0ZXJhbC5yZWNlc3MiLAoiT2JleCIsCiJGYXN0aWdpdW0iKQoKbmFtZXMuYW5hdG9taWNhbC5zdHJ1Y3R1cmVzLmRlZmluaXRpdmUgPC0gYygiTFYtIFRvdGFsIiwKIkxWIC0gRnJvbnRhbCBob3JuIiwKIkxWIC0gQm9keSIsIAoiTFYgLSBBdHJpdW0iLCAKIkxWIC0gT2NjaXBpdGFsIGhvcm4iLCAKIkxWIC0gVGVtcG9yYWwgaG9ybiIsIAoiVGhpcmQgdmVudHJpY2xlIiwgCiJGb3VydGggdmVudHJpY2xlIC0gVG90YWwiLAoiQXBleCIsCiJMYXRlcmFsIHJlY2VzcyIsCiJPYmV4IiwKIkZhc3RpZ2l1bSIpCgpWZW50cmljbGVzLnJlbGF0aXZlLlYucGxvdGRhdGEgPC0gZ2F0aGVyKFZlbnRyaWNsZXMucmVsYXRpdmUuViwgImFuYXRvbWljYWwuc3RydWN0dXJlIiwgInJlbGF0aXZlLnZvbHVtZSIpClZlbnRyaWNsZXMucmVsYXRpdmUuVi5wbG90ZGF0YSRHZW5kZXIgPC0gQWxsLlZvbHVtZXMkR2VuZGVyClZlbnRyaWNsZXMucmVsYXRpdmUuVi5wbG90ZGF0YSRBZ2UgPC0gQWxsLlZvbHVtZXMkYEFnZSAoeWVhcnMpYAoKVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnBsb3RkYXRhJEdlbmRlciA8LSBmYWN0b3IoVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnBsb3RkYXRhJEdlbmRlciwgbGV2ZWxzID0gYygiZiIsICJtIiksIGMoImYiLCAibSIpKQpWZW50cmljbGVzLnJlbGF0aXZlLlYucGxvdGRhdGEkYW5hdG9taWNhbC5zdHJ1Y3R1cmUgPC0gZmFjdG9yKFZlbnRyaWNsZXMucmVsYXRpdmUuVi5wbG90ZGF0YSRhbmF0b21pY2FsLnN0cnVjdHVyZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSByZXYoYyhuYW1lcy5hbmF0b21pY2FsLnN0cnVjdHVyZXMudGVtcG9yYXJ5KSksIHJldihjKG5hbWVzLmFuYXRvbWljYWwuc3RydWN0dXJlcy5kZWZpbml0aXZlKSkpCgpWZW50cmljbGVzLnJlbGF0aXZlMi5wbG90IDwtICBnZ3Bsb3QoVmVudHJpY2xlcy5yZWxhdGl2ZS5WLnBsb3RkYXRhLCBhZXMoeD1hbmF0b21pY2FsLnN0cnVjdHVyZSwgeSA9IHJlbGF0aXZlLnZvbHVtZSkpICArCiAgc3RhdF9zdW1tYXJ5KGFscGhhID0gMC4zLCBmdW4gPSBtZWFuLCBnZW9tID0gImJhciIsIHdpZHRoID0gMC4zLCBmaWxsID0gImdyYXk1MCIpICsgCiAgZ2VvbV9ib3hwbG90KGFlcyhmaWxsID0gR2VuZGVyKSwgYWxwaGEgPSAwLjUsIHdpZHRoID0gMC40LCBzaXplID0gMC4yLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC42KSwgCiAgICAgICAgICAgICAgIG91dGxpZXIuc2hhcGUgPSBOQSwgY29sb3IgPSAiZ3JheTMwIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fcXVhc2lyYW5kb20oYWVzKGNvbG9yID0gQWdlKSwgc2l6ZSA9IDAuNywgYWxwaGEgPSAwLjgsIHNoYXBlID0gMTYsIHBvc2l0aW9uID0gImRvZGdlIikgKwogIHNjYWxlX2NvbG9yX2NvbnRpbnVvdXMobG93ID0gInN0ZWVsYmx1ZTEiLCBoaWdoID0gInJlZDQiKSArCiAgeGxhYigiIikgKyB5bGFiKCJSZWxhdGl2ZSB2b2x1bWUgKGluICUpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgY29vcmRfZmxpcCgpICsKICBnZ3RpdGxlKCJWRU5UUklDVUxBUiBTWVNURU0iKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCgpWZW50cmljbGVzLnJlbGF0aXZlMi5wbG90Cmdnc2F2ZSgiVmVudHJpY2xlcy5yZWxhdGl2ZTIucGxvdC5wZGYiLCBwbG90ID0gVmVudHJpY2xlcy5yZWxhdGl2ZTIucGxvdCwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gNSwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpgYGAKCmBgYHtyIFRoZSBWZW50cmljdWxhciBTeXN0ZW06IFJlbGF0aXZlIFZvbHVtZXMgMiBhbmQgQWdlIFBsb3R9CgpWZW50cmljbGVzLnJlbGF0aXZlLlYkR2VuZGVyIDwtIEFsbC5Wb2x1bWVzJEdlbmRlcgpWZW50cmljbGVzLnJlbGF0aXZlLlYkQWdlIDwtIEFsbC5Wb2x1bWVzJGBBZ2UgKHllYXJzKWAKClYuUmVsYXRpdmUuTFYudG90YWwuQWdlLnBsb3QgPC0gIGdncGxvdChWZW50cmljbGVzLnJlbGF0aXZlLlYsIGFlcyh5PUxWLnRvdGFsLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDEwMiwgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBsYXRlcmFsIHZlbnRyaWNsZXMgKFYpIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpWLlJlbGF0aXZlLkxWLnRvdGFsLkFnZS5wbG90Cmdnc2F2ZSgiVi5SZWxhdGl2ZS5MVi50b3RhbC5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVi5SZWxhdGl2ZS5MVi50b3RhbC5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClYuUmVsYXRpdmUuTFYuZnJvbnRhbC5ob3JuLkFnZS5wbG90IDwtICBnZ3Bsb3QoVmVudHJpY2xlcy5yZWxhdGl2ZS5WLCBhZXMoeT1MVi5mcm9udGFsLmhvcm4sIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMzksIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgZnJvbnRhbCBob3JuIChWKSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVi5SZWxhdGl2ZS5MVi5mcm9udGFsLmhvcm4uQWdlLnBsb3QKZ2dzYXZlKCJWLlJlbGF0aXZlLkxWLmZyb250YWwuaG9ybi5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVi5SZWxhdGl2ZS5MVi5mcm9udGFsLmhvcm4uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpWLlJlbGF0aXZlLkxWLmJvZHkuQWdlLnBsb3QgPC0gIGdncGxvdChWZW50cmljbGVzLnJlbGF0aXZlLlYsIGFlcyh5PUxWLmJvZHksIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMzMsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgYm9keSAoVikiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClYuUmVsYXRpdmUuTFYuYm9keS5BZ2UucGxvdApnZ3NhdmUoIlYuUmVsYXRpdmUuTFYuYm9keS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVi5SZWxhdGl2ZS5MVi5ib2R5LkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVi5SZWxhdGl2ZS5MVi5hdHJpdW0uQWdlLnBsb3QgPC0gIGdncGxvdChWZW50cmljbGVzLnJlbGF0aXZlLlYsIGFlcyh5PUxWLmF0cml1bSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA0MywgbGFiZWwueCA9IDcwLCBjb2xvciA9ICJkb2RnZXJibHVlNCIpICsKICB5bGFiKCJSZWxhdGl2ZSBWb2x1bWUgKGluICUpIikgKyB4bGFiKCJBZ2UgKGluIHllYXJzKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGdndGl0bGUoIlJFTEFUSVZFIFZPTFVNRSBhdHJpdW0gKFYpIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpWLlJlbGF0aXZlLkxWLmF0cml1bS5BZ2UucGxvdApnZ3NhdmUoIlYuUmVsYXRpdmUuTFYuYXRyaXVtLkFnZS5wbG90LnBkZiIsIHBsb3QgPSBWLlJlbGF0aXZlLkxWLmF0cml1bS5BZ2UucGxvdCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIGRwaSA9IDYwMCkKClYuUmVsYXRpdmUuTFYub2NjaXBpdGFsLmhvcm4uQWdlLnBsb3QgPC0gIGdncGxvdChWZW50cmljbGVzLnJlbGF0aXZlLlYsIGFlcyh5PUxWLm9jY2lwaXRhbC5ob3JuLCB4ID0gQWdlKSkgICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IEdlbmRlciksIHNpemUgPSAxLjUsIGFscGhhID0gMSwgc2hhcGUgPSAxNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJjaGFydHJldXNlNCIsICJvcmFuZ2VyZWQyIikpICsKICBnZW9tX3Ntb290aChtZXRob2Q9J2xtJywgYWxwaGEgPSAwLjIsIGNvbG91ciA9ICJkb2RnZXJibHVlNCIsIHNpemUgPSAwLjgsIHdlaWdodCA9IDAuMykgKwogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9IEdlbmRlciksIG1ldGhvZD0nbG0nLCBzZSA9IEYsIGFscGhhID0gMC4yLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIHdlaWdodCA9IDAuMykgKwogIHN0YXRfY29yKG1ldGhvZCA9ICJwZWFyc29uIiwgbGFiZWwueSA9IDExLCBsYWJlbC54ID0gNzAsIGNvbG9yID0gImRvZGdlcmJsdWU0IikgKwogIHlsYWIoIlJlbGF0aXZlIFZvbHVtZSAoaW4gJSkiKSArIHhsYWIoIkFnZSAoaW4geWVhcnMpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ2d0aXRsZSgiUkVMQVRJVkUgVk9MVU1FIG9jY2lwaXRhbCBob3JuIChWKSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVi5SZWxhdGl2ZS5MVi5vY2NpcGl0YWwuaG9ybi5BZ2UucGxvdApnZ3NhdmUoIlYuUmVsYXRpdmUuTFYub2NjaXBpdGFsLmhvcm4uQWdlLnBsb3QucGRmIiwgcGxvdCA9IFYuUmVsYXRpdmUuTFYub2NjaXBpdGFsLmhvcm4uQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpWLlJlbGF0aXZlLkxWLnRlbXBvcmFsLmhvcm4uQWdlLnBsb3QgPC0gIGdncGxvdChWZW50cmljbGVzLnJlbGF0aXZlLlYsIGFlcyh5PUxWLnRlbXBvcmFsLmhvcm4sIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMTYsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgdGVtcG9yYWwgaG9ybiAoVikiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClYuUmVsYXRpdmUuTFYudGVtcG9yYWwuaG9ybi5BZ2UucGxvdApnZ3NhdmUoIlYuUmVsYXRpdmUuTFYudGVtcG9yYWwuaG9ybi5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVi5SZWxhdGl2ZS5MVi50ZW1wb3JhbC5ob3JuLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKVi5SZWxhdGl2ZS5UaGlyZC52ZW50cmljbGUuQWdlLnBsb3QgPC0gIGdncGxvdChWZW50cmljbGVzLnJlbGF0aXZlLlYsIGFlcyh5PVRoaXJkLnZlbnRyaWNsZSwgeCA9IEFnZSkpICArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBHZW5kZXIpLCBzaXplID0gMS41LCBhbHBoYSA9IDEsIHNoYXBlID0gMTYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiY2hhcnRyZXVzZTQiLCAib3JhbmdlcmVkMiIpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScsIGFscGhhID0gMC4yLCBjb2xvdXIgPSAiZG9kZ2VyYmx1ZTQiLCBzaXplID0gMC44LCB3ZWlnaHQgPSAwLjMpICsKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSBHZW5kZXIpLCBtZXRob2Q9J2xtJywgc2UgPSBGLCBhbHBoYSA9IDAuMiwgbGluZXR5cGUgPSAibG9uZ2Rhc2giLCBzaXplID0gMC4zLCB3ZWlnaHQgPSAwLjMpICsKICBzdGF0X2NvcihtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnkgPSA5LjIsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgdGhpcmQgdmVudHJpY2xlIChFKSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKVi5SZWxhdGl2ZS5UaGlyZC52ZW50cmljbGUuQWdlLnBsb3QKZ2dzYXZlKCJWLlJlbGF0aXZlLlRoaXJkLnZlbnRyaWNsZS5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVi5SZWxhdGl2ZS5UaGlyZC52ZW50cmljbGUuQWdlLnBsb3QsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNiwgdW5pdHMgPSAiaW4iLCBkcGkgPSA2MDApCgpWLlJlbGF0aXZlLkZvdXJ0aC52ZW50cmljbGUudG90YWwuQWdlLnBsb3QgPC0gIGdncGxvdChWZW50cmljbGVzLnJlbGF0aXZlLlYsIGFlcyh5PUZvdXJ0aC52ZW50cmljbGUudG90YWwsIHggPSBBZ2UpKSAgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR2VuZGVyKSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAxLCBzaGFwZSA9IDE2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImNoYXJ0cmV1c2U0IiwgIm9yYW5nZXJlZDIiKSkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBhbHBoYSA9IDAuMiwgY29sb3VyID0gImRvZGdlcmJsdWU0Iiwgc2l6ZSA9IDAuOCwgd2VpZ2h0ID0gMC4zKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG9yID0gR2VuZGVyKSwgbWV0aG9kPSdsbScsIHNlID0gRiwgYWxwaGEgPSAwLjIsIGxpbmV0eXBlID0gImxvbmdkYXNoIiwgc2l6ZSA9IDAuMywgd2VpZ2h0ID0gMC4zKSArCiAgc3RhdF9jb3IobWV0aG9kID0gInBlYXJzb24iLCBsYWJlbC55ID0gMTcsIGxhYmVsLnggPSA3MCwgY29sb3IgPSAiZG9kZ2VyYmx1ZTQiKSArCiAgeWxhYigiUmVsYXRpdmUgVm9sdW1lIChpbiAlKSIpICsgeGxhYigiQWdlIChpbiB5ZWFycykiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBnZ3RpdGxlKCJSRUxBVElWRSBWT0xVTUUgZm91cnRoIHZlbnRyaWNsZSAoRSkiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpClYuUmVsYXRpdmUuRm91cnRoLnZlbnRyaWNsZS50b3RhbC5BZ2UucGxvdApnZ3NhdmUoIlYuUmVsYXRpdmUuRm91cnRoLnZlbnRyaWNsZS50b3RhbC5BZ2UucGxvdC5wZGYiLCBwbG90ID0gVi5SZWxhdGl2ZS5Gb3VydGgudmVudHJpY2xlLnRvdGFsLkFnZS5wbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgZHBpID0gNjAwKQoKYGBg