Clearing environment

rm(list = ls())

Loading necessary package

require(deSolve)

System of DEs

SARSCOV2Model <- function (t, y, params) {
  
S.h<-y[1] #create local variable S, first element of y
E.h<-y[2] 
I.h<-y[3]
S.l<-y[4]
E.l<-y[5]
I.l<-y[6]
Q<-y[7]
R<-y[8]
V<-y[9]

with(
  as.list(params, y),
  {
dS.h<--q*beta*(I.h+I.l)*S.h/(S.h+E.h+I.h+S.l+E.l+I.l+Q+R)-c*(1-exp((-1/K)*V))*S.h
dE.h<-q*beta*(I.h+I.l)*S.h/(S.h+E.h+I.h+S.l+E.l+I.l+Q+R)+c*(1-exp((-1/K)*V))*S.h-lambda*E.h
dI.h<-lambda*E.h-b*g*I.h-aH*h*(1-g)*I.h-gammah*(1-h)*(1-g)*I.h
dS.l<--(1-p)*q*beta*(I.h+I.l)*S.l/(S.h+E.h+I.h+S.l+E.l+I.l+Q+R)-(1-p)*c*(1-exp((-1/K)*V))*S.l
dE.l<-(1-p)*q*beta*(I.h+I.l)/(S.h+E.h+I.h+S.l+E.l+I.l+Q+R)+(1-p)*c*(1-exp((-1/K)*V))*S.l-lambda*E.l
dI.l<-lambda*E.l-b*I.l
dQ<-b*I.l+g*b*I.h-aQ*h*Q-gammaQ*(1-h)*Q
dR<-gammah*(1-h)*(1-g)*I.h+gammaQ*(1-h)*Q
dV<-omega*I.h+(1-p)*omega*I.l-delta*V
  dy<-c(dS.h,dE.h,dI.h,dS.l,dE.l,dI.l,dQ,dR,dV) #combine results into one vector dy
list(dy)
  }
)
}

Initial Values

times<-seq(0,180,by=1) 
covid.params<-c(q=0.2,beta=13,p=.2,c=0,lambda=1/4.43,b=1/0.77,g=0,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=1,K=10000)
ystart<-c(S.h=(.2)*100000,E.h=0,I.h=1,S.l=(1-0.2)*100000,E.l=0,I.l=0,Q=0,R=0,V=0)
covid.out <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params))

Changing g to 0, 0.2, 0.4, 0.6, 0.8, & 1

covid.params.g1 <- c(q=0.5,beta=13,p=.2,c=0,lambda=1/4.43,b=1/0.77,g=0,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=1,K=1000000)
covid.params.g2 <- c(q=0.5,beta=13,p=.2,c=0,lambda=1/4.43,b=1/0.77,g=0.2,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=1,K=1000000)
covid.params.g3 <- c(q=0.5,beta=13,p=.2,c=0,lambda=1/4.43,b=1/0.77,g=0.4,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=1,K=1000000)
covid.params.g4 <- c(q=0.5,beta=13,p=.2,c=0,lambda=1/4.43,b=1/0.77,g=0.6,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=1,K=1000000)
covid.params.g5 <- c(q=0.5,beta=13,p=.2,c=0,lambda=1/4.43,b=1/0.77,g=0.8,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=1,K=1000000)
covid.params.g6 <- c(q=0.5,beta=13,p=.2,c=0,lambda=1/4.43,b=1/0.77,g=1,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=1,K=1000000)

Creating data frame for each value of g

covid.out.g1 <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params.g1))
covid.out.g2 <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params.g2))
covid.out.g3 <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params.g3))
covid.out.g4 <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params.g4))
covid.out.g5 <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params.g5))
covid.out.g6 <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params.g6))

Plotting all classes

## SUSCEPTIBLES ##
op1 <- par(fig=c(0,0.5,0,1), mar=c(4,4,1,1))
plot(covid.out.g1$S.h~covid.out.g1$time,type="l", col="blue", xlab="Days", ylab = "Susceptible (High)")
lines(covid.out.g2$S.h~covid.out.g2$time, type="l", col="red")
lines(covid.out.g3$S.h~covid.out.g3$time, type="l", col="darkturquoise")
lines(covid.out.g4$S.h~covid.out.g4$time, type="l", col="orange")
lines(covid.out.g5$S.h~covid.out.g5$time, type="l", col="purple")
lines(covid.out.g6$S.h~covid.out.g6$time, type="l", col="green")
legend(110, 16000,legend = c("g=0","g=0.2","g=0.4","g=0.6","g=0.8","g=1"), col = c("blue", "red", "darkturquoise", "orange", "purple", "green"), lty=1, cex=0.8)

par(fig=c(0.5,1,0,1), mar=c(4,4,1,1), new=T)
plot(covid.out.g1$S.l~covid.out.g1$time,type="l", col="blue", xlab="Days", ylab = "Susceptible (Low)")
lines(covid.out.g2$S.l~covid.out.g2$time, type="l", col="red")
lines(covid.out.g3$S.l~covid.out.g3$time, type="l", col="darkturquoise")
lines(covid.out.g4$S.l~covid.out.g4$time, type="l", col="orange")
lines(covid.out.g5$S.l~covid.out.g5$time, type="l", col="purple")
lines(covid.out.g6$S.l~covid.out.g6$time, type="l", col="green")
legend(110, 65000,legend = c("g=0","g=0.2","g=0.4","g=0.6","g=0.8","g=1"), col = c("blue", "red", "darkturquoise", "orange", "purple", "green"), lty=1, cex=0.8)
par(op1)

## EXPOSED ##
op2 <- par(fig=c(0,0.5,0,1), mar=c(4,4,1,1))

plot(covid.out.g1$E.h~covid.out.g1$time,type="l", col="blue", xlab="Days", ylab = "Exposed (High)")
lines(covid.out.g2$E.h~covid.out.g2$time, type="l", col="red")
lines(covid.out.g3$E.h~covid.out.g3$time, type="l", col="darkturquoise")
lines(covid.out.g4$E.h~covid.out.g4$time, type="l", col="orange")
lines(covid.out.g5$E.h~covid.out.g5$time, type="l", col="purple")
lines(covid.out.g6$E.h~covid.out.g6$time, type="l", col="green")
legend(100, 6000,legend = c("g=0","g=0.2","g=0.4","g=0.6","g=0.8","g=1"), col = c("blue", "red", "darkturquoise", "orange", "purple", "green"), lty=1, cex=0.8)

par(fig=c(0.5,1,0,1), mar=c(4,4,1,1), new=T)
plot(covid.out.g1$E.l~covid.out.g1$time,type="l", col="blue", xlab="Days", ylab = "Exposed (Low)")
lines(covid.out.g2$E.l~covid.out.g2$time, type="l", col="red")
lines(covid.out.g3$E.l~covid.out.g3$time, type="l", col="darkturquoise")
lines(covid.out.g4$E.l~covid.out.g4$time, type="l", col="orange")
lines(covid.out.g5$E.l~covid.out.g5$time, type="l", col="purple")
lines(covid.out.g6$E.l~covid.out.g6$time, type="l", col="green")
legend(100, 2.5,legend = c("g=0","g=0.2","g=0.4","g=0.6","g=0.8","g=1"), col = c("blue", "red", "darkturquoise", "orange", "purple", "green"), lty=1, cex=0.8)
par(op2)

## INFECTED ##
op3 <- par(fig=c(0,0.5,0,1), mar=c(4,4,1,1))

plot(covid.out.g1$I.h~covid.out.g1$time,type="l", col="blue", xlab="Days", ylab = "Infected (High)")
lines(covid.out.g2$I.h~covid.out.g2$time, type="l", col="red")
lines(covid.out.g3$I.h~covid.out.g3$time, type="l", col="darkturquoise")
lines(covid.out.g4$I.h~covid.out.g4$time, type="l", col="orange")
lines(covid.out.g5$I.h~covid.out.g5$time, type="l", col="purple")
lines(covid.out.g6$I.h~covid.out.g6$time, type="l", col="green")
legend(100, 3500,legend = c("g=0","g=0.2","g=0.4","g=0.6","g=0.8","g=1"), col = c("blue", "red", "darkturquoise", "orange", "purple", "green"), lty=1, cex=0.8)

par(fig=c(0.5,1,0,1), mar=c(4,4,1,1), new=T)
plot(covid.out.g1$I.l~covid.out.g1$time,type="l", col="blue", xlab="Days", ylab = "Infected (Low)")
lines(covid.out.g2$I.l~covid.out.g2$time, type="l", col="red")
lines(covid.out.g3$I.l~covid.out.g3$time, type="l", col="darkturquoise")
lines(covid.out.g4$I.l~covid.out.g4$time, type="l", col="orange")
lines(covid.out.g5$I.l~covid.out.g5$time, type="l", col="purple")
lines(covid.out.g6$I.l~covid.out.g6$time, type="l", col="green")
legend(100, 0.45,legend = c("g=0","g=0.2","g=0.4","g=0.6","g=0.8","g=1"), col = c("blue", "red", "darkturquoise", "orange", "purple", "green"), lty=1, cex=0.8)
par(op3)

## SELF-ISOLATING ##
op4 <- par(mar=c(6,6,2,2))

