0. Intenciones y Disclaimer

Este libro sirve de acompañamiento al curso “Programación y manejo de datos en la era del Big Data” que se empezó a impartir el curso 2019-2020 en el Grado de Economía de la Universitat de València. 1

Está edición es para el curso 2022-23. Se escribe, otra vez, con un poco con prisa, así que veremos como sale!! En esta primera frase ya he querido dejar claro cual será el estilo del libro: se sacrificará el estilo, e incluso a veces la corrección ortográfica para conseguir más claridad.

Llama la atención el título del curso. Es un título muy largo, poco estándar, vamos, un poco raro. El curso en realidad debería llamarse “Una introducción a la Ciencia de Datos para Economía” pero preferí que en el título apareciese en primer lugar la palabra “programación”. La razón es que quiero que los estudiantes que se matriculen sepan que vamos a pasar buena parte del curso dándole ordenes al ordenador por escrito; es decir, programando.

Señalar que, obviamente, el libro no es el curso. Pretendo que el curso sea fundamentalmente práctico y que se aprenda mientras se trabaja con datos y casos. El libro lo enfoco como un esfuerzo de sintetizar los temas de los que se hablarán en el curso y una vía de entrada a la multitud de materiales disponibles sobre estos temas en Internet. Me ha parecido conveniente confeccionar estas notas/libro para que los estudiantes tengan algo, un mínimo, donde tener minimamente reunidos los principales contenidos que se tratarán en la asignatura.

1. Prefacio

¿Es necesario el libro?

Seguramente no, ya que hay excelentes materiales out there, pero su elaboración es en realidad una estrategia para preparar y enfocar el curso. Lo escribo para los estudiantes del curso, pero en-realidad-en-realidad lo escribo para mi, para entender y organizar lo que llevo haciendo/estudiando desde hace unos cuantos años. Esta idea de escribir para entender la explican muy bien aquí

El libro se escribe, además de para mi, para los estudiantes. Por eso voy a intentar escribir lo más claro posible, a veces para pretender ser claro tendré que ser pesado, otras sacrificar el estilo. Sin embargo, como señalan en este post, un escrito, además de ser claro, debe ser “valioso” para sus lectores. Espero conseguirlo!!

¿Es necesario el curso?

Evidentemente mi opinión es que sí. Voy a argumentarlo un poco.

De todos es conocido que actualmente se está produciendo una auténtica revolución en el campo de la estadística y los datos, a la que se suele referir con términos genéricos como Big Data o Machine Learning. Estos dos tópicos, entre otros, son objeto de estudio de una nueva disciplina que se incorpora poco a poco, pero con mucha fuerza, a la mayoría de planes de estudio, incluida la Economía; por ejemplo, este Máster de la LSE. En la propia UV tenemos ya un máster y un grado en Ciencia de Datos; y en la Facultad de Economía arrancó en el curso 2019-20 una nueva titulación, el Grado en Inteligencia y Analítica de Negocios, BIA por sus siglas en inglés, relacionada también con la ciencia de datos.

El nombre de esta nueva disciplina es Data Science (DS) o Ciencia de Datos en castellano; de hecho, el título de la asignatura que presento debería ser “Una introducción a la Ciencia de datos para Economía” pero ya señalé que prefería dejar claro en el título que, en el curso, se iban a analizar datos interactuando con el ordenador no a través de menús, sino a través de scripts; es decir, programando.

La idea de que los planes de estudio de Economía deben ir incorporando esta nueva disciplina, evidentemente no es solo mía. Como ejemplo podemos citar este artículo de Hal R. Varian, o la entrevista realizada aquí a dos catedráticos y docentes de econometría para el blog Nada es Gratis.

Hal R. Varian, economista jefe de Google, aparte de señalar que es necesario que los dirigentes de las organizaciones conozcan cómo funciona la tecnología para poder impulsar la innovación, también dijo lo siguiente:

“The sexy job in the next 10 years will be statisticians. People think I’m joking, but …”.

Evidentemente, Varian se refiere al hecho de que, debido a la ingente cantidad de datos que ha generado Internet y a la necesidad de transformar estos datos en información que aporte valor añadido, cada día es más demandado un nuevo tipo de profesional conocido como “científico de datos”.

Uno podría pensar que estos trabajos, en principio, están muy alejados del perfil típico de un estudiante de una facultad de Economía, pero quizá no tanto. Tal y como se argumenta aquí o aquí, los economistas o graduados en ADE podrían ser perfectamente capaces de acceder a ese tipo de puestos. Según estos autores, para ser un científico de datos se necesitan tres tipos de competencias o conocimientos: técnicas de programación, conocimientos estadísticos y conocimientos específicos del campo de aplicación, en nuestro caso conocimientos de economía. Obviamente los graduados en Economía sobresaldrán en conocimientos acerca de la realidad económica, seguramente tendrán escasos conocimientos de programación, pero tendrán un conocimiento razonablemente bueno de Estadística, quizás no en las técnicas apropiadas o más actuales, pero si en los conceptos básicos; así que para suplir estas deficiencias podría bastar con incluir algún modulo o asignatura sobre las principales técnicas estadísticas empleadas en Data Science e introducir los fundamentos de programación en el currículo. Además, parece que las compañías tecnológicas (Google, Facebook, …) también necesitan y contratan economistas. Puedes verlo aquí en un artículo y aquí en un post.

Obviamente el objetivo de esta asignatura optativa no es formar profesionales en Data Science en el campo de la Economía, no, el objetivo es mucho más modesto, simplemente iniciarles en este mundo presentándoles una panorámica de tópicos, y exponerlos, quizás por primera vez en la carrera, a la programación y una rama de la estadística que está emergiendo con gran fuerza como es el Machine Learning y ver que en el fondo estas técnicas no son tan diferentes de los contenidos más tradicionales que presentamos en asignaturas como Econometría.

En el mismo sentido se ha pronunciado el Global University Leaders Forum (GULF), foro que reúne a representantes de las 28 universidades más prestigiosas. En su reunión anual en el Foro Económico Mundial de 2019, analizaron el papel de las universidades en un mundo en constante cambio. En su “informe” destacaron, por su importancia para el futuro de la universidad y su rol en la sociedad, 6 temas prioritarios, y el primero de ellos fue la introducción de la asignatura “Data science 101” en la mayoría de las titulaciones. No se trataría de hacer a todos los titulados científicos de datos, pero sí de aumentar su competencia en temas relacionados con los datos y la información.

De hecho, algunas universidades ya han empezado a incluir materias de computación en las licenciaturas de ciencias sociales para adaptarse a las nuevas necesidades del mercado; por ejemplo, la universidad Bocconi introdujo en 2018 el lenguaje de programación Phyton como asignatura troncal en la facultad de Economía con el argumento de que “la programación es tan básica como las matemáticas para el mundo que viene, de forma que todos los estudiantes tendrán que aprender sus fundamentos”.

La verdad es que aunque personalmente tengo mis dudas, parece que se necesitan muuuuchoss cientificos de datos. El mercado laboral pide cada vez más profesionales que sepan tratar la enorme cantidad de información que generamos. En este post son un poco más pesimistas y señalan que el mercado de DS puede ya estar saturado, aunque hablan de Estados Unidos principalmente. En cualquier caso, la tecnología va a cambiar el perfil de muchos trabajos, y seguramente se necesitaran mayores niveles de competencia en tecnología, programación y datos. Lo explican aqui. Otro ejemplo lo tienes en esta noticia, en la que el titular nos dice que “Se buscan funcionarios que sepan de Big Data”.

La tecnología, todos lo sabemos y experimentamos, ha provocado grandes cambios, no solo en el mercado laboral o en las industrias, sino también la sociedad y puede que incluso en la forma de pensar y relacionarnos, así que no está de más conocer un poco más de estos temas aunque sea de forma tangencial ya que en el curso nos centraremos en un aspecto instrumental como son las herramientas de programación para manejar datos y extraer información de ellos. De hecho, buena parte de los cambios futuros que nos esperan están asociados a la Inteligencia Artificial y al Machine Learning/Deep Learning, que trataremos en el tema 4 del curso. Algunos ejemplos aquí, aquí, o aquí.

2. Resumen de contenidos

