Note: some texts in this report are based on the book Orchestrating Single-Cell Analysis with Bioconductor published under CC BY 4.0


Project: PBMC 1k

  • Institute: Example institute
  • Laboratory: Example laboratory
  • People: Example person 1, Example person 2

1000 peripheral blood mononuclear cells by 10x Genomics

  • Organism: human

Input data overview

Just to review data from the preceding pipeline step (01 - quality control):

## class: SingleCellExperiment 
## dim: 12202 1181 
## metadata(1): Samples
## assays(1): counts
## rownames(12202): ENSG00000237491 ENSG00000225880 ... ENSG00000278817
##   ENSG00000278384
## rowData names(5): Type ENSEMBL SYMBOL ENTREZID GENENAME
## colnames(1181): AAACCCAAGGAGAGTA-1 AAACGCTTCAGCCCAG-1 ...
##   TTTGGTTGTAGAATAC-1 TTTGTTGCAATTAGGA-1
## colData names(14): Sample Barcode ... discard_qc discard_custom
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):

Cell cycle phase assignment

Assign each cell a score, based on its expression of G2/M and S phase markers. These marker sets should be anticorrelated in their expression levels, and cells expressing neither are likely not cycling and in G1 phase. In some cases, cell cycle can be the primary factor determining the cell heterogeneity and effectively masking the differences between cell subpopulations we want to study.

You can view the assigned cell cycle phases in the Dimensionality_reduction_plots section below.

Show used functions ▾

Normalization

Systematic differences in sequencing coverage between libraries are often observed in single-cell RNA sequencing data. They typically arise from technical differences in cDNA capture or PCR amplification efficiency across cells, attributable to the difficulty of achieving consistent library preparation with minimal starting material. Normalization aims to remove these differences such that they do not interfere with comparisons of the expression profiles between cells. This ensures that any observed heterogeneity or differential expression within the cell population are driven by biology and not technical biases.

More information in OSCA

Used normalization method: “scran”

scran: normalization by deconvolution

Cell-specific biases are normalized using the scuttle::computePooledFactors() method, which implements the deconvolution strategy for scaling normalization (A. T. Lun, Bach, and Marioni 2016). This computes size factors that are used to scale the counts in each cell. The assumption is that most genes are not differentially expressed (DE) between cells, such that any differences in expression across the majority of genes represents some technical bias that should be removed.
Show used functions ▾

Highly variable genes (HVGs) selection

We often use scRNA-seq data in exploratory analyses to characterize heterogeneity across cells. Procedures like clustering and dimensionality reduction compare cells based on their gene expression profiles, which involves aggregating per-gene differences into a single (dis)similarity metric between a pair of cells. The choice of genes to use in this calculation has a major impact on the behavior of the metric and the performance of downstream methods. We want to select genes that contain useful information about the biology of the system while removing genes that contain random noise. This aims to preserve interesting biological structure without the variance that obscures that structure, and to reduce the size of the data to improve computational efficiency of later steps.

More information in OSCA

HVG metric: “gene_var”

scran::modelGeneVar() models the variance of the log-expression profiles for each gene, decomposing it into technical and biological components based on a fitted mean-variance trend.

Based on “gene_var”, HVGs were selected by: top 1000 HVGs.

Found 1000 HVGs.

Plot of HVGs:

Show used functions ▾

Doublet score assignment

The scran::doubletCluster() function identifes clusters with expression profiles lying between two other clusters. Considering every possible triplet of clusters, the method uses the number of DE genes, the median library size, and the proporion of cells in the cluster to mark clusters as possible doublets.

Prior to normalization, quick clustering was performed. We can use those clusters to look at doublet score within them:

Discarded 0 cells (0 % of all cells) with doublet score above 3.5

Show used functions ▾

Dimensionality reduction

As the name suggests, dimensionality reduction aims to reduce the number of separate dimensions in the data. See this chapter in OSCA that provides an intuitive explanation of the motivation behind, along with basic introduction to PCA, t-SNE and UMAP.

PCA

Principal components analysis (PCA) discovers axes in high-dimensional space that capture the largest amount of variation. In case of scRNA-seq, we basically compress multiple features into several dimensions. This reduces computational work in downstream analyses like clustering and other DR methods (UMAP and t-SNE), as calculations only need to be performed for a few dimensions rather than thousands of genes. It also reduces noise by averaging across multiple genes to obtain a more precise representation of the patterns in the data.

PCs selection

By definition, the top PCs capture the dominant factors of heterogeneity in the data set. In the context of scRNA-seq, our assumption is that biological processes affect multiple genes in a coordinated manner. This means that the earlier PCs are likely to represent biological structure as more variation can be captured by considering the correlated behavior of many genes. We use the earlier PCs in our downstream analyses, which concentrates the biological signal to simultaneously reduce computational work and remove noise.

There are several methods how to select the first PCs:

  • Elbow point method: a simple heuristic for choosing PCs involves identifying the elbow point in the percentage of variance explained by successive PCs. This refers to the “elbow” in the curve of a scree plot as shown.
  • Technical variance method: use the technical component estimates to determine the proportion of variance that should be retained. This is implemented in scran::denoisePCA(), which takes the estimates returned by scran::modelGeneVar().
  • Forced: use a predefined number of PCs.

15 PCs were selected using the “forced” method

Show used functions ▾


Clustering

Graph-based

Graph-based clustering is commonly used for scRNA-seq, and often shows a good performance.

First, we used scran to generate the shared nearest neighbor (SNN) graph using 10 nearest neighbors (cells) and ‘rank’ weighting scheme. The graph was then subjected to community detection using algorithms implemented in the igraph package.

Show used functions ▾

Leiden algorithm

Leiden algorithm is an improved version of the Louvain algorithm that should prevent badly connected or even disconnected clusters.

It can be parametrized with different resolutions that determine how large communities are detected in the SNN graph. Generally, lower resolutions result in coarse-grained clusters, while higher ones in more fine-grained structures.

The relationships in cluster abundances under different resolutions are visualized in the clustree plot below. Stable clusters across different resolutions can be quickly find as straight or little branched vertical lines.

PDF with clustree

Show used functions ▾

PCA

PDF with all plots

r = 0.4

r = 0.8

TSNE

PDF with all plots

r = 0.4

r = 0.8

UMAP

PDF with all plots

r = 0.4

r = 0.8

Louvain algorithm

Louvain algorithm is perhaps the most popular clustering method for scRNA-seq, and was popularized by Seurat.

It can be parametrized with different resolutions that determine how large communities are detected in the SNN graph. Generally, lower resolutions result in coarse-grained clusters, while higher ones in more fine-grained structures.

The relationships in cluster abundances under different resolutions are visualized in the clustree plot below. Stable clusters across different resolutions can be quickly find as straight or little branched vertical lines.

PDF with clustree

Show used functions ▾

PCA

PDF with all plots

r = 0.4

r = 0.8

TSNE

PDF with all plots

r = 0.4

r = 0.8

UMAP

PDF with all plots

r = 0.4

r = 0.8

Walktrap algorithm

Walktrap algorithm uses random walks to find communities in the graph, and it is the default graph-based clustering method in scran.

Walktrap algorithm is not using resolutions.

Show used functions ▾

PCA

TSNE

UMAP

SC3

Single-Cell Consensus Clustering (SC3) is a tool for unsupervised clustering of scRNA-seq data. SC3 achieves high accuracy and robustness by consistently integrating different clustering solutions through a consensus approach (it calculates clusters for selected numbers of target clusters).

Cluster stability index shows how stable each cluster is across the selected range of ks. The stability index varies between 0 and 1, where 1 means that the same cluster appears in every solution for different k.

PDF with cluster stability plots

The relationships in cluster abundances under different ks are visualized in the clustree plot below. Stable clusters across different ks can be quickly find as straight or little branched vertical lines.

PDF with clustree

Show used functions ▾

PCA

PDF with all plots

k = 5

k = 6

TSNE

PDF with all plots

k = 5

k = 6

UMAP

PDF with all plots

k = 5

k = 6

K-means

K-means is a generic clustering algorithm that has been used in many application areas. In R, it can be applied via the stats::kmeans() function. Typically, it is applied to a reduced dimension representation of the expression data (most often PCA, because of the interpretability of the low-dimensional distances). We need to define the number of clusters in advance.

It is also possible to determine an optimal value of k. One way to measure the goodness of clustering is to calculate within-cluster sum of squares \(W\) (i.e. sum of distances between each data point and cluster center). The optimal k should have clusters with minimal \(W\). Here, we used a modified gap statistic method described in OSCA.

PDF with gap statistics

The relationships in cluster abundances under different ks are visualized in the clustree plot below. Stable clusters across different ks can be quickly find as straight or little branched vertical lines.

PDF with clustree

Show used functions ▾

PCA

PDF with all plots

k = 14 (best K)

k = 3

k = 4

k = 5

k = 6

TSNE

PDF with all plots

k = 14 (best K)

k = 3

k = 4

k = 5

k = 6

UMAP

PDF with all plots

k = 14 (best K)

k = 3

k = 4

k = 5

k = 6


Dimensionality reduction plots

PCA

Selected markers PDF

cluster_graph_louvain_r0.4_annotated

cluster_sc3_k6_custom

detected

doublet_score

phase

total

TSNE

Selected markers PDF

cluster_graph_louvain_r0.4_annotated

cluster_sc3_k6_custom

detected

doublet_score

phase

total

UMAP

Selected markers PDF

cluster_graph_louvain_r0.4_annotated

cluster_sc3_k6_custom

detected

doublet_score

phase

total


Cell annotation

We used the SingleR package to predict cell types in the dataset. Given a reference dataset of samples (single-cell or bulk) with known labels, SinglerR assigns those labels to new cells from a test dataset based on similarities in their expression profiles. You can find more information in the SingleR book.

The used references are shown below in the tabs. Each have several diagnostic plots:

  • Score heatmaps show distribution of predicted cell types in computed clusters (if any), along with per-cell annotation scores
  • Marker heatmaps show genes that are markers for a given cell type in both the reference and current datasets, i.e. those markers have driven the decision to label cells by the chosen cell type
  • Delta scores show poor-quality or ambiguous assignments based on the per-cell ‘delta’, i.e., the difference between the score for the assigned label and the median across all labels for each cell. See OSCA for more details

human_primary_cell_atlas_main

Microarray datasets derived from human primary cells (Mabbott et al. 2013). Most of the labels refer to blood subpopulations but cell types from other tissues are also available.

Score heatmaps PDF | Marker heatmaps PDF | Delta distribution PDF

PCA

TSNE

UMAP

monaco_immune_main

This is the human immune reference that best covers all of the bases for a typical PBMC sample.

Score heatmaps PDF | Marker heatmaps PDF | Delta distribution PDF

PCA

TSNE

UMAP


Show input parameters

Main config

## $PROJECT_NAME
## [1] "PBMC 1k"
## 
## $PROJECT_DESCRIPTION
## [1] "1000 peripheral blood mononuclear cells by 10x Genomics"
## 
## $INSTITUTE
## [1] "Example institute"
## 
## $LABORATORY
## [1] "Example laboratory"
## 
## $PEOPLE
## [1] "Example person 1, Example person 2"
## 
## $ORGANISM
## [1] "human"
## 
## $ANNOTATION_LIST
## $ANNOTATION_LIST$human
## [1] "org.Hs.eg.db"
## 
## $ANNOTATION_LIST$mouse
## [1] "org.Mm.eg.db"
## 
## 
## $ENSEMBL_SPECIES
## [1] "Homo_sapiens"
## 
## $CSS_FILE
## [1] "/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/Rmd/common/stylesheet.css"
## 
## $BASE_OUT_DIR
## [1] "/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/output"
## 
## $ANNOTATION_DB_FILE
## [1] "/usr/local/lib/R/site-library/org.Hs.eg.db/extdata/org.Hs.eg.sqlite"
## 
## $ANNOTATION_PKG
## [1] "org.Hs.eg.db"
## 
## attr(,"class")
## [1] "scdrake_list" "list"

Normalization and clustering config

