Gráfico para escala likert

Dissertação do Vitor do HVet - AMAN

# É necessário instalar os pacotes a seguir. 
# install.packages("devtools")
# install.packages("plyer")
# library (devtools)
# install_github('likert', 'jbryer')
library(likert)
library(readxl)
library(plyr)
dados <- read_excel("manipuladores.xlsx")
dados <- as.data.frame(dados)
title_q1 <- "Capacitação Profissional"
title_q2 <- "Conhecimentos Gerais"
title_q3 <- "Preparo dos Alimentos"
title_q4 <- "Práticas de Higiene Pessoais"
title_q5 <- "Avaliação de Riscos"
title_q6 <- "Instalações e Equipamentos"
title_q7 <- "Defesa dos Alimentos"
title_q8 <- "Armazenamento e conservação de alimentos"
# Q1 Capacitação Profissional 
dados$Q1_1<-factor(dados$Q1_1, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q1_2<-factor(dados$Q1_2, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q1_3<-factor(dados$Q1_3, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q1_4<-factor(dados$Q1_4, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q1_5<-factor(dados$Q1_5, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q1_6<-factor(dados$Q1_6, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q1_7<-factor(dados$Q1_7, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q1_8<-factor(dados$Q1_8, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
# Q2 - Conhecimentos Gerais
dados$Q2_1<-factor(dados$Q2_1, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q2_2<-factor(dados$Q2_2, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q2_3<-factor(dados$Q2_3, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q2_4<-factor(dados$Q2_4, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q2_5<-factor(dados$Q2_5, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q2_6<-factor(dados$Q2_6, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q2_7<-factor(dados$Q2_7, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q2_8<-factor(dados$Q2_8, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q2_9<-factor(dados$Q2_9, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q2_10<-factor(dados$Q2_10, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q2_11<-factor(dados$Q2_11, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q2_12<-factor(dados$Q2_12, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
# Q3 - Preparo dos Alimentos
dados$Q3_1<-factor(dados$Q3_1, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q3_2<-factor(dados$Q3_2, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q3_3<-factor(dados$Q3_3, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q3_4<-factor(dados$Q3_4, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q3_5<-factor(dados$Q3_5, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q3_6<-factor(dados$Q3_6, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q3_7<-factor(dados$Q3_7, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q3_8<-factor(dados$Q3_8, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q3_9<-factor(dados$Q3_9, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q3_10<-factor(dados$Q3_10, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
# para o Q4 - Práticas de Higiene Pessoais
dados$Q4_1<-factor(dados$Q4_1, levels = c("1","2","3","4","5"), labels =c("Nunca","Raramente","Às vezes","Frequentemente","Sempre"))
dados$Q4_2<-factor(dados$Q4_2, levels = c("1","2","3","4","5"), labels =c("Nunca","Raramente","Às vezes","Frequentemente","Sempre"))
dados$Q4_3<-factor(dados$Q4_3, levels = c("1","2","3","4","5"), labels =c("Nunca","Raramente","Às vezes","Frequentemente","Sempre"))
dados$Q4_4<-factor(dados$Q4_4, levels = c("1","2","3","4","5"), labels =c("Nunca","Raramente","Às vezes","Frequentemente","Sempre"))
dados$Q4_5<-factor(dados$Q4_5, levels = c("1","2","3","4","5"), labels =c("Nunca","Raramente","Às vezes","Frequentemente","Sempre"))
dados$Q4_6<-factor(dados$Q4_6, levels = c("1","2","3","4","5"), labels =c("Nunca","Raramente","Às vezes","Frequentemente","Sempre"))
dados$Q4_7<-factor(dados$Q4_7, levels = c("1","2","3","4","5"), labels =c("Nunca","Raramente","Às vezes","Frequentemente","Sempre"))
dados$Q4_8<-factor(dados$Q4_8, levels = c("1","2","3","4","5"), labels =c("Nunca","Raramente","Às vezes","Frequentemente","Sempre"))
dados$Q4_9<-factor(dados$Q4_9, levels = c("1","2","3","4","5"), labels =c("Nunca","Raramente","Às vezes","Frequentemente","Sempre"))
dados$Q4_10<-factor(dados$Q4_10, levels = c("1","2","3","4","5"), labels =c("Nunca","Raramente","Às vezes","Frequentemente","Sempre"))
dados$Q4_11<-factor(dados$Q4_11, levels = c("1","2","3","4","5"), labels =c("Nunca","Raramente","Às vezes","Frequentemente","Sempre"))
# q5 - Avaliação de Riscos
dados$Q5_1<-factor(dados$Q5_1, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q5_2<-factor(dados$Q5_2, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q5_3<-factor(dados$Q5_3, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q5_4<-factor(dados$Q5_4, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q5_5<-factor(dados$Q5_5, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q5_6<-factor(dados$Q5_6, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q5_7<-factor(dados$Q5_7, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q5_8<-factor(dados$Q5_8, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q5_9<-factor(dados$Q5_9, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
# q6 - "Instalações e Equipamentos"
dados$Q6_1<-factor(dados$Q6_1, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q6_2<-factor(dados$Q6_2, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q6_3<-factor(dados$Q6_3, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q6_4<-factor(dados$Q6_4, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q6_5<-factor(dados$Q6_5, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q6_6<-factor(dados$Q6_6, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q6_7<-factor(dados$Q6_7, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
# q7 - "Defesa dos Alimentos"
dados$Q7_1<-factor(dados$Q7_1, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q7_2<-factor(dados$Q7_2, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q7_3<-factor(dados$Q7_3, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q7_4<-factor(dados$Q7_4, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q7_5<-factor(dados$Q7_5, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q7_6<-factor(dados$Q7_6, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q7_7<-factor(dados$Q7_7, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q7_8<-factor(dados$Q7_8, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
# q8 - "Armazenamento e conservação de alimentos"
dados$Q8_1<-factor(dados$Q8_1, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q8_2<-factor(dados$Q8_2, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q8_3<-factor(dados$Q8_3, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q8_4<-factor(dados$Q8_4, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q8_5<-factor(dados$Q8_5, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q8_6<-factor(dados$Q8_6, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q8_7<-factor(dados$Q8_7, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q8_8<-factor(dados$Q8_8, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados$Q8_9<-factor(dados$Q8_9, levels = c("1","2","3","4","5"), labels =c("Discordo extremamente","Discordo ligeiramente","Não concordo nem discordo","Concordo ligeiramente", "Concordo extremamente"))
dados_q1 <- dados[,1:8]
dados_q2 <- dados[,9:20]
dados_q3 <- dados[,21:30]
dados_q4 <- dados[,31:41]
dados_q5 <- dados[,42:50]
dados_q6 <- dados[,51:57]
dados_q7 <- dados[,58:65]
dados_q8 <- dados[,66:74]

q1 <- “Capacitação Profissional”

names(dados_q1) <- c("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8")
likert_q1 <- likert(dados_q1, nlevels = 5)
likert.bar.plot(likert_q1,plot.percents=TRUE,legend = "Respostas", low.color = "red", text.size=2.5) + ggtitle(title_q1) + labs( x = "Itens", y = "Porcentagem") + theme_minimal()

likert.heat.plot(likert_q1)

q2 <- “Conhecimentos Gerais”

names(dados_q2) <- c("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8","Q9", "Q10", "Q11", "Q12")
likert_q2 <- likert(dados_q2, nlevels = 5)
likert.bar.plot(likert_q2,plot.percents=TRUE,legend = "Respostas", low.color = "red", text.size=2.5) + ggtitle(title_q2) +
  labs( x = "Itens", y = "Porcentagem")+ theme_minimal()

likert.heat.plot(likert_q2)

q3 <- “Preparo dos Alimentos”

names(dados_q3) <- c("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8","Q9", "Q10")
likert_q3 <- likert(dados_q3, nlevels = 5)
likert.bar.plot(likert_q3,plot.percents=TRUE,legend = "Respostas", low.color = "red", text.size=2.5) + ggtitle(title_q3) +
  labs( x = "Itens", y = "Porcentagem")+ theme_minimal()

likert.heat.plot(likert_q3)

q4 <- “Práticas de Higiene Pessoais”

names(dados_q4) <- c("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8","Q9", "Q10", "Q11")
likert_q4 <- likert(dados_q4, nlevels = 5)
likert.bar.plot(likert_q4,plot.percents=TRUE,legend = "Respostas", low.color = "red", text.size=2.5) + ggtitle(title_q4) +
  labs( x = "Itens", y = "Porcentagem")+ theme_minimal()

likert.heat.plot(likert_q4)

q5 <- “Avaliação de Riscos”

names(dados_q5) <- c("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8","Q9")
likert_q5 <- likert(dados_q5, nlevels = 5)
likert.bar.plot(likert_q5,plot.percents=TRUE,legend = "Respostas", low.color = "red", text.size=2.5) + ggtitle(title_q5) +
  labs( x = "Itens", y = "Porcentagem")+ theme_minimal()

likert.heat.plot(likert_q5)

q6 <- “Instalações e Equipamentos”

names(dados_q6) <- c("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7")
likert_q6 <- likert(dados_q6, nlevels = 5)
likert.bar.plot(likert_q6,plot.percents=TRUE,legend = "Respostas", low.color = "red", text.size=2.5) + ggtitle(title_q6) +
  labs( x = "Itens", y = "Porcentagem")+ theme_minimal()

likert.heat.plot(likert_q6)

q7 <- “Defesa dos Alimentos”

names(dados_q7) <- c("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8")
likert_q7 <- likert(dados_q7, nlevels = 5)
likert.bar.plot(likert_q7,plot.percents=TRUE,legend = "Respostas", low.color = "red", text.size=2.5) + ggtitle(title_q7) +
  labs( x = "Itens", y = "Porcentagem")+ theme_minimal()

likert.heat.plot(likert_q7)

q8 <- “Armazenamento e conservação de alimentos”

names(dados_q2) <- c("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8","Q9")
likert_q8 <- likert(dados_q8, nlevels = 5)
likert.bar.plot(likert_q8,plot.percents=TRUE,legend = "Respostas", low.color = "red", text.size=2.5) + ggtitle(title_q8) +
  labs( x = "Itens", y = "Porcentagem")+ theme_minimal()

likert.heat.plot(likert_q8)

LS0tDQp0aXRsZTogIkdyw6FmaWNvcyBwYXJhIGRhZG9zIHRpcG8gTElLRVJUICINCmF1dGhvcjogIkxlb25pLCBSLiBDLiBQcm9mZXNzb3IgRHIuIg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazogDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgdGhlbWU6IGpvdXJuYWwNCiAgICB0b2M6IHllcw0KLS0tDQoNCioqKg0KDQojIEdyw6FmaWNvIHBhcmEgZXNjYWxhIGxpa2VydA0KDQojIyAgRGlzc2VydGHDp8OjbyBkbyBWaXRvciBkbyBIVmV0IC0gQU1BTg0KDQoNCmBgYHtyfQ0KIyDDiSBuZWNlc3PDoXJpbyBpbnN0YWxhciBvcyBwYWNvdGVzIGEgc2VndWlyLiANCiMgaW5zdGFsbC5wYWNrYWdlcygiZGV2dG9vbHMiKQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJwbHllciIpDQojIGxpYnJhcnkgKGRldnRvb2xzKQ0KIyBpbnN0YWxsX2dpdGh1YignbGlrZXJ0JywgJ2picnllcicpDQpsaWJyYXJ5KGxpa2VydCkNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShwbHlyKQ0KYGBgDQoNCg0KYGBge3J9DQoNCmRhZG9zIDwtIHJlYWRfZXhjZWwoIm1hbmlwdWxhZG9yZXMueGxzeCIpDQpkYWRvcyA8LSBhcy5kYXRhLmZyYW1lKGRhZG9zKQ0KDQp0aXRsZV9xMSA8LSAiQ2FwYWNpdGHDp8OjbyBQcm9maXNzaW9uYWwiDQp0aXRsZV9xMiA8LSAiQ29uaGVjaW1lbnRvcyBHZXJhaXMiDQp0aXRsZV9xMyA8LSAiUHJlcGFybyBkb3MgQWxpbWVudG9zIg0KdGl0bGVfcTQgPC0gIlByw6F0aWNhcyBkZSBIaWdpZW5lIFBlc3NvYWlzIg0KdGl0bGVfcTUgPC0gIkF2YWxpYcOnw6NvIGRlIFJpc2NvcyINCnRpdGxlX3E2IDwtICJJbnN0YWxhw6fDtWVzIGUgRXF1aXBhbWVudG9zIg0KdGl0bGVfcTcgPC0gIkRlZmVzYSBkb3MgQWxpbWVudG9zIg0KdGl0bGVfcTggPC0gIkFybWF6ZW5hbWVudG8gZSBjb25zZXJ2YcOnw6NvIGRlIGFsaW1lbnRvcyINCg0KDQoNCg0KIyBRMSBDYXBhY2l0YcOnw6NvIFByb2Zpc3Npb25hbCANCmRhZG9zJFExXzE8LWZhY3RvcihkYWRvcyRRMV8xLCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTFfMjwtZmFjdG9yKGRhZG9zJFExXzIsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRMV8zPC1mYWN0b3IoZGFkb3MkUTFfMywgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFExXzQ8LWZhY3RvcihkYWRvcyRRMV80LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTFfNTwtZmFjdG9yKGRhZG9zJFExXzUsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRMV82PC1mYWN0b3IoZGFkb3MkUTFfNiwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFExXzc8LWZhY3RvcihkYWRvcyRRMV83LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTFfODwtZmFjdG9yKGRhZG9zJFExXzgsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQoNCiMgUTIgLSBDb25oZWNpbWVudG9zIEdlcmFpcw0KZGFkb3MkUTJfMTwtZmFjdG9yKGRhZG9zJFEyXzEsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRMl8yPC1mYWN0b3IoZGFkb3MkUTJfMiwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFEyXzM8LWZhY3RvcihkYWRvcyRRMl8zLCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTJfNDwtZmFjdG9yKGRhZG9zJFEyXzQsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRMl81PC1mYWN0b3IoZGFkb3MkUTJfNSwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFEyXzY8LWZhY3RvcihkYWRvcyRRMl82LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTJfNzwtZmFjdG9yKGRhZG9zJFEyXzcsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRMl84PC1mYWN0b3IoZGFkb3MkUTJfOCwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFEyXzk8LWZhY3RvcihkYWRvcyRRMl85LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTJfMTA8LWZhY3RvcihkYWRvcyRRMl8xMCwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFEyXzExPC1mYWN0b3IoZGFkb3MkUTJfMTEsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRMl8xMjwtZmFjdG9yKGRhZG9zJFEyXzEyLCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KDQojIFEzIC0gUHJlcGFybyBkb3MgQWxpbWVudG9zDQpkYWRvcyRRM18xPC1mYWN0b3IoZGFkb3MkUTNfMSwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFEzXzI8LWZhY3RvcihkYWRvcyRRM18yLCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTNfMzwtZmFjdG9yKGRhZG9zJFEzXzMsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRM180PC1mYWN0b3IoZGFkb3MkUTNfNCwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFEzXzU8LWZhY3RvcihkYWRvcyRRM181LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTNfNjwtZmFjdG9yKGRhZG9zJFEzXzYsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRM183PC1mYWN0b3IoZGFkb3MkUTNfNywgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFEzXzg8LWZhY3RvcihkYWRvcyRRM184LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTNfOTwtZmFjdG9yKGRhZG9zJFEzXzksIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRM18xMDwtZmFjdG9yKGRhZG9zJFEzXzEwLCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KDQoNCiMgcGFyYSBvIFE0IC0gUHLDoXRpY2FzIGRlIEhpZ2llbmUgUGVzc29haXMNCg0KZGFkb3MkUTRfMTwtZmFjdG9yKGRhZG9zJFE0XzEsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiTnVuY2EiLCJSYXJhbWVudGUiLCLDgHMgdmV6ZXMiLCJGcmVxdWVudGVtZW50ZSIsIlNlbXByZSIpKQ0KZGFkb3MkUTRfMjwtZmFjdG9yKGRhZG9zJFE0XzIsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiTnVuY2EiLCJSYXJhbWVudGUiLCLDgHMgdmV6ZXMiLCJGcmVxdWVudGVtZW50ZSIsIlNlbXByZSIpKQ0KZGFkb3MkUTRfMzwtZmFjdG9yKGRhZG9zJFE0XzMsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiTnVuY2EiLCJSYXJhbWVudGUiLCLDgHMgdmV6ZXMiLCJGcmVxdWVudGVtZW50ZSIsIlNlbXByZSIpKQ0KZGFkb3MkUTRfNDwtZmFjdG9yKGRhZG9zJFE0XzQsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiTnVuY2EiLCJSYXJhbWVudGUiLCLDgHMgdmV6ZXMiLCJGcmVxdWVudGVtZW50ZSIsIlNlbXByZSIpKQ0KZGFkb3MkUTRfNTwtZmFjdG9yKGRhZG9zJFE0XzUsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiTnVuY2EiLCJSYXJhbWVudGUiLCLDgHMgdmV6ZXMiLCJGcmVxdWVudGVtZW50ZSIsIlNlbXByZSIpKQ0KZGFkb3MkUTRfNjwtZmFjdG9yKGRhZG9zJFE0XzYsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiTnVuY2EiLCJSYXJhbWVudGUiLCLDgHMgdmV6ZXMiLCJGcmVxdWVudGVtZW50ZSIsIlNlbXByZSIpKQ0KZGFkb3MkUTRfNzwtZmFjdG9yKGRhZG9zJFE0XzcsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiTnVuY2EiLCJSYXJhbWVudGUiLCLDgHMgdmV6ZXMiLCJGcmVxdWVudGVtZW50ZSIsIlNlbXByZSIpKQ0KZGFkb3MkUTRfODwtZmFjdG9yKGRhZG9zJFE0XzgsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiTnVuY2EiLCJSYXJhbWVudGUiLCLDgHMgdmV6ZXMiLCJGcmVxdWVudGVtZW50ZSIsIlNlbXByZSIpKQ0KZGFkb3MkUTRfOTwtZmFjdG9yKGRhZG9zJFE0XzksIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiTnVuY2EiLCJSYXJhbWVudGUiLCLDgHMgdmV6ZXMiLCJGcmVxdWVudGVtZW50ZSIsIlNlbXByZSIpKQ0KZGFkb3MkUTRfMTA8LWZhY3RvcihkYWRvcyRRNF8xMCwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJOdW5jYSIsIlJhcmFtZW50ZSIsIsOAcyB2ZXplcyIsIkZyZXF1ZW50ZW1lbnRlIiwiU2VtcHJlIikpDQpkYWRvcyRRNF8xMTwtZmFjdG9yKGRhZG9zJFE0XzExLCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIk51bmNhIiwiUmFyYW1lbnRlIiwiw4BzIHZlemVzIiwiRnJlcXVlbnRlbWVudGUiLCJTZW1wcmUiKSkNCg0KIyBxNSAtIEF2YWxpYcOnw6NvIGRlIFJpc2Nvcw0KZGFkb3MkUTVfMTwtZmFjdG9yKGRhZG9zJFE1XzEsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRNV8yPC1mYWN0b3IoZGFkb3MkUTVfMiwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFE1XzM8LWZhY3RvcihkYWRvcyRRNV8zLCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTVfNDwtZmFjdG9yKGRhZG9zJFE1XzQsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRNV81PC1mYWN0b3IoZGFkb3MkUTVfNSwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFE1XzY8LWZhY3RvcihkYWRvcyRRNV82LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTVfNzwtZmFjdG9yKGRhZG9zJFE1XzcsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRNV84PC1mYWN0b3IoZGFkb3MkUTVfOCwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFE1Xzk8LWZhY3RvcihkYWRvcyRRNV85LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KDQojIHE2IC0gIkluc3RhbGHDp8O1ZXMgZSBFcXVpcGFtZW50b3MiDQpkYWRvcyRRNl8xPC1mYWN0b3IoZGFkb3MkUTZfMSwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFE2XzI8LWZhY3RvcihkYWRvcyRRNl8yLCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTZfMzwtZmFjdG9yKGRhZG9zJFE2XzMsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRNl80PC1mYWN0b3IoZGFkb3MkUTZfNCwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFE2XzU8LWZhY3RvcihkYWRvcyRRNl81LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTZfNjwtZmFjdG9yKGRhZG9zJFE2XzYsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRNl83PC1mYWN0b3IoZGFkb3MkUTZfNywgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCg0KIyBxNyAtICJEZWZlc2EgZG9zIEFsaW1lbnRvcyINCmRhZG9zJFE3XzE8LWZhY3RvcihkYWRvcyRRN18xLCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTdfMjwtZmFjdG9yKGRhZG9zJFE3XzIsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRN18zPC1mYWN0b3IoZGFkb3MkUTdfMywgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFE3XzQ8LWZhY3RvcihkYWRvcyRRN180LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTdfNTwtZmFjdG9yKGRhZG9zJFE3XzUsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRRN182PC1mYWN0b3IoZGFkb3MkUTdfNiwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFE3Xzc8LWZhY3RvcihkYWRvcyRRN183LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUTdfODwtZmFjdG9yKGRhZG9zJFE3XzgsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQoNCiMgcTggLSAiQXJtYXplbmFtZW50byBlIGNvbnNlcnZhw6fDo28gZGUgYWxpbWVudG9zIg0KZGFkb3MkUThfMTwtZmFjdG9yKGRhZG9zJFE4XzEsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRROF8yPC1mYWN0b3IoZGFkb3MkUThfMiwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFE4XzM8LWZhY3RvcihkYWRvcyRROF8zLCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUThfNDwtZmFjdG9yKGRhZG9zJFE4XzQsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRROF81PC1mYWN0b3IoZGFkb3MkUThfNSwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFE4XzY8LWZhY3RvcihkYWRvcyRROF82LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KZGFkb3MkUThfNzwtZmFjdG9yKGRhZG9zJFE4XzcsIGxldmVscyA9IGMoIjEiLCIyIiwiMyIsIjQiLCI1IiksIGxhYmVscyA9YygiRGlzY29yZG8gZXh0cmVtYW1lbnRlIiwiRGlzY29yZG8gbGlnZWlyYW1lbnRlIiwiTsOjbyBjb25jb3JkbyBuZW0gZGlzY29yZG8iLCJDb25jb3JkbyBsaWdlaXJhbWVudGUiLCAiQ29uY29yZG8gZXh0cmVtYW1lbnRlIikpDQpkYWRvcyRROF84PC1mYWN0b3IoZGFkb3MkUThfOCwgbGV2ZWxzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID1jKCJEaXNjb3JkbyBleHRyZW1hbWVudGUiLCJEaXNjb3JkbyBsaWdlaXJhbWVudGUiLCJOw6NvIGNvbmNvcmRvIG5lbSBkaXNjb3JkbyIsIkNvbmNvcmRvIGxpZ2VpcmFtZW50ZSIsICJDb25jb3JkbyBleHRyZW1hbWVudGUiKSkNCmRhZG9zJFE4Xzk8LWZhY3RvcihkYWRvcyRROF85LCBsZXZlbHMgPSBjKCIxIiwiMiIsIjMiLCI0IiwiNSIpLCBsYWJlbHMgPWMoIkRpc2NvcmRvIGV4dHJlbWFtZW50ZSIsIkRpc2NvcmRvIGxpZ2VpcmFtZW50ZSIsIk7Do28gY29uY29yZG8gbmVtIGRpc2NvcmRvIiwiQ29uY29yZG8gbGlnZWlyYW1lbnRlIiwgIkNvbmNvcmRvIGV4dHJlbWFtZW50ZSIpKQ0KDQoNCmRhZG9zX3ExIDwtIGRhZG9zWywxOjhdDQpkYWRvc19xMiA8LSBkYWRvc1ssOToyMF0NCmRhZG9zX3EzIDwtIGRhZG9zWywyMTozMF0NCmRhZG9zX3E0IDwtIGRhZG9zWywzMTo0MV0NCmRhZG9zX3E1IDwtIGRhZG9zWyw0Mjo1MF0NCmRhZG9zX3E2IDwtIGRhZG9zWyw1MTo1N10NCmRhZG9zX3E3IDwtIGRhZG9zWyw1ODo2NV0NCmRhZG9zX3E4IDwtIGRhZG9zWyw2Njo3NF0NCg0KYGBgDQoNCiMgcTEgPC0gIkNhcGFjaXRhw6fDo28gUHJvZmlzc2lvbmFsIg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNn0NCm5hbWVzKGRhZG9zX3ExKSA8LSBjKCJRMSIsICJRMiIsICJRMyIsICJRNCIsICJRNSIsICJRNiIsICJRNyIsICJROCIpDQpsaWtlcnRfcTEgPC0gbGlrZXJ0KGRhZG9zX3ExLCBubGV2ZWxzID0gNSkNCmxpa2VydC5iYXIucGxvdChsaWtlcnRfcTEscGxvdC5wZXJjZW50cz1UUlVFLGxlZ2VuZCA9ICJSZXNwb3N0YXMiLCBsb3cuY29sb3IgPSAicmVkIiwgdGV4dC5zaXplPTIuNSkgKyBnZ3RpdGxlKHRpdGxlX3ExKSArIGxhYnMoIHggPSAiSXRlbnMiLCB5ID0gIlBvcmNlbnRhZ2VtIikgKyB0aGVtZV9taW5pbWFsKCkNCmxpa2VydC5oZWF0LnBsb3QobGlrZXJ0X3ExKQ0KYGBgDQoNCiMgcTIgPC0gIkNvbmhlY2ltZW50b3MgR2VyYWlzIg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNn0NCm5hbWVzKGRhZG9zX3EyKSA8LSBjKCJRMSIsICJRMiIsICJRMyIsICJRNCIsICJRNSIsICJRNiIsICJRNyIsICJROCIsIlE5IiwgIlExMCIsICJRMTEiLCAiUTEyIikNCmxpa2VydF9xMiA8LSBsaWtlcnQoZGFkb3NfcTIsIG5sZXZlbHMgPSA1KQ0KbGlrZXJ0LmJhci5wbG90KGxpa2VydF9xMixwbG90LnBlcmNlbnRzPVRSVUUsbGVnZW5kID0gIlJlc3Bvc3RhcyIsIGxvdy5jb2xvciA9ICJyZWQiLCB0ZXh0LnNpemU9Mi41KSArIGdndGl0bGUodGl0bGVfcTIpICsNCiAgbGFicyggeCA9ICJJdGVucyIsIHkgPSAiUG9yY2VudGFnZW0iKSsgdGhlbWVfbWluaW1hbCgpDQpsaWtlcnQuaGVhdC5wbG90KGxpa2VydF9xMikNCmBgYA0KDQojIHEzIDwtICJQcmVwYXJvIGRvcyBBbGltZW50b3MiDQoNCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE2fQ0KbmFtZXMoZGFkb3NfcTMpIDwtIGMoIlExIiwgIlEyIiwgIlEzIiwgIlE0IiwgIlE1IiwgIlE2IiwgIlE3IiwgIlE4IiwiUTkiLCAiUTEwIikNCmxpa2VydF9xMyA8LSBsaWtlcnQoZGFkb3NfcTMsIG5sZXZlbHMgPSA1KQ0KbGlrZXJ0LmJhci5wbG90KGxpa2VydF9xMyxwbG90LnBlcmNlbnRzPVRSVUUsbGVnZW5kID0gIlJlc3Bvc3RhcyIsIGxvdy5jb2xvciA9ICJyZWQiLCB0ZXh0LnNpemU9Mi41KSArIGdndGl0bGUodGl0bGVfcTMpICsNCiAgbGFicyggeCA9ICJJdGVucyIsIHkgPSAiUG9yY2VudGFnZW0iKSsgdGhlbWVfbWluaW1hbCgpDQpsaWtlcnQuaGVhdC5wbG90KGxpa2VydF9xMykNCmBgYA0KDQojIHE0IDwtICJQcsOhdGljYXMgZGUgSGlnaWVuZSBQZXNzb2FpcyINCg0KYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTZ9DQpuYW1lcyhkYWRvc19xNCkgPC0gYygiUTEiLCAiUTIiLCAiUTMiLCAiUTQiLCAiUTUiLCAiUTYiLCAiUTciLCAiUTgiLCJROSIsICJRMTAiLCAiUTExIikNCmxpa2VydF9xNCA8LSBsaWtlcnQoZGFkb3NfcTQsIG5sZXZlbHMgPSA1KQ0KbGlrZXJ0LmJhci5wbG90KGxpa2VydF9xNCxwbG90LnBlcmNlbnRzPVRSVUUsbGVnZW5kID0gIlJlc3Bvc3RhcyIsIGxvdy5jb2xvciA9ICJyZWQiLCB0ZXh0LnNpemU9Mi41KSArIGdndGl0bGUodGl0bGVfcTQpICsNCiAgbGFicyggeCA9ICJJdGVucyIsIHkgPSAiUG9yY2VudGFnZW0iKSsgdGhlbWVfbWluaW1hbCgpDQpsaWtlcnQuaGVhdC5wbG90KGxpa2VydF9xNCkNCmBgYA0KIyBxNSA8LSAiQXZhbGlhw6fDo28gZGUgUmlzY29zIg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNn0NCm5hbWVzKGRhZG9zX3E1KSA8LSBjKCJRMSIsICJRMiIsICJRMyIsICJRNCIsICJRNSIsICJRNiIsICJRNyIsICJROCIsIlE5IikNCmxpa2VydF9xNSA8LSBsaWtlcnQoZGFkb3NfcTUsIG5sZXZlbHMgPSA1KQ0KbGlrZXJ0LmJhci5wbG90KGxpa2VydF9xNSxwbG90LnBlcmNlbnRzPVRSVUUsbGVnZW5kID0gIlJlc3Bvc3RhcyIsIGxvdy5jb2xvciA9ICJyZWQiLCB0ZXh0LnNpemU9Mi41KSArIGdndGl0bGUodGl0bGVfcTUpICsNCiAgbGFicyggeCA9ICJJdGVucyIsIHkgPSAiUG9yY2VudGFnZW0iKSsgdGhlbWVfbWluaW1hbCgpDQpsaWtlcnQuaGVhdC5wbG90KGxpa2VydF9xNSkNCmBgYA0KIyBxNiA8LSAiSW5zdGFsYcOnw7VlcyBlIEVxdWlwYW1lbnRvcyINCg0KYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTZ9DQpuYW1lcyhkYWRvc19xNikgPC0gYygiUTEiLCAiUTIiLCAiUTMiLCAiUTQiLCAiUTUiLCAiUTYiLCAiUTciKQ0KbGlrZXJ0X3E2IDwtIGxpa2VydChkYWRvc19xNiwgbmxldmVscyA9IDUpDQpsaWtlcnQuYmFyLnBsb3QobGlrZXJ0X3E2LHBsb3QucGVyY2VudHM9VFJVRSxsZWdlbmQgPSAiUmVzcG9zdGFzIiwgbG93LmNvbG9yID0gInJlZCIsIHRleHQuc2l6ZT0yLjUpICsgZ2d0aXRsZSh0aXRsZV9xNikgKw0KICBsYWJzKCB4ID0gIkl0ZW5zIiwgeSA9ICJQb3JjZW50YWdlbSIpKyB0aGVtZV9taW5pbWFsKCkNCmxpa2VydC5oZWF0LnBsb3QobGlrZXJ0X3E2KQ0KYGBgDQojIHE3IDwtICJEZWZlc2EgZG9zIEFsaW1lbnRvcyINCg0KYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTZ9DQpuYW1lcyhkYWRvc19xNykgPC0gYygiUTEiLCAiUTIiLCAiUTMiLCAiUTQiLCAiUTUiLCAiUTYiLCAiUTciLCAiUTgiKQ0KbGlrZXJ0X3E3IDwtIGxpa2VydChkYWRvc19xNywgbmxldmVscyA9IDUpDQpsaWtlcnQuYmFyLnBsb3QobGlrZXJ0X3E3LHBsb3QucGVyY2VudHM9VFJVRSxsZWdlbmQgPSAiUmVzcG9zdGFzIiwgbG93LmNvbG9yID0gInJlZCIsIHRleHQuc2l6ZT0yLjUpICsgZ2d0aXRsZSh0aXRsZV9xNykgKw0KICBsYWJzKCB4ID0gIkl0ZW5zIiwgeSA9ICJQb3JjZW50YWdlbSIpKyB0aGVtZV9taW5pbWFsKCkNCmxpa2VydC5oZWF0LnBsb3QobGlrZXJ0X3E3KQ0KYGBgDQojIHE4IDwtICJBcm1hemVuYW1lbnRvIGUgY29uc2VydmHDp8OjbyBkZSBhbGltZW50b3MiDQoNCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE2fQ0KbmFtZXMoZGFkb3NfcTIpIDwtIGMoIlExIiwgIlEyIiwgIlEzIiwgIlE0IiwgIlE1IiwgIlE2IiwgIlE3IiwgIlE4IiwiUTkiKQ0KbGlrZXJ0X3E4IDwtIGxpa2VydChkYWRvc19xOCwgbmxldmVscyA9IDUpDQpsaWtlcnQuYmFyLnBsb3QobGlrZXJ0X3E4LHBsb3QucGVyY2VudHM9VFJVRSxsZWdlbmQgPSAiUmVzcG9zdGFzIiwgbG93LmNvbG9yID0gInJlZCIsIHRleHQuc2l6ZT0yLjUpICsgZ2d0aXRsZSh0aXRsZV9xOCkgKw0KICBsYWJzKCB4ID0gIkl0ZW5zIiwgeSA9ICJQb3JjZW50YWdlbSIpKyB0aGVtZV9taW5pbWFsKCkNCmxpa2VydC5oZWF0LnBsb3QobGlrZXJ0X3E4KQ0KYGBg