1 Qué se estudió

Pregunta de investigación: ¿cambia la comprensión promedio del paciente sobre su cirugía de reemplazo total de rodilla según el formato de consentimiento, considerando las diferencias iniciales entre bloques?

Se comparan 18 pacientes distribuidos en seis bloques de tres. Cada bloque reúne a personas con alfabetización en salud inicial semejante. Dentro de cada bloque, una persona recibe T1, otra T2 y otra T3 mediante el sorteo que representa este ejemplo.

Tratamiento Modalidad
T1 · Control Formato tradicional legal y textual.
T2 Documento simplificado con infografías físicas impresas.
T3 Consentimiento digital con infografías y firma electrónica.

La respuesta es un puntaje post-consentimiento de 0 a 100. Un valor mayor representa mayor comprensión. Todos los datos son ficticios: no proceden del BICEP ni de otro cuestionario aplicado. En una investigación real debe utilizarse un instrumento validado para el idioma, población y contexto quirúrgico, con sus reglas de puntuación.

Resultado principal del ejemplo. Al considerar los bloques, el ANOVA detecta diferencias entre tratamientos: F = 80,357 y p < 0,001. La magnitud de cada diferencia se presenta mediante intervalos de Tukey. Esto describe el ejemplo y no demuestra eficacia clínica real.

2 Por qué se utilizaron bloques

Una persona familiarizada con información de salud podría obtener un puntaje alto con cualquiera de los formatos. Si esas diferencias iniciales se mezclan con las modalidades, puede ser más difícil distinguir el efecto del formato. El DBCA organiza la comparación entre personas inicialmente semejantes y separa estadísticamente la variación entre bloques.

Los bloques se forman antes de presentar el consentimiento, usando una característica inicial, no el puntaje final. En este ejemplo, B1 reúne puntajes iniciales de 34 a 37 y B6 de 83 a 86. La escala inicial es ficticia y no debe interpretarse como un instrumento validado ni como una categoría clínica.

Tabla 1. Cada fila contiene tres pacientes distintos, uno por modalidad.
Bloque Inicial mínimo Inicial máximo Comprensión T1 Comprensión T2 Comprensión T3
B1 34 37 58.0 65.5 73.0
B2 43 46 62.5 73.0 79.5
B3 53 56 68.0 79.5 80.0
B4 63 66 74.5 80.5 89.0
B5 73 76 80.0 88.0 90.5
B6 83 86 82.5 91.5 94.0

No es un estudio en el que la misma persona prueba tres consentimientos. Las comparaciones se relacionan por pertenecer al mismo bloque, no por corresponder al mismo paciente.

3 Cómo se distribuyeron los puntajes

Tabla 2. Descripción de los puntajes sin retirar el efecto del bloque.
Modalidad Pacientes Media Desv. estándar Mediana Mínimo Máximo
T1 · Texto legal 6 70.92 9.75 71.25 58.0 82.5
T2 · Infografía impresa 6 79.67 9.54 80.00 65.5 91.5
T3 · Digital y firma 6 84.33 8.05 84.50 73.0 94.0

La media es el promedio de cada modalidad. La mediana es el centro de sus puntajes ordenados. La desviación estándar resume la dispersión entre pacientes, incluida aquí la variación relacionada con los bloques. Por eso, la dispersión de esta tabla no equivale al error residual del modelo ajustado.

Figura 1. Puntajes por modalidad. Las líneas y colores unen a tres pacientes diferentes del mismo bloque.

Figura 1. Puntajes por modalidad. Las líneas y colores unen a tres pacientes diferentes del mismo bloque.

Cómo leer el gráfico. Cada punto es una persona. La línea central de cada caja es la mediana y la caja contiene la mitad central de los puntajes. Los bigotes llegan a los valores observados dentro de 1,5 rangos intercuartílicos de la caja; todos los puntos siguen visibles.

Qué aportan las líneas. Permiten seguir a cada bloque a través de T1, T2 y T3. Una línea ascendente indica que las personas de ese bloque obtuvieron puntajes mayores con las modalidades situadas a la derecha. No representa la mejoría de una misma persona ni una evolución en el tiempo.

Qué se observa. En estos datos, los seis bloques mantienen el orden T3 > T2 > T1. También hay diferencias verticales entre bloques. Aunque las cajas se superponen, la comparación dentro de cada bloque es consistente. Por eso se utiliza el análisis ajustado y no se decide el resultado solamente mirando las cajas.

4 Qué diferencias detectó el análisis

4.1 Comparación global con ANOVA

El modelo separa la comprensión observada en nivel general, efecto del bloque, efecto del tratamiento y error restante. La hipótesis principal plantea que las tres medias de tratamiento son iguales después de considerar los bloques.

Tabla 3. ANOVA del DBCA. La pregunta principal corresponde a la fila Tratamiento.
Fuente gl Suma de cuadrados Cuadrado medio F p
Bloque 5 1220.24 244.05 70,455 < 0,001
Tratamiento 2 556.69 278.35 80,357 < 0,001
Error residual 10 34.64 3.46 — —

El ANOVA aporta evidencia de diferencias entre tratamientos en este escenario. El valor p no indica cuántos puntos se gana ni representa la probabilidad de que un tratamiento sea el mejor. Además, los bloques se mantienen en el modelo por el diseño, sin decidir retirarlos según su valor p.

Como medida complementaria, eta cuadrado parcial del tratamiento es 0,941. Describe la proporción de variación atribuible al tratamiento respecto a tratamiento más error, una vez considerado el bloque. No es un porcentaje de pacientes beneficiados ni una medida de comprensión individual.

El diseño tiene una persona por combinación de bloque y tratamiento. En consecuencia, el modelo supone aditividad: no puede estimar por separado una interacción tratamiento por bloque y el error. Las líneas de la figura ayudan a explorar el patrón, pero no resuelven esa limitación.

4.2 Comparaciones de Tukey

Tukey compara cada par de modalidades utilizando el error residual del DBCA e intervalos simultáneos del 95 %. En este diseño completo y equilibrado, las diferencias de medias coinciden con las diferencias ajustadas por bloques; la precisión se obtiene del modelo con bloques.

Tabla 4. Diferencias en puntos de comprensión. T2–T1 significa T2 menos T1.
Comparación Diferencia Límite inferior Límite superior p ajustado Lectura
T2-T1 8.75 5.80 11.70 < 0,001 Diferencia detectada
T3-T1 13.42 10.47 16.36 < 0,001 Diferencia detectada
T3-T2 4.67 1.72 7.61 0,0038 Diferencia detectada
Figura 2. Diferencias e intervalos simultáneos del 95 % de Tukey, considerando el bloque.

Figura 2. Diferencias e intervalos simultáneos del 95 % de Tukey, considerando el bloque.

Cómo leerlo. El punto marca la diferencia estimada y la línea horizontal muestra su incertidumbre. Si el intervalo completo queda por encima de cero, la primera modalidad tiene una media mayor que la segunda bajo el modelo. Si incluye cero, no existe evidencia suficiente para distinguir ese par al nivel elegido; eso no demuestra equivalencia.

T2 frente a T1: 8,75 puntos más, con intervalo de 5,80 a 11,70.

T3 frente a T1: 13,42 puntos más, con intervalo de 10,47 a 16,36.

T3 frente a T2: 4,67 puntos más, con intervalo de 1,72 a 7,61.

En el ejemplo original los tres intervalos quedan por encima de cero. La decisión clínica exige definir previamente qué diferencia sería importante para el paciente, además de valorar su significación estadística.

5 Qué comprobamos en los residuos

Un residuo es la parte del puntaje que el modelo no explica después de considerar tanto la modalidad como el bloque. Un residuo de +2 indica que la persona obtuvo dos puntos más de lo estimado para su combinación de bloque y tratamiento.

El ANOVA supone errores independientes entre pacientes, varianza aproximadamente común y normalidad razonable de los errores. La independencia procede del diseño, no de una prueba de normalidad.

Tabla 5. Los valores p no demuestran el cumplimiento de los supuestos.
Procedimiento p Alcance
Shapiro–Wilk de residuos 0,2652 Diagnóstico de normalidad junto con el gráfico QQ
Bartlett sobre residuos 0,5107 Exploratorio; residuos relacionados por el ajuste
Levene-mediana sobre residuos 0,1243 Exploratorio; residuos relacionados por el ajuste

Precaución específica del DBCA. Los residuos están relacionados por el ajuste. Por eso, Bartlett y Levene calculados sobre ellos no conservan exactamente la calibración de pruebas entre muestras independientes. Se presentan como exploración, sin usarlos como semáforo automático para elegir el análisis. Aplicarlos solo a los puntajes brutos tampoco aislaría la variación residual.

Figura 3. Gráfico QQ de residuos estandarizados del modelo con bloque y tratamiento.

Figura 3. Gráfico QQ de residuos estandarizados del modelo con bloque y tratamiento.

Cómo leerlo. Una cercanía razonable de los puntos a la línea es compatible con normalidad aproximada. Una curva pronunciada o puntos muy alejados en los extremos justificarían revisar el modelo y los registros. Shapiro–Wilk da p = 0,2652; no detecta un alejamiento al nivel de 0,05, pero con una muestra pequeña puede pasar por alto problemas relevantes.

Figura 4. Residuos frente a comprensión ajustada por bloque y tratamiento.

Figura 4. Residuos frente a comprensión ajustada por bloque y tratamiento.

Cómo leerlo. Se busca una nube alrededor de cero sin una forma de abanico clara. Una amplitud que aumente al avanzar horizontalmente sugeriría variación no constante; una curva sugeriría una estructura no explicada. Con 18 puntos, la figura es orientativa. Un punto extremo exige comprobar el registro y valorar su influencia, no borrarlo automáticamente.

6 Qué aportan Friedman y la aleatorización

6.1 Friedman conserva la comparación por bloques

Friedman ordena los tres puntajes dentro de cada bloque y evalúa si una modalidad tiende a ocupar posiciones diferentes. No requiere normalidad, pero sí bloques independientes, completos y respuestas comparables. Su hipótesis por rangos no es idéntica a la igualdad de medias del ANOVA. Kruskal–Wallis ignoraría los bloques y no es la alternativa utilizada aquí.

El estadístico de Friedman es 12,000, con p = 0,0025 según su aproximación chi cuadrado. Kendall W es 1,000: en estos datos, el orden entre modalidades es completamente concordante en los seis bloques. W = 1 no significa comprensión del 100 % ni garantiza que se repita el patrón en otros pacientes. Con solo seis bloques debe reconocerse el carácter aproximado de la prueba global.

6.2 Aleatorización dentro de cada bloque

La prueba complementaria conserva los tres puntajes de cada bloque y cambia aleatoriamente sus etiquetas T1, T2 y T3. Repite ese sorteo 9999 veces y compara los estadísticos F simulados con el observado. No mezcla pacientes entre bloques.

En la ejecución reproducible, se obtuvieron 2 resultados tan extremos como el observado entre 9999 sorteos. Con la corrección que evita informar p = 0, el valor Monte Carlo es 0,0003. No es una enumeración exacta: cambiar la semilla o el número de repeticiones puede modificarlo ligeramente. Una semilla fija permite repetir el mismo cálculo con la misma configuración de R.

Su validez en un estudio real exige que la asignación se haya sorteado dentro de cada bloque. Contrasta una hipótesis de ausencia de efecto individual bajo el esquema de aleatorización; no debe confundirse automáticamente con cualquier hipótesis de igualdad de medias.

7 Interpretación para la pregunta de investigación

Con los datos ficticios y el modelo aditivo, el ANOVA y Tukey distinguen los tres formatos, con mayor comprensión promedio en T3, seguido por T2 y T1. La comparación se realiza considerando los niveles iniciales agrupados en bloques.

Friedman también detecta diferencias globales. Sin embargo, las comparaciones Wilcoxon por bloques con ajuste Holm no distinguen pares al nivel de 0,05 en este ejemplo. Esa diferencia de resultados se informa: las pruebas utilizan información y supuestos distintos, y seis bloques ofrecen poca resolución para comparaciones múltiples por rangos. No debe seleccionarse el método que arroje el menor valor p.

Para responder en pacientes reales se necesitan una muestra calculada, un instrumento de comprensión válido y condiciones equivalentes de información y aclaración de dudas. Los formatos no deben omitir contenido clínico esencial. T3 combina infografías, soporte digital y firma electrónica: el diseño compara ese paquete y no aísla el efecto de la firma.

8 Detalles y reproducibilidad

