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)

Create modified odds ratio function

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)
}

Import and quantify lists of LoF-enriched genes at specified ratio from the original analysis (see https://rpubs.com/deepsubs/nature_comms_paper_2020)

HIGHgenes_list <- read.delim("HIGHgenes_list.txt", stringsAsFactors=FALSE)
HIGHgenes_ratio3 <- filter(HIGHgenes_list,Sample_Gene_LOF_Freq_Ratio_GnomAD_NFE_0.005>3)
HIGHgenes_ratio6 <- filter(HIGHgenes_list,Sample_Gene_LOF_Freq_Ratio_GnomAD_NFE_0.005>6)
HIGHgenes_ratio12 <- filter(HIGHgenes_list,Sample_Gene_LOF_Freq_Ratio_GnomAD_NFE_0.005>12)
HIGHgenes_ratio3_n <- nrow(HIGHgenes_ratio3)
HIGHgenes_ratio6_n <- nrow(HIGHgenes_ratio6)
HIGHgenes_ratio12_n <- nrow(HIGHgenes_ratio12)

sample_genes_list_ENSTcanonical <- filter(masterfile_eoc_goodQ,CANONICAL=="YES") %>% 
  select(SYMBOL,Gene,Feature) %>% 
  distinct(.keep_all=FALSE)

Add GnomAD gene-level data and create data frames with Agilent SureSelect whole exome genes (ENST and protein-coding) and MPC-only transcripts

GnomAD_stats_MS <- read.delim("~/GnomAD MS Stats/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)] 

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)

Randomly sample LoF-enriched genes with minimum ratio > 3, calculate x100 sets of ORs for all prediction score categories, and save output

ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_bootstrap_AgilentSSv6_ratio3 <- tibble()

for (i in c(1:100)){
  bootstrap_gene_table <- sample_n(GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding, HIGHgenes_ratio3_n, replace=FALSE)
  bootstrap_gene_list <- bootstrap_gene_table[,2]
  
  bootstrap_gene_table_MPC <- sample_n(MPC_transcripts, HIGHgenes_ratio3_n, replace=FALSE)
  bootstrap_gene_list_MPC <- bootstrap_gene_table_MPC[,1]
  
  masterfile_eoc_goodQ_biotype_MS <- filter(masterfile_eoc_goodQ, IMPACT=="MODERATE") %>% 
    filter(str_detect(Consequence,"missense_variant")) %>% 
    filter(Feature%in%c(bootstrap_gene_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)
  
  
  # 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)

  
  # 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)
  
  
  # 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)

  
  # Add GnomAD gene-level data
  
  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)))
  
  
  # Create data frames with Agilent SureSelect whole exome genes (ENST and protein-coding) and MPC-only transcripts
  
  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%(bootstrap_gene_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%(bootstrap_gene_list_MPC))
  
  allGenes_AgilentSSv6_list_protein_coding_only2 <- select(allGenes_AgilentSSv6_list_protein_coding_only,Feature,AgilentSSv6)
  allGenes_AgilentSSv6_list_protein_coding_only2_MPC <- select(allGenes_AgilentSSv6_list_protein_coding_MPConly,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_MPC,by="Feature",copy=FALSE) %>% 
    filter(AgilentSSv6%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)
  
  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_bootstrap_AgilentSSv6_ratio3  <- bind_rows(ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_bootstrap_AgilentSSv6_ratio3 ,tibble(
    "Filtering"=a,
    "Odds_ratio"=b,
    "95%_CI"=c,
    "p_value"=d
  )
  )
}
write_tsv(ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_bootstrap_AgilentSSv6_ratio3, path="ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_bootstrap1000_AgilentSSv6_ratio3.tsv")

Randomly sample LoF-enriched genes with minimum ratio > 6, calculate x100 sets of ORs for all prediction score categories, and save output

ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_bootstrap_AgilentSSv6_ratio6 <- tibble()

for (i in c(1:100)){
  bootstrap_gene_table <- sample_n(GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding, HIGHgenes_ratio6_n, replace=FALSE)
  bootstrap_gene_list <- bootstrap_gene_table[,2]
  
  bootstrap_gene_table_MPC <- sample_n(MPC_transcripts, HIGHgenes_ratio6_n, replace=FALSE)
  bootstrap_gene_list_MPC <- bootstrap_gene_table_MPC[,1]
  
  masterfile_eoc_goodQ_biotype_MS <- filter(masterfile_eoc_goodQ, IMPACT=="MODERATE") %>% 
    filter(str_detect(Consequence,"missense_variant")) %>% 
    filter(Feature%in%c(bootstrap_gene_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)
  
  
  # 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)

  
  # 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)
  
  
  # 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)

  
  # Add GnomAD gene-level data
  
  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)))

  
  # Create data frames with Agilent SureSelect whole exome genes (ENST and protein-coding) and MPC-only transcripts
  
  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%(bootstrap_gene_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%(bootstrap_gene_list_MPC))
  
  allGenes_AgilentSSv6_list_protein_coding_only2 <- select(allGenes_AgilentSSv6_list_protein_coding_only,Feature,AgilentSSv6)
  allGenes_AgilentSSv6_list_protein_coding_only2_MPC <- select(allGenes_AgilentSSv6_list_protein_coding_MPConly,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_MPC,by="Feature",copy=FALSE) %>% 
    filter(AgilentSSv6%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)
  
  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_bootstrap_AgilentSSv6_ratio6  <- bind_rows(ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_bootstrap_AgilentSSv6_ratio6 ,tibble(
    "Filtering"=a,
    "Odds_ratio"=b,
    "95%_CI"=c,
    "p_value"=d
  )
  )
}
write_tsv(ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_bootstrap_AgilentSSv6_ratio6, path="ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_bootstrap1000_AgilentSSv6_ratio6.tsv")

Randomly sample LoF-enriched genes with minimum ratio > 12, calculate x100 sets of ORs for all prediction score categories, and save output

ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_bootstrap_AgilentSSv6_ratio12 <- tibble()

