diff --git a/DESCRIPTION b/DESCRIPTION new file mode 100644 index 0000000..478f885 --- /dev/null +++ b/DESCRIPTION @@ -0,0 +1,19 @@ +Package: g3viz +Type: Package +Title: visulize MAF genomic annotation data +Version: 0.1.0 +Author: person("Xin", "Guo", email = "phoeguo@gmail.com", role=c("aut", "cre")) +Description: a warpper of g3viz javascript library to generate interactive "lollipop-style" diagram to visualize mutation data +License: MIT +Encoding: UTF-8 +LazyData: true +Depends: + R (>= 3.0.2) +Imports: + jsonlite +Suggests: + shiny (>= 1.0.0), + httpuv (>= 1.4.0) +URL: https://github.com/G3js/G3vizr +BugReports: https://github.com/G3js/G3vizr/issues +RoxygenNote: 6.0.1 diff --git a/NAMESPACE b/NAMESPACE new file mode 100644 index 0000000..ef4c46a --- /dev/null +++ b/NAMESPACE @@ -0,0 +1,16 @@ +# Generated by roxygen2: do not edit by hand + +export(formatCamelCase) +export(g3Lollipop) +export(g3LollipopOutput) +export(getDefaultMutationMappingTable) +export(getMutationsFromCbioportal) +export(hgnc2pfam) +export(hgnc2uniprot) +export(mapMutationTypeToMutationClass) +export(parseProteinChange) +export(readMAF) +export(renderG3Lollipop) +export(uniprot2pfam) +import(cgdsr) +import(htmlwidgets) diff --git a/R/formatCamelCase.R b/R/formatCamelCase.R new file mode 100644 index 0000000..08756d6 --- /dev/null +++ b/R/formatCamelCase.R @@ -0,0 +1,16 @@ +#' change to camel case +#' @export +formatCamelCase <- function(in.df){ + stopifnot(is.data.frame(in.df)) + + firstLetterCap <- function(x, sep = "_") { + s <- strsplit(x, sep)[[1]] + paste(toupper(substring(s, 1,1)), substring(s, 2), sep = "", collapse = sep) + } + + col.names <- colnames(in.df) + col.new.names <- sapply(col.names, firstLetterCap) + colnames(in.df) <- col.new.names + + in.df +} diff --git a/R/g3Lollipop.R b/R/g3Lollipop.R new file mode 100644 index 0000000..59be27f --- /dev/null +++ b/R/g3Lollipop.R @@ -0,0 +1,304 @@ +#' Plot Lollipop diagram plot for mutation data. +#' +#' @description +#' +#' @param mutation.dat Mutation data frame. +#' @param gene.symbol HGNC gene symbol. +#' @param gene.symbol.col Column name of Hugo gene symbols (e.g., TP53). Default \emph{Hugo_Symbol}. +#' @param variant.class.col Column name of variant class information +#' (e.g., \emph{Missense_Mutation}, \emph{Nonsense_Mutation}). Default \emph{Variant_Classification}. +#' @param protein.change.col Column name of protein change information (e.g., p.K960R, G658S, L14Sfs*15). +#' Default \emph{Protein_Change}. +#' @param mutation.class.col Column name of the parsed mutation class. Default \emph{Mutation_Class}. +#' @param aachange.pos.col Column name of the parsed amino-acid change position. Default \emph{AA_Position}. +#' @param factor.col column of classes in the plot legend. IF \code{NA}, use parsed \emph{Mutation_Class} column, +#' otherwise, use specified. Default \code{NA}. +#' +#' @param chart.with chart width. Default 800. +#' @param chart.type \emph{pie} or \emph{circle}. Default \emph{pie}. +#' @param chart.margin chart margin in \emph{list}. Default \code{list(left = 40, right = 20, top = 15, bottom = 25)}. +#' @param chart.background chart background. Default \emph{transparent}. +#' @param transition.time chart animation transition time in millisecond. Default 600. +#' +#' @param y.axis.label Y-axis label text. Default \emph{mutations}. +#' @param axis.label.font css font style shorthand +#' (\emph{font-style font-variant font-weight font-size/line-height font-family}). +#' Default \emph{"normal 12px Arial"}. +#' @param axis.label.color axis label text color. Default \emph{#4f4f4f}. +#' @param axis.label.alignment axis label text alignment (start/end/middle). Default \emph{middle}. +#' @param axis.label.dy text adjustment of axis label text. Default \emph{-2em}. +#' +#' @param legend.margin legend margin in \emph{list}. Default \code{list(left = 10, right = 0, top = 5, bottom = 5)}. +#' @param legend.interactive legend interactive mode. Default \code{TRUE}. +#' @param legend.title legend title. If \code{NA}, use \emph{factor.col}. Default is \code{NA}. +#' +#' @param lollipop.track.height height of lollipop track. Default 420. +#' @param lollipop.track.background background of lollipop track. Default \emph{rgb(244,244,244)} +#' @param lollipop.pop.min.size lollipop pop minimal size. Default 2. +#' @param lollipop.pop.max.size lollipop pop maximal size. Default 12. +#' @param lollipop.pop.info.limit threshold of lollipop pop size to show count information in middle of pop. Default 8. +#' @param lollipop.pop.info.color lollipop pop information text color. Default \emph{#EEE}. +#' @param lollipop.line.color lollipop line color. Default \emph{rgb(42,42,42)}. +#' @param lollipop.line.width lollipop line width. Default 0.5. +#' @param lollipop.circle.color lollipop circle border color. Default \emph{wheat}. +#' @param lollipop.circle.width lollipop circle border width. Default 0.5. +#' @param lollipop.label.ratio lollipop click-out label font size to circle size ratio. Default 1.4. +#' @param lollipop.label.min.font.size lollipop click-out label minimal font size. Default 10. +#' @param lollipop.color.scheme color scheme to fill lollipop pops. Default \emph{accent}. +#' +#' @param title.text title of chart. Default is empty. +#' @param title.font font of chart title. Default \emph{normal 16px Arial}. +#' @param title.color color of chart title. Default \emph{#424242}. +#' @param title.alignment text alignment of chart title (start/middle/end). Default \emph{middle}. +#' @param title.dy text adjustment of chart title. Default \emph{0.35em}. +#' +#' @param anno.height height of protein structure annotation track. Default 30. +#' @param anno.margin margin of protein structure annotation track. Default \code{list(top = 4, bottom = 0)}. +#' @param anno.background background of protein structure annotation track. Default \emph{transparent}. +#' @param anno.bar.fill background of protein bar in protein structure annotation track. Default \emph{#e5e3e1}. +#' @param anno.bar.margin margin of protein bar in protein structure annotation track. Default \code{list(top = 2, bottom = 2)}. +#' +#' @param domain.color.scheme color scheme of protein domains. Default \emph{category10}. +#' @param domain.margin margin of protein domains. Default \code{list(top = 0, bottom = 0)}. +#' @param domain.text.font domain label text font in shorthand format. Default \emph{normal 11px Arial}. +#' @param domain.text.color domain label text color. Default \emph{#f2f2f2}. +#' +#' @param legend if show legend. Default \code{TRUE}. +#' @param tooltip if show tooltip. Default \code{TRUE}. +#' @param brush if show brush. Default \code{TRUE}. +#' @param zoom if enable zoom feature. Default \code{TRUE}. +#' +#' @import htmlwidgets +#' +#' @export +g3Lollipop <- function(mutation.dat, + gene.symbol, + gene.symbol.col = "Hugo_Symbol", + variant.class.col = "Variant_Classification", + protein.change.col = "Protein_Change", + mutation.class.col = "Mutation_Class", + aa.pos.col = "AA_Position", + factor.col = NA, + # chart options + chart.width = 800, + chart.type = "pie", + chart.margin = list(left = 40, right = 20, top = 15, bottom = 25), + chart.background = "transparent", + transition.time = 600, + # axis + y.axis.label = "mutations", + axis.label.font = "normal 12px Arial", + axis.label.color = "#4f4f4f", + axis.label.alignment = "middle", + axis.label.dy = "-2em", + # legend + legend.margin = list(left = 10, right = 0, top = 5, bottom = 5), + legend.interactive = TRUE, + legend.title = NA, + # lollipop track + lollipop.track.height = 420, + lollipop.track.background = "rgb(244,244,244)", + # pop size + lollipop.pop.min.size = 2, + lollipop.pop.max.size = 12, + lollipop.pop.info.limit = 8, + lollipop.pop.info.color = "#EEE", + lollipop.line.color = "rgb(42,42,42)", + lollipop.line.width = 0.5, + lollipop.circle.color = "wheat", + lollipop.circle.width = 0.5, + lollipop.label.ratio = 1.4, + lollipop.label.min.font.size = 10, + lollipop.color.scheme = "accent", + # title text + title.text = "", + title.font = "normal 16px Arial", + title.color = "#424242", + title.alignment = "middle", + title.dy = "0.35em", + # annotation track + anno.height = 30, + anno.margin = list(top = 4, bottom = 0), + anno.background = "transparent", + anno.bar.fill = "#e5e3e1", + anno.bar.margin = list(top = 2, bottom = 2), + # domain + domain.color.scheme = "category10", + domain.margin = list(top = 0, bottom = 0), + domain.text.font = "normal 11px Arial", + domain.text.color = "#f2f2f2", + # others + legend = TRUE, + tooltip = TRUE, + brush = TRUE, + zoom = TRUE + ){ + # check gene.symbol + if(is.null(gene.symbol)){ + stop("Please provide a gene symbol") + } + + # check if all required columns exists in mut.dat + mut.required.col <- c(gene.symbol.col, variant.class.col, protein.change.col) + + missing.columns <- mut.required.col[!mut.required.col %in% colnames(mutation.dat)] + if(length(missing.columns) > 0){ + message(mutation.dat, " contains columns: ", paste(colnames(mutation.dat), collapse = ", ")) + stop("Some columns are missing in mutation data: ", paste(missing.columns, collapse = ", ")) + } + + # if need to check "mutation.class.col" or "aa.pos.col" + # parse Mutation_Class + if(!mutation.class.col %in% colnames(mutation.dat)){ + mutation.dat[, mutation.class.col] <- mapMutationTypeToMutationClass(mutation.dat[, variant.class.col]) + } + + # parse amino-acid position + if(!aa.pos.col %in% colnames(mutation.dat)){ + mutation.dat[, aa.pos.col] <- parseProteinChange(mutation.dat[, protein.change.col], + mutation.dat[, mutation.class.col]) + } + + # check if by.factor column exists + if(is.na(factor.col)){ + factor.col <- mutation.class.col + } + if(!factor.col %in% colnames(mutation.dat)){ + stop("No ", factor.col, " column in ", maf.file) + } + + if(is.na(legend.title)){ + legend.title <- factor.col + } + + # get mutation data for the given gene + snv.data.df <- mutation.dat[mutation.dat[, gene.symbol.col] == gene.symbol + & !is.na(mutation.dat[, aa.pos.col]), ] + snv.data.json <- jsonlite::toJSON(snv.data.df, pretty = FALSE, auto_unbox = TRUE) + + # get protein domain information + domain.data.json <- hgnc2pfam(gene.symbol) + + # read in data + snv.data.format <- list( + x = aa.pos.col, + y = protein.change.col, + factor = factor.col + ) + + snv.data.format.json <- jsonlite::toJSON(snv.data.format, pretty = FALSE, auto_unbox = TRUE) + + # domain data format + domain.data.format = list( + length = "length", + domainType = "pfam", + details = list( + start = "start", + end = "end", + name = "hmm.name" + ) + ) + domain.data.format.json = jsonlite::toJSON(domain.data.format, pretty = FALSE, auto_unbox = TRUE) + + # plot settings + plot.settings <- list( + chartWidth = chart.width, + chartType = chart.type, + chartMargin = chart.margin, + chartBackground = chart.background, + transitionTime = transition.time, + # axis + yAxisLabel = y.axis.label, + axisLabelFont = axis.label.font, + axisLabelColor = axis.label.color, + axisLabelAlignment = axis.label.alignment, + axisLabelDy = axis.label.dy, + # legend + legendMargin = legend.margin, + legendInteractive = legend.interactive, + legendTitle = legend.title, + # lollipop track + lollipopTrackHeight = lollipop.track.height, + lollipopTrackBackground = lollipop.track.background, + # pop size + lollipopPopMinSize = lollipop.pop.min.size, + lollipopPopMaxSize = lollipop.pop.max.size, + lollipopPopInfoLimit = lollipop.pop.info.limit, + lollipopPopInfoColor = lollipop.pop.info.color, + lollipopLineColor = lollipop.line.color, + lollipopLineWidth = lollipop.line.width, + lollipopCircleColor = lollipop.circle.color, + lollipopCircleWidth = lollipop.circle.width, + lollipopLabelRatio = lollipop.label.ratio, + lollipopLabelMinFontSize = lollipop.label.min.font.size, + lollipopColorScheme = lollipop.color.scheme, + # title text + titleText = title.text, + titleFont = title.font, + titleColor = title.color, + titleAlignment = title.alignment, + titleDy = title.dy, + # annotation track + annoHeight = anno.height, + annoMargin = anno.margin, + annoBackground = anno.background, + annoBarFill = anno.bar.fill, + annoBarMargin = anno.bar.margin, + # domain + domainColorScheme = domain.color.scheme, + domainMargin = domain.margin, + domainTextFont = domain.text.font, + domainTextColor = domain.text.color, + # others + legend = legend, + tooltip = tooltip, + brush = brush, + zoom = zoom + ) + + plot.settings.json <- jsonlite::toJSON(plot.settings, pretty = FALSE, auto_unbox = TRUE) + + x <- list( + domainData = domain.data.json, + domainDataFormat = domain.data.format.json, + snvData = snv.data.json, + snvDataFormat = snv.data.format.json, + plotSettings = plot.settings.json + ) + + htmlwidgets::createWidget( + name = "g3Lollipop", + x, + package = "g3viz" + ) + +# plot.settings.json +} + +#' Shiny bindings for g3-lollipop +#' +#' Output and render functions for using g3-lollipop within Shiny +#' applications and interactive Rmd documents. +#' +#' @param outputId output variable to read from +#' @param width,height Must be a valid CSS unit (like \code{'100\%'}, +#' \code{'400px'}, \code{'auto'}) or a number, which will be coerced to a +#' string and have \code{'px'} appended. +#' @param expr An expression that generates a g3-lollipop +#' @param env The environment in which to evaluate \code{expr}. +#' @param quoted Is \code{expr} a quoted expression (with \code{quote()})? This +#' is useful if you want to save an expression in a variable. +#' +#' @name g3-lollipop-shiny +#' +#' @export +g3LollipopOutput <- function(outputId, width = '100%', height = '400px'){ + htmlwidgets::shinyWidgetOutput(outputId, 'g3-lollipop', width, height, package = 'g3viz') +} + +#' @rdname g3-lollipop-shiny +#' @export +renderG3Lollipop <- function(expr, env = parent.frame(), quoted = FALSE) { + if (!quoted) { expr <- substitute(expr) } # force quoted + htmlwidgets::shinyRenderWidget(expr, g3-lollipopOutput, env, quoted = TRUE) +} diff --git a/R/getDefaultMutationMappingTable.R b/R/getDefaultMutationMappingTable.R new file mode 100644 index 0000000..938c6d9 --- /dev/null +++ b/R/getDefaultMutationMappingTable.R @@ -0,0 +1,62 @@ +#' Default mapping between mutation type to mutation class +#' +#' @description Return the default mapping table between mutation type to mutation class +#' @details +#' Mutation type or variant classificaiton, generally with column named \emph{Variant_Classficiation} or +#' \emph{Mutation_Type} in MAF file, can be classificed as follows +#' \enumerate{ +#' \item Missense +#' \itemize{ +#' \item \emph{Missense_Mutation} --- the point mutation alters the protein structure by one amino acid. +#' See \url{https://en.wikipedia.org/wiki/Missense_mutation}. +#' } +#' \item Inframe +#' \itemize{ +#' \item \emph{In_Frame_Del} --- deletion that keeps the sequence in frame +#' \item \emph{In_Frame_Ins} --- insertion that keeps the sequence in frame +#' \item \emph{Silent} --- variant is in coding region of the chosen transcript, but protein structure is identical (i.e., a synonymous mutation) +#' \item \emph{Targeted_Region} --- targeted region +#' } +#' \item Truncating +#' \itemize{ +#' \item \emph{Frame_Shift_Ins} --- insertion that moves the coding sequence out of frame. +#' See \url{https://en.wikipedia.org/wiki/Frameshift_mutation}. +#' \item \emph{Frame_Shift_Del} --- deletion that moves the coding sequence out of frame. +#' See \url{https://en.wikipedia.org/wiki/Frameshift_mutation}. +#' \item \emph{Nonsense_Mutation} --- a premature stop codon is created by the variant. +#' See \url{https://en.wikipedia.org/wiki/Nonsense_mutation}. +#' \item \emph{Nonstop_Mutation} --- variant removes stop codon. +#' \item \emph{Splice_Site} --- the variant is within two bases of a splice site. +#' \item \emph{Splice_Region} --- the variant is within splice reguion. +#' } +#' \item Other +#' \itemize{ +#' \item \emph{5'UTR} --- variant is on the 5'UTR for the chosen transcript +#' \item \emph{3'UTR} --- variant is on the 3'UTR for the chosen transcript +#' \item \emph{5'Flank} --- the variant is upstream of the chosen transcript (within 3kb) +#' \item \emph{3'Flank} --- the variant is downstream of the chosen transcript (within 3kb) +#' \item \emph{Fusion} --- gene fusion +#' \item \emph{IGR} --- intergenic region. Does not overlap any transcript. +#' \item \emph{Intron} --- variant lies between exons within the bounds of the chosen transcript. +#' \item \emph{Translation_Start_Site} --- varaint in translation start site. +#' \item \emph{De_novo_Start_InFrame} --- New start codon is created by the given variant using the chosen transcript. +#' However, it is in frame relative to the coded protein. +#' \item \emph{De_novo_Start_OutOfFrame} --- New start codon is created by the given variant using the chosen transcript. +#' However, it is out of frame relative to the coded protein. +#' \item \emph{Start_Codon_SNP} --- point mutation that overlaps the start codon. +#' \item \emph{Start_Codon_Ins} --- insertion that overlaps the start codon. +#' \item \emph{Start_Codon_Del} --- seletion that overlaps the start codon. +#' \item \emph{RNA} --- variant lies on one of the RNA transcripts. +#' \item \emph{lincRNA} --- variant lies on one of the lincRNAs. +#' \item \emph{Unknown} --- Unknown +#' } +#' } +#' +#' @return A data frame with headers of \emph{Mutation_Type}, \emph{Mutation_Class}, \emph{Short_Name} +#' @export +getDefaultMutationMappingTable <- function(){ + mutation.table.file <- "mutation_type_to_class_mapping.RDS" + mutation.table.rds <- system.file('data', mutation.table.file, package = 'g3viz') + mutation.table.df <- readRDS(mutation.table.rds) + mutation.table.df +} diff --git a/R/getMutationsFromCbioportal.R b/R/getMutationsFromCbioportal.R new file mode 100644 index 0000000..9b642fa --- /dev/null +++ b/R/getMutationsFromCbioportal.R @@ -0,0 +1,122 @@ +#' Query cancer genomic mutation data from cBioPortal +#' +#' @description Retrieve and parse mutation data from cBioPortal +#' by the given cBioPortal cancer study ID and the gene symbol. +#' @param study.id cbioprotal study ID +#' @param gene.symbol HGNC gene symbol. +#' @param output.csv if specified, output to a file in \emph{csv} format. Default is \code{NA}. +#' @param mutation.type.to.class.df mapping table from mutation type to class. +#' \code{\link{getDefaultMutationMappingTable}} for details. +#' Default \code{NULL}, indicating to use \code{\link{getDefaultMutationMappingTable}}. +#' @examples +#' # list all cbioportal studies +#' library(cgdsr) +#' cgds <- CGDS("http://www.cbioportal.org/public-portal/") +#' all.studies <- getCancerStudies(cgds) +#' +#' # pick a "caner_study_id" (contain a mutation data set) +#' # pick a primary HGNC gene symbol to query +#' mutation.dat <- getMutationsFromCbioportal("msk_impact_2017", "TP53") +#' mutation.dat <- getMutationsFromCbioportal("all_stjude_2016", "TP53") +#' @import cgdsr +#' @return a data frame with columns +#' \itemize{ +#' \item \emph{Hugo_Symbol} --- Hugo gene symbol +#' \item \emph{Protein_Change} --- Protein change information (cBioprotal uses \emph{HGVSp} format) +#' \item \emph{Sample_ID} --- Sample ID +#' \item \emph{Mutation_Type} --- mutation type, i.e., +#' \item \emph{Chromosome} --- chromosome +#' \item \emph{Start_Position} --- start position +#' \item \emph{End_Position} --- end position +#' \item \emph{Reference_Allele} --- reference allele +#' \item \emph{Variant_Allele} --- variant allele +#' \item \emph{Mutation_Class} --- mutation class (e.g., truncating/misense/Inframe/Other) +#' \item \emph{AA_Position} --- amino-acid postion of the variant; if the variant is not in protein-conding region, \code{NA} +#' } +#' @export +getMutationsFromCbioportal <- function(study.id, gene.symbol, output.file = NA, + mutation.type.to.class.df = NULL){ + # test + # study.id = "all_stjude_2016" + # gene.symbol = "TP53" + # output.file = NA + # mutation.type.to.class.df = NULL + + # ============================= + # define mutation columns + aa.pos.col <- "AA_Position" + mutation.class.col <- "Mutation_Class" + + # ======================== + # cgds server + cgds <- cgdsr::CGDS("http://www.cbioportal.org/public-portal/") + + # ======================== + # get study information + genetic.profiles <- cgdsr::getGeneticProfiles(cgds, study.id) + message("Found study ", study.id) + + # ======================== + # check if mutation informaiton is available in the study + profile.col <- "genetic_profile_id" + mutation.idx <- grep(pattern = 'mutations$', x = genetic.profiles[, profile.col], fixed = FALSE) + if(is.integer(mutation.idx) && length(mutation.idx) == 0L){ + stop("Can not find mutation information in ", study.id, " study") + } + mutation.profile <- genetic.profiles[mutation.idx, profile.col] + message("Found mutation data set ", mutation.profile) + + # ======================== + # get case list + case.list.details <- cgdsr::getCaseLists(cgds, study.id)[mutation.idx, ] + mutation.case.list.id <- case.list.details$case_list_id + num.case <- length(strsplit(case.list.details$case_ids, " ")[[1]]) + message(num.case, " cases in this study") + + extended.mutation.df <- cgdsr::getMutationData(cgds, mutation.case.list.id, mutation.profile, gene.symbol) + # ========================= + # parse mutation data columns + required.colnames <- c("gene_symbol", "amino_acid_change", "case_id", "mutation_type", + "chr", "start_position", "end_position", + "reference_allele", "variant_allele") + + mapped.colnames <- c("Hugo_Symbol", "Protein_Change", "Sample_ID", "Mutation_Type", + "Chromosome", "Start_Position", "End_Position", + "Reference_Allele", "Variant_Allele") + + # check if any columns are missing + missing.columns <- required.colnames[!required.colnames %in% colnames(extended.mutation.df)] + if(length(missing.columns) > 0){ + stop("Some columns are missing: ", paste(missing.columns, collapse =", ")) + } + + # rename headers according to cbioportal MutationMapper + # url: http://www.cbioportal.org/mutation_mapper.jsp + mutation.df <- extended.mutation.df[, required.colnames] + colnames(mutation.df) <- mapped.colnames + + # ============================= + # map from mutation type to mutation class + mutation.df[, mutation.class.col] <- mapMutationTypeToMutationClass(mutation.df[, "Mutation_Type"], + mutation.type.to.class.df) + + # ============================= + # parse amino acid position + mutation.df[, aa.pos.col] <- parseProteinChange(mutation.df[, "Protein_Change"], + mutation.df[, mutation.class.col]) + + mutation.df <- mutation.df[order(mutation.df[, aa.pos.col], + mutation.df[, "Protein_Change"], decreasing = FALSE), ] + + if(!is.na(output.file)){ + message("Write mutation data to ", output.file) + write.table(mutation.df, file = output.file, sep = "\t", quote = FALSE, col.name = TRUE, row.name = FALSE) + } + + mutation.df +} + +# study.id <- "msk_impact_2017" +# gene.symbol <- "TP53" +# mutation.df <- getMutationsFromCbioportal(study.id, gene.symbol, paste0(gene.symbol, "-", study.id, ".csv")) +# mutation.dat <- getMutationsFromCbioportal("all_stjude_2016", "TP53") diff --git a/R/guessMAFColumn.R b/R/guessMAFColumn.R new file mode 100644 index 0000000..0b5a0da --- /dev/null +++ b/R/guessMAFColumn.R @@ -0,0 +1,2 @@ +guessMAFColumn <- function(maf.df, column.type){ +} diff --git a/R/hgnc2pfam.R b/R/hgnc2pfam.R new file mode 100644 index 0000000..6c782e6 --- /dev/null +++ b/R/hgnc2pfam.R @@ -0,0 +1,89 @@ +#' Map from Hugo symbol to Pfam domains +#' +#' @description Mapping from Hugo symbol to Pfam-A domain compostion. +#' If the given Hugo symbol has multple UniProt ID mappings, +#' and \code{guess == TRUE}, +#' the longest UniProt protein is selected. Return is either a list of a JSON. +#' @examples +#' # general usage +#' hgnc2pfam("TP53") +#' hgnc2pfam("TP53", output.format = "json") +#' hgnc2pfam("TP53", output.format = "list") +#' hgnc2pfam("TP53", output.format = "json", uniprot.id = "P84996") # OK +#' +#' # for gene mapping to multiple uniprot enties +#' hgnc2pfam("GNAS", guess = TRUE) +#' hgnc2pfam("GNAS", guess = FALSE) +#' hgnc2pfam("GNAS", output.format = "list") +#' hgnc2pfam("GNAS", output.format = "list", uniprot.id = "P84996") +#' hgnc2pfam("GNAS", output.format = "list", uniprot.id = "P84997") # not exists, returns FALSE +#' @param hgnc.symbol primary Hugo symbol +#' @param output.format output format: JSON or list +#' @param uniprot.id UniProt ID, in case that gene symbol maps to multiple UniProt entries. +#' @param guess if the given Hugo symbol links to multiple UniProt IDs, +#' choose the longest one (\code{guess == TRUE}); +#' otherwise \code{NA} (\code{guess == FALSE}). Default \code{TRUE}. +#' @return A list or a Json with attributes: +#' \emph{symbol}, \emph{uniprot}, \emph{length}, and a list of \emph{pfam} entries, including +#' \emph{hmm.acc}, \emph{hmm.name}, \emph{start}, \emph{end}, and \emph{type}. +#' @export +hgnc2pfam <- function(hgnc.symbol, guess = TRUE, uniprot.id = NA, output.format = "json"){ + # if hgnc.symbol is missing + if(missing(hgnc.symbol)){ + stop("Missing hgnc.symbol: need to specify a HUGO symbol.") + } + + # check output.format + output.format <- tolower(output.format) + if(!output.format %in% c("json", "list")){ + stop("Output.format should be either json or list.") + } + + # get uniprot ids + uniprot.df = hgnc2uniprot(hgnc.symbol) + + if(nrow(uniprot.df) > 1){ + msg <- paste(capture.output(print.data.frame(uniprot.df, row.names = FALSE)), collapse = "\n") + message(hgnc.symbol, " maps to multiple UniProt entries: ", "\n", msg) + } + + if(!is.na(uniprot.id)){ + if(uniprot.id %in% uniprot.df$uniprot){ + message("Choose ", uniprot.id) + uniprot.df = subset(uniprot.df, uniprot == uniprot.id) + } else { + stop(uniprot.id, " is not mapped to ", hgnc.symbol) + } + } + + if(nrow(uniprot.df) == 1){ + pfam.df <- uniprot2pfam(uniprot.df[1, "uniprot"]) + } else if(nrow(uniprot.df) == 0){ + stop(hgnc.symbol, " has no uniprot mappings (wrong name or non-protein-coding gene).") + } else { + if(guess){ + max.idx <- which(uniprot.df$length == max(uniprot.df$length))[1] + uniprot.df <- uniprot.df[max.idx, ] + pfam.df <- uniprot2pfam(uniprot.df[1, "uniprot"]) + + warning("Pick: ", uniprot.df[1, "uniprot"]) + } else { + pfam.df <- NA + } + } + + if(is.data.frame(pfam.df)){ + pfam.df = pfam.df[, c("hmm.acc", "hmm.name", "start", "end", "type")] + pfam.df = pfam.df[!is.na(pfam.df[,"hmm.acc"]), ] + } + # remove empty entries + + output.list <- as.list(uniprot.df) + output.list$pfam <- pfam.df + + if(output.format == "json"){ + jsonlite::toJSON(output.list, pretty = FALSE, auto_unbox = TRUE) + } else { + output.list + } +} diff --git a/R/hgnc2uniprot.R b/R/hgnc2uniprot.R new file mode 100644 index 0000000..3885233 --- /dev/null +++ b/R/hgnc2uniprot.R @@ -0,0 +1,35 @@ +#' Mapping from Hugo symbol to UniProt IDs +#' +#' @description Mapping from Hugo Symbol to UniProt ID using internal mapping table. +#' Return a data frame with columns \emph{symbol} (Hugo symbol), \emph{uniprot} (UniProt ID), +#' and \emph{length} (protein length). +#' @param hgnc.symbol primary HUGO symbol +#' @return a data frame with columns \emph{symbol} (Hugo symbol), \emph{uniprot} (UniProt ID), +#' and \emph{length} (protein length). +#' @examples +#' # maps to single UniProt entry +#' hgnc2uniprot("TP53") +#' +#' # maps to multiple UniProt entries +#' hgnc2uniprot("GNAS") +#' hgnc2uniprot("AKAP7") +#' +#' @export +hgnc2uniprot <- function(hgnc.symbol){ + # HLA-B: 174 + # HLA-A: 35 + # HLA-C: 14 + # GNAS: 4 + # AKAP7: 2 + if(missing(hgnc.symbol)){ + stop("Missing hgnc.symbol: need to specify a HUGO symbol.") + } + + hgnc2pfam.file = system.file('data', 'hgnc2pfam.RDS', package = 'g3viz') + #hgnc2pfam.file = "data/hgnc2pfam.RDS" + hgnc2pfam.df = readRDS(file = hgnc2pfam.file) + + uniprot.df = unique(subset(hgnc2pfam.df, symbol == hgnc.symbol)[, c("symbol", "uniprot", "length")]) + + uniprot.df +} diff --git a/R/mapMutationTypeToMutationClass.R b/R/mapMutationTypeToMutationClass.R new file mode 100644 index 0000000..59a2604 --- /dev/null +++ b/R/mapMutationTypeToMutationClass.R @@ -0,0 +1,34 @@ +#' Map from mutation type to mutation class +#' +#' @description Map from mutation type to mutation class. Refer to \code{\link{getDefaultMutationMappingTable}} +#' for more details. +#' +#' @param mutation.type.vec a vector of mutation type information +#' @param mutation.tytpe.to.class.df Data frame mapping from mutation tytpe (header \emph{Mutation_Type}) +#' to mutation class (header \emph{Mutation_Class}). +#' Default is \code{\link{getDefaultMutationMappingTable}}. +#' @return a vector of mapped mutation class information +#' @export +mapMutationTypeToMutationClass <- function(mutation.type.vec, mutation.type.to.class.df = NULL){ + # ============================ + # read variant_type to variant_class mapping + if(is.null(mutation.type.to.class.df)){ + Map.df <- getDefaultMutationMappingTable() + } else { + Map.df = mutation.type.to.class.df + } + mutation.type.vec <- as.character(mutation.type.vec) + + # annotate "Mutation_Class": Truncating / Missense / Inframe / Other + unkwnon.vc <- unique(mutation.type.vec[!mutation.type.vec %in% Map.df[, "Mutation_Type"]]) + if(length(unkwnon.vc) > 0){ + warning("Unknown variant classification: ", paste(unkwnon.vc, collapse =", ")) + } + + # Parse "Mutation_Class" information. Default "Other" + mutation.class.vec <- rep(NA, length(mutation.type.vec)) + mutation.class.vec <- Map.df[match(mutation.type.vec, Map.df$Mutation_Type), "Mutation_Class"] + mutation.class.vec +} + + diff --git a/R/parseProteinChange.R b/R/parseProteinChange.R new file mode 100644 index 0000000..1322836 --- /dev/null +++ b/R/parseProteinChange.R @@ -0,0 +1,31 @@ +#' Extract \emph{amino_acid_position} from \emph{Protein_Change} +# +#' @description Parse \emph{amino_acid_position} according to HGVSp format. \cr +#' For example, \emph{p.Q16Rfs*28}, amino-acid position is 16. +#' See \url{http://varnomen.hgvs.org/recommendations/protein/}. \cr +#' See \url{https://www.hgvs.org/mutnomen/recs-prot.html}. \cr +#' @export +parseProteinChange <- function(protein.change.vec, mutation.class.vec) { + if(length(protein.change.vec) != length(mutation.class.vec)){ + stop("Length of Protein_Change is not equal to the length of Mutation_Class") + } + + protein.change.vec <- as.character(protein.change.vec) + mutation.class.vec <- as.character(mutation.class.vec) + + # parse amino acid position + aa.pos.vec <- as.numeric(rep(NA, length(protein.change.vec))) + + for(idx in 1:length(protein.change.vec)){ + d.pc <- protein.change.vec[idx] + d.mc <- mutation.class.vec[idx] + + if(!(is.na(d.mc) || d.mc == "Other" || d.mc == "")){ + # extract the first numeric value + aa.pos.vec[idx] = as.numeric(stringr::str_extract_all(d.pc, "[0-9]+")[[1]])[1] + } + # cat(d.pc, " ==> ", aa.pos.vec[idx], "\n") + } + + aa.pos.vec +} diff --git a/R/readMAF.R b/R/readMAF.R new file mode 100644 index 0000000..28762c3 --- /dev/null +++ b/R/readMAF.R @@ -0,0 +1,71 @@ +#' Read MAF file +#' +#' @description Read MAF file. +#' For MAF format specification, check \url{https://docs.gdc.cancer.gov/Data/File_Formats/MAF_Format/}. +#' +#' @param maf.file MAF file name. Gunzipped input file allowed, with ".gz" file extension. +#' @param gene.symbol.col Column name of Hugo gene symbols (e.g., TP53). Default \emph{Hugo_Symbol}. +#' @param variant.class.col Column name of variant class information +#' (e.g., \emph{Missense_Mutation}, \emph{Nonsense_Mutation}). Default \emph{Variant_Classification}. +#' @param protein.change.col Column name of protein change information (e.g., p.K960R, G658S, L14Sfs*15). +#' Default \emph{Protein_Change}. +#' @param mutation.class.col Column name of the parsed mutation class. Default \emph{Mutation_Class}. +#' @param aachange.pos.col Column name of the parsed amino-acid change position. Default \emph{AA_Position}. +#' @param mutation.type.to.class.df mapping table from mutation type to class. +#' \code{\link{getDefaultMutationMappingTable}} for details. +#' Default \code{NULL}, indicating to use \code{\link{getDefaultMutationMappingTable}}. +#' @return A data frame +#' @export +readMAF <- function(maf.file, + gene.symbol.col = "Hugo_Symbol", + variant.class.col = "Variant_Classification", + protein.change.col = "Protein_Change", + mutation.class.col = "Mutation_Class", + aa.pos.col = "AA_Position", + mutation.type.to.class.df = NULL) { + if(missing(maf.file)){ + stop("maf.file is missing") + } + + # =============================== + # TODO: + # - check "Mutation_Status" as "Somatic" + # =============================== + # read data in + if(grepl(pattern = 'gz$', maf.file)){ + suppressWarnings( + maf.df <- read.table(gzfile(description = maf.file), header = TRUE, sep = "\t", quote = "") + ) + } else { + maf.df <- read.table(header = TRUE, sep = "\t", quote = "") + } + + # ============================= + # Change column names to camel format + #maf.df <- formatCamelCase(maf.df) + + # ============================= + # check if all required columns exist + maf.required.col <- c(gene.symbol.col, variant.class.col, protein.change.col) + missing.columns <- maf.required.col[!maf.required.col %in% colnames(maf.df)] + if(length(missing.columns) > 0){ + message(maf.file, " contains columns: ", paste(colnames(maf.df), collapse = ", ")) + stop("Some columns are missing in MAF file: ", paste(missing.columns, collapse = ", ")) + } + + # ============================ + # parse Mutation_Class + maf.df[, mutation.class.col] <- mapMutationTypeToMutationClass(maf.df[, variant.class.col], + mutation.type.to.class.df) + + # ============================ + # parse amino-acid position + maf.df[, aa.pos.col] <- parseProteinChange(maf.df[, protein.change.col], + maf.df[, mutation.class.col]) + + # ============================ + # sort according to + maf.df <- maf.df[order(maf.df[, aa.pos.col], maf.df[, gene.symbol.col], maf.df[, protein.change.col], decreasing = FALSE), ] + + maf.df +} diff --git a/R/uniprot2pfam.R b/R/uniprot2pfam.R new file mode 100644 index 0000000..2bae4f0 --- /dev/null +++ b/R/uniprot2pfam.R @@ -0,0 +1,33 @@ +#' From UniProt ID to Pfam-A domain composition +#' +#' @description Map from UniProt ID to Pfam-A domain compostion. +#' @param uniprot.id UniProt ID +#' @return a data frame with columns +#' \itemize{ +#' \item \emph{uniprot} --- UniProt ID +#' \item \emph{length} --- protein length +#' \item \emph{hmm.acc} --- accession number of Pfam HMM model, e.g., PF08563 +#' \item \emph{hmm.name} --- Pfam name, e.g., P53_TAD +#' \item \emph{start} --- Pfam domain start postion +#' \item \emph{end} --- Pfam domain end position +#' \item \emph{type} --- Pfam type, including domain/motif/family +#' } +#' @export +uniprot2pfam <- function(uniprot.id){ + # Q5VWM5: PRAMEF9; PRAMEF15 + # O60224: SSX4; SSX4B + if(missing(uniprot.id)){ + stop("Missing uniprot.id: need to specify a UniPort ID (HUMAN)") + } + + hgnc2pfam.file = system.file('data', 'hgnc2pfam.RDS', package = 'g3viz') + #hgnc2pfam.file = "data/hgnc2pfam.RDS" + hgnc2pfam.df = readRDS(file = hgnc2pfam.file) + + uniprot.df = unique(subset(hgnc2pfam.df, uniprot == uniprot.id)[, c("uniprot", "length", "hmm.acc", "hmm.name", "start", "end", "type")]) + + # sort by domain position + uniprot.df <- uniprot.df[with(uniprot.df, order(start, end)),] + + uniprot.df +} diff --git a/data-raw/9606.tsv.gz b/data-raw/9606.tsv.gz new file mode 100644 index 0000000..479b8eb Binary files /dev/null and b/data-raw/9606.tsv.gz differ diff --git a/data-raw/generate_hgnc2pfam.R b/data-raw/generate_hgnc2pfam.R new file mode 100644 index 0000000..8872e5a --- /dev/null +++ b/data-raw/generate_hgnc2pfam.R @@ -0,0 +1,57 @@ +#' HUGO gene to Pfam mapping +#' +#' @description Generate HUGO gene symbol to Pfam mapping table from UniProt and Pfam databases +generateHgnc2pfam <- function() { + message("Download data from UniProt website ...") + + uniprot.file <- gzcon(file("data-raw/uniprot.tab.gz", "r")) + uniprot.txt <- readLines(uniprot.file) + uniprot.df <- read.table(textConnection(uniprot.txt), + sep = "\t", + quote = "", + comment.char = "#", + stringsAsFactors = FALSE, + header = TRUE) + colnames(uniprot.df) <- c("uniprot", "length", "symbol") + + # split multiple entries in symbol column + uniprot.single.df <- subset(uniprot.df, !grepl(";", symbol)) + uniprot.to.parse.df <- subset(uniprot.df, grepl(";", symbol)) + for(idx in 1:nrow(uniprot.to.parse.df)){ + symbols <- strsplit(uniprot.to.parse.df[idx, "symbol"], "; ")[[1]] + uniprot.single.df <- rbind(uniprot.single.df, + data.frame(uniprot = uniprot.to.parse.df[idx, "uniprot"], + length = uniprot.to.parse.df[idx, "length"], + symbol = symbols) + ) + } + + # pfam (human 9606) + message("Download Pfam data from Pfam website ...") + pfam.file <- gzcon(file("data-raw/9606.tsv.gz", "r")) + pfam.txt <- readLines(pfam.file) + + pfam.df <- read.table( + file = textConnection(pfam.txt), + sep = "\t", + quote = "", + comment.char = "#", + stringsAsFactors = FALSE, + header = FALSE + ) + + colnames(pfam.df) = c("id", "align.start", "align.end", "start", "end", + "hmm.acc", "hmm.name", "type", "hmm.start", "hmm.end", "hmm.length", + "bit.score", "e.value", "clan") + pfam.sub.df = pfam.df[, c("id", "start", "end", "hmm.acc", "hmm.name", "type")] + + # merge by UniProt + hgnc2pfam.df = merge(uniprot.single.df, pfam.sub.df, by.x="uniprot", by.y = "id", all.x=TRUE, sort = FALSE) + hgnc2pfam.df = hgnc2pfam.df[with(hgnc2pfam.df, order(symbol, uniprot, start, end)), ] + hgnc2pfam.df = hgnc2pfam.df[, c("symbol", "uniprot", "length", + "start", "end", "hmm.acc", "hmm.name", "type")] + + + message("Generate data ...") + saveRDS(hgnc2pfam.df, "data/hgnc2pfam.RDS") +} diff --git a/data-raw/uniprot.tab.gz b/data-raw/uniprot.tab.gz new file mode 100644 index 0000000..ea98612 Binary files /dev/null and b/data-raw/uniprot.tab.gz differ diff --git a/data/hgnc2pfam.RDS b/data/hgnc2pfam.RDS new file mode 100644 index 0000000..246199c Binary files /dev/null and b/data/hgnc2pfam.RDS differ diff --git a/data/mutation_type_to_class_mapping.RDS b/data/mutation_type_to_class_mapping.RDS new file mode 100644 index 0000000..8722b8d Binary files /dev/null and b/data/mutation_type_to_class_mapping.RDS differ diff --git a/g3viz.Rproj b/g3viz.Rproj new file mode 100644 index 0000000..2176bb8 --- /dev/null +++ b/g3viz.Rproj @@ -0,0 +1,21 @@ +Version: 1.0 + +RestoreWorkspace: No +SaveWorkspace: No +AlwaysSaveHistory: No + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: knitr +LaTeX: pdfLaTeX + +AutoAppendNewline: Yes +StripTrailingWhitespace: Yes + +BuildType: Package +PackageUseDevtools: Yes +PackageInstallArgs: --no-multiarch --with-keep.source +PackageRoxygenize: namespace diff --git a/inst/extdata/APL_primary.maf.gz b/inst/extdata/APL_primary.maf.gz new file mode 100644 index 0000000..b1596f5 Binary files /dev/null and b/inst/extdata/APL_primary.maf.gz differ diff --git a/inst/extdata/TP53-msk_impact_2017-parsed.tsv b/inst/extdata/TP53-msk_impact_2017-parsed.tsv new file mode 100644 index 0000000..98b433e --- /dev/null +++ b/inst/extdata/TP53-msk_impact_2017-parsed.tsv @@ -0,0 +1,4952 @@ +Protein_Change Mutation_Type Mutation_Class AA_Position +P13Lfs*2 Frame_Shift_Del Truncating 13 +L14Sfs*15 Frame_Shift_Ins Truncating 14 +Q16Rfs*28 Frame_Shift_Del Truncating 16 +T18Hfs*26 Frame_Shift_Del Truncating 18 +F19Kfs*24 Frame_Shift_Del Truncating 19 +S20Qfs*24 Frame_Shift_Del Truncating 20 +D21Tfs*23 Frame_Shift_Del Truncating 21 +L22Yfs*22 Frame_Shift_Del Truncating 22 +L22Yfs*22 Frame_Shift_Del Truncating 22 +X23_splice Splice_Site Truncating 23 +W23* Nonsense_Mutation Truncating 23 +X23_splice Splice_Site Truncating 23 +K24Nfs*20 Frame_Shift_Del Truncating 24 +X25_splice Splice_Site Truncating 25 +X26_splice Splice_Site Truncating 26 +P27S Missense_Mutation Missense 27 +P27S Missense_Mutation Missense 27 +P27Lfs*17 Frame_Shift_Del Truncating 27 +P27Lfs*17 Frame_Shift_Del Truncating 27 +P27Lfs*17 Frame_Shift_Del Truncating 27 +P27Lfs*17 Frame_Shift_Del Truncating 27 +P27Lfs*17 Frame_Shift_Del Truncating 27 +P27Lfs*17 Frame_Shift_Del Truncating 27 +E28Cfs*63 Splice_Site Truncating 28 +N29Kfs*14 Frame_Shift_Ins Truncating 29 +N29Kfs*13 Frame_Shift_Del Truncating 29 +N30Kfs*13 Frame_Shift_Ins Truncating 30 +L32Cfs*12 Frame_Shift_Del Truncating 32 +X32_splice Splice_Site Truncating 32 +X32_splice Splice_Site Truncating 32 +X32_splice Splice_Site Truncating 32 +X32_splice Splice_Site Truncating 32 +X32_splice Splice_Site Truncating 32 +X32_splice Splice_Site Truncating 32 +X32_splice Splice_Site Truncating 32 +X32_splice Splice_Site Truncating 32 +X32_splice Splice_Site Truncating 32 +X32_splice Splice_Site Truncating 32 +X32_splice Splice_Site Truncating 32 +X32_splice Splice_Site Truncating 32 +X32_splice Splice_Site Truncating 32 +L32Pfs*11 Frame_Shift_Del Truncating 32 +X32_splice Splice_Site Truncating 32 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +X33_splice Splice_Site Truncating 33 +L35Pfs*10 Frame_Shift_Ins Truncating 35 +L35Cfs*9 Frame_Shift_Del Truncating 35 +L35Cfs*9 Frame_Shift_Del Truncating 35 +L35Cfs*9 Frame_Shift_Del Truncating 35 +L35Cfs*9 Frame_Shift_Del Truncating 35 +L35Ffs*8 Frame_Shift_Ins Truncating 35 +L35* Nonsense_Mutation Truncating 35 +L35Sfs*9 Frame_Shift_Del Truncating 35 +L35Pfs*10 Frame_Shift_Ins Truncating 35 +P36Afs*7 Frame_Shift_Ins Truncating 36 +P36Afs*7 Frame_Shift_Ins Truncating 36 +P36Rfs*8 Frame_Shift_Del Truncating 36 +P36Rfs*8 Frame_Shift_Del Truncating 36 +P36Rfs*7 Frame_Shift_Ins Truncating 36 +P36Rfs*7 Frame_Shift_Ins Truncating 36 +P36Rfs*7 Frame_Shift_Ins Truncating 36 +P36L Missense_Mutation Missense 36 +S37Cfs*7 Frame_Shift_Del Truncating 37 +Q38* Nonsense_Mutation Truncating 38 +Q38Wfs*4 Frame_Shift_Del Truncating 38 +A39Qfs*5 Frame_Shift_Del Truncating 39 +A39S Missense_Mutation Missense 39 +A39Mfs*3 Frame_Shift_Del Truncating 39 +D41Gfs*2 Frame_Shift_Ins Truncating 41 +D41H Missense_Mutation Missense 41 +D42Qfs*5 Frame_Shift_Ins Truncating 42 +L43* Frame_Shift_Del Truncating 43 +L43* Frame_Shift_Del Truncating 43 +L43* Frame_Shift_Del Truncating 43 +L43Afs*7 Frame_Shift_Del Truncating 43 +L43* Nonsense_Mutation Truncating 43 +M44Afs*7 Frame_Shift_Del Truncating 44 +S46Afs*5 Frame_Shift_Del Truncating 46 +S46Gfs*4 Frame_Shift_Del Truncating 46 +S46Pfs*77 Frame_Shift_Del Truncating 46 +P47Rfs*76 Frame_Shift_Del Truncating 47 +P47Rfs*76 Frame_Shift_Del Truncating 47 +D48Tfs*75 Frame_Shift_Del Truncating 48 +D48Gfs*4 Frame_Shift_Ins Truncating 48 +D48H Missense_Mutation Missense 48 +D48* Nonsense_Mutation Truncating 48 +D49V Missense_Mutation Missense 49 +I50Mfs*73 Frame_Shift_Del Truncating 50 +E51* Nonsense_Mutation Truncating 51 +E51* Nonsense_Mutation Truncating 51 +E51Nfs*72 Frame_Shift_Del Truncating 51 +Q52* Nonsense_Mutation Truncating 52 +Q52* Nonsense_Mutation Truncating 52 +Q52* Nonsense_Mutation Truncating 52 +Q52Lfs*68 Frame_Shift_Del Truncating 52 +Q52Hfs*71 Frame_Shift_Del Truncating 52 +Q52Hfs*71 Frame_Shift_Del Truncating 52 +W53* Nonsense_Mutation Truncating 53 +W53* Nonsense_Mutation Truncating 53 +W53* Nonsense_Mutation Truncating 53 +W53* Nonsense_Mutation Truncating 53 +W53* Nonsense_Mutation Truncating 53 +W53* Nonsense_Mutation Truncating 53 +W53* Nonsense_Mutation Truncating 53 +W53* Nonsense_Mutation Truncating 53 +W53* Nonsense_Mutation Truncating 53 +W53* Nonsense_Mutation Truncating 53 +W53* Nonsense_Mutation Truncating 53 +W53Yfs*2 Frame_Shift_Del Truncating 53 +F54Lfs*69 Frame_Shift_Del Truncating 54 +T55Pfs*52 Frame_Shift_Del Truncating 55 +E56* Nonsense_Mutation Truncating 56 +E56* Nonsense_Mutation Truncating 56 +E56* Nonsense_Mutation Truncating 56 +E56* Nonsense_Mutation Truncating 56 +E56* Nonsense_Mutation Truncating 56 +E56* Nonsense_Mutation Truncating 56 +E56* Nonsense_Mutation Truncating 56 +E56Kfs*67 Frame_Shift_Del Truncating 56 +D57Vfs*64 Frame_Shift_Del Truncating 57 +P58Qfs*65 Frame_Shift_Del Truncating 58 +G59R Missense_Mutation Missense 59 +P60Qfs*63 Frame_Shift_Del Truncating 60 +P60Qfs*63 Frame_Shift_Del Truncating 60 +P60Qfs*63 Frame_Shift_Del Truncating 60 +D61* Frame_Shift_Del Truncating 61 +D61Vfs*62 Frame_Shift_Del Truncating 61 +D61H Missense_Mutation Missense 61 +P64S Missense_Mutation Missense 64 +R65Cfs*79 Frame_Shift_Del Truncating 65 +R65* Nonsense_Mutation Truncating 65 +R65* Nonsense_Mutation Truncating 65 +M66Nfs*83 Frame_Shift_Ins Truncating 66 +M66Qfs*56 Frame_Shift_Del Truncating 66 +M66Ifs*76 Frame_Shift_Del Truncating 66 +P67Lfs*54 Frame_Shift_Del Truncating 67 +E68Gfs*80 Frame_Shift_Del Truncating 68 +E68Rfs*55 Frame_Shift_Del Truncating 68 +A70V Missense_Mutation Missense 70 +A70Rfs*76 Frame_Shift_Del Truncating 70 +P71S Missense_Mutation Missense 71 +P71Lfs*52 Frame_Shift_Del Truncating 71 +P71L Missense_Mutation Missense 71 +P71Gfs*75 Frame_Shift_Del Truncating 71 +P72Lfs*51 Frame_Shift_Del Truncating 72 +P72Afs*51 Frame_Shift_Del Truncating 72 +P72S Missense_Mutation Missense 72 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Rfs*76 Frame_Shift_Ins Truncating 73 +V73Afs*51 Frame_Shift_Ins Truncating 73 +V73Wfs*50 Frame_Shift_Del Truncating 73 +V73Wfs*50 Frame_Shift_Del Truncating 73 +V73Wfs*50 Frame_Shift_Del Truncating 73 +V73Wfs*50 Frame_Shift_Del Truncating 73 +V73Wfs*50 Frame_Shift_Del Truncating 73 +V73Wfs*50 Frame_Shift_Del Truncating 73 +V73Wfs*50 Frame_Shift_Del Truncating 73 +V73Wfs*50 Frame_Shift_Del Truncating 73 +V73Gfs*50 Frame_Shift_Del Truncating 73 +V73Wfs*50 Frame_Shift_Del Truncating 73 +V73Lfs*43 Frame_Shift_Del Truncating 73 +V73Lfs*76 Frame_Shift_Ins Truncating 73 +A74Gfs*75 Frame_Shift_Ins Truncating 74 +P75Lfs*48 Frame_Shift_Del Truncating 75 +P75Lfs*48 Frame_Shift_Del Truncating 75 +P75Lfs*48 Frame_Shift_Del Truncating 75 +P75Lfs*48 Frame_Shift_Del Truncating 75 +P75Lfs*48 Frame_Shift_Del Truncating 75 +P75Lfs*48 Frame_Shift_Del Truncating 75 +P75Lfs*74 Frame_Shift_Ins Truncating 75 +P75Yfs*68 Frame_Shift_Del Truncating 75 +A76Vfs*55 Frame_Shift_Del Truncating 76 +A78Qfs*45 Frame_Shift_Del Truncating 78 +P80Lfs*43 Frame_Shift_Del Truncating 80 +P82L Missense_Mutation Missense 82 +P82L Missense_Mutation Missense 82 +A83Rfs*40 Frame_Shift_Del Truncating 83 +A83Rfs*40 Frame_Shift_Del Truncating 83 +A83Gfs*65 Frame_Shift_Del Truncating 83 +A83Cfs*30 Frame_Shift_Del Truncating 83 +A83Gfs*66 Frame_Shift_Ins Truncating 83 +A83Cfs*63 Frame_Shift_Del Truncating 83 +A84Pfs*39 Frame_Shift_Del Truncating 84 +A84Gfs*65 Frame_Shift_Ins Truncating 84 +P85Lfs*38 Frame_Shift_Del Truncating 85 +P85Vfs*35 Frame_Shift_Del Truncating 85 +A86Vfs*55 Frame_Shift_Del Truncating 86 +A86Vfs*55 Frame_Shift_Del Truncating 86 +A86Vfs*55 Frame_Shift_Del Truncating 86 +A86Cfs*63 Frame_Shift_Ins Truncating 86 +A86Cfs*63 Frame_Shift_Ins Truncating 86 +P58_H115del In_Frame_Del Inframe 86 +P58_H115del In_Frame_Del Inframe 86 +P87Lfs*59 Frame_Shift_Del Truncating 87 +A88Sfs*61 Frame_Shift_Ins Truncating 88 +S90Pfs*33 Frame_Shift_Del Truncating 90 +S90Pfs*33 Frame_Shift_Del Truncating 90 +S90Pfs*33 Frame_Shift_Del Truncating 90 +S90Pfs*33 Frame_Shift_Del Truncating 90 +S90Pfs*33 Frame_Shift_Del Truncating 90 +S90Pfs*33 Frame_Shift_Del Truncating 90 +S90Lfs*59 Frame_Shift_Ins Truncating 90 +S90Lfs*59 Frame_Shift_Ins Truncating 90 +S90Lfs*59 Frame_Shift_Ins Truncating 90 +S90Lfs*59 Frame_Shift_Ins Truncating 90 +S90F Missense_Mutation Missense 90 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91* Nonsense_Mutation Truncating 91 +W91Sfs*32 Frame_Shift_Del Truncating 91 +W91* Nonsense_Mutation Truncating 91 +L93Vfs*55 Frame_Shift_Del Truncating 93 +L93Cfs*30 Frame_Shift_Del Truncating 93 +L93Cfs*30 Frame_Shift_Del Truncating 93 +L93Cfs*30 Frame_Shift_Del Truncating 93 +L93Cfs*30 Frame_Shift_Del Truncating 93 +L93Ffs*53 Frame_Shift_Del Truncating 93 +S94* Nonsense_Mutation Truncating 94 +S94* Nonsense_Mutation Truncating 94 +S94* Nonsense_Mutation Truncating 94 +S94Pfs*24 Frame_Shift_Del Truncating 94 +S96Y Missense_Mutation Missense 96 +S96del In_Frame_Del Inframe 96 +S96Lfs*27 Frame_Shift_Del Truncating 96 +S96Yfs*53 Frame_Shift_Ins Truncating 96 +V97Sfs*26 Frame_Shift_Del Truncating 97 +P98S Missense_Mutation Missense 98 +P98S Missense_Mutation Missense 98 +S99Ffs*55 Frame_Shift_Ins Truncating 99 +Q100* Nonsense_Mutation Truncating 100 +Q100* Nonsense_Mutation Truncating 100 +Q100* Nonsense_Mutation Truncating 100 +Q100* Nonsense_Mutation Truncating 100 +Q100* Nonsense_Mutation Truncating 100 +Q100* Nonsense_Mutation Truncating 100 +Q100* Nonsense_Mutation Truncating 100 +Q100* Nonsense_Mutation Truncating 100 +Q100* Nonsense_Mutation Truncating 100 +Q100* Nonsense_Mutation Truncating 100 +Q100* Nonsense_Mutation Truncating 100 +Q100Lfs*42 Frame_Shift_Del Truncating 100 +K101* Nonsense_Mutation Truncating 101 +K101* Nonsense_Mutation Truncating 101 +T102Pfs*21 Frame_Shift_Del Truncating 102 +T102Nfs*47 Frame_Shift_Ins Truncating 102 +Y103* Nonsense_Mutation Truncating 103 +Y103Tfs*20 Frame_Shift_Del Truncating 103 +Y103Tfs*20 Frame_Shift_Del Truncating 103 +Y103* Nonsense_Mutation Truncating 103 +Q104* Nonsense_Mutation Truncating 104 +Q104* Nonsense_Mutation Truncating 104 +Q104* Nonsense_Mutation Truncating 104 +Q104* Nonsense_Mutation Truncating 104 +Q104* Nonsense_Mutation Truncating 104 +Q104* Nonsense_Mutation Truncating 104 +Q104* Nonsense_Mutation Truncating 104 +Q104* Nonsense_Mutation Truncating 104 +Q104* Nonsense_Mutation Truncating 104 +Q104Afs*18 Frame_Shift_Del Truncating 104 +T102_G105delinsS In_Frame_Del Inframe 104 +G105C Missense_Mutation Missense 105 +G105C Missense_Mutation Missense 105 +G105C Missense_Mutation Missense 105 +G105C Missense_Mutation Missense 105 +G105C Missense_Mutation Missense 105 +G105C Missense_Mutation Missense 105 +G105C Missense_Mutation Missense 105 +G105C Missense_Mutation Missense 105 +G105C Missense_Mutation Missense 105 +G105C Missense_Mutation Missense 105 +G105C Missense_Mutation Missense 105 +G105C Missense_Mutation Missense 105 +G105D Missense_Mutation Missense 105 +G105D Missense_Mutation Missense 105 +G105V Missense_Mutation Missense 105 +G105V Missense_Mutation Missense 105 +G105V Missense_Mutation Missense 105 +G105V Missense_Mutation Missense 105 +G105S Missense_Mutation Missense 105 +G105Afs*18 Frame_Shift_Del Truncating 105 +G105Afs*18 Frame_Shift_Del Truncating 105 +S106R Missense_Mutation Missense 106 +S106R Missense_Mutation Missense 106 +S106R Missense_Mutation Missense 106 +S106R Missense_Mutation Missense 106 +S106Tfs*17 Frame_Shift_Del Truncating 106 +S106I Missense_Mutation Missense 106 +S106Rfs*16 Frame_Shift_Del Truncating 106 +S106Qfs*43 Frame_Shift_Ins Truncating 106 +S106Rfs*2 Frame_Shift_Del Truncating 106 +Y103_G108del In_Frame_Del Inframe 106 +Y107D Missense_Mutation Missense 107 +Y107* Nonsense_Mutation Truncating 107 +Y107* Nonsense_Mutation Truncating 107 +Y107* Nonsense_Mutation Truncating 107 +Y107* Nonsense_Mutation Truncating 107 +Y107* Nonsense_Mutation Truncating 107 +Y107* Nonsense_Mutation Truncating 107 +Y107dup In_Frame_Ins Inframe 107 +G108Vfs*15 Frame_Shift_Del Truncating 108 +G108Vfs*13 Frame_Shift_Del Truncating 108 +G108S Missense_Mutation Missense 108 +G108_F109del In_Frame_Del Inframe 108 +G108Afs*34 Frame_Shift_Del Truncating 108 +F109V Missense_Mutation Missense 109 +F109S Missense_Mutation Missense 109 +F109S Missense_Mutation Missense 109 +F109C Missense_Mutation Missense 109 +F109Sfs*14 Frame_Shift_Del Truncating 109 +F109I Missense_Mutation Missense 109 +F109Lfs*36 Frame_Shift_Del Truncating 109 +R110Vfs*13 Frame_Shift_Del Truncating 110 +R110Vfs*13 Frame_Shift_Del Truncating 110 +R110L Missense_Mutation Missense 110 +R110L Missense_Mutation Missense 110 +R110L Missense_Mutation Missense 110 +R110L Missense_Mutation Missense 110 +R110L Missense_Mutation Missense 110 +R110L Missense_Mutation Missense 110 +R110L Missense_Mutation Missense 110 +R110L Missense_Mutation Missense 110 +R110L Missense_Mutation Missense 110 +R110P Missense_Mutation Missense 110 +R110P Missense_Mutation Missense 110 +R110P Missense_Mutation Missense 110 +R110P Missense_Mutation Missense 110 +R110P Missense_Mutation Missense 110 +R110P Missense_Mutation Missense 110 +R110P Missense_Mutation Missense 110 +R110P Missense_Mutation Missense 110 +R110P Missense_Mutation Missense 110 +R110P Missense_Mutation Missense 110 +R110Wfs*12 Frame_Shift_Del Truncating 110 +R110C Missense_Mutation Missense 110 +R110C Missense_Mutation Missense 110 +R110Wfs*12 Frame_Shift_Del Truncating 110 +R110Lfs*13 Frame_Shift_Del Truncating 110 +R110H Missense_Mutation Missense 110 +R110Cfs*13 Frame_Shift_Del Truncating 110 +R110Pfs*14 Frame_Shift_Ins Truncating 110 +R110delinsQS In_Frame_Ins Inframe 110 +F109_R110insL In_Frame_Ins Inframe 110 +L111R Missense_Mutation Missense 111 +L111P Missense_Mutation Missense 111 +L111P Missense_Mutation Missense 111 +L111Q Missense_Mutation Missense 111 +L111Ffs*40 Frame_Shift_Ins Truncating 111 +L111Ffs*40 Frame_Shift_Ins Truncating 111 +L111M Missense_Mutation Missense 111 +L111Nfs*14 Frame_Shift_Ins Truncating 111 +G112Afs*11 Frame_Shift_Del Truncating 112 +G112Vfs*10 Frame_Shift_Del Truncating 112 +F113S Missense_Mutation Missense 113 +F113S Missense_Mutation Missense 113 +F113C Missense_Mutation Missense 113 +F113C Missense_Mutation Missense 113 +F113C Missense_Mutation Missense 113 +F113del In_Frame_Del Inframe 113 +F113V Missense_Mutation Missense 113 +F113V Missense_Mutation Missense 113 +F113V Missense_Mutation Missense 113 +F113V Missense_Mutation Missense 113 +F113Qfs*5 Frame_Shift_Del Truncating 113 +F113P Missense_Mutation Missense 113 +F113Sfs*10 Frame_Shift_Del Truncating 113 +L114* Nonsense_Mutation Truncating 114 +L114* Nonsense_Mutation Truncating 114 +L114Ffs*33 Frame_Shift_Del Truncating 114 +L114Cfs*9 Frame_Shift_Del Truncating 114 +L114Cfs*9 Frame_Shift_Del Truncating 114 +L114Ffs*35 Frame_Shift_Ins Truncating 114 +L114Ffs*35 Frame_Shift_Ins Truncating 114 +H115Ffs*33 Frame_Shift_Del Truncating 115 +H115Afs*34 Frame_Shift_Ins Truncating 115 +H115Y Missense_Mutation Missense 115 +H115Y Missense_Mutation Missense 115 +S116Ffs*7 Frame_Shift_Del Truncating 116 +S116Afs*34 Frame_Shift_Ins Truncating 116 +S116Vfs*23 Frame_Shift_Del Truncating 116 +G117V Missense_Mutation Missense 117 +T118Qfs*5 Frame_Shift_Del Truncating 118 +T118Gfs*6 Frame_Shift_Ins Truncating 118 +A119G Missense_Mutation Missense 119 +A119Sfs*3 Frame_Shift_Del Truncating 119 +A119G Missense_Mutation Missense 119 +A119G Missense_Mutation Missense 119 +K120E Missense_Mutation Missense 120 +K120E Missense_Mutation Missense 120 +K120N Missense_Mutation Missense 120 +K120Sfs*3 Frame_Shift_Del Truncating 120 +K120Sfs*3 Frame_Shift_Del Truncating 120 +K120Qfs*29 Frame_Shift_Ins Truncating 120 +K120* Nonsense_Mutation Truncating 120 +V122Dfs*26 Frame_Shift_Del Truncating 122 +V122Dfs*26 Frame_Shift_Del Truncating 122 +V122Dfs*26 Frame_Shift_Del Truncating 122 +V122Dfs*26 Frame_Shift_Del Truncating 122 +V122Dfs*26 Frame_Shift_Del Truncating 122 +V122Dfs*26 Frame_Shift_Del Truncating 122 +V122Dfs*26 Frame_Shift_Del Truncating 122 +V122Hfs*24 Frame_Shift_Del Truncating 122 +T123Ifs*47 Frame_Shift_Del Truncating 123 +C124Lfs*25 Frame_Shift_Ins Truncating 124 +C124Wfs*25 Frame_Shift_Ins Truncating 124 +C124Wfs*25 Frame_Shift_Ins Truncating 124 +C124Wfs*25 Frame_Shift_Ins Truncating 124 +C124* Nonsense_Mutation Truncating 124 +C124G Missense_Mutation Missense 124 +C124* Frame_Shift_Del Truncating 124 +C124Yfs*24 Frame_Shift_Del Truncating 124 +C124L Missense_Mutation Missense 124 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +T125M Missense_Mutation Missense 125 +T125M Missense_Mutation Missense 125 +T125M Missense_Mutation Missense 125 +T125M Missense_Mutation Missense 125 +T125M Missense_Mutation Missense 125 +T125M Missense_Mutation Missense 125 +T125M Missense_Mutation Missense 125 +T125M Missense_Mutation Missense 125 +T125M Missense_Mutation Missense 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +T125P Missense_Mutation Missense 125 +T125R Missense_Mutation Missense 125 +T125R Missense_Mutation Missense 125 +T125R Missense_Mutation Missense 125 +T125R Missense_Mutation Missense 125 +T125A Missense_Mutation Missense 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +T125K Missense_Mutation Missense 125 +T125K Missense_Mutation Missense 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +X125_splice Splice_Site Truncating 125 +T125Afs*46 Frame_Shift_Ins Truncating 125 +X125_splice Splice_Site Truncating 125 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +Y126D Missense_Mutation Missense 126 +Y126D Missense_Mutation Missense 126 +Y126C Missense_Mutation Missense 126 +Y126C Missense_Mutation Missense 126 +Y126C Missense_Mutation Missense 126 +Y126C Missense_Mutation Missense 126 +Y126C Missense_Mutation Missense 126 +Y126C Missense_Mutation Missense 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +Y126* Nonsense_Mutation Truncating 126 +Y126* Nonsense_Mutation Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +Y126* Nonsense_Mutation Truncating 126 +Y126* Nonsense_Mutation Truncating 126 +Y126H Missense_Mutation Missense 126 +X126_splice Splice_Site Truncating 126 +Y126S Missense_Mutation Missense 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +X126_splice Splice_Site Truncating 126 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127F Missense_Mutation Missense 127 +S127P Missense_Mutation Missense 127 +S127P Missense_Mutation Missense 127 +S127Y Missense_Mutation Missense 127 +S127Y Missense_Mutation Missense 127 +S127Y Missense_Mutation Missense 127 +S127Y Missense_Mutation Missense 127 +S127Y Missense_Mutation Missense 127 +S127Y Missense_Mutation Missense 127 +S127Y Missense_Mutation Missense 127 +P128Lfs*42 Frame_Shift_Del Truncating 128 +P128Lfs*42 Frame_Shift_Del Truncating 128 +P128Lfs*42 Frame_Shift_Del Truncating 128 +P128Lfs*42 Frame_Shift_Del Truncating 128 +P128Lfs*42 Frame_Shift_Del Truncating 128 +P128Lfs*42 Frame_Shift_Del Truncating 128 +P128Lfs*42 Frame_Shift_Del Truncating 128 +P128Rfs*20 Frame_Shift_Del Truncating 128 +P128A Missense_Mutation Missense 128 +P128Tfs*12 Frame_Shift_Del Truncating 128 +P128S Missense_Mutation Missense 128 +A129Pfs*42 Frame_Shift_Ins Truncating 129 +L130V Missense_Mutation Missense 130 +L130V Missense_Mutation Missense 130 +L130V Missense_Mutation Missense 130 +L130V Missense_Mutation Missense 130 +L130V Missense_Mutation Missense 130 +L130V Missense_Mutation Missense 130 +L130R Missense_Mutation Missense 130 +L130R Missense_Mutation Missense 130 +L130R Missense_Mutation Missense 130 +L130P Missense_Mutation Missense 130 +L130F Missense_Mutation Missense 130 +L130F Missense_Mutation Missense 130 +L130F Missense_Mutation Missense 130 +L130F Missense_Mutation Missense 130 +L130F Missense_Mutation Missense 130 +L130Sfs*40 Frame_Shift_Del Truncating 130 +L130H Missense_Mutation Missense 130 +L130del In_Frame_Del Inframe 130 +N131S Missense_Mutation Missense 131 +N131S Missense_Mutation Missense 131 +N131I Missense_Mutation Missense 131 +N131I Missense_Mutation Missense 131 +N131I Missense_Mutation Missense 131 +N131I Missense_Mutation Missense 131 +N131I Missense_Mutation Missense 131 +N131I Missense_Mutation Missense 131 +N131del In_Frame_Del Inframe 131 +N131del In_Frame_Del Inframe 131 +N131del In_Frame_Del Inframe 131 +N131Cfs*27 Frame_Shift_Del Truncating 131 +N131K Missense_Mutation Missense 131 +K132E Missense_Mutation Missense 132 +K132E Missense_Mutation Missense 132 +K132E Missense_Mutation Missense 132 +K132E Missense_Mutation Missense 132 +K132E Missense_Mutation Missense 132 +K132E Missense_Mutation Missense 132 +K132N Missense_Mutation Missense 132 +K132N Missense_Mutation Missense 132 +K132N Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132R Missense_Mutation Missense 132 +K132N Missense_Mutation Missense 132 +K132N Missense_Mutation Missense 132 +K132N Missense_Mutation Missense 132 +K132N Missense_Mutation Missense 132 +K132N Missense_Mutation Missense 132 +K132N Missense_Mutation Missense 132 +K132N Missense_Mutation Missense 132 +K132M Missense_Mutation Missense 132 +K132M Missense_Mutation Missense 132 +K132M Missense_Mutation Missense 132 +K132Q Missense_Mutation Missense 132 +K132* Nonsense_Mutation Truncating 132 +K132Rfs*38 Frame_Shift_Del Truncating 132 +M133K Missense_Mutation Missense 133 +M133K Missense_Mutation Missense 133 +M133R Missense_Mutation Missense 133 +M133R Missense_Mutation Missense 133 +M133T Missense_Mutation Missense 133 +M133Dfs*16 Frame_Shift_Ins Truncating 133 +M133Ifs*12 Frame_Shift_Del Truncating 133 +M133I Missense_Mutation Missense 133 +M133Lfs*42 Frame_Shift_Ins Truncating 133 +M133Rfs*38 Frame_Shift_Ins Truncating 133 +F134V Missense_Mutation Missense 134 +F134V Missense_Mutation Missense 134 +F134V Missense_Mutation Missense 134 +F134L Missense_Mutation Missense 134 +F134L Missense_Mutation Missense 134 +F134C Missense_Mutation Missense 134 +F134C Missense_Mutation Missense 134 +F134C Missense_Mutation Missense 134 +F134Lfs*14 Frame_Shift_Del Truncating 134 +F134L Missense_Mutation Missense 134 +F134L Missense_Mutation Missense 134 +F134L Missense_Mutation Missense 134 +F134L Missense_Mutation Missense 134 +F134L Missense_Mutation Missense 134 +F134I Missense_Mutation Missense 134 +F134I Missense_Mutation Missense 134 +L130_A138dup In_Frame_Ins Inframe 134 +C135Afs*35 Frame_Shift_Del Truncating 135 +C135Afs*35 Frame_Shift_Del Truncating 135 +C135Afs*35 Frame_Shift_Del Truncating 135 +C135Afs*35 Frame_Shift_Del Truncating 135 +C135Afs*35 Frame_Shift_Del Truncating 135 +C135R Missense_Mutation Missense 135 +C135R Missense_Mutation Missense 135 +C135R Missense_Mutation Missense 135 +C135R Missense_Mutation Missense 135 +C135F Missense_Mutation Missense 135 +C135F Missense_Mutation Missense 135 +C135F Missense_Mutation Missense 135 +C135F Missense_Mutation Missense 135 +C135F Missense_Mutation Missense 135 +C135F Missense_Mutation Missense 135 +C135F Missense_Mutation Missense 135 +C135F Missense_Mutation Missense 135 +C135F Missense_Mutation Missense 135 +C135F Missense_Mutation Missense 135 +C135F Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135Y Missense_Mutation Missense 135 +C135W Missense_Mutation Missense 135 +C135S Missense_Mutation Missense 135 +C135G Missense_Mutation Missense 135 +C135Lfs*14 Frame_Shift_Ins Truncating 135 +C135* Nonsense_Mutation Truncating 135 +C135* Nonsense_Mutation Truncating 135 +C135S Missense_Mutation Missense 135 +Q136* Nonsense_Mutation Truncating 136 +Q136* Nonsense_Mutation Truncating 136 +Q136* Nonsense_Mutation Truncating 136 +Q136* Nonsense_Mutation Truncating 136 +Q136* Nonsense_Mutation Truncating 136 +Q136* Nonsense_Mutation Truncating 136 +Q136* Nonsense_Mutation Truncating 136 +Q136* Nonsense_Mutation Truncating 136 +Q136E Missense_Mutation Missense 136 +Q136E Missense_Mutation Missense 136 +Q136E Missense_Mutation Missense 136 +Q136P Missense_Mutation Missense 136 +Q136P Missense_Mutation Missense 136 +Q136Hfs*34 Frame_Shift_Del Truncating 136 +Q136Sfs*26 Frame_Shift_Del Truncating 136 +K132_C141delinsT In_Frame_Del Inframe 136 +C135_L137delinsW In_Frame_Del Inframe 136 +L137Q Missense_Mutation Missense 137 +L137Q Missense_Mutation Missense 137 +L137Q Missense_Mutation Missense 137 +L137Wfs*33 Frame_Shift_Del Truncating 137 +A138Cfs*27 Frame_Shift_Del Truncating 138 +A138P Missense_Mutation Missense 138 +A138P Missense_Mutation Missense 138 +A138P Missense_Mutation Missense 138 +A138P Missense_Mutation Missense 138 +A138P Missense_Mutation Missense 138 +A138V Missense_Mutation Missense 138 +A138V Missense_Mutation Missense 138 +A138V Missense_Mutation Missense 138 +A138V Missense_Mutation Missense 138 +A138V Missense_Mutation Missense 138 +K139Rfs*31 Frame_Shift_Del Truncating 139 +K139N Missense_Mutation Missense 139 +K139* Nonsense_Mutation Truncating 139 +K139* Nonsense_Mutation Truncating 139 +K139T Missense_Mutation Missense 139 +T140I Missense_Mutation Missense 140 +C141Y Missense_Mutation Missense 141 +C141Y Missense_Mutation Missense 141 +C141Y Missense_Mutation Missense 141 +C141Y Missense_Mutation Missense 141 +C141Y Missense_Mutation Missense 141 +C141Y Missense_Mutation Missense 141 +C141Y Missense_Mutation Missense 141 +C141Y Missense_Mutation Missense 141 +C141Y Missense_Mutation Missense 141 +C141Y Missense_Mutation Missense 141 +C141Y Missense_Mutation Missense 141 +C141Y Missense_Mutation Missense 141 +C141R Missense_Mutation Missense 141 +C141R Missense_Mutation Missense 141 +C141W Missense_Mutation Missense 141 +C141W Missense_Mutation Missense 141 +C141W Missense_Mutation Missense 141 +C141G Missense_Mutation Missense 141 +C141G Missense_Mutation Missense 141 +C141* Nonsense_Mutation Truncating 141 +C141Afs*29 Frame_Shift_Del Truncating 141 +P142Lfs*28 Frame_Shift_Del Truncating 142 +P142Lfs*28 Frame_Shift_Del Truncating 142 +P142Lfs*28 Frame_Shift_Del Truncating 142 +P142Lfs*28 Frame_Shift_Del Truncating 142 +P142Afs*5 Frame_Shift_Del Truncating 142 +P142Afs*5 Frame_Shift_Del Truncating 142 +P142Gfs*24 Frame_Shift_Del Truncating 142 +P142L Missense_Mutation Missense 142 +P142dup In_Frame_Ins Inframe 142 +C141_P142del In_Frame_Del Inframe 142 +V143M Missense_Mutation Missense 143 +V143M Missense_Mutation Missense 143 +V143M Missense_Mutation Missense 143 +V143M Missense_Mutation Missense 143 +V143M Missense_Mutation Missense 143 +V143M Missense_Mutation Missense 143 +V143M Missense_Mutation Missense 143 +V143G Missense_Mutation Missense 143 +V143G Missense_Mutation Missense 143 +V143A Missense_Mutation Missense 143 +V143A Missense_Mutation Missense 143 +V143A Missense_Mutation Missense 143 +V143Afs*21 Frame_Shift_Del Truncating 143 +Q144* Nonsense_Mutation Truncating 144 +Q144* Nonsense_Mutation Truncating 144 +Q144* Nonsense_Mutation Truncating 144 +Q144* Nonsense_Mutation Truncating 144 +Q144* Nonsense_Mutation Truncating 144 +Q144Sfs*26 Frame_Shift_Del Truncating 144 +Q144Sfs*26 Frame_Shift_Del Truncating 144 +Q144L Missense_Mutation Missense 144 +Q144P Missense_Mutation Missense 144 +Q144Rfs*26 Frame_Shift_Del Truncating 144 +Q144Rfs*26 Frame_Shift_Del Truncating 144 +Q144Afs*5 Frame_Shift_Ins Truncating 144 +Q144Hfs*26 Frame_Shift_Del Truncating 144 +Q144Gfs*2 Frame_Shift_Del Truncating 144 +L145P Missense_Mutation Missense 145 +L145R Missense_Mutation Missense 145 +L145R Missense_Mutation Missense 145 +L145Q Missense_Mutation Missense 145 +W146* Nonsense_Mutation Truncating 146 +W146* Nonsense_Mutation Truncating 146 +W146* Nonsense_Mutation Truncating 146 +W146* Nonsense_Mutation Truncating 146 +W146* Nonsense_Mutation Truncating 146 +W146* Nonsense_Mutation Truncating 146 +W146* Nonsense_Mutation Truncating 146 +W146* Nonsense_Mutation Truncating 146 +W146* Nonsense_Mutation Truncating 146 +W146* Nonsense_Mutation Truncating 146 +W146* Nonsense_Mutation Truncating 146 +W146G Missense_Mutation Missense 146 +W146G Missense_Mutation Missense 146 +W146Pfs*19 Frame_Shift_Del Truncating 146 +W146C Missense_Mutation Missense 146 +V147Lfs*23 Frame_Shift_Del Truncating 147 +V147G Missense_Mutation Missense 147 +V147G Missense_Mutation Missense 147 +V147G Missense_Mutation Missense 147 +V147Rfs*27 Frame_Shift_Del Truncating 147 +D148E Missense_Mutation Missense 148 +D148Ifs*22 Frame_Shift_Del Truncating 148 +V143_P153del In_Frame_Del Inframe 148 +S149Pfs*21 Frame_Shift_Del Truncating 149 +S149Pfs*21 Frame_Shift_Del Truncating 149 +S149Pfs*21 Frame_Shift_Del Truncating 149 +S149Pfs*21 Frame_Shift_Del Truncating 149 +S149Pfs*21 Frame_Shift_Del Truncating 149 +S149Ffs*32 Frame_Shift_Ins Truncating 149 +S149Ffs*32 Frame_Shift_Ins Truncating 149 +S149Ffs*32 Frame_Shift_Ins Truncating 149 +D148_T150del In_Frame_Del Inframe 149 +T150Afs*16 Frame_Shift_Del Truncating 150 +T150Afs*16 Frame_Shift_Del Truncating 150 +T150Afs*16 Frame_Shift_Del Truncating 150 +T150Hfs*20 Frame_Shift_Del Truncating 150 +T150Nfs*20 Frame_Shift_Del Truncating 150 +P151A Missense_Mutation Missense 151 +P151A Missense_Mutation Missense 151 +P151A Missense_Mutation Missense 151 +P151A Missense_Mutation Missense 151 +P151A Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151S Missense_Mutation Missense 151 +P151H Missense_Mutation Missense 151 +P151H Missense_Mutation Missense 151 +P151H Missense_Mutation Missense 151 +P151H Missense_Mutation Missense 151 +P151H Missense_Mutation Missense 151 +P151H Missense_Mutation Missense 151 +P151H Missense_Mutation Missense 151 +P151T Missense_Mutation Missense 151 +P151T Missense_Mutation Missense 151 +P151T Missense_Mutation Missense 151 +P151R Missense_Mutation Missense 151 +P151R Missense_Mutation Missense 151 +P151R Missense_Mutation Missense 151 +P151Rfs*27 Frame_Shift_Del Truncating 151 +P151F Missense_Mutation Missense 151 +P152S Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152L Missense_Mutation Missense 152 +P152Afs*14 Frame_Shift_Del Truncating 152 +P152Afs*14 Frame_Shift_Del Truncating 152 +P152Rfs*18 Frame_Shift_Del Truncating 152 +P152R Missense_Mutation Missense 152 +P152T Missense_Mutation Missense 152 +P152T Missense_Mutation Missense 152 +P152K Missense_Mutation Missense 152 +P152Tfs*30 Frame_Shift_Ins Truncating 152 +P153Afs*28 Frame_Shift_Ins Truncating 153 +P153Afs*28 Frame_Shift_Ins Truncating 153 +P153Afs*28 Frame_Shift_Ins Truncating 153 +P153Sfs*28 Frame_Shift_Ins Truncating 153 +P153Afs*16 Frame_Shift_Del Truncating 153 +P153del In_Frame_Del Inframe 153 +P153Afs*28 Frame_Shift_Ins Truncating 153 +P153Sfs*13 Frame_Shift_Del Truncating 153 +P153L Missense_Mutation Missense 153 +G154Afs*16 Frame_Shift_Del Truncating 154 +G154Afs*16 Frame_Shift_Del Truncating 154 +G154Afs*16 Frame_Shift_Del Truncating 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154V Missense_Mutation Missense 154 +G154Rfs*27 Frame_Shift_Ins Truncating 154 +G154D Missense_Mutation Missense 154 +G154Afs*28 Frame_Shift_Ins Truncating 154 +G154Afs*16 Frame_Shift_Del Truncating 154 +G154_T155del In_Frame_Del Inframe 154 +P153_G154del In_Frame_Del Inframe 154 +G154delinsAR In_Frame_Ins Inframe 154 +T155P Missense_Mutation Missense 155 +T155P Missense_Mutation Missense 155 +T155P Missense_Mutation Missense 155 +T155P Missense_Mutation Missense 155 +T155N Missense_Mutation Missense 155 +T155N Missense_Mutation Missense 155 +T155N Missense_Mutation Missense 155 +T155I Missense_Mutation Missense 155 +T155Hfs*21 Frame_Shift_Del Truncating 155 +T155Hfs*26 Frame_Shift_Ins Truncating 155 +T155Afs*28 Frame_Shift_Ins Truncating 155 +T155Afs*28 Frame_Shift_Ins Truncating 155 +R156P Missense_Mutation Missense 156 +R156P Missense_Mutation Missense 156 +R156P Missense_Mutation Missense 156 +R156P Missense_Mutation Missense 156 +R156P Missense_Mutation Missense 156 +R156H Missense_Mutation Missense 156 +R156H Missense_Mutation Missense 156 +R156G Missense_Mutation Missense 156 +R156Afs*12 Frame_Shift_Del Truncating 156 +R156Afs*14 Frame_Shift_Del Truncating 156 +R156Afs*14 Frame_Shift_Del Truncating 156 +R156Lfs*25 Frame_Shift_Ins Truncating 156 +R156Afs*12 Frame_Shift_Del Truncating 156 +R156L Missense_Mutation Missense 156 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157F Missense_Mutation Missense 157 +V157G Missense_Mutation Missense 157 +V157Rfs*24 Frame_Shift_Ins Truncating 157 +V157Rfs*24 Frame_Shift_Ins Truncating 157 +V157A Missense_Mutation Missense 157 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158H Missense_Mutation Missense 158 +R158F Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158L Missense_Mutation Missense 158 +R158G Missense_Mutation Missense 158 +R158G Missense_Mutation Missense 158 +R158G Missense_Mutation Missense 158 +R158G Missense_Mutation Missense 158 +R158G Missense_Mutation Missense 158 +R158P Missense_Mutation Missense 158 +R158P Missense_Mutation Missense 158 +R158P Missense_Mutation Missense 158 +R158P Missense_Mutation Missense 158 +R158P Missense_Mutation Missense 158 +R158P Missense_Mutation Missense 158 +R158P Missense_Mutation Missense 158 +R158P Missense_Mutation Missense 158 +R158P Missense_Mutation Missense 158 +R158P Missense_Mutation Missense 158 +R158C Missense_Mutation Missense 158 +R158C Missense_Mutation Missense 158 +V157_R158del In_Frame_Del Inframe 158 +V157_R158del In_Frame_Del Inframe 158 +V157_R158del In_Frame_Del Inframe 158 +R158_A159dup In_Frame_Ins Inframe 158 +R158_A159del In_Frame_Del Inframe 158 +R158Pfs*11 Frame_Shift_Del Truncating 158 +R158Sfs*23 Frame_Shift_Ins Truncating 158 +A159P Missense_Mutation Missense 159 +A159P Missense_Mutation Missense 159 +A159P Missense_Mutation Missense 159 +A159P Missense_Mutation Missense 159 +A159P Missense_Mutation Missense 159 +A159P Missense_Mutation Missense 159 +A159P Missense_Mutation Missense 159 +A159P Missense_Mutation Missense 159 +A159P Missense_Mutation Missense 159 +A159V Missense_Mutation Missense 159 +A159V Missense_Mutation Missense 159 +A159V Missense_Mutation Missense 159 +A159V Missense_Mutation Missense 159 +A159V Missense_Mutation Missense 159 +A159V Missense_Mutation Missense 159 +A159V Missense_Mutation Missense 159 +A159V Missense_Mutation Missense 159 +A159V Missense_Mutation Missense 159 +A159V Missense_Mutation Missense 159 +A159V Missense_Mutation Missense 159 +A159del In_Frame_Del Inframe 159 +A159Hfs*21 Frame_Shift_Del Truncating 159 +A161D Missense_Mutation Missense 161 +A161D Missense_Mutation Missense 161 +A161D Missense_Mutation Missense 161 +A161T Missense_Mutation Missense 161 +A161T Missense_Mutation Missense 161 +A161T Missense_Mutation Missense 161 +A161S Missense_Mutation Missense 161 +A161S Missense_Mutation Missense 161 +I162N Missense_Mutation Missense 162 +I162F Missense_Mutation Missense 162 +I162Sfs*8 Frame_Shift_Del Truncating 162 +I162S Missense_Mutation Missense 162 +M160_Y163delinsIG In_Frame_Del Inframe 162 +A161_I162delinsPS Missense_Mutation Missense 162 +Y163N Missense_Mutation Missense 163 +Y163N Missense_Mutation Missense 163 +Y163N Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163C Missense_Mutation Missense 163 +Y163H Missense_Mutation Missense 163 +Y163H Missense_Mutation Missense 163 +Y163H Missense_Mutation Missense 163 +Y163H Missense_Mutation Missense 163 +Y163H Missense_Mutation Missense 163 +Y163H Missense_Mutation Missense 163 +Y163* Nonsense_Mutation Truncating 163 +Y163D Missense_Mutation Missense 163 +Y163Lfs*7 Frame_Shift_Del Truncating 163 +K164E Missense_Mutation Missense 164 +K164E Missense_Mutation Missense 164 +K164E Missense_Mutation Missense 164 +K164E Missense_Mutation Missense 164 +K164E Missense_Mutation Missense 164 +K164* Nonsense_Mutation Truncating 164 +K164* Nonsense_Mutation Truncating 164 +K164* Nonsense_Mutation Truncating 164 +K164Sfs*6 Frame_Shift_Del Truncating 164 +Q165* Nonsense_Mutation Truncating 165 +Q165* Nonsense_Mutation Truncating 165 +Q165* Nonsense_Mutation Truncating 165 +Q165* Nonsense_Mutation Truncating 165 +Q165* Nonsense_Mutation Truncating 165 +Q165* Nonsense_Mutation Truncating 165 +Q165* Nonsense_Mutation Truncating 165 +Q165* Nonsense_Mutation Truncating 165 +Q165* Nonsense_Mutation Truncating 165 +Q165* Nonsense_Mutation Truncating 165 +Q165H Missense_Mutation Missense 165 +S166* Nonsense_Mutation Truncating 166 +S166* Nonsense_Mutation Truncating 166 +S166* Nonsense_Mutation Truncating 166 +S166* Nonsense_Mutation Truncating 166 +S166* Nonsense_Mutation Truncating 166 +S166* Nonsense_Mutation Truncating 166 +S166* Nonsense_Mutation Truncating 166 +Q167* Nonsense_Mutation Truncating 167 +Q167* Nonsense_Mutation Truncating 167 +Q167* Nonsense_Mutation Truncating 167 +Q167* Nonsense_Mutation Truncating 167 +Q167* Nonsense_Mutation Truncating 167 +Q167* Nonsense_Mutation Truncating 167 +Q167* Nonsense_Mutation Truncating 167 +Q167* Nonsense_Mutation Truncating 167 +Q167Afs*13 Frame_Shift_Del Truncating 167 +Q167Afs*13 Frame_Shift_Del Truncating 167 +Q167Hfs*4 Frame_Shift_Ins Truncating 167 +H168R Missense_Mutation Missense 168 +H168R Missense_Mutation Missense 168 +H168R Missense_Mutation Missense 168 +H168R Missense_Mutation Missense 168 +H168R Missense_Mutation Missense 168 +H168R Missense_Mutation Missense 168 +H168R Missense_Mutation Missense 168 +H168R Missense_Mutation Missense 168 +H168P Missense_Mutation Missense 168 +Q167_M169dup In_Frame_Ins Inframe 168 +H168Rfs*5 Frame_Shift_Del Truncating 168 +Q167_H168delins* Nonsense_Mutation Truncating 168 +M169del In_Frame_Del Inframe 169 +M169Dfs*11 Frame_Shift_Del Truncating 169 +M169Ifs*12 Frame_Shift_Ins Truncating 169 +X169_splice Splice_Site Truncating 169 +H168_T170dup In_Frame_Ins Inframe 169 +T170M Missense_Mutation Missense 170 +E171* Nonsense_Mutation Truncating 171 +E171* Nonsense_Mutation Truncating 171 +E171* Nonsense_Mutation Truncating 171 +E171* Nonsense_Mutation Truncating 171 +E171* Nonsense_Mutation Truncating 171 +E171* Nonsense_Mutation Truncating 171 +E171* Nonsense_Mutation Truncating 171 +E171* Nonsense_Mutation Truncating 171 +E171* Nonsense_Mutation Truncating 171 +E171* Nonsense_Mutation Truncating 171 +E171G Missense_Mutation Missense 171 +E171Rfs*3 Frame_Shift_Del Truncating 171 +E171Qfs*3 Frame_Shift_Del Truncating 171 +V172D Missense_Mutation Missense 172 +V172D Missense_Mutation Missense 172 +V172D Missense_Mutation Missense 172 +V172F Missense_Mutation Missense 172 +V172F Missense_Mutation Missense 172 +V172F Missense_Mutation Missense 172 +V172F Missense_Mutation Missense 172 +V172F Missense_Mutation Missense 172 +V172F Missense_Mutation Missense 172 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173L Missense_Mutation Missense 173 +V173M Missense_Mutation Missense 173 +V173M Missense_Mutation Missense 173 +V173M Missense_Mutation Missense 173 +V173M Missense_Mutation Missense 173 +V173M Missense_Mutation Missense 173 +V173M Missense_Mutation Missense 173 +V173M Missense_Mutation Missense 173 +V173M Missense_Mutation Missense 173 +V173M Missense_Mutation Missense 173 +V173M Missense_Mutation Missense 173 +V173M Missense_Mutation Missense 173 +V173A Missense_Mutation Missense 173 +V173A Missense_Mutation Missense 173 +V173G Missense_Mutation Missense 173 +V173* Frame_Shift_Del Truncating 173 +V173* Frame_Shift_Del Truncating 173 +V173* Frame_Shift_Del Truncating 173 +V173* Frame_Shift_Del Truncating 173 +V173* Frame_Shift_Del Truncating 173 +R174W Missense_Mutation Missense 174 +R174W Missense_Mutation Missense 174 +R174G Missense_Mutation Missense 174 +R174G Missense_Mutation Missense 174 +R174Gfs*73 Frame_Shift_Del Truncating 174 +V173_R175delinsGG In_Frame_Del Inframe 174 +R175L Missense_Mutation Missense 175 +R175L Missense_Mutation Missense 175 +R175L Missense_Mutation Missense 175 +R175L Missense_Mutation Missense 175 +R175L Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175H Missense_Mutation Missense 175 +R175G Missense_Mutation Missense 175 +R175G Missense_Mutation Missense 175 +R175G Missense_Mutation Missense 175 +R175C Missense_Mutation Missense 175 +R175C Missense_Mutation Missense 175 +R175C Missense_Mutation Missense 175 +R175Pfs*72 Frame_Shift_Del Truncating 175 +C176Y Missense_Mutation Missense 176 +C176Y Missense_Mutation Missense 176 +C176Y Missense_Mutation Missense 176 +C176Y Missense_Mutation Missense 176 +C176Y Missense_Mutation Missense 176 +C176Y Missense_Mutation Missense 176 +C176S Missense_Mutation Missense 176 +C176S Missense_Mutation Missense 176 +C176S Missense_Mutation Missense 176 +C176S Missense_Mutation Missense 176 +C176S Missense_Mutation Missense 176 +C176S Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176F Missense_Mutation Missense 176 +C176* Nonsense_Mutation Truncating 176 +C176* Nonsense_Mutation Truncating 176 +C176W Missense_Mutation Missense 176 +C176W Missense_Mutation Missense 176 +C176W Missense_Mutation Missense 176 +C176W Missense_Mutation Missense 176 +C176W Missense_Mutation Missense 176 +C176R Missense_Mutation Missense 176 +C176R Missense_Mutation Missense 176 +C176R Missense_Mutation Missense 176 +C176R Missense_Mutation Missense 176 +C176G Missense_Mutation Missense 176 +C176G Missense_Mutation Missense 176 +C176G Missense_Mutation Missense 176 +C176Sfs*67 Frame_Shift_Del Truncating 176 +C176* Nonsense_Mutation Truncating 176 +C176* Nonsense_Mutation Truncating 176 +P177R Missense_Mutation Missense 177 +H178Pfs*69 Frame_Shift_Del Truncating 178 +H178Tfs*69 Frame_Shift_Del Truncating 178 +H178Tfs*69 Frame_Shift_Del Truncating 178 +H178Tfs*69 Frame_Shift_Del Truncating 178 +H178Tfs*69 Frame_Shift_Del Truncating 178 +H178Tfs*69 Frame_Shift_Del Truncating 178 +H178Tfs*69 Frame_Shift_Del Truncating 178 +H178Tfs*69 Frame_Shift_Del Truncating 178 +H178D Missense_Mutation Missense 178 +H178D Missense_Mutation Missense 178 +H178D Missense_Mutation Missense 178 +H178D Missense_Mutation Missense 178 +H178P Missense_Mutation Missense 178 +H178P Missense_Mutation Missense 178 +H178P Missense_Mutation Missense 178 +H178Pfs*3 Frame_Shift_Ins Truncating 178 +H178Pfs*3 Frame_Shift_Ins Truncating 178 +H179Q Missense_Mutation Missense 179 +H179Q Missense_Mutation Missense 179 +H179Q Missense_Mutation Missense 179 +H179Q Missense_Mutation Missense 179 +H179Q Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179R Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179Y Missense_Mutation Missense 179 +H179L Missense_Mutation Missense 179 +H179L Missense_Mutation Missense 179 +H179L Missense_Mutation Missense 179 +H179L Missense_Mutation Missense 179 +H179L Missense_Mutation Missense 179 +H179L Missense_Mutation Missense 179 +H179L Missense_Mutation Missense 179 +H179L Missense_Mutation Missense 179 +H179L Missense_Mutation Missense 179 +H179D Missense_Mutation Missense 179 +H179D Missense_Mutation Missense 179 +H179D Missense_Mutation Missense 179 +H179D Missense_Mutation Missense 179 +H179N Missense_Mutation Missense 179 +H179P Missense_Mutation Missense 179 +H179P Missense_Mutation Missense 179 +H179del In_Frame_Del Inframe 179 +H179* Frame_Shift_Del Truncating 179 +P177_C182del In_Frame_Del Inframe 180 +P177_C182del In_Frame_Del Inframe 180 +P177_C182del In_Frame_Del Inframe 180 +P177_C182del In_Frame_Del Inframe 180 +P177_C182del In_Frame_Del Inframe 180 +P177_C182del In_Frame_Del Inframe 180 +E180K Missense_Mutation Missense 180 +E180K Missense_Mutation Missense 180 +E180K Missense_Mutation Missense 180 +E180K Missense_Mutation Missense 180 +E180K Missense_Mutation Missense 180 +E180K Missense_Mutation Missense 180 +E180K Missense_Mutation Missense 180 +E180D Missense_Mutation Missense 180 +E180* Nonsense_Mutation Truncating 180 +E180* Nonsense_Mutation Truncating 180 +R181C Missense_Mutation Missense 181 +R181C Missense_Mutation Missense 181 +R181C Missense_Mutation Missense 181 +R181C Missense_Mutation Missense 181 +R181C Missense_Mutation Missense 181 +R181P Missense_Mutation Missense 181 +R181P Missense_Mutation Missense 181 +R181P Missense_Mutation Missense 181 +R181P Missense_Mutation Missense 181 +R181P Missense_Mutation Missense 181 +R181P Missense_Mutation Missense 181 +R181H Missense_Mutation Missense 181 +R181H Missense_Mutation Missense 181 +X182_splice Splice_Site Truncating 182 +H179_D184del In_Frame_Del Inframe 182 +S183* Nonsense_Mutation Truncating 183 +S183* Nonsense_Mutation Truncating 183 +S183* Nonsense_Mutation Truncating 183 +S183* Nonsense_Mutation Truncating 183 +S183* Nonsense_Mutation Truncating 183 +S183* Nonsense_Mutation Truncating 183 +S183* Nonsense_Mutation Truncating 183 +S183* Nonsense_Mutation Truncating 183 +S183* Frame_Shift_Del Truncating 183 +X183_splice Splice_Site Truncating 183 +D184Afs*62 Frame_Shift_Del Truncating 184 +D184Afs*62 Frame_Shift_Del Truncating 184 +D184Afs*62 Frame_Shift_Del Truncating 184 +D184Afs*62 Frame_Shift_Del Truncating 184 +D184Efs*24 Frame_Shift_Del Truncating 184 +D184Efs*64 Frame_Shift_Ins Truncating 184 +D184Vfs*63 Frame_Shift_Del Truncating 184 +D184Vfs*63 Frame_Shift_Del Truncating 184 +D184E Missense_Mutation Missense 184 +S185Tfs*62 Frame_Shift_Del Truncating 185 +X185_splice Splice_Site Truncating 185 +S183_G187delinsC In_Frame_Del Inframe 185 +S185Afs*62 Frame_Shift_Del Truncating 185 +X186_splice Splice_Site Truncating 186 +X186_splice Splice_Site Truncating 186 +D186Gfs*61 Frame_Shift_Del Truncating 186 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +G187R Missense_Mutation Missense 187 +G187R Missense_Mutation Missense 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +X187_splice Splice_Site Truncating 187 +G187D Missense_Mutation Missense 187 +X187_splice Splice_Site Truncating 187 +L188Pfs*19 Frame_Shift_Del Truncating 188 +L188Wfs*59 Frame_Shift_Del Truncating 188 +L188Wfs*59 Frame_Shift_Del Truncating 188 +L188Q Missense_Mutation Missense 188 +L188Rfs*59 Frame_Shift_Del Truncating 188 +A189Pfs*58 Frame_Shift_Del Truncating 189 +A189Gfs*20 Frame_Shift_Ins Truncating 189 +P190L Missense_Mutation Missense 190 +P190L Missense_Mutation Missense 190 +P190L Missense_Mutation Missense 190 +P190L Missense_Mutation Missense 190 +P190L Missense_Mutation Missense 190 +P190L Missense_Mutation Missense 190 +P190Lfs*57 Frame_Shift_Del Truncating 190 +P190T Missense_Mutation Missense 190 +P190T Missense_Mutation Missense 190 +P190T Missense_Mutation Missense 190 +P190S Missense_Mutation Missense 190 +P190Lfs*53 Frame_Shift_Del Truncating 190 +P190Sfs*17 Frame_Shift_Del Truncating 190 +P190Sfs*12 Frame_Shift_Del Truncating 190 +P191del In_Frame_Del Inframe 191 +P191del In_Frame_Del Inframe 191 +P191del In_Frame_Del Inframe 191 +P191del In_Frame_Del Inframe 191 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192* Nonsense_Mutation Truncating 192 +Q192L Missense_Mutation Missense 192 +Q192_H193delinsHY Missense_Mutation Missense 192 +H193Y Missense_Mutation Missense 193 +H193Y Missense_Mutation Missense 193 +H193Y Missense_Mutation Missense 193 +H193Y Missense_Mutation Missense 193 +H193Y Missense_Mutation Missense 193 +H193Y Missense_Mutation Missense 193 +H193Y Missense_Mutation Missense 193 +H193Y Missense_Mutation Missense 193 +H193Y Missense_Mutation Missense 193 +H193Y Missense_Mutation Missense 193 +H193Y Missense_Mutation Missense 193 +H193Y Missense_Mutation Missense 193 +H193Y Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193R Missense_Mutation Missense 193 +H193L Missense_Mutation Missense 193 +H193L Missense_Mutation Missense 193 +H193L Missense_Mutation Missense 193 +H193L Missense_Mutation Missense 193 +H193L Missense_Mutation Missense 193 +H193L Missense_Mutation Missense 193 +H193L Missense_Mutation Missense 193 +H193L Missense_Mutation Missense 193 +H193P Missense_Mutation Missense 193 +H193D Missense_Mutation Missense 193 +H193D Missense_Mutation Missense 193 +H193N Missense_Mutation Missense 193 +H193N Missense_Mutation Missense 193 +H193N Missense_Mutation Missense 193 +H193Q Missense_Mutation Missense 193 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194R Missense_Mutation Missense 194 +L194F Missense_Mutation Missense 194 +L194F Missense_Mutation Missense 194 +L194F Missense_Mutation Missense 194 +L194F Missense_Mutation Missense 194 +L194F Missense_Mutation Missense 194 +L194F Missense_Mutation Missense 194 +L194F Missense_Mutation Missense 194 +L194F Missense_Mutation Missense 194 +L194P Missense_Mutation Missense 194 +I195Lfs*53 Frame_Shift_Ins Truncating 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195T Missense_Mutation Missense 195 +I195F Missense_Mutation Missense 195 +I195F Missense_Mutation Missense 195 +I195F Missense_Mutation Missense 195 +I195F Missense_Mutation Missense 195 +I195F Missense_Mutation Missense 195 +I195N Missense_Mutation Missense 195 +I195N Missense_Mutation Missense 195 +I195N Missense_Mutation Missense 195 +I195N Missense_Mutation Missense 195 +I195S Missense_Mutation Missense 195 +I195Yfs*14 Frame_Shift_Ins Truncating 195 +I195Nfs*14 Frame_Shift_Ins Truncating 195 +I195K Missense_Mutation Missense 195 +I195Sfs*52 Frame_Shift_Del Truncating 195 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196* Nonsense_Mutation Truncating 196 +R196P Missense_Mutation Missense 196 +P191_L201del In_Frame_Del Inframe 196 +R196Q Missense_Mutation Missense 196 +R196L Missense_Mutation Missense 196 +V197E Missense_Mutation Missense 197 +V197E Missense_Mutation Missense 197 +V197M Missense_Mutation Missense 197 +V197M Missense_Mutation Missense 197 +E198* Nonsense_Mutation Truncating 198 +E198* Nonsense_Mutation Truncating 198 +E198* Nonsense_Mutation Truncating 198 +E198* Nonsense_Mutation Truncating 198 +E198* Nonsense_Mutation Truncating 198 +E198* Nonsense_Mutation Truncating 198 +E198* Nonsense_Mutation Truncating 198 +E198* Nonsense_Mutation Truncating 198 +E198* Nonsense_Mutation Truncating 198 +E198Kfs*49 Frame_Shift_Del Truncating 198 +E198* Nonsense_Mutation Truncating 198 +G199V Missense_Mutation Missense 199 +G199V Missense_Mutation Missense 199 +G199V Missense_Mutation Missense 199 +G199V Missense_Mutation Missense 199 +G199* Nonsense_Mutation Truncating 199 +G199* Nonsense_Mutation Truncating 199 +G199E Missense_Mutation Missense 199 +G199E Missense_Mutation Missense 199 +G199E Missense_Mutation Missense 199 +G199E Missense_Mutation Missense 199 +G199E Missense_Mutation Missense 199 +G199E Missense_Mutation Missense 199 +N200Ifs*47 Frame_Shift_Del Truncating 200 +N200Ifs*47 Frame_Shift_Del Truncating 200 +L201* Nonsense_Mutation Truncating 201 +L201Cfs*46 Frame_Shift_Del Truncating 201 +L201Cfs*46 Frame_Shift_Del Truncating 201 +L201Afs*7 Frame_Shift_Del Truncating 201 +L201Ifs*47 Frame_Shift_Ins Truncating 201 +R202C Missense_Mutation Missense 202 +R202C Missense_Mutation Missense 202 +G199_E204del In_Frame_Del Inframe 202 +G199_E204del In_Frame_Del Inframe 202 +G199_E204del In_Frame_Del Inframe 202 +G199_E204del In_Frame_Del Inframe 202 +V203L Missense_Mutation Missense 203 +E204* Nonsense_Mutation Truncating 204 +E204* Nonsense_Mutation Truncating 204 +E204* Nonsense_Mutation Truncating 204 +E204* Nonsense_Mutation Truncating 204 +E204* Nonsense_Mutation Truncating 204 +E204* Nonsense_Mutation Truncating 204 +E204* Nonsense_Mutation Truncating 204 +E204* Nonsense_Mutation Truncating 204 +E204* Nonsense_Mutation Truncating 204 +E204Wfs*44 Frame_Shift_Ins Truncating 204 +E204* Nonsense_Mutation Truncating 204 +Y205C Missense_Mutation Missense 205 +Y205C Missense_Mutation Missense 205 +Y205C Missense_Mutation Missense 205 +Y205C Missense_Mutation Missense 205 +Y205C Missense_Mutation Missense 205 +Y205C Missense_Mutation Missense 205 +Y205C Missense_Mutation Missense 205 +Y205C Missense_Mutation Missense 205 +Y205C Missense_Mutation Missense 205 +Y205C Missense_Mutation Missense 205 +Y205C Missense_Mutation Missense 205 +Y205C Missense_Mutation Missense 205 +Y205C Missense_Mutation Missense 205 +Y205H Missense_Mutation Missense 205 +Y205H Missense_Mutation Missense 205 +Y205H Missense_Mutation Missense 205 +Y205H Missense_Mutation Missense 205 +Y205H Missense_Mutation Missense 205 +Y205S Missense_Mutation Missense 205 +Y205S Missense_Mutation Missense 205 +Y205S Missense_Mutation Missense 205 +Y205F Missense_Mutation Missense 205 +Y205F Missense_Mutation Missense 205 +Y205F Missense_Mutation Missense 205 +E204_L206del In_Frame_Del Inframe 205 +L206Ffs*35 Frame_Shift_Del Truncating 206 +X206_splice Splice_Site Truncating 206 +D207Mfs*40 Frame_Shift_Del Truncating 207 +D207Afs*39 Frame_Shift_Del Truncating 207 +D207Ffs*3 Frame_Shift_Ins Truncating 207 +D208V Missense_Mutation Missense 208 +D208V Missense_Mutation Missense 208 +D208V Missense_Mutation Missense 208 +D208V Missense_Mutation Missense 208 +D208V Missense_Mutation Missense 208 +D208V Missense_Mutation Missense 208 +D208V Missense_Mutation Missense 208 +D208N Missense_Mutation Missense 208 +D208E Missense_Mutation Missense 208 +D208Ffs*35 Frame_Shift_Del Truncating 208 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209Kfs*6 Frame_Shift_Del Truncating 209 +R209* Nonsense_Mutation Truncating 209 +R209* Nonsense_Mutation Truncating 209 +R209K Missense_Mutation Missense 209 +R209K Missense_Mutation Missense 209 +R209Sfs*5 Frame_Shift_Del Truncating 209 +N210Hfs*5 Frame_Shift_Del Truncating 210 +N210Tfs*7 Nonsense_Mutation Truncating 210 +N210Kfs*6 Frame_Shift_Ins Truncating 210 +T211I Missense_Mutation Missense 211 +T211I Missense_Mutation Missense 211 +T211I Missense_Mutation Missense 211 +T211Ifs*33 Frame_Shift_Del Truncating 211 +F212Sfs*3 Frame_Shift_Del Truncating 212 +F212Sfs*3 Frame_Shift_Del Truncating 212 +F212Sfs*3 Frame_Shift_Del Truncating 212 +F212Sfs*3 Frame_Shift_Del Truncating 212 +F212Sfs*3 Frame_Shift_Del Truncating 212 +T211_H214del In_Frame_Del Inframe 212 +R213Q Missense_Mutation Missense 213 +R213Q Missense_Mutation Missense 213 +R213Q Missense_Mutation Missense 213 +R213Q Missense_Mutation Missense 213 +R213Q Missense_Mutation Missense 213 +R213Q Missense_Mutation Missense 213 +R213Q Missense_Mutation Missense 213 +R213Q Missense_Mutation Missense 213 +R213Q Missense_Mutation Missense 213 +R213Q Missense_Mutation Missense 213 +R213Q Missense_Mutation Missense 213 +R213Q Missense_Mutation Missense 213 +R213Q Missense_Mutation Missense 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213* Nonsense_Mutation Truncating 213 +R213L Missense_Mutation Missense 213 +R213L Missense_Mutation Missense 213 +R213L Missense_Mutation Missense 213 +R213L Missense_Mutation Missense 213 +R213L Missense_Mutation Missense 213 +R213L Missense_Mutation Missense 213 +R213L Missense_Mutation Missense 213 +R213L Missense_Mutation Missense 213 +R213L Missense_Mutation Missense 213 +R213Dfs*34 Frame_Shift_Del Truncating 213 +R213Dfs*34 Frame_Shift_Del Truncating 213 +R213Dfs*34 Frame_Shift_Del Truncating 213 +R213Dfs*34 Frame_Shift_Del Truncating 213 +R213Dfs*34 Frame_Shift_Del Truncating 213 +R213G Missense_Mutation Missense 213 +R213G Missense_Mutation Missense 213 +R213Sfs*3 Frame_Shift_Ins Truncating 213 +F212_H214del In_Frame_Del Inframe 213 +R213Yfs*34 Frame_Shift_Del Truncating 213 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214R Missense_Mutation Missense 214 +H214L Missense_Mutation Missense 214 +H214Lfs*33 Frame_Shift_Del Truncating 214 +H214Lfs*33 Frame_Shift_Del Truncating 214 +H214Qfs*7 Frame_Shift_Del Truncating 214 +H214Qfs*7 Frame_Shift_Del Truncating 214 +H214Ifs*33 Frame_Shift_Del Truncating 214 +H214_S215delinsQN Missense_Mutation Missense 214 +H214Ifs*33 Frame_Shift_Del Truncating 214 +H214Rfs*25 Frame_Shift_Del Truncating 214 +H214P Missense_Mutation Missense 214 +H214Q Missense_Mutation Missense 214 +H214Q Missense_Mutation Missense 214 +S215I Missense_Mutation Missense 215 +S215I Missense_Mutation Missense 215 +S215I Missense_Mutation Missense 215 +S215I Missense_Mutation Missense 215 +S215I Missense_Mutation Missense 215 +S215I Missense_Mutation Missense 215 +S215I Missense_Mutation Missense 215 +S215I Missense_Mutation Missense 215 +S215I Missense_Mutation Missense 215 +S215I Missense_Mutation Missense 215 +S215I Missense_Mutation Missense 215 +S215I Missense_Mutation Missense 215 +S215I Missense_Mutation Missense 215 +S215C Missense_Mutation Missense 215 +S215R Missense_Mutation Missense 215 +S215G Missense_Mutation Missense 215 +S215G Missense_Mutation Missense 215 +S215G Missense_Mutation Missense 215 +S215N Missense_Mutation Missense 215 +S215N Missense_Mutation Missense 215 +S215N Missense_Mutation Missense 215 +S215N Missense_Mutation Missense 215 +S215N Missense_Mutation Missense 215 +S215R Missense_Mutation Missense 215 +S215R Missense_Mutation Missense 215 +S215R Missense_Mutation Missense 215 +S215R Missense_Mutation Missense 215 +S215R Missense_Mutation Missense 215 +S215R Missense_Mutation Missense 215 +S215T Missense_Mutation Missense 215 +S215Ifs*36 Frame_Shift_Ins Truncating 215 +V216L Missense_Mutation Missense 216 +V216L Missense_Mutation Missense 216 +V216L Missense_Mutation Missense 216 +V216L Missense_Mutation Missense 216 +V216L Missense_Mutation Missense 216 +V216L Missense_Mutation Missense 216 +V216M Missense_Mutation Missense 216 +V216M Missense_Mutation Missense 216 +V216M Missense_Mutation Missense 216 +V216M Missense_Mutation Missense 216 +V216M Missense_Mutation Missense 216 +V216M Missense_Mutation Missense 216 +V216M Missense_Mutation Missense 216 +V216M Missense_Mutation Missense 216 +V216M Missense_Mutation Missense 216 +V216M Missense_Mutation Missense 216 +V216M Missense_Mutation Missense 216 +V216E Missense_Mutation Missense 216 +V216E Missense_Mutation Missense 216 +V216G Missense_Mutation Missense 216 +V216G Missense_Mutation Missense 216 +V216G Missense_Mutation Missense 216 +V216L Missense_Mutation Missense 216 +V216L Missense_Mutation Missense 216 +V216Gfs*5 Frame_Shift_Del Truncating 216 +V217G Missense_Mutation Missense 217 +V217Gfs*30 Frame_Shift_Del Truncating 217 +V218G Missense_Mutation Missense 218 +V218G Missense_Mutation Missense 218 +V218del In_Frame_Del Inframe 218 +V218L Missense_Mutation Missense 218 +V218dup In_Frame_Ins Inframe 218 +V218M Missense_Mutation Missense 218 +V218Gfs*4 Frame_Shift_Ins Truncating 218 +V218Gfs*30 Frame_Shift_Ins Truncating 218 +V217_V218insDSVV In_Frame_Ins Inframe 218 +P219R Missense_Mutation Missense 219 +P219Lfs*28 Frame_Shift_Del Truncating 219 +P219Lfs*28 Frame_Shift_Del Truncating 219 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220C Missense_Mutation Missense 220 +Y220N Missense_Mutation Missense 220 +Y220N Missense_Mutation Missense 220 +Y220H Missense_Mutation Missense 220 +Y220H Missense_Mutation Missense 220 +Y220H Missense_Mutation Missense 220 +Y220S Missense_Mutation Missense 220 +Y220S Missense_Mutation Missense 220 +Y220S Missense_Mutation Missense 220 +Y220S Missense_Mutation Missense 220 +Y220D Missense_Mutation Missense 220 +Y220Mfs*27 Frame_Shift_Del Truncating 220 +Y220Mfs*27 Frame_Shift_Del Truncating 220 +Y220* Nonsense_Mutation Truncating 220 +Y220* Nonsense_Mutation Truncating 220 +Y220* Nonsense_Mutation Truncating 220 +Y220* Nonsense_Mutation Truncating 220 +Y220Hfs*5 Nonsense_Mutation Truncating 220 +E221* Nonsense_Mutation Truncating 221 +E221* Nonsense_Mutation Truncating 221 +E221Gfs*25 Frame_Shift_Del Truncating 221 +P222Rfs*25 Frame_Shift_Del Truncating 222 +P223L Missense_Mutation Missense 223 +P223L Missense_Mutation Missense 223 +P223Lfs*24 Frame_Shift_Del Truncating 223 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +X224_splice Splice_Site Truncating 224 +E224* Nonsense_Mutation Truncating 224 +E224* Nonsense_Mutation Truncating 224 +E224D Missense_Mutation Missense 224 +E224D Missense_Mutation Missense 224 +E224D Missense_Mutation Missense 224 +E224D Missense_Mutation Missense 224 +E224D Missense_Mutation Missense 224 +E224D Missense_Mutation Missense 224 +E224D Missense_Mutation Missense 224 +E224D Missense_Mutation Missense 224 +E224D Missense_Mutation Missense 224 +X224_splice Splice_Site Truncating 224 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +X225_splice Splice_Site Truncating 225 +V225I Missense_Mutation Missense 225 +V225Gfs*20 Frame_Shift_Del Truncating 225 +G226D Missense_Mutation Missense 226 +S227Hfs*9 Frame_Shift_Del Truncating 227 +D228* Frame_Shift_Ins Truncating 228 +D228* Frame_Shift_Ins Truncating 228 +D228H Missense_Mutation Missense 228 +D228H Missense_Mutation Missense 228 +C229* Nonsense_Mutation Truncating 229 +C229* Nonsense_Mutation Truncating 229 +C229Yfs*10 Frame_Shift_Del Truncating 229 +C229Yfs*10 Frame_Shift_Del Truncating 229 +C229Yfs*10 Frame_Shift_Del Truncating 229 +C229Yfs*10 Frame_Shift_Del Truncating 229 +C229Yfs*10 Frame_Shift_Del Truncating 229 +C229Yfs*8 Frame_Shift_Del Truncating 229 +C229Y Missense_Mutation Missense 229 +C229Vfs*18 Frame_Shift_Del Truncating 229 +T230Hfs*9 Frame_Shift_Del Truncating 230 +C229_T230del In_Frame_Del Inframe 230 +T230Pfs*17 Frame_Shift_Del Truncating 230 +C229_H233del In_Frame_Del Inframe 231 +T231Nfs*9 Frame_Shift_Ins Truncating 231 +T231N Missense_Mutation Missense 231 +I232Sfs*15 Frame_Shift_Del Truncating 232 +I232S Missense_Mutation Missense 232 +I232F Missense_Mutation Missense 232 +I232N Missense_Mutation Missense 232 +T231_I232del In_Frame_Del Inframe 232 +T231_I232insTDCTT In_Frame_Ins Inframe 232 +H233Vfs*8 Frame_Shift_Ins Truncating 233 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234C Missense_Mutation Missense 234 +Y234H Missense_Mutation Missense 234 +Y234H Missense_Mutation Missense 234 +Y234H Missense_Mutation Missense 234 +Y234H Missense_Mutation Missense 234 +Y234H Missense_Mutation Missense 234 +Y234H Missense_Mutation Missense 234 +Y234* Nonsense_Mutation Truncating 234 +Y234* Nonsense_Mutation Truncating 234 +Y234* Nonsense_Mutation Truncating 234 +Y234Tfs*11 Frame_Shift_Del Truncating 234 +Y234N Missense_Mutation Missense 234 +Y234N Missense_Mutation Missense 234 +Y234N Missense_Mutation Missense 234 +Y234N Missense_Mutation Missense 234 +Y234N Missense_Mutation Missense 234 +Y234D Missense_Mutation Missense 234 +Y234S Missense_Mutation Missense 234 +Y234* Nonsense_Mutation Truncating 234 +Y234del In_Frame_Del Inframe 234 +N235D Missense_Mutation Missense 235 +N235D Missense_Mutation Missense 235 +N235D Missense_Mutation Missense 235 +N235del In_Frame_Del Inframe 235 +N235del In_Frame_Del Inframe 235 +N235S Missense_Mutation Missense 235 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236C Missense_Mutation Missense 236 +Y236* Nonsense_Mutation Truncating 236 +Y236N Missense_Mutation Missense 236 +Y236N Missense_Mutation Missense 236 +Y236D Missense_Mutation Missense 236 +Y236D Missense_Mutation Missense 236 +Y236D Missense_Mutation Missense 236 +Y234_M237del In_Frame_Del Inframe 236 +Y236* Nonsense_Mutation Truncating 236 +Y236S Missense_Mutation Missense 236 +Y236S Missense_Mutation Missense 236 +Y236H Missense_Mutation Missense 236 +Y236H Missense_Mutation Missense 236 +Y236_M237delinsL In_Frame_Del Inframe 236 +Y236* Frame_Shift_Del Truncating 236 +N235_Y236dup In_Frame_Ins Inframe 236 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237I Missense_Mutation Missense 237 +M237K Missense_Mutation Missense 237 +M237Cfs*10 Frame_Shift_Del Truncating 237 +M237Tfs*7 Frame_Shift_Del Truncating 237 +X237_splice Splice_Site Truncating 237 +M237Vfs*9 Frame_Shift_Del Truncating 237 +C238F Missense_Mutation Missense 238 +C238F Missense_Mutation Missense 238 +C238F Missense_Mutation Missense 238 +C238F Missense_Mutation Missense 238 +C238F Missense_Mutation Missense 238 +C238F Missense_Mutation Missense 238 +C238F Missense_Mutation Missense 238 +C238F Missense_Mutation Missense 238 +C238R Missense_Mutation Missense 238 +C238R Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238Y Missense_Mutation Missense 238 +C238G Missense_Mutation Missense 238 +C238G Missense_Mutation Missense 238 +C238G Missense_Mutation Missense 238 +C238S Missense_Mutation Missense 238 +C238* Frame_Shift_Del Truncating 238 +C238W Missense_Mutation Missense 238 +C238Vfs*9 Frame_Shift_Del Truncating 238 +C238* Nonsense_Mutation Truncating 238 +N239S Missense_Mutation Missense 239 +N239S Missense_Mutation Missense 239 +N239S Missense_Mutation Missense 239 +N239S Missense_Mutation Missense 239 +N239S Missense_Mutation Missense 239 +N239S Missense_Mutation Missense 239 +N239S Missense_Mutation Missense 239 +N239S Missense_Mutation Missense 239 +N239* Frame_Shift_Ins Truncating 239 +N239* Frame_Shift_Ins Truncating 239 +N239D Missense_Mutation Missense 239 +N239D Missense_Mutation Missense 239 +N239D Missense_Mutation Missense 239 +N239D Missense_Mutation Missense 239 +N239D Missense_Mutation Missense 239 +N239D Missense_Mutation Missense 239 +N239D Missense_Mutation Missense 239 +N239D Missense_Mutation Missense 239 +N239D Missense_Mutation Missense 239 +N239K Missense_Mutation Missense 239 +N239K Missense_Mutation Missense 239 +C238_S240del In_Frame_Del Inframe 239 +N239Tfs*8 Frame_Shift_Del Truncating 239 +N239Tfs*8 Frame_Shift_Del Truncating 239 +N239H Missense_Mutation Missense 239 +N239H Missense_Mutation Missense 239 +N239dup In_Frame_Ins Inframe 239 +N239dup In_Frame_Ins Inframe 239 +N239Kfs*15 Frame_Shift_Del Truncating 239 +N239Kfs*22 Frame_Shift_Del Truncating 239 +S240R Missense_Mutation Missense 240 +S240G Missense_Mutation Missense 240 +S240G Missense_Mutation Missense 240 +S240G Missense_Mutation Missense 240 +S240G Missense_Mutation Missense 240 +N239_S240del In_Frame_Del Inframe 240 +S240C Missense_Mutation Missense 240 +S240_S241del In_Frame_Del Inframe 240 +S240F Missense_Mutation Missense 240 +S240F Missense_Mutation Missense 240 +N239_S240delinsC In_Frame_Del Inframe 240 +S241C Missense_Mutation Missense 241 +S241C Missense_Mutation Missense 241 +S241C Missense_Mutation Missense 241 +S241C Missense_Mutation Missense 241 +S241C Missense_Mutation Missense 241 +S241C Missense_Mutation Missense 241 +S241C Missense_Mutation Missense 241 +S241C Missense_Mutation Missense 241 +S241C Missense_Mutation Missense 241 +S241C Missense_Mutation Missense 241 +S241C Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +S241Y Missense_Mutation Missense 241 +S241Y Missense_Mutation Missense 241 +S241Y Missense_Mutation Missense 241 +S241Y Missense_Mutation Missense 241 +S241Pfs*6 Frame_Shift_Del Truncating 241 +S241P Missense_Mutation Missense 241 +S241P Missense_Mutation Missense 241 +S241P Missense_Mutation Missense 241 +S241dup In_Frame_Ins Inframe 241 +S241T Missense_Mutation Missense 241 +S241F Missense_Mutation Missense 241 +C242F Missense_Mutation Missense 242 +C242F Missense_Mutation Missense 242 +C242F Missense_Mutation Missense 242 +C242F Missense_Mutation Missense 242 +C242F Missense_Mutation Missense 242 +C242F Missense_Mutation Missense 242 +C242F Missense_Mutation Missense 242 +C242F Missense_Mutation Missense 242 +C242F Missense_Mutation Missense 242 +C242F Missense_Mutation Missense 242 +C242R Missense_Mutation Missense 242 +C242Afs*5 Frame_Shift_Del Truncating 242 +C242Afs*5 Frame_Shift_Del Truncating 242 +C242Afs*5 Frame_Shift_Del Truncating 242 +C242Afs*5 Frame_Shift_Del Truncating 242 +C242Afs*5 Frame_Shift_Del Truncating 242 +C242Afs*5 Frame_Shift_Del Truncating 242 +C242Afs*5 Frame_Shift_Del Truncating 242 +C242Afs*5 Frame_Shift_Del Truncating 242 +C242W Missense_Mutation Missense 242 +C242W Missense_Mutation Missense 242 +C242Y Missense_Mutation Missense 242 +C242Y Missense_Mutation Missense 242 +C242Y Missense_Mutation Missense 242 +C242Y Missense_Mutation Missense 242 +C242Y Missense_Mutation Missense 242 +C242Y Missense_Mutation Missense 242 +C242Y Missense_Mutation Missense 242 +C242G Missense_Mutation Missense 242 +C242S Missense_Mutation Missense 242 +C242S Missense_Mutation Missense 242 +C242S Missense_Mutation Missense 242 +C242S Missense_Mutation Missense 242 +C242_M243delinsWL Missense_Mutation Missense 242 +C242Lfs*22 Frame_Shift_Ins Truncating 242 +M243* Frame_Shift_Del Truncating 243 +M243I Missense_Mutation Missense 243 +G244V Missense_Mutation Missense 244 +G244V Missense_Mutation Missense 244 +G244V Missense_Mutation Missense 244 +G244C Missense_Mutation Missense 244 +G244C Missense_Mutation Missense 244 +G244C Missense_Mutation Missense 244 +G244C Missense_Mutation Missense 244 +G244C Missense_Mutation Missense 244 +G244C Missense_Mutation Missense 244 +G244C Missense_Mutation Missense 244 +G244C Missense_Mutation Missense 244 +G244C Missense_Mutation Missense 244 +G244C Missense_Mutation Missense 244 +G244D Missense_Mutation Missense 244 +G244D Missense_Mutation Missense 244 +G244D Missense_Mutation Missense 244 +G244D Missense_Mutation Missense 244 +G244D Missense_Mutation Missense 244 +G244D Missense_Mutation Missense 244 +G244D Missense_Mutation Missense 244 +G244D Missense_Mutation Missense 244 +G244D Missense_Mutation Missense 244 +G244D Missense_Mutation Missense 244 +G244S Missense_Mutation Missense 244 +G244S Missense_Mutation Missense 244 +G244S Missense_Mutation Missense 244 +G244S Missense_Mutation Missense 244 +G244S Missense_Mutation Missense 244 +G244S Missense_Mutation Missense 244 +G244Afs*3 Frame_Shift_Del Truncating 244 +G244Afs*3 Frame_Shift_Del Truncating 244 +G244Afs*3 Frame_Shift_Del Truncating 244 +G244F Missense_Mutation Missense 244 +M243_G244delinsIS Missense_Mutation Missense 244 +G244Tfs*19 Frame_Shift_Ins Truncating 244 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245D Missense_Mutation Missense 245 +G245V Missense_Mutation Missense 245 +G245V Missense_Mutation Missense 245 +G245V Missense_Mutation Missense 245 +G245V Missense_Mutation Missense 245 +G245V Missense_Mutation Missense 245 +G245V Missense_Mutation Missense 245 +G245V Missense_Mutation Missense 245 +G245V Missense_Mutation Missense 245 +G245V Missense_Mutation Missense 245 +G245V Missense_Mutation Missense 245 +G245V Missense_Mutation Missense 245 +G245C Missense_Mutation Missense 245 +G245C Missense_Mutation Missense 245 +G245C Missense_Mutation Missense 245 +G245C Missense_Mutation Missense 245 +G245C Missense_Mutation Missense 245 +G245C Missense_Mutation Missense 245 +G245C Missense_Mutation Missense 245 +G245C Missense_Mutation Missense 245 +G245C Missense_Mutation Missense 245 +G245C Missense_Mutation Missense 245 +G245C Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245S Missense_Mutation Missense 245 +G245R Missense_Mutation Missense 245 +G245R Missense_Mutation Missense 245 +G245R Missense_Mutation Missense 245 +G245R Missense_Mutation Missense 245 +G245N Missense_Mutation Missense 245 +M246I Missense_Mutation Missense 246 +M246I Missense_Mutation Missense 246 +M246I Missense_Mutation Missense 246 +M246I Missense_Mutation Missense 246 +M246I Missense_Mutation Missense 246 +M246V Missense_Mutation Missense 246 +M246V Missense_Mutation Missense 246 +M246V Missense_Mutation Missense 246 +M246V Missense_Mutation Missense 246 +M246V Missense_Mutation Missense 246 +M246V Missense_Mutation Missense 246 +M246V Missense_Mutation Missense 246 +M246V Missense_Mutation Missense 246 +M246V Missense_Mutation Missense 246 +M246V Missense_Mutation Missense 246 +M246V Missense_Mutation Missense 246 +M246T Missense_Mutation Missense 246 +M246T Missense_Mutation Missense 246 +M246L Missense_Mutation Missense 246 +M246* Frame_Shift_Del Truncating 246 +M246* Frame_Shift_Del Truncating 246 +M246* Frame_Shift_Del Truncating 246 +M246L Missense_Mutation Missense 246 +M246L Missense_Mutation Missense 246 +M246L Missense_Mutation Missense 246 +M246K Missense_Mutation Missense 246 +M246K Missense_Mutation Missense 246 +M246K Missense_Mutation Missense 246 +M246Ifs*99 Frame_Shift_Del Truncating 246 +X246_splice Splice_Site Truncating 246 +N247I Missense_Mutation Missense 247 +N247I Missense_Mutation Missense 247 +N247I Missense_Mutation Missense 247 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248Q Missense_Mutation Missense 248 +R248P Missense_Mutation Missense 248 +R248P Missense_Mutation Missense 248 +R248P Missense_Mutation Missense 248 +R248P Missense_Mutation Missense 248 +R248P Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248W Missense_Mutation Missense 248 +R248L Missense_Mutation Missense 248 +R248L Missense_Mutation Missense 248 +R248L Missense_Mutation Missense 248 +R248L Missense_Mutation Missense 248 +R248L Missense_Mutation Missense 248 +R248L Missense_Mutation Missense 248 +R248L Missense_Mutation Missense 248 +R248L Missense_Mutation Missense 248 +R248L Missense_Mutation Missense 248 +R248G Missense_Mutation Missense 248 +R248G Missense_Mutation Missense 248 +R248G Missense_Mutation Missense 248 +R248G Missense_Mutation Missense 248 +R248G Missense_Mutation Missense 248 +R248G Missense_Mutation Missense 248 +G245_P250delinsA In_Frame_Del Inframe 248 +R248Gfs*97 Frame_Shift_Del Truncating 248 +R249W Missense_Mutation Missense 249 +R249W Missense_Mutation Missense 249 +R249W Missense_Mutation Missense 249 +R249W Missense_Mutation Missense 249 +R249W Missense_Mutation Missense 249 +R249W Missense_Mutation Missense 249 +R249M Missense_Mutation Missense 249 +R249M Missense_Mutation Missense 249 +R249M Missense_Mutation Missense 249 +R249M Missense_Mutation Missense 249 +R249M Missense_Mutation Missense 249 +R249M Missense_Mutation Missense 249 +R249M Missense_Mutation Missense 249 +R249M Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249K Missense_Mutation Missense 249 +R249T Missense_Mutation Missense 249 +R249T Missense_Mutation Missense 249 +R249T Missense_Mutation Missense 249 +R249T Missense_Mutation Missense 249 +R249T Missense_Mutation Missense 249 +R249T Missense_Mutation Missense 249 +R249T Missense_Mutation Missense 249 +R249T Missense_Mutation Missense 249 +R249T Missense_Mutation Missense 249 +R249T Missense_Mutation Missense 249 +R249G Missense_Mutation Missense 249 +R249G Missense_Mutation Missense 249 +R249G Missense_Mutation Missense 249 +R249G Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249S Missense_Mutation Missense 249 +R249Kfs*15 Frame_Shift_Ins Truncating 249 +R249Gfs*96 Frame_Shift_Del Truncating 249 +R249G Missense_Mutation Missense 249 +R249I Missense_Mutation Missense 249 +M243_I255del In_Frame_Del Inframe 249 +R249Sfs*96 Frame_Shift_Del Truncating 249 +P250L Missense_Mutation Missense 250 +P250L Missense_Mutation Missense 250 +P250L Missense_Mutation Missense 250 +P250L Missense_Mutation Missense 250 +P250L Missense_Mutation Missense 250 +P250L Missense_Mutation Missense 250 +P250L Missense_Mutation Missense 250 +P250L Missense_Mutation Missense 250 +P250L Missense_Mutation Missense 250 +P250L Missense_Mutation Missense 250 +P250L Missense_Mutation Missense 250 +I251N Missense_Mutation Missense 251 +I251F Missense_Mutation Missense 251 +I251F Missense_Mutation Missense 251 +I251F Missense_Mutation Missense 251 +I251F Missense_Mutation Missense 251 +I251S Missense_Mutation Missense 251 +P250_L252del In_Frame_Del Inframe 251 +I251M Missense_Mutation Missense 251 +I251N Missense_Mutation Missense 251 +L252P Missense_Mutation Missense 252 +L252P Missense_Mutation Missense 252 +L252P Missense_Mutation Missense 252 +L252dup In_Frame_Ins Inframe 252 +L252del In_Frame_Del Inframe 252 +T253dup In_Frame_Ins Inframe 253 +T253A Missense_Mutation Missense 253 +T253A Missense_Mutation Missense 253 +T253P Missense_Mutation Missense 253 +T253P Missense_Mutation Missense 253 +T253P Missense_Mutation Missense 253 +T253Pfs*92 Frame_Shift_Del Truncating 253 +T253Hfs*11 Frame_Shift_Ins Truncating 253 +T253Nfs*11 Frame_Shift_Ins Truncating 253 +I254S Missense_Mutation Missense 254 +I254S Missense_Mutation Missense 254 +I254S Missense_Mutation Missense 254 +I254Sfs*91 Frame_Shift_Del Truncating 254 +I254M Missense_Mutation Missense 254 +I254N Missense_Mutation Missense 254 +I254F Missense_Mutation Missense 254 +I254L Missense_Mutation Missense 254 +I255F Missense_Mutation Missense 255 +I255F Missense_Mutation Missense 255 +I255F Missense_Mutation Missense 255 +I255F Missense_Mutation Missense 255 +I255S Missense_Mutation Missense 255 +I255S Missense_Mutation Missense 255 +I255S Missense_Mutation Missense 255 +I255N Missense_Mutation Missense 255 +I255N Missense_Mutation Missense 255 +I255N Missense_Mutation Missense 255 +I255N Missense_Mutation Missense 255 +I255N Missense_Mutation Missense 255 +I255del In_Frame_Del Inframe 255 +I255del In_Frame_Del Inframe 255 +I255del In_Frame_Del Inframe 255 +I255del In_Frame_Del Inframe 255 +I255del In_Frame_Del Inframe 255 +I255del In_Frame_Del Inframe 255 +I255del In_Frame_Del Inframe 255 +I255T Missense_Mutation Missense 255 +I255T Missense_Mutation Missense 255 +I255T Missense_Mutation Missense 255 +I255T Missense_Mutation Missense 255 +I255dup In_Frame_Ins Inframe 255 +I255Nfs*9 Frame_Shift_Ins Truncating 255 +I255T Missense_Mutation Missense 255 +T253_L257del In_Frame_Del Inframe 255 +T256P Missense_Mutation Missense 256 +T256P Missense_Mutation Missense 256 +T256R Missense_Mutation Missense 256 +T256K Missense_Mutation Missense 256 +T256K Missense_Mutation Missense 256 +L257V Missense_Mutation Missense 257 +L257Q Missense_Mutation Missense 257 +L257Q Missense_Mutation Missense 257 +L257P Missense_Mutation Missense 257 +L257P Missense_Mutation Missense 257 +L257P Missense_Mutation Missense 257 +L257R Missense_Mutation Missense 257 +L257R Missense_Mutation Missense 257 +L257R Missense_Mutation Missense 257 +L257R Missense_Mutation Missense 257 +L257R Missense_Mutation Missense 257 +L257Gfs*6 Frame_Shift_Del Truncating 257 +L257Rfs*6 Frame_Shift_Del Truncating 257 +X257_splice Splice_Site Truncating 257 +L257Gfs*6 Frame_Shift_Del Truncating 257 +E258G Missense_Mutation Missense 258 +E258G Missense_Mutation Missense 258 +E258G Missense_Mutation Missense 258 +E258* Nonsense_Mutation Truncating 258 +E258* Nonsense_Mutation Truncating 258 +E258* Nonsense_Mutation Truncating 258 +E258* Nonsense_Mutation Truncating 258 +E258* Nonsense_Mutation Truncating 258 +E258* Nonsense_Mutation Truncating 258 +E258Q Missense_Mutation Missense 258 +E258Q Missense_Mutation Missense 258 +E258Q Missense_Mutation Missense 258 +E258A Missense_Mutation Missense 258 +E258K Missense_Mutation Missense 258 +E258K Missense_Mutation Missense 258 +E258K Missense_Mutation Missense 258 +E258K Missense_Mutation Missense 258 +E258K Missense_Mutation Missense 258 +E258K Missense_Mutation Missense 258 +E258K Missense_Mutation Missense 258 +E258K Missense_Mutation Missense 258 +E258K Missense_Mutation Missense 258 +E258K Missense_Mutation Missense 258 +E258K Missense_Mutation Missense 258 +E258D Missense_Mutation Missense 258 +E258V Missense_Mutation Missense 258 +E258V Missense_Mutation Missense 258 +X258_splice Splice_Site Truncating 258 +E258_D259delinsDH Missense_Mutation Missense 258 +T256_S260del In_Frame_Del Inframe 258 +T256_S260del In_Frame_Del Inframe 258 +D259Y Missense_Mutation Missense 259 +D259Y Missense_Mutation Missense 259 +D259Y Missense_Mutation Missense 259 +D259Y Missense_Mutation Missense 259 +D259Y Missense_Mutation Missense 259 +D259Y Missense_Mutation Missense 259 +D259Y Missense_Mutation Missense 259 +D259Y Missense_Mutation Missense 259 +D259Y Missense_Mutation Missense 259 +D259Y Missense_Mutation Missense 259 +D259Y Missense_Mutation Missense 259 +D259Y Missense_Mutation Missense 259 +D259V Missense_Mutation Missense 259 +D259N Missense_Mutation Missense 259 +D259H Missense_Mutation Missense 259 +X259_splice Splice_Site Truncating 259 +D259Rfs*5 Frame_Shift_Ins Truncating 259 +D259Rfs*5 Frame_Shift_Ins Truncating 259 +D259del In_Frame_Del Inframe 259 +S261Vfs*84 Frame_Shift_Del Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +S261Tfs*2 Nonsense_Mutation Truncating 261 +S261Tfs*2 Nonsense_Mutation Truncating 261 +X261_splice Splice_Site Truncating 261 +X261_splice Splice_Site Truncating 261 +G262V Missense_Mutation Missense 262 +G262V Missense_Mutation Missense 262 +G262V Missense_Mutation Missense 262 +G262V Missense_Mutation Missense 262 +G262V Missense_Mutation Missense 262 +G262V Missense_Mutation Missense 262 +G262V Missense_Mutation Missense 262 +G262Vfs*83 Frame_Shift_Del Truncating 262 +N263Ifs*82 Frame_Shift_Del Truncating 263 +N263Ifs*82 Frame_Shift_Del Truncating 263 +N263Kfs*8 Frame_Shift_Del Truncating 263 +L264Hfs*81 Frame_Shift_Del Truncating 264 +L265P Missense_Mutation Missense 265 +L265P Missense_Mutation Missense 265 +L265P Missense_Mutation Missense 265 +L265R Missense_Mutation Missense 265 +L265del In_Frame_Del Inframe 265 +L265del In_Frame_Del Inframe 265 +L265del In_Frame_Del Inframe 265 +L265Tfs*7 Frame_Shift_Ins Truncating 265 +L265Pfs*5 Frame_Shift_Del Truncating 265 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +G266* Nonsense_Mutation Truncating 266 +G266* Nonsense_Mutation Truncating 266 +G266* Nonsense_Mutation Truncating 266 +G266* Nonsense_Mutation Truncating 266 +G266* Nonsense_Mutation Truncating 266 +G266* Nonsense_Mutation Truncating 266 +G266* Nonsense_Mutation Truncating 266 +G266T Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266E Missense_Mutation Missense 266 +G266V Missense_Mutation Missense 266 +G266V Missense_Mutation Missense 266 +G266V Missense_Mutation Missense 266 +G266V Missense_Mutation Missense 266 +G266V Missense_Mutation Missense 266 +G266V Missense_Mutation Missense 266 +G266V Missense_Mutation Missense 266 +G266Dfs*79 Frame_Shift_Del Truncating 266 +N263_N268del In_Frame_Del Inframe 266 +G266K Missense_Mutation Missense 266 +L264_N268del In_Frame_Del Inframe 266 +G266R Missense_Mutation Missense 266 +G266R Missense_Mutation Missense 266 +R267P Missense_Mutation Missense 267 +R267P Missense_Mutation Missense 267 +R267P Missense_Mutation Missense 267 +R267W Missense_Mutation Missense 267 +R267W Missense_Mutation Missense 267 +R267W Missense_Mutation Missense 267 +R267W Missense_Mutation Missense 267 +R267W Missense_Mutation Missense 267 +R267W Missense_Mutation Missense 267 +R267W Missense_Mutation Missense 267 +R267W Missense_Mutation Missense 267 +R267W Missense_Mutation Missense 267 +R267W Missense_Mutation Missense 267 +R267Q Missense_Mutation Missense 267 +R267L Missense_Mutation Missense 267 +R267G Missense_Mutation Missense 267 +R267G Missense_Mutation Missense 267 +R267L Missense_Mutation Missense 267 +R267Gfs*78 Frame_Shift_Del Truncating 267 +R267Tfs*5 Frame_Shift_Ins Truncating 267 +N268Tfs*77 Frame_Shift_Del Truncating 268 +N268I Missense_Mutation Missense 268 +N268Kfs*4 Frame_Shift_Ins Truncating 268 +N268Efs*4 Frame_Shift_Ins Truncating 268 +N268Pfs*45 Frame_Shift_Del Truncating 268 +S269Tfs*76 Frame_Shift_Del Truncating 269 +S269Rfs*74 Frame_Shift_Del Truncating 269 +S269Cfs*32 Frame_Shift_Del Truncating 269 +F270S Missense_Mutation Missense 270 +F270V Missense_Mutation Missense 270 +F270V Missense_Mutation Missense 270 +F270V Missense_Mutation Missense 270 +F270V Missense_Mutation Missense 270 +F270V Missense_Mutation Missense 270 +F270V Missense_Mutation Missense 270 +F270L Missense_Mutation Missense 270 +F270L Missense_Mutation Missense 270 +F270L Missense_Mutation Missense 270 +F270L Missense_Mutation Missense 270 +F270C Missense_Mutation Missense 270 +F270C Missense_Mutation Missense 270 +S269_E271del In_Frame_Del Inframe 270 +E271K Missense_Mutation Missense 271 +E271K Missense_Mutation Missense 271 +E271K Missense_Mutation Missense 271 +E271K Missense_Mutation Missense 271 +E271K Missense_Mutation Missense 271 +E271K Missense_Mutation Missense 271 +E271K Missense_Mutation Missense 271 +E271K Missense_Mutation Missense 271 +E271K Missense_Mutation Missense 271 +E271K Missense_Mutation Missense 271 +E271* Frame_Shift_Ins Truncating 271 +E271V Missense_Mutation Missense 271 +E271V Missense_Mutation Missense 271 +E271V Missense_Mutation Missense 271 +E271* Nonsense_Mutation Truncating 271 +E271* Nonsense_Mutation Truncating 271 +E271* Nonsense_Mutation Truncating 271 +E271* Nonsense_Mutation Truncating 271 +E271* Nonsense_Mutation Truncating 271 +E271* Nonsense_Mutation Truncating 271 +E271* Nonsense_Mutation Truncating 271 +E271* Nonsense_Mutation Truncating 271 +E271* Nonsense_Mutation Truncating 271 +E271* Nonsense_Mutation Truncating 271 +E271* Nonsense_Mutation Truncating 271 +E271* Nonsense_Mutation Truncating 271 +E271* Nonsense_Mutation Truncating 271 +E271Q Missense_Mutation Missense 271 +E271Q Missense_Mutation Missense 271 +E271Q Missense_Mutation Missense 271 +E271Q Missense_Mutation Missense 271 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272M Missense_Mutation Missense 272 +V272M Missense_Mutation Missense 272 +V272M Missense_Mutation Missense 272 +V272M Missense_Mutation Missense 272 +V272M Missense_Mutation Missense 272 +V272M Missense_Mutation Missense 272 +V272M Missense_Mutation Missense 272 +V272M Missense_Mutation Missense 272 +V272M Missense_Mutation Missense 272 +V272M Missense_Mutation Missense 272 +V272M Missense_Mutation Missense 272 +V272M Missense_Mutation Missense 272 +V272G Missense_Mutation Missense 272 +V272K Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272L Missense_Mutation Missense 272 +V272_R273insL In_Frame_Ins Inframe 272 +V272_R273insL In_Frame_Ins Inframe 272 +V272E Missense_Mutation Missense 272 +V272E Missense_Mutation Missense 272 +V272Afs*33 Frame_Shift_Del Truncating 272 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273C Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273H Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273L Missense_Mutation Missense 273 +R273G Missense_Mutation Missense 273 +R273G Missense_Mutation Missense 273 +R273P Missense_Mutation Missense 273 +R273S Missense_Mutation Missense 273 +R273S Missense_Mutation Missense 273 +R273S Missense_Mutation Missense 273 +R273S Missense_Mutation Missense 273 +R273S Missense_Mutation Missense 273 +R273S Missense_Mutation Missense 273 +R273Ffs*71 Frame_Shift_Del Truncating 273 +V274A Missense_Mutation Missense 274 +V274A Missense_Mutation Missense 274 +V274A Missense_Mutation Missense 274 +V274A Missense_Mutation Missense 274 +V274A Missense_Mutation Missense 274 +V274A Missense_Mutation Missense 274 +V274A Missense_Mutation Missense 274 +V274A Missense_Mutation Missense 274 +V274A Missense_Mutation Missense 274 +V274F Missense_Mutation Missense 274 +V274F Missense_Mutation Missense 274 +V274F Missense_Mutation Missense 274 +V274F Missense_Mutation Missense 274 +V274F Missense_Mutation Missense 274 +V274F Missense_Mutation Missense 274 +V274G Missense_Mutation Missense 274 +V274G Missense_Mutation Missense 274 +V274G Missense_Mutation Missense 274 +V274G Missense_Mutation Missense 274 +V274L Missense_Mutation Missense 274 +V274L Missense_Mutation Missense 274 +V274L Missense_Mutation Missense 274 +V274L Missense_Mutation Missense 274 +V274D Missense_Mutation Missense 274 +V274D Missense_Mutation Missense 274 +V274_C275dup In_Frame_Ins Inframe 274 +V274Cfs*32 Frame_Shift_Ins Truncating 274 +C275F Missense_Mutation Missense 275 +C275F Missense_Mutation Missense 275 +C275F Missense_Mutation Missense 275 +C275F Missense_Mutation Missense 275 +C275F Missense_Mutation Missense 275 +C275F Missense_Mutation Missense 275 +C275F Missense_Mutation Missense 275 +C275F Missense_Mutation Missense 275 +C275F Missense_Mutation Missense 275 +C275W Missense_Mutation Missense 275 +C275W Missense_Mutation Missense 275 +C275W Missense_Mutation Missense 275 +C275W Missense_Mutation Missense 275 +C275Y Missense_Mutation Missense 275 +C275Y Missense_Mutation Missense 275 +C275Y Missense_Mutation Missense 275 +C275Y Missense_Mutation Missense 275 +C275Y Missense_Mutation Missense 275 +C275Y Missense_Mutation Missense 275 +C275Y Missense_Mutation Missense 275 +C275Y Missense_Mutation Missense 275 +C275S Missense_Mutation Missense 275 +C275S Missense_Mutation Missense 275 +C275* Nonsense_Mutation Truncating 275 +C275R Missense_Mutation Missense 275 +C275R Missense_Mutation Missense 275 +C275R Missense_Mutation Missense 275 +C275R Missense_Mutation Missense 275 +C275R Missense_Mutation Missense 275 +C275G Missense_Mutation Missense 275 +C275Lfs*31 Frame_Shift_Ins Truncating 275 +C275* Nonsense_Mutation Truncating 275 +A276P Missense_Mutation Missense 276 +A276D Missense_Mutation Missense 276 +A276G Missense_Mutation Missense 276 +A276S Missense_Mutation Missense 276 +A276_C277dup In_Frame_Ins Inframe 276 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277F Missense_Mutation Missense 277 +C277Y Missense_Mutation Missense 277 +C277Y Missense_Mutation Missense 277 +C277* Nonsense_Mutation Truncating 277 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278S Missense_Mutation Missense 278 +P278H Missense_Mutation Missense 278 +P278L Missense_Mutation Missense 278 +P278L Missense_Mutation Missense 278 +P278L Missense_Mutation Missense 278 +P278L Missense_Mutation Missense 278 +P278L Missense_Mutation Missense 278 +P278L Missense_Mutation Missense 278 +P278L Missense_Mutation Missense 278 +P278L Missense_Mutation Missense 278 +P278T Missense_Mutation Missense 278 +P278T Missense_Mutation Missense 278 +P278T Missense_Mutation Missense 278 +P278T Missense_Mutation Missense 278 +P278T Missense_Mutation Missense 278 +P278T Missense_Mutation Missense 278 +P278T Missense_Mutation Missense 278 +P278A Missense_Mutation Missense 278 +P278A Missense_Mutation Missense 278 +P278A Missense_Mutation Missense 278 +P278A Missense_Mutation Missense 278 +P278R Missense_Mutation Missense 278 +P278R Missense_Mutation Missense 278 +P278R Missense_Mutation Missense 278 +P278R Missense_Mutation Missense 278 +P278R Missense_Mutation Missense 278 +P278R Missense_Mutation Missense 278 +P278Lfs*67 Frame_Shift_Del Truncating 278 +P278Lfs*67 Frame_Shift_Del Truncating 278 +P278Lfs*67 Frame_Shift_Del Truncating 278 +P278F Missense_Mutation Missense 278 +P278F Missense_Mutation Missense 278 +P278F Missense_Mutation Missense 278 +P278Sfs*28 Frame_Shift_Ins Truncating 278 +G279E Missense_Mutation Missense 279 +G279E Missense_Mutation Missense 279 +G279E Missense_Mutation Missense 279 +G279E Missense_Mutation Missense 279 +G279* Nonsense_Mutation Truncating 279 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280T Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280K Missense_Mutation Missense 280 +R280I Missense_Mutation Missense 280 +R280I Missense_Mutation Missense 280 +R280I Missense_Mutation Missense 280 +R280I Missense_Mutation Missense 280 +R280I Missense_Mutation Missense 280 +R280I Missense_Mutation Missense 280 +R280I Missense_Mutation Missense 280 +R280I Missense_Mutation Missense 280 +R280I Missense_Mutation Missense 280 +R280G Missense_Mutation Missense 280 +R280G Missense_Mutation Missense 280 +R280G Missense_Mutation Missense 280 +R280G Missense_Mutation Missense 280 +R280G Missense_Mutation Missense 280 +R280G Missense_Mutation Missense 280 +R280G Missense_Mutation Missense 280 +R280G Missense_Mutation Missense 280 +R280G Missense_Mutation Missense 280 +R280G Missense_Mutation Missense 280 +R280Efs*65 Frame_Shift_Del Truncating 280 +R280S Missense_Mutation Missense 280 +R280S Missense_Mutation Missense 280 +R280S Missense_Mutation Missense 280 +R280S Missense_Mutation Missense 280 +R280* Nonsense_Mutation Truncating 280 +R280Efs*65 Frame_Shift_Del Truncating 280 +A276_E285del In_Frame_Del Inframe 280 +D281N Missense_Mutation Missense 281 +D281N Missense_Mutation Missense 281 +D281N Missense_Mutation Missense 281 +D281N Missense_Mutation Missense 281 +D281N Missense_Mutation Missense 281 +D281N Missense_Mutation Missense 281 +D281N Missense_Mutation Missense 281 +D281H Missense_Mutation Missense 281 +D281H Missense_Mutation Missense 281 +D281H Missense_Mutation Missense 281 +D281H Missense_Mutation Missense 281 +D281H Missense_Mutation Missense 281 +D281H Missense_Mutation Missense 281 +D281Y Missense_Mutation Missense 281 +D281Y Missense_Mutation Missense 281 +D281Y Missense_Mutation Missense 281 +D281Y Missense_Mutation Missense 281 +D281Y Missense_Mutation Missense 281 +D281V Missense_Mutation Missense 281 +D281V Missense_Mutation Missense 281 +D281V Missense_Mutation Missense 281 +D281V Missense_Mutation Missense 281 +D281E Missense_Mutation Missense 281 +D281E Missense_Mutation Missense 281 +D281E Missense_Mutation Missense 281 +D281E Missense_Mutation Missense 281 +D281G Missense_Mutation Missense 281 +D281G Missense_Mutation Missense 281 +D281G Missense_Mutation Missense 281 +D281E Missense_Mutation Missense 281 +D281E Missense_Mutation Missense 281 +D281E Missense_Mutation Missense 281 +D281E Missense_Mutation Missense 281 +D281E Missense_Mutation Missense 281 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282W Missense_Mutation Missense 282 +R282G Missense_Mutation Missense 282 +R282G Missense_Mutation Missense 282 +R282G Missense_Mutation Missense 282 +R282G Missense_Mutation Missense 282 +R282P Missense_Mutation Missense 282 +R282P Missense_Mutation Missense 282 +R282Q Missense_Mutation Missense 282 +R282L Missense_Mutation Missense 282 +R282Afs*23 Frame_Shift_Del Truncating 282 +D281_R282insP In_Frame_Ins Inframe 282 +D281_R282delinsEW Missense_Mutation Missense 282 +R283P Missense_Mutation Missense 283 +R283P Missense_Mutation Missense 283 +R283H Missense_Mutation Missense 283 +R283H Missense_Mutation Missense 283 +R283C Missense_Mutation Missense 283 +R283C Missense_Mutation Missense 283 +R283Hfs*22 Frame_Shift_Del Truncating 283 +R283Afs*62 Frame_Shift_Del Truncating 283 +T284Rfs*19 Frame_Shift_Del Truncating 284 +E285* Nonsense_Mutation Truncating 285 +E285* Nonsense_Mutation Truncating 285 +E285* Nonsense_Mutation Truncating 285 +E285* Nonsense_Mutation Truncating 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285V Missense_Mutation Missense 285 +E285V Missense_Mutation Missense 285 +E285V Missense_Mutation Missense 285 +E285V Missense_Mutation Missense 285 +E285K Missense_Mutation Missense 285 +E285Gfs*20 Frame_Shift_Del Truncating 285 +E285Q Missense_Mutation Missense 285 +E285Q Missense_Mutation Missense 285 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286K Missense_Mutation Missense 286 +E286A Missense_Mutation Missense 286 +E286Q Missense_Mutation Missense 286 +E286Q Missense_Mutation Missense 286 +E286Q Missense_Mutation Missense 286 +E286Q Missense_Mutation Missense 286 +E286G Missense_Mutation Missense 286 +E286* Nonsense_Mutation Truncating 286 +E286* Nonsense_Mutation Truncating 286 +E286* Nonsense_Mutation Truncating 286 +E286* Nonsense_Mutation Truncating 286 +E286* Nonsense_Mutation Truncating 286 +E286* Nonsense_Mutation Truncating 286 +E286_E287del In_Frame_Del Inframe 286 +E286_E287del In_Frame_Del Inframe 286 +E286V Missense_Mutation Missense 286 +E286V Missense_Mutation Missense 286 +E287* Nonsense_Mutation Truncating 287 +E287* Nonsense_Mutation Truncating 287 +E287* Nonsense_Mutation Truncating 287 +E287* Nonsense_Mutation Truncating 287 +E287* Nonsense_Mutation Truncating 287 +E287* Nonsense_Mutation Truncating 287 +E287K Missense_Mutation Missense 287 +E287K Missense_Mutation Missense 287 +E287D Missense_Mutation Missense 287 +E287D Missense_Mutation Missense 287 +E287D Missense_Mutation Missense 287 +E287D Missense_Mutation Missense 287 +E287D Missense_Mutation Missense 287 +E287D Missense_Mutation Missense 287 +E287Q Missense_Mutation Missense 287 +E287Q Missense_Mutation Missense 287 +N288Tfs*55 Frame_Shift_Del Truncating 288 +N288Ifs*57 Frame_Shift_Del Truncating 288 +N288Kfs*18 Frame_Shift_Ins Truncating 288 +E285_K292del In_Frame_Del Inframe 288 +L289F Missense_Mutation Missense 289 +L289F Missense_Mutation Missense 289 +L289Ffs*56 Frame_Shift_Del Truncating 289 +R290C Missense_Mutation Missense 290 +R290Afs*55 Frame_Shift_Del Truncating 290 +R290H Missense_Mutation Missense 290 +R290H Missense_Mutation Missense 290 +R290H Missense_Mutation Missense 290 +R290Gfs*13 Frame_Shift_Del Truncating 290 +K291Sfs*51 Frame_Shift_Del Truncating 291 +K292* Nonsense_Mutation Truncating 292 +K292Gfs*52 Frame_Shift_Del Truncating 292 +K292Nfs*7 Frame_Shift_Del Truncating 292 +G293Rfs*13 Frame_Shift_Ins Truncating 293 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294* Nonsense_Mutation Truncating 294 +E294Sfs*51 Frame_Shift_Del Truncating 294 +E294Sfs*51 Frame_Shift_Del Truncating 294 +E294Sfs*51 Frame_Shift_Del Truncating 294 +E294Sfs*51 Frame_Shift_Del Truncating 294 +E294Sfs*51 Frame_Shift_Del Truncating 294 +E294Lfs*12 Frame_Shift_Ins Truncating 294 +P295Lfs*50 Frame_Shift_Del Truncating 295 +H297Tfs*48 Frame_Shift_Del Truncating 297 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298* Nonsense_Mutation Truncating 298 +E298Cfs*46 Frame_Shift_Del Truncating 298 +E298Cfs*46 Frame_Shift_Del Truncating 298 +E298Cfs*46 Frame_Shift_Del Truncating 298 +E298Dfs*7 Frame_Shift_Del Truncating 298 +E298Sfs*47 Frame_Shift_Del Truncating 298 +E298Q Missense_Mutation Missense 298 +L299Rfs*46 Frame_Shift_Del Truncating 299 +L299Afs*6 Frame_Shift_Del Truncating 299 +X300_splice Splice_Site Truncating 300 +P301Qfs*44 Frame_Shift_Del Truncating 301 +P301Qfs*44 Frame_Shift_Del Truncating 301 +P301Qfs*44 Frame_Shift_Del Truncating 301 +P301Qfs*44 Frame_Shift_Del Truncating 301 +P301Qfs*44 Frame_Shift_Del Truncating 301 +P301Qfs*44 Frame_Shift_Del Truncating 301 +P301Qfs*44 Frame_Shift_Del Truncating 301 +P301Qfs*44 Frame_Shift_Del Truncating 301 +P301Qfs*44 Frame_Shift_Del Truncating 301 +P301Qfs*44 Frame_Shift_Del Truncating 301 +P301Lfs*41 Frame_Shift_Del Truncating 301 +P301Qfs*44 Frame_Shift_Del Truncating 301 +G302Rfs*4 Frame_Shift_Ins Truncating 302 +G302Rfs*4 Frame_Shift_Ins Truncating 302 +G302Rfs*4 Frame_Shift_Ins Truncating 302 +G302Rfs*4 Frame_Shift_Ins Truncating 302 +G302Rfs*4 Frame_Shift_Ins Truncating 302 +S303Afs*42 Frame_Shift_Del Truncating 303 +S303Afs*42 Frame_Shift_Del Truncating 303 +S303Afs*42 Frame_Shift_Del Truncating 303 +T304Ifs*41 Frame_Shift_Del Truncating 304 +T304Qfs*44 Frame_Shift_Ins Truncating 304 +K305T Missense_Mutation Missense 305 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306* Nonsense_Mutation Truncating 306 +R306Q Missense_Mutation Missense 306 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +A307Gfs*30 Frame_Shift_Ins Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +X307_splice Splice_Site Truncating 307 +L308Sfs*30 Frame_Shift_Ins Truncating 308 +L308Afs*6 Nonsense_Mutation Truncating 308 +A307_L308insASFLS In_Frame_Ins Inframe 308 +N310Tfs*35 Frame_Shift_Del Truncating 310 +N310Tfs*35 Frame_Shift_Del Truncating 310 +N310Tfs*35 Frame_Shift_Del Truncating 310 +N310Tfs*35 Frame_Shift_Del Truncating 310 +N310Qfs*27 Frame_Shift_Ins Truncating 310 +N310Tfs*35 Frame_Shift_Del Truncating 310 +N310Kfs*27 Frame_Shift_Ins Truncating 310 +N310Kfs*26 Frame_Shift_Del Truncating 310 +N311Kfs*34 Frame_Shift_Del Truncating 311 +N311Kfs*34 Frame_Shift_Del Truncating 311 +T312Pfs*20 Frame_Shift_Del Truncating 312 +S313Afs*32 Frame_Shift_Del Truncating 313 +S315Lfs*30 Frame_Shift_Del Truncating 315 +S315Nfs*24 Frame_Shift_Del Truncating 315 +S315Pfs*31 Frame_Shift_Ins Truncating 315 +P316Lfs*21 Frame_Shift_Ins Truncating 316 +P316Lfs*29 Frame_Shift_Del Truncating 316 +P316Lfs*30 Frame_Shift_Ins Truncating 316 +Q317* Nonsense_Mutation Truncating 317 +Q317* Nonsense_Mutation Truncating 317 +Q317* Nonsense_Mutation Truncating 317 +Q317* Nonsense_Mutation Truncating 317 +Q317* Nonsense_Mutation Truncating 317 +Q317* Nonsense_Mutation Truncating 317 +Q317* Nonsense_Mutation Truncating 317 +Q317* Nonsense_Mutation Truncating 317 +Q317* Nonsense_Mutation Truncating 317 +Q317* Nonsense_Mutation Truncating 317 +Q317* Nonsense_Mutation Truncating 317 +Q317* Nonsense_Mutation Truncating 317 +Q317Sfs*28 Frame_Shift_Del Truncating 317 +Q317Sfs*28 Frame_Shift_Del Truncating 317 +Q317Afs*19 Frame_Shift_Del Truncating 317 +Q317Sfs*28 Frame_Shift_Del Truncating 317 +P318Rfs*17 Frame_Shift_Del Truncating 318 +P318Efs*16 Frame_Shift_Del Truncating 318 +K319Rfs*26 Frame_Shift_Del Truncating 319 +K319* Nonsense_Mutation Truncating 319 +K319* Nonsense_Mutation Truncating 319 +K319* Nonsense_Mutation Truncating 319 +K319N Missense_Mutation Missense 319 +K320N Missense_Mutation Missense 320 +K320* Frame_Shift_Ins Truncating 320 +K320* Nonsense_Mutation Truncating 320 +K320* Nonsense_Mutation Truncating 320 +K320Efs*17 Frame_Shift_Ins Truncating 320 +K321* Nonsense_Mutation Truncating 321 +K321* Nonsense_Mutation Truncating 321 +K321* Nonsense_Mutation Truncating 321 +X321_splice Splice_Site Truncating 321 +K321Nfs*24 Frame_Shift_Del Truncating 321 +P322Hfs*23 Frame_Shift_Del Truncating 322 +P322Tfs*15 Frame_Shift_Ins Truncating 322 +D324A Missense_Mutation Missense 324 +D324G Missense_Mutation Missense 324 +G325Efs*20 Frame_Shift_Del Truncating 325 +E326K Missense_Mutation Missense 326 +E326* Nonsense_Mutation Truncating 326 +E326* Nonsense_Mutation Truncating 326 +E326* Nonsense_Mutation Truncating 326 +E326Ifs*10 Frame_Shift_Del Truncating 326 +X326_splice Splice_Site Truncating 326 +E326Dfs*6 Frame_Shift_Del Truncating 326 +E326Dfs*19 Frame_Shift_Del Truncating 326 +Y327* Nonsense_Mutation Truncating 327 +X327_splice Splice_Site Truncating 327 +Y327Lfs*10 Frame_Shift_Ins Truncating 327 +F328Sfs*17 Frame_Shift_Del Truncating 328 +F328Sfs*17 Frame_Shift_Del Truncating 328 +F328Sfs*17 Frame_Shift_Del Truncating 328 +L330P Missense_Mutation Missense 330 +X330_splice Splice_Site Truncating 330 +L330H Missense_Mutation Missense 330 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +Q331* Nonsense_Mutation Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +Q331H Missense_Mutation Missense 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X331_splice Splice_Site Truncating 331 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +X332_splice Splice_Site Truncating 332 +I332S Missense_Mutation Missense 332 +I332S Missense_Mutation Missense 332 +R333Vfs*12 Frame_Shift_Del Truncating 333 +R333Vfs*12 Frame_Shift_Del Truncating 333 +R333Vfs*12 Frame_Shift_Del Truncating 333 +R333Vfs*12 Frame_Shift_Del Truncating 333 +G334V Missense_Mutation Missense 334 +R335Lfs*10 Frame_Shift_Del Truncating 335 +R335Pfs*2 Frame_Shift_Ins Truncating 335 +E336* Nonsense_Mutation Truncating 336 +E336* Nonsense_Mutation Truncating 336 +E336* Nonsense_Mutation Truncating 336 +E336* Nonsense_Mutation Truncating 336 +E336* Nonsense_Mutation Truncating 336 +E336* Nonsense_Mutation Truncating 336 +E336* Nonsense_Mutation Truncating 336 +E336* Frame_Shift_Ins Truncating 336 +E336G Missense_Mutation Missense 336 +E336Vfs*10 Frame_Shift_Ins Truncating 336 +R335_F338del In_Frame_Del Inframe 336 +R337L Missense_Mutation Missense 337 +R337L Missense_Mutation Missense 337 +R337L Missense_Mutation Missense 337 +R337L Missense_Mutation Missense 337 +R337L Missense_Mutation Missense 337 +R337L Missense_Mutation Missense 337 +R337L Missense_Mutation Missense 337 +R337L Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337C Missense_Mutation Missense 337 +R337S Missense_Mutation Missense 337 +R337P Missense_Mutation Missense 337 +R337G Missense_Mutation Missense 337 +F338Sfs*7 Frame_Shift_Del Truncating 338 +E339* Nonsense_Mutation Truncating 339 +E339* Nonsense_Mutation Truncating 339 +E339* Nonsense_Mutation Truncating 339 +E339* Nonsense_Mutation Truncating 339 +E339* Nonsense_Mutation Truncating 339 +E339* Nonsense_Mutation Truncating 339 +E339* Nonsense_Mutation Truncating 339 +E339* Nonsense_Mutation Truncating 339 +E339* Nonsense_Mutation Truncating 339 +E339Vfs*10 Frame_Shift_Ins Truncating 339 +E339Sfs*4 Frame_Shift_Del Truncating 339 +R337_E343del In_Frame_Del Inframe 340 +E339_F341delinsV In_Frame_Del Inframe 340 +M340Cfs*5 Frame_Shift_Del Truncating 340 +M340Dfs*7 Frame_Shift_Ins Truncating 340 +F341S Missense_Mutation Missense 341 +F341C Missense_Mutation Missense 341 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342* Nonsense_Mutation Truncating 342 +R342Efs*3 Frame_Shift_Del Truncating 342 +R342Efs*3 Frame_Shift_Del Truncating 342 +R342Efs*3 Frame_Shift_Del Truncating 342 +R342Efs*3 Frame_Shift_Del Truncating 342 +R342Efs*3 Frame_Shift_Del Truncating 342 +R342Efs*3 Frame_Shift_Del Truncating 342 +R342Efs*3 Frame_Shift_Del Truncating 342 +R342P Missense_Mutation Missense 342 +R342P Missense_Mutation Missense 342 +R342P Missense_Mutation Missense 342 +R342P Missense_Mutation Missense 342 +R342P Missense_Mutation Missense 342 +R342P Missense_Mutation Missense 342 +R342Lfs*4 Frame_Shift_Ins Truncating 342 +R342* Nonsense_Mutation Truncating 342 +E343* Nonsense_Mutation Truncating 343 +E343* Nonsense_Mutation Truncating 343 +E343* Nonsense_Mutation Truncating 343 +E343* Nonsense_Mutation Truncating 343 +E343Gfs*2 Frame_Shift_Del Truncating 343 +E343Gfs*2 Frame_Shift_Del Truncating 343 +E343Gfs*2 Frame_Shift_Del Truncating 343 +L344Q Missense_Mutation Missense 344 +L344R Missense_Mutation Missense 344 +L344P Missense_Mutation Missense 344 +L344Rfs*8 Frame_Shift_Ins Truncating 344 +L344_E346del In_Frame_Del Inframe 345 +N345Pfs*17 Frame_Shift_Del Truncating 345 +E346* Nonsense_Mutation Truncating 346 +A347D Missense_Mutation Missense 347 +A347D Missense_Mutation Missense 347 +A347P Missense_Mutation Missense 347 +L348W Missense_Mutation Missense 348 +E349* Nonsense_Mutation Truncating 349 +E349* Nonsense_Mutation Truncating 349 +E349* Nonsense_Mutation Truncating 349 +E349* Nonsense_Mutation Truncating 349 +E349* Nonsense_Mutation Truncating 349 +E349* Nonsense_Mutation Truncating 349 +E349* Nonsense_Mutation Truncating 349 +E349* Nonsense_Mutation Truncating 349 +L350Rfs*2 Nonsense_Mutation Truncating 350 +K351Gfs*27 Frame_Shift_Del Truncating 351 +S362Afs*8 Frame_Shift_Del Truncating 362 +A364T Missense_Mutation Missense 364 +X367_splice Splice_Site Truncating 367 +X367_splice Splice_Site Truncating 367 +K373Rfs*49 Frame_Shift_Del Truncating 373 +Q375K Missense_Mutation Missense 375 +Q375* Nonsense_Mutation Truncating 375 +Q375* Nonsense_Mutation Truncating 375 +S376Pfs*45 Frame_Shift_Del Truncating 376 +H380Ifs*42 Frame_Shift_Del Truncating 380 +H380Ifs*42 Frame_Shift_Del Truncating 380 +H380Qfs*42 Frame_Shift_Del Truncating 380 +K382Nfs*40 Frame_Shift_Del Truncating 382 +K382Nfs*40 Frame_Shift_Del Truncating 382 +K382Nfs*40 Frame_Shift_Del Truncating 382 +K382Nfs*40 Frame_Shift_Del Truncating 382 +K382Nfs*40 Frame_Shift_Del Truncating 382 +K382Nfs*40 Frame_Shift_Del Truncating 382 +K382Nfs*40 Frame_Shift_Del Truncating 382 +K382Nfs*40 Frame_Shift_Del Truncating 382 +M384I Missense_Mutation Missense 384 +P390Lfs*79 Frame_Shift_Del Truncating 390 +S392P Missense_Mutation Missense 392 +D393Gfs*78 Frame_Shift_Ins Truncating 393 +D393Gfs*78 Frame_Shift_Ins Truncating 393 +D393Rfs*78 Frame_Shift_Ins Truncating 393 +D393Rfs*78 Frame_Shift_Ins Truncating 393 +*394Rext*9 Nonstop_Mutation Truncating 394 +*394Tfs*76 Frame_Shift_Del Truncating 394 +*394Gext*9 Nonstop_Mutation Truncating 394 diff --git a/inst/extdata/coad.maf.gz b/inst/extdata/coad.maf.gz new file mode 100644 index 0000000..9776e83 Binary files /dev/null and b/inst/extdata/coad.maf.gz differ diff --git a/inst/extdata/tcga_laml.maf.gz b/inst/extdata/tcga_laml.maf.gz new file mode 100644 index 0000000..492e8a8 Binary files /dev/null and b/inst/extdata/tcga_laml.maf.gz differ diff --git a/inst/htmlwidgets/g3Lollipop.js b/inst/htmlwidgets/g3Lollipop.js new file mode 100644 index 0000000..ddcb2f4 --- /dev/null +++ b/inst/htmlwidgets/g3Lollipop.js @@ -0,0 +1,35 @@ +var input = null; +var domID = null; +var lollipop; + +HTMLWidgets.widget({ + name: 'g3Lollipop', + type: 'output', + factory: function (el) { + return { + renderValue: function (x) { + input = x; + domID = el; + + var snvData = x.snvData; + var domainData = x.domainData; + var snvDataFormat = x.snvDataFormat; + var domainDataFormat = x.domainDataFormat; + var plotSettings = x.plotSettings; + + lollipop = g3.Lollipop(el.id); + + lollipop.data.snvData = snvData; + lollipop.data.domainData = domainData; + lollipop.format.snvData = snvDataFormat; + lollipop.format.domainData = domainDataFormat; + lollipop.setOptions(plotSettings); + + lollipop.draw(); + }, + resize: function (width, height) { + // TODO: code to re-render the widget with a new size + }, + }; + } +}); diff --git a/inst/htmlwidgets/g3Lollipop.yaml b/inst/htmlwidgets/g3Lollipop.yaml new file mode 100644 index 0000000..ff03eb6 --- /dev/null +++ b/inst/htmlwidgets/g3Lollipop.yaml @@ -0,0 +1,10 @@ +dependencies: + - name: d3 + version: 4.13.0 + src: htmlwidgets/lib + script: ./d3/d3.v4.min.js + - name: g3Lollipop + version: 0.0.1 + src: htmlwidgets/lib + script: ./g3Lollipop/g3Lollipop.js + style: ./g3Lollipop/g3Lollipop.min.css diff --git a/inst/htmlwidgets/htmlwidgets.js b/inst/htmlwidgets/htmlwidgets.js new file mode 100644 index 0000000..ecda3ef --- /dev/null +++ b/inst/htmlwidgets/htmlwidgets.js @@ -0,0 +1,836 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Add a method to delegator that, when invoked, calls + // delegatee.methodName. If there is no such method on + // the delegatee, but there was one on delegator before + // delegateMethod was called, then the original version + // is invoked instead. + // For example: + // + // var a = { + // method1: function() { console.log('a1'); } + // method2: function() { console.log('a2'); } + // }; + // var b = { + // method1: function() { console.log('b1'); } + // }; + // delegateMethod(a, b, "method1"); + // delegateMethod(a, b, "method2"); + // a.method1(); + // a.method2(); + // + // The output would be "b1", "a2". + function delegateMethod(delegator, delegatee, methodName) { + var inherited = delegator[methodName]; + delegator[methodName] = function() { + var target = delegatee; + var method = delegatee[methodName]; + + // The method doesn't exist on the delegatee. Instead, + // call the method on the delegator, if it exists. + if (!method) { + target = delegator; + method = inherited; + } + + if (method) { + return method.apply(target, arguments); + } + }; + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + // @param tasks Array of strings (or falsy value, in which case no-op). + // Each element must be a valid JavaScript expression that yields a + // function. Or, can be an array of objects with "code" and "data" + // properties; in this case, the "code" property should be a string + // of JS that's an expr that yields a function, and "data" should be + // an object that will be added as an additional argument when that + // function is called. + // @param target The object that will be "this" for each function + // execution. + // @param args Array of arguments to be passed to the functions. (The + // same arguments will be passed to all functions.) + function evalAndRun(tasks, target, args) { + if (tasks) { + forEach(tasks, function(task) { + var theseArgs = args; + if (typeof(task) === "object") { + theseArgs = theseArgs.concat([task.data]); + task = task.code; + } + var taskFunc = eval("(" + task + ")"); + if (typeof(taskFunc) !== "function") { + throw new Error("Task must be a function! Source:\n" + task); + } + taskFunc.apply(target, theseArgs); + }); + } + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + if (cel) { + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + } + + return { + getWidth: function() { return cel.offsetWidth; }, + getHeight: function() { return cel.offsetHeight; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return el.offsetWidth; }, + getHeight: function() { return el.offsetHeight; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + + // Support new-style instance-bound definitions. Old-style class-bound + // definitions have one widget "object" per widget per type/class of + // widget; the renderValue and resize methods on such widget objects + // take el and instance arguments, because the widget object can't + // store them. New-style instance-bound definitions have one widget + // object per widget instance; the definition that's passed in doesn't + // provide renderValue or resize methods at all, just the single method + // factory(el, width, height) + // which returns an object that has renderValue(x) and resize(w, h). + // This enables a far more natural programming style for the widget + // author, who can store per-instance state using either OO-style + // instance fields or functional-style closure variables (I guess this + // is in contrast to what can only be called C-style pseudo-OO which is + // what we required before). + if (definition.factory) { + definition = createLegacyDefinitionAdapter(definition); + } + + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition with an output binding. + // The definition itself will not be the output binding, instead + // we will make an output binding object that delegates to the + // definition. This is because we foolishly used the same method + // name (renderValue) for htmlwidgets definition and Shiny bindings + // but they actually have quite different semantics (the Shiny + // bindings receive data that includes lots of metadata that it + // strips off before calling htmlwidgets renderValue). We can't + // just ignore the difference because in some widgets it's helpful + // to call this.renderValue() from inside of resize(), and if + // we're not delegating, then that call will go to the Shiny + // version instead of the htmlwidgets version. + + // Merge defaults with definition, without mutating either. + var bindingDef = extend({}, defaults, definition); + + // This object will be our actual Shiny binding. + var shinyBinding = new Shiny.OutputBinding(); + + // With a few exceptions, we'll want to simply use the bindingDef's + // version of methods if they are available, otherwise fall back to + // Shiny's defaults. NOTE: If Shiny's output bindings gain additional + // methods in the future, and we want them to be overrideable by + // HTMLWidget binding definitions, then we'll need to add them to this + // list. + delegateMethod(shinyBinding, bindingDef, "getId"); + delegateMethod(shinyBinding, bindingDef, "onValueChange"); + delegateMethod(shinyBinding, bindingDef, "onValueError"); + delegateMethod(shinyBinding, bindingDef, "renderError"); + delegateMethod(shinyBinding, bindingDef, "clearError"); + delegateMethod(shinyBinding, bindingDef, "showProgress"); + + // The find, renderValue, and resize are handled differently, because we + // want to actually decorate the behavior of the bindingDef methods. + + shinyBinding.find = function(scope) { + var results = bindingDef.find(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + shinyBinding.renderValue = function(el, data) { + Shiny.renderDependencies(data.deps); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!bindingDef.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (bindingDef.initialize) { + var result = bindingDef.initialize(el, el.offsetWidth, + el.offsetHeight); + elementData(el, "init_result", result); + } + } + bindingDef.renderValue(el, data.x, elementData(el, "init_result")); + evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); + }; + + // Only override resize if bindingDef implements it + if (bindingDef.resize) { + shinyBinding.resize = function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + bindingDef.resize(el, width, height, elementData(el, "init_result")); + } + }; + } + + Shiny.outputBindings.register(shinyBinding, bindingDef.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + initResult = binding.initialize(el, + sizeObj ? sizeObj.getWidth() : el.offsetWidth, + sizeObj ? sizeObj.getHeight() : el.offsetHeight + ); + elementData(el, "init_result", initResult); + } + + if (binding.resize) { + var lastSize = {}; + var resizeHandler = function(e) { + var size = { + w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, + h: sizeObj ? sizeObj.getHeight() : el.offsetHeight + }; + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on( + "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", + resizeHandler + ); + window.jQuery(document).on( + "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", + resizeHandler + ); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + evalAndRun(data.jsHooks.render, initResult, [el, data.x]); + } + }); + }); + + invokePostRenderHandlers(); + } + + // Wait until after the document has loaded to render the widgets. + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + window.HTMLWidgets.staticRender(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + window.HTMLWidgets.staticRender(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + if (array.length === 0) return array; + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = eval("(" + o[part] + ")"); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; + + // Retrieve the HTMLWidget instance (i.e. the return value of an + // HTMLWidget binding's initialize() or factory() function) + // associated with an element, or null if none. + window.HTMLWidgets.getInstance = function(el) { + return elementData(el, "init_result"); + }; + + // Finds the first element in the scope that matches the selector, + // and returns the HTMLWidget instance (i.e. the return value of + // an HTMLWidget binding's initialize() or factory() function) + // associated with that element, if any. If no element matches the + // selector, or the first matching element has no HTMLWidget + // instance associated with it, then null is returned. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.find = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var el = scope.querySelector(selector); + if (el === null) { + return null; + } else { + return window.HTMLWidgets.getInstance(el); + } + }; + + // Finds all elements in the scope that match the selector, and + // returns the HTMLWidget instances (i.e. the return values of + // an HTMLWidget binding's initialize() or factory() function) + // associated with the elements, in an array. If elements that + // match the selector don't have an associated HTMLWidget + // instance, the returned array will contain nulls. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.findAll = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var nodes = scope.querySelectorAll(selector); + var results = []; + for (var i = 0; i < nodes.length; i++) { + results.push(window.HTMLWidgets.getInstance(nodes[i])); + } + return results; + }; + + var postRenderHandlers = []; + function invokePostRenderHandlers() { + while (postRenderHandlers.length) { + var handler = postRenderHandlers.shift(); + if (handler) { + handler(); + } + } + } + + // Register the given callback function to be invoked after the + // next time static widgets are rendered. + window.HTMLWidgets.addPostRenderHandler = function(callback) { + postRenderHandlers.push(callback); + }; + + // Takes a new-style instance-bound definition, and returns an + // old-style class-bound definition. This saves us from having + // to rewrite all the logic in this file to accomodate both + // types of definitions. + function createLegacyDefinitionAdapter(defn) { + var result = { + name: defn.name, + type: defn.type, + initialize: function(el, width, height) { + return defn.factory(el, width, height); + }, + renderValue: function(el, x, instance) { + return instance.renderValue(x); + }, + resize: function(el, width, height, instance) { + return instance.resize(width, height); + } + }; + + if (defn.find) + result.find = defn.find; + if (defn.renderError) + result.renderError = defn.renderError; + if (defn.clearError) + result.clearError = defn.clearError; + + return result; + } +})(); + diff --git a/inst/htmlwidgets/lib/d3/d3.v4.min.js b/inst/htmlwidgets/lib/d3/d3.v4.min.js new file mode 100644 index 0000000..607d187 --- /dev/null +++ b/inst/htmlwidgets/lib/d3/d3.v4.min.js @@ -0,0 +1,2 @@ +// https://d3js.org Version 4.13.0. Copyright 2018 Mike Bostock. +(function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n(t.d3=t.d3||{})})(this,function(t){"use strict";function n(t,n){return tn?1:t>=n?0:NaN}function e(t){return 1===t.length&&(t=function(t){return function(e,r){return n(t(e),r)}}(t)),{left:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r>>1;t(n[o],e)<0?r=o+1:i=o}return r},right:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r>>1;t(n[o],e)>0?i=o:r=o+1}return r}}}function r(t,n){return[t,n]}function i(t){return null===t?NaN:+t}function o(t,n){var e,r,o=t.length,u=0,a=-1,c=0,s=0;if(null==n)for(;++a1)return s/(u-1)}function u(t,n){var e=o(t,n);return e?Math.sqrt(e):e}function a(t,n){var e,r,i,o=t.length,u=-1;if(null==n){for(;++u=e)for(r=i=e;++ue&&(r=e),i=e)for(r=i=e;++ue&&(r=e),i0)return[t];if((r=n0)for(t=Math.ceil(t/u),n=Math.floor(n/u),o=new Array(i=Math.ceil(n-t+1));++a=0?(o>=Hs?10:o>=js?5:o>=Xs?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=Hs?10:o>=js?5:o>=Xs?2:1)}function p(t,n,e){var r=Math.abs(n-t)/Math.max(0,e),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=Hs?i*=10:o>=js?i*=5:o>=Xs&&(i*=2),n=1)return+e(t[r-1],r-1,t);var r,o=(r-1)*n,u=Math.floor(o),a=+e(t[u],u,t);return a+(+e(t[u+1],u+1,t)-a)*(o-u)}}function g(t){for(var n,e,r,i=t.length,o=-1,u=0;++o=0;)for(n=(r=t[i]).length;--n>=0;)e[--u]=r[n];return e}function _(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o=e)for(r=e;++oe&&(r=e)}else for(;++o=e)for(r=e;++oe&&(r=e);return r}function y(t){if(!(i=t.length))return[];for(var n=-1,e=_(t,m),r=new Array(e);++n=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),tf.hasOwnProperty(n)?{space:tf[n],local:t}:t}function A(t){var n=E(t);return(n.local?function(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}:function(t){return function(){var n=this.ownerDocument,e=this.namespaceURI;return e===Ks&&n.documentElement.namespaceURI===Ks?n.createElement(t):n.createElementNS(e,t)}})(n)}function C(){}function z(t){return null==t?C:function(){return this.querySelector(t)}}function P(){return[]}function R(t){return null==t?P:function(){return this.querySelectorAll(t)}}function L(t){return new Array(t.length)}function q(t,n){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=n}function D(t,n,e,r,i,o){for(var u,a=0,c=n.length,s=o.length;an?1:t>=n?0:NaN}function F(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function I(t,n){return t.style.getPropertyValue(n)||F(t).getComputedStyle(t,null).getPropertyValue(n)}function Y(t){return t.trim().split(/^|\s+/)}function B(t){return t.classList||new H(t)}function H(t){this._node=t,this._names=Y(t.getAttribute("class")||"")}function j(t,n){for(var e=B(t),r=-1,i=n.length;++r>8&15|n>>4&240,n>>4&15|240&n,(15&n)<<4|15&n,1)):(n=df.exec(t))?At(parseInt(n[1],16)):(n=vf.exec(t))?new Rt(n[1],n[2],n[3],1):(n=gf.exec(t))?new Rt(255*n[1]/100,255*n[2]/100,255*n[3]/100,1):(n=_f.exec(t))?Ct(n[1],n[2],n[3],n[4]):(n=yf.exec(t))?Ct(255*n[1]/100,255*n[2]/100,255*n[3]/100,n[4]):(n=mf.exec(t))?Lt(n[1],n[2]/100,n[3]/100,1):(n=xf.exec(t))?Lt(n[1],n[2]/100,n[3]/100,n[4]):bf.hasOwnProperty(t)?At(bf[t]):"transparent"===t?new Rt(NaN,NaN,NaN,0):null}function At(t){return new Rt(t>>16&255,t>>8&255,255&t,1)}function Ct(t,n,e,r){return r<=0&&(t=n=e=NaN),new Rt(t,n,e,r)}function zt(t){return t instanceof St||(t=Et(t)),t?(t=t.rgb(),new Rt(t.r,t.g,t.b,t.opacity)):new Rt}function Pt(t,n,e,r){return 1===arguments.length?zt(t):new Rt(t,n,e,null==r?1:r)}function Rt(t,n,e,r){this.r=+t,this.g=+n,this.b=+e,this.opacity=+r}function Lt(t,n,e,r){return r<=0?t=n=e=NaN:e<=0||e>=1?t=n=NaN:n<=0&&(t=NaN),new Dt(t,n,e,r)}function qt(t,n,e,r){return 1===arguments.length?function(t){if(t instanceof Dt)return new Dt(t.h,t.s,t.l,t.opacity);if(t instanceof St||(t=Et(t)),!t)return new Dt;if(t instanceof Dt)return t;var n=(t=t.rgb()).r/255,e=t.g/255,r=t.b/255,i=Math.min(n,e,r),o=Math.max(n,e,r),u=NaN,a=o-i,c=(o+i)/2;return a?(u=n===o?(e-r)/a+6*(e0&&c<1?0:u,new Dt(u,a,c,t.opacity)}(t):new Dt(t,n,e,null==r?1:r)}function Dt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Ut(t,n,e){return 255*(t<60?n+(e-n)*t/60:t<180?e:t<240?n+(e-n)*(240-t)/60:n)}function Ot(t){if(t instanceof It)return new It(t.l,t.a,t.b,t.opacity);if(t instanceof Vt){var n=t.h*wf;return new It(t.l,Math.cos(n)*t.c,Math.sin(n)*t.c,t.opacity)}t instanceof Rt||(t=zt(t));var e=jt(t.r),r=jt(t.g),i=jt(t.b),o=Yt((.4124564*e+.3575761*r+.1804375*i)/Tf),u=Yt((.2126729*e+.7151522*r+.072175*i)/Nf);return new It(116*u-16,500*(o-u),200*(u-Yt((.0193339*e+.119192*r+.9503041*i)/kf)),t.opacity)}function Ft(t,n,e,r){return 1===arguments.length?Ot(t):new It(t,n,e,null==r?1:r)}function It(t,n,e,r){this.l=+t,this.a=+n,this.b=+e,this.opacity=+r}function Yt(t){return t>Cf?Math.pow(t,1/3):t/Af+Sf}function Bt(t){return t>Ef?t*t*t:Af*(t-Sf)}function Ht(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function jt(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Xt(t,n,e,r){return 1===arguments.length?function(t){if(t instanceof Vt)return new Vt(t.h,t.c,t.l,t.opacity);t instanceof It||(t=Ot(t));var n=Math.atan2(t.b,t.a)*Mf;return new Vt(n<0?n+360:n,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}(t):new Vt(t,n,e,null==r?1:r)}function Vt(t,n,e,r){this.h=+t,this.c=+n,this.l=+e,this.opacity=+r}function $t(t,n,e,r){return 1===arguments.length?function(t){if(t instanceof Wt)return new Wt(t.h,t.s,t.l,t.opacity);t instanceof Rt||(t=zt(t));var n=t.r/255,e=t.g/255,r=t.b/255,i=(Df*r+Lf*n-qf*e)/(Df+Lf-qf),o=r-i,u=(Rf*(e-i)-zf*o)/Pf,a=Math.sqrt(u*u+o*o)/(Rf*i*(1-i)),c=a?Math.atan2(u,o)*Mf-120:NaN;return new Wt(c<0?c+360:c,a,i,t.opacity)}(t):new Wt(t,n,e,null==r?1:r)}function Wt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Zt(t,n,e,r,i){var o=t*t,u=o*t;return((1-3*t+3*o-u)*n+(4-6*o+3*u)*e+(1+3*t+3*o-3*u)*r+u*i)/6}function Gt(t){var n=t.length-1;return function(e){var r=e<=0?e=0:e>=1?(e=1,n-1):Math.floor(e*n),i=t[r],o=t[r+1],u=r>0?t[r-1]:2*i-o,a=r180||e<-180?e-360*Math.round(e/360):e):Jt(isNaN(t)?n:t)}function nn(t){return 1==(t=+t)?en:function(n,e){return e-n?function(t,n,e){return t=Math.pow(t,e),n=Math.pow(n,e)-t,e=1/e,function(r){return Math.pow(t+r*n,e)}}(n,e,t):Jt(isNaN(n)?e:n)}}function en(t,n){var e=n-t;return e?Kt(t,e):Jt(isNaN(t)?n:t)}function rn(t){return function(n){var e,r,i=n.length,o=new Array(i),u=new Array(i),a=new Array(i);for(e=0;eo&&(i=n.slice(o,i),a[u]?a[u]+=i:a[++u]=i),(e=e[0])===(r=r[0])?a[u]?a[u]+=r:a[++u]=r:(a[++u]=null,c.push({i:u,x:an(e,r)})),o=$f.lastIndex;return o180?n+=360:n-t>180&&(t+=360),o.push({i:e.push(i(e)+"rotate(",null,r)-2,x:an(t,n)})):n&&e.push(i(e)+"rotate("+n+r)}(o.rotate,u.rotate,a,c),function(t,n,e,o){t!==n?o.push({i:e.push(i(e)+"skewX(",null,r)-2,x:an(t,n)}):n&&e.push(i(e)+"skewX("+n+r)}(o.skewX,u.skewX,a,c),function(t,n,e,r,o,u){if(t!==e||n!==r){var a=o.push(i(o)+"scale(",null,",",null,")");u.push({i:a-4,x:an(t,e)},{i:a-2,x:an(n,r)})}else 1===e&&1===r||o.push(i(o)+"scale("+e+","+r+")")}(o.scaleX,o.scaleY,u.scaleX,u.scaleY,a,c),o=u=null,function(t){for(var n,e=-1,r=c.length;++e=0&&n._call.call(null,t),n=n._next;--cl}function Tn(){pl=(hl=vl.now())+dl,cl=sl=0;try{Mn()}finally{cl=0,function(){var t,n,e=Yf,r=1/0;for(;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(n=e._next,e._next=null,e=t?t._next=n:Yf=n);Bf=t,kn(r)}(),pl=0}}function Nn(){var t=vl.now(),n=t-hl;n>ll&&(dl-=n,hl=t)}function kn(t){if(!cl){sl&&(sl=clearTimeout(sl));t-pl>24?(t<1/0&&(sl=setTimeout(Tn,t-vl.now()-dl)),fl&&(fl=clearInterval(fl))):(fl||(hl=vl.now(),fl=setInterval(Nn,ll)),cl=1,gl(Tn))}}function Sn(t,n,e){var r=new bn;return n=null==n?0:+n,r.restart(function(e){r.stop(),t(e+n)},n,e),r}function En(t,n,e,r,i,o){var u=t.__transition;if(u){if(e in u)return}else t.__transition={};(function(t,n,e){function r(c){var s,f,l,h;if(e.state!==xl)return o();for(s in a)if((h=a[s]).name===e.name){if(h.state===wl)return Sn(r);h.state===Ml?(h.state=Nl,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete a[s]):+sml)throw new Error("too late; already scheduled");return e}function Cn(t,n){var e=zn(t,n);if(e.state>bl)throw new Error("too late; already started");return e}function zn(t,n){var e=t.__transition;if(!e||!(e=e[n]))throw new Error("transition not found");return e}function Pn(t,n){var e,r,i,o=t.__transition,u=!0;if(o){n=null==n?null:n+"";for(i in o)(e=o[i]).name===n?(r=e.state>bl&&e.stateMath.abs(t[1]-D[1])?b=!0:x=!0),D=t,m=!0,$n(),o()}function o(){var t;switch(_=D[0]-q[0],y=D[1]-q[1],T){case th:case Kl:N&&(_=Math.max(C-a,Math.min(P-p,_)),s=a+_,d=p+_),k&&(y=Math.max(z-l,Math.min(R-v,y)),h=l+y,g=v+y);break;case nh:N<0?(_=Math.max(C-a,Math.min(P-a,_)),s=a+_,d=p):N>0&&(_=Math.max(C-p,Math.min(P-p,_)),s=a,d=p+_),k<0?(y=Math.max(z-l,Math.min(R-l,y)),h=l+y,g=v):k>0&&(y=Math.max(z-v,Math.min(R-v,y)),h=l,g=v+y);break;case eh:N&&(s=Math.max(C,Math.min(P,a-_*N)),d=Math.max(C,Math.min(P,p+_*N))),k&&(h=Math.max(z,Math.min(R,l-y*k)),g=Math.max(z,Math.min(R,v+y*k)))}d0&&(a=s-_),k<0?v=g-y:k>0&&(l=h-y),T=th,F.attr("cursor",uh.selection),o());break;default:return}$n()},!0).on("keyup.brush",function(){switch(t.event.keyCode){case 16:L&&(x=b=L=!1,o());break;case 18:T===eh&&(N<0?p=d:N>0&&(a=s),k<0?v=g:k>0&&(l=h),T=nh,o());break;case 32:T===th&&(t.event.altKey?(N&&(p=d-_*N,a=s+_*N),k&&(v=g-y*k,l=h+y*k),T=eh):(N<0?p=d:N>0&&(a=s),k<0?v=g:k>0&&(l=h),T=nh),F.attr("cursor",uh[M]),o());break;default:return}$n()},!0).on("mousemove.brush",e,!0).on("mouseup.brush",u,!0);_t(t.event.view)}Vn(),Pn(w),r.call(w),U.start()}}function a(){var t=this.__brush||{selection:null};return t.extent=s.apply(this,arguments),t.dim=n,t}var c,s=Gn,f=Zn,l=N(e,"start","brush","end"),h=6;return e.move=function(t,e){t.selection?t.on("start.brush",function(){i(this,arguments).beforestart().start()}).on("interrupt.brush end.brush",function(){i(this,arguments).end()}).tween("brush",function(){function t(t){u.selection=1===t&&Jn(s)?null:f(t),r.call(o),a.brush()}var o=this,u=o.__brush,a=i(o,arguments),c=u.selection,s=n.input("function"==typeof e?e.apply(this,arguments):e,u.extent),f=fn(c,s);return c&&s?t:t(1)}):t.each(function(){var t=arguments,o=this.__brush,u=n.input("function"==typeof e?e.apply(this,t):e,o.extent),a=i(this,t).beforestart();Pn(this),o.selection=null==u||Jn(u)?null:u,r.call(this),a.start().brush().end()})},o.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting&&(this.starting=!1,this.emit("start")),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(t){it(new function(t,n,e){this.target=t,this.type=n,this.selection=e}(e,t,n.output(this.state.selection)),l.apply,l,[t,this.that,this.args])}},e.extent=function(t){return arguments.length?(s="function"==typeof t?t:Xn([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),e):s},e.filter=function(t){return arguments.length?(f="function"==typeof t?t:Xn(!!t),e):f},e.handleSize=function(t){return arguments.length?(h=+t,e):h},e.on=function(){var t=l.on.apply(l,arguments);return t===l?e:t},e}function te(t){return function(){return t}}function ne(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function ee(){return new ne}function re(t){return t.source}function ie(t){return t.target}function oe(t){return t.radius}function ue(t){return t.startAngle}function ae(t){return t.endAngle}function ce(){}function se(t,n){var e=new ce;if(t instanceof ce)t.each(function(t,n){e.set(n,t)});else if(Array.isArray(t)){var r,i=-1,o=t.length;if(null==n)for(;++i=u?s=!0:(e=t.charCodeAt(a++))===Nh?f=!0:e===kh&&(f=!0,t.charCodeAt(a)===Nh&&++a),t.slice(r+1,n-1).replace(/""/g,'"')}for(;a=(o=(v+_)/2))?v=o:_=o,(f=e>=(u=(g+y)/2))?g=u:y=u,i=p,!(p=p[l=f<<1|s]))return i[l]=d,t;if(a=+t._x.call(null,p.data),c=+t._y.call(null,p.data),n===a&&e===c)return d.next=p,i?i[l]=d:t._root=d,t;do{i=i?i[l]=new Array(4):t._root=new Array(4),(s=n>=(o=(v+_)/2))?v=o:_=o,(f=e>=(u=(g+y)/2))?g=u:y=u}while((l=f<<1|s)==(h=(c>=u)<<1|a>=o));return i[h]=p,i[l]=d,t}function be(t,n,e,r,i){this.node=t,this.x0=n,this.y0=e,this.x1=r,this.y1=i}function we(t){return t[0]}function Me(t){return t[1]}function Te(t,n,e){var r=new Ne(null==n?we:n,null==e?Me:e,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function Ne(t,n,e,r,i,o){this._x=t,this._y=n,this._x0=e,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function ke(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}function Se(t){return t.x+t.vx}function Ee(t){return t.y+t.vy}function Ae(t){return t.index}function Ce(t,n){var e=t.get(n);if(!e)throw new Error("missing: "+n);return e}function ze(t){return t.x}function Pe(t){return t.y}function Re(t,n){if((e=(t=n?t.toExponential(n-1):t.toExponential()).indexOf("e"))<0)return null;var e,r=t.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+t.slice(e+1)]}function Le(t){return(t=Re(Math.abs(t)))?t[1]:NaN}function qe(t,n){var e=Re(t,n);if(!e)return t+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}function De(t){return new Ue(t)}function Ue(t){if(!(n=Bh.exec(t)))throw new Error("invalid format: "+t);var n,e=n[1]||" ",r=n[2]||">",i=n[3]||"-",o=n[4]||"",u=!!n[5],a=n[6]&&+n[6],c=!!n[7],s=n[8]&&+n[8].slice(1),f=n[9]||"";"n"===f?(c=!0,f="g"):Yh[f]||(f=""),(u||"0"===e&&"="===r)&&(u=!0,e="0",r="="),this.fill=e,this.align=r,this.sign=i,this.symbol=o,this.zero=u,this.width=a,this.comma=c,this.precision=s,this.type=f}function Oe(t){return t}function Fe(t){function n(t){function n(t){var n,r,u,f=g,x=_;if("c"===v)x=y(t)+x,t="";else{var b=(t=+t)<0;if(t=y(Math.abs(t),d),b&&0==+t&&(b=!1),f=(b?"("===s?s:"-":"-"===s||"("===s?"":s)+f,x=("s"===v?jh[8+Oh/3]:"")+x+(b&&"("===s?")":""),m)for(n=-1,r=t.length;++n(u=t.charCodeAt(n))||u>57){x=(46===u?i+t.slice(n+1):t.slice(n))+x,t=t.slice(0,n);break}}p&&!l&&(t=e(t,1/0));var w=f.length+t.length+x.length,M=w>1)+f+t+x+M.slice(w);break;default:t=M+f+t+x}return o(t)}var a=(t=De(t)).fill,c=t.align,s=t.sign,f=t.symbol,l=t.zero,h=t.width,p=t.comma,d=t.precision,v=t.type,g="$"===f?r[0]:"#"===f&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",_="$"===f?r[1]:/[%p]/.test(v)?u:"",y=Yh[v],m=!v||/[defgprs%]/.test(v);return d=null==d?v?6:12:/[gprs]/.test(v)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),n.toString=function(){return t+""},n}var e=t.grouping&&t.thousands?function(t,n){return function(e,r){for(var i=e.length,o=[],u=0,a=t[0],c=0;i>0&&a>0&&(c+a+1>r&&(a=Math.max(1,r-c)),o.push(e.substring(i-=a,i+a)),!((c+=a+1)>r));)a=t[u=(u+1)%t.length];return o.reverse().join(n)}}(t.grouping,t.thousands):Oe,r=t.currency,i=t.decimal,o=t.numerals?function(t){return function(n){return n.replace(/[0-9]/g,function(n){return t[+n]})}}(t.numerals):Oe,u=t.percent||"%";return{format:n,formatPrefix:function(t,e){var r=n((t=De(t),t.type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(Le(e)/3))),o=Math.pow(10,-i),u=jh[8+i/3];return function(t){return r(o*t)+u}}}}function Ie(n){return Hh=Fe(n),t.format=Hh.format,t.formatPrefix=Hh.formatPrefix,Hh}function Ye(t){return Math.max(0,-Le(Math.abs(t)))}function Be(t,n){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Le(n)/3)))-Le(Math.abs(t)))}function He(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,Le(n)-Le(t))+1}function je(){return new Xe}function Xe(){this.reset()}function Ve(t,n,e){var r=t.s=n+e,i=r-n,o=r-i;t.t=n-o+(e-i)}function $e(t){return t>1?0:t<-1?Np:Math.acos(t)}function We(t){return t>1?kp:t<-1?-kp:Math.asin(t)}function Ze(t){return(t=Fp(t/2))*t}function Ge(){}function Qe(t,n){t&&jp.hasOwnProperty(t.type)&&jp[t.type](t,n)}function Je(t,n,e){var r,i=-1,o=t.length-e;for(n.lineStart();++i=0?1:-1,i=r*e,o=Lp(n),u=Fp(n),a=Zh*u,c=Wh*o+a*Lp(i),s=a*r*Fp(i);Xp.add(Rp(s,c)),$h=t,Wh=o,Zh=u}function or(t){return[Rp(t[1],t[0]),We(t[2])]}function ur(t){var n=t[0],e=t[1],r=Lp(e);return[r*Lp(n),r*Fp(n),Fp(e)]}function ar(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function cr(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function sr(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function fr(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function lr(t){var n=Yp(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function hr(t,n){ip.push(op=[Gh=t,Jh=t]),nKh&&(Kh=n)}function pr(t,n){var e=ur([t*Cp,n*Cp]);if(rp){var r=cr(rp,e),i=cr([r[1],-r[0],0],r);lr(i),i=or(i);var o,u=t-tp,a=u>0?1:-1,c=i[0]*Ap*a,s=zp(u)>180;s^(a*tpKh&&(Kh=o):(c=(c+360)%360-180,s^(a*tpKh&&(Kh=n))),s?tmr(Gh,Jh)&&(Jh=t):mr(t,Jh)>mr(Gh,Jh)&&(Gh=t):Jh>=Gh?(tJh&&(Jh=t)):t>tp?mr(Gh,t)>mr(Gh,Jh)&&(Jh=t):mr(t,Jh)>mr(Gh,Jh)&&(Gh=t)}else ip.push(op=[Gh=t,Jh=t]);nKh&&(Kh=n),rp=e,tp=t}function dr(){Zp.point=pr}function vr(){op[0]=Gh,op[1]=Jh,Zp.point=hr,rp=null}function gr(t,n){if(rp){var e=t-tp;Wp.add(zp(e)>180?e+(e>0?360:-360):e)}else np=t,ep=n;$p.point(t,n),pr(t,n)}function _r(){$p.lineStart()}function yr(){gr(np,ep),$p.lineEnd(),zp(Wp)>Mp&&(Gh=-(Jh=180)),op[0]=Gh,op[1]=Jh,rp=null}function mr(t,n){return(n-=t)<0?n+360:n}function xr(t,n){return t[0]-n[0]}function br(t,n){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nNp?t-Ep:t<-Np?t+Ep:t,n]}function qr(t,n,e){return(t%=Ep)?n||e?Rr(Ur(t),Or(n,e)):Ur(t):n||e?Or(n,e):Lr}function Dr(t){return function(n,e){return n+=t,[n>Np?n-Ep:n<-Np?n+Ep:n,e]}}function Ur(t){var n=Dr(t);return n.invert=Dr(-t),n}function Or(t,n){function e(t,n){var e=Lp(n),a=Lp(t)*e,c=Fp(t)*e,s=Fp(n),f=s*r+a*i;return[Rp(c*o-f*u,a*r-s*i),We(f*o+c*u)]}var r=Lp(t),i=Fp(t),o=Lp(n),u=Fp(n);return e.invert=function(t,n){var e=Lp(n),a=Lp(t)*e,c=Fp(t)*e,s=Fp(n),f=s*o-c*u;return[Rp(c*o+s*u,a*r+f*i),We(f*r-a*i)]},e}function Fr(t){function n(n){return n=t(n[0]*Cp,n[1]*Cp),n[0]*=Ap,n[1]*=Ap,n}return t=qr(t[0]*Cp,t[1]*Cp,t.length>2?t[2]*Cp:0),n.invert=function(n){return n=t.invert(n[0]*Cp,n[1]*Cp),n[0]*=Ap,n[1]*=Ap,n},n}function Ir(t,n,e,r,i,o){if(e){var u=Lp(n),a=Fp(n),c=r*e;null==i?(i=n+r*Ep,o=n-c/2):(i=Yr(u,i),o=Yr(u,o),(r>0?io)&&(i+=r*Ep));for(var s,f=i;r>0?f>o:f1&&n.push(n.pop().concat(n.shift()))},result:function(){var e=n;return n=[],t=null,e}}}function Hr(t,n){return zp(t[0]-n[0])=0;--o)i.point((f=s[o])[0],f[1]);else r(h.x,h.p.x,-1,i);h=h.p}s=(h=h.o).z,p=!p}while(!h.v);i.lineEnd()}}}function Vr(t){if(n=t.length){for(var n,e,r=0,i=t[0];++r=0?1:-1,T=M*w,N=T>Np,k=d*x;if(cd.add(Rp(k*M*Fp(T),v*b+k*Lp(T))),o+=N?w+M*Ep:w,N^h>=e^y>=e){var S=cr(ur(l),ur(_));lr(S);var E=cr(i,S);lr(E);var A=(N^w>=0?-1:1)*We(E[2]);(r>A||r===A&&(S[0]||S[1]))&&(u+=N^w>=0?1:-1)}}return(o<-Mp||o0){for(m||(i.polygonStart(),m=!0),i.lineStart(),t=0;t1&&2&o&&u.push(u.pop().concat(u.shift())),p.push(u.filter(Zr))}var h,p,d,v=n(i),_=Br(),y=n(_),m=!1,x={point:o,lineStart:a,lineEnd:c,polygonStart:function(){x.point=s,x.lineStart=f,x.lineEnd=l,p=[],h=[]},polygonEnd:function(){x.point=o,x.lineStart=a,x.lineEnd=c,p=g(p);var t=$r(h,r);p.length?(m||(i.polygonStart(),m=!0),Xr(p,Gr,t,e,i)):t&&(m||(i.polygonStart(),m=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),m&&(i.polygonEnd(),m=!1),p=h=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}};return x}}function Zr(t){return t.length>1}function Gr(t,n){return((t=t.x)[0]<0?t[1]-kp-Mp:kp-t[1])-((n=n.x)[0]<0?n[1]-kp-Mp:kp-n[1])}function Qr(t){function n(t,n){return Lp(t)*Lp(n)>i}function e(t,n,e){var r=[1,0,0],o=cr(ur(t),ur(n)),u=ar(o,o),a=o[0],c=u-a*a;if(!c)return!e&&t;var s=i*u/c,f=-i*a/c,l=cr(r,o),h=fr(r,s);sr(h,fr(o,f));var p=l,d=ar(h,p),v=ar(p,p),g=d*d-v*(ar(h,h)-1);if(!(g<0)){var _=Yp(g),y=fr(p,(-d-_)/v);if(sr(y,h),y=or(y),!e)return y;var m,x=t[0],b=n[0],w=t[1],M=n[1];b0^y[1]<(zp(y[0]-x)Np^(x<=y[0]&&y[0]<=b)){var k=fr(p,(-d+_)/v);return sr(k,h),[y,or(k)]}}}function r(n,e){var r=u?t:Np-t,i=0;return n<-r?i|=1:n>r&&(i|=2),e<-r?i|=4:e>r&&(i|=8),i}var i=Lp(t),o=6*Cp,u=i>0,a=zp(i)>Mp;return Wr(n,function(t){var i,o,c,s,f;return{lineStart:function(){s=c=!1,f=1},point:function(l,h){var p,d=[l,h],v=n(l,h),g=u?v?0:r(l,h):v?r(l+(l<0?Np:-Np),h):0;if(!i&&(s=c=v)&&t.lineStart(),v!==c&&(!(p=e(i,d))||Hr(i,p)||Hr(d,p))&&(d[0]+=Mp,d[1]+=Mp,v=n(d[0],d[1])),v!==c)f=0,v?(t.lineStart(),p=e(d,i),t.point(p[0],p[1])):(p=e(i,d),t.point(p[0],p[1]),t.lineEnd()),i=p;else if(a&&i&&u^v){var _;g&o||!(_=e(d,i,!0))||(f=0,u?(t.lineStart(),t.point(_[0][0],_[0][1]),t.point(_[1][0],_[1][1]),t.lineEnd()):(t.point(_[1][0],_[1][1]),t.lineEnd(),t.lineStart(),t.point(_[0][0],_[0][1])))}!v||i&&Hr(i,d)||t.point(d[0],d[1]),i=d,c=v,o=g},lineEnd:function(){c&&t.lineEnd(),i=null},clean:function(){return f|(s&&c)<<1}}},function(n,e,r,i){Ir(i,t,o,r,n,e)},u?[0,-t]:[-Np,t-Np])}function Jr(t,n,e,r){function i(i,o){return t<=i&&i<=e&&n<=o&&o<=r}function o(i,o,a,s){var f=0,l=0;if(null==i||(f=u(i,a))!==(l=u(o,a))||c(i,o)<0^a>0)do{s.point(0===f||3===f?t:e,f>1?r:n)}while((f=(f+a+4)%4)!==l);else s.point(o[0],o[1])}function u(r,i){return zp(r[0]-t)0?0:3:zp(r[0]-e)0?2:1:zp(r[1]-n)0?1:0:i>0?3:2}function a(t,n){return c(t.x,n.x)}function c(t,n){var e=u(t,1),r=u(n,1);return e!==r?e-r:0===e?n[1]-t[1]:1===e?t[0]-n[0]:2===e?t[1]-n[1]:n[0]-t[0]}return function(u){function c(t,n){i(t,n)&&w.point(t,n)}function s(o,u){var a=i(o,u);if(l&&h.push([o,u]),x)p=o,d=u,v=a,x=!1,a&&(w.lineStart(),w.point(o,u));else if(a&&m)w.point(o,u);else{var c=[_=Math.max(ld,Math.min(fd,_)),y=Math.max(ld,Math.min(fd,y))],s=[o=Math.max(ld,Math.min(fd,o)),u=Math.max(ld,Math.min(fd,u))];!function(t,n,e,r,i,o){var u,a=t[0],c=t[1],s=0,f=1,l=n[0]-a,h=n[1]-c;if(u=e-a,l||!(u>0)){if(u/=l,l<0){if(u0){if(u>f)return;u>s&&(s=u)}if(u=i-a,l||!(u<0)){if(u/=l,l<0){if(u>f)return;u>s&&(s=u)}else if(l>0){if(u0)){if(u/=h,h<0){if(u0){if(u>f)return;u>s&&(s=u)}if(u=o-c,h||!(u<0)){if(u/=h,h<0){if(u>f)return;u>s&&(s=u)}else if(h>0){if(u0&&(t[0]=a+s*l,t[1]=c+s*h),f<1&&(n[0]=a+f*l,n[1]=c+f*h),!0}}}}}(c,s,t,n,e,r)?a&&(w.lineStart(),w.point(o,u),b=!1):(m||(w.lineStart(),w.point(c[0],c[1])),w.point(s[0],s[1]),a||w.lineEnd(),b=!1)}_=o,y=u,m=a}var f,l,h,p,d,v,_,y,m,x,b,w=u,M=Br(),T={point:c,lineStart:function(){T.point=s,l&&l.push(h=[]),x=!0,m=!1,_=y=NaN},lineEnd:function(){f&&(s(p,d),v&&m&&M.rejoin(),f.push(M.result())),T.point=c,m&&w.lineEnd()},polygonStart:function(){w=M,f=[],l=[],b=!0},polygonEnd:function(){var n=function(){for(var n=0,e=0,i=l.length;er&&(h-o)*(r-u)>(p-u)*(t-o)&&++n:p<=r&&(h-o)*(r-u)<(p-u)*(t-o)&&--n;return n}(),e=b&&n,i=(f=g(f)).length;(e||i)&&(u.polygonStart(),e&&(u.lineStart(),o(null,null,1,u),u.lineEnd()),i&&Xr(f,a,n,o,u),u.polygonEnd()),w=u,f=l=h=null}};return T}}function Kr(){pd.point=pd.lineEnd=Ge}function ti(t,n){Qp=t*=Cp,Jp=Fp(n*=Cp),Kp=Lp(n),pd.point=ni}function ni(t,n){t*=Cp;var e=Fp(n*=Cp),r=Lp(n),i=zp(t-Qp),o=Lp(i),u=r*Fp(i),a=Kp*e-Jp*r*o,c=Jp*e+Kp*r*o;hd.add(Rp(Yp(u*u+a*a),c)),Qp=t,Jp=e,Kp=r}function ei(t){return hd.reset(),tr(t,pd),+hd}function ri(t,n){return dd[0]=t,dd[1]=n,ei(vd)}function ii(t,n){return!(!t||!_d.hasOwnProperty(t.type))&&_d[t.type](t,n)}function oi(t,n){return 0===ri(t,n)}function ui(t,n){var e=ri(t[0],t[1]);return ri(t[0],n)+ri(n,t[1])<=e+Mp}function ai(t,n){return!!$r(t.map(ci),si(n))}function ci(t){return(t=t.map(si)).pop(),t}function si(t){return[t[0]*Cp,t[1]*Cp]}function fi(t,n,e){var r=f(t,n-Mp,e).concat(n);return function(t){return r.map(function(n){return[t,n]})}}function li(t,n,e){var r=f(t,n-Mp,e).concat(n);return function(t){return r.map(function(n){return[n,t]})}}function hi(){function t(){return{type:"MultiLineString",coordinates:n()}}function n(){return f(qp(o/_)*_,i,_).map(p).concat(f(qp(s/y)*y,c,y).map(d)).concat(f(qp(r/v)*v,e,v).filter(function(t){return zp(t%_)>Mp}).map(l)).concat(f(qp(a/g)*g,u,g).filter(function(t){return zp(t%y)>Mp}).map(h))}var e,r,i,o,u,a,c,s,l,h,p,d,v=10,g=v,_=90,y=360,m=2.5;return t.lines=function(){return n().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[p(o).concat(d(c).slice(1),p(i).reverse().slice(1),d(s).reverse().slice(1))]}},t.extent=function(n){return arguments.length?t.extentMajor(n).extentMinor(n):t.extentMinor()},t.extentMajor=function(n){return arguments.length?(o=+n[0][0],i=+n[1][0],s=+n[0][1],c=+n[1][1],o>i&&(n=o,o=i,i=n),s>c&&(n=s,s=c,c=n),t.precision(m)):[[o,s],[i,c]]},t.extentMinor=function(n){return arguments.length?(r=+n[0][0],e=+n[1][0],a=+n[0][1],u=+n[1][1],r>e&&(n=r,r=e,e=n),a>u&&(n=a,a=u,u=n),t.precision(m)):[[r,a],[e,u]]},t.step=function(n){return arguments.length?t.stepMajor(n).stepMinor(n):t.stepMinor()},t.stepMajor=function(n){return arguments.length?(_=+n[0],y=+n[1],t):[_,y]},t.stepMinor=function(n){return arguments.length?(v=+n[0],g=+n[1],t):[v,g]},t.precision=function(n){return arguments.length?(m=+n,l=fi(a,u,90),h=li(r,e,m),p=fi(s,c,90),d=li(o,i,m),t):m},t.extentMajor([[-180,-90+Mp],[180,90-Mp]]).extentMinor([[-180,-80-Mp],[180,80+Mp]])}function pi(t){return t}function di(){xd.point=vi}function vi(t,n){xd.point=gi,td=ed=t,nd=rd=n}function gi(t,n){md.add(rd*t-ed*n),ed=t,rd=n}function _i(){gi(td,nd)}function yi(t,n){kd+=t,Sd+=n,++Ed}function mi(){qd.point=xi}function xi(t,n){qd.point=bi,yi(ud=t,ad=n)}function bi(t,n){var e=t-ud,r=n-ad,i=Yp(e*e+r*r);Ad+=i*(ud+t)/2,Cd+=i*(ad+n)/2,zd+=i,yi(ud=t,ad=n)}function wi(){qd.point=yi}function Mi(){qd.point=Ni}function Ti(){ki(id,od)}function Ni(t,n){qd.point=ki,yi(id=ud=t,od=ad=n)}function ki(t,n){var e=t-ud,r=n-ad,i=Yp(e*e+r*r);Ad+=i*(ud+t)/2,Cd+=i*(ad+n)/2,zd+=i,Pd+=(i=ad*t-ud*n)*(ud+t),Rd+=i*(ad+n),Ld+=3*i,yi(ud=t,ad=n)}function Si(t){this._context=t}function Ei(t,n){Bd.point=Ai,Ud=Fd=t,Od=Id=n}function Ai(t,n){Fd-=t,Id-=n,Yd.add(Yp(Fd*Fd+Id*Id)),Fd=t,Id=n}function Ci(){this._string=[]}function zi(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Pi(t){return function(n){var e=new Ri;for(var r in t)e[r]=t[r];return e.stream=n,e}}function Ri(){}function Li(t,n,e){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),tr(e,t.stream(Nd)),n(Nd.result()),null!=r&&t.clipExtent(r),t}function qi(t,n,e){return Li(t,function(e){var r=n[1][0]-n[0][0],i=n[1][1]-n[0][1],o=Math.min(r/(e[1][0]-e[0][0]),i/(e[1][1]-e[0][1])),u=+n[0][0]+(r-o*(e[1][0]+e[0][0]))/2,a=+n[0][1]+(i-o*(e[1][1]+e[0][1]))/2;t.scale(150*o).translate([u,a])},e)}function Di(t,n,e){return qi(t,[[0,0],n],e)}function Ui(t,n,e){return Li(t,function(e){var r=+n,i=r/(e[1][0]-e[0][0]),o=(r-i*(e[1][0]+e[0][0]))/2,u=-i*e[0][1];t.scale(150*i).translate([o,u])},e)}function Oi(t,n,e){return Li(t,function(e){var r=+n,i=r/(e[1][1]-e[0][1]),o=-i*e[0][0],u=(r-i*(e[1][1]+e[0][1]))/2;t.scale(150*i).translate([o,u])},e)}function Fi(t,n){return+n?function(t,n){function e(r,i,o,u,a,c,s,f,l,h,p,d,v,g){var _=s-r,y=f-i,m=_*_+y*y;if(m>4*n&&v--){var x=u+h,b=a+p,w=c+d,M=Yp(x*x+b*b+w*w),T=We(w/=M),N=zp(zp(w)-1)n||zp((_*A+y*C)/m-.5)>.3||u*h+a*p+c*d2?t[2]%360*Cp:0,r()):[x*Ap,b*Ap,w*Ap]},n.precision=function(t){return arguments.length?(E=Fi(e,S=t*t),i()):Yp(S)},n.fitExtent=function(t,e){return qi(n,t,e)},n.fitSize=function(t,e){return Di(n,t,e)},n.fitWidth=function(t,e){return Ui(n,t,e)},n.fitHeight=function(t,e){return Oi(n,t,e)},function(){return o=t.apply(this,arguments),n.invert=o.invert&&function(t){return(t=s.invert((t[0]-u)/v,(a-t[1])/v))&&[t[0]*Ap,t[1]*Ap]},r()}}function Bi(t){var n=0,e=Np/3,r=Yi(t),i=r(n,e);return i.parallels=function(t){return arguments.length?r(n=t[0]*Cp,e=t[1]*Cp):[n*Ap,e*Ap]},i}function Hi(t,n){function e(t,n){var e=Yp(o-2*i*Fp(n))/i;return[e*Fp(t*=i),u-e*Lp(t)]}var r=Fp(t),i=(r+Fp(n))/2;if(zp(i)0?n<-kp+Mp&&(n=-kp+Mp):n>kp-Mp&&(n=kp-Mp);var e=o/Op(Gi(n),i);return[e*Fp(i*t),o-e*Lp(i*t)]}var r=Lp(t),i=t===n?Fp(t):Up(r/Lp(n))/Up(Gi(n)/Gi(t)),o=r*Op(Gi(t),i)/i;return i?(e.invert=function(t,n){var e=o-n,r=Ip(i)*Yp(t*t+e*e);return[Rp(t,zp(e))/i*Ip(e),2*Pp(Op(o/r,1/i))-kp]},e):Wi}function Ji(t,n){return[t,n]}function Ki(t,n){function e(t,n){var e=o-n,r=i*t;return[e*Fp(r),o-e*Lp(r)]}var r=Lp(t),i=t===n?Fp(t):(r-Lp(n))/(n-t),o=r/i+t;return zp(i)=0;)n+=e[r].value;else n=1;t.value=n}function fo(t,n){var e,r,i,o,u,a=new vo(t),c=+t.value&&(a.value=t.value),s=[a];for(null==n&&(n=lo);e=s.pop();)if(c&&(e.value=+e.data.value),(i=n(e.data))&&(u=i.length))for(e.children=new Array(u),o=u-1;o>=0;--o)s.push(r=e.children[o]=new vo(i[o])),r.parent=e,r.depth=e.depth+1;return a.eachBefore(po)}function lo(t){return t.children}function ho(t){t.data=t.data.data}function po(t){var n=0;do{t.height=n}while((t=t.parent)&&t.height<++n)}function vo(t){this.data=t,this.depth=this.height=0,this.parent=null}function go(t){for(var n,e,r=0,i=(t=function(t){for(var n,e,r=t.length;r;)e=Math.random()*r--|0,n=t[r],t[r]=t[e],t[e]=n;return t}(Wd.call(t))).length,o=[];r0&&e*e>r*r+i*i}function mo(t,n){for(var e=0;ee*e+r*r}function To(t){var n=t._,e=t.next._,r=n.r+e.r,i=(n.x*e.r+e.x*n.r)/r,o=(n.y*e.r+e.y*n.r)/r;return i*i+o*o}function No(t){this._=t,this.next=null,this.previous=null}function ko(t){if(!(i=t.length))return 0;var n,e,r,i,o,u,a,c,s,f,l;if(n=t[0],n.x=0,n.y=0,!(i>1))return n.r;if(e=t[1],n.x=-e.r,e.x=n.r,e.y=0,!(i>2))return n.r+e.r;wo(e,n,r=t[2]),n=new No(n),e=new No(e),r=new No(r),n.next=r.previous=e,e.next=n.previous=r,r.next=e.previous=n;t:for(a=3;ah&&(h=a),g=f*f*v,(p=Math.max(h/g,g/l))>d){f-=a;break}d=p}_.push(u={value:f,dice:c1&&Vo(t[e[r-2]],t[e[r-1]],t[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function Zo(t){this._size=t,this._call=this._error=null,this._tasks=[],this._data=[],this._waiting=this._active=this._ended=this._start=0}function Go(t){if(!t._start)try{(function(t){for(;t._start=t._waiting&&t._active=0;)if((e=t._tasks[r])&&(t._tasks[r]=null,e.abort))try{e.abort()}catch(n){}t._active=NaN,Jo(t)}function Jo(t){if(!t._active&&t._call){var n=t._data;t._data=void 0,t._call(t._error,n)}}function Ko(t){if(null==t)t=1/0;else if(!((t=+t)>=1))throw new Error("invalid concurrency");return new Zo(t)}function tu(){return Math.random()}function nu(t,n){function e(t){var n,e=s.status;if(!e&&function(t){var n=t.responseType;return n&&"text"!==n?t.response:t.responseText}(s)||e>=200&&e<300||304===e){if(o)try{n=o.call(r,s)}catch(t){return void a.call("error",r,t)}else n=s;a.call("load",r,n)}else a.call("error",r,t)}var r,i,o,u,a=N("beforesend","progress","load","error"),c=se(),s=new XMLHttpRequest,f=null,l=null,h=0;if("undefined"==typeof XDomainRequest||"withCredentials"in s||!/^(http(s)?:)?\/\//.test(t)||(s=new XDomainRequest),"onload"in s?s.onload=s.onerror=s.ontimeout=e:s.onreadystatechange=function(t){s.readyState>3&&e(t)},s.onprogress=function(t){a.call("progress",r,t)},r={header:function(t,n){return t=(t+"").toLowerCase(),arguments.length<2?c.get(t):(null==n?c.remove(t):c.set(t,n+""),r)},mimeType:function(t){return arguments.length?(i=null==t?null:t+"",r):i},responseType:function(t){return arguments.length?(u=t,r):u},timeout:function(t){return arguments.length?(h=+t,r):h},user:function(t){return arguments.length<1?f:(f=null==t?null:t+"",r)},password:function(t){return arguments.length<1?l:(l=null==t?null:t+"",r)},response:function(t){return o=t,r},get:function(t,n){return r.send("GET",t,n)},post:function(t,n){return r.send("POST",t,n)},send:function(n,e,o){return s.open(n,t,!0,f,l),null==i||c.has("accept")||c.set("accept",i+",*/*"),s.setRequestHeader&&c.each(function(t,n){s.setRequestHeader(n,t)}),null!=i&&s.overrideMimeType&&s.overrideMimeType(i),null!=u&&(s.responseType=u),h>0&&(s.timeout=h),null==o&&"function"==typeof e&&(o=e,e=null),null!=o&&1===o.length&&(o=function(t){return function(n,e){t(null==n?e:null)}}(o)),null!=o&&r.on("error",o).on("load",function(t){o(null,t)}),a.call("beforesend",r,s),s.send(null==e?null:e),r},abort:function(){return s.abort(),r},on:function(){var t=a.on.apply(a,arguments);return t===a?r:t}},null!=n){if("function"!=typeof n)throw new Error("invalid callback: "+n);return r.get(n)}return r}function eu(t,n){return function(e,r){var i=nu(e).mimeType(t).response(n);if(null!=r){if("function"!=typeof r)throw new Error("invalid callback: "+r);return i.get(r)}return i}}function ru(t,n){return function(e,r,i){arguments.length<3&&(i=r,r=null);var o=nu(e).mimeType(t);return o.row=function(t){return arguments.length?o.response(function(t,n){return function(e){return t(e.responseText,n)}}(n,r=t)):r},o.row(r),i?o.get(i):o}}function iu(t){function n(n){var o=n+"",u=e.get(o);if(!u){if(i!==yv)return i;e.set(o,u=r.push(n))}return t[(u-1)%t.length]}var e=se(),r=[],i=yv;return t=null==t?[]:_v.call(t),n.domain=function(t){if(!arguments.length)return r.slice();r=[],e=se();for(var i,o,u=-1,a=t.length;++u2?lu:fu,o=u=null,r}function r(n){return(o||(o=i(a,c,f?function(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=n?0:t>=e?1:r(t)}}}(t):t,s)))(+n)}var i,o,u,a=mv,c=mv,s=fn,f=!1;return r.invert=function(t){return(u||(u=i(c,a,su,f?function(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=0?n:t>=1?e:r(t)}}}(n):n)))(+t)},r.domain=function(t){return arguments.length?(a=gv.call(t,cu),e()):a.slice()},r.range=function(t){return arguments.length?(c=_v.call(t),e()):c.slice()},r.rangeRound=function(t){return c=_v.call(t),s=ln,e()},r.clamp=function(t){return arguments.length?(f=!!t,e()):f},r.interpolate=function(t){return arguments.length?(s=t,e()):s},e()}function du(n){var e=n.domain;return n.ticks=function(t){var n=e();return l(n[0],n[n.length-1],null==t?10:t)},n.tickFormat=function(n,r){return function(n,e,r){var i,o=n[0],u=n[n.length-1],a=p(o,u,null==e?10:e);switch((r=De(null==r?",f":r)).type){case"s":var c=Math.max(Math.abs(o),Math.abs(u));return null!=r.precision||isNaN(i=Be(a,c))||(r.precision=i),t.formatPrefix(r,c);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=He(a,Math.max(Math.abs(o),Math.abs(u))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=Ye(a))||(r.precision=i-2*("%"===r.type))}return t.format(r)}(e(),n,r)},n.nice=function(t){null==t&&(t=10);var r,i=e(),o=0,u=i.length-1,a=i[o],c=i[u];return c0?r=h(a=Math.floor(a/r)*r,c=Math.ceil(c/r)*r,t):r<0&&(r=h(a=Math.ceil(a*r)/r,c=Math.floor(c*r)/r,t)),r>0?(i[o]=Math.floor(a/r)*r,i[u]=Math.ceil(c/r)*r,e(i)):r<0&&(i[o]=Math.ceil(a*r)/r,i[u]=Math.floor(c*r)/r,e(i)),n},n}function vu(){var t=pu(su,an);return t.copy=function(){return hu(t,vu())},du(t)}function gu(){function t(t){return+t}var n=[0,1];return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=gv.call(e,cu),t):n.slice()},t.copy=function(){return gu().domain(n)},du(t)}function _u(t,n){var e,r=0,i=(t=t.slice()).length-1,o=t[r],u=t[i];return u0){for(;pc)break;g.push(h)}}else for(;p=1;--f)if(!((h=s*f)c)break;g.push(h)}}else g=l(p,d,Math.min(d-p,v)).map(u);return n?g.reverse():g},e.tickFormat=function(n,r){if(null==r&&(r=10===i?".0e":","),"function"!=typeof r&&(r=t.format(r)),n===1/0)return r;null==n&&(n=10);var a=Math.max(1,i*n/e.ticks().length);return function(t){var n=t/u(Math.round(o(t)));return n*i0?o[n-1]:r[0],n=i?[o[i-1],r]:[o[n-1],o[n]]},t.copy=function(){return Eu().domain([e,r]).range(u)},du(t)}function Au(){function t(t){if(t<=t)return e[Os(n,t,0,r)]}var n=[.5],e=[0,1],r=1;return t.domain=function(i){return arguments.length?(n=_v.call(i),r=Math.min(n.length,e.length-1),t):n.slice()},t.range=function(i){return arguments.length?(e=_v.call(i),r=Math.min(n.length,e.length-1),t):e.slice()},t.invertExtent=function(t){var r=e.indexOf(t);return[n[r-1],n[r]]},t.copy=function(){return Au().domain(n).range(e)},t}function Cu(t,n,e,r){function i(n){return t(n=new Date(+n)),n}return i.floor=i,i.ceil=function(e){return t(e=new Date(e-1)),n(e,1),t(e),e},i.round=function(t){var n=i(t),e=i.ceil(t);return t-n0))return a;do{a.push(u=new Date(+e)),n(e,o),t(e)}while(u=n)for(;t(n),!e(n);)n.setTime(n-1)},function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;n(t,-1),!e(t););else for(;--r>=0;)for(;n(t,1),!e(t););})},e&&(i.count=function(n,r){return xv.setTime(+n),bv.setTime(+r),t(xv),t(bv),Math.floor(e(xv,bv))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(n){return r(n)%t==0}:function(n){return i.count(0,n)%t==0}):i:null}),i}function zu(t){return Cu(function(n){n.setDate(n.getDate()-(n.getDay()+7-t)%7),n.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+7*n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Tv)/Nv})}function Pu(t){return Cu(function(n){n.setUTCDate(n.getUTCDate()-(n.getUTCDay()+7-t)%7),n.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+7*n)},function(t,n){return(n-t)/Nv})}function Ru(t){if(0<=t.y&&t.y<100){var n=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return n.setFullYear(t.y),n}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Lu(t){if(0<=t.y&&t.y<100){var n=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return n.setUTCFullYear(t.y),n}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function qu(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}function Du(t){function n(t,n){return function(e){var r,i,o,u=[],a=-1,c=0,s=t.length;for(e instanceof Date||(e=new Date(+e));++a53)return null;"w"in u||(u.w=1),"Z"in u?(i=(o=(i=Lu(qu(u.y))).getUTCDay())>4||0===o?og.ceil(i):og(i),i=eg.offset(i,7*(u.V-1)),u.y=i.getUTCFullYear(),u.m=i.getUTCMonth(),u.d=i.getUTCDate()+(u.w+6)%7):(i=(o=(i=n(qu(u.y))).getDay())>4||0===o?qv.ceil(i):qv(i),i=Pv.offset(i,7*(u.V-1)),u.y=i.getFullYear(),u.m=i.getMonth(),u.d=i.getDate()+(u.w+6)%7)}else("W"in u||"U"in u)&&("w"in u||(u.w="u"in u?u.u%7:"W"in u?1:0),o="Z"in u?Lu(qu(u.y)).getUTCDay():n(qu(u.y)).getDay(),u.m=0,u.d="W"in u?(u.w+6)%7+7*u.W-(o+5)%7:u.w+7*u.U-(o+6)%7);return"Z"in u?(u.H+=u.Z/100|0,u.M+=u.Z%100,Lu(u)):n(u)}}function r(t,n,e,r){for(var i,o,u=0,a=n.length,c=e.length;u=c)return-1;if(37===(i=n.charCodeAt(u++))){if(i=n.charAt(u++),!(o=T[i in Mg?n.charAt(u++):i])||(r=o(t,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}var i=t.dateTime,o=t.date,u=t.time,a=t.periods,c=t.days,s=t.shortDays,f=t.months,l=t.shortMonths,h=Fu(a),p=Iu(a),d=Fu(c),v=Iu(c),g=Fu(s),_=Iu(s),y=Fu(f),m=Iu(f),x=Fu(l),b=Iu(l),w={a:function(t){return s[t.getDay()]},A:function(t){return c[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return f[t.getMonth()]},c:null,d:ua,e:ua,f:la,H:aa,I:ca,j:sa,L:fa,m:ha,M:pa,p:function(t){return a[+(t.getHours()>=12)]},Q:Ya,s:Ba,S:da,u:va,U:ga,V:_a,w:ya,W:ma,x:null,X:null,y:xa,Y:ba,Z:wa,"%":Ia},M={a:function(t){return s[t.getUTCDay()]},A:function(t){return c[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return f[t.getUTCMonth()]},c:null,d:Ma,e:Ma,f:Ea,H:Ta,I:Na,j:ka,L:Sa,m:Aa,M:Ca,p:function(t){return a[+(t.getUTCHours()>=12)]},Q:Ya,s:Ba,S:za,u:Pa,U:Ra,V:La,w:qa,W:Da,x:null,X:null,y:Ua,Y:Oa,Z:Fa,"%":Ia},T={a:function(t,n,e){var r=g.exec(n.slice(e));return r?(t.w=_[r[0].toLowerCase()],e+r[0].length):-1},A:function(t,n,e){var r=d.exec(n.slice(e));return r?(t.w=v[r[0].toLowerCase()],e+r[0].length):-1},b:function(t,n,e){var r=x.exec(n.slice(e));return r?(t.m=b[r[0].toLowerCase()],e+r[0].length):-1},B:function(t,n,e){var r=y.exec(n.slice(e));return r?(t.m=m[r[0].toLowerCase()],e+r[0].length):-1},c:function(t,n,e){return r(t,i,n,e)},d:Gu,e:Gu,f:ea,H:Ju,I:Ju,j:Qu,L:na,m:Zu,M:Ku,p:function(t,n,e){var r=h.exec(n.slice(e));return r?(t.p=p[r[0].toLowerCase()],e+r[0].length):-1},Q:ia,s:oa,S:ta,u:Bu,U:Hu,V:ju,w:Yu,W:Xu,x:function(t,n,e){return r(t,o,n,e)},X:function(t,n,e){return r(t,u,n,e)},y:$u,Y:Vu,Z:Wu,"%":ra};return w.x=n(o,w),w.X=n(u,w),w.c=n(i,w),M.x=n(o,M),M.X=n(u,M),M.c=n(i,M),{format:function(t){var e=n(t+="",w);return e.toString=function(){return t},e},parse:function(t){var n=e(t+="",Ru);return n.toString=function(){return t},n},utcFormat:function(t){var e=n(t+="",M);return e.toString=function(){return t},e},utcParse:function(t){var n=e(t,Lu);return n.toString=function(){return t},n}}}function Uu(t,n,e){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o68?1900:2e3),e+r[0].length):-1}function Wu(t,n,e){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(n.slice(e,e+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),e+r[0].length):-1}function Zu(t,n,e){var r=Tg.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function Gu(t,n,e){var r=Tg.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function Qu(t,n,e){var r=Tg.exec(n.slice(e,e+3));return r?(t.m=0,t.d=+r[0],e+r[0].length):-1}function Ju(t,n,e){var r=Tg.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function Ku(t,n,e){var r=Tg.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function ta(t,n,e){var r=Tg.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function na(t,n,e){var r=Tg.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function ea(t,n,e){var r=Tg.exec(n.slice(e,e+6));return r?(t.L=Math.floor(r[0]/1e3),e+r[0].length):-1}function ra(t,n,e){var r=Ng.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function ia(t,n,e){var r=Tg.exec(n.slice(e));return r?(t.Q=+r[0],e+r[0].length):-1}function oa(t,n,e){var r=Tg.exec(n.slice(e));return r?(t.Q=1e3*+r[0],e+r[0].length):-1}function ua(t,n){return Uu(t.getDate(),n,2)}function aa(t,n){return Uu(t.getHours(),n,2)}function ca(t,n){return Uu(t.getHours()%12||12,n,2)}function sa(t,n){return Uu(1+Pv.count(Gv(t),t),n,3)}function fa(t,n){return Uu(t.getMilliseconds(),n,3)}function la(t,n){return fa(t,n)+"000"}function ha(t,n){return Uu(t.getMonth()+1,n,2)}function pa(t,n){return Uu(t.getMinutes(),n,2)}function da(t,n){return Uu(t.getSeconds(),n,2)}function va(t){var n=t.getDay();return 0===n?7:n}function ga(t,n){return Uu(Lv.count(Gv(t),t),n,2)}function _a(t,n){var e=t.getDay();return t=e>=4||0===e?Ov(t):Ov.ceil(t),Uu(Ov.count(Gv(t),t)+(4===Gv(t).getDay()),n,2)}function ya(t){return t.getDay()}function ma(t,n){return Uu(qv.count(Gv(t),t),n,2)}function xa(t,n){return Uu(t.getFullYear()%100,n,2)}function ba(t,n){return Uu(t.getFullYear()%1e4,n,4)}function wa(t){var n=t.getTimezoneOffset();return(n>0?"-":(n*=-1,"+"))+Uu(n/60|0,"0",2)+Uu(n%60,"0",2)}function Ma(t,n){return Uu(t.getUTCDate(),n,2)}function Ta(t,n){return Uu(t.getUTCHours(),n,2)}function Na(t,n){return Uu(t.getUTCHours()%12||12,n,2)}function ka(t,n){return Uu(1+eg.count(xg(t),t),n,3)}function Sa(t,n){return Uu(t.getUTCMilliseconds(),n,3)}function Ea(t,n){return Sa(t,n)+"000"}function Aa(t,n){return Uu(t.getUTCMonth()+1,n,2)}function Ca(t,n){return Uu(t.getUTCMinutes(),n,2)}function za(t,n){return Uu(t.getUTCSeconds(),n,2)}function Pa(t){var n=t.getUTCDay();return 0===n?7:n}function Ra(t,n){return Uu(ig.count(xg(t),t),n,2)}function La(t,n){var e=t.getUTCDay();return t=e>=4||0===e?cg(t):cg.ceil(t),Uu(cg.count(xg(t),t)+(4===xg(t).getUTCDay()),n,2)}function qa(t){return t.getUTCDay()}function Da(t,n){return Uu(og.count(xg(t),t),n,2)}function Ua(t,n){return Uu(t.getUTCFullYear()%100,n,2)}function Oa(t,n){return Uu(t.getUTCFullYear()%1e4,n,4)}function Fa(){return"+0000"}function Ia(){return"%"}function Ya(t){return+t}function Ba(t){return Math.floor(+t/1e3)}function Ha(n){return bg=Du(n),t.timeFormat=bg.format,t.timeParse=bg.parse,t.utcFormat=bg.utcFormat,t.utcParse=bg.utcParse,bg}function ja(t){return new Date(t)}function Xa(t){return t instanceof Date?+t:+new Date(+t)}function Va(t,n,r,i,o,u,a,c,s){function f(e){return(a(e)=1?i_:t<=-1?-i_:Math.asin(t)}function Ja(t){return t.innerRadius}function Ka(t){return t.outerRadius}function tc(t){return t.startAngle}function nc(t){return t.endAngle}function ec(t){return t&&t.padAngle}function rc(t,n,e,r,i,o,u){var a=t-e,c=n-r,s=(u?o:-o)/n_(a*a+c*c),f=s*c,l=-s*a,h=t+f,p=n+l,d=e+f,v=r+l,g=(h+d)/2,_=(p+v)/2,y=d-h,m=v-p,x=y*y+m*m,b=i-o,w=h*v-d*p,M=(m<0?-1:1)*n_(Jg(0,b*b*x-w*w)),T=(w*m-y*M)/x,N=(-w*y-m*M)/x,k=(w*m+y*M)/x,S=(-w*y+m*M)/x,E=T-g,A=N-_,C=k-g,z=S-_;return E*E+A*A>C*C+z*z&&(T=k,N=S),{cx:T,cy:N,x01:-f,y01:-l,x11:T*(i/b-1),y11:N*(i/b-1)}}function ic(t){this._context=t}function oc(t){return new ic(t)}function uc(t){return t[0]}function ac(t){return t[1]}function cc(){function t(t){var a,c,s,f=t.length,l=!1;for(null==i&&(u=o(s=ee())),a=0;a<=f;++a)!(a=f;--l)s.point(g[l],_[l]);s.lineEnd(),s.areaEnd()}v&&(g[n]=+e(h,n,t),_[n]=+i(h,n,t),s.point(r?+r(h,n,t):g[n],o?+o(h,n,t):_[n]))}if(p)return s=null,p+""||null}function n(){return cc().defined(u).curve(c).context(a)}var e=uc,r=null,i=Ga(0),o=ac,u=Ga(!0),a=null,c=oc,s=null;return t.x=function(n){return arguments.length?(e="function"==typeof n?n:Ga(+n),r=null,t):e},t.x0=function(n){return arguments.length?(e="function"==typeof n?n:Ga(+n),t):e},t.x1=function(n){return arguments.length?(r=null==n?null:"function"==typeof n?n:Ga(+n),t):r},t.y=function(n){return arguments.length?(i="function"==typeof n?n:Ga(+n),o=null,t):i},t.y0=function(n){return arguments.length?(i="function"==typeof n?n:Ga(+n),t):i},t.y1=function(n){return arguments.length?(o=null==n?null:"function"==typeof n?n:Ga(+n),t):o},t.lineX0=t.lineY0=function(){return n().x(e).y(i)},t.lineY1=function(){return n().x(e).y(o)},t.lineX1=function(){return n().x(r).y(i)},t.defined=function(n){return arguments.length?(u="function"==typeof n?n:Ga(!!n),t):u},t.curve=function(n){return arguments.length?(c=n,null!=a&&(s=c(a)),t):c},t.context=function(n){return arguments.length?(null==n?a=s=null:s=c(a=n),t):a},t}function fc(t,n){return nt?1:n>=t?0:NaN}function lc(t){return t}function hc(t){this._curve=t}function pc(t){function n(n){return new hc(t(n))}return n._curve=t,n}function dc(t){var n=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?n(pc(t)):n()._curve},t}function vc(){return dc(cc().curve(u_))}function gc(){var t=sc().curve(u_),n=t.curve,e=t.lineX0,r=t.lineX1,i=t.lineY0,o=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return dc(e())},delete t.lineX0,t.lineEndAngle=function(){return dc(r())},delete t.lineX1,t.lineInnerRadius=function(){return dc(i())},delete t.lineY0,t.lineOuterRadius=function(){return dc(o())},delete t.lineY1,t.curve=function(t){return arguments.length?n(pc(t)):n()._curve},t}function _c(t,n){return[(n=+n)*Math.cos(t-=Math.PI/2),n*Math.sin(t)]}function yc(t){return t.source}function mc(t){return t.target}function xc(t){function n(){var n,a=a_.call(arguments),c=e.apply(this,a),s=r.apply(this,a);if(u||(u=n=ee()),t(u,+i.apply(this,(a[0]=c,a)),+o.apply(this,a),+i.apply(this,(a[0]=s,a)),+o.apply(this,a)),n)return u=null,n+""||null}var e=yc,r=mc,i=uc,o=ac,u=null;return n.source=function(t){return arguments.length?(e=t,n):e},n.target=function(t){return arguments.length?(r=t,n):r},n.x=function(t){return arguments.length?(i="function"==typeof t?t:Ga(+t),n):i},n.y=function(t){return arguments.length?(o="function"==typeof t?t:Ga(+t),n):o},n.context=function(t){return arguments.length?(u=null==t?null:t,n):u},n}function bc(t,n,e,r,i){t.moveTo(n,e),t.bezierCurveTo(n=(n+r)/2,e,n,i,r,i)}function wc(t,n,e,r,i){t.moveTo(n,e),t.bezierCurveTo(n,e=(e+i)/2,r,e,r,i)}function Mc(t,n,e,r,i){var o=_c(n,e),u=_c(n,e=(e+i)/2),a=_c(r,e),c=_c(r,i);t.moveTo(o[0],o[1]),t.bezierCurveTo(u[0],u[1],a[0],a[1],c[0],c[1])}function Tc(){}function Nc(t,n,e){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+n)/6,(t._y0+4*t._y1+e)/6)}function kc(t){this._context=t}function Sc(t){this._context=t}function Ec(t){this._context=t}function Ac(t,n){this._basis=new kc(t),this._beta=n}function Cc(t,n,e){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-n),t._y2+t._k*(t._y1-e),t._x2,t._y2)}function zc(t,n){this._context=t,this._k=(1-n)/6}function Pc(t,n){this._context=t,this._k=(1-n)/6}function Rc(t,n){this._context=t,this._k=(1-n)/6}function Lc(t,n,e){var r=t._x1,i=t._y1,o=t._x2,u=t._y2;if(t._l01_a>e_){var a=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*a-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*a-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>e_){var s=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*s+t._x1*t._l23_2a-n*t._l12_2a)/f,u=(u*s+t._y1*t._l23_2a-e*t._l12_2a)/f}t._context.bezierCurveTo(r,i,o,u,t._x2,t._y2)}function qc(t,n){this._context=t,this._alpha=n}function Dc(t,n){this._context=t,this._alpha=n}function Uc(t,n){this._context=t,this._alpha=n}function Oc(t){this._context=t}function Fc(t){return t<0?-1:1}function Ic(t,n,e){var r=t._x1-t._x0,i=n-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),u=(e-t._y1)/(i||r<0&&-0),a=(o*i+u*r)/(r+i);return(Fc(o)+Fc(u))*Math.min(Math.abs(o),Math.abs(u),.5*Math.abs(a))||0}function Yc(t,n){var e=t._x1-t._x0;return e?(3*(t._y1-t._y0)/e-n)/2:n}function Bc(t,n,e){var r=t._x0,i=t._y0,o=t._x1,u=t._y1,a=(o-r)/3;t._context.bezierCurveTo(r+a,i+a*n,o-a,u-a*e,o,u)}function Hc(t){this._context=t}function jc(t){this._context=new Xc(t)}function Xc(t){this._context=t}function Vc(t){this._context=t}function $c(t){var n,e,r=t.length-1,i=new Array(r),o=new Array(r),u=new Array(r);for(i[0]=0,o[0]=2,u[0]=t[0]+2*t[1],n=1;n=0;--n)i[n]=(u[n]-i[n+1])/o[n];for(o[r-1]=(t[r]+i[r-1])/2,n=0;n1)for(var e,r,i,o=1,u=t[n[0]],a=u.length;o=0;)e[n]=n;return e}function Qc(t,n){return t[n]}function Jc(t){var n=t.map(Kc);return Gc(t).sort(function(t,e){return n[t]-n[e]})}function Kc(t){for(var n,e=0,r=-1,i=t.length;++r0)){if(o/=h,h<0){if(o0){if(o>l)return;o>f&&(f=o)}if(o=r-c,h||!(o<0)){if(o/=h,h<0){if(o>l)return;o>f&&(f=o)}else if(h>0){if(o0)){if(o/=p,p<0){if(o0){if(o>l)return;o>f&&(f=o)}if(o=i-s,p||!(o<0)){if(o/=p,p<0){if(o>l)return;o>f&&(f=o)}else if(p>0){if(o0||l<1)||(f>0&&(t[0]=[c+f*h,s+f*p]),l<1&&(t[1]=[c+l*h,s+l*p]),!0)}}}}}function hs(t,n,e,r,i){var o=t[1];if(o)return!0;var u,a,c=t[0],s=t.left,f=t.right,l=s[0],h=s[1],p=f[0],d=f[1],v=(l+p)/2,g=(h+d)/2;if(d===h){if(v=r)return;if(l>p){if(c){if(c[1]>=i)return}else c=[v,e];o=[v,i]}else{if(c){if(c[1]1)if(l>p){if(c){if(c[1]>=i)return}else c=[(e-a)/u,e];o=[(i-a)/u,i]}else{if(c){if(c[1]=r)return}else c=[n,u*n+a];o=[r,u*r+a]}else{if(c){if(c[0]=-I_)){var p=c*c+s*s,d=f*f+l*l,v=(l*p-s*d)/h,g=(c*d-f*p)/h,_=U_.pop()||new function(){is(this),this.x=this.y=this.arc=this.site=this.cy=null};_.arc=t,_.site=i,_.x=v+u,_.y=(_.cy=g+a)+Math.sqrt(v*v+g*g),t.circle=_;for(var y=null,m=q_._;m;)if(_.yF_)a=a.L;else{if(!((i=o-function(t,n){var e=t.N;if(e)return ws(e,n);var r=t.site;return r[1]===n?r[0]:1/0}(a,u))>F_)){r>-F_?(n=a.P,e=a):i>-F_?(n=a,e=a.N):n=e=a;break}if(!a.R){n=a;break}a=a.R}(function(t){L_[t.index]={site:t,halfedges:[]}})(t);var c=ys(t);if(R_.insert(n,c),n||e){if(n===e)return _s(n),e=ys(n.site),R_.insert(c,e),c.edge=e.edge=cs(n.site,c.site),gs(n),void gs(e);if(e){_s(n),_s(e);var s=n.site,f=s[0],l=s[1],h=t[0]-f,p=t[1]-l,d=e.site,v=d[0]-f,g=d[1]-l,_=2*(h*g-p*v),y=h*h+p*p,m=v*v+g*g,x=[(g*y-p*m)/_+f,(h*m-v*y)/_+l];fs(e.edge,s,d,x),c.edge=cs(s,t,null,x),e.edge=cs(t,d,null,x),gs(n),gs(e)}else c.edge=cs(n.site,c.site)}}function ws(t,n){var e=t.site,r=e[0],i=e[1],o=i-n;if(!o)return r;var u=t.P;if(!u)return-1/0;var a=(e=u.site)[0],c=e[1],s=c-n;if(!s)return a;var f=a-r,l=1/o-1/s,h=f/s;return l?(-h+Math.sqrt(h*h-2*l*(f*f/(-2*s)-c+s/2+i-o/2)))/l+r:(r+a)/2}function Ms(t,n,e){return(t[0]-e[0])*(n[1]-t[1])-(t[0]-n[0])*(e[1]-t[1])}function Ts(t,n){return n[1]-t[1]||n[0]-t[0]}function Ns(t,n){var e,r,i,o=t.sort(Ts).pop();for(D_=[],L_=new Array(t.length),R_=new rs,q_=new rs;;)if(i=P_,o&&(!i||o[1]F_||Math.abs(i[0][1]-i[1][1])>F_)||delete D_[o]})(u,a,c,s),function(t,n,e,r){var i,o,u,a,c,s,f,l,h,p,d,v,g=L_.length,_=!0;for(i=0;iF_||Math.abs(v-h)>F_)&&(c.splice(a,0,D_.push(ss(u,p,Math.abs(d-t)F_?[t,Math.abs(l-t)F_?[Math.abs(h-r)F_?[e,Math.abs(l-e)F_?[Math.abs(h-n)r?(r+i)/2:Math.min(0,r)||Math.max(0,i),u>o?(o+u)/2:Math.min(0,o)||Math.max(0,u))}var Us=e(n),Os=Us.right,Fs=Us.left,Is=Array.prototype,Ys=Is.slice,Bs=Is.map,Hs=Math.sqrt(50),js=Math.sqrt(10),Xs=Math.sqrt(2),Vs=Array.prototype.slice,$s=1,Ws=2,Zs=3,Gs=4,Qs=1e-6,Js={value:function(){}};k.prototype=N.prototype={constructor:k,on:function(t,n){var e,r=this._,i=function(t,n){return t.trim().split(/^|\s+/).map(function(t){var e="",r=t.indexOf(".");if(r>=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})}(t+"",r),o=-1,u=i.length;{if(!(arguments.length<2)){if(null!=n&&"function"!=typeof n)throw new Error("invalid callback: "+n);for(;++o0)for(var e,r,i=new Array(e),o=0;o=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var af={};if(t.event=null,"undefined"!=typeof document){"onmouseenter"in document.documentElement||(af={mouseenter:"mouseover",mouseleave:"mouseout"})}var cf=[null];ut.prototype=at.prototype={constructor:ut,select:function(t){"function"!=typeof t&&(t=z(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i=x&&(x=m+1);!(y=g[x])&&++x=0;)(r=i[o])&&(u&&u!==r.nextSibling&&u.parentNode.insertBefore(r,u),u=r);return this},sort:function(t){function n(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}t||(t=O);for(var e=this._groups,r=e.length,i=new Array(r),o=0;o1?this.each((null==n?function(t){return function(){this.style.removeProperty(t)}}:"function"==typeof n?function(t,n,e){return function(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}}:function(t,n,e){return function(){this.style.setProperty(t,n,e)}})(t,n,null==e?"":e)):I(this.node(),t)},property:function(t,n){return arguments.length>1?this.each((null==n?function(t){return function(){delete this[t]}}:"function"==typeof n?function(t,n){return function(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}}:function(t,n){return function(){this[t]=n}})(t,n)):this.node()[t]},classed:function(t,n){var e=Y(t+"");if(arguments.length<2){for(var r=B(this.node()),i=-1,o=e.length;++i=0&&(n=t.slice(e+1),t=t.slice(0,e)),{type:t,name:n}})}(t+""),u=o.length;if(!(arguments.length<2)){for(a=n?rt:et,null==e&&(e=!1),r=0;r=240?t-240:t+120,i,r),Ut(t,i,r),Ut(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var wf=Math.PI/180,Mf=180/Math.PI,Tf=.95047,Nf=1,kf=1.08883,Sf=4/29,Ef=6/29,Af=3*Ef*Ef,Cf=Ef*Ef*Ef;Nt(It,Ft,kt(St,{brighter:function(t){return new It(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new It(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,n=isNaN(this.a)?t:t+this.a/500,e=isNaN(this.b)?t:t-this.b/200;return t=Nf*Bt(t),n=Tf*Bt(n),e=kf*Bt(e),new Rt(Ht(3.2404542*n-1.5371385*t-.4985314*e),Ht(-.969266*n+1.8760108*t+.041556*e),Ht(.0556434*n-.2040259*t+1.0572252*e),this.opacity)}})),Nt(Vt,Xt,kt(St,{brighter:function(t){return new Vt(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new Vt(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return Ot(this).rgb()}}));var zf=-.29227,Pf=-.90649,Rf=1.97294,Lf=Rf*Pf,qf=1.78277*Rf,Df=1.78277*zf- -.14861*Pf;Nt(Wt,$t,kt(St,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Wt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Wt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*wf,n=+this.l,e=isNaN(this.s)?0:this.s*n*(1-n),r=Math.cos(t),i=Math.sin(t);return new Rt(255*(n+e*(-.14861*r+1.78277*i)),255*(n+e*(zf*r+Pf*i)),255*(n+e*(Rf*r)),this.opacity)}}));var Uf,Of,Ff,If,Yf,Bf,Hf=function t(n){function e(t,n){var e=r((t=Pt(t)).r,(n=Pt(n)).r),i=r(t.g,n.g),o=r(t.b,n.b),u=en(t.opacity,n.opacity);return function(n){return t.r=e(n),t.g=i(n),t.b=o(n),t.opacity=u(n),t+""}}var r=nn(n);return e.gamma=t,e}(1),jf=rn(Gt),Xf=rn(Qt),Vf=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,$f=new RegExp(Vf.source,"g"),Wf=180/Math.PI,Zf={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},Gf=pn(function(t){return"none"===t?Zf:(Uf||(Uf=document.createElement("DIV"),Of=document.documentElement,Ff=document.defaultView),Uf.style.transform=t,t=Ff.getComputedStyle(Of.appendChild(Uf),null).getPropertyValue("transform"),Of.removeChild(Uf),t=t.slice(7,-1).split(","),hn(+t[0],+t[1],+t[2],+t[3],+t[4],+t[5]))},"px, ","px)","deg)"),Qf=pn(function(t){return null==t?Zf:(If||(If=document.createElementNS("http://www.w3.org/2000/svg","g")),If.setAttribute("transform",t),(t=If.transform.baseVal.consolidate())?(t=t.matrix,hn(t.a,t.b,t.c,t.d,t.e,t.f)):Zf)},", ",")",")"),Jf=Math.SQRT2,Kf=2,tl=4,nl=1e-12,el=gn(tn),rl=gn(en),il=_n(tn),ol=_n(en),ul=yn(tn),al=yn(en),cl=0,sl=0,fl=0,ll=1e3,hl=0,pl=0,dl=0,vl="object"==typeof performance&&performance.now?performance:Date,gl="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};bn.prototype=wn.prototype={constructor:bn,restart:function(t,n,e){if("function"!=typeof t)throw new TypeError("callback is not a function");e=(null==e?mn():+e)+(null==n?0:+n),this._next||Bf===this||(Bf?Bf._next=this:Yf=this,Bf=this),this._call=t,this._time=e,kn()},stop:function(){this._call&&(this._call=null,this._time=1/0,kn())}};var _l=N("start","end","interrupt"),yl=[],ml=0,xl=1,bl=2,wl=3,Ml=4,Tl=5,Nl=6,kl=at.prototype.constructor,Sl=0,El=at.prototype;qn.prototype=Dn.prototype={constructor:qn,select:function(t){var n=this._name,e=this._id;"function"!=typeof t&&(t=z(t));for(var r=this._groups,i=r.length,o=new Array(i),u=0;u=0&&(t=t.slice(0,n)),!t||"start"===t})}(n)?An:Cn;return function(){var u=o(this,t),a=u.on;a!==r&&(i=(r=a).copy()).on(n,e),u.on=i}}(e,t,n))},attr:function(t,n){var e=E(t),r="transform"===e?Qf:Ln;return this.attrTween(t,"function"==typeof n?(e.local?function(t,n,e){var r,i,o;return function(){var u,a=e(this);if(null!=a)return(u=this.getAttributeNS(t.space,t.local))===a?null:u===r&&a===i?o:o=n(r=u,i=a);this.removeAttributeNS(t.space,t.local)}}:function(t,n,e){var r,i,o;return function(){var u,a=e(this);if(null!=a)return(u=this.getAttribute(t))===a?null:u===r&&a===i?o:o=n(r=u,i=a);this.removeAttribute(t)}})(e,r,Rn(this,"attr."+t,n)):null==n?(e.local?function(t){return function(){this.removeAttributeNS(t.space,t.local)}}:function(t){return function(){this.removeAttribute(t)}})(e):(e.local?function(t,n,e){var r,i;return function(){var o=this.getAttributeNS(t.space,t.local);return o===e?null:o===r?i:i=n(r=o,e)}}:function(t,n,e){var r,i;return function(){var o=this.getAttribute(t);return o===e?null:o===r?i:i=n(r=o,e)}})(e,r,n+""))},attrTween:function(t,n){var e="attr."+t;if(arguments.length<2)return(e=this.tween(e))&&e._value;if(null==n)return this.tween(e,null);if("function"!=typeof n)throw new Error;var r=E(t);return this.tween(e,(r.local?function(t,n){function e(){var e=this,r=n.apply(e,arguments);return r&&function(n){e.setAttributeNS(t.space,t.local,r(n))}}return e._value=n,e}:function(t,n){function e(){var e=this,r=n.apply(e,arguments);return r&&function(n){e.setAttribute(t,r(n))}}return e._value=n,e})(r,n))},style:function(t,n,e){var r="transform"==(t+="")?Gf:Ln;return null==n?this.styleTween(t,function(t,n){var e,r,i;return function(){var o=I(this,t),u=(this.style.removeProperty(t),I(this,t));return o===u?null:o===e&&u===r?i:i=n(e=o,r=u)}}(t,r)).on("end.style."+t,function(t){return function(){this.style.removeProperty(t)}}(t)):this.styleTween(t,"function"==typeof n?function(t,n,e){var r,i,o;return function(){var u=I(this,t),a=e(this);return null==a&&(this.style.removeProperty(t),a=I(this,t)),u===a?null:u===r&&a===i?o:o=n(r=u,i=a)}}(t,r,Rn(this,"style."+t,n)):function(t,n,e){var r,i;return function(){var o=I(this,t);return o===e?null:o===r?i:i=n(r=o,e)}}(t,r,n+""),e)},styleTween:function(t,n,e){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==n)return this.tween(r,null);if("function"!=typeof n)throw new Error;return this.tween(r,function(t,n,e){function r(){var r=this,i=n.apply(r,arguments);return i&&function(n){r.style.setProperty(t,i(n),e)}}return r._value=n,r}(t,n,null==e?"":e))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var n=t(this);this.textContent=null==n?"":n}}(Rn(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},remove:function(){return this.on("end.remove",function(t){return function(){var n=this.parentNode;for(var e in this.__transition)if(+e!==t)return;n&&n.removeChild(this)}}(this._id))},tween:function(t,n){var e=this._id;if(t+="",arguments.length<2){for(var r,i=zn(this.node(),e).tween,o=0,u=i.length;o1e-6)if(Math.abs(f*a-c*s)>1e-6&&i){var h=e-o,p=r-u,d=a*a+c*c,v=h*h+p*p,g=Math.sqrt(d),_=Math.sqrt(l),y=i*Math.tan((yh-Math.acos((d+l-v)/(2*g*_)))/2),m=y/_,x=y/g;Math.abs(m-1)>1e-6&&(this._+="L"+(t+m*s)+","+(n+m*f)),this._+="A"+i+","+i+",0,0,"+ +(f*h>s*p)+","+(this._x1=t+x*a)+","+(this._y1=n+x*c)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,r,i,o){t=+t,n=+n;var u=(e=+e)*Math.cos(r),a=e*Math.sin(r),c=t+u,s=n+a,f=1^o,l=o?r-i:i-r;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),e&&(l<0&&(l=l%mh+mh),l>xh?this._+="A"+e+","+e+",0,1,"+f+","+(t-u)+","+(n-a)+"A"+e+","+e+",0,1,"+f+","+(this._x1=c)+","+(this._y1=s):l>1e-6&&(this._+="A"+e+","+e+",0,"+ +(l>=yh)+","+f+","+(this._x1=t+e*Math.cos(i))+","+(this._y1=n+e*Math.sin(i))))},rect:function(t,n,e,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +r+"h"+-e+"Z"},toString:function(){return this._}};ce.prototype=se.prototype={constructor:ce,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,n){return this["$"+t]=n,this},remove:function(t){var n="$"+t;return n in this&&delete this[n]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(n.slice(1));return t},values:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(this[n]);return t},entries:function(){var t=[];for(var n in this)"$"===n[0]&&t.push({key:n.slice(1),value:this[n]});return t},size:function(){var t=0;for(var n in this)"$"===n[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var n in this)"$"===n[0]&&t(this[n],n.slice(1),this)}};var bh=se.prototype;de.prototype=ve.prototype={constructor:de,has:bh.has,add:function(t){return t+="",this["$"+t]=t,this},remove:bh.remove,clear:bh.clear,values:bh.keys,size:bh.size,empty:bh.empty,each:bh.each};var wh={},Mh={},Th=34,Nh=10,kh=13,Sh=_e(","),Eh=Sh.parse,Ah=Sh.parseRows,Ch=Sh.format,zh=Sh.formatRows,Ph=_e("\t"),Rh=Ph.parse,Lh=Ph.parseRows,qh=Ph.format,Dh=Ph.formatRows,Uh=Te.prototype=Ne.prototype;Uh.copy=function(){var t,n,e=new Ne(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return e;if(!r.length)return e._root=ke(r),e;for(t=[{source:r,target:e._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(n=r.source[i])&&(n.length?t.push({source:n,target:r.target[i]=new Array(4)}):r.target[i]=ke(n));return e},Uh.add=function(t){var n=+this._x.call(null,t),e=+this._y.call(null,t);return xe(this.cover(n,e),n,e,t)},Uh.addAll=function(t){var n,e,r,i,o=t.length,u=new Array(o),a=new Array(o),c=1/0,s=1/0,f=-1/0,l=-1/0;for(e=0;ef&&(f=r),il&&(l=i));for(ft||t>i||r>n||n>o))return this;var u,a,c=i-e,s=this._root;switch(a=(n<(r+o)/2)<<1|t<(e+i)/2){case 0:do{u=new Array(4),u[a]=s,s=u}while(c*=2,i=e+c,o=r+c,t>i||n>o);break;case 1:do{u=new Array(4),u[a]=s,s=u}while(c*=2,e=i-c,o=r+c,e>t||n>o);break;case 2:do{u=new Array(4),u[a]=s,s=u}while(c*=2,i=e+c,r=o-c,t>i||r>n);break;case 3:do{u=new Array(4),u[a]=s,s=u}while(c*=2,e=i-c,r=o-c,e>t||r>n)}this._root&&this._root.length&&(this._root=s)}return this._x0=e,this._y0=r,this._x1=i,this._y1=o,this},Uh.data=function(){var t=[];return this.visit(function(n){if(!n.length)do{t.push(n.data)}while(n=n.next)}),t},Uh.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},Uh.find=function(t,n,e){var r,i,o,u,a,c,s,f=this._x0,l=this._y0,h=this._x1,p=this._y1,d=[],v=this._root;for(v&&d.push(new be(v,f,l,h,p)),null==e?e=1/0:(f=t-e,l=n-e,h=t+e,p=n+e,e*=e);c=d.pop();)if(!(!(v=c.node)||(i=c.x0)>h||(o=c.y0)>p||(u=c.x1)=_)<<1|t>=g)&&(c=d[d.length-1],d[d.length-1]=d[d.length-1-s],d[d.length-1-s]=c)}else{var y=t-+this._x.call(null,v.data),m=n-+this._y.call(null,v.data),x=y*y+m*m;if(x=(a=(d+g)/2))?d=a:g=a,(f=u>=(c=(v+_)/2))?v=c:_=c,n=p,!(p=p[l=f<<1|s]))return this;if(!p.length)break;(n[l+1&3]||n[l+2&3]||n[l+3&3])&&(e=n,h=l)}for(;p.data!==t;)if(r=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,r?(i?r.next=i:delete r.next,this):n?(i?n[l]=i:delete n[l],(p=n[0]||n[1]||n[2]||n[3])&&p===(n[3]||n[2]||n[1]||n[0])&&!p.length&&(e?e[h]=p:this._root=p),this):(this._root=i,this)},Uh.removeAll=function(t){for(var n=0,e=t.length;n0&&(o=0)}return o>0?t.slice(0,o)+t.slice(e+1):t},"%":function(t,n){return(100*t).toFixed(n)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},g:function(t,n){return t.toPrecision(n)},o:function(t){return Math.round(t).toString(8)},p:function(t,n){return qe(100*t,n)},r:qe,s:function(t,n){var e=Re(t,n);if(!e)return t+"";var r=e[0],i=e[1],o=i-(Oh=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,u=r.length;return o===u?r:o>u?r+new Array(o-u+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Re(t,Math.max(0,n+o-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Bh=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;De.prototype=Ue.prototype,Ue.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+this.type};var Hh,jh=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];Ie({decimal:".",thousands:",",grouping:[3],currency:["$",""]}),Xe.prototype={constructor:Xe,reset:function(){this.s=this.t=0},add:function(t){Ve(wp,t,this.t),Ve(this,wp.s,this.s),this.s?this.t+=wp.t:this.s=wp.t},valueOf:function(){return this.s}};var Xh,Vh,$h,Wh,Zh,Gh,Qh,Jh,Kh,tp,np,ep,rp,ip,op,up,ap,cp,sp,fp,lp,hp,pp,dp,vp,gp,_p,yp,mp,xp,bp,wp=new Xe,Mp=1e-6,Tp=1e-12,Np=Math.PI,kp=Np/2,Sp=Np/4,Ep=2*Np,Ap=180/Np,Cp=Np/180,zp=Math.abs,Pp=Math.atan,Rp=Math.atan2,Lp=Math.cos,qp=Math.ceil,Dp=Math.exp,Up=Math.log,Op=Math.pow,Fp=Math.sin,Ip=Math.sign||function(t){return t>0?1:t<0?-1:0},Yp=Math.sqrt,Bp=Math.tan,Hp={Feature:function(t,n){Qe(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,i=e.length;++rMp?Kh=90:Wp<-Mp&&(Qh=-90),op[0]=Gh,op[1]=Jh}},Gp={sphere:Ge,point:wr,lineStart:Tr,lineEnd:Sr,polygonStart:function(){Gp.lineStart=Er,Gp.lineEnd=Ar},polygonEnd:function(){Gp.lineStart=Tr,Gp.lineEnd=Sr}};Lr.invert=Lr;var Qp,Jp,Kp,td,nd,ed,rd,id,od,ud,ad,cd=je(),sd=Wr(function(){return!0},function(t){var n,e=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(o,u){var a=o>0?Np:-Np,c=zp(o-e);zp(c-Np)0?kp:-kp),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(a,r),t.point(o,r),n=0):i!==a&&c>=Np&&(zp(e-i)Mp?Pp((Fp(n)*(o=Lp(r))*Fp(e)-Fp(r)*(i=Lp(n))*Fp(t))/(i*o*u)):(n+r)/2}(e,r,o,u),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(a,r),n=0),t.point(e=o,r=u),i=a},lineEnd:function(){t.lineEnd(),e=r=NaN},clean:function(){return 2-n}}},function(t,n,e,r){var i;if(null==t)i=e*kp,r.point(-Np,i),r.point(0,i),r.point(Np,i),r.point(Np,0),r.point(Np,-i),r.point(0,-i),r.point(-Np,-i),r.point(-Np,0),r.point(-Np,i);else if(zp(t[0]-n[0])>Mp){var o=t[0]Md&&(Md=t),nTd&&(Td=n)},lineStart:Ge,lineEnd:Ge,polygonStart:Ge,polygonEnd:Ge,result:function(){var t=[[bd,wd],[Md,Td]];return Md=Td=-(wd=bd=1/0),t}},kd=0,Sd=0,Ed=0,Ad=0,Cd=0,zd=0,Pd=0,Rd=0,Ld=0,qd={point:yi,lineStart:mi,lineEnd:wi,polygonStart:function(){qd.lineStart=Mi,qd.lineEnd=Ti},polygonEnd:function(){qd.point=yi,qd.lineStart=mi,qd.lineEnd=wi},result:function(){var t=Ld?[Pd/Ld,Rd/Ld]:zd?[Ad/zd,Cd/zd]:Ed?[kd/Ed,Sd/Ed]:[NaN,NaN];return kd=Sd=Ed=Ad=Cd=zd=Pd=Rd=Ld=0,t}};Si.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,n){switch(this._point){case 0:this._context.moveTo(t,n),this._point=1;break;case 1:this._context.lineTo(t,n);break;default:this._context.moveTo(t+this._radius,n),this._context.arc(t,n,this._radius,0,Ep)}},result:Ge};var Dd,Ud,Od,Fd,Id,Yd=je(),Bd={point:Ge,lineStart:function(){Bd.point=Ei},lineEnd:function(){Dd&&Ai(Ud,Od),Bd.point=Ge},polygonStart:function(){Dd=!0},polygonEnd:function(){Dd=null},result:function(){var t=+Yd;return Yd.reset(),t}};Ci.prototype={_radius:4.5,_circle:zi(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,n){switch(this._point){case 0:this._string.push("M",t,",",n),this._point=1;break;case 1:this._string.push("L",t,",",n);break;default:null==this._circle&&(this._circle=zi(this._radius)),this._string.push("M",t,",",n,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}},Ri.prototype={constructor:Ri,point:function(t,n){this.stream.point(t,n)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var Hd=16,jd=Lp(30*Cp),Xd=Pi({point:function(t,n){this.stream.point(t*Cp,n*Cp)}}),Vd=Vi(function(t){return Yp(2/(1+t))});Vd.invert=$i(function(t){return 2*We(t/2)});var $d=Vi(function(t){return(t=$e(t))&&t/Fp(t)});$d.invert=$i(function(t){return t}),Wi.invert=function(t,n){return[t,2*Pp(Dp(n))-kp]},Ji.invert=Ji,to.invert=$i(Pp),eo.invert=function(t,n){var e,r=n,i=25;do{var o=r*r,u=o*o;r-=e=(r*(1.007226+o*(.015085+u*(.028874*o-.044475-.005916*u)))-n)/(1.007226+o*(.045255+u*(.259866*o-.311325-.005916*11*u)))}while(zp(e)>Mp&&--i>0);return[t/(.8707+(o=r*r)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),r]},ro.invert=$i(We),io.invert=$i(function(t){return 2*Pp(t)}),oo.invert=function(t,n){return[-n,2*Pp(Dp(t))-kp]},vo.prototype=fo.prototype={constructor:vo,count:function(){return this.eachAfter(so)},each:function(t){var n,e,r,i,o=this,u=[o];do{for(n=u.reverse(),u=[];o=n.pop();)if(t(o),e=o.children)for(r=0,i=e.length;r=0;--e)i.push(n[e]);return this},sum:function(t){return this.eachAfter(function(n){for(var e=+t(n.data)||0,r=n.children,i=r&&r.length;--i>=0;)e+=r[i].value;n.value=e})},sort:function(t){return this.eachBefore(function(n){n.children&&n.children.sort(t)})},path:function(t){for(var n=this,e=function(t,n){if(t===n)return t;var e=t.ancestors(),r=n.ancestors(),i=null;for(t=e.pop(),n=r.pop();t===n;)i=t,t=e.pop(),n=r.pop();return i}(n,t),r=[n];n!==e;)n=n.parent,r.push(n);for(var i=r.length;t!==e;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,n=[t];t=t.parent;)n.push(t);return n},descendants:function(){var t=[];return this.each(function(n){t.push(n)}),t},leaves:function(){var t=[];return this.eachBefore(function(n){n.children||t.push(n)}),t},links:function(){var t=this,n=[];return t.each(function(e){e!==t&&n.push({source:e.parent,target:e})}),n},copy:function(){return fo(this).eachBefore(ho)}};var Wd=Array.prototype.slice,Zd="$",Gd={depth:-1},Qd={};Ho.prototype=Object.create(vo.prototype);var Jd=(1+Math.sqrt(5))/2,Kd=function t(n){function e(t,e,r,i,o){Xo(n,t,e,r,i,o)}return e.ratio=function(n){return t((n=+n)>1?n:1)},e}(Jd),tv=function t(n){function e(t,e,r,i,o){if((u=t._squarify)&&u.ratio===n)for(var u,a,c,s,f,l=-1,h=u.length,p=t.value;++l1?n:1)},e}(Jd),nv=[].slice,ev={};Zo.prototype=Ko.prototype={constructor:Zo,defer:function(t){if("function"!=typeof t)throw new Error("invalid callback");if(this._call)throw new Error("defer after await");if(null!=this._error)return this;var n=nv.call(arguments,1);return n.push(t),++this._waiting,this._tasks.push(n),Go(this),this},abort:function(){return null==this._error&&Qo(this,new Error("abort")),this},await:function(t){if("function"!=typeof t)throw new Error("invalid callback");if(this._call)throw new Error("multiple await");return this._call=function(n,e){t.apply(null,[n].concat(e))},Jo(this),this},awaitAll:function(t){if("function"!=typeof t)throw new Error("invalid callback");if(this._call)throw new Error("multiple await");return this._call=t,Jo(this),this}};var rv=function t(n){function e(t,e){return t=null==t?0:+t,e=null==e?1:+e,1===arguments.length?(e=t,t=0):e-=t,function(){return n()*e+t}}return e.source=t,e}(tu),iv=function t(n){function e(t,e){var r,i;return t=null==t?0:+t,e=null==e?1:+e,function(){var o;if(null!=r)o=r,r=null;else do{r=2*n()-1,o=2*n()-1,i=r*r+o*o}while(!i||i>1);return t+e*o*Math.sqrt(-2*Math.log(i)/i)}}return e.source=t,e}(tu),ov=function t(n){function e(){var t=iv.source(n).apply(this,arguments);return function(){return Math.exp(t())}}return e.source=t,e}(tu),uv=function t(n){function e(t){return function(){for(var e=0,r=0;r0?t>1?Cu(function(n){n.setTime(Math.floor(n/t)*t)},function(n,e){n.setTime(+n+e*t)},function(n,e){return(e-n)/t}):wv:null};var Mv=wv.range,Tv=6e4,Nv=6048e5,kv=Cu(function(t){t.setTime(1e3*Math.floor(t/1e3))},function(t,n){t.setTime(+t+1e3*n)},function(t,n){return(n-t)/1e3},function(t){return t.getUTCSeconds()}),Sv=kv.range,Ev=Cu(function(t){t.setTime(Math.floor(t/Tv)*Tv)},function(t,n){t.setTime(+t+n*Tv)},function(t,n){return(n-t)/Tv},function(t){return t.getMinutes()}),Av=Ev.range,Cv=Cu(function(t){var n=t.getTimezoneOffset()*Tv%36e5;n<0&&(n+=36e5),t.setTime(36e5*Math.floor((+t-n)/36e5)+n)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getHours()}),zv=Cv.range,Pv=Cu(function(t){t.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Tv)/864e5},function(t){return t.getDate()-1}),Rv=Pv.range,Lv=zu(0),qv=zu(1),Dv=zu(2),Uv=zu(3),Ov=zu(4),Fv=zu(5),Iv=zu(6),Yv=Lv.range,Bv=qv.range,Hv=Dv.range,jv=Uv.range,Xv=Ov.range,Vv=Fv.range,$v=Iv.range,Wv=Cu(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,n){t.setMonth(t.getMonth()+n)},function(t,n){return n.getMonth()-t.getMonth()+12*(n.getFullYear()-t.getFullYear())},function(t){return t.getMonth()}),Zv=Wv.range,Gv=Cu(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n)},function(t,n){return n.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});Gv.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Cu(function(n){n.setFullYear(Math.floor(n.getFullYear()/t)*t),n.setMonth(0,1),n.setHours(0,0,0,0)},function(n,e){n.setFullYear(n.getFullYear()+e*t)}):null};var Qv=Gv.range,Jv=Cu(function(t){t.setUTCSeconds(0,0)},function(t,n){t.setTime(+t+n*Tv)},function(t,n){return(n-t)/Tv},function(t){return t.getUTCMinutes()}),Kv=Jv.range,tg=Cu(function(t){t.setUTCMinutes(0,0,0)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getUTCHours()}),ng=tg.range,eg=Cu(function(t){t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+n)},function(t,n){return(n-t)/864e5},function(t){return t.getUTCDate()-1}),rg=eg.range,ig=Pu(0),og=Pu(1),ug=Pu(2),ag=Pu(3),cg=Pu(4),sg=Pu(5),fg=Pu(6),lg=ig.range,hg=og.range,pg=ug.range,dg=ag.range,vg=cg.range,gg=sg.range,_g=fg.range,yg=Cu(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCMonth(t.getUTCMonth()+n)},function(t,n){return n.getUTCMonth()-t.getUTCMonth()+12*(n.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),mg=yg.range,xg=Cu(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n)},function(t,n){return n.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});xg.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Cu(function(n){n.setUTCFullYear(Math.floor(n.getUTCFullYear()/t)*t),n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)},function(n,e){n.setUTCFullYear(n.getUTCFullYear()+e*t)}):null};var bg,wg=xg.range,Mg={"-":"",_:" ",0:"0"},Tg=/^\s*\d+/,Ng=/^%/,kg=/[\\^$*+?|[\]().{}]/g;Ha({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var Sg="%Y-%m-%dT%H:%M:%S.%LZ",Eg=Date.prototype.toISOString?function(t){return t.toISOString()}:t.utcFormat(Sg),Ag=+new Date("2000-01-01T00:00:00.000Z")?function(t){var n=new Date(t);return isNaN(n)?null:n}:t.utcParse(Sg),Cg=1e3,zg=60*Cg,Pg=60*zg,Rg=24*Pg,Lg=7*Rg,qg=30*Rg,Dg=365*Rg,Ug=$a("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),Og=$a("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"),Fg=$a("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"),Ig=$a("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"),Yg=al($t(300,.5,0),$t(-240,.5,1)),Bg=al($t(-100,.75,.35),$t(80,1.5,.8)),Hg=al($t(260,.75,.35),$t(80,1.5,.8)),jg=$t(),Xg=Wa($a("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Vg=Wa($a("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),$g=Wa($a("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),Wg=Wa($a("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),Zg=Math.abs,Gg=Math.atan2,Qg=Math.cos,Jg=Math.max,Kg=Math.min,t_=Math.sin,n_=Math.sqrt,e_=1e-12,r_=Math.PI,i_=r_/2,o_=2*r_;ic.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._context.lineTo(t,n)}}};var u_=pc(oc);hc.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,n){this._curve.point(n*Math.sin(t),n*-Math.cos(t))}};var a_=Array.prototype.slice,c_={draw:function(t,n){var e=Math.sqrt(n/r_);t.moveTo(e,0),t.arc(0,0,e,0,o_)}},s_={draw:function(t,n){var e=Math.sqrt(n/5)/2;t.moveTo(-3*e,-e),t.lineTo(-e,-e),t.lineTo(-e,-3*e),t.lineTo(e,-3*e),t.lineTo(e,-e),t.lineTo(3*e,-e),t.lineTo(3*e,e),t.lineTo(e,e),t.lineTo(e,3*e),t.lineTo(-e,3*e),t.lineTo(-e,e),t.lineTo(-3*e,e),t.closePath()}},f_=Math.sqrt(1/3),l_=2*f_,h_={draw:function(t,n){var e=Math.sqrt(n/l_),r=e*f_;t.moveTo(0,-e),t.lineTo(r,0),t.lineTo(0,e),t.lineTo(-r,0),t.closePath()}},p_=Math.sin(r_/10)/Math.sin(7*r_/10),d_=Math.sin(o_/10)*p_,v_=-Math.cos(o_/10)*p_,g_={draw:function(t,n){var e=Math.sqrt(.8908130915292852*n),r=d_*e,i=v_*e;t.moveTo(0,-e),t.lineTo(r,i);for(var o=1;o<5;++o){var u=o_*o/5,a=Math.cos(u),c=Math.sin(u);t.lineTo(c*e,-a*e),t.lineTo(a*r-c*i,c*r+a*i)}t.closePath()}},__={draw:function(t,n){var e=Math.sqrt(n),r=-e/2;t.rect(r,r,e,e)}},y_=Math.sqrt(3),m_={draw:function(t,n){var e=-Math.sqrt(n/(3*y_));t.moveTo(0,2*e),t.lineTo(-y_*e,-e),t.lineTo(y_*e,-e),t.closePath()}},x_=Math.sqrt(3)/2,b_=1/Math.sqrt(12),w_=3*(b_/2+1),M_={draw:function(t,n){var e=Math.sqrt(n/w_),r=e/2,i=e*b_,o=r,u=e*b_+e,a=-o,c=u;t.moveTo(r,i),t.lineTo(o,u),t.lineTo(a,c),t.lineTo(-.5*r-x_*i,x_*r+-.5*i),t.lineTo(-.5*o-x_*u,x_*o+-.5*u),t.lineTo(-.5*a-x_*c,x_*a+-.5*c),t.lineTo(-.5*r+x_*i,-.5*i-x_*r),t.lineTo(-.5*o+x_*u,-.5*u-x_*o),t.lineTo(-.5*a+x_*c,-.5*c-x_*a),t.closePath()}},T_=[c_,s_,h_,__,g_,m_,M_];kc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Nc(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Nc(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},Sc.prototype={areaStart:Tc,areaEnd:Tc,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x2=t,this._y2=n;break;case 1:this._point=2,this._x3=t,this._y3=n;break;case 2:this._point=3,this._x4=t,this._y4=n,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+n)/6);break;default:Nc(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},Ec.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var e=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+n)/6;this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break;case 3:this._point=4;default:Nc(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},Ac.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,n=this._y,e=t.length-1;if(e>0)for(var r,i=t[0],o=n[0],u=t[e]-i,a=n[e]-o,c=-1;++c<=e;)r=c/e,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*u),this._beta*n[c]+(1-this._beta)*(o+r*a));this._x=this._y=null,this._basis.lineEnd()},point:function(t,n){this._x.push(+t),this._y.push(+n)}};var N_=function t(n){function e(t){return 1===n?new kc(t):new Ac(t,n)}return e.beta=function(n){return t(+n)},e}(.85);zc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Cc(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2,this._x1=t,this._y1=n;break;case 2:this._point=3;default:Cc(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var k_=function t(n){function e(t){return new zc(t,n)}return e.tension=function(n){return t(+n)},e}(0);Pc.prototype={areaStart:Tc,areaEnd:Tc,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Cc(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var S_=function t(n){function e(t){return new Pc(t,n)}return e.tension=function(n){return t(+n)},e}(0);Rc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Cc(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var E_=function t(n){function e(t){return new Rc(t,n)}return e.tension=function(n){return t(+n)},e}(0);qc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3;default:Lc(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var A_=function t(n){function e(t){return n?new qc(t,n):new zc(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Dc.prototype={areaStart:Tc,areaEnd:Tc,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Lc(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var C_=function t(n){function e(t){return n?new Dc(t,n):new Pc(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Uc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Lc(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var z_=function t(n){function e(t){return n?new Uc(t,n):new Rc(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Oc.prototype={areaStart:Tc,areaEnd:Tc,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,n){t=+t,n=+n,this._point?this._context.lineTo(t,n):(this._point=1,this._context.moveTo(t,n))}},Hc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Bc(this,this._t0,Yc(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){var e=NaN;if(t=+t,n=+n,t!==this._x1||n!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,Bc(this,Yc(this,e=Ic(this,t,n)),e);break;default:Bc(this,this._t0,e=Ic(this,t,n))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n,this._t0=e}}},(jc.prototype=Object.create(Hc.prototype)).point=function(t,n){Hc.prototype.point.call(this,n,t)},Xc.prototype={moveTo:function(t,n){this._context.moveTo(n,t)},closePath:function(){this._context.closePath()},lineTo:function(t,n){this._context.lineTo(n,t)},bezierCurveTo:function(t,n,e,r,i,o){this._context.bezierCurveTo(n,t,r,e,o,i)}},Vc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,n=this._y,e=t.length;if(e)if(this._line?this._context.lineTo(t[0],n[0]):this._context.moveTo(t[0],n[0]),2===e)this._context.lineTo(t[1],n[1]);else for(var r=$c(t),i=$c(n),o=0,u=1;u=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,n),this._context.lineTo(t,n);else{var e=this._x*(1-this._t)+t*this._t;this._context.lineTo(e,this._y),this._context.lineTo(e,n)}}this._x=t,this._y=n}},rs.prototype={constructor:rs,insert:function(t,n){var e,r,i;if(t){if(n.P=t,n.N=t.N,t.N&&(t.N.P=n),t.N=n,t.R){for(t=t.R;t.L;)t=t.L;t.L=n}else t.R=n;e=t}else this._?(t=as(this._),n.P=null,n.N=t,t.P=t.L=n,e=t):(n.P=n.N=null,this._=n,e=null);for(n.L=n.R=null,n.U=e,n.C=!0,t=n;e&&e.C;)e===(r=e.U).L?(i=r.R)&&i.C?(e.C=i.C=!1,r.C=!0,t=r):(t===e.R&&(os(this,e),e=(t=e).U),e.C=!1,r.C=!0,us(this,r)):(i=r.L)&&i.C?(e.C=i.C=!1,r.C=!0,t=r):(t===e.L&&(us(this,e),e=(t=e).U),e.C=!1,r.C=!0,os(this,r)),e=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var n,e,r,i=t.U,o=t.L,u=t.R;if(e=o?u?as(u):o:u,i?i.L===t?i.L=e:i.R=e:this._=e,o&&u?(r=e.C,e.C=t.C,e.L=o,o.U=e,e!==u?(i=e.U,e.U=t.U,t=e.R,i.L=t,e.R=u,u.U=e):(e.U=i,i=e,t=e.R)):(r=t.C,t=e),t&&(t.U=i),!r)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===i.L){if((n=i.R).C&&(n.C=!1,i.C=!0,os(this,i),n=i.R),n.L&&n.L.C||n.R&&n.R.C){n.R&&n.R.C||(n.L.C=!1,n.C=!0,us(this,n),n=i.R),n.C=i.C,i.C=n.R.C=!1,os(this,i),t=this._;break}}else if((n=i.L).C&&(n.C=!1,i.C=!0,us(this,i),n=i.L),n.L&&n.L.C||n.R&&n.R.C){n.L&&n.L.C||(n.R.C=!1,n.C=!0,os(this,n),n=i.L),n.C=i.C,i.C=n.L.C=!1,us(this,i),t=this._;break}n.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}};var P_,R_,L_,q_,D_,U_=[],O_=[],F_=1e-6,I_=1e-12;Ns.prototype={constructor:Ns,polygons:function(){var t=this.edges;return this.cells.map(function(n){var e=n.halfedges.map(function(e){return ds(n,t[e])});return e.data=n.site.data,e})},triangles:function(){var t=[],n=this.edges;return this.cells.forEach(function(e,r){if(o=(i=e.halfedges).length)for(var i,o,u,a=e.site,c=-1,s=n[i[o-1]],f=s.left===a?s.right:s.left;++c=a)return null;var c=t-i.site[0],s=n-i.site[1],f=c*c+s*s;do{i=o.cells[r=u],u=null,i.halfedges.forEach(function(e){var r=o.edges[e],a=r.left;if(a!==i.site&&a||(a=r.right)){var c=t-a[0],s=n-a[1],l=c*c+s*s;lt?1:n>=t?0:NaN},t.deviation=u,t.extent=a,t.histogram=function(){function t(t){var i,o,u=t.length,a=new Array(u);for(i=0;il;)h.pop(),--d;var v,g=new Array(d+1);for(i=0;i<=d;++i)(v=g[i]=[]).x0=i>0?h[i-1]:s,v.x1=i=e)for(r=e;++or&&(r=e)}else for(;++o=e)for(r=e;++or&&(r=e);return r},t.mean=function(t,n){var e,r=t.length,o=r,u=-1,a=0;if(null==n)for(;++u=o.length)return null!=e&&n.sort(e),null!=r?r(n):n;for(var c,s,f,l=-1,h=n.length,p=o[i++],d=se(),v=u();++lo.length)return t;var i,a=u[e-1];return null!=r&&e>=o.length?i=t.entries():(i=[],t.each(function(t,r){i.push({key:r,values:n(t,e)})})),null!=a?i.sort(function(t,n){return a(t.key,n.key)}):i}var e,r,i,o=[],u=[];return i={object:function(n){return t(n,0,fe,le)},map:function(n){return t(n,0,he,pe)},entries:function(e){return n(t(e,0,he,pe),0)},key:function(t){return o.push(t),i},sortKeys:function(t){return u[o.length-1]=t,i},sortValues:function(t){return e=t,i},rollup:function(t){return r=t,i}}},t.set=ve,t.map=se,t.keys=function(t){var n=[];for(var e in t)n.push(e);return n},t.values=function(t){var n=[];for(var e in t)n.push(t[e]);return n},t.entries=function(t){var n=[];for(var e in t)n.push({key:e,value:t[e]});return n},t.color=Et,t.rgb=Pt,t.hsl=qt,t.lab=Ft,t.hcl=Xt,t.cubehelix=$t,t.dispatch=N,t.drag=function(){function n(t){t.on("mousedown.drag",e).filter(g).on("touchstart.drag",o).on("touchmove.drag",u).on("touchend.drag touchcancel.drag",a).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function e(){if(!h&&p.apply(this,arguments)){var n=c("mouse",d.apply(this,arguments),pt,this,arguments);n&&(ct(t.event.view).on("mousemove.drag",r,!0).on("mouseup.drag",i,!0),_t(t.event.view),vt(),l=!1,s=t.event.clientX,f=t.event.clientY,n("start"))}}function r(){if(gt(),!l){var n=t.event.clientX-s,e=t.event.clientY-f;l=n*n+e*e>x}_.mouse("drag")}function i(){ct(t.event.view).on("mousemove.drag mouseup.drag",null),yt(t.event.view,l),gt(),_.mouse("end")}function o(){if(p.apply(this,arguments)){var n,e,r=t.event.changedTouches,i=d.apply(this,arguments),o=r.length;for(n=0;nc+p||is+p||or.index){var d=c-a.x-a.vx,v=s-a.y-a.vy,g=d*d+v*v;gt.r&&(t.r=t[n].r)}function r(){if(i){var n,e,r=i.length;for(o=new Array(r),n=0;n=f)){(t.data!==o||t.next)&&(0===i&&(i=me(),p+=i*i),0===c&&(c=me(),p+=c*c),p1?(null==n?l.remove(t):l.set(t,i(n)),o):l.get(t)},find:function(n,e,r){var i,o,u,a,c,s=0,f=t.length;for(null==r?r=1/0:r*=r,s=0;s1?(p.on(t,n),o):p.on(t)}}},t.forceX=function(t){function n(t){for(var n,e=0,u=r.length;emr(r[0],r[1])&&(r[1]=i[1]),mr(i[0],r[1])>mr(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(u=-1/0,n=0,r=o[e=o.length-1];n<=e;r=i,++n)i=o[n],(a=mr(r[1],i[0]))>u&&(u=a,Gh=i[0],Jh=r[1])}return ip=op=null,Gh===1/0||Qh===1/0?[[NaN,NaN],[NaN,NaN]]:[[Gh,Qh],[Jh,Kh]]},t.geoCentroid=function(t){up=ap=cp=sp=fp=lp=hp=pp=dp=vp=gp=0,tr(t,Gp);var n=dp,e=vp,r=gp,i=n*n+e*e+r*r;return i=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?f:c).invert(t)},t.stream=function(t){return e&&r===t?e:e=function(t){var n=t.length;return{point:function(e,r){for(var i=-1;++i2?t[2]+90:90]):(t=e(),[t[0],t[1],t[2]-90])},e([0,0,90]).scale(159.155)},t.geoTransverseMercatorRaw=oo,t.geoRotation=Fr,t.geoStream=tr,t.geoTransform=function(t){return{stream:Pi(t)}},t.cluster=function(){function t(t){var o,u=0;t.eachAfter(function(t){var e=t.children;e?(t.x=function(t){return t.reduce(ao,0)/t.length}(e),t.y=function(t){return 1+t.reduce(co,0)}(e)):(t.x=o?u+=n(t,o):0,t.y=0,o=t)});var a=function(t){for(var n;n=t.children;)t=n[0];return t}(t),c=function(t){for(var n;n=t.children;)t=n[n.length-1];return t}(t),s=a.x-n(a,c)/2,f=c.x+n(c,a)/2;return t.eachAfter(i?function(n){n.x=(n.x-t.x)*e,n.y=(t.y-n.y)*r}:function(n){n.x=(n.x-s)/(f-s)*e,n.y=(1-(t.y?n.y/t.y:1))*r})}var n=uo,e=1,r=1,i=!1;return t.separation=function(e){return arguments.length?(n=e,t):n},t.size=function(n){return arguments.length?(i=!1,e=+n[0],r=+n[1],t):i?null:[e,r]},t.nodeSize=function(n){return arguments.length?(i=!0,e=+n[0],r=+n[1],t):i?[e,r]:null},t},t.hierarchy=fo,t.pack=function(){function t(t){return t.x=e/2,t.y=r/2,n?t.eachBefore(zo(n)).eachAfter(Po(i,.5)).eachBefore(Ro(1)):t.eachBefore(zo(Co)).eachAfter(Po(Eo,1)).eachAfter(Po(i,t.r/Math.min(e,r))).eachBefore(Ro(Math.min(e,r)/(2*t.r))),t}var n=null,e=1,r=1,i=Eo;return t.radius=function(e){return arguments.length?(n=function(t){return null==t?null:So(t)}(e),t):n},t.size=function(n){return arguments.length?(e=+n[0],r=+n[1],t):[e,r]},t.padding=function(n){return arguments.length?(i="function"==typeof n?n:Ao(+n),t):i},t},t.packSiblings=function(t){return ko(t),t},t.packEnclose=go,t.partition=function(){function t(t){var o=t.height+1;return t.x0=t.y0=r,t.x1=n,t.y1=e/o,t.eachBefore(function(t,n){return function(e){e.children&&qo(e,e.x0,t*(e.depth+1)/n,e.x1,t*(e.depth+2)/n);var i=e.x0,o=e.y0,u=e.x1-r,a=e.y1-r;u0)throw new Error("cycle");return o}var n=Do,e=Uo;return t.id=function(e){return arguments.length?(n=So(e),t):n},t.parentId=function(n){return arguments.length?(e=So(n),t):e},t},t.tree=function(){function t(t){var c=function(t){for(var n,e,r,i,o,u=new Ho(t,0),a=[u];n=a.pop();)if(r=n._.children)for(n.children=new Array(o=r.length),i=o-1;i>=0;--i)a.push(e=n.children[i]=new Ho(r[i],i)),e.parent=n;return(u.parent=new Ho(null,0)).children=[u],u}(t);if(c.eachAfter(n),c.parent.m=-c.z,c.eachBefore(e),a)t.eachBefore(r);else{var s=t,f=t,l=t;t.eachBefore(function(t){t.xf.x&&(f=t),t.depth>l.depth&&(l=t)});var h=s===f?1:i(s,f)/2,p=h-s.x,d=o/(f.x+h+p),v=u/(l.depth||1);t.eachBefore(function(t){t.x=(t.x+p)*d,t.y=t.depth*v})}return t}function n(t){var n=t.children,e=t.parent.children,r=t.i?e[t.i-1]:null;if(n){(function(t){for(var n,e=0,r=0,i=t.children,o=i.length;--o>=0;)(n=i[o]).z+=e,n.m+=e,e+=n.s+(r+=n.c)})(t);var o=(n[0].z+n[n.length-1].z)/2;r?(t.z=r.z+i(t._,r._),t.m=t.z-o):t.z=o}else r&&(t.z=r.z+i(t._,r._));t.parent.A=function(t,n,e){if(n){for(var r,o=t,u=t,a=n,c=o.parent.children[0],s=o.m,f=u.m,l=a.m,h=c.m;a=Io(a),o=Fo(o),a&&o;)c=Fo(c),(u=Io(u)).a=t,(r=a.z+l-o.z-s+i(a._,o._))>0&&(Yo(Bo(a,t,e),t,r),s+=r,f+=r),l+=a.m,s+=o.m,h+=c.m,f+=u.m;a&&!Io(u)&&(u.t=a,u.m+=l-f),o&&!Fo(c)&&(c.t=o,c.m+=s-h,e=t)}return e}(t,r,t.parent.A||e[0])}function e(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function r(t){t.x*=o,t.y=t.depth*u}var i=Oo,o=1,u=1,a=null;return t.separation=function(n){return arguments.length?(i=n,t):i},t.size=function(n){return arguments.length?(a=!1,o=+n[0],u=+n[1],t):a?null:[o,u]},t.nodeSize=function(n){return arguments.length?(a=!0,o=+n[0],u=+n[1],t):a?[o,u]:null},t},t.treemap=function(){function t(t){return t.x0=t.y0=0,t.x1=i,t.y1=o,t.eachBefore(n),u=[0],r&&t.eachBefore(Lo),t}function n(t){var n=u[t.depth],r=t.x0+n,i=t.y0+n,o=t.x1-n,h=t.y1-n;o=n-1){var s=c[t];return s.x0=r,s.y0=i,s.x1=u,void(s.y1=a)}for(var l=f[t],h=e/2+l,p=t+1,d=n-1;p>>1;f[v]a-i){var y=(r*_+u*g)/e;o(t,p,g,r,i,y,a),o(p,n,_,y,i,u,a)}else{var m=(i*_+a*g)/e;o(t,p,g,r,i,u,m),o(p,n,_,r,m,u,a)}}var u,a,c=t.children,s=c.length,f=new Array(s+1);for(f[0]=a=u=0;u=0;--n)s.push(t[r[o[n]][2]]);for(n=+a;na!=s>a&&u<(c-e)*(a-r)/(s-r)+e&&(f=!f),c=e,s=r;return f},t.polygonLength=function(t){for(var n,e,r=-1,i=t.length,o=t[i-1],u=o[0],a=o[1],c=0;++r1)&&(t-=Math.floor(t));var n=Math.abs(t-.5);return jg.h=360*t-100,jg.s=1.5-1.5*n,jg.l=.8-.9*n,jg+""},t.interpolateWarm=Bg,t.interpolateCool=Hg,t.interpolateViridis=Xg,t.interpolateMagma=Vg,t.interpolateInferno=$g,t.interpolatePlasma=Wg,t.scaleSequential=Za,t.create=function(t){return ct(A(t).call(document.documentElement))},t.creator=A,t.local=st,t.matcher=of,t.mouse=pt,t.namespace=E,t.namespaces=tf,t.clientPoint=ht,t.select=ct,t.selectAll=function(t){return"string"==typeof t?new ut([document.querySelectorAll(t)],[document.documentElement]):new ut([null==t?[]:t],cf)},t.selection=at,t.selector=z,t.selectorAll=R,t.style=I,t.touch=dt,t.touches=function(t,n){null==n&&(n=lt().touches);for(var e=0,r=n?n.length:0,i=new Array(r);eh;if(c||(c=t=ee()),le_)if(d>o_-e_)c.moveTo(l*Qg(h),l*t_(h)),c.arc(0,0,l,h,p,!v),f>e_&&(c.moveTo(f*Qg(p),f*t_(p)),c.arc(0,0,f,p,h,v));else{var g,_,y=h,m=p,x=h,b=p,w=d,M=d,T=a.apply(this,arguments)/2,N=T>e_&&(i?+i.apply(this,arguments):n_(f*f+l*l)),k=Kg(Zg(l-f)/2,+r.apply(this,arguments)),S=k,E=k;if(N>e_){var A=Qa(N/f*t_(T)),C=Qa(N/l*t_(T));(w-=2*A)>e_?(A*=v?1:-1,x+=A,b-=A):(w=0,x=b=(h+p)/2),(M-=2*C)>e_?(C*=v?1:-1,y+=C,m-=C):(M=0,y=m=(h+p)/2)}var z=l*Qg(y),P=l*t_(y),R=f*Qg(b),L=f*t_(b);if(k>e_){var q=l*Qg(m),D=l*t_(m),U=f*Qg(x),O=f*t_(x);if(de_?function(t,n,e,r,i,o,u,a){var c=e-t,s=r-n,f=u-i,l=a-o,h=(f*(n-o)-l*(t-i))/(l*c-f*s);return[t+h*c,n+h*s]}(z,P,U,O,q,D,R,L):[R,L],I=z-F[0],Y=P-F[1],B=q-F[0],H=D-F[1],j=1/t_(function(t){return t>1?0:t<-1?r_:Math.acos(t)}((I*B+Y*H)/(n_(I*I+Y*Y)*n_(B*B+H*H)))/2),X=n_(F[0]*F[0]+F[1]*F[1]);S=Kg(k,(f-X)/(j-1)),E=Kg(k,(l-X)/(j+1))}}M>e_?E>e_?(g=rc(U,O,z,P,l,E,v),_=rc(q,D,R,L,l,E,v),c.moveTo(g.cx+g.x01,g.cy+g.y01),Ee_&&w>e_?S>e_?(g=rc(R,L,q,D,f,-S,v),_=rc(z,P,U,O,f,-S,v),c.lineTo(g.cx+g.x01,g.cy+g.y01),S0&&(p+=l);for(null!=e?d.sort(function(t,n){return e(v[t],v[n])}):null!=r&&d.sort(function(n,e){return r(t[n],t[e])}),a=0,s=p?(_-h*m)/p:0;a0?l*s:0)+m,v[c]={data:t[c],index:a,value:l,startAngle:g,endAngle:f,padAngle:y};return v}var n=lc,e=fc,r=null,i=Ga(0),o=Ga(o_),u=Ga(0);return t.value=function(e){return arguments.length?(n="function"==typeof e?e:Ga(+e),t):n},t.sortValues=function(n){return arguments.length?(e=n,r=null,t):e},t.sort=function(n){return arguments.length?(r=n,e=null,t):r},t.startAngle=function(n){return arguments.length?(i="function"==typeof n?n:Ga(+n),t):i},t.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:Ga(+n),t):o},t.padAngle=function(n){return arguments.length?(u="function"==typeof n?n:Ga(+n),t):u},t},t.areaRadial=gc,t.radialArea=gc,t.lineRadial=vc,t.radialLine=vc,t.pointRadial=_c,t.linkHorizontal=function(){return xc(bc)},t.linkVertical=function(){return xc(wc)},t.linkRadial=function(){var t=xc(Mc);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t},t.symbol=function(){function t(){var t;if(r||(r=t=ee()),n.apply(this,arguments).draw(r,+e.apply(this,arguments)),t)return r=null,t+""||null}var n=Ga(c_),e=Ga(64),r=null;return t.type=function(e){return arguments.length?(n="function"==typeof e?e:Ga(e),t):n},t.size=function(n){return arguments.length?(e="function"==typeof n?n:Ga(+n),t):e},t.context=function(n){return arguments.length?(r=null==n?null:n,t):r},t},t.symbols=T_,t.symbolCircle=c_,t.symbolCross=s_,t.symbolDiamond=h_,t.symbolSquare=__,t.symbolStar=g_,t.symbolTriangle=m_,t.symbolWye=M_,t.curveBasisClosed=function(t){return new Sc(t)},t.curveBasisOpen=function(t){return new Ec(t)},t.curveBasis=function(t){return new kc(t)},t.curveBundle=N_,t.curveCardinalClosed=S_,t.curveCardinalOpen=E_,t.curveCardinal=k_,t.curveCatmullRomClosed=C_,t.curveCatmullRomOpen=z_,t.curveCatmullRom=A_,t.curveLinearClosed=function(t){return new Oc(t)},t.curveLinear=oc,t.curveMonotoneX=function(t){return new Hc(t)},t.curveMonotoneY=function(t){return new jc(t)},t.curveNatural=function(t){return new Vc(t)},t.curveStep=function(t){return new Wc(t,.5)},t.curveStepAfter=function(t){return new Wc(t,1)},t.curveStepBefore=function(t){return new Wc(t,0)},t.stack=function(){function t(t){var o,u,a=n.apply(this,arguments),c=t.length,s=a.length,f=new Array(s);for(o=0;o0){for(var e,r,i,o=0,u=t[0].length;o1)for(var e,r,i,o,u,a,c=0,s=t[n[0]].length;c=0?(r[0]=o,r[1]=o+=i):i<0?(r[1]=u,r[0]=u+=i):r[0]=o},t.stackOffsetNone=Zc,t.stackOffsetSilhouette=function(t,n){if((e=t.length)>0){for(var e,r=0,i=t[n[0]],o=i.length;r0&&(r=(e=t[n[0]]).length)>0){for(var e,r,i,o=0,u=1;uxl&&e.name===n)return new qn([[t]],Jl,n,+r)}return null},t.interrupt=Pn,t.voronoi=function(){function t(t){return new Ns(t.map(function(r,i){var o=[Math.round(n(r,i,t)/F_)*F_,Math.round(e(r,i,t)/F_)*F_];return o.index=i,o.data=r,o}),r)}var n=ns,e=es,r=null;return t.polygons=function(n){return t(n).polygons()},t.links=function(n){return t(n).links()},t.triangles=function(n){return t(n).triangles()},t.x=function(e){return arguments.length?(n="function"==typeof e?e:ts(+e),t):n},t.y=function(n){return arguments.length?(e="function"==typeof n?n:ts(+n),t):e},t.extent=function(n){return arguments.length?(r=null==n?null:[[+n[0][0],+n[0][1]],[+n[1][0],+n[1][1]]],t):r&&[[r[0][0],r[0][1]],[r[1][0],r[1][1]]]},t.size=function(n){return arguments.length?(r=null==n?null:[[0,0],[+n[0],+n[1]]],t):r&&[r[1][0]-r[0][0],r[1][1]-r[0][1]]},t},t.zoom=function(){function n(t){t.property("__zoom",Rs).on("wheel.zoom",c).on("mousedown.zoom",s).on("dblclick.zoom",f).filter(x).on("touchstart.zoom",l).on("touchmove.zoom",h).on("touchend.zoom touchcancel.zoom",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function e(t,n){return(n=Math.max(b[0],Math.min(b[1],n)))===t.k?t:new Ss(n,t.x,t.y)}function r(t,n,e){var r=n[0]-e[0]*t.k,i=n[1]-e[1]*t.k;return r===t.x&&i===t.y?t:new Ss(t.k,r,i)}function i(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function o(t,n,e){t.on("start.zoom",function(){u(this,arguments).start()}).on("interrupt.zoom end.zoom",function(){u(this,arguments).end()}).tween("zoom",function(){var t=arguments,r=u(this,t),o=_.apply(this,t),a=e||i(o),c=Math.max(o[1][0]-o[0][0],o[1][1]-o[0][1]),s=this.__zoom,f="function"==typeof n?n.apply(this,t):n,l=T(s.invert(a).concat(c/s.k),f.invert(a).concat(c/f.k));return function(t){if(1===t)t=f;else{var n=l(t),e=c/n[2];t=new Ss(e,a[0]-n[0]*e,a[1]-n[1]*e)}r.zoom(null,t)}})}function u(t,n){for(var e,r=0,i=k.length;rC}n.zoom("mouse",y(r(n.that.__zoom,n.mouse[0]=pt(n.that),n.mouse[1]),n.extent,w))},!0).on("mouseup.zoom",function(){e.on("mousemove.zoom mouseup.zoom",null),yt(t.event.view,n.moved),Cs(),n.end()},!0),i=pt(this),o=t.event.clientX,a=t.event.clientY;_t(t.event.view),As(),n.mouse=[i,this.__zoom.invert(i)],Pn(this),n.start()}}function f(){if(g.apply(this,arguments)){var i=this.__zoom,u=pt(this),a=i.invert(u),c=i.k*(t.event.shiftKey?.5:2),s=y(r(e(i,c),u,a),_.apply(this,arguments),w);Cs(),M>0?ct(this).transition().duration(M).call(o,s,u):ct(this).call(n.transform,s)}}function l(){if(g.apply(this,arguments)){var n,e,r,i,o=u(this,arguments),a=t.event.changedTouches,c=a.length;for(As(),e=0;et._status=!0);let f=e.select(t),m=+f.attr("width"),g=+f.attr("height"),h=m-(i.left||0)-(i.right||0),b=f.append("g").attr("class","g3-legend").attr("transform","translate("+i.left+","+(g+i.top)+")"),y=r?n(r,p):0,x=Math.min(y+6,1/3*h),v=h-x,w={x:0,y:8},k={x:0,y:8};r&&b.append("g").attr("class","g3-legend-title").append("text").attr("x",x-6).attr("y",8).attr("text-anchor","end").attr("fill",d).style("font",p).attr("dy","0.35em").text(r);b.append("g").attr("class","g3-legend-item-container").attr("transform","translate("+x+", 0)").selectAll(".g3-legend-item").data(a).enter().append("g").attr("class","g3 g3-legend-item").style("cursor",o?"pointer":"default").each(function(t){let r=e.select(this),a=t.value.label||t.key;var i;i=n(a,c),(i+=23)>v-k.x?(w.x=0,w.y=k.y+16,k.x=i,k.y=w.y):(w.x=k.x,k.x+=i);let s=w.x+12+3,p=w.y;r.attr("state","enabled").attr("defaultColor",t.value.fill),r.append("circle").attr("cx",s).attr("cy",p).attr("r",3).attr("fill",t.value.fill||"transparent").attr("stroke-width",1).attr("stroke","grey"),s+=8,r.append("text").attr("x",s).attr("y",p).attr("text-anchor","start").attr("fill",u).style("font",c).attr("dy","0.35em").text(a),r.on("click",function(){var e,n,a,i;o&&(n=(e=r).attr("defaultColor"),a=e.select("circle"),i=e.select("text"),"enabled"==e.attr("state")?(e.attr("state","disabled"),a.attr("fill","transparent").attr("stroke",n),i.style("opacity",.5)):(e.attr("state","enabled"),a.attr("fill",n).attr("stroke","grey"),i.style("opacity",1)),l.call("legendClick",this,t.key,"enabled"==r.attr("state")),t._status="enabled"==r.attr("state"))})}),s=i.top+w.y+8+i.bottom,f.attr("height",s+g)}}}function u(){var t=function(){return"n"},n=function(){return[0,0]},r=function(){return" "},a=document.body,o=d(),i=null,l=null,s=null;function c(t){var e;e=t.node(),(i=e?"svg"===e.tagName.toLowerCase()?e:e.ownerSVGElement:null)&&(l=i.createSVGPoint(),a.appendChild(o))}c.show=function(){var e=Array.prototype.slice.call(arguments);e[e.length-1]instanceof SVGElement&&(s=e.pop());var o,i=r.apply(this,e),l=n.apply(this,e),d=t.apply(this,e),m=f(),g=p.length,h=document.documentElement.scrollTop||a.scrollTop,b=document.documentElement.scrollLeft||a.scrollLeft;for(m.html(i).style("opacity",1).style("pointer-events","all");g--;)m.classed(p[g],!1);return o=u.get(d).apply(this),m.classed(d,!0).style("top",o.top+l[0]+h+"px").style("left",o.left+l[1]+b+"px"),c},c.hide=function(){return f().style("opacity",0).style("pointer-events","none"),c},c.attr=function(t,n){if(arguments.length<2&&"string"==typeof t)return f().attr(t);var r=Array.prototype.slice.call(arguments);return e.selection.prototype.attr.apply(f(),r),c},c.style=function(t,n){if(arguments.length<2&&"string"==typeof t)return f().style(t);var r=Array.prototype.slice.call(arguments);return e.selection.prototype.style.apply(f(),r),c},c.direction=function(e){return arguments.length?(t=null==e?e:g(e),c):t},c.offset=function(t){return arguments.length?(n=null==t?t:g(t),c):n},c.html=function(t){return arguments.length?(r=null==t?t:g(t),c):r},c.rootElement=function(t){return arguments.length?(a=null==t?t:g(t),c):a},c.destroy=function(){return o&&(f().remove(),o=null),c};var u=e.map({n:function(){var t=m(this);return{top:t.n.y-o.offsetHeight,left:t.n.x-o.offsetWidth/2}},s:function(){var t=m(this);return{top:t.s.y,left:t.s.x-o.offsetWidth/2}},e:function(){var t=m(this);return{top:t.e.y-o.offsetHeight/2,left:t.e.x}},w:function(){var t=m(this);return{top:t.w.y-o.offsetHeight/2,left:t.w.x-o.offsetWidth}},nw:function(){var t=m(this);return{top:t.nw.y-o.offsetHeight,left:t.nw.x-o.offsetWidth}},ne:function(){var t=m(this);return{top:t.ne.y-o.offsetHeight,left:t.ne.x}},sw:function(){var t=m(this);return{top:t.sw.y,left:t.sw.x-o.offsetWidth}},se:function(){var t=m(this);return{top:t.se.y,left:t.se.x}}}),p=u.keys();function d(){var t=e.select(document.createElement("div"));return t.style("position","absolute").style("top",0).style("opacity",0).style("pointer-events","none").style("box-sizing","border-box"),t.node()}function f(){return null==o&&(o=d(),a.appendChild(o)),e.select(o)}function m(t){for(var n=s||e.event.target;null==n.getScreenCTM&&null!=n.parentNode;)n=n.parentNode;var r={},a=n.getScreenCTM(),o=n.getBBox(),i=o.width,c=o.height,u=o.x,p=o.y;return l.x=u,l.y=p,r.nw=l.matrixTransform(a),l.x+=i,r.ne=l.matrixTransform(a),l.y+=c,r.se=l.matrixTransform(a),l.x-=i,r.sw=l.matrixTransform(a),l.y-=c/2,r.w=l.matrixTransform(a),l.x+=i,r.e=l.matrixTransform(a),l.x-=i/2,l.y-=c/2,r.n=l.matrixTransform(a),l.y+=c,r.s=l.matrixTransform(a),r}function g(t){return"function"==typeof t?t:function(){return t}}return c}t.getTextWidth=n,t.getUniqueID=r,t.palettes=a,t.defaultPalette=o,t.getPalette=i,t.listPalettes=function(){return Object.keys(a)},t.scaleOrdinal=l,t.output=function(){function t(t,e){return(t=t||n)+"."+e}function e(t){t.setAttribute("xmlns","http://www.w3.org/2000/svg"),t.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink"),function(t,e){var n=document.createElement("style");n.setAttribute("type","text/css"),n.innerHTML=t;var r=e.hasChildNodes()?e.children[0]:null;e.insertBefore(n,r)}(function(t){var e=[];e.push("#"+t.id);for(let n=0;n=v?Y.popParams.rMax:e<=w?Y.popParams.rMin:(e-w)/(v-w)*(Y.popParams.rMax-Y.popParams.rMin)+Y.popParams.rMin},mt=function(t){let n="";return at?(n+=`
\n \n \n \n \n \n \n \n \n \n \n `,t._currentState.summary.forEach(function(r){r.value.count>0&&(n+=`\n \n \n \n \n \n ")}),n+="\n \n
Position ${t.position}
Class#Change%
${r.key} ${r.value.count} `+gt(r.value.byY)+""+e.format(".1f")(r.value.count/t._currentState.count*100)+"%
"):(n+=`\n \n \n \n \n \n \n \n \n `,t._currentState.summary[0].value.byY.forEach(function(r){n+=`\n \n \n \n "}),n+="\n \n
Position ${t.position}
Change%
${r.key} `+e.format(".1f")(r.value/t._currentState.count*100)+"%
"),n},gt=function(t){var e="";return t.forEach(function(t){e+=`${t.key} (n=${t.value})
`}),e},ht=function(t,e){G.tooltip&&nt.show(t,e)},bt=function(t){G.tooltip&&nt.hide(t)},yt=function(t){let e,n,r,a=-1;return t._currentState.summary.forEach(function(t){t.value.count>0&&t.value.count>a&&(e=t.value.byY[0].key,r=t,n=Y.popColorScheme(t.key),a=t.value.count)}),{class:r,entry:e,count:a,color:n}},xt=function(t,e){if(t._currentState.showLabel){t._currentState.showLabel=!1;let n=e.select("."+Y.popClassName.label);Nt(n.attr("yMaxValue"),-1),n.transition().duration(G.transitionTime).attr("transform","rotate(0)").remove()}else{t._currentState.showLabel=!0;let r=yt(t),a=Math.max(t._currentState.radius*Y.popLabel.fontsizeToRadius,Y.popLabel.minFontSize)+"px",o=Y.popLabel["font-weight"]+" "+a+" "+Y.popLabel["font-family"],i=n(r.entry,o),l=t._currentState.radius+Y.popLabel.padding+i,s=(E[1]-E[0])*(l/W),c=t._currentState.count+s;Nt(c,1),e.append("text").classed(Y.popClassName.label,!0).attr("x",-t._currentState.radius-Y.popLabel.padding).attr("y",0).attr("yMaxValue",c).text(r.entry).style("fill",r.color).style("font",o).attr("dy",".35em").attr("text-anchor","end").transition().duration(G.transitionTime).attr("transform","rotate(90)")}},vt=function(){return e.pie().sort(null)},wt=function(t){let n=e.select(this);t._currentState.showLabel&&(n.select("."+Y.popClassName.label).remove(),t._currentState.showLabel=!1);let r=t._currentState.radius=ft(t);switch(a){case"pie":!function(t,n,r){let a=e.arc().innerRadius(0).outerRadius(r),o=vt().value(function(t){return t.value.count}),i=n.select("."+Y.popClassName.pie).selectAll("path."+Y.popClassName.slice).data(o(t._currentState.summary));i.enter().insert("path"),i.transition().duration(G.transitionTime).attrTween("d",function(t){this._current=this._current||t;let n=e.interpolate(this._current,t);return this._current=n(0),function(t){return a(n(t))}}),i.exit().remove()}(t,n,r);break;default:!function(t,e,n){let r=e.select("."+Y.popClassName.circle),a=yt(t).color||"transparent";r.transition().duration(G.transitionTime).attr("r",n).attr("fill",a)}(t,n,r)}let o=n.select("."+Y.popClassName.text);if(r>=Y.popParams.addNumRCutoff){let e=kt(r,t._currentState.count,Y.popText["font-weight"],Y.popText["font-family"]),n=Y.popText["font-weight"]+" "+e+" "+Y.popText["font-family"];o.transition().duration(G.transitionTime).text(t._currentState.count).style("font",n)}else o.text("")},kt=function(t,e,r,a){let o=1.75*t;for(let t=Math.ceil(o);t>=0;t--)if(n(e,r+" "+t+"px "+a)<=o)return t+"px";return 0},Ct=function(t){let n=e.select(this),r=t._currentState.radius=ft(t);n.append("circle").attr("class",Y.popClassName.circle).attr("cx",0).attr("cy",0).attr("r",r).attr("stroke",Y.popCircle.stroke).attr("stroke-width",Y.popCircle["stroke-width"]).attr("fill","none");let a=e.arc().innerRadius(0).outerRadius(r),o=vt().value(function(t){return t.value.count}),i=n.append("g").attr("class",Y.popClassName.pie);i.selectAll(Y.popClassName.slice).data(o(t._currentState.summary)).enter().append("path").attr("d",a).attr("class",Y.popClassName.slice).attr("fill",function(t){return Y.popColorScheme(t.data.key)}),i.exit().remove();let l=n.append("text").attr("class",Y.popClassName.text).attr("fill",Y.popText.fill).style("font-family",Y.popText["font-family"]).style("font-weight",Y.popText["font-weight"]).attr("text-anchor",Y.popText["text-anchor"]).attr("dy",Y.popText.dy);if(r>=Y.popParams.addNumRCutoff){let e=kt(r,t._currentState.count,Y.popText["font-weight"],Y.popText["font-family"]);l.transition().duration(G.transitionTime).text(t._currentState.count).style("font-size",e)}else l.text("");n.on("mouseover",function(t){ht(t)}).on("mouseout",function(t){bt(t)}).on("click",function(t){xt(t,n)})},St=function(t){let n=e.select(this),r=t._currentState.radius=ft(t),a=yt(t);n.append("circle").attr("class",Y.popClassName.circle).attr("cx",0).attr("cy",0).attr("r",r).attr("stroke",Y.popCircle.stroke).attr("stroke-width",Y.popCircle["stroke-width"]).attr("fill",a.color);let o=n.append("text").attr("class",Y.popClassName.text).style("font-family",Y.popText["font-family"]).style("font-weight",Y.popText["font-weight"]).attr("text-anchor",Y.popText["text-anchor"]).attr("dy",Y.popText.dy);if(r>=Y.popParams.addNumRCutoff){let e=kt(r,t._currentState.count,Y.popText["font-weight"],Y.popText["font-family"]);o.transition().duration(G.transitionTime).text(t._currentState.count).attr("font-size",e)}else o.text("");n.on("mouseover",function(t){ht(t)}).on("mouseout",function(t){bt(t)}).on("click",function(t){xt(t,n)})},Tt=function(){switch(b=g.append("g").attr("class",Y.lollipopClassName.group),y=b.append("g").attr("clip-path","url(#"+Y.defsId+")").selectAll(Y.lollipopClassName.line).data(Q).enter().append("line").attr("x1",function(t){return pt(t)}).attr("x2",function(t){return pt(t)}).attr("y1",N(0)+X.margin.top).attr("y2",function(t){return dt(t)}).attr("class",Y.lollipopClassName.line).attr("stroke",Y.lollipopLine.stroke).attr("stroke-width",Y.lollipopLine["stroke-width"]),x=b.append("g").attr("clip-path","url(#"+Y.defsId+")").selectAll(Y.lollipopClassName.pop).data(Q).enter().append("g").attr("transform",function(t){return"translate("+pt(t)+","+dt(t)+")"}).classed(Y.lollipopClassName.pop,!0).attr("id",function(t,e){return i+"-"+q+"-lollipop-group-"+e}),a){case"pie":x.each(Ct);break;default:x.each(St)}let t,e,n;Y.title.text.length>0&&("start"==Y.title.alignment?(t="start",e=0):"middle"==Y.title.alignment?(t="middle",e=U/2):(t="end",e=U),n=-G.margin.top/2,g.append("text").attr("id",Y.title.id).style("font",Y.title.font).attr("fill",Y.title.color).attr("text-anchor",t).attr("alignment-base","alphabetic").attr("transform","translate("+e+","+n+")").attr("dy",Y.title.dy).text(Y.title.text))},Lt=function(){if(e.event.sourceEvent&&"brush"===e.event.sourceEvent.type)return;let t=e.event.transform;T=t.rescaleX(O).domain(),X.brush&&h.select("."+X.className.brush).call(z.move,O.range().map(t.invertX,t)),ct()},At=function(){if(!K.hasOwnProperty("x")||!K.hasOwnProperty("y"))throw"No X or Y columns specified in data set";tt||(ot=e.nest().key(t=>t[K.factor]).rollup(function(t){return+t.length}).object(Q),(Q=e.nest().key(t=>+t[K.x]).entries(Q).sort((t,e)=>t.key-e.key)).forEach(function(t){t.position=+t.key,delete t.key,t.total=+t.values.length})),Q.forEach(function(t){let n=e.nest().key(function(t){return t[K.factor]}).rollup(function(t){let n=t.filter(function(t){return t[K.factor]in ot});return{count:+n.length,byY:e.nest().key(function(t){return t[K.y]}).rollup(function(t){return+t.length}).entries(n).sort(function(t,e){return e.value-t.value})}}).entries(t.values).sort(function(t,e){return t.key>e.key});tt||(t._currentState={},t._currentState.showLabel=!1),t._currentState.count=e.sum(n.map(function(t){return t.value.count})),t._currentState.summary=n}),tt=!0,B=Q.map(function(t){return+t._currentState.count}).filter(function(t){return t>0}).sort(function(t,e){return t-e}),w=Math.ceil(e.quantile(B,Y.popParams.yLowerQuantile)),v=Math.floor(e.quantile(B,Y.popParams.yUpperQuantile)),et=[]},Dt=function(t){return e.scaleLinear().domain([0,t]).range([W,0]).nice().domain()[1]},_t=function(){E=0==B.length?[0,1]:e.extent(B),S=E[1]=Dt(E[1]*Y.yPaddingRatio)},Et=function(){_t(),N=e.scaleLinear().domain(E).range([W,0]),F=e.axisLeft(N).tickSize(-U).ticks(9),T=[0,J.length],L=e.scaleLinear().domain(T).range([0,j]),O=e.scaleLinear().domain(T).range([0,j]),D=function(t,e){if(void 0===e||t.length<=1||t[t.length-1]>=e)return t;var n=Math.abs(t[1]-t[0]);return Math.abs(e-t[t.length-1])>n/2?t.push(e):t[t.length-1]=e,t}(L.ticks(),J.length),A=e.axisBottom(L).tickValues(D).tickFormat(function(t){return this.parentNode.nextSibling?t:t+" aa"})},Nt=function(t,e){if(1!=(e=e||1)&&-1!=e&&(e=1),t=Dt(t*Y.yPaddingRatio),t=Math.max(S,t),1===e)et.push(t),et=et.sort();else{let e=et.indexOf(t);-1!=e&&(et=et.slice(0,e).concat(et.slice(e+1)))}let n=0==et.length?S:et[et.length-1];n!=E[1]&&(E[1]=n,Ft())},Ft=function(){N.domain(E),M.transition().duration(G.transitionTime).call(Bt),y.transition().duration(G.transitionTime).attr("y2",function(t){return dt(t)}),x.transition().duration(G.transitionTime).attr("transform",function(t){return"translate("+pt(t)+","+dt(t)+")"})},Bt=function(t){var e=t.selection?t.selection():t;t.call(F),e.select(".domain").remove(),e.selectAll(".tick line").filter(Number).attr("stroke","#aaa").attr("stroke-dasharray","2,2"),e.selectAll(".tick text").attr("x",-2).attr("dy",2),e!==t&&t.selectAll(".tick text").attrTween("x",null).attrTween("dy",null)},Mt=function(t,e,n,r){t.append("g").attr("id","background-layer").append("rect").attr("x",0).attr("y",0).attr("width",r).attr("height",n).attr("fill",e)},Pt=function(){(f=e.select(t).attr("width",$).attr("height",V).attr("xmlns","http://www.w3.org/2000/svg").attr("xmlns:xlink","http://www.w3.org/1999/xlink")).classed(G.className,!0).style("background-color",G.background||"transparent"),m=f.append("g").attr("transform","translate("+G.margin.left+","+G.margin.top+")").attr("id",G.chartID),g=m.append("g").attr("id",Y.id),Mt(g,Y.background,W,U),h=m.append("g").attr("id",X.id).attr("transform","translate(0, "+(W+X.margin.top)+")"),Mt(h,X.background,H,j),G.tooltip&&(nt=u().attr("class","d3-tip").offset([8,0]).direction(function(t){return t.count>E[1]/2?"s":"n"}).offset(function(t){return t.count>E[1]/2?[16,0]:[-12,0]}).html(mt),g.call(nt))},zt={};return zt.options={set target(e){t=e},get target(){return t},set width(t){o=t},get width(){return o},set chartType(t){t&&t in s&&(a=t)},get chartType(){return a},get chartID(){return G.chartID},get height(){return+f.attr("height")},set margin(t){G.margin=t},get margin(){return G.margin},set background(t){G.background=t},get background(){return G.background},set transitionTime(t){G.transitionTime=t},get transitionTime(){return G.transitionTime},set tooltip(t){G.tooltip=t},get tooltip(){return G.tooltip},set ylab(t){Y.ylab.text=t},get ylab(){return Y.ylab.text},set axisLabelFont(t){Y.axisLabel.font=t},get axisLabelFont(){return Y.axisLabel.font},set axisLabelColor(t){Y.axisLabel.fill=t},get axisLabelColor(){return Y.axisLabel.fill},set axisLabelAlignment(t){Y.axisLabel.alignment=t},get axisLabelAlignment(){return Y.axisLabel.alignment},set axisLabelDy(t){Y.axisLabel.dy=t},get axisLabelDy(){return Y.axisLabel.dy},set showLegend(t){G.legend=t},get showLegend(){return G.legend},set legendMargin(t){G.legendOpt.margin=t},get legendMargin(){return G.legendOpt.margin},set legendInteractive(t){G.legendOpt.interactive=t},get legendInteractive(){return G.legendOpt.interactive},set legendTitle(t){G.legendOpt.title=t},get legendTitle(){return G.legendOpt.title},get legendHeight(){return R},get lollipopTrackID(){return Y.id},set lollipopTrackHeight(t){Y.height=t},get lollipopTrackHeight(){return Y.height},set lollipopTrackBackground(t){Y.background=t},get lollipopTrackBackground(){return Y.background},set lollipopPopMinSize(t){Y.popParams.rMin=t},get lollipopPopMinSize(){return Y.popParams.rMin},set lollipopPopMaxSize(t){Y.popParams.rMax=t},get lollipopPopMaxSize(){return Y.popParams.rMax},set lollipopPopInfoLimit(t){Y.popParams.addNumRCutoff=t},get lollipopPopInfoLimit(){return Y.popParams.addNumRCutoff},set lollipopPopInfoColor(t){Y.popText.fill=t},get lollipopPopInfoColor(){return Y.popText.fill},set lollipopLineColor(t){Y.lollipopLine.stroke=t},get lollipopLineColor(){return Y.lollipopLine.stroke},set lollipopLineWidth(t){Y.lollipopLine["stroke-width"]=t},get lollipopLineWidth(){return Y.lollipopLine["stroke-width"]},set lollipopCircleColor(t){Y.popCircle.stroke=t},get lollipopCircleColor(){return Y.popCircle.stroke},set lollipopCircleWidth(t){Y.popCircle["stroke-width"]=t},get lollipopCircleWidth(){return Y.popCircle["stroke-width"]},set lollipopLabelRatio(t){Y.popLabel.fontsizeToRadius=t},get lollipopLabelRatio(){return Y.popLabel.fontsizeToRadius},set lollipopLabelMinFontSize(t){Y.popLabel.minFontSize=t},get lollipopLabelMinFontSize(){return Y.popLabel.minFontSize},set lollipopColorScheme(t){Y.popColorScheme=t},get lollipopColorScheme(){return Y.popColorScheme},set titleText(t){Y.title.text=t},get titleText(){return Y.title.text},set titleFont(t){Y.title.font=t},get titleFont(){return Y.title.font},set titleColor(t){Y.title.color=t},get titleColor(){return Y.title.color},set titleAlignment(t){Y.title.alignment=t},get titleAlignment(){return Y.title.alignment},set titleDy(t){Y.title.dy=t},get titleY(){return Y.title.dy},get annoID(){return X.id},set annoHeight(t){X.height=t},get annoHeight(){return X.height},set annoMargin(t){X.margin=t},get annoMargin(){return X.margin},set annoBackground(t){X.background=t},get annoBackground(){return X.background},set annoBarFill(t){X.bar.background=t},get annoBarFill(){return X.bar.background},set annoBarMargin(t){X.bar.margin=t},get annoBarMargin(){return X.bar.margin},set domainColorScheme(t){X.domain.colorScheme=t},get domainColorScheme(){return X.domain.colorScheme},set domainMargin(t){X.domain.margin=t},get domainMargin(){return X.domain.margin},set domainTextFont(t){X.domain.label.font=t},get domainTextFont(){return X.domain.label.font},set domainTextColor(t){X.domain.label.color=t},get domainTextColor(){return X.domain.label.color},set brush(t){X.brush=t},get brush(){return X.brush},set zoom(t){X.zoom=t},get zoom(){return X.zoom}},zt.setOptions=function(t){for(let e in t)this.options[e]=t[e]},zt.getOptions=function(t){let e={},n=this;return t.forEach(function(t){n.options[t]&&(e[t]=n.options[t])}),e},zt.destroy=function(){(f=e.select(t)).attr("width",null).attr("height",null).attr("xmlns",null).attr("xmlns:xlink",null).classed(G.className,!1).style("background-color",null),f.selectAll("*").remove(),G.tooltip&&rt&&nt.destroy()},zt.refresh=function(){this.destroy(),this.draw(K,Z)},zt.data={set snvData(t){Q=t},get snvData(){return Q},set domainData(t){J=t},get domainData(){return J}},zt.draw=function(n,r){Z=r||d,(K=n||p).hasOwnProperty("factor")?at=!0:(at=!1,K.factor="__undefined__",Q.forEach(function(t){t[K.factor]="__undefined__"})),V=Y.height+X.height,$=o,W=Y.height-G.margin.top-G.margin.bottom,U=$-G.margin.left-G.margin.right,H=X.height-X.margin.top-X.margin.bottom,j=U,At(),Pt(),function(){let t,e;Et(),M=g.append("g").attr("class","axis axis--y").call(Bt),"start"==Y.axisLabel.alignment?(t="end",e=0):"middle"==Y.axisLabel.alignment?(t="middle",e=W/2):(t="start",e=W),g.append("text").attr("class","yaxis axis-label").attr("transform","translate(0,"+e+")rotate(-90)").style("font",Y.axisLabel.font).attr("fill",Y.axisLabel.fill).attr("text-anchor",t).attr("alignment-base","middle").attr("dy",Y.axisLabel.dy).text(Y.ylab.text),_=g.append("g").attr("clip-path","url(#"+Y.xAxisDefsId+")").attr("class","axis axis--x").attr("transform","translate(0, "+(W+X.height)+")").call(A)}(),g.append("clipPath").attr("id",Y.defsId).append("rect").attr("width",U).attr("height",W+X.margin.top),g.append("clipPath").attr("id",Y.xAxisDefsId).append("rect").attr("x",-5).attr("width",U+20).attr("height",30),h.append("clipPath").attr("id",X.defsId).append("rect").attr("width",j).attr("height",H),function(){let t=H-X.bar.margin.top-X.bar.margin.bottom;h.append("rect").classed(X.className.bar,!0).attr("x",0).attr("y",X.bar.margin.top).attr("width",j).attr("height",t).attr("fill",X.bar.background);let n=H-X.domain.margin.top-X.domain.margin.bottom,r=h.append("g").attr("class",X.className.track).selectAll(X.className.domain).data(J[Z.domainType]).enter().append("g").attr("clip-path","url(#"+X.defsId+")").attr("class",X.className.domain);k=r.append("rect").attr("x",function(t){return lt(t)}).attr("y",X.domain.margin.top).attr("height",n).attr("width",function(t){return it(t)}).attr("fill",function(t){return X.domain.colorScheme(t[Z.details.name])}),C=r.append("text").attr("x",function(t){return(lt(t)+st(t))/2}).attr("y",X.domain.margin.top+n/2).attr("dy","0.35em").attr("text-anchor","middle").attr("fill",X.domain.label.color||"white").style("font",X.domain.label.font).text(function(t){return t[Z.details.name]}),X.brush&&(z=e.brushX().extent([[0,0],[j,H]]).on("brush end",ut)),X.zoom&&(I=e.zoom().scaleExtent([1,1/0]).translateExtent([[0,0],[U,W]]).extent([[0,0],[U,W]]).on("zoom",Lt)),X.brush&&h.append("g").attr("class",X.className.brush).call(z),X.zoom&&g.append("rect").attr("class",X.className.zoom).attr("width",U).attr("height",W).attr("fill","none").attr("cursor","move").attr("pointer-events","all").call(I)}(),Tt(),G.legend&&function(){if(G.legend){P=new c(t),0==Object.keys(G.legendOpt.margin).length&&(G.legendOpt.margin={left:G.margin.left,right:G.margin.right,top:2,bottom:2}),P.margin=G.legendOpt.margin,P.interactive=G.legendOpt.interactive,P.title="__undefined__"===G.legendOpt.title?K.factor:G.legendOpt.title;for(let t in ot)P.addSeries({key:t,value:{fill:Y.popColorScheme(t),label:t+" ("+ot[t]+")"}});P.dispatch.on("legendClick",function(t,e){e?ot[t]=e:delete ot[t],At(),_t(),Ft(),x.each(wt)}),P.draw(),R=P.height}}(),X.brush&&h.select(".domain-x-brush").call(z.move,[0,j]),rt=!0},zt},Object.defineProperty(t,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/inst/htmlwidgets/lib/g3Lollipop/backup/g3-styles.min.css b/inst/htmlwidgets/lib/g3Lollipop/backup/g3-styles.min.css new file mode 100644 index 0000000..ff0b15f --- /dev/null +++ b/inst/htmlwidgets/lib/g3Lollipop/backup/g3-styles.min.css @@ -0,0 +1 @@ +.g3-chart{font-family:"Open Sans",verdana,arial,sans-serif;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.d3-tip{line-height:1;padding:3px;color:#343434;background:rgba(233,233,233,0.9);border:1px solid #a6a6a6;border-radius:6px;box-shadow:3px 3px #cacaca;font-size:12px}.d3-tip:after{box-sizing:border-box;display:inline;font-size:12px;line-height:1;width:100%;color:#a6a6a6;content:"\25BC";position:absolute;text-align:center}.d3-tip.n:after{margin:-2px 0 0 0;top:100%;left:0}.d3-tip.s:after{margin:-10px 0 0 0;top:0;left:0;content:"\25B2"}.d3-tip table caption{font-size:14px;color:#034e7b;font-weight:bold;text-align:left;padding:.6em 0}.d3-tip dl{margin-bottom:10px !important}.d3-tip dl dd{margin-left:120px !important}.d3-tip dl dt{width:110px !important}.popMain{cursor:pointer}.axis{font-family:san-serif;font-size:10px}.axis path,.axis line{fill:none;stroke:#c4c8ca;stroke-width:1;shape-rendering:crispEdges}.g3-legend-interactive-layer{cursor:pointer}.non-select{user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.g3-lollipop-annotation-domain{cursor:pointer}div.note{font-size:.92em}.pure-table,table{margin-bottom:5px;border-collapse:collapse;border-spacing:0}.pure-table{empty-cells:show;border:1px solid #cbcbcb}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:center;vertical-align:bottom}.pure-table th .header{color:steelblue !important}.pure-table td{background-color:transparent}.pure-table-odd td,.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td,.pure-table-bordered th{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0}g.domain-x-brush>rect.selection{fill-opacity:.2;fill:none;stroke-width:1;stroke:#969696}g.domain-x-brush>rect.handle{fill:#666} \ No newline at end of file diff --git a/inst/htmlwidgets/lib/g3Lollipop/g3Lollipop.js b/inst/htmlwidgets/lib/g3Lollipop/g3Lollipop.js new file mode 100644 index 0000000..06283f4 --- /dev/null +++ b/inst/htmlwidgets/lib/g3Lollipop/g3Lollipop.js @@ -0,0 +1,2196 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3')) : + typeof define === 'function' && define.amd ? define(['exports', 'd3'], factory) : + (factory((global.g3 = global.g3 || {}),global.d3)); +}(this, (function (exports,d3) { 'use strict'; + +d3 = d3 && d3.hasOwnProperty('default') ? d3['default'] : d3; + +function getTextWidth(text, font) { + var canvas = document.getElementById("canvas") || document.createElement("canvas"); + var context = canvas.getContext("2d"); + context.font = font; + return context.measureText(text).width; +} + +function getUniqueID(left, right) { + left = left || 1e5; + right = right || 1e6 - 1; + return Math.floor(Math.random() * (right - left) + left); +} + +var palettes = { + bottlerocket1: ["#A42820", "#5F5647", "#9B110E", "#3F5151", "#4E2A1E", + "#550307", "#0C1707"], + bottlerocket2: ["#FAD510", "#CB2314", "#273046", "#354823", "#1E1E1E"], + rushmore1: ["#E1BD6D", "#F2300F", "#35274A", "#EABE94", "#0B775E"], + royal1: ["#899DA4", "#C93312", "#FAEFD1", "#DC863B"], + royal2: ["#9A8822", "#F5CDB4", "#F8AFA8", "#FDDDA0", "#74A089"], + zissou1: ["#3B9AB2", "#78B7C5", "#EBCC2A", "#E1AF00", "#F21A00"], + darjeeling1: ["#FF0000", "#00A08A", "#F2AD00", "#F98400", "#5BBCD6"], + darjeeling2: ["#ECCBAE", "#046C9A", "#D69C4E", "#ABDDDE", "#000000"], + chevalier1: ["#446455", "#FDD262", "#D3DDDC", "#C7B19C"], + fantasticfox1: ["#DD8D29", "#E2D200", "#46ACC8", "#E58601", "#B40F20"], + moonrise1: ["#F3DF6C", "#CEAB07", "#D5D5D3", "#24281A"], + moonrise2: ["#798E87", "#C27D38", "#CCC591", "#29211F"], + moonrise3: ["#85D4E3", "#F4B5BD", "#9C964A", "#CDC08C", "#FAD77B"], + cavalcanti1: ["#D8B70A", "#02401B", "#A2A475", "#81A88D", "#972D15"], + grandbudapest1: ["#F1BB7B", "#FD6467", "#5B1A18", "#D67236"], + grandbudapest2: ["#E6A0C4", "#C6CDF7", "#D8A499", "#7294D4"], + google16: ["#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", + "#0099c6", "#dd4477", "#66aa00", "#b82e2e", "#316395", + "#994499", "#22aa99", "#aaaa11", "#6633cc", "#e67300", + "#8b0707", "#651067", "#329262", "#5574a6", "#3b3eac"], + google5: ["#008744", "#0057e7", "#d62d20", "#ffa700", "#ffffff"], + material1: ["#263238", "#212121", "#3e2723", "#dd2c00", "#ff6d00", + "#ffab00", "#ffd600", "#aeea00", "#64dd17", "#00c853", + "#00bfa5", "#00b8d4", "#0091ea", "#2962ff", "#304ffe", + "#6200ea", "#aa00ff", "#c51162", "#d50000"], + pie1: ["#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99"], + pie2: ["#e41a1c", "#377eb8", "#4daf4a", "#984ea3", "#ff7f00"], + pie3: ["#495769", "#A0C2BB", "#F4A775", "#F4C667", "#F37361"], + pie4: ["#FA7921", "#E55934", "#9BC53D", "#FDE74C", "#5BC0EB"], + pie5: ["#5DA5DA", "#4D4D4D", "#60BD68", "#B2912F", "#B276B2", + "#F15854", "#FAA43A"], + pie6: ["#537ea2", "#42a593", "#9f1a1a", "#7c5f95", "#61a070"], + pie7: ["#bddff9", "#1e72bf", "#ead1ab", "#a2dbc5", "#c7ae7d"], + breakfast: ["#b6411a", "#eec3d8", "#4182dd", "#ecf0c8", "#2d6328"], + set1: ["#e41a1c", "#377eb8", "#4daf4a", "#984ea3", "#ff7f00", + "#ffff33", "#a65628", "#f781bf", "#999999"], + set2: ["#66c2a5", "#fc8d62", "#8da0cb", "#e78ac3", "#a6d854", + "#ffd92f", "#e5c494", "#b3b3b3"], + set3: ["#8dd3c7", "#ffffb3", "#bebada", "#fb8072", "#80b1d3", + "#fdb462", "#b3de69", "#fccde5", "#d9d9d9", "#bc80bd", + "#ccebc5", "#ffed6f"], + category10: ["#1f77b4", "#2ca02c", "#d62728", "#ff7f0e", "#9467bd", + "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"], + pastel1: ["#fbb4ae", "#b3cde3", "#ccebc5", "#decbe4", "#fed9a6", + "#ffffcc", "#e5d8bd", "#fddaec", "#f2f2f2"], + pastel2: ["#b3e2cd", "#fdcdac", "#cbd5e8", "#f4cae4", "#e6f5c9", + "#fff2ae", "#f1e2cc", "#cccccc"], + accent: ["#7fc97f", "#beaed4", "#fdc086", "#ffff99", "#bf5b17", + "#386cb0", "#f0027f", "#666666"], + dark2: ["#1b9e77", "#d95f02", "#7570b3", "#e7298a", "#66a61e", + "#e6ab02", "#a6761d", "#666666"], +}; + +function defaultPalette() { + return palettes["google16"]; +} + +function getPalette(paletteName) { + return (paletteName in palettes) ? palettes[paletteName] : defaultPalette; +} + +function listPalettes() { + return Object.keys(palettes); +} + +function scaleOrdinal(paletteName){ + return d3.scaleOrdinal(getPalette(paletteName)); +} + +/* FileSaver.js + * A saveAs() FileSaver implementation. + * 1.3.8 + * 2018-03-22 14:03:47 + * + * By Eli Grey, https://eligrey.com + * License: MIT + * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md + */ + +/*global self */ +/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */ + +/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/src/FileSaver.js */ + +var saveAs = saveAs || (function(view) { + if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) { + return; + } + var + doc = view.document + // only get URL when necessary in case Blob.js hasn't overridden it yet + , get_URL = function() { + return view.URL || view.webkitURL || view; + } + , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a") + , can_use_save_link = "download" in save_link + , click = function(node) { + var event = new MouseEvent("click"); + node.dispatchEvent(event); + } + , is_safari = /constructor/i.test(view.HTMLElement) || view.safari + , is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent) + , setImmediate = view.setImmediate || view.setTimeout + , throw_outside = function(ex) { + setImmediate(function() { + throw ex; + }, 0); + } + , force_saveable_type = "application/octet-stream" + // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to + , arbitrary_revoke_timeout = 1000 * 40 // in ms + , revoke = function(file) { + var revoker = function() { + if (typeof file === "string") { // file is an object URL + get_URL().revokeObjectURL(file); + } else { // file is a File + file.remove(); + } + }; + setTimeout(revoker, arbitrary_revoke_timeout); + } + , dispatch = function(filesaver, event_types, event) { + event_types = [].concat(event_types); + var i = event_types.length; + while (i--) { + var listener = filesaver["on" + event_types[i]]; + if (typeof listener === "function") { + try { + listener.call(filesaver, event || filesaver); + } catch (ex) { + throw_outside(ex); + } + } + } + } + , auto_bom = function(blob) { + // prepend BOM for UTF-8 XML and text/* types (including HTML) + // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF + if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { + return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type}); + } + return blob; + } + , FileSaver = function(blob, name, no_auto_bom) { + if (!no_auto_bom) { + blob = auto_bom(blob); + } + // First try a.download, then web filesystem, then object URLs + var + filesaver = this + , type = blob.type + , force = type === force_saveable_type + , object_url + , dispatch_all = function() { + dispatch(filesaver, "writestart progress write writeend".split(" ")); + } + // on any filesys errors revert to saving with object URLs + , fs_error = function() { + if ((is_chrome_ios || (force && is_safari)) && view.FileReader) { + // Safari doesn't allow downloading of blob urls + var reader = new FileReader(); + reader.onloadend = function() { + var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;'); + var popup = view.open(url, '_blank'); + if(!popup) view.location.href = url; + url=undefined; // release reference before dispatching + filesaver.readyState = filesaver.DONE; + dispatch_all(); + }; + reader.readAsDataURL(blob); + filesaver.readyState = filesaver.INIT; + return; + } + // don't create more object URLs than needed + if (!object_url) { + object_url = get_URL().createObjectURL(blob); + } + if (force) { + view.location.href = object_url; + } else { + var opened = view.open(object_url, "_blank"); + if (!opened) { + // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html + view.location.href = object_url; + } + } + filesaver.readyState = filesaver.DONE; + dispatch_all(); + revoke(object_url); + }; + filesaver.readyState = filesaver.INIT; + + if (can_use_save_link) { + object_url = get_URL().createObjectURL(blob); + setImmediate(function() { + save_link.href = object_url; + save_link.download = name; + click(save_link); + dispatch_all(); + revoke(object_url); + filesaver.readyState = filesaver.DONE; + }, 0); + return; + } + + fs_error(); + } + , FS_proto = FileSaver.prototype + , saveAs = function(blob, name, no_auto_bom) { + return new FileSaver(blob, name || blob.name || "download", no_auto_bom); + }; + + // IE 10+ (native saveAs) + if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) { + return function(blob, name, no_auto_bom) { + name = name || blob.name || "download"; + + if (!no_auto_bom) { + blob = auto_bom(blob); + } + return navigator.msSaveOrOpenBlob(blob, name); + }; + } + + // todo: detect chrome extensions & packaged apps + //save_link.target = "_blank"; + + FS_proto.abort = function(){}; + FS_proto.readyState = FS_proto.INIT = 0; + FS_proto.WRITING = 1; + FS_proto.DONE = 2; + + FS_proto.error = + FS_proto.onwritestart = + FS_proto.onprogress = + FS_proto.onwrite = + FS_proto.onabort = + FS_proto.onerror = + FS_proto.onwriteend = + null; + + return saveAs; +}( + typeof self !== "undefined" && self + || typeof window !== "undefined" && window + || undefined +)); + +// ========================================== +// g3.utils.output module +// ========================================== +function output () { + // helper functions + function _parseFilename(filename, fileExt) { + filename = filename || defaultFilename; + return filename + "." + fileExt; + } + + function _getSVGString(svgNode) { + svgNode.setAttribute("xmlns", "http://www.w3.org/2000/svg"); + svgNode.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); + var cssStyvarext = _getCSSStyles(svgNode); + + _appendCSS(cssStyvarext, svgNode); + + var serializer = new XMLSerializer(), + svgString = serializer.serializeToString(svgNode); + svgString = svgString.replace(/(\w+)?:?xlink=/g, "xmlns:xlink="); // Fix root xlink without namespace + svgString = svgString.replace(/NS\d+:href/g, "xlink:href"); // Safari NS namespace fix + + return svgString; + + function _getCSSStyles(parentElement) { + var selectorTextArr = []; + + // Add Parent element Id and Classes to the list + selectorTextArr.push("#" + parentElement.id); + for (let c = 0; c < parentElement.classList.length; c++) + if (!contains("." + parentElement.classList[c], selectorTextArr)) + selectorTextArr.push("." + parentElement.classList[c]); + + // Add Children element Ids and Classes to the list + var nodes = parentElement.getElementsByTagName("*"); + for (let i = 0; i < nodes.length; i++) { + var id = nodes[i].id; + if (!contains("#" + id, selectorTextArr)) + selectorTextArr.push("#" + id); + + var classes = nodes[i].classList; + for (let c = 0; c < classes.length; c++) + if (!contains("." + classes[c], selectorTextArr)) + selectorTextArr.push("." + classes[c]); + } + + // Extract CSS Rules + var extractedCSSText = ""; + for (let i = 0; i < document.styleSheets.length; i++) { + var s = document.styleSheets[i]; + + try { + if (!s.cssRules) + continue; + } catch (e) { + if (e.name !== "SecurityError") + throw e; // for Firefox + continue; + } + + var cssRules = s.cssRules; + for (var r = 0; r < cssRules.length; r++) { + if (contains(cssRules[r].selectorText, selectorTextArr)) + extractedCSSText += cssRules[r].cssText; + } + } + + return extractedCSSText; + + function contains(str, arr) { + return arr.indexOf(str) === -1 ? false : true; + } + } + + function _appendCSS(cssText, element) { + var styleElement = document.createElement("style"); + styleElement.setAttribute("type", "text/css"); + styleElement.innerHTML = cssText; + var refNode = element.hasChildNodes() ? element.children[0] : null; + element.insertBefore(styleElement, refNode); + } + } + + var defaultFilename = "output"; + var svgNode = "svg"; + + function output(nodeId) { + svgNode = nodeId || svgNode; + } + + output.toSVG = function (filename) { + filename = _parseFilename(filename, "svg"); + + var svg_string = _getSVGString(document.querySelector(svgNode)); + var blod = new Blob([svg_string], { type: "image/svg+xml" }); + + saveAs(blod, filename); + }; + + output.toPNG = function (filename) { + filename = _parseFilename(filename, "png"); + + var svg = document.querySelector(svgNode), + width = +svg.getAttribute("width"), + height = +svg.getAttribute("height"), + svg_string = _getSVGString(svg); + + // Convert SVG string to data URL + var imgsrc = "data:image/svg+xml;base64," + + btoa(unescape(encodeURIComponent(svg_string))); + var canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + + var canvas_content = canvas.getContext("2d"); + var image = new Image(); + image.src = imgsrc; + image.onload = function () { + canvas_content.clearRect(0, 0, width, height); + canvas_content.drawImage(image, 0, 0, width, height); + + canvas.toBlob(function (blob) { + saveAs(blob, filename); + }); + }; + }; + + return output; +} + +function legend (target, title, series) { + const Enabled = "enabled", Disabled = "disabled"; + + // use setter and getter to control these variables + // so that "this" keyword can be ignored in legend object + var interactive = true, + margin = { left: 10, right: 0, top: 5, bottom: 5, }, + dispatch = d3.dispatch( + 'legendClick', + 'legendDblclick', + 'legendMouseover', + 'legendMouseout'); + + title = title || false; + series = series || []; + + var svg, height = 0; + + var labelFont = "normal 12px sans-serif", labelColor = "black", + titleFont = "bold 12px sans-serif", titleColor = "black"; + + var legend = { + set target(_) { target = _; }, get target() { return target; }, + set title(_) { title = _; }, get title() { return title; }, + set series(_) { series = _; }, get series() { return series; }, + set margin(_) { margin = _; }, get margin() { return margin; }, + set dispatch(_) { dispatch = _; }, get dispatch() { return dispatch; }, + set interactive(_) { interactive = _; }, get interactive() { return interactive; }, + set labelFont(_) { labelFont = _; }, get labelFont() { return labelFont; }, + set labelColor(_) { labelColor = _; }, get labelColor() { return labelColor; }, + set titleFont(_) { titleFont = _; }, get titleFont() { return titleFont; }, + set titleColor(_) { titleColor = _; }, get titleColor() { return titleColor; }, + get height() { return height; }, + addSeries: function (datum) { + // key : legend name + // value: legend related information + // (text: label, fill: color, class: class_name controlled) + if (!(datum.key in Object.keys(series))) { + series.push(datum); + } + }, + getLegendStatus: function () { + return series.map(function (d) { + return { + key: d.key, + status: d._status || true + }; + }); + }, + destroy: function () { + svg.select(".g3-legend").selectAll("*").remove(); + }, + draw: function () { + series.forEach(d => d._status = true); + //let _counter = series.length; + + svg = d3.select("#"+target); + let _width = +svg.attr("width"), + _height = +svg.attr("height"), + _totalW = _width - (margin.left || 0) - (margin.right || 0), + _wrap = svg.append("g").attr("class", "g3-legend") + .attr("transform", "translate(" + margin.left + "," + (_height + margin.top) + ")"), + _lineHeight = 16; + + let _titleLen = (title) ? getTextWidth(title, titleFont) : 0; + + let _radioLeft = 12, _radioRight = 5, _radioRadius = 3, + _radioStrokeWidth = 1, _radioStroke = "grey"; + + let _titleInterval = 6, + _titleWidth = Math.min(_titleLen + _titleInterval, 1 / 3 * _totalW), + _availableW = _totalW - _titleWidth, + _radioW = _radioLeft + _radioRight + 2 * _radioRadius; + + let _curPos = { x: 0, y: _lineHeight / 2, }, + _nextPos = { x: 0, y: _lineHeight / 2, }; + + // add title + if (title) { + _wrap.append("g").attr("class", "g3-legend-title") + .append("text") + .attr("x", _titleWidth - _titleInterval).attr("y", _lineHeight / 2) + .attr("text-anchor", "end") + .attr("fill", titleColor) + .style("font", titleFont) + .attr("dy", "0.35em") + .text(title); + } + + var _updatePosition = function (width) { + // if longer than availabelW + width += _radioW; + if (width > _availableW - _nextPos.x) { + // new line + _curPos.x = 0, _curPos.y = _nextPos.y + _lineHeight; + _nextPos.x = width, _nextPos.y = _curPos.y; + } else { + // same line + _curPos.x = _nextPos.x; + _nextPos.x += width; + } + }; + + var _toggleState = function (g) { + var _color = g.attr("defaultColor"); + var _c = g.select("circle"), _t = g.select("text"); + + if (g.attr("state") == Enabled) { + g.attr("state", Disabled); + + _c.attr("fill", "transparent") + .attr("stroke", _color); + _t.style("opacity", 0.5); + } else { + g.attr("state", Enabled); + + _c.attr("fill", _color) + .attr("stroke", _radioStroke); + _t.style("opacity", 1); + } + }; + + var _legends = _wrap.append("g") + .attr("class", "g3-legend-item-container") + .attr("transform", "translate(" + _titleWidth + ", 0)"); + + var _addOneLegend = function (d) { + let _g = d3.select(this); + let _text = d.value.label || d.key; + _updatePosition(getTextWidth(_text, labelFont)); + + let _x = _curPos.x + _radioLeft + _radioRadius, _y = _curPos.y; + + // add legend circle + _g.attr("state", Enabled) + .attr("defaultColor", d.value.fill); + + _g.append("circle") + .attr("cx", _x).attr("cy", _y) + .attr("r", _radioRadius) + .attr("fill", d.value.fill || "transparent") + .attr("stroke-width", _radioStrokeWidth) + .attr("stroke", _radioStroke); + + _x += (_radioRadius + _radioRight); + + // add text + _g.append("text") + .attr("x", _x).attr("y", _y) + .attr("text-anchor", "start") + .attr("fill", labelColor) + .style("font", labelFont) + .attr("dy", "0.35em") + .text(_text); + + _g.on("click", function () { + if (interactive) { + _toggleState(_g); + dispatch.call("legendClick", this, d.key, _g.attr("state") == Enabled); + d._status = (_g.attr("state") == Enabled); + } + }); + }; + + _legends.selectAll(".g3-legend-item") + .data(series).enter() + .append("g").attr("class", "g3 g3-legend-item") + .style("cursor", interactive ? "pointer" : "default") + .each(_addOneLegend); + + height = margin.top + _curPos.y + _lineHeight / 2 + margin.bottom; + +svg.attr("height", height + _height); + }, + }; + + return legend; +} + +/** + * d3.tip + * Copyright (c) 2013-2017 Justin Palmer + * + * Tooltips for d3.js SVG visualizations + * modified + */ +// Public - constructs a new tooltip +// +// Returns a tip +function tooltip () { + var direction = d3TipDirection, + offset = d3TipOffset, + html = d3TipHTML, + rootElement = document.body, + node = initNode(), + svg = null, + point = null, + target = null; + + function tip(vis) { + svg = selectSVGNode(vis); + if (!svg) return; + point = svg.createSVGPoint(); + rootElement.appendChild(node); + } + + // Public - show the tooltip on the screen + // + // Returns a tip + tip.show = function () { + var args = Array.prototype.slice.call(arguments); + if (args[args.length - 1] instanceof SVGElement) target = args.pop(); + + var content = html.apply(this, args), + poffset = offset.apply(this, args), + dir = direction.apply(this, args), + nodel = getNodeEl(), + i = directions.length, + coords, + scrollTop = document.documentElement.scrollTop || + rootElement.scrollTop, + scrollLeft = document.documentElement.scrollLeft || + rootElement.scrollLeft; + + nodel.html(content) + .style('opacity', 1).style('pointer-events', 'all'); + + while (i--) nodel.classed(directions[i], false); + coords = directionCallbacks.get(dir).apply(this); + nodel.classed(dir, true) + .style('top', (coords.top + poffset[0]) + scrollTop + 'px') + .style('left', (coords.left + poffset[1]) + scrollLeft + 'px'); + + return tip + }; + + // Public - hide the tooltip + // + // Returns a tip + tip.hide = function () { + var nodel = getNodeEl(); + nodel.style('opacity', 0).style('pointer-events', 'none'); + return tip + }; + + // Public: Proxy attr calls to the d3 tip container. + // Sets or gets attribute value. + // + // n - name of the attribute + // v - value of the attribute + // + // Returns tip or attribute value + // eslint-disable-next-line no-unused-vars + tip.attr = function (n, v) { + if (arguments.length < 2 && typeof n === 'string') { + return getNodeEl().attr(n) + } + + var args = Array.prototype.slice.call(arguments); + d3.selection.prototype.attr.apply(getNodeEl(), args); + return tip + }; + + // Public: Proxy style calls to the d3 tip container. + // Sets or gets a style value. + // + // n - name of the property + // v - value of the property + // + // Returns tip or style property value + // eslint-disable-next-line no-unused-vars + tip.style = function (n, v) { + if (arguments.length < 2 && typeof n === 'string') { + return getNodeEl().style(n) + } + + var args = Array.prototype.slice.call(arguments); + d3.selection.prototype.style.apply(getNodeEl(), args); + return tip + }; + + // Public: Set or get the direction of the tooltip + // + // v - One of n(north), s(south), e(east), or w(west), nw(northwest), + // sw(southwest), ne(northeast) or se(southeast) + // + // Returns tip or direction + tip.direction = function (v) { + if (!arguments.length) return direction + direction = v == null ? v : functor(v); + + return tip + }; + + // Public: Sets or gets the offset of the tip + // + // v - Array of [x, y] offset + // + // Returns offset or + tip.offset = function (v) { + if (!arguments.length) return offset + offset = v == null ? v : functor(v); + + return tip + }; + + // Public: sets or gets the html value of the tooltip + // + // v - String value of the tip + // + // Returns html value or tip + tip.html = function (v) { + if (!arguments.length) return html + html = v == null ? v : functor(v); + + return tip + }; + + // Public: sets or gets the root element anchor of the tooltip + // + // v - root element of the tooltip + // + // Returns root node of tip + tip.rootElement = function (v) { + if (!arguments.length) return rootElement + rootElement = v == null ? v : functor(v); + + return tip + }; + + // Public: destroys the tooltip and removes it from the DOM + // + // Returns a tip + tip.destroy = function () { + if (node) { + getNodeEl().remove(); + node = null; + } + return tip + }; + + function d3TipDirection() { + return 'n' + } + + function d3TipOffset() { + return [0, 0] + } + + function d3TipHTML() { + return ' ' + } + + var directionCallbacks = d3.map({ + n: directionNorth, + s: directionSouth, + e: directionEast, + w: directionWest, + nw: directionNorthWest, + ne: directionNorthEast, + sw: directionSouthWest, + se: directionSouthEast + }), + directions = directionCallbacks.keys(); + + function directionNorth() { + var bbox = getScreenBBox(this); + return { + top: bbox.n.y - node.offsetHeight, + left: bbox.n.x - node.offsetWidth / 2 + } + } + + function directionSouth() { + var bbox = getScreenBBox(this); + return { + top: bbox.s.y, + left: bbox.s.x - node.offsetWidth / 2 + } + } + + function directionEast() { + var bbox = getScreenBBox(this); + return { + top: bbox.e.y - node.offsetHeight / 2, + left: bbox.e.x + } + } + + function directionWest() { + var bbox = getScreenBBox(this); + return { + top: bbox.w.y - node.offsetHeight / 2, + left: bbox.w.x - node.offsetWidth + } + } + + function directionNorthWest() { + var bbox = getScreenBBox(this); + return { + top: bbox.nw.y - node.offsetHeight, + left: bbox.nw.x - node.offsetWidth + } + } + + function directionNorthEast() { + var bbox = getScreenBBox(this); + return { + top: bbox.ne.y - node.offsetHeight, + left: bbox.ne.x + } + } + + function directionSouthWest() { + var bbox = getScreenBBox(this); + return { + top: bbox.sw.y, + left: bbox.sw.x - node.offsetWidth + } + } + + function directionSouthEast() { + var bbox = getScreenBBox(this); + return { + top: bbox.se.y, + left: bbox.se.x + } + } + + function initNode() { + var div = d3.select(document.createElement('div')); + div + .style('position', 'absolute') + .style('top', 0) + .style('opacity', 0) + .style('pointer-events', 'none') + .style('box-sizing', 'border-box'); + + return div.node() + } + + function getNodeEl() { + if (node == null) { + node = initNode(); + // re-add node to DOM + rootElement.appendChild(node); + } + return d3.select(node) + } + + // Private - gets the screen coordinates of a shape + // + // Given a shape on the screen, will return an SVGPoint for the directions + // n(north), s(south), e(east), w(west), ne(northeast), se(southeast), + // nw(northwest), sw(southwest). + // + // +-+-+ + // | | + // + + + // | | + // +-+-+ + // + // Returns an Object {n, s, e, w, nw, sw, ne, se} + function getScreenBBox(targetShape) { + var targetel = target || d3.event.target; //targetShape + + while (targetel.getScreenCTM == null && targetel.parentNode != null) { + targetel = targetel.parentNode; + } + + var bbox = {}, + matrix = targetel.getScreenCTM(), + tbbox = targetel.getBBox(), + width = tbbox.width, + height = tbbox.height, + x = tbbox.x, + y = tbbox.y; + + point.x = x; + point.y = y; + bbox.nw = point.matrixTransform(matrix); + point.x += width; + bbox.ne = point.matrixTransform(matrix); + point.y += height; + bbox.se = point.matrixTransform(matrix); + point.x -= width; + bbox.sw = point.matrixTransform(matrix); + point.y -= height / 2; + bbox.w = point.matrixTransform(matrix); + point.x += width; + bbox.e = point.matrixTransform(matrix); + point.x -= width / 2; + point.y -= height / 2; + bbox.n = point.matrixTransform(matrix); + point.y += height; + bbox.s = point.matrixTransform(matrix); + + return bbox + } + + function selectSVGNode(element) { + var svgNode = element.node(); + if (!svgNode) { + return null; + } + if (svgNode.tagName.toLowerCase() === 'svg') { + return svgNode; + } + return svgNode.ownerSVGElement; + } + + // Private - replace D3JS 3.X d3.functor() function + function functor(v) { + return typeof v === 'function' ? v : function () { + return v + } + } + + return tip +} + +function Lollipop(target, chartType, width) { + const Add = 1, Remove = -1, + Prefix = "g3_lollipop", + Undefined = "__undefined__"; + + const ChartTypes = { "circle": 0, "pie": 1 }; + const ChartTypeDefault = "circle"; + const WidthDefault = 800; + const LollipopTrackHeightDefault = 420, DomainTractHeightDefault = 30; + + const SnvDataDefaultFormat = { + x: "AA_Position", + y: "Protein_Change", + factor: "Mutation_Class", + }; + + const DomainDataDefaultFormat = { + symbol: "hgnc_symbol", + name: "protein_name", + length: "length", + domainType: "pfam", + details: { + start: "pfam_start", + end: "pfam_end", + ac: "pfam_ac", + name: "pfam_id", + }, + }; + + // public parameters + width = width || WidthDefault; + chartType = chartType || ChartTypeDefault; + + if (!(chartType in ChartTypes)) { + chartType = ChartTypeDefault; + } + + var uniqueID = getUniqueID(); + var options = { + chartID: Prefix + "_chart_" + uniqueID, + className: "g3-chart", + tooltip: true, + margin: { left: 40, right: 20, top: 15, bottom: 25 }, + background: "transparent", + transitionTime: 600, + legend: true, + legendOpt: { + margin: {}, + interactive: true, + title: Undefined, + }, + }; + + // lollipop settings + var lollipopOpt = { + id: Prefix + "-main-" + uniqueID, + defsId: Prefix + "-main-defs-" + uniqueID, + xAxisDefsId: Prefix + "-xAxis-defs-" + uniqueID, + height: LollipopTrackHeightDefault, + background: "rgb(244,244,244)", + lollipopClassName: { + group: "lollipop", + line: "lollipopLine", + pop: "pop", + }, + lollipopLine: { + "stroke": "rgb(42,42,42)", + "stroke-width": 0.5, + }, + popClassName: { + pie: "popPie", + slice: "pieSlice", + text: "popText", + circle: "popCircle", + label: "popLabel", + }, + // pop circle + popCircle: { + "stroke": "wheat", + "stroke-width": 0.5, + }, + // text in middle of pops + popText: { + fill: "#EEE", + "font-family": "Sans", + "font-weight": "normal", + "text-anchor": "middle", + dy: "0.35em", + }, + popLabel: { + "font-family": "Arial", + "font-weight": "normal", + minFontSize: 10, + fontsizeToRadius: 1.4, + padding: 5, + }, + popColorSchemeName: "accent", + popColorScheme: scaleOrdinal("accent"), + yPaddingRatio: 1.1, + popParams: { + rMin: 2, + rMax: 12, + addNumRCutoff: 8, + yLowerQuantile: .25, + yUpperQuantile: .99, + }, + title: { + id: "g3-chart-title", + text: "", + font: "normal 16px Arial", + color: "#424242", + alignment: "middle", + dy: "0.35em", + }, + axisLabel: { + font: "normal 12px Arial", + fill: "#4f4f4f", + "text-anchor": "middle", + dy: "-2em", + alignment: "middle", + }, + ylab: { + text: "mutations", + }, + }; + + // domain information settings + var domainOpt = { + id: Prefix + "-domain-" + uniqueID, + defsId: Prefix + "-annotation-defs-" + uniqueID, + height: DomainTractHeightDefault, + margin: { top: 4, bottom: 0 }, + background: "transparent", + className: { + track: "domain_track", + bar: "domain_bar", + domain: Prefix + "_domain", + brush: "domain-x-brush", + zoom: "main-viz-zoom", + }, + domain: { + colorSchemeName: "category10", + colorScheme: scaleOrdinal("category10"), + margin: { top: 0, bottom: 0 }, + label: { + font: "normal 11px Arial", + color: "#f2f2f2", + }, + }, + bar: { + background: "#e5e3e1", + margin: { top: 2, bottom: 2 } + }, + brush: true, + zoom: true, + }; + + // data and settings + var snvData = [], domainData = {}; + var snvDataFormat, domainDataFormat; + + /* private variables */ + // chart settings + var svg; + var _viz, _mainViz, _domainViz, + _lollipops, _popLines, _pops, + _popYUpper, _popYLower, // lollipop viz components + _domainRect, _domainText, + _snvInit = false, // data initiallization + _yUpperValueArray = [], _yValueMax, + _xRange, _xScale, _xAxis, _xTicks, _domXAxis, + _yRange, _yScale, _yAxis, _yValues, _domYAxis, + _popTooltip = null, + _chartInit = false, + _byFactor = false, + _currentStates = {}, _lollipopLegend; + + var _domainBrush, _xScaleOrig, _domainZoom, _legendHeight; + var _domainH, _domainW, _mainH, _mainW, _svgH, _svgW; + + var _appendValueToDomain = function (tickValues, value) { + if (value === undefined || tickValues.length <= 1 || tickValues[tickValues.length - 1] >= value) + return tickValues; + + var interval = Math.abs(tickValues[1] - tickValues[0]); + + if (Math.abs(value - tickValues[tickValues.length - 1]) > interval / 2) { + tickValues.push(value); + } else { + tickValues[tickValues.length - 1] = value; + } + + return tickValues; + }; + + // event handlers + var _getDomainRectWidth = function (d) { + return _getDomainEnd(d) - _getDomainStart(d); + }; + + var _getDomainStart = function (d) { + return _xScale(d[domainDataFormat.details.start]); + }; + + var _getDomainEnd = function (d) { + return _xScale(d[domainDataFormat.details.end]); + }; + + var _updateX = function () { + _xScale.domain(_xRange); + _domXAxis.call(_xAxis); + + // update domains + _domainRect + .attr("x", function (d) { return _getDomainStart(d); }) + .attr("width", function (d) { return _getDomainRectWidth(d); }); + + _domainText + .attr("x", function (d) { return (_getDomainStart(d) + _getDomainEnd(d)) / 2; }); + + // update lines of lollipops + _popLines//.transition().duration(_options.transitionTime) + .attr("x1", function (d) { return _getPopX(d); }) + .attr("x2", function (d) { return _getPopX(d); }); + + // update pop arcs + _pops//.transition().duration(_options.transitionTime) + .attr("transform", function (d) { + return "translate(" + _getPopX(d) + "," + _getPopY(d) + ")"; + }); + }; + + var _domainBrushMove = function () { + if (d3.event.sourceEvent && d3.event.sourceEvent.type === "zoom") return; + + let _selection = d3.event.selection || _xScaleOrig.range(); + _xRange = _selection.map(_xScaleOrig.invert); + + if (domainOpt.zoom) { + _mainViz.select(".main-viz-zoom").call(_domainZoom.transform, + d3.zoomIdentity + .scale(_mainW / (_selection[1] - _selection[0])) + .translate(-_selection[0], 0)); + } + + _updateX(); + }; + + var _drawDomain = function () { + // domain protein bar + let _barH = _domainH - domainOpt.bar.margin.top - domainOpt.bar.margin.bottom; + + _domainViz.append("rect").classed(domainOpt.className.bar, true) + .attr("x", 0).attr("y", domainOpt.bar.margin.top) + .attr("width", _domainW).attr("height", _barH) + .attr("fill", domainOpt.bar.background); + + // draw protein domains + let _dH = _domainH - domainOpt.domain.margin.top - domainOpt.domain.margin.bottom; + + // draw domains + let _domainG = _domainViz.append("g").attr("class", domainOpt.className.track) + .selectAll(domainOpt.className.domain) + .data(domainData[domainDataFormat.domainType]).enter().append("g") + .attr("clip-path", "url(#" + domainOpt.defsId + ")") + .attr("class", domainOpt.className.domain); + + _domainRect = _domainG.append("rect") + .attr("x", function (d) { return _getDomainStart(d); }) + .attr("y", domainOpt.domain.margin.top) + .attr("height", _dH) + .attr("width", function (d) { return _getDomainRectWidth(d); }) + .attr("fill", function (d) { return domainOpt.domain.colorScheme(d[domainDataFormat.details.name]); }); + + _domainText = _domainG.append("text") + .attr("x", function (d) { return (_getDomainStart(d) + _getDomainEnd(d)) / 2; }) + .attr("y", domainOpt.domain.margin.top + _dH / 2) + .attr("dy", "0.35em") + .attr("text-anchor", "middle") + .attr("fill", domainOpt.domain.label.color || "white") + .style("font", domainOpt.domain.label.font) + .text(function (d) { return d[domainDataFormat.details.name]; }); + + if (domainOpt.brush) { + _domainBrush = d3.brushX() + .extent([[0, 0], [_domainW, _domainH]]) + .on("brush end", _domainBrushMove); + } + + if (domainOpt.zoom) { + _domainZoom = d3.zoom() + .scaleExtent([1, Infinity]) + .translateExtent([[0, 0], [_mainW, _mainH]]) + .extent([[0, 0], [_mainW, _mainH]]) + .on("zoom", _mainVizZoomed); + } + + if (domainOpt.brush) { + _domainViz.append("g") + .attr("class", domainOpt.className.brush) + .call(_domainBrush); + } + if (domainOpt.zoom) { + _mainViz.append("rect") + .attr("class", domainOpt.className.zoom) + .attr("width", _mainW) + .attr("height", _mainH) + .attr("fill", "none") + .attr("cursor", "move") + .attr("pointer-events", "all") + .call(_domainZoom); + } + }; + + var _getPopX = function (_datum) { + return _xScale(_datum.position); + }; + + var _getPopY = function (_datum) { + return _yScale(_datum._currentState.count); + }; + + var _getPopR = function (_datum) { + let count = _datum._currentState.count; + + if (count == 0) + return 0; + + if (count >= _popYUpper) + return lollipopOpt.popParams.rMax; + else if (count <= _popYLower) + return lollipopOpt.popParams.rMin; + else + return ((count - _popYLower) / (_popYUpper - _popYLower) * + (lollipopOpt.popParams.rMax - lollipopOpt.popParams.rMin) + + lollipopOpt.popParams.rMin); + }; + + var _popDetailHtml = function (d) { + let _html = ""; + + if (_byFactor) { + _html += `
+ + + + + + + + + + + `; + + d._currentState.summary.forEach(function (ent) { + if (ent.value.count > 0) { + _html += ` + + + + + + `; + } + }); + + _html += ` + +
Position ${d.position}
Class#Change%
${ent.key} ${ent.value.count} ` + _formatProteinChange(ent.value.byY) + `` + d3.format(".1f")(ent.value.count / d._currentState.count * 100) + `%
`; + } else { + _html += ` + + + + + + + + + `; + + d._currentState.summary[0].value.byY.forEach(function (ent) { + _html += ` + + + + `; + }); + _html += ` + +
Position ${d.position}
Change%
${ent.key} ` + d3.format(".1f")(ent.value / d._currentState.count * 100) + `%
`; + } + + return _html; + }; + + var _formatProteinChange = function (arr) { + var info = ""; + arr.forEach(function (e) { + info += `${e.key} (n=${e.value})
`; + }); + return info; + }; + + var _popMouseOver = function (d, target) { + if (options.tooltip) { + _popTooltip.show(d, target); + } + }; + + var _popMouseOut = function (d) { + if (options.tooltip) { + _popTooltip.hide(d); + } + }; + + var _getDataDominant = function (d) { + let _snv, _color, _cur_max = -1, _class; + d._currentState.summary.forEach(function (_c) { + if (_c.value.count > 0 && _c.value.count > _cur_max) { + _snv = _c.value.byY[0].key; + _class = _c; + _color = lollipopOpt.popColorScheme(_c.key); + _cur_max = _c.value.count; + } + }); + + return { "class": _class, "entry": _snv, "count": _cur_max, "color": _color }; + }; + + var _popClick = function (d, parentG) { + // show the most representative node + if (d._currentState.showLabel) { + // hide label + d._currentState.showLabel = false; + let _label = parentG.select("." + lollipopOpt.popClassName.label); + + _updateYBahavior(_label.attr("yMaxValue"), Remove); + + // text rotation + _label.transition().duration(options.transitionTime).attr("transform", "rotate(0)").remove(); + } else { + d._currentState.showLabel = true; + + // (1) pick the lastest mutation class + // (2) pick the the most representative snvs in this class + let _dominant = _getDataDominant(d); + + // get text length + let _fontSize = Math.max(d._currentState.radius * lollipopOpt.popLabel.fontsizeToRadius, lollipopOpt.popLabel.minFontSize) + "px"; + let _font = lollipopOpt.popLabel["font-weight"] + " " + _fontSize + " " + lollipopOpt.popLabel["font-family"]; + // text length in dimention + let _txtLen = getTextWidth(_dominant.entry, _font); + + // note: y axis 0 is at top-left cornor + let _txtH = d._currentState.radius + lollipopOpt.popLabel.padding + _txtLen; + let _txtY = (_yRange[1] - _yRange[0]) * (_txtH / _mainH); + let _txtYMax = d._currentState.count + _txtY; + + _updateYBahavior(_txtYMax, Add); + + var txtHolder = parentG + .append("text") + .classed(lollipopOpt.popClassName.label, true) + .attr("x", - d._currentState.radius - lollipopOpt.popLabel.padding) + .attr("y", 0) + .attr("yMaxValue", _txtYMax) + .text(_dominant.entry) + .style("fill", _dominant.color) + .style("font", _font) + .attr("dy", ".35em") + .attr("text-anchor", "end"); + + // text rotation + txtHolder.transition().duration(options.transitionTime).attr("transform", "rotate(90)"); + } + }; + + var _addLollipopLegend = function () { + // register legend + if (!options.legend) return; + + _lollipopLegend = new legend(options.chartID); + + if ((Object.keys(options.legendOpt.margin)).length == 0) { + options.legendOpt.margin = { + left: options.margin.left, + right: options.margin.right, + top: 2, + bottom: 2, + }; + } + + _lollipopLegend.margin = options.legendOpt.margin; + _lollipopLegend.interactive = options.legendOpt.interactive; + _lollipopLegend.title = (options.legendOpt.title === Undefined) ? + snvDataFormat.factor : options.legendOpt.title; + + for (let _d in _currentStates) { + _lollipopLegend.addSeries({ + "key": _d, + "value": { + fill: lollipopOpt.popColorScheme(_d), + label: _d + " (" + _currentStates[_d] + ")", + } + }); + } + + _lollipopLegend.dispatch.on("legendClick", function (key, selected) { + !selected ? delete _currentStates[key] : _currentStates[key] = selected; + + _prepareData(); + // calculate y range based on the current yValues + _calcYRange(); + + // update (1) y axis (2) lollipop lines (3) pop group + _updateY(); + + _pops.each(_updatePop); + }); + + _lollipopLegend.draw(); + _legendHeight = _lollipopLegend.height; + }; + + var _pieFun = function () { + return d3.pie().sort(null); + }; + + var _pieTransition = function (d, popGroup, popR) { + let _arc = d3.arc().innerRadius(0).outerRadius(popR); + let _pie = _pieFun().value(function (_d) { return _d.value.count; }); + + let _pieSlice = popGroup.select("." + lollipopOpt.popClassName.pie) + .selectAll("path." + lollipopOpt.popClassName.slice) + .data(_pie(d._currentState.summary)); + + _pieSlice.enter().insert("path"); + + _pieSlice.transition().duration(options.transitionTime) + .attrTween("d", function (_d) { + this._current = this._current || _d; + let _interpolate = d3.interpolate(this._current, _d); + this._current = _interpolate(0); + + return function (t) { + return _arc(_interpolate(t)); + } + }); + + _pieSlice.exit().remove(); + }; + + var _circleTransition = function (d, popGroup, popR) { + let _circle = popGroup.select("." + lollipopOpt.popClassName.circle); + let _dominant = _getDataDominant(d); + let _fill = _dominant.color || "transparent"; + + _circle.transition().duration(options.transitionTime) + .attr("r", popR).attr("fill", _fill); + }; + + var _updatePop = function (d) { + let _popGroup = d3.select(this); + + // remove label + if (d._currentState.showLabel) { + _popGroup.select("." + lollipopOpt.popClassName.label).remove(); + d._currentState.showLabel = false; + } + + // update pop + let _popR = d._currentState.radius = _getPopR(d); + + switch (chartType) { + case "pie": + _pieTransition(d, _popGroup, _popR); + break; + default: + _circleTransition(d, _popGroup, _popR); + } + + let _popText = _popGroup.select("." + lollipopOpt.popClassName.text); + // add text if large enough + if (_popR >= lollipopOpt.popParams.addNumRCutoff) { + let _popTextFontSize = _calcPopTextFontSize(_popR, d._currentState.count, lollipopOpt.popText["font-weight"], + lollipopOpt.popText["font-family"]); + let _popTextFont = lollipopOpt.popText["font-weight"] + " " + _popTextFontSize + " " + lollipopOpt.popText["font-family"]; + + _popText.transition().duration(options.transitionTime) + .text(d._currentState.count) + .style("font", _popTextFont); + } else { + _popText.text(""); + } + }; + + var _calcPopTextFontSize = function (r, number, fontWeight, fontFamily) { + let _w = r * 1.75; + for (let _f = Math.ceil(_w); _f >= 0; _f--) { + let _textwidth = getTextWidth(number, fontWeight + " " + _f + "px " + fontFamily); + if (_textwidth <= _w) { + return _f + "px"; + } + } + return 0; + }; + + var _getPopGroupId = function (idx) { + return Prefix + "-" + uniqueID + "-lollipop-group-" + idx; + }; + + var _drawPie = function (d) { + let _chartG = d3.select(this); + + let _popR = d._currentState.radius = _getPopR(d); + + // add popCircle + _chartG.append("circle") + .attr("class", lollipopOpt.popClassName.circle) + .attr("cx", 0).attr("cy", 0) + .attr("r", _popR) + .attr("stroke", lollipopOpt.popCircle.stroke) + .attr("stroke-width", lollipopOpt.popCircle["stroke-width"]) + .attr("fill", "none"); + + // add pie (no change on axis change) + let _arc = d3.arc().innerRadius(0).outerRadius(_popR); + let _pie = _pieFun().value(function (_d) { return _d.value.count; }); + + // pie arc + let _pieSlice = _chartG.append("g").attr("class", lollipopOpt.popClassName.pie); + + // add pie arcs + _pieSlice.selectAll(lollipopOpt.popClassName.slice) + .data(_pie(d._currentState.summary)) + .enter().append("path") + .attr("d", _arc) + .attr("class", lollipopOpt.popClassName.slice) + .attr("fill", function (d) { + return lollipopOpt.popColorScheme(d.data.key); + }); + + _pieSlice.exit().remove(); + + // add text if large enough + let _popText = _chartG.append("text") + .attr("class", lollipopOpt.popClassName.text) + .attr("fill", lollipopOpt.popText.fill) + .style("font-family", lollipopOpt.popText["font-family"]) + .style("font-weight", lollipopOpt.popText["font-weight"]) + .attr("text-anchor", lollipopOpt.popText["text-anchor"]) + .attr("dy", lollipopOpt.popText.dy); + + if (_popR >= lollipopOpt.popParams.addNumRCutoff) { + let _popTextFontSize = _calcPopTextFontSize(_popR, + d._currentState.count, lollipopOpt.popText["font-weight"], + lollipopOpt.popText["font-family"]); + _popText.transition().duration(options.transitionTime) + .text(d._currentState.count) + .style("font-size", _popTextFontSize); + } else { + _popText.text(""); + } + + _chartG.on("mouseover", function (d) { _popMouseOver(d); }) + .on("mouseout", function (d) { _popMouseOut(d); }) + .on("click", function (d) { _popClick(d, _chartG); }); + }; + + var _drawCircle = function (d) { + let _chartG = d3.select(this); + + let _popR = d._currentState.radius = _getPopR(d); + + // circle + let _dominant = _getDataDominant(d); + // circle + _chartG.append("circle") + .attr("class", lollipopOpt.popClassName.circle) + .attr("cx", 0).attr("cy", 0) + .attr("r", _popR) + .attr("stroke", lollipopOpt.popCircle.stroke) + .attr("stroke-width", lollipopOpt.popCircle["stroke-width"]) + .attr("fill", _dominant.color); + + // add text if large enough + let _popText = _chartG.append("text") + .attr("class", lollipopOpt.popClassName.text) + .style("font-family", lollipopOpt.popText["font-family"]) + .style("font-weight", lollipopOpt.popText["font-weight"]) + .attr("text-anchor", lollipopOpt.popText["text-anchor"]) + .attr("dy", lollipopOpt.popText.dy); + + if (_popR >= lollipopOpt.popParams.addNumRCutoff) { + let _popTextFontSize = _calcPopTextFontSize(_popR, + d._currentState.count, lollipopOpt.popText["font-weight"], + lollipopOpt.popText["font-family"]); + _popText.transition().duration(options.transitionTime) + .text(d._currentState.count) + .attr("font-size", _popTextFontSize); + } else { + _popText.text(""); + } + + _chartG.on("mouseover", function (d) { _popMouseOver(d); }) + .on("mouseout", function (d) { _popMouseOut(d); }) + .on("click", function (d) { _popClick(d, _chartG); }); + }; + + var _drawLollipops = function () { + // lollipop groups + _lollipops = _mainViz.append("g") + .attr("class", lollipopOpt.lollipopClassName.group); + + // draw popline first + _popLines = _lollipops.append("g") + .attr("clip-path", "url(#" + lollipopOpt.defsId + ")") + .selectAll(lollipopOpt.lollipopClassName.line) + .data(snvData).enter() + .append("line") + .attr("x1", function (d) { return _getPopX(d); }) + .attr("x2", function (d) { return _getPopX(d); }) + .attr("y1", _yScale(0) + domainOpt.margin.top) + .attr("y2", function (d) { return _getPopY(d); }) + .attr("class", lollipopOpt.lollipopClassName.line) + .attr("stroke", lollipopOpt.lollipopLine.stroke) + .attr("stroke-width", lollipopOpt.lollipopLine["stroke-width"]); + + // then draw pops + _pops = _lollipops.append("g") + .attr("clip-path", "url(#" + lollipopOpt.defsId + ")") + .selectAll(lollipopOpt.lollipopClassName.pop) + .data(snvData).enter() + .append("g") + .attr("transform", function (d) { return "translate(" + _getPopX(d) + "," + _getPopY(d) + ")"; }) + .classed(lollipopOpt.lollipopClassName.pop, true) + .attr("id", function (d, i) { return _getPopGroupId(i); }); + + switch (chartType) { + case "pie": + _pops.each(_drawPie); + break; + default: + _pops.each(_drawCircle); + } + // add title + let _anchor, _xPos, _yPos; + if (lollipopOpt.title.text.length > 0) { + if (lollipopOpt.title.alignment == "start") { + _anchor = "start"; _xPos = 0; + } else if (lollipopOpt.title.alignment == "middle") { + _anchor = "middle"; _xPos = _mainW / 2; + } else { + _anchor = "end"; _xPos = _mainW; + } + + _yPos = -options.margin.top / 2; + + _mainViz.append("text") + .attr("id", lollipopOpt.title.id) + .style("font", lollipopOpt.title.font) + .attr("fill", lollipopOpt.title.color) + .attr("text-anchor", _anchor) + .attr("alignment-base", "alphabetic") + .attr("transform", "translate(" + _xPos + "," + _yPos + ")") + .attr("dy", lollipopOpt.title.dy) + .text(lollipopOpt.title.text); + } + }; + + var _mainVizZoomed = function () { + if (d3.event.sourceEvent && d3.event.sourceEvent.type === "brush") return; + + let _t = d3.event.transform; + _xRange = _t.rescaleX(_xScaleOrig).domain(); + + if (domainOpt.brush) { + _domainViz.select("." + domainOpt.className.brush) + .call(_domainBrush.move, _xScaleOrig.range().map(_t.invertX, _t)); + } + _updateX(); + }; + + var _calcOptions = function () { + // viz height + _svgH = lollipopOpt.height + domainOpt.height; + _svgW = width; + _mainH = lollipopOpt.height - options.margin.top - options.margin.bottom; + _mainW = _svgW - options.margin.left - options.margin.right; + _domainH = domainOpt.height - domainOpt.margin.top - domainOpt.margin.bottom; + _domainW = _mainW; + }; + + var _prepareData = function () { + if (!snvDataFormat.hasOwnProperty('x') || !snvDataFormat.hasOwnProperty('y')) { + throw "No X or Y columns specified in data set"; + } + // for the first time, summarize mutation factors and counts + if (!_snvInit) { + // => factor (or undefined): count + _currentStates = d3.nest() + .key(d => d[snvDataFormat.factor]) + .rollup(function (d) { return +d.length; }) + .object(snvData); + + // group by postion, sort + snvData = d3.nest() + .key(d => +d[snvDataFormat.x]) + .entries(snvData) + .sort((a, b) => a.key - b.key); + + // position and total + snvData.forEach(function (d) { + d["position"] = +d["key"]; delete d["key"]; + d["total"] = +d.values.length; + }); + } + + // parse each position + // use _currentState to record the current information for current + snvData.forEach(function (d) { + // group by factor, group by y, sort + //let _d = d.values.filter(function (d) { return d[snvOpt.factor] in _currentStates; }); + let _factorSummary = d3.nest() + .key(function (_) { return _[snvDataFormat.factor]; }) + .rollup(function (_) { + let _d = _.filter(function (_) { return _[snvDataFormat.factor] in _currentStates; }); + return { + count: +_d.length, + byY: d3.nest().key(function (_) { return _[snvDataFormat.y]; }) + .rollup(function (_) { return +_.length; }) + .entries(_d).sort(function (a, b) { return b.value - a.value; }), + }; + }).entries(d.values) + .sort(function (a, b) { return a.key > b.key; }); + //.sort(function (a, b) { return b.value.count - a.value.count; }); + + if (!_snvInit) { + d._currentState = {}; + d._currentState.showLabel = false; + } + d._currentState.count = d3.sum(_factorSummary.map(function (_) { return _.value.count; })); + d._currentState.summary = _factorSummary; + }); + + _snvInit = true; + + // calculate counts + _yValues = snvData + .map(function (_) { return +_._currentState.count; }) + .filter(function (_) { return _ > 0; }) + .sort(function (a, b) { return a - b; }); + + // calculate pop size boundary + _popYLower = Math.ceil(d3.quantile(_yValues, lollipopOpt.popParams.yLowerQuantile)); + _popYUpper = Math.floor(d3.quantile(_yValues, lollipopOpt.popParams.yUpperQuantile)); + + _yUpperValueArray = []; + }; + + var _getYMaxAfterNice = function (yMax) { + return d3.scaleLinear().domain([0, yMax]).range([_mainH, 0]).nice().domain()[1]; + }; + + var _calcYRange = function () { + if (_yValues.length == 0) { + _yRange = [0, 1]; + } else { + _yRange = d3.extent(_yValues); + } + // get yRange + _yRange[0] = Math.min(0, _yRange[0]); + _yValueMax = _yRange[1] = _getYMaxAfterNice(_yRange[1] * lollipopOpt.yPaddingRatio); + }; + + var _calcAxis = function () { + // y + _calcYRange(); + _yScale = d3.scaleLinear().domain(_yRange).range([_mainH, 0]); + _yAxis = d3.axisLeft(_yScale).tickSize(-_mainW).ticks(9); + + // x + _xRange = [0, domainData[domainDataFormat.length]]; + _xScale = d3.scaleLinear().domain(_xRange).range([0, _domainW]); + _xScaleOrig = d3.scaleLinear().domain(_xRange).range([0, _domainW]); + _xTicks = _appendValueToDomain(_xScale.ticks(), domainData[domainDataFormat.length], "aa"); + _xAxis = d3.axisBottom(_xScale).tickValues(_xTicks) + .tickFormat(function (_) { return this.parentNode.nextSibling ? _ : _ + " aa"; }); + }; + + var _updateYBahavior = function (yValue, behavior) { + // check behavior + behavior = behavior || Add; // default is to add + if (behavior != Add && behavior != Remove) behavior = Add; + + // calculate new yMax + yValue = _getYMaxAfterNice(yValue * lollipopOpt.yPaddingRatio); + yValue = Math.max(_yValueMax, yValue); + + // yValue > yValueMax + if (behavior === Add) { + _yUpperValueArray.push(yValue); + _yUpperValueArray = _yUpperValueArray.sort(); + } else { + let _idx = _yUpperValueArray.indexOf(yValue); + if (_idx != -1) { + _yUpperValueArray = _yUpperValueArray.slice(0, _idx).concat(_yUpperValueArray.slice(_idx + 1)); + } + } + + // if need to + let _yMax = (_yUpperValueArray.length == 0) ? _yValueMax : _yUpperValueArray[_yUpperValueArray.length - 1]; + + if (_yMax != _yRange[1]) { + _yRange[1] = _yMax; + _updateY(); + } + }; + + var _updateY = function () { + _yScale.domain(_yRange); + _domYAxis.transition().duration(options.transitionTime).call(_yReAxis); + + // update lines of lollipops + _popLines.transition().duration(options.transitionTime).attr("y2", function (d) { return _getPopY(d); }); + + // update pop group + _pops.transition().duration(options.transitionTime).attr("transform", function (d) { + return "translate(" + _getPopX(d) + "," + _getPopY(d) + ")"; + }); + }; + + var _yReAxis = function (g) { + var s = g.selection ? g.selection() : g; + g.call(_yAxis); + + s.select(".domain").remove(); + s.selectAll(".tick line").filter(Number).attr("stroke", "#aaa").attr("stroke-dasharray", "2,2"); + s.selectAll(".tick text").attr("x", -2).attr("dy", 2); + if (s !== g) g.selectAll(".tick text").attrTween("x", null).attrTween("dy", null); + }; + + var _drawAxis = function () { + //yRange[1] *= _lollipopOpt.yRatio; + _calcAxis(); + + _domYAxis = _mainViz.append("g").attr("class", "axis axis--y").call(_yReAxis); + + // y label text + let _anchor, _yPos; + if (lollipopOpt.axisLabel.alignment == "start") { + _anchor = "end"; _yPos = 0; + } else if (lollipopOpt.axisLabel.alignment == "middle") { + _anchor = "middle"; _yPos = _mainH / 2; + } else { + _anchor = "start"; _yPos = _mainH; + } + + _mainViz.append("text") + .attr("class", "yaxis axis-label") + .attr("transform", "translate(0," + _yPos + ")rotate(-90)") + .style("font", lollipopOpt.axisLabel.font) + .attr("fill", lollipopOpt.axisLabel.fill) + .attr("text-anchor", _anchor) + .attr("alignment-base", "middle") + .attr("dy", lollipopOpt.axisLabel.dy) + .text(lollipopOpt.ylab.text); + + // add x axis + _domXAxis = _mainViz.append("g") + .attr("clip-path", "url(#" + lollipopOpt.xAxisDefsId + ")") + .attr("class", "axis axis--x") + .attr("transform", "translate(0, " + (_mainH + domainOpt.height) + ")") + .call(_xAxis); + }; + + var _addBackground = function (g, bgColor, height, width) { + var bgLayer = g.append("g").attr("id", "background-layer"); + bgLayer.append("rect") + .attr("x", 0).attr("y", 0) + .attr("width", width).attr("height", height) + .attr("fill", bgColor); + }; + + var _initMainViz = function () { + _addBackground(_mainViz, lollipopOpt.background, _mainH, _mainW); + }; + + var _initDomainViz = function () { + _addBackground(_domainViz, domainOpt.background, _domainH, _domainW); + }; + + var _initTooltip = function () { + if (options.tooltip) { + _popTooltip = tooltip().attr("class", "d3-tip").offset([8, 0]) + .direction( + function (d) { + if (d.count > _yRange[1] / 2) return "s"; + else return "n"; + }) + .offset(function (d) { + if (d.count > _yRange[1] / 2) return [16, 0]; + else return [-12, 0]; + }) + .html(_popDetailHtml); + + _mainViz.call(_popTooltip); + } + }; + + var _initViz = function () { + if (!target) { + target = "g3_" + uniqueID; + d3.select("body").append("div").attr("id", target); + } + + svg = d3.select("#" + target).append("svg"); + svg.attr("width", _svgW).attr("height", _svgH) + .attr("xmlns", "http://www.w3.org/2000/svg") + .attr("xmlns:xlink", "http://www.w3.org/1999/xlink"); + + svg.classed(options.className, true) + .attr("id", options.chartID) + .style("background-color", options.background || "transparent"); + + // viz region + _viz = svg.append("g") + .attr("transform", "translate(" + options.margin.left + "," + options.margin.top + ")"); + + // lollipop viz + _mainViz = _viz.append("g").attr("id", lollipopOpt.id); + _initMainViz(); + + // annotation viz + _domainViz = _viz.append("g").attr("id", domainOpt.id) + .attr("transform", "translate(0, " + (_mainH + domainOpt.margin.top) + ")"); + _initDomainViz(); + + // tooltips and menu + _initTooltip(); + }; + + var _initBrush = function () { + _domainViz.select(".domain-x-brush").call(_domainBrush.move, [0, _domainW]); + }; + + var _addDefs = function () { + // defs + _mainViz.append("clipPath") + .attr("id", lollipopOpt.defsId) + .append("rect") + .attr("width", _mainW) + .attr("height", _mainH + domainOpt.margin.top); + + _mainViz.append("clipPath") + .attr("id", lollipopOpt.xAxisDefsId) + .append("rect") + .attr("x", -5) + .attr("width", _mainW + 20) // TODO + .attr("height", 30); + + // defs + _domainViz.append("clipPath") + .attr("id", domainOpt.defsId) + .append("rect") + .attr("width", _domainW) + .attr("height", _domainH); + }; + + // ===================== + // public functions + // ===================== + var lollipop = { + }; + + // getter and setter, e.g., lollipop.options.width; lollipop.options.snvData = []; + lollipop.options = { + // set target svg node + set chartTarget(_) { target = _; }, get chartTarget() { return target; }, + // set chart width + set chartWidth(_) { width = _; }, get chartWidth() { return width; }, + // set chart type (pie or circle) + set chartType(_) { if (_ && _ in ChartTypes) chartType = _; }, get chartType() { return chartType; }, + // get chart ID + get chartID() { return options.chartID }, + get chartHeight() { return +svg.attr("height") }, + + // chart margin (top / bottom / left / right) + set chartMargin(_) { options.margin = _; }, get chartMargin() { return options.margin; }, + // chart background + set chartBackground(_) { options.background = _; }, get charBackground() { return options.background; }, + + // chart animation transition time (ms) + set transitionTime(_) { options.transitionTime = _; }, get transitionTime() { return options.transitionTime; }, + + set tooltip(_) { options.tooltip = _; }, get tooltip() { return options.tooltip; }, + + // ylabel text + set yAxisLabel(_) { lollipopOpt.ylab.text = _; }, get yAxisLabel() { return lollipopOpt.ylab.text; }, + + // axis settings (label font / color / alignment / y-adjustment) + set axisLabelFont(_) { lollipopOpt.axisLabel.font = _; }, get axisLabelFont() { return lollipopOpt.axisLabel.font; }, + set axisLabelColor(_) { lollipopOpt.axisLabel.fill = _; }, get axisLabelColor() { return lollipopOpt.axisLabel.fill; }, + set axisLabelAlignment(_) { lollipopOpt.axisLabel.alignment = _; }, get axisLabelAlignment() { return lollipopOpt.axisLabel.alignment; }, + set axisLabelDy(_) { lollipopOpt.axisLabel.dy = _; }, get axisLabelDy() { return lollipopOpt.axisLabel.dy; }, + + // legend settings (show legend or not / legend margin / interactive legend or not) + set legend(_) { options.legend = _; }, get legend() { return options.legend; }, + set legendMargin(_) { options.legendOpt.margin = _; }, get legendMargin() { return options.legendOpt.margin; }, + set legendInteractive(_) { options.legendOpt.interactive = _; }, get legendInteractive() { return options.legendOpt.interactive; }, + set legendTitle(_) { options.legendOpt.title = _; }, get legendTitle() { return options.legendOpt.title; }, + get legendHeight() { return _legendHeight; }, + + // get lollipopTrack ID + get lollipopTrackID() { return lollipopOpt.id; }, + + // lollipop track height and background + set lollipopTrackHeight(_) { lollipopOpt.height = _; }, get lollipopTrackHeight() { return lollipopOpt.height; }, + set lollipopTrackBackground(_) { lollipopOpt.background = _; }, get lollipopTrackBackground() { return lollipopOpt.background; }, + + // pop circle size (min / max) + set lollipopPopMinSize(_) { lollipopOpt.popParams.rMin = _; }, get lollipopPopMinSize() { return lollipopOpt.popParams.rMin; }, + set lollipopPopMaxSize(_) { lollipopOpt.popParams.rMax = _; }, get lollipopPopMaxSize() { return lollipopOpt.popParams.rMax; }, + // pop cicle text (radius cutoff to show info, info text color) + set lollipopPopInfoLimit(_) { lollipopOpt.popParams.addNumRCutoff = _; }, get lollipopPopInfoLimit() { return lollipopOpt.popParams.addNumRCutoff; }, + set lollipopPopInfoColor(_) { lollipopOpt.popText.fill = _; }, get lollipopPopInfoColor() { return lollipopOpt.popText.fill; }, + + // lollipop line (color / width) + set lollipopLineColor(_) { lollipopOpt.lollipopLine.stroke = _; }, get lollipopLineColor() { return lollipopOpt.lollipopLine.stroke; }, + set lollipopLineWidth(_) { lollipopOpt.lollipopLine["stroke-width"] = _; }, get lollipopLineWidth() { return lollipopOpt.lollipopLine["stroke-width"]; }, + + // lollipop circle (color / width) + set lollipopCircleColor(_) { lollipopOpt.popCircle.stroke = _; }, get lollipopCircleColor() { return lollipopOpt.popCircle.stroke; }, + set lollipopCircleWidth(_) { lollipopOpt.popCircle["stroke-width"] = _; }, get lollipopCircleWidth() { return lollipopOpt.popCircle["stroke-width"]; }, + + // pop click label (font size ratio to pop size / minimal font size) + set lollipopLabelRatio(_) { lollipopOpt.popLabel.fontsizeToRadius = _; }, get lollipopLabelRatio() { return lollipopOpt.popLabel.fontsizeToRadius; }, + set lollipopLabelMinFontSize(_) { lollipopOpt.popLabel.minFontSize = _; }, get lollipopLabelMinFontSize() { return lollipopOpt.popLabel.minFontSize; }, + + // pop color scheme + set lollipopColorScheme(_) { lollipopOpt.popColorSchemeName = _; lollipop.popColorScheme = scaleOrdinal(_); }, + get lollipopColorScheme() { return lollipopOpt.popColorSchemeName;}, + + // title related settings (text / font / color / alignment / y-adjustment) + // note : font (font-style font-variant font-weight font-size/line-height font-family) + // i.e., italic small-caps normal 13px sans-serif + set titleText(_) { lollipopOpt.title.text = _; }, get titleText() { return lollipopOpt.title.text; }, + set titleFont(_) { lollipopOpt.title.font = _; }, get titleFont() { return lollipopOpt.title.font; }, + set titleColor(_) { lollipopOpt.title.color = _; }, get titleColor() { return lollipopOpt.title.color; }, + set titleAlignment(_) { lollipopOpt.title.alignment = _; }, get titleAlignment() { return lollipopOpt.title.alignment; }, + set titleDy(_) { lollipopOpt.title.dy = _; }, get titleY() { return lollipopOpt.title.dy; }, + + get annoID() { return domainOpt.id }, + + set annoHeight(_) { domainOpt.height = _; }, get annoHeight() { return domainOpt.height; }, + set annoMargin(_) { domainOpt.margin = _; }, get annoMargin() { return domainOpt.margin; }, + set annoBackground(_) { domainOpt.background = _; }, get annoBackground() { return domainOpt.background; }, + + set annoBarFill(_) { domainOpt.bar.background = _; }, get annoBarFill() { return domainOpt.bar.background; }, + set annoBarMargin(_) { domainOpt.bar.margin = _; }, get annoBarMargin() { return domainOpt.bar.margin; }, + + set domainColorScheme(_) { domainOpt.domain.colorSchemeName = _; domainOpt.domain.colorScheme = scaleOrdinal(_); }, + get domainColorScheme() { return domainOpt.domain.colorSchemeName; }, + set domainMargin(_) { domainOpt.domain.margin = _; }, get domainMargin() { return domainOpt.domain.margin; }, + set domainTextFont(_) { domainOpt.domain.label.font = _; }, get domainTextFont() { return domainOpt.domain.label.font; }, + set domainTextColor(_) { domainOpt.domain.label.color = _; }, get domainTextColor() { return domainOpt.domain.label.color; }, + + set brush(_) { domainOpt.brush = _; }, get brush() { return domainOpt.brush; }, + set zoom(_) { domainOpt.zoom = _; }, get zoom() { return domainOpt.zoom; }, + }; + + lollipop.setOptions = function (options) { + for (let _key in options) { + this.options[_key] = options[_key]; + } + }; + + lollipop.getOptions = function (options) { + let _options = {}; + let self = this; + options.forEach(function (opt) { + if (self.options[opt]) { + _options[opt] = self.options[opt]; + } + }); + return _options; + }; + + lollipop.destroy = function () { + svg.selectAll("*").remove(); + svg.remove(); + + if (options.tooltip && _chartInit) { + _popTooltip.destroy(); + } + }; + + lollipop.refresh = function () { + this.destroy(); + this.draw(); + }; + + lollipop.data = { + set snvData(_) { snvData = _; }, get snvData() { return snvData; }, + set domainData(_) { domainData = _; }, get domainData() { return domainData; }, + }; + + lollipop.format = { + set snvData(_) { snvDataFormat = _; }, get snvData() { return snvDataFormat; }, + set domainData(_) { domainDataFormat = _; }, get domainData() { return domainDataFormat; }, + }; + + lollipop.draw = function() { + // check data format + snvDataFormat = snvDataFormat || SnvDataDefaultFormat; + domainDataFormat = domainDataFormat || DomainDataDefaultFormat; + + if (snvDataFormat.hasOwnProperty('factor')) { + _byFactor = true; + } else { + _byFactor = false; + lollipop.format.snvData.factor = snvDataFormat.factor = Undefined; + snvData.forEach(function (d) { d[snvDataFormat.factor] = Undefined; }); + } + + _calcOptions(); + + // prepare data + _prepareData(); + + // initalize viz + _initViz(); + + // calculate range, Axis + _drawAxis(); + + // add defs + _addDefs(); + + // add domain panel + _drawDomain(); + + // add lollipops + _drawLollipops(); + if (options.legend) { + _addLollipopLegend(); + } + + if (domainOpt.brush) { + _initBrush(); + } + + _chartInit = true; + }; + + return lollipop; +} + +exports.getTextWidth = getTextWidth; +exports.getUniqueID = getUniqueID; +exports.palettes = palettes; +exports.defaultPalette = defaultPalette; +exports.getPalette = getPalette; +exports.listPalettes = listPalettes; +exports.scaleOrdinal = scaleOrdinal; +exports.output = output; +exports.legend = legend; +exports.tooltip = tooltip; +exports.Lollipop = Lollipop; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/inst/htmlwidgets/lib/g3Lollipop/g3Lollipop.min.css b/inst/htmlwidgets/lib/g3Lollipop/g3Lollipop.min.css new file mode 100644 index 0000000..ff0b15f --- /dev/null +++ b/inst/htmlwidgets/lib/g3Lollipop/g3Lollipop.min.css @@ -0,0 +1 @@ +.g3-chart{font-family:"Open Sans",verdana,arial,sans-serif;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.d3-tip{line-height:1;padding:3px;color:#343434;background:rgba(233,233,233,0.9);border:1px solid #a6a6a6;border-radius:6px;box-shadow:3px 3px #cacaca;font-size:12px}.d3-tip:after{box-sizing:border-box;display:inline;font-size:12px;line-height:1;width:100%;color:#a6a6a6;content:"\25BC";position:absolute;text-align:center}.d3-tip.n:after{margin:-2px 0 0 0;top:100%;left:0}.d3-tip.s:after{margin:-10px 0 0 0;top:0;left:0;content:"\25B2"}.d3-tip table caption{font-size:14px;color:#034e7b;font-weight:bold;text-align:left;padding:.6em 0}.d3-tip dl{margin-bottom:10px !important}.d3-tip dl dd{margin-left:120px !important}.d3-tip dl dt{width:110px !important}.popMain{cursor:pointer}.axis{font-family:san-serif;font-size:10px}.axis path,.axis line{fill:none;stroke:#c4c8ca;stroke-width:1;shape-rendering:crispEdges}.g3-legend-interactive-layer{cursor:pointer}.non-select{user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.g3-lollipop-annotation-domain{cursor:pointer}div.note{font-size:.92em}.pure-table,table{margin-bottom:5px;border-collapse:collapse;border-spacing:0}.pure-table{empty-cells:show;border:1px solid #cbcbcb}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:center;vertical-align:bottom}.pure-table th .header{color:steelblue !important}.pure-table td{background-color:transparent}.pure-table-odd td,.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td,.pure-table-bordered th{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0}g.domain-x-brush>rect.selection{fill-opacity:.2;fill:none;stroke-width:1;stroke:#969696}g.domain-x-brush>rect.handle{fill:#666} \ No newline at end of file diff --git a/inst/htmlwidgets/lib/g3Lollipop/g3Lollipop.min.js b/inst/htmlwidgets/lib/g3Lollipop/g3Lollipop.min.js new file mode 100644 index 0000000..3ce940e --- /dev/null +++ b/inst/htmlwidgets/lib/g3Lollipop/g3Lollipop.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("d3")):"function"==typeof define&&define.amd?define(["exports","d3"],e):e(t.g3=t.g3||{},t.d3)}(this,function(t,e){"use strict";function n(t,e){var n=(document.getElementById("canvas")||document.createElement("canvas")).getContext("2d");return n.font=e,n.measureText(t).width}function r(t,e){return t=t||1e5,e=e||1e6-1,Math.floor(Math.random()*(e-t)+t)}e=e&&e.hasOwnProperty("default")?e.default:e;var a={bottlerocket1:["#A42820","#5F5647","#9B110E","#3F5151","#4E2A1E","#550307","#0C1707"],bottlerocket2:["#FAD510","#CB2314","#273046","#354823","#1E1E1E"],rushmore1:["#E1BD6D","#F2300F","#35274A","#EABE94","#0B775E"],royal1:["#899DA4","#C93312","#FAEFD1","#DC863B"],royal2:["#9A8822","#F5CDB4","#F8AFA8","#FDDDA0","#74A089"],zissou1:["#3B9AB2","#78B7C5","#EBCC2A","#E1AF00","#F21A00"],darjeeling1:["#FF0000","#00A08A","#F2AD00","#F98400","#5BBCD6"],darjeeling2:["#ECCBAE","#046C9A","#D69C4E","#ABDDDE","#000000"],chevalier1:["#446455","#FDD262","#D3DDDC","#C7B19C"],fantasticfox1:["#DD8D29","#E2D200","#46ACC8","#E58601","#B40F20"],moonrise1:["#F3DF6C","#CEAB07","#D5D5D3","#24281A"],moonrise2:["#798E87","#C27D38","#CCC591","#29211F"],moonrise3:["#85D4E3","#F4B5BD","#9C964A","#CDC08C","#FAD77B"],cavalcanti1:["#D8B70A","#02401B","#A2A475","#81A88D","#972D15"],grandbudapest1:["#F1BB7B","#FD6467","#5B1A18","#D67236"],grandbudapest2:["#E6A0C4","#C6CDF7","#D8A499","#7294D4"],google16:["#3366cc","#dc3912","#ff9900","#109618","#990099","#0099c6","#dd4477","#66aa00","#b82e2e","#316395","#994499","#22aa99","#aaaa11","#6633cc","#e67300","#8b0707","#651067","#329262","#5574a6","#3b3eac"],google5:["#008744","#0057e7","#d62d20","#ffa700","#ffffff"],material1:["#263238","#212121","#3e2723","#dd2c00","#ff6d00","#ffab00","#ffd600","#aeea00","#64dd17","#00c853","#00bfa5","#00b8d4","#0091ea","#2962ff","#304ffe","#6200ea","#aa00ff","#c51162","#d50000"],pie1:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99"],pie2:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00"],pie3:["#495769","#A0C2BB","#F4A775","#F4C667","#F37361"],pie4:["#FA7921","#E55934","#9BC53D","#FDE74C","#5BC0EB"],pie5:["#5DA5DA","#4D4D4D","#60BD68","#B2912F","#B276B2","#F15854","#FAA43A"],pie6:["#537ea2","#42a593","#9f1a1a","#7c5f95","#61a070"],pie7:["#bddff9","#1e72bf","#ead1ab","#a2dbc5","#c7ae7d"],breakfast:["#b6411a","#eec3d8","#4182dd","#ecf0c8","#2d6328"],set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],category10:["#1f77b4","#2ca02c","#d62728","#ff7f0e","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"],pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#bf5b17","#386cb0","#f0027f","#666666"],dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"]};function o(){return a.google16}function i(t){return t in a?a[t]:o}function l(t){return e.scaleOrdinal(i(t))}var s=s||function(t){if(!(void 0===t||"undefined"!=typeof navigator&&/MSIE [1-9]\./.test(navigator.userAgent))){var e=t.document,n=function(){return t.URL||t.webkitURL||t},r=e.createElementNS("http://www.w3.org/1999/xhtml","a"),a="download"in r,o=/constructor/i.test(t.HTMLElement)||t.safari,i=/CriOS\/[\d]+/.test(navigator.userAgent),l=t.setImmediate||t.setTimeout,s=function(t){l(function(){throw t},0)},c=function(t){setTimeout(function(){"string"==typeof t?n().revokeObjectURL(t):t.remove()},4e4)},u=function(t){return/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob([String.fromCharCode(65279),t],{type:t.type}):t},p=function(e,p,d){d||(e=u(e));var f,m=this,g="application/octet-stream"===e.type,h=function(){!function(t,e,n){for(var r=(e=[].concat(e)).length;r--;){var a=t["on"+e[r]];if("function"==typeof a)try{a.call(t,n||t)}catch(t){s(t)}}}(m,"writestart progress write writeend".split(" "))};if(m.readyState=m.INIT,a)return f=n().createObjectURL(e),void l(function(){var t,e;r.href=f,r.download=p,t=r,e=new MouseEvent("click"),t.dispatchEvent(e),h(),c(f),m.readyState=m.DONE},0);!function(){if((i||g&&o)&&t.FileReader){var r=new FileReader;return r.onloadend=function(){var e=i?r.result:r.result.replace(/^data:[^;]*;/,"data:attachment/file;");t.open(e,"_blank")||(t.location.href=e),e=void 0,m.readyState=m.DONE,h()},r.readAsDataURL(e),void(m.readyState=m.INIT)}f||(f=n().createObjectURL(e)),g?t.location.href=f:t.open(f,"_blank")||(t.location.href=f);m.readyState=m.DONE,h(),c(f)}()},d=p.prototype;return"undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(t,e,n){return e=e||t.name||"download",n||(t=u(t)),navigator.msSaveOrOpenBlob(t,e)}:(d.abort=function(){},d.readyState=d.INIT=0,d.WRITING=1,d.DONE=2,d.error=d.onwritestart=d.onprogress=d.onwrite=d.onabort=d.onerror=d.onwriteend=null,function(t,e,n){return new p(t,e||t.name||"download",n)})}}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||void 0);function c(t,r,a){var o=!0,i={left:10,right:0,top:5,bottom:5},l=e.dispatch("legendClick","legendDblclick","legendMouseover","legendMouseout");r=r||!1,a=a||[];var s,c=0,u="normal 12px sans-serif",p="black",d="bold 12px sans-serif",f="black";return{set target(e){t=e},get target(){return t},set title(t){r=t},get title(){return r},set series(t){a=t},get series(){return a},set margin(t){i=t},get margin(){return i},set dispatch(t){l=t},get dispatch(){return l},set interactive(t){o=t},get interactive(){return o},set labelFont(t){u=t},get labelFont(){return u},set labelColor(t){p=t},get labelColor(){return p},set titleFont(t){d=t},get titleFont(){return d},set titleColor(t){f=t},get titleColor(){return f},get height(){return c},addSeries:function(t){t.key in Object.keys(a)||a.push(t)},getLegendStatus:function(){return a.map(function(t){return{key:t.key,status:t._status||!0}})},destroy:function(){s.select(".g3-legend").selectAll("*").remove()},draw:function(){a.forEach(t=>t._status=!0);let m=+(s=e.select("#"+t)).attr("width"),g=+s.attr("height"),h=m-(i.left||0)-(i.right||0),b=s.append("g").attr("class","g3-legend").attr("transform","translate("+i.left+","+(g+i.top)+")"),y=r?n(r,d):0,x=Math.min(y+6,1/3*h),v=h-x,C={x:0,y:8},w={x:0,y:8};r&&b.append("g").attr("class","g3-legend-title").append("text").attr("x",x-6).attr("y",8).attr("text-anchor","end").attr("fill",f).style("font",d).attr("dy","0.35em").text(r);b.append("g").attr("class","g3-legend-item-container").attr("transform","translate("+x+", 0)").selectAll(".g3-legend-item").data(a).enter().append("g").attr("class","g3 g3-legend-item").style("cursor",o?"pointer":"default").each(function(t){let r=e.select(this),a=t.value.label||t.key;var i;i=n(a,u),(i+=23)>v-w.x?(C.x=0,C.y=w.y+16,w.x=i,w.y=C.y):(C.x=w.x,w.x+=i);let s=C.x+12+3,c=C.y;r.attr("state","enabled").attr("defaultColor",t.value.fill),r.append("circle").attr("cx",s).attr("cy",c).attr("r",3).attr("fill",t.value.fill||"transparent").attr("stroke-width",1).attr("stroke","grey"),s+=8,r.append("text").attr("x",s).attr("y",c).attr("text-anchor","start").attr("fill",p).style("font",u).attr("dy","0.35em").text(a),r.on("click",function(){var e,n,a,i;o&&(n=(e=r).attr("defaultColor"),a=e.select("circle"),i=e.select("text"),"enabled"==e.attr("state")?(e.attr("state","disabled"),a.attr("fill","transparent").attr("stroke",n),i.style("opacity",.5)):(e.attr("state","enabled"),a.attr("fill",n).attr("stroke","grey"),i.style("opacity",1)),l.call("legendClick",this,t.key,"enabled"==r.attr("state")),t._status="enabled"==r.attr("state"))})}),c=i.top+C.y+8+i.bottom,s.attr("height",c+g)}}}function u(){var t=function(){return"n"},n=function(){return[0,0]},r=function(){return" "},a=document.body,o=d(),i=null,l=null,s=null;function c(t){(i=function(t){var e=t.node();if(!e)return null;if("svg"===e.tagName.toLowerCase())return e;return e.ownerSVGElement}(t))&&(l=i.createSVGPoint(),a.appendChild(o))}c.show=function(){var e=Array.prototype.slice.call(arguments);e[e.length-1]instanceof SVGElement&&(s=e.pop());var o,i=r.apply(this,e),l=n.apply(this,e),d=t.apply(this,e),m=f(),g=p.length,h=document.documentElement.scrollTop||a.scrollTop,b=document.documentElement.scrollLeft||a.scrollLeft;for(m.html(i).style("opacity",1).style("pointer-events","all");g--;)m.classed(p[g],!1);return o=u.get(d).apply(this),m.classed(d,!0).style("top",o.top+l[0]+h+"px").style("left",o.left+l[1]+b+"px"),c},c.hide=function(){return f().style("opacity",0).style("pointer-events","none"),c},c.attr=function(t,n){if(arguments.length<2&&"string"==typeof t)return f().attr(t);var r=Array.prototype.slice.call(arguments);return e.selection.prototype.attr.apply(f(),r),c},c.style=function(t,n){if(arguments.length<2&&"string"==typeof t)return f().style(t);var r=Array.prototype.slice.call(arguments);return e.selection.prototype.style.apply(f(),r),c},c.direction=function(e){return arguments.length?(t=null==e?e:g(e),c):t},c.offset=function(t){return arguments.length?(n=null==t?t:g(t),c):n},c.html=function(t){return arguments.length?(r=null==t?t:g(t),c):r},c.rootElement=function(t){return arguments.length?(a=null==t?t:g(t),c):a},c.destroy=function(){return o&&(f().remove(),o=null),c};var u=e.map({n:function(){var t=m(this);return{top:t.n.y-o.offsetHeight,left:t.n.x-o.offsetWidth/2}},s:function(){var t=m(this);return{top:t.s.y,left:t.s.x-o.offsetWidth/2}},e:function(){var t=m(this);return{top:t.e.y-o.offsetHeight/2,left:t.e.x}},w:function(){var t=m(this);return{top:t.w.y-o.offsetHeight/2,left:t.w.x-o.offsetWidth}},nw:function(){var t=m(this);return{top:t.nw.y-o.offsetHeight,left:t.nw.x-o.offsetWidth}},ne:function(){var t=m(this);return{top:t.ne.y-o.offsetHeight,left:t.ne.x}},sw:function(){var t=m(this);return{top:t.sw.y,left:t.sw.x-o.offsetWidth}},se:function(){var t=m(this);return{top:t.se.y,left:t.se.x}}}),p=u.keys();function d(){var t=e.select(document.createElement("div"));return t.style("position","absolute").style("top",0).style("opacity",0).style("pointer-events","none").style("box-sizing","border-box"),t.node()}function f(){return null==o&&(o=d(),a.appendChild(o)),e.select(o)}function m(t){for(var n=s||e.event.target;null==n.getScreenCTM&&null!=n.parentNode;)n=n.parentNode;var r={},a=n.getScreenCTM(),o=n.getBBox(),i=o.width,c=o.height,u=o.x,p=o.y;return l.x=u,l.y=p,r.nw=l.matrixTransform(a),l.x+=i,r.ne=l.matrixTransform(a),l.y+=c,r.se=l.matrixTransform(a),l.x-=i,r.sw=l.matrixTransform(a),l.y-=c/2,r.w=l.matrixTransform(a),l.x+=i,r.e=l.matrixTransform(a),l.x-=i/2,l.y-=c/2,r.n=l.matrixTransform(a),l.y+=c,r.s=l.matrixTransform(a),r}function g(t){return"function"==typeof t?t:function(){return t}}return c}t.getTextWidth=n,t.getUniqueID=r,t.palettes=a,t.defaultPalette=o,t.getPalette=i,t.listPalettes=function(){return Object.keys(a)},t.scaleOrdinal=l,t.output=function(){function t(t,e){return(t=t||n)+"."+e}function e(t){t.setAttribute("xmlns","http://www.w3.org/2000/svg"),t.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink"),function(t,e){var n=document.createElement("style");n.setAttribute("type","text/css"),n.innerHTML=t;var r=e.hasChildNodes()?e.children[0]:null;e.insertBefore(n,r)}(function(t){var e=[];e.push("#"+t.id);for(let n=0;n=w?Q.popParams.rMax:e<=k?Q.popParams.rMin:(e-k)/(w-k)*(Q.popParams.rMax-Q.popParams.rMin)+Q.popParams.rMin},mt=function(t){let n="";return at?(n+=`
\n \n \n \n \n \n \n \n \n \n \n `,t._currentState.summary.forEach(function(r){r.value.count>0&&(n+=`\n \n \n \n \n \n ")}),n+="\n \n
Position ${t.position}
Class#Change%
${r.key} ${r.value.count} `+gt(r.value.byY)+""+e.format(".1f")(r.value.count/t._currentState.count*100)+"%
"):(n+=`\n \n \n \n \n \n \n \n \n `,t._currentState.summary[0].value.byY.forEach(function(r){n+=`\n \n \n \n "}),n+="\n \n
Position ${t.position}
Change%
${r.key} `+e.format(".1f")(r.value/t._currentState.count*100)+"%
"),n},gt=function(t){var e="";return t.forEach(function(t){e+=`${t.key} (n=${t.value})
`}),e},ht=function(t,e){X.tooltip&&nt.show(t,e)},bt=function(t){X.tooltip&&nt.hide(t)},yt=function(t){let e,n,r,a=-1;return t._currentState.summary.forEach(function(t){t.value.count>0&&t.value.count>a&&(e=t.value.byY[0].key,r=t,n=Q.popColorScheme(t.key),a=t.value.count)}),{class:r,entry:e,count:a,color:n}},xt=function(t,e){if(t._currentState.showLabel){t._currentState.showLabel=!1;let n=e.select("."+Q.popClassName.label);Nt(n.attr("yMaxValue"),-1),n.transition().duration(X.transitionTime).attr("transform","rotate(0)").remove()}else{t._currentState.showLabel=!0;let r=yt(t),a=Math.max(t._currentState.radius*Q.popLabel.fontsizeToRadius,Q.popLabel.minFontSize)+"px",o=Q.popLabel["font-weight"]+" "+a+" "+Q.popLabel["font-family"],i=n(r.entry,o),l=t._currentState.radius+Q.popLabel.padding+i,s=(B[1]-B[0])*(l/V),c=t._currentState.count+s;Nt(c,1),e.append("text").classed(Q.popClassName.label,!0).attr("x",-t._currentState.radius-Q.popLabel.padding).attr("y",0).attr("yMaxValue",c).text(r.entry).style("fill",r.color).style("font",o).attr("dy",".35em").attr("text-anchor","end").transition().duration(X.transitionTime).attr("transform","rotate(90)")}},vt=function(){return e.pie().sort(null)},Ct=function(t){let n=e.select(this);t._currentState.showLabel&&(n.select("."+Q.popClassName.label).remove(),t._currentState.showLabel=!1);let r=t._currentState.radius=ft(t);switch(a){case"pie":!function(t,n,r){let a=e.arc().innerRadius(0).outerRadius(r),o=vt().value(function(t){return t.value.count}),i=n.select("."+Q.popClassName.pie).selectAll("path."+Q.popClassName.slice).data(o(t._currentState.summary));i.enter().insert("path"),i.transition().duration(X.transitionTime).attrTween("d",function(t){this._current=this._current||t;let n=e.interpolate(this._current,t);return this._current=n(0),function(t){return a(n(t))}}),i.exit().remove()}(t,n,r);break;default:!function(t,e,n){let r=e.select("."+Q.popClassName.circle),a=yt(t).color||"transparent";r.transition().duration(X.transitionTime).attr("r",n).attr("fill",a)}(t,n,r)}let o=n.select("."+Q.popClassName.text);if(r>=Q.popParams.addNumRCutoff){let e=wt(r,t._currentState.count,Q.popText["font-weight"],Q.popText["font-family"]),n=Q.popText["font-weight"]+" "+e+" "+Q.popText["font-family"];o.transition().duration(X.transitionTime).text(t._currentState.count).style("font",n)}else o.text("")},wt=function(t,e,r,a){let o=1.75*t;for(let t=Math.ceil(o);t>=0;t--)if(n(e,r+" "+t+"px "+a)<=o)return t+"px";return 0},kt=function(t){let n=e.select(this),r=t._currentState.radius=ft(t);n.append("circle").attr("class",Q.popClassName.circle).attr("cx",0).attr("cy",0).attr("r",r).attr("stroke",Q.popCircle.stroke).attr("stroke-width",Q.popCircle["stroke-width"]).attr("fill","none");let a=e.arc().innerRadius(0).outerRadius(r),o=vt().value(function(t){return t.value.count}),i=n.append("g").attr("class",Q.popClassName.pie);i.selectAll(Q.popClassName.slice).data(o(t._currentState.summary)).enter().append("path").attr("d",a).attr("class",Q.popClassName.slice).attr("fill",function(t){return Q.popColorScheme(t.data.key)}),i.exit().remove();let l=n.append("text").attr("class",Q.popClassName.text).attr("fill",Q.popText.fill).style("font-family",Q.popText["font-family"]).style("font-weight",Q.popText["font-weight"]).attr("text-anchor",Q.popText["text-anchor"]).attr("dy",Q.popText.dy);if(r>=Q.popParams.addNumRCutoff){let e=wt(r,t._currentState.count,Q.popText["font-weight"],Q.popText["font-family"]);l.transition().duration(X.transitionTime).text(t._currentState.count).style("font-size",e)}else l.text("");n.on("mouseover",function(t){ht(t)}).on("mouseout",function(t){bt(t)}).on("click",function(t){xt(t,n)})},St=function(t){let n=e.select(this),r=t._currentState.radius=ft(t),a=yt(t);n.append("circle").attr("class",Q.popClassName.circle).attr("cx",0).attr("cy",0).attr("r",r).attr("stroke",Q.popCircle.stroke).attr("stroke-width",Q.popCircle["stroke-width"]).attr("fill",a.color);let o=n.append("text").attr("class",Q.popClassName.text).style("font-family",Q.popText["font-family"]).style("font-weight",Q.popText["font-weight"]).attr("text-anchor",Q.popText["text-anchor"]).attr("dy",Q.popText.dy);if(r>=Q.popParams.addNumRCutoff){let e=wt(r,t._currentState.count,Q.popText["font-weight"],Q.popText["font-family"]);o.transition().duration(X.transitionTime).text(t._currentState.count).attr("font-size",e)}else o.text("");n.on("mouseover",function(t){ht(t)}).on("mouseout",function(t){bt(t)}).on("click",function(t){xt(t,n)})},Tt=function(){switch(x=b.append("g").attr("class",Q.lollipopClassName.group),v=x.append("g").attr("clip-path","url(#"+Q.defsId+")").selectAll(Q.lollipopClassName.line).data(K).enter().append("line").attr("x1",function(t){return pt(t)}).attr("x2",function(t){return pt(t)}).attr("y1",F(0)+J.margin.top).attr("y2",function(t){return dt(t)}).attr("class",Q.lollipopClassName.line).attr("stroke",Q.lollipopLine.stroke).attr("stroke-width",Q.lollipopLine["stroke-width"]),C=x.append("g").attr("clip-path","url(#"+Q.defsId+")").selectAll(Q.lollipopClassName.pop).data(K).enter().append("g").attr("transform",function(t){return"translate("+pt(t)+","+dt(t)+")"}).classed(Q.lollipopClassName.pop,!0).attr("id",function(t,e){return i+"-"+Y+"-lollipop-group-"+e}),a){case"pie":C.each(kt);break;default:C.each(St)}let t,e,n;Q.title.text.length>0&&("start"==Q.title.alignment?(t="start",e=0):"middle"==Q.title.alignment?(t="middle",e=$/2):(t="end",e=$),n=-X.margin.top/2,b.append("text").attr("id",Q.title.id).style("font",Q.title.font).attr("fill",Q.title.color).attr("text-anchor",t).attr("alignment-base","alphabetic").attr("transform","translate("+e+","+n+")").attr("dy",Q.title.dy).text(Q.title.text))},Lt=function(){if(e.event.sourceEvent&&"brush"===e.event.sourceEvent.type)return;let t=e.event.transform;A=t.rescaleX(R).domain(),J.brush&&y.select("."+J.className.brush).call(O.move,R.range().map(t.invertX,t)),ct()},At=function(){if(!f.hasOwnProperty("x")||!f.hasOwnProperty("y"))throw"No X or Y columns specified in data set";tt||(ot=e.nest().key(t=>t[f.factor]).rollup(function(t){return+t.length}).object(K),(K=e.nest().key(t=>+t[f.x]).entries(K).sort((t,e)=>t.key-e.key)).forEach(function(t){t.position=+t.key,delete t.key,t.total=+t.values.length})),K.forEach(function(t){let n=e.nest().key(function(t){return t[f.factor]}).rollup(function(t){let n=t.filter(function(t){return t[f.factor]in ot});return{count:+n.length,byY:e.nest().key(function(t){return t[f.y]}).rollup(function(t){return+t.length}).entries(n).sort(function(t,e){return e.value-t.value})}}).entries(t.values).sort(function(t,e){return t.key>e.key});tt||(t._currentState={},t._currentState.showLabel=!1),t._currentState.count=e.sum(n.map(function(t){return t.value.count})),t._currentState.summary=n}),tt=!0,P=K.map(function(t){return+t._currentState.count}).filter(function(t){return t>0}).sort(function(t,e){return t-e}),k=Math.ceil(e.quantile(P,Q.popParams.yLowerQuantile)),w=Math.floor(e.quantile(P,Q.popParams.yUpperQuantile)),et=[]},Dt=function(t){return e.scaleLinear().domain([0,t]).range([V,0]).nice().domain()[1]},_t=function(){(B=0==P.length?[0,1]:e.extent(P))[0]=Math.min(0,B[0]),L=B[1]=Dt(B[1]*Q.yPaddingRatio)},Et=function(){_t(),F=e.scaleLinear().domain(B).range([V,0]),M=e.axisLeft(F).tickSize(-$).ticks(9),A=[0,Z[m.length]],D=e.scaleLinear().domain(A).range([0,U]),R=e.scaleLinear().domain(A).range([0,U]),E=function(t,e){if(void 0===e||t.length<=1||t[t.length-1]>=e)return t;var n=Math.abs(t[1]-t[0]);return Math.abs(e-t[t.length-1])>n/2?t.push(e):t[t.length-1]=e,t}(D.ticks(),Z[m.length]),_=e.axisBottom(D).tickValues(E).tickFormat(function(t){return this.parentNode.nextSibling?t:t+" aa"})},Nt=function(t,e){if(1!=(e=e||1)&&-1!=e&&(e=1),t=Dt(t*Q.yPaddingRatio),t=Math.max(L,t),1===e)et.push(t),et=et.sort();else{let e=et.indexOf(t);-1!=e&&(et=et.slice(0,e).concat(et.slice(e+1)))}let n=0==et.length?L:et[et.length-1];n!=B[1]&&(B[1]=n,Bt())},Bt=function(){F.domain(B),z.transition().duration(X.transitionTime).call(Ft),v.transition().duration(X.transitionTime).attr("y2",function(t){return dt(t)}),C.transition().duration(X.transitionTime).attr("transform",function(t){return"translate("+pt(t)+","+dt(t)+")"})},Ft=function(t){var e=t.selection?t.selection():t;t.call(M),e.select(".domain").remove(),e.selectAll(".tick line").filter(Number).attr("stroke","#aaa").attr("stroke-dasharray","2,2"),e.selectAll(".tick text").attr("x",-2).attr("dy",2),e!==t&&t.selectAll(".tick text").attrTween("x",null).attrTween("dy",null)},Mt=function(t,e,n,r){t.append("g").attr("id","background-layer").append("rect").attr("x",0).attr("y",0).attr("width",r).attr("height",n).attr("fill",e)},Pt=function(){t||(t="g3_"+Y,e.select("body").append("div").attr("id",t)),(g=e.select("#"+t).append("svg")).attr("width",G).attr("height",q).attr("xmlns","http://www.w3.org/2000/svg").attr("xmlns:xlink","http://www.w3.org/1999/xlink"),g.classed(X.className,!0).attr("id",X.chartID).style("background-color",X.background||"transparent"),h=g.append("g").attr("transform","translate("+X.margin.left+","+X.margin.top+")"),b=h.append("g").attr("id",Q.id),Mt(b,Q.background,V,$),y=h.append("g").attr("id",J.id).attr("transform","translate(0, "+(V+J.margin.top)+")"),Mt(y,J.background,j,U),X.tooltip&&(nt=u().attr("class","d3-tip").offset([8,0]).direction(function(t){return t.count>B[1]/2?"s":"n"}).offset(function(t){return t.count>B[1]/2?[16,0]:[-12,0]}).html(mt),b.call(nt))},zt={};return zt.options={set chartTarget(e){t=e},get chartTarget(){return t},set chartWidth(t){o=t},get chartWidth(){return o},set chartType(t){t&&t in s&&(a=t)},get chartType(){return a},get chartID(){return X.chartID},get chartHeight(){return+g.attr("height")},set chartMargin(t){X.margin=t},get chartMargin(){return X.margin},set chartBackground(t){X.background=t},get charBackground(){return X.background},set transitionTime(t){X.transitionTime=t},get transitionTime(){return X.transitionTime},set tooltip(t){X.tooltip=t},get tooltip(){return X.tooltip},set yAxisLabel(t){Q.ylab.text=t},get yAxisLabel(){return Q.ylab.text},set axisLabelFont(t){Q.axisLabel.font=t},get axisLabelFont(){return Q.axisLabel.font},set axisLabelColor(t){Q.axisLabel.fill=t},get axisLabelColor(){return Q.axisLabel.fill},set axisLabelAlignment(t){Q.axisLabel.alignment=t},get axisLabelAlignment(){return Q.axisLabel.alignment},set axisLabelDy(t){Q.axisLabel.dy=t},get axisLabelDy(){return Q.axisLabel.dy},set legend(t){X.legend=t},get legend(){return X.legend},set legendMargin(t){X.legendOpt.margin=t},get legendMargin(){return X.legendOpt.margin},set legendInteractive(t){X.legendOpt.interactive=t},get legendInteractive(){return X.legendOpt.interactive},set legendTitle(t){X.legendOpt.title=t},get legendTitle(){return X.legendOpt.title},get legendHeight(){return W},get lollipopTrackID(){return Q.id},set lollipopTrackHeight(t){Q.height=t},get lollipopTrackHeight(){return Q.height},set lollipopTrackBackground(t){Q.background=t},get lollipopTrackBackground(){return Q.background},set lollipopPopMinSize(t){Q.popParams.rMin=t},get lollipopPopMinSize(){return Q.popParams.rMin},set lollipopPopMaxSize(t){Q.popParams.rMax=t},get lollipopPopMaxSize(){return Q.popParams.rMax},set lollipopPopInfoLimit(t){Q.popParams.addNumRCutoff=t},get lollipopPopInfoLimit(){return Q.popParams.addNumRCutoff},set lollipopPopInfoColor(t){Q.popText.fill=t},get lollipopPopInfoColor(){return Q.popText.fill},set lollipopLineColor(t){Q.lollipopLine.stroke=t},get lollipopLineColor(){return Q.lollipopLine.stroke},set lollipopLineWidth(t){Q.lollipopLine["stroke-width"]=t},get lollipopLineWidth(){return Q.lollipopLine["stroke-width"]},set lollipopCircleColor(t){Q.popCircle.stroke=t},get lollipopCircleColor(){return Q.popCircle.stroke},set lollipopCircleWidth(t){Q.popCircle["stroke-width"]=t},get lollipopCircleWidth(){return Q.popCircle["stroke-width"]},set lollipopLabelRatio(t){Q.popLabel.fontsizeToRadius=t},get lollipopLabelRatio(){return Q.popLabel.fontsizeToRadius},set lollipopLabelMinFontSize(t){Q.popLabel.minFontSize=t},get lollipopLabelMinFontSize(){return Q.popLabel.minFontSize},set lollipopColorScheme(t){Q.popColorSchemeName=t,zt.popColorScheme=l(t)},get lollipopColorScheme(){return Q.popColorSchemeName},set titleText(t){Q.title.text=t},get titleText(){return Q.title.text},set titleFont(t){Q.title.font=t},get titleFont(){return Q.title.font},set titleColor(t){Q.title.color=t},get titleColor(){return Q.title.color},set titleAlignment(t){Q.title.alignment=t},get titleAlignment(){return Q.title.alignment},set titleDy(t){Q.title.dy=t},get titleY(){return Q.title.dy},get annoID(){return J.id},set annoHeight(t){J.height=t},get annoHeight(){return J.height},set annoMargin(t){J.margin=t},get annoMargin(){return J.margin},set annoBackground(t){J.background=t},get annoBackground(){return J.background},set annoBarFill(t){J.bar.background=t},get annoBarFill(){return J.bar.background},set annoBarMargin(t){J.bar.margin=t},get annoBarMargin(){return J.bar.margin},set domainColorScheme(t){J.domain.colorSchemeName=t,J.domain.colorScheme=l(t)},get domainColorScheme(){return J.domain.colorSchemeName},set domainMargin(t){J.domain.margin=t},get domainMargin(){return J.domain.margin},set domainTextFont(t){J.domain.label.font=t},get domainTextFont(){return J.domain.label.font},set domainTextColor(t){J.domain.label.color=t},get domainTextColor(){return J.domain.label.color},set brush(t){J.brush=t},get brush(){return J.brush},set zoom(t){J.zoom=t},get zoom(){return J.zoom}},zt.setOptions=function(t){for(let e in t)this.options[e]=t[e]},zt.getOptions=function(t){let e={},n=this;return t.forEach(function(t){n.options[t]&&(e[t]=n.options[t])}),e},zt.destroy=function(){g.selectAll("*").remove(),g.remove(),X.tooltip&&rt&&nt.destroy()},zt.refresh=function(){this.destroy(),this.draw()},zt.data={set snvData(t){K=t},get snvData(){return K},set domainData(t){Z=t},get domainData(){return Z}},zt.format={set snvData(t){f=t},get snvData(){return f},set domainData(t){m=t},get domainData(){return m}},zt.draw=function(){m=m||d,(f=f||p).hasOwnProperty("factor")?at=!0:(at=!1,zt.format.snvData.factor=f.factor="__undefined__",K.forEach(function(t){t[f.factor]="__undefined__"})),q=Q.height+J.height,G=o,V=Q.height-X.margin.top-X.margin.bottom,$=G-X.margin.left-X.margin.right,j=J.height-J.margin.top-J.margin.bottom,U=$,At(),Pt(),function(){let t,e;Et(),z=b.append("g").attr("class","axis axis--y").call(Ft),"start"==Q.axisLabel.alignment?(t="end",e=0):"middle"==Q.axisLabel.alignment?(t="middle",e=V/2):(t="start",e=V),b.append("text").attr("class","yaxis axis-label").attr("transform","translate(0,"+e+")rotate(-90)").style("font",Q.axisLabel.font).attr("fill",Q.axisLabel.fill).attr("text-anchor",t).attr("alignment-base","middle").attr("dy",Q.axisLabel.dy).text(Q.ylab.text),N=b.append("g").attr("clip-path","url(#"+Q.xAxisDefsId+")").attr("class","axis axis--x").attr("transform","translate(0, "+(V+J.height)+")").call(_)}(),b.append("clipPath").attr("id",Q.defsId).append("rect").attr("width",$).attr("height",V+J.margin.top),b.append("clipPath").attr("id",Q.xAxisDefsId).append("rect").attr("x",-5).attr("width",$+20).attr("height",30),y.append("clipPath").attr("id",J.defsId).append("rect").attr("width",U).attr("height",j),function(){let t=j-J.bar.margin.top-J.bar.margin.bottom;y.append("rect").classed(J.className.bar,!0).attr("x",0).attr("y",J.bar.margin.top).attr("width",U).attr("height",t).attr("fill",J.bar.background);let n=j-J.domain.margin.top-J.domain.margin.bottom,r=y.append("g").attr("class",J.className.track).selectAll(J.className.domain).data(Z[m.domainType]).enter().append("g").attr("clip-path","url(#"+J.defsId+")").attr("class",J.className.domain);S=r.append("rect").attr("x",function(t){return lt(t)}).attr("y",J.domain.margin.top).attr("height",n).attr("width",function(t){return it(t)}).attr("fill",function(t){return J.domain.colorScheme(t[m.details.name])}),T=r.append("text").attr("x",function(t){return(lt(t)+st(t))/2}).attr("y",J.domain.margin.top+n/2).attr("dy","0.35em").attr("text-anchor","middle").attr("fill",J.domain.label.color||"white").style("font",J.domain.label.font).text(function(t){return t[m.details.name]}),J.brush&&(O=e.brushX().extent([[0,0],[U,j]]).on("brush end",ut)),J.zoom&&(H=e.zoom().scaleExtent([1,1/0]).translateExtent([[0,0],[$,V]]).extent([[0,0],[$,V]]).on("zoom",Lt)),J.brush&&y.append("g").attr("class",J.className.brush).call(O),J.zoom&&b.append("rect").attr("class",J.className.zoom).attr("width",$).attr("height",V).attr("fill","none").attr("cursor","move").attr("pointer-events","all").call(H)}(),Tt(),X.legend&&function(){if(X.legend){I=new c(X.chartID),0==Object.keys(X.legendOpt.margin).length&&(X.legendOpt.margin={left:X.margin.left,right:X.margin.right,top:2,bottom:2}),I.margin=X.legendOpt.margin,I.interactive=X.legendOpt.interactive,I.title="__undefined__"===X.legendOpt.title?f.factor:X.legendOpt.title;for(let t in ot)I.addSeries({key:t,value:{fill:Q.popColorScheme(t),label:t+" ("+ot[t]+")"}});I.dispatch.on("legendClick",function(t,e){e?ot[t]=e:delete ot[t],At(),_t(),Bt(),C.each(Ct)}),I.draw(),W=I.height}}(),J.brush&&y.select(".domain-x-brush").call(O.move,[0,U]),rt=!0},zt},Object.defineProperty(t,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/inst/htmlwidgets/lollipop_test.html b/inst/htmlwidgets/lollipop_test.html new file mode 100644 index 0000000..9ac1b80 --- /dev/null +++ b/inst/htmlwidgets/lollipop_test.html @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + +
+
+
+ + + \ No newline at end of file diff --git a/man/formatCamelCase.Rd b/man/formatCamelCase.Rd new file mode 100644 index 0000000..1e51e01 --- /dev/null +++ b/man/formatCamelCase.Rd @@ -0,0 +1,11 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/formatCamelCase.R +\name{formatCamelCase} +\alias{formatCamelCase} +\title{change to camel case} +\usage{ +formatCamelCase(in.df) +} +\description{ +change to camel case +} diff --git a/man/g3-lollipop-shiny.Rd b/man/g3-lollipop-shiny.Rd new file mode 100644 index 0000000..0499777 --- /dev/null +++ b/man/g3-lollipop-shiny.Rd @@ -0,0 +1,30 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/g3Lollipop.R +\name{g3-lollipop-shiny} +\alias{g3-lollipop-shiny} +\alias{g3LollipopOutput} +\alias{renderG3Lollipop} +\title{Shiny bindings for g3-lollipop} +\usage{ +g3LollipopOutput(outputId, width = "100\%", height = "400px") + +renderG3Lollipop(expr, env = parent.frame(), quoted = FALSE) +} +\arguments{ +\item{outputId}{output variable to read from} + +\item{width, height}{Must be a valid CSS unit (like \code{'100\%'}, +\code{'400px'}, \code{'auto'}) or a number, which will be coerced to a +string and have \code{'px'} appended.} + +\item{expr}{An expression that generates a g3-lollipop} + +\item{env}{The environment in which to evaluate \code{expr}.} + +\item{quoted}{Is \code{expr} a quoted expression (with \code{quote()})? This +is useful if you want to save an expression in a variable.} +} +\description{ +Output and render functions for using g3-lollipop within Shiny +applications and interactive Rmd documents. +} diff --git a/man/g3Lollipop.Rd b/man/g3Lollipop.Rd new file mode 100644 index 0000000..f8213c7 --- /dev/null +++ b/man/g3Lollipop.Rd @@ -0,0 +1,146 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/g3Lollipop.R +\name{g3Lollipop} +\alias{g3Lollipop} +\title{Plot Lollipop diagram plot for mutation data.} +\usage{ +g3Lollipop(mutation.dat, gene.symbol, gene.symbol.col = "Hugo_Symbol", + variant.class.col = "Variant_Classification", + protein.change.col = "Protein_Change", + mutation.class.col = "Mutation_Class", aa.pos.col = "AA_Position", + factor.col = NA, chart.width = 800, chart.type = "pie", + chart.margin = list(left = 40, right = 20, top = 15, bottom = 25), + chart.background = "transparent", transition.time = 600, + y.axis.label = "mutations", axis.label.font = "normal 12px Arial", + axis.label.color = "#4f4f4f", axis.label.alignment = "middle", + axis.label.dy = "-2em", legend.margin = list(left = 10, right = 0, top = + 5, bottom = 5), legend.interactive = TRUE, legend.title = NA, + lollipop.track.height = 420, + lollipop.track.background = "rgb(244,244,244)", lollipop.pop.min.size = 2, + lollipop.pop.max.size = 12, lollipop.pop.info.limit = 8, + lollipop.pop.info.color = "#EEE", lollipop.line.color = "rgb(42,42,42)", + lollipop.line.width = 0.5, lollipop.circle.color = "wheat", + lollipop.circle.width = 0.5, lollipop.label.ratio = 1.4, + lollipop.label.min.font.size = 10, lollipop.color.scheme = "accent", + title.text = "", title.font = "normal 16px Arial", + title.color = "#424242", title.alignment = "middle", + title.dy = "0.35em", anno.height = 30, anno.margin = list(top = 4, + bottom = 0), anno.background = "transparent", anno.bar.fill = "#e5e3e1", + anno.bar.margin = list(top = 2, bottom = 2), + domain.color.scheme = "category10", domain.margin = list(top = 0, bottom = + 0), domain.text.font = "normal 11px Arial", domain.text.color = "#f2f2f2", + legend = TRUE, tooltip = TRUE, brush = TRUE, zoom = TRUE) +} +\arguments{ +\item{mutation.dat}{Mutation data frame.} + +\item{gene.symbol}{HGNC gene symbol.} + +\item{gene.symbol.col}{Column name of Hugo gene symbols (e.g., TP53). Default \emph{Hugo_Symbol}.} + +\item{variant.class.col}{Column name of variant class information +(e.g., \emph{Missense_Mutation}, \emph{Nonsense_Mutation}). Default \emph{Variant_Classification}.} + +\item{protein.change.col}{Column name of protein change information (e.g., p.K960R, G658S, L14Sfs*15). +Default \emph{Protein_Change}.} + +\item{mutation.class.col}{Column name of the parsed mutation class. Default \emph{Mutation_Class}.} + +\item{factor.col}{column of classes in the plot legend. IF \code{NA}, use parsed \emph{Mutation_Class} column, +otherwise, use specified. Default \code{NA}.} + +\item{chart.type}{\emph{pie} or \emph{circle}. Default \emph{pie}.} + +\item{chart.margin}{chart margin in \emph{list}. Default \code{list(left = 40, right = 20, top = 15, bottom = 25)}.} + +\item{chart.background}{chart background. Default \emph{transparent}.} + +\item{transition.time}{chart animation transition time in millisecond. Default 600.} + +\item{y.axis.label}{Y-axis label text. Default \emph{mutations}.} + +\item{axis.label.font}{css font style shorthand +(\emph{font-style font-variant font-weight font-size/line-height font-family}). +Default \emph{"normal 12px Arial"}.} + +\item{axis.label.color}{axis label text color. Default \emph{#4f4f4f}.} + +\item{axis.label.alignment}{axis label text alignment (start/end/middle). Default \emph{middle}.} + +\item{axis.label.dy}{text adjustment of axis label text. Default \emph{-2em}.} + +\item{legend.margin}{legend margin in \emph{list}. Default \code{list(left = 10, right = 0, top = 5, bottom = 5)}.} + +\item{legend.interactive}{legend interactive mode. Default \code{TRUE}.} + +\item{legend.title}{legend title. If \code{NA}, use \emph{factor.col}. Default is \code{NA}.} + +\item{lollipop.track.height}{height of lollipop track. Default 420.} + +\item{lollipop.track.background}{background of lollipop track. Default \emph{rgb(244,244,244)}} + +\item{lollipop.pop.min.size}{lollipop pop minimal size. Default 2.} + +\item{lollipop.pop.max.size}{lollipop pop maximal size. Default 12.} + +\item{lollipop.pop.info.limit}{threshold of lollipop pop size to show count information in middle of pop. Default 8.} + +\item{lollipop.pop.info.color}{lollipop pop information text color. Default \emph{#EEE}.} + +\item{lollipop.line.color}{lollipop line color. Default \emph{rgb(42,42,42)}.} + +\item{lollipop.line.width}{lollipop line width. Default 0.5.} + +\item{lollipop.circle.color}{lollipop circle border color. Default \emph{wheat}.} + +\item{lollipop.circle.width}{lollipop circle border width. Default 0.5.} + +\item{lollipop.label.ratio}{lollipop click-out label font size to circle size ratio. Default 1.4.} + +\item{lollipop.label.min.font.size}{lollipop click-out label minimal font size. Default 10.} + +\item{lollipop.color.scheme}{color scheme to fill lollipop pops. Default \emph{accent}.} + +\item{title.text}{title of chart. Default is empty.} + +\item{title.font}{font of chart title. Default \emph{normal 16px Arial}.} + +\item{title.color}{color of chart title. Default \emph{#424242}.} + +\item{title.alignment}{text alignment of chart title (start/middle/end). Default \emph{middle}.} + +\item{title.dy}{text adjustment of chart title. Default \emph{0.35em}.} + +\item{anno.height}{height of protein structure annotation track. Default 30.} + +\item{anno.margin}{margin of protein structure annotation track. Default \code{list(top = 4, bottom = 0)}.} + +\item{anno.background}{background of protein structure annotation track. Default \emph{transparent}.} + +\item{anno.bar.fill}{background of protein bar in protein structure annotation track. Default \emph{#e5e3e1}.} + +\item{anno.bar.margin}{margin of protein bar in protein structure annotation track. Default \code{list(top = 2, bottom = 2)}.} + +\item{domain.color.scheme}{color scheme of protein domains. Default \emph{category10}.} + +\item{domain.margin}{margin of protein domains. Default \code{list(top = 0, bottom = 0)}.} + +\item{domain.text.font}{domain label text font in shorthand format. Default \emph{normal 11px Arial}.} + +\item{domain.text.color}{domain label text color. Default \emph{#f2f2f2}.} + +\item{legend}{if show legend. Default \code{TRUE}.} + +\item{tooltip}{if show tooltip. Default \code{TRUE}.} + +\item{brush}{if show brush. Default \code{TRUE}.} + +\item{zoom}{if enable zoom feature. Default \code{TRUE}.} + +\item{aachange.pos.col}{Column name of the parsed amino-acid change position. Default \emph{AA_Position}.} + +\item{chart.with}{chart width. Default 800.} +} +\description{ + +} diff --git a/man/getDefaultMutationMappingTable.Rd b/man/getDefaultMutationMappingTable.Rd new file mode 100644 index 0000000..48fcfab --- /dev/null +++ b/man/getDefaultMutationMappingTable.Rd @@ -0,0 +1,65 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/getDefaultMutationMappingTable.R +\name{getDefaultMutationMappingTable} +\alias{getDefaultMutationMappingTable} +\title{Default mapping between mutation type to mutation class} +\usage{ +getDefaultMutationMappingTable() +} +\value{ +A data frame with headers of \emph{Mutation_Type}, \emph{Mutation_Class}, \emph{Short_Name} +} +\description{ +Return the default mapping table between mutation type to mutation class +} +\details{ +Mutation type or variant classificaiton, generally with column named \emph{Variant_Classficiation} or +\emph{Mutation_Type} in MAF file, can be classificed as follows +\enumerate{ +\item Missense +\itemize{ + \item \emph{Missense_Mutation} --- the point mutation alters the protein structure by one amino acid. + See \url{https://en.wikipedia.org/wiki/Missense_mutation}. +} +\item Inframe +\itemize{ +\item \emph{In_Frame_Del} --- deletion that keeps the sequence in frame +\item \emph{In_Frame_Ins} --- insertion that keeps the sequence in frame +\item \emph{Silent} --- variant is in coding region of the chosen transcript, but protein structure is identical (i.e., a synonymous mutation) +\item \emph{Targeted_Region} --- targeted region +} +\item Truncating +\itemize{ +\item \emph{Frame_Shift_Ins} --- insertion that moves the coding sequence out of frame. + See \url{https://en.wikipedia.org/wiki/Frameshift_mutation}. +\item \emph{Frame_Shift_Del} --- deletion that moves the coding sequence out of frame. + See \url{https://en.wikipedia.org/wiki/Frameshift_mutation}. +\item \emph{Nonsense_Mutation} --- a premature stop codon is created by the variant. + See \url{https://en.wikipedia.org/wiki/Nonsense_mutation}. +\item \emph{Nonstop_Mutation} --- variant removes stop codon. +\item \emph{Splice_Site} --- the variant is within two bases of a splice site. +\item \emph{Splice_Region} --- the variant is within splice reguion. +} +\item Other +\itemize{ +\item \emph{5'UTR} --- variant is on the 5'UTR for the chosen transcript +\item \emph{3'UTR} --- variant is on the 3'UTR for the chosen transcript +\item \emph{5'Flank} --- the variant is upstream of the chosen transcript (within 3kb) +\item \emph{3'Flank} --- the variant is downstream of the chosen transcript (within 3kb) +\item \emph{Fusion} --- gene fusion +\item \emph{IGR} --- intergenic region. Does not overlap any transcript. +\item \emph{Intron} --- variant lies between exons within the bounds of the chosen transcript. +\item \emph{Translation_Start_Site} --- varaint in translation start site. +\item \emph{De_novo_Start_InFrame} --- New start codon is created by the given variant using the chosen transcript. +However, it is in frame relative to the coded protein. +\item \emph{De_novo_Start_OutOfFrame} --- New start codon is created by the given variant using the chosen transcript. +However, it is out of frame relative to the coded protein. +\item \emph{Start_Codon_SNP} --- point mutation that overlaps the start codon. +\item \emph{Start_Codon_Ins} --- insertion that overlaps the start codon. +\item \emph{Start_Codon_Del} --- seletion that overlaps the start codon. +\item \emph{RNA} --- variant lies on one of the RNA transcripts. +\item \emph{lincRNA} --- variant lies on one of the lincRNAs. +\item \emph{Unknown} --- Unknown +} +} +} diff --git a/man/getMutationsFromCbioportal.Rd b/man/getMutationsFromCbioportal.Rd new file mode 100644 index 0000000..c882e1d --- /dev/null +++ b/man/getMutationsFromCbioportal.Rd @@ -0,0 +1,51 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/getMutationsFromCbioportal.R +\name{getMutationsFromCbioportal} +\alias{getMutationsFromCbioportal} +\title{Query cancer genomic mutation data from cBioPortal} +\usage{ +getMutationsFromCbioportal(study.id, gene.symbol, output.file = NA, + mutation.type.to.class.df = NULL) +} +\arguments{ +\item{study.id}{cbioprotal study ID} + +\item{gene.symbol}{HGNC gene symbol.} + +\item{mutation.type.to.class.df}{mapping table from mutation type to class. +\code{\link{getDefaultMutationMappingTable}} for details. +Default \code{NULL}, indicating to use \code{\link{getDefaultMutationMappingTable}}.} + +\item{output.csv}{if specified, output to a file in \emph{csv} format. Default is \code{NA}.} +} +\value{ +a data frame with columns +\itemize{ +\item \emph{Hugo_Symbol} --- Hugo gene symbol +\item \emph{Protein_Change} --- Protein change information (cBioprotal uses \emph{HGVSp} format) +\item \emph{Sample_ID} --- Sample ID +\item \emph{Mutation_Type} --- mutation type, i.e., +\item \emph{Chromosome} --- chromosome +\item \emph{Start_Position} --- start position +\item \emph{End_Position} --- end position +\item \emph{Reference_Allele} --- reference allele +\item \emph{Variant_Allele} --- variant allele +\item \emph{Mutation_Class} --- mutation class (e.g., truncating/misense/Inframe/Other) +\item \emph{AA_Position} --- amino-acid postion of the variant; if the variant is not in protein-conding region, \code{NA} +} +} +\description{ +Retrieve and parse mutation data from cBioPortal +by the given cBioPortal cancer study ID and the gene symbol. +} +\examples{ +# list all cbioportal studies +library(cgdsr) +cgds <- CGDS("http://www.cbioportal.org/public-portal/") +all.studies <- getCancerStudies(cgds) + +# pick a "caner_study_id" (contain a mutation data set) +# pick a primary HGNC gene symbol to query +mutation.dat <- getMutationsFromCbioportal("msk_impact_2017", "TP53") +mutation.dat <- getMutationsFromCbioportal("all_stjude_2016", "TP53") +} diff --git a/man/hgnc2pfam.Rd b/man/hgnc2pfam.Rd new file mode 100644 index 0000000..7220f67 --- /dev/null +++ b/man/hgnc2pfam.Rd @@ -0,0 +1,45 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/hgnc2pfam.R +\name{hgnc2pfam} +\alias{hgnc2pfam} +\title{Map from Hugo symbol to Pfam domains} +\usage{ +hgnc2pfam(hgnc.symbol, guess = TRUE, uniprot.id = NA, + output.format = "json") +} +\arguments{ +\item{hgnc.symbol}{primary Hugo symbol} + +\item{guess}{if the given Hugo symbol links to multiple UniProt IDs, +choose the longest one (\code{guess == TRUE}); +otherwise \code{NA} (\code{guess == FALSE}). Default \code{TRUE}.} + +\item{uniprot.id}{UniProt ID, in case that gene symbol maps to multiple UniProt entries.} + +\item{output.format}{output format: JSON or list} +} +\value{ +A list or a Json with attributes: + \emph{symbol}, \emph{uniprot}, \emph{length}, and a list of \emph{pfam} entries, including + \emph{hmm.acc}, \emph{hmm.name}, \emph{start}, \emph{end}, and \emph{type}. +} +\description{ +Mapping from Hugo symbol to Pfam-A domain compostion. +If the given Hugo symbol has multple UniProt ID mappings, +and \code{guess == TRUE}, +the longest UniProt protein is selected. Return is either a list of a JSON. +} +\examples{ +# general usage +hgnc2pfam("TP53") +hgnc2pfam("TP53", output.format = "json") +hgnc2pfam("TP53", output.format = "list") +hgnc2pfam("TP53", output.format = "json", uniprot.id = "P84996") # OK + +# for gene mapping to multiple uniprot enties +hgnc2pfam("GNAS", guess = TRUE) +hgnc2pfam("GNAS", guess = FALSE) +hgnc2pfam("GNAS", output.format = "list") +hgnc2pfam("GNAS", output.format = "list", uniprot.id = "P84996") +hgnc2pfam("GNAS", output.format = "list", uniprot.id = "P84997") # not exists, returns FALSE +} diff --git a/man/hgnc2uniprot.Rd b/man/hgnc2uniprot.Rd new file mode 100644 index 0000000..514ff97 --- /dev/null +++ b/man/hgnc2uniprot.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/hgnc2uniprot.R +\name{hgnc2uniprot} +\alias{hgnc2uniprot} +\title{Mapping from Hugo symbol to UniProt IDs} +\usage{ +hgnc2uniprot(hgnc.symbol) +} +\arguments{ +\item{hgnc.symbol}{primary HUGO symbol} +} +\value{ +a data frame with columns \emph{symbol} (Hugo symbol), \emph{uniprot} (UniProt ID), +and \emph{length} (protein length). +} +\description{ +Mapping from Hugo Symbol to UniProt ID using internal mapping table. +Return a data frame with columns \emph{symbol} (Hugo symbol), \emph{uniprot} (UniProt ID), +and \emph{length} (protein length). +} +\examples{ +# maps to single UniProt entry +hgnc2uniprot("TP53") + +# maps to multiple UniProt entries +hgnc2uniprot("GNAS") +hgnc2uniprot("AKAP7") + +} diff --git a/man/mapMutationTypeToMutationClass.Rd b/man/mapMutationTypeToMutationClass.Rd new file mode 100644 index 0000000..59007b8 --- /dev/null +++ b/man/mapMutationTypeToMutationClass.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/mapMutationTypeToMutationClass.R +\name{mapMutationTypeToMutationClass} +\alias{mapMutationTypeToMutationClass} +\title{Map from mutation type to mutation class} +\usage{ +mapMutationTypeToMutationClass(mutation.type.vec, + mutation.type.to.class.df = NULL) +} +\arguments{ +\item{mutation.type.vec}{a vector of mutation type information} + +\item{mutation.tytpe.to.class.df}{Data frame mapping from mutation tytpe (header \emph{Mutation_Type}) +to mutation class (header \emph{Mutation_Class}). +Default is \code{\link{getDefaultMutationMappingTable}}.} +} +\value{ +a vector of mapped mutation class information +} +\description{ +Map from mutation type to mutation class. Refer to \code{\link{getDefaultMutationMappingTable}} +for more details. +} diff --git a/man/parseProteinChange.Rd b/man/parseProteinChange.Rd new file mode 100644 index 0000000..411d57c --- /dev/null +++ b/man/parseProteinChange.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/parseProteinChange.R +\name{parseProteinChange} +\alias{parseProteinChange} +\title{Extract \emph{amino_acid_position} from \emph{Protein_Change}} +\usage{ +parseProteinChange(protein.change.vec, mutation.class.vec) +} +\description{ +Parse \emph{amino_acid_position} according to HGVSp format. \cr + For example, \emph{p.Q16Rfs*28}, amino-acid position is 16. + See \url{http://varnomen.hgvs.org/recommendations/protein/}. \cr + See \url{https://www.hgvs.org/mutnomen/recs-prot.html}. \cr +} diff --git a/man/readMAF.Rd b/man/readMAF.Rd new file mode 100644 index 0000000..c5ce760 --- /dev/null +++ b/man/readMAF.Rd @@ -0,0 +1,38 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/readMAF.R +\name{readMAF} +\alias{readMAF} +\title{Read MAF file} +\usage{ +readMAF(maf.file, gene.symbol.col = "Hugo_Symbol", + variant.class.col = "Variant_Classification", + protein.change.col = "Protein_Change", + mutation.class.col = "Mutation_Class", aa.pos.col = "AA_Position", + mutation.type.to.class.df = NULL) +} +\arguments{ +\item{maf.file}{MAF file name. Gunzipped input file allowed, with ".gz" file extension.} + +\item{gene.symbol.col}{Column name of Hugo gene symbols (e.g., TP53). Default \emph{Hugo_Symbol}.} + +\item{variant.class.col}{Column name of variant class information +(e.g., \emph{Missense_Mutation}, \emph{Nonsense_Mutation}). Default \emph{Variant_Classification}.} + +\item{protein.change.col}{Column name of protein change information (e.g., p.K960R, G658S, L14Sfs*15). +Default \emph{Protein_Change}.} + +\item{mutation.class.col}{Column name of the parsed mutation class. Default \emph{Mutation_Class}.} + +\item{mutation.type.to.class.df}{mapping table from mutation type to class. +\code{\link{getDefaultMutationMappingTable}} for details. +Default \code{NULL}, indicating to use \code{\link{getDefaultMutationMappingTable}}.} + +\item{aachange.pos.col}{Column name of the parsed amino-acid change position. Default \emph{AA_Position}.} +} +\value{ +A data frame +} +\description{ +Read MAF file. +For MAF format specification, check \url{https://docs.gdc.cancer.gov/Data/File_Formats/MAF_Format/}. +} diff --git a/man/uniprot2pfam.Rd b/man/uniprot2pfam.Rd new file mode 100644 index 0000000..8b96e54 --- /dev/null +++ b/man/uniprot2pfam.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/uniprot2pfam.R +\name{uniprot2pfam} +\alias{uniprot2pfam} +\title{From UniProt ID to Pfam-A domain composition} +\usage{ +uniprot2pfam(uniprot.id) +} +\arguments{ +\item{uniprot.id}{UniProt ID} +} +\value{ +a data frame with columns +\itemize{ +\item \emph{uniprot} --- UniProt ID +\item \emph{length} --- protein length +\item \emph{hmm.acc} --- accession number of Pfam HMM model, e.g., PF08563 +\item \emph{hmm.name} --- Pfam name, e.g., P53_TAD +\item \emph{start} --- Pfam domain start postion +\item \emph{end} --- Pfam domain end position +\item \emph{type} --- Pfam type, including domain/motif/family +} +} +\description{ +Map from UniProt ID to Pfam-A domain compostion. +}