Resultados
Los dispositivos y aplicaciones desde donde se hacen
publicaciones tienen una gran influencia sobre el contenido y los
sentimientos de los tweets.
Existe una gran probabilidad de que los tweets de iPhone son
escritos directamente por AMLO y los que provienen de otros dispositivos
son redactados por su equipo de comunicaciones.
Las publicaciones tienden a ser mayoritariamente positivas. No
obstante, las que son hechas desde Iphone tienen un mayor porcentaje de
tweets con contenido negativo.
Antes de que AMLO fuera electo presidente había mucha más
negatividad en sus publicaciones. Sin embargo, hay 2 peaks de
negatividad en 2020, probablemente están relacionados a la situación
sanitaria (COVID 19).
Las publicaciones con contenido multimedia son más neutrales. Por
su parte, cuando no hay contenido multimedia, las publicaciones tienen
más emociones negativas y positivas.
Frecuencia de Palabras
Miremos las palabras mas comunes

Cuando se analizan datos de Twitter es siempre importante revisar los
tipos de dispositivos y aplicaciones desde los cuales se hacen
publicaciones.

Miremos el comportamiento. Empecemos por las horas en las que se
hacen publicaciones. Me voy a centrar en los 4 dispositivos que tienen
la mayor cantidad de publicaciones.

Ahora miremos los tweets a lo largo del tiempo

Sospecho que los tweets de iPhone son los tweets de él y el resto
deben ser de su equipo. Hay un claro cambio en 2019 cuando AMLO fue
electo presidente. Además hay otro cambio significativo en 2021 cuando
se anuncia el cierre de Periscope.
Analicemos qué palabras tienen una mayor probabilidad de ser escritas
en las publicaciones de iPhone vs Media Studio.

Ocupando los “log odds ratio” puedo encontrar cuales son las palabras
que tienen una mayor verosimilitud de aparecer en publicaciones que
fueron enviadas desde Iphone y desde Media Studio. Este mismo ejercicio
se puede hacer para hacer múltiples comparaciones: Periodos de tiempo, o
entre distintas cuentas. Puedo comparar más de 2 grupos si ocupo la
metodología TF-IDF.
Analisis de Sentimientos

En general hay más comentarios positivos. Me gustaría saber cómo ha
sido el comportamiento a lo largo del tiempo. Voy a centrarme en los
comentarios negativos.

Antes de que AMLO fuera electo presidente había mucha más negatividad
en sus publicaciones, lo cual coincide con el periodo en el que hay más
publicaciones desde iPhone. Otra cosa que es interesante notar son los 2
peaks de negatividad en 2020, sospecho que tiene que ver con la
situación sanitaria (COVID 19).
Otra cosa que me gustaría analizar son los sentimientos de los tweets
por fuente.

Hay marcadas diferencias. Las publicaciones negativas tienen mayor
presencia en las publicaciones que son hechas por iPhone. Por su parte,
las publicaciones positivas tienen mayor presencia de sentimientos
positivos, mientras que las publicaciones hechas por Twitter Media
Studio tienden a tener una mayor cantidad de tweets neutrales.
Quiero saber si es que hay diferencias entre las publicaciones que
tienen algún contenido multimedia y las que no.

Cuando hay contenido multimedia las publicaciones suelen ser más
neutrales. Cuando no hay fotos ni videos, las publicaciones tienen más
emociones negativas y positivas.
Por último quiero saber el porcentaje de publicaciones con contenido
multimedia por los distintos tipos de fuentes.




Partidos Políticos


Emociones