En el temario he intentado reflejar que la programación tendrá un peso importante (tema 2 y tema 3); programación siempre orientada al “manejo” de datos (temas 3, 4 y 5) y aplicación de técnicas estadísticas simples y algunas más avanzadas como en el tema 4 (Machine Learning), siempre relacionándolas y vinculándolas con lo ya aprendido en las asignaturas de Econometría y Estadística cursadas previamente.

Mi intención es que la asignatura sea fundamentalmente práctica, apoyándome para introducir los contenidos en casos prácticos con datos reales de diversos formatos e índole (tabulares, texto, espaciales etc…) y procedencia (INE, Eurostat, OCDE, twitter, WikiData, … )

El curso comienza con un tema en el que se presentarían los objetivos del curso, junto con los términos y procesos que justifican la asignatura (Big data, Ciencia de Datos, Machine Learning, …). Se presentarían ejemplos de aplicación exitosa de estas nuevas técnicas en el campo de la Economía, Varian (2014) o Chakraborty (2017), para finalmente resaltar la importancia de la investigación reproducible y el papel que juega el software libre en ella.

El tema 2 se presentan los rudimentos del lenguaje de programación R. Estos conocimientos básicos se irán reforzando durante el curso trabajando en diferentes tópicos y aplicaciones. En este tema se volverá a enfatizar la importancia de la reproducibilidad de la investigación y que para ello se hace indispensable interactuar con el ordenador con scripts: no solo se ha de explicar y documentar el proceso seguido en un análisis de datos, sino que se ha de presentar también el fichero con las instrucciones ejecutadas. Para hacer esto posible es imprescindible el uso de la programación, presentándose en este tema herramientas (knitr y Rmarkdown) que posibilitan la generación de informes reproducibles.

En el tema 3, se desarrollarán diversos casos de análisis de datos tabulares, el formato más típico en Ciencias Sociales, con los que se irán asentando los conocimientos de programación iniciados en el tema 2, ahora aplicados a tareas concretas relacionados con el manejo de datos tabulares y diversos tópicos de análisis de naturaleza económica.

El tema 4 es una introducción a los conceptos básicos del Machine Learning (training set, validation set, cross validation, bagging etc..), para luego presentar las técnicas o algoritmos de ML más relacionados con lo que los estudiantes ya han visto en Econometría, como son el modelo de regresión lineal y la regresión logística, ahora presentados desde una óptica diferente, más orientada a la predicción.

Los cuatro primeros temas constituyen la parte fundamental de la asignatura que finaliza con un tema adicional en el que, una vez los estudiantes han alcanzado cierta soltura en el manejo de R, se presentan diferentes tópicos en el campo de la Ciencia de Datos: datos espaciales y su representación, datos textuales (por ejemplo, Twitter) y datos enlazados (Wikidata).

3. Relación de temas

  • Tema 1: Ciencia de datos y la era del Big Data

  • Tema 2: Una introducción a R para Ciencia de datos

  • Tema 3: Manejo de datos tabulares

  • Tema 4: Introducción al Machine Learning (ML)

  • Tema 5: Otros tipos de datos




  1. También son ganas a estas alturas de ponerse a escribir un libro cuando el gurú de las tecnología y la innovación Enrique Dans dice aquí y aquí que los libros no sólo se han quedado obsoletos, sino que pueden ser dañinos en el proceso de aprendizaje. En mi descargo decir que técnicamente esto que ves en realidad no es un libro, es una pagina web con formato libro, y llena de referencias y materiales. Además, el título del curso incorpora ” … en la era del …“, algo que es criticado aquí. Otra vez en mi descargo decir que su función es meramente retorica, vamos, para llamar un poco la atención↩︎

