Resultados

  1. La variable que mas importancia tiene es el precio del arriendo en el barrio en que viven las familias.

  2. Las variables relacionadas al trabajo tiene tambíen mucha importancia. En especifico el número de personas ocupadas e inactivas del hogar y si las personas trabajan en el sector formal o informal.

  3. La edad y los años de escolaridad del jefe del hogar son importantes también.

  4. La condición de tenencia de la vivienda, es importante, en especifico si las personas, son propietarios, arriendan o si ocupan la casa de manera irregular.

  5. El número de personas

  6. Si hay mayores de 60 años o menores de 18

  7. El estado de salud del jefe del hogar.

Intro

Muchas veces es dificil saber el ingreso real que las personas tienen. Bajo estas circunstancias es muy complicado intentar saber cual es el nivel de pobreza real en una unidad territorial es por esto recurri a la encuesta Casen 2020. La Encuesta de Caracterización Socioeconómica Nacional, Casen, es realizada por el Ministerio de Desarrollo Social de Chile, uno de los objetivos es tener información que permita conocer periódicamente la situación de los hogares y de la población, especialmente de aquella en situación de pobreza y de aquellos grupos definidos como prioritarios por la política social.

Con tal objetivo elimine todas las preguntas relacionadas a ingreso e intente con el resto de las variables (salud, vivienda, trabajo, demograficas) predecir a través de varios metodos (Xgboost, regresión logista, Knn, Emsablajes) cuando una persona es pobre y cuando no lo es. El objetivo es intentar, en circunstacias en las que tener datos de ingreso sea complejo, establecer que variables son importantes para predecir la situación de pobreza de un hogar.

Tratamiento de las variables

En Primer lugar fueron eliminadas todas las variables de ingreso y aquellas variables categoricas que poseian mas de 30 niveles. Luego se filtraron solo las observación que pertenecian a jefes del hogar (para poder tener una variable por hogar).Para las variables categoricas con NA’s se creo una categoria unknown. Además se transformaron todas las variables categoricas en variables dummies. Se imputo las observaciones NA’s de las variables numericas ocupando la mediana. Además, estas variables fueron transformadas a logaritmo y luego normalizadas.

EDA

Si uno observa el grafico es claro que existen ciertos grupos en los que pareciera que la pobreza fuera algo mas recurrente en hogares donde el jefe de hogar es joven, inmigrante, nativo americano, mujer, o vive en un sector rural. Quizas existen ciertas convinaciones de estas categorias en donde sea mas recurrente la pobreza, lo cual exploraremos a continuación.

No es muy claro que exista un patrón muy claro en relación entre pobreza y el grupo etnico del jefe de hogar. Al menos a nivel de comunas.

Cuando se explora el grafico es posible señalar que las mujeres y amerindios parecieran ser los mas afectados. ¿Que sucede si agrego ruralidad.

Todos las categorias rurales tienen una mayor proporción de hogares pobres. Además tal como se puede ver en el heatmap los hogares en donde los jefes de hogar son mujeres nativas que viven en zonas rurales son las mas pobres. Por su parte, aquellos en donde el jefe de hogar es un hobres que viven en ciudades, independiente del grupo etnico, son los grupos con menor proporcion de pobreza.

Miremos ahora algunas de las variables numericas del dataset

#####Boxplot con variables numericas

Es posible constatar claras diferencias en 3 de las 4 variables de graficamos. Por lo tanto, pareciera que la edad y años de escolaridad del jefe hogar junto con el numero de personas que trabajan en un hogar tienen un efecto sobre la pobreza. No se puede afirmar lo mismo con tanta claridad del número de personas que viven en un hogar.

Miremos ahora otras variables que pueden ser interesantes.

Cuando miramos al pobreza según el tipo de tenencia del hogar es evidente que las personas que estan arrendando y las que ocupan ilegalemente un hogar suelen tener una mayor proporción de pobres. En el caso de los que arrienda es porque una porción de sus ingresos se tiene que ir a pagar el arriendo. En el caso de las personas que ocupan ilegalemnte una propiedad, es porque han llegado a esa condición porque no tienen dinero para pagar un arriendo.

Otra variable importante es el tratamiento medico, en particular cuando las personas responde que no saben o no recuerdan ssi es que recibieron tratamiento medico, lo cual me intriga mucho, y no puedo encontrar una explicación.

It seems like one of the most important variables is how much money is pay for renting a house in the neighhood a family is.

Cuando se mira el precio de los arriendo para las familias pobres y no pobres es totalmente posible ver la diferencias en la distribución entre ambos grupos.

#Cambiar a escala continua ruralidad #hacer otro grafico con la población en vez de las casas

%>% rename(Variable = inmigrante)%>% mutate(Variable= case_when( Variable == “No inmigrante” ~ “Non-Inmigrant”, Variable == “Inmigrante” ~ “Inmigrant”))

Resultados

Pareciera ser la variable mas importante es la v19, este corresponden al valor que las personas reportan cuando se les pregunta: ¿Cuánto se paga de arriendo en este sector? La segunda variable mas importante es el número de personas ocupadas n_ocupadas. La tercera es la edad del jefe del hogar, edad.

En rasgos generales hay un grupo de variables que tienen que ver con la tenencia del hogar, es decir si es que la casa que se habita es propia, se arrienda u otros. En este tipo están las variables V13 y ten_viv. Un segundo grupo de tiene relación con el aspecto laboral del hogar, ejemplo de esto son las variables n_ocupados y n_inactivos. Importante mencionar que los inactivos no son las personas desempleadas. Los inactivos son las personas de 15 o más años, que no estaban ocupadas durante la semana que se hizo la escuesta pero que tampoco habían buscado un puesto detrabajo durante las últimas cuatro semanas a la encuesta. En este grupo pueden caer estudiantes o personas que tengan algún problema de salud. Otra variable que cae en esta area es ocup_inf, que determinar si es que el jefe del hogar está trabajando de manera informal.

Otras variable son los años de escolaridad del jefe de hogar representadas por esc2 y esc. La presencia de menores de edad men18c y de personas mayores de 60 años también importante may60c. Otras variables tienen relación al numero de personas que habita el hogar: numviv,tot_per,numper y p6. Por último, el estado de salud, en especifico, si es que los jefes de hogar han estado en algún tratamiento medico durante los últimos 12 meses.

Conclusiones

Primero que todo, es importante entender que estos datos fueron recolectado durante la pandemia, por lo cual cualquier conclusión que alcanzamos aquí quizas no es valida en condiciones “normales”. Habiendo despejado esto, creo que es importante señalar que nos parece sorprendente que contrario a lo que creiamos muchas de las variables demograficas, como raza o genero, no eran tan importantes como pensabamos.