## $NORMALIZATION_TYPE
## [1] "scran"
## 
## $SCRAN_USE_QUICKCLUSTER
## [1] TRUE
## 
## $SCRAN_QUICKCLUSTER_METHOD
## [1] "igraph"
## 
## $SCT_VARS_TO_REGRESS
## NULL
## 
## $SCT_N_HVG
## [1] 3000
## 
## $HVG_METRIC
## [1] "gene_var"
## 
## $HVG_SELECTION
## [1] "top"
## 
## $HVG_SELECTION_VALUE
## [1] 1000
## 
## $HVG_RM_CC_GENES
## [1] FALSE
## 
## $HVG_CC_GENES_VAR_EXPL_THRESHOLD
## [1] 5
## 
## $MAX_DOUBLET_SCORE
## [1] 3.5
## 
## $PCA_SELECTION_METHOD
## [1] "forced"
## 
## $PCA_FORCED_PCS
## [1] 15
## 
## $TSNE_PERP
## [1] 20
## 
## $TSNE_MAX_ITER
## [1] 1000
## 
## $CLUSTER_GRAPH_SNN_K
## [1] 10
## 
## $CLUSTER_GRAPH_SNN_TYPE
## [1] "rank"
## 
## $CLUSTER_GRAPH_LEIDEN_ENABLED
## [1] TRUE
## 
## $CLUSTER_GRAPH_LEIDEN_RESOLUTIONS
## [1] 0.4 0.8
## 
## $CLUSTER_GRAPH_LOUVAIN_ENABLED
## [1] TRUE
## 
## $CLUSTER_GRAPH_LOUVAIN_RESOLUTIONS
## [1] 0.4 0.8
## 
## $CLUSTER_GRAPH_WALKTRAP_ENABLED
## [1] TRUE
## 
## $CLUSTER_KMEANS_K_ENABLED
## [1] TRUE
## 
## $CLUSTER_KMEANS_K
## [1] 3 4 5 6
## 
## $CLUSTER_KMEANS_KBEST_ENABLED
## [1] TRUE
## 
## $CLUSTER_SC3_ENABLED
## [1] TRUE
## 
## $CLUSTER_SC3_K
## [1] 5 6
## 
## $CLUSTER_SC3_N_CORES
## [1] 8
## 
## $CELL_ANNOTATION_SOURCES
## $CELL_ANNOTATION_SOURCES$human_primary_cell_atlas_main
## $reference_type
## [1] "celldex"
## 
## $reference
## [1] "HumanPrimaryCellAtlasData"
## 
## $description
## [1] "Microarray datasets derived from human primary cells (Mabbott et al. 2013). Most of the labels refer to blood subpopulations but cell types from other tissues are also available.\n"
## 
## $label_column
## [1] "label.main"
## 
## $label_subsets
## [1] NA
## 
## $train_params
## $genes
## [1] "de"
## 
## $sd_thresh
## [1] 1
## 
## $de_method
## [1] "wilcox"
## 
## $de_n
## [1] 30
## 
## $assay_type
## [1] "logcounts"
## 
## attr(,"class")
## [1] "scdrake_list" "list"        
## 
## $name
## [1] "human_primary_cell_atlas_main"
## 
## $classify_params
## $quantile
## [1] 0.8
## 
## $tune_thresh
## [1] 0.05
## 
## $assay_type
## [1] "logcounts"
## 
## attr(,"class")
## [1] "scdrake_list" "list"        
## 
## $prune_score_params
## $n_mads
## [1] 3
## 
## $min_diff_med
## [1] -Inf
## 
## $min_diff_next
## [1] 0
## 
## attr(,"class")
## [1] "scdrake_list" "list"        
## 
## $diagnostics_params
## $heatmap_n_top_markers
## [1] 20
## 
## attr(,"class")
## [1] "scdrake_list" "list"        
## 
## attr(,"class")
## [1] "scdrake_list" "list"        
## 
## $CELL_ANNOTATION_SOURCES$monaco_immune_main
## $reference_type
## [1] "celldex"
## 
## $reference
## [1] "MonacoImmuneData"
## 
## $description
## [1] "This is the human immune reference that best covers all of the bases for a typical PBMC sample."
## 
## $label_column
## [1] "label.main"
## 
## $label_subsets
## [1] NA
## 
## $train_params
## $genes
## [1] "sd"
## 
## $sd_thresh
## [1] 1
## 
## $de_method
## [1] "classic"
## 
## $de_n
## NULL
## 
## $assay_type
## [1] "logcounts"
## 
## attr(,"class")
## [1] "scdrake_list" "list"        
## 
## $name
## [1] "monaco_immune_main"
## 
## $classify_params
## $quantile
## [1] 0.8
## 
## $tune_thresh
## [1] 0.05
## 
## $assay_type
## [1] "logcounts"
## 
## attr(,"class")
## [1] "scdrake_list" "list"        
## 
## $prune_score_params
## $n_mads
## [1] 3
## 
## $min_diff_med
## [1] -Inf
## 
## $min_diff_next
## [1] 0
## 
## attr(,"class")
## [1] "scdrake_list" "list"        
## 
## $diagnostics_params
## $heatmap_n_top_markers
## [1] 20
## 
## attr(,"class")
## [1] "scdrake_list" "list"        
## 
## attr(,"class")
## [1] "scdrake_list" "list"        
## 
## 
## $CELL_ANNOTATION_SOURCES_DEFAULTS
## $CELL_ANNOTATION_SOURCES_DEFAULTS$TRAIN_PARAMS
## $CELL_ANNOTATION_SOURCES_DEFAULTS$TRAIN_PARAMS$GENES
## [1] "de"
## 
## $CELL_ANNOTATION_SOURCES_DEFAULTS$TRAIN_PARAMS$SD_THRESH
## [1] 1
## 
## $CELL_ANNOTATION_SOURCES_DEFAULTS$TRAIN_PARAMS$DE_METHOD
## [1] "classic"
## 
## $CELL_ANNOTATION_SOURCES_DEFAULTS$TRAIN_PARAMS$DE_N
## NULL
## 
## $CELL_ANNOTATION_SOURCES_DEFAULTS$TRAIN_PARAMS$ASSAY_TYPE
## [1] "logcounts"
## 
## 
## $CELL_ANNOTATION_SOURCES_DEFAULTS$CLASSIFY_PARAMS
## $CELL_ANNOTATION_SOURCES_DEFAULTS$CLASSIFY_PARAMS$QUANTILE
## [1] 0.8
## 
## $CELL_ANNOTATION_SOURCES_DEFAULTS$CLASSIFY_PARAMS$TUNE_THRESH
## [1] 0.05
## 
## $CELL_ANNOTATION_SOURCES_DEFAULTS$CLASSIFY_PARAMS$ASSAY_TYPE
## [1] "logcounts"
## 
## 
## $CELL_ANNOTATION_SOURCES_DEFAULTS$PRUNE_SCORE_PARAMS
## $CELL_ANNOTATION_SOURCES_DEFAULTS$PRUNE_SCORE_PARAMS$N_MADS
## [1] 3
## 
## $CELL_ANNOTATION_SOURCES_DEFAULTS$PRUNE_SCORE_PARAMS$MIN_DIFF_MED
## [1] -Inf
## 
## $CELL_ANNOTATION_SOURCES_DEFAULTS$PRUNE_SCORE_PARAMS$MIN_DIFF_NEXT
## [1] 0
## 
## 
## $CELL_ANNOTATION_SOURCES_DEFAULTS$DIAGNOSTICS_PARAMS
## $CELL_ANNOTATION_SOURCES_DEFAULTS$DIAGNOSTICS_PARAMS$HEATMAP_N_TOP_MARKERS
## [1] 20
## 
## 
## 
## $ADDITIONAL_CELL_DATA_FILE
## [1] "additional_cell_data.Rds"
## 
## $CELL_GROUPINGS
## $CELL_GROUPINGS$cluster_graph_louvain_r0.4_annotated
## $CELL_GROUPINGS$cluster_graph_louvain_r0.4_annotated$source_column
## [1] "cluster_graph_louvain_r0.4"
## 
## $CELL_GROUPINGS$cluster_graph_louvain_r0.4_annotated$description
## [1] "Graph-based clustering (Louvain alg.), annotated clusters"
## 
## $CELL_GROUPINGS$cluster_graph_louvain_r0.4_annotated$assignments
## $CELL_GROUPINGS$cluster_graph_louvain_r0.4_annotated$assignments$`1`
## [1] "memory_CD4+"
## 
## $CELL_GROUPINGS$cluster_graph_louvain_r0.4_annotated$assignments$`2`
## [1] "B"
## 
## $CELL_GROUPINGS$cluster_graph_louvain_r0.4_annotated$assignments$`3`
## [1] "memory_CD4+"
## 
## 
## 
## 
## $NORM_CLUSTERING_REPORT_DIMRED_NAMES
## [1] "umap" "pca"  "tsne"
## 
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$phase
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$phase$name
## [1] "phase"
## 
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$phase$label
## [1] "Cell cycle phases"
## 
## 
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$doublet_score
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$doublet_score$name
## [1] "doublet_score"
## 
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$doublet_score$label
## [1] "Doublet score"
## 
## 
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$total
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$total$name
## [1] "total"
## 
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$total$label
## [1] "Total number of UMI"
## 
## 
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$detected
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$detected$name
## [1] "detected"
## 
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$detected$label
## [1] "Detected number of genes"
## 
## 
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$cluster_graph_louvain_r0.4_annotated
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$cluster_graph_louvain_r0.4_annotated$name
## [1] "cluster_graph_louvain_r0.4_annotated"
## 
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$cluster_graph_louvain_r0.4_annotated$label
## NULL
## 
## 
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$cluster_sc3_k6_custom
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$cluster_sc3_k6_custom$name
## [1] "cluster_sc3_k6_custom"
## 
## $NORM_CLUSTERING_REPORT_DIMRED_PLOTS_OTHER$cluster_sc3_k6_custom$label
## [1] "From additional cell data"
## 
## 
## 
## $SELECTED_MARKERS_FILE
## [1] "/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/selected_markers.csv"
## 
## $NORM_CLUSTERING_REPORT_RMD_FILE
## [1] "/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/Rmd/single_sample/02_norm_clustering.Rmd"
## 
## $NORM_CLUSTERING_REPORT_SIMPLE_RMD_FILE
## [1] "/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/Rmd/single_sample/02_norm_clustering_simple.Rmd"
## 
## $NORM_CLUSTERING_BASE_OUT_DIR
## [1] "/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/output/02_norm_clustering"
## 
## $NORM_CLUSTERING_SELECTED_MARKERS_OUT_DIR
## [1] "/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/output/02_norm_clustering/selected_markers"
## 
## $NORM_CLUSTERING_DIMRED_PLOTS_OUT_DIR
## [1] "/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/output/02_norm_clustering/dimred_plots"
## 
## $NORM_CLUSTERING_CELL_ANNOTATION_OUT_DIR
## [1] "/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/output/02_norm_clustering/cell_annotation"
## 
## $NORM_CLUSTERING_OTHER_PLOTS_OUT_DIR
## [1] "/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/output/02_norm_clustering/other_plots"
## 
## $NORM_CLUSTERING_REPORT_HTML_FILE
## [1] "/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/output/02_norm_clustering/02_norm_clustering.html"
## 
## $NORM_CLUSTERING_REPORT_SIMPLE_HTML_FILE
## [1] "/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/output/02_norm_clustering/02_norm_clustering_simple.html"
## 
## $NORM_CLUSTERING_KNITR_MESSAGE
## [1] FALSE
## 
## $NORM_CLUSTERING_KNITR_WARNING
## [1] FALSE
## 
## $NORM_CLUSTERING_KNITR_ECHO
## [1] FALSE
## 
## attr(,"class")
## [1] "scdrake_list" "list"

Show runtime info

drake cache directory

/home/rstudio/shared/scdrake_run_tests_20231202_01-1.5.1-bioc3.15-docker/pipeline_outputs/example_data/pbmc1k/.drake

Traceback and warnings

## No traceback available

Bioconductor version

3.15

External libs

##                                                      zlib 
##                                                  "1.2.11" 
##                                                     bzlib 
##                                      "1.0.8, 13-Jul-2019" 
##                                                        xz 
##                                                   "5.2.4" 
##                                                      PCRE 
##                                        "10.34 2019-11-21" 
##                                                       ICU 
##                                                    "66.1" 
##                                                       TRE 
##                                 "TRE 0.8.0 R_fixes (BSD)" 
##                                                     iconv 
##                                              "glibc 2.31" 
##                                                  readline 
##                                                     "8.0" 
##                                                      BLAS 
## "/usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3"

Session info (pretty)

## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.2.1 (2022-06-23)
##  os       Ubuntu 20.04.4 LTS
##  system   x86_64, linux-gnu
##  ui       X11
##  language en
##  collate  C
##  ctype    en_US.UTF-8
##  tz       Etc/UTC
##  date     2023-12-02
##  pandoc   2.18 @ /usr/local/bin/ (via rmarkdown)
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  !  package                * version    date (UTC) lib source
##     abind                    1.4-5      2016-07-21 [1] RSPM (R 4.2.0)
##     AnnotationDbi          * 1.58.0     2022-04-26 [1] Bioconductor
##     AnnotationFilter       * 1.20.0     2022-04-26 [1] Bioconductor
##     AnnotationHub            3.4.0      2022-04-26 [1] Bioconductor
##     argparser                0.7.1      2021-03-08 [1] RSPM (R 4.2.0)
##     assertthat               0.2.1      2019-03-21 [1] CRAN (R 4.2.0)
##     backports                1.4.1      2021-12-13 [1] RSPM (R 4.2.0)
##     base64url                1.4        2018-05-14 [1] RSPM (R 4.2.0)
##     batchelor                1.12.3     2022-06-23 [1] Bioconductor
##     beachmat                 2.12.0     2022-04-26 [1] Bioconductor
##     beeswarm                 0.4.0      2021-06-01 [1] RSPM (R 4.2.0)
##     Biobase                * 2.56.0     2022-04-26 [1] Bioconductor
##     BiocFileCache            2.4.0      2022-04-26 [1] Bioconductor
##     BiocGenerics           * 0.42.0     2022-04-26 [1] Bioconductor
##     BiocIO                   1.6.0      2022-04-26 [1] Bioconductor
##     BiocManager              1.30.19    2022-10-25 [1] RSPM (R 4.2.0)
##     BiocNeighbors            1.14.0     2022-04-26 [1] Bioconductor
##     BiocParallel             1.30.4     2022-10-11 [1] Bioconductor
##     BiocSingular             1.12.0     2022-04-26 [1] Bioconductor
##     BiocVersion              3.15.2     2022-03-29 [1] Bioconductor
##     biomaRt                  2.52.0     2022-04-26 [1] Bioconductor
##     Biostrings               2.64.1     2022-08-18 [1] Bioconductor
##     bit                      4.0.5      2022-11-15 [1] RSPM (R 4.2.0)
##     bit64                    4.0.5      2020-08-30 [1] CRAN (R 4.2.0)
##     bitops                   1.0-7      2021-04-24 [1] CRAN (R 4.2.0)
##     blob                     1.2.3      2022-04-10 [1] CRAN (R 4.2.0)
##     bluster                  1.6.0      2022-04-26 [1] Bioconductor
##     brio                     1.1.3      2021-11-30 [1] CRAN (R 4.2.0)
##     bslib                    0.4.1      2022-11-02 [1] RSPM (R 4.2.0)
##     cachem                   1.0.6      2021-08-19 [1] CRAN (R 4.2.0)
##     callr                    3.7.3      2022-11-02 [1] RSPM (R 4.2.0)
##     celldex                  1.6.0      2022-04-28 [1] Bioconductor
##     class                    7.3-20     2022-01-16 [2] CRAN (R 4.2.1)
##     cli                    * 3.4.1      2022-09-23 [1] RSPM (R 4.2.0)
##     cluster                  2.1.3      2022-03-28 [2] CRAN (R 4.2.1)
##     clustermq                0.8.8      2019-06-05 [1] RSPM (R 4.2.1)
##     clustree                 0.5.0      2022-06-25 [1] RSPM (R 4.2.0)
##     codetools                0.2-18     2020-11-04 [2] CRAN (R 4.2.1)
##     colorspace               2.0-3      2022-02-21 [1] CRAN (R 4.2.0)
##     conflicted             * 1.1.0      2021-11-26 [1] RSPM (R 4.2.0)
##     cowplot                  1.1.1      2020-12-30 [1] RSPM (R 4.2.0)
##     crayon                   1.5.2      2022-09-29 [1] RSPM (R 4.2.0)
##     crosstalk                1.2.0      2021-11-04 [1] CRAN (R 4.2.0)
##     curl                     4.3.3      2022-10-06 [1] RSPM (R 4.2.0)
##     data.table               1.14.6     2022-11-16 [1] RSPM (R 4.2.0)
##     DBI                      1.1.3      2022-06-18 [1] RSPM (R 4.2.0)
##     dbplyr                   2.2.1      2022-06-27 [1] RSPM (R 4.2.0)
##     DelayedArray           * 0.22.0     2022-04-26 [1] Bioconductor
##     DelayedMatrixStats       1.18.2     2022-10-13 [1] Bioconductor
##     deldir                   1.0-6      2021-10-23 [1] RSPM (R 4.2.0)
##     DEoptimR                 1.0-11     2022-04-03 [1] CRAN (R 4.2.0)
##     desc                     1.4.2      2022-09-08 [1] RSPM (R 4.2.0)
##     devtools                 2.4.4      2022-07-20 [1] RSPM (R 4.2.0)
##     digest                   0.6.30     2022-10-18 [1] RSPM (R 4.2.0)
##     downlit                  0.4.2      2022-07-05 [1] RSPM (R 4.2.0)
##     dplyr                    1.0.10     2022-09-01 [1] RSPM (R 4.2.0)
##     dqrng                    0.3.0      2021-05-01 [1] RSPM (R 4.2.0)
##     drake                  * 7.13.4     2022-08-19 [1] RSPM (R 4.2.0)
##     DropletUtils             1.16.0     2022-04-26 [1] Bioconductor
##     DT                       0.26       2022-10-19 [1] RSPM (R 4.2.0)
##     e1071                    1.7-12     2022-10-24 [1] RSPM (R 4.2.0)
##     edgeR                    3.38.4     2022-08-07 [1] Bioconductor
##     ellipsis                 0.3.2      2021-04-29 [1] CRAN (R 4.2.0)
##     ensembldb              * 2.20.2     2022-06-16 [1] Bioconductor
##     evaluate                 0.18       2022-11-07 [1] RSPM (R 4.2.0)
##     ExperimentHub            2.4.0      2022-04-26 [1] Bioconductor
##     fansi                    1.0.3      2022-03-24 [1] CRAN (R 4.2.0)
##     farver                   2.1.1      2022-07-06 [1] RSPM (R 4.2.0)
##     fastmap                  1.1.0      2021-01-25 [1] CRAN (R 4.2.0)
##     filelock                 1.0.2      2018-10-05 [1] CRAN (R 4.2.0)
##     fitdistrplus             1.1-8      2022-03-10 [1] RSPM (R 4.2.0)
##     fs                       1.5.2      2021-12-08 [1] CRAN (R 4.2.0)
##     future                   1.29.0     2022-11-06 [1] RSPM (R 4.2.0)
##     future.apply             1.10.0     2022-11-05 [1] RSPM (R 4.2.0)
##     generics                 0.1.3      2022-07-05 [1] RSPM (R 4.2.0)
##     GenomeInfoDb           * 1.32.4     2022-09-06 [1] Bioconductor
##     GenomeInfoDbData         1.2.8      2022-05-02 [1] Bioconductor
##     GenomicAlignments        1.32.1     2022-07-24 [1] Bioconductor
##     GenomicFeatures        * 1.48.4     2022-09-20 [1] Bioconductor
##     GenomicRanges          * 1.48.0     2022-04-26 [1] Bioconductor
##     ggbeeswarm               0.6.0      2017-08-07 [1] RSPM (R 4.2.0)
##     ggforce                  0.4.1      2022-10-04 [1] RSPM (R 4.2.0)
##     ggplot2                  3.4.0      2022-11-04 [1] RSPM (R 4.2.0)
##     ggplotify                0.1.0      2021-09-02 [1] RSPM (R 4.2.0)
##     ggraph                   2.1.0      2022-10-09 [1] RSPM (R 4.2.0)
##     ggrepel                  0.9.2      2022-11-06 [1] RSPM (R 4.2.0)
##     ggridges                 0.5.4      2022-09-26 [1] RSPM (R 4.2.0)
##     glmGamPoi                1.8.0      2022-04-26 [1] Bioconductor
##     globals                  0.16.2     2022-11-21 [1] RSPM (R 4.2.0)
##     glue                     1.6.2      2022-02-24 [1] CRAN (R 4.2.0)
##     goftest                  1.2-3      2021-10-07 [1] RSPM (R 4.2.0)
##     graphlayouts             0.8.4      2022-11-24 [1] RSPM (R 4.2.0)
##     gridExtra                2.3        2017-09-09 [1] CRAN (R 4.2.0)
##     gridGraphics             0.5-1      2020-12-13 [1] RSPM (R 4.2.0)
##     gtable                   0.3.1      2022-09-01 [1] RSPM (R 4.2.0)
##     harmony                  0.1.1      2022-11-14 [1] RSPM (R 4.2.0)
##     HDF5Array              * 1.24.2     2022-08-02 [1] Bioconductor
##     here                   * 1.0.1      2020-12-13 [1] RSPM (R 4.2.0)
##     highr                    0.9        2021-04-16 [1] CRAN (R 4.2.0)
##     hms                      1.1.2      2022-08-19 [1] RSPM (R 4.2.0)
##     htmltools                0.5.3      2022-07-18 [1] RSPM (R 4.2.0)
##     htmlwidgets              1.5.4      2021-09-08 [1] CRAN (R 4.2.0)
##     httpuv                   1.6.6      2022-09-08 [1] RSPM (R 4.2.0)
##     httr                     1.4.4      2022-08-17 [1] RSPM (R 4.2.0)
##     ica                      1.0-3      2022-07-08 [1] RSPM (R 4.2.0)
##     igraph                   1.3.5      2022-09-22 [1] RSPM (R 4.2.0)
##     interactiveDisplayBase   1.34.0     2022-04-26 [1] Bioconductor
##     IRanges                * 2.30.1     2022-08-18 [1] Bioconductor
##     irlba                    2.3.5.1    2022-10-03 [1] RSPM (R 4.2.0)
##     janitor                  2.1.0      2021-01-05 [1] RSPM (R 4.2.0)
##     jquerylib                0.1.4      2021-04-26 [1] CRAN (R 4.2.0)
##     jsonlite                 1.8.4      2022-12-06 [1] RSPM (R 4.2.0)
##     kableExtra               1.3.4      2021-02-20 [1] RSPM (R 4.2.0)
##     KEGGREST                 1.36.3     2022-07-12 [1] Bioconductor
##     KernSmooth               2.23-20    2021-05-03 [2] CRAN (R 4.2.1)
##     knitr                    1.41       2022-11-18 [1] RSPM (R 4.2.0)
##     labeling                 0.4.2      2020-10-20 [1] CRAN (R 4.2.0)
##     later                    1.3.0      2021-08-18 [1] CRAN (R 4.2.0)
##     lattice                  0.20-45    2021-09-22 [2] CRAN (R 4.2.1)
##     lazyeval                 0.2.2      2019-03-15 [1] CRAN (R 4.2.0)
##     leiden                   0.4.3      2022-09-10 [1] RSPM (R 4.2.0)
##     lifecycle                1.0.3      2022-10-07 [1] RSPM (R 4.2.0)
##     limma                    3.52.4     2022-09-27 [1] Bioconductor
##     listenv                  0.8.0      2019-12-05 [1] RSPM (R 4.2.0)
##     littler                  0.3.17     2023-05-26 [1] Github (eddelbuettel/littler@31aa160)
##     lmtest                   0.9-40     2022-03-21 [1] RSPM (R 4.2.0)
##     locfit                   1.5-9.6    2022-07-11 [1] RSPM (R 4.2.0)
##     lubridate                1.9.0      2022-11-06 [1] RSPM (R 4.2.0)
##     magrittr               * 2.0.3      2022-03-30 [1] CRAN (R 4.2.0)
##     MASS                     7.3-58.1   2022-08-03 [2] RSPM (R 4.2.0)
##     Matrix                 * 1.5-3      2022-11-11 [1] RSPM (R 4.2.0)
##     MatrixGenerics         * 1.8.1      2022-06-26 [1] Bioconductor
##     matrixStats            * 0.63.0     2022-11-18 [1] RSPM (R 4.2.0)
##     memoise                  2.0.1      2021-11-26 [1] CRAN (R 4.2.0)
##     metapod                  1.4.0      2022-04-26 [1] Bioconductor
##     mime                     0.12       2021-09-28 [1] CRAN (R 4.2.0)
##     miniUI                   0.1.1.1    2018-05-18 [1] RSPM (R 4.2.0)
##     munsell                  0.5.0      2018-06-12 [1] CRAN (R 4.2.0)
##     mvtnorm                  1.1-3      2021-10-08 [1] CRAN (R 4.2.0)
##     nlme                     3.1-158    2022-06-15 [2] RSPM (R 4.2.0)
##     org.Hs.eg.db             3.15.0     2022-04-11 [1] Bioconductor
##     parallelly               1.32.1     2022-07-21 [1] RSPM (R 4.2.0)
##     patchwork                1.1.2      2022-08-19 [1] RSPM (R 4.2.0)
##     pbapply                  1.6-0      2022-11-16 [1] RSPM (R 4.2.0)
##     pcaPP                    2.0-3      2022-10-24 [1] RSPM (R 4.2.0)
##     PCAtools                 2.8.0      2022-04-26 [1] Bioconductor
##     pheatmap                 1.0.12     2019-01-04 [1] RSPM (R 4.2.0)
##     pillar                   1.8.1      2022-08-19 [1] RSPM (R 4.2.0)
##     pkgbuild                 1.3.1      2021-12-20 [1] RSPM (R 4.2.0)
##     pkgconfig                2.0.3      2019-09-22 [1] CRAN (R 4.2.0)
##     pkgload                  1.3.2      2022-11-16 [1] RSPM (R 4.2.0)
##     plotly                   4.10.1     2022-11-07 [1] RSPM (R 4.2.0)
##     plyr                     1.8.8      2022-11-11 [1] RSPM (R 4.2.0)
##     png                      0.1-8      2022-11-29 [1] RSPM (R 4.2.0)
##     polyclip                 1.10-4     2022-10-20 [1] RSPM (R 4.2.0)
##     prettyunits              1.1.1      2020-01-24 [1] CRAN (R 4.2.0)
##     processx                 3.8.0      2022-10-26 [1] RSPM (R 4.2.0)
##     profvis                  0.3.7      2020-11-02 [1] RSPM (R 4.2.0)
##     progress                 1.2.2      2019-05-16 [1] CRAN (R 4.2.0)
##     progressr                0.11.0     2022-09-02 [1] RSPM (R 4.2.0)
##     promises                 1.2.0.1    2021-02-11 [1] CRAN (R 4.2.0)
##     ProtGenerics             1.28.0     2022-04-26 [1] Bioconductor
##     proxy                    0.4-27     2022-06-09 [1] RSPM (R 4.2.0)
##     ps                       1.7.2      2022-10-26 [1] RSPM (R 4.2.0)
##     purrr                    0.3.5      2022-10-06 [1] RSPM (R 4.2.0)
##     qs                       0.25.4     2022-08-09 [1] RSPM (R 4.2.0)
##     R.methodsS3              1.8.2      2022-06-13 [1] RSPM (R 4.2.0)
##     R.oo                     1.25.0     2022-06-12 [1] RSPM (R 4.2.0)
##     R.utils                  2.12.2     2022-11-11 [1] RSPM (R 4.2.0)
##     R6                       2.5.1      2021-08-19 [1] CRAN (R 4.2.0)
##     ragg                     1.2.4      2022-10-24 [1] RSPM (R 4.2.0)
##     RANN                     2.6.1      2019-01-08 [1] RSPM (R 4.2.0)
##     RApiSerialize            0.1.2      2022-08-25 [1] RSPM (R 4.2.0)
##     rappdirs                 0.3.3      2021-01-31 [1] CRAN (R 4.2.0)
##     RColorBrewer             1.1-3      2022-04-03 [1] CRAN (R 4.2.0)
##     Rcpp                     1.0.9      2022-07-08 [1] RSPM (R 4.2.0)
##     RcppAnnoy                0.0.20     2022-10-27 [1] RSPM (R 4.2.0)
##     RcppParallel             5.1.5      2022-01-05 [1] RSPM (R 4.2.0)
##     RCurl                    1.98-1.9   2022-10-03 [1] RSPM (R 4.2.0)
##     readr                    2.1.3      2022-10-01 [1] RSPM (R 4.2.0)
##     remotes                  2.4.2      2021-11-30 [1] RSPM (R 4.2.0)
##     reshape2                 1.4.4      2020-04-09 [1] CRAN (R 4.2.0)
##     ResidualMatrix           1.6.1      2022-08-16 [1] Bioconductor
##     restfulr                 0.0.15     2022-06-16 [1] RSPM (R 4.2.0)
##     reticulate               1.26       2022-08-31 [1] RSPM (R 4.2.0)
##     rhdf5                  * 2.40.0     2022-04-26 [1] Bioconductor
##     rhdf5filters             1.8.0      2022-04-26 [1] Bioconductor
##     Rhdf5lib                 1.18.2     2022-05-15 [1] Bioconductor
##     RhpcBLASctl              0.21-247.1 2021-11-05 [1] RSPM (R 4.2.0)
##     rjson                    0.2.21     2022-01-09 [1] CRAN (R 4.2.0)
##     rlang                  * 1.0.6      2022-09-24 [1] RSPM (R 4.2.0)
##     rmarkdown                2.18       2022-11-09 [1] RSPM (R 4.2.0)
##     robustbase               0.95-0     2022-04-02 [1] CRAN (R 4.2.0)
##     ROCR                     1.0-11     2020-05-02 [1] CRAN (R 4.2.0)
##     rprojroot                2.0.3      2022-04-02 [1] CRAN (R 4.2.0)
##     rrcov                    1.7-2      2022-10-24 [1] RSPM (R 4.2.0)
##     Rsamtools                2.12.0     2022-04-26 [1] Bioconductor
##     RSQLite                  2.2.19     2022-11-24 [1] RSPM (R 4.2.0)
##     rstudioapi               0.14       2022-08-22 [1] RSPM (R 4.2.0)
##     rsvd                     1.0.5      2021-04-16 [1] RSPM (R 4.2.0)
##     rtracklayer              1.56.1     2022-06-23 [1] Bioconductor
##     Rtsne                    0.16       2022-04-17 [1] RSPM (R 4.2.0)
##     rvest                    1.0.3      2022-08-19 [1] RSPM (R 4.2.0)
##     rzmq                     0.9.8      2021-05-04 [1] RSPM (R 4.2.0)
##     S4Vectors              * 0.34.0     2022-04-26 [1] Bioconductor
##     sass                     0.4.4      2022-11-24 [1] RSPM (R 4.2.0)
##     SC3                      1.15.1     2023-05-26 [1] Github (gorgitko/SC3@58d73fb)
##     ScaledMatrix             1.4.1      2022-09-11 [1] Bioconductor
##     scales                   1.2.1      2022-08-20 [1] RSPM (R 4.2.0)
##     scater                   1.24.0     2022-04-26 [1] Bioconductor
##     scattermore              0.8        2022-02-14 [1] RSPM (R 4.2.0)
##     scDblFinder              1.10.0     2022-04-26 [1] Bioconductor
##  VP scdrake                * 1.5.1      2023-06-15 [?] Bioconductor (on disk 1.5.0)
##     scran                    1.24.1     2022-09-11 [1] Bioconductor
##     sctransform              0.3.5      2022-09-21 [1] RSPM (R 4.2.0)
##     scuttle                  1.6.3      2022-08-23 [1] Bioconductor
##     sessioninfo              1.2.2      2021-12-06 [1] RSPM (R 4.2.0)
##     Seurat                   4.3.0      2022-11-18 [1] RSPM (R 4.2.0)
##     SeuratObject             4.1.3      2022-11-07 [1] RSPM (R 4.2.0)
##     shiny                    1.7.3      2022-10-25 [1] RSPM (R 4.2.0)
##     SingleCellExperiment     1.18.1     2022-10-02 [1] Bioconductor
##     SingleR                  1.10.0     2022-04-26 [1] Bioconductor
##     snakecase                0.11.0     2019-05-25 [1] RSPM (R 4.2.0)
##     sp                       1.5-1      2022-11-07 [1] RSPM (R 4.2.0)
##     sparseMatrixStats        1.8.0      2022-04-26 [1] Bioconductor
##     spatstat.data            3.0-0      2022-10-21 [1] RSPM (R 4.2.0)
##     spatstat.explore         3.0-5      2022-11-10 [1] RSPM (R 4.2.0)
##     spatstat.geom            3.0-3      2022-10-25 [1] RSPM (R 4.2.0)
##     spatstat.random          3.0-1      2022-11-03 [1] RSPM (R 4.2.0)
##     spatstat.sparse          3.0-0      2022-10-21 [1] RSPM (R 4.2.0)
##     spatstat.utils           3.0-1      2022-10-19 [1] RSPM (R 4.2.0)
##     statmod                  1.4.37     2022-08-12 [1] RSPM (R 4.2.0)
##     storr                    1.2.5      2020-12-01 [1] RSPM (R 4.2.0)
##     stringfish               0.15.7     2022-04-13 [1] RSPM (R 4.2.0)
##     stringi                  1.7.8      2022-07-11 [1] RSPM (R 4.2.0)
##     stringr                  1.5.0      2022-12-02 [1] RSPM (R 4.2.0)
##     SummarizedExperiment     1.26.1     2022-04-29 [1] Bioconductor
##     survival                 3.3-1      2022-03-03 [2] CRAN (R 4.2.1)
##     svglite                  2.1.0      2022-02-03 [1] RSPM (R 4.2.0)
##     systemfonts              1.0.4      2022-02-11 [1] RSPM (R 4.2.0)
##     tensor                   1.5        2012-05-05 [1] RSPM (R 4.2.0)
##     testthat               * 3.1.5      2022-10-08 [1] RSPM (R 4.2.0)
##     textshaping              0.3.6      2021-10-13 [1] RSPM (R 4.2.0)
##     tibble                   3.1.8      2022-07-22 [1] RSPM (R 4.2.0)
##     tidygraph                1.2.3      2023-02-01 [1] RSPM (R 4.2.0)
##     tidyr                    1.2.1      2022-09-08 [1] RSPM (R 4.2.0)
##     tidyselect               1.1.2      2022-02-21 [1] RSPM (R 4.2.0)
##     timechange               0.1.1      2022-11-04 [1] RSPM (R 4.2.0)
##     tweenr                   2.0.2      2022-09-06 [1] RSPM (R 4.2.0)
##     txtq                     0.2.4      2021-03-27 [1] RSPM (R 4.2.0)
##     tzdb                     0.3.0      2022-03-28 [1] CRAN (R 4.2.0)
##     urlchecker               1.0.1      2021-11-30 [1] RSPM (R 4.2.0)
##     usethis                  2.1.6      2022-05-25 [1] RSPM (R 4.2.0)
##     utf8                     1.2.2      2021-07-24 [1] CRAN (R 4.2.0)
##     uwot                     0.1.14     2022-08-22 [1] RSPM (R 4.2.0)
##     vctrs                    0.5.1      2022-11-16 [1] RSPM (R 4.2.0)
##     vipor                    0.4.5      2017-03-22 [1] RSPM (R 4.2.0)
##     viridis                  0.6.2      2021-10-13 [1] CRAN (R 4.2.0)
##     viridisLite              0.4.1      2022-08-22 [1] RSPM (R 4.2.0)
##     webshot                  0.5.4      2022-09-26 [1] RSPM (R 4.2.0)
##     withr                    2.5.0      2022-03-03 [1] CRAN (R 4.2.0)
##     WriteXLS                 6.4.0      2022-02-24 [1] RSPM (R 4.2.0)
##     xfun                     0.35       2022-11-16 [1] RSPM (R 4.2.0)
##     xgboost                  1.6.0.1    2022-04-16 [1] RSPM (R 4.2.0)
##     XML                      3.99-0.13  2022-12-04 [1] RSPM (R 4.2.0)
##     xml2                     1.3.3      2021-11-30 [1] CRAN (R 4.2.0)
##     xtable                   1.8-4      2019-04-21 [1] CRAN (R 4.2.0)
##     XVector                  0.36.0     2022-04-26 [1] Bioconductor
##     yaml                     2.3.6      2022-10-18 [1] RSPM (R 4.2.0)
##     yulab.utils              0.0.5      2022-06-30 [1] RSPM (R 4.2.0)
##     zlibbioc                 1.42.0     2022-04-26 [1] Bioconductor
##     zoo                      1.8-11     2022-09-17 [1] RSPM (R 4.2.0)
## 
##  [1] /usr/local/lib/R/site-library
##  [2] /usr/local/lib/R/library
## 
##  V ── Loaded and on-disk version mismatch.
##  P ── Loaded and on-disk path mismatch.
## 
## ──────────────────────────────────────────────────────────────────────────────