Ver las 18 observaciones y la comprobación de bloques completos
Una observación por combinación de bloque y tratamiento.
Paciente Bloque Alfabetización inicial Tratamiento Comprensión
DBCA_P01 B1 34 T2 65.5
DBCA_P02 B1 35 T1 58.0
DBCA_P03 B1 37 T3 73.0
DBCA_P04 B2 43 T3 79.5
DBCA_P05 B2 45 T2 73.0
DBCA_P06 B2 46 T1 62.5
DBCA_P07 B3 53 T1 68.0
DBCA_P08 B3 55 T3 80.0
DBCA_P09 B3 56 T2 79.5
DBCA_P10 B4 63 T2 80.5
DBCA_P11 B4 65 T3 89.0
DBCA_P12 B4 66 T1 74.5
DBCA_P13 B5 73 T3 90.5
DBCA_P14 B5 75 T1 80.0
DBCA_P15 B5 76 T2 88.0
DBCA_P16 B6 83 T1 82.5
DBCA_P17 B6 85 T2 91.5
DBCA_P18 B6 86 T3 94.0
T1 T2 T3
B1 1 1 1
B2 1 1 1
B3 1 1 1
B4 1 1 1
B5 1 1 1
B6 1 1 1
Ver las comparaciones Wilcoxon relacionadas por bloque

Las diferencias se calculan entre personas del mismo bloque. Wilcoxon de rangos con signo utiliza esa relación y requiere simetría de las diferencias para una interpretación de localización. Se usa aproximación normal con corrección de continuidad para admitir empates; el ajuste Holm considera las tres comparaciones.

Comparación Mediana de diferencias por bloque p ajustado Holm
T1 menos T2 -8.50 0,1066
T1 menos T3 -13.25 0,1066
T2 menos T3 -4.50 0,1066

Una mediana de diferencias no es necesariamente igual a la diferencia de medianas. No detectar significación después del ajuste no demuestra equivalencia entre formatos.

Ver observaciones potencialmente influyentes

La distancia de Cook orienta sobre cuánto podría influir una observación en el modelo. La referencia 4/n es exploratoria y no autoriza eliminar pacientes. Se revisan los registros y, si corresponde, se informa un análisis de sensibilidad.

Paciente Bloque Residuo_estandarizado Cook Revisar
DBCA_P09 B3 1.662 0.276 Revisar registro
DBCA_P10 B4 -1.582 0.250 Revisar registro
DBCA_P08 B3 -1.342 0.180 Sin señal según esta referencia
DBCA_P04 B2 1.302 0.169 Sin señal según esta referencia
DBCA_P06 B2 -1.282 0.164 Sin señal según esta referencia
DBCA_P13 B5 -1.221 0.149 Sin señal según esta referencia
DBCA_P11 B4 1.181 0.140 Sin señal según esta referencia
DBCA_P03 B1 1.061 0.113 Sin señal según esta referencia
DBCA_P18 B6 -0.981 0.096 Sin señal según esta referencia
DBCA_P01 B1 -0.981 0.096 Sin señal según esta referencia
DBCA_P14 B5 0.881 0.078 Sin señal según esta referencia
DBCA_P17 B6 0.581 0.034 Sin señal según esta referencia
DBCA_P12 B4 0.400 0.016 Sin señal según esta referencia
DBCA_P16 B6 0.400 0.016 Sin señal según esta referencia
DBCA_P15 B5 0.340 0.012 Sin señal según esta referencia
DBCA_P07 B3 -0.320 0.010 Sin señal según esta referencia
DBCA_P02 B1 -0.080 0.001 Sin señal según esta referencia
DBCA_P05 B2 -0.020 0.000 Sin señal según esta referencia
Ver el código de aleatorización y la configuración de R
set.seed(20261030)
B <- 9999L
F_permutado <- replicate(B, {
  m <- matriz
  for (j in seq_len(nrow(m))) m[j, ] <- sample(m[j, ])
  estadistico_F(m)
})
p_perm <- (1 + sum(F_permutado >= F_observado - 1e-10)) / (B + 1)
## R version 4.6.1 (2026-06-24 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
## 
## Matrix products: default
##   LAPACK version 3.12.1
## 
## locale:
## [1] LC_COLLATE=Spanish_Panama.utf8  LC_CTYPE=Spanish_Panama.utf8   
## [3] LC_MONETARY=Spanish_Panama.utf8 LC_NUMERIC=C                   
## [5] LC_TIME=Spanish_Panama.utf8    
## 
## time zone: America/Panama
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] vctrs_0.7.3        cli_3.6.6          knitr_1.52         rlang_1.3.0       
##  [5] xfun_0.62          generics_0.1.4     S7_0.2.2           jsonlite_2.0.0    
##  [9] labeling_0.4.3     glue_1.8.1         htmltools_0.5.9    sass_0.4.10       
## [13] scales_1.4.0       rmarkdown_2.32     grid_4.6.1         tibble_3.3.1      
## [17] evaluate_1.0.5     jquerylib_0.1.4    fastmap_1.2.0      yaml_2.3.12       
## [21] lifecycle_1.0.5    compiler_4.6.1     dplyr_1.2.1        RColorBrewer_1.1-3
## [25] pkgconfig_2.0.3    rstudioapi_0.19.0  farver_2.1.2       digest_0.6.39     
## [29] R6_2.6.1           tidyselect_1.2.1   pillar_1.11.1      magrittr_2.0.5    
## [33] bslib_0.12.0       withr_3.0.3        tools_4.6.1        gtable_0.3.6      
## [37] ggplot2_4.0.3      cachem_1.1.0

Este informe conserva los 18 registros y los procedimientos de Analisis_DBCA_Consentimiento.R, presentados en un formato resumido con explicaciones. Se recalcula al pulsar Knit y no necesita el script original ni una base externa. El código completo se consulta abriendo el archivo .rmd o mediante la descarga de código del HTML. Los resultados son didácticos y no demuestran eficacia clínica de ninguna modalidad.