Era mucho mas importante saber el número de personas ocupadas e inactivas en un hogar si es que las ocupadas trabajaba en el sector formal o informal. Así mismo el acceso a la vivienda es tambien importante, una persona que es propietaria del hogar en donde recide no tiene que gastar dinero en arriendo, lo cual le permite destinar ese dinero a suplir otras necesidades. Otras variables como el número de personas que habita en un hogar y los años de escolaridad del jefe de hogar no nos sorprendieron en absoluto. No así salud, en donde nos tomo por sorpresa que aquellas casas en las que los jefes de hogar decian que no recordaban o no sabían si es que habian recibido algún tratamiento medico en los últimos 12 meses tenian mayor propensión a ser hogar en condición de pobreza.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyMgUmVzdWx0YWRvcw0KDQoxKQ0KDQoyKSBMYSB2YXJpYWJsZSBxdWUgbWFzIGltcG9ydGFuY2lhIHRpZW5lIGVzIGVsIHByZWNpbyBkZWwgYXJyaWVuZG8gZW4gZWwgYmFycmlvIGVuIHF1ZSB2aXZlbiBsYXMgZmFtaWxpYXMuDQoNCjMpIExhcyB2YXJpYWJsZXMgcmVsYWNpb25hZGFzIGFsIHRyYWJham8gdGllbmUgdGFtYsOtZW4gbXVjaGEgaW1wb3J0YW5jaWEuIEVuIGVzcGVjaWZpY28gZWwgbsO6bWVybyBkZSBwZXJzb25hcyBvY3VwYWRhcyBlIGluYWN0aXZhcyBkZWwgaG9nYXIgeSBzaSBsYXMgcGVyc29uYXMgdHJhYmFqYW4gZW4gZWwgc2VjdG9yIGZvcm1hbCBvIGluZm9ybWFsLg0KDQo0KSBMYSBlZGFkIHkgbG9zIGHDsW9zIGRlIGVzY29sYXJpZGFkIGRlbCBqZWZlIGRlbCBob2dhciBzb24gaW1wb3J0YW50ZXMgdGFtYmnDqW4uDQoNCjUpIExhIGNvbmRpY2nDs24gZGUgdGVuZW5jaWEgZGUgbGEgdml2aWVuZGEsIGVzIGltcG9ydGFudGUsIGVuIGVzcGVjaWZpY28gc2kgbGFzIHBlcnNvbmFzLCBzb24gcHJvcGlldGFyaW9zLCBhcnJpZW5kYW4gbyBzaSBvY3VwYW4gbGEgY2FzYSBkZSBtYW5lcmEgaXJyZWd1bGFyLg0KDQo2KSBFbCBuw7ptZXJvIGRlIHBlcnNvbmFzDQoNCjcpIFNpIGhheSBtYXlvcmVzIGRlIDYwIGHDsW9zIG8gbWVub3JlcyBkZSAxOA0KDQo4KSBFbCBlc3RhZG8gZGUgc2FsdWQgZGVsIGplZmUgZGVsIGhvZ2FyLg0KDQoNCiMjIyBJbnRybw0KDQohW10oaHR0cDovL29ic2VydmF0b3Jpby5taW5pc3RlcmlvZGVzYXJyb2xsb3NvY2lhbC5nb2IuY2wvaW1hZ2VzL2Nhc2VuXzIwMjAuc3ZnKQ0KDQpNdWNoYXMgdmVjZXMgZXMgZGlmaWNpbCBzYWJlciBlbCBpbmdyZXNvIHJlYWwgcXVlIGxhcyBwZXJzb25hcyB0aWVuZW4uIEJham8gZXN0YXMgY2lyY3Vuc3RhbmNpYXMgZXMgbXV5IGNvbXBsaWNhZG8gaW50ZW50YXIgc2FiZXIgY3VhbCBlcyBlbCBuaXZlbCBkZSBwb2JyZXphIHJlYWwgZW4gdW5hIHVuaWRhZCB0ZXJyaXRvcmlhbCBlcyBwb3IgZXN0byByZWN1cnJpIGEgbGEgZW5jdWVzdGEgQ2FzZW4gMjAyMC4gTGEgRW5jdWVzdGEgZGUgQ2FyYWN0ZXJpemFjacOzbiBTb2Npb2Vjb27Ds21pY2EgTmFjaW9uYWwsIENhc2VuLCBlcyByZWFsaXphZGEgcG9yIGVsIE1pbmlzdGVyaW8gZGUgRGVzYXJyb2xsbyBTb2NpYWwgZGUgQ2hpbGUsIHVubyBkZSBsb3Mgb2JqZXRpdm9zIGVzIHRlbmVyIGluZm9ybWFjacOzbiBxdWUgcGVybWl0YSBjb25vY2VyIHBlcmnDs2RpY2FtZW50ZSBsYSBzaXR1YWNpw7NuIGRlIGxvcyBob2dhcmVzIHkgZGUgbGEgcG9ibGFjacOzbiwgZXNwZWNpYWxtZW50ZSBkZSBhcXVlbGxhIGVuIHNpdHVhY2nDs24gZGUgcG9icmV6YSB5IGRlIGFxdWVsbG9zIGdydXBvcyBkZWZpbmlkb3MgY29tbyBwcmlvcml0YXJpb3MgcG9yIGxhIHBvbMOtdGljYSBzb2NpYWwuDQoNCkNvbiB0YWwgb2JqZXRpdm8gZWxpbWluZSB0b2RhcyBsYXMgcHJlZ3VudGFzIHJlbGFjaW9uYWRhcyBhIGluZ3Jlc28gZSBpbnRlbnRlIGNvbiBlbCByZXN0byBkZSBsYXMgdmFyaWFibGVzIChzYWx1ZCwgdml2aWVuZGEsIHRyYWJham8sIGRlbW9ncmFmaWNhcykgcHJlZGVjaXIgYSB0cmF2w6lzIGRlIHZhcmlvcyBtZXRvZG9zIChYZ2Jvb3N0LCByZWdyZXNpw7NuIGxvZ2lzdGEsIEtubiwgRW1zYWJsYWplcykgY3VhbmRvIHVuYSBwZXJzb25hIGVzIHBvYnJlIHkgY3VhbmRvIG5vIGxvIGVzLiBFbCBvYmpldGl2byBlcyBpbnRlbnRhciwgZW4gY2lyY3Vuc3RhY2lhcyBlbiBsYXMgcXVlIHRlbmVyIGRhdG9zIGRlIGluZ3Jlc28gc2VhIGNvbXBsZWpvLCBlc3RhYmxlY2VyIHF1ZSB2YXJpYWJsZXMgc29uIGltcG9ydGFudGVzIHBhcmEgcHJlZGVjaXIgbGEgc2l0dWFjacOzbiBkZSBwb2JyZXphIGRlIHVuIGhvZ2FyLg0KDQojIyMgVHJhdGFtaWVudG8gZGUgbGFzIHZhcmlhYmxlcw0KDQpFbiBQcmltZXIgbHVnYXIgZnVlcm9uIGVsaW1pbmFkYXMgdG9kYXMgbGFzIHZhcmlhYmxlcyBkZSBpbmdyZXNvIHkgYXF1ZWxsYXMgdmFyaWFibGVzIGNhdGVnb3JpY2FzIHF1ZSBwb3NlaWFuIG1hcyBkZSAzMCBuaXZlbGVzLiBMdWVnbyBzZSBmaWx0cmFyb24gc29sbyBsYXMgb2JzZXJ2YWNpw7NuIHF1ZSBwZXJ0ZW5lY2lhbiBhIGplZmVzIGRlbCBob2dhciAocGFyYSBwb2RlciB0ZW5lciB1bmEgdmFyaWFibGUgcG9yIGhvZ2FyKS5QYXJhIGxhcyB2YXJpYWJsZXMgY2F0ZWdvcmljYXMgY29uIE5BJ3Mgc2UgY3JlbyB1bmEgY2F0ZWdvcmlhIHVua25vd24uIEFkZW3DoXMgc2UgdHJhbnNmb3JtYXJvbiB0b2RhcyBsYXMgdmFyaWFibGVzIGNhdGVnb3JpY2FzIGVuIHZhcmlhYmxlcyBkdW1taWVzLiBTZSBpbXB1dG8gbGFzIG9ic2VydmFjaW9uZXMgTkEncyBkZSBsYXMgdmFyaWFibGVzIG51bWVyaWNhcyBvY3VwYW5kbyBsYSBtZWRpYW5hLiBBZGVtw6FzLCBlc3RhcyB2YXJpYWJsZXMgZnVlcm9uIHRyYW5zZm9ybWFkYXMgYSBsb2dhcml0bW8geSBsdWVnbyBub3JtYWxpemFkYXMuDQoNCg0KIyMjIEVEQQ0KDQoNCmBgYHtyLGVjaG8gPSBGQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCg0Kc2V4bzwtdHJhaW4gJT4lDQogIG11dGF0ZShwb2JyZXphID0gcG9icmV6YSA9PSAiMSIpICU+JQ0KICBncm91cF9ieShzZXhvKSAlPiUgDQogICAgc3VtbWFyaXNlKHBvYnJlemEgPSBtZWFuKHBvYnJlemEpKSAlPiUgDQogIHJlbmFtZShWYXJpYWJsZSA9IHNleG8pICU+JSANCiAgbXV0YXRlKFZhcmlhYmxlPSBjYXNlX3doZW4oIFZhcmlhYmxlID09ICJIb21icmUiIH4gIk1hbiIsDQogIFZhcmlhYmxlID09ICJNdWplciIgfiAiV29tYW4iKSkNCg0KZWRhZDwtdHJhaW4lPiUgbXV0YXRlKGVkYWQ9Y3V0KGVkYWQsIGJyZWFrcz1jKDE4LCAzMCwgNDUsNjAsIEluZiksIGxhYmVscz1jKCJBZ2UgMTgtMjkiLCAiQWdlIDMwLTQ0IiwiQWdlIDQ1LTU5IiwiQWdlICs2MCIpKSklPiUNCiAgbXV0YXRlKHBvYnJlemEgPSBwb2JyZXphID09ICIxIikgJT4lDQogIGdyb3VwX2J5KGVkYWQpICU+JSANCiAgICBzdW1tYXJpc2UocG9icmV6YSA9IG1lYW4ocG9icmV6YSkpICU+JSANCiAgcmVuYW1lKFZhcmlhYmxlID0gZWRhZCkNCg0KZXRuaWE8LXRyYWluICU+JQ0KICBtdXRhdGUocG9icmV6YSA9IHBvYnJlemEgPT0gIjEiKSAlPiUNCiAgZ3JvdXBfYnkoZXRuaWEpICU+JSANCiAgICBzdW1tYXJpc2UocG9icmV6YSA9IG1lYW4ocG9icmV6YSkpICU+JSANCiAgcmVuYW1lKFZhcmlhYmxlID0gZXRuaWEpJT4lIA0KICBtdXRhdGUoVmFyaWFibGU9IGNhc2Vfd2hlbiggVmFyaWFibGUgPT0gIk5vIHBlcnRlbmVjZSBhIG5pbmd1bm8gcHVlYmxvIGluZMOtZ2VuYSIgfiAiTm9uLU5hdGl2ZSBBbWVyaWNhbiIsDQogIFZhcmlhYmxlID09ICJQZXJ0ZW5lY2UgYSBwdWVibG9zIGluZMOtZ2VuYXMiIH4gIk5hdGl2ZSBBbWVyaWNhbiIpKQ0KDQoNCnpvbmE8LXRyYWluICU+JQ0KICBtdXRhdGUocG9icmV6YSA9IHBvYnJlemEgPT0gIjEiKSAlPiUNCiAgZ3JvdXBfYnkoem9uYSkgJT4lIA0KICAgIHN1bW1hcmlzZShwb2JyZXphID0gbWVhbihwb2JyZXphKSkgJT4lIA0KICByZW5hbWUoVmFyaWFibGUgPSB6b25hKSU+JSANCiAgbXV0YXRlKFZhcmlhYmxlPSBjYXNlX3doZW4oIFZhcmlhYmxlID09ICJSdXJhbCIgfiAiUnVyYWwiLA0KICBWYXJpYWJsZSA9PSAiVXJiYW5vIiB+ICJVcmJhbiIpKQ0KDQppbm1pZ3JhbnRlPC10cmFpbiAlPiUNCiAgbXV0YXRlKHBvYnJlemEgPSBwb2JyZXphID09ICIxIikgJT4lDQogIGdyb3VwX2J5KGlubWlncmFudGUpICU+JSANCiAgICBzdW1tYXJpc2UocG9icmV6YSA9IG1lYW4ocG9icmV6YSkpICU+JSANCiAgcmVuYW1lKFZhcmlhYmxlID0gaW5taWdyYW50ZSklPiUgDQogIG11dGF0ZShWYXJpYWJsZT0gY2FzZV93aGVuKCBWYXJpYWJsZSA9PSAiTm8gaW5taWdyYW50ZSIgfiAiTm9uLUlubWlncmFudCIsDQogIFZhcmlhYmxlID09ICJJbm1pZ3JhbnRlIiB+ICJJbm1pZ3JhbnQiKSkNCg0KDQpqdW50YXM8LXJiaW5kKHNleG8sZWRhZCxldG5pYSx6b25hLGlubWlncmFudGUpDQoNCg0KDQoNCg0KI3N1IHJiaW5kDQoNCmBgYA0KDQpgYGB7cixlY2hvID0gRkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQoNCmp1bnRhc1stYyg3LCAxNCksIF0gJT4lDQogIG11dGF0ZShWYXJpYWJsZSA9IGZjdF9yZW9yZGVyKFZhcmlhYmxlLCBwb2JyZXphKSkgJT4lIA0KZ2dwbG90KCBhZXMocG9icmV6YSwgZmN0X3Jlb3JkZXIoVmFyaWFibGUscG9icmV6YSkpKSArDQogICAgICAgIGdlb21fc2VnbWVudChhZXMoeCA9IDAsIHkgPSBWYXJpYWJsZSwgeGVuZCA9IHBvYnJlemEsIHllbmQgPSBWYXJpYWJsZSksIGNvbG9yID0gImdyZXk1MCIpICsNCiAgICAgICAgZ2VvbV9wb2ludCgpICtnZ3RpdGxlKCJQb3ZlcnR5IFJhdGUgYnkgSGVhZCBvZiBIb3VzZWhvbGQgRGVtb2dyYXBoaWMgQ2hhcmFjdGVyaXN0aWNzIikrDQogIGxhYnMoeCA9ICJQcm9wb3J0aW9uIG9mIFBvb3IgSG91c2Vob2xkcyIseT1OVUxMKSsgdGhlbWVfbGlnaHQoKQ0KDQpgYGANCg0KU2kgdW5vIG9ic2VydmEgZWwgZ3JhZmljbyBlcyBjbGFybyBxdWUgZXhpc3RlbiBjaWVydG9zIGdydXBvcyBlbiBsb3MgcXVlIHBhcmVjaWVyYSBxdWUgbGEgcG9icmV6YSBmdWVyYSBhbGdvIG1hcyByZWN1cnJlbnRlIGVuIGhvZ2FyZXMgZG9uZGUgZWwgamVmZSBkZSBob2dhciBlcyBqb3ZlbiwgaW5taWdyYW50ZSwgbmF0aXZvIGFtZXJpY2FubywgbXVqZXIsIG8gdml2ZSBlbiB1biBzZWN0b3IgcnVyYWwuIFF1aXphcyBleGlzdGVuIGNpZXJ0YXMgY29udmluYWNpb25lcyBkZSBlc3RhcyBjYXRlZ29yaWFzIGVuIGRvbmRlIHNlYSBtYXMgcmVjdXJyZW50ZSBsYSBwb2JyZXphLCBsbyBjdWFsIGV4cGxvcmFyZW1vcyBhIGNvbnRpbnVhY2nDs24uDQoNCg0KDQoNCg0KDQoNCk5vIGVzIG11eSBjbGFybyBxdWUgZXhpc3RhIHVuIHBhdHLDs24gbXV5IGNsYXJvIGVuIHJlbGFjacOzbiBlbnRyZSBwb2JyZXphIHkgZWwgZ3J1cG8gZXRuaWNvIGRlbCBqZWZlIGRlIGhvZ2FyLiBBbCBtZW5vcyBhIG5pdmVsIGRlIGNvbXVuYXMuDQoNCg0KDQpgYGB7ciwgZWNobz0gRkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQoNCmRhdGE8LW1hdHJpeChjKDAuMTEsMC4wOCwwLjE0LDAuMTApLCBucm93ID0gMiwgZGltbmFtZXMgPSBsaXN0KGMoIk5hdGl2ZSBBbWVyaWNhbiIsIk5vbi1OYXRpdmUgQW1lcmljYW4iKSwgYygiTWFuIiwiV29tYW4iKSkpDQoNCg0KcGxvdF9seSh4PWNvbG5hbWVzKGRhdGEpLCB5PXJvd25hbWVzKGRhdGEpLCB6ID0gZGF0YSwgdHlwZSA9ICJoZWF0bWFwIiwNCiAgICAgICAgICAgICBjb2xvcnNjYWxlPSAiQmx1ZXMiKSAlPiUNCiAgICBsYXlvdXQobWFyZ2luID0gbGlzdChsPTEyMCksdGl0bGUgPSAiUG92ZXJ0eSBSYXRlIGJ5IEhlYWQgb2YgSG91c2Vob2xkIEdlbnJlIGFuZCBFdGhuaWNpdHkiKQ0KDQoNCmBgYA0KDQpDdWFuZG8gc2UgZXhwbG9yYSBlbCBncmFmaWNvIGVzIHBvc2libGUgc2XDsWFsYXIgcXVlIGxhcyBtdWplcmVzIHkgYW1lcmluZGlvcyBwYXJlY2llcmFuIHNlciBsb3MgbWFzIGFmZWN0YWRvcy4gwr9RdWUgc3VjZWRlIHNpIGFncmVnbyBydXJhbGlkYWQuDQoNCmBgYHtyLGVjaG8gPSBGQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSxmaWcud2lkdGg9Ny41LCBmaWcuaGVpZ2h0PTQuMn0NCg0KZGF0YTwtbWF0cml4KGMoMC4wNzYsMC4xMCwwLjA3OSwwLjE2LDAuMTEsMC4xNCwwLjEzLDAuMTkpLCBucm93ID0gNCwgZGltbmFtZXMgPSBsaXN0KGMoIlVyYmFuIE5vbi1OYXRpdmUgQW1lcmljYW4iLCJSdXJhbCBOb24tTmF0aXZlIEFtZXJpY2FuIiwiVXJiYW4gTmF0aXZlIEFtZXJpY2FuIiwiUnVyYWwgTmF0aXZlIEFtZXJpY2FuIiksIGMoIk1hbiIsIldvbWFuIikpKQ0KDQoNCnBsb3RfbHkoeD1jb2xuYW1lcyhkYXRhKSwgeT1yb3duYW1lcyhkYXRhKSwgeiA9IGRhdGEsIHR5cGUgPSAiaGVhdG1hcCIsDQogICAgICAgICAgICAgY29sb3JzY2FsZT0gIlZpcmlkaXMiKSAlPiUNCiAgICBsYXlvdXQobWFyZ2luID0gbGlzdChsPTEyMCksdGl0bGUgPSAiUG92ZXJ0eSBSYXRlIGJ5IEhlYWQgb2YgSG91c2Vob2xkIEdlbnJlLCBFdGhuaWNpdHkgYW5kIFJ1cmFsaXR5IikNCg0KDQpgYGANCg0KVG9kb3MgbGFzIGNhdGVnb3JpYXMgcnVyYWxlcyB0aWVuZW4gdW5hIG1heW9yIHByb3BvcmNpw7NuIGRlIGhvZ2FyZXMgcG9icmVzLiBBZGVtw6FzIHRhbCBjb21vIHNlIHB1ZWRlIHZlciBlbiBlbCBoZWF0bWFwIGxvcyBob2dhcmVzIGVuIGRvbmRlIGxvcyBqZWZlcyBkZSBob2dhciBzb24gbXVqZXJlcyBuYXRpdmFzIHF1ZSB2aXZlbiBlbiB6b25hcyBydXJhbGVzIHNvbiBsYXMgbWFzIHBvYnJlcy4gUG9yIHN1IHBhcnRlLCBhcXVlbGxvcyBlbiBkb25kZSBlbCBqZWZlIGRlIGhvZ2FyIGVzIHVuIGhvYnJlcyBxdWUgdml2ZW4gZW4gY2l1ZGFkZXMsIGluZGVwZW5kaWVudGUgZGVsIGdydXBvIGV0bmljbywgc29uIGxvcyBncnVwb3MgY29uIG1lbm9yIHByb3BvcmNpb24gZGUgcG9icmV6YS4gDQoNCk1pcmVtb3MgYWhvcmEgYWxndW5hcyBkZSBsYXMgdmFyaWFibGVzIG51bWVyaWNhcyBkZWwgZGF0YXNldA0KDQojIyMjI0JveHBsb3QgY29uIHZhcmlhYmxlcyBudW1lcmljYXMNCg0KYGBge3IsZWNobyA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KdHJhaW4gJT4lDQogIHBpdm90X2xvbmdlcihjKGVkYWQsZXNjLG5fb2N1cGFkb3MsbnVtcGVyKSwgbmFtZXNfdG8gPSAic3RhdCIsIHZhbHVlc190byA9ICJ2YWx1ZSIpJT4lIA0KICBtdXRhdGUoc3RhdD0gY2FzZV93aGVuKHN0YXQgPT0gImVkYWQiIH4gIkhlYWQgb2YgSG91c2UgQWdlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdCA9PSAiZXNjIiB+ICJIZWFkIG9mIEhvdXNlIFNjaG9vbGluZyBZZWFycyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQgPT0gIm5fb2N1cGFkb3MiIH4gIk51bWJlciBvZiBFbXBsb3llZCBQZW9wbGUgYnkgSG91c2Vob2xkIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdCA9PSAibnVtcGVyIiB+ICJOdW1iZXIgb2YgUGVvcGxlIGJ5IEhvdXNlaG9sZCIpLA0KICAgICAgICAgcG9icmV6YT1pZmVsc2UocG9icmV6YT09IjEiLCJQb29yIiwiTm90IFBvb3IiKSkgJT4lDQogIGdncGxvdChhZXMocG9icmV6YSwgdmFsdWUsIGZpbGwgPSBwb2JyZXphLCBjb2xvciA9IHBvYnJlemEpKSArDQogIGdlb21fYm94cGxvdChhbHBoYSA9IDAuNCkgKw0KICBmYWNldF93cmFwKH5zdGF0LCBzY2FsZXMgPSAiZnJlZV95IiwgbnJvdyA9IDIpICsNCiAgbGFicyh5ID0gTlVMTCx4PSJQb3ZlcnR5IiwgY29sb3IgPSBOVUxMLCBmaWxsID0gTlVMTCkrdGhlbWVfbGlnaHQoKQ0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIA0KYGBgDQoNCkVzIHBvc2libGUgY29uc3RhdGFyIGNsYXJhcyBkaWZlcmVuY2lhcyBlbiAzIGRlIGxhcyA0IHZhcmlhYmxlcyBkZSBncmFmaWNhbW9zLiBQb3IgbG8gdGFudG8sIHBhcmVjaWVyYSBxdWUgbGEgZWRhZCB5IGHDsW9zIGRlIGVzY29sYXJpZGFkIGRlbCBqZWZlIGhvZ2FyIGp1bnRvIGNvbiBlbCBudW1lcm8gZGUgcGVyc29uYXMgcXVlIHRyYWJhamFuIGVuIHVuIGhvZ2FyIHRpZW5lbiB1biBlZmVjdG8gc29icmUgbGEgcG9icmV6YS4gTm8gc2UgcHVlZGUgYWZpcm1hciBsbyBtaXNtbyBjb24gdGFudGEgY2xhcmlkYWQgZGVsIG7Dum1lcm8gZGUgcGVyc29uYXMgcXVlIHZpdmVuIGVuIHVuIGhvZ2FyLg0KDQpNaXJlbW9zIGFob3JhIG90cmFzIHZhcmlhYmxlcyBxdWUgcHVlZGVuIHNlciBpbnRlcmVzYW50ZXMuDQoNCmBgYHtyLGVjaG89RkFMU0UsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSxmaWcud2lkdGg9Ny41LCBmaWcuaGVpZ2h0PTQuMn0NCg0KdHJhaW4gJT4lICANCiAgbXV0YXRlKHYxMz0gY2FzZV93aGVuKHYxMyA9PSAiUHJvcGlhIiB+ICJPd25lciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHYxMyA9PSAiQXJyZW5kYWRhIiB+ICJSZW50aW5nIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdjEzID09ICJDZWRpZGEiIH4gIiBHcmFudGVkIEZyZWUgb2YgQ2hhcmdlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdjEzID09ICJVc3VmcnVjdG8gKHPDs2xvIHVzbyB5IGdvY2UpIiB+ICJPdGhlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHYxMyA9PSAiT2N1cGFjacOzbiBpcnJlZ3VsYXIgKGRlIGhlY2hvKSJ8IHYxMyA9PSAiUG9zZWVkb3IgaXJyZWd1bGFyIiAgfiAiSWxsZWdhbCBPY2N1cGF0aW9uIiksDQogICAgICAgICAgICAgICAgICAgICAgIHBvYnJlemE9aWZlbHNlKHBvYnJlemE9PSIxIiwiUG9vciIsIk5vdCBQb29yIikpICU+JSBjb3VudChwb2JyZXphLCB2MTMpICU+JSANCiAgZ3JvdXBfYnkodjEzKSAlPiUgIG11dGF0ZShwcm9wID0gbiAvIHN1bShuKSkgJT4lIA0KICBwbG90X2x5KHggPX5wcm9wLCB5ID0gfnYxMywgY29sb3IgPSB+cG9icmV6YSkgJT4lIA0KICBhZGRfYmFycygpICU+JSANCiAgbGF5b3V0KGJhcm1vZGUgPSAic3RhY2siLHRpdGxlID0gIlBvdmVydHkgYnkgVGVudXJlIFN0YXR1cyBvZiBIb3VzZWhvbGRzIiwNCiAgICAgICAgIHlheGlzPWxpc3QodGl0bGUgPSIiKSkNCiAgDQoNCmBgYA0KDQpDdWFuZG8gbWlyYW1vcyBhbCBwb2JyZXphIHNlZ8O6biBlbCB0aXBvIGRlIHRlbmVuY2lhIGRlbCBob2dhciBlcyBldmlkZW50ZSBxdWUgbGFzIHBlcnNvbmFzIHF1ZSBlc3RhbiBhcnJlbmRhbmRvIHkgbGFzIHF1ZSBvY3VwYW4gaWxlZ2FsZW1lbnRlIHVuIGhvZ2FyIHN1ZWxlbiB0ZW5lciB1bmEgbWF5b3IgcHJvcG9yY2nDs24gZGUgcG9icmVzLiBFbiBlbCBjYXNvIGRlIGxvcyBxdWUgYXJyaWVuZGEgZXMgcG9ycXVlIHVuYSBwb3JjacOzbiBkZSBzdXMgaW5ncmVzb3Mgc2UgdGllbmUgcXVlIGlyIGEgcGFnYXIgZWwgYXJyaWVuZG8uIEVuIGVsIGNhc28gZGUgbGFzIHBlcnNvbmFzIHF1ZSBvY3VwYW4gaWxlZ2FsZW1udGUgdW5hIHByb3BpZWRhZCwgZXMgcG9ycXVlIGhhbiBsbGVnYWRvIGEgZXNhIGNvbmRpY2nDs24gcG9ycXVlIG5vIHRpZW5lbiBkaW5lcm8gcGFyYSBwYWdhciB1biBhcnJpZW5kby4NCg0KYGBge3IsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0UsZmlnLndpZHRoPTcuNSwgZmlnLmhlaWdodD00LjJ9DQoNCnRyYWluICU+JSAgDQogIG11dGF0ZShzMjg9IGNhc2Vfd2hlbihzMjggPT0gIk5vIGhhIGVzdGFkbyBlbiB0cmF0YW1pZW50byBwb3IgbmluZ3VuYSBjb25kaWNpw7NuIGRlIHNhbHVkIGFudGVyaW9yIiB+ICJObyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHMyOCA9PSAiTm8gc2FiZS9ObyByZWN1ZXJkYSIgfiAiRG9uJ3QgS25vdy9Eb24ndCBSZW1lbWJlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHMyOCAhPSAiTm8gaGEgZXN0YWRvIGVuIHRyYXRhbWllbnRvIHBvciBuaW5ndW5hIGNvbmRpY2nDs24gZGUgc2FsdWQgYW50ZXJpb3IiIHwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHMyOCAhPSAiTm8gc2FiZS9ObyByZWN1ZXJkYSIgfiAiWWVzIiksDQogICAgICAgICAgICAgICAgICAgICAgIHBvYnJlemE9aWZlbHNlKHBvYnJlemE9PSIxIiwiUG9vciIsIk5vdCBQb29yIikpJT4lIGNvdW50KHBvYnJlemEsIHMyOCkgJT4lIA0KICBncm91cF9ieShzMjgpICU+JSAgbXV0YXRlKHByb3AgPSBuIC8gc3VtKG4pKSAlPiUgDQogIHBsb3RfbHkoeCA9fnByb3AsIHkgPSB+czI4LCBjb2xvciA9IH5wb2JyZXphKSAlPiUgDQogIGFkZF9iYXJzKCkgJT4lIA0KICBsYXlvdXQoYmFybW9kZSA9ICJzdGFjayIsdGl0bGUgPSAiRHVyaW5nIHRoZSBwYXN0IDEyIG1vbnRocywgaGF2ZSB5b3UgYmVlbiBpbiBtZWRpY2FsIHRyZWF0bWVudD8iLA0KICAgICAgICAgeWF4aXM9bGlzdCh0aXRsZSA9IiIpKQ0KDQpgYGANCg0KT3RyYSB2YXJpYWJsZSBpbXBvcnRhbnRlIGVzIGVsIHRyYXRhbWllbnRvIG1lZGljbywgZW4gcGFydGljdWxhciBjdWFuZG8gbGFzIHBlcnNvbmFzIHJlc3BvbmRlIHF1ZSBubyBzYWJlbiBvIG5vIHJlY3VlcmRhbiBzc2kgZXMgcXVlIHJlY2liaWVyb24gdHJhdGFtaWVudG8gbWVkaWNvLCBsbyBjdWFsIG1lIGludHJpZ2EgbXVjaG8sIHkgbm8gcHVlZG8gZW5jb250cmFyIHVuYSBleHBsaWNhY2nDs24uDQoNCg0KSXQgc2VlbXMgbGlrZSBvbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IHZhcmlhYmxlcyBpcyBob3cgbXVjaCBtb25leSBpcyBwYXkgZm9yIHJlbnRpbmcgYSBob3VzZSBpbiB0aGUgbmVpZ2hob29kIGEgZmFtaWx5IGlzLg0KDQoNCmBgYHtyLGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsZmlnLndpZHRoPTcuNSwgZmlnLmhlaWdodD00LjJ9DQpkMSA8LSBmaWx0ZXIodHJhaW4sIHBvYnJlemEgPT0gIjEiJmlzLm5hKHYxOSk9PUZBTFNFKQ0KZDIgPC0gZmlsdGVyKHRyYWluLCBwb2JyZXphID09ICIwIiZpcy5uYSh2MTkpPT1GQUxTRSkNCg0KZGVuc2l0eTEgPC0gZGVuc2l0eShkMSR2MTkpDQpkZW5zaXR5MiA8LSBkZW5zaXR5KGQyJHYxOSkNCg0KcGxvdF9seShvcGFjaXR5ID0gMC44KSAlPiUgIGFkZF9saW5lcyh4ID0gfmxvZyhkZW5zaXR5MSR4KzEpLCB5ID0gfmxvZyhkZW5zaXR5MSR5KzEpLCBuYW1lID0gInBvb3IiKSAlPiUgDQogIGFkZF9saW5lcyh4ID0gfmxvZyhkZW5zaXR5MiR4KzEpLCB5ID0gfmxvZyhkZW5zaXR5MiR5KzEpLCBuYW1lID0gIm5vdCBwb29yIikgJT4lIA0KICBsYXlvdXQoeGF4aXMgPSBsaXN0KHRpdGxlID0gJ0xvZyhSZW50IFByaWNlKScpLA0KICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gJ0RlbnNpdHknKSwNCiAgICAgICAgIHRpdGxlID0gIk5laWdoYm9yaG9vZCBSZW50IFByaWNlIERpc3RyaWJ1dGlvbiIpDQoNCmBgYA0KDQoNCg0KQ3VhbmRvIHNlIG1pcmEgZWwgcHJlY2lvIGRlIGxvcyBhcnJpZW5kbyBwYXJhIGxhcyBmYW1pbGlhcyBwb2JyZXMgeSBubyBwb2JyZXMgZXMgdG90YWxtZW50ZSBwb3NpYmxlIHZlciBsYSBkaWZlcmVuY2lhcyBlbiBsYSBkaXN0cmlidWNpw7NuIGVudHJlIGFtYm9zIGdydXBvcy4NCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQojQ2FtYmlhciBhIGVzY2FsYSBjb250aW51YSBydXJhbGlkYWQNCiNoYWNlciBvdHJvIGdyYWZpY28gY29uIGxhIHBvYmxhY2nDs24gZW4gdmV6IGRlIGxhcyBjYXNhcw0KDQogJT4lIA0KICByZW5hbWUoVmFyaWFibGUgPSBpbm1pZ3JhbnRlKSU+JSANCiAgbXV0YXRlKFZhcmlhYmxlPSBjYXNlX3doZW4oIFZhcmlhYmxlID09ICJObyBpbm1pZ3JhbnRlIiB+ICJOb24tSW5taWdyYW50IiwNCiAgVmFyaWFibGUgPT0gIklubWlncmFudGUiIH4gIklubWlncmFudCIpKQ0KDQoNCg0KDQoNCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0KdHJhaW4gJT4lDQogIG11dGF0ZShwb2JyZXphID0gcG9icmV6YSA9PSAiMSIpICU+JQ0KICBncm91cF9ieShldG5pYSxzZXhvLHpvbmEpICU+JSANCiAgICBzdW1tYXJpc2UocG9icmV6YSA9IG1lYW4ocG9icmV6YSkpICU+JQ0KICBnZ3Bsb3QoYWVzKGV0bmlhLHNleG8sIGZpbGwgPSBwb2JyZXphKSkgKw0KICBnZW9tX3RpbGUoYWxwaGEgPSAwLjkpICsgDQogIGxhYnMoZmlsbCA9ICIlIHBvb3IgaG91c2Vob2xkIiwgeCA9ICJFdGhuaWNpdHkiLCB5ID0gIkdlbnJlIikrdGhlbWVfbGlnaHQoKQ0KYGBgDQoNCg0KDQojIyBSZXN1bHRhZG9zDQoNCg0KDQoNCmBgYHtyLGVjaG89RkFMU0V9DQpjb2xsZWN0X21ldHJpY3MoZmluYWxfcmVzKSANCg0KYGBgDQoNCg0KDQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0NCmZpbmFsX3hnYiAlPiUNCiAgICBmaXQoZGF0YSA9IHRyYWluKSAlPiUNCiAgICBwdWxsX3dvcmtmbG93X2ZpdCgpICU+JQ0KICAgIHZpcChnZW9tID0gInBvaW50IiwgbnVtX2ZlYXR1cmVzID0gMjApKw0KICB0aGVtZV9saWdodCgpDQpgYGANCg0KDQpQYXJlY2llcmEgc2VyIGxhIHZhcmlhYmxlIG1hcyBpbXBvcnRhbnRlIGVzIGxhICoqdjE5KiosIGVzdGUgY29ycmVzcG9uZGVuIGFsIHZhbG9yIHF1ZSBsYXMgcGVyc29uYXMgcmVwb3J0YW4gY3VhbmRvIHNlIGxlcyBwcmVndW50YTogwr9DdcOhbnRvIHNlIHBhZ2EgZGUgYXJyaWVuZG8gZW4gZXN0ZSBzZWN0b3I/IExhIHNlZ3VuZGEgdmFyaWFibGUgbWFzIGltcG9ydGFudGUgZXMgZWwgbsO6bWVybyBkZSBwZXJzb25hcyBvY3VwYWRhcw0KKipuX29jdXBhZGFzKiouIExhIHRlcmNlcmEgZXMgbGEgZWRhZCBkZWwgamVmZSBkZWwgaG9nYXIsICoqZWRhZCoqLiANCg0KRW4gcmFzZ29zIGdlbmVyYWxlcyBoYXkgdW4gZ3J1cG8gZGUgdmFyaWFibGVzIHF1ZSB0aWVuZW4gcXVlIHZlciBjb24gbGEgdGVuZW5jaWEgZGVsIGhvZ2FyLCBlcyBkZWNpciBzaSBlcyBxdWUgbGEgY2FzYSBxdWUgc2UgaGFiaXRhIGVzIHByb3BpYSwgc2UgYXJyaWVuZGEgdSBvdHJvcy4gRW4gZXN0ZSB0aXBvIGVzdMOhbiBsYXMgdmFyaWFibGVzICoqVjEzKiogeSAqKnRlbl92aXYqKi4gVW4gc2VndW5kbyBncnVwbyBkZSB0aWVuZSByZWxhY2nDs24gY29uIGVsIGFzcGVjdG8gbGFib3JhbCBkZWwgaG9nYXIsIGVqZW1wbG8gIGRlIGVzdG8gc29uIGxhcyB2YXJpYWJsZXMgKipuX29jdXBhZG9zKiogeSAqKm5faW5hY3Rpdm9zKiouIEltcG9ydGFudGUgbWVuY2lvbmFyIHF1ZSBsb3MgaW5hY3Rpdm9zIG5vIHNvbiBsYXMgcGVyc29uYXMgZGVzZW1wbGVhZGFzLiBMb3MgaW5hY3Rpdm9zIHNvbiBsYXMgcGVyc29uYXMgZGUgMTUgbyBtw6FzIGHDsW9zLCBxdWUgbm8gZXN0YWJhbiBvY3VwYWRhcyBkdXJhbnRlIGxhIHNlbWFuYSBxdWUgc2UgaGl6byBsYSBlc2N1ZXN0YSBwZXJvIHF1ZSB0YW1wb2NvIGhhYsOtYW4gYnVzY2FkbyB1biBwdWVzdG8gZGV0cmFiYWpvIGR1cmFudGUgbGFzIMO6bHRpbWFzIGN1YXRybyBzZW1hbmFzIGEgbGEgZW5jdWVzdGEuIEVuIGVzdGUgZ3J1cG8gcHVlZGVuIGNhZXIgZXN0dWRpYW50ZXMgbyBwZXJzb25hcyBxdWUgdGVuZ2FuIGFsZ8O6biBwcm9ibGVtYSBkZSBzYWx1ZC4gT3RyYSB2YXJpYWJsZSBxdWUgY2FlIGVuIGVzdGEgYXJlYSBlcyAqKm9jdXBfaW5mKiosIHF1ZSBkZXRlcm1pbmFyIHNpIGVzIHF1ZSBlbCBqZWZlIGRlbCBob2dhciBlc3TDoSB0cmFiYWphbmRvIGRlIG1hbmVyYSBpbmZvcm1hbC4gDQoNCk90cmFzIHZhcmlhYmxlIHNvbiBsb3MgYcOxb3MgZGUgZXNjb2xhcmlkYWQgZGVsIGplZmUgZGUgaG9nYXIgcmVwcmVzZW50YWRhcyBwb3IgKiplc2MyKiogeSAqKmVzYyoqLiBMYSBwcmVzZW5jaWEgZGUgbWVub3JlcyBkZSBlZGFkICoqbWVuMThjKiogeSBkZSBwZXJzb25hcyBtYXlvcmVzIGRlIDYwIGHDsW9zIHRhbWJpw6luIGltcG9ydGFudGUgKiptYXk2MGMqKi4gT3RyYXMgdmFyaWFibGVzIHRpZW5lbiByZWxhY2nDs24gYWwgbnVtZXJvIGRlIHBlcnNvbmFzIHF1ZSBoYWJpdGEgZWwgaG9nYXI6ICoqbnVtdml2KiosKip0b3RfcGVyKiosKipudW1wZXIqKiB5ICoqcDYuKiogUG9yIMO6bHRpbW8sIGVsIGVzdGFkbyBkZSBzYWx1ZCwgZW4gZXNwZWNpZmljbywgc2kgZXMgcXVlIGxvcyBqZWZlcyBkZSBob2dhciBoYW4gZXN0YWRvIGVuIGFsZ8O6biB0cmF0YW1pZW50byBtZWRpY28gZHVyYW50ZSBsb3Mgw7psdGltb3MgMTIgbWVzZXMuDQoNCg0KDQoNCg0KDQoNCmBgYHtyLGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp4Z19jb25mIDwtIGZpbmFsX3JlcyAlPiUNCiAgdW5uZXN0KC5wcmVkaWN0aW9ucykgJT4lDQogIGNvbmZfbWF0KHBvYnJlemEsIC5wcmVkX2NsYXNzKQ0KDQp4Z19jb25mDQoNCg0KYGBgDQoNCg0KDQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQpmaW5hbF9sciAlPiUNCiAgZml0KGRhdGEgPSB0cmFpbikgJT4lDQogIHB1bGxfd29ya2Zsb3dfZml0KCkgJT4lDQogIHZpcChnZW9tID0gInBvaW50IiwgbnVtX2ZlYXR1cmVzID0gMjApKw0KICB0aGVtZV9saWdodCgpDQpgYGANCg0KDQoNCg0KYGBge3IsZWNobz1GQUxTRX0NCmZpbmFsX3Jlcy5sbiA8LSBsYXN0X2ZpdChmaW5hbF9sciwgc3BsKQ0KDQpjb2xsZWN0X21ldHJpY3MoZmluYWxfcmVzLmxuKQ0KYGBgDQoNCg0KIyMgQ29uY2x1c2lvbmVzDQoNClByaW1lcm8gcXVlIHRvZG8sIGVzIGltcG9ydGFudGUgZW50ZW5kZXIgcXVlIGVzdG9zIGRhdG9zIGZ1ZXJvbiByZWNvbGVjdGFkbyBkdXJhbnRlIGxhIHBhbmRlbWlhLCBwb3IgbG8gY3VhbCBjdWFscXVpZXIgY29uY2x1c2nDs24gcXVlIGFsY2FuemFtb3MgYXF1w60gcXVpemFzIG5vIGVzIHZhbGlkYSBlbiBjb25kaWNpb25lcyAibm9ybWFsZXMiLiBIYWJpZW5kbyBkZXNwZWphZG8gZXN0bywgY3JlbyBxdWUgZXMgaW1wb3J0YW50ZSBzZcOxYWxhciBxdWUgbm9zIHBhcmVjZSBzb3JwcmVuZGVudGUgcXVlIGNvbnRyYXJpbyBhIGxvIHF1ZSBjcmVpYW1vcyBtdWNoYXMgZGUgbGFzIHZhcmlhYmxlcyBkZW1vZ3JhZmljYXMsIGNvbW8gcmF6YSBvIGdlbmVybywgbm8gZXJhbiB0YW4gaW1wb3J0YW50ZXMgY29tbyBwZW5zYWJhbW9zLiANCg0KRXJhIG11Y2hvIG1hcyBpbXBvcnRhbnRlIHNhYmVyIGVsIG7Dum1lcm8gZGUgcGVyc29uYXMgb2N1cGFkYXMgZSBpbmFjdGl2YXMgZW4gdW4gaG9nYXIgc2kgZXMgcXVlIGxhcyBvY3VwYWRhcyB0cmFiYWphYmEgZW4gZWwgc2VjdG9yIGZvcm1hbCBvIGluZm9ybWFsLiBBc8OtIG1pc21vIGVsIGFjY2VzbyBhIGxhIHZpdmllbmRhIGVzIHRhbWJpZW4gaW1wb3J0YW50ZSwgdW5hIHBlcnNvbmEgcXVlIGVzIHByb3BpZXRhcmlhIGRlbCBob2dhciBlbiBkb25kZSByZWNpZGUgbm8gdGllbmUgcXVlIGdhc3RhciBkaW5lcm8gZW4gYXJyaWVuZG8sIGxvIGN1YWwgbGUgcGVybWl0ZSBkZXN0aW5hciBlc2UgZGluZXJvIGEgc3VwbGlyIG90cmFzIG5lY2VzaWRhZGVzLiBPdHJhcyB2YXJpYWJsZXMgY29tbyBlbCBuw7ptZXJvIGRlIHBlcnNvbmFzIHF1ZSBoYWJpdGEgZW4gdW4gaG9nYXIgeSBsb3MgYcOxb3MgZGUgZXNjb2xhcmlkYWQgZGVsIGplZmUgZGUgaG9nYXIgbm8gbm9zIHNvcnByZW5kaWVyb24gZW4gYWJzb2x1dG8uIE5vIGFzw60gc2FsdWQsIGVuIGRvbmRlIG5vcyB0b21vIHBvciBzb3JwcmVzYSBxdWUgYXF1ZWxsYXMgY2FzYXMgZW4gbGFzIHF1ZSBsb3MgamVmZXMgZGUgaG9nYXIgZGVjaWFuIHF1ZSBubyByZWNvcmRhYmFuIG8gbm8gc2Fiw61hbiBzaSBlcyBxdWUgaGFiaWFuIHJlY2liaWRvIGFsZ8O6biB0cmF0YW1pZW50byBtZWRpY28gZW4gbG9zIMO6bHRpbW9zIDEyIG1lc2VzIHRlbmlhbiBtYXlvciBwcm9wZW5zacOzbiBhIHNlciBob2dhciBlbiBjb25kaWNpw7NuIGRlIHBvYnJlemEuIA0KDQoNCg0KDQoNCg0KDQoNCg0K