1 Low and high cell number simulated from a E17.5 neural cortex dataset (Drop-seq) and hippocampus P0 dataset (10X)

Percentage of a < 0 :

R version 4.0.4 (2021-02-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.5 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/libopenblasp-r0.2.20.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ggplot2_3.3.3      data.table_1.13.6  latex2exp_0.4.0    matrixStats_0.58.0 stringr_1.4.0     
[6] scales_1.1.1       COTAN_0.1.0       

loaded via a namespace (and not attached):
 [1] ggrepel_0.9.1        Rcpp_1.0.6           lattice_0.20-41      circlize_0.4.12      tidyr_1.1.2         
 [6] png_0.1-7            assertthat_0.2.1     digest_0.6.27        R6_2.5.0             stats4_4.0.4        
[11] evaluate_0.14        pillar_1.4.7         basilisk_1.2.1       GlobalOptions_0.1.2  rlang_0.4.10        
[16] jquerylib_0.1.3      R.oo_1.24.0          S4Vectors_0.28.1     R.utils_2.10.1       GetoptLong_1.0.5    
[21] Matrix_1.3-2         reticulate_1.18      rmarkdown_2.7        labeling_0.4.2       munsell_0.5.0       
[26] compiler_4.0.4       xfun_0.20            pkgconfig_2.0.3      BiocGenerics_0.36.0  shape_1.4.5         
[31] htmltools_0.5.1.1    tidyselect_1.1.0     tibble_3.0.6         IRanges_2.24.1       withr_2.4.1         
[36] crayon_1.4.0         dplyr_1.0.4          R.methodsS3_1.8.1    rappdirs_0.3.3       basilisk.utils_1.2.2
[41] grid_4.0.4           jsonlite_1.7.2       gtable_0.3.0         lifecycle_0.2.0      DBI_1.1.1           
[46] magrittr_2.0.1       stringi_1.5.3        farver_2.0.3         bslib_0.2.4          ellipsis_0.3.1      
[51] filelock_1.0.2       generics_0.1.0       vctrs_0.3.6          rjson_0.2.20         RColorBrewer_1.1-2  
[56] tools_4.0.4          Cairo_1.5-12.2       glue_1.4.2           purrr_0.3.4          parallel_4.0.4      
[61] yaml_2.2.1           clue_0.3-58          colorspace_2.0-0     cluster_2.1.1        ComplexHeatmap_2.6.2
[66] knitr_1.31           sass_0.3.1          
LS0tCnRpdGxlOiAiU3ludGhldGljIGRhdGFzZXQgYW5hbHlzaXMiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgY29sbGFwc2VkOiBubwogICAgY3NzOiBodG1sLW1kLTAxLmNzcwogICAgZmlnX2NhcHRpb246IHllcwogICAgaGlnaGxpZ2h0OiBoYWRkb2NrCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdGhlbWU6IHNwYWNlbGFiCiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OiB5ZXMKICBodG1sX25vdGVib29rOgogICAgY29sbGFwc2VkOiBubwogICAgY3NzOiBodG1sLW1kLTAxLmNzcwogICAgZmlnX2NhcHRpb246IHllcwogICAgaGlnaGxpZ2h0OiBoYWRkb2NrCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdGhlbWU6IHNwYWNlbGFiCiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OiB5ZXMKLS0tCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBjb2xsYXBzZSA9IFRSVUUsCiAgY29tbWVudCA9ICIjPiIsCiAgZWNobyA9IFRSVUUsCiAgd2FybmluZyA9IEZBTFNFLAogIHRpZHkgPSBUUlVFLCB0aWR5Lm9wdHM9bGlzdCh3aWR0aC5jdXRvZmY9NDApCikKb3B0aW9ucyhybWFya2Rvd24uaHRtbF92aWduZXR0ZS5jaGVja190aXRsZSA9IEZBTFNFKQpgYGAKIyBMb3cgIGFuZCBoaWdoIGNlbGwgbnVtYmVyIHNpbXVsYXRlZCBmcm9tIGEgRTE3LjUgbmV1cmFsIGNvcnRleCBkYXRhc2V0IChEcm9wLXNlcSkgYW5kIGhpcHBvY2FtcHVzIFAwIGRhdGFzZXQgKDEwWCkKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoQ09UQU4pCmxpYnJhcnkoc2NhbGVzKQpsaWJyYXJ5KHN0cmluZ3IpCmxpYnJhcnkobWF0cml4U3RhdHMpCmxpYnJhcnkobGF0ZXgyZXhwKQpsaWJyYXJ5KGRhdGEudGFibGUpCmxpYnJhcnkoZ2dwbG90MikKI3NvdXJjZSgiLi4vY290YW4wMS9zcmMvY290YW5fb3V0cHV0X2Z1bmN0aW9ucy5SIikKYGBgCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQpmaWxlcyA9IGMoInN5bV9FMTdfY2wxXzgwMGNzL2F2ZXJhZ2UiLAogICAgICAgICAgInN5bV9FMTdfY2wxXzQwMDBjcy9hdmVyYWdlIiwKICAgICAgICAgICJzeW1fRTE3X2NsNl80MDAwY3MvYXZlcmFnZSIsCiAgICAgICAgICAic3ltX0UxN19jbDZfODAwY3MvYXZlcmFnZSIsCiAgICAgICAgICAic3ltX1AwX2NsMTVfODAwY3MvYXZlcmFnZSIsCiAgICAgICAgICAic3ltX1AwX2NsMTVfNDAwMGNzL2F2ZXJhZ2UiKSAjCgoKbnUudG90LnBsb3QgPSBkYXRhLmZyYW1lKCJudSI9ZG91YmxlKCkgLCAiZXN0Ij1kb3VibGUoKSwgImdyb3VwIj1jaGFyYWN0ZXIoKSwgImNlbGxzIj1jaGFyYWN0ZXIoKSwgImNsdXN0ZXJzIj1jaGFyYWN0ZXIoKSwgIm1ldGhvZCI9Y2hhcmFjdGVyKCkpCmxhbWJkYS50b3QucGxvdCA9IGRhdGEuZnJhbWUoImxhbWJkYV9yZWFsIj1kb3VibGUoKSAsICJsYW1iZGFfZXN0Ij1kb3VibGUoKSwiZ3JvdXAiPWNoYXJhY3RlcigpLCAiY2VsbHMiPWNoYXJhY3RlcigpLCAiY2x1c3RlcnMiPWNoYXJhY3RlcigpLCAibWV0aG9kIj1jaGFyYWN0ZXIoKSkKYV90YWJsZSA9IGRhdGEuZnJhbWUoImF2ZXJhZ2UiPWRvdWJsZSgpLCJzcXJ0Ij1kb3VibGUoKSkKCmZvcih0dCBpbiBmaWxlcyApewogIGlucHV0X2RpciA9IHBhc3RlKCJEYXRhLyIsdHQsIi8iLHNlcCA9ICIiKQogIGNsID0gc3Ryc3BsaXQodHQsICJfIilbWzFdXVszXQogIGNvbC5hID0gc3Ryc3BsaXQodHQsICIvIilbWzFdXVsyXQogIGZvci5yYXcgPSBjbCAKICBpZiAoY2wgPT0gImNsMSIpIHsKICAgIGNvbmQgPSAic2luZ2xlIgogICAgY2wgPSAiSCIKICB9ZWxzZXsKICAgIGNvbmQgPSAibXVsdGkiCiAgICBjbCA9ICJNIgogIH0KICAjY2wgPSBwYXN0ZShzdHJzcGxpdChjbCwgImwiKVtbMV1dWzJdLCJjbC4iLCBzZXAgPSAiICIpCiAgbWV0aG9kID0gc3Ryc3BsaXQodHQsICJcXC98XFxffCAiKVtbMV1dWzJdCiAgaWYobWV0aG9kID09ICJQMCIpewogICAgbWV0aG9kID0gIjEwWCIKICB9ZWxzZXsKICAgIG1ldGhvZCA9ICJEU1EiCiAgfQogIG5jZWxscyA9IHN0cnNwbGl0KHN0cnNwbGl0KHR0LCAiXFwvfFxcX3wgIilbWzFdXVs0XSwiYyIpW1sxXV1bMV0KICAKICByb3cuYSA9IHBhc3RlKG1ldGhvZCwgY2wsbmNlbGxzLCBzZXAgPSAnXycpIAogIGVwbyA9IHN0cnNwbGl0KHR0LCAiXyIpW1sxXV1bMl0KICAKICBpZiAoZXBvID09ICJFMTciKSB7CiAgICAgIGV0YSA9IGFzLmRhdGEuZnJhbWUoZnJlYWQoIkRhdGEvaW5wdXQvZXRhX291dDE3X2F2ZXJhZ2UuY3N2IiwgaGVhZGVyID0gVCkpCiAgICAgIHRoZXRhID0gYXMuZGF0YS5mcmFtZShmcmVhZCgiRGF0YS9pbnB1dC90aGV0YV9vdXQxN19hdmVyYWdlLmNzdiIsIGhlYWRlciA9IFQpKQogICAgICBudS5zYW1wbGVzID0gcmVhZC5jc3YoIkRhdGEvaW5wdXQvbnVfb3V0MTdfYXZlcmFnZS5jc3YiLCBoZWFkZXIgPSBULHJvdy5uYW1lcyA9IDEpCiAgICAgIAogIH1lbHNlIGlmKGVwbyA9PSAiUDAiKXsKICAgICAgICBldGEgPSBhcy5kYXRhLmZyYW1lKGZyZWFkKCJEYXRhL2lucHV0L2V0YV9vdXRQMF9hdmVyYWdlLmNzdiIsIGhlYWRlciA9IFQpKQogICAgICB0aGV0YSA9IGFzLmRhdGEuZnJhbWUoZnJlYWQoIkRhdGEvaW5wdXQvdGhldGFfb3V0UDBfYXZlcmFnZS5jc3YiLCBoZWFkZXIgPSBUKSkKICAgICAgbnUuc2FtcGxlcyA9IHJlYWQuY3N2KCJEYXRhL2lucHV0L251X291dFAwX2F2ZXJhZ2UuY3N2IiwgaGVhZGVyID0gVCxyb3cubmFtZXMgPSAxKQogIH0KICBjb2xuYW1lcyhldGEpID0gZXRhWzEsXQogIGdlbmVzID0gZXRhWzI6bnJvdyhldGEpLDFdCiAgZXRhID0gZXRhWzI6bnJvdyhldGEpLCAyOm5jb2woZXRhKV0KICBldGEgPSBhcy5kYXRhLmZyYW1lKHNhcHBseShldGEsIGFzLm51bWVyaWMpKSAKICByb3duYW1lcyhldGEpID0gZ2VuZXMgICAgCiAgCiAgY29sbmFtZXModGhldGEpID0gdGhldGFbMSxdCiAgcm93bmFtZXModGhldGEpID0gdGhldGFbLDFdCiAgdGhldGEgPSB0aGV0YVsyOm5yb3codGhldGEpLCAyOm5jb2wodGhldGEpXQogIHRoZXRhID0gIGFzLmRhdGEuZnJhbWUoc2FwcGx5KHRoZXRhLCBhcy5udW1lcmljKSkgCiAgcm93bmFtZXModGhldGEpID0gZ2VuZXMKICBjbDIgPSB1bmlxdWUobnUuc2FtcGxlcyRjbHVzdGVyKQogIGNsLnBlcmMgPSB2ZWN0b3IobGVuZ3RoID0gbGVuZ3RoKGNsMikpCiAgbmFtZXMoY2wucGVyYykgPSBjbDIKICBmb3IgKGMgaW4gY2wyKSB7CiAgICAgY2wucGVyY1tjXSA9IGxlbmd0aChudS5zYW1wbGVzJGNsdXN0ZXJbbnUuc2FtcGxlcyRjbHVzdGVyID09IGNdKS9sZW5ndGgobnUuc2FtcGxlcyRjbHVzdGVyKQogIH0KICBzdW0oY2wucGVyYykKICBjbHVzdGVyLnNpbmdsZSA9IG5hbWVzKHdoaWNoKGNsLnBlcmMgPT0gbWF4KGNsLnBlcmMpKSkKICByZWFsX2xhbWJkYV9tdWx0aSA9IGFzLm1hdHJpeChldGEgKiB0aGV0YSkgICUqJSBkaWFnKGNsLnBlcmMpIAogIAogICNyZWFsX2xhbWJkYV9tdWx0aSA9IHQodChhcy5tYXRyaXgoZXRhICogdGhldGEpKSAqICgoYXMudmVjdG9yKGNsLnBlcmMpKSkpCiAgCiAgcmVhbF9sYW1iZGFfbXVsdGkgPSByb3dTdW1zKHJlYWxfbGFtYmRhX211bHRpKQogIHJlYWxfbGFtYmRhX3NpbmdsZSA9IGV0YVssY2x1c3Rlci5zaW5nbGVdICogdGhldGFbLGNsdXN0ZXIuc2luZ2xlXQogICBuYW1lcyhyZWFsX2xhbWJkYV9zaW5nbGUpPSByb3duYW1lcyhldGEpCgogICNjbCA9IHBhc3RlKHN0cnNwbGl0KGNsLCAibCIpW1sxXV1bMl0sImNsLiIsIHNlcCA9ICIgIikKICB0ID0gc3Ryc3BsaXQodHQsICIvIilbWzFdXVsxXQogICNsaXN0YSA9IGxvYWRfZmlsZXMyLjAoaW5wdXRfZGlyID0gaW5wdXRfZGlyLCB0ID0gdCAsIHMgPSAiU3kyIikKICAKICAjY2VsbHM9bGlzdGFbWzJdXSAKICBjZWxscz0gYXMuZGF0YS5mcmFtZShmcmVhZChwYXN0ZShpbnB1dF9kaXIsImNlbGxzXyIsdCwiLmNzdiIsIHNlcCA9ICIiKSkpCiAgcm93bmFtZXMoY2VsbHMpPWNlbGxzJFYxCiAgY2VsbHMgPSBhcy5tYXRyaXgoY2VsbHNbLDI6bmNvbChjZWxscyldKQogIAogICNudV9lc3QgPSBsaXN0YVtbM11dCiAgbnVfZXN0ID0gcmVhZC5jc3YocGFzdGUoaW5wdXRfZGlyLCJudV9lc3RfIix0LCIuY3N2Iiwgc2VwID0gIiIpLCByb3cubmFtZXMgPSAxKQogIAoKICAKICBjZWxscy5mb3IucmF3ID0gcGFzdGUwKG5jZWxscywiY3MuY3N2Lmd6IikKICByYXcgPSBhcy5kYXRhLmZyYW1lKGZyZWFkKHBhc3RlKCJEYXRhL3NpbXVsYXRlZF9kYXRhc2V0cy9zaW11bGF0ZWQuZGF0YXNldCIsZXBvLGZvci5yYXcsIGNlbGxzLmZvci5yYXcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwID0gIl8iKSkpCiAgcm93bmFtZXMocmF3KT1yYXckVjEKICByZWFsX251ID0gcmF3WzEsXQogIHJhdyA9IGFzLm1hdHJpeChyYXdbMjpucm93KHJhdyksMjpuY29sKHJhdyldKQogICNyYXdfbm9ybSA9IGxpc3RhW1s0XV0gCiAgcmF3X25vcm0gPC0gdCh0KGFzLm1hdHJpeChyYXcpKSAqICgxLyhhcy52ZWN0b3IobnVfZXN0KSkpKQogIAogIGNvbG5hbWVzKHJhd19ub3JtKT1jb2xuYW1lcyhjZWxscykKICByYXdfbm9ybSA9IGFzLmRhdGEuZnJhbWUocmF3X25vcm0pCiAgCiAgI3RvdDIgPSBsaXN0YVtbNV1dCiAgbG9hZChwYXN0ZShpbnB1dF9kaXIsImFfbWluaW1pemF0aW9uXyIsdCwgc2VwID0gIiIpKQogIAogICNsYW1iZGFfaSA9IGxpc3RhW1s3XV0KICBsYW1iZGFfaSA9IHJlYWQuY3N2KHBhc3RlKGlucHV0X2RpciwibGFtYmRhX2lfIix0LCIuY3N2Iiwgc2VwID0gIiIpLCByb3cubmFtZXMgPSAxKQogICNyZWFsX251ID0gbGlzdGFbWzhdXQogIHByaW50KHBhc3RlKCJyZWFsIG51IiwgbGVuZ3RoKHJlYWxfbnUpLCBzZXAgPSAiICIpKQogICNkc3EuZTE0Y3R4ID0gbGlzdGFbWzhdXQogICNybShsaXN0YSkKICAKICAKICAjcHJpbnQoImEgdGFibGUiKQogIAogIGFfdGFibGVbcm93LmEsY29sLmFdID0gc3VtKHRvdDIkYSA8IDApL2xlbmd0aCh0b3QyJGEpKjEwMCAgCiAgCiAgI3ByaW50KCJkYXRhZnJhbWUgZm9yIG51IikKICBudV9lc3QgPSBhcy5hcnJheShudV9lc3QkeCkKICB0by5wbG90Lm51ID0gZGF0YS5mcmFtZSgibnUiPXQocmVhbF9udVsyOmxlbmd0aChyZWFsX251KV0pKQogICNwcmludChwYXN0ZShsZW5ndGgobnVfZXN0KSwgZGltKHRvLnBsb3QubnUpLCBzZXAgPSAiICIpKQogIHRvLnBsb3QubnUkZXN0PSBudV9lc3QKICB0by5wbG90Lm51JGdyb3VwID0gcmVwKHBhc3RlKGMocm93LmEsIGNvbC5hKSwgY29sbGFwc2UgPSAnXycpLG5yb3codG8ucGxvdC5udSkpIAogIHRvLnBsb3QubnUkY2VsbHMgPSByZXAobmNlbGxzLG5yb3codG8ucGxvdC5udSkpIAogIHRvLnBsb3QubnUkY2x1c3RlcnMgPSByZXAoY2wsbnJvdyh0by5wbG90Lm51KSkgCiAgdG8ucGxvdC5udSRtZXRob2QgPSByZXAoY29sLmEsbnJvdyh0by5wbG90Lm51KSkgCiAgCiAgI3ByaW50KCJkYXRhZnJhbWUgZm9yIGxhbWJkYSIpCiAgbGFtYmRhX2VzdCA9IGFzLmFycmF5KGxhbWJkYV9pJHgpCiAgbGFtYmRhX2VzdCA9IGFzLmRhdGEuZnJhbWUobGFtYmRhX2kpCiAgaWYgKGNvbmQgPT0gIm11bHRpIikgewogICAgdG8ucGxvdC5sYW1iZGEgPSBkYXRhLmZyYW1lKCJsYW1iZGFfcmVhbCI9IHJlYWxfbGFtYmRhX211bHRpW3Jvd25hbWVzKGNlbGxzKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhbWJkYV9lc3QiPWxhbWJkYV9lc3Rbcm93bmFtZXMoY2VsbHMpLDFdKQogIH1lbHNlIGlmKGNvbmQgPT0gInNpbmdsZSIgKXsKICAgIHRvLnBsb3QubGFtYmRhID0gZGF0YS5mcmFtZSgibGFtYmRhX3JlYWwiPSByZWFsX2xhbWJkYV9zaW5nbGVbcm93bmFtZXMoY2VsbHMpXSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhbWJkYV9lc3QiPWxhbWJkYV9lc3Rbcm93bmFtZXMoY2VsbHMpLDFdKQogIH0KICAKICB0by5wbG90LmxhbWJkYSRncm91cCA9IHJlcChwYXN0ZShjKHJvdy5hLCBjb2wuYSksIGNvbGxhcHNlID0gJ18nKSAsbnJvdyh0by5wbG90LmxhbWJkYSkpIAogIHRvLnBsb3QubGFtYmRhJGNlbGxzID0gcmVwKG5jZWxscyxucm93KHRvLnBsb3QubGFtYmRhKSkgCiAgdG8ucGxvdC5sYW1iZGEkY2x1c3RlcnMgPSByZXAoY2wsbnJvdyh0by5wbG90LmxhbWJkYSkpIAogIHRvLnBsb3QubGFtYmRhJG1ldGhvZCA9IHJlcChjb2wuYSxucm93KHRvLnBsb3QubGFtYmRhKSkgCiAgCiAgcHJpbnQoImFsbCBkYXRhZnJhbWUgZm9ybWVkIikKICAKICBudS50b3QucGxvdCA9IHJiaW5kKG51LnRvdC5wbG90LHRvLnBsb3QubnUpIAogIGxhbWJkYS50b3QucGxvdCA9IHJiaW5kKGxhbWJkYS50b3QucGxvdCwgdG8ucGxvdC5sYW1iZGEpCiAgbGFtYmRhLnRvdC5wbG90ID0gbGFtYmRhLnRvdC5wbG90W2NvbXBsZXRlLmNhc2VzKGxhbWJkYS50b3QucGxvdCksXQogIAp9CgpgYGAKCmBgYHtyfQpteWNvbG91cnMgPC0gYygKICAiRFNRX0hfNDAwMF9hdmVyYWdlIj0gIiNFNjRCMzVGRiIgLAogICJEU1FfSF84MDBfYXZlcmFnZSIgPSAiIzREQkJENUZGIiAsCiAgIkRTUV9NXzQwMDBfYXZlcmFnZSIgPSAiI0YzOUI3RkZGIiAgLAogICAgIkRTUV9NXzgwMF9hdmVyYWdlIiA9ICIjMDBBMDg3RkYiLAogICIxMFhfTV84MDBfYXZlcmFnZSIgPSAgIiMzQzU0ODhGRiIgLAogICAgIjEwWF9NXzQwMDBfYXZlcmFnZSI9ICIjODQ5MUI0RkYiICwgCiAgIkRTUV9IXzQwMDBfc3FydCIgID0gIiNFNjRCMzVCMiIgLAogICJEU1FfSF84MDBfc3FydCIgICAgPSIjNERCQkQ1QjIiICwKICAiRFNRX01fNDAwMF9zcXJ0IiAgID0gIiNGMzlCN0ZCMiIgICwKICAiRFNRX01fODAwX3NxcnQiICAgID0gIiMwMEEwODdCMiIgLAogICIxMFhfTV84MDBfc3FydCIgICAgPSAiIzNDNTQ4OEIyIiAsCiAgIjEwWF9NXzQwMDBfc3FydCIgPSAiIzg0OTFCNEIyIiAKICAKICAKICApCgpkb2RnZSA8LSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCkKICAKc2kgPSAxMgogbnU9IGdncGxvdChudS50b3QucGxvdCxhZXMoeD1jZWxscywgeT1sb2coZXN0KS1sb2cobnUpLCBmaWxsPWdyb3VwKSkgKwogICAgZmFjZXRfZ3JpZChtZXRob2QgfiAuLCBzY2FsZXMgPSAiZnJlZSIpKyAKICAgICN5bGltKC0wLjIsMC4yKSsKICAgIGdlb21fdmlvbGluKGNvbG9yPSJibGFjayIsIHBvc2l0aW9uID0gZG9kZ2UpKyAgCiAgICBmYWNldF93cmFwKG1ldGhvZCB+IGNlbGxzLCBzY2FsZXMgPSAiZnJlZSIpKwogICAgY29vcmRfZmxpcCgpKwogICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gIG15Y29sb3VycykrCiAgICB4bGFiKFRlWCgiICRsb2cgXFx0aWxkZXtcXG51fSAtIGxvZyBcXG51ICQgIikpKyBnZW9tX2JveHBsb3Qod2lkdGg9MC4zLCBvdXRsaWVyLmNvbG91cj1OQSwgcG9zaXRpb24gPSBkb2RnZSkgKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IHNpLCBhbmdsZSA9IDAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gLjUsIGZhY2UgPSAicGxhaW4iLCBjb2xvdXIgPSIjM0M1NDg4RkYiICksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoIHNpemUgPSBzaSwgYW5nbGUgPSAwLCBoanVzdCA9IDEsIHZqdXN0ID0gLjAsIGZhY2UgPSAicGxhaW4iLCBjb2xvdXIgPSIjM0M1NDg4RkYiKSwgIAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dCggc2l6ZSA9IHNpLCBhbmdsZSA9IDAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gMCwgZmFjZSA9ICJwbGFpbiIsIGNvbG91ciA9IiMzQzU0ODhGRiIpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dCggc2l6ZSA9IHNpLCBhbmdsZSA9IDAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gLjUsIGZhY2UgPSAicGxhaW4iLCBjb2xvdXIgPSIjM0M1NDg4RkYiKSwKICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGw9IiM4NDkxQjQ0QyIpLAogICAgICAgc3RyaXAudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMixjb2xvdXIgPSAiIzNDNTQ4OEZGIixmYWNlID0gInBsYWluIiksCiAgICAgICAgc3RyaXAudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMixjb2xvdXIgPSAiIzNDNTQ4OEZGIixmYWNlID0gInBsYWluIiksCiAgICAgICBheGlzLnRpdGxlLnkubGVmdCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICNsZWdlbmQua2V5LmhlaWdodCA9IHVuaXQoNSwgIm1tIiksCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzNDNTQ4OEZGIixmYWNlID0iaXRhbGljIiApLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgICMgdGl0bCkKCm51IApgYGAKCgpgYGB7cn0KZG9kZ2U9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43KQpsYW1iZGEgPWdncGxvdChsYW1iZGEudG90LnBsb3QsYWVzKHg9Y2VsbHMsIHk9bG9nKGxhbWJkYV9lc3QpLWxvZyhsYW1iZGFfcmVhbCksIGZpbGw9Z3JvdXApKSArIAogIGZhY2V0X2dyaWQobWV0aG9kIH4gLiwgc2NhbGVzID0gImZyZWUiKSsgCiAgICB5bGltKC0wLjc1LDAuNzUpKwogICAgZ2VvbV92aW9saW4oY29sb3I9ImJsYWNrIiwgcG9zaXRpb24gPSBkb2RnZSkrICAKICAgIGZhY2V0X3dyYXAobWV0aG9kIH4gY2VsbHMsIHNjYWxlcyA9ICJmcmVlIikrCiAgICBjb29yZF9mbGlwKCkrCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSAgbXljb2xvdXJzKSsKICB4bGFiKFRlWCgiICRsb2cgXFx0aWxkZXtcXGxhbWJkYX0gLSBsb2cgXFxsYW1iZGEgJCAiKSkrIGdlb21fYm94cGxvdCh3aWR0aD0wLjIsIG91dGxpZXIuY29sb3VyPU5BLCBwb3NpdGlvbiA9IGRvZGdlKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gc2ksIGFuZ2xlID0gMCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAuNSwgZmFjZSA9ICJwbGFpbiIsIGNvbG91ciA9IiMzQzU0ODhGRiIgKSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dCggc2l6ZSA9IHNpLCBhbmdsZSA9IDAsIGhqdXN0ID0gMSwgdmp1c3QgPSAuMCwgZmFjZSA9ICJwbGFpbiIsIGNvbG91ciA9IiMzQzU0ODhGRiIpLCAgCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KCBzaXplID0gc2ksIGFuZ2xlID0gMCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAwLCBmYWNlID0gInBsYWluIiwgY29sb3VyID0iIzNDNTQ4OEZGIiksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KCBzaXplID0gc2ksIGFuZ2xlID0gMCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAuNSwgZmFjZSA9ICJwbGFpbiIsIGNvbG91ciA9IiMzQzU0ODhGRiIpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbD0iIzg0OTFCNDRDIiksCiAgICAgICBzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLGNvbG91ciA9ICIjM0M1NDg4RkYiLGZhY2UgPSAicGxhaW4iKSwKICAgICAgICBzdHJpcC50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLGNvbG91ciA9ICIjM0M1NDg4RkYiLGZhY2UgPSAicGxhaW4iKSwKICAgICAgIGF4aXMudGl0bGUueS5sZWZ0ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgI2xlZ2VuZC5rZXkuaGVpZ2h0ID0gdW5pdCg1LCAibW0iKSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjM0M1NDg4RkYiLGZhY2UgPSJpdGFsaWMiICksCiAgICAgICBsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKQpsYW1iZGEKYGBgClBlcmNlbnRhZ2Ugb2YgYSA8IDAgOgoKYGBge3J9CnByaW50KGFfdGFibGUpCmBgYAoKCgoKYGBge3J9CnNlc3Npb25JbmZvKCkKYGBgCgo=