1 Annotations

tt <- sm(library(EuPathDB))
tt <- sm(library(org.Lpanamensis.MHOMCOL81L13.v46.eg.db))
pan_db <- org.Lpanamensis.MHOMCOL81L13.v46.eg.db
all_fields <- columns(pan_db)

all_lp_annot <- sm(load_orgdb_annotations(
  pan_db,
  keytype="gid",
  fields="all")$genes)

orthos <- sm(EuPathDB::extract_eupath_orthologs(db=pan_db))

hisat_annot <- all_lp_annot
## rownames(hisat_annot) <- paste0("exon_", rownames(hisat_annot), ".E1")

2 Sample Estimation

2.1 Generate expressionsets

Caveat: This is using hisat2 quantifications.

lp_expt <- sm(create_expt("sample_sheets/tmrc2_samples_20200915.xlsx",
                          gene_info=hisat_annot,
                          file_column="lpanamensisv36hisatfile"))

libsizes <- plot_libsize(lp_expt)
## The scale difference between the smallest and largest
## libraries is > 10. Assuming a log10 scale is better, set scale=FALSE if not.
libsizes$plot

## I think samples 7,10 should be removed at minimum, probably also 9,11
nonzero <- plot_nonzero(lp_expt)
nonzero$plot

plot_boxplot(lp_expt)
## This data will benefit from being displayed on the log scale.
## If this is not desired, set scale='raw'
## Some entries are 0.  We are on log scale, adding 1 to the data.
## Changed 1920 zero count features.

pheno_expt <- set_expt_conditions(lp_expt, fact="phenotypiccharacteristics")
all_norm <- normalize_expt(pheno_expt, norm="quant", transform="log2", convert="cpm",
                           batch=FALSE, filter=TRUE)
## This function will replace the expt$expressionset slot with:
## log2(cpm(quant(cbcb(data))))
## It will save copies of each step along the way
##  in expt$normalized with the corresponding libsizes. Keep libsizes in mind
##  when invoking limma.  The appropriate libsize is non-log(cpm(normalized)).
##  This is most likely kept at:
##  'new_expt$normalized$intermediate_counts$normalization$libsizes'
##  A copy of this may also be found at:
##  new_expt$best_libsize
## Not correcting the count-data for batch effects.  If batch is
##  included in EdgerR/limma's model, then this is probably wise; but in extreme
##  batch effects this is a good parameter to play with.
## Step 1: performing count filter with option: cbcb
## Removing 155 low-count genes (8623 remaining).
## Step 2: normalizing the data with quant.
## Step 3: converting the data with cpm.
## Step 4: transforming the data with log2.
## transform_counts: Found 17 values equal to 0, adding 1 to the matrix.
## Step 5: not doing batch correction.
plot_pca(all_norm)$plot
## Warning in MASS::cov.trob(data[, vars]): Probable convergence failure

## Warning in MASS::cov.trob(data[, vars]): Probable convergence failure

plot_corheat(all_norm)$plot

plot_topn(lp_expt)$plot
## `geom_smooth()` using formula 'y ~ x'

3 Zymodeme genes

They are:

  1. ALAT: LPAL13_120010900 – alanine aminotransferase
  2. ASAT: LPAL13_340013000 – aspartate aminotransferase
  3. G6PD: LPAL13_000054100 – glucase-6-phosphate 1-dehydrogenase
  4. NH: LPAL13_14006100, LPAL13_180018500 – inosine-guanine nucleoside hydrolase
  5. MPI: LPAL13_320022300 (maybe) – mannose phosphate isomerase (I chose phosphomannose isomerase)
my_genes <- c("LPAL13_120010900", "LPAL13_340013000", "LPAL13_000054100",
              "LPAL13_140006100", "LPAL13_180018500", "LPAL13_320022300",
              "other")
my_names <- c("ALAT", "ASAT", "G6PD", "NHv1", "NHv2", "MPI", "other")

zymo_expt <- exclude_genes_expt(all_norm, ids=my_genes, method="keep")
## Before removal, there were 8623 entries.
## Now there are 6 entries.
## Percent kept: 0.086, 0.081, 0.084, 0.084, 0.083, 0.086, 0.083, 0.084, 0.083, 0.084, 0.083, 0.083, 0.085, 0.085, 0.083, 0.083, 0.083
## Percent removed: 99.914, 99.919, 99.916, 99.916, 99.917, 99.914, 99.917, 99.916, 99.917, 99.916, 99.917, 99.917, 99.915, 99.915, 99.917, 99.917, 99.917
test <- plot_sample_heatmap(zymo_expt, row_label=my_names)

4 Variant profiles

old_expt <- sm(create_expt("sample_sheets/tmrc2_samples_20191203.xlsx",
                           file_column="tophat2file"))

tt <- lp_expt$expressionset
rownames(tt) <- gsub(pattern="^exon_", replacement="", x=rownames(tt))
rownames(tt) <- gsub(pattern="\\.E1$", replacement="", x=rownames(tt))
lp_expt$expressionset <- tt

tt <- old_expt$expressionset
rownames(tt) <- gsub(pattern="^exon_", replacement="", x=rownames(tt))
rownames(tt) <- gsub(pattern="\\.1$", replacement="", x=rownames(tt))
old_expt$expressionset <- tt

new_snps <- sm(count_expt_snps(lp_expt, annot_column="bcftable"))
old_snps <- sm(count_expt_snps(old_expt, annot_column="bcftable", snp_column=2))

both_snps <- combine_expts(new_snps, old_snps)
both_norm <- sm(normalize_expt(both_snps, transform="log2", convert="cpm", filter=TRUE))

strains <- both_norm[["design"]][["strain"]]
both_norm <- set_expt_conditions(both_norm, fact=strains)
## Error in names(object) <- nm: 'names' attribute [11] must be the same length as the vector [10]
tt <- plot_disheat(both_norm)

snp_sets <- get_snp_sets(both_snps, factor="condition")
## The factor undefined has 17 rows.
## The factor undef has 50 rows.
## Iterating over 722 elements.
both_expt <- combine_expts(lp_expt, old_expt)
snp_genes <- snps_vs_genes(both_expt, snp_sets, expt_name_col="chromosome")

snp_subset <- sm(snp_subset_genes(
  both_expt, both_snps,
  genes=c("LPAL13_120010900", "LPAL13_340013000", "LPAL13_000054100",
          "LPAL13_140006100", "LPAL13_180018500", "LPAL13_320022300")))

zymo_heat <- plot_sample_heatmap(snp_subset, row_label=rownames(exprs(snp_subset)))

des <- both_norm$design
library(Heatplus)
##hmcols <- colorRampPalette(c("yellow","black","darkblue"))(256)
correlations <- hpgl_cor(exprs(both_norm))
mydendro <- list(
  "clustfun" = hclust,
  "lwd" = 2.0)
col_data <- as.data.frame(des[, c("strain")])
row_data <- as.data.frame(des[, c("batch")])
colnames(col_data) <- c("strain")
colnames(row_data) <- c("batch")
myannot <- list(
  "Col" = list("data" = col_data),
  "Row" = list("data" = row_data))
myclust <- list("cuth" = 1.0,
                "col" = BrewerClusterCol)
mylabs <- list(
  "Row" = list("nrow" = 4),
  "Col" = list("nrow" = 4))
hmcols <- colorRampPalette(c("darkblue", "beige"))(170)
map1 <- annHeatmap2(
  correlations,
  dendrogram=mydendro,
  annotation=myannot,
  cluster=myclust,
  labels=mylabs,
  col=hmcols)
## Warning in breakColors(breaks, col): more colors than classes: ignoring 3 last
## colors
plot(map1)

num_clusters <- max(map1[["cluster"]][["Row"]][["grp"]])
chosen_palette <- "Dark2"
new_colors <- grDevices::colorRampPalette(
                           RColorBrewer::brewer.pal(num_clusters, chosen_palette))(num_clusters)
## Warning in RColorBrewer::brewer.pal(num_clusters, chosen_palette): n too large, allowed maximum for palette Dark2 is 8
## Returning the palette you asked for with that many colors
myclust <- list("cuth" = 1.0,
                "col" = new_colors)
map2 <- annHeatmap2(
  correlations,
  dendrogram=mydendro,
  annotation=myannot,
  cluster=myclust,
  labels=mylabs,
  scale="none",
  col=hmcols)
## Error in breakColors(breaks, col): 61 more classes than colors defined
plot(map2)
## Error in plot(map2): object 'map2' not found

5 Zymodeme for new samples

The heatmap produced here should show the variants only for the zymodeme genes.