LS0tCnRpdGxlOiAiQ29tcHJlbnNpw7NuIGRlbCBjb25zZW50aW1pZW50byBpbmZvcm1hZG8iCnN1YnRpdGxlOiAiVHJlcyBmb3JtYXRvcyBkZSBwcmVzZW50YWNpw7NuIGNvbXBhcmFkb3MgZW50cmUgcGFjaWVudGVzIGFncnVwYWRvcyBlbiBibG9xdWVzIgpkYXRlOiAiRWplbXBsbyBkaWTDoWN0aWNvIGNvbiBkYXRvcyBmaWN0aWNpb3MiCmxhbmc6IGVzCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IGZsYXRseQogICAgaGlnaGxpZ2h0OiB0YW5nbwogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6IDIKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBmYWxzZQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgc2VsZl9jb250YWluZWQ6IHRydWUKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBkZl9wcmludDoga2FibGUKICAgIG1hdGhqYXg6IG51bGwKLS0tCgo8IS0tCkFSQ0hJVk8gQVVUw5NOT01POiBubyBuZWNlc2l0YSBlbCBzY3JpcHQgLlIgbmkgYXJjaGl2b3MgZGUgZGF0b3MgZXh0ZXJub3MuCkd1YXJkZSBlbiBVVEYtOC4gQWJyYSBlbiBSU3R1ZGlvIHkgcHVsc2UgS25pdCA+IEtuaXQgdG8gSFRNTC4KClBSSU1FUiBVU086IGFudGVzIGRlIEtuaXQsIGVqZWN1dGUgZW4gbGEgY29uc29sYSBkZSBSOgpwYXF1ZXRlcyA8LSBjKCJybWFya2Rvd24iLCAia25pdHIiLCAiZ2dwbG90MiIpCmZhbHRhbnRlcyA8LSBwYXF1ZXRlc1shdmFwcGx5KHBhcXVldGVzLCByZXF1aXJlTmFtZXNwYWNlLCBsb2dpY2FsKDEpLCBxdWlldGx5ID0gVFJVRSldCmlmIChsZW5ndGgoZmFsdGFudGVzKSkgaW5zdGFsbC5wYWNrYWdlcyhmYWx0YW50ZXMsIHJlcG9zID0gImh0dHBzOi8vY2xvdWQuci1wcm9qZWN0Lm9yZyIpCgpEZXNwdcOpcyBwdWxzZSBLbml0LiBUYW1iacOpbiBwdWVkZSBlamVjdXRhcjoKcm1hcmtkb3duOjpyZW5kZXIoIkluZm9ybWVfREJDQV9Db25zZW50aW1pZW50by5ybWQiLCBlbmNvZGluZyA9ICJVVEYtOCIpCgpSU3R1ZGlvIG5vcm1hbG1lbnRlIGluY2x1eWUgUGFuZG9jLiBQYXJhIGNvbXByb2JhcmxvOgpybWFya2Rvd246OnBhbmRvY19hdmFpbGFibGUoKQotLT4KCmBgYHtyIGNvbmZpZ3VyYWNpb24sIGluY2x1ZGU9RkFMU0V9CnBhcXVldGVzIDwtIGMoImtuaXRyIiwgImdncGxvdDIiKQpmb3IgKHAgaW4gcGFxdWV0ZXMpIHsKICBpZiAoIXJlcXVpcmVOYW1lc3BhY2UocCwgcXVpZXRseSA9IFRSVUUpKSB7CiAgICB0cnlDYXRjaCgKICAgICAgdXRpbHM6Omluc3RhbGwucGFja2FnZXMocCwgcmVwb3MgPSAiaHR0cHM6Ly9jbG91ZC5yLXByb2plY3Qub3JnIiksCiAgICAgIGVycm9yID0gZnVuY3Rpb24oZSkgbWVzc2FnZShjb25kaXRpb25NZXNzYWdlKGUpKQogICAgKQogIH0KICBpZiAoIXJlcXVpcmVOYW1lc3BhY2UocCwgcXVpZXRseSA9IFRSVUUpKSB7CiAgICBzdG9wKCJGYWx0YSBlbCBwYXF1ZXRlICIsIHAsCiAgICAgICAgICIuIFJldmlzZSBJbnRlcm5ldCwgcGVybWlzb3MgZGUgaW5zdGFsYWNpw7NuIHkgdmVyc2nDs24gZGUgUi4iKQogIH0KfQprbml0cjo6b3B0c19jaHVuayRzZXQoCiAgZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBUUlVFLCBlcnJvciA9IEZBTFNFLAogIGZpZy53aWR0aCA9IDgsIGZpZy5oZWlnaHQgPSA0LjgsIGRwaSA9IDE2MCwKICBmaWcuYWxpZ24gPSAiY2VudGVyIiwgb3V0LndpZHRoID0gIjEwMCUiLCBjYWNoZSA9IEZBTFNFCikKb3B0aW9ucyh3aWR0aCA9IDk1KQphbHBoYSA8LSAwLjA1CmZtdCA8LSBmdW5jdGlvbih4LCBkID0gMikgZm9ybWF0Qyh4LCBmb3JtYXQgPSAiZiIsIGRpZ2l0cyA9IGQsIGRlY2ltYWwubWFyayA9ICIsIikKZnAgPC0gZnVuY3Rpb24oeCkgaWZlbHNlKHggPCAwLjAwMSwgIjwgMCwwMDEiLCBmbXQoeCwgNCkpCmNvbG9yZXMgPC0gYyhUMSA9ICIjNjM3NThBIiwgVDIgPSAiIzE1OUE5NCIsIFQzID0gIiM1MzY5QjAiKQpldGlxdWV0YXMgPC0gYyhUMSA9ICJUMSDCtyBUZXh0byBsZWdhbCIsIFQyID0gIlQyIMK3IEluZm9ncmFmw61hIGltcHJlc2EiLAogICAgICAgICAgICAgICBUMyA9ICJUMyDCtyBEaWdpdGFsIHkgZmlybWEiKQp0ZW1hIDwtIGdncGxvdDI6OnRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTIpICsKICBnZ3Bsb3QyOjp0aGVtZSgKICAgIHBhbmVsLmdyaWQubWlub3IgPSBnZ3Bsb3QyOjplbGVtZW50X2JsYW5rKCksCiAgICBwbG90LnRpdGxlID0gZ2dwbG90Mjo6ZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNSwgY29sb3VyID0gIiMxODMzNDkiKSwKICAgIHBsb3Quc3VidGl0bGUgPSBnZ3Bsb3QyOjplbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBjb2xvdXIgPSAiIzUyNjQ3NyIpLAogICAgYXhpcy50aXRsZSA9IGdncGxvdDI6OmVsZW1lbnRfdGV4dChjb2xvdXIgPSAiIzMzNDg1QyIpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgcGxvdC5tYXJnaW4gPSBnZ3Bsb3QyOjptYXJnaW4oMTIsIDE2LCAxMiwgMTApCiAgKQpgYGAKCjxzdHlsZT4KYm9keSB7IGNvbG9yOiAjMjYzYjRkOyBiYWNrZ3JvdW5kOiAjZmZmOyBmb250LWZhbWlseTogIlNlZ29lIFVJIiwgQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTZweDsgbGluZS1oZWlnaHQ6IDEuNzsgfQoubWFpbi1jb250YWluZXIgeyBtYXgtd2lkdGg6IDExMjBweDsgfQpoMSwgaDIsIGgzIHsgY29sb3I6ICMxODMzNDk7IGZvbnQtd2VpZ2h0OiA2NTA7IGxpbmUtaGVpZ2h0OiAxLjI1OyB9CmgxLnRpdGxlIHsgZm9udC1zaXplOiAzN3B4OyBtYXJnaW4tdG9wOiAyOHB4OyBsZXR0ZXItc3BhY2luZzogLS44cHg7IH0KaDIgeyBmb250LXNpemU6IDI1cHg7IG1hcmdpbi10b3A6IDM2cHg7IH0KaDMgeyBmb250LXNpemU6IDIwcHg7IG1hcmdpbi10b3A6IDI0cHg7IH0KLnN1YnRpdGxlIHsgY29sb3I6ICM1MjY0Nzc7IGZvbnQtc2l6ZTogMTlweDsgbGluZS1oZWlnaHQ6IDEuNDU7IH0KLmRhdGUgeyBjb2xvcjogIzY1Nzg4OTsgZm9udC1zaXplOiAxNHB4OyB9CnAgeyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9CmEgeyBjb2xvcjogIzExN2U3OTsgfQoudGFibGUgeyB3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDAgMjRweDsgZm9udC1zaXplOiAxNHB4OyB9Ci50YWJsZSB0aCB7IGJhY2tncm91bmQ6ICMxODMzNDk7IGNvbG9yOiAjZmZmOyBwYWRkaW5nOiAxMnB4ICFpbXBvcnRhbnQ7IGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OyB9Ci50YWJsZSB0ZCB7IHBhZGRpbmc6IDExcHggMTJweCAhaW1wb3J0YW50OyBib3JkZXItdG9wOiAxcHggc29saWQgI2U0ZWFmMCAhaW1wb3J0YW50OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7IH0KLnRhYmxlIHRib2R5IHRyOm50aC1jaGlsZChldmVuKSB7IGJhY2tncm91bmQ6ICNmM2Y3ZmE7IH0KLmNhcHRpb24geyBjb2xvcjogIzY1Nzg4OTsgZm9udC1zaXplOiAxM3B4OyBtYXJnaW4tdG9wOiA4cHg7IH0KLnRvY2lmeSB7IGZvbnQtc2l6ZTogMTNweDsgYm9yZGVyLWNvbG9yOiAjZTRlYWYwOyBib3JkZXItcmFkaXVzOiA2cHg7IH0KLnRvY2lmeSAuYWN0aXZlIHsgYmFja2dyb3VuZDogIzExN2U3OTsgfQpwcmUgeyBib3JkZXI6IDFweCBzb2xpZCAjZTRlYWYwOyBiYWNrZ3JvdW5kOiAjZjZmOGZhOyBib3JkZXItcmFkaXVzOiA1cHg7IGZvbnQtc2l6ZTogMTJweDsgfQpkZXRhaWxzIHsgbWFyZ2luOiAyMHB4IDA7IHBhZGRpbmc6IDE1cHggMDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZmU3ZWQ7IH0Kc3VtbWFyeSB7IGN1cnNvcjogcG9pbnRlcjsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICMxMTdlNzk7IH0KQG1lZGlhIHByaW50IHsgI1RPQywgLmNvZGUtZm9sZGluZy1idG4sIC5jb2RlLXRvb2xzIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IGJvZHkgeyBmb250LXNpemU6IDExcHQ7IH0gfQo8L3N0eWxlPgoKYGBge3IgZGF0b3MteS1hbmFsaXNpcywgaW5jbHVkZT1GQUxTRX0KZGF0b3NfZGJjYSA8LSBkYXRhLmZyYW1lKAogIHBhY2llbnRlID0gc3ByaW50ZigiREJDQV9QJTAyZCIsIDE6MTgpLAogIGJsb3F1ZSA9IGZhY3RvcihyZXAocGFzdGUwKCJCIiwgMTo2KSwgZWFjaCA9IDMpKSwKICBhbGZhYmV0aXphY2lvbl9pbmljaWFsID0gYygzNCwzNSwzNyw0Myw0NSw0Niw1Myw1NSw1NiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjMsNjUsNjYsNzMsNzUsNzYsODMsODUsODYpLAogIHRyYXRhbWllbnRvID0gZmFjdG9yKGMoIlQyIiwiVDEiLCJUMyIsIlQzIiwiVDIiLCJUMSIsCiAgICAiVDEiLCJUMyIsIlQyIiwiVDIiLCJUMyIsIlQxIiwiVDMiLCJUMSIsIlQyIiwiVDEiLCJUMiIsIlQzIiksCiAgICBsZXZlbHMgPSBjKCJUMSIsIlQyIiwiVDMiKSksCiAgY29tcHJlbnNpb24gPSBjKDY1LjUsNTgsNzMsNzkuNSw3Myw2Mi41LDY4LDgwLDc5LjUsCiAgICAgICAgICAgICAgICAgIDgwLjUsODksNzQuNSw5MC41LDgwLDg4LDgyLjUsOTEuNSw5NCkKKQpzdG9waWZub3QobnJvdyhkYXRvc19kYmNhKSA9PSAxOCwgIWFueU5BKGRhdG9zX2RiY2EpLAogICFhbnlEdXBsaWNhdGVkKGRhdG9zX2RiY2EkcGFjaWVudGUpLAogIGFsbCh3aXRoKGRhdG9zX2RiY2EsIHRhYmxlKGJsb3F1ZSwgdHJhdGFtaWVudG8pKSA9PSAxKSwKICBhbGwoZGF0b3NfZGJjYSRjb21wcmVuc2lvbiA+PSAwICYgZGF0b3NfZGJjYSRjb21wcmVuc2lvbiA8PSAxMDApKQptb2RlbG8gPC0gc3RhdHM6OmFvdihjb21wcmVuc2lvbiB+IGJsb3F1ZSArIHRyYXRhbWllbnRvLCBkYXRhID0gZGF0b3NfZGJjYSkKYW4gPC0gc3VtbWFyeShtb2RlbG8pW1sxXV0Kcm93bmFtZXMoYW4pIDwtIHRyaW13cyhyb3duYW1lcyhhbikpCnJlcyA8LSBzdGF0czo6cmVzaWR1YWxzKG1vZGVsbykKc2ggPC0gc3RhdHM6OnNoYXBpcm8udGVzdChyZXMpCmRhdG9zX2RiY2EkcmVzaWR1b19tb2RlbG8gPC0gcmVzCiMgRXN0b3MgZG9zIGRpYWduw7NzdGljb3Mgc29uIGV4cGxvcmF0b3Jpb3M6IGVsIGFqdXN0ZSByZWxhY2lvbmEgbG9zIHJlc2lkdW9zLgpiYSA8LSBzdGF0czo6YmFydGxldHQudGVzdChyZXNpZHVvX21vZGVsbyB+IHRyYXRhbWllbnRvLCBkYXRhID0gZGF0b3NfZGJjYSkKeiA8LSB3aXRoKGRhdG9zX2RiY2EsIGFicyhyZXNpZHVvX21vZGVsbyAtCiAgYXZlKHJlc2lkdW9fbW9kZWxvLCB0cmF0YW1pZW50bywgRlVOID0gc3RhdHM6Om1lZGlhbikpKQpsZXYgPC0gc3RhdHM6OmFub3ZhKHN0YXRzOjpsbSh6IH4gdHJhdGFtaWVudG8sIGRhdGEgPSBkYXRvc19kYmNhKSkKdHUgPC0gc3RhdHM6OlR1a2V5SFNEKG1vZGVsbywgInRyYXRhbWllbnRvIiwgY29uZi5sZXZlbCA9IDAuOTUpJHRyYXRhbWllbnRvCmZyIDwtIHN0YXRzOjpmcmllZG1hbi50ZXN0KGNvbXByZW5zaW9uIH4gdHJhdGFtaWVudG8gfCBibG9xdWUsIGRhdGEgPSBkYXRvc19kYmNhKQptYXRyaXogPC0gd2l0aChkYXRvc19kYmNhLCB0YXBwbHkoY29tcHJlbnNpb24sIGxpc3QoYmxvcXVlLCB0cmF0YW1pZW50byksIG1lYW4pKQpzdG9waWZub3QoYWxsKGRpbShtYXRyaXopID09IGMoNiwgMykpLCAhYW55TkEobWF0cml6KSkKVyA8LSB1bm5hbWUoZnIkc3RhdGlzdGljKSAvIChucm93KG1hdHJpeikgKiAobmNvbChtYXRyaXopIC0gMSkpClNTX3RyIDwtIGFuWyJ0cmF0YW1pZW50byIsICJTdW0gU3EiXQpTU19lIDwtIGFuWyJSZXNpZHVhbHMiLCAiU3VtIFNxIl0KZXRhX3BhcmNpYWwgPC0gU1NfdHIgLyAoU1NfdHIgKyBTU19lKQpyZXN1bWVuIDwtIGRvLmNhbGwocmJpbmQsIGxhcHBseShsZXZlbHMoZGF0b3NfZGJjYSR0cmF0YW1pZW50byksIGZ1bmN0aW9uKHQpIHsKICB4IDwtIGRhdG9zX2RiY2EkY29tcHJlbnNpb25bZGF0b3NfZGJjYSR0cmF0YW1pZW50byA9PSB0XQogIGRhdGEuZnJhbWUoVHJhdGFtaWVudG8gPSB1bm5hbWUoZXRpcXVldGFzW3RdKSwgbiA9IGxlbmd0aCh4KSwKICAgIE1lZGlhID0gbWVhbih4KSwgREUgPSBzdGF0czo6c2QoeCksIE1lZGlhbmEgPSBzdGF0czo6bWVkaWFuKHgpLAogICAgTWluaW1vID0gbWluKHgpLCBNYXhpbW8gPSBtYXgoeCkpCn0pKQpjb21wYXJhY2lvbmVzIDwtIGRhdGEuZnJhbWUoQ29tcGFyYWNpb24gPSByb3duYW1lcyh0dSksCiAgRGlmZXJlbmNpYSA9IHR1WywgImRpZmYiXSwgTEkgPSB0dVssICJsd3IiXSwgTFMgPSB0dVssICJ1cHIiXSwKICBwX2FqdXN0YWRvID0gdHVbLCAicCBhZGoiXSwgcm93Lm5hbWVzID0gTlVMTCkKY29tcGFyYWNpb25lcyRSZXN1bHRhZG8gPC0gaWZlbHNlKGNvbXBhcmFjaW9uZXMkcF9hanVzdGFkbyA8IGFscGhhLAogICJEaWZlcmVuY2lhIGRldGVjdGFkYSIsICJTaW4gZXZpZGVuY2lhIHN1ZmljaWVudGUiKQpkaWFnIDwtIGRhdGEuZnJhbWUoQWp1c3RhZG8gPSBzdGF0czo6Zml0dGVkKG1vZGVsbyksIFJlc2lkdW8gPSByZXMsCiAgRXN0YW5kYXJpemFkbyA9IHN0YXRzOjpyc3RhbmRhcmQobW9kZWxvKSwgQ29vayA9IHN0YXRzOjpjb29rcy5kaXN0YW5jZShtb2RlbG8pKQpwYXJlcyA8LSBjb21ibihjb2xuYW1lcyhtYXRyaXopLCAyLCBzaW1wbGlmeSA9IEZBTFNFKQpwb3N0X2ZyIDwtIGRvLmNhbGwocmJpbmQsIGxhcHBseShwYXJlcywgZnVuY3Rpb24ocCkgewogIGRpZmVyZW5jaWEgPC0gbWF0cml6WywgcFsxXV0gLSBtYXRyaXpbLCBwWzJdXQogIHRlc3QgPC0gc3RhdHM6OndpbGNveC50ZXN0KGRpZmVyZW5jaWEsIG11ID0gMCwgZXhhY3QgPSBGQUxTRSwgY29ycmVjdCA9IFRSVUUpCiAgZGF0YS5mcmFtZShDb21wYXJhY2lvbiA9IHBhc3RlKHAsIGNvbGxhcHNlID0gIiBtZW5vcyAiKSwKICAgIE1lZGlhbmFfZGlmZXJlbmNpYSA9IHN0YXRzOjptZWRpYW4oZGlmZXJlbmNpYSksIHAgPSB0ZXN0JHAudmFsdWUpCn0pKQpwb3N0X2ZyJHBfSG9sbSA8LSBzdGF0czo6cC5hZGp1c3QocG9zdF9mciRwLCBtZXRob2QgPSAiaG9sbSIpCmVzdGFkaXN0aWNvX0YgPC0gZnVuY3Rpb24obSkgewogIGIgPC0gbnJvdyhtKTsgayA8LSBuY29sKG0pOyBtZWRpYSA8LSBtZWFuKG0pCiAgc3NfdHIgPC0gYiAqIHN1bSgoY29sTWVhbnMobSkgLSBtZWRpYSleMikKICBzc19ibCA8LSBrICogc3VtKChyb3dNZWFucyhtKSAtIG1lZGlhKV4yKQogIHNzX3RvdGFsIDwtIHN1bSgobSAtIG1lZGlhKV4yKQogIHNzX2Vycm9yIDwtIG1heCgwLCBzc190b3RhbCAtIHNzX3RyIC0gc3NfYmwpCiAgaWYgKHNzX2Vycm9yIDwgMWUtMTIpIHJldHVybihJbmYpCiAgKHNzX3RyIC8gKGsgLSAxKSkgLyAoc3NfZXJyb3IgLyAoKGIgLSAxKSAqIChrIC0gMSkpKQp9CkZfb2JzZXJ2YWRvIDwtIGVzdGFkaXN0aWNvX0YobWF0cml6KQpzdG9waWZub3QoaXNUUlVFKGFsbC5lcXVhbCh1bm5hbWUoRl9vYnNlcnZhZG8pLAogIHVubmFtZShhblsidHJhdGFtaWVudG8iLCAiRiB2YWx1ZSJdKSwgdG9sZXJhbmNlID0gMWUtOCkpKQpzZXQuc2VlZCgyMDI2MTAzMCkKQiA8LSA5OTk5TApGX3Blcm11dGFkbyA8LSByZXBsaWNhdGUoQiwgewogIG0gPC0gbWF0cml6CiAgZm9yIChqIGluIHNlcV9sZW4obnJvdyhtKSkpIG1baiwgXSA8LSBzYW1wbGUobVtqLCBdKQogIGVzdGFkaXN0aWNvX0YobSkKfSkKZXh0cmVtb3MgPC0gc3VtKEZfcGVybXV0YWRvID49IEZfb2JzZXJ2YWRvIC0gMWUtMTApCnBfcGVybSA8LSAoMSArIGV4dHJlbW9zKSAvIChCICsgMSkKYGBgCgojIFF1w6kgc2UgZXN0dWRpw7MKCioqUHJlZ3VudGEgZGUgaW52ZXN0aWdhY2nDs246Kiogwr9jYW1iaWEgbGEgY29tcHJlbnNpw7NuIHByb21lZGlvIGRlbCBwYWNpZW50ZSBzb2JyZSBzdSBjaXJ1Z8OtYSBkZSByZWVtcGxhem8gdG90YWwgZGUgcm9kaWxsYSBzZWfDum4gZWwgZm9ybWF0byBkZSBjb25zZW50aW1pZW50bywgY29uc2lkZXJhbmRvIGxhcyBkaWZlcmVuY2lhcyBpbmljaWFsZXMgZW50cmUgYmxvcXVlcz8KClNlIGNvbXBhcmFuICoqMTggcGFjaWVudGVzIGRpc3RyaWJ1aWRvcyBlbiBzZWlzIGJsb3F1ZXMgZGUgdHJlcyoqLiBDYWRhIGJsb3F1ZSByZcO6bmUgYSBwZXJzb25hcyBjb24gYWxmYWJldGl6YWNpw7NuIGVuIHNhbHVkIGluaWNpYWwgc2VtZWphbnRlLiBEZW50cm8gZGUgY2FkYSBibG9xdWUsIHVuYSBwZXJzb25hIHJlY2liZSBUMSwgb3RyYSBUMiB5IG90cmEgVDMgbWVkaWFudGUgZWwgc29ydGVvIHF1ZSByZXByZXNlbnRhIGVzdGUgZWplbXBsby4KCnwgVHJhdGFtaWVudG8gfCBNb2RhbGlkYWQgfAp8Oi0tfDotLXwKfCAqKlQxIMK3IENvbnRyb2wqKiB8IEZvcm1hdG8gdHJhZGljaW9uYWwgbGVnYWwgeSB0ZXh0dWFsLiB8CnwgKipUMioqIHwgRG9jdW1lbnRvIHNpbXBsaWZpY2FkbyBjb24gaW5mb2dyYWbDrWFzIGbDrXNpY2FzIGltcHJlc2FzLiB8CnwgKipUMyoqIHwgQ29uc2VudGltaWVudG8gZGlnaXRhbCBjb24gaW5mb2dyYWbDrWFzIHkgZmlybWEgZWxlY3Ryw7NuaWNhLiB8CgpMYSByZXNwdWVzdGEgZXMgdW4gcHVudGFqZSBwb3N0LWNvbnNlbnRpbWllbnRvIGRlICoqMCBhIDEwMCoqLiBVbiB2YWxvciBtYXlvciByZXByZXNlbnRhIG1heW9yIGNvbXByZW5zacOzbi4gVG9kb3MgbG9zIGRhdG9zIHNvbiBmaWN0aWNpb3M6IG5vIHByb2NlZGVuIGRlbCBCSUNFUCBuaSBkZSBvdHJvIGN1ZXN0aW9uYXJpbyBhcGxpY2Fkby4gRW4gdW5hIGludmVzdGlnYWNpw7NuIHJlYWwgZGViZSB1dGlsaXphcnNlIHVuIGluc3RydW1lbnRvIHZhbGlkYWRvIHBhcmEgZWwgaWRpb21hLCBwb2JsYWNpw7NuIHkgY29udGV4dG8gcXVpcsO6cmdpY28sIGNvbiBzdXMgcmVnbGFzIGRlIHB1bnR1YWNpw7NuLgoKKipSZXN1bHRhZG8gcHJpbmNpcGFsIGRlbCBlamVtcGxvLioqIEFsIGNvbnNpZGVyYXIgbG9zIGJsb3F1ZXMsIGVsIEFOT1ZBIGByIGlmIChhblsidHJhdGFtaWVudG8iLCAiUHIoPkYpIl0gPCBhbHBoYSkgImRldGVjdGEgZGlmZXJlbmNpYXMiIGVsc2UgIm5vIGRldGVjdGEgZGlmZXJlbmNpYXMiYCBlbnRyZSB0cmF0YW1pZW50b3M6IEYgPSBgciBmbXQoYW5bInRyYXRhbWllbnRvIiwgIkYgdmFsdWUiXSwgMylgIHkgcCBgciBpZiAoYW5bInRyYXRhbWllbnRvIiwgIlByKD5GKSJdIDwgMC4wMDEpICI8IDAsMDAxIiBlbHNlIHBhc3RlKCI9IiwgZnAoYW5bInRyYXRhbWllbnRvIiwgIlByKD5GKSJdKSlgLiBMYSBtYWduaXR1ZCBkZSBjYWRhIGRpZmVyZW5jaWEgc2UgcHJlc2VudGEgbWVkaWFudGUgaW50ZXJ2YWxvcyBkZSBUdWtleS4gRXN0byBkZXNjcmliZSBlbCBlamVtcGxvIHkgbm8gZGVtdWVzdHJhIGVmaWNhY2lhIGNsw61uaWNhIHJlYWwuCgojIFBvciBxdcOpIHNlIHV0aWxpemFyb24gYmxvcXVlcwoKVW5hIHBlcnNvbmEgZmFtaWxpYXJpemFkYSBjb24gaW5mb3JtYWNpw7NuIGRlIHNhbHVkIHBvZHLDrWEgb2J0ZW5lciB1biBwdW50YWplIGFsdG8gY29uIGN1YWxxdWllcmEgZGUgbG9zIGZvcm1hdG9zLiBTaSBlc2FzIGRpZmVyZW5jaWFzIGluaWNpYWxlcyBzZSBtZXpjbGFuIGNvbiBsYXMgbW9kYWxpZGFkZXMsIHB1ZWRlIHNlciBtw6FzIGRpZsOtY2lsIGRpc3Rpbmd1aXIgZWwgZWZlY3RvIGRlbCBmb3JtYXRvLiBFbCBEQkNBIG9yZ2FuaXphIGxhIGNvbXBhcmFjacOzbiBlbnRyZSBwZXJzb25hcyBpbmljaWFsbWVudGUgc2VtZWphbnRlcyB5IHNlcGFyYSBlc3RhZMOtc3RpY2FtZW50ZSBsYSB2YXJpYWNpw7NuIGVudHJlIGJsb3F1ZXMuCgoqKkxvcyBibG9xdWVzIHNlIGZvcm1hbiBhbnRlcyBkZSBwcmVzZW50YXIgZWwgY29uc2VudGltaWVudG8qKiwgdXNhbmRvIHVuYSBjYXJhY3RlcsOtc3RpY2EgaW5pY2lhbCwgbm8gZWwgcHVudGFqZSBmaW5hbC4gRW4gZXN0ZSBlamVtcGxvLCBCMSByZcO6bmUgcHVudGFqZXMgaW5pY2lhbGVzIGRlIDM0IGEgMzcgeSBCNiBkZSA4MyBhIDg2LiBMYSBlc2NhbGEgaW5pY2lhbCBlcyBmaWN0aWNpYSB5IG5vIGRlYmUgaW50ZXJwcmV0YXJzZSBjb21vIHVuIGluc3RydW1lbnRvIHZhbGlkYWRvIG5pIGNvbW8gdW5hIGNhdGVnb3LDrWEgY2zDrW5pY2EuCgpgYGB7ciB0YWJsYS1ibG9xdWVzfQp0YWJsYV9ibG9xdWVzIDwtIGRhdGEuZnJhbWUoCiAgQmxvcXVlID0gcm93bmFtZXMobWF0cml6KSwKICBBbGZhYmV0aXphY2lvbl9taW5pbWEgPSBhcy5udW1lcmljKHRhcHBseShkYXRvc19kYmNhJGFsZmFiZXRpemFjaW9uX2luaWNpYWwsIGRhdG9zX2RiY2EkYmxvcXVlLCBtaW4pKSwKICBBbGZhYmV0aXphY2lvbl9tYXhpbWEgPSBhcy5udW1lcmljKHRhcHBseShkYXRvc19kYmNhJGFsZmFiZXRpemFjaW9uX2luaWNpYWwsIGRhdG9zX2RiY2EkYmxvcXVlLCBtYXgpKSwKICBUMSA9IG1hdHJpelssICJUMSJdLCBUMiA9IG1hdHJpelssICJUMiJdLCBUMyA9IG1hdHJpelssICJUMyJdLCByb3cubmFtZXMgPSBOVUxMKQprbml0cjo6a2FibGUodGFibGFfYmxvcXVlcywgZGlnaXRzID0gMSwgcm93Lm5hbWVzID0gRkFMU0UsCiAgY29sLm5hbWVzID0gYygiQmxvcXVlIiwgIkluaWNpYWwgbcOtbmltbyIsICJJbmljaWFsIG3DoXhpbW8iLCAiQ29tcHJlbnNpw7NuIFQxIiwgIkNvbXByZW5zacOzbiBUMiIsICJDb21wcmVuc2nDs24gVDMiKSwKICBjYXB0aW9uID0gIlRhYmxhIDEuIENhZGEgZmlsYSBjb250aWVuZSB0cmVzIHBhY2llbnRlcyBkaXN0aW50b3MsIHVubyBwb3IgbW9kYWxpZGFkLiIpCmBgYAoKTm8gZXMgdW4gZXN0dWRpbyBlbiBlbCBxdWUgbGEgbWlzbWEgcGVyc29uYSBwcnVlYmEgdHJlcyBjb25zZW50aW1pZW50b3MuIExhcyBjb21wYXJhY2lvbmVzIHNlIHJlbGFjaW9uYW4gKipwb3IgcGVydGVuZWNlciBhbCBtaXNtbyBibG9xdWUqKiwgbm8gcG9yIGNvcnJlc3BvbmRlciBhbCBtaXNtbyBwYWNpZW50ZS4KCiMgQ8OzbW8gc2UgZGlzdHJpYnV5ZXJvbiBsb3MgcHVudGFqZXMKCmBgYHtyIHRhYmxhLWRlc2NyaXB0aXZhfQprbml0cjo6a2FibGUocmVzdW1lbiwgZGlnaXRzID0gMiwgcm93Lm5hbWVzID0gRkFMU0UsCiAgY29sLm5hbWVzID0gYygiTW9kYWxpZGFkIiwgIlBhY2llbnRlcyIsICJNZWRpYSIsICJEZXN2LiBlc3TDoW5kYXIiLCAiTWVkaWFuYSIsICJNw61uaW1vIiwgIk3DoXhpbW8iKSwKICBjYXB0aW9uID0gIlRhYmxhIDIuIERlc2NyaXBjacOzbiBkZSBsb3MgcHVudGFqZXMgc2luIHJldGlyYXIgZWwgZWZlY3RvIGRlbCBibG9xdWUuIikKYGBgCgpMYSAqKm1lZGlhKiogZXMgZWwgcHJvbWVkaW8gZGUgY2FkYSBtb2RhbGlkYWQuIExhICoqbWVkaWFuYSoqIGVzIGVsIGNlbnRybyBkZSBzdXMgcHVudGFqZXMgb3JkZW5hZG9zLiBMYSAqKmRlc3ZpYWNpw7NuIGVzdMOhbmRhcioqIHJlc3VtZSBsYSBkaXNwZXJzacOzbiBlbnRyZSBwYWNpZW50ZXMsIGluY2x1aWRhIGFxdcOtIGxhIHZhcmlhY2nDs24gcmVsYWNpb25hZGEgY29uIGxvcyBibG9xdWVzLiBQb3IgZXNvLCBsYSBkaXNwZXJzacOzbiBkZSBlc3RhIHRhYmxhIG5vIGVxdWl2YWxlIGFsIGVycm9yIHJlc2lkdWFsIGRlbCBtb2RlbG8gYWp1c3RhZG8uCgpgYGB7ciBib3hwbG90LWJsb3F1ZXMsIGZpZy5jYXA9IkZpZ3VyYSAxLiBQdW50YWplcyBwb3IgbW9kYWxpZGFkLiBMYXMgbMOtbmVhcyB5IGNvbG9yZXMgdW5lbiBhIHRyZXMgcGFjaWVudGVzIGRpZmVyZW50ZXMgZGVsIG1pc21vIGJsb3F1ZS4iLCBmaWcuaGVpZ2h0PTUuM30KZ2dwbG90Mjo6Z2dwbG90KGRhdG9zX2RiY2EsIGdncGxvdDI6OmFlcyh0cmF0YW1pZW50bywgY29tcHJlbnNpb24pKSArCiAgZ2dwbG90Mjo6Z2VvbV9ib3hwbG90KGdncGxvdDI6OmFlcyhmaWxsID0gdHJhdGFtaWVudG8pLAogICAgd2lkdGggPSAwLjQ4LCBhbHBoYSA9IDAuMjUsIG91dGxpZXIuc2hhcGUgPSBOQSkgKwogIGdncGxvdDI6Omdlb21fbGluZShnZ3Bsb3QyOjphZXMoZ3JvdXAgPSBibG9xdWUsIGNvbG91ciA9IGJsb3F1ZSksIGFscGhhID0gMC43MikgKwogIGdncGxvdDI6Omdlb21fcG9pbnQoZ2dwbG90Mjo6YWVzKGNvbG91ciA9IGJsb3F1ZSksIHNpemUgPSAyLjgpICsKICBnZ3Bsb3QyOjpzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xvcmVzKSArCiAgZ2dwbG90Mjo6c2NhbGVfY29sb3VyX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdncGxvdDI6OnNjYWxlX3hfZGlzY3JldGUobGFiZWxzID0gZXRpcXVldGFzKSArCiAgZ2dwbG90Mjo6Y29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDEwMCkpICsgdGVtYSArCiAgZ2dwbG90Mjo6dGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBnZ3Bsb3QyOjpndWlkZXMoZmlsbCA9ICJub25lIikgKwogIGdncGxvdDI6OmxhYnModGl0bGUgPSAiQ29tcGFyYXIgZm9ybWF0b3MgZW50cmUgcGFjaWVudGVzIGRlIG5pdmVsIGluaWNpYWwgcGFyZWNpZG8iLAogICAgc3VidGl0bGUgPSAiTGFzIGNhamFzIHJlc3VtZW4gbW9kYWxpZGFkZXM7IGxhcyBsw61uZWFzIG11ZXN0cmFuIGxhIGNvbXBhcmFjacOzbiBwb3IgYmxvcXVlIiwKICAgIHggPSBOVUxMLCB5ID0gIkNvbXByZW5zacOzbiBkZSAwIGEgMTAwIiwgY29sb3VyID0gIkJsb3F1ZSIpCmBgYAoKKipDw7NtbyBsZWVyIGVsIGdyw6FmaWNvLioqIENhZGEgcHVudG8gZXMgdW5hIHBlcnNvbmEuIExhIGzDrW5lYSBjZW50cmFsIGRlIGNhZGEgY2FqYSBlcyBsYSBtZWRpYW5hIHkgbGEgY2FqYSBjb250aWVuZSBsYSBtaXRhZCBjZW50cmFsIGRlIGxvcyBwdW50YWplcy4gTG9zIGJpZ290ZXMgbGxlZ2FuIGEgbG9zIHZhbG9yZXMgb2JzZXJ2YWRvcyBkZW50cm8gZGUgMSw1IHJhbmdvcyBpbnRlcmN1YXJ0w61saWNvcyBkZSBsYSBjYWphOyB0b2RvcyBsb3MgcHVudG9zIHNpZ3VlbiB2aXNpYmxlcy4KCioqUXXDqSBhcG9ydGFuIGxhcyBsw61uZWFzLioqIFBlcm1pdGVuIHNlZ3VpciBhIGNhZGEgYmxvcXVlIGEgdHJhdsOpcyBkZSBUMSwgVDIgeSBUMy4gVW5hIGzDrW5lYSBhc2NlbmRlbnRlIGluZGljYSBxdWUgbGFzIHBlcnNvbmFzIGRlIGVzZSBibG9xdWUgb2J0dXZpZXJvbiBwdW50YWplcyBtYXlvcmVzIGNvbiBsYXMgbW9kYWxpZGFkZXMgc2l0dWFkYXMgYSBsYSBkZXJlY2hhLiBObyByZXByZXNlbnRhIGxhIG1lam9yw61hIGRlIHVuYSBtaXNtYSBwZXJzb25hIG5pIHVuYSBldm9sdWNpw7NuIGVuIGVsIHRpZW1wby4KCioqUXXDqSBzZSBvYnNlcnZhLioqIEVuIGVzdG9zIGRhdG9zLCBsb3Mgc2VpcyBibG9xdWVzIG1hbnRpZW5lbiBlbCBvcmRlbiBUMyA+IFQyID4gVDEuIFRhbWJpw6luIGhheSBkaWZlcmVuY2lhcyB2ZXJ0aWNhbGVzIGVudHJlIGJsb3F1ZXMuIEF1bnF1ZSBsYXMgY2FqYXMgc2Ugc3VwZXJwb25lbiwgbGEgY29tcGFyYWNpw7NuIGRlbnRybyBkZSBjYWRhIGJsb3F1ZSBlcyBjb25zaXN0ZW50ZS4gUG9yIGVzbyBzZSB1dGlsaXphIGVsIGFuw6FsaXNpcyBhanVzdGFkbyB5IG5vIHNlIGRlY2lkZSBlbCByZXN1bHRhZG8gc29sYW1lbnRlIG1pcmFuZG8gbGFzIGNhamFzLgoKIyBRdcOpIGRpZmVyZW5jaWFzIGRldGVjdMOzIGVsIGFuw6FsaXNpcwoKIyMgQ29tcGFyYWNpw7NuIGdsb2JhbCBjb24gQU5PVkEKCkVsIG1vZGVsbyBzZXBhcmEgbGEgY29tcHJlbnNpw7NuIG9ic2VydmFkYSBlbiAqKm5pdmVsIGdlbmVyYWwsIGVmZWN0byBkZWwgYmxvcXVlLCBlZmVjdG8gZGVsIHRyYXRhbWllbnRvIHkgZXJyb3IgcmVzdGFudGUqKi4gTGEgaGlww7N0ZXNpcyBwcmluY2lwYWwgcGxhbnRlYSBxdWUgbGFzIHRyZXMgbWVkaWFzIGRlIHRyYXRhbWllbnRvIHNvbiBpZ3VhbGVzIGRlc3B1w6lzIGRlIGNvbnNpZGVyYXIgbG9zIGJsb3F1ZXMuCgpgYGB7ciB0YWJsYS1hbm92YX0KdGFibGFfYW5vdmEgPC0gZGF0YS5mcmFtZSgKICBGdWVudGUgPSBjKCJCbG9xdWUiLCAiVHJhdGFtaWVudG8iLCAiRXJyb3IgcmVzaWR1YWwiKSwKICBnbCA9IGFuJERmLCBTQyA9IGFuJGBTdW0gU3FgLCBDTSA9IGFuJGBNZWFuIFNxYCwKICBGID0gYyhmbXQoYW5bImJsb3F1ZSIsICJGIHZhbHVlIl0sIDMpLCBmbXQoYW5bInRyYXRhbWllbnRvIiwgIkYgdmFsdWUiXSwgMyksICLigJQiKSwKICBwID0gYyhmcChhblsiYmxvcXVlIiwgIlByKD5GKSJdKSwgZnAoYW5bInRyYXRhbWllbnRvIiwgIlByKD5GKSJdKSwgIuKAlCIpKQprbml0cjo6a2FibGUodGFibGFfYW5vdmEsIGRpZ2l0cyA9IDIsIHJvdy5uYW1lcyA9IEZBTFNFLAogIGNvbC5uYW1lcyA9IGMoIkZ1ZW50ZSIsICJnbCIsICJTdW1hIGRlIGN1YWRyYWRvcyIsICJDdWFkcmFkbyBtZWRpbyIsICJGIiwgInAiKSwKICBjYXB0aW9uID0gIlRhYmxhIDMuIEFOT1ZBIGRlbCBEQkNBLiBMYSBwcmVndW50YSBwcmluY2lwYWwgY29ycmVzcG9uZGUgYSBsYSBmaWxhIFRyYXRhbWllbnRvLiIpCmBgYAoKRWwgQU5PVkEgYXBvcnRhIGV2aWRlbmNpYSBkZSBkaWZlcmVuY2lhcyBlbnRyZSB0cmF0YW1pZW50b3MgZW4gZXN0ZSBlc2NlbmFyaW8uIEVsIHZhbG9yIHAgbm8gaW5kaWNhIGN1w6FudG9zIHB1bnRvcyBzZSBnYW5hIG5pIHJlcHJlc2VudGEgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSB1biB0cmF0YW1pZW50byBzZWEgZWwgbWVqb3IuIEFkZW3DoXMsIGxvcyBibG9xdWVzIHNlIG1hbnRpZW5lbiBlbiBlbCBtb2RlbG8gcG9yIGVsIGRpc2XDsW8sIHNpbiBkZWNpZGlyIHJldGlyYXJsb3Mgc2Vnw7puIHN1IHZhbG9yIHAuCgpDb21vIG1lZGlkYSBjb21wbGVtZW50YXJpYSwgZXRhIGN1YWRyYWRvIHBhcmNpYWwgZGVsIHRyYXRhbWllbnRvIGVzIGByIGZtdChldGFfcGFyY2lhbCwgMylgLiBEZXNjcmliZSBsYSBwcm9wb3JjacOzbiBkZSB2YXJpYWNpw7NuIGF0cmlidWlibGUgYWwgdHJhdGFtaWVudG8gcmVzcGVjdG8gYSB0cmF0YW1pZW50byBtw6FzIGVycm9yLCB1bmEgdmV6IGNvbnNpZGVyYWRvIGVsIGJsb3F1ZS4gKipObyBlcyB1biBwb3JjZW50YWplIGRlIHBhY2llbnRlcyBiZW5lZmljaWFkb3MqKiBuaSB1bmEgbWVkaWRhIGRlIGNvbXByZW5zacOzbiBpbmRpdmlkdWFsLgoKRWwgZGlzZcOxbyB0aWVuZSB1bmEgcGVyc29uYSBwb3IgY29tYmluYWNpw7NuIGRlIGJsb3F1ZSB5IHRyYXRhbWllbnRvLiBFbiBjb25zZWN1ZW5jaWEsIGVsIG1vZGVsbyBzdXBvbmUgYWRpdGl2aWRhZDogbm8gcHVlZGUgZXN0aW1hciBwb3Igc2VwYXJhZG8gdW5hIGludGVyYWNjacOzbiB0cmF0YW1pZW50byBwb3IgYmxvcXVlIHkgZWwgZXJyb3IuIExhcyBsw61uZWFzIGRlIGxhIGZpZ3VyYSBheXVkYW4gYSBleHBsb3JhciBlbCBwYXRyw7NuLCBwZXJvIG5vIHJlc3VlbHZlbiBlc2EgbGltaXRhY2nDs24uCgojIyBDb21wYXJhY2lvbmVzIGRlIFR1a2V5CgpUdWtleSBjb21wYXJhIGNhZGEgcGFyIGRlIG1vZGFsaWRhZGVzIHV0aWxpemFuZG8gZWwgZXJyb3IgcmVzaWR1YWwgZGVsIERCQ0EgZSBpbnRlcnZhbG9zIHNpbXVsdMOhbmVvcyBkZWwgOTUgJS4gRW4gZXN0ZSBkaXNlw7FvIGNvbXBsZXRvIHkgZXF1aWxpYnJhZG8sIGxhcyBkaWZlcmVuY2lhcyBkZSBtZWRpYXMgY29pbmNpZGVuIGNvbiBsYXMgZGlmZXJlbmNpYXMgYWp1c3RhZGFzIHBvciBibG9xdWVzOyBsYSBwcmVjaXNpw7NuIHNlIG9idGllbmUgZGVsIG1vZGVsbyBjb24gYmxvcXVlcy4KCmBgYHtyIHRhYmxhLXR1a2V5fQp0YWJsYV90dWtleSA8LSBjb21wYXJhY2lvbmVzCnRhYmxhX3R1a2V5JHBfYWp1c3RhZG8gPC0gZnAodGFibGFfdHVrZXkkcF9hanVzdGFkbykKa25pdHI6OmthYmxlKHRhYmxhX3R1a2V5LCBkaWdpdHMgPSAyLCByb3cubmFtZXMgPSBGQUxTRSwKICBjb2wubmFtZXMgPSBjKCJDb21wYXJhY2nDs24iLCAiRGlmZXJlbmNpYSIsICJMw61taXRlIGluZmVyaW9yIiwgIkzDrW1pdGUgc3VwZXJpb3IiLCAicCBhanVzdGFkbyIsICJMZWN0dXJhIiksCiAgY2FwdGlvbiA9ICJUYWJsYSA0LiBEaWZlcmVuY2lhcyBlbiBwdW50b3MgZGUgY29tcHJlbnNpw7NuLiBUMuKAk1QxIHNpZ25pZmljYSBUMiBtZW5vcyBUMS4iKQpgYGAKCmBgYHtyIGludGVydmFsb3MtdHVrZXksIGZpZy5jYXA9IkZpZ3VyYSAyLiBEaWZlcmVuY2lhcyBlIGludGVydmFsb3Mgc2ltdWx0w6FuZW9zIGRlbCA5NSAlIGRlIFR1a2V5LCBjb25zaWRlcmFuZG8gZWwgYmxvcXVlLiJ9CmdncGxvdDI6OmdncGxvdChjb21wYXJhY2lvbmVzLCBnZ3Bsb3QyOjphZXMoQ29tcGFyYWNpb24sIERpZmVyZW5jaWEpKSArCiAgZ2dwbG90Mjo6Z2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3VyID0gIiM2Mzc1OEEiKSArCiAgZ2dwbG90Mjo6Z2VvbV9lcnJvcmJhcihnZ3Bsb3QyOjphZXMoeW1pbiA9IExJLCB5bWF4ID0gTFMpLAogICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IDAuMTQsIGNvbG91ciA9ICIjMTE3RTc5IiwgbGluZXdpZHRoID0gMC44NSkgKwogIGdncGxvdDI6Omdlb21fcG9pbnQoc2l6ZSA9IDMuNSwgY29sb3VyID0gIiMxODMzNDkiKSArCiAgZ2dwbG90Mjo6Y29vcmRfZmxpcCgpICsgdGVtYSArCiAgZ2dwbG90Mjo6bGFicyh0aXRsZSA9ICJDdcOhbnRvIGRpZmllcmVuIGxhcyBtb2RhbGlkYWRlcyBhbCBjb25zaWRlcmFyIGxvcyBibG9xdWVzIiwKICAgIHN1YnRpdGxlID0gIkxhIHJlZmVyZW5jaWEgZGUgZGlmZXJlbmNpYSBjZXJvIHBlcm1pdGUgdmFsb3JhciBjYWRhIGludGVydmFsbyIsCiAgICB4ID0gTlVMTCwgeSA9ICJEaWZlcmVuY2lhIGRlIGNvbXByZW5zacOzbiBlbiBwdW50b3MiKQpgYGAKCioqQ8OzbW8gbGVlcmxvLioqIEVsIHB1bnRvIG1hcmNhIGxhIGRpZmVyZW5jaWEgZXN0aW1hZGEgeSBsYSBsw61uZWEgaG9yaXpvbnRhbCBtdWVzdHJhIHN1IGluY2VydGlkdW1icmUuIFNpIGVsIGludGVydmFsbyBjb21wbGV0byBxdWVkYSBwb3IgZW5jaW1hIGRlIGNlcm8sIGxhIHByaW1lcmEgbW9kYWxpZGFkIHRpZW5lIHVuYSBtZWRpYSBtYXlvciBxdWUgbGEgc2VndW5kYSBiYWpvIGVsIG1vZGVsby4gU2kgaW5jbHV5ZSBjZXJvLCBubyBleGlzdGUgZXZpZGVuY2lhIHN1ZmljaWVudGUgcGFyYSBkaXN0aW5ndWlyIGVzZSBwYXIgYWwgbml2ZWwgZWxlZ2lkbzsgZXNvIG5vIGRlbXVlc3RyYSBlcXVpdmFsZW5jaWEuCgoqKlQyIGZyZW50ZSBhIFQxOioqIGByIGZtdCh0dVsiVDItVDEiLCAiZGlmZiJdKWAgcHVudG9zIG3DoXMsIGNvbiBpbnRlcnZhbG8gZGUgYHIgZm10KHR1WyJUMi1UMSIsICJsd3IiXSlgIGEgYHIgZm10KHR1WyJUMi1UMSIsICJ1cHIiXSlgLgoKKipUMyBmcmVudGUgYSBUMToqKiBgciBmbXQodHVbIlQzLVQxIiwgImRpZmYiXSlgIHB1bnRvcyBtw6FzLCBjb24gaW50ZXJ2YWxvIGRlIGByIGZtdCh0dVsiVDMtVDEiLCAibHdyIl0pYCBhIGByIGZtdCh0dVsiVDMtVDEiLCAidXByIl0pYC4KCioqVDMgZnJlbnRlIGEgVDI6KiogYHIgZm10KHR1WyJUMy1UMiIsICJkaWZmIl0pYCBwdW50b3MgbcOhcywgY29uIGludGVydmFsbyBkZSBgciBmbXQodHVbIlQzLVQyIiwgImx3ciJdKWAgYSBgciBmbXQodHVbIlQzLVQyIiwgInVwciJdKWAuCgpFbiBlbCBlamVtcGxvIG9yaWdpbmFsIGxvcyB0cmVzIGludGVydmFsb3MgcXVlZGFuIHBvciBlbmNpbWEgZGUgY2Vyby4gTGEgZGVjaXNpw7NuIGNsw61uaWNhIGV4aWdlIGRlZmluaXIgcHJldmlhbWVudGUgcXXDqSBkaWZlcmVuY2lhIHNlcsOtYSBpbXBvcnRhbnRlIHBhcmEgZWwgcGFjaWVudGUsIGFkZW3DoXMgZGUgdmFsb3JhciBzdSBzaWduaWZpY2FjacOzbiBlc3RhZMOtc3RpY2EuCgojIFF1w6kgY29tcHJvYmFtb3MgZW4gbG9zIHJlc2lkdW9zCgpVbiByZXNpZHVvIGVzIGxhIHBhcnRlIGRlbCBwdW50YWplIHF1ZSBlbCBtb2RlbG8gbm8gZXhwbGljYSBkZXNwdcOpcyBkZSBjb25zaWRlcmFyICoqdGFudG8gbGEgbW9kYWxpZGFkIGNvbW8gZWwgYmxvcXVlKiouIFVuIHJlc2lkdW8gZGUgKzIgaW5kaWNhIHF1ZSBsYSBwZXJzb25hIG9idHV2byBkb3MgcHVudG9zIG3DoXMgZGUgbG8gZXN0aW1hZG8gcGFyYSBzdSBjb21iaW5hY2nDs24gZGUgYmxvcXVlIHkgdHJhdGFtaWVudG8uCgpFbCBBTk9WQSBzdXBvbmUgZXJyb3JlcyBpbmRlcGVuZGllbnRlcyBlbnRyZSBwYWNpZW50ZXMsIHZhcmlhbnphIGFwcm94aW1hZGFtZW50ZSBjb23Dum4geSBub3JtYWxpZGFkIHJhem9uYWJsZSBkZSBsb3MgZXJyb3Jlcy4gTGEgaW5kZXBlbmRlbmNpYSBwcm9jZWRlIGRlbCBkaXNlw7FvLCBubyBkZSB1bmEgcHJ1ZWJhIGRlIG5vcm1hbGlkYWQuCgpgYGB7ciB0YWJsYS1zdXB1ZXN0b3N9CmRpYWdub3N0aWNvcyA8LSBkYXRhLmZyYW1lKAogIFByb2NlZGltaWVudG8gPSBjKCJTaGFwaXJv4oCTV2lsayBkZSByZXNpZHVvcyIsICJCYXJ0bGV0dCBzb2JyZSByZXNpZHVvcyIsICJMZXZlbmUtbWVkaWFuYSBzb2JyZSByZXNpZHVvcyIpLAogIHAgPSBjKGZwKHNoJHAudmFsdWUpLCBmcChiYSRwLnZhbHVlKSwgZnAobGV2WzEsICJQcig+RikiXSkpLAogIEFsY2FuY2UgPSBjKCJEaWFnbsOzc3RpY28gZGUgbm9ybWFsaWRhZCBqdW50byBjb24gZWwgZ3LDoWZpY28gUVEiLAogICAgICAgICAgICAgICJFeHBsb3JhdG9yaW87IHJlc2lkdW9zIHJlbGFjaW9uYWRvcyBwb3IgZWwgYWp1c3RlIiwKICAgICAgICAgICAgICAiRXhwbG9yYXRvcmlvOyByZXNpZHVvcyByZWxhY2lvbmFkb3MgcG9yIGVsIGFqdXN0ZSIpKQprbml0cjo6a2FibGUoZGlhZ25vc3RpY29zLCByb3cubmFtZXMgPSBGQUxTRSwKICBjYXB0aW9uID0gIlRhYmxhIDUuIExvcyB2YWxvcmVzIHAgbm8gZGVtdWVzdHJhbiBlbCBjdW1wbGltaWVudG8gZGUgbG9zIHN1cHVlc3Rvcy4iKQpgYGAKCioqUHJlY2F1Y2nDs24gZXNwZWPDrWZpY2EgZGVsIERCQ0EuKiogTG9zIHJlc2lkdW9zIGVzdMOhbiByZWxhY2lvbmFkb3MgcG9yIGVsIGFqdXN0ZS4gUG9yIGVzbywgQmFydGxldHQgeSBMZXZlbmUgY2FsY3VsYWRvcyBzb2JyZSBlbGxvcyBubyBjb25zZXJ2YW4gZXhhY3RhbWVudGUgbGEgY2FsaWJyYWNpw7NuIGRlIHBydWViYXMgZW50cmUgbXVlc3RyYXMgaW5kZXBlbmRpZW50ZXMuIFNlIHByZXNlbnRhbiBjb21vIGV4cGxvcmFjacOzbiwgc2luIHVzYXJsb3MgY29tbyBzZW3DoWZvcm8gYXV0b23DoXRpY28gcGFyYSBlbGVnaXIgZWwgYW7DoWxpc2lzLiBBcGxpY2FybG9zIHNvbG8gYSBsb3MgcHVudGFqZXMgYnJ1dG9zIHRhbXBvY28gYWlzbGFyw61hIGxhIHZhcmlhY2nDs24gcmVzaWR1YWwuCgpgYGB7ciBxcS1yZXNpZHVvcywgZmlnLmNhcD0iRmlndXJhIDMuIEdyw6FmaWNvIFFRIGRlIHJlc2lkdW9zIGVzdGFuZGFyaXphZG9zIGRlbCBtb2RlbG8gY29uIGJsb3F1ZSB5IHRyYXRhbWllbnRvLiJ9CmdncGxvdDI6OmdncGxvdChkaWFnLCBnZ3Bsb3QyOjphZXMoc2FtcGxlID0gRXN0YW5kYXJpemFkbykpICsKICBnZ3Bsb3QyOjpzdGF0X3FxKGNvbG91ciA9ICIjMTU5QTk0Iiwgc2l6ZSA9IDIuNSkgKwogIGdncGxvdDI6OnN0YXRfcXFfbGluZShjb2xvdXIgPSAiIzE4MzM0OSIsIGxpbmV0eXBlID0gImRhc2hlZCIpICsgdGVtYSArCiAgZ2dwbG90Mjo6bGFicyh0aXRsZSA9ICLCv0xvcyBlcnJvcmVzIHJlc3RhbnRlcyB0aWVuZW4gdW5hIGZvcm1hIGFwcm94aW1hZGFtZW50ZSBub3JtYWw/IiwKICAgIHN1YnRpdGxlID0gIllhIHNlIGhhIGNvbnNpZGVyYWRvIGxhIHZhcmlhY2nDs24gZW50cmUgYmxvcXVlcyB5IG1vZGFsaWRhZGVzIiwKICAgIHggPSAiQ3VhbnRpbGVzIGRlIHJlZmVyZW5jaWEgbm9ybWFsIiwgeSA9ICJSZXNpZHVvcyBlc3RhbmRhcml6YWRvcyIpCmBgYAoKKipDw7NtbyBsZWVybG8uKiogVW5hIGNlcmNhbsOtYSByYXpvbmFibGUgZGUgbG9zIHB1bnRvcyBhIGxhIGzDrW5lYSBlcyBjb21wYXRpYmxlIGNvbiBub3JtYWxpZGFkIGFwcm94aW1hZGEuIFVuYSBjdXJ2YSBwcm9udW5jaWFkYSBvIHB1bnRvcyBtdXkgYWxlamFkb3MgZW4gbG9zIGV4dHJlbW9zIGp1c3RpZmljYXLDrWFuIHJldmlzYXIgZWwgbW9kZWxvIHkgbG9zIHJlZ2lzdHJvcy4gU2hhcGlyb+KAk1dpbGsgZGEgcCA9IGByIGZwKHNoJHAudmFsdWUpYDsgbm8gZGV0ZWN0YSB1biBhbGVqYW1pZW50byBhbCBuaXZlbCBkZSAwLDA1LCBwZXJvIGNvbiB1bmEgbXVlc3RyYSBwZXF1ZcOxYSBwdWVkZSBwYXNhciBwb3IgYWx0byBwcm9ibGVtYXMgcmVsZXZhbnRlcy4KCmBgYHtyIHJlc2lkdW9zLWFqdXN0YWRvcywgZmlnLmNhcD0iRmlndXJhIDQuIFJlc2lkdW9zIGZyZW50ZSBhIGNvbXByZW5zacOzbiBhanVzdGFkYSBwb3IgYmxvcXVlIHkgdHJhdGFtaWVudG8uIn0KZ2dwbG90Mjo6Z2dwbG90KGRpYWcsIGdncGxvdDI6OmFlcyhBanVzdGFkbywgUmVzaWR1bykpICsKICBnZ3Bsb3QyOjpnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBjb2xvdXIgPSAiIzYzNzU4QSIpICsKICBnZ3Bsb3QyOjpnZW9tX3BvaW50KGNvbG91ciA9ICIjNTM2OUIwIiwgc2l6ZSA9IDIuNykgKyB0ZW1hICsKICBnZ3Bsb3QyOjpsYWJzKHRpdGxlID0gIsK/TGEgZGlzcGVyc2nDs24gZGUgbG9zIGVycm9yZXMgY2FtYmlhIGNvbiBlbCBuaXZlbCBlc3RpbWFkbz8iLAogICAgc3VidGl0bGUgPSAiQnVzY2FyIGFtcGxpdHVkZXMgc2VtZWphbnRlcyB5IHBvc2libGVzIG9ic2VydmFjaW9uZXMgZXh0cmVtYXMiLAogICAgeCA9ICJDb21wcmVuc2nDs24gZXN0aW1hZGEgcG9yIGVsIG1vZGVsbyIsIHkgPSAiUmVzaWR1byBlbiBwdW50b3MiKQpgYGAKCioqQ8OzbW8gbGVlcmxvLioqIFNlIGJ1c2NhIHVuYSBudWJlIGFscmVkZWRvciBkZSBjZXJvIHNpbiB1bmEgZm9ybWEgZGUgYWJhbmljbyBjbGFyYS4gVW5hIGFtcGxpdHVkIHF1ZSBhdW1lbnRlIGFsIGF2YW56YXIgaG9yaXpvbnRhbG1lbnRlIHN1Z2VyaXLDrWEgdmFyaWFjacOzbiBubyBjb25zdGFudGU7IHVuYSBjdXJ2YSBzdWdlcmlyw61hIHVuYSBlc3RydWN0dXJhIG5vIGV4cGxpY2FkYS4gQ29uIDE4IHB1bnRvcywgbGEgZmlndXJhIGVzIG9yaWVudGF0aXZhLiBVbiBwdW50byBleHRyZW1vIGV4aWdlIGNvbXByb2JhciBlbCByZWdpc3RybyB5IHZhbG9yYXIgc3UgaW5mbHVlbmNpYSwgbm8gYm9ycmFybG8gYXV0b23DoXRpY2FtZW50ZS4KCiMgUXXDqSBhcG9ydGFuIEZyaWVkbWFuIHkgbGEgYWxlYXRvcml6YWNpw7NuCgojIyBGcmllZG1hbiBjb25zZXJ2YSBsYSBjb21wYXJhY2nDs24gcG9yIGJsb3F1ZXMKCkZyaWVkbWFuIG9yZGVuYSBsb3MgdHJlcyBwdW50YWplcyAqKmRlbnRybyBkZSBjYWRhIGJsb3F1ZSoqIHkgZXZhbMO6YSBzaSB1bmEgbW9kYWxpZGFkIHRpZW5kZSBhIG9jdXBhciBwb3NpY2lvbmVzIGRpZmVyZW50ZXMuIE5vIHJlcXVpZXJlIG5vcm1hbGlkYWQsIHBlcm8gc8OtIGJsb3F1ZXMgaW5kZXBlbmRpZW50ZXMsIGNvbXBsZXRvcyB5IHJlc3B1ZXN0YXMgY29tcGFyYWJsZXMuIFN1IGhpcMOzdGVzaXMgcG9yIHJhbmdvcyBubyBlcyBpZMOpbnRpY2EgYSBsYSBpZ3VhbGRhZCBkZSBtZWRpYXMgZGVsIEFOT1ZBLiBLcnVza2Fs4oCTV2FsbGlzIGlnbm9yYXLDrWEgbG9zIGJsb3F1ZXMgeSBubyBlcyBsYSBhbHRlcm5hdGl2YSB1dGlsaXphZGEgYXF1w60uCgpFbCBlc3RhZMOtc3RpY28gZGUgRnJpZWRtYW4gZXMgYHIgZm10KHVubmFtZShmciRzdGF0aXN0aWMpLCAzKWAsIGNvbiBwID0gYHIgZnAoZnIkcC52YWx1ZSlgIHNlZ8O6biBzdSBhcHJveGltYWNpw7NuIGNoaSBjdWFkcmFkby4gS2VuZGFsbCBXIGVzIGByIGZtdChXLCAzKWA6IGVuIGVzdG9zIGRhdG9zLCBlbCBvcmRlbiBlbnRyZSBtb2RhbGlkYWRlcyBlcyBjb21wbGV0YW1lbnRlIGNvbmNvcmRhbnRlIGVuIGxvcyBzZWlzIGJsb3F1ZXMuICoqVyA9IDEgbm8gc2lnbmlmaWNhIGNvbXByZW5zacOzbiBkZWwgMTAwICUgbmkgZ2FyYW50aXphIHF1ZSBzZSByZXBpdGEgZWwgcGF0csOzbiBlbiBvdHJvcyBwYWNpZW50ZXMuKiogQ29uIHNvbG8gc2VpcyBibG9xdWVzIGRlYmUgcmVjb25vY2Vyc2UgZWwgY2Fyw6FjdGVyIGFwcm94aW1hZG8gZGUgbGEgcHJ1ZWJhIGdsb2JhbC4KCiMjIEFsZWF0b3JpemFjacOzbiBkZW50cm8gZGUgY2FkYSBibG9xdWUKCkxhIHBydWViYSBjb21wbGVtZW50YXJpYSBjb25zZXJ2YSBsb3MgdHJlcyBwdW50YWplcyBkZSBjYWRhIGJsb3F1ZSB5IGNhbWJpYSBhbGVhdG9yaWFtZW50ZSBzdXMgZXRpcXVldGFzIFQxLCBUMiB5IFQzLiBSZXBpdGUgZXNlIHNvcnRlbyAqKmByIEJgIHZlY2VzKiogeSBjb21wYXJhIGxvcyBlc3RhZMOtc3RpY29zIEYgc2ltdWxhZG9zIGNvbiBlbCBvYnNlcnZhZG8uIE5vIG1lemNsYSBwYWNpZW50ZXMgZW50cmUgYmxvcXVlcy4KCkVuIGxhIGVqZWN1Y2nDs24gcmVwcm9kdWNpYmxlLCBzZSBvYnR1dmllcm9uIGByIGV4dHJlbW9zYCByZXN1bHRhZG9zIHRhbiBleHRyZW1vcyBjb21vIGVsIG9ic2VydmFkbyBlbnRyZSBgciBCYCBzb3J0ZW9zLiBDb24gbGEgY29ycmVjY2nDs24gcXVlIGV2aXRhIGluZm9ybWFyIHAgPSAwLCBlbCB2YWxvciBNb250ZSBDYXJsbyBlcyAqKmByIGZtdChwX3Blcm0sIDQpYCoqLiBObyBlcyB1bmEgZW51bWVyYWNpw7NuIGV4YWN0YTogY2FtYmlhciBsYSBzZW1pbGxhIG8gZWwgbsO6bWVybyBkZSByZXBldGljaW9uZXMgcHVlZGUgbW9kaWZpY2FybG8gbGlnZXJhbWVudGUuIFVuYSBzZW1pbGxhIGZpamEgcGVybWl0ZSByZXBldGlyIGVsIG1pc21vIGPDoWxjdWxvIGNvbiBsYSBtaXNtYSBjb25maWd1cmFjacOzbiBkZSBSLgoKU3UgdmFsaWRleiBlbiB1biBlc3R1ZGlvIHJlYWwgZXhpZ2UgcXVlIGxhIGFzaWduYWNpw7NuIHNlIGhheWEgc29ydGVhZG8gZGVudHJvIGRlIGNhZGEgYmxvcXVlLiBDb250cmFzdGEgdW5hIGhpcMOzdGVzaXMgZGUgYXVzZW5jaWEgZGUgZWZlY3RvIGluZGl2aWR1YWwgYmFqbyBlbCBlc3F1ZW1hIGRlIGFsZWF0b3JpemFjacOzbjsgbm8gZGViZSBjb25mdW5kaXJzZSBhdXRvbcOhdGljYW1lbnRlIGNvbiBjdWFscXVpZXIgaGlww7N0ZXNpcyBkZSBpZ3VhbGRhZCBkZSBtZWRpYXMuCgojIEludGVycHJldGFjacOzbiBwYXJhIGxhIHByZWd1bnRhIGRlIGludmVzdGlnYWNpw7NuCgpDb24gbG9zIGRhdG9zIGZpY3RpY2lvcyB5IGVsIG1vZGVsbyBhZGl0aXZvLCBlbCBBTk9WQSB5IFR1a2V5IGRpc3Rpbmd1ZW4gbG9zIHRyZXMgZm9ybWF0b3MsIGNvbiBtYXlvciBjb21wcmVuc2nDs24gcHJvbWVkaW8gZW4gVDMsIHNlZ3VpZG8gcG9yIFQyIHkgVDEuIExhIGNvbXBhcmFjacOzbiBzZSByZWFsaXphIGNvbnNpZGVyYW5kbyBsb3Mgbml2ZWxlcyBpbmljaWFsZXMgYWdydXBhZG9zIGVuIGJsb3F1ZXMuCgpGcmllZG1hbiB0YW1iacOpbiBkZXRlY3RhIGRpZmVyZW5jaWFzIGdsb2JhbGVzLiBTaW4gZW1iYXJnbywgbGFzIGNvbXBhcmFjaW9uZXMgV2lsY294b24gcG9yIGJsb3F1ZXMgY29uIGFqdXN0ZSBIb2xtICoqbm8gZGlzdGluZ3VlbiBwYXJlcyBhbCBuaXZlbCBkZSAwLDA1KiogZW4gZXN0ZSBlamVtcGxvLiBFc2EgZGlmZXJlbmNpYSBkZSByZXN1bHRhZG9zIHNlIGluZm9ybWE6IGxhcyBwcnVlYmFzIHV0aWxpemFuIGluZm9ybWFjacOzbiB5IHN1cHVlc3RvcyBkaXN0aW50b3MsIHkgc2VpcyBibG9xdWVzIG9mcmVjZW4gcG9jYSByZXNvbHVjacOzbiBwYXJhIGNvbXBhcmFjaW9uZXMgbcO6bHRpcGxlcyBwb3IgcmFuZ29zLiBObyBkZWJlIHNlbGVjY2lvbmFyc2UgZWwgbcOpdG9kbyBxdWUgYXJyb2plIGVsIG1lbm9yIHZhbG9yIHAuCgpQYXJhIHJlc3BvbmRlciBlbiBwYWNpZW50ZXMgcmVhbGVzIHNlIG5lY2VzaXRhbiB1bmEgbXVlc3RyYSBjYWxjdWxhZGEsIHVuIGluc3RydW1lbnRvIGRlIGNvbXByZW5zacOzbiB2w6FsaWRvIHkgY29uZGljaW9uZXMgZXF1aXZhbGVudGVzIGRlIGluZm9ybWFjacOzbiB5IGFjbGFyYWNpw7NuIGRlIGR1ZGFzLiBMb3MgZm9ybWF0b3Mgbm8gZGViZW4gb21pdGlyIGNvbnRlbmlkbyBjbMOtbmljbyBlc2VuY2lhbC4gVDMgY29tYmluYSBpbmZvZ3JhZsOtYXMsIHNvcG9ydGUgZGlnaXRhbCB5IGZpcm1hIGVsZWN0csOzbmljYTogZWwgZGlzZcOxbyBjb21wYXJhIGVzZSBwYXF1ZXRlIHkgKipubyBhw61zbGEgZWwgZWZlY3RvIGRlIGxhIGZpcm1hKiouCgojIERldGFsbGVzIHkgcmVwcm9kdWNpYmlsaWRhZAoKPGRldGFpbHM+CjxzdW1tYXJ5PlZlciBsYXMgMTggb2JzZXJ2YWNpb25lcyB5IGxhIGNvbXByb2JhY2nDs24gZGUgYmxvcXVlcyBjb21wbGV0b3M8L3N1bW1hcnk+CgpgYGB7ciBkYXRvcy1jb21wbGV0b3N9CmtuaXRyOjprYWJsZShkYXRvc19kYmNhWywgYygicGFjaWVudGUiLCAiYmxvcXVlIiwgImFsZmFiZXRpemFjaW9uX2luaWNpYWwiLCAidHJhdGFtaWVudG8iLCAiY29tcHJlbnNpb24iKV0sCiAgcm93Lm5hbWVzID0gRkFMU0UsCiAgY29sLm5hbWVzID0gYygiUGFjaWVudGUiLCAiQmxvcXVlIiwgIkFsZmFiZXRpemFjacOzbiBpbmljaWFsIiwgIlRyYXRhbWllbnRvIiwgIkNvbXByZW5zacOzbiIpKQprbml0cjo6a2FibGUoYXMuZGF0YS5mcmFtZS5tYXRyaXgod2l0aChkYXRvc19kYmNhLCB0YWJsZShibG9xdWUsIHRyYXRhbWllbnRvKSkpLAogIGNhcHRpb24gPSAiVW5hIG9ic2VydmFjacOzbiBwb3IgY29tYmluYWNpw7NuIGRlIGJsb3F1ZSB5IHRyYXRhbWllbnRvLiIpCmBgYAoKPC9kZXRhaWxzPgoKPGRldGFpbHM+CjxzdW1tYXJ5PlZlciBsYXMgY29tcGFyYWNpb25lcyBXaWxjb3hvbiByZWxhY2lvbmFkYXMgcG9yIGJsb3F1ZTwvc3VtbWFyeT4KCkxhcyBkaWZlcmVuY2lhcyBzZSBjYWxjdWxhbiBlbnRyZSBwZXJzb25hcyBkZWwgbWlzbW8gYmxvcXVlLiBXaWxjb3hvbiBkZSByYW5nb3MgY29uIHNpZ25vIHV0aWxpemEgZXNhIHJlbGFjacOzbiB5IHJlcXVpZXJlIHNpbWV0csOtYSBkZSBsYXMgZGlmZXJlbmNpYXMgcGFyYSB1bmEgaW50ZXJwcmV0YWNpw7NuIGRlIGxvY2FsaXphY2nDs24uIFNlIHVzYSBhcHJveGltYWNpw7NuIG5vcm1hbCBjb24gY29ycmVjY2nDs24gZGUgY29udGludWlkYWQgcGFyYSBhZG1pdGlyIGVtcGF0ZXM7IGVsIGFqdXN0ZSBIb2xtIGNvbnNpZGVyYSBsYXMgdHJlcyBjb21wYXJhY2lvbmVzLgoKYGBge3IgcGFyZXMtZnJpZWRtYW59CnRhYmxhX3Bvc3QgPC0gcG9zdF9mclssIGMoIkNvbXBhcmFjaW9uIiwgIk1lZGlhbmFfZGlmZXJlbmNpYSIsICJwX0hvbG0iKV0KdGFibGFfcG9zdCRwX0hvbG0gPC0gZnAodGFibGFfcG9zdCRwX0hvbG0pCmtuaXRyOjprYWJsZSh0YWJsYV9wb3N0LCBkaWdpdHMgPSAyLCByb3cubmFtZXMgPSBGQUxTRSwKICBjb2wubmFtZXMgPSBjKCJDb21wYXJhY2nDs24iLCAiTWVkaWFuYSBkZSBkaWZlcmVuY2lhcyBwb3IgYmxvcXVlIiwgInAgYWp1c3RhZG8gSG9sbSIpKQpgYGAKClVuYSBtZWRpYW5hIGRlIGRpZmVyZW5jaWFzIG5vIGVzIG5lY2VzYXJpYW1lbnRlIGlndWFsIGEgbGEgZGlmZXJlbmNpYSBkZSBtZWRpYW5hcy4gTm8gZGV0ZWN0YXIgc2lnbmlmaWNhY2nDs24gZGVzcHXDqXMgZGVsIGFqdXN0ZSBubyBkZW11ZXN0cmEgZXF1aXZhbGVuY2lhIGVudHJlIGZvcm1hdG9zLgoKPC9kZXRhaWxzPgoKPGRldGFpbHM+CjxzdW1tYXJ5PlZlciBvYnNlcnZhY2lvbmVzIHBvdGVuY2lhbG1lbnRlIGluZmx1eWVudGVzPC9zdW1tYXJ5PgoKTGEgZGlzdGFuY2lhIGRlIENvb2sgb3JpZW50YSBzb2JyZSBjdcOhbnRvIHBvZHLDrWEgaW5mbHVpciB1bmEgb2JzZXJ2YWNpw7NuIGVuIGVsIG1vZGVsby4gTGEgcmVmZXJlbmNpYSA0L24gZXMgZXhwbG9yYXRvcmlhIHkgbm8gYXV0b3JpemEgZWxpbWluYXIgcGFjaWVudGVzLiBTZSByZXZpc2FuIGxvcyByZWdpc3Ryb3MgeSwgc2kgY29ycmVzcG9uZGUsIHNlIGluZm9ybWEgdW4gYW7DoWxpc2lzIGRlIHNlbnNpYmlsaWRhZC4KCmBgYHtyIGluZmx1ZW5jaWF9CmluZmx1ZW5jaWEgPC0gZGF0YS5mcmFtZShQYWNpZW50ZSA9IGRhdG9zX2RiY2EkcGFjaWVudGUsIEJsb3F1ZSA9IGRhdG9zX2RiY2EkYmxvcXVlLAogIFJlc2lkdW9fZXN0YW5kYXJpemFkbyA9IGRpYWckRXN0YW5kYXJpemFkbywgQ29vayA9IGRpYWckQ29vaywKICBSZXZpc2FyID0gaWZlbHNlKGRpYWckQ29vayA+IDQgLyBucm93KGRhdG9zX2RiY2EpLCAiUmV2aXNhciByZWdpc3RybyIsICJTaW4gc2XDsWFsIHNlZ8O6biBlc3RhIHJlZmVyZW5jaWEiKSkKa25pdHI6OmthYmxlKGluZmx1ZW5jaWFbb3JkZXIoLWluZmx1ZW5jaWEkQ29vayksIF0sIGRpZ2l0cyA9IDMsIHJvdy5uYW1lcyA9IEZBTFNFKQpgYGAKCjwvZGV0YWlscz4KCjxkZXRhaWxzPgo8c3VtbWFyeT5WZXIgZWwgY8OzZGlnbyBkZSBhbGVhdG9yaXphY2nDs24geSBsYSBjb25maWd1cmFjacOzbiBkZSBSPC9zdW1tYXJ5PgoKYGBge3IgY29kaWdvLXBlcm11dGFjaW9uLCBlY2hvPVRSVUUsIGV2YWw9RkFMU0V9CnNldC5zZWVkKDIwMjYxMDMwKQpCIDwtIDk5OTlMCkZfcGVybXV0YWRvIDwtIHJlcGxpY2F0ZShCLCB7CiAgbSA8LSBtYXRyaXoKICBmb3IgKGogaW4gc2VxX2xlbihucm93KG0pKSkgbVtqLCBdIDwtIHNhbXBsZShtW2osIF0pCiAgZXN0YWRpc3RpY29fRihtKQp9KQpwX3Blcm0gPC0gKDEgKyBzdW0oRl9wZXJtdXRhZG8gPj0gRl9vYnNlcnZhZG8gLSAxZS0xMCkpIC8gKEIgKyAxKQpgYGAKCmBgYHtyIHNlc2lvbn0Kc2Vzc2lvbkluZm8oKQpgYGAKCjwvZGV0YWlscz4KCkVzdGUgaW5mb3JtZSBjb25zZXJ2YSBsb3MgMTggcmVnaXN0cm9zIHkgbG9zIHByb2NlZGltaWVudG9zIGRlICoqQW5hbGlzaXNfREJDQV9Db25zZW50aW1pZW50by5SKiosIHByZXNlbnRhZG9zIGVuIHVuIGZvcm1hdG8gcmVzdW1pZG8gY29uIGV4cGxpY2FjaW9uZXMuIFNlIHJlY2FsY3VsYSBhbCBwdWxzYXIgKipLbml0KiogeSBubyBuZWNlc2l0YSBlbCBzY3JpcHQgb3JpZ2luYWwgbmkgdW5hIGJhc2UgZXh0ZXJuYS4gRWwgY8OzZGlnbyBjb21wbGV0byBzZSBjb25zdWx0YSBhYnJpZW5kbyBlbCBhcmNoaXZvIGAucm1kYCBvIG1lZGlhbnRlIGxhIGRlc2NhcmdhIGRlIGPDs2RpZ28gZGVsIEhUTUwuIExvcyByZXN1bHRhZG9zIHNvbiBkaWTDoWN0aWNvcyB5IG5vIGRlbXVlc3RyYW4gZWZpY2FjaWEgY2zDrW5pY2EgZGUgbmluZ3VuYSBtb2RhbGlkYWQuCgo=