2. Segundo apartado principal. (1 #)
2.3.2.1. Omitir encabezados.
En caso de desear que un encabezado (que comience con “#” no sea incluido en la ennumeración o listado correspondiente) se utiliza el script {.unlisted .unnumbered}
después del título señalado con ““#”, de la siguiente manera:
# Section heading {.unlisted .unnumbered}
2.3.3.Listados.
En R Markdown se pueden realizar dos tipos o formatos de listas: ordenadas o numeradas y las no ordenadas.
La realización de listados ordenados se realiza anteponiendo el número y un espacio antes de cada texto, además de dejar un espacio entre el párrafo previo y el inicio del listado, por ejemplo:
1. El primer elemento.
2. El segundo elemento.
3. El tercer elemento.
4. Etc.
El resultado es:
- El primer elemento.
- El segundo elemento.
- El tercer elemento.
- Etc.
También se pueden ordenar utilizando letras:
a. Primer elemento
b. Segundo elemento
c. Tercer elemento
El resultado es:
- Primer elemento
- Segundo elemento
- Tercer elemento
En caso de realizar un listado sin jerarquía o numeración, solo se coloca un “*” o un guión intermedio “-” y un espacio antes de cada texto:
- Primer elemento.
- Segundo elemento.
- Tercer elemento.
- Etc.
El resultado es:
- Primer elemento.
- Segundo elemento.
- Tercer elemento.
- Etc.
Otra opción son listados mezclados, para lo que se usa dos “tab” para los sub elementos:
1. Primer elemento
2. Segundo elemento
1. Primer sub elemento (incluye dos "tab")
2. Segundo sub elemento (incluye dos "tab")
3. Tercer elemento
- Otro sub elemento no ordenado (incluye dos "tab")
- Otro sub elemento no ordenado (incluye dos "tab")
El resultado es:
Primer elemento
Segundo elemento
- Primer sub elemento (incluye dos “tab”)
- Segundo sub elemento (incluye dos “tab”)
Tercer elemento
- Otro sub elemento no ordenado (incluye dos “tab”)
- Otro sub elemento no ordenado (incluye dos “tab”)
2.3.4. Separación.
2.3.4.1. Renglones continuos.
La manera de escribir un párrafo en R Markdown es a partir de ubicar el cursor en una línea numerada y, así, continuar escribiendo sin detenerse hasta el punto final. A medida que el párrafo sea cada vez más largo, automáticamente el texto irá bajando de líneas, pero ahora estas no están numeradas. R Mardown lee estas líneas no-numeradas como parte de un mismo párrafo, y no hace cortes ni saltos.
Aún si se da un solo “click” a la tecla “ENTER”, y en el visor de R Markdown se cambia de línea numerada, en el caso del “output” (html, pdf o word) no habrá ocurrido un salto de párrafo, sino que continua como parte de un mismo párrafo. Por ejemplo:
"Este es el párrafo de la línea 80.
Este es el párrafor de la línea 81."
El resultado es:
“Este es el párrafo de la línea 80. Este es el párrafo de la línea 81.”
2.3.4.2. Separación entre renglones.
Para lograr laseparación entre líneas o “saltar líneas seguidas” dentro de un mismo párrafo, se utiliza un “doble espacio” al final del renglón que se desea separar (dos veces a la barra espaciadora); también se puede utilizar una barra diagonal palabra final.\
, “\” al final del renglón. Por ejemplo:
"Este es el párrafo de la línea 85.\
Este es el párrafor de la línea 86".
El resultado es: “Este es el párrafo de la línea 85.
Este es el párrafo de la línea 86.”
2.3.4.3. Separación entre párrafos.
Para separar párrafos entre sí se deja una línea numerada vacía entre ambos, por ejemplo:
""Por segundo año consecutivo, la mayoría de los programas sociales del
Gobierno de López Obrador tuvieron en 2020 un bajo desempeño y algunos
de ellos operaron también en condiciones de opacidad.
Así lo revela el Índice de Desempeño de los Programas Públicos Federales
2021 (INDEP) elaborado por la organización Agencia para el Desarrollo (...)."
El resultado es:
“Por segundo año consecutivo, la mayoría de los programas sociales del Gobierno de López Obrador tuvieron en 2020 un bajo desempeño y algunos de ellos operaron también en condiciones de opacidad.
Así lo revela el Índice de Desempeño de los Programas Públicos Federales 2021 (INDEP) elaborado por la organización Agencia para el Desarrollo (…).” (Ureste, 2021, 3 de noviembre de 2021)
2.3.5. Insertar un salto de página.
Para insertar un salto de página se utiliza el script \newpage
, que es parte del lenguaje de LaTeX pero que, a su vez, reconoce el paquete de rmarkdown
.
Por ejemplo:
"Contenido de página 1. \newpage
Contenido de página 2."
“Contenido de página 1. Contenido de página 2.”
2.3.4. Insertar citas largas en párrafos separados.
En caso de una cita larga y de la que se desea separar un bloque de texto, se utiliza el signo de \>
y se añade un “espacio” antes del inicio del párrafo, por ejemplo:
> Entre los programas con un escaso desempeño hay algunos de los
considerados 'estrella' en la presente administración, como Sembrando
Vida, el programa de reforestación con el que el Gobierno actual ha
dicho que busca combatir los efectos del cambio climático en México.
Otros con bajo rendimiento son el de Becas para personas con
discapacidad, y el programa de Universidades para el Bienestar Benito
Juárez. Por el contrario, el programa de Pensión para Adultos Mayores
está entre los que mejor rendimiento han tenido.
El resultado es:
Entre los programas con un escaso desempeño hay algunos de los considerados ‘estrella’ en la presente administración, como Sembrando Vida, el programa de reforestación con el que el Gobierno actual ha dicho que busca combatir los efectos del cambio climático en México. Otros con bajo rendimiento son el de Becas para personas con discapacidad, y el programa de Universidades para el Bienestar Benito Juárez. Por el contrario, el programa de Pensión para Adultos Mayores está entre los que mejor rendimiento han tenido.
2.3.4.1. Insertar sangrías.
Una manera “cruda” de colocar sangría es mediante la tecla |
al inicio de un párrafo. Se debe recordar que markdown no reconoce los espacios en blanco, o los ignora y junta renglones separados. Por ello se le debe indicar el lugar de los espacios vacíos a manera de sangrías.
| When dollars appear it's a sign
| that your code does not quite align
| Ensure that your math
| in xaringan hath
| been placed on a single long line
El resultado es:
When dollars appear it’s a sign
that your code does not quite align
Ensure that your math
in xaringan hath
been placed on a single long line
2.3.5. Notas al pie.
Para insertar notas al pie se utilizan, primero, los paréntesis cuadrados []
, adentro se coloca el signo ^1
y se añade un identificador.
Aparte, en cualquier parte del texto, se añade la misma sintaxis, se agrega un signo de “:” (dos puntos) y se añade el texto de la nota al pie, por ejemplo:
"Por ejemplo, para el programa Beca Universal para Estudiantes de
Educación Media Superior Benito Juárez, uno de los dos incluidos en la
'Caja Negra', el Ejecutivo propone que para el próximo año disponga de
34 mil 999 millones de pesos, es decir, 4% más [^1] que el presupuesto
aprobado en este 2021." (Ureste, 2021, 3 de noviembre)
[^1]: Esta nota es mía y no se encuentra en el texto original.
El resultado es:
“Por ejemplo, para el programa Beca Universal para Estudiantes de Educación Media Superior Benito Juárez, uno de los dos incluidos en la ‘Caja Negra’, el Ejecutivo propone que para el próximo año disponga de 34 mil 999 millones de pesos, es decir, 4% más que el presupuesto aprobado en este 2021.” (Ureste, 2021, 3 de noviembre)
2.3.6. Tablas de contenido.
En Markdown es posible incluir tablas en formato sencillo, y se elaboran manualmente mediante el uso de signos ‘|’ para separar columnas y los guiones intermedios ‘-’ para separar la fila de encabezado respecto de las filas con contenido.
En el caso de desear incluir un título a la tabla, al final de ésta se incluye el signo ‘:’ y posteriormente se redacta el título, por ejemplo:
| Número | Ítem |
|:------:|:----------------:|
| 1 | primer elemento |
| 2 | segundo elemento |
| 3 | tercer elemento |
: Aquí se escribe el título de la tabla
El resultado es:
Aquí se escribe el título de la tabla
1 |
primer elemento |
2 |
segundo elemento |
3 |
tercer elemento |
La página tables generator es una alternativa de apoyo para generar tablas en formato markdown.
2.3.7. Incluir una dirección de URL.
Esto se logra a partir de dos elementos: primero se refiere el nombre o etiqueta de referencia, y se ubica entre paréntesis cuadrados [etiqueta]
y a continuación se incluye la dirección URL ubicada entre paréntesis ()
. Por ejemplo:
[página web de tables generator](https://www.tablesgenerator.com/markdown_tables)
El resultado es:
página web de tables generator
En caso de desear que se visualice la liga URL completa, entonces se usan los signos de < >
al inicio y al final de la dirección URL, por ejemplo:
la página "tables generator" `<https://www.tablesgenerator.com/markdown_tables>`.
Esta es la liga URL de la página “tables generator” <https://www.tablesgenerator.com/markdown_tables>
.
2.3.8. Incluir una imagen en el texto.
Esto se logra a partir de varios elementos: ! + [etiqueta] + (ruta de acceso a la imagen dentro del disco duro)
.
Por defecto, R Markdown buscará la imágenes dentro del directorio de trabajo en que se encuentra enraizado, por lo que, si la imagen se encuentra dentro del mismo directorio entonces solo se requiere escribir el nombre del archivo de imagen dentro de los paréntesis, incluyendo el formato del archivo de imagen (ya sea .jpg, .jpeg, .pdf, .png u otro).

El resultado es: 
En caso de que la imagen se encuentre fuera del directorio de trabajo pero, a su vez, se encuentra dentro del disco duro, entonces sí se debe escribir la ruta de acceso al archivo de imagen dentro de los paréntesis.

El resultado es:
Otra opción para insertar imágenes es a partir de “traer” al texto archivos que se encuentran ubicados en internet, para ello se requiere señalar la dirección URL del archivo de imagen, lo que se escribe dentro de los paréntesis.

El resultado es:
2.3.8.1. Controlar el tamaño de las imágenes.
Hay diversas maneras de controlar el tamaño de las imágenes. Aquí se revisa la manera de hacerlo directamente sobre el comando que inserta una imagen (en vez de hacerlo desde el “chunk” de código).
Para ello se utiliza el comando del lenguaje Markdown: 
y posteriormente se le añade el argumento que define su tamaño mediante los argumentos {width = 50%}
o {height = 50%}
, de la siguiente manera:
{width = 50% height=50%}
Por ejemplo:
El tamaño original de la imagen es: 
Y se solicita el cambio de tamaño al 50% de la imagen original, de la siguiente manera:
{width="50%" height="50%"}
2.3.9. Incluir comentarios en el texto sin que aparezcan en el “output”.
Para incluir comentarios en el texto y que no aparezcan en el “output” se incluye el script <!-- your comment -->
, y el texto puede tener una o varias líneas de longitud. También existen “shortcut” con el teclado para incluir el script: Ctrl + Shift + C
(Command + Shift + C
enmacOS). Por ejemplo:
"Por ejemplo, para el programa Beca Universal para Estudiantes de
Educación Media Superior Benito Juárez <!-- Debo comprobar los datos sobre esta política educativa -->, uno de los dos incluidos en la
'Caja Negra', el Ejecutivo propone que para el próximo año disponga de
34 mil 999 millones de pesos, (...)."
El resultado es: “Por ejemplo, para el programa Beca Universal para Estudiantes de Educación Media Superior Benito Juárez , uno de los dos incluidos en la ‘Caja Negra’, el Ejecutivo propone que para el próximo año disponga de 34 mil 999 millones de pesos, (…).”
LS0tCnRpdGxlOiAiTGFib3JhdG9yaW8gZGUgZXN0YWTDrXN0aWNhIGNvbiBSLCBJSS4iCnN1YnRpdGxlOiAiQ29tYW5kb3MgYsOhc2ljb3MgZGUgbGEgc2ludGF4aXMgZGUgTWFya2Rvd24uIgphdXRob3I6ICJHdXN0YXZvIE1hcnTDrW5lei1WYWxkZXMiCmRhdGU6ICIyLzQvMjAyMiIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIHRvY19kZXB0aDogNQogICAgdG9jX2Zsb2F0OiBUUlVFCiAgICBudW1iZXJfc2VjdGlvbjogRkFMU0UKICAgIHRoZW1lOiAiY29zbW8iCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCmVkaXRvcl9vcHRpb25zOiAKICBtYXJrZG93bjogCiAgICB3cmFwOiA3MgotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAojIDEuIFIgTWFya2Rvd24uCgojIyAxLjEuIMK/UXXDqSBlcyBSIE1hcmtkb3duPwoKUiBNYXJrZG93biBwdWVkZSBkZWZpbmlyc2UgY29tbyB1biBlY29zaXN0ZW1hIGRlbnRybyBkZSAqKlIqKiB5ICoqUiBTdHVkaW8qKiBxdWUgcGVybWl0ZSBsYSBlbGFib3JhY2nDs24gZGUgZGl2ZXJzb3MgdGlwb3MgZGUgdGV4dG9zIChkb2N1bWVudG9zIGRlIHRleHRvLCBwcmVzZW50YWNpb25lcywgYXBsaWNhY2lvbmVzIGJhc2FkYXMgZW4gdGV4dG8pLCB5IHF1ZSBwZXJtbWl0ZSBsYSBpbnRlZ3JhY2nDs24gZGUgZWxlbWVudG9zIGRpZmVyZW50ZXMgY29tbyB0ZXh0byAoZW4gZm9ybWF0byAqKk1hcmtkb3duKiosIGPDs2RpZ28gZGUgKipSKiosIHJlc3VsdGFkb3MgZGUgYW7DoWxpc2lzIGRlcml2YWRvcyBkZSBkaWNob3MgY8OzZGlnb3MsIGFzw60gY29tbyBmb3JtYXRvIGRlIGFjdWVyZG8gYSBsYXMgbmVjZXNpZGFkZXMgZGUgbG9zIGF1dG9yZXMsIGxvIHF1ZSBzZSBkZWxpbWl0YSBlbiBsYSBzZWNjacOzbiBkZSBsb3MgKm1ldGFkYWRvcyogbyAqKllBTUwqKikuCgojIyAxLjIuIFBhcnRlcyBkZSB1biBkb2N1bWVudG8gZW4gZm9ybWF0byAqKlJtYXJrZG93bioqLgpVbiBkb2N1bWVudG8gZW4gZm9ybWF0byBgcm1hcmtkb3duKClgIGVzdMOhIGludGVncmFkbyBwb3IgMyBwYXJ0ZXM6CgoxLiAqWUFNTCoqIChZZXQgQW5vdGhlciBNYXJrZG93biBMYW5ndWFnZSksIHF1ZSBjb250aWVuZSBsb3MgbWV0YWRhdG9zIGRlbCBkb2N1bWVudG8uCjIuIExhIHNlY2Npw7NuIGRlICoqdGV4dG8gZW5yaXF1ZWNpZG8qKiwgZG9uZGUgZWwgYXV0b3IgcHJlc2VudGEgbGEgcmVkYWNjacOzbiBkZXNlYWRhLCB1dGlsaXphbmRvIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGRlIGVzY3JpdHVyYSBkZSAqKm1hcmtkb3duKiouCjMuIExhcyBzZWNjaW9uZXMgZGUgKipjw7NkaWdvIGRlIFIqKiwgcXVlIHNlIHB1ZWRlbiBpbnRlZ3JhciBtZWRpYW50ZSBkb3MgbWFuZXJhczoKICBpLiBhIHRyYXbDqXMgZGUgYGNodW5rc2AgbyAidHJvem9zIiBkZSBjw7NkaWdvLAogIGlpLiBhIHRyYXbDqXMgZGUgY8OzZGlnbyBkZW50cm8gZGUgY2FkYSBsw61uZWEgZGUgdGV4dG8gZW4gbGEgcmVkYWNjacOzbi4KCgojIDIuIE1hcmtkb3duCgojIyAyLjEuIMK/UXXDqSBlcyBNYXJrZG93bj8KCkVzIHVuIGxlbmd1YWplIGRlICJtYXJjYWRvIGxpZ2VybyIgY3JlYWRvIHBvciBKb2huIEdydWJlciBlbiBlbCBhw7FvIDIwMDQgcXVlIHRyYXRhIGRlIGxvZ3JhciBvIHBlcm1pdGlyIGZhY2lsaWRhZCBlbiBsYSBsZWN0dXJhIHkgZW4gbGEgZXNjcml0dXJhIGRlIGRvY3VtZW50b3MsIGV2aXRhbmRvIGRpc3RyYWNjaW9uZXMgeSBjb21wbGljYWNpb25lcywgeSBxdWUgcHVlZGUgc2VyICpyZW5kZXJpemFkbyogKHRyYW5zZm9ybWFkbykgZW4gZGl2ZXJzb3MgZm9ybWF0b3MuXApFcyB1bmEgbWFuZXJhIGRlIHNpbXBsaWZpY2FyIGxhIGVzY3JpdHVyYSBlbiBsYSBlcmEgZGlnaXRhbCwgZW4gZG9uZGUgc2UKZGViZSBwdWJsaWNhciBlbCBtaXNtbyB0ZXh0byBlbiBmb3JtYXRvcyBkaWZlcmVudGVzLiBEZSBtYW5lcmEgbcOhcwpjb25jcmV0YSwgKipNYXJrZG93bioqIGVzIHVuYSBzaW50YXhpcyBxdWUgcGVybWl0ZSBpbmNvcnBvcmFyIGVsZW1lbnRvcwpkZSAqdGV4dG8gZW5yaXF1ZWNpZG8qIGVuIGVsZW1lbnRvcyBkZSAqdGV4dG8gcGxhbm8qLlwKCkVsICp0ZXh0byBlbnJpcXVlY2lkbyogY29uc2lzdGUgZW4gY2FyYWN0ZXJlcyBkZSB0ZXh0byBhIGxvcyBxdWUgc2UgbGVzCmHDsWFkZSBmb3JtYXRvIChuZWdyaXRhcywgY3Vyc2l2YXMsIHN1YnJheWFkbywgaW50ZXJsaW5lYWRvLCBlc3BhY2lvcwplbnRyZSBwYWxhYnJhcywgZXRjLikuIEVsICp0ZXh0byBwbGFubyogc29sbyBjb25zaXN0ZSBlbiBsZXRyYXMsCm7Dum1lcm9zLCBzaWdub3MgZGUgcHVudHVhY2nDs24geSBhbGd1bm9zIHPDrW1ib2xvcywgc2luIGVsZW1lbnRvcyBkZQpmb3JtYXRvLlwgCkxhICpzaW50YXhpcyogY29uc2lzdGUgZW4gZWwgc2lzdGVtYSBwYXJhIHV0aWxpemFyIHPDrW1ib2xvcyB5CmNhcmFjdGVyZXMsIHF1ZSBsZSBleHBsaWNhbiBhbCBwcm9jZXNhZG9yIGRlIHVuYSBjb21wdXRhZG9yYSBsYSBtYW5lcmEKZW4gcXVlIHNlIGRlYmVuIHJlYWxpemFyIGFsZ3VuYXMgdGFyZWFzIHksIGVzcGVjw61maWNhbWVudGUgc2UgcmVmaWVyZSBhCmxhIGFwYXJpZW5jaWEgZGVzZWFkYSBkZWwgdGV4dG8uCgoKIyMgMi4yLiBWZW50YWphcyBkZSBlc2NyaWJpciBlbiBmb3JtYXRvICoqTWFya2Rvd24qKi4KCjEuICBFbmZvY2Fyc2UgZW4gbGEgZXNjcml0dXJhIHkgbm8gcHJvY3Jhc3RpbmFyIGNvbiBlbGVtZW50b3MgZGUKICAgIGZvcm1hdG8uCjIuICBQZXJtaXRlIGV4cG9ydGFyIGVsIGNvbnRlbmlkbyBkZSBNYXJrZG93biBhIGZvcm1hdG9zIGRpdmVyc29zIChodG1sLCBwZGYsCiAgICB3b3JkLCB3ZWIgcGFnZXMpLgozLiAgTG9zIGFyY2hpdm9zIHNlIHB1ZWRlbiBhYnJpciBlbiBjdWFscXVpZXIgZm9ybWF0bywgYcO6biBjdWFuZG8gZW4gZWwKICAgIGZ1dHVybyBjYW1iaWVuIGxvcyBwcm9ncmFtYXMgZGUgdGV4dG8uCjQuICBMb3MgYXJjaGl2b3Mgc29uICJsaWdlcm9zIiB5IGbDoWNpbGVzIGRlIHNpbmNyb25pemFyIGVudHJlIGRpc3RpbnRvcwogICAgZGlzcG9zaXRpdm9zLgo1LiAgRmFjaWxpZGFkIHBhcmEgY29tcGFydGlyIHkgY29sYWJvcmFyLgo2LiAgTGFzIGNpdGFjaW9uZXMgc2UgcHVlZGVuIGF1dG9mb3JtYXRlYXIuCgoKCiMjIDIuMy4gRWxlbWVudG9zIGRlIHNpbnRheGlzIGVuICoqTWFya2Rvd24qKgoKIyMjIDIuMy4xLiBSZXNhbHRhciB0ZXh0bwoKKiBTaSBzZSBkZXNlYSByZXNhbHRhciB1bmEgcGFsYWJyYSBlbiAqKipuZWdyaXRhcyBlIGl0w6FsaWNhKioqIGEgbGEgdmV6LApzZSB1c2EgdHJpcGxlIFwqXCpcKiBhbnRlcyB5IGRlc3B1w6lzIGRlIGxhIHBhbGFicmEuXApgYGAKcGFsYWJyYSBlbiAqKipuZWdyaXRhcyBlIGl0w6FsaWNhKioqCmBgYAoKKiBTaSBzZSBkZXNlYSByZXNhbHRhciB1bmEgcGFsYWJyYSBlbiAqKm5lZ3JpdGFzKiogc2UgdXNhIGRvYmxlIFwqXCogYW50ZXMKeSBkZXNwdcOpcyBkZSBsYSBwYWxhYnJhLlwKYGBgCnBhbGFicmEgZW4gKipuZWdyaXRhcyoqCmBgYAoKKiBTaSBzZSBkZXNlYSByZXNhbHRhciB1bmEgcGFsYWJyYSBlbiAqaXTDoWxpY2FzKiBzZSB1c2EgdW4gXCogc2VuY2lsbG8KYW50ZXMgeSBkZXNwdcOpcyBkZSBsYSBwYWxhYnJhLlwKYGBgCnBhbGFicmEgZW4gKml0w6FsaWNhcyoKYGBgCgoqIFNpIHNlIGRlc2VhIGluY2x1aXIgdW4gKnN1YiDDrW5kaWNlKiBzZSB1dGlsaXphIGxhIHRpbGRlIGRlIGxhICLDsSIsIGRlCm1hbmVyYSBxdWUgRn4yfi5cCmBgYAppbmNsdWlyIGVsIHN1YsOtbmRpY2UgMiBlbiBGOiAgRn4yfgpgYGAKCiogU2kgc2UgZGVzZWEgaW5jbHVpciB1biAqc3VwZXIgw61uZGljZSogc2UgdXRpbGl6YSBlbCBhY2VudG8gY2lyY3VuZmxlam8sCmRlIG1hbmVyYSBxdWUgRl4yXi4KYGBgCmluY2x1aXIgZWwgc3VwZXIgw61uZGljZSA0IGVuIEY6ICBGXjJeCmBgYAoKIyMjIyAyLjMuMS4xLiBDYW1iaWFyIGRlIGNvbG9yIGFsIHRleHRvLgoKRXN0byBkZXBlbmRlIGRlbCB0aXBvIGRlIGZvcm1hdG8gZGUgc2FsaWRhOiBodG1sIG8gcGRmLCBwdWVzIHNlIHVzYW4gY29tYW5kb3MgZGlmZXJlbnRlcy4KCi0gUGFyYSAqKmh0bWwqKiwgZWwgdGV4dG8gYSBjYW1iaWFyIGRlIGNvbG9yIHNlIGluY2x1eWUgZW4gYDxzcGFuPmAgeSBwb3N0ZXJpb3JtZW50ZSBgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij50ZXh0bzwvc3Bhbj5gLCBwb3IgZWplbXBsbzoKYGBgClJvc2VzIGFyZSA8c3BhbiBzdHlsZT0iY29sb3I6IGdyZWVuOyI+cmVkPC9zcGFuPiwgdmlvbGV0cyBhcmUgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5ibHVlPC9zcGFuPi4KYGBgCgpFbCByZXN1bHRhZG8gZXM6IAoKUm9zZXMgYXJlIDxzcGFuIHN0eWxlPSJjb2xvcjogZ3JlZW47Ij5yZWQ8L3NwYW4+LCB2aW9sZXRzIGFyZSA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPmJsdWU8L3NwYW4+LgoKCi0gUGFyYSB1biAqKnBkZioqLCBzZSB1c2FuIGNvbWFuZG9zIGRlIExhVGVYIGBcdGV4dGNvbG9ye2NvbG9yfXt0ZXh0b31gLCBkZSBtYW5lcmEgcXVlLCBwb3IgZWplbXBsbzogCmBgYApSb3NlcyBhcmUgXHRleHRjb2xvcntyZWR9e3JlZH0sIHZpb2xldHMgYXJlIFx0ZXh0Y29sb3J7Ymx1ZX17Ymx1ZX0uCmBgYApFbCBwcmltZXIgcGFyw6ludGVzaXMgcmVmaWVyZSBlbCBjb2xvciBkZXNlYWRvIHkgZWwgc2VndW5kbyBjb250aWVuZSBlbCB0ZXh0byBzb2JyZSBlbCBxdWUgc2UgZGViZSBhcGxpY2FyIGVsIGNvbG9yLgoKRWwgcmVzdWx0YWRvIGVzOgoKUm9zZXMgYXJlIFx0ZXh0Y29sb3Ige3JlZH17cmVkfSwgdmlvbGV0cyBhcmUgXHRleHRjb2xvciB7Ymx1ZX17Ymx1ZX0uCgojIyMgMi4zLjIuIEFwYXJ0YWRvcyB5IHN1YiBhcGFydGFkb3MuXApQYXJhIGFzaWduYXIgYXBhcnRhZG9zIHkgc3ViIGFwYXJ0YWRvcyBzZSB1dGlsaXphIGVsIHNpZ25vIGRlICIjIgoobsO6bWVybykuIEVsIGFwYXJ0YWRvIGluaWNpYWwgbyBtYXlvciBzZSBpbmRpY2EgY29uIHNvbG8gdW4gc2lnbm8gIiMiLCB5CmEgbWVkaWRhIHF1ZSBzZSBhdW1lbnRhIGxhIGNhbnRpZGFkIGRlIHNpZ25vcywgZW50b25jZXMgc2UgdmFuCnBvc2ljaW9uYW5kbyBjb21vIHN1YiBhcGFydGFkb3MsIHkgZWwgdGFtYcOxbyBkZSBsYSB0aXBvZ3JhZsOtYSB2YSBkZWNyZWNpZW5kby5cClBvciBlamVtcGxvOgoKIyAxLiBBcGFydGFkbyBwcmluY2lwYWwuICgxICMpCgojIyAxLjEuIFByaW1lciBwYXJ0YWRvIHNlY3VuZGFyaW8uICgyICMjKQoKIyMjIDEuMS4xLiBTdWIgYXBhcnRhZG8gcHJpbWVybyBkZWwgUHJpbWVyIGFwYXJ0YWRvIHNlY3VuZGFyaW8uICgzICMjIykKCiMjIyMgMS4xLjEuMS4gU3ViIHN1YiBhcGFydGFkbyBwcmltZXJvIGRlbCBQcmltZXIgYXBhcnRhZG8gc2VjdW5kYXJpby4gKDQgIyMjIykKCiMjIyAxLjEuMi4gU3ViIGFwYXJ0YWRvIHNlZ3VuZG8gZGVsIFByaW1lciBhcGFydGFkbyBzZWN1bmRhcmlvLiAoMyAjIyMpCgojIyAxLjIuIFNlZ3VuZG8gYXBhcnRhZG8gc2VjdW5kYXJpby4gKDIgIyMpCgojIDIuIFNlZ3VuZG8gYXBhcnRhZG8gcHJpbmNpcGFsLiAoMSAjKQoKIyMjIyAyLjMuMi4xLiBPbWl0aXIgZW5jYWJlemFkb3MuCgpFbiBjYXNvIGRlIGRlc2VhciBxdWUgdW4gZW5jYWJlemFkbyAocXVlIGNvbWllbmNlIGNvbiAiXCMiIG5vIHNlYSBpbmNsdWlkbyBlbiBsYSBlbm51bWVyYWNpw7NuIG8gbGlzdGFkbyBjb3JyZXNwb25kaWVudGUpIHNlIHV0aWxpemEgZWwgc2NyaXB0IGB7LnVubGlzdGVkIC51bm51bWJlcmVkfWAgZGVzcHXDqXMgZGVsIHTDrXR1bG8gc2XDsWFsYWRvIGNvbiAiIlwjIiwgZGUgbGEgc2lndWllbnRlIG1hbmVyYTogCmBgYAojIFNlY3Rpb24gaGVhZGluZyB7LnVubGlzdGVkIC51bm51bWJlcmVkfQpgYGAKCgojIyMgMi4zLjMuTGlzdGFkb3MuXApFbiBSIE1hcmtkb3duIHNlIHB1ZWRlbiByZWFsaXphciBkb3MgdGlwb3MgbyBmb3JtYXRvcyBkZSBsaXN0YXM6Cm9yZGVuYWRhcyBvIG51bWVyYWRhcyB5IGxhcyBubyBvcmRlbmFkYXMuXAoKTGEgcmVhbGl6YWNpw7NuIGRlIGxpc3RhZG9zIG9yZGVuYWRvcyBzZSByZWFsaXphIGFudGVwb25pZW5kbyBlbCBuw7ptZXJvIHkgdW4gZXNwYWNpbyBhbnRlcyBkZSBjYWRhCnRleHRvLCBhZGVtw6FzIGRlIGRlamFyIHVuIGVzcGFjaW8gZW50cmUgZWwgcMOhcnJhZm8gcHJldmlvIHkgZWwgaW5pY2lvIGRlbCBsaXN0YWRvLCBwb3IgZWplbXBsbzoKYGBgCjEuICBFbCBwcmltZXIgZWxlbWVudG8uCjIuICBFbCBzZWd1bmRvIGVsZW1lbnRvLgozLiAgRWwgdGVyY2VyIGVsZW1lbnRvLgo0LiAgRXRjLgpgYGAKCkVsIHJlc3VsdGFkbyBlczoKCjEuICBFbCBwcmltZXIgZWxlbWVudG8uCjIuICBFbCBzZWd1bmRvIGVsZW1lbnRvLgozLiAgRWwgdGVyY2VyIGVsZW1lbnRvLgo0LiAgRXRjLgoKVGFtYmnDqW4gc2UgcHVlZGVuIG9yZGVuYXIgdXRpbGl6YW5kbyBsZXRyYXM6CmBgYAphLiAgUHJpbWVyIGVsZW1lbnRvCmIuICBTZWd1bmRvIGVsZW1lbnRvCmMuICBUZXJjZXIgZWxlbWVudG8KYGBgCgpFbCByZXN1bHRhZG8gZXM6CgphLiAgUHJpbWVyIGVsZW1lbnRvCmIuICBTZWd1bmRvIGVsZW1lbnRvCmMuICBUZXJjZXIgZWxlbWVudG8KCkVuIGNhc28gZGUgcmVhbGl6YXIgdW4gbGlzdGFkbyBzaW4gamVyYXJxdcOtYSBvIG51bWVyYWNpw7NuLCBzb2xvIHNlCmNvbG9jYSB1biAiXCoiIG8gdW4gZ3Vpw7NuIGludGVybWVkaW8gIlwtIiB5IHVuIGVzcGFjaW8gYW50ZXMgZGUgY2FkYSB0ZXh0bzoKYGBgCi0gICBQcmltZXIgZWxlbWVudG8uCi0gICBTZWd1bmRvIGVsZW1lbnRvLgotICAgVGVyY2VyIGVsZW1lbnRvLgotICAgRXRjLgpgYGAKCkVsIHJlc3VsdGFkbyBlczoKCi0gICBQcmltZXIgZWxlbWVudG8uCi0gICBTZWd1bmRvIGVsZW1lbnRvLgotICAgVGVyY2VyIGVsZW1lbnRvLgotICAgRXRjLgoKT3RyYSBvcGNpw7NuIHNvbiBsaXN0YWRvcyBtZXpjbGFkb3MsIHBhcmEgbG8gcXVlIHNlIHVzYSBkb3MgInRhYiIgcGFyYQpsb3Mgc3ViIGVsZW1lbnRvczoKYGBgCjEuICBQcmltZXIgZWxlbWVudG8KCjIuICBTZWd1bmRvIGVsZW1lbnRvCgogICAgMS4gIFByaW1lciBzdWIgZWxlbWVudG8gKGluY2x1eWUgZG9zICJ0YWIiKQogICAgMi4gIFNlZ3VuZG8gc3ViIGVsZW1lbnRvIChpbmNsdXllIGRvcyAidGFiIikKCjMuICBUZXJjZXIgZWxlbWVudG8KCiAgICAtICAgT3RybyBzdWIgZWxlbWVudG8gbm8gb3JkZW5hZG8gKGluY2x1eWUgZG9zICJ0YWIiKQogICAgLSAgIE90cm8gc3ViIGVsZW1lbnRvIG5vIG9yZGVuYWRvIChpbmNsdXllIGRvcyAidGFiIikKYGBgCgpFbCByZXN1bHRhZG8gZXM6CgoxLiAgUHJpbWVyIGVsZW1lbnRvCgoyLiAgU2VndW5kbyBlbGVtZW50bwoKICAgIDEuICBQcmltZXIgc3ViIGVsZW1lbnRvIChpbmNsdXllIGRvcyAidGFiIikKICAgIDIuICBTZWd1bmRvIHN1YiBlbGVtZW50byAoaW5jbHV5ZSBkb3MgInRhYiIpCgozLiAgVGVyY2VyIGVsZW1lbnRvCgogICAgLSAgIE90cm8gc3ViIGVsZW1lbnRvIG5vIG9yZGVuYWRvIChpbmNsdXllIGRvcyAidGFiIikKICAgIC0gICBPdHJvIHN1YiBlbGVtZW50byBubyBvcmRlbmFkbyAoaW5jbHV5ZSBkb3MgInRhYiIpCgoKIyMjIDIuMy40LiBTZXBhcmFjacOzbi5cCgojIyMjIDIuMy40LjEuIFJlbmdsb25lcyBjb250aW51b3MuCkxhIG1hbmVyYSBkZSBlc2NyaWJpciB1biBww6FycmFmbyBlbiBSIE1hcmtkb3duIGVzIGEgcGFydGlyIGRlIHViaWNhciBlbApjdXJzb3IgZW4gdW5hIGzDrW5lYSBudW1lcmFkYSB5LCBhc8OtLCBjb250aW51YXIgZXNjcmliaWVuZG8gc2luIGRldGVuZXJzZQpoYXN0YSBlbCBwdW50byBmaW5hbC4gQSBtZWRpZGEgcXVlIGVsIHDDoXJyYWZvIHNlYSBjYWRhIHZleiBtw6FzIGxhcmdvLAphdXRvbcOhdGljYW1lbnRlIGVsIHRleHRvIGlyw6EgYmFqYW5kbyBkZSBsw61uZWFzLCBwZXJvIGFob3JhIGVzdGFzIG5vCmVzdMOhbiBudW1lcmFkYXMuIFIgTWFyZG93biBsZWUgZXN0YXMgbMOtbmVhcyBuby1udW1lcmFkYXMgY29tbyBwYXJ0ZSBkZQp1biBtaXNtbyBww6FycmFmbywgeSBubyBoYWNlIGNvcnRlcyBuaSBzYWx0b3MuCgpBw7puIHNpIHNlIGRhIHVuIHNvbG8gImNsaWNrIiBhIGxhIHRlY2xhICJFTlRFUiIsIHkgZW4gZWwgdmlzb3IgZGUgUiBNYXJrZG93bgpzZSBjYW1iaWEgZGUgbMOtbmVhIG51bWVyYWRhLCBlbiBlbCBjYXNvIGRlbCAib3V0cHV0IiAoaHRtbCwgcGRmIG8gd29yZCkgbm8gaGFicsOhCm9jdXJyaWRvIHVuIHNhbHRvIGRlIHDDoXJyYWZvLCBzaW5vIHF1ZSBjb250aW51YSBjb21vIHBhcnRlIGRlIHVuIG1pc21vCnDDoXJyYWZvLiBQb3IgZWplbXBsbzoKCmBgYAoiRXN0ZSBlcyBlbCBww6FycmFmbyBkZSBsYSBsw61uZWEgODAuCkVzdGUgZXMgZWwgcMOhcnJhZm9yIGRlIGxhIGzDrW5lYSA4MS4iCmBgYApFbCByZXN1bHRhZG8gZXM6XAoiRXN0ZSBlcyBlbCBww6FycmFmbyBkZSBsYSBsw61uZWEgODAuIApFc3RlIGVzIGVsIHDDoXJyYWZvIGRlIGxhIGzDrW5lYSA4MS4iCgojIyMjIDIuMy40LjIuIFNlcGFyYWNpw7NuIGVudHJlIHJlbmdsb25lcy4KUGFyYSBsb2dyYXIgbGEqc2VwYXJhY2nDs24gZW50cmUgbMOtbmVhcyogbyAic2FsdGFyIGzDrW5lYXMgc2VndWlkYXMiIGRlbnRybyBkZSB1bgptaXNtbyBww6FycmFmbywgc2UgdXRpbGl6YSB1biAiZG9ibGUgZXNwYWNpbyIgYWwgZmluYWwgZGVsIHJlbmdsw7NuIHF1ZSBzZSBkZXNlYSBzZXBhcmFyIChkb3MgdmVjZXMgYSBsYSBiYXJyYQplc3BhY2lhZG9yYSk7IHRhbWJpw6luIHNlIHB1ZWRlIHV0aWxpemFyIHVuYSBiYXJyYSBkaWFnb25hbCBgcGFsYWJyYSBmaW5hbC5cYCwgIlxcIiBhbCBmaW5hbCBkZWwgcmVuZ2zDs24uClBvciBlamVtcGxvOgpgYGAKIkVzdGUgZXMgZWwgcMOhcnJhZm8gZGUgbGEgbMOtbmVhIDg1LlwKRXN0ZSBlcyBlbCBww6FycmFmb3IgZGUgbGEgbMOtbmVhIDg2Ii4KYGBgCkVsIHJlc3VsdGFkbyBlczogCiJFc3RlIGVzIGVsIHDDoXJyYWZvIGRlIGxhIGzDrW5lYSA4NS5cCkVzdGUgZXMgZWwgcMOhcnJhZm8gZGUgbGEgbMOtbmVhIDg2LiIKCiMjIyMgMi4zLjQuMy4gU2VwYXJhY2nDs24gZW50cmUgcMOhcnJhZm9zLgpQYXJhICpzZXBhcmFyIHDDoXJyYWZvcyBlbnRyZSBzw60qIHNlIGRlamEgdW5hIGzDrW5lYSBudW1lcmFkYSB2YWPDrWEgZW50cmUKYW1ib3MsIHBvciBlamVtcGxvOlwKYGBgCiIiUG9yIHNlZ3VuZG8gYcOxbyBjb25zZWN1dGl2bywgbGEgbWF5b3LDrWEgZGUgbG9zIHByb2dyYW1hcyBzb2NpYWxlcyBkZWwKR29iaWVybm8gZGUgTMOzcGV6IE9icmFkb3IgdHV2aWVyb24gZW4gMjAyMCB1biBiYWpvIGRlc2VtcGXDsW8geSBhbGd1bm9zCmRlIGVsbG9zIG9wZXJhcm9uIHRhbWJpw6luIGVuIGNvbmRpY2lvbmVzIGRlIG9wYWNpZGFkLgoKQXPDrSBsbyByZXZlbGEgZWwgw41uZGljZSBkZSBEZXNlbXBlw7FvIGRlIGxvcyBQcm9ncmFtYXMgUMO6YmxpY29zIEZlZGVyYWxlcwoyMDIxIChJTkRFUCkgZWxhYm9yYWRvIHBvciBsYSBvcmdhbml6YWNpw7NuIEFnZW5jaWEgcGFyYSBlbCBEZXNhcnJvbGxvICguLi4pLiIKYGBgCgpFbCByZXN1bHRhZG8gZXM6CgoiUG9yIHNlZ3VuZG8gYcOxbyBjb25zZWN1dGl2bywgbGEgbWF5b3LDrWEgZGUgbG9zIHByb2dyYW1hcyBzb2NpYWxlcyBkZWwKR29iaWVybm8gZGUgTMOzcGV6IE9icmFkb3IgdHV2aWVyb24gZW4gMjAyMCB1biBiYWpvIGRlc2VtcGXDsW8geSBhbGd1bm9zCmRlIGVsbG9zIG9wZXJhcm9uIHRhbWJpw6luIGVuIGNvbmRpY2lvbmVzIGRlIG9wYWNpZGFkLgoKQXPDrSBsbyByZXZlbGEgZWwgw41uZGljZSBkZSBEZXNlbXBlw7FvIGRlIGxvcyBQcm9ncmFtYXMgUMO6YmxpY29zIEZlZGVyYWxlcwoyMDIxIChJTkRFUCkgZWxhYm9yYWRvIHBvciBsYSBvcmdhbml6YWNpw7NuIEFnZW5jaWEgcGFyYSBlbCBEZXNhcnJvbGxvICguLi4pLiIgKFVyZXN0ZSwgMjAyMSwgMyBkZSBub3ZpZW1icmUgZGUKMjAyMSkKCgojIyMgMi4zLjUuIEluc2VydGFyIHVuIHNhbHRvIGRlIHDDoWdpbmEuCgpQYXJhIGluc2VydGFyIHVuIHNhbHRvIGRlIHDDoWdpbmEgc2UgdXRpbGl6YSBlbCBzY3JpcHQgYFxuZXdwYWdlYCwgcXVlIGVzIHBhcnRlIGRlbCBsZW5ndWFqZSBkZSBMYVRlWCBwZXJvIHF1ZSwgYSBzdSB2ZXosIHJlY29ub2NlIGVsIHBhcXVldGUgZGUgYHJtYXJrZG93bmAuCgpQb3IgZWplbXBsbzpcCmBgYAoiQ29udGVuaWRvIGRlIHDDoWdpbmEgMS4gXG5ld3BhZ2UgCkNvbnRlbmlkbyBkZSBww6FnaW5hIDIuIgpgYGAKCiJDb250ZW5pZG8gZGUgcMOhZ2luYSAxLiBcbmV3cGFnZSAKQ29udGVuaWRvIGRlIHDDoWdpbmEgMi4iCgoKIyMjIDIuMy40LiBJbnNlcnRhciBjaXRhcyBsYXJnYXMgZW4gcMOhcnJhZm9zIHNlcGFyYWRvcy4KRW4gY2FzbyBkZSB1bmEgKmNpdGEgbGFyZ2EqIHkgZGUgbGEgcXVlIHNlIGRlc2VhIHNlcGFyYXIgdW4gYmxvcXVlIGRlCnRleHRvLCBzZSB1dGlsaXphIGVsIHNpZ25vIGRlIGBcPmAgeSBzZSBhw7FhZGUgdW4gImVzcGFjaW8iIGFudGVzIGRlbCBpbmljaW8gZGVsCnDDoXJyYWZvLCBwb3IgZWplbXBsbzoKCmBgYAo+IEVudHJlIGxvcyBwcm9ncmFtYXMgY29uIHVuIGVzY2FzbyBkZXNlbXBlw7FvIGhheSBhbGd1bm9zIGRlIGxvcwpjb25zaWRlcmFkb3MgJ2VzdHJlbGxhJyBlbiBsYSBwcmVzZW50ZSBhZG1pbmlzdHJhY2nDs24sIGNvbW8gU2VtYnJhbmRvClZpZGEsIGVsIHByb2dyYW1hIGRlIHJlZm9yZXN0YWNpw7NuIGNvbiBlbCBxdWUgZWwgR29iaWVybm8gYWN0dWFsIGhhCmRpY2hvIHF1ZSBidXNjYSBjb21iYXRpciBsb3MgZWZlY3RvcyBkZWwgY2FtYmlvIGNsaW3DoXRpY28gZW4gTcOpeGljby4KT3Ryb3MgY29uIGJham8gcmVuZGltaWVudG8gc29uIGVsIGRlIEJlY2FzIHBhcmEgcGVyc29uYXMgY29uCmRpc2NhcGFjaWRhZCwgeSBlbCBwcm9ncmFtYSBkZSBVbml2ZXJzaWRhZGVzIHBhcmEgZWwgQmllbmVzdGFyIEJlbml0bwpKdcOhcmV6LiBQb3IgZWwgY29udHJhcmlvLCBlbCBwcm9ncmFtYSBkZSBQZW5zacOzbiBwYXJhIEFkdWx0b3MgTWF5b3Jlcwplc3TDoSBlbnRyZSBsb3MgcXVlIG1lam9yIHJlbmRpbWllbnRvIGhhbiB0ZW5pZG8uCmBgYApFbCByZXN1bHRhZG8gZXM6XAoKPiBFbnRyZSBsb3MgcHJvZ3JhbWFzIGNvbiB1biBlc2Nhc28gZGVzZW1wZcOxbyBoYXkgYWxndW5vcyBkZSBsb3MgY29uc2lkZXJhZG9zICdlc3RyZWxsYScgZW4gbGEgcHJlc2VudGUgYWRtaW5pc3RyYWNpw7NuLCBjb21vIFNlbWJyYW5kbwpWaWRhLCBlbCBwcm9ncmFtYSBkZSByZWZvcmVzdGFjacOzbiBjb24gZWwgcXVlIGVsIEdvYmllcm5vIGFjdHVhbCBoYQpkaWNobyBxdWUgYnVzY2EgY29tYmF0aXIgbG9zIGVmZWN0b3MgZGVsIGNhbWJpbyBjbGltw6F0aWNvIGVuIE3DqXhpY28uCk90cm9zIGNvbiBiYWpvIHJlbmRpbWllbnRvIHNvbiBlbCBkZSBCZWNhcyBwYXJhIHBlcnNvbmFzIGNvbgpkaXNjYXBhY2lkYWQsIHkgZWwgcHJvZ3JhbWEgZGUgVW5pdmVyc2lkYWRlcyBwYXJhIGVsIEJpZW5lc3RhciBCZW5pdG8KSnXDoXJlei4gUG9yIGVsIGNvbnRyYXJpbywgZWwgcHJvZ3JhbWEgZGUgUGVuc2nDs24gcGFyYSBBZHVsdG9zIE1heW9yZXMKZXN0w6EgZW50cmUgbG9zIHF1ZSBtZWpvciByZW5kaW1pZW50byBoYW4gdGVuaWRvLgoKIyMjIyAyLjMuNC4xLiBJbnNlcnRhciBzYW5ncsOtYXMuClVuYSBtYW5lcmEgImNydWRhIiBkZSBjb2xvY2FyIHNhbmdyw61hIGVzIG1lZGlhbnRlIGxhIHRlY2xhIGB8YCBhbCBpbmljaW8gZGUgdW4gcMOhcnJhZm8uClNlIGRlYmUgcmVjb3JkYXIgcXVlIG1hcmtkb3duIG5vIHJlY29ub2NlIGxvcyBlc3BhY2lvcyBlbiBibGFuY28sIG8gbG9zIGlnbm9yYSB5IGp1bnRhIHJlbmdsb25lcyBzZXBhcmFkb3MuIFBvciBlbGxvIHNlIGxlIGRlYmUgaW5kaWNhciBlbCBsdWdhciBkZSBsb3MgZXNwYWNpb3MgdmFjw61vcyBhIG1hbmVyYSBkZSBzYW5ncsOtYXMuCmBgYAp8IFdoZW4gZG9sbGFycyBhcHBlYXIgaXQncyBhIHNpZ24KfCAgIHRoYXQgeW91ciBjb2RlIGRvZXMgbm90IHF1aXRlIGFsaWduICAKfCBFbnN1cmUgdGhhdCB5b3VyIG1hdGggIAp8ICAgaW4geGFyaW5nYW4gaGF0aCAgCnwgICBiZWVuIHBsYWNlZCBvbiBhIHNpbmdsZSBsb25nIGxpbmUKYGBgCgpFbCByZXN1bHRhZG8gZXM6Cgp8IFdoZW4gZG9sbGFycyBhcHBlYXIgaXQncyBhIHNpZ24KfCAgIHRoYXQgeW91ciBjb2RlIGRvZXMgbm90IHF1aXRlIGFsaWduICAKfCBFbnN1cmUgdGhhdCB5b3VyIG1hdGggIAp8ICAgaW4geGFyaW5nYW4gaGF0aCAgCnwgICBiZWVuIHBsYWNlZCBvbiBhIHNpbmdsZSBsb25nIGxpbmUKCgojIyMgMi4zLjUuIE5vdGFzIGFsIHBpZS4KUGFyYSBpbnNlcnRhciBub3RhcyBhbCBwaWUgc2UgdXRpbGl6YW4sIHByaW1lcm8sIGxvcyBwYXLDqW50ZXNpcwpjdWFkcmFkb3MgYFtdYCwgYWRlbnRybyBzZSBjb2xvY2EgZWwgc2lnbm8gYF4xYCB5IHNlIGHDsWFkZSB1bgppZGVudGlmaWNhZG9yLlwKQXBhcnRlLCBlbiBjdWFscXVpZXIgcGFydGUgZGVsIHRleHRvLCBzZSBhw7FhZGUgbGEgbWlzbWEKc2ludGF4aXMsIHNlIGFncmVnYSB1biBzaWdubyBkZSAiOiIgKGRvcyBwdW50b3MpIHkgc2UgYcOxYWRlIGVsIHRleHRvIGRlCmxhIG5vdGEgYWwgcGllLCBwb3IgZWplbXBsbzoKYGBgCiJQb3IgZWplbXBsbywgcGFyYSBlbCBwcm9ncmFtYSBCZWNhIFVuaXZlcnNhbCBwYXJhIEVzdHVkaWFudGVzIGRlCkVkdWNhY2nDs24gTWVkaWEgU3VwZXJpb3IgQmVuaXRvIEp1w6FyZXosIHVubyBkZSBsb3MgZG9zIGluY2x1aWRvcyBlbiBsYQonQ2FqYSBOZWdyYScsIGVsIEVqZWN1dGl2byBwcm9wb25lIHF1ZSBwYXJhIGVsIHByw7N4aW1vIGHDsW8gZGlzcG9uZ2EgZGUKMzQgbWlsIDk5OSBtaWxsb25lcyBkZSBwZXNvcywgZXMgZGVjaXIsIDQlIG3DoXMgW14xXSBxdWUgZWwgcHJlc3VwdWVzdG8KYXByb2JhZG8gZW4gZXN0ZSAyMDIxLiIgKFVyZXN0ZSwgMjAyMSwgMyBkZSBub3ZpZW1icmUpCgpbXjFdOiBFc3RhIG5vdGEgZXMgbcOtYSB5IG5vIHNlIGVuY3VlbnRyYSBlbiBlbCB0ZXh0byBvcmlnaW5hbC4KYGBgCgpFbCByZXN1bHRhZG8gZXM6XAoKIlBvciBlamVtcGxvLCBwYXJhIGVsIHByb2dyYW1hIEJlY2EgVW5pdmVyc2FsIHBhcmEgRXN0dWRpYW50ZXMgZGUKRWR1Y2FjacOzbiBNZWRpYSBTdXBlcmlvciBCZW5pdG8gSnXDoXJleiwgdW5vIGRlIGxvcyBkb3MgaW5jbHVpZG9zIGVuIGxhCidDYWphIE5lZ3JhJywgZWwgRWplY3V0aXZvIHByb3BvbmUgcXVlIHBhcmEgZWwgcHLDs3hpbW8gYcOxbyBkaXNwb25nYSBkZQozNCBtaWwgOTk5IG1pbGxvbmVzIGRlIHBlc29zLCBlcyBkZWNpciwgNCUgbcOhcyBbXjFdIHF1ZSBlbCBwcmVzdXB1ZXN0bwphcHJvYmFkbyBlbiBlc3RlIDIwMjEuIiAoVXJlc3RlLCAyMDIxLCAzIGRlIG5vdmllbWJyZSkKClteMV06IEVzdGEgbm90YSBlcyBtw61hIHkgbm8gc2UgZW5jdWVudHJhIGVuIGVsIHRleHRvIG9yaWdpbmFsLgoKCiMjIyAyLjMuNi4gVGFibGFzIGRlIGNvbnRlbmlkby4KCkVuIE1hcmtkb3duIGVzIHBvc2libGUgaW5jbHVpciB0YWJsYXMgZW4gZm9ybWF0byBzZW5jaWxsbywgeSBzZSBlbGFib3JhbiBtYW51YWxtZW50ZSBtZWRpYW50ZSBlbCB1c28gZGUgc2lnbm9zICd8JyBwYXJhIHNlcGFyYXIgY29sdW1uYXMgeSBsb3MgZ3Vpb25lcyBpbnRlcm1lZGlvcyAnLScgcGFyYSBzZXBhcmFyIGxhIGZpbGEgZGUgZW5jYWJlemFkbyByZXNwZWN0byBkZSBsYXMgZmlsYXMgY29uIGNvbnRlbmlkby5cCkVuIGVsIGNhc28gZGUgZGVzZWFyIGluY2x1aXIgdW4gdMOtdHVsbyBhIGxhIHRhYmxhLCBhbCBmaW5hbCBkZSDDqXN0YSBzZSBpbmNsdXllIGVsIHNpZ25vICc6JyB5IHBvc3Rlcmlvcm1lbnRlIHNlIHJlZGFjdGEgZWwgdMOtdHVsbywgcG9yIGVqZW1wbG86CmBgYAp8IE7Dum1lcm8gfCAgICAgICDDjXRlbSAgICAgICB8Cnw6LS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLTp8CnwgICAxICAgIHwgcHJpbWVyIGVsZW1lbnRvICB8CnwgICAyICAgIHwgc2VndW5kbyBlbGVtZW50byB8CnwgICAzICAgIHwgdGVyY2VyIGVsZW1lbnRvICB8Cgo6IEFxdcOtIHNlIGVzY3JpYmUgZWwgdMOtdHVsbyBkZSBsYSB0YWJsYQoKYGBgCkVsIHJlc3VsdGFkbyBlczoKCnwgTsO6bWVybyB8ICAgICAgIMONdGVtICAgICAgIHwKfDotLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tOnwKfCAgIDEgICAgfCBwcmltZXIgZWxlbWVudG8gIHwKfCAgIDIgICAgfCBzZWd1bmRvIGVsZW1lbnRvIHwKfCAgIDMgICAgfCB0ZXJjZXIgZWxlbWVudG8gIHwKCjogQXF1w60gc2UgZXNjcmliZSBlbCB0w610dWxvIGRlIGxhIHRhYmxhCgpMYSBww6FnaW5hIFt0YWJsZXMKZ2VuZXJhdG9yXShodHRwczovL3d3dy50YWJsZXNnZW5lcmF0b3IuY29tL21hcmtkb3duX3RhYmxlcykgZXMgdW5hCmFsdGVybmF0aXZhIGRlIGFwb3lvIHBhcmEgZ2VuZXJhciB0YWJsYXMgZW4gZm9ybWF0byBtYXJrZG93bi4KCgojIyMgMi4zLjcuIEluY2x1aXIgdW5hIGRpcmVjY2nDs24gZGUgVVJMLgoKRXN0byBzZSBsb2dyYSBhIHBhcnRpciBkZSBkb3MgZWxlbWVudG9zOiBwcmltZXJvIHNlIHJlZmllcmUgZWwgbm9tYnJlIG8KZXRpcXVldGEgZGUgcmVmZXJlbmNpYSwgeSBzZSB1YmljYSBlbnRyZSBwYXLDqW50ZXNpcyBjdWFkcmFkb3MKYFtldGlxdWV0YV1gIHkgYSBjb250aW51YWNpw7NuIHNlIGluY2x1eWUgbGEgZGlyZWNjacOzbiBVUkwgdWJpY2FkYQplbnRyZSBwYXLDqW50ZXNpcyBgKClgLlwgClBvciBlamVtcGxvOiAKYGBgCltww6FnaW5hIHdlYiBkZSB0YWJsZXMgZ2VuZXJhdG9yXShodHRwczovL3d3dy50YWJsZXNnZW5lcmF0b3IuY29tL21hcmtkb3duX3RhYmxlcykKYGBgCgpFbCByZXN1bHRhZG8gZXM6CgpbcMOhZ2luYSB3ZWIgZGUgdGFibGVzIGdlbmVyYXRvcl0oaHR0cHM6Ly93d3cudGFibGVzZ2VuZXJhdG9yLmNvbS9tYXJrZG93bl90YWJsZXMpCgoKRW4gY2FzbyBkZSBkZXNlYXIgcXVlIHNlIHZpc3VhbGljZSBsYSBsaWdhIFVSTCBjb21wbGV0YSwgZW50b25jZXMgc2UKdXNhbiBsb3Mgc2lnbm9zIGRlIGA8ID5gIGFsIGluaWNpbyB5IGFsIGZpbmFsIGRlIGxhIGRpcmVjY2nDs24gVVJMLCBwb3IKZWplbXBsbzpcCmBgYApsYSBww6FnaW5hICJ0YWJsZXMgZ2VuZXJhdG9yIiBgPGh0dHBzOi8vd3d3LnRhYmxlc2dlbmVyYXRvci5jb20vbWFya2Rvd25fdGFibGVzPmAuCmBgYApFc3RhIGVzIGxhIGxpZ2EgVVJMIGRlIGxhIHDDoWdpbmEgInRhYmxlcyBnZW5lcmF0b3IiIGA8aHR0cHM6Ly93d3cudGFibGVzZ2VuZXJhdG9yLmNvbS9tYXJrZG93bl90YWJsZXM+YC4KCgojIyMgMi4zLjguIEluY2x1aXIgdW5hIGltYWdlbiBlbiBlbCB0ZXh0by4KCkVzdG8gc2UgbG9ncmEgYSBwYXJ0aXIgZGUgdmFyaW9zIGVsZW1lbnRvczogYCEgKyBbZXRpcXVldGFdICsgKHJ1dGEgZGUKYWNjZXNvIGEgbGEgaW1hZ2VuIGRlbnRybyBkZWwgZGlzY28gZHVybylgLlwKClBvciBkZWZlY3RvLCBSIE1hcmtkb3duIGJ1c2NhcsOhIGxhIGltw6FnZW5lcyBkZW50cm8gZGVsICpkaXJlY3RvcmlvIGRlIHRyYWJham8qIGVuIHF1ZSBzZSBlbmN1ZW50cmEgZW5yYWl6YWRvLCBwb3IgbG8gcXVlLCBzaSBsYSBpbWFnZW4gc2UgZW5jdWVudHJhIGRlbnRybyBkZWwgbWlzbW8gZGlyZWN0b3JpbyBlbnRvbmNlcyBzb2xvIHNlIHJlcXVpZXJlIGVzY3JpYmlyIGVsIG5vbWJyZSBkZWwgYXJjaGl2byBkZSBpbWFnZW4gZGVudHJvIGRlIGxvcwpwYXLDqW50ZXNpcywgaW5jbHV5ZW5kbyBlbCBmb3JtYXRvIGRlbCBhcmNoaXZvIGRlIGltYWdlbiAoeWEgc2VhIC5qcGcsIC5qcGVnLCAucGRmLCAucG5nIHUgb3RybykuXApgYGAKIVtpbWFnZW4gZGVudHJvIGRlbCBkaXJlY3RvcmlvIGRlIHRyYWJham9dKGludGVydmFsb19jb25maWFuemEucG5nKQpgYGAKRWwgcmVzdWx0YWRvIGVzOgohW2ltYWdlbiBkZW50cm8gZGVsIGRpcmVjdG9yaW8gZGUgdHJhYmFqb10oaW50ZXJ2YWxvX2NvbmZpYW56YS5wbmcpCgoKRW4gY2FzbyBkZSBxdWUgbGEgaW1hZ2VuIHNlIGVuY3VlbnRyZSBmdWVyYSBkZWwgKmRpcmVjdG9yaW8gZGUgdHJhYmFqbyoKcGVybywgYSBzdSB2ZXosIHNlIGVuY3VlbnRyYSBkZW50cm8gZGVsIGRpc2NvIGR1cm8sIGVudG9uY2VzIHPDrSBzZSBkZWJlCmVzY3JpYmlyIGxhIHJ1dGEgZGUgYWNjZXNvIGFsIGFyY2hpdm8gZGUgaW1hZ2VuIGRlbnRybyBkZSBsb3MKcGFyw6ludGVzaXMuCmBgYAohW2ltYWdlbiBkZW50cm8gZGVsIGRpc2NvIGR1cm9dKH4vRHJvcGJveC9SL1JtYXJrZG93bi9wcnVlYmFfdXNvX21hcmtkb3duX2ZpbGVzL2ltYWdlbl9wcnVlYmEucG5nKeKBqQpgYGAKRWwgcmVzdWx0YWRvIGVzOgoKCgpPdHJhIG9wY2nDs24gcGFyYSBpbnNlcnRhciBpbcOhZ2VuZXMgZXMgYSBwYXJ0aXIgZGUgInRyYWVyIiBhbCB0ZXh0bwphcmNoaXZvcyBxdWUgc2UgZW5jdWVudHJhbiB1YmljYWRvcyBlbiBpbnRlcm5ldCwgcGFyYSBlbGxvIHNlIHJlcXVpZXJlCnNlw7FhbGFyIGxhIGRpcmVjY2nDs24gVVJMIGRlbCBhcmNoaXZvIGRlIGltYWdlbiwgbG8gcXVlIHNlIGVzY3JpYmUgZGVudHJvCmRlIGxvcyBwYXLDqW50ZXNpcy4KCmBgYAohW2ltYWdlbiBlbgpVUkxdKGh0dHBzOi8vZWNvbm9taXBlZGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvQ2FwdHVyYS1kZS1wYW50YWxsYS0yMDE5LTA5LTEwLWEtbGVzLTExLjA5LjM1LnBuZykKYGBgCkVsIHJlc3VsdGFkbyBlczoKCiFbaW1hZ2VuIGVuClVSTF0oaHR0cHM6Ly9lY29ub21pcGVkaWEuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy9DYXB0dXJhLWRlLXBhbnRhbGxhLTIwMTktMDktMTAtYS1sZXMtMTEuMDkuMzUucG5nKQoKCiMjIyAyLjMuOC4xLiBDb250cm9sYXIgZWwgdGFtYcOxbyBkZSBsYXMgaW3DoWdlbmVzLgoKSGF5IGRpdmVyc2FzIG1hbmVyYXMgZGUgY29udHJvbGFyIGVsIHRhbWHDsW8gZGUgbGFzIGltw6FnZW5lcy4gQXF1w60gc2UgcmV2aXNhIGxhIG1hbmVyYSBkZSBoYWNlcmxvIGRpcmVjdGFtZW50ZSBzb2JyZSBlbCBjb21hbmRvIHF1ZSBpbnNlcnRhIHVuYSBpbWFnZW4gKGVuIHZleiBkZSBoYWNlcmxvIGRlc2RlIGVsICJjaHVuayIgZGUgY8OzZGlnbykuXApQYXJhIGVsbG8gc2UgdXRpbGl6YSBlbCBjb21hbmRvIGRlbCBsZW5ndWFqZSBNYXJrZG93bjogYCFbbm9tYnJlIGRlbCBvYmpldG9dKHBhdGgvdG8vaW1hZ2UucG5nKWAgeSBwb3N0ZXJpb3JtZW50ZSBzZSBsZSBhw7FhZGUgZWwgYXJndW1lbnRvIHF1ZSBkZWZpbmUgc3UgdGFtYcOxbyBtZWRpYW50ZSBsb3MgYXJndW1lbnRvcyBge3dpZHRoID0gNTAlfWAgbyBge2hlaWdodCA9IDUwJX1gLCBkZSBsYSBzaWd1aWVudGUgbWFuZXJhOgpgYGAKIVtub21icmUgZGVsIG9iamV0b10ocGF0aC90by9pbWFnZS5wbmcpe3dpZHRoID0gNTAlIGhlaWdodD01MCV9CmBgYApQb3IgZWplbXBsbzoKCkVsIHRhbWHDsW8gb3JpZ2luYWwgZGUgbGEgaW1hZ2VuIGVzOgohW2ltYWdlbiBkZW50cm8gZGUgZGlyZWN0b3JpbyBkZSB0cmFiYWpvXShwb2JsYWNpb25fbXVlc3RyYS5wbmcpCgpZIHNlIHNvbGljaXRhIGVsIGNhbWJpbyBkZSB0YW1hw7FvIGFsIDUwJSBkZSBsYSBpbWFnZW4gb3JpZ2luYWwsIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmE6CmBgYAohW2ltYWdlbiBkZW50cm8gZGUgZGlyZWN0b3JpbyBkZQp0cmFiYWpvXShwb2JsYWNpb25fbXVlc3RyYS5wbmcpe3dpZHRoPSI1MCUiIGhlaWdodD0iNTAlIn0KYGBgCgohW2ltYWdlbiBkZW50cm8gZGUgZGlyZWN0b3JpbyBkZQp0cmFiYWpvXShwb2JsYWNpb25fbXVlc3RyYS5wbmcpe3dpZHRoPSI1MCUiIGhlaWdodD0iNTAlIn0KCgojIyMgMi4zLjkuIEluY2x1aXIgY29tZW50YXJpb3MgZW4gZWwgdGV4dG8gc2luIHF1ZSBhcGFyZXpjYW4gZW4gZWwgIm91dHB1dCIuCgpQYXJhIGluY2x1aXIgY29tZW50YXJpb3MgZW4gZWwgdGV4dG8geSBxdWUgbm8gYXBhcmV6Y2FuIGVuIGVsICJvdXRwdXQiIHNlIGluY2x1eWUgZWwgc2NyaXB0IGA8IS0tIHlvdXIgY29tbWVudCAtLT5gLCB5IGVsIHRleHRvIHB1ZWRlIHRlbmVyIHVuYSBvIHZhcmlhcyBsw61uZWFzIGRlIGxvbmdpdHVkLgpUYW1iacOpbiBleGlzdGVuICJzaG9ydGN1dCIgY29uIGVsIHRlY2xhZG8gcGFyYSBpbmNsdWlyIGVsIHNjcmlwdDogYEN0cmwgKyBTaGlmdCArIENgIChgQ29tbWFuZCArIFNoaWZ0ICsgQ2AgZW5tYWNPUykuClBvciBlamVtcGxvOgpgYGAKIlBvciBlamVtcGxvLCBwYXJhIGVsIHByb2dyYW1hIEJlY2EgVW5pdmVyc2FsIHBhcmEgRXN0dWRpYW50ZXMgZGUKRWR1Y2FjacOzbiBNZWRpYSBTdXBlcmlvciBCZW5pdG8gSnXDoXJleiA8IS0tIERlYm8gY29tcHJvYmFyIGxvcyBkYXRvcyBzb2JyZSBlc3RhIHBvbMOtdGljYSBlZHVjYXRpdmEgLS0+LCB1bm8gZGUgbG9zIGRvcyBpbmNsdWlkb3MgZW4gbGEKJ0NhamEgTmVncmEnLCBlbCBFamVjdXRpdm8gcHJvcG9uZSBxdWUgcGFyYSBlbCBwcsOzeGltbyBhw7FvIGRpc3BvbmdhIGRlCjM0IG1pbCA5OTkgbWlsbG9uZXMgZGUgcGVzb3MsICguLi4pLiIKYGBgCgpFbCByZXN1bHRhZG8gZXM6CiJQb3IgZWplbXBsbywgcGFyYSBlbCBwcm9ncmFtYSBCZWNhIFVuaXZlcnNhbCBwYXJhIEVzdHVkaWFudGVzIGRlCkVkdWNhY2nDs24gTWVkaWEgU3VwZXJpb3IgQmVuaXRvIEp1w6FyZXogPCEtLSBEZWJvIGNvbXByb2JhciBsb3MgZGF0b3Mgc29icmUgZXN0YSBwb2zDrXRpY2EgZWR1Y2F0aXZhIC0tPiwgdW5vIGRlIGxvcyBkb3MgaW5jbHVpZG9zIGVuIGxhCidDYWphIE5lZ3JhJywgZWwgRWplY3V0aXZvIHByb3BvbmUgcXVlIHBhcmEgZWwgcHLDs3hpbW8gYcOxbyBkaXNwb25nYSBkZQozNCBtaWwgOTk5IG1pbGxvbmVzIGRlIHBlc29zLCAoLi4uKS4iCgoKIyAzLiBFamVyY2ljaW8uCkluc3RydWNjaW9uZXM6IEVsYWJvcmEgbGEgcmVkYWNjacOzbiBkZSB1biB0ZXh0bywgcHVlZGUgc2VyIGRlIHR1IGF1dG9yw61hIHByb3BpYSBvIGNpdGFkbyBkZSBhbGd1bmEgb3RyYSBmdWVudGUuICAKQSBwYXJ0aXIgZGUgZGljaG8gdGV4dG8sIG1vZGlmw61jYWxvIGNvbW8gdHUgZGVzZWVzLCBwZXJvIHV0aWxpemEgbGEgbWF5b3LDrWEgZGUgbGFzIG9wY2lvbmVzIGRlIHNpbnRheGlzIHJldmlzYWRhcyBlbiBlc3RlIGRvY3VtZW50by4gIApJbmNsdXllIGFsZ3VuYSBpbWFnZW4gZW4gZWwgZG9jdW1lbnRvLCBwdWVkZSBlc3RhciB2aW5jdWxhZGEgdGVtw6F0aWNhbWVudGUgbyBuby4gSW5zZXJ0YSBsYSBpbWFnZW4gZW4gc3UgZm9ybWF0byBvcmlnaW5hbCB5IHBvc3Rlcmlvcm1lbnRlIHZ1ZWx2ZSBhIGluc2VydGFybGEgZW4gdW4gdGFtYcOxbyBtZW5vci4KRmluYWxtZW50ZSwgZ3VhcmRhIGVsIGFyY2hpdm8gZW4gZWwgZm9ybWF0byBgLlJtZGAu