LS0tCnRpdGxlOiAiUHJlZmFjaW8iCmF1dGhvcjogIlBlZHJvIEouIFDDqXJleiAocGVkcm8uai5wZXJlekB1di5lcykuIFVuaXZlcnNpdGF0IGRlIFZhbMOobmNpYSA8YnI+IDxicj4gV2ViIGRlbCBjdXJzbzogPGh0dHBzOi8vcGVyZXpwNDQuZ2l0aHViLmlvL2ludHJvLWRzLTIyLTIzLXdlYi8+IgpkYXRlOiAiU2VwdGllbWJyZSBkZSAyMDE5IChhY3R1YWxpemFkbyBlbCBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkLSVtLSVZJylgKSIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBjc3M6ICFleHByIGhlcmU6OmhlcmUoImFzc2V0cyIsICJzdHlsZXNfcGpwLmNzcyIpICMtaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTY2ODE4NzkvaG93LXRvLXVzZS1oZXJlLWZvci1wYXRocy10by1jc3MtYmVmb3JlLWJvZHktYW5kLWFmdGVyLWJvZAogICAgdGhlbWU6IHBhcGVyCiAgICBoaWdobGlnaHQ6IHRleHRtYXRlIAogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6IDMgCiAgICB0b2NfZmxvYXQ6IAogICAgICBjb2xsYXBzZWQ6IHRydWUKICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQogICAgc2VsZl9jb250YWluZWQ6IHRydWUKICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UKICAgIGluY2x1ZGVzOgogICAgICBhZnRlcl9ib2R5OiAhZXhwciBoZXJlOjpoZXJlKCJhc3NldHMiLCAiZm9vdGVyLmh0bWwiKSAKICAgICAgaW5faGVhZGVyOiAKICAgICAgICAtICFleHByIGhlcmU6OmhlcmUoImFzc2V0cyIsICJnb29nbGUtYW5hbHl0aWNzLmh0bWwiKSAKICAgICAgICAtICFleHByIGhlcmU6OmhlcmUoImFzc2V0cyIsICJmYXZpY29uLXNvbC5odG1sIikgCiAgICAjY29kZV9mb2xkaW5nOiBzaG93CiAgICBkZl9wcmludDoga2FibGUKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKZWRpdG9yX29wdGlvbnM6IAogIGNodW5rX291dHB1dF90eXBlOiBjb25zb2xlCmJpYmxpb2dyYXBoeTogImByIGhlcmU6OmhlcmUoJ2Fzc2V0cycsICdiaWJsaW8uYmliJylgIiAgIy0gam9vb2Rlci4gc2luZ2xlIHF1b3RlcyBodHRwczovL2NvbW11bml0eS5yc3R1ZGlvLmNvbS90L3VzZS1oZXJlLWhlcmUtZnVuY3Rpb24taW4teWFtbC1vcHRpb24vMTg2NjcvOQotLS0KCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKCmBgYHtyIGNodW5rLXNldHVwLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgZXZhbCA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgICNyZXN1bHRzID0gImhvbGQiLAogICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBGQUxTRSwgY2FjaGUucGF0aCA9ICIvY2FjaGVzLyIsIGNvbW1lbnQgPSAiIz4iLAogICAgICAgICAgICAgICAgICAgICAgI2ZpZy53aWR0aCA9IDcsICNmaWcuaGVpZ2h0PSA3LCAgIAogICAgICAgICAgICAgICAgICAgICAgI291dC53aWR0aCA9IDcsIG91dC5oZWlnaHQgPSA3LAogICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2UgPSBUUlVFLCAgZmlnLnNob3cgPSAiaG9sZCIsCiAgICAgICAgICAgICAgICAgICAgICBmaWcuYXNwID0gNy85LCBvdXQud2lkdGggPSAiNjAlIiwgZmlnLmFsaWduID0gImNlbnRlciIpCgojLSBwYXJhIG1lam9yYXIgbG9zIGdyw6FmaWNvcywgYnVlbm8gZW4gcmVhbGlkYWQgcGFyYSBxdWUgc2UgdmVhbiBpZ3VhbCBlbiBkaXN0aW50b3MgU08KIy0gaHR0cHM6Ly93d3cuanVtcGluZ3JpdmVycy5jb20vYmxvZy9yLWtuaXRyLW1hcmtkb3duLXBuZy1wZGYtZ3JhcGhpY3MvCmtuaXRyOjpvcHRzX2NodW5rJHNldChkZXYgPSAicG5nIiwgZGV2LmFyZ3MgPSBsaXN0KHR5cGUgPSAiY2Fpcm8tcG5nIikpCmBgYAoKYGBge3Igb3B0aW9ucy1zZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQpvcHRpb25zKHNjaXBlbiA9IDk5OSkgIy0gcGFyYSBxdWl0YXIgbGEgbm90YWNpw7NuIGNpZW50w61maWNhCm9wdGlvbnMoInlhbWwuZXZhbC5leHByIiA9IFRSVUUpICMtIGh0dHBzOi8vZ2l0aHViLmNvbS92aWtpbmcvci15YW1sL2lzc3Vlcy80NyAgKGxvIHB1c2UgeCBlbCBwYiBjb24gZWwgd2FybmluZykgRW4gcmVhbGlkYWQgY3JlbyBxdWUgbWVqb3Igc2Vyw61hIHBvbmVybG8gZW4gUlByb2ZpbGUKYGBgCgoKYGBge3Iga2xpcHB5LCBlY2hvID0gRkFMU0V9CmtsaXBweTo6a2xpcHB5KHBvc2l0aW9uID0gYygidG9wIiwgInJpZ2h0IikpICMtIHJlbW90ZXM6Omluc3RhbGxfZ2l0aHViKCJybGVzdXIva2xpcHB5IikKYGBgCgoKLS0tLS0tLS0tLS0tLS0tLS0KCjxicj4KCiMjIDAuIEludGVuY2lvbmVzIHkgRGlzY2xhaW1lcgoKRXN0ZSBsaWJybyBzaXJ2ZSBkZSBhY29tcGHDsWFtaWVudG8gYWwgY3Vyc28g4oCcUHJvZ3JhbWFjacOzbiB5IG1hbmVqbyBkZSBkYXRvcyBlbiBsYSBlcmEgZGVsIEJpZyBEYXRh4oCdIHF1ZSBzZSBlbXBlesOzIGEgaW1wYXJ0aXIgZWwgY3Vyc28gMjAxOS0yMDIwIGVuIGVsIEdyYWRvIGRlIEVjb25vbcOtYSBkZSBsYSBVbml2ZXJzaXRhdCBkZSBWYWzDqG5jaWEuIF5bVGFtYmnDqW4gc29uIGdhbmFzIGEgZXN0YXMgYWx0dXJhcyBkZSBwb25lcnNlIGEgZXNjcmliaXIgdW4gbGlicm8gY3VhbmRvIGVsIGd1csO6IGRlIGxhcyB0ZWNub2xvZ8OtYSB5IGxhIGlubm92YWNpw7NuIEVucmlxdWUgRGFucyBkaWNlIFthcXXDrV0oCmh0dHBzOi8vd3d3LmVucmlxdWVkYW5zLmNvbS8yMDE5LzAyL2VsLW9ic29sZXRvLXktZGFuaW5vLWxpYnJvLWRlLXRleHRvLmh0bWwpIHkgW2FxdcOtXShodHRwczovL3d3dy5lbnJpcXVlZGFucy5jb20vMjAxOS8wOC9lbC1wcm94aW1vLWdyYW4tZXJyb3ItZW4tZWR1Y2FjaW9uLmh0bWwpIHF1ZSBsb3MgbGlicm9zIG5vIHPDs2xvIHNlIGhhbiBxdWVkYWRvIG9ic29sZXRvcywgc2lubyBxdWUgcHVlZGVuIHNlciBkYcOxaW5vcyBlbiBlbCBwcm9jZXNvIGRlIGFwcmVuZGl6YWplLiBFbiBtaSBkZXNjYXJnbyBkZWNpciBxdWUgdMOpY25pY2FtZW50ZSBlc3RvIHF1ZSB2ZXMgZW4gcmVhbGlkYWQgbm8gZXMgdW4gbGlicm8sIGVzIHVuYSBwYWdpbmEgd2ViIGNvbiBmb3JtYXRvIGxpYnJvLCB5IGxsZW5hIGRlIHJlZmVyZW5jaWFzIHkgbWF0ZXJpYWxlcy4gQWRlbcOhcywgZWwgdMOtdHVsbyBkZWwgY3Vyc28gaW5jb3Jwb3JhICIgLi4uIGVuIGxhIGVyYSBkZWwgLi4uIiwgYWxnbyBxdWUgZXMgY3JpdGljYWRvIFthcXXDrV0oaHR0cHM6Ly9ib29rcy5nb29nbGUuZXMvYm9va3MvYWJvdXQvTGFfZXJhX2RlX0Nhc2FuZHJhLmh0bWw/aWQ9NGZFaEVBQUFRQkFKJnByaW50c2VjPWZyb250Y292ZXImc291cmNlPWtwX3JlYWRfYnV0dG9uJnJlZGlyX2VzYz15I3Y9b25lcGFnZSZxJmY9ZmFsc2UpLiBPdHJhIHZleiBlbiBtaSBkZXNjYXJnbyBkZWNpciBxdWUgc3UgZnVuY2nDs24gZXMgbWVyYW1lbnRlIHJldG9yaWNhLCB2YW1vcywgcGFyYSBsbGFtYXIgdW4gcG9jbyBsYSBhdGVuY2nDs25dCgpFc3TDoSBlZGljacOzbiBlcyBwYXJhIGVsIGN1cnNvIDIwMjItMjMuIFNlIGVzY3JpYmUsIG90cmEgdmV6LCBjb24gdW4gcG9jbyBjb24gcHJpc2EsIGFzw60gcXVlIHZlcmVtb3MgY29tbyBzYWxlISEgRW4gZXN0YSBwcmltZXJhIGZyYXNlIHlhIGhlIHF1ZXJpZG8gZGVqYXIgY2xhcm8gY3VhbCBzZXLDoSBlbCBlc3RpbG8gZGVsIGxpYnJvOiBzZSBzYWNyaWZpY2Fyw6EgZWwgZXN0aWxvLCBlIGluY2x1c28gYSB2ZWNlcyBsYSBjb3JyZWNjacOzbiBvcnRvZ3LDoWZpY2EgcGFyYSBjb25zZWd1aXIgbcOhcyBjbGFyaWRhZC4gCgoKTGxhbWEgbGEgYXRlbmNpw7NuIGVsIHTDrXR1bG8gZGVsIGN1cnNvLiBFcyB1biB0w610dWxvIG11eSBsYXJnbywgcG9jbyBlc3TDoW5kYXIsIHZhbW9zLCB1biBwb2NvIHJhcm8uIEVsIGN1cnNvIGVuIHJlYWxpZGFkIGRlYmVyw61hIGxsYW1hcnNlIOKAnFVuYSBpbnRyb2R1Y2Npw7NuIGEgbGEgQ2llbmNpYSBkZSBEYXRvcyBwYXJhIEVjb25vbcOtYeKAnSBwZXJvIHByZWZlcsOtIHF1ZSBlbiBlbCB0w610dWxvIGFwYXJlY2llc2UgZW4gcHJpbWVyIGx1Z2FyIGxhIHBhbGFicmEgInByb2dyYW1hY2nDs24iLiBMYSByYXrDs24gZXMgcXVlIHF1aWVybyBxdWUgbG9zIGVzdHVkaWFudGVzIHF1ZSBzZSBtYXRyaWN1bGVuIHNlcGFuIHF1ZSB2YW1vcyBhIHBhc2FyIGJ1ZW5hIHBhcnRlIGRlbCBjdXJzbyBkw6FuZG9sZSBvcmRlbmVzIGFsIG9yZGVuYWRvciBwb3IgZXNjcml0bzsgZXMgZGVjaXIsIHByb2dyYW1hbmRvLiAKClNlw7FhbGFyIHF1ZSwgb2J2aWFtZW50ZSwgZWwgbGlicm8gbm8gZXMgZWwgY3Vyc28uIFByZXRlbmRvIHF1ZSBlbCBjdXJzbyBzZWEgZnVuZGFtZW50YWxtZW50ZSBwcsOhY3RpY28geSBxdWUgc2UgYXByZW5kYSBtaWVudHJhcyBzZSB0cmFiYWphIGNvbiBkYXRvcyB5IGNhc29zLiBFbCBsaWJybyBsbyBlbmZvY28gY29tbyB1biBlc2Z1ZXJ6byBkZSBzaW50ZXRpemFyIGxvcyB0ZW1hcyBkZSBsb3MgcXVlIHNlIGhhYmxhcsOhbiBlbiBlbCBjdXJzbyB5IHVuYSB2w61hIGRlIGVudHJhZGEgYSBsYSBtdWx0aXR1ZCBkZSBtYXRlcmlhbGVzIGRpc3BvbmlibGVzIHNvYnJlIGVzdG9zIHRlbWFzIGVuIEludGVybmV0LiBNZSBoYSBwYXJlY2lkbyBjb252ZW5pZW50ZSBjb25mZWNjaW9uYXIgZXN0YXMgbm90YXMvbGlicm8gcGFyYSBxdWUgbG9zIGVzdHVkaWFudGVzIHRlbmdhbiBhbGdvLCB1biBtw61uaW1vLCBkb25kZSB0ZW5lciBtaW5pbWFtZW50ZSByZXVuaWRvcyBsb3MgcHJpbmNpcGFsZXMgY29udGVuaWRvcyBxdWUgc2UgdHJhdGFyw6FuIGVuIGxhIGFzaWduYXR1cmEuCgoKCiMjIDEuIFByZWZhY2lvCgoKCiMjIyAgwr9FcyBuZWNlc2FyaW8gZWwgbGlicm8/CgpTZWd1cmFtZW50ZSBubywgeWEgcXVlIGhheSBleGNlbGVudGVzIG1hdGVyaWFsZXMgb3V0IHRoZXJlLCBwZXJvIHN1IGVsYWJvcmFjacOzbiBlcyBlbiByZWFsaWRhZCB1bmEgZXN0cmF0ZWdpYSBwYXJhIHByZXBhcmFyIHkgZW5mb2NhciBlbCBjdXJzby4gTG8gZXNjcmlibyBwYXJhIGxvcyBlc3R1ZGlhbnRlcyBkZWwgY3Vyc28sIHBlcm8gZW4tcmVhbGlkYWQtZW4tcmVhbGlkYWQgbG8gZXNjcmlibyBwYXJhIG1pLCBwYXJhIGVudGVuZGVyIHkgb3JnYW5pemFyIGxvIHF1ZSBsbGV2byBoYWNpZW5kby9lc3R1ZGlhbmRvIGRlc2RlIGhhY2UgdW5vcyBjdWFudG9zIGHDsW9zLiBFc3RhIGlkZWEgZGUgZXNjcmliaXIgcGFyYSBlbnRlbmRlciBsYSBleHBsaWNhbiBtdXkgYmllbiBbYXF1w61dKGh0dHBzOi8vZGF5aW5sYWIuY29tLzIwMTkvMDEvMjAvZWwtdmFsb3ItZGUtbGEtZXNjcml0dXJhLWNpbmNvLWNvbmNlcHRvcy1jbGF2ZS8pCgoKRWwgbGlicm8gc2UgZXNjcmliZSwgYWRlbcOhcyBkZSBwYXJhIG1pLCBwYXJhIGxvcyBlc3R1ZGlhbnRlcy4gUG9yIGVzbyB2b3kgYSBpbnRlbnRhciBlc2NyaWJpciBsbyBtw6FzIGNsYXJvIHBvc2libGUsIGEgdmVjZXMgcGFyYSBwcmV0ZW5kZXIgc2VyIGNsYXJvIHRlbmRyw6kgcXVlIHNlciBwZXNhZG8sIG90cmFzIHNhY3JpZmljYXIgZWwgZXN0aWxvLiBTaW4gZW1iYXJnbywgY29tbyBzZcOxYWxhbiBlbiBbZXN0ZSBwb3N0XShodHRwczovL2RheWlubGFiLmNvbS8yMDE5LzAxLzIwL2VsLXZhbG9yLWRlLWxhLWVzY3JpdHVyYS1jaW5jby1jb25jZXB0b3MtY2xhdmUvKSwgdW4gZXNjcml0bywgYWRlbcOhcyBkZSBzZXIgY2xhcm8sIGRlYmUgc2VyICJ2YWxpb3NvIiBwYXJhIHN1cyBsZWN0b3Jlcy4gRXNwZXJvIGNvbnNlZ3VpcmxvISEKCgoKIyMjIMK/RXMgbmVjZXNhcmlvIGVsIGN1cnNvPwoKRXZpZGVudGVtZW50ZSBtaSBvcGluacOzbiBlcyBxdWUgc8OtLiBWb3kgYSBhcmd1bWVudGFybG8gdW4gcG9jby4KCkRlIHRvZG9zIGVzIGNvbm9jaWRvIHF1ZSBhY3R1YWxtZW50ZSBzZSBlc3TDoSBwcm9kdWNpZW5kbyB1bmEgYXV0w6ludGljYSByZXZvbHVjacOzbiBlbiBlbCBjYW1wbyBkZSBsYSBlc3RhZMOtc3RpY2EgeSBsb3MgZGF0b3MsIGEgbGEgcXVlIHNlIHN1ZWxlIHJlZmVyaXIgY29uIHTDqXJtaW5vcyBnZW7DqXJpY29zIGNvbW8gQmlnIERhdGEgbyBNYWNoaW5lIExlYXJuaW5nLiBFc3RvcyBkb3MgdMOzcGljb3MsIGVudHJlIG90cm9zLCBzb24gb2JqZXRvIGRlIGVzdHVkaW8gZGUgdW5hIG51ZXZhIGRpc2NpcGxpbmEgcXVlIHNlIGluY29ycG9yYSBwb2NvIGEgcG9jbywgcGVybyBjb24gbXVjaGEgZnVlcnphLCBhIGxhIG1heW9yw61hIGRlIHBsYW5lcyBkZSBlc3R1ZGlvLCBpbmNsdWlkYSBsYSBFY29ub23DrWE7IHBvciBlamVtcGxvLCBbZXN0ZSBNw6FzdGVyIGRlIGxhIExTRV0oaHR0cDovL3d3dy5sc2UuYWMudWsvc3R1ZHktYXQtbHNlL0dyYWR1YXRlL0RlZ3JlZS1wcm9ncmFtbWVzLTIwMTkvTVNjLURhdGEtU2NpZW5jZSkuIEVuIGxhIHByb3BpYSBVViB0ZW5lbW9zIHlhIHVuIFttw6FzdGVyXShodHRwczovL3d3dy51di5lcy91dndlYi9tYXN0ZXItY2llbmNpYS1kYXRvcy9lcy9tYXN0ZXItdW5pdmVyc2l0YXJpby1jaWVuY2lhLWRhdG9zLTEyODU5NDk2NjEzNzMuaHRtbCkgeSB1biBbZ3JhZG9dKGh0dHBzOi8vd3d3LnV2LmVzL3V2d2ViL3VuaXZlcnNpZGFkL2VzL2VzdHVkaW9zLWdyYWRvL29mZXJ0YS1ncmFkb3Mvb2ZlcnRhLWdyYWRvcy9ncmFkby1jaWVuY2lhLWRhdG9zLTEyODU4NDYwOTQ0NzQvVGl0dWxhY2lvLmh0bWw/aWQ9MTI4NjAzNjQxNzkwNSkgZW4gQ2llbmNpYSBkZSBEYXRvczsgeSBlbiBsYSBGYWN1bHRhZCBkZSBFY29ub23DrWEgYXJyYW5jw7MgZW4gZWwgY3Vyc28gMjAxOS0yMCB1bmEgbnVldmEgdGl0dWxhY2nDs24sIGVsIFtHcmFkbyBlbiBJbnRlbGlnZW5jaWEgeSBBbmFsw610aWNhIGRlIE5lZ29jaW9zXShodHRwczovL3d3dy51di5lcy91dndlYi91bml2ZXJzaWRhZC9lcy9lc3R1ZGlvcy1ncmFkby9vZmVydGEtZ3JhZG9zL29mZXJ0YS1ncmFkb3MvZ3JhZG8taW50ZWxpZ2VuY2lhLWFuYWxpdGljYS1uZWdvY2lvcy0xMjg1ODQ2MDk0NDc0L1RpdHVsYWNpby5odG1sP2lkPTEyODYwNzExNDY5MzkpLCAqKkJJQSoqIHBvciBzdXMgc2lnbGFzIGVuIGluZ2zDqXMsIHJlbGFjaW9uYWRhIHRhbWJpw6luIGNvbiBsYSBjaWVuY2lhIGRlIGRhdG9zLgoKCkVsIG5vbWJyZSBkZSBlc3RhIG51ZXZhIGRpc2NpcGxpbmEgZXMgKipEYXRhIFNjaWVuY2UgKERTKSoqIG8gKipDaWVuY2lhIGRlIERhdG9zKiogZW4gY2FzdGVsbGFubzsgZGUgaGVjaG8sIGVsIHTDrXR1bG8gZGUgbGEgYXNpZ25hdHVyYSBxdWUgcHJlc2VudG8gZGViZXLDrWEgc2VyIOKAnFVuYSBpbnRyb2R1Y2Npw7NuIGEgbGEgQ2llbmNpYSBkZSBkYXRvcyBwYXJhIEVjb25vbcOtYeKAnSBwZXJvIHlhIHNlw7FhbMOpIHF1ZSBwcmVmZXLDrWEgZGVqYXIgY2xhcm8gZW4gZWwgdMOtdHVsbyBxdWUsIGVuIGVsIGN1cnNvLCBzZSBpYmFuIGEgYW5hbGl6YXIgZGF0b3MgaW50ZXJhY3R1YW5kbyBjb24gZWwgb3JkZW5hZG9yIG5vIGEgdHJhdsOpcyBkZSBtZW7DunMsIHNpbm8gYSB0cmF2w6lzIGRlICpzY3JpcHRzKjsgZXMgZGVjaXIsIHByb2dyYW1hbmRvLgoKTGEgaWRlYSBkZSBxdWUgbG9zIHBsYW5lcyBkZSBlc3R1ZGlvIGRlIEVjb25vbcOtYSBkZWJlbiBpciBpbmNvcnBvcmFuZG8gZXN0YSBudWV2YSBkaXNjaXBsaW5hLCBldmlkZW50ZW1lbnRlIG5vIGVzIHNvbG8gbcOtYS4gQ29tbyBlamVtcGxvIHBvZGVtb3MgY2l0YXIgW2VzdGUgYXJ0w61jdWxvXShodHRwczovL3d3dy5hZWF3ZWIub3JnL2FydGljbGVzP2lkPTEwLjEyNTcvamVwLjI4LjIuMykgZGUgSGFsIFIuIFZhcmlhbiwgbyBsYSBlbnRyZXZpc3RhIHJlYWxpemFkYSBbYXF1w61dKGh0dHBzOi8vbmFkYWVzZ3JhdGlzLmVzL2NhYnJhbGVzL2VzLWxhLWVjb25vbWV0cmlhLXVuYS1kaXNjaXBsaW5hLWVzcGVjaWFsLWVuLWVsLWFtYml0by1kb2NlbnRlKSBhIGRvcyBjYXRlZHLDoXRpY29zIHkgZG9jZW50ZXMgZGUgZWNvbm9tZXRyw61hIHBhcmEgZWwgYmxvZyBOYWRhIGVzIEdyYXRpcy4KCgpIYWwgUi4gVmFyaWFuLCBlY29ub21pc3RhIGplZmUgZGUgR29vZ2xlLCBhcGFydGUgZGUgc2XDsWFsYXIgcXVlIGVzIG5lY2VzYXJpbyBxdWUgbG9zIGRpcmlnZW50ZXMgZGUgbGFzIG9yZ2FuaXphY2lvbmVzIGNvbm96Y2FuIGPDs21vIGZ1bmNpb25hIGxhIHRlY25vbG9nw61hIHBhcmEgcG9kZXIgaW1wdWxzYXIgbGEgaW5ub3ZhY2nDs24sIHRhbWJpw6luIGRpam8gbG8gc2lndWllbnRlOiAKCj7igJxUaGUgc2V4eSBqb2IgaW4gdGhlIG5leHQgMTAgeWVhcnMgd2lsbCBiZSBzdGF0aXN0aWNpYW5zLiBQZW9wbGUgdGhpbmsgSeKAmW0gam9raW5nLCBidXQgLi4uIOKAnS4gCgpFdmlkZW50ZW1lbnRlLCBWYXJpYW4gc2UgcmVmaWVyZSBhbCBoZWNobyBkZSBxdWUsIGRlYmlkbyBhIGxhIGluZ2VudGUgY2FudGlkYWQgZGUgZGF0b3MgcXVlIGhhIGdlbmVyYWRvIEludGVybmV0IHkgYSBsYSBuZWNlc2lkYWQgZGUgdHJhbnNmb3JtYXIgZXN0b3MgZGF0b3MgZW4gaW5mb3JtYWNpw7NuIHF1ZSBhcG9ydGUgdmFsb3IgYcOxYWRpZG8sIGNhZGEgZMOtYSBlcyBtw6FzIGRlbWFuZGFkbyB1biBudWV2byB0aXBvIGRlIHByb2Zlc2lvbmFsIGNvbm9jaWRvIGNvbW8g4oCcY2llbnTDrWZpY28gZGUgZGF0b3PigJ0uICAKClVubyBwb2Ryw61hIHBlbnNhciBxdWUgZXN0b3MgdHJhYmFqb3MsIGVuIHByaW5jaXBpbywgZXN0w6FuIG11eSBhbGVqYWRvcyBkZWwgcGVyZmlsIHTDrXBpY28gZGUgdW4gZXN0dWRpYW50ZSBkZSB1bmEgZmFjdWx0YWQgZGUgRWNvbm9tw61hLCBwZXJvIHF1aXrDoSBubyB0YW50by4gVGFsIHkgY29tbyBzZSBhcmd1bWVudGEgW2FxdcOtXShodHRwczovL21lZGl1bS5jb20vcXVhbnRvcHktYmxvZy80LXJlYXNvbnMtd2h5LWVjb25vbWlzdHMtbWFrZS1ncmVhdC1kYXRhLXNjaWVudGlzdHMtYW5kLXdoeS1uby1vbmUtdGVsbHMtdGhlbS01MjQ0Nzg4NDVlYzIpIG8gW2FxdcOtXShodHRwczovL2NhbWJyaWRnZXNwYXJrLmNvbS9weXRob24tY29udGV4dC1tYW5hZ2VyLyksIGxvcyBlY29ub21pc3RhcyBvIGdyYWR1YWRvcyBlbiBBREUgcG9kcsOtYW4gc2VyIHBlcmZlY3RhbWVudGUgY2FwYWNlcyBkZSBhY2NlZGVyIGEgZXNlIHRpcG8gZGUgcHVlc3Rvcy4gU2Vnw7puIGVzdG9zIGF1dG9yZXMsIHBhcmEgc2VyIHVuIGNpZW50w61maWNvIGRlIGRhdG9zIHNlIG5lY2VzaXRhbiB0cmVzIHRpcG9zIGRlIGNvbXBldGVuY2lhcyBvIGNvbm9jaW1pZW50b3M6IHTDqWNuaWNhcyBkZSBwcm9ncmFtYWNpw7NuLCBjb25vY2ltaWVudG9zIGVzdGFkw61zdGljb3MgeSBjb25vY2ltaWVudG9zIGVzcGVjw61maWNvcyBkZWwgY2FtcG8gZGUgYXBsaWNhY2nDs24sIGVuIG51ZXN0cm8gY2FzbyBjb25vY2ltaWVudG9zIGRlIGVjb25vbcOtYS4gT2J2aWFtZW50ZSBsb3MgZ3JhZHVhZG9zIGVuIEVjb25vbcOtYSBzb2JyZXNhbGRyw6FuIGVuIGNvbm9jaW1pZW50b3MgYWNlcmNhIGRlIGxhIHJlYWxpZGFkIGVjb27Ds21pY2EsIHNlZ3VyYW1lbnRlIHRlbmRyw6FuIGVzY2Fzb3MgY29ub2NpbWllbnRvcyBkZSBwcm9ncmFtYWNpw7NuLCBwZXJvIHRlbmRyw6FuIHVuIGNvbm9jaW1pZW50byByYXpvbmFibGVtZW50ZSBidWVubyBkZSBFc3RhZMOtc3RpY2EsIHF1aXrDoXMgbm8gZW4gbGFzIHTDqWNuaWNhcyBhcHJvcGlhZGFzIG8gbcOhcyBhY3R1YWxlcywgcGVybyBzaSBlbiBsb3MgY29uY2VwdG9zIGLDoXNpY29zOyBhc8OtIHF1ZSBwYXJhIHN1cGxpciBlc3RhcyBkZWZpY2llbmNpYXMgcG9kcsOtYSBiYXN0YXIgY29uIGluY2x1aXIgYWxnw7puIG1vZHVsbyBvIGFzaWduYXR1cmEgc29icmUgbGFzIHByaW5jaXBhbGVzIHTDqWNuaWNhcyBlc3RhZMOtc3RpY2FzIGVtcGxlYWRhcyBlbiBEYXRhIFNjaWVuY2UgZSBpbnRyb2R1Y2lyIGxvcyBmdW5kYW1lbnRvcyBkZSBwcm9ncmFtYWNpw7NuIGVuIGVsIGN1cnLDrWN1bG8uIEFkZW3DoXMsIHBhcmVjZSBxdWUgbGFzIGNvbXBhw7HDrWFzIHRlY25vbMOzZ2ljYXMgKEdvb2dsZSwgRmFjZWJvb2ssIC4uLikgdGFtYmnDqW4gbmVjZXNpdGFuIHkgY29udHJhdGFuIGVjb25vbWlzdGFzLiBQdWVkZXMgdmVybG8gW2FxdcOtXShodHRwczovL3BhcGVycy5zc3JuLmNvbS9zb2wzL3BhcGVycy5jZm0/YWJzdHJhY3RfaWQ9MzI0Nzc5NCkgZW4gdW4gYXJ0w61jdWxvIHkgW2FxdcOtXShodHRwczovL2hici5vcmcvMjAxOS8wMi93aHktdGVjaC1jb21wYW5pZXMtaGlyZS1zby1tYW55LWVjb25vbWlzdHMpIGVuIHVuIHBvc3QuCgpPYnZpYW1lbnRlIGVsIG9iamV0aXZvIGRlIGVzdGEgYXNpZ25hdHVyYSBvcHRhdGl2YSBubyBlcyBmb3JtYXIgcHJvZmVzaW9uYWxlcyBlbiBEYXRhIFNjaWVuY2UgZW4gZWwgY2FtcG8gZGUgbGEgRWNvbm9tw61hLCBubywgZWwgb2JqZXRpdm8gZXMgbXVjaG8gbcOhcyBtb2Rlc3RvLCBzaW1wbGVtZW50ZSBpbmljaWFybGVzIGVuIGVzdGUgbXVuZG8gcHJlc2VudMOhbmRvbGVzIHVuYSBwYW5vcsOhbWljYSBkZSB0w7NwaWNvcywgeSBleHBvbmVybG9zLCBxdWl6w6FzIHBvciBwcmltZXJhIHZleiBlbiBsYSBjYXJyZXJhLCBhIGxhIHByb2dyYW1hY2nDs24geSB1bmEgcmFtYSBkZSBsYSBlc3RhZMOtc3RpY2EgcXVlIGVzdMOhIGVtZXJnaWVuZG8gY29uIGdyYW4gZnVlcnphIGNvbW8gZXMgZWwgTWFjaGluZSBMZWFybmluZyB5IHZlciBxdWUgZW4gZWwgZm9uZG8gZXN0YXMgdMOpY25pY2FzIG5vIHNvbiB0YW4gZGlmZXJlbnRlcyBkZSBsb3MgY29udGVuaWRvcyBtw6FzIHRyYWRpY2lvbmFsZXMgcXVlIHByZXNlbnRhbW9zIGVuIGFzaWduYXR1cmFzIGNvbW8gRWNvbm9tZXRyw61hLgoKCkVuIGVsIG1pc21vIHNlbnRpZG8gc2UgaGEgcHJvbnVuY2lhZG8gZWwgW0dsb2JhbCBVbml2ZXJzaXR5IExlYWRlcnMgRm9ydW0gKEdVTEYpXShodHRwczovL3d3dy53ZWZvcnVtLm9yZy9jb21tdW5pdGllcy9nbG9iYWwtdW5pdmVyc2l0eS1sZWFkZXJzLWZvcnVtKSwgZm9ybyBxdWUgcmXDum5lIGEgcmVwcmVzZW50YW50ZXMgZGUgbGFzIDI4IHVuaXZlcnNpZGFkZXMgbcOhcyBwcmVzdGlnaW9zYXMuIEVuIHN1IHJldW5pw7NuIGFudWFsIGVuIGVsIEZvcm8gRWNvbsOzbWljbyBNdW5kaWFsIGRlIDIwMTksIGFuYWxpemFyb24gZWwgcGFwZWwgZGUgbGFzIHVuaXZlcnNpZGFkZXMgZW4gdW4gbXVuZG8gZW4gY29uc3RhbnRlIGNhbWJpby4gRW4gc3UgImluZm9ybWUiIGRlc3RhY2Fyb24sIHBvciBzdSBpbXBvcnRhbmNpYSBwYXJhIGVsIGZ1dHVybyBkZSBsYSB1bml2ZXJzaWRhZCB5IHN1IHJvbCBlbiBsYSBzb2NpZWRhZCwgNiB0ZW1hcyBwcmlvcml0YXJpb3MsIHkgZWwgcHJpbWVybyBkZSBlbGxvcyBmdWUgbGEgaW50cm9kdWNjacOzbiBkZSBsYSBhc2lnbmF0dXJhICJEYXRhIHNjaWVuY2UgMTAxIiBlbiBsYSBtYXlvcsOtYSBkZSBsYXMgdGl0dWxhY2lvbmVzLiBObyBzZSB0cmF0YXLDrWEgZGUgaGFjZXIgYSB0b2RvcyBsb3MgdGl0dWxhZG9zIGNpZW50w61maWNvcyBkZSBkYXRvcywgcGVybyBzw60gZGUgYXVtZW50YXIgc3UgY29tcGV0ZW5jaWEgZW4gdGVtYXMgcmVsYWNpb25hZG9zIGNvbiBsb3MgZGF0b3MgeSBsYSBpbmZvcm1hY2nDs24uCgpEZSBoZWNobywgYWxndW5hcyB1bml2ZXJzaWRhZGVzIHlhIGhhbiBlbXBlemFkbyBhIGluY2x1aXIgbWF0ZXJpYXMgZGUgY29tcHV0YWNpw7NuIGVuIGxhcyBsaWNlbmNpYXR1cmFzIGRlIGNpZW5jaWFzIHNvY2lhbGVzIHBhcmEgYWRhcHRhcnNlIGEgbGFzIG51ZXZhcyBuZWNlc2lkYWRlcyBkZWwgbWVyY2FkbzsgcG9yIGVqZW1wbG8sIFtsYSB1bml2ZXJzaWRhZCBCb2Njb25pXShodHRwczovL3JldGluYS5lbHBhaXMuY29tL3JldGluYS8yMDE3LzA5LzIyL3RlbmRlbmNpYXMvMTUwNjA3Mjg4Nl8xMDA5NjUuaHRtbCkgaW50cm9kdWpvIGVuIDIwMTggZWwgbGVuZ3VhamUgZGUgcHJvZ3JhbWFjacOzbiBQaHl0b24gY29tbyBhc2lnbmF0dXJhIHRyb25jYWwgZW4gbGEgZmFjdWx0YWQgZGUgRWNvbm9tw61hIGNvbiBlbCBhcmd1bWVudG8gZGUgcXVlICJsYSBwcm9ncmFtYWNpw7NuIGVzIHRhbiBiw6FzaWNhIGNvbW8gbGFzIG1hdGVtw6F0aWNhcyBwYXJhIGVsIG11bmRvIHF1ZSB2aWVuZSwgZGUgZm9ybWEgcXVlIHRvZG9zIGxvcyBlc3R1ZGlhbnRlcyB0ZW5kcsOhbiBxdWUgYXByZW5kZXIgc3VzIGZ1bmRhbWVudG9zIi4KCgpMYSB2ZXJkYWQgZXMgcXVlIGF1bnF1ZSBwZXJzb25hbG1lbnRlIHRlbmdvIG1pcyBkdWRhcywgcGFyZWNlIHF1ZSBbc2UgbmVjZXNpdGFuIG11dXV1Y2hvc3MgY2llbnRpZmljb3MgZGUgZGF0b3NdKGh0dHBzOi8vZWxwYWlzLmNvbS9lY29ub21pYS8yMDE4LzA5LzI1L2FjdHVhbGlkYWQvMTUzNzg3MzU3MV8zNzM4MzguaHRtbCM/cmVmPXJzcyZmb3JtYXQ9c2ltcGxlJmxpbms9Z3VpZCkuIEVsIG1lcmNhZG8gbGFib3JhbCBwaWRlIGNhZGEgdmV6IG3DoXMgcHJvZmVzaW9uYWxlcyBxdWUgc2VwYW4gdHJhdGFyIGxhIGVub3JtZSBjYW50aWRhZCBkZSBpbmZvcm1hY2nDs24gcXVlIGdlbmVyYW1vcy4gRW4gW2VzdGUgcG9zdF0oaHR0cHM6Ly92ZWVrYXliZWUuZ2l0aHViLmlvLzIwMTkvMDIvMTMvZGF0YS1zY2llbmNlLWlzLWRpZmZlcmVudC8pIHNvbiB1biBwb2NvIG3DoXMgcGVzaW1pc3RhcyB5IHNlw7FhbGFuIHF1ZSBlbCBtZXJjYWRvIGRlIERTIHB1ZWRlIHlhIGVzdGFyIHNhdHVyYWRvLCBhdW5xdWUgaGFibGFuIGRlIEVzdGFkb3MgVW5pZG9zIHByaW5jaXBhbG1lbnRlLiBFbiBjdWFscXVpZXIgY2FzbywgbGEgdGVjbm9sb2fDrWEgdmEgYSBjYW1iaWFyIGVsIHBlcmZpbCBkZSBtdWNob3MgdHJhYmFqb3MsIHkgc2VndXJhbWVudGUgc2UgbmVjZXNpdGFyYW4gbWF5b3JlcyBuaXZlbGVzIGRlIGNvbXBldGVuY2lhIGVuIHRlY25vbG9nw61hLCBwcm9ncmFtYWNpw7NuIHkgZGF0b3MuIExvIGV4cGxpY2FuIFthcXVpXShodHRwczovL2RhdG9zLmdvYi5lcy9lcy9ub3RpY2lhL2NvbW8tbWVqb3Jhci1sYS1hZHF1aXNpY2lvbi1kZS1oYWJpbGlkYWRlcy1lbi1sYS1lcmEtZGUtbGFzLXRlY25vbG9naWFzLWludGVsaWdlbnRlcykuIE90cm8gZWplbXBsbyBsbyB0aWVuZXMgZW4gW2VzdGEgbm90aWNpYV0oaHR0cHM6Ly9lbHBhaXMuY29tL2NjYWEvMjAxOS8wNS8wOS9tYWRyaWQvMTU1NzM5Nzk5N18wOTc2MzUuaHRtbCksIGVuIGxhIHF1ZSBlbCB0aXR1bGFyIG5vcyBkaWNlIHF1ZSAiU2UgYnVzY2FuIGZ1bmNpb25hcmlvcyBxdWUgc2VwYW4gZGUgQmlnICBEYXRhIi4KCkxhIHRlY25vbG9nw61hLCB0b2RvcyBsbyBzYWJlbW9zIHkgZXhwZXJpbWVudGFtb3MsIGhhIHByb3ZvY2FkbyBncmFuZGVzIGNhbWJpb3MsIG5vIHNvbG8gZW4gZWwgbWVyY2FkbyBsYWJvcmFsIG8gZW4gbGFzIGluZHVzdHJpYXMsIHNpbm8gdGFtYmnDqW4gbGEgc29jaWVkYWQgeSBwdWVkZSBxdWUgaW5jbHVzbyBlbiBsYSBmb3JtYSBkZSBwZW5zYXIgeSByZWxhY2lvbmFybm9zLCBhc8OtIHF1ZSBubyBlc3TDoSBkZSBtw6FzIGNvbm9jZXIgdW4gcG9jbyBtw6FzIGRlIGVzdG9zIHRlbWFzIGF1bnF1ZSBzZWEgZGUgZm9ybWEgdGFuZ2VuY2lhbCB5YSBxdWUgZW4gZWwgY3Vyc28gbm9zIGNlbnRyYXJlbW9zIGVuIHVuIGFzcGVjdG8gaW5zdHJ1bWVudGFsIGNvbW8gc29uIGxhcyBoZXJyYW1pZW50YXMgZGUgcHJvZ3JhbWFjacOzbiBwYXJhIG1hbmVqYXIgZGF0b3MgeSBleHRyYWVyIGluZm9ybWFjacOzbiBkZSBlbGxvcy4gRGUgaGVjaG8sIGJ1ZW5hIHBhcnRlIGRlIGxvcyBjYW1iaW9zIGZ1dHVyb3MgcXVlIG5vcyBlc3BlcmFuIGVzdMOhbiBhc29jaWFkb3MgYSBsYSBJbnRlbGlnZW5jaWEgQXJ0aWZpY2lhbCB5IGFsICBNYWNoaW5lIExlYXJuaW5nL0RlZXAgTGVhcm5pbmcsIHF1ZSB0cmF0YXJlbW9zIGVuIGVsIHRlbWEgNCBkZWwgY3Vyc28uIEFsZ3Vub3MgZWplbXBsb3MgW2FxdcOtXShodHRwczovL3d3dy54YXRha2EuY29tL3JvYm90aWNhLWUtaWEvMTctZXhwZWN0YXRpdmFzLWRlLWNvbW8tZWwtbWFjaGluZS1sZWFybmluZy12YS1hLWNhbWJpYXItZWwtbXVuZG8pLCBbYXF1w61dKGh0dHBzOi8vd3d3LmluZm9iYWUuY29tL3RlbmRlbmNpYXMvaW5ub3ZhY2lvbi8yMDE4LzA1LzIwL3ByZXNlbnRlLXktZnV0dXJvLWRlLWxhLWludGVsaWdlbmNpYS1hcnRpZmljaWFsLWNvbW8tdmEtYS1jYW1iaWFyLW51ZXN0cm8tbXVuZG8vKSwgbyBbYXF1w61dKGh0dHBzOi8vZWxjb21lcmNpby5wZS90ZWNub2xvZ2lhL2FjdHVhbGlkYWQvb2Noby10ZWNub2xvZ2lhcy1jYW1iaWFyYW4tbXVuZG8tMjAyMC0zOTQzNDIpLgoKCgoKIyMgMi4gUmVzdW1lbiBkZSBjb250ZW5pZG9zCgoKRW4gZWwgdGVtYXJpbyBoZSBpbnRlbnRhZG8gcmVmbGVqYXIgcXVlIGxhIHByb2dyYW1hY2nDs24gdGVuZHLDoSB1biBwZXNvIGltcG9ydGFudGUgKHRlbWEgMiB5IHRlbWEgMyk7IHByb2dyYW1hY2nDs24gc2llbXByZSBvcmllbnRhZGEgYWwg4oCcbWFuZWpv4oCdIGRlIGRhdG9zICh0ZW1hcyAzLCA0IHkgNSkgeSBhcGxpY2FjacOzbiBkZSB0w6ljbmljYXMgZXN0YWTDrXN0aWNhcyBzaW1wbGVzIHkgYWxndW5hcyBtw6FzIGF2YW56YWRhcyBjb21vIGVuIGVsIHRlbWEgNCAoTWFjaGluZSBMZWFybmluZyksIHNpZW1wcmUgcmVsYWNpb27DoW5kb2xhcyB5IHZpbmN1bMOhbmRvbGFzIGNvbiBsbyB5YSBhcHJlbmRpZG8gZW4gbGFzIGFzaWduYXR1cmFzIGRlIEVjb25vbWV0csOtYSB5IEVzdGFkw61zdGljYSBjdXJzYWRhcyBwcmV2aWFtZW50ZS4gIAoKTWkgaW50ZW5jacOzbiBlcyBxdWUgbGEgYXNpZ25hdHVyYSBzZWEgZnVuZGFtZW50YWxtZW50ZSBwcsOhY3RpY2EsIGFwb3nDoW5kb21lIHBhcmEgaW50cm9kdWNpciBsb3MgY29udGVuaWRvcyBlbiBjYXNvcyBwcsOhY3RpY29zIGNvbiBkYXRvcyByZWFsZXMgZGUgZGl2ZXJzb3MgZm9ybWF0b3MgZSDDrW5kb2xlICh0YWJ1bGFyZXMsIHRleHRvLCBlc3BhY2lhbGVzIGV0Y+KApikgeSBwcm9jZWRlbmNpYSAoSU5FLCBFdXJvc3RhdCwgT0NERSwgdHdpdHRlciwgV2lraURhdGEsIOKApiApCgoKRWwgY3Vyc28gY29taWVuemEgY29uIHVuIHRlbWEgZW4gZWwgcXVlIHNlIHByZXNlbnRhcsOtYW4gbG9zIG9iamV0aXZvcyBkZWwgY3Vyc28sIGp1bnRvIGNvbiBsb3MgdMOpcm1pbm9zIHkgcHJvY2Vzb3MgcXVlIGp1c3RpZmljYW4gbGEgYXNpZ25hdHVyYSAoQmlnIGRhdGEsIENpZW5jaWEgZGUgRGF0b3MsIE1hY2hpbmUgTGVhcm5pbmcsIOKApikuIFNlIHByZXNlbnRhcsOtYW4gZWplbXBsb3MgZGUgYXBsaWNhY2nDs24gZXhpdG9zYSBkZSBlc3RhcyBudWV2YXMgdMOpY25pY2FzIGVuIGVsIGNhbXBvIGRlIGxhIEVjb25vbcOtYSwgW1ZhcmlhbiAoMjAxNCldKGh0dHBzOi8vd3d3LmFlYXdlYi5vcmcvYXJ0aWNsZXM/aWQ9MTAuMTI1Ny9qZXAuMjguMi4zKSAgbyBbQ2hha3JhYm9ydHkgKDIwMTcpXShodHRwczovL2lkZWFzLnJlcGVjLm9yZy9wL2JvZS9ib2Vld3AvMDY3NC5odG1sKSwgcGFyYSBmaW5hbG1lbnRlIHJlc2FsdGFyIGxhIGltcG9ydGFuY2lhIGRlIGxhIGludmVzdGlnYWNpw7NuIHJlcHJvZHVjaWJsZSB5IGVsIHBhcGVsIHF1ZSBqdWVnYSBlbCBzb2Z0d2FyZSBsaWJyZSBlbiBlbGxhLgoKRWwgdGVtYSAyIHNlIHByZXNlbnRhbiBsb3MgcnVkaW1lbnRvcyBkZWwgbGVuZ3VhamUgZGUgcHJvZ3JhbWFjacOzbiBSLiBFc3RvcyBjb25vY2ltaWVudG9zIGLDoXNpY29zIHNlIGlyw6FuIHJlZm9yemFuZG8gZHVyYW50ZSBlbCBjdXJzbyB0cmFiYWphbmRvIGVuIGRpZmVyZW50ZXMgdMOzcGljb3MgeSBhcGxpY2FjaW9uZXMuIEVuIGVzdGUgdGVtYSBzZSB2b2x2ZXLDoSBhIGVuZmF0aXphciBsYSBpbXBvcnRhbmNpYSBkZSBsYSByZXByb2R1Y2liaWxpZGFkIGRlIGxhIGludmVzdGlnYWNpw7NuIHkgcXVlIHBhcmEgZWxsbyBzZSBoYWNlIGluZGlzcGVuc2FibGUgaW50ZXJhY3R1YXIgY29uIGVsIG9yZGVuYWRvciBjb24gc2NyaXB0czogbm8gc29sbyBzZSBoYSBkZSBleHBsaWNhciB5IGRvY3VtZW50YXIgZWwgcHJvY2VzbyBzZWd1aWRvIGVuIHVuIGFuw6FsaXNpcyBkZSBkYXRvcywgc2lubyBxdWUgc2UgaGEgZGUgcHJlc2VudGFyIHRhbWJpw6luIGVsIGZpY2hlcm8gY29uIGxhcyBpbnN0cnVjY2lvbmVzIGVqZWN1dGFkYXMuIFBhcmEgaGFjZXIgZXN0byBwb3NpYmxlIGVzIGltcHJlc2NpbmRpYmxlIGVsIHVzbyBkZSBsYSBwcm9ncmFtYWNpw7NuLCBwcmVzZW50w6FuZG9zZSBlbiBlc3RlIHRlbWEgaGVycmFtaWVudGFzIChrbml0ciB5IFJtYXJrZG93bikgcXVlIHBvc2liaWxpdGFuIGxhIGdlbmVyYWNpw7NuIGRlIGluZm9ybWVzIHJlcHJvZHVjaWJsZXMuICAKCkVuIGVsIHRlbWEgMywgc2UgZGVzYXJyb2xsYXLDoW4gZGl2ZXJzb3MgY2Fzb3MgZGUgYW7DoWxpc2lzIGRlIGRhdG9zIHRhYnVsYXJlcywgZWwgZm9ybWF0byBtw6FzIHTDrXBpY28gZW4gQ2llbmNpYXMgU29jaWFsZXMsIGNvbiBsb3MgcXVlIHNlIGlyw6FuIGFzZW50YW5kbyBsb3MgY29ub2NpbWllbnRvcyBkZSBwcm9ncmFtYWNpw7NuIGluaWNpYWRvcyBlbiBlbCB0ZW1hIDIsIGFob3JhIGFwbGljYWRvcyBhIHRhcmVhcyBjb25jcmV0YXMgcmVsYWNpb25hZG9zIGNvbiBlbCBtYW5lam8gZGUgZGF0b3MgdGFidWxhcmVzIHkgZGl2ZXJzb3MgdMOzcGljb3MgZGUgYW7DoWxpc2lzIGRlIG5hdHVyYWxlemEgZWNvbsOzbWljYS4gIAoKRWwgdGVtYSA0IGVzIHVuYSBpbnRyb2R1Y2Npw7NuIGEgbG9zIGNvbmNlcHRvcyBiw6FzaWNvcyBkZWwgTWFjaGluZSBMZWFybmluZyAodHJhaW5pbmcgc2V0LCB2YWxpZGF0aW9uIHNldCwgY3Jvc3MgdmFsaWRhdGlvbiwgYmFnZ2luZyBldGMuLiksIHBhcmEgbHVlZ28gcHJlc2VudGFyIGxhcyB0w6ljbmljYXMgbyBhbGdvcml0bW9zIGRlIE1MIG3DoXMgcmVsYWNpb25hZG9zIGNvbiBsbyBxdWUgbG9zIGVzdHVkaWFudGVzIHlhIGhhbiB2aXN0byBlbiBFY29ub21ldHLDrWEsIGNvbW8gc29uIGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCB5IGxhIHJlZ3Jlc2nDs24gbG9nw61zdGljYSwgYWhvcmEgcHJlc2VudGFkb3MgZGVzZGUgdW5hIMOzcHRpY2EgZGlmZXJlbnRlLCBtw6FzIG9yaWVudGFkYSBhIGxhIHByZWRpY2Npw7NuLiAgCgpMb3MgY3VhdHJvIHByaW1lcm9zIHRlbWFzIGNvbnN0aXR1eWVuIGxhIHBhcnRlIGZ1bmRhbWVudGFsIGRlIGxhIGFzaWduYXR1cmEgcXVlIGZpbmFsaXphIGNvbiB1biB0ZW1hIGFkaWNpb25hbCBlbiBlbCBxdWUsIHVuYSB2ZXogbG9zIGVzdHVkaWFudGVzIGhhbiBhbGNhbnphZG8gY2llcnRhIHNvbHR1cmEgZW4gZWwgbWFuZWpvIGRlIFIsIHNlIHByZXNlbnRhbiBkaWZlcmVudGVzIHTDs3BpY29zIGVuIGVsIGNhbXBvIGRlIGxhIENpZW5jaWEgZGUgRGF0b3M6IGRhdG9zIGVzcGFjaWFsZXMgeSBzdSByZXByZXNlbnRhY2nDs24sIGRhdG9zIHRleHR1YWxlcyAocG9yIGVqZW1wbG8sIFR3aXR0ZXIpIHkgZGF0b3MgZW5sYXphZG9zIChXaWtpZGF0YSkuCgoKCiMjIDMuIFJlbGFjacOzbiBkZSB0ZW1hcwoKLSBUZW1hIDE6IENpZW5jaWEgZGUgZGF0b3MgeSBsYSBlcmEgZGVsIEJpZyBEYXRhICAKCi0gVGVtYSAyOiBVbmEgaW50cm9kdWNjacOzbiBhIFIgcGFyYSBDaWVuY2lhIGRlIGRhdG9zICAKCi0gVGVtYSAzOiBNYW5lam8gZGUgZGF0b3MgdGFidWxhcmVzICAKCi0gVGVtYSA0OiBJbnRyb2R1Y2Npw7NuIGFsIE1hY2hpbmUgTGVhcm5pbmcgKE1MKSAgCgotIFRlbWEgNTogT3Ryb3MgdGlwb3MgZGUgZGF0b3MgIAoKPGJyPjxicj4=