1. load libraries

Le chargement a nécessité le package : SeuratObject
Le chargement a nécessité le package : sp

Attachement du package : ‘SeuratObject’

Les objets suivants sont masqués depuis ‘package:base’:

    intersect, t

Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
── Installed datasets ─────────────────────────────────────────────────────────────────────────────── SeuratData v0.2.2.9001 ──
✔ pbmc3k  3.1.4                                                ✔ pbmcsca 3.0.0

───────────────────────────────────────────────────────────── Key ─────────────────────────────────────────────────────────────
✔ Dataset loaded successfully
❯ Dataset built with a newer version of Seurat than installed
❓ Unknown version of Seurat installed


Attachement du package : ‘dplyr’

Les objets suivants sont masqués depuis ‘package:stats’:

    filter, lag

Les objets suivants sont masqués depuis ‘package:base’:

    intersect, setdiff, setequal, union

── Attaching core tidyverse packages ─────────────────────────────────────────────────────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.0     ✔ readr     2.1.5
✔ ggplot2   3.5.1     ✔ stringr   1.5.1
✔ lubridate 1.9.3     ✔ tibble    3.2.1
✔ purrr     1.0.2     ✔ tidyr     1.3.1── Conflicts ───────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
Attachement du package : ‘magrittr’

L'objet suivant est masqué depuis ‘package:purrr’:

    set_names

L'objet suivant est masqué depuis ‘package:tidyr’:

    extract

Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      

Attachement du package : ‘dbplyr’

Les objets suivants sont masqués depuis ‘package:dplyr’:

    ident, sql

Registered S3 method overwritten by 'rmarkdown':
  method         from
  print.paged_df     
Registered S3 method overwritten by 'SeuratDisk':
  method            from  
  as.sparse.H5Group Seurat

Attaching shinyBS
Le chargement a nécessité le package : SummarizedExperiment
Le chargement a nécessité le package : MatrixGenerics
Le chargement a nécessité le package : matrixStats

Attachement du package : 'matrixStats'

L'objet suivant est masqué depuis 'package:dplyr':

    count


Attachement du package : 'MatrixGenerics'

Les objets suivants sont masqués depuis 'package:matrixStats':

    colAlls, colAnyNAs, colAnys, colAvgsPerRowSet, colCollapse, colCounts, colCummaxs, colCummins, colCumprods,
    colCumsums, colDiffs, colIQRDiffs, colIQRs, colLogSumExps, colMadDiffs, colMads, colMaxs, colMeans2,
    colMedians, colMins, colOrderStats, colProds, colQuantiles, colRanges, colRanks, colSdDiffs, colSds,
    colSums2, colTabulates, colVarDiffs, colVars, colWeightedMads, colWeightedMeans, colWeightedMedians,
    colWeightedSds, colWeightedVars, rowAlls, rowAnyNAs, rowAnys, rowAvgsPerColSet, rowCollapse, rowCounts,
    rowCummaxs, rowCummins, rowCumprods, rowCumsums, rowDiffs, rowIQRDiffs, rowIQRs, rowLogSumExps, rowMadDiffs,
    rowMads, rowMaxs, rowMeans2, rowMedians, rowMins, rowOrderStats, rowProds, rowQuantiles, rowRanges, rowRanks,
    rowSdDiffs, rowSds, rowSums2, rowTabulates, rowVarDiffs, rowVars, rowWeightedMads, rowWeightedMeans,
    rowWeightedMedians, rowWeightedSds, rowWeightedVars

Le chargement a nécessité le package : GenomicRanges
Le chargement a nécessité le package : stats4
Le chargement a nécessité le package : BiocGenerics

Attachement du package : 'BiocGenerics'

Les objets suivants sont masqués depuis 'package:lubridate':

    intersect, setdiff, union

Les objets suivants sont masqués depuis 'package:dplyr':

    combine, intersect, setdiff, union

L'objet suivant est masqué depuis 'package:SeuratObject':

    intersect

Les objets suivants sont masqués depuis 'package:stats':

    IQR, mad, sd, var, xtabs

Les objets suivants sont masqués depuis 'package:base':

    anyDuplicated, aperm, append, as.data.frame, basename, cbind, colnames, dirname, do.call, duplicated, eval,
    evalq, Filter, Find, get, grep, grepl, intersect, is.unsorted, lapply, Map, mapply, match, mget, order,
    paste, pmax, pmax.int, pmin, pmin.int, Position, rank, rbind, Reduce, rownames, sapply, setdiff, sort, table,
    tapply, union, unique, unsplit, which.max, which.min

Le chargement a nécessité le package : S4Vectors

Attachement du package : 'S4Vectors'

Les objets suivants sont masqués depuis 'package:lubridate':

    second, second<-

L'objet suivant est masqué depuis 'package:tidyr':

    expand

Les objets suivants sont masqués depuis 'package:dplyr':

    first, rename

Les objets suivants sont masqués depuis 'package:base':

    expand.grid, I, unname

Le chargement a nécessité le package : IRanges

Attachement du package : 'IRanges'

L'objet suivant est masqué depuis 'package:lubridate':

    %within%

L'objet suivant est masqué depuis 'package:purrr':

    reduce

Les objets suivants sont masqués depuis 'package:dplyr':

    collapse, desc, slice

L'objet suivant est masqué depuis 'package:sp':

    %over%

Le chargement a nécessité le package : GenomeInfoDb

Attachement du package : 'GenomicRanges'

L'objet suivant est masqué depuis 'package:magrittr':

    subtract

Le chargement a nécessité le package : Biobase
Welcome to Bioconductor

    Vignettes contain introductory material; view with 'browseVignettes()'. To cite Bioconductor, see
    'citation("Biobase")', and for packages 'citation("pkgname")'.


Attachement du package : 'Biobase'

L'objet suivant est masqué depuis 'package:MatrixGenerics':

    rowMedians

Les objets suivants sont masqués depuis 'package:matrixStats':

    anyMissing, rowMedians


Attachement du package : 'SummarizedExperiment'

L'objet suivant est masqué depuis 'package:Seurat':

    Assays

L'objet suivant est masqué depuis 'package:SeuratObject':

    Assays


Attachement du package : 'celldex'

Les objets suivants sont masqués depuis 'package:SingleR':

    BlueprintEncodeData, DatabaseImmuneCellExpressionData, HumanPrimaryCellAtlasData, ImmGenData,
    MonacoImmuneData, MouseRNAseqData, NovershternHematopoieticData

Le chargement a nécessité le package : ggraph

Attachement du package : 'ggraph'

L'objet suivant est masqué depuis 'package:sp':

    geometry

2. Load Seurat Object

All_samples_Merged
An object of class Seurat 
64169 features across 59355 samples within 6 assays 
Active assay: SCT (27417 features, 3000 variable features)
 3 layers present: counts, data, scale.data
 5 other assays present: RNA, ADT, prediction.score.celltype.l1, prediction.score.celltype.l2, prediction.score.celltype.l3
 3 dimensional reductions calculated: integrated_dr, ref.umap, pca

Azimuth Annotation

# InstallData("pbmcref")
# 
# # The RunAzimuth function can take a Seurat object as input
# All_samples_Merged <- RunAzimuth(All_samples_Merged, reference = "pbmcref")

3. QC


# Remove the percent.mito column
All_samples_Merged$percent.mito <- NULL
Avis : Cannot find cell-level meta data named  percent.mito
# Set identity classes to an existing column in meta data
Idents(object = All_samples_Merged) <- "cell_line"

All_samples_Merged[["percent.rb"]] <- PercentageFeatureSet(All_samples_Merged, 
                                                           pattern = "^RP[SL]")
# Convert 'percent.mt' to numeric, replacing "NaN" with 0
All_samples_Merged$percent.rb <- replace(as.numeric(All_samples_Merged$percent.rb), is.na(All_samples_Merged$percent.rb), 0)



# The [[ operator can add columns to object metadata. This is a great place to stash QC stats
All_samples_Merged[["percent.mt"]] <- PercentageFeatureSet(All_samples_Merged, pattern = "^MT-")

# Convert 'percent.mt' to numeric, replacing "NaN" with 0
All_samples_Merged$percent.mt <- replace(as.numeric(All_samples_Merged$percent.mt), is.na(All_samples_Merged$percent.mt), 0)





VlnPlot(All_samples_Merged, features = c("nFeature_RNA", 
                                         "nCount_RNA", 
                                         "percent.mt",
                                         "percent.rb"), 
                            ncol = 4, pt.size = 0.1) & 
              theme(plot.title = element_text(size=10))


FeatureScatter(All_samples_Merged, feature1 = "percent.mt", 
                                  feature2 = "percent.rb")


VlnPlot(All_samples_Merged, features = c("nFeature_RNA", 
                                    "nCount_RNA", 
                                    "percent.mt"), 
                                      ncol = 3)


FeatureScatter(All_samples_Merged, 
               feature1 = "percent.mt", 
               feature2 = "percent.rb") +
        geom_smooth(method = 'lm')


FeatureScatter(All_samples_Merged, 
               feature1 = "nCount_RNA", 
               feature2 = "nFeature_RNA") +
        geom_smooth(method = 'lm')

##FeatureScatter is typically used to visualize feature-feature relationships ##for anything calculated by the object, ##i.e. columns in object metadata, PC scores etc.


FeatureScatter(All_samples_Merged, 
               feature1 = "nCount_RNA", 
               feature2 = "percent.mt")+
  geom_smooth(method = 'lm')


FeatureScatter(All_samples_Merged, 
               feature1 = "nCount_RNA", 
               feature2 = "nFeature_RNA")+
  geom_smooth(method = 'lm')

Assign Cell-Cycle Scores

Running SCTransform on assay: RNA
Running SCTransform on layer: counts
vst.flavor='v2' set. Using model with fixed slope and excluding poisson genes.
Variance stabilizing transformation of count matrix of size 27417 by 59355
Model formula is y ~ log_umi
Get Negative Binomial regression parameters per gene
Using 2000 genes, 5000 cells
Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Found 453 outliers - those will be ignored in fitting/regularization step

Second step: Get residuals using fitted parameters for 27417 genes
Computing corrected count matrix for 27417 genes
Calculating gene attributes
Wall clock passed: Time difference of 8.810053 mins
Determine variable features

  |                                                                                                                           
  |                                                                                                                     |   0%
  |                                                                                                                           
  |=============================                                                                                        |  25%
  |                                                                                                                           
  |==========================================================                                                           |  50%
  |                                                                                                                           
  |========================================================================================                             |  75%
  |                                                                                                                           
  |=====================================================================================================================| 100%
Getting residuals for block 1(of 12) for counts dataset
Getting residuals for block 2(of 12) for counts dataset
Getting residuals for block 3(of 12) for counts dataset
Getting residuals for block 4(of 12) for counts dataset
Getting residuals for block 5(of 12) for counts dataset
Getting residuals for block 6(of 12) for counts dataset
Getting residuals for block 7(of 12) for counts dataset
Getting residuals for block 8(of 12) for counts dataset
Getting residuals for block 9(of 12) for counts dataset
Getting residuals for block 10(of 12) for counts dataset
Getting residuals for block 11(of 12) for counts dataset
Getting residuals for block 12(of 12) for counts dataset

  |                                                                                                                           
  |                                                                                                                     |   0%
  |                                                                                                                           
  |=============================                                                                                        |  25%
  |                                                                                                                           
  |==========================================================                                                           |  50%
  |                                                                                                                           
  |========================================================================================                             |  75%
  |                                                                                                                           
  |=====================================================================================================================| 100%
Finished calculating residuals for counts
Set default assay to SCT
Avis : The following features are not present in the object: MLF1IP, not searching for symbol synonymsAvis : The following features are not present in the object: FAM64A, HN1, not searching for symbol synonyms

4. Normalize data

DefaultAssay(All_samples_Merged) <- "RNA"

# Apply SCTransform
All_samples_Merged <- SCTransform(All_samples_Merged, 
                                  vars.to.regress = c("percent.rb","percent.mt", "CC.Difference"), 
                                  do.scale=TRUE, 
                                  do.center=TRUE, 
                                  verbose = TRUE)