new_sets <- get_snp_sets(new_snps, factor="phenotypiccharacteristics")
## The factor 2.2 has 8 rows.
## The factor 2.3 has 6 rows.
## The factor Laboratory line has 3 rows.
## The factor Laboratory line antimony resistant  has only 1 row.
## The factor Laboratory line miltefosine resistant  has only 1 row.
## Iterating over 620 elements.
snp_genes <- snps_vs_genes(pheno_expt, new_sets, expt_name_col="chromosome")
## Warning in .Seqinfo.mergexy(x, y): Each of the 2 combined objects has sequence levels not in the other:
##   - in 'x': LPAL13_SCAF000002, LPAL13_SCAF000003, LPAL13_SCAF000005, LPAL13_SCAF000009, LPAL13_SCAF000014, LPAL13_SCAF000015, LPAL13_SCAF000018, LPAL13_SCAF000019, LPAL13_SCAF000020, LPAL13_SCAF000022, LPAL13_SCAF000023, LPAL13_SCAF000026, LPAL13_SCAF000029, LPAL13_SCAF000032, LPAL13_SCAF000035, LPAL13_SCAF000036, LPAL13_SCAF000037, LPAL13_SCAF000038, LPAL13_SCAF000042, LPAL13_SCAF000043, LPAL13_SCAF000045, LPAL13_SCAF000047, LPAL13_SCAF000049, LPAL13_SCAF000050, LPAL13_SCAF000054, LPAL13_SCAF000056, LPAL13_SCAF000057, LPAL13_SCAF000058, LPAL13_SCAF000066, LPAL13_SCAF000067, LPAL13_SCAF000070, LPAL13_SCAF000073, LPAL13_SCAF000082, LPAL13_SCAF000083, LPAL13_SCAF000085, LPAL13_SCAF000086, LPAL13_SCAF000088, LPAL13_SCAF000090, LPAL13_SCAF000091, LPAL13_SCAF000092, LPAL13_SCAF000095, LPAL13_SCAF000098, LPAL13_SCAF000101, LPAL13_SCAF000103, LPAL13_SCAF000106, LPAL13_SCAF000109, LPAL13_SCAF000111, LPAL13_SCAF000112, LPAL13_SCAF000113, LPAL13_SCAF000118, LPAL13_SCAF000125, LPAL13_SCAF000126, LPAL13_SCAF000138, LPAL13_SCAF000139, LPAL13_SCAF000140, LPAL13_SCAF000141, LPAL13_SCAF000144, LPAL13_SCAF000145, LPAL13_SCAF000147, LPAL13_SCAF000148, LPAL13_SCAF000150, LPAL13_SCAF000151, LPAL13_SCAF000152, LPAL13_SCAF000154, LPAL13_SCAF000155, LPAL13_SCAF000156, LPAL13_SCAF000158, LPAL13_SCAF000159, LPAL13_SCAF000160, LPAL13_SCAF000161, LPAL13_SCAF000163, LPAL13_SCAF000164, LPAL13_SCAF000167, LPAL13_SCAF000168, LPAL13_SCAF000169, LPAL13_SCAF000170, LPAL13_SCAF000175, LPAL13_SCAF000177, LPAL13_SCAF000178, LPAL13_SCAF000179, LPAL13_SCAF000180, LPAL13_SCAF000184, LPAL13_SCAF000185, LPAL13_SCAF000189, LPAL13_SCAF000190, LPAL13_SCAF000192, LPAL13_SCAF000195, LPAL13_SCAF000196, LPAL13_SCAF000198, LPAL13_SCAF000199, LPAL13_SCAF000204, LPAL13_SCAF000207, LPAL13_SCAF000210, LPAL13_SCAF000212, LPAL13_SCAF000214, LPAL13_SCAF000215, LPAL13_SCAF000216, LPAL13_SCAF000218, LPAL13_SCAF000219, LPAL13_SCAF000221, LPAL13_SCAF000223, LPAL13_SCAF000224, LPAL13_SCAF000226, LPAL13_SCAF000228, LPAL13_SCAF000234, LPAL13_SCAF000236, LPAL13_SCAF000240, LPAL13_SCAF000241, LPAL13_SCAF000242, LPAL13_SCAF000243, LPAL13_SCAF000244, LPAL13_SCAF000246, LPAL13_SCAF000247, LPAL13_SCAF000251, LPAL13_SCAF000252, LPAL13_SCAF000254, LPAL13_SCAF000255, LPAL13_SCAF000257, LPAL13_SCAF000258, LPAL13_SCAF000260, LPAL13_SCAF000262, LPAL13_SCAF000263, LPAL13_SCAF000269, LPAL13_SCAF000270, LPAL13_SCAF000272, LPAL13_SCAF000274, LPAL13_SCAF000275, LPAL13_SCAF000276, LPAL13_SCAF000277, LPAL13_SCAF000278, LPAL13_SCAF000279, LPAL13_SCAF000280, LPAL13_SCAF000282, LPAL13_SCAF000283, LPAL13_SCAF000284, LPAL13_SCAF000289, LPAL13_SCAF000290, LPAL13_SCAF000293, LPAL13_SCAF000294, LPAL13_SCAF000297, LPAL13_SCAF000298, LPAL13_SCAF000299, LPAL13_SCAF000304, LPAL13_SCAF000306, LPAL13_SCAF000307, LPAL13_SCAF000311, LPAL13_SCAF000312, LPAL13_SCAF000315, LPAL13_SCAF000323, LPAL13_SCAF000325, LPAL13_SCAF000327, LPAL13_SCAF000331, LPAL13_SCAF000332, LPAL13_SCAF000333, LPAL13_SCAF000334, LPAL13_SCAF000336, LPAL13_SCAF000341, LPAL13_SCAF000342, LPAL13_SCAF000344, LPAL13_SCAF000348, LPAL13_SCAF000349, LPAL13_SCAF000350, LPAL13_SCAF000351, LPAL13_SCAF000352, LPAL13_SCAF000355, LPAL13_SCAF000357, LPAL13_SCAF000359, LPAL13_SCAF000360, LPAL13_SCAF000361, LPAL13_SCAF000362, LPAL13_SCAF000365, LPAL13_SCAF000366, LPAL13_SCAF000371, LPAL13_SCAF000375, LPAL13_SCAF000376, LPAL13_SCAF000377, LPAL13_SCAF000378, LPAL13_SCAF000379, LPAL13_SCAF000380, LPAL13_SCAF000381, LPAL13_SCAF000382, LPAL13_SCAF000383, LPAL13_SCAF000385, LPAL13_SCAF000386, LPAL13_SCAF000387, LPAL13_SCAF000390, LPAL13_SCAF000392, LPAL13_SCAF000393, LPAL13_SCAF000394, LPAL13_SCAF000395, LPAL13_SCAF000396, LPAL13_SCAF000398, LPAL13_SCAF000399, LPAL13_SCAF000406, LPAL13_SCAF000407, LPAL13_SCAF000408, LPAL13_SCAF000409, LPAL13_SCAF000411, LPAL13_SCAF000412, LPAL13_SCAF000413, LPAL13_SCAF000416, LPAL13_SCAF000418, LPAL13_SCAF000422, LPAL13_SCAF000423, LPAL13_SCAF000425, LPAL13_SCAF000427, LPAL13_SCAF000431, LPAL13_SCAF000435, LPAL13_SCAF000438, LPAL13_SCAF000439, LPAL13_SCAF000441, LPAL13_SCAF000442, LPAL13_SCAF000443, LPAL13_SCAF000444, LPAL13_SCAF000445, LPAL13_SCAF000449, LPAL13_SCAF000450, LPAL13_SCAF000451, LPAL13_SCAF000452, LPAL13_SCAF000454, LPAL13_SCAF000455, LPAL13_SCAF000457, LPAL13_SCAF000458, LPAL13_SCAF000462, LPAL13_SCAF000464, LPAL13_SCAF000466, LPAL13_SCAF000467, LPAL13_SCAF000472, LPAL13_SCAF000473, LPAL13_SCAF000474, LPAL13_SCAF000475, LPAL13_SCAF000476, LPAL13_SCAF000479, LPAL13_SCAF000481, LPAL13_SCAF000482, LPAL13_SCAF000485, LPAL13_SCAF000489, LPAL13_SCAF000494, LPAL13_SCAF000497, LPAL13_SCAF000498, LPAL13_SCAF000499, LPAL13_SCAF000504, LPAL13_SCAF000506, LPAL13_SCAF000510, LPAL13_SCAF000513, LPAL13_SCAF000514, LPAL13_SCAF000516, LPAL13_SCAF000517, LPAL13_SCAF000518, LPAL13_SCAF000519, LPAL13_SCAF000520, LPAL13_SCAF000521, LPAL13_SCAF000524, LPAL13_SCAF000525, LPAL13_SCAF000526, LPAL13_SCAF000530, LPAL13_SCAF000531, LPAL13_SCAF000545, LPAL13_SCAF000546, LPAL13_SCAF000550, LPAL13_SCAF000557, LPAL13_SCAF000565, LPAL13_SCAF000571, LPAL13_SCAF000581, LPAL13_SCAF000584, LPAL13_SCAF000589, LPAL13_SCAF000592, LPAL13_SCAF000595, LPAL13_SCAF000596, LPAL13_SCAF000597, LPAL13_SCAF000602, LPAL13_SCAF000604, LPAL13_SCAF000606, LPAL13_SCAF000608, LPAL13_SCAF000609, LPAL13_SCAF000612, LPAL13_SCAF000613, LPAL13_SCAF000615, LPAL13_SCAF000620, LPAL13_SCAF000621, LPAL13_SCAF000623, LPAL13_SCAF000624, LPAL13_SCAF000629, LPAL13_SCAF000631, LPAL13_SCAF000632, LPAL13_SCAF000633, LPAL13_SCAF000634, LPAL13_SCAF000635, LPAL13_SCAF000640, LPAL13_SCAF000642, LPAL13_SCAF000647, LPAL13_SCAF000648, LPAL13_SCAF000657, LPAL13_SCAF000658, LPAL13_SCAF000660, LPAL13_SCAF000662, LPAL13_SCAF000663, LPAL13_SCAF000664, LPAL13_SCAF000665, LPAL13_SCAF000667, LPAL13_SCAF000669, LPAL13_SCAF000670, LPAL13_SCAF000675, LPAL13_SCAF000676, LPAL13_SCAF000677, LPAL13_SCAF000678, LPAL13_SCAF000683, LPAL13_SCAF000684, LPAL13_SCAF000685, LPAL13_SCAF000686, LPAL13_SCAF000687, LPAL13_SCAF000689, LPAL13_SCAF000690, LPAL13_SCAF000691, LPAL13_SCAF000693, LPAL13_SCAF000694, LPAL13_SCAF000699, LPAL13_SCAF000701, LPAL13_SCAF000702, LPAL13_SCAF000703, LPAL13_SCAF000705, LPAL13_SCAF000706, LPAL13_SCAF000708, LPAL13_SCAF000709, LPAL13_SCAF000710, LPAL13_SCAF000712, LPAL13_SCAF000715, LPAL13_SCAF000718, LPAL13_SCAF000721, LPAL13_SCAF000725, LPAL13_SCAF000728, LPAL13_SCAF000729, LPAL13_SCAF000730, LPAL13_SCAF000731, LPAL13_SCAF000733, LPAL13_SCAF000736, LPAL13_SCAF000739, LPAL13_SCAF000740, LPAL13_SCAF000741, LPAL13_SCAF000742, LPAL13_SCAF000743, LPAL13_SCAF000745, LPAL13_SCAF000746, LPAL13_SCAF000747, LPAL13_SCAF000749, LPAL13_SCAF000750, LPAL13_SCAF000751, LPAL13_SCAF000752, LPAL13_SCAF000753, LPAL13_SCAF000754, LPAL13_SCAF000755, LPAL13_SCAF000756, LPAL13_SCAF000757, LPAL13_SCAF000758, LPAL13_SCAF000759, LPAL13_SCAF000763, LPAL13_SCAF000764, LPAL13_SCAF000765, LPAL13_SCAF000766, LPAL13_SCAF000767, LPAL13_SCAF000768, LPAL13_SCAF000769, LPAL13_SCAF000770, LPAL13_SCAF000771, LPAL13_SCAF000773, LPAL13_SCAF000774, LPAL13_SCAF000775, LPAL13_SCAF000776, LPAL13_SCAF000777, LPAL13_SCAF000778, LPAL13_SCAF000784, LPAL13_SCAF000785, LPAL13_SCAF000786, LPAL13_SCAF000787, LPAL13_SCAF000790, LPAL13_SCAF000794, LPAL13_SCAF000795, LPAL13_SCAF000796, LPAL13_SCAF000803, LPAL13_SCAF000807, LPAL13_SCAF000809, LPAL13_SCAF000810, LPAL13_SCAF000811, LPAL13_SCAF000814, LPAL13_SCAF000817, LPAL13_SCAF000819, LPAL13_SCAF000820
##   - in 'y': LPAL13_SCAF000074, LPAL13_SCAF000136, LPAL13_SCAF000230, LPAL13_SCAF000286, LPAL13_SCAF000328, LPAL13_SCAF000539, LPAL13_SCAF000653
##   Make sure to always combine/compare objects based on the same reference
##   genome (use suppressWarnings() to suppress this warning).

