turismo <- read.csv("/Users/benjaminreyessanchez/Downloads/Base de datos turismo limpia")

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.1     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(ggplot2)

Análisis Descriprivo

Conocimiento Sobre el Turismo Responsable Por Edades

tab_edad <- table(turismo$Q2,turismo$Q12_1)
tab_edad
##    
##       1   2   3   4   5
##   1 164  91  96  52  36
##   2 102  46  53  42  47
barplot(tab_edad, main = "Conocimiento Turismo Responsable", xlab = "Edades", ylab = "Frecuencia", names.arg=c("< 25","25 - 40", "40 - 55", "55 - 65", "> 65"))
legend(x="topright", legend=c("Sí", "No"), fill = c("Black","Grey"))

Aspectos Importantes del Turismo Responsable

op3.1 <- count(turismo, Q3_1)
op3.2 <- count(turismo, Q3_2)
op3.3 <- count(turismo, Q3_3)

names(op3.1) <- c("R", "Acciones y Normativas")
names(op3.2) <- c("R", "Alteración Entorno Social")
names(op3.3) <- c("R", "Equidad/Justicia Laboral")

op3.1
##   R Acciones y Normativas
## 1 1                   356
## 2 2                   255
## 3 3                   118
op3.2
##   R Alteración Entorno Social
## 1 1                       235
## 2 2                       225
## 3 3                       269
op3.3
##   R Equidad/Justicia Laboral
## 1 1                      138
## 2 2                      249
## 3 3                      342
resultadoQ3 <- merge(op3.1, op3.2, by = "R", all = TRUE) # Unir df1 y df2
resultadoQ3 <- merge(resultadoQ3, op3.3, by = "R", all = TRUE) # Unir df3 al resultado anterior
resultadoQ3$R <- as.factor(resultadoQ3$R)
barplot(as.matrix(resultadoQ3[, 2:4]), beside = TRUE, col = c("dodgerblue3", "darkorchid3", "darkorange2"),
        legend.text = rownames(df), ylim = c(0, 400),
        main = "Aspectos del Turismo Responsable", xlab = "Categorías", ylab = "Valores")
legend(x="bottomright", legend=c("1", "2", "3"), fill = c("dodgerblue3","darkorchid3", "darkorange2"))

Aspectos en Cuenta para Organizar un Viaje

p4.1 <- sum(turismo$Q4_1)
p4.2 <- sum(turismo$Q4_2)
p4.3 <- sum(turismo$Q4_3)
p4.4 <- sum(turismo$Q4_4)
p4.5 <- sum(turismo$Q4_5)
p4.6 <- sum(turismo$Q4_6)
p4.7 <- sum(turismo$Q4_7)
p4.8 <- sum(turismo$Q4_8)
p4.9 <- sum(turismo$Q4_9)
p4.10 <- sum(turismo$Q4_10)
p4.11 <- sum(turismo$Q4_11)
p4.12 <- sum(turismo$Q4_12)

p4.1
## [1] 641
p4.2
## [1] 557
p4.3
## [1] 437
p4.4
## [1] 291
p4.5
## [1] 310
p4.6
## [1] 395
p4.7
## [1] 467
p4.8
## [1] 392
p4.9
## [1] 362
p4.10
## [1] 392
p4.11
## [1] 193
p4.12
## [1] 429
df_valores <- data.frame(Categoria = c("Costo", "Seguridad", "Oferta Turística", "Nº Desplazamientos", "T Desplazamientos", "Transporte Disponible", "Conocer Cultura", "Conocer Parajes", "Gastronomía", "Recomendaciones", "Exclusividad", "Temporada Año"), Suma = c(p4.1, p4.2, p4.3, p4.4, p4.5, p4.6, p4.7, p4.8, p4.9, p4.10, p4.11, p4.12))
ggplot(df_valores, aes(x = Categoria, y = Suma)) +
  geom_bar(stat = "identity", fill = "blue") +
  geom_text(aes(label = Suma), vjust = -0.3, size = 3) +
  labs(title = "Aspectos en Cuenta para Organizar un Viaje", x = "Categoría", y = "Frecuencia") +
  theme_minimal() +
  theme(axis.text.x = element_text(size = 10, angle = 30, hjust = 1))