plot(covid.out.g1$Q~covid.out.g1$time,type="l", col="blue", xlab="Days", ylab = "Self-Isolating", ylim=c(0,4500))
lines(covid.out.g2$Q~covid.out.g2$time, type="l", col="red")
lines(covid.out.g3$Q~covid.out.g3$time, type="l", col="darkturquoise")
lines(covid.out.g4$Q~covid.out.g4$time, type="l", col="orange")
lines(covid.out.g5$Q~covid.out.g5$time, type="l", col="purple")
lines(covid.out.g6$Q~covid.out.g6$time, type="l", col="green")
legend(0, 4000,legend = c("g=0","g=0.2","g=0.4","g=0.6","g=0.8","g=1"), col = c("blue", "red", "darkturquoise", "orange", "purple", "green"), lty=1, cex=0.8)
par(op4)

## RECOVERED ##
op5 <- par(mar=c(6,6,2,2))

plot(covid.out.g1$R~covid.out.g1$time,type="l", col="blue", xlab="Days", ylab = "Recovered")
lines(covid.out.g2$R~covid.out.g2$time, type="l", col="red")
lines(covid.out.g3$R~covid.out.g3$time, type="l", col="darkturquoise")
lines(covid.out.g4$R~covid.out.g4$time, type="l", col="orange")
lines(covid.out.g5$R~covid.out.g5$time, type="l", col="purple")
lines(covid.out.g6$R~covid.out.g6$time, type="l", col="green")
legend(0, 17000,legend = c("g=0","g=0.2","g=0.4","g=0.6","g=0.8","g=1"), col = c("blue", "red", "darkturquoise", "orange", "purple", "green"), lty=1, cex=0.8)
par(op5)

## VIRUS IN ENVIRONMENT ##
op6 <- par(mar=c(6,6,2,2))

plot(covid.out.g1$V~covid.out.g1$time,type="l", col="blue", xlab="Days", ylab = "Virus in Environment")
lines(covid.out.g2$V~covid.out.g2$time, type="l", col="red")
lines(covid.out.g3$V~covid.out.g3$time, type="l", col="darkturquoise")
lines(covid.out.g4$V~covid.out.g4$time, type="l", col="orange")
lines(covid.out.g5$V~covid.out.g5$time, type="l", col="purple")
lines(covid.out.g6$V~covid.out.g6$time, type="l", col="green")
legend(125, 3500,legend = c("g=0","g=0.2","g=0.4","g=0.6","g=0.8","g=1"), col = c("blue", "red", "darkturquoise", "orange", "purple", "green"), lty=1, cex=0.8)
par(op6)

Results of Plots

# first dataframe lists highest values
# second dataframe lists lowest values
# third dataframe lists ending values

results.g1 <- data.frame(
  S.h = c(max(covid.out.g1[ ,2]), max(covid.out.g2[ ,2]), max(covid.out.g3[ ,2]), max(covid.out.g4[ ,2]), max(covid.out.g5[ ,2]), max(covid.out.g6[ ,2])),
  E.h = c(max(covid.out.g1[ ,3]), max(covid.out.g2[ ,3]), max(covid.out.g3[ ,3]), max(covid.out.g4[ ,3]), max(covid.out.g5[ ,3]), max(covid.out.g6[ ,3])),
  I.h = c(max(covid.out.g1[ ,4]), max(covid.out.g2[ ,4]), max(covid.out.g3[ ,4]), max(covid.out.g4[ ,4]), max(covid.out.g5[ ,4]), max(covid.out.g6[ ,4])),
  S.l = c(max(covid.out.g1[ ,5]), max(covid.out.g2[ ,5]), max(covid.out.g3[ ,5]), max(covid.out.g4[ ,5]), max(covid.out.g5[ ,5]), max(covid.out.g6[ ,5])),
  E.l = c(max(covid.out.g1[ ,6]), max(covid.out.g2[ ,6]), max(covid.out.g3[ ,6]), max(covid.out.g4[ ,6]), max(covid.out.g5[ ,6]), max(covid.out.g6[ ,6])),
  I.l = c(max(covid.out.g1[ ,7]), max(covid.out.g2[ ,7]), max(covid.out.g3[ ,7]), max(covid.out.g4[ ,7]), max(covid.out.g5[ ,7]), max(covid.out.g6[ ,7])),
  Q = c(max(covid.out.g1[ ,8]), max(covid.out.g2[ ,8]), max(covid.out.g3[ ,8]), max(covid.out.g4[ ,8]), max(covid.out.g5[ ,8]), max(covid.out.g6[ ,8])),
  R = c(max(covid.out.g1[ ,9]), max(covid.out.g2[ ,9]), max(covid.out.g3[ ,9]), max(covid.out.g4[ ,9]), max(covid.out.g5[ ,9]), max(covid.out.g6[ ,9])),
  V = c(max(covid.out.g1[ ,10]), max(covid.out.g2[ ,10]), max(covid.out.g3[ ,10]), max(covid.out.g4[ ,10]), max(covid.out.g5[ ,10]), max(covid.out.g6[ ,10]))
)
results.g2 <- data.frame(
  S.h = c(min(covid.out.g1[ ,2]), min(covid.out.g2[ ,2]), min(covid.out.g3[ ,2]), min(covid.out.g4[ ,2]), min(covid.out.g5[ ,2]), min(covid.out.g6[ ,2])),
  E.h = c(min(covid.out.g1[ ,3]), min(covid.out.g2[ ,3]), min(covid.out.g3[ ,3]), min(covid.out.g4[ ,3]), min(covid.out.g5[ ,3]), min(covid.out.g6[ ,3])),
  I.h = c(min(covid.out.g1[ ,4]), min(covid.out.g2[ ,4]), min(covid.out.g3[ ,4]), min(covid.out.g4[ ,4]), min(covid.out.g5[ ,4]), min(covid.out.g6[ ,4])),
  S.l = c(min(covid.out.g1[ ,5]), min(covid.out.g2[ ,5]), min(covid.out.g3[ ,5]), min(covid.out.g4[ ,5]), min(covid.out.g5[ ,5]), min(covid.out.g6[ ,5])),
  E.l = c(min(covid.out.g1[ ,6]), min(covid.out.g2[ ,6]), min(covid.out.g3[ ,6]), min(covid.out.g4[ ,6]), min(covid.out.g5[ ,6]), min(covid.out.g6[ ,6])),
  I.l = c(min(covid.out.g1[ ,7]), min(covid.out.g2[ ,7]), min(covid.out.g3[ ,7]), min(covid.out.g4[ ,7]), min(covid.out.g5[ ,7]), min(covid.out.g6[ ,7])),
  Q = c(min(covid.out.g1[ ,8]), min(covid.out.g2[ ,8]), min(covid.out.g3[ ,8]), min(covid.out.g4[ ,8]), min(covid.out.g5[ ,8]), min(covid.out.g6[ ,8])),
  R = c(min(covid.out.g1[ ,9]), min(covid.out.g2[ ,9]), min(covid.out.g3[ ,9]), min(covid.out.g4[ ,9]), min(covid.out.g5[ ,9]), min(covid.out.g6[ ,9])),
  V = c(min(covid.out.g1[ ,10]), min(covid.out.g2[ ,10]), min(covid.out.g3[ ,10]), min(covid.out.g4[ ,10]), min(covid.out.g5[ ,10]), min(covid.out.g6[ ,10]))
)

results.g3 <- data.frame( # ending values
  S.h = c(tail(covid.out.g1[ ,2],n=1), tail(covid.out.g2[ ,2],n=1), tail(covid.out.g3[ ,2],n=1), tail(covid.out.g4[ ,2],n=1), tail(covid.out.g5[ ,2],n=1), tail(covid.out.g6[ ,2],n=1)), 
  E.h = c(tail(covid.out.g1[ ,3],n=1), tail(covid.out.g2[ ,3],n=1), tail(covid.out.g3[ ,3],n=1), tail(covid.out.g4[ ,3],n=1), tail(covid.out.g5[ ,3],n=1), tail(covid.out.g6[ ,3],n=1)),
  I.h = c(tail(covid.out.g1[ ,4],n=1), tail(covid.out.g2[ ,4],n=1), tail(covid.out.g3[ ,4],n=1), tail(covid.out.g4[ ,4],n=1), tail(covid.out.g5[ ,4],n=1), tail(covid.out.g6[ ,4],n=1)),
  S.l = c(tail(covid.out.g1[ ,5],n=1), tail(covid.out.g2[ ,5],n=1), tail(covid.out.g3[ ,5],n=1), tail(covid.out.g4[ ,5],n=1), tail(covid.out.g5[ ,5],n=1), tail(covid.out.g6[ ,5],n=1)),
  E.l = c(tail(covid.out.g1[ ,6],n=1), tail(covid.out.g2[ ,6],n=1), tail(covid.out.g3[ ,6],n=1), tail(covid.out.g4[ ,6],n=1), tail(covid.out.g5[ ,6],n=1), tail(covid.out.g6[ ,6],n=1)), 
  I.l = c(tail(covid.out.g1[ ,7],n=1), tail(covid.out.g2[ ,7],n=1), tail(covid.out.g3[ ,7],n=1), tail(covid.out.g4[ ,7],n=1), tail(covid.out.g5[ ,7],n=1), tail(covid.out.g6[ ,7],n=1)),
  Q = c(tail(covid.out.g1[ ,8],n=1), tail(covid.out.g2[ ,8],n=1), tail(covid.out.g3[ ,8],n=1), tail(covid.out.g4[ ,8],n=1), tail(covid.out.g5[ ,8],n=1), tail(covid.out.g6[ ,8],n=1)),
  R = c(tail(covid.out.g1[ ,9],n=1), tail(covid.out.g2[ ,9],n=1), tail(covid.out.g3[ ,9],n=1), tail(covid.out.g4[ ,9],n=1), tail(covid.out.g5[ ,9],n=1), tail(covid.out.g6[ ,9],n=1)),
  V = c(tail(covid.out.g1[ ,10],n=1), tail(covid.out.g2[ ,10],n=1), tail(covid.out.g3[ ,10],n=1), tail(covid.out.g4[ ,10],n=1), tail(covid.out.g5[ ,10],n=1), tail(covid.out.g6[ ,10],n=1))
)