Running SCTransform on assay: RNA
Running SCTransform on layer: counts
vst.flavor='v2' set. Using model with fixed slope and excluding poisson genes.
Variance stabilizing transformation of count matrix of size 27417 by 59355
Model formula is y ~ log_umi
Get Negative Binomial regression parameters per gene
Using 2000 genes, 5000 cells
Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Found 453 outliers - those will be ignored in fitting/regularization step

Second step: Get residuals using fitted parameters for 27417 genes
Computing corrected count matrix for 27417 genes
Calculating gene attributes
Wall clock passed: Time difference of 9.458052 mins
Determine variable features
Regressing out percent.rb, percent.mt, CC.Difference

  |                                                                                                                           
  |                                                                                                                     |   0%
  |                                                                                                                           
  |=                                                                                                                    |   0%
  |                                                                                                                           
  |=                                                                                                                    |   1%
  |                                                                                                                           
  |==                                                                                                                   |   1%
  |                                                                                                                           
  |==                                                                                                                   |   2%
  |                                                                                                                           
  |===                                                                                                                  |   2%
  |                                                                                                                           
  |===                                                                                                                  |   3%
  |                                                                                                                           
  |====                                                                                                                 |   3%
  |                                                                                                                           
  |====                                                                                                                 |   4%
  |                                                                                                                           
  |=====                                                                                                                |   4%
  |                                                                                                                           
  |=====                                                                                                                |   5%
  |                                                                                                                           
  |======                                                                                                               |   5%
  |                                                                                                                           
  |======                                                                                                               |   6%
  |                                                                                                                           
  |=======                                                                                                              |   6%
  |                                                                                                                           
  |========                                                                                                             |   6%
  |                                                                                                                           
  |========                                                                                                             |   7%
  |                                                                                                                           
  |=========                                                                                                            |   7%
  |                                                                                                                           
  |=========                                                                                                            |   8%
  |                                                                                                                           
  |==========                                                                                                           |   8%
  |                                                                                                                           
  |==========                                                                                                           |   9%
  |                                                                                                                           
  |===========                                                                                                          |   9%
  |                                                                                                                           
  |===========                                                                                                          |  10%
  |                                                                                                                           
  |============                                                                                                         |  10%
  |                                                                                                                           
  |============                                                                                                         |  11%
  |                                                                                                                           
  |=============                                                                                                        |  11%
  |                                                                                                                           
  |=============                                                                                                        |  12%
  |                                                                                                                           
  |==============                                                                                                       |  12%
  |                                                                                                                           
  |===============                                                                                                      |  12%
  |                                                                                                                           
  |===============                                                                                                      |  13%
  |                                                                                                                           
  |================                                                                                                     |  13%
  |                                                                                                                           
  |================                                                                                                     |  14%
  |                                                                                                                           
  |=================                                                                                                    |  14%
  |                                                                                                                           
  |=================                                                                                                    |  15%
  |                                                                                                                           
  |==================                                                                                                   |  15%
  |                                                                                                                           
  |==================                                                                                                   |  16%
  |                                                                                                                           
  |===================                                                                                                  |  16%
  |                                                                                                                           
  |===================                                                                                                  |  17%
  |                                                                                                                           
  |====================                                                                                                 |  17%
  |                                                                                                                           
  |====================                                                                                                 |  18%
  |                                                                                                                           
  |=====================                                                                                                |  18%
  |                                                                                                                           
  |======================                                                                                               |  18%
  |                                                                                                                           
  |======================                                                                                               |  19%
  |                                                                                                                           
  |=======================                                                                                              |  19%
  |                                                                                                                           
  |=======================                                                                                              |  20%
  |                                                                                                                           
  |========================                                                                                             |  20%
  |                                                                                                                           
  |========================                                                                                             |  21%
  |                                                                                                                           
  |=========================                                                                                            |  21%
  |                                                                                                                           
  |=========================                                                                                            |  22%
  |                                                                                                                           
  |==========================                                                                                           |  22%
  |                                                                                                                           
  |==========================                                                                                           |  23%
  |                                                                                                                           
  |===========================                                                                                          |  23%
  |                                                                                                                           
  |===========================                                                                                          |  24%
  |                                                                                                                           
  |============================                                                                                         |  24%
  |                                                                                                                           
  |=============================                                                                                        |  24%
  |                                                                                                                           
  |=============================                                                                                        |  25%
  |                                                                                                                           
  |==============================                                                                                       |  25%
  |                                                                                                                           
  |==============================                                                                                       |  26%
  |                                                                                                                           
  |===============================                                                                                      |  26%
  |                                                                                                                           
  |===============================                                                                                      |  27%
  |                                                                                                                           
  |================================                                                                                     |  27%
  |                                                                                                                           
  |================================                                                                                     |  28%
  |                                                                                                                           
  |=================================                                                                                    |  28%
  |                                                                                                                           
  |=================================                                                                                    |  29%
  |                                                                                                                           
  |==================================                                                                                   |  29%
  |                                                                                                                           
  |===================================                                                                                  |  30%
  |                                                                                                                           
  |====================================                                                                                 |  30%
  |                                                                                                                           
  |====================================                                                                                 |  31%
  |                                                                                                                           
  |=====================================                                                                                |  31%
  |                                                                                                                           
  |=====================================                                                                                |  32%
  |                                                                                                                           
  |======================================                                                                               |  32%
  |                                                                                                                           
  |======================================                                                                               |  33%
  |                                                                                                                           
  |=======================================                                                                              |  33%
  |                                                                                                                           
  |=======================================                                                                              |  34%
  |                                                                                                                           
  |========================================                                                                             |  34%
  |                                                                                                                           
  |========================================                                                                             |  35%
  |                                                                                                                           
  |=========================================                                                                            |  35%
  |                                                                                                                           
  |==========================================                                                                           |  36%
  |                                                                                                                           
  |===========================================                                                                          |  36%
  |                                                                                                                           
  |===========================================                                                                          |  37%
  |                                                                                                                           
  |============================================                                                                         |  37%
  |                                                                                                                           
  |============================================                                                                         |  38%
  |                                                                                                                           
  |=============================================                                                                        |  38%
  |                                                                                                                           
  |=============================================                                                                        |  39%
  |                                                                                                                           
  |==============================================                                                                       |  39%
  |                                                                                                                           
  |==============================================                                                                       |  40%
  |                                                                                                                           
  |===============================================                                                                      |  40%
  |                                                                                                                           
  |===============================================                                                                      |  41%
  |                                                                                                                           
  |================================================                                                                     |  41%
  |                                                                                                                           
  |=================================================                                                                    |  41%
  |                                                                                                                           
  |=================================================                                                                    |  42%
  |                                                                                                                           
  |==================================================                                                                   |  42%
  |                                                                                                                           
  |==================================================                                                                   |  43%
  |                                                                                                                           
  |===================================================                                                                  |  43%
  |                                                                                                                           
  |===================================================                                                                  |  44%
  |                                                                                                                           
  |====================================================                                                                 |  44%
  |                                                                                                                           
  |====================================================                                                                 |  45%
  |                                                                                                                           
  |=====================================================                                                                |  45%
  |                                                                                                                           
  |=====================================================                                                                |  46%
  |                                                                                                                           
  |======================================================                                                               |  46%
  |                                                                                                                           
  |======================================================                                                               |  47%
  |                                                                                                                           
  |=======================================================                                                              |  47%
  |                                                                                                                           
  |========================================================                                                             |  47%
  |                                                                                                                           
  |========================================================                                                             |  48%
  |                                                                                                                           
  |=========================================================                                                            |  48%
  |                                                                                                                           
  |=========================================================                                                            |  49%
  |                                                                                                                           
  |==========================================================                                                           |  49%
  |                                                                                                                           
  |==========================================================                                                           |  50%
  |                                                                                                                           
  |===========================================================                                                          |  50%
  |                                                                                                                           
  |===========================================================                                                          |  51%
  |                                                                                                                           
  |============================================================                                                         |  51%
  |                                                                                                                           
  |============================================================                                                         |  52%
  |                                                                                                                           
  |=============================================================                                                        |  52%
  |                                                                                                                           
  |=============================================================                                                        |  53%
  |                                                                                                                           
  |==============================================================                                                       |  53%
  |                                                                                                                           
  |===============================================================                                                      |  53%
  |                                                                                                                           
  |===============================================================                                                      |  54%
  |                                                                                                                           
  |================================================================                                                     |  54%
  |                                                                                                                           
  |================================================================                                                     |  55%
  |                                                                                                                           
  |=================================================================                                                    |  55%
  |                                                                                                                           
  |=================================================================                                                    |  56%
  |                                                                                                                           
  |==================================================================                                                   |  56%
  |                                                                                                                           
  |==================================================================                                                   |  57%
  |                                                                                                                           
  |===================================================================                                                  |  57%
  |                                                                                                                           
  |===================================================================                                                  |  58%
  |                                                                                                                           
  |====================================================================                                                 |  58%
  |                                                                                                                           
  |====================================================================                                                 |  59%
  |                                                                                                                           
  |=====================================================================                                                |  59%
  |                                                                                                                           
  |======================================================================                                               |  59%
  |                                                                                                                           
  |======================================================================                                               |  60%
  |                                                                                                                           
  |=======================================================================                                              |  60%
  |                                                                                                                           
  |=======================================================================                                              |  61%
  |                                                                                                                           
  |========================================================================                                             |  61%
  |                                                                                                                           
  |========================================================================                                             |  62%
  |                                                                                                                           
  |=========================================================================                                            |  62%
  |                                                                                                                           
  |=========================================================================                                            |  63%
  |                                                                                                                           
  |==========================================================================                                           |  63%
  |                                                                                                                           
  |==========================================================================                                           |  64%
  |                                                                                                                           
  |===========================================================================                                          |  64%
  |                                                                                                                           
  |============================================================================                                         |  65%
  |                                                                                                                           
  |=============================================================================                                        |  65%
  |                                                                                                                           
  |=============================================================================                                        |  66%
  |                                                                                                                           
  |==============================================================================                                       |  66%
  |                                                                                                                           
  |==============================================================================                                       |  67%
  |                                                                                                                           
  |===============================================================================                                      |  67%
  |                                                                                                                           
  |===============================================================================                                      |  68%
  |                                                                                                                           
  |================================================================================                                     |  68%
  |                                                                                                                           
  |================================================================================                                     |  69%
  |                                                                                                                           
  |=================================================================================                                    |  69%
  |                                                                                                                           
  |=================================================================================                                    |  70%
  |                                                                                                                           
  |==================================================================================                                   |  70%
  |                                                                                                                           
  |===================================================================================                                  |  71%
  |                                                                                                                           
  |====================================================================================                                 |  71%
  |                                                                                                                           
  |====================================================================================                                 |  72%
  |                                                                                                                           
  |=====================================================================================                                |  72%
  |                                                                                                                           
  |=====================================================================================                                |  73%
  |                                                                                                                           
  |======================================================================================                               |  73%
  |                                                                                                                           
  |======================================================================================                               |  74%
  |                                                                                                                           
  |=======================================================================================                              |  74%
  |                                                                                                                           
  |=======================================================================================                              |  75%
  |                                                                                                                           
  |========================================================================================                             |  75%
  |                                                                                                                           
  |========================================================================================                             |  76%
  |                                                                                                                           
  |=========================================================================================                            |  76%
  |                                                                                                                           
  |==========================================================================================                           |  76%
  |                                                                                                                           
  |==========================================================================================                           |  77%
  |                                                                                                                           
  |===========================================================================================                          |  77%
  |                                                                                                                           
  |===========================================================================================                          |  78%
  |                                                                                                                           
  |============================================================================================                         |  78%
  |                                                                                                                           
  |============================================================================================                         |  79%
  |                                                                                                                           
  |=============================================================================================                        |  79%
  |                                                                                                                           
  |=============================================================================================                        |  80%
  |                                                                                                                           
  |==============================================================================================                       |  80%
  |                                                                                                                           
  |==============================================================================================                       |  81%
  |                                                                                                                           
  |===============================================================================================                      |  81%
  |                                                                                                                           
  |===============================================================================================                      |  82%
  |                                                                                                                           
  |================================================================================================                     |  82%
  |                                                                                                                           
  |=================================================================================================                    |  82%
  |                                                                                                                           
  |=================================================================================================                    |  83%
  |                                                                                                                           
  |==================================================================================================                   |  83%
  |                                                                                                                           
  |==================================================================================================                   |  84%
  |                                                                                                                           
  |===================================================================================================                  |  84%
  |                                                                                                                           
  |===================================================================================================                  |  85%
  |                                                                                                                           
  |====================================================================================================                 |  85%
  |                                                                                                                           
  |====================================================================================================                 |  86%
  |                                                                                                                           
  |=====================================================================================================                |  86%
  |                                                                                                                           
  |=====================================================================================================                |  87%
  |                                                                                                                           
  |======================================================================================================               |  87%
  |                                                                                                                           
  |======================================================================================================               |  88%
  |                                                                                                                           
  |=======================================================================================================              |  88%
  |                                                                                                                           
  |========================================================================================================             |  88%
  |                                                                                                                           
  |========================================================================================================             |  89%
  |                                                                                                                           
  |=========================================================================================================            |  89%
  |                                                                                                                           
  |=========================================================================================================            |  90%
  |                                                                                                                           
  |==========================================================================================================           |  90%
  |                                                                                                                           
  |==========================================================================================================           |  91%
  |                                                                                                                           
  |===========================================================================================================          |  91%
  |                                                                                                                           
  |===========================================================================================================          |  92%
  |                                                                                                                           
  |============================================================================================================         |  92%
  |                                                                                                                           
  |============================================================================================================         |  93%
  |                                                                                                                           
  |=============================================================================================================        |  93%
  |                                                                                                                           
  |=============================================================================================================        |  94%
  |                                                                                                                           
  |==============================================================================================================       |  94%
  |                                                                                                                           
  |===============================================================================================================      |  94%
  |                                                                                                                           
  |===============================================================================================================      |  95%
  |                                                                                                                           
  |================================================================================================================     |  95%
  |                                                                                                                           
  |================================================================================================================     |  96%
  |                                                                                                                           
  |=================================================================================================================    |  96%
  |                                                                                                                           
  |=================================================================================================================    |  97%
  |                                                                                                                           
  |==================================================================================================================   |  97%
  |                                                                                                                           
  |==================================================================================================================   |  98%
  |                                                                                                                           
  |===================================================================================================================  |  98%
  |                                                                                                                           
  |===================================================================================================================  |  99%
  |                                                                                                                           
  |==================================================================================================================== |  99%
  |                                                                                                                           
  |==================================================================================================================== | 100%
  |                                                                                                                           
  |=====================================================================================================================| 100%