Afirmaciones Relacionadas a su Modo de Actuar

Preocupación por la Sostenibilidad

plot(x = factor(turismo$Q12_1), y = turismo$Q6_1, main = "Preocupación por la Sostenibilidad", xlab = "Rango de Edad", ylab = "Nivel de Preocupación", col = c("cadetblue2", "cadetblue3", "cadetblue4", "cadetblue2", "cadetblue3"))
legend(x="bottomleft", legend=c("< 25","25 - 40", "40 - 55", "55 - 65", "> 65"), fill = c("cadetblue2", "cadetblue3", "cadetblue4", "cadetblue2", "cadetblue3"))

Consciencia de Riesgos al Viajar

plot(x = factor(turismo$Q11), y = turismo$Q6_2, main = "Consciencia de Riesgos al Viajar", xlab = "Sexo", ylab = "Nivel de Consciencia", col = c("chartreuse4", "chocolate"),names.arg=c("Hombre","Mujer"))
legend(x="bottomleft", legend=c("Hombre", "Mujer"), fill = c("chartreuse4","chocolate"))

Fomento del Desarrollo Local

plot(x = factor(turismo$Q13), y = turismo$Q6_4, main = "Fomento del Desarrollo Local", xlab = "Nacionalidad", ylab = "Nivel de Afirmación", col = c("darkcyan", "darkgoldenrod"),names.arg=c("Hombre","Mujer"))
legend(x="bottomleft", legend=c("México", "España"), fill = c("darkcyan","darkgoldenrod"))

Cálculo de la Huella de Carbono de su Viaje

plot(x = factor(turismo$Q13), y = turismo$Q6_11, main = "Cálculo de la Huella de Carbono de su Viaje", xlab = "Nacionalidad", ylab = "Nivel de Responsabilidad", col = c("purple", "green3"),names.arg=c("Hombre","Mujer"))
legend(x="topleft", legend=c("México", "España"), fill = c("purple","green3"))

Participación en Redes y Actividades relacionadas al Turismo Sostenible

plot(x = factor(turismo$Q12_1), y = turismo$Q6_15, main = "Participación en Redes y Actividades Relacionadas", xlab = "Rango de Edad", ylab = "Nivel de Participación", col = c("antiquewhite2", "antiquewhite3", "antiquewhite4", "antiquewhite3", "antiquewhite2"))
legend(x="topright", legend=c("< 25","25 - 40", "40 - 55", "55 - 65", "> 65"), fill = c("antiquewhite2", "antiquewhite3", "antiquewhite4", "antiquewhite3", "antiquewhite2"))

Número de viajes realizados en el último año, Razones y Planificación

hist(x = turismo$Q7, main = "Histograma - Nº de Viajes del Último Año", col = "forestgreen", xlab = "Nº de Viajes", ylab = "Frecuencia", xlim = c(0, 30))

turismo$Q9 <- as.factor(turismo$Q9)
turismo$Q12_1 <- as.factor(turismo$Q12_1)
turismo$Q10 <- as.factor(turismo$Q10)

ggplot(turismo, aes(x = Q12_1, fill = Q10)) +
  geom_bar(position = "stack") +
  facet_wrap(~ Q9, labeller = labeller(Q9 = c("1" = "Yo", "2" = "Otros", "3" = "Yo y Otros"))) +
  labs(title = "Planificación del Viaje Relacionado a la Razón del Viaje y Edad",
       x = "Rango de Edad", y = "Cantidad") +
  scale_fill_manual(values = c("steelblue4", "royalblue1", "skyblue3", "royalblue4"),
                    name = "Razón Viaje", labels = c("1" = "Ocio o Visita", "2" = "Estudio", "3" = "Trabajo", "4" = "Otro")) +
  scale_x_discrete(name = "Rango de Edad", labels = c("1" = "< 25", "2" = "25 - 40", "3" = "40 - 55", "4" = "55 - 65", "5" = "> 65")) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Hipótesis

