ALL IMPORTED FILES MUST BE IN THE SAME DIRECTORY AS THIS SCRIPT
Load tidyverse package
library("tidyverse")
Import raw vcf data from “masterfile” and exclude variants with GnomAD non-cancer AF > 0.001
masterfile <- read.delim("masterfile.tsv", header=TRUE, row.names=NULL, na.strings = ".", stringsAsFactors=FALSE) %>%
dplyr::rename("Sample"="X.Sample") %>%
filter(GnomAD_v2.1_non_cancer_AF<=0.001)
Exclude non-epithelial, uterine-only, BRCA +ve and other mutation +ve samples
ViP_Discovery_Cohort <- read.delim("ViP_LoF_Discovery_Cohort.txt", stringsAsFactors=FALSE)
ViP_Discovery_Cohort_list <- ViP_Discovery_Cohort[,1]
masterfile_eoc <- filter(masterfile,Sample%in%c(ViP_Discovery_Cohort_list))
rm(masterfile)
Append patient path data
ViP_OvCa_Path_Data <- read.delim("ViP_OvCa_Path_Data.txt", header=TRUE, row.names=NULL, stringsAsFactors=FALSE) %>%
dplyr::rename("Sample"=Exome.ID)
masterfile_eoc_withPath <- left_join(masterfile_eoc,ViP_OvCa_Path_Data,by="Sample",copy=FALSE)
rm(ViP_OvCa_Path_Data,masterfile_eoc)
Exclude low-grade tumour samples
masterfile_eoc2 <- filter(masterfile_eoc_withPath,(Histopath.Type!="Borderline tumour")&
(Histopath.Type!="Mucinous")&
(Histopath.Type!="Clear cell")&
(Histopath.Type!="Low-grade serous")&
(Histopath.Type!="Low-grade endometrioid")&
(Histopath.Type!="Serous (?low-grade/borderline)")&
(Histopath.Type!="Mixed Mullerian")&
(Histopath.Type!="Mixed EAOC"))
rm(masterfile_eoc_withPath)
Exclude low-quality variants, GnomAD RF-flagged variants and non-protein-coding genes
masterfile_eoc_goodQ <- filter(masterfile_eoc2, (QUAL>=30)&
(Identified!="FilteredInAll")&
(Sample.PMCDP>=10)&
(Sample.PMCFREQ>=0.25)) %>%
filter((!str_detect(GnomAD_v2.1_FILTER_exome,"InbreedingCoeff")&
!str_detect(GnomAD_v2.1_FILTER_exome,"RF"))|
is.na(GnomAD_v2.1_FILTER_exome)) %>%
filter((!str_detect(GnomAD_v2.1_FILTER_genome,"InbreedingCoeff")&
!str_detect(GnomAD_v2.1_FILTER_genome,"RF"))|
is.na(GnomAD_v2.1_FILTER_genome)) %>%
filter(BIOTYPE%in%c("protein_coding"))
Total_Sample_Alleles <- (n_distinct(masterfile_eoc_goodQ$Sample)*2)
rm(masterfile_eoc2)
Exclude HIGH impact variants (including variants with Consequence == “protein_altering_variant”) retain only genes present in masterfile_eoc_goodQ2_HIGH_ENSTcanonical_sampleAF0.01 file (from LoF Variant Filtering and Ranking Script- see (https://rpubs.com/deepsubs/nature_comms_paper_2020) with minimum ratio > 3/6/12
HIGHgenes_ratio6 <- read.delim("HIGHgenes_list.txt", stringsAsFactors=FALSE) %>%
# filter(Sample_Gene_LOF_Freq_Ratio_GnomAD_NFE_0.005>3)
filter(Sample_Gene_LOF_Freq_Ratio_GnomAD_NFE_0.005>6)
# filter(Sample_Gene_LOF_Freq_Ratio_GnomAD_NFE_0.005>12)
HIGHgenes_candidates <- read.delim("HIGHgenes_list.txt", stringsAsFactors=FALSE) %>%
filter(Candidate_Gene%in%("YES"))
HIGHgenes_ratio6_list <- HIGHgenes_ratio6[,2]
HIGHgenes_candidates_list <- HIGHgenes_candidates[,2]
masterfile_eoc_goodQ_biotype_MS <- filter(masterfile_eoc_goodQ, IMPACT=="MODERATE") %>%
filter(str_detect(Consequence,"missense_variant")) %>%
filter(Feature%in%(HIGHgenes_ratio6_list))
Exclude NM canonical (RefSeq) variants and convert MPC strings to integers/doubles
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical <- filter(masterfile_eoc_goodQ_biotype_MS, CANONICAL=="YES")
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical$MPC <- as.numeric(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical$MPC) %>% replace_na(0)
rm(masterfile_eoc_goodQ_biotype_MS)
Divide data into different prediction score groups
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (MPC<2))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (MPC>=2))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (MPC>=2.5))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (MPC>=3))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED<15))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=15))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=20))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=25))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=30))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score<0.45))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.45))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.5))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.55))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.6))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.7))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.8))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=15)&(REVEL_score>=0.45))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=15)&(REVEL_score>=0.45)&(MPC>=2))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8 <- bind_rows(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,.id=NULL) %>%
distinct(.keep_all=TRUE)
rm(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical)
Sample variant counts and AFs
variant_counts_AFs <- function(vcf){
variants_heterozygous <- vcf %>%
select(HGVSc,Sample.GT) %>%
group_by(HGVSc,Sample.GT) %>%
summarise(n()) %>%
filter((Sample.GT%in%c("'0/1","'1/0"))) %>%
dplyr::rename(alleles = "n()") %>%
group_by(HGVSc) %>%
summarise(sum(alleles))
variants_homozygous <- vcf %>%
select(HGVSc,Sample.GT) %>%
group_by(HGVSc,Sample.GT) %>%
summarise(n()) %>%
filter((Sample.GT!="'0/1")&(Sample.GT!="'1/0")) %>%
mutate(alleles = `n()`*2) %>%
select(-`n()`) %>%
group_by(HGVSc) %>%
summarise(sum(alleles))
variants <- full_join(variants_heterozygous,variants_homozygous,by="HGVSc",copy=FALSE,suffix=c(".x",".y")) %>%
mutate_all(funs(replace(., is.na(.), 0))) %>%
mutate(Total_Allele_Count=`sum(alleles).x`+`sum(alleles).y`) %>%
mutate(Sample_AF=Total_Allele_Count/Total_Sample_Alleles)
vcf <- left_join(vcf, variants[,c(1,4:5)],by="HGVSc",copy=FALSE)
}
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8)
rm(list=(ls(pattern="^variants")))
Output list of genes and variants with sample AF > 0.01
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_genesandvariants0.01 <- bind_rows(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8) %>%
filter(Sample_AF > 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_genesandvariants0.01[,c(2:6,25:54)] %>%
distinct(.keep_all = FALSE) %>%
write_excel_csv(path="masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_genesandvariants0.01.csv",na=".",append=FALSE,col_names=TRUE)
rm(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_genesandvariants0.01)
Output list of genes and variants with sample AF < 0.01
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_HIGHgenes_ratio6 <- bind_rows(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8) %>%
filter(Sample_AF < 0.01) %>%
write_excel_csv(path="masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_0.001_sample0.01_HIGHgenes_ratio6.csv",na=".",append=FALSE,col_names=TRUE)
Output list of LoF candidate genes with sample AF < 0.1 MS variants
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_HIGHgenes_candidates <- bind_rows(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8) %>%
filter(Sample_AF < 0.01) %>%
filter(Feature%in%(HIGHgenes_candidates_list)) %>%
write_excel_csv(path="masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_0.001_sample0.01_HIGHgenes_candidates_ratio6.csv",na=".",append=FALSE,col_names=TRUE)
Exclude variants with sample AF >0.01̛
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8,Sample_AF < 0.01)
rm(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8)
Sample gene counts and frequencies
gene_counts_AF <- function(vcf){
genes_oneVarAllele <- vcf %>% select(SYMBOL,Sample.GT) %>%
select(SYMBOL,Sample.GT) %>%
group_by(SYMBOL,Sample.GT) %>%
summarise(n()) %>%
filter((Sample.GT%in%c("'0/1","'1/0"))) %>%
dplyr::rename(gene_Var = "n()") %>%
group_by(SYMBOL) %>%
summarise(sum(gene_Var))
genes_twoVarAllele <- vcf %>% select(SYMBOL,Sample.GT) %>%
select(SYMBOL,Sample.GT) %>%
group_by(SYMBOL,Sample.GT) %>%
summarise(n()) %>%
filter((Sample.GT!="'0/1")&(Sample.GT!="'1/0")) %>%
mutate(gene_Var = `n()`*2) %>%
select(-`n()`) %>%
group_by(SYMBOL) %>%
summarise(sum(gene_Var))
genes <- full_join(genes_oneVarAllele,genes_twoVarAllele,by="SYMBOL",copy=FALSE,suffix=c(".x",".y")) %>%
mutate_all(funs(replace(., is.na(.), 0))) %>%
mutate(Total_Gene_Count=`sum(gene_Var).x`+`sum(gene_Var).y`) %>%
mutate(Sample_Gene_Freq=Total_Gene_Count/Total_Sample_Alleles)
vcf <- left_join(vcf, genes[,c(1,4:5)],by="SYMBOL",copy=FALSE)
}
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01)
rm(list=(ls(pattern="^genes")))
Add GnomAD gene-level data
GnomAD_stats_MS <- read.delim("GnomAD.gene.stats.v2.1_missense_AF_0.001.tsv", header=TRUE, row.names=NULL, stringsAsFactors=FALSE) %>%
dplyr::rename(SYMBOL=X.Symbol)
GnomAD_stats_MS <- GnomAD_stats_MS[,c(1:13,156:281)]
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,14:19)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,20:25)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,26:31)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,32:37)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,38:43)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,44:49)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,50:55)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,56:61)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,62:67)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,68:73)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,74:79)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,80:85)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,86:91)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,92:97)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,104:109)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,116:121)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,134:139)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,122:127)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,128:133)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>%
mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>%
mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))
rm(list=(ls(pattern="_sampleAF0.01$")))
Create data frames with Agilent SureSelect whole exome genes (ENST and protein-coding) and MPC-only transcripts
ensembl_biotypes <- read.delim("ensembl_biotypes.tsv", stringsAsFactors=FALSE) %>%
select(ensembl_transcript_id,transcript_biotype) %>%
dplyr::rename("Feature"="ensembl_transcript_id","BIOTYPE"="transcript_biotype")
GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding <- read.delim("GnomAD.gene.stats.v2.RF.only.agilent.v6.only.tsv", header=TRUE, row.names=NULL, stringsAsFactors=FALSE) %>%
filter(CANONICAL=="YES") %>%
dplyr::rename("SYMBOL"="X.Symbol") %>%
dplyr::rename("Gene"="ENSG") %>%
left_join(ensembl_biotypes,by="Feature",copy=FALSE) %>%
filter(BIOTYPE%in%c("protein_coding"))
MPC_transcripts <- read.delim("MPC_transcripts_with_canonicity.tsv", header=TRUE, row.names=NULL, stringsAsFactors=FALSE) %>%
filter(CANONICAL%in%c("YES")) %>%
select(Feature,CANONICAL)
allGenes_AgilentSSv6_list_protein_coding_only <- tibble("SYMBOL"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$SYMBOL,"Gene"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$Gene,"Feature"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$Feature, "AgilentSSv6"="YES") %>%
distinct(.keep_all=TRUE) %>%
arrange(SYMBOL) %>%
filter(Feature%in%(HIGHgenes_ratio6_list))
allGenes_AgilentSSv6_list_protein_coding_MPConly<- tibble("SYMBOL"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$SYMBOL,"Gene"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$Gene,"Feature"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$Feature, "AgilentSSv6"="YES") %>%
distinct(.keep_all=TRUE) %>%
left_join(MPC_transcripts,by="Feature",copy=FALSE) %>%
filter(CANONICAL%in%c("YES")) %>%
filter(Feature%in%(HIGHgenes_ratio6_list))
allGenes_AgilentSSv6_list_protein_coding_only2 <- select(allGenes_AgilentSSv6_list_protein_coding_only,Feature,AgilentSSv6)
Sum ACs across sample/GnomAD for each prediction score class (MPC figures include transcripts with MPC scores only)
GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding <- filter(GnomAD_stats_MS,CANONICAL%in%c("YES")) %>%
dplyr::rename("Gene"="ENSG") %>%
left_join(ensembl_biotypes,by="Feature",copy=FALSE) %>%
filter(BIOTYPE%in%c("protein_coding")) %>%
left_join(allGenes_AgilentSSv6_list_protein_coding_only2,by="Feature",copy=FALSE) %>%
filter(AgilentSSv6%in%c("YES"))
GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC <- filter(GnomAD_stats_MS,CANONICAL%in%c("YES")) %>%
dplyr::rename("Gene"="ENSG") %>%
left_join(ensembl_biotypes,by="Feature",copy=FALSE) %>%
filter(BIOTYPE%in%c("protein_coding")) %>%
left_join(allGenes_AgilentSSv6_list_protein_coding_only2,by="Feature",copy=FALSE) %>%
filter(AgilentSSv6%in%c("YES")) %>%
left_join(MPC_transcripts,by="Feature",copy=FALSE) %>%
filter(CANONICAL.y%in%c("YES"))
GnomAD_stats_MS_MAX_AN_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,6]) %>% as.numeric()
GnomAD_stats_MS_MAX_AN_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,10]) %>% as.numeric()
GnomAD_stats_MS_MAX_AN_MPC_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,6]) %>% as.numeric()
GnomAD_stats_MS_MAX_AN_MPC_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,10]) %>% as.numeric()
GnomAD_stats_MS_MPC.2_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,14]) %>% as.numeric()
GnomAD_stats_MS_MPC.2_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,17]) %>% as.numeric()
GnomAD_stats_MS_MPC2_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,20]) %>% as.numeric()
GnomAD_stats_MS_MPC2_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,23]) %>% as.numeric()
GnomAD_stats_MS_MPC2.5_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,26]) %>% as.numeric()
GnomAD_stats_MS_MPC2.5_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,29]) %>% as.numeric()
GnomAD_stats_MS_MPC3_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,32]) %>% as.numeric()
GnomAD_stats_MS_MPC3_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,35]) %>% as.numeric()
GnomAD_stats_MS_CADD.15_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,38]) %>% as.numeric()
GnomAD_stats_MS_CADD.15_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,41]) %>% as.numeric()
GnomAD_stats_MS_CADD15_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,44]) %>% as.numeric()
GnomAD_stats_MS_CADD15_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,47]) %>% as.numeric()
GnomAD_stats_MS_CADD20_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,50]) %>% as.numeric()
GnomAD_stats_MS_CADD20_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,53]) %>% as.numeric()
GnomAD_stats_MS_CADD25_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,56]) %>% as.numeric()
GnomAD_stats_MS_CADD25_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,59]) %>% as.numeric()
GnomAD_stats_MS_CADD30_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,62]) %>% as.numeric()
GnomAD_stats_MS_CADD30_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,65]) %>% as.numeric()
GnomAD_stats_MS_REVEL.0.45_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,68]) %>% as.numeric()
GnomAD_stats_MS_REVEL.0.45_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,71]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.45_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,74]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.45_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,77]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.5_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,80]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.5_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,83]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.55_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,86]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.55_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,89]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.6_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,92]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.6_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,95]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.7_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,104]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.7_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,107]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.8_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,116]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.8_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,119]) %>% as.numeric()
GnomAD_stats_MS_CADD15REVEL0.45_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,134]) %>% as.numeric()
GnomAD_stats_MS_CADD15REVEL0.45_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,137]) %>% as.numeric()
GnomAD_stats_MS_MPC2CADD15REVEL0.45_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,122]) %>% as.numeric()
GnomAD_stats_MS_MPC2CADD15REVEL0.45_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,125]) %>% as.numeric()
GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,128]) %>% as.numeric()
GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,131]) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total <- Total_Sample_Alleles*(nrow(allGenes_AgilentSSv6_list_protein_coding_only)) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total <- Total_Sample_Alleles*(nrow(allGenes_AgilentSSv6_list_protein_coding_MPConly)) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
Calculate odds ratios using matrices
MPC.2 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total,
GnomAD_stats_MS_MPC.2_total,
GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC.2_total),
nrow=2,byrow=TRUE)
MPC.2_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total,
GnomAD_stats_MS_MPC.2_NFE_total,
GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC.2_NFE_total),
nrow=2,byrow=TRUE)
MPC2 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total,
GnomAD_stats_MS_MPC2_total,
GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC2_total),
nrow=2,byrow=TRUE)
MPC2_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total,
GnomAD_stats_MS_MPC2_NFE_total,
GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC2_NFE_total),
nrow=2,byrow=TRUE)
MPC2.5 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total,
GnomAD_stats_MS_MPC2.5_total,
GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC2.5_total),
nrow=2,byrow=TRUE)
MPC2.5_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total,
GnomAD_stats_MS_MPC2.5_NFE_total,
GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC2.5_NFE_total),
nrow=2,byrow=TRUE)
MPC3 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total,
GnomAD_stats_MS_MPC3_total,
GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC3_total),
nrow=2,byrow=TRUE)
MPC3_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total,
GnomAD_stats_MS_MPC3_NFE_total,
GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC3_NFE_total),
nrow=2,byrow=TRUE)
CADD.15 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total,
GnomAD_stats_MS_CADD.15_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD.15_total),
nrow=2,byrow=TRUE)
CADD.15_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total,
GnomAD_stats_MS_CADD.15_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD.15_NFE_total),
nrow=2,byrow=TRUE)
CADD15 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total,
GnomAD_stats_MS_CADD15_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD15_total),
nrow=2,byrow=TRUE)
CADD15_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total,
GnomAD_stats_MS_CADD15_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD15_NFE_total),
nrow=2,byrow=TRUE)
CADD20 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total,
GnomAD_stats_MS_CADD20_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD20_total),
nrow=2,byrow=TRUE)
CADD20_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total,
GnomAD_stats_MS_CADD20_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD20_NFE_total),
nrow=2,byrow=TRUE)
CADD25 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total,
GnomAD_stats_MS_CADD25_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD25_total),
nrow=2,byrow=TRUE)
CADD25_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total,
GnomAD_stats_MS_CADD25_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD25_NFE_total),
nrow=2,byrow=TRUE)
CADD30 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total,
GnomAD_stats_MS_CADD30_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD30_total),
nrow=2,byrow=TRUE)
CADD30_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total,
GnomAD_stats_MS_CADD30_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD30_NFE_total),
nrow=2,byrow=TRUE)
REVEL.0.45 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total,
GnomAD_stats_MS_REVEL.0.45_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL.0.45_total),
nrow=2,byrow=TRUE)
REVEL.0.45_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total,
GnomAD_stats_MS_REVEL.0.45_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL.0.45_NFE_total),
nrow=2,byrow=TRUE)
REVEL0.45 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total,
GnomAD_stats_MS_REVEL0.45_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.45_total),
nrow=2,byrow=TRUE)
REVEL0.45_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total,
GnomAD_stats_MS_REVEL0.45_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.45_NFE_total),
nrow=2,byrow=TRUE)
REVEL0.5 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total,
GnomAD_stats_MS_REVEL0.5_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.5_total),
nrow=2,byrow=TRUE)
REVEL0.5_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total,
GnomAD_stats_MS_REVEL0.5_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.5_NFE_total),
nrow=2,byrow=TRUE)
REVEL0.55 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total,
GnomAD_stats_MS_REVEL0.55_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.55_total),
nrow=2,byrow=TRUE)
REVEL0.55_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total,
GnomAD_stats_MS_REVEL0.55_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.55_NFE_total),nrow=2,byrow=TRUE)
REVEL0.6 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total,
GnomAD_stats_MS_REVEL0.6_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.6_total),
nrow=2,byrow=TRUE)
REVEL0.6_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total,
GnomAD_stats_MS_REVEL0.6_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.6_NFE_total),
nrow=2,byrow=TRUE)
REVEL0.7 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total,
GnomAD_stats_MS_REVEL0.7_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.7_total),
nrow=2,byrow=TRUE)
REVEL0.7_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total,
GnomAD_stats_MS_REVEL0.7_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.7_NFE_total),
nrow=2,byrow=TRUE)
REVEL0.8 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total,
GnomAD_stats_MS_REVEL0.8_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.8_total),
nrow=2,byrow=TRUE)
REVEL0.8_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total,
GnomAD_stats_MS_REVEL0.8_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.8_NFE_total),
nrow=2,byrow=TRUE)
CADD15REVEL0.45 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total,
GnomAD_stats_MS_CADD15REVEL0.45_total,
GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD15REVEL0.45_total),
nrow=2,byrow=TRUE)
CADD15REVEL0.45_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total,
GnomAD_stats_MS_CADD15REVEL0.45_NFE_total,
GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD15REVEL0.45_NFE_total),
nrow=2,byrow=TRUE)
MPC2CADD15REVEL0.45 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total,
GnomAD_stats_MS_MPC2CADD15REVEL0.45_total,
GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC2CADD15REVEL0.45_total),
nrow=2,byrow=TRUE)
MPC2CADD15REVEL0.45_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total,
GnomAD_stats_MS_MPC2CADD15REVEL0.45_NFE_total,
GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC2CADD15REVEL0.45_NFE_total),nrow=2,byrow=TRUE)
MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total),
nrow=2,byrow=TRUE)
MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE_total,
GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE_total),
nrow=2,byrow=TRUE)
oddsratio <- function (a, b = NULL, c = NULL, d = NULL, conf.level = 0.95,
p.calc.by.independence = TRUE)
{
if (is.matrix(a)) {
if ((dim(a)[1] != 2L) | (dim(a)[2] != 2L)) {
stop("Input matrix must be a 2x2 table.")
}
.a <- a[1, 1]
.b <- a[1, 2]
.c <- a[2, 1]
.d <- a[2, 2]
.data.name <- deparse(substitute(a))
}
else {
.a <- a
.b <- b
.c <- c
.d <- d
.data.name <- paste(deparse(substitute(a)), deparse(substitute(b)),
deparse(substitute(c)), deparse(substitute(d)))
}
.MAT <- matrix(c(.a, .b, M1 <- .a + .b, .c, .d, M0 <- .c +
.d, N1 <- .a + .c, N0 <- .b + .d, Total <- .a + .b +
.c + .d), 3, 3)
colnames(.MAT) <- c("Sample", "GnomAD", "Total") #("Disease", "Nondisease", "Total")
rownames(.MAT) <- c("MS", "No MS", "Total") #("Exposed", "Nonexposed", "Total")
class(.MAT) <- "table"
print(.MAT)
ESTIMATE <- (.a /.b)/(.c/.d)
norm.pp <- qnorm(1 - (1 - conf.level)/2)
if (p.calc.by.independence) {
p.v <- 2 * (1 - pnorm(abs((.a - N1 * M1/Total)/sqrt(N1 *
N0 * M1 * M0/Total/Total/(Total - 1)))))
}
else {
p.v <- 2 * (1 - pnorm(log(ifelse(ESTIMATE > 1, ESTIMATE,
1/ESTIMATE))/sqrt(1/.a + 1/.b + 1/.c + 1/.d)))
}
ORL <- ESTIMATE * exp(-norm.pp * sqrt(1/.a + 1/.b + 1/.c +
1/.d))
ORU <- ESTIMATE * exp(norm.pp * sqrt(1/.a + 1/.b + 1/.c +
1/.d)) %>% signif(digits=7)
CINT <- paste(signif(ORL,digits = 7),signif(ORU,digits = 7),sep="~")
attr(CINT, "conf.level") <- conf.level
RVAL <- list(p.value = p.v, conf.int = CINT, estimate = ESTIMATE,
method = "Odds ratio estimate and its significance probability",
data.name = .data.name)
class(RVAL) <- "htest"
return(RVAL)
}
OR_MPC.2 <- oddsratio(MPC.2,p.calc.by.independence=TRUE)
OR_MPC.2_NFE <- oddsratio(MPC.2_NFE,p.calc.by.independence=TRUE)
OR_MPC2 <- oddsratio(MPC2,p.calc.by.independence=TRUE)
OR_MPC2_NFE <- oddsratio(MPC2_NFE,p.calc.by.independence=TRUE)
OR_MPC2.5 <- oddsratio(MPC2.5,p.calc.by.independence=TRUE)
OR_MPC2.5_NFE <- oddsratio(MPC2.5_NFE,p.calc.by.independence=TRUE)
OR_MPC3 <- oddsratio(MPC3,p.calc.by.independence=TRUE)
OR_MPC3_NFE <- oddsratio(MPC3_NFE,p.calc.by.independence=TRUE)
OR_CADD.15 <- oddsratio(CADD.15,p.calc.by.independence=TRUE)
OR_CADD.15_NFE <- oddsratio(CADD.15_NFE,p.calc.by.independence=TRUE)
OR_CADD15 <- oddsratio(CADD15,p.calc.by.independence=TRUE)
OR_CADD15_NFE <- oddsratio(CADD15_NFE,p.calc.by.independence=TRUE)
OR_CADD20 <- oddsratio(CADD20,p.calc.by.independence=TRUE)
OR_CADD20_NFE <- oddsratio(CADD20_NFE,p.calc.by.independence=TRUE)
OR_CADD25 <- oddsratio(CADD25,p.calc.by.independence=TRUE)
OR_CADD25_NFE <- oddsratio(CADD25_NFE,p.calc.by.independence=TRUE)
OR_CADD30 <- oddsratio(CADD30,p.calc.by.independence=TRUE)
OR_CADD30_NFE <- oddsratio(CADD30_NFE,p.calc.by.independence=TRUE)
OR_REVEL.0.45 <- oddsratio(REVEL.0.45,p.calc.by.independence=TRUE)
OR_REVEL.0.45_NFE <- oddsratio(REVEL.0.45_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.45 <- oddsratio(REVEL0.45,p.calc.by.independence=TRUE)
OR_REVEL0.45_NFE <- oddsratio(REVEL0.45_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.5 <- oddsratio(REVEL0.5,p.calc.by.independence=TRUE)
OR_REVEL0.5_NFE <- oddsratio(REVEL0.5_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.55 <- oddsratio(REVEL0.55,p.calc.by.independence=TRUE)
OR_REVEL0.55_NFE <- oddsratio(REVEL0.55_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.6 <- oddsratio(REVEL0.6,p.calc.by.independence=TRUE)
OR_REVEL0.6_NFE <- oddsratio(REVEL0.6_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.7 <- oddsratio(REVEL0.7,p.calc.by.independence=TRUE)
OR_REVEL0.7_NFE <- oddsratio(REVEL0.7_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.8 <- oddsratio(REVEL0.8,p.calc.by.independence=TRUE)
OR_REVEL0.8_NFE <- oddsratio(REVEL0.8_NFE,p.calc.by.independence=TRUE)
OR_CADD15REVEL0.45 <- oddsratio(CADD15REVEL0.45,p.calc.by.independence=TRUE)
OR_CADD15REVEL0.45_NFE <- oddsratio(CADD15REVEL0.45_NFE,p.calc.by.independence=TRUE)
OR_MPC2CADD15REVEL0.45 <- oddsratio(MPC2CADD15REVEL0.45,p.calc.by.independence=TRUE)
OR_MPC2CADD15REVEL0.45_NFE <- oddsratio(MPC2CADD15REVEL0.45_NFE,p.calc.by.independence=TRUE)
OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8 <- oddsratio(MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8,p.calc.by.independence=TRUE)
OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE <- oddsratio(MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE,p.calc.by.independence=TRUE)
Combine all results into one spreadsheet, and save
a = c(OR_MPC.2$data.name,OR_MPC.2_NFE$data.name,OR_MPC2$data.name,OR_MPC2_NFE$data.name,OR_MPC2.5$data.name,OR_MPC2.5_NFE$data.name,OR_MPC3$data.name,OR_MPC3_NFE$data.name,OR_CADD.15$data.name,OR_CADD.15_NFE$data.name,OR_CADD15$data.name,OR_CADD15_NFE$data.name,OR_CADD20$data.name,OR_CADD20_NFE$data.name,OR_CADD25$data.name,OR_CADD25_NFE$data.name,OR_CADD30$data.name,OR_CADD30_NFE$data.name,OR_REVEL.0.45$data.name,OR_REVEL.0.45_NFE$data.name,OR_REVEL0.45$data.name,OR_REVEL0.45_NFE$data.name,OR_REVEL0.5$data.name,OR_REVEL0.5_NFE$data.name,OR_REVEL0.55$data.name,OR_REVEL0.55_NFE$data.name,OR_REVEL0.6$data.name,OR_REVEL0.6_NFE$data.name,OR_REVEL0.7$data.name,OR_REVEL0.7_NFE$data.name,OR_REVEL0.8$data.name,OR_REVEL0.8_NFE$data.name,OR_CADD15REVEL0.45$data.name,OR_CADD15REVEL0.45_NFE$data.name,OR_MPC2CADD15REVEL0.45$data.name,OR_MPC2CADD15REVEL0.45_NFE$data.name,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8$data.name,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE$data.name)
b = c(OR_MPC.2$estimate,OR_MPC.2_NFE$estimate,OR_MPC2$estimate,OR_MPC2_NFE$estimate,OR_MPC2.5$estimate,OR_MPC2.5_NFE$estimate,OR_MPC3$estimate,OR_MPC3_NFE$estimate,OR_CADD.15$estimate,OR_CADD.15_NFE$estimate,OR_CADD15$estimate,OR_CADD15_NFE$estimate,OR_CADD20$estimate,OR_CADD20_NFE$estimate,OR_CADD25$estimate,OR_CADD25_NFE$estimate,OR_CADD30$estimate,OR_CADD30_NFE$estimate,OR_REVEL.0.45$estimate,OR_REVEL.0.45_NFE$estimate,OR_REVEL0.45$estimate,OR_REVEL0.45_NFE$estimate,OR_REVEL0.5$estimate,OR_REVEL0.5_NFE$estimate,OR_REVEL0.55$estimate,OR_REVEL0.55_NFE$estimate,OR_REVEL0.6$estimate,OR_REVEL0.6_NFE$estimate,OR_REVEL0.7$estimate,OR_REVEL0.7_NFE$estimate,OR_REVEL0.8$estimate,OR_REVEL0.8_NFE$estimate,OR_CADD15REVEL0.45$estimate,OR_CADD15REVEL0.45_NFE$estimate,OR_MPC2CADD15REVEL0.45$estimate,OR_MPC2CADD15REVEL0.45_NFE$estimate,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8$estimate,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE$estimate)
c = c(OR_MPC.2$conf.int,OR_MPC.2_NFE$conf.int,OR_MPC2$conf.int,OR_MPC2_NFE$conf.int,OR_MPC2.5$conf.int,OR_MPC2.5_NFE$conf.int,OR_MPC3$conf.int,OR_MPC3_NFE$conf.int,OR_CADD.15$conf.int,OR_CADD.15_NFE$conf.int,OR_CADD15$conf.int,OR_CADD15_NFE$conf.int,OR_CADD20$conf.int,OR_CADD20_NFE$conf.int,OR_CADD25$conf.int,OR_CADD25_NFE$conf.int,OR_CADD30$conf.int,OR_CADD30_NFE$conf.int,OR_REVEL.0.45$conf.int,OR_REVEL.0.45_NFE$conf.int,OR_REVEL0.45$conf.int,OR_REVEL0.45_NFE$conf.int,OR_REVEL0.5$conf.int,OR_REVEL0.5_NFE$conf.int,OR_REVEL0.55$conf.int,OR_REVEL0.55_NFE$conf.int,OR_REVEL0.6$conf.int,OR_REVEL0.6_NFE$conf.int,OR_REVEL0.7$conf.int,OR_REVEL0.7_NFE$conf.int,OR_REVEL0.8$conf.int,OR_REVEL0.8_NFE$conf.int,OR_CADD15REVEL0.45$conf.int,OR_CADD15REVEL0.45_NFE$conf.int,OR_MPC2CADD15REVEL0.45$conf.int,OR_MPC2CADD15REVEL0.45_NFE$conf.int,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8$conf.int,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE$conf.int)
d = c(OR_MPC.2$p.value,OR_MPC.2_NFE$p.value,OR_MPC2$p.value,OR_MPC2_NFE$p.value,OR_MPC2.5$p.value,OR_MPC2.5_NFE$p.value,OR_MPC3$p.value,OR_MPC3_NFE$p.value,OR_CADD.15$p.value,OR_CADD.15_NFE$p.value,OR_CADD15$p.value,OR_CADD15_NFE$p.value,OR_CADD20$p.value,OR_CADD20_NFE$p.value,OR_CADD25$p.value,OR_CADD25_NFE$p.value,OR_CADD30$p.value,OR_CADD30_NFE$p.value,OR_REVEL.0.45$p.value,OR_REVEL.0.45_NFE$p.value,OR_REVEL0.45$p.value,OR_REVEL0.45_NFE$p.value,OR_REVEL0.5$p.value,OR_REVEL0.5_NFE$p.value,OR_REVEL0.55$p.value,OR_REVEL0.55_NFE$p.value,OR_REVEL0.6$p.value,OR_REVEL0.6_NFE$p.value,OR_REVEL0.7$p.value,OR_REVEL0.7_NFE$p.value,OR_REVEL0.8$p.value,OR_REVEL0.8_NFE$p.value,OR_CADD15REVEL0.45$p.value,OR_CADD15REVEL0.45_NFE$p.value,OR_MPC2CADD15REVEL0.45$p.value,OR_MPC2CADD15REVEL0.45_NFE$p.value,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8$p.value,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE$p.value)
ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01 <- tibble(
"Filtering"=a,
"Odds_ratio"=b,
"95%_CI"=c,
"p_value"=d
)
write_tsv(ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01, path="ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_0.001_sample0.01_HIGHGenes_ratio6only.tsv")
Calculate ratios and Fisher’s test values for genes containing enriched variants with corresponding prediction scores, and save output
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios <-
mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats,
"Sample_Gene_LOF_Freq_Ratio_GnomAD_0.001"=Sample_Gene_Freq/FILTER_RF_MS_AF_0.001_REVEL0.7_ADJ,
"Sample_Gene_LOF_Freq_Ratio_GnomAD_NFE_0.001"=Sample_Gene_Freq/FILTER_RF_MS_AF_0.001_REVEL0.7_NFE_ADJ)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios2 <- mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios, "Sample_Gene_LOF_AF_Ratio"=Sample_AF/GnomAD_v2.1_non_cancer_AF,
"Sample_Gene_LOF_AF_Ratio_NFE"=Sample_AF/GnomAD_v2.1_non_cancer_AF_nfe)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults <- mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios2,Total_Case_Alleles=Total_Sample_Alleles)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2 <- mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults, MAX_AN=replace(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults$MAX_AN, is.na(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults$MAX_AN), max(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults$MAX_AN, na.rm=TRUE))) %>%
mutate(MAX_AN_NFE=replace(.$MAX_AN_NFE, is.na(.$MAX_AN_NFE), max(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults$MAX_AN_NFE, na.rm=TRUE)))
fisherresults_ENST <- apply(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2[,c(221,231,241,223)],1,function(x) {fisher.test(rbind(x[1:2],c(x[3]-x[1],x[4]-x[2])))})
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$P_value_Fisher_0.005 = sapply(fisherresults_ENST,function(x) round(x$p.value,12))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$OR_0.005 = sapply(fisherresults_ENST,function(x) round(x$estimate,4))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$`95%CI_0.005` = sapply(fisherresults_ENST,function(x) paste(round(x$conf.int[1:2],2),collapse="~"))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$BH_0.005 = p.adjust(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$P_value_Fisher_0.005,method = "BH")
fisherresults2_ENST <- apply(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2[,c(221,234,241,227)],1,function(x) {fisher.test(rbind(x[1:2],c(x[3]-x[1],x[4]-x[2])))})
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$P_value_Fisher_0.005_NFE = sapply(fisherresults2_ENST,function(x) round(x$p.value,12))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$OR_0.005_NFE = sapply(fisherresults2_ENST,function(x) round(x$estimate,4))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$`95%CI_0.005_NFE` = sapply(fisherresults2_ENST,function(x) paste(round(x$conf.int[1:2],2),collapse="~"))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$BH_0.005_NFE = p.adjust(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2$P_value_Fisher_0.005_NFE,method = "BH")
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults3 <- mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults2, FilteringAF_95_Exceeds_MaxCredPopAF=((GnomAD_v2.1_non_cancer_Filtering_AF_95)>0.000181)) %>%
mutate(FilteringAF_95_NFE_Exceeds_MaxCredPopAF=((GnomAD_v2.1_non_cancer_Filtering_AF_95_nfe)>0.000181))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults3 %>%
write_excel_csv(path="masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_0.001_REVEL0.7_sample0.01_HIGHgenes_ratio6.csv",na=".",append=FALSE,col_names=TRUE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats_ratios_fisherresults3 %>%
filter(Feature%in%(HIGHgenes_candidates_list)) %>%
write_excel_csv(path="masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_0.001_REVEL0.7_sample0.01_HIGHgenes_candidates_ratio6.csv",na=".",append=FALSE,col_names=TRUE)
LS0tCnRpdGxlOiAiVGhlc2lzIE1pc3NlbnNlIFZhcmlhbnQgTG9GLUVucmljaGVkIEdlbmVzIFNjcmlwdCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpBTEwgSU1QT1JURUQgRklMRVMgTVVTVCBCRSBJTiBUSEUgU0FNRSBESVJFQ1RPUlkgQVMgVEhJUyBTQ1JJUFQKCkxvYWQgdGlkeXZlcnNlIHBhY2thZ2UKYGBge3J9CmxpYnJhcnkoInRpZHl2ZXJzZSIpCmBgYAoKSW1wb3J0IHJhdyB2Y2YgZGF0YSBmcm9tICJtYXN0ZXJmaWxlIiBhbmQgZXhjbHVkZSB2YXJpYW50cyB3aXRoIEdub21BRCBub24tY2FuY2VyIEFGID4gMC4wMDEKYGBge3J9Cm1hc3RlcmZpbGUgPC0gcmVhZC5kZWxpbSgibWFzdGVyZmlsZS50c3YiLCBoZWFkZXI9VFJVRSwgcm93Lm5hbWVzPU5VTEwsIG5hLnN0cmluZ3MgPSAiLiIsIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpICU+JSAKICBkcGx5cjo6cmVuYW1lKCJTYW1wbGUiPSJYLlNhbXBsZSIpICU+JSAKICBmaWx0ZXIoR25vbUFEX3YyLjFfbm9uX2NhbmNlcl9BRjw9MC4wMDEpCmBgYAoKRXhjbHVkZSBub24tZXBpdGhlbGlhbCwgdXRlcmluZS1vbmx5LCBCUkNBICt2ZSBhbmQgb3RoZXIgbXV0YXRpb24gK3ZlIHNhbXBsZXMKYGBge3J9ClZpUF9EaXNjb3ZlcnlfQ29ob3J0IDwtIHJlYWQuZGVsaW0oIlZpUF9Mb0ZfRGlzY292ZXJ5X0NvaG9ydC50eHQiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKQpWaVBfRGlzY292ZXJ5X0NvaG9ydF9saXN0IDwtIFZpUF9EaXNjb3ZlcnlfQ29ob3J0WywxXQoKbWFzdGVyZmlsZV9lb2MgPC0gZmlsdGVyKG1hc3RlcmZpbGUsU2FtcGxlJWluJWMoVmlQX0Rpc2NvdmVyeV9Db2hvcnRfbGlzdCkpCnJtKG1hc3RlcmZpbGUpCmBgYAoKQXBwZW5kIHBhdGllbnQgcGF0aCBkYXRhCmBgYHtyfQpWaVBfT3ZDYV9QYXRoX0RhdGEgPC0gcmVhZC5kZWxpbSgiVmlQX092Q2FfUGF0aF9EYXRhLnR4dCIsIGhlYWRlcj1UUlVFLCByb3cubmFtZXM9TlVMTCwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkgJT4lIAogIGRwbHlyOjpyZW5hbWUoIlNhbXBsZSI9RXhvbWUuSUQpCm1hc3RlcmZpbGVfZW9jX3dpdGhQYXRoIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvYyxWaVBfT3ZDYV9QYXRoX0RhdGEsYnk9IlNhbXBsZSIsY29weT1GQUxTRSkKcm0oVmlQX092Q2FfUGF0aF9EYXRhLG1hc3RlcmZpbGVfZW9jKQpgYGAKCkV4Y2x1ZGUgbG93LWdyYWRlIHR1bW91ciBzYW1wbGVzCmBgYHtyfQptYXN0ZXJmaWxlX2VvYzIgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX3dpdGhQYXRoLChIaXN0b3BhdGguVHlwZSE9IkJvcmRlcmxpbmUgdHVtb3VyIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGlzdG9wYXRoLlR5cGUhPSJNdWNpbm91cyIpJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhpc3RvcGF0aC5UeXBlIT0iQ2xlYXIgY2VsbCIpJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhpc3RvcGF0aC5UeXBlIT0iTG93LWdyYWRlIHNlcm91cyIpJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhpc3RvcGF0aC5UeXBlIT0iTG93LWdyYWRlIGVuZG9tZXRyaW9pZCIpJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhpc3RvcGF0aC5UeXBlIT0iU2Vyb3VzICg/bG93LWdyYWRlL2JvcmRlcmxpbmUpIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGlzdG9wYXRoLlR5cGUhPSJNaXhlZCBNdWxsZXJpYW4iKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIaXN0b3BhdGguVHlwZSE9Ik1peGVkIEVBT0MiKSkKcm0obWFzdGVyZmlsZV9lb2Nfd2l0aFBhdGgpCmBgYAoKRXhjbHVkZSBsb3ctcXVhbGl0eSB2YXJpYW50cywgR25vbUFEIFJGLWZsYWdnZWQgdmFyaWFudHMgYW5kIG5vbi1wcm90ZWluLWNvZGluZyBnZW5lcwpgYGB7cn0KbWFzdGVyZmlsZV9lb2NfZ29vZFEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jMiwgKFFVQUw+PTMwKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElkZW50aWZpZWQhPSJGaWx0ZXJlZEluQWxsIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTYW1wbGUuUE1DRFA+PTEwKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNhbXBsZS5QTUNGUkVRPj0wLjI1KSkgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCFzdHJfZGV0ZWN0KEdub21BRF92Mi4xX0ZJTFRFUl9leG9tZSwiSW5icmVlZGluZ0NvZWZmIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc3RyX2RldGVjdChHbm9tQURfdjIuMV9GSUxURVJfZXhvbWUsIlJGIikpfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcy5uYShHbm9tQURfdjIuMV9GSUxURVJfZXhvbWUpKSAlPiUgCiAgZmlsdGVyKCghc3RyX2RldGVjdChHbm9tQURfdjIuMV9GSUxURVJfZ2Vub21lLCJJbmJyZWVkaW5nQ29lZmYiKSYKICAgICAgICAgICAgIXN0cl9kZXRlY3QoR25vbUFEX3YyLjFfRklMVEVSX2dlbm9tZSwiUkYiKSl8CiAgICAgICAgICAgaXMubmEoR25vbUFEX3YyLjFfRklMVEVSX2dlbm9tZSkpICU+JSAKICBmaWx0ZXIoQklPVFlQRSVpbiVjKCJwcm90ZWluX2NvZGluZyIpKQpUb3RhbF9TYW1wbGVfQWxsZWxlcyA8LSAobl9kaXN0aW5jdChtYXN0ZXJmaWxlX2VvY19nb29kUSRTYW1wbGUpKjIpCnJtKG1hc3RlcmZpbGVfZW9jMikKYGBgCgpFeGNsdWRlIEhJR0ggaW1wYWN0IHZhcmlhbnRzIChpbmNsdWRpbmcgdmFyaWFudHMgd2l0aCBDb25zZXF1ZW5jZSA9PSAicHJvdGVpbl9hbHRlcmluZ192YXJpYW50IikgcmV0YWluIG9ubHkgZ2VuZXMgcHJlc2VudCBpbiBtYXN0ZXJmaWxlX2VvY19nb29kUTJfSElHSF9FTlNUY2Fub25pY2FsX3NhbXBsZUFGMC4wMSBmaWxlIChmcm9tIExvRiBWYXJpYW50IEZpbHRlcmluZyBhbmQgUmFua2luZyBTY3JpcHQtIHNlZSAoaHR0cHM6Ly9ycHVicy5jb20vZGVlcHN1YnMvbmF0dXJlX2NvbW1zX3BhcGVyXzIwMjApIHdpdGggbWluaW11bSByYXRpbyA+IDMvNi8xMgpgYGB7cn0KSElHSGdlbmVzX3JhdGlvNiA8LSByZWFkLmRlbGltKCJISUdIZ2VuZXNfbGlzdC50eHQiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSAlPiUgCiAgIyBmaWx0ZXIoU2FtcGxlX0dlbmVfTE9GX0ZyZXFfUmF0aW9fR25vbUFEX05GRV8wLjAwNT4zKQogIGZpbHRlcihTYW1wbGVfR2VuZV9MT0ZfRnJlcV9SYXRpb19Hbm9tQURfTkZFXzAuMDA1PjYpCiAgIyBmaWx0ZXIoU2FtcGxlX0dlbmVfTE9GX0ZyZXFfUmF0aW9fR25vbUFEX05GRV8wLjAwNT4xMikKSElHSGdlbmVzX2NhbmRpZGF0ZXMgPC0gcmVhZC5kZWxpbSgiSElHSGdlbmVzX2xpc3QudHh0Iiwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkgJT4lIAogIGZpbHRlcihDYW5kaWRhdGVfR2VuZSVpbiUoIllFUyIpKQpISUdIZ2VuZXNfcmF0aW82X2xpc3QgPC0gSElHSGdlbmVzX3JhdGlvNlssMl0KSElHSGdlbmVzX2NhbmRpZGF0ZXNfbGlzdCA8LSBISUdIZ2VuZXNfY2FuZGlkYXRlc1ssMl0KCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVMgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRLCBJTVBBQ1Q9PSJNT0RFUkFURSIpICU+JSAKICBmaWx0ZXIoc3RyX2RldGVjdChDb25zZXF1ZW5jZSwibWlzc2Vuc2VfdmFyaWFudCIpKSAlPiUgCiAgZmlsdGVyKEZlYXR1cmUlaW4lKEhJR0hnZW5lc19yYXRpbzZfbGlzdCkpCmBgYAoKRXhjbHVkZSBOTSBjYW5vbmljYWwgKFJlZlNlcSkgdmFyaWFudHMgYW5kIGNvbnZlcnQgTVBDIHN0cmluZ3MgdG8gaW50ZWdlcnMvZG91YmxlcwpgYGB7cn0KbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TLCBDQU5PTklDQUw9PSJZRVMiKSAKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsJE1QQyA8LSBhcy5udW1lcmljKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCRNUEMpICU+JSByZXBsYWNlX25hKDApCnJtKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVMpCmBgYAoKRGl2aWRlIGRhdGEgaW50byBkaWZmZXJlbnQgcHJlZGljdGlvbiBzY29yZSBncm91cHMKYGBge3J9Cm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMiA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoTVBDPDIpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMiA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoTVBDPj0yKSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoTVBDPj0yLjUpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMyA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoTVBDPj0zKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChDQUREX1BIUkVEPDE1KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRD49MTUpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChDQUREX1BIUkVEPj0yMCkpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTI1KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRD49MzApKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKFJFVkVMX3Njb3JlPDAuNDUpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZT49MC40NSkpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNSkpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKFJFVkVMX3Njb3JlPj0wLjU1KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZT49MC42KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZT49MC43KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZT49MC44KSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTE1KSYoUkVWRUxfc2NvcmU+PTAuNDUpKSAgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChDQUREX1BIUkVEPj0xNSkmKFJFVkVMX3Njb3JlPj0wLjQ1KSYoTVBDPj0yKSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCA8LSBiaW5kX3Jvd3MobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOCwuaWQ9TlVMTCkgJT4lIAogIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKQoKcm0obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsKQpgYGAKClNhbXBsZSB2YXJpYW50IGNvdW50cyBhbmQgQUZzCmBgYHtyfQp2YXJpYW50X2NvdW50c19BRnMgPC0gZnVuY3Rpb24odmNmKXsKdmFyaWFudHNfaGV0ZXJvenlnb3VzIDwtIHZjZiAlPiUgCiAgc2VsZWN0KEhHVlNjLFNhbXBsZS5HVCkgJT4lIAogIGdyb3VwX2J5KEhHVlNjLFNhbXBsZS5HVCkgJT4lIAogIHN1bW1hcmlzZShuKCkpICU+JSAKICBmaWx0ZXIoKFNhbXBsZS5HVCVpbiVjKCInMC8xIiwiJzEvMCIpKSkgJT4lIAogIGRwbHlyOjpyZW5hbWUoYWxsZWxlcyA9ICJuKCkiKSAlPiUgCiAgZ3JvdXBfYnkoSEdWU2MpICU+JSAKICBzdW1tYXJpc2Uoc3VtKGFsbGVsZXMpKQp2YXJpYW50c19ob21venlnb3VzIDwtIHZjZiAlPiUgCiAgc2VsZWN0KEhHVlNjLFNhbXBsZS5HVCkgJT4lIAogIGdyb3VwX2J5KEhHVlNjLFNhbXBsZS5HVCkgJT4lIAogIHN1bW1hcmlzZShuKCkpICU+JSAKICBmaWx0ZXIoKFNhbXBsZS5HVCE9IicwLzEiKSYoU2FtcGxlLkdUIT0iJzEvMCIpKSAlPiUgCiAgbXV0YXRlKGFsbGVsZXMgPSBgbigpYCoyKSAlPiUgCiAgc2VsZWN0KC1gbigpYCkgJT4lIAogIGdyb3VwX2J5KEhHVlNjKSAlPiUgCiAgc3VtbWFyaXNlKHN1bShhbGxlbGVzKSkKdmFyaWFudHMgPC0gZnVsbF9qb2luKHZhcmlhbnRzX2hldGVyb3p5Z291cyx2YXJpYW50c19ob21venlnb3VzLGJ5PSJIR1ZTYyIsY29weT1GQUxTRSxzdWZmaXg9YygiLngiLCIueSIpKSAlPiUKICBtdXRhdGVfYWxsKGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlKFRvdGFsX0FsbGVsZV9Db3VudD1gc3VtKGFsbGVsZXMpLnhgK2BzdW0oYWxsZWxlcykueWApICU+JSAKICBtdXRhdGUoU2FtcGxlX0FGPVRvdGFsX0FsbGVsZV9Db3VudC9Ub3RhbF9TYW1wbGVfQWxsZWxlcykKdmNmIDwtIGxlZnRfam9pbih2Y2YsIHZhcmlhbnRzWyxjKDEsNDo1KV0sYnk9IkhHVlNjIixjb3B5PUZBTFNFKQp9CgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIgIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMikKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzMgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1KQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1KQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1KQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1KQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1KQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjYpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNyA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43KQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjggPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOCkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCkKCnJtKGxpc3Q9KGxzKHBhdHRlcm49Il52YXJpYW50cyIpKSkKYGBgCgpPdXRwdXQgbGlzdCBvZiBnZW5lcyBhbmQgdmFyaWFudHMgd2l0aCBzYW1wbGUgQUYgPiAwLjAxCmBgYHtyfQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfZ2VuZXNhbmR2YXJpYW50czAuMDEgPC0gYmluZF9yb3dzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMixtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMixtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMCxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzAsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjYsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOCxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgpICU+JSAKICBmaWx0ZXIoU2FtcGxlX0FGID4gMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2dlbmVzYW5kdmFyaWFudHMwLjAxWyxjKDI6NiwyNTo1NCldICU+JSAKICBkaXN0aW5jdCgua2VlcF9hbGwgPSBGQUxTRSkgJT4lIAogIHdyaXRlX2V4Y2VsX2NzdihwYXRoPSJtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfZ2VuZXNhbmR2YXJpYW50czAuMDEuY3N2IixuYT0iLiIsYXBwZW5kPUZBTFNFLGNvbF9uYW1lcz1UUlVFKQpybShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfZ2VuZXNhbmR2YXJpYW50czAuMDEpCmBgYAoKT3V0cHV0IGxpc3Qgb2YgZ2VuZXMgYW5kIHZhcmlhbnRzIHdpdGggc2FtcGxlIEFGIDwgMC4wMQpgYGB7cn0KbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX3NhbXBsZTAuMDFfSElHSGdlbmVzX3JhdGlvNiA8LSBiaW5kX3Jvd3MobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzMsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNixtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjcsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCkgJT4lCiAgZmlsdGVyKFNhbXBsZV9BRiA8IDAuMDEpICU+JQogIHdyaXRlX2V4Y2VsX2NzdihwYXRoPSJtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfMC4wMDFfc2FtcGxlMC4wMV9ISUdIZ2VuZXNfcmF0aW82LmNzdiIsbmE9Ii4iLGFwcGVuZD1GQUxTRSxjb2xfbmFtZXM9VFJVRSkKYGBgCgpPdXRwdXQgbGlzdCBvZiBMb0YgY2FuZGlkYXRlIGdlbmVzIHdpdGggc2FtcGxlIEFGIDwgMC4xIE1TIHZhcmlhbnRzIApgYGB7cn0KbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX3NhbXBsZTAuMDFfSElHSGdlbmVzX2NhbmRpZGF0ZXMgPC0gYmluZF9yb3dzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMixtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMixtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMCxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzAsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjYsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOCxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgpICU+JQogIGZpbHRlcihTYW1wbGVfQUYgPCAwLjAxKSAlPiUKICBmaWx0ZXIoRmVhdHVyZSVpbiUoSElHSGdlbmVzX2NhbmRpZGF0ZXNfbGlzdCkpICU+JSAKICB3cml0ZV9leGNlbF9jc3YocGF0aD0ibWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsXzAuMDAxX3NhbXBsZTAuMDFfSElHSGdlbmVzX2NhbmRpZGF0ZXNfcmF0aW82LmNzdiIsbmE9Ii4iLGFwcGVuZD1GQUxTRSxjb2xfbmFtZXM9VFJVRSkKYGBgCgpFeGNsdWRlIHZhcmlhbnRzIHdpdGggc2FtcGxlIEFGID4wLjAxzJsKYGBge3J9Cm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMixTYW1wbGVfQUYgPCAwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzMsU2FtcGxlX0FGIDwgMC4wMSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTUsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTUsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjAsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjUsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzAsU2FtcGxlX0FGIDwgMC4wMSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDUsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDUsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNixTYW1wbGVfQUYgPCAwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjcsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44LFNhbXBsZV9BRiA8IDAuMDEpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSxTYW1wbGVfQUYgPCAwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44LFNhbXBsZV9BRiA8IDAuMDEpCgpybShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMyxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjAsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNyxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44KQpgYGAKClNhbXBsZSBnZW5lIGNvdW50cyBhbmQgZnJlcXVlbmNpZXMKYGBge3J9CmdlbmVfY291bnRzX0FGIDwtIGZ1bmN0aW9uKHZjZil7CmdlbmVzX29uZVZhckFsbGVsZSA8LSB2Y2YgJT4lIHNlbGVjdChTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgc2VsZWN0KFNZTUJPTCxTYW1wbGUuR1QpICU+JSAKICBncm91cF9ieShTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgc3VtbWFyaXNlKG4oKSkgJT4lIAogIGZpbHRlcigoU2FtcGxlLkdUJWluJWMoIicwLzEiLCInMS8wIikpKSAlPiUgCiAgZHBseXI6OnJlbmFtZShnZW5lX1ZhciA9ICJuKCkiKSAlPiUgCiAgZ3JvdXBfYnkoU1lNQk9MKSAlPiUgCiAgc3VtbWFyaXNlKHN1bShnZW5lX1ZhcikpCmdlbmVzX3R3b1ZhckFsbGVsZSA8LSB2Y2YgJT4lIHNlbGVjdChTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgc2VsZWN0KFNZTUJPTCxTYW1wbGUuR1QpICU+JSAKICBncm91cF9ieShTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgc3VtbWFyaXNlKG4oKSkgJT4lIAogIGZpbHRlcigoU2FtcGxlLkdUIT0iJzAvMSIpJihTYW1wbGUuR1QhPSInMS8wIikpICU+JSAKICBtdXRhdGUoZ2VuZV9WYXIgPSBgbigpYCoyKSAlPiUgCiAgc2VsZWN0KC1gbigpYCkgJT4lIAogIGdyb3VwX2J5KFNZTUJPTCkgJT4lIAogIHN1bW1hcmlzZShzdW0oZ2VuZV9WYXIpKQpnZW5lcyA8LSBmdWxsX2pvaW4oZ2VuZXNfb25lVmFyQWxsZWxlLGdlbmVzX3R3b1ZhckFsbGVsZSxieT0iU1lNQk9MIixjb3B5PUZBTFNFLHN1ZmZpeD1jKCIueCIsIi55IikpICU+JSAKICBtdXRhdGVfYWxsKGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlKFRvdGFsX0dlbmVfQ291bnQ9YHN1bShnZW5lX1ZhcikueGArYHN1bShnZW5lX1ZhcikueWApICU+JSAKICBtdXRhdGUoU2FtcGxlX0dlbmVfRnJlcT1Ub3RhbF9HZW5lX0NvdW50L1RvdGFsX1NhbXBsZV9BbGxlbGVzKQp2Y2YgPC0gbGVmdF9qb2luKHZjZiwgZ2VuZXNbLGMoMSw0OjUpXSxieT0iU1lNQk9MIixjb3B5PUZBTFNFKQp9CgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDEpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMSkKCnJtKGxpc3Q9KGxzKHBhdHRlcm49Il5nZW5lcyIpKSkKYGBgCgpBZGQgR25vbUFEIGdlbmUtbGV2ZWwgZGF0YQpgYGB7cn0KR25vbUFEX3N0YXRzX01TIDwtIHJlYWQuZGVsaW0oIkdub21BRC5nZW5lLnN0YXRzLnYyLjFfbWlzc2Vuc2VfQUZfMC4wMDEudHN2IiwgaGVhZGVyPVRSVUUsIHJvdy5uYW1lcz1OVUxMLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSAlPiUgCiAgZHBseXI6OnJlbmFtZShTWU1CT0w9WC5TeW1ib2wpIApHbm9tQURfc3RhdHNfTVMgPC0gR25vbUFEX3N0YXRzX01TWyxjKDE6MTMsMTU2OjI4MSldIAoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxNDoxOSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDIwOjI1KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywyNjozMSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMzI6MzcpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMzg6NDMpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNDQ6NDkpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDUwOjU1KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw1Njo2MSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNjI6NjcpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNjg6NzMpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDc0Ojc5KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDgwOjg1KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDg2OjkxKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDkyOjk3KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxMDQ6MTA5KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxMTY6MTIxKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDEzNDoxMzkpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDEyMjoxMjcpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDEyODoxMzMpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCnJtKGxpc3Q9KGxzKHBhdHRlcm49Il9zYW1wbGVBRjAuMDEkIikpKQpgYGAKCkNyZWF0ZSBkYXRhIGZyYW1lcyB3aXRoIEFnaWxlbnQgU3VyZVNlbGVjdCB3aG9sZSBleG9tZSBnZW5lcyAoRU5TVCBhbmQgcHJvdGVpbi1jb2RpbmcpIGFuZCBNUEMtb25seSB0cmFuc2NyaXB0cwpgYGB7cn0KZW5zZW1ibF9iaW90eXBlcyA8LSByZWFkLmRlbGltKCJlbnNlbWJsX2Jpb3R5cGVzLnRzdiIsIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpICU+JSAKICBzZWxlY3QoZW5zZW1ibF90cmFuc2NyaXB0X2lkLHRyYW5zY3JpcHRfYmlvdHlwZSkgJT4lIAogIGRwbHlyOjpyZW5hbWUoIkZlYXR1cmUiPSJlbnNlbWJsX3RyYW5zY3JpcHRfaWQiLCJCSU9UWVBFIj0idHJhbnNjcmlwdF9iaW90eXBlIikKR25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyA8LSByZWFkLmRlbGltKCJHbm9tQUQuZ2VuZS5zdGF0cy52Mi5SRi5vbmx5LmFnaWxlbnQudjYub25seS50c3YiLCBoZWFkZXI9VFJVRSwgcm93Lm5hbWVzPU5VTEwsIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpICU+JSAKICBmaWx0ZXIoQ0FOT05JQ0FMPT0iWUVTIikgJT4lIAogIGRwbHlyOjpyZW5hbWUoIlNZTUJPTCI9IlguU3ltYm9sIikgJT4lIAogIGRwbHlyOjpyZW5hbWUoIkdlbmUiPSJFTlNHIikgJT4lIAogIGxlZnRfam9pbihlbnNlbWJsX2Jpb3R5cGVzLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgZmlsdGVyKEJJT1RZUEUlaW4lYygicHJvdGVpbl9jb2RpbmciKSkKTVBDX3RyYW5zY3JpcHRzIDwtIHJlYWQuZGVsaW0oIk1QQ190cmFuc2NyaXB0c193aXRoX2Nhbm9uaWNpdHkudHN2IiwgaGVhZGVyPVRSVUUsIHJvdy5uYW1lcz1OVUxMLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSAlPiUgCiAgZmlsdGVyKENBTk9OSUNBTCVpbiVjKCJZRVMiKSkgJT4lIAogIHNlbGVjdChGZWF0dXJlLENBTk9OSUNBTCkKCmFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2Rpbmdfb25seSA8LSB0aWJibGUoIlNZTUJPTCI9R25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyRTWU1CT0wsIkdlbmUiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckR2VuZSwiRmVhdHVyZSI9R25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyRGZWF0dXJlLCAiQWdpbGVudFNTdjYiPSJZRVMiKSAlPiUgCiAgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSAKICBhcnJhbmdlKFNZTUJPTCkgJT4lIAogIGZpbHRlcihGZWF0dXJlJWluJShISUdIZ2VuZXNfcmF0aW82X2xpc3QpKQoKYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19NUENvbmx5PC0gdGliYmxlKCJTWU1CT0wiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckU1lNQk9MLCJHZW5lIj1Hbm9tQURfc3RhdHNfQWdpbGVudFNTdjZfTE9GX1ZFUF9FTlNUY2Fub25pY2FsX3Byb3RlaW5fY29kaW5nJEdlbmUsIkZlYXR1cmUiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckRmVhdHVyZSwgIkFnaWxlbnRTU3Y2Ij0iWUVTIikgJT4lIAogIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgCiAgbGVmdF9qb2luKE1QQ190cmFuc2NyaXB0cyxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogIGZpbHRlcihDQU5PTklDQUwlaW4lYygiWUVTIikpICU+JSAKICBmaWx0ZXIoRmVhdHVyZSVpbiUoSElHSGdlbmVzX3JhdGlvNl9saXN0KSkKCmFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2Rpbmdfb25seTIgPC0gc2VsZWN0KGFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2Rpbmdfb25seSxGZWF0dXJlLEFnaWxlbnRTU3Y2KQpgYGAKClN1bSBBQ3MgYWNyb3NzIHNhbXBsZS9Hbm9tQUQgZm9yIGVhY2ggcHJlZGljdGlvbiBzY29yZSBjbGFzcyAoTVBDIGZpZ3VyZXMgaW5jbHVkZSB0cmFuc2NyaXB0cyB3aXRoIE1QQyBzY29yZXMgb25seSkKYGBge3J9Ckdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nIDwtIGZpbHRlcihHbm9tQURfc3RhdHNfTVMsQ0FOT05JQ0FMJWluJWMoIllFUyIpKSAlPiUgCiAgZHBseXI6OnJlbmFtZSgiR2VuZSI9IkVOU0ciKSAlPiUgCiAgbGVmdF9qb2luKGVuc2VtYmxfYmlvdHlwZXMsYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpICU+JSAKICBmaWx0ZXIoQklPVFlQRSVpbiVjKCJwcm90ZWluX2NvZGluZyIpKSAlPiUgCiAgbGVmdF9qb2luKGFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2Rpbmdfb25seTIsYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpICU+JSAKICBmaWx0ZXIoQWdpbGVudFNTdjYlaW4lYygiWUVTIikpCiAgCkdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQyA8LSBmaWx0ZXIoR25vbUFEX3N0YXRzX01TLENBTk9OSUNBTCVpbiVjKCJZRVMiKSkgJT4lIAogIGRwbHlyOjpyZW5hbWUoIkdlbmUiPSJFTlNHIikgJT4lIAogIGxlZnRfam9pbihlbnNlbWJsX2Jpb3R5cGVzLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgZmlsdGVyKEJJT1RZUEUlaW4lYygicHJvdGVpbl9jb2RpbmciKSkgJT4lIAogIGxlZnRfam9pbihhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX29ubHkyLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgZmlsdGVyKEFnaWxlbnRTU3Y2JWluJWMoIllFUyIpKSAlPiUgCiAgbGVmdF9qb2luKE1QQ190cmFuc2NyaXB0cyxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogIGZpbHRlcihDQU5PTklDQUwueSVpbiVjKCJZRVMiKSkKCkdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw2XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDEwXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWyw2XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ19ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTBdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMuMl90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxNF0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01QQy4yX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxN10pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01QQzJfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMjBdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMyX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywyM10pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01QQzIuNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywyNl0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01QQzIuNV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMjldKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMzX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDMyXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTVBDM19ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMzVdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQURELjE1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMzhdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQURELjE1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDQxXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERDE1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNDRdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQUREMTVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNDddKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQUREMjBfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw1MF0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX0NBREQyMF9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw1M10pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX0NBREQyNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDU2XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERDI1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDU5XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERDMwX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNjJdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQUREMzBfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNjVdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNjhdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDcxXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNzRdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNzddKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDgwXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssODNdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuNTVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw4Nl0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw4OV0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssOTJdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuNl9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw5NV0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX1JFVkVMMC43X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTA0XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTA3XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjhfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMTZdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuOF9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMTldKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMzRdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTM3XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxMjJdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxMjVdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTI4XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxMzFdKSAlPiUgYXMubnVtZXJpYygpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwgPC0gVG90YWxfU2FtcGxlX0FsbGVsZXMqKG5yb3coYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5KSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbCA8LSBUb3RhbF9TYW1wbGVfQWxsZWxlcyoobnJvdyhhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX01QQ29ubHkpKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCmBgYAoKQ2FsY3VsYXRlIG9kZHMgcmF0aW9zIHVzaW5nIG1hdHJpY2VzCmBgYHtyfQpNUEMuMiA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfdG90YWwsCiAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3RvdGFsLAogICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMuMl90b3RhbCwKICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDLjJfdG90YWwpLAogICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDLjJfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDLjJfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ19ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQy4yX05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMiA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMl90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMl9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyX05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMl9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpNUEMyLjUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzIuNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMi41X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyLjVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyLjVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMyA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM190b3RhbCwKICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM190b3RhbCwKICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDM190b3RhbCwKICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDM190b3RhbCksCiAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpNUEMzX05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM190b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMzX05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMzX05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERC4xNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQURELjE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERC4xNV90b3RhbCksCiAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQuMTVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERC4xNV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQuMTVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQxNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDE1X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERDE1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMTVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMTVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQyMCA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDIwX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERDIwX05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMjBfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMjBfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQyNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDI1X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERDI1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMjVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMjVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQzMCA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfdG90YWwsCiAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDMwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDMwX3RvdGFsKSwKICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERDMwX05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMzBfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMzBfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpClJFVkVMLjAuNDUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMLjAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTC4wLjQ1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMLjAuNDVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNDUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC40NV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNDVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC40NV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpClJFVkVMMC41IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNTUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNTVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV9ORkVfdG90YWwpLG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNiA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNl9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpClJFVkVMMC43IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN190b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuN190b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpClJFVkVMMC43X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN190b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuN19ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKUkVWRUwwLjggPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC44X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuOF9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuOF9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjhfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERDE1UkVWRUwwLjQ1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpDQUREMTVSRVZFTDAuNDVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQxNVJFVkVMMC40NV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQxNVJFVkVMMC40NV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMkNBREQxNVJFVkVMMC40NSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpNUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCksbnJvdz0yLGJ5cm93PVRSVUUpCk1QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCgpvZGRzcmF0aW8gPC0gZnVuY3Rpb24gKGEsIGIgPSBOVUxMLCBjID0gTlVMTCwgZCA9IE5VTEwsIGNvbmYubGV2ZWwgPSAwLjk1LCAKICAgIHAuY2FsYy5ieS5pbmRlcGVuZGVuY2UgPSBUUlVFKSAKewogICAgaWYgKGlzLm1hdHJpeChhKSkgewogICAgICAgIGlmICgoZGltKGEpWzFdICE9IDJMKSB8IChkaW0oYSlbMl0gIT0gMkwpKSB7CiAgICAgICAgICAgIHN0b3AoIklucHV0IG1hdHJpeCBtdXN0IGJlIGEgMngyIHRhYmxlLiIpCiAgICAgICAgfQogICAgICAgIC5hIDwtIGFbMSwgMV0KICAgICAgICAuYiA8LSBhWzEsIDJdCiAgICAgICAgLmMgPC0gYVsyLCAxXQogICAgICAgIC5kIDwtIGFbMiwgMl0KICAgICAgICAuZGF0YS5uYW1lIDwtIGRlcGFyc2Uoc3Vic3RpdHV0ZShhKSkKICAgIH0KICAgIGVsc2UgewogICAgICAgIC5hIDwtIGEKICAgICAgICAuYiA8LSBiCiAgICAgICAgLmMgPC0gYwogICAgICAgIC5kIDwtIGQKICAgICAgICAuZGF0YS5uYW1lIDwtIHBhc3RlKGRlcGFyc2Uoc3Vic3RpdHV0ZShhKSksIGRlcGFyc2Uoc3Vic3RpdHV0ZShiKSksIAogICAgICAgICAgICBkZXBhcnNlKHN1YnN0aXR1dGUoYykpLCBkZXBhcnNlKHN1YnN0aXR1dGUoZCkpKQogICAgfQogICAgLk1BVCA8LSBtYXRyaXgoYyguYSwgLmIsIE0xIDwtIC5hICsgLmIsIC5jLCAuZCwgTTAgPC0gLmMgKyAKICAgICAgICAuZCwgTjEgPC0gLmEgKyAuYywgTjAgPC0gLmIgKyAuZCwgVG90YWwgPC0gLmEgKyAuYiArIAogICAgICAgIC5jICsgLmQpLCAzLCAzKQogICAgY29sbmFtZXMoLk1BVCkgPC0gYygiU2FtcGxlIiwgIkdub21BRCIsICJUb3RhbCIpICMoIkRpc2Vhc2UiLCAiTm9uZGlzZWFzZSIsICJUb3RhbCIpCiAgICByb3duYW1lcyguTUFUKSA8LSBjKCJNUyIsICJObyBNUyIsICJUb3RhbCIpICMoIkV4cG9zZWQiLCAiTm9uZXhwb3NlZCIsICJUb3RhbCIpCiAgICBjbGFzcyguTUFUKSA8LSAidGFibGUiCiAgICBwcmludCguTUFUKQogICAgRVNUSU1BVEUgPC0gKC5hIC8uYikvKC5jLy5kKQogICAgbm9ybS5wcCA8LSBxbm9ybSgxIC0gKDEgLSBjb25mLmxldmVsKS8yKQogICAgaWYgKHAuY2FsYy5ieS5pbmRlcGVuZGVuY2UpIHsKICAgICAgICBwLnYgPC0gMiAqICgxIC0gcG5vcm0oYWJzKCguYSAtIE4xICogTTEvVG90YWwpL3NxcnQoTjEgKiAKICAgICAgICAgICAgTjAgKiBNMSAqIE0wL1RvdGFsL1RvdGFsLyhUb3RhbCAtIDEpKSkpKQogICAgfQogICAgZWxzZSB7CiAgICAgICAgcC52IDwtIDIgKiAoMSAtIHBub3JtKGxvZyhpZmVsc2UoRVNUSU1BVEUgPiAxLCBFU1RJTUFURSwgCiAgICAgICAgICAgIDEvRVNUSU1BVEUpKS9zcXJ0KDEvLmEgKyAxLy5iICsgMS8uYyArIDEvLmQpKSkKICAgIH0KICAgIE9STCA8LSBFU1RJTUFURSAqIGV4cCgtbm9ybS5wcCAqIHNxcnQoMS8uYSArIDEvLmIgKyAxLy5jICsgCiAgICAgICAgMS8uZCkpCiAgICBPUlUgPC0gRVNUSU1BVEUgKiBleHAobm9ybS5wcCAqIHNxcnQoMS8uYSArIDEvLmIgKyAxLy5jICsgCiAgICAgICAgMS8uZCkpICU+JSBzaWduaWYoZGlnaXRzPTcpCiAgICBDSU5UIDwtIHBhc3RlKHNpZ25pZihPUkwsZGlnaXRzID0gNyksc2lnbmlmKE9SVSxkaWdpdHMgPSA3KSxzZXA9In4iKQogICAgYXR0cihDSU5ULCAiY29uZi5sZXZlbCIpIDwtIGNvbmYubGV2ZWwKICAgIFJWQUwgPC0gbGlzdChwLnZhbHVlID0gcC52LCBjb25mLmludCA9IENJTlQsIGVzdGltYXRlID0gRVNUSU1BVEUsIAogICAgICAgIG1ldGhvZCA9ICJPZGRzIHJhdGlvIGVzdGltYXRlIGFuZCBpdHMgc2lnbmlmaWNhbmNlIHByb2JhYmlsaXR5IiwgCiAgICAgICAgZGF0YS5uYW1lID0gLmRhdGEubmFtZSkKICAgIGNsYXNzKFJWQUwpIDwtICJodGVzdCIKICAgIHJldHVybihSVkFMKQp9CgpPUl9NUEMuMiA8LSBvZGRzcmF0aW8oTVBDLjIscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMuMl9ORkUgPC0gb2Rkc3JhdGlvKE1QQy4yX05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX01QQzIgPC0gb2Rkc3JhdGlvKE1QQzIscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMyX05GRSA8LSBvZGRzcmF0aW8oTVBDMl9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMyLjUgPC0gb2Rkc3JhdGlvKE1QQzIuNSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX01QQzIuNV9ORkUgPC0gb2Rkc3JhdGlvKE1QQzIuNV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMzIDwtIG9kZHNyYXRpbyhNUEMzLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfTVBDM19ORkUgPC0gb2Rkc3JhdGlvKE1QQzNfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfQ0FERC4xNSA8LSBvZGRzcmF0aW8oQ0FERC4xNSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQuMTVfTkZFIDwtIG9kZHNyYXRpbyhDQURELjE1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQxNSA8LSBvZGRzcmF0aW8oQ0FERDE1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfQ0FERDE1X05GRSA8LSBvZGRzcmF0aW8oQ0FERDE1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQyMCA8LSBvZGRzcmF0aW8oQ0FERDIwLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfQ0FERDIwX05GRSA8LSBvZGRzcmF0aW8oQ0FERDIwX05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQyNSA8LSBvZGRzcmF0aW8oQ0FERDI1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfQ0FERDI1X05GRSA8LSBvZGRzcmF0aW8oQ0FERDI1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQzMCA8LSBvZGRzcmF0aW8oQ0FERDMwLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfQ0FERDMwX05GRSA8LSBvZGRzcmF0aW8oQ0FERDMwX05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMLjAuNDUgPC0gb2Rkc3JhdGlvKFJFVkVMLjAuNDUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTC4wLjQ1X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwuMC40NV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuNDUgPC0gb2Rkc3JhdGlvKFJFVkVMMC40NSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMMC40NV9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMMC40NV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuNSA8LSBvZGRzcmF0aW8oUkVWRUwwLjUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuNV9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMMC41X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMMC41NSA8LSBvZGRzcmF0aW8oUkVWRUwwLjU1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfUkVWRUwwLjU1X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwwLjU1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMMC42IDwtIG9kZHNyYXRpbyhSRVZFTDAuNixwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMMC42X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwwLjZfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfUkVWRUwwLjcgPC0gb2Rkc3JhdGlvKFJFVkVMMC43LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfUkVWRUwwLjdfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTDAuN19ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuOCA8LSBvZGRzcmF0aW8oUkVWRUwwLjgscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuOF9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMMC44X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQxNVJFVkVMMC40NSA8LSBvZGRzcmF0aW8oQ0FERDE1UkVWRUwwLjQ1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBvZGRzcmF0aW8oQ0FERDE1UkVWRUwwLjQ1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX01QQzJDQUREMTVSRVZFTDAuNDUgPC0gb2Rkc3JhdGlvKE1QQzJDQUREMTVSRVZFTDAuNDUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBvZGRzcmF0aW8oTVBDMkNBREQxNVJFVkVMMC40NV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gb2Rkc3JhdGlvKE1QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUgPC0gb2Rkc3JhdGlvKE1QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpgYGAKCkNvbWJpbmUgYWxsIHJlc3VsdHMgaW50byBvbmUgc3ByZWFkc2hlZXQsIGFuZCBzYXZlCmBgYHtyfQphID0gYyhPUl9NUEMuMiRkYXRhLm5hbWUsT1JfTVBDLjJfTkZFJGRhdGEubmFtZSxPUl9NUEMyJGRhdGEubmFtZSxPUl9NUEMyX05GRSRkYXRhLm5hbWUsT1JfTVBDMi41JGRhdGEubmFtZSxPUl9NUEMyLjVfTkZFJGRhdGEubmFtZSxPUl9NUEMzJGRhdGEubmFtZSxPUl9NUEMzX05GRSRkYXRhLm5hbWUsT1JfQ0FERC4xNSRkYXRhLm5hbWUsT1JfQ0FERC4xNV9ORkUkZGF0YS5uYW1lLE9SX0NBREQxNSRkYXRhLm5hbWUsT1JfQ0FERDE1X05GRSRkYXRhLm5hbWUsT1JfQ0FERDIwJGRhdGEubmFtZSxPUl9DQUREMjBfTkZFJGRhdGEubmFtZSxPUl9DQUREMjUkZGF0YS5uYW1lLE9SX0NBREQyNV9ORkUkZGF0YS5uYW1lLE9SX0NBREQzMCRkYXRhLm5hbWUsT1JfQ0FERDMwX05GRSRkYXRhLm5hbWUsT1JfUkVWRUwuMC40NSRkYXRhLm5hbWUsT1JfUkVWRUwuMC40NV9ORkUkZGF0YS5uYW1lLE9SX1JFVkVMMC40NSRkYXRhLm5hbWUsT1JfUkVWRUwwLjQ1X05GRSRkYXRhLm5hbWUsT1JfUkVWRUwwLjUkZGF0YS5uYW1lLE9SX1JFVkVMMC41X05GRSRkYXRhLm5hbWUsT1JfUkVWRUwwLjU1JGRhdGEubmFtZSxPUl9SRVZFTDAuNTVfTkZFJGRhdGEubmFtZSxPUl9SRVZFTDAuNiRkYXRhLm5hbWUsT1JfUkVWRUwwLjZfTkZFJGRhdGEubmFtZSxPUl9SRVZFTDAuNyRkYXRhLm5hbWUsT1JfUkVWRUwwLjdfTkZFJGRhdGEubmFtZSxPUl9SRVZFTDAuOCRkYXRhLm5hbWUsT1JfUkVWRUwwLjhfTkZFJGRhdGEubmFtZSxPUl9DQUREMTVSRVZFTDAuNDUkZGF0YS5uYW1lLE9SX0NBREQxNVJFVkVMMC40NV9ORkUkZGF0YS5uYW1lLE9SX01QQzJDQUREMTVSRVZFTDAuNDUkZGF0YS5uYW1lLE9SX01QQzJDQUREMTVSRVZFTDAuNDVfTkZFJGRhdGEubmFtZSxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgkZGF0YS5uYW1lLE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUkZGF0YS5uYW1lKQpiID0gYyhPUl9NUEMuMiRlc3RpbWF0ZSxPUl9NUEMuMl9ORkUkZXN0aW1hdGUsT1JfTVBDMiRlc3RpbWF0ZSxPUl9NUEMyX05GRSRlc3RpbWF0ZSxPUl9NUEMyLjUkZXN0aW1hdGUsT1JfTVBDMi41X05GRSRlc3RpbWF0ZSxPUl9NUEMzJGVzdGltYXRlLE9SX01QQzNfTkZFJGVzdGltYXRlLE9SX0NBREQuMTUkZXN0aW1hdGUsT1JfQ0FERC4xNV9ORkUkZXN0aW1hdGUsT1JfQ0FERDE1JGVzdGltYXRlLE9SX0NBREQxNV9ORkUkZXN0aW1hdGUsT1JfQ0FERDIwJGVzdGltYXRlLE9SX0NBREQyMF9ORkUkZXN0aW1hdGUsT1JfQ0FERDI1JGVzdGltYXRlLE9SX0NBREQyNV9ORkUkZXN0aW1hdGUsT1JfQ0FERDMwJGVzdGltYXRlLE9SX0NBREQzMF9ORkUkZXN0aW1hdGUsT1JfUkVWRUwuMC40NSRlc3RpbWF0ZSxPUl9SRVZFTC4wLjQ1X05GRSRlc3RpbWF0ZSxPUl9SRVZFTDAuNDUkZXN0aW1hdGUsT1JfUkVWRUwwLjQ1X05GRSRlc3RpbWF0ZSxPUl9SRVZFTDAuNSRlc3RpbWF0ZSxPUl9SRVZFTDAuNV9ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjU1JGVzdGltYXRlLE9SX1JFVkVMMC41NV9ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjYkZXN0aW1hdGUsT1JfUkVWRUwwLjZfTkZFJGVzdGltYXRlLE9SX1JFVkVMMC43JGVzdGltYXRlLE9SX1JFVkVMMC43X05GRSRlc3RpbWF0ZSxPUl9SRVZFTDAuOCRlc3RpbWF0ZSxPUl9SRVZFTDAuOF9ORkUkZXN0aW1hdGUsT1JfQ0FERDE1UkVWRUwwLjQ1JGVzdGltYXRlLE9SX0NBREQxNVJFVkVMMC40NV9ORkUkZXN0aW1hdGUsT1JfTVBDMkNBREQxNVJFVkVMMC40NSRlc3RpbWF0ZSxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSRlc3RpbWF0ZSxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgkZXN0aW1hdGUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSRlc3RpbWF0ZSkKYyA9IGMoT1JfTVBDLjIkY29uZi5pbnQsT1JfTVBDLjJfTkZFJGNvbmYuaW50LE9SX01QQzIkY29uZi5pbnQsT1JfTVBDMl9ORkUkY29uZi5pbnQsT1JfTVBDMi41JGNvbmYuaW50LE9SX01QQzIuNV9ORkUkY29uZi5pbnQsT1JfTVBDMyRjb25mLmludCxPUl9NUEMzX05GRSRjb25mLmludCxPUl9DQURELjE1JGNvbmYuaW50LE9SX0NBREQuMTVfTkZFJGNvbmYuaW50LE9SX0NBREQxNSRjb25mLmludCxPUl9DQUREMTVfTkZFJGNvbmYuaW50LE9SX0NBREQyMCRjb25mLmludCxPUl9DQUREMjBfTkZFJGNvbmYuaW50LE9SX0NBREQyNSRjb25mLmludCxPUl9DQUREMjVfTkZFJGNvbmYuaW50LE9SX0NBREQzMCRjb25mLmludCxPUl9DQUREMzBfTkZFJGNvbmYuaW50LE9SX1JFVkVMLjAuNDUkY29uZi5pbnQsT1JfUkVWRUwuMC40NV9ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjQ1JGNvbmYuaW50LE9SX1JFVkVMMC40NV9ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjUkY29uZi5pbnQsT1JfUkVWRUwwLjVfTkZFJGNvbmYuaW50LE9SX1JFVkVMMC41NSRjb25mLmludCxPUl9SRVZFTDAuNTVfTkZFJGNvbmYuaW50LE9SX1JFVkVMMC42JGNvbmYuaW50LE9SX1JFVkVMMC42X05GRSRjb25mLmludCxPUl9SRVZFTDAuNyRjb25mLmludCxPUl9SRVZFTDAuN19ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjgkY29uZi5pbnQsT1JfUkVWRUwwLjhfTkZFJGNvbmYuaW50LE9SX0NBREQxNVJFVkVMMC40NSRjb25mLmludCxPUl9DQUREMTVSRVZFTDAuNDVfTkZFJGNvbmYuaW50LE9SX01QQzJDQUREMTVSRVZFTDAuNDUkY29uZi5pbnQsT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUkY29uZi5pbnQsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44JGNvbmYuaW50LE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUkY29uZi5pbnQpCmQgPSBjKE9SX01QQy4yJHAudmFsdWUsT1JfTVBDLjJfTkZFJHAudmFsdWUsT1JfTVBDMiRwLnZhbHVlLE9SX01QQzJfTkZFJHAudmFsdWUsT1JfTVBDMi41JHAudmFsdWUsT1JfTVBDMi41X05GRSRwLnZhbHVlLE9SX01QQzMkcC52YWx1ZSxPUl9NUEMzX05GRSRwLnZhbHVlLE9SX0NBREQuMTUkcC52YWx1ZSxPUl9DQURELjE1X05GRSRwLnZhbHVlLE9SX0NBREQxNSRwLnZhbHVlLE9SX0NBREQxNV9ORkUkcC52YWx1ZSxPUl9DQUREMjAkcC52YWx1ZSxPUl9DQUREMjBfTkZFJHAudmFsdWUsT1JfQ0FERDI1JHAudmFsdWUsT1JfQ0FERDI1X05GRSRwLnZhbHVlLE9SX0NBREQzMCRwLnZhbHVlLE9SX0NBREQzMF9ORkUkcC52YWx1ZSxPUl9SRVZFTC4wLjQ1JHAudmFsdWUsT1JfUkVWRUwuMC40NV9ORkUkcC52YWx1ZSxPUl9SRVZFTDAuNDUkcC52YWx1ZSxPUl9SRVZFTDAuNDVfTkZFJHAudmFsdWUsT1JfUkVWRUwwLjUkcC52YWx1ZSxPUl9SRVZFTDAuNV9ORkUkcC52YWx1ZSxPUl9SRVZFTDAuNTUkcC52YWx1ZSxPUl9SRVZFTDAuNTVfTkZFJHAudmFsdWUsT1JfUkVWRUwwLjYkcC52YWx1ZSxPUl9SRVZFTDAuNl9ORkUkcC52YWx1ZSxPUl9SRVZFTDAuNyRwLnZhbHVlLE9SX1JFVkVMMC43X05GRSRwLnZhbHVlLE9SX1JFVkVMMC44JHAudmFsdWUsT1JfUkVWRUwwLjhfTkZFJHAudmFsdWUsT1JfQ0FERDE1UkVWRUwwLjQ1JHAudmFsdWUsT1JfQ0FERDE1UkVWRUwwLjQ1X05GRSRwLnZhbHVlLE9SX01QQzJDQUREMTVSRVZFTDAuNDUkcC52YWx1ZSxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSRwLnZhbHVlLE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCRwLnZhbHVlLE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUkcC52YWx1ZSkKCk9Sc19tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfc2FtcGxlMC4wMSA8LSB0aWJibGUoCiAgIkZpbHRlcmluZyI9YSwKICAiT2Rkc19yYXRpbyI9YiwKICAiOTUlX0NJIj1jLAogICJwX3ZhbHVlIj1kCikKCndyaXRlX3RzdihPUnNfbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX3NhbXBsZTAuMDEsIHBhdGg9Ik9Sc19tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfMC4wMDFfc2FtcGxlMC4wMV9ISUdIR2VuZXNfcmF0aW82b25seS50c3YiKQpgYGAKCkNhbGN1bGF0ZSByYXRpb3MgYW5kIEZpc2hlcidzIHRlc3QgdmFsdWVzIGZvciBnZW5lcyBjb250YWluaW5nIGVucmljaGVkIHZhcmlhbnRzIHdpdGggY29ycmVzcG9uZGluZyBwcmVkaWN0aW9uIHNjb3JlcywgYW5kIHNhdmUgb3V0cHV0CmBgYHtyfQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3MgPC0gCiAgbXV0YXRlKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLAogICAgICAgICAiU2FtcGxlX0dlbmVfTE9GX0ZyZXFfUmF0aW9fR25vbUFEXzAuMDAxIj1TYW1wbGVfR2VuZV9GcmVxL0ZJTFRFUl9SRl9NU19BRl8wLjAwMV9SRVZFTDAuN19BREosCiAgICAgICAgICJTYW1wbGVfR2VuZV9MT0ZfRnJlcV9SYXRpb19Hbm9tQURfTkZFXzAuMDAxIj1TYW1wbGVfR2VuZV9GcmVxL0ZJTFRFUl9SRl9NU19BRl8wLjAwMV9SRVZFTDAuN19ORkVfQURKKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zMiA8LSBtdXRhdGUobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zLCAiU2FtcGxlX0dlbmVfTE9GX0FGX1JhdGlvIj1TYW1wbGVfQUYvR25vbUFEX3YyLjFfbm9uX2NhbmNlcl9BRiwgCiJTYW1wbGVfR2VuZV9MT0ZfQUZfUmF0aW9fTkZFIj1TYW1wbGVfQUYvR25vbUFEX3YyLjFfbm9uX2NhbmNlcl9BRl9uZmUpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0cyA8LSBtdXRhdGUobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zMixUb3RhbF9DYXNlX0FsbGVsZXM9VG90YWxfU2FtcGxlX0FsbGVsZXMpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiA8LSBtdXRhdGUobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMsIE1BWF9BTj1yZXBsYWNlKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzJE1BWF9BTiwgaXMubmEobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMkTUFYX0FOKSwgbWF4KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzJE1BWF9BTiwgbmEucm09VFJVRSkpKSAlPiUgCiAgbXV0YXRlKE1BWF9BTl9ORkU9cmVwbGFjZSguJE1BWF9BTl9ORkUsIGlzLm5hKC4kTUFYX0FOX05GRSksIG1heChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0cyRNQVhfQU5fTkZFLCBuYS5ybT1UUlVFKSkpCgpmaXNoZXJyZXN1bHRzX0VOU1QgPC0gYXBwbHkobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMyWyxjKDIyMSwyMzEsMjQxLDIyMyldLDEsZnVuY3Rpb24oeCkge2Zpc2hlci50ZXN0KHJiaW5kKHhbMToyXSxjKHhbM10teFsxXSx4WzRdLXhbMl0pKSl9KQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMyJFBfdmFsdWVfRmlzaGVyXzAuMDA1ID0gc2FwcGx5KGZpc2hlcnJlc3VsdHNfRU5TVCxmdW5jdGlvbih4KSByb3VuZCh4JHAudmFsdWUsMTIpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czIkT1JfMC4wMDUgPSBzYXBwbHkoZmlzaGVycmVzdWx0c19FTlNULGZ1bmN0aW9uKHgpIHJvdW5kKHgkZXN0aW1hdGUsNCkpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRgOTUlQ0lfMC4wMDVgID0gc2FwcGx5KGZpc2hlcnJlc3VsdHNfRU5TVCxmdW5jdGlvbih4KSBwYXN0ZShyb3VuZCh4JGNvbmYuaW50WzE6Ml0sMiksY29sbGFwc2U9In4iKSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMyJEJIXzAuMDA1ID0gcC5hZGp1c3QobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMyJFBfdmFsdWVfRmlzaGVyXzAuMDA1LG1ldGhvZCA9ICJCSCIpCgpmaXNoZXJyZXN1bHRzMl9FTlNUIDwtIGFwcGx5KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMlssYygyMjEsMjM0LDI0MSwyMjcpXSwxLGZ1bmN0aW9uKHgpIHtmaXNoZXIudGVzdChyYmluZCh4WzE6Ml0sYyh4WzNdLXhbMV0seFs0XS14WzJdKSkpfSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRQX3ZhbHVlX0Zpc2hlcl8wLjAwNV9ORkUgPSBzYXBwbHkoZmlzaGVycmVzdWx0czJfRU5TVCxmdW5jdGlvbih4KSByb3VuZCh4JHAudmFsdWUsMTIpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czIkT1JfMC4wMDVfTkZFID0gc2FwcGx5KGZpc2hlcnJlc3VsdHMyX0VOU1QsZnVuY3Rpb24oeCkgcm91bmQoeCRlc3RpbWF0ZSw0KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMyJGA5NSVDSV8wLjAwNV9ORkVgID0gc2FwcGx5KGZpc2hlcnJlc3VsdHMyX0VOU1QsZnVuY3Rpb24oeCkgcGFzdGUocm91bmQoeCRjb25mLmludFsxOjJdLDIpLGNvbGxhcHNlPSJ+IikpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRCSF8wLjAwNV9ORkUgPSBwLmFkanVzdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czIkUF92YWx1ZV9GaXNoZXJfMC4wMDVfTkZFLG1ldGhvZCA9ICJCSCIpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czMgPC0gbXV0YXRlKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiwgRmlsdGVyaW5nQUZfOTVfRXhjZWVkc19NYXhDcmVkUG9wQUY9KChHbm9tQURfdjIuMV9ub25fY2FuY2VyX0ZpbHRlcmluZ19BRl85NSk+MC4wMDAxODEpKSAlPiUgCiAgbXV0YXRlKEZpbHRlcmluZ0FGXzk1X05GRV9FeGNlZWRzX01heENyZWRQb3BBRj0oKEdub21BRF92Mi4xX25vbl9jYW5jZXJfRmlsdGVyaW5nX0FGXzk1X25mZSk+MC4wMDAxODEpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMzICU+JSAKICB3cml0ZV9leGNlbF9jc3YocGF0aD0ibWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsXzAuMDAxX1JFVkVMMC43X3NhbXBsZTAuMDFfSElHSGdlbmVzX3JhdGlvNi5jc3YiLG5hPSIuIixhcHBlbmQ9RkFMU0UsY29sX25hbWVzPVRSVUUpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czMgJT4lIAogIGZpbHRlcihGZWF0dXJlJWluJShISUdIZ2VuZXNfY2FuZGlkYXRlc19saXN0KSkgJT4lIAogIHdyaXRlX2V4Y2VsX2NzdihwYXRoPSJtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfMC4wMDFfUkVWRUwwLjdfc2FtcGxlMC4wMV9ISUdIZ2VuZXNfY2FuZGlkYXRlc19yYXRpbzYuY3N2IixuYT0iLiIsYXBwZW5kPUZBTFNFLGNvbF9uYW1lcz1UUlVFKQpgYGAK