Centering and scaling data matrix

  |                                                                                                                           
  |                                                                                                                     |   0%
  |                                                                                                                           
  |=============================                                                                                        |  25%
  |                                                                                                                           
  |==========================================================                                                           |  50%
  |                                                                                                                           
  |========================================================================================                             |  75%
  |                                                                                                                           
  |=====================================================================================================================| 100%
Getting residuals for block 1(of 12) for counts dataset
Getting residuals for block 2(of 12) for counts dataset
Getting residuals for block 3(of 12) for counts dataset
Getting residuals for block 4(of 12) for counts dataset
Getting residuals for block 5(of 12) for counts dataset
Getting residuals for block 6(of 12) for counts dataset
Getting residuals for block 7(of 12) for counts dataset
Getting residuals for block 8(of 12) for counts dataset
Getting residuals for block 9(of 12) for counts dataset
Getting residuals for block 10(of 12) for counts dataset
Getting residuals for block 11(of 12) for counts dataset
Getting residuals for block 12(of 12) for counts dataset
Regressing out percent.rb, percent.mt, CC.Difference

  |                                                                                                                           
  |                                                                                                                     |   0%
  |                                                                                                                           
  |=                                                                                                                    |   0%
  |                                                                                                                           
  |=                                                                                                                    |   1%
  |                                                                                                                           
  |==                                                                                                                   |   1%
  |                                                                                                                           
  |==                                                                                                                   |   2%
  |                                                                                                                           
  |===                                                                                                                  |   2%
  |                                                                                                                           
  |===                                                                                                                  |   3%
  |                                                                                                                           
  |====                                                                                                                 |   3%
  |                                                                                                                           
  |====                                                                                                                 |   4%
  |                                                                                                                           
  |=====                                                                                                                |   4%
  |                                                                                                                           
  |=====                                                                                                                |   5%
  |                                                                                                                           
  |======                                                                                                               |   5%
  |                                                                                                                           
  |======                                                                                                               |   6%
  |                                                                                                                           
  |=======                                                                                                              |   6%
  |                                                                                                                           
  |========                                                                                                             |   6%
  |                                                                                                                           
  |========                                                                                                             |   7%
  |                                                                                                                           
  |=========                                                                                                            |   7%
  |                                                                                                                           
  |=========                                                                                                            |   8%
  |                                                                                                                           
  |==========                                                                                                           |   8%
  |                                                                                                                           
  |==========                                                                                                           |   9%
  |                                                                                                                           
  |===========                                                                                                          |   9%
  |                                                                                                                           
  |===========                                                                                                          |  10%
  |                                                                                                                           
  |============                                                                                                         |  10%
  |                                                                                                                           
  |============                                                                                                         |  11%
  |                                                                                                                           
  |=============                                                                                                        |  11%
  |                                                                                                                           
  |=============                                                                                                        |  12%
  |                                                                                                                           
  |==============                                                                                                       |  12%
  |                                                                                                                           
  |===============                                                                                                      |  12%
  |                                                                                                                           
  |===============                                                                                                      |  13%
  |                                                                                                                           
  |================                                                                                                     |  13%
  |                                                                                                                           
  |================                                                                                                     |  14%
  |                                                                                                                           
  |=================                                                                                                    |  14%
  |                                                                                                                           
  |=================                                                                                                    |  15%
  |                                                                                                                           
  |==================                                                                                                   |  15%
  |                                                                                                                           
  |==================                                                                                                   |  16%
  |                                                                                                                           
  |===================                                                                                                  |  16%
  |                                                                                                                           
  |===================                                                                                                  |  17%
  |                                                                                                                           
  |====================                                                                                                 |  17%
  |                                                                                                                           
  |====================                                                                                                 |  18%
  |                                                                                                                           
  |=====================                                                                                                |  18%
  |                                                                                                                           
  |======================                                                                                               |  18%
  |                                                                                                                           
  |======================                                                                                               |  19%
  |                                                                                                                           
  |=======================                                                                                              |  19%
  |                                                                                                                           
  |=======================                                                                                              |  20%
  |                                                                                                                           
  |========================                                                                                             |  20%
  |                                                                                                                           
  |========================                                                                                             |  21%
  |                                                                                                                           
  |=========================                                                                                            |  21%
  |                                                                                                                           
  |=========================                                                                                            |  22%
  |                                                                                                                           
  |==========================                                                                                           |  22%
  |                                                                                                                           
  |==========================                                                                                           |  23%
  |                                                                                                                           
  |===========================                                                                                          |  23%
  |                                                                                                                           
  |===========================                                                                                          |  24%
  |                                                                                                                           
  |============================                                                                                         |  24%
  |                                                                                                                           
  |=============================                                                                                        |  24%
  |                                                                                                                           
  |=============================                                                                                        |  25%
  |                                                                                                                           
  |==============================                                                                                       |  25%
  |                                                                                                                           
  |==============================                                                                                       |  26%
  |                                                                                                                           
  |===============================                                                                                      |  26%
  |                                                                                                                           
  |===============================                                                                                      |  27%
  |                                                                                                                           
  |================================                                                                                     |  27%
  |                                                                                                                           
  |================================                                                                                     |  28%
  |                                                                                                                           
  |=================================                                                                                    |  28%
  |                                                                                                                           
  |=================================                                                                                    |  29%
  |                                                                                                                           
  |==================================                                                                                   |  29%
  |                                                                                                                           
  |===================================                                                                                  |  30%
  |                                                                                                                           
  |====================================                                                                                 |  30%
  |                                                                                                                           
  |====================================                                                                                 |  31%
  |                                                                                                                           
  |=====================================                                                                                |  31%
  |                                                                                                                           
  |=====================================                                                                                |  32%
  |                                                                                                                           
  |======================================                                                                               |  32%
  |                                                                                                                           
  |======================================                                                                               |  33%
  |                                                                                                                           
  |=======================================                                                                              |  33%
  |                                                                                                                           
  |=======================================                                                                              |  34%
  |                                                                                                                           
  |========================================                                                                             |  34%
  |                                                                                                                           
  |========================================                                                                             |  35%
  |                                                                                                                           
  |=========================================                                                                            |  35%
  |                                                                                                                           
  |==========================================                                                                           |  36%
  |                                                                                                                           
  |===========================================                                                                          |  36%
  |                                                                                                                           
  |===========================================                                                                          |  37%
  |                                                                                                                           
  |============================================                                                                         |  37%
  |                                                                                                                           
  |============================================                                                                         |  38%
  |                                                                                                                           
  |=============================================                                                                        |  38%
  |                                                                                                                           
  |=============================================                                                                        |  39%
  |                                                                                                                           
  |==============================================                                                                       |  39%
  |                                                                                                                           
  |==============================================                                                                       |  40%
  |                                                                                                                           
  |===============================================                                                                      |  40%
  |                                                                                                                           
  |===============================================                                                                      |  41%
  |                                                                                                                           
  |================================================                                                                     |  41%
  |                                                                                                                           
  |=================================================                                                                    |  41%
  |                                                                                                                           
  |=================================================                                                                    |  42%
  |                                                                                                                           
  |==================================================                                                                   |  42%
  |                                                                                                                           
  |==================================================                                                                   |  43%
  |                                                                                                                           
  |===================================================                                                                  |  43%
  |                                                                                                                           
  |===================================================                                                                  |  44%
  |                                                                                                                           
  |====================================================                                                                 |  44%
  |                                                                                                                           
  |====================================================                                                                 |  45%
  |                                                                                                                           
  |=====================================================                                                                |  45%
  |                                                                                                                           
  |=====================================================                                                                |  46%
  |                                                                                                                           
  |======================================================                                                               |  46%
  |                                                                                                                           
  |======================================================                                                               |  47%
  |                                                                                                                           
  |=======================================================                                                              |  47%
  |                                                                                                                           
  |========================================================                                                             |  47%
  |                                                                                                                           
  |========================================================                                                             |  48%
  |                                                                                                                           
  |=========================================================                                                            |  48%
  |                                                                                                                           
  |=========================================================                                                            |  49%
  |                                                                                                                           
  |==========================================================                                                           |  49%
  |                                                                                                                           
  |==========================================================                                                           |  50%
  |                                                                                                                           
  |===========================================================                                                          |  50%
  |                                                                                                                           
  |===========================================================                                                          |  51%
  |                                                                                                                           
  |============================================================                                                         |  51%
  |                                                                                                                           
  |============================================================                                                         |  52%
  |                                                                                                                           
  |=============================================================                                                        |  52%
  |                                                                                                                           
  |=============================================================                                                        |  53%
  |                                                                                                                           
  |==============================================================                                                       |  53%
  |                                                                                                                           
  |===============================================================                                                      |  53%
  |                                                                                                                           
  |===============================================================                                                      |  54%
  |                                                                                                                           
  |================================================================                                                     |  54%
  |                                                                                                                           
  |================================================================                                                     |  55%
  |                                                                                                                           
  |=================================================================                                                    |  55%
  |                                                                                                                           
  |=================================================================                                                    |  56%
  |                                                                                                                           
  |==================================================================                                                   |  56%
  |                                                                                                                           
  |==================================================================                                                   |  57%
  |                                                                                                                           
  |===================================================================                                                  |  57%
  |                                                                                                                           
  |===================================================================                                                  |  58%
  |                                                                                                                           
  |====================================================================                                                 |  58%
  |                                                                                                                           
  |====================================================================                                                 |  59%
  |                                                                                                                           
  |=====================================================================                                                |  59%
  |                                                                                                                           
  |======================================================================                                               |  59%
  |                                                                                                                           
  |======================================================================                                               |  60%
  |                                                                                                                           
  |=======================================================================                                              |  60%
  |                                                                                                                           
  |=======================================================================                                              |  61%
  |                                                                                                                           
  |========================================================================                                             |  61%
  |                                                                                                                           
  |========================================================================                                             |  62%
  |                                                                                                                           
  |=========================================================================                                            |  62%
  |                                                                                                                           
  |=========================================================================                                            |  63%
  |                                                                                                                           
  |==========================================================================                                           |  63%
  |                                                                                                                           
  |==========================================================================                                           |  64%
  |                                                                                                                           
  |===========================================================================                                          |  64%
  |                                                                                                                           
  |============================================================================                                         |  65%
  |                                                                                                                           
  |=============================================================================                                        |  65%
  |                                                                                                                           
  |=============================================================================                                        |  66%
  |                                                                                                                           
  |==============================================================================                                       |  66%
  |                                                                                                                           
  |==============================================================================                                       |  67%
  |                                                                                                                           
  |===============================================================================                                      |  67%
  |                                                                                                                           
  |===============================================================================                                      |  68%
  |                                                                                                                           
  |================================================================================                                     |  68%
  |                                                                                                                           
  |================================================================================                                     |  69%
  |                                                                                                                           
  |=================================================================================                                    |  69%
  |                                                                                                                           
  |=================================================================================                                    |  70%
  |                                                                                                                           
  |==================================================================================                                   |  70%
  |                                                                                                                           
  |===================================================================================                                  |  71%
  |                                                                                                                           
  |====================================================================================                                 |  71%
  |                                                                                                                           
  |====================================================================================                                 |  72%
  |                                                                                                                           
  |=====================================================================================                                |  72%
  |                                                                                                                           
  |=====================================================================================                                |  73%
  |                                                                                                                           
  |======================================================================================                               |  73%
  |                                                                                                                           
  |======================================================================================                               |  74%
  |                                                                                                                           
  |=======================================================================================                              |  74%
  |                                                                                                                           
  |=======================================================================================                              |  75%
  |                                                                                                                           
  |========================================================================================                             |  75%
  |                                                                                                                           
  |========================================================================================                             |  76%
  |                                                                                                                           
  |=========================================================================================                            |  76%
  |                                                                                                                           
  |==========================================================================================                           |  76%
  |                                                                                                                           
  |==========================================================================================                           |  77%
  |                                                                                                                           
  |===========================================================================================                          |  77%
  |                                                                                                                           
  |===========================================================================================                          |  78%
  |                                                                                                                           
  |============================================================================================                         |  78%
  |                                                                                                                           
  |============================================================================================                         |  79%
  |                                                                                                                           
  |=============================================================================================                        |  79%
  |                                                                                                                           
  |=============================================================================================                        |  80%
  |                                                                                                                           
  |==============================================================================================                       |  80%
  |                                                                                                                           
  |==============================================================================================                       |  81%
  |                                                                                                                           
  |===============================================================================================                      |  81%
  |                                                                                                                           
  |===============================================================================================                      |  82%
  |                                                                                                                           
  |================================================================================================                     |  82%
  |                                                                                                                           
  |=================================================================================================                    |  82%
  |                                                                                                                           
  |=================================================================================================                    |  83%
  |                                                                                                                           
  |==================================================================================================                   |  83%
  |                                                                                                                           
  |==================================================================================================                   |  84%
  |                                                                                                                           
  |===================================================================================================                  |  84%
  |                                                                                                                           
  |===================================================================================================                  |  85%
  |                                                                                                                           
  |====================================================================================================                 |  85%
  |                                                                                                                           
  |====================================================================================================                 |  86%
  |                                                                                                                           
  |=====================================================================================================                |  86%
  |                                                                                                                           
  |=====================================================================================================                |  87%
  |                                                                                                                           
  |======================================================================================================               |  87%
  |                                                                                                                           
  |======================================================================================================               |  88%
  |                                                                                                                           
  |=======================================================================================================              |  88%
  |                                                                                                                           
  |========================================================================================================             |  88%
  |                                                                                                                           
  |========================================================================================================             |  89%
  |                                                                                                                           
  |=========================================================================================================            |  89%
  |                                                                                                                           
  |=========================================================================================================            |  90%
  |                                                                                                                           
  |==========================================================================================================           |  90%
  |                                                                                                                           
  |==========================================================================================================           |  91%
  |                                                                                                                           
  |===========================================================================================================          |  91%
  |                                                                                                                           
  |===========================================================================================================          |  92%
  |                                                                                                                           
  |============================================================================================================         |  92%
  |                                                                                                                           
  |============================================================================================================         |  93%
  |                                                                                                                           
  |=============================================================================================================        |  93%
  |                                                                                                                           
  |=============================================================================================================        |  94%
  |                                                                                                                           
  |==============================================================================================================       |  94%
  |                                                                                                                           
  |===============================================================================================================      |  94%
  |                                                                                                                           
  |===============================================================================================================      |  95%
  |                                                                                                                           
  |================================================================================================================     |  95%
  |                                                                                                                           
  |================================================================================================================     |  96%
  |                                                                                                                           
  |=================================================================================================================    |  96%
  |                                                                                                                           
  |=================================================================================================================    |  97%
  |                                                                                                                           
  |==================================================================================================================   |  97%
  |                                                                                                                           
  |==================================================================================================================   |  98%
  |                                                                                                                           
  |===================================================================================================================  |  98%
  |                                                                                                                           
  |===================================================================================================================  |  99%
  |                                                                                                                           
  |==================================================================================================================== |  99%
  |                                                                                                                           
  |==================================================================================================================== | 100%
  |                                                                                                                           
  |=====================================================================================================================| 100%
