PACKAGES

require("tidyverse")
require("lubridate") #for dates
require("tables")
library(foreign)
require(stargazer)

DATA CLEANING

Data in https://docs.google.com/spreadsheets/d/154tcURPHwgmGcmndhQyEIT_dLzmbA_ZPSAKZTwHyGgw/edit?usp=sharing

Main dataset

Size of the dataset in rows, columns

dim(df) #check size of the dataset rows, columns
[1] 2138  445
#df$ID<-seq.int(nrow(df)) # create an ID for every person

Reorganize the data, cleaning, reorder levels, subsetting, etc

Subsetting the data

Unselect the kappa dataset

#df <- df %>% 
#  filter(`3d_Examination_time_(forst_or_second)` !=2)

#dim(df) #check size of the dataset. 222 observations removed. Original dataset 2904

Fix dates and create a new variable age

#df$`2_Examination_date`<- as.Date(df$`2_Examination_date`, format = "%m/%d/%Y")
#df$`4_Birth_date` <- as.Date(df$`4_Birth_date`, format = "%m/%d/%Y")
#df <- df %>% 
#  mutate(Age = as.integer(difftime(as.Date(`2_Examination_date`), as.Date(`4_Birth_date`),
#                                   unit="weeks"))/52.25)

Fix NA in gender

#df$`1_gender`[is.na(df$`1_gender`)] <- "M"

Select only the age = 12. Verify, must be 2138 update 2163

dim(df)
[1] 1725  444

ANALISIS 27 dic

COMIENZO ANALISIS CON ULTIMO DF

FAS

df$`23Cars_in_family`[df$`23Cars_in_family` == "No"] <- 0
There were 17 warnings (use warnings() to see them)
df$`23Cars_in_family`[df$`23Cars_in_family` == "One"] <- 1
df$`23Cars_in_family`[df$`23Cars_in_family` == "Two or more"] <- 2
df$`24Existance_of_own_room`[df$`24Existance_of_own_room` == "No"] <- 0
df$`24Existance_of_own_room`[df$`24Existance_of_own_room` == "Yes"] <- 1
df$`25Number_of_computers_in_family`[df$`25Number_of_computers_in_family` == "Noone"] <- 0
df$`25Number_of_computers_in_family`[df$`25Number_of_computers_in_family` == "One"] <- 1
df$`25Number_of_computers_in_family`[df$`25Number_of_computers_in_family` == "Two"] <- 2
df$`25Number_of_computers_in_family`[df$`25Number_of_computers_in_family` == "More tham two"] <- 3
df$`27_Frequency_of_travels_in_abroad_in_last_12_months_with_family`[df$`27_Frequency_of_travels_in_abroad_in_last_12_months_with_family` == "Noone" ] <- 0
df$`27_Frequency_of_travels_in_abroad_in_last_12_months_with_family`[df$`27_Frequency_of_travels_in_abroad_in_last_12_months_with_family` == "One time" ] <- 1
df$`27_Frequency_of_travels_in_abroad_in_last_12_months_with_family`[df$`27_Frequency_of_travels_in_abroad_in_last_12_months_with_family` == "Two times" ] <- 2
df$`27_Frequency_of_travels_in_abroad_in_last_12_months_with_family`[df$`27_Frequency_of_travels_in_abroad_in_last_12_months_with_family` == "More than two times" ] <- 3
df$`26_Number_of_bathrooms_at_home`[df$`26_Number_of_bathrooms_at_home` == "Noone"] <- 0
df$`26_Number_of_bathrooms_at_home`[df$`26_Number_of_bathrooms_at_home` == "One"] <- 1
df$`26_Number_of_bathrooms_at_home`[df$`26_Number_of_bathrooms_at_home` == "Two"] <- 2
df$`26_Number_of_bathrooms_at_home`[df$`26_Number_of_bathrooms_at_home` == "More than two"] <- 3
df$`24Existance_of_own_room` <- as.integer(df$`24Existance_of_own_room`)
df$`25Number_of_computers_in_family` <- as.integer(df$`25Number_of_computers_in_family`)
df$`27_Frequency_of_travels_in_abroad_in_last_12_months_with_family` <-  as.integer(df$`27_Frequency_of_travels_in_abroad_in_last_12_months_with_family`)
df$`23Cars_in_family` <-  as.integer(df$`23Cars_in_family`)
df$`26_Number_of_bathrooms_at_home` <- as.integer(df$`26_Number_of_bathrooms_at_home`)
df <- df %>% 
  mutate(FAS = 
           `23Cars_in_family` + 
           `24Existance_of_own_room` + 
           `25Number_of_computers_in_family` + 
           `27_Frequency_of_travels_in_abroad_in_last_12_months_with_family` +
           `26_Number_of_bathrooms_at_home` ) %>%
  mutate(FAS_cat = ifelse( FAS >= 9, "High affluence", 
                    ifelse( FAS <= 4 , "Low affluence", 
                            "Middle affluence")))

df$FAS_cat <- ordered(df$FAS_cat, 
                      levels = c(
                        "High affluence", 
                        "Middle affluence", 
                        "Low affluence"
                      ))

Order factors

Give order to factors

Create new variables for school and region

df <- df %>% 
  rename(RegionsKods = `3a_Region`) %>% 
  rename(SkolasKods = `3b_School`  ) 
Error: Unknown variables: 3a_Region.

subset 2138

# df<- sample_n(df, 2138) # Not use with df_final_dec12_2016.csv
# write.csv(df, "df_final_dec12_2016.csv")

Summary: Dataset = 2904 records Dataset without kappa 2 = 2682 records Dataset only age = 12 = 2138

Dataset clean and ready for analysis

DESCRIPTIVE

EDA

Total children

addmargins(table(df$`1_gender`))
  ggplot(df, aes(`1_gender`)) + geom_bar() + theme_minimal()

Dzimuns Region

Skola Dzimuns

df %>% 
  group_by(SkolaName,  `1_gender`) %>% 
  summarise(n=n()) %>% 
  spread( `1_gender`, n) %>% 
  write.csv(,file = "./tables/SkolaDzimuns.csv")

df %>% 
  group_by(SkolaName,  `1_gender`) %>% 
  summarise(n=n()) %>% 
  spread( `1_gender`, n) %>% 
  ungroup()

Skola Region

df %>% 
  group_by(SkolaName, RegionName) %>% 
  summarise(n=n()) %>% 
  spread(RegionName, n) %>% 
  write.csv(,file = "./tables/SkolaRegion.csv") 

df %>% 
  group_by(SkolaName, RegionName) %>% 
  summarise(n=n()) %>% 
  spread(RegionName, n) %>% 
  ungroup()
tb <- table(df$SkolaName, df$RegionName)
write.table(tb, file = "./tables/Table school and region.csv", sep = ";", row.names = T, col.names = T); rm(tb)

FAS descriptive

All FAS

df %>% 
  group_by(FAS_cat) %>% 
  summarise(n())

df %>% 
  group_by(FAS_cat) %>% 
  summarise(n()) %>% 
  write.csv(,file = "./tables/FAS.csv") 

FAS by gender

df %>% 
  group_by(FAS_cat, `1_gender`) %>% 
  summarise(n=n()) %>% 
  spread(FAS_cat, n)

df %>% 
  group_by(FAS_cat, `1_gender`) %>% 
  summarise(n=n()) %>% 
  spread(FAS_cat, n) %>% 
  write.csv(,file = "./tables/FAS_gender.csv") 
addmargins(table(df$`1_gender`, df$FAS_cat))

FAS by region

df %>% 
  group_by(FAS_cat, `RegionName`) %>% 
  summarise(n=n()) %>% 
  spread(FAS_cat, n)
write.table(addmargins(table(df$RegionName, df$FAS_cat)), "./tables/fas_region.csv")
df %>% 
  group_by(FAS_cat, `2_Live_in`) %>% 
  summarise(n = n()) %>% 
  spread(FAS_cat, n, fill = 0)

df %>% 
  group_by(FAS_cat, `2_Live_in`) %>% 
  summarise(n = n()) %>% 
  spread(FAS_cat, n, fill = 0) %>% 
  write.csv(,file = "./tables/FAS_Live_in.csv") 

FAS por pocket money

df %>% 
  group_by(`FAS_cat` , `22_Average_pocket_money`) %>% 
  summarise(n= n()) %>% 
  spread(`FAS_cat`, n)

df %>% 
  group_by(`FAS_cat` , `22_Average_pocket_money`) %>% 
  summarise(n= n()) %>% 
  spread(`FAS_cat`, n) %>% 
  write.csv(,file = "./tables/FAS_pocketMoney.csv") 

Descriptive for questions

3_Pain_or_other_dental_disorders_in_last_12_months

df %>% 
  group_by(`1_gender`, `3_Pain_or_other_dental_disorders_in_last_12_months`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`3_Pain_or_other_dental_disorders_in_last_12_months`, n, fill=0) 


df %>% 
  group_by(`2_Live_in`, `3_Pain_or_other_dental_disorders_in_last_12_months`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`3_Pain_or_other_dental_disorders_in_last_12_months`, n, fill=0)

df %>% 
  group_by(`RegionName`, `3_Pain_or_other_dental_disorders_in_last_12_months`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`3_Pain_or_other_dental_disorders_in_last_12_months`, n, fill=0)