Session info (base)

## R version 4.2.1 (2022-06-23)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04.4 LTS
## 
## Matrix products: default
## BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/liblapack.so.3
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=C              
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats    graphics stats4   utils    methods  base    
## 
## other attached packages:
##  [1] ensembldb_2.20.2        AnnotationFilter_1.20.0 GenomicFeatures_1.48.4 
##  [4] GenomicRanges_1.48.0    GenomeInfoDb_1.32.4     HDF5Array_1.24.2       
##  [7] rhdf5_2.40.0            DelayedArray_0.22.0     MatrixGenerics_1.8.1   
## [10] matrixStats_0.63.0      Matrix_1.5-3            drake_7.13.4           
## [13] AnnotationDbi_1.58.0    IRanges_2.30.1          S4Vectors_0.34.0       
## [16] Biobase_2.56.0          BiocGenerics_0.42.0     scdrake_1.5.1          
## [19] testthat_3.1.5          magrittr_2.0.3          here_1.0.1             
## [22] cli_3.4.1               rlang_1.0.6             conflicted_1.1.0       
## 
## loaded via a namespace (and not attached):
##   [1] rsvd_1.0.5                    ica_1.0-3                    
##   [3] svglite_2.1.0                 class_7.3-20                 
##   [5] ps_1.7.2                      Rsamtools_2.12.0             
##   [7] lmtest_0.9-40                 rprojroot_2.0.3              
##   [9] crayon_1.5.2                  MASS_7.3-58.1                
##  [11] rhdf5filters_1.8.0            nlme_3.1-158                 
##  [13] WriteXLS_6.4.0                backports_1.4.1              
##  [15] XVector_0.36.0                ROCR_1.0-11                  
##  [17] irlba_2.3.5.1                 callr_3.7.3                  
##  [19] limma_3.52.4                  scater_1.24.0                
##  [21] filelock_1.0.2                stringfish_0.15.7            
##  [23] xgboost_1.6.0.1               qs_0.25.4                    
##  [25] BiocParallel_1.30.4           rjson_0.2.21                 
##  [27] bit64_4.0.5                   glue_1.6.2                   
##  [29] harmony_0.1.1                 scDblFinder_1.10.0           
##  [31] pheatmap_1.0.12               sctransform_0.3.5            
##  [33] parallel_4.2.1                processx_3.8.0               
##  [35] vipor_0.4.5                   spatstat.sparse_3.0-0        
##  [37] base64url_1.4                 spatstat.geom_3.0-3          
##  [39] tidyselect_1.1.2              SummarizedExperiment_1.26.1  
##  [41] usethis_2.1.6                 argparser_0.7.1              
##  [43] SeuratObject_4.1.3            fitdistrplus_1.1-8           
##  [45] XML_3.99-0.13                 tidyr_1.2.1                  
##  [47] zoo_1.8-11                    GenomicAlignments_1.32.1     
##  [49] xtable_1.8-4                  evaluate_0.18                
##  [51] ggplot2_3.4.0                 scuttle_1.6.3                
##  [53] zlibbioc_1.42.0               rstudioapi_0.14              
##  [55] miniUI_0.1.1.1                sp_1.5-1                     
##  [57] bslib_0.4.1                   shiny_1.7.3                  
##  [59] BiocSingular_1.12.0           xfun_0.35                    
##  [61] pkgbuild_1.3.1                cluster_2.1.3                
##  [63] tidygraph_1.2.3               KEGGREST_1.36.3              
##  [65] clustermq_0.8.8               tibble_3.1.8                 
##  [67] interactiveDisplayBase_1.34.0 ggrepel_0.9.2                
##  [69] listenv_0.8.0                 Biostrings_2.64.1            
##  [71] png_0.1-8                     future_1.29.0                
##  [73] withr_2.5.0                   bitops_1.0-7                 
##  [75] ggforce_0.4.1                 plyr_1.8.8                   
##  [77] pcaPP_2.0-3                   e1071_1.7-12                 
##  [79] dqrng_0.3.0                   RcppParallel_5.1.5           
##  [81] pillar_1.8.1                  cachem_1.0.6                 
##  [83] fs_1.5.2                      DelayedMatrixStats_1.18.2    
##  [85] vctrs_0.5.1                   ellipsis_0.3.2               
##  [87] generics_0.1.3                RApiSerialize_0.1.2          
##  [89] devtools_2.4.4                tools_4.2.1                  
##  [91] beeswarm_0.4.0                munsell_0.5.0                
##  [93] tweenr_2.0.2                  proxy_0.4-27                 
##  [95] fastmap_1.1.0                 compiler_4.2.1               
##  [97] pkgload_1.3.2                 abind_1.4-5                  
##  [99] httpuv_1.6.6                  rtracklayer_1.56.1           
## [101] ExperimentHub_2.4.0           sessioninfo_1.2.2            
## [103] plotly_4.10.1                 GenomeInfoDbData_1.2.8       
## [105] gridExtra_2.3                 edgeR_3.38.4                 
## [107] lattice_0.20-45               deldir_1.0-6                 
## [109] utf8_1.2.2                    later_1.3.0                  
## [111] dplyr_1.0.10                  BiocFileCache_2.4.0          
## [113] jsonlite_1.8.4                storr_1.2.5                  
## [115] scales_1.2.1                  datasets_4.2.1               
## [117] ScaledMatrix_1.4.1            pbapply_1.6-0                
## [119] sparseMatrixStats_1.8.0       lazyeval_0.2.2               
## [121] promises_1.2.0.1              R.utils_2.12.2               
## [123] goftest_1.2-3                 spatstat.utils_3.0-1         
## [125] reticulate_1.26               rmarkdown_2.18               
## [127] cowplot_1.1.1                 textshaping_0.3.6            
## [129] statmod_1.4.37                webshot_0.5.4                
## [131] Rtsne_0.16                    glmGamPoi_1.8.0              
## [133] uwot_0.1.14                   igraph_1.3.5                 
## [135] survival_3.3-1                ResidualMatrix_1.6.1         
## [137] yaml_2.3.6                    systemfonts_1.0.4            
## [139] htmltools_0.5.3               memoise_2.0.1                
## [141] profvis_0.3.7                 BiocIO_1.6.0                 
## [143] Seurat_4.3.0                  locfit_1.5-9.6               
## [145] graphlayouts_0.8.4            PCAtools_2.8.0               
## [147] viridisLite_0.4.1             digest_0.6.30                
## [149] rrcov_1.7-2                   assertthat_0.2.1             
## [151] RhpcBLASctl_0.21-247.1        mime_0.12                    
## [153] rappdirs_0.3.3                SingleR_1.10.0               
## [155] RSQLite_2.2.19                yulab.utils_0.0.5            
## [157] future.apply_1.10.0           remotes_2.4.2                
## [159] data.table_1.14.6             urlchecker_1.0.1             
## [161] blob_1.2.3                    R.oo_1.25.0                  
## [163] ragg_1.2.4                    labeling_0.4.2               
## [165] splines_4.2.1                 Rhdf5lib_1.18.2              
## [167] AnnotationHub_3.4.0           ProtGenerics_1.28.0          
## [169] RCurl_1.98-1.9                hms_1.1.2                    
## [171] colorspace_2.0-3              DropletUtils_1.16.0          
## [173] BiocManager_1.30.19           ggbeeswarm_0.6.0             
## [175] littler_0.3.17                sass_0.4.4                   
## [177] Rcpp_1.0.9                    RANN_2.6.1                   
## [179] mvtnorm_1.1-3                 txtq_0.2.4                   
## [181] fansi_1.0.3                   tzdb_0.3.0                   
## [183] brio_1.1.3                    parallelly_1.32.1            
## [185] R6_2.5.1                      grid_4.2.1                   
## [187] ggridges_0.5.4                lifecycle_1.0.3              
## [189] bluster_1.6.0                 curl_4.3.3                   
## [191] jquerylib_0.1.4               leiden_0.4.3                 
## [193] snakecase_0.11.0              robustbase_0.95-0            
## [195] desc_1.4.2                    RcppAnnoy_0.0.20             
## [197] org.Hs.eg.db_3.15.0           RColorBrewer_1.1-3           
## [199] spatstat.explore_3.0-5        stringr_1.5.0                
## [201] htmlwidgets_1.5.4             beachmat_2.12.0              
## [203] polyclip_1.10-4               biomaRt_2.52.0               
## [205] purrr_0.3.5                   crosstalk_1.2.0              
## [207] timechange_0.1.1              gridGraphics_0.5-1           
## [209] rvest_1.0.3                   globals_0.16.2               
## [211] spatstat.random_3.0-1         patchwork_1.1.2              
## [213] progressr_0.11.0              batchelor_1.12.3             
## [215] codetools_0.2-18              grDevices_4.2.1              
## [217] lubridate_1.9.0               metapod_1.4.0                
## [219] prettyunits_1.1.1             SingleCellExperiment_1.18.1  
## [221] dbplyr_2.2.1                  R.methodsS3_1.8.2            
## [223] celldex_1.6.0                 gtable_0.3.1                 
## [225] DBI_1.1.3                     highr_0.9                    
## [227] tensor_1.5                    httr_1.4.4                   
## [229] KernSmooth_2.23-20            stringi_1.7.8                
## [231] progress_1.2.2                reshape2_1.4.4               
## [233] farver_2.1.1                  viridis_0.6.2                
## [235] DT_0.26                       xml2_1.3.3                   
## [237] BiocNeighbors_1.14.0          kableExtra_1.3.4             
## [239] restfulr_0.0.15               readr_2.1.3                  
## [241] ggplotify_0.1.0               scattermore_0.8              
## [243] BiocVersion_3.15.2            scran_1.24.1                 
## [245] DEoptimR_1.0-11               bit_4.0.5                    
## [247] clustree_0.5.0                spatstat.data_3.0-0          
## [249] ggraph_2.1.0                  janitor_2.1.0                
## [251] pkgconfig_2.0.3               rzmq_0.9.8                   
## [253] knitr_1.41                    downlit_0.4.2                
## [255] SC3_1.15.1