Centering and scaling data matrix

  |                                                                                                                           
  |                                                                                                                     |   0%
  |                                                                                                                           
  |=============================                                                                                        |  25%
  |                                                                                                                           
  |==========================================================                                                           |  50%
  |                                                                                                                           
  |========================================================================================                             |  75%
  |                                                                                                                           
  |=====================================================================================================================| 100%
Finished calculating residuals for counts
Set default assay to SCT
                                      

5. Perform PCA


Variables_genes <- All_samples_Merged@assays$SCT@var.features

# Exclude genes starting with "HLA-" AND "Xist" AND "TRBV, TRAV"
Variables_genes_after_exclusion <- Variables_genes[!grepl("^HLA-|^XIST|^TRBV|^TRAV", Variables_genes)]


# These are now standard steps in the Seurat workflow for visualization and clustering
All_samples_Merged <- RunPCA(All_samples_Merged,
                        features = Variables_genes_after_exclusion,
                        do.print = TRUE, 
                        pcs.print = 1:5, 
                        genes.print = 15,
                        npcs = 50)

# determine dimensionality of the data
ElbowPlot(All_samples_Merged, ndims = 50)

6. Perform PCA TEST



library(ggplot2)
library(RColorBrewer)  

# Assuming you have 10 different cell lines, generating a color palette with 10 colors
cell_line_colors <- brewer.pal(10, "Set3")

# Assuming All_samples_Merged$cell_line is a factor or character vector containing cell line names
data <- as.data.frame(table(All_samples_Merged$cell_line))
colnames(data) <- c("cell_line", "nUMI")  # Change column name to nUMI

ncells <- ggplot(data, aes(x = cell_line, y = nUMI, fill = cell_line)) + 
  geom_col() +
  theme_classic() +
  geom_text(aes(label = nUMI), 
            position = position_dodge(width = 0.9), 
            vjust = -0.25) +
  scale_fill_manual(values = cell_line_colors) + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        plot.title = element_text(hjust = 0.5)) +  # Adjust the title position
  ggtitle("Filtered cells per sample") +
  xlab("Cell lines") +  # Adjust x-axis label
  ylab("Frequency")    # Adjust y-axis label

print(ncells)




# TEST-1
# given that the output of RunPCA is "pca"
# replace "so" by the name of your seurat object

pct <- All_samples_Merged[["pca"]]@stdev / sum(All_samples_Merged[["pca"]]@stdev) * 100
cumu <- cumsum(pct) # Calculate cumulative percents for each PC
# Determine the difference between variation of PC and subsequent PC
co2 <- sort(which((pct[-length(pct)] - pct[-1]) > 0.1), decreasing = T)[1] + 1
# last point where change of % of variation is more than 0.1%. -> co2
co2
[1] 22
# TEST-2
# get significant PCs
stdv <- All_samples_Merged[["pca"]]@stdev
sum.stdv <- sum(All_samples_Merged[["pca"]]@stdev)
percent.stdv <- (stdv / sum.stdv) * 100
cumulative <- cumsum(percent.stdv)
co1 <- which(cumulative > 90 & percent.stdv < 5)[1]
co2 <- sort(which((percent.stdv[1:length(percent.stdv) - 1] - 
                       percent.stdv[2:length(percent.stdv)]) > 0.1), 
              decreasing = T)[1] + 1
min.pc <- min(co1, co2)
min.pc
[1] 22
# Create a dataframe with values
plot_df <- data.frame(pct = percent.stdv, 
           cumu = cumulative, 
           rank = 1:length(percent.stdv))

# Elbow plot to visualize 
  ggplot(plot_df, aes(cumulative, percent.stdv, label = rank, color = rank > min.pc)) + 
  geom_text() + 
  geom_vline(xintercept = 90, color = "grey") + 
  geom_hline(yintercept = min(percent.stdv[percent.stdv > 5]), color = "grey") +
  theme_bw()

NA
NA
NA

7. Clustering

All_samples_Merged <- FindNeighbors(All_samples_Merged, 
                                dims = 1:22, 
                                verbose = FALSE)

# understanding resolution
All_samples_Merged <- FindClusters(All_samples_Merged, 
                                    resolution = c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7,0.8, 0.9, 1, 1.2, 1.5,2))
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9888
Number of communities: 14
Elapsed time: 21 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9804
Number of communities: 17
Elapsed time: 39 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9723
Number of communities: 18
Elapsed time: 20 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9643
Number of communities: 20
Elapsed time: 21 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9567
Number of communities: 22
Elapsed time: 39 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9497
Number of communities: 25
Elapsed time: 35 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9426
Number of communities: 25
Elapsed time: 21 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9359
Number of communities: 28
Elapsed time: 20 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9296
Number of communities: 29
Elapsed time: 24 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9235
Number of communities: 31
Elapsed time: 23 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9127
Number of communities: 35
Elapsed time: 20 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9001
Number of communities: 41
Elapsed time: 22 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8810
Number of communities: 45
Elapsed time: 20 seconds

# non-linear dimensionality reduction --------------
All_samples_Merged <- RunUMAP(All_samples_Merged, 
                          dims = 1:22,
                          verbose = FALSE)
Avis : The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
This message will be shown once per session
                                  

# note that you can set `label = TRUE` or use the Label Clusters function to help label
# individual clusters
DimPlot(All_samples_Merged,group.by = "cell_line", 
        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 = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.1",
        reduction = "umap",
        label.size = 3,
        repel = T, 
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.2",
        reduction = "umap",
        label.size = 3,
        repel = T, 
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.3",
        reduction = "umap",
        label.size = 3,
        repel = T, 
        label = T, label.box = T)



DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.4", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)



DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.5", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.6", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.7", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.8", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.9", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.1", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.1.2", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.1.5", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.2", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


# Set identity classes to an existing column in meta data
Idents(object = All_samples_Merged) <- "SCT_snn_res.0.7"

cluster_table <- table(Idents(All_samples_Merged))