LS0tDQp0aXRsZTogIkFuw6FsaXNpcyBkZSB0d2VldHMgZGUgQU1MTyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIFJlc3VsdGFkb3MNCg0KMSkgTG9zIGRpc3Bvc2l0aXZvcyB5IGFwbGljYWNpb25lcyBkZXNkZSBkb25kZSBzZSBoYWNlbiBwdWJsaWNhY2lvbmVzIHRpZW5lbiB1bmEgZ3JhbiBpbmZsdWVuY2lhIHNvYnJlIGVsIGNvbnRlbmlkbyB5IGxvcyBzZW50aW1pZW50b3MgZGUgbG9zIHR3ZWV0cy4NCg0KMikgRXhpc3RlIHVuYSBncmFuIHByb2JhYmlsaWRhZCBkZSBxdWUgbG9zIHR3ZWV0cyBkZSBpUGhvbmUgc29uIGVzY3JpdG9zIGRpcmVjdGFtZW50ZSBwb3IgQU1MTyB5IGxvcyBxdWUgcHJvdmllbmVuIGRlIG90cm9zIGRpc3Bvc2l0aXZvcyBzb24gcmVkYWN0YWRvcyBwb3Igc3UgZXF1aXBvIGRlIGNvbXVuaWNhY2lvbmVzLg0KDQozKSBMYXMgcHVibGljYWNpb25lcyB0aWVuZGVuIGEgc2VyIG1heW9yaXRhcmlhbWVudGUgcG9zaXRpdmFzLiBObyBvYnN0YW50ZSwgbGFzIHF1ZSBzb24gaGVjaGFzIGRlc2RlIElwaG9uZSB0aWVuZW4gdW4gbWF5b3IgcG9yY2VudGFqZSBkZSB0d2VldHMgY29uIGNvbnRlbmlkbyBuZWdhdGl2by4NCg0KNCkgQW50ZXMgZGUgcXVlIEFNTE8gZnVlcmEgZWxlY3RvIHByZXNpZGVudGUgaGFiw61hIG11Y2hhIG3DoXMgbmVnYXRpdmlkYWQgZW4gc3VzIHB1YmxpY2FjaW9uZXMuIFNpbiBlbWJhcmdvLCBoYXkgMiBwZWFrcyBkZSBuZWdhdGl2aWRhZCBlbiAyMDIwLCBwcm9iYWJsZW1lbnRlIGVzdMOhbiByZWxhY2lvbmFkb3MgYSBsYSBzaXR1YWNpw7NuIHNhbml0YXJpYSAoQ09WSUQgMTkpLg0KDQo1KSBMYXMgcHVibGljYWNpb25lcyBjb24gY29udGVuaWRvIG11bHRpbWVkaWEgc29uIG3DoXMgbmV1dHJhbGVzLiBQb3Igc3UgcGFydGUsIGN1YW5kbyBubyBoYXkgY29udGVuaWRvIG11bHRpbWVkaWEsIGxhcyBwdWJsaWNhY2lvbmVzIHRpZW5lbiBtw6FzIGVtb2Npb25lcyBuZWdhdGl2YXMgeSBwb3NpdGl2YXMuDQoNCg0KIyMgRnJlY3VlbmNpYSBkZSBQYWxhYnJhcw0KDQpNaXJlbW9zIGxhcyBwYWxhYnJhcyBtYXMgY29tdW5lcw0KDQpgYGB7cixlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KdHdlZXRfd29yZHMgJT4lIGNvdW50KHdvcmQsc29ydD1UUlVFKSU+JSANCm11dGF0ZShsZXRyYXM9bmNoYXIod29yZCkpICU+JSBmaWx0ZXIobGV0cmFzPjEpICU+JSANCiAgc2xpY2VfaGVhZChuPTIwKSAlPiUNCiAgZ2dwbG90KGFlcyhuLGZjdF9yZW9yZGVyKHdvcmQsbikpKStnZW9tX2NvbCgpK2dndGl0bGUoIjIwIHBhbGFicmFzIG1hcyB1c2FkYXMgcG9yIEFNTE8gZW4gVHdpdHRlciIpKw0KICBsYWJzKHggPSAiZnJlY3VlbmNpYSIsIHkgPSAicGFsYWJyYXMiLCBmaWxsID0gIiIpKyB0aGVtZV9saWdodCgpDQpgYGANCkN1YW5kbyBzZSBhbmFsaXphbiBkYXRvcyBkZSBUd2l0dGVyIGVzIHNpZW1wcmUgaW1wb3J0YW50ZSByZXZpc2FyIGxvcyB0aXBvcyBkZSBkaXNwb3NpdGl2b3MgeSBhcGxpY2FjaW9uZXMgZGVzZGUgbG9zIGN1YWxlcyBzZSBoYWNlbiBwdWJsaWNhY2lvbmVzLiANCg0KYGBge3IsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQoNCnR3ZWV0c19hbWxvICU+JSBjb3VudChzb3VyY2UsIHNvcnQ9VFJVRSkgJT4lIGdncGxvdChhZXMoZmN0X3Jlb3JkZXIoc291cmNlLG4pLG4pKStnZW9tX2NvbCgpK2dndGl0bGUoIkRpc3Bvc2l0aXZvcyB5IGFwbGljYWNpb25lcyBkZXNkZSBsb3MgcXVlIGhhY2VuIHB1YmxpY2FjaW9uZXMiKSsNCiAgbGFicyh4ID0gImZ1ZW50ZSIsIHkgPSAicGFsYWJyYXMiLCBmaWxsID0gIiIpKw0KICB0aGVtZV9saWdodCgpK2Nvb3JkX2ZsaXAoKQ0KDQpgYGANCg0KTWlyZW1vcyBlbCBjb21wb3J0YW1pZW50by4gRW1wZWNlbW9zIHBvciBsYXMgaG9yYXMgZW4gbGFzIHF1ZSBzZSBoYWNlbiBwdWJsaWNhY2lvbmVzLiBNZSB2b3kgYSBjZW50cmFyIGVuIGxvcyA0IGRpc3Bvc2l0aXZvcyBxdWUgdGllbmVuIGxhIG1heW9yIGNhbnRpZGFkIGRlIHB1YmxpY2FjaW9uZXMuDQpgYGB7cixlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KdHdlZXRzX2FtbG8gJT4lIA0KICBmaWx0ZXIoc291cmNlJWluJSBjKCJUd2l0dGVyIE1lZGlhIFN0dWRpbyIsIlBlcmlzY29wZSIsIlR3aXR0ZXIgZm9yIGlQaG9uZSIsIlR3aXR0ZXIgV2ViIEFwcCIpKSAlPiUgDQogIGNvdW50KHNvdXJjZSwgaG91ciA9IGhvdXIod2l0aF90eihjcmVhdGVkX2F0KSkpICU+JQ0KICBtdXRhdGUocGVyY2VudCA9IG4gLyBzdW0obikpICU+JQ0KICBnZ3Bsb3QoYWVzKGhvdXIsIHBlcmNlbnQsIGNvbG9yID0gc291cmNlKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBwZXJjZW50X2Zvcm1hdCgpKSArDQogIGxhYnMoeCA9ICJIb3JhIGRlbCBEw61hIiwNCiAgICAgICB5ID0gIiUgZGUgdHdlZXRzIiwNCiAgICAgICBjb2xvciA9ICIiKSt0aGVtZV9saWdodCgpDQpgYGANCg0KQWhvcmEgbWlyZW1vcyBsb3MgdHdlZXRzIGEgbG8gbGFyZ28gZGVsIHRpZW1wbw0KYGBge3IsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQoNCnR3ZWV0c19hbWxvICU+JSANCiAgICBtdXRhdGUoY3JlYXRlZF9hdD15bWRfaG1zKGNyZWF0ZWRfYXQpKSAlPiUgDQpncm91cF9ieShtb250aD1mbG9vcl9kYXRlKGNyZWF0ZWRfYXQsIm1vbnRoIikpICU+JSBjb3VudChzb3VyY2UpICU+JSANCiAgbXV0YXRlKHByb3AgPSBuIC8gc3VtKG4pKjEwMCkgJT4lICANCiAgZmlsdGVyKHNvdXJjZSVpbiUgYygiVHdpdHRlciBNZWRpYSBTdHVkaW8iLCJQZXJpc2NvcGUiLCJUd2l0dGVyIGZvciBpUGhvbmUiLCJUd2l0dGVyIFdlYiBBcHAiKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKG1vbnRoLCBwcm9wLCBjb2xvciA9IHNvdXJjZSkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBsYWJzKHggPSAiTWVzIiwNCiAgICAgICB5ID0gIiUgZGUgdHdlZXRzIiwNCiAgICAgICBjb2xvciA9ICIiKSArIHRoZW1lX2xpZ2h0KCkNCg0KYGBgDQoNClNvc3BlY2hvIHF1ZSBsb3MgdHdlZXRzIGRlIGlQaG9uZSBzb24gbG9zIHR3ZWV0cyBkZSDDqWwgeSBlbCByZXN0byBkZWJlbiBzZXIgZGUgc3UgZXF1aXBvLiBIYXkgdW4gY2xhcm8gY2FtYmlvIGVuIDIwMTkgY3VhbmRvIEFNTE8gZnVlIGVsZWN0byBwcmVzaWRlbnRlLiBBZGVtw6FzIGhheSBvdHJvIGNhbWJpbyBzaWduaWZpY2F0aXZvIGVuIDIwMjEgY3VhbmRvIHNlIGFudW5jaWEgZWwgY2llcnJlIGRlIFBlcmlzY29wZS4NCg0KQW5hbGljZW1vcyBxdcOpIHBhbGFicmFzIHRpZW5lbiB1bmEgbWF5b3IgcHJvYmFiaWxpZGFkIGRlIHNlciBlc2NyaXRhcyBlbiBsYXMgcHVibGljYWNpb25lcyBkZSBpUGhvbmUgdnMgTWVkaWEgU3R1ZGlvLg0KDQoNCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KcmF0aW9zICU+JSBncm91cF9ieShkaXJlY3Rpb24gPSBsb2dyYXRpbyA+IDApICU+JQ0KICBtdXRhdGUoc291cmNlPWlmZWxzZShkaXJlY3Rpb249PVRSVUUsIk1lZGlhIFN0dWRpbyIsImlQaG9uZSIpKSU+JSANCiAgdG9wX24oMTUsIGFicyhsb2dyYXRpbykpICU+JQ0KICB1bmdyb3VwKCkgJT4lDQogIG11dGF0ZSh3b3JkID0gcmVvcmRlcih3b3JkLCBsb2dyYXRpbykpICU+JQ0KICBnZ3Bsb3QoYWVzKGxvZ3JhdGlvLCB3b3JkLGZpbGw9c291cmNlKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgbGFicyh4ID0gImlQaG9uZS9NZWRpYSBTdHVkaW8gTG9nIFJhdGlvbiIsIHkgPSBOVUxMKSt0aGVtZV9saWdodCgpDQpgYGANCg0KT2N1cGFuZG8gbG9zICJsb2cgb2RkcyByYXRpbyIgcHVlZG8gZW5jb250cmFyIGN1YWxlcyBzb24gbGFzIHBhbGFicmFzIHF1ZSB0aWVuZW4gdW5hIG1heW9yIHZlcm9zaW1pbGl0dWQgZGUgYXBhcmVjZXIgZW4gcHVibGljYWNpb25lcyBxdWUgZnVlcm9uIGVudmlhZGFzIGRlc2RlIElwaG9uZSB5IGRlc2RlIE1lZGlhIFN0dWRpby4gRXN0ZSBtaXNtbyBlamVyY2ljaW8gc2UgcHVlZGUgaGFjZXIgcGFyYSBoYWNlciBtw7psdGlwbGVzIGNvbXBhcmFjaW9uZXM6IFBlcmlvZG9zIGRlIHRpZW1wbywgbyBlbnRyZSBkaXN0aW50YXMgY3VlbnRhcy4gUHVlZG8gY29tcGFyYXIgbcOhcyBkZSAyIGdydXBvcyBzaSBvY3VwbyBsYSBtZXRvZG9sb2fDrWEgVEYtSURGLg0KDQojIyBBbmFsaXNpcyBkZSBTZW50aW1pZW50b3MNCg0KYGBge3IsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQpzZW50aW1pZW50b3NfQU1MTyAlPiUgY291bnQoc2VudGltZW50bykgJT4lDQogIG11dGF0ZShwcm9wID0gbiAvIHN1bShuKSAqMTAwKSAlPiUgZ2dwbG90KGFlcyh5PXByb3AsIHg9c2VudGltZW50byxmaWxsPXNlbnRpbWVudG8pKSArDQogICAgICBnZW9tX2NvbCgpICsNCiAgICAgIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IlJkWWxCdSIpICsNCiAgICAgIGdndGl0bGUoIkFuw6FsaXNpcyBkZSBzZW50aW1pZW50b3MgZGUgQU1MTyBlbiBUd2l0dGVyIikgICsgeWxhYigiUG9yY2VudGFqZSBkZSBUd2VldHMiKSArIHhsYWIoIlRpcG9zIGRlIHBvbGFyaWRhZCIpK3RoZW1lX2xpZ2h0KCkgKw0KICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikNCmBgYA0KRW4gZ2VuZXJhbCBoYXkgbcOhcyBjb21lbnRhcmlvcyBwb3NpdGl2b3MuIE1lIGd1c3RhcsOtYSBzYWJlciBjw7NtbyBoYSBzaWRvIGVsIGNvbXBvcnRhbWllbnRvIGEgbG8gbGFyZ28gZGVsIHRpZW1wby4gVm95IGEgY2VudHJhcm1lIGVuIGxvcyBjb21lbnRhcmlvcyBuZWdhdGl2b3MuDQoNCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQp0d2VldHNfZnVsbCAlPiUgbXV0YXRlKGNyZWF0ZWRfYXQ9eW1kX2htcyhjcmVhdGVkX2F0KSkgJT4lICBncm91cF9ieShtb250aD1mbG9vcl9kYXRlKGNyZWF0ZWRfYXQsIm1vbnRoIikpICU+JSANCiAgY291bnQoc2VudGltZW50bykgICU+JSANCiAgbXV0YXRlKHByb3AgPSBuIC8gc3VtKG4pICoxMDApICU+JSAgDQogIGZpbHRlcihzZW50aW1lbnRvPT0ibmVnYXRpdm8iKSAlPiUgDQogIGdncGxvdChhZXMoeT1wcm9wLCB4PW1vbnRoKSkgKw0KICAgICAgICBnZW9tX2xpbmUoY29sb3I9KCJyZWQiKSkrDQogIGdndGl0bGUoIkFuw6FsaXNpcyBkZSBzZW50aW1pZW50b3MgZGUgQU1MTyBlbiBUd2l0dGVyIGEgbG8gbGFyZ28gZGVsIHRpZW1wbyIpICArIHlsYWIoIlBvcmNlbnRhamUgZGUgVHdlZXRzIE5lZ2F0aXZvcyIpICsgeGxhYigiTWVzIikrDQogIHRoZW1lX2xpZ2h0KCkNCmBgYA0KQW50ZXMgZGUgcXVlIEFNTE8gZnVlcmEgZWxlY3RvIHByZXNpZGVudGUgaGFiw61hIG11Y2hhIG3DoXMgbmVnYXRpdmlkYWQgZW4gc3VzIHB1YmxpY2FjaW9uZXMsIGxvIGN1YWwgY29pbmNpZGUgY29uIGVsIHBlcmlvZG8gZW4gZWwgcXVlIGhheSBtw6FzIHB1YmxpY2FjaW9uZXMgZGVzZGUgaVBob25lLiBPdHJhIGNvc2EgcXVlIGVzIGludGVyZXNhbnRlIG5vdGFyIHNvbiBsb3MgMiBwZWFrcyBkZSBuZWdhdGl2aWRhZCBlbiAyMDIwLCBzb3NwZWNobyBxdWUgdGllbmUgcXVlIHZlciBjb24gbGEgc2l0dWFjacOzbiBzYW5pdGFyaWEgKENPVklEIDE5KS4NCg0KDQpPdHJhIGNvc2EgcXVlIG1lIGd1c3RhcsOtYSBhbmFsaXphciBzb24gbG9zIHNlbnRpbWllbnRvcyBkZSBsb3MgdHdlZXRzIHBvciBmdWVudGUuDQoNCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQp0d2VldHNfZnVsbCAlPiUgIGdyb3VwX2J5KHNvdXJjZSkgJT4lIA0KICBjb3VudChzZW50aW1lbnRvKSAgJT4lIA0KICBtdXRhdGUocHJvcCA9IG4gLyBzdW0obikgKjEwMCkgJT4lICANCiAgZmlsdGVyKHNvdXJjZSVpbiUgYygiVHdpdHRlciBNZWRpYSBTdHVkaW8iLCJQZXJpc2NvcGUiLCJUd2l0dGVyIGZvciBpUGhvbmUiLCJUd2l0dGVyIFdlYiBBcHAiKSkgJT4lIA0KICAgICAgICBnZ3Bsb3QoYWVzKHk9cHJvcCwgeD1zb3VyY2UsZmlsbD1zZW50aW1lbnRvKSkgKw0KZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjksIHByZXNlcnZlID0gInNpbmdsZSIpKSsgICAgICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJSZFlsQnUiKSArDQogICAgICBnZ3RpdGxlKCJBbsOhbGlzaXMgZGUgc2VudGltaWVudG9zIGRlIEFNTE8gZW4gVHdpdHRlciBwb3IgZnVlbnRlIikgICsgeWxhYigiUG9yY2VudGFqZSBkZSBUd2VldHMiKSArIHhsYWIoIlRpcG9zIGRlIGZ1ZW50ZXMiKSt0aGVtZV9saWdodCgpICsNCiAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKw0KICAgdGhlbWUobGVnZW5kLnRpdGxlPWVsZW1lbnRfYmxhbmsoKSkNCg0KYGBgDQpIYXkgbWFyY2FkYXMgZGlmZXJlbmNpYXMuIExhcyBwdWJsaWNhY2lvbmVzIG5lZ2F0aXZhcyB0aWVuZW4gbWF5b3IgcHJlc2VuY2lhIGVuIGxhcyBwdWJsaWNhY2lvbmVzIHF1ZSBzb24gaGVjaGFzIHBvciBpUGhvbmUuIFBvciBzdSBwYXJ0ZSwgbGFzIHB1YmxpY2FjaW9uZXMgcG9zaXRpdmFzIHRpZW5lbiBtYXlvciBwcmVzZW5jaWEgZGUgc2VudGltaWVudG9zIHBvc2l0aXZvcywgbWllbnRyYXMgcXVlIGxhcyBwdWJsaWNhY2lvbmVzIGhlY2hhcyBwb3IgVHdpdHRlciBNZWRpYSBTdHVkaW8gdGllbmRlbiBhIHRlbmVyIHVuYSBtYXlvciBjYW50aWRhZCBkZSB0d2VldHMgbmV1dHJhbGVzLiANCg0KUXVpZXJvIHNhYmVyIHNpIGVzIHF1ZSBoYXkgZGlmZXJlbmNpYXMgZW50cmUgbGFzIHB1YmxpY2FjaW9uZXMgcXVlIHRpZW5lbiBhbGfDum4gY29udGVuaWRvDQptdWx0aW1lZGlhIHkgbGFzIHF1ZSBuby4NCg0KYGBge3IsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQoNCnR3ZWV0c19mdWxsICU+JQ0KICBmaWx0ZXIoIXN0cl9kZXRlY3QodGV4dCwgJ14iJykpICU+JQ0KICBtdXRhdGUoDQogICAgICAgIG1lZGlhID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgInQuY28iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAiRm90by9WaWRlbyIsICJObyBGb3RvL1ZpZGVvIikpICU+JSAgZ3JvdXBfYnkobWVkaWEpICU+JSANCiAgY291bnQoc2VudGltZW50bykgICU+JSANCiAgbXV0YXRlKHByb3AgPSBuIC8gc3VtKG4pICoxMDApICU+JSAgDQogICAgICAgIGdncGxvdChhZXMoeT1wcm9wLCB4PW1lZGlhLGZpbGw9c2VudGltZW50bykpICsNCmdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC45LCBwcmVzZXJ2ZSA9ICJzaW5nbGUiKSkrICAgICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iUmRZbEJ1IikgKw0KICAgICAgZ2d0aXRsZSgiVHdlZXRzIGNvbiBjb250ZW5pZG8gbXVsdGltZWRpYSB2cyB0d2VldHMgc2luIGNvbnRlbmlkbyBtdWx0aW1lZGlhIikgICsgeWxhYigiUG9yY2VudGFqZSBkZSBUd2VldHMiKSArIHhsYWIoIiIpK3RoZW1lX2xpZ2h0KCkgKw0KICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKSArDQogICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpKQ0KDQpgYGANCkN1YW5kbyBoYXkgY29udGVuaWRvIG11bHRpbWVkaWEgbGFzIHB1YmxpY2FjaW9uZXMgc3VlbGVuIHNlciBtw6FzIG5ldXRyYWxlcy4gQ3VhbmRvIG5vIGhheSBmb3RvcyBuaSB2aWRlb3MsIGxhcyBwdWJsaWNhY2lvbmVzIHRpZW5lbiBtw6FzIGVtb2Npb25lcyBuZWdhdGl2YXMgeSBwb3NpdGl2YXMuDQoNClBvciDDumx0aW1vIHF1aWVybyBzYWJlciBlbCBwb3JjZW50YWplIGRlIHB1YmxpY2FjaW9uZXMgY29uIGNvbnRlbmlkbyBtdWx0aW1lZGlhIHBvciBsb3MgZGlzdGludG9zIHRpcG9zIGRlIGZ1ZW50ZXMuDQoNCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQp0d2VldHNfZnVsbCAlPiUNCiAgZmlsdGVyKCFzdHJfZGV0ZWN0KHRleHQsICdeIicpKSAlPiUNCiAgY291bnQoc291cmNlLA0KICAgICAgICBwaWN0dXJlID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgInQuY28iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAiRm90by9WaWRlbyIsICJObyBGb3RvL1ZpZGVvIikpICU+JSANCiAgZ3JvdXBfYnkoc291cmNlKSAlPiUgDQogIG11dGF0ZShwcm9wID0gbiAvIHN1bShuKSAqMTAwKSAlPiUgDQogIGZpbHRlcihzb3VyY2UlaW4lIGMoIlR3aXR0ZXIgTWVkaWEgU3R1ZGlvIiwiUGVyaXNjb3BlIiwiVHdpdHRlciBmb3IgaVBob25lIiwiVHdpdHRlciBXZWIgQXBwIikpICU+JSANCmdncGxvdCggYWVzKHNvdXJjZSwgcHJvcCwgZmlsbCA9IHBpY3R1cmUpKSArDQpnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aCA9IDAuOSwgcHJlc2VydmUgPSAic2luZ2xlIikpKyAgICAgIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IlJkWWxCdSIpICsNCiAgICAgIGdndGl0bGUoIlBvcmNlbnRhamUgZGUgcHVibGljYWNpb25lcyBxdWUgdGllbmVuIGNvbnRlbmlkbyBtdWx0aW1lZGlhIHBvciBmdWVudGVzIikgICsgeWxhYigiUG9yY2VudGFqZSBkZSBUd2VldHMiKSArIHhsYWIoIlRpcG9zIGRlIGZ1ZW50ZXMiKSt0aGVtZV9saWdodCgpICsNCiAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKw0KICAgdGhlbWUobGVnZW5kLnRpdGxlPWVsZW1lbnRfYmxhbmsoKSkNCg0KYGBgDQoNCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQp0d2VldHNfZnVsbCAlPiUgbXV0YXRlKGNyZWF0ZWRfYXQ9eW1kX2htcyhjcmVhdGVkX2F0KSkgJT4lICBncm91cF9ieShtb250aD1mbG9vcl9kYXRlKGNyZWF0ZWRfYXQsIm1vbnRoIikpICU+JSBzdW1tYXJpemUoYXZnX3NlbnQ9bWVhbihwb2xhcmlkYWQpKSAlPiUgICAgICBnZ3Bsb3QoYWVzKHk9YXZnX3NlbnQsIHg9bW9udGgpKSArDQogICAgICAgIGdlb21fbGluZShjb2xvcj0oImJsdWUiKSkrDQogIGdndGl0bGUoIkFuw6FsaXNpcyBkZSBzZW50aW1pZW50b3MgZGUgQU1MTyBlbiBUd2l0dGVyIGEgbG8gbGFyZ28gZGVsIHRpZW1wbyAoUG9sYXJpZGFkKSIpICArIHlsYWIoIlB1bnRhamUgZGUgUG9sYXJpZGFkIikgKyB4bGFiKCJNZXMiKSsNCiAgdGhlbWVfbGlnaHQoKQ0KDQpgYGANCg0KDQoNCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQp0d2VldHNfZnVsbCAlPiUgbXV0YXRlKGFjcm9zcyhjKGFuZ2VyOnRydXN0KSwgfmlmZWxzZSgueD49MSwxLDApKSkgJT4lICANCiAgc3VtbWFyaXplKGFjcm9zcyhjKGFuZ2VyOnRydXN0KSwgfnN1bSgueCkpKSAlPiUgDQogIG11dGF0ZShhY3Jvc3MoYyhhbmdlcjp0cnVzdCksIH4oLngpL25yb3codHdlZXRzX2Z1bGwpKjEwMCkpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBldmVyeXRoaW5nKCksbmFtZXNfdG8gPSAiZW1vdGlvbiIsIHZhbHVlc190byA9ICJ2YWx1ZXMiKSAlPiUgDQogIGZpbHRlcighZW1vdGlvbiAlaW4lIGMoInBvc2l0aXZlIiwibmVnYXRpdmUiKSkgJT4lIA0KICAgZ2dwbG90KGFlcyh5PXZhbHVlcywgeD1lbW90aW9uLGZpbGw9ZW1vdGlvbikpICsNCmdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC45LCBwcmVzZXJ2ZSA9ICJzaW5nbGUiKSkrICAgICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iUmRZbEJ1IikgKw0KICAgICAgZ2d0aXRsZSgiQW7DoWxpc2lzIGRlIGVtb2Npb25lcyBkZSBBTUxPIGVuIFR3aXR0ZXIiKSAgKyB5bGFiKCJQb3JjZW50YWplIGRlIFR3ZWV0cyIpICsgeGxhYigiRW1vY2lvbmVzIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsNCiAgIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCkpDQoNCmBgYA0KDQpgYGB7cixlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KdHdlZXRzX2Z1bGwgJT4lICANCiAgbXV0YXRlKGFjcm9zcyhjKGFuZ2VyOnRydXN0KSwgfmlmZWxzZSgueD49MSwxLDApKSkgJT4lIG11dGF0ZShjcmVhdGVkX2F0PXltZF9obXMoY3JlYXRlZF9hdCkpICU+JSANCiAgZ3JvdXBfYnkobW9udGg9Zmxvb3JfZGF0ZShjcmVhdGVkX2F0LCJtb250aCIpKSAlPiUNCiAgc3VtbWFyaXplKGFjcm9zcyhjKGFuZ2VyOnRydXN0KSwgfnN1bSgueCkpLG49bigpKSAlPiUgDQogIG11dGF0ZShhY3Jvc3MoYyhhbmdlcjp0cnVzdCksIH4oLngpL24qMTAwKSkgJT4lIA0KICBwaXZvdF9sb25nZXIoYW5nZXI6dHJ1c3QsbmFtZXNfdG8gPSAiZW1vdGlvbiIsIHZhbHVlc190byA9ICJ2YWx1ZXMiKSAlPiUgDQogIGZpbHRlcighZW1vdGlvbiAlaW4lIGMoInBvc2l0aXZlIiwibmVnYXRpdmUiKSkgJT4lICANCiAgZ2dwbG90KGFlcyh5PXZhbHVlcywgeD1tb250aCxjb2xvcj1lbW90aW9uKSkgKw0KICAgICAgICBnZW9tX2xpbmUoKSsNCiAgZ2d0aXRsZSgiQW7DoWxpc2lzIGRlIGVtb2Npb25lcyBkZSBBTUxPIGVuIFR3aXR0ZXIgYSBsbyBsYXJnbyBkZWwgdGllbXBvIikgICsgeWxhYigiUG9yY2VudGFqZSBkZSBUd2VldHMiKSArIHhsYWIoIk1lcyIpKw0KICB0aGVtZV9saWdodCgpDQoNCmBgYA0KDQoNCg0KIyMgUGFydGlkb3MgUG9sw610aWNvcw0KDQoNCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQp0d2VldHNfZnVsbCU+JSANCiAgbXV0YXRlKHRleHQgPSBzdHJfcmVwbGFjZV9hbGwodGV4dCwgImh0dHBzOi8vdC5jby9bQS1aYS16XFxkXSt8JmFtcDsiLCAiIikpICU+JSANCiAgICBtdXRhdGUoUEFOID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIlBBTnxbUHBdYXJ0aWRvIFtBYV1jY2lbw7NvXW4gW05uXWFjaW9uYWwiKSwgMSwwKSwNCiAgICAgICAgICAgUFJJID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIlBSSSx8IFBSSSB8UFJJXFwufFtQcF1hcnRpZG8gW1JyXWV2b2x1Y2lvbmFyaW8gW0lpXW5zdGl0dWNpb25hbCIpLCAxLDApLA0KICAgICAgICAgICBQUkQgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiUFJEfA0KW1BwXWFydGlkbyBbZERdZSBbTGxdYSBbUnJdZXZvbHVjaVvDs09dbiBbRGRdZW1vY3JbQcOhXXRpY2EiKSwxLDApLA0KICAgICAgICAgICBNb3JlbmEgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW01tXW9yZW5hIiksIDEsMCksDQogICAgICAgICAgIFBUID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIlBUfFtQcF1hcnRpZG8gW2REXWVsIFtUdF1yYWJham8iKSwgMSwwKSwNCiAgICAgICAgICAgTUMgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiTUN8W01tXW92aW1pZW50byBbQ2NdaXVkYWRhbm8iKSwgMSwwKSwNCiAgICAgICAgICAgUFYgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW1BwXWFydGlkbyBbVnZdZXJkZSIpLCAxLDApKSU+JQ0KICAgc3VtbWFyaXplKGFjcm9zcyhjKFBBTjpQViksIH5zdW0oLngpKSkgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGV2ZXJ5dGhpbmcoKSxuYW1lc190byA9ICJlbW90aW9uIiwgdmFsdWVzX3RvID0gInZhbHVlcyIpICU+JSANCiAgIGdncGxvdChhZXMoeT12YWx1ZXMsIHg9ZW1vdGlvbixmaWxsPWVtb3Rpb24pKSArDQpnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aCA9IDAuOSwgcHJlc2VydmUgPSAic2luZ2xlIikpKyAgICAgIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IlJkWWxCdSIpICsNCiAgICAgIGdndGl0bGUoIk7Dum1lcm8gZGUgTWVuY2lvbmVzIHBvciBQYXJ0aWRvIFBvbMOtdGljbyIpICArIHlsYWIoIk7Dum1lcm8gZGUgVHdlZXRzIikgKyB4bGFiKCJQYXJ0aWRvcyBQb2zDrXRpY29zIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSArDQogICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpKQ0KICANCiAgDQoNCmBgYA0KDQoNCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KZGF0YTIgJT4lIA0KZ2dwbG90KGFlcyhwYXJ0aWRvLCBwcm9wLCBmaWxsID0gc2VudGltZW50bykpICsNCmdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC45LCBwcmVzZXJ2ZSA9ICJzaW5nbGUiKSkrICAgICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iUmRZbEJ1IikgKw0KICAgICAgZ2d0aXRsZSgiQW7DoWxpc2lzIGRlIHNlbnRpbWllbnRvcyBwb3IgUGFydGlkbyBQb2zDrXRpY28iKSAgKyB5bGFiKCJQb3JjZW50YWplIGRlIFR3ZWV0cyIpICsgeGxhYigiUGFydGlkb3MgUG9sw610aWNvcyIpK3RoZW1lX2xpZ2h0KCkgKw0KICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKSArDQogICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpKQ0KYGBgDQoNCkVtb2Npb25lcyANCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQpkYXRhMyAlPiUgZmlsdGVyKGlzLm5hKHBhcnRpZG8pPT1GQUxTRSkgJT4lIG11dGF0ZShwcm9wPWlmZWxzZShpcy5uYShwcm9wKSwgMCxwcm9wKSkgJT4lIA0KICBmaWx0ZXIocHJvcCE9MCkgJT4lIA0KZ2dwbG90KGFlcyhwYXJ0aWRvLCBwcm9wLCBmaWxsID0gZW1vdGlvbikpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjksIHByZXNlcnZlID0gInNpbmdsZSIpKSsgICAgICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJSZFlsQnUiKSArDQogICAgICBnZ3RpdGxlKCJBbsOhbGlzaXMgZGUgZW1vY2lvbmVzIHBvciBQYXJ0aWRvIFBvbMOtdGljbyIpICArIHlsYWIoIlBvcmNlbnRhamUgZGUgVHdlZXRzIikgKyB4bGFiKCJQYXJ0aWRvcyBQb2zDrXRpY29zIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsNCiAgIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCkpDQpgYGANCiMjIFTDqXJtaW5vcyBkZSBJbnRlcsOpcw0KDQpgYGB7cixlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KdHdlZXRzX2Z1bGwlPiUgDQogIG11dGF0ZSh0ZXh0ID0gc3RyX3JlcGxhY2VfYWxsKHRleHQsICJodHRwczovL3QuY28vW0EtWmEtelxcZF0rfCZhbXA7IiwgIiIpKSAlPiUgDQogICAgbXV0YXRlKEFNTE8gPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiQU1MTyIpLCAxLDApLA0KICAgICAgICAgICBCaWVuZXN0YXIgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW0JiXWllbmVzdGFyIiksIDEsMCksDQogICAgICAgICAgIENVQVRST19UID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIiM0VCIpLDEsMCksDQogICAgICAgICAgIE1vcmVuYSA9IGlmZWxzZShzdHJfZGV0ZWN0KHRleHQsICJbTW1db3JlbmEiKSwgMSwwKSwNCiAgICAgICAgICAgRmVsaXBlX0NhbGRlcm9uID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIltGZl1lbGlwZSBbQ2NdYWxkZXJbb8OzXW4iKSwgMSwwKSwNCiAgICAgICAgICAgU2FtdWVsX0dhcmNpYSA9IGlmZWxzZShzdHJfZGV0ZWN0KHRleHQsICJbU3NdYW11ZWwgW0dnXWFyY1tpw61dYSIpLCAxLDApLA0KICAgICAgICAgICBUcmVuX01heWEgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW1R0XXJlbiBbTW1dYXlhIiksIDEsMCksDQogICAgICAgICAgIFJlZmluZXJpYV9Eb3NfQm9jYXMgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW1JyXWVmaW5lcmlhIFtEZF1vcyBbQmJdb2NhcyIpLCAxLDApLA0KICAgICAgICAgICAgQXlvdHppbmFwYSA9IGlmZWxzZShzdHJfZGV0ZWN0KHRleHQsICJbQWFdeW90emluYXBhIiksIDEsMCkNCiAgICAgICAgICAgKSU+JQ0KICAgc3VtbWFyaXplKGFjcm9zcyhjKEFNTE86QXlvdHppbmFwYSksIH5zdW0oLngpKSkgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGV2ZXJ5dGhpbmcoKSxuYW1lc190byA9ICJlbW90aW9uIiwgdmFsdWVzX3RvID0gInZhbHVlcyIpICU+JSANCiAgIGdncGxvdChhZXMoeT12YWx1ZXMsIHg9ZmN0X3Jlb3JkZXIoZW1vdGlvbix2YWx1ZXMpLGZpbGw9ZW1vdGlvbikpICsNCmdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC45LCBwcmVzZXJ2ZSA9ICJzaW5nbGUiKSkrICAgICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iUmRZbEJ1IikgKw0KICAgICAgZ2d0aXRsZSgiTsO6bWVybyBkZSBNZW5jaW9uZXMgcG9yIFBhbGFicmEgQ2xhdmUiKSAgKyB5bGFiKCJOw7ptZXJvIGRlIFR3ZWV0cyIpICsgeGxhYigiIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSArDQogICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpKStjb29yZF9mbGlwKCkNCmBgYA0KDQoNCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KZGF0YTMgJT4lIA0KZ2dwbG90KGFlcyh0ZXJtaW5vLCBwcm9wLCBmaWxsID0gc2VudGltZW50bykpICsNCmdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC45LCBwcmVzZXJ2ZSA9ICJzaW5nbGUiKSkrICAgICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iUmRZbEJ1IikgKw0KICAgICAgZ2d0aXRsZSgiQW7DoWxpc2lzIGRlIHNlbnRpbWllbnRvcyBwb3IgdMOpcm1pbm9zIGRlIGludGVyw6lzIikgICsgeWxhYigiUG9yY2VudGFqZSBkZSBUd2VldHMiKSArIHhsYWIoIlTDqXJtaW5vcyBkZSBJbnRlcsOpcyIpK3RoZW1lX2xpZ2h0KCkgKw0KICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKSArDQogICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpKQ0KYGBgDQoNCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQpkYXRhNSAlPiUgZmlsdGVyKGlzLm5hKHBhcnRpZG8pPT1GQUxTRSkgJT4lIG11dGF0ZShwcm9wPWlmZWxzZShpcy5uYShwcm9wKSwgMCxwcm9wKSkgJT4lIA0KICBmaWx0ZXIocHJvcCE9MCkgJT4lIA0KZ2dwbG90KGFlcyhwYXJ0aWRvLCBwcm9wLCBmaWxsID0gZW1vdGlvbikpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjksIHByZXNlcnZlID0gInNpbmdsZSIpKSsgICAgICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJSZFlsQnUiKSArDQogICAgICBnZ3RpdGxlKCJBbsOhbGlzaXMgZGUgZW1vY2lvbmVzIHBvciB0w6lybWlub3MgZGUgaW50ZXLDqXMiKSAgKyB5bGFiKCJQb3JjZW50YWplIGRlIFR3ZWV0cyIpICsgeGxhYigiVMOpcm1pbm9zIGRlIEludGVyw6lzIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsNCiAgIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCkpDQpgYGANCg0KDQoNCg==