`.rowNamesDF<-`(results.g1,make.names=FALSE,c('g = 0','g = 0.2','g = 0.4','g = 0.6','g = 0.8','g = 1'))
`.rowNamesDF<-`(results.g2,make.names=FALSE,c('g = 0','g = 0.2','g = 0.4','g = 0.6','g = 0.8','g = 1'))
`.rowNamesDF<-`(results.g3,make.names=FALSE,c('g = 0','g = 0.2','g = 0.4','g = 0.6','g = 0.8','g = 1'))

Plotting highest, lowest, and ending values of classes

## HIGHEST ##
op7 <- par(mar=c(6,6,2,2))
plot(results.g1$S.h,type="b", col="blue", xlab="q values", ylab = "Individuals", main="Highest", ylim=c(0,80000))
lines(results.g1$E.h, type = "b", col="red")
lines(results.g1$I.h, type = "b", col="green")
lines(results.g1$S.l, type = "b", col="purple")
lines(results.g1$E.l, type = "b", col="orange")
lines(results.g1$I.l, type = "b", col="forestgreen")
lines(results.g1$Q, type = "b", col="darkturquoise")
lines(results.g1$R, type = "b", col="pink2")
lines(results.g1$V, type = "b", col="yellow")

legend(3, 70000,legend = c("Susceptibles (High)","Exposed (High)","Infected (High)","Susceptibles (Low)","Exposed (Low)","Infected (Low)", "Self-Isolating","Recovered","Virus"), col = c("blue", "red", "green","purple","orange","forestgreen","darkturquoise","pink2","yellow"), lty=1, cex=0.6)

par(op7)

## LOWEST
op8 <- par(mar=c(6,6,2,2))

plot(results.g2$S.h,type="b", col="blue", main="Lowest", xlab="q values", ylab = "Individuals", ylim=c(0,80000))
lines(results.g2$E.h, type = "b", col="red")
lines(results.g2$I.h, type = "b", col="green")
lines(results.g2$S.l, type = "b", col="purple")
lines(results.g2$E.l, type = "b", col="orange")
lines(results.g2$I.l, type = "b", col="forestgreen")
lines(results.g2$Q, type = "b", col="darkturquoise")
lines(results.g2$R, type = "b", col="pink2")
lines(results.g2$V, type = "b", col="yellow")

legend(3, 70000,legend = c("Susceptibles (High)","Exposed (High)","Infected (High)","Susceptibles (Low)","Exposed (Low)","Infected (Low)", "Self-Isolating","Recovered","Virus"), col = c("blue", "red", "green","purple","orange","forestgreen","darkturquoise","pink2","yellow"), lty=1, cex=0.6)

par(op8)

## ENDING ##
op9 <- par(mar=c(6,6,2,2))

plot(results.g3$S.h, type="b", col="blue", main="Ending", xlab="q values", ylab = "Individuals", ylim=c(0,80000))
lines(results.g3$E.h, type = "b", col="red")
lines(results.g3$I.h, type = "b", col="green")
lines(results.g3$S.l, type = "b", col="purple")
lines(results.g3$E.l, type = "b", col="orange")
lines(results.g3$I.l, type = "b", col="forestgreen")
lines(results.g3$Q, type = "b", col="darkturquoise")
lines(results.g3$R, type = "b", col="pink2")
lines(results.g3$V, type = "b", col="yellow")

legend(3, 70000,legend = c("Susceptibles (High)","Exposed (High)","Infected (High)","Susceptibles (Low)","Exposed (Low)","Infected (Low)", "Self-Isolating","Recovered","Virus"), col = c("blue", "red", "green","purple","orange","forestgreen","darkturquoise","pink2","yellow"), lty=1, cex=0.6)

par(op9)