base <- turismo
españa <- base[base$Q13 == 2,]
mexico <- base[base$Q13 == 1,]

Hipotesis 1; Hipotesis Alterna

q9 <- as.numeric(españa$Q9)

q9data <- sum(q9 == 1) / length(q9)

hipotesis1 <- 0.866

##res1 <- t.test(q9data, alternative = "two.sided", conf.level = 0.95, mu = hipotesis1)

Hipotesis 2; Hipotesis Alterna

q6 <- as.numeric(mexico$Q6_4)

q6data <- mean(q6)
hipotesis2 <- .50
res2 <- t.test(q6, alternative = "less", conf.level = 0.95, mu = hipotesis2)
res2
## 
##  One Sample t-test
## 
## data:  q6
## t = 58.055, df = 441, p-value = 1
## alternative hypothesis: true mean is less than 0.5
## 95 percent confidence interval:
##      -Inf 5.111478
## sample estimates:
## mean of x 
##  4.984163

Hipotesis 3; Hipotesis Alterna

q611 <- as.numeric(españa$Q6_11)

q6media <- mean(q611)

hipotesis3 <- 0.55

res3 <- t.test(q611, alternative = "less", conf.level = 0.95, mu = hipotesis3)
res3
## 
##  One Sample t-test
## 
## data:  q611
## t = 17.828, df = 286, p-value = 1
## alternative hypothesis: true mean is less than 0.55
## 95 percent confidence interval:
##      -Inf 2.667168
## sample estimates:
## mean of x 
##  2.487805

Hipotesis4; Hipotesis Alterna

vmex <- mexico$Q7
vesp <- españa$Q7

res4 <- t.test(vmex, vesp)
res4
## 
##  Welch Two Sample t-test
## 
## data:  vmex and vesp
## t = 0.2395, df = 457.41, p-value = 0.8108
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.6081497  0.7769579
## sample estimates:
## mean of x mean of y 
##  3.753394  3.668990

Hipotesis 5; Hipotesis Alterna

q12 <- as.numeric(mexico$Q12)

hipotesis5 <- c(25, 36)

res5 <- t.test(q12, mu = mean(hipotesis5), conf.level = 0.95)
res5
## 
##  One Sample t-test
## 
## data:  q12
## t = 11.309, df = 441, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 30.5
## 95 percent confidence interval:
##  39.19774 42.85656
## sample estimates:
## mean of x 
##  41.02715

Hipotesis6; Hipotesis Alterna

q12 <- as.numeric(españa$Q12)

hipotesis6 <- c(15,29)

