2. Load Seurat Object


DimPlot(All_samples_Merged,group.by = "cell_line",
reduction = "umap",
label.size = 3,
repel = T,
label = T)
DimPlot(All_samples_Merged,
group.by = "SCT_snn_res.0.9",
reduction = "umap",
label.size = 3,
repel = T,
label = T)
cluster_table <- table(Idents(All_samples_Merged))
DimPlot(All_samples_Merged, group.by = "predicted.celltype.l2",
reduction = "umap",
label.size = 3,
repel = T,
label = T)

library(clustree)
clustree(All_samples_Merged, prefix = "SCT_snn_res.")

DimPlot(All_samples_Merged, group.by = "predicted.celltype.l1",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(All_samples_Merged, group.by = "predicted.celltype.l1",
reduction = "umap",
label.size = 3,
repel = T,
label = F)

DimPlot(All_samples_Merged, group.by = "predicted.celltype.l2",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(All_samples_Merged, group.by = "predicted.celltype.l2",
reduction = "umap",
label.size = 3,
repel = T,
label = F)

DimPlot(All_samples_Merged, group.by = "predicted.celltype.l2",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

table(All_samples_Merged$predicted.celltype.l2, All_samples_Merged$SCT_snn_res.0.9)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
CD4 CTL 0 0 0 0 0 0 2 0 4 0 0 0 0 0 0 0 0 0 0
CD4 Naive 0 0 0 0 0 0 595 0 100 0 0 1 0 0 0 0 6 0 4
CD4 Proliferating 5124 5231 3823 2401 1748 2535 0 2547 0 1263 1329 20 1327 598 41 237 0 154 1
CD4 TCM 978 158 501 1366 21 24 2170 22 1892 266 585 1859 41 111 406 57 235 35 61
CD4 TEM 0 0 0 8 0 0 19 0 27 0 0 15 0 0 0 0 0 0 0
CD8 Naive 6 0 2 0 0 0 304 0 61 0 19 0 1 3 2 0 12 0 3
CD8 TCM 0 0 0 76 0 0 115 0 137 10 0 72 0 0 0 0 2 0 1
CD8 TEM 0 0 0 0 0 0 27 0 182 8 0 0 0 0 0 0 0 0 0
cDC2 9 0 155 0 0 23 0 5 1 0 67 0 9 43 0 22 0 2 0
dnT 1 0 0 2 2 0 4 0 33 0 0 0 0 0 0 7 11 0 1
gdT 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0
HSPC 167 8 285 1 0 744 1 652 1 1 12 8 401 43 1 26 0 6 0
ILC 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
MAIT 0 0 0 0 0 0 4 0 50 0 0 0 0 0 0 0 2 0 0
NK 0 0 0 0 0 0 0 0 91 0 0 0 0 0 0 0 0 0 1
NK Proliferating 7 11 162 20 1971 4 0 4 0 644 10 0 0 0 0 31 0 0 0
Treg 11 0 2 1 0 0 50 0 103 0 0 0 0 1 0 20 12 0 5
3. Data PREPERATION
DefaultAssay(All_samples_Merged) <- 'ADT'
VariableFeatures(All_samples_Merged) <- rownames(All_samples_Merged[["ADT"]])
# we will use all ADT features for dimensional reduction
# we set a dimensional reduction name to avoid overwriting the
All_samples_Merged <- NormalizeData(All_samples_Merged, normalization.method = 'CLR', margin = 2) %>%
ScaleData() %>% RunPCA(reduction.name = 'apca', npcs =28, maxit = 5000)
Normalizing across cells
| | 0 % ~calculating
|+ | 1 % ~00s
|+ | 2 % ~00s
|++ | 3 % ~00s
|++ | 4 % ~00s
|+++ | 5 % ~00s
|+++ | 6 % ~00s
|++++ | 7 % ~00s
|++++ | 8 % ~00s
|+++++ | 9 % ~00s
|+++++ | 10% ~00s
|++++++ | 11% ~00s
|++++++ | 12% ~00s
|+++++++ | 13% ~00s
|+++++++ | 14% ~00s
|++++++++ | 15% ~00s
|++++++++ | 16% ~00s
|+++++++++ | 17% ~00s
|+++++++++ | 18% ~00s
|++++++++++ | 19% ~00s
|++++++++++ | 20% ~00s
|+++++++++++ | 21% ~00s
|+++++++++++ | 22% ~00s
|++++++++++++ | 23% ~00s
|++++++++++++ | 24% ~00s
|+++++++++++++ | 25% ~00s
|+++++++++++++ | 26% ~00s
|++++++++++++++ | 27% ~00s
|++++++++++++++ | 28% ~00s
|+++++++++++++++ | 29% ~00s
|+++++++++++++++ | 30% ~00s
|++++++++++++++++ | 31% ~00s
|++++++++++++++++ | 32% ~00s
|+++++++++++++++++ | 33% ~00s
|+++++++++++++++++ | 34% ~00s
|++++++++++++++++++ | 35% ~00s
|++++++++++++++++++ | 36% ~00s
|+++++++++++++++++++ | 37% ~00s
|+++++++++++++++++++ | 38% ~00s
|++++++++++++++++++++ | 39% ~00s
|++++++++++++++++++++ | 40% ~00s
|+++++++++++++++++++++ | 41% ~00s
|+++++++++++++++++++++ | 42% ~00s
|++++++++++++++++++++++ | 43% ~00s
|++++++++++++++++++++++ | 44% ~00s
|+++++++++++++++++++++++ | 45% ~00s
|+++++++++++++++++++++++ | 46% ~00s
|++++++++++++++++++++++++ | 47% ~00s
|++++++++++++++++++++++++ | 48% ~00s
|+++++++++++++++++++++++++ | 49% ~00s
|+++++++++++++++++++++++++ | 50% ~00s
|++++++++++++++++++++++++++ | 51% ~00s
|++++++++++++++++++++++++++ | 52% ~00s
|+++++++++++++++++++++++++++ | 53% ~00s
|+++++++++++++++++++++++++++ | 54% ~00s
|++++++++++++++++++++++++++++ | 55% ~00s
|++++++++++++++++++++++++++++ | 56% ~00s
|+++++++++++++++++++++++++++++ | 57% ~00s
|+++++++++++++++++++++++++++++ | 58% ~00s
|++++++++++++++++++++++++++++++ | 59% ~00s
|++++++++++++++++++++++++++++++ | 60% ~00s
|+++++++++++++++++++++++++++++++ | 61% ~00s
|+++++++++++++++++++++++++++++++ | 62% ~00s
|++++++++++++++++++++++++++++++++ | 63% ~00s
|++++++++++++++++++++++++++++++++ | 64% ~00s
|+++++++++++++++++++++++++++++++++ | 65% ~00s
|+++++++++++++++++++++++++++++++++ | 66% ~00s
|++++++++++++++++++++++++++++++++++ | 67% ~00s
|++++++++++++++++++++++++++++++++++ | 68% ~00s
|+++++++++++++++++++++++++++++++++++ | 69% ~00s
|+++++++++++++++++++++++++++++++++++ | 70% ~00s
|++++++++++++++++++++++++++++++++++++ | 71% ~00s
|++++++++++++++++++++++++++++++++++++ | 72% ~00s
|+++++++++++++++++++++++++++++++++++++ | 73% ~00s
|+++++++++++++++++++++++++++++++++++++ | 74% ~00s
|++++++++++++++++++++++++++++++++++++++ | 75% ~00s
|++++++++++++++++++++++++++++++++++++++ | 76% ~00s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~00s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~00s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~00s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~00s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~00s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~00s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~00s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~00s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~00s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~00s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~00s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~00s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~00s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~00s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~00s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s
Centering and scaling data matrix
|
| | 0%
|
|==========================================================================================================================| 100%
Warning: You're computing too large a percentage of total singular values, use a standard svd instead.Warning: Requested number is larger than the number of available items (28). Setting to 28.Warning: Requested number is larger than the number of available items (28). Setting to 28.Warning: Requested number is larger than the number of available items (28). Setting to 28.Warning: Requested number is larger than the number of available items (28). Setting to 28.Warning: Requested number is larger than the number of available items (28). Setting to 28.PC_ 1
Positive: CD5, CD274, TCRab, CD7, CD3, CD28, CD45RO, CD26, CD44, CD62L
CXCR3, CD127, CD45, CCR8
Negative: CD25, CD30, CD2, CD95, CD45RA, CD4, CCR6, CCR4, CXCR4, CD40
CD19, CCR7, PD1, CCR10
PC_ 2
Positive: CD45, CD44, CD45RO, CD4, CD3, CD40, CCR4, CD45RA, CD26, CD95
CD2, CD5, CD62L, CD28
Negative: CD127, CD19, PD1, CCR7, CCR10, CXCR3, CCR8, CCR6, CD7, CD274
CD30, CXCR4, CD25, TCRab
PC_ 3
Positive: CD62L, TCRab, CD28, CD3, CD4, CXCR4, CCR7, CD45RA, CD127, CD5
PD1, CCR4, CD95, CD2
Negative: CD26, CXCR3, CD45RO, CD274, CD40, CD44, CCR10, CCR6, CD7, CD30
CD19, CD25, CD45, CCR8
PC_ 4
Positive: CCR4, CD5, CD274, CD4, CD30, CCR6, CD44, CD28, CD25, CD45RA
CD19, CCR10, CXCR3, PD1
Negative: CD40, CD45, CD2, CD62L, CD7, CD26, CXCR4, CCR7, CD127, CD95
CD45RO, CCR8, CD3, TCRab
PC_ 5
Positive: CD45RO, CD28, CCR8, CD26, CCR4, PD1, CD4, CCR10, CD40, CD127
CD19, TCRab, CD2, CCR7
Negative: CD7, CD45RA, CD5, CD44, CCR6, CXCR3, CXCR4, CD274, CD62L, CD30
CD3, CD95, CD45, CD25
Warning: Key 'PC_' taken, using 'apca_' instead
# Identify multimodal neighbors. These will be stored in the neighbors slot,
# and can be accessed using bm[['weighted.nn']]
# The WNN graph can be accessed at bm[["wknn"]],
# and the SNN graph used for clustering at bm[["wsnn"]]
# Cell-specific modality weights can be accessed at bm$RNA.weight
All_samples_Merged <- FindMultiModalNeighbors(
All_samples_Merged, reduction.list = list("pca", "apca"),
dims.list = list(1:20, 1:18), modality.weight.name = "RNA.weight"
)
Calculating cell-specific modality weights
Finding 20 nearest neighbors for each modality.
| | 0 % ~calculating
|+++++++++++++++++++++++++ | 50% ~08s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=17s
Calculating kernel bandwidths
| | 0 % ~calculating
|+++++++++++++++++++++++++ | 50% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01s
Warning: The number of provided modality.weight.name is not equal to the number of modalities. SCT.weight ADT.weight are used to store the modality weightsFinding multimodal neighbors
| | 0 % ~calculating
|+++++++++++++++++++++++++ | 50% ~29s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01m 00s
| | 0 % ~calculating
|+++++++++++++++++++++++++ | 50% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=02s
Constructing multimodal KNN graph
Constructing multimodal SNN graph
4. Visualization RNA+ADT
All_samples_Merged <- RunUMAP(All_samples_Merged, nn.name = "weighted.nn", reduction.name = "wnn.umap", reduction.key = "wnnUMAP_")
11:40:53 UMAP embedding parameters a = 0.9922 b = 1.112
11:40:54 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 20
11:40:55 Initializing from normalized Laplacian + noise (using RSpectra)
11:40:59 Commencing optimization for 200 epochs, with 1470228 positive edges
Using method 'umap'
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
11:41:16 Optimization finished
All_samples_Merged <- FindClusters(All_samples_Merged, graph.name = "wsnn", algorithm = 3, resolution = 0.5, verbose = FALSE)
p1 <- DimPlot(All_samples_Merged, reduction = 'wnn.umap', label = TRUE, repel = TRUE, label.size = 2.5) + NoLegend()
p2 <- DimPlot(All_samples_Merged, reduction = 'wnn.umap', group.by = 'predicted.celltype.l2', label = TRUE, repel = TRUE, label.size = 2.5) + NoLegend()
p1 + p2

DimPlot(All_samples_Merged, reduction = 'wnn.umap', group.by = "cell_line",label = TRUE, repel = TRUE, label.size = 2.5)

DimPlot(All_samples_Merged, reduction = 'wnn.umap', group.by = "wsnn_res.0.4",label = TRUE, repel = TRUE, label.size = 2.5)

DimPlot(All_samples_Merged, reduction = 'wnn.umap', group.by = 'predicted.celltype.l2', label = TRUE, repel = TRUE, label.size = 2.5)

All_samples_Merged <- RunUMAP(All_samples_Merged, reduction = 'pca', dims = 1:20, assay = 'RNA',
reduction.name = 'rna.umap', reduction.key = 'rnaUMAP_')
11:56:15 UMAP embedding parameters a = 0.9922 b = 1.112
11:56:15 Read 46976 rows and found 20 numeric columns
11:56:15 Using Annoy for neighbor search, n_neighbors = 30
11:56:15 Building Annoy index with metric = cosine, n_trees = 50
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
11:56:18 Writing NN index file to temp file /tmp/RtmpNFcsIF/filed20558ad9341
11:56:18 Searching Annoy index using 1 thread, search_k = 3000
11:56:29 Annoy recall = 100%
11:56:29 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
11:56:31 Initializing from normalized Laplacian + noise (using RSpectra)
11:56:38 Commencing optimization for 200 epochs, with 1992390 positive edges
Using method 'umap'
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
11:56:54 Optimization finished
All_samples_Merged <- RunUMAP(All_samples_Merged, reduction = 'apca', dims = 1:18, assay = 'ADT',
reduction.name = 'adt.umap', reduction.key = 'adtUMAP_')
11:56:54 UMAP embedding parameters a = 0.9922 b = 1.112
11:56:54 Read 46976 rows and found 18 numeric columns
11:56:54 Using Annoy for neighbor search, n_neighbors = 30
11:56:54 Building Annoy index with metric = cosine, n_trees = 50
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
11:56:57 Writing NN index file to temp file /tmp/RtmpNFcsIF/filed20553965a86
11:56:57 Searching Annoy index using 1 thread, search_k = 3000
11:57:09 Annoy recall = 100%
11:57:09 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
11:57:11 Initializing from normalized Laplacian + noise (using RSpectra)
11:57:13 Commencing optimization for 200 epochs, with 2051920 positive edges
Using method 'umap'
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
11:57:28 Optimization finished
p3 <- DimPlot(All_samples_Merged, reduction = 'rna.umap', group.by = 'predicted.celltype.l2', label = TRUE,
repel = TRUE, label.size = 2.5) + NoLegend()
p4 <- DimPlot(All_samples_Merged, reduction = 'adt.umap', group.by = 'predicted.celltype.l2', label = TRUE,
repel = TRUE, label.size = 2.5) + NoLegend()
p3 + p4

DimPlot(All_samples_Merged, reduction = 'rna.umap', group.by = "cell_line",label = TRUE, repel = TRUE, label.size = 2.5)

DimPlot(All_samples_Merged, reduction = 'rna.umap', group.by = "seurat_clusters",label = TRUE, repel = TRUE, label.size = 2.5)

DimPlot(All_samples_Merged, reduction = 'rna.umap', group.by = 'predicted.celltype.l2', label = TRUE,
repel = TRUE, label.size = 2.5)

DimPlot(All_samples_Merged, reduction = 'adt.umap', group.by = "cell_line",label = TRUE, repel = TRUE, label.size = 2.5)

DimPlot(All_samples_Merged, reduction = 'adt.umap', group.by = "seurat_clusters",label = TRUE, repel = TRUE, label.size = 2.5)

DimPlot(All_samples_Merged, reduction = 'adt.umap', group.by = 'predicted.celltype.l2', label = TRUE,
repel = TRUE, label.size = 2.5) + NoLegend()

FeaturePlot(All_samples_Merged, features = c("adt_CD45RA","adt_CD45RO","adt_CD5","adt_CD274", "adt_CD95"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)

FeaturePlot(All_samples_Merged, features = c("adt_TCRab", "adt_CD7", "adt_CD3", "adt_CD28"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)

FeaturePlot(All_samples_Merged, features = c("adt_CD26", "adt_CD44", "adt_CD62L","adt_CXCR3", "adt_CD127", "adt_CD45"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)

FeaturePlot(All_samples_Merged, features = c("adt_CCR6","adt_CCR7","adt_CCR8","adt_CCR10"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)

FeaturePlot(All_samples_Merged, features = c("adt_CD30","adt_CD40","adt_CCR4","adt_CD4" ,"adt_CD25"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)

FeaturePlot(All_samples_Merged, features = c("adt_PD1","adt_CD62L","adt_CD95","adt_TCRab", "adt_CXCR4"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)

FeaturePlot(All_samples_Merged, features = c("adt_CD2","adt_CD28","adt_CD127","adt_CD19"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)

FeaturePlot(All_samples_Merged, features = c("rna_TP53","rna_CARD11","rna_ARID1A","rna_FAS","rna_CCR4"),
reduction = 'wnn.umap', max.cutoff = 3, ncol = 3)

FeaturePlot(All_samples_Merged, features = c("rna_RHOA","rna_TNFRSF1B"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)

FeaturePlot(All_samples_Merged, features = c("rna_PLS3","rna_STAT4","rna_GATA3","rna_TRAIL","rna_CD1D"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)
Warning: The following features could not be found rna_TRAILWarning: The following requested variables were not found: rna_TRAIL

FeaturePlot(All_samples_Merged, features = c("rna_KIR3DL2","rna_NKp46","rna_IL2RA","rna_TOX","rna_STAT5A"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)
Warning: The following features could not be found rna_NKp46Warning: The following requested variables were not found: rna_NKp46

FeaturePlot(All_samples_Merged, features = c("rna_MYC","rna_MNT","rna_EPHA4","rna_DNM3","rna_TWIST1"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)

FeaturePlot(All_samples_Merged, features = c("rna_TRAF2","rna_SELL","rna_miR21"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)
Warning: The following features could not be found rna_miR21Warning: The following requested variables were not found: rna_miR21

FeaturePlot(All_samples_Merged, features = c("rna_TRAF2","rna_SELL","rna_miR21"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)
Warning: The following features could not be found rna_miR21Warning: The following requested variables were not found: rna_miR21

FeaturePlot(All_samples_Merged, features = c("rna_FCL3","rna_PDCD1","rna_CXCL13"),
reduction = 'wnn.umap', max.cutoff = 2,
cols = c("lightgrey","darkgreen"), ncol = 3)
Warning: The following features could not be found rna_FCL3Warning: The following requested variables were not found: rna_FCL3

VlnPlot(All_samples_Merged, features = "SCT.weight", group.by = 'predicted.celltype.l2', sort = TRUE, pt.size = 0.1) +
NoLegend()

VlnPlot(All_samples_Merged, features = "ADT.weight", group.by = 'predicted.celltype.l2', sort = TRUE, pt.size = 0.1) +
NoLegend()

table(All_samples_Merged$predicted.celltype.l2, All_samples_Merged$wsnn_res.0.4)
0 1 10 11 12 13 14 15 16 17 2 3 4 5 6 7 8 9
CD4 CTL 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0
CD4 Naive 0 0 0 0 0 21 0 0 0 4 0 0 1 0 0 1 679 0
CD4 Proliferating 5113 3002 1293 1302 578 0 280 31 144 0 5242 3797 1491 2579 2607 0 0 920
CD4 TCM 976 286 602 46 114 550 82 428 40 61 132 477 2172 29 25 2093 1656 1019
CD4 TEM 0 0 0 0 0 1 0 0 0 0 0 0 23 0 0 45 0 0
CD8 Naive 6 0 19 1 3 41 0 2 0 3 0 2 0 0 0 20 316 0
CD8 TCM 0 10 0 0 0 9 0 0 0 1 0 0 94 1 0 232 13 53
CD8 TEM 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 209 0 0
cDC2 9 0 68 9 43 0 25 0 2 0 0 148 0 27 5 0 0 0
dnT 0 0 0 0 0 33 7 0 0 1 0 1 3 0 0 14 2 0
gdT 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0
HSPC 161 1 10 399 36 2 35 3 5 0 9 285 0 757 653 0 1 0
ILC 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
MAIT 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 54 0 0
NK 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 91 0 0
NK Proliferating 7 2611 8 0 0 0 32 0 0 0 11 166 11 5 5 0 0 8
Treg 3 0 0 0 1 29 30 0 0 4 0 1 1 0 0 97 39 0
clustree(All_samples_Merged, prefix = "wsnn_res.")

LS0tCnRpdGxlOiAiV05OIGFuYWx5c2lzIG9mIENJVEUtc2VxLCBSTkEgKyBBRFQiCmF1dGhvcjogTmFzaXIgTWFobW9vZCBBYmJhc2kKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgI3JtZGZvcm1hdHM6OnJlYWR0aGVkb3duCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0b2NfY29sbGFwc2VkOiB0cnVlCi0tLQoKIyAxLiBsb2FkIGxpYnJhcmllcwpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KbGlicmFyeShTZXVyYXQpCmxpYnJhcnkoU2V1cmF0T2JqZWN0KQpsaWJyYXJ5KFNldXJhdERhdGEpCmxpYnJhcnkocGF0Y2h3b3JrKQpsaWJyYXJ5KGhhcm1vbnkpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KHJldGljdWxhdGUpCmxpYnJhcnkoQXppbXV0aCkKbGlicmFyeShkcGx5cikKbGlicmFyeShSdHNuZSkKbGlicmFyeShoYXJtb255KQpsaWJyYXJ5KGdyaWRFeHRyYSkKYGBgCgojIDIuIExvYWQgU2V1cmF0IE9iamVjdCAKYGBge3IgbG9hZF9zZXVyYXQsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQoKIGxvYWQoIi9ob21lL2Jpb2luZm8vQ2x1c3Rlcl90b19Db21wdXRlcl9UcmFuc2Zlcl9maWxlc19mb2xkZXIvQWxsX05vcm1hbC1QQk1DX0Fibm9ybWFsLWNlbGxMaW5lc19UX2NlbGxzX01lcmdlZF9Bbm5vdGF0ZWRfVU1BUF9vbl9DbHVzdGVyc190b19VU0UuUm9iaiIpCiAKICBBbGxfc2FtcGxlc19NZXJnZWQKCiAgCiAgRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsZ3JvdXAuYnkgPSAiY2VsbF9saW5lIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQpCgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4wLjkiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCkKCmNsdXN0ZXJfdGFibGUgPC0gdGFibGUoSWRlbnRzKEFsbF9zYW1wbGVzX01lcmdlZCkpCgoKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBUKQoKbGlicmFyeShjbHVzdHJlZSkKY2x1c3RyZWUoQWxsX3NhbXBsZXNfTWVyZ2VkLCBwcmVmaXggPSAiU0NUX3Nubl9yZXMuIikKCgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwxIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwxIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IEYpCgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwyIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwyIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IEYpCgoKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQoKCgp0YWJsZShBbGxfc2FtcGxlc19NZXJnZWQkcHJlZGljdGVkLmNlbGx0eXBlLmwyLCBBbGxfc2FtcGxlc19NZXJnZWQkU0NUX3Nubl9yZXMuMC45KQoKCmBgYAoKCiMgMy4gRGF0YSBQUkVQRVJBVElPTgpgYGB7ciBkYXRhLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KRGVmYXVsdEFzc2F5KEFsbF9zYW1wbGVzX01lcmdlZCkgPC0gJ0FEVCcKClZhcmlhYmxlRmVhdHVyZXMoQWxsX3NhbXBsZXNfTWVyZ2VkKSA8LSByb3duYW1lcyhBbGxfc2FtcGxlc19NZXJnZWRbWyJBRFQiXV0pCgojIHdlIHdpbGwgdXNlIGFsbCBBRFQgZmVhdHVyZXMgZm9yIGRpbWVuc2lvbmFsIHJlZHVjdGlvbgojIHdlIHNldCBhIGRpbWVuc2lvbmFsIHJlZHVjdGlvbiBuYW1lIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHRoZSAKQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIE5vcm1hbGl6ZURhdGEoQWxsX3NhbXBsZXNfTWVyZ2VkLCBub3JtYWxpemF0aW9uLm1ldGhvZCA9ICdDTFInLCBtYXJnaW4gPSAyKSAlPiUgCiAgU2NhbGVEYXRhKCkgJT4lIFJ1blBDQShyZWR1Y3Rpb24ubmFtZSA9ICdhcGNhJywgbnBjcyA9MjgsIG1heGl0ID0gNTAwMCkKCgojIElkZW50aWZ5IG11bHRpbW9kYWwgbmVpZ2hib3JzLiBUaGVzZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgbmVpZ2hib3JzIHNsb3QsIAojIGFuZCBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgYm1bWyd3ZWlnaHRlZC5ubiddXQojIFRoZSBXTk4gZ3JhcGggY2FuIGJlIGFjY2Vzc2VkIGF0IGJtW1sid2tubiJdXSwgCiMgYW5kIHRoZSBTTk4gZ3JhcGggdXNlZCBmb3IgY2x1c3RlcmluZyBhdCBibVtbIndzbm4iXV0KIyBDZWxsLXNwZWNpZmljIG1vZGFsaXR5IHdlaWdodHMgY2FuIGJlIGFjY2Vzc2VkIGF0IGJtJFJOQS53ZWlnaHQKCkFsbF9zYW1wbGVzX01lcmdlZCA8LSBGaW5kTXVsdGlNb2RhbE5laWdoYm9ycygKICBBbGxfc2FtcGxlc19NZXJnZWQsIHJlZHVjdGlvbi5saXN0ID0gbGlzdCgicGNhIiwgImFwY2EiKSwgCiAgZGltcy5saXN0ID0gbGlzdCgxOjIwLCAxOjE4KSwgbW9kYWxpdHkud2VpZ2h0Lm5hbWUgPSAiUk5BLndlaWdodCIKKQoKCgoKYGBgCgoKIyA0LiBWaXN1YWxpemF0aW9uIFJOQStBRFQKYGBge3IgVmlzdWFsaXplLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KCkFsbF9zYW1wbGVzX01lcmdlZCA8LSBSdW5VTUFQKEFsbF9zYW1wbGVzX01lcmdlZCwgbm4ubmFtZSA9ICJ3ZWlnaHRlZC5ubiIsIHJlZHVjdGlvbi5uYW1lID0gIndubi51bWFwIiwgcmVkdWN0aW9uLmtleSA9ICJ3bm5VTUFQXyIpCkFsbF9zYW1wbGVzX01lcmdlZCA8LSBGaW5kQ2x1c3RlcnMoQWxsX3NhbXBsZXNfTWVyZ2VkLCBncmFwaC5uYW1lID0gIndzbm4iLCBhbGdvcml0aG0gPSAzLCByZXNvbHV0aW9uID0gMC41LCB2ZXJib3NlID0gRkFMU0UpCgpwMSA8LSBEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uID0gJ3dubi51bWFwJywgbGFiZWwgPSBUUlVFLCByZXBlbCA9IFRSVUUsIGxhYmVsLnNpemUgPSAyLjUpICsgTm9MZWdlbmQoKQpwMiA8LSBEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uID0gJ3dubi51bWFwJywgZ3JvdXAuYnkgPSAncHJlZGljdGVkLmNlbGx0eXBlLmwyJywgbGFiZWwgPSBUUlVFLCByZXBlbCA9IFRSVUUsIGxhYmVsLnNpemUgPSAyLjUpICsgTm9MZWdlbmQoKQpwMSArIHAyCgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uID0gJ3dubi51bWFwJywgZ3JvdXAuYnkgPSAiY2VsbF9saW5lIixsYWJlbCA9IFRSVUUsIHJlcGVsID0gVFJVRSwgbGFiZWwuc2l6ZSA9IDIuNSkKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIHJlZHVjdGlvbiA9ICd3bm4udW1hcCcsIGdyb3VwLmJ5ID0gIndzbm5fcmVzLjAuNCIsbGFiZWwgPSBUUlVFLCByZXBlbCA9IFRSVUUsIGxhYmVsLnNpemUgPSAyLjUpCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAnd25uLnVtYXAnLCBncm91cC5ieSA9ICdwcmVkaWN0ZWQuY2VsbHR5cGUubDInLCBsYWJlbCA9IFRSVUUsIHJlcGVsID0gVFJVRSwgbGFiZWwuc2l6ZSA9IDIuNSkKYGBgCgpgYGB7ciBWaXN1YWxpemUyLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KCkFsbF9zYW1wbGVzX01lcmdlZCA8LSBSdW5VTUFQKEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uID0gJ3BjYScsIGRpbXMgPSAxOjIwLCBhc3NheSA9ICdSTkEnLCAKICAgICAgICAgICAgICByZWR1Y3Rpb24ubmFtZSA9ICdybmEudW1hcCcsIHJlZHVjdGlvbi5rZXkgPSAncm5hVU1BUF8nKQpBbGxfc2FtcGxlc19NZXJnZWQgPC0gUnVuVU1BUChBbGxfc2FtcGxlc19NZXJnZWQsIHJlZHVjdGlvbiA9ICdhcGNhJywgZGltcyA9IDE6MTgsIGFzc2F5ID0gJ0FEVCcsIAogICAgICAgICAgICAgIHJlZHVjdGlvbi5uYW1lID0gJ2FkdC51bWFwJywgcmVkdWN0aW9uLmtleSA9ICdhZHRVTUFQXycpCgpwMyA8LSBEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uID0gJ3JuYS51bWFwJywgZ3JvdXAuYnkgPSAncHJlZGljdGVkLmNlbGx0eXBlLmwyJywgbGFiZWwgPSBUUlVFLCAKICAgICAgICAgICAgICByZXBlbCA9IFRSVUUsIGxhYmVsLnNpemUgPSAyLjUpICsgTm9MZWdlbmQoKQpwNCA8LSBEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uID0gJ2FkdC51bWFwJywgZ3JvdXAuYnkgPSAncHJlZGljdGVkLmNlbGx0eXBlLmwyJywgbGFiZWwgPSBUUlVFLCAKICAgICAgICAgICAgICByZXBlbCA9IFRSVUUsIGxhYmVsLnNpemUgPSAyLjUpICsgTm9MZWdlbmQoKQpwMyArIHA0CgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uID0gJ3JuYS51bWFwJywgZ3JvdXAuYnkgPSAiY2VsbF9saW5lIixsYWJlbCA9IFRSVUUsIHJlcGVsID0gVFJVRSwgbGFiZWwuc2l6ZSA9IDIuNSkKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIHJlZHVjdGlvbiA9ICdybmEudW1hcCcsIGdyb3VwLmJ5ID0gInNldXJhdF9jbHVzdGVycyIsbGFiZWwgPSBUUlVFLCByZXBlbCA9IFRSVUUsIGxhYmVsLnNpemUgPSAyLjUpCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAncm5hLnVtYXAnLCBncm91cC5ieSA9ICdwcmVkaWN0ZWQuY2VsbHR5cGUubDInLCBsYWJlbCA9IFRSVUUsIAogICAgICAgICAgICAgIHJlcGVsID0gVFJVRSwgbGFiZWwuc2l6ZSA9IDIuNSkKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIHJlZHVjdGlvbiA9ICdhZHQudW1hcCcsIGdyb3VwLmJ5ID0gImNlbGxfbGluZSIsbGFiZWwgPSBUUlVFLCByZXBlbCA9IFRSVUUsIGxhYmVsLnNpemUgPSAyLjUpCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAnYWR0LnVtYXAnLCBncm91cC5ieSA9ICJzZXVyYXRfY2x1c3RlcnMiLGxhYmVsID0gVFJVRSwgcmVwZWwgPSBUUlVFLCBsYWJlbC5zaXplID0gMi41KQpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uID0gJ2FkdC51bWFwJywgZ3JvdXAuYnkgPSAncHJlZGljdGVkLmNlbGx0eXBlLmwyJywgbGFiZWwgPSBUUlVFLCAKICAgICAgICAgICAgICByZXBlbCA9IFRSVUUsIGxhYmVsLnNpemUgPSAyLjUpICsgTm9MZWdlbmQoKQoKYGBgCgoKYGBge3IgVmlzdWFsaXplMywgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgpGZWF0dXJlUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmVzID0gYygiYWR0X0NENDVSQSIsImFkdF9DRDQ1Uk8iLCJhZHRfQ0Q1IiwiYWR0X0NEMjc0IiwgImFkdF9DRDk1IiksCiAgICAgICAgICAgICAgICAgIHJlZHVjdGlvbiA9ICd3bm4udW1hcCcsIG1heC5jdXRvZmYgPSAyLCAKICAgICAgICAgICAgICAgICAgY29scyA9IGMoImxpZ2h0Z3JleSIsImRhcmtncmVlbiIpLCBuY29sID0gMykKCkZlYXR1cmVQbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZmVhdHVyZXMgPSBjKCJhZHRfVENSYWIiLCAiYWR0X0NENyIsICJhZHRfQ0QzIiwgImFkdF9DRDI4IiksCiAgICAgICAgICAgICAgICAgIHJlZHVjdGlvbiA9ICd3bm4udW1hcCcsIG1heC5jdXRvZmYgPSAyLCAKICAgICAgICAgICAgICAgICAgY29scyA9IGMoImxpZ2h0Z3JleSIsImRhcmtncmVlbiIpLCBuY29sID0gMykKICAgICAgICAgICAgCiBGZWF0dXJlUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmVzID0gYygiYWR0X0NEMjYiLCAiYWR0X0NENDQiLCAiYWR0X0NENjJMIiwiYWR0X0NYQ1IzIiwgImFkdF9DRDEyNyIsICJhZHRfQ0Q0NSIpLAogICAgICAgICAgICAgICAgICByZWR1Y3Rpb24gPSAnd25uLnVtYXAnLCBtYXguY3V0b2ZmID0gMiwgCiAgICAgICAgICAgICAgICAgIGNvbHMgPSBjKCJsaWdodGdyZXkiLCJkYXJrZ3JlZW4iKSwgbmNvbCA9IDMpICAgICAKIAogRmVhdHVyZVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCBmZWF0dXJlcyA9IGMoImFkdF9DQ1I2IiwiYWR0X0NDUjciLCJhZHRfQ0NSOCIsImFkdF9DQ1IxMCIpLAogICAgICAgICAgICAgICAgICByZWR1Y3Rpb24gPSAnd25uLnVtYXAnLCBtYXguY3V0b2ZmID0gMiwgCiAgICAgICAgICAgICAgICAgIGNvbHMgPSBjKCJsaWdodGdyZXkiLCJkYXJrZ3JlZW4iKSwgbmNvbCA9IDMpIAogCiBGZWF0dXJlUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmVzID0gYygiYWR0X0NEMzAiLCJhZHRfQ0Q0MCIsImFkdF9DQ1I0IiwiYWR0X0NENCIgLCJhZHRfQ0QyNSIpLAogICAgICAgICAgICAgICAgICByZWR1Y3Rpb24gPSAnd25uLnVtYXAnLCBtYXguY3V0b2ZmID0gMiwgCiAgICAgICAgICAgICAgICAgIGNvbHMgPSBjKCJsaWdodGdyZXkiLCJkYXJrZ3JlZW4iKSwgbmNvbCA9IDMpIAogCiBGZWF0dXJlUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmVzID0gYygiYWR0X1BEMSIsImFkdF9DRDYyTCIsImFkdF9DRDk1IiwiYWR0X1RDUmFiIiwgImFkdF9DWENSNCIpLAogICAgICAgICAgICAgICAgICByZWR1Y3Rpb24gPSAnd25uLnVtYXAnLCBtYXguY3V0b2ZmID0gMiwgCiAgICAgICAgICAgICAgICAgIGNvbHMgPSBjKCJsaWdodGdyZXkiLCJkYXJrZ3JlZW4iKSwgbmNvbCA9IDMpICAKIEZlYXR1cmVQbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZmVhdHVyZXMgPSBjKCJhZHRfQ0QyIiwiYWR0X0NEMjgiLCJhZHRfQ0QxMjciLCJhZHRfQ0QxOSIpLAogICAgICAgICAgICAgICAgICByZWR1Y3Rpb24gPSAnd25uLnVtYXAnLCBtYXguY3V0b2ZmID0gMiwgCiAgICAgICAgICAgICAgICAgIGNvbHMgPSBjKCJsaWdodGdyZXkiLCJkYXJrZ3JlZW4iKSwgbmNvbCA9IDMpICAKIAogCiBGZWF0dXJlUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmVzID0gYygicm5hX1RQNTMiLCJybmFfQ0FSRDExIiwicm5hX0FSSUQxQSIsInJuYV9GQVMiLCJybmFfQ0NSNCIpLCAKICAgICAgICAgICAgICAgICAgcmVkdWN0aW9uID0gJ3dubi51bWFwJywgbWF4LmN1dG9mZiA9IDMsIG5jb2wgPSAzKQogCiBGZWF0dXJlUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmVzID0gYygicm5hX1JIT0EiLCJybmFfVE5GUlNGMUIiKSwKICAgICAgICAgICAgICAgICAgcmVkdWN0aW9uID0gJ3dubi51bWFwJywgbWF4LmN1dG9mZiA9IDIsIAogICAgICAgICAgICAgICAgICBjb2xzID0gYygibGlnaHRncmV5IiwiZGFya2dyZWVuIiksIG5jb2wgPSAzKSAgCiAKIEZlYXR1cmVQbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZmVhdHVyZXMgPSBjKCJybmFfUExTMyIsInJuYV9TVEFUNCIsInJuYV9HQVRBMyIsInJuYV9UUkFJTCIsInJuYV9DRDFEIiksCiAgICAgICAgICAgICAgICAgIHJlZHVjdGlvbiA9ICd3bm4udW1hcCcsIG1heC5jdXRvZmYgPSAyLCAKICAgICAgICAgICAgICAgICAgY29scyA9IGMoImxpZ2h0Z3JleSIsImRhcmtncmVlbiIpLCBuY29sID0gMykgIAogCiBGZWF0dXJlUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmVzID0gYygicm5hX0tJUjNETDIiLCJybmFfTktwNDYiLCJybmFfSUwyUkEiLCJybmFfVE9YIiwicm5hX1NUQVQ1QSIpLAogICAgICAgICAgICAgICAgICByZWR1Y3Rpb24gPSAnd25uLnVtYXAnLCBtYXguY3V0b2ZmID0gMiwgCiAgICAgICAgICAgICAgICAgIGNvbHMgPSBjKCJsaWdodGdyZXkiLCJkYXJrZ3JlZW4iKSwgbmNvbCA9IDMpICAKIAogRmVhdHVyZVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCBmZWF0dXJlcyA9IGMoInJuYV9NWUMiLCJybmFfTU5UIiwicm5hX0VQSEE0Iiwicm5hX0ROTTMiLCJybmFfVFdJU1QxIiksCiAgICAgICAgICAgICAgICAgIHJlZHVjdGlvbiA9ICd3bm4udW1hcCcsIG1heC5jdXRvZmYgPSAyLCAKICAgICAgICAgICAgICAgICAgY29scyA9IGMoImxpZ2h0Z3JleSIsImRhcmtncmVlbiIpLCBuY29sID0gMykgIAogCiBGZWF0dXJlUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmVzID0gYygicm5hX1RSQUYyIiwicm5hX1NFTEwiLCJybmFfbWlSMjEiKSwKICAgICAgICAgICAgICAgICAgcmVkdWN0aW9uID0gJ3dubi51bWFwJywgbWF4LmN1dG9mZiA9IDIsIAogICAgICAgICAgICAgICAgICBjb2xzID0gYygibGlnaHRncmV5IiwiZGFya2dyZWVuIiksIG5jb2wgPSAzKSAgCiAKIEZlYXR1cmVQbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZmVhdHVyZXMgPSBjKCJybmFfVFJBRjIiLCJybmFfU0VMTCIsInJuYV9taVIyMSIpLAogICAgICAgICAgICAgICAgICByZWR1Y3Rpb24gPSAnd25uLnVtYXAnLCBtYXguY3V0b2ZmID0gMiwgCiAgICAgICAgICAgICAgICAgIGNvbHMgPSBjKCJsaWdodGdyZXkiLCJkYXJrZ3JlZW4iKSwgbmNvbCA9IDMpCiAKIEZlYXR1cmVQbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZmVhdHVyZXMgPSBjKCJybmFfRkNMMyIsInJuYV9QRENEMSIsInJuYV9DWENMMTMiKSwKICAgICAgICAgICAgICAgICAgcmVkdWN0aW9uID0gJ3dubi51bWFwJywgbWF4LmN1dG9mZiA9IDIsIAogICAgICAgICAgICAgICAgICBjb2xzID0gYygibGlnaHRncmV5IiwiZGFya2dyZWVuIiksIG5jb2wgPSAzKSAgCgpgYGAKYGBge3IgVmlzdWFsaXplNCwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgogVmxuUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmVzID0gIlNDVC53ZWlnaHQiLCBncm91cC5ieSA9ICdwcmVkaWN0ZWQuY2VsbHR5cGUubDInLCBzb3J0ID0gVFJVRSwgcHQuc2l6ZSA9IDAuMSkgKwogIE5vTGVnZW5kKCkKIFZsblBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCBmZWF0dXJlcyA9ICJBRFQud2VpZ2h0IiwgZ3JvdXAuYnkgPSAncHJlZGljdGVkLmNlbGx0eXBlLmwyJywgc29ydCA9IFRSVUUsIHB0LnNpemUgPSAwLjEpICsKICBOb0xlZ2VuZCgpCiAKIHRhYmxlKEFsbF9zYW1wbGVzX01lcmdlZCRwcmVkaWN0ZWQuY2VsbHR5cGUubDIsIEFsbF9zYW1wbGVzX01lcmdlZCR3c25uX3Jlcy4wLjQpCiAKIGNsdXN0cmVlKEFsbF9zYW1wbGVzX01lcmdlZCwgcHJlZml4ID0gIndzbm5fcmVzLiIpCgpgYGAKIyA1LiBTYXZlIHRoZSBTZXVyYXQgb2JqZWN0IGFzIGFuIFJvYmogZmlsZQpgYGB7ciBzYXZlUk9CSn0KCnNhdmUoQWxsX3NhbXBsZXNfTWVyZ2VkLCBmaWxlID0gIi4uLzAtaW1wX09CSl9TUy9BbGxfc2FtcGxlc19NZXJnZWRfV05OX2NvcnJlY3QuUm9iaiIpCgoKYGBgCgoKCgo=