## Warning in .Seqinfo.mergexy(x, y): Each of the 2 combined objects has sequence levels not in the other:
##   - in 'x': LPAL13_SCAF000002, LPAL13_SCAF000003, LPAL13_SCAF000005, LPAL13_SCAF000009, LPAL13_SCAF000014, LPAL13_SCAF000015, LPAL13_SCAF000018, LPAL13_SCAF000019, LPAL13_SCAF000020, LPAL13_SCAF000022, LPAL13_SCAF000023, LPAL13_SCAF000026, LPAL13_SCAF000029, LPAL13_SCAF000032, LPAL13_SCAF000035, LPAL13_SCAF000036, LPAL13_SCAF000037, LPAL13_SCAF000038, LPAL13_SCAF000042, LPAL13_SCAF000043, LPAL13_SCAF000045, LPAL13_SCAF000047, LPAL13_SCAF000049, LPAL13_SCAF000050, LPAL13_SCAF000054, LPAL13_SCAF000056, LPAL13_SCAF000057, LPAL13_SCAF000058, LPAL13_SCAF000066, LPAL13_SCAF000067, LPAL13_SCAF000070, LPAL13_SCAF000073, LPAL13_SCAF000082, LPAL13_SCAF000083, LPAL13_SCAF000085, LPAL13_SCAF000086, LPAL13_SCAF000088, LPAL13_SCAF000090, LPAL13_SCAF000091, LPAL13_SCAF000092, LPAL13_SCAF000095, LPAL13_SCAF000098, LPAL13_SCAF000101, LPAL13_SCAF000103, LPAL13_SCAF000106, LPAL13_SCAF000109, LPAL13_SCAF000111, LPAL13_SCAF000112, LPAL13_SCAF000113, LPAL13_SCAF000118, LPAL13_SCAF000125, LPAL13_SCAF000126, LPAL13_SCAF000138, LPAL13_SCAF000139, LPAL13_SCAF000140, LPAL13_SCAF000141, LPAL13_SCAF000144, LPAL13_SCAF000145, LPAL13_SCAF000147, LPAL13_SCAF000148, LPAL13_SCAF000150, LPAL13_SCAF000151, LPAL13_SCAF000152, LPAL13_SCAF000154, LPAL13_SCAF000155, LPAL13_SCAF000156, LPAL13_SCAF000158, LPAL13_SCAF000159, LPAL13_SCAF000160, LPAL13_SCAF000161, LPAL13_SCAF000163, LPAL13_SCAF000164, LPAL13_SCAF000167, LPAL13_SCAF000168, LPAL13_SCAF000169, LPAL13_SCAF000170, LPAL13_SCAF000175, LPAL13_SCAF000177, LPAL13_SCAF000178, LPAL13_SCAF000179, LPAL13_SCAF000180, LPAL13_SCAF000184, LPAL13_SCAF000185, LPAL13_SCAF000189, LPAL13_SCAF000190, LPAL13_SCAF000192, LPAL13_SCAF000195, LPAL13_SCAF000196, LPAL13_SCAF000198, LPAL13_SCAF000199, LPAL13_SCAF000204, LPAL13_SCAF000207, LPAL13_SCAF000210, LPAL13_SCAF000212, LPAL13_SCAF000214, LPAL13_SCAF000215, LPAL13_SCAF000216, LPAL13_SCAF000218, LPAL13_SCAF000219, LPAL13_SCAF000221, LPAL13_SCAF000223, LPAL13_SCAF000224, LPAL13_SCAF000226, LPAL13_SCAF000228, LPAL13_SCAF000234, LPAL13_SCAF000236, LPAL13_SCAF000240, LPAL13_SCAF000241, LPAL13_SCAF000242, LPAL13_SCAF000243, LPAL13_SCAF000244, LPAL13_SCAF000246, LPAL13_SCAF000247, LPAL13_SCAF000251, LPAL13_SCAF000252, LPAL13_SCAF000254, LPAL13_SCAF000255, LPAL13_SCAF000257, LPAL13_SCAF000258, LPAL13_SCAF000260, LPAL13_SCAF000262, LPAL13_SCAF000263, LPAL13_SCAF000269, LPAL13_SCAF000270, LPAL13_SCAF000272, LPAL13_SCAF000274, LPAL13_SCAF000275, LPAL13_SCAF000276, LPAL13_SCAF000277, LPAL13_SCAF000278, LPAL13_SCAF000279, LPAL13_SCAF000280, LPAL13_SCAF000282, LPAL13_SCAF000283, LPAL13_SCAF000284, LPAL13_SCAF000289, LPAL13_SCAF000290, LPAL13_SCAF000293, LPAL13_SCAF000294, LPAL13_SCAF000297, LPAL13_SCAF000298, LPAL13_SCAF000299, LPAL13_SCAF000304, LPAL13_SCAF000306, LPAL13_SCAF000307, LPAL13_SCAF000311, LPAL13_SCAF000312, LPAL13_SCAF000315, LPAL13_SCAF000323, LPAL13_SCAF000325, LPAL13_SCAF000327, LPAL13_SCAF000331, LPAL13_SCAF000332, LPAL13_SCAF000333, LPAL13_SCAF000334, LPAL13_SCAF000336, LPAL13_SCAF000341, LPAL13_SCAF000342, LPAL13_SCAF000344, LPAL13_SCAF000348, LPAL13_SCAF000349, LPAL13_SCAF000350, LPAL13_SCAF000351, LPAL13_SCAF000352, LPAL13_SCAF000355, LPAL13_SCAF000357, LPAL13_SCAF000359, LPAL13_SCAF000360, LPAL13_SCAF000361, LPAL13_SCAF000362, LPAL13_SCAF000365, LPAL13_SCAF000366, LPAL13_SCAF000371, LPAL13_SCAF000375, LPAL13_SCAF000376, LPAL13_SCAF000377, LPAL13_SCAF000378, LPAL13_SCAF000379, LPAL13_SCAF000380, LPAL13_SCAF000381, LPAL13_SCAF000382, LPAL13_SCAF000383, LPAL13_SCAF000385, LPAL13_SCAF000386, LPAL13_SCAF000387, LPAL13_SCAF000390, LPAL13_SCAF000392, LPAL13_SCAF000393, LPAL13_SCAF000394, LPAL13_SCAF000395, LPAL13_SCAF000396, LPAL13_SCAF000398, LPAL13_SCAF000399, LPAL13_SCAF000406, LPAL13_SCAF000407, LPAL13_SCAF000408, LPAL13_SCAF000409, LPAL13_SCAF000411, LPAL13_SCAF000412, LPAL13_SCAF000413, LPAL13_SCAF000416, LPAL13_SCAF000418, LPAL13_SCAF000422, LPAL13_SCAF000423, LPAL13_SCAF000425, LPAL13_SCAF000427, LPAL13_SCAF000431, LPAL13_SCAF000435, LPAL13_SCAF000438, LPAL13_SCAF000439, LPAL13_SCAF000441, LPAL13_SCAF000442, LPAL13_SCAF000443, LPAL13_SCAF000444, LPAL13_SCAF000445, LPAL13_SCAF000449, LPAL13_SCAF000450, LPAL13_SCAF000451, LPAL13_SCAF000452, LPAL13_SCAF000454, LPAL13_SCAF000455, LPAL13_SCAF000457, LPAL13_SCAF000458, LPAL13_SCAF000462, LPAL13_SCAF000464, LPAL13_SCAF000466, LPAL13_SCAF000467, LPAL13_SCAF000472, LPAL13_SCAF000473, LPAL13_SCAF000474, LPAL13_SCAF000475, LPAL13_SCAF000476, LPAL13_SCAF000479, LPAL13_SCAF000481, LPAL13_SCAF000482, LPAL13_SCAF000485, LPAL13_SCAF000489, LPAL13_SCAF000494, LPAL13_SCAF000497, LPAL13_SCAF000498, LPAL13_SCAF000499, LPAL13_SCAF000504, LPAL13_SCAF000506, LPAL13_SCAF000510, LPAL13_SCAF000513, LPAL13_SCAF000514, LPAL13_SCAF000516, LPAL13_SCAF000517, LPAL13_SCAF000518, LPAL13_SCAF000519, LPAL13_SCAF000520, LPAL13_SCAF000521, LPAL13_SCAF000524, LPAL13_SCAF000525, LPAL13_SCAF000526, LPAL13_SCAF000530, LPAL13_SCAF000531, LPAL13_SCAF000545, LPAL13_SCAF000546, LPAL13_SCAF000550, LPAL13_SCAF000557, LPAL13_SCAF000565, LPAL13_SCAF000571, LPAL13_SCAF000581, LPAL13_SCAF000584, LPAL13_SCAF000589, LPAL13_SCAF000592, LPAL13_SCAF000595, LPAL13_SCAF000596, LPAL13_SCAF000597, LPAL13_SCAF000602, LPAL13_SCAF000604, LPAL13_SCAF000606, LPAL13_SCAF000608, LPAL13_SCAF000609, LPAL13_SCAF000612, LPAL13_SCAF000613, LPAL13_SCAF000615, LPAL13_SCAF000620, LPAL13_SCAF000621, LPAL13_SCAF000623, LPAL13_SCAF000624, LPAL13_SCAF000629, LPAL13_SCAF000631, LPAL13_SCAF000632, LPAL13_SCAF000633, LPAL13_SCAF000634, LPAL13_SCAF000635, LPAL13_SCAF000640, LPAL13_SCAF000642, LPAL13_SCAF000647, LPAL13_SCAF000648, LPAL13_SCAF000657, LPAL13_SCAF000658, LPAL13_SCAF000660, LPAL13_SCAF000662, LPAL13_SCAF000663, LPAL13_SCAF000664, LPAL13_SCAF000665, LPAL13_SCAF000667, LPAL13_SCAF000669, LPAL13_SCAF000670, LPAL13_SCAF000675, LPAL13_SCAF000676, LPAL13_SCAF000677, LPAL13_SCAF000678, LPAL13_SCAF000683, LPAL13_SCAF000684, LPAL13_SCAF000685, LPAL13_SCAF000686, LPAL13_SCAF000687, LPAL13_SCAF000689, LPAL13_SCAF000690, LPAL13_SCAF000691, LPAL13_SCAF000693, LPAL13_SCAF000694, LPAL13_SCAF000699, LPAL13_SCAF000701, LPAL13_SCAF000702, LPAL13_SCAF000703, LPAL13_SCAF000705, LPAL13_SCAF000706, LPAL13_SCAF000708, LPAL13_SCAF000709, LPAL13_SCAF000710, LPAL13_SCAF000712, LPAL13_SCAF000715, LPAL13_SCAF000718, LPAL13_SCAF000721, LPAL13_SCAF000725, LPAL13_SCAF000728, LPAL13_SCAF000729, LPAL13_SCAF000730, LPAL13_SCAF000731, LPAL13_SCAF000733, LPAL13_SCAF000736, LPAL13_SCAF000739, LPAL13_SCAF000740, LPAL13_SCAF000741, LPAL13_SCAF000742, LPAL13_SCAF000743, LPAL13_SCAF000745, LPAL13_SCAF000746, LPAL13_SCAF000747, LPAL13_SCAF000749, LPAL13_SCAF000750, LPAL13_SCAF000751, LPAL13_SCAF000752, LPAL13_SCAF000753, LPAL13_SCAF000754, LPAL13_SCAF000755, LPAL13_SCAF000756, LPAL13_SCAF000757, LPAL13_SCAF000758, LPAL13_SCAF000759, LPAL13_SCAF000763, LPAL13_SCAF000764, LPAL13_SCAF000765, LPAL13_SCAF000766, LPAL13_SCAF000767, LPAL13_SCAF000768, LPAL13_SCAF000769, LPAL13_SCAF000770, LPAL13_SCAF000771, LPAL13_SCAF000773, LPAL13_SCAF000774, LPAL13_SCAF000775, LPAL13_SCAF000776, LPAL13_SCAF000777, LPAL13_SCAF000778, LPAL13_SCAF000784, LPAL13_SCAF000785, LPAL13_SCAF000786, LPAL13_SCAF000787, LPAL13_SCAF000790, LPAL13_SCAF000794, LPAL13_SCAF000795, LPAL13_SCAF000796, LPAL13_SCAF000803, LPAL13_SCAF000807, LPAL13_SCAF000809, LPAL13_SCAF000810, LPAL13_SCAF000811, LPAL13_SCAF000814, LPAL13_SCAF000817, LPAL13_SCAF000819, LPAL13_SCAF000820
##   - in 'y': LPAL13_SCAF000074, LPAL13_SCAF000136, LPAL13_SCAF000230, LPAL13_SCAF000286, LPAL13_SCAF000328, LPAL13_SCAF000539, LPAL13_SCAF000653
##   Make sure to always combine/compare objects based on the same reference
##   genome (use suppressWarnings() to suppress this warning).
## Warning in .Seqinfo.mergexy(x, y): Each of the 2 combined objects has sequence levels not in the other:
##   - in 'x': LPAL13_SCAF000074, LPAL13_SCAF000136, LPAL13_SCAF000230, LPAL13_SCAF000286, LPAL13_SCAF000328, LPAL13_SCAF000539, LPAL13_SCAF000653
##   - in 'y': LPAL13_SCAF000002, LPAL13_SCAF000003, LPAL13_SCAF000005, LPAL13_SCAF000009, LPAL13_SCAF000014, LPAL13_SCAF000015, LPAL13_SCAF000018, LPAL13_SCAF000019, LPAL13_SCAF000020, LPAL13_SCAF000022, LPAL13_SCAF000023, LPAL13_SCAF000026, LPAL13_SCAF000029, LPAL13_SCAF000032, LPAL13_SCAF000035, LPAL13_SCAF000036, LPAL13_SCAF000037, LPAL13_SCAF000038, LPAL13_SCAF000042, LPAL13_SCAF000043, LPAL13_SCAF000045, LPAL13_SCAF000047, LPAL13_SCAF000049, LPAL13_SCAF000050, LPAL13_SCAF000054, LPAL13_SCAF000056, LPAL13_SCAF000057, LPAL13_SCAF000058, LPAL13_SCAF000066, LPAL13_SCAF000067, LPAL13_SCAF000070, LPAL13_SCAF000073, LPAL13_SCAF000082, LPAL13_SCAF000083, LPAL13_SCAF000085, LPAL13_SCAF000086, LPAL13_SCAF000088, LPAL13_SCAF000090, LPAL13_SCAF000091, LPAL13_SCAF000092, LPAL13_SCAF000095, LPAL13_SCAF000098, LPAL13_SCAF000101, LPAL13_SCAF000103, LPAL13_SCAF000106, LPAL13_SCAF000109, LPAL13_SCAF000111, LPAL13_SCAF000112, LPAL13_SCAF000113, LPAL13_SCAF000118, LPAL13_SCAF000125, LPAL13_SCAF000126, LPAL13_SCAF000138, LPAL13_SCAF000139, LPAL13_SCAF000140, LPAL13_SCAF000141, LPAL13_SCAF000144, LPAL13_SCAF000145, LPAL13_SCAF000147, LPAL13_SCAF000148, LPAL13_SCAF000150, LPAL13_SCAF000151, LPAL13_SCAF000152, LPAL13_SCAF000154, LPAL13_SCAF000155, LPAL13_SCAF000156, LPAL13_SCAF000158, LPAL13_SCAF000159, LPAL13_SCAF000160, LPAL13_SCAF000161, LPAL13_SCAF000163, LPAL13_SCAF000164, LPAL13_SCAF000167, LPAL13_SCAF000168, LPAL13_SCAF000169, LPAL13_SCAF000170, LPAL13_SCAF000175, LPAL13_SCAF000177, LPAL13_SCAF000178, LPAL13_SCAF000179, LPAL13_SCAF000180, LPAL13_SCAF000184, LPAL13_SCAF000185, LPAL13_SCAF000189, LPAL13_SCAF000190, LPAL13_SCAF000192, LPAL13_SCAF000195, LPAL13_SCAF000196, LPAL13_SCAF000198, LPAL13_SCAF000199, LPAL13_SCAF000204, LPAL13_SCAF000207, LPAL13_SCAF000210, LPAL13_SCAF000212, LPAL13_SCAF000214, LPAL13_SCAF000215, LPAL13_SCAF000216, LPAL13_SCAF000218, LPAL13_SCAF000219, LPAL13_SCAF000221, LPAL13_SCAF000223, LPAL13_SCAF000224, LPAL13_SCAF000226, LPAL13_SCAF000228, LPAL13_SCAF000234, LPAL13_SCAF000236, LPAL13_SCAF000240, LPAL13_SCAF000241, LPAL13_SCAF000242, LPAL13_SCAF000243, LPAL13_SCAF000244, LPAL13_SCAF000246, LPAL13_SCAF000247, LPAL13_SCAF000251, LPAL13_SCAF000252, LPAL13_SCAF000254, LPAL13_SCAF000255, LPAL13_SCAF000257, LPAL13_SCAF000258, LPAL13_SCAF000260, LPAL13_SCAF000262, LPAL13_SCAF000263, LPAL13_SCAF000269, LPAL13_SCAF000270, LPAL13_SCAF000272, LPAL13_SCAF000274, LPAL13_SCAF000275, LPAL13_SCAF000276, LPAL13_SCAF000277, LPAL13_SCAF000278, LPAL13_SCAF000279, LPAL13_SCAF000280, LPAL13_SCAF000282, LPAL13_SCAF000283, LPAL13_SCAF000284, LPAL13_SCAF000289, LPAL13_SCAF000290, LPAL13_SCAF000293, LPAL13_SCAF000294, LPAL13_SCAF000297, LPAL13_SCAF000298, LPAL13_SCAF000299, LPAL13_SCAF000304, LPAL13_SCAF000306, LPAL13_SCAF000307, LPAL13_SCAF000311, LPAL13_SCAF000312, LPAL13_SCAF000315, LPAL13_SCAF000323, LPAL13_SCAF000325, LPAL13_SCAF000327, LPAL13_SCAF000331, LPAL13_SCAF000332, LPAL13_SCAF000333, LPAL13_SCAF000334, LPAL13_SCAF000336, LPAL13_SCAF000341, LPAL13_SCAF000342, LPAL13_SCAF000344, LPAL13_SCAF000348, LPAL13_SCAF000349, LPAL13_SCAF000350, LPAL13_SCAF000351, LPAL13_SCAF000352, LPAL13_SCAF000355, LPAL13_SCAF000357, LPAL13_SCAF000359, LPAL13_SCAF000360, LPAL13_SCAF000361, LPAL13_SCAF000362, LPAL13_SCAF000365, LPAL13_SCAF000366, LPAL13_SCAF000371, LPAL13_SCAF000375, LPAL13_SCAF000376, LPAL13_SCAF000377, LPAL13_SCAF000378, LPAL13_SCAF000379, LPAL13_SCAF000380, LPAL13_SCAF000381, LPAL13_SCAF000382, LPAL13_SCAF000383, LPAL13_SCAF000385, LPAL13_SCAF000386, LPAL13_SCAF000387, LPAL13_SCAF000390, LPAL13_SCAF000392, LPAL13_SCAF000393, LPAL13_SCAF000394, LPAL13_SCAF000395, LPAL13_SCAF000396, LPAL13_SCAF000398, LPAL13_SCAF000399, LPAL13_SCAF000406, LPAL13_SCAF000407, LPAL13_SCAF000408, LPAL13_SCAF000409, LPAL13_SCAF000411, LPAL13_SCAF000412, LPAL13_SCAF000413, LPAL13_SCAF000416, LPAL13_SCAF000418, LPAL13_SCAF000422, LPAL13_SCAF000423, LPAL13_SCAF000425, LPAL13_SCAF000427, LPAL13_SCAF000431, LPAL13_SCAF000435, LPAL13_SCAF000438, LPAL13_SCAF000439, LPAL13_SCAF000441, LPAL13_SCAF000442, LPAL13_SCAF000443, LPAL13_SCAF000444, LPAL13_SCAF000445, LPAL13_SCAF000449, LPAL13_SCAF000450, LPAL13_SCAF000451, LPAL13_SCAF000452, LPAL13_SCAF000454, LPAL13_SCAF000455, LPAL13_SCAF000457, LPAL13_SCAF000458, LPAL13_SCAF000462, LPAL13_SCAF000464, LPAL13_SCAF000466, LPAL13_SCAF000467, LPAL13_SCAF000472, LPAL13_SCAF000473, LPAL13_SCAF000474, LPAL13_SCAF000475, LPAL13_SCAF000476, LPAL13_SCAF000479, LPAL13_SCAF000481, LPAL13_SCAF000482, LPAL13_SCAF000485, LPAL13_SCAF000489, LPAL13_SCAF000494, LPAL13_SCAF000497, LPAL13_SCAF000498, LPAL13_SCAF000499, LPAL13_SCAF000504, LPAL13_SCAF000506, LPAL13_SCAF000510, LPAL13_SCAF000513, LPAL13_SCAF000514, LPAL13_SCAF000516, LPAL13_SCAF000517, LPAL13_SCAF000518, LPAL13_SCAF000519, LPAL13_SCAF000520, LPAL13_SCAF000521, LPAL13_SCAF000524, LPAL13_SCAF000525, LPAL13_SCAF000526, LPAL13_SCAF000530, LPAL13_SCAF000531, LPAL13_SCAF000545, LPAL13_SCAF000546, LPAL13_SCAF000550, LPAL13_SCAF000557, LPAL13_SCAF000565, LPAL13_SCAF000571, LPAL13_SCAF000581, LPAL13_SCAF000584, LPAL13_SCAF000589, LPAL13_SCAF000592, LPAL13_SCAF000595, LPAL13_SCAF000596, LPAL13_SCAF000597, LPAL13_SCAF000602, LPAL13_SCAF000604, LPAL13_SCAF000606, LPAL13_SCAF000608, LPAL13_SCAF000609, LPAL13_SCAF000612, LPAL13_SCAF000613, LPAL13_SCAF000615, LPAL13_SCAF000620, LPAL13_SCAF000621, LPAL13_SCAF000623, LPAL13_SCAF000624, LPAL13_SCAF000629, LPAL13_SCAF000631, LPAL13_SCAF000632, LPAL13_SCAF000633, LPAL13_SCAF000634, LPAL13_SCAF000635, LPAL13_SCAF000640, LPAL13_SCAF000642, LPAL13_SCAF000647, LPAL13_SCAF000648, LPAL13_SCAF000657, LPAL13_SCAF000658, LPAL13_SCAF000660, LPAL13_SCAF000662, LPAL13_SCAF000663, LPAL13_SCAF000664, LPAL13_SCAF000665, LPAL13_SCAF000667, LPAL13_SCAF000669, LPAL13_SCAF000670, LPAL13_SCAF000675, LPAL13_SCAF000676, LPAL13_SCAF000677, LPAL13_SCAF000678, LPAL13_SCAF000683, LPAL13_SCAF000684, LPAL13_SCAF000685, LPAL13_SCAF000686, LPAL13_SCAF000687, LPAL13_SCAF000689, LPAL13_SCAF000690, LPAL13_SCAF000691, LPAL13_SCAF000693, LPAL13_SCAF000694, LPAL13_SCAF000699, LPAL13_SCAF000701, LPAL13_SCAF000702, LPAL13_SCAF000703, LPAL13_SCAF000705, LPAL13_SCAF000706, LPAL13_SCAF000708, LPAL13_SCAF000709, LPAL13_SCAF000710, LPAL13_SCAF000712, LPAL13_SCAF000715, LPAL13_SCAF000718, LPAL13_SCAF000721, LPAL13_SCAF000725, LPAL13_SCAF000728, LPAL13_SCAF000729, LPAL13_SCAF000730, LPAL13_SCAF000731, LPAL13_SCAF000733, LPAL13_SCAF000736, LPAL13_SCAF000739, LPAL13_SCAF000740, LPAL13_SCAF000741, LPAL13_SCAF000742, LPAL13_SCAF000743, LPAL13_SCAF000745, LPAL13_SCAF000746, LPAL13_SCAF000747, LPAL13_SCAF000749, LPAL13_SCAF000750, LPAL13_SCAF000751, LPAL13_SCAF000752, LPAL13_SCAF000753, LPAL13_SCAF000754, LPAL13_SCAF000755, LPAL13_SCAF000756, LPAL13_SCAF000757, LPAL13_SCAF000758, LPAL13_SCAF000759, LPAL13_SCAF000763, LPAL13_SCAF000764, LPAL13_SCAF000765, LPAL13_SCAF000766, LPAL13_SCAF000767, LPAL13_SCAF000768, LPAL13_SCAF000769, LPAL13_SCAF000770, LPAL13_SCAF000771, LPAL13_SCAF000773, LPAL13_SCAF000774, LPAL13_SCAF000775, LPAL13_SCAF000776, LPAL13_SCAF000777, LPAL13_SCAF000778, LPAL13_SCAF000784, LPAL13_SCAF000785, LPAL13_SCAF000786, LPAL13_SCAF000787, LPAL13_SCAF000790, LPAL13_SCAF000794, LPAL13_SCAF000795, LPAL13_SCAF000796, LPAL13_SCAF000803, LPAL13_SCAF000807, LPAL13_SCAF000809, LPAL13_SCAF000810, LPAL13_SCAF000811, LPAL13_SCAF000814, LPAL13_SCAF000817, LPAL13_SCAF000819, LPAL13_SCAF000820
##   Make sure to always combine/compare objects based on the same reference
##   genome (use suppressWarnings() to suppress this warning).
zymo_subset <- sm(snp_subset_genes(
  pheno_expt, new_snps,
  genes=c("LPAL13_120010900", "LPAL13_340013000", "LPAL13_000054100",
          "LPAL13_140006100", "LPAL13_180018500", "LPAL13_320022300")))