barplot(cluster_table, main = "Number of Cells in Each Cluster", 
                      xlab = "Cluster", 
                      ylab = "Number of Cells", 
                      col = rainbow(length(cluster_table)))


print(cluster_table)

   0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19 
6391 5923 5827 5582 5516 4948 4627 4054 3329 3235 1978 1878 1364  945  927  822  431  394  316  309 
  20   21   22   23   24 
 252  122   90   60   35 
table(All_samples_Merged$predicted.celltype.l2, All_samples_Merged$SCT_snn_res.0.7)
                   
                       0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15
  ASDC                 0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
  B intermediate       0    0    0    1    0    0    0    1    0    6    0    0  488    1  177   17
  B memory             9    0    0    0    0   80    1   31    0    1  117    4  195    0   69    4
  B naive              0    0    0    0    0    0    0    0    0   13    0    0  499    0  677    0
  CD14 Mono            0    0    0    2    0    0    0    4    0 3034    7    0    0    0    0  758
  CD16 Mono            0    0    0    0    0    0    0    0    0    8    0    0    1    0    0    2
  CD4 CTL              0    0    0    0    0    0    0    0    0    1    0    0    0    0    0    0
  CD4 Naive            0    0    0  518    0    0 1480    0    0    1    0    0    7    0    0    0
  CD4 Proliferating 5449 2849 2462    0 5345 3889    4 3213 2809    0 1318 1464    2    1    0    0
  CD4 TCM            870  267 3322 4201  146  535 1831  109   26   20  462   44   89   11    2   35
  CD4 TEM              0    0    1   61    0    0   16    0    0    0    0    0    0    9    0    0
  CD8 Naive            0    0    0  341    0    0 1002    0    0    2    0    0    2    1    0    1
  CD8 Proliferating    0    0    0    0    0    1    0    0    0    0    1    0    0    0    0    0
  CD8 TCM              0   16    1  225    0    0  144    0    0    0    0    0    2   29    0    0
  CD8 TEM              0    6    1   29    0    3   23    2    0    1    1    0    1  171    0    0
  cDC1                 0    0    0    0    0    4    0    2    0   13    0    0    0    0    0    0
  cDC2                 0    0    0    0    0    3    0    9    0  123   36    0    0    0    0    1
  dnT                  0    0    1   22    0    1   16    3    0    1    3    0    6    0    0    2
  gdT                  0    0    0    1    0    0   14    0    0    0    0    0    0   52    0    0
  HSPC                55    0    0    0    1  203    0  670  483    0    6  365   38    0    0    0
  ILC                  0    0    0    0    0    0    0    0    0    0    0    0    2    3    0    0
  MAIT                 0    0    0    0    0    0    3    0    0    2    0    0    0  220    0    0
  NK                   0    0    0    0    0    0    0    0    0    8    0    0    0  432    1    1
  NK Proliferating     6 2785   38    0   23  227    1   10   11    0   27    1    1    2    0    0
  NK_CD56bright        0    0    0    0    0    0    0    0    0    0    0    0    0   13    0    0
  pDC                  0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
  Plasmablast          0    0    0    0    0    0    0    0    0    0    0    0   18    0    1    0
  Platelet             0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    1
  Treg                 2    0    1  181    1    2   92    0    0    1    0    0   13    0    0    0
                   
                      16   17   18   19   20   21   22   23   24
  ASDC                 0    0    0    0    0    0    0    3    0
  B intermediate       0    0    3    0    0    0    2    0    0
  B memory             2    0    7    0    0    0    3    0    0
  B naive              0    0    0    1    0    2    0    0    0
  CD14 Mono            2    0    0    0    0    4    7    1    4
  CD16 Mono            0    0    0    0    0  115    0    0    0
  CD4 CTL              0   16    0    0    0    0    0    0    0
  CD4 Naive            0    0    0    4   33    0    0    0    0
  CD4 Proliferating   46    0  157    0    3    0    0    0    0
  CD4 TCM            377   33   71  256  169    0    2    0    0
  CD4 TEM              0    7    0    0    0    0    0    0    0
  CD8 Naive            0    0    0   10   14    0    0    0    0
  CD8 Proliferating    0    0    0    0    0    0    0    0    0
  CD8 TCM              0   56    0    2    2    0    0    0    0
  CD8 TEM              0  150    0    0    3    0    0    0    0
  cDC1                 0    0    2    0    0    0   21    0    0
  cDC2                 2    0    1    0    0    1   53    0    0
  dnT                  1    0    3   10   13    0    0    0    0
  gdT                  0   26    0    0    0    0    0    0    0
  HSPC                 0    0   12    0    0    0    1    0    0
  ILC                  0    1    1    0    0    0    0    0    0
  MAIT                 0   14    0    1    2    0    0    0    0
  NK                   0   90    0    0    2    0    0    0    0
  NK Proliferating     0    0   35    0    0    0    0    0    0
  NK_CD56bright        0    1    0    0    2    0    0    0    0
  pDC                  0    0    0    0    0    0    0   56    0
  Plasmablast          0    0    0    0    0    0    0    0    0
  Platelet             0    0    0    0    0    0    0    0   31
  Treg                 1    0   24   25    9    0    1    0    0

8. clusTree

clustree(All_samples_Merged, prefix = "SCT_snn_res.")

9. Azimuth Annotation

# InstallData("pbmcref")
# 
# # The RunAzimuth function can take a Seurat object as input
# All_samples_Merged <- RunAzimuth(All_samples_Merged, reference = "pbmcref")

10. Azimuth Visualization

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.7)
                   
                       0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15
  ASDC                 0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
  B intermediate       0    0    0    1    0    0    0    1    0    6    0    0  488    1  177   17
  B memory             9    0    0    0    0   80    1   31    0    1  117    4  195    0   69    4
  B naive              0    0    0    0    0    0    0    0    0   13    0    0  499    0  677    0
  CD14 Mono            0    0    0    2    0    0    0    4    0 3034    7    0    0    0    0  758
  CD16 Mono            0    0    0    0    0    0    0    0    0    8    0    0    1    0    0    2
  CD4 CTL              0    0    0    0    0    0    0    0    0    1    0    0    0    0    0    0
  CD4 Naive            0    0    0  518    0    0 1480    0    0    1    0    0    7    0    0    0
  CD4 Proliferating 5449 2849 2462    0 5345 3889    4 3213 2809    0 1318 1464    2    1    0    0
  CD4 TCM            870  267 3322 4201  146  535 1831  109   26   20  462   44   89   11    2   35
  CD4 TEM              0    0    1   61    0    0   16    0    0    0    0    0    0    9    0    0
  CD8 Naive            0    0    0  341    0    0 1002    0    0    2    0    0    2    1    0    1
  CD8 Proliferating    0    0    0    0    0    1    0    0    0    0    1    0    0    0    0    0
  CD8 TCM              0   16    1  225    0    0  144    0    0    0    0    0    2   29    0    0
  CD8 TEM              0    6    1   29    0    3   23    2    0    1    1    0    1  171    0    0
  cDC1                 0    0    0    0    0    4    0    2    0   13    0    0    0    0    0    0
  cDC2                 0    0    0    0    0    3    0    9    0  123   36    0    0    0    0    1
  dnT                  0    0    1   22    0    1   16    3    0    1    3    0    6    0    0    2
  gdT                  0    0    0    1    0    0   14    0    0    0    0    0    0   52    0    0
  HSPC                55    0    0    0    1  203    0  670  483    0    6  365   38    0    0    0
  ILC                  0    0    0    0    0    0    0    0    0    0    0    0    2    3    0    0
  MAIT                 0    0    0    0    0    0    3    0    0    2    0    0    0  220    0    0
  NK                   0    0    0    0    0    0    0    0    0    8    0    0    0  432    1    1
  NK Proliferating     6 2785   38    0   23  227    1   10   11    0   27    1    1    2    0    0
  NK_CD56bright        0    0    0    0    0    0    0    0    0    0    0    0    0   13    0    0
  pDC                  0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
  Plasmablast          0    0    0    0    0    0    0    0    0    0    0    0   18    0    1    0
  Platelet             0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    1
  Treg                 2    0    1  181    1    2   92    0    0    1    0    0   13    0    0    0
                   
                      16   17   18   19   20   21   22   23   24
  ASDC                 0    0    0    0    0    0    0    3    0
  B intermediate       0    0    3    0    0    0    2    0    0
  B memory             2    0    7    0    0    0    3    0    0
  B naive              0    0    0    1    0    2    0    0    0
  CD14 Mono            2    0    0    0    0    4    7    1    4
  CD16 Mono            0    0    0    0    0  115    0    0    0
  CD4 CTL              0   16    0    0    0    0    0    0    0
  CD4 Naive            0    0    0    4   33    0    0    0    0
  CD4 Proliferating   46    0  157    0    3    0    0    0    0
  CD4 TCM            377   33   71  256  169    0    2    0    0
  CD4 TEM              0    7    0    0    0    0    0    0    0
  CD8 Naive            0    0    0   10   14    0    0    0    0
  CD8 Proliferating    0    0    0    0    0    0    0    0    0
  CD8 TCM              0   56    0    2    2    0    0    0    0
  CD8 TEM              0  150    0    0    3    0    0    0    0
  cDC1                 0    0    2    0    0    0   21    0    0
  cDC2                 2    0    1    0    0    1   53    0    0
  dnT                  1    0    3   10   13    0    0    0    0
  gdT                  0   26    0    0    0    0    0    0    0
  HSPC                 0    0   12    0    0    0    1    0    0
  ILC                  0    1    1    0    0    0    0    0    0
  MAIT                 0   14    0    1    2    0    0    0    0
  NK                   0   90    0    0    2    0    0    0    0
  NK Proliferating     0    0   35    0    0    0    0    0    0
  NK_CD56bright        0    1    0    0    2    0    0    0    0
  pDC                  0    0    0    0    0    0    0   56    0
  Plasmablast          0    0    0    0    0    0    0    0    0
  Platelet             0    0    0    0    0    0    0    0   31
  Treg                 1    0   24   25    9    0    1    0    0

11.Harmony Integration


# Load required libraries
library(Seurat)
library(harmony)
library(ggplot2)

# Run Harmony, adjusting for batch effect using "cell_line" or another grouping variable
All_samples_Merged <- RunHarmony(
  object = All_samples_Merged,
  group.by.vars = "cell_line",  # Replace with the metadata column specifying batch or cell line
  dims.use = 1:22  # Use the same dimensions as PCA
)
Transposing data matrix
Initializing state using k-means centroids initialization
Avis : Les étapes de transfer (quick-TRANSfer stage) ont dépassé le maximum (= 2967750)Harmony 1/10
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Harmony 2/10
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Harmony 3/10
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Harmony converged after 3 iterations
# Check results in harmony embeddings
harmony_embeddings <- Embeddings(All_samples_Merged, reduction = "harmony")
head(harmony_embeddings)
                        harmony_1 harmony_2  harmony_3  harmony_4  harmony_5  harmony_6 harmony_7
L1_AAACCTGAGGGCTTCC-1 -10.8629626  3.207465 -1.3145755 -3.2640727  5.5317302  0.8690126  6.845638
L1_AAACCTGGTGCAGGTA-1  -3.2767081 -1.660814 -5.6001395 -0.5609763  1.9424545 -0.1080190  8.648479
L1_AAACCTGGTTAAAGTG-1   0.9958851 -2.629010 -7.7564478  1.8588803 -1.8921459 -0.7558585  6.201197
L1_AAACCTGTCAGGTAAA-1   4.5898354  2.383138 -2.7787144 -2.1063674  2.1484430 -0.6989252  1.365241
L1_AAACCTGTCCCTGACT-1  -7.3108755 -1.393795 -0.4187954 -2.9763784  5.8179979  2.2536604  2.363136
L1_AAACCTGTCCTTCAAT-1  -1.0779817 -2.808154 -5.0689509  1.4994879 -0.2027258 -1.0081179  5.961698
                       harmony_8  harmony_9 harmony_10 harmony_11 harmony_12  harmony_13 harmony_14