res6 <- t.test(q12, mu = mean(hipotesis6), conf.level = 0.95)
res6
## 
##  One Sample t-test
## 
## data:  q12
## t = 14.223, df = 286, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 22
## 95 percent confidence interval:
##  34.58792 38.63159
## sample estimates:
## mean of x 
##  36.60976
LS0tCnRpdGxlOiAiQ2FzbyBUdXJpc21vIgphdXRob3I6ICJFUVVJUE8gNSIKZGF0ZTogIjIwMjMtMDgtMzEiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCmBgYHtyfQp0dXJpc21vIDwtIHJlYWQuY3N2KCIvVXNlcnMvYmVuamFtaW5yZXllc3NhbmNoZXovRG93bmxvYWRzL0Jhc2UgZGUgZGF0b3MgdHVyaXNtbyBsaW1waWEiKQoKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZ2dwbG90MikKCmBgYAojIEFuw6FsaXNpcyBEZXNjcmlwcml2bwoKIyMjIENvbm9jaW1pZW50byBTb2JyZSBlbCBUdXJpc21vIFJlc3BvbnNhYmxlIFBvciBFZGFkZXMKCmBgYHtyfQp0YWJfZWRhZCA8LSB0YWJsZSh0dXJpc21vJFEyLHR1cmlzbW8kUTEyXzEpCnRhYl9lZGFkCmBgYApgYGB7cn0KYmFycGxvdCh0YWJfZWRhZCwgbWFpbiA9ICJDb25vY2ltaWVudG8gVHVyaXNtbyBSZXNwb25zYWJsZSIsIHhsYWIgPSAiRWRhZGVzIiwgeWxhYiA9ICJGcmVjdWVuY2lhIiwgbmFtZXMuYXJnPWMoIjwgMjUiLCIyNSAtIDQwIiwgIjQwIC0gNTUiLCAiNTUgLSA2NSIsICI+IDY1IikpCmxlZ2VuZCh4PSJ0b3ByaWdodCIsIGxlZ2VuZD1jKCJTw60iLCAiTm8iKSwgZmlsbCA9IGMoIkJsYWNrIiwiR3JleSIpKQpgYGAKCiMjIyBBc3BlY3RvcyBJbXBvcnRhbnRlcyBkZWwgVHVyaXNtbyBSZXNwb25zYWJsZQpgYGB7cn0Kb3AzLjEgPC0gY291bnQodHVyaXNtbywgUTNfMSkKb3AzLjIgPC0gY291bnQodHVyaXNtbywgUTNfMikKb3AzLjMgPC0gY291bnQodHVyaXNtbywgUTNfMykKCm5hbWVzKG9wMy4xKSA8LSBjKCJSIiwgIkFjY2lvbmVzIHkgTm9ybWF0aXZhcyIpCm5hbWVzKG9wMy4yKSA8LSBjKCJSIiwgIkFsdGVyYWNpw7NuIEVudG9ybm8gU29jaWFsIikKbmFtZXMob3AzLjMpIDwtIGMoIlIiLCAiRXF1aWRhZC9KdXN0aWNpYSBMYWJvcmFsIikKCm9wMy4xCm9wMy4yCm9wMy4zCmBgYAoKYGBge3J9CnJlc3VsdGFkb1EzIDwtIG1lcmdlKG9wMy4xLCBvcDMuMiwgYnkgPSAiUiIsIGFsbCA9IFRSVUUpICMgVW5pciBkZjEgeSBkZjIKcmVzdWx0YWRvUTMgPC0gbWVyZ2UocmVzdWx0YWRvUTMsIG9wMy4zLCBieSA9ICJSIiwgYWxsID0gVFJVRSkgIyBVbmlyIGRmMyBhbCByZXN1bHRhZG8gYW50ZXJpb3IKcmVzdWx0YWRvUTMkUiA8LSBhcy5mYWN0b3IocmVzdWx0YWRvUTMkUikKYGBgCmBgYHtyfQpiYXJwbG90KGFzLm1hdHJpeChyZXN1bHRhZG9RM1ssIDI6NF0pLCBiZXNpZGUgPSBUUlVFLCBjb2wgPSBjKCJkb2RnZXJibHVlMyIsICJkYXJrb3JjaGlkMyIsICJkYXJrb3JhbmdlMiIpLAogICAgICAgIGxlZ2VuZC50ZXh0ID0gcm93bmFtZXMoZGYpLCB5bGltID0gYygwLCA0MDApLAogICAgICAgIG1haW4gPSAiQXNwZWN0b3MgZGVsIFR1cmlzbW8gUmVzcG9uc2FibGUiLCB4bGFiID0gIkNhdGVnb3LDrWFzIiwgeWxhYiA9ICJWYWxvcmVzIikKbGVnZW5kKHg9ImJvdHRvbXJpZ2h0IiwgbGVnZW5kPWMoIjEiLCAiMiIsICIzIiksIGZpbGwgPSBjKCJkb2RnZXJibHVlMyIsImRhcmtvcmNoaWQzIiwgImRhcmtvcmFuZ2UyIikpCmBgYAoKIyMjIEFzcGVjdG9zIGVuIEN1ZW50YSBwYXJhIE9yZ2FuaXphciB1biBWaWFqZQpgYGB7cn0KcDQuMSA8LSBzdW0odHVyaXNtbyRRNF8xKQpwNC4yIDwtIHN1bSh0dXJpc21vJFE0XzIpCnA0LjMgPC0gc3VtKHR1cmlzbW8kUTRfMykKcDQuNCA8LSBzdW0odHVyaXNtbyRRNF80KQpwNC41IDwtIHN1bSh0dXJpc21vJFE0XzUpCnA0LjYgPC0gc3VtKHR1cmlzbW8kUTRfNikKcDQuNyA8LSBzdW0odHVyaXNtbyRRNF83KQpwNC44IDwtIHN1bSh0dXJpc21vJFE0XzgpCnA0LjkgPC0gc3VtKHR1cmlzbW8kUTRfOSkKcDQuMTAgPC0gc3VtKHR1cmlzbW8kUTRfMTApCnA0LjExIDwtIHN1bSh0dXJpc21vJFE0XzExKQpwNC4xMiA8LSBzdW0odHVyaXNtbyRRNF8xMikKCnA0LjEKcDQuMgpwNC4zCnA0LjQKcDQuNQpwNC42CnA0LjcKcDQuOApwNC45CnA0LjEwCnA0LjExCnA0LjEyCmBgYAoKYGBge3J9CmRmX3ZhbG9yZXMgPC0gZGF0YS5mcmFtZShDYXRlZ29yaWEgPSBjKCJDb3N0byIsICJTZWd1cmlkYWQiLCAiT2ZlcnRhIFR1csOtc3RpY2EiLCAiTsK6IERlc3BsYXphbWllbnRvcyIsICJUIERlc3BsYXphbWllbnRvcyIsICJUcmFuc3BvcnRlIERpc3BvbmlibGUiLCAiQ29ub2NlciBDdWx0dXJhIiwgIkNvbm9jZXIgUGFyYWplcyIsICJHYXN0cm9ub23DrWEiLCAiUmVjb21lbmRhY2lvbmVzIiwgIkV4Y2x1c2l2aWRhZCIsICJUZW1wb3JhZGEgQcOxbyIpLCBTdW1hID0gYyhwNC4xLCBwNC4yLCBwNC4zLCBwNC40LCBwNC41LCBwNC42LCBwNC43LCBwNC44LCBwNC45LCBwNC4xMCwgcDQuMTEsIHA0LjEyKSkKZ2dwbG90KGRmX3ZhbG9yZXMsIGFlcyh4ID0gQ2F0ZWdvcmlhLCB5ID0gU3VtYSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgZmlsbCA9ICJibHVlIikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBTdW1hKSwgdmp1c3QgPSAtMC4zLCBzaXplID0gMykgKwogIGxhYnModGl0bGUgPSAiQXNwZWN0b3MgZW4gQ3VlbnRhIHBhcmEgT3JnYW5pemFyIHVuIFZpYWplIiwgeCA9ICJDYXRlZ29yw61hIiwgeSA9ICJGcmVjdWVuY2lhIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBhbmdsZSA9IDMwLCBoanVzdCA9IDEpKQpgYGAKCiMjIyBBZmlybWFjaW9uZXMgUmVsYWNpb25hZGFzIGEgc3UgTW9kbyBkZSBBY3R1YXIKIyMjIyBQcmVvY3VwYWNpw7NuIHBvciBsYSBTb3N0ZW5pYmlsaWRhZApgYGB7cn0KcGxvdCh4ID0gZmFjdG9yKHR1cmlzbW8kUTEyXzEpLCB5ID0gdHVyaXNtbyRRNl8xLCBtYWluID0gIlByZW9jdXBhY2nDs24gcG9yIGxhIFNvc3RlbmliaWxpZGFkIiwgeGxhYiA9ICJSYW5nbyBkZSBFZGFkIiwgeWxhYiA9ICJOaXZlbCBkZSBQcmVvY3VwYWNpw7NuIiwgY29sID0gYygiY2FkZXRibHVlMiIsICJjYWRldGJsdWUzIiwgImNhZGV0Ymx1ZTQiLCAiY2FkZXRibHVlMiIsICJjYWRldGJsdWUzIikpCmxlZ2VuZCh4PSJib3R0b21sZWZ0IiwgbGVnZW5kPWMoIjwgMjUiLCIyNSAtIDQwIiwgIjQwIC0gNTUiLCAiNTUgLSA2NSIsICI+IDY1IiksIGZpbGwgPSBjKCJjYWRldGJsdWUyIiwgImNhZGV0Ymx1ZTMiLCAiY2FkZXRibHVlNCIsICJjYWRldGJsdWUyIiwgImNhZGV0Ymx1ZTMiKSkKYGBgCgoKIyMjIyBDb25zY2llbmNpYSBkZSBSaWVzZ29zIGFsIFZpYWphcgpgYGB7cn0KcGxvdCh4ID0gZmFjdG9yKHR1cmlzbW8kUTExKSwgeSA9IHR1cmlzbW8kUTZfMiwgbWFpbiA9ICJDb25zY2llbmNpYSBkZSBSaWVzZ29zIGFsIFZpYWphciIsIHhsYWIgPSAiU2V4byIsIHlsYWIgPSAiTml2ZWwgZGUgQ29uc2NpZW5jaWEiLCBjb2wgPSBjKCJjaGFydHJldXNlNCIsICJjaG9jb2xhdGUiKSxuYW1lcy5hcmc9YygiSG9tYnJlIiwiTXVqZXIiKSkKbGVnZW5kKHg9ImJvdHRvbWxlZnQiLCBsZWdlbmQ9YygiSG9tYnJlIiwgIk11amVyIiksIGZpbGwgPSBjKCJjaGFydHJldXNlNCIsImNob2NvbGF0ZSIpKQpgYGAKCiMjIyMgRm9tZW50byBkZWwgRGVzYXJyb2xsbyBMb2NhbApgYGB7cn0KcGxvdCh4ID0gZmFjdG9yKHR1cmlzbW8kUTEzKSwgeSA9IHR1cmlzbW8kUTZfNCwgbWFpbiA9ICJGb21lbnRvIGRlbCBEZXNhcnJvbGxvIExvY2FsIiwgeGxhYiA9ICJOYWNpb25hbGlkYWQiLCB5bGFiID0gIk5pdmVsIGRlIEFmaXJtYWNpw7NuIiwgY29sID0gYygiZGFya2N5YW4iLCAiZGFya2dvbGRlbnJvZCIpLG5hbWVzLmFyZz1jKCJIb21icmUiLCJNdWplciIpKQpsZWdlbmQoeD0iYm90dG9tbGVmdCIsIGxlZ2VuZD1jKCJNw6l4aWNvIiwgIkVzcGHDsWEiKSwgZmlsbCA9IGMoImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIpKQpgYGAKCgojIyMjIEPDoWxjdWxvIGRlIGxhIEh1ZWxsYSBkZSBDYXJib25vIGRlIHN1IFZpYWplCgpgYGB7cn0KcGxvdCh4ID0gZmFjdG9yKHR1cmlzbW8kUTEzKSwgeSA9IHR1cmlzbW8kUTZfMTEsIG1haW4gPSAiQ8OhbGN1bG8gZGUgbGEgSHVlbGxhIGRlIENhcmJvbm8gZGUgc3UgVmlhamUiLCB4bGFiID0gIk5hY2lvbmFsaWRhZCIsIHlsYWIgPSAiTml2ZWwgZGUgUmVzcG9uc2FiaWxpZGFkIiwgY29sID0gYygicHVycGxlIiwgImdyZWVuMyIpLG5hbWVzLmFyZz1jKCJIb21icmUiLCJNdWplciIpKQpsZWdlbmQoeD0idG9wbGVmdCIsIGxlZ2VuZD1jKCJNw6l4aWNvIiwgIkVzcGHDsWEiKSwgZmlsbCA9IGMoInB1cnBsZSIsImdyZWVuMyIpKQpgYGAKCgojIyMjIFBhcnRpY2lwYWNpw7NuIGVuIFJlZGVzIHkgQWN0aXZpZGFkZXMgcmVsYWNpb25hZGFzIGFsIFR1cmlzbW8gU29zdGVuaWJsZQoKYGBge3J9CnBsb3QoeCA9IGZhY3Rvcih0dXJpc21vJFExMl8xKSwgeSA9IHR1cmlzbW8kUTZfMTUsIG1haW4gPSAiUGFydGljaXBhY2nDs24gZW4gUmVkZXMgeSBBY3RpdmlkYWRlcyBSZWxhY2lvbmFkYXMiLCB4bGFiID0gIlJhbmdvIGRlIEVkYWQiLCB5bGFiID0gIk5pdmVsIGRlIFBhcnRpY2lwYWNpw7NuIiwgY29sID0gYygiYW50aXF1ZXdoaXRlMiIsICJhbnRpcXVld2hpdGUzIiwgImFudGlxdWV3aGl0ZTQiLCAiYW50aXF1ZXdoaXRlMyIsICJhbnRpcXVld2hpdGUyIikpCmxlZ2VuZCh4PSJ0b3ByaWdodCIsIGxlZ2VuZD1jKCI8IDI1IiwiMjUgLSA0MCIsICI0MCAtIDU1IiwgIjU1IC0gNjUiLCAiPiA2NSIpLCBmaWxsID0gYygiYW50aXF1ZXdoaXRlMiIsICJhbnRpcXVld2hpdGUzIiwgImFudGlxdWV3aGl0ZTQiLCAiYW50aXF1ZXdoaXRlMyIsICJhbnRpcXVld2hpdGUyIikpCmBgYAoKCiMjIyBOw7ptZXJvIGRlIHZpYWplcyByZWFsaXphZG9zIGVuIGVsIMO6bHRpbW8gYcOxbywgUmF6b25lcyB5IFBsYW5pZmljYWNpw7NuCmBgYHtyfQpoaXN0KHggPSB0dXJpc21vJFE3LCBtYWluID0gIkhpc3RvZ3JhbWEgLSBOwrogZGUgVmlhamVzIGRlbCDDmmx0aW1vIEHDsW8iLCBjb2wgPSAiZm9yZXN0Z3JlZW4iLCB4bGFiID0gIk7CuiBkZSBWaWFqZXMiLCB5bGFiID0gIkZyZWN1ZW5jaWEiLCB4bGltID0gYygwLCAzMCkpCmBgYAoKCmBgYHtyfQp0dXJpc21vJFE5IDwtIGFzLmZhY3Rvcih0dXJpc21vJFE5KQp0dXJpc21vJFExMl8xIDwtIGFzLmZhY3Rvcih0dXJpc21vJFExMl8xKQp0dXJpc21vJFExMCA8LSBhcy5mYWN0b3IodHVyaXNtbyRRMTApCgpnZ3Bsb3QodHVyaXNtbywgYWVzKHggPSBRMTJfMSwgZmlsbCA9IFExMCkpICsKICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJzdGFjayIpICsKICBmYWNldF93cmFwKH4gUTksIGxhYmVsbGVyID0gbGFiZWxsZXIoUTkgPSBjKCIxIiA9ICJZbyIsICIyIiA9ICJPdHJvcyIsICIzIiA9ICJZbyB5IE90cm9zIikpKSArCiAgbGFicyh0aXRsZSA9ICJQbGFuaWZpY2FjacOzbiBkZWwgVmlhamUgUmVsYWNpb25hZG8gYSBsYSBSYXrDs24gZGVsIFZpYWplIHkgRWRhZCIsCiAgICAgICB4ID0gIlJhbmdvIGRlIEVkYWQiLCB5ID0gIkNhbnRpZGFkIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoInN0ZWVsYmx1ZTQiLCAicm95YWxibHVlMSIsICJza3libHVlMyIsICJyb3lhbGJsdWU0IiksCiAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJSYXrDs24gVmlhamUiLCBsYWJlbHMgPSBjKCIxIiA9ICJPY2lvIG8gVmlzaXRhIiwgIjIiID0gIkVzdHVkaW8iLCAiMyIgPSAiVHJhYmFqbyIsICI0IiA9ICJPdHJvIikpICsKICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSAiUmFuZ28gZGUgRWRhZCIsIGxhYmVscyA9IGMoIjEiID0gIjwgMjUiLCAiMiIgPSAiMjUgLSA0MCIsICIzIiA9ICI0MCAtIDU1IiwgIjQiID0gIjU1IC0gNjUiLCAiNSIgPSAiPiA2NSIpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkKYGBgCgoKIyBIaXDDs3Rlc2lzCgpgYGB7cn0KYmFzZSA8LSB0dXJpc21vCmVzcGHDsWEgPC0gYmFzZVtiYXNlJFExMyA9PSAyLF0KbWV4aWNvIDwtIGJhc2VbYmFzZSRRMTMgPT0gMSxdCmBgYAoKCiMjIyMgSGlwb3Rlc2lzIDE7IEhpcG90ZXNpcyBBbHRlcm5hCmBgYHtyfQpxOSA8LSBhcy5udW1lcmljKGVzcGHDsWEkUTkpCgpxOWRhdGEgPC0gc3VtKHE5ID09IDEpIC8gbGVuZ3RoKHE5KQoKaGlwb3Rlc2lzMSA8LSAwLjg2NgoKIyNyZXMxIDwtIHQudGVzdChxOWRhdGEsIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsIGNvbmYubGV2ZWwgPSAwLjk1LCBtdSA9IGhpcG90ZXNpczEpCmBgYAoKIyMjIyBIaXBvdGVzaXMgMjsgSGlwb3Rlc2lzIEFsdGVybmEKYGBge3J9CnE2IDwtIGFzLm51bWVyaWMobWV4aWNvJFE2XzQpCgpxNmRhdGEgPC0gbWVhbihxNikKaGlwb3Rlc2lzMiA8LSAuNTAKcmVzMiA8LSB0LnRlc3QocTYsIGFsdGVybmF0aXZlID0gImxlc3MiLCBjb25mLmxldmVsID0gMC45NSwgbXUgPSBoaXBvdGVzaXMyKQpyZXMyCmBgYAoKIyMjIyBIaXBvdGVzaXMgMzsgSGlwb3Rlc2lzIEFsdGVybmEKYGBge3J9CnE2MTEgPC0gYXMubnVtZXJpYyhlc3Bhw7FhJFE2XzExKQoKcTZtZWRpYSA8LSBtZWFuKHE2MTEpCgpoaXBvdGVzaXMzIDwtIDAuNTUKCnJlczMgPC0gdC50ZXN0KHE2MTEsIGFsdGVybmF0aXZlID0gImxlc3MiLCBjb25mLmxldmVsID0gMC45NSwgbXUgPSBoaXBvdGVzaXMzKQpyZXMzCmBgYAoKIyMjIyBIaXBvdGVzaXM0OyBIaXBvdGVzaXMgQWx0ZXJuYQpgYGB7cn0Kdm1leCA8LSBtZXhpY28kUTcKdmVzcCA8LSBlc3Bhw7FhJFE3CgpyZXM0IDwtIHQudGVzdCh2bWV4LCB2ZXNwKQpyZXM0CmBgYAoKIyMjIyBIaXBvdGVzaXMgNTsgSGlwb3Rlc2lzIEFsdGVybmEKYGBge3J9CnExMiA8LSBhcy5udW1lcmljKG1leGljbyRRMTIpCgpoaXBvdGVzaXM1IDwtIGMoMjUsIDM2KQoKcmVzNSA8LSB0LnRlc3QocTEyLCBtdSA9IG1lYW4oaGlwb3Rlc2lzNSksIGNvbmYubGV2ZWwgPSAwLjk1KQpyZXM1CgpgYGAKCiMjIyMgSGlwb3Rlc2lzNjsgSGlwb3Rlc2lzIEFsdGVybmEKYGBge3J9CnExMiA8LSBhcy5udW1lcmljKGVzcGHDsWEkUTEyKQoKaGlwb3Rlc2lzNiA8LSBjKDE1LDI5KQoKcmVzNiA8LSB0LnRlc3QocTEyLCBtdSA9IG1lYW4oaGlwb3Rlc2lzNiksIGNvbmYubGV2ZWwgPSAwLjk1KQpyZXM2CgpgYGAKCgoKCgoK