zymo_subset <- set_expt_conditions(zymo_subset, fact="phenotypiccharacteristics")
zymo_heat <- plot_sample_heatmap(zymo_subset, row_label=rownames(exprs(snp_subset)))

if (!isTRUE(get0("skip_load"))) {
  pander::pander(sessionInfo())
  message(paste0("This is hpgltools commit: ", get_git_commit()))
  message(paste0("Saving to ", savefile))
  tmp <- sm(saveme(filename=savefile))
}
## If you wish to reproduce this exact build of hpgltools, invoke the following:
## > git clone http://github.com/abelew/hpgltools.git
## > git reset 4f025ebdf7b19ddfef0cf9ddaa9ebe2857477394
## This is hpgltools commit: Wed Aug 19 10:11:52 2020 -0400: 4f025ebdf7b19ddfef0cf9ddaa9ebe2857477394
## Saving to 01_annotation_v202009.rda.xz
tmp <- loadme(filename=savefile)
LS0tCnRpdGxlOiAiTC4gcGFuYW1lbnNpcyAyMDIwMDk6IFNhbXBsZSBFc3RpbWF0aW9uIgphdXRob3I6ICJhdGIgYWJlbGV3QGdtYWlsLmNvbSIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiBodG1sX2RvY3VtZW50OgogIGNvZGVfZG93bmxvYWQ6IHRydWUKICBjb2RlX2ZvbGRpbmc6IHNob3cKICBmaWdfY2FwdGlvbjogdHJ1ZQogIGZpZ19oZWlnaHQ6IDcKICBmaWdfd2lkdGg6IDcKICBoaWdobGlnaHQ6IGRlZmF1bHQKICBrZWVwX21kOiBmYWxzZQogIG1vZGU6IHNlbGZjb250YWluZWQKICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQogIHRoZW1lOiByZWFkYWJsZQogIHRvYzogdHJ1ZQogIHRvY19mbG9hdDoKICAgY29sbGFwc2VkOiBmYWxzZQogICBzbW9vdGhfc2Nyb2xsOiBmYWxzZQotLS0KCjxzdHlsZT4KICBib2R5IC5tYWluLWNvbnRhaW5lciB7CiAgICBtYXgtd2lkdGg6IDE2MDBweDsKICB9Cjwvc3R5bGU+CgpgYGB7ciBvcHRpb25zLCBpbmNsdWRlPUZBTFNFfQppZiAoIWlzVFJVRShnZXQwKCJza2lwX2xvYWQiKSkpIHsKICBsaWJyYXJ5KGhwZ2x0b29scykKICB0dCA8LSBzbShkZXZ0b29sczo6bG9hZF9hbGwoIi9kYXRhL2hwZ2x0b29scyIpKQogIGtuaXRyOjpvcHRzX2tuaXQkc2V0KHByb2dyZXNzPVRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPTkwLAogICAgICAgICAgICAgICAgICAgICAgIGVjaG89VFJVRSkKICBrbml0cjo6b3B0c19jaHVuayRzZXQoZXJyb3I9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlnLndpZHRoPTgsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpZy5oZWlnaHQ9OCwKICAgICAgICAgICAgICAgICAgICAgICAgZHBpPTk2KQogIG9sZF9vcHRpb25zIDwtIG9wdGlvbnMoZGlnaXRzPTQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAga25pdHIuZHVwbGljYXRlLmxhYmVsPSJhbGxvdyIpCiAgZ2dwbG90Mjo6dGhlbWVfc2V0KGdncGxvdDI6OnRoZW1lX2J3KGJhc2Vfc2l6ZT0xMikpCiAgdmVyIDwtICIyMDIwMDkiCiAgcHJldmlvdXNfZmlsZSA8LSBwYXN0ZTAoIjAxX2Fubm90YXRpb25fdiIsIHZlciwgIi5SbWQiKQogIHJ1bmRhdGUgPC0gZm9ybWF0KFN5cy5EYXRlKCksIGZvcm1hdD0iJVklbSVkIikKCiAgdG1wIDwtIHRyeShzbShsb2FkbWUoZmlsZW5hbWU9Z3N1YihwYXR0ZXJuPSJcXC5SbWQiLCByZXBsYWNlPSJcXC5yZGFcXC54eiIsIHg9cHJldmlvdXNfZmlsZSkpKSkKICBybWRfZmlsZSA8LSBwYXN0ZTAoIjAxX2Fubm90YXRpb25fdiIsIHZlciwgIi5SbWQiKQogIHNhdmVmaWxlIDwtIGdzdWIocGF0dGVybj0iXFwuUm1kIiwgcmVwbGFjZT0iXFwucmRhXFwueHoiLCB4PXJtZF9maWxlKQp9CmBgYAoKIyBBbm5vdGF0aW9ucwoKYGBge3IgYW5ub3R9CnR0IDwtIHNtKGxpYnJhcnkoRXVQYXRoREIpKQp0dCA8LSBzbShsaWJyYXJ5KG9yZy5McGFuYW1lbnNpcy5NSE9NQ09MODFMMTMudjQ2LmVnLmRiKSkKcGFuX2RiIDwtIG9yZy5McGFuYW1lbnNpcy5NSE9NQ09MODFMMTMudjQ2LmVnLmRiCmFsbF9maWVsZHMgPC0gY29sdW1ucyhwYW5fZGIpCgphbGxfbHBfYW5ub3QgPC0gc20obG9hZF9vcmdkYl9hbm5vdGF0aW9ucygKICBwYW5fZGIsCiAga2V5dHlwZT0iZ2lkIiwKICBmaWVsZHM9ImFsbCIpJGdlbmVzKQoKb3J0aG9zIDwtIHNtKEV1UGF0aERCOjpleHRyYWN0X2V1cGF0aF9vcnRob2xvZ3MoZGI9cGFuX2RiKSkKCmhpc2F0X2Fubm90IDwtIGFsbF9scF9hbm5vdAojIyByb3duYW1lcyhoaXNhdF9hbm5vdCkgPC0gcGFzdGUwKCJleG9uXyIsIHJvd25hbWVzKGhpc2F0X2Fubm90KSwgIi5FMSIpCmBgYAoKIyBTYW1wbGUgRXN0aW1hdGlvbgoKIyMgR2VuZXJhdGUgZXhwcmVzc2lvbnNldHMKCkNhdmVhdDogVGhpcyBpcyB1c2luZyBoaXNhdDIgcXVhbnRpZmljYXRpb25zLgoKYGBge3IgYWxsX25ld19zYWxtb259CmxwX2V4cHQgPC0gc20oY3JlYXRlX2V4cHQoInNhbXBsZV9zaGVldHMvdG1yYzJfc2FtcGxlc18yMDIwMDkxNS54bHN4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lX2luZm89aGlzYXRfYW5ub3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9jb2x1bW49ImxwYW5hbWVuc2lzdjM2aGlzYXRmaWxlIikpCgpsaWJzaXplcyA8LSBwbG90X2xpYnNpemUobHBfZXhwdCkKbGlic2l6ZXMkcGxvdAojIyBJIHRoaW5rIHNhbXBsZXMgNywxMCBzaG91bGQgYmUgcmVtb3ZlZCBhdCBtaW5pbXVtLCBwcm9iYWJseSBhbHNvIDksMTEKbm9uemVybyA8LSBwbG90X25vbnplcm8obHBfZXhwdCkKbm9uemVybyRwbG90CnBsb3RfYm94cGxvdChscF9leHB0KQpgYGAKCmBgYHtyIHByZV9xdWVzdGlvbnN9CnBoZW5vX2V4cHQgPC0gc2V0X2V4cHRfY29uZGl0aW9ucyhscF9leHB0LCBmYWN0PSJwaGVub3R5cGljY2hhcmFjdGVyaXN0aWNzIikKYWxsX25vcm0gPC0gbm9ybWFsaXplX2V4cHQocGhlbm9fZXhwdCwgbm9ybT0icXVhbnQiLCB0cmFuc2Zvcm09ImxvZzIiLCBjb252ZXJ0PSJjcG0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaD1GQUxTRSwgZmlsdGVyPVRSVUUpCnBsb3RfcGNhKGFsbF9ub3JtKSRwbG90CnBsb3RfY29yaGVhdChhbGxfbm9ybSkkcGxvdApwbG90X3RvcG4obHBfZXhwdCkkcGxvdApgYGAKCiMgWnltb2RlbWUgZ2VuZXMKClRoZXkgYXJlOgoKMS4gQUxBVDogTFBBTDEzXzEyMDAxMDkwMCAtLSBhbGFuaW5lIGFtaW5vdHJhbnNmZXJhc2UKMi4gQVNBVDogTFBBTDEzXzM0MDAxMzAwMCAtLSBhc3BhcnRhdGUgYW1pbm90cmFuc2ZlcmFzZQozLiBHNlBEOiBMUEFMMTNfMDAwMDU0MTAwIC0tIGdsdWNhc2UtNi1waG9zcGhhdGUgMS1kZWh5ZHJvZ2VuYXNlCjQuIE5IOiBMUEFMMTNfMTQwMDYxMDAsIExQQUwxM18xODAwMTg1MDAgLS0gaW5vc2luZS1ndWFuaW5lIG51Y2xlb3NpZGUgaHlkcm9sYXNlCjUuIE1QSTogTFBBTDEzXzMyMDAyMjMwMCAobWF5YmUpIC0tIG1hbm5vc2UgcGhvc3BoYXRlIGlzb21lcmFzZSAoSSBjaG9zZSBwaG9zcGhvbWFubm9zZSBpc29tZXJhc2UpCgpgYGB7ciB6eW1vZGVtZXN9Cm15X2dlbmVzIDwtIGMoIkxQQUwxM18xMjAwMTA5MDAiLCAiTFBBTDEzXzM0MDAxMzAwMCIsICJMUEFMMTNfMDAwMDU0MTAwIiwKICAgICAgICAgICAgICAiTFBBTDEzXzE0MDAwNjEwMCIsICJMUEFMMTNfMTgwMDE4NTAwIiwgIkxQQUwxM18zMjAwMjIzMDAiLAogICAgICAgICAgICAgICJvdGhlciIpCm15X25hbWVzIDwtIGMoIkFMQVQiLCAiQVNBVCIsICJHNlBEIiwgIk5IdjEiLCAiTkh2MiIsICJNUEkiLCAib3RoZXIiKQoKenltb19leHB0IDwtIGV4Y2x1ZGVfZ2VuZXNfZXhwdChhbGxfbm9ybSwgaWRzPW15X2dlbmVzLCBtZXRob2Q9ImtlZXAiKQp0ZXN0IDwtIHBsb3Rfc2FtcGxlX2hlYXRtYXAoenltb19leHB0LCByb3dfbGFiZWw9bXlfbmFtZXMpCmBgYAoKIyBWYXJpYW50IHByb2ZpbGVzCgpgYGB7ciBvbGRuZXdfdmFyaWFudHN9Cm9sZF9leHB0IDwtIHNtKGNyZWF0ZV9leHB0KCJzYW1wbGVfc2hlZXRzL3RtcmMyX3NhbXBsZXNfMjAxOTEyMDMueGxzeCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfY29sdW1uPSJ0b3BoYXQyZmlsZSIpKQoKdHQgPC0gbHBfZXhwdCRleHByZXNzaW9uc2V0CnJvd25hbWVzKHR0KSA8LSBnc3ViKHBhdHRlcm49Il5leG9uXyIsIHJlcGxhY2VtZW50PSIiLCB4PXJvd25hbWVzKHR0KSkKcm93bmFtZXModHQpIDwtIGdzdWIocGF0dGVybj0iXFwuRTEkIiwgcmVwbGFjZW1lbnQ9IiIsIHg9cm93bmFtZXModHQpKQpscF9leHB0JGV4cHJlc3Npb25zZXQgPC0gdHQKCnR0IDwtIG9sZF9leHB0JGV4cHJlc3Npb25zZXQKcm93bmFtZXModHQpIDwtIGdzdWIocGF0dGVybj0iXmV4b25fIiwgcmVwbGFjZW1lbnQ9IiIsIHg9cm93bmFtZXModHQpKQpyb3duYW1lcyh0dCkgPC0gZ3N1YihwYXR0ZXJuPSJcXC4xJCIsIHJlcGxhY2VtZW50PSIiLCB4PXJvd25hbWVzKHR0KSkKb2xkX2V4cHQkZXhwcmVzc2lvbnNldCA8LSB0dAoKbmV3X3NucHMgPC0gc20oY291bnRfZXhwdF9zbnBzKGxwX2V4cHQsIGFubm90X2NvbHVtbj0iYmNmdGFibGUiKSkKb2xkX3NucHMgPC0gc20oY291bnRfZXhwdF9zbnBzKG9sZF9leHB0LCBhbm5vdF9jb2x1bW49ImJjZnRhYmxlIiwgc25wX2NvbHVtbj0yKSkKCmJvdGhfc25wcyA8LSBjb21iaW5lX2V4cHRzKG5ld19zbnBzLCBvbGRfc25wcykKYm90aF9ub3JtIDwtIHNtKG5vcm1hbGl6ZV9leHB0KGJvdGhfc25wcywgdHJhbnNmb3JtPSJsb2cyIiwgY29udmVydD0iY3BtIiwgZmlsdGVyPVRSVUUpKQoKc3RyYWlucyA8LSBib3RoX25vcm1bWyJkZXNpZ24iXV1bWyJzdHJhaW4iXV0KYm90aF9ub3JtIDwtIHNldF9leHB0X2NvbmRpdGlvbnMoYm90aF9ub3JtLCBmYWN0PXN0cmFpbnMpCnR0IDwtIHBsb3RfZGlzaGVhdChib3RoX25vcm0pCgpzbnBfc2V0cyA8LSBnZXRfc25wX3NldHMoYm90aF9zbnBzLCBmYWN0b3I9ImNvbmRpdGlvbiIpCmJvdGhfZXhwdCA8LSBjb21iaW5lX2V4cHRzKGxwX2V4cHQsIG9sZF9leHB0KQpzbnBfZ2VuZXMgPC0gc25wc192c19nZW5lcyhib3RoX2V4cHQsIHNucF9zZXRzLCBleHB0X25hbWVfY29sPSJjaHJvbW9zb21lIikKCnNucF9zdWJzZXQgPC0gc20oc25wX3N1YnNldF9nZW5lcygKICBib3RoX2V4cHQsIGJvdGhfc25wcywKICBnZW5lcz1jKCJMUEFMMTNfMTIwMDEwOTAwIiwgIkxQQUwxM18zNDAwMTMwMDAiLCAiTFBBTDEzXzAwMDA1NDEwMCIsCiAgICAgICAgICAiTFBBTDEzXzE0MDAwNjEwMCIsICJMUEFMMTNfMTgwMDE4NTAwIiwgIkxQQUwxM18zMjAwMjIzMDAiKSkpCgp6eW1vX2hlYXQgPC0gcGxvdF9zYW1wbGVfaGVhdG1hcChzbnBfc3Vic2V0LCByb3dfbGFiZWw9cm93bmFtZXMoZXhwcnMoc25wX3N1YnNldCkpKQoKZGVzIDwtIGJvdGhfbm9ybSRkZXNpZ24KbGlicmFyeShIZWF0cGx1cykKIyNobWNvbHMgPC0gY29sb3JSYW1wUGFsZXR0ZShjKCJ5ZWxsb3ciLCJibGFjayIsImRhcmtibHVlIikpKDI1NikKY29ycmVsYXRpb25zIDwtIGhwZ2xfY29yKGV4cHJzKGJvdGhfbm9ybSkpCm15ZGVuZHJvIDwtIGxpc3QoCiAgImNsdXN0ZnVuIiA9IGhjbHVzdCwKICAibHdkIiA9IDIuMCkKY29sX2RhdGEgPC0gYXMuZGF0YS5mcmFtZShkZXNbLCBjKCJzdHJhaW4iKV0pCnJvd19kYXRhIDwtIGFzLmRhdGEuZnJhbWUoZGVzWywgYygiYmF0Y2giKV0pCmNvbG5hbWVzKGNvbF9kYXRhKSA8LSBjKCJzdHJhaW4iKQpjb2xuYW1lcyhyb3dfZGF0YSkgPC0gYygiYmF0Y2giKQpteWFubm90IDwtIGxpc3QoCiAgIkNvbCIgPSBsaXN0KCJkYXRhIiA9IGNvbF9kYXRhKSwKICAiUm93IiA9IGxpc3QoImRhdGEiID0gcm93X2RhdGEpKQpteWNsdXN0IDwtIGxpc3QoImN1dGgiID0gMS4wLAogICAgICAgICAgICAgICAgImNvbCIgPSBCcmV3ZXJDbHVzdGVyQ29sKQpteWxhYnMgPC0gbGlzdCgKICAiUm93IiA9IGxpc3QoIm5yb3ciID0gNCksCiAgIkNvbCIgPSBsaXN0KCJucm93IiA9IDQpKQpobWNvbHMgPC0gY29sb3JSYW1wUGFsZXR0ZShjKCJkYXJrYmx1ZSIsICJiZWlnZSIpKSgxNzApCm1hcDEgPC0gYW5uSGVhdG1hcDIoCiAgY29ycmVsYXRpb25zLAogIGRlbmRyb2dyYW09bXlkZW5kcm8sCiAgYW5ub3RhdGlvbj1teWFubm90LAogIGNsdXN0ZXI9bXljbHVzdCwKICBsYWJlbHM9bXlsYWJzLAogIGNvbD1obWNvbHMpCnBsb3QobWFwMSkKbnVtX2NsdXN0ZXJzIDwtIG1heChtYXAxW1siY2x1c3RlciJdXVtbIlJvdyJdXVtbImdycCJdXSkKY2hvc2VuX3BhbGV0dGUgPC0gIkRhcmsyIgpuZXdfY29sb3JzIDwtIGdyRGV2aWNlczo6Y29sb3JSYW1wUGFsZXR0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgUkNvbG9yQnJld2VyOjpicmV3ZXIucGFsKG51bV9jbHVzdGVycywgY2hvc2VuX3BhbGV0dGUpKShudW1fY2x1c3RlcnMpCm15Y2x1c3QgPC0gbGlzdCgiY3V0aCIgPSAxLjAsCiAgICAgICAgICAgICAgICAiY29sIiA9IG5ld19jb2xvcnMpCm1hcDIgPC0gYW5uSGVhdG1hcDIoCiAgY29ycmVsYXRpb25zLAogIGRlbmRyb2dyYW09bXlkZW5kcm8sCiAgYW5ub3RhdGlvbj1teWFubm90LAogIGNsdXN0ZXI9bXljbHVzdCwKICBsYWJlbHM9bXlsYWJzLAogIHNjYWxlPSJub25lIiwKICBjb2w9aG1jb2xzKQpwbG90KG1hcDIpCmBgYAoKIyBaeW1vZGVtZSBmb3IgbmV3IHNhbXBsZXMKClRoZSBoZWF0bWFwIHByb2R1Y2VkIGhlcmUgc2hvdWxkIHNob3cgdGhlIHZhcmlhbnRzIG9ubHkgZm9yIHRoZSB6eW1vZGVtZSBnZW5lcy4KCmBgYHtyIG5ld196eW1vfQpuZXdfc2V0cyA8LSBnZXRfc25wX3NldHMobmV3X3NucHMsIGZhY3Rvcj0icGhlbm90eXBpY2NoYXJhY3RlcmlzdGljcyIpCnNucF9nZW5lcyA8LSBzbnBzX3ZzX2dlbmVzKHBoZW5vX2V4cHQsIG5ld19zZXRzLCBleHB0X25hbWVfY29sPSJjaHJvbW9zb21lIikKCnp5bW9fc3Vic2V0IDwtIHNtKHNucF9zdWJzZXRfZ2VuZXMoCiAgcGhlbm9fZXhwdCwgbmV3X3NucHMsCiAgZ2VuZXM9YygiTFBBTDEzXzEyMDAxMDkwMCIsICJMUEFMMTNfMzQwMDEzMDAwIiwgIkxQQUwxM18wMDAwNTQxMDAiLAogICAgICAgICAgIkxQQUwxM18xNDAwMDYxMDAiLCAiTFBBTDEzXzE4MDAxODUwMCIsICJMUEFMMTNfMzIwMDIyMzAwIikpKQoKenltb19zdWJzZXQgPC0gc2V0X2V4cHRfY29uZGl0aW9ucyh6eW1vX3N1YnNldCwgZmFjdD0icGhlbm90eXBpY2NoYXJhY3RlcmlzdGljcyIpCnp5bW9faGVhdCA8LSBwbG90X3NhbXBsZV9oZWF0bWFwKHp5bW9fc3Vic2V0LCByb3dfbGFiZWw9cm93bmFtZXMoZXhwcnMoc25wX3N1YnNldCkpKQpgYGAKCmBgYHtyIHNhdmVtZX0KaWYgKCFpc1RSVUUoZ2V0MCgic2tpcF9sb2FkIikpKSB7CiAgcGFuZGVyOjpwYW5kZXIoc2Vzc2lvbkluZm8oKSkKICBtZXNzYWdlKHBhc3RlMCgiVGhpcyBpcyBocGdsdG9vbHMgY29tbWl0OiAiLCBnZXRfZ2l0X2NvbW1pdCgpKSkKICBtZXNzYWdlKHBhc3RlMCgiU2F2aW5nIHRvICIsIHNhdmVmaWxlKSkKICB0bXAgPC0gc20oc2F2ZW1lKGZpbGVuYW1lPXNhdmVmaWxlKSkKfQpgYGAKCmBgYHtyIGxvYWRtZV9hZnRlciwgZXZhbD1GQUxTRX0KdG1wIDwtIGxvYWRtZShmaWxlbmFtZT1zYXZlZmlsZSkKYGBgCg==