L1_AAACCTGAGGGCTTCC-1 -0.8266486 -2.4458590 -1.0672647   1.462221   8.250118  1.17188396  0.5380036
L1_AAACCTGGTGCAGGTA-1  0.1794881 -1.2568205 -3.7145233   0.487906   2.920554 -0.65113915 -1.7234926
L1_AAACCTGGTTAAAGTG-1 -1.6250321 -2.7975427 -0.4098235   1.652011   2.610758 -1.12043595  1.7731044
L1_AAACCTGTCAGGTAAA-1 -4.5301335  0.2543480  0.4709229  -1.204895   2.553682 -0.41586300 -0.3951507
L1_AAACCTGTCCCTGACT-1 -1.1431128 -0.9028772 -0.6557325  -0.334779   9.744720  0.96338727 -0.2178267
L1_AAACCTGTCCTTCAAT-1  0.5610424 -3.7019114 -0.7602903   2.576859   2.577055  0.02529423 -0.3916498
                      harmony_15  harmony_16 harmony_17 harmony_18 harmony_19 harmony_20  harmony_21
L1_AAACCTGAGGGCTTCC-1   1.325520 -5.35923094  1.6106387 -0.9035089 -0.8400702  1.7109892  1.56713478
L1_AAACCTGGTGCAGGTA-1  -1.964131 -1.52291036  1.7861328 -2.3776493 -3.3043206 -0.3572049  1.10209730
L1_AAACCTGGTTAAAGTG-1  -5.529980  1.49180610 -0.1611270 -7.0201110 -1.1450631  2.1223418 -4.23455814
L1_AAACCTGTCAGGTAAA-1  -1.805135 -0.01781173  1.7880153 -4.1085864 -2.5440533  0.5916777 -0.09627719
L1_AAACCTGTCCCTGACT-1   1.787782 -3.98025065  0.9645955 -2.3652552 -0.5382344  2.7764434  1.76902979
L1_AAACCTGTCCTTCAAT-1  -3.073813 -0.44688325  3.8089566 -5.1129333 -2.2229396 -0.5014611  1.64225871
                       harmony_22
L1_AAACCTGAGGGCTTCC-1 -1.37667309
L1_AAACCTGGTGCAGGTA-1 -1.02811500
L1_AAACCTGGTTAAAGTG-1 -0.02192944
L1_AAACCTGTCAGGTAAA-1 -0.41341404
L1_AAACCTGTCCCTGACT-1 -1.57427103
L1_AAACCTGTCCTTCAAT-1  0.15474198
# Run UMAP on Harmony embeddings
All_samples_Merged <- RunUMAP(All_samples_Merged, reduction = "harmony", dims = 1:22)
17:36:39 UMAP embedding parameters a = 0.9922 b = 1.112
17:36:39 Read 59355 rows and found 22 numeric columns
17:36:39 Using Annoy for neighbor search, n_neighbors = 30
17:36:39 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
17:36:47 Writing NN index file to temp file /tmp/RtmpAPdONb/file310772380a0b6
17:36:47 Searching Annoy index using 1 thread, search_k = 3000
17:37:14 Annoy recall = 100%
17:37:16 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
17:37:20 Initializing from normalized Laplacian + noise (using RSpectra)
17:37:24 Commencing optimization for 200 epochs, with 2555746 positive edges
Using method 'umap'
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
17:38:02 Optimization finished
# Optionally, find neighbors and clusters (if you plan to do clustering analysis)
All_samples_Merged <- FindNeighbors(All_samples_Merged, reduction = "harmony", dims = 1:22)
Computing nearest neighbor graph
Computing SNN
All_samples_Merged <- FindClusters(All_samples_Merged, resolution = 0.5)  # Adjust resolution as needed
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1779238

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9012
Number of communities: 17
Elapsed time: 27 seconds
# Visualize UMAP
DimPlot(All_samples_Merged, reduction = "umap", group.by = "cell_line", label = TRUE, pt.size = 0.5) + 
    ggtitle("UMAP of Harmony-Integrated Data")



# Visualize UMAP with batch/cell line information
DimPlot(All_samples_Merged, reduction = "umap", group.by = "cell_line", label = TRUE, pt.size = 0.5) + 
    ggtitle("UMAP - Colored by Cell Line (After Harmony Integration)")



# Visualize UMAP with clusters
DimPlot(All_samples_Merged, reduction = "umap", group.by = "seurat_clusters", label = TRUE, pt.size = 0.5) + 
    ggtitle("UMAP - Clustered Data (After Harmony Integration)")


# Visualize specific cell types or other metadata
DimPlot(All_samples_Merged, reduction = "umap", group.by = "predicted.celltype.l2", label = TRUE, pt.size = 0.5) + 
    ggtitle("UMAP - Cell Types After Harmony Integration")

NA
NA

12.Save the Seurat object as an Robj file