Page generated on 2023-12-02 18:51:33

LS0tCnRpdGxlOiAiMDIgLSBOb3JtYWxpemF0aW9uIGFuZCBjbHVzdGVyaW5nIgphdXRob3I6ICJNYWRlIGJ5IHRoZSBbc2NkcmFrZSBwaXBlbGluZV0oaHR0cHM6Ly9iaW9pbmZvY3ouZ2l0aHViLmlvL3NjZHJha2UpIgppbnN0aXR1dGU6IHwKICBMYWJvcmF0b3J5IG9mIEdlbm9taWNzIGFuZCBCaW9pbmZvcm1hdGljcwogIEluc3RpdHV0ZSBvZiBNb2xlY3VsYXIgR2VuZXRpY3Mgb2YgdGhlIEFTQ1IKICBodHRwczovL2ltZy5jYXMuY3oKZGF0ZTogImByIGdsdWU6OmdsdWUoJ0RvY3VtZW50IGdlbmVyYXRlZDoge2Zvcm1hdChTeXMudGltZSgpLCBcIiVZLSVtLSVkICVIOiVNOiVTICVaJXpcIil9JylgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UKICAgIHRoZW1lOiAiZmxhdGx5IgogICAgc2VsZl9jb250YWluZWQ6IHRydWUKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGRmX3ByaW50OiAicGFnZWQiCnBhcmFtczoKICBjc3NfZmlsZTogIWV4cHIgaGVyZTo6aGVyZSgiUm1kL2NvbW1vbi9zdHlsZXNoZWV0LmNzcyIpCiAgZHJha2VfY2FjaGVfZGlyOiAhZXhwciBoZXJlOjpoZXJlKCIuZHJha2UiKQpjc3M6ICJgciBwYXJhbXMkY3NzX2ZpbGVgIgotLS0KCmBgYHtyLCBpbmNsdWRlID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMobGlicmFyeShtYWdyaXR0cikpCmlmIChybGFuZzo6aXNfdHJ1ZShnZXRPcHRpb24oImtuaXRyLmluLnByb2dyZXNzIikpKSB7CiAgcGFyYW1zXyA8LSBzY2RyYWtlOjpzY2RyYWtlX2xpc3QocGFyYW1zKQp9CmRyYWtlX2NhY2hlX2RpciA8LSBwYXJhbXNfJGRyYWtlX2NhY2hlX2RpcgoKZHJha2U6OmxvYWRkKAogIGNvbmZpZ19tYWluLCBjb25maWdfbm9ybV9jbHVzdGVyaW5nLCBkb3VibGV0X3Njb3JlLAogIGRpbXJlZF9wbG90c19jbHVzdGVyaW5nX2ZpbGVzLCBkaW1yZWRfcGxvdHNfY2x1c3RlcmluZ19maWxlc19vdXQsCiAgZGltcmVkX3Bsb3RzX2NsdXN0ZXJpbmdfdW5pdGVkX2ZpbGVzLCBkaW1yZWRfcGxvdHNfY2x1c3RlcmluZ191bml0ZWRfZmlsZXNfb3V0LAogIGNsdXN0ZXJfZ3JhcGhfbG91dmFpbl9jbHVzdHJlZV9maWxlLCBjbHVzdGVyX2dyYXBoX2xlaWRlbl9jbHVzdHJlZV9maWxlLAogIGNsdXN0ZXJfc2MzX2NsdXN0cmVlX2ZpbGUsIGNsdXN0ZXJfc2MzX2NsdXN0ZXJfc3RhYmlsaXR5X3Bsb3RzX2ZpbGUsCiAgY2x1c3Rlcl9rbWVhbnNfa2Jlc3RfaywgY2x1c3Rlcl9rbWVhbnNfa19jbHVzdHJlZV9maWxlLCBjbHVzdGVyX2ttZWFuc19rYmVzdF9nYXBzX3Bsb3RfZmlsZSwKICBkaW1yZWRfcGxvdHNfb3RoZXJfdmFyc19maWxlcywgZGltcmVkX3Bsb3RzX290aGVyX3ZhcnNfZmlsZXNfb3V0LAogIHNlbGVjdGVkX21hcmtlcnNfcGxvdHNfZmlsZXMsIHNlbGVjdGVkX21hcmtlcnNfcGxvdHNfZmlsZXNfb3V0LAogIGRpbXJlZF9wbG90c19jZWxsX2Fubm90YXRpb25fZmlsZXMsIGRpbXJlZF9wbG90c19jZWxsX2Fubm90YXRpb25fZmlsZXNfb3V0LAogIGNlbGxfYW5ub3RhdGlvbl9kaWFnbm9zdGljX3Bsb3RzLCBjZWxsX2Fubm90YXRpb25fZGlhZ25vc3RpY19wbG90c19maWxlcywKICBkaW1yZWRfcGxvdHNfY2VsbF9hbm5vdGF0aW9uX2ZpbGVzLCBkaW1yZWRfcGxvdHNfY2VsbF9hbm5vdGF0aW9uX2ZpbGVzLAoKICBwYXRoID0gZHJha2VfY2FjaGVfZGlyCikKCmNmZyA8LSBjb25maWdfbm9ybV9jbHVzdGVyaW5nCgpzY2UgPC0gZHJha2U6OnJlYWRkKHNjZV9maW5hbF9ub3JtX2NsdXN0ZXJpbmcsIHBhdGggPSBkcmFrZV9jYWNoZV9kaXIpCnNjZV9tZXRhZGF0YSA8LSBTNFZlY3RvcnM6Om1ldGFkYXRhKHNjZSkKc2NlX2NvbERhdGEgPC0gU2luZ2xlQ2VsbEV4cGVyaW1lbnQ6OmNvbERhdGEoc2NlKQpzY2Vfcm93RGF0YSA8LSBTaW5nbGVDZWxsRXhwZXJpbWVudDo6cm93RGF0YShzY2UpCmNjX2dlbmVzX3ZhbGlkIDwtIGFsbCghaXMubmEoc2NlX2NvbERhdGEkcGhhc2UpKQpub3JtYWxpemF0aW9uX3R5cGVfc2NlIDwtIHNjZV9tZXRhZGF0YSRub3JtYWxpemF0aW9uX3R5cGUKaHZnX21ldHJpYyA8LSBzY2VfbWV0YWRhdGEkaHZnX21ldHJpYwpodmdfc2VsZWN0aW9uIDwtIHNjZV9tZXRhZGF0YSRodmdfc2VsZWN0aW9uCmh2Z19zZWxlY3Rpb25fdmFsdWUgPC0gc2NlX21ldGFkYXRhJGh2Z19zZWxlY3Rpb25fdmFsdWUKcmVwb3J0X2h0bWxfZmlsZSA8LSBjZmckTk9STV9DTFVTVEVSSU5HX1JFUE9SVF9IVE1MX0ZJTEUKCmFueV9jbHVzdGVyaW5nX2VuYWJsZWQgPC0gYW55KAogIGNmZyRDTFVTVEVSX0dSQVBIX0xPVVZBSU5fRU5BQkxFRCwgY2ZnJENMVVNURVJfR1JBUEhfV0FMS1RSQVBfRU5BQkxFRCwgY2ZnJENMVVNURVJfR1JBUEhfTEVJREVOX0VOQUJMRUQsCiAgY2ZnJENMVVNURVJfS01FQU5TX0tfRU5BQkxFRCwgY2ZnJENMVVNURVJfS01FQU5TX0tCRVNUX0VOQUJMRUQsCiAgY2ZnJENMVVNURVJfU0MzX0VOQUJMRUQKKQpgYGAKCioqKgoKYGBge3IsIGNoaWxkID0gaGVyZTo6aGVyZSgiUm1kL2NvbW1vbi9faGVhZGVyLlJtZCIpfQpgYGAKCioqKgoKIyBJbnB1dCBkYXRhIG92ZXJ2aWV3CgpKdXN0IHRvIHJldmlldyBkYXRhIGZyb20gdGhlIHByZWNlZGluZyBwaXBlbGluZSBzdGVwIChgMDEgLSBxdWFsaXR5IGNvbnRyb2xgKToKCmBgYHtyfQpjYXQoZHJha2U6OnJlYWRkKHNjZV9maW5hbF9pbnB1dF9xY19pbmZvLCBwYXRoID0gZHJha2VfY2FjaGVfZGlyKSRzdHIpCmBgYAoKKioqCgojIENlbGwgY3ljbGUgcGhhc2UgYXNzaWdubWVudAoKQXNzaWduIGVhY2ggY2VsbCBhIHNjb3JlLCBiYXNlZCBvbiBpdHMgZXhwcmVzc2lvbiBvZiBHMi9NIGFuZCBTIHBoYXNlIG1hcmtlcnMuClRoZXNlIG1hcmtlciBzZXRzIHNob3VsZCBiZSBhbnRpY29ycmVsYXRlZCBpbiB0aGVpciBleHByZXNzaW9uIGxldmVscywgYW5kIGNlbGxzIGV4cHJlc3NpbmcgbmVpdGhlciBhcmUgbGlrZWx5IG5vdCBjeWNsaW5nIGFuZCBpbiBHMSBwaGFzZS4KSW4gc29tZSBjYXNlcywgY2VsbCBjeWNsZSBjYW4gYmUgdGhlIHByaW1hcnkgZmFjdG9yIGRldGVybWluaW5nIHRoZSBjZWxsIGhldGVyb2dlbmVpdHkgYW5kIGVmZmVjdGl2ZWx5IG1hc2tpbmcgdGhlIGRpZmZlcmVuY2VzCmJldHdlZW4gY2VsbCBzdWJwb3B1bGF0aW9ucyB3ZSB3YW50IHRvIHN0dWR5LgoKWW91IGNhbiB2aWV3IHRoZSBhc3NpZ25lZCBjZWxsIGN5Y2xlIHBoYXNlcyBpbiB0aGUgW0RpbWVuc2lvbmFsaXR5X3JlZHVjdGlvbl9wbG90c10oI0RpbWVuc2lvbmFsaXR5X3JlZHVjdGlvbl9wbG90cykgc2VjdGlvbiBiZWxvdy4KCmBgYHtyLCByZXN1bHRzID0gImFzaXMifQppZiAoIWNjX2dlbmVzX3ZhbGlkKSB7CiAgc2NkcmFrZTo6Y2F0bigiKipDZWxsIGN5Y2xlIHNjb3JlIGFuZCBwaGFzZXMgY291bGQgbm90IGJlIGNvbXB1dGVkIGZvciB5b3VyIGRhdGFzZXQuKiogSXQgaXMgcG9zc2libGUgdGhhdCBpdCBkb2Vzbid0IGhhdmUgYW55IGV4cHJlc3NlZCBjZWxsLWN5Y2xlIGdlbmVzLiIpCn0KYGBgCgpgciBzY2RyYWtlOjpmb3JtYXRfdXNlZF9mdW5jdGlvbnMoYygiU2V1cmF0OjpjYy5nZW5lcy51cGRhdGVkLjIwMTkiLCAiU2V1cmF0OjpDZWxsQ3ljbGVTY29yaW5nKCkiKSlgCgoqKioKCiMgTm9ybWFsaXphdGlvbgoKU3lzdGVtYXRpYyBkaWZmZXJlbmNlcyBpbiBzZXF1ZW5jaW5nIGNvdmVyYWdlIGJldHdlZW4gbGlicmFyaWVzIGFyZSBvZnRlbiBvYnNlcnZlZCBpbiBzaW5nbGUtY2VsbCBSTkEgc2VxdWVuY2luZyBkYXRhLgpUaGV5IHR5cGljYWxseSBhcmlzZSBmcm9tIHRlY2huaWNhbCBkaWZmZXJlbmNlcyBpbiBjRE5BIGNhcHR1cmUgb3IgUENSIGFtcGxpZmljYXRpb24gZWZmaWNpZW5jeSBhY3Jvc3MgY2VsbHMsCmF0dHJpYnV0YWJsZSB0byB0aGUgZGlmZmljdWx0eSBvZiBhY2hpZXZpbmcgY29uc2lzdGVudCBsaWJyYXJ5IHByZXBhcmF0aW9uIHdpdGggbWluaW1hbCBzdGFydGluZyBtYXRlcmlhbC4KTm9ybWFsaXphdGlvbiBhaW1zIHRvIHJlbW92ZSB0aGVzZSBkaWZmZXJlbmNlcyBzdWNoIHRoYXQgdGhleSBkbyBub3QgaW50ZXJmZXJlIHdpdGggY29tcGFyaXNvbnMgb2YgdGhlIGV4cHJlc3Npb24KcHJvZmlsZXMgYmV0d2VlbiBjZWxscy4gVGhpcyBlbnN1cmVzIHRoYXQgYW55IG9ic2VydmVkIGhldGVyb2dlbmVpdHkgb3IgZGlmZmVyZW50aWFsIGV4cHJlc3Npb24gd2l0aGluIHRoZSBjZWxsCnBvcHVsYXRpb24gYXJlIGRyaXZlbiBieSBiaW9sb2d5IGFuZCBub3QgdGVjaG5pY2FsIGJpYXNlcy4KCk1vcmUgaW5mb3JtYXRpb24gaW4gW09TQ0FdKGh0dHBzOi8vYmlvY29uZHVjdG9yLm9yZy9ib29rcy8zLjE1L09TQ0EuYmFzaWMvbm9ybWFsaXphdGlvbi5odG1sKQoKVXNlZCBub3JtYWxpemF0aW9uIG1ldGhvZDogImByIG5vcm1hbGl6YXRpb25fdHlwZV9zY2VgIgoKYGBge3IsIHJlc3VsdHMgPSAiYXNpcyJ9CmlmIChjZmckTk9STUFMSVpBVElPTl9UWVBFID09ICJub25lIikgewogIGNhdCgiKE5vcm1hbGl6YXRpb24gd2FzIHBlcmZvcm1lZCBpbiBhIHByZXZpb3VzIHBpcGVsaW5lIHJ1bi4pXG5cbiIpCn0KCmlmIChub3JtYWxpemF0aW9uX3R5cGVfc2NlID09ICJzY3JhbiIpIHsKICBjYXQoIioqYHNjcmFuYDogbm9ybWFsaXphdGlvbiBieSBkZWNvbnZvbHV0aW9uKipcblxuIikKICBjYXQoCiAgICAiQ2VsbC1zcGVjaWZpYyBiaWFzZXMgYXJlIG5vcm1hbGl6ZWQgdXNpbmcgdGhlIGBzY3V0dGxlOjpjb21wdXRlUG9vbGVkRmFjdG9ycygpYCBtZXRob2QsIiwKICAgICJ3aGljaCBpbXBsZW1lbnRzIHRoZSBkZWNvbnZvbHV0aW9uIHN0cmF0ZWd5IGZvciBzY2FsaW5nIG5vcm1hbGl6YXRpb24iLAogICAgIihbKkEuIFQuIEx1biwgQmFjaCwgYW5kIE1hcmlvbmkgMjAxNipdKGh0dHBzOi8vZ2Vub21lYmlvbG9neS5iaW9tZWRjZW50cmFsLmNvbS9hcnRpY2xlcy8xMC4xMTg2L3MxMzA1OS0wMTYtMDk0Ny03KSkuIiwKICAgICJUaGlzIGNvbXB1dGVzIHNpemUgZmFjdG9ycyB0aGF0IGFyZSB1c2VkIHRvIHNjYWxlIHRoZSBjb3VudHMgaW4gZWFjaCBjZWxsLiIsCiAgICAiVGhlIGFzc3VtcHRpb24gaXMgdGhhdCBtb3N0IGdlbmVzIGFyZSBub3QgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIChERSkgYmV0d2VlbiBjZWxscywiLAogICAgInN1Y2ggdGhhdCBhbnkgZGlmZmVyZW5jZXMgaW4gZXhwcmVzc2lvbiBhY3Jvc3MgdGhlIG1ham9yaXR5IG9mIGdlbmVzIHJlcHJlc2VudHMgc29tZSB0ZWNobmljYWwgYmlhcyB0aGF0IHNob3VsZCBiZSByZW1vdmVkLiIKICApCiAgdXNlZF9mdW5jdGlvbnMgPC0gYygic2N1dHRsZTo6Y29tcHV0ZVBvb2xlZEZhY3RvcnMoKSIsICJzY3V0dGxlOjpsb2dOb3JtQ291bnRzKCkiKQogIGlmIChjZmckU0NSQU5fVVNFX1FVSUNLQ0xVU1RFUikgewogICAgdXNlZF9mdW5jdGlvbnMgPC0gYygic2NyYW46OnF1aWNrQ2x1c3RlcigpIiwgdXNlZF9mdW5jdGlvbnMpCiAgfQogIHNjZHJha2U6OmZvcm1hdF91c2VkX2Z1bmN0aW9ucyh1c2VkX2Z1bmN0aW9ucywgZG9fY2F0ID0gVFJVRSkKfSBlbHNlIGlmIChub3JtYWxpemF0aW9uX3R5cGVfc2NlID09ICJzY3RyYW5zZm9ybSIpIHsKICBjYXQoIioqYHNjdHJhbnNmb3JtYDogcmVndWxhcml6ZWQgbmVnYXRpdmUgYmlub21pYWwgcmVncmVzc2lvbiB0byBub3JtYWxpemUgVU1JIGNvdW50IGRhdGEuKipcblxuIikKICBjYXQoIlsqSGFmZW1laXN0ZXIgJiBTYXRpamEgMjAxOSpdKGh0dHBzOi8vZ2Vub21lYmlvbG9neS5iaW9tZWRjZW50cmFsLmNvbS9hcnRpY2xlcy8xMC4xMTg2L3MxMzA1OS0wMTktMTg3NC0xKVxuXG4iKQogIHNjZHJha2U6OmZvcm1hdF91c2VkX2Z1bmN0aW9ucygiU2V1cmF0OjpTQ1RyYW5zZm9ybSgpIiwgZG9fY2F0ID0gVFJVRSkKfQpgYGAKCioqKgoKIyBIaWdobHkgdmFyaWFibGUgZ2VuZXMgKEhWR3MpIHNlbGVjdGlvbgoKV2Ugb2Z0ZW4gdXNlIHNjUk5BLXNlcSBkYXRhIGluIGV4cGxvcmF0b3J5IGFuYWx5c2VzIHRvIGNoYXJhY3Rlcml6ZSBoZXRlcm9nZW5laXR5IGFjcm9zcyBjZWxscy4KUHJvY2VkdXJlcyBsaWtlIGNsdXN0ZXJpbmcgYW5kIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbiBjb21wYXJlIGNlbGxzIGJhc2VkIG9uIHRoZWlyIGdlbmUgZXhwcmVzc2lvbiBwcm9maWxlcywKd2hpY2ggaW52b2x2ZXMgYWdncmVnYXRpbmcgcGVyLWdlbmUgZGlmZmVyZW5jZXMgaW50byBhIHNpbmdsZSAoZGlzKXNpbWlsYXJpdHkgbWV0cmljIGJldHdlZW4gYSBwYWlyIG9mIGNlbGxzLgpUaGUgY2hvaWNlIG9mIGdlbmVzIHRvIHVzZSBpbiB0aGlzIGNhbGN1bGF0aW9uIGhhcyBhIG1ham9yIGltcGFjdCBvbiB0aGUgYmVoYXZpb3Igb2YgdGhlIG1ldHJpYyBhbmQgdGhlIHBlcmZvcm1hbmNlIG9mCmRvd25zdHJlYW0gbWV0aG9kcy4gV2Ugd2FudCB0byBzZWxlY3QgZ2VuZXMgdGhhdCBjb250YWluIHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmlvbG9neSBvZiB0aGUgc3lzdGVtIHdoaWxlCnJlbW92aW5nIGdlbmVzIHRoYXQgY29udGFpbiByYW5kb20gbm9pc2UuIFRoaXMgYWltcyB0byBwcmVzZXJ2ZSBpbnRlcmVzdGluZyBiaW9sb2dpY2FsIHN0cnVjdHVyZSB3aXRob3V0IHRoZSB2YXJpYW5jZQp0aGF0IG9ic2N1cmVzIHRoYXQgc3RydWN0dXJlLCBhbmQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBkYXRhIHRvIGltcHJvdmUgY29tcHV0YXRpb25hbCBlZmZpY2llbmN5IG9mIGxhdGVyIHN0ZXBzLgoKTW9yZSBpbmZvcm1hdGlvbiBpbiBbT1NDQV0oaHR0cHM6Ly9iaW9jb25kdWN0b3Iub3JnL2Jvb2tzLzMuMTUvT1NDQS5iYXNpYy9mZWF0dXJlLXNlbGVjdGlvbi5odG1sKQoKYGBge3IsIHJlc3VsdHMgPSAiYXNpcyJ9CnNjZHJha2U6OmNhdGcwKCcqKkhWRyBtZXRyaWM6ICJ7aHZnX21ldHJpY30iKipcblxuJykKCmlmIChodmdfbWV0cmljID09ICJnZW5lX3ZhciIpIHsKICB2YXJfZmllbGQgPC0gImJpbyIKCiAgY2F0KAogICAgImBzY3Jhbjo6bW9kZWxHZW5lVmFyKClgIG1vZGVscyB0aGUgdmFyaWFuY2Ugb2YgdGhlIGxvZy1leHByZXNzaW9uIHByb2ZpbGVzIGZvciBlYWNoIGdlbmUsIiwKICAgICJkZWNvbXBvc2luZyBpdCBpbnRvIHRlY2huaWNhbCBhbmQgYmlvbG9naWNhbCBjb21wb25lbnRzIGJhc2VkIG9uIGEgZml0dGVkIG1lYW4tdmFyaWFuY2UgdHJlbmQuXG5cbiIKICApCgogIHNjZHJha2U6OnBsb3RfaHZnX2ZpdChzY2UsICJ2YXIiKQogIGh2Z191c2VkX2Z1bmN0aW9ucyA8LSAic2NyYW46Om1vZGVsR2VuZVZhcigpIgp9IGVsc2UgaWYgKGh2Z19tZXRyaWMgPT0gImdlbmVfY3YyIikgewogIHZhcl9maWVsZCA8LSAicmF0aW8iCgogIGNhdCgKICAgICJgc2NyYW46Om1vZGVsR2VuZUNWMigpYCBtb2RlbHMgdGhlIHNxdWFyZWQgY29lZmZpY2llbnQgb2YgdmFyaWF0aW9uIChDVjIpIG9mIHRoZSBub3JtYWxpemVkIGV4cHJlc3Npb24gcHJvZmlsZXMgZm9yIGVhY2ggZ2VuZSwiLAogICAgImZpdHRpbmcgYSB0cmVuZCB0byBhY2NvdW50IGZvciB0aGUgbWVhbi12YXJpYW5jZSByZWxhdGlvbnNoaXAgYWNyb3NzIGdlbmVzLlxuXG4iCiAgKQoKICBzY2RyYWtlOjpwbG90X2h2Z19maXQoc2NlLCAiY3YyIikKICBodmdfdXNlZF9mdW5jdGlvbnMgPC0gInNjcmFuOjptb2RlbEdlbmVDVjIoKSIKfSBlbHNlIGlmIChodmdfbWV0cmljID09ICJzY3RyYW5zZm9ybSIpIHsKICBodmdfdXNlZF9mdW5jdGlvbnMgPC0gIlNldXJhdDo6U0NUcmFuc2Zvcm0oKSIKICBzY2RyYWtlOjpjYXRnMCgiSFZHcyAobiA9IHtjZmckU0NUX05fSFZHfSkgd2VyZSBzZWxlY3RlZCBieSB0aGUgYHNjdHJhbnNmb3JtYCBtZXRob2QuIikKfQoKaWYgKGNjX2dlbmVzX3ZhbGlkICYmICFybGFuZzo6aXNfbnVsbChzY2VfbWV0YWRhdGEkaHZnX3JtX2NjX2dlbmVzKSAmJiBzY2VfbWV0YWRhdGEkaHZnX3JtX2NjX2dlbmVzKSB7CiAgc2NkcmFrZTo6Y2F0ZzAoCiAgICAiVXNpbmcgdGhlIHBlcmNlbnRhZ2Ugb2YgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IHRoZSBjZWxsIGN5Y2xlIHBoYXNlIGluIHRoZSBleHByZXNzaW9uIHByb2ZpbGUgZm9yIGVhY2ggZ2VuZSwgIiwKICAgICJ3ZSByZW1vdmVkIHtsZW5ndGgoc2NlX21ldGFkYXRhJGh2Z19ybV9jY19nZW5lc19pZHMpfSBnZW5lcyB3aXRoIHBlcmNlbnRhZ2UgPiAiLAogICAgIntzY2VfbWV0YWRhdGEkaHZnX2NjX2dlbmVzX3Zhcl9leHBsX3RocmVzaG9sZH0gcHJpb3IgdG8gSFZHIHNlbGVjdGlvbi5cblxuIiwKICAgICJUaGlzIHN0cmF0ZWd5IGlzIGZ1cnRoZXIgZXhwbGFpbmVkIGluIFtPU0NBXShodHRwczovL2Jpb2NvbmR1Y3Rvci5vcmcvYm9va3MvMy4xNS9PU0NBLmFkdmFuY2VkL2NlbGwtY3ljbGUtYXNzaWdubWVudC5odG1sI3JlbW92aW5nLWNlbGwtY3ljbGUtcmVsYXRlZC1nZW5lcykiCiAgKQoKICBwaGFzZV92YXJpYW5jZV9leHBsYWluZWQgPC0gc2NlX3Jvd0RhdGFbc2NlX3Jvd0RhdGEkaXNfY2NfcmVsYXRlZCwgYygiRU5TRU1CTCIsICJTWU1CT0wiLCAicGhhc2VfdmFyaWFuY2VfZXhwbGFpbmVkIildICU+JQogICAgYXMuZGF0YS5mcmFtZSgpICU+JQogICAgZHBseXI6OmFycmFuZ2UoLXBoYXNlX3ZhcmlhbmNlX2V4cGxhaW5lZCkgJT4lCiAgICBzY2RyYWtlOjpyZW5kZXJfYm9vdHN0cmFwX3RhYmxlKHJvdy5uYW1lcyA9IEZBTFNFKSAlPiUKICAgIGFzLmNoYXJhY3RlcigpCgogIGNhdCgiPGRldGFpbHM+XG4gIDxzdW1tYXJ5IGNsYXNzPSd1c2VkLWZ1bmN0aW9ucyc+U2hvdyBjZWxsIGN5Y2xlLXJlbGF0ZWQgZ2VuZXMgXHUyNWJlPC9zdW1tYXJ5PlxuXG4iKQogIGNhdChwaGFzZV92YXJpYW5jZV9leHBsYWluZWQpCiAgY2F0KCJcblxuPC9kZXRhaWxzPiIpCgogIHBfcGhhc2VfdmFyX2V4cGxhaW5lZCA8LSBnZ3Bsb3QyOjpnZ3Bsb3Qoc2NlX3Jvd0RhdGEgJT4lIGFzLmRhdGEuZnJhbWUoKSkgKwogICAgZ2dwbG90Mjo6Z2VvbV9oaXN0b2dyYW0oZ2dwbG90Mjo6YWVzKHggPSBwaGFzZV92YXJpYW5jZV9leHBsYWluZWQpLCBiaW53aWR0aCA9IDAuNSkgKwogICAgZ2dwbG90Mjo6Z2VvbV92bGluZSh4aW50ZXJjZXB0ID0gc2NlX21ldGFkYXRhJGh2Z19jY19nZW5lc192YXJfZXhwbF90aHJlc2hvbGQsIGNvbG9yID0gInJlZCIpICsKICAgIGdncGxvdDI6OnNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXFfbGVuKGNlaWxpbmcobWF4KHNjZV9yb3dEYXRhJHBoYXNlX3ZhcmlhbmNlX2V4cGxhaW5lZCkpKSkgKwogICAgZ2dwbG90Mjo6Z2d0aXRsZSgKICAgICAgIkhpc3RvZ3JhbSBvZiB2YXJpYW5jZSBleHBsYWluZWQgYnkgY2VsbCBjeWNsZSBwaGFzZSIsCiAgICAgIHN1YnRpdGxlID0gc3RyaW5ncjo6c3RyX3dyYXAoIkdlbmVzIG9uIHRoZSByaWdodCBvZiB0aGUgcmVkIGxpbmUgYXJlIG1hcmtlZCBhcyBjZWxsIGN5Y2xlLXJlbGF0ZWQgYW5kIHJlbW92ZWQgZnJvbSBIVkdzLiIpCiAgICApICsKICAgIGdncGxvdDI6OnRoZW1lX2J3KCkKICBwcmludChwX3BoYXNlX3Zhcl9leHBsYWluZWQpCgogIGh2Z191c2VkX2Z1bmN0aW9ucyA8LSBjKGh2Z191c2VkX2Z1bmN0aW9ucywgInNjYXRlcjo6Z2V0VmFyaWFuY2VFeHBsYWluZWQoKSIpCn0KCmlmIChodmdfbWV0cmljICVpbiUgYygiZ2VuZV92YXIiLCAiZ2VuZV9jdjIiKSkgewogIHNjZHJha2U6OmNhdGcwKCdcblxuQmFzZWQgb24gIntodmdfbWV0cmljfSIsIEhWR3Mgd2VyZSBzZWxlY3RlZCBieTogJykKCiAgaWYgKGh2Z19zZWxlY3Rpb24gPT0gInRvcCIpIHsKICAgIHNjZHJha2U6OmNhdGcwKCJ0b3Age2h2Z19zZWxlY3Rpb25fdmFsdWV9IEhWR3MuXG5cbiIpCiAgfSBlbHNlIGlmIChodmdfc2VsZWN0aW9uID09ICJzaWduaWZpY2FuY2UiKSB7CiAgICBzY2RyYWtlOjpjYXRnMCgiRkRSIDwge2h2Z19zZWxlY3Rpb25fdmFsdWV9XG5cbiIpCiAgfSBlbHNlIGlmIChodmdfc2VsZWN0aW9uID09ICJ0aHJlc2hvbGQiKSB7CiAgICBzY2RyYWtlOjpjYXRnMCgidmFyaWFuY2Ugb3IgQ1YyID4ge2h2Z19zZWxlY3Rpb25fdmFsdWV9XG5cbiIpCiAgfQoKICBzY2RyYWtlOjpjYXRnMCgiKipGb3VuZCB7bGVuZ3RoKHNjZV9tZXRhZGF0YSRodmdfaWRzKX0gSFZHcy4qKlxuXG4iKQp9CmBgYAoKUGxvdCBvZiBIVkdzOgoKYGBge3J9CmRyYWtlOjpyZWFkZChodmdfcGxvdCwgcGF0aCA9IGRyYWtlX2NhY2hlX2RpcikKYGBgCgpgciBzY2RyYWtlOjpmb3JtYXRfdXNlZF9mdW5jdGlvbnMoaHZnX3VzZWRfZnVuY3Rpb25zKWAKCioqKgoKIyBEb3VibGV0IHNjb3JlIGFzc2lnbm1lbnQKClRoZSBgc2NyYW46OmRvdWJsZXRDbHVzdGVyKClgIGZ1bmN0aW9uIGlkZW50aWZlcyBjbHVzdGVycyB3aXRoIGV4cHJlc3Npb24gcHJvZmlsZXMgbHlpbmcgYmV0d2VlbiB0d28gb3RoZXIgY2x1c3RlcnMuCkNvbnNpZGVyaW5nIGV2ZXJ5IHBvc3NpYmxlIHRyaXBsZXQgb2YgY2x1c3RlcnMsIHRoZSBtZXRob2QgdXNlcyB0aGUgbnVtYmVyIG9mIERFIGdlbmVzLCB0aGUgbWVkaWFuIGxpYnJhcnkgc2l6ZSwKYW5kIHRoZSBwcm9wb3Jpb24gb2YgY2VsbHMgaW4gdGhlIGNsdXN0ZXIgdG8gbWFyayBjbHVzdGVycyBhcyBwb3NzaWJsZSBkb3VibGV0cy4KCmBgYHtyLCByZXN1bHRzID0gImFzaXMifQppZiAobm9ybWFsaXphdGlvbl90eXBlX3NjZSA9PSAic2NyYW4iICYmIGNmZyRTQ1JBTl9VU0VfUVVJQ0tDTFVTVEVSKSB7CiAgY2F0KCJQcmlvciB0byBub3JtYWxpemF0aW9uLCBxdWljayBjbHVzdGVyaW5nIHdhcyBwZXJmb3JtZWQuIFdlIGNhbiB1c2UgdGhvc2UgY2x1c3RlcnMgdG8gbG9vayBhdCBkb3VibGV0IHNjb3JlIHdpdGhpbiB0aGVtOlxuXG4iKQogIGJveHBsb3QoZG91YmxldF9zY29yZSB+IGNsdXN0ZXJfcXVpY2tjbHVzdGVyLCBkYXRhID0gc2NlX2NvbERhdGEpCn0KYGBgCgpgYGB7ciwgcmVzdWx0cyA9ICJhc2lzIn0KaWYgKHJsYW5nOjppc190cnVlKHNjZV9tZXRhZGF0YSRoYXNfZmlsdGVyZWRfZG91YmxldHMpKSB7CiAgbl9kb3VibGV0cyA8LSBzdW0oc2NlX2NvbERhdGEkaXNfZG91YmxldCkKICBkb3VibGV0c19wY3QgPC0gKG5fZG91YmxldHMgLyBuY29sKHNjZSkpICogMTAwCiAgc2NkcmFrZTo6Y2F0bigKICAgIGdsdWU6OmdsdWUoIioqRGlzY2FyZGVkIHtuX2RvdWJsZXRzfSBjZWxscyAoe2RvdWJsZXRzX3BjdH0gJSBvZiBhbGwgY2VsbHMpIHdpdGggZG91YmxldCBzY29yZSBhYm92ZSB7c2NlX21ldGFkYXRhJG1heF9kb3VibGV0X3Njb3JlfSoqIikKICApCn0gZWxzZSB7CiAgc2NkcmFrZTo6Y2F0bihnbHVlOjpnbHVlKCIqKkNlbGxzIHdlcmUgbm90IGZpbHRlcmVkIGJ5IGRvdWJsZXQgc2NvcmUuKioiKSkKfQpgYGAKCmByIHNjZHJha2U6OmZvcm1hdF91c2VkX2Z1bmN0aW9ucygic2NEYmxGaW5kZXI6OmNvbXB1dGVEb3VibGV0RGVuc2l0eSgpIilgCgoqKioKCiMgRGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uCgpBcyB0aGUgbmFtZSBzdWdnZXN0cywgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uIGFpbXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VwYXJhdGUgZGltZW5zaW9ucyBpbiB0aGUgZGF0YS4KU2VlIFt0aGlzIGNoYXB0ZXJdKGh0dHBzOi8vYmlvY29uZHVjdG9yLm9yZy9ib29rcy8zLjE1L09TQ0EuYmFzaWMvZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uLmh0bWwpIGluIE9TQ0EgdGhhdCBwcm92aWRlcwphbiBpbnR1aXRpdmUgZXhwbGFuYXRpb24gb2YgdGhlIG1vdGl2YXRpb24gYmVoaW5kLCBhbG9uZyB3aXRoIGJhc2ljIGludHJvZHVjdGlvbiB0byBQQ0EsIHQtU05FIGFuZCBVTUFQLgoKIyMgUENBCgpQcmluY2lwYWwgY29tcG9uZW50cyBhbmFseXNpcyAoUENBKSBkaXNjb3ZlcnMgYXhlcyBpbiBoaWdoLWRpbWVuc2lvbmFsIHNwYWNlIHRoYXQgY2FwdHVyZSB0aGUgbGFyZ2VzdCBhbW91bnQgb2YgdmFyaWF0aW9uLgpJbiBjYXNlIG9mIHNjUk5BLXNlcSwgd2UgYmFzaWNhbGx5IGNvbXByZXNzIG11bHRpcGxlIGZlYXR1cmVzIGludG8gc2V2ZXJhbCBkaW1lbnNpb25zLgpUaGlzIHJlZHVjZXMgY29tcHV0YXRpb25hbCB3b3JrIGluIGRvd25zdHJlYW0gYW5hbHlzZXMgbGlrZSBjbHVzdGVyaW5nIGFuZCBvdGhlciBEUiBtZXRob2RzIChVTUFQIGFuZCB0LVNORSksCmFzIGNhbGN1bGF0aW9ucyBvbmx5IG5lZWQgdG8gYmUgcGVyZm9ybWVkIGZvciBhIGZldyBkaW1lbnNpb25zIHJhdGhlciB0aGFuIHRob3VzYW5kcyBvZiBnZW5lcy4KSXQgYWxzbyByZWR1Y2VzIG5vaXNlIGJ5IGF2ZXJhZ2luZyBhY3Jvc3MgbXVsdGlwbGUgZ2VuZXMgdG8gb2J0YWluIGEgbW9yZSBwcmVjaXNlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXR0ZXJucyBpbiB0aGUgZGF0YS4KCiMjIyBQQ3Mgc2VsZWN0aW9uCgpCeSBkZWZpbml0aW9uLCB0aGUgdG9wIFBDcyBjYXB0dXJlIHRoZSBkb21pbmFudCBmYWN0b3JzIG9mIGhldGVyb2dlbmVpdHkgaW4gdGhlIGRhdGEgc2V0LgpJbiB0aGUgY29udGV4dCBvZiBzY1JOQS1zZXEsIG91ciBhc3N1bXB0aW9uIGlzIHRoYXQgYmlvbG9naWNhbCBwcm9jZXNzZXMgYWZmZWN0IG11bHRpcGxlIGdlbmVzIGluIGEgY29vcmRpbmF0ZWQgbWFubmVyLgpUaGlzIG1lYW5zIHRoYXQgdGhlIGVhcmxpZXIgUENzIGFyZSBsaWtlbHkgdG8gcmVwcmVzZW50IGJpb2xvZ2ljYWwgc3RydWN0dXJlIGFzIG1vcmUgdmFyaWF0aW9uIGNhbiBiZSBjYXB0dXJlZCBieQpjb25zaWRlcmluZyB0aGUgY29ycmVsYXRlZCBiZWhhdmlvciBvZiBtYW55IGdlbmVzLiBXZSB1c2UgdGhlIGVhcmxpZXIgUENzIGluIG91ciBkb3duc3RyZWFtIGFuYWx5c2VzLCB3aGljaCBjb25jZW50cmF0ZXMKdGhlIGJpb2xvZ2ljYWwgc2lnbmFsIHRvIHNpbXVsdGFuZW91c2x5IHJlZHVjZSBjb21wdXRhdGlvbmFsIHdvcmsgYW5kIHJlbW92ZSBub2lzZS4KClRoZXJlIGFyZSBzZXZlcmFsIG1ldGhvZHMgaG93IHRvIHNlbGVjdCB0aGUgZmlyc3QgUENzOgoKLSBFbGJvdyBwb2ludCBtZXRob2Q6IGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgY2hvb3NpbmcgUENzIGludm9sdmVzIGlkZW50aWZ5aW5nIHRoZSBlbGJvdyBwb2ludCBpbiB0aGUgcGVyY2VudGFnZSBvZgogIHZhcmlhbmNlIGV4cGxhaW5lZCBieSBzdWNjZXNzaXZlIFBDcy4gVGhpcyByZWZlcnMgdG8gdGhlICJlbGJvdyIgaW4gdGhlIGN1cnZlIG9mIGEgc2NyZWUgcGxvdCBhcyBzaG93bi4KLSBUZWNobmljYWwgdmFyaWFuY2UgbWV0aG9kOiB1c2UgdGhlIHRlY2huaWNhbCBjb21wb25lbnQgZXN0aW1hdGVzIHRvIGRldGVybWluZSB0aGUgcHJvcG9ydGlvbiBvZiB2YXJpYW5jZSB0aGF0IHNob3VsZCBiZSByZXRhaW5lZC4KICBUaGlzIGlzIGltcGxlbWVudGVkIGluIGBzY3Jhbjo6ZGVub2lzZVBDQSgpYCwgd2hpY2ggdGFrZXMgdGhlIGVzdGltYXRlcyByZXR1cm5lZCBieSBgc2NyYW46Om1vZGVsR2VuZVZhcigpYC4KLSBGb3JjZWQ6IHVzZSBhIHByZWRlZmluZWQgbnVtYmVyIG9mIFBDcy4KCmBgYHtyfQpkcmFrZTo6cmVhZGQocGNhX3NlbGVjdGVkX3Bjc19wbG90LCBwYXRoID0gZHJha2VfY2FjaGVfZGlyKQpgYGAKCioqYHIgc2NlX21ldGFkYXRhJHBjYV9zZWxlY3RlZF9wY3NgIFBDcyB3ZXJlIHNlbGVjdGVkIHVzaW5nIHRoZSAiYHIgc2NlX21ldGFkYXRhJHBjYV9zZWxlY3Rpb25fbWV0aG9kYCIgbWV0aG9kKioKCmByIHNjZHJha2U6OmZvcm1hdF91c2VkX2Z1bmN0aW9ucyhjKCJzY2F0ZXI6OnJ1blBDQSgpIiwgIlBDQXRvb2xzOjpmaW5kRWxib3dQb2ludCgpIiwgInNjcmFuOjpnZXREZW5vaXNlZFBDcygpIikpYAoKIwoKKioqCgpgYGB7ciwgcmVzdWx0cyA9ICJhc2lzIn0KaWYgKGFueV9jbHVzdGVyaW5nX2VuYWJsZWQpIHsKICBjYXQoa25pdHI6OmtuaXRfY2hpbGQoaGVyZTo6aGVyZSgiUm1kL2NvbW1vbi9jbHVzdGVyaW5nL2NsdXN0ZXJpbmcuUm1kIiksIHF1aWV0ID0gVFJVRSkpCiAgY2F0KCJcblxuI1xuXG4qKipcblxuIikKfQpgYGAKCmBgYHtyLCByZXN1bHRzID0gImFzaXMifQppZiAoIWlzLm51bGwoY2ZnJE5PUk1fQ0xVU1RFUklOR19SRVBPUlRfRElNUkVEX1BMT1RTX09USEVSKSkgewogIHJlcyA8LSBzY2RyYWtlOjpnZW5lcmF0ZV9kaW1yZWRfcGxvdHNfc2VjdGlvbigKICAgIGRpbXJlZF9wbG90c19vdGhlcl92YXJzX2ZpbGVzID0gZGltcmVkX3Bsb3RzX290aGVyX3ZhcnNfZmlsZXMsCiAgICBzZWxlY3RlZF9tYXJrZXJzX3Bsb3RzX2ZpbGVzID0gc2VsZWN0ZWRfbWFya2Vyc19wbG90c19maWxlcywKICAgIGRpbXJlZF9wbG90c19yZWxfc3RhcnQgPSBmczo6cGF0aF9kaXIoY2ZnJE5PUk1fQ0xVU1RFUklOR19SRVBPUlRfSFRNTF9GSUxFKSwKICAgIHNlbGVjdGVkX21hcmtlcnNfZmlsZXNfcmVsX3N0YXJ0ID0gZnM6OnBhdGhfZGlyKGNmZyROT1JNX0NMVVNURVJJTkdfUkVQT1JUX0hUTUxfRklMRSksCiAgICBtYWluX2hlYWRlciA9ICJEaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24gcGxvdHMiCiAgKQoKICBjYXQoIlxuXG4jXG5cbioqKlxuXG4iKQp9CmBgYAoKYGBge3IsIHJlc3VsdHMgPSAiYXNpcyJ9CmlmICghaXMubnVsbChjZmckQ0VMTF9BTk5PVEFUSU9OX1NPVVJDRVMpKSB7CiAgY2VsbF9hbm5vdGF0aW9uX3RleHQgPC0gc3RyX3NwYWNlKAogICAgIldlIHVzZWQgdGhlIFtTaW5nbGVSXShodHRwczovL2Jpb2NvbmR1Y3Rvci5vcmcvcGFja2FnZXMvMy4xNS9iaW9jL2h0bWwvU2luZ2xlUi5odG1sKSBwYWNrYWdlIHRvIHByZWRpY3QgY2VsbCB0eXBlcyBpbiB0aGUgZGF0YXNldC4iLAogICAgIkdpdmVuIGEgcmVmZXJlbmNlIGRhdGFzZXQgb2Ygc2FtcGxlcyAoc2luZ2xlLWNlbGwgb3IgYnVsaykgd2l0aCBrbm93biBsYWJlbHMsIGBTaW5nbGVyUmAgYXNzaWducyB0aG9zZSBsYWJlbHMgdG8iLAogICAgIm5ldyBjZWxscyBmcm9tIGEgdGVzdCBkYXRhc2V0IGJhc2VkIG9uIHNpbWlsYXJpdGllcyBpbiB0aGVpciBleHByZXNzaW9uIHByb2ZpbGVzLiIsCiAgICAiWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gaW4gdGhlIFtTaW5nbGVSIGJvb2tdKGh0dHBzOi8vYmlvY29uZHVjdG9yLm9yZy9ib29rcy8zLjE1L1NpbmdsZVJCb29rLykuXG5cbiIsCiAgICAiVGhlIHVzZWQgcmVmZXJlbmNlcyBhcmUgc2hvd24gYmVsb3cgaW4gdGhlIHRhYnMuIEVhY2ggaGF2ZSBzZXZlcmFsIGRpYWdub3N0aWMgcGxvdHM6XG5cbiIsCiAgICAiLSBTY29yZSBoZWF0bWFwcyBzaG93IGRpc3RyaWJ1dGlvbiBvZiBwcmVkaWN0ZWQgY2VsbCB0eXBlcyBpbiBjb21wdXRlZCBjbHVzdGVycyAoaWYgYW55KSwgYWxvbmcgd2l0aCBwZXItY2VsbCBhbm5vdGF0aW9uIHNjb3Jlc1xuIiwKICAgICItIE1hcmtlciBoZWF0bWFwcyBzaG93IGdlbmVzIHRoYXQgYXJlIG1hcmtlcnMgZm9yIGEgZ2l2ZW4gY2VsbCB0eXBlIGluIGJvdGggdGhlIHJlZmVyZW5jZSBhbmQgY3VycmVudCBkYXRhc2V0cywiLAogICAgImkuZS4gdGhvc2UgbWFya2VycyBoYXZlIGRyaXZlbiB0aGUgZGVjaXNpb24gdG8gbGFiZWwgY2VsbHMgYnkgdGhlIGNob3NlbiBjZWxsIHR5cGVcbiIsCiAgICAiLSBEZWx0YSBzY29yZXMgc2hvdyBwb29yLXF1YWxpdHkgb3IgYW1iaWd1b3VzIGFzc2lnbm1lbnRzIGJhc2VkIG9uIHRoZSBwZXItY2VsbCAnZGVsdGEnLCBpLmUuLCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIiwKICAgICJ0aGUgc2NvcmUgZm9yIHRoZSBhc3NpZ25lZCBsYWJlbCBhbmQgdGhlIG1lZGlhbiBhY3Jvc3MgYWxsIGxhYmVscyBmb3IgZWFjaCBjZWxsLiIsCiAgICAiU2VlIFtPU0NBXShodHRwczovL2Jpb2NvbmR1Y3Rvci5vcmcvYm9va3MvMy4xNS9TaW5nbGVSQm9vay9hbm5vdGF0aW9uLWRpYWdub3N0aWNzLmh0bWwjYmFzZWQtb24tdGhlLWRlbHRhcy1hY3Jvc3MtY2VsbHMpIGZvciBtb3JlIGRldGFpbHMiCiAgKQoKICByZXMgPC0gc2NkcmFrZTo6Z2VuZXJhdGVfY2VsbF9hbm5vdGF0aW9uX3Bsb3RzX3NlY3Rpb24oCiAgICBkaW1yZWRfcGxvdHNfY2VsbF9hbm5vdGF0aW9uX2ZpbGVzID0gZGltcmVkX3Bsb3RzX2NlbGxfYW5ub3RhdGlvbl9maWxlcywKICAgIGNlbGxfYW5ub3RhdGlvbl9kaWFnbm9zdGljX3Bsb3RzID0gY2VsbF9hbm5vdGF0aW9uX2RpYWdub3N0aWNfcGxvdHMsCiAgICBkaW1yZWRfcGxvdHNfcmVsX3N0YXJ0ID0gZnM6OnBhdGhfZGlyKGNmZyROT1JNX0NMVVNURVJJTkdfUkVQT1JUX0hUTUxfRklMRSksCiAgICBjZWxsX2Fubm90YXRpb25fZGlhZ25vc3RpY19wbG90c19yZWxfc3RhcnQgPSBmczo6cGF0aF9kaXIoY2ZnJE5PUk1fQ0xVU1RFUklOR19SRVBPUlRfSFRNTF9GSUxFKSwKICAgIG1haW5faGVhZGVyID0gIkNlbGwgYW5ub3RhdGlvbiIsCiAgICB0ZXh0ID0gY2VsbF9hbm5vdGF0aW9uX3RleHQKICApCgogIGNhdCgiXG5cbiNcblxuKioqXG5cbiIpCn0KYGBgCgo8ZGV0YWlscz4KICA8c3VtbWFyeSBjbGFzcz0iY29uZmlnIj5TaG93IGlucHV0IHBhcmFtZXRlcnM8L3N1bW1hcnk+CiAgPGhyIC8+CiAgPGg0Pk1haW4gY29uZmlnPC9oND4KCmBgYHtyfQpwcmludChjb25maWdfbWFpbikKYGBgCgogIDxociAvPgogIDxoND5Ob3JtYWxpemF0aW9uIGFuZCBjbHVzdGVyaW5nIGNvbmZpZzwvaDQ+CgpgYGB7cn0KcHJpbnQoY2ZnKQpgYGAKICA8aHIgLz4KPC9kZXRhaWxzPgoKYGBge3IsIGNoaWxkID0gaGVyZTo6aGVyZSgiUm1kL2NvbW1vbi9fZm9vdGVyLlJtZCIpfQpgYGAK