for (i in c(1:100)){
  bootstrap_gene_table <- sample_n(GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding, HIGHgenes_ratio12_n, replace=FALSE)
  bootstrap_gene_list <- bootstrap_gene_table[,2]
  
  bootstrap_gene_table_MPC <- sample_n(MPC_transcripts, HIGHgenes_ratio12_n, replace=FALSE)
  bootstrap_gene_list_MPC <- bootstrap_gene_table_MPC[,1]
  
  masterfile_eoc_goodQ_biotype_MS <- filter(masterfile_eoc_goodQ, IMPACT=="MODERATE") %>% 
    filter(str_detect(Consequence,"missense_variant")) %>% 
    filter(Feature%in%c(bootstrap_gene_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)
  
  
  # 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)
  
  
  # 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)
 
  
  # 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)

  
  # Add GnomAD gene-level data
  
  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)))

  
  # Create data frames with Agilent SureSelect whole exome genes (ENST and protein-coding) and MPC-only transcripts
  
  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%(bootstrap_gene_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%(bootstrap_gene_list_MPC))
  
  allGenes_AgilentSSv6_list_protein_coding_only2 <- select(allGenes_AgilentSSv6_list_protein_coding_only,Feature,AgilentSSv6)
  allGenes_AgilentSSv6_list_protein_coding_only2_MPC <- select(allGenes_AgilentSSv6_list_protein_coding_MPConly,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_MPC,by="Feature",copy=FALSE) %>% 
    filter(AgilentSSv6%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)
  
  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_bootstrap_AgilentSSv6_ratio12  <- bind_rows(ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_bootstrap_AgilentSSv6_ratio12 ,tibble(
    "Filtering"=a,
    "Odds_ratio"=b,
    "95%_CI"=c,
    "p_value"=d
  )
  )
}
write_tsv(ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_bootstrap_AgilentSSv6_ratio12, path="ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01_bootstrap1000_AgilentSSv6_ratio12.tsv")
LS0tCnRpdGxlOiAiVGhlc2lzIE1pc3NlbnNlIFZhcmlhbnRzIExvRi1FbnJpY2hlZCBHZW5lcyBSYW5kb20gU2FtcGxpbmcgU2NyaXB0IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCkFMTCBJTVBPUlRFRCBGSUxFUyBNVVNUIEJFIElOIFRIRSBTQU1FIERJUkVDVE9SWSBBUyBUSElTIFNDUklQVAoKTG9hZCB0aWR5dmVyc2UgcGFja2FnZQpgYGB7cn0KbGlicmFyeSgidGlkeXZlcnNlIikKYGBgCgpJbXBvcnQgcmF3IHZjZiBkYXRhIGZyb20gIm1hc3RlcmZpbGUiIGFuZCBleGNsdWRlIHZhcmlhbnRzIHdpdGggR25vbUFEIG5vbi1jYW5jZXIgQUYgPiAwLjAwMQpgYGB7cn0KbWFzdGVyZmlsZSA8LSByZWFkLmRlbGltKCJtYXN0ZXJmaWxlLnRzdiIsIGhlYWRlcj1UUlVFLCByb3cubmFtZXM9TlVMTCwgbmEuc3RyaW5ncyA9ICIuIiwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkgJT4lIAogIGRwbHlyOjpyZW5hbWUoIlNhbXBsZSI9IlguU2FtcGxlIikgJT4lIAogIGZpbHRlcihHbm9tQURfdjIuMV9ub25fY2FuY2VyX0FGPD0wLjAwMSkKYGBgCgpFeGNsdWRlIG5vbi1lcGl0aGVsaWFsLCB1dGVyaW5lLW9ubHksIEJSQ0EgK3ZlIGFuZCBvdGhlciBtdXRhdGlvbiArdmUgc2FtcGxlcwpgYGB7cn0KVmlQX0Rpc2NvdmVyeV9Db2hvcnQgPC0gcmVhZC5kZWxpbSgiVmlQX0xvRl9EaXNjb3ZlcnlfQ29ob3J0LnR4dCIsIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpClZpUF9EaXNjb3ZlcnlfQ29ob3J0X2xpc3QgPC0gVmlQX0Rpc2NvdmVyeV9Db2hvcnRbLDFdCgptYXN0ZXJmaWxlX2VvYyA8LSBmaWx0ZXIobWFzdGVyZmlsZSxTYW1wbGUlaW4lYyhWaVBfRGlzY292ZXJ5X0NvaG9ydF9saXN0KSkKcm0obWFzdGVyZmlsZSkKYGBgCgpBcHBlbmQgcGF0aWVudCBwYXRoIGRhdGEKYGBge3J9ClZpUF9PdkNhX1BhdGhfRGF0YSA8LSByZWFkLmRlbGltKCJWaVBfT3ZDYV9QYXRoX0RhdGEudHh0IiwgaGVhZGVyPVRSVUUsIHJvdy5uYW1lcz1OVUxMLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSAlPiUgCiAgZHBseXI6OnJlbmFtZSgiU2FtcGxlIj1FeG9tZS5JRCkKbWFzdGVyZmlsZV9lb2Nfd2l0aFBhdGggPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jLFZpUF9PdkNhX1BhdGhfRGF0YSxieT0iU2FtcGxlIixjb3B5PUZBTFNFKQpybShWaVBfT3ZDYV9QYXRoX0RhdGEsbWFzdGVyZmlsZV9lb2MpCmBgYAoKRXhjbHVkZSBsb3ctZ3JhZGUgdHVtb3VyIHNhbXBsZXMKYGBge3J9Cm1hc3RlcmZpbGVfZW9jMiA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2Nfd2l0aFBhdGgsKEhpc3RvcGF0aC5UeXBlIT0iQm9yZGVybGluZSB0dW1vdXIiKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIaXN0b3BhdGguVHlwZSE9Ik11Y2lub3VzIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGlzdG9wYXRoLlR5cGUhPSJDbGVhciBjZWxsIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGlzdG9wYXRoLlR5cGUhPSJMb3ctZ3JhZGUgc2Vyb3VzIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGlzdG9wYXRoLlR5cGUhPSJMb3ctZ3JhZGUgZW5kb21ldHJpb2lkIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGlzdG9wYXRoLlR5cGUhPSJTZXJvdXMgKD9sb3ctZ3JhZGUvYm9yZGVybGluZSkiKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIaXN0b3BhdGguVHlwZSE9Ik1peGVkIE11bGxlcmlhbiIpJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhpc3RvcGF0aC5UeXBlIT0iTWl4ZWQgRUFPQyIpKQpybShtYXN0ZXJmaWxlX2VvY193aXRoUGF0aCkKYGBgCgpFeGNsdWRlIGxvdy1xdWFsaXR5IHZhcmlhbnRzLCBHbm9tQUQgUkYtZmxhZ2dlZCB2YXJpYW50cyBhbmQgbm9uLXByb3RlaW4tY29kaW5nIGdlbmVzCmBgYHtyfQptYXN0ZXJmaWxlX2VvY19nb29kUSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2MyLCAoUVVBTD49MzApJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSWRlbnRpZmllZCE9IkZpbHRlcmVkSW5BbGwiKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNhbXBsZS5QTUNEUD49MTApJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU2FtcGxlLlBNQ0ZSRVE+PTAuMjUpKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoIXN0cl9kZXRlY3QoR25vbUFEX3YyLjFfRklMVEVSX2V4b21lLCJJbmJyZWVkaW5nQ29lZmYiKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzdHJfZGV0ZWN0KEdub21BRF92Mi4xX0ZJTFRFUl9leG9tZSwiUkYiKSl8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzLm5hKEdub21BRF92Mi4xX0ZJTFRFUl9leG9tZSkpICU+JSAKICBmaWx0ZXIoKCFzdHJfZGV0ZWN0KEdub21BRF92Mi4xX0ZJTFRFUl9nZW5vbWUsIkluYnJlZWRpbmdDb2VmZiIpJgogICAgICAgICAgICAhc3RyX2RldGVjdChHbm9tQURfdjIuMV9GSUxURVJfZ2Vub21lLCJSRiIpKXwKICAgICAgICAgICBpcy5uYShHbm9tQURfdjIuMV9GSUxURVJfZ2Vub21lKSkgJT4lIAogIGZpbHRlcihCSU9UWVBFJWluJWMoInByb3RlaW5fY29kaW5nIikpClRvdGFsX1NhbXBsZV9BbGxlbGVzIDwtIChuX2Rpc3RpbmN0KG1hc3RlcmZpbGVfZW9jX2dvb2RRJFNhbXBsZSkqMikKcm0obWFzdGVyZmlsZV9lb2MyKQpgYGAKCkNyZWF0ZSBtb2RpZmllZCBvZGRzIHJhdGlvIGZ1bmN0aW9uCmBgYHtyfQpvZGRzcmF0aW8gPC0gZnVuY3Rpb24gKGEsIGIgPSBOVUxMLCBjID0gTlVMTCwgZCA9IE5VTEwsIGNvbmYubGV2ZWwgPSAwLjk1LCAKICAgICAgICAgICAgICAgICAgICAgICBwLmNhbGMuYnkuaW5kZXBlbmRlbmNlID0gVFJVRSkgCnsKICBpZiAoaXMubWF0cml4KGEpKSB7CiAgICBpZiAoKGRpbShhKVsxXSAhPSAyTCkgfCAoZGltKGEpWzJdICE9IDJMKSkgewogICAgICBzdG9wKCJJbnB1dCBtYXRyaXggbXVzdCBiZSBhIDJ4MiB0YWJsZS4iKQogICAgfQogICAgLmEgPC0gYVsxLCAxXQogICAgLmIgPC0gYVsxLCAyXQogICAgLmMgPC0gYVsyLCAxXQogICAgLmQgPC0gYVsyLCAyXQogICAgLmRhdGEubmFtZSA8LSBkZXBhcnNlKHN1YnN0aXR1dGUoYSkpCiAgfQogIGVsc2UgewogICAgLmEgPC0gYQogICAgLmIgPC0gYgogICAgLmMgPC0gYwogICAgLmQgPC0gZAogICAgLmRhdGEubmFtZSA8LSBwYXN0ZShkZXBhcnNlKHN1YnN0aXR1dGUoYSkpLCBkZXBhcnNlKHN1YnN0aXR1dGUoYikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgZGVwYXJzZShzdWJzdGl0dXRlKGMpKSwgZGVwYXJzZShzdWJzdGl0dXRlKGQpKSkKICB9CiAgLk1BVCA8LSBtYXRyaXgoYyguYSwgLmIsIE0xIDwtIC5hICsgLmIsIC5jLCAuZCwgTTAgPC0gLmMgKyAKICAgICAgICAgICAgICAgICAgICAgLmQsIE4xIDwtIC5hICsgLmMsIE4wIDwtIC5iICsgLmQsIFRvdGFsIDwtIC5hICsgLmIgKyAKICAgICAgICAgICAgICAgICAgICAgLmMgKyAuZCksIDMsIDMpCiAgY29sbmFtZXMoLk1BVCkgPC0gYygiU2FtcGxlIiwgIkdub21BRCIsICJUb3RhbCIpICMoIkRpc2Vhc2UiLCAiTm9uZGlzZWFzZSIsICJUb3RhbCIpCiAgcm93bmFtZXMoLk1BVCkgPC0gYygiTVMiLCAiTm8gTVMiLCAiVG90YWwiKSAjKCJFeHBvc2VkIiwgIk5vbmV4cG9zZWQiLCAiVG90YWwiKQogIGNsYXNzKC5NQVQpIDwtICJ0YWJsZSIKICBwcmludCguTUFUKQogIEVTVElNQVRFIDwtICguYSAvLmIpLyguYy8uZCkKICBub3JtLnBwIDwtIHFub3JtKDEgLSAoMSAtIGNvbmYubGV2ZWwpLzIpCiAgaWYgKHAuY2FsYy5ieS5pbmRlcGVuZGVuY2UpIHsKICAgIHAudiA8LSAyICogKDEgLSBwbm9ybShhYnMoKC5hIC0gTjEgKiBNMS9Ub3RhbCkvc3FydChOMSAqIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTjAgKiBNMSAqIE0wL1RvdGFsL1RvdGFsLyhUb3RhbCAtIDEpKSkpKQogIH0KICBlbHNlIHsKICAgIHAudiA8LSAyICogKDEgLSBwbm9ybShsb2coaWZlbHNlKEVTVElNQVRFID4gMSwgRVNUSU1BVEUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS9FU1RJTUFURSkpL3NxcnQoMS8uYSArIDEvLmIgKyAxLy5jICsgMS8uZCkpKQogIH0KICBPUkwgPC0gRVNUSU1BVEUgKiBleHAoLW5vcm0ucHAgKiBzcXJ0KDEvLmEgKyAxLy5iICsgMS8uYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLy5kKSkKICBPUlUgPC0gRVNUSU1BVEUgKiBleHAobm9ybS5wcCAqIHNxcnQoMS8uYSArIDEvLmIgKyAxLy5jICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS8uZCkpICU+JSBzaWduaWYoZGlnaXRzPTcpCiAgQ0lOVCA8LSBwYXN0ZShzaWduaWYoT1JMLGRpZ2l0cyA9IDcpLHNpZ25pZihPUlUsZGlnaXRzID0gNyksc2VwPSJ+IikKICBhdHRyKENJTlQsICJjb25mLmxldmVsIikgPC0gY29uZi5sZXZlbAogIFJWQUwgPC0gbGlzdChwLnZhbHVlID0gcC52LCBjb25mLmludCA9IENJTlQsIGVzdGltYXRlID0gRVNUSU1BVEUsIAogICAgICAgICAgICAgICBtZXRob2QgPSAiT2RkcyByYXRpbyBlc3RpbWF0ZSBhbmQgaXRzIHNpZ25pZmljYW5jZSBwcm9iYWJpbGl0eSIsIAogICAgICAgICAgICAgICBkYXRhLm5hbWUgPSAuZGF0YS5uYW1lKQogIGNsYXNzKFJWQUwpIDwtICJodGVzdCIKICByZXR1cm4oUlZBTCkKfQpgYGAKCkltcG9ydCBhbmQgcXVhbnRpZnkgbGlzdHMgb2YgTG9GLWVucmljaGVkIGdlbmVzIGF0IHNwZWNpZmllZCByYXRpbyBmcm9tIHRoZSBvcmlnaW5hbCBhbmFseXNpcyAoc2VlIGh0dHBzOi8vcnB1YnMuY29tL2RlZXBzdWJzL25hdHVyZV9jb21tc19wYXBlcl8yMDIwKQpgYGB7cn0KSElHSGdlbmVzX2xpc3QgPC0gcmVhZC5kZWxpbSgiSElHSGdlbmVzX2xpc3QudHh0Iiwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkKSElHSGdlbmVzX3JhdGlvMyA8LSBmaWx0ZXIoSElHSGdlbmVzX2xpc3QsU2FtcGxlX0dlbmVfTE9GX0ZyZXFfUmF0aW9fR25vbUFEX05GRV8wLjAwNT4zKQpISUdIZ2VuZXNfcmF0aW82IDwtIGZpbHRlcihISUdIZ2VuZXNfbGlzdCxTYW1wbGVfR2VuZV9MT0ZfRnJlcV9SYXRpb19Hbm9tQURfTkZFXzAuMDA1PjYpCkhJR0hnZW5lc19yYXRpbzEyIDwtIGZpbHRlcihISUdIZ2VuZXNfbGlzdCxTYW1wbGVfR2VuZV9MT0ZfRnJlcV9SYXRpb19Hbm9tQURfTkZFXzAuMDA1PjEyKQpISUdIZ2VuZXNfcmF0aW8zX24gPC0gbnJvdyhISUdIZ2VuZXNfcmF0aW8zKQpISUdIZ2VuZXNfcmF0aW82X24gPC0gbnJvdyhISUdIZ2VuZXNfcmF0aW82KQpISUdIZ2VuZXNfcmF0aW8xMl9uIDwtIG5yb3coSElHSGdlbmVzX3JhdGlvMTIpCgpzYW1wbGVfZ2VuZXNfbGlzdF9FTlNUY2Fub25pY2FsIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUSxDQU5PTklDQUw9PSJZRVMiKSAlPiUgCiAgc2VsZWN0KFNZTUJPTCxHZW5lLEZlYXR1cmUpICU+JSAKICBkaXN0aW5jdCgua2VlcF9hbGw9RkFMU0UpCmBgYAoKQWRkIEdub21BRCBnZW5lLWxldmVsIGRhdGEgYW5kIGNyZWF0ZSBkYXRhIGZyYW1lcyB3aXRoIEFnaWxlbnQgU3VyZVNlbGVjdCB3aG9sZSBleG9tZSBnZW5lcyAoRU5TVCBhbmQgcHJvdGVpbi1jb2RpbmcpIGFuZCBNUEMtb25seSB0cmFuc2NyaXB0cwpgYGB7cn0KR25vbUFEX3N0YXRzX01TIDwtIHJlYWQuZGVsaW0oIn4vR25vbUFEIE1TIFN0YXRzL0dub21BRC5nZW5lLnN0YXRzLnYyLjFfbWlzc2Vuc2VfQUZfMC4wMDEudHN2IiwgaGVhZGVyPVRSVUUsIHJvdy5uYW1lcz1OVUxMLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSAlPiUgCiAgZHBseXI6OnJlbmFtZShTWU1CT0w9WC5TeW1ib2wpIApHbm9tQURfc3RhdHNfTVMgPC0gR25vbUFEX3N0YXRzX01TWyxjKDE6MTMsMTU2OjI4MSldIAoKZW5zZW1ibF9iaW90eXBlcyA8LSByZWFkLmRlbGltKCJlbnNlbWJsX2Jpb3R5cGVzLnRzdiIsIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpICU+JSAKICBzZWxlY3QoZW5zZW1ibF90cmFuc2NyaXB0X2lkLHRyYW5zY3JpcHRfYmlvdHlwZSkgJT4lIAogIGRwbHlyOjpyZW5hbWUoIkZlYXR1cmUiPSJlbnNlbWJsX3RyYW5zY3JpcHRfaWQiLCJCSU9UWVBFIj0idHJhbnNjcmlwdF9iaW90eXBlIikKR25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyA8LSByZWFkLmRlbGltKCJHbm9tQUQuZ2VuZS5zdGF0cy52Mi5SRi5vbmx5LmFnaWxlbnQudjYub25seS50c3YiLCBoZWFkZXI9VFJVRSwgcm93Lm5hbWVzPU5VTEwsIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpICU+JSAKICBmaWx0ZXIoQ0FOT05JQ0FMPT0iWUVTIikgJT4lIAogIGRwbHlyOjpyZW5hbWUoIlNZTUJPTCI9IlguU3ltYm9sIikgJT4lIAogIGRwbHlyOjpyZW5hbWUoIkdlbmUiPSJFTlNHIikgJT4lIAogIGxlZnRfam9pbihlbnNlbWJsX2Jpb3R5cGVzLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgZmlsdGVyKEJJT1RZUEUlaW4lYygicHJvdGVpbl9jb2RpbmciKSkKCk1QQ190cmFuc2NyaXB0cyA8LSByZWFkLmRlbGltKCJNUENfdHJhbnNjcmlwdHNfd2l0aF9jYW5vbmljaXR5LnRzdiIsIGhlYWRlcj1UUlVFLCByb3cubmFtZXM9TlVMTCwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkgJT4lIAogIGZpbHRlcihDQU5PTklDQUwlaW4lYygiWUVTIikpICU+JSAKICBzZWxlY3QoRmVhdHVyZSxDQU5PTklDQUwpCmBgYAoKUmFuZG9tbHkgc2FtcGxlIExvRi1lbnJpY2hlZCBnZW5lcyB3aXRoIG1pbmltdW0gcmF0aW8gPiAzLCBjYWxjdWxhdGUgeDEwMCBzZXRzIG9mIE9ScyBmb3IgYWxsIHByZWRpY3Rpb24gc2NvcmUgY2F0ZWdvcmllcywgYW5kIHNhdmUgb3V0cHV0CmBgYHtyfQpPUnNfbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX3NhbXBsZTAuMDFfYm9vdHN0cmFwX0FnaWxlbnRTU3Y2X3JhdGlvMyA8LSB0aWJibGUoKQoKZm9yIChpIGluIGMoMToxMDApKXsKICBib290c3RyYXBfZ2VuZV90YWJsZSA8LSBzYW1wbGVfbihHbm9tQURfc3RhdHNfQWdpbGVudFNTdjZfTE9GX1ZFUF9FTlNUY2Fub25pY2FsX3Byb3RlaW5fY29kaW5nLCBISUdIZ2VuZXNfcmF0aW8zX24sIHJlcGxhY2U9RkFMU0UpCiAgYm9vdHN0cmFwX2dlbmVfbGlzdCA8LSBib290c3RyYXBfZ2VuZV90YWJsZVssMl0KICAKICBib290c3RyYXBfZ2VuZV90YWJsZV9NUEMgPC0gc2FtcGxlX24oTVBDX3RyYW5zY3JpcHRzLCBISUdIZ2VuZXNfcmF0aW8zX24sIHJlcGxhY2U9RkFMU0UpCiAgYm9vdHN0cmFwX2dlbmVfbGlzdF9NUEMgPC0gYm9vdHN0cmFwX2dlbmVfdGFibGVfTVBDWywxXQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVMgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRLCBJTVBBQ1Q9PSJNT0RFUkFURSIpICU+JSAKICAgIGZpbHRlcihzdHJfZGV0ZWN0KENvbnNlcXVlbmNlLCJtaXNzZW5zZV92YXJpYW50IikpICU+JSAKICAgIGZpbHRlcihGZWF0dXJlJWluJWMoYm9vdHN0cmFwX2dlbmVfbGlzdCkpCiAgCiAgCiAgIyBFeGNsdWRlIE5NIGNhbm9uaWNhbCAoUmVmU2VxKSB2YXJpYW50cyBhbmQgY29udmVydCBNUEMgc3RyaW5ncyB0byBpbnRlZ2Vycy9kb3VibGVzCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TLCBDQU5PTklDQUw9PSJZRVMiKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwkTVBDIDwtIGFzLm51bWVyaWMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsJE1QQykgJT4lIHJlcGxhY2VfbmEoMCkKICBybShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TKQogIAogIAogICMgRGl2aWRlIGRhdGEgaW50byBkaWZmZXJlbnQgcHJlZGljdGlvbiBzY29yZSBncm91cHMKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQzwyKSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMiA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoTVBDPj0yKSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChNUEM+PTIuNSkpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzMgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQz49MykpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ8MTUpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTE1KSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChDQUREX1BIUkVEPj0yMCkpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRD49MjUpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzAgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTMwKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU8MC40NSkpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNDUpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNSkpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNTUpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNiA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNikpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZT49MC43KSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjggPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKFJFVkVMX3Njb3JlPj0wLjgpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTE1KSYoUkVWRUxfc2NvcmU+PTAuNDUpKSAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTE1KSYoUkVWRUxfc2NvcmU+PTAuNDUpJihNUEM+PTIpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gYmluZF9yb3dzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgsLmlkPU5VTEwpICU+JSAKICAgIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKQogIAogIAogICMgU2FtcGxlIHZhcmlhbnQgY291bnRzIGFuZCBBRnMKICAKICB2YXJpYW50X2NvdW50c19BRnMgPC0gZnVuY3Rpb24odmNmKXsKICAgIHZhcmlhbnRzX2hldGVyb3p5Z291cyA8LSB2Y2YgJT4lIAogICAgICBzZWxlY3QoSEdWU2MsU2FtcGxlLkdUKSAlPiUgCiAgICAgIGdyb3VwX2J5KEhHVlNjLFNhbXBsZS5HVCkgJT4lIAogICAgICBzdW1tYXJpc2UobigpKSAlPiUgCiAgICAgIGZpbHRlcigoU2FtcGxlLkdUJWluJWMoIicwLzEiLCInMS8wIikpKSAlPiUgCiAgICAgIGRwbHlyOjpyZW5hbWUoYWxsZWxlcyA9ICJuKCkiKSAlPiUgCiAgICAgIGdyb3VwX2J5KEhHVlNjKSAlPiUgCiAgICAgIHN1bW1hcmlzZShzdW0oYWxsZWxlcykpCiAgICB2YXJpYW50c19ob21venlnb3VzIDwtIHZjZiAlPiUgCiAgICAgIHNlbGVjdChIR1ZTYyxTYW1wbGUuR1QpICU+JSAKICAgICAgZ3JvdXBfYnkoSEdWU2MsU2FtcGxlLkdUKSAlPiUgCiAgICAgIHN1bW1hcmlzZShuKCkpICU+JSAKICAgICAgZmlsdGVyKChTYW1wbGUuR1QhPSInMC8xIikmKFNhbXBsZS5HVCE9IicxLzAiKSkgJT4lIAogICAgICBtdXRhdGUoYWxsZWxlcyA9IGBuKClgKjIpICU+JSAKICAgICAgc2VsZWN0KC1gbigpYCkgJT4lIAogICAgICBncm91cF9ieShIR1ZTYykgJT4lIAogICAgICBzdW1tYXJpc2Uoc3VtKGFsbGVsZXMpKQogICAgdmFyaWFudHMgPC0gZnVsbF9qb2luKHZhcmlhbnRzX2hldGVyb3p5Z291cyx2YXJpYW50c19ob21venlnb3VzLGJ5PSJIR1ZTYyIsY29weT1GQUxTRSxzdWZmaXg9YygiLngiLCIueSIpKSAlPiUKICAgICAgbXV0YXRlX2FsbChmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgICBtdXRhdGUoVG90YWxfQWxsZWxlX0NvdW50PWBzdW0oYWxsZWxlcykueGArYHN1bShhbGxlbGVzKS55YCkgJT4lIAogICAgICBtdXRhdGUoU2FtcGxlX0FGPVRvdGFsX0FsbGVsZV9Db3VudC9Ub3RhbF9TYW1wbGVfQWxsZWxlcykKICAgIHZjZiA8LSBsZWZ0X2pvaW4odmNmLCB2YXJpYW50c1ssYygxLDQ6NSldLGJ5PSJIR1ZTYyIsY29weT1GQUxTRSkKICB9CiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yICA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMikKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMykKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTUpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjUpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDUpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNiA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNyA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOCA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44KQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgpCgogIAogICMgRXhjbHVkZSB2YXJpYW50cyB3aXRoIHNhbXBsZSBBRiA+MC4wMcybCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yLFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMixTYW1wbGVfQUYgPCAwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41LFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMyxTYW1wbGVfQUYgPCAwLjAxKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTUsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSxTYW1wbGVfQUYgPCAwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwLFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjUsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCxTYW1wbGVfQUYgPCAwLjAxKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDUsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSxTYW1wbGVfQUYgPCAwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNSxTYW1wbGVfQUYgPCAwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1LFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42LFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43LFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44LFNhbXBsZV9BRiA8IDAuMDEpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1LFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgsU2FtcGxlX0FGIDwgMC4wMSkKICAKICAKICAjIFNhbXBsZSBnZW5lIGNvdW50cyBhbmQgZnJlcXVlbmNpZXMKICAKICBnZW5lX2NvdW50c19BRiA8LSBmdW5jdGlvbih2Y2YpewogICAgZ2VuZXNfb25lVmFyQWxsZWxlIDwtIHZjZiAlPiUgc2VsZWN0KFNZTUJPTCxTYW1wbGUuR1QpICU+JSAKICAgICAgc2VsZWN0KFNZTUJPTCxTYW1wbGUuR1QpICU+JSAKICAgICAgZ3JvdXBfYnkoU1lNQk9MLFNhbXBsZS5HVCkgJT4lIAogICAgICBzdW1tYXJpc2UobigpKSAlPiUgCiAgICAgIGZpbHRlcigoU2FtcGxlLkdUJWluJWMoIicwLzEiLCInMS8wIikpKSAlPiUgCiAgICAgIGRwbHlyOjpyZW5hbWUoZ2VuZV9WYXIgPSAibigpIikgJT4lIAogICAgICBncm91cF9ieShTWU1CT0wpICU+JSAKICAgICAgc3VtbWFyaXNlKHN1bShnZW5lX1ZhcikpCiAgICBnZW5lc190d29WYXJBbGxlbGUgPC0gdmNmICU+JSBzZWxlY3QoU1lNQk9MLFNhbXBsZS5HVCkgJT4lIAogICAgICBzZWxlY3QoU1lNQk9MLFNhbXBsZS5HVCkgJT4lIAogICAgICBncm91cF9ieShTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgICAgIHN1bW1hcmlzZShuKCkpICU+JSAKICAgICAgZmlsdGVyKChTYW1wbGUuR1QhPSInMC8xIikmKFNhbXBsZS5HVCE9IicxLzAiKSkgJT4lIAogICAgICBtdXRhdGUoZ2VuZV9WYXIgPSBgbigpYCoyKSAlPiUgCiAgICAgIHNlbGVjdCgtYG4oKWApICU+JSAKICAgICAgZ3JvdXBfYnkoU1lNQk9MKSAlPiUgCiAgICAgIHN1bW1hcmlzZShzdW0oZ2VuZV9WYXIpKQogICAgZ2VuZXMgPC0gZnVsbF9qb2luKGdlbmVzX29uZVZhckFsbGVsZSxnZW5lc190d29WYXJBbGxlbGUsYnk9IlNZTUJPTCIsY29weT1GQUxTRSxzdWZmaXg9YygiLngiLCIueSIpKSAlPiUgCiAgICAgIG11dGF0ZV9hbGwoZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgICAgbXV0YXRlKFRvdGFsX0dlbmVfQ291bnQ9YHN1bShnZW5lX1ZhcikueGArYHN1bShnZW5lX1ZhcikueWApICU+JSAKICAgICAgbXV0YXRlKFNhbXBsZV9HZW5lX0ZyZXE9VG90YWxfR2VuZV9Db3VudC9Ub3RhbF9TYW1wbGVfQWxsZWxlcykKICAgIHZjZiA8LSBsZWZ0X2pvaW4odmNmLCBnZW5lc1ssYygxLDQ6NSldLGJ5PSJTWU1CT0wiLGNvcHk9RkFMU0UpCiAgfQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDEpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxKQoKICAKICAjIEFkZCBHbm9tQUQgZ2VuZS1sZXZlbCBkYXRhCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxNDoxOSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMjA6MjUpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMjY6MzEpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMzI6MzcpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywzODo0MyldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDQ0OjQ5KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDUwOjU1KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDU2OjYxKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDYyOjY3KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNjg6NzMpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNzQ6NzkpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw4MDo4NSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDg2OjkxKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsOTI6OTcpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMTA0OjEwOSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxMTY6MTIxKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMTM0OjEzOSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxMjI6MTI3KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDEyODoxMzMpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgCiAgIyBDcmVhdGUgZGF0YSBmcmFtZXMgd2l0aCBBZ2lsZW50IFN1cmVTZWxlY3Qgd2hvbGUgZXhvbWUgZ2VuZXMgKEVOU1QgYW5kIHByb3RlaW4tY29kaW5nKSBhbmQgTVBDLW9ubHkgdHJhbnNjcmlwdHMKICAKICBhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX29ubHkgPC0gdGliYmxlKCJTWU1CT0wiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckU1lNQk9MLCJHZW5lIj1Hbm9tQURfc3RhdHNfQWdpbGVudFNTdjZfTE9GX1ZFUF9FTlNUY2Fub25pY2FsX3Byb3RlaW5fY29kaW5nJEdlbmUsIkZlYXR1cmUiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckRmVhdHVyZSwgIkFnaWxlbnRTU3Y2Ij0iWUVTIikgJT4lIAogICAgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSAKICAgIGFycmFuZ2UoU1lNQk9MKSAlPiUgCiAgICBmaWx0ZXIoRmVhdHVyZSVpbiUoYm9vdHN0cmFwX2dlbmVfbGlzdCkpCiAgCiAgYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19NUENvbmx5PC0gdGliYmxlKCJTWU1CT0wiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckU1lNQk9MLCJHZW5lIj1Hbm9tQURfc3RhdHNfQWdpbGVudFNTdjZfTE9GX1ZFUF9FTlNUY2Fub25pY2FsX3Byb3RlaW5fY29kaW5nJEdlbmUsIkZlYXR1cmUiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckRmVhdHVyZSwgIkFnaWxlbnRTU3Y2Ij0iWUVTIikgJT4lIAogICAgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSAKICAgIGxlZnRfam9pbihNUENfdHJhbnNjcmlwdHMsYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpICU+JSAKICAgIGZpbHRlcihDQU5PTklDQUwlaW4lYygiWUVTIikpICU+JSAKICAgIGZpbHRlcihGZWF0dXJlJWluJShib290c3RyYXBfZ2VuZV9saXN0X01QQykpCiAgCiAgYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5MiA8LSBzZWxlY3QoYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5LEZlYXR1cmUsQWdpbGVudFNTdjYpCiAgYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5Ml9NUEMgPC0gc2VsZWN0KGFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2RpbmdfTVBDb25seSxGZWF0dXJlLEFnaWxlbnRTU3Y2KQogIAogIAogICMgU3VtIEFDcyBhY3Jvc3Mgc2FtcGxlL0dub21BRCBmb3IgZWFjaCBwcmVkaWN0aW9uIHNjb3JlIGNsYXNzIChNUEMgZmlndXJlcyBpbmNsdWRlIHRyYW5zY3JpcHRzIHdpdGggTVBDIHNjb3JlcyBvbmx5KQogIAogIEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nIDwtIGZpbHRlcihHbm9tQURfc3RhdHNfTVMsQ0FOT05JQ0FMJWluJWMoIllFUyIpKSAlPiUgCiAgICBkcGx5cjo6cmVuYW1lKCJHZW5lIj0iRU5TRyIpICU+JSAKICAgIGxlZnRfam9pbihlbnNlbWJsX2Jpb3R5cGVzLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgICBmaWx0ZXIoQklPVFlQRSVpbiVjKCJwcm90ZWluX2NvZGluZyIpKSAlPiUgCiAgICBsZWZ0X2pvaW4oYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5MixieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogICAgZmlsdGVyKEFnaWxlbnRTU3Y2JWluJWMoIllFUyIpKQogIAogIEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQyA8LSBmaWx0ZXIoR25vbUFEX3N0YXRzX01TLENBTk9OSUNBTCVpbiVjKCJZRVMiKSkgJT4lIAogICAgZHBseXI6OnJlbmFtZSgiR2VuZSI9IkVOU0ciKSAlPiUgCiAgICBsZWZ0X2pvaW4oZW5zZW1ibF9iaW90eXBlcyxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogICAgZmlsdGVyKEJJT1RZUEUlaW4lYygicHJvdGVpbl9jb2RpbmciKSkgJT4lIAogICAgbGVmdF9qb2luKGFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2Rpbmdfb25seTJfTVBDLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgICBmaWx0ZXIoQWdpbGVudFNTdjYlaW4lYygiWUVTIikpCiAgCiAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDZdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWyw2XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxMF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDLjJfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTRdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX01QQy4yX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxN10pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMl90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywyMF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMl9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMjNdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX01QQzIuNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywyNl0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMi41X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywyOV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDM190b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywzMl0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDM19ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMzVdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX0NBREQuMTVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywzOF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERC4xNV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw0MV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNDRdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX0NBREQxNV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw0N10pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDIwX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNTBdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX0NBREQyMF9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw1M10pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDI1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNTZdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX0NBREQyNV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw1OV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDMwX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNjJdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX0NBREQzMF9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw2NV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDY4XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDcxXSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw3NF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDc3XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDgwXSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuNV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw4M10pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssODZdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw4OV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw5Ml0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssOTVdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC43X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTA0XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuN19ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMDddKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC44X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTE2XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuOF9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMTldKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX0NBREQxNVJFVkVMMC40NV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDEzNF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDEzN10pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxMjJdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX01QQzJDQUREMTVSRVZFTDAuNDVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDEyNV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDEyOF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxMzFdKSAlPiUgYXMubnVtZXJpYygpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsIDwtIFRvdGFsX1NhbXBsZV9BbGxlbGVzKihucm93KGFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2Rpbmdfb25seSkpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbCA8LSBUb3RhbF9TYW1wbGVfQWxsZWxlcyoobnJvdyhhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX01QQ29ubHkpKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICAKICAKICAjIENhbGN1bGF0ZSBvZGRzIHJhdGlvcyB1c2luZyBtYXRyaWNlcwogIAogIE1QQy4yIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQy4yX3RvdGFsLAogICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMuMl90b3RhbCksCiAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIE1QQy4yX05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQy4yX05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMuMl9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgTVBDMiA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl90b3RhbCwKICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3RvdGFsLAogICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMl90b3RhbCksCiAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgTVBDMl9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzJfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMl9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBNUEMyLjUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzIuNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBNUEMyLjVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzIuNV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ19ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzIuNV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIE1QQzMgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfdG90YWwsCiAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM190b3RhbCwKICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMzX3RvdGFsLAogICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzNfdG90YWwpLAogICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIE1QQzNfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMzX05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ19ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzNfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERC4xNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQURELjE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERC4xNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERC4xNV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQURELjE1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERC4xNV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQUREMTUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQxNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQUREMTVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMTVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQxNV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIENBREQyMCA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQyMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDIwX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIENBREQyMF9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQyMF9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDIwX05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERDI1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMjVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERDI1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDI1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMjVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQUREMzAgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMzBfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQzMF90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQUREMzBfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMzBfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQzMF9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMLjAuNDUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMLjAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMLjAuNDVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMLjAuNDVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwwLjQ1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwwLjQ1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBSRVZFTDAuNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBSRVZFTDAuNV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMMC41NSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMMC41NV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X05GRV90b3RhbCksbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwwLjYgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwwLjZfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBSRVZFTDAuNyA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN190b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBSRVZFTDAuN19ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMMC44IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuOF90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMMC44X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuOF9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuOF9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERDE1UkVWRUwwLjQ1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBNUEMyQ0FERDE1UkVWRUwwLjQ1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBNUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCksbnJvdz0yLGJ5cm93PVRSVUUpCiAgTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICAKICBPUl9NUEMuMiA8LSBvZGRzcmF0aW8oTVBDLjIscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX01QQy4yX05GRSA8LSBvZGRzcmF0aW8oTVBDLjJfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMyIDwtIG9kZHNyYXRpbyhNUEMyLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMyX05GRSA8LSBvZGRzcmF0aW8oTVBDMl9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX01QQzIuNSA8LSBvZGRzcmF0aW8oTVBDMi41LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMyLjVfTkZFIDwtIG9kZHNyYXRpbyhNUEMyLjVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMzIDwtIG9kZHNyYXRpbyhNUEMzLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMzX05GRSA8LSBvZGRzcmF0aW8oTVBDM19ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQuMTUgPC0gb2Rkc3JhdGlvKENBREQuMTUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQuMTVfTkZFIDwtIG9kZHNyYXRpbyhDQURELjE1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERDE1IDwtIG9kZHNyYXRpbyhDQUREMTUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQxNV9ORkUgPC0gb2Rkc3JhdGlvKENBREQxNV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQyMCA8LSBvZGRzcmF0aW8oQ0FERDIwLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9DQUREMjBfTkZFIDwtIG9kZHNyYXRpbyhDQUREMjBfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9DQUREMjUgPC0gb2Rkc3JhdGlvKENBREQyNSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERDI1X05GRSA8LSBvZGRzcmF0aW8oQ0FERDI1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERDMwIDwtIG9kZHNyYXRpbyhDQUREMzAscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQzMF9ORkUgPC0gb2Rkc3JhdGlvKENBREQzMF9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMLjAuNDUgPC0gb2Rkc3JhdGlvKFJFVkVMLjAuNDUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMLjAuNDVfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTC4wLjQ1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfUkVWRUwwLjQ1IDwtIG9kZHNyYXRpbyhSRVZFTDAuNDUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC40NV9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMMC40NV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC41IDwtIG9kZHNyYXRpbyhSRVZFTDAuNSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfUkVWRUwwLjVfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTDAuNV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC41NSA8LSBvZGRzcmF0aW8oUkVWRUwwLjU1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9SRVZFTDAuNTVfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTDAuNTVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9SRVZFTDAuNiA8LSBvZGRzcmF0aW8oUkVWRUwwLjYscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC42X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwwLjZfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9SRVZFTDAuNyA8LSBvZGRzcmF0aW8oUkVWRUwwLjcscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC43X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwwLjdfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9SRVZFTDAuOCA8LSBvZGRzcmF0aW8oUkVWRUwwLjgscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC44X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwwLjhfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9DQUREMTVSRVZFTDAuNDUgPC0gb2Rkc3JhdGlvKENBREQxNVJFVkVMMC40NSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBvZGRzcmF0aW8oQ0FERDE1UkVWRUwwLjQ1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfTVBDMkNBREQxNVJFVkVMMC40NSA8LSBvZGRzcmF0aW8oTVBDMkNBREQxNVJFVkVMMC40NSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUgPC0gb2Rkc3JhdGlvKE1QQzJDQUREMTVSRVZFTDAuNDVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gb2Rkc3JhdGlvKE1QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSA8LSBvZGRzcmF0aW8oTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgCiAgCiAgIyBDb21iaW5lIGFsbCByZXN1bHRzIGludG8gb25lIHNwcmVhZHNoZWV0LCBhbmQgc2F2ZQogIAogIGEgPSBjKE9SX01QQy4yJGRhdGEubmFtZSxPUl9NUEMuMl9ORkUkZGF0YS5uYW1lLE9SX01QQzIkZGF0YS5uYW1lLE9SX01QQzJfTkZFJGRhdGEubmFtZSxPUl9NUEMyLjUkZGF0YS5uYW1lLE9SX01QQzIuNV9ORkUkZGF0YS5uYW1lLE9SX01QQzMkZGF0YS5uYW1lLE9SX01QQzNfTkZFJGRhdGEubmFtZSxPUl9DQURELjE1JGRhdGEubmFtZSxPUl9DQURELjE1X05GRSRkYXRhLm5hbWUsT1JfQ0FERDE1JGRhdGEubmFtZSxPUl9DQUREMTVfTkZFJGRhdGEubmFtZSxPUl9DQUREMjAkZGF0YS5uYW1lLE9SX0NBREQyMF9ORkUkZGF0YS5uYW1lLE9SX0NBREQyNSRkYXRhLm5hbWUsT1JfQ0FERDI1X05GRSRkYXRhLm5hbWUsT1JfQ0FERDMwJGRhdGEubmFtZSxPUl9DQUREMzBfTkZFJGRhdGEubmFtZSxPUl9SRVZFTC4wLjQ1JGRhdGEubmFtZSxPUl9SRVZFTC4wLjQ1X05GRSRkYXRhLm5hbWUsT1JfUkVWRUwwLjQ1JGRhdGEubmFtZSxPUl9SRVZFTDAuNDVfTkZFJGRhdGEubmFtZSxPUl9SRVZFTDAuNSRkYXRhLm5hbWUsT1JfUkVWRUwwLjVfTkZFJGRhdGEubmFtZSxPUl9SRVZFTDAuNTUkZGF0YS5uYW1lLE9SX1JFVkVMMC41NV9ORkUkZGF0YS5uYW1lLE9SX1JFVkVMMC42JGRhdGEubmFtZSxPUl9SRVZFTDAuNl9ORkUkZGF0YS5uYW1lLE9SX1JFVkVMMC43JGRhdGEubmFtZSxPUl9SRVZFTDAuN19ORkUkZGF0YS5uYW1lLE9SX1JFVkVMMC44JGRhdGEubmFtZSxPUl9SRVZFTDAuOF9ORkUkZGF0YS5uYW1lLE9SX0NBREQxNVJFVkVMMC40NSRkYXRhLm5hbWUsT1JfQ0FERDE1UkVWRUwwLjQ1X05GRSRkYXRhLm5hbWUsT1JfTVBDMkNBREQxNVJFVkVMMC40NSRkYXRhLm5hbWUsT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUkZGF0YS5uYW1lLE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCRkYXRhLm5hbWUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSRkYXRhLm5hbWUpCiAgYiA9IGMoT1JfTVBDLjIkZXN0aW1hdGUsT1JfTVBDLjJfTkZFJGVzdGltYXRlLE9SX01QQzIkZXN0aW1hdGUsT1JfTVBDMl9ORkUkZXN0aW1hdGUsT1JfTVBDMi41JGVzdGltYXRlLE9SX01QQzIuNV9ORkUkZXN0aW1hdGUsT1JfTVBDMyRlc3RpbWF0ZSxPUl9NUEMzX05GRSRlc3RpbWF0ZSxPUl9DQURELjE1JGVzdGltYXRlLE9SX0NBREQuMTVfTkZFJGVzdGltYXRlLE9SX0NBREQxNSRlc3RpbWF0ZSxPUl9DQUREMTVfTkZFJGVzdGltYXRlLE9SX0NBREQyMCRlc3RpbWF0ZSxPUl9DQUREMjBfTkZFJGVzdGltYXRlLE9SX0NBREQyNSRlc3RpbWF0ZSxPUl9DQUREMjVfTkZFJGVzdGltYXRlLE9SX0NBREQzMCRlc3RpbWF0ZSxPUl9DQUREMzBfTkZFJGVzdGltYXRlLE9SX1JFVkVMLjAuNDUkZXN0aW1hdGUsT1JfUkVWRUwuMC40NV9ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjQ1JGVzdGltYXRlLE9SX1JFVkVMMC40NV9ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjUkZXN0aW1hdGUsT1JfUkVWRUwwLjVfTkZFJGVzdGltYXRlLE9SX1JFVkVMMC41NSRlc3RpbWF0ZSxPUl9SRVZFTDAuNTVfTkZFJGVzdGltYXRlLE9SX1JFVkVMMC42JGVzdGltYXRlLE9SX1JFVkVMMC42X05GRSRlc3RpbWF0ZSxPUl9SRVZFTDAuNyRlc3RpbWF0ZSxPUl9SRVZFTDAuN19ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjgkZXN0aW1hdGUsT1JfUkVWRUwwLjhfTkZFJGVzdGltYXRlLE9SX0NBREQxNVJFVkVMMC40NSRlc3RpbWF0ZSxPUl9DQUREMTVSRVZFTDAuNDVfTkZFJGVzdGltYXRlLE9SX01QQzJDQUREMTVSRVZFTDAuNDUkZXN0aW1hdGUsT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUkZXN0aW1hdGUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44JGVzdGltYXRlLE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUkZXN0aW1hdGUpCiAgYyA9IGMoT1JfTVBDLjIkY29uZi5pbnQsT1JfTVBDLjJfTkZFJGNvbmYuaW50LE9SX01QQzIkY29uZi5pbnQsT1JfTVBDMl9ORkUkY29uZi5pbnQsT1JfTVBDMi41JGNvbmYuaW50LE9SX01QQzIuNV9ORkUkY29uZi5pbnQsT1JfTVBDMyRjb25mLmludCxPUl9NUEMzX05GRSRjb25mLmludCxPUl9DQURELjE1JGNvbmYuaW50LE9SX0NBREQuMTVfTkZFJGNvbmYuaW50LE9SX0NBREQxNSRjb25mLmludCxPUl9DQUREMTVfTkZFJGNvbmYuaW50LE9SX0NBREQyMCRjb25mLmludCxPUl9DQUREMjBfTkZFJGNvbmYuaW50LE9SX0NBREQyNSRjb25mLmludCxPUl9DQUREMjVfTkZFJGNvbmYuaW50LE9SX0NBREQzMCRjb25mLmludCxPUl9DQUREMzBfTkZFJGNvbmYuaW50LE9SX1JFVkVMLjAuNDUkY29uZi5pbnQsT1JfUkVWRUwuMC40NV9ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjQ1JGNvbmYuaW50LE9SX1JFVkVMMC40NV9ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjUkY29uZi5pbnQsT1JfUkVWRUwwLjVfTkZFJGNvbmYuaW50LE9SX1JFVkVMMC41NSRjb25mLmludCxPUl9SRVZFTDAuNTVfTkZFJGNvbmYuaW50LE9SX1JFVkVMMC42JGNvbmYuaW50LE9SX1JFVkVMMC42X05GRSRjb25mLmludCxPUl9SRVZFTDAuNyRjb25mLmludCxPUl9SRVZFTDAuN19ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjgkY29uZi5pbnQsT1JfUkVWRUwwLjhfTkZFJGNvbmYuaW50LE9SX0NBREQxNVJFVkVMMC40NSRjb25mLmludCxPUl9DQUREMTVSRVZFTDAuNDVfTkZFJGNvbmYuaW50LE9SX01QQzJDQUREMTVSRVZFTDAuNDUkY29uZi5pbnQsT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUkY29uZi5pbnQsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44JGNvbmYuaW50LE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUkY29uZi5pbnQpCiAgZCA9IGMoT1JfTVBDLjIkcC52YWx1ZSxPUl9NUEMuMl9ORkUkcC52YWx1ZSxPUl9NUEMyJHAudmFsdWUsT1JfTVBDMl9ORkUkcC52YWx1ZSxPUl9NUEMyLjUkcC52YWx1ZSxPUl9NUEMyLjVfTkZFJHAudmFsdWUsT1JfTVBDMyRwLnZhbHVlLE9SX01QQzNfTkZFJHAudmFsdWUsT1JfQ0FERC4xNSRwLnZhbHVlLE9SX0NBREQuMTVfTkZFJHAudmFsdWUsT1JfQ0FERDE1JHAudmFsdWUsT1JfQ0FERDE1X05GRSRwLnZhbHVlLE9SX0NBREQyMCRwLnZhbHVlLE9SX0NBREQyMF9ORkUkcC52YWx1ZSxPUl9DQUREMjUkcC52YWx1ZSxPUl9DQUREMjVfTkZFJHAudmFsdWUsT1JfQ0FERDMwJHAudmFsdWUsT1JfQ0FERDMwX05GRSRwLnZhbHVlLE9SX1JFVkVMLjAuNDUkcC52YWx1ZSxPUl9SRVZFTC4wLjQ1X05GRSRwLnZhbHVlLE9SX1JFVkVMMC40NSRwLnZhbHVlLE9SX1JFVkVMMC40NV9ORkUkcC52YWx1ZSxPUl9SRVZFTDAuNSRwLnZhbHVlLE9SX1JFVkVMMC41X05GRSRwLnZhbHVlLE9SX1JFVkVMMC41NSRwLnZhbHVlLE9SX1JFVkVMMC41NV9ORkUkcC52YWx1ZSxPUl9SRVZFTDAuNiRwLnZhbHVlLE9SX1JFVkVMMC42X05GRSRwLnZhbHVlLE9SX1JFVkVMMC43JHAudmFsdWUsT1JfUkVWRUwwLjdfTkZFJHAudmFsdWUsT1JfUkVWRUwwLjgkcC52YWx1ZSxPUl9SRVZFTDAuOF9ORkUkcC52YWx1ZSxPUl9DQUREMTVSRVZFTDAuNDUkcC52YWx1ZSxPUl9DQUREMTVSRVZFTDAuNDVfTkZFJHAudmFsdWUsT1JfTVBDMkNBREQxNVJFVkVMMC40NSRwLnZhbHVlLE9SX01QQzJDQUREMTVSRVZFTDAuNDVfTkZFJHAudmFsdWUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44JHAudmFsdWUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSRwLnZhbHVlKQogIAogIE9Sc19tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfc2FtcGxlMC4wMV9ib290c3RyYXBfQWdpbGVudFNTdjZfcmF0aW8zICA8LSBiaW5kX3Jvd3MoT1JzX21hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9zYW1wbGUwLjAxX2Jvb3RzdHJhcF9BZ2lsZW50U1N2Nl9yYXRpbzMgLHRpYmJsZSgKICAgICJGaWx0ZXJpbmciPWEsCiAgICAiT2Rkc19yYXRpbyI9YiwKICAgICI5NSVfQ0kiPWMsCiAgICAicF92YWx1ZSI9ZAogICkKICApCn0Kd3JpdGVfdHN2KE9Sc19tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfc2FtcGxlMC4wMV9ib290c3RyYXBfQWdpbGVudFNTdjZfcmF0aW8zLCBwYXRoPSJPUnNfbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX3NhbXBsZTAuMDFfYm9vdHN0cmFwMTAwMF9BZ2lsZW50U1N2Nl9yYXRpbzMudHN2IikKYGBgCgpSYW5kb21seSBzYW1wbGUgTG9GLWVucmljaGVkIGdlbmVzIHdpdGggbWluaW11bSByYXRpbyA+IDYsIGNhbGN1bGF0ZSB4MTAwIHNldHMgb2YgT1JzIGZvciBhbGwgcHJlZGljdGlvbiBzY29yZSBjYXRlZ29yaWVzLCBhbmQgc2F2ZSBvdXRwdXQKYGBge3J9Ck9Sc19tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfc2FtcGxlMC4wMV9ib290c3RyYXBfQWdpbGVudFNTdjZfcmF0aW82IDwtIHRpYmJsZSgpCgpmb3IgKGkgaW4gYygxOjEwMCkpewogIGJvb3RzdHJhcF9nZW5lX3RhYmxlIDwtIHNhbXBsZV9uKEdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmcsIEhJR0hnZW5lc19yYXRpbzZfbiwgcmVwbGFjZT1GQUxTRSkKICBib290c3RyYXBfZ2VuZV9saXN0IDwtIGJvb3RzdHJhcF9nZW5lX3RhYmxlWywyXQogIAogIGJvb3RzdHJhcF9nZW5lX3RhYmxlX01QQyA8LSBzYW1wbGVfbihNUENfdHJhbnNjcmlwdHMsIEhJR0hnZW5lc19yYXRpbzZfbiwgcmVwbGFjZT1GQUxTRSkKICBib290c3RyYXBfZ2VuZV9saXN0X01QQyA8LSBib290c3RyYXBfZ2VuZV90YWJsZV9NUENbLDFdCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NUyA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFEsIElNUEFDVD09Ik1PREVSQVRFIikgJT4lIAogICAgZmlsdGVyKHN0cl9kZXRlY3QoQ29uc2VxdWVuY2UsIm1pc3NlbnNlX3ZhcmlhbnQiKSkgJT4lIAogICAgZmlsdGVyKEZlYXR1cmUlaW4lYyhib290c3RyYXBfZ2VuZV9saXN0KSkKICAKICAKICAjIEV4Y2x1ZGUgTk0gY2Fub25pY2FsIChSZWZTZXEpIHZhcmlhbnRzIGFuZCBjb252ZXJ0IE1QQyBzdHJpbmdzIHRvIGludGVnZXJzL2RvdWJsZXMKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVMsIENBTk9OSUNBTD09IllFUyIpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCRNUEMgPC0gYXMubnVtZXJpYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwkTVBDKSAlPiUgcmVwbGFjZV9uYSgwKQogIHJtKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVMpCiAgCiAgCiAgIyBEaXZpZGUgZGF0YSBpbnRvIGRpZmZlcmVudCBwcmVkaWN0aW9uIHNjb3JlIGdyb3VwcwogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMiA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoTVBDPDIpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChNUEM+PTIpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQz49Mi41KSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMyA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoTVBDPj0zKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRDwxNSkpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRD49MTUpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjAgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTIwKSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChDQUREX1BIUkVEPj0yNSkpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRD49MzApKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZTwwLjQ1KSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZT49MC40NSkpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZT49MC41KSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZT49MC41NSkpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZT49MC42KSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjcgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKFJFVkVMX3Njb3JlPj0wLjcpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOCA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuOCkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRD49MTUpJihSRVZFTF9zY29yZT49MC40NSkpICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRD49MTUpJihSRVZFTF9zY29yZT49MC40NSkmKE1QQz49MikpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCA8LSBiaW5kX3Jvd3MobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOCwuaWQ9TlVMTCkgJT4lIAogICAgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpCiAgCiAgCiAgIyBTYW1wbGUgdmFyaWFudCBjb3VudHMgYW5kIEFGcwogIAogIHZhcmlhbnRfY291bnRzX0FGcyA8LSBmdW5jdGlvbih2Y2YpewogICAgdmFyaWFudHNfaGV0ZXJvenlnb3VzIDwtIHZjZiAlPiUgCiAgICAgIHNlbGVjdChIR1ZTYyxTYW1wbGUuR1QpICU+JSAKICAgICAgZ3JvdXBfYnkoSEdWU2MsU2FtcGxlLkdUKSAlPiUgCiAgICAgIHN1bW1hcmlzZShuKCkpICU+JSAKICAgICAgZmlsdGVyKChTYW1wbGUuR1QlaW4lYygiJzAvMSIsIicxLzAiKSkpICU+JSAKICAgICAgZHBseXI6OnJlbmFtZShhbGxlbGVzID0gIm4oKSIpICU+JSAKICAgICAgZ3JvdXBfYnkoSEdWU2MpICU+JSAKICAgICAgc3VtbWFyaXNlKHN1bShhbGxlbGVzKSkKICAgIHZhcmlhbnRzX2hvbW96eWdvdXMgPC0gdmNmICU+JSAKICAgICAgc2VsZWN0KEhHVlNjLFNhbXBsZS5HVCkgJT4lIAogICAgICBncm91cF9ieShIR1ZTYyxTYW1wbGUuR1QpICU+JSAKICAgICAgc3VtbWFyaXNlKG4oKSkgJT4lIAogICAgICBmaWx0ZXIoKFNhbXBsZS5HVCE9IicwLzEiKSYoU2FtcGxlLkdUIT0iJzEvMCIpKSAlPiUgCiAgICAgIG11dGF0ZShhbGxlbGVzID0gYG4oKWAqMikgJT4lIAogICAgICBzZWxlY3QoLWBuKClgKSAlPiUgCiAgICAgIGdyb3VwX2J5KEhHVlNjKSAlPiUgCiAgICAgIHN1bW1hcmlzZShzdW0oYWxsZWxlcykpCiAgICB2YXJpYW50cyA8LSBmdWxsX2pvaW4odmFyaWFudHNfaGV0ZXJvenlnb3VzLHZhcmlhbnRzX2hvbW96eWdvdXMsYnk9IkhHVlNjIixjb3B5PUZBTFNFLHN1ZmZpeD1jKCIueCIsIi55IikpICU+JQogICAgICBtdXRhdGVfYWxsKGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICAgIG11dGF0ZShUb3RhbF9BbGxlbGVfQ291bnQ9YHN1bShhbGxlbGVzKS54YCtgc3VtKGFsbGVsZXMpLnlgKSAlPiUgCiAgICAgIG11dGF0ZShTYW1wbGVfQUY9VG90YWxfQWxsZWxlX0NvdW50L1RvdGFsX1NhbXBsZV9BbGxlbGVzKQogICAgdmNmIDwtIGxlZnRfam9pbih2Y2YsIHZhcmlhbnRzWyxjKDEsNDo1KV0sYnk9IkhHVlNjIixjb3B5PUZBTFNFKQogIH0KICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIgIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzMgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjAgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjApCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjYpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjcpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDUpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCkKCiAgCiAgIyBFeGNsdWRlIHZhcmlhbnRzIHdpdGggc2FtcGxlIEFGID4wLjAxzJsKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzLFNhbXBsZV9BRiA8IDAuMDEpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSxTYW1wbGVfQUYgPCAwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1LFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjAsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSxTYW1wbGVfQUYgPCAwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwLFNhbXBsZV9BRiA8IDAuMDEpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NSxTYW1wbGVfQUYgPCAwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1LFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41LFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjYsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjcsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgsU2FtcGxlX0FGIDwgMC4wMSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSxTYW1wbGVfQUYgPCAwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDUsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCxTYW1wbGVfQUYgPCAwLjAxKQogIAogIAogICMgU2FtcGxlIGdlbmUgY291bnRzIGFuZCBmcmVxdWVuY2llcwogIAogIGdlbmVfY291bnRzX0FGIDwtIGZ1bmN0aW9uKHZjZil7CiAgICBnZW5lc19vbmVWYXJBbGxlbGUgPC0gdmNmICU+JSBzZWxlY3QoU1lNQk9MLFNhbXBsZS5HVCkgJT4lIAogICAgICBzZWxlY3QoU1lNQk9MLFNhbXBsZS5HVCkgJT4lIAogICAgICBncm91cF9ieShTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgICAgIHN1bW1hcmlzZShuKCkpICU+JSAKICAgICAgZmlsdGVyKChTYW1wbGUuR1QlaW4lYygiJzAvMSIsIicxLzAiKSkpICU+JSAKICAgICAgZHBseXI6OnJlbmFtZShnZW5lX1ZhciA9ICJuKCkiKSAlPiUgCiAgICAgIGdyb3VwX2J5KFNZTUJPTCkgJT4lIAogICAgICBzdW1tYXJpc2Uoc3VtKGdlbmVfVmFyKSkKICAgIGdlbmVzX3R3b1ZhckFsbGVsZSA8LSB2Y2YgJT4lIHNlbGVjdChTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgICAgIHNlbGVjdChTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgICAgIGdyb3VwX2J5KFNZTUJPTCxTYW1wbGUuR1QpICU+JSAKICAgICAgc3VtbWFyaXNlKG4oKSkgJT4lIAogICAgICBmaWx0ZXIoKFNhbXBsZS5HVCE9IicwLzEiKSYoU2FtcGxlLkdUIT0iJzEvMCIpKSAlPiUgCiAgICAgIG11dGF0ZShnZW5lX1ZhciA9IGBuKClgKjIpICU+JSAKICAgICAgc2VsZWN0KC1gbigpYCkgJT4lIAogICAgICBncm91cF9ieShTWU1CT0wpICU+JSAKICAgICAgc3VtbWFyaXNlKHN1bShnZW5lX1ZhcikpCiAgICBnZW5lcyA8LSBmdWxsX2pvaW4oZ2VuZXNfb25lVmFyQWxsZWxlLGdlbmVzX3R3b1ZhckFsbGVsZSxieT0iU1lNQk9MIixjb3B5PUZBTFNFLHN1ZmZpeD1jKCIueCIsIi55IikpICU+JSAKICAgICAgbXV0YXRlX2FsbChmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgICBtdXRhdGUoVG90YWxfR2VuZV9Db3VudD1gc3VtKGdlbmVfVmFyKS54YCtgc3VtKGdlbmVfVmFyKS55YCkgJT4lIAogICAgICBtdXRhdGUoU2FtcGxlX0dlbmVfRnJlcT1Ub3RhbF9HZW5lX0NvdW50L1RvdGFsX1NhbXBsZV9BbGxlbGVzKQogICAgdmNmIDwtIGxlZnRfam9pbih2Y2YsIGdlbmVzWyxjKDEsNDo1KV0sYnk9IlNZTUJPTCIsY29weT1GQUxTRSkKICB9CiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDEpCgogIAogICMgQWRkIEdub21BRCBnZW5lLWxldmVsIGRhdGEKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDE0OjE5KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywyMDoyNSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywyNjozMSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywzMjozNyldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDM4OjQzKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNDQ6NDkpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNTA6NTUpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNTY6NjEpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNjI6NjcpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw2ODo3MyldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw3NDo3OSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDgwOjg1KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsODY6OTEpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw5Mjo5NyldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxMDQ6MTA5KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDExNjoxMjEpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxMzQ6MTM5KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDEyMjoxMjcpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMTI4OjEzMyldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCiAgCiAgIyBDcmVhdGUgZGF0YSBmcmFtZXMgd2l0aCBBZ2lsZW50IFN1cmVTZWxlY3Qgd2hvbGUgZXhvbWUgZ2VuZXMgKEVOU1QgYW5kIHByb3RlaW4tY29kaW5nKSBhbmQgTVBDLW9ubHkgdHJhbnNjcmlwdHMKICAKICBhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX29ubHkgPC0gdGliYmxlKCJTWU1CT0wiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckU1lNQk9MLCJHZW5lIj1Hbm9tQURfc3RhdHNfQWdpbGVudFNTdjZfTE9GX1ZFUF9FTlNUY2Fub25pY2FsX3Byb3RlaW5fY29kaW5nJEdlbmUsIkZlYXR1cmUiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckRmVhdHVyZSwgIkFnaWxlbnRTU3Y2Ij0iWUVTIikgJT4lIAogICAgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSAKICAgIGFycmFuZ2UoU1lNQk9MKSAlPiUgCiAgICBmaWx0ZXIoRmVhdHVyZSVpbiUoYm9vdHN0cmFwX2dlbmVfbGlzdCkpCiAgCiAgYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19NUENvbmx5PC0gdGliYmxlKCJTWU1CT0wiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckU1lNQk9MLCJHZW5lIj1Hbm9tQURfc3RhdHNfQWdpbGVudFNTdjZfTE9GX1ZFUF9FTlNUY2Fub25pY2FsX3Byb3RlaW5fY29kaW5nJEdlbmUsIkZlYXR1cmUiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckRmVhdHVyZSwgIkFnaWxlbnRTU3Y2Ij0iWUVTIikgJT4lIAogICAgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSAKICAgIGxlZnRfam9pbihNUENfdHJhbnNjcmlwdHMsYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpICU+JSAKICAgIGZpbHRlcihDQU5PTklDQUwlaW4lYygiWUVTIikpICU+JSAKICAgIGZpbHRlcihGZWF0dXJlJWluJShib290c3RyYXBfZ2VuZV9saXN0X01QQykpCiAgCiAgYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5MiA8LSBzZWxlY3QoYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5LEZlYXR1cmUsQWdpbGVudFNTdjYpCiAgYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5Ml9NUEMgPC0gc2VsZWN0KGFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2RpbmdfTVBDb25seSxGZWF0dXJlLEFnaWxlbnRTU3Y2KQogIAogIAogICMgU3VtIEFDcyBhY3Jvc3Mgc2FtcGxlL0dub21BRCBmb3IgZWFjaCBwcmVkaWN0aW9uIHNjb3JlIGNsYXNzIChNUEMgZmlndXJlcyBpbmNsdWRlIHRyYW5zY3JpcHRzIHdpdGggTVBDIHNjb3JlcyBvbmx5KQogIAogIEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nIDwtIGZpbHRlcihHbm9tQURfc3RhdHNfTVMsQ0FOT05JQ0FMJWluJWMoIllFUyIpKSAlPiUgCiAgICBkcGx5cjo6cmVuYW1lKCJHZW5lIj0iRU5TRyIpICU+JSAKICAgIGxlZnRfam9pbihlbnNlbWJsX2Jpb3R5cGVzLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgICBmaWx0ZXIoQklPVFlQRSVpbiVjKCJwcm90ZWluX2NvZGluZyIpKSAlPiUgCiAgICBsZWZ0X2pvaW4oYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5MixieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogICAgZmlsdGVyKEFnaWxlbnRTU3Y2JWluJWMoIllFUyIpKQogIAogIEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQyA8LSBmaWx0ZXIoR25vbUFEX3N0YXRzX01TLENBTk9OSUNBTCVpbiVjKCJZRVMiKSkgJT4lIAogICAgZHBseXI6OnJlbmFtZSgiR2VuZSI9IkVOU0ciKSAlPiUgCiAgICBsZWZ0X2pvaW4oZW5zZW1ibF9iaW90eXBlcyxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogICAgZmlsdGVyKEJJT1RZUEUlaW4lYygicHJvdGVpbl9jb2RpbmciKSkgJT4lIAogICAgbGVmdF9qb2luKGFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2Rpbmdfb25seTJfTVBDLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgICBmaWx0ZXIoQWdpbGVudFNTdjYlaW4lYygiWUVTIikpCiAgCiAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDZdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWyw2XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxMF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDLjJfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTRdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX01QQy4yX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxN10pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMl90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywyMF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMl9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMjNdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX01QQzIuNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywyNl0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMi41X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywyOV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDM190b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywzMl0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDM19ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMzVdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX0NBREQuMTVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywzOF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERC4xNV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw0MV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNDRdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX0NBREQxNV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw0N10pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDIwX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNTBdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX0NBREQyMF9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw1M10pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDI1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNTZdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX0NBREQyNV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw1OV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDMwX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNjJdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX0NBREQzMF9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw2NV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDY4XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDcxXSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw3NF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDc3XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDgwXSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuNV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw4M10pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssODZdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw4OV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw5Ml0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssOTVdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC43X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTA0XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuN19ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMDddKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC44X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTE2XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuOF9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMTldKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX0NBREQxNVJFVkVMMC40NV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDEzNF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDEzN10pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxMjJdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX01QQzJDQUREMTVSRVZFTDAuNDVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDEyNV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDEyOF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxMzFdKSAlPiUgYXMubnVtZXJpYygpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsIDwtIFRvdGFsX1NhbXBsZV9BbGxlbGVzKihucm93KGFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2Rpbmdfb25seSkpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbCA8LSBUb3RhbF9TYW1wbGVfQWxsZWxlcyoobnJvdyhhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX01QQ29ubHkpKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICAKICAKICAjIENhbGN1bGF0ZSBvZGRzIHJhdGlvcyB1c2luZyBtYXRyaWNlcwogIAogIE1QQy4yIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQy4yX3RvdGFsLAogICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMuMl90b3RhbCksCiAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIE1QQy4yX05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQy4yX05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMuMl9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgTVBDMiA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl90b3RhbCwKICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3RvdGFsLAogICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMl90b3RhbCksCiAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgTVBDMl9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzJfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMl9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBNUEMyLjUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzIuNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBNUEMyLjVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzIuNV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ19ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzIuNV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIE1QQzMgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfdG90YWwsCiAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM190b3RhbCwKICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMzX3RvdGFsLAogICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzNfdG90YWwpLAogICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIE1QQzNfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMzX05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ19ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzNfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERC4xNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQURELjE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERC4xNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERC4xNV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQURELjE1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERC4xNV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQUREMTUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQxNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQUREMTVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMTVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQxNV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIENBREQyMCA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQyMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDIwX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIENBREQyMF9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQyMF9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDIwX05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERDI1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMjVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERDI1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDI1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMjVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQUREMzAgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMzBfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQzMF90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQUREMzBfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMzBfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQzMF9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMLjAuNDUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMLjAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMLjAuNDVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMLjAuNDVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwwLjQ1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwwLjQ1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBSRVZFTDAuNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBSRVZFTDAuNV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMMC41NSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMMC41NV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X05GRV90b3RhbCksbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwwLjYgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwwLjZfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBSRVZFTDAuNyA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN190b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBSRVZFTDAuN19ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMMC44IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuOF90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMMC44X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuOF9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuOF9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERDE1UkVWRUwwLjQ1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBNUEMyQ0FERDE1UkVWRUwwLjQ1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBNUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCksbnJvdz0yLGJ5cm93PVRSVUUpCiAgTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICAKICBPUl9NUEMuMiA8LSBvZGRzcmF0aW8oTVBDLjIscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX01QQy4yX05GRSA8LSBvZGRzcmF0aW8oTVBDLjJfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMyIDwtIG9kZHNyYXRpbyhNUEMyLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMyX05GRSA8LSBvZGRzcmF0aW8oTVBDMl9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX01QQzIuNSA8LSBvZGRzcmF0aW8oTVBDMi41LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMyLjVfTkZFIDwtIG9kZHNyYXRpbyhNUEMyLjVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMzIDwtIG9kZHNyYXRpbyhNUEMzLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMzX05GRSA8LSBvZGRzcmF0aW8oTVBDM19ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQuMTUgPC0gb2Rkc3JhdGlvKENBREQuMTUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQuMTVfTkZFIDwtIG9kZHNyYXRpbyhDQURELjE1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERDE1IDwtIG9kZHNyYXRpbyhDQUREMTUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQxNV9ORkUgPC0gb2Rkc3JhdGlvKENBREQxNV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQyMCA8LSBvZGRzcmF0aW8oQ0FERDIwLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9DQUREMjBfTkZFIDwtIG9kZHNyYXRpbyhDQUREMjBfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9DQUREMjUgPC0gb2Rkc3JhdGlvKENBREQyNSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERDI1X05GRSA8LSBvZGRzcmF0aW8oQ0FERDI1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERDMwIDwtIG9kZHNyYXRpbyhDQUREMzAscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQzMF9ORkUgPC0gb2Rkc3JhdGlvKENBREQzMF9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMLjAuNDUgPC0gb2Rkc3JhdGlvKFJFVkVMLjAuNDUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMLjAuNDVfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTC4wLjQ1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfUkVWRUwwLjQ1IDwtIG9kZHNyYXRpbyhSRVZFTDAuNDUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC40NV9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMMC40NV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC41IDwtIG9kZHNyYXRpbyhSRVZFTDAuNSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfUkVWRUwwLjVfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTDAuNV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC41NSA8LSBvZGRzcmF0aW8oUkVWRUwwLjU1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9SRVZFTDAuNTVfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTDAuNTVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9SRVZFTDAuNiA8LSBvZGRzcmF0aW8oUkVWRUwwLjYscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC42X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwwLjZfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9SRVZFTDAuNyA8LSBvZGRzcmF0aW8oUkVWRUwwLjcscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC43X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwwLjdfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9SRVZFTDAuOCA8LSBvZGRzcmF0aW8oUkVWRUwwLjgscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC44X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwwLjhfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9DQUREMTVSRVZFTDAuNDUgPC0gb2Rkc3JhdGlvKENBREQxNVJFVkVMMC40NSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBvZGRzcmF0aW8oQ0FERDE1UkVWRUwwLjQ1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfTVBDMkNBREQxNVJFVkVMMC40NSA8LSBvZGRzcmF0aW8oTVBDMkNBREQxNVJFVkVMMC40NSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUgPC0gb2Rkc3JhdGlvKE1QQzJDQUREMTVSRVZFTDAuNDVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gb2Rkc3JhdGlvKE1QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSA8LSBvZGRzcmF0aW8oTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgCiAgCiAgIyBDb21iaW5lIGFsbCByZXN1bHRzIGludG8gb25lIHNwcmVhZHNoZWV0LCBhbmQgc2F2ZQogIAogIGEgPSBjKE9SX01QQy4yJGRhdGEubmFtZSxPUl9NUEMuMl9ORkUkZGF0YS5uYW1lLE9SX01QQzIkZGF0YS5uYW1lLE9SX01QQzJfTkZFJGRhdGEubmFtZSxPUl9NUEMyLjUkZGF0YS5uYW1lLE9SX01QQzIuNV9ORkUkZGF0YS5uYW1lLE9SX01QQzMkZGF0YS5uYW1lLE9SX01QQzNfTkZFJGRhdGEubmFtZSxPUl9DQURELjE1JGRhdGEubmFtZSxPUl9DQURELjE1X05GRSRkYXRhLm5hbWUsT1JfQ0FERDE1JGRhdGEubmFtZSxPUl9DQUREMTVfTkZFJGRhdGEubmFtZSxPUl9DQUREMjAkZGF0YS5uYW1lLE9SX0NBREQyMF9ORkUkZGF0YS5uYW1lLE9SX0NBREQyNSRkYXRhLm5hbWUsT1JfQ0FERDI1X05GRSRkYXRhLm5hbWUsT1JfQ0FERDMwJGRhdGEubmFtZSxPUl9DQUREMzBfTkZFJGRhdGEubmFtZSxPUl9SRVZFTC4wLjQ1JGRhdGEubmFtZSxPUl9SRVZFTC4wLjQ1X05GRSRkYXRhLm5hbWUsT1JfUkVWRUwwLjQ1JGRhdGEubmFtZSxPUl9SRVZFTDAuNDVfTkZFJGRhdGEubmFtZSxPUl9SRVZFTDAuNSRkYXRhLm5hbWUsT1JfUkVWRUwwLjVfTkZFJGRhdGEubmFtZSxPUl9SRVZFTDAuNTUkZGF0YS5uYW1lLE9SX1JFVkVMMC41NV9ORkUkZGF0YS5uYW1lLE9SX1JFVkVMMC42JGRhdGEubmFtZSxPUl9SRVZFTDAuNl9ORkUkZGF0YS5uYW1lLE9SX1JFVkVMMC43JGRhdGEubmFtZSxPUl9SRVZFTDAuN19ORkUkZGF0YS5uYW1lLE9SX1JFVkVMMC44JGRhdGEubmFtZSxPUl9SRVZFTDAuOF9ORkUkZGF0YS5uYW1lLE9SX0NBREQxNVJFVkVMMC40NSRkYXRhLm5hbWUsT1JfQ0FERDE1UkVWRUwwLjQ1X05GRSRkYXRhLm5hbWUsT1JfTVBDMkNBREQxNVJFVkVMMC40NSRkYXRhLm5hbWUsT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUkZGF0YS5uYW1lLE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCRkYXRhLm5hbWUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSRkYXRhLm5hbWUpCiAgYiA9IGMoT1JfTVBDLjIkZXN0aW1hdGUsT1JfTVBDLjJfTkZFJGVzdGltYXRlLE9SX01QQzIkZXN0aW1hdGUsT1JfTVBDMl9ORkUkZXN0aW1hdGUsT1JfTVBDMi41JGVzdGltYXRlLE9SX01QQzIuNV9ORkUkZXN0aW1hdGUsT1JfTVBDMyRlc3RpbWF0ZSxPUl9NUEMzX05GRSRlc3RpbWF0ZSxPUl9DQURELjE1JGVzdGltYXRlLE9SX0NBREQuMTVfTkZFJGVzdGltYXRlLE9SX0NBREQxNSRlc3RpbWF0ZSxPUl9DQUREMTVfTkZFJGVzdGltYXRlLE9SX0NBREQyMCRlc3RpbWF0ZSxPUl9DQUREMjBfTkZFJGVzdGltYXRlLE9SX0NBREQyNSRlc3RpbWF0ZSxPUl9DQUREMjVfTkZFJGVzdGltYXRlLE9SX0NBREQzMCRlc3RpbWF0ZSxPUl9DQUREMzBfTkZFJGVzdGltYXRlLE9SX1JFVkVMLjAuNDUkZXN0aW1hdGUsT1JfUkVWRUwuMC40NV9ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjQ1JGVzdGltYXRlLE9SX1JFVkVMMC40NV9ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjUkZXN0aW1hdGUsT1JfUkVWRUwwLjVfTkZFJGVzdGltYXRlLE9SX1JFVkVMMC41NSRlc3RpbWF0ZSxPUl9SRVZFTDAuNTVfTkZFJGVzdGltYXRlLE9SX1JFVkVMMC42JGVzdGltYXRlLE9SX1JFVkVMMC42X05GRSRlc3RpbWF0ZSxPUl9SRVZFTDAuNyRlc3RpbWF0ZSxPUl9SRVZFTDAuN19ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjgkZXN0aW1hdGUsT1JfUkVWRUwwLjhfTkZFJGVzdGltYXRlLE9SX0NBREQxNVJFVkVMMC40NSRlc3RpbWF0ZSxPUl9DQUREMTVSRVZFTDAuNDVfTkZFJGVzdGltYXRlLE9SX01QQzJDQUREMTVSRVZFTDAuNDUkZXN0aW1hdGUsT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUkZXN0aW1hdGUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44JGVzdGltYXRlLE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUkZXN0aW1hdGUpCiAgYyA9IGMoT1JfTVBDLjIkY29uZi5pbnQsT1JfTVBDLjJfTkZFJGNvbmYuaW50LE9SX01QQzIkY29uZi5pbnQsT1JfTVBDMl9ORkUkY29uZi5pbnQsT1JfTVBDMi41JGNvbmYuaW50LE9SX01QQzIuNV9ORkUkY29uZi5pbnQsT1JfTVBDMyRjb25mLmludCxPUl9NUEMzX05GRSRjb25mLmludCxPUl9DQURELjE1JGNvbmYuaW50LE9SX0NBREQuMTVfTkZFJGNvbmYuaW50LE9SX0NBREQxNSRjb25mLmludCxPUl9DQUREMTVfTkZFJGNvbmYuaW50LE9SX0NBREQyMCRjb25mLmludCxPUl9DQUREMjBfTkZFJGNvbmYuaW50LE9SX0NBREQyNSRjb25mLmludCxPUl9DQUREMjVfTkZFJGNvbmYuaW50LE9SX0NBREQzMCRjb25mLmludCxPUl9DQUREMzBfTkZFJGNvbmYuaW50LE9SX1JFVkVMLjAuNDUkY29uZi5pbnQsT1JfUkVWRUwuMC40NV9ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjQ1JGNvbmYuaW50LE9SX1JFVkVMMC40NV9ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjUkY29uZi5pbnQsT1JfUkVWRUwwLjVfTkZFJGNvbmYuaW50LE9SX1JFVkVMMC41NSRjb25mLmludCxPUl9SRVZFTDAuNTVfTkZFJGNvbmYuaW50LE9SX1JFVkVMMC42JGNvbmYuaW50LE9SX1JFVkVMMC42X05GRSRjb25mLmludCxPUl9SRVZFTDAuNyRjb25mLmludCxPUl9SRVZFTDAuN19ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjgkY29uZi5pbnQsT1JfUkVWRUwwLjhfTkZFJGNvbmYuaW50LE9SX0NBREQxNVJFVkVMMC40NSRjb25mLmludCxPUl9DQUREMTVSRVZFTDAuNDVfTkZFJGNvbmYuaW50LE9SX01QQzJDQUREMTVSRVZFTDAuNDUkY29uZi5pbnQsT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUkY29uZi5pbnQsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44JGNvbmYuaW50LE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUkY29uZi5pbnQpCiAgZCA9IGMoT1JfTVBDLjIkcC52YWx1ZSxPUl9NUEMuMl9ORkUkcC52YWx1ZSxPUl9NUEMyJHAudmFsdWUsT1JfTVBDMl9ORkUkcC52YWx1ZSxPUl9NUEMyLjUkcC52YWx1ZSxPUl9NUEMyLjVfTkZFJHAudmFsdWUsT1JfTVBDMyRwLnZhbHVlLE9SX01QQzNfTkZFJHAudmFsdWUsT1JfQ0FERC4xNSRwLnZhbHVlLE9SX0NBREQuMTVfTkZFJHAudmFsdWUsT1JfQ0FERDE1JHAudmFsdWUsT1JfQ0FERDE1X05GRSRwLnZhbHVlLE9SX0NBREQyMCRwLnZhbHVlLE9SX0NBREQyMF9ORkUkcC52YWx1ZSxPUl9DQUREMjUkcC52YWx1ZSxPUl9DQUREMjVfTkZFJHAudmFsdWUsT1JfQ0FERDMwJHAudmFsdWUsT1JfQ0FERDMwX05GRSRwLnZhbHVlLE9SX1JFVkVMLjAuNDUkcC52YWx1ZSxPUl9SRVZFTC4wLjQ1X05GRSRwLnZhbHVlLE9SX1JFVkVMMC40NSRwLnZhbHVlLE9SX1JFVkVMMC40NV9ORkUkcC52YWx1ZSxPUl9SRVZFTDAuNSRwLnZhbHVlLE9SX1JFVkVMMC41X05GRSRwLnZhbHVlLE9SX1JFVkVMMC41NSRwLnZhbHVlLE9SX1JFVkVMMC41NV9ORkUkcC52YWx1ZSxPUl9SRVZFTDAuNiRwLnZhbHVlLE9SX1JFVkVMMC42X05GRSRwLnZhbHVlLE9SX1JFVkVMMC43JHAudmFsdWUsT1JfUkVWRUwwLjdfTkZFJHAudmFsdWUsT1JfUkVWRUwwLjgkcC52YWx1ZSxPUl9SRVZFTDAuOF9ORkUkcC52YWx1ZSxPUl9DQUREMTVSRVZFTDAuNDUkcC52YWx1ZSxPUl9DQUREMTVSRVZFTDAuNDVfTkZFJHAudmFsdWUsT1JfTVBDMkNBREQxNVJFVkVMMC40NSRwLnZhbHVlLE9SX01QQzJDQUREMTVSRVZFTDAuNDVfTkZFJHAudmFsdWUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44JHAudmFsdWUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSRwLnZhbHVlKQogIAogIE9Sc19tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfc2FtcGxlMC4wMV9ib290c3RyYXBfQWdpbGVudFNTdjZfcmF0aW82ICA8LSBiaW5kX3Jvd3MoT1JzX21hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9zYW1wbGUwLjAxX2Jvb3RzdHJhcF9BZ2lsZW50U1N2Nl9yYXRpbzYgLHRpYmJsZSgKICAgICJGaWx0ZXJpbmciPWEsCiAgICAiT2Rkc19yYXRpbyI9YiwKICAgICI5NSVfQ0kiPWMsCiAgICAicF92YWx1ZSI9ZAogICkKICApCn0Kd3JpdGVfdHN2KE9Sc19tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfc2FtcGxlMC4wMV9ib290c3RyYXBfQWdpbGVudFNTdjZfcmF0aW82LCBwYXRoPSJPUnNfbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX3NhbXBsZTAuMDFfYm9vdHN0cmFwMTAwMF9BZ2lsZW50U1N2Nl9yYXRpbzYudHN2IikKYGBgCgpSYW5kb21seSBzYW1wbGUgTG9GLWVucmljaGVkIGdlbmVzIHdpdGggbWluaW11bSByYXRpbyA+IDEyLCBjYWxjdWxhdGUgeDEwMCBzZXRzIG9mIE9ScyBmb3IgYWxsIHByZWRpY3Rpb24gc2NvcmUgY2F0ZWdvcmllcywgYW5kIHNhdmUgb3V0cHV0CmBgYHtyfQpPUnNfbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX3NhbXBsZTAuMDFfYm9vdHN0cmFwX0FnaWxlbnRTU3Y2X3JhdGlvMTIgPC0gdGliYmxlKCkKCmZvciAoaSBpbiBjKDE6MTAwKSl7CiAgYm9vdHN0cmFwX2dlbmVfdGFibGUgPC0gc2FtcGxlX24oR25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZywgSElHSGdlbmVzX3JhdGlvMTJfbiwgcmVwbGFjZT1GQUxTRSkKICBib290c3RyYXBfZ2VuZV9saXN0IDwtIGJvb3RzdHJhcF9nZW5lX3RhYmxlWywyXQogIAogIGJvb3RzdHJhcF9nZW5lX3RhYmxlX01QQyA8LSBzYW1wbGVfbihNUENfdHJhbnNjcmlwdHMsIEhJR0hnZW5lc19yYXRpbzEyX24sIHJlcGxhY2U9RkFMU0UpCiAgYm9vdHN0cmFwX2dlbmVfbGlzdF9NUEMgPC0gYm9vdHN0cmFwX2dlbmVfdGFibGVfTVBDWywxXQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVMgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRLCBJTVBBQ1Q9PSJNT0RFUkFURSIpICU+JSAKICAgIGZpbHRlcihzdHJfZGV0ZWN0KENvbnNlcXVlbmNlLCJtaXNzZW5zZV92YXJpYW50IikpICU+JSAKICAgIGZpbHRlcihGZWF0dXJlJWluJWMoYm9vdHN0cmFwX2dlbmVfbGlzdCkpCiAgCiAgCiAgIyBFeGNsdWRlIE5NIGNhbm9uaWNhbCAoUmVmU2VxKSB2YXJpYW50cyBhbmQgY29udmVydCBNUEMgc3RyaW5ncyB0byBpbnRlZ2Vycy9kb3VibGVzCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TLCBDQU5PTklDQUw9PSJZRVMiKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwkTVBDIDwtIGFzLm51bWVyaWMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsJE1QQykgJT4lIHJlcGxhY2VfbmEoMCkKICBybShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TKQogIAogIAogICMgRGl2aWRlIGRhdGEgaW50byBkaWZmZXJlbnQgcHJlZGljdGlvbiBzY29yZSBncm91cHMKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQzwyKSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMiA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoTVBDPj0yKSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChNUEM+PTIuNSkpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzMgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQz49MykpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ8MTUpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTE1KSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChDQUREX1BIUkVEPj0yMCkpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRD49MjUpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzAgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTMwKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU8MC40NSkpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNDUpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNSkpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNTUpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNiA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNikpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZT49MC43KSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjggPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKFJFVkVMX3Njb3JlPj0wLjgpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTE1KSYoUkVWRUxfc2NvcmU+PTAuNDUpKSAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTE1KSYoUkVWRUxfc2NvcmU+PTAuNDUpJihNUEM+PTIpKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gYmluZF9yb3dzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgsLmlkPU5VTEwpICU+JSAKICAgIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKQogIAogIAogICMgU2FtcGxlIHZhcmlhbnQgY291bnRzIGFuZCBBRnMKICAKICB2YXJpYW50X2NvdW50c19BRnMgPC0gZnVuY3Rpb24odmNmKXsKICAgIHZhcmlhbnRzX2hldGVyb3p5Z291cyA8LSB2Y2YgJT4lIAogICAgICBzZWxlY3QoSEdWU2MsU2FtcGxlLkdUKSAlPiUgCiAgICAgIGdyb3VwX2J5KEhHVlNjLFNhbXBsZS5HVCkgJT4lIAogICAgICBzdW1tYXJpc2UobigpKSAlPiUgCiAgICAgIGZpbHRlcigoU2FtcGxlLkdUJWluJWMoIicwLzEiLCInMS8wIikpKSAlPiUgCiAgICAgIGRwbHlyOjpyZW5hbWUoYWxsZWxlcyA9ICJuKCkiKSAlPiUgCiAgICAgIGdyb3VwX2J5KEhHVlNjKSAlPiUgCiAgICAgIHN1bW1hcmlzZShzdW0oYWxsZWxlcykpCiAgICB2YXJpYW50c19ob21venlnb3VzIDwtIHZjZiAlPiUgCiAgICAgIHNlbGVjdChIR1ZTYyxTYW1wbGUuR1QpICU+JSAKICAgICAgZ3JvdXBfYnkoSEdWU2MsU2FtcGxlLkdUKSAlPiUgCiAgICAgIHN1bW1hcmlzZShuKCkpICU+JSAKICAgICAgZmlsdGVyKChTYW1wbGUuR1QhPSInMC8xIikmKFNhbXBsZS5HVCE9IicxLzAiKSkgJT4lIAogICAgICBtdXRhdGUoYWxsZWxlcyA9IGBuKClgKjIpICU+JSAKICAgICAgc2VsZWN0KC1gbigpYCkgJT4lIAogICAgICBncm91cF9ieShIR1ZTYykgJT4lIAogICAgICBzdW1tYXJpc2Uoc3VtKGFsbGVsZXMpKQogICAgdmFyaWFudHMgPC0gZnVsbF9qb2luKHZhcmlhbnRzX2hldGVyb3p5Z291cyx2YXJpYW50c19ob21venlnb3VzLGJ5PSJIR1ZTYyIsY29weT1GQUxTRSxzdWZmaXg9YygiLngiLCIueSIpKSAlPiUKICAgICAgbXV0YXRlX2FsbChmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgICBtdXRhdGUoVG90YWxfQWxsZWxlX0NvdW50PWBzdW0oYWxsZWxlcykueGArYHN1bShhbGxlbGVzKS55YCkgJT4lIAogICAgICBtdXRhdGUoU2FtcGxlX0FGPVRvdGFsX0FsbGVsZV9Db3VudC9Ub3RhbF9TYW1wbGVfQWxsZWxlcykKICAgIHZjZiA8LSBsZWZ0X2pvaW4odmNmLCB2YXJpYW50c1ssYygxLDQ6NSldLGJ5PSJIR1ZTYyIsY29weT1GQUxTRSkKICB9CiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yICA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMikKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMykKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTUpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjUpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDUpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNiA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNyA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOCA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44KQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1KQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgpCiAgCiAgCiAgIyBFeGNsdWRlIHZhcmlhbnRzIHdpdGggc2FtcGxlIEFGID4wLjAxzJsKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzLFNhbXBsZV9BRiA8IDAuMDEpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSxTYW1wbGVfQUYgPCAwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1LFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjAsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSxTYW1wbGVfQUYgPCAwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwLFNhbXBsZV9BRiA8IDAuMDEpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NSxTYW1wbGVfQUYgPCAwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1LFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41LFNhbXBsZV9BRiA8IDAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjYsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjcsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgsU2FtcGxlX0FGIDwgMC4wMSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSxTYW1wbGVfQUYgPCAwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDUsU2FtcGxlX0FGIDwgMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCxTYW1wbGVfQUYgPCAwLjAxKQogCiAgCiAgIyBTYW1wbGUgZ2VuZSBjb3VudHMgYW5kIGZyZXF1ZW5jaWVzCiAgCiAgZ2VuZV9jb3VudHNfQUYgPC0gZnVuY3Rpb24odmNmKXsKICAgIGdlbmVzX29uZVZhckFsbGVsZSA8LSB2Y2YgJT4lIHNlbGVjdChTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgICAgIHNlbGVjdChTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgICAgIGdyb3VwX2J5KFNZTUJPTCxTYW1wbGUuR1QpICU+JSAKICAgICAgc3VtbWFyaXNlKG4oKSkgJT4lIAogICAgICBmaWx0ZXIoKFNhbXBsZS5HVCVpbiVjKCInMC8xIiwiJzEvMCIpKSkgJT4lIAogICAgICBkcGx5cjo6cmVuYW1lKGdlbmVfVmFyID0gIm4oKSIpICU+JSAKICAgICAgZ3JvdXBfYnkoU1lNQk9MKSAlPiUgCiAgICAgIHN1bW1hcmlzZShzdW0oZ2VuZV9WYXIpKQogICAgZ2VuZXNfdHdvVmFyQWxsZWxlIDwtIHZjZiAlPiUgc2VsZWN0KFNZTUJPTCxTYW1wbGUuR1QpICU+JSAKICAgICAgc2VsZWN0KFNZTUJPTCxTYW1wbGUuR1QpICU+JSAKICAgICAgZ3JvdXBfYnkoU1lNQk9MLFNhbXBsZS5HVCkgJT4lIAogICAgICBzdW1tYXJpc2UobigpKSAlPiUgCiAgICAgIGZpbHRlcigoU2FtcGxlLkdUIT0iJzAvMSIpJihTYW1wbGUuR1QhPSInMS8wIikpICU+JSAKICAgICAgbXV0YXRlKGdlbmVfVmFyID0gYG4oKWAqMikgJT4lIAogICAgICBzZWxlY3QoLWBuKClgKSAlPiUgCiAgICAgIGdyb3VwX2J5KFNZTUJPTCkgJT4lIAogICAgICBzdW1tYXJpc2Uoc3VtKGdlbmVfVmFyKSkKICAgIGdlbmVzIDwtIGZ1bGxfam9pbihnZW5lc19vbmVWYXJBbGxlbGUsZ2VuZXNfdHdvVmFyQWxsZWxlLGJ5PSJTWU1CT0wiLGNvcHk9RkFMU0Usc3VmZml4PWMoIi54IiwiLnkiKSkgJT4lIAogICAgICBtdXRhdGVfYWxsKGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICAgIG11dGF0ZShUb3RhbF9HZW5lX0NvdW50PWBzdW0oZ2VuZV9WYXIpLnhgK2BzdW0oZ2VuZV9WYXIpLnlgKSAlPiUgCiAgICAgIG11dGF0ZShTYW1wbGVfR2VuZV9GcmVxPVRvdGFsX0dlbmVfQ291bnQvVG90YWxfU2FtcGxlX0FsbGVsZXMpCiAgICB2Y2YgPC0gbGVmdF9qb2luKHZjZiwgZ2VuZXNbLGMoMSw0OjUpXSxieT0iU1lNQk9MIixjb3B5PUZBTFNFKQogIH0KICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDEpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDEpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMSkKCiAgCiAgIyBBZGQgR25vbUFEIGdlbmUtbGV2ZWwgZGF0YQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMTQ6MTkpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDIwOjI1KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDI2OjMxKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDMyOjM3KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMzg6NDMpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw0NDo0OSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw1MDo1NSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw1Njo2MSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw2Mjo2NyldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDY4OjczKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDc0Ojc5KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsODA6ODUpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw4Njo5MSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDkyOjk3KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogICAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDEwNDoxMDkpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KICAgIG11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMTE2OjEyMSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDEzNDoxMzkpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICAgIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogICAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCiAgCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMTIyOjEyNyldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCiAgICBtdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQogIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxMjg6MTMzKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQogICAgbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICAgIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKICAKICAjIENyZWF0ZSBkYXRhIGZyYW1lcyB3aXRoIEFnaWxlbnQgU3VyZVNlbGVjdCB3aG9sZSBleG9tZSBnZW5lcyAoRU5TVCBhbmQgcHJvdGVpbi1jb2RpbmcpIGFuZCBNUEMtb25seSB0cmFuc2NyaXB0cwogIAogIGFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2Rpbmdfb25seSA8LSB0aWJibGUoIlNZTUJPTCI9R25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyRTWU1CT0wsIkdlbmUiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckR2VuZSwiRmVhdHVyZSI9R25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyRGZWF0dXJlLCAiQWdpbGVudFNTdjYiPSJZRVMiKSAlPiUgCiAgICBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIAogICAgYXJyYW5nZShTWU1CT0wpICU+JSAKICAgIGZpbHRlcihGZWF0dXJlJWluJShib290c3RyYXBfZ2VuZV9saXN0KSkKICAKICBhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX01QQ29ubHk8LSB0aWJibGUoIlNZTUJPTCI9R25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyRTWU1CT0wsIkdlbmUiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckR2VuZSwiRmVhdHVyZSI9R25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyRGZWF0dXJlLCAiQWdpbGVudFNTdjYiPSJZRVMiKSAlPiUgCiAgICBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIAogICAgbGVmdF9qb2luKE1QQ190cmFuc2NyaXB0cyxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogICAgZmlsdGVyKENBTk9OSUNBTCVpbiVjKCJZRVMiKSkgJT4lIAogICAgZmlsdGVyKEZlYXR1cmUlaW4lKGJvb3RzdHJhcF9nZW5lX2xpc3RfTVBDKSkKICAKICBhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX29ubHkyIDwtIHNlbGVjdChhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX29ubHksRmVhdHVyZSxBZ2lsZW50U1N2NikKICBhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX29ubHkyX01QQyA8LSBzZWxlY3QoYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19NUENvbmx5LEZlYXR1cmUsQWdpbGVudFNTdjYpCiAgCiAgCiAgIyBTdW0gQUNzIGFjcm9zcyBzYW1wbGUvR25vbUFEIGZvciBlYWNoIHByZWRpY3Rpb24gc2NvcmUgY2xhc3MgKE1QQyBmaWd1cmVzIGluY2x1ZGUgdHJhbnNjcmlwdHMgd2l0aCBNUEMgc2NvcmVzIG9ubHkpCiAgCiAgR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmcgPC0gZmlsdGVyKEdub21BRF9zdGF0c19NUyxDQU5PTklDQUwlaW4lYygiWUVTIikpICU+JSAKICAgIGRwbHlyOjpyZW5hbWUoIkdlbmUiPSJFTlNHIikgJT4lIAogICAgbGVmdF9qb2luKGVuc2VtYmxfYmlvdHlwZXMsYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpICU+JSAKICAgIGZpbHRlcihCSU9UWVBFJWluJWMoInByb3RlaW5fY29kaW5nIikpICU+JSAKICAgIGxlZnRfam9pbihhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX29ubHkyLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgICBmaWx0ZXIoQWdpbGVudFNTdjYlaW4lYygiWUVTIikpCiAgCiAgR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDIDwtIGZpbHRlcihHbm9tQURfc3RhdHNfTVMsQ0FOT05JQ0FMJWluJWMoIllFUyIpKSAlPiUgCiAgICBkcGx5cjo6cmVuYW1lKCJHZW5lIj0iRU5TRyIpICU+JSAKICAgIGxlZnRfam9pbihlbnNlbWJsX2Jpb3R5cGVzLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgICBmaWx0ZXIoQklPVFlQRSVpbiVjKCJwcm90ZWluX2NvZGluZyIpKSAlPiUgCiAgICBsZWZ0X2pvaW4oYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5Ml9NUEMsYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpICU+JSAKICAgIGZpbHRlcihBZ2lsZW50U1N2NiVpbiVjKCJZRVMiKSkKICAKICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNl0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDEwXSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDZdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDEwXSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19NUEMuMl90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxNF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDLjJfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDE3XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19NUEMyX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDIwXSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19NUEMyX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywyM10pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMi41X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDI2XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19NUEMyLjVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDI5XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19NUEMzX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDMyXSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19NUEMzX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywzNV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERC4xNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDM4XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19DQURELjE1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDQxXSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19DQUREMTVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw0NF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDQ3XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19DQUREMjBfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw1MF0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDIwX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDUzXSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19DQUREMjVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw1Nl0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDI1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDU5XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19DQUREMzBfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw2Ml0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDMwX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDY1XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNjhdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX1JFVkVMLjAuNDVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNzFdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC40NV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDc0XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNzddKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC41X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssODBdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC41X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDgzXSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuNTVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw4Nl0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDg5XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuNl90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDkyXSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19SRVZFTDAuNl9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw5NV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMDRdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC43X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDEwN10pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjhfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMTZdKSAlPiUgYXMubnVtZXJpYygpCiAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC44X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDExOV0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTM0XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTM3XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDEyMl0pICU+JSBhcy5udW1lcmljKCkKICBHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTI1XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTI4XSkgJT4lIGFzLm51bWVyaWMoKQogIEdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDEzMV0pICU+JSBhcy5udW1lcmljKCkKICAKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwgPC0gVG90YWxfU2FtcGxlX0FsbGVsZXMqKG5yb3coYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5KSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsIDwtIFRvdGFsX1NhbXBsZV9BbGxlbGVzKihucm93KGFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2RpbmdfTVBDb25seSkpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM190b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCiAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQogIAogIAogICMgQ2FsY3VsYXRlIG9kZHMgcmF0aW9zIHVzaW5nIG1hdHJpY2VzCiAgCiAgTVBDLjIgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3RvdGFsLAogICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDLjJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQy4yX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgTVBDLjJfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDLjJfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ19ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQy4yX05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBNUEMyIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3RvdGFsLAogICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMl90b3RhbCwKICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyX3RvdGFsKSwKICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBNUEMyX05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMl9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyX05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIE1QQzIuNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMi41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMi41X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIE1QQzIuNV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMi41X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMi41X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgTVBDMyA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM190b3RhbCwKICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3RvdGFsLAogICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzNfdG90YWwsCiAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDM190b3RhbCksCiAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgTVBDM19ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzNfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDM19ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQURELjE1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQuMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19DQURELjE1X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQURELjE1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQuMTVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQURELjE1X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIENBREQxNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQxNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDE1X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIENBREQxNV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQxNV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDE1X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERDIwIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMjBfdG90YWwpLAogICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgQ0FERDIwX05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDIwX05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMjBfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQUREMjUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQyNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQUREMjVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMjVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQyNV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIENBREQzMCA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQzMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDMwX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIENBREQzMF9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQzMF9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDMwX05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwuMC40NSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwuMC40NV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBSRVZFTDAuNDUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC40NV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBSRVZFTDAuNDVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC40NV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMMC41IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMMC41X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuNV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwwLjU1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNTVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwwLjU1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNTVfTkZFX3RvdGFsKSxucm93PTIsYnlyb3c9VFJVRSkKICBSRVZFTDAuNiA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBSRVZFTDAuNl9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMMC43IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN190b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuN190b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuN190b3RhbCksCiAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIFJFVkVMMC43X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuN19ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuN19ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwwLjggPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC44X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCiAgUkVWRUwwLjhfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC44X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC44X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQUREMTVSRVZFTDAuNDUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQxNVJFVkVMMC40NV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBDQUREMTVSRVZFTDAuNDVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQxNVJFVkVMMC40NV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIE1QQzJDQUREMTVSRVZFTDAuNDUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIE1QQzJDQUREMTVSRVZFTDAuNDVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ19ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzJDQUREMTVSRVZFTDAuNDVfTkZFX3RvdGFsKSxucm93PTIsYnlyb3c9VFJVRSkKICBNUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKICBNUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ19ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQogIAogIE9SX01QQy4yIDwtIG9kZHNyYXRpbyhNUEMuMixwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfTVBDLjJfTkZFIDwtIG9kZHNyYXRpbyhNUEMuMl9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX01QQzIgPC0gb2Rkc3JhdGlvKE1QQzIscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX01QQzJfTkZFIDwtIG9kZHNyYXRpbyhNUEMyX05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfTVBDMi41IDwtIG9kZHNyYXRpbyhNUEMyLjUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX01QQzIuNV9ORkUgPC0gb2Rkc3JhdGlvKE1QQzIuNV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX01QQzMgPC0gb2Rkc3JhdGlvKE1QQzMscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX01QQzNfTkZFIDwtIG9kZHNyYXRpbyhNUEMzX05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERC4xNSA8LSBvZGRzcmF0aW8oQ0FERC4xNSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERC4xNV9ORkUgPC0gb2Rkc3JhdGlvKENBREQuMTVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9DQUREMTUgPC0gb2Rkc3JhdGlvKENBREQxNSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERDE1X05GRSA8LSBvZGRzcmF0aW8oQ0FERDE1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERDIwIDwtIG9kZHNyYXRpbyhDQUREMjAscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQyMF9ORkUgPC0gb2Rkc3JhdGlvKENBREQyMF9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQyNSA8LSBvZGRzcmF0aW8oQ0FERDI1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9DQUREMjVfTkZFIDwtIG9kZHNyYXRpbyhDQUREMjVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9DQUREMzAgPC0gb2Rkc3JhdGlvKENBREQzMCxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfQ0FERDMwX05GRSA8LSBvZGRzcmF0aW8oQ0FERDMwX05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfUkVWRUwuMC40NSA8LSBvZGRzcmF0aW8oUkVWRUwuMC40NSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfUkVWRUwuMC40NV9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMLjAuNDVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9SRVZFTDAuNDUgPC0gb2Rkc3JhdGlvKFJFVkVMMC40NSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfUkVWRUwwLjQ1X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwwLjQ1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfUkVWRUwwLjUgPC0gb2Rkc3JhdGlvKFJFVkVMMC41LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9SRVZFTDAuNV9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMMC41X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfUkVWRUwwLjU1IDwtIG9kZHNyYXRpbyhSRVZFTDAuNTUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC41NV9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMMC41NV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC42IDwtIG9kZHNyYXRpbyhSRVZFTDAuNixwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfUkVWRUwwLjZfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTDAuNl9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC43IDwtIG9kZHNyYXRpbyhSRVZFTDAuNyxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfUkVWRUwwLjdfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTDAuN19ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX1JFVkVMMC44IDwtIG9kZHNyYXRpbyhSRVZFTDAuOCxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCiAgT1JfUkVWRUwwLjhfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTDAuOF9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX0NBREQxNVJFVkVMMC40NSA8LSBvZGRzcmF0aW8oQ0FERDE1UkVWRUwwLjQ1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9DQUREMTVSRVZFTDAuNDVfTkZFIDwtIG9kZHNyYXRpbyhDQUREMTVSRVZFTDAuNDVfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1IDwtIG9kZHNyYXRpbyhNUEMyQ0FERDE1UkVWRUwwLjQ1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBvZGRzcmF0aW8oTVBDMkNBREQxNVJFVkVMMC40NV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQogIE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCA8LSBvZGRzcmF0aW8oTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICBPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFIDwtIG9kZHNyYXRpbyhNUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKICAKICAKICAjIENvbWJpbmUgYWxsIHJlc3VsdHMgaW50byBvbmUgc3ByZWFkc2hlZXQsIGFuZCBzYXZlCiAgCiAgYSA9IGMoT1JfTVBDLjIkZGF0YS5uYW1lLE9SX01QQy4yX05GRSRkYXRhLm5hbWUsT1JfTVBDMiRkYXRhLm5hbWUsT1JfTVBDMl9ORkUkZGF0YS5uYW1lLE9SX01QQzIuNSRkYXRhLm5hbWUsT1JfTVBDMi41X05GRSRkYXRhLm5hbWUsT1JfTVBDMyRkYXRhLm5hbWUsT1JfTVBDM19ORkUkZGF0YS5uYW1lLE9SX0NBREQuMTUkZGF0YS5uYW1lLE9SX0NBREQuMTVfTkZFJGRhdGEubmFtZSxPUl9DQUREMTUkZGF0YS5uYW1lLE9SX0NBREQxNV9ORkUkZGF0YS5uYW1lLE9SX0NBREQyMCRkYXRhLm5hbWUsT1JfQ0FERDIwX05GRSRkYXRhLm5hbWUsT1JfQ0FERDI1JGRhdGEubmFtZSxPUl9DQUREMjVfTkZFJGRhdGEubmFtZSxPUl9DQUREMzAkZGF0YS5uYW1lLE9SX0NBREQzMF9ORkUkZGF0YS5uYW1lLE9SX1JFVkVMLjAuNDUkZGF0YS5uYW1lLE9SX1JFVkVMLjAuNDVfTkZFJGRhdGEubmFtZSxPUl9SRVZFTDAuNDUkZGF0YS5uYW1lLE9SX1JFVkVMMC40NV9ORkUkZGF0YS5uYW1lLE9SX1JFVkVMMC41JGRhdGEubmFtZSxPUl9SRVZFTDAuNV9ORkUkZGF0YS5uYW1lLE9SX1JFVkVMMC41NSRkYXRhLm5hbWUsT1JfUkVWRUwwLjU1X05GRSRkYXRhLm5hbWUsT1JfUkVWRUwwLjYkZGF0YS5uYW1lLE9SX1JFVkVMMC42X05GRSRkYXRhLm5hbWUsT1JfUkVWRUwwLjckZGF0YS5uYW1lLE9SX1JFVkVMMC43X05GRSRkYXRhLm5hbWUsT1JfUkVWRUwwLjgkZGF0YS5uYW1lLE9SX1JFVkVMMC44X05GRSRkYXRhLm5hbWUsT1JfQ0FERDE1UkVWRUwwLjQ1JGRhdGEubmFtZSxPUl9DQUREMTVSRVZFTDAuNDVfTkZFJGRhdGEubmFtZSxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1JGRhdGEubmFtZSxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSRkYXRhLm5hbWUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44JGRhdGEubmFtZSxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFJGRhdGEubmFtZSkKICBiID0gYyhPUl9NUEMuMiRlc3RpbWF0ZSxPUl9NUEMuMl9ORkUkZXN0aW1hdGUsT1JfTVBDMiRlc3RpbWF0ZSxPUl9NUEMyX05GRSRlc3RpbWF0ZSxPUl9NUEMyLjUkZXN0aW1hdGUsT1JfTVBDMi41X05GRSRlc3RpbWF0ZSxPUl9NUEMzJGVzdGltYXRlLE9SX01QQzNfTkZFJGVzdGltYXRlLE9SX0NBREQuMTUkZXN0aW1hdGUsT1JfQ0FERC4xNV9ORkUkZXN0aW1hdGUsT1JfQ0FERDE1JGVzdGltYXRlLE9SX0NBREQxNV9ORkUkZXN0aW1hdGUsT1JfQ0FERDIwJGVzdGltYXRlLE9SX0NBREQyMF9ORkUkZXN0aW1hdGUsT1JfQ0FERDI1JGVzdGltYXRlLE9SX0NBREQyNV9ORkUkZXN0aW1hdGUsT1JfQ0FERDMwJGVzdGltYXRlLE9SX0NBREQzMF9ORkUkZXN0aW1hdGUsT1JfUkVWRUwuMC40NSRlc3RpbWF0ZSxPUl9SRVZFTC4wLjQ1X05GRSRlc3RpbWF0ZSxPUl9SRVZFTDAuNDUkZXN0aW1hdGUsT1JfUkVWRUwwLjQ1X05GRSRlc3RpbWF0ZSxPUl9SRVZFTDAuNSRlc3RpbWF0ZSxPUl9SRVZFTDAuNV9ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjU1JGVzdGltYXRlLE9SX1JFVkVMMC41NV9ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjYkZXN0aW1hdGUsT1JfUkVWRUwwLjZfTkZFJGVzdGltYXRlLE9SX1JFVkVMMC43JGVzdGltYXRlLE9SX1JFVkVMMC43X05GRSRlc3RpbWF0ZSxPUl9SRVZFTDAuOCRlc3RpbWF0ZSxPUl9SRVZFTDAuOF9ORkUkZXN0aW1hdGUsT1JfQ0FERDE1UkVWRUwwLjQ1JGVzdGltYXRlLE9SX0NBREQxNVJFVkVMMC40NV9ORkUkZXN0aW1hdGUsT1JfTVBDMkNBREQxNVJFVkVMMC40NSRlc3RpbWF0ZSxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSRlc3RpbWF0ZSxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgkZXN0aW1hdGUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSRlc3RpbWF0ZSkKICBjID0gYyhPUl9NUEMuMiRjb25mLmludCxPUl9NUEMuMl9ORkUkY29uZi5pbnQsT1JfTVBDMiRjb25mLmludCxPUl9NUEMyX05GRSRjb25mLmludCxPUl9NUEMyLjUkY29uZi5pbnQsT1JfTVBDMi41X05GRSRjb25mLmludCxPUl9NUEMzJGNvbmYuaW50LE9SX01QQzNfTkZFJGNvbmYuaW50LE9SX0NBREQuMTUkY29uZi5pbnQsT1JfQ0FERC4xNV9ORkUkY29uZi5pbnQsT1JfQ0FERDE1JGNvbmYuaW50LE9SX0NBREQxNV9ORkUkY29uZi5pbnQsT1JfQ0FERDIwJGNvbmYuaW50LE9SX0NBREQyMF9ORkUkY29uZi5pbnQsT1JfQ0FERDI1JGNvbmYuaW50LE9SX0NBREQyNV9ORkUkY29uZi5pbnQsT1JfQ0FERDMwJGNvbmYuaW50LE9SX0NBREQzMF9ORkUkY29uZi5pbnQsT1JfUkVWRUwuMC40NSRjb25mLmludCxPUl9SRVZFTC4wLjQ1X05GRSRjb25mLmludCxPUl9SRVZFTDAuNDUkY29uZi5pbnQsT1JfUkVWRUwwLjQ1X05GRSRjb25mLmludCxPUl9SRVZFTDAuNSRjb25mLmludCxPUl9SRVZFTDAuNV9ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjU1JGNvbmYuaW50LE9SX1JFVkVMMC41NV9ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjYkY29uZi5pbnQsT1JfUkVWRUwwLjZfTkZFJGNvbmYuaW50LE9SX1JFVkVMMC43JGNvbmYuaW50LE9SX1JFVkVMMC43X05GRSRjb25mLmludCxPUl9SRVZFTDAuOCRjb25mLmludCxPUl9SRVZFTDAuOF9ORkUkY29uZi5pbnQsT1JfQ0FERDE1UkVWRUwwLjQ1JGNvbmYuaW50LE9SX0NBREQxNVJFVkVMMC40NV9ORkUkY29uZi5pbnQsT1JfTVBDMkNBREQxNVJFVkVMMC40NSRjb25mLmludCxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSRjb25mLmludCxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgkY29uZi5pbnQsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSRjb25mLmludCkKICBkID0gYyhPUl9NUEMuMiRwLnZhbHVlLE9SX01QQy4yX05GRSRwLnZhbHVlLE9SX01QQzIkcC52YWx1ZSxPUl9NUEMyX05GRSRwLnZhbHVlLE9SX01QQzIuNSRwLnZhbHVlLE9SX01QQzIuNV9ORkUkcC52YWx1ZSxPUl9NUEMzJHAudmFsdWUsT1JfTVBDM19ORkUkcC52YWx1ZSxPUl9DQURELjE1JHAudmFsdWUsT1JfQ0FERC4xNV9ORkUkcC52YWx1ZSxPUl9DQUREMTUkcC52YWx1ZSxPUl9DQUREMTVfTkZFJHAudmFsdWUsT1JfQ0FERDIwJHAudmFsdWUsT1JfQ0FERDIwX05GRSRwLnZhbHVlLE9SX0NBREQyNSRwLnZhbHVlLE9SX0NBREQyNV9ORkUkcC52YWx1ZSxPUl9DQUREMzAkcC52YWx1ZSxPUl9DQUREMzBfTkZFJHAudmFsdWUsT1JfUkVWRUwuMC40NSRwLnZhbHVlLE9SX1JFVkVMLjAuNDVfTkZFJHAudmFsdWUsT1JfUkVWRUwwLjQ1JHAudmFsdWUsT1JfUkVWRUwwLjQ1X05GRSRwLnZhbHVlLE9SX1JFVkVMMC41JHAudmFsdWUsT1JfUkVWRUwwLjVfTkZFJHAudmFsdWUsT1JfUkVWRUwwLjU1JHAudmFsdWUsT1JfUkVWRUwwLjU1X05GRSRwLnZhbHVlLE9SX1JFVkVMMC42JHAudmFsdWUsT1JfUkVWRUwwLjZfTkZFJHAudmFsdWUsT1JfUkVWRUwwLjckcC52YWx1ZSxPUl9SRVZFTDAuN19ORkUkcC52YWx1ZSxPUl9SRVZFTDAuOCRwLnZhbHVlLE9SX1JFVkVMMC44X05GRSRwLnZhbHVlLE9SX0NBREQxNVJFVkVMMC40NSRwLnZhbHVlLE9SX0NBREQxNVJFVkVMMC40NV9ORkUkcC52YWx1ZSxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1JHAudmFsdWUsT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUkcC52YWx1ZSxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgkcC52YWx1ZSxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFJHAudmFsdWUpCiAgCiAgT1JzX21hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9zYW1wbGUwLjAxX2Jvb3RzdHJhcF9BZ2lsZW50U1N2Nl9yYXRpbzEyICA8LSBiaW5kX3Jvd3MoT1JzX21hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9zYW1wbGUwLjAxX2Jvb3RzdHJhcF9BZ2lsZW50U1N2Nl9yYXRpbzEyICx0aWJibGUoCiAgICAiRmlsdGVyaW5nIj1hLAogICAgIk9kZHNfcmF0aW8iPWIsCiAgICAiOTUlX0NJIj1jLAogICAgInBfdmFsdWUiPWQKICApCiAgKQp9CndyaXRlX3RzdihPUnNfbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX3NhbXBsZTAuMDFfYm9vdHN0cmFwX0FnaWxlbnRTU3Y2X3JhdGlvMTIsIHBhdGg9Ik9Sc19tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfc2FtcGxlMC4wMV9ib290c3RyYXAxMDAwX0FnaWxlbnRTU3Y2X3JhdGlvMTIudHN2IikKYGBgCg==