Analysis of PhotosynQ data from aeroponics drought simulation test
performed 2024/06/04-2024/06/18. PhotosynQ measurements were taken every
day, for the most part. We used two accessions, UCR779 and Suvita2.
Drought treatment had misters on for 2 minutes then off for 20 minutes,
while control had misters on for 2 minutes and off for 5 minutes.
#load libraries
library("ggplot2")
library("cowplot")
library("ggpubr")
getwd()
[1] "C:/Users/J Lab/Desktop"
list.files(pattern=".csv")
[1] "aero_drought_sim_20240621.csv" "drought simulation FW_DW.csv"
PhotosynQ <- read.csv("aero_drought_sim_20240621.csv")
PhotosynQ
colnames(PhotosynQ)
[1] "ID" "Series" "Repeat" "Accession"
[5] "Rep" "Condition" "air_temp_kinetics" "Ambient.Humidity"
[9] "Ambient.Pressure" "Ambient.Temperature" "data_raw_PAM" "ECS_averaged_trace"
[13] "ECS_tau" "ECSt.mAU" "fitinput" "FmPrime"
[17] "FoPrime" "Fs" "FvP_over_FmP" "gH."
[21] "humidity2_K" "humidity_K" "kP700" "leaf.angle"
[25] "Leaf.Temperature" "Leaf.Temperature.Differenial" "Leaf.Temperature.Differential" "LEAF_temp"
[29] "leaf_thickness" "LEF" "LEFd_trace" "Light.Intensity..PAR."
[33] "NPQt" "outdata" "P700_DIRK_ampl" "P700_DIRK_averaged_trace"
[37] "P700_fitinput" "P700_outdata" "Phi2" "PhiNO"
[41] "PhiNPQ" "PS1.Active.Centers" "PS1.Open.Centers" "PS1.Over.Reduced.Centers"
[45] "PS1.Oxidized.Centers" "PSI_data_absorbance" "pump" "qL"
[49] "SPAD" "test_data_raw_PAM" "day" "time"
[53] "time2" "tP700" "v_initial_P700" "vH."
[57] "User" "Device.ID" "Latitude" "Longitude"
[61] "Issues"
#we are interested in: Condition, Rep, Accession, FoPrime, PhiNPQ, FvP_over_FmP, FmPrime, PS1.Active.Centers, PS1.Open.Centers, PS1.Over.Reduced.Centers, PS1.Oxidized.Centers, leaf_thickness, Leaf.Temperature, SPAD
PQ <- PhotosynQ[,c(4:6, 16:17, 19, 25, 29, 41:45, 49, 51)]
PQ
unique(PQ$day)
[1] "6/18/2024 0:00" "6/17/2024 0:00" "6/13/2024 0:00" "6/11/2024 0:00" "6/10/2024 0:00" "6/9/2024 0:00" "6/8/2024 0:00" "6/7/2024 0:00"
[9] "6/6/2024 0:00" "6/5/2024 0:00" "6/4/2024 0:00"
PQ$time <- as.factor(PQ$day)
PQ$day.of.stress <- PQ$day
PQ$day.of.stress <- gsub("6/4/2024 0:00", "0", PQ$day.of.stress)
PQ$day.of.stress <- gsub("6/5/2024 0:00", "1", PQ$day.of.stress)
PQ$day.of.stress <- gsub("6/6/2024 0:00", "2", PQ$day.of.stress)
PQ$day.of.stress <- gsub("6/7/2024 0:00", "3", PQ$day.of.stress)
PQ$day.of.stress <- gsub("6/8/2024 0:00", "4", PQ$day.of.stress)
PQ$day.of.stress <- gsub("6/9/2024 0:00", "5", PQ$day.of.stress)
PQ$day.of.stress <- gsub("6/10/2024 0:00", "6", PQ$day.of.stress)
PQ$day.of.stress <- gsub("6/11/2024 0:00", "7", PQ$day.of.stress)
PQ$day.of.stress <- gsub("6/13/2024 0:00", "9", PQ$day.of.stress)
PQ$day.of.stress <- gsub("6/17/2024 0:00", "13", PQ$day.of.stress)
PQ$day.of.stress <- gsub("6/18/2024 0:00", "14", PQ$day.of.stress)
colnames(PQ)
[1] "Accession" "Rep" "Condition" "FmPrime" "FoPrime"
[6] "FvP_over_FmP" "Leaf.Temperature" "leaf_thickness" "PhiNPQ" "PS1.Active.Centers"
[11] "PS1.Open.Centers" "PS1.Over.Reduced.Centers" "PS1.Oxidized.Centers" "SPAD" "day"
[16] "time" "day.of.stress"
PQ <- PQ[,c(17, 1:14)]
PQ
PQ$Accession <- gsub("UCR", "UCR779", PQ$Accession)
PQ$Accession <- gsub("UCR779779", "UCR779", PQ$Accession)
PQ$Accession <- gsub("Suvita", "Suvita2", PQ$Accession)
PQ$Accession <- gsub("Suvita22", "Suvita2", PQ$Accession)
PQ$Accession <- gsub("suvita2", "Suvita2", PQ$Accession)
unique(PQ$Accession)
[1] "UCR779" "Suvita2"
unique(PQ$Rep)
[1] 1 2
PQ$Plant.ID <- paste(PQ$Accession, PQ$Rep, PQ$Condition, sep="_")
PQ
##Facet by condition
PQ$Plant.ID <- as.factor(PQ$Plant.ID)
PQ$FmPrime <- as.numeric(as.character(PQ$FmPrime))
PQ
PQ$day.of.stress <- as.factor(as.character(PQ$day.of.stress))
PQ
FmP_over_time <- ggplot(data = PQ, aes(x = day.of.stress, y = FmPrime, group = Plant.ID, colour = Accession), na.rm = TRUE) + theme_classic() + ylim(0, NA)
FmP_over_time <- FmP_over_time + geom_line(alpha = 0.4)
FmP_over_time <- FmP_over_time + facet_wrap(~ Condition)
FmP_over_time <- FmP_over_time + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Accession), alpha = 0.3) + stat_summary(fun = mean, aes(group = Accession), linewidth = 0.7, geom = "line", linetype = "dashed")
FmP_over_time <- FmP_over_time + stat_compare_means(aes(group = Accession), label = "p.signif", method = "t.test", hide.ns = TRUE)
FmP_over_time <- FmP_over_time + ylab("FmPrime (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
FmP_over_time

PQ$FoPrime <- as.numeric(as.character(PQ$FoPrime))
FoP_over_time <- ggplot(data = PQ, aes(x = day.of.stress, y = FoPrime, group = Plant.ID, colour = Accession), na.rm = TRUE) + theme_classic() + ylim(0, NA)
FoP_over_time <- FoP_over_time + geom_line(alpha = 0.4)
FoP_over_time <- FoP_over_time + facet_wrap(~ Condition)
FoP_over_time <- FoP_over_time + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Accession), alpha = 0.3) + stat_summary(fun = mean, aes(group = Accession), linewidth = 0.7, geom = "line", linetype = "dashed")
FoP_over_time <- FoP_over_time + stat_compare_means(aes(group = Accession), label = "p.signif", method = "t.test", hide.ns = TRUE)
FoP_over_time <- FoP_over_time + ylab("FoPrime (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
FoP_over_time

PQ$FvP_over_FmP <- as.numeric(as.character(PQ$FvP_over_FmP))
FvP_over_FmP_over_time <- ggplot(data = PQ, aes(x = day.of.stress, y = FvP_over_FmP, group = Plant.ID, colour = Accession), na.rm = TRUE) + theme_classic() + ylim(0, NA)
FvP_over_FmP_over_time <- FvP_over_FmP_over_time + geom_line(alpha = 0.4)
FvP_over_FmP_over_time <- FvP_over_FmP_over_time + facet_wrap(~ Condition)
FvP_over_FmP_over_time <- FvP_over_FmP_over_time + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Accession), alpha = 0.3) + stat_summary(fun = mean, aes(group = Accession), linewidth = 0.7, geom = "line", linetype = "dashed")
FvP_over_FmP_over_time <- FvP_over_FmP_over_time + stat_compare_means(aes(group = Accession), label = "p.signif", method = "t.test", hide.ns = TRUE)
FvP_over_FmP_over_time <- FvP_over_FmP_over_time + ylab("FvP_over_FmP (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
FvP_over_FmP_over_time

PQ$Leaf.Temperature <- as.numeric(as.character(PQ$Leaf.Temperature))
Leaf_temp_over_time <- ggplot(data = PQ, aes(x = day.of.stress, y = Leaf.Temperature, group = Plant.ID, colour = Accession), na.rm = TRUE) + theme_classic() + ylim(0, NA)
Leaf_temp_over_time <- Leaf_temp_over_time + geom_line(alpha = 0.4)
Leaf_temp_over_time <- Leaf_temp_over_time + facet_wrap(~ Condition)
Leaf_temp_over_time <- Leaf_temp_over_time + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Accession), alpha = 0.3) + stat_summary(fun = mean, aes(group = Accession), linewidth = 0.7, geom = "line", linetype = "dashed")
Leaf_temp_over_time <- Leaf_temp_over_time + stat_compare_means(aes(group = Accession), label = "p.signif", method = "t.test", hide.ns = TRUE)
Leaf_temp_over_time <- Leaf_temp_over_time + ylab("Leaf temperature (C)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
Leaf_temp_over_time

PQ$leaf_thickness <- as.numeric(as.character(PQ$leaf_thickness))
Leaf_thickness_over_time <- ggplot(data = PQ, aes(x = day.of.stress, y = leaf_thickness, group = Plant.ID, colour = Accession), na.rm = TRUE) + theme_classic() + ylim(0, NA)
Leaf_thickness_over_time <- Leaf_thickness_over_time + geom_line(alpha = 0.4)
Leaf_thickness_over_time <- Leaf_thickness_over_time + facet_wrap(~ Condition)
Leaf_thickness_over_time <- Leaf_thickness_over_time + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Accession), alpha = 0.3) + stat_summary(fun = mean, aes(group = Accession), linewidth = 0.7, geom = "line", linetype = "dashed")
Leaf_thickness_over_time <- Leaf_thickness_over_time + stat_compare_means(aes(group = Accession), label = "p.signif", method = "t.test", hide.ns = TRUE)
Leaf_thickness_over_time <- Leaf_thickness_over_time + ylab("Leaf_thickness (mm)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
Leaf_thickness_over_time

PQ$PhiNPQ <- as.numeric(as.character(PQ$PhiNPQ))
PhiNPQ_over_time <- ggplot(data = PQ, aes(x = day.of.stress, y = PhiNPQ, group = Plant.ID, colour = Accession), na.rm = TRUE) + theme_classic() + ylim(0, NA)
PhiNPQ_over_time <- PhiNPQ_over_time + geom_line(alpha = 0.4)
PhiNPQ_over_time <- PhiNPQ_over_time + facet_wrap(~ Condition)
PhiNPQ_over_time <- PhiNPQ_over_time + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Accession), alpha = 0.3) + stat_summary(fun = mean, aes(group = Accession), linewidth = 0.7, geom = "line", linetype = "dashed")
PhiNPQ_over_time <- PhiNPQ_over_time + stat_compare_means(aes(group = Accession), label = "p.signif", method = "t.test", hide.ns = TRUE)
PhiNPQ_over_time <- PhiNPQ_over_time + ylab("PhiNPQ (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
PhiNPQ_over_time

PQ$PS1.Active.Centers <- as.numeric(as.character(PQ$PS1.Active.Centers))
PS1_active_centers_over_time <- ggplot(data = PQ, aes(x = day.of.stress, y = PS1.Active.Centers, group = Plant.ID, colour = Accession), na.rm = TRUE) + theme_classic() + ylim(0, NA)
PS1_active_centers_over_time <- PS1_active_centers_over_time + geom_line(alpha = 0.4)
PS1_active_centers_over_time <- PS1_active_centers_over_time + facet_wrap(~ Condition)
PS1_active_centers_over_time <- PS1_active_centers_over_time + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Accession), alpha = 0.3) + stat_summary(fun = mean, aes(group = Accession), linewidth = 0.7, geom = "line", linetype = "dashed")
PS1_active_centers_over_time <- PS1_active_centers_over_time + stat_compare_means(aes(group = Accession), label = "p.signif", method = "t.test", hide.ns = TRUE)
PS1_active_centers_over_time <- PS1_active_centers_over_time + ylab("PS1 Active Centers (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
PS1_active_centers_over_time

PQ$PS1.Open.Centers <- as.numeric(as.character(PQ$PS1.Open.Centers))
PS1_Open_Centers_over_time <- ggplot(data = PQ, aes(x = day.of.stress, y = PS1.Open.Centers, group = Plant.ID, colour = Accession), na.rm = TRUE) + theme_classic() + ylim(0, NA)
PS1_Open_Centers_over_time <- PS1_Open_Centers_over_time + geom_line(alpha = 0.4)
PS1_Open_Centers_over_time <- PS1_Open_Centers_over_time + facet_wrap(~ Condition)
PS1_Open_Centers_over_time <- PS1_Open_Centers_over_time + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Accession), alpha = 0.3) + stat_summary(fun = mean, aes(group = Accession), linewidth = 0.7, geom = "line", linetype = "dashed")
PS1_Open_Centers_over_time <- PS1_Open_Centers_over_time + stat_compare_means(aes(group = Accession), label = "p.signif", method = "t.test", hide.ns = TRUE)
PS1_Open_Centers_over_time <- PS1_Open_Centers_over_time + ylab("PS1 Open Centers (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
PS1_Open_Centers_over_time

PQ$PS1.Over.Reduced.Centers <- as.numeric(as.character(PQ$PS1.Over.Reduced.Centers))
PS1_Over_Reduced.Centers_over_time <- ggplot(data = PQ, aes(x = day.of.stress, y = PS1.Over.Reduced.Centers, group = Plant.ID, colour = Accession), na.rm = TRUE) + theme_classic()
PS1_Over_Reduced.Centers_over_time <- PS1_Over_Reduced.Centers_over_time + geom_line(alpha = 0.4)
PS1_Over_Reduced.Centers_over_time <- PS1_Over_Reduced.Centers_over_time + facet_wrap(~ Condition)
PS1_Over_Reduced.Centers_over_time <- PS1_Over_Reduced.Centers_over_time + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Accession), alpha = 0.3) + stat_summary(fun = mean, aes(group = Accession), linewidth = 0.7, geom = "line", linetype = "dashed")
PS1_Over_Reduced.Centers_over_time <- PS1_Over_Reduced.Centers_over_time + stat_compare_means(aes(group = Accession), label = "p.signif", method = "t.test", hide.ns = TRUE)
PS1_Over_Reduced.Centers_over_time <- PS1_Over_Reduced.Centers_over_time + ylab("PS1 Over Reduced Centers (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
PS1_Over_Reduced.Centers_over_time

PQ$PS1.Oxidized.Centers <- as.numeric(as.character(PQ$PS1.Oxidized.Centers))
PS1_Oxidized_Centers_over_time <- ggplot(data = PQ, aes(x = day.of.stress, y = PS1.Oxidized.Centers, group = Plant.ID, colour = Accession), na.rm = TRUE) + theme_classic()
PS1_Oxidized_Centers_over_time <- PS1_Oxidized_Centers_over_time + geom_line(alpha = 0.4)
PS1_Oxidized_Centers_over_time <- PS1_Oxidized_Centers_over_time + facet_wrap(~ Condition)
PS1_Oxidized_Centers_over_time <- PS1_Oxidized_Centers_over_time + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Accession), alpha = 0.3) + stat_summary(fun = mean, aes(group = Accession), linewidth = 0.7, geom = "line", linetype = "dashed")
PS1_Oxidized_Centers_over_time <- PS1_Oxidized_Centers_over_time + stat_compare_means(aes(group = Accession), label = "p.signif", method = "t.test", hide.ns = TRUE)
PS1_Oxidized_Centers_over_time <- PS1_Oxidized_Centers_over_time + ylab("PS1 Oxidized Centers (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
PS1_Oxidized_Centers_over_time

PQ$SPAD <- as.numeric(as.character(PQ$SPAD))
SPAD_over_time <- ggplot(data = PQ, aes(x = day.of.stress, y = SPAD, group = Plant.ID, colour = Accession), na.rm = TRUE) + theme_classic()
SPAD_over_time <- SPAD_over_time + geom_line(alpha = 0.4)
SPAD_over_time <- SPAD_over_time + facet_wrap(~ Condition)
SPAD_over_time <- SPAD_over_time + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Accession), alpha = 0.3) + stat_summary(fun = mean, aes(group = Accession), linewidth = 0.7, geom = "line", linetype = "dashed")
SPAD_over_time <- SPAD_over_time + stat_compare_means(aes(group = Accession), label = "p.signif", method = "t.test", hide.ns = TRUE)
SPAD_over_time <- SPAD_over_time + ylab("SPAD (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
SPAD_over_time

##Facet by accession
FmP_by_acc <- ggplot(data = PQ, aes(x = day.of.stress, y = FmPrime, group = Plant.ID, colour = Condition), na.rm = TRUE) + theme_classic() + ylim(0, NA)
FmP_by_acc <- FmP_by_acc + geom_line(alpha = 0.4)
FmP_by_acc <- FmP_by_acc + facet_wrap(~ Accession)
FmP_by_acc <- FmP_by_acc + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Condition), alpha = 0.3) + stat_summary(fun = mean, aes(group = Condition), linewidth = 0.7, geom = "line", linetype = "dashed")
FmP_by_acc <- FmP_by_acc + stat_compare_means(aes(group = Condition), label = "p.signif", method = "t.test", hide.ns = TRUE)
FmP_by_acc <- FmP_by_acc + ylab("FmPrime (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
FmP_by_acc

Fo_by_acc <- ggplot(data = PQ, aes(x = day.of.stress, y = FoPrime, group = Plant.ID, colour = Condition), na.rm = TRUE) + theme_classic() + ylim(0, NA)
Fo_by_acc <- Fo_by_acc + geom_line(alpha = 0.4)
Fo_by_acc <- Fo_by_acc + facet_wrap(~ Accession)
Fo_by_acc <- Fo_by_acc + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Condition), alpha = 0.3) + stat_summary(fun = mean, aes(group = Condition), linewidth = 0.7, geom = "line", linetype = "dashed")
Fo_by_acc <- Fo_by_acc + stat_compare_means(aes(group = Condition), label = "p.signif", method = "t.test", hide.ns = TRUE)
Fo_by_acc <- Fo_by_acc + ylab("FoPrime (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
Fo_by_acc

FvPoverFmP_by_acc <- ggplot(data = PQ, aes(x = day.of.stress, y = FvP_over_FmP, group = Plant.ID, colour = Condition), na.rm = TRUE) + theme_classic() + ylim(0, NA)
FvPoverFmP_by_acc <- FvPoverFmP_by_acc + geom_line(alpha = 0.4)
FvPoverFmP_by_acc <- FvPoverFmP_by_acc + facet_wrap(~ Accession)
FvPoverFmP_by_acc <- FvPoverFmP_by_acc + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Condition), alpha = 0.3) + stat_summary(fun = mean, aes(group = Condition), linewidth = 0.7, geom = "line", linetype = "dashed")
FvPoverFmP_by_acc <- FvPoverFmP_by_acc + stat_compare_means(aes(group = Condition), label = "p.signif", method = "t.test", hide.ns = TRUE)
FvPoverFmP_by_acc <- FvPoverFmP_by_acc + ylab("FvP_over_FmP (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
FvPoverFmP_by_acc

leaftemp_by_acc <- ggplot(data = PQ, aes(x = day.of.stress, y = Leaf.Temperature, group = Plant.ID, colour = Condition), na.rm = TRUE) + theme_classic() + ylim(0, NA)
leaftemp_by_acc <- leaftemp_by_acc + geom_line(alpha = 0.4)
leaftemp_by_acc <- leaftemp_by_acc + facet_wrap(~ Accession)
leaftemp_by_acc <- leaftemp_by_acc + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Condition), alpha = 0.3) + stat_summary(fun = mean, aes(group = Condition), linewidth = 0.7, geom = "line", linetype = "dashed")
leaftemp_by_acc <- leaftemp_by_acc + stat_compare_means(aes(group = Condition), label = "p.signif", method = "t.test", hide.ns = TRUE)
leaftemp_by_acc <- leaftemp_by_acc + ylab("Leaf.Temperature (C)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
leaftemp_by_acc

leafthick_by_acc <- ggplot(data = PQ, aes(x = day.of.stress, y = leaf_thickness, group = Plant.ID, colour = Condition), na.rm = TRUE) + theme_classic() + ylim(0, NA)
leafthick_by_acc <- leafthick_by_acc + geom_line(alpha = 0.4)
leafthick_by_acc <- leafthick_by_acc + facet_wrap(~ Accession)
leafthick_by_acc <- leafthick_by_acc + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Condition), alpha = 0.3) + stat_summary(fun = mean, aes(group = Condition), linewidth = 0.7, geom = "line", linetype = "dashed")
leafthick_by_acc <- leafthick_by_acc + stat_compare_means(aes(group = Condition), label = "p.signif", method = "t.test", hide.ns = TRUE)
leafthick_by_acc <- leafthick_by_acc + ylab("leaf_thickness (mm)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
leafthick_by_acc

PhiNPQ_by_acc <- ggplot(data = PQ, aes(x = day.of.stress, y = PhiNPQ, group = Plant.ID, colour = Condition), na.rm = TRUE) + theme_classic() + ylim(0, NA)
PhiNPQ_by_acc <- PhiNPQ_by_acc + geom_line(alpha = 0.4)
PhiNPQ_by_acc <- PhiNPQ_by_acc + facet_wrap(~ Accession)
PhiNPQ_by_acc <- PhiNPQ_by_acc + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Condition), alpha = 0.3) + stat_summary(fun = mean, aes(group = Condition), linewidth = 0.7, geom = "line", linetype = "dashed")
PhiNPQ_by_acc <- PhiNPQ_by_acc + stat_compare_means(aes(group = Condition), label = "p.signif", method = "t.test", hide.ns = TRUE)
PhiNPQ_by_acc <- PhiNPQ_by_acc + ylab("PhiNPQ (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
PhiNPQ_by_acc

activecenters_by_acc <- ggplot(data = PQ, aes(x = day.of.stress, y = PS1.Active.Centers, group = Plant.ID, colour = Condition), na.rm = TRUE) + theme_classic() + ylim(0, NA)
activecenters_by_acc <- activecenters_by_acc + geom_line(alpha = 0.4)
activecenters_by_acc <- activecenters_by_acc + facet_wrap(~ Accession)
activecenters_by_acc <- activecenters_by_acc + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Condition), alpha = 0.3) + stat_summary(fun = mean, aes(group = Condition), linewidth = 0.7, geom = "line", linetype = "dashed")
activecenters_by_acc <- activecenters_by_acc + stat_compare_means(aes(group = Condition), label = "p.signif", method = "t.test", hide.ns = TRUE)
activecenters_by_acc <- activecenters_by_acc + ylab("PS1.Active.Centers (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
activecenters_by_acc

opencenters_by_acc <- ggplot(data = PQ, aes(x = day.of.stress, y = PS1.Open.Centers, group = Plant.ID, colour = Condition), na.rm = TRUE) + theme_classic() + ylim(0, NA)
opencenters_by_acc <- opencenters_by_acc + geom_line(alpha = 0.4)
opencenters_by_acc <- opencenters_by_acc + facet_wrap(~ Accession)
opencenters_by_acc <- opencenters_by_acc + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Condition), alpha = 0.3) + stat_summary(fun = mean, aes(group = Condition), linewidth = 0.7, geom = "line", linetype = "dashed")
opencenters_by_acc <- opencenters_by_acc + stat_compare_means(aes(group = Condition), label = "p.signif", method = "t.test", hide.ns = TRUE)
opencenters_by_acc <- opencenters_by_acc + ylab("PS1.Open.Centers (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
opencenters_by_acc

overreduced_by_acc <- ggplot(data = PQ, aes(x = day.of.stress, y = PS1.Over.Reduced.Centers, group = Plant.ID, colour = Condition), na.rm = TRUE) + theme_classic()
overreduced_by_acc <- overreduced_by_acc + geom_line(alpha = 0.4)
overreduced_by_acc <- overreduced_by_acc + facet_wrap(~ Accession)
overreduced_by_acc <- overreduced_by_acc + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Condition), alpha = 0.3) + stat_summary(fun = mean, aes(group = Condition), linewidth = 0.7, geom = "line", linetype = "dashed")
overreduced_by_acc <- overreduced_by_acc + stat_compare_means(aes(group = Condition), label = "p.signif", method = "t.test", hide.ns = TRUE)
overreduced_by_acc <- overreduced_by_acc + ylab("PS1.Over.Reduced.Centers (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
overreduced_by_acc

oxidized_by_acc <- ggplot(data = PQ, aes(x = day.of.stress, y = PS1.Oxidized.Centers, group = Plant.ID, colour = Condition), na.rm = TRUE) + theme_classic()
oxidized_by_acc <- oxidized_by_acc + geom_line(alpha = 0.4)
oxidized_by_acc <- oxidized_by_acc + facet_wrap(~ Accession)
oxidized_by_acc <- oxidized_by_acc + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Condition), alpha = 0.3) + stat_summary(fun = mean, aes(group = Condition), linewidth = 0.7, geom = "line", linetype = "dashed")
oxidized_by_acc <- oxidized_by_acc + stat_compare_means(aes(group = Condition), label = "p.signif", method = "t.test", hide.ns = TRUE)
oxidized_by_acc <- oxidized_by_acc + ylab("PS1.Oxidized.Centers (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
oxidized_by_acc

SPAD_by_acc <- ggplot(data = PQ, aes(x = day.of.stress, y = SPAD, group = Plant.ID, colour = Condition), na.rm = TRUE) + theme_classic() + ylim(0, NA)
SPAD_by_acc <- SPAD_by_acc + geom_line(alpha = 0.4)
SPAD_by_acc <- SPAD_by_acc + facet_wrap(~ Accession)
SPAD_by_acc <- SPAD_by_acc + stat_summary(fun.data = mean_se, linetype = 0, aes(group = Condition), alpha = 0.3) + stat_summary(fun = mean, aes(group = Condition), linewidth = 0.7, geom = "line", linetype = "dashed")
SPAD_by_acc <- SPAD_by_acc + stat_compare_means(aes(group = Condition), label = "p.signif", method = "t.test", hide.ns = TRUE)
SPAD_by_acc <- SPAD_by_acc + ylab("SPAD (a.u.)") + xlab("Day of Stress") + scale_color_manual(values=c("blue", "red"))
SPAD_by_acc

#save all as PDF
#facet condition
pdf("FmPrime_facet_condition.pdf", width = 10, height = 7)
plot(FmP_over_time)
dev.off()
null device
1
pdf("FoPrime_facet_condition.pdf", width = 10, height = 7)
plot(FoP_over_time)
dev.off()
null device
1
pdf("FvP_over_FmP_facet_condition.pdf", width = 10, height = 7)
plot(FvP_over_FmP_over_time)
dev.off()
null device
1
pdf("leaf_temp_facet_condition.pdf", width = 10, height = 7)
plot(Leaf_temp_over_time)
dev.off()
null device
1
pdf("leaf_thickness_facet_condition.pdf", width = 10, height = 7)
plot(Leaf_thickness_over_time)
dev.off()
null device
1
pdf("PhiNPQ_facet_condition.pdf", width = 10, height = 7)
plot(PhiNPQ_over_time)
dev.off()
null device
1
pdf("PS1_active_centers_facet_condition.pdf", width = 10, height = 7)
plot(PS1_active_centers_over_time)
dev.off()
null device
1
pdf("PS1_open_centers_facet_condition.pdf", width = 10, height = 7)
plot(PS1_Open_Centers_over_time)
dev.off()
null device
1
pdf("PS1_over_reduced_centers_facet_condition.pdf", width = 10, height = 7)
plot(PS1_Over_Reduced.Centers_over_time)
dev.off()
null device
1
pdf("PS1_oxidized_centers_facet_condition.pdf", width = 10, height = 7)
plot(PS1_Oxidized_Centers_over_time)
dev.off()
null device
1
pdf("SPAD_facet_condition.pdf", width = 10, height = 7)
plot(SPAD_over_time)
dev.off()
null device
1
#facet accession
pdf("FmPrime_facet_accession.pdf", width = 10, height = 7)
plot(FmP_by_acc)
dev.off()
null device
1
pdf("FoPrime_facet_accession.pdf", width = 10, height = 7)
plot(Fo_by_acc)
dev.off()
null device
1
pdf("FvP_over_FmP_facet_accession.pdf", width = 10, height = 7)
plot(FvPoverFmP_by_acc)
dev.off()
null device
1
pdf("leaf_temp_facet_accession.pdf", width = 10, height = 7)
plot(leaftemp_by_acc)
dev.off()
null device
1
pdf("leaf_thickness_facet_accession.pdf", width = 10, height = 7)
plot(leafthick_by_acc)
dev.off()
null device
1
pdf("PhiNPQ_facet_accession.pdf", width = 10, height = 7)
plot(PhiNPQ_by_acc)
dev.off()
null device
1
pdf("PS1_active_centers_facet_accession.pdf", width = 10, height = 7)
plot(activecenters_by_acc)
dev.off()
null device
1
pdf("PS1_open_centers_facet_accession.pdf", width = 10, height = 7)
plot(opencenters_by_acc)
dev.off()
null device
1
pdf("PS1_over_reduced_centers_facet_accession.pdf", width = 10, height = 7)
plot(overreduced_by_acc)
dev.off()
null device
1
pdf("PS1_oxidized_centers_facet_accession.pdf", width = 10, height = 7)
plot(oxidized_by_acc)
dev.off()
null device
1
pdf("SPAD_facet_accession.pdf", width = 10, height = 7)
plot(SPAD_by_acc)
dev.off()
null device
1
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpBbmFseXNpcyBvZiBQaG90b3N5blEgZGF0YSBmcm9tIGFlcm9wb25pY3MgZHJvdWdodCBzaW11bGF0aW9uIHRlc3QgcGVyZm9ybWVkIDIwMjQvMDYvMDQtMjAyNC8wNi8xOC4gUGhvdG9zeW5RIG1lYXN1cmVtZW50cyB3ZXJlIHRha2VuIGV2ZXJ5IGRheSwgZm9yIHRoZSBtb3N0IHBhcnQuIFdlIHVzZWQgdHdvIGFjY2Vzc2lvbnMsIFVDUjc3OSBhbmQgU3V2aXRhMi4gRHJvdWdodCB0cmVhdG1lbnQgaGFkIG1pc3RlcnMgb24gZm9yIDIgbWludXRlcyB0aGVuIG9mZiBmb3IgMjAgbWludXRlcywgd2hpbGUgY29udHJvbCBoYWQgbWlzdGVycyBvbiBmb3IgMiBtaW51dGVzIGFuZCBvZmYgZm9yIDUgbWludXRlcy4gDQoNCmBgYHtyfQ0KI2xvYWQgbGlicmFyaWVzDQpsaWJyYXJ5KCJnZ3Bsb3QyIikNCmxpYnJhcnkoImNvd3Bsb3QiKQ0KbGlicmFyeSgiZ2dwdWJyIikNCmBgYA0KYGBge3J9DQpnZXR3ZCgpDQpsaXN0LmZpbGVzKHBhdHRlcm49Ii5jc3YiKQ0KUGhvdG9zeW5RIDwtIHJlYWQuY3N2KCJhZXJvX2Ryb3VnaHRfc2ltXzIwMjQwNjIxLmNzdiIpDQpQaG90b3N5blENCmBgYA0KYGBge3J9DQpjb2xuYW1lcyhQaG90b3N5blEpDQojd2UgYXJlIGludGVyZXN0ZWQgaW46IENvbmRpdGlvbiwgUmVwLCBBY2Nlc3Npb24sIEZvUHJpbWUsIFBoaU5QUSwgRnZQX292ZXJfRm1QLCBGbVByaW1lLCBQUzEuQWN0aXZlLkNlbnRlcnMsIFBTMS5PcGVuLkNlbnRlcnMsIFBTMS5PdmVyLlJlZHVjZWQuQ2VudGVycywgUFMxLk94aWRpemVkLkNlbnRlcnMsIGxlYWZfdGhpY2tuZXNzLCBMZWFmLlRlbXBlcmF0dXJlLCBTUEFEDQpQUSA8LSBQaG90b3N5blFbLGMoNDo2LCAxNjoxNywgMTksIDI1LCAyOSwgNDE6NDUsIDQ5LCA1MSldDQpQUQ0KYGBgDQpgYGB7cn0NCnVuaXF1ZShQUSRkYXkpDQpQUSR0aW1lIDwtIGFzLmZhY3RvcihQUSRkYXkpDQpQUSRkYXkub2Yuc3RyZXNzIDwtIFBRJGRheQ0KUFEkZGF5Lm9mLnN0cmVzcyA8LSBnc3ViKCI2LzQvMjAyNCAwOjAwIiwgIjAiLCBQUSRkYXkub2Yuc3RyZXNzKQ0KUFEkZGF5Lm9mLnN0cmVzcyA8LSBnc3ViKCI2LzUvMjAyNCAwOjAwIiwgIjEiLCBQUSRkYXkub2Yuc3RyZXNzKQ0KUFEkZGF5Lm9mLnN0cmVzcyA8LSBnc3ViKCI2LzYvMjAyNCAwOjAwIiwgIjIiLCBQUSRkYXkub2Yuc3RyZXNzKQ0KUFEkZGF5Lm9mLnN0cmVzcyA8LSBnc3ViKCI2LzcvMjAyNCAwOjAwIiwgIjMiLCBQUSRkYXkub2Yuc3RyZXNzKQ0KUFEkZGF5Lm9mLnN0cmVzcyA8LSBnc3ViKCI2LzgvMjAyNCAwOjAwIiwgIjQiLCBQUSRkYXkub2Yuc3RyZXNzKQ0KUFEkZGF5Lm9mLnN0cmVzcyA8LSBnc3ViKCI2LzkvMjAyNCAwOjAwIiwgIjUiLCBQUSRkYXkub2Yuc3RyZXNzKQ0KUFEkZGF5Lm9mLnN0cmVzcyA8LSBnc3ViKCI2LzEwLzIwMjQgMDowMCIsICI2IiwgUFEkZGF5Lm9mLnN0cmVzcykNClBRJGRheS5vZi5zdHJlc3MgPC0gZ3N1YigiNi8xMS8yMDI0IDA6MDAiLCAiNyIsIFBRJGRheS5vZi5zdHJlc3MpDQpQUSRkYXkub2Yuc3RyZXNzIDwtIGdzdWIoIjYvMTMvMjAyNCAwOjAwIiwgIjkiLCBQUSRkYXkub2Yuc3RyZXNzKQ0KUFEkZGF5Lm9mLnN0cmVzcyA8LSBnc3ViKCI2LzE3LzIwMjQgMDowMCIsICIxMyIsIFBRJGRheS5vZi5zdHJlc3MpDQpQUSRkYXkub2Yuc3RyZXNzIDwtIGdzdWIoIjYvMTgvMjAyNCAwOjAwIiwgIjE0IiwgUFEkZGF5Lm9mLnN0cmVzcykNCmNvbG5hbWVzKFBRKQ0KUFEgPC0gUFFbLGMoMTcsIDE6MTQpXQ0KUFENCg0KUFEkQWNjZXNzaW9uIDwtIGdzdWIoIlVDUiIsICJVQ1I3NzkiLCBQUSRBY2Nlc3Npb24pDQpQUSRBY2Nlc3Npb24gPC0gZ3N1YigiVUNSNzc5Nzc5IiwgIlVDUjc3OSIsIFBRJEFjY2Vzc2lvbikNClBRJEFjY2Vzc2lvbiA8LSBnc3ViKCJTdXZpdGEiLCAiU3V2aXRhMiIsIFBRJEFjY2Vzc2lvbikNClBRJEFjY2Vzc2lvbiA8LSBnc3ViKCJTdXZpdGEyMiIsICJTdXZpdGEyIiwgUFEkQWNjZXNzaW9uKQ0KUFEkQWNjZXNzaW9uIDwtIGdzdWIoInN1dml0YTIiLCAiU3V2aXRhMiIsIFBRJEFjY2Vzc2lvbikNCnVuaXF1ZShQUSRBY2Nlc3Npb24pDQp1bmlxdWUoUFEkUmVwKQ0KUFEkUGxhbnQuSUQgPC0gcGFzdGUoUFEkQWNjZXNzaW9uLCBQUSRSZXAsIFBRJENvbmRpdGlvbiwgc2VwPSJfIikNClBRDQpgYGANCiMjRmFjZXQgYnkgY29uZGl0aW9uDQpgYGB7cn0NClBRJFBsYW50LklEIDwtIGFzLmZhY3RvcihQUSRQbGFudC5JRCkNCg0KUFEkRm1QcmltZSA8LSBhcy5udW1lcmljKGFzLmNoYXJhY3RlcihQUSRGbVByaW1lKSkNClBRDQpQUSRkYXkub2Yuc3RyZXNzIDwtIGFzLmZhY3Rvcihhcy5jaGFyYWN0ZXIoUFEkZGF5Lm9mLnN0cmVzcykpDQpQUQ0KRm1QX292ZXJfdGltZSA8LSBnZ3Bsb3QoZGF0YSA9IFBRLCBhZXMoeCA9IGRheS5vZi5zdHJlc3MsIHkgPSBGbVByaW1lLCBncm91cCA9IFBsYW50LklELCBjb2xvdXIgPSBBY2Nlc3Npb24pLCBuYS5ybSA9IFRSVUUpICsgdGhlbWVfY2xhc3NpYygpICsgeWxpbSgwLCBOQSkNCkZtUF9vdmVyX3RpbWUgPC0gRm1QX292ZXJfdGltZSArIGdlb21fbGluZShhbHBoYSA9IDAuNCkNCkZtUF9vdmVyX3RpbWUgPC0gRm1QX292ZXJfdGltZSArIGZhY2V0X3dyYXAofiBDb25kaXRpb24pDQpGbVBfb3Zlcl90aW1lIDwtIEZtUF9vdmVyX3RpbWUgKyBzdGF0X3N1bW1hcnkoZnVuLmRhdGEgPSBtZWFuX3NlLCBsaW5ldHlwZSA9IDAsIGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGFscGhhID0gMC4zKSArIHN0YXRfc3VtbWFyeShmdW4gPSBtZWFuLCBhZXMoZ3JvdXAgPSBBY2Nlc3Npb24pLCBsaW5ld2lkdGggPSAwLjcsIGdlb20gPSAibGluZSIsIGxpbmV0eXBlID0gImRhc2hlZCIpDQpGbVBfb3Zlcl90aW1lIDwtIEZtUF9vdmVyX3RpbWUgKyBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gQWNjZXNzaW9uKSwgbGFiZWwgPSAicC5zaWduaWYiLCBtZXRob2QgPSAidC50ZXN0IiwgaGlkZS5ucyA9IFRSVUUpDQpGbVBfb3Zlcl90aW1lIDwtIEZtUF9vdmVyX3RpbWUgKyB5bGFiKCJGbVByaW1lIChhLnUuKSIpICsgeGxhYigiRGF5IG9mIFN0cmVzcyIpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJibHVlIiwgInJlZCIpKQ0KRm1QX292ZXJfdGltZQ0KDQpgYGANCg0KYGBge3J9DQpQUSRGb1ByaW1lIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKFBRJEZvUHJpbWUpKQ0KDQpGb1Bfb3Zlcl90aW1lIDwtIGdncGxvdChkYXRhID0gUFEsIGFlcyh4ID0gZGF5Lm9mLnN0cmVzcywgeSA9IEZvUHJpbWUsIGdyb3VwID0gUGxhbnQuSUQsIGNvbG91ciA9IEFjY2Vzc2lvbiksIG5hLnJtID0gVFJVRSkgKyB0aGVtZV9jbGFzc2ljKCkgKyB5bGltKDAsIE5BKQ0KRm9QX292ZXJfdGltZSA8LSBGb1Bfb3Zlcl90aW1lICsgZ2VvbV9saW5lKGFscGhhID0gMC40KQ0KRm9QX292ZXJfdGltZSA8LSBGb1Bfb3Zlcl90aW1lICsgZmFjZXRfd3JhcCh+IENvbmRpdGlvbikNCkZvUF9vdmVyX3RpbWUgPC0gRm9QX292ZXJfdGltZSArIHN0YXRfc3VtbWFyeShmdW4uZGF0YSA9IG1lYW5fc2UsIGxpbmV0eXBlID0gMCwgYWVzKGdyb3VwID0gQWNjZXNzaW9uKSwgYWxwaGEgPSAwLjMpICsgc3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGxpbmV3aWR0aCA9IDAuNywgZ2VvbSA9ICJsaW5lIiwgbGluZXR5cGUgPSAiZGFzaGVkIikNCkZvUF9vdmVyX3RpbWUgPC0gRm9QX292ZXJfdGltZSArIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBBY2Nlc3Npb24pLCBsYWJlbCA9ICJwLnNpZ25pZiIsIG1ldGhvZCA9ICJ0LnRlc3QiLCBoaWRlLm5zID0gVFJVRSkNCkZvUF9vdmVyX3RpbWUgPC0gRm9QX292ZXJfdGltZSArIHlsYWIoIkZvUHJpbWUgKGEudS4pIikgKyB4bGFiKCJEYXkgb2YgU3RyZXNzIikgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoImJsdWUiLCAicmVkIikpDQpGb1Bfb3Zlcl90aW1lDQoNClBRJEZ2UF9vdmVyX0ZtUCA8LSBhcy5udW1lcmljKGFzLmNoYXJhY3RlcihQUSRGdlBfb3Zlcl9GbVApKQ0KDQpGdlBfb3Zlcl9GbVBfb3Zlcl90aW1lIDwtIGdncGxvdChkYXRhID0gUFEsIGFlcyh4ID0gZGF5Lm9mLnN0cmVzcywgeSA9IEZ2UF9vdmVyX0ZtUCwgZ3JvdXAgPSBQbGFudC5JRCwgY29sb3VyID0gQWNjZXNzaW9uKSwgbmEucm0gPSBUUlVFKSArIHRoZW1lX2NsYXNzaWMoKSArIHlsaW0oMCwgTkEpDQpGdlBfb3Zlcl9GbVBfb3Zlcl90aW1lIDwtIEZ2UF9vdmVyX0ZtUF9vdmVyX3RpbWUgKyBnZW9tX2xpbmUoYWxwaGEgPSAwLjQpDQpGdlBfb3Zlcl9GbVBfb3Zlcl90aW1lIDwtIEZ2UF9vdmVyX0ZtUF9vdmVyX3RpbWUgKyBmYWNldF93cmFwKH4gQ29uZGl0aW9uKQ0KRnZQX292ZXJfRm1QX292ZXJfdGltZSA8LSBGdlBfb3Zlcl9GbVBfb3Zlcl90aW1lICsgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhID0gbWVhbl9zZSwgbGluZXR5cGUgPSAwLCBhZXMoZ3JvdXAgPSBBY2Nlc3Npb24pLCBhbHBoYSA9IDAuMykgKyBzdGF0X3N1bW1hcnkoZnVuID0gbWVhbiwgYWVzKGdyb3VwID0gQWNjZXNzaW9uKSwgbGluZXdpZHRoID0gMC43LCBnZW9tID0gImxpbmUiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKQ0KRnZQX292ZXJfRm1QX292ZXJfdGltZSA8LSBGdlBfb3Zlcl9GbVBfb3Zlcl90aW1lICsgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGxhYmVsID0gInAuc2lnbmlmIiwgbWV0aG9kID0gInQudGVzdCIsIGhpZGUubnMgPSBUUlVFKQ0KRnZQX292ZXJfRm1QX292ZXJfdGltZSA8LSBGdlBfb3Zlcl9GbVBfb3Zlcl90aW1lICsgeWxhYigiRnZQX292ZXJfRm1QIChhLnUuKSIpICsgeGxhYigiRGF5IG9mIFN0cmVzcyIpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJibHVlIiwgInJlZCIpKQ0KRnZQX292ZXJfRm1QX292ZXJfdGltZQ0KDQpQUSRMZWFmLlRlbXBlcmF0dXJlIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKFBRJExlYWYuVGVtcGVyYXR1cmUpKQ0KDQpMZWFmX3RlbXBfb3Zlcl90aW1lIDwtIGdncGxvdChkYXRhID0gUFEsIGFlcyh4ID0gZGF5Lm9mLnN0cmVzcywgeSA9IExlYWYuVGVtcGVyYXR1cmUsIGdyb3VwID0gUGxhbnQuSUQsIGNvbG91ciA9IEFjY2Vzc2lvbiksIG5hLnJtID0gVFJVRSkgKyB0aGVtZV9jbGFzc2ljKCkgKyB5bGltKDAsIE5BKQ0KTGVhZl90ZW1wX292ZXJfdGltZSA8LSBMZWFmX3RlbXBfb3Zlcl90aW1lICsgZ2VvbV9saW5lKGFscGhhID0gMC40KQ0KTGVhZl90ZW1wX292ZXJfdGltZSA8LSBMZWFmX3RlbXBfb3Zlcl90aW1lICsgZmFjZXRfd3JhcCh+IENvbmRpdGlvbikNCkxlYWZfdGVtcF9vdmVyX3RpbWUgPC0gTGVhZl90ZW1wX292ZXJfdGltZSArIHN0YXRfc3VtbWFyeShmdW4uZGF0YSA9IG1lYW5fc2UsIGxpbmV0eXBlID0gMCwgYWVzKGdyb3VwID0gQWNjZXNzaW9uKSwgYWxwaGEgPSAwLjMpICsgc3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGxpbmV3aWR0aCA9IDAuNywgZ2VvbSA9ICJsaW5lIiwgbGluZXR5cGUgPSAiZGFzaGVkIikNCkxlYWZfdGVtcF9vdmVyX3RpbWUgPC0gTGVhZl90ZW1wX292ZXJfdGltZSArIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBBY2Nlc3Npb24pLCBsYWJlbCA9ICJwLnNpZ25pZiIsIG1ldGhvZCA9ICJ0LnRlc3QiLCBoaWRlLm5zID0gVFJVRSkNCkxlYWZfdGVtcF9vdmVyX3RpbWUgPC0gTGVhZl90ZW1wX292ZXJfdGltZSArIHlsYWIoIkxlYWYgdGVtcGVyYXR1cmUgKEMpIikgKyB4bGFiKCJEYXkgb2YgU3RyZXNzIikgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoImJsdWUiLCAicmVkIikpDQpMZWFmX3RlbXBfb3Zlcl90aW1lDQoNClBRJGxlYWZfdGhpY2tuZXNzIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKFBRJGxlYWZfdGhpY2tuZXNzKSkNCg0KTGVhZl90aGlja25lc3Nfb3Zlcl90aW1lIDwtIGdncGxvdChkYXRhID0gUFEsIGFlcyh4ID0gZGF5Lm9mLnN0cmVzcywgeSA9IGxlYWZfdGhpY2tuZXNzLCBncm91cCA9IFBsYW50LklELCBjb2xvdXIgPSBBY2Nlc3Npb24pLCBuYS5ybSA9IFRSVUUpICsgdGhlbWVfY2xhc3NpYygpICsgeWxpbSgwLCBOQSkNCkxlYWZfdGhpY2tuZXNzX292ZXJfdGltZSA8LSBMZWFmX3RoaWNrbmVzc19vdmVyX3RpbWUgKyBnZW9tX2xpbmUoYWxwaGEgPSAwLjQpDQpMZWFmX3RoaWNrbmVzc19vdmVyX3RpbWUgPC0gTGVhZl90aGlja25lc3Nfb3Zlcl90aW1lICsgZmFjZXRfd3JhcCh+IENvbmRpdGlvbikNCkxlYWZfdGhpY2tuZXNzX292ZXJfdGltZSA8LSBMZWFmX3RoaWNrbmVzc19vdmVyX3RpbWUgKyBzdGF0X3N1bW1hcnkoZnVuLmRhdGEgPSBtZWFuX3NlLCBsaW5ldHlwZSA9IDAsIGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGFscGhhID0gMC4zKSArIHN0YXRfc3VtbWFyeShmdW4gPSBtZWFuLCBhZXMoZ3JvdXAgPSBBY2Nlc3Npb24pLCBsaW5ld2lkdGggPSAwLjcsIGdlb20gPSAibGluZSIsIGxpbmV0eXBlID0gImRhc2hlZCIpDQpMZWFmX3RoaWNrbmVzc19vdmVyX3RpbWUgPC0gTGVhZl90aGlja25lc3Nfb3Zlcl90aW1lICsgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGxhYmVsID0gInAuc2lnbmlmIiwgbWV0aG9kID0gInQudGVzdCIsIGhpZGUubnMgPSBUUlVFKQ0KTGVhZl90aGlja25lc3Nfb3Zlcl90aW1lIDwtIExlYWZfdGhpY2tuZXNzX292ZXJfdGltZSArIHlsYWIoIkxlYWZfdGhpY2tuZXNzIChtbSkiKSArIHhsYWIoIkRheSBvZiBTdHJlc3MiKSArIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygiYmx1ZSIsICJyZWQiKSkNCkxlYWZfdGhpY2tuZXNzX292ZXJfdGltZQ0KDQpQUSRQaGlOUFEgPC0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoUFEkUGhpTlBRKSkNCg0KUGhpTlBRX292ZXJfdGltZSA8LSBnZ3Bsb3QoZGF0YSA9IFBRLCBhZXMoeCA9IGRheS5vZi5zdHJlc3MsIHkgPSBQaGlOUFEsIGdyb3VwID0gUGxhbnQuSUQsIGNvbG91ciA9IEFjY2Vzc2lvbiksIG5hLnJtID0gVFJVRSkgKyB0aGVtZV9jbGFzc2ljKCkgKyB5bGltKDAsIE5BKQ0KUGhpTlBRX292ZXJfdGltZSA8LSBQaGlOUFFfb3Zlcl90aW1lICsgZ2VvbV9saW5lKGFscGhhID0gMC40KQ0KUGhpTlBRX292ZXJfdGltZSA8LSBQaGlOUFFfb3Zlcl90aW1lICsgZmFjZXRfd3JhcCh+IENvbmRpdGlvbikNClBoaU5QUV9vdmVyX3RpbWUgPC0gUGhpTlBRX292ZXJfdGltZSArIHN0YXRfc3VtbWFyeShmdW4uZGF0YSA9IG1lYW5fc2UsIGxpbmV0eXBlID0gMCwgYWVzKGdyb3VwID0gQWNjZXNzaW9uKSwgYWxwaGEgPSAwLjMpICsgc3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGxpbmV3aWR0aCA9IDAuNywgZ2VvbSA9ICJsaW5lIiwgbGluZXR5cGUgPSAiZGFzaGVkIikNClBoaU5QUV9vdmVyX3RpbWUgPC0gUGhpTlBRX292ZXJfdGltZSArIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBBY2Nlc3Npb24pLCBsYWJlbCA9ICJwLnNpZ25pZiIsIG1ldGhvZCA9ICJ0LnRlc3QiLCBoaWRlLm5zID0gVFJVRSkNClBoaU5QUV9vdmVyX3RpbWUgPC0gUGhpTlBRX292ZXJfdGltZSArIHlsYWIoIlBoaU5QUSAoYS51LikiKSArIHhsYWIoIkRheSBvZiBTdHJlc3MiKSArIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygiYmx1ZSIsICJyZWQiKSkNClBoaU5QUV9vdmVyX3RpbWUNCg0KUFEkUFMxLkFjdGl2ZS5DZW50ZXJzIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKFBRJFBTMS5BY3RpdmUuQ2VudGVycykpDQoNClBTMV9hY3RpdmVfY2VudGVyc19vdmVyX3RpbWUgPC0gZ2dwbG90KGRhdGEgPSBQUSwgYWVzKHggPSBkYXkub2Yuc3RyZXNzLCB5ID0gUFMxLkFjdGl2ZS5DZW50ZXJzLCBncm91cCA9IFBsYW50LklELCBjb2xvdXIgPSBBY2Nlc3Npb24pLCBuYS5ybSA9IFRSVUUpICsgdGhlbWVfY2xhc3NpYygpICsgeWxpbSgwLCBOQSkNClBTMV9hY3RpdmVfY2VudGVyc19vdmVyX3RpbWUgPC0gUFMxX2FjdGl2ZV9jZW50ZXJzX292ZXJfdGltZSArIGdlb21fbGluZShhbHBoYSA9IDAuNCkNClBTMV9hY3RpdmVfY2VudGVyc19vdmVyX3RpbWUgPC0gUFMxX2FjdGl2ZV9jZW50ZXJzX292ZXJfdGltZSArIGZhY2V0X3dyYXAofiBDb25kaXRpb24pDQpQUzFfYWN0aXZlX2NlbnRlcnNfb3Zlcl90aW1lIDwtIFBTMV9hY3RpdmVfY2VudGVyc19vdmVyX3RpbWUgKyBzdGF0X3N1bW1hcnkoZnVuLmRhdGEgPSBtZWFuX3NlLCBsaW5ldHlwZSA9IDAsIGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGFscGhhID0gMC4zKSArIHN0YXRfc3VtbWFyeShmdW4gPSBtZWFuLCBhZXMoZ3JvdXAgPSBBY2Nlc3Npb24pLCBsaW5ld2lkdGggPSAwLjcsIGdlb20gPSAibGluZSIsIGxpbmV0eXBlID0gImRhc2hlZCIpDQpQUzFfYWN0aXZlX2NlbnRlcnNfb3Zlcl90aW1lIDwtIFBTMV9hY3RpdmVfY2VudGVyc19vdmVyX3RpbWUgKyBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gQWNjZXNzaW9uKSwgbGFiZWwgPSAicC5zaWduaWYiLCBtZXRob2QgPSAidC50ZXN0IiwgaGlkZS5ucyA9IFRSVUUpDQpQUzFfYWN0aXZlX2NlbnRlcnNfb3Zlcl90aW1lIDwtIFBTMV9hY3RpdmVfY2VudGVyc19vdmVyX3RpbWUgKyB5bGFiKCJQUzEgQWN0aXZlIENlbnRlcnMgKGEudS4pIikgKyB4bGFiKCJEYXkgb2YgU3RyZXNzIikgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoImJsdWUiLCAicmVkIikpDQpQUzFfYWN0aXZlX2NlbnRlcnNfb3Zlcl90aW1lDQoNClBRJFBTMS5PcGVuLkNlbnRlcnMgPC0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoUFEkUFMxLk9wZW4uQ2VudGVycykpDQoNClBTMV9PcGVuX0NlbnRlcnNfb3Zlcl90aW1lIDwtIGdncGxvdChkYXRhID0gUFEsIGFlcyh4ID0gZGF5Lm9mLnN0cmVzcywgeSA9IFBTMS5PcGVuLkNlbnRlcnMsIGdyb3VwID0gUGxhbnQuSUQsIGNvbG91ciA9IEFjY2Vzc2lvbiksIG5hLnJtID0gVFJVRSkgKyB0aGVtZV9jbGFzc2ljKCkgKyB5bGltKDAsIE5BKQ0KUFMxX09wZW5fQ2VudGVyc19vdmVyX3RpbWUgPC0gUFMxX09wZW5fQ2VudGVyc19vdmVyX3RpbWUgKyBnZW9tX2xpbmUoYWxwaGEgPSAwLjQpDQpQUzFfT3Blbl9DZW50ZXJzX292ZXJfdGltZSA8LSBQUzFfT3Blbl9DZW50ZXJzX292ZXJfdGltZSArIGZhY2V0X3dyYXAofiBDb25kaXRpb24pDQpQUzFfT3Blbl9DZW50ZXJzX292ZXJfdGltZSA8LSBQUzFfT3Blbl9DZW50ZXJzX292ZXJfdGltZSArIHN0YXRfc3VtbWFyeShmdW4uZGF0YSA9IG1lYW5fc2UsIGxpbmV0eXBlID0gMCwgYWVzKGdyb3VwID0gQWNjZXNzaW9uKSwgYWxwaGEgPSAwLjMpICsgc3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGxpbmV3aWR0aCA9IDAuNywgZ2VvbSA9ICJsaW5lIiwgbGluZXR5cGUgPSAiZGFzaGVkIikNClBTMV9PcGVuX0NlbnRlcnNfb3Zlcl90aW1lIDwtIFBTMV9PcGVuX0NlbnRlcnNfb3Zlcl90aW1lICsgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGxhYmVsID0gInAuc2lnbmlmIiwgbWV0aG9kID0gInQudGVzdCIsIGhpZGUubnMgPSBUUlVFKQ0KUFMxX09wZW5fQ2VudGVyc19vdmVyX3RpbWUgPC0gUFMxX09wZW5fQ2VudGVyc19vdmVyX3RpbWUgKyB5bGFiKCJQUzEgT3BlbiBDZW50ZXJzIChhLnUuKSIpICsgeGxhYigiRGF5IG9mIFN0cmVzcyIpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJibHVlIiwgInJlZCIpKQ0KUFMxX09wZW5fQ2VudGVyc19vdmVyX3RpbWUNCg0KUFEkUFMxLk92ZXIuUmVkdWNlZC5DZW50ZXJzIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKFBRJFBTMS5PdmVyLlJlZHVjZWQuQ2VudGVycykpDQoNClBTMV9PdmVyX1JlZHVjZWQuQ2VudGVyc19vdmVyX3RpbWUgPC0gZ2dwbG90KGRhdGEgPSBQUSwgYWVzKHggPSBkYXkub2Yuc3RyZXNzLCB5ID0gUFMxLk92ZXIuUmVkdWNlZC5DZW50ZXJzLCBncm91cCA9IFBsYW50LklELCBjb2xvdXIgPSBBY2Nlc3Npb24pLCBuYS5ybSA9IFRSVUUpICsgdGhlbWVfY2xhc3NpYygpDQpQUzFfT3Zlcl9SZWR1Y2VkLkNlbnRlcnNfb3Zlcl90aW1lIDwtIFBTMV9PdmVyX1JlZHVjZWQuQ2VudGVyc19vdmVyX3RpbWUgKyBnZW9tX2xpbmUoYWxwaGEgPSAwLjQpDQpQUzFfT3Zlcl9SZWR1Y2VkLkNlbnRlcnNfb3Zlcl90aW1lIDwtIFBTMV9PdmVyX1JlZHVjZWQuQ2VudGVyc19vdmVyX3RpbWUgKyBmYWNldF93cmFwKH4gQ29uZGl0aW9uKQ0KUFMxX092ZXJfUmVkdWNlZC5DZW50ZXJzX292ZXJfdGltZSA8LSBQUzFfT3Zlcl9SZWR1Y2VkLkNlbnRlcnNfb3Zlcl90aW1lICsgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhID0gbWVhbl9zZSwgbGluZXR5cGUgPSAwLCBhZXMoZ3JvdXAgPSBBY2Nlc3Npb24pLCBhbHBoYSA9IDAuMykgKyBzdGF0X3N1bW1hcnkoZnVuID0gbWVhbiwgYWVzKGdyb3VwID0gQWNjZXNzaW9uKSwgbGluZXdpZHRoID0gMC43LCBnZW9tID0gImxpbmUiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKQ0KUFMxX092ZXJfUmVkdWNlZC5DZW50ZXJzX292ZXJfdGltZSA8LSBQUzFfT3Zlcl9SZWR1Y2VkLkNlbnRlcnNfb3Zlcl90aW1lICsgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGxhYmVsID0gInAuc2lnbmlmIiwgbWV0aG9kID0gInQudGVzdCIsIGhpZGUubnMgPSBUUlVFKQ0KUFMxX092ZXJfUmVkdWNlZC5DZW50ZXJzX292ZXJfdGltZSA8LSBQUzFfT3Zlcl9SZWR1Y2VkLkNlbnRlcnNfb3Zlcl90aW1lICsgeWxhYigiUFMxIE92ZXIgUmVkdWNlZCBDZW50ZXJzIChhLnUuKSIpICsgeGxhYigiRGF5IG9mIFN0cmVzcyIpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJibHVlIiwgInJlZCIpKQ0KUFMxX092ZXJfUmVkdWNlZC5DZW50ZXJzX292ZXJfdGltZQ0KDQpQUSRQUzEuT3hpZGl6ZWQuQ2VudGVycyA8LSBhcy5udW1lcmljKGFzLmNoYXJhY3RlcihQUSRQUzEuT3hpZGl6ZWQuQ2VudGVycykpDQoNClBTMV9PeGlkaXplZF9DZW50ZXJzX292ZXJfdGltZSA8LSBnZ3Bsb3QoZGF0YSA9IFBRLCBhZXMoeCA9IGRheS5vZi5zdHJlc3MsIHkgPSBQUzEuT3hpZGl6ZWQuQ2VudGVycywgZ3JvdXAgPSBQbGFudC5JRCwgY29sb3VyID0gQWNjZXNzaW9uKSwgbmEucm0gPSBUUlVFKSArIHRoZW1lX2NsYXNzaWMoKQ0KUFMxX094aWRpemVkX0NlbnRlcnNfb3Zlcl90aW1lIDwtIFBTMV9PeGlkaXplZF9DZW50ZXJzX292ZXJfdGltZSArIGdlb21fbGluZShhbHBoYSA9IDAuNCkNClBTMV9PeGlkaXplZF9DZW50ZXJzX292ZXJfdGltZSA8LSBQUzFfT3hpZGl6ZWRfQ2VudGVyc19vdmVyX3RpbWUgKyBmYWNldF93cmFwKH4gQ29uZGl0aW9uKQ0KUFMxX094aWRpemVkX0NlbnRlcnNfb3Zlcl90aW1lIDwtIFBTMV9PeGlkaXplZF9DZW50ZXJzX292ZXJfdGltZSArIHN0YXRfc3VtbWFyeShmdW4uZGF0YSA9IG1lYW5fc2UsIGxpbmV0eXBlID0gMCwgYWVzKGdyb3VwID0gQWNjZXNzaW9uKSwgYWxwaGEgPSAwLjMpICsgc3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGxpbmV3aWR0aCA9IDAuNywgZ2VvbSA9ICJsaW5lIiwgbGluZXR5cGUgPSAiZGFzaGVkIikNClBTMV9PeGlkaXplZF9DZW50ZXJzX292ZXJfdGltZSA8LSBQUzFfT3hpZGl6ZWRfQ2VudGVyc19vdmVyX3RpbWUgKyBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gQWNjZXNzaW9uKSwgbGFiZWwgPSAicC5zaWduaWYiLCBtZXRob2QgPSAidC50ZXN0IiwgaGlkZS5ucyA9IFRSVUUpDQpQUzFfT3hpZGl6ZWRfQ2VudGVyc19vdmVyX3RpbWUgPC0gUFMxX094aWRpemVkX0NlbnRlcnNfb3Zlcl90aW1lICsgeWxhYigiUFMxIE94aWRpemVkIENlbnRlcnMgKGEudS4pIikgKyB4bGFiKCJEYXkgb2YgU3RyZXNzIikgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoImJsdWUiLCAicmVkIikpDQpQUzFfT3hpZGl6ZWRfQ2VudGVyc19vdmVyX3RpbWUNCg0KUFEkU1BBRCA8LSBhcy5udW1lcmljKGFzLmNoYXJhY3RlcihQUSRTUEFEKSkNCg0KU1BBRF9vdmVyX3RpbWUgPC0gZ2dwbG90KGRhdGEgPSBQUSwgYWVzKHggPSBkYXkub2Yuc3RyZXNzLCB5ID0gU1BBRCwgZ3JvdXAgPSBQbGFudC5JRCwgY29sb3VyID0gQWNjZXNzaW9uKSwgbmEucm0gPSBUUlVFKSArIHRoZW1lX2NsYXNzaWMoKQ0KU1BBRF9vdmVyX3RpbWUgPC0gU1BBRF9vdmVyX3RpbWUgKyBnZW9tX2xpbmUoYWxwaGEgPSAwLjQpDQpTUEFEX292ZXJfdGltZSA8LSBTUEFEX292ZXJfdGltZSArIGZhY2V0X3dyYXAofiBDb25kaXRpb24pDQpTUEFEX292ZXJfdGltZSA8LSBTUEFEX292ZXJfdGltZSArIHN0YXRfc3VtbWFyeShmdW4uZGF0YSA9IG1lYW5fc2UsIGxpbmV0eXBlID0gMCwgYWVzKGdyb3VwID0gQWNjZXNzaW9uKSwgYWxwaGEgPSAwLjMpICsgc3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGxpbmV3aWR0aCA9IDAuNywgZ2VvbSA9ICJsaW5lIiwgbGluZXR5cGUgPSAiZGFzaGVkIikNClNQQURfb3Zlcl90aW1lIDwtIFNQQURfb3Zlcl90aW1lICsgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEFjY2Vzc2lvbiksIGxhYmVsID0gInAuc2lnbmlmIiwgbWV0aG9kID0gInQudGVzdCIsIGhpZGUubnMgPSBUUlVFKQ0KU1BBRF9vdmVyX3RpbWUgPC0gU1BBRF9vdmVyX3RpbWUgKyB5bGFiKCJTUEFEIChhLnUuKSIpICsgeGxhYigiRGF5IG9mIFN0cmVzcyIpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJibHVlIiwgInJlZCIpKQ0KU1BBRF9vdmVyX3RpbWUNCg0KYGBgDQoNCiMjRmFjZXQgYnkgYWNjZXNzaW9uDQpgYGB7cn0NCg0KDQpGbVBfYnlfYWNjIDwtIGdncGxvdChkYXRhID0gUFEsIGFlcyh4ID0gZGF5Lm9mLnN0cmVzcywgeSA9IEZtUHJpbWUsIGdyb3VwID0gUGxhbnQuSUQsIGNvbG91ciA9IENvbmRpdGlvbiksIG5hLnJtID0gVFJVRSkgKyB0aGVtZV9jbGFzc2ljKCkgKyB5bGltKDAsIE5BKQ0KRm1QX2J5X2FjYyA8LSBGbVBfYnlfYWNjICsgZ2VvbV9saW5lKGFscGhhID0gMC40KQ0KRm1QX2J5X2FjYyA8LSBGbVBfYnlfYWNjICsgZmFjZXRfd3JhcCh+IEFjY2Vzc2lvbikNCkZtUF9ieV9hY2MgPC0gRm1QX2J5X2FjYyArIHN0YXRfc3VtbWFyeShmdW4uZGF0YSA9IG1lYW5fc2UsIGxpbmV0eXBlID0gMCwgYWVzKGdyb3VwID0gQ29uZGl0aW9uKSwgYWxwaGEgPSAwLjMpICsgc3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGFlcyhncm91cCA9IENvbmRpdGlvbiksIGxpbmV3aWR0aCA9IDAuNywgZ2VvbSA9ICJsaW5lIiwgbGluZXR5cGUgPSAiZGFzaGVkIikNCkZtUF9ieV9hY2MgPC0gRm1QX2J5X2FjYyArIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBDb25kaXRpb24pLCBsYWJlbCA9ICJwLnNpZ25pZiIsIG1ldGhvZCA9ICJ0LnRlc3QiLCBoaWRlLm5zID0gVFJVRSkNCkZtUF9ieV9hY2MgPC0gRm1QX2J5X2FjYyArIHlsYWIoIkZtUHJpbWUgKGEudS4pIikgKyB4bGFiKCJEYXkgb2YgU3RyZXNzIikgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoImJsdWUiLCAicmVkIikpDQpGbVBfYnlfYWNjDQoNCmBgYA0KYGBge3J9DQpGb19ieV9hY2MgPC0gZ2dwbG90KGRhdGEgPSBQUSwgYWVzKHggPSBkYXkub2Yuc3RyZXNzLCB5ID0gRm9QcmltZSwgZ3JvdXAgPSBQbGFudC5JRCwgY29sb3VyID0gQ29uZGl0aW9uKSwgbmEucm0gPSBUUlVFKSArIHRoZW1lX2NsYXNzaWMoKSArIHlsaW0oMCwgTkEpDQpGb19ieV9hY2MgPC0gRm9fYnlfYWNjICsgZ2VvbV9saW5lKGFscGhhID0gMC40KQ0KRm9fYnlfYWNjIDwtIEZvX2J5X2FjYyArIGZhY2V0X3dyYXAofiBBY2Nlc3Npb24pDQpGb19ieV9hY2MgPC0gRm9fYnlfYWNjICsgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhID0gbWVhbl9zZSwgbGluZXR5cGUgPSAwLCBhZXMoZ3JvdXAgPSBDb25kaXRpb24pLCBhbHBoYSA9IDAuMykgKyBzdGF0X3N1bW1hcnkoZnVuID0gbWVhbiwgYWVzKGdyb3VwID0gQ29uZGl0aW9uKSwgbGluZXdpZHRoID0gMC43LCBnZW9tID0gImxpbmUiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKQ0KRm9fYnlfYWNjIDwtIEZvX2J5X2FjYyArIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBDb25kaXRpb24pLCBsYWJlbCA9ICJwLnNpZ25pZiIsIG1ldGhvZCA9ICJ0LnRlc3QiLCBoaWRlLm5zID0gVFJVRSkNCkZvX2J5X2FjYyA8LSBGb19ieV9hY2MgKyB5bGFiKCJGb1ByaW1lIChhLnUuKSIpICsgeGxhYigiRGF5IG9mIFN0cmVzcyIpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJibHVlIiwgInJlZCIpKQ0KRm9fYnlfYWNjDQoNCkZ2UG92ZXJGbVBfYnlfYWNjIDwtIGdncGxvdChkYXRhID0gUFEsIGFlcyh4ID0gZGF5Lm9mLnN0cmVzcywgeSA9IEZ2UF9vdmVyX0ZtUCwgZ3JvdXAgPSBQbGFudC5JRCwgY29sb3VyID0gQ29uZGl0aW9uKSwgbmEucm0gPSBUUlVFKSArIHRoZW1lX2NsYXNzaWMoKSArIHlsaW0oMCwgTkEpDQpGdlBvdmVyRm1QX2J5X2FjYyA8LSBGdlBvdmVyRm1QX2J5X2FjYyArIGdlb21fbGluZShhbHBoYSA9IDAuNCkNCkZ2UG92ZXJGbVBfYnlfYWNjIDwtIEZ2UG92ZXJGbVBfYnlfYWNjICsgZmFjZXRfd3JhcCh+IEFjY2Vzc2lvbikNCkZ2UG92ZXJGbVBfYnlfYWNjIDwtIEZ2UG92ZXJGbVBfYnlfYWNjICsgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhID0gbWVhbl9zZSwgbGluZXR5cGUgPSAwLCBhZXMoZ3JvdXAgPSBDb25kaXRpb24pLCBhbHBoYSA9IDAuMykgKyBzdGF0X3N1bW1hcnkoZnVuID0gbWVhbiwgYWVzKGdyb3VwID0gQ29uZGl0aW9uKSwgbGluZXdpZHRoID0gMC43LCBnZW9tID0gImxpbmUiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKQ0KRnZQb3ZlckZtUF9ieV9hY2MgPC0gRnZQb3ZlckZtUF9ieV9hY2MgKyBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gQ29uZGl0aW9uKSwgbGFiZWwgPSAicC5zaWduaWYiLCBtZXRob2QgPSAidC50ZXN0IiwgaGlkZS5ucyA9IFRSVUUpDQpGdlBvdmVyRm1QX2J5X2FjYyA8LSBGdlBvdmVyRm1QX2J5X2FjYyArIHlsYWIoIkZ2UF9vdmVyX0ZtUCAoYS51LikiKSArIHhsYWIoIkRheSBvZiBTdHJlc3MiKSArIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygiYmx1ZSIsICJyZWQiKSkNCkZ2UG92ZXJGbVBfYnlfYWNjDQoNCmxlYWZ0ZW1wX2J5X2FjYyA8LSBnZ3Bsb3QoZGF0YSA9IFBRLCBhZXMoeCA9IGRheS5vZi5zdHJlc3MsIHkgPSBMZWFmLlRlbXBlcmF0dXJlLCBncm91cCA9IFBsYW50LklELCBjb2xvdXIgPSBDb25kaXRpb24pLCBuYS5ybSA9IFRSVUUpICsgdGhlbWVfY2xhc3NpYygpICsgeWxpbSgwLCBOQSkNCmxlYWZ0ZW1wX2J5X2FjYyA8LSBsZWFmdGVtcF9ieV9hY2MgKyBnZW9tX2xpbmUoYWxwaGEgPSAwLjQpDQpsZWFmdGVtcF9ieV9hY2MgPC0gbGVhZnRlbXBfYnlfYWNjICsgZmFjZXRfd3JhcCh+IEFjY2Vzc2lvbikNCmxlYWZ0ZW1wX2J5X2FjYyA8LSBsZWFmdGVtcF9ieV9hY2MgKyBzdGF0X3N1bW1hcnkoZnVuLmRhdGEgPSBtZWFuX3NlLCBsaW5ldHlwZSA9IDAsIGFlcyhncm91cCA9IENvbmRpdGlvbiksIGFscGhhID0gMC4zKSArIHN0YXRfc3VtbWFyeShmdW4gPSBtZWFuLCBhZXMoZ3JvdXAgPSBDb25kaXRpb24pLCBsaW5ld2lkdGggPSAwLjcsIGdlb20gPSAibGluZSIsIGxpbmV0eXBlID0gImRhc2hlZCIpDQpsZWFmdGVtcF9ieV9hY2MgPC0gbGVhZnRlbXBfYnlfYWNjICsgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IENvbmRpdGlvbiksIGxhYmVsID0gInAuc2lnbmlmIiwgbWV0aG9kID0gInQudGVzdCIsIGhpZGUubnMgPSBUUlVFKQ0KbGVhZnRlbXBfYnlfYWNjIDwtIGxlYWZ0ZW1wX2J5X2FjYyArIHlsYWIoIkxlYWYuVGVtcGVyYXR1cmUgKEMpIikgKyB4bGFiKCJEYXkgb2YgU3RyZXNzIikgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoImJsdWUiLCAicmVkIikpDQpsZWFmdGVtcF9ieV9hY2MNCg0KbGVhZnRoaWNrX2J5X2FjYyA8LSBnZ3Bsb3QoZGF0YSA9IFBRLCBhZXMoeCA9IGRheS5vZi5zdHJlc3MsIHkgPSBsZWFmX3RoaWNrbmVzcywgZ3JvdXAgPSBQbGFudC5JRCwgY29sb3VyID0gQ29uZGl0aW9uKSwgbmEucm0gPSBUUlVFKSArIHRoZW1lX2NsYXNzaWMoKSArIHlsaW0oMCwgTkEpDQpsZWFmdGhpY2tfYnlfYWNjIDwtIGxlYWZ0aGlja19ieV9hY2MgKyBnZW9tX2xpbmUoYWxwaGEgPSAwLjQpDQpsZWFmdGhpY2tfYnlfYWNjIDwtIGxlYWZ0aGlja19ieV9hY2MgKyBmYWNldF93cmFwKH4gQWNjZXNzaW9uKQ0KbGVhZnRoaWNrX2J5X2FjYyA8LSBsZWFmdGhpY2tfYnlfYWNjICsgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhID0gbWVhbl9zZSwgbGluZXR5cGUgPSAwLCBhZXMoZ3JvdXAgPSBDb25kaXRpb24pLCBhbHBoYSA9IDAuMykgKyBzdGF0X3N1bW1hcnkoZnVuID0gbWVhbiwgYWVzKGdyb3VwID0gQ29uZGl0aW9uKSwgbGluZXdpZHRoID0gMC43LCBnZW9tID0gImxpbmUiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKQ0KbGVhZnRoaWNrX2J5X2FjYyA8LSBsZWFmdGhpY2tfYnlfYWNjICsgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IENvbmRpdGlvbiksIGxhYmVsID0gInAuc2lnbmlmIiwgbWV0aG9kID0gInQudGVzdCIsIGhpZGUubnMgPSBUUlVFKQ0KbGVhZnRoaWNrX2J5X2FjYyA8LSBsZWFmdGhpY2tfYnlfYWNjICsgeWxhYigibGVhZl90aGlja25lc3MgKG1tKSIpICsgeGxhYigiRGF5IG9mIFN0cmVzcyIpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJibHVlIiwgInJlZCIpKQ0KbGVhZnRoaWNrX2J5X2FjYw0KDQpQaGlOUFFfYnlfYWNjIDwtIGdncGxvdChkYXRhID0gUFEsIGFlcyh4ID0gZGF5Lm9mLnN0cmVzcywgeSA9IFBoaU5QUSwgZ3JvdXAgPSBQbGFudC5JRCwgY29sb3VyID0gQ29uZGl0aW9uKSwgbmEucm0gPSBUUlVFKSArIHRoZW1lX2NsYXNzaWMoKSArIHlsaW0oMCwgTkEpDQpQaGlOUFFfYnlfYWNjIDwtIFBoaU5QUV9ieV9hY2MgKyBnZW9tX2xpbmUoYWxwaGEgPSAwLjQpDQpQaGlOUFFfYnlfYWNjIDwtIFBoaU5QUV9ieV9hY2MgKyBmYWNldF93cmFwKH4gQWNjZXNzaW9uKQ0KUGhpTlBRX2J5X2FjYyA8LSBQaGlOUFFfYnlfYWNjICsgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhID0gbWVhbl9zZSwgbGluZXR5cGUgPSAwLCBhZXMoZ3JvdXAgPSBDb25kaXRpb24pLCBhbHBoYSA9IDAuMykgKyBzdGF0X3N1bW1hcnkoZnVuID0gbWVhbiwgYWVzKGdyb3VwID0gQ29uZGl0aW9uKSwgbGluZXdpZHRoID0gMC43LCBnZW9tID0gImxpbmUiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKQ0KUGhpTlBRX2J5X2FjYyA8LSBQaGlOUFFfYnlfYWNjICsgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IENvbmRpdGlvbiksIGxhYmVsID0gInAuc2lnbmlmIiwgbWV0aG9kID0gInQudGVzdCIsIGhpZGUubnMgPSBUUlVFKQ0KUGhpTlBRX2J5X2FjYyA8LSBQaGlOUFFfYnlfYWNjICsgeWxhYigiUGhpTlBRIChhLnUuKSIpICsgeGxhYigiRGF5IG9mIFN0cmVzcyIpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJibHVlIiwgInJlZCIpKQ0KUGhpTlBRX2J5X2FjYw0KDQphY3RpdmVjZW50ZXJzX2J5X2FjYyA8LSBnZ3Bsb3QoZGF0YSA9IFBRLCBhZXMoeCA9IGRheS5vZi5zdHJlc3MsIHkgPSBQUzEuQWN0aXZlLkNlbnRlcnMsIGdyb3VwID0gUGxhbnQuSUQsIGNvbG91ciA9IENvbmRpdGlvbiksIG5hLnJtID0gVFJVRSkgKyB0aGVtZV9jbGFzc2ljKCkgKyB5bGltKDAsIE5BKQ0KYWN0aXZlY2VudGVyc19ieV9hY2MgPC0gYWN0aXZlY2VudGVyc19ieV9hY2MgKyBnZW9tX2xpbmUoYWxwaGEgPSAwLjQpDQphY3RpdmVjZW50ZXJzX2J5X2FjYyA8LSBhY3RpdmVjZW50ZXJzX2J5X2FjYyArIGZhY2V0X3dyYXAofiBBY2Nlc3Npb24pDQphY3RpdmVjZW50ZXJzX2J5X2FjYyA8LSBhY3RpdmVjZW50ZXJzX2J5X2FjYyArIHN0YXRfc3VtbWFyeShmdW4uZGF0YSA9IG1lYW5fc2UsIGxpbmV0eXBlID0gMCwgYWVzKGdyb3VwID0gQ29uZGl0aW9uKSwgYWxwaGEgPSAwLjMpICsgc3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGFlcyhncm91cCA9IENvbmRpdGlvbiksIGxpbmV3aWR0aCA9IDAuNywgZ2VvbSA9ICJsaW5lIiwgbGluZXR5cGUgPSAiZGFzaGVkIikNCmFjdGl2ZWNlbnRlcnNfYnlfYWNjIDwtIGFjdGl2ZWNlbnRlcnNfYnlfYWNjICsgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IENvbmRpdGlvbiksIGxhYmVsID0gInAuc2lnbmlmIiwgbWV0aG9kID0gInQudGVzdCIsIGhpZGUubnMgPSBUUlVFKQ0KYWN0aXZlY2VudGVyc19ieV9hY2MgPC0gYWN0aXZlY2VudGVyc19ieV9hY2MgKyB5bGFiKCJQUzEuQWN0aXZlLkNlbnRlcnMgKGEudS4pIikgKyB4bGFiKCJEYXkgb2YgU3RyZXNzIikgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoImJsdWUiLCAicmVkIikpDQphY3RpdmVjZW50ZXJzX2J5X2FjYw0KDQpvcGVuY2VudGVyc19ieV9hY2MgPC0gZ2dwbG90KGRhdGEgPSBQUSwgYWVzKHggPSBkYXkub2Yuc3RyZXNzLCB5ID0gUFMxLk9wZW4uQ2VudGVycywgZ3JvdXAgPSBQbGFudC5JRCwgY29sb3VyID0gQ29uZGl0aW9uKSwgbmEucm0gPSBUUlVFKSArIHRoZW1lX2NsYXNzaWMoKSArIHlsaW0oMCwgTkEpDQpvcGVuY2VudGVyc19ieV9hY2MgPC0gb3BlbmNlbnRlcnNfYnlfYWNjICsgZ2VvbV9saW5lKGFscGhhID0gMC40KQ0Kb3BlbmNlbnRlcnNfYnlfYWNjIDwtIG9wZW5jZW50ZXJzX2J5X2FjYyArIGZhY2V0X3dyYXAofiBBY2Nlc3Npb24pDQpvcGVuY2VudGVyc19ieV9hY2MgPC0gb3BlbmNlbnRlcnNfYnlfYWNjICsgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhID0gbWVhbl9zZSwgbGluZXR5cGUgPSAwLCBhZXMoZ3JvdXAgPSBDb25kaXRpb24pLCBhbHBoYSA9IDAuMykgKyBzdGF0X3N1bW1hcnkoZnVuID0gbWVhbiwgYWVzKGdyb3VwID0gQ29uZGl0aW9uKSwgbGluZXdpZHRoID0gMC43LCBnZW9tID0gImxpbmUiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKQ0Kb3BlbmNlbnRlcnNfYnlfYWNjIDwtIG9wZW5jZW50ZXJzX2J5X2FjYyArIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBDb25kaXRpb24pLCBsYWJlbCA9ICJwLnNpZ25pZiIsIG1ldGhvZCA9ICJ0LnRlc3QiLCBoaWRlLm5zID0gVFJVRSkNCm9wZW5jZW50ZXJzX2J5X2FjYyA8LSBvcGVuY2VudGVyc19ieV9hY2MgKyB5bGFiKCJQUzEuT3Blbi5DZW50ZXJzIChhLnUuKSIpICsgeGxhYigiRGF5IG9mIFN0cmVzcyIpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJibHVlIiwgInJlZCIpKQ0Kb3BlbmNlbnRlcnNfYnlfYWNjDQoNCm92ZXJyZWR1Y2VkX2J5X2FjYyA8LSBnZ3Bsb3QoZGF0YSA9IFBRLCBhZXMoeCA9IGRheS5vZi5zdHJlc3MsIHkgPSBQUzEuT3Zlci5SZWR1Y2VkLkNlbnRlcnMsIGdyb3VwID0gUGxhbnQuSUQsIGNvbG91ciA9IENvbmRpdGlvbiksIG5hLnJtID0gVFJVRSkgKyB0aGVtZV9jbGFzc2ljKCkNCm92ZXJyZWR1Y2VkX2J5X2FjYyA8LSBvdmVycmVkdWNlZF9ieV9hY2MgKyBnZW9tX2xpbmUoYWxwaGEgPSAwLjQpDQpvdmVycmVkdWNlZF9ieV9hY2MgPC0gb3ZlcnJlZHVjZWRfYnlfYWNjICsgZmFjZXRfd3JhcCh+IEFjY2Vzc2lvbikNCm92ZXJyZWR1Y2VkX2J5X2FjYyA8LSBvdmVycmVkdWNlZF9ieV9hY2MgKyBzdGF0X3N1bW1hcnkoZnVuLmRhdGEgPSBtZWFuX3NlLCBsaW5ldHlwZSA9IDAsIGFlcyhncm91cCA9IENvbmRpdGlvbiksIGFscGhhID0gMC4zKSArIHN0YXRfc3VtbWFyeShmdW4gPSBtZWFuLCBhZXMoZ3JvdXAgPSBDb25kaXRpb24pLCBsaW5ld2lkdGggPSAwLjcsIGdlb20gPSAibGluZSIsIGxpbmV0eXBlID0gImRhc2hlZCIpDQpvdmVycmVkdWNlZF9ieV9hY2MgPC0gb3ZlcnJlZHVjZWRfYnlfYWNjICsgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IENvbmRpdGlvbiksIGxhYmVsID0gInAuc2lnbmlmIiwgbWV0aG9kID0gInQudGVzdCIsIGhpZGUubnMgPSBUUlVFKQ0Kb3ZlcnJlZHVjZWRfYnlfYWNjIDwtIG92ZXJyZWR1Y2VkX2J5X2FjYyArIHlsYWIoIlBTMS5PdmVyLlJlZHVjZWQuQ2VudGVycyAoYS51LikiKSArIHhsYWIoIkRheSBvZiBTdHJlc3MiKSArIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygiYmx1ZSIsICJyZWQiKSkNCm92ZXJyZWR1Y2VkX2J5X2FjYw0KDQpveGlkaXplZF9ieV9hY2MgPC0gZ2dwbG90KGRhdGEgPSBQUSwgYWVzKHggPSBkYXkub2Yuc3RyZXNzLCB5ID0gUFMxLk94aWRpemVkLkNlbnRlcnMsIGdyb3VwID0gUGxhbnQuSUQsIGNvbG91ciA9IENvbmRpdGlvbiksIG5hLnJtID0gVFJVRSkgKyB0aGVtZV9jbGFzc2ljKCkNCm94aWRpemVkX2J5X2FjYyA8LSBveGlkaXplZF9ieV9hY2MgKyBnZW9tX2xpbmUoYWxwaGEgPSAwLjQpDQpveGlkaXplZF9ieV9hY2MgPC0gb3hpZGl6ZWRfYnlfYWNjICsgZmFjZXRfd3JhcCh+IEFjY2Vzc2lvbikNCm94aWRpemVkX2J5X2FjYyA8LSBveGlkaXplZF9ieV9hY2MgKyBzdGF0X3N1bW1hcnkoZnVuLmRhdGEgPSBtZWFuX3NlLCBsaW5ldHlwZSA9IDAsIGFlcyhncm91cCA9IENvbmRpdGlvbiksIGFscGhhID0gMC4zKSArIHN0YXRfc3VtbWFyeShmdW4gPSBtZWFuLCBhZXMoZ3JvdXAgPSBDb25kaXRpb24pLCBsaW5ld2lkdGggPSAwLjcsIGdlb20gPSAibGluZSIsIGxpbmV0eXBlID0gImRhc2hlZCIpDQpveGlkaXplZF9ieV9hY2MgPC0gb3hpZGl6ZWRfYnlfYWNjICsgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IENvbmRpdGlvbiksIGxhYmVsID0gInAuc2lnbmlmIiwgbWV0aG9kID0gInQudGVzdCIsIGhpZGUubnMgPSBUUlVFKQ0Kb3hpZGl6ZWRfYnlfYWNjIDwtIG94aWRpemVkX2J5X2FjYyArIHlsYWIoIlBTMS5PeGlkaXplZC5DZW50ZXJzIChhLnUuKSIpICsgeGxhYigiRGF5IG9mIFN0cmVzcyIpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJibHVlIiwgInJlZCIpKQ0Kb3hpZGl6ZWRfYnlfYWNjDQoNClNQQURfYnlfYWNjIDwtIGdncGxvdChkYXRhID0gUFEsIGFlcyh4ID0gZGF5Lm9mLnN0cmVzcywgeSA9IFNQQUQsIGdyb3VwID0gUGxhbnQuSUQsIGNvbG91ciA9IENvbmRpdGlvbiksIG5hLnJtID0gVFJVRSkgKyB0aGVtZV9jbGFzc2ljKCkgKyB5bGltKDAsIE5BKQ0KU1BBRF9ieV9hY2MgPC0gU1BBRF9ieV9hY2MgKyBnZW9tX2xpbmUoYWxwaGEgPSAwLjQpDQpTUEFEX2J5X2FjYyA8LSBTUEFEX2J5X2FjYyArIGZhY2V0X3dyYXAofiBBY2Nlc3Npb24pDQpTUEFEX2J5X2FjYyA8LSBTUEFEX2J5X2FjYyArIHN0YXRfc3VtbWFyeShmdW4uZGF0YSA9IG1lYW5fc2UsIGxpbmV0eXBlID0gMCwgYWVzKGdyb3VwID0gQ29uZGl0aW9uKSwgYWxwaGEgPSAwLjMpICsgc3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGFlcyhncm91cCA9IENvbmRpdGlvbiksIGxpbmV3aWR0aCA9IDAuNywgZ2VvbSA9ICJsaW5lIiwgbGluZXR5cGUgPSAiZGFzaGVkIikNClNQQURfYnlfYWNjIDwtIFNQQURfYnlfYWNjICsgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IENvbmRpdGlvbiksIGxhYmVsID0gInAuc2lnbmlmIiwgbWV0aG9kID0gInQudGVzdCIsIGhpZGUubnMgPSBUUlVFKQ0KU1BBRF9ieV9hY2MgPC0gU1BBRF9ieV9hY2MgKyB5bGFiKCJTUEFEIChhLnUuKSIpICsgeGxhYigiRGF5IG9mIFN0cmVzcyIpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJibHVlIiwgInJlZCIpKQ0KU1BBRF9ieV9hY2MNCmBgYA0KDQojc2F2ZSBhbGwgYXMgUERGDQpgYGB7cn0NCiNmYWNldCBjb25kaXRpb24NCiMgcGRmKCJGbVByaW1lX2ZhY2V0X2NvbmRpdGlvbi5wZGYiLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3KQ0KIyBwbG90KEZtUF9vdmVyX3RpbWUpDQojIGRldi5vZmYoKQ0KIyANCiMgcGRmKCJGb1ByaW1lX2ZhY2V0X2NvbmRpdGlvbi5wZGYiLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3KQ0KIyBwbG90KEZvUF9vdmVyX3RpbWUpDQojIGRldi5vZmYoKQ0KIyANCiMgcGRmKCJGdlBfb3Zlcl9GbVBfZmFjZXRfY29uZGl0aW9uLnBkZiIsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcpDQojIHBsb3QoRnZQX292ZXJfRm1QX292ZXJfdGltZSkNCiMgZGV2Lm9mZigpDQojIA0KIyBwZGYoImxlYWZfdGVtcF9mYWNldF9jb25kaXRpb24ucGRmIiwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNykNCiMgcGxvdChMZWFmX3RlbXBfb3Zlcl90aW1lKQ0KIyBkZXYub2ZmKCkNCiMgDQojIHBkZigibGVhZl90aGlja25lc3NfZmFjZXRfY29uZGl0aW9uLnBkZiIsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcpDQojIHBsb3QoTGVhZl90aGlja25lc3Nfb3Zlcl90aW1lKQ0KIyBkZXYub2ZmKCkNCiMgDQojIHBkZigiUGhpTlBRX2ZhY2V0X2NvbmRpdGlvbi5wZGYiLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3KQ0KIyBwbG90KFBoaU5QUV9vdmVyX3RpbWUpDQojIGRldi5vZmYoKQ0KIyANCiMgcGRmKCJQUzFfYWN0aXZlX2NlbnRlcnNfZmFjZXRfY29uZGl0aW9uLnBkZiIsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcpDQojIHBsb3QoUFMxX2FjdGl2ZV9jZW50ZXJzX292ZXJfdGltZSkNCiMgZGV2Lm9mZigpDQojIA0KIyBwZGYoIlBTMV9vcGVuX2NlbnRlcnNfZmFjZXRfY29uZGl0aW9uLnBkZiIsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcpDQojIHBsb3QoUFMxX09wZW5fQ2VudGVyc19vdmVyX3RpbWUpDQojIGRldi5vZmYoKQ0KIyANCiMgcGRmKCJQUzFfb3Zlcl9yZWR1Y2VkX2NlbnRlcnNfZmFjZXRfY29uZGl0aW9uLnBkZiIsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcpDQojIHBsb3QoUFMxX092ZXJfUmVkdWNlZC5DZW50ZXJzX292ZXJfdGltZSkNCiMgZGV2Lm9mZigpDQojIA0KIyBwZGYoIlBTMV9veGlkaXplZF9jZW50ZXJzX2ZhY2V0X2NvbmRpdGlvbi5wZGYiLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3KQ0KIyBwbG90KFBTMV9PeGlkaXplZF9DZW50ZXJzX292ZXJfdGltZSkNCiMgZGV2Lm9mZigpDQojIA0KIyBwZGYoIlNQQURfZmFjZXRfY29uZGl0aW9uLnBkZiIsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcpDQojIHBsb3QoU1BBRF9vdmVyX3RpbWUpDQojIGRldi5vZmYoKQ0KYGBgDQpgYGB7cn0NCiNmYWNldCBhY2Nlc3Npb24NCiMgcGRmKCJGbVByaW1lX2ZhY2V0X2FjY2Vzc2lvbi5wZGYiLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3KQ0KIyBwbG90KEZtUF9ieV9hY2MpDQojIGRldi5vZmYoKQ0KIyANCiMgcGRmKCJGb1ByaW1lX2ZhY2V0X2FjY2Vzc2lvbi5wZGYiLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3KQ0KIyBwbG90KEZvX2J5X2FjYykNCiMgZGV2Lm9mZigpDQojIA0KIyBwZGYoIkZ2UF9vdmVyX0ZtUF9mYWNldF9hY2Nlc3Npb24ucGRmIiwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNykNCiMgcGxvdChGdlBvdmVyRm1QX2J5X2FjYykNCiMgZGV2Lm9mZigpDQojIA0KIyBwZGYoImxlYWZfdGVtcF9mYWNldF9hY2Nlc3Npb24ucGRmIiwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNykNCiMgcGxvdChsZWFmdGVtcF9ieV9hY2MpDQojIGRldi5vZmYoKQ0KIyANCiMgcGRmKCJsZWFmX3RoaWNrbmVzc19mYWNldF9hY2Nlc3Npb24ucGRmIiwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNykNCiMgcGxvdChsZWFmdGhpY2tfYnlfYWNjKQ0KIyBkZXYub2ZmKCkNCiMgDQojIHBkZigiUGhpTlBRX2ZhY2V0X2FjY2Vzc2lvbi5wZGYiLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3KQ0KIyBwbG90KFBoaU5QUV9ieV9hY2MpDQojIGRldi5vZmYoKQ0KIyANCiMgcGRmKCJQUzFfYWN0aXZlX2NlbnRlcnNfZmFjZXRfYWNjZXNzaW9uLnBkZiIsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcpDQojIHBsb3QoYWN0aXZlY2VudGVyc19ieV9hY2MpDQojIGRldi5vZmYoKQ0KIyANCiMgcGRmKCJQUzFfb3Blbl9jZW50ZXJzX2ZhY2V0X2FjY2Vzc2lvbi5wZGYiLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3KQ0KIyBwbG90KG9wZW5jZW50ZXJzX2J5X2FjYykNCiMgZGV2Lm9mZigpDQojIA0KIyBwZGYoIlBTMV9vdmVyX3JlZHVjZWRfY2VudGVyc19mYWNldF9hY2Nlc3Npb24ucGRmIiwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNykNCiMgcGxvdChvdmVycmVkdWNlZF9ieV9hY2MpDQojIGRldi5vZmYoKQ0KIyANCiMgcGRmKCJQUzFfb3hpZGl6ZWRfY2VudGVyc19mYWNldF9hY2Nlc3Npb24ucGRmIiwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNykNCiMgcGxvdChveGlkaXplZF9ieV9hY2MpDQojIGRldi5vZmYoKQ0KIyANCiMgcGRmKCJTUEFEX2ZhY2V0X2FjY2Vzc2lvbi5wZGYiLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3KQ0KIyBwbG90KFNQQURfYnlfYWNjKQ0KIyBkZXYub2ZmKCkNCmBgYA0KDQo=