save(All_samples_Merged, file = "/home/nabbasi/isilon/0-IMP-OBJECTS/All_Samples_Merged_with_10x_Rserver.robj")
LS0tCnRpdGxlOiAiTWVyZ2VkIEFsbCBzYW1wbGVzIHdpdGggUEJNQ18xMHggYW5kIFNDVCBhbmFseXNpcyBvbiBhbm5vdGF0ZWQgT2JqZWN0LVJzZXJ2ZXJfcmVtb3ZlX2JhdGNoX2VmZmVjdCIKYXV0aG9yOiBOYXNpciBNYWhtb29kIEFiYmFzaQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICAjcm1kZm9ybWF0czo6cmVhZHRoZWRvd24KICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIHRvY19jb2xsYXBzZWQ6IHRydWUKLS0tCgojIDEuIGxvYWQgbGlicmFyaWVzCmBgYHtyIHNldHVwLCBlY2hvPUZBTFNFfQoKbGlicmFyeShTZXVyYXQpCmxpYnJhcnkoU2V1cmF0T2JqZWN0KQpsaWJyYXJ5KFNldXJhdERhdGEpCmxpYnJhcnkocGF0Y2h3b3JrKQoKbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShSQ29sb3JCcmV3ZXIpCmxpYnJhcnkobWFncml0dHIpCmxpYnJhcnkoZGJwbHlyKQpsaWJyYXJ5KHJtYXJrZG93bikKbGlicmFyeShrbml0cikKbGlicmFyeSh0aW55dGV4KQojQXppbXV0aCBBbm5vdGF0aW9uIGxpYnJhcmllcwpsaWJyYXJ5KEF6aW11dGgpCiNQcm9qZWNUaWxzIEFubm90YXRpb24gbGlicmFyaWVzCmxpYnJhcnkoU1RBQ0FTKQpsaWJyYXJ5KFByb2plY1RJTHMpCiNzaW5nbGVSIEFubm90YXRpb24gbGlicmFyaWVzCmxpYnJhcnkoU2luZ2xlUikKbGlicmFyeShjZWxsZGV4KQpsaWJyYXJ5KFNpbmdsZUNlbGxFeHBlcmltZW50KQoKbGlicmFyeShjbHVzdHJlZSkKCgpgYGAKCgojIDIuIExvYWQgU2V1cmF0IE9iamVjdCAKYGBge3IgbG9hZF9zZXVyYXR9CgojTG9hZCBTZXVyYXQgT2JqZWN0IG1lcmdlZCBmcm9tIGNlbGwgbGluZXMgYW5kIGEgY29udHJvbChQQk1DKSBhZnRlciBmaWx0cmF0aW9uCmxvYWQoIi9ob21lL25hYmJhc2kvaXNpbG9uLzAtSU1QLU9CSkVDVFMvQWxsX1NhbXBsZXNfTWVyZ2VkX3dpdGhfMTB4X0F6aXRtdXRoX0Fubm90YXRlZC5yb2JqIikKCkFsbF9zYW1wbGVzX01lcmdlZAogCmBgYAojIyBBemltdXRoIEFubm90YXRpb24KYGBge3IgYXppbXV0aF9Bbm5vdGF0aW9uMSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CiMgSW5zdGFsbERhdGEoInBibWNyZWYiKQojIAojICMgVGhlIFJ1bkF6aW11dGggZnVuY3Rpb24gY2FuIHRha2UgYSBTZXVyYXQgb2JqZWN0IGFzIGlucHV0CiMgQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIFJ1bkF6aW11dGgoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWZlcmVuY2UgPSAicGJtY3JlZiIpCgpgYGAKCiMgMy4gUUMKYGBge3IgUUMsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQoKIyBSZW1vdmUgdGhlIHBlcmNlbnQubWl0byBjb2x1bW4KQWxsX3NhbXBsZXNfTWVyZ2VkJHBlcmNlbnQubWl0byA8LSBOVUxMCgoKIyBTZXQgaWRlbnRpdHkgY2xhc3NlcyB0byBhbiBleGlzdGluZyBjb2x1bW4gaW4gbWV0YSBkYXRhCklkZW50cyhvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWQpIDwtICJjZWxsX2xpbmUiCgpBbGxfc2FtcGxlc19NZXJnZWRbWyJwZXJjZW50LnJiIl1dIDwtIFBlcmNlbnRhZ2VGZWF0dXJlU2V0KEFsbF9zYW1wbGVzX01lcmdlZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9ICJeUlBbU0xdIikKIyBDb252ZXJ0ICdwZXJjZW50Lm10JyB0byBudW1lcmljLCByZXBsYWNpbmcgIk5hTiIgd2l0aCAwCkFsbF9zYW1wbGVzX01lcmdlZCRwZXJjZW50LnJiIDwtIHJlcGxhY2UoYXMubnVtZXJpYyhBbGxfc2FtcGxlc19NZXJnZWQkcGVyY2VudC5yYiksIGlzLm5hKEFsbF9zYW1wbGVzX01lcmdlZCRwZXJjZW50LnJiKSwgMCkKCgoKIyBUaGUgW1sgb3BlcmF0b3IgY2FuIGFkZCBjb2x1bW5zIHRvIG9iamVjdCBtZXRhZGF0YS4gVGhpcyBpcyBhIGdyZWF0IHBsYWNlIHRvIHN0YXNoIFFDIHN0YXRzCkFsbF9zYW1wbGVzX01lcmdlZFtbInBlcmNlbnQubXQiXV0gPC0gUGVyY2VudGFnZUZlYXR1cmVTZXQoQWxsX3NhbXBsZXNfTWVyZ2VkLCBwYXR0ZXJuID0gIl5NVC0iKQoKIyBDb252ZXJ0ICdwZXJjZW50Lm10JyB0byBudW1lcmljLCByZXBsYWNpbmcgIk5hTiIgd2l0aCAwCkFsbF9zYW1wbGVzX01lcmdlZCRwZXJjZW50Lm10IDwtIHJlcGxhY2UoYXMubnVtZXJpYyhBbGxfc2FtcGxlc19NZXJnZWQkcGVyY2VudC5tdCksIGlzLm5hKEFsbF9zYW1wbGVzX01lcmdlZCRwZXJjZW50Lm10KSwgMCkKCgoKCgpWbG5QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZmVhdHVyZXMgPSBjKCJuRmVhdHVyZV9STkEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibkNvdW50X1JOQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJjZW50Lm10IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyY2VudC5yYiIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA0LCBwdC5zaXplID0gMC4xKSAmIAogICAgICAgICAgICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCkpCgpGZWF0dXJlU2NhdHRlcihBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmUxID0gInBlcmNlbnQubXQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUyID0gInBlcmNlbnQucmIiKQoKVmxuUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmVzID0gYygibkZlYXR1cmVfUk5BIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuQ291bnRfUk5BIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJjZW50Lm10IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAzKQoKRmVhdHVyZVNjYXR0ZXIoQWxsX3NhbXBsZXNfTWVyZ2VkLCAKICAgICAgICAgICAgICAgZmVhdHVyZTEgPSAicGVyY2VudC5tdCIsIAogICAgICAgICAgICAgICBmZWF0dXJlMiA9ICJwZXJjZW50LnJiIikgKwogICAgICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICdsbScpCgpGZWF0dXJlU2NhdHRlcihBbGxfc2FtcGxlc19NZXJnZWQsIAogICAgICAgICAgICAgICBmZWF0dXJlMSA9ICJuQ291bnRfUk5BIiwgCiAgICAgICAgICAgICAgIGZlYXR1cmUyID0gIm5GZWF0dXJlX1JOQSIpICsKICAgICAgICBnZW9tX3Ntb290aChtZXRob2QgPSAnbG0nKQoKYGBgCgojI0ZlYXR1cmVTY2F0dGVyIGlzIHR5cGljYWxseSB1c2VkIHRvIHZpc3VhbGl6ZSBmZWF0dXJlLWZlYXR1cmUgcmVsYXRpb25zaGlwcwojI2ZvciBhbnl0aGluZyBjYWxjdWxhdGVkIGJ5IHRoZSBvYmplY3QsIAojI2kuZS4gY29sdW1ucyBpbiBvYmplY3QgbWV0YWRhdGEsIFBDIHNjb3JlcyBldGMuCgpgYGB7ciBGQywgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgpGZWF0dXJlU2NhdHRlcihBbGxfc2FtcGxlc19NZXJnZWQsIAogICAgICAgICAgICAgICBmZWF0dXJlMSA9ICJuQ291bnRfUk5BIiwgCiAgICAgICAgICAgICAgIGZlYXR1cmUyID0gInBlcmNlbnQubXQiKSsKICBnZW9tX3Ntb290aChtZXRob2QgPSAnbG0nKQoKRmVhdHVyZVNjYXR0ZXIoQWxsX3NhbXBsZXNfTWVyZ2VkLCAKICAgICAgICAgICAgICAgZmVhdHVyZTEgPSAibkNvdW50X1JOQSIsIAogICAgICAgICAgICAgICBmZWF0dXJlMiA9ICJuRmVhdHVyZV9STkEiKSsKICBnZW9tX3Ntb290aChtZXRob2QgPSAnbG0nKQoKYGBgCgoKIyMgQXNzaWduIENlbGwtQ3ljbGUgU2NvcmVzCmBgYHtyIFJlZ3Jlc3MsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQpvcHRpb25zKGZ1dHVyZS5nbG9iYWxzLm1heFNpemUgPSA4MDAwICogMTAyNF4yKSAgIyBTZXQgdG8gODAwMCBNaUIgKGFib3V0IDggR0IpCgpBbGxfc2FtcGxlc19NZXJnZWQgPC0gU0NUcmFuc2Zvcm0oQWxsX3NhbXBsZXNfTWVyZ2VkLCBkby5zY2FsZT1GQUxTRSwgZG8uY2VudGVyPUZBTFNFKQoKCiMgQSBsaXN0IG9mIGNlbGwgY3ljbGUgbWFya2VycywgZnJvbSBUaXJvc2ggZXQgYWwsIDIwMTUsIGlzIGxvYWRlZCB3aXRoIFNldXJhdC4gIFdlIGNhbgojIHNlZ3JlZ2F0ZSB0aGlzIGxpc3QgaW50byBtYXJrZXJzIG9mIEcyL00gcGhhc2UgYW5kIG1hcmtlcnMgb2YgUyBwaGFzZQpzLmdlbmVzIDwtIGNjLmdlbmVzJHMuZ2VuZXMKZzJtLmdlbmVzIDwtIGNjLmdlbmVzJGcybS5nZW5lcwoKCkFsbF9zYW1wbGVzX01lcmdlZCA8LSBDZWxsQ3ljbGVTY29yaW5nKEFsbF9zYW1wbGVzX01lcmdlZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuZmVhdHVyZXMgPSBzLmdlbmVzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzJtLmZlYXR1cmVzID0gZzJtLmdlbmVzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmlkZW50ID0gVFJVRSkKCkRlZmF1bHRBc3NheShBbGxfc2FtcGxlc19NZXJnZWQpIDwtICJSTkEiCkFsbF9zYW1wbGVzX01lcmdlZCRDQy5EaWZmZXJlbmNlIDwtIEFsbF9zYW1wbGVzX01lcmdlZCRTLlNjb3JlIC0gQWxsX3NhbXBsZXNfTWVyZ2VkJEcyTS5TY29yZQoKYGBgCgoKIyA0LiBOb3JtYWxpemUgZGF0YQpgYGB7ciBOb3JtYWxpemUsIGluY2x1ZGU9VFJVRX0KRGVmYXVsdEFzc2F5KEFsbF9zYW1wbGVzX01lcmdlZCkgPC0gIlJOQSIKCiMgQXBwbHkgU0NUcmFuc2Zvcm0KQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIFNDVHJhbnNmb3JtKEFsbF9zYW1wbGVzX01lcmdlZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzLnRvLnJlZ3Jlc3MgPSBjKCJwZXJjZW50LnJiIiwicGVyY2VudC5tdCIsICJDQy5EaWZmZXJlbmNlIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8uc2NhbGU9VFJVRSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkby5jZW50ZXI9VFJVRSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlID0gVFJVRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKYGBgCgoKIyA1LiBQZXJmb3JtIFBDQQpgYGB7ciBQQ0EsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQoKVmFyaWFibGVzX2dlbmVzIDwtIEFsbF9zYW1wbGVzX01lcmdlZEBhc3NheXMkU0NUQHZhci5mZWF0dXJlcwoKIyBFeGNsdWRlIGdlbmVzIHN0YXJ0aW5nIHdpdGggIkhMQS0iIEFORCAiWGlzdCIgQU5EICJUUkJWLCBUUkFWIgpWYXJpYWJsZXNfZ2VuZXNfYWZ0ZXJfZXhjbHVzaW9uIDwtIFZhcmlhYmxlc19nZW5lc1shZ3JlcGwoIl5ITEEtfF5YSVNUfF5UUkJWfF5UUkFWIiwgVmFyaWFibGVzX2dlbmVzKV0KCgojIFRoZXNlIGFyZSBub3cgc3RhbmRhcmQgc3RlcHMgaW4gdGhlIFNldXJhdCB3b3JrZmxvdyBmb3IgdmlzdWFsaXphdGlvbiBhbmQgY2x1c3RlcmluZwpBbGxfc2FtcGxlc19NZXJnZWQgPC0gUnVuUENBKEFsbF9zYW1wbGVzX01lcmdlZCwKICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgPSBWYXJpYWJsZXNfZ2VuZXNfYWZ0ZXJfZXhjbHVzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICBkby5wcmludCA9IFRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgICBwY3MucHJpbnQgPSAxOjUsIAogICAgICAgICAgICAgICAgICAgICAgICBnZW5lcy5wcmludCA9IDE1LAogICAgICAgICAgICAgICAgICAgICAgICBucGNzID0gNTApCgojIGRldGVybWluZSBkaW1lbnNpb25hbGl0eSBvZiB0aGUgZGF0YQpFbGJvd1Bsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCBuZGltcyA9IDUwKQoKCmBgYAoKIyA2LiBQZXJmb3JtIFBDQSBURVNUCmBgYHtyIFBDQS1URVNULCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KCgpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoUkNvbG9yQnJld2VyKSAgCgojIEFzc3VtaW5nIHlvdSBoYXZlIDEwIGRpZmZlcmVudCBjZWxsIGxpbmVzLCBnZW5lcmF0aW5nIGEgY29sb3IgcGFsZXR0ZSB3aXRoIDEwIGNvbG9ycwpjZWxsX2xpbmVfY29sb3JzIDwtIGJyZXdlci5wYWwoMTAsICJTZXQzIikKCiMgQXNzdW1pbmcgQWxsX3NhbXBsZXNfTWVyZ2VkJGNlbGxfbGluZSBpcyBhIGZhY3RvciBvciBjaGFyYWN0ZXIgdmVjdG9yIGNvbnRhaW5pbmcgY2VsbCBsaW5lIG5hbWVzCmRhdGEgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShBbGxfc2FtcGxlc19NZXJnZWQkY2VsbF9saW5lKSkKY29sbmFtZXMoZGF0YSkgPC0gYygiY2VsbF9saW5lIiwgIm5VTUkiKSAgIyBDaGFuZ2UgY29sdW1uIG5hbWUgdG8gblVNSQoKbmNlbGxzIDwtIGdncGxvdChkYXRhLCBhZXMoeCA9IGNlbGxfbGluZSwgeSA9IG5VTUksIGZpbGwgPSBjZWxsX2xpbmUpKSArIAogIGdlb21fY29sKCkgKwogIHRoZW1lX2NsYXNzaWMoKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IG5VTUkpLCAKICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSksIAogICAgICAgICAgICB2anVzdCA9IC0wLjI1KSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY2VsbF9saW5lX2NvbG9ycykgKyAKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArICAjIEFkanVzdCB0aGUgdGl0bGUgcG9zaXRpb24KICBnZ3RpdGxlKCJGaWx0ZXJlZCBjZWxscyBwZXIgc2FtcGxlIikgKwogIHhsYWIoIkNlbGwgbGluZXMiKSArICAjIEFkanVzdCB4LWF4aXMgbGFiZWwKICB5bGFiKCJGcmVxdWVuY3kiKSAgICAjIEFkanVzdCB5LWF4aXMgbGFiZWwKCnByaW50KG5jZWxscykKCgoKIyBURVNULTEKIyBnaXZlbiB0aGF0IHRoZSBvdXRwdXQgb2YgUnVuUENBIGlzICJwY2EiCiMgcmVwbGFjZSAic28iIGJ5IHRoZSBuYW1lIG9mIHlvdXIgc2V1cmF0IG9iamVjdAoKcGN0IDwtIEFsbF9zYW1wbGVzX01lcmdlZFtbInBjYSJdXUBzdGRldiAvIHN1bShBbGxfc2FtcGxlc19NZXJnZWRbWyJwY2EiXV1Ac3RkZXYpICogMTAwCmN1bXUgPC0gY3Vtc3VtKHBjdCkgIyBDYWxjdWxhdGUgY3VtdWxhdGl2ZSBwZXJjZW50cyBmb3IgZWFjaCBQQwojIERldGVybWluZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHZhcmlhdGlvbiBvZiBQQyBhbmQgc3Vic2VxdWVudCBQQwpjbzIgPC0gc29ydCh3aGljaCgocGN0Wy1sZW5ndGgocGN0KV0gLSBwY3RbLTFdKSA+IDAuMSksIGRlY3JlYXNpbmcgPSBUKVsxXSArIDEKIyBsYXN0IHBvaW50IHdoZXJlIGNoYW5nZSBvZiAlIG9mIHZhcmlhdGlvbiBpcyBtb3JlIHRoYW4gMC4xJS4gLT4gY28yCmNvMgoKIyBURVNULTIKIyBnZXQgc2lnbmlmaWNhbnQgUENzCnN0ZHYgPC0gQWxsX3NhbXBsZXNfTWVyZ2VkW1sicGNhIl1dQHN0ZGV2CnN1bS5zdGR2IDwtIHN1bShBbGxfc2FtcGxlc19NZXJnZWRbWyJwY2EiXV1Ac3RkZXYpCnBlcmNlbnQuc3RkdiA8LSAoc3RkdiAvIHN1bS5zdGR2KSAqIDEwMApjdW11bGF0aXZlIDwtIGN1bXN1bShwZXJjZW50LnN0ZHYpCmNvMSA8LSB3aGljaChjdW11bGF0aXZlID4gOTAgJiBwZXJjZW50LnN0ZHYgPCA1KVsxXQpjbzIgPC0gc29ydCh3aGljaCgocGVyY2VudC5zdGR2WzE6bGVuZ3RoKHBlcmNlbnQuc3RkdikgLSAxXSAtIAogICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnQuc3RkdlsyOmxlbmd0aChwZXJjZW50LnN0ZHYpXSkgPiAwLjEpLCAKICAgICAgICAgICAgICBkZWNyZWFzaW5nID0gVClbMV0gKyAxCm1pbi5wYyA8LSBtaW4oY28xLCBjbzIpCm1pbi5wYwoKIyBDcmVhdGUgYSBkYXRhZnJhbWUgd2l0aCB2YWx1ZXMKcGxvdF9kZiA8LSBkYXRhLmZyYW1lKHBjdCA9IHBlcmNlbnQuc3RkdiwgCiAgICAgICAgICAgY3VtdSA9IGN1bXVsYXRpdmUsIAogICAgICAgICAgIHJhbmsgPSAxOmxlbmd0aChwZXJjZW50LnN0ZHYpKQoKIyBFbGJvdyBwbG90IHRvIHZpc3VhbGl6ZSAKICBnZ3Bsb3QocGxvdF9kZiwgYWVzKGN1bXVsYXRpdmUsIHBlcmNlbnQuc3RkdiwgbGFiZWwgPSByYW5rLCBjb2xvciA9IHJhbmsgPiBtaW4ucGMpKSArIAogIGdlb21fdGV4dCgpICsgCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gOTAsIGNvbG9yID0gImdyZXkiKSArIAogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IG1pbihwZXJjZW50LnN0ZHZbcGVyY2VudC5zdGR2ID4gNV0pLCBjb2xvciA9ICJncmV5IikgKwogIHRoZW1lX2J3KCkKCiAgCgpgYGAKCiMgNy4gQ2x1c3RlcmluZwpgYGB7ciBDMSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CkFsbF9zYW1wbGVzX01lcmdlZCA8LSBGaW5kTmVpZ2hib3JzKEFsbF9zYW1wbGVzX01lcmdlZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltcyA9IDE6MjIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2UgPSBGQUxTRSkKCiMgdW5kZXJzdGFuZGluZyByZXNvbHV0aW9uCkFsbF9zYW1wbGVzX01lcmdlZCA8LSBGaW5kQ2x1c3RlcnMoQWxsX3NhbXBsZXNfTWVyZ2VkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbiA9IGMoMC4xLCAwLjIsIDAuMywgMC40LCAwLjUsIDAuNiwgMC43LDAuOCwgMC45LCAxLCAxLjIsIDEuNSwyKSkKCgpgYGAKCgpgYGB7ciBDMiwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgojIG5vbi1saW5lYXIgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uIC0tLS0tLS0tLS0tLS0tCkFsbF9zYW1wbGVzX01lcmdlZCA8LSBSdW5VTUFQKEFsbF9zYW1wbGVzX01lcmdlZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGltcyA9IDE6MjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZSA9IEZBTFNFKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgojIG5vdGUgdGhhdCB5b3UgY2FuIHNldCBgbGFiZWwgPSBUUlVFYCBvciB1c2UgdGhlIExhYmVsIENsdXN0ZXJzIGZ1bmN0aW9uIHRvIGhlbHAgbGFiZWwKIyBpbmRpdmlkdWFsIGNsdXN0ZXJzCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLGdyb3VwLmJ5ID0gImNlbGxfbGluZSIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQoKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwyIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjAuMSIsCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwgCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4wLjIiLAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsIAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsCiAgICAgICAgZ3JvdXAuYnkgPSAiU0NUX3Nubl9yZXMuMC4zIiwKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULCAKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgoKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsCiAgICAgICAgZ3JvdXAuYnkgPSAiU0NUX3Nubl9yZXMuMC40IiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgoKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsCiAgICAgICAgZ3JvdXAuYnkgPSAiU0NUX3Nubl9yZXMuMC41IiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4wLjYiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjAuNyIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQoKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsCiAgICAgICAgZ3JvdXAuYnkgPSAiU0NUX3Nubl9yZXMuMC44IiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjAuOSIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4xIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjEuMiIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4xLjUiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjIiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKCiMgU2V0IGlkZW50aXR5IGNsYXNzZXMgdG8gYW4gZXhpc3RpbmcgY29sdW1uIGluIG1ldGEgZGF0YQpJZGVudHMob2JqZWN0ID0gQWxsX3NhbXBsZXNfTWVyZ2VkKSA8LSAiU0NUX3Nubl9yZXMuMC43IgoKY2x1c3Rlcl90YWJsZSA8LSB0YWJsZShJZGVudHMoQWxsX3NhbXBsZXNfTWVyZ2VkKSkKCgpiYXJwbG90KGNsdXN0ZXJfdGFibGUsIG1haW4gPSAiTnVtYmVyIG9mIENlbGxzIGluIEVhY2ggQ2x1c3RlciIsIAogICAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICJDbHVzdGVyIiwgCiAgICAgICAgICAgICAgICAgICAgICB5bGFiID0gIk51bWJlciBvZiBDZWxscyIsIAogICAgICAgICAgICAgICAgICAgICAgY29sID0gcmFpbmJvdyhsZW5ndGgoY2x1c3Rlcl90YWJsZSkpKQoKcHJpbnQoY2x1c3Rlcl90YWJsZSkKCnRhYmxlKEFsbF9zYW1wbGVzX01lcmdlZCRwcmVkaWN0ZWQuY2VsbHR5cGUubDIsIEFsbF9zYW1wbGVzX01lcmdlZCRTQ1Rfc25uX3Jlcy4wLjcpCmBgYAoKIyA4LiBjbHVzVHJlZQpgYGB7ciBjbHVzVHJlZSwgZmlnLmhlaWdodD0xMiwgZmlnLndpZHRoPTEwfQpjbHVzdHJlZShBbGxfc2FtcGxlc19NZXJnZWQsIHByZWZpeCA9ICJTQ1Rfc25uX3Jlcy4iKQpgYGAKCiMgOS4gQXppbXV0aCBBbm5vdGF0aW9uCmBgYHtyIGF6aW11dGhfQW5ub3RhdGlvbjIsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQojIEluc3RhbGxEYXRhKCJwYm1jcmVmIikKIyAKIyAjIFRoZSBSdW5BemltdXRoIGZ1bmN0aW9uIGNhbiB0YWtlIGEgU2V1cmF0IG9iamVjdCBhcyBpbnB1dAojIEFsbF9zYW1wbGVzX01lcmdlZCA8LSBSdW5BemltdXRoKEFsbF9zYW1wbGVzX01lcmdlZCwgcmVmZXJlbmNlID0gInBibWNyZWYiKQoKYGBgCgoKCiMgMTAuIEF6aW11dGggVmlzdWFsaXphdGlvbgpgYGB7ciBhemltdXRoX1Zpc3VhbGl6YXRpb24sIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwxIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwxIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IEYpCgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwyIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwyIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IEYpCgoKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQoKCgp0YWJsZShBbGxfc2FtcGxlc19NZXJnZWQkcHJlZGljdGVkLmNlbGx0eXBlLmwyLCBBbGxfc2FtcGxlc19NZXJnZWQkU0NUX3Nubl9yZXMuMC43KQpgYGAKCiMgMTEuSGFybW9ueSBJbnRlZ3JhdGlvbgpgYGB7ciBoYXJtb255LCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KCiMgTG9hZCByZXF1aXJlZCBsaWJyYXJpZXMKbGlicmFyeShTZXVyYXQpCmxpYnJhcnkoaGFybW9ueSkKbGlicmFyeShnZ3Bsb3QyKQoKIyBSdW4gSGFybW9ueSwgYWRqdXN0aW5nIGZvciBiYXRjaCBlZmZlY3QgdXNpbmcgImNlbGxfbGluZSIgb3IgYW5vdGhlciBncm91cGluZyB2YXJpYWJsZQpBbGxfc2FtcGxlc19NZXJnZWQgPC0gUnVuSGFybW9ueSgKICBvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWQsCiAgZ3JvdXAuYnkudmFycyA9ICJjZWxsX2xpbmUiLCAgIyBSZXBsYWNlIHdpdGggdGhlIG1ldGFkYXRhIGNvbHVtbiBzcGVjaWZ5aW5nIGJhdGNoIG9yIGNlbGwgbGluZQogIGRpbXMudXNlID0gMToyMiAgIyBVc2UgdGhlIHNhbWUgZGltZW5zaW9ucyBhcyBQQ0EKKQoKIyBDaGVjayByZXN1bHRzIGluIGhhcm1vbnkgZW1iZWRkaW5ncwpoYXJtb255X2VtYmVkZGluZ3MgPC0gRW1iZWRkaW5ncyhBbGxfc2FtcGxlc19NZXJnZWQsIHJlZHVjdGlvbiA9ICJoYXJtb255IikKaGVhZChoYXJtb255X2VtYmVkZGluZ3MpCgoKIyBSdW4gVU1BUCBvbiBIYXJtb255IGVtYmVkZGluZ3MKQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIFJ1blVNQVAoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAiaGFybW9ueSIsIGRpbXMgPSAxOjIyKQoKIyBPcHRpb25hbGx5LCBmaW5kIG5laWdoYm9ycyBhbmQgY2x1c3RlcnMgKGlmIHlvdSBwbGFuIHRvIGRvIGNsdXN0ZXJpbmcgYW5hbHlzaXMpCkFsbF9zYW1wbGVzX01lcmdlZCA8LSBGaW5kTmVpZ2hib3JzKEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uID0gImhhcm1vbnkiLCBkaW1zID0gMToyMikKQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIEZpbmRDbHVzdGVycyhBbGxfc2FtcGxlc19NZXJnZWQsIHJlc29sdXRpb24gPSAwLjUpICAjIEFkanVzdCByZXNvbHV0aW9uIGFzIG5lZWRlZAoKIyBWaXN1YWxpemUgVU1BUApEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJjZWxsX2xpbmUiLCBsYWJlbCA9IFRSVUUsIHB0LnNpemUgPSAwLjUpICsgCiAgICBnZ3RpdGxlKCJVTUFQIG9mIEhhcm1vbnktSW50ZWdyYXRlZCBEYXRhIikKCgojIFZpc3VhbGl6ZSBVTUFQIHdpdGggYmF0Y2gvY2VsbCBsaW5lIGluZm9ybWF0aW9uCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gImNlbGxfbGluZSIsIGxhYmVsID0gVFJVRSwgcHQuc2l6ZSA9IDAuNSkgKyAKICAgIGdndGl0bGUoIlVNQVAgLSBDb2xvcmVkIGJ5IENlbGwgTGluZSAoQWZ0ZXIgSGFybW9ueSBJbnRlZ3JhdGlvbikiKQoKCiMgVmlzdWFsaXplIFVNQVAgd2l0aCBjbHVzdGVycwpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJzZXVyYXRfY2x1c3RlcnMiLCBsYWJlbCA9IFRSVUUsIHB0LnNpemUgPSAwLjUpICsgCiAgICBnZ3RpdGxlKCJVTUFQIC0gQ2x1c3RlcmVkIERhdGEgKEFmdGVyIEhhcm1vbnkgSW50ZWdyYXRpb24pIikKCiMgVmlzdWFsaXplIHNwZWNpZmljIGNlbGwgdHlwZXMgb3Igb3RoZXIgbWV0YWRhdGEKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwyIiwgbGFiZWwgPSBUUlVFLCBwdC5zaXplID0gMC41KSArIAogICAgZ2d0aXRsZSgiVU1BUCAtIENlbGwgVHlwZXMgQWZ0ZXIgSGFybW9ueSBJbnRlZ3JhdGlvbiIpCgoKYGBgCgojIDEyLlNhdmUgdGhlIFNldXJhdCBvYmplY3QgYXMgYW4gUm9iaiBmaWxlCmBgYHtyIHNhdmVST0JKLCBlY2hvPVRSVUV9CgpzYXZlKEFsbF9zYW1wbGVzX01lcmdlZCwgZmlsZSA9ICIvaG9tZS9uYWJiYXNpL2lzaWxvbi8wLUlNUC1PQkpFQ1RTL0FsbF9TYW1wbGVzX01lcmdlZF93aXRoXzEweF9Sc2VydmVyLnJvYmoiKQoKCmBgYAoKCgoKCgoK