LS0tDQp0aXRsZTogIlNBUlMtQ29WLTIgTW9kZWwgKGcpIg0KYXV0aG9yOiBTaGVyaWRhbiBQYXluZQ0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCkNsZWFyaW5nIGVudmlyb25tZW50DQpgYGB7cn0NCnJtKGxpc3QgPSBscygpKQ0KYGBgDQoNCkxvYWRpbmcgbmVjZXNzYXJ5IHBhY2thZ2UNCmBgYHtyfQ0KcmVxdWlyZShkZVNvbHZlKQ0KYGBgDQoNClN5c3RlbSBvZiBERXMNCmBgYHtyfQ0KU0FSU0NPVjJNb2RlbCA8LSBmdW5jdGlvbiAodCwgeSwgcGFyYW1zKSB7DQogIA0KUy5oPC15WzFdICNjcmVhdGUgbG9jYWwgdmFyaWFibGUgUywgZmlyc3QgZWxlbWVudCBvZiB5DQpFLmg8LXlbMl0gDQpJLmg8LXlbM10NClMubDwteVs0XQ0KRS5sPC15WzVdDQpJLmw8LXlbNl0NClE8LXlbN10NClI8LXlbOF0NClY8LXlbOV0NCg0Kd2l0aCgNCiAgYXMubGlzdChwYXJhbXMsIHkpLA0KICB7DQpkUy5oPC0tcSpiZXRhKihJLmgrSS5sKSpTLmgvKFMuaCtFLmgrSS5oK1MubCtFLmwrSS5sK1ErUiktYyooMS1leHAoKC0xL0spKlYpKSpTLmgNCmRFLmg8LXEqYmV0YSooSS5oK0kubCkqUy5oLyhTLmgrRS5oK0kuaCtTLmwrRS5sK0kubCtRK1IpK2MqKDEtZXhwKCgtMS9LKSpWKSkqUy5oLWxhbWJkYSpFLmgNCmRJLmg8LWxhbWJkYSpFLmgtYipnKkkuaC1hSCpoKigxLWcpKkkuaC1nYW1tYWgqKDEtaCkqKDEtZykqSS5oDQpkUy5sPC0tKDEtcCkqcSpiZXRhKihJLmgrSS5sKSpTLmwvKFMuaCtFLmgrSS5oK1MubCtFLmwrSS5sK1ErUiktKDEtcCkqYyooMS1leHAoKC0xL0spKlYpKSpTLmwNCmRFLmw8LSgxLXApKnEqYmV0YSooSS5oK0kubCkvKFMuaCtFLmgrSS5oK1MubCtFLmwrSS5sK1ErUikrKDEtcCkqYyooMS1leHAoKC0xL0spKlYpKSpTLmwtbGFtYmRhKkUubA0KZEkubDwtbGFtYmRhKkUubC1iKkkubA0KZFE8LWIqSS5sK2cqYipJLmgtYVEqaCpRLWdhbW1hUSooMS1oKSpRDQpkUjwtZ2FtbWFoKigxLWgpKigxLWcpKkkuaCtnYW1tYVEqKDEtaCkqUQ0KZFY8LW9tZWdhKkkuaCsoMS1wKSpvbWVnYSpJLmwtZGVsdGEqVg0KICBkeTwtYyhkUy5oLGRFLmgsZEkuaCxkUy5sLGRFLmwsZEkubCxkUSxkUixkVikgI2NvbWJpbmUgcmVzdWx0cyBpbnRvIG9uZSB2ZWN0b3IgZHkNCmxpc3QoZHkpDQogIH0NCikNCn0NCmBgYA0KDQpJbml0aWFsIFZhbHVlcw0KYGBge3J9DQp0aW1lczwtc2VxKDAsMTgwLGJ5PTEpIA0KY292aWQucGFyYW1zPC1jKHE9MC4yLGJldGE9MTMscD0uMixjPTAsbGFtYmRhPTEvNC40MyxiPTEvMC43NyxnPTAsZ2FtbWFRPTAuMSxnYW1tYWg9MS8yLjcsYVE9MS8xLjkzLGFIPTEvMi43LGg9MC4wMDA4MixvbWVnYT0wLGRlbHRhPTEsSz0xMDAwMCkNCnlzdGFydDwtYyhTLmg9KC4yKSoxMDAwMDAsRS5oPTAsSS5oPTEsUy5sPSgxLTAuMikqMTAwMDAwLEUubD0wLEkubD0wLFE9MCxSPTAsVj0wKQ0KY292aWQub3V0IDwtIGFzLmRhdGEuZnJhbWUobHNvZGEoeXN0YXJ0LHRpbWVzLFNBUlNDT1YyTW9kZWwsY292aWQucGFyYW1zKSkNCmBgYA0KDQpDaGFuZ2luZyBnIHRvIDAsIDAuMiwgMC40LCAwLjYsIDAuOCwgJiAxDQpgYGB7cn0NCmNvdmlkLnBhcmFtcy5nMSA8LSBjKHE9MC41LGJldGE9MTMscD0uMixjPTAsbGFtYmRhPTEvNC40MyxiPTEvMC43NyxnPTAsZ2FtbWFRPTAuMSxnYW1tYWg9MS8yLjcsYVE9MS8xLjkzLGFIPTEvMi43LGg9MC4wMDA4MixvbWVnYT0wLGRlbHRhPTEsSz0xMDAwMDAwKQ0KY292aWQucGFyYW1zLmcyIDwtIGMocT0wLjUsYmV0YT0xMyxwPS4yLGM9MCxsYW1iZGE9MS80LjQzLGI9MS8wLjc3LGc9MC4yLGdhbW1hUT0wLjEsZ2FtbWFoPTEvMi43LGFRPTEvMS45MyxhSD0xLzIuNyxoPTAuMDAwODIsb21lZ2E9MCxkZWx0YT0xLEs9MTAwMDAwMCkNCmNvdmlkLnBhcmFtcy5nMyA8LSBjKHE9MC41LGJldGE9MTMscD0uMixjPTAsbGFtYmRhPTEvNC40MyxiPTEvMC43NyxnPTAuNCxnYW1tYVE9MC4xLGdhbW1haD0xLzIuNyxhUT0xLzEuOTMsYUg9MS8yLjcsaD0wLjAwMDgyLG9tZWdhPTAsZGVsdGE9MSxLPTEwMDAwMDApDQpjb3ZpZC5wYXJhbXMuZzQgPC0gYyhxPTAuNSxiZXRhPTEzLHA9LjIsYz0wLGxhbWJkYT0xLzQuNDMsYj0xLzAuNzcsZz0wLjYsZ2FtbWFRPTAuMSxnYW1tYWg9MS8yLjcsYVE9MS8xLjkzLGFIPTEvMi43LGg9MC4wMDA4MixvbWVnYT0wLGRlbHRhPTEsSz0xMDAwMDAwKQ0KY292aWQucGFyYW1zLmc1IDwtIGMocT0wLjUsYmV0YT0xMyxwPS4yLGM9MCxsYW1iZGE9MS80LjQzLGI9MS8wLjc3LGc9MC44LGdhbW1hUT0wLjEsZ2FtbWFoPTEvMi43LGFRPTEvMS45MyxhSD0xLzIuNyxoPTAuMDAwODIsb21lZ2E9MCxkZWx0YT0xLEs9MTAwMDAwMCkNCmNvdmlkLnBhcmFtcy5nNiA8LSBjKHE9MC41LGJldGE9MTMscD0uMixjPTAsbGFtYmRhPTEvNC40MyxiPTEvMC43NyxnPTEsZ2FtbWFRPTAuMSxnYW1tYWg9MS8yLjcsYVE9MS8xLjkzLGFIPTEvMi43LGg9MC4wMDA4MixvbWVnYT0wLGRlbHRhPTEsSz0xMDAwMDAwKQ0KYGBgDQoNCkNyZWF0aW5nIGRhdGEgZnJhbWUgZm9yIGVhY2ggdmFsdWUgb2YgZw0KYGBge3J9DQpjb3ZpZC5vdXQuZzEgPC0gYXMuZGF0YS5mcmFtZShsc29kYSh5c3RhcnQsdGltZXMsU0FSU0NPVjJNb2RlbCxjb3ZpZC5wYXJhbXMuZzEpKQ0KY292aWQub3V0LmcyIDwtIGFzLmRhdGEuZnJhbWUobHNvZGEoeXN0YXJ0LHRpbWVzLFNBUlNDT1YyTW9kZWwsY292aWQucGFyYW1zLmcyKSkNCmNvdmlkLm91dC5nMyA8LSBhcy5kYXRhLmZyYW1lKGxzb2RhKHlzdGFydCx0aW1lcyxTQVJTQ09WMk1vZGVsLGNvdmlkLnBhcmFtcy5nMykpDQpjb3ZpZC5vdXQuZzQgPC0gYXMuZGF0YS5mcmFtZShsc29kYSh5c3RhcnQsdGltZXMsU0FSU0NPVjJNb2RlbCxjb3ZpZC5wYXJhbXMuZzQpKQ0KY292aWQub3V0Lmc1IDwtIGFzLmRhdGEuZnJhbWUobHNvZGEoeXN0YXJ0LHRpbWVzLFNBUlNDT1YyTW9kZWwsY292aWQucGFyYW1zLmc1KSkNCmNvdmlkLm91dC5nNiA8LSBhcy5kYXRhLmZyYW1lKGxzb2RhKHlzdGFydCx0aW1lcyxTQVJTQ09WMk1vZGVsLGNvdmlkLnBhcmFtcy5nNikpDQpgYGANCg0KUGxvdHRpbmcgYWxsIGNsYXNzZXMNCmBgYHtyfQ0KIyMgU1VTQ0VQVElCTEVTICMjDQpvcDEgPC0gcGFyKGZpZz1jKDAsMC41LDAsMSksIG1hcj1jKDQsNCwxLDEpKQ0KcGxvdChjb3ZpZC5vdXQuZzEkUy5ofmNvdmlkLm91dC5nMSR0aW1lLHR5cGU9ImwiLCBjb2w9ImJsdWUiLCB4bGFiPSJEYXlzIiwgeWxhYiA9ICJTdXNjZXB0aWJsZSAoSGlnaCkiKQ0KbGluZXMoY292aWQub3V0LmcyJFMuaH5jb3ZpZC5vdXQuZzIkdGltZSwgdHlwZT0ibCIsIGNvbD0icmVkIikNCmxpbmVzKGNvdmlkLm91dC5nMyRTLmh+Y292aWQub3V0LmczJHRpbWUsIHR5cGU9ImwiLCBjb2w9ImRhcmt0dXJxdW9pc2UiKQ0KbGluZXMoY292aWQub3V0Lmc0JFMuaH5jb3ZpZC5vdXQuZzQkdGltZSwgdHlwZT0ibCIsIGNvbD0ib3JhbmdlIikNCmxpbmVzKGNvdmlkLm91dC5nNSRTLmh+Y292aWQub3V0Lmc1JHRpbWUsIHR5cGU9ImwiLCBjb2w9InB1cnBsZSIpDQpsaW5lcyhjb3ZpZC5vdXQuZzYkUy5ofmNvdmlkLm91dC5nNiR0aW1lLCB0eXBlPSJsIiwgY29sPSJncmVlbiIpDQpsZWdlbmQoMTEwLCAxNjAwMCxsZWdlbmQgPSBjKCJnPTAiLCJnPTAuMiIsImc9MC40IiwiZz0wLjYiLCJnPTAuOCIsImc9MSIpLCBjb2wgPSBjKCJibHVlIiwgInJlZCIsICJkYXJrdHVycXVvaXNlIiwgIm9yYW5nZSIsICJwdXJwbGUiLCAiZ3JlZW4iKSwgbHR5PTEsIGNleD0wLjgpDQoNCnBhcihmaWc9YygwLjUsMSwwLDEpLCBtYXI9Yyg0LDQsMSwxKSwgbmV3PVQpDQpwbG90KGNvdmlkLm91dC5nMSRTLmx+Y292aWQub3V0LmcxJHRpbWUsdHlwZT0ibCIsIGNvbD0iYmx1ZSIsIHhsYWI9IkRheXMiLCB5bGFiID0gIlN1c2NlcHRpYmxlIChMb3cpIikNCmxpbmVzKGNvdmlkLm91dC5nMiRTLmx+Y292aWQub3V0LmcyJHRpbWUsIHR5cGU9ImwiLCBjb2w9InJlZCIpDQpsaW5lcyhjb3ZpZC5vdXQuZzMkUy5sfmNvdmlkLm91dC5nMyR0aW1lLCB0eXBlPSJsIiwgY29sPSJkYXJrdHVycXVvaXNlIikNCmxpbmVzKGNvdmlkLm91dC5nNCRTLmx+Y292aWQub3V0Lmc0JHRpbWUsIHR5cGU9ImwiLCBjb2w9Im9yYW5nZSIpDQpsaW5lcyhjb3ZpZC5vdXQuZzUkUy5sfmNvdmlkLm91dC5nNSR0aW1lLCB0eXBlPSJsIiwgY29sPSJwdXJwbGUiKQ0KbGluZXMoY292aWQub3V0Lmc2JFMubH5jb3ZpZC5vdXQuZzYkdGltZSwgdHlwZT0ibCIsIGNvbD0iZ3JlZW4iKQ0KbGVnZW5kKDExMCwgNjUwMDAsbGVnZW5kID0gYygiZz0wIiwiZz0wLjIiLCJnPTAuNCIsImc9MC42IiwiZz0wLjgiLCJnPTEiKSwgY29sID0gYygiYmx1ZSIsICJyZWQiLCAiZGFya3R1cnF1b2lzZSIsICJvcmFuZ2UiLCAicHVycGxlIiwgImdyZWVuIiksIGx0eT0xLCBjZXg9MC44KQ0KcGFyKG9wMSkNCg0KIyMgRVhQT1NFRCAjIw0Kb3AyIDwtIHBhcihmaWc9YygwLDAuNSwwLDEpLCBtYXI9Yyg0LDQsMSwxKSkNCnBsb3QoY292aWQub3V0LmcxJEUuaH5jb3ZpZC5vdXQuZzEkdGltZSx0eXBlPSJsIiwgY29sPSJibHVlIiwgeGxhYj0iRGF5cyIsIHlsYWIgPSAiRXhwb3NlZCAoSGlnaCkiKQ0KbGluZXMoY292aWQub3V0LmcyJEUuaH5jb3ZpZC5vdXQuZzIkdGltZSwgdHlwZT0ibCIsIGNvbD0icmVkIikNCmxpbmVzKGNvdmlkLm91dC5nMyRFLmh+Y292aWQub3V0LmczJHRpbWUsIHR5cGU9ImwiLCBjb2w9ImRhcmt0dXJxdW9pc2UiKQ0KbGluZXMoY292aWQub3V0Lmc0JEUuaH5jb3ZpZC5vdXQuZzQkdGltZSwgdHlwZT0ibCIsIGNvbD0ib3JhbmdlIikNCmxpbmVzKGNvdmlkLm91dC5nNSRFLmh+Y292aWQub3V0Lmc1JHRpbWUsIHR5cGU9ImwiLCBjb2w9InB1cnBsZSIpDQpsaW5lcyhjb3ZpZC5vdXQuZzYkRS5ofmNvdmlkLm91dC5nNiR0aW1lLCB0eXBlPSJsIiwgY29sPSJncmVlbiIpDQpsZWdlbmQoMTAwLCA2MDAwLGxlZ2VuZCA9IGMoImc9MCIsImc9MC4yIiwiZz0wLjQiLCJnPTAuNiIsImc9MC44IiwiZz0xIiksIGNvbCA9IGMoImJsdWUiLCAicmVkIiwgImRhcmt0dXJxdW9pc2UiLCAib3JhbmdlIiwgInB1cnBsZSIsICJncmVlbiIpLCBsdHk9MSwgY2V4PTAuOCkNCg0KcGFyKGZpZz1jKDAuNSwxLDAsMSksIG1hcj1jKDQsNCwxLDEpLCBuZXc9VCkNCnBsb3QoY292aWQub3V0LmcxJEUubH5jb3ZpZC5vdXQuZzEkdGltZSx0eXBlPSJsIiwgY29sPSJibHVlIiwgeGxhYj0iRGF5cyIsIHlsYWIgPSAiRXhwb3NlZCAoTG93KSIpDQpsaW5lcyhjb3ZpZC5vdXQuZzIkRS5sfmNvdmlkLm91dC5nMiR0aW1lLCB0eXBlPSJsIiwgY29sPSJyZWQiKQ0KbGluZXMoY292aWQub3V0LmczJEUubH5jb3ZpZC5vdXQuZzMkdGltZSwgdHlwZT0ibCIsIGNvbD0iZGFya3R1cnF1b2lzZSIpDQpsaW5lcyhjb3ZpZC5vdXQuZzQkRS5sfmNvdmlkLm91dC5nNCR0aW1lLCB0eXBlPSJsIiwgY29sPSJvcmFuZ2UiKQ0KbGluZXMoY292aWQub3V0Lmc1JEUubH5jb3ZpZC5vdXQuZzUkdGltZSwgdHlwZT0ibCIsIGNvbD0icHVycGxlIikNCmxpbmVzKGNvdmlkLm91dC5nNiRFLmx+Y292aWQub3V0Lmc2JHRpbWUsIHR5cGU9ImwiLCBjb2w9ImdyZWVuIikNCmxlZ2VuZCgxMDAsIDIuNSxsZWdlbmQgPSBjKCJnPTAiLCJnPTAuMiIsImc9MC40IiwiZz0wLjYiLCJnPTAuOCIsImc9MSIpLCBjb2wgPSBjKCJibHVlIiwgInJlZCIsICJkYXJrdHVycXVvaXNlIiwgIm9yYW5nZSIsICJwdXJwbGUiLCAiZ3JlZW4iKSwgbHR5PTEsIGNleD0wLjgpDQpwYXIob3AyKQ0KDQojIyBJTkZFQ1RFRCAjIw0Kb3AzIDwtIHBhcihmaWc9YygwLDAuNSwwLDEpLCBtYXI9Yyg0LDQsMSwxKSkNCnBsb3QoY292aWQub3V0LmcxJEkuaH5jb3ZpZC5vdXQuZzEkdGltZSx0eXBlPSJsIiwgY29sPSJibHVlIiwgeGxhYj0iRGF5cyIsIHlsYWIgPSAiSW5mZWN0ZWQgKEhpZ2gpIikNCmxpbmVzKGNvdmlkLm91dC5nMiRJLmh+Y292aWQub3V0LmcyJHRpbWUsIHR5cGU9ImwiLCBjb2w9InJlZCIpDQpsaW5lcyhjb3ZpZC5vdXQuZzMkSS5ofmNvdmlkLm91dC5nMyR0aW1lLCB0eXBlPSJsIiwgY29sPSJkYXJrdHVycXVvaXNlIikNCmxpbmVzKGNvdmlkLm91dC5nNCRJLmh+Y292aWQub3V0Lmc0JHRpbWUsIHR5cGU9ImwiLCBjb2w9Im9yYW5nZSIpDQpsaW5lcyhjb3ZpZC5vdXQuZzUkSS5ofmNvdmlkLm91dC5nNSR0aW1lLCB0eXBlPSJsIiwgY29sPSJwdXJwbGUiKQ0KbGluZXMoY292aWQub3V0Lmc2JEkuaH5jb3ZpZC5vdXQuZzYkdGltZSwgdHlwZT0ibCIsIGNvbD0iZ3JlZW4iKQ0KbGVnZW5kKDEwMCwgMzUwMCxsZWdlbmQgPSBjKCJnPTAiLCJnPTAuMiIsImc9MC40IiwiZz0wLjYiLCJnPTAuOCIsImc9MSIpLCBjb2wgPSBjKCJibHVlIiwgInJlZCIsICJkYXJrdHVycXVvaXNlIiwgIm9yYW5nZSIsICJwdXJwbGUiLCAiZ3JlZW4iKSwgbHR5PTEsIGNleD0wLjgpDQoNCnBhcihmaWc9YygwLjUsMSwwLDEpLCBtYXI9Yyg0LDQsMSwxKSwgbmV3PVQpDQpwbG90KGNvdmlkLm91dC5nMSRJLmx+Y292aWQub3V0LmcxJHRpbWUsdHlwZT0ibCIsIGNvbD0iYmx1ZSIsIHhsYWI9IkRheXMiLCB5bGFiID0gIkluZmVjdGVkIChMb3cpIikNCmxpbmVzKGNvdmlkLm91dC5nMiRJLmx+Y292aWQub3V0LmcyJHRpbWUsIHR5cGU9ImwiLCBjb2w9InJlZCIpDQpsaW5lcyhjb3ZpZC5vdXQuZzMkSS5sfmNvdmlkLm91dC5nMyR0aW1lLCB0eXBlPSJsIiwgY29sPSJkYXJrdHVycXVvaXNlIikNCmxpbmVzKGNvdmlkLm91dC5nNCRJLmx+Y292aWQub3V0Lmc0JHRpbWUsIHR5cGU9ImwiLCBjb2w9Im9yYW5nZSIpDQpsaW5lcyhjb3ZpZC5vdXQuZzUkSS5sfmNvdmlkLm91dC5nNSR0aW1lLCB0eXBlPSJsIiwgY29sPSJwdXJwbGUiKQ0KbGluZXMoY292aWQub3V0Lmc2JEkubH5jb3ZpZC5vdXQuZzYkdGltZSwgdHlwZT0ibCIsIGNvbD0iZ3JlZW4iKQ0KbGVnZW5kKDEwMCwgMC40NSxsZWdlbmQgPSBjKCJnPTAiLCJnPTAuMiIsImc9MC40IiwiZz0wLjYiLCJnPTAuOCIsImc9MSIpLCBjb2wgPSBjKCJibHVlIiwgInJlZCIsICJkYXJrdHVycXVvaXNlIiwgIm9yYW5nZSIsICJwdXJwbGUiLCAiZ3JlZW4iKSwgbHR5PTEsIGNleD0wLjgpDQpwYXIob3AzKQ0KDQojIyBTRUxGLUlTT0xBVElORyAjIw0Kb3A0IDwtIHBhcihtYXI9Yyg2LDYsMiwyKSkNCnBsb3QoY292aWQub3V0LmcxJFF+Y292aWQub3V0LmcxJHRpbWUsdHlwZT0ibCIsIGNvbD0iYmx1ZSIsIHhsYWI9IkRheXMiLCB5bGFiID0gIlNlbGYtSXNvbGF0aW5nIiwgeWxpbT1jKDAsNDUwMCkpDQpsaW5lcyhjb3ZpZC5vdXQuZzIkUX5jb3ZpZC5vdXQuZzIkdGltZSwgdHlwZT0ibCIsIGNvbD0icmVkIikNCmxpbmVzKGNvdmlkLm91dC5nMyRRfmNvdmlkLm91dC5nMyR0aW1lLCB0eXBlPSJsIiwgY29sPSJkYXJrdHVycXVvaXNlIikNCmxpbmVzKGNvdmlkLm91dC5nNCRRfmNvdmlkLm91dC5nNCR0aW1lLCB0eXBlPSJsIiwgY29sPSJvcmFuZ2UiKQ0KbGluZXMoY292aWQub3V0Lmc1JFF+Y292aWQub3V0Lmc1JHRpbWUsIHR5cGU9ImwiLCBjb2w9InB1cnBsZSIpDQpsaW5lcyhjb3ZpZC5vdXQuZzYkUX5jb3ZpZC5vdXQuZzYkdGltZSwgdHlwZT0ibCIsIGNvbD0iZ3JlZW4iKQ0KbGVnZW5kKDAsIDQwMDAsbGVnZW5kID0gYygiZz0wIiwiZz0wLjIiLCJnPTAuNCIsImc9MC42IiwiZz0wLjgiLCJnPTEiKSwgY29sID0gYygiYmx1ZSIsICJyZWQiLCAiZGFya3R1cnF1b2lzZSIsICJvcmFuZ2UiLCAicHVycGxlIiwgImdyZWVuIiksIGx0eT0xLCBjZXg9MC44KQ0KcGFyKG9wNCkNCg0KIyMgUkVDT1ZFUkVEICMjDQpvcDUgPC0gcGFyKG1hcj1jKDYsNiwyLDIpKQ0KcGxvdChjb3ZpZC5vdXQuZzEkUn5jb3ZpZC5vdXQuZzEkdGltZSx0eXBlPSJsIiwgY29sPSJibHVlIiwgeGxhYj0iRGF5cyIsIHlsYWIgPSAiUmVjb3ZlcmVkIikNCmxpbmVzKGNvdmlkLm91dC5nMiRSfmNvdmlkLm91dC5nMiR0aW1lLCB0eXBlPSJsIiwgY29sPSJyZWQiKQ0KbGluZXMoY292aWQub3V0LmczJFJ+Y292aWQub3V0LmczJHRpbWUsIHR5cGU9ImwiLCBjb2w9ImRhcmt0dXJxdW9pc2UiKQ0KbGluZXMoY292aWQub3V0Lmc0JFJ+Y292aWQub3V0Lmc0JHRpbWUsIHR5cGU9ImwiLCBjb2w9Im9yYW5nZSIpDQpsaW5lcyhjb3ZpZC5vdXQuZzUkUn5jb3ZpZC5vdXQuZzUkdGltZSwgdHlwZT0ibCIsIGNvbD0icHVycGxlIikNCmxpbmVzKGNvdmlkLm91dC5nNiRSfmNvdmlkLm91dC5nNiR0aW1lLCB0eXBlPSJsIiwgY29sPSJncmVlbiIpDQpsZWdlbmQoMCwgMTcwMDAsbGVnZW5kID0gYygiZz0wIiwiZz0wLjIiLCJnPTAuNCIsImc9MC42IiwiZz0wLjgiLCJnPTEiKSwgY29sID0gYygiYmx1ZSIsICJyZWQiLCAiZGFya3R1cnF1b2lzZSIsICJvcmFuZ2UiLCAicHVycGxlIiwgImdyZWVuIiksIGx0eT0xLCBjZXg9MC44KQ0KcGFyKG9wNSkNCg0KIyMgVklSVVMgSU4gRU5WSVJPTk1FTlQgIyMNCm9wNiA8LSBwYXIobWFyPWMoNiw2LDIsMikpDQpwbG90KGNvdmlkLm91dC5nMSRWfmNvdmlkLm91dC5nMSR0aW1lLHR5cGU9ImwiLCBjb2w9ImJsdWUiLCB4bGFiPSJEYXlzIiwgeWxhYiA9ICJWaXJ1cyBpbiBFbnZpcm9ubWVudCIpDQpsaW5lcyhjb3ZpZC5vdXQuZzIkVn5jb3ZpZC5vdXQuZzIkdGltZSwgdHlwZT0ibCIsIGNvbD0icmVkIikNCmxpbmVzKGNvdmlkLm91dC5nMyRWfmNvdmlkLm91dC5nMyR0aW1lLCB0eXBlPSJsIiwgY29sPSJkYXJrdHVycXVvaXNlIikNCmxpbmVzKGNvdmlkLm91dC5nNCRWfmNvdmlkLm91dC5nNCR0aW1lLCB0eXBlPSJsIiwgY29sPSJvcmFuZ2UiKQ0KbGluZXMoY292aWQub3V0Lmc1JFZ+Y292aWQub3V0Lmc1JHRpbWUsIHR5cGU9ImwiLCBjb2w9InB1cnBsZSIpDQpsaW5lcyhjb3ZpZC5vdXQuZzYkVn5jb3ZpZC5vdXQuZzYkdGltZSwgdHlwZT0ibCIsIGNvbD0iZ3JlZW4iKQ0KbGVnZW5kKDEyNSwgMzUwMCxsZWdlbmQgPSBjKCJnPTAiLCJnPTAuMiIsImc9MC40IiwiZz0wLjYiLCJnPTAuOCIsImc9MSIpLCBjb2wgPSBjKCJibHVlIiwgInJlZCIsICJkYXJrdHVycXVvaXNlIiwgIm9yYW5nZSIsICJwdXJwbGUiLCAiZ3JlZW4iKSwgbHR5PTEsIGNleD0wLjgpDQpwYXIob3A2KQ0KDQpgYGANCg0KUmVzdWx0cyBvZiBQbG90cw0KYGBge3J9DQojIGZpcnN0IGRhdGFmcmFtZSBsaXN0cyBoaWdoZXN0IHZhbHVlcw0KIyBzZWNvbmQgZGF0YWZyYW1lIGxpc3RzIGxvd2VzdCB2YWx1ZXMNCiMgdGhpcmQgZGF0YWZyYW1lIGxpc3RzIGVuZGluZyB2YWx1ZXMNCg0KcmVzdWx0cy5nMSA8LSBkYXRhLmZyYW1lKA0KICBTLmggPSBjKG1heChjb3ZpZC5vdXQuZzFbICwyXSksIG1heChjb3ZpZC5vdXQuZzJbICwyXSksIG1heChjb3ZpZC5vdXQuZzNbICwyXSksIG1heChjb3ZpZC5vdXQuZzRbICwyXSksIG1heChjb3ZpZC5vdXQuZzVbICwyXSksIG1heChjb3ZpZC5vdXQuZzZbICwyXSkpLA0KICBFLmggPSBjKG1heChjb3ZpZC5vdXQuZzFbICwzXSksIG1heChjb3ZpZC5vdXQuZzJbICwzXSksIG1heChjb3ZpZC5vdXQuZzNbICwzXSksIG1heChjb3ZpZC5vdXQuZzRbICwzXSksIG1heChjb3ZpZC5vdXQuZzVbICwzXSksIG1heChjb3ZpZC5vdXQuZzZbICwzXSkpLA0KICBJLmggPSBjKG1heChjb3ZpZC5vdXQuZzFbICw0XSksIG1heChjb3ZpZC5vdXQuZzJbICw0XSksIG1heChjb3ZpZC5vdXQuZzNbICw0XSksIG1heChjb3ZpZC5vdXQuZzRbICw0XSksIG1heChjb3ZpZC5vdXQuZzVbICw0XSksIG1heChjb3ZpZC5vdXQuZzZbICw0XSkpLA0KICBTLmwgPSBjKG1heChjb3ZpZC5vdXQuZzFbICw1XSksIG1heChjb3ZpZC5vdXQuZzJbICw1XSksIG1heChjb3ZpZC5vdXQuZzNbICw1XSksIG1heChjb3ZpZC5vdXQuZzRbICw1XSksIG1heChjb3ZpZC5vdXQuZzVbICw1XSksIG1heChjb3ZpZC5vdXQuZzZbICw1XSkpLA0KICBFLmwgPSBjKG1heChjb3ZpZC5vdXQuZzFbICw2XSksIG1heChjb3ZpZC5vdXQuZzJbICw2XSksIG1heChjb3ZpZC5vdXQuZzNbICw2XSksIG1heChjb3ZpZC5vdXQuZzRbICw2XSksIG1heChjb3ZpZC5vdXQuZzVbICw2XSksIG1heChjb3ZpZC5vdXQuZzZbICw2XSkpLA0KICBJLmwgPSBjKG1heChjb3ZpZC5vdXQuZzFbICw3XSksIG1heChjb3ZpZC5vdXQuZzJbICw3XSksIG1heChjb3ZpZC5vdXQuZzNbICw3XSksIG1heChjb3ZpZC5vdXQuZzRbICw3XSksIG1heChjb3ZpZC5vdXQuZzVbICw3XSksIG1heChjb3ZpZC5vdXQuZzZbICw3XSkpLA0KICBRID0gYyhtYXgoY292aWQub3V0LmcxWyAsOF0pLCBtYXgoY292aWQub3V0LmcyWyAsOF0pLCBtYXgoY292aWQub3V0LmczWyAsOF0pLCBtYXgoY292aWQub3V0Lmc0WyAsOF0pLCBtYXgoY292aWQub3V0Lmc1WyAsOF0pLCBtYXgoY292aWQub3V0Lmc2WyAsOF0pKSwNCiAgUiA9IGMobWF4KGNvdmlkLm91dC5nMVsgLDldKSwgbWF4KGNvdmlkLm91dC5nMlsgLDldKSwgbWF4KGNvdmlkLm91dC5nM1sgLDldKSwgbWF4KGNvdmlkLm91dC5nNFsgLDldKSwgbWF4KGNvdmlkLm91dC5nNVsgLDldKSwgbWF4KGNvdmlkLm91dC5nNlsgLDldKSksDQogIFYgPSBjKG1heChjb3ZpZC5vdXQuZzFbICwxMF0pLCBtYXgoY292aWQub3V0LmcyWyAsMTBdKSwgbWF4KGNvdmlkLm91dC5nM1sgLDEwXSksIG1heChjb3ZpZC5vdXQuZzRbICwxMF0pLCBtYXgoY292aWQub3V0Lmc1WyAsMTBdKSwgbWF4KGNvdmlkLm91dC5nNlsgLDEwXSkpDQopDQpyZXN1bHRzLmcyIDwtIGRhdGEuZnJhbWUoDQogIFMuaCA9IGMobWluKGNvdmlkLm91dC5nMVsgLDJdKSwgbWluKGNvdmlkLm91dC5nMlsgLDJdKSwgbWluKGNvdmlkLm91dC5nM1sgLDJdKSwgbWluKGNvdmlkLm91dC5nNFsgLDJdKSwgbWluKGNvdmlkLm91dC5nNVsgLDJdKSwgbWluKGNvdmlkLm91dC5nNlsgLDJdKSksDQogIEUuaCA9IGMobWluKGNvdmlkLm91dC5nMVsgLDNdKSwgbWluKGNvdmlkLm91dC5nMlsgLDNdKSwgbWluKGNvdmlkLm91dC5nM1sgLDNdKSwgbWluKGNvdmlkLm91dC5nNFsgLDNdKSwgbWluKGNvdmlkLm91dC5nNVsgLDNdKSwgbWluKGNvdmlkLm91dC5nNlsgLDNdKSksDQogIEkuaCA9IGMobWluKGNvdmlkLm91dC5nMVsgLDRdKSwgbWluKGNvdmlkLm91dC5nMlsgLDRdKSwgbWluKGNvdmlkLm91dC5nM1sgLDRdKSwgbWluKGNvdmlkLm91dC5nNFsgLDRdKSwgbWluKGNvdmlkLm91dC5nNVsgLDRdKSwgbWluKGNvdmlkLm91dC5nNlsgLDRdKSksDQogIFMubCA9IGMobWluKGNvdmlkLm91dC5nMVsgLDVdKSwgbWluKGNvdmlkLm91dC5nMlsgLDVdKSwgbWluKGNvdmlkLm91dC5nM1sgLDVdKSwgbWluKGNvdmlkLm91dC5nNFsgLDVdKSwgbWluKGNvdmlkLm91dC5nNVsgLDVdKSwgbWluKGNvdmlkLm91dC5nNlsgLDVdKSksDQogIEUubCA9IGMobWluKGNvdmlkLm91dC5nMVsgLDZdKSwgbWluKGNvdmlkLm91dC5nMlsgLDZdKSwgbWluKGNvdmlkLm91dC5nM1sgLDZdKSwgbWluKGNvdmlkLm91dC5nNFsgLDZdKSwgbWluKGNvdmlkLm91dC5nNVsgLDZdKSwgbWluKGNvdmlkLm91dC5nNlsgLDZdKSksDQogIEkubCA9IGMobWluKGNvdmlkLm91dC5nMVsgLDddKSwgbWluKGNvdmlkLm91dC5nMlsgLDddKSwgbWluKGNvdmlkLm91dC5nM1sgLDddKSwgbWluKGNvdmlkLm91dC5nNFsgLDddKSwgbWluKGNvdmlkLm91dC5nNVsgLDddKSwgbWluKGNvdmlkLm91dC5nNlsgLDddKSksDQogIFEgPSBjKG1pbihjb3ZpZC5vdXQuZzFbICw4XSksIG1pbihjb3ZpZC5vdXQuZzJbICw4XSksIG1pbihjb3ZpZC5vdXQuZzNbICw4XSksIG1pbihjb3ZpZC5vdXQuZzRbICw4XSksIG1pbihjb3ZpZC5vdXQuZzVbICw4XSksIG1pbihjb3ZpZC5vdXQuZzZbICw4XSkpLA0KICBSID0gYyhtaW4oY292aWQub3V0LmcxWyAsOV0pLCBtaW4oY292aWQub3V0LmcyWyAsOV0pLCBtaW4oY292aWQub3V0LmczWyAsOV0pLCBtaW4oY292aWQub3V0Lmc0WyAsOV0pLCBtaW4oY292aWQub3V0Lmc1WyAsOV0pLCBtaW4oY292aWQub3V0Lmc2WyAsOV0pKSwNCiAgViA9IGMobWluKGNvdmlkLm91dC5nMVsgLDEwXSksIG1pbihjb3ZpZC5vdXQuZzJbICwxMF0pLCBtaW4oY292aWQub3V0LmczWyAsMTBdKSwgbWluKGNvdmlkLm91dC5nNFsgLDEwXSksIG1pbihjb3ZpZC5vdXQuZzVbICwxMF0pLCBtaW4oY292aWQub3V0Lmc2WyAsMTBdKSkNCikNCg0KcmVzdWx0cy5nMyA8LSBkYXRhLmZyYW1lKCAjIGVuZGluZyB2YWx1ZXMNCiAgUy5oID0gYyh0YWlsKGNvdmlkLm91dC5nMVsgLDJdLG49MSksIHRhaWwoY292aWQub3V0LmcyWyAsMl0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuZzNbICwyXSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nNFsgLDJdLG49MSksIHRhaWwoY292aWQub3V0Lmc1WyAsMl0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuZzZbICwyXSxuPTEpKSwgDQogIEUuaCA9IGModGFpbChjb3ZpZC5vdXQuZzFbICwzXSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nMlsgLDNdLG49MSksIHRhaWwoY292aWQub3V0LmczWyAsM10sbj0xKSwgdGFpbChjb3ZpZC5vdXQuZzRbICwzXSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nNVsgLDNdLG49MSksIHRhaWwoY292aWQub3V0Lmc2WyAsM10sbj0xKSksDQogIEkuaCA9IGModGFpbChjb3ZpZC5vdXQuZzFbICw0XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nMlsgLDRdLG49MSksIHRhaWwoY292aWQub3V0LmczWyAsNF0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuZzRbICw0XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nNVsgLDRdLG49MSksIHRhaWwoY292aWQub3V0Lmc2WyAsNF0sbj0xKSksDQogIFMubCA9IGModGFpbChjb3ZpZC5vdXQuZzFbICw1XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nMlsgLDVdLG49MSksIHRhaWwoY292aWQub3V0LmczWyAsNV0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuZzRbICw1XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nNVsgLDVdLG49MSksIHRhaWwoY292aWQub3V0Lmc2WyAsNV0sbj0xKSksDQogIEUubCA9IGModGFpbChjb3ZpZC5vdXQuZzFbICw2XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nMlsgLDZdLG49MSksIHRhaWwoY292aWQub3V0LmczWyAsNl0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuZzRbICw2XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nNVsgLDZdLG49MSksIHRhaWwoY292aWQub3V0Lmc2WyAsNl0sbj0xKSksIA0KICBJLmwgPSBjKHRhaWwoY292aWQub3V0LmcxWyAsN10sbj0xKSwgdGFpbChjb3ZpZC5vdXQuZzJbICw3XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nM1sgLDddLG49MSksIHRhaWwoY292aWQub3V0Lmc0WyAsN10sbj0xKSwgdGFpbChjb3ZpZC5vdXQuZzVbICw3XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nNlsgLDddLG49MSkpLA0KICBRID0gYyh0YWlsKGNvdmlkLm91dC5nMVsgLDhdLG49MSksIHRhaWwoY292aWQub3V0LmcyWyAsOF0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuZzNbICw4XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nNFsgLDhdLG49MSksIHRhaWwoY292aWQub3V0Lmc1WyAsOF0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuZzZbICw4XSxuPTEpKSwNCiAgUiA9IGModGFpbChjb3ZpZC5vdXQuZzFbICw5XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nMlsgLDldLG49MSksIHRhaWwoY292aWQub3V0LmczWyAsOV0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuZzRbICw5XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5nNVsgLDldLG49MSksIHRhaWwoY292aWQub3V0Lmc2WyAsOV0sbj0xKSksDQogIFYgPSBjKHRhaWwoY292aWQub3V0LmcxWyAsMTBdLG49MSksIHRhaWwoY292aWQub3V0LmcyWyAsMTBdLG49MSksIHRhaWwoY292aWQub3V0LmczWyAsMTBdLG49MSksIHRhaWwoY292aWQub3V0Lmc0WyAsMTBdLG49MSksIHRhaWwoY292aWQub3V0Lmc1WyAsMTBdLG49MSksIHRhaWwoY292aWQub3V0Lmc2WyAsMTBdLG49MSkpDQopDQoNCmAucm93TmFtZXNERjwtYChyZXN1bHRzLmcxLG1ha2UubmFtZXM9RkFMU0UsYygnZyA9IDAnLCdnID0gMC4yJywnZyA9IDAuNCcsJ2cgPSAwLjYnLCdnID0gMC44JywnZyA9IDEnKSkNCmAucm93TmFtZXNERjwtYChyZXN1bHRzLmcyLG1ha2UubmFtZXM9RkFMU0UsYygnZyA9IDAnLCdnID0gMC4yJywnZyA9IDAuNCcsJ2cgPSAwLjYnLCdnID0gMC44JywnZyA9IDEnKSkNCmAucm93TmFtZXNERjwtYChyZXN1bHRzLmczLG1ha2UubmFtZXM9RkFMU0UsYygnZyA9IDAnLCdnID0gMC4yJywnZyA9IDAuNCcsJ2cgPSAwLjYnLCdnID0gMC44JywnZyA9IDEnKSkNCmBgYA0KDQpQbG90dGluZyBoaWdoZXN0LCBsb3dlc3QsIGFuZCBlbmRpbmcgdmFsdWVzIG9mIGNsYXNzZXMNCmBgYHtyfQ0KIyMgSElHSEVTVCAjIw0Kb3A3IDwtIHBhcihtYXI9Yyg2LDYsMiwyKSkNCnBsb3QocmVzdWx0cy5nMSRTLmgsdHlwZT0iYiIsIGNvbD0iYmx1ZSIsIHhsYWI9InEgdmFsdWVzIiwgeWxhYiA9ICJJbmRpdmlkdWFscyIsIG1haW49IkhpZ2hlc3QiLCB5bGltPWMoMCw4MDAwMCkpDQpsaW5lcyhyZXN1bHRzLmcxJEUuaCwgdHlwZSA9ICJiIiwgY29sPSJyZWQiKQ0KbGluZXMocmVzdWx0cy5nMSRJLmgsIHR5cGUgPSAiYiIsIGNvbD0iZ3JlZW4iKQ0KbGluZXMocmVzdWx0cy5nMSRTLmwsIHR5cGUgPSAiYiIsIGNvbD0icHVycGxlIikNCmxpbmVzKHJlc3VsdHMuZzEkRS5sLCB0eXBlID0gImIiLCBjb2w9Im9yYW5nZSIpDQpsaW5lcyhyZXN1bHRzLmcxJEkubCwgdHlwZSA9ICJiIiwgY29sPSJmb3Jlc3RncmVlbiIpDQpsaW5lcyhyZXN1bHRzLmcxJFEsIHR5cGUgPSAiYiIsIGNvbD0iZGFya3R1cnF1b2lzZSIpDQpsaW5lcyhyZXN1bHRzLmcxJFIsIHR5cGUgPSAiYiIsIGNvbD0icGluazIiKQ0KbGluZXMocmVzdWx0cy5nMSRWLCB0eXBlID0gImIiLCBjb2w9InllbGxvdyIpDQoNCmxlZ2VuZCgzLCA3MDAwMCxsZWdlbmQgPSBjKCJTdXNjZXB0aWJsZXMgKEhpZ2gpIiwiRXhwb3NlZCAoSGlnaCkiLCJJbmZlY3RlZCAoSGlnaCkiLCJTdXNjZXB0aWJsZXMgKExvdykiLCJFeHBvc2VkIChMb3cpIiwiSW5mZWN0ZWQgKExvdykiLCAiU2VsZi1Jc29sYXRpbmciLCJSZWNvdmVyZWQiLCJWaXJ1cyIpLCBjb2wgPSBjKCJibHVlIiwgInJlZCIsICJncmVlbiIsInB1cnBsZSIsIm9yYW5nZSIsImZvcmVzdGdyZWVuIiwiZGFya3R1cnF1b2lzZSIsInBpbmsyIiwieWVsbG93IiksIGx0eT0xLCBjZXg9MC42KQ0KDQpwYXIob3A3KQ0KDQojIyBMT1dFU1QNCm9wOCA8LSBwYXIobWFyPWMoNiw2LDIsMikpDQpwbG90KHJlc3VsdHMuZzIkUy5oLHR5cGU9ImIiLCBjb2w9ImJsdWUiLCBtYWluPSJMb3dlc3QiLCB4bGFiPSJxIHZhbHVlcyIsIHlsYWIgPSAiSW5kaXZpZHVhbHMiLCB5bGltPWMoMCw4MDAwMCkpDQpsaW5lcyhyZXN1bHRzLmcyJEUuaCwgdHlwZSA9ICJiIiwgY29sPSJyZWQiKQ0KbGluZXMocmVzdWx0cy5nMiRJLmgsIHR5cGUgPSAiYiIsIGNvbD0iZ3JlZW4iKQ0KbGluZXMocmVzdWx0cy5nMiRTLmwsIHR5cGUgPSAiYiIsIGNvbD0icHVycGxlIikNCmxpbmVzKHJlc3VsdHMuZzIkRS5sLCB0eXBlID0gImIiLCBjb2w9Im9yYW5nZSIpDQpsaW5lcyhyZXN1bHRzLmcyJEkubCwgdHlwZSA9ICJiIiwgY29sPSJmb3Jlc3RncmVlbiIpDQpsaW5lcyhyZXN1bHRzLmcyJFEsIHR5cGUgPSAiYiIsIGNvbD0iZGFya3R1cnF1b2lzZSIpDQpsaW5lcyhyZXN1bHRzLmcyJFIsIHR5cGUgPSAiYiIsIGNvbD0icGluazIiKQ0KbGluZXMocmVzdWx0cy5nMiRWLCB0eXBlID0gImIiLCBjb2w9InllbGxvdyIpDQoNCmxlZ2VuZCgzLCA3MDAwMCxsZWdlbmQgPSBjKCJTdXNjZXB0aWJsZXMgKEhpZ2gpIiwiRXhwb3NlZCAoSGlnaCkiLCJJbmZlY3RlZCAoSGlnaCkiLCJTdXNjZXB0aWJsZXMgKExvdykiLCJFeHBvc2VkIChMb3cpIiwiSW5mZWN0ZWQgKExvdykiLCAiU2VsZi1Jc29sYXRpbmciLCJSZWNvdmVyZWQiLCJWaXJ1cyIpLCBjb2wgPSBjKCJibHVlIiwgInJlZCIsICJncmVlbiIsInB1cnBsZSIsIm9yYW5nZSIsImZvcmVzdGdyZWVuIiwiZGFya3R1cnF1b2lzZSIsInBpbmsyIiwieWVsbG93IiksIGx0eT0xLCBjZXg9MC42KQ0KDQpwYXIob3A4KQ0KDQojIyBFTkRJTkcgIyMNCm9wOSA8LSBwYXIobWFyPWMoNiw2LDIsMikpDQpwbG90KHJlc3VsdHMuZzMkUy5oLCB0eXBlPSJiIiwgY29sPSJibHVlIiwgbWFpbj0iRW5kaW5nIiwgeGxhYj0icSB2YWx1ZXMiLCB5bGFiID0gIkluZGl2aWR1YWxzIiwgeWxpbT1jKDAsODAwMDApKQ0KbGluZXMocmVzdWx0cy5nMyRFLmgsIHR5cGUgPSAiYiIsIGNvbD0icmVkIikNCmxpbmVzKHJlc3VsdHMuZzMkSS5oLCB0eXBlID0gImIiLCBjb2w9ImdyZWVuIikNCmxpbmVzKHJlc3VsdHMuZzMkUy5sLCB0eXBlID0gImIiLCBjb2w9InB1cnBsZSIpDQpsaW5lcyhyZXN1bHRzLmczJEUubCwgdHlwZSA9ICJiIiwgY29sPSJvcmFuZ2UiKQ0KbGluZXMocmVzdWx0cy5nMyRJLmwsIHR5cGUgPSAiYiIsIGNvbD0iZm9yZXN0Z3JlZW4iKQ0KbGluZXMocmVzdWx0cy5nMyRRLCB0eXBlID0gImIiLCBjb2w9ImRhcmt0dXJxdW9pc2UiKQ0KbGluZXMocmVzdWx0cy5nMyRSLCB0eXBlID0gImIiLCBjb2w9InBpbmsyIikNCmxpbmVzKHJlc3VsdHMuZzMkViwgdHlwZSA9ICJiIiwgY29sPSJ5ZWxsb3ciKQ0KDQpsZWdlbmQoMywgNzAwMDAsbGVnZW5kID0gYygiU3VzY2VwdGlibGVzIChIaWdoKSIsIkV4cG9zZWQgKEhpZ2gpIiwiSW5mZWN0ZWQgKEhpZ2gpIiwiU3VzY2VwdGlibGVzIChMb3cpIiwiRXhwb3NlZCAoTG93KSIsIkluZmVjdGVkIChMb3cpIiwgIlNlbGYtSXNvbGF0aW5nIiwiUmVjb3ZlcmVkIiwiVmlydXMiKSwgY29sID0gYygiYmx1ZSIsICJyZWQiLCAiZ3JlZW4iLCJwdXJwbGUiLCJvcmFuZ2UiLCJmb3Jlc3RncmVlbiIsImRhcmt0dXJxdW9pc2UiLCJwaW5rMiIsInllbGxvdyIpLCBsdHk9MSwgY2V4PTAuNikNCg0KcGFyKG9wOSkNCmBgYA==