df %>% 
  group_by(`1_gender`, `3_Pain_or_other_dental_disorders_in_last_12_months`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`3_Pain_or_other_dental_disorders_in_last_12_months`, n, fill=0) %>% 
  write.csv(,file = "./tables/3_Pain_or_in_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `3_Pain_or_other_dental_disorders_in_last_12_months`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`3_Pain_or_other_dental_disorders_in_last_12_months`, n, fill=0) %>% 
  write.csv(,file = "./tables/3_Pain_or_in_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `3_Pain_or_other_dental_disorders_in_last_12_months`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`3_Pain_or_other_dental_disorders_in_last_12_months`, n, fill=0) %>% 
  write.csv(,file = "./tables/3_Pain_or_in_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`3_Pain_or_other_dental_disorders_in_last_12_months`)) # only with gender, since some regions and cities have 0  

4_Frequency_of_dentist_visits_in_last_12_months

df %>% 
  group_by(`1_gender`, `4_Frequency_of_dentist_visits_in_last_12_months`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`4_Frequency_of_dentist_visits_in_last_12_months`, n, fill=0)

df %>% 
  group_by(`2_Live_in`, `4_Frequency_of_dentist_visits_in_last_12_months`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`4_Frequency_of_dentist_visits_in_last_12_months`, n, fill=0)

df %>% 
  group_by(`RegionName`, `4_Frequency_of_dentist_visits_in_last_12_months`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`4_Frequency_of_dentist_visits_in_last_12_months`, n, fill=0)

df %>% 
  group_by(`1_gender`, `4_Frequency_of_dentist_visits_in_last_12_months`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`4_Frequency_of_dentist_visits_in_last_12_months`, n, fill=0) %>% 
  write.csv(,file = "./tables/4_Frequency_of_dentist_visits_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `4_Frequency_of_dentist_visits_in_last_12_months`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`4_Frequency_of_dentist_visits_in_last_12_months`, n, fill=0) %>% 
  write.csv(,file = "./tables/4_Frequency_of_dentist_visitsn_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `4_Frequency_of_dentist_visits_in_last_12_months`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`4_Frequency_of_dentist_visits_in_last_12_months`, n, fill=0) %>% 
  write.csv(,file = "./tables/4_Frequency_of_dentist_visits_in_x_region.csv") 

5_Reason_to_attend_dentist

df %>% 
  group_by(`1_gender`, `5_Reason_to_attend_dentist`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`5_Reason_to_attend_dentist`, n, fill=0)

df %>% 
  group_by(`2_Live_in`, `5_Reason_to_attend_dentist`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`5_Reason_to_attend_dentist`, n, fill=0)

df %>% 
  group_by(`RegionName`, `5_Reason_to_attend_dentist`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`5_Reason_to_attend_dentist`, n, fill=0)

df %>% 
  group_by(`1_gender`, `5_Reason_to_attend_dentist`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`5_Reason_to_attend_dentist`, n, fill=0) %>% 
  write.csv(,file = "./tables/5_Reason_to_attend_dentist_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `5_Reason_to_attend_dentist`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`5_Reason_to_attend_dentist`, n, fill=0) %>% 
  write.csv(,file = "./tables/5_Reason_to_attend_dentist_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `5_Reason_to_attend_dentist`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`5_Reason_to_attend_dentist`, n, fill=0) %>% 
  write.csv(,file = "./tables/5_Reason_to_attend_dentist_in_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`5_Reason_to_attend_dentist`)) # only with gender, since some regions and cities have 0  

6Public_or_privat_dentist

df %>% 
  group_by(`1_gender`, `6Public_or_privat_dentist`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`6Public_or_privat_dentist`, n, fill=0)

df %>% 
  group_by(`2_Live_in`, `6Public_or_privat_dentist`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`6Public_or_privat_dentist`, n, fill=0)

df %>% 
  group_by(`RegionName`, `6Public_or_privat_dentist`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`6Public_or_privat_dentist`, n, fill=0)

df %>% 
  group_by(`1_gender`, `6Public_or_privat_dentist`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`6Public_or_privat_dentist`, n, fill=0) %>% 
  write.csv(,file = "./tables/6Public_or_privat_dentist_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `6Public_or_privat_dentist`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`6Public_or_privat_dentist`, n, fill=0) %>% 
  write.csv(,file = "./tables/6Public_or_privat_dentist_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `6Public_or_privat_dentist`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`6Public_or_privat_dentist`, n, fill=0) %>% 
  write.csv(,file = "./tables/6Public_or_privat_dentist_in_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`6Public_or_privat_dentist`)) # only with gender, since some regions and cities have 0  

7_Frequency_of_dental_hygienist_visits

df %>% 
  group_by(`1_gender`, `7_Frequency_of_dental_hygienist_visits`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`7_Frequency_of_dental_hygienist_visits`, n, fill=0)

df %>% 
  group_by(`2_Live_in`, `7_Frequency_of_dental_hygienist_visits`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`7_Frequency_of_dental_hygienist_visits`, n, fill=0)

df %>% 
  group_by(`RegionName`, `7_Frequency_of_dental_hygienist_visits`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`7_Frequency_of_dental_hygienist_visits`, n, fill=0)

df %>% 
  group_by(`1_gender`, `7_Frequency_of_dental_hygienist_visits`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`7_Frequency_of_dental_hygienist_visits`, n, fill=0) %>% 
  write.csv(,file = "./tables/7_Frequency_of_dental_hygienist_visits_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `7_Frequency_of_dental_hygienist_visits`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`7_Frequency_of_dental_hygienist_visits`, n, fill=0) %>% 
  write.csv(,file = "./tables/7_Frequency_of_dental_hygienist_visits_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `7_Frequency_of_dental_hygienist_visits`) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`7_Frequency_of_dental_hygienist_visits`, n, fill=0) %>% 
  write.csv(,file = "./tables/7_Frequency_of_dental_hygienist_visits_in_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`7_Frequency_of_dental_hygienist_visits`)) # only with gender, since some regions and cities have 0  

8_Frequency_of_toothbrushing

df %>% 
  group_by(`1_gender`, `8_Frequency_of_toothbrushing` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`8_Frequency_of_toothbrushing` , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `8_Frequency_of_toothbrushing` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`8_Frequency_of_toothbrushing` , n, fill=0)

df %>% 
  group_by(`RegionName`, `8_Frequency_of_toothbrushing` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`8_Frequency_of_toothbrushing` , n, fill=0)

df %>% 
  group_by(`1_gender`, `8_Frequency_of_toothbrushing` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`8_Frequency_of_toothbrushing` , n, fill=0) %>% 
  write.csv(,file = "./tables/8_Frequency_of_toothbrushing_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `8_Frequency_of_toothbrushing` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`8_Frequency_of_toothbrushing` , n, fill=0) %>% 
  write.csv(,file = "./tables/8_Frequency_of_toothbrushing_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `8_Frequency_of_toothbrushing` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`8_Frequency_of_toothbrushing` , n, fill=0) %>% 
  write.csv(,file = "./tables/8_Frequency_of_toothbrushing_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`8_Frequency_of_toothbrushing` )) # only with gender, since some regions and cities have 0  

9_Usage_of_toothpaste

df %>% 
  group_by(`1_gender`, `9_Usage_of_toothpaste` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_toothpaste` , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `9_Usage_of_toothpaste` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_toothpaste` , n, fill=0)

df %>% 
  group_by(`RegionName`, `9_Usage_of_toothpaste` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_toothpaste` , n, fill=0)

df %>% 
  group_by(`1_gender`, `9_Usage_of_toothpaste` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_toothpaste` , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_toothpaste_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `9_Usage_of_toothpaste` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_toothpaste` , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_toothpaste_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `9_Usage_of_toothpaste` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_toothpaste` , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_toothpaste_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`9_Usage_of_toothpaste` )) # only with gender, since some regions and cities have 0  

9_Usage_of_toothbrush

df %>% 
  group_by(`1_gender`, `9_Usage_of_toothbrush` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_toothbrush` , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `9_Usage_of_toothbrush` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_toothbrush` , n, fill=0)

df %>% 
  group_by(`RegionName`, `9_Usage_of_toothbrush` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_toothbrush` , n, fill=0)

df %>% 
  group_by(`1_gender`, `9_Usage_of_toothbrush` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_toothbrush` , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_toothbrush_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `9_Usage_of_toothbrush` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_toothbrush` , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_toothbrush_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `9_Usage_of_toothbrush` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_toothbrush` , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_toothbrush_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`9_Usage_of_toothbrush` )) # only with gender, since some regions and cities have 0  

9_Usage_of_dental_floss

df %>% 
  group_by(`1_gender`, `9_Usage_of_dental_floss` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_dental_floss` , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `9_Usage_of_dental_floss` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_dental_floss` , n, fill=0)

df %>% 
  group_by(`RegionName`, `9_Usage_of_dental_floss` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_dental_floss` , n, fill=0)

df %>% 
  group_by(`1_gender`, `9_Usage_of_dental_floss` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_dental_floss` , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_dental_floss_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `9_Usage_of_dental_floss` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_dental_floss` , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_dental_floss`_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `9_Usage_of_dental_floss` ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_dental_floss` , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_dental_floss_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`9_Usage_of_dental_floss` )) # only with gender, since some regions and cities have 0  

9_Usage_of_tooth_picks

df %>% 
  group_by(`1_gender`, `9_Usage_of_tooth_picks`  ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_tooth_picks`  , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `9_Usage_of_tooth_picks`  ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_tooth_picks`  , n, fill=0)

df %>% 
  group_by(`RegionName`, `9_Usage_of_tooth_picks`  ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_tooth_picks`  , n, fill=0)

df %>% 
  group_by(`1_gender`, `9_Usage_of_tooth_picks`  ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_tooth_picks`  , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_tooth_picks_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `9_Usage_of_tooth_picks`  ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_tooth_picks`  , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_tooth_picks_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `9_Usage_of_tooth_picks`  ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_tooth_picks`  , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_tooth_picks_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`9_Usage_of_tooth_picks` )) # only with gender, since some regions and cities have 0  

9_Usage_of_mouth_wash

df %>% 
  group_by(`1_gender`, `9_Usage_of_mouth_wash`  ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_mouth_wash`  , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `9_Usage_of_mouth_wash`  ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_mouth_wash`  , n, fill=0)

df %>% 
  group_by(`RegionName`, `9_Usage_of_mouth_wash`  ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_mouth_wash`  , n, fill=0)

df %>% 
  group_by(`1_gender`, `9_Usage_of_mouth_wash`  ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_mouth_wash`  , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_mouth_wash_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `9_Usage_of_mouth_wash`  ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_mouth_wash`  , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_mouth_wash_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `9_Usage_of_mouth_wash`  ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_mouth_wash`  , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_mouth_wash_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`9_Usage_of_mouth_wash` )) # only with gender, since some regions and cities have 0  

9Usage_of_tounge_cleaner

df %>% 
  group_by(`1_gender`, `9Usage_of_tounge_cleaner`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9Usage_of_tounge_cleaner`   , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `9Usage_of_tounge_cleaner`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9Usage_of_tounge_cleaner`   , n, fill=0)

df %>% 
  group_by(`RegionName`, `9Usage_of_tounge_cleaner`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9Usage_of_tounge_cleaner`   , n, fill=0)

df %>% 
  group_by(`1_gender`, `9Usage_of_tounge_cleaner`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9Usage_of_tounge_cleaner`   , n, fill=0) %>% 
  write.csv(,file = "./tables/9Usage_of_tounge_cleaner_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `9Usage_of_tounge_cleaner`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9Usage_of_tounge_cleaner`   , n, fill=0) %>% 
  write.csv(,file = "./tables/9Usage_of_tounge_cleaner_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `9Usage_of_tounge_cleaner`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9Usage_of_tounge_cleaner`   , n, fill=0) %>% 
  write.csv(,file = "./tables/9Usage_of_tounge_cleaner_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`9Usage_of_tounge_cleaner` )) # only with gender, since some regions and cities have 0  

9_Usage_of_other_hygiene_appliance

df %>% 
  group_by(`1_gender`, `9_Usage_of_other_hygiene_appliance`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_other_hygiene_appliance`   , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `9_Usage_of_other_hygiene_appliance`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_other_hygiene_appliance`   , n, fill=0)

df %>% 
  group_by(`RegionName`, `9_Usage_of_other_hygiene_appliance`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_other_hygiene_appliance`   , n, fill=0)

df %>% 
  group_by(`1_gender`, `9_Usage_of_other_hygiene_appliance`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_other_hygiene_appliance`   , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_other_hygiene_appliance_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `9_Usage_of_other_hygiene_appliance`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_other_hygiene_appliance`   , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_other_hygiene_appliance_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `9_Usage_of_other_hygiene_appliance`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`9_Usage_of_other_hygiene_appliance`   , n, fill=0) %>% 
  write.csv(,file = "./tables/9_Usage_of_other_hygiene_appliance_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`9Usage_of_tounge_cleaner` )) # only with gender, since some regions and cities have 0  

10_Fluoride_in_toothpaste

df %>% 
  group_by(`1_gender`, `10_Fluoride_in_toothpaste`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`10_Fluoride_in_toothpaste`   , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `10_Fluoride_in_toothpaste`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`10_Fluoride_in_toothpaste`   , n, fill=0)

df %>% 
  group_by(`RegionName`, `10_Fluoride_in_toothpaste`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`10_Fluoride_in_toothpaste`   , n, fill=0)

df %>% 
  group_by(`1_gender`, `10_Fluoride_in_toothpaste`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`10_Fluoride_in_toothpaste`   , n, fill=0) %>% 
  write.csv(,file = "./tables/10_Fluoride_in_toothpaste_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `10_Fluoride_in_toothpaste`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`10_Fluoride_in_toothpaste`   , n, fill=0) %>% 
  write.csv(,file = "./tables/10_Fluoride_in_toothpaste_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `10_Fluoride_in_toothpaste`   ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`10_Fluoride_in_toothpaste`   , n, fill=0) %>% 
  write.csv(,file = "./tables/10_Fluoride_in_toothpaste_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`10_Fluoride_in_toothpaste` )) # only with gender, since some regions and cities have 0  

11_Usage_of_fluoride_supplements

df %>% 
  group_by(`1_gender`, `11_Usage_of_fluoride_supplements`    ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`11_Usage_of_fluoride_supplements`    , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `11_Usage_of_fluoride_supplements`    ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`11_Usage_of_fluoride_supplements`    , n, fill=0)

df %>% 
  group_by(`RegionName`, `11_Usage_of_fluoride_supplements`    ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`11_Usage_of_fluoride_supplements`    , n, fill=0)

df %>% 
  group_by(`1_gender`, `11_Usage_of_fluoride_supplements`    ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`11_Usage_of_fluoride_supplements`    , n, fill=0) %>% 
  write.csv(,file = "./tables/11_Usage_of_fluoride_supplements_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `11_Usage_of_fluoride_supplements`    ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`11_Usage_of_fluoride_supplements`    , n, fill=0) %>% 
  write.csv(,file = "./tables/11_Usage_of_fluoride_supplements_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `11_Usage_of_fluoride_supplements`    ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`11_Usage_of_fluoride_supplements`    , n, fill=0) %>% 
  write.csv(,file = "./tables/11_Usage_of_fluoride_supplements_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`11_Usage_of_fluoride_supplements` )) # only with gender, since some regions and cities have 0  

12_Selfevaluated_oral_hygiene_care

df %>% 
  group_by(`1_gender`, `12_Selfevaluated_oral_hygiene_care`    ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`12_Selfevaluated_oral_hygiene_care`    , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `12_Selfevaluated_oral_hygiene_care`    ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`12_Selfevaluated_oral_hygiene_care`    , n, fill=0)

df %>% 
  group_by(`RegionName`, `12_Selfevaluated_oral_hygiene_care`    ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`12_Selfevaluated_oral_hygiene_care`    , n, fill=0)

df %>% 
  group_by(`1_gender`, `12_Selfevaluated_oral_hygiene_care`    ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`12_Selfevaluated_oral_hygiene_care`    , n, fill=0) %>% 
  write.csv(,file = "./tables/12_Selfevaluated_oral_hygiene_care_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `12_Selfevaluated_oral_hygiene_care`    ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`12_Selfevaluated_oral_hygiene_care`    , n, fill=0) %>% 
  write.csv(,file = "./tables/12_Selfevaluated_oral_hygiene_care_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `12_Selfevaluated_oral_hygiene_care`    ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`12_Selfevaluated_oral_hygiene_care`    , n, fill=0) %>% 
  write.csv(,file = "./tables/12_Selfevaluated_oral_hygiene_care_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`11_Usage_of_fluoride_supplements` )) # only with gender, since some regions and cities have 0  

13_Eating_habits_grouped

df %>% 
  group_by(`1_gender`, `13_Eating_habits_grouped`     ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`13_Eating_habits_grouped`     , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `13_Eating_habits_grouped`     ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`13_Eating_habits_grouped`     , n, fill=0)

df %>% 
  group_by(`RegionName`, `13_Eating_habits_grouped`     ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`13_Eating_habits_grouped`     , n, fill=0)

df %>% 
  group_by(`1_gender`, `13_Eating_habits_grouped`     ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`13_Eating_habits_grouped`     , n, fill=0) %>% 
  write.csv(,file = "./tables/13_Eating_habits_grouped_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `13_Eating_habits_grouped`     ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`13_Eating_habits_grouped`     , n, fill=0) %>% 
  write.csv(,file = "./tables/13_Eating_habits_grouped_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `13_Eating_habits_grouped`     ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`13_Eating_habits_grouped`     , n, fill=0) %>% 
  write.csv(,file = "./tables/13_Eating_habits_grouped_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`13_Eating_habits_grouped` )) # only with gender, since some regions and cities have 0  

14_Sweet_yogurt_weekly

df %>% 
  group_by(`1_gender`, `14_Sweet_yogurt_weekly`     ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_yogurt_weekly`     , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Sweet_yogurt_weekly`     ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_yogurt_weekly`     , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Sweet_yogurt_weekly`     ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_yogurt_weekly`     , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Sweet_yogurt_weekly`     ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_yogurt_weekly`     , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sweet_yogurt_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Sweet_yogurt_weekly`     ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_yogurt_weekly`     , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sweet_yogurt_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Sweet_yogurt_weekly`     ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_yogurt_weekly`     , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sweet_yogurt_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Sweet_yogurt_weekly` )) # only with gender, since some regions and cities have 0  

14_Sweet_milk_weekly

df %>% 
  group_by(`1_gender`, `14_Sweet_milk_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_milk_weekly`       , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Sweet_milk_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_milk_weekly`       , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Sweet_milk_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_milk_weekly`       , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Sweet_milk_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_milk_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sweet_milk_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Sweet_milk_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_milk_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sweet_milk_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Sweet_milk_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_milk_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sweet_milk_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Sweet_milk_weekly` )) # only with gender, since some regions and cities have 0  

14_Sweet_creams_weekly

df %>% 
  group_by(`1_gender`, `14_Sweet_creams_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_creams_weekly`       , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Sweet_creams_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_creams_weekly`       , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Sweet_creams_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_creams_weekly`       , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Sweet_creams_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_creams_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sweet_creams_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Sweet_creams_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_creams_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sweet_creams_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Sweet_creams_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_creams_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sweet_creams_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Sweet_creams_weekly` )) # only with gender, since some regions and cities have 0  

14_Karums_weekly

df %>% 
  group_by(`1_gender`, `14_Karums_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Karums_weekly`        , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Karums_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Karums_weekly`        , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Karums_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Karums_weekly`        , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Karums_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Karums_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Karums_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Karums_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Karums_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Karums_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Karums_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Karums_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Karums_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Karums_weekly` )) # only with gender, since some regions and cities have 0  

14_Bread_weekly

df %>% 
  group_by(`1_gender`, `14_Bread_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Bread_weekly`        , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Bread_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Bread_weekly`        , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Bread_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Bread_weekly`        , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Bread_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Bread_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Bread_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Bread_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Bread_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Bread_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Bread_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Bread_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Bread_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Bread_weekly` )) # only with gender, since some regions and cities have 0  

14_Cornflakes_not_sweetened_weekly

df %>% 
  group_by(`1_gender`, `14_Cornflakes_not_sweetened_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Cornflakes_not_sweetened_weekly`        , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Cornflakes_not_sweetened_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Cornflakes_not_sweetened_weekly`        , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Cornflakes_not_sweetened_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Cornflakes_not_sweetened_weekly`        , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Cornflakes_not_sweetened_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Cornflakes_not_sweetened_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Cornflakes_not_sweetened_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Cornflakes_not_sweetened_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Cornflakes_not_sweetened_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Cornflakes_not_sweetened_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Cornflakes_not_sweetened_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Cornflakes_not_sweetened_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Cornflakes_not_sweetened_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Cornflakes_not_sweetened_weekly` )) # only with gender, since some regions and cities have 0  

14_Canned_fruits_weekly

df %>% 
  group_by(`1_gender`, `14_Canned_fruits_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Canned_fruits_weekly`        , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Canned_fruits_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Canned_fruits_weekly`        , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Canned_fruits_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Canned_fruits_weekly`        , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Canned_fruits_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Canned_fruits_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Canned_fruits_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Canned_fruits_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Canned_fruits_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Canned_fruits_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Canned_fruits_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Canned_fruits_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Canned_fruits_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Canned_fruits_weekly` )) # only with gender, since some regions and cities have 0  

14_Dried_fruits_weekly

df %>% 
  group_by(`1_gender`, `14_Dried_fruits_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Dried_fruits_weekly`        , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Dried_fruits_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Dried_fruits_weekly`        , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Dried_fruits_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Dried_fruits_weekly`        , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Dried_fruits_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Dried_fruits_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Dried_fruits_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Dried_fruits_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Dried_fruits_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Dried_fruits_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Dried_fruits_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Dried_fruits_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Dried_fruits_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Dried_fruits_weekly` )) # only with gender, since some regions and cities have 0  

14_Juice_or_soft_drinks_weekly

df %>% 
  group_by(`1_gender`, `14_Juice_or_soft_drinks_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Juice_or_soft_drinks_weekly`        , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Juice_or_soft_drinks_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Juice_or_soft_drinks_weekly`        , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Juice_or_soft_drinks_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Juice_or_soft_drinks_weekly`        , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Juice_or_soft_drinks_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Juice_or_soft_drinks_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Juice_or_soft_drinks_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Juice_or_soft_drinks_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Juice_or_soft_drinks_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Juice_or_soft_drinks_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Juice_or_soft_drinks_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Juice_or_soft_drinks_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Juice_or_soft_drinks_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Juice_or_soft_drinks_weekly` )) # only with gender, since some regions and cities have 0  

14_Tee_cacao_or_coffee_with_sugar_weekly

df %>% 
  group_by(`1_gender`, `14_Tee_cacao_or_coffee_with_sugar_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Tee_cacao_or_coffee_with_sugar_weekly`        , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Tee_cacao_or_coffee_with_sugar_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Tee_cacao_or_coffee_with_sugar_weekly`        , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Tee_cacao_or_coffee_with_sugar_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Tee_cacao_or_coffee_with_sugar_weekly`        , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Tee_cacao_or_coffee_with_sugar_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Tee_cacao_or_coffee_with_sugar_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Tee_cacao_or_coffee_with_sugar_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Tee_cacao_or_coffee_with_sugar_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Tee_cacao_or_coffee_with_sugar_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Tee_cacao_or_coffee_with_sugar_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Tee_cacao_or_coffee_with_sugar_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Tee_cacao_or_coffee_with_sugar_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Tee_cacao_or_coffee_with_sugar_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Tee_cacao_or_coffee_with_sugar_weekly` ))  

14_Marmelade_honey_syrup_or_other_sweet_souce_weekly

df %>% 
  group_by(`1_gender`, `14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`        , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`        , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`        , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Marmelade_honey_syrup_or_other_sweet_souce_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Marmelade_honey_syrup_or_other_sweet_souce_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Marmelade_honey_syrup_or_other_sweet_souce_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Marmelade_honey_syrup_or_other_sweet_souce_weekly` ))  

14_Ice_cream_weekly

df %>% 
  group_by(`1_gender`, `14_Ice_cream_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Ice_cream_weekly`        , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Ice_cream_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Ice_cream_weekly`        , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Ice_cream_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Ice_cream_weekly`        , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Ice_cream_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Ice_cream_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Ice_cream_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Ice_cream_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Ice_cream_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Ice_cream_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Ice_cream_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Ice_cream_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Ice_cream_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Ice_cream_weekly` ))  

14_Cookies_or_wafles_weekly

df %>% 
  group_by(`1_gender`, `14_Cookies_or_wafles_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Cookies_or_wafles_weekly`        , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Cookies_or_wafles_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Cookies_or_wafles_weekly`        , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Cookies_or_wafles_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Cookies_or_wafles_weekly`        , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Cookies_or_wafles_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Cookies_or_wafles_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Cookies_or_wafles_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Cookies_or_wafles_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Cookies_or_wafles_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Cookies_or_wafles_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Cookies_or_wafles_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Cookies_or_wafles_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Cookies_or_wafles_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Cookies_or_wafles_weekly` ))  

14_Chocolate_or_chocolate_bars_weekly

df %>% 
  group_by(`1_gender`, `14_Chocolate_or_chocolate_bars_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chocolate_or_chocolate_bars_weekly`       , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Chocolate_or_chocolate_bars_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chocolate_or_chocolate_bars_weekly`       , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Chocolate_or_chocolate_bars_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chocolate_or_chocolate_bars_weekly`       , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Chocolate_or_chocolate_bars_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chocolate_or_chocolate_bars_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Chocolate_or_chocolate_bars_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Chocolate_or_chocolate_bars_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chocolate_or_chocolate_bars_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Chocolate_or_chocolate_bars_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Chocolate_or_chocolate_bars_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chocolate_or_chocolate_bars_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Chocolate_or_chocolate_bars_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Chocolate_or_chocolate_bars_weekly`))  

14_Musli_bars_weekly

df %>% 
  group_by(`1_gender`, `14_Musli_bars_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Musli_bars_weekly`       , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Musli_bars_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Musli_bars_weekly`       , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Musli_bars_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Musli_bars_weekly`       , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Musli_bars_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Musli_bars_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Musli_bars_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Musli_bars_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Musli_bars_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Musli_bars_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Musli_bars_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Musli_bars_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Musli_bars_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Musli_bars_weekly`))  

14_Chocolate_candies_weekly

df %>% 
  group_by(`1_gender`, `14_Chocolate_candies_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chocolate_candies_weekly`       , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Chocolate_candies_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chocolate_candies_weekly`       , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Chocolate_candies_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chocolate_candies_weekly`       , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Chocolate_candies_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chocolate_candies_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Chocolate_candies_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Chocolate_candies_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chocolate_candies_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Chocolate_candies_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Chocolate_candies_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chocolate_candies_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Chocolate_candies_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Chocolate_candies_weekly`))  

14Caramel_weekly

df %>% 
  group_by(`1_gender`, `14Caramel_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14Caramel_weekly`       , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14Caramel_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14Caramel_weekly`       , n, fill=0)

df %>% 
  group_by(`RegionName`, `14Caramel_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14Caramel_weekly`       , n, fill=0)

df %>% 
  group_by(`1_gender`, `14Caramel_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14Caramel_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14Caramel_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14Caramel_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14Caramel_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14Caramel_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14Caramel_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14Caramel_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14Caramel_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14Caramel_weekly`))  

14_Fresh_breath_dragees_weekly

df %>% 
  group_by(`1_gender`, `14_Fresh_breath_dragees_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Fresh_breath_dragees_weekly`       , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Fresh_breath_dragees_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Fresh_breath_dragees_weekly`       , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Fresh_breath_dragees_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Fresh_breath_dragees_weekly`       , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Fresh_breath_dragees_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Fresh_breath_dragees_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Fresh_breath_dragees_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Fresh_breath_dragees_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Fresh_breath_dragees_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Fresh_breath_dragees_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Fresh_breath_dragees_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Fresh_breath_dragees_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Fresh_breath_dragees_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Fresh_breath_dragees_weekly`))  

14_Chupa-chups_or_similar_candy_weekly

df %>% 
  group_by(`1_gender`, `14_Chupa-chups_or_similar_candy_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chupa-chups_or_similar_candy_weekly`       , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Chupa-chups_or_similar_candy_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chupa-chups_or_similar_candy_weekly`       , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Chupa-chups_or_similar_candy_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chupa-chups_or_similar_candy_weekly`       , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Chupa-chups_or_similar_candy_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chupa-chups_or_similar_candy_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Chupa-chups_or_similar_candy_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Chupa-chups_or_similar_candy_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chupa-chups_or_similar_candy_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Chupa-chups_or_similar_candy_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Chupa-chups_or_similar_candy_weekly`       ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chupa-chups_or_similar_candy_weekly`       , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Chupa-chups_or_similar_candy_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Chupa-chups_or_similar_candy_weekly`))  

14_Toffies_or_chewing_candies_weekly

df %>% 
  group_by(`1_gender`, `14_Toffies_or_chewing_candies_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Toffies_or_chewing_candies_weekly`        , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Toffies_or_chewing_candies_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Toffies_or_chewing_candies_weekly`        , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Toffies_or_chewing_candies_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Toffies_or_chewing_candies_weekly`        , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Toffies_or_chewing_candies_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Toffies_or_chewing_candies_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Toffies_or_chewing_candies_weekly`_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Toffies_or_chewing_candies_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Toffies_or_chewing_candies_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Toffies_or_chewing_candies_weekly`_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Toffies_or_chewing_candies_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Toffies_or_chewing_candies_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Toffies_or_chewing_candies_weekly`_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Toffies_or_chewing_candies_weekly` ))  

14_Potato_chips_or_salty_cookies_weekly

df %>% 
  group_by(`1_gender`, `14_Potato_chips_or_salty_cookies_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Potato_chips_or_salty_cookies_weekly`        , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Potato_chips_or_salty_cookies_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Potato_chips_or_salty_cookies_weekly`        , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Potato_chips_or_salty_cookies_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Potato_chips_or_salty_cookies_weekly`        , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Potato_chips_or_salty_cookies_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Potato_chips_or_salty_cookies_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Potato_chips_or_salty_cookies_weekly`_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Potato_chips_or_salty_cookies_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Potato_chips_or_salty_cookies_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Potato_chips_or_salty_cookies_weekly`_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Potato_chips_or_salty_cookies_weekly`        ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Potato_chips_or_salty_cookies_weekly`        , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Potato_chips_or_salty_cookies_weekly`_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Potato_chips_or_salty_cookies_weekly` ))  

14_Sweet_popcorn_weekly

df %>% 
  group_by(`1_gender`, `14_Sweet_popcorn_weekly`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_popcorn_weekly`         , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Sweet_popcorn_weekly`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_popcorn_weekly`         , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Sweet_popcorn_weekly`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_popcorn_weekly`         , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Sweet_popcorn_weekly`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_popcorn_weekly`         , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sweet_popcorn_weekly`_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Sweet_popcorn_weekly`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_popcorn_weekly`         , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sweet_popcorn_weekly`_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Sweet_popcorn_weekly`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sweet_popcorn_weekly`         , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sweet_popcorn_weekly`_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Sweet_popcorn_weekly`  ))  

14_Chewing_gum_with_sugar_weekly

df %>% 
  group_by(`1_gender`, `14_Chewing_gum_with_sugar_weekly`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chewing_gum_with_sugar_weekly`         , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Chewing_gum_with_sugar_weekly`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chewing_gum_with_sugar_weekly`         , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Chewing_gum_with_sugar_weekly`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chewing_gum_with_sugar_weekly`         , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Chewing_gum_with_sugar_weekly`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chewing_gum_with_sugar_weekly`         , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Chewing_gum_with_sugar_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Chewing_gum_with_sugar_weekly`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chewing_gum_with_sugar_weekly`         , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Chewing_gum_with_sugar_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Chewing_gum_with_sugar_weekly`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Chewing_gum_with_sugar_weekly`         , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Chewing_gum_with_sugar_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Chewing_gum_with_sugar_weekly`  ))  

14_Sugarfree_chewing_gum_weekly

df %>% 
  group_by(`1_gender`, `14_Sugarfree_chewing_gum_weekly`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sugarfree_chewing_gum_weekly`          , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `14_Sugarfree_chewing_gum_weekly`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sugarfree_chewing_gum_weekly`          , n, fill=0)

df %>% 
  group_by(`RegionName`, `14_Sugarfree_chewing_gum_weekly`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sugarfree_chewing_gum_weekly`          , n, fill=0)

df %>% 
  group_by(`1_gender`, `14_Sugarfree_chewing_gum_weekly`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sugarfree_chewing_gum_weekly`          , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sugarfree_chewing_gum_weekly_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `14_Sugarfree_chewing_gum_weekly`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sugarfree_chewing_gum_weekly`          , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sugarfree_chewing_gum_weekly_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `14_Sugarfree_chewing_gum_weekly`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`14_Sugarfree_chewing_gum_weekly`          , n, fill=0) %>% 
  write.csv(,file = "./tables/14_Sugarfree_chewing_gum_weekly_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`14_Sugarfree_chewing_gum_weekly`   ))  

151_Cups_of_tee_daily

df %>% 
  group_by(`1_gender`, `151_Cups_of_tee_daily`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`151_Cups_of_tee_daily`          , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `151_Cups_of_tee_daily`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`151_Cups_of_tee_daily`          , n, fill=0)

df %>% 
  group_by(`RegionName`, `151_Cups_of_tee_daily`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`151_Cups_of_tee_daily`          , n, fill=0)

df %>% 
  group_by(`1_gender`, `151_Cups_of_tee_daily`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`151_Cups_of_tee_daily`          , n, fill=0) %>% 
  write.csv(,file = "./tables/151_Cups_of_tee_daily_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `151_Cups_of_tee_daily`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`151_Cups_of_tee_daily`          , n, fill=0) %>% 
  write.csv(,file = "./tables/151_Cups_of_tee_daily_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `151_Cups_of_tee_daily`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`151_Cups_of_tee_daily`          , n, fill=0) %>% 
  write.csv(,file = "./tables/151_Cups_of_tee_daily_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`151_Cups_of_tee_daily`   ))  

152_Cups_of_cacao_daily

df %>% 
  group_by(`1_gender`, `152_Cups_of_cacao_daily`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`152_Cups_of_cacao_daily`         , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `152_Cups_of_cacao_daily`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`152_Cups_of_cacao_daily`         , n, fill=0)

df %>% 
  group_by(`RegionName`, `152_Cups_of_cacao_daily`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`152_Cups_of_cacao_daily`         , n, fill=0)

df %>% 
  group_by(`1_gender`, `152_Cups_of_cacao_daily`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`152_Cups_of_cacao_daily`         , n, fill=0) %>% 
  write.csv(,file = "./tables/152_Cups_of_cacao_daily_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `152_Cups_of_cacao_daily`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`152_Cups_of_cacao_daily`         , n, fill=0) %>% 
  write.csv(,file = "./tables/152_Cups_of_cacao_daily_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `152_Cups_of_cacao_daily`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`152_Cups_of_cacao_daily`         , n, fill=0) %>% 
  write.csv(,file = "./tables/152_Cups_of_cacao_daily_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`152_Cups_of_cacao_daily`  ))  

153_Cups_of_coffee_daily

df %>% 
  group_by(`1_gender`, `153_Cups_of_coffee_daily`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`153_Cups_of_coffee_daily`         , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `153_Cups_of_coffee_daily`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`153_Cups_of_coffee_daily`         , n, fill=0)

df %>% 
  group_by(`RegionName`, `153_Cups_of_coffee_daily`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`153_Cups_of_coffee_daily`         , n, fill=0)

df %>% 
  group_by(`1_gender`, `153_Cups_of_coffee_daily`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`153_Cups_of_coffee_daily`         , n, fill=0) %>% 
  write.csv(,file = "./tables/153_Cups_of_coffee_daily_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `153_Cups_of_coffee_daily`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`153_Cups_of_coffee_daily`         , n, fill=0) %>% 
  write.csv(,file = "./tables/153_Cups_of_coffee_daily_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `153_Cups_of_coffee_daily`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`153_Cups_of_coffee_daily`         , n, fill=0) %>% 
  write.csv(,file = "./tables/153_Cups_of_coffee_daily_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`153_Cups_of_coffee_daily`  ))  

161_Tsp_sugar_for_one_tee

df %>% 
  group_by(`1_gender`, `161_Tsp_sugar_for_one_tee`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`161_Tsp_sugar_for_one_tee`         , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `161_Tsp_sugar_for_one_tee`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`161_Tsp_sugar_for_one_tee`         , n, fill=0)

df %>% 
  group_by(`RegionName`, `161_Tsp_sugar_for_one_tee`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`161_Tsp_sugar_for_one_tee`         , n, fill=0)

df %>% 
  group_by(`1_gender`, `161_Tsp_sugar_for_one_tee`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`161_Tsp_sugar_for_one_tee`         , n, fill=0) %>% 
  write.csv(,file = "./tables/161_Tsp_sugar_for_one_tee_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `161_Tsp_sugar_for_one_tee`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`161_Tsp_sugar_for_one_tee`         , n, fill=0) %>% 
  write.csv(,file = "./tables/161_Tsp_sugar_for_one_tee_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `161_Tsp_sugar_for_one_tee`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`161_Tsp_sugar_for_one_tee`         , n, fill=0) %>% 
  write.csv(,file = "./tables/161_Tsp_sugar_for_one_tee_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`161_Tsp_sugar_for_one_tee`  ))  

162_Tsp_sugar_for_one_cacao

df %>% 
  group_by(`1_gender`, `162_Tsp_sugar_for_one_cacao`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`162_Tsp_sugar_for_one_cacao`         , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `162_Tsp_sugar_for_one_cacao`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`162_Tsp_sugar_for_one_cacao`         , n, fill=0)

df %>% 
  group_by(`RegionName`, `162_Tsp_sugar_for_one_cacao`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`162_Tsp_sugar_for_one_cacao`         , n, fill=0)

df %>% 
  group_by(`1_gender`, `162_Tsp_sugar_for_one_cacao`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`162_Tsp_sugar_for_one_cacao`         , n, fill=0) %>% 
  write.csv(,file = "./tables/162_Tsp_sugar_for_one_cacao_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `162_Tsp_sugar_for_one_cacao`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`162_Tsp_sugar_for_one_cacao`         , n, fill=0) %>% 
  write.csv(,file = "./tables/162_Tsp_sugar_for_one_cacao_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `162_Tsp_sugar_for_one_cacao`         ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`162_Tsp_sugar_for_one_cacao`         , n, fill=0) %>% 
  write.csv(,file = "./tables/162_Tsp_sugar_for_one_cacao_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`162_Tsp_sugar_for_one_cacao`  ))  

163_Tsp_sugar_for_one_coffee

df %>% 
  group_by(`1_gender`, `163_Tsp_sugar_for_one_coffee`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`163_Tsp_sugar_for_one_coffee`          , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `163_Tsp_sugar_for_one_coffee`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`163_Tsp_sugar_for_one_coffee`          , n, fill=0)

df %>% 
  group_by(`RegionName`, `163_Tsp_sugar_for_one_coffee`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`163_Tsp_sugar_for_one_coffee`          , n, fill=0)

df %>% 
  group_by(`1_gender`, `163_Tsp_sugar_for_one_coffee`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`163_Tsp_sugar_for_one_coffee`          , n, fill=0) %>% 
  write.csv(,file = "./tables/163_Tsp_sugar_for_one_coffee_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `163_Tsp_sugar_for_one_coffee`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`163_Tsp_sugar_for_one_coffee`          , n, fill=0) %>% 
  write.csv(,file = "./tables/163_Tsp_sugar_for_one_coffee_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `163_Tsp_sugar_for_one_coffee`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`163_Tsp_sugar_for_one_coffee`          , n, fill=0) %>% 
  write.csv(,file = "./tables/163_Tsp_sugar_for_one_coffee_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`163_Tsp_sugar_for_one_coffee`   ))  

17_Selfevaluated_dietary_habits

df %>% 
  group_by(`1_gender`, `17_Selfevaluated_dietary_habits`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`17_Selfevaluated_dietary_habits`          , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `17_Selfevaluated_dietary_habits`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`17_Selfevaluated_dietary_habits`          , n, fill=0)

df %>% 
  group_by(`RegionName`, `17_Selfevaluated_dietary_habits`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`17_Selfevaluated_dietary_habits`          , n, fill=0)

df %>% 
  group_by(`1_gender`, `17_Selfevaluated_dietary_habits`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`17_Selfevaluated_dietary_habits`          , n, fill=0) %>% 
  write.csv(,file = "./tables/17_Selfevaluated_dietary_habits_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `17_Selfevaluated_dietary_habits`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`17_Selfevaluated_dietary_habits`          , n, fill=0) %>% 
  write.csv(,file = "./tables/17_Selfevaluated_dietary_habits_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `17_Selfevaluated_dietary_habits`          ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`17_Selfevaluated_dietary_habits`          , n, fill=0) %>% 
  write.csv(,file = "./tables/17_Selfevaluated_dietary_habits_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`17_Selfevaluated_dietary_habits`   ))  

18_Frequency_of_smoking

df %>% 
  group_by(`1_gender`, `18_Frequency_of_smoking`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`18_Frequency_of_smoking`           , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `18_Frequency_of_smoking`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`18_Frequency_of_smoking`           , n, fill=0)

df %>% 
  group_by(`RegionName`, `18_Frequency_of_smoking`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`18_Frequency_of_smoking`           , n, fill=0)

df %>% 
  group_by(`1_gender`, `18_Frequency_of_smoking`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`18_Frequency_of_smoking`           , n, fill=0) %>% 
  write.csv(,file = "./tables/18_Frequency_of_smoking_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `18_Frequency_of_smoking`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`18_Frequency_of_smoking`           , n, fill=0) %>% 
  write.csv(,file = "./tables/18_Frequency_of_smoking_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `18_Frequency_of_smoking`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`18_Frequency_of_smoking`           , n, fill=0) %>% 
  write.csv(,file = "./tables/18_Frequency_of_smoking_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`18_Frequency_of_smoking`    ))  

19_Tobacco_usage_(not_smoking)_in_last_30_days

df %>% 
  group_by(`1_gender`, `19_Tobacco_usage_(not_smoking)_in_last_30_days`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`19_Tobacco_usage_(not_smoking)_in_last_30_days`           , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `19_Tobacco_usage_(not_smoking)_in_last_30_days`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`19_Tobacco_usage_(not_smoking)_in_last_30_days`           , n, fill=0)

df %>% 
  group_by(`RegionName`, `19_Tobacco_usage_(not_smoking)_in_last_30_days`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`19_Tobacco_usage_(not_smoking)_in_last_30_days`           , n, fill=0)

df %>% 
  group_by(`1_gender`, `19_Tobacco_usage_(not_smoking)_in_last_30_days`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`19_Tobacco_usage_(not_smoking)_in_last_30_days`           , n, fill=0) %>% 
  write.csv(,file = "./tables/19_Tobacco_usage_(not_smoking)_in_last_30_days_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `19_Tobacco_usage_(not_smoking)_in_last_30_days`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`19_Tobacco_usage_(not_smoking)_in_last_30_days`           , n, fill=0) %>% 
  write.csv(,file = "./tables/19_Tobacco_usage_(not_smoking)_in_last_30_days_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `19_Tobacco_usage_(not_smoking)_in_last_30_days`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`19_Tobacco_usage_(not_smoking)_in_last_30_days`           , n, fill=0) %>% 
  write.csv(,file = "./tables/19_Tobacco_usage_(not_smoking)_in_last_30_days_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`19_Tobacco_usage_(not_smoking)_in_last_30_days`    ))  

20_Own_toothbrush

df %>% 
  group_by(`1_gender`, `20_Own_toothbrush`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`20_Own_toothbrush`           , n, fill=0)

df %>% 
  group_by(`2_Live_in`, `20_Own_toothbrush`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`20_Own_toothbrush`           , n, fill=0)

df %>% 
  group_by(`RegionName`, `20_Own_toothbrush`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`20_Own_toothbrush`           , n, fill=0)

df %>% 
  group_by(`1_gender`, `20_Own_toothbrush`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`20_Own_toothbrush`           , n, fill=0) %>% 
  write.csv(,file = "./tables/20_Own_toothbrush_x_gender.csv") 

df %>% 
  group_by(`2_Live_in`, `20_Own_toothbrush`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`20_Own_toothbrush`           , n, fill=0) %>% 
  write.csv(,file = "./tables/20_Own_toothbrush_x_Live_in.csv") 

df %>% 
  group_by(`RegionName`, `20_Own_toothbrush`           ) %>% 
  summarise( n = n()) %>% 
  ungroup() %>% 
  spread(`20_Own_toothbrush`           , n, fill=0) %>% 
  write.csv(,file = "./tables/20_Own_toothbrush_x_region.csv") 


chisq.test(table(df$`1_gender`, df$`20_Own_toothbrush`    ))  

PLOTS

ggplot(df, aes(`3_Pain_or_other_dental_disorders_in_last_12_months`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/3_Pain_or_other_dental_disorders_in_last_12_months.png")
ggplot(df, aes(`4_Frequency_of_dentist_visits_in_last_12_months`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/4_Frequency_of_dentist_visits_in_last_12_months.png")
ggplot(df, aes(`5_Reason_to_attend_dentist`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/5_Reason_to_attend_dentist.png")
ggplot(df, aes(`6Public_or_privat_dentist`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/6Public_or_privat_dentist.png")
ggplot(df, aes(`7_Frequency_of_dental_hygienist_visits`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/7_Frequency_of_dental_hygienist_visits.png")
ggplot(df, aes(`8_Frequency_of_toothbrushing`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/8_Frequency_of_toothbrushing.png")
ggplot(df, aes(`9_Usage_of_toothpaste`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/9_Usage_of_toothpaste.png")
ggplot(df, aes(`9_Usage_of_toothbrush`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/9_Usage_of_toothbrush.png")
ggplot(df, aes(`9_Usage_of_dental_floss`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/9_Usage_of_dental_floss.png")
ggplot(df, aes(`9_Usage_of_tooth_picks`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/9_Usage_of_tooth_picks.png")
ggplot(df, aes(`9_Usage_of_mouth_wash`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/9_Usage_of_mouth_wash.png")
ggplot(df, aes(`9Usage_of_tounge_cleaner`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/9Usage_of_tounge_cleaner.png")
ggplot(df, aes(`9_Usage_of_other_hygiene_appliance`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/9_Usage_of_other_hygiene_appliance.png")
ggplot(df, aes(`10_Fluoride_in_toothpaste`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/10_Fluoride_in_toothpaste.png")
ggplot(df, aes(`11_Usage_of_fluoride_supplements`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/11_Usage_of_fluoride_supplements.png")
ggplot(df, aes(`12_Selfevaluated_oral_hygiene_care`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/12_Selfevaluated_oral_hygiene_care.png")
ggplot(df, aes(`13_Eating_habits_grouped`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/13_Eating_habits_grouped.png")
ggplot(df, aes(`14_Sweet_yogurt_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Sweet_yogurt_weekly.png")
ggplot(df, aes(`14_Sweet_milk_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Sweet_milk_weekly.png")
ggplot(df, aes(`14_Sweet_creams_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Sweet_creams_weekly.png")
ggplot(df, aes(`14_Karums_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Karums_weekly.png")
ggplot(df, aes(`14_Bread_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Bread_weekly.png")
ggplot(df, aes(`14_Cornflakes_not_sweetened_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Cornflakes_not_sweetened_weekly.png")
ggplot(df, aes(`14_Sweet_cornflakes_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Sweet_cornflakes_weekly.png")
ggplot(df, aes(`14_Canned_fruits_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Canned_fruits_weekly.png")
ggplot(df, aes(`14_Dried_fruits_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Dried_fruits_weekly.png")
ggplot(df, aes(`14_Juice_or_soft_drinks_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Juice_or_soft_drinks_weekly.png")
ggplot(df, aes(`14_Tee_cacao_or_coffee_with_sugar_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Tee_cacao_or_coffee_with_sugar_weekly.png")
ggplot(df, aes(`14_Marmelade_honey_syrup_or_other_sweet_souce_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Marmelade_honey_syrup_or_other_sweet_souce_weekly.png")
ggplot(df, aes(`14_Ice_cream_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Ice_cream_weekly.png")
ggplot(df, aes(`14_Cookies_or_wafles_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Cookies_or_wafles_weekly.png")
ggplot(df, aes(`14_Cakes_or_sweet_breads_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Cakes_or_sweet_breads_weekly.png")
ggplot(df, aes(`14_Chocolate_or_chocolate_bars_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Chocolate_or_chocolate_bars_weekly.png")
ggplot(df, aes(`14_Musli_bars_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Musli_bars_weekly.png")
ggplot(df, aes(`14_Chocolate_candies_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Chocolate_candies_weekly.png")
ggplot(df, aes(`14Caramel_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14Caramel_weekly.png")
ggplot(df, aes(`14_Fresh_breath_dragees_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Fresh_breath_dragees_weekly.png")
ggplot(df, aes(`14_Chupa-chups_or_similar_candy_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Chupa-chups_or_similar_candy_weekly.png")
ggplot(df, aes(`14_Toffies_or_chewing_candies_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Toffies_or_chewing_candies_weekly.png")
ggplot(df, aes(`14_Potato_chips_or_salty_cookies_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Potato_chips_or_salty_cookies_weekly.png")
ggplot(df, aes(`14_Sweet_popcorn_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Sweet_popcorn_weekly.png")
ggplot(df, aes(`14_Chewing_gum_with_sugar_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Chewing_gum_with_sugar_weekly.png")
ggplot(df, aes(`14_Sugarfree_chewing_gum_weekly`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/14_Sugarfree_chewing_gum_weekly.png")
ggplot(df, aes(`151_Cups_of_tee_daily`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/151_Cups_of_tee_daily.png")
ggplot(df, aes(`152_Cups_of_cacao_daily`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/152_Cups_of_cacao_daily.png")
ggplot(df, aes(`153_Cups_of_coffee_daily`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/153_Cups_of_coffee_daily.png")
ggplot(df, aes(`161_Tsp_sugar_for_one_tee`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/161_Tsp_sugar_for_one_tee.png")
ggplot(df, aes(`162_Tsp_sugar_for_one_cacao`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/162_Tsp_sugar_for_one_cacao.png")
ggplot(df, aes(`163_Tsp_sugar_for_one_coffee`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/163_Tsp_sugar_for_one_coffee.png")
ggplot(df, aes(`17_Selfevaluated_dietary_habits`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/17_Selfevaluated_dietary_habits.png")
ggplot(df, aes(`18_Frequency_of_smoking`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/18_Frequency_of_smoking.png")
ggplot(df, aes(`19_Tobacco_usage_(not_smoking)_in_last_30_days`)) + geom_bar() + theme_minimal()  + ggsave(file = "./plots/19_Tobacco_usage_(not_smoking)_in_last_30_days.png")

CLINICAL

Erosion

  1. % de ninos, que tienen 0 = 2123, 99.3%
  2. % de ninos, que tienen maximum 1 = 11, 0.51%
  3. % de ninos, que tienen maximum 2 = 4, 0.19%
  4. % de ninos, que tienen maximum 3 = 0
  5. De ninos, que tienen erosiones, cuanto promedio dientes, min, max, SD (si necesita otros valores) En promedio, los niños examinados tienen 0.09 dtes con erosiones, o sea 9 de cada de cada 100.
erosion <- df %>% 
  gather("Tooth_erosion", "erosion_status", `Erosion_[17]`:`Erosion_[37]`) %>% 
  separate(Tooth_erosion, c("Tooth_erosion", "Surface_erosion"), sep = -2) %>% 
  separate(Tooth_erosion, c("Type", "Tooth"), sep = -3) 


levels(erosion$erosion_status)[(erosion$erosion_status) == "NA"] <- "0" 

erosion$Tooth <- as.factor(erosion$Tooth) # convert to factor
erosion$Tooth <- ordered(erosion$Tooth, levels = c("17", "16", "15", "14", "13", "12", "11", 
                                                 "21", "22", "23", "24", "25", "26", "27", 
                                                 "47", "46", "45", "44", "43", "42", "41", 
                                                 "31", "32", "33", "34", "35", "36", "37"))

erosion_by_tooth <- ftable(erosion$Tooth, erosion$erosion_status)
capture.output(erosion_by_tooth, file = "./tables/erosion_by_tooth.txt")
rm(erosion_by_tooth)

erosion %>% 
  group_by(Tooth, erosion_status) %>% 
  summarise(n = n()) %>% 
  spread(erosion_status, n, fill = 0) %>% 
  write.csv(,file = "./tables/tooth_x_erosionstatus.csv")

erosion %>% 
  group_by(ID, Tooth, erosion_status) %>% 
  summarise(n = n()) %>% 
  spread(Tooth, erosion_status, fill = 0) %>% 
  write.csv(,file = "./tables/ID_x_erosionstatus.csv")

# r erosion por niño
erosion_max_df <- erosion %>% 
  group_by(ID, Tooth) %>% 
  summarise(erosionmax = max(erosion_status)) %>% 
  spread(Tooth, erosionmax, fill = 0) %>% 
  write.csv(,file = "./tables/ID_x_tooth_erosion_status.csv")

rm(erosion)

Trauma

% de ninos, que tienen trauma (1-6) = 259, 12.11% % de ninos, que tienen 1 = 51, 2.4% % de ninos, que tienen 2 = 193, 9.0% % de ninos, que tienen 3 = 13, 0.31% % de ninos, que tienen 4 = 4, 0.09% % de ninos, que tienen 5 = 1, 0.05% % de ninos, que tienen 6 = 0 Cuantos dientes promedio con trauma (de ninos con traums, min, max, otros valores) 0.29 dientes DE 1.27

trauma <- df %>% 
  gather("Tooth_trauma", "Trauma_status", `Trauma_[17]`:`Trauma_[37]`) %>% 
  separate(Tooth_trauma, c("Tooth_trauma", "Surface_trauma"), sep = -2) %>% 
  separate(Tooth_trauma, c("Type", "Tooth"), sep = -3) %>% 
  select(-c(Type, Surface_trauma)) %>% 
  select(-c(C17V:`Erosion_[37]`)) %>% 
  select(-c(`9_CPI_[16/17]`: `12b)_3__lokalization_of_pathology`)) %>% 
  select(-c(`3_Pain_or_other_dental_disorders_in_last_12_months`: `27_Frequency_of_travels_in_abroad_in_last_12_months_with_family`)) 



levels(trauma$Trauma_status)[(trauma$Trauma_status) == "NA"] <- "0" 

trauma$Tooth <- as.factor(trauma$Tooth) # convert to factor
trauma$Tooth <- ordered(trauma$Tooth, levels = c("17", "16", "15", "14", "13", "12", "11", 
                                                 "21", "22", "23", "24", "25", "26", "27", 
                                                 "47", "46", "45", "44", "43", "42", "41", 
                                                 "31", "32", "33", "34", "35", "36", "37"))

trauma_by_tooth <- ftable(trauma$Tooth, trauma$Trauma_status)
trauma_by_tooth
capture.output(trauma_by_tooth, file = "./tables/trauma_by_tooth.txt")
rm(trauma_by_tooth)

# r trauma por niño}

trauma <- trauma %>% 
  group_by(ID, Tooth) %>% 
  summarise(traumamax = max(Trauma_status)) %>% 
  spread(Tooth, traumamax, fill = 0) %>% 
  write.csv(,file = "./tables/ID_x_tooth_trauma_status.csv")

rm(trauma)

Periodontal

1.  % de ninos que todos CPITN tiene 0 : 547, 25.58%
2.  % de ninos que maximum valor de CPITN, tiene 1 (sangramiento): 1110, 51.92%
3.  % de ninos, que tienen 2: 477, 22.31%
4.  % de ninos, que tienen 3: 3, 0.14%
5.  % de ninos, que tienen 4: 1, 0.05%
periodontal <- df %>% 
  gather("Tooth", "perio_status", `9_CPI_[16/17]`:`9_CPI_[36/37]`) %>% 
  separate(Tooth, c("Tooth", "Surface"), sep = -8) %>% 
  select(-c(`C17V`: `Trauma_[37]`))


periodontal$Surface <- as.factor(periodontal$Surface) # convert to factor
periodontal$Surface <- ordered(periodontal$Surface, levels = c("[16/17]", 
                                                           "PI_[11]", 
                                                           "[26/27]", 
                                                           "[46/47]", 
                                                           "PI_[31]", 
                                                           "[36/37]"))


periodontal %>% 
  group_by(Surface, perio_status) %>% 
  summarise(n = n()) %>% 
  spread(perio_status, n, fill = 0) %>% 
  write.csv(,file = "./tables/tooth_x_periostatus.csv")

periodontal %>% 
  group_by(ID, Surface, perio_status) %>% 
  summarise(n = n()) %>% 
  spread(Surface, perio_status, fill = 0) %>% 
  write.csv(,file = "./tables/ID_x_periotatus.csv")

# GENDER

periodontal %>% 
  group_by(`1_gender`, perio_status) %>% 
  summarise(n = n()) %>% 
  spread(perio_status, n, fill = 0) %>% 
  write.csv(,file = "./tables/tooth_x_gender_periostatus.csv")

# REGION
periodontal %>% 
  group_by(RegionName, perio_status) %>% 
  summarise(n = n()) %>% 
  spread(perio_status, n, fill = 0) %>% 
  write.csv(,file = "./tables/tooth_x_region_periostatus.csv")

# CITY

periodontal %>% 
  group_by(`2_Live_in`, perio_status) %>% 
  summarise(n = n()) %>% 
  spread(perio_status, n, fill = 0) %>% 
  write.csv(,file = "./tables/tooth_x_livein_periostatus.csv")
rm(periodontal)

Fluorosis

1.  % de ninos, que tienen fluorosis (1-5): 23, 1.08%
1.  % de ninos, que tienen 1: 11, 0.51%
2.  % de ninos, que tienen 2: 8, 0.37%
3.  % de ninos, que tienen 3: 4, 0.19%

df %>% 
  group_by(`10_Fluorosis`) %>% 
  summarise(n=n()) %>% 
  write.csv(file = "./tables/fluorosis.csv", row.names = F)
  

df %>% 
  group_by(`1_gender`, `10_Fluorosis`) %>% 
  summarise(n=n()) %>% 
  spread(`10_Fluorosis`, n, fill = 0) %>% 
  write.csv(file = "./tables/fluorosis_x_gender.csv", row.names = F)

df %>% 
  group_by(RegionName, `10_Fluorosis`) %>% 
  summarise(n=n()) %>% 
  spread(`10_Fluorosis`, n, fill = 0) %>% 
  write.csv(file = "./tables/fluorosis_x_region.csv", row.names = F)

df %>% 
  group_by(`2_Live_in`, `10_Fluorosis`) %>% 
  summarise(n=n()) %>% 
  spread(`10_Fluorosis`, n , fill = 0) %>% 
  write.csv(file = "./tables/fluorosis_x_livein.csv", row.names = F)

Orthodontics

1.  % de ninos que tienen tratamiento (1): 60, 2.8%
df %>% 
  group_by(`11_Orthodontic_treatment`) %>% 
  summarise(n=n())

Patology

1.  % de ninos, que tienen alguna patologia (1-6):27, 1.26%
    1.  % de ninos, que tienen 1
    2.  % de ninos, que tienen 2
    3.  % de ninos, que tienen 3
    4.  % de ninos, que tienen 4
    5.  % de ninos, que tienen 5
2.  en que lugar tienen patologias
    1.  % de patologias en lugar 1
        1.  % de patologia 1 en lugar 1
        2.  % de patologia 2 en lugar 1
        3.  % de patologia 3 en lugar 1
        4.  % de patologia 4 en lugar 1
        5.  % de patologia 5 en lugar 1
    2.  % de patologias en lugar 2
        1.  % de patologia 1 en lugar 2
        2.  % de patologia 2 en lugar 2
        3.  % de patologia 3 en lugar 2
        4.  % de patologia 4 en lugar 2
        5.  % de patologia 5 en lugar 2
    3.  % de patologias en lugar 3
        1.  % de patologia 1 en lugar 3
        2.  % de patologia 2 en lugar 3
        3.  % de patologia 3 en lugar 3
        4.  % de patologia 4 en lugar 3
        5.  % de patologia 5 en lugar 3
    4.  % de patologias en lugar 4
        1.  % de patologia 1 en lugar 4
        2.  % de patologia 2 en lugar 4
        3.  % de patologia 3 en lugar 4
        4.  % de patologia 4 en lugar 4
        5.  % de patologia 5 en lugar 4
    5.  % de patologias en lugar 5
        1.  % de patologia 1 en lugar 5
        2.  % de patologia 2 en lugar 5
        3.  % de patologia 3 en lugar 5
        4.  % de patologia 4 en lugar 5
        5.  % de patologia 5 en lugar 5
    6.  % de patologias en lugar 6
        1.  % de patologia 1 en lugar 6
        2.  % de patologia 2 en lugar 6
        3.  % de patologia 3 en lugar 6
        4.  % de patologia 4 en lugar 6
        5.  % de patologia 5 en lugar 6
    7.  % de patologias en lugar 7
        1.  % de patologia 1 en lugar 7
        2.  % de patologia 2 en lugar 7
        3.  % de patologia 3 en lugar 7
        4.  % de patologia 4 en lugar 7
        5.  % de patologia 5 en lugar 7
    8.  % de patologias en lugar 8
        1.  % de patologia 1 en lugar 8
        2.  % de patologia 2 en lugar 8
        3.  % de patologia 3 en lugar 8
        4.  % de patologia 4 en lugar 8
        5.  % de patologia 5 en lugar 8
table(df$`12a)_1_oral_pathology`)
table(df$`12a)_2_oral_pathology`)
table(df$`12a)_3_oral_pathology`)
  
x <- table(df$`12a)_1_oral_pathology`, df$`12b)_1_lokalization_of_pathology`)
capture.output(x, file = "./tables/pato1.csv")
x <- table(df$`12a)_2_oral_pathology`, df$`12b)_2__lokalization_of_pathology`)
capture.output(x, file = "./tables/pato2.csv")
x <- table(df$`12a)_3_oral_pathology`, df$`12b)_3__lokalization_of_pathology`)
capture.output(x, file = "./tables/pato3.csv")

rm(x)

DMF

Recode variables, ver en https://docs.google.com/spreadsheets/d/12B-2CZM35lt2-DhIHd6t5QylL2oDYil1TsAde_NWNKQ/edit#gid=720350908

caries <- df
caries <- caries %>% 
  select(-c(`Erosion_[17]`:`12b)_3__lokalization_of_pathology`)) %>% 
  select(-c(`3_Pain_or_other_dental_disorders_in_last_12_months`:`27_Frequency_of_travels_in_abroad_in_last_12_months_with_family`)) %>% 
  select(-c(Amount, Age, Time, `1_Examinator` )) %>% 
  select(-c(`2_Examination_date`, RegionsKods, SkolasKods, `3c_Child_nr`, 
            `3d_Examination_time_(forst_or_second)`, `4_Birth_date`, 
            FAS))
# para caries
caries[,1:140] <- ifelse(caries[,1:140] == "0", "0",
            ifelse(caries[,1:140] == "98", "0",
            ifelse(caries[,1:140] == "99", "0",
            ifelse(caries[,1:140] == "A", "1",
            ifelse(caries[,1:140] == "B", "2",
            ifelse(caries[,1:140] == "C", "3",
            ifelse(caries[,1:140] == "97", "4",
             "na")))))))
caries[,1:140] <- lapply(caries[,1:140], as.factor) # all the caries status to factors # all the caries status to factors

#para restauraciones
caries[,141:280] <- ifelse(caries[,141:280] == "0", "0",
            ifelse(caries[,141:280] == "1", "10",
            ifelse(caries[,141:280] == "2", "20",
            ifelse(caries[,141:280] == "3", "30",
            ifelse(caries[,141:280] == "4", "40",
             "na")))))
            
caries[,141:280] <- lapply(caries[,141:280], as.factor)

# create two new datasets, one for C and another for R

caries_c <- caries %>%
  select(-c(R17V:R37V)) %>% 
  gather("Tooth_c", "C", C17V:C37V) %>% 
  mutate(ID_Tooth = paste(ID, Tooth_c, sep = "_") )

caries_r <- caries %>%
  select(-c(C17V:C37V)) %>% 
  gather("Tooth_r", "R", R17V:R37V) %>% 
  select(-c(`1_gender`, `2_Live_in`, FAS_cat, RegionName, SkolaName)) %>% 
  mutate(ID_Tooth = paste(ID, Tooth_r, sep = "_") ) 

caries_r$ID_Tooth <- gsub("_R", "_C", caries_r$ID_Tooth)

caries <- left_join(caries_c, caries_r, by = "ID_Tooth")
rm(caries_c); rm(caries_r)

caries[caries=="na"] <- 0 #recodifico el único na de c

caries$C <- as.integer(caries$C)
caries$R <- as.integer(caries$R)


caries <- caries %>% 
  mutate(Suma_C_mas_R = rowSums( cbind (R,C), na.rm=TRUE))

# recode

caries$DMFS [caries$Suma_C_mas_R ==     0   ] <-    0
caries$DMFS [caries$Suma_C_mas_R ==     1   ] <-    1
caries$DMFS [caries$Suma_C_mas_R ==     11  ] <-    1
caries$DMFS [caries$Suma_C_mas_R ==     21  ] <-    2
caries$DMFS [caries$Suma_C_mas_R ==     31  ] <-    2
caries$DMFS [caries$Suma_C_mas_R ==     41  ] <-    2
caries$DMFS [caries$Suma_C_mas_R ==     2   ] <-    3
caries$DMFS [caries$Suma_C_mas_R ==     3   ] <-    3
caries$DMFS [caries$Suma_C_mas_R ==     12  ] <-    3
caries$DMFS [caries$Suma_C_mas_R ==     13  ] <-    3
caries$DMFS [caries$Suma_C_mas_R ==     22  ] <-    3
caries$DMFS [caries$Suma_C_mas_R ==     23  ] <-    3
caries$DMFS [caries$Suma_C_mas_R ==     32  ] <-    3
caries$DMFS [caries$Suma_C_mas_R ==     33  ] <-    3
caries$DMFS [caries$Suma_C_mas_R ==     42  ] <-    3
caries$DMFS [caries$Suma_C_mas_R ==     43  ] <-    3
caries$DMFS [caries$Suma_C_mas_R ==     4   ] <-    4

Now separate Tooth caries in the last letter

caries <- caries %>% 
  separate(Tooth_c, c("Tooth", "Surface"), sep = -2) %>%
  separate(Tooth, c("Omit", "Tooth"), sep = -3) %>% 
  select(-c(ID_Tooth, ID.y, Tooth_r, Omit))
caries$Tooth <- as.factor(caries$Tooth) # convert to factor
caries$Tooth <- ordered(caries$Tooth, levels = c("17", "16", "15", "14", "13", "12", "11", 
                                                 "21", "22", "23", "24", "25", "26", "27", 
                                                 "47", "46", "45", "44", "43", "42", "41", 
                                                 "31", "32", "33", "34", "35", "36", "37"))

DMFS

caries %>% 
  group_by(DMFS, Tooth) %>% 
  summarise(n = n()) %>% 
  spread(Tooth, n, fill = 0) %>% 
  write.csv(file = "./tables/DMFSxtooth.csv")  

DMFT

DMFT <- caries %>% 
  unite(Tooth_surface, Tooth, Surface) %>% 
  spread(Tooth_surface, Suma_C_mas_R)

DMFT resumido
DMFT_resumido <- read_csv2("DMFT_para_calculos.csv")

Sex

Sex D1

DMFT_resumido %>% 
  group_by(`1_gender`, `d1d3mft-bin`) %>% 
  summarise(n = n()) %>% 
  spread(`d1d3mft-bin`, n)
chisq.test(table(DMFT_resumido$`1_gender`, DMFT_resumido$`d1d3mft-bin`))
Sex D3
DMFT_resumido %>% 
  group_by(`1_gender`, d3mftbin) %>% 
  summarise(n=n()) %>% 
  spread(d3mftbin, n)
chisq.test(table(DMFT_resumido$`1_gender`, DMFT_resumido$d3mftbin))

Region

region D1
DMFT_resumido %>% 
  group_by(RegionName, `d1d3mft-bin`) %>%
  summarise( n= n()) %>% 
  spread(`d1d3mft-bin`, n)
chisq.test(table(DMFT_resumido$RegionName, DMFT_resumido$`d1d3mft-bin`))
Region D3
DMFT_resumido %>% 
  group_by(RegionName, d3mftbin) %>% 
  summarise(n=n()) %>% 
  spread(d3mftbin, n)
chisq.test(table(DMFT_resumido$RegionName, DMFT_resumido$d3mftbin))

FAS DMFT

FAS D1
DMFT_resumido %>% 
  group_by(FAS_cat, `d1d3mft-bin`) %>% 
  summarise(n = n()) %>% 
  spread(`d1d3mft-bin`, n)
chisq.test(table(DMFT_resumido$FAS_cat, DMFT_resumido$`d1d3mft-bin`))

FAS D3

DMFT_resumido %>% 
  group_by(FAS_cat, `d3mftbin`) %>% 
  summarise(n = n()) %>% 
  spread(`d3mftbin`, n)
chisq.test(table(DMFT_resumido$FAS_cat, DMFT_resumido$d3mftbin))

Risks factors

df.log <- read_csv("Prevalence_for_analysis.csv")

df.log$`8_Frequency_of_toothbrushing`[df.log$`8_Frequency_of_toothbrushing`=="Once per day"] <- "0"
df.log$`8_Frequency_of_toothbrushing`[df.log$`8_Frequency_of_toothbrushing`=="Two or more times per day"] <- "0"

df.log$`1_gender` <- ifelse(df.log$`1_gender`  == "F", 0 ,1)
df.log$FAS_cat <- ifelse(df.log$FAS_cat  == "High affluence", 1 ,0)
df.log$`8_Frequency_of_toothbrushing` <- ifelse(df.log$`8_Frequency_of_toothbrushing`  == "0", 1 ,0)
df.log$`4_Frequency_of_dentist_visits_in_last_12_months` <- ifelse(df.log$`4_Frequency_of_dentist_visits_in_last_12_months`  == "Two or more times", 0 ,1)
df.log$`7_Frequency_of_dental_hygienist_visits` <- ifelse(df.log$`7_Frequency_of_dental_hygienist_visits`  == "Two or more times per year", 0 ,1)
df.log$`9_Usage_of_dental_floss` <- ifelse(df.log$`9_Usage_of_dental_floss`  == "Yes", 0 ,1)
df.log$`9_Usage_of_mouth_wash` <- ifelse(df.log$`9_Usage_of_mouth_wash`  == "Yes", 0 ,1)
df.log$`11_Usage_of_fluoride_supplements` <- ifelse(df.log$`11_Usage_of_fluoride_supplements`  == "Yes, now", 0 ,1)
df.log$`13_Eating_habits_grouped` <- ifelse(df.log$`13_Eating_habits_grouped`  == 1, 1 ,0)
df.log$`18_Frequency_of_smoking` <- ifelse(df.log$`18_Frequency_of_smoking`  == "Never", 1 ,0)
df.log$SUMA_TSP_Sugar <- ifelse(df.log$SUMA_TSP_Sugar < 3, 0 ,1)

df.log$`d1d3mft-bin` <- ifelse(df.log$`d1d3mft-bin` == 0, 0 ,1)
df.log$d3mftbin <- ifelse(df.log$d3mftbin == 0, 0 ,1)
d1 <- glm(`d1d3mft-bin` ~ 
                  `1_gender` +
                  FAS_cat + 
                  `8_Frequency_of_toothbrushing` + 
                  `4_Frequency_of_dentist_visits_in_last_12_months`  +
                  `7_Frequency_of_dental_hygienist_visits` + 
                  `9_Usage_of_dental_floss`  +
                  `9_Usage_of_mouth_wash` + 
                  `11_Usage_of_fluoride_supplements`  +
                  `13_Eating_habits_grouped` + 
 
                  SUMA_TSP_Sugar, 
                data = df.log, 
                family = binomial)

summary(D1.model_1)
exp(cbind(OR = coef(D1.model_1), confint(D1.model_1)))
d2 <- glm(`d1d3mft-bin` ~ 
                  `1_gender` +
                   
                  `8_Frequency_of_toothbrushing` + 
                  `4_Frequency_of_dentist_visits_in_last_12_months`  +
                  `7_Frequency_of_dental_hygienist_visits` + 
                  
                  `11_Usage_of_fluoride_supplements`  +
                  `13_Eating_habits_grouped` + 
 
                  SUMA_TSP_Sugar, 
                data = df.log, 
                family = binomial)

summary(D1.model_2)

stargazer(d1, d2, type="text", digits=3, 
          dep.var.labels=c("Caries at D1 (= 1)"),
          covariate.labels=c("Sex (male = 1)",
                    "FAS (Low = 1)",
                    "Freq Toothbrushing ( < once per week = 1)",
                     "Freq visit dentist ( < once per year = 1)",
                    "Freq visit hygienist ( < once per year = 1)", 
                    "Dental floss (no use = 1)", 
                    "Mouthwash (no use = 1)",
                    "Use of fluoride supplement (no use = 1)", 
                    "Eating habits (high in sweet = 1)",
  
                    "More than one teaspoon in tea, coffee or cacao"), 
 out="modelsD1.txt")
d3 <- glm(d3mftbin ~ 
                  `1_gender` +
                  FAS_cat + 
                  `8_Frequency_of_toothbrushing` + 
                  `4_Frequency_of_dentist_visits_in_last_12_months`  +
                  `7_Frequency_of_dental_hygienist_visits` + 
                  `9_Usage_of_dental_floss`  +
                  `9_Usage_of_mouth_wash` + 
                  `11_Usage_of_fluoride_supplements`  +
                  `13_Eating_habits_grouped` + 

                  SUMA_TSP_Sugar, 
                data = df.log, 
                family = binomial)

d4 <- glm(d3mftbin ~ 
                  `1_gender` +
                   
                  `8_Frequency_of_toothbrushing` + 
                  `4_Frequency_of_dentist_visits_in_last_12_months`  +
                  `7_Frequency_of_dental_hygienist_visits` + 
                  
                  `11_Usage_of_fluoride_supplements`  +
                  `13_Eating_habits_grouped` + 

                  SUMA_TSP_Sugar, 
                data = df.log, 
                family = binomial)
summary(d3)
summary(d4)
stargazer(d3, d4, type="text", digits=3, 
          dep.var.labels=c("Caries at D3 (= 1)"),
          covariate.labels=c("Sex (male = 1)",
                    "FAS (Low = 1)",
                    "Freq Toothbrushing ( < once per week = 1)",
                     "Freq visit dentist ( < once per year = 1)",
                    "Freq visit hygienist ( < once per year = 1)", 
                    "Dental floss (no use = 1)", 
                    "Mouthwash (no use = 1)",
                    "Use of fluoride supplement (no use = 1)", 
                    "Eating habits (high in sweet = 1)",
 
                    "More than one teaspoon in tea, coffee or cacao"), 
 out="modelsD3.txt")

Citation

citation("tidyverse")
citation("lubridate") #for dates
citation()
write.foreign(df, "dataset_oralHealth_LV_spss.txt", "dataset_oralHealth_LV_spss.sps",   package="SPSS")

consumo azucar día por niño y dmft

LS0tCnRpdGxlOiAiUHJldmFsZW5jZSBDYXJpZXMgTGF0dmlhIgphdXRob3I6ICdbUlNVXShodHRwOi8vd3d3LnJzdS5sdi8pJwpkYXRlOiAnYHIgU3lzLkRhdGUoKWAnCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICBwZGZfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogIHdvcmRfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwotLS0KCiMgUEFDS0FHRVMKYGBge3IgcGFxdWV0ZXMsIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9CnJlcXVpcmUoInRpZHl2ZXJzZSIpCnJlcXVpcmUoImx1YnJpZGF0ZSIpICNmb3IgZGF0ZXMKcmVxdWlyZSgidGFibGVzIikKbGlicmFyeShmb3JlaWduKQpyZXF1aXJlKHN0YXJnYXplcikKCgpgYGAKCgojIERBVEEgQ0xFQU5JTkcgCgpEYXRhIGluIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzE1NHRjVVJQSHdnbUdjbW5kaFF5RUlUX2RMem1iQV9aUFNBS1pUd0h5R2d3L2VkaXQ/dXNwPXNoYXJpbmcKCiMjIE1haW4gZGF0YXNldApTaXplIG9mIHRoZSBkYXRhc2V0IGluIHJvd3MsIGNvbHVtbnMKYGBge3IgZGF0YXNldCAxLCB3YXJuaW5nPUZBTFNFfQpkZiA8LSByZWFkX2NzdigiZGZfZmluYWxfZGVjMTJfMjAxNi5jc3YiLCBuYSA9IGMoIiIsICIgIiwgIk5BIikpICNvam8gY29uIGxvcyBOQQpkaW0oZGYpICNjaGVjayBzaXplIG9mIHRoZSBkYXRhc2V0IHJvd3MsIGNvbHVtbnMKYGBgCgpgYGB7ciBJRH0KI2RmJElEPC1zZXEuaW50KG5yb3coZGYpKSAjIGNyZWF0ZSBhbiBJRCBmb3IgZXZlcnkgcGVyc29uCmBgYAoKIyMgUmVvcmdhbml6ZSB0aGUgZGF0YSwgY2xlYW5pbmcsIHJlb3JkZXIgbGV2ZWxzLCBzdWJzZXR0aW5nLCBldGMKCiMjIyBTdWJzZXR0aW5nIHRoZSBkYXRhClVuc2VsZWN0IHRoZSBrYXBwYSBkYXRhc2V0IApgYGB7ciBtaW51cyBrYXBwYSBkYXRhfQojZGYgPC0gZGYgJT4lIAojICBmaWx0ZXIoYDNkX0V4YW1pbmF0aW9uX3RpbWVfKGZvcnN0X29yX3NlY29uZClgICE9MikKCiNkaW0oZGYpICNjaGVjayBzaXplIG9mIHRoZSBkYXRhc2V0LiAyMjIgb2JzZXJ2YXRpb25zIHJlbW92ZWQuIE9yaWdpbmFsIGRhdGFzZXQgMjkwNApgYGAKCkZpeCBkYXRlcyBhbmQgY3JlYXRlIGEgbmV3IHZhcmlhYmxlIGFnZQpgYGB7ciBmaXggZGF0ZXN9CiNkZiRgMl9FeGFtaW5hdGlvbl9kYXRlYDwtIGFzLkRhdGUoZGYkYDJfRXhhbWluYXRpb25fZGF0ZWAsIGZvcm1hdCA9ICIlbS8lZC8lWSIpCiNkZiRgNF9CaXJ0aF9kYXRlYCA8LSBhcy5EYXRlKGRmJGA0X0JpcnRoX2RhdGVgLCBmb3JtYXQgPSAiJW0vJWQvJVkiKQojZGYgPC0gZGYgJT4lIAojICBtdXRhdGUoQWdlID0gYXMuaW50ZWdlcihkaWZmdGltZShhcy5EYXRlKGAyX0V4YW1pbmF0aW9uX2RhdGVgKSwgYXMuRGF0ZShgNF9CaXJ0aF9kYXRlYCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQ9IndlZWtzIikpLzUyLjI1KQpgYGAKCkZpeCBOQSBpbiBnZW5kZXIKYGBge3IgbG9jYXRlIE5BIGluIGdlbmRlcn0KI2RmJGAxX2dlbmRlcmBbaXMubmEoZGYkYDFfZ2VuZGVyYCldIDwtICJNIgpgYGAKClNlbGVjdCBvbmx5IHRoZSBhZ2UgPSAxMi4gVmVyaWZ5LCBtdXN0IGJlIDIxMzggKnVwZGF0ZSAyMTYzKgpgYGB7ciBvbmx5IGFnZSAxMn0KI2RmIDwtIGRmICU+JSAKIyAgZmlsdGVyKEFnZSA+PTEyLCBBZ2UgPDEzKQojZGltKGRmKQpgYGAKCgojIEFOQUxJU0lTIDI3IGRpYwoKYGBge3IgU0QgYnkgcmVnaW9ufQpvcHRpb25zKGRpZ2l0cz0yKQpkZiAlPiUgCiAgZ3JvdXBfYnkoUmVnaW9uTmFtZSkgJT4lIAogIHN1bW1hcmlzZV9lYWNoKGZ1bnMoc2QpLCBGVDpENU1GUykKYGBgCgpgYGB7ciBzZCBieSBnZW5kZXJ9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgKSAlPiUgCiAgc3VtbWFyaXNlX2VhY2goZnVucyhzZCksIEZUOkQ1TUZTKQpgYGAKCmBgYHtyfQpkZiAlPiUgCiAgZ3JvdXBfYnkoUmVnaW9uTmFtZSkgJT4lIAogIHN1bW1hcmlzZV9lYWNoKGZ1bnMobWVhbixzZCksIFNlYWxhbnRzKQpgYGAKYGBge3Igc2QgYnkgZ2VuZGVyIDJ9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgKSAlPiUgCiAgc3VtbWFyaXNlX2VhY2goZnVucyhtZWFuLHNkKSwgU2VhbGFudHMpCmBgYAoKCgoKIyBDT01JRU5aTyBBTkFMSVNJUyBDT04gVUxUSU1PIERGCiMjIyBGQVMKYGBge3IgcmVuYW1lIGZhY3RvcnMgaW4gRkFTfQpkZiRgMjNDYXJzX2luX2ZhbWlseWBbZGYkYDIzQ2Fyc19pbl9mYW1pbHlgID09ICJObyJdIDwtIDAKZGYkYDIzQ2Fyc19pbl9mYW1pbHlgW2RmJGAyM0NhcnNfaW5fZmFtaWx5YCA9PSAiT25lIl0gPC0gMQpkZiRgMjNDYXJzX2luX2ZhbWlseWBbZGYkYDIzQ2Fyc19pbl9mYW1pbHlgID09ICJUd28gb3IgbW9yZSJdIDwtIDIKCmRmJGAyNEV4aXN0YW5jZV9vZl9vd25fcm9vbWBbZGYkYDI0RXhpc3RhbmNlX29mX293bl9yb29tYCA9PSAiTm8iXSA8LSAwCmRmJGAyNEV4aXN0YW5jZV9vZl9vd25fcm9vbWBbZGYkYDI0RXhpc3RhbmNlX29mX293bl9yb29tYCA9PSAiWWVzIl0gPC0gMQoKZGYkYDI1TnVtYmVyX29mX2NvbXB1dGVyc19pbl9mYW1pbHlgW2RmJGAyNU51bWJlcl9vZl9jb21wdXRlcnNfaW5fZmFtaWx5YCA9PSAiTm9vbmUiXSA8LSAwCmRmJGAyNU51bWJlcl9vZl9jb21wdXRlcnNfaW5fZmFtaWx5YFtkZiRgMjVOdW1iZXJfb2ZfY29tcHV0ZXJzX2luX2ZhbWlseWAgPT0gIk9uZSJdIDwtIDEKZGYkYDI1TnVtYmVyX29mX2NvbXB1dGVyc19pbl9mYW1pbHlgW2RmJGAyNU51bWJlcl9vZl9jb21wdXRlcnNfaW5fZmFtaWx5YCA9PSAiVHdvIl0gPC0gMgpkZiRgMjVOdW1iZXJfb2ZfY29tcHV0ZXJzX2luX2ZhbWlseWBbZGYkYDI1TnVtYmVyX29mX2NvbXB1dGVyc19pbl9mYW1pbHlgID09ICJNb3JlIHRoYW0gdHdvIl0gPC0gMwoKZGYkYDI3X0ZyZXF1ZW5jeV9vZl90cmF2ZWxzX2luX2Ficm9hZF9pbl9sYXN0XzEyX21vbnRoc193aXRoX2ZhbWlseWBbZGYkYDI3X0ZyZXF1ZW5jeV9vZl90cmF2ZWxzX2luX2Ficm9hZF9pbl9sYXN0XzEyX21vbnRoc193aXRoX2ZhbWlseWAgPT0gIk5vb25lIiBdIDwtIDAKZGYkYDI3X0ZyZXF1ZW5jeV9vZl90cmF2ZWxzX2luX2Ficm9hZF9pbl9sYXN0XzEyX21vbnRoc193aXRoX2ZhbWlseWBbZGYkYDI3X0ZyZXF1ZW5jeV9vZl90cmF2ZWxzX2luX2Ficm9hZF9pbl9sYXN0XzEyX21vbnRoc193aXRoX2ZhbWlseWAgPT0gIk9uZSB0aW1lIiBdIDwtIDEKZGYkYDI3X0ZyZXF1ZW5jeV9vZl90cmF2ZWxzX2luX2Ficm9hZF9pbl9sYXN0XzEyX21vbnRoc193aXRoX2ZhbWlseWBbZGYkYDI3X0ZyZXF1ZW5jeV9vZl90cmF2ZWxzX2luX2Ficm9hZF9pbl9sYXN0XzEyX21vbnRoc193aXRoX2ZhbWlseWAgPT0gIlR3byB0aW1lcyIgXSA8LSAyCmRmJGAyN19GcmVxdWVuY3lfb2ZfdHJhdmVsc19pbl9hYnJvYWRfaW5fbGFzdF8xMl9tb250aHNfd2l0aF9mYW1pbHlgW2RmJGAyN19GcmVxdWVuY3lfb2ZfdHJhdmVsc19pbl9hYnJvYWRfaW5fbGFzdF8xMl9tb250aHNfd2l0aF9mYW1pbHlgID09ICJNb3JlIHRoYW4gdHdvIHRpbWVzIiBdIDwtIDMKCmRmJGAyNl9OdW1iZXJfb2ZfYmF0aHJvb21zX2F0X2hvbWVgW2RmJGAyNl9OdW1iZXJfb2ZfYmF0aHJvb21zX2F0X2hvbWVgID09ICJOb29uZSJdIDwtIDAKZGYkYDI2X051bWJlcl9vZl9iYXRocm9vbXNfYXRfaG9tZWBbZGYkYDI2X051bWJlcl9vZl9iYXRocm9vbXNfYXRfaG9tZWAgPT0gIk9uZSJdIDwtIDEKZGYkYDI2X051bWJlcl9vZl9iYXRocm9vbXNfYXRfaG9tZWBbZGYkYDI2X051bWJlcl9vZl9iYXRocm9vbXNfYXRfaG9tZWAgPT0gIlR3byJdIDwtIDIKZGYkYDI2X051bWJlcl9vZl9iYXRocm9vbXNfYXRfaG9tZWBbZGYkYDI2X051bWJlcl9vZl9iYXRocm9vbXNfYXRfaG9tZWAgPT0gIk1vcmUgdGhhbiB0d28iXSA8LSAzCgpkZiRgMjRFeGlzdGFuY2Vfb2Zfb3duX3Jvb21gIDwtIGFzLmludGVnZXIoZGYkYDI0RXhpc3RhbmNlX29mX293bl9yb29tYCkKZGYkYDI1TnVtYmVyX29mX2NvbXB1dGVyc19pbl9mYW1pbHlgIDwtIGFzLmludGVnZXIoZGYkYDI1TnVtYmVyX29mX2NvbXB1dGVyc19pbl9mYW1pbHlgKQpkZiRgMjdfRnJlcXVlbmN5X29mX3RyYXZlbHNfaW5fYWJyb2FkX2luX2xhc3RfMTJfbW9udGhzX3dpdGhfZmFtaWx5YCA8LSAgYXMuaW50ZWdlcihkZiRgMjdfRnJlcXVlbmN5X29mX3RyYXZlbHNfaW5fYWJyb2FkX2luX2xhc3RfMTJfbW9udGhzX3dpdGhfZmFtaWx5YCkKZGYkYDIzQ2Fyc19pbl9mYW1pbHlgIDwtICBhcy5pbnRlZ2VyKGRmJGAyM0NhcnNfaW5fZmFtaWx5YCkKZGYkYDI2X051bWJlcl9vZl9iYXRocm9vbXNfYXRfaG9tZWAgPC0gYXMuaW50ZWdlcihkZiRgMjZfTnVtYmVyX29mX2JhdGhyb29tc19hdF9ob21lYCkKCmBgYAoKCmBgYHtyIEZBU30KZGYgPC0gZGYgJT4lIAogIG11dGF0ZShGQVMgPSAKICAgICAgICAgICBgMjNDYXJzX2luX2ZhbWlseWAgKyAKICAgICAgICAgICBgMjRFeGlzdGFuY2Vfb2Zfb3duX3Jvb21gICsgCiAgICAgICAgICAgYDI1TnVtYmVyX29mX2NvbXB1dGVyc19pbl9mYW1pbHlgICsgCiAgICAgICAgICAgYDI3X0ZyZXF1ZW5jeV9vZl90cmF2ZWxzX2luX2Ficm9hZF9pbl9sYXN0XzEyX21vbnRoc193aXRoX2ZhbWlseWAgKwogICAgICAgICAgIGAyNl9OdW1iZXJfb2ZfYmF0aHJvb21zX2F0X2hvbWVgICkgJT4lCiAgbXV0YXRlKEZBU19jYXQgPSBpZmVsc2UoIEZBUyA+PSA5LCAiSGlnaCBhZmZsdWVuY2UiLCAKICAgICAgICAgICAgICAgICAgICBpZmVsc2UoIEZBUyA8PSA0ICwgIkxvdyBhZmZsdWVuY2UiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNaWRkbGUgYWZmbHVlbmNlIikpKQoKZGYkRkFTX2NhdCA8LSBvcmRlcmVkKGRmJEZBU19jYXQsIAogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygKICAgICAgICAgICAgICAgICAgICAgICAgIkhpZ2ggYWZmbHVlbmNlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICJNaWRkbGUgYWZmbHVlbmNlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICJMb3cgYWZmbHVlbmNlIgogICAgICAgICAgICAgICAgICAgICAgKSkKYGBgCgojIyMgT3JkZXIgZmFjdG9ycwoKR2l2ZSBvcmRlciB0byBmYWN0b3JzCmBgYHtyIG9yZGVyIGZhY3RvcnMsIGluY2x1ZGU9RkFMU0V9CmRmJGAzX1BhaW5fb3Jfb3RoZXJfZGVudGFsX2Rpc29yZGVyc19pbl9sYXN0XzEyX21vbnRoc2AgPC0gb3JkZXJlZChkZiRgM19QYWluX29yX290aGVyX2RlbnRhbF9kaXNvcmRlcnNfaW5fbGFzdF8xMl9tb250aHNgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTmV2ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmFyZSIgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUXVpdGUgT2Z0ZW4iICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9mdGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRvIG5vdCByZW1lbWJlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkKZGYkYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYCA8LSBvcmRlcmVkKGRmJGA0X0ZyZXF1ZW5jeV9vZl9kZW50aXN0X3Zpc2l0c19pbl9sYXN0XzEyX21vbnRoc2AsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTmV2ZXIgaGF2ZSBhdHRlbmRlZCIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGF2ZSBub3QgYXR0ZW5kZWQiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9uZSB0aW1lIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUd28gb3IgbW9yZSB0aW1lcyIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRG8gbm90IHJlbWVtYmVyIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkKZGYkYDVfUmVhc29uX3RvX2F0dGVuZF9kZW50aXN0YCA8LSBvcmRlcmVkKGRmJGA1X1JlYXNvbl90b19hdHRlbmRfZGVudGlzdGAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiUGFpbiBvciBvdGhlciBvcmFsIGRpc29yZGVycyIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hlY2stdXAiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5uZWQgdHJlYXRtZW50IgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEbyBub3QgcmVtZW1iZXIiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKQoKZGYkYDZQdWJsaWNfb3JfcHJpdmF0X2RlbnRpc3RgIDwtIG9yZGVyZWQoZGYkYDZQdWJsaWNfb3JfcHJpdmF0X2RlbnRpc3RgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiUHVibGljIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaXZhdCIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCb3RoIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRvIG5vdCBrbm93IgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKQoKZGYkYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCA8LSBvcmRlcmVkKGRmJGA3X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c2AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJOZXZlciBoYXZlIGF0dGVuZGVkIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMZXNzIHRoYW4gb25jZSBwZXIgeWVhciIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25lIHRpbWUgcGVyIHllYXIiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlR3byBvciBtb3JlIHRpbWVzIHBlciB5ZWFyIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEbyBub3QgcmVtZW1iZXIiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKQoKZGYkYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgIDwtIG9yZGVyZWQoZGYkYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiVHdvIG9yIG1vcmUgdGltZXMgcGVyIGRheSIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbmNlIHBlciBkYXkiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2V2ZXJhbCB0aW1lcyBwZXIgd2VlayIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbmNlIHBlciB3ZWVrIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvbWUgdGltZXMgcGVyIG1vbnRoIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ldmVyIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkKCmRmJGA5X1VzYWdlX29mX3Rvb3RocGFzdGVgIDwtIG9yZGVyZWQoZGYkYDlfVXNhZ2Vfb2ZfdG9vdGhwYXN0ZWAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlllcyIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZW1zIE5vIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8iKSkKCmRmJGA5X1VzYWdlX29mX3Rvb3RoYnJ1c2hgIDwtIG9yZGVyZWQoZGYkYDlfVXNhZ2Vfb2ZfdG9vdGhicnVzaGAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlllcyIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZW1zIE5vIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8iKSkKCmRmJGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgPC0gb3JkZXJlZChkZiRgOV9Vc2FnZV9vZl9kZW50YWxfZmxvc3NgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJZZXMiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWVtcyBObyIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIikpCgpkZiRgOV9Vc2FnZV9vZl90b290aF9waWNrc2AgPC0gb3JkZXJlZChkZiRgOV9Vc2FnZV9vZl90b290aF9waWNrc2AsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlllcyIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZW1zIE5vIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8iKSkKCmRmJGA5X1VzYWdlX29mX21vdXRoX3dhc2hgIDwtIG9yZGVyZWQoZGYkYDlfVXNhZ2Vfb2ZfbW91dGhfd2FzaGAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlllcyIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZW1zIE5vIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8iKSkKCmRmJGA5VXNhZ2Vfb2ZfdG91bmdlX2NsZWFuZXJgIDwtIG9yZGVyZWQoZGYkYDlVc2FnZV9vZl90b3VuZ2VfY2xlYW5lcmAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlllcyIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZW1zIE5vIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8iKSkKCmRmJGA5X1VzYWdlX29mX290aGVyX2h5Z2llbmVfYXBwbGlhbmNlYCA8LSBvcmRlcmVkKGRmJGA5X1VzYWdlX29mX290aGVyX2h5Z2llbmVfYXBwbGlhbmNlYCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiWWVzIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VlbXMgTm8iCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyIpKQpkZiRgMTBfRmx1b3JpZGVfaW5fdG9vdGhwYXN0ZWAgPC0gIG9yZGVyZWQoZGYkYDEwX0ZsdW9yaWRlX2luX3Rvb3RocGFzdGVgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlllcyIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8iCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRvIG5vdCBrbm93IgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkKCmRmJGAxMV9Vc2FnZV9vZl9mbHVvcmlkZV9zdXBwbGVtZW50c2AgPC0gIG9yZGVyZWQoZGYkYDExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzYCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiWWVzLCBub3ciCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZZXMsIGluIHBhc3QiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRvIG5vdCBrbm93IgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkKCmRmJGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgPC0gb3JkZXJlZChkZiRgMThfRnJlcXVlbmN5X29mX3Ntb2tpbmdgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkV2ZXJ5IGRheSIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXQgbGVhc3Qgb25jZSBwZXIgd2VlayBidXQgbm90IGV2ZXJ5IGRheSIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGVzcyB0aGFuIG9uY2UgcGVyIHdlZWsiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ldmVyIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkKCmRmJGAxOV9Ub2JhY2NvX3VzYWdlXyhub3Rfc21va2luZylfaW5fbGFzdF8zMF9kYXlzYCA8LSBvcmRlcmVkKGRmJGAxOV9Ub2JhY2NvX3VzYWdlXyhub3Rfc21va2luZylfaW5fbGFzdF8zMF9kYXlzYCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlllcyIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkKCmRmJGAyMF9Pd25fdG9vdGhicnVzaGAgPC0gb3JkZXJlZChkZiRgMjBfT3duX3Rvb3RoYnJ1c2hgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiWWVzIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb2dldGhlciB3aXRoIG90aGVyIGZhbWlseSBtZW1iZXIiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkKCmRmJGAyMl9BdmVyYWdlX3BvY2tldF9tb25leWAgPC0gIG9yZGVyZWQoZGYkYDIyX0F2ZXJhZ2VfcG9ja2V0X21vbmV5YCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiVXN1YWxseSBJIGRvIG5vdCBoYXZlIGEgcG9ja2V0IG1vbmV5IgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGVzcyB0aGFuIDIgZXVyb3MiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIGV1cm9zIHRvIDUgZXVyb3MiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI2IGV1cm9zIHRvMTAgZXVyb3MiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMSBldXJvcyB0bzE1IGV1cm9zIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTYgZXVyb3MgYW5kIG1vcmUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkKCmRmJGAyX0xpdmVfaW5gIDwtIG9yZGVyZWQoZGYkYDJfTGl2ZV9pbmAsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlJpZ2Egb3IgUGllcmlnYSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNpdHkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3duIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bnRyeSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKQoKYGBgCgpDcmVhdGUgbmV3IHZhcmlhYmxlcyBmb3Igc2Nob29sIGFuZCByZWdpb24KYGBge3IgcmVuYW1lIHNjaG9vbCBhbmQgcmVnaW9uc30KI0NvZGVzX1Nrb2xhcyA8LSByZWFkX2NzdigiLi9rb2Rlcy9Db2RlcyAtIFNrb2xhcy5jc3YiKQojQ29kZXNfUmVnaW9uIDwtIHJlYWRfY3N2KCIuL2tvZGVzL0NvZGVzIC0gUmVnaW9uLmNzdiIpCgojZGYgPC0gZGYgJT4lIAogIHJlbmFtZShSZWdpb25zS29kcyA9IGAzYV9SZWdpb25gKSAlPiUgCiAgcmVuYW1lKFNrb2xhc0tvZHMgPSBgM2JfU2Nob29sYCAgKSAKCiNkZiA8LSBkZiAlPiUgCiAgbGVmdF9qb2luKENvZGVzX1JlZ2lvbiwgYnk9IlJlZ2lvbnNLb2RzIikgJT4lIAogIGxlZnRfam9pbihDb2Rlc19Ta29sYXMsIGJ5PSJTa29sYXNLb2RzIikKCiNybShDb2Rlc19SZWdpb24pCiNybShDb2Rlc19Ta29sYXMpCmBgYAoKCnN1YnNldCAyMTM4CgpgYGB7ciBzdWJzZXQgMjAxMzh9CiMgZGY8LSBzYW1wbGVfbihkZiwgMjEzOCkgIyBOb3QgdXNlIHdpdGggZGZfZmluYWxfZGVjMTJfMjAxNi5jc3YKIyB3cml0ZS5jc3YoZGYsICJkZl9maW5hbF9kZWMxMl8yMDE2LmNzdiIpCmBgYAoKCipTdW1tYXJ5OiogCkRhdGFzZXQgICAgICAgICAgICAgICAgID0gMjkwNCByZWNvcmRzCkRhdGFzZXQgd2l0aG91dCBrYXBwYSAyID0gMjY4MiByZWNvcmRzCkRhdGFzZXQgb25seSBhZ2UgPSAxMiAgID0gMjEzOAoKRGF0YXNldCBjbGVhbiBhbmQgcmVhZHkgZm9yIGFuYWx5c2lzCgoKCiMgREVTQ1JJUFRJVkUKCiMjIEVEQQojIyMgVG90YWwgY2hpbGRyZW4KYGBge3IgdG90YWwgY2hpbGRyZW59CmFkZG1hcmdpbnModGFibGUoZGYkYDFfZ2VuZGVyYCkpCmBgYAoKYGBge3IgcGxvdCBjaGlsZHJlbn0KICBnZ3Bsb3QoZGYsIGFlcyhgMV9nZW5kZXJgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpCmBgYAoKIyMjIER6aW11bnMgUmVnaW9uCmBgYHtyIFRhYmxlIER6aW11bnMgcmVnaW9ufQpkZiAlPiUgCiAgZ3JvdXBfYnkoUmVnaW9uTmFtZSwgYDFfZ2VuZGVyYCkgJT4lIAogIHN1bW1hcmlzZShuPW4oKSkgJT4lIAogIHNwcmVhZChgMV9nZW5kZXJgLCBuKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzL0R6aW11bnNSZWdpb24uY3N2IikgIAoKZGYgJT4lIAogIGdyb3VwX2J5KFJlZ2lvbk5hbWUsIGAxX2dlbmRlcmApICU+JSAKICBzdW1tYXJpc2Uobj1uKCkpICU+JSAKICBzcHJlYWQoIGAxX2dlbmRlcmAsIG4pICU+JSAKICB1bmdyb3VwKCkKCmRmICU+JSAKICBnZ3Bsb3QoYWVzKFJlZ2lvbk5hbWUsIGZpbGw9YDFfZ2VuZGVyYCkpICsKICBnZW9tX2JhcigpICsKICBzY2FsZV9maWxsX2Rpc2NyZXRlKG5hbWU9IkxhYmVscyIpICsKICBsYWJzKHRpdGxlID0gIlRJVExFIiwgeCA9ICJ4bGFiIiwgeSA9ICJ5bGFiIikgKyAKICB0aGVtZV9taW5pbWFsKCkKYGBgCgojIyMgU2tvbGEgRHppbXVucwpgYGB7ciBUYWJsZSBTa29sYSBEemltdW5zfQpkZiAlPiUgCiAgZ3JvdXBfYnkoU2tvbGFOYW1lLCAgYDFfZ2VuZGVyYCkgJT4lIAogIHN1bW1hcmlzZShuPW4oKSkgJT4lIAogIHNwcmVhZCggYDFfZ2VuZGVyYCwgbikgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy9Ta29sYUR6aW11bnMuY3N2IikKCmRmICU+JSAKICBncm91cF9ieShTa29sYU5hbWUsICBgMV9nZW5kZXJgKSAlPiUgCiAgc3VtbWFyaXNlKG49bigpKSAlPiUgCiAgc3ByZWFkKCBgMV9nZW5kZXJgLCBuKSAlPiUgCiAgdW5ncm91cCgpCgpgYGAKCiMjIyBTa29sYSBSZWdpb24KYGBge3IgVGFibGUgc2Nob29sIGFuZCByZWdpb259CmRmICU+JSAKICBncm91cF9ieShTa29sYU5hbWUsIFJlZ2lvbk5hbWUpICU+JSAKICBzdW1tYXJpc2Uobj1uKCkpICU+JSAKICBzcHJlYWQoUmVnaW9uTmFtZSwgbikgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy9Ta29sYVJlZ2lvbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShTa29sYU5hbWUsIFJlZ2lvbk5hbWUpICU+JSAKICBzdW1tYXJpc2Uobj1uKCkpICU+JSAKICBzcHJlYWQoUmVnaW9uTmFtZSwgbikgJT4lIAogIHVuZ3JvdXAoKQoKYGBgCgoKYGBge3IgdGFibGUgcmVnaW9uIHNrb2xhfQp0YiA8LSB0YWJsZShkZiRTa29sYU5hbWUsIGRmJFJlZ2lvbk5hbWUpCndyaXRlLnRhYmxlKHRiLCBmaWxlID0gIi4vdGFibGVzL1RhYmxlIHNjaG9vbCBhbmQgcmVnaW9uLmNzdiIsIHNlcCA9ICI7Iiwgcm93Lm5hbWVzID0gVCwgY29sLm5hbWVzID0gVCk7IHJtKHRiKQpgYGAKCiMjIyBGQVMgZGVzY3JpcHRpdmUKCiMjIyBBbGwgRkFTCmBgYHtyIEZBUyBhbGx9CmRmICU+JSAKICBncm91cF9ieShGQVNfY2F0KSAlPiUgCiAgc3VtbWFyaXNlKG4oKSkKCmRmICU+JSAKICBncm91cF9ieShGQVNfY2F0KSAlPiUgCiAgc3VtbWFyaXNlKG4oKSkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy9GQVMuY3N2IikgCmBgYAoKIyMjIEZBUyBieSBnZW5kZXIKYGBge3IgRkFTIGdlbmRlcn0KZGYgJT4lIAogIGdyb3VwX2J5KEZBU19jYXQsIGAxX2dlbmRlcmApICU+JSAKICBzdW1tYXJpc2Uobj1uKCkpICU+JSAKICBzcHJlYWQoRkFTX2NhdCwgbikKCmRmICU+JSAKICBncm91cF9ieShGQVNfY2F0LCBgMV9nZW5kZXJgKSAlPiUgCiAgc3VtbWFyaXNlKG49bigpKSAlPiUgCiAgc3ByZWFkKEZBU19jYXQsIG4pICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvRkFTX2dlbmRlci5jc3YiKSAKYGBgCmBgYHtyIEZBUyBnZW5kZXIgdGFibGV9CmFkZG1hcmdpbnModGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkRkFTX2NhdCkpCgpgYGAKIAojIyMgRkFTIGJ5IHJlZ2lvbgpgYGB7ciBGQVMgUmVnaW9ufQpkZiAlPiUgCiAgZ3JvdXBfYnkoRkFTX2NhdCwgYFJlZ2lvbk5hbWVgKSAlPiUgCiAgc3VtbWFyaXNlKG49bigpKSAlPiUgCiAgc3ByZWFkKEZBU19jYXQsIG4pCmBgYApgYGB7ciBGQVMgcmVnaW9uIHRhYmxlfQp3cml0ZS50YWJsZShhZGRtYXJnaW5zKHRhYmxlKGRmJFJlZ2lvbk5hbWUsIGRmJEZBU19jYXQpKSwgIi4vdGFibGVzL2Zhc19yZWdpb24uY3N2IikKYGBgCgpgYGB7ciBGQVMgYnkgY2l0eSB0b3dufQpkZiAlPiUgCiAgZ3JvdXBfYnkoRkFTX2NhdCwgYDJfTGl2ZV9pbmApICU+JSAKICBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIAogIHNwcmVhZChGQVNfY2F0LCBuLCBmaWxsID0gMCkKCmRmICU+JSAKICBncm91cF9ieShGQVNfY2F0LCBgMl9MaXZlX2luYCkgJT4lIAogIHN1bW1hcmlzZShuID0gbigpKSAlPiUgCiAgc3ByZWFkKEZBU19jYXQsIG4sIGZpbGwgPSAwKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzL0ZBU19MaXZlX2luLmNzdiIpIApgYGAKCiMjIyBGQVMgcG9yIHBvY2tldCBtb25leQpgYGB7ciBGQVMgcG9ja2V0IG1vbmV5fQpkZiAlPiUgCiAgZ3JvdXBfYnkoYEZBU19jYXRgICwgYDIyX0F2ZXJhZ2VfcG9ja2V0X21vbmV5YCkgJT4lIAogIHN1bW1hcmlzZShuPSBuKCkpICU+JSAKICBzcHJlYWQoYEZBU19jYXRgLCBuKQoKZGYgJT4lIAogIGdyb3VwX2J5KGBGQVNfY2F0YCAsIGAyMl9BdmVyYWdlX3BvY2tldF9tb25leWApICU+JSAKICBzdW1tYXJpc2Uobj0gbigpKSAlPiUgCiAgc3ByZWFkKGBGQVNfY2F0YCwgbikgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy9GQVNfcG9ja2V0TW9uZXkuY3N2IikgCgpgYGAKCgoKCgojIyBEZXNjcmlwdGl2ZSBmb3IgcXVlc3Rpb25zCiMjIyBgM19QYWluX29yX290aGVyX2RlbnRhbF9kaXNvcmRlcnNfaW5fbGFzdF8xMl9tb250aHNgCmBgYHtyIGAzX1BhaW5fb3Jfb3RoZXJfZGVudGFsX2Rpc29yZGVyc19pbl9sYXN0XzEyX21vbnRoc2B9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgM19QYWluX29yX290aGVyX2RlbnRhbF9kaXNvcmRlcnNfaW5fbGFzdF8xMl9tb250aHNgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDNfUGFpbl9vcl9vdGhlcl9kZW50YWxfZGlzb3JkZXJzX2luX2xhc3RfMTJfbW9udGhzYCwgbiwgZmlsbD0wKSAKCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAzX1BhaW5fb3Jfb3RoZXJfZGVudGFsX2Rpc29yZGVyc19pbl9sYXN0XzEyX21vbnRoc2ApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgM19QYWluX29yX290aGVyX2RlbnRhbF9kaXNvcmRlcnNfaW5fbGFzdF8xMl9tb250aHNgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgM19QYWluX29yX290aGVyX2RlbnRhbF9kaXNvcmRlcnNfaW5fbGFzdF8xMl9tb250aHNgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDNfUGFpbl9vcl9vdGhlcl9kZW50YWxfZGlzb3JkZXJzX2luX2xhc3RfMTJfbW9udGhzYCwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAzX1BhaW5fb3Jfb3RoZXJfZGVudGFsX2Rpc29yZGVyc19pbl9sYXN0XzEyX21vbnRoc2ApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgM19QYWluX29yX290aGVyX2RlbnRhbF9kaXNvcmRlcnNfaW5fbGFzdF8xMl9tb250aHNgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvM19QYWluX29yX2luX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgM19QYWluX29yX290aGVyX2RlbnRhbF9kaXNvcmRlcnNfaW5fbGFzdF8xMl9tb250aHNgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDNfUGFpbl9vcl9vdGhlcl9kZW50YWxfZGlzb3JkZXJzX2luX2xhc3RfMTJfbW9udGhzYCwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzNfUGFpbl9vcl9pbl94X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgM19QYWluX29yX290aGVyX2RlbnRhbF9kaXNvcmRlcnNfaW5fbGFzdF8xMl9tb250aHNgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDNfUGFpbl9vcl9vdGhlcl9kZW50YWxfZGlzb3JkZXJzX2luX2xhc3RfMTJfbW9udGhzYCwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzNfUGFpbl9vcl9pbl94X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGAzX1BhaW5fb3Jfb3RoZXJfZGVudGFsX2Rpc29yZGVyc19pbl9sYXN0XzEyX21vbnRoc2ApKSAjIG9ubHkgd2l0aCBnZW5kZXIsIHNpbmNlIHNvbWUgcmVnaW9ucyBhbmQgY2l0aWVzIGhhdmUgMCAgCgpgYGAKIyMjIGA0X0ZyZXF1ZW5jeV9vZl9kZW50aXN0X3Zpc2l0c19pbl9sYXN0XzEyX21vbnRoc2AKYGBge3IgYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGA0X0ZyZXF1ZW5jeV9vZl9kZW50aXN0X3Zpc2l0c19pbl9sYXN0XzEyX21vbnRoc2ApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgNF9GcmVxdWVuY3lfb2ZfZGVudGlzdF92aXNpdHNfaW5fbGFzdF8xMl9tb250aHNgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGA0X0ZyZXF1ZW5jeV9vZl9kZW50aXN0X3Zpc2l0c19pbl9sYXN0XzEyX21vbnRoc2ApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgNF9GcmVxdWVuY3lfb2ZfZGVudGlzdF92aXNpdHNfaW5fbGFzdF8xMl9tb250aHNgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgNF9GcmVxdWVuY3lfb2ZfZGVudGlzdF92aXNpdHNfaW5fbGFzdF8xMl9tb250aHNgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYCwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGA0X0ZyZXF1ZW5jeV9vZl9kZW50aXN0X3Zpc2l0c19pbl9sYXN0XzEyX21vbnRoc2ApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgNF9GcmVxdWVuY3lfb2ZfZGVudGlzdF92aXNpdHNfaW5fbGFzdF8xMl9tb250aHNgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvNF9GcmVxdWVuY3lfb2ZfZGVudGlzdF92aXNpdHNfeF9nZW5kZXIuY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGA0X0ZyZXF1ZW5jeV9vZl9kZW50aXN0X3Zpc2l0c19pbl9sYXN0XzEyX21vbnRoc2ApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgNF9GcmVxdWVuY3lfb2ZfZGVudGlzdF92aXNpdHNfaW5fbGFzdF8xMl9tb250aHNgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvNF9GcmVxdWVuY3lfb2ZfZGVudGlzdF92aXNpdHNuX3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGA0X0ZyZXF1ZW5jeV9vZl9kZW50aXN0X3Zpc2l0c19pbl9sYXN0XzEyX21vbnRoc2ApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgNF9GcmVxdWVuY3lfb2ZfZGVudGlzdF92aXNpdHNfaW5fbGFzdF8xMl9tb250aHNgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvNF9GcmVxdWVuY3lfb2ZfZGVudGlzdF92aXNpdHNfaW5feF9yZWdpb24uY3N2IikgCgoKYGBgCiMjIyBgNV9SZWFzb25fdG9fYXR0ZW5kX2RlbnRpc3RgCmBgYHtyIDVfUmVhc29uX3RvX2F0dGVuZF9kZW50aXN0fQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDVfUmVhc29uX3RvX2F0dGVuZF9kZW50aXN0YCkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA1X1JlYXNvbl90b19hdHRlbmRfZGVudGlzdGAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDVfUmVhc29uX3RvX2F0dGVuZF9kZW50aXN0YCkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA1X1JlYXNvbl90b19hdHRlbmRfZGVudGlzdGAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGA1X1JlYXNvbl90b19hdHRlbmRfZGVudGlzdGApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgNV9SZWFzb25fdG9fYXR0ZW5kX2RlbnRpc3RgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDVfUmVhc29uX3RvX2F0dGVuZF9kZW50aXN0YCkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA1X1JlYXNvbl90b19hdHRlbmRfZGVudGlzdGAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy81X1JlYXNvbl90b19hdHRlbmRfZGVudGlzdF94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDVfUmVhc29uX3RvX2F0dGVuZF9kZW50aXN0YCkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA1X1JlYXNvbl90b19hdHRlbmRfZGVudGlzdGAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy81X1JlYXNvbl90b19hdHRlbmRfZGVudGlzdF94X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgNV9SZWFzb25fdG9fYXR0ZW5kX2RlbnRpc3RgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDVfUmVhc29uX3RvX2F0dGVuZF9kZW50aXN0YCwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzVfUmVhc29uX3RvX2F0dGVuZF9kZW50aXN0X2luX3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDVfUmVhc29uX3RvX2F0dGVuZF9kZW50aXN0YCkpICMgb25seSB3aXRoIGdlbmRlciwgc2luY2Ugc29tZSByZWdpb25zIGFuZCBjaXRpZXMgaGF2ZSAwICAKCmBgYAojIyMgYDZQdWJsaWNfb3JfcHJpdmF0X2RlbnRpc3RgCmBgYHtyIGA2UHVibGljX29yX3ByaXZhdF9kZW50aXN0YH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGA2UHVibGljX29yX3ByaXZhdF9kZW50aXN0YCkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA2UHVibGljX29yX3ByaXZhdF9kZW50aXN0YCwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgNlB1YmxpY19vcl9wcml2YXRfZGVudGlzdGApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgNlB1YmxpY19vcl9wcml2YXRfZGVudGlzdGAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGA2UHVibGljX29yX3ByaXZhdF9kZW50aXN0YCkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA2UHVibGljX29yX3ByaXZhdF9kZW50aXN0YCwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGA2UHVibGljX29yX3ByaXZhdF9kZW50aXN0YCkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA2UHVibGljX29yX3ByaXZhdF9kZW50aXN0YCwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzZQdWJsaWNfb3JfcHJpdmF0X2RlbnRpc3RfeF9nZW5kZXIuY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGA2UHVibGljX29yX3ByaXZhdF9kZW50aXN0YCkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA2UHVibGljX29yX3ByaXZhdF9kZW50aXN0YCwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzZQdWJsaWNfb3JfcHJpdmF0X2RlbnRpc3RfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDZQdWJsaWNfb3JfcHJpdmF0X2RlbnRpc3RgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDZQdWJsaWNfb3JfcHJpdmF0X2RlbnRpc3RgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvNlB1YmxpY19vcl9wcml2YXRfZGVudGlzdF9pbl94X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGA2UHVibGljX29yX3ByaXZhdF9kZW50aXN0YCkpICMgb25seSB3aXRoIGdlbmRlciwgc2luY2Ugc29tZSByZWdpb25zIGFuZCBjaXRpZXMgaGF2ZSAwICAKCmBgYAojIyMgYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYApgYGB7ciBgN19GcmVxdWVuY3lfb2ZfZGVudGFsX2h5Z2llbmlzdF92aXNpdHNgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA3X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c2AsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA3X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c2AsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGA3X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c2ApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgN19GcmVxdWVuY3lfb2ZfZGVudGFsX2h5Z2llbmlzdF92aXNpdHNgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA3X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c2AsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy83X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c194X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA3X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c2AsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy83X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c194X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgN19GcmVxdWVuY3lfb2ZfZGVudGFsX2h5Z2llbmlzdF92aXNpdHNgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzX2luX3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCkpICMgb25seSB3aXRoIGdlbmRlciwgc2luY2Ugc29tZSByZWdpb25zIGFuZCBjaXRpZXMgaGF2ZSAwICAKCmBgYAojIyMgYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgIApgYGB7ciBgOF9GcmVxdWVuY3lfb2ZfdG9vdGhicnVzaGluZ2AgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOF9GcmVxdWVuY3lfb2ZfdG9vdGhicnVzaGluZ2AgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy84X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgOF9GcmVxdWVuY3lfb2ZfdG9vdGhicnVzaGluZ2AgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy84X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nX3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgICkpICMgb25seSB3aXRoIGdlbmRlciwgc2luY2Ugc29tZSByZWdpb25zIGFuZCBjaXRpZXMgaGF2ZSAwICAKCmBgYAojIyMgYDlfVXNhZ2Vfb2ZfdG9vdGhwYXN0ZWAgCmBgYHtyIGA5X1VzYWdlX29mX3Rvb3RocGFzdGVgIH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGA5X1VzYWdlX29mX3Rvb3RocGFzdGVgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5X1VzYWdlX29mX3Rvb3RocGFzdGVgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgOV9Vc2FnZV9vZl90b290aHBhc3RlYCApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl90b290aHBhc3RlYCAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGA5X1VzYWdlX29mX3Rvb3RocGFzdGVgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5X1VzYWdlX29mX3Rvb3RocGFzdGVgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGA5X1VzYWdlX29mX3Rvb3RocGFzdGVgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5X1VzYWdlX29mX3Rvb3RocGFzdGVgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzlfVXNhZ2Vfb2ZfdG9vdGhwYXN0ZV94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDlfVXNhZ2Vfb2ZfdG9vdGhwYXN0ZWAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDlfVXNhZ2Vfb2ZfdG9vdGhwYXN0ZWAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvOV9Vc2FnZV9vZl90b290aHBhc3RlX3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGA5X1VzYWdlX29mX3Rvb3RocGFzdGVgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5X1VzYWdlX29mX3Rvb3RocGFzdGVgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzlfVXNhZ2Vfb2ZfdG9vdGhwYXN0ZV94X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGA5X1VzYWdlX29mX3Rvb3RocGFzdGVgICkpICMgb25seSB3aXRoIGdlbmRlciwgc2luY2Ugc29tZSByZWdpb25zIGFuZCBjaXRpZXMgaGF2ZSAwICAKCmBgYAoKIyMjIGA5X1VzYWdlX29mX3Rvb3RoYnJ1c2hgIApgYGB7ciBgOV9Vc2FnZV9vZl90b290aGJydXNoYCB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgOV9Vc2FnZV9vZl90b290aGJydXNoYCApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl90b290aGJydXNoYCAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDlfVXNhZ2Vfb2ZfdG9vdGhicnVzaGAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDlfVXNhZ2Vfb2ZfdG9vdGhicnVzaGAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgOV9Vc2FnZV9vZl90b290aGJydXNoYCApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl90b290aGJydXNoYCAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgOV9Vc2FnZV9vZl90b290aGJydXNoYCApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl90b290aGJydXNoYCAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy85X1VzYWdlX29mX3Rvb3RoYnJ1c2hfeF9nZW5kZXIuY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGA5X1VzYWdlX29mX3Rvb3RoYnJ1c2hgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5X1VzYWdlX29mX3Rvb3RoYnJ1c2hgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzlfVXNhZ2Vfb2ZfdG9vdGhicnVzaF94X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgOV9Vc2FnZV9vZl90b290aGJydXNoYCApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl90b290aGJydXNoYCAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy85X1VzYWdlX29mX3Rvb3RoYnJ1c2hfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgOV9Vc2FnZV9vZl90b290aGJydXNoYCApKSAjIG9ubHkgd2l0aCBnZW5kZXIsIHNpbmNlIHNvbWUgcmVnaW9ucyBhbmQgY2l0aWVzIGhhdmUgMCAgCgpgYGAKIyMjIGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgCmBgYHtyIGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDlfVXNhZ2Vfb2ZfZGVudGFsX2Zsb3NzYCApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl9kZW50YWxfZmxvc3NgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgOV9Vc2FnZV9vZl9kZW50YWxfZmxvc3NgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgOV9Vc2FnZV9vZl9kZW50YWxfZmxvc3NgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDlfVXNhZ2Vfb2ZfZGVudGFsX2Zsb3NzYCApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl9kZW50YWxfZmxvc3NgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzlfVXNhZ2Vfb2ZfZGVudGFsX2Zsb3NzX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgOV9Vc2FnZV9vZl9kZW50YWxfZmxvc3NgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvOV9Vc2FnZV9vZl9kZW50YWxfZmxvc3NgX3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDlfVXNhZ2Vfb2ZfZGVudGFsX2Zsb3NzYCAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy85X1VzYWdlX29mX2RlbnRhbF9mbG9zc194X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgKSkgIyBvbmx5IHdpdGggZ2VuZGVyLCBzaW5jZSBzb21lIHJlZ2lvbnMgYW5kIGNpdGllcyBoYXZlIDAgIAoKYGBgCiMjIyBgOV9Vc2FnZV9vZl90b290aF9waWNrc2AgIApgYGB7ciBgOV9Vc2FnZV9vZl90b290aF9waWNrc2AgIH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGA5X1VzYWdlX29mX3Rvb3RoX3BpY2tzYCAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDlfVXNhZ2Vfb2ZfdG9vdGhfcGlja3NgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDlfVXNhZ2Vfb2ZfdG9vdGhfcGlja3NgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl90b290aF9waWNrc2AgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDlfVXNhZ2Vfb2ZfdG9vdGhfcGlja3NgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl90b290aF9waWNrc2AgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGA5X1VzYWdlX29mX3Rvb3RoX3BpY2tzYCAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDlfVXNhZ2Vfb2ZfdG9vdGhfcGlja3NgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy85X1VzYWdlX29mX3Rvb3RoX3BpY2tzX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgOV9Vc2FnZV9vZl90b290aF9waWNrc2AgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5X1VzYWdlX29mX3Rvb3RoX3BpY2tzYCAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvOV9Vc2FnZV9vZl90b290aF9waWNrc194X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgOV9Vc2FnZV9vZl90b290aF9waWNrc2AgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5X1VzYWdlX29mX3Rvb3RoX3BpY2tzYCAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvOV9Vc2FnZV9vZl90b290aF9waWNrc194X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGA5X1VzYWdlX29mX3Rvb3RoX3BpY2tzYCApKSAjIG9ubHkgd2l0aCBnZW5kZXIsIHNpbmNlIHNvbWUgcmVnaW9ucyBhbmQgY2l0aWVzIGhhdmUgMCAgCgpgYGAKIyMjIGA5X1VzYWdlX29mX21vdXRoX3dhc2hgICAKYGBge3IgYDlfVXNhZ2Vfb2ZfbW91dGhfd2FzaGAgIH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGA5X1VzYWdlX29mX21vdXRoX3dhc2hgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl9tb3V0aF93YXNoYCAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGA5X1VzYWdlX29mX21vdXRoX3dhc2hgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl9tb3V0aF93YXNoYCAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgOV9Vc2FnZV9vZl9tb3V0aF93YXNoYCAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDlfVXNhZ2Vfb2ZfbW91dGhfd2FzaGAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGA5X1VzYWdlX29mX21vdXRoX3dhc2hgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl9tb3V0aF93YXNoYCAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvOV9Vc2FnZV9vZl9tb3V0aF93YXNoX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgOV9Vc2FnZV9vZl9tb3V0aF93YXNoYCAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDlfVXNhZ2Vfb2ZfbW91dGhfd2FzaGAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzlfVXNhZ2Vfb2ZfbW91dGhfd2FzaF94X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgOV9Vc2FnZV9vZl9tb3V0aF93YXNoYCAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDlfVXNhZ2Vfb2ZfbW91dGhfd2FzaGAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzlfVXNhZ2Vfb2ZfbW91dGhfd2FzaF94X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGA5X1VzYWdlX29mX21vdXRoX3dhc2hgICkpICMgb25seSB3aXRoIGdlbmRlciwgc2luY2Ugc29tZSByZWdpb25zIGFuZCBjaXRpZXMgaGF2ZSAwICAKCmBgYAojIyMgYDlVc2FnZV9vZl90b3VuZ2VfY2xlYW5lcmAgICAKYGBge3IgYDlVc2FnZV9vZl90b3VuZ2VfY2xlYW5lcmAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgOVVzYWdlX29mX3RvdW5nZV9jbGVhbmVyYCAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5VXNhZ2Vfb2ZfdG91bmdlX2NsZWFuZXJgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGA5VXNhZ2Vfb2ZfdG91bmdlX2NsZWFuZXJgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDlVc2FnZV9vZl90b3VuZ2VfY2xlYW5lcmAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGA5VXNhZ2Vfb2ZfdG91bmdlX2NsZWFuZXJgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDlVc2FnZV9vZl90b3VuZ2VfY2xlYW5lcmAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgOVVzYWdlX29mX3RvdW5nZV9jbGVhbmVyYCAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5VXNhZ2Vfb2ZfdG91bmdlX2NsZWFuZXJgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvOVVzYWdlX29mX3RvdW5nZV9jbGVhbmVyX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgOVVzYWdlX29mX3RvdW5nZV9jbGVhbmVyYCAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5VXNhZ2Vfb2ZfdG91bmdlX2NsZWFuZXJgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvOVVzYWdlX29mX3RvdW5nZV9jbGVhbmVyX3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGA5VXNhZ2Vfb2ZfdG91bmdlX2NsZWFuZXJgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDlVc2FnZV9vZl90b3VuZ2VfY2xlYW5lcmAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy85VXNhZ2Vfb2ZfdG91bmdlX2NsZWFuZXJfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgOVVzYWdlX29mX3RvdW5nZV9jbGVhbmVyYCApKSAjIG9ubHkgd2l0aCBnZW5kZXIsIHNpbmNlIHNvbWUgcmVnaW9ucyBhbmQgY2l0aWVzIGhhdmUgMCAgCgpgYGAKIyMjIGA5X1VzYWdlX29mX290aGVyX2h5Z2llbmVfYXBwbGlhbmNlYCAgIApgYGB7ciBgOV9Vc2FnZV9vZl9vdGhlcl9oeWdpZW5lX2FwcGxpYW5jZWAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgOV9Vc2FnZV9vZl9vdGhlcl9oeWdpZW5lX2FwcGxpYW5jZWAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl9vdGhlcl9oeWdpZW5lX2FwcGxpYW5jZWAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDlfVXNhZ2Vfb2Zfb3RoZXJfaHlnaWVuZV9hcHBsaWFuY2VgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDlfVXNhZ2Vfb2Zfb3RoZXJfaHlnaWVuZV9hcHBsaWFuY2VgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgOV9Vc2FnZV9vZl9vdGhlcl9oeWdpZW5lX2FwcGxpYW5jZWAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl9vdGhlcl9oeWdpZW5lX2FwcGxpYW5jZWAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgOV9Vc2FnZV9vZl9vdGhlcl9oeWdpZW5lX2FwcGxpYW5jZWAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl9vdGhlcl9oeWdpZW5lX2FwcGxpYW5jZWAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy85X1VzYWdlX29mX290aGVyX2h5Z2llbmVfYXBwbGlhbmNlX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgOV9Vc2FnZV9vZl9vdGhlcl9oeWdpZW5lX2FwcGxpYW5jZWAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgOV9Vc2FnZV9vZl9vdGhlcl9oeWdpZW5lX2FwcGxpYW5jZWAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy85X1VzYWdlX29mX290aGVyX2h5Z2llbmVfYXBwbGlhbmNlX3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGA5X1VzYWdlX29mX290aGVyX2h5Z2llbmVfYXBwbGlhbmNlYCAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGA5X1VzYWdlX29mX290aGVyX2h5Z2llbmVfYXBwbGlhbmNlYCAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzlfVXNhZ2Vfb2Zfb3RoZXJfaHlnaWVuZV9hcHBsaWFuY2VfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgOVVzYWdlX29mX3RvdW5nZV9jbGVhbmVyYCApKSAjIG9ubHkgd2l0aCBnZW5kZXIsIHNpbmNlIHNvbWUgcmVnaW9ucyBhbmQgY2l0aWVzIGhhdmUgMCAgCgpgYGAKIyMjIGAxMF9GbHVvcmlkZV9pbl90b290aHBhc3RlYCAgIApgYGB7ciBgMTBfRmx1b3JpZGVfaW5fdG9vdGhwYXN0ZWAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTBfRmx1b3JpZGVfaW5fdG9vdGhwYXN0ZWAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTBfRmx1b3JpZGVfaW5fdG9vdGhwYXN0ZWAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDEwX0ZsdW9yaWRlX2luX3Rvb3RocGFzdGVgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDEwX0ZsdW9yaWRlX2luX3Rvb3RocGFzdGVgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTBfRmx1b3JpZGVfaW5fdG9vdGhwYXN0ZWAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTBfRmx1b3JpZGVfaW5fdG9vdGhwYXN0ZWAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTBfRmx1b3JpZGVfaW5fdG9vdGhwYXN0ZWAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTBfRmx1b3JpZGVfaW5fdG9vdGhwYXN0ZWAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xMF9GbHVvcmlkZV9pbl90b290aHBhc3RlX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTBfRmx1b3JpZGVfaW5fdG9vdGhwYXN0ZWAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTBfRmx1b3JpZGVfaW5fdG9vdGhwYXN0ZWAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xMF9GbHVvcmlkZV9pbl90b290aHBhc3RlX3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxMF9GbHVvcmlkZV9pbl90b290aHBhc3RlYCAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxMF9GbHVvcmlkZV9pbl90b290aHBhc3RlYCAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzEwX0ZsdW9yaWRlX2luX3Rvb3RocGFzdGVfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgMTBfRmx1b3JpZGVfaW5fdG9vdGhwYXN0ZWAgKSkgIyBvbmx5IHdpdGggZ2VuZGVyLCBzaW5jZSBzb21lIHJlZ2lvbnMgYW5kIGNpdGllcyBoYXZlIDAgIAoKYGBgCiMjIyBgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICAgIApgYGB7ciBgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzYCAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxMV9Vc2FnZV9vZl9mbHVvcmlkZV9zdXBwbGVtZW50c2AgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxMV9Vc2FnZV9vZl9mbHVvcmlkZV9zdXBwbGVtZW50c2AgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzYCAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxMV9Vc2FnZV9vZl9mbHVvcmlkZV9zdXBwbGVtZW50c2AgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzYCAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzX3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzYCApKSAjIG9ubHkgd2l0aCBnZW5kZXIsIHNpbmNlIHNvbWUgcmVnaW9ucyBhbmQgY2l0aWVzIGhhdmUgMCAgCgpgYGAKIyMjIGAxMl9TZWxmZXZhbHVhdGVkX29yYWxfaHlnaWVuZV9jYXJlYCAgICAKYGBge3IgYDEyX1NlbGZldmFsdWF0ZWRfb3JhbF9oeWdpZW5lX2NhcmVgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDEyX1NlbGZldmFsdWF0ZWRfb3JhbF9oeWdpZW5lX2NhcmVgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxMl9TZWxmZXZhbHVhdGVkX29yYWxfaHlnaWVuZV9jYXJlYCAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDEyX1NlbGZldmFsdWF0ZWRfb3JhbF9oeWdpZW5lX2NhcmVgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxMl9TZWxmZXZhbHVhdGVkX29yYWxfaHlnaWVuZV9jYXJlYCAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxMl9TZWxmZXZhbHVhdGVkX29yYWxfaHlnaWVuZV9jYXJlYCAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTJfU2VsZmV2YWx1YXRlZF9vcmFsX2h5Z2llbmVfY2FyZWAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDEyX1NlbGZldmFsdWF0ZWRfb3JhbF9oeWdpZW5lX2NhcmVgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxMl9TZWxmZXZhbHVhdGVkX29yYWxfaHlnaWVuZV9jYXJlYCAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xMl9TZWxmZXZhbHVhdGVkX29yYWxfaHlnaWVuZV9jYXJlX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTJfU2VsZmV2YWx1YXRlZF9vcmFsX2h5Z2llbmVfY2FyZWAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDEyX1NlbGZldmFsdWF0ZWRfb3JhbF9oeWdpZW5lX2NhcmVgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzEyX1NlbGZldmFsdWF0ZWRfb3JhbF9oeWdpZW5lX2NhcmVfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDEyX1NlbGZldmFsdWF0ZWRfb3JhbF9oeWdpZW5lX2NhcmVgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxMl9TZWxmZXZhbHVhdGVkX29yYWxfaHlnaWVuZV9jYXJlYCAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xMl9TZWxmZXZhbHVhdGVkX29yYWxfaHlnaWVuZV9jYXJlX3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzYCApKSAjIG9ubHkgd2l0aCBnZW5kZXIsIHNpbmNlIHNvbWUgcmVnaW9ucyBhbmQgY2l0aWVzIGhhdmUgMCAgCgpgYGAKIyMjIGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICAgICAKYGBge3IgYDEzX0VhdGluZ19oYWJpdHNfZ3JvdXBlZGAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDEzX0VhdGluZ19oYWJpdHNfZ3JvdXBlZGAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDEzX0VhdGluZ19oYWJpdHNfZ3JvdXBlZGAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTNfRWF0aW5nX2hhYml0c19ncm91cGVkYCAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDEzX0VhdGluZ19oYWJpdHNfZ3JvdXBlZGAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRfeF9nZW5kZXIuY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTNfRWF0aW5nX2hhYml0c19ncm91cGVkYCAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTNfRWF0aW5nX2hhYml0c19ncm91cGVkX3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTNfRWF0aW5nX2hhYml0c19ncm91cGVkYCAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTNfRWF0aW5nX2hhYml0c19ncm91cGVkX3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDEzX0VhdGluZ19oYWJpdHNfZ3JvdXBlZGAgKSkgIyBvbmx5IHdpdGggZ2VuZGVyLCBzaW5jZSBzb21lIHJlZ2lvbnMgYW5kIGNpdGllcyBoYXZlIDAgIAoKYGBgCiMjIyBgMTRfU3dlZXRfeW9ndXJ0X3dlZWtseWAgICAgCmBgYHtyIGAxNF9Td2VldF95b2d1cnRfd2Vla2x5YCAgIH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNF9Td2VldF95b2d1cnRfd2Vla2x5YCAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X1N3ZWV0X3lvZ3VydF93ZWVrbHlgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X1N3ZWV0X3lvZ3VydF93ZWVrbHlgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3dlZXRfeW9ndXJ0X3dlZWtseWAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE0X1N3ZWV0X3lvZ3VydF93ZWVrbHlgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3dlZXRfeW9ndXJ0X3dlZWtseWAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNF9Td2VldF95b2d1cnRfd2Vla2x5YCAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X1N3ZWV0X3lvZ3VydF93ZWVrbHlgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9Td2VldF95b2d1cnRfd2Vla2x5X3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRfU3dlZXRfeW9ndXJ0X3dlZWtseWAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Td2VldF95b2d1cnRfd2Vla2x5YCAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfU3dlZXRfeW9ndXJ0X3dlZWtseV94X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTRfU3dlZXRfeW9ndXJ0X3dlZWtseWAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Td2VldF95b2d1cnRfd2Vla2x5YCAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfU3dlZXRfeW9ndXJ0X3dlZWtseV94X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGAxNF9Td2VldF95b2d1cnRfd2Vla2x5YCApKSAjIG9ubHkgd2l0aCBnZW5kZXIsIHNpbmNlIHNvbWUgcmVnaW9ucyBhbmQgY2l0aWVzIGhhdmUgMCAgCgpgYGAKIyMjIGAxNF9Td2VldF9taWxrX3dlZWtseWAgICAgICAKYGBge3IgYDE0X1N3ZWV0X21pbGtfd2Vla2x5YCAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X1N3ZWV0X21pbGtfd2Vla2x5YCAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3dlZXRfbWlsa193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRfU3dlZXRfbWlsa193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Td2VldF9taWxrX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTRfU3dlZXRfbWlsa193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Td2VldF9taWxrX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X1N3ZWV0X21pbGtfd2Vla2x5YCAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3dlZXRfbWlsa193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X1N3ZWV0X21pbGtfd2Vla2x5X3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRfU3dlZXRfbWlsa193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Td2VldF9taWxrX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfU3dlZXRfbWlsa193ZWVrbHlfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE0X1N3ZWV0X21pbGtfd2Vla2x5YCAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3dlZXRfbWlsa193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X1N3ZWV0X21pbGtfd2Vla2x5X3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE0X1N3ZWV0X21pbGtfd2Vla2x5YCApKSAjIG9ubHkgd2l0aCBnZW5kZXIsIHNpbmNlIHNvbWUgcmVnaW9ucyBhbmQgY2l0aWVzIGhhdmUgMCAgCgpgYGAKIyMjIGAxNF9Td2VldF9jcmVhbXNfd2Vla2x5YApgYGB7ciBgMTRfU3dlZXRfY3JlYW1zX3dlZWtseWAgICAgIH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNF9Td2VldF9jcmVhbXNfd2Vla2x5YCAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3dlZXRfY3JlYW1zX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9Td2VldF9jcmVhbXNfd2Vla2x5YCAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3dlZXRfY3JlYW1zX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTRfU3dlZXRfY3JlYW1zX3dlZWtseWAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X1N3ZWV0X2NyZWFtc193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNF9Td2VldF9jcmVhbXNfd2Vla2x5YCAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3dlZXRfY3JlYW1zX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfU3dlZXRfY3JlYW1zX3dlZWtseV94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X1N3ZWV0X2NyZWFtc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Td2VldF9jcmVhbXNfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9Td2VldF9jcmVhbXNfd2Vla2x5X3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9Td2VldF9jcmVhbXNfd2Vla2x5YCAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3dlZXRfY3JlYW1zX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfU3dlZXRfY3JlYW1zX3dlZWtseV94X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGAxNF9Td2VldF9jcmVhbXNfd2Vla2x5YCApKSAjIG9ubHkgd2l0aCBnZW5kZXIsIHNpbmNlIHNvbWUgcmVnaW9ucyBhbmQgY2l0aWVzIGhhdmUgMCAgCgpgYGAKIyMjIGAxNF9LYXJ1bXNfd2Vla2x5YCAgICAgICAKYGBge3IgYDE0X0thcnVtc193ZWVrbHlgICAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X0thcnVtc193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfS2FydW1zX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRfS2FydW1zX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9LYXJ1bXNfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTRfS2FydW1zX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9LYXJ1bXNfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X0thcnVtc193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfS2FydW1zX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0thcnVtc193ZWVrbHlfeF9nZW5kZXIuY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9LYXJ1bXNfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0thcnVtc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9LYXJ1bXNfd2Vla2x5X3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9LYXJ1bXNfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0thcnVtc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9LYXJ1bXNfd2Vla2x5X3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE0X0thcnVtc193ZWVrbHlgICkpICMgb25seSB3aXRoIGdlbmRlciwgc2luY2Ugc29tZSByZWdpb25zIGFuZCBjaXRpZXMgaGF2ZSAwICAKCmBgYAojIyMgYDE0X0JyZWFkX3dlZWtseWAgICAgICAKYGBge3IgYDE0X0JyZWFkX3dlZWtseWAgICAgIH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNF9CcmVhZF93ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQnJlYWRfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9CcmVhZF93ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQnJlYWRfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTRfQnJlYWRfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0JyZWFkX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNF9CcmVhZF93ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQnJlYWRfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfQnJlYWRfd2Vla2x5X3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRfQnJlYWRfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0JyZWFkX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0JyZWFkX3dlZWtseV94X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTRfQnJlYWRfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0JyZWFkX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0JyZWFkX3dlZWtseV94X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGAxNF9CcmVhZF93ZWVrbHlgICkpICMgb25seSB3aXRoIGdlbmRlciwgc2luY2Ugc29tZSByZWdpb25zIGFuZCBjaXRpZXMgaGF2ZSAwICAKCmBgYAojIyMgYDE0X0Nvcm5mbGFrZXNfbm90X3N3ZWV0ZW5lZF93ZWVrbHlgICAgICAgCmBgYHtyIGAxNF9Db3JuZmxha2VzX25vdF9zd2VldGVuZWRfd2Vla2x5YCAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X0Nvcm5mbGFrZXNfbm90X3N3ZWV0ZW5lZF93ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQ29ybmZsYWtlc19ub3Rfc3dlZXRlbmVkX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRfQ29ybmZsYWtlc19ub3Rfc3dlZXRlbmVkX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Db3JuZmxha2VzX25vdF9zd2VldGVuZWRfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTRfQ29ybmZsYWtlc19ub3Rfc3dlZXRlbmVkX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Db3JuZmxha2VzX25vdF9zd2VldGVuZWRfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X0Nvcm5mbGFrZXNfbm90X3N3ZWV0ZW5lZF93ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQ29ybmZsYWtlc19ub3Rfc3dlZXRlbmVkX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0Nvcm5mbGFrZXNfbm90X3N3ZWV0ZW5lZF93ZWVrbHlfeF9nZW5kZXIuY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9Db3JuZmxha2VzX25vdF9zd2VldGVuZWRfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0Nvcm5mbGFrZXNfbm90X3N3ZWV0ZW5lZF93ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9Db3JuZmxha2VzX25vdF9zd2VldGVuZWRfd2Vla2x5X3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9Db3JuZmxha2VzX25vdF9zd2VldGVuZWRfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0Nvcm5mbGFrZXNfbm90X3N3ZWV0ZW5lZF93ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9Db3JuZmxha2VzX25vdF9zd2VldGVuZWRfd2Vla2x5X3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE0X0Nvcm5mbGFrZXNfbm90X3N3ZWV0ZW5lZF93ZWVrbHlgICkpICMgb25seSB3aXRoIGdlbmRlciwgc2luY2Ugc29tZSByZWdpb25zIGFuZCBjaXRpZXMgaGF2ZSAwICAKCmBgYAojIyMgYDE0X0Nhbm5lZF9mcnVpdHNfd2Vla2x5YApgYGB7ciBgMTRfQ2FubmVkX2ZydWl0c193ZWVrbHlgICAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfQ2FubmVkX2ZydWl0c193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQ2FubmVkX2ZydWl0c193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X0Nhbm5lZF9mcnVpdHNfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0Nhbm5lZF9mcnVpdHNfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTRfQ2FubmVkX2ZydWl0c193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQ2FubmVkX2ZydWl0c193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfQ2FubmVkX2ZydWl0c193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQ2FubmVkX2ZydWl0c193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9DYW5uZWRfZnJ1aXRzX3dlZWtseV94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X0Nhbm5lZF9mcnVpdHNfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0Nhbm5lZF9mcnVpdHNfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfQ2FubmVkX2ZydWl0c193ZWVrbHlfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE0X0Nhbm5lZF9mcnVpdHNfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0Nhbm5lZF9mcnVpdHNfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfQ2FubmVkX2ZydWl0c193ZWVrbHlfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgMTRfQ2FubmVkX2ZydWl0c193ZWVrbHlgICkpICMgb25seSB3aXRoIGdlbmRlciwgc2luY2Ugc29tZSByZWdpb25zIGFuZCBjaXRpZXMgaGF2ZSAwICAKCmBgYAojIyMgYDE0X0RyaWVkX2ZydWl0c193ZWVrbHlgICAKYGBge3IgYDE0X0RyaWVkX2ZydWl0c193ZWVrbHlgICAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfRHJpZWRfZnJ1aXRzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9EcmllZF9mcnVpdHNfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9EcmllZF9mcnVpdHNfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0RyaWVkX2ZydWl0c193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9EcmllZF9mcnVpdHNfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0RyaWVkX2ZydWl0c193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfRHJpZWRfZnJ1aXRzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9EcmllZF9mcnVpdHNfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfRHJpZWRfZnJ1aXRzX3dlZWtseV94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X0RyaWVkX2ZydWl0c193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfRHJpZWRfZnJ1aXRzX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0RyaWVkX2ZydWl0c193ZWVrbHlfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE0X0RyaWVkX2ZydWl0c193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfRHJpZWRfZnJ1aXRzX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0RyaWVkX2ZydWl0c193ZWVrbHlfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgMTRfRHJpZWRfZnJ1aXRzX3dlZWtseWAgKSkgIyBvbmx5IHdpdGggZ2VuZGVyLCBzaW5jZSBzb21lIHJlZ2lvbnMgYW5kIGNpdGllcyBoYXZlIDAgIAoKYGBgCiMjIyBgMTRfSnVpY2Vfb3Jfc29mdF9kcmlua3Nfd2Vla2x5YApgYGB7ciBgMTRfSnVpY2Vfb3Jfc29mdF9kcmlua3Nfd2Vla2x5YCAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X0p1aWNlX29yX3NvZnRfZHJpbmtzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9KdWljZV9vcl9zb2Z0X2RyaW5rc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X0p1aWNlX29yX3NvZnRfZHJpbmtzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9KdWljZV9vcl9zb2Z0X2RyaW5rc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9KdWljZV9vcl9zb2Z0X2RyaW5rc193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfSnVpY2Vfb3Jfc29mdF9kcmlua3Nfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X0p1aWNlX29yX3NvZnRfZHJpbmtzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9KdWljZV9vcl9zb2Z0X2RyaW5rc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9KdWljZV9vcl9zb2Z0X2RyaW5rc193ZWVrbHlfeF9nZW5kZXIuY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9KdWljZV9vcl9zb2Z0X2RyaW5rc193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfSnVpY2Vfb3Jfc29mdF9kcmlua3Nfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfSnVpY2Vfb3Jfc29mdF9kcmlua3Nfd2Vla2x5X3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9KdWljZV9vcl9zb2Z0X2RyaW5rc193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfSnVpY2Vfb3Jfc29mdF9kcmlua3Nfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfSnVpY2Vfb3Jfc29mdF9kcmlua3Nfd2Vla2x5X3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE0X0p1aWNlX29yX3NvZnRfZHJpbmtzX3dlZWtseWAgKSkgIyBvbmx5IHdpdGggZ2VuZGVyLCBzaW5jZSBzb21lIHJlZ2lvbnMgYW5kIGNpdGllcyBoYXZlIDAgIAoKYGBgCiMjIyBgMTRfVGVlX2NhY2FvX29yX2NvZmZlZV93aXRoX3N1Z2FyX3dlZWtseWAgICAgICAKYGBge3IgYDE0X1RlZV9jYWNhb19vcl9jb2ZmZWVfd2l0aF9zdWdhcl93ZWVrbHlgICAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfVGVlX2NhY2FvX29yX2NvZmZlZV93aXRoX3N1Z2FyX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9UZWVfY2FjYW9fb3JfY29mZmVlX3dpdGhfc3VnYXJfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9UZWVfY2FjYW9fb3JfY29mZmVlX3dpdGhfc3VnYXJfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X1RlZV9jYWNhb19vcl9jb2ZmZWVfd2l0aF9zdWdhcl93ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9UZWVfY2FjYW9fb3JfY29mZmVlX3dpdGhfc3VnYXJfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X1RlZV9jYWNhb19vcl9jb2ZmZWVfd2l0aF9zdWdhcl93ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfVGVlX2NhY2FvX29yX2NvZmZlZV93aXRoX3N1Z2FyX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9UZWVfY2FjYW9fb3JfY29mZmVlX3dpdGhfc3VnYXJfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfVGVlX2NhY2FvX29yX2NvZmZlZV93aXRoX3N1Z2FyX3dlZWtseV94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X1RlZV9jYWNhb19vcl9jb2ZmZWVfd2l0aF9zdWdhcl93ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfVGVlX2NhY2FvX29yX2NvZmZlZV93aXRoX3N1Z2FyX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X1RlZV9jYWNhb19vcl9jb2ZmZWVfd2l0aF9zdWdhcl93ZWVrbHlfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE0X1RlZV9jYWNhb19vcl9jb2ZmZWVfd2l0aF9zdWdhcl93ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfVGVlX2NhY2FvX29yX2NvZmZlZV93aXRoX3N1Z2FyX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X1RlZV9jYWNhb19vcl9jb2ZmZWVfd2l0aF9zdWdhcl93ZWVrbHlfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgMTRfVGVlX2NhY2FvX29yX2NvZmZlZV93aXRoX3N1Z2FyX3dlZWtseWAgKSkgIAoKYGBgCiMjIyBgMTRfTWFybWVsYWRlX2hvbmV5X3N5cnVwX29yX290aGVyX3N3ZWV0X3NvdWNlX3dlZWtseWAgICAgICAKYGBge3IgYDE0X01hcm1lbGFkZV9ob25leV9zeXJ1cF9vcl9vdGhlcl9zd2VldF9zb3VjZV93ZWVrbHlgICAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfTWFybWVsYWRlX2hvbmV5X3N5cnVwX29yX290aGVyX3N3ZWV0X3NvdWNlX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9NYXJtZWxhZGVfaG9uZXlfc3lydXBfb3Jfb3RoZXJfc3dlZXRfc291Y2Vfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9NYXJtZWxhZGVfaG9uZXlfc3lydXBfb3Jfb3RoZXJfc3dlZXRfc291Y2Vfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X01hcm1lbGFkZV9ob25leV9zeXJ1cF9vcl9vdGhlcl9zd2VldF9zb3VjZV93ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9NYXJtZWxhZGVfaG9uZXlfc3lydXBfb3Jfb3RoZXJfc3dlZXRfc291Y2Vfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X01hcm1lbGFkZV9ob25leV9zeXJ1cF9vcl9vdGhlcl9zd2VldF9zb3VjZV93ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfTWFybWVsYWRlX2hvbmV5X3N5cnVwX29yX290aGVyX3N3ZWV0X3NvdWNlX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9NYXJtZWxhZGVfaG9uZXlfc3lydXBfb3Jfb3RoZXJfc3dlZXRfc291Y2Vfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfTWFybWVsYWRlX2hvbmV5X3N5cnVwX29yX290aGVyX3N3ZWV0X3NvdWNlX3dlZWtseV94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X01hcm1lbGFkZV9ob25leV9zeXJ1cF9vcl9vdGhlcl9zd2VldF9zb3VjZV93ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfTWFybWVsYWRlX2hvbmV5X3N5cnVwX29yX290aGVyX3N3ZWV0X3NvdWNlX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X01hcm1lbGFkZV9ob25leV9zeXJ1cF9vcl9vdGhlcl9zd2VldF9zb3VjZV93ZWVrbHlfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE0X01hcm1lbGFkZV9ob25leV9zeXJ1cF9vcl9vdGhlcl9zd2VldF9zb3VjZV93ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfTWFybWVsYWRlX2hvbmV5X3N5cnVwX29yX290aGVyX3N3ZWV0X3NvdWNlX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X01hcm1lbGFkZV9ob25leV9zeXJ1cF9vcl9vdGhlcl9zd2VldF9zb3VjZV93ZWVrbHlfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgMTRfTWFybWVsYWRlX2hvbmV5X3N5cnVwX29yX290aGVyX3N3ZWV0X3NvdWNlX3dlZWtseWAgKSkgIAoKYGBgCiMjIyBgMTRfSWNlX2NyZWFtX3dlZWtseWAgICAgICAKYGBge3IgYDE0X0ljZV9jcmVhbV93ZWVrbHlgICAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfSWNlX2NyZWFtX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9JY2VfY3JlYW1fd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9JY2VfY3JlYW1fd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0ljZV9jcmVhbV93ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9JY2VfY3JlYW1fd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0ljZV9jcmVhbV93ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfSWNlX2NyZWFtX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9JY2VfY3JlYW1fd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfSWNlX2NyZWFtX3dlZWtseV94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X0ljZV9jcmVhbV93ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfSWNlX2NyZWFtX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0ljZV9jcmVhbV93ZWVrbHlfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE0X0ljZV9jcmVhbV93ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfSWNlX2NyZWFtX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0ljZV9jcmVhbV93ZWVrbHlfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgMTRfSWNlX2NyZWFtX3dlZWtseWAgKSkgIAoKYGBgCiMjIyBgMTRfQ29va2llc19vcl93YWZsZXNfd2Vla2x5YCAgICAgIApgYGB7ciBgMTRfQ29va2llc19vcl93YWZsZXNfd2Vla2x5YCAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X0Nvb2tpZXNfb3Jfd2FmbGVzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Db29raWVzX29yX3dhZmxlc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X0Nvb2tpZXNfb3Jfd2FmbGVzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Db29raWVzX29yX3dhZmxlc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9Db29raWVzX29yX3dhZmxlc193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQ29va2llc19vcl93YWZsZXNfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X0Nvb2tpZXNfb3Jfd2FmbGVzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Db29raWVzX29yX3dhZmxlc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9Db29raWVzX29yX3dhZmxlc193ZWVrbHlfeF9nZW5kZXIuY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9Db29raWVzX29yX3dhZmxlc193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQ29va2llc19vcl93YWZsZXNfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfQ29va2llc19vcl93YWZsZXNfd2Vla2x5X3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9Db29raWVzX29yX3dhZmxlc193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQ29va2llc19vcl93YWZsZXNfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfQ29va2llc19vcl93YWZsZXNfd2Vla2x5X3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE0X0Nvb2tpZXNfb3Jfd2FmbGVzX3dlZWtseWAgKSkgIAoKYGBgCiMjIyBgMTRfQ2hvY29sYXRlX29yX2Nob2NvbGF0ZV9iYXJzX3dlZWtseWAgICAgIApgYGB7ciBgMTRfQ2hvY29sYXRlX29yX2Nob2NvbGF0ZV9iYXJzX3dlZWtseWAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X0Nob2NvbGF0ZV9vcl9jaG9jb2xhdGVfYmFyc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaG9jb2xhdGVfb3JfY2hvY29sYXRlX2JhcnNfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X0Nob2NvbGF0ZV9vcl9jaG9jb2xhdGVfYmFyc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaG9jb2xhdGVfb3JfY2hvY29sYXRlX2JhcnNfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9DaG9jb2xhdGVfb3JfY2hvY29sYXRlX2JhcnNfd2Vla2x5YCAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQ2hvY29sYXRlX29yX2Nob2NvbGF0ZV9iYXJzX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X0Nob2NvbGF0ZV9vcl9jaG9jb2xhdGVfYmFyc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaG9jb2xhdGVfb3JfY2hvY29sYXRlX2JhcnNfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9DaG9jb2xhdGVfb3JfY2hvY29sYXRlX2JhcnNfd2Vla2x5X3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRfQ2hvY29sYXRlX29yX2Nob2NvbGF0ZV9iYXJzX3dlZWtseWAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0Nob2NvbGF0ZV9vcl9jaG9jb2xhdGVfYmFyc193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0Nob2NvbGF0ZV9vcl9jaG9jb2xhdGVfYmFyc193ZWVrbHlfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE0X0Nob2NvbGF0ZV9vcl9jaG9jb2xhdGVfYmFyc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaG9jb2xhdGVfb3JfY2hvY29sYXRlX2JhcnNfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9DaG9jb2xhdGVfb3JfY2hvY29sYXRlX2JhcnNfd2Vla2x5X3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE0X0Nob2NvbGF0ZV9vcl9jaG9jb2xhdGVfYmFyc193ZWVrbHlgKSkgIAoKYGBgCiMjIyBgMTRfTXVzbGlfYmFyc193ZWVrbHlgICAgICAKYGBge3IgYDE0X011c2xpX2JhcnNfd2Vla2x5YCAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfTXVzbGlfYmFyc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9NdXNsaV9iYXJzX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9NdXNsaV9iYXJzX3dlZWtseWAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X011c2xpX2JhcnNfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9NdXNsaV9iYXJzX3dlZWtseWAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X011c2xpX2JhcnNfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfTXVzbGlfYmFyc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9NdXNsaV9iYXJzX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfTXVzbGlfYmFyc193ZWVrbHlfeF9nZW5kZXIuY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9NdXNsaV9iYXJzX3dlZWtseWAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X011c2xpX2JhcnNfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9NdXNsaV9iYXJzX3dlZWtseV94X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTRfTXVzbGlfYmFyc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9NdXNsaV9iYXJzX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfTXVzbGlfYmFyc193ZWVrbHlfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgMTRfTXVzbGlfYmFyc193ZWVrbHlgKSkgIAoKYGBgCiMjIyBgMTRfQ2hvY29sYXRlX2NhbmRpZXNfd2Vla2x5YCAgICAgCmBgYHtyIGAxNF9DaG9jb2xhdGVfY2FuZGllc193ZWVrbHlgICAgIH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNF9DaG9jb2xhdGVfY2FuZGllc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaG9jb2xhdGVfY2FuZGllc193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRfQ2hvY29sYXRlX2NhbmRpZXNfd2Vla2x5YCAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQ2hvY29sYXRlX2NhbmRpZXNfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9DaG9jb2xhdGVfY2FuZGllc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaG9jb2xhdGVfY2FuZGllc193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNF9DaG9jb2xhdGVfY2FuZGllc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaG9jb2xhdGVfY2FuZGllc193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0Nob2NvbGF0ZV9jYW5kaWVzX3dlZWtseV94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X0Nob2NvbGF0ZV9jYW5kaWVzX3dlZWtseWAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0Nob2NvbGF0ZV9jYW5kaWVzX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfQ2hvY29sYXRlX2NhbmRpZXNfd2Vla2x5X3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9DaG9jb2xhdGVfY2FuZGllc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaG9jb2xhdGVfY2FuZGllc193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0Nob2NvbGF0ZV9jYW5kaWVzX3dlZWtseV94X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGAxNF9DaG9jb2xhdGVfY2FuZGllc193ZWVrbHlgKSkgIAoKYGBgCiMjIyBgMTRDYXJhbWVsX3dlZWtseWAgICAgIApgYGB7ciBgMTRDYXJhbWVsX3dlZWtseWAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0Q2FyYW1lbF93ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNENhcmFtZWxfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0Q2FyYW1lbF93ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNENhcmFtZWxfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNENhcmFtZWxfd2Vla2x5YCAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRDYXJhbWVsX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0Q2FyYW1lbF93ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNENhcmFtZWxfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNENhcmFtZWxfd2Vla2x5X3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRDYXJhbWVsX3dlZWtseWAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0Q2FyYW1lbF93ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0Q2FyYW1lbF93ZWVrbHlfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE0Q2FyYW1lbF93ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNENhcmFtZWxfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNENhcmFtZWxfd2Vla2x5X3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE0Q2FyYW1lbF93ZWVrbHlgKSkgIAoKYGBgCiMjIyBgMTRfRnJlc2hfYnJlYXRoX2RyYWdlZXNfd2Vla2x5YCAgICAgCmBgYHtyIGAxNF9GcmVzaF9icmVhdGhfZHJhZ2Vlc193ZWVrbHlgICAgIH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNF9GcmVzaF9icmVhdGhfZHJhZ2Vlc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9GcmVzaF9icmVhdGhfZHJhZ2Vlc193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRfRnJlc2hfYnJlYXRoX2RyYWdlZXNfd2Vla2x5YCAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfRnJlc2hfYnJlYXRoX2RyYWdlZXNfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9GcmVzaF9icmVhdGhfZHJhZ2Vlc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9GcmVzaF9icmVhdGhfZHJhZ2Vlc193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNF9GcmVzaF9icmVhdGhfZHJhZ2Vlc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9GcmVzaF9icmVhdGhfZHJhZ2Vlc193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0ZyZXNoX2JyZWF0aF9kcmFnZWVzX3dlZWtseV94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X0ZyZXNoX2JyZWF0aF9kcmFnZWVzX3dlZWtseWAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0ZyZXNoX2JyZWF0aF9kcmFnZWVzX3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfRnJlc2hfYnJlYXRoX2RyYWdlZXNfd2Vla2x5X3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9GcmVzaF9icmVhdGhfZHJhZ2Vlc193ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9GcmVzaF9icmVhdGhfZHJhZ2Vlc193ZWVrbHlgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0ZyZXNoX2JyZWF0aF9kcmFnZWVzX3dlZWtseV94X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGAxNF9GcmVzaF9icmVhdGhfZHJhZ2Vlc193ZWVrbHlgKSkgIAoKYGBgCiMjIyBgMTRfQ2h1cGEtY2h1cHNfb3Jfc2ltaWxhcl9jYW5keV93ZWVrbHlgICAgICAKYGBge3IgYDE0X0NodXBhLWNodXBzX29yX3NpbWlsYXJfY2FuZHlfd2Vla2x5YCAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfQ2h1cGEtY2h1cHNfb3Jfc2ltaWxhcl9jYW5keV93ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaHVwYS1jaHVwc19vcl9zaW1pbGFyX2NhbmR5X3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9DaHVwYS1jaHVwc19vcl9zaW1pbGFyX2NhbmR5X3dlZWtseWAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0NodXBhLWNodXBzX29yX3NpbWlsYXJfY2FuZHlfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9DaHVwYS1jaHVwc19vcl9zaW1pbGFyX2NhbmR5X3dlZWtseWAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0NodXBhLWNodXBzX29yX3NpbWlsYXJfY2FuZHlfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTRfQ2h1cGEtY2h1cHNfb3Jfc2ltaWxhcl9jYW5keV93ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaHVwYS1jaHVwc19vcl9zaW1pbGFyX2NhbmR5X3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfQ2h1cGEtY2h1cHNfb3Jfc2ltaWxhcl9jYW5keV93ZWVrbHlfeF9nZW5kZXIuY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9DaHVwYS1jaHVwc19vcl9zaW1pbGFyX2NhbmR5X3dlZWtseWAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0NodXBhLWNodXBzX29yX3NpbWlsYXJfY2FuZHlfd2Vla2x5YCAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9DaHVwYS1jaHVwc19vcl9zaW1pbGFyX2NhbmR5X3dlZWtseV94X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTRfQ2h1cGEtY2h1cHNfb3Jfc2ltaWxhcl9jYW5keV93ZWVrbHlgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaHVwYS1jaHVwc19vcl9zaW1pbGFyX2NhbmR5X3dlZWtseWAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfQ2h1cGEtY2h1cHNfb3Jfc2ltaWxhcl9jYW5keV93ZWVrbHlfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgMTRfQ2h1cGEtY2h1cHNfb3Jfc2ltaWxhcl9jYW5keV93ZWVrbHlgKSkgIAoKYGBgCiMjIyBgMTRfVG9mZmllc19vcl9jaGV3aW5nX2NhbmRpZXNfd2Vla2x5YCAgICAgIApgYGB7ciBgMTRfVG9mZmllc19vcl9jaGV3aW5nX2NhbmRpZXNfd2Vla2x5YCAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X1RvZmZpZXNfb3JfY2hld2luZ19jYW5kaWVzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Ub2ZmaWVzX29yX2NoZXdpbmdfY2FuZGllc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X1RvZmZpZXNfb3JfY2hld2luZ19jYW5kaWVzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Ub2ZmaWVzX29yX2NoZXdpbmdfY2FuZGllc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9Ub2ZmaWVzX29yX2NoZXdpbmdfY2FuZGllc193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfVG9mZmllc19vcl9jaGV3aW5nX2NhbmRpZXNfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X1RvZmZpZXNfb3JfY2hld2luZ19jYW5kaWVzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Ub2ZmaWVzX29yX2NoZXdpbmdfY2FuZGllc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9Ub2ZmaWVzX29yX2NoZXdpbmdfY2FuZGllc193ZWVrbHlgX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRfVG9mZmllc19vcl9jaGV3aW5nX2NhbmRpZXNfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X1RvZmZpZXNfb3JfY2hld2luZ19jYW5kaWVzX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X1RvZmZpZXNfb3JfY2hld2luZ19jYW5kaWVzX3dlZWtseWBfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE0X1RvZmZpZXNfb3JfY2hld2luZ19jYW5kaWVzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Ub2ZmaWVzX29yX2NoZXdpbmdfY2FuZGllc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9Ub2ZmaWVzX29yX2NoZXdpbmdfY2FuZGllc193ZWVrbHlgX3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE0X1RvZmZpZXNfb3JfY2hld2luZ19jYW5kaWVzX3dlZWtseWAgKSkgIAoKYGBgCiMjIyBgMTRfUG90YXRvX2NoaXBzX29yX3NhbHR5X2Nvb2tpZXNfd2Vla2x5YCAgICAgIApgYGB7ciBgMTRfUG90YXRvX2NoaXBzX29yX3NhbHR5X2Nvb2tpZXNfd2Vla2x5YCAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X1BvdGF0b19jaGlwc19vcl9zYWx0eV9jb29raWVzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Qb3RhdG9fY2hpcHNfb3Jfc2FsdHlfY29va2llc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X1BvdGF0b19jaGlwc19vcl9zYWx0eV9jb29raWVzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Qb3RhdG9fY2hpcHNfb3Jfc2FsdHlfY29va2llc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9Qb3RhdG9fY2hpcHNfb3Jfc2FsdHlfY29va2llc193ZWVrbHlgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfUG90YXRvX2NoaXBzX29yX3NhbHR5X2Nvb2tpZXNfd2Vla2x5YCAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X1BvdGF0b19jaGlwc19vcl9zYWx0eV9jb29raWVzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Qb3RhdG9fY2hpcHNfb3Jfc2FsdHlfY29va2llc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9Qb3RhdG9fY2hpcHNfb3Jfc2FsdHlfY29va2llc193ZWVrbHlgX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRfUG90YXRvX2NoaXBzX29yX3NhbHR5X2Nvb2tpZXNfd2Vla2x5YCAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X1BvdGF0b19jaGlwc19vcl9zYWx0eV9jb29raWVzX3dlZWtseWAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X1BvdGF0b19jaGlwc19vcl9zYWx0eV9jb29raWVzX3dlZWtseWBfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE0X1BvdGF0b19jaGlwc19vcl9zYWx0eV9jb29raWVzX3dlZWtseWAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Qb3RhdG9fY2hpcHNfb3Jfc2FsdHlfY29va2llc193ZWVrbHlgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9Qb3RhdG9fY2hpcHNfb3Jfc2FsdHlfY29va2llc193ZWVrbHlgX3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE0X1BvdGF0b19jaGlwc19vcl9zYWx0eV9jb29raWVzX3dlZWtseWAgKSkgIAoKYGBgCiMjIyBgMTRfU3dlZXRfcG9wY29ybl93ZWVrbHlgICAgICAgIApgYGB7ciBgMTRfU3dlZXRfcG9wY29ybl93ZWVrbHlgICAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X1N3ZWV0X3BvcGNvcm5fd2Vla2x5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Td2VldF9wb3Bjb3JuX3dlZWtseWAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X1N3ZWV0X3BvcGNvcm5fd2Vla2x5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Td2VldF9wb3Bjb3JuX3dlZWtseWAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9Td2VldF9wb3Bjb3JuX3dlZWtseWAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3dlZXRfcG9wY29ybl93ZWVrbHlgICAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X1N3ZWV0X3BvcGNvcm5fd2Vla2x5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9Td2VldF9wb3Bjb3JuX3dlZWtseWAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9Td2VldF9wb3Bjb3JuX3dlZWtseWBfeF9nZW5kZXIuY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNF9Td2VldF9wb3Bjb3JuX3dlZWtseWAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3dlZXRfcG9wY29ybl93ZWVrbHlgICAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfU3dlZXRfcG9wY29ybl93ZWVrbHlgX3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9Td2VldF9wb3Bjb3JuX3dlZWtseWAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3dlZXRfcG9wY29ybl93ZWVrbHlgICAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTRfU3dlZXRfcG9wY29ybl93ZWVrbHlgX3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE0X1N3ZWV0X3BvcGNvcm5fd2Vla2x5YCAgKSkgIAoKYGBgCiMjIyBgMTRfQ2hld2luZ19ndW1fd2l0aF9zdWdhcl93ZWVrbHlgICAgICAgIApgYGB7ciBgMTRfQ2hld2luZ19ndW1fd2l0aF9zdWdhcl93ZWVrbHlgICAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X0NoZXdpbmdfZ3VtX3dpdGhfc3VnYXJfd2Vla2x5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaGV3aW5nX2d1bV93aXRoX3N1Z2FyX3dlZWtseWAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X0NoZXdpbmdfZ3VtX3dpdGhfc3VnYXJfd2Vla2x5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaGV3aW5nX2d1bV93aXRoX3N1Z2FyX3dlZWtseWAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9DaGV3aW5nX2d1bV93aXRoX3N1Z2FyX3dlZWtseWAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfQ2hld2luZ19ndW1fd2l0aF9zdWdhcl93ZWVrbHlgICAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X0NoZXdpbmdfZ3VtX3dpdGhfc3VnYXJfd2Vla2x5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaGV3aW5nX2d1bV93aXRoX3N1Z2FyX3dlZWtseWAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9DaGV3aW5nX2d1bV93aXRoX3N1Z2FyX3dlZWtseV94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X0NoZXdpbmdfZ3VtX3dpdGhfc3VnYXJfd2Vla2x5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9DaGV3aW5nX2d1bV93aXRoX3N1Z2FyX3dlZWtseWAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9DaGV3aW5nX2d1bV93aXRoX3N1Z2FyX3dlZWtseV94X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTRfQ2hld2luZ19ndW1fd2l0aF9zdWdhcl93ZWVrbHlgICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X0NoZXdpbmdfZ3VtX3dpdGhfc3VnYXJfd2Vla2x5YCAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X0NoZXdpbmdfZ3VtX3dpdGhfc3VnYXJfd2Vla2x5X3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE0X0NoZXdpbmdfZ3VtX3dpdGhfc3VnYXJfd2Vla2x5YCAgKSkgIAoKYGBgCiMjIyBgMTRfU3VnYXJmcmVlX2NoZXdpbmdfZ3VtX3dlZWtseWAgICAgICAgIApgYGB7ciBgMTRfU3VnYXJmcmVlX2NoZXdpbmdfZ3VtX3dlZWtseWAgICAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X1N1Z2FyZnJlZV9jaGV3aW5nX2d1bV93ZWVrbHlgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9TdWdhcmZyZWVfY2hld2luZ19ndW1fd2Vla2x5YCAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE0X1N1Z2FyZnJlZV9jaGV3aW5nX2d1bV93ZWVrbHlgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9TdWdhcmZyZWVfY2hld2luZ19ndW1fd2Vla2x5YCAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNF9TdWdhcmZyZWVfY2hld2luZ19ndW1fd2Vla2x5YCAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTRfU3VnYXJmcmVlX2NoZXdpbmdfZ3VtX3dlZWtseWAgICAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE0X1N1Z2FyZnJlZV9jaGV3aW5nX2d1bV93ZWVrbHlgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9TdWdhcmZyZWVfY2hld2luZ19ndW1fd2Vla2x5YCAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9TdWdhcmZyZWVfY2hld2luZ19ndW1fd2Vla2x5X3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTRfU3VnYXJmcmVlX2NoZXdpbmdfZ3VtX3dlZWtseWAgICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE0X1N1Z2FyZnJlZV9jaGV3aW5nX2d1bV93ZWVrbHlgICAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE0X1N1Z2FyZnJlZV9jaGV3aW5nX2d1bV93ZWVrbHlfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE0X1N1Z2FyZnJlZV9jaGV3aW5nX2d1bV93ZWVrbHlgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNF9TdWdhcmZyZWVfY2hld2luZ19ndW1fd2Vla2x5YCAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNF9TdWdhcmZyZWVfY2hld2luZ19ndW1fd2Vla2x5X3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE0X1N1Z2FyZnJlZV9jaGV3aW5nX2d1bV93ZWVrbHlgICAgKSkgIAoKYGBgCiMjIyBgMTUxX0N1cHNfb2ZfdGVlX2RhaWx5YCAgICAgICAgCmBgYHtyIGAxNTFfQ3Vwc19vZl90ZWVfZGFpbHlgICAgICAgIH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNTFfQ3Vwc19vZl90ZWVfZGFpbHlgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNTFfQ3Vwc19vZl90ZWVfZGFpbHlgICAgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTUxX0N1cHNfb2ZfdGVlX2RhaWx5YCAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTUxX0N1cHNfb2ZfdGVlX2RhaWx5YCAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNTFfQ3Vwc19vZl90ZWVfZGFpbHlgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNTFfQ3Vwc19vZl90ZWVfZGFpbHlgICAgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNTFfQ3Vwc19vZl90ZWVfZGFpbHlgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNTFfQ3Vwc19vZl90ZWVfZGFpbHlgICAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE1MV9DdXBzX29mX3RlZV9kYWlseV94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE1MV9DdXBzX29mX3RlZV9kYWlseWAgICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE1MV9DdXBzX29mX3RlZV9kYWlseWAgICAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTUxX0N1cHNfb2ZfdGVlX2RhaWx5X3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNTFfQ3Vwc19vZl90ZWVfZGFpbHlgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNTFfQ3Vwc19vZl90ZWVfZGFpbHlgICAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE1MV9DdXBzX29mX3RlZV9kYWlseV94X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGAxNTFfQ3Vwc19vZl90ZWVfZGFpbHlgICAgKSkgIAoKYGBgCiMjIyBgMTUyX0N1cHNfb2ZfY2FjYW9fZGFpbHlgICAgICAgIApgYGB7ciBgMTUyX0N1cHNfb2ZfY2FjYW9fZGFpbHlgICAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE1Ml9DdXBzX29mX2NhY2FvX2RhaWx5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNTJfQ3Vwc19vZl9jYWNhb19kYWlseWAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE1Ml9DdXBzX29mX2NhY2FvX2RhaWx5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNTJfQ3Vwc19vZl9jYWNhb19kYWlseWAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNTJfQ3Vwc19vZl9jYWNhb19kYWlseWAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTUyX0N1cHNfb2ZfY2FjYW9fZGFpbHlgICAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE1Ml9DdXBzX29mX2NhY2FvX2RhaWx5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNTJfQ3Vwc19vZl9jYWNhb19kYWlseWAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNTJfQ3Vwc19vZl9jYWNhb19kYWlseV94X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE1Ml9DdXBzX29mX2NhY2FvX2RhaWx5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNTJfQ3Vwc19vZl9jYWNhb19kYWlseWAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNTJfQ3Vwc19vZl9jYWNhb19kYWlseV94X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMTUyX0N1cHNfb2ZfY2FjYW9fZGFpbHlgICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE1Ml9DdXBzX29mX2NhY2FvX2RhaWx5YCAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE1Ml9DdXBzX29mX2NhY2FvX2RhaWx5X3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE1Ml9DdXBzX29mX2NhY2FvX2RhaWx5YCAgKSkgIAoKYGBgCiMjIyBgMTUzX0N1cHNfb2ZfY29mZmVlX2RhaWx5YCAgICAgICAKYGBge3IgYDE1M19DdXBzX29mX2NvZmZlZV9kYWlseWAgICAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTUzX0N1cHNfb2ZfY29mZmVlX2RhaWx5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNTNfQ3Vwc19vZl9jb2ZmZWVfZGFpbHlgICAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNTNfQ3Vwc19vZl9jb2ZmZWVfZGFpbHlgICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE1M19DdXBzX29mX2NvZmZlZV9kYWlseWAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNTNfQ3Vwc19vZl9jb2ZmZWVfZGFpbHlgICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE1M19DdXBzX29mX2NvZmZlZV9kYWlseWAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTUzX0N1cHNfb2ZfY29mZmVlX2RhaWx5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNTNfQ3Vwc19vZl9jb2ZmZWVfZGFpbHlgICAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTUzX0N1cHNfb2ZfY29mZmVlX2RhaWx5X3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTUzX0N1cHNfb2ZfY29mZmVlX2RhaWx5YCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNTNfQ3Vwc19vZl9jb2ZmZWVfZGFpbHlgICAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTUzX0N1cHNfb2ZfY29mZmVlX2RhaWx5X3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNTNfQ3Vwc19vZl9jb2ZmZWVfZGFpbHlgICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE1M19DdXBzX29mX2NvZmZlZV9kYWlseWAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNTNfQ3Vwc19vZl9jb2ZmZWVfZGFpbHlfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgMTUzX0N1cHNfb2ZfY29mZmVlX2RhaWx5YCAgKSkgIAoKYGBgCiMjIyBgMTYxX1RzcF9zdWdhcl9mb3Jfb25lX3RlZWAgICAgICAgCmBgYHtyIGAxNjFfVHNwX3N1Z2FyX2Zvcl9vbmVfdGVlYCAgICAgIH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNjFfVHNwX3N1Z2FyX2Zvcl9vbmVfdGVlYCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNjFfVHNwX3N1Z2FyX2Zvcl9vbmVfdGVlYCAgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTYxX1RzcF9zdWdhcl9mb3Jfb25lX3RlZWAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTYxX1RzcF9zdWdhcl9mb3Jfb25lX3RlZWAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNjFfVHNwX3N1Z2FyX2Zvcl9vbmVfdGVlYCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNjFfVHNwX3N1Z2FyX2Zvcl9vbmVfdGVlYCAgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxNjFfVHNwX3N1Z2FyX2Zvcl9vbmVfdGVlYCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNjFfVHNwX3N1Z2FyX2Zvcl9vbmVfdGVlYCAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE2MV9Uc3Bfc3VnYXJfZm9yX29uZV90ZWVfeF9nZW5kZXIuY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNjFfVHNwX3N1Z2FyX2Zvcl9vbmVfdGVlYCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNjFfVHNwX3N1Z2FyX2Zvcl9vbmVfdGVlYCAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE2MV9Uc3Bfc3VnYXJfZm9yX29uZV90ZWVfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE2MV9Uc3Bfc3VnYXJfZm9yX29uZV90ZWVgICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE2MV9Uc3Bfc3VnYXJfZm9yX29uZV90ZWVgICAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTYxX1RzcF9zdWdhcl9mb3Jfb25lX3RlZV94X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGAxNjFfVHNwX3N1Z2FyX2Zvcl9vbmVfdGVlYCAgKSkgIAoKYGBgCiMjIyBgMTYyX1RzcF9zdWdhcl9mb3Jfb25lX2NhY2FvYCAgICAgICAKYGBge3IgYDE2Ml9Uc3Bfc3VnYXJfZm9yX29uZV9jYWNhb2AgICAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTYyX1RzcF9zdWdhcl9mb3Jfb25lX2NhY2FvYCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNjJfVHNwX3N1Z2FyX2Zvcl9vbmVfY2FjYW9gICAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxNjJfVHNwX3N1Z2FyX2Zvcl9vbmVfY2FjYW9gICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE2Ml9Uc3Bfc3VnYXJfZm9yX29uZV9jYWNhb2AgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNjJfVHNwX3N1Z2FyX2Zvcl9vbmVfY2FjYW9gICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE2Ml9Uc3Bfc3VnYXJfZm9yX29uZV9jYWNhb2AgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTYyX1RzcF9zdWdhcl9mb3Jfb25lX2NhY2FvYCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNjJfVHNwX3N1Z2FyX2Zvcl9vbmVfY2FjYW9gICAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTYyX1RzcF9zdWdhcl9mb3Jfb25lX2NhY2FvX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTYyX1RzcF9zdWdhcl9mb3Jfb25lX2NhY2FvYCAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNjJfVHNwX3N1Z2FyX2Zvcl9vbmVfY2FjYW9gICAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTYyX1RzcF9zdWdhcl9mb3Jfb25lX2NhY2FvX3hfTGl2ZV9pbi5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNjJfVHNwX3N1Z2FyX2Zvcl9vbmVfY2FjYW9gICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE2Ml9Uc3Bfc3VnYXJfZm9yX29uZV9jYWNhb2AgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNjJfVHNwX3N1Z2FyX2Zvcl9vbmVfY2FjYW9feF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgMTYyX1RzcF9zdWdhcl9mb3Jfb25lX2NhY2FvYCAgKSkgIAoKYGBgCiMjIyBgMTYzX1RzcF9zdWdhcl9mb3Jfb25lX2NvZmZlZWAgICAgICAgIApgYGB7ciBgMTYzX1RzcF9zdWdhcl9mb3Jfb25lX2NvZmZlZWAgICAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE2M19Uc3Bfc3VnYXJfZm9yX29uZV9jb2ZmZWVgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNjNfVHNwX3N1Z2FyX2Zvcl9vbmVfY29mZmVlYCAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE2M19Uc3Bfc3VnYXJfZm9yX29uZV9jb2ZmZWVgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNjNfVHNwX3N1Z2FyX2Zvcl9vbmVfY29mZmVlYCAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxNjNfVHNwX3N1Z2FyX2Zvcl9vbmVfY29mZmVlYCAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTYzX1RzcF9zdWdhcl9mb3Jfb25lX2NvZmZlZWAgICAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE2M19Uc3Bfc3VnYXJfZm9yX29uZV9jb2ZmZWVgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNjNfVHNwX3N1Z2FyX2Zvcl9vbmVfY29mZmVlYCAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNjNfVHNwX3N1Z2FyX2Zvcl9vbmVfY29mZmVlX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTYzX1RzcF9zdWdhcl9mb3Jfb25lX2NvZmZlZWAgICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE2M19Uc3Bfc3VnYXJfZm9yX29uZV9jb2ZmZWVgICAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE2M19Uc3Bfc3VnYXJfZm9yX29uZV9jb2ZmZWVfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE2M19Uc3Bfc3VnYXJfZm9yX29uZV9jb2ZmZWVgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxNjNfVHNwX3N1Z2FyX2Zvcl9vbmVfY29mZmVlYCAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xNjNfVHNwX3N1Z2FyX2Zvcl9vbmVfY29mZmVlX3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE2M19Uc3Bfc3VnYXJfZm9yX29uZV9jb2ZmZWVgICAgKSkgIAoKYGBgCiMjIyBgMTdfU2VsZmV2YWx1YXRlZF9kaWV0YXJ5X2hhYml0c2AgICAgICAgIApgYGB7ciBgMTdfU2VsZmV2YWx1YXRlZF9kaWV0YXJ5X2hhYml0c2AgICAgICAgfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE3X1NlbGZldmFsdWF0ZWRfZGlldGFyeV9oYWJpdHNgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxN19TZWxmZXZhbHVhdGVkX2RpZXRhcnlfaGFiaXRzYCAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE3X1NlbGZldmFsdWF0ZWRfZGlldGFyeV9oYWJpdHNgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxN19TZWxmZXZhbHVhdGVkX2RpZXRhcnlfaGFiaXRzYCAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxN19TZWxmZXZhbHVhdGVkX2RpZXRhcnlfaGFiaXRzYCAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTdfU2VsZmV2YWx1YXRlZF9kaWV0YXJ5X2hhYml0c2AgICAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgYDE3X1NlbGZldmFsdWF0ZWRfZGlldGFyeV9oYWJpdHNgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxN19TZWxmZXZhbHVhdGVkX2RpZXRhcnlfaGFiaXRzYCAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xN19TZWxmZXZhbHVhdGVkX2RpZXRhcnlfaGFiaXRzX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMTdfU2VsZmV2YWx1YXRlZF9kaWV0YXJ5X2hhYml0c2AgICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE3X1NlbGZldmFsdWF0ZWRfZGlldGFyeV9oYWJpdHNgICAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE3X1NlbGZldmFsdWF0ZWRfZGlldGFyeV9oYWJpdHNfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE3X1NlbGZldmFsdWF0ZWRfZGlldGFyeV9oYWJpdHNgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxN19TZWxmZXZhbHVhdGVkX2RpZXRhcnlfaGFiaXRzYCAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xN19TZWxmZXZhbHVhdGVkX2RpZXRhcnlfaGFiaXRzX3hfcmVnaW9uLmNzdiIpIAoKCmNoaXNxLnRlc3QodGFibGUoZGYkYDFfZ2VuZGVyYCwgZGYkYDE3X1NlbGZldmFsdWF0ZWRfZGlldGFyeV9oYWJpdHNgICAgKSkgIAoKYGBgCiMjIyBgMThfRnJlcXVlbmN5X29mX3Ntb2tpbmdgICAgICAgICAgCmBgYHtyIGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgICAgICAgIH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgICAgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMThfRnJlcXVlbmN5X29mX3Ntb2tpbmdgICAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMThfRnJlcXVlbmN5X29mX3Ntb2tpbmdgICAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgICAgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgICAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE4X0ZyZXF1ZW5jeV9vZl9zbW9raW5nX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMThfRnJlcXVlbmN5X29mX3Ntb2tpbmdgICAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMThfRnJlcXVlbmN5X29mX3Ntb2tpbmdgICAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xOF9GcmVxdWVuY3lfb2Zfc21va2luZ194X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMThfRnJlcXVlbmN5X29mX3Ntb2tpbmdgICAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMThfRnJlcXVlbmN5X29mX3Ntb2tpbmdgICAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8xOF9GcmVxdWVuY3lfb2Zfc21va2luZ194X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgICAgKSkgIAoKYGBgCiMjIyBgMTlfVG9iYWNjb191c2FnZV8obm90X3Ntb2tpbmcpX2luX2xhc3RfMzBfZGF5c2AgICAgICAgICAKYGBge3IgYDE5X1RvYmFjY29fdXNhZ2VfKG5vdF9zbW9raW5nKV9pbl9sYXN0XzMwX2RheXNgICAgICAgICB9CmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTlfVG9iYWNjb191c2FnZV8obm90X3Ntb2tpbmcpX2luX2xhc3RfMzBfZGF5c2AgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxOV9Ub2JhY2NvX3VzYWdlXyhub3Rfc21va2luZylfaW5fbGFzdF8zMF9kYXlzYCAgICAgICAgICAgLCBuLCBmaWxsPTApCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmAsIGAxOV9Ub2JhY2NvX3VzYWdlXyhub3Rfc21va2luZylfaW5fbGFzdF8zMF9kYXlzYCAgICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE5X1RvYmFjY29fdXNhZ2VfKG5vdF9zbW9raW5nKV9pbl9sYXN0XzMwX2RheXNgICAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAxOV9Ub2JhY2NvX3VzYWdlXyhub3Rfc21va2luZylfaW5fbGFzdF8zMF9kYXlzYCAgICAgICAgICAgKSAlPiUgCiAgc3VtbWFyaXNlKCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzcHJlYWQoYDE5X1RvYmFjY29fdXNhZ2VfKG5vdF9zbW9raW5nKV9pbl9sYXN0XzMwX2RheXNgICAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTlfVG9iYWNjb191c2FnZV8obm90X3Ntb2tpbmcpX2luX2xhc3RfMzBfZGF5c2AgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAxOV9Ub2JhY2NvX3VzYWdlXyhub3Rfc21va2luZylfaW5fbGFzdF8zMF9kYXlzYCAgICAgICAgICAgLCBuLCBmaWxsPTApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvMTlfVG9iYWNjb191c2FnZV8obm90X3Ntb2tpbmcpX2luX2xhc3RfMzBfZGF5c194X2dlbmRlci5jc3YiKSAKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDE5X1RvYmFjY29fdXNhZ2VfKG5vdF9zbW9raW5nKV9pbl9sYXN0XzMwX2RheXNgICAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTlfVG9iYWNjb191c2FnZV8obm90X3Ntb2tpbmcpX2luX2xhc3RfMzBfZGF5c2AgICAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE5X1RvYmFjY29fdXNhZ2VfKG5vdF9zbW9raW5nKV9pbl9sYXN0XzMwX2RheXNfeF9MaXZlX2luLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGBSZWdpb25OYW1lYCwgYDE5X1RvYmFjY29fdXNhZ2VfKG5vdF9zbW9raW5nKV9pbl9sYXN0XzMwX2RheXNgICAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMTlfVG9iYWNjb191c2FnZV8obm90X3Ntb2tpbmcpX2luX2xhc3RfMzBfZGF5c2AgICAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzE5X1RvYmFjY29fdXNhZ2VfKG5vdF9zbW9raW5nKV9pbl9sYXN0XzMwX2RheXNfeF9yZWdpb24uY3N2IikgCgoKY2hpc3EudGVzdCh0YWJsZShkZiRgMV9nZW5kZXJgLCBkZiRgMTlfVG9iYWNjb191c2FnZV8obm90X3Ntb2tpbmcpX2luX2xhc3RfMzBfZGF5c2AgICAgKSkgIAoKYGBgCiMjIyBgMjBfT3duX3Rvb3RoYnJ1c2hgICAgICAgICAgCmBgYHtyIGAyMF9Pd25fdG9vdGhicnVzaGAgICAgICAgIH0KZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAyMF9Pd25fdG9vdGhicnVzaGAgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAyMF9Pd25fdG9vdGhicnVzaGAgICAgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMjBfT3duX3Rvb3RoYnJ1c2hgICAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMjBfT3duX3Rvb3RoYnJ1c2hgICAgICAgICAgICAsIG4sIGZpbGw9MCkKCmRmICU+JSAKICBncm91cF9ieShgUmVnaW9uTmFtZWAsIGAyMF9Pd25fdG9vdGhicnVzaGAgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAyMF9Pd25fdG9vdGhicnVzaGAgICAgICAgICAgICwgbiwgZmlsbD0wKQoKZGYgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIGAyMF9Pd25fdG9vdGhicnVzaGAgICAgICAgICAgICkgJT4lIAogIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc3ByZWFkKGAyMF9Pd25fdG9vdGhicnVzaGAgICAgICAgICAgICwgbiwgZmlsbD0wKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzLzIwX093bl90b290aGJydXNoX3hfZ2VuZGVyLmNzdiIpIAoKZGYgJT4lIAogIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBgMjBfT3duX3Rvb3RoYnJ1c2hgICAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMjBfT3duX3Rvb3RoYnJ1c2hgICAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8yMF9Pd25fdG9vdGhicnVzaF94X0xpdmVfaW4uY3N2IikgCgpkZiAlPiUgCiAgZ3JvdXBfYnkoYFJlZ2lvbk5hbWVgLCBgMjBfT3duX3Rvb3RoYnJ1c2hgICAgICAgICAgICApICU+JSAKICBzdW1tYXJpc2UoIG4gPSBuKCkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNwcmVhZChgMjBfT3duX3Rvb3RoYnJ1c2hgICAgICAgICAgICAsIG4sIGZpbGw9MCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy8yMF9Pd25fdG9vdGhicnVzaF94X3JlZ2lvbi5jc3YiKSAKCgpjaGlzcS50ZXN0KHRhYmxlKGRmJGAxX2dlbmRlcmAsIGRmJGAyMF9Pd25fdG9vdGhicnVzaGAgICAgKSkgIAoKYGBgCgoKIyMgUExPVFMKYGBge3IgcGxvdHMgcXVlc3Rpb25zfQpnZ3Bsb3QoZGYsIGFlcyhgM19QYWluX29yX290aGVyX2RlbnRhbF9kaXNvcmRlcnNfaW5fbGFzdF8xMl9tb250aHNgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvM19QYWluX29yX290aGVyX2RlbnRhbF9kaXNvcmRlcnNfaW5fbGFzdF8xMl9tb250aHMucG5nIikKZ2dwbG90KGRmLCBhZXMoYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzLnBuZyIpCmdncGxvdChkZiwgYWVzKGA1X1JlYXNvbl90b19hdHRlbmRfZGVudGlzdGApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy81X1JlYXNvbl90b19hdHRlbmRfZGVudGlzdC5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgNlB1YmxpY19vcl9wcml2YXRfZGVudGlzdGApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy82UHVibGljX29yX3ByaXZhdF9kZW50aXN0LnBuZyIpCmdncGxvdChkZiwgYWVzKGA3X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c2ApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy83X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0cy5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgOF9GcmVxdWVuY3lfb2ZfdG9vdGhicnVzaGluZ2ApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy84X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nLnBuZyIpCmdncGxvdChkZiwgYWVzKGA5X1VzYWdlX29mX3Rvb3RocGFzdGVgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvOV9Vc2FnZV9vZl90b290aHBhc3RlLnBuZyIpCmdncGxvdChkZiwgYWVzKGA5X1VzYWdlX29mX3Rvb3RoYnJ1c2hgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvOV9Vc2FnZV9vZl90b290aGJydXNoLnBuZyIpCmdncGxvdChkZiwgYWVzKGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2ApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy85X1VzYWdlX29mX2RlbnRhbF9mbG9zcy5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgOV9Vc2FnZV9vZl90b290aF9waWNrc2ApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy85X1VzYWdlX29mX3Rvb3RoX3BpY2tzLnBuZyIpCmdncGxvdChkZiwgYWVzKGA5X1VzYWdlX29mX21vdXRoX3dhc2hgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvOV9Vc2FnZV9vZl9tb3V0aF93YXNoLnBuZyIpCmdncGxvdChkZiwgYWVzKGA5VXNhZ2Vfb2ZfdG91bmdlX2NsZWFuZXJgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvOVVzYWdlX29mX3RvdW5nZV9jbGVhbmVyLnBuZyIpCmdncGxvdChkZiwgYWVzKGA5X1VzYWdlX29mX290aGVyX2h5Z2llbmVfYXBwbGlhbmNlYCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzlfVXNhZ2Vfb2Zfb3RoZXJfaHlnaWVuZV9hcHBsaWFuY2UucG5nIikKZ2dwbG90KGRmLCBhZXMoYDEwX0ZsdW9yaWRlX2luX3Rvb3RocGFzdGVgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvMTBfRmx1b3JpZGVfaW5fdG9vdGhwYXN0ZS5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHMucG5nIikKZ2dwbG90KGRmLCBhZXMoYDEyX1NlbGZldmFsdWF0ZWRfb3JhbF9oeWdpZW5lX2NhcmVgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvMTJfU2VsZmV2YWx1YXRlZF9vcmFsX2h5Z2llbmVfY2FyZS5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTNfRWF0aW5nX2hhYml0c19ncm91cGVkYCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzEzX0VhdGluZ19oYWJpdHNfZ3JvdXBlZC5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTRfU3dlZXRfeW9ndXJ0X3dlZWtseWApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNF9Td2VldF95b2d1cnRfd2Vla2x5LnBuZyIpCmdncGxvdChkZiwgYWVzKGAxNF9Td2VldF9taWxrX3dlZWtseWApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNF9Td2VldF9taWxrX3dlZWtseS5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTRfU3dlZXRfY3JlYW1zX3dlZWtseWApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNF9Td2VldF9jcmVhbXNfd2Vla2x5LnBuZyIpCmdncGxvdChkZiwgYWVzKGAxNF9LYXJ1bXNfd2Vla2x5YCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzE0X0thcnVtc193ZWVrbHkucG5nIikKZ2dwbG90KGRmLCBhZXMoYDE0X0JyZWFkX3dlZWtseWApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNF9CcmVhZF93ZWVrbHkucG5nIikKZ2dwbG90KGRmLCBhZXMoYDE0X0Nvcm5mbGFrZXNfbm90X3N3ZWV0ZW5lZF93ZWVrbHlgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvMTRfQ29ybmZsYWtlc19ub3Rfc3dlZXRlbmVkX3dlZWtseS5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTRfU3dlZXRfY29ybmZsYWtlc193ZWVrbHlgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvMTRfU3dlZXRfY29ybmZsYWtlc193ZWVrbHkucG5nIikKZ2dwbG90KGRmLCBhZXMoYDE0X0Nhbm5lZF9mcnVpdHNfd2Vla2x5YCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzE0X0Nhbm5lZF9mcnVpdHNfd2Vla2x5LnBuZyIpCmdncGxvdChkZiwgYWVzKGAxNF9EcmllZF9mcnVpdHNfd2Vla2x5YCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzE0X0RyaWVkX2ZydWl0c193ZWVrbHkucG5nIikKZ2dwbG90KGRmLCBhZXMoYDE0X0p1aWNlX29yX3NvZnRfZHJpbmtzX3dlZWtseWApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNF9KdWljZV9vcl9zb2Z0X2RyaW5rc193ZWVrbHkucG5nIikKZ2dwbG90KGRmLCBhZXMoYDE0X1RlZV9jYWNhb19vcl9jb2ZmZWVfd2l0aF9zdWdhcl93ZWVrbHlgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvMTRfVGVlX2NhY2FvX29yX2NvZmZlZV93aXRoX3N1Z2FyX3dlZWtseS5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTRfTWFybWVsYWRlX2hvbmV5X3N5cnVwX29yX290aGVyX3N3ZWV0X3NvdWNlX3dlZWtseWApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNF9NYXJtZWxhZGVfaG9uZXlfc3lydXBfb3Jfb3RoZXJfc3dlZXRfc291Y2Vfd2Vla2x5LnBuZyIpCmdncGxvdChkZiwgYWVzKGAxNF9JY2VfY3JlYW1fd2Vla2x5YCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzE0X0ljZV9jcmVhbV93ZWVrbHkucG5nIikKZ2dwbG90KGRmLCBhZXMoYDE0X0Nvb2tpZXNfb3Jfd2FmbGVzX3dlZWtseWApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNF9Db29raWVzX29yX3dhZmxlc193ZWVrbHkucG5nIikKZ2dwbG90KGRmLCBhZXMoYDE0X0Nha2VzX29yX3N3ZWV0X2JyZWFkc193ZWVrbHlgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvMTRfQ2FrZXNfb3Jfc3dlZXRfYnJlYWRzX3dlZWtseS5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTRfQ2hvY29sYXRlX29yX2Nob2NvbGF0ZV9iYXJzX3dlZWtseWApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNF9DaG9jb2xhdGVfb3JfY2hvY29sYXRlX2JhcnNfd2Vla2x5LnBuZyIpCmdncGxvdChkZiwgYWVzKGAxNF9NdXNsaV9iYXJzX3dlZWtseWApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNF9NdXNsaV9iYXJzX3dlZWtseS5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTRfQ2hvY29sYXRlX2NhbmRpZXNfd2Vla2x5YCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzE0X0Nob2NvbGF0ZV9jYW5kaWVzX3dlZWtseS5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTRDYXJhbWVsX3dlZWtseWApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNENhcmFtZWxfd2Vla2x5LnBuZyIpCmdncGxvdChkZiwgYWVzKGAxNF9GcmVzaF9icmVhdGhfZHJhZ2Vlc193ZWVrbHlgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvMTRfRnJlc2hfYnJlYXRoX2RyYWdlZXNfd2Vla2x5LnBuZyIpCmdncGxvdChkZiwgYWVzKGAxNF9DaHVwYS1jaHVwc19vcl9zaW1pbGFyX2NhbmR5X3dlZWtseWApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNF9DaHVwYS1jaHVwc19vcl9zaW1pbGFyX2NhbmR5X3dlZWtseS5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTRfVG9mZmllc19vcl9jaGV3aW5nX2NhbmRpZXNfd2Vla2x5YCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzE0X1RvZmZpZXNfb3JfY2hld2luZ19jYW5kaWVzX3dlZWtseS5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTRfUG90YXRvX2NoaXBzX29yX3NhbHR5X2Nvb2tpZXNfd2Vla2x5YCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzE0X1BvdGF0b19jaGlwc19vcl9zYWx0eV9jb29raWVzX3dlZWtseS5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTRfU3dlZXRfcG9wY29ybl93ZWVrbHlgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvMTRfU3dlZXRfcG9wY29ybl93ZWVrbHkucG5nIikKZ2dwbG90KGRmLCBhZXMoYDE0X0NoZXdpbmdfZ3VtX3dpdGhfc3VnYXJfd2Vla2x5YCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzE0X0NoZXdpbmdfZ3VtX3dpdGhfc3VnYXJfd2Vla2x5LnBuZyIpCmdncGxvdChkZiwgYWVzKGAxNF9TdWdhcmZyZWVfY2hld2luZ19ndW1fd2Vla2x5YCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzE0X1N1Z2FyZnJlZV9jaGV3aW5nX2d1bV93ZWVrbHkucG5nIikKZ2dwbG90KGRmLCBhZXMoYDE1MV9DdXBzX29mX3RlZV9kYWlseWApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNTFfQ3Vwc19vZl90ZWVfZGFpbHkucG5nIikKZ2dwbG90KGRmLCBhZXMoYDE1Ml9DdXBzX29mX2NhY2FvX2RhaWx5YCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzE1Ml9DdXBzX29mX2NhY2FvX2RhaWx5LnBuZyIpCmdncGxvdChkZiwgYWVzKGAxNTNfQ3Vwc19vZl9jb2ZmZWVfZGFpbHlgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvMTUzX0N1cHNfb2ZfY29mZmVlX2RhaWx5LnBuZyIpCmdncGxvdChkZiwgYWVzKGAxNjFfVHNwX3N1Z2FyX2Zvcl9vbmVfdGVlYCkpICsgZ2VvbV9iYXIoKSArIHRoZW1lX21pbmltYWwoKSAgKyBnZ3NhdmUoZmlsZSA9ICIuL3Bsb3RzLzE2MV9Uc3Bfc3VnYXJfZm9yX29uZV90ZWUucG5nIikKZ2dwbG90KGRmLCBhZXMoYDE2Ml9Uc3Bfc3VnYXJfZm9yX29uZV9jYWNhb2ApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xNjJfVHNwX3N1Z2FyX2Zvcl9vbmVfY2FjYW8ucG5nIikKZ2dwbG90KGRmLCBhZXMoYDE2M19Uc3Bfc3VnYXJfZm9yX29uZV9jb2ZmZWVgKSkgKyBnZW9tX2JhcigpICsgdGhlbWVfbWluaW1hbCgpICArIGdnc2F2ZShmaWxlID0gIi4vcGxvdHMvMTYzX1RzcF9zdWdhcl9mb3Jfb25lX2NvZmZlZS5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTdfU2VsZmV2YWx1YXRlZF9kaWV0YXJ5X2hhYml0c2ApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xN19TZWxmZXZhbHVhdGVkX2RpZXRhcnlfaGFiaXRzLnBuZyIpCmdncGxvdChkZiwgYWVzKGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2ApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xOF9GcmVxdWVuY3lfb2Zfc21va2luZy5wbmciKQpnZ3Bsb3QoZGYsIGFlcyhgMTlfVG9iYWNjb191c2FnZV8obm90X3Ntb2tpbmcpX2luX2xhc3RfMzBfZGF5c2ApKSArIGdlb21fYmFyKCkgKyB0aGVtZV9taW5pbWFsKCkgICsgZ2dzYXZlKGZpbGUgPSAiLi9wbG90cy8xOV9Ub2JhY2NvX3VzYWdlXyhub3Rfc21va2luZylfaW5fbGFzdF8zMF9kYXlzLnBuZyIpCgpgYGAKCgoKCgojIENMSU5JQ0FMCgojIyBFcm9zaW9uCgoxLgklIGRlIG5pbm9zLCBxdWUgdGllbmVuICAgICAgICAgMCA9IDIxMjMsIDk5LjMlCjIuCSUgZGUgbmlub3MsIHF1ZSB0aWVuZW4gbWF4aW11bSAxID0gMTEsIDAuNTElIAozLgklIGRlIG5pbm9zLCBxdWUgdGllbmVuIG1heGltdW0gMiA9IDQsIDAuMTklCjQuCSUgZGUgbmlub3MsIHF1ZSB0aWVuZW4gbWF4aW11bSAzID0gMAo1LglEZSBuaW5vcywgcXVlIHRpZW5lbiBlcm9zaW9uZXMsIGN1YW50byBwcm9tZWRpbyBkaWVudGVzLCBtaW4sIG1heCwgU0QgKHNpIG5lY2VzaXRhIG90cm9zIHZhbG9yZXMpCkVuIHByb21lZGlvLCBsb3MgbmnDsW9zIGV4YW1pbmFkb3MgdGllbmVuIDAuMDkgZHRlcyBjb24gZXJvc2lvbmVzLCBvIHNlYSA5IGRlIGNhZGEgIGRlIGNhZGEgMTAwLgoKCmBgYHtyIEVyb3Npb259CmVyb3Npb24gPC0gZGYgJT4lIAogIGdhdGhlcigiVG9vdGhfZXJvc2lvbiIsICJlcm9zaW9uX3N0YXR1cyIsIGBFcm9zaW9uX1sxN11gOmBFcm9zaW9uX1szN11gKSAlPiUgCiAgc2VwYXJhdGUoVG9vdGhfZXJvc2lvbiwgYygiVG9vdGhfZXJvc2lvbiIsICJTdXJmYWNlX2Vyb3Npb24iKSwgc2VwID0gLTIpICU+JSAKICBzZXBhcmF0ZShUb290aF9lcm9zaW9uLCBjKCJUeXBlIiwgIlRvb3RoIiksIHNlcCA9IC0zKSAKCgpsZXZlbHMoZXJvc2lvbiRlcm9zaW9uX3N0YXR1cylbKGVyb3Npb24kZXJvc2lvbl9zdGF0dXMpID09ICJOQSJdIDwtICIwIiAKCmVyb3Npb24kVG9vdGggPC0gYXMuZmFjdG9yKGVyb3Npb24kVG9vdGgpICMgY29udmVydCB0byBmYWN0b3IKZXJvc2lvbiRUb290aCA8LSBvcmRlcmVkKGVyb3Npb24kVG9vdGgsIGxldmVscyA9IGMoIjE3IiwgIjE2IiwgIjE1IiwgIjE0IiwgIjEzIiwgIjEyIiwgIjExIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjEiLCAiMjIiLCAiMjMiLCAiMjQiLCAiMjUiLCAiMjYiLCAiMjciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0NyIsICI0NiIsICI0NSIsICI0NCIsICI0MyIsICI0MiIsICI0MSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMxIiwgIjMyIiwgIjMzIiwgIjM0IiwgIjM1IiwgIjM2IiwgIjM3IikpCgplcm9zaW9uX2J5X3Rvb3RoIDwtIGZ0YWJsZShlcm9zaW9uJFRvb3RoLCBlcm9zaW9uJGVyb3Npb25fc3RhdHVzKQpjYXB0dXJlLm91dHB1dChlcm9zaW9uX2J5X3Rvb3RoLCBmaWxlID0gIi4vdGFibGVzL2Vyb3Npb25fYnlfdG9vdGgudHh0IikKcm0oZXJvc2lvbl9ieV90b290aCkKCmVyb3Npb24gJT4lIAogIGdyb3VwX2J5KFRvb3RoLCBlcm9zaW9uX3N0YXR1cykgJT4lIAogIHN1bW1hcmlzZShuID0gbigpKSAlPiUgCiAgc3ByZWFkKGVyb3Npb25fc3RhdHVzLCBuLCBmaWxsID0gMCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy90b290aF94X2Vyb3Npb25zdGF0dXMuY3N2IikKCmVyb3Npb24gJT4lIAogIGdyb3VwX2J5KElELCBUb290aCwgZXJvc2lvbl9zdGF0dXMpICU+JSAKICBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIAogIHNwcmVhZChUb290aCwgZXJvc2lvbl9zdGF0dXMsIGZpbGwgPSAwKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzL0lEX3hfZXJvc2lvbnN0YXR1cy5jc3YiKQoKIyByIGVyb3Npb24gcG9yIG5pw7FvCmVyb3Npb25fbWF4X2RmIDwtIGVyb3Npb24gJT4lIAogIGdyb3VwX2J5KElELCBUb290aCkgJT4lIAogIHN1bW1hcmlzZShlcm9zaW9ubWF4ID0gbWF4KGVyb3Npb25fc3RhdHVzKSkgJT4lIAogIHNwcmVhZChUb290aCwgZXJvc2lvbm1heCwgZmlsbCA9IDApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvSURfeF90b290aF9lcm9zaW9uX3N0YXR1cy5jc3YiKQoKcm0oZXJvc2lvbikKYGBgCgoKCgoKCgoKCiMjIFRyYXVtYQoKJSBkZSBuaW5vcywgcXVlIHRpZW5lbiB0cmF1bWEgKDEtNikgPSAyNTksIDEyLjExJQolIGRlIG5pbm9zLCBxdWUgdGllbmVuIDEgICAgICAgICAgICA9ICA1MSwgMi40JQolIGRlIG5pbm9zLCBxdWUgdGllbmVuIDIgICAgICAgICAgICA9ICAxOTMsIDkuMCUKJSBkZSBuaW5vcywgcXVlIHRpZW5lbiAzICAgICAgICAgICAgPSAgMTMsIDAuMzElCiUgZGUgbmlub3MsIHF1ZSB0aWVuZW4gNCAgICAgICAgICAgID0gIDQsIDAuMDklCiUgZGUgbmlub3MsIHF1ZSB0aWVuZW4gNSAgICAgICAgICAgID0gIDEsIDAuMDUlCiUgZGUgbmlub3MsIHF1ZSB0aWVuZW4gNiAgICAgICAgICAgID0gIDAKQ3VhbnRvcyBkaWVudGVzIHByb21lZGlvIGNvbiB0cmF1bWEgKGRlIG5pbm9zIGNvbiB0cmF1bXMsIG1pbiwgbWF4LCBvdHJvcyB2YWxvcmVzKQogMC4yOSBkaWVudGVzIERFIDEuMjcKCmBgYHtyIFRyYXVtYX0KdHJhdW1hIDwtIGRmICU+JSAKICBnYXRoZXIoIlRvb3RoX3RyYXVtYSIsICJUcmF1bWFfc3RhdHVzIiwgYFRyYXVtYV9bMTddYDpgVHJhdW1hX1szN11gKSAlPiUgCiAgc2VwYXJhdGUoVG9vdGhfdHJhdW1hLCBjKCJUb290aF90cmF1bWEiLCAiU3VyZmFjZV90cmF1bWEiKSwgc2VwID0gLTIpICU+JSAKICBzZXBhcmF0ZShUb290aF90cmF1bWEsIGMoIlR5cGUiLCAiVG9vdGgiKSwgc2VwID0gLTMpICU+JSAKICBzZWxlY3QoLWMoVHlwZSwgU3VyZmFjZV90cmF1bWEpKSAlPiUgCiAgc2VsZWN0KC1jKEMxN1Y6YEVyb3Npb25fWzM3XWApKSAlPiUgCiAgc2VsZWN0KC1jKGA5X0NQSV9bMTYvMTddYDogYDEyYilfM19fbG9rYWxpemF0aW9uX29mX3BhdGhvbG9neWApKSAlPiUgCiAgc2VsZWN0KC1jKGAzX1BhaW5fb3Jfb3RoZXJfZGVudGFsX2Rpc29yZGVyc19pbl9sYXN0XzEyX21vbnRoc2A6IGAyN19GcmVxdWVuY3lfb2ZfdHJhdmVsc19pbl9hYnJvYWRfaW5fbGFzdF8xMl9tb250aHNfd2l0aF9mYW1pbHlgKSkgCgoKCmxldmVscyh0cmF1bWEkVHJhdW1hX3N0YXR1cylbKHRyYXVtYSRUcmF1bWFfc3RhdHVzKSA9PSAiTkEiXSA8LSAiMCIgCgp0cmF1bWEkVG9vdGggPC0gYXMuZmFjdG9yKHRyYXVtYSRUb290aCkgIyBjb252ZXJ0IHRvIGZhY3Rvcgp0cmF1bWEkVG9vdGggPC0gb3JkZXJlZCh0cmF1bWEkVG9vdGgsIGxldmVscyA9IGMoIjE3IiwgIjE2IiwgIjE1IiwgIjE0IiwgIjEzIiwgIjEyIiwgIjExIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjEiLCAiMjIiLCAiMjMiLCAiMjQiLCAiMjUiLCAiMjYiLCAiMjciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0NyIsICI0NiIsICI0NSIsICI0NCIsICI0MyIsICI0MiIsICI0MSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMxIiwgIjMyIiwgIjMzIiwgIjM0IiwgIjM1IiwgIjM2IiwgIjM3IikpCgp0cmF1bWFfYnlfdG9vdGggPC0gZnRhYmxlKHRyYXVtYSRUb290aCwgdHJhdW1hJFRyYXVtYV9zdGF0dXMpCnRyYXVtYV9ieV90b290aApjYXB0dXJlLm91dHB1dCh0cmF1bWFfYnlfdG9vdGgsIGZpbGUgPSAiLi90YWJsZXMvdHJhdW1hX2J5X3Rvb3RoLnR4dCIpCnJtKHRyYXVtYV9ieV90b290aCkKCiMgciB0cmF1bWEgcG9yIG5pw7FvfQoKdHJhdW1hIDwtIHRyYXVtYSAlPiUgCiAgZ3JvdXBfYnkoSUQsIFRvb3RoKSAlPiUgCiAgc3VtbWFyaXNlKHRyYXVtYW1heCA9IG1heChUcmF1bWFfc3RhdHVzKSkgJT4lIAogIHNwcmVhZChUb290aCwgdHJhdW1hbWF4LCBmaWxsID0gMCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy9JRF94X3Rvb3RoX3RyYXVtYV9zdGF0dXMuY3N2IikKCnJtKHRyYXVtYSkKCmBgYAoKCgojIyBQZXJpb2RvbnRhbAogICAgMS4JJSBkZSBuaW5vcyBxdWUgdG9kb3MgQ1BJVE4gdGllbmUgMCA6IDU0NywgMjUuNTglCiAgICAyLgklIGRlIG5pbm9zIHF1ZSBtYXhpbXVtIHZhbG9yIGRlIENQSVROLCB0aWVuZSAxIChzYW5ncmFtaWVudG8pOiAxMTEwLCA1MS45MiUKICAgIDMuCSUgZGUgbmlub3MsIHF1ZSB0aWVuZW4gMjogNDc3LCAyMi4zMSUKICAgIDQuCSUgZGUgbmlub3MsIHF1ZSB0aWVuZW4gMzogMywgMC4xNCUKICAgIDUuCSUgZGUgbmlub3MsIHF1ZSB0aWVuZW4gNDogMSwgMC4wNSUKCgpgYGB7ciBQZXJpb2RvbnRhbH0KcGVyaW9kb250YWwgPC0gZGYgJT4lIAogIGdhdGhlcigiVG9vdGgiLCAicGVyaW9fc3RhdHVzIiwgYDlfQ1BJX1sxNi8xN11gOmA5X0NQSV9bMzYvMzddYCkgJT4lIAogIHNlcGFyYXRlKFRvb3RoLCBjKCJUb290aCIsICJTdXJmYWNlIiksIHNlcCA9IC04KSAlPiUgCiAgc2VsZWN0KC1jKGBDMTdWYDogYFRyYXVtYV9bMzddYCkpCgoKcGVyaW9kb250YWwkU3VyZmFjZSA8LSBhcy5mYWN0b3IocGVyaW9kb250YWwkU3VyZmFjZSkgIyBjb252ZXJ0IHRvIGZhY3RvcgpwZXJpb2RvbnRhbCRTdXJmYWNlIDwtIG9yZGVyZWQocGVyaW9kb250YWwkU3VyZmFjZSwgbGV2ZWxzID0gYygiWzE2LzE3XSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQSV9bMTFdIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlsyNi8yN10iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWzQ2LzQ3XSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQSV9bMzFdIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlszNi8zN10iKSkKCgpwZXJpb2RvbnRhbCAlPiUgCiAgZ3JvdXBfYnkoU3VyZmFjZSwgcGVyaW9fc3RhdHVzKSAlPiUgCiAgc3VtbWFyaXNlKG4gPSBuKCkpICU+JSAKICBzcHJlYWQocGVyaW9fc3RhdHVzLCBuLCBmaWxsID0gMCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy90b290aF94X3Blcmlvc3RhdHVzLmNzdiIpCgpwZXJpb2RvbnRhbCAlPiUgCiAgZ3JvdXBfYnkoSUQsIFN1cmZhY2UsIHBlcmlvX3N0YXR1cykgJT4lIAogIHN1bW1hcmlzZShuID0gbigpKSAlPiUgCiAgc3ByZWFkKFN1cmZhY2UsIHBlcmlvX3N0YXR1cywgZmlsbCA9IDApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvSURfeF9wZXJpb3RhdHVzLmNzdiIpCgojIEdFTkRFUgoKcGVyaW9kb250YWwgJT4lIAogIGdyb3VwX2J5KGAxX2dlbmRlcmAsIHBlcmlvX3N0YXR1cykgJT4lIAogIHN1bW1hcmlzZShuID0gbigpKSAlPiUgCiAgc3ByZWFkKHBlcmlvX3N0YXR1cywgbiwgZmlsbCA9IDApICU+JSAKICB3cml0ZS5jc3YoLGZpbGUgPSAiLi90YWJsZXMvdG9vdGhfeF9nZW5kZXJfcGVyaW9zdGF0dXMuY3N2IikKCiMgUkVHSU9OCnBlcmlvZG9udGFsICU+JSAKICBncm91cF9ieShSZWdpb25OYW1lLCBwZXJpb19zdGF0dXMpICU+JSAKICBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIAogIHNwcmVhZChwZXJpb19zdGF0dXMsIG4sIGZpbGwgPSAwKSAlPiUgCiAgd3JpdGUuY3N2KCxmaWxlID0gIi4vdGFibGVzL3Rvb3RoX3hfcmVnaW9uX3Blcmlvc3RhdHVzLmNzdiIpCgojIENJVFkKCnBlcmlvZG9udGFsICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgcGVyaW9fc3RhdHVzKSAlPiUgCiAgc3VtbWFyaXNlKG4gPSBuKCkpICU+JSAKICBzcHJlYWQocGVyaW9fc3RhdHVzLCBuLCBmaWxsID0gMCkgJT4lIAogIHdyaXRlLmNzdigsZmlsZSA9ICIuL3RhYmxlcy90b290aF94X2xpdmVpbl9wZXJpb3N0YXR1cy5jc3YiKQpybShwZXJpb2RvbnRhbCkKYGBgCgoKIyMgRmx1b3Jvc2lzCiAgICAxLgklIGRlIG5pbm9zLCBxdWUgdGllbmVuIGZsdW9yb3NpcyAoMS01KTogMjMsIDEuMDglCiAgICAxLgklIGRlIG5pbm9zLCBxdWUgdGllbmVuIDE6IDExLCAwLjUxJQogICAgMi4JJSBkZSBuaW5vcywgcXVlIHRpZW5lbiAyOiA4LCAwLjM3JQogICAgMy4JJSBkZSBuaW5vcywgcXVlIHRpZW5lbiAzOiA0LCAwLjE5JQoKYGBge3J9CgpkZiAlPiUgCiAgZ3JvdXBfYnkoYDEwX0ZsdW9yb3Npc2ApICU+JSAKICBzdW1tYXJpc2Uobj1uKCkpICU+JSAKICB3cml0ZS5jc3YoZmlsZSA9ICIuL3RhYmxlcy9mbHVvcm9zaXMuY3N2Iiwgcm93Lm5hbWVzID0gRikKICAKCmRmICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgMTBfRmx1b3Jvc2lzYCkgJT4lIAogIHN1bW1hcmlzZShuPW4oKSkgJT4lIAogIHNwcmVhZChgMTBfRmx1b3Jvc2lzYCwgbiwgZmlsbCA9IDApICU+JSAKICB3cml0ZS5jc3YoZmlsZSA9ICIuL3RhYmxlcy9mbHVvcm9zaXNfeF9nZW5kZXIuY3N2Iiwgcm93Lm5hbWVzID0gRikKCmRmICU+JSAKICBncm91cF9ieShSZWdpb25OYW1lLCBgMTBfRmx1b3Jvc2lzYCkgJT4lIAogIHN1bW1hcmlzZShuPW4oKSkgJT4lIAogIHNwcmVhZChgMTBfRmx1b3Jvc2lzYCwgbiwgZmlsbCA9IDApICU+JSAKICB3cml0ZS5jc3YoZmlsZSA9ICIuL3RhYmxlcy9mbHVvcm9zaXNfeF9yZWdpb24uY3N2Iiwgcm93Lm5hbWVzID0gRikKCmRmICU+JSAKICBncm91cF9ieShgMl9MaXZlX2luYCwgYDEwX0ZsdW9yb3Npc2ApICU+JSAKICBzdW1tYXJpc2Uobj1uKCkpICU+JSAKICBzcHJlYWQoYDEwX0ZsdW9yb3Npc2AsIG4gLCBmaWxsID0gMCkgJT4lIAogIHdyaXRlLmNzdihmaWxlID0gIi4vdGFibGVzL2ZsdW9yb3Npc194X2xpdmVpbi5jc3YiLCByb3cubmFtZXMgPSBGKQoKYGBgCgoKCiAgIAogICAgCiMjIE9ydGhvZG9udGljcwogICAgMS4JJSBkZSBuaW5vcyBxdWUgdGllbmVuIHRyYXRhbWllbnRvICgxKTogNjAsIDIuOCUKCmBgYHtyfQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDExX09ydGhvZG9udGljX3RyZWF0bWVudGApICU+JSAKICBzdW1tYXJpc2Uobj1uKCkpCmBgYAoKCgoKCiMjIFBhdG9sb2d5CiAgICAxLgklIGRlIG5pbm9zLCBxdWUgdGllbmVuIGFsZ3VuYSBwYXRvbG9naWEgKDEtNik6MjcsIDEuMjYlCiAgICAgICAgMS4JJSBkZSBuaW5vcywgcXVlIHRpZW5lbiAxCiAgICAgICAgMi4JJSBkZSBuaW5vcywgcXVlIHRpZW5lbiAyCiAgICAgICAgMy4JJSBkZSBuaW5vcywgcXVlIHRpZW5lbiAzCiAgICAgICAgNC4JJSBkZSBuaW5vcywgcXVlIHRpZW5lbiA0CiAgICAgICAgNS4JJSBkZSBuaW5vcywgcXVlIHRpZW5lbiA1CiAgICAyLgllbiBxdWUgbHVnYXIgdGllbmVuIHBhdG9sb2dpYXMKICAgICAgICAxLgklIGRlIHBhdG9sb2dpYXMgZW4gbHVnYXIgMQogICAgICAgICAgICAxLgklIGRlIHBhdG9sb2dpYSAxIGVuIGx1Z2FyIDEKICAgICAgICAgICAgMi4JJSBkZSBwYXRvbG9naWEgMiBlbiBsdWdhciAxCiAgICAgICAgICAgIDMuCSUgZGUgcGF0b2xvZ2lhIDMgZW4gbHVnYXIgMQogICAgICAgICAgICA0LgklIGRlIHBhdG9sb2dpYSA0IGVuIGx1Z2FyIDEKICAgICAgICAgICAgNS4JJSBkZSBwYXRvbG9naWEgNSBlbiBsdWdhciAxCiAgICAgICAgMi4JJSBkZSBwYXRvbG9naWFzIGVuIGx1Z2FyIDIKICAgICAgICAgICAgMS4JJSBkZSBwYXRvbG9naWEgMSBlbiBsdWdhciAyCiAgICAgICAgICAgIDIuCSUgZGUgcGF0b2xvZ2lhIDIgZW4gbHVnYXIgMgogICAgICAgICAgICAzLgklIGRlIHBhdG9sb2dpYSAzIGVuIGx1Z2FyIDIKICAgICAgICAgICAgNC4JJSBkZSBwYXRvbG9naWEgNCBlbiBsdWdhciAyCiAgICAgICAgICAgIDUuCSUgZGUgcGF0b2xvZ2lhIDUgZW4gbHVnYXIgMgogICAgICAgIDMuCSUgZGUgcGF0b2xvZ2lhcyBlbiBsdWdhciAzCiAgICAgICAgICAgIDEuCSUgZGUgcGF0b2xvZ2lhIDEgZW4gbHVnYXIgMwogICAgICAgICAgICAyLgklIGRlIHBhdG9sb2dpYSAyIGVuIGx1Z2FyIDMKICAgICAgICAgICAgMy4JJSBkZSBwYXRvbG9naWEgMyBlbiBsdWdhciAzCiAgICAgICAgICAgIDQuCSUgZGUgcGF0b2xvZ2lhIDQgZW4gbHVnYXIgMwogICAgICAgICAgICA1LgklIGRlIHBhdG9sb2dpYSA1IGVuIGx1Z2FyIDMKICAgICAgICA0LgklIGRlIHBhdG9sb2dpYXMgZW4gbHVnYXIgNAogICAgICAgICAgICAxLgklIGRlIHBhdG9sb2dpYSAxIGVuIGx1Z2FyIDQKICAgICAgICAgICAgMi4JJSBkZSBwYXRvbG9naWEgMiBlbiBsdWdhciA0CiAgICAgICAgICAgIDMuCSUgZGUgcGF0b2xvZ2lhIDMgZW4gbHVnYXIgNAogICAgICAgICAgICA0LgklIGRlIHBhdG9sb2dpYSA0IGVuIGx1Z2FyIDQKICAgICAgICAgICAgNS4JJSBkZSBwYXRvbG9naWEgNSBlbiBsdWdhciA0CiAgICAgICAgNS4JJSBkZSBwYXRvbG9naWFzIGVuIGx1Z2FyIDUKICAgICAgICAgICAgMS4JJSBkZSBwYXRvbG9naWEgMSBlbiBsdWdhciA1CiAgICAgICAgICAgIDIuCSUgZGUgcGF0b2xvZ2lhIDIgZW4gbHVnYXIgNQogICAgICAgICAgICAzLgklIGRlIHBhdG9sb2dpYSAzIGVuIGx1Z2FyIDUKICAgICAgICAgICAgNC4JJSBkZSBwYXRvbG9naWEgNCBlbiBsdWdhciA1CiAgICAgICAgICAgIDUuCSUgZGUgcGF0b2xvZ2lhIDUgZW4gbHVnYXIgNQogICAgICAgIDYuCSUgZGUgcGF0b2xvZ2lhcyBlbiBsdWdhciA2CiAgICAgICAgICAgIDEuCSUgZGUgcGF0b2xvZ2lhIDEgZW4gbHVnYXIgNgogICAgICAgICAgICAyLgklIGRlIHBhdG9sb2dpYSAyIGVuIGx1Z2FyIDYKICAgICAgICAgICAgMy4JJSBkZSBwYXRvbG9naWEgMyBlbiBsdWdhciA2CiAgICAgICAgICAgIDQuCSUgZGUgcGF0b2xvZ2lhIDQgZW4gbHVnYXIgNgogICAgICAgICAgICA1LgklIGRlIHBhdG9sb2dpYSA1IGVuIGx1Z2FyIDYKICAgICAgICA3LgklIGRlIHBhdG9sb2dpYXMgZW4gbHVnYXIgNwogICAgICAgICAgICAxLgklIGRlIHBhdG9sb2dpYSAxIGVuIGx1Z2FyIDcKICAgICAgICAgICAgMi4JJSBkZSBwYXRvbG9naWEgMiBlbiBsdWdhciA3CiAgICAgICAgICAgIDMuCSUgZGUgcGF0b2xvZ2lhIDMgZW4gbHVnYXIgNwogICAgICAgICAgICA0LgklIGRlIHBhdG9sb2dpYSA0IGVuIGx1Z2FyIDcKICAgICAgICAgICAgNS4JJSBkZSBwYXRvbG9naWEgNSBlbiBsdWdhciA3CiAgICAgICAgOC4JJSBkZSBwYXRvbG9naWFzIGVuIGx1Z2FyIDgKICAgICAgICAgICAgMS4JJSBkZSBwYXRvbG9naWEgMSBlbiBsdWdhciA4CiAgICAgICAgICAgIDIuCSUgZGUgcGF0b2xvZ2lhIDIgZW4gbHVnYXIgOAogICAgICAgICAgICAzLgklIGRlIHBhdG9sb2dpYSAzIGVuIGx1Z2FyIDgKICAgICAgICAgICAgNC4JJSBkZSBwYXRvbG9naWEgNCBlbiBsdWdhciA4CiAgICAgICAgICAgIDUuCSUgZGUgcGF0b2xvZ2lhIDUgZW4gbHVnYXIgOAoKCmBgYHtyIHBhdG9sb2dpYSB0YWJsYXN9CnRhYmxlKGRmJGAxMmEpXzFfb3JhbF9wYXRob2xvZ3lgKQp0YWJsZShkZiRgMTJhKV8yX29yYWxfcGF0aG9sb2d5YCkKdGFibGUoZGYkYDEyYSlfM19vcmFsX3BhdGhvbG9neWApCiAgCnggPC0gdGFibGUoZGYkYDEyYSlfMV9vcmFsX3BhdGhvbG9neWAsIGRmJGAxMmIpXzFfbG9rYWxpemF0aW9uX29mX3BhdGhvbG9neWApCmNhcHR1cmUub3V0cHV0KHgsIGZpbGUgPSAiLi90YWJsZXMvcGF0bzEuY3N2IikKeCA8LSB0YWJsZShkZiRgMTJhKV8yX29yYWxfcGF0aG9sb2d5YCwgZGYkYDEyYilfMl9fbG9rYWxpemF0aW9uX29mX3BhdGhvbG9neWApCmNhcHR1cmUub3V0cHV0KHgsIGZpbGUgPSAiLi90YWJsZXMvcGF0bzIuY3N2IikKeCA8LSB0YWJsZShkZiRgMTJhKV8zX29yYWxfcGF0aG9sb2d5YCwgZGYkYDEyYilfM19fbG9rYWxpemF0aW9uX29mX3BhdGhvbG9neWApCmNhcHR1cmUub3V0cHV0KHgsIGZpbGUgPSAiLi90YWJsZXMvcGF0bzMuY3N2IikKCnJtKHgpCgpgYGAKCiMjIERNRgoKClJlY29kZSB2YXJpYWJsZXMsIAp2ZXIgZW4gaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMTJCLTJDWk0zNWx0Mi1EaElIZDZ0NVF5bEwyb0RZaWwxVHNBZGVfTldOS1EvZWRpdCNnaWQ9NzIwMzUwOTA4CmBgYHtyIGNyZWF0ZSBjYXJpZXN9CmNhcmllcyA8LSBkZgpjYXJpZXMgPC0gY2FyaWVzICU+JSAKICBzZWxlY3QoLWMoYEVyb3Npb25fWzE3XWA6YDEyYilfM19fbG9rYWxpemF0aW9uX29mX3BhdGhvbG9neWApKSAlPiUgCiAgc2VsZWN0KC1jKGAzX1BhaW5fb3Jfb3RoZXJfZGVudGFsX2Rpc29yZGVyc19pbl9sYXN0XzEyX21vbnRoc2A6YDI3X0ZyZXF1ZW5jeV9vZl90cmF2ZWxzX2luX2Ficm9hZF9pbl9sYXN0XzEyX21vbnRoc193aXRoX2ZhbWlseWApKSAlPiUgCiAgc2VsZWN0KC1jKEFtb3VudCwgQWdlLCBUaW1lLCBgMV9FeGFtaW5hdG9yYCApKSAlPiUgCiAgc2VsZWN0KC1jKGAyX0V4YW1pbmF0aW9uX2RhdGVgLCBSZWdpb25zS29kcywgU2tvbGFzS29kcywgYDNjX0NoaWxkX25yYCwgCiAgICAgICAgICAgIGAzZF9FeGFtaW5hdGlvbl90aW1lXyhmb3JzdF9vcl9zZWNvbmQpYCwgYDRfQmlydGhfZGF0ZWAsIAogICAgICAgICAgICBGQVMpKQpgYGAKCgpgYGB7ciByZWNvZGUgY2FyaWVzIHZhbHVlc30KIyBwYXJhIGNhcmllcwpjYXJpZXNbLDE6MTQwXSA8LSBpZmVsc2UoY2FyaWVzWywxOjE0MF0gPT0gIjAiLCAiMCIsCiAgICAgICAgICAgIGlmZWxzZShjYXJpZXNbLDE6MTQwXSA9PSAiOTgiLCAiMCIsCiAgICAgICAgICAgIGlmZWxzZShjYXJpZXNbLDE6MTQwXSA9PSAiOTkiLCAiMCIsCiAgICAgICAgICAgIGlmZWxzZShjYXJpZXNbLDE6MTQwXSA9PSAiQSIsICIxIiwKICAgICAgICAgICAgaWZlbHNlKGNhcmllc1ssMToxNDBdID09ICJCIiwgIjIiLAogICAgICAgICAgICBpZmVsc2UoY2FyaWVzWywxOjE0MF0gPT0gIkMiLCAiMyIsCiAgICAgICAgICAgIGlmZWxzZShjYXJpZXNbLDE6MTQwXSA9PSAiOTciLCAiNCIsCiAgICAgICAgICAgICAibmEiKSkpKSkpKQpjYXJpZXNbLDE6MTQwXSA8LSBsYXBwbHkoY2FyaWVzWywxOjE0MF0sIGFzLmZhY3RvcikgIyBhbGwgdGhlIGNhcmllcyBzdGF0dXMgdG8gZmFjdG9ycyAjIGFsbCB0aGUgY2FyaWVzIHN0YXR1cyB0byBmYWN0b3JzCgojcGFyYSByZXN0YXVyYWNpb25lcwpjYXJpZXNbLDE0MToyODBdIDwtIGlmZWxzZShjYXJpZXNbLDE0MToyODBdID09ICIwIiwgIjAiLAogICAgICAgICAgICBpZmVsc2UoY2FyaWVzWywxNDE6MjgwXSA9PSAiMSIsICIxMCIsCiAgICAgICAgICAgIGlmZWxzZShjYXJpZXNbLDE0MToyODBdID09ICIyIiwgIjIwIiwKICAgICAgICAgICAgaWZlbHNlKGNhcmllc1ssMTQxOjI4MF0gPT0gIjMiLCAiMzAiLAogICAgICAgICAgICBpZmVsc2UoY2FyaWVzWywxNDE6MjgwXSA9PSAiNCIsICI0MCIsCiAgICAgICAgICAgICAibmEiKSkpKSkKICAgICAgICAgICAgCmNhcmllc1ssMTQxOjI4MF0gPC0gbGFwcGx5KGNhcmllc1ssMTQxOjI4MF0sIGFzLmZhY3RvcikKCiMgY3JlYXRlIHR3byBuZXcgZGF0YXNldHMsIG9uZSBmb3IgQyBhbmQgYW5vdGhlciBmb3IgUgoKY2FyaWVzX2MgPC0gY2FyaWVzICU+JQogIHNlbGVjdCgtYyhSMTdWOlIzN1YpKSAlPiUgCiAgZ2F0aGVyKCJUb290aF9jIiwgIkMiLCBDMTdWOkMzN1YpICU+JSAKICBtdXRhdGUoSURfVG9vdGggPSBwYXN0ZShJRCwgVG9vdGhfYywgc2VwID0gIl8iKSApCgpjYXJpZXNfciA8LSBjYXJpZXMgJT4lCiAgc2VsZWN0KC1jKEMxN1Y6QzM3VikpICU+JSAKICBnYXRoZXIoIlRvb3RoX3IiLCAiUiIsIFIxN1Y6UjM3VikgJT4lIAogIHNlbGVjdCgtYyhgMV9nZW5kZXJgLCBgMl9MaXZlX2luYCwgRkFTX2NhdCwgUmVnaW9uTmFtZSwgU2tvbGFOYW1lKSkgJT4lIAogIG11dGF0ZShJRF9Ub290aCA9IHBhc3RlKElELCBUb290aF9yLCBzZXAgPSAiXyIpICkgCgpjYXJpZXNfciRJRF9Ub290aCA8LSBnc3ViKCJfUiIsICJfQyIsIGNhcmllc19yJElEX1Rvb3RoKQoKY2FyaWVzIDwtIGxlZnRfam9pbihjYXJpZXNfYywgY2FyaWVzX3IsIGJ5ID0gIklEX1Rvb3RoIikKcm0oY2FyaWVzX2MpOyBybShjYXJpZXNfcikKCmBgYAoKYGBge3IgY2FsY3VsYXRlIERNRlMgfQoKY2FyaWVzW2Nhcmllcz09Im5hIl0gPC0gMCAjcmVjb2RpZmljbyBlbCDDum5pY28gbmEgZGUgYwoKY2FyaWVzJEMgPC0gYXMuaW50ZWdlcihjYXJpZXMkQykKY2FyaWVzJFIgPC0gYXMuaW50ZWdlcihjYXJpZXMkUikKCgpjYXJpZXMgPC0gY2FyaWVzICU+JSAKICBtdXRhdGUoU3VtYV9DX21hc19SID0gcm93U3VtcyggY2JpbmQgKFIsQyksIG5hLnJtPVRSVUUpKQpgYGAKCmBgYHtyIGNyZWF0ZSBEMU1GU30KCiMgcmVjb2RlCgpjYXJpZXMkRE1GUwlbY2FyaWVzJFN1bWFfQ19tYXNfUiA9PSAJMAldIDwtCTAKY2FyaWVzJERNRlMJW2NhcmllcyRTdW1hX0NfbWFzX1IgPT0gCTEJXSA8LQkxCmNhcmllcyRETUZTCVtjYXJpZXMkU3VtYV9DX21hc19SID09IAkxMQldIDwtCTEKY2FyaWVzJERNRlMJW2NhcmllcyRTdW1hX0NfbWFzX1IgPT0gCTIxCV0gPC0JMgpjYXJpZXMkRE1GUwlbY2FyaWVzJFN1bWFfQ19tYXNfUiA9PSAJMzEJXSA8LQkyCmNhcmllcyRETUZTCVtjYXJpZXMkU3VtYV9DX21hc19SID09IAk0MQldIDwtCTIKY2FyaWVzJERNRlMJW2NhcmllcyRTdW1hX0NfbWFzX1IgPT0gCTIJXSA8LQkzCmNhcmllcyRETUZTCVtjYXJpZXMkU3VtYV9DX21hc19SID09IAkzCV0gPC0JMwpjYXJpZXMkRE1GUwlbY2FyaWVzJFN1bWFfQ19tYXNfUiA9PSAJMTIJXSA8LQkzCmNhcmllcyRETUZTCVtjYXJpZXMkU3VtYV9DX21hc19SID09IAkxMwldIDwtCTMKY2FyaWVzJERNRlMJW2NhcmllcyRTdW1hX0NfbWFzX1IgPT0gCTIyCV0gPC0JMwpjYXJpZXMkRE1GUwlbY2FyaWVzJFN1bWFfQ19tYXNfUiA9PSAJMjMJXSA8LQkzCmNhcmllcyRETUZTCVtjYXJpZXMkU3VtYV9DX21hc19SID09IAkzMgldIDwtCTMKY2FyaWVzJERNRlMJW2NhcmllcyRTdW1hX0NfbWFzX1IgPT0gCTMzCV0gPC0JMwpjYXJpZXMkRE1GUwlbY2FyaWVzJFN1bWFfQ19tYXNfUiA9PSAJNDIJXSA8LQkzCmNhcmllcyRETUZTCVtjYXJpZXMkU3VtYV9DX21hc19SID09IAk0MwldIDwtCTMKY2FyaWVzJERNRlMJW2NhcmllcyRTdW1hX0NfbWFzX1IgPT0gCTQJXSA8LQk0CgoKYGBgCgoKTm93IHNlcGFyYXRlIFRvb3RoIGNhcmllcyBpbiB0aGUgbGFzdCBsZXR0ZXIKYGBge3IgY2FyaWVzLCB0eXBlICsgdG9vdGggKyBzdXJmYWNlfQpjYXJpZXMgPC0gY2FyaWVzICU+JSAKICBzZXBhcmF0ZShUb290aF9jLCBjKCJUb290aCIsICJTdXJmYWNlIiksIHNlcCA9IC0yKSAlPiUKICBzZXBhcmF0ZShUb290aCwgYygiT21pdCIsICJUb290aCIpLCBzZXAgPSAtMykgJT4lIAogIHNlbGVjdCgtYyhJRF9Ub290aCwgSUQueSwgVG9vdGhfciwgT21pdCkpCmNhcmllcyRUb290aCA8LSBhcy5mYWN0b3IoY2FyaWVzJFRvb3RoKSAjIGNvbnZlcnQgdG8gZmFjdG9yCmNhcmllcyRUb290aCA8LSBvcmRlcmVkKGNhcmllcyRUb290aCwgbGV2ZWxzID0gYygiMTciLCAiMTYiLCAiMTUiLCAiMTQiLCAiMTMiLCAiMTIiLCAiMTEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMSIsICIyMiIsICIyMyIsICIyNCIsICIyNSIsICIyNiIsICIyNyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQ3IiwgIjQ2IiwgIjQ1IiwgIjQ0IiwgIjQzIiwgIjQyIiwgIjQxIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMzEiLCAiMzIiLCAiMzMiLCAiMzQiLCAiMzUiLCAiMzYiLCAiMzciKSkKYGBgCgojIyMgRE1GUwpgYGB7ciBETUZTfQpjYXJpZXMgJT4lIAogIGdyb3VwX2J5KERNRlMsIFRvb3RoKSAlPiUgCiAgc3VtbWFyaXNlKG4gPSBuKCkpICU+JSAKICBzcHJlYWQoVG9vdGgsIG4sIGZpbGwgPSAwKSAlPiUgCiAgd3JpdGUuY3N2KGZpbGUgPSAiLi90YWJsZXMvRE1GU3h0b290aC5jc3YiKSAgCmBgYAoKIyMjIERNRlQKCmBgYHtyIERNRlQgMX0KRE1GVCA8LSBjYXJpZXMgJT4lIAogIHVuaXRlKFRvb3RoX3N1cmZhY2UsIFRvb3RoLCBTdXJmYWNlKSAlPiUgCiAgc3ByZWFkKFRvb3RoX3N1cmZhY2UsIFN1bWFfQ19tYXNfUikKYGBgCgoKYGBge3IgZGF0YXNldH0KCkRNRlQgcmVzdW1pZG8KRE1GVF9yZXN1bWlkbyA8LSByZWFkX2NzdjIoIkRNRlRfcGFyYV9jYWxjdWxvcy5jc3YiKQoKYGBgCgojIyMjIFNleAojIyMjIyBTZXggRDEKYGBge3IgUG9yIGfDqW5lcm8gRDF9CgpETUZUX3Jlc3VtaWRvICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBgZDFkM21mdC1iaW5gKSAlPiUgCiAgc3VtbWFyaXNlKG4gPSBuKCkpICU+JSAKICBzcHJlYWQoYGQxZDNtZnQtYmluYCwgbikKCgpgYGAKYGBge3IgY2hpIGdlbmVybyBEMSB9CmNoaXNxLnRlc3QodGFibGUoRE1GVF9yZXN1bWlkbyRgMV9nZW5kZXJgLCBETUZUX3Jlc3VtaWRvJGBkMWQzbWZ0LWJpbmApKQpgYGAKCiMjIyMjIFNleCBEMwpgYGB7ciBwb3IgZ2VuZXJvIEQzfQpETUZUX3Jlc3VtaWRvICU+JSAKICBncm91cF9ieShgMV9nZW5kZXJgLCBkM21mdGJpbikgJT4lIAogIHN1bW1hcmlzZShuPW4oKSkgJT4lIAogIHNwcmVhZChkM21mdGJpbiwgbikKYGBgCgpgYGB7ciBjaGkgcG9yIGdlbmVybyBkM30KY2hpc3EudGVzdCh0YWJsZShETUZUX3Jlc3VtaWRvJGAxX2dlbmRlcmAsIERNRlRfcmVzdW1pZG8kZDNtZnRiaW4pKQpgYGAKCiMjIyMgUmVnaW9uCiMjIyMjIHJlZ2lvbiBEMQoKCmBgYHtyIFBvciByZWdpw7NufQpETUZUX3Jlc3VtaWRvICU+JSAKICBncm91cF9ieShSZWdpb25OYW1lLCBgZDFkM21mdC1iaW5gKSAlPiUKICBzdW1tYXJpc2UoIG49IG4oKSkgJT4lIAogIHNwcmVhZChgZDFkM21mdC1iaW5gLCBuKQpgYGAKCmBgYHtyIGNoaSByZWdpb259CmNoaXNxLnRlc3QodGFibGUoRE1GVF9yZXN1bWlkbyRSZWdpb25OYW1lLCBETUZUX3Jlc3VtaWRvJGBkMWQzbWZ0LWJpbmApKQpgYGAKCiMjIyMjIFJlZ2lvbiBEMwpgYGB7ciByZWdpb24gZDN9CkRNRlRfcmVzdW1pZG8gJT4lIAogIGdyb3VwX2J5KFJlZ2lvbk5hbWUsIGQzbWZ0YmluKSAlPiUgCiAgc3VtbWFyaXNlKG49bigpKSAlPiUgCiAgc3ByZWFkKGQzbWZ0YmluLCBuKQpgYGAKCmBgYHtyIGNoaSByZWdpb24gZDN9CmNoaXNxLnRlc3QodGFibGUoRE1GVF9yZXN1bWlkbyRSZWdpb25OYW1lLCBETUZUX3Jlc3VtaWRvJGQzbWZ0YmluKSkKYGBgCiMjIyMgRkFTIERNRlQKIyMjIyMgRkFTIEQxCmBgYHtyIHBvciBGQVMgRDF9CkRNRlRfcmVzdW1pZG8gJT4lIAogIGdyb3VwX2J5KEZBU19jYXQsIGBkMWQzbWZ0LWJpbmApICU+JSAKICBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIAogIHNwcmVhZChgZDFkM21mdC1iaW5gLCBuKQpgYGAKCmBgYHtyfQpjaGlzcS50ZXN0KHRhYmxlKERNRlRfcmVzdW1pZG8kRkFTX2NhdCwgRE1GVF9yZXN1bWlkbyRgZDFkM21mdC1iaW5gKSkKYGBgCgojIyMjIEZBUyBEMwpgYGB7ciBGQVMgRDN9CkRNRlRfcmVzdW1pZG8gJT4lIAogIGdyb3VwX2J5KEZBU19jYXQsIGBkM21mdGJpbmApICU+JSAKICBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIAogIHNwcmVhZChgZDNtZnRiaW5gLCBuKQpgYGAKCgoKYGBge3IgY2hpIGZhcyBkM30KY2hpc3EudGVzdCh0YWJsZShETUZUX3Jlc3VtaWRvJEZBU19jYXQsIERNRlRfcmVzdW1pZG8kZDNtZnRiaW4pKQpgYGAKCgoKIyBSaXNrcyBmYWN0b3JzCgoKYGBge3IgcmVjb2RlIGZvciBsb2dpc3RpYyByZWdyZXNzaW9ufQpkZi5sb2cgPC0gcmVhZF9jc3YoIlByZXZhbGVuY2VfZm9yX2FuYWx5c2lzLmNzdiIpCgpkZi5sb2ckYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgW2RmLmxvZyRgOF9GcmVxdWVuY3lfb2ZfdG9vdGhicnVzaGluZ2A9PSJPbmNlIHBlciBkYXkiXSA8LSAiMCIKZGYubG9nJGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYFtkZi5sb2ckYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgPT0iVHdvIG9yIG1vcmUgdGltZXMgcGVyIGRheSJdIDwtICIwIgoKZGYubG9nJGAxX2dlbmRlcmAgPC0gaWZlbHNlKGRmLmxvZyRgMV9nZW5kZXJgICA9PSAiRiIsIDAgLDEpCmRmLmxvZyRGQVNfY2F0IDwtIGlmZWxzZShkZi5sb2ckRkFTX2NhdCAgPT0gIkhpZ2ggYWZmbHVlbmNlIiwgMSAsMCkKZGYubG9nJGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCA8LSBpZmVsc2UoZGYubG9nJGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCAgPT0gIjAiLCAxICwwKQpkZi5sb2ckYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYCA8LSBpZmVsc2UoZGYubG9nJGA0X0ZyZXF1ZW5jeV9vZl9kZW50aXN0X3Zpc2l0c19pbl9sYXN0XzEyX21vbnRoc2AgID09ICJUd28gb3IgbW9yZSB0aW1lcyIsIDAgLDEpCmRmLmxvZyRgN19GcmVxdWVuY3lfb2ZfZGVudGFsX2h5Z2llbmlzdF92aXNpdHNgIDwtIGlmZWxzZShkZi5sb2ckYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCAgPT0gIlR3byBvciBtb3JlIHRpbWVzIHBlciB5ZWFyIiwgMCAsMSkKZGYubG9nJGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgPC0gaWZlbHNlKGRmLmxvZyRgOV9Vc2FnZV9vZl9kZW50YWxfZmxvc3NgICA9PSAiWWVzIiwgMCAsMSkKZGYubG9nJGA5X1VzYWdlX29mX21vdXRoX3dhc2hgIDwtIGlmZWxzZShkZi5sb2ckYDlfVXNhZ2Vfb2ZfbW91dGhfd2FzaGAgID09ICJZZXMiLCAwICwxKQpkZi5sb2ckYDExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzYCA8LSBpZmVsc2UoZGYubG9nJGAxMV9Vc2FnZV9vZl9mbHVvcmlkZV9zdXBwbGVtZW50c2AgID09ICJZZXMsIG5vdyIsIDAgLDEpCmRmLmxvZyRgMTNfRWF0aW5nX2hhYml0c19ncm91cGVkYCA8LSBpZmVsc2UoZGYubG9nJGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICA9PSAxLCAxICwwKQpkZi5sb2ckYDE4X0ZyZXF1ZW5jeV9vZl9zbW9raW5nYCA8LSBpZmVsc2UoZGYubG9nJGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgID09ICJOZXZlciIsIDEgLDApCmRmLmxvZyRTVU1BX1RTUF9TdWdhciA8LSBpZmVsc2UoZGYubG9nJFNVTUFfVFNQX1N1Z2FyIDwgMywgMCAsMSkKCmRmLmxvZyRgZDFkM21mdC1iaW5gIDwtIGlmZWxzZShkZi5sb2ckYGQxZDNtZnQtYmluYCA9PSAwLCAwICwxKQpkZi5sb2ckZDNtZnRiaW4gPC0gaWZlbHNlKGRmLmxvZyRkM21mdGJpbiA9PSAwLCAwICwxKQoKYGBgCgpgYGB7ciBMT0dSRUd9CmQxIDwtIGdsbShgZDFkM21mdC1iaW5gIH4gCiAgICAgICAgICAgICAgICAgIGAxX2dlbmRlcmAgKwogICAgICAgICAgICAgICAgICBGQVNfY2F0ICsgCiAgICAgICAgICAgICAgICAgIGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCArIAogICAgICAgICAgICAgICAgICBgNF9GcmVxdWVuY3lfb2ZfZGVudGlzdF92aXNpdHNfaW5fbGFzdF8xMl9tb250aHNgICArCiAgICAgICAgICAgICAgICAgIGA3X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c2AgKyAKICAgICAgICAgICAgICAgICAgYDlfVXNhZ2Vfb2ZfZGVudGFsX2Zsb3NzYCAgKwogICAgICAgICAgICAgICAgICBgOV9Vc2FnZV9vZl9tb3V0aF93YXNoYCArIAogICAgICAgICAgICAgICAgICBgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICArCiAgICAgICAgICAgICAgICAgIGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICsgCiAKICAgICAgICAgICAgICAgICAgU1VNQV9UU1BfU3VnYXIsIAogICAgICAgICAgICAgICAgZGF0YSA9IGRmLmxvZywgCiAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbCkKCnN1bW1hcnkoRDEubW9kZWxfMSkKYGBgCgpgYGB7cn0KZXhwKGNiaW5kKE9SID0gY29lZihEMS5tb2RlbF8xKSwgY29uZmludChEMS5tb2RlbF8xKSkpCgpgYGAKCmBgYHtyfQpkMiA8LSBnbG0oYGQxZDNtZnQtYmluYCB+IAogICAgICAgICAgICAgICAgICBgMV9nZW5kZXJgICsKICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBgOF9GcmVxdWVuY3lfb2ZfdG9vdGhicnVzaGluZ2AgKyAKICAgICAgICAgICAgICAgICAgYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYCAgKwogICAgICAgICAgICAgICAgICBgN19GcmVxdWVuY3lfb2ZfZGVudGFsX2h5Z2llbmlzdF92aXNpdHNgICsgCiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICArCiAgICAgICAgICAgICAgICAgIGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICsgCiAKICAgICAgICAgICAgICAgICAgU1VNQV9UU1BfU3VnYXIsIAogICAgICAgICAgICAgICAgZGF0YSA9IGRmLmxvZywgCiAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbCkKCnN1bW1hcnkoRDEubW9kZWxfMikKYGBgCgoKCmBgYHtyfQoKc3RhcmdhemVyKGQxLCBkMiwgdHlwZT0idGV4dCIsIGRpZ2l0cz0zLCAKICAgICAgICAgIGRlcC52YXIubGFiZWxzPWMoIkNhcmllcyBhdCBEMSAoPSAxKSIpLAogICAgICAgICAgY292YXJpYXRlLmxhYmVscz1jKCJTZXggKG1hbGUgPSAxKSIsCiAgICAgICAgICAgICAgICAgICAgIkZBUyAoTG93ID0gMSkiLAogICAgICAgICAgICAgICAgICAgICJGcmVxIFRvb3RoYnJ1c2hpbmcgKCA8IG9uY2UgcGVyIHdlZWsgPSAxKSIsCiAgICAgICAgICAgICAgICAgICAgICJGcmVxIHZpc2l0IGRlbnRpc3QgKCA8IG9uY2UgcGVyIHllYXIgPSAxKSIsCiAgICAgICAgICAgICAgICAgICAgIkZyZXEgdmlzaXQgaHlnaWVuaXN0ICggPCBvbmNlIHBlciB5ZWFyID0gMSkiLCAKICAgICAgICAgICAgICAgICAgICAiRGVudGFsIGZsb3NzIChubyB1c2UgPSAxKSIsIAogICAgICAgICAgICAgICAgICAgICJNb3V0aHdhc2ggKG5vIHVzZSA9IDEpIiwKICAgICAgICAgICAgICAgICAgICAiVXNlIG9mIGZsdW9yaWRlIHN1cHBsZW1lbnQgKG5vIHVzZSA9IDEpIiwgCiAgICAgICAgICAgICAgICAgICAgIkVhdGluZyBoYWJpdHMgKGhpZ2ggaW4gc3dlZXQgPSAxKSIsCiAgCiAgICAgICAgICAgICAgICAgICAgIk1vcmUgdGhhbiBvbmUgdGVhc3Bvb24gaW4gdGVhLCBjb2ZmZWUgb3IgY2FjYW8iKSwgCiBvdXQ9Im1vZGVsc0QxLnR4dCIpCgoKCmBgYAoKYGBge3J9CmQzIDwtIGdsbShkM21mdGJpbiB+IAogICAgICAgICAgICAgICAgICBgMV9nZW5kZXJgICsKICAgICAgICAgICAgICAgICAgRkFTX2NhdCArIAogICAgICAgICAgICAgICAgICBgOF9GcmVxdWVuY3lfb2ZfdG9vdGhicnVzaGluZ2AgKyAKICAgICAgICAgICAgICAgICAgYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYCAgKwogICAgICAgICAgICAgICAgICBgN19GcmVxdWVuY3lfb2ZfZGVudGFsX2h5Z2llbmlzdF92aXNpdHNgICsgCiAgICAgICAgICAgICAgICAgIGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgICsKICAgICAgICAgICAgICAgICAgYDlfVXNhZ2Vfb2ZfbW91dGhfd2FzaGAgKyAKICAgICAgICAgICAgICAgICAgYDExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzYCAgKwogICAgICAgICAgICAgICAgICBgMTNfRWF0aW5nX2hhYml0c19ncm91cGVkYCArIAoKICAgICAgICAgICAgICAgICAgU1VNQV9UU1BfU3VnYXIsIAogICAgICAgICAgICAgICAgZGF0YSA9IGRmLmxvZywgCiAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbCkKCmQ0IDwtIGdsbShkM21mdGJpbiB+IAogICAgICAgICAgICAgICAgICBgMV9nZW5kZXJgICsKICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBgOF9GcmVxdWVuY3lfb2ZfdG9vdGhicnVzaGluZ2AgKyAKICAgICAgICAgICAgICAgICAgYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYCAgKwogICAgICAgICAgICAgICAgICBgN19GcmVxdWVuY3lfb2ZfZGVudGFsX2h5Z2llbmlzdF92aXNpdHNgICsgCiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICArCiAgICAgICAgICAgICAgICAgIGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICsgCgogICAgICAgICAgICAgICAgICBTVU1BX1RTUF9TdWdhciwgCiAgICAgICAgICAgICAgICBkYXRhID0gZGYubG9nLCAKICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKQoKCgpgYGAKCmBgYHtyfQpzdW1tYXJ5KGQzKQoKYGBgCgpgYGB7cn0Kc3VtbWFyeShkNCkKYGBgCgoKYGBge3J9CnN0YXJnYXplcihkMywgZDQsIHR5cGU9InRleHQiLCBkaWdpdHM9MywgCiAgICAgICAgICBkZXAudmFyLmxhYmVscz1jKCJDYXJpZXMgYXQgRDMgKD0gMSkiKSwKICAgICAgICAgIGNvdmFyaWF0ZS5sYWJlbHM9YygiU2V4IChtYWxlID0gMSkiLAogICAgICAgICAgICAgICAgICAgICJGQVMgKExvdyA9IDEpIiwKICAgICAgICAgICAgICAgICAgICAiRnJlcSBUb290aGJydXNoaW5nICggPCBvbmNlIHBlciB3ZWVrID0gMSkiLAogICAgICAgICAgICAgICAgICAgICAiRnJlcSB2aXNpdCBkZW50aXN0ICggPCBvbmNlIHBlciB5ZWFyID0gMSkiLAogICAgICAgICAgICAgICAgICAgICJGcmVxIHZpc2l0IGh5Z2llbmlzdCAoIDwgb25jZSBwZXIgeWVhciA9IDEpIiwgCiAgICAgICAgICAgICAgICAgICAgIkRlbnRhbCBmbG9zcyAobm8gdXNlID0gMSkiLCAKICAgICAgICAgICAgICAgICAgICAiTW91dGh3YXNoIChubyB1c2UgPSAxKSIsCiAgICAgICAgICAgICAgICAgICAgIlVzZSBvZiBmbHVvcmlkZSBzdXBwbGVtZW50IChubyB1c2UgPSAxKSIsIAogICAgICAgICAgICAgICAgICAgICJFYXRpbmcgaGFiaXRzIChoaWdoIGluIHN3ZWV0ID0gMSkiLAogCiAgICAgICAgICAgICAgICAgICAgIk1vcmUgdGhhbiBvbmUgdGVhc3Bvb24gaW4gdGVhLCBjb2ZmZWUgb3IgY2FjYW8iKSwgCiBvdXQ9Im1vZGVsc0QzLnR4dCIpCmBgYAoKCgojIENpdGF0aW9uCmBgYHtyIGNpdGF0aW9ufQpjaXRhdGlvbigidGlkeXZlcnNlIikKY2l0YXRpb24oImx1YnJpZGF0ZSIpICNmb3IgZGF0ZXMKY2l0YXRpb24oKQpgYGAKCgoKCmBgYHtyIGV4cG9ydCB0byBzcHNzfQp3cml0ZS5mb3JlaWduKGRmLCAiZGF0YXNldF9vcmFsSGVhbHRoX0xWX3Nwc3MudHh0IiwgImRhdGFzZXRfb3JhbEhlYWx0aF9MVl9zcHNzLnNwcyIsICAgcGFja2FnZT0iU1BTUyIpCmBgYAoKIyBjb25zdW1vIGF6dWNhciBkw61hIHBvciBuacOxbyB5IGRtZnQKYGBge3J9CmRmICU+JQogIGdyb3VwX2J5KGBDb21pZGFzIGF6dWNhciBwb3IgZMOtYWApICU+JSAKICBzdW1tYXJpc2UoIlByb21lZGlvIEQzTUZUIiA9IG1lYW4oRDNNRlQpLCBuID0gbigpKSAlPiUgCiAgdW5ncm91cCgpCmBgYAoKCmBgYHtyfQpkZiRgQ29taWRhcyBhenVjYXIgcG9yIGTDrWEgYWdydXBhZG9gIDwtIGN1dDIoZGYkYENvbWlkYXMgYXp1Y2FyIHBvciBkw61hYCwgYyg1KSkKYGBgCgpgYGB7cn0Kb3B0aW9ucyhkaWdpdHMgPSAyKQpkZiAlPiUgCiAgZ3JvdXBfYnkoYDEzX0VhdGluZ19oYWJpdHNfZ3JvdXBlZGApICU+JSAKICBzdW1tYXJpc2UoICJQcm9tIEQxTUZUIiA9IG1lYW4oRDFNRlQpLAogICAgICAgICAgICAgIlByb20gRDNNRlQiID0gbWVhbihEM01GVCksIAogICAgICAgICAgICAgIlByb20gRDVNRlQiID0gbWVhbihENU1GVCksIAogICAgICAgICAgICAgbiA9IG4oKSkgJT4lIAogIHVuZ3JvdXAoKQpgYGAKCg==